[英]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(),setHorizontalAdjustment(),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.