我尝试构建一个可以使用C#将PDF转换为excel的应用程序。 我已经搜索了一些库来帮助我,但是大多数都是商业许可的,所以我最终选择了iTextSharp.dll
这是免费的,但我很少找到任何好的开源文档。 这些是我读过的一些链接:
https://yoda.entelect.co.za/view/9902/extracting-data-from-pdf-files
https://www.mikesdotnetting.com/article/80/create-pdfs-in-asp-net-getting-started-with-itextsharp
还有更多。但是,他们中的大多数并没有真正解释代码的用途。 所以这是IText中最常见的C#代码:
StringBuilder text = new StringBuilder(); // my new file that will have pdf content?
PdfReader pdfReader = new PdfReader(myPath); // This maybe how IText read the pdf?
for (int page = 1; page <= pdfReader.NumberOfPages; page++) // looping for read all content in pdf?
{
ITextExtractionStrategy strategy = new LocationTextExtractionStrategy(); // ?
string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy); // ?
currentText = Encoding.UTF8.GetString(Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.UTF8.GetBytes(currentText))); // maybe how IText convert the data to text?
text.Append(currentText); // maybe the full content?
}
pdfReader.Close(); // to close the PdfReader?
如您所见,我仍然不清楚我所拥有的IText代码。告诉我,如果我的知识是正确的,并给我一个我仍然不理解的代码的答案。
谢谢。
答案 0 :(得分:4)
首先让我解释一下PDF PDF不是“您所看到的就是您所获得的”格式。
在内部,PDF更像是包含渲染软件说明的文件。除非您使用带标记的PDF文件,否则PDF文档自然不具有“段落”或“表格”的概念。
例如,如果您在记事本中打开PDF,则可能会看到类似
的内容7 0 obj
<</BaseFont/Helvetica-Oblique/Encoding/WinAnsiEncoding/Subtype/Type1/Type/Font>>
endobj
文档中的说明聚集到“对象”中,对象编号,可以交叉引用。
正如布鲁诺已经在评论中指出的那样,这意味着找出一张桌子是什么,或者一张桌子的内容是什么,真的很难。
PDF文档本身只能告诉您:
使用iText核心库,您可以
这可以让您编写自己的解析逻辑。 例如:
幸运的是,pdf2Data
解决方案(iText插件)已经为您做了那样的事情。
有关更多信息,请转到http://pdf2data.online/