1 /* $Id: quickreferenceServlet.java,v 1.12 2004/05/17 12:47:19 rp Exp $
2  *
3  * PDFlib+PDI client: mini imposition demo
4  */
5 
6 import java.io.*;
7 import javax.servlet.*;
8 import com.pdflib.pdflib;
9 import com.pdflib.PDFlibException;
10 
11 public class quickreferenceServlet extends GenericServlet
12 {
service(ServletRequest request, ServletResponse response)13     public void service (ServletRequest request, ServletResponse response)
14     {
15 	int font, row = 0 , col = 0 , i;
16 	int manual, pages;
17 	final int maxrow=2, maxcol=2;
18 	int endpage;
19 	final float width = 500, height = 770;
20 	int pageno;
21 	String infile = "reference.pdf";
22 	/* This is where font/image/PDF input files live. Adjust as necessary.*/
23 	String searchpath = "../data";
24 	byte[] buf;
25 	ServletOutputStream output;
26 	pdflib p = null;
27 
28 	try{
29 	    p = new pdflib();
30 
31 	// Generate a PDF in memory; insert a file name to create PDF on disk
32 	    if (p.begin_document("", "") == -1) {
33 		throw new Exception("Couldn't create PDF output.\n");
34 	    }
35 
36 	    p.set_parameter("SearchPath", searchpath);
37 
38 	    p.set_info("Creator", "quickreferenceServlet.java");
39 	    p.set_info("Author", "Rainer Ploeckl");
40 	    p.set_info("Title", "imposition demo (Java/Servlet)");
41 
42 	    manual = p.open_pdi(infile, "", 0);
43 	    i = 0;
44 
45 	    if (manual == -1){
46 		throw new Exception("Error: " + p.get_errmsg());
47 	    }
48 
49 	    p.set_parameter("topdown", "true");
50 
51 	    endpage = (int)p.get_pdi_value("/Root/Pages/Count", manual, -1, 0);
52 
53 	    for (pageno = 1; pageno <= endpage; pageno++) {
54 		if (row == 0 && col == 0) {
55 		    i++;
56 		    p.begin_page_ext(width, height, "");
57 		    font = p.load_font("Helvetica-Bold", "unicode", "");
58 		    p.setfont(font, 18);
59 		    p.set_text_pos(24, 24);
60 		    p.show("PDFlib Quick Reference");
61 		}
62 
63 		pages = p.open_pdi_page(manual, pageno, "");
64 
65 		if (pages == -1) {
66 		    throw new Exception("Error: " + p.get_errmsg());
67 		}
68 
69 		p.fit_pdi_page(manual, width/maxcol*col,
70 			(row + 1) * height/maxrow, "scale " + (float)1/maxrow);
71 		p.close_pdi_page(pages);
72 
73 		col++;
74 		if (col == maxcol) {
75 		    col = 0;
76 		    row++;
77 		}
78 		if (row == maxrow) {
79 		    row = 0;
80 		    p.end_page_ext("");
81 		}
82 	    }
83 
84 	    // finish the last partial page
85 	    if (row != 0 || col != 0)
86 		p.end_page_ext("");
87 
88 	    p.end_document("");
89 	    p.close_pdi(manual);
90 	    buf = p.get_buffer();
91 
92 	    response.setContentType("application/pdf");
93 	    response.setContentLength(buf.length);
94 
95 	    output = response.getOutputStream();
96 	    output.write(buf);
97 	    output.close();
98         } catch (PDFlibException e) {
99             System.err.print("PDFlib exception occurred in quickreference sample:\n");
100             System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() +
101                             ": " + e.get_errmsg() + "\n");
102         } catch (Exception e) {
103             System.err.println(e.getMessage());
104         } finally {
105             if (p != null) {
106                 p.delete();                     /* delete the PDFlib object */
107             }
108         }
109     }
110 }
111