Good thinking! Here is a new version improved by AI:—
<cffunction name="convertPdfPageToImage" output="false" returntype="string" hint="Converts a specified PDF page to a base64-encoded PNG image.">
<cfargument name="filename" type="string" required="true" hint="The path to the PDF file.">
<cfargument name="pageNo" type="numeric" default="0" hint="The page number to convert.">
<cfargument name="dpi" type="numeric" default="72" hint="The DPI (dots per inch) of the output image.">
<cfscript>
var PDFRenderer = createObject("java", "org.apache.pdfbox.rendering.PDFRenderer");
var ImageIO = createObject("java", "javax.imageio.ImageIO");
var Loader = createObject("java", "org.apache.pdfbox.Loader");
var file = createObject("java", "java.io.File").init(expandPath(arguments.filename));
if (!file.exists()) {
throw("The specified file does not exist.");
}
var doc = Loader.LoadPDF(file);
if (arguments.pageNo lt 0 or arguments.pageNo gte doc.getNumberOfPages()) {
throw("The specified page number is out of range.");
}
var renderer = PDFRenderer.init(doc);
var image = renderer.renderImageWithDPI(arguments.pageNo, arguments.dpi);
var baos = createObject("java", "java.io.ByteArrayOutputStream").init();
ImageIO.write(image, "PNG", baos);
baos.flush();
var imageInBytes = baos.toByteArray();
baos.close();
doc.close();
var b64 = binaryEncode(imageInBytes, "base64");
return b64;
</cfscript>
</cffunction>