我正在努力将 PDF 转换为文本。我可以正确地从 PDF 中获取文本,但表结构很复杂。我知道 PDF 不支持表格结构,但我认为有一种方法可以正确获取单元格。嗯,例如:
我想转换成这样的文本:
> This is first example.
> This is second example.
但是,当我将 PDF 转换为文本时,这些数据如下所示:
> This is This is
> first example. second example.
如何才能正确获取值?
--EDIT:
以下是我如何将 PDF 转换为文本:
OpenFileDialog ofd = new OpenFileDialog();
string filepath;
ofd.Filter = "PDF Files(*.PDF)|*.PDF|All Files(*.*)|*.*";
if (ofd.ShowDialog() == DialogResult.OK)
{
filepath = ofd.FileName.ToString();
string strText = string.Empty;
try
{
PdfReader reader = new PdfReader(filepath);
for (int page = 1; page < reader.NumberOfPages; page++)
{
ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.LocationTextExtractionStrategy();
string s = PdfTextExtractor.GetTextFromPage(reader, page, its);
s = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(s)));
strText += s;
}
reader.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
为了使我的评论成为实际答案......
您使用LocationTextExtractionStrategy
对于文本提取:
ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.LocationTextExtractionStrategy();
string s = PdfTextExtractor.GetTextFromPage(reader, page, its);
该策略将它找到的所有文本从上到下排列在从左到右的行中(实际上还考虑了文本行角度)。因此,从包含多行内容的单元格的表格中提取文本显然不是您所需要的。
根据相关文档,可以采取不同的方法:
- 使用 iText
SimpleTextExtractionStrategy
如果相关文档中的文本绘制操作已经按照文本提取所需的顺序进行。
- 如果文档表已正确标记,则使用自定义文本提取策略,该策略会利用标记信息。
- 使用复杂的自定义文本提取策略,尝试从文本排列、线条路径或背景颜色中获取提示,以猜测表格单元格结构并逐个单元格提取文本。
在这种情况下,OP 评论说,他changed LocationTextExtractionStrategy
with SimpleTextExtractionStrategy
,然后就成功了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)