如何以String Base64格式存储PDF内容

问题描述 投票:0回答:1

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

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个回答
0
投票

[您可以简单地使用wrap类的java.util.Base64.Encoder方法来获得对所有写入的内容执行Base64编码的OutputStream

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();
© www.soinside.com 2019 - 2024. All rights reserved.