Nasıl Yapılır: Yazdırma Şemasını Genişletme ve Yeni Yazdırma Sistem Sınıfları Oluşturma

When your uygulama must deal ile specialty Yazdır devices that have characteristics DEĞİL Yansımış by the Mevcut PrintSystemObject, PrintQueue, PrintCapabilities, VE PrintTicket Sınıflar, you may want to derive Yeni Sınıflar by Kalıtım, oluşturmak Genişletilmiş versions of the PrintCapabilities VE PrintTicket Sınıflar, VE possibly also extend the Print Schema. This makale describes the Ana parts of such a proje; but it describes Bir of fazla ways of extending the relevant Yönetilen Sınıflar.

We recommend that you read this makale in conjunction ile the extensive Belgeler of the Print Schema. Bu makale, şema nedir ve ne PrintTicket Belgeler ve PrintCapabilities Belgeler en az bir temel düşünce olduğunu arayacağını.

Bu makale aşağıdaki bölümleri içerir.

  • Kalıtım ile yeni bir sınıf türetmek

  • Whether aygıt'ın özellikler Yazdır önceden tanımlı olduğunu şema

  • Aygıt özelliklerini temsil eder için Türler oluşturmak

  • PrintCapabilities ve PrintTicket Sınıflar genişletme

    • PrintTicket genişletme sınıf

    • PrintCapabilities sınıfını genişletme

  • Okuma ve yazma PrintCapabilities ve PrintTicket XML akışları

  • Overloading ve Özellikler ve Yöntemler genişletme

  • Genişletme şeması tanımlı özellik

  • sistem.Yazdırılıyor.IndexedProperties isim uzayı alanını genişletme

Örnek

Bu makale sunulan örnek proje mu DEĞİL tüm bir uygulamasını derlemek ve çalıştırmak için gerekli Detaylar sağlar. System.PrintingVe işlevselliğini genişletmek için gereken temel Ad Uzaylarıımlardan SAd Uzaylarıece Bir resim sağlamak için tasarlanmıştır System.Printing.IndexedPropertiesözelliklerine sahip aygıtlara Yazdırk için Ad Uzayları DEĞİL Açık Olarakça desteklenen bu Ad Uzayları. Sadece Nerede somut ayrıntı gerekli kod örnekleri sağlanır.

Ayrıca, kod örnekleri yapmak DEĞİL mutlaka mamul programlama yöntemleri veya güvenli kod teknikleri içerir. Hiçbir şey DEĞİL makalenin konusu hemen ilgili kullanılmaz.

Son olarak, öncelikle uygulama geliştiricileri yerine aygıt sürücü geliştiricilerinin bu makale açıklanan. Yazmak bu nedenle, vurgu ise PrintTicketnesneler yerine PrintCapabilitiesnesneler.

Kalıtım ile yeni bir sınıf türetmek

Temsil için bir sınıf türetmek ile başlayan, aygıt PrintQueueclass. ' dan Kodda Örnek Aşağıda, bir sınıf BrailleEmbosser türetilir. Braille, Semboller, "Noktalar" kağıt yüzeyine, parmak ile Keçeli; böylece ortaya Yükseltilmiş çünkü tarafından kör okunabilir bir dildir. Braille embosser Braille yazdıran yalnızca bir yazıcıdır. Bazı sürücüler için Braille embossers normal Braille, Braille Not 3 çevirmek için bazen bir yer Braille 3 olarak fazla aykırılıkları ve kısaltma kullanır, Braille sürüm Kaydediliyor. Örneğin, bu özellik gösteren bir özellik sağlar.

Genellikle, ayrıca bazı devralınan özellikler ve yöntemler aşırı yüklemek gerekir. Overloading, genişletme Özellikler ve Yöntemler altında ayrıntılı bilgi için bkz:.

class BrailleEmbosser : PrintQueue
{
   public BrailleEmbosser(PrintServer ps, String s, PrintSystemDesiredAccess access) : base(ps, s, access)
   {
      // Optionally, include here code to set non-inherited fields.
   }

   // other constructor declarations omitted

   private Boolean isBraille3Enabled;

   public Boolean IsBraile3Enabled
   {
      get { return isBraille3Enabled; }
      set { isBraille3Enabled = value; }
   }

   // remainder of class definition omitted
}

Whether aygıt'ın özellikler Yazdır önceden tanımlı olduğunu şema

PrintTicketVe PrintCapabilitiessınıfları en Genel yazıcı Özelliklerlerni gösteren Özelliklerler vardır, ancak çok daha fazla Özellikler tanımlanmış Print Schema Public Keywords, belirtim DEĞİL Açık Olarakça yansıyan Bu sınıflar. (Genel özelliklerin liste için yalnızca özelliklerini görmek PrintCapabilitiessınıf.) aygıt's özel özelliklerin içinde tanımlanan, belirlemek üzere belirtiminin okumanız gerekir. Belirtimi içinde bulunan, olan özellik için belirtimi'nin modelini kullanan bir çok yararı vardır: Genel bir modeli ve terminoloji sağlar, diğer kullanılmak üzere bir aygıt için Oluşturuldu PrintTicket XML Belgeler için. (saniye aygıt farklı bir üretici tarafından ve bu konuya yapılması; bu olabilir tasarlanmış sonra the PrintTicket belge Oluşturuldu.) Böylece, belgenin farklı yazıcılarla kişilere dağıtılan gibi kendi biçimlendirme amaçları yanı sıra yazarın Yazdır amaçları ile aktarılabilen Yazdır biletleri Belgeler kendilerini katıştırılabilir.

