Как добавить текст в PDF без значительного увеличения размера файла?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как добавить текст в PDF без значительного увеличения размера файла?

Сообщение Anonymous »

Я пытаюсь использовать Apache PDFBox для добавления текста на существующие страницы PDF, сохраняя при этом минимальное увеличение размера файла. Моя цель — увеличить высоту страницы, переместить текущий контент вверх и добавить новый текст внизу страницы.
Изначально я использовал подход на основе изображений, копируя содержимое исходной страницы в виде изображения и размещение его на вновь созданной странице. Это привело к значительному увеличению размера файла — с 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»