web-dev-qa-db-fra.com

Comment puis-je insérer une image avec iTextSharp dans un PDF existant?

J'ai un PDF et je peux utiliser FdFWriter pour entrer dans les zones de texte. Cela fonctionne bien. Maintenant, j'ai une image. J'ai lu la documentation et regardé de nombreux exemples mais ils créent tous de nouveaux documents et insérer une image. Je veux prendre un PDF et insérer une image dans un champ d'image ou comme l'icône d'un bouton. J'ai essayé mais cela corrompt le document.

Je dois pouvoir prendre un document existant et y mettre une image. Je ne souhaite pas ouvrir, lire, remplacer et supprimer l'original. Cet original change et le nom "original" ne signifie que le fichier source dans ce contexte. Il existe de nombreux fichiers PDF comme celui-ci qui nécessitent une image.

Merci pour toute aide.

Edit - Je suis très reconnaissant pour le code ci-dessous. Cela fonctionne très bien, mais le problème pour moi est que le PDF a des signatures numériques. Lorsque le document est copié comme ceci (dans result.pdf) ces signatures, bien que toujours présentes, ont un nombre d'octets différent ou un autre élément endommagé. Cela signifie que les signatures, lorsqu'elles apparaissent sur result.pdf, ont une icône à côté d'elles qui indique "signature non valide".

Dans le cas où j'importe, j'utilise un tampon de signature Topaz pour créer mes signatures, qui a sa propre sécurité. Le simple fait de copier le PDF ne le corrompra pas mais le processus ci-dessous le sera.

J'essaie de mettre l'image sur le document existant, pas une copie de celui-ci, qui dans ce cas est important.

De plus, par signature, je veux dire des chiffres manuscrits, pas des codes PIN.

Merci encore.

EDIT - Peut-on utiliser PdfSignatureAppearance pour cela?

EDIT - Je semble pouvoir le faire avec:

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

42
johnny

Si vous souhaitez modifier le contenu d'un fichier PDF PDF existant et ajouter du contenu supplémentaire tel que des filigranes, des numéros de page, des en-têtes supplémentaires, PdfStamper est l'objet dont vous avez besoin. J'ai utilisé avec succès le code suivant pour insérer une image dans un fichier pdf existant à une position absolue donnée:

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

Lorsque vous insérez l'image, vous avez la possibilité de la redimensionner. Vous pouvez jeter un œil à matrice de transformation dans la documentation iTextSharp.

67
Darin Dimitrov

Je pourrais résoudre mon problème en ajoutant simplement les lignes suivantes à mon code de signature pour ajouter une 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;

Comme je signais un document avec une signature numérique visible, je peux maintenant avoir des propriétés d'image et de signature numérique côte à côte

1
sushil.agarwal

Voici un exemple similaire qui insère une image sur la page à l'aide de la matrice:

Gmane iTex Mailing List Post

1
John Bubriski

pdftk peut le faire. Ce n'est pas une bibliothèque mais vous pouvez facilement l'appeler à partir de votre code en tant que .exe.

Voir les commandes stamp et background: http://www.pdflabs.com/docs/pdftk-man-page/

ref: Comment faire du publipostage au-dessus d'un PDF?

0
Douglas Anderson