2016-04-03 5 views
0

Als Teil eines Projekts, das einen browserbasierten visuellen Editor enthält, verwende ich fabric.js, um SVG-Dateien zu erstellen, die dann in PDF-Dateien konvertiert werden.Wiederverwendung von grafischen Elementen in PDF-Dateien

In einigen Fällen ist das Endergebnis eine generierte PDF-Datei, bei der das gleiche Bild mehrmals im gesamten Dokument erscheint, was zu einem erheblichen und unnötigen Dateiaufblähung führt, was zu sehr großen PDF-Dateien führt.

Auf SVGs kann dies einfach behoben werden, indem ein einzelnes <image> Element verwendet und mit <use> Elementen wiederverwendet wird (wie in meiner previous question beantwortet). Wenn Sie Inkscape verwenden, um das SVG in das PDF-Format zu konvertieren, scheint Inkscape nicht den Hinweis zu erhalten, da es das wiederholte Bild für jede einzelne Darstellung im Dokument einbettet.

Das PDF-Komprimierungstool um Smallpdf.com scheint in der Lage zu sein, dieses Problem zu beheben, aber ich kann nicht verstehen, wie genau es das tut; noch kann ich diese Optimierung mit Inkscape oder irgendeinem anderen Werkzeug, das ich kenne, replizieren.

Gibt es einen Namen für diese Technik, oder besser noch eine Möglichkeit für mich, dies selbst zu replizieren? Ich habe gelesen, dass die XObject s in PDFs das geeignete Werkzeug dafür sind, aber ich verstehe nicht, wie ich sie selbst implementieren kann, noch kann ich reale Beispiele finden.

+0

Haben Sie ein PDF-Dokument dafür? Ich werde eine allgemeine Antwort hinzufügen, um zu erklären, wie dies mit XObjects in PDF funktioniert (ähnlich wie bei SVG), aber zu wissen, ob dies für Ihre Dateien zutrifft, würde einen Blick darauf erfordern, wie die Datei tatsächlich erstellt wird. –

+0

@DavidvanDriessche danke, ich werde in Kürze ein Beispiel vorbereiten und posten. – Pepe

Antwort

1

Im Allgemeinen bietet PDF in der Tat die gleichen Fähigkeiten wie SVG auf sehr ähnliche Weise durch die Verwendung von XObjects.

Ein XObject kann verwendet werden, um ein Bild oder eine Gruppe von Grafikoperatoren zu definieren, die ansonsten Teil des Seiteninhalts wären. Es erhält einen Namen und einen eigenen Content-Stream und verfügt über eigene Ressourcen, um es zu einem eigenständigen Inhalt zu machen. Dieses XObject kann dann mit dem "Do" -Operator in den Seiteninhalt eingefügt werden, was sehr ähnlich zu dem ist, was Sie mit "Verwenden" in SVG beschreiben.

Theoretisch kann ein XObject einmal in einer PDF-Datei vorkommen und dann mehrmals im gesamten Dokument verwendet werden, ohne die Dateigröße der PDF-Datei wesentlich zu erhöhen. Ob dies geschieht oder nicht, hängt von der PDF-Erstellungsbibliothek oder den Optimierungsfunktionen einer PDF-Bibliothek ab. Die Adobe PDF-Bibliothek ist beispielsweise in der Lage, PDF-Dateien so zu optimieren, dass in XObjects auftretender wiederholter Inhalt wegoptimiert wird - eine einzelne Kopie des XObject bleibt dann erhalten und jede Verwendung dieses XObjects in einer Seitenbeschreibung bezieht sich auf diese Single Objekt. Ich habe Beispiele gesehen, bei denen die Dateigröße in Szenarien mit variablen Daten von mehreren Gigabytes auf weniger als ein Megabyte reduziert wurde.

Um dies zu nutzen, benötigen Sie:

  • eine PDF-Datei, in der sich wiederholenden Inhalt in der Tat in einer XObject
  • PDF Generator oder Prozessor, der korrekt enthalten ist, erstellen oder smart genug, um Optimieren Sie die PDF-Datei, um dies zu nutzen
Verwandte Themen