2016-04-13 24 views
11

Podążyłem za następującym przykładem, aby wyświetlić pdf in my App (Xamarin.iOS). Wszystko działało dobrze, aż do niedawna zauważyłem, że niektóre pliki PDF nie mogą być odczytane przy użyciu tej metody.CGPDFDocument nie może odczytać pdf

otworzyć i dostaje informacje na mój mac i zauważyłem następujące:

  • gdybym eksportowania dokumentu do formatu PDF za pomocą przeglądarki Mac można odczytać tylko w porządku, ale rozmiar jest wzrost.
  • Jeśli spróbuję otworzyć plik w obecnym stanie, nic nie będzie widoczne, ale biała strona.
  • Dzieje się tak tylko w mojej aplikacji na iOS, przeglądarka na moim Androidzie działa dobrze.

Mogę eksportować każdy plik do formatu pdf przy użyciu przeglądarki Mac, ale jest to dodatkowy krok niż to, czego potrzebuję. Co mogę zrobić, aby to naprawić?

Oryginalne kodowanie: PDFScanLib v1.2.2 w Adobe Acrobat 01.10.16

kodowania Export: Mac OS X 10.10.5 Quartz PDFContext


pobiegłem dodatkowe testy do programu i mogę stwierdzić, Problem dotyczy kompresji wykorzystywanej w plikach pdf. Czy istnieje sposób, w jaki program CGPDFDocument może usunąć kompresję lub ją zignorować, aby wyświetlić plik pdf? Przesyłam plik pdf do mojego mobilnego backendu, w którym dzielę strony. Używam Pdfsharp do wykonania tego, jeśli to możliwe, istnieje sposób na wyczyszczenie plików przed zapisaniem na serwerze? (Ten problem dotyczy tylko wersji mojej aplikacji na iOS).


Po dodatkowym testów doszedłem po drugiej następującym błędem: Here Pojawi się ona kompresji JBIG2 używany jest znany błąd, który powoduje błędy podczas czytania jpg na pdf. (Będę kontynuować dalszych badań, aż znajdę rozwiązanie.)


Korekty: Kompresja PDF nie jest JBIG2, ale FlateDecode. Po przetestowaniu i odczytaniu danych binarnych zauważyłem, że zarówno oryginał, jak i eksport mają ten sam typ kompresji. (Aktualizacja zostanie zaktualizowana o więcej informacji, gdy spróbuję to rozgryźć.)

+0

To brzmi jak bug iOS (lub ograniczenie) i niezwiązane z Xamarinem. Edytowałem znaczniki, aby więcej osób mogło je zobaczyć (i powinieneś uzyskać lepszą zmianę, aby uzyskać odpowiedzi). – poupou

+0

Zakładam, że było to ograniczenie przeniesienia kodu na Xamarin, ale możesz mieć rację. Używam 5 różnych sposobów czytania pdf (pdfsharp to split, chrome to view, safari aby zobaczyć i do cholery nawet normalna poczta w iPhone'ie działa dla oryginału). Nie wiem, z czym związany jest prawdziwy błąd. – ScarletMerlin

Odpowiedz

8

Biblioteka renderująca Apple CoreGraphics ma wiele ograniczeń - jest mało prawdopodobne, że można się na to przygotować w rozsądnym przedziale czasowym, ponieważ Apple przyznało bardzo mało zasobów w rozwijaniu ich silnika PDF.

Wiemy o tym, ponieważ pracujemy w tej przestrzeni od 2011 roku i oferujemy komercyjną bibliotekę do przeglądania i edycji plików PDF o nazwie PSPDFKit. Zastąpiliśmy renderera Apple w wersji 5 naszego pakietu SDK iOS, a teraz wysyłamy niestandardowy mechanizm renderowania - taki sam, którego używamy również do napędzania naszego zestawu SDK Androida.

Na rynku jest niewielu konkurentów, którzy korzystają również z niestandardowego mechanizmu renderowania - można szukać muPDF jako potencjalnej alternatywy, która może również rozwiązać problem (również komercyjny). Większość innych produktów to tylko podkładki pod CGPDF, które nie rozwiązałyby Twojego problemu. Zapraszam do oceny niektórych produktów i daj mi znać, jeśli masz więcej pytań. (Dotrzyj do mnie na adres: pspdfkit.com)

Oferujemy również complete wrappers for Xamarin dla obu platform, aby ułatwić integrację.

+0

Chciałbym, jeśli to możliwe, uniknąć licencji komercyjnych. Czy kiedykolwiek zrozumieliście dokładną naturę tego błędu? W gorszym razie mogę stworzyć zupełnie nowe pliki PDF; Wygląda na to, że musiałbym przeprowadzić obszerny test, aby znaleźć idealne formatowanie, aby było w 100% zgodne z Core Graphics iOS. – ScarletMerlin

Powiązane problemy