2016-11-20 191 views
0

我的任务是将多个小EPS文件合并成一个大EPS,并且条件是这些小EPS不应该彼此重叠。Ghostscript将多个eps文件连接成一个大eps文件

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

我试过ghostscript命令,但我结束了与这些小eps在对方之上。

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

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

谢谢!

回答

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 
+0

谢谢。我可以通过使用每个eps的-c开关一起使用翻译来得到它的工作。 –