2013-03-19 119 views
1

希望獲得開源或合理的商業許可產品,該產品可以從Redhat 5.x Linux環境中的JBoss AS5上運行的Java Servlet中使用,將PDF從1.5版轉換爲1.4版。將PDF從servlet轉換爲舊版本?

或者我可以使用任何技巧來修改PDF 1.5內容以回到1.4兼容格式。什麼都不是。

我有一個PDF即將返回作爲對servlet的響應。但它採用1.5格式,這不會顯示在我們客戶的一些adobe5古老版本中。但它在1.4中顯示,所以如果可能的話,我需要一種方法來轉換它。

任何其他解決方法?想法?我都是耳朵!

讓我知道你是否能幫助我!

+0

您的PDF使用哪些1.5-ish功能?如果Adobe Reader 5根本不打開這些文件,那聽起來好像您的文件正在使用交叉引用流(而不是表),甚至可能使用對象流。在這種情況下,PDF將不得不在內部重新編制,在這種情況下,像集成簽名這樣的一些結構會中斷。還是僅僅是版本標籤或類似的問題?在這種情況下,這種改變可能會以一種侵入性較小的方式執行。 – mkl 2013-03-20 08:03:04

+0

我試過版本標籤,沒有工作。所以我們正在使用1.5-ish功能...但是adobe live cycle創建pdf,因此我不確定是什麼原因導致的 – 2013-03-20 08:05:30

+1

請提供您工作流程中的樣本PDF。如果較新的Adobe LC版本創建PDF,則很可能會使用交叉引用和對象流。 – mkl 2013-03-20 08:12:14

回答

2

如果問題實際上是不(僅僅)由文檔而是因爲PDF 1.5允許從根本上改變文檔文件結構(和,因此,由於ADOBE READER 6)---即聲稱版本號交叉引用流(而不是交叉引用表)和對象流---使用iText庫下面的代碼可以幫助你:

PdfReader reader = new PdfReader(SOURCE); 
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(TARGET), '4'); 
stamper.close(); 

這實際上解析原始的PDF文件,並從解析創建一個新的PDF文件PDF對象。但是,默認情況下,iText使用交叉引用或對象流,而不是而不是。因此,新的PDF文件不包含任何內容。

'4'指示iText在目標文件的標題中聲明版本1.4。

根據PDF大小和可用資源的不同,您可能希望使用不同的PdfReader構造函數,而不是將所有源PDF一次性讀入內存,而是僅在需要時纔讀取。

PS:我使用當前的iText 5.4.x版本。 iText根據AGPL的條件或商業條件免費提供。

PPS:如果您想要強制iText使用交叉引用和對象流,則必須在構建stamper之後調用stamper.setFullCompression()

+0

這是否意味着我們可以在沒有任何人付費的情況下使用iText? – 2013-03-20 16:50:58

+0

看起來是商業執照。我已經問過他們的報價。我們拭目以待。 – 2013-03-20 17:00:27

+2

我剛剛認識到@ jimueller對你的問題的回答所提到的答案看起來很像我的答案......我只是在'PdfWriter'中找不到'PdfStamper'中使用的方法'stamper.setPdfVersion',從'PdfWriter'派生的內部iText類... – mkl 2013-03-20 17:02:48

1

看看Set PDF Version using iText.的接受答案iText是一個Java庫,所以我期望它能爲你工作。

+0

PDF已創建。創建一個pdf。不是我想要的。 – 2013-03-20 05:20:53

+0

這種情況下PDF也已創建。它正在讀取PDF字節,設置版本並保存更新的文件。您可能無法避開必須閱讀的步驟,並保存現有文件。 – jimueller 2013-03-20 05:30:06

+0

string.replace(「%PDF-1.5」,「%PDF-1.4」) - 如果您願意,可以使用文本編輯器手動執行此操作。 – jimueller 2013-03-20 05:36:00

1

修改標題PDF版本不會做,你也可以找到在文件目錄

pdf file format specs

引述首要版本信息的PDF文件的第一行標題指定PDF版本 (見7.5.2,「文件頭」)。從PDF 1.4開始,還可以在文檔目錄的版本條目中指定PDF版本,通過覆蓋文件頭中指定的版本,實質上更新與該文件相關聯的版本(請參閱 7.7.2,「文檔目錄「)。如以下段落所述,在打開或保存文檔 時,符合產品的行爲取決於將PDF文件的版本與兼容產品支持的PDF版本進行比較。

+0

同意。我們給出了一個嘗試,並且正在使用這些二進制不兼容性。 – 2013-03-20 17:06:03