Bu makale, Açık Olarak Olarak PrintTicketve PrintCapabilitiesSınıflar adı verilen "Genel özellikleri." tarafından desteklenen özellikleri geri kalanı için Tanımlanan , Print Schema Public Keywordsbelirtimi, ancak DEĞİL Açık Olarakça İki Sınıflar tarafından desteklenen, "özellikleri. tanımlanan" çağrılacak Özellikleri DEĞİL ortak Anahtar Kelimeler Kelimeler tanımlanmış belirtimi adlı "yeni özelliklerini."

De, sizin aygıt neredeyse mükemmel Eşleştir tanımlanmış bir özellik olan bir özellik olan, ancak birden fazla seçenek Print Schema Public Keywordsbelirtimi. tanınmayan sahiptir. Print SchemaGenişletilmiş bir şekilde mümkün. Mevcut Tanım kadarını kullanır gibi özellikleri yönetmek için Expanding şema-Defined özellikleri Altta gibi bir özellik ile çalışma hakkında daha fazla bilgi için bkz:.

Aygıt özelliklerini temsil eder için Türler oluşturmak

PrintTicketVe PrintCapabilities, karşılık gelen yazıcı özelliklerini alma özel türler, genellikle bir özellik ve gösteren numaralandırma Özellikler olası bir değer. Collationsabit listesi tür için örnek olan PrintTicket.Collationözellik. Ayrıca, tür PrintCapabilities.CollationCapabilityözellik. koleksiyon Üyeler türü olduğu

Sınıflar, aygıtın tanımlanan ve yeni özellikleri modelleri olarak bu Mevcut Sınıflar kullanarak oluşturun. Altta kod örneğinde, bir sabit listesi BrailleGrade3 bildirildi. Modelinde oluşturulmuş Collationsabit listesi Not 3 çeviri için harmanlama benzer olduğu için: Herhangi Çeşit yazıcıdan çıktı (Harmanlanmış veya uncollated) en az Çeşit Çeşit destek zorunda birlikte yoğun oldukları için. Bazı yazıcılar destek her ikisi de. (Sadece yazıcıları destek Harmanlanmış çıktı seyrek olduğu halde bu olasılığı dikkate alınması gerekir.) Bu nedenle çok, olabilir (büyük olasılıkla DEĞİL ancak olası) çıkış veya İkisi birden çevrilen Sadece çıktı, Sadece untranslated Braille destekleyen embossers. Aynı nedeni için sabit listesi BrailleGrade3 bir değer Bilinmiyor içerir Collationyapar: PrintTicket belge oluşturmanın Ayarla uygulama belirlendiği yerlerde karşılaştırma özelliği olan Ayarla değer durumları işlemek için DEĞİL tanınan Print Schema Public Keywordsbelirtimi. Uygulamanız, bir oluşturur PrintTicketkullanarak bu tür bir belge nesne daha sonra PrintTicket.Collationözellik elde etmek değer bilinmiyor. (Bilinmiyor değer hiç kullanılmamış PrintCapabilitiesnesnelere)

public enum BrailleGrade3 { Translated, Untranslated, Unknown } 

Numaralandırma Daima en iyi yolu temsil eden bir özellik değildir. Bazen bir başvuru tür sınıf daha iyidir. Her birinin kendi değerine sahip alt bölümleri iç içe geçmiş yapı özellik olan, bu durum özellikle geçerlidir. Örneğin, PageMediaSizesınıf olan Heightve WidthÖzellikler. PageMediaSizetürPrintTicket.PageMediaSizeözellik. PrintCapabilities.PageMediaSizeCapabilityÖzellik. tür koleksiyonun Üyeler tür olmalıdır...

PrintCapabilities ve PrintTicket Sınıflar genişletme

Ancak PrintTicketve PrintCapabilitiessınıfı olamaz devralınan, genişletebilmeniz için Print Schemaiçin tanı tanımlanmış ve yeni özellikleri.

PrintTicket genişletme sınıf

İçin Kullan PrintTicketsınıf genişletilmiş sistem özellikleri, ele aşağıdaki adımları. Bazı Detaylar, Altta verilmektedir.

