Anda di halaman 1dari 17

94 Font font = new Font("Times New Roman", Font.PLAIN, (int) (default_font_size*1.

2));

95 AttributedString as2=new AttributedString(java);

96 as2.addAttribute(TextAttribute.FONT, font);

97 as2.addAttribute(TextAttribute.FOREGROUND, Color.red, 0, java.length());

98 as2.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON, 0, java.length());

99 as2.addAttribute(TextAttribute.BACKGROUND, Color.LIGHT_GRAY, 0, java.length());

100 as2.addAttribute(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON, 0,

java.length());

101 g2d.drawString(as2.getIterator(), 300, 120);

102

103 Image image = ImageIO.read(new File("src/sourcecode/gui/reports/images/foto100px.jpg"));

104 g2d.drawImage(image, 400, 260, null);

105

106 g2d.dispose();

107 }

108 }

182
BAB VII

PRINTING

MENCETAK

Dasar penggunaan object-object yang ada pada javax.print merupakan fondasi penting agar dapat

mencetak apa yang sudah tersusun dalam object Graphics2D maupun object JPanel.

Kompetensi:

 Mampu menggunakan object-object dari javax.print

 Mampu mendapatkan default printer dan printer list

 Mampu mencetak menggunakan object Graphics2D

 Mampu mencetak content JPanel

 Mampu mencetak melalui PrinterJob

MENDAPATKAN NAMA PRINTER DAN DUKUNGAN FORMAT

Penting untuk mengetahui perangkat printer apa saja yang ada dalam komputer beserta format yang

didukungnya. Kita akan membuat aplikasi berbasis consol untuk mengetahui dan memahami objek-

objek yang digunakan. Berikut adalah langkah-langkahnya:

1. Buatlah package dengan nama printer

2. Buatlah file baru untuk Java Class dengan nama Printer.java

3. Mutakhirkan source code sehingga terlihat seperti berikut ini:


1 package sourcecode.printer;

3 import java.util.ArrayList;

4 import javax.print.*;

6 public class Printer {

8 public static void cekDefault() {

183
9 System.out.println("Menampikan informasi untuk printer default");

10 PrintService service = PrintServiceLookup.lookupDefaultPrintService();

11 System.out.printf("Nama printer: %s\n", service.getName());

12 System.out.println("Format yang didukung: ");

13 for (DocFlavor format : service.getSupportedDocFlavors()) {

14 System.out.println(format);

15 }

16 }

17

18 public static void cekAllPrinters() {

19 System.out.println("\nInformasi Seluruh Printer:");

20 PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);

21 for (PrintService service : services) {

22 System.out.printf("\nNama printer: %s\n", service.getName());

23 System.out.println("Format yang didukung: ");

24 for (DocFlavor format : service.getSupportedDocFlavors()) {

25 System.out.println(format);

26 }

27 }

28 }

29

30 public static String getDefaultPrinter() {

31 PrintService service = PrintServiceLookup.lookupDefaultPrintService();

32 return service.getName();

33 }

34

35 public static ArrayList<String> getAllPrinters() {

36 ArrayList<String> printers = new ArrayList<>();

37 PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);

38 for (PrintService service : services) {

39 printers.add(service.getName());

40 }

41 return printers;

42 }

43

44 public static DocFlavor[] getPrinterSupported(String printerName) {

45 System.out.println("TEST" + printerName);

184
46 PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);

47 for (PrintService service : services) {

48 if (service.getName().equals(printerName)) {

49 return service.getSupportedDocFlavors();

50 }

51 }

52 return null;

53 }

54

55 public static void main(String[] args) {

56 cekDefault();

57 cekAllPrinters();

58 }

59 }

Output:

Gambar 252. Output nama-nama printer dan dukungan format.

Perhatikanlah baris code nomor 10 dan 12, ada beberapa objek yang terlibat disana, antara lain:

PrintService, PrintServiceLookup, dan DocFlavor, serta ada dua method lookupDefaultPrintService()

untuk mendapatkan default print service, dan getSupportedDocFlavors() untuk mendapatkan format

yang didukung oleh printer.

MENCETAK MENGGUNAKAN OBJECT GRAPHICS2D DAN CONTENT JPANEL

Selanjutnya kita akan mempelajari bagaimana mencetak dengan perintah-perintah Graphics 2D dan

mencetak dengan method print() pada objek JPanel.

185
Ikuti langkah-langkah berikut:

