[英]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/
因此,將 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.