从文本区域创建 PDF
creating a PDF from a textarea
我正在尝试导出文本区域的值
let text = document.getElementById("textarea").value
作为 PDF。我正在使用 jsPDF。我的第一次尝试是:
function createPDF(){
let text = document.getElementById("textarea").value;
var doc = new jsPDF();
doc.text(20, 20, text);
doc.save('document.pdf');
}
然而,即使使用这种方法创建了一个 pdf,该 pdf 也不是用“滚动条视图”创建的,它基本上只打印 1 行。
我的第二次尝试是:
function createPdf() {
let text = document.getElementById("textarea").value;
// let titolo = document.getElementById("input-fileName").value;
var doc = new jsPDF();
var splitText = doc.splitTextToSize(text, 250);
var pageHight = doc.internal.pageSize.hight;
doc.setFontSize(11);
var y = 20;
for(var i = 0; i < splitText.length; i++){
if (y > 275){
y = 20;
doc.addPage();
}
doc.text(20, y, splitText[i]);
y = y + 5
}
doc.save(title + '.pdf');
}
然而,使用这种方法,甚至没有创建 pdf :(
所以我尝试使用 html2pdf 如下:
function createPdf(){
var element = document.getElementById('textarea');
element.style.width = '800px';
element.style.height = '1000px';
html2PDF().from(element).toPdf().save('ilmiopdf.pdf');
}
此方法也不会生成 pdf。有人有什么建议吗?
我设法找到了一个方法:
//download pdf //
function creaPdf() {
// Long text
var titolo = document.querySelector('#input-fileName').value;
var text = document.querySelector('#textarea').value;
var repeat = parseInt(document.querySelector('#repeat').value) || 0;
for (var i=0; i<repeat; i++)
text += text;
// Create doc
var ori = document.querySelector('#ori').checked ? "portrait":"landscape";
var doc = new jsPDF(ori, 'mm', 'a4');
doc.setFontSize(parseInt(document.querySelector('#fontsize').value) || 20)
// Page size
var pageSize = { h: doc.internal.pageSize.height, w: doc.internal.pageSize.width };
var margin = {top:20,left:15,bottom:15,right:15};
var lineHeight = doc.getTextDimensions("M").h / 2.54;// in to mm
console.log("SIZE: ", pageSize, lineHeight);
// Pages handler
var linePos=0, nbPage=0;
function addPage(doc) {
if (nbPage) doc.addPage();
else nbPage = 0;
nbPage++;
linePos = margin.top;
// Header
// var title = document.querySelector('#input-fileName').value;
// var twidth = doc.getTextDimensions(title).w / 2.54;
// doc.text(pageSize.w/2 -twidth/2, margin.top, title);
// doc.rect(margin.left, margin.top -lineHeight,
// pageSize.w -margin.left - margin.right,
// 1.5*lineHeight)
// Footer
var title = document.querySelector('#input-fileName').value;
var numPage = 'page '+nbPage;
var nwidth = doc.getTextDimensions(numPage).w / 2.54;
doc.text(pageSize.w -margin.right -nwidth,
pageSize.h -margin.bottom -lineHeight,
numPage);
doc.line(margin.left, pageSize.h -margin.bottom -2*lineHeight,
pageSize.w - margin.right,
pageSize.h -margin.bottom -2*lineHeight)
//
linePos = margin.top + 2*lineHeight;
return nbPage;
}
function addLine(doc, text) {
doc.text(margin.left, linePos, text);
linePos += lineHeight;
if (linePos > pageSize.h-2*margin.bottom) {
addPage(doc);
}
}
// Split text to page width
text = doc.splitTextToSize(text,pageSize.w-margin.left-margin.right);
addPage(doc);
for (var i=0; i<text.length; i++){
addLine(doc, text[i]);
}
doc.save(titolo + '.pdf')
}
我正在尝试导出文本区域的值
let text = document.getElementById("textarea").value
作为 PDF。我正在使用 jsPDF。我的第一次尝试是:
function createPDF(){
let text = document.getElementById("textarea").value;
var doc = new jsPDF();
doc.text(20, 20, text);
doc.save('document.pdf');
}
然而,即使使用这种方法创建了一个 pdf,该 pdf 也不是用“滚动条视图”创建的,它基本上只打印 1 行。
我的第二次尝试是:
function createPdf() {
let text = document.getElementById("textarea").value;
// let titolo = document.getElementById("input-fileName").value;
var doc = new jsPDF();
var splitText = doc.splitTextToSize(text, 250);
var pageHight = doc.internal.pageSize.hight;
doc.setFontSize(11);
var y = 20;
for(var i = 0; i < splitText.length; i++){
if (y > 275){
y = 20;
doc.addPage();
}
doc.text(20, y, splitText[i]);
y = y + 5
}
doc.save(title + '.pdf');
}
然而,使用这种方法,甚至没有创建 pdf :(
所以我尝试使用 html2pdf 如下:
function createPdf(){
var element = document.getElementById('textarea');
element.style.width = '800px';
element.style.height = '1000px';
html2PDF().from(element).toPdf().save('ilmiopdf.pdf');
}
此方法也不会生成 pdf。有人有什么建议吗?
我设法找到了一个方法:
//download pdf //
function creaPdf() {
// Long text
var titolo = document.querySelector('#input-fileName').value;
var text = document.querySelector('#textarea').value;
var repeat = parseInt(document.querySelector('#repeat').value) || 0;
for (var i=0; i<repeat; i++)
text += text;
// Create doc
var ori = document.querySelector('#ori').checked ? "portrait":"landscape";
var doc = new jsPDF(ori, 'mm', 'a4');
doc.setFontSize(parseInt(document.querySelector('#fontsize').value) || 20)
// Page size
var pageSize = { h: doc.internal.pageSize.height, w: doc.internal.pageSize.width };
var margin = {top:20,left:15,bottom:15,right:15};
var lineHeight = doc.getTextDimensions("M").h / 2.54;// in to mm
console.log("SIZE: ", pageSize, lineHeight);
// Pages handler
var linePos=0, nbPage=0;
function addPage(doc) {
if (nbPage) doc.addPage();
else nbPage = 0;
nbPage++;
linePos = margin.top;
// Header
// var title = document.querySelector('#input-fileName').value;
// var twidth = doc.getTextDimensions(title).w / 2.54;
// doc.text(pageSize.w/2 -twidth/2, margin.top, title);
// doc.rect(margin.left, margin.top -lineHeight,
// pageSize.w -margin.left - margin.right,
// 1.5*lineHeight)
// Footer
var title = document.querySelector('#input-fileName').value;
var numPage = 'page '+nbPage;
var nwidth = doc.getTextDimensions(numPage).w / 2.54;
doc.text(pageSize.w -margin.right -nwidth,
pageSize.h -margin.bottom -lineHeight,
numPage);
doc.line(margin.left, pageSize.h -margin.bottom -2*lineHeight,
pageSize.w - margin.right,
pageSize.h -margin.bottom -2*lineHeight)
//
linePos = margin.top + 2*lineHeight;
return nbPage;
}
function addLine(doc, text) {
doc.text(margin.left, linePos, text);
linePos += lineHeight;
if (linePos > pageSize.h-2*margin.bottom) {
addPage(doc);
}
}
// Split text to page width
text = doc.splitTextToSize(text,pageSize.w-margin.left-margin.right);
addPage(doc);
for (var i=0; i<text.length; i++){
addLine(doc, text[i]);
}
doc.save(titolo + '.pdf')
}