diff --git a/public/ERTSQlite.db b/public/ERTSQlite.db index 9e8cd40..6ea19b6 100644 Binary files a/public/ERTSQlite.db and b/public/ERTSQlite.db differ diff --git a/public/PDF/testpdf.pdf b/public/PDF/testpdf.pdf index 3c52035..d6d97f5 100644 Binary files a/public/PDF/testpdf.pdf and b/public/PDF/testpdf.pdf differ diff --git a/public/dmxAppConnect/config.js b/public/dmxAppConnect/config.js index dd85b7b..62003a9 100644 --- a/public/dmxAppConnect/config.js +++ b/public/dmxAppConnect/config.js @@ -35,6 +35,15 @@ dmx.config({ } ], "local": {} + }, + "processPDF": { + "meta": [ + { + "name": "PDFprocess", + "type": "text" + } + ], + "local": {} } }, "index": { diff --git a/public/js/libProcessScript.js b/public/js/libProcessScript.js new file mode 100644 index 0000000..9739c0c --- /dev/null +++ b/public/js/libProcessScript.js @@ -0,0 +1,123 @@ +// JavaScript Document +// Replaces libPDFscripts.js +// NEW - Process Scripts + +// Utility to fetch PDF bytes + +//const path = FileSystemHandle.require('node:path') + +let showLog = true; +const dd = createDebugLogger(showLog, "dd"); + +function createDebugLogger(debug, prefix = "") { + return function (message, ...optionalParams) { + if (debug) { + console.log( + `[${prefix}]`.toUpperCase(), `${message}`, + ...optionalParams + ); + } + }; +} +async function fetchPdfBytes(filePath) { + dd(filePath); + + try { + const response = await fetch(filePath); + if (!response.ok) throw new Error(`Failed to fetch PDF from ${filePath}`); + return await response.arrayBuffer(); + } catch (err) { + console.error("Error fetching PDF bytes:", err); + throw err; + } +} + +// Update form fields in the PDF +async function updatePdfFields( + pdfBytes, + dataSources, + skipMissingFields = true +) { + try { + const pdfDoc = await PDFLib.PDFDocument.load(pdfBytes); + const form = pdfDoc.getForm(); + + dataSources.forEach((dataSource) => { + dataSource.forEach((record) => { + Object.entries(record).forEach(([fieldName, fieldValue]) => { + try { + const formField = form.getTextField(fieldName); + if (formField) { + dd(fieldName, "-->", fieldValue); + formField.setText(String(fieldValue)); + } else if (!skipMissingFields) { + console.warn(`Field "${fieldName}" not found.`); + } + } catch (err) { + console.error(`Error updating field "${fieldName}":`, err); + } + }); + }); + }); + + return await pdfDoc.save(); + } catch (err) { + console.error("Error updating PDF fields:", err); + throw err; + } +} + +// Function to trigger download of the updated PDF +function downloadPdf(pdfBytes, fileName) { + const blob = new Blob([pdfBytes], { type: "application/pdf" }); + const url = URL.createObjectURL(blob); + + const link = Object.assign(document.createElement("a"), { + href: url, + download: fileName, + }); + + link.click(); + URL.revokeObjectURL(url); // Clean up the URL immediately +} + +function generateRandomFilename(length = 8, prefix = "", suffix = "") { + const characters = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + const array = Array.from({ length }, () => + characters.charAt(Math.floor(Math.random() * characters.length)) + ); + const filename = `${prefix}${array.join("")}${suffix}`; + + dd("Random Filename:", filename); + return filename; +} + +// Example Usage: + +// Wrapper function to fetch, update, and download PDF +async function processAndDownloadPdf(filePath, ...dataSources) { + try { + const pdfBytes = await fetchPdfBytes(filePath); + const updatedPdfBytes = await updatePdfFields(pdfBytes, dataSources); + const fileName = generateRandomFilename(8, "ERT_", ".pdf"); + //const saveFilePath = await savePdfToFile(pdfBytes); + //dd("[PDF PATH]", saveFilePath); + downloadPdf(updatedPdfBytes, fileName); + } catch (err) { + console.error("Error processing the PDF:", err); + } +} + + +async function savePdfToFile(pdfBytes) { + const randomFilename = generateRandomFilename(12, "", ".pdf"); + File.path; + const filePath = Filehandle.path.join(__dirname, "PDF", randomFilename); + dd("[SAVE TO DISK]", randomFilename); + // Save the file to disk + await fs.writeFile(filePath, Buffer.from(pdfBytes)); + + // Return a URL or file path based on your server setup + return `/PDF/${randomFilename}`; +} diff --git a/public/js/libSavePDFbytes.js b/public/js/libSavePDFbytes.js new file mode 100644 index 0000000..aff3cd5 --- /dev/null +++ b/public/js/libSavePDFbytes.js @@ -0,0 +1,2 @@ +// JavaScript Document + diff --git a/views/observationPage.ejs b/views/observationPage.ejs index 3194dd5..4574650 100644 --- a/views/observationPage.ejs +++ b/views/observationPage.ejs @@ -48,6 +48,15 @@ args: ["/PDF/testpdf.pdf", "{{datastore1.data}}", "{{data_view1.data}}"] } } +
A nice paragraph {{myResult}}