Postupy: Tisk schéma rozšířit a Vytvořit nový třídy systém tisk

Když aplikace musí čelit speciální tiskové zařízení, která mají vlastnosti, neprojeví se ve stávající PrintSystemObject, PrintQueue, PrintCapabilitiesand PrintTicket třídy, můžete chtít odvození nových tříd prostřednictvím dědičnosti, vytvořit rozšířené verze PrintCapabilities and PrintTicket třídy a případně také rozšířit Print Schema. Tento článek popisuje hlavní části projekt; ale popisuje mnoha způsoby rozšířit příslušné spravované třídy.

Doporučujeme, abyste si přečetli tohoto článek ve spojení s rozsáhlou dokumentaci Print Schema. Tento článek předpokládá, že máte alespoň základní myšlenka je schéma a jaké jsou dokumenty PrintTicket a PrintCapabilities dokumenty.

Tento článek obsahuje následující oddíly.

  • Odvození nové třída pomocí dědičnosti

  • Určit, zda the zařízení jeho funkce jsou již definované ve schéma pro tisk

  • Vytvořit typy k vyjádření funkce zařízení

  • Rozšíření PrintCapabilities a PrintTicket třídy

    • Rozšíření třída PrintTicket

    • Rozšíření třída PrintCapabilities

  • Čtení a psaní PrintCapabilities a PrintTicket jazyk XML datové proudy.

  • Přetížení a rozšíření metody a vlastnosti

  • Rozšiřující funkce definované schéma

  • Rozšíření obor názvů systém.Printing.IndexedProperties

Příklad

Příklad projekt, uvedený v tomto článek neposkytuje všechny podrobnosti nutné k kontextová nabídka a spuštění aplikace. Je určena k vám poskytnout obrázek pouze hlavních kroků potřebných k rozšíření funkcí System.Printing and System.Printing.IndexedProperties Chcete-li obory názvů k tisku na zařízení, jejichž funkcí není explicitně podporovány v těchto oborech názvů. Příklady kódu jsou k dispozici pouze pokud je nezbytná konkrétní podrobnosti.

Příklady kódu také v nutně nezahrnujte techniky osvědčených postupů programování nebo zabezpečený kód. Nic nejsou bezprostředně důležité k předmětu tohoto článek je vynechán.

Nakonec tento článek je určena především pro vývojáře aplikace a nikoli vývojářům ovladač zařízení. Z tohoto důvodu důraz se na psaní PrintTicket objekty, nikoli PrintCapabilities Country (Země).

Odvození nové třída pomocí dědičnosti

Začněte odvozené třídy představovat zařízení z PrintQueue Třída. V příkladu kódu pod BrailleEmbosser třída je odvozena. Braillově je jazyk, který je čitelného slepce, protože jeho symboly jsou složeny z "tečky" aktivovaná vypnout povrchu papíru tak může být plsť s ruky. Embosser Braillově je jednoduše tiskárna, která vytiskne Braillově. Některé ovladače pro embossers Braillově schopny překládat pravidelné Braillově do Braillova úroveň 3, nazývaných Braillově 3, který je prostor uložení verze Braillově, používá mnoho contractions a zkratky. V příkladu obsahuje vlastnost, která představují tato funkce.

Často budete také muset přetížit některé zděděné vlastnosti a metody. See Přetížení a rozšíření metody a vlastnosti pod podrobnosti.

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
}

Určit, zda the zařízení jeho funkce jsou již definované ve schéma pro tisk

The PrintTicket and PrintCapabilities třídy mají vlastnosti představující nejběžnější funkce tiskárna, ale existuje mnoho více funkcí definovaných v Print Schema Public Keywords specifikace, která explicitně neprojeví se v těchto tříd. (Seznam společné rysy, stačí zobrazit vlastnosti PrintCapabilities Třída.) Přečtěte si specifikace Pokud speciálních funkcí zařízení jsou definovány v něm. Pro všechny funkce této je součástí specifikace, je skvělý výhody použití modelu specifikace: model společných a terminologie umožňuje PrintTicket jazyk XML dokumenty vytvořené pro jedno zařízení pro použití v jiné. (Druhé zařízení může být provedeny jiného výrobce a pro dané záležitosti, ji byla pravděpodobně navržených Po PrintTicket dokument byl původně vytvořen.) Tisk lístků může být vložen do doklady samotné tak, aby tisk záměry autor, jakož i své záměry formátování lze přenášet společně jako dokument je distribuována uživatelům, kteří mají různé tiskárny.

