php - 使用 jsPDF 和 PHP 将生成的 PDF 文件保存在服务器上
问题描述
我正在尝试将生成的带有 JSPDF 插件的 PDF 文件保存到服务器中,而不是保存在客户端,处理 JsPDF 的 javascript 部分是这样的:
<script type="text/javascript">
(function(){
var
form = $('.form'),
cache_width = form.width(),
//cache_height = form.height(),
a4 =[ 595.28, 841.89]; // for a4 size paper width and height
$('#create_pdf').on('click',function(){
$('body').scrollTop(0);
createPDF();
});
//create pdf
function createPDF(){
getCanvas().then(function(canvas){
var
img = canvas.toDataURL("image/png"),
doc = new jsPDF({
unit:'px',
format:'a4'
});
var imgWidth = 220;
var pageHeight = 295;
var imgHeight = canvas.height * imgWidth / canvas.width;
var heightLeft = imgHeight;
var doc = new jsPDF('p', 'mm');
var position = 0;
doc.addImage(img, 'PNG', 0, position, imgWidth, imgHeight);
heightLeft -= pageHeight;
while (heightLeft >= 0) {
position = heightLeft - imgHeight;
doc.addPage();
doc.addImage(img, 'PNG', 0, position, imgWidth, imgHeight);
heightLeft -= pageHeight;
}
var blob = doc.output('blob');
var formData = new FormData();
formData.append('pdf', blob);
$.ajax({
url: 'upload.php',
type: 'POST',
data: formData,
dataType: 'text',
cache: false,
processData: false,
contentType: false,
success: function(response){
alert(response);
console.log(response)
},
error: function(err){
alert(err);
console.log(err)
}
});
});
}
// create canvas object
function getCanvas(){
form.width((a4[0]*1.33333) -80).css('max-width','none');
return html2canvas(form,{
imageTimeout:2000,
removeContainer:true
});
}
}());
</script>
upload.php 文件应将生成的 pdf 文件或其内容移动到 Uploads 文件夹,但似乎 $_FILES['data'] 为空
<?php
if(!empty($_FILES['data'])) {
// PDF is located at $_FILES['data']['tmp_name']
$content = file_get_contents($_FILES['data']['tmp_name']);
//echo $content;
$location = "uploads/";
move_uploaded_file($_FILES['data']['tmp_name'], $location.'random-name.pdf');
} else {
throw new Exception("no data");
}
我从 Ajax 得到的响应是“注意:未定义的索引:数据”。提前感谢您的帮助。
解决方案
我终于用这段代码让它工作了:
var pdf = btoa(doc.output());
var file_name = $('#id').val();
//var file_name = 'hello world';
$.ajax({
method: "POST",
url: "upload.php",
data: {data: pdf, filename: file_name},
}).done(function(data){
// alert(data);
console.log(data);
});
在服务器端 upload.php 像这样:
if(!empty($_POST['data'])){
$data = base64_decode($_POST['data']);
$fileName = $_POST['filename'];
file_put_contents( "uploads/".$fileName.".pdf", $data );
} else {
echo "No Data Sent";
}
exit();
推荐阅读
- c# - 在光子统一中序列化 Vector3d 数据类型
- amazon-ec2 - 声明性云形成/terraform 中的动态 ec2 资源
- android - 检查 Kotlin 中密封类的所有子类
- javascript - 使用 Node JS 比较数据库中的值
- cesium - 如何从 Scene Primitive 获取 BoundingSphere
- r - R中的AR(2)模型
- google-cloud-platform - (gcloud.compute.images.create)无法获取资源:字段“resource.rawDisk.source”的值无效
- mongodb - MongoDB 无法解析查询(2dsphere):Java API
- reactjs - 反应:页面重新加载后本地存储 getItem() 不起作用
- spring - 我不知道如何使用es7.12。许多功能不再可用