Какие элементы PDF могут вызвать сбои? - PullRequest
7 голосов
/ 01 мая 2010

Это очень общий вопрос, но он основан на конкретной проблеме. Я создал приложение для чтения PDF для iPad, и оно отлично работает, за исключением некоторых страниц PDF, которые всегда вызывают сбой приложения. Теперь мы выяснили, что те же самые страницы приводят к сбою Safari, так что я начал подозревать, что проблема где-то в коде рендеринга PDF в Apple.

Из того, что я смог увидеть, сбойные страницы приводят к тому, что библиотеки рендеринга начинают распределять память как сумасшедшие, пока приложение не будет убито. У меня нет ничего другого, чтобы помочь мне точно определить, что вызывает этот процесс.

Это не обязательно происходит с самыми большими документами или теми, у которых больше всего форм. На самом деле, мы не нашли ни одного параметра, который помог бы нам предсказать, какие страницы будут сбоить, а какие нет.

Теперь мы только что обнаружили, что запуск страниц через потребительскую программу, которая позволяет объединять документы, избавляет от проблемы, но я не смог определить, какой именно атрибут или элемент является ключевым. Изменение документов вручную также не подходит для нас в долгосрочной перспективе. Нам нужно запустить автоматизированный процесс на нашем сервере.

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

Ответы [ 4 ]

1 голос
/ 10 ноября 2010

Я тоже исследовал такую ​​проблему. Я сузил свою проблему до одностраничного PDF-файла со встроенным черно-белым изображением. Открытие PDF в Adobe Reader в автономном режиме или в браузере всегда приводит к Диалог «Недостаточно данных для изображения» вместе с поврежденным представлением после элемента.

При поиске в Интернете какого-то средства для решения этой очень распространенной ситуации в качестве основной причины был выявлен один намек - от http://forums.adobe.com/message/2151474#2151474

Также столкнулся с той же проблемой сегодня днем, и после долгих экспериментов обнаружил, что корень моей проблемы был в моей оптимизации PDF-файлов через Adobe Acrobat 6 с монохромными изображениями, сжатыми с использованием JBIG2. Я удалил сжатие только для монохромных изображений (цветные изображения и т. Д., Которые по-прежнему сжимаются с помощью JPEG), и теперь мои файлы открываются очень хорошо в ридере 9.1, 8 и т. Д.

Возможно, это проблема, с которой вы столкнулись?


После ... Я локализовал проблему с ошибками «недостаточно данных для изображения», чтобы цветные изображения были преобразованы в черно-белые с помощью Mac. Используя 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 );                      
                }
            }
1 голос
/ 25 июля 2010

Та же проблема возникла с двумя «особыми» PDF-файлами, которые невозможно воспроизвести в приложении для iPad или Safari для iPad. В моем случае проблема была связана с некоторыми полупрозрачными градиентными оттенками.

Кстати, преобразование PDF в postscript, а затем обратно в PDF, похоже, удаляет внутренние элементы, которые PDFKit не нравится. Исходный документ был размером 1,9 МБ с множеством векторных форм, после преобразования файл уменьшился до 600 КБ и безупречно отображался на iPad.

1 голос
/ 28 августа 2010

Я обнаружил, что теневые элементы Tensor обязательно приведут к зависанию вашего приложения Всегда! Это абсолютно воспроизводимо.

1 голос
/ 02 мая 2010

Проблема заключается не в самой функции PDF, а в ее поддержке. Вам нужно разобрать PDF-файл и посмотреть, что в нем содержится - вы можете сделать это в Acrobat 9.0 - есть статья, показывающая, как вы можете использовать его, чтобы увидеть в PDF-файле http://pdf.jpedal.org/java-pdf-blog/bid/10479/Viewing-PDF-objects

Нам было отправлено несколько PDF-файлов, которые приводили к сбою Mail в OS X, и проблема оказалась во встроенных, заданных шрифтах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...