Condividi tramite


File di configurazione della pipeline di filtri

Importante

La piattaforma di stampa moderna è il mezzo preferito di Windows per comunicare con le stampanti. Ti consigliamo di usare il driver di classe IPP di Microsoft, insieme a Print Support Apps (PSA), per personalizzare l'esperienza di stampa in Windows 10 e 11 per lo sviluppo di dispositivi per stampanti.

Per ulteriori informazioni, consultare la guida alla progettazione dell'app di supporto di stampa .

Il file di configurazione della pipeline di filtro è un file XML che definisce quanto segue:

  • Ordine dei filtri nella pipeline. Questo ordine viene definito dall'ordinamento degli elementi XML nel file di configurazione della pipeline di filtro.

  • Interfacce di filtro. Queste interfacce sono definite dagli attributi XML nel file di configurazione della pipeline di filtro.

  • Formati di input e output per ogni filtro. Questi formati sono definiti dagli elementi XML nel file di configurazione della pipeline di filtro.

L'esempio di codice seguente mostra un tipico file di configurazione della pipeline di filtro:

<Filters>
    <Filter      dll="XDWMark.dll"
 clsid="{D647D658-BEF6-415f-AFAC-070D64074C5D}"
                name="Watermark filter">
        <Input  guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
        <Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
    </Filter>
 <Filter dll="XDScale.dll"
 clsid="{B9B52406-92D3-4721-86E6-3CF78F6D5FC5}"
 name="Page Scaling filter">
 <Input guid="{4d47a67c-66cc-4430-850e-daf466fe5bc4}" comment="IID_IPrintReadStream"/>
 <Output guid="{65bb7f1b-371e-4571-8ac7-912f510c1a38}" comment="IID_IPrintWriteStream"/>
 </Filter>
    <Filter      dll="XDColMan.dll"
 clsid="{8E56FC37-0799-447e-A643-16F4FB18244C}"
 name="Colour Management filter">
         <Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
        <Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
    </Filter>
    <Filter      dll="XDBook.dll"
 clsid="{7DFC96C6-CEA2-46d8-B354-887C47B7986D}"
                name="Booklet filter">
         <Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
        <Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
    </Filter>
    <Filter      dll="XDNUp.dll"
 clsid="{1b5bee16-511c-440f-8017-2123f481091a}"
                name="NUp filter">
         <Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
        <Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
    </Filter>
</Filters>

Parole chiave private

Un modulo di configurazione XPSDrv può inserire parole chiave private nella voce PrintTicket quando gestisce un evento documento del driver XPS durante una chiamata di funzione DrvDocumentEvent. Queste voci PrintTicket vengono quindi lette dai filtri di elaborazione nella pipeline di filtro di stampa mentre i filtri leggono PrintTicket.

Contenitore delle proprietà della pipeline di filtro

Un modulo di configurazione può anche usare il contenitore delle proprietà della pipeline di filtro per archiviare dati o per passare informazioni a una pipeline di filtro. Per esporre i servizi di configurazione tramite il contenitore delle proprietà, il modulo di configurazione deve esportare il metodo DrvPopulateFilterServices . Inoltre, il file di configurazione della pipeline di filtro deve includere l'elemento <FilterServiceProvider> per ogni servizio. Il modulo del provider deve implementare ed esportare la funzione DllCanUnloadNow . In genere, questi provider pubblicano interfacce COM nel contenitore delle proprietà. Il provider deve rimanere attivo mentre queste interfacce sono in uso.

Un altro elemento, <OptionalFilterServiceProvider>, consente al responsabile della pipeline di continuare il processo di stampa se la DLL del provider di servizi non è disponibile. I singoli filtri devono definire il proprio comportamento in assenza del provider di servizi facoltativo. In caso contrario, se <viene usato FilterServiceProvider> e la dll non può essere caricata, il processo ha esito negativo. L'elemento <OptionalFilterServiceProvider> è supportato in Windows 7 e versioni successive.

L'esempio di codice seguente illustra la funzione DrvPopulateFilterServices :

HRESULT
DrvPopulateFilterServices(
    __in IPrintPipelinePropertyBag  *pPropertyBag
    );

Per informazioni sulla funzione precedente, vedere DrvPopulateFilterServices.

Nell'esempio di codice seguente viene illustrata la sintassi XML per l'elemento <FilterServiceProvider> nel file di configurazione della pipeline di filtro:

<Filters>
    <Filter ... />
    <FilterServiceProvider dll = "providerA.dll"/>
    <FilterServiceProvider dll = "providerB.dll"/>
</Filters>

Modalità di intercalazione per il dispositivo di output

Interleaving si riferisce al modo in cui le singole parti di risorsa di un documento XPS vengono trasmessi insieme alle parti del documento FixedPage. Quando la pipeline di filtro crea il modello a oggetti del documento XPS per il primo filtro, utilizzando le interfacce di documento XPS nella pipeline, l'ordine di interleaving del file di spooling XPS non viene più rispettato. Tuttavia, l'ultimo filtro nella pipeline che utilizza l'interfaccia del documento XPS può specificare un ordine di intercalare nel file di configurazione del filtro che la pipeline deve usare quando serializza il contenuto XPS. La selezione dell'ordine di interleaving più compatibile con un dispositivo di output o un file di output può migliorare le prestazioni dell'elaborazione successiva dei documenti.

Il filtro di esempio seguente è un estratto del file di configurazione del filtro di esempio precedente modificato per mostrare come usare l'opzione di interleaving. Sebbene questo esempio mostri entrambe le opzioni di interleaving a scopo illustrativo, un file di configurazione del filtro reale ha un solo elemento nella definizione del filtro:

    <Filter     dll="XDNUp.dll"
      clsid="{1b5bee16-511c-440f-8017-2123f481091a}"
        name="NUp filter">
      <Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
       <Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
     <Interleaving mode="ResourcesFirst"\>
     <Interleaving mode="MarkupFirst"\>
    </Filter>

La pipeline di filtro supporta i seguenti ordini di alternanza:

  • L'ordine di interleaving ResourcesFirst ordina ogni risorsa dipendente prima della FixedPage che dipende dalla risorsa. Questo ordine di intercalazione è valido per i driver della stampante e per le stampanti destinate al consumo diretto perché fornisce le risorse di caratteri e immagini necessarie alla stampante per il rendering del testo e dei contenuti della pagina poco prima che il rendering inizi.

  • L'ordine di intercalazione MarkupFirst trasmette il testo e il markup del documento, oltre alle informazioni su come verrà utilizzata una risorsa, prima di trasmettere la risorsa effettiva. Questo ordine di interlacciamento è ideale per le destinazioni di archiviazione file e per le applicazioni che visualizzano il documento online.

Output XPS ottimizzato per l'archivio

Questa funzionalità consente ai driver di stampa di richiedere esplicitamente l'output XPS ottimizzato per l'archiviazione come file di spool. In Windows 8, Microsoft XPS Document Writer v4 (MXDW) produce questo output XPS pronto per l'archivio tramite un percorso di codice disponibile solo per MXDW in Microsoft XPS Document Converter (MXDC). Pertanto, un driver di stampa può generare questo XPS ottimizzato per l'archiviazione da MXDC.

Nell'esempio di codice seguente viene illustrata la sintassi XML per l'uso dell'elemento <Archive> nel file di configurazione della pipeline di filtro per abilitare questa funzionalità:

<Filters>
    ...
    <Archive enabled="true"/>
</Filters>