Java 解析PDF文件时出现问题

Java 解析PDF文件时出现问题,java,parsing,pdf,Java,Parsing,Pdf,我使用HTMLPasser1.6解析网站 问题是,当我解析pdf网站时,我在输出文件中获得奇怪的字符,如 ØÇÁÖÜ/:?ÖQØ?WÕWÏ 这是我的代码片段: try { parser = new Parser (); if (1 < args.length) filter = new TagNameFilter (args[1]); else { filter = null; parser.setF

我使用HTMLPasser1.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 ();
}
试试看{
parser=newparser();
如果(1<参数长度)
过滤器=新的标记名过滤器(args[1]);
其他的
{ 
filter=null;
parser.setFeedback(parser.STDOUT);
Parser.getConnectionManager().setMonitor(解析器);
}
Parser.getConnectionManager().setRedirectionProcessingEnabled(true);
Parser.getConnectionManager().setCookieProcessingEnabled(true);
//这里是pdf网站
parser.setResource(“http://hal.archives-ouvertes.fr" + 
“/docs/00/16/76/78/PDF/27_Bendaoud.PDF”);
NodeList list=parser.parse(过滤器);
节点运算符i=list.elements();
而(i.hasMoreNodes())
processMyNodes(i.nextNode());
}
捕获(编码更改异常ece){
试一试{
parser.reset();
NodeList list=parser.parse(过滤器);
对于(NodeIterator i=list.elements();i.hasMoreNodes();)
processMyNodes(i.nextNode());
}
捕获(解析){
e、 printStackTrace();
}
}
捕获(解析){
e、 printStackTrace();
}
更新:

我使用iText解析PDF文件。它在本地文件上运行良好,但我想解析托管在web服务器中的PDF文件,例如:

"

如何使用iText或其他库执行此任务?

线索在名称中-parses 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-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>...

SimonJ的主页
...
PDF不是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-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>...
%PDF-1.5^M%10对象^Mendobj^M2 0对象^Mendobj^M3 0对象流
H或者尽管需要提醒:PDF文件格式不是为方便提取文本而设计的-许多博士生在尝试时都筋疲力尽了…

线索在名称中-解析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-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>...

SimonJ的主页
...
PDF不是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-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>...
%PDF-1.5^M%10对象^Mendobj^M2 0对象^Mendobj^M3 0对象流

H或者尽管需要提醒:PDF文件格式不是为方便提取文本而设计的-许多博士生在尝试时已经筋疲力尽了…

HTMLPasser或任何其他HTML或XML解析器在解析PDF文件方面都没有希望。HTML是一种与PDF格式完全不同的格式

您需要做的是让web爬网软件注意远程web服务器在您获取文档时返回的内容类型标题。这会告诉您刚获取的资源的标称格式。如果内容类型是PDF,或链接提取器无法处理的其他格式,则您可以使用我们不会试图解析它

目前,您的代码执行以下操作:

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

这需要替换为使用已打开的InputStream等设置资源的内容。

HtmlParser或任何其他HTML或XML解析器都不希望解析PDF。HTML与PDF格式完全不同

您需要做的是让web爬网软件注意远程web服务器在您获取文档时返回的内容类型标题。这会告诉您刚获取的资源的标称格式。如果内容类型是PDF,或链接提取器无法处理的其他格式,则您可以使用我们不会试图解析它

目前,您的代码执行以下操作:

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

这需要替换为使用已打开的InputStream等设置资源的内容。

如果1/您格式化代码摘要,2/您提供更多详细信息(代码语言,链接到HTMLPasser,…),您很可能会得到答案嗯,pdf不是html,因此我不希望HTMLPasser以任何形式或形式解析它们。如果1/您格式化代码摘要,2/您提供更多细节(代码语言,链接到HTMLPasser,…),您很可能会得到答案嗯,pdf不是html,因此我不希望HTMLPasser以任何形式解析它们。