我想在将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();