pdf-Datei mit php bearbeiten

Hallo,

ich habe eine unkomprimierte PDF-Datei, die ich mittels php binär
lade, bearbeite und dann wieder speichere. Das klappt soweit alles
wunderbar.

Ich gehe dabei wie folgt vor:

1. $pdf_inhalt =3D file_get_contents($pdf_import_dir.$pdf_import_file);
2. $pdf_inhalt =3D preg_replace("/##VNR##/", $ersetzungsstring,
$pdf_inhalt);
3. file_put_contents($pdf_import_dir."output/".$ersetzungsstrin g."_".
$pdf_import_file, $pdf_inhalt);

Im neuen PDF steht statt ##VNR## nun $ersetzungsstring. Die Buchstaben
C, H, J, K, L, O, Q, X, Y, j, q und x sowie die Ziffern 8 und 9 werden
aber im neuen Dokument an dieser Stelle nicht angezeigt.

D.h. $pdf_inhalt =3D preg_replace("/##VNR##/", "ABC789", $pdf_inhalt)
führt nicht dazu, dass "ABC789" ausgegeben, sondern lediglich
"AB7"wird angezeigt. Dieses betrifft nur die Passage, die ich mittels
2.) bearbeitet habe. Im übrigen Text werden bereits vorhandene "C",
"H" etc. ausgegeben.

Das eigentliche Ersetzen scheint aber korrekt zu sein. Wenn ich mir
die entsprechenden Passagen (in php während obiger der Bearbeitung)
ausgeben lasse, so sieht der Originaltext in der PDF-Datei wie folgt
aus:

