Sdílet prostřednictvím


Přehled tisku dokumentů (WPF .NET)

S microsoft .NET mají vývojáři aplikací využívající windows Presentation Foundation (WPF) bohatou sadu rozhraní API pro správu tiskového a tiskového systému. Jádrem této funkce je formát souboru XPS (XML Paper Specification) a cesta k tisku XPS.

O systému XPS

XPS je formát elektronického dokumentu, formát souboru fondu a jazyk popisu stránky. Jedná se o formát otevřeného dokumentu, který k vytváření multiplatformních dokumentů používá xml, konvence open packaging a další oborové standardy. Systém XPS zjednodušuje proces vytváření, sdílení, tisku, zobrazení a archivace digitálních dokumentů. Další informace o XPS naleznete v části Dokumenty XPS.

Cesta tisku ve formátu XPS

Cesta tisku VE FORMÁTU XPS je funkce systému Windows, která předefinuje způsob zpracování tisku v aplikacích systému Windows. Cesta tisku ve formátu XPS může nahradit:

  • Jazyky prezentace dokumentů, jako je formát RTF nebo Portable Document Format.
  • Formáty zařazování tisku, jako je například soubor Windows Metafile nebo Enhanced Metafile (EMF).
  • Jazyky popisu stránky, například jazyk příkazů tiskárny nebo jazyk PostScript

V důsledku toho cesta tisku XPS udržuje formát XPS z publikace aplikace až do konečného zpracování v ovladači tiskárny nebo zařízení.

Zařazování tisku pro dokumenty XPS podporuje cestu tisku XPS i cestu tisku GDI. Cesta tisku XPS nativně využívá soubor fondu XPS a vyžaduje ovladač tiskárny XPS. Cesta tisku XPS je postavena na modelu ovladače tiskárny XPS (XPSDrv).

Mezi výhody tiskové cesty XPS patří:

  • Podpora tisku WYSIWYG
  • Nativní podpora pokročilých profilů barev, jako jsou například 32 bitů na kanál, barevný model CMYK, pojmenované barvy, n-inky a průsvitné a přechody.
  • Vylepšený výkon tisku – funkce a vylepšení XPS jsou k dispozici pouze pro aplikace, které cílí na cestu tisku XPS.
  • Standardní formát XPS.

Pro základní scénáře tisku je k dispozici jednoduché a intuitivní rozhraní API se standardním uživatelským rozhraním pro konfiguraci tisku a odesílání úloh. V případě pokročilých scénářů rozhraní API podporuje přizpůsobení uživatelského rozhraní nebo vůbec žádné uživatelské rozhraní, synchronní nebo asynchronní tisk a možnosti dávkového tisku. Jednoduché i pokročilé možnosti poskytují podporu tisku v režimu plného nebo částečného vztahu důvěryhodnosti.

SYSTÉM XPS byl navržen s ohledem na rozšiřitelnost, takže funkce a možnosti lze do XPS přidat modulárním způsobem. Mezi funkce rozšiřitelnosti patří:

  • Schéma tisku, které podporuje rychlé rozšíření možností zařízení. Veřejná část schématu se pravidelně aktualizuje, aby se přidaly požadované možnosti zařízení. Další informace najdete v tématu Rozšiřitelná architektura.
  • Rozšiřitelný filtrovací kanál, který ovladače XPSDrv používají k podpoře přímého i škálovatelného tisku dokumentů XPS. Další informace naleznete v tématu XPSDrv ovladače tiskárny.

Aplikace WPF nativně podporují cestu tisku XPS a mohou použít rozhraní API pro tisk XPS k tisku přímo do ovladače XPSDrv. Pokud cílová tisková fronta operace zápisu nemá ovladač XPSDrv, pak Write metody XpsDocumentWriter třídy WriteAsync automaticky převedou obsah ze formátu XPS na formát GDI pro cestu tisku GDI.

Následující obrázek znázorňuje subsystém tisku a definuje části poskytované společností Microsoft a nezávislými dodavateli softwaru a hardwaru.

Screenshot showing the XPS print system.

Základní tisk ve formátu XPS

WPF má rozhraní API pro tisk, které podporuje základní i pokročilé funkce tisku. Pro aplikace, které nevyžadují rozsáhlé přizpůsobení tisku nebo přístup k kompletní sadě funkcí XPS, může stačit základní podpora tisku. Základní podpora tisku je poskytována prostřednictvím ovládacího prvku PrintDialog , který vyžaduje minimální konfiguraci, má známé uživatelské rozhraní a podporuje mnoho funkcí XPS.

