快速準確實現發票套打
概述
發票打印要求將數據準確地打印在空白發票的對應位置,要求數據打印輸出位置準確,并且數據的書寫格式符合發票的填寫要求。本文檔將說明用 Grid++Report 實現發票打印的過程,從中感受到 Grid++Report 輕易做到很多國外報表開發工具很難實現的要求,以及實現票據打印的便利與快速。
下圖是用 Grid++Report 實現的發票打印預覽截圖,從圖中可以看出發票套打需要克服的難點。

數據定位準確快速。
每一筆明細準確輸出到對應行中。
每筆明細的金額準確打印到金額欄位中。
合計金額大寫輸出并準確打印到對應金額位中。
合計大寫金額前輸出圓圈中畫叉圖標。
Grid++Report 為發票套打制作的例子報表為“4j.發票套打.grf”,在安裝目錄的“Samples\Reports”子目錄下。因為例子數據庫不能提供完整的數據,我們制作的例子模板缺少了一些數據,但整個發票打印的要點都涉及到了。
閱讀本文檔要求
要求對 Grid++Report 有一定了解,能夠用 Grid++Report 進行基本的報表設計。
準備任務
- 精確的測量出發票的長度與寬度。
- 掃描出空白發票的圖像,要求圖像方正不扭曲,長寬比例不發生變化。在安裝目錄的‘Samples\Reports\Image\發票背景圖.jpg’就是我們制作的空白發票圖像。
- 如果不具備掃描背景圖的條件,就要量出各個數據輸出區域的左上角位置與大小。位置以發票的左上角為原點。
報表結構分析
為了將發票與報表定義對應起來,我們把整個發票分為三個部分:票頭、明細表格與票尾,這三個部分各自對應報表定義中的報表頭、明細網格與報表尾。
報表模板設計主要步驟
- 定義報表的頁面設置:選定紙型為自定義,根據測量的發票寬高設置紙張寬度與高度;如果寬度超過打印機支持的最大打印寬度,可以將方向設為“橫向”;將四個頁邊距全部設為零。
- 加載背景圖:報表主對象的“背景圖”屬性加載“Samples\Reports\Image\發票背景圖.JPG”,切換到頁面視圖就可以看到背景圖顯示在設計面板中。為了讓背景圖在打印預覽時可見。將報表主對象的‘背景圖預覽’屬性設為‘是’。
- 分別插入一個報表頭,一個報表尾及明細網格。進入頁面視圖,根據背景圖拖放報表頭的高度與票頭一致,報表尾的高度與票尾一致,明細網格標題行的高度與明細表格的表頭一致,明細網格內容行的高度與明細表格的明細行一致。
- 定義票據的數據源:與其它報表設計一樣,請參見例子模板中的定義。如果主項數據不在記錄集中,可以定義對應的參數對象。
- 在報表頭與報表尾中定義主項數據的輸出,選用合適的部件框并擺放在對應的位置。
- 定義明細網格對應的列,根據背景圖設定正確的寬度,內容格關聯對應的字段。因為票據的明細表格與左邊有間距,定義一個空白列對應這個間距。
- 明細金額準確打印到金額欄位中:將該列的內容格設為自由格,然后在其中查入一個綜合文字框,綜合文字框的停靠屬性設為“充滿”,綜合文字框關聯對應的數據,并設置綜合文字框的“字間距”屬性。
- 在報表尾插入兩個綜合文字框,數據為金額求和。其中一個顯示金額合計并打印在金額欄位中,另一個顯示大寫金額,兩者都要設置合適的“字間距”。
- 中文大寫金額:設置數據的格式化串為“$$$$#.00”。
- 圓圈中畫叉圖標:在綜合文字框的文本屬性值前加一個“*”符號,最后綜合文字框的文本屬性為“*[#Sum(Amount):$$$$#.00#]”。
下圖即為我們制作的例子模板:

以上過程讀起來可能會比較晦澀,如果讀者對 Grid++Report 比較熟悉,并參考例子模板,完全可以根據自己的思路把整個報表模板設計出來并應用在自己的程序中。在設計的過程中可以切換到“預覽視圖”,隨時查看設計效果。不要任何代碼參與就可以設計出發票套打功能,只要在程序中關聯實際的數據就可以完成發票打印功能,充分說明了 Grid++Report 是解決我們國內報表與打印任務的最佳工具。
銳浪報表Grid++Report源自2003年,經過多年持續不斷發展,是擁有最多軟件開發者的報表工具。易學易用,功能豐富,成熟穩定,支持各種編程環境下的報表開發。
浙公網安備 33010602011771號