我有一个带有表格结构的PDF文件,但我无法将其存储在数据库中,因为PDF文件是Mangal字体。
所以我遇到两个问题:
我已使用以下代码设法为英语执行此操作:
ITextExtractionStrategy strategy = new LocationTextExtractionStrategy();
string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, i+1, strategy);
text.Append(currentText);
string rawPdfContent = Encoding.UTF8.GetString(Encoding.Convert(Encoding.UTF8, Encoding.UTF8, pdfReader.GetPageContent(i + 1)));
此编码提供表格结构,但仅适用于英文字体,想知道马拉地语。
答案 0 :(得分:1)
有趣的是,要求没有。 1实际上是最难的。
为了理解原因,您需要了解一下PDF。 PDF不是WYSIWYG格式。如果您在记事本(或记事本++)中打开PDF文件,您将看到它似乎不包含任何人类可读的信息。
事实上,PDF包含告诉查看器程序(如Adobe)如何呈现PDF的说明。
因此,不存在实际的表格(就像您在HTML文档中所期望的那样),它将包含以下内容:
另见How does TextRenderInfo work in iTextSharp?
为了从PDF中提取表格,您需要做几件事。
这是很多工作。这些都不是微不足道的。事实上,这就是人们写博士论文的那种东西。
iText以pdf2Data tool的形式很好地实现了大多数算法。
答案 1 :(得分:-1)
代码:
ITextExtractionStrategy strategy = new LocationTextExtractionStrategy();
string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, i+1, strategy);
string rawPdfContent = Encoding.UTF8.GetString(Encoding.Convert(Encoding.UTF8, Encoding.UTF8, pdfReader.GetPageContent(i + 1)));
然后我从PDF中识别出线条(水平和垂直)。至于行,PDF有re或m和l关键字。
然后我为从iTextSharp获得的马拉地语文本工作。
然后我合并了两个所需的位置我使用代码提取文本 -
Int64 width = Convert.ToInt64(linesVertical[5].StartPoint.X) - Convert.ToInt64(linesVertical[2].StartPoint.X);
Int64 height = Convert.ToInt64(linesVertical[2].EndPoint.Y) - (Convert.ToInt64(linesVertical[2].StartPoint.Y));
System.util.RectangleJ rect = new System.util.RectangleJ(Convert.ToInt64(linesVertical[2].StartPoint.X), (800 - Convert.ToInt64(linesVertical[2].EndPoint.Y) + 150), width, height);
RenderFilter[] renderFilter = new RenderFilter[1];
renderFilter[0] = new RegionTextRenderFilter(rect);
ITextExtractionStrategy textExtractionStrategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), renderFilter);
Owner_Name = PdfTextExtractor.GetTextFromPage(reader, 1, textExtractionStrategy);