2017-02-14 37 views
-1

我一直在研究一個模塊,它需要使用itext標記所有PDF的第一頁。 雖然代碼是爲工作正常正常PDF當我嘗試投資組合PDF文件相同的邏輯。下面是相同的代碼片段的:使用itext壓印組合的第一頁pdf

try { 

     PdfReader reader = new PdfReader("D:\\Test\\test.pdf"); 
     System.out.println(reader.getNumberOfPages()); 

     PdfStamper stamper = new PdfStamper(reader,new FileOutputStream("D:\\Test\\test_stamped.pdf")); 



     PdfContentByte canvas = stamper.getOverContent(i); 

     PdfDictionary root = reader.getCatalog(); 

     canvas.beginText(); 
     BaseFont baseFont = BaseFont.createFont(BaseFont.HELVETICA_BOLD, "ASCII", false); 
     canvas.setFontAndSize(baseFont, 14); 
     canvas.setRGBColorFill(255, 0, 0); 
     canvas.showTextAligned(PdfContentByte.ALIGN_CENTER, "Test Stamping-Pg"+i, 30, 1, 0); 
     canvas.endText(); 

     stamper.setFormFlattening(true); 
     stamper.close(); 
     reader.close(); 
     System.out.println("Stamping complete.."); 

    } catch (Throwable t) { 

     t.printStackTrace(); 
    } 

這將是非常有益的,如果有人可以幫助我吧。

+0

發生了什麼,或沒有發生什麼? – Sid

回答

1

根據PDF規範ISO 32000-1(其中「投資組合」被稱爲「便攜式集合」),

當符合讀者首先打開一個包含集合的PDF文檔時,應當顯示初始文檔的內容,以及目錄名稱樹EmbeddedFiles中的文檔列表。文檔列表應包括集合模式指定的附加文檔信息。最初的文檔可能是容器PDF或嵌入式文檔之一。注2:初始文檔中的頁面內容應包含幫助用戶理解集合中包含的內容的信息,例如標題和介紹性段落。

因此,萬一初始文件不是容器文檔而是包含在一個,你必須包含文件,對其進行操作,並與收集您的操作版本替換其原始版本提取物。

您可以檢查初始文件是否爲容器文檔而是包含在一個通過檢查的集合詞典:

表155 - 項在收集字典

d 字節字符串 (可選)一個字符串,用於標識名稱樹中的條目EmbeddedFiles名稱樹d確定最初應該在用戶界面上顯示的文件。如果D條目丟失或出錯,則最初的文檔應該是包含集合詞典的文檔。