vb.net 打印.tif文件求助

jojo15407583 2019-03-26 11:49:51
第一次发帖,求助各位。
需求是做一个.tif文件的自动打印程序,点击按钮后自动打印指定路径的某个tif文件,且自动设置好标准A3横向页面,打印机其中一个纸盒里有A3纸。

现在的问题:
1.如何设置页面参数
2.如何把这个tif文件作为数据源发送到打印进程

下面是我自己写的一段,在自己电脑上用虚拟PDF打印机或者XPS打印机测试打印一份Word文档时,打印出来的文件都是空白的,页面也还是默认的A4

 Private PrintDOC As New Printing.PrintDocument

Private Sub PDOC_Print(sender As Object, e As System.Drawing.Printing.PrintPageEventArgs)

Dim myPaperSize As New Printing.PaperSize("A3 Rotate", 420, 297)
Dim myPrintSetting As New Printing.PageSettings

With myPrintSetting
.Landscape = True
.Color = False
.PaperSize = myPaperSize
End With

PrintDOC.DefaultPageSettings = myPrintSetting
PrintDOC.PrinterSettings.PrinterName = "某个打印机"

End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
AddHandler PrintDOC.PrintPage, AddressOf PDOC_Print
PrintDOC.DocumentName = "X:******\**.tif"
PrintDOC.Print()

End Sub
...全文
259 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhonsonzhang 2019-04-18
  • 打赏
  • 举报
回复
你实际使用bmp就不用保存了,直接添加到list(of bitmap).然后把这个类型传给打印方法去打印里面的bmp就可以了。
jhonsonzhang 2019-04-18
  • 打赏
  • 举报
回复
思路:将TIF文件提取为一个bmp的list.然后在printdocument中循环打印。以下代码是操作tif文件的。我以前项目中粘贴过来的,供您参考。
Public Shared Function GetTifAry(PathS As String, saveAsDpath As String) As Integer
Dim rlt As New ArrayList
Dim srcimg As Image = Image.FromFile(PathS)
Dim n = srcimg.GetFrameCount(FrameDimension.Page)
Dim enc As Encoder = Encoder.SaveFlag
Dim ep As EncoderParameters = New EncoderParameters(2)
ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.MultiFrame))
ep.Param(1) = New EncoderParameter(Encoder.Compression, EncoderValue.CompressionNone)
Dim info As ImageCodecInfo = getEncoderInfo("image/tiff")
For i As Integer = 0 To n - 1
srcimg.SelectActiveFrame(FrameDimension.Page, i)
Dim bmp As New Bitmap(CInt(srcimg.Width), CInt(srcimg.Height))
Dim g As Graphics = Graphics.FromImage(bmp)
g.DrawImage(srcimg, 0, 0, bmp.Width, bmp.Height)
g.Dispose()
Dim decPath As String = saveAsDpath & (i + 1) & ".jpg"
bmp.Save(decPath, info, ep)
bmp.Dispose()
Next
Return n
End Function
Shared Function getEncoderInfo(mimeType As String) As ImageCodecInfo
Dim encoders As ImageCodecInfo() = ImageCodecInfo.GetImageEncoders
For Each info As ImageCodecInfo In encoders
If info.MimeType Like mimeType Then
Return info
End If
Next
Return Nothing
End Function
Public Shared Function SaveBitmap(SrcBmp As Bitmap, SavePath As String) As Boolean
Try
Dim enc As Encoder = Encoder.SaveFlag
Dim ep As EncoderParameters = New EncoderParameters(2)
ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.MultiFrame))
ep.Param(1) = New EncoderParameter(Encoder.Compression, EncoderValue.CompressionNone)
Dim info As ImageCodecInfo = getEncoderInfo("image/tiff")
Dim outPage1 As New Bitmap(SrcBmp.Width, SrcBmp.Height)
Dim g As Graphics = Graphics.FromImage(outPage1)
g.DrawImage(SrcBmp, 0, 0, outPage1.Width, outPage1.Height)
g.Dispose()
outPage1.Save(SavePath, info, ep)
outPage1.Dispose()
Return True
Catch ex As Exception
Return False
End Try
End Function
fishboyok 2019-04-07
  • 打赏
  • 举报
回复
引用 5 楼 jojo15407583 的回复:
好,我试试看。不过还涉及一个问题,我要打印的这些tif文件都是扫描出来加密过的的图纸,平时我们查看或者打印的时候都是通过ms Office document imaging这个微软的office工具打开后再手动打印。windows自带图片浏览器是打不开的
如果加密的图片,你要知道解密的方法,正常你不知道的,是加密软件自动加密的。或者调用系统里能读取这个加密文件的程序(譬如ms Office document imaging)后台打印。或者把你编写的软件让加密系统赋予解密权限
jojo15407583 2019-03-27
  • 打赏
  • 举报
回复
好,我试试看。不过还涉及一个问题,我要打印的这些tif文件都是扫描出来加密过的的图纸,平时我们查看或者打印的时候都是通过ms Office document imaging这个微软的office工具打开后再手动打印。windows自带图片浏览器是打不开的
stherix 2019-03-27
  • 打赏
  • 举报
回复
引用 3 楼 jojo15407583 的回复:
[quote=引用 2 楼 stherix 的回复:]打印有这么简单的吗? 你应该在 PrintDOC的PrintPage 事件里 用e.Graphics.DrawImage来打印图片
我也意识到没有这么简单,但是我找了一些资料看了下,都是打印文本文件和图片的,没有找到tif相关的。tif文件能等同于图片文件处理吗?[/quote] tif就是图片文件 一样可以用Image类处理
jojo15407583 2019-03-27
  • 打赏
  • 举报
回复
引用 2 楼 stherix 的回复:
打印有这么简单的吗? 你应该在 PrintDOC的PrintPage 事件里 用e.Graphics.DrawImage来打印图片
我也意识到没有这么简单,但是我找了一些资料看了下,都是打印文本文件和图片的,没有找到tif相关的。tif文件能等同于图片文件处理吗?
stherix 2019-03-27
  • 打赏
  • 举报
回复
打印有这么简单的吗? 你应该在 PrintDOC的PrintPage 事件里 用e.Graphics.DrawImage来打印图片
jojo15407583 2019-03-27
  • 打赏
  • 举报
回复
捞自己一把

16,554

社区成员

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

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