2010-11-25 11 views
4

Ich verwende iTextSharp, um eine vorhandene PDF zu laden und Text mit dem PdfStamper hinzuzufügen. Ich möchte die volle Kontrolle über den Text, dh ich möchte in der Lage sein, die Schriftart (nur TrueType), Schriftgröße und Koordinaten zu steuern. Im Moment verwende ich ShowTextAligned, um bestimmten Koordinaten Text hinzuzufügen, und setFontAndSize, um die Schriftart und Schriftgröße festzulegen. Dies ist mein Code, um Text hinzuzufügen:Verwenden verschiedener Schriftarten in PDF mit iTextSharp und 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(); 
    } 

Die folgende Funktion wird die Truetype-Schriftart zu laden:

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

Der folgende Code wird verwendet, um die bestehende PDF zu laden:

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

Das alles funktioniert perfekt, außer wenn ich versuche, verschiedene Schriftarten zu verwenden. Wenn AddText mehrfach mit verschiedenen Schriftarten aufgerufen wird, zeigt die PDF beim Öffnen einen allgemeinen Fehler an. Ich frage mich, ob es möglich ist, verschiedene Schriftarten mit der ShowTextAligned-Funktion zu verwenden, und wenn ja, wie?

Antwort

1

Danke für Ihre Antwort Mark, aber ich habe das Problem bereits gelöst. Es gab ein Problem mit meinem Content-Type-Header, den ich verwende, um dem Browser mitzuteilen, wie groß das PDF ist. Dadurch wurde der Download des Browsers gestoppt, bevor das gesamte PDF tatsächlich heruntergeladen wurde. Beim Hinzufügen einer neuen Schriftart würde die PDF-Größe einfach die im Inhaltstyp-Header angegebene Größe überschreiten, was zu einer fehlerhaften PDF-Datei führen würde. Es ist jetzt gelöst, mehrere Schriften funktionieren gut :-).

1

Nicht wirklich, nein. Es wird immer nur eine Schriftart gleichzeitig behandelt. Aus Neugier, was machst du, um eine schlechte PDF-Ausgabe zu bekommen? Ich möchte deinen Code sehen.

Schauen Sie sich stattdessen ColumnText an. Es gibt einige Beispiele, die in "iText in Action 2nd edition" zu sehen sind. Alle Proben aus dem Buch sind online verfügbar.

Verwandte Themen