Сначала определите, что именно надо сохранить

Для печати, OCR всей страницы или согласования оформления обычно нужна отрисовка страницы. Для повторного использования фотографии — встроенный объект. Нумерация image-12 относится к объекту PDF, а не к странице 12.

Сначала определите, что именно надо сохранить
ЗадачаОперацияОжидаемый результат
Сохранить страницу с текстом и подписямиPDF в изображенияPNG/JPEG отображаемой страницы
Получить фотографию без повторного сжатияИзвлечение встроенных изображенийИсходный JPEG/JPX либо поддержанное изображение PNG
Оставить видимую часть картинки с обрезкой и фономОтрисовать страницу, затем выбрать фрагментКопия отображения; не исходный поток объекта

Что проверять в manifest.json

Откройте manifest.json из ZIP. Для каждого объекта указаны имя файла, ширина, высота, фильтр, цветовое пространство, глубина и softMask. Повторно используемый объект извлекается один раз; число объектов не равно числу картинок, видимых на страницах.

JPEG и JPEG2000 сохраняются без перекодирования. RGB/Gray с глубиной 8 бит и размером до 16 млн пикселей можно получить как PNG. Другие потоки могут сохраниться с расширением .stream: это исходные байты, а не обещание готовой картинки для любого просмотрщика.

Официальные требования: Adobe SDK: изображения PDF и отдельные soft-mask объекты

  1. Найдите нужный файл по имени из manifest, а не по предполагаемому номеру страницы.
  2. Сверьте его ширину, высоту, фильтр и статус сохранения.
  3. Если указан softMask, проверьте отдельную маску; не считайте основной объект готовым прозрачным изображением.
  4. Сравните результат с отображением PDF и выберите отрисовку страницы, если нужны обрезка, подписи и фон.

Пример: одно фото используется два раза

Пусть одна фотография 2400×1600 пикселей показана на двух страницах, причём один раз обрезана. ZIP может содержать одно исходное изображение и отдельную маску. Он не обязан содержать две готовые копии с разной обрезкой.

Объект, размещение и прозрачность
Исходные данные
Страницы 1 и 3 используют image-12; manifest сообщает width=2400, height=1600 и softMask="13 0 R".
Результат
Проверяем image-12 и отдельный объект маски. Для готового вида страницы 3 выбираем отрисовку страницы, поскольку расположение и обрезка не входят в извлечённое фото.

SMask/softMask указывает отдельную маску. Инструмент её не сводит с фотографией и не строит карту размещения по страницам.

Как разобраться с неожиданным результатом

Открывайте готовую картинку и страницу PDF отдельно. Не рассчитывайте эффективный DPI по одному только размеру объекта: нужен также физический размер его размещения на странице.

Как разобраться с неожиданным результатом
НаблюдениеОбъяснениеСледующий шаг
Исчезли подпись, рамка или обрезкаОни относятся к композиции страницыИспользовать PDF в изображения
Есть .stream, который не открывается как PNGЭтот фильтр или цветовое пространство не выдано как готовый PNGПрочитать статус manifest; для просмотра отрисовать страницу
Прозрачность выглядит неправильноМаска хранится отдельно или нужна интерпретация изображенияСверить softMask и использовать отрисовку для готового вида
Картинок меньше, чем их размещенийОбъект может использоваться повторноСчитать объекты и размещения раздельно
  • Расположение объектов по страницам не определяется.
  • Встроенный цветовой профиль декодированного PNG не интерпретируется как точная цветопроба.
  • Исходный PDF храните отдельно: ZIP не воспроизводит весь документ.

Вопросы и ответы

Почему картинка в ZIP больше видимой области в PDF?

На странице объект мог быть обрезан или уменьшен. Извлечение сохраняет объект; для точного видимого фрагмента отрисуйте страницу.

Почему image-12 не соответствует странице 12?

Число в имени — номер объекта PDF. Карта его размещений по страницам этой операцией не строится.

Почему рядом лежит серая картинка?

Это может быть отдельная маска прозрачности. Проверьте поле softMask в manifest; маска автоматически не сведена с основной картинкой.

Когда следует выбрать PDF в изображения?

Когда нужен готовый вид страницы с текстом, обрезкой, фоном и всеми наложениями, а не отдельные исходные объекты.

Можно ли узнать печатный DPI по одной ширине картинки?

Нужен также физический размер её размещения на странице. Размер объекта в пикселях этого не определяет, а карта размещения в данной операции не строится.

Можно ли переименовать .stream в PNG, чтобы он открылся?

Нет. Исходный поток может требовать другого декодирования и цветового пространства. Для готового изображения прочитайте статус manifest или отрисуйте страницу PDF.