Pro zbývající část tohoto článek, výslovně podporované funkcePrintTicket and PrintCapabilitiestřídy, bude volána "společné rysy." Ty, které jsou definovány v Print Schema Public Keywordsspecifikace, ale dvě třídy není explicitně podporován, bude volána "definuje funkce". Bude volána funkce, které nejsou definovány ve specifikaci veřejné klíčová slova "nové funkce."

Je také možné, že zařízení má funkce, která je téměř dokonalé shoda s definovanou funkcí, ale má jednu nebo více možností navíc nebyla rozpoznána v Print Schema Public Keywords specifikace. The Print Schema může být rozšířeno tak, aby zpracování funkcí, například tak, že využívá existující definice co nejvíce. Další informace o způsobu práce se tyto funkce naleznete Rozšiřující funkce definované schéma níže.

Vytvořit typy k vyjádření funkce zařízení

Vlastnosti PrintTicket and PrintCapabilities které odpovídají typům tiskárna funkce převzít zvláštní, obvykle vyčíslení, které představují funkce a jeho možných hodnot. The Collation výčet je například typ pro PrintTicket.Collation Vlastnost. Je také typ členy na kolekce, která je typu PrintCapabilities.CollationCapability Vlastnost.

vytvořit třídy pro vaše zařízení definované a nové funkce použití jako modely těchto existujících tříd. V ukázce kódu pod BrailleGrade3 výčet je deklarována. Je-li vyrobeny na modelu Collation výčet protože překlad úroveň 3 je analogická řazení: Jakákoliv tiskárna, by musel podporovat alespoň jeden druh výstupu (kompletovat nebo uncollated) protože jsou vzájemně vyčerpávající. Některé tiskárny podporují obě. (Tiskárny, které podporují pouze utříděných výstupu jsou vzácné, ale tato možnost má být vzaty v úvahu.) Ano příliš, může být embossers, které podporují pouze nepřeložený Braillově výstup, pouze přeložit výstup (není pravděpodobné, ale možná) nebo obojí. The BrailleGrade3 obsahuje výčet Neznámá hodnota pro stejné důvod této Collation akce: ke zpracování situace pokud aplikace vyrábějícího PrintTicket dokument má sada funkce kolace hodnota, která nebyl rozpoznán v Print Schema Public Keywords specifikace. Pokud aplikace vytvoří PrintTicket objekt pomocí dokument, pak bude PrintTicket.Collation Vlastnost bude získána hodnota Neznámá. (Neznámá hodnota nikdy používá PrintCapabilities objekty.)

public enum BrailleGrade3 { Translated, Untranslated, Unknown } 

Vyčíslení nejsou vždy nejlepším způsobem představují funkce. Někdy je lepší třída typu odkaz. To platí zejména po funkce vnořené struktura podřízené části, aby každý má vlastní hodnota. Například PageMediaSize Třída má Height and Width Vlastnosti. PageMediaSize je typ PrintTicket.PageMediaSize Vlastnost. Je také typ členy na kolekce, která je typ PrintCapabilities.PageMediaSizeCapability Vlastnost.

Rozšíření PrintCapabilities a PrintTicket třídy

Přestože PrintTicket and PrintCapabilities nemůže být zděděna třídy, můžete rozšířit Print Schema k rozpoznání definované a nové funkce.

Rozšíření třída PrintTicket

Chcete-li použít PrintTicket Třída vašeho systém rozšířených funkcí, proveďte následující kroky. Některé podrobnosti jsou níže.

