|
最新Delphi 精確打印Image畫布 以下是三零網(wǎng)為大家整理的最新Delphi 精確打印Image畫布的文章,希望大家能夠喜歡! 最近在做一個打印報告的小軟件,里面需要將Image上顯示的東西,按照“所見即所得”的原則打印出來。 好吧,最直接的方法當然是把Image的畫布以圖片的形式輸出,這樣既不用考慮畫布上信息之間的相對位置,操作又簡單。不過這樣操作有個硬傷:圖片失真。因為打印機分辨率的關系,需要在打印時將畫布上的信息放大,才能匹配打印機的畫布,這樣難免會造成文字信息的拉伸變形。而且,使用圖片打印的話,需要傳輸?shù)酱蛴C的數(shù)據(jù)就會幾何倍增多,影響打印效率(這里還有一個問題,Delphi的Printer打印圖形時,如果直接使用 canvas.stretchdraw 函數(shù)的話,在有的機器或者打印機上運行時會出錯,很不穩(wěn)定。需要處理后才能正常打印,網(wǎng)上有一段直接打印位圖的代碼,可以參考下)。考慮到這些因素,在完成最初的版本之后,又重新選擇直接在打印機畫布上“作畫”的方式。 最初的原則不變,那么從效果上來說還是一樣,還是需要放大的過程。打開VCL,我們發(fā)現(xiàn) Printer單元封裝了大量的有關打印機操作的API函數(shù)(這句是廢話..), 我們在需要獲得打印機畫布信息時,可以很方便的直接調(diào)用屬性。 首先,需要一個放大比例:
為了居中顯示,還需要長寬各方向的偏差:
先來講一下線段、矩形框之類的圖形輸出,這一類比較簡單,只要定位好坐標就可以。 以線段為例:
遇到文字信息時,首先,其坐標設置與線段相同,不過在字體大小設置時,為了像原畫布上那樣,與線段、矩形框這些元素保持相對位置不變,勢必不能使用原始大小。但是像線寬那樣Font.Size:= FontSize * lMultiple; 的話,打印出來的就是大字報了。那么該如何設置呢? 這里,我們需要迂回一下,先設置Printer.Canvas.Font.Height 屬性,方法是:
(如果涉及到多行打印,自動換行問題,需要用到 DrawText 函數(shù),一些設置問題尚在測試中,完成了再拿出來與大家分享) 如此這般,就可以比較精確的實現(xiàn)單行文本輸出了,在Delphi6上測試通過。以上是筆者的一點愚見,如有不當之處,還請不吝賜教,歡迎討論。 延伸閱讀: ·Delphi 打印TDBGrid 內(nèi)容代碼 ·Delphi檢測系統(tǒng)安裝的打印機 ·Delphi調(diào)用ImageMagickObject進行圖片轉換的代碼 ·Delphi通過Com+調(diào)用ImageMagick的范例代碼 ·delphi打印TImage圖片 ·Delphi在畫布上繪制文字輪廓 ·Delphi在畫布上繪制文本 |
|
|