Klaus 1: Wie kann ich Binary Daten aus SAP mit PHP zu einer PDF Datei konvertieren?

Beitrag lesen

Hallo Felix,

meinst Du eine Datenbank-Tabelle?

Nein, es ist eine Tabellen-Struktur, die von SAP-Funktionsbaustein zurückgegeben wird.

In der Tabelle liegt die PDF-Datei augesplittet alle 1022 Zeichen.

Das bedeutet, dass zuallererst alle Zeichen zusammengesetzt werden müssen, ehe man etwas anderes damit tut.

Ich hatte zuerst auch den zusammengesetzten String mit hex2bin() umgewandelt, aber nachdem es nicht funktioniert hat, dann auf jede einzelne Zeile übergegangen. Da SAP die Daten auch nicht komplett in einen String gepackt hat, sondern in (in meinem Fall) 60 Zeilen aufgeteilt hat.

$rows = saprfc_table_rows ($fce,"CONTENT_BIN");

Was leistet die Funktion/Methode saprfc_table_rows? Allem Anschein nach liefert sie eine Ganzzahl, welche die Anzahl der Teildaten ermittelt.

Richtig, es liefert die Anzahl der zurückgegebenen Zeilen.

Frage: Kannst Du beweisen, dass $row auch wirklich die richtige Zahl liefert?

Hmm, beweisen nicht, aber das ist das, was auch im SAP angezeigt wird, wenn ich den Funktionsbaustein im SAP (Transaktion SE37) aufrufe.

$pdfData = "";
for ($i=1;$i<=$rows;$i++) {
	$aline = saprfc_table_read ($fce,"CONTENT_BIN",$i);
	$pdfData .= hex2bin($aline["LINE"]);
}

Wenn $row die richtige Anzahl liefert, muss hier der Hase im Pfeffer liegen.

  1. Sind die benötigten Tabellen-Zeilen wirklich der Reihe nach in der Tabelle abgelegt? Also: Bekommst Du mit saprfc_table_read wirklich nur die betroffenen Zeilen, und sind diese fortlaufend nummeriert, dass $i keine fremden Zeilen einliest (und dafür andere auslässt)?

Wenn ich die Quelltexte der beiden PDF-Dateien (manuell aus SAP und über den Funktionsbaustein gespeichert) vergleiche, dann sieht die Reihenfolge nicht vertauscht aus. Aber es fehlen Daten (oder sind anders kodiert?). DIe Größe hat sich nahezu halbiert (60.646 bytes zu 30.660).

  1. Warum sammelst Du nicht die PDF-Daten zuerst vollständig in einer Variable, ehe Du hex2bin darauf anwendest?

In jeder Zeile sind genau 1022 Zeichen. Daher sollte es theorteisch kein Problem gegeben haben. Praktisch auch nicht. Beide Dateien (hex2bin je Zeile oder mit gesamten String) sind identisch.

LG Klaus