Vysoká úroveň procedura pro rozšíření třída PrintTicket

  1. Pokud zařízení obsahuje nové funkce, vytvořit novou třída k zapouzdření nové funkce. (See vytvořit třída NewFeaturesPrintTicket některé podrobnosti.)

  2. Pokud zařízení definoval funkce, vytvořit třída k zapouzdření definované funkce. (See vytvořit třída DefinedFeaturesPrintTicket některé podrobnosti.)

  3. vytvořit třída představovat lístek celé tisku. Tato třída bude hrát role ve vaší aplikace, PrintTicket Třída by přehrát zařízení měl žádné definované nebo nové funkce. (See vytvořit třída WholePrintTicket některé podrobnosti.)

procedura pro vytvoření třída NewFeaturesPrintTicket

  1. Pokud zařízení obsahuje nové funkce, deklarovat třída k zapouzdření těchto funkcí. Dejte nám ji volat NewFeaturesPrintTicket.

  2. Uveďte vaše nové vlastnosti třída představují nové funkce zařízení. Obvykle každou vlastnost, bude typ vytvořit, obvykle výčet. See Vytvořit typy k vyjádření funkce zařízení výše.

  3. Nová třída poskytnout další vlastnost, dejte nám ji volat PrivateNamespace, které bude obsahovat odkaz na soukromý názvový prostor jazyk XML definující nové funkce zařízení. Tento řetězec bude nutné při psaní revize jazyk XML k dokumentům PrintCapabilities a PrintTicket. See Čtení a psaní PrintCapabilities a PrintTicket jazyk XML datové proudy. níže.

  4. Uveďte dvě třída konstruktory. Konstruktory měly modelovat na dvou konstruktory pro PrintTicket. Jeden trvá žádné parametry, druhé trvá Stream objekt s obsah jazyk XML. Datový proud jazyk XML bude PrintTicket dokument, který definuje nové, spíše než běžné funkce. (See Print Schema-Related Technologies and PrintTicket Schema and Document Construction.) Konstruktory s parametrem vyvoláním výjimky na způsobu PrintTicket jeden parametr konstruktor třída.

  5. VytvořitGetXmlStream and a SaveTo metoda pro třída. Pro oba tyto mají odpovídat funkce používejte klíčové slovo přístup "internal"PrintTicket Tyto názvy metod s tím rozdílem, že jim bude zpracovávat PrintTicket dokumenty, které definovat nové funkce namísto běžné funkce. 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. Viz čtení a zápis PrintCapabilities a PrintTicket jazyk XML datové proudy níže.

procedura pro vytvoření třída DefinedFeaturesPrintTicket

  • Pokud zařízení definoval funkce, deklarovat třída k zapouzdření těchto funkcí. Dejte nám ji volat DefinedFeaturesPrintTicket. By měl být konstruováno, stejně jako vyrobeno NewFeaturesPrintTicket výše, s následujícími výjimkami.

    • Vlastnosti třída musí mít názvy, které odpovídají odpovídající název funkce v Print Schema Public Keywords specifikace.

    • Nevytvářejte PrivateNamespace vlastnost. Obor názvů pro definované funkce je stejná jako u běžných funkcí. See Čtení a psaní PrintCapabilities a PrintTicket jazyk XML datové proudy. níže.

    • The GetXmlStream and SaveTo metody neposkytují datové proudy s deklarace navíc obor názvů.

