|
論壇說明 | 標記討論區已讀 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2003-11-17, 12:33 PM | #1 |
榮譽會員
|
分割/合併PDF檔
最近因有需要把一個PDF檔分割和把數個PDF合併而作了一些研究,現在寫出來給大家指教一下。
在Windows平台,有不少軟體可幫手,如ARTS Split & Merge Lite, ARTS Split Pro, Appligent Append PDF等。基本上都可在PDFStore找到: http://www.pdfstore.com/category.asp?CtgID=5 但這些軟體有二問題,一是$,都貴得驚人。二是這些軟體是Windows界面,不支援cross platform和batch mode。 移到Unix平台去一找,類似的軟體基本上有二種implementation methods。 第一種,是軟體本身有自己的PDF Raster Engine和PDF Output Device。所謂的分割/合併PDF檔,只不過是把輸入的PDF以PDF Raster Engine轉成特定格式,原理和把PDF轉成PCL或Postscript後再送到Printer一樣,只不過現在是PDF經PDF Raster Engine,再轉回PDF而已。這類軟體以Ghostscript最為人熟知。Ghostscript可在此下: http://www.cs.wisc.edu/~ghost/ 合併PDF是這樣做的: gs -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf *.pdf 分割也大同小異,語法看看Manaul吧。 這種做法最大優點是:一,不用錢,二,因這做法是把原文件經PDF Raster Engine輸入,整合後再經PDF Writer輸出,所以理論上,只要軟體Raster Engine支援的文件格式,都可把其分割/合併。事實上,Ghostscript本身就支援PDF/Postscript,把數個Postscript和PDF混合成一檔也可以。 但這方法最大的問題是,因所有的工作基本上要經Raster Engine,所以PDF文件中用到的Font要全裝上Ghostscript, 再者,合成的PDF比原檔總和大不少。 除了Ghostscript, TexExec (Latex類的) 也是類似原理。 第二類軟體,是純在原文件作Syntactical Changes。如要合併二個PDF,這二個PDF有各自的Object List, Cross-Reference Table等,所謂合併,是把Object List, Cross-Reference Table等二合為一,這要對如Object ID之類的東西重新編號,這種軟體通常不大,執行快。而且因純是把原文件Parse和Generate Output File, 合成的PDF和原檔總和相約。 這裡介紹二個這類軟體,一個是Perl Module, 另一個是Java Jar. a. PDF Extract (Perl Module). 用於分割PDF。可在這下Readme & Programme: http://cpan.pair.com/modules/by-cate...ct-2.05.readme http://cpan.pair.com/modules/by-cate...ct-2.05.tar.gz 安裝PDF Extract這個module後,只要三行碼便可把PDF中數頁抽出,如1至3,5和8頁。 use PDF::Extract; $pdf = new PDF::Extract( PDFDoc =>"input.pdf", PDFPages =>"1-3 5 8" ) ; $pdf->servePDFExtract; 簡單了吧。可惜是PDF Extract的作者未完成PDF::Merge。 b. PJ Classics / PJ Professional 很強的Java Library (Jar), 支援不少PDF有關功能。分割/合併只是其一。PJ Classics是不用錢的,但較慢和需較大記憶體。PJ Professional 是要錢的版本。URL是: http://www.etymon.com/pdf_products.html 以下是以PJ Classics結合input1.pdf和input2.pdf的Java碼。用Java Jar有不少便利,特別是如果你要開取JSP/Servlet, 或XSLT等。 import com.etymon.pj.*; public class Test { public static void main (String args[]) { try { Pdf pdf = new Pdf("input1.pdf"); pdf.appendPdfDocument(new Pdf("input2.pdf")); pdf.writeToFile("output.pdf"); } catch (java.io.IOException ex) {System.out.println(ex);} catch (com.etymon.pj.exception.PjException ex) {System.out.println(ex);} } } 說了一大篇,希望有用,有空再寫寫有關PDF結構的東西。 |
送花文章: 3,
|