使用itextsharp dll在VB.NET或C#中读取PDF内容

10 浏览
0 Comments

使用itextsharp dll在VB.NET或C#中读取PDF内容

如何使用itextsharp的Pdfreader类阅读PDF内容。我的PDF文档可能包含纯文本或文本图片。

admin 更改状态以发布 2023年5月23日
0
0 Comments

LGPL / FOSS iTextSharp 4.x

var pdfReader = new PdfReader(path); //other filestream etc
byte[] pageContent = _pdfReader .GetPageContent(pageNum); //not zero based
byte[] utf8 = Encoding.Convert(Encoding.Default, Encoding.UTF8, pageContent);
string textFromPage = Encoding.UTF8.GetString(utf8);

其他的答案对我都没有用,它们似乎都是针对 iTextSharp 的 AGPL v5 版本。我无法在 FOSS 版本中找到任何关于 SimpleTextExtractionStrategy 或 LocationTextExtractionStrategy 的参考。

与此相关的其他可能非常有用的内容:

const string PdfTableFormat = @"\(.*\)Tj";
Regex PdfTableRegex = new Regex(PdfTableFormat, RegexOptions.Compiled);
List ExtractPdfContent(string rawPdfContent)
{
    var matches = PdfTableRegex.Matches(rawPdfContent);
    var list = matches.Cast()
        .Select(m => m.Value
            .Substring(1) //remove leading (
            .Remove(m.Value.Length - 4) //remove trailing )Tj
            .Replace(@"\)", ")") //unencode parens
            .Replace(@"\(", "(")
            .Trim()
        )
        .ToList();
    return list;
}

如果显示的文本为 Foo(bar),则它在 PDF 中的编码形式为 (Foo\(bar\))Tj,此方法将按预期返回 Foo(bar) 的纯文本数据。该方法将从 PDF 的原始内容中剥离出许多其他信息,如位置坐标。

0
0 Comments
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;
using System.IO;
public string ReadPdfFile(string fileName)
{
    StringBuilder text = new StringBuilder();
    if (File.Exists(fileName))
    {
        PdfReader pdfReader = new PdfReader(fileName);
        for (int page = 1; page <= pdfReader.NumberOfPages; page++)
        {
            ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
            string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
            currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
            text.Append(currentText);
        }
        pdfReader.Close();
    }
    return text.ToString();
}

翻译成中文为:一个加粗的段落内容是123。

0