- - PR -
印刷について・・・
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-02-02 23:34
Javaで印刷機能を実現するために勉強しているのですが、自分では解決できないことがありましたので、質問させていただきます。
下記HPを参考に印刷部分を作成したのですが、画面を拡大してから印刷をすると、画面全体ではなく、一部分しか印刷されません。 おそらくこれは印刷領域が設定されていないため、その一部分に領域が固定になっているのが原因だと考えていますが、これを解決する方法が見つかりません。 画面の大きさを変えても画面全体の内容を印刷できるようにすればどのようにすればいいのでしょうか? |
|
投稿日時: 2007-02-04 13:54
すみません。HPにいけないようなので、ソースをのせておきます。
import javax.print.*; import javax.print.event.*; import javax.print.attribute.*; import java.awt.print.*; import java.awt.*; import java.awt.geom.*; import java.awt.event.*; import javax.swing.*; import java.io.*; public class PrintPrintable { static class MyComponent extends JPanel implements Printable { Font theFont = new Font("Serif", Font.ITALIC, 48); public void paint(Graphics g) { super.paint(g); String msg = "Hello, Printer"; g.setFont(theFont); FontMetrics fm = g.getFontMetrics(); // Center line int width = getWidth(); int stringWidth = fm.stringWidth(msg); int x = (width - stringWidth)/2; int height = getHeight(); int stringHeight = fm.getHeight(); int ascent = fm.getAscent(); int y = (height - stringHeight)/2 + ascent; g.drawString(msg, x, y); g.drawRect(x, y-ascent, stringWidth, stringHeight); } public int print(Graphics g, PageFormat pageFormat, int pageIndex) { int x = (int)pageFormat.getImageableX(); int y = (int)pageFormat.getImageableY(); g.translate(x, y); if (pageIndex == 0) { paint(g); return Printable.PAGE_EXISTS; } else { return Printable.NO_SUCH_PAGE; } } } public static void main(String args[]) throws Exception { final JFrame frame = new JFrame("Printing Graphics"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPane = frame.getContentPane(); final Component printIt = new MyComponent(); contentPane.add(printIt, BorderLayout.CENTER); JButton button = new JButton("Print"); contentPane.add(button, BorderLayout.SOUTH); ActionListener listener = new ActionListener() { public void actionPerformed(ActionEvent e) { DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE; PrintService printService = PrintServiceLookup.lookupDefaultPrintService(); DocPrintJob job = printService.createPrintJob(); PrintJobListener pjlistener = new PrintJobAdapter() { public void printDataTransferCompleted(PrintJobEvent e) { System.out.println("Good-bye"); System.exit(0); } }; job.addPrintJobListener(pjlistener); PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); DocAttributeSet das = new HashDocAttributeSet(); Doc doc = new SimpleDoc(printIt, flavor, das); try { job.print(doc, pras); } catch (PrintException pe) { pe.printStackTrace(); } } }; button.addActionListener(listener); frame.setSize(350, 250); frame.show(); } } |
1