Insérer une Image dans le PDF à l'aide de ITextSharp
- Je insérer une image dans un fichier pdf. C'est, là où je vois un texte "Signature", j'ai insérer une image de la signature . Je peux le faire en disant des positions absolues .
Mais, je suis à la recherche pour savoir comment trouver la position du mot "Signature" dans le fichier pdf, puis insérer l'image.
Apprécier ur aider!
C'est le code de travail:
using (Stream inputImageStream = new FileStream(@"C:\signature.jpeg", FileMode.Open, FileAccess.Read, FileShare.Read))
using (Stream outputPdfStream = new FileStream(@"C:\test\1282011\Result.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
{
var reader = new PdfReader(@"C:\Test\1282011\Input.pdf");
var stamper = new PdfStamper(reader, outputPdfStream);
var count = reader.NumberOfPages;
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(inputImageStream);
image.SetAbsolutePosition(300, 200); //Absolute position
image.ScaleToFit(200, 30);
PRTokeniser pkt = null;
string strpages = string.Empty;
System.Text.StringBuilder build = new System.Text.StringBuilder();
for (int i = 1; i <= count; i++)
{
var pdfContentByte = stamper.GetOverContent(i);
if (pdfContentByte != null)
{
pkt = new PRTokeniser(stamper.Reader.GetPageContent(i));
while (pkt.NextToken())
{
if (pkt.TokenType == PRTokeniser.TokType.STRING)
{
if (pkt.StringValue == "Signature")
{
pdfContentByte.AddImage(image);
}
}
}
}
}
stamper.Close();
}
}
Après quelques recherches sur google, j'ai découvert que je pouvais position absolue de texte comme suit:
extSharp.text.pdf.AcroFields fields = stamper.AcroFields;
IList<iTextSharp.text.pdf.AcroFields.FieldPosition> signatureArea = fields.GetFieldPositions("Signature");
iTextSharp.text.Rectangle rect= signatureArea.First().position;
iTextSharp.text.Rectangle logoRect = new iTextSharp.text.Rectangle(rect);
image.SetAbsolutePosition(logoRect.Width ,logoRect .Height );
Mais la variable , signatureArea est nulle de tous les temps, même si le document pdf contient le mot "Signature".
Toute entrée..? 🙂
Jaleel
OriginalL'auteur Jaleel | 2011-08-18
Vous devez vous connecter pour publier un commentaire.
Découvrez
PdfTextExtractor
et plus précisément à laLocationTextExtractionStrategy
. Créer une classe dans votre projet avec le code exact pour leLocationTextExtractionStrategy
et de mettre un point d'arrêt sur la lignereturn sb.ToString();
(ligne 131 dans le SVN) et regardez le contenu de la variablelocationalResult
. Vous verrez à peu près exactement à ce que vous recherchez, un recueil de texte de début et de fin des emplacements. Si votre mot de recherche n'est pas sur une ligne, vous pourriez avoir à creuser un peu plus profond mais cela devrait vous diriger dans la bonne direction.OriginalL'auteur Chris Haas
Qui était parfait Chris. Je suis en mesure de trouver la position du texte et insérer la signature. Ce que j'ai compris , il y a une liste
List<TextChunk> LocationalResult
dans leLocationTextExtractionStrategy
classe. LeRenderText()
méthode dansLocationTextExtractionStrategy
ajoutera chaque texte à laLocationalResult
liste.En fait la liste
LocationalResult
est une liste privée, j'ai rendu public à l'accès de l'extérieur.Je boucle sur chaque page du document PDF et de les appeler
PdfTextExtractor.GetTextFromPage(reader, i, locationStrat);
oùi
est le pagenumber. En ce moment tout le texte dans la page sera ajoutée à laLocationalResult
avec toutes les informations de position.C'est ce que j'ai fait . Et il fonctionne parfaitement.
OriginalL'auteur Jaleel