【发布时间】:2021-11-28 08:19:01
【问题描述】:
我正在尝试计算每页上 PDF“占用”中的图像百分比。我有以下代码:
PDPageTree list = document.getPages();
int pageNumber = 0;
float imagePerPage = 0;
for (PDPage page : list) {
BufferedImage pageImage = renderer.renderImage(pageNumber, 2);
float pageWidth = pageImage.getWidth();
float pageHeight = pageImage.getHeight();
PDResources pdResources = page.getResources();
int i = 1;
for (COSName name : pdResources.getXObjectNames()) {
PDXObject object = pdResources.getXObject(name);
if (object instanceof PDImageXObject) {
PDImageXObject image = (PDImageXObject) object;
BufferedImage bufferedImage = image.getImage();
float imageWidth = bufferedImage.getWidth();
float imageHeight = bufferedImage.getHeight();
int sumr = 0;
int sumg = 0;
int sumb = 0;
for (int x = 0; x < imageWidth; x++) {
for (int y = 0; y < imageHeight; y++) {
Color pixel = new Color(bufferedImage.getRGB(x, y));
sumr += pixel.getRed();
sumg += pixel.getGreen();
sumb += pixel.getBlue();
}
}
int num = image.getWidth() * image.getHeight();
Color avg = new Color(sumr / num, sumg / num, sumb / num);
if (!new Color(0, 0, 0).equals(avg)) {
String filename = "extracted-image-" + i + ".png";
ImageIO.write(
image.getImage(),
"png",
new File(filename)
);
imagePerPage++;
}
i++;
}
}
System.out.println("Image per page ratio is: " + imagePerPage);
imagePerPage = 0;
pageNumber++;
}
但是,bufferedImage.getWidth() 和 bufferedImage.getHeight() 返回图像的实际大小(以像素为单位)。如何获得每张图片的显示尺寸?
更新 1
我尝试使用 PrintImageLocations.java 示例来检索显示图像大小。但是,对于实际的 pdf,它似乎给出了错误的响应。
如果此 PDF 的媒体框宽度为 612,高度为 792,则 25(宽度)和 16.61(高度)的图像的缩放数字似乎不正确。毕竟,每张图片至少有总宽度的三分之一。
【问题讨论】:
-
请看 PrintImageLocations.java 例子
-
这个例子对我没有帮助。我不需要打印显示尺寸,我需要检索它们。
-
我的意思是您更改源代码以便“检索”它们而不是“打印”它们。
-
它似乎没有让我得到正确的值。我会相应地更新我的描述。
-
现在我们需要 PDF。