procedura pro vytvoření třída WholePrintTicket

  1. Deklarace třídy, které budou představovat lístek celé tisku a tedy bude hrát role ve vaší aplikace, PrintTicket Třída by jste přehrávali, pokud žádné funkce definované nebo nové zařízení. Dejte nám ji volat WholePrintTicket.

  2. PoskytnoutWholePrintTicket vlastnost, nechte nám ji volat CommonFeatures, of type PrintTicket.

  3. PoskytnoutWholePrintTicket jeden nebo oba následující další vlastnosti, a to v závislosti na tom, zda obsahuje nové funkce, definované funkce nebo obojí.

    • NewFeatures of type NewFeaturesPrintTicket.

    • DefinedFeatures of type DefinedFeaturesPrintTicket.

  4. PoskytnoutWholePrintTicket dvou konstruktory. Ten, který trvá žádné parametry a jeden, trvá Stream objekt s obsah jazyk XML. Konstruktor s parametr bude postupujte následujícím způsobem.

    1. PředatStream pro konstruktor pro PrintTicket objekt odkazuje CommonFeatures vlastnost. Tento konstruktor bude jednoduše ignorovat všechny revize v Stream není relevantní pro běžné funkce.

    2. PředatStream z konstruktor NewFeaturesPrintTicket objekt uvedený ve NewFeatures vlastnost. Tento konstruktor bude jednoduše ignorovat všechny revize v Stream není relevantní pro nové funkce. Pokud není žádné nové funkce revize a potom Stream bude začínat <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:Zkratka obor názvů=název obor názvů plně >, kde název obor názvů plně je adresa URL sloužící k identifikaci schéma, který definuje nové funkce a Zkratka obor názvů zkratka jeho. (Další informace naleznete v tématu Čtení a psaní PrintCapabilities a PrintTicket jazyk XML datové proudy. níže.).

    3. PředatStream z konstruktor DefinedFeaturesPrintTicket objekt uvedený ve DefinedFeatures vlastnost. Tento konstruktor bude jednoduše ignorovat všechny revize v Stream není relevantní pro definované funkce.

  5. VytvořitGetXmlStream and a SaveTo metoda pro třída. Tyto jsou určeny k odpovídají funkci PrintTicket Tyto názvy metod. Měli by mít následující vlastnosti.

    • Každá taková metoda by měla volat odpovídající metody se stejným název v objektech podle CommonFeatures vlastnostiDefinedFeatures Vlastnost (pokud existuje) a NewFeaturesVlastnost (pokud existuje).

    • Každá metoda by měla řetězit datové proudy, vyrobené volání, popsané v předchozích odrážka. Of course, all but the last </PrintTicket> end tag, and all but the first <PrintTicket … > start tag, should be deleted. Pokud neexistují žádné nové funkce, by měly mít počáteční značka deklarace navíc obor názvů. (Viz krok 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.

    • K provedení zřetězení, WholePrintTicket’s GetXmlStream and SaveTo metody bude nutné pracovat v dočasném datovém proudu interně první. Konkrétně se mají tři různé třídy každý serializovat jejich obsah do dočasné datový proud, proveďte práce zřetězení (a vyřazování tiskáren práce - viz další odrážka) a potom výstup zřetězení výsledek do konečného výstupu datový proud.

    • Následující zřetězeníWholePrintTicket’s GetXmlStream and SaveTo metody budou také muset odebrat nebo trojitých kopií prvky z datový proud před vrácením konečné datový proud. Tyto položky nebo trojitých bude v datovém proudu, protože každé tři objekty, PrintTicket, NewFeaturesPrintTicket, and DefinedFeaturesPrintTicket, zachovat Všechna původního dokumentu PrintTicket, která byla použita k sestavení, i v případě, že každý z nich poskytuje pouze podmnožinu dokument v jeho vlastnosti.

    • Se vyřazování tiskáren tiskáren kroku, popsané v předchozích odrážka, by mohl vyhnout Pokud vaše WholePrintTicket(datový proud) konstruktor - viz výše rozdělení příchozí datový proud do tří částí vytvořením samostatné datové proudy pro prvky společné nové a definovaných značek. Každý z těchto datových proudů menší je pak předána odpovídající konstruktor tři vlastnosti WholePrintTicket. Tato technika by nutné přidat uzávěrky </PrintTicket> značka každé tři datové proudy. Do datový proud pro CommonFeatures and DefinedFeatures vlastnosti, je přidat počáteční značka následujícím způsobem: <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">. Počáteční značka pro NewFeatures vlastnost konstruktor by to přidejte další soukromý obor názvů, například tento tvar: <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:Zkratka obor názvů=název obor názvů plně >, kde název obor názvů plně je adresa URL sloužící k identifikaci schéma, který definuje nové funkce a Zkratka obor názvů zkratka jeho.)

Následující ukázka kódu znázorňuje část výsledku tohoto procedura, při použití příkladu embosser Braillova. (prostor a jednoduchost, mnohem má byly vynechány.) Všimněte si, že BrailleGrade3 je vlastnost Nullable<T> TYPE. Tento vzorek vlastnosti následujePrintTicket například Collation. Příklad předpokládá, že jsou obě nové a definované funkce, ačkoli neurčuje žádné zvláštní funkce definované.

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.}
}

