我必须将PDF渲染成一个非常高分辨率的图像(比如甚至超过100,000 * 80,000像素)。
我设法通过将渲染分割成几个切片然后使用NSOperationQueue渲染每个切片而不离开ram,基本上使用drawInRect将NSImage pdf表示绘制到新的NSImage中:fromRect:operation:fraction:然后保存TIFFRepresentation到文件中。
一切都很好,多核和快速,我几乎快乐。 无论如何,我需要在渲染它们之后再次将这些切片连接起来,以获得单个TIFF文件。
我会尝试使用NSInputStream和NSOutputStream合并文件,但由于每个文件都是完整的tiff表示,因此将原始字节合并在一起会导致无法读取的图片文件。 有没有办法将图像文件合并到一起而不将它们完全加载到ram,即不使用NSImage方法?
否则我可以保存原始像素字节而不是tiff表示然后将它们与NSInputStream / NSOutputStream连接,但是我怎样才能将整个字节文件转换为可识别的TIFF,而不再将巨大的东西加载到ram中?
答案 0 :(得分:-1)
这项技术可能无法满足您的极端需求(有关详情,请参阅消息的结尾),但它有望帮助其他人从PDF获取比屏幕截图或快照更高的res图像acrobat工具。它不是特别优雅,但它完成了工作。
基于Acrobat 9 Reader的说明(早期版本和更高版本也应该可以在Windows XP上使用Snapshot /“Marquee Select”工具)。我想它适用于运行Adobe Reader的大多数其他平台。 (现在我想到它可能会有替代的PDF显示软件,实际上可以毫不费力地执行此操作。也许基于ghostscript的东西?)无论如何,我知道这有效:
现在,根据初始图像的“大小”(Acrobat只会根据PDF中的DPI信息缩放到原始大小的6400%),这种技术理论上允许你得到100k x 80k像素。对于今天大多数PC而言,它需要足够的RAM才能在你的复制缓冲区中保存22GB的图像数据......