【发布时间】:2009-04-25 18:30:58
【问题描述】:
当谷歌在新窗口中显示 gmail 中的 PDF 附件时,我观察了流量。内容作为每个 PDF 页面的 PNG 图像提供。并且可以选择其文本。谷歌在服务器端使用什么来为 pdf 文件中的特定页面生成 PNG 文件? png 文件上的文本选择如何工作?有什么想法吗?
【问题讨论】:
当谷歌在新窗口中显示 gmail 中的 PDF 附件时,我观察了流量。内容作为每个 PDF 页面的 PNG 图像提供。并且可以选择其文本。谷歌在服务器端使用什么来为 pdf 文件中的特定页面生成 PNG 文件? png 文件上的文本选择如何工作?有什么想法吗?
【问题讨论】:
默认情况下,附件是使用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 除外),但它们显然是文本的坐标,可能还有长度。正如the JavaScript Google uses is minimized(或者可能被混淆,但这不太可能)准确地弄清楚客户端选择功能是如何工作的并不是那么容易。但很可能它使用此 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 所做的唯一方法是询问他们。很遗憾 Google 没有官方 IRC 频道,但他们有 a forum for Google Docs support questions。
祝你好运。
【讨论】:
Google 使用内部开发的非开源 PDF 转换器应用程序。因此,您最好查看其他答案发布的链接,因为您无法使用 Google 版本。对不起!
【讨论】:
如果你有文字,你可以把它变成你想要的,
更具体的你应该看看这个链接:pdf to png using php
所以需要 imageMagick imageMagic
编辑:另一个interesting link。
编辑:我在 google 发现了这个,看起来很有趣……所以你可以使用 google api Google Document List Data Api 这是一篇关于它的博文Google API Now Lets You Get Documents in Many Formats
为了确定谷歌使用什么你需要他们的回答? :)
祝你好运!
【讨论】:
嗯.. 这可能只是 Google 正在使用的 pdf2xml 工具。他们只更改了全词的宽度、高度等,并添加了 p 属性...原来是包含行内单词坐标的属性。刚刚玩过它,发现:) 打算使用google 的这个pdf2xml :P 上传,让他们转换...使用xml 来转换... epub? :P
【讨论】:
您可能还想研究使用 Lucence 来索引那些大的 pdf 文件并将相关页面提供给您的用户。
【讨论】: