Как хранить содержимое PDF в формате String Base64 - PullRequest
1 голос
/ 18 января 2020

Я хочу сохранить PDF в формате Base64 перед отправкой на FileOutputStream. Я попробовал код ниже. Я попытался использовать 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!" );
    }
}

1 Ответ

1 голос
/ 18 января 2020

Вы можете просто использовать метод wrap класса java.util.Base64.Encoder, чтобы получить OutputStream, который выполняет кодирование Base64 для всего записанного в него:

FileOutputStream fos = new FileOutputStream("pdf-base64.txt");
OutputStream base64os = Base64.getEncoder().wrap(fos);
HtmlConverter.convertToPdf(HTML, base64os);

Обратите внимание, что в документации сказано закрыть выходной поток Base64:

Рекомендуется незамедлительно закрыть возвращенный выходной поток после использования, во время которого он будет sh передавать все возможные оставшиеся байты в базовый выходной поток. Закрытие возвращенного выходного потока закроет основной выходной поток.

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();
...