在加标签的 PDF 中提取阅读顺序序列
Extract Reading Order Sequence in a Tagged PDF
我目前正在验证加标签的 PDF 文件中内容的正确顺序。
有没有办法以编程方式提取带标签的 PDF 文件的阅读顺序号?
我试过将带标签的 PDF 转换为 XML,但我无法确定哪些标签属于特定文本。
我试过以下库:
- 同步融合
- IText7
但我找不到任何获取其阅读订单号的方法。
真的可以吗?提前致谢!
您可以使用 PdfPig (.Net) 库提取标记 pdf 的标记内容树。我的理解是阅读顺序由标记内容标识符(MCID)指示。
如果标记的内容元素不包含 MCID(如分页元素),则 MCID 设置为 -1。
每个 MarkedContentElement
将包含属于它的字母、图像和路径:
using UglyToad.PdfPig;
[...]
using (PdfDocument document = PdfDocument.Open(pathToFile))
{
for (int p = 0; p < document.NumberOfPages; p++)
{
var page = document.GetPage(p + 1);
// extract the page's marked content
var markedContents = page.GetMarkedContents();
var orderedMarkedContents = markedContents
.OrderBy(mc => mc.MarkedContentIdentifier);
foreach (var mc in orderedMarkedContents)
{
// do something
}
}
}
如果你想把结果提取到XML,你可以看看PageXmlTextExporter
class。查看 wiki 了解有关 ITextExporter
和 IReadingOrderDetector
的更多信息。
注意:我是这个库的积极贡献者。
我目前正在验证加标签的 PDF 文件中内容的正确顺序。
有没有办法以编程方式提取带标签的 PDF 文件的阅读顺序号?
我试过将带标签的 PDF 转换为 XML,但我无法确定哪些标签属于特定文本。
我试过以下库:
- 同步融合
- IText7
但我找不到任何获取其阅读订单号的方法。
真的可以吗?提前致谢!
您可以使用 PdfPig (.Net) 库提取标记 pdf 的标记内容树。我的理解是阅读顺序由标记内容标识符(MCID)指示。
如果标记的内容元素不包含 MCID(如分页元素),则 MCID 设置为 -1。
每个 MarkedContentElement
将包含属于它的字母、图像和路径:
using UglyToad.PdfPig;
[...]
using (PdfDocument document = PdfDocument.Open(pathToFile))
{
for (int p = 0; p < document.NumberOfPages; p++)
{
var page = document.GetPage(p + 1);
// extract the page's marked content
var markedContents = page.GetMarkedContents();
var orderedMarkedContents = markedContents
.OrderBy(mc => mc.MarkedContentIdentifier);
foreach (var mc in orderedMarkedContents)
{
// do something
}
}
}
如果你想把结果提取到XML,你可以看看PageXmlTextExporter
class。查看 wiki 了解有关 ITextExporter
和 IReadingOrderDetector
的更多信息。
注意:我是这个库的积极贡献者。