0

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

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

我已经尝试过 ghostscript 命令,但最后我把那些小的 eps 放在了一起。

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

我不介意使用像Ghost4j这样更重的程序/lib (尽管如果它不支持我的需要,我可能必须在那里添加更多功能)。我只是想确保这不能轻量级或使用现有工具完成。

谢谢!

4

1 回答 1

2

您知道 EPS 文件应该如何使用吗?EPS 文件的重点在于它旨在被应用程序用作“黑匣子”。

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

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

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

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

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

然后,您启动一​​个新的 PostScirpt 程序,该程序首先请求特定的媒体大小,然后使用scaleandtranslate运算符移动到媒体上的正确位置,然后执行第一个 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
于 2016-11-21T08:29:53.580 回答