filter - interface de filtros de conversão de ficheiros do cups
filter job user title num-copies
options [
filename ]
#include <cups/cups.h>
ssize_t cupsBackChannelRead(char *buffer, size_t bytes,
double timeout);
cups_sc_status_t cupsSideChannelDoRequest(cups_sc_command_t command,
char *data, int *datalen,
double timeout);
#include <cups/ppd.h>
const char *cupsGetOption(const char *name, int num_options,
cups_option_t *options);
int cupsMarkOptions(ppd_file_t *ppd, int num_options,
cups_option_t *options);
int cupsParseOptions(const char *arg, int num_options,
cups_option_t **options);
ppd_choice_t *ppdFindMarkedChoice(ppd_file_t *ppd, const char *keyword);
void ppdMarkDefaults(ppd_file_t *ppd);
ppd_file_t *ppdOpenFile(const char *filename);
A interface de filtros do CUPS fornece um método standard para adicionar
suporte para novos tipos de documentos ou impressoras ao CUPS. Cada filtro
é capaz de converter de um ou mais formatos de entrada para outro
formato que pode ser ou imprimido diretamente ou canalizado para outro filtro
para o tornar num formato imprimível.
Filtros
DEVEM ser capazes de ler a partir de um nome de ficheiro na linha
de comandos ou a partir da entrada standard, copiando a entrada standard para
um ficheiro temporário como requerido pelo formato do ficheiro. Todas
as saídas
DEVEM ser enviadas para a saída standard.
Filters
NÃO DEVEM tentar comunicar diretamente com a impressora,
outros processos, ou outros serviços.
O nome de comando (
argv[0]) é definido para o nome da impressora
de destino mas está também disponível na
variável de ambiente PRINTER.
As opções são passadas em
argv[5] e são
codificadas a partir dos atributos IPP correspondentes usados quando o
trabalho foi submetido. Use a função
cupsParseOptions()
para carregar as opções numa matriz
cups_option_t e a
função
cupsGetOption() para obter o valor de um atributo
específico. Tenha atenção aos nomes alternativos comuns
de atributos IPP tais como "landscape" para o atributo IPP
"orientation-requested".
As opções passadas na linha de comandos tipicamente não
incluem as escolhas predefinidas do ficheiro PPD da impressora. Use as
funções
ppdMarkDefaults() e
cupsMarkOptions() da
biblioteca do CUPS para aplicar as opções às
predefinições do PPD e mapear quaisquer atributos IPP às
opções PPD correspondentes. Use
ppdFindMarkedChoice()
para obter a escolha de selecção-de-utilizador para uma
opção PPD. Por exemplo, um filtro pode usar o seguinte
código para determinar o valor actual da opção PPD
Duplex.
ppd_file_t *ppd = ppdOpenFile(getenv("PPD"));
cups_option_t *options = NULL;
int num_options = cupsParseOptions(argv[5], 0, &options);
ppdMarkDefaults(ppd);
cupsMarkOptions(ppd, num_options, options);
ppd_choice_t *choice = ppdFindMarkedChoice(ppd, "Duplex");
Os filtros raster devem usar um conjunto de escolhas de opção
através do cabeçalho de página raster, pois esses
refletem as opções em efeito para uma determinada página.
As opções especificadas na linha de comandos determinam os
valores predefinidos para o trabalho inteiro, as quais podem ser sobrepostas
numa base de por-cada-página.
As mensagens enviadas para o erro standard são geralmente armazenadas no
atributo "printer-state-message" da impressora e no ficheiro
ErrorLog actual. Cada linha começa com, um prefixo standard:
-
ALERT: message
- Define o atributo "printer-state-message" e
adiciona a mensagem especificada ao ErrorLog actual usando o
nível de log "alert".
-
ATTR: attribute=value [ ...
attribute=value]
- Define o atributo(s) de trabalho ou impressora nomeada. Os
seguintes atributos de trabalho podem ser definidos:
"job-media-progress". Os seguintes atributos de impressora podem
ser definidos: "auth-info-required", "marker-colors",
"marker-high-levels", "marker-levels",
"marker-low-levels", "marker-message",
"marker-names", "marker-types",
"printer-alert", e "printer-alert-description".
-
CRIT: message
- Define o atributo "printer-state-message" e
adiciona a mensagem especificada ao ErrorLog actual usando o
nível de log "critical".
-
DEBUG: message
- Adiciona a mensagem especificada ao ErrorLog actual
usando o nível de log "debug". As mensagens DEBUG
nunca são armazenadas no atributo
"printer-state-message".
-
DEBUG2: message
-
Adiciona a mensagem especificada ao ErrorLog actual usando o
nível de log "debug2". As mensagens DEBUG2 nunca
são armazenadas no atributo "printer-state-message".
-
EMERG: message
- Define o atributo "printer-state-message" e
adiciona a mensagem especificada ao ErrorLog actual usando o
nível de log "emergency".
-
ERROR: message
- Define o atributo "printer-state-message" e
adiciona a mensagem especificada ao ErrorLog actual usando o
nível de log "error".
-
INFO: message
- Define o atributo "printer-state-message". Se o
LogLevel actual estiver definido para "debug2",
também adiciona a mensagem especificada ao ErrorLog usando o
nível de log "info".
-
NOTICE: message
- Define o atributo "printer-state-message" e
adiciona a mensagem especificada ao ErrorLog actual usando o
nível de log "notice".
-
PAGE: page-number #-copies
-
PAGE: total #-pages
- Adiciona a entrada ao PageLog actual. A primeira
forma adiciona #-copies ao atributo
"job-media-sheets-completed". A segunda forma define o atributo
"job-media-sheets-completed" para #-pages.
-
PPD: Keyword=Value [ ...
KeywordN=Value ]
- Define a palavra chave nomeada no ficheiro PPD da
impressora. Isto é usado tipicamente pare atualizar palavras chave
de opção predefinida como a DefaultPageSize e as
várias opções instaláveis no ficheiro
PPD.
-
STATE: printer-state-reason [ ...
printer-state-reason ]
-
STATE: + printer-state-reason [ ...
printer-state-reason ]
-
STATE: - printer-state-reason [ ...
printer-state-reason ]
- Define, adiciona, ou remove palavras chave
"printer-state-reason" para a fila actual. Tipicamente isto
é usado para indicar condições de média, tinta
e toner numa impressora.
-
WARNING: message
- Define o atributo "printer-state-message" e
adiciona a mensagem especificada ao ErrorLog actual usando o
nível de log "warning".
As seguintes variáveis de ambiente são definidas pelo servidor
CUPS quando se executa o filtro:
- CHARSET
- O conjunto de caracteres de texto predefinido, tipicamente
"utf-8".
- CLASS
- Quando um trabalho é submetido para uma classe de
impressora, contém o nome da classe de impressora de destino. Caso
contrário esta variável de ambiente não será
definida.
- CONTENT_TYPE
- O tipo de média MIME associado com o ficheiro de
trabalho submetido, por exemplo "application/postscript".
- CUPS_CACHEDIR
- O directório onde ficheiros de cache
semi-persistentes podem ser encontrados e armazenados.
- CUPS_DATADIR
- O directório onde podem ser encontrados ficheiros de
dados.
- CUPS_FILETYPE
- O tipo de ficheiro a ser imprimido: "job-sheet"
para uma página banner e "document" para um ficheiro de
impressão regular.
- CUPS_MAX_MESSAGE
- O tamanho máximo de uma mensagem enviada para
stderr, incluindo qualquer prefixo inicial e o indício de
nova linha final.
- CUPS_SERVERROOT
- O directório raiz do servidor.
- FINAL_CONTENT_TYPE
- O tipo de média MIME associado com a saída
destinada à impressora, por exemplo
"application/vnd.cups-postscript".
- LANG
- O locale de idioma predefinido (tipicamente C ou en).
- PATH
- O caminho de execução standard para programas
externos que podem ser corridos pelo filtro.
- PPD
- O nome de caminho completo do ficheiro PostScript Printer
Description (PPD) para esta impressora.
- PRINTER
- O nome da impressora.
- RIP_CACHE
- A quantidade de memória recomendada a usar para
Raster Image Processors (RIPs).
- SOFTWARE
- O nome e número de versão do servidor
(tipicamente CUPS/ maior.menor).
- TZ
- A zona horária do servidor.
- USER
- O utilizador que executa o filtro, tipicamente
"lp" ou "root"; consulte o ficheiro
cups-files.conf para a definição actual.
Apesar da interface do filtro ser compatível com scripts de interface do
System V, o CUPS não suporta scripts de interface System V.
Drivers de impressoras e backends do CUPS estão descontinuados e
não irão ser mais suportados num futuro lançamento do
CUPS. Impressoras que não suportem IPP podem ser suportadas usando
aplicações como a
ippeveprinter(1).
Os filtros do CUPS não se destinam a ser corridos diretamente pelo
utilizador. Além dos problemas com a interface antiga do System V (
argv[0] é o nome da impressora), os filtros do CUPS
também esperam variáveis de ambiente específicas e
descritores de ficheiro, e tipicamente correm numa sessão de utilizador
que (no macOS) tem restrições adicionais que afectam como eles
correm. A menos que você seja um desenvolvedor e saiba o que
está a fazer, por favor não corra os filtros diretamente. Em vez
disso, use o programa
cupsfilter(8) para usar os filtros apropriados
para as conversões que você precisa.
backend(7),
cups(1),
cups-files.conf(5),
cupsd(8),
cupsfilter(8),
Ajuda Online do CUPS (http://localhost:631/help)
Copyright © 2021-2022 de OpenPrinting.