我想在将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!" );
    }
}

最佳答案

您可以简单地使用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();

07-24 09:37
查看更多