1 /* $Id: pdfclockServlet.java,v 1.11 2004/05/17 12:47:19 rp Exp $ 2 * 3 * PDFlib client: pdfclock example in Java 4 */ 5 6 import java.io.*; 7 import java.text.*; // SimpleDateFormat 8 import java.util.*; // Date 9 import javax.servlet.*; 10 import com.pdflib.pdflib; 11 import com.pdflib.PDFlibException; 12 13 public class pdfclockServlet extends GenericServlet 14 { service(ServletRequest request, ServletResponse response)15 public void service (ServletRequest request, ServletResponse response) 16 { 17 pdflib p = null; 18 int tm_hour, tm_min, tm_sec, alpha; 19 float RADIUS = 200.0f; 20 float MARGIN = 20.0f; 21 SimpleDateFormat format; 22 Date now = new Date(); 23 24 try{ 25 p = new pdflib(); 26 byte[] buf; 27 ServletOutputStream out; 28 29 // Generate a PDF in memory; insert a file name to create PDF on disk 30 if (p.begin_document("", "") == -1) { 31 throw new Exception("Error: " + p.get_errmsg()); 32 } 33 34 p.set_info("Creator", "pdfclockServlet.java"); 35 p.set_info("Author", "Thomas Merz"); 36 p.set_info("Title", "PDF clock (Java/servlet)"); 37 38 p.begin_page_ext((int) (2 * (RADIUS + MARGIN)), 39 (int) (2 * (RADIUS + MARGIN)), ""); 40 41 p.translate(RADIUS + MARGIN, RADIUS + MARGIN); 42 p.setcolor("fillstroke", "rgb", 0.0f, 0.0f, 1.0f, 0.0f); 43 p.save(); 44 45 // minute strokes 46 p.setlinewidth(2.0f); 47 for (alpha = 0; alpha < 360; alpha += 6) 48 { 49 p.rotate(6.0f); 50 p.moveto(RADIUS, 0.0f); 51 p.lineto(RADIUS-MARGIN/3, 0.0f); 52 p.stroke(); 53 } 54 55 p.restore(); 56 p.save(); 57 58 // 5 minute strokes 59 p.setlinewidth(3.0f); 60 for (alpha = 0; alpha < 360; alpha += 30) 61 { 62 p.rotate(30.0f); 63 p.moveto(RADIUS, 0.0f); 64 p.lineto(RADIUS-MARGIN, 0.0f); 65 p.stroke(); 66 } 67 68 format = new SimpleDateFormat("hh"); 69 tm_hour= Integer.parseInt(format.format(now)); 70 format = new SimpleDateFormat("mm"); 71 tm_min = Integer.parseInt(format.format(now)); 72 format = new SimpleDateFormat("ss"); 73 tm_sec = Integer.parseInt(format.format(now)); 74 75 // draw hour hand 76 p.save(); 77 p.rotate((-((tm_min/60.0f) + tm_hour - 3.0f) * 30.0f)); 78 p.moveto(-RADIUS/10, -RADIUS/20); 79 p.lineto(RADIUS/2, 0.0f); 80 p.lineto(-RADIUS/10, RADIUS/20); 81 p.closepath(); 82 p.fill(); 83 p.restore(); 84 85 // draw minute hand 86 p.save(); 87 p.rotate((-((tm_sec/60.0f) + tm_min - 15.0f) * 6.0f)); 88 p.moveto(-RADIUS/10, -RADIUS/20); 89 p.lineto(RADIUS * 0.8f, 0.0f); 90 p.lineto(-RADIUS/10, RADIUS/20); 91 p.closepath(); 92 p.fill(); 93 p.restore(); 94 95 // draw second hand 96 p.setcolor("fillstroke", "rgb", 1.0f, 0.0f, 0.0f, 0.0f); 97 p.setlinewidth(2); 98 p.save(); 99 p.rotate(-((tm_sec - 15.0f) * 6.0f)); 100 p.moveto(-RADIUS/5, 0.0f); 101 p.lineto(RADIUS, 0.0f); 102 p.stroke(); 103 p.restore(); 104 105 // draw little circle at center 106 p.circle(0f, 0f, RADIUS/30); 107 p.fill(); 108 109 p.restore(); 110 p.end_page_ext(""); 111 p.end_document(""); 112 113 buf = p.get_buffer(); 114 115 response.setContentType("application/pdf"); 116 response.setContentLength(buf.length); 117 out = response.getOutputStream(); 118 out.write(buf); 119 out.close(); 120 } catch (PDFlibException e) { 121 System.err.print("PDFlib exception occurred in pdfclock sample:\n"); 122 System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + 123 ": " + e.get_errmsg() + "\n"); 124 } catch (Exception e) { 125 System.err.println(e.getMessage()); 126 } finally { 127 if (p != null) { 128 p.delete(); /* delete the PDFlib object */ 129 } 130 } 131 132 133 } 134 } 135