PDF-Bearbeitung in PHP? [geschlossen]

80

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.

Kaybenleroll
quelle
Ich habe nur FPDF verwendet und finde es großartig. Wie wirklich toll.
SQLMason
Ich habe auch versucht, eine schnelle Lösung dafür zu finden. Ich wollte für jede meiner Produktseiten das gleiche PDF, wobei jedoch die Produktnummer und der Produktname auf jedem PDF ersetzt wurden. Ich fand, dass der Seriendruck (Word oder OpenOffice) der einfachste Weg ist, dies zu tun. Dann habe ich alle PDFs exportiert und hochgeladen. Hoffe das hilft jemandem.
NotJay

Antworten:

70

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.

grom
quelle
1
Das ist toll! Ich wusste nicht, dass das Zend Framework kostenlos ist, ich war verwirrt von Zend Studio, das proprietär ist.
Liam
8
Nur ein Wort der Vorsicht für alle, die versuchen, dies zu verwenden: Es funktioniert nur mit PDFs, die in Acrobat Version 4 und früher erstellt wurden. Nach Version 4 begann Adobe mit der Codierung von Dateien, was es schwieriger machte, Änderungen an PDFs vorzunehmen (oder in andere PDFs zu importieren).
Darryl Hein
4
PDF 1.4 Unterstützung wurde inzwischen hinzugefügt .
Raphael Schweikert
2
Funktioniert das jetzt ohne Zend?
William Entriken
Irgendeine Lösung, wenn ich Inhalte wie [Platzhalterzeichenfolge] ersetzen wollte?
Starx
41

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');
Metatron
quelle
1
Ausgezeichnete Bibliothek - war genau das, wonach ich
gesucht habe
1
Das ist gut, aber in einigen PDFs gibt es diesen Fehler. "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?
Sie müssen Ihr PDF in eine ältere Version (pdf 1.4) konvertieren oder die kommerzielle fpdi-Edition verwenden. Wir bieten einen Parser-Ersatz als separates kommerzielles Addon an, mit dem FPDI Dokumente verarbeiten kann, die diese Komprimierungsfunktionen verwenden. Quelle
SwissFr
Ist es möglich, SourceFile von einer anderen Webseite aus zu setzen? Beispiel: example.com/file.pdf?
Alex
19

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.

AdamTheHutt
quelle
9
-1 Da es die Frage nicht beantwortet. Das Poster möchte vorhandene PDFs bearbeiten, ohne sie von Grund auf neu zu erstellen.
Reimund
9
Ich bin auf diese Seite gekommen, weil ich ein PDF bearbeiten wollte, aber diese Antwort scheint mir nützlicher zu sein, weil ich sehen kann, warum es möglicherweise einfacher ist, in HTML von Grund auf neu zu erstellen, als ein vorhandenes PDF zu bearbeiten.
Justin Vincent
3

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.

Darryl Hein
quelle
3

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

Juan
quelle
2

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.

Ross
quelle
1

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.

josh.chavanne
quelle
0

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

Orion Edwards
quelle
-1
<?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);
?>
Nitin
quelle
8
Welche Bibliothek benutzt du?
Hugo Estrada
1
pdf_set_info($pdfFile, "Title", "PDFlib");
user183037
immer noch nicht klar, um welche Bibliothek es sich handelt
Deniz Celebi
Ich glaube, er meinte eingebaute PHP-PDFLIB-Erweiterung. php.net/manual/en/pdf.examples-basic.php
Kostiantyn