寻找平推打印机高手!!!使打印出的页面逆时针旋转90度输出?(实际为300分) 急!!! (100分)

  • 主题发起人 主题发起人 jammi
  • 开始时间 开始时间
J

jammi

Unregistered / Unconfirmed
GUEST, unregistred user!
如何使打印出的页面逆时针旋转90度输出?(实际为300分)
我的打印机为OKI5530
我用了行列重排的方法打印,又发现一个新问题?
就是用带@的字体可以使汉字逆时针转90度,但对半角的字母或数字却无能为力,
弄成全角打印又会改变格式,各位请提供良方?

各位打印高手有兴趣的话关注我的另一个打印问题(400分)
http://www.delphibbs.com/delphibbs/dispq.asp?lid=741550
 
能不能自己Create一个Font赋给打印机的Canvas?
你可以试试

完整源码在DDG5的第8章的MakeFont:
procedure TMainForm.MakeFont;
begin

// Clear the contents of FLogFont
FillChar(FLogFont, sizeof(TLogFont), 0);
// Set the TLOGFONT's fields
with FLogFontdo

begin

lfHeight := StrToInt(seHeight.Text);
lfWidth := StrToInt(seWidth.Text);
lfEscapement := StrToInt(cbEscapement.Items[cbEscapement.ItemIndex]);
lfOrientation := StrToInt(cbOrientation.Items[cbOrientation.ItemIndex]);
lfWeight := WeightArray[cbWeight.ItemIndex];
lfItalic := ord(cbxItalic.Checked);
lfUnderline := ord(cbxUnderLine.Checked);
lfStrikeOut := ord(cbxStrikeOut.Checked);
lfCharSet := CharSetArray[cbCharset.ItemIndex];
lfOutPrecision := OutPrecArray[cbOutPrec.ItemIndex];
lfClipPrecision := ClipPrecArray[cbClipPrec.ItemIndex];
lfQuality := QualityArray[rgQuality.ItemIndex];
lfPitchAndFamily := PitchArray[rgPitch.ItemIndex] or FamilyArray[cbFamily.ItemIndex];
StrPCopy(lfFaceName, cbFontFace.Items[cbFontFace.ItemIndex]);
end;

// Retrieve the requested font
FHFont := CreateFontIndirect(FLogFont);
// Assign to the Font.Handle
pbxFont.Font.Handle := FHFont;
pbxFont.Refresh;
end;

 
DDG5的第8章的MakeFont 什么意思?
 
用带@的字体,不就可以转90度了吗?
 
sorry!我没讲清楚,我是想让整个打印页面逆时针旋转90度,各位支个高招吧!
 
其实,设置纸张旋转一下不行吗?
或者打印到canvas.保存为图片,然后旋转,那样还可以缩放,呵呵
 
to 吴下阿蒙:纸张只能顺时针旋转90度,我的打印机不支持图片打印
 
這個恐怕難辦﹐你的打印機又不支持圖片﹐只有找有沒有那種字體了。你用@字體不行嗎﹖
 
你还是考虑xianjun 的方法吧,例子在《delphi4开发大全》里有,
《delphi5开发指南》是最新版,应该也有吧
 
各位:
既然不支持图片打印,xianjun 的方法是肯定不行了,WINDOWS的字体也不行了。
也就是说,只能打字符,只能用打印机自带的字体(没说错吧)。
即使在UCDOS下,如果不支持图片打印,也无法用UCDOS所带字体。
因此,我觉得难以做旋转。除非打印机自带字体旋转功能,然后在输出内容前用
程序把字符先作屏幕旋转再打印。
 
其实用@可以旋转,但只能一个一个的旋转。
我想实现打印出来后是原页面逆时针旋转90度的效果。
就是讲内容打印在一张逆时针旋转90度后放进打印机里的表格上

 
》》其实用@可以旋转
你试过了吗?除非你的打印机支持图片打印,否则不可能的。
 
Huzzz在这方面是强项,有问题问他吧
除了上面我贴的那个我就没其他招了。[:)]
 
我试过,@可以使单个字符旋转,但一行字符打印出来还是横的,我想打印出来的效果是
从下往上竖着排
 
>>@可以使单个字符旋转
这说明打印机自带字体有旋转功能(还是只能用打印机的字体),还是那句:
在输出内容前用程序把字符先作屏幕旋转再打印。
如:要打印
123
456
则输出:
41
52
63
字体再旋转。不过要整页输出才行。
 
如何做屏幕旋转?重新拼接要打印的内容?
如:要打印
123
456
则输出应该是:
36
25
14
 
在程序中做一个缓冲区,打印满一页时再作旋转、打印输出,具体我懒得写了。

Buf: array[1..80,1..60] of char;//缓冲区80x60
OutBuf: array[1..60,1..80] of char;//输出缓冲区60x80
CarPos: TPoint;//当前写入位置

procedure BufPrint(str: string);
begin

往Buf写入STR,并更改CarPos;
if CarPos 已到页尾 then

begin

将Buf内容旋转并输出到OutBuf;
将OutBuf内容发至打印端口;
end;

end;
 
支持xianjun,我使用的TMU-375打印机由于打印范围太小,只有6。5CM,无奈之下,
用CreateFontIndirect对字体旋转后,使用TMU-375打印机用来打发票。
据我的测试,CreateFontIndirect在98/ME之下的使用效果极为糟糕,在于2000下表现
尚可接受。我自己的发票打印程序就是在于2000下运行的。
至于Huzzz的做法,有些情况下可能实现起来比较困难。
比如说,有些打印机的水平方向PPI值与垂直方向的PPI不一样,在这种情况下,转置
的算法就很难实现。
 
我用了行列重排的方法打印,又发现一个新问题?
就是用带@的字体可以使汉字逆时针转90度,但对半角的字母或数字却无能为力,
弄成全角打印又会改变格式,各位请提供良方?
 
有没有一个方法,是可以先从页尾开始打印的?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部