PrintDialog

Ovládací System.Windows.Controls.PrintDialog prvek poskytuje jeden vstupní bod pro odeslání úlohy uživatelského rozhraní, konfigurace a XPS. Informace o vytvoření instance a použití ovládacího prvku najdete v tématu Jak zobrazit dialogové okno tisku.

Rozšířený tisk ve formátu XPS

Pokud chcete získat přístup k kompletní sadě funkcí XPS, použijte pokročilé rozhraní API pro tisk. V této části je popsáno několik relevantních rozhraní API, včetně PrintTicket, PrintCapabilities, PrintServer, PrintQueue a XpsDocumentWriter. Úplný seznam rozhraní API cest tisku ve formátu XPS najdete v System.Windows.Xps tématu a System.Printing obory názvů.

PrintTicket a PrintCapabilities

PrintCapabilities Třídy PrintTicket jsou základem pokročilých funkcí XPS. Oba objekty obsahují struktury formátované jazykem XML funkcí orientovaných na tisk, které jsou definovány schématem tisku. Mezi tyto funkce patří oboustranný tisk, kolace, oboustranný tisk a sešívání. A PrintTicket dává tiskárně pokyn, jak zpracovat tiskovou úlohu. Třída PrintCapabilities definuje možnosti tiskárny. Dotazováním možností tiskárny lze vytvořit, PrintTicket která plně využívá podporované funkce tiskárny. Podobně se můžete vyhnout nepodporovaným funkcím.

Následující příklad se dotazuje na PrintCapabilities tiskárnu a vytvoří PrintTicket kód using.

/// <summary>
/// Returns a print ticket, which is a set of instructions telling a printer how
/// to set its various features, such as duplexing, collating, and stapling.
/// </summary>
/// <param name="printQueue">The print queue to print to.</param>
/// <returns>A print ticket.</returns>
public static PrintTicket GetPrintTicket(PrintQueue printQueue)
{
    PrintCapabilities printCapabilites = printQueue.GetPrintCapabilities();

    // Get a default print ticket from printer.
    PrintTicket printTicket = printQueue.DefaultPrintTicket;

    // Modify the print ticket.
    if (printCapabilites.CollationCapability.Contains(Collation.Collated))
        printTicket.Collation = Collation.Collated;
    if (printCapabilites.DuplexingCapability.Contains(Duplexing.TwoSidedLongEdge))
        printTicket.Duplexing = Duplexing.TwoSidedLongEdge;
    if (printCapabilites.StaplingCapability.Contains(Stapling.StapleDualLeft))
        printTicket.Stapling = Stapling.StapleDualLeft;

    // Returns a print ticket, which is a set of instructions telling a printer how
    // to set its various features, such as duplexing, collating, and stapling.
    return printTicket;
}
''' <summary>
''' Returns a print ticket, which is a set of instructions telling a printer how
''' to set its various features, such as duplexing, collating, and stapling.
''' </summary>
''' <param name="printQueue">The print queue to print to.</param>
''' <returns>A print ticket.</returns>
Public Shared Function GetPrintTicket(printQueue As PrintQueue) As PrintTicket

    Dim printCapabilites As PrintCapabilities = printQueue.GetPrintCapabilities()

    ' Get a default print ticket from printer.
    Dim printTicket As PrintTicket = printQueue.DefaultPrintTicket

    ' Modify the print ticket.
    If printCapabilites.CollationCapability.Contains(Collation.Collated) Then
        printTicket.Collation = Collation.Collated
    End If
    If printCapabilites.DuplexingCapability.Contains(Duplexing.TwoSidedLongEdge) Then
        printTicket.Duplexing = Duplexing.TwoSidedLongEdge
    End If
    If printCapabilites.StaplingCapability.Contains(Stapling.StapleDualLeft) Then
        printTicket.Stapling = Stapling.StapleDualLeft
    End If

    ' Returns a print ticket, which is a set of instructions telling a printer how
    ' to set its various features, such as duplexing, collating, and stapling.
    Return printTicket

End Function

PrintServer a PrintQueue

Třída PrintServer představuje síťový tiskový server a PrintQueue třída představuje tiskárnu a frontu výstupní úlohy, která je k ní přidružena. Tato rozhraní API společně podporují pokročilou správu tiskových úloh pro server. A PrintServer, nebo jedna z jeho odvozených tříd, slouží ke správě PrintQueue.

Následující příklad vytvoří LocalPrintServer a přistupuje k místnímu počítači PrintQueueCollection pomocí kódu.

