我正在使用iText将PDF文档拆分为PDF文件的单独页面。每个文件似乎都太大了,因为输入PDF中使用的所有字体都保存在所有结果页面中,这显然不是很干净。
分裂代码如下。请注意PdfSmartCopy
和setFullCompression
无助于缩小尺寸(我不明白为什么)。
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与否)是否有办法解决这些问题?
这是a 377KB PDF using multiple CJK fonts,其中任何页面使用1或2个字体。子PDF的摘要大小为1.2MB。考虑到CJK字体非常臃肿,我想找到一种方法来删除未使用的字体,甚至删除使用过的字体中未使用的字符。
所以我的想法是只保留使用过的字体中的字符,并将它们嵌入子文件中,然后取消嵌入所有其他字体。有什么建议吗?