PDF Generator

  • PDF Generator

    Hallo Leute, ich bin auf der Suche nach einem PDF Generator, welche die Funktion beinhaltet die PDF's auch zu speichern. Einen PDF Generator an sich habe ich bereits hinbekommen und die PDF's speichert es mir dann immer in den Documents Ordner des jeweiligen Devices welches ich zuvor im Simulator ausgewählt habe. Doch wenn ich die App auf meinem Handy starte finde ich die PDF's nirgends. Was ich also bräuchte wäre einmal das mir die PDF als Vorschau angezeigt wird und das ich die PDF auch anschließend abspeichern kann, beispielsweise in iBooks rein.

    Vielleicht kann mir da ja jemand behilflich sein :)

    Vielen Dank im Voraus!
  • Es klingt ja, als wäre die PDF-Erstellung kein Problem. Dann könntest Du dieses z. B. in einem UIActivityViewController nutzen, um das PDF in anderen Applikationen wie iBook zu öffnen. Alternativ kannst Du auch eigene Aktions schreiben.

    Mit einem UIDocumentInteractionController kannst Du das PDF wohl auch im Quick Look anzeigen lassen, das habe ich allerdings noch nicht selber verwendet.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Ein kleines Update: wie ich die PDF erstelle: pageSize = CGSize(width: 850, height: 1100)
    var fileName:NSString = "Test.pdf"
    var path:NSArray = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as NSArray
    var documentDirectory:NSString = "/bla bla Ordner"
    var pdfPathWithFileName:NSString = documentDirectory.appendingPathComponent(fileName as String) as NSString
    generatePdf(filepath: pdfPathWithFileName)

    Im WebView kann ich mir die PDF dann problemlos anzeigen lassen.

    // Vorschau im WebView
    let path2 = NSURL(string:pdfPathWithFileName as String)
    let request = NSURLRequest(url: path2 as! URL)
    Nun habe ich ein Framework gefunden, welches mir die PDF öffnet und wo ich sie auch nach Belieben speichern kann.

    Dieses bietet mir folgende Möglichkeiten:


    ### Create a PDFDocument

    ##### From a file URL
    ```swift
    let documentFileURL = Bundle.main.url(forResource: "Cupcakes", withExtension: "pdf")!
    let document = PDFDocument(url: documentFileURL)!
    ```

    ##### From a remote URL
    ```swift
    let remotePDFDocumentURLPath = "http://devstreaming.apple.com/videos/wwdc/2016/201h1g4asm31ti2l9n1/201/201_internationalization_best_practices.pdf"
    let remotePDFDocumentURL = URL(string: remotePDFDocumentURLPath)!
    let document = PDFDocument(url: remotePDFDocumentURL)!
    ```

    ##### From Data
    ```swift
    let document = PDFDocument(fileData: fileData, fileName: "Sample PDF")!
    ```

    ### Display a PDFDocument
    ```swift
    let readerController = PDFViewController.createNew(with: document)
    navigationController?.pushViewController(readerController, animated: true)
    ```

    So nun schaffe ich es nicht die PDF über das Framework anzeigen zu lassen, obwohl ja bereits beim Webview eine URL verwendet wird..

    Ich habe mal folgenden Code versucht:

    let remotePDFDocumentURLPath = pdfPathWithFileName as String!
    let remotePDFDocumentURL = URL(string: remotePDFDocumentURLPath!)!
    let document = PDFDocument(url: remotePDFDocumentURL)!

    let readerController = PDFViewController.createNew(with: document)
    navigationController?.pushViewController(readerController, animated: true)

    Aber dann wirft er mit folgenden Fehler aus, wenn ich die Action ausführe:
    Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

    Weiß hier einer Rat?

    Vielen Dank!
  • Ich würde es selber machen ... Ich verstehe nicht, warum Du für eine vergleichsweise einfache Aufgabe eine externe Abhängigkeit eingehen willst. Noch dazu mit einem Framework, das Du nicht kennst.

    Ansonsten würde ich bei rein temporären Daten eher ein NSData-Objekt als eine Datei verwenden. Und wenn eine Temporärdatei, dann im Cache-Verzeichnis.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Sa Muel Kabitzky schrieb:

    Ich habe mir das Framework geholt, da ich keine wirkliche Anleitung zum selber machen gefunden habe. Hast du eine Anleitung für ein NSData-Objekt Modell? Bin leider auch kein Experte in dem Themengebiet.
    Jetzt fällt es mir etwas schwer, konstruktiv zu bleiben:

    Ein "NSData-Objekt Modell" gibt es nicht. NSData ist eine Klasse zum Repräsentieren binärer Daten-"Blöcke". Wenn Dir als Anfänger ein solcher Begriff nichts sagt - was vollkommen in Ordnung ist - sollte Deine erste Anlaufstelle die Apple Dokumentation sein. In Deinem Fall macht es wenig Sinn, PDF-Daten erst in eine Datei zu speichern, um im gleichen Programm diese Datei wieder zu lesen und anzuzeigen. Diese Operationen kannst Du Dir sparen wenn Du den PDF-Context direkt in ein NSData-Objekt speicherst und dieses an den Viewer übergibst. Das geht natürlich nur, weil der (scheinbar) eine entsprechende Methode zum Einlesen per NSData liefert.

    Bzgl. des Anzeigens hatte ich Dich oben auf den UIDocumentInteractionController hingewiesen. Hast Du den Link einmal verwendet? Auch wenn ich den Disclaimer mitschicken muss, es selber noch nicht ausprobiert zu haben, die Anzeige einer PDF-Datei scheint auf diesem Weg ein Dreizeiler zu sein:

    Quellcode

    1. self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:URL];
    2. [self.documentInteractionController setDelegate:self];
    3. [self.documentInteractionController presentPreviewAnimated:YES];
    Auf jeden Fall findet man mit Tante Google unter Suchbegriffen wie "uidocumentInteractioncontroller view pdf" ausreichend Lesestoff...

    Mach' Dir einen Gefallen - wenn Du wirklich programmieren willst - und suche weniger fertigen Code, den Du zusammenstückelst, sondern beschäftige Dich mit den Kernelementen und baue darauf auf. Ein externes Framework zum Anzeigen einer PDF-Datei ist definitiv Overkill und wird Dir das Leben nur kurzfristig leichter machen: Wie lange wird es gepflegt, welche Abhängigkeiten / Fehler hat das Framework, ... ich wäre hier sehr zögerlich, vom fehlenden Lerneffekt einmal ganz abgesehen.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MyMattes () aus folgendem Grund: Code-Beispile rief "Open"-Menü statt Preview auf...