2016-09-19 4 views
0

Ich muss Schriftart zu einem PDF programmatisch hinzufügen (einbetten, einbetten). Ich habe versucht, mit vielen Dienstprogrammen wie Ghostscript oder Iterxsharp, aber ich habe es nicht geschafft, das Problem zu lösen.C# programmatisch eine Schriftart zu PDF hinzufügen

Zum Beispiel in einer Situation wie dieser: enter image description here

Ich möchte Courier-Bold und bekommen diese Situation hinzuzufügen:

enter image description here

+0

Bitte zeigen Sie uns, was Sie bereits ausprobiert haben. – kiziu

+0

Ich habe versucht über Ghostscript; das vollständigste Skript, das ich benutzt habe: -dSAFER -dNOPLATFONTS -dNOPAUSE -dBATCH -sDEVICE = pdfwrite -dPDFSETTINGS =/drucker -dCompatibilityLevel = 1.4 -dSubsetFonts = true -dEmbedAllFonts = wahr -sFONTPATH ​​= font_path.ttf -sOutputFile = pdf_out_path -f pdf_in_path Ich suchte auch in der iterxsharp-Bibliothek etwas Nützliches zu diesem Ziel, aber ich konnte nichts finden. Es scheint, dass Sie nur die Schriftart für einen Absatz festlegen können. – user3492925

+0

Vielleicht wird dies eine Hilfe sein: http://stackoverflow.com/questions/4231656/how-doi-embed-fonts-in-e-existing-pdf – kiziu

Antwort

0

ich gerade ein Projekt mit iTextSharp v5 erstellt. 5.9 über NuGet und benutzte folgenden Code:

const string PdfLocation = @"C:\fakepath\output.pdf"; 

    static void Main(string[] args) 
    { 
     using (var pdfDoc = new Document()) 
     using (var fs = new FileStream(PdfLocation, FileMode.OpenOrCreate)) 
     using (var writer = PdfWriter.GetInstance(pdfDoc, fs)) 
     { 
      pdfDoc.Open(); 

      var font = FontFactory.GetFont(FontFactory.COURIER_BOLD); 

      // Doesn't use font 
      var paragraph = new Paragraph("LINE 1"); 
      paragraph.Font = font; 
      pdfDoc.Add(paragraph); 

      // Doesn't use font 
      var paragraph2 = new Paragraph(); 
      paragraph2.Add("LINE 2"); 
      paragraph2.Font = font; 
      pdfDoc.Add(paragraph2); 

      // Does use font 
      var paragraph3 = new Paragraph(); 
      paragraph3.Font = font; 
      paragraph3.Add("LINE 3"); // This must be done after setting the font 
      pdfDoc.Add(paragraph3); 

      var cb = writer.DirectContent; 

      pdfDoc.Close(); 
     } 
    } 

Ich entdeckte, dass Sie müssen Setzen Sie die Schrift zuerst, bevor Sie den Text schreiben. Der folgende Code gibt das PDF mit den folgenden Eigenschaften aus. Ich habe die TrueType-Anforderung nicht erhalten, aber vielleicht wird Sie das in die richtige Richtung lenken.

Wo ich benutze paragraph und paragraph2 werde die Standardschrift verwenden, die Helvetica für mich war, weil ich die Schriftart einstellen, nachdem ich den Text eingestellt habe. Ordnung ist wichtig!

Die Dokumentation dafür muss sicherlich erweitert werden ...

+0

Ihr Bonus macht überhaupt keinen Unterschied: Sie lesen nur die PDF-Datei in den Speicher, entfernen die unbenutzten Objekte im Speicher und werfen schließlich diese In-Memory-Darstellung weg. Die PDF auf der Festplatte wird überhaupt nicht geändert. – mkl

+0

Ah, du hast Recht. Ich hatte Code, der funktionierte. Ich werde es in einer zweiten @ mkl beheben. Ich werde die Originaldatei löschen müssen, damit es funktioniert, da ich nicht weiß, ob es einen Befehl gibt, um das PDF zu erstellen. – KSib

+0

@mkl Danke nochmal. Ich habe es aussortiert. – KSib

Verwandte Themen