簡體   English   中英

PDFBox無法檢測頁面中的圖像

[英]PDFBox not detecting image in page

我正在嘗試使用PDFBox檢測 pdf中的圖像。 pdf有兩個空白圖像,一個在左側(在文本“將其放入框中”下方),另一在右側(在文本“在此框外附加此框”下方)。 這是我用來檢測圖像的代碼:

PDPage page = (PDPage) catalog.getAllPages().get(0);
PDStream contents = page.getContents();
PDFStreamParser parser = new PDFStreamParser(contents.getStream());
parser.parse();
List<Object> tokens = parser.getTokens();

PDResources resources = page.getResources();
Map<String, PDXObjectImage> images = resources.getImages();
if(null != images){
        Iterator<String> it = images.keySet().iterator();
        while(it.hasNext()){
            String key = it.next();
            System.out.println("Key >>>>>>>>>>>>>> "+key);
        }
}

我能夠檢測到第二張圖像。 但是,未檢測到第一張圖像。 問題是什么? 我確定pdf是正確的。 我多次創建它,但仍然面臨着同樣的問題。 我使用Sketch創建了pdf。

謝謝。

簡而言之

我能夠檢測到第二張圖像。 但是,未檢測到第一張圖像。 問題是什么?

實際上,兩個頁面上的圖像都使用相同的圖像資源 ,只是延伸到不同的尺寸。

詳細

如果查看頁面的內容流,則會在最后看到以下內容:

q
720 0 0 970 832 126 cm
/Im1 Do
Q
q
512 0 0 128 144 968 cm
/Im1 Do
Q

前四行在拉伸到720 x 970的位置832、126處繪制圖像資源Im1 ,后四行在拉伸到512 x 128的位置144、968處繪制相同圖像資源Im1

該怎么辦

您僅查看頁面資源以查找頁面圖像的方法是不合適的,因為

  • 如您所見,頁面上的單個圖像資源可能會被多次拉伸到不同的尺寸,
  • 圖像資源可能根本不在頁面上使用(例如,某些文檔具有從所有頁面引用的一個大資源字典;對於給定頁面,可能無法使用很多資源),
  • 圖像可以內聯到內容流中; 您的方法根本看不到這些圖像,並且
  • Xobjects或Patterns可能會顯示在您的頁面上,它們各自的資源中可能分別具有圖像; 因為您只查看即時頁面資源中包含的圖像資源,所以您的方法也將找不到它們。

PDFBox示例PrintImageLocations了一個更好的解決方案(僅對內聯和可能帶有圖案的圖像失敗),其輸出為文件

*******************************************************************
Found image [Im1]
position = 832.0, 128.0
size = 360px, 462px
size = 720.0, 970.0
size = 10.0in, 13.472222in
size = 254.0mm, 342.19446mm

*******************************************************************
Found image [Im1]
position = 144.0, 128.0
size = 360px, 462px
size = 512.0, 128.0
size = 7.111111in, 1.7777778in
size = 180.62222mm, 45.155556mm

此示例利用PDFBox PDFStreamEngine解析處理以繪制頁面的內容。

暫無
暫無

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

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