Belgelere genel bakış (WPF .NET)
Microsoft .NET, Windows Presentation Foundation (WPF) kullanan uygulama geliştiricilerinin zengin bir yazdırma ve yazdırma sistemi yönetim apı 'si kümesi vardır. Bu işlevin çekirdeği XML Kağıt Belirtimi (XPS) dosya biçimi ve XPS yazdırma yoludur.
XPS hakkında
XPS elektronik belge biçimidir, bir biriktirme dosyası biçimidir ve sayfa açıklaması dilidir. Bu, platformlar arası belgeler oluşturmak için XML, açık paketleme kuralları ve diğer sektör standartlarını kullanan açık bir belge biçimidir. XPS dijital belge oluşturma, paylaşılan, yazdırılma, görüntülenen ve arşivlenen işlemleri basitleştirir. XPS hakkında daha fazla bilgi için bkz. XPS belgeleri.
XPS yazdırma yolu
XPS yazdırma yolu , yazdırmanın Windows uygulamalarda nasıl işlendiğini tekrar tanımlayan bir Windows özelliğidir. XPS yazdırma yolu şunları değiştirebilir:
- Zengin metin biçimi veya taşınabilir belge biçimi gibi belge sunumu dilleri.
- Windows meta dosyası veya gelişmiş meta dosyası (EMF) gibi yazdırma biriktiricisi biçimleri.
- Yazıcı komut dili veya PostScript gibi sayfa açıklaması dilleri.
Sonuç olarak, XPS yazdırma yolu, uygulama yayımından XPS biçimini, yazıcı sürücüsü veya cihazında son işlemeye karşı korur.
XPS belgeleri için yazdırma biriktiricisi, hem XPS yazdırma yolunu hem de GDI yazdırma yolunu destekler. XPS yazdırma yolu yerel olarak bir XPS biriktirme dosyası kullanır ve bir XPS yazıcı sürücüsü gerektirir. XPS yazdırma yolu, XPS yazıcı sürücüsü (XPSDrv) modelinde oluşturulmuştur.
XPS yazdırma yolunun avantajları şunlardır:
- WYSıWYG yazdırma desteği.
- Gelişmiş renk profillerinin yerel desteği; Örneğin, kanal başına 32 bit, CMYK renk modeli, adlandırılmış renkler, n-mürekkepler ve asetatlar ve degradeler.
- Gelişmiş baskı performansı — XPS özellikleri ve geliştirmeleri yalnızca XPS yazdırma yolunu hedefleyen uygulamalar tarafından kullanılabilir.
- Endüstri standardı XPS biçimi.
Temel yazdırma senaryolarında basit ve sezgisel bir API, yazdırma yapılandırması ve iş gönderimi için standart bir kullanıcı arabirimi ile kullanılabilir. Gelişmiş senaryolar için API, UI özelleştirmesini veya hiç Kullanıcı arabirimi, zaman uyumlu veya zaman uyumsuz yazdırma ve toplu yazdırma özellikleri destekler. Hem basit hem de gelişmiş seçenekler, tam veya kısmi güven modlarında yazdırma desteği sağlar.
XPS, genişletilebilirlik göz önünde bulundurularak tasarlandı, bu nedenle Özellikler ve yetenekler, XPS 'ye modüler bir şekilde eklenebilir. Genişletilebilirlik özellikleri şunlardır:
- Cihaz yeteneklerinin hızlı uzantısını destekleyen bir yazdırma şeması. Şemanın genel bölümü, istenen cihaz yeteneklerini eklemek için düzenli olarak güncelleştirilir. Daha fazla bilgi için bkz. Genişletilebilir mimari.
- Hem doğrudan hem de ölçeklenebilir XPS belgelerinin yazdırılmasını desteklemek için, XPSDrv sürücülerinin kullandığı genişletilebilir bir filtre işlem hattı. Daha fazla bilgi için bkz. XPSDrv yazıcı sürücüleri.
Yazdırma yolu mimarisi
WPF uygulamaları, XPS yazdırma yolunu yerel olarak destekler ve doğrudan XPSDrv sürücüsüne yazdırmak için XPS yazdırma API 'Lerini kullanabilir. Yazma işleminin hedef yazdırma sırasının bir XPSDrv sürücüsü yoksa, WriteWriteAsync Bu durumda sınıfın ve YÖNTEMLERI, XpsDocumentWriter GDI yazdırma yolu için IÇERIĞI otomatik olarak XPS 'den GDI biçimine dönüştürür.
Aşağıdaki çizimde, yazdırma alt sistemi gösterilmektedir ve Microsoft ve bağımsız yazılım ve donanım satıcıları tarafından sunulan bölümler tanımlanmaktadır.

