webentwicklung-frage-antwort-db.com.de

wie man pdf auf ios anzeigt

Ich bin noch relativ neu in xcode, obwohl ich zuvor viele Tutorials und Online-Recherchen durchgeführt habe, gibt es noch ein paar Dinge, die mich rätseln, da obj c nicht meine Muttersprache ist. (selbst gelernt bei meinem Praktikanten) 

Ich möchte wissen, ob es eine Möglichkeit gibt, Offline-Builds für xcode iOS zu erstellen, sodass wir PDF-Dateien aus lokalen Dateien anzeigen können. 

Die Methode, die ich jetzt verwende, ist über UIWebView, um einen benutzerdefinierten HTML-Code anzuzeigen, der die URL PDF (online) enthält. Ich möchte jedoch, falls möglich, eine Offline-Version erstellen.

Aber aus Online-Recherchen scheint mir der einzige Weg, PDF anzuzeigen, über UIWebView. Wenn dies wirklich der Fall ist, ist es möglich, die Datei aus der lokalen Ressource zu ziehen (z. B. Dateien zu meinem Xcode-Ressourcenordner hinzufügen). anstatt die URL PDF zu verwenden.

OFF-THEMA: Was wäre die bessere Wahl? Lokale Datei abrufen oder Online-URL für Datei PDF verwenden?

Da UIWebView eine Verbindung erfordert, scheint es eine bessere Wahl zu sein, einfach die Online-URL zu ziehen, da diese die aktuellste und aktuellste ist.

Feedback wird sehr geschätzt. Vielen Dank! 

BEARBEITEN: schnelle Frage, wenn ich die UIDocumentInteractionController-Methode oder das QuickLook-Framework benutze, um es offline zu machen, müsste ich den Update-Patch jedes Mal freigeben, wenn ein neuer PDF - Artikel hinzugefügt wird (korrigieren Sie mich, wenn Ich liege falsch)

In Anbetracht dieses Punktes habe ich vor Ort ein Gegenargument zu meiner eigenen Frage gefunden (Tut mir leid, wenn einer von Ihnen das Gefühl hat, dass Sie Zeit für mich verschwenden>. <, Ich bin eine Person, die Möglichkeiten und Fragen in Frage stellt Der andere Ansatz könnte zur Lösung eines Problems verwendet werden.). Um Zeit durch die ständige Aktualisierung zu sparen und eine Echtzeitbasislösung bereitzustellen, nämlich die Verwendung von UIWebView (dies ist ein Widerspruch zu meinem Zweck SO thread), da dieses Projekt auf einer Online-Website basiert (meine Inhalte und Quellen von dort abrufen), wenn ich ihre Website für den Artikelabschnitt laden würde, wäre es mutig, dies durch Hinzufügen einer NSString-Variablen zu sagen , Ich kann der viewDidLoad-Funktion zusammen mit der UIWebView die NSRange-Funktion hinzufügen, sodass die URL niemals den News-Bereich und die URL PDF verlässt. z.B. Verwenden der Kombination von if und der NSRange-Funktion, um zu überprüfen, ob die URL nur den News-Abschnitt und die URL PDF enthält.

Ich habe einmal eine NSRange-Funktion für Punkt auf dem Rechner gemacht, also dachte ich, es wäre ein guter Zeitpunkt, um sie für diese Framework-App einzusetzen.

P.S - Diese App ist ein Basisprojekt der Organisation und ich bin ein Praktikant, der ihnen das Grundgerüst zur Verfügung stellt.

26

Sie können ein UIWebView verwenden, um das PDF direkt von Ihrem Bundle abzurufen, ohne dass Sie einen Online-Webdienst aufrufen müssen. 

Lokale Datei:

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

Remote-Datei:

- (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

Viele Optionen, hier sind 3:

1) Die einfachste Möglichkeit, eine lokale PDF-Datei zu laden und anzuzeigen, ist die Verwendung eines solchen UIWebview:

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

2) Sie können auch eine UIDocumentInteractionController/QLPreviewController verwenden, um PDF -Dateien nativ anzuzeigen.

3) Eine andere Möglichkeit wäre, einen benutzerdefinierten PDF Viewer zu erstellen, wie in Äpfeln ZoomingPDFViewer - Beispielcode . (mit UIPageViewController + CATiledLayer + UIScrollView)

