CGPDFDocument не может прочитать pdf

Я следовал следующему примеру, чтобы просмотреть pdf в своем приложении (Xamarin.iOS). Все работало нормально, пока недавно я не начал замечать, что некоторые файлы PDF не могут быть прочитаны с помощью этого метода.

Я открываю и получаю информацию о своем Mac, и я заметил следующее:

  • если я экспортирую документ в pdf с помощью программы просмотра Mac, его можно будет прочитать очень хорошо, но размер увеличится.
  • Если я попытаюсь открыть файл как есть, ничего не будет видно, кроме белой страницы.
  • Это происходит только для моего приложения для iOS, программа просмотра на моем Android работает нормально.

Я могу экспортировать каждый файл в pdf с помощью программы просмотра Mac, но это дополнительный шаг по сравнению с тем, что мне нужно. Что я могу сделать, чтобы исправить это?

Исходная кодировка: PDFScanLib v1.2.2 в Adobe Acrobat 10.1.16

Кодировка экспорта: Mac OS X 10.10.5 Quartz PDFContext


Я провел дополнительные тесты программы и могу сделать вывод, что проблема связана со сжатием файлов PDF. Есть ли способ, которым CGPDFDocument может удалить или игнорировать сжатие, чтобы я мог просматривать PDF-файл? Я загружаю PDF-файл на свой мобильный сервер, где разделяю страницы. Я использую Pdfsharp для этого, если возможно, есть ли способ очистить файлы перед сохранением на сервере? (Эта проблема затрагивает только версию моего приложения для iOS).


После дополнительного тестирования я обнаружил следующую ошибку: Здесь Похоже, что используемое сжатие JBIG2 имеет известный ошибка, вызывающая ошибки при чтении jpg в pdf. (Я буду продолжать тестирование, пока не найду решение.)


Исправления: Сжатие pdf не JBIG2, а FlateDecode. После тестирования и чтения двоичных данных я заметил, что и оригинал, и экспорт имеют одинаковый тип сжатия. (Будет обновляться с дополнительной информацией, когда я попытаюсь понять это.)


person ScarletMerlin    schedule 13.04.2016    source источник
comment
Это похоже на ошибку iOS (или ограничение) и не связано с Xamarin. Я отредактировал теги, чтобы их увидело больше людей (и вы должны получить лучшее изменение, чтобы получить ответы).   -  person poupou    schedule 14.04.2016
comment
Я предположил, что это ограничение переноса кода на Xamarin, но, возможно, вы правы. Я использую 5 различных способов чтения pdf (pdfsharp для разделения, хром для просмотра, сафари для просмотра и, черт возьми, даже обычная почта в iPhone работает для оригинала). Я не знаю, с чем связана настоящая ошибка.   -  person ScarletMerlin    schedule 14.04.2016


Ответы (1)


Библиотека рендеринга CoreGraphics от Apple имеет много ограничений — маловероятно, что вы сможете ожидать ее исправления в разумные сроки, поскольку Apple выделила очень мало ресурсов на продвижение своего механизма PDF.

Мы знаем это, потому что работаем в этой сфере с 2011 года и предлагаем коммерческую библиотеку для просмотра и редактирования PDF под названием PSPDFKit. Мы заменили модуль рендеринга Apple в версии 5 нашего SDK для iOS и теперь поставляем собственный движок рендеринга — такой же, который мы также используем для управления нашим SDK для Android.

На рынке не так много конкурентов, которые также используют собственный движок рендеринга — вы можете поискать muPDF как потенциальную альтернативу, которая также может решить вашу проблему (также коммерческую). Большинство других продуктов — это просто прокладки поверх CGPDF, которые не решат вашу проблему. Не стесняйтесь оценить некоторые продукты и дайте мне знать, если у вас возникнут дополнительные вопросы. (Свяжитесь со мной в Питере на pspdfkit.com)

Мы также предлагаем полные оболочки для Xamarin для обеих платформ, чтобы упростить интеграцию.

person steipete    schedule 16.04.2016
comment
Я хотел бы избежать коммерческих лицензий, если это возможно. Ребята, вы когда-нибудь выясняли точную природу этой ошибки? В худшем случае, я думаю, я мог бы создать совершенно новые файлы PDF; Кажется, мне придется провести обширный тест, чтобы найти идеальное форматирование, чтобы сделать его на 100% совместимым с iOS Core Graphics. - person ScarletMerlin; 16.04.2016