2017-07-21 2 views
0

Ich arbeite an einem PDF-Druckprozessor, mit PDFsharp & MigraDoc. Ich erstelle zusammengeführte PDFs mit 2.000 bis 10.000 Seiten. Der Druckerhersteller, der die von diesem Programm generierten PDFs druckt, beklagt sich über die Dateigrößen und den Zeitaufwand für die Verarbeitung der PDFs aufgrund der eingebetteten Schriftarten. Ich habe die eingebetteten Schriften in Adobe Acrobat Reader DC gesehen und kann sehen, dass es Tonnen von vollständig eingebetteten Schriften und Untergruppen gibt.C# .NET - PDFsharp & MigraDoc - Schriftarten eingebettet überall - Massive Dateigröße

Es werden nur zwei Schriftarten im gesamten Dokument verwendet, aber es sieht so aus, als ob jedes Element auf jeder Seite in den PDFs diese beiden Schriftarten eingebettet hat. Sagen Sie einfach, wenn es 10 Elemente auf einer Seite gibt und 10.000 Seiten, das sind 20.000 eingebettete Schriftarten.

Das erste, was ich angeschaut habe, war die Schriftart Optionen in PDFsharp & MigraDoc verwendet. Es gibt eine Option für die Schriftarteneinbettung.

var renderer = new PdfDocumentRenderer(true, PdfFontEmbedding.None);

var options = new XPdfFontOptions(PdfFontEmbedding.None);

using (var gfx = XGraphics.FromPdfPage(currentPage))//currentPage is of type PdfPage 
{ 
    gfx.MFEH = PdfFontEmbedding.None; 
    ... 

Ursprünglich diese Einbettung Optionen PdfFontEmbedding.Always gesetzt wurden, aber ich änderte sie .None der Hoffnung, dass das Problem gelöst werden würde. Es war nicht. In der Tat hat sich nichts geändert. Immer noch die gleiche Menge an eingebetteten Schriften und hatte die gleiche Größe.

Der Druckerverkäufer rief mich an und informierte mich, dass er das PDF genommen, es in Postscript und dann zurück in PDF umgewandelt und die Dateigröße um zwei Drittel reduziert hatte und die gesamte Schrifteinbettung weg war.

Für was ich über Postscript (im Grunde, nichts) weiß, nehme ich an, dass die Schriften nicht mehr eingebettet sind, weil die Datei eine Art Vektorformat oder etwas ist und der Text nicht mehr ausgewählt werden kann. Ich denke, das ist kein Problem für den Kunden oder den Verkäufer. Sie schienen mit der Idee zufrieden zu sein, die generierten PDFs in Postscript-Dateien und dann zurück in PDF zu konvertieren.

Also habe ich nach Möglichkeiten gesucht, diese Konvertierungen in C# zu tun, aber habe nicht wirklich viel gefunden. Ich habe einige Dinge über die Verwendung von Ghostscript oder Ghostscript.Net gesehen. Die Dokumentation dazu fehlt ziemlich und ich habe keine guten Beispiele gesehen.

Kennt jemand eine gute Möglichkeit, diese Konvertierungen durchzuführen, verwenden Sie PDFsharp und/oder MigraDoc, um Schriften davon abzuhalten, eingebettet zu werden, oder wissen Sie eine andere gute Lösung für dieses Problem?

Antwort

0

Wenn Sie ein neues Dokument mit PDFsharp oder MigraDoc erstellen, sollte jede Schriftart nur einmal pro PDF-Datei eingebettet werden, egal wie viele Seiten es gibt, egal wie viele Elemente eine Schriftart verwenden.

Wenn Sie 1000 PDF-Dokumente mit jeweils einer Seite erstellen und diese zu einem Dokument mit 1000 Seiten kombinieren, haben Sie 1000 Kopien der Schriftart. Beim Zusammenführen von PDF-Dokumenten mit PDFsharp wird keine Größenoptimierung vorgenommen.
So erstellen Sie ein Dokument mit allen Seiten in einem einzigen Lauf.

Sie haben geschrieben: "Also, sagen Sie einfach, wenn es 10 Elemente auf einer Seite gibt und es 10.000 Seiten gibt, das sind 20.000 eingebettete Schriftarten." Dies sollte nicht passieren und nach meiner Erfahrung passiert es nicht beim Erstellen eines Dokuments mit 10.000 Seiten in einem einzigen Lauf.
PDFsharp kann zum Zusammenführen von PDF-Dateien verwendet werden, aber dann erhalten Sie doppelte Schriften.

Die von Ihnen erwähnten Schriftarteneinbettungsoptionen gelten für neuen Inhalt, der zu PDF-Dateien hinzugefügt wird. Sie haben keine Auswirkungen auf Schriftarten, die bereits in PDF-Dateien eingebettet sind, die zusammengeführt oder geändert werden.

+0

Vielen Dank für die Antwort. Es hat super funktioniert. Nahm eine meiner größeren PDFs von fast 1 GB auf 18 MB herunter. Der Kunde ist sehr glücklich. – shaneOverby

Verwandte Themen