将PDF渲染为图像并提取超链接

时间:2012-05-14 22:26:18

标签: html pdf hyperlink imagemagick

我使用imagemagick将PDF(由pdfLaTex生成)渲染为图像:

convert -density 120 test.pdf -trim test.png

然后我在HTML文件中使用此图像(为了在自己的wiki引擎中包含乳胶代码)。

但是,当然,PNG文件没有PDF文件包含的任何超链接。

是否有可能提取超链接的坐标和目标网址,以便我可以构建HTML image map

如果它有所不同:我只需要外部(http://)超链接,没有PDF内部超链接。像pdftohtml这样的基于文本的解决方案是不可接受的,因为PDF也包含图形和公式化。

2 个答案:

答案 0 :(得分:2)

Imagemagick使用Ghostscript将PDF文件渲染为图像。您还可以使用Ghostscript提取链接注释。事实上,PDF解释器已经为了pdfwrite设备的利益而这样做,因此它可以生成具有与原始设备相同的超链接的PDF文件。

您需要进行少量PostScript编程,如果您需要更多详细信息,请与我们联系。

在gs / Resource / Init中,文件pdf_main.ps包含PDF解释器的大部分内容。在那里你会发现:

  /Link {
    mark exch
    dup /BS knownoget { << exch { oforce } forall >> /BS exch 3 -1 roll } if
    dup /F knownoget { /F exch 3 -1 roll } if
    dup /C knownoget { /Color exch 3 -1 roll } if
    dup /Rect knownoget { /Rect exch 3 -1 roll } if
    dup /Border knownoget {
....
    } if
    { linkdest } stopped 

该代码处理链接注释(PDF文件中的超链接)。您可以用PostScript代码替换'linkdest'来将数据写入文件,这样就可以获得超链接。请注意,您还需要在命令行上设置-dDOPDFMARKS,因为这种处理通常会对渲染设备禁用,而渲染设备无法使用它。

答案 1 :(得分:0)

我的同事找到了一个很好的lib,PDFMiner,其中包含一个tools/dumppdf.py,其中包含了我需要的内容,请参阅http://www.unixuser.org/~euske/python/pdfminer/

还有另外一个SO问题可以回答这个问题,请参阅Looking for a linux PDF library to extract annotations and images from a PDF显然,Ruby的pdfreader也是这样做https://github.com/yob/pdf-reader