76fea80707
Reviewed-by: aivanov, serb
247 lines
9.7 KiB
Java
247 lines
9.7 KiB
Java
/*
|
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
/**
|
|
* @test
|
|
* @bug 4886069 8023045
|
|
* @key printer
|
|
* @summary Confirm that printer recognizes the Legal selection either by
|
|
* prompting the user to put Legal paper or automatically selecting
|
|
* the tray containing Legal Paper. The printout image should not
|
|
* be shifted up by about 3".
|
|
* @run main/manual PrintTest
|
|
*
|
|
*/
|
|
import java.awt.*;
|
|
import java.awt.event.*;
|
|
import javax.swing.*;
|
|
import javax.swing.border.*;
|
|
|
|
import java.awt.print.*;
|
|
import javax.print.*;
|
|
import javax.print.attribute.*;
|
|
import javax.print.attribute.standard.*;
|
|
import java.io.*;
|
|
|
|
|
|
public class PrintTest extends JFrame {
|
|
private JPanel contentPane;
|
|
private JMenuBar jMenuBar1 = new JMenuBar();
|
|
private JMenu jMenuFile = new JMenu();
|
|
private JMenuItem jMenuItem1 = new JMenuItem();
|
|
private BorderLayout borderLayout1 = new BorderLayout();
|
|
private JPanel jPanel1 = new JPanel();
|
|
private BorderLayout borderLayout2 = new BorderLayout();
|
|
private JScrollPane jScrollPane1 = new JScrollPane();
|
|
private JTextArea jTextArea1 = new JTextArea();
|
|
private Border border1;
|
|
|
|
//Construct the frame
|
|
public PrintTest() {
|
|
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
|
|
try {
|
|
jbInit();
|
|
|
|
}
|
|
catch(Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
private void jbInit() throws Exception {
|
|
contentPane = (JPanel) this.getContentPane();
|
|
border1 = BorderFactory.createLineBorder(Color.black,1);
|
|
contentPane.setLayout(borderLayout1);
|
|
this.setTitle("Print Test");
|
|
jMenuFile.setText("File");
|
|
jMenuItem1.setText("Print");
|
|
jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(80, java.awt.event.KeyEvent.CTRL_MASK, false));
|
|
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(ActionEvent e) {
|
|
jMenuItem1_actionPerformed(e);
|
|
}
|
|
});
|
|
jPanel1.setLayout(borderLayout2);
|
|
jTextArea1.setBorder(border1);
|
|
jTextArea1.setText("1. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"2. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"3. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"4. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"5. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"6. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"7. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"8. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"9. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"10. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"11. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"12. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"13. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"14. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"15. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"16. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"17. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"18. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"19. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"20. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"21. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"22. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"23. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"24. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"25. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"26. This is a printer test designed to illustrate a bug in the java printing API.\n\n"+
|
|
"27. This is a printer test designed to illustrate a bug in the java printing API.");
|
|
jMenuFile.add(jMenuItem1);
|
|
contentPane.add(jPanel1, BorderLayout.CENTER);
|
|
jPanel1.add(jScrollPane1, BorderLayout.CENTER);
|
|
jScrollPane1.getViewport().add(jTextArea1, null);
|
|
jScrollPane1.setPreferredSize(new Dimension(468,648));
|
|
jTextArea1.setPreferredSize(new Dimension(468,864));
|
|
jMenuBar1.add(jMenuFile);
|
|
this.setJMenuBar(jMenuBar1);
|
|
}
|
|
|
|
protected void processWindowEvent(WindowEvent e) {
|
|
super.processWindowEvent(e);
|
|
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
|
|
System.exit(0);
|
|
}
|
|
}
|
|
|
|
void jMenuItem1_actionPerformed(ActionEvent e) {
|
|
PrintUtils.printComponent(jTextArea1);
|
|
}
|
|
|
|
|
|
|
|
|
|
public static class PrintUtils implements Printable {
|
|
private JComponent componentToBePrinted;
|
|
protected double scale =1.0;
|
|
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
|
|
|
|
|
|
public static void printComponent(JComponent c) {
|
|
new PrintUtils(c).print();
|
|
}
|
|
|
|
public PrintUtils(JComponent componentToBePrinted) {
|
|
this.componentToBePrinted = componentToBePrinted;
|
|
|
|
}
|
|
|
|
void print() {
|
|
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
|
|
pras.add(MediaSizeName.NA_LEGAL);
|
|
|
|
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor,pras);
|
|
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
|
|
if ((defaultService == null) || (printService.length == 0)) {
|
|
System.out.println("No default print service found. Test aborted.");
|
|
return;
|
|
}
|
|
|
|
PrintService service = ServiceUI.printDialog(null,100,100,printService,defaultService,flavor,pras);
|
|
|
|
if(service != null) {
|
|
DocPrintJob job = service.createPrintJob();
|
|
DocAttributeSet das = new HashDocAttributeSet();
|
|
|
|
Doc doc = new SimpleDoc(this,flavor,das);
|
|
|
|
try {
|
|
job.print(doc,pras);
|
|
|
|
} catch(PrintException pe) {
|
|
pe.printStackTrace();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public int print(Graphics g, PageFormat pageFormat, int pageIndex)
|
|
{
|
|
|
|
double h=componentToBePrinted.getHeight();
|
|
double pageHeight=pageFormat.getImageableHeight();
|
|
|
|
if (pageIndex * pageHeight > h * scale) {
|
|
return(NO_SUCH_PAGE);
|
|
} else {
|
|
|
|
Graphics2D g2d = (Graphics2D)g;
|
|
|
|
//move past unprintable area
|
|
double xOffset=pageFormat.getImageableX();
|
|
double yOffset=pageFormat.getImageableY();
|
|
g2d.translate(xOffset,yOffset);
|
|
|
|
|
|
//move to correct page taking into account the scaling
|
|
double newx=0;
|
|
double newy=pageHeight*(-pageIndex);
|
|
g2d.translate(newx / 1.0,newy / 1.0 );
|
|
|
|
//print
|
|
|
|
componentToBePrinted.print(g2d);
|
|
return(PAGE_EXISTS);
|
|
}
|
|
}
|
|
|
|
public static void disableDoubleBuffering(Component c) {
|
|
RepaintManager currentManager = RepaintManager.currentManager(c);
|
|
currentManager.setDoubleBufferingEnabled(false);
|
|
}
|
|
|
|
/** Re-enables double buffering globally. */
|
|
|
|
public static void enableDoubleBuffering(Component c) {
|
|
RepaintManager currentManager = RepaintManager.currentManager(c);
|
|
currentManager.setDoubleBufferingEnabled(true);
|
|
}
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
try {
|
|
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
|
}
|
|
catch(Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
PrintTest frame = new PrintTest();
|
|
frame.pack();
|
|
|
|
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
|
|
Dimension frameSize = frame.getSize();
|
|
if (frameSize.height > screenSize.height) {
|
|
frameSize.height = screenSize.height;
|
|
}
|
|
if (frameSize.width > screenSize.width) {
|
|
frameSize.width = screenSize.width;
|
|
}
|
|
frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
|
|
frame.setVisible(true);
|
|
}
|
|
|
|
}
|