如何将 PDFBox 添加到 Android 项目或建议替代方案

Posted

技术标签:

【中文标题】如何将 PDFBox 添加到 Android 项目或建议替代方案【英文标题】:How to add PDFBox to an Android project or suggest alternative 【发布时间】:2012-02-17 08:03:35 【问题描述】:

我正在尝试打开现有的 pdf 文件,然后从 android 应用程序中将另一个页面添加到 pdf 文档中。在添加的页面上,我需要添加一些文本和图像。

我想试试 PDFBox。由于许可条款/价格,其他解决方案(例如 iTextPDF)不适合我们公司。

我有一个包含主要代码库的库项目,以及引用该库项目的完整和精简项目。

我已经从http://pdfbox.apache.org/download.html 下载了jar 并将其复制到库项目lib 文件夹中,并将pdfbox-app-1.6.0.jar 文件添加到java 构建路径库中。

我能够成功导入库,例如import org.apache.pdfbox.pdmodel.PDDocument; 并编译所有项目。但是,当我运行该应用程序时,它会在 PDDocument document = new PDDocument(); 上崩溃并出现以下错误。

E/AndroidRuntime(24451): java.lang.NoClassDefFoundError: org.apache.pdfbox.pdmodel.PDDocument

我在某处读到 PDFBox 1.5 及以上版本不适用于 Android,因此我尝试下载 pdfbox-app-1.4.0.jar 文件,但遇到了同样的问题。我还在我的完整和精简项目中将库添加到构建路径中,但我遇到了同样的错误,或者 eclipse 一直因内存不足错误而崩溃。

谁能告诉我我做错了什么?我下载了错误的文件吗?我是否正确导入了它?

谢谢,

【问题讨论】:

【参考方案1】:

PDFBox 使用 java awt 和 swing,即使对于非 UI 任务,我也尝试删除引用但文件很多,而且我删除的东西太多

我刚刚测试了 PDFjet http://pdfjet.com/os/edition.html 它是 bsd 许可的(加上具有更多功能的商业版本),使用这个示例代码(从 Example_03.java 中提取)我能够将 jpeg 转换为 pdf

    FileOutputStream fos = null;
    try
    
        fos = new FileOutputStream("/sdcard/sample.pdf");
        PDF pdf = new PDF(fos);
        InputStream f = getApplicationContext().getAssets().open("img0.jpg"); 
        Image image = new Image(pdf, f, ImageType.JPEG);
        Page page = new Page(pdf, A4.PORTRAIT);
        image.setPosition(0, 0);
        image.drawOn(page);
        pdf.flush();
        fos.close();
     catch (Exception e)
    
        e.printStackTrace();
    

我在这里找到了链接http://java-source.net/open-source/pdf-libraries

【讨论】:

如果您知道任何实现反向的示例,例如使用 PDFJet 的 PDF->图像,请告诉我。我已经浏览了大多数示例。所有示例似乎都将 new FileOutputStream 的实例传递给 PDF() 构造函数方法,我认为这暗示了我们正在尝试创建新 PDF 的事实。相反,我寻求的是读取/解析现有 pdf 的能力。谢谢。 @sherpya 如何将PDFjet集成到android项目中? 我前段时间做了,不过我觉得你可以把.jar放到项目的lib子目录下【参考方案2】:

PDFBox的Android移植

这里有一个免费的 PDFBox Android 端口:

https://github.com/TomRoush/PdfBox-Android

【讨论】:

这个库非常受限【参考方案3】:

我认为库类文件不包含在 apk 文件中。库类需要转换成dex文件才会被检测到,请参考http://developer.android.com/guide/developing/building/index.html

【讨论】:

感谢您的回复。需要把jar文件转成dex文件吗? 是的,否则编译时需要将classes文件转换为dex文件。

以上是关于如何将 PDFBox 添加到 Android 项目或建议替代方案的主要内容,如果未能解决你的问题,请参考以下文章

PDFbox 1.7.0 - 如何在使用PDFBox添加新图像时保留现有图像?

C#如何将PDF内容显示在webform中

PDFBox:通过重复添加包含表单的单页模板来填写 PDF

如何将库项目添加到 android 项目?

如何将项目添加到 Android 中的微调器?

如何使用 PDFBox drawString 插入换行符