I’m printing a FixedDocument and want to specify the name that shows up in the print queue job list, so users can see which document is theirs.
I don’t want to use the PrintDialog.
This is my code so far:
' get print queue and ticket
Dim queue As PrintQueue
If String.IsNullOrWhiteSpace(printerName) Then
queue = LocalPrintServer.GetDefaultPrintQueue()
Else
queue = New LocalPrintServer().GetPrintQueue(printerName)
End If
Dim ticket As PrintTicket = New PrintTicket()
ticket.PageBorderless = PageBorderless.Borderless
ticket.PageMediaSize = queue.DefaultPrintTicket.PageMediaSize
If twoSided Then
ticket.Duplexing = Duplexing.TwoSidedLongEdge
Else
ticket.Duplexing = Duplexing.OneSided
End If
queue.UserPrintTicket = ticket
' generate fixed document
Dim fixedDocument As FixedDocument = New FixedDocument()
For Each image In images
Dim page As FixedPage = New FixedPage() With {
.Width = If(image.Height > image.Width, ticket.PageMediaSize.Width, ticket.PageMediaSize.Height),
.Height = If(image.Height > image.Width, ticket.PageMediaSize.Height, ticket.PageMediaSize.Width),
.Margin = New Thickness(0)
}
page.Children.Add(New Image() With {
.Source = image,
.Width = If(image.Height > image.Width, ticket.PageMediaSize.Width, ticket.PageMediaSize.Height),
.Height = If(image.Height > image.Width, ticket.PageMediaSize.Height, ticket.PageMediaSize.Width),
.Margin = New Thickness(0)
})
Dim content As PageContent = New PageContent()
CType(content, IAddChild).AddChild(page)
fixedDocument.Pages.Add(content)
Next
' print
Dim writer As XpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(queue)
writer.Write(fixedDocument, ticket)
1