- PR -

画像を表示した画面のハードコピー

投稿者投稿内容
GRANDIS
会議室デビュー日: 2003/10/23
投稿数: 4
投稿日時: 2003-10-23 21:31
お世話になります。

画像(TIF)を表示した画面のハードコピーを印刷したいのですが、何かよい方法が
ありますでしょうか?
画像はTIFで、パネルに描画しています。
PrintJob を使用して印刷すると、画像部分が印刷されないです。

※検索してもなかなかうまく見つけられず困っています。
 会議室のスレも検索しましたが、いまいちうまく見つけれませんでした。

申し訳ありませんが、宜しくお願いいたします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-10-23 21:58
PrintJobとはjava.awt.PrintJobですか?
OSはなんですか?
使用目的はなんですか?
GRANDIS
会議室デビュー日: 2003/10/23
投稿数: 4
投稿日時: 2003-10-24 10:18
情報不足ですいません。

>PrintJobとはjava.awt.PrintJobですか?

そうです。

>OSはなんですか?

Windows2000で印刷しています。
(JDK1.3.1_08)

>使用目的はなんですか?

単なる画面のハードコピーをとりたいと思っています。
他のラベル等は印刷されるのですが、TIF部分だけが印刷されません。

宜しくお願いします。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2003-10-24 10:32
unibon です。こんにちわ。

引用:

GRANDISさんの書き込み (2003-10-24 10:18) より:
Windows2000で印刷しています。
(JDK1.3.1_08)


印刷(というか Java2D 関係?)は、
かなり実行環境やそのバージョンに左右されますので、
もし可能ならば最新の 1.4.2 で試されることをお勧めします。
#あと、Windows のプリンタドライバなどにも。

引用:

GRANDISさんの書き込み (2003-10-24 10:18) より:
他のラベル等は印刷されるのですが、TIF部分だけが印刷されません。


うろ覚えですが、
http://developer.java.sun.com/developer/bugParade/bugs/4298489.html
http://developer.java.sun.com/developer/bugParade/bugs/4300123.html
あたりにある、
sun.java2d.print.pipeline=pdl
sun.java2d.print.pipeline=raster
の設定で挙動が変わるかもしれません。
GRANDIS
会議室デビュー日: 2003/10/23
投稿数: 4
投稿日時: 2003-10-24 11:03
ありがとうございます。

JDK1.4にできたらとは思うのですが、JDK1.3.1_08という指定があります...
時間があれば、一度JDK1.4でテストしてみようと思います。

ありがとうございました。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-10-24 13:52
引用:

単なる画面のハードコピーをとりたいと思っています。
他のラベル等は印刷されるのですが、TIF部分だけが印刷されません。



あまりGUIは詳しくないですが、ちょっと検索してみたらWindowsではPrinterJobを
使え、とかの書き込みを見ました。情報が古いものかもしれませんが、一応当たって
みてはどうでしょうか?
さくらば
大ベテラン
会議室デビュー日: 2002/11/12
投稿数: 145
投稿日時: 2003-10-24 15:10
こんにちは、さくらばです。

引用:

ukさんの書き込み (2003-10-24 13:52) より:
あまりGUIは詳しくないですが、ちょっと検索してみたらWindowsではPrinterJobを
使え、とかの書き込みを見ました。



J2SE 1.3 までが PrinterJob、J2SE 1.4 から DocPrintJob です。
PrinterJob でも DocPrintJob でも印刷までの手順が違うだけで
印刷のための描画の部分は同じです。

Printable インタフェースをインプリメントして、print メソッドを
記述します。内部的には paintComponent メソッドと同じことをやれば
OK です。

とりあえず、参考として PrinterJob を使ったイメージ印刷のサンプルを
載せておきます。printImage メソッドで印刷を行っています。

コード:
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterJob;
import java.awt.print.PrinterException;
import java.io.File;
import java.io.IOException;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ImagePrintTest extends JComponent implements Printable {
    private Image image;

    public ImagePrintTest (String filename) {
        JFrame frame = new JFrame("ImagePrintTest");
        frame.setBounds(100, 100, 400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        image = new ImageIcon(filename).getImage();
        frame.getContentPane().add(this, BorderLayout.CENTER);

        JButton button = new JButton("Print...");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                printImage();
            }
        });
        JPanel panel = new JPanel();
        panel.add(button);
        frame.getContentPane().add(panel, BorderLayout.SOUTH);

        frame.setVisible(true);
    }

    private void printImage() {
        PrinterJob job = PrinterJob.getPrinterJob();
        Book book = new Book();
        book.append(this, job.defaultPage());
        job.setPageable(book);
        if (job.printDialog()) {
            try {
                job.print();
            } catch (PrinterException ex) {
                ex.printStackTrace();
            }
        }
    }

    public int print(Graphics g, PageFormat format, int index) throws PrinterException {
        if (index > 1) {
            return Printable.NO_SUCH_PAGE;
        }

        paintComponent(g);
        return Printable.PAGE_EXISTS;
    }

    public void paintComponent(Graphics g) {
        g.drawImage(image, 0, 0, this);
    }

    public static void main(String[] args) {
        new ImagePrintTest(args[0]);
    }
}

GRANDIS
会議室デビュー日: 2003/10/23
投稿数: 4
投稿日時: 2003-10-27 09:49
返答が遅くなり、申し訳ありません。

JDKについては1.3.1_08指定の為、どうしようもないのですが、
一度1.4での動作を確認してみたいと思います。

ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)