怎么在C#打印自定义纸张

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么在C#打印自定义纸张相关的知识,希望对你有一定的参考价值。

private void button2_Click(object sender, EventArgs e)

// printDocument1 为 打印控件
//设置打印用的纸张 当设置为Custom的时候,可以自定义纸张的大小,还可以选择A4,A5等常用纸型
foreach (PaperSize paperSize in printDocument1.PrinterSettings.PaperSizes)

if (paperSize.PaperName == "chepai")

printDocument1.DefaultPageSettings.PaperSize = paperSize; break;


this.printDocument1.DefaultPageSettings.PaperSize = new PaperSize("chepai",4800,2200);
this.printDocument1.PrintPage += new PrintPageEventHandler(this.MyPrintDocument_PrintPage);
//将写好的格式给打印预览控件以便预览
printPreviewDialog1.Document = printDocument1;
//显示打印预览
DialogResult result = printPreviewDialog1.ShowDialog();
//if (result == DialogResult.OK)
//this.MyPrintDocument.Print();


上面那句 if (paperSize.PaperName == "chepai")中的chepai 是我在打印服务器属性里添加的自定义的(48cmX22CM)纸张大小。怎么打印出来跟想的不一样啊
预览效果是对的

打的时候就成了

//一般卡的大小:宽:85.60mm(最大85.72mm 最小85.47mm) 高:53.98mm (最大54.03mm 最小53.92mm) 厚:0.76mm (公差为±0.08mm)
  /// <summary>
        /// 打印的按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPrint_Click(object sender, EventArgs e)
         
            
            // printDocument1 为 打印控件
            //设置打印用的纸张 当设置为Custom的时候,可以自定义纸张的大小,还可以选择A4,A5等常用纸型
            this.printDocument1.DefaultPageSettings.PaperSize = new PaperSize("Custum", 500, 300);
            this.printDocument1.PrintPage += new PrintPageEventHandler(this.MyPrintDocument_PrintPage);
            //将写好的格式给打印预览控件以便预览
            printPreviewDialog1.Document = printDocument1;
            //显示打印预览
            DialogResult result = printPreviewDialog1.ShowDialog();
            //if (result == DialogResult.OK)
            //this.MyPrintDocument.Print();
        
 
        /// <summary>
        /// 打印的格式
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MyPrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        
            /*如果需要改变自己 可以在new Font(new FontFamily("黑体"),11)中的“黑体”改成自己要的字体就行了,黑体 后面的数字代表字体的大小
             System.Drawing.Brushes.Blue , 170, 10 中的 System.Drawing.Brushes.Blue 为颜色,后面的为输出的位置 */
            e.Graphics.DrawString("新乡市三月软件公司入库单", new Font(new FontFamily("黑体"),11), System.Drawing.Brushes.Black, 170, 10);
            e.Graphics.DrawString("供货商:河南科技学院", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Blue, 10, 12);
            //信息的名称
            e.Graphics.DrawLine(Pens.Black, 8, 30, 480, 30);
            e.Graphics.DrawString("入库单编号" , new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 9, 35);
            e.Graphics.DrawString("商品名称", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 160, 35);
            e.Graphics.DrawString("数量", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 260, 35);
            e.Graphics.DrawString("单价", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 330, 35);
            e.Graphics.DrawString("总金额", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 400, 35);
            e.Graphics.DrawLine (Pens.Black ,8,50,480,50);
            //产品信息
            e.Graphics.DrawString("R2011-01-2016:06:35", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 9, 55);
            e.Graphics.DrawString("联想A460", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 160, 55);
            e.Graphics.DrawString("100", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 260, 55);
            e.Graphics.DrawString("200.00", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 330, 55);
            e.Graphics.DrawString("20000.00", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 400, 55);
            e.Graphics.DrawLine(Pens.Black, 8, 200, 480, 200);
            e.Graphics.DrawString("地址:新乡市河南科技学院信息工程学院", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 9, 210);
            e.Graphics.DrawString("经办人:任忌", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 220, 210);
            e.Graphics.DrawString("服务热线:15083128577", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 320, 210);
            e.Graphics.DrawString("入库时间:"+DateTime.Now .ToString (), new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 9, 230);
        

参考技术A 你打印要使用printDocument1 这个对象的打印方法打印才可以

