Supporto di formati di carta definiti dall'utente
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.
I formati di carta definiti dall'utente possono essere specifici di un singolo server di stampa e sono in genere personalizzati per un'applicazione specifica. Di conseguenza, vengono spesso chiamati formati di carta personalizzati. Gli amministratori di sistema usano la cartella di stampa per definire formati di carta personalizzati. Se una stampante può gestire formati di carta personalizzati, i fornitori devono utilizzare il file GPD della stampante per specificare l'intervallo di dimensioni accettabile.
Sono disponibili due metodi per descrivere gli intervalli di dimensioni accettabili per la carta personalizzata:
È possibile specificare gli intervalli di dimensioni in modo esplicito.
È possibile specificare intervalli di dimensioni rispetto alle dimensioni più grandi della stampante.
Specifica di intervalli di dimensioni carta in modo esplicito
Per utilizzare questo metodo, la funzionalità PaperSize del file GPD deve includere una voce *Option con un argomento CUSTOMSIZE. Questa voce deve contenere gli attributi di opzione seguenti:
*MinSize *MaxSize *MaxPrintableWidth *MinLeftMargin *TopMargin *BottomMargin *CenterPrintable? *CursorOrigin *Comando È possibile usare queste voci GPD per creare descrizioni personalizzate delle dimensioni della carta solo per le stampanti con le caratteristiche seguenti:
La stampante supporta i comandi per selezionare in modo esplicito formati di carta personalizzati (in genere spostando l'origine del cursore).
L'origine del cursore rimane fissa, rispetto all'angolo superiore sinistro della carta, per tutti i formati di carta personalizzati. Questo non è in genere vero per la stampa in modalità orizzontale o per le stampanti allineate al centro o a destra.
I margini superiore e inferiore sono indipendenti dalle dimensioni della carta.
Se la larghezza della carta è minore della somma dei valori specificati per *MinLeftMargin e *MaxPrintableWidth, non esiste alcun margine destro. Ovvero, la stampante può stampare sul bordo destro della carta.
I parametri di comando (specificati in *Voci di comando ) possono essere calcolati in fase di stampa se vengono usate espressioni di variabile standard, in genere incluse le variabili PhysPaperLength e PhysPaperWidth. Queste variabili rappresentano le dimensioni effettive della carta richieste per il processo di stampa, come specificato da un'applicazione.
Specifica degli intervalli di dimensioni carta rispetto alle dimensioni più grandi della stampante
Per le stampanti che non supportano le caratteristiche necessarie per specificare in modo esplicito gli intervalli di formati di carta personalizzati, viene fornito un metodo alternativo, che specifica le dimensioni della carta rispetto alle dimensioni di carta più grandi della stampante.
Per utilizzare questo metodo, la funzionalità PaperSize del file GPD deve includere una voce *Option con un argomento CUSTOMSIZE. Questa voce deve contenere gli attributi di opzione seguenti:
*MinSize *MaxSize *MaxPrintableWidth *CustCursorOriginX *CustCursorOriginX *CustPrintableOriginX *CustPrintableOriginY *CustPrintableSizeX *CustPrintableSizeY *Command Quando si specifica un intervallo di dimensioni relativo alle dimensioni massime della stampante, usare le regole di allineamento seguenti:
Per le stampanti a sinistra, i margini superiore e sinistro di tutte le dimensioni della carta devono essere allineati.
Per le stampanti a destra, i margini superiore e destro di tutte le dimensioni della carta devono essere allineati.
Per le stampanti con alimentazione centrale, i margini superiori e i punti centrali superiori di tutte le dimensioni della carta devono essere allineati.
Sono necessari i passaggi seguenti:
Determinare le informazioni seguenti per il formato carta più grande della stampante:
- Il comando necessario per selezionare il formato carta più grande.
- Valori che verrebbero usati per le voci *PageDimensions, *CursorOrigin, *PrintableOrigin e *PrintableArea GPD, come se fossero incluse nel file GPD. Tuttavia, queste voci non verranno effettivamente inserite nel file.
Crea formule che specificano o calcolano le informazioni seguenti per ogni formato di carta personalizzato, rispetto alle dimensioni di carta più grandi della stampante.
- Origine e dimensioni dell'area stampabile di ogni carta.
- Origine del cursore per ogni carta.
Le formule per il passaggio 2 devono essere espressioni di parametro CUSTOMSIZE, specificate come valori per le voci GPD seguenti:
*CustCursorOriginX *CustCursorOriginX *CustPrintableOriginX *CustPrintableOriginY *CustPrintableSizeX *CustPrintableSizeY
L'opzione CUSTOMSIZE deve includere anche una voce *Command che specifica il comando che seleziona le dimensioni massime della stampante. Questo comando viene inviato per tutte le dimensioni personalizzate della carta e le formule specificate per l'area stampabile e il controllo origine cursore in cui la stampante stampa sul foglio effettivo, indipendentemente dalle dimensioni.
Calcoli di esempio
Come esempio semplice, si supponga che la stampante supporti formati carta personalizzati con margini dello stesso formato dei margini della carta più grande. I passaggi necessari sono i seguenti:
Determinare i valori per le voci *PageDimensions, *CursorOrigin, *PrintableOrigin e *PrintableArea. Non inserire queste voci nel file GPD.
Determinare la larghezza di ognuno dei margini di carta più grandi in termini di questi valori, come illustrato nelle pseudoespressioni seguenti:
LeftMarginWidth=*PrintableOrigin.x RightMarginWidth=*PageDimensions.x-*PrintableArea.x-LeftMarginWidthTopMarginWidth=*PrintableOrigin.y BottomMarginWidth=*PageDimensions.y-*PrintableArea.y-TopMarginWidth
In queste pseudoespressioni, .x e .y rappresentano i componenti orizzontali e verticali del valore della coppia di ogni voce. Per la stampa orizzontale, usare i valori orizzontale per *PrintableArea e *PrintableOrigin.
Creare ora pseudoespressioni che specificano o calcolano le aree stampabili per i formati di carta non standard.
*CustPrintableOriginX: %d{LeftMarginWidth}
*CustPrintableOriginY: %d{TopMarginWidth}
*CustPrintableSizeX: %d{PhysPaperWidth-LeftMarginWidth-RightMarginWidth}
*CustPrintableSizeY: %d{PhysPaperLength-TopMarginWidth-BottomMarginWidth}
Si noti l'uso delle due variabili standard, PhysPaperWidth e PhysPaperLength. In fase di esecuzione, queste variabili contengono la lunghezza e la larghezza delle dimensioni effettive della carta richieste da un'applicazione.
Si noti che queste pseudoespressioni sono valide se la carta è a sinistra, a destra o al centro.
Inserire valori effettivi, determinati nel passaggio 1, in queste espressioni per creare voci GPD. Alcuni esempi possono essere:
*CustPrintableOriginX: %d{300}
*CustPrintableOriginY: %d{300}
*CustPrintableSizeX: %d{PhysPaperWidth-600}
*CustPrintableSizeY: %d{PhysPaperLength-600}
Creare pseudoespressioni che calcolano gli indici di origine del cursore. Nelle pseudoespressioni seguenti* CursorOrigin.x e *CursorOrigin.y sono segnaposto per i componenti orizzontali e verticali del valore della coppia per l'origine del cursore della carta più grande.
Per le stampanti a sinistra:
*CustCursorOriginX: %d{*CursorOrigin.x} *CustCursorOriginY: %d{*CursorOrigin.y} Per le stampanti a destra:
*CustCursorOriginX: %d{*CursorOrigin.x+PhysPaperWidth-*PageDimensions.x} *CustCursorOriginY: %d{*CursorOrigin.y} Per le stampanti center-fed:
*CustCursorOriginX: %d{*CursorOrigin.x+(PhysPaperWidth-PageDimensions.x)/2} *CustCursorOriginY: %d{*CursorOrigin.y} Inserire valori effettivi, determinati nel passaggio 1, in queste espressioni per creare voci GPD. Alcuni esempi possono essere (per la carta con alimentazione centrale):
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+300}
*CustCursorOriginY: %d{180}
Specificare i valori per le tre voci GPD rimanenti--*MinSize, *MaxSize e *MaxPrintableWidth. Il valore specificato per *MaxPrintableWidth non viene effettivamente usato per questo metodo, ma il parser richiede che la voce esista, quindi il relativo valore può essere impostato su 1.
Esempio
Il segmento di file GPD di esempio seguente descrive le dimensioni di carta personalizzate accettabili per una stampante centrale. Per la modalità verticale, tutti i margini per tutte le dimensioni personalizzate della carta sono di 300 unità master (1/4 pollici). Per la modalità orizzontale, i margini superiore e inferiore sono 240 unità master, mentre i margini sinistro e destro sono 200 unità master.
*Option: CUSTOMSIZE
{
*rcNameID: =USER_DEFINED_SIZE_DISPLAY
*MinSize: PAIR(4200,9000)
*MaxSize: PAIR(14040, 21240)
*MaxPrintableWidth: 14040
*MinLeftMargin: 100
*CenterPrintable?: FALSE
*PageProtectMem: 1692
*InsertBlock: =PaperConstraints
*switch: Orientation
{
*case: PORTRAIT
{
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+300}
*CustCursorOriginY: %d{180}
*CustPrintableOriginX: %d{300}
*CustPrintableOriginY: %d{300}
*CustPrintableSizeX: %d{PhysPaperWidth-600}
*CustPrintableSizeY: %d{PhysPaperLength-600}
*Command: CmdSelect
{
*Order: DOC_SETUP.13
*Cmd: "<1B>&l101a8c1e99F<1B>*p0x0Y<1B>*c0t8064x12528Y"
}
}
*case: LANDSCAPE_CC90
{
*switch: Option20
{
*% The 8100 rotates the landscape job 180 degrees if a stapler
*% is attached, so the staple can be placed in the top left
*% corner of the document. The printer always rotates the
*% landscape job, even if stapling is not selected.
*case: 3KStapler
{
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+200}
*CustCursorOriginY: %d{PhysPaperLength}
*CustPrintableOriginX: %d{200}
*CustPrintableOriginY: %d{240}
*CustPrintableSizeX: %d{PhysPaperWidth-400}
*CustPrintableSizeY: %d{PhysPaperLength-480}
*Command: CmdSelect
{
*Order: DOC_SETUP.13
*Cmd: "<1B>&l101a8c1e63F<1B>*p0x0Y<1B>*c0t12456x8184Y"
}
}
*case: MBM5S
{
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+200}
*CustCursorOriginY: %d{PhysPaperLength}
*CustPrintableOriginX: %d{200}
*CustPrintableOriginY: %d{240}
*CustPrintableSizeX: %d{PhysPaperWidth-400}
*CustPrintableSizeY: %d{PhysPaperLength-480}
*Command: CmdSelect
{
*Order: DOC_SETUP.13
*Cmd: "<1B>&l101a8c1e63F<1B>*p0x0Y<1B>*c0t12456x8184Y"
}
}
*default
{
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+200}
*CustCursorOriginY: %d{21000}
*CustPrintableOriginX: %d{200}
*CustPrintableOriginY: %d{240}
*CustPrintableSizeX: %d{PhysPaperWidth-400}
*CustPrintableSizeY: %d{PhysPaperLength-480}
*Command: CmdSelect
{
*Order: DOC_SETUP.13
*Cmd: "<1B>&l101a8c1e63F<1B>*p0x0Y<1B>*c0t12456x8184Y"
}
}
} *% switch Option20
} *% case LANDSCAPE_CC90
} *% switch Orientation
}