मेरा परिदृश्य है:विभाजित पीडीएफ में लंबे एचटीएमएल आयात करें
एक बटन क्लिक करने पर, एक पीडीएफ फ़ाइल में एचटीएमएल पर आयात डेटा।
के बाद से इस पीडीएफ चाहिए तो मेरी पहला कदम html2canvas.js का उपयोग कर एक छवि में इस पेज को हस्तांतरण करने और फिर जब डेटा jsPDF.js
और के साथ एक पीडीएफ को यह छवि आयात है, कुछ जटिल आवश्यक शैली है ऐसा करने के लिए पीडीएफ को सभी डेटा को पकड़ने के लिए विभाजित किया जाना चाहिए, इसलिए मैंने यहां कोडों का उपयोग किया: https://github.com/MrRio/jsPDF/pull/397
मेरी समस्या है: पेज 2 या 3 पर पीडीएफ पर विभाजित पृष्ठ फ़ायरफ़ॉक्स पर ... नहीं कर सकता दिखाया जाना चाहिए, वे पूरी तरह खाली हैं। लेकिन पेज 1 पर यह ठीक है। (यह फ़ायरफ़ॉक्स के लिए है)
मैंने अन्य ब्राउज़रों का परीक्षण किया, वे ठीक हैं। क्या कोई इसे ठीक करने के तरीके पर कुछ प्रकाश डाल सकता है? http://plnkr.co/edit/ElvAsriK2nssq2U9pgKX?p=preview
function initTemplate(){
datas=getData();
var templateData=_.template($('#tpl').html(), datas);
$('#tplW').html(templateData);
getPDF();
// $('#tplW').append(_.template($('#tpl').html(), datas));
// $('body').html(_.template($('#tpl').html(), datas));
}
function getData(){
var htmlData=$(".MsoNormalTable .inner").find("tr.tablerow");
var datas=[];
$.each(htmlData,function(i,v){
var d=[];
var tds=$(v).find("td");
$.each(tds,function(index,val){
d.push($(val).text());
});
datas.push(d);
});
return datas;
}
function getPDF() {
// initTemplate();
html2canvas($('#tplW')[0], {
onrendered: function(canvas){
canvasToImageSuccess(canvas);
}
});
function canvasToImage (canvas){
var img = new Image();
var dataURL = canvas.toDataURL('image/png');
img.src = dataURL;
return img;
};
function canvasShiftImage (oldCanvas,shiftAmt){
shiftAmt = parseInt(shiftAmt) || 0;
if(!shiftAmt){ return oldCanvas; }
var newCanvas = document.createElement('canvas');
newCanvas.height = oldCanvas.height - shiftAmt;
newCanvas.width = oldCanvas.width;
var ctx = newCanvas.getContext('2d');
var img = canvasToImage(oldCanvas);
ctx.drawImage(img,0, shiftAmt, img.width, img.height, 0, 0, img.width, img.height);
return newCanvas;
};
function canvasToImageSuccess (canvas){
var pdf = new jsPDF('l','px'),
pdfInternals = pdf.internal,
pdfPageSize = pdfInternals.pageSize,
pdfScaleFactor = pdfInternals.scaleFactor,
pdfPageWidth = pdfPageSize.width,
pdfPageHeight = pdfPageSize.height,
totalPdfHeight = 0,
htmlPageHeight = canvas.height,
htmlScaleFactor = canvas.width/(pdfPageWidth * pdfScaleFactor),
safetyNet = 0;
while(totalPdfHeight < htmlPageHeight && safetyNet < 15){
var newCanvas = canvasShiftImage(canvas, totalPdfHeight);
pdf.addImage(newCanvas, 'png', 0, 0, pdfPageWidth, 0, null, 'NONE');
totalPdfHeight += (pdfPageHeight * pdfScaleFactor * htmlScaleFactor);
if(totalPdfHeight < htmlPageHeight){
pdf.addPage();
}
safetyNet++;
}
pdf.save('test.pdf');
};
}
क्या आपको समाधान मिला? अगर ऐसा है तो कृपया इसे पोस्ट करें। –
@RoyMJ पीडीएफ को छवि का उपयोग करने से कम गुणवत्ता वाले पीडीएफ मिलेगा, इसके बजाय आप jsPdf के लिए ऑटोटेबल का उपयोग कर सकते हैं और सामग्री को हेडर और पाद लेख के साथ निर्यात कर सकते हैं। यहां जांचें https://simonbengtsson.github.io/jsPDF-AutoTable/#header-footer यह उच्च गुणवत्ता वाले पीडीएफ आउटपुट भी उत्पन्न करेगा। – Purushoth
@Purushoth: उपर्युक्त लिंक के लिए धन्यवाद, लेकिन यह एक टेबल नहीं है जो आयात करने की तलाश में है, लेकिन लंबे समय तक एचटीएमएल और प्लगइन्स में समस्या होती है जब यह लंबी सामग्री की बात आती है –