1. Tambahkan file baru berupa JInternalFrame dengan nama JIFPrinters.java

Gambar 253. Tampilan design view dari JIFPrinters.java.

2. Rubahlah nama-nama variabel sesuai dengan yang terlihat pada pane Navigator berikut ini:

Gambar 254. Nama variabel dari objek-objek pada JIFPrinters.

3. Mutakhirkan source code dari JIFPrinter.java sehingga terlihat seperti berikut ini:
1 package sourcecode.printer;

3 import java.awt.Font;

4 import java.awt.Graphics;

5 import java.awt.Graphics2D;

6 import java.awt.print.PageFormat;

7 import java.awt.print.Printable;

8 import static java.awt.print.Printable.NO_SUCH_PAGE;

9 import static java.awt.print.Printable.PAGE_EXISTS;

10 import java.awt.print.PrinterException;

11 import java.awt.print.PrinterJob;

12 import java.util.ArrayList;

186
13 import javax.print.Doc;

14 import javax.print.DocFlavor;

15 import javax.print.PrintException;

16 import javax.print.PrintService;

17 import javax.print.PrintServiceLookup;

18 import javax.print.SimpleDoc;

19 import javax.print.attribute.HashAttributeSet;

20 import javax.print.attribute.standard.PrinterName;

21 import javax.swing.ImageIcon;

22

23

24 public class JIFPrinters extends javax.swing.JInternalFrame {

25

26 public JIFPrinters() {

27 initComponents();

28 lbDefaultPrinter.setText("Default Printer: " + Printer.getDefaultPrinter());

29 setPrinterList();

30 }

31

32 @SuppressWarnings("unchecked")

33 // <editor-fold defaultstate="collapsed" desc="Generated Code">

34 private void initComponents() {

35

36 btnTutup = new javax.swing.JButton();

37 jPanel1 = new javax.swing.JPanel();

38 jScrollPane1 = new javax.swing.JScrollPane();

39 taPrinterSupported = new javax.swing.JTextArea();

40 cbPrinterList = new javax.swing.JComboBox<>();

41 jLabel2 = new javax.swing.JLabel();

42 lbDefaultPrinter = new javax.swing.JLabel();

43 btnPrint2 = new javax.swing.JButton();

44 btnPrint = new javax.swing.JButton();

45

46 setTitle("Printer");

47

48 btnTutup.setText("Tutup");

49 btnTutup.addActionListener(new java.awt.event.ActionListener() {

187
50 public void actionPerformed(java.awt.event.ActionEvent evt) {

51 btnTutupActionPerformed(evt);

52 }

53 });

54

55 taPrinterSupported.setColumns(20);

56 taPrinterSupported.setRows(5);

57 jScrollPane1.setViewportView(taPrinterSupported);

58

59 cbPrinterList.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1",

"Item 2", "Item 3", "Item 4" }));

60 cbPrinterList.addItemListener(new java.awt.event.ItemListener() {

61 public void itemStateChanged(java.awt.event.ItemEvent evt) {

62 cbPrinterListItemStateChanged(evt);

63 }

64 });

65

66 jLabel2.setText("Printer tersedia");

67

68 lbDefaultPrinter.setText("Default Printer");

69

70 btnPrint2.setIcon(new

javax.swing.ImageIcon(getClass().getResource("/sourcecode/gui/images/printer.png"))); // NOI18N

71 btnPrint2.addActionListener(new java.awt.event.ActionListener() {

72 public void actionPerformed(java.awt.event.ActionEvent evt) {

73 btnPrint2ActionPerformed(evt);

74 }

75 });

76

77 btnPrint.setIcon(new

javax.swing.ImageIcon(getClass().getResource("/sourcecode/gui/images/printer.png"))); // NOI18N

78 btnPrint.addActionListener(new java.awt.event.ActionListener() {

79 public void actionPerformed(java.awt.event.ActionEvent evt) {

80 btnPrintActionPerformed(evt);

81 }

82 });

83

188
84 javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);

85 jPanel1.setLayout(jPanel1Layout);

86 jPanel1Layout.setHorizontalGroup(

87 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

88 .addGroup(jPanel1Layout.createSequentialGroup()

89 .addContainerGap()

90 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILI

NG, false)

91 .addComponent(cbPrinterList, 0, javax.swing.GroupLayout.DEFAULT_SIZE,

Short.MAX_VALUE)

92 .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING)

