winform打印,自己设置打印纸张大小例如500*800px。应该怎么做呢?
网上的资料找到有:
using System.Drawing.Printing;PrintDocument pd = new PrintDocument();
PaperSize p=null;
foreach(PaperSize ps in pd.PrinterSettings.PaperSizes)
{ if(ps.PaperName.Equals("A3"))
p = ps;
}
pd.DefaultPageSettings.PaperSize = p;
pd.Print();pd.DefaultPageSettings.PaperSize = new PaperSize("自定义名称",宽,长)但是我运行了没有用。
求救,急!!!!在线等~
网上的资料找到有:
using System.Drawing.Printing;PrintDocument pd = new PrintDocument();
PaperSize p=null;
foreach(PaperSize ps in pd.PrinterSettings.PaperSizes)
{ if(ps.PaperName.Equals("A3"))
p = ps;
}
pd.DefaultPageSettings.PaperSize = p;
pd.Print();pd.DefaultPageSettings.PaperSize = new PaperSize("自定义名称",宽,长)但是我运行了没有用。
求救,急!!!!在线等~
解决方案 »
- 转磨VS2008的过来啊,求救。
- winform 创建一个在所有窗体之前的窗体
- c sharp 中Treeview控件的应用
- 脚本引擎需求调查一: 欢迎讨论,进者有分
- |zyciis| 如何在windows 中的任意地方 按了键盘的[F10] 就能掉用我的WinForm程序的一个按钮事件
- 关于在线录制歌曲的程序问题,急切!!!!
- 最大化后dragmove失效
- treeviews中分类后,如何和datagridview对应显示不同的表,不同的种类
- 想买个笔记本搞开发,从舒适度上讲你能忍受吗?
- 刚看c#,问一个很菜的问题,不要笑我
- C#获取系统主音量问题
- 请问有办法用程序控制禁用、启用一个分区吗?
private void button3_Click(object sender, EventArgs e)
{
//打印图像
//显示打印设置对话框
PrintDialog MySettings = new PrintDialog();
MySettings.Document = this.printDocument1;
PaperSize p = null;
foreach (PaperSize ps in MySettings.Document.PrinterSettings.PaperSizes)
{
if (ps.PaperName.Equals("A2"))//这里设置纸张大小,但必须是定义好的
p = ps;
}
MySettings.Document.DefaultPageSettings.PaperSize = p;
if (MySettings.ShowDialog() == DialogResult.OK)
{
this.printDocument1.Print();
}
}
下面这个代码也没用啊~
那位高手走过路过,帮个忙啊~~~// Add list of supported paper sizes found on the printer.
// The DisplayMember property is used to identify the property that will provide the display string.
comboPaperSize.DisplayMember = "PaperName";PaperSize pkSize;
for (int i = 0; i < printDoc.PrinterSettings.PaperSizes.Count; i++){
pkSize = printDoc.PrinterSettings.PaperSizes[i];
comboPaperSize.Items.Add(pkSize);
}// Create a PaperSize and specify the custom paper size through the constructor and add to combobox.
PaperSize pkCustomSize1 = new PaperSize("First custom size", 100, 200);comboPaperSize.Items.Add(pkCustomSize1);
2楼的(伟康jay)
请问:
if (ps.PaperName.Equals("A2"))//这里设置纸张大小,但必须是定义好的
这句的纸张大小,怎么定义啊?
PrintDocument pd = new PrintDocument();
设置时高和宽的单位是百分之一英寸,比如设置为宽度5英寸,高度10英寸
PaperSize ps = new PaperSize("name", (int)(5 * 100), (int)(10 * 100));
pd.DefaultPageSettings.PaperSize = ps;
我试过的,没有问题
这种方法在Win2000,XP以上的版本中不能用(NT4能不能用不知道),98下可以W2K以上,如果需要自定义纸张,手工的方式如下:"控制面板-打印机"的文件菜单中选择"服务器属性", 复选创建新格式,输入长宽后保存在代码中如下使用:
foreach (PaperSize paper in printDoc.PrinterSettings.PaperSizes)
{
if (paper.PaperName == "自定义纸张名称")
{
printDoc.DefaultPageSettings.PaperSize = paper;
break;
}
}
千万不要用 printDoc.DefaultPageSettings.PaperSize = new PaperSize()这种方式,就算你输入的属性全对,PrintDocument也未必会设置正确如果你想把软件做的更牛一点,那就是自己用代码在服务器属性中添加自定义纸张,
需要调用API AddForm函数,写这个比较麻烦一些,前几年写过一个,现在不知在不在了,先看看有没有人其他人提供吧
非常感谢,自定义实现了,但是有新的问题出现了,而且有点诡异,能帮我分析下吗?
首先我按照你的方法手工设置了 "服务器属性", 复选创建新格式,输入长宽后保存
但是我的虚拟打印机那里有两个(我也不知道它们是什么关系)
1、Microsoft Office Document Image Writer
2、Microsoft XPS Document Writer
然后我在2的高级选项里看得到新格式,在1中只有系统默认的几个类似A4A5之类的没有新格式
但是我在2中把默认之类的都设为新格式,在代码里也指向你新格式,打印出来却是A4的,但是这个时候如果把打印机选定为1,纸张默认为自定义,然后我惊奇的发现自定义的大小是我设置的新格式,并且用1打印出成功了!
但是如果实现不设置2的话,直接用2,又打印不出来。。
能告诉我这是为什么吗?
非常感谢您啦!
1、Microsoft Office Document Image Writer
2、Microsoft XPS Document Writer
然后我在2的高级选项里看得到新格式,而在1中只有系统默认的几个类似A4A5之类的格式,没有新格式。
但是我在2中把默认首选等都设为新格式,在代码里也指向了新格式,打印出来却是A4的!但是这个时候如果把打印机选定为1,纸张默认为自定义,然后我惊奇的发现自定义的大小是我设置的新格式,并且用1打印出成功了!
但是如果实现不设置2的话,直接用1,又打印不出来。。
调试打印功能的话不应该用这两个打印机,应该添加一个LPT1口的打印机(不一定必须安装打印机,只添加驱动并设为默认即可,可以双击打印文件夹下的添加打印机,选一个比较常用的品牌和机型就可以)
测试打印,一般就是看页面设置是否正确,对于测试绘图正确与否,一般使用PrintPreviewDialog看就可以了,没必要使用真实打印,检测页面设置是否正确,可以查看待打印文档的属性(任务栏右下角)对于已发送到打印机的文档,直接在任务栏右下角删除就可以了如果没有特殊需求,不要用虚拟打印机来测,直接安装直实打印机的驱动就可以了(最好别安U口的),对于大页面,推荐EPSON 1600K驱动,小页面EPSON 680 K驱动,在这些驱动绘图成功的,绘到别的打印机上问题都不是太大。交由用户自己去设置就可以了
你用这个打印功能是为了获取*.tif或者*.xps还是,为了实现在纸上打印的功能?
哈哈,太开心了~感谢大家的帮助,尤其是jointan!
晚些就结贴散分!!
我也会把步骤心得再系统地总结下,方便以后遇到类似问题的人查阅。
1、先在click事件里写代码
this.pageSetupDialog1.Document = this.printDocument1;
try
{
if (this.pageSetupDialog1.ShowDialog() == DialogResult.OK)
{
foreach (PaperSize paper in this.printDocument1.PrinterSettings.PaperSizes)
{
if (paper.PaperName == "新格式")
{
this.printDocument1.DefaultPageSettings.PaperSize = paper;
break;
}
}
this.printDocument1.Print();
}
}
catch (Exception excep)
{
MessageBox.Show(excep.Message, "print error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
2、在控制面板/打印机和传真/文件/服务器属性/
3、在创建新格式复选框前打钩
4、在表格名里填写你格式的名字(我写的新格式)
5、设置宽度、高度、边距
6、保存格式,确定
然后连接上打印机,在页面设置选项框里,选择你格式的名字(新格式),最后打印就好了。
每次重新运行后都要重新在页面设置选项框里,选择你格式的名字(新格式),最后打印,要是想默认为你设置的格式,要继续以下步骤:
1、在控制面板/打印机和传真的窗口里选择打印机,右键,属性
2、在属性窗口里,常规/打印首选项,选高级,纸张规格的下拉框里选择你的格式名字(新格式),确定
3、回到属性窗口里,高级(刚刚是常规)/打印默认值,选高级,纸张规格的下拉框里选择你的格式名字 (新格式),确定
好了,现在就已经全部结束了。
要是我有错误欢迎指出,或者有更好的办法也欢迎大家回帖!
我的5*8问题最后还有一点小BUG,有的时候会连续走好几张纸,第一张正确,但是后面会带出好几张空白纸,现在没有什么好的解决办法,有谁知道问题出在哪里吗?