使用 AJAX 时如何在新 window 中打开 TCPDF 输出
How to open TCPDF output in new window when using AJAX
所以我在互联网上看到其他人也遇到过类似的问题,但解决方案并不适合我。我还看到这些问题至少在 4 年前就已经发布了,所以也许有些事情已经改变了。简而言之,我正在尝试使用 TCPDF 编写 pdf 并在新 window 中打开该 pdf。 catch 正在使用 AJAX 因为显然,我发送到服务器的数组没有在脚本的 success
部分发送,并且生成的 pdf 没有收到适当的数据:
$(document).on("click", "#create_qr_codes_pdf", function(ev) {
ev.preventDefault();
var qr_array = [];
for (var i = 0; i < $("#qrcode_top img").length; i++) {
qr_array.push($('#code' +i+' img').attr('src'));
}
$.ajax({
url: 'server/qr_id_create.php?create_qr_codes_pdf',
type: 'POST',
data: {qr_array: qr_array},
success: function(data) {
window.open("C:/xampp/htdocs/*/server/qr_codes.pdf");
}
});
});
如您所见,我尝试从服务器获取 pdf 并在新选项卡中打开它,但显然不允许打开本地资源。
这是用于创建 pdf 文档的 php 代码:
if (isset($_GET['create_qr_codes_pdf'])) {
//ob_start();
if (isset($_POST['qr_array'])) {
$qr_images = $_POST['qr_array'];
require_once 'tcpdf/tcpdf.php';
//require_once('tcpdf/include/tcpdf_static.php');
require_once 'tcpdf/config/tcpdf_config.php';
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('name');
$pdf->SetTitle('file');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, 35, PDF_MARGIN_RIGHT);
$pdf->SetAutoPageBreak(TRUE, 35);
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
require_once(dirname(__FILE__).'/lang/eng.php');
$pdf->setLanguageArray($l);
}
$pdf->setFontSubsetting(true);
$pdf->SetFont('helvetica', '', 9, '', true);
$pdf->AddPage();
foreach ($qr_images as $img) {
$img = preg_replace('/^[^,]*,\s*/', '', $img);
$img = base64_decode($img);
$pdf->Image('@'.$img);
$pdf->AddPage();
}
ob_end_clean();
$pdf->Output('qr_codes.pdf', 'F');
return true;
} else {
}
}
我试过 $pdf->Output('qr_codes.pdf', 'F'); //I, F, D
的变体。理想情况下,我想使用 I
选项在浏览器中打开,但这根本不起作用。如果我 运行 脚本,什么也不会发生。有什么想法吗?
2014 年,timclutton 发现 solution 具有 php file_get_contents
功能。
我已经用您的 ajax 代码对其进行了测试。我只是在图像之间添加了一个 space,它起作用了:
<?php
if (isset($_GET['create_qr_codes_pdf'])) {
if (isset($_POST['qr_array'])) {
$qr_images = $_POST['qr_array'];
require_once('../TCPDF-master/tcpdf.php');
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->AddPage();
foreach ($qr_images as $img) {
$img = file_get_contents($img);
$pdf->Image('@'.$img);
$position = $pdf->GetY();
$pdf->SetY($position+50);
}
$pdf->Output('your\absolute\local\path\qr_codes.pdf', 'F');
return true;
}
}
从数据 URI 中,我得到一个带有图片的 pdf 文件,可以在新 window 中打开。
所以我在互联网上看到其他人也遇到过类似的问题,但解决方案并不适合我。我还看到这些问题至少在 4 年前就已经发布了,所以也许有些事情已经改变了。简而言之,我正在尝试使用 TCPDF 编写 pdf 并在新 window 中打开该 pdf。 catch 正在使用 AJAX 因为显然,我发送到服务器的数组没有在脚本的 success
部分发送,并且生成的 pdf 没有收到适当的数据:
$(document).on("click", "#create_qr_codes_pdf", function(ev) {
ev.preventDefault();
var qr_array = [];
for (var i = 0; i < $("#qrcode_top img").length; i++) {
qr_array.push($('#code' +i+' img').attr('src'));
}
$.ajax({
url: 'server/qr_id_create.php?create_qr_codes_pdf',
type: 'POST',
data: {qr_array: qr_array},
success: function(data) {
window.open("C:/xampp/htdocs/*/server/qr_codes.pdf");
}
});
});
如您所见,我尝试从服务器获取 pdf 并在新选项卡中打开它,但显然不允许打开本地资源。
这是用于创建 pdf 文档的 php 代码:
if (isset($_GET['create_qr_codes_pdf'])) {
//ob_start();
if (isset($_POST['qr_array'])) {
$qr_images = $_POST['qr_array'];
require_once 'tcpdf/tcpdf.php';
//require_once('tcpdf/include/tcpdf_static.php');
require_once 'tcpdf/config/tcpdf_config.php';
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('name');
$pdf->SetTitle('file');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, 35, PDF_MARGIN_RIGHT);
$pdf->SetAutoPageBreak(TRUE, 35);
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
require_once(dirname(__FILE__).'/lang/eng.php');
$pdf->setLanguageArray($l);
}
$pdf->setFontSubsetting(true);
$pdf->SetFont('helvetica', '', 9, '', true);
$pdf->AddPage();
foreach ($qr_images as $img) {
$img = preg_replace('/^[^,]*,\s*/', '', $img);
$img = base64_decode($img);
$pdf->Image('@'.$img);
$pdf->AddPage();
}
ob_end_clean();
$pdf->Output('qr_codes.pdf', 'F');
return true;
} else {
}
}
我试过 $pdf->Output('qr_codes.pdf', 'F'); //I, F, D
的变体。理想情况下,我想使用 I
选项在浏览器中打开,但这根本不起作用。如果我 运行 脚本,什么也不会发生。有什么想法吗?
2014 年,timclutton 发现 solution 具有 php file_get_contents
功能。
我已经用您的 ajax 代码对其进行了测试。我只是在图像之间添加了一个 space,它起作用了:
<?php
if (isset($_GET['create_qr_codes_pdf'])) {
if (isset($_POST['qr_array'])) {
$qr_images = $_POST['qr_array'];
require_once('../TCPDF-master/tcpdf.php');
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->AddPage();
foreach ($qr_images as $img) {
$img = file_get_contents($img);
$pdf->Image('@'.$img);
$position = $pdf->GetY();
$pdf->SetY($position+50);
}
$pdf->Output('your\absolute\local\path\qr_codes.pdf', 'F');
return true;
}
}
从数据 URI 中,我得到一个带有图片的 pdf 文件,可以在新 window 中打开。