java - 在 ala google 文档的网站上呈现 pdf

标签 java pdf

在当前项目中,我需要在网页中显示 PDF。现在我们将它们嵌入到 Adob​​e 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 生成库不使用 Adob​​e 字体技术。这也是第一种方法的问题,即使您可以看到它也无法选择它(但与官方 Adob​​e Reader 的行为相同,因此您可能会说没什么大不了的)。

结论:

您可以选择第一种方法、第二种方法或两者。

我不会朝光学字符识别 (OCR) 的方向发展,因为它在解决此类问题时实在是太过分了,因为它也有几个缺点。这种方法是谷歌使用的。如果有无法识别的字符,则由人工进行处理。

如果您喜欢人工处理;您只能使用 Type Select 库和 PDF 到图像的转换并自己进行 OCR,这可能是解决问题的最简单的方法(人类作为机器 = 智能便宜,哈哈)。

关于java - 在 ala google 文档的网站上呈现 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2389234/

相关文章:

java - ORA-28040 : No matching authentication protocol Oracle

java - 保存登录详细信息(首选项)android

java - 计算文本框填充的百分比

c# - 元素不允许错误 itextSharp

java - 无法在 Android Studio 中导入数据绑定(bind)类

java - Apache Flink fromCollection java.lang.IllegalStateException : unread block data

pdf - 转换 : Postscript delegate failed

android - itext 旋转 pdf 文档但不旋转图像

c++ - 如何使用 Mako SDK 在文档页面的给定区域内平铺图像?

javascript - 使用 pdfmake——在 AngularJS 中生成 pdf 工具