我正在尝试使用 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 中所做的那样。 有什么建议如何实现吗? 是否有一些解决方案不需要如此庞大的工作量?
最佳答案
这只是冰山一角...
检测到 TJ 中编码的“字节”并不意味着您已经拥有“文本”,甚至根本无法将其转换回来。
在绘制文本的 PDF 中,有一个“事件”字体 (Tf)。字体有一个编码——周围有很多不同的编码,有些不是“可逆的”,因为你可以从中获得一个 unicode。
如果您有一个“可逆”编码,那很好。实现反向查找(尤其是对于多字节编码......)还有很多工作要做,但总有一天你已经完成了。
如果您的编码不是那么智能,您可能还有一个额外的/ToUnicode 映射可以计算一个 unicode。额外的努力,但现在你没事了。
...除了许多现有文档不支持这些到 unicode 的映射...
...毕竟:PDF 不包含那种意义上的“文本”,它绘制字符。所以理论上你必须在虚拟页面中绘制字符,然后才能以任何可读顺序对它们进行排序......
总而言之,它非常有趣。
关于ipad - 使用 Quartz 2D 在 iPad 上进行 Pdf 全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3585279/