Manipular tickets de impressão | Java
Introdução ao Esquema de Impressão
Os documentos XPS e o Modelo de Objecto XPS podem utilizar os objectos de ticket de impressão, que são apresentados na Especificação do Esquema de Impressão, para definir as preferências de impressão de um documento para impressoras e aplicações de visualização.
O Esquema de Impressão é um esquema hierárquico baseado em XML utilizado para organizar e descrever as propriedades da impressora ou do trabalho de impressão. É composto por duas partes principais: as Palavras-chave do Esquema de Impressão e a Estrutura do Esquema de Impressão. As Palavras-chave do Esquema de Impressão são instâncias de elementos que descrevem os atributos da impressora e a intenção de formatação do trabalho de impressão, enquanto a Estrutura do Esquema de Impressão define um conjunto de tipos de elementos XML numa estrutura hierárquica e especifica como estes tipos de elementos podem ser utilizados em conjunto.
A tecnologia Print Schema, conhecida como PrintTicket, é construída utilizando as palavras-chave do Print Schema, conforme especificado pelo Print Schema Framework. A especificação do Print Schema permite extensões de esquema por terceiros, permitindo aos utilizadores do Print Schema ir além das instâncias de Property, Feature, Option ou ParameterInit definidas pelas palavras-chave do Print Schema. As instâncias de elementos de terceiros podem ser adicionadas às definidas pelas palavras-chave do Print Schema; no entanto, as instâncias privadas de Property de terceiros devem pertencer a um namespace claramente associado ao terceiro que criou o namespace.
Suporte para Print Ticket no Aspose.Page para Java
A API Aspose.Page for Java contém um conjunto de classes que encapsulam elementos definidos pelas palavras-chave do Print Schema. Devido ao número significativo destas classes, neste artigo, iremos apenas discutir algumas das técnicas mais comuns para manipular tickets de impressão num documento XPS utilizando a API Aspose.Page. Começaremos por discutir a instanciação de cada classe de recursos que desejamos incluir no ticket de impressão, seguindo-se uma demonstração de como incorporar esses recursos num ticket de impressão.
Especificando o compartimento de entrada
A funcionalidade JobInputBin identifica o compartimento de entrada instalado num dispositivo ou a lista completa de compartimentos suportados para um dispositivo. Permite a especificação do compartimento de entrada por tarefa. Existem ainda as funcionalidades DocumentInputBin e PageInputBin que permitem a especificação do compartimento de entrada por documento e por página, respectivamente. Qualquer documento de ticket de impressão deve incluir apenas um dos três recursos. Todos eles são derivados da classe InputBin e têm construtores com a mesma assinatura, pelo que utilizaremos o JobInputBin para efeitos de demonstração.
A linha de código Java
1new JobInputBin(InputBin.InputBinOption.AutoSelect);
Produz uma funcionalidade para um ticket de impressão ao nível da tarefa que instrui um dispositivo de impressão a escolher automaticamente a melhor opção com base na configuração.
A classe
InputBin.InputBinOption define campos estáticos que servem de base para várias opções de compartimento de entrada. Cada opção pode conter propriedades adicionais como
InputBin.BinType,
InputBin.FeedDirection,
InputBin.FeedFace,
InputBin.FeedType,
InputBin.MediaCapacity,
InputBin.MediaPath,
InputBin.MediaSizeAutoSense,
InputBin.MediaTypeAutoSense e
InputBin.MediaSheetCapacity. Para especificar estas propriedades, deve clonar a propriedade base e, em seguida, chamar o método add()
com uma lista das propriedades pretendidas:
1new JobInputBin(InputBin.InputBinOption.Manual.clone().add(
2 InputBin.FeedFace.FaceDown, InputBin.FeedDirection.LongEdgeFirst, new InputBin.MediaSheetCapacity(100)));
Para visualizar a lista completa dos valores de propriedade disponíveis, consulte a Especificação do Esquema de Impressão e a secção relevante da referência API do Aspose.Page.
Especificando o compartimento de saída
A funcionalidade
JobOutputBin descreve o compartimento de saída instalado num dispositivo ou a lista completa de compartimentos suportados para um dispositivo. As palavras-chave JobOutputBin
,
DocumentOutputBin e
PageOutputBin são mutuamente exclusivas; apenas uma deve ser especificada num único ticket de impressão.
Cada opção pode incluir as propriedades
OutputBin.BinType e
OutputBin.MediaSheetCapacity. Assim sendo, um recurso JobOutputBin
pode ser instanciado da seguinte forma:
1new JobOutputBin(new OutputBin.OutputBinOption(OutputBin.BinType.Sorter),
2 new OutputBin.OutputBinOption(OutputBin.BinType.Stacker, new OutputBin.MediaSheetCapacity(100)));
Especificando a orientação da página
A funcionalidade PageOrientation define a orientação da folha de suporte físico. A lista de opções disponíveis pode ser encontrada na secção da classe PageOrientation.PageOrientationOption da referência da API. Veja um exemplo de como produzir uma instância deste recurso:
1new PageOrientation(PageOrientation.PageOrientationOption.Landscape);
Especificação do modo duplex para a saída
A funcionalidade
JobDuplexAllDocumentsContiguously descreve as características duplex da saída. A funcionalidade duplex permite a impressão em ambos os lados dos suportes, com todos os documentos de trabalho a serem duplexados juntos de forma contígua. JobDuplexAllDocumentsContiguously
e
DocumentDuplex são mutuamente exclusivos, cabendo ao driver determinar como as restrições são tratadas entre estas palavras-chave. A última palavra-chave significa que cada documento de trabalho é duplexado separadamente.
Existem
três opções disponíveis para esta funcionalidade: OneSided
, twoSidedLongEdge
e twoSidedShortEdge
. A primeira não tem propriedades e as outras duas estão parametrizadas com
Duplex.DuplexMode.
Por exemplo, se pretender indicar a impressão frente e verso para o seu ficheiro XPS de modo a que a página seja virada paralelamente à MediaSizeHeight, faça o seguinte:
1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.twoSidedLongEdge(Duplex.DuplexMode.Automatic));
Se preferir a impressão unilateral, pode incluir a seguinte funcionalidade no ticket de impressão:
1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.OneSided);
Especificando as definições de cor para a saída
A funcionalidade
PageOutputColor descreve as características das definições de cor para a saída. Existem três opções disponíveis para esta funcionalidade: Color
, Grayscale
e Monochrome
, cada uma com duas propriedades inteiras: DeviceBitsPerPixel
e DriverBitsPerPixel
.
Se, por exemplo, pretender que a sua impressora a cores imprima um ficheiro XPS em escala de cinzentos, pode incluir a seguinte funcionalidade no ticket de impressão:
1new PageOutputColor(PageOutputColor.PageOutputColorOption.Grayscale(0, 8));
Trabalhar com tickets de impressão de diferentes níveis
Se estiver a trabalhar com um ficheiro XPS criado por outra pessoa, poderá ter de ajustar o ticket de impressão, caso este esteja presente. Para recuperar um ticket de impressão ao nível da tarefa, basta chamar o método
getJobPrintTicket() do objeto XpsDocument
:
1JobPrintTicket pt = document.getJobPrintTicket();
Para recuperar um ticket de impressão para um documento específico dentro do ficheiro XPS, deve utilizar o método getDocumentPrintTicket():
1DocumentPrintTicket pt = document.getDocumentPrintTicket(<n>);
em que <n>
é o número do documento no ficheiro XPS.
Para recuperar um ticket de impressão para uma página específica no ficheiro XPS, deve utilizar o método getPagePrintTicket():
1PagePrintTicket pt = document.getPagePrintTicket(<m>, <n>);
em que <m>
é o número do documento no ficheiro XPS e <n>
é o número da página no m-ésimo documento.
Depois de recuperar uma instância de ticket de impressão e esta não for igual a null
, pode adicionar as suas características construídas como mostrado nas secções acima:
1pt.add(<features>);
onde <features>
é um array de tamanho variável de recursos adequados para o ticket de impressão do nível específico. Se o bilhete de impressão antigo já contiver alguns dos recursos que está a tentar adicionar, estes serão substituídos pelas novas instâncias.
Se preferir não modificar os tickets de impressão existentes, mas atribuir uma instância totalmente nova, como é o caso com um novo ficheiro XPS, para o ticket de impressão de nível de tarefa, deve utilizar o método setJobPrintTicket():
1document.setJobPrintTicket(new JobPrintTicket(<features>));
onde <features>
é uma matriz de características de comprimento variável adequada para o ticket de impressão ao nível da tarefa.
Se pretender atribuir um ticket de impressão a um documento específico dentro do ficheiro XPS, utilize o método setDocumentPrintTicket():
1document.setDocumentPrintTicket(<n>, new DocumentPrintTicket(<features>));
Aqui, <n>
representa o número do documento dentro do ficheiro XPS, e <features>
é uma matriz de características de tamanho variável adequada para o ticket de impressão ao nível do documento.
Por fim, no caso de pretender atribuir um ticket de impressão a uma página específica dentro do ficheiro XPS, deve utilizar o método setPagePrintTicket():
1document.setPagePrintTicket(<m>, <n>, new PagePrintTicket(<features>));
em que <m>
é o número do documento no ficheiro XPS, <n>
é o número da página no m-ésimo documento e <features>
é uma matriz de características de tamanho variável adequada para o ticket de impressão ao nível da página.
Abaixo está o exemplo de código completo para o ticket de impressão ao nível da tarefa do projeto de exemplo Aspose.Page para Java:
1// For complete examples and data files, please go to https://github.com/aspose-page/Aspose.Page-for-Java
2// The path to the documents directory.
3String dataDir = Utils.getDataDir();
4
5// Create new XPS document
6final XpsDocument document = new XpsDocument();
7try {
8 // Set a custom job-level print ticket
9 document.setJobPrintTicket(new JobPrintTicket(
10 // Specify input bin.
11 new JobInputBin(InputBin.InputBinOption.Manual.clone().add(
12 InputBin.FeedFace.FaceDown, InputBin.FeedDirection.LongEdgeFirst, new InputBin.MediaSheetCapacity(100))),
13 // Specify output bin.
14 new JobOutputBin(new OutputBin.OutputBinOption(OutputBin.BinType.Sorter),
15 new OutputBin.OutputBinOption(OutputBin.BinType.Stacker, new OutputBin.MediaSheetCapacity(100))),
16 // Specify page orientation.
17 new PageOrientation(PageOrientation.PageOrientationOption.Landscape),
18 // Specify duplex mode fof the output.
19 new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.twoSidedLongEdge(Duplex.DuplexMode.Automatic)),
20 // Specify the color settings for the output.
21 new PageOutputColor(PageOutputColor.PageOutputColorOption.Grayscale(0, 8))));
22
23 // Save the document with the custom job-level print ticket.
24 document.save(dataDir + "output1.xps");
25} finally {
26 if (document != null)
27 document.close();
28}