Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Importante
A moderna plataforma de impressão é o meio preferido do Windows para comunicar com as impressoras. Recomendamos que utilize o controlador de classe da caixa de entrada IPP da Microsoft, juntamente com as Aplicações de Suporte de Impressão (PSA), 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 Guia de design do aplicativo de suporte de impressão v1 e v2.
A linguagem GPD fornece instruções condicionais semelhantes a C que permitem descrever dependências que alguns atributos de impressora podem ter na configuração de uma impressora. Por exemplo, as margens e a origem do cursor de uma página podem depender da orientação da página. As instruções *Switch e *Case permitem que se expressem tais dependências. O formato destas declarações é o seguinte:
*Switch FeatureName { *Case Option1_Name { } *Case Option2_Name { } etc. *Case OptionN_Name { } *Default { } }
FeatureName deve ser o nome de uma funcionalidade especificada no ficheiro GPD com a entrada *Feature. Os nomes de opção usados devem ser opções associadas ao recurso especificado.
Para expressar o caso em que as margens da página e a origem do cursor dependem da orientação da página, as seguintes entradas podem ser usadas:
*Feature: Orientation
{
*DefaultOption: Portrait
*Option: Portrait
{
*Name: "Portrait"
*rcIconID: =RC_ICON_PORTRAIT
}
*Option: LANDSCAPE_CC90
{
*Name: "Landscape"
*rcIconID: =RC_ICON_LANDSCAPE
}
}
*Feature: PaperSize
{
*DefaultOption: Letter
*Option: Letter
{
*Name: "Letter 8.5 x 11 inch"
*switch: Orientation
{
*case: Portrait
{
*PrintableArea: PAIR(4800, 6324)
*PrintableOrigin: PAIR(150, 150)
*CursorOrigin: PAIR(150,100)
}
*case: LANDSCAPE_CC90
{
*PrintableArea: PAIR(4860, 6360)
*PrintableOrigin: PAIR(120, 120)
*CursorOrigin: PAIR(100,6480)
}
}
}
}
Neste exemplo, as opções para o recurso PaperSize da impressora dependem da opção selecionada para o recurso Orientação da impressora.
Se você não listar todas as opções de um recurso como argumentos de instrução *Case, poderá incluir uma instrução *Default , assim como na linguagem C. Se não incluíres todas as opções e não incluíres um comando *Default, deves avaliar atributos relevantes (no exemplo, *PrintableArea, *PrintableOrigine *CursorOrigin) noutra parte do arquivo GPD, antes do comando *Switch.
Especificando várias dependências
Pode incluir instruções *Switch dentro das instruções *Case e *Default. Isso permite que você especifique várias dependências, da seguinte maneira:
*Feature: feature1 {*Option: optionA {...} *Option: optionB {...}}
*Feature: feature2 {*Option: optionC {...} *Option: optionD {...}}
*Feature: feature3
{*Option: optionE
{*Switch: feature1
{*Case: optionA
{*Switch: feature2
{*Case: optionD
{AttributeX: ValueX}
*Default
{AttributeX: ValueY}
}
}
*Default
{AttributeX: ValueZ}
}
}
*Option: optionF {...}
}
Neste exemplo, AttributeX, pertencente a optionE de feature3, depende de feature1 e feature2.
Se o usuário selecionou optionA para feature1, optionD para feature2 e optionE para feature3, attributeX será definido como ValueX.
Se o usuário selecionou optionA para feature1, optionC para feature2 e optionE para feature3, attributeX será definido como ValueY.
Se o usuário selecionou optionB para feature1 e optionE para feature3, attributeX será definido como ValueZ. A configuração do Feature2 é irrelevante.
As seguintes regras se aplicam ao especificar várias dependências:
Várias dependências devem ser especificadas dentro do escopo de uma única entrada de *Switch. Usando o exemplo, tu não podes usar uma entrada de *Switch para indicar que feature3 é dependente de feature1 e, posteriormente, numa instrução *Switch não aninhada, indicar que feature3 é dependente de feature2.
Não é possível especificar o mesmo recurso mais de uma vez em cada entrada aninhada *Switch.
Onde colocar uma Instrução *Switch
Você pode colocar uma instrução *Switch nos seguintes locais dentro de um ficheiro GPD:
Dentro de uma instrução *Option
Dentro de uma declaração *Funcionalidade
Dentro de uma *Declaração de caso
Dentro de uma *Default instrução
No nível superior do ficheiro (ou seja, não dentro de um bloco de chaves)
O que colocar dentro das instruções *switch, *case e *default
Dentro de uma entrada *Switch, pode apenas colocar entradas *Case e *Default.
As entradas de arquivo GPD que podem ser colocadas dentro das entradas *Case ou *Default, são referidas como entradas relocáveis. Os seguintes tipos de entradas GPD são realocáveis:
A maioria dos atributos impressora, exceto atributos somente de nível raiz. (Atributos gerais devem ser precedidos por EXTERN_GLOBAL a menos que a entrada *Switch esteja no nível raiz - não dentro de chaves.)
Entradas aninhadas de comutador, que permitem especificar várias dependências.
Entradas de comando.
*TTFSEnabled?, que permite a substituição de fontes.
Os seguintes tipos de entradas GPD não são realocáveis:
Atributos somente de nível raiz.
*Entradas TTFS para especificar a fonte substituída.
*Constraints, *InvalidCombination, *InvalidInstallableCombination, *NotInstalledConstraints são entradas que definem combinações inválidas de opções, conforme descrito em Option Constraints.
*Entradas de característica e *opção (embora os atributos de característica e os atributos de opção sejam realocáveis).
Um método para determinar se as entradas foram colocadas corretamente dentro das instruções *Case é remover todas as instruções *Switch e *Case. Se as entradas dentro das instruções *Case estiverem corretas, elas ainda estarão corretas depois que as instruções *Switch e *Case forem removidas.
Ordenação de instruções de interruptor em um driver de impressão V4 derivado de um driver de classe
O arquivo GPD do driver de impressora v4 derivado precisa seguir a mesma ordem que o driver de classe base.
Considere o seguinte cenário. Você tem um driver de impressora v4 que é derivado de um driver de classe v4 ao definir RequiredClass no driver de classe em um arquivo *-manifest.ini.
O arquivo GPD do driver de classe tem a seguinte árvore de switch:
* Option: A4
1. Switch: Resolution
* Option: Letter
1. Switch: Resolution
2. Switch: InputBin
O driver de impressora v4 derivado deseja adicionar o MarginSetting switch, para que seu arquivo GPD tenha a seguinte árvore de switch:
* Option: A4
1. Switch: Resolution
2. Switch: InputBin
3. Switch: MarginSetting
* Option: Letter
1. Switch: Resolution
2. Switch: InputBin
3. Switch: MarginSetting
Observe que de resolução é definido antes de InputBin no GPD derivado e MarginSetting é definido após ambos. O arquivo GPD do driver de impressora v4 derivado segue a mesma ordem do driver da classe base, adicionando MarginSetting no final.
Por exemplo, um arquivo GPD derivado incorretamente pode ter a seguinte aparência:
* Option: A4
1. Switch: MarginSetting
2. Switch: InputBin
3. Switch: Resolution
* Option: Letter
1. Switch: MarginSetting
2. Switch: InputBin
3. Switch: Resolution