Hi,
PDF=True just shows a 404 page whenever I add it to the URL. Has this been discontinued? Or could it be something else I should do. I am doing an upgrade from dw9 to dw10, and they use this functionality. I am on 10.14.3
//jan
Developer forum
E-mail notifications
PDF=True
Jan Sangill
Posted on 13/05/2025 08:27:17
Replies
Nicolai Pedersen
Posted on 13/05/2025 10:12:55
Hi Jan
Dynamicweb 10 does not support pdf=true - in DW9 it was build on tech that requires a full chrome browser server side and we cannot support that in DW10.
Also a lot has happened on PDF generation since that was originally made - it is very simple to create the PDF directly in the browser using html2pdf.js, pdf.js etc.
Using htmltopdf.js
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.9.2/html2pdf.bundle.min.js"></script>
<button id="download">Download PDF</button>
<script>
document.getElementById('download').addEventListener('click', () => {
const url = 'https://example.com'; // ← your URL here
fetch(url)
.then(res => res.text())
.then(html => {
const wrapper = document.createElement('div');
wrapper.style.width = '800px'; // control page width
wrapper.innerHTML = html;
document.body.appendChild(wrapper);
html2pdf()
.from(wrapper)
.set({
margin: 10,
filename: 'page.pdf',
image: { type: 'jpeg', quality: 0.98 },
html2canvas: { scale: 2 },
jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }
})
.save()
.finally(() => document.body.removeChild(wrapper));
})
.catch(console.error);
});
</script>
An alternative - little more low level:
Using jsPDF + html2canvas
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
<button id="download2">Download PDF</button>
<script>
const { jsPDF } = window.jspdf;
document.getElementById('download2').addEventListener('click', async () => {
const url = 'https://example.com'; // ← your URL
const res = await fetch(url);
const html = await res.text();
const wrapper = document.createElement('div');
wrapper.style.width = '800px';
wrapper.innerHTML = html;
document.body.appendChild(wrapper);
const canvas = await html2canvas(wrapper, { scale: 2 });
const imgData = canvas.toDataURL('image/jpeg', 0.98);
const pdf = new jsPDF('p', 'mm', 'a4');
const pdfWidth = pdf.internal.pageSize.getWidth();
const imgProps = pdf.getImageProperties(imgData);
const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;
pdf.addImage(imgData, 'JPEG', 0, 0, pdfWidth, pdfHeight);
pdf.save('page.pdf');
document.body.removeChild(wrapper);
});
</script>
Jan Sangill
Posted on 13/05/2025 10:15:20
Hi Nicolai, Thank you for the response. Appreciated. It is noted. And it makes sense.
Nicolai Pedersen
Posted on 13/05/2025 10:17:33
Also - here is an example using print mode - printing the page you are on and then use CSS to hide e.g. print buttons and other things you need to hide:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>html2pdf + Print-Mode Example</title>
<!-- html2pdf bundle (includes html2canvas + jsPDF) -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.9.2/html2pdf.bundle.min.js"></script>
<style>
/* print-mode styles: applied only when generating the PDF */
.print-mode #export-pdf {
display: none !important;
}
.print-mode body {
/* make fonts a bit smaller in PDF */
font-size: 12pt;
line-height: 1.5;
}
.print-mode h2 {
/* force page-breaks before each section */
page-break-before: always;
}
</style>
</head>
<body>
<h1>My Awesome Page</h1>
<p>This content will go into the PDF—without the button.</p>
<!-- Fixed-position button (hidden in PDF via .print-mode) -->
<button id="export-pdf"
style="position:fixed;top:1rem;right:1rem;z-index:1000;">
Download PDF
</button>
<script>
const button = document.getElementById('export-pdf');
const opts = {
margin: 10,
filename: 'this-page.pdf',
image: { type: 'jpeg', quality: 0.98 },
html2canvas: { scale: 2 },
jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }
};
button.addEventListener('click', () => {
// 1. turn on our print-mode styles
document.documentElement.classList.add('print-mode');
// 2. generate & save PDF from the whole body
html2pdf()
.from(document.body)
.set(opts)
.save()
.finally(() => {
// 3. clean up: turn off print-mode styles
document.documentElement.classList.remove('print-mode');
});
});
</script>
</body>
</html>
You must be logged in to post in the forum