2015-02-11 120 views
0

我現在使用Itext PdfSmartCopy。我使用XMLworker將一些業務內容添加到文檔對象中。然後我宣佈了一個閱讀器(將pdf文件連接到這個文檔對象)。然後,我使用相同的文檔對象和輸出文件流作爲參數調用PdfSmartCopy。然後,我使用傳統的步驟將頁面複製到文檔,Itext PdfSmartCopy獲取空指針異常

addHTML(document, htmlStringToBeAdded); 
document.newPage(); 
com.itextpdf.text.pdf.PdfCopy copy = new com.itextpdf.text.pdf.PdfSmartCopy(document, new FileOutputStream("c:\\pdf_issue\\bad_itext3.pdf")); 
com.itextpdf.text.pdf.PdfReader reader=new com.itextpdf.text.pdf.PdfReader("c:\\pdf_issue\\bad1.pdf"); 
// loop over the pages in that document 
n = reader.getNumberOfPages(); 
    for (int page = 0; page < n;) { 
       copy.addPage(copy.getImportedPage(reader, ++page)); 
      } 
copy.freeReader(reader); 
    reader.close(); 

但我在getPageReference獲得空指針異常?有什麼問題?

Exception in thread "main" java.lang.NullPointerException 
    at com.itextpdf.text.pdf.PdfWriter.getPageReference(PdfWriter.java:1025) 
    at com.itextpdf.text.pdf.PdfWriter.getCurrentPage(PdfWriter.java:1043) 
    at com.itextpdf.text.pdf.PdfCopy.addPage(PdfCopy.java:356) 
    at com.jci.util.PdfTest.main(PdfTest.java:627) 

但是這片效果很好,如果我用一個新的文檔對象即不增加業務內容。

+0

這將有助於看PDF或失敗的任何文件? – 2015-02-11 11:04:51

+0

嗨@PauloSoares,如果您想要重現問題的示例,請查看https://jira.itextsupport.com/browse/DEV-1256。 – 2015-02-11 11:24:37

+0

嗨@布魯諾,我無法訪問上述鏈接。你能幫我解決這個問題嗎? – dev123 2015-02-11 12:05:27

回答

4

我們在關閉的問題跟蹤器中有類似的問題。在該票中,似乎Document需要在PdfCopy實例創建後立即打開。

在你的情況,我們看到了類似的問題:您使用Document對象從頭開始創建一個PDF,然後使用相同Document創建現有的PDF的副本。這不能工作:你需要關閉你從頭開始創建第一個文件,然後複製過程中創建一個新的Document

// first create the document 
Document document = new Document(); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
PdfWriter.getInstance(document, baos); 
document.open(); 
addHTML(document, htmlStringToBeAdded); 
document.close(); 
// Now you can use the document you've just created 
PdfReader reader = new PdfReader(baos.toArray()); 
PdfReader existing = new c PdfReader("c:\\pdf_issue\\bad1.pdf"); 
document = new Document(); 
PdfCopy copy = new PdfSmartCopy(document, new FileOutputStream("c:\\pdf_issue\\bad_itext3.pdf")); 
document.open(); 
copy.addDocument(reader); 
copy.addDocument(existing); 
document.close(); 
reader.close(); 
existing.close(); 
+0

感謝布魯諾。這是有道理的,併爲我提供了我正在尋找的解決方案。讓我試試看。 – dev123 2015-02-12 09:45:45