【问题标题】:How to Store PDF Content In String Base64 format如何以字符串 Base64 格式存储 PDF 内容
【发布时间】:2020-05-05 07:01:30
【问题描述】:

我想在发送到FileOutputStream 之前以 Base64 格式存储 PDF。我尝试了下面的代码。我尝试使用带有匿名内部类的OutputStreamwrite 方法,但内容为空。

package com.hmkcode;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.html2pdf.HtmlConverter;

public class App 
{
    public static final String HTML = "<h1>Hello</h1>"
        + "<p>This was created using iText</p>"
        + "<a href='hmkcode.com'>hmkcode.com</a>";

    public static void main( String[] args ) throws FileNotFoundException, IOException {
        HtmlConverter.convertToPdf(HTML, new FileOutputStream("string-to-pdf.pdf"));
        System.out.println( "PDF Created!" );
    }
}

【问题讨论】:

    标签: java pdf itext outputstream fileoutputstream


    【解决方案1】:

    您可以简单地使用java.util.Base64.Encoder 类的wrap 方法来获取一个OutputStream,该OutputStream 对写入它的任何内容执行Base64 编码:

    FileOutputStream fos = new FileOutputStream("pdf-base64.txt");
    OutputStream base64os = Base64.getEncoder().wrap(fos);
    HtmlConverter.convertToPdf(HTML, base64os);
    

    请注意,文档中说要关闭 Base64 输出流:

    建议使用后及时关闭返回的输出流,在此期间它会将所有可能的剩余字节刷新到底层输出流。关闭返回的输出流将关闭底层输出流。

    convertToPdf 会自动关闭输出流,但如果您以不同的方式创建 PDF,请务必调用 base64os.close()


    如果出于某种原因您想先创建 PDF,然后再进行 Base64 编码,您可以使用许多 Base64 编码实现中的一种。例如,使用java.util.Base64.Encoder:

    // Create PDF
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    HtmlConverter.convertToPdf(HTML, baos);
    
    // Generate Base64 encoded version of PDF
    byte[] base64encoded = Base64.getEncoder().encode(baos.toByteArray());
    
    // Write Base64 data to file
    FileOutputStream fos = new FileOutputStream("pdf-base64.txt");
    fos.write(base64encoded);
    fos.close();
    

    【讨论】:

    • 感谢您的快速回复先生。我也尝试过同样的方法,但如果我正在解码编码数据,那么我会得到一个空页面。实际上我正在创建一个休息客户端,如果我将数据存储在文件,那么文件是正确的,但如果我作为响应发送,那么只有白页
    • 如果数据在存储在本地文件中时解码正确,但在发送后没有正确解码,则问题可能出在发送(或接收)中。将接收到的数据存储在一个文件中,并与本地文件进行比较。由于您只有一个白页,我的猜测是数据被截断,即您没有发送所有数据。数据仍将类似于 PDF 文件,足以让 PDF 查看器打开它,但它无法正确显示所有页面内容。
    • 感谢 rhens 的指导,按照您给定的代码,我得到了正确的结果。谢谢
    • 如果答案有帮助,请考虑投票和/或接受它:stackoverflow.com/help/someone-answers
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 2021-03-13
    • 2017-05-09
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多