【问题标题】:I need to convert PDDocument to File Object我需要将 PDDocument 转换为文件对象
【发布时间】:2021-05-12 03:03:15
【问题描述】:

我正在尝试通过org.apache.pdfbox.multipdf.Splitter拆分一个pdf文档,并且需要在这个单页PDDocument上执行某些文件操作,

如何在 java 中将PDDocument 转换为文件对象?

【问题讨论】:

标签: java casting pdfbox


【解决方案1】:

非常简单。我正在使用 1.8.16

    try {
        PDDocument document = PDDocument.load(new File(filename));


        // do what ever you want
        document.save(newfilename);



    } catch (IOException | BadSecurityHandlerException | CryptographyException e) {         
        e.printStackTrace();
    }
    finally {
        if(document != null )
            try {
                document.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //return tmpFile != null ? tmpFile.getAbsolutePath() : null;
        return tmpFilename;
    }

【讨论】:

  • OP 间接表明他使用的是 2.x 版本(Splitter 类已移至 org.apache.pdfbox.multipdf 包而不是早于 2.0)。因此,1.8.16 版本的参考对他并没有真正的帮助。
【解决方案2】:

与 Apache 公共资源

   InputStream is = null
    try {
     PDDocument document = PDDocument.load(filePath);
     File targetFile = new File("nameoffile.pdf");
     PDStream ps = new PDStream(document);
     is = ps.createInputStream();
     FileUtils.copyInputStreamToFile(is, targetFile);
    } catch (IOException io) {} finally {
     if (is != null)
      IOUtils.closeQuietly(is);
    }

【讨论】:

  • 您的代码部分不正确(PDStream 中没有 inputStream 方法,load() 方法在 2.0.2 中不接受字符串),它会创建一个空文件.然后你打电话给inputStream() 两次,一次没有结束。
  • @TilmanHausherr thx 指出,似乎 PDDocument 具有文件路径 pdfbox.apache.org/docs/1.8.10/javadocs/org/apache/pdfbox/… 的负载重载方法。
  • OP 间接表明他使用的是 2.x 版本(Splitter 类已移至 org.apache.pdfbox.multipdf 包而不是早于 2.0)。因此,1.8.10 版本的参考对他并没有真正的帮助。
  • 无论版本如何,纠正错误后,结果文件将始终为空。 new PDStream(document) 表示创建一个空流,参数中包含文档的暂存文件设置。这个答案应该被删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
相关资源
最近更新 更多