web-dev-qa-db-fra.com

comment afficher le pdf sur ios

Je suis encore assez nouveau pour xcode, bien que j’ai fait de nombreux tutoriels et recherches en ligne auparavant, il reste encore quelques petites choses qui me posent problème car obj c n’est pas mon langage de programmation natif. (autodidacte sur mon stagiaire) 

Je veux savoir s'il existe un moyen pour une construction hors connexion pour xcode iOS telle que nous pouvons afficher le fichier pdf à partir d'un fichier local. 

La méthode que j'utilise actuellement est via UIWebView pour afficher un code HTML personnalisé contenant l'URL PDF (en ligne), mais je souhaite créer une version hors connexion si possible.

Mais à partir des recherches en ligne, il me semble que le seul moyen d’afficher PDF est via UIWebView, si tel est vraiment le cas, est-il possible de récupérer le fichier depuis une ressource locale (par exemple, ajouter des fichiers dans mon dossier de ressources xcode) plutôt que d'utiliser l'URL PDF.

HORS SUJET: Quel serait le meilleur choix? Extraire le fichier local ou utiliser l'URL en ligne pour le fichier PDF?

Comme UIWebView nécessite une connexion, il semblerait préférable de tirer simplement l'URL en ligne, qui sera la plus récente et la plus récente.

Les commentaires sont très appréciés. Merci! 

EDIT: petite question, si j'utilise la méthode UIDocumentInteractionController ou le framework QuickLook pour le rendre hors ligne, cela signifierait que je dois publier le correctif de mise à jour chaque fois qu'un nouvel article PDF est ajouté (corrigez-moi si J'ai tort)

Compte tenu de ce qui précède, j’ai présenté un contre-argument à ma propre question sur-le-champ (désolé si vous pensez que vous perdez du temps avec moi>.>, Je suis une personne qui aime questionner les possibilités et l’approche différente que l’on pourrait adopter pour résoudre un problème) En cas de gain de temps dû à la mise à jour constante et à la fourniture d’une solution à base de temps réel, qui consiste à utiliser UIWebView (je sais que cela est en contradiction avec mon objectif de la présente SO thread), comme ce projet est basé sur un site Web en ligne (obtenir mon contenu et mes sources à partir de là), si je devais charger leur site Web pour la section article, aurais-je l'audace de dire cela en ajoutant une variable NSString , Je peux ajouter la fonction NSRange à viewDidLoad avec UIWebView, de sorte que l’URL ne quitte jamais la section de nouvelles et l’URL PDF. par exemple. utilisation de la combinaison de if et de la fonction NSRange pour vérifier que l’URL ne contient que la section de nouvelles et l’URL PDF)

Comme je l'avais déjà fait avant une fonction NSRange pour le point sur la calculatrice, j'ai donc pensé que ce serait un bon moment pour la mettre en service pour cette application-cadre.

P.S - Cette application est un projet de base d'organisation et je suis un stagiaire en leur fournissant le cadre de base squelette.

26

Vous pouvez utiliser un UIWebView pour obtenir le PDF directement de votre lot, sans avoir à appeler un service Web en ligne. 

Fichier local:

NSString *html = [NSString stringWithContentsOfFile:path1 encoding:NSUTF8StringEncoding error:nil];
[self.webView loadHTMLString:html baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]bundlePath]]];

Fichier distant:

- (void) loadRemotePdf
    {
       CGRect rect = [[UIScreen mainScreen] bounds];
       CGSize screenSize = rect.size;
        
       UIWebView *myWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0,0,screenSize.width,screenSize.height)];
        webView.autoresizesSubviews = YES;
            webView.autoresizingMask=(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);

       NSURL *myUrl = [NSURL URLWithString:@"http://www.mysite.com/test.pdf"];
       NSURLRequest *myRequest = [NSURLRequest requestWithURL:myUrl];
            
       [webView loadRequest:myRequest];

       [window addSubview: myWebView];
       [myWebView release];
            
}
33
self

Nombreuses options, en voici 3:

1) Le moyen le plus simple de charger et d’afficher un fichier pdf local est d’utiliser une UIWebview comme celle-ci:

