Сохраните pdf в bytearray, используя itext в Java - PullRequest
2 голосов
/ 17 апреля 2020

Я использую itext для чтения большого файла PDF и сохранения выбранных страниц.

PdfReader reader = null;
reader = new PdfReader("customPath/largePdf.pdf");
int pages = reader.getNumberOfPages();
List<Integer> pagesList = new ArrayList<Integer>();
pagesList.add(1);
pagesList.add(2);
reader.selectPages(pagesList);
String path;
PdfStamper stamper = null;
path = String.format("customerPath/split.pdf");
stamper = new PdfStamper(reader, new FileOutputStream(path));

Все хорошо до сих пор, я могу открыть файл split.pdf.

Теперь, вместо сохранения в файл, я хочу сохранить его в bytearray (чтобы я мог сохраните его как большой двоичный объект позже)

Попробовал это:

PdfReader reader = null;
reader = new PdfReader("customPath/largePdf.pdf");
int pages = reader.getNumberOfPages();
List<Integer> pagesList = new ArrayList<Integer>();
pagesList.add(1);
pagesList.add(2);
reader.selectPages(pagesList);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfStamper stamper2 = new PdfStamper(reader, baos);
byte[] byteARy = baos.toByteArray();

Просто чтобы убедиться, что это работает, я попытался записать этот байт-массив в файл:

OutputStream out = new FileOutputStream("customPath/fromByteArray.pdf");
out.write(byteARy);
out.close();

fromByteArray.pdf не открывается и размер равен нулю, есть идеи, что может быть не так?

1 Ответ

2 голосов
/ 17 апреля 2020

Вы извлекаете байтовый массив (используя baos.toByteArray()) сразу после создания PdfStamper.

PdfStamper stamper2 = new PdfStamper(reader, baos);
byte[] byteARy = baos.toByteArray();

. В это время в выводе нет ничего (почти). Вместо этого вы должны подождать, пока после закрытия вашего PdfStamper не будет получен вывод.

PdfStamper stamper2 = new PdfStamper(reader, baos);
...
stamper2.close();
byte[] byteARy = baos.toByteArray();

Теперь байтовый массив должен содержать полный PDF-файл со штампом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...