【问题标题】:PDF file content to Base 64 and vice versa in JavaPDF 文件内容到 Base 64,反之亦然 Java
【发布时间】:2018-08-16 15:01:19
【问题描述】:

我需要将 PDF 内容转换为 Base64 并将其用作字符串。 当我使用下面的程序测试 out.pdf 变为空白。

    byte[] pdfRawData =  FileUtils.readFileToByteArray(new File("C:\\in.pdf")) ;
    String pdfStr = new String(pdfRawData);

//My data is available in the form of String

    BASE64Encoder encoder = new BASE64Encoder();
    String encodedPdf = encoder.encode(pdfStr.getBytes());
    System.out.println(encodedPdf);


// Decode the encoded content to test


    BASE64Decoder decoder = new BASE64Decoder();        
    FileUtils.writeByteArrayToFile(new File("C:\\out.pdf") , decoder.decodeBuffer(encodedPdf));

谁能帮帮我?

【问题讨论】:

    标签: java pdf base64


    【解决方案1】:

    你为什么这样做:

    String pdfStr = new String(pdfRawData);
    

    而不是将 pdfRawData 传递给编码器?

    这样做会导致很多编码问题,因为您没有指定用于构建字符串的字节数组的编码(它将使用平台默认值)。这显然是多余的(字节数组->字符串->字节数组)

    【讨论】:

    • pdf 内容将以字符串的形式提供,而不是文件,因为 pdf 将在运行时生成。我需要将此字符串 pdf 转换为 Base64 字符串。这只是一个用来模拟的测试程序。
    • 您不能生成文档并将其存储在字节数组而不是字符串中吗?你是生成文件的人吗?将原始二进制数据存储在字符串中是一种代码异味——并非所有字节序列在给定的字符串编码中都有效(base64 编码旨在解决此问题)。无论如何,请尝试在构造函数和 getBytes() 方法中指定编码(例如“UTF-8”)。
    • 我将通过 Web 服务以字符串的形式接收这些 PDF,这就是我以字节为单位读取文件并转换回字符串以对其进行编码的原因。我尝试添加 String encodedPdf = encoder.encode(pdfStr.getBytes("UTF-8"));但得到的文件比平时长,内容为空。奇怪的是,我能够毫无问题地渲染 PDF。
    • “我将通过网络服务以字符串的形式接收这些 PDF” - 以字符串形式处理的 PDF 通常会自动损坏,无法修复,除非 PDF 是专门创建的与文本处理兼容(在这种情况下,文件通常也已损坏但并非无法修复)。请检查您的网络服务 API 并检查是否有办法以二进制形式检索 PDF(如 byte[]ByteBufferInputStream、...)。
    • 有道理....我现在收到通过 web 服务编码为字符串的 PDF base 64。我能够通过解码并将其写入文件来重现此 pdf。 String pdfb64encodedData = "sdjhjsbdvbjsbsbdvbjsdbvbsvbsvb ...."; FileUtils.writeByteArrayToFile(new File("C:\\out.pdf"), decoder.decodeBuffer(pdfb64encodedData));.......感谢您的回复
    猜你喜欢
    • 2014-09-20
    • 2010-11-10
    • 2012-10-13
    • 2012-04-02
    • 2015-06-22
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    相关资源
    最近更新 更多