2016-05-04 213 views
-1

我想压缩Java中的PDF文档。原始文件大小为1.5-2 MB,我们需要将其降低到小于1 MB。我尝试使用iText压缩,但结果不是那么有效,文件大小仍然大于1 MB。PDF压缩技术

byte[] mergedFileContent = byteArrayOS.toByteArray(); 
reader = new PdfReader(mergedFileContent); 
PdfStamper stamper = new PdfStamper(reader, byteArrOScomp); 
stamper.setFullCompression(); 
stamper.close(); 
reader.close(); 

有没有人有过类似的工作?任何投入将不胜感激。

+0

你的pdf包含哪些媒体/图像,你打算如何压缩它们? – Jankapunkt

+0

@Jankapunkt pdf基本上由文本和表格格式组成。我们没有任何高质量的图像在PDF上呈现。我只是想把它缩小到可能小于1MB的大小。 – Nishant

+0

您是否需要pdf压模器?正如我所看到的那样,它在文档中并不十分清楚它使用什么压缩算法。 [Adobe PDF规范](https://wwwimages2.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf)显示了不同的可能的压缩算法和方法。因此,如果你的lib不提供你选择不同的压缩方法,你可能会切换到另一个lib。 – Jankapunkt

回答

0

您可能需要查看官方的iText示例,特别是示例HelloWorldCompression是关于在初始PDF创建时和作为后处理步骤应用不同程度的压缩。

该示例中的以下方法可能会对您有所帮助。

public void compressPdf(String src, String dest) throws IOException, DocumentException { 
    PdfReader reader = new PdfReader(src); 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest), PdfWriter.VERSION_1_5); 
    stamper.getWriter().setCompressionLevel(9); 
    int total = reader.getNumberOfPages() + 1; 
    for (int i = 1; i < total; i++) { 
     reader.setPageContent(i, reader.getPageContent(i)); 
    } 
    stamper.setFullCompression(); 
    stamper.close(); 
    reader.close(); 
} 

如果你不知道如何找到它:我用Google搜索“itextpdf例如全压缩”,这是第二次的结果。 (第一个查找包含相同的方法,但不是来自官方的iText站点。)

+0

PDF正在使用第三方工具进行处理。而且我尝试过使用所有不同的压缩级别,但是stamper.setFullCompression();仍然产生最好的结果。 – Nishant

0

您可以在之后对文件进行gzip,zip等。它并不是一种真正的PDF压缩格式,但如果您受到限制并希望获得更好的压缩效果,那么压缩整个事物可能会有很好的效果,因为它可以压缩元数据。