2014-10-12 148 views
0

在我的應用程序中,我必須將條形碼圖像添加到現有的PDF文檔中。我可以寫零字節的修改後的PDF。我是iText的新手。我無法在這段代碼中發現問題,也沒有時間分析使其工作。將圖像添加到現有文檔

PdfReader reader = null ; 
PdfStamper pdfStamper = null ; 
PdfWriter writer = null ; 

reader = new PdfReader("....\\barcode.pdf"); 
pdfStamper = new PdfStamper(reader, new FileOutputStream(); 

Barcode128 code128 = new Barcode128(); 
String barcodeValue = "" ; 
code128.setCode(barcodeValue); 
PdfContentByte contentByte = null ; 

for(int i = 1 ; i <= reader.getNumberOfPages() ; i ++){ 
     contentByte = pdfStamper.getUnderContent(i); 
     code128.setAltText(""); 
     code128.setBarHeight((float) (10)); 

     Image image = code128.createImageWithBarcode(contentByte, null, null); 
     image.setAbsolutePosition(23f, 20f); 
     image.setBackgroundColor(CMYKColor.WHITE); 

     image.setWidthPercentage(75); 
     contentByte.fill(); 
     contentByte.addImage(image); 
     contentByte.fill(); 
} 
PdfDocument pdfDocument = contentByte.getPdfDocument(); 
writer = PdfWriter.getInstance(pdfDocument, new FileOutputStream()); 

reader.close(); 
pdfStamper.close(); 
writer.close(); 

回答

4

確實很清楚,您沒有時間編寫代碼,因爲它充滿了錯誤。即使你的問題是錯的!你問「我如何將圖像添加到現有的PDF?」但是,在閱讀您的代碼時,您實際上想要爲現有PDF的每個頁面添加條形碼。您創建一個條形碼,然後將其轉換爲圖像。爲什麼不添加條形碼作爲Form XObject?此外,你完全不清楚爲什麼你使用contentByte.fill()。此外,您正在硬編碼的位置添加圖像。這是明智的嗎?

我已經寫了增加條形碼到PDF的每一頁與16頁的例子:StampBarcode

PdfReader reader = new PdfReader(src); 
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); 
int n = reader.getNumberOfPages(); 
Rectangle pagesize; 
for (int i = 1; i <= n; i++) { 
    PdfContentByte over = stamper.getOverContent(i); 
    pagesize = reader.getPageSize(i); 
    float x = pagesize.getLeft() + 10; 
    float y = pagesize.getTop() - 50;  
    BarcodeEAN barcode = new BarcodeEAN(); 
    barcode.setCodeType(Barcode.EAN8); 
    String s = String.valueOf(i); 
    s = "00000000".substring(s.length()) + s; 
    barcode.setCode(s); 
    PdfTemplate template = 
      barcode.createTemplateWithBarcode(over, BaseColor.BLACK, BaseColor.BLACK); 
    over.addTemplate(template, x, y); 
} 
stamper.close(); 
reader.close(); 

正如你所看到的,我已經使用了條碼EAN8顯示頁碼(填充用零)。我根據要添加條形碼的頁面的頁面大小計算出xy的值。我不創建一個Image對象。相反,我使用PdfTemplate對象。

這是生成的PDF:add_barcode.pdf

正如你所看到的,有一個在每個頁面的左上角的條形碼。

額外注:

有人有膽量downvote這個答案。我不明白爲什麼。我能想到的唯一原因是我的答案太好了,因爲我解釋瞭如何添加條形碼而不是圖像。請允許我解釋這是如何完成的。用addImage()方法代替addTemplate()方法就足夠了。

for (int i = 1; i <= n; i++) { 
    PdfContentByte over = stamper.getOverContent(i); 
    pagesize = reader.getPageSize(i); 
    float x = pagesize.getLeft() + 10; 
    float y = pagesize.getTop() - 50; 
    Image img = Image.getInstance("image" + i + ".jpg"); 
    img.setAbsolutePosition(x, y); 
    over.addImage(img); 
}