我想在将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!" );
}
}
最佳答案
您可以简单地使用wrap
类的java.util.Base64.Encoder
方法来获取一个OutputStream
,该convertToPdf
对任何写入的内容执行Base64编码:
FileOutputStream fos = new FileOutputStream("pdf-base64.txt");
OutputStream base64os = Base64.getEncoder().wrap(fos);
HtmlConverter.convertToPdf(HTML, base64os);
请注意,文档说要关闭Base64输出流:
建议在使用后立即关闭返回的输出流,在此期间它将所有可能的剩余字节刷新到基础输出流。关闭返回的输出流将关闭基础输出流。
base64os.close()
自动关闭输出流,但是如果您以其他方式创建PDF,请确保调用java.util.Base64.Encoder
。如果出于某种原因要首先创建PDF,然后再进行Base64编码,则可以使用许多Base64编码实现之一。例如,使用:
// 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();