【问题标题】:Pdf full text search on iPad with Quartz 2D使用 Quartz 2D 在 iPad 上搜索 PDF 全文
【发布时间】:2011-04-04 20:35:31
【问题描述】:

我正在尝试使用 Quartz 2D 实现全文搜索,但这是一场噩梦。 我可以使用 PDF 运算符(TJ 和其他...)从 pdf 页面“提取”文本

    CGPDFOperatorTableRef myTable;

myTable = CGPDFOperatorTableCreate();

CGPDFOperatorTableSetCallback (myTable, "BT", &op_BT);
CGPDFOperatorTableSetCallback (myTable, "Td", &op_Td);
CGPDFOperatorTableSetCallback (myTable, "TD", &op_TD);
CGPDFOperatorTableSetCallback (myTable, "Tm", &op_Tm);
CGPDFOperatorTableSetCallback (myTable, "T*", &op_T);
CGPDFOperatorTableSetCallback (myTable, "TJ", &op_TJ);
CGPDFOperatorTableSetCallback (myTable, "Tf", &op_TF);
CGPDFOperatorTableSetCallback (myTable, "ET", &op_ET);

但同时,我需要在 PDF 页面上用一些矩形突出显示匹配项,例如在 Safari 中完成的。 有什么建议如何实施吗? 有没有一些解决方案不需要如此庞大的工作?

【问题讨论】:

    标签: ipad pdf full-text-search 2d quartz-graphics


    【解决方案1】:

    这只是冰山一角……

    检测到 TJ 中编码的“字节”并不意味着您已经拥有“文本”,甚至完全能够将其转换回来。

    在 PDF 中绘制文本时有一个“活动”字体 (Tf)。字体有一个编码 - 周围有很多不同的编码,有些不是“可逆”的,因为你可以从中获得一个 unicode。

    如果您有“可逆”编码,那很好。实现反向查找仍然需要做很多工作(尤其是对于多字节编码..),但是您已经完成了美好的一天。

    如果你的编码不​​是那么聪明,你可能还有一个额外的 /ToUnicode 映射允许计算一个 unicode。额外的努力,但现在你没事了。

    ...除了周围的许多现有文档都不支持这些映射到 unicode...

    ...毕竟:从这个意义上说,PDF 不包含“文本”,它会绘制字符。所以理论上你必须在虚拟页面中绘制字符,然后才能以任何可读的顺序对它们进行排序......

    总之,很有趣。

    【讨论】:

    • 感谢 mtraut ...我已经完成使用 TJ/Tj 运算符获取文本...但是当字体编码为 Identity-H 时。获取文本会产生问题...我不知道如何使用 ToUnicode 映射获取文本?
    • 需要大量的 cmets 来描述文本提取机制。相反,我希望您推荐 PDF 规范(The 完整参考)或现有的实现,如 jPod。在 Java 中,您应该对字符查找有一个很好的了解。
    • 简而言之:如果您有 ToUnicode,则不需要编码。获取下一个字符的(可能是多字节!)输入并通过 ToUnicode 映射。这是一个复杂的多索引映射工具——您将不得不实现它。结果应该是你的独角兽角色
    • 你好 Ravi Chokshi,我也在从事 PDF 搜索功能。我成功地突出了搜索结果。但我想在列表中列出所有搜索的 PDF 以及周围的文本和页码。就像大多数 pdf 阅读器应用程序一样。你能帮我么。或者为此提供一些演示代码以便更好地理解。
    • 能否告诉我们如何突出显示搜索结果?
    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2011-04-07
    • 2023-03-18
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多