Rozšíření třída PrintCapabilities

Chcete-li použít PrintCapabilities Třída se zařízení, je třeba jej rozšířit způsobem, který je rovnoběžný jak rozšířit PrintTicket Třída. Vzhledem k tomu, že můžete použít vaše přípona PrintTicket jako model je pouze stručný přehled uvedeny zde.

  • Vytvořit tři třídy, jedno pro zapouzdření nové funkce (NewFeaturesPrintCapabilities), jedno pro zapouzdření definovaných funkcí (DefinedFeaturesPrintCapabilities) a druhý představuje celý dokument PrintCapabilities (WholePrintCapabilities).

  • Typy vlastností prvních dvou nových tříd bude obvykle ReadOnlyCollection<T>. Použít existující vlastnosti PrintCapabilities, jako jsou například CollationCapability, jako modely.

  • Také následující vzorek existující PrintCapabilitiesTřída, názvy vlastnost by měl mít "Funkce" na konci; například BrailleGrade3Capability.

  • The NewFeaturesPrintCapabilities třída bude mít PrivateNamespace vlastnost stejný jako ten, který jste vytvořili pro NewFeaturesPrintTicket.

  • Žádný z třídy bude mít jakékoli Jiný metody než jaké jsou dědí Object Třída.

  • Každou ze tříd bude mít jeden konstruktor, který zabírá Stream Parametr. The Stream bude PrintCapabilities dokument.

  • The DefinedFeaturesPrintCapabilities konstruktor musí ověřit, Stream předaný do odpovídá Print Schema Framework dříve, než se použije Stream inicializovat vlastnosti. (Snadno provést je možné předat Stream první, chcete-li PrintCapabilities konstruktor. Pokud tyto vyvolá bez výjimek, datový proud je platný.)

  • The NewFeaturesPrintCapabilities konstruktor musí ověřit, Stream předaný do odpovídá soukromý obor názvů před používá Stream inicializovat vlastnosti.

  • Obě DefinedFeaturesPrintCapabilities and NewFeaturesPrintCapabilities konstruktory bude vyvoláním výjimky na způsobu existující PrintCapabilities konstruktor.

  • The WholePrintCapabilities třída bude mít CommonFeatures, DefinedFeatures, and NewFeatures vlastností. Typy těchto vlastností budou PrintCapabilities, DefinedFeaturesPrintCapabilities, and NewFeaturesPrintCapabilties uvedeném pořadí. Každý bude budované masky vlastnosti WholePrintTicket.

  • Konstruktor pro WholePrintCapabilities třída bude trvat jeden Stream Parametr představující celý dokument PrintCapabilities. konstruktor by měly předat celý vstupní Stream Chcete-li všechny tři konstruktory jeho vlastnosti člen. Od WholePrintCapabilities třída nemá žádné metody, které exportovat jeho nastavení ve formátu jazyk XML (např. WholePrintTicket’s GetXmlStream and SaveTo metody), fakt, že bude dvojité nebo trojité revize v rámci tři vlastnosti je neškodný.

Další informace naleznete v tématu PrintCapabilities Schema and Document Construction.

Čtení a psaní PrintCapabilities a PrintTicket jazyk XML datové proudy.

Primární práce konstruktory a metody existující PrintTicket and PrintCapabilities třídy a nové třídy, kterou jste vytvořili výše v Rozšíření PrintCapabilities a PrintTicket třídy je přečíst, analyzovat, zapisovat a někdy ověřit Stream objekty, jejichž obsah je PrintTicket dokument nebo dokument PrintCapabilities. Byste se měli seznámit s Základní vstupně-výstupní operace se souborya metody těchto tříd. Obsah těchto datových proudů, protože je jazyk XML je by měla také seznámit s jazyk XML, čtení a zápis odborné pomoci popsané v XML Processing Options in the .NET Framework. Pokud aplikace pracuje s formát XPS (XML Paper Specification) dokumenty, existují rozhraní API V seznamu System.Windows.Xps, System.Windows.Xps.Packagingand System.Windows.Xps.Serialization určena pro čtení a zápis do oborů názvů formát XPS dokumenty, včetně čtení a psaní PrintTickets. Viz také PackageRelationship informace o přidávání relace k PrintTicket do balíček.

