2013-10-01 24 views

回答

2

cfpdf的頁面大小陣列實際上返回裁剪框dimesions。

雖然CF不直接暴露trimbox,但可以使用底層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, CHANDAN庫馬爾

附:使用未記錄的api

+0

(編輯)。好的提示。我不知道那個。快速提問,getTrimBox()。getValues();'永遠是null/undefined? – Leigh

+1

根據PDF參考1.7,媒體框是頁面對象中的必需條目。 (必需;可繼承)以默認用戶空間單位表示的矩形(請參閱第3.8.4節「矩形」),定義打算顯示或打印頁面的物理介質的邊界(請參見第10.10節.1,「頁面邊界」)。 然而並非所有的PDF生成軟件都符合規範。在使用這些值之前使用null或isdefined檢查的理想選擇。 –

4

您可以使用捆綁CF的舊版本的iText。將文件加載到一個PdfReader對象中。然後使用PdfReader.getBoxSize(int index,String boxName)爲每個頁面抓取trimbox(可能爲空)並提取寬度和高度。

下面是測試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>