我正在使用CakePHP 2.4.1。我能够在没有插件的情况下使用dompdf生成PDF。因为我需要将它们保存在服务器上并通过电子邮件发送,我从https://github.com/ceeram/CakePdf下载了CakePdf。我按照所有说明操作,将此代码添加到app / Config / bootstrap.php:
CakePlugin::load('CakePdf', array('bootstrap' => true, 'routes' => true));
Configure::write('CakePdf', array(
'engine' => 'CakePdf.WkHtmlToPdf',
'options' => array(
'print-media-type' => false,
'outline' => true,
'dpi' => 96
),
'margin' => array(
'bottom' => 15,
'left' => 50,
'right' => 30,
'top' => 45
),
'orientation' => 'landscape',
'download' => true
));
在控制器中我添加了:
public $components = array('RequestHandler');
public function view($id = null) {
if (!$this->Project->exists($id)) {
throw new NotFoundException(__('Invalid project'));
}
$this->pdfConfig = array(
'orientation' => 'portrait',
'filename' => 'Project_' . $id.'pdf'
);
$this->set('project', $this->Project->read(null, $id));
}
我创建了新文件app / View / Projects / pdf / view.ctp:
<h2 id="titel">
<span><?php echo h($project['Project']['name']);?></span>
</h2>
<table id="container" width="100%" border="0">
<tr>
<td>
<table id="table" width="100%" border="0">
<tr>
<td><p>Gebäude: </p><hr></td><td> </td>
<td><p>Eigentümer: </p><hr></td><td> </td>
<td><p>Kontaktperson: </p><hr></td>
</tr>
<tr>
<!-- GebaeudeDaten -->
<td><p>
<?php echo h($project['Town']['gdenamk']); ?>
<br><?php echo h($project['Building'][0]['type_id']);?>
<br><?php echo h($project['Building'][0]['address']);?>
<br><?php echo h($project['Building'][0]['plz']);?> <?php echo h($project['Building'][0]['ort']);?>
</p></td><td> </td>
<!-- EigentuemerDaten -->
<td><p>
<?php echo h($project['Eigentuemer']['Title']['name']);?>
<br><?php echo h($project['Eigentuemer']['vorname']);?> <?php echo h($project['Eigentuemer']['name']);?>
<br><?php echo h($project['Eigentuemer']['firma']);?>
<br><?php echo h($project['Eigentuemer']['adresse']);?>
<br><?php echo h($project['Eigentuemer']['plz']);?> <?php echo h($project['Eigentuemer']['ort']);?>
</p></td><td> </td>
<!-- KontaktDaten -->
<td><p>
<?php echo h($project['Contact']['Title']['name']);?>
<br><?php echo h($project['Contact']['vorname']);?> <?php echo h($project['Contact']['name']);?>
<br><?php echo h($project['Contact']['firma']);?>
<br><?php echo h($project['Contact']['adresse']);?>
<br><?php echo h($project['Contact']['plz']);?> <?php echo h($project['Contact']['ort']);?>
</p></td>
</tr>
<tr>
<td colspan="3"><p><?php echo h($project['Task'][0]['Subject']['name']); ?> <hr></td><td> </td>
<td><p>ausführender Installateur: </p><hr></td>
</tr>
<tr>
<!-- Daten zum Gegenstand // 3- Zweispaltig -->
<td colspan="3" align="right">
<table width="355" border="0">
<tr><td><p class="right">Datum der Installation:</p></td><td><p><?php echo h($project['Task'][0]['datAusgefuehrt']); ?></p></td></tr>
</table>
</td><td> </td>
<!-- Installateur -->
<td><p>
<?php echo h($project['Task'][0]['Contact']['Title']['name']);?>
<br><?php echo h($project['Task'][0]['Contact']['vorname']);?> <?php echo h($project['Task'][0]['Contact']['name']);?>
<br><?php echo h($project['Task'][0]['Contact']['firma']);?>
<br><?php echo h($project['Task'][0]['Contact']['adresse']);?>
<br><?php echo h($project['Task'][0]['Contact']['plz']);?> <?php echo h($project['Task'][0]['Contact']['ort']);?>
</p></td>
</tr>
</table>
</td>
</tr>
</table>
和app / View / Layouts / pdf / default.ctp:
<?php echo $this->fetch('content'); ?>
我没有收到任何错误消息,但浏览器没有显示任何pdf,只有一些代码,如:
%PDF-1.3 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R /Names <> >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [6 0 R ] /Count 1 /Resources << /ProcSet 4 0 R /Font << /F1 8 0 R /F2 9 0 R >> >> /MediaBox [0.000 0.000 612.000 792.000] >> endobj 4 0 obj [/PDF /Text ] endobj 5 0 obj << /Creator (DOMPDF) /CreationDate (D:20140107065614+00'00') /ModDate (D:20140107065614+00'00') >> endobj 6 0 obj << /Type /Page /Parent 3 0 R /Contents 7 0 R >> endobj 7 0 obj << /Filter /FlateDecode /Length 2532 >> stream x����s7���W�1�IV���Cnz���:��'�\�NF�/�䓥���\ �h�k=�^�K��K�y&;)�h�>>���0��ʋ�]�L�Wb�O%T줸����_>�߮�ۻ�k��f��}7�b���as%��A���W���ú�^|����I��l�K�9gN�_�w0�h:a�*6�����n�;^4�!£9��#~؈o��n�\����qy/~Y��]՝r��.4�l���r�Y\��}���z�B�%�;%����;%@t1�h:�B5ܗE�X=sn׃"+@�>϶�}TU��]��q�y-�lК#릋V��M�[ߪ��uR(x��x��s�u9�����:�-g��C����q6e��S�pu�+�v����~��"���i�Mɟ�:?\\,.և��c_/?�W���4���?�&�܂�h��Owb B�����P�!�O�w!����g�$��&�N��Y�_Ol5$��E�ML�T�X);�턕oB~��&�j�br 4�8��A��#Xyb�W�?�����������w�M���`:�|Sg�e�h"�@v������Ir}t�]]r��䬰^�Y�yZ��D��J<���X/(��T����<�����ٺ��T�[AvI��N�o����Ed�y�"�ٔ�N���k�e�k�� �$a];d�n�5�\p]]��o~3�H�)p��Q��k�ڸ�o�}�=����hb��u ����M�Rg�iqM��q��N�i@�*68E�qт=ڒ(V�h74�� _�#�:�B�U�뤈� �8����@�Dhc�( �����Ŋ�c�43S�c�hu�+�v��98X_���s�Y��� ��~�E}}ӭ�H���A�������g%k&9�{�|�Ñ�G�}���o�J��~w��8�P5K�� ~Fh���-C����4��;�|C*C�HN2C>���!��!�]L�q�W�H����oU��:)�j(�e6�\���!QI7�BK�y ���"V�h�"�ٔ�N���)���q��0���O��_>@����~���9�x=kX1��+�L����;��0�ƭ�lV��U?�4�!�@�4ɍ�u[�A�Й�5Y����9���dY��dYL��+74�;�f�ή�q�����Fbq�r �&sp�����oj2g�lo�&�bh|G�rC�9���T�9Z�fZ%$~76=�������w� jfq3����|��}��r}Xb��-��Ĉ#���#Nbd�ߵ�@����@�^�f1�������㭈bň�q#�l���:�@�#&�����(d/�s���uHT� F~'��h[ߋX1�q�gSf�:eW���ʉ����1`�TE=����l��N6 F���Ѩ�O�h� b��7W��!�����$=:���� ����4!k�bHm?AC�k?D+kM�b���q��l���:�Z� ߪhd�O�P��OQ��O�����@aM�'�N_�{+=4N��l�[����W��8�s�Qpʐ���Izl�gӣmi[zP3��Q�DϨ�BO��T~�;�$�8J�9���E9��̯��^h����:ek�"|.�@�t�%(�)W�q+J4���f�f��ZQ!ߪ(]�K�ബ�����K�����d��j/���Ŋ�S�8�2��)s�:�};N������X/�Akn` .����TI�i;� �f�tk��s}^k.urxNcVZ��=���"�|�/Gv)����Sx,�)�l����`S�pO!�1q�l��tlz Y�����$2K<^v3�.���^h��+���yf)+�垂M�RU��%PMO�&��4���[ߋ�,�8E��)3l�2���Lkă��`�&9l̩����f�ۮ����l�N����Ki�/��f�4Lx���`���|k������b|<�I�| l�k��I�kȢ7\Qۨ�אVq�!��r�Nb��qG�l���:A�#/���|�)�?r�!��r�!��5�r ƽ�,��w+O4���l�L�����)���q���<�'�{ o���?n���է&���0�>��1��"k&a�{��u������� �mR\^�vx���5I��߁�Ր5�p��zߙ�uChZ 6����h"��$V�h�1��}^�#�:RB�UQǦ�`��í�,���u3<�J(��VCU�{+E4N��l�[����W��8�s(�M�&)���\����R��Y�:�$�F��`_�z��s����b��o���W�^�����������Eǝ�@a�~j�n��/�>Y�K��m7����U/�N�\���Ys�&�Ԗn�z�K�,F���E�kJ���K�,����lG�h6�W�#��:�K��X��`��gC.ݬɏ)T뙥�t�&f�tˢo}/b��)r�M�a�9\�fZk#$~���t������n���<��Ь��X#��jM�a&Z�L����y;�f�-��Yii���wϏНU]�B�>�:�!���T endstream endobj 8 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Times-Bold /Encoding /WinAnsiEncoding >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Times-Roman /Encoding /WinAnsiEncoding >> endobj 10 0 obj << /Names [(EmbeddedJS) 11 0 R] >> endobj 11 0 obj << /S /JavaScript /JS ( function traceToggle\(event, id\) { var el = document.getElementById\(id\); el.style.display = \(el.style.display === 'block'\) ? 'none' : 'block'; event.preventDefault\(\); return false; } ) >> endobj xref 0 12 0000000000 65535 f 0000000008 00000 n 0000000103 00000 n 0000000149 00000 n 0000000313 00000 n 0000000342 00000 n 0000000456 00000 n 0000000519 00000 n 0000003124 00000 n 0000003232 00000 n 0000003341 00000 n 0000003393 00000 n trailer << /Size 12 /Root 1 0 R /Info 5 0 R >> startxref 3633 %%EOF
出了什么问题?任何提示都非常感谢。非常感谢。
答案 0 :(得分:4)
您看到的是PDF文件的正确内容,但浏览器将其显示为HTML文件,因为没有内容类型的指示。
因此,简而言之,为了解决这个问题,您需要将HTTP标头Content-Type发送到浏览器,表明这是一个PDF文件:
在$this->pdfConfig = [...]
之前添加一行:
header("Content-type: application/pdf");
根据浏览器的设置,它将以内联方式显示PDF。
您还可以使用HTTP标头Content-Disposition向浏览器建议实际上要下载该文件,如下所示:
header("Content-disposition: attachment; filename=\"Project_" . $id. "pdf\"");
答案 1 :(得分:0)
谢谢大家!
我的代码出错了 - 抱歉。采用了错误的布局文件。在再次检查所有视图和布局文件后,我得到了带有DomPdf的brwoser中显示的pdf。 Mpdf和Tcpdf提供了很长的通知和警告列表,以及与问题中发布的代码类似的一些代码,但不是有效的pdf。 WkHtmlToPdf仍然错过了一些库。