Temel XPS yazdırma
WPF 'in hem temel hem de gelişmiş yazdırma özelliklerini destekleyen bir yazdırma API 'SI vardır. Kapsamlı yazdırma özelleştirmesi gerektirmeyen veya XPS özelliği 'nin tamamına erişebilen uygulamalar için, temel yazdırma desteği yeterli çalışmayabilir. Temel yazdırma desteği, en az yapılandırma gerektiren bir PrintDialog denetimi aracılığıyla sağlanır, tanıdık bir kullanıcı arabirimine sahiptir ve birçok XPS özelliğini destekler.
PrintDialog
System.Windows.Controls.PrintDialogDenetim, UI, yapılandırma ve XPS işi gönderimi için tek bir giriş noktası sağlar. Denetimin örneğini oluşturma ve kullanma hakkında bilgi edinmek için bkz. yazdırma iletişim kutusu görüntüleme.
Gelişmiş XPS yazdırma
XPS özelliklerinin tamamına erişmek için gelişmiş yazdırma API 'sini kullanın. Bu bölümde, PrintTicket, PrintCapabilities, YazıcıSunucusu, PrintQueueve XpsDocumentWriterdahil olmak üzere çeşitli ilgili API 'ler açıklanmaktadır. XPS yazdırma yolu API 'Lerinin tüm listesi için bkz System.Windows.XpsSystem.Printing . ve ad alanları.
PrintTicket ve PrintCapabilities
PrintTicketVe PrintCapabilities sınıfları, gelişmiş XPS özelliklerinin temelidir. Her iki nesne de yazdırma şeması tarafından tanımlanan, yazdırma yönelimli özelliklerin XML biçimli yapılarını içerir. Özellikler arasında çift yönlü, harmanlama, iki taraflı yazdırma ve zımbalama bulunur. Bir PrintTicket yazıcıya bir yazdırma işini nasıl işleyeceğini bildirir. PrintCapabilitiesSınıfı, bir yazıcının yeteneklerini tanımlar. Bir yazıcının yeteneklerini sorgulayarak, PrintTicket yazıcının desteklenen özelliklerinden tam olarak yararlanabilen bir oluşturulabilir. Benzer şekilde, desteklenmeyen özelliklerden kaçınılabilir.
Aşağıdaki örnek PrintCapabilities bir yazıcıyı sorgular ve bir PrintTicket using kodu oluşturur.
/// <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
YazıcıSunucusu ve PrintQueue
PrintServerSınıfı bir ağ yazdırma sunucusunu temsil eder ve PrintQueue sınıfı bir yazıcıyı ve onunla ilişkili çıkış işi kuyruğunu temsil eder. Birlikte, bu API 'Ler bir sunucu için yazdırma işlerinin gelişmiş yönetimini destekler. Bir PrintServer veya türetilmiş sınıflarından biri, bir yönetmek için kullanılır PrintQueue .
Aşağıdaki örnek bir oluşturur LocalPrintServer ve kodu kullanarak yerel bilgisayarın erişimine erişir 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
XpsDocumentWriter, çok Write ve WriteAsync YÖNTEMLERIYLE, XPS belgelerini bir öğesine eklemek için kullanılır PrintQueue . Örneğin, yöntemi, Write(FixedDocumentSequence, PrintTicket) bir sıraya Yazdırma bileti olan BIR XPS belgesini eşzamanlı olarak eklemek için kullanılır. WriteAsync(FixedDocumentSequence, PrintTicket)Yöntemi, bir sıraya Yazdırma bileti olan BIR XPS belgesini zaman uyumsuz olarak eklemek için kullanılır.
Aşağıdaki örnek, bir XpsDocumentWriter using koduna hem zaman uyumlu hem de zaman uyumsuz olarak XPS belgeleri ekler PrintQueue .
/// <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 yazdırma yolu
WPF uygulamaları yerel olarak XPS yazdırma yolunu desteklese de, Write sınıfının veya yöntemlerinden birini çağırarak WriteAsyncXpsDocumentWriter ve XPSDrv olmayan bir yazıcı için yazdırma kuyruğunu seçerek GDI yazdırma yoluna da çıkış yapabilir.
XPS işlevselliği veya desteği gerektirmeyen uygulamalar için geçerli GDI yazdırma yolu değişmeden kalır. GDI yazdırma yolu ve çeşitli XPS dönüştürme seçenekleri hakkında daha fazla bilgi için bkz. MICROSOFT XPS Belge Dönüştürücüsü (MXDC) ve XPSDrv yazıcı sürücüleri.
XPSDrv sürücü modeli
XPS yazdırma yolu, XPS özellikli bir yazıcıya veya sürücüye yazdırırken yerel yazdırma kuyruğu biçimi olarak XPS kullanarak biriktirici verimliliğini geliştirir. Uygulama çıkışını, işleme hizmetleri için GDI 'ya bir dizi çağrı olarak temsil eden EMF 'den farklı olarak, XPS biriktirme biçimi belgeyi temsil eder. Bu nedenle, XPS biriktirme dosyaları bir XPS tabanlı yazıcı sürücüsüne çıktı olduğunda, sürücüler doğrudan bu biçimdeki veriler üzerinde çalışırken daha fazla yorum gerektirmez. Bu özellik, EMF dosyaları ve GDI tabanlı yazıcı sürücüleri için gereken veri ve renk alanı dönüşümlerini ortadan kaldırır.
Basitleştirilmiş biriktirme işlemi, belge belleğe alınmadan önce, EMF veri dosyası gibi bir ara biriktirme dosyası oluşturma gereksinimini ortadan kaldırır. Daha küçük biriktirme dosyası boyutları ile XPS yazdırma yolu, ağ trafiğini azaltabilir ve yazdırma performansını iyileştirebilir. EMF eşdeğerlerine kıyasla, XPS yazıcı yolu kullanılırken XPS biriktirme dosya boyutları genellikle azaltılır. Biriktirme dosyası boyutunun azaltılması, çeşitli mekanizmalar aracılığıyla yapılır:
- Yalnızca XPS dosyasındaki bir belge içinde kullanılan karakterleri depolayan yazı tipialt kümesi.
- XPS içeriğinin rasterleştirmasını engellemek için saydamlığı ve gradyan temel sürümlerini yerel olarak destekleyen Gelişmiş grafik desteği.
- Bir belgede birden çok kez kullanılan bir kurumsal amblem görüntüsü gibi ortak kaynakların tanımlanması. Ortak kaynaklar, paylaşılan kaynaklar olarak değerlendirilir ve yalnızca bir kez yüklenir.
- Tüm XPS belgelerinde kullanılan ZIP sıkıştırması.
Vektör grafiğinin son derece karmaşık, çok katmanlı veya yeterince yazılabilir olması durumunda XPS biriktirme dosyası boyutu azalabilir. GDI biriktirme dosyalarının aksine, XPS dosyaları ekran görüntüleme amacıyla cihaz yazı tiplerini ve bilgisayar tabanlı yazı tiplerini ekleme, ancak her iki tür yazı tipi de alt kümelenir ve yazıcı sürücüleri dosyayı yazıcıya iletmeden önce cihaz yazı tiplerini kaldırabilir.
İpucu
Ayrıca, yöntemlerini kullanarak XPS dosyalarını yazdırabilirsiniz PrintQueue.AddJob . Daha fazla bilgi için bkz. XPS dosyalarını yazdırma.