我正试图从pdfs中提取标题。 到目前为止,我试图阅读纯文本并采取第一行(这是不起作用的,因为在纯文本中头条新闻不在开头),只是从一个区域读取文本(这不起作用,因为区域并不总是一样的。)
最简单的方法是在我看来只读取特殊格式的文本(字体,字体大小等)。 有没有办法做到这一点?
答案 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
方法按阅读顺序返回文本(即从左上角到右下角)。
免责声明:我是该图书馆的开发人员之一。