pdf - 寻找可以为我提供 pdf 文本坐标的软件或 API
问题描述
我希望一个简单的问题 - 我有一个 pdf 并且想要检测特定单词或占位符文本的坐标。然后我打算使用 itextsharp 在找到的坐标的顶部标记一个替换的文本位。
任何人都可以推荐任何东西吗?
谢谢
解决方案
正如评论中所回答的那样,可以使用 iText 来执行这样的任务。也许有一些更好的解决方案,但是,我对此表示怀疑。上述问题的原因,即“[itextsharp] 有时给出搜索文本所在句子开头的坐标”,是有时字形非常接近,以至于它们的框重叠,因此我不明白如何它可以随心所欲地处理。
因此,您可以执行以下操作:
扩展
LocationTextExtractionStrategy
类和覆盖eventOccurred
,例如如下:@Override public void eventOccurred(IEventData data, EventType type) { if (type.equals(EventType.RENDER_TEXT)) { TextRenderInfo renderInfo = (TextRenderInfo) data; // Obtain all the necesary information from renderInfo, for example LineSegment segment = renderInfo.getBaseline(); // ... }
将此类扩展类的实例传递给
PdfTextExtractor.getTextFromPage
如下:PdfTextExtractor.getTextFromPage(pdfDocument.getPage(1), new ExtendedLocationTextExtractionStrategy()
一旦找到文本,就会触发该事件。
当然,这样的解决方案存在一些困难,因为您在上面要查找和编写的文本可能不是以“文本”的形式出现在 PDF 中,而是以“T”、“ex”、t”甚至“t”的形式出现"、"x"、"e"、"T"。但是,由于您使用 iText,您可能希望利用其产品之一的优势 - pdfSweep
。该产品旨在从 PDF 中彻底删除不必要的内容,具有这样内容作为某些位置(您想要获取,所以这不是一个选项)或正则表达式传递。
这是如何创建这样的正则表达式策略(在文档中查找所有“Dolor”和“dolor”实例,完全删除它们(从所有流中,以便它们既不会从 PDF 查看器中观察到,也不会在底层中找到) PDF 对象):
RegexBasedCleanupStrategy strategy = new RegexBasedCleanupStrategy("(D|d)olor").setRedactionColor(ColorConstants.GREEN);
这是如何使用它:
PdfAutoSweep autoSweep = new PdfAutoSweep(strategy);
autoSweep.cleanUp(pdf); // a PdfDocument instance
这是在出现不必要文本的位置上写一些文本的方法:
for (IPdfTextLocation location : strategy.getResultantLocations()) {
Rectangle rect = location.getRectangle();
// do something, for exapmle, write some text
}
推荐阅读
- javascript - JS:在新页面打开时播放音频
- c# - WPF C#在鼠标移动时绘制平滑矩形而不缺少黑色外部区域
- html - HTML 调整页面大小以适应任何尺寸的显示器
- java - 查看 MVC 架构 NullPointerException
- ethereum - geth 永远不会停止在 rinkeby 测试网上同步
- ajax - 拉拉维尔。AJAX 不适用于 apache
- video-streaming - 如何加载测试/压力测试使用 Opentok 实现的移动视频流应用程序?
- c# - 如果我向datagridview中的现有行添加新行,如何在c#中只将这些新行插入到sql数据库中?
- terraform - 评估某些资源未能完全创建的属性列表
- vba - 将邮件解密到 Exchange 公用文件夹