Trabalhar com tickets de impressão | .NET

Esquema de Impressão

Os documentos XPS e o Modelo de Objecto XPS podem utilizar os objectos de ticket de impressão, descritos na Especificação do Esquema de Impressão, para especificar as preferências de impressão de um documento para impressoras e aplicações de visualização.

O Esquema de Impressão é um esquema baseado em XML, estruturado hierarquicamente e utilizado para organizar e descrever as propriedades de uma impressora ou de um trabalho de impressão. É constituído por dois componentes 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 uma coleção 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, denominada PrintTicket, é construída utilizando as palavras-chave do Print Schema, conforme especificado pelo Print Schema Framework. A especificação do Print Schema suporta extensões de esquema de terceiros, para que os utilizadores do Print Schema não fiquem restritos às 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 a instâncias de elementos 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 de Print Ticket em Aspose.Page para .NET

A API Aspose.Page para .NET inclui um conjunto de classes que encapsulam elementos definidos pelas palavras-chave do Print Schema. Uma vez que o número destas classes é bastante grande, este artigo aborda apenas algumas das técnicas mais comuns para manipular tickets de impressão num documento XPS utilizando a API Aspose.Page. Em primeiro lugar, iremos discutir a instanciação de cada classe de recurso que desejamos incluir no ticket de impressão. Em seguida, veremos como incluir estes recursos num ticket de impressão.

Como especificar o compartimento de entrada

A funcionalidade JobInputBin descreve 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 trabalho. 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 Print Ticket deve incluir apenas um dos três. Todos eles herdam da classe InputBin e têm construtores com a mesma assinatura, pelo que iremos utilizar o JobInputBin para efeitos de demonstração.

O código a seguir

1new JobInputBin(InputBin.InputBinOption.AutoSelect);

Cria uma funcionalidade para um ticket de impressão de trabalho 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, cada um dos quais serve 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 os especificar, deve primeiro 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 obter 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 da API do Aspose.Page.

Como especificar 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 conter as seguintes propriedades: OutputBin.BinType e OutputBin.MediaSheetCapacity. Assim, um recurso JobOutputBin pode ser construído da seguinte forma:

1new JobOutputBin(new OutputBin.OutputBinOption(OutputBin.BinType.Sorter),
2    new OutputBin.OutputBinOption(OutputBin.BinType.Stacker, new OutputBin.MediaSheetCapacity(100)));

Como especificar a orientação da página

A funcionalidade PageOrientation descreve a orientação da folha de suporte físico. As opções disponíveis estão listadas na secção de classe PageOrientation.PageOrientationOption da referência da API. Abaixo, um exemplo de como construir o recurso:

1new PageOrientation(PageOrientation.PageOrientationOption.Landscape);

Como especificar o 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. Todos os documentos de trabalho são duplexados de forma contígua.

JobDuplexAllDocumentsContiguously e DocumentDuplex são mutuamente exclusivos. Cabe ao driver determinar o tratamento de restrições entre estas palavras-chave. A última palavra-chave significa que cada documento de trabalho é duplexado separadamente.

Existem três opções 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 especificar 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 não pretender que o seu ficheiro seja duplexado, pode adicionar o seguinte recurso ao ticket de impressão:

1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.OneSided);

Como especificar 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 para esta funcionalidade: Color, Grayscale e Monochrome, cada uma com duas propriedades inteiras: DeviceBitsPerPixel e DriverBitsPerPixel.

Por exemplo, se pretender que a sua impressora a cores imprima um ficheiro XPS em escala de cinzentos, pode adicionar a seguinte funcionalidade ao ticket de impressão:

1new PageOutputColor(PageOutputColor.PageOutputColorOption.Grayscale(0, 8));

Como trabalhar com tickets de impressão de diferentes níveis

Se estiver a trabalhar com um ficheiro XPS criado por outra pessoa, poderá querer modificar o ticket de impressão, caso este esteja presente. Para obter um ticket de impressão ao nível da tarefa, basta utilizar a propriedade JobPrintTicket do objeto XpsDocument:

1JobPrintTicket pt = document.JobPrintTicket;

Para obter um ticket de impressão para um documento específico no 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 obter 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.

Após obter uma instância do ticket de impressão, se não for null, pode adicionar os seus recursos construídos como mostrado nas secções acima:

1pt.Add(<features>);

onde <features> é um array de tamanho variável de recursos apropriados para o ticket de impressão do nível específico. Se o bilhete de impressão antigo já contivesse alguns dos recursos que está a tentar adicionar, estes serão substituídos pelas novas instâncias.

Se não quiser modificar os tickets de impressão existentes, mas sim atribuir uma instância totalmente nova (o que também é o caso de um novo ficheiro XPS), para o ticket de impressão do nível de tarefa, deve utilizar novamente a propriedade JobPrintTicket:

1document.JobPrintTicket = new JobPrintTicket(<features>);

em que <recursos> é um conjunto de recursos de tamanho variável apropriados para o ticket de impressão do trabalho.

Caso pretenda atribuir um ticket de impressão a um documento específico dentro do ficheiro XPS, deverá ser utilizado o método SetDocumentPrintTicket():

1document.SetDocumentPrintTicket(<n>, new DocumentPrintTicket(<features>));

em que <n> é o número do documento dentro do ficheiro XPS e <features> é uma matriz de tamanho variável de características apropriadas para o ticket de impressão ao nível do documento.

Por fim, se 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 tamanho variável de características apropriadas 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 .NET:

 1// Create custom print ticket in XPS document.
 2
 3string outputFileName = "CreateCustomPrintTicket.xps";
 4
 5using (XpsDocument document = new XpsDocument())
 6{
 7    // Set a custom job-level print ticket
 8    document.JobPrintTicket = new JobPrintTicket(
 9        // Specify input bin.
10        new JobInputBin(InputBin.InputBinOption.Manual.Clone().Add(
11            InputBin.FeedFace.FaceDown, InputBin.FeedDirection.LongEdgeFirst, new InputBin.MediaSheetCapacity(100))),
12        // Specify output bin.
13        new JobOutputBin(new OutputBin.OutputBinOption(OutputBin.BinType.Sorter),
14            new OutputBin.OutputBinOption(OutputBin.BinType.Stacker, new OutputBin.MediaSheetCapacity(100))),
15        // Specify page orientation.
16        new PageOrientation(PageOrientation.PageOrientationOption.Landscape),
17        // Specify duplex mode fof the output.
18        new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.TwoSidedLongEdge(Duplex.DuplexMode.Automatic)),
19        // Specify the color settings for the output.
20        new PageOutputColor(PageOutputColor.PageOutputColorOption.Grayscale(0, 8)));
21
22    // Save the document with the custom job-level print ticket.
23    document.Save(OutputDir + outputFileName);
24}

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.