2 |
- |
1 |
/* Copyright (C) 2002 Aladdin Enterprises. All rights reserved.
|
|
|
2 |
|
|
|
3 |
This software is provided AS-IS with no warranty, either express or
|
|
|
4 |
implied.
|
|
|
5 |
|
|
|
6 |
This software is distributed under license and may not be copied,
|
|
|
7 |
modified or distributed except as expressly authorized under the terms
|
|
|
8 |
of the license contained in the file LICENSE in this distribution.
|
|
|
9 |
|
|
|
10 |
For more information about licensing, please refer to
|
|
|
11 |
http://www.ghostscript.com/licensing/. For information on
|
|
|
12 |
commercial licensing, go to http://www.artifex.com/licensing/ or
|
|
|
13 |
contact Artifex Software, Inc., 101 Lucas Valley Road #110,
|
|
|
14 |
San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
|
15 |
*/
|
|
|
16 |
|
|
|
17 |
/* $Id: gdevpdtd.h,v 1.5 2005/04/05 15:44:44 igor Exp $ */
|
|
|
18 |
/* FontDescriptor structure and API for pdfwrite */
|
|
|
19 |
|
|
|
20 |
#ifndef gdevpdtd_INCLUDED
|
|
|
21 |
# define gdevpdtd_INCLUDED
|
|
|
22 |
|
|
|
23 |
#include "gdevpdtx.h"
|
|
|
24 |
#include "gdevpdtb.h"
|
|
|
25 |
|
|
|
26 |
/* ================ Types and structures ================ */
|
|
|
27 |
|
|
|
28 |
/*
|
|
|
29 |
* FontDescriptors are handled as pseudo-resources. Multiple Font resources
|
|
|
30 |
* may share a descriptor. We don't need to use reference counting to keep
|
|
|
31 |
* track of this, since all descriptors persist until the device is closed.
|
|
|
32 |
* The CharSet entry in the FontDescriptor for a Type 1 subset font lists
|
|
|
33 |
* the glyphs that are included in the subset, so the FontDescriptor cannot
|
|
|
34 |
* be written until the font has been written, but we could use an indirect
|
|
|
35 |
* object for the CharSet and write the FontDescriptor itself early.
|
|
|
36 |
* However, we don't think that is worthwhile, since FontDescriptors are
|
|
|
37 |
* small objects compared to the fonts themselves, and it's simpler to keep
|
|
|
38 |
* all the FontDescriptors until the end.
|
|
|
39 |
*
|
|
|
40 |
* Note that FontDescriptors and BaseFonts correspond 1-to-1. While the PDF
|
|
|
41 |
* specification allows multiple FontDescriptors for a single BaseFont, this
|
|
|
42 |
* has no value: all the information in the FontDescriptor is derived from
|
|
|
43 |
* the BaseFont, so all the FontDescriptors for the same BaseFont must be
|
|
|
44 |
* the same.
|
|
|
45 |
*/
|
|
|
46 |
/*
|
|
|
47 |
* Font names in PDF files have caused an enormous amount of trouble, so we
|
|
|
48 |
* document specifically how they are handled in each structure.
|
|
|
49 |
*
|
|
|
50 |
* The PDF Reference says that the FontName in a font descriptor must be
|
|
|
51 |
* the same as the BaseFont in the font or CIDFont resource(s) that
|
|
|
52 |
* reference(s) it.
|
|
|
53 |
*
|
|
|
54 |
* We never create a font descriptor without also creating a font resource
|
|
|
55 |
* that references it, so we set the FontName at the same time as the
|
|
|
56 |
* BaseFont of the font resource. For more information, see gdevpdtf.h.
|
|
|
57 |
*/
|
|
|
58 |
|
|
|
59 |
#ifndef pdf_font_descriptor_DEFINED
|
|
|
60 |
# define pdf_font_descriptor_DEFINED
|
|
|
61 |
typedef struct pdf_font_descriptor_s pdf_font_descriptor_t;
|
|
|
62 |
#endif
|
|
|
63 |
|
|
|
64 |
/* ================ Procedures ================ */
|
|
|
65 |
|
|
|
66 |
/*
|
|
|
67 |
* Allocate a FontDescriptor, initializing the FontType and rid from the
|
|
|
68 |
* gs_font.
|
|
|
69 |
*/
|
|
|
70 |
int pdf_font_descriptor_alloc(gx_device_pdf *pdev,
|
|
|
71 |
pdf_font_descriptor_t **ppfd,
|
|
|
72 |
gs_font_base *font, bool embed);
|
|
|
73 |
|
|
|
74 |
/*
|
|
|
75 |
* Get the object ID of a FontDescriptor.
|
|
|
76 |
*/
|
|
|
77 |
long pdf_font_descriptor_id(const pdf_font_descriptor_t *pfd);
|
|
|
78 |
|
|
|
79 |
/*
|
|
|
80 |
* Get the FontType of a FontDescriptor.
|
|
|
81 |
*/
|
|
|
82 |
font_type pdf_font_descriptor_FontType(const pdf_font_descriptor_t *pfd);
|
|
|
83 |
|
|
|
84 |
/*
|
|
|
85 |
* Get the embedding status of a FontDescriptor.
|
|
|
86 |
*/
|
|
|
87 |
bool pdf_font_descriptor_embedding(const pdf_font_descriptor_t *pfd);
|
|
|
88 |
|
|
|
89 |
/*
|
|
|
90 |
* Check for subset font.
|
|
|
91 |
*/
|
|
|
92 |
bool pdf_font_descriptor_is_subset(const pdf_font_descriptor_t *pfd);
|
|
|
93 |
|
|
|
94 |
/*
|
|
|
95 |
* Return a reference to the FontName of a FontDescriptor, similar to
|
|
|
96 |
* pdf_base_font_name.
|
|
|
97 |
*/
|
|
|
98 |
gs_string *pdf_font_descriptor_name(pdf_font_descriptor_t *pfd);
|
|
|
99 |
|
|
|
100 |
/*
|
|
|
101 |
* Return the (copied, subset or complete) font associated with a FontDescriptor.
|
|
|
102 |
* This procedure probably shouldn't exist....
|
|
|
103 |
*/
|
|
|
104 |
gs_font_base *pdf_font_descriptor_font(const pdf_font_descriptor_t *pfd, bool complete);
|
|
|
105 |
|
|
|
106 |
/*
|
|
|
107 |
* Drop the copied complete font associated with a FontDescriptor.
|
|
|
108 |
*/
|
|
|
109 |
void pdf_font_descriptor_drop_complete_font(const pdf_font_descriptor_t *pfd);
|
|
|
110 |
|
|
|
111 |
/*
|
|
|
112 |
* Return a reference to the name of a FontDescriptor's base font, per
|
|
|
113 |
* pdf_base_font_name.
|
|
|
114 |
*/
|
|
|
115 |
gs_string *pdf_font_descriptor_base_name(const pdf_font_descriptor_t *pfd);
|
|
|
116 |
|
|
|
117 |
/*
|
|
|
118 |
* Copy a glyph from a font to the stable copy. Return 0 if this is a
|
|
|
119 |
* new glyph, 1 if it was already copied.
|
|
|
120 |
*/
|
|
|
121 |
int pdf_font_used_glyph(pdf_font_descriptor_t *pfd, gs_glyph glyph,
|
|
|
122 |
gs_font_base *font);
|
|
|
123 |
|
|
|
124 |
/*
|
|
|
125 |
* Compute the FontDescriptor metrics for a font.
|
|
|
126 |
*/
|
|
|
127 |
int pdf_compute_font_descriptor(pdf_font_descriptor_t *pfd);
|
|
|
128 |
|
|
|
129 |
/*
|
|
|
130 |
* Finish a FontDescriptor by computing the metric values, and then
|
|
|
131 |
* writing the associated embedded font if any.
|
|
|
132 |
*/
|
|
|
133 |
int pdf_finish_FontDescriptor(gx_device_pdf *pdev,
|
|
|
134 |
pdf_font_descriptor_t *pfd);
|
|
|
135 |
|
|
|
136 |
int pdf_finish_font_descriptors(gx_device_pdf *pdev,
|
|
|
137 |
int (*finish_proc)(gx_device_pdf *,
|
|
|
138 |
pdf_font_descriptor_t *));
|
|
|
139 |
/*
|
|
|
140 |
* Write a FontDescriptor.
|
|
|
141 |
*/
|
|
|
142 |
int pdf_write_FontDescriptor(gx_device_pdf *pdev,
|
|
|
143 |
pdf_font_descriptor_t *pfd);
|
|
|
144 |
|
|
|
145 |
/*
|
|
|
146 |
* Release a FontDescriptor components.
|
|
|
147 |
*/
|
|
|
148 |
int pdf_release_FontDescriptor_components(gx_device_pdf *pdev, pdf_font_descriptor_t *pfd);
|
|
|
149 |
|
|
|
150 |
#endif /* gdevpdtd_INCLUDED */
|