300分求教,怎样在打印机上输出完美的翻转180度的文字,哈哈,难阿! (300分)

  • 主题发起人 主题发起人 dldyj
  • 开始时间 开始时间
D

dldyj

Unregistered / Unconfirmed
GUEST, unregistred user!
在打印机上输出一段文字,其中某部分要翻转180度,若使用canvas.StretchDraw则会出现锯齿现象,请教各位高手怎么才能完美的翻转180度?
 
搞个反过来的字库吧,效果一定好。
 
canvas.textRect()不行吗
 
先生成图形,后输出。
 
自己定义一个逻辑字体,然后再Textout到打印机Canvas上。
var
SaveFont,tf: TFont;
lf: TLogFont;
alpha:Double;
begin
with Printer.Canvasdo
begin
SaveFont := TFont.Create;
tf := TFont.Create;
tf.Assign(你原来的字体);
GetObject(tf.Handle, SizeOf(lf), @lf);
lf.lfEscapement:=Round( 180 *10);
tf.Handle := CreateFontIndirect(lf);
Font.Assign(tf);
TextOut(100,100,'TEST');
end;
 
benesoft:
先生成图形再输出,那样和stretchdraw结果一样,在不同的打印机上肯定要出现锯齿。
blueman:
你的方法对普通的canvas来说不错,但是对打印机来说无效!
 
先用正的打印出来,把那段字裁下来,然后转180度,粘上。[:D]
 
nullx:
想法很好,我试过这个方法,但是输出到printer.canvas的像素是取不回来的!
 
再不行自己弄个临时Bitmap,把fontsize乘上printer.dpi/72,长宽也按比例设,textout到这个bitmap上得到和printer上相同大小的位图,再旋转贴过去不得了。
 
老兄,谁说自己定义一个逻辑字体不能输出到打印机上啦?我刚试了怎么可以?:)
 
blueman:
也可能我作的有什么问题,请看下面这段代码,在image上没有问题,但是到打印机上
就玩完了:该翻转但是没翻转。
with printer.canvasdo
begin
......
TheFont.Assign(Font);
GetObject(TheFont.Handle, SizeOf(LogFont), @LogFont);
LogFont.lfEscapement := 1800;
LogFont.lfOrientation := 1800;
TheFont.Handle := CreateFontIndirect(LogFont);
Font.Assign(TheFont);
textout(x1 + printer.canvas.textwidth('中国'),
y1 + printer.canvas.textheight('中国'), '中国');
.......
end;
 
代码:
var
logfont :TLogFont;
Hft :HFONT;
begin
with printer.Canvasdo
begin
printer.begin
Doc;
with logfontdo
begin
lfWidth := 0;
lfEscapement := 1800;
lfOrientation :=1800;
lfWeight := FW_NORMAL;
//黑体度
lfItalic := 0;
lfUnderline := 0;
lfStrikeOut := 0;
//删除线
lfCharSet := GB2312_CHARSET;
lfOutPrecision := OUT_DEFAULT_PRECIS;
//字体匹配方式
lfClipPrecision := CLIP_DEFAULT_PRECIS;
//文本裁剪方式
lfQuality := DEFAULT_QUALITY;
//输出质量
lfPitchAndFamily := DEFAULT_PITCH or FF_DONTCARE;
//字体间距和簇
lfheight :=20;
lfFaceName :='宋体';
end;
hft := CreateFontIndirect(logfont);
SelectObject(printer.handle,hft);
windows.TextOut(printer.handle,120,20,'中国人',6);
printer.EndDoc;
end;
这个应该可以了吧!
 
最后再加一句 :
DeleteObject(hft);
 
谢谢陈海帆、blueman。
问题已经参照陈海帆的方法得到解决,看来关键时刻还要靠API了!
谢谢各位!
 
多人接受答案了。
 
后退
顶部