Rediger

Del via


XpsDocumentWriter.WritingPrintTicketRequired Event

Definition

Occurs just before a Write or WriteAsync method adds a PrintTicket to a document or print queue.

public:
 override event System::Windows::Documents::Serialization::WritingPrintTicketRequiredEventHandler ^ WritingPrintTicketRequired;
public override event System.Windows.Documents.Serialization.WritingPrintTicketRequiredEventHandler WritingPrintTicketRequired;
member this.WritingPrintTicketRequired : System.Windows.Documents.Serialization.WritingPrintTicketRequiredEventHandler 
Public Overrides Custom Event WritingPrintTicketRequired As WritingPrintTicketRequiredEventHandler 

Event Type

Examples

The following example shows how to use the WritingPrintTicketRequired event.


// ---------------- PrintMultipleFixedContentDocuments ----------------
/// <summary>
///   Prints the content of a multiple fixed document sequence.</summary>
/// <param name="pq">
///   The print queue to print to.</param>
/// <param name="async">
///   true to print asynchronously; false to print synchronously.</param>
public void PrintMultipleFixedContentDocuments(PrintQueue pq, bool async)
{
    // Create a multiple document FixedDocumentSequence.
    FixedDocumentSequence fds =
        _wpfContent.LoadFixedDocumentSequenceFromDocument();

    // Create a document writer to print to.
    XpsDocumentWriter xdwPrint = GetPrintXpsDocumentWriter(pq);

    // Set the event handler for creating print tickets for
    // each document within the fixed document sequence.
    xdwPrint.WritingPrintTicketRequired +=
        new WritingPrintTicketRequiredEventHandler(
            MultipleFixedContentDocuments_WritingPrintTicketRequired);
    _firstDocumentPrintTicket = 0;

    // Print either asynchronously or synchronously.
    if (async)
        PrintMultipleFixedContentDocumentsAsync(xdwPrint, fds);
    else
        PrintMultipleFixedContentDocuments(xdwPrint, fds);
}// end:PrintMultipleFixedContentDocuments()

' ---------------- PrintMultipleFixedContentDocuments ----------------
''' <summary>
'''   Prints the content of a multiple fixed document sequence.</summary>
''' <param name="pq">
'''   The print queue to print to.</param>
''' <param name="async">
'''   true to print asynchronously; false to print synchronously.</param>
Public Sub PrintMultipleFixedContentDocuments(ByVal pq As PrintQueue, ByVal async As Boolean)
    ' Create a multiple document FixedDocumentSequence.
    Dim fds As FixedDocumentSequence = _wpfContent.LoadFixedDocumentSequenceFromDocument()

    ' Create a document writer to print to.
    Dim xdwPrint As XpsDocumentWriter = GetPrintXpsDocumentWriter(pq)

    ' Set the event handler for creating print tickets for
    ' each document within the fixed document sequence.
    AddHandler xdwPrint.WritingPrintTicketRequired, AddressOf MultipleFixedContentDocuments_WritingPrintTicketRequired
    _firstDocumentPrintTicket = 0

    ' Print either asynchronously or synchronously.
    If async Then
        PrintMultipleFixedContentDocumentsAsync(xdwPrint, fds)
    Else
        PrintMultipleFixedContentDocuments(xdwPrint, fds)
    End If
End Sub

The event handler is created in the following example.


// ----- MultipleFixedContentDocuments_WritingPrintTicketRequired -----
/// <summary>
///   Creates a PrintTicket event handler for
///   printing a FixedDocumentSequence.</summary>
private void MultipleFixedContentDocuments_WritingPrintTicketRequired(
                Object sender, WritingPrintTicketRequiredEventArgs e)
{
    if (e.CurrentPrintTicketLevel ==
            PrintTicketLevel.FixedDocumentSequencePrintTicket)
    {
        // Create a PrintTicket for the FixedDocumentSequence. Any
        // PrintTicket setting specified at the FixedDocumentSequence
        // level will be inherited by lower level (i.e. FixedDocument or
        // FixedPage) unless there exists lower level PrintTicket that
        // sets the setting differently, in which case the lower level
        // PrintTicket setting will override the higher level setting.
        PrintTicket ptFDS = new PrintTicket();
        ptFDS.PageOrientation = PageOrientation.Portrait;
        ptFDS.Duplexing = Duplexing.TwoSidedLongEdge;
        e.CurrentPrintTicket = ptFDS;
    }

    else if (e.CurrentPrintTicketLevel ==
        PrintTicketLevel.FixedDocumentPrintTicket)
    {
        // Use different PrintTickets for different FixedDocuments.
        PrintTicket ptFD = new PrintTicket();

        if (_firstDocumentPrintTicket <= 1)
        {   // Print the first document in black/white and in portrait
            // orientation.  Since the PrintTicket at the
            // FixedDocumentSequence level already specifies portrait
            // orientation, this FixedDocument can just inherit that
            // setting without having to set it again.
            ptFD.PageOrientation = PageOrientation.Portrait;
            ptFD.OutputColor = OutputColor.Monochrome;
            _firstDocumentPrintTicket++;
        }

        else // if (_firstDocumentPrintTicket > 1)
        {   // Print the second document in color and in landscape
            // orientation.  Since the PrintTicket at the
            // FixedDocumentSequence level already specifies portrait
            // orientation, this FixedDocument needs to set its
            // PrintTicket with landscape orientation in order to
            // override the higher level setting.
            ptFD.PageOrientation = PageOrientation.Landscape;
            ptFD.OutputColor = OutputColor.Color;
        }

        e.CurrentPrintTicket = ptFD;
    }// end:else if (CurrentPrintTicketLevel==FixedDocumentPrintTicket)

    // Even though we don't show code for specifying PrintTicket for
    // the FixedPage level, the same inheritance-override logic applies
    // to FixedPage as well.
}// end:MultipleFixedContentDocuments_WritingPrintTicketRequired()

' ----- MultipleFixedContentDocuments_WritingPrintTicketRequired -----
''' <summary>
'''   Creates a PrintTicket event handler for
'''   printing a FixedDocumentSequence.</summary>
Private Sub MultipleFixedContentDocuments_WritingPrintTicketRequired(ByVal sender As Object, ByVal e As WritingPrintTicketRequiredEventArgs)
    If e.CurrentPrintTicketLevel = PrintTicketLevel.FixedDocumentSequencePrintTicket Then
        ' Create a PrintTicket for the FixedDocumentSequence. Any
        ' PrintTicket setting specified at the FixedDocumentSequence
        ' level will be inherited by lower level (i.e. FixedDocument or
        ' FixedPage) unless there exists lower level PrintTicket that
        ' sets the setting differently, in which case the lower level
        ' PrintTicket setting will override the higher level setting.
        Dim ptFDS As New PrintTicket()
        ptFDS.PageOrientation = PageOrientation.Portrait
        ptFDS.Duplexing = Duplexing.TwoSidedLongEdge
        e.CurrentPrintTicket = ptFDS

    ElseIf e.CurrentPrintTicketLevel = PrintTicketLevel.FixedDocumentPrintTicket Then
        ' Use different PrintTickets for different FixedDocuments.
        Dim ptFD As New PrintTicket()

        If _firstDocumentPrintTicket <= 1 Then
            ' orientation.  Since the PrintTicket at the
            ' FixedDocumentSequence level already specifies portrait
            ' orientation, this FixedDocument can just inherit that
            ' setting without having to set it again.
            ptFD.PageOrientation = PageOrientation.Portrait
            ptFD.OutputColor = OutputColor.Monochrome
            _firstDocumentPrintTicket += 1

        Else ' if (_firstDocumentPrintTicket > 1)
            ' orientation.  Since the PrintTicket at the
            ' FixedDocumentSequence level already specifies portrait
            ' orientation, this FixedDocument needs to set its
            ' PrintTicket with landscape orientation in order to
            ' override the higher level setting.
            ptFD.PageOrientation = PageOrientation.Landscape
            ptFD.OutputColor = OutputColor.Color
        End If

        e.CurrentPrintTicket = ptFD
    End If ' end:else if (CurrentPrintTicketLevel==FixedDocumentPrintTicket)

    ' Even though we don't show code for specifying PrintTicket for
    ' the FixedPage level, the same inheritance-override logic applies
    ' to FixedPage as well.

End Sub

Remarks

WritingPrintTicketRequired enables an event handler to substitute a new PrintTicket for the one that is passed to the write operation.

The following four Write and WriteAsync methods do not call the WritingPrintTicketRequired event:

Applies to