簡體   English   中英

使用iTextSharp PdfStamper在現有PDF上覆蓋圖像

[英]Using iTextSharp PdfStamper to overlay an image on existing PDF

我可以使用PDFStamper和PdfContentByte content.AddImage方法將圖像疊加到現有的PDF文檔上。

當現有文檔的頂部已經覆蓋圖像時,就會出現我的問題。 實際上,您可以看到我要覆蓋的小圖像的頂部邊緣。 它顯然隱藏在現有圖像疊加層的下方。

我在嘗試使疊加的圖像顯示在現有圖像疊加層時遇到問題。

我的代碼:

System.Drawing.Image bitmap

PdfReader pdfReader = new PdfReader(pathToOriginalPdf);
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(pathToTimestampedPdf, FileMode.Create, FileAccess.Write, FileShare.None));

MemoryStream imageStream = new MemoryStream();
bitmap.Save(imageStream, ImageFormat.Bmp);
byte[] bitmapBytes = imageStream.ToArray();

iTextSharp.text.Image image = Image.GetInstance(bitmapBytes);

PdfContentByte underContent;

try
{
    underContent = pdfStamper.GetOverContent(1);
    underContent.AddImage(image);
}

我需要一種將現有圖像疊加層展平到PDF內容上或設置z順序的方法,以使新添加的疊加層可以位於頂部。

由於某種原因,PdfStamper選擇將新圖像放置在現有圖像下方。

提前致謝。

如果我們可以查看有問題的PDF,將有所幫助。 這樣我們就不必猜測,我們知道

盡管如此,我懷疑您的“現有圖像疊加層”是注釋的一部分。 您放入頁面內容中的任何內容都不會出現在注釋上方。

選項(如果我是對的):

添加自己的注釋

為此,我將使用帶有LAYOUT_ICON_ONLY的PushbuttonField。 將圖像繪制到PdfTemplate ,並將其用作按鈕的“圖標”。

注釋的Z順序由頁面的注釋數組的順序確定。 新的注釋將附加到此數組。 沒問題。

PushbuttonField fld = new PushbuttonField(stamper.getWriter(), box, name);
fld.setLayout(PushbuttonField.LAYOUT_ICON_ONLY);
fld.setImage(myImage);

stamper.addAnnotation(fld.getField(), 1);

您可能需要弄亂setScaleIcon(),setHorizo​​ntalAdjustment(),setVerticalAdjustment(),setProportionalIcon()以及其他一些方法,才能使圖像看起來完全符合您的要求。

一遍展平,另一遍添加圖片

如果現有的圖像批注是iText可以平整的(也許不可以),則可以分兩步執行所需的操作。 第一遍只是“ setFormFlattening(true); close();”,而第二遍就是您現在正在做的所有事情。

ByteArrayOutputStream output = new ByteArrayOutputStream();
PdfStamper stamper = new PdfStamper( firstReader, output );
stamper.setFormFlattening(true);
stamper.setFreeTextFlatten(true);  // probably not needed.
stamper.close();

PdfReader secondReader = new PdfReader(output.toByteArray());
FileOutputStream finalOutput = new FileOutputStream( outputPath );
stamper = new PdfStamper(secondReader, finalOutput);
// do your thing here.
stamper.getOverContent(1).addImage(image);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM