在Java中拆分PDF时,仅保留使用的字体子集

时间:2016-09-06 11:53:43

标签: java pdf itext pdfbox

我正在使用iText将PDF文档拆分为PDF文件的单独页面。每个文件似乎都太大了,因为输入PDF中使用的所有字体都保存在所有结果页面中,这显然不是很干净。

分裂代码如下。请注意PdfSmartCopysetFullCompression无助于缩小尺寸(我不明白为什么)。

public List<byte[]> split(byte[] input) throws IOException, DocumentException {
    PdfReader pdfReader = new PdfReader(input);
    List<byte[]> pdfFiles = new ArrayList<>();
    int pageCount = pdfReader.getNumberOfPages();
    int pageIndex = 0;
    while (++pageIndex <= pageCount) {
        Document document = new Document(pdfReader.getPageSizeWithRotation(pageIndex));
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        PdfCopy pdfCopy = new PdfSmartCopy(document, byteArrayOutputStream);
        pdfCopy.setFullCompression();
        PdfImportedPage pdfImportedPage = pdfCopy.getImportedPage(pdfReader, pageIndex);
        document.open();
        pdfCopy.addPage(pdfImportedPage);
        document.close();
        pdfCopy.close();
        pdfFiles.add(byteArrayOutputStream.toByteArray());
    }
    return pdfFiles;
}

那么Java(iText与否)是否有办法解决这些问题?

使用演示PDF更新

这是a 377KB PDF using multiple CJK fonts,其中任何页面使用1或2个字体。子PDF的摘要大小为1.2MB。考虑到CJK字体非常臃肿,我想找到一种方法来删除未使用的字体,甚至删除使用过的字体中未使用的字符。

所以我的想法是只保留使用过的字体中的字符,并将它们嵌入子文件中,然后取消嵌入所有其他字体。有什么建议吗?

0 个答案:

没有答案