Как зарегистрировать приложение, чтобы открыть файл PDF в моем приложении в IPad - PullRequest
17 голосов
/ 04 июня 2010

Я хочу открыть файл PDF в моем приложении со страницы PDF, но я не могу открыть PDF-файл в своем приложении.

это мой файл info.plist

 <key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
    <key>CFBundleTypeName</key>
    <string>PDF</string>
    <key>CFBundleTypeRole</key>
            <string>Viewer</string>     
    <key>CFBundleTypeIconFiles</key>
    <string>Icon.png</string>
    <key>LSItemContentTypes</key>
    <string>com.neosofttech.pdf</string>
    <key>LSHandlerRank</key>
    <string>Owner</string>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
   <array>
   <dict>
    <key>UTTypeConformsTo</key>
        <array>

<string>public.pdf</string>       
         </array>
    <key>UTTypeDescription</key>
    <string>PDFReader File</string>
    <key>UTTypeIdentifier</key>
    <string>com.neosofttech.pdf</string>
    <key>UTTypeTagSpecification</key>
    <dict>
        <key>public.filename-extension</key>
        <string>pdf</string>

    </dict>
</dict>

Пожалуйста, скажите мне, где я неправ в этом, как я могу открыть файл PDF в моем приложении

Ответы [ 4 ]

49 голосов
/ 15 июня 2010

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

Например:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>PDF</string>
        <key>LSHandlerRank</key>
        <string>Alternate</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.adobe.pdf</string>
        </array>
    </dict>
</array>

Список всех предоставленных системой типов контента можно найти здесь или в UTCoreTypes.h.

Когда кто-то открывает файл PDF и выбирает ваше приложение, этот файл будет скопирован в подкаталог Inbox вашей папки Documents в изолированной программной среде приложения.После этого ваше приложение будет открыто, и в application:didFinishLaunchingWithOptions: делегате вашего приложения в вашем словаре launchOptions будет содержаться ключ UIApplicationLaunchOptionsURLKey, указывающий URL-адрес файла в вашей изолированной программной среде, с которым вы затем сможете работать.

2 голосов
/ 08 февраля 2017

Введите код ниже в info.plist

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>"*"</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>Unknown</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.data</string>
        </array>
    </dict>
</array>
2 голосов
/ 05 июня 2010

Вы не можете делать то, что пытаетесь сделать, если не выполните следующее:

  • Зарегистрировать пользовательский URL в системе
  • Вызовите этот пользовательский URL из гиперссылки внутри PDF
  • Создание PDF с интерактивными ссылками

Итак, это означает, что вы регистрируете собственный обработчик URL в своем info.plist. Например, допустим, вы создаете собственный обработчик URL-адреса в форме coolapp: //. Теперь, внутри вашего документа, из которого вы генерируете PDF, при создании гиперссылки он должен использовать ваш пользовательский URL, например, coolapp: // filedetails? Pdfurl = mywebsite.com / path / to / pdffile.pdf & pageno = 5. Затем вам нужно проанализировать это в -application: handleOpenURL: . Загрузите файл, указанный в поле pdfurl , а затем перейдите на страницу, указанную в pageno .

Имейте в виду, что это предполагает, что вы сами создаете PDF-файл. Если вы не контролируете процесс создания содержимого PDF, вы не можете делать то, что вы хотите сделать. Невозможно открыть ваше приложение из произвольного PDF-файла. Это должно быть сделано с использованием пользовательского URL.

Дайте мне знать, если вам нужны разъяснения.

0 голосов
/ 07 мая 2019

Старая запись - но я попал сюда и искал способ передать PDF в свое приложение.

Плист, изображенный Эшли Кларк, помогает мне зарегистрировать мое приложение как приложение, которое может принимать файл PDF в качестве параметра. +1 за него на этом: -)

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>PDF</string>
        <key>LSHandlerRank</key>
        <string>Alternate</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.adobe.pdf</string>
        </array>
    </dict>
</array>

Однако, чтобы полностью реализовать это, я использовал следующий метод в моем файле AppDelegate.m:

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {

    NSLog(@"sourceApplication: %@", sourceApplication);
    NSLog(@"url: %@", url);

Вышеприведенное запускается, когда приложение открывается, когда я запускал Safari и у меня был PDF, которым я хотел поделиться оттуда.

Выше я могу определить, какое приложение передало моему приложению PDF-файл и URL-адрес его местоположения.

При запуске выдает следующее:

sourceApplication: com.apple.mobilesafari

url: file:///Users/me/Library/Developer/CoreSimulator/Devices/C395439F-7A0D-434F-8D78-D4615DB643E1/data/Containers/Data/Application/E3B181BC-6075-4F2C-923D-2ECC642DA555/Documents/Inbox/pdf-5.pdf

Затем я могу использовать URL-адрес, чтобы открыть PDF-файл и делать с ним все, что захочу, в своем приложении.

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