簡體   English   中英

無法使用 iTextSharp 讀取 pdf 文件中特定位置的文本

[英]Unable to read text in a specific location in a pdf file using iTextSharp

我被要求閱讀 pdf 文本並做一些事情正在提取文本。 我正在使用 iTextSharp 讀取 PDF。 這里的問題是 PdfTextExtractor.GetTextFromPage 沒有給我頁面的所有內容。 例如

在此處輸入圖像描述

在上面的 PDF 中,我無法閱讀以藍色突出顯示的文本 我無法閱讀的字符的 Rest。 下面是執行上述操作的行

           `string filePath = "myFile path";
            PdfReader pdfReader = new PdfReader(filePath);
            for (int page = 1; page<=1; page++)
            {
                ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                string currentPageText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
            }`

這里有什么建議嗎?

我在 SO 中經歷了很多查詢和解決方案,但並不特定於這個查詢。

文本提取不提取這些文本的原因很簡單:這些文本不是 static 頁面內容的一部分,而是表單字段,但是 iText 中的“文本提取”(以及其他 ZBCD1B68617759B1DFCFF0403A6B5 庫) static 頁面內容的文本”,因此。 您錯過的那些文本不受文本提取的影響。

如果您想讓表單域值也受文本提取代碼的約束,您首先必須展平表單域可視化。 這里的“扁平化”意味着使它們成為 static 頁面內容的一部分,並刪除所有表單字段動態。

您可以在閱讀此行中的 PDF 后添加

PdfReader pdfReader = new PdfReader(filePath);

代碼來展平這個 PDF 並將展平的 PDF 加載到pdfReader中,例如像這樣:

MemoryStream memoryStream = new MemoryStream();
PdfStamper pdfStamper = new PdfStamper(pdfReader, memoryStream);
pdfStamper.FormFlattening = true;
pdfStamper.Writer.CloseStream = false;
pdfStamper.Close();

memoryStream.Position = 0;
pdfReader = new PdfReader(memoryStream);

從這個重新初始化的pdfReader中提取文本也會為您提供表單字段中的文本。

不幸的是,在內容 stream 的末尾添加了扁平化的表單文本。 由於您選擇的文本提取策略SimpleTextExtractionStrategy只是按照繪制的順序返回文本,因此之前的表單字段內容都在最后被提取。

您可以通過使用不同的文本提取策略來更改此設置,即替換此行:

ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
  • 使用LocationTextExtractionStrategy (它是 iText 發行版的一部分)已經返回了更好的結果; 不幸的是,表單字段值與我們認為在同一行的 static 內容並不完全相同,因此出現了一些意外的換行符。

     ITextExtractionStrategy strategy = new LocationTextExtractionStrategy();
  • 使用 Horizo HorizontalTextExtractionStrategy (來自包含 Java 和 C# 版本的此答案)結果會更好。 但請注意,這種策略並非普遍更好,請閱讀答案文本中的警告。

     ITextExtractionStrategy strategy = new HorizontalTextExtractionStrategy();

暫無
暫無

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

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