Canvas.TextOut() 轉出文字到雷射和點陣印表機,列印位置有差異 |
尚未結案
|
cancer
高階會員 ![]() ![]() ![]() ![]() 發表:58 回覆:319 積分:190 註冊:2004-07-31 發送簡訊給我 |
各位好,
我用 printer.Canvas.TextOut() 輸出文字到印表機,紙張是表格,使用者選雷射列印,位置都正確,但選點陣印表機的話,位置都比較偏右和偏下,差了一行字的高度,沒有印在表整紙的格子裡面,程式大致如下,不曉得是甚麼原因? var ResX, ResY, X, Y : integer; RatioX, RatioY : double; // 縮放比例 ... begin ..... // 初始化從略 ResX := GetDeviceCaps(myprinter.Handle, LOGPIXELSX); // 水平解析度 dpi ResY := GetDeviceCaps(myprinter.Handle, LOGPIXELSY); // 重直解析度 dpi if ResX <= 180 then // <= 180 是點陣 begin RatioX := ResX / 96; // 點陣保留小數 RatioY := ResY / 96; end else begin // > 180 是雷射 RatioX := Floor(StrToFloat(FormatFloat('#0', ResX / 96))); // 運射不要小數(跟點陣不會差很多) RatioY := Floor(StrToFloat(FormatFloat('#0', ResY / 96))); end; X := 192; Y := 39; myprint.Canvas.Text(Rount(X * RadioX), Rount(Y* RadioY), '測試文字'); |
sryang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
|
cancer
高階會員 ![]() ![]() ![]() ![]() 發表:58 回覆:319 積分:190 註冊:2004-07-31 發送簡訊給我 |
我有一支舊程式可以參考,這支程式無論印哪一台印表機,雷射或點陣,印出來的位置都相同,所以是有辦法的。
我的程式,印在離上邊緣1.5 分公,就往下一行,列印位置差了一行的高度,真的差太多了,Y 愈往下,就差更多,甚至兩行、三行。 ===================引 用 sryang 文 章=================== 套表,不同印表機要微調,很正常的 就算是同一台印表機,驅動程式版本不同都可能要微調 印表機有「不可列印邊界」,每一台都不同, 可以從 GetDeviceCaps(hPrinter, PHYSICALOFFSETX) 以及 GetDeviceCaps(hPrinter, PHYSICALOFFSETY) 取得 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |