Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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_Itext - Fatal编程技术网

Java 如何在不调整图像大小的情况下压缩PDF?

Java 如何在不调整图像大小的情况下压缩PDF?,java,pdf,itext,Java,Pdf,Itext,我正在使用iText压缩现有的pdf。 我正在使用(第二版)中的示例: 包装第4部分第16章; 导入java.awt.Graphics2D; 导入java.awt.geom.AffineTransform; 导入java.awt.image.buffereImage; 导入java.io.ByteArrayOutputStream; 导入java.io.FileOutputStream; 导入java.io.IOException; 导入javax.imageio.imageio; 导入com.

我正在使用iText压缩现有的pdf。 我正在使用(第二版)中的示例:

包装第4部分第16章;
导入java.awt.Graphics2D;
导入java.awt.geom.AffineTransform;
导入java.awt.image.buffereImage;
导入java.io.ByteArrayOutputStream;
导入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;
公共类大小调整映像{
/**生成的PDF文件*/
公共静态字符串RESULT=“results/part4/chapter16/resized_image.pdf”;
/**图像的乘法因子*/
公共静态浮动系数=0.5f;
/**
*操作PDF文件src,结果为文件dest
*@param src原始PDF
*@param dest生成的PDF
*@抛出异常
*@DocumentException
*/
public void manipulatedpf(String src,String dest)抛出IOException,DocumentException{
PdfName key=新的PdfName(“ITXT_SpecialId”);
PdfName值=新的PdfName(“123456789”);
//读文件
PdfReader reader=新的PdfReader(SpecialId.RESULT);
int n=reader.getXrefSize();
PdfObject对象;
溪流;
//查找图像并操纵图像流
对于(int i=0;i
上述代码根据因子缩小图像大小。我不想减小尺寸,但要更改DPI以减小图像大小。 任何帮助都将不胜感激。我是java新手。
还有其他一些可以用来压缩PDF的开源工具?

您已经从我的书中复制/粘贴了一个示例,但是您似乎没有读过这本书,也没有真正尝试过这个示例。你说“我不想降低维度,但要改变DPI。”

嗯。。。这正是我书中的例子所做的!在本例中,我创建了一个PDF,页面大小使用以下矩形定义:
新矩形(400300)
。这意味着我们有一个400×300点的页面(见下面屏幕截图中的蓝点)。在这个页面中,我添加了一个500×332像素的JPG(见红点)。使用以下方法将此图像缩放到400 x 300点:

img.scaleAbsolute(400, 300);
此图像需要55332字节(绿点)

注意,我们可以很容易地计算DPI:图像的宽度为400点;那是5.555英寸。图像的高度为300点;那是4.166英寸。宽度的像素数是500,因此X方向上的DPI是500 X 72/400或90 DPI。高度的像素数为332,因此DPI为332 x 72/300或79.68 DPI

您希望通过降低分辨率来缩小JPG的字节数。但是:您希望图像的大小保持不变:它仍然必须覆盖400 x 300个点

这正是您在问题中复制/粘贴的示例中所做的。让我们看看里面:

图像的尺寸仍然是400×300点(这就是你想要的,不是吗?),但分辨率已经大幅下降:图像现在是250×166像素,而不是500×332像素,而页面上的大小没有改变

现在让我们计算新的DPI:在X方向,我们有250 X 72/400。这是45 DPI。在Y方向,我们有166 x 72/300。这是39.84 DPI这正好是我们以前的DPI的一半这是巧合吗?当然不是!这就是我们使用的
因子。(这完全是一个简单的数学问题。)

由于分辨率降低,图像现在只需要5343字节(而不是原来的55332字节)。你成功了
img.scaleAbsolute(400, 300);