Java如何控制生成pdf的大小_如何使用pdfbox或其他Java库减小合并的PDF / A-1b文件的大小...

文章探讨了如何使用Apache PDFBox在Java中合并PDF/A-1b文件时减小生成文件的大小。作者遇到的问题是合并后的文件过大,可能是由于嵌入的字体导致的。尝试删除嵌入的字体并未成功,代码示例显示了当前处理字体的方式,寻求解决方案。
摘要由CSDN通过智能技术生成

输入 :包含嵌入式字体的(例如14个)PDF / A-1b文件列表。

处理 :与Apache PDFBOX进行简单合并。

结果 :1个PDF / A-1b文件,文件大小太大(太大)。(这几乎是所有源文件大小的总和)。

问题 :是否可以减小生成的PDF的文件大小?

想法 :删除多余的嵌入式字体。但是如何?这是正确的做法吗?

不幸的是,以下代码无法完成任务,但突出了明显的问题。

try (PDDocument document = PDDocument.load(new File("E:/tmp/16189_ZU_20181121195111_5544_2008-12-31_Standardauswertung.pdf"))) {

List collectedFonts = new ArrayList<>();

PDPageTree pages = document.getDocumentCatalog().getPages();

int pageNr = 0;

for (PDPage page : pages) {

pageNr++;

Iterable names = page.getResources().getFontNames();

System.out.println("Page " + pageNr);

for (COSName name : names) {

collectedFonts.add(name);

System.out.print("\t" + name + " - ");

PDFont font = page.getResources().getFont(name);

System.out.println(font + ", embedded: " + font.isEmbedded());

page.getCOSObject().removeItem(COSName.F);

page.getResources().getCOSObject().removeItem(name);

}

}

document.save("E:/tmp/output.pdf");

}

该代码产生如下输出:

Page 1

COSName{F23} - PDTrueTypeFont ArialMT-Bold, embedded: true

COSName{F27} - PDTrueTypeFont ArialMT-Regular, embedded: true

Page 2

COSName{F23} - PDTrueTypeFont ArialMT-Bold, embedded: true

COSName{F33} - PDTrueTypeFont ArialMT-BoldItalic, embedded: true

COSName{F25} - PDTrueTypeFont ArialMT-Italic, embedded: true

COSName{F27} - PDTrueTypeFont ArialMT-Regular, embedded: true

Page 3

COSName{F23} - PDTrueTypeFont ArialMT-Bold, embedded: true

COSName{F25} - PDTrueTypeFont ArialMT-Italic, embedded: true

COSName{F27} - PDTrueTypeFont ArialMT-Regular, embedded: true

Page 4

COSName{F23} - PDTrueTypeFont ArialMT-Bold, embedded: true

COSName{F25} - PDTrueTypeFont ArialMT-Italic, embedded: true

COSName{F27} - PDTrueTypeFont ArialMT-Regular, embedded: true

Page 5

COSName{F23} - PDTrueTypeFont ArialMT-Bold, embedded: true

COSName{F33} - PDTrueTypeFont ArialMT-BoldItalic, embedded: true

COSName{F27} - PDTrueTypeFont ArialMT-Regular, embedded: true

Page 6

COSName{F23} - PDTrueTypeFont ArialMT-Bold, embedded: true

COSName{F33} - PDTrueTypeFont ArialMT-BoldItalic, embedded: true

COSName{F27} - PDTrueTypeFont ArialMT-Regular, embedded: true

Page 7

COSName{F23} - PDTrueTypeFont ArialMT-Bold, embedded: true

COSName{F33} - PDTrueTypeFont ArialMT-BoldItalic, embedded: true

COSName{F27} - PDTrueTypeFont ArialMT-Regular, embedded: true

Page 8

COSName{F23} - PDTrueTypeFont ArialMT-Bold, embedded: true

COSName{F25} - PDTrueTypeFont ArialMT-Italic, embedded: true

COSName{F27} - PDTrueTypeFont ArialMT-Regular, embedded: true

Page 9

COSName{F23} - PDTrueTypeFont ArialMT-Bold, embedded: true

COSName{F33} - PDTrueTypeFont ArialMT-BoldItalic, embedded: true

COSName{F25} - PDTrueTypeFont ArialMT-Italic, embedded: true

COSName{F27} - PDTrueTypeFont ArialMT-Regular, embedded: true

Page 10

COSName{F23} - PDTrueTypeFont ArialMT-Bold, embedded: true

COSName{F33} - PDTrueTypeFont ArialMT-BoldItalic, embedded: true

COSName{F25} - PDTrueTypeFont ArialMT-Italic, embedded: true

COSName{F27} - PDTrueTypeFont ArialMT-Regular, embedded: true

Page 11

COSName{F23} - PDTrueTypeFont ArialMT-Bold, embedded: true

COSName{F33} - PDTrueTypeFont ArialMT-BoldItalic, embedded: true

COSName{F27} - PDTrueTypeFont ArialMT-Regular, embedded: true

Page 12

COSName{F23} - PDTrueTypeFont ArialMT-Bold, embedded: true

COSName{F25} - PDTrueTypeFont ArialMT-Italic, embedded: true

COSName{F27} - PDTrueTypeFont ArialMT-Regular, embedded: true

Page 13

COSName{F23} - PDTrueTypeFont ArialMT-Bold, embedded: true

COSName{F25} - PDTrueTypeFont ArialMT-Italic, embedded: true

COSName{F27} - PDTrueTypeFont ArialMT-Regular, embedded: true

Page 14

COSName{F23} - PDTrueTypeFont ArialMT-Bold, embedded: true

COSName{F25} - PDTrueTypeFont ArialMT-Italic, embedded: true

COSName{F27} - PDTrueTypeFont ArialMT-Regular, embedded: true

任何帮助表示赞赏…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值