Share via


Supporto driver per OpenXPS

Importante

È consigliabile 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 stampanti.

Per altre informazioni, vedere la guida alla progettazione dell'app di supporto stampa.

OpenXPS è il formato Open XML Paper Specification per i documenti ed è basato sulla specifica standard Ecma International.

Per le informazioni più aggiornate su questa specifica, vedere Open XML Paper Specification (Specifica carta XML aperta).

Windows 8 offre il supporto completo per OpenXPS, side-by-side con supporto continuo per il formato Microsoft XPS esistente. Questo argomento è incentrato sul supporto per OpenXPS tramite il modello di driver v4. Per il supporto openXPS pertinente agli sviluppatori di applicazioni Windows, vedere Supporto app per la stampa OpenXPS.

Scenari OpenXPS supportati

Il percorso di stampa di Windows è stato sviluppato per garantire che il formato XPS inviato corrisponda a un formato supportato del driver di stampa di destinazione e convertirà i formati in base alle esigenze. Windows fornisce anche API per eseguire query sul driver di stampa, in modo che l'applicazione possa fornire elementi compatibili ed evitare qualsiasi conversione aggiuntiva all'interno del sistema di stampa.

Un driver di stampa può usare il manifesto per indicare se supporta Microsoft XPS, Open XPS o entrambi i formati. È possibile presentare Microsoft XPS o OpenXPS ai filtri nella pipeline di filtro di stampa usando le interfacce di flusso e modello a oggetti esistenti. Non sono necessarie nuove interfacce per supportare OpenXPS. Il formato presentato ai filtri dipende dal formato supportato dal driver o dal formato fornito dall'applicazione.

Microsoft XPS Document Writer (MXDW) è stato aggiornato per consentire a MXDW di restituire Microsoft XPS o OpenXPS da qualsiasi applicazione desktop di Windows. Analogamente, microsoft XPS Viewer e l'app Reader in Windows 8 possono aprire entrambi i formati XPS. Se necessario, gli utenti possono stampare dal visualizzatore XPS a MXDW per convertire i formati.

Scenari OpenXPS non supportati

Alcune funzionalità legacy non sono supportate o offrono un'esperienza con downgrade quando usata con OpenXPS.

Non supportato: l'invio di file OpenXPS direttamente al spooler (ignorando l'API di stampa XPS) è uno scenario non supportato. In questo modo verranno generati i problemi di funzionalità seguenti:

  • I file di spool XPS inviati direttamente al spooler verranno trattati come MSXPS e gestiti di conseguenza.

  • I risultati dell'invio di un file OpenXPS direttamente al spooler non sono definiti e probabilmente causano un errore del processo di stampa.

Nota Non sono previsti piani per fornire supporto per questo scenario.

Non consigliato: l'invio di un flusso OpenXPS da un'applicazione direttamente all'API di stampa XPS non è una tecnica consigliata. Ad esempio, non inviare un flusso OpenXPS direttamente al metodo StartXPSPrintJob. In questo caso, la conversione risultante da un sapore di XPS a un altro come flusso può essere molto costoso per le prestazioni.

È invece consigliabile usare IPrintDocumentPackageTarget per inviare il processo di stampa come XPS OM per evitare il degrado delle prestazioni.

Non consigliato: invio di un file di spool XPS direttamente al spooler. In tal caso, il sistema di stampa non troverà i metadati necessari aggiunti dalle API del percorso di stampa, si supponga che il formato sia MSXPS e tenterà di convertirlo in OpenXPS. Se il file di spool inviato direttamente al spooler era un file formattato OpenXPS, il tentativo della pipeline del filtro di stampa di convertirlo in OpenXPS avrà risultati non definiti. Se il file inviato al spooler era un file con formattazione MSXPS e il driver è un driver solo OpenXPS, la conversione dalla pipeline del filtro di stampa in OpenXPS avrà esito positivo. Tuttavia, questa conversione in ritardo comporta una perdita significativa delle prestazioni del sistema di stampa.

Impatto sugli sviluppatori di app

Per informazioni sull'impatto sugli sviluppatori di app relativi al supporto di Windows 8 per OpenXPS, vedere Supporto app per la stampa OpenXPS.

Impatto sugli sviluppatori di driver

Di seguito sono riportati i passaggi di base per abilitare OpenXPS in un driver di stampa v4:

  • Manifesto driver: Aggiungere "OpenXPS" alla sezione Rendering driver.

  • Manifesto driver: aggiungere "oxps" alla sezione FileSave, se applicabile.

  • Pipeline di filtro: aggiornare i filtri di stampa per gestire gli elementi OpenXPS.

Per un determinato flusso e con le interfacce a oggetti appropriate, un client può usare il formato OpenXPS per trasferire i dati ai filtri nella pipeline di filtro di stampa. Per trasferire un flusso di dati, il client usa le interfacce IID_IPrintReadStream e IID_IPrintWriteStream. Per trasferire i dati in un componente OM, il client usa le interfacce IID_IXpsDocumentProvider e IID_IXpsDocumentConsumer. I driver che dichiarano il supporto per OpenXPS dovranno assicurarsi che i filtri di stampa forniti possano gestire correttamente il formato OpenXPS quando questo formato viene ricevuto dalla pipeline manager.

