哪些pdf元素可能导致崩溃?

时间:2010-05-01 15:40:37

标签: iphone objective-c pdf ipad safari

这是一个非常普遍的问题,但它是基于一个特定的问题。我已经为iPad创建了一个pdf阅读器应用程序,除了某些总是使应用程序崩溃的pdf页面外,它的工作正常。我们现在发现,同样的页面也会导致Safari崩溃,因此我开始怀疑问题出在Apple的pdf渲染代码中。

从我能够看到的,崩溃的页面导致渲染库开始像疯了一样分配内存,直到应用程序被杀死。我没有其他任何东西可以帮我确定是什么触发了这个过程。

最大的文档或形状最多的文档不一定会发生。事实上,我们还没有发现任何参数可以帮助我们预测哪些页面会崩溃,哪些页面不会崩溃。

现在我们发现通过允许您合并文档的消费者程序运行页面可以解决问题,但我无法检测到哪个属性或元素是关键。从长远来看,手动更换文件也不是我们的选择。我们需要在我们的服务器上运行自动化流程。

我希望有更深入了解pdf文件格式的人能够指出我合理的方向来寻找可能导致这种行为的文档功能。到目前为止我发现的只是关于JBIG2图像的东西,我认为我们没有这些。

4 个答案:

答案 0 :(得分:1)

这不是PDF功能本身,而是对它的支持。您需要将PDF分开并查看其中包含的内容 - 您可以在Acrobat 9.0中执行此操作 - 有一篇文章显示如何使用它在http://pdf.jpedal.org/java-pdf-blog/bid/10479/Viewing-PDF-objects

中查看PDF内部

我们收到了一些PDF文件,这些文件在OS X上崩溃了邮件,问题结果是嵌入的子集化字体。

答案 1 :(得分:1)

答案 2 :(得分:1)

我发现Tensor着色元素肯定会让你崩溃。总是!它完全可以重现。

答案 3 :(得分:1)

我一直在研究这样的问题。 我已将我的问题缩小到单页PDF文件,其中嵌入了黑白图像。 无论是单独使用还是在浏览器中打开adobe阅读器中的pdf,总会产生一个 “图像数据不足”对话框以及元素后面的损坏视图。

虽然研究互联网对这种非常普遍的情况采取某种补救措施,但却产生了一个暗示 - 根本原因 - 来自http://forums.adobe.com/message/2151474#2151474

今天下午也遇到了同样的问题,经过多次实验后发现问题的根源是我通过Adobe Acrobat 6优化PDF文件,单色图像是用JBIG2压缩的。我只删除了monchrome图像上的压缩(彩色图像等仍然通过JPEG压缩),现在我的文件在阅读器9.1,8等中打开很好。

也许这就是你所面临的问题?


跟进.... 我将问题本地化为“图像数据不足”错误,以使用mac转换为b& W的彩色图像。 使用itext& java,我想出了这个解决方案 - 检测问题图像颜色空间并重写它。它创造了奇迹。不应该用其他语言来复制。

               image = Image.getInstance( imageUrl );
            if( image.getColorspace() == 1 && image.isJpeg() ) {
                baseLog.warn( "bad image detected at " + imageUrl );
                BufferedImage bufImage = ImageIO.read(new URL( imageUrl ));
                int imageType = bufImage.getType();
                if ( imageType == 10 ) {
                           // convert the image to get rid of bad stuff inside
                    ColorSpace cs = ColorSpace.getInstance( ColorSpace.CS_GRAY );
                    ColorConvertOp op = new ColorConvertOp(cs, null );
                    image = Image.getInstance( op.filter(bufImage, null ), null );                      
                }
            }