Ghostscript将多个eps文件连接成一个大eps文件
Posted
技术标签:
【中文标题】Ghostscript将多个eps文件连接成一个大eps文件【英文标题】:Ghostscript to concatenate multiple eps files into one big eps file 【发布时间】:2016-11-20 21:06:43 【问题描述】:我的任务是将多个小 EPS 文件合并为一个大 EPS,条件是这些小 EPS 不应相互重叠。
我希望这可以通过编程方式完成,而不是使用 GUI 工具手动调整。
我已经尝试过 ghostscript 命令,但最后还是把那些小的 eps 放在了一起。
我还查看了 psutils (psnup/pstops),但我不确定它是否对我有帮助。
我不介意使用像Ghost4j 这样更重的程序/lib(尽管如果它不支持我的需要,我可能必须在那里添加更多功能)。我只是想确保这不能轻量级或使用现有工具完成。
谢谢!
【问题讨论】:
【参考方案1】:您知道 EPS 文件是如何应该被使用的吗? EPS 文件的意义在于它旨在被应用程序用作“黑匣子”。
当应用程序创建 PostScript 程序时,它可以将 EPS 包含在最终输出中,除了大小之外,它不知道任何其他信息。所以当 PostScript 生成时,应用程序知道 EPS 的大小,并修改 CTM 以便根据需要缩放内容,并将其定位在页面上。
如果您想使用多个 EPS 文件,那么您必须这样做,您必须修改每个 EPS 文件之间的 CTM,以便将其放置在您需要的页面大小和位置。如果您不这样做,那么它们都将在页面上的当前位置和比例结束。正如你所说,它们最终会相互叠加。
现在 EPS 文件的全部意义在于它可以通过编程方式放置,但您必须编写程序才能做到这一点:-)
首先您需要从 EPS 文件中解析边界框。如果 EPS 正确符合要求,这将是 %%BoundingBox 和可选的 %%HiResBondingBox cmets。
有了这些信息,您就需要决定您使用的媒体大小和/或如何缩放 EPS 文件以适应所需的媒体。
然后您启动一个新的 PostScirpt 程序,该程序首先请求特定的媒体大小,然后使用 scale
和 translate
运算符移动到媒体上的正确位置,然后执行第一个 EPS 文件(通过包含内容,或使用run
运算符)。
对每个 EPS 文件重复该过程。
最后使用showpage
操作符编写新内容
假设您在 Ghostscript 中使用了 eps2write 设备,生成的文件将是一个新的 EPS 文件,其中体现了各个 EPS 文件的内容,可以根据需要进行缩放和放置。
例如(所有值都只是虚构的示例数据):
%!
<< /PageSize [612 792] >> setpagedevice
gsave
306 396 moveto
0.5 0.5 scale
(example1.eps) run
grestore
gsave
306 0 moveto
1.5 1.5 scale
(example2.eps) run
grestore
gsave
0 396 moveto
(example3.eps) run
grestore
gsave
0 0 moveto
0.66 0.66 scale
(example4.eps) run
grestore
showpage
【讨论】:
谢谢。我可以通过对每个 eps 使用 translate 和 -c 开关来使其工作。以上是关于Ghostscript将多个eps文件连接成一个大eps文件的主要内容,如果未能解决你的问题,请参考以下文章
Ghostscript:将非常小的 eps 升级为大 jpg
Ghostscript:将 EPS 转换为 PNG 时,有时质量会失败
如何在ghostscript中将svg、eps和ai转换为png