PrintTicket geniþletmek için yüksek düzey yordam sınıf

  1. Yeni özellikleri, aygıt varsa, oluşturmak yeni özellikler kapsüllemek için yeni bir sınıf. ( NewFeaturesPrintTicket sınıf oluşturmak bazı Detaylar için bkz.)

  2. Aygıt özellikleri tanımlanmışsa oluşturmak tanımlanan özellikleri kapsüllemek için bir sınıf. ( DefinedFeaturesPrintTicket sınıf oluşturmak bazı Detaylar için bkz.)

  3. Tüm Yazdır bir anahtarı temsil etmek için bir sınıf oluşturmak. Bu sınıf, uygulama içinde rol çalar PrintTicketsınıf Çalma aygıt varsa Hayır tanımlanmış veya yeni özellikler. ( WholePrintTicket sınıf oluşturmak bazı Detaylar için bkz.)

NewFeaturesPrintTicket sınıf oluşturma yordam

  1. Yeni özellikleri, aygıt varsa, Bildir kapsüllemek için özellikleri için bir sınıf. Bize verin, aramak NewFeaturesPrintTicket.

  2. ' Ün yeni özelliklerini göstermek için yeni sınıfın özellikleri vermek aygıt. Genellikle, her özellik tür olacak, oluşturmak, genellikle bir sabit listesi. Oluşturmak için aygıt özelliklerini temsil eder Türler Üstte bakın.

  3. Yeni sınıf bir ek özellik sunar, bize verin, aramak, bir aygıtın yeni özelliklerini tanımlayan özel XML isim uzayı Başvuru tutacak PrivateNamespace . Bu dize, PrintCapabilities ve PrintTicket belgeye XML biçimlendirmesi yazarken gerekir. XML akışları okuma ve yazma PrintCapabilities PrintTicket bakın Altta.

  4. İki sınıf Kurucular verin. Kurucular için İki kurucusu, model PrintTicket. Herhangi bir parametre alır, diğer bir Streamnesne ile XML içeriğini. alır XML akışında yeni, yerine genel özelliklerini tanımlayan bir PrintTicket belgesi olacaktır. (SeePrint Schema-Related TechnologiesVEPrintTicket Schema and Document Construction.) PrintTicketSınıfının bir parametre oluşturucu. düzeni parametresi Kurucular özel durum oluşturması gerekir

  5. GetXmlStream ve bir SaveTo sınıf yöntem oluşturursunuz. Bunlar işlevselliğini uyacak şekilde tasarlanmış, hem de "internal" erişim anahtar sözcük sözcüğünü kullanmak PrintTicketyöntemlerden bu Adlar, Genel özellikleri. yerine yeni özellikler tanımlamak PrintTicket Belgeler işleyecek dışında These methods must ensure that the streams they produce have an extra namespace declaration (the value of the PrivateNamespace property) in the opening <PrintTicket … > element. Okuma ve yazma PrintCapabilities ve PrintTicket XML akışları Bkz: tıklatın.

DefinedFeaturesPrintTicket sınıf oluşturma yordam

  • Aygıt özellikleri tanımladığı, bu özellikler kapsüllemek için bir sınıf bildirin. Bize verin, aramak DefinedFeaturesPrintTicket. NewFeaturesPrintTicket Üstte yalnızca oluşturulmuş olarak oluşturulması ile aşağıdaki Aykırı Durumlar.

    • Print Schema Public KeywordsBelirtimi. karşılık gelen Özellikler ad Eşleştir adlar sınıfının özelliklerini olmalıdır

    • Yapmak DEĞİL bir özellik PrivateNamespace oluşturun. isim uzayı için tanımlanan özellikleri Genel özellikleri aynıdır. XML akışları okuma ve yazma PrintCapabilities PrintTicket bakın Altta.

    • GetXmlStream ve SaveTo Yöntemler DEĞİL bir ek isim uzayı Bildirim içeren akışları oluşturmak.

