Java - невозможно распечатать изображение (на бумаге / принтере) - PullRequest
3 голосов
/ 23 сентября 2011

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

Имя документа: Печать изображения Статус: [Ничего] Страницы :1, Размер: 2.1Mb.

Этого не происходит с другими приложениями, использующими тот же принтер (слово и т. Д.).

Может ли кто-нибудь показать мнегде моя ошибка?Спасибо.

public static void main(String[] args) {
    //new Painter();

    MediaTracker tracker = new MediaTracker(new JPanel());

    try {
        Image img = ImageIO.read(new File(
            "C:\\Users\\David\\Desktop\\print.jpg"));
        tracker.addImage(img, 1);
        tracker.waitForAll();
        print(img);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

private static void print(final Image img) {
    PrinterJob printjob = PrinterJob.getPrinterJob();
    printjob.setJobName("Print");

    ImgPrinter printable = new ImgPrinter(img);

    try {
        System.out.println("Printing.");
        printable.printPage();
    } catch (PrinterException ex) {
        System.out.println("NO PAGE FOUND." + ex);
    }
}

private static class ImgPrinter implements Printable {

    Image img;

    public ImgPrinter(Image img) {
        this.img = img;
    }

    public int print(Graphics pg, PageFormat pf, int pageNum) {
        if (pageNum != 0) {
            return Printable.NO_SUCH_PAGE;
        }

        //BufferedImage bufferedImage = new BufferedImage(img.getWidth(null),
        //img.getHeight(null), BufferedImage.TYPE_INT_RGB);
        //bufferedImage.getGraphics().drawImage(img, 0, 0, null);

        Graphics2D g2 = (Graphics2D) pg;
        g2.translate(pf.getImageableX(), pf.getImageableY());
        g2.drawImage(img, 0, 0, img.getWidth(null), img.getHeight(null), null);
        return Printable.PAGE_EXISTS;
    }

    public void printPage() throws PrinterException {
        PrinterJob job = PrinterJob.getPrinterJob();
        boolean ok = job.printDialog();
        if (ok) {
            job.setJobName("TEST JOB");
            job.setPrintable(this);
            job.print();
        }
    }
}

Снимок экрана:

Это происходит как с аппаратными, так и с программными принтерами (XPS Writer, CutePDF, принтер Canon).Аппаратное обеспечение показывает «готовится ..» на его экране навсегда, и я думаю, что оно потратило впустую все его чернила, я не уверен.Если это так, этот код был дорогим для тестирования ....

Ни один из этих принтеров не дает проблемы при печати из текстового документа или иным способом.

Редактировать: Может кто-нибудь предложить программный принтерон или она были успешны с?

Нажмите здесь для изображения, которое я пытаюсь напечатать .

Нажмите здесь, чтобы увидеть очередь печати .

1 Ответ

2 голосов
/ 23 сентября 2011

Я только что провел быстрый тест, и он отлично работает для меня. Мне удалось распечатать изображение PNG.

Скорее всего, что-то не так с вашим принтером.

Вы пытались распечатать документ Word, используя опцию печати Word.

Есть ли несколько принтеров, назначенных вашей машине? Можете попробовать перезагрузить принтер? Перезагрузить машину?

Вы могли бы реализовать диалоговое окно печати, чтобы открыть. Таким образом, вы можете выбрать принтер. Смотрите эту ссылку здесь. Код показывает, как открыть диалоговое окно печати в разгаре.

 public void printPage() throws PrinterException
        {
            PrinterJob job = PrinterJob.getPrinterJob();
            boolean ok = job.printDialog();
            if (ok) {
                job.setJobName("TEST JOB");
                job.setPrintable(this);
                job.print();
            }
        }

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

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

g2.drawImage(bufferedImage, 0, 0, (int) pf.getWidth(), (int) pf.getHeight(), null);

используйте следующую строку во внутреннем классе

g2.drawImage(img, 0, 0, img.getWidth(null), img.getHeight(null), null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...