2016-11-20 186 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開關一起使用翻譯來得到它的工作。 –