在当前项目中,我需要在网页中显示 PDF。现在我们将它们嵌入到 Adobe PDF 阅读器中,但我宁愿有更优雅的东西(阅读器不能很好地集成,它不能被透明区域覆盖,...)。
我设想一些类似于 google 文档的东西,它们将 PDF 显示为图像,但也允许从 PDF 中选择和复制文本(这是我们的要求)。
有人知道他们是怎么做到的吗?或者我们可以使用任何库来获得可比较的结果?
我知道我们可以在服务器端将 PDF 分割成图像,但这不允许选择文本 ...
在此先感谢您的帮助
PS:基于 Java 的项目,使用 wicket。
最佳答案
我有一些建议,但实现这些东西肯定很难。祝你好运!
第一种方法:
首先,使用 pdf-renderer ( https://pdf-renderer.dev.java.net/ ) 之类的库将 PDF 转换为图像。将这些图像存储在您的服务器上或使用缓存技术。将 PDF 转换为图像并不难。
然后,使用 Type Select JavaScript 库 ( http://www.typeselect.org/ ) 将文本数据覆盖在您的文本上。该文本是可选择的,而真实文本仍在原始图像中。获取原文看下方法,或者自己动手看结论。
然后必须将原始文本叠加在图像上,这很痛苦。
第二种方法:
PDF 规范允许将文本信息链接到字体。大多数文档使用 Type-3 或 Type-1 字体的子集,这些字体(通常)使用标准字符集(我认为它是 Unicode,但不确定)。如果您的 PDF 文档不包含标准字符集(即它定义了自己的字符集),则无法知道哪些字符是哪些字形(符号),因此您无法转换为文本表示。
阅读 PDF 文档,阅读图形对象,解析指令(使用 PDF 规范以更深入地了解此过程)以呈现文本,将它们转换为 HTML。 HTML 转换可以根据使用的字体参数(它们的名称和属性)和说明(字母间距、行间距)选择合适的标签(如 <H1>
和 <p>
,还有 <b>
和 <i>
) , 大小, 脸)在图形对象中。
您可以使用 pdf-renderer 库来读取和解析 PDF 文件,然后自己编写一个 HTML 翻译器。这并不容易,它并没有涵盖 PDF 文档的所有情况。
在这种方法中,您将失去文档的原始外观。有一些 PDF 生成库不使用 Adobe 字体技术。这也是第一种方法的问题,即使您可以看到它也无法选择它(但与官方 Adobe Reader 的行为相同,因此您可能会说没什么大不了的)。
结论:
您可以选择第一种方法、第二种方法或两者。
我不会朝光学字符识别 (OCR) 的方向发展,因为它在解决此类问题时实在是太过分了,因为它也有几个缺点。这种方法是谷歌使用的。如果有无法识别的字符,则由人工进行处理。
如果您喜欢人工处理;您只能使用 Type Select 库和 PDF 到图像的转换并自己进行 OCR,这可能是解决问题的最简单的方法(人类作为机器 = 智能便宜,哈哈)。
关于java - 在 ala google 文档的网站上呈现 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2389234/