2015-05-07 65 views
2

How can I remove all images from a PDF?中,Kurt Pfeifle給出了一段PostScript代碼(由Chris Liddell提供),使用GhostScript過濾掉PDF中的所有位圖。如何從PDF中刪除位圖以外的所有內容?

這件作品像一個魅力;不過,我也對刪除以及PDF中的位圖以及不重新壓縮位圖的所有任務感興趣。或者,最終,將矢量和位圖「圖層」分開。 (我知道,這不是PDF術語中的一個圖層。)

AFAIU,Kurt的過濾器通過將所有位圖發送到空設備,而將所有其他設備保留爲pdfwrite。我讀過可以在GS中使用不同的設備,所以我希望默認情況下可以將所有內容發送到虛假/空白設備,並且僅對於由過濾器捕獲的圖像切換到pdfwrite。但不幸的是,我完全無法將這樣的東西翻譯成PostScript代碼。

任何人都可以幫忙,或者至少告訴我這種方法是否註定要失敗?

+0

如果您正在尋找ghostscript解決方案,無法提供幫助,但是我想讓您知道,如果您可以使用商業工具,則有非常優雅的基於PDF的解決方案。如果你也對此感興趣,我可以解釋更多。 –

+0

謝謝大衛。事實上,我正在尋找至少一種免費的啤酒供個人使用的工具;雖然不一定是自由的。所以社區版本中的[CoherentPDF](http://community.coherentpdf.com/)就會很好(順便說一下,它與'-draft'選項相反,但它更接近已經捆綁的東西在主要的Linux發行版中效果更好,並且需要Linux支持 – akobel

回答

3

它可能,但它的工作量很大。

你不能從nulldevice開始,並根據需要推送pdfwrite設備,這是行不通的,因爲pdfwrite設備一旦卸載它就會寫出累積的PDF文件。重新加載它將啓動一個新的PDF文件。

此外,您還需要pdfwrite設備的相同實例的所有代碼,所以你不能加載pdfwrite設備,加載nulldevice,那麼只有你想要的位再次加載pdfwrite設備。這意味着(現在)工作的唯一方法是Chris寫的。您需要加載pdfwrite,並在需要靜默使用操作時將空設備推入到位。

只是'圖像'的變化是相當有限的,因爲沒有那麼多的處理圖像的操作符。

爲了除去圖像以外的所有東西,但是有一個批次的操作員。你需要重寫;中風,填充,eofill,rectstroke,rectfill,ustroke,ufill,ueofill,shfill,show,ashow,widthshow,awidthshow,xshow,xyshow,yshow,glyphshow,cshow和kshow。我可能錯過了一些運營商,但至少這些都是基礎知識。該代碼克里斯最初發布沒有實際過濾各種類型的對象,而不僅僅是圖像

注意,你可以在這裏找到自己的代碼:

http://www.ghostscript.com/~chrisl/filter-obs.ps

請注意這僅僅是不支持的示例代碼。

+0

這太好了,非常感謝,所以看起來好像需要兩次傳遞才能分離位圖和矢量內容,我找不到Chris的原始代碼;謝謝該鏈接。使用他的過濾器。ps與'-dFILTERIMAGE'或'-dFILTERFILL -dFILTERSTROKE -dFILTERSHOW'幾乎可以達到我所需要的。 - 差不多,因爲現在我沒有辦法告訴GS不重新編碼/重新壓縮位圖。但是,這將成爲另一個問題,我猜... – akobel

+0

如果你想在不同的文件中的不同的對象,那麼是的,你需要兩個(或更多)通行證。至於壓縮,其在文件..... – KenS

+0

這兩個通過沒有問題。關於壓縮,我找不到任何東西。 IIUC,GS總是解釋圖像,並且簡單的透視似乎不可用(例如[Kurt在此處的信息](http://superuser.com/questions/360216/use-ghostscript-but-tell-it-to-not -reprocess圖像#答案-373740))。至少jbig2 - > ccitt轉換並不算太壞,但也會重新壓縮JPEG。 '-dAutoFilterColorImages = false'對此沒有幫助,要麼...... – akobel

相關問題