如何在不使用“另存文件为”对话框的情况下通过打印到虚拟打印机来保存xps文件?当我调用print方法时,会弹出一个对话框,要求用户指定文件名和路径。这仅适用于创建全新文件;如果我试图覆盖现有文件,它会抛出一个错误'你没有权限写入该文件......'无论如何,我希望用户能够在我自己的对话框中指定文件名,而不是printDocument的Print方法自动调用的文件名。
Public Event PrintPage As System.Drawing.Printing.PrintPageEventHandler
Private WithEvents Doc As New Printing.PrintDocument
Public Sub SaveXPSFile()
Doc.PrinterSettings.PrinterName = "Microsoft XPS Document Writer"
Doc.PrinterSettings.PrintFileName = "C:\Users\POConnell\Documents\t.xps"
Doc.Print()
Doc.Dispose()
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles Doc.PrintPage
'drawing commands go here
End sub
答案 0 :(得分:4)
已经晚了几个月,但我们走了。
2个问题,2个答案。
问题1: 如何在不使用“另存为文件”对话框的情况下通过打印到虚拟打印机来保存xps文件?
答案1:你很亲密。我想你正在寻找Doc.DefaultPageSettings.PrinterSettings.PrintToFile = True Doc.DefaultPageSettings.PrinterSettings.PrintFileName =“C:\ Users \ POConnell \ Documents \ t.xps”
这是我的实施: (法定纸张尺寸,横向模式)
Using prn As New PrintDocument
With prn
.PrinterSettings.PrinterName = "Microsoft XPS Document Writer"
AddHandler .PrintPage, _
AddressOf Me.PrintPageHandler
.DefaultPageSettings.Landscape = landscape
.DefaultPageSettings.PaperSize = New PaperSize("Legal", 850, 1400)
If My.Computer.FileSystem.FileExists("C:\temp\Log.oxps") Then My.Computer.FileSystem.DeleteFile("C:\temp\Log.oxps")
.DefaultPageSettings.PrinterSettings.PrintToFile = True
.DefaultPageSettings.PrinterSettings.PrintFileName = "C:\temp\Log.oxps"
.Print()
RemoveHandler .PrintPage, _
AddressOf Me.PrintPageHandler
End With
End Using
正如您所看到的,我使用的是oxps文件格式,但它仍然适用于您。
问题2:如果我试图覆盖现有文件,则会抛出错误“您无权写入该文件...”。
答案2:在打印文件之前检查文件是否已存在,如果存在则将其删除。当然,尝试创建已存在的文件会失败。
由于某些原因,使用My.Computer.FileSystem.DeleteFile比传统的Kill()和System.IO.File.Delete更快,它们都需要线程在重新创建文件之前休眠~1-200ms,或者否则将发生不同的访问被拒绝错误。
希望这有助于将来的某个人!