2012-12-21 94 views
1

我想要完成的是使用bbox中描述的輸出裁剪我的PostScript文件,名爲example.ps。我正在批處理中執行此操作,其中bbox對於某些文件可能會有所不同。我看了pdfcrop並看到它使用了類似的方法。這裏是我現在用來裁剪的命令。GhostScript使用bbox來裁剪Postscript文件

gs -o cropped.pdf \ 
    -sDEVICE=pdfwrite \ 
    -dDEVICEWIDTHPOINTS=160 \ 
    -dDEVICEHEIGHTPOINTS=840 \ 
    -dFIXEDMEDIA \ 
    -c "0 0 translate 0 0 160 840 rectclip" \ 
    -f example.ps 

該命令的問題是我必須指定要使用的寬度和高度。我想要發生的是如何首先調用bbox,然後通過代碼或通過使用某些命令行重定向來調用此語句。

+0

是簡單的解析輸入文件,讀取BB線和煮了相應的GS命令。具體情況取決於您想使用哪種語言。 – agentp

+0

postscipt中的bbox行不正確,所以我需要使用bbox命令來查找正確的bbox。然後根據bbox的輸出創建gs命令。 –

+0

這是Windows cmd.exe的shell?我可以幫助bash和awk,但我不知道目前的窗戶。 –

回答

3

首先,請注意,並非來自多頁PostScript文件的每個頁面都會顯示完全相同的「邊界框」值(實際上,這很少見)。所以你可能想找出所有可能的邊界框(其中包括它們全部)上的公分母

其次,你在控制檯窗口中查看運行是標準輸入標準輸出輸出通道的混合。但是,您所查看的信息是stderr。如果將命令輸出重定向到文件,則捕獲的是stdout,而不是stderr!要壓制一些版本和調試信息去stderr-q加到命令行。

所以爲了得到的包圍盒「乾淨*輸出的所有網頁,你必須重新定向標準錯誤通道第一,然後您可以在文件info.txt捕捉。所以像這樣運行(或類似)的命令:

gs    \ 
    -dBATCH  \ 
    -dNOPAUSE  \ 
    -q   \ 
    -sDEVICE=bbox \ 
    example.ps \ 
2>&1   \ 
| tee info.txt 

,甚至這一點,你應該不需要對HiResBoundingBox的信息:

gs    \ 
    -dBATCH  \ 
    -dNOPAUSE  \ 
    -q   \ 
    -sDEVICE=bbox \ 
    example.ps \ 
2>&1   \ 
| grep ^%%Bound \ 
| tee info.txt 

另外,順便說一句,注意可以確定邊界框PostScript以及PDF輸入文件。

這應該給像下面這樣,每一行代表輸入文件的網頁,在第一行開始第1頁你輸出:

%%BoundingBox: 36 18 553 802 
%%BoundingBox: 37 18 553 804 
%%BoundingBox: 36 18 553 802 
%%BoundingBox: 37 668 552 803 
%%BoundingBox: 40 68 532 757 

最後,你可能需要閱讀起來在下面的答案中找到關於Ghostscript的bbox設備的一些背景信息。您還可以找到的種植工作有一些可供選擇的PostScript代碼:

+0

我使用Windows,所以我無法使用grep和tee命令重定向stderr –

+0

@ user1864948:在Windows上,而不是grep,您可以使用'findstr「%% Bound」'。您可以使用正常的重定向,而不是'tee':'1> info.txt'。 –