我想知道是否可以使用iTextsharp将图像添加到PDF中,这样您就不必将图像直接添加到页面上,而是首先将它们添加到库中然后引用PDF中所需的库。
这种方法的优点是,如果您重复使用相同的图像,它将不再将图像的精确副本添加到PDF中,而只是重复使用图像的当前副本。
到目前为止我做了一些测试:
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
从这一点可以清楚地看出,PDF不够聪明,不知道我正在重新使用相同的图像并简单地引用它。如果它可能真的很棒......
答案 0 :(得分:2)
图像以PDF格式存储在PDF中。 XObject是eXternal Object的缩写。这意味着图像的位和字节不会存储在页面的内容流中。
正确使用时,iText会在这样的XObject中添加图像的位和字节,并在需要时重复使用。如果您多次添加同一图像并且文件大小增加,则您无法正确使用iText。
请参阅Chapter 3 of the tutorial "iText 7: Building Blocks"并将MaryReillyV2示例与MaryReillyV3示例进行比较。
这是正确的:
Image img = new Image(ImageDataFactory.create(MARY));
document.add(img);
document.add(img);
它会创建一个文件大小为16 KB的文档。
这是错误的:
Image img1 = new Image(ImageDataFactory.create(MARY));
document.add(img1);
Image img2 = new Image(ImageDataFactory.create(MARY));
document.add(img2);
它会创建一个文件大小为31 KB的文档。
两种PDF看起来都与肉眼相同:
唯一的区别是16 KB PDF是由阅读本手册的人创建的,而31 KB PDF是由没有人创建的。
文件mary_reilly_V1.pdf
是一个PDF文件,我们只将图像添加到了一次。正如您所注意到的,文件大小与我们已正确添加图像两次的PDF的差异几乎相同。
额外评论
答案是关于iText 7,但iText 5也是如此。