2009-02-24 6 views
36

Ich habe eine vorhandene PDF und ich kann FdFWriter verwenden, um in Textfelder einzugeben. Es läuft gut. Jetzt habe ich ein Bild. Ich habe die Dokumentation gelesen und viele Beispiele betrachtet, aber alle erstellen neue Dokumente und fügen ein Bild ein. Ich möchte eine vorhandene PDF-Datei aufnehmen und ein Bild entweder in ein Bildfeld oder als Symbolbild einer Schaltfläche einfügen. Ich habe es versucht, aber es verdirbt das Dokument.Wie kann ich ein Bild mit iTextSharp in eine vorhandene PDF einfügen?

Ich muss in der Lage sein, ein vorhandenes Dokument zu nehmen und ein Bild darauf zu setzen. Ich möchte das Original nicht öffnen, lesen, ersetzen und löschen. Dieses Original ändert sich und der Name "Original" bedeutet in diesem Zusammenhang nur die Quelldatei. Es gibt viele PDF-Dateien wie diese, die ein Bild benötigen.

Vielen Dank für jede Hilfe.

Bearbeiten - Ich bin sehr dankbar für den folgenden Code. Es funktioniert gut, aber das Problem für mich ist, dass das vorhandene PDF digitale Signaturen darauf hat. Wenn das Dokument so kopiert wird (in result.pdf), haben diese Signaturen, obwohl sie noch vorhanden sind, eine andere Byteanzahl oder ein anderes Element, das beschädigt ist. Dies bedeutet, dass die Signaturen, während sie auf result.pdf angezeigt werden, neben ihnen ein Symbol enthalten, das "ungültige Signatur" angibt.

Falls es darauf ankommt, benutze ich ein Topaz-Signatur-Pad, um meine Signaturen zu erstellen, die ihre eigene Sicherheit haben. Lediglich das Kopieren des PDFs wird es nicht beschädigen, aber der folgende Prozess wird es tun.

Ich versuche, das Bild auf das vorhandene Dokument, nicht eine Kopie davon, die in diesem Fall zählt.

Auch mit Unterschrift meine ich handgeschriebene, nicht PIN-Nummern.

Nochmals vielen Dank.

EDIT - Kann PdfSignatureAppearance dafür verwendet werden?

EDIT - ich scheinen in der Lage zu sein, es zu tun:

var Stamper = new PdfStamper (Leser, outputPdfStream, '1', true);

+0

Dies kann auch von Nutzen sein: http://stackoverflow.com/questions/7115242/insert-an-image-in-pdf-using-itextsharp –

Antwort

56

Wenn Sie den Inhalt einer vorhandenen PDF-Datei ändern und zusätzlichen Inhalt wie Wasserzeichen, Seitennummern, zusätzliche Kopfzeilen hinzufügen möchten, ist PdfStamper das Objekt, das Sie benötigen. Ich habe erfolgreich die folgenden Code ein Bild in eine vorhandene PDF-Datei zu einer bestimmten absoluten Position einzufügen:

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

Wenn Sie das Bild einfügen Sie die Möglichkeit haben, es zu ändern. Sie können sich in der iTextSharp-Dokumentation transformation matrix ansehen.

+0

Gibt es eine Möglichkeit, es zu tun, wo es die Plätze Bild auf dem Original statt result.pdf? Danke für diese Antwort. – johnny

+0

Der Grund ist, weil das Dokument digitale Signaturen hat, die durch den Prozess beschädigt werden. – johnny

+3

Digitale Signatur garantiert, dass das Dokument nicht manipuliert wurde. Sie können keine Inhalte hinzufügen, ohne das Dokument zu verlassen. –

1

ich mein Problem Bild hinzufügen, indem Sie einfach folgende Zeilen in meinem Signatur Code lösen könnte

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; 

Da ich Signierdokument mit sichtbarer digitaler Signatur, jetzt kann ich sowohl Bild- als auch digitale Signatureigenschaften nebeneinander haben

+0

Das Problem der Op war, ein Bild zu einer bestehenden, bereits signierten PDF hinzuzufügen, nicht das Bild einer Signatur-Visualisierung zu setzen. – mkl

+0

Ich denke, das Hinzufügen von etwas zum signierten Dokument macht das digital signierte Dokument ungültig. Bitte korrigieren Sie mich, wenn ich falsch liege –

+0

Für Details vgl. http://stackoverflow.com/documentation/pdf/5161/integrated-pdf-signatures/18524/allowed-and-disallowed-changes-to-a-signed-document#t=20170227100646546925 – mkl