cfpdf的PageSizes数组正在返回媒体框大小,但我需要获取trimbox。
是否可以在不使用imagemagick(和cfexecute)等控制台工具的情况下使用ColdFusion(或Java)获取trimbox?
答案 0 :(得分:4)
您可以使用与CF捆绑在一起的旧版iText。将文件加载到PdfReader
对象中。然后使用PdfReader.getBoxSize(int index,String boxName)
抓取每个页面的修剪框(可能为null)并提取宽度和高度。
以下是使用CF9测试的示例:
<cfscript>
path = "C:/path/to/file.pdf";
reader = createObject("java", "com.lowagie.text.pdf.PdfReader").init( path );
sizes = [];
for (i = 1; i <= reader.getNumberOfPages(); i++) {
//note: the trimbox may be null / undefined
rect = reader.getBoxSize( i, "trim");
if (structKeyExists(variables, "rect")) {
arrayAppend(sizes, {height=rect.getHeight(), width=rect.getWidth()});
}
}
WriteDump(sizes);
</cfscript>
答案 1 :(得分:2)
cfpdf的PageSizes数组实际上返回了cropbox的尺寸。
虽然CF没有直接暴露trimbox,但你可以使用底层的java对象来获得相同的东西。如果您使用cf cff action read读取变量中的PDF,则该变量只是PDFDocument(使用LiveCycle记录)的包装器。伪代码如下:
pageTree = varname.getDoc().requirePages();
page = pageTree.getPage(index);
trimBox = page.getTrimBox().getValues();
height = trimBox[4] - trimBox[2];
width = trimBox[3] - trimBox[1];
HTH, Chandan Kumar
P.S。使用未记录的api