2016-10-31 74 views
0

爲了查找添加的圖像文件並在下次閱讀PDF時將其替換爲另一個圖像文件,我想使用Itext將圖像文件添加到現有的PDF中,併爲其聲明唯一的名稱。 我的代碼:如何使用Itext將圖像文件添加到現有PDF中,併爲其聲明唯一的名稱?

final PdfName key = new PdfName("MY_SIGN_KEY"); 
    final PdfName val = new PdfName("MY_SIGN_VAL"); 

    Image signImage=Image.getInstance(signPngFile.getAbsolutePath()); 
    signImage.setAlignment(1); 
    signImage.scaleAbsolute(newWidth, newHeight); 
    signImage.setAbsolutePosition(200,200); 

    PdfContentByte over = stamper.getOverContent(1); 
    PdfImage stream = new PdfImage(signImage, "", null); 
    stream.put(key,val);// a unique name for it.(設置唯一標識符) 

    //PdfIndirectObject ref=over.getPdfWriter().addToBody(stream); 
    //signImage.setDirectReference(ref.getIndirectReference()); 
    over.addImage(signImage); 
+0

您正在使用我書中的代碼來解釋如何滿足您的要求。你的問題是什麼?看來你已經知道答案了。 –

+0

對不起,我沒有描述清楚,上面的代碼可以將圖像添加到PDF。但名稱與圖像無關。 如果代碼未被註釋: PdfIndirectObject ref = over。 GetPdfWriter(。)addToBody(stream); SignImage。 SetDirectReference(ref。GetIndirectReference()); 可以將圖像添加到PDF中。名字是正確的關聯,但整個圖片是黑色的。 – user3648781

+0

所以你試圖創建一個像這樣的圖像的PDF:[SpecialId](http://developers.itextpdf.com/examples/itext-action-second-edition/chapter-16#622-specialid.java)。然後你想用這樣的ID找到那個圖像:[ResizeImage](http://developers.itextpdf.com/examples/itext-action-second-edition/chapter-16#621-resizeimage.java)。問題是,當你使用'ref'時,你會得到一個黑色的圖像。也許你應該重新解釋你的問題,以便專注於這個問題。 –

回答

1

我試過你的代碼,它適用於我。見AddImageWithID例如:

public void manipulatePdf(String src, String dest) throws IOException, DocumentException { 
    PdfReader reader = new PdfReader(src); 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); 
    Image image = Image.getInstance(IMG); 
    PdfImage stream = new PdfImage(image, "", null); 
    stream.put(new PdfName("ITXT_SpecialId"), new PdfName("123456789")); 
    PdfIndirectObject ref = stamper.getWriter().addToBody(stream); 
    image.setDirectReference(ref.getIndirectReference()); 
    image.setAbsolutePosition(36, 400); 
    PdfContentByte over = stamper.getOverContent(1); 
    over.addImage(image); 
    stamper.close(); 
    reader.close(); 
} 

在這個例子中,我採取了一個名爲hello.pdf文件,我添加一個名爲bruno.jpg圖片與文件hello_with_image_id.pdf作爲結果。

的圖像看起來不黑:添加

enter image description here

的ID:

enter image description here

你可以試試我的共享代碼,看看問題是否仍然存在。

我可以想出爲什麼你會得到黑色圖像的一個原因:在我們的代碼中,我們假設添加了一個圖像。在JPEG的情況下,情況總是如此。但在PNG或GIF的情況下,添加一個源圖像可能會導致添加兩個圖像。嚴格地說,PDF不支持透明圖像(取決於您如何解釋透明圖像的概念)。無論何時用透明部件添加單個源圖像,都會將兩個圖像添加到PDF中:一個不透明圖像和一個圖像蒙版。不透明圖像和圖像蒙版的組合產生被視爲透明圖像的東西。也許這就是你的情況。

+0

它是圖像問題還是Itext不支持具有透明信息(PNG)的圖像?我試圖讓圖像的背景不透明,上面的代碼可以工作。我的需要是添加一個透明背景的圖像。這不會覆蓋PDF的原始內容,並且下一個可以更改爲要替換的圖像。 PS:如果不添加與代碼相關的圖像名稱,但可以正常顯示PNG圖像。 我在android環境開發中。 – user3648781

+0

iText支持透明的PNG圖像; PDF不。您爲透明PNG添加唯一ID的設計存在缺陷,因爲在PDF中沒有一個透明的PNG;有不透明的圖像和圖像蒙版。 –

相關問題