Imprimindo documentos em Aspose.Words para Java

Se você deseja imprimir documentos usando Aspose.Words for Java, você está no lugar certo. Neste guia passo a passo, orientaremos você no processo de impressão de documentos com Aspose.Words for Java usando o código-fonte fornecido.

Introdução

Imprimir documentos é uma tarefa comum em muitas aplicações. Aspose.Words for Java fornece uma API poderosa para trabalhar com documentos do Word, incluindo a capacidade de imprimi-los. Neste tutorial, orientaremos você passo a passo no processo de impressão de um documento Word.

Configurando seu ambiente

Antes de mergulharmos no código, certifique-se de ter os seguintes pré-requisitos em vigor:

  • Kit de desenvolvimento Java (JDK) instalado
  • Biblioteca Aspose.Words para Java baixada e adicionada ao seu projeto

Carregando o documento

Para começar, você precisará carregar o documento do Word que deseja imprimir. Substituir"Your Document Directory" com o caminho para o seu documento e"Your Output Directory" com o diretório de saída desejado.

string dataDir = "Your Document Directory";
string outPath = "Your Output Directory";
Document doc = new Document(dataDir + "Rendering.docx");

Criando um trabalho de impressão

A seguir, criaremos um trabalho de impressão para imprimir nosso documento carregado. O trecho de código abaixo inicializa um trabalho de impressão e define as configurações desejadas da impressora.

// Crie um trabalho de impressão para imprimir nosso documento.
PrinterJob pj = PrinterJob.getPrinterJob();
//Inicialize um conjunto de atributos com o número de páginas do documento.
PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
attributes.add(new PageRanges(1, doc.getPageCount()));
// Passe as configurações da impressora junto com os demais parâmetros para o documento de impressão.
MultipagePrintDocument awPrintDoc = new MultipagePrintDocument(doc, 4, true, attributes);

Imprimindo o Documento

Agora que configuramos nosso trabalho de impressão, é hora de imprimir o documento. O trecho de código a seguir associa o documento ao trabalho de impressão e inicia o processo de impressão.

// Passe o documento a ser impresso utilizando o trabalho de impressão.
pj.setPrintable(awPrintDoc);
pj.print();

Código fonte completo

string dataDir = "Your Document Directory";
Document doc = new Document(dataDir + "Rendering.docx");
// Crie um trabalho de impressão para imprimir nosso documento.
PrinterJob pj = PrinterJob.getPrinterJob();
//Inicialize um conjunto de atributos com o número de páginas do documento.
PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
attributes.add(new PageRanges(1, doc.getPageCount()));
// Passe as configurações da impressora junto com os demais parâmetros para o documento de impressão.
MultipagePrintDocument awPrintDoc = new MultipagePrintDocument(doc, 4, true, attributes);
// Passe o documento a ser impresso utilizando o trabalho de impressão.
pj.setPrintable(awPrintDoc);
pj.print();

Código fonte de MultipagePrintDocument