37
calimarkus

Ich empfehle Ihnen, das QuickLook-Framework zu verwenden, während Sie PDF -Dateien bearbeiten. 

11
Rui Peres

Swift 4.x

UIWebview-Ansatz in 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

Es gibt ein neues Toolkit, das IOs eingeführt hat. Es hat viele spezielle Funktionen für die Anzeige von PDFs. Sie können darin die PdfView-Klasse verwenden, um eine PDF entweder aus einer lokalen Datei oder über eine URL anzuzeigen.

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

Ich habe diese Site gefunden und ist eine sehr einfache Methode, um PDFs mit jeder verfügbaren pdf-fähigen App zu öffnen, die auf dem iPhone geladen ist. (Ich bevorzuge iBooks)

einfache Möglichkeit, eine pdf-Datei zu präsentieren und zu öffnen

2
user2616647

In meinem Fall habe ich eine tableView, die anhand einer ausgewählten Zeile oder eines Detailindikators in eine PDFView übergeht (in verschiedenen Teilen meiner App gibt es jeweils zwei verschiedene ViewController). Ich habe ein @IBOutlet für das PDFView und öffne mit diesem Code das gewünschte PDF, das in der App gespeichert ist:

@IBOutlet weak var myPDFView: PDFView!

var mySelection = String()

override func viewDidLoad() {
    super.viewDidLoad()

    if let path = Bundle.main.path(forResource: mySelection, ofType: "pdf") {
        let url = URL(fileURLWithPath: path)

        if let myDocument = PDFDocument(url: url) {
            myPDFView.document = myDocument
            myPDFView.autoScales = true
            myPDFView.displayMode = .singlePageContinuous
            myPDFView.displayDirection = .vertical
            myPDFView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        }
    }
}

Das alles funktioniert super. Die richtigen PDFs lassen sich leicht laden und füllen den Bildschirm so aus, wie ich es möchte. Das PDF wird jedoch immer ein wenig nach oben gescrollt, wodurch der obere Teil unter der Navigationsleiste ausgeblendet wird. Beachten Sie in der Abbildung unten, dass der obere Teil des Dokuments nicht sichtbar ist, aber das bottom ist, genau über der Tab-Leiste am unteren Rand. Ich denke, das hat mit den PDF Koordinaten am unteren Rand der Seite zu tun, kann aber nicht herausfinden, wie man es zum Laden ganz oben bringt des Dokuments, so dass der Hintergrund oben sichtbar ist.

Simulator Screen Shot Link

Vielleicht hat das mit autoScales zu tun?

1
Tracker6

Sie können auch UIDocumentInteractionController verwenden!

let docController = UIDocumentInteractionController(url: URL(fileURLWithPath: path)) documentInteractionController.presentPreview(animated: true)

1
Badre

Es ist spät, aber mit UIWebview gibt es einige Einschränkungen beim Laden von PDF-Dateien. Laden Sie also beliebige PDF-Dateien mit folgendem Code

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

wir sind iOS-Codierer, kein JS/Web-Programmierer. Bleiben Sie also in den APIs von Swift und Apple. Die schnellere und sauberere Methode ist die Verwendung von Quicklook.

Ich zitiere Calimarkus.

Trotzdem ist der Code sehr einfach:

//  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

Das PDFKit-Framework von Apple bietet eine große Auswahl an Code, um uns bei der Arbeit mit PDF-Dateien zu unterstützen. Eine der nützlichsten Funktionen ist PDFView - PDF-Dateien werden auf dem Bildschirm dargestellt und ermöglichen dem Benutzer die Interaktion mit diesen.

Um es auszuprobieren, importieren Sie zunächst das PDFKit-Framework:

import PDFKit

Fügen Sie als Nächstes diesen Code zu Ihrer viewDidLoad () - Methode hinzu, um eine PDFView zu erstellen und den gesamten verfügbaren Speicherplatz zu füllen:

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

Erstellen Sie schließlich eine URL, die auf ein PDF verweist, das Sie in Ihrem Bundle (oder in Ihrem Dokumentverzeichnis) gespeichert haben. Erstellen Sie dann ein PDFDocument-Objekt und übergeben Sie es an die Ansicht PDF:

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

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

Erledigt!

0
Ali A. Jalil