Java 使用pdfbox将pdf转换为字节[],反之亦然

Java 使用pdfbox将pdf转换为字节[],反之亦然,java,pdf,pdf-generation,pdfbox,Java,Pdf,Pdf Generation,Pdfbox,我已经阅读了文档和示例,但是我很难把它们全部放在一起。我只是尝试获取一个测试pdf文件,然后将其转换为字节数组,然后获取字节数组并将其转换回pdf文件,然后将pdf文件创建到磁盘上 这可能没有多大帮助,但到目前为止我得到的是: package javaapplication1; import java.io.ByteArrayOutputStream; import java.io.IOException; import org.apache.pdfbox.cos.COSStream; imp

我已经阅读了文档和示例,但是我很难把它们全部放在一起。我只是尝试获取一个测试pdf文件,然后将其转换为字节数组,然后获取字节数组并将其转换回pdf文件,然后将pdf文件创建到磁盘上

这可能没有多大帮助,但到目前为止我得到的是:

package javaapplication1;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.apache.pdfbox.cos.COSStream;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;

public class JavaApplication1 {

    private COSStream stream;

    public static void main(String[] args) {
        try {
            PDDocument in = PDDocument.load("C:\\Users\\Me\\Desktop\\JavaApplication1\\in\\Test.pdf");
            byte[] pdfbytes = toByteArray(in);
            PDDocument out;
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    private static byte[] toByteArray(PDDocument pdDoc) throws IOException, COSVisitorException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            pdDoc.save(out);
            pdDoc.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return out.toByteArray();
    }

    public void PDStream(PDDocument document) {
        stream = new COSStream(document.getDocument().getScratchFile());
    }
}
您可以使用,这在任何java项目中都是必不可少的

然后可以使用的
readFileToByteArray(文件文件)
writeByteArrayToFile(文件文件,字节[]数据)

(这是commons io,其中FileUtils是:)

举个例子,我刚刚在这里试过,效果很好

try {
    File file = new File("/example/path/contract.pdf");
    byte[] array = FileUtils.readFileToByteArray(file);
    FileUtils.writeByteArrayToFile(new File("/example/path/contract2.pdf"), array);

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

PDF是一个字节数组,只需读取二进制文件即可。但也许你的意思不同?出于某种原因,当我将PDF转换为字节数组,然后再转换回PDF时,当我试图打开新创建的PDF时,它会说它已损坏。所以我决定使用pdfbox来避免这种情况。有没有可能跳过pdfbox并这样做,然后重新获得一个工作pdf?您的最终目标是什么?我看不到将PDF转换为字节数组并返回的任何自给自足的用途。我正在测试是否可以将PDF存储在数据库中。我知道应该使用文件系统进行存储,但我还是希望将其存储在数据库中。我能做到这一点的唯一方法是,如果它是字节[]数组的形式,就把它作为文件流读取,就是这样。我真的看不出它不起作用的原因。当我使用它时,它会在将字节[]转换回文件时创建损坏的pdf。。。即使使用FileUtils,您也能成功地做到这一点吗?我经常在很多不同的文件中使用它,包括一些pdf文件,但从来没有遇到过任何问题):你有任何旧代码可以随时粘贴演示吗?用我刚才在这里运行的测试中的代码更新了代码并进行了工作(除了“/example/path”这是一个真正的路径)没有问题,伙计,我很高兴能帮上忙。