/// <summary>
/// Return a collection of print queues, which individually hold the features or states
/// of a printer as well as common properties for all print queues.
/// </summary>
/// <returns>A collection of print queues.</returns>
public static PrintQueueCollection GetPrintQueues()
{
    // Create a LocalPrintServer instance, which represents 
    // the print server for the local computer.
    LocalPrintServer localPrintServer = new();

    // Get the default print queue on the local computer.
    //PrintQueue printQueue = localPrintServer.DefaultPrintQueue;

    // Get all print queues on the local computer.
    PrintQueueCollection printQueueCollection = localPrintServer.GetPrintQueues();

    // Return a collection of print queues, which individually hold the features or states
    // of a printer as well as common properties for all print queues.
    return printQueueCollection;
}
''' <summary>
''' Return a collection of print queues, which individually hold the features or states
''' of a printer as well as common properties for all print queues.
''' </summary>
''' <returns>A collection of print queues.</returns>
Public Shared Function GetPrintQueues() As PrintQueueCollection

    ' Create a LocalPrintServer instance, which represents 
    ' the print server for the local computer.
    Dim localPrintServer As LocalPrintServer = New LocalPrintServer()

    ' Get the default print queue on the local computer.
    'Dim  printQueue As PrintQueue = localPrintServer.DefaultPrintQueue

    ' Get all print queues on the local computer.
    Dim printQueueCollection As PrintQueueCollection = localPrintServer.GetPrintQueues()

    ' Return a collection of print queues, which individually hold the features or states
    ' of a printer as well as common properties for all print queues.
    Return printQueueCollection

End Function

XpsDocumentWriter

XpsDocumentWriter, s mnoha Write a WriteAsync metodami, se používá k přidání XPS dokumentů do PrintQueue. Metoda se například Write(FixedDocumentSequence, PrintTicket) používá k synchronnímu přidání dokumentu XPS s lístkem tisku do fronty. Metoda WriteAsync(FixedDocumentSequence, PrintTicket) se používá k asynchronnímu přidání dokumentu XPS s tiskovým lístkem do fronty.

Následující příklad vytvoří XpsDocumentWriter a přidá dokumenty XPS synchronně i asynchronně do PrintQueue kódu using.

/// <summary>
/// Asynchronously, add the XPS document together with a print ticket to the print queue.
/// </summary>
/// <param name="xpsFilePath">Path to source XPS file.</param>
/// <param name="printQueue">The print queue to print to.</param>
/// <param name="printTicket">The print ticket for the selected print queue.</param>
public static void PrintXpsDocumentAsync(string xpsFilePath, PrintQueue printQueue, PrintTicket printTicket)
{
    // Create an XpsDocumentWriter object for the print queue.
    XpsDocumentWriter xpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(printQueue);

    // Open the selected document.
    XpsDocument xpsDocument = new(xpsFilePath, FileAccess.Read);

    // Get a fixed document sequence for the selected document.
    FixedDocumentSequence fixedDocSeq = xpsDocument.GetFixedDocumentSequence();

    // Asynchronously, add the XPS document together with a print ticket to the print queue.
    xpsDocumentWriter.WriteAsync(fixedDocSeq, printTicket);
}

/// <summary>
/// Synchronously, add the XPS document together with a print ticket to the print queue.
/// </summary>
/// <param name="xpsFilePath">Path to source XPS file.</param>
/// <param name="printQueue">The print queue to print to.</param>
/// <param name="printTicket">The print ticket for the selected print queue.</param>
public static void PrintXpsDocument(string xpsFilePath, PrintQueue printQueue, PrintTicket printTicket)
{
    // Create an XpsDocumentWriter object for the print queue.
    XpsDocumentWriter xpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(printQueue);

    // Open the selected document.
    XpsDocument xpsDocument = new(xpsFilePath, FileAccess.Read);

    // Get a fixed document sequence for the selected document.
    FixedDocumentSequence fixedDocSeq = xpsDocument.GetFixedDocumentSequence();

    // Synchronously, add the XPS document together with a print ticket to the print queue.
    xpsDocumentWriter.Write(fixedDocSeq, printTicket);
}
''' <summary>
''' Asynchronously, add the XPS document together with a print ticket to the print queue.
''' </summary>
''' <param name="xpsFilePath">Path to source XPS file.</param>
''' <param name="printQueue">The print queue to print to.</param>
''' <param name="printTicket">The print ticket for the selected print queue.</param>
Public Shared Sub PrintXpsDocumentAsync(xpsFilePath As String, printQueue As PrintQueue, printTicket As PrintTicket)

    ' Create an XpsDocumentWriter object for the print queue.
    Dim xpsDocumentWriter As XpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(printQueue)

    ' Open the selected document.
    Dim xpsDocument As XpsDocument = New XpsDocument(xpsFilePath, FileAccess.Read)

    ' Get a fixed document sequence for the selected document.
    Dim fixedDocSeq As FixedDocumentSequence = xpsDocument.GetFixedDocumentSequence()

    ' Asynchronously, add the XPS document together with a print ticket to the print queue.
    xpsDocumentWriter.WriteAsync(fixedDocSeq, printTicket)

End Sub

''' <summary>
''' Synchronously, add the XPS document together with a print ticket to the print queue.
''' </summary>
''' <param name="xpsFilePath">Path to source XPS file.</param>
''' <param name="printQueue">The print queue to print to.</param>
''' <param name="printTicket">The print ticket for the selected print queue.</param>
Public Shared Sub PrintXpsDocument(xpsFilePath As String, printQueue As PrintQueue, printTicket As PrintTicket)

    ' Create an XpsDocumentWriter object for the print queue.
    Dim xpsDocumentWriter As XpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(printQueue)

    ' Open the selected document.
    Dim xpsDocument As XpsDocument = New XpsDocument(xpsFilePath, FileAccess.Read)

    ' Get a fixed document sequence for the selected document.
    Dim fixedDocSeq As FixedDocumentSequence = xpsDocument.GetFixedDocumentSequence()

    ' Synchronously, add the XPS document together with a print ticket to the print queue.
    xpsDocumentWriter.Write(fixedDocSeq, printTicket)

End Sub

Cesta k tisku GDI

I když aplikace WPF nativně podporují cestu tisku XPS, mohou také výstupem do cesty tisku GDI voláním některé z Write metod WriteAsync XpsDocumentWriter třídy a výběrem tiskové fronty pro tiskárnu, která není xpsDrv.

U aplikací, které nevyžadují funkci nebo podporu XPS, zůstane aktuální cesta k tisku GDI beze změny. Další informace o cestě k tisku GDI a různých možnostech převodu XPS naleznete v tématu Převaděč dokumentů MXDC (Microsoft XPS) a XPSDrv ovladače tiskárny.

Model ovladače XPSDrv

Cesta tisku XPS zlepšuje efektivitu zařazování pomocí XPS jako nativního formátu tiskového fondu při tisku na tiskárnu nebo ovladač s podporou XPS. Na rozdíl od EMF, který představuje výstup aplikace jako řadu volání do GDI pro vykreslovací služby, formát zařazování XPS představuje dokument. Takže když jsou soubory fondu XPS výstupem ovladače tiskárny založené na XPS, nevyžadují další interpretaci, protože ovladače pracují přímo s daty v daném formátu. Tato funkce eliminuje převody dat a barevného prostoru vyžadovaných pro soubory EMF a ovladače tisku založené na GDI.

Zjednodušený proces zařazování eliminuje potřebu vygenerovat zprostředkující soubor fondu, například datový soubor EMF, před zařazováním dokumentu. Při menších velikostech souborů zařazování může cesta tisku XPS snížit síťový provoz a zlepšit výkon tisku. Ve srovnání s jejich ekvivalenty EMF se velikost souborů fondu XPS obvykle snižuje při použití cesty tisku XPS. Zmenšení velikosti souboru zařazování probíhá prostřednictvím několika mechanismů:

  • Nastavení písma, které ukládá pouze znaky použité v dokumentu v souboru XPS.
  • Pokročilá podpora grafiky, která nativně podporuje průhlednost a primitiva přechodu, aby nedocházelo k rasterizaci obsahu XPS.
  • Identifikace běžných prostředků, například obrázku firemního loga, které se v dokumentu používá vícekrát Běžné prostředky se považují za sdílené prostředky a načítají se pouze jednou.
  • Komprese ZIP, která se používá ve všech dokumentech XPS.

Velikost souboru zařazování ve formátu XPS nemusí být snížena, pokud je vektorová grafika vysoce složitá, vícevrstvá nebo neefektivní zapisovaná. Na rozdíl od souborů zařazování GDI soubory XPS vkládají písma zařízení a písma počítače pro účely zobrazení obrazovky, i když oba typy písem jsou podsetě a ovladače tiskárny mohou před přenosem souboru do tiskárny odebrat písma zařízení.

Tip

Soubory XPS můžete vytisknout také pomocí PrintQueue.AddJob metod. Další informace naleznete v tématu Jak tisknout soubory XPS.

Viz také