線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1257
推到 Plurk!
推到 Facebook!

Canvas.TextOut() 轉出文字到雷射和點陣印表機,列印位置有差異

尚未結案
cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-03-09 16:45:30 IP:211.75.xxx.xxx 未訂閱
各位好,
我用 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
尊榮會員


發表:38
回覆:741
積分:875
註冊:2002-06-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-03-09 21:28:04 IP:114.35.xxx.xxx 訂閱
套表,不同印表機要微調,很正常的
就算是同一台印表機,驅動程式版本不同都可能要微調

印表機有「不可列印邊界」,每一台都不同,
可以從 GetDeviceCaps(hPrinter, PHYSICALOFFSETX)
以及 GetDeviceCaps(hPrinter, PHYSICALOFFSETY) 取得
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-03-10 09:44:52 IP:211.75.xxx.xxx 未訂閱
我有一支舊程式可以參考,這支程式無論印哪一台印表機,雷射或點陣,印出來的位置都相同,所以是有辦法的。
我的程式,印在離上邊緣1.5 分公,就往下一行,列印位置差了一行的高度,真的差太多了,Y 愈往下,就差更多,甚至兩行、三行。
===================引 用 sryang 文 章===================
套表,不同印表機要微調,很正常的
就算是同一台印表機,驅動程式版本不同都可能要微調

印表機有「不可列印邊界」,每一台都不同,
可以從 GetDeviceCaps(hPrinter, PHYSICALOFFSETX)
以及 GetDeviceCaps(hPrinter, PHYSICALOFFSETY) 取得
系統時間:2017-10-24 19:33:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!