46 votes

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

J'ai un fichier PDF existant et je peux l'utiliser FdFWriter à l'entrée de zones de texte. Il fonctionne bien. Maintenant j'ai une image. J'ai lu la documentation et regardé de nombreux exemples, mais ils ont tous de créer de nouveaux documents et d'insérer une image. Je veux prendre un fichier PDF existant et insérer une image dans un champ image ou l'icône de l'image d'un bouton. J'ai essayé, mais il corrompt le document.

J'ai besoin d'être en mesure de prendre un document existant et de mettre une image sur elle. Je ne veux pas d'ouvrir, de lire, de remplacer et de supprimer l'original. Cette origine des changements et le nom "original" ne signifie que le fichier source dans ce contexte. Il y a beaucoup de fichiers PDF comme ça qui ont besoin d'une image.

Merci pour toute aide.

Edit - je suis très reconnaissant pour le code ci-dessous. Il fonctionne très bien, mais le problème pour moi est que le fichier PDF existant a des signatures numériques sur elle. Lorsque le document est copié comme ceci (dans le résultat.pdf) les signatures, tandis que toujours présent, ont un différent nombre d'octets ou un autre élément qui est endommagé. Cela signifie que les signatures, alors qu'ils affichent sur le résultat.pdf, ont une icône à côté de leur territoire "signature non valide."

En cas de questions, je suis à l'aide d'une Topaze signature pad pour créer mes signatures, qui a sa propre sécurité. Simplement copier le fichier PDF ne seront pas corrompus, mais le processus ci-dessous.

Je suis en train d'essayer de mettre l'image sur le document existant, et non pas une copie de celui-ci, qui dans ce cas des questions.

Aussi, par la signature, je veux dire à la main, pas de numéros de broches.

Je vous remercie encore.

EDIT - Peut PdfSignatureAppearance être utilisé pour cela?

EDIT - j'ai l'impression de pouvoir le faire avec:

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

78voto

Darin Dimitrov Points 528142

Si vous souhaitez modifier le contenu d'un fichier PDF existant et ajouter du contenu supplémentaire, comme des filigranes, pagenumbers, des en-têtes supplémentaires, PdfStamper est l'objet dont vous avez besoin. Je l'ai utilisé le code suivant pour insérer une image dans un fichier pdf existant à une position absolue:

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 prendre un coup d'oeil à la matrice de transformation dans le iTextSharp de la documentation.

1voto

John Bubriski Points 5789

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

Gmane iTex Mailing List Post

0voto

Douglas Anderson Points 2238

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?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X