Vb.Net 打印相关(自定义纸张尺寸等)

soothbug 2016-07-13 11:37:39
最近写一个小程序,要实现非常见规格的纸张套打(15x9厘米,可变)
程序有一个form作为主窗口(加载和修改待打印内容),另一个form作为设置窗口(页面尺寸,上下留白,字体,等)
目前的PrintDocument控件是加在主窗口中的

想实现的功能是:主窗口载入文件,设置窗口设置页面尺寸,回主窗口点打印按钮就直接打出来。

目前卡在自定义纸张尺寸这里,代码不管怎么改,PrintDocument.PrinterSettings也好,其他途径也好,打出来都是A4……
于是就想着曲线救国,试试看改打印服务器里的纸张列表,也没成功。

度娘找了好久都没解决,求帮助~~~

注,1,目标平台:Visual Studio 2005
  2,因功能要求,需要尽量避免使用类似自带的PageSetupDialog这类窗口。
  3,如果可以改变并调用下图中打印服务器的纸张列表,如何操作?
  4,额外的小问题,程序目前有两个内嵌到Resource中的图标文件,一个作为主程序图标,一个作为对应文件的图标(两者之间就是类似word.exe和123.doc的图标之间的关系),但是在设置文件打开方式过程中,注册表键值改为"...\...\...exe,1"时,文件图标还是空白的,使用eXeScope分析,exe中只有一个编号为32512的图标资源,这是为什么?要怎么才能实现将多个图标正确的编译到exe中?

本人菜鸟,先谢过~ 要多少分您开口,只要问题能解决

------------------------------------------------------------



...全文
1268 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzybc 2016-08-04
  • 打赏
  • 举报
回复
15x9厘米 转换成像素(!!!)
D56233577 2016-07-29
  • 打赏
  • 举报
回复
确实可以用代码控制纸张并直接打印,前提是你的打印机支持指定的尺寸,需要有相关检测的代码。 我做的项目中,可以打印各种尺寸的标签,我想你现在写的代码有遗漏。
轻鸿万里 2016-07-29
  • 打赏
  • 举报
回复
打印事件里添加这行代码 Dim xsjsd As New jsd‘打印的水晶报表名 xsjsd.SetDataSource(tb)’设置打印数据源 xsjsd.PrintOptions.PaperSize = CType(printpaperid("210*140"), CrystalDecisions.Shared.PaperSize)‘210*140是我在打印服务器设置的打印格式。 xsjsd.PrintToPrinter(1, True, 0, 0)‘直接打印出来,不弹出打印提示窗。 ’查找出自定义的纸张格式ID Private Function printpaperid(ByVal papername As String) As Integer Dim pageSettings As New System.Drawing.Printing.PageSettings() If Trim(My.Settings.printname) <> "" Then pageSettings.PrinterSettings.PrinterName = My.Settings.printname End If For Each pageSize As System.Drawing.Printing.PaperSize In pageSettings.PrinterSettings.PaperSizes If pageSize.PaperName = papername Then printpaperid = pageSize.RawKind Exit For End If Next End Function
lhblxm 2016-07-25
  • 打赏
  • 举报
回复
printDocment类只负责绘图,就是在打印机提供的纸张尺寸中的特定位置(打印区域)绘制,纸张尺寸是打印机管理的,一般是这样来设置 PrintDocument1.DefaultPageSettings = PageSetupDialog1.PageSettings 可以参考VS的自带打印示列程序
soothbug 2016-07-24
  • 打赏
  • 举报
回复
引用 7 楼 u011266608 的回复:
不同尺寸对应不同的打印机,打印时调用不同的打印机....
只是针对默认打印机的行为,没必要枚举打印机的吧?
楚狂歌 2016-07-19
  • 打赏
  • 举报
回复
不同尺寸对应不同的打印机,打印时调用不同的打印机....
soothbug 2016-07-19
  • 打赏
  • 举报
回复
以下例子主体来源于MSDN,经过简单修改(核心部分未动)

