【问题标题】:Problem when parsing PDF files解析PDF文件时的问题
【发布时间】:2010-10-23 21:00:40
【问题描述】:

我使用 htmlparser 1.6 来解析网站。

问题是当我解析 pdf 网站时,我在输出文件中获得了奇怪的字符,比如

ØÇÁÖÜ/:?ÖQØ?WÕWÏ

这是我的代码片段:

try {
    parser = new Parser (); 

    if (1 < args.length)
        filter = new TagNameFilter (args[1]); 
    else
    { 
        filter = null;
        parser.setFeedback (Parser.STDOUT);
        Parser.getConnectionManager ().setMonitor (parser);
    }

    Parser.getConnectionManager ().setRedirectionProcessingEnabled (true);
    Parser.getConnectionManager ().setCookieProcessingEnabled (true);

    // Here the pdf web site
    parser.setResource ("http://hal.archives-ouvertes.fr" + 
        "/docs/00/16/76/78/PDF /27_Bendaoud.pdf");

    NodeList list = parser.parse(filter);
    NodeIterator i = list.elements ();

    while (i.hasMoreNodes ())
        processMyNodes(i.nextNode ());
}
catch (EncodingChangeException ece) {
    try {
        parser.reset ();
        NodeList list = parser.parse(filter);

        for (NodeIterator i = list.elements (); i.hasMoreNodes (); )
            processMyNodes (i.nextNode ());

    }
    catch (ParserException e) {
        e.printStackTrace ();
    }
}
catch (ParserException e) {
    e.printStackTrace ();
}

更新:

我使用 iText 来解析 PDF 文件。它适用于本地文件,但我想解析托管在 Web 服务器中的 PDF 文件,例如这个:

http://protege.stanford.edu/publications/ontology_development/ontology101.pdf"

如何使用 iText 或其他库来完成这项任务?

【问题讨论】:

  • 如果 1/ 格式化代码提取,并且 2/ 提供更多详细信息(代码语言、指向 htmlparser 的链接...),您很可能会得到答案
  • 嗯,pdf 不是 html,因此我不希望 htmlparser 以任何方式解析它们。

标签: java parsing pdf


【解决方案1】:

线索就在名称中——HTMLParser 解析 HTML。 HTML 看起来像这样:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head><title>SimonJ's homepage</title></head>
  <body>...</body>
</html>

PDF 不是 HTML - 在其原始形式中,它们看起来像这样:

%PDF-1.5^M%<E2><E3><CF><D3>1 0 obj<</Contents 3 0 R/Type/Page/Parent 121 0
R/Rotate 0/MediaBox[0 0 419.528015 595.276001]/CropBox[0 0 419.528015
595.276001]/Resources 2 0 R>>^Mendobj^M2 0 obj<</ColorSpace<</Cs6 132 0 R>>
/Font<</F3 102 0 R/F4 105 0 R>>/ProcSet[/PDF/Text]/ExtGState<</GS1 134 0
R>>>>^Mendobj^M3 0 obj<</Length 917/Filter/FlateDecode>>stream
H<89><A4><95><DB>r<A3>F^P<86><9F><80>w<E8>K<94>Z<8D><E7><C0><CC>0<97>^X!^E^WF
<8A><C0><9B><B8>\{At2ESC   ^\!<EF><96><DF>>= K"<B1>R<9B>Jq<C1><A9>^O_<FF>...

这是相当不同的,因此 HTMLParser 无法应对。如果您想解析 PDF,您可能需要调查 iTextPDFBox 之类的内容,但请注意:PDF 文件格式不是为轻松提取文本而设计的 - 许多博士生在尝试时已经筋疲力尽。 ..

【讨论】:

    【解决方案2】:

    HtmlParser 或任何其他 HTML 或 XML 解析器在解析 PDF 时没有希望。 HTML 是一种与 PDF 格式完全不同的格式。

    您需要做的是让您的网络爬虫软件注意在您获取文档时远程网络服务器返回的内容类型标头。这会告诉您刚刚获取的资源的标称格式。如果内容类型是 PDF,或者您的链接提取器无法处理的其他格式,则不应尝试对其进行解析。

    目前您的代码执行此操作:

    parser.setResource ("http://hal.archives-ouvertes.fr" + 
        "/docs/00/16/76/78/PDF /27_Bendaoud.pdf");
    

    这需要替换为使用已经打开的 InputStream 等设置资源的东西。

    【讨论】:

      猜你喜欢
      • 2018-07-19
      • 1970-01-01
      • 2017-04-21
      • 2023-03-25
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多