Сначала определите, что именно надо сохранить
Для печати, 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 объекты
- Найдите нужный файл по имени из manifest, а не по предполагаемому номеру страницы.
- Сверьте его ширину, высоту, фильтр и статус сохранения.
- Если указан softMask, проверьте отдельную маску; не считайте основной объект готовым прозрачным изображением.
- Сравните результат с отображением 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.