1// $Id: quickreference.cpp 14574 2005-10-29 16:27:43Z bonefish $
2//
3// PDFlib/PDI client: mini imposition demo
4//
5#include <iostream>
6
7#include "pdflib.hpp"
8
9int
10main(void)
11{
12    try {
13	PDFlib *p;			// pointer to the PDFlib class
14	int manual, page;
15	int font, row, col;
16	const int maxrow = 2;
17	const int maxcol = 2;
18	char optlist[128];
19	int startpage = 1, endpage = 4;
20	const float width = 500, height = 770;
21	int pageno;
22	const string infile = "reference.pdf";
23	/* This is where font/image/PDF input files live. Adjust as necessary.*/
24	const string searchpath = "../data";
25
26	p = new PDFlib();
27
28	// open new PDF file
29	if (p->open_file("quickreference.pdf") == -1) {
30	    cerr << "Error: " << p->get_errmsg() << endl;
31	    return 2;
32	}
33
34	p->set_parameter("SearchPath", searchpath);
35
36	// This line is required to avoid problems on Japanese systems
37	p->set_parameter("hypertextencoding", "host");
38
39	p->set_info("Creator", "quickreference.cpp");
40	p->set_info("Author", "Thomas Merz");
41	p->set_info("Title", "mini imposition demo (C++)");
42
43	manual = p->open_pdi(infile, "", 0);
44	if (manual == -1) {
45	    cerr << "Error: " << p->get_errmsg() << endl;
46	    return 2;
47	}
48
49	row = 0;
50	col = 0;
51
52	p->set_parameter("topdown", "true");
53
54	for (pageno = startpage; pageno <= endpage; pageno++) {
55	    if (row == 0 && col == 0) {
56		p->begin_page(width, height);
57		font = p->load_font("Helvetica-Bold", "host", "");
58		p->setfont(font, 18);
59		p->set_text_pos(24, 24);
60		p->show("PDFlib Quick Reference");
61	    }
62
63	    page = p->open_pdi_page(manual, pageno, "");
64
65	    if (page == -1) {
66		cerr << "Error: " << p->get_errmsg() << endl;
67		return 2;
68	    }
69
70	    sprintf(optlist, "scale %f", (float) 1/maxrow);
71	    p->fit_pdi_page(page, width/maxcol*col,
72			(row + 1) *  height/maxrow, optlist);
73	    p->close_pdi_page(page);
74
75	    col++;
76	    if (col == maxcol) {
77		col = 0;
78		row++;
79	    }
80	    if (row == maxrow) {
81		row = 0;
82		p->end_page();
83	    }
84	}
85
86	// finish the last partial page
87	if (row != 0 || col != 0)
88	    p->end_page();
89
90	p->close();
91	p->close_pdi(manual);
92
93    }
94    catch (PDFlib::Exception &ex) {
95	cerr << "PDFlib exception occurred in quickreference sample: " << endl;
96	cerr << "[" << ex.get_errnum() << "] " << ex.get_apiname()
97	    << ": " << ex.get_errmsg() << endl;
98	return 2;
99    }
100
101    return 0;
102}
103