如何在 c# 中阅读带有行号的 PDF?

How to read PDF with line numbers in c#?

提问人:Niranjan 提问时间:6/5/2023 最后编辑:Niranjan 更新时间:6/14/2023 访问量:78

问:

嗨,我正在尝试阅读pdf文档以及行号。

PDF

在上图中,我显示了 PDF。在pdf文件中,每行都有行号。我想保存在数据库中,比如

Line Number  Content
1            It is agreed on the date shown in Box 2 between the party named in Box 3 as

当我阅读文档时,所有内容都以文本形式出现,但是如何分别识别行号和内容?因为在内容中也可能出现数字,所以数字逻辑无助于识别行号。有没有识别行号?任何帮助将不胜感激。谢谢

C# ASP.NET 核心 PDF

评论


答:

0赞 Chen 6/14/2023 #1

您使用哪个库从 PDF 中读取数据?我用iTextSharp做了一个例子,你可以参考它。

在逐行读取数据的过程中,使用正则表达式获取字符串的最后一行号,并使用以下方法将其删除:TrimEnd()

public IActionResult Index()
{
    PdfReader reader = new PdfReader(@"C:\Users\Administrator\Desktop\Test.pdf");
    int intPageNum = reader.NumberOfPages;
    string[] words;
    string line;
    string text;
    PdfModel pdfModel = new PdfModel();

    for (int i = 1; i <= intPageNum; i++)
    {
        text = PdfTextExtractor.GetTextFromPage(reader, i, new LocationTextExtractionStrategy());

        words = text.Split('\n');
        for (int j = 0, len = words.Length; j < len; j++)
        {
            line = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(words[j]));
            var x = Regex.Match(line, @"([0-9]+)[^0-9]*$");
            if (x.Success && x.Groups.Count > 0)
            {
                var foundNumber = x.Groups[1].Captures[0].Value;
                line = line.Trim().TrimEnd(foundNumber.ToCharArray());
                pdfModel.Line = int.Parse(foundNumber);
                pdfModel.Content = line;
                _context.PdfModel.Add(pdfModel);
                _context.SaveChanges();
            }
        }
    }
    return View();
}

测试结果:

我的PDF:

enter image description here

我的数据库:enter image description here