Condividi tramite


Infrastruttura di preanalisi

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'applicazione di supporto alla stampa .

L'infrastruttura di preanalisi è un meccanismo mediante il quale Unidrv forza il raggruppamento su un processo di stampa in modo che la prima riproduzione band di ogni pagina sia una banda che contiene l'intera pagina. Il passaggio di preanalisi non consente alcun rendering e viene eseguito solo per abilitare l'analisi degli oggetti nella pagina prima del rendering degli oggetti.

Per consentire una preanalisi a pagina intera, Unidrv specifica innanzitutto una superficie del dispositivo a pagina intera all'interno della funzione DrvEnableSurface e quindi indica che la prima banda è la dimensione dell'intera pagina tramite DrvQueryPerBandInfo. Al termine della preanalisi, Unidrv usa DrvQueryPerBandInfo per ripristinare le dimensioni dell'area di ritaglio prima dell'abilitazione della preanalisi; Unidrv esegue successivamente il rendering in tale superficie. A causa delle limitazioni di implementazione di GDI, la preanalisi può essere abilitata solo quando la modalità N-up è ONE_UP o se la banda di rendering è l'intera pagina.

Lo pseudocodice seguente illustra la logica usata per la preanalisi.

DrvEnableSurface
if( preanalysis enabled )
   Use dummy device surface
DrvStartDoc
For each physical page 
{
   DrvStartPage
   DrvStartBanding
   For each banding surface 
   {
      DrvQueryPerBandInfo
// Set sizlBand member of PERBANDINFO
      if( preanalysis_pass ) 
         pbi.sizlBand = {whole page}
      else 
         pbi.sizlBand = {normal band}
      Carry out rendering operations
      if ( ( preanalysis pass && OEM preanalysis enabled ) || !preanalysis_pass ) {
         Call OEM hooks
         DrvNextBand
      }
      if ( ( preanalysis pass && OEM preanalysis enabled ) || !preanalysis_pass )
         Call OEMNextBand
      if( preanalysis pass ) {
         Disable preanalysis
         Switch from dummy device surface to real device surface
      }
      if( last band ) 
         Write end page character from GPD
   }  // for each banding surface

}  // for each physical page
DrvEndDoc

Poiché la funzionalità di preanalisi deve funzionare con i file e i plug-in di descrizione della stampante generica correnti, il testo z-order, il rilevamento della banda vuota e altre operazioni vengono implementate invisibly dal punto di vista del minidriver. Un minidriver può associare DrvStartBanding e DrvNextBand, ma non riceverà la prima chiamata a DrvNextBand perché la prima chiamata a DrvNextBand non include alcun rendering. Il plug-in riceve la prima chiamata DrvNextBand solo se imposta il flag nell'oggetto Criteri di gruppo che abilita la preanlisi a livello di oggetto OEM (*PreAnalysisOptions: 8). In questo caso il plug-in deve associare DrvStartBanding e DrvNextBand e il plug-in deve controllare il parametro pptl della funzione DrvStartBanding . Se il parametro pptl non è NULL, la preanalisi è disabilitata. Se il parametro pptl è NULL, che indica l'inizio del passaggio di preanalisi. In questo caso il plug-in deve presupporre che tutte le chiamate al disegno di DDI che il plug-in abbia collegato risultato dal passaggio di preanalisi. Il passaggio di preanalisi termina con la prima chiamata alla funzione DrvNextBand e il rendering inizia dopo la prima chiamata alla funzione DrvNextBand . Le chiamate successive a questa funzione conterranno i dati di rendering.

*Modalità PreAnalysisOptions

La modalità di preanalisi viene controllata nel file GPD dal parametro *PreAnalysisOptions: n nome dell'attributo e attributo. Nella tabella seguente sono elencati i valori dei parametri che possono essere usati con il nome dell'attributo *PreAnalysisOptions . Due o più di questi valori possono essere combinati per abilitare più opzioni.

Valore significato parametro 0

Disabilitare tutte le modalità di preanalisi.

1

Modalità predefinita. Abilitare l'analisi del testo in ordine z monocromatico e l'ottimizzazione della banda vuota. Questa modalità è abilitata per i dispositivi con supporto del tipo di carattere o del tipo di carattere del dispositivo scaricabili e risoluzione elevata (600 dpi o superiore), 24 modalità di rendering BPP.

2

Abilitare 1 ottimizzazione BPP per 24 callback BPP IPrintOemUni ImageProcessing .

4

Abilitare le operazioni StretchBlt del dispositivo.

8

Abilitare la preanalisi a livello di oggetto OEM.

Analisi del testo in ordine Z monocromatico con ottimizzazione banda vuota

*PreAnalysisOptions: 1

L'impostazione del parametro *PreAnalysisOptions su 1 consente a Unidrv di eseguire le operazioni seguenti:

  • Rilevare i problemi nell'ordine z tra testo e oggetti grafici nelle stampanti monocromatica.

  • Eseguire l'ottimizzazione della banda vuota.

La prima operazione gestisce i problemi dell'ordine z che si verificano quando il testo scaricato in una stampante monocromatica viene sovrascritto o interagisce in altro modo con gli oggetti grafici. I problemi relativi all'ordine Z sono spesso causati da oggetti grafici che contengono clip complesse, in modo che Unidrv non sia in grado di scaricare un rettangolo bianco che cancella il testo scaricato in precedenza.

Unidrv esegue un passaggio di preanalisi in ogni pagina prima di eseguire un passaggio di rendering. Unidrv esegue questa operazione per determinare se un testo verrà sovrapposto con un oggetto blt (Bit-Block Transfer) che usa una clip complessa che non può essere simulata. Di conseguenza, il rendering del testo viene eseguito nella bitmap della superficie anziché essere scaricato direttamente in modo che gli oggetti sottoposti a rendering in un secondo momento interagiranno correttamente con il testo.

Inoltre, per i dispositivi che non supportano rettangoli bianchi, Unidrv verifica la presenza di testo sovrapposto da blts, anche quando non contengono clip complesse. Unidrv esegue il rendering del testo sulla superficie anziché scaricarlo direttamente nella stampante.

I comandi di disegno seguenti vengono testati in base al testo che potrebbe essere sovrapposto dai blts successivi:

Questa modalità, pertanto, deve correggere tutti i problemi di ordine z tra gli oggetti di testo e di area riempita. Si noti che possono verificarsi ancora problemi con il testo e le righe sovrapposte. Queste situazioni non sono incluse perché tale soluzione può comportare il download di quasi tutto il testo anziché essere disegnato.

Questa funzionalità non corregge i problemi relativi all'ordine z associati all'uso dei tipi di carattere del dispositivo. Se l'applicazione o il driver ha selezionato la modalità tipo di carattere del dispositivo, il driver non può risolvere questo problema e non sarà in grado di eseguire il rendering dei tipi di carattere del dispositivo sulla superficie.

La seconda operazione consente a Unidrv di ottimizzare le aree vuote nella pagina. In questa modalità, Unidrv ignora i margini di inizio e inferiore vuoti vuoti e tutte le aree vuote di grandi dimensioni nella parte centrale della pagina. Questa modalità, destinata all'uso nella stampa a colori, migliora le prestazioni riducendo al minimo il numero di passaggi di banda necessari per eseguire il rendering della pagina.

Durante il passaggio di preanalisi, Unidrv determina dove si verificherà il disegno nella pagina. L'ottimizzazione della banda vuota viene abilitata ogni volta che è abilitata la preanalisi o quando la stampante usa 24 bande di rendering BPP ad alta risoluzione (600 dpi o superiore). Questo dovrebbe comportare un notevole miglioramento delle prestazioni sul rendering BPP 24 per stampanti a getto di input penna e non richiede modifiche ai plug-in OEM esistenti.

Ottimizzazione della banda nera

*PreAnalysisOptions: 2  *% 1 bpp ImageProcessing bitmaps

L'impostazione del parametro *PreAnalysisOptions su 2 consente a Unidrv di usare una superficie di banda BPP più grande per eseguire il rendering di aree che contengono solo oggetti neri solidi, anziché eseguire il rendering dell'intera pagina a 24 BPP. Questa modalità è simile all'ottimizzazione della banda vuota, con l'eccezione che determina anche aree nere a tinta unita (anziché aree di colore) nella pagina. Solo gli oggetti di colore nero a tinta unita (senza sfumature grigie) possono essere visualizzati nella superficie di banda BPP 1 perché il rendering del colore 24 BPP non viene eseguito correttamente in 1 BPP monocromatico.

Unidrv crea due superfici all'interno della funzione DrvEnableSurface : una per il colore e l'altra per 1 monocromatico BPP. Unidrv usa la stessa memoria per ogni, quindi non è necessaria alcuna memoria aggiuntiva. La preanalisi della pagina determina se la pagina contiene aree nere o vuote solide, per le quali è possibile utilizzare bande di dimensioni maggiori rispetto alle aree che contengono colori. Solo le aree di colore richiedono l'uso della superficie di banda dei colori più piccola.

Usando la stessa quantità di memoria, una superficie monocromatica BPP 1 può essere 24 volte maggiore di una superficie di colore BPP 24. Pertanto, un'immagine contenente il colore solo al centro della pagina può essere divisa in tre aree: l'area superiore, l'area che contiene il colore e l'area inferiore. Queste tre aree possono essere raggruppate come segue: l'area superiore può essere posizionata in una singola banda monocromatica, l'area che contiene il colore può essere divisa in tutte le bande di colori necessarie per coprirla e l'area inferiore può essere posizionata in una singola banda monocromatica.

Questa funzionalità richiede agli OEM di supportare il callback IPrintOemUni ImageProcessing e di gestire il dump dei dati raster. Il supporto del plug-in OEM corrente per il callback ImageProcessing IPrintOemUni deve essere migliorato per accettare 24 bande BPP o 1 bande nere BPP.

Supporto per le operazioni StretchBlt per dispositivi

*PreAnalysisOptions: 4

L'impostazione del parametro *PreAnalysisOptions su 4 consente a Unidrv di scaricare le chiamate DrvStretchBlt direttamente ai dispositivi che supportano operazioni stretchblt.

Quando Unidrv genera 24 dati a colori BPP, tutte le immagini stretchblt vengono estese alla risoluzione del dispositivo, con un risultato di grandi quantità di dati raster che devono essere scaricati. Ciò può comportare prestazioni lente, oltre alle condizioni di memoria insufficiente in molte stampanti asiatiche.

Un plug-in di rendering di minidriver è necessario per sfruttare la modalità stretchblt perché deve associare OEMStretchBlt e fornire i propri comandi di download delle immagini. Unidrv consente l'hook OEMStretchBlt solo sulle chiamate che possono essere scaricate direttamente. Di conseguenza, il plug-in non è responsabile della gestione dei problemi relativi all'ordine z. Il plug-in deve solo scaricare direttamente i dati dell'immagine di origine contenuti nelle chiamate OEMStretchBlt ricevute. Il plug-in ha anche la possibilità di puntare l'immagine in Unidrv se l'immagine è in un formato che il plug-in non supporta o non può scaricare.

Ogni volta che gli oggetti vengono scaricati direttamente in un dispositivo mentre viene eseguito il rendering di altri dati nel sistema, possono verificarsi problemi di ordine z o incoerenze halftone. Questa modalità usa la preanalisi per determinare quali estensioni possono essere scaricate direttamente. Solo gli stretchblts che non contengono alcuna maschera o ritaglio complesso verranno considerati per il download diretto. Se un oggetto successivo sovrappone uno degli stretchblts considerati per il download diretto, non verrà scaricato direttamente alcun oggetto. Questo principio dovrebbe migliorare le prestazioni e dovrebbe garantire che nessuna immagine includa halftone sia dal sistema che dal dispositivo, con un output di stampa di scarsa qualità.

Hook di preanalisi a livello di oggetto OEM

*PreAnalysisOptions: 8

L'impostazione del parametro *PreAnalysisOptions su 8 consente all'OEM di avviare un passaggio di preanalisi in modo che tutti gli oggetti dell'intera pagina vengano riprodotti dopo la chiamata DrvStartBanding senza considerare le dimensioni della banda. Nessun disegno è consentito all'interno di Unidrv durante il passaggio di preanalisi, ma gli OEM possono associare tutte le chiamate di disegno DrvXxx per analizzare gli oggetti nella pagina.

La funzionalità in questa modalità è incentrata sulle stampanti a getto di inchiostro a colori in modo che gli OEM possano usare la correzione o il rendering dei colori basati su oggetti. Ad esempio, alcune stampanti devono gestire oggetti neri in modo diverso se si intersecano con oggetti colore, anziché oggetti neri che appaiono da soli. Altri OEM potrebbero volere un mezzotone per gli oggetti stretchblt diversi dagli oggetti bitblt. Gli oggetti Stretchblt possono essere in qualsiasi formato di file grafico supportato da Windows, ad esempio .png o .jpg. Gli oggetti bitblt sono esclusivamente bitmap.

Quando questa modalità è abilitata nell'oggetto Criteri di gruppo, Unidrv definisce la superficie come superficie di raggruppamento, ma fa sì che la prima riproduzione sia dell'intera pagina. A tale scopo, Unidrv imposta la finestra clip GDI sull'intera pagina. Unidrv consente di associare tutti i comandi di disegno, ma restituisce prima di poter eseguire qualsiasi disegno. Al passaggio successivo, Unidrv reimposta la finestra di clip sulla normale banda e le bande come di consueto.

Gli OEM sono necessari per associare sia DrvStartBanding che DrvNextBand quandohanno abilitato questa modalità nell'oggetto Criteri di gruppo. Devono testare il parametro pptl della funzione DrvStartBanding per determinare se Unidrv può abilitare la preanalisi in questa modalità nella pagina specificata. Se il parametro pptl è NULL, Unidrv ha abilitato la preanalisi. Unidrv usa il parametro pptl perché non ha alcun significato a questo punto (non è stato aggiornato con la posizione della banda). Per la preanalisi, la posizione della banda è sempre impostata su (0, 0)). Se il parametro pptl è NULL, l'OEM deve considerare tutte le chiamate di disegno prima del primo DrvNextBand come parte della preanalisi e non deve consentire alcun disegno sulla superficie.

La fine della preanalisi viene segnalata da una chiamata alla funzione OEMNextBand . Il parametro pptl passato a OEMNextBand non è NULL. Questa chiamata viene usata solo per restituire il valore pptl appropriato a Unidrv. I plug-in possono impostare il valore pptl stesso o possono richiamare in Unidrv (come l'esempio pseudocodice precedente all'inizio di questo articolo). Poiché la superficie di banda di cui non è ancora stato eseguito il rendering il parametro pso di OEMNextBand specificato nella prima chiamata a OEMNextBand , un plug-in non deve inviare il relativo contenuto al dispositivo.