Supporto driver per OpenXPS
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.
OpenXPS è il formato Open XML Paper Specification per i documenti ed è basato sulla specifica standard Ecma International.
Per informazioni aggiornate su questa specifica, vedere Open XML Paper Specification.
Windows 8 offre supporto completo per OpenXPS, affiancato con il 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 rilevante per gli sviluppatori di applicazioni Windows, vedi 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ò utilizzare il manifesto per indicare se supporta Microsoft XPS, Open XPS o entrambi i formati. Microsoft XPS o OpenXPS può essere presentato ai filtri nella pipeline di filtro di stampa, usando le interfacce om (Stream e Object Model) 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 l'output di Microsoft XPS o OpenXPS da qualsiasi applicazione desktop di Windows. Analogamente, microsoft XPS Viewer e l'app Lettore in Windows 8 possono aprire entrambi i formati XPS. Se necessario, gli utenti possono stampare da XPS Viewer a MXDW per convertire i formati.
Scenari OpenXPS non supportati
Alcune funzionalità legacy non sono supportate o offrono un'esperienza sottoposta a downgrade se usata con OpenXPS.
Non supportato: l'invio di file OpenXPS direttamente allo spooler (ignorando l'API di stampa XPS) è uno scenario non supportato. In questo modo, verranno generati i problemi di funzionalità seguenti:
I file di spooling XPS inviati direttamente allo spooler verranno trattati come MSXPS e gestiti di conseguenza.
I risultati dell'invio di un file OpenXPS direttamente allo spooler non sono definiti e potrebbero causare l'esito negativo 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 tipo di XPS a un altro come flusso può essere molto costosa per le prestazioni.
È invece consigliabile usare IPrintDocumentPackageTarget per inviare il processo di stampa come XPS OM per evitare una riduzione delle prestazioni.
Non consigliato: inviare un file di spooling XPS direttamente allo spooler. In questo caso, il sistema di stampa non troverà i metadati necessari aggiunti dalle API del percorso di stampa, presupponendo che il formato sia MSXPS e tenterà di convertirlo in OpenXPS. Se il file di spooling inviato direttamente allo spooler è un file in formato OpenXPS, il tentativo dalla pipeline del filtro di stampa di convertirlo in OpenXPS avrà risultati non definiti. Se il file inviato allo spooler è un file in formato 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 fase tardiva comporterà una perdita significativa delle prestazioni del sistema di stampa.
Impatto sugli sviluppatori di app
Per informazioni sull'impatto sugli sviluppatori di app relative al supporto di Windows 8 per OpenXPS, vedi Supporto app per la stampa OpenXPS.
Impatto sugli sviluppatori di driver
Di seguito sono riportati i passaggi di base per l'abilitazione di OpenXPS in un driver di stampa v4:
Manifesto del driver: aggiungere "OpenXPS" alla sezione Rendering driver.
Manifesto del driver: aggiungere "oxps" alla sezione FileSalva, se applicabile.
Pipeline di filtro: aggiornare i filtri di stampa per gestire gli elementi OpenXPS.
Per un determinato flusso e con le interfacce oggetto 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 a 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 gestione pipeline.
Manifesto del 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) che 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 il supporto solo per OpenXPS:
[DriverRender]
XpsFormat = OpenXPS
Indica il supporto solo per MSXPS:
[DriverRender]
XpsFormat = XPS
Indica il supporto per entrambi i formati, con una preferenza per OpenXPS:
[DriverRender]
XpsFormat = OpenXPS,XPS
Indica 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, è possibile sviluppare un driver di stampa per fornire supporto XR JPEG per immagini ad alta fedeltà.
Il sistema di stampa prende varie 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 spooling XPS. Il formato del file di spooling corrisponderà al formato XPS preferito indicato nella sezione DriverRender del manifesto.
Conversione del formato dell'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 allo 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 dello spooling.
Se nel manifesto non viene fornito alcun xpsFormat, il comportamento verrà impostato solo su 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 allo spooler
I file XPS inviati direttamente allo spooler sono, per impostazione predefinita, MSXPS. L'invio di OpenXPS diretto allo spooler non è supportato. Tuttavia, .NET prima della versione 4.5+ serializzò il proprio MSXPS e insediò il processo direttamente allo 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 di filtri di stampa controlla 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 per le prestazioni; garantisce tuttavia che le app .NET legacy siano in grado di stampare in nuovi driver OpenXPS v4.
Manifesto del driver: sezione FileSalva. La sezione FileSalva del manifesto del driver di stampa v4 fornisce estensioni per la finestra di dialogo Salva file usata dalla porta PORTPROMPT: . (PORTPROMPT: deve essere usato al posto di FILE: in Windows 8.1, perché PORTPROMPT: consentirà agli utenti di accedere a tutti i percorsi di file a cui dispongono dei diritti, anche quando l'applicazione è in esecuzione in modalità con diritti limitati. Le voci nella sezione FileSalva sono associate alle voci nella sezione DriverRender per 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 che la porta sia impostata su PORTPROMPT:, la finestra di dialogo Salva file visualizzerà XPS e OpenXPS come opzioni del tipo di file nella finestra di dialogo e applicherà rispettivamente xps o oxps come estensione di file.
Per altre informazioni sulle altre opzioni per la sezione File Save (Salvataggio file) del manifesto, vedere V4 Driver Manifest (Manifesto del driver V4).