1     package sutut1;
2     
3     import javax.servlet.*;
4     import javax.servlet.http.*;
5     import java.io.*;
6     import java.util.*;
7     
8     import us.oh.state.common.utility.*;
9     
10    public class hello7 extends HttpServlet {
11    
12      public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
13        response.setContentType("application/pdf");
14        PdfChart page = new PdfChart(response.getOutputStream());
15        // Identify the chart
16        page.setTextColor(0x0);
17        page.setFont(page.BOLD, 24);
18        page.println("Tutorial - Hello 7b");
19        page.setFont(page.NORMAL, 12);
20        page.println(new Date().toString());
21    
22        // Get value sets and associate them to the chart
23        page.appendValues(sineWave(36));
24        page.appendValues(noisyWave(72));
25    
26        // Apply grid lines
27        page.appendGridX(0.5, 1, 0x000088);
28        page.appendGridX(1.0, 9, 0x0);
29        page.appendGridY(1.0, 2, 0x0);
30    
31        // Draw the main chart
32        page.drawMain(1.5, 7.0, 6.5, 3.0, 36, 4, 0xdddddd, 2.0, 0x0);
33    
34        // Decorate the chart
35        String [] xLabels = new String [13];
36        for (int i = 0; i < xLabels.length; ++i) {
37          xLabels[i] = Integer.toString(i * 30);
38        }
39        page.drawBottomLabels(0.05, 0.375, 90.0, xLabels, 0.05);
40        page.drawLeftLabels(0.375, -0.05, 0.0,
41          new String [] {"-1.0", "-0.5", "0.0", "0.5", "1.0"}, 0.05);
42        page.drawLegend(5.5, 5.25, 2.0, 1.0, 0.09, 0.09, 0xdddddd, 2.0, 0x0);
43    
44        // Output the chart to the PDF file
45        page.close();
46      }
47    
48    // Instance a simple sine wave value set
49    ValueSet sineWave(int resolution) {
50        double [] v = new double[resolution + 1];
51        for (int i = 0; i < v.length; ++i) {
52          v[i] = Math.sin((double)i * 2.0 * Math.PI / (double)(v.length - 1));
53        }
54        AreaValueSet vs = new AreaValueSet("Sine Wave", 1.0, 0x00ff00,
55          v, 0.0, 2.0 * Math.PI, 0xaaaaff, true);
56        vs.setRange(-1.0, 1.0, -1.0);
57        return vs;
58      }
59    
60    // Instance a sine wave value set which is modulated with random offsets
61    ValueSet noisyWave(int resolution) {
62        double [] v = new double[resolution + 1];
63        for (int i = 0; i < v.length; ++i) {
64          v[i] = Math.sin((double)i * 2.0 * Math.PI / (double)(v.length - 1))
65            / 2.0 + Math.random() - 0.5;
66        }
67        LineValueSet vs = new LineValueSet("Noisy Wave", 1.0, 0xff0000,
68          v, 0.0, 2.0 * Math.PI);
69        vs.setRange(-1.0, 1.0, -1.0);
70        return vs;
71      }
72    
73    }