Skip to content

Instantly share code, notes, and snippets.

@reachjason
Created January 13, 2025 00:32
Show Gist options
  • Select an option

  • Save reachjason/e3808b5dd78c9bac95b0ad3ab1433c90 to your computer and use it in GitHub Desktop.

Select an option

Save reachjason/e3808b5dd78c9bac95b0ad3ab1433c90 to your computer and use it in GitHub Desktop.
// Create a Trusted Types policy
const policy = window.trustedTypes.createPolicy('default', {
createScriptURL: (url) => {
// Validate the URL (you can add more checks if needed)
if (url.startsWith('https://cdnjs.cloudflare.com/')) {
return url;
}
throw new TypeError('Invalid script URL');
}
});
let jspdf = document.createElement("script");
jspdf.onload = function () {
let pdf = new jsPDF();
let elements = document.getElementsByTagName("img");
for (let i = 0; i < elements.length; i++) {
let img = elements[i];
if (!/^blob:/.test(img.src)) {
continue;
}
let canvasElement = document.createElement('canvas');
let con = canvasElement.getContext("2d");
canvasElement.width = img.width;
canvasElement.height = img.height;
con.drawImage(img, 0, 0, img.width, img.height);
let imgData = canvasElement.toDataURL("image/jpeg", 1.0);
pdf.addImage(imgData, 'JPEG', 0, 0);
pdf.addPage();
}
pdf.save("download.pdf");
};
// Use the Trusted Types policy to set the script URL
jspdf.src = policy.createScriptURL('https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js');
document.body.appendChild(jspdf);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment