XpsDocumentWriter.WritingPrintTicketRequired 事件

定义

恰好在 WriteWriteAsync 方法将 PrintTicket 添加至文档或打印队列之前发生。

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 

事件类型

示例

下面的示例演示如何使用 WritingPrintTicketRequired 事件。


// ---------------- 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

事件处理程序是在以下示例中创建的。


// ----- 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

注解

WritingPrintTicketRequired 使事件处理程序能够将新的 PrintTicket 替换为传递给写入操作的事件处理程序。

以下四 Write 个 和 WriteAsync 方法不调用 事件 WritingPrintTicketRequired

适用于