使用 TCPDF 保存 PDF 文件
Issue saving PDF file using TCPDF
我想通过单击按钮将一些 html 保存到 pdf
文件。问题是我在 ajax
调用后遇到了问题:
%PDF-1.7 %���� 8 0 obj << /Type /Page /Parent 1 0 R /LastModified
(D:20190328213806+02'00') /Resources 2 0 R /MediaBox [0.000000
0.000000 595.276000 841.890000] /CropBox [0.000000 0.000000 595.276000 841.890000] /BleedBox [0.000000 0.000000 595.276000 841.890000] /TrimBox [0.000000 0.000000 595.276000 841.890000] /ArtBox [0.000000
0.000000 595.276000 841.890000] /Contents 9 0 R /Rotate 0 /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Annots [ 6 0 R 7 0 R
] /PZ 1 >> endobj 9 0 obj <> stream x��ۏ�q���
|�`ɐVU}���e).e�rI66�$^$�d3�
�������]EYb�"I��g?ΙKwU���|�gy�s|r��o�߿������G���vqy|�]��H�������ȄQ��F�D�S��F���@�.��'�}���e�8
�B�@����UH��@M�MC�g���P8���g[t���?P�#E���=��@�P��g�
KysL�m�.�0qC�{�[�}Tlg�kY�?���������3�K��9��g�%Mq��=����
0vw��G�}����Obڃ�l�/��WC��|����?��O���y��u;�ݽ����L
�_���qŁ�JG�ׇ��~���a?K�^���g��--�,�L3����?-�Z�e��W!1�D���a�I#���s?
我在这里发现了类似的问题 - Tcpdf on Laravel 3 controller
但是我不知道Response::make
是什么?任何想法如何解决它?谢谢。
代码:
jQuery/Ajax
$(document).on("click", "#testButtonClick", function() {
savePDF($("#test").html(), "Test1", "Test2");
});
function savePDF(info, name, data) {
$.ajax({
type: "post",
url: "includes/worker",
data: {"test": info, "name": name, "data": data},
xhr: function() {
try {
if (window.ActiveXObject) {
return new window.ActiveXObject("Microsoft.XMLHTTP");
}
} catch(e) { }
return new window.XMLHttpRequest();
},
success: function(result) {
console.log(result);
},
error: function(response) {
}
});
}
PHP
require_once("tcpdf.php");
$pdfData = new TCPDF('P', PDF_UNIT, PDF_PAGE_FORMAT, true, "UTF-8", false); //
$pdfData->SetCreator("Test..");
$pdfData->SetTitle("Test..");
$pdfData->SetHeaderData("", "", PDF_HEADER_TITLE, PDF_HEADER_STRING);
$pdfData->setHeaderFont(Array(PDF_FONT_NAME_MAIN, "", PDF_FONT_SIZE_MAIN));
$pdfData->setFooterFont(Array(PDF_FONT_NAME_DATA, "", PDF_FONT_SIZE_DATA));
$pdfData->SetFooterMargin(PDF_MARGIN_FOOTER);
$pdfData->SetMargins(PDF_MARGIN_LEFT, "5", PDF_MARGIN_RIGHT);
$pdfData->setPrintHeader(false);
$pdfData->setPrintFooter(false);
$pdfData->SetAutoPageBreak(true, 10);
$pdfData->setFontSubsetting(true);
$pdfData->AddPage();
$pdfData->SetFont("freeserif", "", 10);
$pdfData->writeHTML(iconv("Windows-1251", "UTF-8", "Это тест...."));
$pdfData->Output("Test.pdf", "D");
所以,我已经通过使用自动格式 JS
和转义字符 "
.
来修复它
代码:
var pdfForm = $("<form action=\"includes/worker\" method=\"post\" enctype=\"multipart/form-data\" target=\"_blank\"></form>");
pdfForm.append("<input type=\"hidden\" name=\"test\" value=\"" + htmlValidation($("#test").html()) + "\">");
pdfForm.append("<input type=\"hidden\" name=\"name\" value=\"Test1\">");
pdfForm.append("<input type=\"hidden\" name=\"data\" value=\"Test2\">");
$("body").append(pdfForm);
$(pdfForm).submit();
function htmlValidation(data) {
return data
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
我想通过单击按钮将一些 html 保存到 pdf
文件。问题是我在 ajax
调用后遇到了问题:
%PDF-1.7 %���� 8 0 obj << /Type /Page /Parent 1 0 R /LastModified (D:20190328213806+02'00') /Resources 2 0 R /MediaBox [0.000000 0.000000 595.276000 841.890000] /CropBox [0.000000 0.000000 595.276000 841.890000] /BleedBox [0.000000 0.000000 595.276000 841.890000] /TrimBox [0.000000 0.000000 595.276000 841.890000] /ArtBox [0.000000 0.000000 595.276000 841.890000] /Contents 9 0 R /Rotate 0 /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Annots [ 6 0 R 7 0 R ] /PZ 1 >> endobj 9 0 obj <> stream x��ۏ�q��� |�`ɐVU}���e).e�rI66�$^$�d3� �������]EYb�"I��g?ΙKwU���|�gy�s|r��o�߿������G���vqy|�]��H�������ȄQ��F�D�S��F���@�.��'�}���e�8 �B�@����UH��@M�MC�g���P8���g[t���?P�#E���=��@�P��g� KysL�m�.�0qC�{�[�}Tlg�kY�?���������3�K��9��g�%Mq��=���� 0vw��G�}����Obڃ�l�/��WC��|����?��O���y��u;�ݽ����L �_���qŁ�JG�ׇ��~���a?K�^���g��--�,�L3����?-�Z�e��W!1�D���a�I#���s?
我在这里发现了类似的问题 - Tcpdf on Laravel 3 controller
但是我不知道Response::make
是什么?任何想法如何解决它?谢谢。
代码:
jQuery/Ajax
$(document).on("click", "#testButtonClick", function() {
savePDF($("#test").html(), "Test1", "Test2");
});
function savePDF(info, name, data) {
$.ajax({
type: "post",
url: "includes/worker",
data: {"test": info, "name": name, "data": data},
xhr: function() {
try {
if (window.ActiveXObject) {
return new window.ActiveXObject("Microsoft.XMLHTTP");
}
} catch(e) { }
return new window.XMLHttpRequest();
},
success: function(result) {
console.log(result);
},
error: function(response) {
}
});
}
PHP
require_once("tcpdf.php");
$pdfData = new TCPDF('P', PDF_UNIT, PDF_PAGE_FORMAT, true, "UTF-8", false); //
$pdfData->SetCreator("Test..");
$pdfData->SetTitle("Test..");
$pdfData->SetHeaderData("", "", PDF_HEADER_TITLE, PDF_HEADER_STRING);
$pdfData->setHeaderFont(Array(PDF_FONT_NAME_MAIN, "", PDF_FONT_SIZE_MAIN));
$pdfData->setFooterFont(Array(PDF_FONT_NAME_DATA, "", PDF_FONT_SIZE_DATA));
$pdfData->SetFooterMargin(PDF_MARGIN_FOOTER);
$pdfData->SetMargins(PDF_MARGIN_LEFT, "5", PDF_MARGIN_RIGHT);
$pdfData->setPrintHeader(false);
$pdfData->setPrintFooter(false);
$pdfData->SetAutoPageBreak(true, 10);
$pdfData->setFontSubsetting(true);
$pdfData->AddPage();
$pdfData->SetFont("freeserif", "", 10);
$pdfData->writeHTML(iconv("Windows-1251", "UTF-8", "Это тест...."));
$pdfData->Output("Test.pdf", "D");
所以,我已经通过使用自动格式 JS
和转义字符 "
.
代码:
var pdfForm = $("<form action=\"includes/worker\" method=\"post\" enctype=\"multipart/form-data\" target=\"_blank\"></form>");
pdfForm.append("<input type=\"hidden\" name=\"test\" value=\"" + htmlValidation($("#test").html()) + "\">");
pdfForm.append("<input type=\"hidden\" name=\"name\" value=\"Test1\">");
pdfForm.append("<input type=\"hidden\" name=\"data\" value=\"Test2\">");
$("body").append(pdfForm);
$(pdfForm).submit();
function htmlValidation(data) {
return data
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}