summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipdfm-x/pdfdoc.h
blob: e3d81f46db4739164c78ed8235050b9819f33b47 (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
139
140
141
142
143
144
145
/* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.

    Copyright (C) 2007-2018 by Jin-Hwan Cho and Shunsaku Hirata,
    the dvipdfmx project team.
    
    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"

enum pdf_page_boundary {
    pdf_page_boundary__auto = 0,
    pdf_page_boundary_mediabox,
    pdf_page_boundary_cropbox,
    pdf_page_boundary_artbox,
    pdf_page_boundary_trimbox,
    pdf_page_boundary_bleedbox
};

#define PDF_DOC_GRABBING_NEST_MAX 4

extern void     pdf_open_document  (const char *filename,
                                    int enable_encrypt,
                                    int enable_objstm,
                                    double media_width, double media_height,
                                    double annot_grow_amount,
                                    int bookmark_open_depth,
                                    int check_gotos);
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 int      pdf_doc_get_page_count (pdf_file *pf);
extern pdf_obj *pdf_doc_get_page (pdf_file *pf, int page_no, enum pdf_page_boundary opt_bbox,
				  pdf_rect *bbox, pdf_tmatrix *matrix, pdf_obj **resources_p);

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

extern pdf_obj *pdf_doc_ref_page (unsigned 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_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_add_bead      (const char *article_id,
				       const char *bead_id,
				       int 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);


/* 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   (pdf_obj *attrib);


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

/* 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);

/* Manual thumbnail */
extern void     pdf_doc_enable_manual_thumbnails (void);

#if 0
/* PageLabels - */
extern void     pdf_doc_set_pagelabel (int  page_start,
                                       const char *type,
                                       const void *prefix, int pfrx_len,
                                       int  counter_start);
#endif

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

#endif /* _PDFDOC_H_ */