46

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

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

感谢您的任何帮助。

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

万一这很重要,我正在使用 Topaz 签名板来创建我的签名,它有自己的安全性。仅复制 PDF 不会损坏它,但下面的过程会损坏它。

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

另外,通过签名,我的意思是手写的,而不是密码。

再次感谢你。

编辑 - PdfSignatureAppearance 可以用于此吗?

编辑 - 我似乎能够做到这一点:

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

4

4 回答 4

78

如果您想更改现有 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 文档中的转换矩阵

于 2009-02-24T22:09:43.540 回答
1

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

Gmane iTex 邮件列表帖子

于 2010-03-05T14:30:04.697 回答
1

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

 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;

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

于 2017-02-26T14:20:43.737 回答
0

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

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

参考:如何在 PDF 上进行邮件合并?

于 2011-02-25T11:38:06.500 回答