Manifesto driver: sezione DriverRender. Durante l'installazione del driver, il processo di installazione controlla la sezione DriverRender del manifesto per verificare se la voce XpsFormat include OpenXPS. La voce XpsFormat può includere sia XPS (per Microsoft XPS) sia OpenXPS, per indicare il supporto duale. L'ordine in cui i due formati sono elencati nella voce XpsFormat determina il formato preferito per il driver.

Ecco alcuni esempi di come aggiornare la sezione DriverRender.

Indica solo il supporto per OpenXPS:

[DriverRender]
XpsFormat = OpenXPS

Indica solo il supporto per MSXPS:

[DriverRender]
XpsFormat = XPS

Indicante il supporto per entrambi i formati, con una preferenza per OpenXPS:

[DriverRender]
XpsFormat = OpenXPS,XPS

Indicante il supporto per entrambi i formati, con una preferenza per MSXPS:

[DriverRender]
XpsFormat = XPS,OpenXPS

Lo sviluppatore di driver determina il formato preferito per il driver di stampa V4 e questa decisione si basa sulla funzionalità che il driver è stato progettato per fornire. Ad esempio, un driver di stampa può essere sviluppato per fornire supporto XR JPEG per immagini ad alta fedeltà.

Il sistema di stampa prende diverse decisioni in base alle informazioni DriverRender nel manifesto. Ecco alcuni esempi di queste decisioni:

  • Processi di stampa basati su GDI inviati ai driver v4

    Microsoft XPS Document Converter (MXDC) accetta l'input del processo di stampa GDI e converte il processo in un file di spool XPS. Il formato del file di spool corrisponderà al formato XPS preferito indicato nella sezione DriverRender del manifesto.

  • Conversione del formato API di stampa XPS

    L'API di stampa XPS eseguirà query sui formati XPS supportati per il driver di destinazione. Se il driver supporta entrambi i formati, l'API di stampa XPS passerà il processo di stampa XPS al spooler COME INVIATO dall'applicazione. Non verrà eseguita alcuna conversione.

    Se il driver di destinazione supporta solo uno o l'altro formato, il processo verrà convertito nel formato corretto prima di spooling.

    Se nel manifesto non è disponibile xpsFormat, il comportamento verrà predefinito solo in MSXPS. L'input OpenXPS verrà convertito in MSXPS. Questo comportamento offre la maggiore compatibilità con le versioni precedenti per i driver.

  • File XPS inviati direttamente a spooler

    I file XPS inviati direttamente al spooler sono, per impostazione predefinita, MSXPS. L'invio diretto di OpenXPS al spooler non è supportato. Tuttavia, .NET prima di 4.5+ serializzava il proprio MSXPS e ha inviato il processo direttamente al spooler. Questo comportamento è stato implementato prima dell'introduzione dell'API di stampa XPS (xpsprint.dll).

    Per garantire la compatibilità con le versioni precedenti per queste applicazioni .NET, la gestione pipeline del filtro di stampa verificherà il file di spooling per determinare se è stato ricevuto direct-to-spooler. In tal caso, si presuppone che sia MSXPS. La gestione pipeline del filtro di stampa eseguirà una query sui formati XPS del driver a quel punto. Se il driver supporta MSXPS, non verrà eseguita alcuna conversione. Se il driver supporta solo OpenXPS, la gestione pipeline del filtro di stampa eseguirà una conversione del file. La conversione a questo punto nel processo è costosa; garantisce tuttavia che le app .NET legacy possano essere stampate in nuovi driver OpenXPS v4.

Manifesto driver: sezione FileSave. La sezione FileSave del manifesto del driver di stampa v4 fornisce estensioni per la finestra di dialogo Salvataggio file usata dalla porta PORTPROMPT: (PORTPROMPT: deve essere usato al posto di FILE: in Windows 8.1, perché PORTPROMPT: consente agli utenti di accedere a tutte le posizioni dei file a cui hanno diritti, anche quando l'applicazione è in esecuzione in modalità con diritti bassi). Le voci nella sezione FileSave sono associate alle voci nella sezione DriverRender in base all'indice.

Esempio:

[FileSave]
xps=0
oxps=0

[DriverRender]
XpsFormat=XPS,OpenXPS

Ciò garantisce che quando l'utente invia un processo di stampa a questo driver e la porta è impostata su PORTPROMPT:, la finestra di dialogo Salvataggio file visualizzerà XPS e OpenXPS come opzioni di tipo di file nella finestra di dialogo e applica rispettivamente .xps o .oxps, come estensione del file.

Per altre informazioni sulle altre opzioni per la sezione Salvataggio file del manifesto, vedere Manifesto driver V4.

Supporto delle app per la stampa OpenXPS

Specifica OXPS (Open XML Paper Specification)

Manifesto del driver V4