javascript - 如何在表单提交时使用 AJAX 显示使用 FPDF/FPDI 创建的动态生成的 PDF
问题描述
我正在创建一个页面,用户可以在其中自定义 PDF,在生成 PDF 后,我想显示生成的 PDF 的预览并允许用户下载或打印它。我的 PHP 可以正常工作以生成 PDF,现在我将继续使用 AJAX 调用来接受动态生成文本的表单输入。提交时,我希望 PDF 显示在 div 中,以便用户可以在打印/保存之前预览 PDF。
generate_pdf.php
这是我用于 PDF 生成的 PHP( ):
<?php
use setasign\Fpdi\Fpdi;
require_once('fpdf.php');
require_once('autoload.php');
// initiate FPDI
$pdf = new Fpdi();
// add a page
$pdf->AddPage();
// set the source file
$pdf->setSourceFile('template.pdf');
// import page 1
$tplIdx = $pdf->importPage(1);
$size = $pdf->getTemplateSize($tplIdx);
$orientation = $size['width'] > $size['height'] ? 'L' : 'P';
$mid_x = $size['width']/2;
$company = $_POST['company'];
$pdf->useTemplate($tplIdx, null, null, $size['width'], $size['height'],FALSE);
// now write some text above the imported page
$pdf->SetFont('Helvetica');
$pdf->SetTextColor(0, 0, 0);
$pdf->SetXY($mid_x - ($pdf->GetStringWidth($company) / 2), 110);
$pdf->Write(0, $company);
$pdf->Output();
这是我用于 AJAX 调用的 HTML/JavaScript:
<form method="post">
<input name="company" type="text" />
<input type="submit" />
</form>
<div id="pdf"></div>
<script>
var $form = $('form'),
form_data;
$form.submit(function(e) {
e.preventDefault();
form_data = $(this).serialize();
$.ajax({
type: 'POST',
url: 'generate_pdf.php',
data: form_data
}).done(function(response) {
$('#pdf').append(response);
});
});
</script>
不幸的是,这只会产生一堆乱码,我假设它与content-type
标题有关?
解决方案
推荐阅读
- java - 如何将侦听器添加到 MapBox android 地图上的符号?
- python - I need that when I click on an article <> it’s called the name of the article
- java - Spring Boot Test: UserControllerTest Fails When Using Jackson ObjectMapper To Convert Model To JSON String
- java - 下面的二分查找代码是正确还是不正确?(本书的编程访谈曝光)
- html - 带输入的文本框太小
- python - matplotlib 具有混合 z 顺序的两个 y 轴
- reactjs - 反应路由器需要一些时间来重定向/渲染
- angular - 如何区分我的变量,以便 Angular --prod --aot 不会导致值在运行时为空?
- react-native - 使用反应原生路由器通量添加顶部和底部选项卡
- java - 如何使用 jacoco 获得不同 repo 中测试的测试覆盖率?