2

cfpdf的PageSizes数组正在返回媒体框大小,但我需要获取trimbox

cfpdf 的示例输出

是否可以在不使用诸如 imagemagick(和 cfexecute)之类的控制台工具的情况下使用 ColdFusion(或 Java)获得修剪框?

4

2 回答 2

4

您可以使用与 CF 捆绑的旧版 iText。将文件加载到PdfReader对象中。然后使用PdfReader.getBoxSize(int index,String boxName)抓取每个页面的修剪框(可能为空)并提取宽度和高度。

以下是使用 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> 
于 2013-10-01T15:16:31.620 回答
2

cfpdf 的 PageSizes 数组实际上返回cropbox 尺寸。

虽然 CF 不直接公开修剪框,但您可以使用底层 java 对象来获得相同的效果。如果您使用 cfpdf 操作读取变量读取 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,钱丹库马尔

ps 使用未记录的 api

于 2013-10-01T17:14:43.660 回答