首页 文章

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

提问于
浏览
37

我有一个现有的PDF,我可以使用FdFWriter输入到文本框 . 它运作良好 . 现在我有了一张图片 . 我已阅读文档并查看了许多示例,但它们都创建了新文档并插入了图像 . 我想拍摄现有PDF并将图像插入图像字段或按钮的图标图像 . 我试过但它破坏了文件 .

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

感谢您的任何帮助 .

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

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

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

此外,签名,我的意思是手写,而不是密码 .

再次感谢你 .

编辑 - 可以使用PdfSignatureAppearance吗?

编辑 - 我似乎能够做到:

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

4 回答

  • -1

    如果要更改现有PDF文件的内容并添加额外内容(如水印,页面编号,额外 Headers ),则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 .

  • 1

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

    Gmane iTex Mailing List Post

  • 61

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

    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;
    

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

  • 1

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

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

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

相关问题