Úplné Ukázky z dokumentu PrintTicket a PrintCapabilities dokument lze nalézt na adrese PrintTicket Example and PrintCapabilities Document Example.

Následuje jednoduchý příklad PrintCapabilities dokument, ve kterém všechny ale jednu z funkcí zařízení vynechán. Uvedené funkce je DocumentCollate, což je funkce, která je zastoupena PrintCapabilities.CollationCapability and PrintTicket.Collation Vlastnosti.

<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>

Oznámení, je každé možné možnost funkce uvedena (jak kompletování a neuspořádaný) a stav každého (to znamená, zda je omezen či nikoli) je identifikován. V dokončení dokument PrintCapabilities stav každé možnost všechny funkce určen, proto dokument je druh snímek konfigurace zařízení.

Následuje jednoduchý příklad PrintTicket dokument, který obsahuje pouze jednu funkce.

<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>

Všimněte si, že struktura může být poněkud jednodušší, protože není nutné explicitně určit stav jednotlivých možností dokument PrintTicket. Potřebuje pouze k identifikaci požadované možnosti.

Syntaxe a struktura funkce je definována na DocumentCollate tím Print Schema Framework a Print Schema Public Keywords. Při práci s novými funkcemi, budete pracovat s funkcemi, které jsou definovány v soukromé jazyk XML obor názvů definované v doplňkových schéma. Obvykle to je poskytne výrobce zařízení, obchodních sdružení nebo normy neziskové organizace; však bude pravděpodobně jste jej vytvoří. Použít existující Print Schema Framework a Print Schema Public Keywords Chcete-li se dozvědět Požadováno syntaxe a najít modelů, ve kterém můžete založit své definiční soubory. Rozšíření systém PrintCapabilities a PrintTicket k jeho nový ovladač formát XPS dokument Writer (MXDW) Microsoft sama vytvořit nový obor názvů. Podrobnosti naleznete v části Nastavení konfigurace MXDW.

Pokud jsme Předpokládejme, že fiktivní AJAX Embosser společnost podle funkce překladu BrailleGrade3 tak, aby byla rovnoběžná s definici funkce kolace dokumentů Microsoft a poté vidíme co dokument položky PrintCapabilities a PrintTicket pro funkci vypadat. Všimněte si, že jmenný prostor, kde je definována funkce musí být deklarována v < PrintCapabilities … > a < PrintTicket … > počáteční značky.

revize dokument PrintCapabilities

<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>

revize dokument PrintTicket

<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>

Další informace o psaní PrintTicket dokumenty, které zpracovat nové funkce v tématu Creating a Device-Specific PrintTicket. Naleznete rozsáhlou dokumentaci o vytváření dokumentů PrintTicket a PrintCapabilitiesPrintCapabilities Schema and Document Construction and PrintTicket Schema and Document Construction oddíly schéma Tisk dokumentace.

Přetížení a rozšíření metody a vlastnosti

Jakékoli metoda libovolné třída, že buď trvá PrintTicket parametr nebo vrátí PrintTicket, a chcete pomocí rozšířených funkcí systém, budou muset nahrazuje metoda, která používá WholePrintTicket namístoPrintTicket. Podobně všechny vlastnosti typu PrintTicket Chcete použít bude muset být nahrazen vlastnosti typu WholePrintTicket. párovat stejné body, Obdobně, to PrintCapabilities and WholePrintCapabilities.

Po dědičné třída, která je hostitelem metoda nebo vlastnosti se mohou odvodit třída a přetížení metoda nebo vlastnost pomocí WholePrintTicket namístoPrintTicket.

Pokud hostitelských třída není dědičná, bude nutné jej rozšířit způsobem PrintTicket and PrintCapabilities byla rozšířena nad: vytvořit třída, která má hostitelských třídě jako člen. Potom udělit vnější třída metody a vlastnosti se stejnými názvy jako odpovídající metody dané mají (nebo návrat) PrintTicket Nebo PrintCapabilities Parametry. Obvykle vnější třída by měl odpovídat funkce vnitřní třída se stejným název, ale použije WholePrintTicket or WholePrintCapabilities Parametry namísto PrintTicket Nebo PrintCapabilities Parametry. Také pro vlastnosti vnitřní třída, které jsou typu PrintTicket Nebo PrintCapabilities, vytvořit se stejným název odpovídající vlastnost ve třídě vnější používá WholePrintTicket or WholePrintCapabilities.

