winform打印,自己设置打印纸张大小例如500*800px。急!!!!!

mtmb2012 2010-08-09 10:39:38
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("自定义名称",宽,长)

但是我运行了没有用。
求救,急!!!!在线等~
...全文
1447 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
hengsf2010 2010-11-29
  • 打赏
  • 举报
回复
PS:你的最后还有一点小BUG,估计是分页上有问题。
hengsf2010 2010-11-29
  • 打赏
  • 举报
回复
LZ是好人,大家一起进步。
mtmb2012 2010-08-11
  • 打赏
  • 举报
回复
以下是我的总结,要是你也遇到相似问题可以参考,欢迎回帖(不过分是没了,纯属交流)
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,有的时候会连续走好几张纸,第一张正确,但是后面会带出好几张空白纸,现在没有什么好的解决办法,有谁知道问题出在哪里吗?
xzjxylophone 2010-08-10
  • 打赏
  • 举报
回复
帮你顶 我也不会。
mtmb2012 2010-08-10
  • 打赏
  • 举报
回复
可是为什么前面那两个可以呢?我点打印之后,它们都会生成一个document.tif或者1.xps文档,我就可以看见图片。这又是为什呢?谢谢你啦
jointan 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 mtmb2012 的回复:]
虚拟打印机怎么会出现待打印文件的?囧,全部带打印。。。怎么办啊?
[/Quote]

测试打印,一般就是看页面设置是否正确,对于测试绘图正确与否,一般使用PrintPreviewDialog看就可以了,没必要使用真实打印,检测页面设置是否正确,可以查看待打印文档的属性(任务栏右下角)

对于已发送到打印机的文档,直接在任务栏右下角删除就可以了

如果没有特殊需求,不要用虚拟打印机来测,直接安装直实打印机的驱动就可以了(最好别安U口的),对于大页面,推荐EPSON 1600K驱动,小页面EPSON 680 K驱动,在这些驱动绘图成功的,绘到别的打印机上问题都不是太大。交由用户自己去设置就可以了

mtmb2012 2010-08-10
  • 打赏
  • 举报
回复
虚拟打印机怎么会出现待打印文件的?囧,全部带打印。。。怎么办啊?
mtmb2012 2010-08-10
  • 打赏
  • 举报
回复
好像是‘来源’的原因,用前面两个的时候都是默认纸盒,而用我自己装的就变成自动、手动进纸,自动选择这3个选项。来源怎么改呢?
mtmb2012 2010-08-10
  • 打赏
  • 举报
回复
嘻嘻,又来麻烦你了真不好意思
我装了佳能的虚拟打印机,就是按照步骤下一步下一步地装的
然后打印的时候,怎么一闪,然后就没反应了?然后过一会系统提示错误,打印不了?
前面两个虚拟打印机不是我装的,难道还要设置什么的吗?
jointan 2010-08-10
  • 打赏
  • 举报
回复
这个真不清楚,好象是两个虚拟打印机,第二个用途不明,第一个是格式化照片用的,真实输出依赖于实际安装的真实的打印机驱动
调试打印功能的话不应该用这两个打印机,应该添加一个LPT1口的打印机(不一定必须安装打印机,只添加驱动并设为默认即可,可以双击打印文件夹下的添加打印机,选一个比较常用的品牌和机型就可以)
mtmb2012 2010-08-10
  • 打赏
  • 举报
回复
打的太急,有几个错别字,修改下。。
1、Microsoft Office Document Image Writer
2、Microsoft XPS Document Writer
然后我在2的高级选项里看得到新格式,而在1中只有系统默认的几个类似A4A5之类的格式,没有新格式。
但是我在2中把默认首选等都设为新格式,在代码里也指向了新格式,打印出来却是A4的!但是这个时候如果把打印机选定为1,纸张默认为自定义,然后我惊奇的发现自定义的大小是我设置的新格式,并且用1打印出成功了!
但是如果实现不设置2的话,直接用1,又打印不出来。。
mtmb2012 2010-08-10
  • 打赏
  • 举报
回复
12楼的jointan:
非常感谢,自定义实现了,但是有新的问题出现了,而且有点诡异,能帮我分析下吗?
首先我按照你的方法手工设置了 "服务器属性", 复选创建新格式,输入长宽后保存
但是我的虚拟打印机那里有两个(我也不知道它们是什么关系)
1、Microsoft Office Document Image Writer
2、Microsoft XPS Document Writer
然后我在2的高级选项里看得到新格式,在1中只有系统默认的几个类似A4A5之类的没有新格式
但是我在2中把默认之类的都设为新格式,在代码里也指向你新格式,打印出来却是A4的,但是这个时候如果把打印机选定为1,纸张默认为自定义,然后我惊奇的发现自定义的大小是我设置的新格式,并且用1打印出成功了!
但是如果实现不设置2的话,直接用2,又打印不出来。。
能告诉我这是为什么吗?
非常感谢您啦!
mtmb2012 2010-08-10
  • 打赏
  • 举报
回复
问题解决了~连到真实的打印机上没问题!
哈哈,太开心了~感谢大家的帮助,尤其是jointan!
晚些就结贴散分!!
我也会把步骤心得再系统地总结下,方便以后遇到类似问题的人查阅。
mtmb2012 2010-08-10
  • 打赏
  • 举报
回复
恩。。最后当然是实现纸上打印啦,但是之前要给领导看呀。。。
而且我自己加的新虚拟打印机没有用,由于原来就有的两个虚拟打印机的关系,就连打印预览也很不稳定
要是点错键的话,就要像之前说的设了2,运行后生一个没用的文件,再转换到1,在打印,不然的话,就报错。。
天啊,我的头都疼了
帮我解决问题,真是辛苦你了啊!
jointan 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 xzjxylophone 的回复:]
帮你顶 我也不会。
[/Quote]

你用这个打印功能是为了获取*.tif或者*.xps还是,为了实现在纸上打印的功能?
mtmb2012 2010-08-09
  • 打赏
  • 举报
回复
我要是搜的到,就提问了。。。
谁帮我搜下哈~~给高分啊。。。
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mtmb2012 的回复:]
2楼的(伟康jay)
请问:
if (ps.PaperName.Equals("A2"))//这里设置纸张大小,但必须是定义好的
这句的纸张大小,怎么定义啊?
[/Quote]
网上搜的嘿嘿
mtmb2012 2010-08-09
  • 打赏
  • 举报
回复

2楼的(伟康jay)
请问:
if (ps.PaperName.Equals("A2"))//这里设置纸张大小,但必须是定义好的
这句的纸张大小,怎么定义啊?
mtmb2012 2010-08-09
  • 打赏
  • 举报
回复
还是我自己。。。
下面这个代码也没用啊~
那位高手走过路过,帮个忙啊~~~

// 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);
  • 打赏
  • 举报
回复
//按下打印按钮
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();
}
}
加载更多回复(7)

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