史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 應用軟體使用技術文件
忘記密碼?
註冊帳號 論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2003-11-17, 12:33 PM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17383
現金: 5257 金幣
資產: 33847 金幣
預設 分割/合併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結構的東西。
psac 目前離線  
送花文章: 3, 收花文章: 1601 篇, 收花: 3153 次
舊 2003-12-11, 08:52 PM   #2 (permalink)
hb122789777
榮譽勳章

勳章總數
UID -
在線等級:
文章: n/a
精華:
預設

謝謝大大
 
送花文章: 0, 收花文章: 0 篇, 收花: 0 次
 


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 11:59 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2014, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1