Ordem de execução de comando
Importante
A plataforma de impressão moderna é o meio preferido 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 comandos da impressora devem ser enviados ao hardware da impressora em uma ordem significativa. Para a maioria dos nomes de comando definidos na linguagem GPD, o Unidrv sabe quando enviar a sequência de escape do comando para a impressora. Há duas exceções:
Comandos de configuração da impressora
Para ambos os tipos de comando, você deve especificar a ordem na qual os comandos devem ser executados.
A ordem de execução do comando é composta de dois componentes -- um nome de seção de trabalho e um número de ordem de sequência. O driver Unidrv divide cada trabalho de impressão em seis seções. Para cada seção, o Unidrv envia à impressora os comandos atribuídos à seção, na sequência especificada. As seguintes seções são definidas:
JOB_SETUP
Os comandos atribuídos à seção JOB_SETUP são enviados uma vez por trabalho. Eles são os primeiros comandos enviados quando um novo trabalho é iniciado. Esses comandos são enviados de dentro da implementação do Unidrv da função DrvStartDoc.
DOC_SETUP
Os comandos atribuídos à seção DOC_SETUP são enviados antes que a primeira página de um documento seja enviada. Os comandos são enviados de dentro da implementação do Unidrv da função DrvStartDoc. (Esses comandos também são enviados depois que um aplicativo chama a função Win32 ResetDC. Os comandos nesta seção não devem remover informações baixadas, como fontes e padrões flexíveis.)
PAGE_SETUP
Os comandos atribuídos à seção PAGE_SETUP são enviados no início de cada nova página, antes do início do desenho. Esses comandos são enviados de dentro da implementação do Unidrv da função DrvStartPage.
PAGE_FINISH
Os comandos atribuídos à seção PAGE_FINISH são enviados no final de cada página, após a conclusão do desenho. Esses comandos são enviados de dentro da implementação do Unidrv da função DrvSendPage.
DOC_FINISH
Os comandos atribuídos à seção DOC_FINISH são enviados após o envio da última página de um documento. Os comandos são enviados de dentro da implementação do Unidrv da função DrvEndDoc. (Os comandos nesta seção não devem remover informações baixadas, como fontes e padrões flexíveis.)
JOB_FINISH
Os comandos atribuídos à seção JOB_FINISH são enviados uma vez por trabalho. Eles são os últimos comandos enviados quando um trabalho termina. Esses comandos são enviados de dentro da implementação do Unidrv da função DrvEndDoc.
Dentro de cada uma dessas seções, os comandos são executados na ordem indicada por seus números de sequência.
Para especificar a seção e o número de sequência de um comando, use o atributo *Order, que é descrito em Atributos de comando. O formato é:
*Order: SectionName.SequenceNumber
em que SectionName is one of JOB_SETUP, DOC_SETUP, PAGE_SETUP, PAGE_FINISH, DOC_FINISH, ou JOB_FINISH, e SequenceNumber é um valor numérico.
Os números de sequência não precisam ser consecutivos, mas cada número especificado em uma seção deve ser exclusivo. Os comandos dentro de uma seção são executados desde aquele com o menor número de sequência até aquele com o mais alto. Por exemplo, as entradas a seguir indicam que as opções para os recursos InputBin, PaperSize e Resolution são atribuídas à seção DOC_SETUP e são enviadas na ordem especificada:
*Feature: InputBin
{
*Option: Auto
{
*Name: "Auto Tray"
*Command: CmdSelect
{
*Order: DOC_SETUP.50
*Cmd: "<1B>(1<010014>"
}
}
...
}
*Feature: PaperSize
{
*DefaultOption: Letter
*Option: Letter
{
*Name: "Letter size"
*Command: CmdSelect
{
*Order: DOC_SETUP.60
*Cmd: "<1B>(g<0300>n<01>r"
}
}
...
}
*Feature: Resolution
{
*DefaultOption: 360dpi
*Option: 360dpi
{
*Name: "360 dpi x 360dpi"
*Command: CmdSelect
{
*Order: DOC_SETUP.70
*Cmd: "<1B>(d<020001>"
}
}
...
}