Как сгенерировать pdf в переменную вместо файла? - PullRequest
0 голосов
/ 19 июня 2020

Я создаю файл pdf и сохраняю его в каталоге. Теперь я хочу вернуть данные pdf, чтобы пользователь мог загрузить их в свой предпочтительный каталог (т. Е. Больше не создавать файл в каталоге). Как мне создать «pdfData» для передачи обратно, пожалуйста?

Я понимаю, что это потребует замены «new FileOutputStream (FILE)» на имя переменной, в которой будут храниться данные; однако я не могу это решить или найти пример в Интернете.

У меня:

String filePath = System.getProperty("user.home") + "\\Documents\\"+fileName; //Test use
Document document = new Document(PageSize.A4, 72f, 72f, 72f, 72f);
try {
    PdfWriter.getInstance(document, new FileOutputStream(FILE));
    document.open();
    addMetaData(document);
    addImages(document);
    addTitlePage(document, recipeDetails, recipeName, servings, servingSize);
    document.close();
} catch (Exception e) {
  e.printStackTrace();
}
//return pdfData;

1 Ответ

1 голос
/ 03 июля 2020

Чтобы показать, что предлагает mkl, объединенное с вашим кодом:

String filePath = System.getProperty("user.home") + "\\Documents\\"+fileName; //Test use
Document document = new Document(PageSize.A4, 72f, 72f, 72f, 72f);
try {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PdfWriter.getInstance(document, baos);
    document.open();
    addMetaData(document);
    addImages(document);
    addTitlePage(document, recipeDetails, recipeName, servings, servingSize);
    document.close();

    byte[] pdfData = baos.toByteArray();
    return pdfData;

} catch (Exception e) {
  e.printStackTrace();
}

pdfData - это byte [] (байтовый массив). Его можно напрямую передать / сохранить в любом месте как фактический PDF. Просто имейте в виду, что при этом PDF-файл записывается в память, поэтому при одновременном выполнении большого количества больших PDF-файлов возникают проблемы с масштабируемостью.

Надеюсь, это поможет.

...