Using the jsPDF
plugin, I am creating a .pdf
file and generating a download based on a button click. I would like to save the file onto my server instead of initiating the download. So when the button is clicked I would like the file to be saved in :
/tmp/uploads/pdf/example.pdf
I am aware I need have to use Jquery.Ajax
to post the file to the server. However, looking at the documentation and I didn't see any support for .pdf
as a datatype.
My code:
$(document).on("click", "#PDF", function () {
var table = document.getElementById("result");
var tbl = window.sessionStorage.getItem("tbl");
var cols = [],
data = [];
function html() {
var doc = new jsPDF('p', 'pt');
var res = doc.autoTableHtmlToJson(table, true);
doc.autoTable(res.columns, res.data);
doc.save( tbl+".pdf");
}
html();
});
Based on this xml document saving example I tried the following:
var pdfDocument = doc.save( tbl+".pdf");
var pdfRequest = $.ajax({
url: "/tmp/uploads/pdf",
processData: false,
data: pdfDocument
});
This downloaded the file instead of saving it. How can I save the file?
You can store the PDF inside of a table using a varbinary field and an extension field. Then you can take advantage of the Fulltext serch engine to search inside of the PDFs. You will have to install a PDF iFilter in your SQL server.
To set up a PDF database file, your best bet is to create it first using a database or spreadsheet program, such as Microsoft Excel. Then you can convert the file into a PDF and add Adobe Acrobat's search bar and index features, making it easy for users to search the database.
To save a PDF, choose File > Save or click the Save File icon in the Heads Up Display (HUD) toolbar at the bottom of the PDF. The Save As dialog box is displayed. Choose the location where you want to save the PDF and then click Save.
I have successfully save jspdf file in server using jspdf, javascript and php with png image
here is the javascript
var doc = btoa(pdf.output());
var data = new FormData();
data.append("data", doc);
var xhr = new XMLHttpRequest();
xhr.open( 'post', 'data/test.php?name=' +name, true );
alert(data);
xhr.send(data);
And the php file
if(!empty($_POST['data'])){
$data = base64_decode($_POST['data']);
//$data = $_POST['data'];
$name = $_GET['name'];
$fname = $name."_bell_quote.pdf"; // name the file
$file = fopen("../quote/" .$fname, 'w'); // open the file path
fwrite($file, $data); //save data
fclose($file);
echo "Bell Quote saved";
}
else {
echo "No Data Sent";
}
If your PDF contains binary data, you can get into problems if you try to transfer the PDF via string. I used the blob output format of jsPDF with success.
var doc = new jsPDF();
// ... generate pdf here ...
// output as blob
var pdf = doc.output('blob');
var data = new FormData();
data.append('data' , pdf);
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (this.readyState == 4) {
if (this.status !== 200) {
// handle error
}
}
}
xhr.open('POST', 'upload.php', true);
xhr.send(data);
Your upload.php can then use the $_FILES
array in PHP
<?php
if(!empty($_FILES['data'])) {
// PDF is located at $_FILES['data']['tmp_name']
// rename(...) it or send via email etc.
$content = file_get_contents($_FILES['data']['tmp_name']);
} else {
throw new Exception("no data");
}
?>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With