Kennt jemand eine gute Methode zum Bearbeiten von PDFs in PHP? Vorzugsweise Open-Source- / Zero-License-Kostenmethoden. :) :)
Ich denke daran, eine PDF-Datei zu öffnen, Text in der PDF-Datei zu ersetzen und dann die geänderte Version der PDF-Datei zu schreiben.
Ich habe in der Vergangenheit programmgesteuert PDF-Dateien mit FPDF erstellt, fand es aber manchmal etwas unhandlich.
Antworten:
Wenn Sie die Lücke ausfüllen, können Sie den Text an einer beliebigen Stelle auf der Seite präzise positionieren. Es ist also relativ einfach (wenn nicht etwas langweilig), den fehlenden Text zum Dokument hinzuzufügen. Zum Beispiel mit Zend Framework:
<?php require_once 'Zend/Pdf.php'; $pdf = Zend_Pdf::load('blank.pdf'); $page = $pdf->pages[0]; $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA); $page->setFont($font, 12); $page->drawText('Hello world!', 72, 720); $pdf->save('zend.pdf');
Wenn Sie versuchen, Inline-Inhalte wie "[Platzhalterzeichenfolge]" zu ersetzen, wird dies viel komplizierter. Obwohl dies technisch möglich ist, werden Sie wahrscheinlich das Layout der Seite durcheinander bringen.
Ein PDF-Dokument besteht aus einer Reihe von primitiven Zeichenoperationen: Linie hier, Bild hier, Textblock dort usw. Es enthält keine Informationen über die Layoutabsicht dieser Grundelemente.
quelle
Es gibt eine kostenlose und benutzerfreundliche PDF-Klasse zum Erstellen von PDF-Dokumenten. Es heißt FPDF . In Kombination mit FPDI ( http://www.setasign.de/products/pdf-php-solutions/fpdi ) können sogar PDF-Dokumente bearbeitet werden. Der folgende Code zeigt, wie Sie mit FPDF und FPDI einen vorhandenen Geschenkgutschein mit den Benutzerdaten füllen.
require_once('fpdf.php'); require_once('fpdi.php'); $pdf = new FPDI(); $pdf->AddPage(); $pdf->setSourceFile('gift_coupon.pdf'); // import page 1 $tplIdx = $this->pdf->importPage(1); //use the imported page and place it at point 0,0; calculate width and height //automaticallay and ajust the page size to the size of the imported page $this->pdf->useTemplate($tplIdx, 0, 0, 0, 0, true); // now write some text above the imported page $this->pdf->SetFont('Arial', '', '13'); $this->pdf->SetTextColor(0,0,0); //set position in pdf document $this->pdf->SetXY(20, 20); //first parameter defines the line height $this->pdf->Write(0, 'gift code'); //force the browser to download the output $this->pdf->Output('gift_coupon_generated.pdf', 'D');
quelle
"FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI."
Gibt es eine Lösung dafür?Wenn Sie wirklich einfache PDFs benötigen, ist Zend oder FPDF in Ordnung. Ich finde es jedoch schwierig und frustrierend, mit ihnen zu arbeiten. Aufgrund der Funktionsweise der API gibt es auch keine gute Möglichkeit, Inhalte von der Präsentation von der Geschäftslogik zu trennen.
Aus diesem Grund verwende ich dompdf , das HTML und CSS automatisch in PDF-Dokumente konvertiert. Sie können eine Vorlage wie für eine HTML-Seite erstellen und die Standard-HTML-Syntax verwenden. Sie können sogar eine externe CSS-Datei einfügen. Die Bibliothek ist nicht perfekt und sehr komplexe Markups oder CSS werden manchmal verstümmelt, aber ich habe nichts anderes gefunden, das auch funktioniert.
quelle
Ich weiß nicht, ob dies eine Option ist, aber es würde sehr ähnlich wie die PDF-Bibliothek von Zend funktionieren, aber Sie müssen keinen zusätzlichen Code (das Zend-Framework) laden. Es erweitert nur FPDF.
http://www.setasign.de/products/pdf-php-solutions/fpdi/
Hier können Sie im Grunde das Gleiche tun. Laden Sie die PDF-Datei, schreiben Sie darüber und speichern Sie sie in einer neuen PDF-Datei. In FPDI fügen Sie das PDF grundsätzlich als Bild ein, damit Sie alles darüber legen können, was Sie wollen.
Aber auch dies verwendet FPDF. Wenn Sie das also nicht verwenden möchten, funktioniert es nicht.
quelle
Zend Framework kann vorhandene PDF-Dateien laden und bearbeiten. Ich denke, es unterstützt auch Revisionen.
Ich benutze es, um Dokumente in einem Projekt zu erstellen, und es funktioniert großartig. Nie einen bearbeitet.
Schauen Sie sich das Dokument hier an
quelle
Die Dokumentation zur PDF / pdflib-Erweiterung in PHP ist spärlich (etwas, das in bugs.php.net vermerkt wurde). Ich empfehle Ihnen, die Zend-Bibliothek zu verwenden.
quelle
Tcpdf ist auch eine gute Bibliothek zum Generieren von PDF in PHP http://www.tcpdf.org/
quelle
Ich hatte wirklich große Hoffnungen auf dompdf (es ist eine coole Idee), aber das Problem mit der Positionierung ist ein wichtiger Faktor bei der Verwendung von fpdf. Obwohl es langweilig ist, da jedes Element gesetzt werden muss; es ist mächtig, wenn alle rauskommen.
Ich lege ein Bild unter meinen Arbeitsbereich im Dokument, um mein Layout passend darauf zu platzieren. Es war immer ausreichend, auch für Spalten (erfordert ein wenig PHP-String-Berechnung, aber nichts zu schrecklich berauschend).
Viel Glück.
quelle
Wir verwenden pdflib , um PDF-Dateien aus unseren Rails-Apps zu erstellen. Es hat Bindungen für PHP und eine Menge anderer Sprachen.
Wir verwenden die kommerzielle Version, aber sie haben auch eine Free / Open Source-Version, die einige Einschränkungen aufweist.
Dies erlaubt leider nur die Erstellung von PDFs.
Wenn Sie vorhandene Dateien öffnen und ‚Bearbeiten‘ wollen, tun pdflib bieten ein Produkt , das diese dies tut , kostet aber eine LOT
quelle
<?php //getting new instance $pdfFile = new_pdf(); PDF_open_file($pdfFile, " "); //document info pdf_set_info($pdfFile, "Auther", "Ahmed Elbshry"); pdf_set_info($pdfFile, "Creator", "Ahmed Elbshry"); pdf_set_info($pdfFile, "Title", "PDFlib"); pdf_set_info($pdfFile, "Subject", "Using PDFlib"); //starting our page and define the width and highet of the document pdf_begin_page($pdfFile, 595, 842); //check if Arial font is found, or exit if($font = PDF_findfont($pdfFile, "Arial", "winansi", 1)) { PDF_setfont($pdfFile, $font, 12); } else { echo ("Font Not Found!"); PDF_end_page($pdfFile); PDF_close($pdfFile); PDF_delete($pdfFile); exit(); } //start writing from the point 50,780 PDF_show_xy($pdfFile, "This Text In Arial Font", 50, 780); PDF_end_page($pdfFile); PDF_close($pdfFile); //store the pdf document in $pdf $pdf = PDF_get_buffer($pdfFile); //get the len to tell the browser about it $pdflen = strlen($pdfFile); //telling the browser about the pdf document header("Content-type: application/pdf"); header("Content-length: $pdflen"); header("Content-Disposition: inline; filename=phpMade.pdf"); //output the document print($pdf); //delete the object PDF_delete($pdfFile); ?>
quelle
pdf_set_info($pdfFile, "Title", "PDFlib");