![](/img/trans.png)
[英]I'm trying to load a PDF using PDF Box however, the PDF just wont open. I'm not sure whats wrong in my code
[英]PDF Box getXObjectNames() does not recognize bar code on my PDF, however it does recognize it on a PDF file I got off the internet
我正在嘗試使用getXObjectNames()
從我的 PDF 中獲取和讀取條形碼。
如果你看到上面的 JIRA 項目,你會看到一個 PDF 文件附在它上面。 當我在該 PDF 文件上運行代碼時,我得到了所需的輸出(即打印了條形碼類型。)
但是,當我在 PDF 上運行它時,它無法識別其中的條形碼。 (我已經檢查過條形碼實際上是圖像而不是文本。)
此外,它聽起來不可思議,但它在我的PDF曾經做過的工作,從那時起,我還沒有做出任何改變,但它絕對不會現在的工作。 (由於某種原因,我無法共享 PDF。)
有沒有人遇到過類似的問題?
這也是我關於 Stack Overflow 的第一個問題。 如果我在任何地方錯了,請告訴我。
這是該 pdf 的鏈接: https : //drive.google.com/file/d/1PzVApIePg4U9XL399BpAd2oeY6Q2tLEB/view? usp =drivesdk
由於您沒有顯示您的代碼,而只是將其描述為與PDFBOX-2124 中的代碼非常相似,並且正如您所說,由於某種原因您無法共享 PDF,因此我只有該代碼要分析。 因此,我無法說出真正的問題,而只是列舉了一些可能的問題
首先,該代碼僅檢查給定頁面的直接資源以獲取位圖圖像:
PDResources pdResources = pdPage.getResources();
Map<String, PDXObject> xobjects = (Map<String, PDXObject>) pdResources.getXObjects();
if (xobjects != null)
{
for (String key : xobjects.keySet())
{
PDXObject xobject = xobjects.get(key);
if (xobject instanceof PDImageXObject)
{
PDImageXObject imageObject = (PDImageXObject) xobject;
String suffix = imageObject.getSuffix();
if (suffix != null)
{
BufferedImage image = imageObject.getImage();
extractBarcodeArrayByAreas(image, this.maximumBlankPixelDelimiterCount);
}
}
}
}
( PDFBOX-2124 PdPageBarcodeScanner方法scsan
)
位圖圖像也可以存儲在其他地方,例如
此外,位圖可能以 PDFBox 不知道如何導出為BufferedImage
某種格式(特別是某些顏色空間)給出。
此外,可以使用應用於純黑色位圖的一些掩碼構建條形碼,在這種情況下,您的代碼可能只會嘗試掃描該純黑色圖像。
此外,你說
我已經檢查過條形碼實際上是圖像而不是文本。
如果只檢查條碼不是文本,那么它可能不僅是位圖圖像,還可以通過矢量圖形指令繪制。 因此,您還必須檢查所有內容流中是否有繪制條碼的矢量圖形指令。
也可能有組合,例如在繪制純黑色內聯位圖圖像等時,矢量圖形的軟掩碼可能處於活動狀態。
而且我確定我在這里錯過了許多選項。
作為下一步,您可能想要分析無法共享的PDF,以了解該條碼的繪制方式。
或者,您可以將頁面呈現為位圖圖像並使用 zxing 在該大位圖中搜索條形碼。
Sample PDF.pdf
您提供了一個示例 PDF 的鏈接。 所以我嘗試使用與PDFBOX-2124非常相似的代碼提取條形碼。 顯然,那里的代碼是用於某些 PDFBox 2.0.0-SNAPSHOT 的,因此必須對其進行一些更正。 特別是您在問題標題中提到的方法getXObjectNames()
最后被使用:
PDResources pdResources = pdPage.getResources();
int index = 0;
for (COSName name : pdResources.getXObjectNames()) {
PDXObject xobject = pdResources.getXObject(name);
if (xobject instanceof PDImageXObject)
{
PDImageXObject imageObject = (PDImageXObject) xobject;
String suffix = imageObject.getSuffix();
if (suffix != null)
{
BufferedImage image = imageObject.getImage();
File file = new File(RESULT_FOLDER, String.format("Sample PDF-1-%s.%s", index, imageObject.getSuffix()));
ImageIO.write(image, imageObject.getSuffix(), file);
index++;
System.out.println(file);
}
}
}
( ExtractImages測試testExtractSamplePDFJayshreeAtak
)
輸出:一張位圖圖像導出為“示例 PDF-1-0.tiff”,如下所示:
因此,我無法重現您的問題
PDF Box getXObjectNames() 無法識別我的 PDF 上的條形碼,但它可以識別我從互聯網上獲取的 PDF 文件中的條形碼
顯然getXObjectNames()
確實返回位圖圖像 xobject 資源的名稱,而 PDFBox 將其導出就好了。
請檢查您的代碼是否如所聲稱的那樣未提取圖像,或者后面的某個步驟是否根本無法處理它。
如果在您的情況下確實沒有提取圖像,
如果在您的情況下,圖像被提取但未按預期被后續代碼分析,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.