通过java使用DPI压缩pdf大小

通过java使用DPI压缩pdf大小,java,pdf,compression,dpi,Java,Pdf,Compression,Dpi,正在寻找一种在JAVA中通过更改DPI来压缩pdf质量的方法 例如,我尝试了PDFBox/itext库,但仍然无法实现。特别是,如果当前PDF DPI较高,我需要设置DPI(我需要降低扫描文档的质量) 请注意,我只寻找免费的开源库 请尝试完全压缩 PdfReader reader = new PdfReader ( src) ; PdfStamper stamper = new PdfStamper( reader, new FileOutputStream(dest) , Pdfwrlte

正在寻找一种在JAVA中通过更改DPI来压缩pdf质量的方法

例如,我尝试了PDFBox/itext库,但仍然无法实现。特别是,如果当前PDF DPI较高,我需要设置DPI(我需要降低扫描文档的质量)


请注意,我只寻找免费的开源库

请尝试完全压缩

PdfReader reader = new PdfReader ( src) ; 
PdfStamper stamper = new PdfStamper( reader, new FileOutputStream(dest) , 
Pdfwrlter. VERSION 1_5) ; 
stamper.getWriter().setCompressionLeveI (9);
int total = reader . getNumberOfPages() + 1; 
for (int i = 1; i < total; i++) {
      reader . setpagecontent (i, reader . getpagecontent (i) ) ; 
}
stamper. setFuIICompression() ; 
stamper. close ( ) ; 
PdfReader阅读器=新的PdfReader(src);
PdfStamper stamper=新PdfStamper(读取器,新文件输出流(dest),
Pdfwrlter.版本1_5);
stamper.getWriter().setCompressionLeveI(9);
int total=读卡器。getNumberOfPages()+1;
对于(int i=1;i
请尝试完全压缩

PdfReader reader = new PdfReader ( src) ; 
PdfStamper stamper = new PdfStamper( reader, new FileOutputStream(dest) , 
Pdfwrlter. VERSION 1_5) ; 
stamper.getWriter().setCompressionLeveI (9);
int total = reader . getNumberOfPages() + 1; 
for (int i = 1; i < total; i++) {
      reader . setpagecontent (i, reader . getpagecontent (i) ) ; 
}
stamper. setFuIICompression() ; 
stamper. close ( ) ; 
PdfReader阅读器=新的PdfReader(src);
PdfStamper stamper=新PdfStamper(读取器,新文件输出流(dest),
Pdfwrlter.版本1_5);
stamper.getWriter().setCompressionLeveI(9);
int total=读卡器。getNumberOfPages()+1;
对于(int i=1;i
最后,我使用itextpdf库找到了最佳解决方案。 我们可以根据该因素降低DPI

例如:系数=新DPI/当前DPI (系数=0.5f)

导入java.awt.Graphics2D;
导入java.awt.geom.AffineTransform;
导入java.awt.image.buffereImage;
导入java.io.ByteArrayOutputStream;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入javax.imageio.imageio;
导入com.itextpdf.text.DocumentException;
导入com.itextpdf.text.pdf.PRStream;
导入com.itextpdf.text.pdf.PdfName;
导入com.itextpdf.text.pdf.PdfNumber;
导入com.itextpdf.text.pdf.PdfObject;
导入com.itextpdf.text.pdf.PdfReader;
导入com.itextpdf.text.pdf.PdfStamper;
导入com.itextpdf.text.pdf.parser.PdfImageObject;
公共类还原{
公共静态最终字符串SRC=“/Users/xxxx/Downloads/low/input.pdf”;
公共静态最终字符串DEST=“/Users/xxxx/Downloads/low/output.pdf”;
公共静态最终浮动系数=0.5f;
公共静态void main(字符串[]args)引发DocumentException、IOException{
文件文件=新文件(DEST);
文件.getParentFile().mkdirs();
新的ReduceSize().操纵EPDF(SRC,DEST);
}
public void manipulatedpf(String src,String dest)抛出DocumentException,IOException{
PdfReader读取器=新PdfReader(src);
int n=reader.getXrefSize();
PdfObject对象;
溪流;
//查找图像并操纵图像流
对于(int i=0;iif(width最后,我使用itextpdf库找到了最佳解决方案。
我们可以根据该因素降低DPI

例如:系数=新DPI/当前DPI (系数=0.5f)

导入java.awt.Graphics2D;
导入java.awt.geom.AffineTransform;
导入java.awt.image.buffereImage;
导入java.io.ByteArrayOutputStream;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入javax.imageio.imageio;
导入com.itextpdf.text.DocumentException;
导入com.itextpdf.text.pdf.PRStream;
导入com.itextpdf.text.pdf.PdfName;
导入com.itextpdf.text.pdf.PdfNumber;
导入com.itextpdf.text.pdf.PdfObject;
导入com.itextpdf.text.pdf.PdfReader;
导入com.itextpdf.text.pdf.PdfStamper;
导入com.itextpdf.text.pdf.parser.PdfImageObject;
公共类还原{
公共静态最终字符串SRC=“/Users/xxxx/Downloads/low/input.pdf”;
公共静态最终字符串DEST=“/Users/xxxx/Downloads/low/output.pdf”;
公共静态最终浮动系数=0.5f;
公共静态void main(字符串[]args)引发DocumentException、IOException{
文件文件=新文件(DEST);
文件.getParentFile().mkdirs();
新的ReduceSize().操纵EPDF(SRC,DEST);
}
public void manipulatedpf(String src,String dest)抛出DocumentException,IOException{
PdfReader读取器=新PdfReader(src);
int n=reader.getXrefSize();
PdfObject对象;
溪流;
//查找图像并操纵图像流
对于(int i=0;i如果(宽度扫描,每页都是灰度图像?虽然每英寸点数是纸张发布的单位,但对于图像,可管理的属性是以像素为单位的大小和颜色模型(颜色数/索引颜色)。dpi仅间接可用:用较低的dpi替换图像非常困难