【问题标题】:PDFBox is half availablePDFBox 有一半可用
【发布时间】:2014-09-21 22:25:08
【问题描述】:

我从 Apache 下载了 PDFBox 1.8.6

然后我将它复制到我在 Java/Eclipse 项目的根目录中创建的“res”文件夹中。 然后我右键单击该项目,转到属性,然后进入 Java 构建路径,然后在库中,然后单击添加 JARS... 并添加它及其文档。

从那时起,在我的代码中,我可以导入(ish)PDFBox。

例如,我可以看到:

import org.apache.pdfbox.pdmodel.*;

但是,如果你想做一些有用的事情,你需要导入更多,通常采用以下形式:

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.font.PDFont;

出于某种奇怪的原因,我看不到这些...

谁能帮我解释一下?

【问题讨论】:

  • 当前版本为1.8.7。
  • 我遇到同样的错误..无法解决。

标签: java pdfbox eclipse-classpath


【解决方案1】:

官方来源链接的当前文件不正确。它的重量为 28K 而不是几兆字节。哇,这一次不是我!哈哈哈

【讨论】:

【解决方案2】:

相关的软件包都在您的第二个屏幕截图中。您必须先从显示的列表中选择包;然后按 Ctrl-Space 可以选择每个包中的类。从您的第二张屏幕截图来看,一切似乎都运行良好。

【讨论】:

  • 嗨大卫,看起来可能是骗人的......否则,我将能够访问 org.apache.pdfbox.pdmodel.PDDocument。但如屏幕截图所示,“p”没有任何显示,因此这篇文章。 pdfbox.apache.org/docs/1.8.3/javadocs/org/apache/pdfbox/pdmodel/…你试过了吗?
  • @SuperWoman 即使我找不到类文件PDFieldTreeNode,所以我使用了2.0.0-SNAPSHOT
【解决方案3】:

问题是您已将 javadoc jar 和实际 jar 作为构建库导入。

我现在就尝试这样做,我遇到的问题和你一模一样。

从构建路径中删除 javadoc。如果要将javadoc连接到pdfbox jar,应单击真实jar左侧的三角形,选择Javadoc位置,单击“编辑...”,然后选择“Javadoc in存档”并选择您的存档。

顺便说一句,我可能错了,但pdfbox-app-1.8.6.jar 似乎是针对命令行应用程序的。用于构建自己的项目的可能是更轻的pdfbox-1.8.6.jar

【讨论】:

  • 我建议获取该应用程序,因为它具有大多数其他所需的库。仅pdfbox*jar是不够的,还需要fontbox和jempbox。
  • @TilmanHausherr 但它包含大量其他内容,例如 bouncycastle 库,可能不是最新的,并且可能与其他项目冲突。
  • 确实如此。你当然也可以使用 maven。但是单独使用 pdfbox*.jar 不会让你开心。
  • 问题的真正原因是“SuperWoman”导入了一个 HTML 文件,这在她自己的回答中进行了解释。此后下载页面已更改以避免这种情况。
  • @TilmanHausherr 我认为答案不是问题本身,而是她使用 1.8.6 罐子而不是最近的罐子这一事实。如果她将一个 HTML 文件作为 jar 添加到她的构建路径中,我怀疑她是否会得到那个屏幕截图。我在发帖前已经验证了自己的答案。
【解决方案4】:

我现在使用的是最新的 1.8.7,但是在将其添加到库并将 jar 文件设置为“添加构建路径”并按顺序检查并导出之后......它给出了相同的错误

 "10-28 13:45:14.510: E/AndroidRuntime(1630): java.lang.NoClassDefFoundError: org.apache.pdfbox.pdmodel.PDDocument"..

实际上我为此浪费了 5 个小时......但后来我发现 iText 用于相同的 PDF 目的..运行良好......

iText 教程链接

http://zacktutorials.blogspot.com/2014/07/android-read-and-write-pdf-file-using.html

【讨论】:

  • PDFBox 无论如何都不适用于 android。有一个人的派生项目,但那个项目主要是用来创建 PDF,你不能用那个来渲染 PDF。
【解决方案5】:

对于您的问题,我必须说您需要更改您的 pdfbox jar 文件并下载许多支持的 jar,或者您可以尝试下面的代码。

这里的代码使用 pdfbox 和 apache tika 来解析一个 pdf 文件并将输出保存到一个位置。

您将需要以下这些罐子。

bcprov-1.45.jar fontbox-1.5.0.jar org.apache.tika.jar org.apache.tika.parsers.jar pdfbox-1.3.1.jar

package readpdf;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.sax.BodyContentHandler;
import org.xml.sax.ContentHandler;

public class readpdf {
  public static void main(String args[]) throws Exception {


        File file = new File("OutputFile");

        // if file doesnt exists, then create it
        if (!file.exists()) {
            file.createNewFile();
        }

        FileWriter fw = new FileWriter(file.getAbsoluteFile());
        BufferedWriter bw = new BufferedWriter(fw);

    InputStream is = null;
    OutputStream o=null;
    try {
      is = new FileInputStream(InputFile);
      ContentHandler contenthandler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      AutoDetectParser parser = new AutoDetectParser();
      parser.parse(is, contenthandler, metadata);
      System.out.println(contenthandler.toString());
      bw.write(contenthandler.toString());
        bw.close();
      //String[] a = metadata.names();

   /*  for(int i = 0;i< a.length-1;i++)
      {
          System.out.println(a[i]);
      }*/

      //System.out.println("title = "+metadata.get("title"));
     // System.out.println("Author = "+metadata.get("Author"));
    //  System.out.println("Content-Type = "+metadata.get("Content-Type"));
     // System.out.println("Producer = "+metadata.get("producer"));
     // System.out.println("Created = "+metadata.get("created"));
     // System.out.println("Last-Modified = "+metadata.get("Last-Modified"));
      System.out.println("*******************Content of PDF ********************");
      System.out.println(contenthandler.toString());

    }
    catch (Exception e) {
      e.printStackTrace();
    }
    finally {
        if (is != null) is.close();
    }
  }
}

【讨论】:

    【解决方案6】:

    我不确定您在尝试什么,但我尝试复制您的步骤

    1. https://pdfbox.apache.org/download.cgi下载了pdfbox-app-1.8.7.jar
    2. 已将 jar 导入到我的项目构建路径中。 PS:您不需要将 javadoc 添加到构建路径中。那是一个单独的过程。
    3. 尝试导入“org.apache.pdfbox.pdmodel.PDDocument;” (输入到 org.apache.pdfbox.pdmodel。然后按 Ctrl+Space 以获得类提示)。它正确显示。
    4. 其他包也一样。例如。对于“org.apache.pdfbox.pdmodel.font.PDFont”,您需要输入“org.apache.pdfbox.pdmodel.font”。然后按 Ctrl+Space 获得类提示。
    5. 我认为您执行了“import org.apache.pdfbox.pdmodel.*;”所以,它显示了所有的包。对于链接 3、4、5,从建议列表中选择相应的包,然后按 Ctrl+Space 以获取该包中的类建议。还要从构建路径中删除 javadoc 并检查。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      相关资源
      最近更新 更多