Ouverture et affichage fichier PDF

RocouRocou Membre
septembre 2018 modifié dans API AppKit #1

Bonjour,

Je me remets péniblement au développement (swift).
J'aimerais afficher un fichier PDF dans une fenêtre.

J'ai inclus un objet PDFView dans ma fenêtre qui devra afficher le fichier PDF.
Pour le moment, je me fiche de la taille et du positionnement de la vue sur fichier pdf dans mon PDFView

Je pensais que le code suivant suffirait mais mon fichier pdf ne s'affiche pas.

  @IBOutlet weak var VuePDF: PDFView!


 [...]    

        let document = PDFDocument()

        guard let path = URL(string: "file:///Users/rocou/Desktop/toto%20.pdf") else { print("problème URL")
            return }

        if let document = PDFDocument(url: path) {
            VuePDF.document = document
        }

Réponses

  • Hello,
    Remplace le %20 par " "

  • LarmeLarme Membre
    septembre 2018 modifié #3

    Rien dit.
    Par contre, tu as a triple "/" après file: ?

  • RocouRocou Membre
    septembre 2018 modifié #4

    @devulder J'ai essayé, cela ne change rien. J'ai fini par modifier le nom pour toto.pdf sans l'espace, cela ne change rien nom plus.

    @Larme oui, triple "/". Deux pour le format (file://) et un pour le chemin.

    Je précise que le fichier en question s'affiche parfaitement avec Aperçu ou un navigateur (ce qui me permet en outre de vérifier la syntaxe du chemin)

  • Joanna CarterJoanna Carter Membre, Modérateur

    N'utilises pas les URLs construit comme ça !

      {
        guard let directoryURL = FileManager.default.urls(for: .desktopDirectory, in: .userDomainMask).first else
        {
          return
        }
    
        let fileURL = directoryURL.appendingPathComponent("ThingsAppleScript Guide.pdf")
    
        if let pdfDocument = PDFDocument(url: fileURL)
        {
          …
        }
      }
    
  • @Joanna Carter Ha, c'est donc un problème de format d'URL.
    Merci pour ton code, je vais me pencher dessus.

  • Bon, j'ai essayé ton code, @Joanna Carter mais c'est pareil.

    C'est
    let document = PDFDocument(url: path)

    Qui ne fonctionne pas. Il y a "nil" dans document alors que l'url est correcte. Je vais relire la doc sur PDFDocument...

  • Joanna CarterJoanna Carter Membre, Modérateur

    C'est quoi path ?

  • Joanna CarterJoanna Carter Membre, Modérateur
    septembre 2018 modifié #9

    Et, est-ce que tu as désactivé le Sandbox ? Si non, tu n'as pas le droit de toucher les fichiers que dans Téléchargements, Musique, Images et Vidéos ; ou dans un endroit choisi par l'utilisateur lui-même.

  • RocouRocou Membre
    septembre 2018 modifié #10

    @Joanna Carter a dit :
    C'est quoi path ?

    c'est l'url du fichier

    Oui mon code n'est plus le même qu'au début, j'ai testé tellement de choses...

    let document = PDFDocument(url: path)

    L'url (path) est correcte mais il n'y a rien dans "document". PDFDocument(url: path) renvoie null.

  • @Joanna Carter a dit :
    Et, est-ce que tu as désactivé le Sandbox ? Si non, tu n'as pas le droit de toucher les fichiers que dans Téléchargements, Musique, Images et Vidéos ; ou dans un endroit choisi par l'utilisateur lui-même.

    Comment fait-on pour "désactiver la sandbox"?

  • Joanna CarterJoanna Carter Membre, Modérateur

    @Rocou a dit :
    c'est l'url du fichier

    Oui mon code n'est plus le même qu'au début, j'ai testé tellement de choses...

    let document = PDFDocument(url: path)

    L'url (path) est correcte mais il n'y a rien dans "document". PDFDocument(url: path) renvoie null.

    Je voulais dire, comment tu as construit path, parce que le mot path ne veut dire pas la même chose que URL.

    @Rocou a dit :
    Comment fait-on pour "désactiver la sandbox"?

  • @Joanna Carter Ça fonctionne! Le problème était bien la "sandbox" qu'il fallait désactiver/
    Merci Joanna.

  • @Joanna Carter a dit :
    N'utilises pas les URLs construit comme ça !

      {
        guard let directoryURL = FileManager.default.urls(for: .desktopDirectory, in: .userDomainMask).first else
        {
          return
        }
        
        let fileURL = directoryURL.appendingPathComponent("ThingsAppleScript Guide.pdf")
        
        if let pdfDocument = PDFDocument(url: fileURL)
        {
          …
        }
      }
    

    Joanna, pourquoi ne pas regrouper tout les tests ?

      {
        if let directoryURL = FileManager.default.urls(for: .desktopDirectory, in: .userDomainMask).first,
          let fileURL = directoryURL.appendingPathComponent("ThingsAppleScript Guide.pdf"),
          let pdfDocument = PDFDocument(url: fileURL) 
        {
          …
        }
      }
    

    J'ai tapé le code sans tester, la syntaxe n'est peut-être pas exactement la bonne.

  • Joanna CarterJoanna Carter Membre, Modérateur

    @Draken a dit :
    Joanna, pourquoi ne pas regrouper tout les tests ?

      {
        if let directoryURL = FileManager.default.urls(for: .desktopDirectory, in: .userDomainMask).first,
          let fileURL = directoryURL.appendingPathComponent("ThingsAppleScript Guide.pdf"),
          let pdfDocument = PDFDocument(url: fileURL) 
        {
          …
        }
      }
    

    Bien sûr ! J'ai laissé le code comme Rocou l'a fait pour ne lui confondre trop ;)

Connectez-vous ou Inscrivez-vous pour répondre.