簡體   English   中英

如何檢查PDF頁面的嵌入式圖像分辨率(DPI)?

[英]How to check PDF pages for resolution (DPI) of embedded images?

是否有任何免費的庫可用於獲取PDF文件包含的DPI中的圖像分辨率?

我使用PDFSharp嘗試了以下代碼,但返回的DPI不正確。 例如,它顯示96dpi,而應為150dpi:

using (PdfDocument pdf = PdfReader.Open(sourcePdf))
{
    for (int i = 0; i < pdf.Pages.Count; i++)
    {
        XGraphics xGraphics = XGraphics.FromPdfPage(pdf.Pages[i]);
        float dpi = xGraphics.Graphics.DpiX; 
    }
}

您可以使用命令行工具獲取所需的信息: pdfimages

但是,您需要基於Poppler庫的最新版本pdfimages (而不是基於XPDF的“ pdfimages”!)

最新的Poppler版本使您可以使用-list選項:

pdfimages -list -f 2 -l 4 my.pdf

上面的示例命令的輸出示出了從2至4中的頁面范圍的所有圖像( 開始步驟頁面顯示)( AST頁面來顯示)。

這是上述命令的輸出,使用的是我專門為該問題准備的示例PDF文件(水平滾動以查看所有列):

page num  type width height color comp bpc  enc interp object ID x-ppi y-ppi size ratio
---------------------------------------------------------------------------------------
   2   0 image   697  1238  gray    1   8  jpeg   no       16  0   320   320  142K  17%
   3   1 image   697  1238  gray    1   8  jpeg   no       16  0   151   151  142K  17%
   4   2 image   697  1238  gray    1   8  jpeg   no       16  0    84   115  142K  17%

輸出顯示以下內容:

  1. 在三個頁面2-4上有三個圖像(如第1 + 2列, pagenum )。

  2. 所有三個圖像的PDF 對象ID都是相同的: 16 0 (如第11 + 12列所示,標題object + ID )。 這意味着PDF僅定義了一個不同的對象,但顯示了3次(即,圖像僅嵌入一次,但出現在3頁上)。

  3. 圖像的寬度為697像素,高度為1238像素,圖像深度(每種顏色的位數)為8 ,顏色空間為gray ,顏色通道/組件數為1 ,壓縮方案為jpeg ,字節大小(嵌入)為142K ,其壓縮率為17% (如第4-9和14 + 15列所示, 142K widthheightcolorcompbpcsizeratio )。

  4. 但是,同一張圖片會以不同的分辨率出現在不同的頁面上(以PPI表示 -每英寸像素---而不是DPI ):

    • 第2頁顯示了雙向的PPI為320

    • 第4頁顯示了雙向的PPI為151

    • 而第3頁顯示了水平(X)方向的PPI為84 ,垂直(Y)方向的PPI為115


現在,如果不能將命令行工具重新用於您的目標:上面顯示的工具的基礎Poppler庫肯定是Free( “自由自在” ,以及“啤酒自在” )。


這是我用來演示上述命令輸出的PDF( “ my.pdf”鏈接

PDF不一定在其定義中使用DPI。 PDF允許文檔創建者定義自己的用戶坐標空間,該用戶坐標空間可能會或可能不會映射到類似於“每英寸點數”的內容。

這里:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM