Image 如何在现有PDF中插入带有iTextSharp的图像?

Image 如何在现有PDF中插入带有iTextSharp的图像?,image,itextsharp,Image,Itextsharp,我有一个现有的PDF,我可以使用FdFWriter输入文本框。它工作得很好。现在我有了一个图像。我已经阅读了文档并查看了许多示例,但它们都创建了新文档并插入了图像。我想采取现有的PDF文件,并插入一个图像到一个图像字段或作为一个按钮的图标图像。我试过了,但它破坏了文件 我需要能够采取现有的文件,并把它的图像。我不想打开、阅读、替换和删除原件。此原始文件将更改,名称“original”在此上下文中仅表示源文件。有许多像这样的PDF文件需要图像 谢谢你的帮助 编辑-我非常感谢下面的代码。它工作得很好

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

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

谢谢你的帮助

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

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

我试图将图像放在现有文档上,而不是它的副本上,这在本例中很重要

还有,我所说的签名是指手写的,而不是pin码

再次感谢你

编辑-PDFSignaturePearance可用于此操作吗

编辑-我似乎可以通过以下方式进行编辑:


var stamper=新的PdfStamper(读卡器,outputPdfStream,'1',true)

如果要更改现有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文档。

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


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

请参见
stamp
background
命令:


ref:

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

 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;

由于我使用可见数字签名对文档进行签名,现在我可以同时拥有图像和数字签名属性

有没有办法将图像放在原始文件上而不是result.pdf上?感谢您的回答。原因是文档中的数字签名会被流程损坏。数字签名保证文档未被篡改。如果不放弃文档,则无法向其中添加内容。使用PdfSignatureAppearance如何?是否要将母版放在using子句中?这也可能有用:op的问题是将图像添加到现有的已签名pdf,不设置签名可视化的图像。我认为在签名文档中添加任何内容都会使数字签名文档无效。请纠正我,如果我是错误的细节cf。