如何以字符串 Base64 格式存储 PDF 内容



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

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.util.Base64.Encoder类的wrap方法来获取一个对写入它的任何内容执行 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();

最新更新