首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用iText7压缩生成PDF的最佳实践

使用iText7压缩生成PDF的最佳实践
EN

Stack Overflow用户
提问于 2017-08-31 13:21:48
回答 1查看 5.8K关注 0票数 0

我有现有的/源PDF源文档,我从其中复制选定的页面,并使用选定的页面生成目标PDF。现有/源文档中的每一页都以不同的分辨率进行扫描,其大小各不相同:

  1. 生成4页=> 175 kb的文档
  2. 生成的文档有4页=> 923 kb (我想这是因为源文档中每个页面的扫描分辨率更高)。

压缩这些页面的最佳实践是什么?是否有压缩/缩小最终PDF大小的代码示例,其中包括复制的不同分辨率的源文档页?

最亲切的问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-31 14:00:35

如果您只是将扫描添加到一个pdf文档中,如果您使用的是高分辨率图像,则结果文档的大小上升是有意义的。

请记住,iText是一个pdf库。不是图像处理库。

当然,您可以使用常规的旧java来尝试压缩图像。

代码语言:javascript
运行
复制
public static void writeJPG(BufferedImage bufferedImage, OutputStream outputStream, float quality) throws IOException
{
    Iterator<ImageWriter> iterator = ImageIO.getImageWritersByFormatName("jpg");
    ImageWriter imageWriter = iterator.next();
    ImageWriteParam imageWriteParam = imageWriter.getDefaultWriteParam();
    imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    imageWriteParam.setCompressionQuality(quality);
    ImageOutputStream imageOutputStream = new MemoryCacheImageOutputStream(outputStream);
    imageWriter.setOutput(imageOutputStream);
    IIOImage iioimage = new IIOImage(bufferedImage, null, null);
    imageWriter.write(null, iioimage, imageWriteParam);
    imageOutputStream.flush();
}

但实际上,将扫描图像放入pdf中会使生活变得更加困难。想象一下在你之后要处理那个文件的人。他们打开它,看到文本,尝试选择它,但什么都没有发生。

此外,在创建WriterProperties实例时,您可能会更改PdfWriter

代码语言:javascript
运行
复制
PdfWriter writer = new PdfWriter(dest,
    new WriterProperties().setFullCompressionMode(true));

完全压缩模式将某些对象压缩为一个对象流,它还将压缩PDF的交叉引用表。由于文档中的大多数对象都是图像(已经压缩),压缩对象不会有多大效果,但是如果您有大量页面,压缩交叉参考表可能会导致更小的PDF文件。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45982516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档