经测试,可以打印,但是无法打印成自定义纸张大小


Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
' 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"

Dim pkSize As PaperSize
comboPaperSize.Items.Clear()
For i As Integer = 0 To printDoc.PrinterSettings.PaperSizes.Count - 1
pkSize = printDoc.PrinterSettings.PaperSizes.Item(i)
comboPaperSize.Items.Add(pkSize)
Next

' Create a PaperSize and specify the custom paper size through the constructor and add to combobox.
Dim pkCustomSize1 As _
New PaperSize("My Custom Paper Size", CInt(TextBox1.Text), CInt(TextBox2.Text))
comboPaperSize.Items.Add(pkCustomSize1)

comboPaperSize.SelectedIndex = 0

' Add list of paper sources found on the printer to the combo box.
' The DisplayMember property is used to identify the property that will provide the display string.
comboPaperSource.DisplayMember = "SourceName"

Dim pkSource As PaperSource
comboPaperSource.Items.Clear()
For i As Integer = 0 To printDoc.PrinterSettings.PaperSources.Count - 1
pkSource = printDoc.PrinterSettings.PaperSources.Item(i)
comboPaperSource.Items.Add(pkSource.SourceName)
Next

comboPaperSource.SelectedIndex = 0

' Add list of printer resolutions found on the printer to the combobox.
' The PrinterResolution's ToString() method will be used to provide the display string.
'Dim pkResolution As PrinterResolution
'comboPrintResolution.Items.Clear()
'For i As Integer = 0 To printDoc.PrinterSettings.PrinterResolutions.Count - 1
' pkResolution = printDoc.PrinterSettings.PrinterResolutions.Item(i)
' comboPrintResolution.Items.Add(pkResolution.ToString)
'Next

End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

' Set the paper size based upon the selection in the combo box
Dim iSelIdx As Integer = comboPaperSize.SelectedIndex
If iSelIdx <> -1 Then
If iSelIdx = printDoc.PrinterSettings.PaperSizes.Count Then
printDoc.DefaultPageSettings.PaperSize = _
New PaperSize("My Custom Paper Size", CInt(TextBox1.Text), CInt(TextBox2.Text))
Else
printDoc.DefaultPageSettings.PaperSize = _
printDoc.PrinterSettings.PaperSizes.Item(comboPaperSize.SelectedIndex)
End If
End If

' Set the paper source based upon the selection in the combo box.
If comboPaperSource.SelectedIndex <> -1 Then
printDoc.DefaultPageSettings.PaperSource = _
printDoc.PrinterSettings.PaperSources.Item(comboPaperSource.SelectedIndex)
End If

' Set the printer resolution based upon the selection in the combo box.
'If comboPrintResolution.SelectedIndex <> -1 Then
' printDoc.DefaultPageSettings.PrinterResolution = _
' printDoc.PrinterSettings.PrinterResolutions.Item(comboPrintResolution.SelectedIndex)
'End If

' Print the document with the specified paper size and source.
printDoc.Print()

End Sub
soothbug 2016-07-19
  • 打赏
  • 举报
回复
引用 4 楼 lhblxm 的回复:
在打印机属性也要设一个自定义纸张
这个操作不可以通过代码实现吗? 目标用户可能不会设自定义纸张,所以能用代码完成的要用代码完成
lhblxm 2016-07-19
  • 打赏
  • 举报
回复
在打印机属性也要设一个自定义纸张
soothbug 2016-07-18
  • 打赏
  • 举报
回复
引用 2 楼 lhblxm 的回复:
PrintDocument1.DefaultPageSettings.PaperSize
你可以设置任何尺寸


感谢回复!

是的,但是无法生效(可以编译,打印时依旧会打印成A4,即打印服务器的默认值)。
是否有其他方法呢?
lhblxm 2016-07-18
  • 打赏
  • 举报
回复
PrintDocument1.DefaultPageSettings.PaperSize 你可以设置任何尺寸
soothbug 2016-07-17
  • 打赏
  • 举报