WholePrintTicket sınıf oluşturma yordam

  1. Tüm Yazdır bir anahtarı temsil eder ve bu nedenle, uygulama içinde rol, çalacağı bir sınıf Bildir PrintTicketsınıfı oynanan aygıt varsa Hayır tanımlanmış veya yeni özellikler. Bize verin, aramak WholePrintTicket.

  2. WholePrintTicket bir özellik sunar, bize verin, aramak CommonFeatures tür PrintTicket.

  3. WholePrintTicket verin veya yeni özellikler, tanımlanan özellikler veya İkisi birden olup bağlı olarak aşağıdaki ek özellikleri, İkisi birden.

    • NewFeatures tür NewFeaturesPrintTicket .

    • DefinedFeatures tür DefinedFeaturesPrintTicket .

  4. WholePrintTicket İki kurucusu verin. Süren Hayır parametreleri ve Süren bir Streamnesne XML İçerik. oluşturucu parametre ile aşağıdakileri.

    1. Geçirmek Streamiçin oluşturucu için PrintTicketnesne başvurulan tarafından özellik CommonFeatures. Bu oluşturucu biçiminde bir biçimlendirme yalnızca göz ardı eder Streamyani DEĞİL ilgili Genel özellikleri.

    2. Geçirmek Streamiçin oluşturucu, NewFeaturesPrintTicket nesne başvurulan NewFeatures özellik. Bu oluşturucu biçiminde bir biçimlendirme yalnızca göz ardı eder Streamyani DEĞİL ilgili yeni özellikler. Yeni bir özellik biçimlendirme sonra Streambaşlamak <psf:PrintTicket xmlns:psf="https://schemas.microsoft.com/windows/2003/08/printing/printschemaframework" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1" xmlns:isim uzayı kısaltma= tam isim uzayı adı > tam isim uzayı adı isim uzayı kısaltma ve yeni özelliklerini tanımlayan bir şema tanımlamak için kullanılan URL olduğu, kısaltma dır. (Daha fazla bilgi için XML akışları okuma ve yazma PrintCapabilities PrintTicket Altta.).

    3. Geçirmek StreamOluşturucusu DefinedFeaturesPrintTicket nesne başvurulan DefinedFeatures özellik. Bu oluşturucu Streamtanımlanan özellikleri için uygun olan, Herhangi biçimlendirme yalnızca göz ardı eder

  5. GetXmlStream ve bir SaveTo sınıf yöntem oluşturursunuz. Bu PrintTicketyöntemlerden bu Adlar. işlevselliğini uyacak şekilde tasarlanmıştır Bunlar aşağıdaki özelliklere sahip olması gerekir.

    • Her tür yöntem (Bir) özellik CommonFeatures , DefinedFeatures özelliği (Bir) ve özellik NewFeatures tarafından başvurulan nesneler aynı ada karşılık gelen yöntemini çağırması gerekir.

    • Her yöntemin önceki madde işareti açıklanan çağrılar tarafından üretilen akışları bağlamak. Of course, all but the last </PrintTicket> end tag, and all but the first <PrintTicket … > start tag, should be deleted. Hiçbir yeni özellikler, yoksa Başlat etiket ek isim uzayı Bildirim olmalıdır. (Bkz. Adım 4b.) For that reason, you should consider always making the new features stream (when there is one) the first one in the concatenated stream since it will already have that declaration in its <PrintTicket … > start tag.

    • Birleştirmeyi yapmak için WholePrintTicket ler GetXmlStream ve SaveTo Yöntemler geçici akışta çalışması gerekir dahili İlk. Özellikle geçici akımına İçerik seri hale getirmek birleştirme iş (ve ayıklama iş - Bkz: bir İleri madde işareti) ve sonra Son Çıktı akış birleştirme Sonuç çıktı üç farklı sınıfların her olacaktır.

    • Birleştirme WholePrintTicket ler GetXmlStream , SaveTo Yöntemler izleyen da sahip Öğeler çift ve triplicate kopyalarını kaldırmak nereden son akış dönmeden önce akış. Bu yinelenen ve triplicate girdileri akışında olacak her üç nesne, PrintTicket, NewFeaturesPrintTicket ve DefinedFeaturesPrintTicket , tüm rağmen her biri belgede Sadece bir kısmını gösterir, oluşturmak için kullanılan belgenin özgün PrintTicket korumak, Özellikler.

    • Önceki madde işareti açıklanan ayıklama adım kaçınmak, varsa, oluşturucu WholePrintTicket(Stream) - Üstte-gelen akış üç bölüme Genel, yeni ve tanımlanan biçimlendirme Öğeler için ayrı akışları oluşturarak Böl. Bu daha küçük akışları her sonra uygun olarak Geçti oluşturucu üç Özellikler WholePrintTicket. Bu teknik, gerektirecek Ekle kapanış </PrintTicket>etiket her üç akışlarını. CommonFeatures ve DefinedFeatures Özellikler için akış için eklediğiniz bir Başlat etiket böyle: <psf:PrintTicket xmlns:psf="https://schemas.microsoft.com/windows/2003/08/printing/printschemaframework" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1">. NewFeatures özellik Oluşturucu için Başlat etiket için ek bir özel isim uzayı aşağıdaki Benzer ekleyin: <psf:PrintTicket xmlns:psf="https://schemas.microsoft.com/windows/2003/08/printing/printschemaframework" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1" xmlns:isim uzayı kısaltma=>tam isim uzayı adı yeni özelliklerini tanımlayan bir şema tanımlamak için kullanılan URL olduğu ve kısaltmadır, isim uzayı kısaltma tam isim uzayı adı .)

Aşağıdaki kod Örnek, sonucu Braille embosser Örnek uyguladığınızda, bu yordam bir parçası gösterilmiştir. (yer ve kolaylık sağlaması için çok ihmal.) Özellik BrailleGrade3 Nullable<T>tür. olduğuna dikkat edin Bu desen, izleyen Özellikler PrintTicketgibi Collation. Örnek Özel tanımlı özellikleri belirtin, İkisi birden yeni olan ve özellikleri tanımlanmış varsayılmıştır.

class NewFeaturesPrintTicket
{
    public NewFeaturesPrintTicket()
    {
        // Optionally, initialize fields. For example:
        privateNamespace = "http://www.AjaxEmbossers.com/schemas/deluxemodels/v.1.0";
    }

