簡體   English   中英

使用 c# 打印 PDF 文件的每一行

[英]Print each Line of a PDF File with c#

我有一個存儲在服務器 url 中的 pdf 文件,我想獲取文件的每一行,我想稍后將其導出到一個 excel 文件,所以我需要逐行獲取每一行,我將把代碼放在這里。 OBS: pdf 的 url 在 3 小時后停止工作,我將始終在評論中更新它。 謝謝。

using System;
using System.Net.Http;
using System.Threading.Tasks;
                    
    public class Program
    {
        public static async Task Main()
        {
                var pdfUrl = "https://eproc.trf4.jus.br/eproc2trf4/controlador.php?acao=acessar_documento_implementacao&doc=41625504719486351366932807019&evento=20084&key=4baa2515293382eb41b2a95e121550490b5b154f1c4c06e8b0469eff082311e6&hash=3112f8451af24a1a5c3e69afab09f079&termosPesquisados=";
                var client = new HttpClient();
                var response = await client.GetAsync(pdfUrl);
    
                using (var stream = await response.Content.ReadAsStreamAsync())
                {
                    Console.WriteLine("print each line of my pdf file");
                }
        }
    }

好吧,從 PDF 中提取文本不是一項普通的任務。 如果您需要真正通用的解決方案適用於任何 pdf,那么這里最先進的解決方案是使用基於 AI 的 API,例如由 Google、AWS 或 Azure 等一些雲平台提供:

https://cloud.google.com/vision/docs/pdf

https://docs.microsoft.com/en-us/azure/applied-ai-services/form-recognizer/

https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/automatically-extract-content-from-pdf-files-using-amazon-textract.html

因此,將 pdf 讀取為字節,將字節發送到基於 AI 的外部 API,然后接收解析后的內容。

當然,你需要做一些准備才能使用上面提到的雲服務,而且需要一些錢

我怎樣才能最好地解釋為什么您需要像 pdftotext 這樣的 pdf 解壓縮器,即,由應用程序解碼時的第一行(這不是原始字節流)分為三個獨立的部分。 幸運的是整個單詞字符串(他們不需要),幸運的是在這種情況下來自同一個 ascii 字體表。

BT /F1 12.00 Tf ET
BT 42.52 793.70 Td (Espelho de Valores Atualizados.) Tj ET
BT /F1 12.00 Tf ET
BT 439.37 793.70 Td (Data: ) Tj ET
BT 481.89 793.70 Td (05/07/2021) Tj ET 

因此我們可以很容易地看到,當轉換為 ascii 時,所有三個部分都處於 793.70 級別,因此 lib 可以假設它們是只有 3 個不同偏移量的一行,因此您需要一個第 3 方 lib 來解碼和重新組合一行文本,就好像它一樣只是一個行字符串。 這需要首先將 pdf 保存為文件,將整個文件解析為幾種常見的編碼,如 ascii、hex 和 UTF-16 混合(通常沒有 UTF-8),然后將它們保存為 UTF-8 編碼的純文本文件,然后你可以根據需要提取UTF-8行。

不清楚您希望的行輸出格式是什么,因為 PDF 沒有編號的行,但是如果我們根據人類的布局概念將數字分配給帶有文本(有些沒有)的行,我們可以使用 poppler utils 和 native 運行幾行操作系統文本解析。 這里 Cme 可以有循環和參數,但為了演示而硬編碼。 請注意,控制台輸出需要本地 chcp,但文本文件很好

Poppler\poppler-22.04.0\Library\bin>Cme.bat |more

@curl -o brtemp.pdf "https://eproc.trf4.jus.br/eproc2trf4/controlador.php?acao=acessar_documento_implementacao&doc=41625504719486351366932807019&evento=20084&key=c6c5f83e942a3ee021a874f6287505c1cb484235935ff1305c6081893e3481b1&hash=922cacb9024f200d13d3f819e2e906f4&termosPesquisados="
@pdftotext -f 1 -l 1 -nopgbrk -layout -enc UTF-8 brtemp.pdf page1.txt
@pdftotext -f 2 -l 2 -nopgbrk -layout -enc UTF-8 brtemp.pdf page2.txt
@find /N /V "Never2BFound" page1.txt
@find /N /V "Never2BFound" page2.txt

回應

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3749  100  3749    0     0   4051      0 --:--:-- --:--:-- --:--:--  4052

---------- PAGE1.TXT
[1]Espelho de Valores Atualizados.                                    Data:   05/07/2021
[2]

在此處輸入圖像描述

第1頁.txt

Espelho de Valores Atualizados.                                    Data:   05/07/2021

PROCESSO         : 5018290-57.2021.4.04.9388
ORIGINÁRIO       : 5002262-05.2018.4.04.7000/PR
TIPO             : Precatório

REQUERENTE       : ERCILIA GRACIE RIBEIRO
ADVOGADO         : ANA PAULA HORIGUCHI - PR064269

REQUERIDO  : INSTITUTO NACIONAL DO SEGURO SOCIAL - INSS
PROCURADOR : PROCURADORIA REGIONAL FEDERAL DA 4 REGIÃO - PRF4

DEPRECANTE       : Juízo Substituto da 10ª VF de Curitiba

ETC.....

暫無
暫無

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

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