,你直接用自带按钮打印的话,是以打印机的默认打印来打印的!!本回答被提问者和网友采纳
参考技术B js 可以实现 window.print()追问

不好意思我是个出学者 这些代码都是我从网上一边找一边改的 我可以加分 你能详细说下吗 我是C#做的

不好意思我是个出学者 这些代码都是我从网上一边找一边改的 我可以加分 你能详细说下吗 我是C#做的

各种误解解释纸张打印机操作系统等误解相关

常见误解1:代码设置了自定义纸张,可适配所有打印机(错误)
纸张设置,参考样例5 http://www.c-lodop.com/demolist/PrintSample5.html
用xps或pdf虚拟打印机测试一下(测试可用样例5),如果虚拟打印机输出的是正确的纸张,真实打印机不是,可能是打印机不支持该自定义纸张。
选择该真实打印机,在打印预览下方状态栏查看一下纸张大小,有的打印机不支持该自定义纸张。

纸张设置,参考样例5 http://www.c-lodop.com/demolist/PrintSample5.html
用xps或pdf虚拟打印机测试一下(测试可用样例5),如果虚拟打印机输出的是正确的纸张,真实打印机不是,可能是打印机不支持自定义纸张。不支持自定义纸张,纸张大小会有问题,或走优先级走默认纸张等。
纸张的一些优先级 http://blog.sina.com.cn/s/blog_721e77e50100wto6.html

打印机不支持这种自定义纸张,可以换用打印机本身自带的纸张,用打印机自带的纸张的纸张名称,参考样例5,宽高设置为0,纸张名称会有效。打印机肯定支持打印机自带的那些纸张尺寸。

误解1.1:预览就有问题,还没打印,和打印机无关(错误)
可以用xps或pdf虚拟打印机预览对比下。
预览是打印机的反显,打印机不同,预览结果不同。

常见误解2:打印机可打区域可以用LODOP调整(错误)
“可打区域”边缘与打印机本身有关,表现在预览里是虚线,可打区域的影响
http://www.c-lodop.com/faq/pp26.html
参考链接,可打区域和打印机有关,LODOP无法控制。

查看下打印机相关设置,咨询下自己用的打印机的相关客服试试。
可以用xps或pdf虚拟打印机测试下,虚拟打印机无可打区域,这个可打区域和打印机有关。

常见误解3:连续打印纸张需要设置纸张高度自适应(错误)
相关博文:Lodop打印连续的纸张、
小票打印机那种,可以设置纸张高度自适应,其他普通打印机都有高度限制的,不能高度自适应。如果不是小票那种,需要设置具体的纸张高度,打印机对最大纸张高度是有限制的。

自适应高度 本质是根据打印语句明确的输出位置信息,来推断出纸张高度,从而确定纸张的高度,一般使用与专用打印机,比如小票打印机,普通打印没有那么高度的纸张;普通的打印机需要设置具体的纸张。

如果不是小票那种,需要设置具体的纸张高度,打印机对最大纸张高度是有限制的。内容多,可分页,进行批量打印,连续输出纸张,批量打印,分页分任务,在页数和任务之间平衡一下,参考样例26http://www.c-lodop.com/demolist/PrintSample26.html

超文本会按照打印项高度或纸张高度进行分页,需要设置具体的纸张高度,会自动分页,不要纸张高度自适应,参考http://www.c-lodop.com/faq/pp17.html

如果打印机不能连续输出,之前有客户反馈打印机有单页模式,和连续打印模式,查看下是否打印机在连续打印模式试试。

常见误解4:横向打印需要旋转纸张(错误)
横向纵向,参考http://blog.sina.com.cn/s/blog_721e77e5010143gh.html
设置打印方向,参考样例5 http://www.c-lodop.com/demolist/PrintSample5.html
横向打印,纵向预览,参考样例16的E http://www.c-lodop.com/demolist/PrintSample16.html

横向纵向 参考http://www.c-lodop.com/blogs/Blog010.html (官网备用链接,当新浪出问题时用)

常见误解5:LODOP可以控制打印机的切纸(错误)
切纸是打印机的功能,lodop无法控制,可以测试下是按照任务还是页数切纸。