[...] Tm [(Anmelde-Nr)92(. ##VNR##)]TJ [...]

In der neuen Datei steht:

[...] Tm [(Anmelde-Nr)92(. ABC789)]TJ [...]

Ausgegeben wird in der pdf-Datei aber nur "AB7".


Zuvor hatte ich schon probiert, mit fpdf bzw. FPDI die PDF-Datei zu
laden und mit ereg_replace bzw. preg_replace zu bearbeiten. Klappte
auch wunderbar, nur das Ergebnis war das gleiche wie oben. Bestimmte
Buchstaben werden in der erstellten pdf-Datei (in der bearbeiteten
Passage) nicht ausgegeben.


Hat jemand eine Erklärung für dieses Problem ?


Gruß
PCM
NoSpamCatcher2 [ Do, 10 Januar 2008 15:04 ] [ ID #1904816 ]

Re: pdf-Datei mit php bearbeiten

MurphiesBruder schrieb:

> Das eigentliche Ersetzen scheint aber korrekt zu sein. Wenn ich mir
> die entsprechenden Passagen (in php während obiger der Bearbeitung)
> ausgeben lasse, so sieht der Originaltext in der PDF-Datei wie folgt
> aus:
>
> [...] Tm [(Anmelde-Nr)92(. ##VNR##)]TJ [...]
>
> In der neuen Datei steht:
>
> [...] Tm [(Anmelde-Nr)92(. ABC789)]TJ [...]
>
> Ausgegeben wird in der pdf-Datei aber nur "AB7".

Ja die ersetzung ist korrekt. Das Problem hat nix mit PHP zu tun. Du
must Dich kundig machen was, wie formatiert innerhalb des PDFs genutzt
werden darf. Also PDF-Spec durchlesen.

MfG, Ulf
Ulf Kadner [ Do, 10 Januar 2008 15:31 ] [ ID #1904819 ]

Re: pdf-Datei mit php bearbeiten

MurphiesBruder schrieb:

> 2. $pdf_inhalt = preg_replace("/##VNR##/", $ersetzungsstring,
> $pdf_inhalt);

$pdf_inhalt = str_replace('##VNR##', $ersetzungsstring, $pdf_inhalt);

preg_replace ist nicht nötig da ja kein Regex notwendig ist.

MfG, Ulf
Ulf Kadner [ Do, 10 Januar 2008 15:36 ] [ ID #1904820 ]

Re: pdf-Datei mit php bearbeiten

On 10 Jan., 15:36, Ulf Kadner <dr_lo... [at] gmx.net> wrote:

> preg_replace ist nicht nötig da ja kein Regex notwendig ist.

Da hast Du recht. ereg_replace führt aber zu dem gleichen Problem. ;-)

PCM
NoSpamCatcher2 [ Do, 10 Januar 2008 15:54 ] [ ID #1904822 ]

Re: pdf-Datei mit php bearbeiten

MurphiesBruder schrieb:
> Da hast Du recht. ereg_replace führt aber zu dem gleichen Problem. ;-)

Das sollst ja aus dem gleichen Grund nicht benutzen... Warum willst du
auch Funktionen für reguläre Ausdrücke benutzen, wenn du keine
benötigst? Nimm daher die angesprochene Funktion für einfache
Textersetzung "str_replace()".

Eine Lösung für dein Problem wurde schon im anderen Beitrag genannt. Ich
halte es allerdings für unsinnig über Textersetzungen auf ein solches
Datenformat zuzugreifen, wenn man keine detaillierten Kenntnisse über
das Format besitzt. Zumal die PDF Spezifikation recht umfangreich ist.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/
Christoph Herrmann [ Do, 10 Januar 2008 16:01 ] [ ID #1904824 ]

Re: pdf-Datei mit php bearbeiten

MurphiesBruder schrieb:
> On 10 Jan., 15:36, Ulf Kadner <dr_lo... [at] gmx.net> wrote:
>
>> preg_replace ist nicht nötig da ja kein Regex notwendig ist.
>
> Da hast Du recht. ereg_replace führt aber zu dem gleichen Problem. ;-)

Wer lesen kann ist hier klar im Vorteil. :-)
Machs so wie ich Dir vorschlug. (str_replace()) Es führt ebenfalls zum
gleichen (RICHTIGEN) Ergebnis das halt nur von der Software die das PDF
anzeigt nicht als das verstanden wird was Du Dir darunter vorstellst.

Wie ich Dir bereits sagte must Du Dir die PDF-Spezifikation durchlesen
um zu erfahren ob Du die einzubettende Zeichenkette in irgend einer Form
maskieren must. Das hat aber halt garnix mit PHP zu tun.

Ansonsten noch ne Anmerkung. Du bewegst Dich im Deutschen Usenet. Hier
gelten Fantasienamen als unbeliebt. Bei vielen landest Du mit Deinem
Namen gleich im Filter und Deine Frage bleibt unbemerkt. Man weis gerne
mit wem man sich gerade unterhält.

Und jetzt fang nicht an zu erzählen das es Dir lieber wäre unerkannt zu
bleiben. Nen bischen Fantasie vorausgesetzt umgehst Du das Problem.

MfG, Ulf
Ulf Kadner [ Do, 10 Januar 2008 16:39 ] [ ID #1904830 ]

Re: pdf-Datei mit php bearbeiten

Okay, ich hatte Ulf falsch verstanden und meine, er würde auf
"ereg_replace" (statt preg_replace) anspielen.
Da ich die str_replace-Zeile schlichtweg überlesen hatte ... :-(

Ich habe es nun mit str_replace probiert. Gleiches Problem ... ;-)

Gruß

PCM
NoSpamCatcher2 [ Do, 10 Januar 2008 16:46 ] [ ID #1904834 ]

Re: pdf-Datei mit php bearbeiten

MurphiesBruder schrieb:
> Okay, ich hatte Ulf falsch verstanden und meine, er würde auf
> "ereg_replace" (statt preg_replace) anspielen.

Wenn man reguläre Ausdrücke benötigt, sollte man immer "preg_replace()"
vorziehen. Zumindest liest man das hier in der Newsgroup immer, wüsste
jetzt nur gerade selbst nicht warum. :)

> Da ich die str_replace-Zeile schlichtweg überlesen hatte ... :-(

Da du kein regulärer Ausdruck verwendest ist eine Methode, die darauf
ausgelegt ist schlciht weg fehl am Platz, daher das "str_replace()",
welches aber in deinem Falle das selbe leistet, aber semantisch korrekt
ist im Gegensatz zur "preg_replace()" Methode.

> Ich habe es nun mit str_replace probiert. Gleiches Problem ... ;-)

und was verwundert dich daran? Natürlich hast noch das gleiche Problem,
aber dein Skript funktioniert ja einwandfrei (mit beiden Funktionen).

Also ist dein Problem ja in soweit hier gelöst, dass weiterführende
Informationen hast mit denen das richtig machen kannst.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/
Christoph Herrmann [ Do, 10 Januar 2008 18:09 ] [ ID #1904839 ]

Re: pdf-Datei mit php bearbeiten

Am 10. Januar 2008 schrieb Christoph Herrmann:

> MurphiesBruder schrieb:
>> Okay, ich hatte Ulf falsch verstanden und meine, er würde auf
>> "ereg_replace" (statt preg_replace) anspielen.
>
> Wenn man reguläre Ausdrücke benötigt, sollte man immer "preg_replace()"
> vorziehen. Zumindest liest man das hier in der Newsgroup immer, wüsste
> jetzt nur gerade selbst nicht warum. :)

Man könnte ins Handbuch schauen und dort folgenden Hinweis finden:
| preg_replace(), which uses a Perl-compatible regular expression
| syntax, is often a faster alternative to ereg_replace().

Oder man könnte in die FAQ schauen:
| 8.2. Soll ich ereg() oder preg() verwenden?
| http://www.php-faq.de/q/q-regexp-ereg.html

Aber das wäre vermutlich zu einfach.

Gruß
Mark

--
Carsten Ramelow: "Gerade zu Hause liegt unsere Heimstärke."
Mark Wiesemann [ Do, 10 Januar 2008 18:27 ] [ ID #1904840 ]

Re: pdf-Datei mit php bearbeiten

Mark Wiesemann schrieb:
> Aber das wäre vermutlich zu einfach.

stimmt, das wäre zu einfach. Aber da ich die Sachen nur sehr selten
verwende würde ich es erst nachschauen, wenn ich diese brauche. ;)

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/
Christoph Herrmann [ Do, 10 Januar 2008 18:38 ] [ ID #1904841 ]

Re: pdf-Datei mit php bearbeiten

Hallo,

des Rätsels Lösung:
In der PDF-Datei ist die Schrift eingebettet. Somit erscheinen in der
bearbeiteten Passage nur Buchstaben und Zahlen, die irgendwo schon mal
verwendet werden ...
Einzelne Buchstaben oder Ziffern in der ausgetauschten Passagen kommen
zwar auch an anderen Textstellen vor. Sie wurden aber in der
ausgetauschten Passage nicht angezeigt, da die Zeichen hier gefettet
und im restlichen Text normal angezeigt werden. Eine "fette 8" ist
also etwas anderes als eine "normale 8".

Behelfen kann ich mich, indem ich an einer nicht benötigten Stelle
alle für den Austausch in Frage kommenden Buchstaben und Ziffern (in
weißer Schrift) ausgebe.
Ist zwar "suboptimal", aber in diesem Fall reicht es.


Gruß

PCM
NoSpamCatcher2 [ Fr, 11 Januar 2008 12:12 ] [ ID #1905601 ]
PHP » de.comp.lang.php.misc » pdf-Datei mit php bearbeiten

Vorheriges Thema: SoapServer mit wsdl Datei
Nächstes Thema: Wurzelverzeichnis dynamisch setzen