如何设置 自定义纸张
我用下面的方法设置了自定义纸张,但打印时,打印机不能按 高度 300 的来分页,为了这
个我已两晚没睡好了,希望高手帮帮啦,,,
PrintDocument1.DefaultPageSettings.PaperSize = New PaperSize("Custom Paper Size", 433, 300)
问题点数:0、回复次数:31Top
1 楼bitsbird(一瓢 在路上...)回复于 2004-05-04 12:15:20 得分 0
感谢您使用微软的产品。
您可以首先生成一个自定义的PageSize对象,然后赋给PrintDocument对象的DefaultPageSettings.PaperSize属性,这样可以达到自定义Page大小的目的。
我是这样实现的,您可以参考以下:
private System.Drawing.Printing.PrintDocument pd;
private StreamReader streamToPrint;
printFont = new Font("Arial", 10);
streamToPrint = new StreamReader ("PrintMe.Txt");
PaperSize pkCustomSize1 = new PaperSize("First custom size", 800,500);
pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
pd.DefaultPageSettings.PaperSize =pkCustomSize1;//将自定义的Papersize赋给PrintDocument
pd.DefaultPageSettings.PaperSize.Height =500;//您可以修改pagesize的大小
pd.DefaultPageSettings .PaperSize .Width =800;
pd.Print();
private void pd_PrintPage(object sender, PrintPageEventArgs ev)
{...}
关于PaperSize对象的构造方法您可以参看:
.NET Framework Class Library
PaperSize Constructor
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdrawingprintingpapersizeclassctortopic.asp
- 微软全球技术中心 开发技术支持
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款
(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查
(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
Top
2 楼blue_apple(蓝苹果)回复于 2004-05-04 13:03:15 得分 0
楼上,我用下面的语句
PrintDocument1.DefaultPageSettings.PaperSize = New PaperSize("Custom Paper Size", 433, 300)
也可以自定义纸张,在 PrintPreviewDialog1 里也可以预览到,但打印时,我用的是连打
纸,打完第一张后,按正常来说,纸张移位应是 300, 但它不是,纸张移位是A4的高度,
这样的话,第二张就移位了。
用下面的语句
PrintDocument1.DefaultPageSettings.PaperSize = PrintDocument1.PrinterSettings.PaperSizes(PaperKind.A5)
纸张移位的移位是好正常,刚好是A5的高度。
你有没有试打印过呀,麻烦你试一下,如果OK的话,告诉我一声。
我用的打印机是:LQ1600KIII。Top
3 楼jhnhu(玩的就是技术)回复于 2004-05-04 13:20:37 得分 0
有时候用这种方法自定义打印
在打印机上设自定义纸张(打开"打印机和传真"窗口,文件->服务器属性->创件新格式,用尺量一下纸,把数据填进去。),把LQ1600的默认纸张设成自定义的。
直接用程序打就是了,换页的功能交给打印机驱动Top
4 楼blue_apple(蓝苹果)回复于 2004-05-04 13:51:25 得分 0
楼上,你的方法是OK的,我刚刚试过,先感谢,
用程序设置不行吗?,我想,是可以的,因为WORD2000里 有自定义纸张打印的。
麻烦大家帮帮忙啦,,在线等!!Top
5 楼blue_apple(蓝苹果)回复于 2004-05-04 17:47:09 得分 0
UPTop
6 楼jhnhu(玩的就是技术)回复于 2004-05-04 23:54:12 得分 0
word2000不是基于.net的,实现方法相对.net比较底层
.net的打印还没研究透,好象很多都是不可行的
比如我想把 边 设置为0(内容可以撑满整张纸) ,好象是不行的,那个属性只能get,不能setTop
7 楼blue_apple(蓝苹果)回复于 2004-05-05 18:08:18 得分 0
我自己顶Top
8 楼wahahasnail(笑东笑西笑南笑北笑来笑去笑自己原来无知无识)回复于 2004-05-06 13:42:27 得分 0
up!Top
9 楼chinahth(淡若浮云)回复于 2004-05-06 17:12:53 得分 0
顶Top
10 楼blue_apple(蓝苹果)回复于 2004-05-08 20:35:09 得分 0
upTop
11 楼blue_apple(蓝苹果)回复于 2004-05-09 15:07:12 得分 0
没人理吗?Top
12 楼qqws(十年树木,百年树袋熊)回复于 2004-06-07 21:22:56 得分 0
这个难题难道没有人解决吗?Top
13 楼allanli(若尘)回复于 2004-06-07 22:14:01 得分 0
可以解决的,我公司现在用的打印类就可以实现自定义纸张打印.
不过必须动态添加纸张格式,也就是用程序完成'jhnhu(玩的就是技术) '所说的步骤
Top
14 楼AntingZ(夕惕若)回复于 2004-06-07 23:21:32 得分 0
不知道水晶报表的打印可不可以自定义纸张?Top
15 楼jhnhu(玩的就是技术)回复于 2004-06-08 21:00:13 得分 0
水晶报表 for .net
在设计界面上 右键 设计xx(菜单忘了)
然后选择打印机,选择在打印机上设置的自定义纸张,界面上的纸马上就变成自定义大小了
还是上面说的原理,把换页交给打印机Top
16 楼njhyh(小辉)回复于 2004-06-09 13:21:41 得分 0
Private Sub PrintDoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDoc.PrintPage
'定义指向Graphics的指针
Dim g As Graphics
'每页中可打印的文本行数
Dim linesPerPage As Long
'记录打印的当前行
Dim Current As Long
'当前的纵坐标
Dim y As Double
'页的左边距
Dim left As Double
'页的顶边距
Dim top As Double
'要输出的文本
Dim strOutput As String
'打印字体
Dim PrintFont As System.Drawing.Font
'打印时使用的刷子
Dim brush As New System.Drawing.SolidBrush(Color.Black)
'当前活动的子窗体
Dim activeChild As Form = Me.ActiveMdiChild
'子窗体中的RichTextBox控件
Dim theBox As RichTextBox
'获得当前活动的子窗体
activeChild = Me.ActiveMdiChild
'获得子窗体的RichTextBox控件
theBox = CType(activeChild.ActiveControl, RichTextBox)
'设置打印字体
PrintFont = theBox.Font
'获得Graphics对象
g = e.Graphics
'设置页面的左边距
left = e.MarginBounds.Left
'获得页面的上边距
top = e.MarginBounds.Top
'计算每页能打印的行数
'顶端留出两行用于打印标题,底端留出两行用于打印注脚
linesPerPage = e.MarginBounds.Height / PrintFont.GetHeight(g) - 4
'设置打印的起始位置
y = top
'输出标题
g.DrawString(activeChild.Text, PrintFont, brush, left, y)
'设置正文的输出位置
y = top + 2 * PrintFont.GetHeight(g)
'循环输出正文
While Current < linesPerPage
'读取要输出的内容
strOutput = line.ReadLine()
'如果没有要打印的内容,则中止循环
If Not strOutput Is Nothing Then
'计算要输出的纵坐标位置
y = y + PrintFont.GetHeight(g)
'输出正文
g.DrawString(strOutput, PrintFont, brush, left, y)
Else
Exit While
End If
End While
'设置注脚的输出位置
y = e.MarginBounds.Bottom - PrintFont.GetHeight(g)
'输出注脚
g.DrawString("Footer", PrintFont, brush, e.MarginBounds.Width / 2, y)
'如果这一页没有打完正文,将HasMorePages属性设置为True,
'这将再次激发PrintPage事件
If Not strOutput Is Nothing Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
End Sub
你试试???Top
17 楼jhnhu(玩的就是技术)回复于 2004-06-09 19:57:05 得分 0
njhyh(小辉)给的只不过是msdn中的代码罢了,和纸张没有任何关系Top
18 楼blue_apple(蓝苹果)回复于 2004-06-10 19:45:22 得分 0
94 没有提到换页Top
19 楼njhyh(小辉)回复于 2004-06-11 07:59:41 得分 0
呵呵!!upTop
20 楼qqws(十年树木,百年树袋熊)回复于 2004-06-14 08:41:12 得分 0
难道就没有办法解决自定义纸张了吗?WIN API有没有什么设置纸张的函数啊Top
21 楼allanli(若尘)回复于 2004-06-14 10:15:29 得分 0
不是说了嘛!在现阶段的.NET版本是不能像word一样随便自定义纸张大小的(尽管你设置自定义纸张后预览可以正常显示,但打印时走纸还是没能按照预览纸张走纸,不过用些小技巧也可达到表面上可以),只能通过API动态添加我们需要的纸张格式,也就是'jhnhu(玩的就是技术) '说的那几个步骤用代码实现就可以了.这个方法我们公司已经使用很久了,效果很好,只要打印机本身支持自定义纸张大小和你添加的纸张格式能够被你的打印机所支持(具体就是能够通过'jhnhu(玩的就是技术) '的办法正常打印).这种办法有几个缺点,就是如果打印机是网络打印机的话,那么必须先在打印机所在机器先添加纸张格式(你可以先在那台电脑运行程序定义所有可能的打印纸格式),还有就是如果用户用到的纸张格式很多,那么就会在电脑添加了很多纸张格式了(不过可以通过动态添加动态删除的就可以做到word一样效果了)Top
22 楼blue_apple(蓝苹果)回复于 2004-06-16 20:35:38 得分 0
请问楼上 “动态添加动态删除”是怎样实现的呀,
还有,'jhnhu(玩的就是技术) ' 说的那种方法 在win98是怎样设置的呀???Top
23 楼webmasterss(天涯解语花)回复于 2004-06-16 22:56:01 得分 0
最简单的就是在系统里设置服务器属性,定义新的纸张格式。
程序控制不是对所有型号和品牌的打印机都管用,可以调API或者你可以看看打印机说明书,过纸的时候直接发送给他16进制字串,控制过纸长度!Top
24 楼webmasterss(天涯解语花)回复于 2004-06-16 22:58:33 得分 0
再补充一下,调API不是对所有打印机都管用,我试过,但用直接给打印家发字串的方式肯定能成功!Top
25 楼blue_apple(蓝苹果)回复于 2004-06-17 14:34:06 得分 0
楼上,能不能给个例程呀?Top
26 楼blue_apple(蓝苹果)回复于 2004-09-02 16:27:50 得分 0
upTop
27 楼blue_apple(蓝苹果)回复于 2004-09-19 00:14:04 得分 0
upTop
28 楼wangjunhua22(wang)回复于 2004-09-19 18:14:31 得分 0
在操作系统中打印机-->属性--自定义纸张就0k了。
Top
29 楼blue_apple(蓝苹果)回复于 2004-09-20 21:32:02 得分 0
up,这个问题没有人能解决吗,.NET也太差了Top
30 楼hzfu007(幻影)回复于 2004-09-21 08:58:24 得分 0
帮你up一下。和你同感!Top
31 楼kikosisi(kikosisi)回复于 2004-09-21 10:37:10 得分 0
和打印机有关系,设置了吗?
打印机不同,打的效果也不同
Top