    public NewFeaturesPrintTicket(Stream printTicketDocument)
    {
    // Parse the stream and initialize fields representing features here.
    // Optionally, initialize other fields. For example:
    privateNamespace = "http://www.AjaxEmbossers.com/schemas/deluxemodels/v.1.0";
    }

    private Nullable<BrailleGrade3> brailleGrade3;
    public Nullable<BrailleGrade3> BrailleGrade3
    {
        get { return brailleGrade3; }
        set { brailleGrade3 = value;}
    }

    private String privateNamespace;
    public String PrivateNamespace
    {
        get { return privateNamespace; }
        set { privateNamespace = value; }
    }
}

class DefinedFeaturesPrintTicket
{
  // Details omitted. Use the NewFeaturesPrintTicket
  // as a model, but leave out the privateNamespace field
  // and property.
}

class WholePrintTicket
{
    public WholePrintTicket()
    {
        commonFeatures = new PrintTicket();
        newFeatures = new NewFeaturesPrintTicket();
        definedFeatures = new DefinedFeaturesPrintTicket();
    }

    public WholePrintTicket(Stream wholePrintTicket)
    {
         // Method 1: Pass the stream to the three constructors.
         // Be sure to reset the read-write position of the stream
         // to the beginning of the stream after each call to a 
         // constructor. 
         // commonFeatures = new PrintTicket(wholePrintTicket);
              // reset read-write head here
        // newFeatures = new NewFeaturesPrintTicket(wholePrintTicket);
              // reset read-write head here
        // definedFeatures = new DefinedFeaturesPrintTicket(wholePrintTicket);
              // reset read-write head here

        // Method 2: Parse the stream and split it into three streams. 
        // Then pass them to the constructors of the three properties. 
        // commonFeatures = new PrintTicket(commonFeaturesPrintTicketDocument);
        // newFeatures = new NewFeaturesPrintTicket(newFeaturesPrintTicketDocument);
        // definedFeatures = new DefinedFeaturesPrintTicket(definedFeaturesPrintTicketDocument);
    }

    private PrintTicket commonFeatures;
    public PrintTicket CommonFeatures
    {
        get { return commonFeatures; }
        set { commonFeatures = value;}
    }

