Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PDF压缩技术_Java_Pdf_Compression_Itext - Fatal编程技术网

Java PDF压缩技术

Java PDF压缩技术,java,pdf,compression,itext,Java,Pdf,Compression,Itext,我正在尝试用Java压缩PDF文档。原始文件大小为1.5-2MB,我们需要将其减小到1MB以下。我尝试在它上面使用iText压缩,但是效果不是很好,文件大小仍然大于1MB byte[] mergedFileContent = byteArrayOS.toByteArray(); reader = new PdfReader(mergedFileContent); PdfStamper stamper = new PdfStamper(reader, byteArrOScomp); stamper

我正在尝试用Java压缩PDF文档。原始文件大小为1.5-2MB,我们需要将其减小到1MB以下。我尝试在它上面使用iText压缩,但是效果不是很好,文件大小仍然大于1MB

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

有人做过类似的工作吗?任何输入都将不胜感激。

您可能希望查看官方的iText示例,尤其是该示例涉及在初始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();
}
public void compressPdf(String src,String dest)抛出IOException,DocumentException{
PdfReader读取器=新PdfReader(src);
PdfStamper stamper=新PdfStamper(读卡器、新文件输出流(dest)、PdfWriter.VERSION_1_5);
stamper.getWriter().setCompressionLevel(9);
int total=reader.getNumberOfPages()+1;
对于(int i=1;i

如果你想知道我是如何找到它的:我在谷歌上搜索了“itextpdf示例完全压缩”,这是第二个结果。(第一个发现包含相同的方法,但不是来自官方的iText网站。)

您可能希望查看官方的iText示例,尤其是该示例涉及在初始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();
}
public void compressPdf(String src,String dest)抛出IOException,DocumentException{
PdfReader读取器=新PdfReader(src);
PdfStamper stamper=新PdfStamper(读卡器、新文件输出流(dest)、PdfWriter.VERSION_1_5);
stamper.getWriter().setCompressionLevel(9);
int total=reader.getNumberOfPages()+1;
对于(int i=1;i

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

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

您可以在以后压缩文件。它不是真正的PDF压缩格式,但是,如果您受到限制,需要更好的压缩,那么压缩整个内容可能会有很好的效果,因为它可以压缩元数据。

您的pdf包含哪些媒体/图像,以及您打算如何压缩它们?@Jankapunkt pdf基本上由文本和表格格式组成。我们没有在pdf上呈现任何高质量的图像。我只是想把它缩小到一个小于1MB的大小。你绑定到pdf母版了吗?正如我所看到的,在文档中并不是很清楚它使用了什么压缩算法。显示了不同的可能的压缩算法和方法。因此,如果您的库不允许您选择不同的压缩方法,您可以切换到另一个库。您不能设置一些随机的目标大小,并期望软件压缩到该大小(或更小)。如果可能的话,所有压缩文件都应该以1字节结束。请参阅。@Nishant无意冒犯,但这应该是您研究能力的一部分。您的pdf包含哪些媒体/图像以及您打算如何压缩它们?@Jankapunkt pdf基本上由文本和表格格式组成。我们没有在pdf上呈现任何高质量的图像。我只是想把它缩小到一个小于1MB的大小。你绑定到pdf母版了吗?正如我所看到的,在文档中并不是很清楚它使用了什么压缩算法。显示了不同的可能的压缩算法和方法。因此,如果您的库不允许您选择不同的压缩方法,您可以切换到另一个库。您不能设置一些随机的目标大小,并期望软件压缩到该大小(或更小)。如果可能的话,所有压缩文件都应该以1字节结束。请参阅。@Nishant无意冒犯,但这应该是您研究能力的一部分。pdf正在使用第三方工具处理。我尝试过使用所有不同级别的压缩,但是stamper.setFullCompression();仍然可以产生最好的结果。pdf正在使用第三方工具进行处理。我尝试过使用所有不同级别的压缩,但是stamper.setFullCompression();仍然能产生最好的结果。