3 回答

TA貢獻1772條經(jīng)驗 獲得超5個贊
您無法像使用iTextSharp一樣閱讀和解析PDF的內(nèi)容。
來自iTextSharp的SourceForge教程:
您無法使用iText“解析”現(xiàn)有PDF文件,您只能在每頁“讀取”該頁面。
這是什么意思?
pdf格式只是一個畫布,其中放置文本和圖形時沒有任何結構信息。因此,PDF文件中沒有任何“iText-objects”。在每個頁面中可能會有許多“字符串”,但您無法使用這些字符串重建短語或段落??赡芾L制了許多線條,但您無法根據(jù)這些線條檢索表格對象。簡而言之:使用iText解析PDF文件的內(nèi)容是不可能的。在新聞組新聞://comp.text.pdf上發(fā)布您的問題,也許您會從那些已經(jīng)構建了可以解析PDF并提取其內(nèi)容的工具的人那里得到一些答案,但是不要指望能夠執(zhí)行子彈的工具 - 結構化文本的轉(zhuǎn)換。

TA貢獻1777條經(jīng)驗 獲得超10個贊
LGPL / FOSS iTextSharp 4.x
var pdfReader = new PdfReader(path); //other filestream etc
byte[] pageContent = _pdfReader .GetPageContent(pageNum); //not zero based
byte[] utf8 = Encoding.Convert(Encoding.Default, Encoding.UTF8, pageContent);
string textFromPage = Encoding.UTF8.GetString(utf8);
其他答案都沒有對我有用,它們似乎都針對iTextSharp的AGPL v5。我再也找不到任何參考SimpleTextExtractionStrategy或LocationTextExtractionStrategy在FOSS版本。
與此相關的其他可能非常有用的東西:
const string PdfTableFormat = @"\(.*\)Tj";
Regex PdfTableRegex = new Regex(PdfTableFormat, RegexOptions.Compiled);
List<string> ExtractPdfContent(string rawPdfContent)
{
var matches = PdfTableRegex.Matches(rawPdfContent);
var list = matches.Cast<Match>()
.Select(m => m.Value
.Substring(1) //remove leading (
.Remove(m.Value.Length - 4) //remove trailing )Tj
.Replace(@"\)", ")") //unencode parens
.Replace(@"\(", "(")
.Trim()
)
.ToList();
return list;
}
這將從PDF中提取僅文本數(shù)據(jù),如果顯示的文本Foo(bar)將在PDF中編碼,則(Foo\(bar\))Tj此方法將按Foo(bar)預期返回。此方法將從原始pdf內(nèi)容中刪除許多其他信息,例如位置坐標。
- 3 回答
- 0 關注
- 1236 瀏覽
添加回答
舉報