Condividi tramite


Implementazione di filtri XPS

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 altre informazioni, vedere Piattaforma di stampa moderna e guida alla progettazione dell'app di supporto per la stampa.

Tutti i filtri XPS devono implementare l'interfaccia IPrintPipelineFilter .

Durante la chiamata al metodo IPrintPipelineFilter::InitializeFilter , un filtro deve:

  1. Memorizzare nella cache il puntatore all'interfaccia IPrintPipelineManagerControl .

  2. Elaborare i dati rilevanti nell'interfaccia IPrintPipelinePropertyBag .

  3. Chiamare i metodi IInterFilterCommunicator::RequestReader e IInterFilterCommunicator::RequestWriter dell'interfaccia IInterfilterCommunicator (pIInterFilterCom) per inizializzare il provider e le interfacce consumer per il filtro.

Se i dati contengono una sezione PrintTicket, è possibile accedere ai dati tramite l'API PrintTicket o PrintCapabilities di Microsoft Win32. Per i driver UniDrv e PScript5 basati su XPSDrv, i filtri possono accedere al driver Unidrv o PScript5 dell'interfaccia IPrintCoreHelper come servizio di configurazione.

I filtri possono anche essere in grado di accedere ai dati di configurazione proprietari tramite il contenitore delle proprietà, a seconda della progettazione del driver.

Inter-Filter Communicator fa parte di Filter Pipeline Manager che gestisce la comunicazione tra i filtri nella pipeline di filtro. Quando Filter Pipeline Manager inizializza un filtro, un'interfaccia Inter-Filter Communicator (IInterFilterCommunicator) viene passata al filtro in modo che il filtro possa ottenere le interfacce di lettura e scrittura definite per tale filtro.

Microsoft fornisce le interfacce di flusso e documento XPS, ma è possibile creare interfacce di filtro personalizzate definite per tale filtro. Microsoft offre le interfacce seguenti:

  • L'interfaccia del documento XPS legge e scrive da parti diverse di un file di spooling XPS.

  • L'interfaccia del flusso XPS legge e scrive un flusso seriale di dati. È possibile utilizzare questa interfaccia per scrivere la lingua di descrizione della pagina (PDL) da un filtro a una stampante che non usa XPS come PDL.

I filtri devono essere conformi alle regole di rendering e alle regole di elaborazione PrintTicket definite in XML Paper Specification (XPS).

I filtri non devono dipendere dai componenti Microsoft .NET Common Language Runtime (CLR) o Microsoft WinFX Runtime.

I filtri nella pipeline non devono visualizzare il contenuto dell'interfaccia utente.

I consigli seguenti si applicano ai filtri:

  • I filtri non devono creare processi o thread separati. Se è necessario un processo o un thread separato, il filtro deve gestire correttamente il processo o la durata del thread.

  • I filtri devono avere funzionalità isolate. Tutte le funzionalità e l'implementazione devono essere modulari. Eliminare eventuali dipendenze di ordine e funzionalità tra i filtri quando possibile.

  • I filtri devono gestire il caso in cui vengono inseriti nella pipeline non in ordine. Quando un filtro non è nell'ordine previsto, non deve arrestarsi in modo anomalo e deve gestire correttamente la situazione. Se un filtro dipende da un altro filtro, deve gestire normalmente la situazione se la dipendenza non viene fornita.

Per altre informazioni sull'aggiunta di notifiche asincrone al filtro, vedere Notifiche asincrone nei filtri di stampa.