2011-03-29 60 views
2

我正在使用java pdfBox库来验证单页PDF文件与嵌入式图像。从pdf中提取的图像的DPI与pdfBox

我知道pdf文件本身并不包含DPI信息。

然而,在文档中具有相同尺寸的图像在提取后具有不同的像素大小,并且没有dpi元信息。

那么有可能以某种方式计算相对于PDF页面的图像大小,或使用pdfBox提取带有dpi信息的图像(对于png或jpeg图像文件)?

谢谢!

回答

3

从PDFBOX src下载获取PrintImageLocations.java文件。下面是一个除源的,只有最后一行是由我,它会输出的DPI:

  float imageXScale = ctmNew.getXScale(); 
      float imageYScale = ctmNew.getYScale(); 
      System.out.println("position = " + ctmNew.getXPosition() + ", " + ctmNew.getYPosition()); 
      // size in pixel 
      System.out.println("size = " + imageWidth + "px, " + imageHeight + "px"); 
      // size in page units 
      System.out.println("size = " + imageXScale + "pu, " + imageYScale + "pu"); 
      // size in inches 
      imageXScale /= 72; 
      imageYScale /= 72; 
      System.out.println("size = " + imageXScale + "in, " + imageYScale + "in"); 
      // size in millimeter 
      imageXScale *= 25.4; 
      imageYScale *= 25.4; 
      System.out.println("size = " + imageXScale + "mm, " + imageYScale + "mm"); 

      System.out.printf("dpi = %.0f dpi (X), %.0f dpi (Y) %n", image.getWidth() * 72/ctmNew.getXScale(), image.getHeight() * 72/ctmNew.getYScale()); 

下面是一个输出样本:

实测值图像[X0]

位置= 0.0,0.0

大小= 2544px,3523px < ----像素

大小= 610.56pu,845.52pu < ---- “页单元”,1PU = 1/7 2英寸

大小= 8.48in,11.743334in

大小=215.39198毫米,298.28067毫米

DPI = 300 dpi的(X),300 dpi的(Y)

0

我对pdfBox并不熟悉,但是您有一个与pdf中每个栅格图像相关的CTM。 CTM给出了一个关于页面上图像位置和尺寸的数据。因此,来自提取图像的数据应足以计算相对dpi。