2010-02-22 17 views
13

Ich habe es geschafft, einen sehr einfachen PDF-Viewer in meiner Anwendung zu implementieren, aber ich fragte mich, ob es möglich war, Anmerkungen zum PDF hinzuzufügen. Ich habe die SDK-Dokumente durchgesehen, aber nichts gefunden. Ich habe wirklich 2 Fragen:PDF in iPhone SDK annotieren

  1. Ist es möglich, dies zu tun?
  2. Was ist der beste Ansatz zu nehmen?
  3. Gibt es ein Framework oder eine Bibliothek, die ich mit einbeziehen kann?

Danke.

+0

Hallo Jack, haben Sie Anmerkungen machen? –

Antwort

18

Sie können Anmerkungen machen, indem Sie eine PDF-Seite einlesen, in einen neuen PDF-Grafikkontext zeichnen und dann zusätzlichen Inhalt in diesen Grafikkontext zeichnen. Hier ist ein Code, der die Wörter "Beispiel Annotation" an Position (100.0.100.0) zu einer vorhandenen PDF hinzufügt. Die Methode getPDFFileName gibt den Pfad der ursprünglichen PD zurück. getTempPDFFileName gibt den Pfad der neuen PDF-Datei zurück, also das Original und die Anmerkung.

Um die Anmerkungen zu variieren, fügen Sie einfach mehr Zeichencode anstelle der Methode drawInRect: withFont: ein. Weitere Informationen dazu finden Sie im Zeichnungs- und Druckhandbuch für iOS.

- (void) exampleAnnotation; 
{ 
    NSURL* url = [NSURL fileURLWithPath:[self getPDFFileName]]; 

    CGPDFDocumentRef document = CGPDFDocumentCreateWithURL ((CFURLRef) url);// 2 
    size_t count = CGPDFDocumentGetNumberOfPages (document);// 3 

    if (count == 0) 
    { 
     NSLog(@"PDF needs at least one page"); 
     return; 
    } 

    CGRect paperSize = CGRectMake(0.0,0.0,595.28,841.89); 

    UIGraphicsBeginPDFContextToFile([self getTempPDFFileName], paperSize, nil); 

    UIGraphicsBeginPDFPageWithInfo(paperSize, nil); 

    CGContextRef currentContext = UIGraphicsGetCurrentContext(); 

    // flip context so page is right way up 
    CGContextTranslateCTM(currentContext, 0, paperSize.size.height); 
    CGContextScaleCTM(currentContext, 1.0, -1.0); 

    CGPDFPageRef page = CGPDFDocumentGetPage (document, 1); // grab page 1 of the PDF 

    CGContextDrawPDFPage (currentContext, page); // draw page 1 into graphics context 

    // flip context so annotations are right way up 
    CGContextScaleCTM(currentContext, 1.0, -1.0); 
    CGContextTranslateCTM(currentContext, 0, -paperSize.size.height); 

    [@"Example annotation" drawInRect:CGRectMake(100.0, 100.0, 200.0, 40.0) withFont:[UIFont systemFontOfSize:18.0]]; 

    UIGraphicsEndPDFContext(); 

    CGPDFDocumentRelease (document); 
} 
+2

Dies war eine massive Hilfe. Sobald ich ein tieferes Verständnis davon habe, werde ich ein Github-Projekt erstellen, um es mit der Community zu teilen. – Jack

+0

Haben Sie ein GitHub-Projekt @Jack gemacht? –

+0

@Methew Ich habe Ihr Beispiel versucht, aber ich kann das Dokument nicht öffnen. Ich erhalte den Fehler 'Berechtigung verweigert'. – Justin

1

Ich glaube nicht PDFAnnotation oder PDFKit wurden auf dem iPhone vom Desktop portiert .... wahrscheinlich eine gute Ausrede zu file a radar. Jedoch kann Haru Sie in der Zwischenzeit bekommen.

+0

Derzeit ist Haru nur für die folgenden Plattformen verfügbar: 1. Cygwin + GCC (Microsoft Windows) 2. Cygwin + MinGW (Microsoft Windows) 3. MSYS + MinGW (Microsoft Windows) 3. Microsoft VC++ (Microsoft Windows) 4. Borland C++ (Microsoft Windows) 5. GCC (Linux, FreeBSD, NetBSD, Solaris ...) –

3

Ich arbeite in dem Zeug und erstellte ein GitHub-Projekt. Bitte überprüfen Sie es here.

+0

verwenden Ihr Projekt speichert jedoch die Anmerkungen zu der pdf nicht. Ich überprüfte den Quellcode, es archiviert alle Anmerkungen unabhängig von den eigentlichen PDF-Dateien. Wenn ich also die PDF-Datei an eine andere Maschine weitergebe, wird die PDF-Datei ohne Änderungen übertragen. –

+0

Es ist in Entwicklung. Bitte überprüfen Sie später :) – lazyprogram

+0

@lazyprogram, freundlicherweise, aktualisieren Sie ihre Bibliothek, wie ich Dylib Fehler bekomme und die App auf dem Gerät abstürzt, wenn es von xcode 7 läuft. –