2016-04-26 16 views
0

Hallo Ich habe ein CGPDFDocument-Objekt. Ich möchte dieses Dokument öffnen, indem Sie es entweder in meiner App anzeigen oder eine externe Anwendung verwenden. Hier ist der Code, den ich bisher habe.Wie wird CGPDFDocument in swift angezeigt?

// Get the document's file path. 
let path = NSBundle.mainBundle().pathForResource("Newsletter.pdf", ofType: nil) 

// Create an NSURL object based on the file path. 
let url = NSURL.fileURLWithPath(path!) 

// Create an NSURLRequest object. 
let request = NSURLRequest(URL: url) 

// Load the web viewer using the request object. 
webView.loadRequest(request) 

das gebündelte PDF-Dokument trägt den Titel "Newsletter.pdf" und "webView" ist eine IBOutlet zu: in SWIFT

let cfData = CFDataCreate(kCFAllocatorDefault, UnsafePointer<UInt8>(data.File.bytes), data.File.length) 
let cgDataProvider = CGDataProviderCreateWithCFData(cfData) 
let cgPDFDocument = CGPDFDocumentCreateWithProvider(cgDataProvider) 
+0

von wo Sie anzeigen möchten? Haben Sie eine PDF-Datei in Ihrem Hauptpaket (Projekt)? – Lion

Antwort

0

können Sie leicht CGPDF Dokument in schnellen, indem Sie den folgenden Code angezeigt ein UIWebView-Objekt.

Das PDF-Dokument wird gut angezeigt, und Benutzer können durch das Dokument blättern, hinein- und herauszoomen und so weiter.

+1

Kennen Sie einen Weg, den Dateinamen cgPDFDocument zu erhalten? –

4

mit Hilfe von this answer in Objective-C, hier ist ein funktionierendes Beispiel in swift.

override func draw(_ rect: CGRect) { 

    super.draw(rect) 

    let context: CGContext = UIGraphicsGetCurrentContext()! 
    context.setFillColor(red: 1.0,green: 1.0,blue: 1.0,alpha: 1.0) 
    context.fill(self.bounds) 
    let filepath = (Bundle.main.path(forResource: "Example", ofType: "pdf"))! as String 
    let url = URL(fileURLWithPath: filepath) 
    let pdf: CGPDFDocument! = CGPDFDocument(url as CFURL) 
    let page: CGPDFPage = pdf.page(at: 1)! 
    let pageRect: CGRect = page.getBoxRect(CGPDFBox.mediaBox) 
    let scale: CGFloat = min(self.bounds.size.width/pageRect.size.width , self.bounds.size.height/pageRect.size.height) 
    context.saveGState() 
    context.translateBy(x: 0.0, y: self.bounds.size.height) 
    context.scaleBy(x: 1.0, y: -1.0) 
    context.scaleBy(x: scale, y: scale) 
    context.drawPDFPage(page) 
    context.restoreGState() 
} 

Der obige Code ist die drawRect Methode für die Ansicht, die Sie in der PDF-Anzeige wird einfach diese Ansicht hinzufügen als Unteransicht in Ihrer AnsichtController viewDidLoad Methode und Sie sind fertig.

+0

Oder fügen Sie diese benutzerdefinierte Ansicht in der Ansicht des View-Controllers im Storyboard hinzu. Ich habe deinen Code verfolgt und es funktioniert gut. Vielen Dank. –

+0

Ehrfürchtig. Vielen Dank dafür. Nach dem Refactoring (Kontext, Datei-URL usw. als Funktionsargumente) funktioniert das wunderbar und kann verwendet werden, um sowohl Bitmap-Bilder als auch Vektorausgabe (zum Drucken oder zur PDF-Erstellung) zu erzeugen, abhängig davon, welche Art von Zeichnungskontext verwendet wird . – Womble