iTextSharp 如何读取PDF文件中的表格

2024-04-12

我正在努力将 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);

该策略将它找到的所有文本从上到下排列在从左到右的行中(实际上还考虑了文本行角度)。因此,从包含多行内容的单元格的表格中提取文本显然不是您所需要的。

根据相关文档,可以采取不同的方法:

  • 使用 iTextSimpleTextExtractionStrategy如果相关文档中的文本绘制操作已经按照文本提取所需的顺序进行。
  • 如果文档表已正确标记,则使用自定义文本提取策略,该策略会利用标记信息。
  • 使用复杂的自定义文本提取策略,尝试从文本排列、线条路径或背景颜色中获取提示,以猜测表格单元格结构并逐个单元格提取文本。

在这种情况下,OP 评论说,他changed LocationTextExtractionStrategy with SimpleTextExtractionStrategy,然后就成功了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iTextSharp 如何读取PDF文件中的表格 的相关文章

随机推荐