Ghostscript 将多个 eps 文件连接成一个大 eps 文件

Ghostscript to concatenate multiple eps files into one big eps file

我的任务是将多个小 EPS 文件合并为一个大 EPS,条件是这些小 EPS 不能相互重叠。

我希望这可以通过编程方式完成,而不是使用 GUI 工具手动调整它们。

我已经尝试过 ghostscript 命令,但我最终得到的是那些小的 eps 相互叠加。

我也看过 psutils (psnup/pstops),但我不确定它是否对我有帮助。

我不介意使用更重的 program/lib,例如 Ghost4j(尽管如果它不支持我的需要,我可能不得不添加更多功能)。我只是想确保这不能轻量级或使用现有工具完成。

谢谢!

您是否知道应该如何使用 EPS 文件? EPS 文件的要点在于它旨在被应用程序用作 'black box'。

当应用程序创建 PostScript 程序时,它可以在最终输出中包含 EPS,除了它的大小之外不知道任何其他信息。所以当生成PostScript时,应用程序知道EPS的大小,并修改CTM以根据需要缩放内容,并将其定位在页面上。

如果您想使用多个 EPS 文件,则必须执行相同的操作,您必须修改每个 EPS 文件之间的 CTM,以便将其放置在页面上所需的大小和位置。如果您不这样做,那么它们都会在页面上的当前位置和比例结束。正如你所说,它们最终会相互重叠。

现在 EPS 文件的全部意义在于它可以通过编程方式放置,但是必须编写程序才能做到:-)

首先你需要从EPS文件中解析边界框。如果 EPS 正确符合,这将是 %%BoundingBox 和可选的 %%HiResBondingBox 评论。

有了这些信息,您就需要决定要使用的媒体大小 and/or 如何缩放 EPS 文件以适合所需的媒体。

然后启动一个新的 PostScirpt 程序,该程序首先请求特定的媒体大小,然后使用 scaletranslate 运算符移动到媒体上的正确位置,然后执行第一个 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