按格式从pdf中提取文本
Extract text from pdf by format
我正在尝试从 pdf 中提取标题。
直到现在我尝试阅读纯文本并获取第一行(这不起作用,因为在纯文本中标题不在开头)并且只是从一个区域读取文本(这不起作用,因为区域并不总是相同的)。
在我看来,最简单的方法是只阅读具有特殊格式(字体、字体大小等)的文本。
有办法吗?
您可以使用 Docotic.Pdf library 枚举 PDF 页面上的所有文本 object。对于每个文本 object,有关 object 的字体和大小的信息是可用的。下面是一个示例
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 文件的每一页上的每个文本 object 输出如下行。
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
方法returns文本阅读顺序(即从左上到右下的位置)。
免责声明:我是图书馆的开发者之一。
我正在尝试从 pdf 中提取标题。 直到现在我尝试阅读纯文本并获取第一行(这不起作用,因为在纯文本中标题不在开头)并且只是从一个区域读取文本(这不起作用,因为区域并不总是相同的)。
在我看来,最简单的方法是只阅读具有特殊格式(字体、字体大小等)的文本。 有办法吗?
您可以使用 Docotic.Pdf library 枚举 PDF 页面上的所有文本 object。对于每个文本 object,有关 object 的字体和大小的信息是可用的。下面是一个示例
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 文件的每一页上的每个文本 object 输出如下行。
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
方法returns文本阅读顺序(即从左上到右下的位置)。
免责声明:我是图书馆的开发者之一。