Почему размер файла JPEG в формате PDF больше, чем исходный PDF?

Чтобы занимать меньше места, я беру все страницы в одном PDF-файле и складываю их вертикально в одно изображение JPG с помощью PDFBox.

  BufferedImage combinedImage = new BufferedImage(maxWidth, maxHeight, TYPE_INT_RGB);
  int currentYPlacement = 0;

  for (int i = 0; i < document.getPages().getCount(); i++) {
    BufferedImage currentImage = pdfRenderer.renderImageWithDPI(i, 72, ImageType.RGB);

    Graphics graphics = combinedImage.getGraphics();
    graphics.drawImage(currentImage, 0, currentYPlacement, null);
    currentYPlacement += currentImage.getHeight();
  }
  File outputfile = new File( "test.jpg");
  ImageIO.write(combinedImage, "jpg", outputfile);

Однако я обнаружил, что размер файла JPG не всегда меньше размера PDF. Я по-прежнему хочу, чтобы изображения оставались читаемыми и имели исходные размеры PDF.

Я знаю, что нужно учитывать одну вещь: PDF очень маленький (< 50 КБ), а JPG такого размера может быть больше, но я не уверен, что еще нужно учитывать.

Вот мои выводы, обратите внимание на разницу между двумя одностраничными PDF-файлами. Почему второй одностраничный результат почти в 2 раза больше исходного PDF-файла? Какие факторы влияют на размер JPG?

# страниц Размер PDF Размер JPG Результат Образец PDF 1 178 КБ 88 КБ 50,5618% снижение https://www.tn.gov/content/dam/tn/revenue/documents/forms/titlereg/f1310601Fill-in.pdf 1 95 КБ 135 КБ 42,1053% увеличение https://dmv.nv.gov/pdfforms/nvl010.pdf 2 144 КБ 169 КБ 17,3611% увеличение https://www.tn.gov/content/dam/tn/commerce/documents/regboards/mvc/forms/CONSIGNMENT_AGREEMENT.pdf 2 372 КБ 184 КБ 50,5376% снижение https://www.honolulu.gov/rep/site/csd/onlineforms/csddlapplicationform.pdf

Обновлять

Я создаю PDF-файл 8,5 x 11 в Microsoft Word со словами «Hello, World!» и выполнил преобразование. PDF-файл был размером 23 КБ, а файл JPG — 14 КБ после преобразования. Очень запутанно...

PDF-файлы часто содержат много нерастрового контента, например: текст и векторную графику. Эти вещи могут стать очень тяжелыми, когда вы их растрируете, и вам придется хранить всю эту информацию в данных пикселей.

Sean 14.08.2023 18:30

pdf не использует пиксели изображения как таковые, поэтому нет никакой связи, кроме того, что если вы возьмете JPG и добавите описание PDF вокруг него, он будет примерно на 1 КБ больше или на 4 КБ больше с метаданными.

K J 14.08.2023 18:30

Откройте блокнот и введите 1 экран текста. Сделайте снимок экрана, сохраните в формате JPEG. Обратите внимание, что растровое изображение занимает гораздо больше места, чем текст.

Dave S 14.08.2023 19:04

скажем, страница PDF имеет ширину 500 и высоту 800, что соответствует примерной цифре для принтеров, поскольку вы установили 72 dpi в качестве меры, поэтому пиксели JPG составляют 500 x 800 x 24 бита (назовем это x3 байтами), поэтому в пикселях страница теперь будет 1 200 000 МБ с сжатие и качество потерь, которые можно уменьшить, скажем, на 1/20, таким образом, цель составляет 60 КБ, поэтому в лучшем случае, уменьшив качество, вы можете снизиться до этого уровня, однако «Hello World!» поскольку .txt составляет всего 12 байт, добавьте немного или два для шрифта и размера страницы, и без встраивания шрифтов в формате PDF он будет больше, скажем, 1 КБ, но как изображение будет намного более 60 КБ.

K J 14.08.2023 19:04

@Tommy, который все равно будет слишком большим, так как больше одного байта, поскольку в качестве кода он составляет 3 байта, а в формате PDF требуется не менее 500. Таким образом, в 500 раз больше, чем пиксель отслеживания веб-ошибки составляет 0,8 КБ.

K J 15.08.2023 03:23

PDF-файл был размером 23 КБ, а файл JPG — 14 КБ после преобразования. это просто необходимость включить выбранный вами шрифт здесь в 3 строки - пустая %PDF-1.0 строка 2 длиннее 1 0 obj<</Pages 2 0 R>>endobj 2 0 obj<</Kids[3 0 R]/Count 1>>endobj 3 0 obj<</MediaBox[0 0 3 3]>>endobj поместите это в строку 3 trailer<</Root 1 0 R>> Acrobat Reader будет настаивать на повторном сохранении путем редактирования, и новый файл будет больше (3666 байт). Больше запутался? (чем больше файл PDF, тем лучше)

K J 15.08.2023 03:54
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
Включение UTF-8 в jsPDF с помощью Angular
Включение UTF-8 в jsPDF с помощью Angular
Привет, разработчики, я предполагаю, что вы уже знаете, как экспортировать pdf через jsPDF. Если ответ отрицательный, то вы можете ознакомиться с моей...
0
6
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет никакой связи между размером файла PDF (в килобайтах) и размером конвертированного изображения страницы (в килобайтах).

При преобразовании страницы PDF в изображение размер выходного изображения в пикселях вычисляется следующим образом:

sizeOfImageInPixels = sizeOfPDFPageInPoints * dpi / 72;

Если у вас есть PDF-файл со страницей, состоящей из одной буквы (612 * 792 точки), при преобразовании этой страницы в изображение с разрешением 72 dpi выходное изображение будет иметь размер 612 * 792 пикселей. Если изображение только RGB (24 бита на пиксель), то его размер будет

612 * 792 * 3 = 1454112 bytes.

Таким образом, независимо от размера файла PDF (это может быть небольшая пустая страница PDF в килобайтах или полная страница PDF в мегабайтах с полноцветными изображениями, текстом, векторной графикой и т. д.), когда он преобразуется в изображение с разрешением 72 dpi, размер выходного несжатого изображения всегда будет 1454112 байт.

Теперь, когда вы сжимаете эти 1454 112 байт, размер сжатого вывода будет варьироваться, так как полностью белая страница (всего 255 байт) сжимается намного лучше, чем цветная страница. Поскольку JPEG является сжатием с потерями, одно и то же несжатое изображение может быть сжато JPEG до разных размеров в зависимости от того, насколько агрессивно сжатие.

Другие вопросы по теме