【问题标题】:How can I insert an image with iTextSharp in an existing PDF?如何在现有 PDF 中插入带有 iTextSharp 的图像?
【发布时间】:2010-10-09 16:15:16
【问题描述】:

我有一个现有的 PDF,我可以使用 FdFWriter 输入文本框。它运作良好。现在我有一个图像。我已阅读文档并查看了许多示例,但它们都创建了新文档并插入了图像。我想获取现有的 PDF 并将图像插入图像字段或作为按钮的图标图像。我已经尝试过,但它损坏了文档。

我需要能够获取现有文档并在其上放置图像。我不想打开、阅读、替换和删除原件。此原始更改并且名称“原始”仅表示此上下文中的源文件。有很多这样的 PDF 文件需要图片。

感谢您的帮助。

编辑 - 我非常感谢下面的代码。它很好用,但对我来说问题是现有的 PDF 上有数字签名。当像这样复制文档(到 result.pdf 中)时,这些签名虽然仍然存在,但具有不同的字节数或其他已损坏的项目。这意味着签名虽然显示在 result.pdf 上,但旁边有一个图标,表明“签名无效”。

如果重要的话,我会使用 Topaz 签名板来创建我的签名,它有自己的安全性。仅复制 PDF 不会损坏它,但下面的过程会损坏它。

我正在尝试将图像放在现有文档上,而不是它的副本,这在这种情况下很重要。

另外,我所说的签名是指手写,而不是密码。

再次感谢您。

编辑 - PdfSignatureAppearance 可以用于此吗?

编辑 - 我似乎可以做到:

var stamper = new PdfStamper(reader, outputPdfStream,'1',true);

【问题讨论】:

标签: image itextsharp


【解决方案1】:

如果您想更改现有 PDF 文件的内容并添加额外的内容,例如水印、页码、额外的标题,PdfStamper 是您需要的对象。我已成功使用以下代码将图像插入现有 pdf 文件到给定的绝对位置:

using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

class Program
{
    static void Main(string[] args)
    {
        using (Stream inputPdfStream = new FileStream("input.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
        using (Stream inputImageStream = new FileStream("some_image.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
        using (Stream outputPdfStream = new FileStream("result.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
        {
            var reader = new PdfReader(inputPdfStream);
            var stamper = new PdfStamper(reader, outputPdfStream);
            var pdfContentByte = stamper.GetOverContent(1);

            Image image = Image.GetInstance(inputImageStream);
            image.SetAbsolutePosition(100, 100);
            pdfContentByte.AddImage(image);
            stamper.Close();
        }
    }
}

当您插入图像时,您可以调整它的大小。您可以查看 iTextSharp 文档中的transformation matrix

【讨论】:

  • 有没有办法将图像放在原件而不是 result.pdf 上?谢谢你的回答。
  • 原因是文档中的数字签名被进程破坏了。
  • 数字签名保证文档没有被篡改。如果不退出文档,则无法向其中添加内容。
  • 使用 PdfSignatureAppearance 怎么样?
  • 你不想把你的压模放在 using 子句中吗?
【解决方案2】:

这是一个类似的示例,它使用压模在页面上插入图像:

Gmane iTex Mailing List Post

【讨论】:

    【解决方案3】:

    我可以通过在我的签名代码中添加以下几行来添加图像来解决我的问题

     var image = iTextSharp.text.Image.GetInstance(@"C:\Users\sushil\Documents\sansign.jpg");
    appearance.Acro6Layers = true;
    appearance.SignatureGraphic = image;
    appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION;
    

    当我用可见的数字签名签署文档时,现在我可以同时拥有图像和数字签名属性

    【讨论】:

    • 操作的问题是将图像添加到现有的,已签名的 pdf 中,而不是设置签名可视化的图像。
    • 我认为在签名文档中添加任何内容都会使数字签名文档无效。如果我错了,请纠正我
    【解决方案4】:

    pdftk 可以做到这一点。它不是一个库,但您可以轻松地从您的代码中调用它作为 .exe。

    参见stampbackground 命令: http://www.pdflabs.com/docs/pdftk-man-page/

    参考:How to do mail merge on top of a PDF?

    【讨论】:

      猜你喜欢
      • 2016-03-03
      • 1970-01-01
      • 2011-04-28
      • 2017-05-10
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多