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

时间:2016-11-20 21:06:44

标签: ghostscript postscript eps ghost4j

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

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

我已尝试过ghostscript命令,但我最终将这些小eps放在了彼此之上。

我也看看psutils(psnup / pstops),但我不确定它是否能帮到我。

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

谢谢!

1 个答案:

答案 0 :(得分:2)

您是否知道如何使用EPS文件假设? EPS文件的要点是它应该被应用程序用作“黑匣子”。

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

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

现在,EPS文件的重点在于它可以通过编程方式放置,但必须编写程序来执行此操作: - )

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

有了这些信息,您需要决定使用的媒体大小和/或如何缩放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