2017-03-12 3 views
0

brechen kodiert ich ein pdf von html erschaffe mit php wkhtmltopdfWie pdf mit PHP wkhtmltopdf erstellt bekommen mit schlanken 3 zum Download ohne

Wenn ich die Datei direkt auf meinen Server zu speichern, funktioniert die pdf

$pdf->saveAs('/path/to/mypdf.pdf'); 

Wenn ich es zuerst in eine Zeichenkette umwandle und sie dann mit php in die Datei speichere, funktioniert die PDF-Datei immer noch.

$content = $pdf->toString(); 
$file = '/path/to/mypdf.pdf'; 
file_put_contents($file, $content); 

Aber egal, welche Header ich zu schließen versucht haben, die Datei heruntergeladen pdf-Datei funktioniert nicht, und wenn ich es kontrollieren, ist es voll von Symbolen (die soweit ich weiß, von in der Regel kommt falsche Codierung)

ich habe jede Header-Konfiguration versucht ich mir vorstellen kann, und ich immer noch das gleiche Ergebnis:

Hier sind ein paar meiner Versuche:

$response = $response->withHeader('Content-type', 'application/pdf'); 
$content = $pdf->toString(); 
$response->write($content); 

und

$response = $response->withHeader('Content-Type', 'application/pdf'); 
$response = $response->withHeader('Pragma', "public"); 
$response = $response->withHeader('Content-disposition', 'attachment; filename=test.pdf'); 
$response = $response->withHeader('Content-Transfer-Encoding', 'binary'); 
$response = $response->withHeader('Content-Length', strlen($content)); 
$response = $response->write($content); 
return $response; 

Hier ist ein Beispiel von Inhalten aus den PDF-Dateien vor und nach dem Download:

vor dem Download:

