How can I insert an image with iTextSharp in an existing PDF?

梦想与她 提交于 2019-11-26 04:41:10

问题


I have an existing PDF and I can use FdFWriter to input to text boxes. It works well. Now I have an image. I have read the documentation and looked at many examples but they all create new documents and insert an image. I want to take an existing PDF and insert an image into either an image field or as the icon image of a button. I have tried but it corrupts the document.

I need to be able to take an existing document and put an image on it. I do not want to open, read, replace, and delete the original. This original changes and the name \"original\" only means the source file in this context. There are many PDF files like this that need an image.

Thank you for any help.

Edit - I am very thankful for the code below. It works great, but the problem for me is that the existing PDF has digital signatures on it. When the document is copied like this (into result.pdf) those signatures, while still present, have a different byte count or other item that is corrupted. This means the signatures, while they show up on result.pdf, have an icon next to them that state \"invalid signature.\"

In case it matters I am using a Topaz signature pad to create my signatures, which has it\'s own security. Merely copying the PDF will not corrupt it but the process below will.

I am trying to put the image on the existing document, not a copy of it, which in this case matters.

Also, by signature, I mean handwritten, not pin numbers.

Thank you again.

EDIT - Can PdfSignatureAppearance be used for this?

EDIT - I seem to be able to do it with:

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


回答1:


If you want to change the contents of an existing PDF file and add extra content such as watermarks, pagenumbers, extra headers, PdfStamper is the object you need. I have successfully used the following code to insert an image into an existing pdf file to a given absolute position:

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();
        }
    }
}

When you insert the image you have the possibility to resize it. You can take a look at transformation matrix in the iTextSharp documentation.




回答2:


Here is a similar example whichi inserts an image on the page using the stamper:

Gmane iTex Mailing List Post




回答3:


I could solve my problem by simply adding following lines to my signing code to add image

 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;

As I was signing document with visible digital signature , now I can have both image and digital signature properties side by side




回答4:


pdftk can do this. It's not a library but you can easily call it from your code as a .exe.

See stamp and background commands: http://www.pdflabs.com/docs/pdftk-man-page/

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



来源:https://stackoverflow.com/questions/583629/how-can-i-insert-an-image-with-itextsharp-in-an-existing-pdf

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!