93 .addGroup(jPanel1Layout.createSequentialGroup()

94 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignmen

t.TRAILING)

95 .addGroup(jPanel1Layout.createSequentialGroup()

96 .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 100,

javax.swing.GroupLayout.PREFERRED_SIZE)

97 .addGap(161, 161, 161))

98 .addGroup(javax.swing.GroupLayout.Alignment.LEADING,

jPanel1Layout.createSequentialGroup()

99 .addComponent(lbDefaultPrinter)

100 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

))

101 .addComponent(btnPrint2, javax.swing.GroupLayout.PREFERRED_SIZE, 57,

javax.swing.GroupLayout.PREFERRED_SIZE)

102 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

103 .addComponent(btnPrint, javax.swing.GroupLayout.PREFERRED_SIZE, 57,

javax.swing.GroupLayout.PREFERRED_SIZE)))

104 .addGap(0, 6, Short.MAX_VALUE))

105 );

106 jPanel1Layout.setVerticalGroup(

107 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

108 .addGroup(jPanel1Layout.createSequentialGroup()

109 .addContainerGap()

189
110 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAIL

ING, false)

111 .addGroup(jPanel1Layout.createSequentialGroup()

112 .addComponent(lbDefaultPrinter)

113 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,

javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

114 .addComponent(jLabel2))

115 .addComponent(btnPrint, javax.swing.GroupLayout.PREFERRED_SIZE, 57,

javax.swing.GroupLayout.PREFERRED_SIZE)

116 .addComponent(btnPrint2, javax.swing.GroupLayout.PREFERRED_SIZE, 57,

javax.swing.GroupLayout.PREFERRED_SIZE))

117 .addGap(4, 4, 4)

118 .addComponent(cbPrinterList, javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

119 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

120 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 269,

Short.MAX_VALUE)

121 .addContainerGap())

122 );

123

124 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

125 getContentPane().setLayout(layout);

126 layout.setHorizontalGroup(

127 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

128 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()

129 .addContainerGap()

130 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)

131 .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

132 .addGroup(layout.createSequentialGroup()

133 .addGap(0, 0, Short.MAX_VALUE)

134 .addComponent(btnTutup)))

135 .addContainerGap())

136 );

137 layout.setVerticalGroup(

138 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

139 .addGroup(layout.createSequentialGroup()

190
140 .addContainerGap()

141 .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

142 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

143 .addComponent(btnTutup)

144 .addContainerGap())

145 );

146

147 pack();

148 }// </editor-fold>

149

150 private void cbPrinterListItemStateChanged(java.awt.event.ItemEvent evt) {

151 // TODO add your handling code here:

152 if (cbPrinterList.getSelectedItem() == null) {

153 return;

154 }

155 DocFlavor[] dfs = Printer.getPrinterSupported((String) cbPrinterList.getSelectedItem());

156

157 taPrinterSupported.setText("");

158 for (DocFlavor df : dfs) {

159 taPrinterSupported.setText(taPrinterSupported.getText() + "\n" + df.toString());

160 }

161

162 }

163 int drawString(Graphics g, String text, int x, int y) {

164 for (String line : text.split("\n")) {

165 g.drawString(line, x, y += g.getFontMetrics().getHeight());

166 }

167 return y;

168 }

169 private void btnPrintActionPerformed(java.awt.event.ActionEvent evt) {

170 // TODO add your handling code here:

171 HashAttributeSet attributes = new HashAttributeSet();

172 attributes.add(new PrinterName("Microsoft Print to PDF", null));

173 DocFlavor format = DocFlavor.SERVICE_FORMATTED.PRINTABLE;

174 PrintService[] services = PrintServiceLookup.lookupPrintServices(format, attributes);

175

191
176 if (services.length > 0) {

177 Doc doc;

178 doc = new SimpleDoc((Printable) (Graphics g, PageFormat pageFormat, int pageIndex) -> {

179 if (pageIndex == 0) {

180 int x1 = (int) pageFormat.getImageableX();

181 int y1 = (int) pageFormat.getImageableY();

182 int width1 = (int) pageFormat.getImageableWidth();

183 int height1 = (int) pageFormat.getImageableHeight();

184 ImageIcon ii = new ImageIcon("src/sourcecode/gui/images/printer.png");

185 g.drawRect(x1, y1, width1, height1);

186 x1 += 10;

187 y1 += 10;

188 g.drawImage(ii.getImage(), x1, y1, null);

189

190 y1 += ii.getIconHeight();

191 g.drawString(lbDefaultPrinter.getText(), x1, y1 += 20);

192 g.drawString("Selected Printer: " + cbPrinterList.getSelectedItem(), x1, y1 +=

20);

193 g.setFont(new Font("Courier New", Font.PLAIN, 8));

194 drawString(g, taPrinterSupported.getText(), x1, y1 += 20);

195 return PAGE_EXISTS;

196 } else {

197 return NO_SUCH_PAGE;

198 }

199 }, format, null);

200 try {

201 services[0].createPrintJob().print(doc, null);

202 } catch (PrintException ex) {

203 }

204 } else {

205 System.out.println("Printer tidak ditemukan!");

206 }

207 }

