2009-03-08 8 views
2

Ich habe ein Ebook in Wort, das ich in PDF vor der Verteilung an meine Kunden konvertieren. Ich möchte ihre E-Mail-Adresse dynamisch in alle Links im E-Book einfügen, um ihnen den Zugriff auf die Inhalte nur für Mitglieder auf meiner Website zu ermöglichen, und ich möchte dies im Rahmen des Buchdownloads im Handumdrehen tun.Inhalt dynamisch in pdf-Dateien mit PHP

Ich habe mich kurz http://us.php.net/pdf und FPDF angesehen, aber ich fragte mich, welche spezielle Technik ich verwenden würde, um diese Daten einzufügen.

Ich dachte, ich würde eine E-Mail-Token-Zeichenfolge einfügen, wo ich die E-Mail-Adresse gehen soll, und dann eine Funktion verwenden, um diese Tokens im PDF-Dokument zu aktualisieren.

Kann mir jemand in die richtige Richtung zeigen? Ich habe PHP-Erfahrung, aber nicht mit Bearbeiten/Erstellen von PDF-Dokumenten von PHP.

EDIT: Ja, dieses kommerzielle Skript http://www.setasign.de/products/pdf-php-solutions/setapdf-linkreplacer/ tut genau das, was ich brauchte.

Antwort

-4

Wenn Sie die PDF-Vorlage mit dem E-Mail-Token in einer Datei auf dem Webserver gespeichert haben, können Sie dies relativ einfach tun. Zuerst müssen Sie die Datei mit PHP einlesen. Sie können dies mit der Methode file_get_contents tun. Verwenden Sie dann str_replace, um das E-Mail-Token durch die tatsächliche E-Mail zu ersetzen. Dienen Sie schließlich der Datei mit dem richtigen Inhaltstyp.

$pdf = file_get_contents('template.pdf'); 
$pdf = str_replace('__EMAIL__TEMPLATE__', $userEmail, $pdf); 
header('Content-type: application/pdf'); 
print $pdf; 

Doc Links: http://ca2.php.net/manual/en/function.file-get-contents.php http://ca2.php.net/manual/en/function.str-replace.php

(Ich habe nicht wirklich versucht, und Sie können in einige Probleme laufen, da PDF ein binäres Format ist, aber es sollte in der Theorie funktionieren ...)

+0

ja im nicht sicher, ob ich einen Fund tun kann und in einem PDF-Dokument ersetzen .. ich werde es aber versuchen.:) – Ian

+1

Das funktioniert nicht. PDF ist offensichtlich kein einfacher Text, aber im Gegensatz zu PostScript sind nicht einmal die Textteile einfacher Text. Was Sie tun könnten, ist ein PostScript oder anderer (DocBook?) "Quellcode" zu behalten und die Ersetzung oder dynamische Erzeugung von dieser mit ps2pdf, docbook2pdf, was auch immer zu tun. –

1

Sie können dies für FPDF mit FPDI Erweiterung tun http://www.setasign.de/products/pdf-php-solutions/fpdi/

es ermöglicht fpdf Dateien bestehende pDF zu importieren, obwohl ich nicht sicher bin, wie ein Link ersetzen s.

Ich würde sagen, Ihr bestes wäre, um die ganze Sache in PHP zu generieren, oder speichern Sie es einfach in HTML, ersetzen Sie Links in HTML, und konvertieren Sie HTML in PDF.

1

Ohne den Adobe LiveCycle Designer zu verwenden, besteht die einfachste Möglichkeit zum Generieren einer benutzerdefinierten PDF darin, eine FDF-Datei zu verwenden. Es gibt viele Möglichkeiten, dies zu tun. Eine davon ist das Herunterladen von Binärdateien von Adobe und die Installation auf Ihrem Server. Aber das ist wirklich nicht nötig. Alles, was Sie brauchen, ist ein PDF mit ausfüllbaren Formularen und einem einfachen Skript, das eine FDF-Datei erstellt. Das FDF enthält einfach die Daten, die ausgefüllt werden müssen, und einen Zeiger auf die PDF-Datei, die ausgefüllt werden muss. Ich verwende das für unsere Arbeitszeittabellen bei der Arbeit. Die Daten gehen in ein Webformular, müssen aber statisch und hässlich herauskommen und ein Papier von vor 30 Jahren verwenden. Hier ist, was Ihre fdf-Datei wie (beide mit Code und roh) aussehen:

$file = "http://www.example.com/blankpdfform.pdf"; 
$data = "%FDF-1.2\n%âãÏÓ\n1 0 obj\n<< \n/FDF << /Fields [ "; 
foreach($datafields as $field => $val) { 

     $data.='<< /T ('.$field.') /V ('.trim($val).')>> '; 
} 

$data.="] \n/F (".$file.") /ID [ <".md5(time()).">\n] >>". 
     " \n>> \nendobj\ntrailer\n". 
     "<<\n/Root 1 0 R \n\n>>\n%%EOF\n"; 

Das Endergebnis Wesen:

%FDF-1.2\n%âãÏÓ\n1 0 obj\n<< \n/FDF << /Fields [<< /T (email) /V ([email protected])>> 
/F ("http://www.example.com/blankpdfform.pdf") /ID [ <"SomeUniqueID"> 
] >> \nendobj\ntrailer<< 
/Root 1 0 R 
>> 
%%EOF