    private PrintTicket newFeatures;
    public PrintTicket NewFeatures
    {   // Details omitted. See CommonFeatures above.}

    private PrintTicket definedFeatures;
    public PrintTicket DefinedFeatures
    {   // Details omitted. See CommonFeatures above.}
}

PrintCapabilities sınıfını genişletme

İçin Kullan PrintCapabilitiessınıf aygıtınızla, genişletmek için genişletilmiş nasıl paralel biçimde gerekir PrintTicketsınıf. Yapabilirsiniz çünkü Kullan, uzantı PrintTicketbir model olarak kısa bir genel bildirimi listesi.

  • Üç yeni sınıflar, yeni özellikler ( NewFeaturesPrintCapabilities) saklamak için tanımlanan özellikleri ( DefinedFeaturesPrintCapabilities ) saklamak için ve tüm PrintCapabilities belge ( WholePrintCapabilities) temsil eden bir oluşturun.

  • Türlerni Özellikler İlk İki yeni sınıflar genellikle olacak ReadOnlyCollection<T>. Mevcut kullanmak Özellikler , PrintCapabilities, gibi CollationCapability, modelleri.

  • Ayrıca Mevcut desen aşağıdaki PrintCapabilitiessınıf, özellik Adlar olmalıdır "Özelliği" ucundaki; örneğin, BrailleGrade3Capability.

  • Sınıf NewFeaturesPrintCapabilities bir PrivateNamespace için NewFeaturesPrintTicket oluşturduğunuz bir aynı özellik gerekir.

  • Ne bunlar ObjectSınıflar. miras dışında herhangi bir yöntemin sınıfların yok olur

  • Her Sınıflar alır Streamparametre. tek oluşturucu olacak StreamOlacak bir PrintCapabilities.

  • DefinedFeaturesPrintCapabilities oluşturucu doğrulamalısınız StreamGeçti, için uygundur ve Print Schema Framework, kullanmadan önce Streambaşlatmak için Özellikler. (Bunun en kolay olan geçirmek için Streamİlk olarak PrintCapabilitieskurucusu. İkincisi hiç atar, Aykırı Durumlar, akış geçerlidir.)

  • NewFeaturesPrintCapabilities oluşturucu doğrulamalısınız StreamGeçti, kullanmadan önce özel isim uzayı boşluğuna uyan Streamiçin başlatma özelliklerini.

  • DefinedFeaturesPrintCapabilities NewFeaturesPrintCapabilities , hem de Kurucular Mevcut PrintCapabilitiesoluşturucu. desen özel durum

  • Sınıf WholePrintCapabilities CommonFeaturesve DefinedFeatures NewFeatures Özellikler olacaktır. Bu Özellikler Türler sırasıyla ve PrintCapabilitiesNewFeaturesPrintCapabilties, DefinedFeaturesPrintCapabilities olacaktır. Her WholePrintTicket özelliklerini düzeni oluşturulması.

  • Sınıf WholePrintCapabilities için yapıcı sürecek tek bir Streamtam bir PrintCapabilities temsil eden parametre belge. Tüm giriş Streamiçin tüm üç Oluşturucusu, üye Özellikler. oluşturucu geçmesi Sınıf WholePrintCapabilities DEĞİL çünkü ayarlarını (örneğin, WholePrintTicket ler GetXmlStream ve SaveTo yöntem) XML formatında dışa herhangi bir yöntemin, olacağı gerçeğini içinde üç Özellikler yinelenen veya triplicate biçimlendirme zararsız.

Ek Bilgiler için bkz: PrintCapabilities Schema and Document Construction.

Okuma ve yazma PrintCapabilities ve PrintTicket XML akışları

Kurucular, birincil iş Mevcut PrintTicketve PrintCapabilitiessınıflar ve yeni sınıflar, Oluşturuldu Üstte PrintCapabilities ve PrintTicket sınıfları genişletme Yöntemler okumak, incelemek, yazmak ve bazen StreamNesneler içerikleri olan PrintTicket belge ya da bir PrintCapabilities. doğrulamak için ise Olması gereken bilinen ile Temel dosya g/Çve bu sınıfların. Yöntemler Bu akış İçerik XML olduğundan, ayrıca okuma ve yazma destek açıklanan XML tanıyın XML Processing Options in the .NET Framework. Uygulamanızın çalışıp ile XML Kağıt Belirtimi (XPS)belgeleri var API, System.Windows.Xps, System.Windows.Xps.Packaging, ve System.Windows.Xps.SerializationAd Uzayları için okuma ve yazma için tasarlanmış XPSBelgeler, okuma ve yazma PrintTickets. Ayrıca bkz:: PackageRelationshipbir İlişki Ekleniyor hakkında bilgi için bir PrintTicketpaket.

PrintTicket ExampleVe tam PrintTicket belge ve PrintCapabilities belge Örnekler bulunabilir PrintCapabilities Document Example.

PrintCapabilities belgenin tüm, basit bir örnek aşağıdadır ama aygıt's özelliklerinden atlanmış. PrintCapabilities.CollationCapabilityVe PrintTicket.Collationözelliklerini. tarafından temsil edilen özellik olan DocumentCollate gösterilen Özellikler

<psf:PrintCapabilities xmlns:psf="https://schemas.microsoft.com/windows/2003/08/printing/printschemaframework" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1">

   <!-- other features omitted --> 
   
   <psf:Feature name="psk:DocumentCollate">
        <psf:Property name="psf:SelectionType">
            <psf:Value xsi:type="xsd:QName">psk:PickOne</psf:Value>
        </psf:Property>
        <psf:Property name="psk:DisplayName">
            <psf:Value xsi:type="xsd:string">Collate Copies</psf:Value>
        </psf:Property>
        <psf:Option name="psk:Collated" constrained="psk:None">
            <psf:Property name="psk:DisplayName">
                <psf:Value xsi:type="xsd:string">Yes</psf:Value>
            </psf:Property>
        </psf:Option>
        <psf:Option name="psk:Uncollated" constrained="psk:None">
            <psf:Property name="psk:DisplayName">
                <psf:Value xsi:type="xsd:string">No</psf:Value>
            </psf:Property>
        </psf:Option>
    </psf:Feature>
                   
   <!-- other features omitted --> 
   
</PrintCapabilities>

DEĞİL Buz (Harmanlanmış ve Harmanlanmamış) özelliğinin olası her Seçenek listelenir ve her birinin durumunu (yani olup, sınırlıdır veya DEĞİL) tanımlanır. Yapılandırmasının anlık Çeşit belge, bu nedenle tam Çeşit PrintCapabilities belgesi durum her özelliğin her Seçenek, tanımlanan aygıt.

Bir PrintTicket, basit bir örnek aşağıdadır belge, Sadece tek bir özellik bulunmaktadır.

<psf:PrintTicket xmlns:psf="https://schemas.microsoft.com/windows/2003/08/printing/printschemaframework" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1">
  
  <!-- other features omitted -->
  
  <psf:Feature name="psk:DocumentCollate">
    <psf:Option name="psk:Collated" />
  </psf:Feature>  
    
  <!-- other features omitted -->
  
</PrintTicket>

Her seçenek durumunu Açık Olarak Olarak belirtmek PrintTicket belgesi için gerekli olmadığından yapı biraz daha kolay olabileceğini unutmayın. Sadece istenen seçeneğini tanımlamak gerekir.

Sözdizimi ve yapı özelliğinin altında tanımlanan DocumentCollatetarafından Print Schema Framework, Print Schema Public Keywords. Yeni özellikleriyle çalışırken, takıma giren bir şemada tanımlanan özel bir XML isim uzayı tanımlanan özelliklere ile çalışıyor olmanız. Genellikle bu aygıtın üreticisi tarafından bir ticari ilişkisi veya bir non-profit Standartlar organizasyon; sağlanır, ancak oluşturduğu, olabilir. Mevcut Print Schema Framework, Print Schema Public Keywordsgerekli sözdizimi öğrenmek ve modelleri, Taban tanımlar. bulmak için Kullan. Microsoft kendi kendine PrintCapabilities ve PrintTicket sisteme yeni Microsoft XPS Belge Yazıcısı (MXDW) sürücü genişletmek için yeni bir isim uzayı Oluşturuldu. Ayrıntılı bilgi için bkz: MXDW yapılandırma Ayarlar.

Biz, düşünün, bir kurgusal Ajax Embosser'ın şirket BrailleGrade3 çevirme özellik belge harmanlama özellik Microsoft nasıl tanımlandığına için paralel bir şekilde tanımlanmış ve PrintCapabilities ve PrintTicket belge girişleri özellik Benzer görüneceğini görebiliriz. Özellik tanımlandığı isim uzayı < PrintCapabilities … > bildirilmelidir dikkat edin ve < … PrintTicket > Başlat Etiketler.

PrintCapabilities belge biçimlendirme

<psf:PrintCapabilities xmlns:psf="https://schemas.microsoft.com/windows/2003/08/printing/printschemaframework" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
           xmlns:ajax="http://www.AjaxEmbossers.com/schemas/deluxemodels" version="1">

   <!-- other features omitted --> 
   
   <psf:Feature name="ajax:BrailleGrade3Translation">
        <psf:Property name="psf:SelectionType">
            <psf:Value xsi:type="xsd:QName">psk:PickOne</psf:Value>
        </psf:Property>
        <psf:Property name="psk:DisplayName">
            <psf:Value xsi:type="xsd:string">Braille3 translation</psf:Value>
        </psf:Property>
        <psf:Option name="ajax:Translated" constrained="psk:None">
            <psf:Property name="psk:DisplayName">
                <psf:Value xsi:type="xsd:string">Yes</psf:Value>
            </psf:Property>
        </psf:Option>
        <psf:Option name="ajax:Untranslated" constrained="psk:None">
            <psf:Property name="psk:DisplayName">
                <psf:Value xsi:type="xsd:string">No</psf:Value>
            </psf:Property>
        </psf:Option>
    </psf:Feature>
                   
   <!-- other features omitted --> 
   
</PrintCapabilities>

PrintTicket belge biçimlendirme

<psf:PrintTicket xmlns:psf="https://schemas.microsoft.com/windows/2003/08/printing/printschemaframework" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
           xmlns:ajax="http://www.AjaxEmbossers.com/schemas/deluxemodels" version="1">
  
  <!-- other features omitted -->
  
  <psf:Feature name="ajax:BrailleGrade3Translation">
    <psf:Option name="ajax:Translated" />
  </psf:Feature>  
    
  <!-- other features omitted -->
  
</PrintTicket>

PrintTicket yazma hakkında daha fazla bilgi için yeni özellikler Bkz Belgeler Creating a Device-Specific PrintTicket. PrintCapabilities Schema and Document ConstructionVe PrintTicket Schema and Document Constructionbölümleri Yazdır şema belgelerine. PrintTicket ve PrintCapabilities Belgeler oluşturma hakkında kapsamlı belgelerine bakın

Overloading ve Özellikler ve Yöntemler genişletme

Ya da alır, bir herhangi sınıf bir yöntemi PrintTicketparametre ya da Döndürülenler bir PrintTicket, ve istediğiniz Kullan genişletilmiş özellikler sisteminizle olması gerekir, Kullan s bir yöntemle yerine WholePrintTicket yerine PrintTicket. Benzer şekilde, Herhangi Özellikler yazın PrintTicketistediğiniz Kullan türünün Özellikler ile değiştirilmesi gerekir WholePrintTicket. Aynı Nokta uygulamak, mutatis mutandis PrintCapabilitiesve için WholePrintCapabilities .

Sınıf yöntem veya özellik barındıran devralınabilir ise, bir sınıfı ve yöntem veya özellik için aşırı yüklemek Kullan WholePrintTicket yerine PrintTicket.

Ana sınıf ise DEĞİL devredilebilir, size yol PrintTicketve genişletmek gerekir PrintCapabilitiesüzerindeki genişletilmiş: üye olarak ana sınıfı içeren bir sınıf oluşturmak. Daha sonra dış sınıf Yöntemler verin ve Özellikler ile aynı ilgili Yöntemler olarak bu sahip (veya sonu) PrintTicketveya PrintCapabilitiesParametrelerni. Adlar Genelde dış sınıf işlevselliğini iç sınıf aynı adla eşleşmesi gerekir, ancak bunu olacak Kullan WholePrintTicket veya WholePrintCapabilities parametrelerinin yerine PrintTicketveya PrintCapabilitiesparametre. Ayrıca, iç sınıfının özelliklerini tür PrintTicketveya PrintCapabilities, aynı ad kullanan dış sınıfındaki eşleşen Özellikler oluşturmak WholePrintTicket veya WholePrintCapabilities olan.

Büyük olasılıkla, en önemli Yöntemler aşırı yüklemek gerekecek olan MergeAndValidatePrintTicket sınıfı (bkz: Derive Kalýtým ile yeni bir sınıf üstü) olacak BrailleEmbosser İki sürümü WholePrintTicket parametrelerini Kullan ve özel isim uzayı, şemaya yeni özelliklerle biletleri doğrulamak için mantığı eklemek değiştirmeleri gerekir. Mevcut Yöntemler aşırı veya MergeAndValidateWholePrintTicket adlı yeni bir tane oluşturun.

İki Yöntemler dönmek bir PrintTicketolan ConvertDevModeToPrintTicketve Clone. , .NET FrameworkDiğer 15 yöntem DEĞİL sayım, Tekrar Yüklemeler bir PrintTicketparametre ve türünün 19 özelliklerini PrintTicket. Ancak DEĞİL yükünüzü olacak şekilde belirli bir uygulamanın en çok bunlar az sayıda kullanmak çok büyük olasılıkla DEĞİL Sayılar önerebilir gibi yüksek. Döndüren bir PrintCapabilitiesnesne GetPrintCapabilitiesve tür ile Özellikler Hayır happily, tek yöntem PrintCapabilities.

Genişletme şeması tanımlı özellik

Wholly yeni özellikler DEĞİL uzantı gerekebilir Sadece durum Print Schema. Bir aygıt hakkında bilgi sahibi, tanımlı özellik için yeni, tanımlanmamış, Seçenekler sunacaktır da mümkündür. Tamamen yeni bir özellik için yalnızca kullanılmalıdır gibi yeni tanımlanmamış Seçenekler için özel bir isim uzayı kullanılması gerektiğini bu yana gibi genişletilmiş özellikler yalnızca, yeni özellikleri kabul (ancak özellik ve önceden tanımlanan seçeneklerini, şema tarafından tanımlanan adlarını kullanmak gibi) işlemek büyük bir olasılıkla daha kolay olur: bunları, NewFeaturesPrintTicket NewFeaturesPrintCapabilities de barındıracak. Tüm bu Çeşit Çeşit şema genişletmesini gerçekleştirmek için gereken Detaylar tartışmak, bu makalenin sınırlarının ötesine geçer, ancak Not Çeşitleştirmeyi çalışmak olmalıdır Bitti WholePrintTicket.GetXmlStream ve WholePrintTicket.SaveAs yöntem Çeşitaz daha fazla karmaşık hale olması gerekir.

sistem.Yazdırılıyor.IndexedProperties isim uzayı alanını genişletme

avantajlarından yararlanmak istiyorsanız API'ler, System.Printing.IndexedPropertiesisim uzayı gerekebilir türetmek yeni bir sınıf nereden PrintProperty. ' Türetilmiş Sınıflar için oluşturduğunuz bir özelliği bu, yapmanız gereken PrintQueuetür olan DEĞİL Mevcut Sınıflarları tarafından temsil edilen System.Printing.IndexedProperties. Ne yapılabilir ben System.Printing.IndexedPropertiesisim uzayı Bkz: Nasıl Yapılır: Yazıcı Kopyalave ile örnekleri için Nasıl Yapılır: Yazdırma Sistemi Nesnesi Özelliklerini Yansıma Olmadan Alma.

Bu, bizim Üstte örneğin gerekli eşit değildir, Sadece özellik bu yana bizim için BrailleEmbosser olan IsBraile3Enabled sınıf olan ekledik Boolean. Bir System.Printing.IndexedProperties.PrintBooleanPropertysınıf. zaten var

Ayrıca bkz.

Görevler

Nasıl Yapılır: Yazıcı Kopyala

Nasıl Yapılır: Yazdırma Sistemi Nesnesi Özelliklerini Yansıma Olmadan Alma

Başvuru

System.Printing

System.Printing.IndexedProperties

System.Printing.Interop

System.Windows.Xps

System.Windows.Xps.Packaging

System.Windows.Xps.Serialization

GetPrintCapabilities

PackageRelationship

PrintCapabilities

PrintQueue

PrintSystemObject

PrintTicket

MXDW yapılandırma Ayarlar

Kavramlar

XML Processing Options in the .NET Framework

WPF'deki Belgeler

Yazdırmaya Genel Bakış

Diğer Kaynaklar

Şema Yazdır

Şema çerçeve Yazdır

Özel aygıt PrintTicket oluşturma

Şema ile ilgili teknolojiler Yazdır

PrintTicket şema ve belge yapımı

PrintTicket Örnek

PrintCapabilities belge Örnek

PrintCapabilities şema ve belge yapımı

Ortak Anahtar Kelimeler Kelimeler şeması Yazdır

Microsoft XPS Belge Yazıcısı