208

209 private void btnTutupActionPerformed(java.awt.event.ActionEvent evt) {

210 // TODO add your handling code here:

211 this.dispose();

192
212 }

213

214 private void btnPrint2ActionPerformed(java.awt.event.ActionEvent evt) {

215 // TODO add your handling code here:

216 PrinterJob pj = PrinterJob.getPrinterJob();

217 pj.setJobName(" Print Component ");

218

219 pj.setPrintable(new Printable() {

220 public int print(Graphics pg, PageFormat pf, int pageNum) {

221 if (pageNum > 0) {

222 return Printable.NO_SUCH_PAGE;

223 }

224

225 Graphics2D g2 = (Graphics2D) pg;

226 g2.translate(pf.getImageableX(), pf.getImageableY());

227 jPanel1.paint(g2);

228 //btnPrint.paint(g2);

229 return Printable.PAGE_EXISTS;

230 }

231 });

232 if (pj.printDialog() == false) {

233 return;

234 }

235

236 try {

237 pj.print();

238 } catch (PrinterException ex) {

239 // handle exception

240 }

241 }

242 private void setPrinterList() {

243 printers = Printer.getAllPrinters();

244 cbPrinterList.removeAllItems();

245 printers.forEach(printerName -> {

246 cbPrinterList.addItem(printerName);

247 });

248 }

193
249

250 private ArrayList<String> printers = new ArrayList<>();

251 // Variables declaration - do not modify

252 private javax.swing.JButton btnPrint;

253 private javax.swing.JButton btnPrint2;

254 private javax.swing.JButton btnTutup;

255 private javax.swing.JComboBox<String> cbPrinterList;

256 private javax.swing.JLabel jLabel2;

257 private javax.swing.JPanel jPanel1;

258 private javax.swing.JScrollPane jScrollPane1;

259 private javax.swing.JLabel lbDefaultPrinter;

260 private javax.swing.JTextArea taPrinterSupported;

261 // End of variables declaration

262 }

263

4. Pada SistemPenggajian.java Tambahkan JMenuItem pada JMenu Report dengan teks Printer…,

kemudian rubah nama variabelnya menjadi mnPrinters

5. Pada mnPrintersTambahkan Events action performed, kemudian mutakhirkan source code sehingga

terlihat seperti berikut:

Gambar 255. Source code dari mnPrinters.

6. Hasil program ketika dijalankan adalah seperti berikut ini:

194
Gambar 256. Tampilan menu mnPrinters.

Gambar 257. Tampilan dari JIFPrinter.java.

Untuk melihat hasil pencetakan, setting default printer ke Microsoft Print to PDF, sehingga kita akan

melihat hasil cetak dalam bentuk file PDF.

Berikut ini adalah respons ketika tombol printer yang pertama diklik:

Akan tampil kotak dialog Save Print Output As, ketiklah nama file yang diinginkan.

195
Gambar 258. Kotak dialog Save Print Output As.

Gambar 259. File hasil cetak.

Gambar 260. Isi dari file hasil cetak.

196
Berikut ini adalah respons ketika tombol printer yang kedua diklik:

Pada tombol kedua ini menyediakan opsi pemilihan nama printer melalu Kotak dialog Print. Pilihlah

nama printer, lakukan perubahan setting jika diinginkan, kemudian klik [OK]

Gambar 261. Kotak dialog Print.

Akan tampil kotak dialog Save Print Output As, kemudian ketikkanlah nama file yang diinginkan.

Gambar 262. Kotak dialog Save Print Output As.

197
Gambar 263. File berhasil disimpan.

Gambar 264. Paint area dari JPanel tercetak dalam file.

198

Anda mungkin juga menyukai