Pravděpodobně, nejdůležitějších metod budete muset přetížení jsou dvě verze MergeAndValidatePrintTicket Složka BrailleEmbosser třída (viz Odvození nové třída pomocí dědičnosti výše), bude nutné nahrazení používající WholePrintTicket parametry a které přidat logiku k ověřit lístky s novými funkcemi proti schéma soukromý obor názvů. Chcete-li přetížit stávajících metod nebo vytvořit nové s názvem MergeAndValidateWholePrintTicket.

Dvě metody, které vracejí PrintTicket jsou ConvertDevModeToPrintTicket and Clone. In rozhraní .NET Framework Existují 15 Jiný metody, se nepočítají přetížení, které PrintTicket parametr a 19 vlastnosti typu PrintTicket. Ale jde není pravděpodobné, že než jakékoli dané aplikace bude používat více než malý počet těchto proto nebude vyšší může navrhnout tato čísla velikosti pracovní zátěže. Happily pouze metoda, která vrátí PrintCapabilities objekt je GetPrintCapabilities a neexistují žádné vlastnosti s typem PrintCapabilities.

Rozšiřující funkce definované schéma

Zcela nové funkce nejsou pouze situace, která může vyžadovat přípona Print Schema. Je také možné zařízení, bude nabízejí nové, nedefinovaný, možnosti známých, definice funkce. Vzhledem k tomu, že soukromý obor názvů musí být použity pro nové možnosti nedefinovaný, stejně jako musí být použity pro o zcela novou funkci, je pravděpodobně snazší považovat tyto rozšířené funkce, stejně jako považovat zcela nové funkce (ale použít názvy definovaných schémat funkci a jeho možnosti, které jsou již definovány): je určený ve vašem NewFeaturesPrintTicket and NewFeaturesPrintCapabilities. Všechny podrobnosti, které jsou potřebné pro provedení tohoto druhu přípona schéma projednávání přesahuje hranice tohoto článek, ale uvědomte si, že zřetězení pracovat, musí hotovo WholePrintTicket.GetXmlStream and WholePrintTicket.SaveAs metody musel stanou poněkud složitější.

Rozšíření obor názvů systém.Printing.IndexedProperties

Pokud chcete využít výhod rozhraní API V seznamu System.Printing.IndexedProperties obor názvů, možná budete muset odvodit nové třída z PrintProperty. Je třeba provést v případě, že vlastnosti, které jste vytvořili pro třída odvozena PrintQueue má typ, který není reprezentován některý z existujících tříd v System.Printing.IndexedProperties. Příklady co lze provádět pomocí on System.Printing.IndexedProperties obor názvů, viz Postupy: Klonovat tiskárna and Postupy: Získat vlastnosti systémový objekt tisk bez reflexe.

To není nutné naše například výše, od pouze vlastnost jsme přidán do našeho BrailleEmbosser třída is IsBraile3Enabled, which is Boolean. Již existuje System.Printing.IndexedProperties.PrintBooleanProperty Třída.

Viz také

Úkoly

Postupy: Klonovat tiskárna

Postupy: Získat vlastnosti systémový objekt tisk bez reflexe

Odkaz

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

Nastavení konfigurace MXDW

Koncepty

XML Processing Options in the .NET Framework

Dokumenty v WPF (Windows Presentation Foundation)

Přehled Tisk

Další zdroje

Tisk schéma

Tisk Framework schéma

Vytváření PrintTicket specifické pro zařízení

Tisk technologie týkající se schéma

Schéma PrintTicket a stavebnictví dokument

Příklad PrintTicket

Příklad dokument PrintCapabilities

Schéma PrintCapabilities a stavebnictví dokument

Tisk schéma veřejné klíčová slova

Zapisovací modul dokumentů Microsoft XPS