Compatível com tamanhos de papel definidos pelo usuário
Importante
A plataforma de impressão moderna é o meio preferencial do Windows para se comunicar com as impressoras. Recomendamos que você use o driver de classe de caixa de entrada IPP da Microsoft juntamente com PSA (Aplicativos de Suporte à Impressão) para personalizar a experiência de impressão no Windows 10 e 11 para o desenvolvimento de dispositivos de impressora.
Para obter mais informações, consulte Plataformade impressão moderna e o Guia de design do aplicativo de suporte de impressão.
Os tamanhos de papel definidos pelo usuário podem ser específicos para um único servidor de impressão e normalmente são personalizados para uma aplicação específica. Por isso, eles são normalmente chamados de tamanhos de papel personalizados. Os administradores do sistema usam a pasta de impressão para definir tamanhos de papel personalizados. Se uma impressora puder lidar com tamanhos de papel personalizados, os fornecedores deverão usar o arquivo GPD da impressora para especificar o intervalo aceitável de tamanhos.
Dois métodos são fornecidos para descrever intervalos de tamanho aceitáveis para papel personalizado:
Você pode especificar intervalos de tamanho explicitamente.
Você pode especificar intervalos de tamanho relacionados ao maior tamanho de papel da impressora.
Especificando intervalos de tamanho de papel explicitamente
Para usar esse método, o recurso PaperSize do arquivo GPD deve incluir uma entrada *Opção, com um argumento CUSTOMSIZE. Essa entrada deve conter os seguintes atributos de opção:
*MinSize *MaxSize *MaxPrintableWidth *MinLeftMargin *TopMargin *BottomMargin *CenterPrintable? *CursorOrigin *Command. Você pode usar essas entradas GPD para criar descrições personalizadas de tamanho de papel personalizadas somente para impressoras com as seguintes características:
A impressora é compatível com comandos para selecionar explicitamente tamanhos de papel personalizados (normalmente movendo a origem do cursor).
A origem do cursor permanece fixa, em relação ao canto superior esquerdo do papel, para todos os tamanhos de papel personalizados. (Isso normalmente não é verdade para impressão no modo paisagem ou para impressoras alimentadas no centro ou na direita.)
As margens superior e inferior são independentes do tamanho do papel.
Se a largura do papel for menor que a soma dos valores especificados para *MinLeftMargin e *MaxPrintableWidth, não haverá margem à direita. Ou seja, a impressora pode imprimir na borda direita do papel.
Os parâmetros de comando (especificados em *Entradas de comando ) podem ser calculados no momento da impressão, se expressões de variáveis padrão forem usadas, normalmente incluindo as variáveis PhysPaperLength e PhysPaperWidth. Essas variáveis representam o tamanho real do papel solicitado para o trabalho de impressão, conforme especificado por um aplicativo.
Especificando intervalos de tamanho de papel em relação ao maior tamanho de papel da impressora
Para impressoras não compatíveis com as características necessárias para especificar explicitamente intervalos de tamanho de papel personalizados, é fornecido um método alternativo, que especifica tamanhos de papel em relação ao maior tamanho de papel da impressora.
Para usar esse método, o recurso PaperSize do arquivo GPD deve incluir uma entrada *Opção, com um argumento CUSTOMSIZE. Essa entrada deve conter os seguintes atributos de opção:
*MinSize *MaxSize *MaxPrintableWidth *CustCursorOriginX *CustCursorOriginX *CustPrintableOriginX *CustPrintableOriginY *CustPrintableSizeX *CustPrintableSizeY *Command Ao especificar um intervalo de tamanho em relação ao maior tamanho de papel da impressora, use as seguintes regras de alinhamento:
Para impressoras de alimentação na esquerda, as margens superior e esquerda de todos os tamanhos de papel devem estar alinhadas.
Para impressoras com alimentação na direita, as margens superior e direita de todos os tamanhos de papel devem estar alinhadas.
Para impressoras de alimentação central, as margens superiores e os pontos centrais superiores de todos os tamanhos de papel devem estar alinhados.
Isso envolve as seguintes etapas:
Determine as seguintes informações para o maior tamanho de papel da impressora:
- O comando necessário para selecionar o maior tamanho de papel.
- Valores que seriam usados para as entradas GPD *PageDimensions, *CursorOrigin, *PrintableOrigin e *PrintableArea do maior tamanho de papel, como se fossem ser incluídas no arquivo GPD. No entanto, você não colocará essas entradas no arquivo.
Crie fórmulas que especifiquem ou calculem as seguintes informações para cada tamanho de papel personalizado, em relação ao maior tamanho de papel da impressora.
- A origem e o tamanho da área de impressão de cada papel.
- A origem do cursor para cada papel.
As fórmulas da etapa 2 devem ser expressões do parâmetro CUSTOMIZE, que são especificadas como valores para as seguintes entradas GPD:
*CustCursorOriginX *CustCursorOriginX *CustPrintableOriginX *CustPrintableOriginY *CustPrintableSizeX *CustPrintableSizeY
A opção CUSTOMSIZE também deve incluir uma entrada *Command que especifica o comando que seleciona o maior tamanho de impressora. Esse comando é enviado para todos os tamanhos de papel personalizados e as fórmulas especificadas para a área de impressão e o controle de origem do cursor em que a impressora imprime no papel real, independentemente do tamanho.
Exemplos de cálculos
Como um exemplo simples, suponha que sua impressora seja compatível com tamanhos de papel personalizados com margens do mesmo tamanho que as margens do maior tamanho de papel. As etapas envolvidas são:
Determine os valores para as entradas *PageDimensions, *CursorOrigin, *PrintableOrigin e *PrintableArea do maior tamanho de papel. (Não coloque essas entradas no arquivo GPD.)
Determine a largura de cada uma das margens do maior tamanho de papel em termos desses valores, conforme ilustrado nas seguintes pseudoexpressões:
LeftMarginWidth=*PrintableOrigin.x RightMarginWidth=*PageDimensions.x-*PrintableArea.x-LeftMarginWidthTopMarginWidth=*PrintableOrigin.y BottomMarginWidth=*PageDimensions.y-*PrintableArea.y-TopMarginWidth
Nessas pseudoexpressões, .x e .y representam os componentes horizontais e verticais do valor do parde cada entrada. Para impressão em paisagem, use valores de paisagem para *PrintableArea e *PrintableOrigin.
Agora crie pseudoexpressões que especifiquem ou calculem as áreas imprimíveis para tamanhos de papel fora do padrão.
*CustPrintableOriginX: %d{LeftMarginWidth}
*CustPrintableOriginY: %d{TopMarginWidth}
*CustPrintableSizeX: %d{PhysPaperWidth-LeftMarginWidth-RightMarginWidth}
*CustPrintableSizeY: %d{PhysPaperLength-TopMarginWidth-BottomMarginWidth}
Observe o uso das duas variáveis padrão, PhysPaperWidth e PhysPaperLength. No tempo de execução, essas variáveis contêm o comprimento e a largura do tamanho real do papel que foi solicitado por um aplicativo.
Observe que essas pseudoexpressões são válidas se o papel for alimentado na esquerda, na direita ou no centro.
Insira valores reais, determinados na etapa 1, nessas expressões, para criar entradas GPD. Os exemplos podem ser:
*CustPrintableOriginX: %d{300}
*CustPrintableOriginY: %d{300}
*CustPrintableSizeX: %d{PhysPaperWidth-600}
*CustPrintableSizeY: %d{PhysPaperLength-600}
Crie pseudoexpressões que calculam os índices de origem do cursor. Nas pseudoexpressões a seguir, *CursorOrigin.x e *CursorOrigin.y são espaços reservados para os componentes horizontal e vertical do valor do par para a origem do cursor do maior tamanho de papel.
Para impressoras alimentadas na esquerda:
*CustCursorOriginX: %d{*CursorOrigin.x} *CustCursorOriginY: %d{*CursorOrigin.y} Para impressoras alimentadas na direita:
*CustCursorOriginX: %d{*CursorOrigin.x+PhysPaperWidth-*PageDimensions.x} *CustCursorOriginY: %d{*CursorOrigin.y} Para impressoras alimentadas no centro:
*CustCursorOriginX: %d{*CursorOrigin.x+(PhysPaperWidth-PageDimensions.x)/2} *CustCursorOriginY: %d{*CursorOrigin.y} Insira valores reais, determinados na etapa 1, nessas expressões para criar entradas GPD. Exemplos podem ser (para papel de alimentação central):
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+300}
*CustCursorOriginY: %d{180}
Especifique valores para as três entradas GPD restantes: *MinSize, *MaxSize e *MaxPrintableWidth. O valor especificado para *MaxPrintableWidth não é realmente usado para esse método, mas o analisador requer que a entrada exista, portanto, seu valor pode ser definido como 1.
Exemplo
O segmento de arquivo GPD de exemplo a seguir descreve tamanhos de papel personalizados aceitáveis para uma impressora alimentada no centro. Para o modo retrato, todas as margens para todos os tamanhos de papel personalizados têm 300 unidades principais (1/4 de polegada) de tamanho. Para o modo paisagem, as margens superior e inferior são 240 unidades principais, enquanto as margens esquerda e direita são 200 unidades mestres.
*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
}