如何从pdf中提取文本图层和背景图层?

时间:2011-09-08 18:30:51

标签: php linux html5 pdf ghostscript

在我的项目中,我要在HTML5 / CSS3中执行PDF查看器,并且应用程序必须允许用户添加注释和注释。实际上,我要做一些与crocodoc.com非常相似的事情。

一开始我正在考虑从PDF创建图像,并允许用户创建区域并将评论关联到此区域。不幸的是,客户还希望在此PDF中导航并仅对允许的部分添加注释(例如,段落或选定的文本)。

现在我面临的一个问题是获取文本和最佳方法。如果有任何身体有一些线索我怎么能达到它,我将不胜感激。

我尝试pdftohtml,但输出看起来不像真正复杂的原始文档(example of document)。即使这个也没有真正反映出输出,但比pdftohtml要好得多。

我对任何解决方案持开放态度,优先选择linux下的命令行。

5 个答案:

答案 0 :(得分:2)

我和你一样走在同一条道路上,甚至还有更复杂的任务。

在尝试了所有内容之后,我最终在Mono下使用C#(因此它在linux上运行),使用iTextSharp。

即使有一个非常完整的库,如iTextSharp,一些任务也需要分配试错:)

要从页面中提取文本很简单(请查看下面的剪辑器),但是如果您打算保留文本坐标,字体和大小,则还需要做更多的工作。

int pdf_page = 5;
string page_text = "";

PdfReader reader = new PdfReader("path/to/pdf/file.pdf");
PRTokeniser token = new PRTokeniser(reader.GetPageContent(pdf_page));
while(token.NextToken())
{
    if(token.TokenType == PRTokeniser.TokType.STRING)
    {
        page_text += token.StringValue;
    }
    else if(token.StringValue == "Tj")
    {
        page_text += " ";
    }
}

对所有令牌执行Console.WriteLine(token.StringValue),以查看PDF格式中文本段落的结构。这样您就可以检测坐标,字体,字体大小等。

<强>增加:

鉴于您需要完成的任务,我有一个建议:

使用坐标和字体系列和大小提取文本 - 有关每个段落的所有信息。然后,对于PDF到图像,在您的在线查看器中,在图像上的段落上应用隐形可选文本。

通过这种方式,您的用户可以根据需要选择文本的一部分,而无需在html中重建整个PDF:)

答案 1 :(得分:1)

答案 2 :(得分:0)

这是你要完成的艰巨任务。

要阅读PDF中的文字,请查看PEAR's PDF_Reader投标代码。

答案 3 :(得分:0)

还有一个围绕Zend_PDF()的非常广泛的文档,它还允许加载和解析PDF文档。 PDF的各种元素可以迭代,因此也可以转换为HTML5或任何你喜欢的。您甚至可以将网站上的符号嵌入到PDF中,反之亦然。

尽管如此,你还没有完成任务。祝你好运。

答案 4 :(得分:0)

pdftk是一个非常好的工具(我不知道它是否可以完成这项任务)。

http://www.pdflabs.com/docs/pdftk-cli-examples/