按格式从pdf中提取文本

时间:2015-02-01 11:30:19

标签: c# pdf

我正试图从pdfs中提取标题。 到目前为止,我试图阅读纯文本并采取第一行(这是不起作用的,因为在纯文本中头条新闻不在开头),只是从一个区域读取文本(这不起作用,因为区域并不总是一样的。)

最简单的方法是在我看来只读取特殊格式的文本(字体,字体大小等)。 有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用Docotic.Pdf library枚举PDF页面上的所有文本对象。对于每个文本对象,可以获得有关字体和对象大小的信息。以下是样本

public static void listTextObjects(string inputPdf)
{
    using (PdfDocument pdf = new PdfDocument(inputPdf))
    {
        string format = "{0}\n{1}, {2}px at {3}";

        foreach (PdfPage page in pdf.Pages)
        {
            foreach (PdfPageObject obj in page.GetObjects())
            {
                if (obj.Type != PdfPageObjectType.Text)
                    continue;

                PdfTextData text = (PdfTextData)obj;

                string message = string.Format(format, text.Text, text.Font.Name,
                    text.Size.Height, text.Position);
                Console.WriteLine(message);
            }
        }
    }
}

代码将为输入PDF文件的每个页面上的每个文本对象输出如下所示的行。

FACTUUR
Helvetica-BoldOblique, 19.04px at { X=51.12; Y=45.54 }

您可以使用检索到的信息查找最大的文本或粗体文本或文本,以及用于标题标题的其他属性。

如果您的PDF保证标题是页面上最顶层的文字,那么您可以使用更简单的方法

public static void printText(string inputPdf)
{
    using (PdfDocument pdf = new PdfDocument(inputPdf))
    {
        foreach (PdfPage page in pdf.Pages)
        {
            string text = page.GetTextWithFormatting();
            Console.WriteLine(text);
        }
    }
}

GetTextWithFormatting方法按阅读顺序返回文本(即从左上角到右下角)。

免责声明:我是该图书馆的开发人员之一。