【问题标题】:Using iTextSharp PdfStamper to overlay an image on existing PDF使用 iTextSharp PdfStamper 在现有 PDF 上叠加图像
【发布时间】:2011-06-23 16:59:21
【问题描述】:

我可以使用 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 选择将新图像放在现有图像下方。

提前致谢。

【问题讨论】:

标签: c# itextsharp


【解决方案1】:

如果我们能看到相关的 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 可以展平的东西(也许是,也许不是),你可以在两遍中做你想做的事。第一遍只是“setFormFlatening(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);

【讨论】:

    猜你喜欢
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多