误解6:打印机不按份数切纸,lodop可控制(错误)
可能打印机不按照份数切纸,或者执行多次任务试试。
或者咨询下打印机客服,能否按照份数切纸,如果不支持按份数切纸,只能循环多任务或多页试试。参考样例26http://www.lodop.net/demolist/PrintSample26.html

误解7:打印机队列显示错误-正在打印,lodop可以解决
这个是打印机队列的状态,排查下电脑和打印机的连线是否正常,是否打印机脱机。
用xps或pdf虚拟打印机测试下,虚拟打印机正常,说明和打印机或打印机驱动有关。

用xps或pdf虚拟打印机测试下。用其他如word软件测试打印下。
选择该打印机,测试样例7http://www.c-lodop.com/demolist/PrintSample7.html

(1)选择该打印机样例7打印正常,就是自己的程序打印,队列显示错误-正在打印
样例7用这个打印机是可以打印的,说明安装启动正常,打印机连接也正常。
样例7选择这个打印机是正常的,说明这个打印机可以打印样例7的内容。
再选择xps或pdf虚拟打印机测试下,虚拟打印机是否正常。

先用本机虚拟打印机测试下(如win7之后的系统自带xps虚拟打印机,或群文件里的Doro PDF Writer虚拟打印机)
理论上本机虚拟打印没问题的话,说明插件代码没问题,程序可做的努力就的确很少了,毕竟windows下的打印是微软倡导的设备无关系原则,要在打印机和打印驱动程序 系统上排查下。

本机虚拟打印没问题的话,说明插件代码没问题,程序可做的努力就的确很少了,毕竟windows下的打印是微软倡导的设备无关系原则,要在打印机和打印驱动程序 系统上排查下,重装打印机驱动试试。

这个是打印机队列的错误,查看下打印机连接是否正常。
进入队列后就交给windows打印机服务进行打印了,进入队列说明已经成功发送了打印任务,需要排查打印机连接问题等。

常见误解8:word能打,lodop有问题,所以不是打印机原因(错误)
某些标准的功能引起了打印机驱动的故障,而word没有用到这些功能。
删减下语句排查下是哪些LODOP功能引起的。

可以做个简单例子试试,用该打印机测试下样例7http://www.c-lodop.com/demolist/PrintSample7.html
如果样例正常,删减语句排查下是哪些语句功能引起的。

误解9:官网提供的两个钱箱的语句都打不开,lodop可提供更多打开钱箱指令(错误)
打开钱箱,参考http://www.c-lodop.com/faq/pp11.html
如果我们给您的两个例子语句 打不开,就需要咨询一下打印机厂家了
两个例子语句也是其他朋友测试后 能打开的 给我们的,需要自己联系打印机厂商 再验证摸索一下

误解10:在windows某操作系统下,lodop无法使用
和win win 无关,只要是windows系统都可以。
测试下官网样例http://www.c-lodop.com/demolist/PrintSample2.html 是否有什么提示。
右键查看源码,按照官网样例的使用方法。

注意高版本的火狐谷歌需要使用c-lodop,升级到c-lodop或混合部署方式。
参考http://www.c-lodop.com/faq/pp21.html
高版本的火狐谷歌不再支持np插件,需要使用c-lodop,可参考官网样例混合部署http://www.c-lodop.com/LodopDemo.html
Lodop控件升级到C-Lodop云打印 参考http://www.c-lodop.com/faq/pp7.html

测试参考一下官网样例http://www.c-lodop.com/LodopDemo.html
官网样例是混合部署LodopFuncs.js里已经写好了判断。
客户端是浏览器支持np插件,是32位浏览器,就会提示下载32位的Lodop插件:install_lodop32.exe
客户端浏览器支持np插件,是64位浏览器,就会提示下载64位的Lodop插件:install_lodop64.exe
客户端浏览器不支持np插件(判断如高版本谷歌火狐等),会提示下载C-Lodop方式: CLodop_Setup_for_Win32NT.exe

 

以上是关于怎么在C#打印自定义纸张的主要内容,如果未能解决你的问题,请参考以下文章

C#如何设置打印机纸张大小?

打印机驱动程序 - 自定义纸张尺寸

打印 自定义纸张

更改打印机默认纸张大小

各种误解解释纸张打印机操作系统等误解相关

lodopfuncs js插件怎么设置打印的宽高