Печать объекта ByteArrayOutputStream - PullRequest
0 голосов
/ 09 мая 2018

У меня есть сгенерированный PDF-документ с использованием библиотеки iText, затем я сохранил документ в памяти, используя ByteArrayOutputStream, чтобы распечатать его, но он ничего не печатает. Любая идея о том, почему это не печать? Вы можете найти код ниже и спасибо заранее.

    ByteArrayOutputStream byteArr = new ByteArrayOutputStream();
    Document document = new Document();
    PdfWriter.getInstance(document, byteArr);
    document.open();

    /*
    * Adding data and tables to the document
    */

    document.close();

    DocFlavor docType = DocFlavor.BYTE_ARRAY.AUTOSENSE;    
    byte[] byteStream = byteArr.toByteArray();// fetch content in byte array;
    // byteArr is the ByteArrayOutputStream object
    // Tried using InputStream but did not work as well.

    Doc documentToBePrinted = new SimpleDoc(byteStream, docType, null);
    PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();  
    PrintService services = PrintServiceLookup.lookupDefaultPrintService();               
    DocPrintJob job = services.createPrintJob();  
    try {  
    job.print(documentToBePrinted, aset);
    System.out.println("Donee");

    } 
    catch (Exception pe)
    {
     pe.printStackTrace();

    } 

    byteArr = null;


}

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Возможно, используемый вами принтер не поддерживает PDF напрямую. Попробуйте использовать PDFBox для печати документа. Я сделал небольшой проект Maven, чтобы проверить его, и он работает для меня:

Main.java:

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPageable;

import javax.print.*;
import java.awt.print.PrinterJob;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

class Main {
    public static void main(String[] args) throws DocumentException, IOException {
        ByteArrayOutputStream byteArr = new ByteArrayOutputStream();
        Document pdfDocument = new Document();
        PdfWriter.getInstance(pdfDocument, byteArr);
        pdfDocument.open();
        pdfDocument.add(new Paragraph("Hello World!"));
        pdfDocument.close();

        byte[] byteStream = byteArr.toByteArray();// fetch content in byte array;
        PrintService services = PrintServiceLookup.lookupDefaultPrintService();
        PrinterJob job = PrinterJob.getPrinterJob();
        PDDocument pdDocument = null;
        try {
            pdDocument = PDDocument.load(byteStream);
            job.setPageable(new PDFPageable(pdDocument));
            job.setPrintService(services);
            job.print();
            System.out.println("Done");

        } catch (Exception pe) {
            pe.printStackTrace();

        } finally {
            if (pdDocument != null) {
                pdDocument.close();
            }
        }


    }
}

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>it.fortytwoapps</groupId>
    <artifactId>so-50249273</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13</version>
        </dependency>

        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.9</version>
        </dependency>
    </dependencies>
</project>
0 голосов
/ 09 мая 2018

Не имея возможности запустить свой код, на этот вопрос нелегко ответить.

Возможная проблема в том, что вы не закрываете класс PdfDocument. В результате базовые ресурсы не освобождаются, а байты не очищаются.

В результате создается недействительный (иногда даже пустой) документ PDF, который, конечно, принтер не будет (или не может) печатать.

Если вы можете сохранить PDF-файл и он правильно отображается в средстве просмотра, то, скорее всего, вы что-то делаете неправильно в печатной части приложения.

...