我正在尝试生成一个pdf文件,将其上传到服务器,而不是直接下载(本地)。

所以我尝试了JsPdf,但是Jspdf的问题是它没有保存我的样式表。

然后,我尝试了Html2Pdf(这也适用于我的样式表),但是我无法将数据发送到“ upload.php”文件中。我找不到html2pdf的输出语法。

JS:

$("#printer").on("click",function(e){

var element = document.getElementById('qrcode');

html2pdf().from(element).toPdf().outputPdf().then(function(pdf) {
    //Convert to base 64


        var data = new FormData();
        data.append("data" , pdf);
        var xhr = new XMLHttpRequest();
        xhr.open( 'post', 'upload.php', true ); //Post to php Script to save to server
        xhr.send(data);


        })

});






服务器上的我的Pdf文件为空。而且我不知道为什么。

upload.php:

<?php
if(!empty($_POST['data'])){
    $data = $_POST['data'];
    $fname = "test.pdf"; // name the file
    $file = fopen("uploads/" .$fname, 'w'); // open the file path
    fwrite($file, $data); //save data
    fclose($file);
} else {
    echo "No Data Sent";
}
?>


我真的很感谢您的帮助。

只需将生成的PDF文件保存在我的服务器上。

最佳答案

如果有人有同样的问题。我找到了解决方案。

JS


$("#printer").on("click",function(e){

var element = document.getElementById('qrcode');

var opt = {

  image:        { type: 'jpeg', quality: 0.98 },
  html2canvas:  { scale: 3 },
  jsPDF:        { unit: 'cm', format: 'letter', orientation: 'landscape' }
};

html2pdf().from(element).set(opt).toPdf().output('datauristring').then(function (pdfAsString) {
    // The PDF has been converted to a Data URI string and passed to this function.
    // Use pdfAsString however you like (send as email, etc)!

var arr = pdfAsString.split(',');
pdfAsString= arr[1];

        var data = new FormData();
        data.append("data" , pdfAsString);
        var xhr = new XMLHttpRequest();
        xhr.open( 'post', 'upload.php', true ); //Post the Data URI to php Script to save to server
        xhr.send(data);

        })

e.preventDefault();  //stop the browser from following
    window.location.href = 'uploads/file.pdf';

});


upload.php

<?php
$data = $_POST['data'];
$b64 = $data;

# Decode the Base64 string, making sure that it contains only valid characters
$bin = base64_decode($b64, true);

# Perform a basic validation to make sure that the result is a valid PDF file
# Be aware! The magic number (file signature) is not 100% reliable solution to validate PDF files
# Moreover, if you get Base64 from an untrusted source, you must sanitize the PDF contents
if (strpos($bin, '%PDF') !== 0) {
  throw new Exception('Missing the PDF file signature');
}

# Write the PDF contents to a local file
file_put_contents('uploads/file.pdf', $bin);
?>

10-01 18:05
查看更多