Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Microsoft .NET-tel a Windows Presentation Foundation (WPF) alkalmazást használó alkalmazásfejlesztők számos nyomtatási és nyomtatási rendszerfelügyeleti API-val rendelkeznek. Ennek a funkciónak a lényege az XML Paper Specification (XPS) fájlformátum és az XPS nyomtatási útvonal.
Tudnivalók az XPS-ről
Az XPS egy elektronikus dokumentumformátum, egy spool fájlformátum és egy oldalleírási nyelv. Ez egy nyílt dokumentumformátum, amely XML, Open Packaging-konvenciók és egyéb iparági szabványok használatával hoz létre platformfüggetlen dokumentumokat. Az XPS leegyszerűsíti a digitális dokumentumok létrehozásának, megosztásának, nyomtatásának, megtekintésének és archiválásának folyamatát. További információ az XPS-ről: XPS-dokumentumok.
XPS nyomtatási útvonal
A XPS nyomtatási útvonal egy Windows-funkció, amely újradefiniálja a nyomtatás kezelését a Windows-alkalmazásokban. Az XPS nyomtatási útvonala lecserélhető:
- Dokumentumbemutatási nyelvek, például Rich Text Formátum vagy Hordozható dokumentumformátum.
- Nyomtatásisor-formátumok, például Windows Metafile vagy Enhanced Metafile (EMF).
- Oldalleíró nyelvek, például nyomtatóparancsnyelv vagy PostScript.
Ennek eredményeképpen az XPS nyomtatási útvonal megtartja az XPS formátumot az alkalmazás kiadványától egészen a nyomtatóillesztő vagy -eszköz végső feldolgozásáig.
Az XPS-dokumentumok nyomtatási sor kezelője támogatja mind az XPS nyomtatási útvonalat, mind a GDI nyomtatási útvonalat. Az XPS nyomtatási útvonal natív módon fogad be egy XPS nyomtatási sorfájlt, és XPS-nyomtatóillesztőt igényel. Az XPS nyomtatási útvonal a XPS nyomtatóillesztő (XPSDrv) modellre épül.
Az XPS nyomtatási útvonal előnyei a következők:
- WYSIWYG nyomtatás támogatása.
- A speciális színprofilok natív támogatása, például csatornánként 32 bit, a CMYK színmodell, elnevezett színek, n-tinták, valamint átlátszóságok és színátmenetek.
- Továbbfejlesztett nyomtatási teljesítmény – Az XPS funkciói és fejlesztései csak az XPS nyomtatási útvonalat megcélzott alkalmazások számára érhetők el.
- Iparági szabvány XPS formátum.
Az alapszintű nyomtatási forgatókönyvek esetében egy egyszerű és intuitív API érhető el egy szabványos felhasználói felülettel a nyomtatás konfigurálásához és a feladatok beküldéshez. Speciális forgatókönyvek esetén az API támogatja a felhasználói felület testreszabását, vagy egyáltalán nem támogatja a felhasználói felületet, a szinkron vagy aszinkron nyomtatást, valamint a kötegelt nyomtatási képességeket. Az egyszerű és a speciális lehetőségek egyaránt teljes vagy részleges megbízhatósági módban nyújtanak nyomtatási támogatást.
Az XPS-t a bővíthetőség szem előtt tartásával tervezték, így a funkciók és képességek modulárisan bővíthetők az XPS-hez. A bővíthetőségi funkciók a következők:
- Olyan nyomtatási séma, amely támogatja az eszköz képességeinek gyors kiterjesztését. A séma nyilvános része rendszeresen frissül a kívánt eszközképességek hozzáadásához. További információ: Bővíthető architektúra.
- Egy bővíthető szűrőfolyamat, amelyet az XPSDrv-illesztőprogramok az XPS-dokumentumok közvetlen és méretezhető nyomtatásának támogatására használnak. A további információkért lásd: XPSDrv nyomtatóillesztők.
Nyomtatási útvonal-architektúra
A WPF-alkalmazások natív módon támogatják az XPS nyomtatási útvonalat, és az XPS nyomtatási API-kkal közvetlenül az XPSDrv illesztőprogramba nyomtathatnak. Ha az írási művelet célnyomtatási üzenetsora nem rendelkezik XPSDrv illesztőprogrammal, akkor a Write osztály WriteAsync és XpsDocumentWriter metódusai automatikusan XPS-ről GDI formátumra konvertálják a tartalmat a GDI nyomtatási útvonalához.
Az alábbi ábra a nyomtatási alrendszert mutatja be, és meghatározza a Microsoft és a független szoftver- és hardvergyártók által biztosított részeket.
Alapszintű XPS-nyomtatás
A WPF rendelkezik egy nyomtatási API-val, amely támogatja az alapszintű és a speciális nyomtatási funkciókat is. Azoknál az alkalmazásoknál, amelyek nem igényelnek részletes nyomtatási testreszabást vagy hozzáférést a teljes XPS-funkciókészlethez, elegendő lehet az alapszintű nyomtatás támogatása. Az alapszintű nyomtatási támogatás egy PrintDialog vezérlőn keresztül érhető el, amely minimális konfigurációt igényel, jól ismert felhasználói felülettel rendelkezik, és számos XPS-funkciót támogat.
Nyomtatási párbeszédablak
A System.Windows.Controls.PrintDialog vezérlő egyetlen belépési pontot biztosít a felhasználói felület, a konfiguráció és az XPS-feladatok beküldéshez. A vezérlő példányosításáról és használatáról a Nyomtatási párbeszédpanel megjelenítésecímű témakörben olvashat.
Speciális XPS-nyomtatás
Az XPS-funkciók teljes készletének eléréséhez használja a speciális nyomtatási API-t. Ebben a szakaszban számos releváns API-t ismertetünk, többek között PrintTicket, PrintCapabilities, PrintServer, PrintQueueés XpsDocumentWriter. Az XPS nyomtatási útvonal API-k teljes listáját a System.Windows.Xps és a System.Printing névterekben találja.
Nyomtatási Jegy és Nyomtatási Képességek
A PrintTicket és PrintCapabilities osztályok a fejlett XPS-funkciók alapjai. Mindkét objektum a nyomtatási séma által meghatározott, nyomtatásorientált funkciók XML-formátumú struktúráit tartalmazza. A funkciók közé tartozik a kétoldalas nyomtatás, a rendezés, a kétoldalas nyomtatás és a stapling. A PrintTicket arra utasítja a nyomtatót, hogyan dolgozza fel a nyomtatási feladatokat. A PrintCapabilities osztály határozza meg a nyomtató képességeit. A nyomtató képességeinek lekérdezésével létrehozhat egy PrintTicket, amely teljes mértékben kihasználja a nyomtató támogatott funkcióit. Hasonlóképpen, a nem támogatott funkciók is elkerülhetők.
Az alábbi példa lekérdezi a nyomtató PrintCapabilities-ját, és kóddal létrehoz egy PrintTicket-et.
/// <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 és PrintQueue
A PrintServer osztály egy hálózati nyomtatókiszolgálót, a PrintQueue osztály pedig a nyomtatót és a hozzá társított kimeneti feladatsort jelöli. Ezek az API-k együttesen támogatják a kiszolgáló nyomtatási feladatainak speciális kezelését. A PrintServervagy annak egyik származtatott osztálya egy PrintQueuekezelésére szolgál.
Az alábbi példa létrehoz egy LocalPrintServer, és kóddal éri el a helyi számítógép 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 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 (XPS dokumentumíró)
XpsDocumentWriter-t számos Write és WriteAsync metódussal XPS-dokumentumok hozzáadására használnak egy PrintQueue-hoz. A Write(FixedDocumentSequence, PrintTicket) metódussal például szinkronizálva adhat hozzá egy XPS-dokumentumot nyomtatási jegyekkel az üzenetsorhoz. A WriteAsync(FixedDocumentSequence, PrintTicket) metódussal aszinkron módon adhat hozzá egy nyomtatási jegyet tartalmazó XPS-dokumentumot az üzenetsorhoz.
Az alábbi példa létrehoz egy XpsDocumentWriter-t, és XPS dokumentumokat szinkron és aszinkron módon ad hozzá egy PrintQueue-hez kód segítségével.
/// <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
A GDI nyomtatási útvonala
Bár a WPF-alkalmazások natív módon támogatják az XPS nyomtatási útvonalát, a GDI nyomtatási útvonalára is képesek a Write osztály egyik WriteAsync vagy XpsDocumentWriter metódusának meghívásával, valamint a nem XpsDrv nyomtató nyomtatási üzenetsorának kiválasztásával.
Az XPS-funkciókat vagy támogatást nem igénylő alkalmazások esetében az aktuális GDI nyomtatási útvonal változatlan marad. A GDI nyomtatási útvonaláról és a különböző XPS-konverziós lehetőségekről további információ található a Microsoft XPS-dokumentumkonverter (MXDC) és XPSDrv nyomtató-illesztőprogramok.
XPSDrv illesztőprogram-modell
Az XPS nyomtatási útvonala javítja a spooler hatékonyságát azáltal, hogy az XPS-t használja natív nyomtatásisor-formátumként, amikor XPS-kompatibilis nyomtatóra vagy illesztőprogramra nyomtatunk. Az EMF-vel ellentétben, amely az alkalmazás kimenetét a GDI-be irányuló hívások sorozataként jeleníti meg a renderelési szolgáltatásokhoz, az XPS-várólisták formátuma a dokumentumot jelöli. Így ha az XPS-fájlokat XPS-alapú nyomtatóillesztőkre írják ki, nem igényelnek további értelmezést, mivel az illesztőprogramok közvetlenül az adott formátumú adatokon működnek. Ez a funkció kiküszöböli az EMF-fájlokhoz és a GDI-alapú nyomtatóillesztőkhöz szükséges adat- és színtérátalakításokat.
Az egyszerűsített várólistázási folyamat szükségtelenné teszi egy köztes várólistafájl( például EMF-adatfájl) létrehozásának szükségességét a dokumentum várólistára helyezése előtt. Kisebb nyomtatási méret esetén az XPS nyomtatási útvonala csökkentheti a hálózati forgalmat, és javíthatja a nyomtatási teljesítményt. Az EMF-ekvivalensekhez képest az XPS-fájlméretek általában csökkennek az XPS nyomtatási útvonalának használatakor. A Spool fájlméretének csökkentése több mechanizmussal történik:
- Betűtípus-felosztási, amely csak a dokumentumban használt karaktereket tárolja az XPS-fájlban.
- Speciális grafikai támogatás, amely natív módon támogatja az átlátszóságot és a színátmenetes primitíveket az XPS-tartalom raszterizálásának elkerülése érdekében.
- Gyakori erőforrások azonosítása, például egy dokumentumon többször használt vállalati embléma képe. A közös erőforrások megosztott erőforrásokként vannak kezelve, és csak egyszer töltődnek be.
- Az összes XPS-dokumentumhoz használtZIP-tömörítés.
Előfordulhat, hogy az XPS nyomtatási fájlmérete nem csökken, ha egy vektorgrafika rendkívül összetett, többrétegű vagy nem hatékonyan megírt. A GDI-fájlokkal ellentétben az XPS-fájlok eszköz- és számítógépes betűtípusokat ágyaznak be a képernyőmegjelenítési célokra, bár mindkét betűtípust részkészletként használják, és a nyomtatóillesztők eltávolíthatják az eszközbetűtípusokat, mielőtt elküldenék a fájlt a nyomtatónak.
Jótanács
XPS-fájlokat is nyomtathat PrintQueue.AddJob módszerekkel. További információ: XPS-fájlok nyomtatása.
Lásd még
- PrintDialog
- XpsDocumentWriter
- XpsDocument
- PrintTicket
- PrintCapabilities
- PrintServer
- PrintQueue
- útmutató témakörök
- Dokumentumok a WPF-ben
- XPS-dokumentumok
- Dokumentum szerializálása és tárolási
- Microsoft XPS-dokumentumkonverter (MXDC)
.NET Desktop feedback