2010-11-25 7 views
4

J'utilise iTextSharp pour charger un PDF existant et ajouter du texte en utilisant le PdfStamper. Je veux un contrôle total sur le texte, ce qui signifie que je veux être en mesure de contrôler la police (seulement TrueType), la taille de la police et les coordonnées. En ce moment, j'utilise ShowTextAligned pour ajouter du texte à certaines coordinations et setFontAndSize pour définir la police et la taille de la police. Ceci est mon code pour ajouter du texte:Utilisation de différentes polices en PDF avec iTextSharp et PDFStamper

private void AddText(BaseFont font, string text, int x, int y, int size) 
    { 
     pdf.BeginText(); 
     pdf.SetFontAndSize(font, size); 
     pdf.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, x, y, 0); 
     pdf.EndText(); 
    } 

La fonction suivante est utilisée pour charger la police TrueType:

public BaseFont GetFont(string font, string encoding) 
    { 
     if (!(font.EndsWith(".ttf") || font.EndsWith(".TTF"))) 
      font += ".ttf"; 

     BaseFont basefont; 

     basefont = BaseFont.CreateFont(ConfigurationManager.AppSettings["fontdir"] + font, encoding, BaseFont.NOT_EMBEDDED); 

     if (basefont == null) 
      throw new Exception("Could not load font '" + font + "' with encoding '" + encoding + "'"); 

     return basefont; 
    } 

Le code suivant est utilisé pour charger le fichier PDF existant:

 Stream outputPdfStream = Response.OutputStream; 
     PdfReader pdfReader = new PdfReader(new RandomAccessFileOrArray(HttpContext.Current.Request.MapPath("PdfTemplates/" + ConfigurationManager.AppSettings["pdf_template"])), null); 
     PdfStamper pdfStamper = new PdfStamper(pdfReader, outputPdfStream); 

     pdf = pdfStamper.GetOverContent(1); 

Tout cela fonctionne parfaitement, sauf lorsque j'essaie d'utiliser des polices différentes. Ainsi, lorsque AddText est appelé plusieurs fois avec des polices différentes, le PDF affiche une erreur générique lors de l'ouverture. Je me demande s'il est possible d'utiliser des polices différentes en utilisant la fonction ShowTextAligned et si c'est le cas, comment?

Répondre

1

Merci pour votre réponse Mark, cependant j'ai déjà résolu le problème. Un problème est survenu avec l'en-tête Content-Type que j'utilise pour indiquer au navigateur la taille du fichier PDF. Cela a provoqué l'arrêt du téléchargement du navigateur avant que le PDF entier ne soit réellement téléchargé. Lors de l'ajout d'une nouvelle police, la taille du fichier PDF dépasserait la taille spécifiée dans l'en-tête Content-Type, ce qui entraînerait un fichier PDF incorrect. C'est résolu maintenant, plusieurs polices fonctionnent très bien :-).

1

Pas vraiment, non. Il ne traitera qu'une seule police à la fois. Par curiosité, que faites-vous pour obtenir une mauvaise sortie pdf? J'aimerais voir votre code.

Regardez plutôt ColumnText. Il y a pas mal d'exemples qui flottent et sont bien couverts dans "iText in Action 2ème édition". Tous les échantillons du livre sont disponibles en ligne.

Questions connexes