Yazdırmaya Genel Bakış
İle Microsoft .NET Framework, uygulama geliştiricilerin kullanarak Windows Presentation Foundation (WPF) sahip yazdırma ve yazdırma Sistem Yönetimi yeni zengin APIs. İle Windows Vista, bunları bazıları yazdırma sistemi oluşturma geliştiriciler için de kullanılabilir Windows Forms uygulamaları ve geliştiriciler kullanarak yönetilmeyen kod. Bu yeni işlevsellik özünde yenilikler XML Paper Specification (XPS) Dosya biçimi ve XPS yolu Yazdır
This topic contains the following sections.
About XPS
XPS Print Path
GDI Print Path
XPSDrv sürücü modeli
Related Topics
About XPS
XPSelektronik belge biçimi, biriktirme dosya biçimi ve bir sayfa tanımlama dili olur. Kullanan bir açık belge biçimi olan XML, Open Packaging Conventions (OPC)ve diğer endüstri standartlarını oluşturmak platformlar arası belge. XPSolarak dijital belgeler oluşturulduğunu, paylaşılan, yazdırılan, görüntülenebilir, arşivlenmiş ve işlemini basitleştirir. Ek bilgi için XPS, bkz: xps Web sitesini.
Yazdırma için çeşitli teknikler XPS dayalı içerik kullanarak WPF gösterilen Nasıl Yapılır: Program Aracılığıyla XPS Dosyalarını Yazdırma. Bu konuda yer alan içerik gözden geçirme sırasında bu örnekler başvurmak yararlı. (Yönetilmeyen kod geliştiriciler için Yardım'a bakın Microsoft xps Belge Dönüştürücüsü yazıcı çıkış. Windows FormsGeliştiriciler kullanmalıdır API , System.Drawing.Printing ad tam desteklemiyor XPS baskı yolu, ancak karma GDI xps yazdırma yolu desteği Bakın baskı yolu mimarisi aşağıda.)
XPS Print Path
XML Paper Specification (XPS) Yazdırma yol, yeni bir Windows özelliği, yeniden tanımlar nasıl baskı gerçekleştirilir Windows uygulamaları. Çünkü XPS bir belge sunum dili (rtf), yazdırma biriktiricisi biçimi (wmf) ve bir sayfa tanımlama dili (pcl veya Postscript); gibi yerine yeni yazdırma yolunu tutan XPS son uygulama yayına biçiminden işleme yazıcı sürücüsü veya aygıt.
XPS Üzerine baskı yolu yerleşik XPS yazıcı sürücü modeli (XPSDrv) gibi geliştiriciler için birçok yarar sağlar "what you see is what you get" (WYSIWYG) yazdırma renk desteği, geliştirilmiş ve önemli ölçüde geliştirilmiş yazdırma performansı. (XPSDrv hakkında daha fazla bilgi için bkz: Windows Driver Development Kit.)
Yazdırma Biriktiricisi için işlem XPS belgeler ise temelde aynı önceki sürümlerinde Windows. Ancak, bunu desteklemek için geliştirilmiştir XPS yanında varolan yazdırma yol GDI yolu Yazdır Yeni baskı yolu olarak tükettiği bir XPS Biriktirme dosyası. Önceki sürümleri için yazılmış kullanıcı modu yazıcı sürücüleri while Windows çalışmak devam edecek bir XPS yazıcı sürücüsü (XPSDrv) kullanmak için gerekli XPS yolu yazdırma
Yararları XPS baskı yolu önemli ve içerir:
WYSIWYGYazıcı desteği
32 Bit / kanal (bpc) cmyk dahil gelişmiş renk profillerinin yerel destek adlı renkleri, n-mürekkepler ve saydamlık ve degradeleri yerel destek.
Her ikisi için Yazdırma performansı geliştirilmiş .NET Framework ve Win32 temel uygulamalar.
Endüstri XPS biçimi.
Temel yazdırma senaryoları için basit ve sezgisel bir API kullanılabilir bir tek giriş noktası kullanıcı arabirimi, yapılandırma ve iş gönderme. Gelişmiş senaryolar için ek bir destek için eklenen user interface (UI) özelleştirme (ya da hiç UI hiç), zaman uyumlu veya zaman uyumsuz yazdırma ve yazdırma yetenekleri. toplu Her iki seçenek de, tam veya kısmi güven modda yazdırma desteği sağlar.
XPSile genişletilebilirlik göz önünde bulundurularak tasarlanmıştır. Genişletilebilirlik framework'ü kullanarak, özellikler ve yetenekler eklenebilir XPS modüler bir şekilde. Genişletilebilirlik özellikleri aşağıdakileri içerir:
Şema yazdırın. Ortak şema düzenli olarak güncelleştirilir ve aygıt özellikleri hızlı uzantısını etkinleştirir. (Bkz: PrintTicket ve PrintCapabilities aşağıda.)
Genişletilebilir filtresi ardışık düzen. XPS Yazıcı sürücüsü (XPSDrv) filtresi ardışık hem doğrudan hem de ölçeklenebilir yazdırmayı etkinleştirmek için tasarlanmıştır XPS belgeler. (Arama "xpsdrv" de Windows Driver Development Kit.)
Yolu mimarisi Yazdır
Hem while Win32 ve .NET Framework uygulamaları destekleyen XPS, Win32 ve Windows Forms uygulamaları bir GDI için XPS dönüştürme için oluşturmak XPS biçimlendirilmiş içerik için XPS yazıcı sürücüsü (XPSDrv). Bu uygulamalar kullanmak zorunda değilsiniz XPS yolu, yazdırmak ve kullanmaya devam edebilirler Enhanced Metafile (EMF) temel yazdırma. Ancak, çoğu XPS özellikleri ve geliştirmeleri, yalnızca hedef uygulamalar için kullanılabilir XPS yolu Yazdır
XPSDrv tabanlı yazıcılar tarafından kullanımını etkinleştirmek için Win32 ve Windows Forms uygulamaları, XPS yazıcı sürücüsü (XPSDrv) dönüştürme destekler GDI için XPS biçimi. XPSDrv modeli için bir dönüştürücü ayrıca sağlar XPS için GDI biçimi böylece Win32 uygulamaları yazdırma XPS belgeler. İçin WPF uygulamaları, dönüştürme XPS için GDI biçimi tarafından otomatik olarak yapılır Write ve WriteAsync yöntemleri XpsDocumentWriter sınıfı her yazma işlemi hedef yazdırma sırasını XPSDrv sürücü yok. (Windows Forms uygulamaları yazdıramıyor XPS belgeler.)
Aşağıdaki resimde yazdırma alt sistemi yer veriliyor ve sağladığı bazı bölümleri tanımlar Microsoftve yazılım ve donanım satıcıları. tarafından tanımlanan bazı bölümleri
Temel xps yazdırma
WPFHer iki temel tanımlar ve Gelişmiş API. Özelleştirme veya erişimi tam kapsamlı gerektirmeyen uygulamalarla yazdırmak için XPS özellik kümesi, temel yazdırma desteği kullanılabilir. Temel yazdırma desteği en az yapılandırma gerektirir ve bir tanıdık özellikleri yazdırma iletişim denetimi sergilenen UI. Birçok XPS özellikleridir kullanılabilir kullanarak bu Basitleştirilmiş baskı modeli.
PrintDialog
The System.Windows.Controls.PrintDialog control provides a single entry point for UI, configuration, and XPS job submission. Nasıl oluşturmak ve denetimi hakkında daha fazla bilgi için bkz: Nasıl Yapılır: Yazı İletişimi Çağırma.
Gelişmiş xps yazdırma
Bütünüyle erişmek için XPS özellikleri, Gelişmiş yazdırma API kullanılmalıdır. İlgili birkaç API Aşağıda daha ayrıntılı olarak açıklanmıştır. Tam listesi için XPS baskı yolu APIs, bkz: System.Windows.Xps ve System.Printing ad başvurular.
PrintTicket ve PrintCapabilities
PrintTicket Ve PrintCapabilities sınıflardır Gelişmiş foundation XPS özellikleri. Her iki türdeki nesneleri olan XML baskı yönelimli özelliklerini alfabe düzeni, iki taraflı yazdırma, Zımbalama, vb. gibi biçimlendirilmiş yapıları Bu yapılar, yazdırma şeması tarafından tanımlanır. A PrintTicket bildirir bir yazıcıyı nasıl işlem yazdırma bir iş. PrintCapabilities Sınıfı tanımlar yeteneklerini yazıcı. Bir yazıcının yeteneklerini sorgulamak bir PrintTicket can be created o alır tam anlamıyla bir yazıcının desteklenen özellikler. Benzer şekilde, desteklenmeyen özellikler önlenebilir.
Aşağıdaki örnek sorgu gösterilmiştir PrintCapabilities bir yazıcı oluşturun ve bir PrintTicket kullanarak kodu.
' ---------------------- GetPrintTicketFromPrinter -----------------------
''' <summary>
''' Returns a PrintTicket based on the current default printer.</summary>
''' <returns>
''' A PrintTicket for the current local default printer.</returns>
Private Function GetPrintTicketFromPrinter() As PrintTicket
Dim printQueue As PrintQueue = Nothing
Dim localPrintServer As New LocalPrintServer()
' Retrieving collection of local printer on user machine
Dim localPrinterCollection As PrintQueueCollection = localPrintServer.GetPrintQueues()
Dim localPrinterEnumerator As System.Collections.IEnumerator = localPrinterCollection.GetEnumerator()
If localPrinterEnumerator.MoveNext() Then
' Get PrintQueue from first available printer
printQueue = CType(localPrinterEnumerator.Current, PrintQueue)
Else
' No printer exist, return null PrintTicket
Return Nothing
End If
' Get default PrintTicket from printer
Dim printTicket As PrintTicket = printQueue.DefaultPrintTicket
Dim printCapabilites As PrintCapabilities = printQueue.GetPrintCapabilities()
' Modify PrintTicket
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
Return printTicket
End Function ' end:GetPrintTicketFromPrinter()
// ---------------------- GetPrintTicketFromPrinter -----------------------
/// <summary>
/// Returns a PrintTicket based on the current default printer.</summary>
/// <returns>
/// A PrintTicket for the current local default printer.</returns>
private PrintTicket GetPrintTicketFromPrinter()
{
PrintQueue printQueue = null;
LocalPrintServer localPrintServer = new LocalPrintServer();
// Retrieving collection of local printer on user machine
PrintQueueCollection localPrinterCollection =
localPrintServer.GetPrintQueues();
System.Collections.IEnumerator localPrinterEnumerator =
localPrinterCollection.GetEnumerator();
if (localPrinterEnumerator.MoveNext())
{
// Get PrintQueue from first available printer
printQueue = (PrintQueue)localPrinterEnumerator.Current;
}
else
{
// No printer exist, return null PrintTicket
return null;
}
// Get default PrintTicket from printer
PrintTicket printTicket = printQueue.DefaultPrintTicket;
PrintCapabilities printCapabilites = printQueue.GetPrintCapabilities();
// Modify PrintTicket
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;
}
return printTicket;
}// end:GetPrintTicketFromPrinter()
// ---------------------- GetPrintTicketFromPrinter -----------------------
/// <summary>
/// Returns a PrintTicket based on the current default printer.</summary>
/// <returns>
/// A PrintTicket for the current local default printer.</returns>
PrintTicket^ GetPrintTicketFromPrinter ()
{
PrintQueue^ printQueue = nullptr;
LocalPrintServer^ localPrintServer = gcnew LocalPrintServer();
// Retrieving collection of local printer on user machine
PrintQueueCollection^ localPrinterCollection = localPrintServer->GetPrintQueues();
System::Collections::IEnumerator^ localPrinterEnumerator = localPrinterCollection->GetEnumerator();
if (localPrinterEnumerator->MoveNext())
{
// Get PrintQueue from first available printer
printQueue = ((PrintQueue^)localPrinterEnumerator->Current);
} else
{
return nullptr;
}
// Get default PrintTicket from printer
PrintTicket^ printTicket = printQueue->DefaultPrintTicket;
PrintCapabilities^ printCapabilites = printQueue->GetPrintCapabilities();
// Modify PrintTicket
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;
}
return printTicket;
};// end:GetPrintTicketFromPrinter()
YazıcıSunucusu ve PrintQueue
PrintServer Sınıfı, bir ağ yazdırma sunucusu temsil eder ve PrintQueue sınıfı, bir yazıcı ve it. ile ilişkili çıktı iş kuyruğunu gösterir Birlikte, bu APIs izin Gelişmiş yönetimi için bir sunucunun yazdırma işleri. A PrintServer, veya ondan türetilen sınıflardan biri yönetmek için kullanılan bir PrintQueue. AddJob Yöntemi kullanılan Ekle yeni bir yazdırma işini sıraya.
Aşağıdaki örnek nasıl oluşturulacağını gösterir bir LocalPrintServer ve varsayılan erişim PrintQueue kullanarak kodu.
' -------------------- GetPrintXpsDocumentWriter() -------------------
''' <summary>
''' Returns an XpsDocumentWriter for the default print queue.</summary>
''' <returns>
''' An XpsDocumentWriter for the default print queue.</returns>
Private Function GetPrintXpsDocumentWriter() As XpsDocumentWriter
' Create a local print server
Dim ps As New LocalPrintServer()
' Get the default print queue
Dim pq As PrintQueue = ps.DefaultPrintQueue
' Get an XpsDocumentWriter for the default print queue
Dim xpsdw As XpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(pq)
Return xpsdw
End Function ' end:GetPrintXpsDocumentWriter()
// -------------------- GetPrintXpsDocumentWriter() -------------------
/// <summary>
/// Returns an XpsDocumentWriter for the default print queue.</summary>
/// <returns>
/// An XpsDocumentWriter for the default print queue.</returns>
private XpsDocumentWriter GetPrintXpsDocumentWriter()
{
// Create a local print server
LocalPrintServer ps = new LocalPrintServer();
// Get the default print queue
PrintQueue pq = ps.DefaultPrintQueue;
// Get an XpsDocumentWriter for the default print queue
XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pq);
return xpsdw;
}// end:GetPrintXpsDocumentWriter()
XpsDocumentWriter
Bir XpsDocumentWriter, onun çok ile Write ve WriteAsync yöntemleri, yazmak için kullanılan XPS belgeler için bir PrintQueue. Örneğin, Write(FixedPage, PrintTicket) yöntemi kullanıldığında çıktı için bir XPS belge ve PrintTicket eşzamanlı olarak. WriteAsync(FixedDocument, PrintTicket) Yöntemi kullanıldığında çıktı için bir XPS belge ve PrintTicket zaman uyumsuz olarak.
Aşağıdaki örnek nasıl oluşturulacağını gösterir bir XpsDocumentWriter kullanarak kodu.
' -------------------- GetPrintXpsDocumentWriter() -------------------
''' <summary>
''' Returns an XpsDocumentWriter for the default print queue.</summary>
''' <returns>
''' An XpsDocumentWriter for the default print queue.</returns>
Private Function GetPrintXpsDocumentWriter() As XpsDocumentWriter
' Create a local print server
Dim ps As New LocalPrintServer()
' Get the default print queue
Dim pq As PrintQueue = ps.DefaultPrintQueue
' Get an XpsDocumentWriter for the default print queue
Dim xpsdw As XpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(pq)
Return xpsdw
End Function ' end:GetPrintXpsDocumentWriter()
// -------------------- GetPrintXpsDocumentWriter() -------------------
/// <summary>
/// Returns an XpsDocumentWriter for the default print queue.</summary>
/// <returns>
/// An XpsDocumentWriter for the default print queue.</returns>
private XpsDocumentWriter GetPrintXpsDocumentWriter()
{
// Create a local print server
LocalPrintServer ps = new LocalPrintServer();
// Get the default print queue
PrintQueue pq = ps.DefaultPrintQueue;
// Get an XpsDocumentWriter for the default print queue
XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pq);
return xpsdw;
}// end:GetPrintXpsDocumentWriter()
AddJob Yöntemleri de Yazdır yolları sağlar See Nasıl Yapılır: Program Aracılığıyla XPS Dosyalarını Yazdırma. Ayrıntılar için.
GDI Print Path
Sırada WPF uygulamaları yerel olarak destek XPS yolu, yazdırma Win32 ve Windows Forms uygulamaları da olanaklarından bazıları XPS özellikleri. XPS (XPSDrv) yazıcı sürücüsü dönüştürebilirsiniz GDI alarak çıktıya XPS biçimi. Gelişmiş senaryolarda, özel içerik dönüştürme kullanarak desteklenen Microsoft xps Belge Dönüştürücüsü yazıcı çıkış. Benzer şekilde, WPF uygulamaları de çıkış için GDI birini çağırarak yazdırma yol Write veya WriteAsync yöntemleri XpsDocumentWriter sınıfı ve XpsDrv olmayan yazıcı hedefi olarak belirleme yazdırma sırası.
Değil gerektiren uygulamalar için XPS işlevini veya destek, geçerli GDI baskı yolu değişmeden kalır.
- Ek başvuru malzeme üzerinde için GDI yolu ve çeşitli XPS dönüştürme seçeneklerini görmek Microsoft xps Belge Dönüştürücüsü yazıcı çıkış ve "xpsdrv" de Windows Driver Development Kit.
XPSDrv sürücü modeli
XPS Yazdırma yol kullanılarak biriktirici verimliliğini artırır XPS için yazdırma sırasında yerel yazdırma biriktiricisi biçimi olarak bir XPS -etkin yazıcı veya sürücü. Basitleştirilmiş biriktirme işlemi gibi bir ara biriktirme dosyası üretmek için gereklerini bir EMF veri dosyası, belge biriktirilir önce. Küçük biriktirme dosyası boyutları, üzerinden XPS baskı yolu ağ trafiğini azaltmak ve artırmak yazdırma performansı.
EMFUygulama çıktısı çağrılarını bir dizi olarak temsil eden bir kapalı biçimidir GDI işleme Hizmetleri. Aksine EMF, XPS biriktirme biçimini temsil eder asıl belge için çıkış başka yorumu gerek kalmadan bir XPS-tabanlı yazıcı sürücüsü (XPSDrv). Sürücüler, doğrudan biçiminde veri üzerinde çalışabilir. Bu özelliği kullandığınızda gerekli veri ve renk alanı dönüşümleri ortadan EMF dosyaları ve GDI-tabanlı yazdırma sürücülerini.
Biriktirme dosyası boyutları genellikle sınırlı kullandığınızda XPS hedefleyen belgeleri bir XPS karşılaştırıldığında yazıcı sürücüsü (XPSDrv) ile kendi EMF eşdeğerleri; Ancak, özel durumlar şunlardır:
Çok karmaşık, katmanlı ya da inefficiently yazılı bir vektör grafiğini aynı grafik, bit eşlemli bir sürümünden daha büyük olabilir.
Ekran görüntüleme amacıyla xps dosyaları aygıt fontlarını yanı sıra bilgisayar tabanlı yazı tiplerini katıştırma; GDI biriktirme dosyaları aygıt yazı tiplerini katıştırma oysa. Ancak her iki yazı tipleri alt kümelenmiş (aşağıya bakın) türleridir ve yazıcı sürücüleri, yazıcı dosyayı iletmeden önce aygıt fontlarını kaldırabilirsiniz.
Biriktirme boyutunu azaltma çeşitli mekanizmalar aracılığıyla gerçekleştirilir:
Font altkümesi oluşturmayı. Yalnızca asıl belge içinde kullanılan karakterleri depolanmış olan XPS dosyası.
Grafik desteği Gelişmiş. Saydamlık ve degrade ilkel için yerel destek içeriğinde rasterleştirme önler XPS belge.
Ortak kaynakların tanımlanması. (Şirket logosu temsil eden birden çok kez bir görüntü gibi) kullanılan kaynakları paylaşılan kaynaklar kabul edilir ve yalnızca bir kez yüklenir.
ZIP sıkıştırması. Tüm XPS belgeleri kullanmak ZIP sıkıştırma.
Ayrıca bkz.
Başvuru
Microsoft xps Belge Dönüştürücüsü yazıcı çıkış
Kavramlar
Belge Serileştirme ve Depolama