找回密码
 立即注册

QQ登录

只需一步,快速开始

joeyxiaobin

注册会员

3

主题

9

帖子

24

积分

注册会员

积分
24
最新发帖
joeyxiaobin
注册会员   /  发表于:2017-3-24 15:31  /   查看:4509  /  回复:4
各位同行,本人在一个项目中需要适应自定义尺寸纸张的打印,在代码中是这样设置的: this.PageSettings.PaperKind = System.Drawing.Printing.PaperKind.Custom;
            this.PageSettings.PaperHeight = 2f;
            this.PageSettings.PaperWidth = 4f;

现在奇怪的事情来了
如果需要打印的客户端上使用的是网络打印机,打印的时候就会报错
System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.ApplicationException: Failed to open the \\10.164.34.36\HP LaserJet Professional M1136 MFP printer, System error number: 5
   在 GrapeCity.ActiveReports.Extensibility.Printing.DDPaperSize.AddCustomPaperSize(String printerName, String paperName, Single width, Single height)
   在 GrapeCity.ActiveReports.Extensibility.Printing.DDPaperSize..ctor(String printerName, String paperName, Single width, Single height)
   在 GrapeCity.ActiveReports.SectionReport.#azb()
   在 GrapeCity.ActiveReports.SectionReport.#1yb(Boolean bDelayedInit)
   在 GrapeCity.ActiveReports.SectionReport.Run(Boolean syncDocument)
   在 GrapeCity.ActiveReports.SectionReport.Run()
   在 PrintReportsProgram.PackMaterialBarcode..ctor(DataTable dt)
   在 FormAppProgram.FunCommon.PrintPackMaterialBarcodeByDateAndSupplier(String fdate, String supplier)
   --- 内部异常堆栈跟踪的结尾 ---
   在 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   在 System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   在 DCommon.frmComReport.CommonToolStripMenuItem_Click(Object sender, EventArgs e)


从日志来看,好像是网络打印机无法打开,但是如果将以下代码: this.PageSettings.PaperKind = System.Drawing.Printing.PaperKind.Custom; 删掉,重新编译就不会报错了,还是同样的网络打印机,但是纸张就不是自定义的了,而是默认的纸张大小
还有一种情况,如果我默认的打印机不是网络打印机,是本机连接的打印机,加上这条代码:this.PageSettings.PaperKind = System.Drawing.Printing.PaperKind.Custom; 后也不会报错,而且预览的纸张大小就是我自定义的纸张大小。


我估计原因是出 在 GrapeCity.ActiveReports.Extensibility.Printing.DDPaperSize.AddCustomPaperSize(String printerName, String paperName, Single width, Single height),这里,对网络打印机自定义纸张设置没权限?
其他同行有没有碰到,求大神帮忙,不胜感激!

4 个回复

倒序浏览
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2017-3-24 16:29:57
沙发
这个说明连接的打印机默认纸张没有您设置的纸,所以会报错

设置rpt.document.printer.name="";
回复 使用道具 举报
joeyxiaobin
注册会员   /  发表于:2017-3-26 13:41:36
板凳
@Lenka.Guo
下面代码加上: this.PageSettings.PaperKind = System.Drawing.Printing.PaperKind.Custom;
            this.PageSettings.PaperHeight = 2f;
            this.PageSettings.PaperWidth = 4f;
在打印机安装的电脑上运行时就不会报错,在其他电脑上指定这个网络打印机就会报错,说明问题不是打印机默认纸张没有您设置的纸。
同样的,如果我默认打印机不是网络打印机,是一个普通的A4纸张打印机,默认纸张是A4,,加上这段代码后页不会报错,而且预览出来也是自定义纸张
回复 使用道具 举报
joeyxiaobin
注册会员   /  发表于:2017-3-26 13:43:48
地板
最终报错是出在这里:在 GrapeCity.ActiveReports.Extensibility.Printing.DDPaperSize.AddCustomPaperSize(String printerName, String paperName, Single width, Single height) ,增加自定义纸张的方法中,对于任何网络打印机都报错,对于本机安装的打印机都不会报错。
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2017-3-27 12:26:36
5#
本帖最后由 Lenka.Guo 于 2017-3-27 12:27 编辑

您使用的方法有问题DDPaperSize() ,请使用代码来测试打印:

var rpt = new SectionReport1();
rpt.Run(false);
var sectionDocument = rpt.Document;
rpt.Document.PaperKind = System.Drawing.Printing.PaperKind.CustomsectionDocument.Print(true, true, false);

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部