Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med Microsoft .NET har programutvecklare som använder Windows Presentation Foundation (WPF) en omfattande uppsättning API:er för hantering av utskrifts- och utskriftssystem. Kärnan i den här funktionen är XML Paper Specification (XPS) filformatet och XPS-skrivarvägen.
Om XPS
XPS är ett elektroniskt dokumentformat, ett spoolfilformat och ett sidbeskrivningsspråk. Det är ett öppet dokumentformat som använder XML, Öppna paketeringskonventioner och andra branschstandarder för att skapa plattformsoberoende dokument. XPS förenklar processen med vilken digitala dokument skapas, delas, skrivs ut, visas och arkiveras. Mer information om XPS finns i XPS-dokument.
XPS-utskriftssökväg
XPS-utskriftssökvägen är en Windows-funktion som omdefinierar hur utskriften hanteras i Windows-program. XPS-utskriftssökvägen kan ersätta:
- Dokumentpresentationsspråk, till exempel RTF-format eller Portabelt dokumentformat.
- Utskriftspoolformat, till exempel Windows Metafile eller EMF (Enhanced Metafile).
- Sidbeskrivningsspråk, till exempel skrivarkommandospråk eller PostScript.
Som ett resultat behåller XPS-utskriftssökvägen XPS-formatet från applikationspublikation ned till slutlig bearbetning vid skrivardrivrutin eller enhet.
Utskriftshanteraren för XPS-dokument stöder både XPS-utskriftssökvägen och GDI-utskriftssökvägen. XPS-spårvägen för utskrifter hanterar naturligt en XPS-spolfil och kräver en XPS-skrivardrivrutin. Utskriftsvägen för XPS bygger på XPS-skrivardrivrutinen (XPSDrv).
Fördelarna med XPS-utskriftsvägen är:
- WYSIWYG-utskriftsstöd.
- Inbyggt stöd för avancerade färgprofiler, till exempel 32 bitar per kanal, CMYK-färgmodellen, namngivna färger, n-färger, transparenser och toningar.
- Förbättrad utskriftsprestanda – XPS-funktioner och förbättringar är endast tillgängliga för program som riktar sig till XPS-utskriftssökvägen.
- XPS-format av branschstandard.
För grundläggande utskriftsscenarier är ett enkelt och intuitivt API tillgängligt med ett standardgränssnitt för utskriftskonfiguration och jobböverföring. I avancerade scenarier stöder API:et anpassning av användargränssnittet eller inget användargränssnitt alls, synkron eller asynkron utskrift och funktioner för batchutskrift. Både enkla och avancerade alternativ ger utskriftsstöd i fullständiga eller partiella förtroendelägen.
XPS har utformats med utökningsbarhet i åtanke, så att funktioner och funktioner kan läggas till i XPS på ett modulärt sätt. Utökningsbarhetsfunktioner inkluderar:
- Ett utskriftsschema som stöder snabb förlängning av enhetsfunktioner. Den offentliga delen av schemat uppdateras regelbundet för att lägga till önskade enhetsfunktioner. Mer information finns i Utökningsbar arkitektur.
- En utökningsbar filterpipeline som XPSDrv-drivrutiner använder för både direkt och skalbar utskrift av XPS-dokument. Mer information finns i XPSDrv-skrivardrivrutiner.
Skriva ut sökvägsarkitektur
WPF-program har inbyggt stöd för XPS-utskriftssökvägen och kan använda XPS-utskrifts-API:er för att skriva ut direkt till XPSDrv-drivrutinen. Om målutskriftskön för skrivåtgärden inte har någon XPSDrv-drivrutin konverterar klassmetoderna WriteWriteAsync och XpsDocumentWriter automatiskt innehåll från XPS till GDI-format för GDI-utskriftssökvägen.
Följande bild visar undersystemet för utskrift och definierar de delar som tillhandahålls av Microsoft och oberoende programvaru- och maskinvaruleverantörer.
Grundläggande XPS-utskrift
WPF har ett utskrifts-API som stöder både grundläggande och avancerade utskriftsfunktioner. För de program som inte kräver omfattande utskriftsanpassning eller åtkomst till den fullständiga XPS-funktionsuppsättningen kan grundläggande utskriftsstöd räcka. Grundläggande utskriftsstöd tillhandahålls via en PrintDialog-kontroll som kräver minimal konfiguration, har ett välbekant användargränssnitt och har stöd för många XPS-funktioner.
PrintDialog
Kontrollen System.Windows.Controls.PrintDialog tillhandahåller en enda startpunkt för UI, konfiguration och XPS-jobböverföring. Information om hur du instansierar och använder kontrollen finns i Visa en utskriftsdialogruta.
Avancerad XPS-utskrift
Om du vill komma åt den fullständiga uppsättningen XPS-funktioner använder du det avancerade utskrifts-API:et. Flera relevanta API:er beskrivs i det här avsnittet, inklusive PrintTicket, PrintCapabilities, PrintServer, PrintQueue och XpsDocumentWriter. En fullständig lista över API:er för XPS-utskriftssökväg finns i namnrymderna System.Windows.Xps och System.Printing.
PrintTicket och PrintCapabilities
Klasserna PrintTicket och PrintCapabilities utgör grunden för avancerade XPS-funktioner. Båda objekten innehåller XML-formaterade strukturer med utskriftsorienterade funktioner som definieras av utskriftsschemat. Funktionerna omfattar duplexing, sortering, dubbelsidig utskrift och häftning. En PrintTicket instruerar en skrivare hur du bearbetar ett utskriftsjobb. Klassen PrintCapabilities definierar funktionerna i en skrivare. Genom att fråga efter funktionerna i en skrivare kan du skapa en PrintTicket som drar full nytta av en skrivares funktioner som stöds. På samma sätt kan funktioner som inte stöds undvikas.
I följande exempel frågar du efter PrintCapabilities hos en skrivare och skapar en PrintTicket med hjälp av kod.
/// <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 och PrintQueue
Klassen PrintServer representerar en nätverksutskriftsserver och PrintQueue klassen representerar en skrivare och den utdatajobbkö som är associerad med den. Tillsammans stöder dessa API:er avancerad hantering av utskriftsjobben för en server. En PrintServer, eller en av dess härledda klasser, används för att hantera en PrintQueue.
I följande exempel skapas en LocalPrintServer och åtkomst till den lokala datorns PrintQueueCollection med hjälp av kod.
/// <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, med dess många Write och WriteAsync metoder, används för att lägga till XPS-dokument i en PrintQueue. Metoden används till exempel Write(FixedDocumentSequence, PrintTicket) för att synkront lägga till ett XPS-dokument med en utskriftsbiljett i en kö. Metoden WriteAsync(FixedDocumentSequence, PrintTicket) används för att asynkront lägga till ett XPS-dokument med en utskriftsbiljett i en kö.
I följande exempel skapas ett XpsDocumentWriter och XPS-dokument läggs till, både synkront och asynkront, i en PrintQueue med hjälp av kod.
/// <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
GDI-utskriftssökväg
Även om WPF-program har inbyggt stöd för XPS-utskriftssökvägen, kan de också mata ut till GDI-utskriftssökvägen genom att anropa någon av Write klassmetoderna WriteAsync eller XpsDocumentWriter och välja utskriftskö för en skrivare som inte är XpsDrv.
För program som inte kräver XPS-funktioner eller stöd förblir den aktuella GDI-utskriftssökvägen oförändrad. Mer information om GDI-utskriftssökvägen och de olika alternativen för XPS-konvertering finns i Skrivardrivrutinerna för Microsoft XPS-dokumentkonverterare (MXDC) och XPSDrv.
XPSDrv-drivrutinsmodell
XPS-utskriftsvägen förbättrar effektiviteten för spoolern genom att använda XPS som inbyggt utskriftspoolformat när du skriver ut till en XPS-kompatibel skrivare eller drivrutin. Till skillnad från EMF, som representerar programutdata som en serie anrop till GDI för renderingstjänster, representerar XPS-spoolformatet dokumentet. Så när XPS-spoolfiler matas ut till en XPS-baserad skrivardrivrutin behöver de inte ytterligare tolkning eftersom drivrutinerna fungerar direkt på data i det formatet. Den här funktionen eliminerar de data- och färgrymdskonverteringar som krävs för EMF-filer och GDI-baserade utskriftsdrivrutiner.
Den förenklade buffringsprocessen eliminerar behovet av att generera en mellanliggande spoolfil, till exempel en EMF-datafil, innan dokumentet buffrats. Med mindre spolfilstorlekar kan XPS-utskriftsvägen minska nätverkstrafiken och förbättra utskriftsprestandan. Jämfört med EMF-motsvarigheterna minskas vanligtvis XPS-filsstorlekarna när man använder XPS-utskriftsvägen. Spoolfilstorleksminskning görs genom flera mekanismer:
- Teckensnittsunderuppsättning, som endast lagrar de tecken som används i ett dokument i XPS-filen.
- Avancerat grafikstöd, som har inbyggt stöd för transparens och toningspridare för att undvika rastrering av XPS-innehåll.
- Identifiering av vanliga resurser, till exempel en bild av en företagslogotyp som används flera gånger i ett dokument. Vanliga resurser behandlas som delade resurser och läses bara in en gång.
- ZIP-komprimering, som används i alla XPS-dokument.
XPS-spolfilens storlek kanske inte minskas om en vektorgrafik är mycket komplex, flerskiktad eller ineffektivt utformad. Till skillnad från GDI-spoolfiler bäddar XPS-filer in enhetsteckensnitt och datorbaserade teckensnitt i skärmvisningssyfte, även om båda typerna av teckensnitt är underinställningar och skrivardrivrutiner kan ta bort enhetsteckensnitt innan filen överförs till skrivaren.
Tips/Råd
Du kan också skriva ut XPS-filer med hjälp PrintQueue.AddJob av metoder. Mer information finns i Skriva ut XPS-filer.
Se även
.NET Desktop feedback