2016-06-30 18 views
1

Ich würde gerne wissen, ob es möglich ist, die Bilder mit iTextsharp so in ein PDF einzufügen, dass Sie die Bilder nicht unbedingt direkt auf der Seite hinzufügen, sondern sie erst in eine Bibliothek einfügen und dann auf die Bibliothek wie in Ihrem PDF erforderlich.Ist es möglich, eine Bildbibliothek in iTextsharp zu erstellen?

Der Vorteil dieses Ansatzes ist, dass wenn Sie das gleiche Bild wiederverwenden, es kein exaktes Duplikat des Bildes mehr in das PDF einfügt, sondern nur die aktuelle Kopie des Bildes wiederverwendet.

Ich habe bisher einige Tests gemacht:

Actual image size: 102kB 
1 copy of the image in the PDF + other text: 259kB 
2 copies of the image in the PDF + other text: 481kB 
3 copies...: 704kB 
4 copies...: 926kB 

Daraus ist klar, dass die PDF-Datei zu wissen, nicht intelligent genug ist, dass ich das gleiche Bild wiederverwenden und Referenzierung es einfach. Es wäre wirklich großartig, wenn es sein könnte ...

+0

Haben Sie eine Bibliothek im Dokument, selbst, so dass die Wiederverwendung nur innerhalb des Dokuments ist ? – adv12

+0

Ich denke, er möchte das Wörterbuch verwenden und einen Verweis auf das Objekt des Bildes verwenden. –

+0

Wenn Sie Ihren Code angegeben haben, wäre der Fehler offensichtlich gewesen. – mkl

Antwort

2

Bilder werden in einem PDF als Image XObjects gespeichert. XObject ist die Abkürzung für eXternal Object. Dies bedeutet, dass die Bits und Bytes des Bildes nicht im Inhaltsstrom einer Seite gespeichert werden.

Bei richtiger Verwendung fügt iText die Bits und Bytes eines Bildes in ein solches XObject ein und verwendet es bei Bedarf erneut. Wenn Sie dasselbe Bild mehrmals hinzufügen und die Dateigröße zunimmt, verwenden Sie iText nicht korrekt.

Siehe Chapter 3 of the tutorial "iText 7: Building Blocks" und vergleichen Sie das MaryReillyV2 Beispiel mit dem MaryReillyV3 Beispiel.

Das ist richtig:

Image img = new Image(ImageDataFactory.create(MARY)); 
document.add(img); 
document.add(img); 

Es erstellt ein Dokument mit der Dateigröße 16 KB.

Das ist falsch:

Image img1 = new Image(ImageDataFactory.create(MARY)); 
document.add(img1); 
Image img2 = new Image(ImageDataFactory.create(MARY)); 
document.add(img2); 

Es erstellt ein Dokument mit der Dateigröße 31 KB.

Beiden PDF mit dem bloßen Auge identisch aussehen:

enter image description here

Der einzige Unterschied ist, dass das 16 KB PDF von jemandem erstellt wurde, die das Handbuch zu lesen, während das 31 KB PDF von jemandem erstellt wurde, das nicht.

Die Datei mary_reilly_V1.pdf ist eine PDF-Datei, zu der wir das Bild nur einmal hinzugefügt haben. Wie Sie bemerken, ist der Unterschied in der Dateigröße mit der PDF, der wir das Bild zweimal korrekt hinzugefügt haben, fast identisch.

zusätzliche Bemerkung

Die Antwort ist etwa iText 7, aber das gleiche Prinzip gilt für iText 5.

+0

Ausgezeichnet, danke für die Beantwortung der Frage Bruno! – Wyzak

Verwandte Themen