当谷歌在新窗口中显示 gmail 中的 PDF 附件时,我观察了流量。内容作为每个 PDF 页面的 PNG 图像提供。并且可以选择其文本。谷歌在服务器端使用什么来为 pdf 文件中的特定页面生成 PNG 文件?png 文件上的文本选择如何工作?有任何想法吗?
6 回答
默认情况下,使用https://docs.google.com/gview安全地查看附件,但事实证明,您可以通过纯 HTTP 请求文件。这使得使用Wireshark更容易弄清楚发生了什么。
正如您所指出的,已经很清楚 PDF 在服务器端转换为 PNG(ImageMagick确实是为此目的的合理解决方案),这样做的明显原因是在仍然能够查看文件的同时保留确切的布局无需 PDF 查看器。
但是,通过查看流量,我发现在调用 /gview?a=gt&docid=&chan=&thid= 时,整个 PDF 也被转换为自定义 XML 格式(一旦您请求文档就完成了)。由于我不能使用 Wireshark 来复制 XML,所以我求助于 Firefox 扩展Live HTTP Headers。这是一段摘录:
<pdf2xml>
<meta name="Author" content="Bruce van der Kooij"/>
<meta name="Creator" content="Writer"/>
<meta name="Producer" content="OpenOffice.org 3.0"/>
<meta name="CreationDate" content="20090218171300+01'00'"/>
<page t="0" l="0" w="595" h="842">
<text l="188" t="99" w="213" h="27" p="188,213">Programmabureau</text>
<text l="85" t="127" w="425" h="27" p="85,117,209,61,277,21,305,124,436,75">Nederland Open in Verbinding (NOiV)</text>
</page>
</pdf2xml>
我还不太确定文本元素上的所有属性代表什么(w 和 h 除外),但它们显然是文本的坐标和可能的长度。由于谷歌使用的 JavaScript 被最小化(或者可能被混淆,但这不太可能),准确地弄清楚客户端选择功能是如何工作的并不是那么容易。但很可能它使用此 XML 文件来确定用户正在查看的文本,然后将其复制到用户的剪贴板。
请注意,有一个名为pdf2xml的开源(GPL 许可)工具具有相似但不完全相同的输出。这是他们主页上的示例:
<?xml version="1.0" encoding="utf-8" ?>
<pdf2xml pages="3">
<title>My Title</title>
<page width="780" height="1152">
<font size="10" face="MHCJMH+FuturaT-Bold" color="#FF0000">
<text x="324" y="37" width="132" height="10">Friday, September 27, 2002</text>
<img x="324" y="232" width="277" height="340" src="text_pic0001.png"/>
<link x="324" y="232" width="277" height="340" dest_page="2" dest_x="141" dest_y="187"/>
</font>
<font size="12" face="AGaramond-Regular" italic="true" bold="true">
<text x="509" y="68" width="121" height="12">This is a test PDF file</text>
<link x="509" y="68" width="121" height="12" href="www.mobipocket.com"/>
</font>
</page>
</pdf2xml>
希望这些信息在任何方面都有用,但是就像其他海报之一提到的那样,确定谷歌所做的唯一方法是询问他们。很遗憾 Google 没有官方 IRC 频道,但他们确实有一个 Google Docs 支持问题的论坛。
祝你好运。
Google 使用内部开发的非开源 PDF 转换器应用程序。因此,您最好查看其他答案发布的链接,因为您无法使用 Google 版本。对不起!
如果你有文字,你可以把它变成你想要的东西,
更具体地说,您应该查看此链接:pdf to png using php
编辑:另一个有趣的链接。
编辑:我在 google 发现了这个,它看起来很有趣......所以你可以使用 google api Google Document List Data Api这是一篇关于它的博客文章Google API Now 让你获取多种格式的文档
为了确定谷歌使用什么,你需要他们的回答吗?:)
祝你好运 !
好吧..这可能只是 Google 正在使用的 pdf2xml 工具。他们只更改了全词的宽度、高度等,并添加了 p 属性……原来是包含行内单词坐标的属性。刚刚玩过它,发现:) 打算使用谷歌的这个 pdf2xml :P 上传,让他们转换...使用 xml 来转换... epub?:P
您可能还想研究使用 Lucence 来索引那些大的 pdf 文件并将相关页面提供给您的用户。