PDF zusammenführen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PDF zusammenführen

    Hallo alle zusammen,
    ich stehe vor einem recht großen Problem.

    In meiner App möchte ich mehrere PDF's zu einer Datei zusammenführen.
    Das Problem ist allerdings, dass die PDF's Formularfelder besitzen.

    Mit folgendem code, der im Netz schnell zu finden war, kann ich PDF's zwar verschmelzen lassen, allerdings verschwinden dann die Formularfelder.

    Ich habe feststellen können, das mit dem Code writeToFile, einzelne Dokumente gespeichert werden können, ohne das die Formularfelder verschwinden.
    Macht ja auch Sinn, da das PDF nicht "neu erstellt" wird, sondern quasi nur ins Dokumentenverzeichnis verschoben wird.

    Habt ihr eine Idee ?

    Hier der Code, mit dem das Zusammenführen geht, nur leider die Formularfelder verschwinden:

    Quellcode

    1. ​NSString *pdfPath1 = [documentsDirectory stringByAppendingPathComponent:@"pdf1.pdf"];
    2. NSString *pdfPath2 = [documentsDirectory stringByAppendingPathComponent:@"pdf2.pdf"];
    3. NSString *pdfPathOutput = [documentsDirectory stringByAppendingPathComponent:@"outputFile.pdf"];
    4. CFURLRef pdfURL1 = (CFURLRef)CFBridgingRetain([[NSURL alloc] initFileURLWithPath:pdfPath1]);
    5. CFURLRef pdfURL2 = (CFURLRef)CFBridgingRetain([[NSURL alloc] initFileURLWithPath:pdfPath2]);
    6. CFURLRef pdfURLOutput = (CFURLRef)CFBridgingRetain([[NSURL alloc] initFileURLWithPath:pdfPathOutput]);
    7. CGPDFDocumentRef pdfRef1 = CGPDFDocumentCreateWithURL((CFURLRef)(pdfURL1));
    8. CGPDFDocumentRef pdfRef2 = CGPDFDocumentCreateWithURL((CFURLRef)(pdfURL2));
    9. NSInteger numberOfPages1 = CGPDFDocumentGetNumberOfPages(pdfRef1);
    10. NSInteger numberOfPages2 = CGPDFDocumentGetNumberOfPages(pdfRef2);
    11. CGContextRef writeContext = CGPDFContextCreateWithURL(pdfURLOutput, NULL, NULL);
    12. CGPDFPageRef page;
    13. CGRect mediaBox;
    14. NSLog(@"GENERATING PAGES FROM PDF 1 (%i)...", numberOfPages1);
    15. for (int i=1; i<=numberOfPages1; i++) {
    16. page = CGPDFDocumentGetPage(pdfRef1, i);
    17. mediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
    18. CGContextBeginPage(writeContext, &mediaBox);
    19. CGContextDrawPDFPage(writeContext, page);
    20. CGContextEndPage(writeContext);
    21. }
    22. NSLog(@"GENERATING PAGES FROM PDF 2 (%i)...", numberOfPages2);
    23. for (int i=1; i<=numberOfPages2; i++) {
    24. page = CGPDFDocumentGetPage(pdfRef2, i);
    25. mediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
    26. CGContextBeginPage(writeContext, &mediaBox);
    27. CGContextDrawPDFPage(writeContext, page);
    28. CGContextEndPage(writeContext);
    29. }
    30. NSLog(@"DONE!");
    31. CGPDFContextClose(writeContext);
    32. CFRelease(pdfURL1);
    33. CFRelease(pdfURL2);
    34. CFRelease(pdfURLOutput);
    35. CGPDFDocumentRelease(pdfRef1);
    36. CGPDFDocumentRelease(pdfRef2);
    37. CGContextRelease(writeContext);
    Alles anzeigen
  • Ist ja klar, Du erzeugst ja ein neues PDF-Dokument, indem Du die alten Dokumente quasi reinzeichnest. Da gehen Dir , so wie's aussieht, die Annotations flöten.

    Schau' Dir mal das PDF-Kit von Apple an. Dort kannst Du aus einem PDF-Dokument einzelne Seiten (inkl. Annotations) extrahieren und vermutlich einem anderen PDF-Dokument hinzufügen. Probiert' habe ich es allerdings noch nicht (Das mit dem Hinzufügen)

    Gruß

    gandhi
  • Ist das PDF Kit nicht nur für OSX ?

    Ich hätte dazu sagen sollen, das ich an einer iPad App arbeite.


    Alternativ würde es mir auch helfen, wenn ich einzelne Seiten des PDF Dokuments löschen könnte.
    Dann würde ich die PDF's am Mac zusammenfügen und die App schmeißt dann alle Seiten raus, die nicht gebraucht werden.

    -> Zur Erklärung: Eigentlich soll man mit der App mehrere PDF Dokumente herunterladen können. Der Nutzer kann dann entscheiden, welche Seiten er zusammenfügen will.
    Natürlich wäre es auch denkbar, dass ein einziges Dokument heruntergeladen wird und der Nutzer entsprechende Seiten löscht.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Andrenalin ()

  • PDF hat nicht ganz zu unrecht den Ruf, ein "Nur-Lesen"-Format zu sein: Es ist zwar ausführlich dokumentiert, aber sobald man mehr machen möchte als einzelne Buchstaben ersetzen (durch andere, einzelne Buchstaben...) muss man faktisch die ganze Datei "verstanden" haben (PDF arbeitet mit Byte-Offsets; sobald sich etwas verschiebt, muss man den ganzen Katalog anpassen).
    Im Bereich iOS führt das dazu, dass sich mindestens eine kleine Firma darauf ihr Geschäft aufbaut: PSPDFKit.com.
    Apple unterstützt das Format ja eigentlich ziemlich gut, aber auf dem Telefon beschränkt man sich größtenteils aufs Rendern; sobald man etwas will, dass die Frameworks nicht können, kann man die eigentlich vergessen und muss selbst einen Parser schreiben. Das geht natürlich, aber ist mit ein paar Tagen Arbeit nicht getan: Ich hab' keine Ahnung, wie teuer PSPDFKit ist, aber ich würde auf jeden Fall mal schauen, ob dass den Job erledigen kann.
    Ansonsten kommt es darauf an, was mit den Dokumenten möglich sein muss:
    Man kann vergleichsweise unkompliziert Daten an PDF-Dokumente anhängen - für Formulare ist das eigentlich ein gängiger Weg, da man das Original-Dokument dann immer noch unverändert in der Datei hat.
    Die Daten müssen aber mit dem PDF-Format nichts zu tun haben - solange man kein echtes PDF-Formular braucht, sondern das Ding nur in eigener Software benötigt, kann man die Informationen über die Formularfelder an die PDF-Daten hängen und auswerten.
    Das ist zwar ein ziemlicher Hack, geht aber schnell, und man kann das Resultat auch noch im Adobe Reader lesen (der weiss dann aber natürlich nichts von den Formularen... aber falls das nötig ist, könnte man an der Stelle vielleicht mit einer Server-Lösung anfangen).
  • Das PSPDFKit sieht vielversprechend aus. Das schaue ich mir mal an.
    Habe mir schon fast gedacht, dass es keine "mal eben Lösung" geben kann.

    Vielen Dank !



    Kleiner Nachtrag für alle die ähnliche Probleme haben:
    Auch mit dem PSPDFKit ist es nicht möglich.
    Es kann zwar pdf's zusammenführen, sogar auch wenn sich auf ihnen annotations befinden.
    Allerdings geht das nicht, sobald es sich um Formularfelder handelt.

    Leider habe ich bisher keine Lösung finden können

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Andrenalin ()