海
我正在使用 ITextSharp 将 pdf 文件解析为文本输出。我想知道我是否可以捕获 pdf 是否包含下标或上标,有人知道如何使用 ITextSharp 或其他库在 pdf 中区分普通字符和上标吗?
谢谢
海
我正在使用 ITextSharp 将 pdf 文件解析为文本输出。我想知道我是否可以捕获 pdf 是否包含下标或上标,有人知道如何使用 ITextSharp 或其他库在 pdf 中区分普通字符和上标吗?
谢谢
免责声明:我实际上没有任何证据,但是......
我希望超级/下标与普通文本相同。相同的字体,只是更小。如果它碰巧与其他文本在同一行,则会提高和降低超级/子脚本 - 但您将无法使用面向布局的格式(如 PDF)中的某些显式元标记来检测它。
换句话说,我猜您需要通过启发式方法识别上标/下标:与“同一”行上的其他文本相比,查找更小且垂直移位的文本。这是否容易做到取决于 PDF 创建者和 ITextSharp 的详细信息,因为即使识别“线”也不一定简单。
您将不得不在这里实现一些自定义逻辑。PDF 中没有表示上标/下标的标记,它只是位于不同的基线上。在这种情况下,您必须记下您的基线(以及您的身高)。一些快速的伪代码:
//input -> curText
if(curText.Baseline > previousText.Baseline &&
curText.Baseline < (prevText.Baseline + prevText.Height))
{
// This is most likely superscript //
}
else if(curText.Baseline < previousText.Baseline &&
prevText.Baseline < (curText.Baseline + curText.Height))
{
// This is most likely subscript //
}
else
{
// This is probably normal text //
}
此解决方案要求您组织 PDF 文件完全无组织的性质。过去,我使用自定义类的 List<> 来将给定 y 坐标的所有文本组织到数组中。使用类似的东西,您可以比较单独的线条,并在绘画或以其他方式传输它们之前对它们进行您可能想要的任何工作。