%PDF-1.4 
1 0 obj 
<< 
/Title (˛ˇMyPDF Test type1) 
/Creator (˛ˇwkhtmltopdf 0.12.3) 
/Producer (˛ˇQt 4.8.7) 
/CreationDate (D:20170312220641+02'00') 
>> 
endobj 
3 0 obj 
<< 
/Type /ExtGState 
/SA true 
/SM 0.02 
/ca 1.0 
/CA 1.0 
/AIS false 
/SMask /None>> 
endobj 
4 0 obj 
[/Pattern /DeviceRGB] 
endobj 
7 0 obj 
<< 
/Type /XObject 
/Subtype /Image 
/Width 301 
/Height 181 
/BitsPerComponent 8 
/ColorSpace /DeviceGray 
/Length 8 0 R 
/Filter /FlateDecode 
>> 
stream 
xúÌ][email protected]fl£É†R,®à 
å 
[DçöœäΩ˜D£±ã[å∆ª£bÕg"v 
®{/ÿQ∞+E§fi|ª;≥w{ª≥ºF>˘˝°∑;˝«ÓÏõ˜fiº!,|ÇÍU∂!§·P¡ªÇgÖåú$,}ªœ€uÒ—ÎåÔ/Ôûfl∑í£ïºí•ÇÇ]%õ)·)’á*}~=r˜mFF∆ãQ·≠‹Kà’V=®Æµk÷®^›fløJï ï¸|+VÙˆ™‡QäPt)$"Ã$a˝ï1©ëdFn_ÕøA◊´ÜÚˆ‚&n2äñ9FÂæ]M"õÂ&∫7 
3îìØ—ÅîΩ}*˝ΩkÄ4Nªÿ¨£ƒ9Ké"(ôŒπL2#·3‰:æπ+c|$◊áYJd´Ùê˛¸"ê\z¿CL˚o‘≤ƒf∑;#É,–ÿv3˝ˇ©2í£h¯úÓfiJ©|«>n/i™]2…™˙Ä U∏üÍ∑W†˝¸≈˛∏¸•œ ‡JŸ“.J.Y 
YøäÁ≤ 
ª-fi‰ù‚Û£vd-∆&÷{ ‹˛ãŒòŒÁeêZñÿ≠W≤*˝ÆYJÚ£áI)ö˜¢™ã’†≤ü©⁄zÛ‘—cßn`5ˇ‹Ö_¬ı¢Ær˝K¸©O≤Bo©ÎV^Ÿ1(¥A`@˝–Å≥7_»Sß<j-RÖÓdπ›Ảò‹ õ|ém|€GD´¯zTñ_§‹e:)a√˙ 
ÇX€S·pPèd 
»PÚ`EXvRŸNKÆ©sF 

nach dem Download:

PDF-1.4 

1 0 obj 
<< 
/Title (���M�y�P�D�F� �T�e�s�t� �t�y�p�e�1) 
/Creator (���w�k�h�t�m�l�t�o�p�d�f� �0�.�1�2�.�3) 
/Producer (���Q�t� �4�.�8�.�7) 
/CreationDate (D:20170312222109+02'00') 
>> 
endobj 
3 0 obj 
<< 
/Type /ExtGState 
/SA true 
/SM 0.02 
/ca 1.0 
/CA 1.0 
/AIS false 
/SMask /None>> 
endobj 
4 0 obj 
[/Pattern /DeviceRGB] 
endobj 
7 0 obj 
<< 
/Type /XObject 
/Subtype /Image 
/Width 301 
/Height 181 
/BitsPerComponent 8 
/ColorSpace /DeviceGray 
/Length 8 0 R 
/Filter /FlateDecode 
>> 
stream 
x��][email protected]ߣ��R,�� 
� 
[D��ϊ��D���[����b�g"v 
�{/�Q�+E��|�;�w{���F>����;�����޼!,|��U�!��P���g���$,}���u����/ 

�߷��������]%�)�)��*}~=r�mFFƋQ��K��V=���k� 
n2��9F�]M"��&�7 
3���с��}*��k�4N�ج��9K�"(�ιL2#�3�:��+c|$ׇYJd�����"�\z�CL�oԲ�f�;#�,��v3���2��h����J�|�>n/i�]2ɪ���U���W�����������J��.J.Y 
Y��� 
�-����vd-�&�{ ���Θ��e�Z�حW�*��YJ�I)�����ՠ����z���c�n`5�܅_����r�K��O�Bo��V^�1(�A`@�Ё�7_�S�<j-R��d��A����ʛ|�m|�GD��zT�_��e:)a�� 
+0

Welches Betriebssystem und Browser? Für mich unter Windows 10 (Chrome/Firefox) funktioniert Ihr Code. Btw du hast eine '' 'nach' Content-disposition', die entfernt werden sollte – jmattheis

+0

@jmatheis Ich bin auf OSX-Tests hauptsächlich auf Chrome/Firefox im Moment. Danke für das nicht extra: Ich habe es entfernt. – Finglish

Antwort

1

Eine Sache Mir ist aufgefallen, dass Ihr PDF nicht den empfohlenen Binärkommentar unter der Kopfzeile hat.

Aus der PDF-Referenz:

Hinweis: Wenn eine PDF-Datei binäre Daten enthält, wie die meisten (Abschnitt 3.1, „lexikalischen Konventionen“ sehen), ist es empfehlenswert, dass die Leitung sofort Header sein gefolgt von einer Kommentarzeile, die mindestens vier Binärzeichen enthält, dh Zeichen, deren Codes 128 oder größer sind. Dies stellt das ordnungsgemäße Verhalten von Dateiübertragungsanwendungen sicher, die Daten nahe dem Anfang einer Datei prüfen, um festzustellen, ob der Inhalt der Datei als Text oder als Binärdatei behandelt werden soll.

z.

%PDF-1.4 
%���� 

, die in Knoten als %\xFF\xFF\xFF\xFF geschrieben, ich bin nicht sicher, was das Äquivalent in PHP wäre.

Ich sehe keine Optionen in phpwkhtmltopdf oder wkhtmltopdf, die direkt damit zu tun scheinen, aber es gab 'encoding' => 'UTF-8' als eine Option für den Shell-Befehl.

Ich würde empfehlen, die Optionen in diesem Bereich zu erkunden, da es scheint, dass etwas zwischen dem Server und Sie den Unicode in der Datei korrumpiert.