Aracılığıyla paylaş


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

XPS Yazdırma Sistemi

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.

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

PrintDialog

XpsDocumentWriter

XpsDocument

PrintTicket

PrintCapabilities

PrintServer

PrintQueue

Microsoft xps Belge Dönüştürücüsü yazıcı çıkış

Kavramlar

WPF'deki Belgeler

Belge Serileştirme ve Depolama

Diğer Kaynaklar

Yazdırma Nasıl Yapılır Konuları

xps