- PR -

簡単な帳票TOOLを作りたい

投稿者投稿内容
さくらば
大ベテラン
会議室デビュー日: 2002/11/12
投稿数: 145
投稿日時: 2004-05-20 17:36
こんにちは、さくらばです。

引用:

umebaindさんの書き込み (2004-05-19 14:21) より:
ご指摘のあったDOUBLE⇔INT変換(やはり重かった)
灰色の中間色の対応したらうまく表示出来ました。



これでもいいとは思いますが、暗い色を優先させて描画するほうが簡単です。
修正部分だけ書いておきます。

コード:
        int ur = (pixelsUnder[i] & 0x00ff0000) >> 16; 
        int ug = (pixelsUnder[i] & 0x0000ff00) >>  8; 
        int ub = (pixelsUnder[i] & 0x000000ff); 
            
        int or = (pixelsOver[i] & 0x00ff0000) >> 16; 
        int og = (pixelsOver[i] & 0x0000ff00) >>  8; 
        int ob = (pixelsOver[i] & 0x000000ff); 
            
        int nr = ur > or? or: ur;
        int ng = ug > og? og: ug;
        int nb = ub > ob? ob: ub;



引用:

あとカウンタを付加してPAGE数を追加したいのですが
TXTをIMAGEに変換してADDすればうまくいきますか?
又、TXTをIMAGEに変換する方法とIMAGEにADDする方法をどなたか
ご教授下さい。よろしくお願いします。



帳票ツールのようなものをイメージベースで作るのが間違っているのではないですか。
通常であればドローで書くと思いますけど。テンプレートの部分はイメージでも
いいとは思いますが、そこに記入する帳票データは固定ではないのでイメージでは
扱いにくいですよ。

とりあえずこんな感じで作ってみました。テキストを画像にするコードやページ数を
フッタに記入するコードも入れてみたので参考になさってください。

コード:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.awt.print.PageFormat;
import java.awt.print.PrinterJob;
import java.awt.print.Printable;
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class PrintingSample implements Printable {

    private FormFormatter form;

    public PrintingSample () {
        form = new FormFormatter("さくらば ゆういち");
        form.addMatter(new Date(), "パソコン", 100000);
        form.addMatter(new Date(), "メモリ", 9900);
        form.addMatter(new Date(), "HD", 12000);

        int result = JOptionPane.showOptionDialog((JFrame)null, form, "Dialog Sample", 
                                     JOptionPane.OK_CANCEL_OPTION,
                                     JOptionPane.PLAIN_MESSAGE,
                                     null, new String[]{"Print", "Make Image", "Cancel"},
                                     "Print");
        if (result == 0) {
            printDoc();
        } else if (result == 1) {
            createImage();
        }
    }

    private void printDoc() {
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        printerJob.setPrintable(this);
        boolean doPrint = printerJob.printDialog();
        if (doPrint) {
            try {
                printerJob.print();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

    public int print(Graphics g, PageFormat format, int pageIndex) {
        if (pageIndex == 0) {
            Graphics2D g2D = (Graphics2D)g;
            g2D.translate(format.getImageableX(), format.getImageableY());
            g2D.drawString("Date: " + new Date(), 0, 20);
            g2D.drawString("Page: " + (pageIndex+1), 0, (int)format.getImageableHeight());

            g2D.translate(0, 20);
            form.print(g2D);
            return Printable.PAGE_EXISTS;
        } else {
            return Printable.NO_SUCH_PAGE;
        }
    }

    private void createImage() {
        BufferedImage image = new BufferedImage(400, 600, BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();

        g.setColor(Color.WHITE);
        g.fillRect(0, 0, 600, 800);
        g.setColor(Color.BLACK);
        form.paintComponent(g);
        g.dispose();

        JFrame frame = new JFrame("Image View");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new JLabel(new ImageIcon(image)));
        frame.pack();
        frame.setVisible(true);
        
        try {
            ImageIO.write(image, "PNG", new File("result.png"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        new PrintingSample();
    }
}

class FormFormatter extends JComponent {
    private String name;
    private DecimalFormat decFormat;
    private DateFormat dateFormat;
    private List matters;

    class Matter {
        Date date;
        String item;
        int charge;

        Matter(Date date, String item, int charge) {
            this.date = date;
            this.item = item;
            this.charge = charge;
        }
    }

    public FormFormatter(String name) {
        this.name = name;

        matters = new ArrayList();

        decFormat = new DecimalFormat("###,###,###");
        dateFormat = new SimpleDateFormat("yyyy年MM月dd日");

        setPreferredSize(new Dimension(400, 600));
    }

    public void addMatter(Date date, String item, int charge) {
        Matter matter = new Matter(date, item, charge);
        matters.add(matter);
    }

    public void paintComponent(Graphics g) {
        Graphics2D g2D = (Graphics2D)g;

        g2D.draw(new Rectangle2D.Double(10, 10, 380, 580));
        g2D.drawString("請求書", 50, 50);
        g2D.draw(new Line2D.Double(20, 180, 360, 180));
        g2D.drawString("日時", 50, 170);
        g2D.drawString("費目", 150, 170);
        g2D.drawString("金額", 250, 170);

        g2D.drawString(name + " 様", 50, 100);

        for (int i = 0; i < matters.size(); i++) {
            Matter matter = (Matter)matters.get(i);

            g2D.drawString(dateFormat.format(matter.date), 50, 200 + i * 20);
            g2D.drawString(matter.item, 150, 200 + i * 20);
            g2D.drawString(decFormat.format(matter.charge), 250, 200 + i * 20);
        }
    }
}


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