class MultipagePrintDocument implements Printable
{
    private final Document mDocument;
    private final int mPagesPerSheet;
    private final boolean mPrintPageBorders;
    private final AttributeSet mAttributeSet;
    /// <resumo>
    /// O construtor da classe PrintDocument personalizada.
    // / </resumo>
    public MultipagePrintDocument(Document document, int pagesPerSheet, boolean printPageBorders,
                                  AttributeSet attributes) {
        if (document == null)
            throw new IllegalArgumentException("document");
        mDocument = document;
        mPagesPerSheet = pagesPerSheet;
        mPrintPageBorders = printPageBorders;
        mAttributeSet = attributes;
    }
    public int print(Graphics g, PageFormat pf, int page) {
        // Os índices de início e fim da página conforme definidos no conjunto de atributos.
        int[][] pageRanges = ((PageRanges) mAttributeSet.get(PageRanges.class)).getMembers();
        int fromPage = pageRanges[0][0] - 1;
        int toPage = pageRanges[0][1] - 1;
        Dimension thumbCount = getThumbCount(mPagesPerSheet, pf);
        // Calcule o índice da página que será renderizado a seguir.
        int pagesOnCurrentSheet = (int) (page * (thumbCount.getWidth() * thumbCount.getHeight()));
        // Se o índice da página for maior que o intervalo total de páginas, não haverá nada
        // mais para renderizar.
        if (pagesOnCurrentSheet > (toPage - fromPage))
            return Printable.NO_SUCH_PAGE;
        // Calcule o tamanho de cada espaço reservado para miniatura em pontos.
        Point2D.Float thumbSize = new Point2D.Float((float) (pf.getImageableWidth() / thumbCount.getWidth()),
                (float) (pf.getImageableHeight() / thumbCount.getHeight()));
        // Calcule o número da primeira página a ser impressa nesta folha de papel.
        int startPage = pagesOnCurrentSheet + fromPage;
        // Selecione o número da última página a ser impressa nesta folha de papel.
        int pageTo = Math.max(startPage + mPagesPerSheet - 1, toPage);
        //Percorra as páginas selecionadas da página atual armazenada até a página calculada
        // última página.
        for (int pageIndex = startPage; pageIndex <= pageTo; pageIndex++) {
            // Calcule os índices de colunas e linhas.
            int rowIdx = (int) Math.floor((pageIndex - startPage) / thumbCount.getWidth());
            int columnIdx = (int) Math.floor((pageIndex - startPage) % thumbCount.getWidth());
            // Defina a localização da miniatura nas coordenadas mundiais (pontos neste caso).
            float thumbLeft = columnIdx * thumbSize.x;
            float thumbTop = rowIdx * thumbSize.y;
            try {
                // Calcule as posições iniciais esquerda e superior.
                int leftPos = (int) (thumbLeft + pf.getImageableX());
                int topPos = (int) (thumbTop + pf.getImageableY());
                // Renderize a página do documento no objeto Graphics usando coordenadas calculadas
                // e tamanho do espaço reservado para miniaturas.
                // O valor de retorno útil é a escala na qual a página foi renderizada.
                float scale = mDocument.renderToSize(pageIndex, (Graphics2D) g, leftPos, topPos, (int) thumbSize.x,
                        (int) thumbSize.y);
                // Desenhe as bordas da página (a miniatura da página pode ser menor que a miniatura
                // tamanho do espaço reservado).
                if (mPrintPageBorders) {
                    // Obtenha o tamanho real de 100% da página em pontos.
                    Point2D.Float pageSize = mDocument.getPageInfo(pageIndex).getSizeInPoints();
                    // Desenhe a borda ao redor da página dimensionada usando o fator de escala conhecido.
                    g.setColor(Color.black);
                    g.drawRect(leftPos, topPos, (int) (pageSize.x * scale), (int) (pageSize.y * scale));
                    // Desenhe a borda ao redor do espaço reservado para miniaturas.
                    g.setColor(Color.red);
                    g.drawRect(leftPos, topPos, (int) thumbSize.x, (int) thumbSize.y);
                }
            } catch (Exception e) {
                // Se ocorrer algum erro durante a renderização, não faça nada.
                // Isso desenhará uma página em branco se houver algum erro durante a renderização.
            }
        }
        return Printable.PAGE_EXISTS;
    }
    private Dimension getThumbCount(int pagesPerSheet, PageFormat pf) {
        Dimension size;
        // Defina o número de colunas e linhas na planilha para o
        //Papel orientado para paisagem.
        switch (pagesPerSheet) {
            case 16:
                size = new Dimension(4, 4);
                break;
            case 9:
                size = new Dimension(3, 3);
                break;
            case 8:
                size = new Dimension(4, 2);
                break;
            case 6:
                size = new Dimension(3, 2);
                break;
            case 4:
                size = new Dimension(2, 2);
                break;
            case 2:
                size = new Dimension(2, 1);
                break;
            default:
                size = new Dimension(1, 1);
                break;
        }
        // Troque a largura e a altura se o papel estiver na orientação Retrato.
        if ((pf.getWidth() - pf.getImageableX()) < (pf.getHeight() - pf.getImageableY()))
            return new Dimension((int) size.getHeight(), (int) size.getWidth());
        return size;
	}
}

Conclusão

Parabéns! Você imprimiu com sucesso um documento do Word usando Aspose.Words for Java. Este guia passo a passo deve ajudá-lo a integrar perfeitamente a impressão de documentos em seus aplicativos Java.

Perguntas frequentes

Q1: Posso imprimir páginas específicas de um documento usando Aspose.Words for Java?

Sim, você pode especificar o intervalo de páginas ao imprimir um documento. No exemplo de código, usamosattributes.add(new PageRanges(1, doc.getPageCount())) para imprimir todas as páginas. Você pode ajustar o intervalo de páginas conforme necessário.

Q2: O Aspose.Words for Java é adequado para impressão em lote?

Absolutamente! Aspose.Words for Java é adequado para tarefas de impressão em lote. Você pode percorrer uma lista de documentos e imprimi-los um por um usando um código semelhante.

Q3: Como posso lidar com erros ou exceções de impressão?

Você deve lidar com quaisquer possíveis exceções que possam ocorrer durante o processo de impressão. Verifique a documentação do Aspose.Words for Java para obter informações sobre como lidar com exceções.

P4: Posso personalizar ainda mais as configurações de impressão?

Sim, você pode personalizar as configurações de impressão para atender às suas necessidades específicas. Explore a documentação do Aspose.Words for Java para saber mais sobre as opções de impressão disponíveis.

P5: Onde posso obter mais ajuda e suporte para Aspose.Words for Java?

Para obter suporte e assistência adicionais, você pode visitar oFórum Aspose.Words para Java.


Agora que você aprendeu com sucesso como imprimir documentos usando Aspose.Words for Java, você pode começar a implementar essa funcionalidade em seus aplicativos Java. Boa codificação!