回复
大牛们都在哪里~~
本DataGridView打印控件和.NET打印控件5.6版(含报表模板设计组件)2014年6月22日修改完成,完全免费,在.NET2.0及以上环境下都可以使用(VB打印、C#打印都是可以的),有帮助文档与使用实例。 与上一版本的5.5版相比,新控件5.6版的主要更改如下: 1、增加了一个新打印组件SimpleReport组件,该组件与DGVPrint组件一样在运行时可进行打印参数设置,但比DGVPrint组件功能更强大,可以自动管理多个打印方案,在打印预览时可以自由在各个打印方案之间切换;可以在打印参数设置窗口中动态定义多表头,还可以像EasyReport组件一样设置和使用参数变量(具体使用效果参见实例程序); 2、解决了EasyReport组件在插入变量参数时,变量参数未排序导致查找不方便的问题; 3、在打印预览界面添加了简单的双面打印功能。(打印预览界面工具栏中的“打印\双面打印”菜单); 4、其他一些完善,比如DGVPrint组件中设置的行高无效等问题。 本控件特色: 1、强大的DataGridView打印功能,不仅可以以多种形式(普通打印、分栏打印、跨页打印、工资条打印打印DGV表格,基本上能完全按DGV控件本身设置的格式如字体、字号、背景颜色、前景颜色、单元格对齐方式等打印出来,文字图像都可以打印,而且是完全根据表格当前的显示顺序进行打印的,基本上做到了所见即所得的打印。 2、报表设计功能。报表模板设计组件EasyReport与WebEasyReport组件可以设计普通报表、分组报表、套打模板等,分别以DataGridView为数据源。控件的位置以毫米为计量单位,定位准确,很适合套打单据设计。 3、强大的图表打印功能。5.2版控件新增了一个Chartlet的组件,使用非常方便,可以生成柱形图、饼图、折线图等多种图形,而且可以设置2D或3D效果,既可以在打印控件中打印出来,也可以在Graphics对象中显示。 4、分组汇总打印DataGridVeiw功能,每组还可以自动换新页打印,还可以自动增加行号。 5、强大的文本打印输出功能,控件提供多个文本打印重载函数,打印文本时,如果需要,控件会自动换行和换页打印输出。还增加了以指定行间距及字符间距打印文本的功能,可以用固定行距,也可以用单倍或多倍行距打印文本。 6、强大的绘图功能,基本上.NET的GDI+的绘图函数(如直线、矩形、路径、多边形、曲线等)都有,只有个别函数的名称有点区别。 7、支持同一文档多种版面格式打印(类似于Word中的节的功能):对同一份文档,不同的页面可以设置不同的格式(纸张大小、纸张方向、页边距),只需要在新增一页时在NewPage方法中指定要使用的页面格式即可,使用非常简单。 8、报表文件保存功能。本控件允许将当前打印预览的内容保存为报表文件,以后使用本控件重新打开该报表文件即可重现原来保存报表时的打印内容。 9、Excel导出功能,可以将DataGridView和GridView导出为Excel文件,5.2版控件还增加了不依赖Office的导出Excel功能,而且速度非常快,5.4版还增加了合并单元格的导出功能。 10、打印DataGridView时的打印方案保存与读取功能。可以将当前打印参数保存为打印方案文件,或者从保存的打印方案文件中读取打印参数。 11、水印打印功能。根据需要,可以在页面中打印或不打印以半透明空心文字打印水印。 12、强大的容器控件打印功能(DrawPanel函数)。借助该函数,您只需要在您的容器控件中设计好要打印的内容及打印内容的相对位置,控件轻松帮你打印出来(如果超过一页,控件会自动换页续打)。 13、特殊文字效果打印功能。控件具有打印浮雕文字、阴影文字、空心文字、块文字的功能。 14、页眉页脚中既可打印文字,也可打印图像,或者即打印图像又打印输出文字。 15、图像与图标打印输出功能。 16、多表头(跨行跨列的复杂表头)打印功能,多表头组件支持多表头显示与打印、单元格内容的合并显示、打印与导出。 17、自定义纸张支持功能。 18、纸张背景图片设置打印功能。 19、.NET4.0支持功能(是单独的一个文件)。 20、直接打印窗口中的TreeView控件功能。 21、打印窗口中的ListView功能。 22、RichTextBox控件的RTF文本打印功能。 23、斜线表头打印功能(5.4版新增)。 24、二维码打印功能(5.5版本增加)。 25、5.6版新增的SimpleReport组件允许您在一个方案文件中管理多个打印方案,在打印预览时能自由在各个打印方案之间切换。 我将持续改进该控件,并将不断推出控件的新版本,要查看或下载控件的升级版本,请登陆网站:http://myyouping.download.csdn.n
与6.0版相比,控件6.01版的主要更改如下: 1、解决6.0版在XP及Windows Server 2008等操作系统下打印预览及打印不正确的问题(第1页正常,其他各页全部是空白)。 控件主要功能: 1、强大的DataGridView打印功能,不仅可以以多种形式(普通打印、分栏打印、跨页打印、工资条打印打印DGV表格,基本上能完全按DGV控件本身设置的格式如字体、字号、背景颜色、前景颜色、单元格对齐方式等打印出来,文字图像都可以打印,而且是完全根据表格当前的显示顺序进行打印的,基本上做到了所见即所得的打印。 2、报表设计功能。报表模板设计组件EasyReport可以设计普通报表、分组报表、套打模板等,以DataGridView为数据源。控件的位置以毫米为计量单位,定位准确,很适合套打单据设计。 3、图表打印功能。5.2版控件新增了一个Chartlet的组件,使用非常方便,可以生成柱形图、饼图、折线图等多种图形,而且可以设置2D或3D效果,既可以在打印控件中打印出来,也可以在Graphics对象中显示。 4、文本打印输出功能,控件提供多个文本打印重载函数,打印文本时,如果需要,控件会自动换行和换页打印输出。还增加了以指定行间距及字符间距打印文本的功能,可以用固定行距,也可以用单倍或多倍行距打印文本。 5、绘图功能,基本上.NET的GDI+的绘图函数(如直线、矩形、路径、多边形、曲线等)都有,只有个别函数的名称有点区别。 6、支持同一文档多种版面格式打印(类似于Word中的节的功能):对同一份文档,不同的页面可以设置不同的格式(纸张大小、纸张方向、页边距),只需要在新增一页时在NewPage方法中指定要使用的页面格式即可,使用非常简单。 7、报表文件保存功能。本控件允许将当前打印预览的内容保存为报表文件,以后使用本控件重新打开该报表文件即可重现原来保存报表时的打印内容。 8、数据导出功能,可以将DataGridView导出为Excel\PDF\RTF\HTML文件,5.7版控件使用开源的NPOI导出Excel,速度非常快,效果非常好。 9、强大的容器控件打印功能(DrawPanel函数)。借助该函数,您只需要在您的容器控件中设计好要打印的内容及打印内容的相对位置,控件轻松帮你打印出来(如果超过一页,控件会自动换页续打)。 10、5.6版新增的SimpleReport组件允许您在一个方案文件中管理多个打印方案,在打印预览时能自由在各个打印方案之间切换。 11、RichTextBox控件的RTF文本打印功能。 12、页眉页脚中既可打印文字,也可打印图像,或者即打印图像又打印输出文字。 13、多表头(跨行跨列的复杂表头)打印功能,多表头组件支持多表头显示与打印、单元格内容的合并显示、打印与导出。 14、自定义纸张支持功能。 15、直接打印窗口中的TreeView控件功能。 16、打印窗口中的ListView功能。 17、斜线表头打印功能。 18、各种条形码(包括二维码)打印功能。 19、5.7版控件增加了使用开源的NPOI从Excel文件(支持2003与2007格式)中导入数据到DataGridView的功能,以及DataGridView的复制与粘贴功能。

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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