Методы визуализации PDF-файла в растровом файле NSImage с очень высоким разрешением - PullRequest
2 голосов
/ 22 сентября 2010

Мне нужно вывести PDF-файл в изображение с очень высоким разрешением (скажем, до 100 000 * 80 000 пикселей и более).

Мне удалось сделать это, не выходя за пределы оперативной памяти, разделив рендер на несколько частей, а затем рендерив каждый из них, используя NSOperationQueue, в основном рисуя представление PDF-файла NSImage в новом NSImage, используя drawInRect: fromRect: operation: fra: и затем сохраняя TIFFПредставление в файл.

Все хорошо, многоядерно и быстро, и я почти счастлив. В любом случае, мне нужно снова соединить эти фрагменты после их рендеринга, чтобы получить один файл TIFF.

Я бы попытался объединить файлы, используя NSInputStream и NSOutputStream, но, поскольку каждый файл представляет собой полное представление TIFF, объединение необработанных байтов приведет к нечитаемому файлу изображения. Есть ли способ объединить файлы изображений без полной загрузки их в оперативную память, т.е. без использования методов NSImage?

В противном случае я мог бы сохранить необработанные пиксельные байты вместо представлений tiff, а затем соединить их с NSInputStream / NSOutputStream, но тогда как я мог бы преобразовать весь файл байтов в распознаваемый TIFF, не загружая при этом огромную вещь в оперативную память?

1 Ответ

0 голосов
/ 24 ноября 2010

Этот метод, вероятно, не сработает для ваших экстремальных требований (подробности см. В конце сообщения), но мы надеемся, что он поможет другим людям получить изображение PDF с гораздо более высоким разрешением, чем с помощью скриншота или снимка.инструмент акробата.Это не особенно элегантно, но оно выполняет свою работу.

Инструкции на основе Acrobat 9 Reader (более ранние и более поздние версии также должны работать, если они имеют инструмент «Снимок» / «Выбор выделения») в Windows XP.Я полагаю, что это применимо к большинству других платформ, работающих под управлением Adobe Reader.(Теперь, когда я думаю об этом, вполне может быть альтернативное программное обеспечение для отображения PDF, которое на самом деле может просто сделать это без каких-либо уловок. Может быть, что-то на основе ghostscript?) В любом случае, я знаю, что это работает:

  1. Увеличивайте PDF, пока изображение на вашем мониторе не будет иметь разрешение в пикселях, которое вы ищете.Если вы пытаетесь захватить изображение с большим количеством пикселей, чем у вас на мониторе (что является единственной причиной для использования этой техники), вы будете видеть только часть изображения на вашем экране.
  2. Прокрутите, как нужно, чтобы найти угол PDF-файла, который вы хотите захватить.
  3. Выберите инструмент «Снимок» / «Выделение».
  4. Щелкните по углу, удерживайте мышьнажмите кнопку вниз (перетащите-выберите) и переместите мышь в противоположный угол окна.
  5. Экран начнет автоматическую прокрутку в направлении противоположного угла вашего изображения.Это может занять некоторое время, но это произойдет.
  6. Когда вы доберетесь до противоположного края, уберите палец с мыши, и у вас должно появиться изображение высокого разрешения в буфере обмена.

Теперь, в зависимости от «размера» исходного изображения (Acrobat будет увеличивать только до 6400% от исходного размера на основе информации DPI в PDF), этот метод может теоретически позволяют получить до 100K х 80K пикселей.Для большинства сегодняшних компьютеров все разваливается на том, что вам нужно достаточно оперативной памяти для хранения 22 ГБ данных изображения в буфере копирования ...

...