如何使用iText7减小生成的PDF的大小

时间:2017-09-22 06:51:17

标签: pdf pdf-generation itext7

我使用此方法从原始PDF中逐页复制和缩放,并将它们放到生成的PDF中,该PDF仅包含原始PDF中的选定和缩放页面。

private static void addScaledPage(PdfDocument pdf, PdfDocument srcDoc, String pageNumber) throws IOException {
        PdfPage page = pdf.addNewPage(PageSize.A4);
        PdfCanvas canvas = new PdfCanvas(page);
        AffineTransform transformationMatrix = AffineTransform.getScaleInstance(0.86, 0.86);
        canvas.concatMatrix(transformationMatrix);
        PdfFormXObject pageCopy = srcDoc.getPage(Integer.valueOf(pageNumber)).copyAsFormXObject(pdf);
        canvas.addXObject(pageCopy, 50, 30);
    }

此代码工作正常,但是当我尝试从原始PDF中获取具有140页和大约1页的3页时,会出现小问题。 10 MB大小=>生成的PDF有3个选定页面也有约。 10 MB 此外,当我尝试从原始文档复制3页或10页时,我总是得到相同大小的生成PDF =>似乎从源PDF复制引用

我很乐意给我一些建议,我在实施中做错了吗?还是其他一些建议?

最诚挚的问候,

1 个答案:

答案 0 :(得分:0)

这很大程度上取决于文档中嵌入的资源。如果在您复制的页面上使用了使用CMYK颜色的大图像或具有CJK字形的字体(这些资源中的任何一个可能很容易为几MB),那么整个资源将被复制到PDF中。重新创造。您只复制了140个页面中的三个页面这一事实并没有太大区别:文件大小的大部分将由资源占用,并且页面不会在没有它的情况下正常显示。

解决方案是在复制页面期间或之后优化文档的工作流程。这可以将图像转换为等效的较小颜色空间或字体的子集,以便您只携带所需的字形。这两种技术都可以大大减小文件的大小(但这完全取决于源文件本身的构造方式)。