從BIRT報表文件中獲取頁面設置信息(頁邊距、紙張大小、輸出方向)的方法

        報表打印時,尤爲是套打的報表,頁面設置信息很是重要,好比頁邊距,紙張大小,輸出方向等,並且每一個報表的相關參數有可能不一樣,所以相關參數從具體報表中獲取是一個很是正常並且合理的想法。java

        若是採用BIRT做爲報表的開發工具,報表設計器負責報表的製做,BIRT運行時負責處理報表文件,對於瀏覽器來講,BIRT後端輸出的是網頁,並不包含頁面設置相關信息,瀏覽器有本身的打印設置選項,也不會從網頁中讀取,可是報表設計器在報表設計時提供頁面設置信息的設置界面,所以咱們須要經過運行時API手工寫代碼從具體報表中獲取頁面設置信息,而後再經過其餘方式將參數傳遞給打印機(操做打印機不在本文討論範圍內),本文經過BIRT的源代碼的研究,提供相關的樣例代碼。後端

        BIRT報表設計器的頁面設置信息在主頁選項卡所對應的屬性面板中體現,再也不贅述,直接上代碼:瀏覽器

IReportEngine birtEngine = ...;
Map moduleOptions = new HashMap();
moduleOptions.put(IModuleOption.RESOURCE_FOLDER_KEY,sc.getRealPath("/"));
IReportRunnable runnable = birtEngine.openReportDesign(reportFileName,null,moduleOptions);

IMasterPage  simpleMasterPage = runnable.getDesignInstance().getReport().getMasterPage("Simple MasterPage");
String pageType =(String) simpleMasterPage.getUserProperty("type");//紙張類型
Double height = 0.0;
Double width =0.0;
//若是是自定義紙張類型,須要獲取紙張的寬和高
if("custom".equalsIgnoreCase(pageType)){
    DimensionValue heightDV  = (DimensionValue) simpleMasterPage.getUserProperty("height");
    DimensionValue widthDV  = (DimensionValue) simpleMasterPage.getUserProperty("width");
    height = heightDV.getMeasure();
    width  = widthDV.getMeasure();
}
String orientation = (String) simpleMasterPage.getUserProperty("orientation");//打印輸出方向 landscape:橫向,portrait:縱向

DimensionValue topMarginDV = (DimensionValue)simpleMasterPage.getUserProperty("topMargin");
double topMargin = topMarginDV.getMeasure();//上邊距
String unit = topMarginDV.getUnits();//單位

        這裏面有一個感受比較奇怪的地方,就是主頁的屬性編輯器中有一個名稱,這個名稱能夠修改,默認爲Simple MasterPage,若是要獲取這個頁面配置信息,getMasterPage方法也要把這個名稱做爲參數傳入,這個就比較奇怪,只有一個頁面配置方案,這個名字有什麼用呢?編輯器

相關文章
相關標籤/搜索