NSString *path = [[NSBundle mainBundle] pathForResource:@"document" ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[webView loadRequest:request];

2) Vous pouvez également utiliser une variable UIDocumentInteractionController/QLPreviewController pour afficher les fichiers PDF de manière native.

3) Une autre solution consisterait à créer un visualiseur personnalisé PDF, comme dans apple ZoomingPDFViewer example code . (en utilisant UIPageViewController + CATiledLayer + UIScrollView)

37
calimarkus

Je vous conseille d'utiliser le framework QuickLook lors du traitement de fichiers PDF 

11
Rui Peres

Swift 4.x

Approche de UIWebview dans Swift:

    //let url = URL.init(string: "https://www.Adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/pdf_open_parameters.pdf")! // for file in web
    let url = Bundle.main.url(forResource: "filename", withExtension: ".pdf")! // for file in bundle
    let webView = UIWebView.init(frame: view.frame)
    webView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    webView.loadRequest(URLRequest.init(url: url))
    view.addSubview(webView)
4
Argus

Une nouvelle boîte à outils a été introduite par les OI. Il possède de nombreuses fonctionnalités dédiées à l'affichage des PDF. Vous pouvez utiliser la classe PdfView pour afficher un PDF à partir d'un fichier local ou via une URL.

PDFKit > PDFView

3
Rizan Zaky
NSString *path = [[NSBundle mainBundle] pathForResource:@"Yourpdf" ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
UIWebView *webView=[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 300, 400)];
[[webView scrollView] setContentOffset:CGPointMake(0,500) animated:YES];
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.scrollTo(0.0, 50.0)"]];
[webView loadRequest:request];
[self.view addSubview:webView];
2
Ved Rauniyar

J'ai trouvé ce site et est une méthode très facile pour ouvrir les pdf avec n'importe quelle application compatible capable de charger des pdf disponible et chargée sur l'iPhone. (Je préfère iBooks)

moyen simple de présenter et d'ouvrir un fichier pdf

2
user2616647

Il est tard mais UIWebview limite le chargement des fichiers pdf. Il ne charge pas les fichiers PDF modifiables correctement. alors chargez tout type de fichiers pdf utilisez le code suivant

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"pdfFileName" ofType:@"pdf"]];
PDFView *view = [[PDFView alloc] initWithFrame:self.view.frame];
view.document = [[PDFDocument alloc] initWithURL:url];
[self.view addSubview:view];
1
Shaik Riyaz

nous sommes des codeurs iOS, pas de programmeur JS/Web, restez donc dans les API de Swift et d'Apple .

Je cite calimarkus.

Quoi qu'il en soit, le code est très simple:

//  Copyright © 2019 ing.conti. All rights reserved.
//

import UIKit
import QuickLook


class ViewController: UIViewController, QLPreviewControllerDataSource {

    var previewController:QLPreviewController?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.previewController = QLPreviewController()
        previewController!.dataSource = self
        present(previewController!, animated: true)

    }

    //QL delegate:

    func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
        return 1
    }


    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {

        guard let url = Bundle.main.url(forResource: "SAMPLE", withExtension: "pdf") else {
            fatalError("Could not load pdf")
        }

        return url as QLPreviewItem 
    }
}
0
ingconti

Le cadre PDFKit d’Apple fournit une vaste gamme de codes pour nous aider à travailler avec des fichiers PDF. L’un des plus utiles est PDFView: il affiche les PDF à l’écran et permet aux utilisateurs d’interagir avec eux.

Pour l'essayer, commencez par importer le framework PDFKit:

import PDFKit

Ensuite, ajoutez ce code à votre méthode viewDidLoad () pour créer un PDFView et lui faire remplir tout l'espace disponible:

let pdfView = PDFView()

pdfView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(pdfView)

pdfView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
pdfView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
pdfView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
pdfView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true

Enfin, créez une URL pointant vers un PDF que vous avez dans votre ensemble quelque part (ou une dans votre répertoire de documents), puis créez un objet PDFDocument à partir de celui-ci et passez-le à la vue PDF:

guard let path = Bundle.main.url(forResource: "example", withExtension: "pdf") else { return }

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

Terminé!

0
Ali A. Jalil