summaryrefslogtreecommitdiff
path: root/Build/source/texk/xdvipdfmx/src/pdfdoc.h
blob: 0d160e18a7f1a541f9b12f0c6bf818b6d834096b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*  $Header: /home/cvsroot/dvipdfmx/src/pdfdoc.h,v 1.19 2005/07/30 11:44:18 hirata Exp $

    This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.

    Copyright (C) 2002 by Jin-Hwan Cho and Shunsaku Hirata,
    the dvipdfmx project team <dvipdfmx@project.ktug.or.kr>
    
    Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/

#ifndef _PDFDOC_H_
#define _PDFDOC_H_

#include "pdfobj.h"
#include "pdfdev.h"

#define PDF_DOC_GRABBING_NEST_MAX 4

extern void     pdf_doc_set_verbose (void);

extern void     pdf_open_document  (const char *filename,
				    double media_width, double media_height,
				    double annot_grow_amount, int bookmark_open_depth);
extern void     pdf_close_document (void);


/* PDF document metadata */
extern void     pdf_doc_set_creator   (const char *creator);


/* They just return PDF dictionary object.
 * Callers are completely responsible for doing right thing...
 */
extern pdf_obj *pdf_doc_get_dictionary (const char *category);
extern pdf_obj *pdf_doc_get_reference  (const char *category);

#define pdf_doc_page_tree() pdf_doc_get_dictionary("Pages")
#define pdf_doc_catalog()   pdf_doc_get_dictionary("Catalog")
#define pdf_doc_docinfo()   pdf_doc_get_dictionary("Info")
#define pdf_doc_names()     pdf_doc_get_dictionary("Names")
#define pdf_doc_this_page() pdf_doc_get_dictionary("@THISPAGE")

extern long     pdf_doc_current_page_number    (void);
extern pdf_obj *pdf_doc_current_page_resources (void);

extern pdf_obj *pdf_doc_ref_page (unsigned long page_no);
#define pdf_doc_this_page_ref() pdf_doc_get_reference("@THISPAGE")
#define pdf_doc_next_page_ref() pdf_doc_get_reference("@NEXTPAGE")
#define pdf_doc_prev_page_ref() pdf_doc_get_reference("@PREVPAGE")

/* Not really managing tree...
 * There should be something for number tree.
 */
extern int      pdf_doc_add_names       (const char *category,
					 const void *key, int keylen, pdf_obj *value);

extern void     pdf_doc_set_bop_content (const char *str, unsigned length);
extern void     pdf_doc_set_eop_content (const char *str, unsigned length);

/* Page */
extern void     pdf_doc_begin_page   (double scale, double x_origin, double y_origin);
extern void     pdf_doc_end_page     (void);

extern void     pdf_doc_set_mediabox (unsigned page_no, const pdf_rect *mediabox);
extern void     pdf_doc_get_mediabox (unsigned page_no, pdf_rect *mediabox);

extern void     pdf_doc_add_page_content  (const char *buffer, unsigned length);
extern void     pdf_doc_add_page_resource (const char *category,
					   const char *resource_name, pdf_obj *resources);

/* Article thread */
extern void     pdf_doc_begin_article (const char *article_id, pdf_obj *info);
extern void     pdf_doc_end_article   (const char *article_id);  /* Do nothing... */
extern void     pdf_doc_make_article  (const char *article_id,
				       const char **bead_order, int num_beads);
extern void     pdf_doc_add_bead      (const char *article_id,
				       const char *bead_id,
				       long page_no, const pdf_rect *rect);

/* Bookmarks */
extern int      pdf_doc_bookmarks_up    (void);
extern int      pdf_doc_bookmarks_down  (void);
extern void     pdf_doc_bookmarks_add   (pdf_obj *dict, int is_open);
extern int      pdf_doc_bookmarks_depth (void);


/* Form XObject */
extern void     pdf_doc_make_xform (pdf_obj     *xform,
				    pdf_rect    *bbox,         /* const */
				    pdf_tmatrix *matrix,       /* const */
				    pdf_obj     *resources_ref);

/* Returns xobj_id of started xform. */
extern int      pdf_doc_begin_grabbing (const char *ident,
					double ref_x, double ref_y,
					const pdf_rect *cropbox);
extern void     pdf_doc_end_grabbing   (void);


/* Annotation */
extern void     pdf_doc_add_annot   (unsigned page_no,
				     const pdf_rect *rect, pdf_obj *annot_dict);

/* Annotation with auto- clip and line (or page) break */
extern void     pdf_doc_begin_annot (pdf_obj *dict);
extern void     pdf_doc_end_annot   (void);

extern void     pdf_doc_break_annot (void);
extern void     pdf_doc_expand_box  (const pdf_rect *rect);

/* Thumbnail */
extern void     pdf_doc_enable_thumbnails (int thumb_remove);

/* PageLabels - */
extern void     pdf_doc_set_pagelabel (long  page_start,
                                       const char *type,
                                       const void *prefix, int pfrx_len,
                                       long  counter_start);

/* Similar to bop_content */
#include "pdfcolor.h"
extern void     pdf_doc_set_bgcolor   (const pdf_color *color);

#endif /* _PDFDOC_H_ */