Изначально я использовал подход на основе изображений, копируя содержимое исходной страницы в виде изображения и размещение его на вновь созданной странице. Это привело к значительному увеличению размера файла — с 3 МБ до 30 МБ для одного PDF-файла.
Чтобы уменьшить влияние размера, я переключился на контент-ориентированный подход, напрямую манипулируя контентом. вместо преобразования его в изображение. Несмотря на то, что этот подход уменьшил увеличение размера файла, размер все равно утроился — например, файл размером 3 МБ увеличивается до 9 МБ.
Я ищу эффективное решение для добавления текста, сохраняя при этом размер файла. увеличение размера файла незначительно или, по крайней мере, намного меньше текущих результатов.
Будем очень признательны за любую информацию об эффективных методах, оптимизации или альтернативных подходах для достижения этой цели с помощью Apache PDFBox.
p>
Что я Пробовал:
Изначально я использовал подход на основе изображений: скопировал содержимое исходной страницы в виде изображения и поместил его на новую страницу с измененным макетом.
Результат : Размер PDF-файла резко увеличился (например, с 3 МБ до 30 МБ).
Я переключился на контент-ориентированный подход, при котором я напрямую манипулировал контентом, перемещая его вверх, и добавлял новый текст.
Результат: Хотя это уменьшило размер В результате размер файла по-прежнему утроился (например, с 3 МБ до 9 МБ).
Чтобы скопировать содержимое:
Код: Выделить всё
// Access the source page's content stream
COSStream sourceStream = (COSStream) sourcePage.getCOSObject().getDictionaryObject(COSName.CONTENTS);
COSStream newStream = document.getDocument().createCOSStream();
try (InputStream inputStream = sourceStream.createInputStream();
OutputStream outputStream = newStream.createOutputStream()) {
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
}
destinationPage.getCOSObject().setItem(COSName.CONTENTS, newStream);
destinationPage.setResources(sourcePage.getResources());
Код: Выделить всё
try (PDPageContentStream contentStream = new PDPageContentStream(document, page,
PDPageContentStream.AppendMode.PREPEND, true, true)) {
contentStream.transform(Matrix.getTranslateInstance(0, shiftAmount));
}
Я ожидал, что добавление текста в PDF-файл не приведет к такому значительному увеличению размера файла, в идеале с минимальным или незначительным увеличением размера.
Что на самом деле произошло:
Оба подхода привели к заметному увеличению размера файлов, особенно файлов на основе изображений. Подход, основанный на контенте, показал лучшие результаты, но все еще далек от желаемого результата.
Подробнее здесь: https://stackoverflow.com/questions/792 ... g-filesize
Мобильная версия