AR默認的話,報表的紙張類型是就是Custom,寬高根據主模版的大小來。
用戶可以通過AR自帶的打印組件打印帳票。在popForm上,用於可以選擇打印紙張等。
<!--[endif]-->
<!--[endif]-->
1,首先,先要弄清一個概念,AR報表的紙型和打印機打印出來的紙型是完全不同的概念。
1),AR報表的紙型是這張帳票的實際大小,不會隨著打印機的紙型而變化的。
2),打印機打印出來的紙型,僅僅是個用來放報表的容器而已。
形象點說:AR紙型的大小就相當於工廠生產出來的產品的大小;而打印執行僅僅是用來放這個產品的外包裝而已。
所以,對於A4橫的AR報表來說,用A3來打印的話,雖然打印出來的紙大了,但報表本身的大小不會變。
假如用A5來打印的話,打印出來的紙變小了,但由於報表本身沒變,所以1頁會打印不下,可能有部份內容顯示不出來。
本節講討論如何設置AR報表的紙型。
2,AR報表的一些主要打印參數,具體對照圖來看:
<!--[endif]-->
(1), AR報表的紙型,如下進行設置:
rpt.PageSettings.PaperKind = Printing.PaperKind.A4
rpt.PageSettings.Orientation = DataDynamics.ActiveReports.Document.PageOrIEntation.Portrait
該AR報表的紙型是A4,方向是橫。
假如不進行設置的話,默認PaperKind就是0(Custom),橫縱沒有(應該是-1)。
AR紙型一般是可以有選項讓用戶可以設置的,這個在我們項目中已經寫在Form基類中了。不過我們有些特殊帳票是禁用該選項的。
(2),當前紙型下的寬高
假如當前紙型是A4橫的話,寬高如下:
rpt.PageSettings.PaperWidth=8.267716
rpt.PageSettings.PaperHeight=11.692914
恩,仔細看看,沒錯,PaperWidth竟然比PaperHeight小。
你把紙型切換成A4 縱看看,寬高還是這樣不變。
不知道這算不算AR的bug,PaperWidth和PaperHeight是以“縱”為標准的,假如是“橫”帳票的話,求寬高時,不要忘記反一下。
(3),上下左右打印的余白
不管哪種紙型,默認余白大小如下:
rpt.PageSettings.Margins.Top = 1
rpt.PageSettings.Margins.Bottom = 1
rpt.PageSettings.Margins.Left = 1
rpt.PageSettings.Margins.Right = 1
可以進行相應的修改,我們項目中,把余白的修改開放給了用戶。
3,實際帳票內容的寬度設定。恩,這個是難點!
實際內容的寬度就是:PrintWidth
上一節中,我的PrintWidth設置如下:
''Set PrintWidth
Me.PrintWidth = Me.subReport2.Left + Me.subReport2.Width
實際顯示的寬度,不管subReport2怎麼變,總歸把它顯示出來,不管紙張類型是什麼。
如果me.PrintWidth甚至比紙張的寬度還要大,則會顯示紅線,實際打印出來會以紅線分割打印2張紙。
來舉例:
1)我們把PrintWidth正好設置成紙型寬度(雖然是PaperHeight,但的確是寬)減去左右余白,看看效果,不錯,效果很好。
Me.PrintWidth = Me.PageSettings.PaperHeight - Me.PageSettings.Margins.Left - Me.PageSettings.Margins.Right
<!--[endif]-->
2)我們把PrintWidth設成剛剛的一半,效果會咋樣呢?有一半的內容沒顯示出來。
Me.PrintWidth = (Me.PageSettings.PaperHeight - Me.PageSettings.Margins.Left - Me.PageSettings.Margins.Right) / 2
<!--[endif]-->
3)那我們把PrintWidth設成(1)的2倍,由於超過了紙張的寬度,所以出現紅線了。
<!--[endif]-->
看了這麼多例子,PrintWidth到底應該這麼設置啊?
一種就是像例1那樣,設置成紙型寬度減去左右余白。這樣會有一個問題,有些分欄帳票分欄數過多,導致一頁打不下,多余的部份會不顯示出來。假如用戶不介意或就是要求這樣,那就用這種發法。
第二種就是把PrintWidth設成模版內實際內容的寬度。就像上節例子那樣
Me.PrintWidth = Me.subReport2.Left + Me.subReport2.Width
這樣,萬一PrintWidth超過了紙型寬度的話,出紅線。
我們項目中一般使用的方法是2者的結合體: