summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--html/en/drv/pdf.html6
-rw-r--r--html/en/history.html2
-rw-r--r--mak.vc9/cd_pdflib.vcproj2
-rw-r--r--src/cd_pdflib.mak7
-rw-r--r--src/pdflib/pdflib/p_3d.c2
-rw-r--r--src/pdflib/pdflib/p_actions.c150
-rw-r--r--src/pdflib/pdflib/p_afm.c4
-rw-r--r--src/pdflib/pdflib/p_annots.c472
-rw-r--r--src/pdflib/pdflib/p_block.c4
-rw-r--r--src/pdflib/pdflib/p_bmp.c4
-rw-r--r--src/pdflib/pdflib/p_ccitt.c2
-rw-r--r--src/pdflib/pdflib/p_cid.c2
-rw-r--r--src/pdflib/pdflib/p_color.c131
-rw-r--r--src/pdflib/pdflib/p_color.h2
-rw-r--r--src/pdflib/pdflib/p_defopt.h36
-rw-r--r--src/pdflib/pdflib/p_document.c311
-rw-r--r--src/pdflib/pdflib/p_draw.c2
-rw-r--r--src/pdflib/pdflib/p_encoding.c16
-rw-r--r--src/pdflib/pdflib/p_fields.c2
-rw-r--r--src/pdflib/pdflib/p_filter.c2
-rw-r--r--src/pdflib/pdflib/p_font.c200
-rw-r--r--src/pdflib/pdflib/p_font.h13
-rw-r--r--src/pdflib/pdflib/p_generr.h67
-rw-r--r--src/pdflib/pdflib/p_gif.c7
-rw-r--r--src/pdflib/pdflib/p_gstate.c43
-rw-r--r--src/pdflib/pdflib/p_hkscmyk.h2
-rw-r--r--src/pdflib/pdflib/p_hkslab.h2
-rw-r--r--src/pdflib/pdflib/p_hyper.c62
-rw-r--r--src/pdflib/pdflib/p_icc.c2
-rw-r--r--src/pdflib/pdflib/p_icc.h2
-rw-r--r--src/pdflib/pdflib/p_icc9809.h2
-rw-r--r--src/pdflib/pdflib/p_icclib.c10
-rw-r--r--src/pdflib/pdflib/p_icclib.h9
-rw-r--r--src/pdflib/pdflib/p_image.c109
-rw-r--r--src/pdflib/pdflib/p_image.h10
-rw-r--r--src/pdflib/pdflib/p_intern.h52
-rw-r--r--src/pdflib/pdflib/p_jpeg.c5
-rw-r--r--src/pdflib/pdflib/p_jpx.c2
-rw-r--r--src/pdflib/pdflib/p_kerning.c2
-rw-r--r--src/pdflib/pdflib/p_keyconn.h60
-rw-r--r--src/pdflib/pdflib/p_layer.c4
-rw-r--r--src/pdflib/pdflib/p_layer.h2
-rw-r--r--src/pdflib/pdflib/p_mbox.c76
-rw-r--r--src/pdflib/pdflib/p_object.c27
-rw-r--r--src/pdflib/pdflib/p_opi.c2
-rw-r--r--src/pdflib/pdflib/p_page.c149
-rw-r--r--src/pdflib/pdflib/p_page.h2
-rw-r--r--src/pdflib/pdflib/p_pantlab.h2
-rw-r--r--src/pdflib/pdflib/p_params.c66
-rw-r--r--src/pdflib/pdflib/p_params.h422
-rw-r--r--src/pdflib/pdflib/p_pattern.c8
-rw-r--r--src/pdflib/pdflib/p_pdi.c3
-rw-r--r--src/pdflib/pdflib/p_pfm.c44
-rw-r--r--src/pdflib/pdflib/p_photoshp.c2
-rw-r--r--src/pdflib/pdflib/p_png.c426
-rw-r--r--src/pdflib/pdflib/p_shading.c12
-rw-r--r--src/pdflib/pdflib/p_subsett.c2
-rw-r--r--src/pdflib/pdflib/p_table.c2
-rw-r--r--src/pdflib/pdflib/p_tagged.c4
-rw-r--r--src/pdflib/pdflib/p_tagged.h2
-rw-r--r--src/pdflib/pdflib/p_template.c23
-rw-r--r--src/pdflib/pdflib/p_text.c421
-rw-r--r--src/pdflib/pdflib/p_textflow.c2
-rw-r--r--src/pdflib/pdflib/p_tiff.c128
-rw-r--r--src/pdflib/pdflib/p_truetype.c9
-rw-r--r--src/pdflib/pdflib/p_type1.c126
-rw-r--r--src/pdflib/pdflib/p_type3.c15
-rw-r--r--src/pdflib/pdflib/p_util.c253
-rw-r--r--src/pdflib/pdflib/p_xgstate.c16
-rw-r--r--src/pdflib/pdflib/p_xmp.c7
-rw-r--r--src/pdflib/pdflib/pdflib.c172
-rw-r--r--src/pdflib/pdflib/pdflib.h9
-rw-r--r--src/sim/cd_truetype.c3
73 files changed, 2730 insertions, 1531 deletions
diff --git a/html/en/drv/pdf.html b/html/en/drv/pdf.html
index 129dd69..22e0a44 100644
--- a/html/en/drv/pdf.html
+++ b/html/en/drv/pdf.html
@@ -17,12 +17,12 @@
format's copyrights are property of <a href="http://www.adobe.com" target="_top">Adobe Systems</a>. </p>
<p>This driver is very similar to the PS driver but it uses the PDFlib library to generate the PDF (<a href="http://www.pdflib.com/">http://www.pdflib.com/</a>).
There are two PDFlib licenses available, one commercial and one free with a flexible license, see
- <a href="http://www.pdflib.org/purchase/license-lite.html">PDFlib Lite License</a>. The CD_PDF driver works with both
+ <a href="http://www.pdflib.com/products/pdflib-family/pdflib-lite/pdflib-lite-licensing/">PDFlib Lite License</a>. The CD_PDF driver works with both
versions. </p>
<p>By default the pre-compiled library in the distribution uses the PDF Lite version code. The configuration of the PDF Lite code
included does not supports image
- file formats.&nbsp;The current PDF Lite version is 7.0.2.</p>
- <p>PDFlib Copyright (c) 1997-2007 Thomas Merz and PDFlib GmbH. All rights reserved. Applications that use this driver
+ file formats.&nbsp;The current PDF Lite version is 7.0.4p4.</p>
+ <p>PDFlib Copyright (c) 1997-2009 Thomas Merz and PDFlib GmbH. All rights reserved. Applications that use this driver
are subject to the <a href="../../download/PDFlib-Lite-license.pdf">PDFlib GmbH License Agreement</a>.</p>
<h3>Use</h3>
diff --git a/html/en/history.html b/html/en/history.html
index 1605040..795c285 100644
--- a/html/en/history.html
+++ b/html/en/history.html
@@ -24,6 +24,8 @@
<li><span class="style1">Changed</span><span class="hist_changed">:</span>
Freetype updated to version 2.3.11.</li>
<li><span class="style1">Changed</span><span class="hist_changed">:</span>
+ PDFLib Lite updated to version 7.0.4p4.</li>
+ <li><span class="style1">Changed</span><span class="hist_changed">:</span>
return value to boolean of <strong>CanvasIsPointInRegion</strong> and
<strong>cd.UseContextPlus</strong> in Lua.</li>
<li><span style="color: #008000">Changed:</span>
diff --git a/mak.vc9/cd_pdflib.vcproj b/mak.vc9/cd_pdflib.vcproj
index 86f5c68..453d994 100644
--- a/mak.vc9/cd_pdflib.vcproj
+++ b/mak.vc9/cd_pdflib.vcproj
@@ -42,7 +42,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\src\pdflib\font;..\src\pdflib\flate;..\src\pdflib\pdcore;..\src\pdflib\pdflib"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;NO_vsnprintf"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;NO_vsnprintf;_CRT_SECURE_NO_WARNINGS"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
diff --git a/src/cd_pdflib.mak b/src/cd_pdflib.mak
index 194c36a..a185d19 100644
--- a/src/cd_pdflib.mak
+++ b/src/cd_pdflib.mak
@@ -14,14 +14,9 @@ ifeq ($(TEC_UNAME), sparc)
DEFINES = WORDS_BIGENDIAN
endif
-# Changes to PDFlib-Lite-7.0.0p3 (search for CDPDF):
+# Changes to PDFlib-Lite-7.0.4p4 (search for CDPDF):
# pdflib/pdcore/pc_config.h - added default PDF_PLATFORM
# pdflib/pdflib/p_intern.h - removed support for other image formats, leave this to IM */
-# pdflib/pdflib/p_png.c - added some type casts, fixed position of pdf_png_read_data, renamed flate to pdf_comp_flate.
-# pdflib/pdflib/p_gif.c - added missing pdf_cleanup_gif
-# pdflib/pdflib/p_jpeg.c - added missing pdf_cleanup_jpeg
-# pdflib/pdflib/p_tiff.c - fixed pdf_is_TIFF_file definition
-# pdflib/pdflib/p_image.h - replaced toff_t by pdc_uint32
srcdir := pdflib/font
INCLUDES := $(INCLUDES) $(srcdir)
diff --git a/src/pdflib/pdflib/p_3d.c b/src/pdflib/pdflib/p_3d.c
index 033c834..3a14306 100644
--- a/src/pdflib/pdflib/p_3d.c
+++ b/src/pdflib/pdflib/p_3d.c
@@ -9,7 +9,7 @@
| available, please check http://www.pdflib.com. |
*---------------------------------------------------------------------------*/
-/* $Id: p_3d.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_3d.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib 3D functions routines
*
diff --git a/src/pdflib/pdflib/p_actions.c b/src/pdflib/pdflib/p_actions.c
index f3c42fc..fb15ca7 100644
--- a/src/pdflib/pdflib/p_actions.c
+++ b/src/pdflib/pdflib/p_actions.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_actions.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_actions.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib actions handling routines
*
@@ -36,7 +36,8 @@ typedef enum
pdf_javascript = (1<<9),
pdf_setocgstate = (1<<10),
pdf_trans = (1<<11),
- pdf_goto3dview = (1<<12)
+ pdf_goto3dview = (1<<12),
+ pdf_movie = (1<<13)
}
pdf_actiontype;
@@ -55,6 +56,7 @@ static const pdc_keyconn pdf_action_pdfkeylist[] =
{"SetOCGState", pdf_setocgstate},
{"Trans", pdf_trans},
{"GoTo3DView", pdf_goto3dview},
+ {"Movie", pdf_movie},
{NULL, 0}
};
@@ -116,10 +118,20 @@ static const pdc_keyconn pdf_filename_keylist[] =
{NULL, 0}
};
+#define PDF_MIN_MOVIEKEY 3
+
static const pdc_keyconn pdf_operation_pdfkeylist[] =
{
+ /* Launch */
{"open", 1},
{"print", 2},
+
+ /* Movie */
+ {"Play", PDF_MIN_MOVIEKEY},
+ {"Stop", 4},
+ {"Pause", 5},
+ {"Resume", 6},
+
{NULL, 0}
};
@@ -131,6 +143,9 @@ static const pdc_keyconn pdf_3dview_keylist[] =
+
+
+
#define PDF_LAYER_FLAG PDC_OPT_UNSUPP
#define PDF_JAVASCRIPT_FLAG PDC_OPT_UNSUPP
@@ -139,7 +154,7 @@ static const pdc_keyconn pdf_3dview_keylist[] =
static const pdc_defopt pdf_create_action_options[] =
{
/* deprecated */
- {"actionwarning", pdc_booleanlist, PDC_OPT_NONE, 1, 1,
+ {"actionwarning", pdc_booleanlist, PDC_OPT_PDFLIB_7, 1, 1,
0.0, 0.0, NULL},
{"hypertextencoding", pdc_stringlist, PDC_OPT_NONE, 1, 1,
@@ -170,7 +185,7 @@ static const pdc_defopt pdf_create_action_options[] =
0.0, PDC_USHRT_MAX, NULL},
{"script", pdc_stringlist, PDF_JAVASCRIPT_FLAG, 1, 1,
- 0.0, PDC_USHRT_MAX, NULL},
+ 0.0, PDC_INT_MAX, NULL},
{"scriptname", pdc_stringlist, PDF_JAVASCRIPT_FLAG, 1, 1,
0.0, PDC_USHRT_MAX, NULL},
@@ -208,7 +223,7 @@ static const pdc_defopt pdf_create_action_options[] =
{"3dview", pdc_3dviewhandle, PDF_3DVIEW_FLAG, 1, 1,
0.0, 0.0, pdf_3dview_keylist},
- {"target", pdc_stringlist, PDF_3DVIEW_FLAG, 1, 1,
+ {"target", pdc_stringlist, PDC_OPT_NONE, 1, 1,
0.0, PDC_USHRT_MAX, NULL},
{"transition", pdc_keywordlist, PDC_OPT_PDC_1_5, 1, 1,
@@ -229,6 +244,7 @@ typedef struct pdf_action_s
pdf_dest *dest;
pdc_encoding hypertextencoding;
char *filename;
+ char *nativefilename;
char *parameters;
char *operation;
char *defaultdir;
@@ -259,6 +275,7 @@ pdf_reclaim_action(void *item)
action->dest = NULL;
action->hypertextencoding = pdc_invalidenc;
action->filename = NULL;
+ action->nativefilename = NULL;
action->parameters = NULL;
action->operation = NULL;
action->defaultdir = NULL;
@@ -285,6 +302,7 @@ pdf_release_action(void *context, void *item)
pdf_action *action = (pdf_action *) item;
pdf_cleanup_destination(p, action->dest);
+ action->dest = NULL;
if (action->filename)
{
@@ -292,6 +310,12 @@ pdf_release_action(void *context, void *item)
action->filename = NULL;
}
+ if (action->nativefilename)
+ {
+ pdc_free(p->pdc, action->nativefilename);
+ action->nativefilename = NULL;
+ }
+
if (action->parameters)
{
pdc_free(p->pdc, action->parameters);
@@ -322,6 +346,7 @@ pdf_release_action(void *context, void *item)
action->namelist = NULL;
}
+
}
static pdc_ced pdf_action_ced =
@@ -466,20 +491,26 @@ pdf__create_action(PDF *p, const char *type, const char *optlist)
for (i = 0; ; i++)
{
keyword = pdf_filename_keylist[i].word;
- if (keyword)
- {
- if (pdc_get_optvalues(keyword, resopts, NULL, &strlist))
- {
- if (!pdf_opt_effectless(p, keyword, atype,
- (pdf_actiontype) pdf_filename_keylist[i].code))
- {
- action->filename =
- (char *) pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM);
- }
- }
- }
- else
+ if (keyword == NULL)
break;
+
+ if (!pdc_get_optvalues(keyword, resopts, NULL, NULL) ||
+ pdf_opt_effectless(p, keyword, atype,
+ (pdf_actiontype) pdf_filename_keylist[i].code))
+ continue;
+
+ /* DON'T change order */
+
+ /* native filename */
+ if (!i)
+ action->nativefilename = pdf_get_opt_filename(p, keyword, resopts,
+ htenc, htcp);
+
+ /* Unicode filename */
+ pdf_get_opt_textlist(p, keyword, resopts, htenc, htcp, pdc_true,
+ NULL, &action->filename, NULL);
+
+ pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM);
}
keyword = "parameters";
@@ -490,9 +521,18 @@ pdf__create_action(PDF *p, const char *type, const char *optlist)
keyword = "operation";
if (pdc_get_optvalues(keyword, resopts, &k, NULL) &&
- !pdf_opt_effectless(p, keyword, atype, pdf_launch))
+ !pdf_opt_effectless(p, keyword, atype,
+ (pdf_actiontype) (pdf_launch | pdf_movie)))
+ {
+ if ((atype == pdf_launch && k >= PDF_MIN_MOVIEKEY) ||
+ (atype == pdf_movie && k < PDF_MIN_MOVIEKEY))
+ {
+ pdc_error(p->pdc, PDC_E_OPT_ILLKEYWORD, keyword,
+ pdc_get_keyword(k, pdf_operation_pdfkeylist), 0, 0);
+ }
action->operation =
(char *) pdc_get_keyword(k, pdf_operation_pdfkeylist);
+ }
keyword = "defaultdir";
if (pdc_get_optvalues(keyword, resopts, NULL, NULL) &&
@@ -648,12 +688,18 @@ pdf_write_action(PDF *p, pdf_action *action, pdc_id next_id)
/* Windows-specific launch parameters */
pdc_puts(p->out, "/Win");
pdc_begin_dict(p->out); /* Win dict */
- pdc_printf(p->out, "/F");
- pdf_put_hypertext(p, action->filename);
+ pdc_puts(p->out, "/F");
+ pdf_put_pdffilename(p, action->nativefilename);
pdc_puts(p->out, "\n");
+ if (p->compatibility >= PDC_1_7)
+ {
+ pdc_puts(p->out, "/UF");
+ pdf_put_pdfunifilename(p, action->filename);
+ pdc_puts(p->out, "\n");
+ }
if (action->parameters)
{
- pdc_printf(p->out, "/P");
+ pdc_puts(p->out, "/P");
pdf_put_hypertext(p, action->parameters);
pdc_puts(p->out, "\n");
pdc_free(p->pdc, action->parameters);
@@ -661,14 +707,14 @@ pdf_write_action(PDF *p, pdf_action *action, pdc_id next_id)
}
if (action->operation)
{
- pdc_printf(p->out, "/O");
+ pdc_puts(p->out, "/O");
pdf_put_hypertext(p, action->operation);
pdc_puts(p->out, "\n");
action->operation = NULL;
}
if (action->defaultdir)
{
- pdc_printf(p->out, "/D");
+ pdc_puts(p->out, "/D");
pdf_put_hypertext(p, action->defaultdir);
pdc_puts(p->out, "\n");
pdc_free(p->pdc, action->defaultdir);
@@ -681,9 +727,15 @@ pdf_write_action(PDF *p, pdf_action *action, pdc_id next_id)
pdc_puts(p->out, "/F");
pdc_begin_dict(p->out); /* F dict */
pdc_puts(p->out, "/Type/Filespec\n");
- pdc_printf(p->out, "/F");
- pdf_put_pdffilename(p, action->filename);
+ pdc_puts(p->out, "/F");
+ pdf_put_pdffilename(p, action->nativefilename);
pdc_puts(p->out, "\n");
+ if (p->compatibility >= PDC_1_7)
+ {
+ pdc_puts(p->out, "/UF");
+ pdf_put_pdfunifilename(p, action->filename);
+ pdc_puts(p->out, "\n");
+ }
pdc_end_dict(p->out); /* F dict */
}
@@ -711,7 +763,7 @@ pdf_write_action(PDF *p, pdf_action *action, pdc_id next_id)
switch (action->atype)
{
case pdf_named:
- pdc_printf(p->out, "/N");
+ pdc_puts(p->out, "/N");
pdf_put_pdfname(p, action->menuname);
pdc_puts(p->out, "\n");
@@ -801,6 +853,7 @@ pdf_write_action(PDF *p, pdf_action *action, pdc_id next_id)
break;
}
+ /* Movie */
pdc_end_dict(p->out); /* Action dict */
@@ -822,19 +875,27 @@ static const pdc_keyconn pdf_annotevent_keylist[] =
{"up", 4},
{"focus", 5},
{"blur", 6},
+ {"open", 7},
+ {"close", 8},
+ {"visible", 9},
+ {"invisible", 10},
{NULL, 0}
};
static const pdc_keyconn pdf_annotevent_pdfkeylist[] =
{
- {"A", 0},
- {"E", 1},
- {"X", 2},
- {"D", 3},
- {"U", 4},
- {"Fo", 5},
- {"Bl", 6},
- {NULL, 0}
+ {"A", 0},
+ {"E", 1},
+ {"X", 2},
+ {"D", 3},
+ {"U", 4},
+ {"Fo", 5},
+ {"Bl", 6},
+ {"PO", 7},
+ {"PC", 8},
+ {"PV", 9},
+ {"PI", 10},
+ {NULL, 0}
};
static int pdf_annotevent_beginjava = 99;
@@ -862,6 +923,18 @@ static const pdc_defopt pdf_annotevent_options[] =
{"blur", pdc_actionhandle, PDC_OPT_NONE, 1, PDC_USHRT_MAX,
0.0, 0.0, NULL},
+ {"open", pdc_actionhandle, PDC_OPT_PDC_1_5, 1, PDC_USHRT_MAX,
+ 0.0, 0.0, NULL},
+
+ {"close", pdc_actionhandle, PDC_OPT_PDC_1_5, 1, PDC_USHRT_MAX,
+ 0.0, 0.0, NULL},
+
+ {"visible", pdc_actionhandle, PDC_OPT_PDC_1_5, 1, PDC_USHRT_MAX,
+ 0.0, 0.0, NULL},
+
+ {"invisible", pdc_actionhandle, PDC_OPT_PDC_1_5, 1, PDC_USHRT_MAX,
+ 0.0, 0.0, NULL},
+
PDC_OPT_TERMINATE
};
@@ -884,7 +957,7 @@ static int pdf_bookmarkevent_beginjava = 99;
static const pdc_defopt pdf_bookmarkevent_options[] =
{
- {"activate", pdc_actionhandle, PDC_OPT_NONE, 1, 1,
+ {"activate", pdc_actionhandle, PDC_OPT_NONE, 1, PDC_USHRT_MAX,
0.0, 0.0, NULL},
PDC_OPT_TERMINATE
@@ -1059,12 +1132,13 @@ pdf_parse_and_write_actionlist(PDF *p, pdf_event_object eventobj,
/* write action objects */
if (act_idlist != NULL)
{
+ ret_id = PDC_BAD_ID;
if (nsact == 1)
{
action = (pdf_action *) &pdc_vtr_at(p->actions, actlist[0],
pdf_action);
if (action->obj_id == PDC_BAD_ID)
- ret_id = pdf_write_action(p, action, PDC_BAD_ID);
+ ret_id = pdf_write_action(p, action, ret_id);
else
ret_id = action->obj_id;
}
@@ -1077,8 +1151,6 @@ pdf_parse_and_write_actionlist(PDF *p, pdf_event_object eventobj,
ret_id = pdf_write_action(p, action, ret_id);
}
}
- else
- ret_id = PDC_BAD_ID;
act_idlist[code] = ret_id;
}
}
diff --git a/src/pdflib/pdflib/p_afm.c b/src/pdflib/pdflib/p_afm.c
index 8de04a5..8b7c957 100644
--- a/src/pdflib/pdflib/p_afm.c
+++ b/src/pdflib/pdflib/p_afm.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_afm.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_afm.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib AFM parsing routines
*
@@ -218,7 +218,7 @@ pdf_parse_afm(
static const char fn[] = "pdf_parse_afm";
fnt_font_metric *ftm = &font->ft.m;
const char *afmtype = NULL;
- char **wordlist, *keyword, *arg1;
+ char **wordlist = NULL, *keyword, *arg1;
char line[AFM_LINEBUF];
int i, cmp, lo, hi, nwords, nglyphs = 0, nline = 0;
int tablen = ((sizeof keyStrings) / (sizeof (char *)));
diff --git a/src/pdflib/pdflib/p_annots.c b/src/pdflib/pdflib/p_annots.c
index b38da91..a8b74d7 100644
--- a/src/pdflib/pdflib/p_annots.c
+++ b/src/pdflib/pdflib/p_annots.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_annots.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_annots.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib routines for annnotations
*
@@ -45,7 +45,8 @@ typedef enum
ann_polyline = (1<<13),
ann_popup = (1<<14),
ann_fileattachment = (1<<15),
- ann_3d = (1<<16)
+ ann_3d = (1<<16),
+ ann_movie = (1<<17)
}
pdf_annottype;
@@ -68,6 +69,7 @@ static const pdc_keyconn pdf_annottype_pdfkeylist[] =
{"Popup", ann_popup},
{"FileAttachment", ann_fileattachment},
{"3D", ann_3d},
+ {"Movie", ann_movie},
{NULL, 0}
};
@@ -98,20 +100,21 @@ typedef enum
anndict_inklist = (1<<8),
anndict_l = (1<<9),
anndict_le = (1<<10),
- anndict_name = (1<<11),
- anndict_nm = (1<<12),
- anndict_open = (1<<13),
- anndict_parent = (1<<14),
- anndict_popup = (1<<15),
- anndict_q = (1<<16),
- anndict_quadpoints = (1<<17),
- anndict_rect = (1<<18),
- anndict_subtype = (1<<19),
- anndict_t = (1<<20),
- anndict_vertices = (1<<21),
- anndict_3dd = (1<<22),
- anndict_3da = (1<<23),
- anndict_3dv = (1<<24)
+ anndict_movie = (1<<11),
+ anndict_name = (1<<12),
+ anndict_nm = (1<<13),
+ anndict_open = (1<<14),
+ anndict_parent = (1<<15),
+ anndict_popup = (1<<16),
+ anndict_q = (1<<17),
+ anndict_quadpoints = (1<<18),
+ anndict_rect = (1<<19),
+ anndict_subtype = (1<<20),
+ anndict_t = (1<<21),
+ anndict_vertices = (1<<22),
+ anndict_3dd = (1<<23),
+ anndict_3da = (1<<24),
+ anndict_3dv = (1<<25)
}
pdf_anndictentries;
@@ -136,6 +139,7 @@ static const pdc_keyconn pdf_forb_entries_pdfkeylist[] =
{"InkList", anndict_inklist},
{"L", anndict_l},
{"LE", anndict_le},
+ {"Movie", anndict_movie},
{"Parent", anndict_parent},
{"Popup", anndict_popup},
{"Q", anndict_q},
@@ -263,6 +267,46 @@ static const pdc_keyconn pdf_3dview_keylist[] =
};
+typedef enum
+{
+ movieposter_none = -1,
+ movieposter_auto = -2
+}
+pdf_movieposter_states;
+
+static const pdc_keyconn pdf_movieposter_keylist[] =
+{
+ {"none", movieposter_none},
+ {"auto", movieposter_auto},
+ {NULL, 0}
+};
+
+typedef enum
+{
+ playmode_once,
+ playmode_open,
+ playmode_repeat,
+ playmode_palindrome
+}
+pdf_playmode_states;
+
+static const pdc_keyconn pdf_playmode_pdfkeylist[] =
+{
+ {"Once", playmode_once},
+ {"Open", playmode_open},
+ {"Repeat", playmode_repeat},
+ {"Palindrome", playmode_palindrome},
+ {NULL, 0}
+};
+
+#define PDF_ANN_FULLSCREEN -9999
+
+static const pdc_keyconn pdf_windowscale_keylist[] =
+{
+ {"fullscreen", PDF_ANN_FULLSCREEN},
+ {NULL, 0}
+};
+
#define PDF_LAYER_FLAG PDC_OPT_UNSUPP
@@ -270,7 +314,7 @@ static const pdc_keyconn pdf_3dview_keylist[] =
static const pdc_defopt pdf_create_annot_options[] =
{
/* deprecated */
- {"annotwarning", pdc_booleanlist, PDC_OPT_NONE, 1, 1,
+ {"annotwarning", pdc_booleanlist, PDC_OPT_PDFLIB_7, 1, 1,
0.0, 0.0, NULL},
{"usercoordinates", pdc_booleanlist, PDC_OPT_NONE, 1, 1,
@@ -411,6 +455,24 @@ static const pdc_defopt pdf_create_annot_options[] =
{"3dinitialview", pdc_3dviewhandle, PDF_3DANNOT_FLAG, 1, 1,
0.0, 0.0, pdf_3dview_keylist},
+ {"movieposter", pdc_templatehandle, PDC_OPT_NONE, 1, 1,
+ 0.0, 0.0, pdf_movieposter_keylist},
+
+ {"showcontrols", pdc_booleanlist, PDC_OPT_NONE, 1, 1,
+ 0.0, 0.0, NULL},
+
+ {"playmode", pdc_keywordlist, PDC_OPT_NONE, 1, 1,
+ 0.0, 0.0, pdf_playmode_pdfkeylist},
+
+ {"windowscale", pdc_scalarlist, PDC_OPT_NONE, 1, 1,
+ PDC_FLOAT_PREC, PDC_FLOAT_MAX, pdf_windowscale_keylist},
+
+ {"windowposition", pdc_scalarlist, PDC_OPT_NONE, 1, 2,
+ 0.0, 100.0, pdf_position_keylist},
+
+ {"soundvolume", pdc_scalarlist, PDC_OPT_NONE, 1, 1,
+ -1.0, 1.0, NULL},
+
PDC_OPT_TERMINATE
};
@@ -454,6 +516,7 @@ typedef struct pdf_annot_s
char *subject;
char *contents;
char *filename;
+ char *nativefilename;
char *mimetype;
const char *iconname;
pdc_off_t filesize;
@@ -465,6 +528,13 @@ typedef struct pdf_annot_s
char *action;
+
+ pdc_id movieposter;
+ pdc_bool showcontrols;
+ pdf_playmode_states playmode;
+ pdc_scalar windowscale;
+ pdc_scalar windowposition[2];
+ pdc_scalar soundvolume;
}
pdf_annot;
@@ -511,6 +581,7 @@ pdf_reclaim_annot(void *item)
ann->subject = NULL;
ann->contents = NULL;
ann->filename = NULL;
+ ann->nativefilename = NULL;
ann->mimetype = NULL;
ann->iconname = NULL;
ann->filesize = 0;
@@ -524,6 +595,14 @@ pdf_reclaim_annot(void *item)
+
+ ann->movieposter = PDC_BAD_ID /* = movieposter_none */;
+ ann->showcontrols = pdc_false;
+ ann->playmode = playmode_once;
+ ann->windowscale = 0;
+ ann->windowposition[0] = 50.0;
+ ann->windowposition[1] = 50.0;
+ ann->soundvolume = 1.0;
}
static void
@@ -573,6 +652,11 @@ pdf_release_annot(void *context, void *item)
pdc_free(p->pdc, ann->filename);
ann->filename = NULL;
}
+ if (ann->nativefilename)
+ {
+ pdc_free(p->pdc, ann->nativefilename);
+ ann->nativefilename = NULL;
+ }
if (ann->mimetype)
{
pdc_free(p->pdc, ann->mimetype);
@@ -848,6 +932,7 @@ pdf__create_annotation(PDF *p,
char **strlist = NULL;
pdc_scalar *line;
int i, j, k, ns, nss[2];
+ pdf_colortype maxcs = color_rgb;
pdf_ppt *ppt = p->curr_ppt;
pdc_matrix *ctm = &ppt->gstate[ppt->sl].ctm;
@@ -873,6 +958,9 @@ pdf__create_annotation(PDF *p,
pdc_get_pdfversion(p->pdc, PDC_1_5), 0, 0);
}
+ if (p->compatibility >= PDC_1_6)
+ maxcs = color_cmyk;
+
/* Parsing option list */
pdf_set_clientdata(p, &cdata);
resopts = pdc_parse_optionlist(p->pdc, optlist, pdf_create_annot_options,
@@ -931,7 +1019,7 @@ pdf__create_annotation(PDF *p,
ns = pdc_get_optvalues(keyword, resopts, NULL, &strlist);
if (ns)
{
- pdf_parse_coloropt(p, keyword, strlist, ns, (int) color_rgb,
+ pdf_parse_coloropt(p, keyword, strlist, ns, (int) maxcs,
&ann->annotcolor);
}
@@ -1017,7 +1105,7 @@ pdf__create_annotation(PDF *p,
keyword = "orientate";
if (pdc_get_optvalues(keyword, resopts, &ann->orientate, NULL))
pdf_opt_effectless(p, keyword, atype,
- (pdf_annottype) (ann_freetext | ann_stamp));
+ (pdf_annottype) (ann_freetext | ann_stamp));
keyword = "contents";
if (atype == ann_freetext)
@@ -1069,10 +1157,22 @@ pdf__create_annotation(PDF *p,
keyword = "filename";
if (pdc_get_optvalues(keyword, resopts, NULL, NULL) &&
- !pdf_opt_effectless(p, keyword, atype, ann_fileattachment))
+ !pdf_opt_effectless(p, keyword, atype,
+ (pdf_annottype) (ann_fileattachment | ann_movie)))
{
- ann->filename = (char *) pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM);
- ann->filesize = pdf_check_file(p, ann->filename, pdc_true);
+ /* DON'T change order */
+
+ /* native filename */
+ ann->nativefilename = pdf_get_opt_filename(p, keyword, resopts,
+ ann->hypertextencoding, ann->hypertextcodepage);
+
+ pdf_get_opt_textlist(p, keyword, resopts, ann->hypertextencoding,
+ ann->hypertextcodepage, pdc_true,
+ NULL, &ann->filename, NULL);
+ pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM);
+
+ if (atype == ann_fileattachment)
+ ann->filesize = pdf_check_file(p, ann->filename, pdc_true);
}
keyword = "mimetype";
@@ -1115,7 +1215,7 @@ pdf__create_annotation(PDF *p,
(pdf_annottype) (ann_line | ann_polyline |
ann_square | ann_circle)))
{
- pdf_parse_coloropt(p, keyword, strlist, ns, (int) color_rgb,
+ pdf_parse_coloropt(p, keyword, strlist, ns, (int) maxcs,
&ann->interiorcolor);
}
@@ -1173,6 +1273,24 @@ pdf__create_annotation(PDF *p,
keyword = "action";
if (pdc_get_optvalues(keyword, resopts, NULL, &strlist))
{
+ /*
+ * PDF 1.7 allows the A action dictionary only for annotation types
+ * link, widget and screen. Widget is handled elsewhere, and screen
+ * is not yet implemented, so only link is allowed with compatiblity
+ * 1.7.
+ * Must be extended that also screen annotation is accepted here
+ * once it is implemented.
+ */
+ if (p->compatibility >= PDC_1_7)
+ {
+ if (ann->atype != ann_link)
+ {
+ pdc_error(p->pdc, PDF_E_ANN_ACTIONNOTALLOWED,
+ pdc_get_keyword(ann->atype, pdf_annottype_pdfkeylist),
+ 0, 0, 0);
+ }
+ }
+
if (ann->dest)
{
pdf_cleanup_destination(p, ann->dest);
@@ -1188,15 +1306,83 @@ pdf__create_annotation(PDF *p,
+ keyword = "movieposter";
+ if (pdc_get_optvalues(keyword, resopts, &ns, NULL))
+ {
+ pdf_opt_effectless(p, keyword, atype, ann_movie);
+ if (ns < 0)
+ {
+ ann->movieposter = (pdc_id) ns;
+ }
+ else
+ {
+#if 0
+ int cstype = pdf_get_image_colorspace(p, ns);
+
+ if (cstype != (int) DeviceGray && cstype != (int) DeviceRGB)
+ pdc_error(p->pdc, PDF_E_ANN_ILLTEMPLATE, 0, 0, 0, 0);
+#endif
+ ann->movieposter = pdf_get_xobject(p, ns);
+ }
+ }
+
+ keyword = "showcontrols";
+ if (pdc_get_optvalues(keyword, resopts, &ann->showcontrols, NULL))
+ pdf_opt_effectless(p, keyword, atype, ann_movie);
+
+ keyword = "playmode";
+ if (pdc_get_optvalues(keyword, resopts, &ns, NULL))
+ {
+ pdf_opt_effectless(p, keyword, atype, ann_movie);
+ ann->playmode = (pdf_playmode_states) ns;
+ }
+
+ keyword = "windowscale";
+ if (pdc_get_optvalues(keyword, resopts, &ann->windowscale, NULL))
+ pdf_opt_effectless(p, keyword, atype, ann_movie);
+
+ keyword = "windowposition";
+ ns = pdc_get_optvalues(keyword, resopts, ann->windowposition, NULL);
+ if (ns)
+ {
+ pdf_opt_effectless(p, keyword, atype, ann_movie);
+ pdf_set_position_values(p, ann->windowposition, ns);
+ }
+
+ keyword = "soundvolume";
+ if (pdc_get_optvalues(keyword, resopts, &ann->soundvolume, NULL))
+ pdf_opt_effectless(p, keyword, atype, ann_movie);
+
+ /* named annotation, to be accessible by a GoTo3DView or Movie action */
+ if ((atype == ann_3d || atype == ann_movie) && ann->name != NULL)
+ {
+ char *name = (char *) pdc_strdup(p->pdc, ann->name);
+
+ ann->obj_id = pdc_alloc_id(p->out);
+ pdf_insert_name(p, name, names_annots, ann->obj_id);
+ }
+
+ /* work-around for Acrobat 8 (see bug #1225) */
+ if (ann->annotcolor.type == (int) color_none &&
+ (atype == ann_square || atype == ann_circle))
+ {
+ ann->annotcolor.type = (int) color_rgb;
+ ann->annotcolor.value[0] = 1.0;
+ ann->annotcolor.value[1] = 1.0;
+ ann->annotcolor.value[2] = 1.0;
+ }
+
/* required options */
keyword = NULL;
- if (ann->contents == NULL && atype != ann_link && atype != ann_popup)
+ if (ann->contents == NULL &&
+ atype != ann_link && atype != ann_popup && atype != ann_movie)
keyword = "contents";
if (ann->fontsize == 0 && atype == ann_freetext)
keyword = "fontsize";
if (ann->font == -1 && atype == ann_freetext)
keyword = "font";
- if (ann->filename == NULL && atype == ann_fileattachment)
+ if (ann->filename == NULL &&
+ (atype == ann_fileattachment || atype == ann_movie))
keyword = "filename";
if (ann->line == NULL && atype == ann_line)
keyword = "line";
@@ -1302,12 +1488,10 @@ pdf_write_annots_root(PDF *p, pdc_vtr *annots, pdf_widget *widgetlist)
return result;
}
-#define BUFSIZE 256
-
static void
pdf_write_defappstring(PDF *p, pdf_annot *ann)
{
- char buf[BUFSIZE], *bufc;
+ char buf[PDC_GEN_BUFSIZE], *bufc;
pdf_coloropt *fs;
int ct;
@@ -1348,6 +1532,57 @@ pdf_write_defappstring(PDF *p, pdf_annot *ann)
pdc_puts(p->out, "\n");
}
+static void
+pdf_write_colorentry(PDF *p, const char *keyname, pdf_coloropt *coloropt)
+{
+ if (p->compatibility < PDC_1_6)
+ {
+ if (coloropt->type != (int) color_none)
+ {
+ pdc_printf(p->out, "%s[%f %f %f]\n",
+ keyname,
+ coloropt->value[0],
+ coloropt->value[1],
+ coloropt->value[2]);
+ }
+ }
+ else
+ {
+ switch (coloropt->type)
+ {
+ case color_none:
+ /* this doesn't work in Acrobat 8
+ pdc_printf(p->out, "%s[0]\n",
+ keyname);
+ */
+ break;
+
+ case color_gray:
+ pdc_printf(p->out, "%s[%f]\n",
+ keyname,
+ coloropt->value[0]);
+ break;
+
+ case color_rgb:
+ pdc_printf(p->out, "%s[%f %f %f]\n",
+ keyname,
+ coloropt->value[0],
+ coloropt->value[1],
+ coloropt->value[2]);
+ break;
+
+ case color_cmyk:
+ pdc_printf(p->out, "%s[%f %f %f %f]\n",
+ keyname,
+ coloropt->value[0],
+ coloropt->value[1],
+ coloropt->value[2],
+ coloropt->value[3]);
+ break;
+ }
+ }
+}
+
void
pdf_write_page_annots(PDF *p, pdc_vtr *annots)
{
@@ -1449,11 +1684,7 @@ pdf_write_page_annots(PDF *p, pdc_vtr *annots)
}
/* Annotation color */
- if (ann->annotcolor.type != (int) color_none)
- {
- pdc_printf(p->out, "/C[%f %f %f]\n", ann->annotcolor.value[0],
- ann->annotcolor.value[1], ann->annotcolor.value[2]);
- }
+ pdf_write_colorentry(p, "/C", &ann->annotcolor);
/* Title */
if (ann->title && *ann->title)
@@ -1608,7 +1839,7 @@ pdf_write_page_annots(PDF *p, pdc_vtr *annots)
case ann_stamp:
case ann_freetext:
if (ann->orientate)
- pdc_printf(p->out, "/Rotate %d", ann->orientate);
+ pdc_printf(p->out, "/Rotate %d\n", ann->orientate);
break;
default:
@@ -1622,13 +1853,7 @@ pdf_write_page_annots(PDF *p, pdc_vtr *annots)
case ann_polyline:
case ann_square:
case ann_circle:
- if (ann->interiorcolor.type != (int) color_none)
- {
- pdc_printf(p->out, "/IC[%f %f %f]\n",
- ann->interiorcolor.value[0],
- ann->interiorcolor.value[1],
- ann->interiorcolor.value[2]);
- }
+ pdf_write_colorentry(p, "/IC", &ann->interiorcolor);
break;
/* Parent Annotation */
@@ -1651,12 +1876,21 @@ pdf_write_page_annots(PDF *p, pdc_vtr *annots)
/* File specification */
case ann_fileattachment:
{
+ /* see bug #1439 */
+ const char *basename = pdc_file_strip_dirs(ann->nativefilename);
+
pdc_puts(p->out, "/FS");
pdc_begin_dict(p->out); /* FS dict */
pdc_puts(p->out, "/Type/Filespec\n");
pdc_puts(p->out, "/F");
- pdf_put_pdffilename(p, ann->filename);
+ pdf_put_pdffilename(p, basename);
pdc_puts(p->out, "\n");
+ if (p->compatibility >= PDC_1_7)
+ {
+ pdc_puts(p->out, "/UF");
+ pdf_put_pdfunifilename(p, basename);
+ pdc_puts(p->out, "\n");
+ }
/* alloc id for the actual embedded file stream */
ann->obj_id = pdc_alloc_id(p->out);
@@ -1669,6 +1903,110 @@ pdf_write_page_annots(PDF *p, pdc_vtr *annots)
break;
+ case ann_movie:
+ {
+ pdc_puts(p->out, "/Movie");
+ pdc_begin_dict(p->out); /* Movie dict */
+
+ /* File specification */
+ pdc_puts(p->out, "/F");
+ pdc_begin_dict(p->out); /* F dict */
+ pdc_puts(p->out, "/Type/Filespec\n");
+ pdc_puts(p->out, "/F");
+ pdf_put_pdffilename(p, ann->nativefilename);
+ pdc_puts(p->out, "\n");
+ if (p->compatibility >= PDC_1_7)
+ {
+ pdc_puts(p->out, "/UF");
+ pdf_put_pdfunifilename(p, ann->filename);
+ pdc_puts(p->out, "\n");
+ }
+ pdc_end_dict(p->out); /* F dict */
+
+ /* Aspect - not supported by Acrobat */
+ /* Rotate - doesn't work */
+
+ /* Poster */
+ if (ann->movieposter != movieposter_none)
+ {
+ if (ann->movieposter == movieposter_auto)
+ pdc_puts(p->out, "/Poster true");
+ else
+ pdc_objref(p->out, "/Poster", ann->movieposter);
+ }
+
+ pdc_end_dict(p->out); /* Movie dict */
+
+ if (ann->soundvolume != 1.0 ||
+ ann->showcontrols ||
+ ann->playmode != playmode_once ||
+ ann->windowscale != 0)
+ {
+ pdc_puts(p->out, "/A");
+ pdc_begin_dict(p->out); /* Activation dict */
+
+ /* Start, Duration, Rate, Synchronus - not supported */
+
+ /* Volume */
+ if (ann->soundvolume != 1.0)
+ pdc_printf(p->out, "/Volume %f\n", ann->soundvolume);
+
+ /* ShowControls */
+ if (ann->showcontrols)
+ pdc_puts(p->out, "/ShowControls true\n");
+
+ /* Mode */
+ if (ann->playmode != playmode_once)
+ pdc_printf(p->out, "/Mode/%s\n",
+ pdc_get_keyword(ann->playmode,
+ pdf_playmode_pdfkeylist));
+
+ /* window */
+ if (ann->windowscale != 0)
+ {
+ int sx, sy;
+
+ if (ann->windowscale == PDF_ANN_FULLSCREEN)
+ {
+ /* see PDF Reference 1.7, Appendix H, 153. */
+ sx = 999;
+ sy = 1;
+ }
+ else
+ {
+ pdc_scalar sf, sp;
+
+ sp = 1;
+ for (i = 0; ; i++)
+ {
+ sf = sp * ann->windowscale;
+ if (sf == (double) (int) (sf) || i == 5)
+ break;
+ sp *= 10;
+ }
+
+ sx = (int) sf;
+ sy = (int) sp;
+ }
+
+ /* FWScale */
+ pdc_printf(p->out, "/FWScale[%d %d]\n", sx, sy);
+
+ /* FWPosition */
+ if (ann->windowposition[0] != 50.0 ||
+ ann->windowposition[1] != 50.0)
+ {
+ pdc_printf(p->out, "/FWPosition[%f %f]\n",
+ ann->windowposition[0] / 100.0,
+ 1.0 - ann->windowposition[1] / 100.0);
+ }
+ }
+
+ pdc_end_dict(p->out); /* Activation dict */
+ }
+ }
+ break;
+
default:
break;
}
@@ -1704,21 +2042,21 @@ pdf_create_link(
const char *utext,
int len)
{
- char optlist[2048];
+ static const char *fn = "pdf_create_link";
+ char *optlist;
char *name;
int acthdl;
+ name = pdf_convert_name(p, utext, len, PDC_CONV_WITHBOM);
+ optlist = (char *) pdc_malloc(p->pdc, strlen(name) + 80, fn);
+
if (!pdc_stricmp(type, "URI"))
strcpy(optlist, "url {");
else if (!pdc_stricmp(type, "GoTo"))
strcpy(optlist, "destname {");
else if (!pdc_stricmp(type, "GoToR"))
strcpy(optlist, "destination {page 1} filename {");
-
- name = pdf_convert_name(p, utext, len, PDC_CONV_WITHBOM);
strcat(optlist, name);
- pdc_free(p->pdc, name);
-
strcat(optlist, "}");
acthdl = pdf__create_action(p, type, optlist);
@@ -1730,6 +2068,9 @@ pdf_create_link(
strcat(optlist, annopts);
pdf__create_annotation(p, llx, lly, urx, ury, "Link", optlist);
}
+
+ pdc_free(p->pdc, optlist);
+ pdc_free(p->pdc, name);
}
void
@@ -1830,6 +2171,7 @@ pdf__attach_file(
pdf_init_rectangle(p, ann, llx, lly, urx, ury, NULL);
pdf_insert_annot_params(p, ann);
ann->filename = pdc_strdup(p->pdc, filename);
+ ann->nativefilename = pdc_strdup(p->pdc, filename);
ann->filesize = pdf_check_file(p, ann->filename, pdc_true);
ann->contents = pdf_convert_hypertext_depr(p, description, len_descr);
ann->title = pdf_convert_hypertext_depr(p, author, len_auth);
@@ -1891,18 +2233,25 @@ pdf__add_pdflink(
int page,
const char *optlist)
{
- char actoptlist[2048], *sopt;
+ static const char *fn = "pdf__add_pdflink";
+ char *actoptlist, *sopt;
pdf_annot *ann;
int acthdl;
+ size_t size;
if (filename == NULL || *filename == '\0')
pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "filename", 0, 0, 0);
+ if (optlist == NULL)
+ optlist = "";
+
+ size = strlen(filename) + strlen(optlist) + 80;
+ actoptlist = (char *) pdc_malloc(p->pdc, size, fn);
+
/* creating a GoToR action */
actoptlist[0] = 0;
sopt = actoptlist;
sopt += pdc_sprintf(p->pdc, pdc_false, sopt, "filename {%s} ", filename);
- if (optlist == NULL) optlist = "";
sopt += pdc_sprintf(p->pdc, pdc_false, sopt, "destination {%s page %d} ",
optlist, page);
acthdl = pdf__create_action(p, "GoToR", actoptlist);
@@ -1919,6 +2268,8 @@ pdf__add_pdflink(
ann->action = pdc_strdup(p->pdc, actoptlist);
ann->display = disp_noprint;
}
+
+ pdc_free(p->pdc, actoptlist);
}
void
@@ -1930,12 +2281,22 @@ pdf__add_launchlink(
pdc_scalar ury,
const char *filename)
{
- char actoptlist[2048], *sopt;
+ static const char *fn = "pdf__add_launchlink";
+ char *actoptlist, *sopt;
pdf_annot *ann;
int acthdl;
+ size_t size;
if (filename == NULL || *filename == '\0')
pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "filename", 0, 0, 0);
+ size = strlen(filename) + 80;
+ if (p->launchlink_parameters)
+ size += strlen(p->launchlink_parameters);
+ if (p->launchlink_operation)
+ size += strlen(p->launchlink_operation);
+ if (p->launchlink_defaultdir)
+ size += strlen(p->launchlink_defaultdir);
+ actoptlist = (char *) pdc_malloc(p->pdc, size, fn);
/* creating a Launch action */
actoptlist[0] = 0;
@@ -1976,6 +2337,8 @@ pdf__add_launchlink(
ann->action = pdc_strdup(p->pdc, actoptlist);
ann->display = disp_noprint;
}
+
+ pdc_free(p->pdc, actoptlist);
}
void
@@ -2008,12 +2371,14 @@ pdf__add_weblink(
pdc_scalar ury,
const char *url)
{
- char actoptlist[2048];
+ static const char *fn = "pdf__add_weblink";
+ char *actoptlist;
pdf_annot *ann;
int acthdl;
if (url == NULL || *url == '\0')
pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "url", 0, 0, 0);
+ actoptlist = (char *) pdc_malloc(p->pdc, strlen(url) + 80, fn);
/* creating a URI action */
pdc_sprintf(p->pdc, pdc_false, actoptlist, "url {%s} ", url);
@@ -2031,6 +2396,8 @@ pdf__add_weblink(
ann->action = pdc_strdup(p->pdc, actoptlist);
ann->display = disp_noprint;
}
+
+ pdc_free(p->pdc, actoptlist);
}
void
@@ -2073,6 +2440,3 @@ pdf__set_border_dash(PDF *p, pdc_scalar b, pdc_scalar w)
p->border_dash1 = b;
p->border_dash2 = w;
}
-
-
-
diff --git a/src/pdflib/pdflib/p_block.c b/src/pdflib/pdflib/p_block.c
index 24a55a8..ee755d1 100644
--- a/src/pdflib/pdflib/p_block.c
+++ b/src/pdflib/pdflib/p_block.c
@@ -1,7 +1,7 @@
/*---------------------------------------------------------------------------*
| PDFlib - A library for generating PDF on the fly |
+---------------------------------------------------------------------------+
- | Copyright (c) 1997-2007 Thomas Merz and PDFlib GmbH. All rights reserved. |
+ | Copyright (c) 1997-2009 Thomas Merz and PDFlib GmbH. All rights reserved. |
+---------------------------------------------------------------------------+
| |
| This software is subject to the PDFlib license. It is NOT in the |
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_block.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_block.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* Block processing routines (require the PDI library)
*
diff --git a/src/pdflib/pdflib/p_bmp.c b/src/pdflib/pdflib/p_bmp.c
index ac6a974..80c7f0b 100644
--- a/src/pdflib/pdflib/p_bmp.c
+++ b/src/pdflib/pdflib/p_bmp.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_bmp.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_bmp.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* BMP processing for PDFlib
*
@@ -36,7 +36,7 @@ pdf_process_BMP_data(
PDF *p,
int imageslot)
{
- pdf_image *image = &p->images[imageslot];
+ (void) imageslot;
pdc_set_errmsg(p->pdc, PDF_E_UNSUPP_IMAGE, "BMP", 0, 0, 0);
diff --git a/src/pdflib/pdflib/p_ccitt.c b/src/pdflib/pdflib/p_ccitt.c
index ce028b7..28b6239 100644
--- a/src/pdflib/pdflib/p_ccitt.c
+++ b/src/pdflib/pdflib/p_ccitt.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_ccitt.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_ccitt.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* CCITT (Fax G3 and G4) processing for PDFlib
*
diff --git a/src/pdflib/pdflib/p_cid.c b/src/pdflib/pdflib/p_cid.c
index 6d7766c..9e03af3 100644
--- a/src/pdflib/pdflib/p_cid.c
+++ b/src/pdflib/pdflib/p_cid.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_cid.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_cid.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib CID font handling routines
*
diff --git a/src/pdflib/pdflib/p_color.c b/src/pdflib/pdflib/p_color.c
index d996d06..5591da1 100644
--- a/src/pdflib/pdflib/p_color.c
+++ b/src/pdflib/pdflib/p_color.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_color.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_color.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib color routines
*
@@ -162,10 +162,9 @@ pdf_color_components(PDF *p, int slot)
static void
pdf_write_color_values(PDF *p, pdf_color *color, pdf_drawmode drawmode)
{
- static const char *fn = "pdf_write_color_values";
+ static const char fn[] = "pdf_write_color_values";
+
pdf_colorspace * cs = &p->colorspaces[color->cs];
- int cs_bias = p->curr_ppt->cs_bias;
- int pt_bias = p->curr_ppt->pt_bias;
switch (cs->type)
{
@@ -219,12 +218,13 @@ pdf_write_color_values(PDF *p, pdf_color *color, pdf_drawmode drawmode)
}
else if (p->pattern[color->val.pattern].painttype == 2)
{
- pdc_printf(p->out, "/C%d cs ", cs_bias + color->cs);
- pdf_write_color_values(p,
- &p->curr_ppt->cstate[p->curr_ppt->sl].fill, pdf_none);
+ pdf_color *fillcolor = pdf_get_cstate(p, pdf_fill);
+
+ pdc_printf(p->out, "/C%d cs ", color->cs);
+ pdf_write_color_values(p, fillcolor, pdf_none);
}
- pdc_printf(p->out, "/P%d scn\n", pt_bias + color->val.pattern);
+ pdc_printf(p->out, "/P%d scn\n", color->val.pattern);
}
else if (drawmode == pdf_stroke)
{
@@ -234,12 +234,13 @@ pdf_write_color_values(PDF *p, pdf_color *color, pdf_drawmode drawmode)
}
else if (p->pattern[color->val.pattern].painttype == 2)
{
- pdc_printf(p->out, "/C%d CS ", cs_bias + color->cs);
- pdf_write_color_values(p,
- &p->curr_ppt->cstate[p->curr_ppt->sl].stroke, pdf_none);
+ pdf_color *strokecolor = pdf_get_cstate(p, pdf_stroke);
+
+ pdc_printf(p->out, "/C%d CS ", color->cs);
+ pdf_write_color_values(p, strokecolor, pdf_none);
}
- pdc_printf(p->out, "/P%d SCN\n", pt_bias + color->val.pattern);
+ pdc_printf(p->out, "/P%d SCN\n", color->val.pattern);
}
p->pattern[color->val.pattern].used_on_current_page = pdc_true;
@@ -429,41 +430,44 @@ pdf_add_colorspace(PDF *p, pdf_colorspace *cs, pdc_bool inuse)
static void
-pdf_set_color_values(PDF *p, pdf_color *c, pdf_drawmode drawmode)
+pdf_set_color_values(PDF *p, pdf_color *cfill, pdf_color *cstroke,
+ pdf_drawmode drawmode)
{
- pdf_color *current;
pdf_colorspace *cs;
- cs = &p->colorspaces[c->cs];
-
if (drawmode == pdf_stroke || drawmode == pdf_fillstroke)
{
- current = &p->curr_ppt->cstate[p->curr_ppt->sl].stroke;
+ pdf_color *strokecolor = pdf_get_cstate(p, pdf_stroke);
- if (!pdf_color_equal(p, current, c) || PDF_FORCE_OUTPUT())
- {
- if (PDF_GET_STATE(p) != pdf_state_document)
- pdf_write_color_values(p, c, pdf_stroke);
+ if (!pdf_color_equal(p, strokecolor, cstroke) || PDF_FORCE_OUTPUT())
+ {
+ if (PDF_GET_STATE(p) != pdf_state_document)
+ pdf_write_color_values(p, cstroke, pdf_stroke);
- *current = *c;
- }
+ *strokecolor = *cstroke;
+ }
+
+ cs = &p->colorspaces[cstroke->cs];
+ if (!PDF_SIMPLE_COLORSPACE(cs))
+ cs->used_on_current_page = pdc_true;
}
+
if (drawmode == pdf_fill || drawmode == pdf_fillstroke)
{
- current = &p->curr_ppt->cstate[p->curr_ppt->sl].fill;
+ pdf_color *fillcolor = pdf_get_cstate(p, pdf_fill);
- if (!pdf_color_equal(p, current, c) || PDF_FORCE_OUTPUT())
- {
- if (PDF_GET_STATE(p) != pdf_state_document)
- pdf_write_color_values(p, c, pdf_fill);
+ if (!pdf_color_equal(p, fillcolor, cfill) || PDF_FORCE_OUTPUT())
+ {
+ if (PDF_GET_STATE(p) != pdf_state_document)
+ pdf_write_color_values(p, cfill, pdf_fill);
- *current = *c;
- }
- }
+ *fillcolor = *cfill;
+ }
- /* simple colorspaces don't get written */
- if (!PDF_SIMPLE_COLORSPACE(cs))
- cs->used_on_current_page = pdc_true;
+ cs = &p->colorspaces[cfill->cs];
+ if (!PDF_SIMPLE_COLORSPACE(cs))
+ cs->used_on_current_page = pdc_true;
+ }
} /* pdf_set_color_values */
@@ -504,13 +508,12 @@ void
pdf_write_page_colorspaces(PDF *p)
{
int i, total = 0;
- int bias = p->curr_ppt->cs_bias;
for (i = 0; i < p->colorspaces_number; i++)
if (p->colorspaces[i].used_on_current_page)
total++;
- if (total > 0 || bias
+ if (total > 0
)
{
pdc_puts(p->out, "/ColorSpace");
@@ -529,7 +532,7 @@ pdf_write_page_colorspaces(PDF *p)
/* don't write simple color spaces as resource */
if (!PDF_SIMPLE_COLORSPACE(cs))
{
- pdc_printf(p->out, "/C%d", bias + i);
+ pdc_printf(p->out, "/C%d", i);
pdc_objref(p->out, "", cs->obj_id);
}
}
@@ -537,7 +540,6 @@ pdf_write_page_colorspaces(PDF *p)
}
- if (!bias)
pdc_end_dict(p->out); /* color space names */
}
} /* pdf_write_page_colorspaces */
@@ -843,9 +845,15 @@ pdf_setcolor_internal(PDF *p, int drawmode, int colortype,
pdc_scalar c1, pdc_scalar c2, pdc_scalar c3, pdc_scalar c4,
pdf_color *fcolor)
{
- pdf_color c;
+ pdf_color c, cstroke;
pdf_colorspace cs;
+ if (PDF_GET_STATE(p) == pdf_state_pattern &&
+ pdf_get_shading_painttype(p) == 2)
+ {
+ pdc_error(p->pdc, PDF_E_COLOR_INVALSPEC, 0, 0, 0, 0);
+ }
+
/* TODO: synchronize the PDF/X checks below with pdf_check_pdfx_colorspaces
*/
switch (colortype)
@@ -876,6 +884,10 @@ pdf_setcolor_internal(PDF *p, int drawmode, int colortype,
pdf_check_color_values(p, cs.type, c1, c2, c3, c4);
break;
+ case color_spotname:
+ case color_spot:
+ pdc_error(p->pdc, PDF_E_UNSUPP_SPOTCOLOR, 0, 0, 0, 0);
+ break;
case color_pattern:
cs.type = PatternCS;
@@ -887,22 +899,55 @@ pdf_setcolor_internal(PDF *p, int drawmode, int colortype,
{
cs.val.pattern.base = pdc_undef;
c.cs = pdf_add_colorspace(p, &cs, pdc_false);
+ cstroke = c;
}
- else
+ else if (p->pattern[c.val.pattern].painttype == 2)
{
- cs.val.pattern.base = p->curr_ppt->cstate[p->curr_ppt->sl].fill.cs;
- c.cs = pdf_add_colorspace(p, &cs, pdc_true);
+ if (drawmode == pdf_stroke || drawmode == pdf_fillstroke)
+ {
+ pdf_color *strokecolor = pdf_get_cstate(p, pdf_stroke);
+
+ if (p->colorspaces[strokecolor->cs].type == PatternCS)
+ pdc_error(p->pdc, PDF_E_COLOR_INVALPATT, 0, 0, 0, 0);
+
+ cstroke.val.pattern = (int) c1;
+ cs.val.pattern.base = strokecolor->cs;
+ cstroke.cs = pdf_add_colorspace(p, &cs, pdc_true);
+ }
+
+ if (drawmode == pdf_fill || drawmode == pdf_fillstroke)
+ {
+ pdf_color *fillcolor = pdf_get_cstate(p, pdf_fill);
+
+ if (p->colorspaces[fillcolor->cs].type == PatternCS)
+ pdc_error(p->pdc, PDF_E_COLOR_INVALPATT, 0, 0, 0, 0);
+
+ cs.val.pattern.base = fillcolor->cs;
+ c.cs = pdf_add_colorspace(p, &cs, pdc_true);
+ }
}
break;
+ case color_iccbasedgray:
+ case color_iccbasedrgb:
+ case color_iccbasedcmyk:
+ case color_lab:
+ pdc_error(p->pdc, PDF_E_UNSUPP_ICCBASEDCOLOR, 0, 0, 0, 0);
+ break;
}
if (fcolor == NULL)
- pdf_set_color_values(p, &c, (pdf_drawmode) drawmode);
+ {
+ if (colortype != color_pattern)
+ cstroke = c;
+ pdf_set_color_values(p, &c, &cstroke, (pdf_drawmode) drawmode);
+ }
else
+ {
*fcolor = c;
+ }
}
static const pdc_keyconn pdf_fstype_keylist[] =
diff --git a/src/pdflib/pdflib/p_color.h b/src/pdflib/pdflib/p_color.h
index d8a0fa8..4a1f584 100644
--- a/src/pdflib/pdflib/p_color.h
+++ b/src/pdflib/pdflib/p_color.h
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_color.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_color.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib color definitions
*
diff --git a/src/pdflib/pdflib/p_defopt.h b/src/pdflib/pdflib/p_defopt.h
index 6c4a862..f8174c4 100644
--- a/src/pdflib/pdflib/p_defopt.h
+++ b/src/pdflib/pdflib/p_defopt.h
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_defopt.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_defopt.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib shared option definitions and structures
*
@@ -29,6 +29,7 @@
#define PDF_RETURN_BOXFULL "_boxfull"
#define PDF_RETURN_NEXTPAGE "_nextpage"
#define PDF_RETURN_STOP "_stop"
+#define PDF_RETURN_ATMARK "_mark%d"
typedef enum
{
@@ -146,7 +147,7 @@ typedef struct
}
pdf_fit_options;
-typedef struct pdf_fittext_s pdf_fittext;
+typedef struct pdf_fitres_s pdf_fitres;
/* font option definitions */
@@ -155,6 +156,7 @@ typedef struct pdf_fittext_s pdf_fittext;
#define PDF_SUBSETTING_FLAG PDC_OPT_UNSUPP
#define PDF_AUTOCIDFONT_FLAG PDC_OPT_UNSUPP
#define PDF_EMBEDOPENTYPE_FLAG PDC_OPT_UNSUPP
+#define PDF_SKIPPOSTTABLE_FLAG PDC_OPT_UNSUPP
#define PDF_CHARREF_FLAG PDC_OPT_UNSUPP
#define PDF_ESCAPESEQU_FLAG PDC_OPT_UNSUPP
#define PDF_GLYPHCHECK_FLAG PDC_OPT_UNSUPP
@@ -192,7 +194,7 @@ typedef struct pdf_fittext_s pdf_fittext;
0.0, 0.0, pdf_fontstyle_pdfkeylist}, \
\
/* deprecated */ \
- {"fontwarning", pdc_booleanlist, PDC_OPT_NONE, 1, 1, \
+ {"fontwarning", pdc_booleanlist, PDC_OPT_PDFLIB_7, 1, 1, \
0.0, 0.0, NULL}, \
\
{"monospace", pdc_integerlist, PDC_OPT_NONE, 1, 1, \
@@ -228,6 +230,12 @@ typedef struct pdf_fittext_s pdf_fittext;
{"embedopentype", pdc_booleanlist, PDF_EMBEDOPENTYPE_FLAG, 1, 1, \
0.0, 0.0, NULL}, \
\
+ {"skipposttable", pdc_booleanlist, PDF_SKIPPOSTTABLE_FLAG, 1, 1, \
+ 0.0, 0.0, NULL}, \
+\
+ {"dropcorewidths", pdc_booleanlist, PDC_OPT_NONE, 1, 1, \
+ 0.0, 0.0, NULL}, \
+\
{"keepnative", pdc_booleanlist, PDF_KEEPNATIVE_FLAG, 1, 1, \
0.0, 0.0, NULL}, \
\
@@ -255,7 +263,7 @@ typedef struct pdf_fittext_s pdf_fittext;
PDC_FLOAT_MIN, PDC_FLOAT_MAX, NULL}, \
\
/* deprecated */ \
- {"glyphwarning", pdc_booleanlist, PDC_OPT_NONE, 1, 1, \
+ {"glyphwarning", pdc_booleanlist, PDC_OPT_PDFLIB_7, 1, 1, \
0.0, 0.0, NULL}, \
\
{"fillcolor", pdc_stringlist, PDC_OPT_NONE, 1, 5, \
@@ -317,15 +325,15 @@ typedef struct pdf_fittext_s pdf_fittext;
PDC_FLOAT_MIN, PDC_FLOAT_MAX, pdf_underlineposition_keylist}, \
\
/* deprecated */ \
- {"weblink", pdc_stringlist, PDC_OPT_NONE, 1, 1, \
+ {"weblink", pdc_stringlist, PDC_OPT_PDFLIB_7, 1, 1, \
0.0, PDC_INT_MAX, NULL}, \
\
/* deprecated */ \
- {"locallink", pdc_stringlist, PDC_OPT_NONE, 1, 1, \
+ {"locallink", pdc_stringlist, PDC_OPT_PDFLIB_7, 1, 1, \
0.0, PDC_INT_MAX, NULL}, \
\
/* deprecated */ \
- {"pdflink", pdc_stringlist, PDC_OPT_NONE, 1, 1, \
+ {"pdflink", pdc_stringlist, PDC_OPT_PDFLIB_7, 1, 1, \
0.0, PDC_INT_MAX, NULL}, \
\
{"charref", pdc_booleanlist, PDF_CHARREF_FLAG, 1, 1, \
@@ -359,7 +367,7 @@ typedef struct pdf_fittext_s pdf_fittext;
0.0, 0.0, NULL}, \
\
/* deprecated */ \
- {"imagewarning", pdc_booleanlist, PDC_OPT_NONE, 1, 1, \
+ {"imagewarning", pdc_booleanlist, PDC_OPT_PDFLIB_7, 1, 1, \
0.0, 0.0, NULL}, \
\
{"dpi", pdc_scalarlist, PDC_OPT_NONE, 1, 2, \
@@ -459,7 +467,7 @@ void pdf_init_text_options(PDF *p, pdf_text_options *to);
void pdf_get_text_options(PDF *p, pdf_text_options *to, pdc_resopt *resopts);
pdc_resopt *pdf_parse_fittextline_optlist(PDF *p, pdf_text_options *to,
pdf_fit_options *fit, const char *optlist);
-int pdf_fit_textline_internal(PDF *p, pdf_fittext *fitres,
+pdc_bool pdf_fit_textline_internal(PDF *p, pdf_fitres *fitres,
pdf_text_options *to, pdf_fit_options *fit, pdc_matrix *matrix);
void pdf_calculate_textline_size(PDF *p, pdf_text_options *to,
pdf_fit_options *fit, pdc_scalar *width, pdc_scalar *height);
@@ -472,13 +480,13 @@ void pdf_draw_leader_text(PDF *p, pdc_scalar xstart, pdc_scalar ybase,
pdf_text_options *to);
int pdf_get_approximate_uvlist(PDF *p, pdf_font *currfont,
- pdc_encodingvector *ev, int usv, pdc_bool replace, pdc_ushort *uvlist,
- pdc_ushort *cglist);
+ pdc_encodingvector *ev, int usv, pdc_bool replace, pdf_fitres *fitres,
+ pdc_ushort *uvlist, pdc_ushort *cglist);
void pdf_get_input_textformat(pdf_font *currfont,
pdc_text_format *intextformat, int *convflags);
-int pdf_check_textstring(PDF *p, const char *text, int len, int flags,
- pdf_text_options *to, pdc_byte **outtext, int *outlen, int *outcharlen,
- pdc_bool verbose);
+pdc_bool pdf_check_textstring(PDF *p, const char *text, int len, int flags,
+ pdf_text_options *to, pdf_fitres *fittext, pdc_byte **outtext,
+ int *outlen, int *outcharlen, pdc_bool verbose);
pdc_scalar pdf_calculate_textsize(PDF *p, const pdc_byte *text, int len,
int charlen, pdf_text_options *to, int breakchar, pdc_scalar *height,
pdc_bool verbose);
diff --git a/src/pdflib/pdflib/p_document.c b/src/pdflib/pdflib/p_document.c
index 4c00aa3..f9de980 100644
--- a/src/pdflib/pdflib/p_document.c
+++ b/src/pdflib/pdflib/p_document.c
@@ -10,15 +10,13 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_document.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_document.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib document related routines
*
*/
-#undef MVS_TEST
-
#define P_DOCUMENT_C
/* For checking the beta expiration date */
@@ -33,6 +31,8 @@
+#include "pc_strconst.h"
+
#if (defined(WIN32) || defined(OS2)) && !defined(WINCE)
#include <fcntl.h>
@@ -62,8 +62,8 @@ typedef enum
open_bookmarks,
open_thumbnails,
open_fullscreen,
- open_attachments
-
+ open_attachments,
+ open_layers
}
pdf_openmode;
@@ -74,7 +74,7 @@ static const pdc_keyconn pdf_openmode_keylist[] =
{"thumbnails", open_thumbnails},
{"fullscreen", open_fullscreen},
{"attachments", open_attachments},
-
+ {"layers", open_layers},
{NULL, 0}
};
@@ -86,7 +86,7 @@ static const pdc_keyconn pdf_openmode_pdfkeylist[] =
{"UseThumbs", open_thumbnails},
{"FullScreen", open_fullscreen},
{"UseAttachments", open_attachments},
-
+ {"UseOC", open_layers},
{NULL, 0}
};
@@ -125,7 +125,7 @@ static const pdc_keyconn pdf_nonfullscreen_keylist[] =
{"none", open_none},
{"bookmarks", open_bookmarks},
{"thumbnails", open_thumbnails},
-
+ {"layers", open_layers},
{NULL, 0}
};
@@ -235,7 +235,7 @@ static const pdc_keyconn pdc_permissions_keylist[] =
{"pdfx", pdc_keywordlist, PDF_ICC_FLAG, 1, 1, \
0.0, 0.0, pdf_pdfx_keylist}, \
\
- {"compatibility", pdc_keywordlist, PDC_OPT_IGNOREIF1, 1, 1, \
+ {"compatibility", pdc_keywordlist, PDC_OPT_NONE, 1, 1, \
0.0, 0.0, pdf_compatibility_keylist}, \
\
{"flush", pdc_keywordlist, PDC_OPT_NONE, 1, 1, \
@@ -284,10 +284,12 @@ static const pdc_keyconn pdc_permissions_keylist[] =
{"tempdirname", pdc_stringlist, PDF_LINEARIZE_FLAG, 1, 1, \
4.0, 400.0, NULL}, \
-
#if defined(MVS) || defined(MVS_TEST)
#define PDF_DOCUMENT_OPTIONS10 \
\
+ {"filemode", pdc_stringlist, PDC_OPT_NONE, 1, 1, \
+ 0.0, PDF_MAX_NAMESTRING, NULL}, \
+\
{"recordsize", pdc_integerlist, PDF_LINEARIZE_FLAG, 1, 1, \
0.0, 32768.0, NULL}, \
\
@@ -351,6 +353,11 @@ struct pdf_document_s
+#if defined(MVS) || defined(MVS_TEST)
+ char *fopenparams; /* additional fopen() parameter string */
+ char **tempfilenames; /* 2 temporary file names */
+#endif
+
pdc_bool moddate; /* modified date will be created */
char lang[PDF_MAX_LANGCODE + 1]; /* default natural language */
char *action; /* document actions */
@@ -394,6 +401,11 @@ pdf_init_get_document(PDF *p)
+#if defined(MVS) || defined(MVS_TEST)
+ doc->fopenparams = NULL;
+ doc->tempfilenames = NULL;
+#endif
+
doc->moddate = pdc_false;
doc->lang[0] = 0;
doc->action = NULL;
@@ -452,6 +464,20 @@ pdf_cleanup_document_internal(PDF *p)
+#if defined(MVS) || defined(MVS_TEST)
+ if (doc->fopenparams)
+ {
+ pdc_free(p->pdc, doc->fopenparams);
+ doc->fopenparams = NULL;
+ }
+
+ if (doc->tempfilenames)
+ {
+ pdc_cleanup_optstringlist(p->pdc, doc->tempfilenames, 2);
+ doc->tempfilenames = NULL;
+ }
+#endif
+
if (doc->searchindexname)
{
@@ -607,6 +633,8 @@ pdf_parse_and_write_viewerpreferences(PDF *p, const char *optlist,
if (pdc_get_optvalues("nonfullscreenpagemode", resopts, &inum, NULL) &&
inum != (int) open_none)
{
+ if (inum == (int) open_layers)
+ pdc_error(p->pdc, PDF_E_UNSUPP_LAYER, 0, 0, 0, 0);
writevpdict = pdc_true;
if (output) pdc_printf(p->out, "/NonFullScreenPageMode/%s\n",
pdc_get_keyword(inum, pdf_openmode_pdfkeylist));
@@ -687,7 +715,8 @@ pdf_parse_and_write_viewerpreferences(PDF *p, const char *optlist,
pdc_printf(p->out, "/PrintPageRange");
pdc_begin_array(p->out);
for (i = 0; i < nv; i++)
- pdc_printf(p->out, "%d ", prs[i]);
+ /* because of bug #1623: -1 */
+ pdc_printf(p->out, "%d ", prs[i] - 1);
pdc_end_array(p->out);
}
}
@@ -718,7 +747,8 @@ static const pdc_defopt pdf_search_options[] =
};
static void
-pdf_parse_search_optlist(PDF *p, const char *optlist)
+pdf_parse_search_optlist(PDF *p, const char *optlist,
+ pdc_encoding htenc, int htcp)
{
pdf_document *doc = p->document;
pdc_resopt *resopts = NULL;
@@ -727,9 +757,9 @@ pdf_parse_search_optlist(PDF *p, const char *optlist)
resopts = pdc_parse_optionlist(p->pdc, optlist,
pdf_search_options, NULL, pdc_true);
- if (pdc_get_optvalues("filename", resopts, NULL, NULL))
- doc->searchindexname =
- (char *) pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM);
+ if (pdf_get_opt_textlist(p, "filename", resopts, htenc, htcp,
+ pdc_true, NULL, &doc->searchindexname, NULL))
+ pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM);
if (pdc_get_optvalues("indextype", resopts, NULL, NULL))
doc->searchindextype =
@@ -759,6 +789,11 @@ pdf_write_search_indexes(PDF *p)
pdc_puts(p->out, "/Type/Filespec");
pdc_puts(p->out, "/F");
pdf_put_pdffilename(p, doc->searchindexname);
+ if (p->compatibility >= PDC_1_7)
+ {
+ pdc_printf(p->out, "/UF");
+ pdf_put_pdfunifilename(p, doc->searchindexname);
+ }
pdc_end_dict(p->out); /* Index */
pdc_end_dict(p->out); /* Indexes */
pdc_end_array(p->out);
@@ -853,9 +888,9 @@ pdf_parse_attachments_optlist(PDF *p, char **optlists, int ns,
resopts = pdc_parse_optionlist(p->pdc, optlists[i],
pdf_attachments_options, &cdata, pdc_true);
- if (pdc_get_optvalues("filename", resopts, NULL, NULL))
- fat->filename =
- (char *) pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM);
+ if (pdf_get_opt_textlist(p, "filename", resopts, htenc, htcp,
+ pdc_true, NULL, &fat->filename, NULL))
+ pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM);
if (pdf_get_opt_textlist(p, "description", resopts, htenc, htcp,
pdc_true, NULL, &fat->description, NULL))
@@ -881,6 +916,7 @@ pdf_write_attachments(PDF *p)
static const char fn[] = "pdf_write_attachments";
pdf_document *doc = p->document;
pdc_id attachment_id, obj_id;
+ const char *basename;
char *name;
int i;
@@ -894,10 +930,19 @@ pdf_write_attachments(PDF *p)
attachment_id = pdc_begin_obj(p->out, PDC_NEW_ID);
pdc_begin_dict(p->out); /* FS dict */
+ /* see bug #1439 */
+ basename = pdc_file_strip_dirs(fat->filename);
+
pdc_puts(p->out, "/Type/Filespec\n");
pdc_printf(p->out, "/F");
- pdf_put_pdffilename(p, fat->filename);
+ pdf_put_pdffilename(p, basename);
pdc_puts(p->out, "\n");
+ if (p->compatibility >= PDC_1_7)
+ {
+ pdc_printf(p->out, "/UF");
+ pdf_put_pdfunifilename(p, basename);
+ pdc_puts(p->out, "\n");
+ }
if (fat->description != NULL)
{
@@ -921,7 +966,7 @@ pdf_write_attachments(PDF *p)
/* insert name in tree */
if (fat->name == NULL)
- name = pdc_strdup_ext(p->pdc, fat->filename, 0, fn);
+ name = pdc_strdup_ext(p->pdc, basename, 0, fn);
else
name = pdc_strdup_ext(p->pdc, fat->name, 0, fn);
pdf_insert_name(p, name, names_embeddedfiles, attachment_id);
@@ -1066,6 +1111,10 @@ pdf_get_document_common_options(PDF *p, pdc_resopt *resopts, int fcode)
if (pdc_get_optvalues("openmode", resopts, &inum, NULL))
doc->openmode = (pdf_openmode) inum;
+
+ if (doc->openmode == open_layers)
+ pdc_error(p->pdc, PDF_E_UNSUPP_LAYER, 0, 0, 0, 0);
+
if (doc->openmode == open_attachments && p->compatibility < PDC_1_6)
pdc_error(p->pdc, PDC_E_OPT_VERSION, "openmode=attachments",
pdc_get_pdfversion(p->pdc, p->compatibility), 0, 0);
@@ -1101,7 +1150,7 @@ pdf_get_document_common_options(PDF *p, pdc_resopt *resopts, int fcode)
}
if (pdc_get_optvalues("search", resopts, NULL, &strlist))
- pdf_parse_search_optlist(p, strlist[0]);
+ pdf_parse_search_optlist(p, strlist[0], htenc, htcp);
pdc_get_optvalues("moddate", resopts, &doc->moddate, NULL);
@@ -1187,6 +1236,14 @@ pdf_begin_document_internal(PDF *p, const char *optlist, pdc_bool callback)
+#if defined(MVS) || defined(MVS_TEST)
+ if (pdc_get_optvalues("filemode", resopts, NULL, NULL))
+ {
+ doc->fopenparams =
+ (char *) pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM);
+ }
+#endif
+
n_groups = pdc_get_optvalues("groups", resopts, NULL, &groups);
}
@@ -1210,23 +1267,6 @@ pdf_begin_document_internal(PDF *p, const char *optlist, pdc_bool callback)
pdf_get_document_common_options(p, resopts, PDF_FC_BEGIN_DOCUMENT);
- /* deprecated */
- p->bookmark_dest = pdf_init_destination(p);
-
- pdf_init_images(p);
- pdf_init_xobjects(p);
- pdf_init_fonts(p);
- pdf_init_outlines(p);
- pdf_init_annot_params(p);
- pdf_init_colorspaces(p);
- pdf_init_pattern(p);
- pdf_init_shadings(p);
- pdf_init_extgstates(p);
-
-
-
-
-
/* create document digest */
pdc_init_digest(p->out);
@@ -1268,23 +1308,59 @@ pdf_begin_document_internal(PDF *p, const char *optlist, pdc_bool callback)
oc.filename = "";
+#if defined(MVS) || defined(MVS_TEST)
+ oc.fopenparams = doc->fopenparams;
+#endif
- if (!pdc_init_output((void *) p, p->out, doc->compatibility, &oc))
+
+ PDC_TRY(p->pdc)
{
- if (oc.filename && *oc.filename)
+ if (!pdc_init_output((void *) p, p->out, doc->compatibility, &oc))
{
- pdc_set_fopen_errmsg(p->pdc,
- pdc_get_fopen_errnum(p->pdc, PDC_E_IO_WROPEN), "PDF ",
- pdc_errprintf(p->pdc, "%.*s", PDC_ERR_MAXSTRLEN, oc.filename));
+ if (oc.filename && *oc.filename)
+ {
+ pdc_set_fopen_errmsg(p->pdc,
+ pdc_get_fopen_errnum(p->pdc, PDC_E_IO_WROPEN), "PDF ",
+ pdc_errprintf(p->pdc, "%.*s", PDC_ERR_MAXSTRLEN,
+ oc.filename));
+ if (verbose)
+ {
+ pdf_cleanup_document_internal(p);
+ PDC_RETHROW(p->pdc);
+ }
+ }
- if (verbose)
- pdc_error(p->pdc, -1, 0, 0, 0, 0);
+ pdf_cleanup_document_internal(p);
+ PDC_EXIT_TRY(p->pdc);
+ return -1;
}
-
+ }
+ PDC_CATCH(p->pdc)
+ {
pdf_cleanup_document_internal(p);
+ if (verbose)
+ PDC_RETHROW(p->pdc);
+
return -1;
}
+ /* deprecated */
+ p->bookmark_dest = pdf_init_destination(p);
+
+ pdf_init_images(p);
+ pdf_init_xobjects(p);
+ pdf_init_fonts(p);
+ pdf_init_outlines(p);
+ pdf_init_annot_params(p);
+ pdf_init_colorspaces(p);
+ pdf_init_pattern(p);
+ pdf_init_shadings(p);
+ pdf_init_extgstates(p);
+
+
+
+
+
/* Write the constant /ProcSet array once at the beginning */
p->procset_id = pdc_begin_obj(p->out, PDC_NEW_ID);
pdc_puts(p->out, "[/PDF/ImageB/ImageC/ImageI/Text]\n");
@@ -1323,8 +1399,8 @@ pdf__begin_document(PDF *p, const char *filename, int len, const char *optlist)
* The Intel version of the Metrowerks compiler doesn't have setmode().
*/
#if !defined(__MWERKS__) && (defined(WIN32) || defined(OS2))
-#if defined WINCE
- _setmode(fileno(fp), _O_BINARY);
+#if !defined(__BORLANDC__) && !defined(OS2)
+ _setmode(_fileno(fp), _O_BINARY);
#else
setmode(fileno(fp), O_BINARY);
#endif
@@ -1466,58 +1542,121 @@ pdf_get_id_from_nametree(PDF *p, pdf_nametree_type type, const char *name)
return PDC_BAD_ID;
}
+#define PDF_TREE_LEAF_SIZE 32
+
+static char *
+pdf_get_numbered_name(PDF *p, pdf_nametree_type type, int ia, int *in, int nn)
+{
+ int i, j = ia, n = 0;
+
+ for (i = ia; i < p->names_number; i++)
+ {
+ if (p->names[i].type == type)
+ {
+ n++;
+ if (n == nn)
+ {
+ if (in != NULL)
+ *in = i;
+
+ return p->names[i].name;
+ }
+ j = i;
+ }
+ }
+
+ return (in != NULL) ? NULL : p->names[j].name;
+}
+
static pdc_id
pdf_write_names(PDF *p, pdf_nametree_type type)
{
+ static const char fn[] = "pdf_write_names";
pdc_id ret = PDC_BAD_ID;
- int i, ibeg = -1, iend = 0;
+ int i, nnames = 0;
for (i = 0; i < p->names_number; i++)
{
if (p->names[i].type == type)
{
- if (ibeg == -1)
- ibeg = i;
- iend = i;
+ nnames++;
}
}
- if (ibeg > -1)
+ if (nnames)
{
- ret = pdc_begin_obj(p->out, PDC_NEW_ID); /* Names object */
+ char *name;
+ int nleafs, nnodes, ik, il, ia, nn;
+ pdc_id *idlist;
- pdc_begin_dict(p->out); /* Node dict */
+ nnodes = nnames / PDF_TREE_LEAF_SIZE;
+ if (!nnodes)
+ nleafs = nnames;
+ else
+ nleafs = PDF_TREE_LEAF_SIZE;
+ if (nnames > nnodes * nleafs)
+ nnodes++;
- /*
- * Because we have only the 1 tree - the root tree
- * the /Limits entry is not allowed (see chapter 3.8.5).
- *
- pdc_puts(p->out, "/Limits");
+ idlist = (pdc_id *) pdc_malloc(p->pdc,
+ (size_t) (nnodes * sizeof(pdc_id)), fn);
+
+ for (i = 0; i < nnodes; i++)
+ idlist[i] = pdc_alloc_id(p->out);
+
+ ret = pdc_begin_obj(p->out, PDC_NEW_ID); /* Names object */
+ pdc_begin_dict(p->out);
+
+ pdc_puts(p->out, "/Kids");
pdc_begin_array(p->out);
- pdf_put_hypertext(p, p->names[ibeg].name);
- pdf_put_hypertext(p, p->names[iend].name);
+ for (i = 0; i < nnodes; i++)
+ pdc_objref_c(p->out, idlist[i]);
pdc_end_array(p->out);
- */
- pdc_puts(p->out, "/Names");
- pdc_begin_array(p->out);
+ pdc_end_dict(p->out);
+ pdc_end_obj(p->out); /* Names object */
- for (i = ibeg; i <= iend; i++)
+ ia = 0;
+ for (ik = 0; ik < nnodes; ik++)
{
- if (p->names[i].type == type)
+ pdc_begin_obj(p->out, idlist[ik]);
+ pdc_begin_dict(p->out);
+
+ pdc_puts(p->out, "/Limits");
+ pdc_begin_array(p->out);
+
+ name = pdf_get_numbered_name(p, type, ia, NULL, 1);
+ pdc_put_pdfstring(p->out, name, pdc_strlen(name));
+
+ nn = (ik == nnodes - 1) ? p->names_number : nleafs;
+ name = pdf_get_numbered_name(p, type, ia, NULL, nn);
+ pdc_put_pdfstring(p->out, name, pdc_strlen(name));
+
+ pdc_end_array(p->out);
+
+ pdc_puts(p->out, "/Names");
+ pdc_begin_array(p->out);
+
+ for (il = 0; il < nn; il++)
{
- pdf_put_hypertext(p, p->names[i].name);
- pdc_objref(p->out, "", p->names[i].obj_id);
+ name = pdf_get_numbered_name(p, type, ia, &ia, 1);
+ if (name == NULL)
+ break;
+
+ pdc_put_pdfstring(p->out, name, pdc_strlen(name));
+ pdc_objref(p->out, "", p->names[ia].obj_id);
+ ia++;
}
- }
- pdc_end_array(p->out);
+ pdc_end_array(p->out);
- pdc_end_dict(p->out); /* Node dict */
+ pdc_end_dict(p->out);
+ pdc_end_obj(p->out);
+ }
- pdc_end_obj(p->out); /* Names object */
+ pdc_free(p->pdc, idlist);
}
+
return ret;
}
@@ -1527,7 +1666,7 @@ name_compare( const void* a, const void* b)
pdf_name *p1 = (pdf_name *) a;
pdf_name *p2 = (pdf_name *) b;
- return strcmp(p1->name, p2->name);
+ return pdc_wstrcmp(p1->name, p2->name);
}
/* ---------------------------- write document -------------------------- */
@@ -1557,18 +1696,30 @@ pdf_write_pages_and_catalog(PDF *p, pdc_id orig_root_id)
/* name tree dictionaries */
if (p->names_number)
{
+ char *name;
+ int i, outlen, inlen;
+
+ for (i = 0; i < p->names_number; i++)
+ {
+ inlen = strlen(p->names[i].name);
+ name = pdf_convert_pdfstring(p, p->names[i].name, inlen,
+ PDC_CONV_WITHBOM | PDC_CONV_TRYBYTES, &outlen);
+
+ if (name != p->names[i].name)
+ pdc_free(p->pdc, p->names[i].name);
+
+ p->names[i].name = name;
+ }
qsort(p->names, (size_t) p->names_number, sizeof(pdf_name),
name_compare);
-
names_dests_id = pdf_write_names(p, names_dests);
names_javascript_id = pdf_write_names(p, names_javascript);
names_ap_id = pdf_write_names(p, names_ap);
names_embeddedfiles_id = pdf_write_names(p, names_embeddedfiles);
}
-
(void) forpdfa;
@@ -1718,6 +1869,8 @@ pdf_write_document(PDF *p)
void
pdf_cleanup_document(PDF *p)
{
+ pdf_cleanup_pages(p);
+
if (PDF_GET_STATE(p) != pdf_state_object)
{
/* Don't call pdc_cleanup_output() here because we may still need
@@ -1727,7 +1880,7 @@ pdf_cleanup_document(PDF *p)
pdf_delete_actions(p);
pdf_cleanup_destination(p, p->bookmark_dest); /* deprecated */
- pdf_cleanup_pages(p);
+ p->bookmark_dest = NULL;
pdf_cleanup_document_internal(p);
pdf_cleanup_info(p);
pdf_cleanup_fonts(p);
@@ -1937,3 +2090,7 @@ pdf_set_viewerpreference(PDF *p, const char *viewerpreference)
+
+
+
+
diff --git a/src/pdflib/pdflib/p_draw.c b/src/pdflib/pdflib/p_draw.c
index dc9271e..f1fc806 100644
--- a/src/pdflib/pdflib/p_draw.c
+++ b/src/pdflib/pdflib/p_draw.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_draw.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_draw.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib drawing routines
*
diff --git a/src/pdflib/pdflib/p_encoding.c b/src/pdflib/pdflib/p_encoding.c
index af24792..162fd8d 100644
--- a/src/pdflib/pdflib/p_encoding.c
+++ b/src/pdflib/pdflib/p_encoding.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_encoding.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_encoding.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib encoding handling routines
*
@@ -70,8 +70,7 @@ pdf__encoding_set_char(PDF *p, const char *encoding, int slot,
reg_glyphname = pdc_unicode2glyphname(p->pdc, (pdc_ushort) uv);
if (reg_glyphname)
{
- if (strcmp(reg_glyphname, glyphname) &&
- p->debug[(int) 'F'] == pdc_true)
+ if (strcmp(reg_glyphname, glyphname))
{
pdc_warning(p->pdc, PDF_E_ENC_BADGLYPH,
glyphname,
@@ -87,8 +86,7 @@ pdf__encoding_set_char(PDF *p, const char *encoding, int slot,
if (retval > -1)
{
reg_uv = (pdc_ushort) retval;
- if (reg_uv && reg_uv != (pdc_ushort) uv &&
- p->debug[(int) 'F'] == pdc_true)
+ if (reg_uv && reg_uv != (pdc_ushort) uv)
{
pdc_error(p->pdc, PDF_E_ENC_BADUNICODE,
pdc_errprintf(p->pdc, "%04X", uv), glyphname,
@@ -155,6 +153,14 @@ pdf_get_hypertextencoding_param(PDF *p, int *codepage)
if (codepage)
*codepage = p->hypertextcodepage;
+ pdc_logg_cond(p->pdc, 3, trc_encoding,
+ "\t\thypertextformat=%d\n"
+ "\t\thypertextencoding=%s\n"
+ "\t\thypertextcodepage=%d\n",
+ p->hypertextformat,
+ pdc_get_user_encoding(p->pdc, p->hypertextencoding),
+ p->hypertextcodepage);
+
return p->hypertextencoding;
}
diff --git a/src/pdflib/pdflib/p_fields.c b/src/pdflib/pdflib/p_fields.c
index 4900b3b..9b7b4b9 100644
--- a/src/pdflib/pdflib/p_fields.c
+++ b/src/pdflib/pdflib/p_fields.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_fields.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_fields.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib form fields handling routines
*
diff --git a/src/pdflib/pdflib/p_filter.c b/src/pdflib/pdflib/p_filter.c
index d5a11a6..4121d02 100644
--- a/src/pdflib/pdflib/p_filter.c
+++ b/src/pdflib/pdflib/p_filter.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_filter.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_filter.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* Compressed and uncompressed stream output
*
diff --git a/src/pdflib/pdflib/p_font.c b/src/pdflib/pdflib/p_font.c
index 5dfce77..4aec8a6 100644
--- a/src/pdflib/pdflib/p_font.c
+++ b/src/pdflib/pdflib/p_font.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_font.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_font.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib font handling routines
*
@@ -132,6 +132,10 @@ pdf_init_font(PDF *p, pdf_font *font, pdf_font_options *fo)
font->expectglyphs = pdc_false;
font->iscidfont = pdc_false;
+ font->widths = NULL;
+ font->numwidths = 0;
+ font->konlydef = pdc_false;
+
}
void
@@ -182,6 +186,12 @@ pdf_cleanup_font(PDF *p, pdf_font *font)
font->t3font = NULL;
}
+ if (font->widths != NULL)
+ {
+ pdc_free(p->pdc, font->widths);
+ font->widths = NULL;
+ }
+
}
void
@@ -425,8 +435,9 @@ pdf_get_fontname_core(pdf_font *font, const char *fontname, pdc_bool checktimes)
static pdc_bool
pdf_get_metrics_core(PDF *p, pdf_font *font, const char *fontname,
- pdc_encoding enc, pdc_bool checktimes)
+ const char *outfilename, pdc_encoding enc, pdc_bool checktimes)
{
+ static const char fn[] = "pdf_get_metrics_core";
const char *fname = NULL;
const fnt_font_metric *ftm;
@@ -435,10 +446,16 @@ pdf_get_metrics_core(PDF *p, pdf_font *font, const char *fontname,
{
fontname = fname;
font->opt.fontstyle = fnt_Normal;
+
+ if (font->apiname != NULL)
+ {
+ pdc_free(p->pdc, font->apiname);
+ font->apiname = pdc_strdup_ext(p->pdc, fontname, 0, fn);
+ }
}
ftm = fnt_get_core_metric(fontname);
- if (ftm != NULL)
+ if (ftm != NULL && (!font->opt.embedding || outfilename != NULL))
{
pdc_logg_cond(p->pdc, 1, trc_font,
"\tLoading metrics data for core font \"%s\":\n", fontname);
@@ -813,6 +830,7 @@ pdf_init_font_options(PDF *p, pdf_font_options *fo)
fo->xheight = 0;
fo->linegap = 0;
fo->auxiliary = pdc_false;
+ fo->dropcorewidths = pdc_false;
}
@@ -908,10 +926,12 @@ pdf_get_font_options(PDF *p, pdf_font_options *fo, pdc_resopt *resopts)
if (pdc_get_optvalues("linegap", resopts, &fo->linegap, NULL))
fo->mask |= (1L << fo_linegap);
+
+ pdc_get_optvalues("dropcorewidths", resopts, &fo->dropcorewidths, NULL);
}
int
-pdf__load_font(PDF *p, const char *fontname, int inlen,
+pdf__load_font(PDF *p, const char *fontname, int len,
const char *encoding, const char *optlist)
{
int slot;
@@ -920,14 +940,11 @@ pdf__load_font(PDF *p, const char *fontname, int inlen,
if (encoding == NULL || *encoding == '\0')
pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "encoding", 0, 0, 0);
- if (fontname == NULL)
- pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "fontname", 0, 0, 0);
-
/* initialize */
pdf_init_font_options(p, &fo);
/* Converting fontname */
- fo.fontname = (char *) pdf_convert_name(p, fontname, inlen,
+ fo.fontname = (char *) pdf_convert_name(p, fontname, len,
PDC_CONV_WITHBOM);
if (fo.fontname == NULL || *fo.fontname == '\0')
pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "fontname", 0, 0, 0);
@@ -997,6 +1014,7 @@ pdf_check_font_embedding(PDF *p, pdf_font *font, const char *fontname)
int
pdf_load_font_internal(PDF *p, pdf_font_options *fo)
{
+ pdc_bool logg1 = pdc_logg_is_enabled(p->pdc, 1, trc_font);
pdc_bool logg2 = pdc_logg_is_enabled(p->pdc, 2, trc_font);
const char *fontname;
const char *encoding;
@@ -1014,6 +1032,17 @@ pdf_load_font_internal(PDF *p, pdf_font_options *fo)
pdc_bool retval = pdc_false;
int slot = -1, i;
+ /* register and skip at sign '@' in font name */
+ if (fo->fontname[0] == PDF_VERTICAL_SIGN ||
+ (pdc_is_utf8_bytecode(fo->fontname) &&
+ fo->fontname[3] == PDF_VERTICAL_SIGN))
+ {
+
+ i = (fo->fontname[0] == PDF_VERTICAL_SIGN) ? 1 : 4;
+ len = strlen(fo->fontname) + 1 - i;
+ memmove(&fo->fontname[i - 1], &fo->fontname[i], len);
+ }
+
/* host or UTF-8 encoded font name without BOM */
fontname_p = pdc_utf8_to_hostbytes(p->pdc, pdc_false, fo->fontname);
if (fontname_p == NULL)
@@ -1023,10 +1052,14 @@ pdf_load_font_internal(PDF *p, pdf_font_options *fo)
else
{
fontname = pdc_utf8strprint(p->pdc, fontname_p);
- pdc_free(p->pdc, fontname_p);
+ pdc_free_tmp(p->pdc, fontname_p);
}
fontname_p = NULL;
+ if (logg1)
+ pdc_logg(p->pdc, "\tCanonical font name: \"%s\"\n",
+ fontname);
+
/* font encoding */
encoding = fo->encoding;
encoding_aux = encoding;
@@ -1047,14 +1080,22 @@ pdf_load_font_internal(PDF *p, pdf_font_options *fo)
/* UTF-8 font name with BOM */
font->ft.utf8name = pdc_strdup(p->pdc, fo->fontname);
- pdc_logg_cond(p->pdc, 1, trc_font, "\tFont UTF-8 name: \"%s\"\n",
- font->ft.utf8name);
+ if (logg1)
+ pdc_logg(p->pdc, "\tFont UTF-8 name: \"%s\"\n",
+ font->ft.utf8name);
/* specified encoding name */
font->encapiname = pdc_strdup(p->pdc, encoding);
/* search for a registered encoding */
enc = pdc_find_encoding(p->pdc, encoding);
+
+ if (enc == pdc_unicode || enc == pdc_glyphid)
+ {
+ pdc_set_errmsg(p->pdc, PDF_E_UNSUPP_UNICODE, 0, 0, 0, 0);
+ goto PDF_PREMATURE_EXIT;
+ }
+
if (enc == pdc_invalidenc || enc == pdc_unicode)
{
/* search for a predefined CMap and registered fonts */
@@ -1112,8 +1153,8 @@ pdf_load_font_internal(PDF *p, pdf_font_options *fo)
* is found, make a copy in a new slot and attach the requested encoding.
*/
- pdc_logg_cond(p->pdc, 1, trc_font,
- "\tFont will be searched in the PDFlib font cache\n");
+ if (logg1)
+ pdc_logg(p->pdc, "\tFont will be searched in the PDFlib font cache\n");
for (slot = 0; slot < p->fonts_number; slot++)
{
if (p->fonts[slot].obj_id == PDC_BAD_ID &&
@@ -1233,8 +1274,8 @@ pdf_load_font_internal(PDF *p, pdf_font_options *fo)
}
slot = -1;
- pdc_logg_cond(p->pdc, 1, trc_font,
- "\tFont not found in the PDFlib font cache\n");
+ if (logg1)
+ pdc_logg(p->pdc, "\tFont not found in the PDFlib font cache\n");
/* embedding check */
if (!pdf_check_font_embedding(p, font, fontname))
@@ -1269,18 +1310,11 @@ pdf_load_font_internal(PDF *p, pdf_font_options *fo)
}
mmparam[2] = '\0'; /* strip the parameter from the master name */
}
-
- /* Font for vertical writing mode */
fontname_p = mastername;
- if (mastername[0] == '@')
- {
- font->ft.vertical = pdc_true;
- fontname_p = &mastername[1];
- }
/* protocol */
- pdc_logg_cond(p->pdc, 1, trc_font,
- "\tPDFlib font name: \"%s\"\n", fontname_p);
+ if (logg1)
+ pdc_logg(p->pdc, "\tPDFlib font name: \"%s\"\n", fontname_p);
/* Font file search hierarchy
* - Check "FontOutline" resource entry and check TrueType font
@@ -1293,6 +1327,14 @@ pdf_load_font_internal(PDF *p, pdf_font_options *fo)
retval = pdc_false;
while (1)
{
+ if (font->opt.auxiliary)
+ {
+ /* only in-core fonts are possible */
+ retval = pdf_get_metrics_core(p, font, fontname_p, "", enc,
+ pdc_false);
+ break;
+ }
+
#ifdef PDF_TRUETYPE_SUPPORTED
/* Check specified TrueType file */
filename = pdc_find_resource(p->pdc, "FontOutline", fontname_p);
@@ -1350,22 +1392,26 @@ pdf_load_font_internal(PDF *p, pdf_font_options *fo)
- /* Check available in-core metrics */
- retval = pdf_get_metrics_core(p, font, fontname_p, enc, pdc_false);
+ /* Check available in-core metrics - will be skipped
+ * in the case of embedding and missing outline file
+ * to check the possibility of an host font in the next step.
+ */
+ retval = pdf_get_metrics_core(p, font, fontname_p, outfilename, enc,
+ pdc_false);
if (retval != pdc_undef)
break;
retval = pdc_false;
/* Check available in-core metrics */
- retval = pdf_get_metrics_core(p, font, fontname_p, enc, pdc_true);
+ retval = pdf_get_metrics_core(p, font, fontname_p, "", enc, pdc_true);
if (retval != pdc_undef)
break;
retval = pdc_false;
/* Searching for a metric file */
- pdc_logg_cond(p->pdc, 1, trc_font,
- "\tSearching for font metrics data file:\n");
+ if (logg1)
+ pdc_logg(p->pdc, "\tSearching for font metrics data file:\n");
filename = testfilename;
for (i = 0; i < 100; i++)
@@ -1420,9 +1466,10 @@ pdf_load_font_internal(PDF *p, pdf_font_options *fo)
{
retval = pdc_false;
- pdc_logg_cond(p->pdc, 1, trc_font,
- "\tMetric data file for font \"%s\" not available\n",
- fontname_p);
+ if (logg1)
+ pdc_logg(p->pdc,
+ "\tMetric data file for font \"%s\" not available\n",
+ fontname_p);
pdc_set_errmsg(p->pdc, PDF_E_FONT_NOMETRICS, 0, 0, 0, 0);
}
@@ -1470,8 +1517,9 @@ pdf_load_font_internal(PDF *p, pdf_font_options *fo)
else
{
/* Searching font outline file */
- pdc_logg_cond(p->pdc, 1, trc_font,
- "\tSearching for font outline data file:\n");
+ if (logg1)
+ pdc_logg(p->pdc,
+ "\tSearching for font outline data file:\n");
outfilename = testfilename;
for (i = 0; i < 100; i++)
@@ -1506,25 +1554,33 @@ pdf_load_font_internal(PDF *p, pdf_font_options *fo)
if (retval == pdc_undef)
{
retval = pdc_false;
- pdc_set_errmsg(p->pdc, PDF_E_FONT_NOOUTLINE, 0, 0, 0, 0);
+ if (font->ft.m.type == fnt_Type1 ||
+ font->ft.m.type == fnt_MMType1)
+ pdc_set_errmsg(p->pdc, PDF_E_FONT_NOOUTLINE_PS,
+ 0, 0, 0, 0);
+ else
+ pdc_set_errmsg(p->pdc, PDF_E_FONT_NOOUTLINE_TT,
+ 0, 0, 0, 0);
}
}
if (retval == pdc_false)
{
- pdc_logg_cond(p->pdc, 1, trc_font,
- "\tOutline data file for font \"%s\" not found\n",
- fontname_p);
+ if (logg1)
+ pdc_logg(p->pdc,
+ "\tOutline data file for font \"%s\" not found\n",
+ fontname_p);
}
else
{
if (!font->ft.img)
font->filename = font->ft.filename;
- pdc_logg_cond(p->pdc, 1, trc_font,
- "\tFont outline data file \"%s\" available\n",
- font->filename ?
- font->filename : font->ft.imgname);
+ if (logg1)
+ pdc_logg(p->pdc,
+ "\tFont outline data file \"%s\" available\n",
+ font->filename ?
+ font->filename : font->ft.imgname);
}
}
}
@@ -1644,6 +1700,38 @@ pdf_transform_fontwidths(PDF *p, pdf_font *font, pdc_encodingvector *evto,
memcpy(font->ft.code2gid, code2gid, 256 * sizeof(pdc_ushort));
}
+void
+pdf_prepare_fontwidths(PDF *p, pdf_font *font, int nusedgids)
+{
+
+ (void) p;
+ (void) nusedgids;
+
+ if (font->towinansi != pdc_invalidenc || font->widths != NULL ||
+ (font->iscidfont && (font->ft.isstdfont || font->opt.monospace)))
+ {
+ return;
+ }
+
+ /* exchange widths pointer */
+ if (!font->iscidfont && font->ft.enc != pdc_unicode)
+ {
+ font->widths = font->ft.m.widths;
+ font->numwidths = font->ft.m.numwidths;
+ font->ft.m.widths = NULL;
+ font->ft.m.numwidths = 0;
+ return;
+ }
+
+ /* already defined or no basic data */
+ if (font->ft.m.widths == NULL && font->ft.m.ciw == NULL
+ )
+ {
+ return;
+ }
+
+}
+
static void
@@ -1746,6 +1834,7 @@ pdf_put_font(PDF *p, pdf_font *font)
/* save font struct members */
pdc_encodingvector *ev = NULL;
pdc_encoding font_encoding = font->ft.enc;
+ pdc_encoding font_towinansi = font->towinansi;
int font_numcodes = font->ft.numcodes;
int font_codesize = font->codesize;
@@ -1889,8 +1978,12 @@ pdf_put_font(PDF *p, pdf_font *font)
enc = font->towinansi;
font->ft.enc = enc;
+ font->towinansi = pdc_invalidenc;
}
+ /* preparation for font widths array */
+ pdf_prepare_fontwidths(p, font, nusedgids);
+
/* /FontDescriptor, /FirstChar, /LastChar, /Widths */
switch (fonttype)
{
@@ -1912,8 +2005,11 @@ pdf_put_font(PDF *p, pdf_font *font)
{
fontdescriptor_id = pdc_alloc_id(p->out);
pdc_objref(p->out, "/FontDescriptor", fontdescriptor_id);
- }
+ /* bug #1036 */
+ if (font->ft.isstdfont == pdc_true && font->opt.dropcorewidths)
+ break;
+ }
/* determine missing width.
* Only for embedded fonts because of a bug in Acrobat,
@@ -1922,19 +2018,19 @@ pdf_put_font(PDF *p, pdf_font *font)
if (font->opt.embedding)
{
if (fonttype != fnt_Type3)
- defwidth = font->ft.m.widths[0];
+ defwidth = font->widths[0];
{
for (i = 1; i < 255; i++)
{
- if (font->ft.m.widths[i] != defwidth)
+ if (font->widths[i] != defwidth)
break;
}
if (i > 1)
firstchar = i;
for (i = 255; i > 0; i--)
{
- if (i == firstchar || font->ft.m.widths[i] != defwidth)
+ if (i == firstchar || font->widths[i] != defwidth)
break;
}
lastchar = i;
@@ -1952,7 +2048,7 @@ pdf_put_font(PDF *p, pdf_font *font)
for (i = firstchar; i <= lastchar; i++)
{
pdc_printf(p->out, "%d",
- (int) (font->ft.m.widths[i] / a + .5));
+ (int) (font->widths[i] / a + .5));
if (i < 255)
pdc_printf(p->out, "%s", ((i + 1) % 16) ? " " : "\n");
}
@@ -2376,6 +2472,7 @@ pdf_put_font(PDF *p, pdf_font *font)
/* restore font struct members */
font->ft.enc = font_encoding;
+ font->towinansi = font_towinansi;
font->ft.numcodes = font_numcodes;
font->codesize = font_codesize;
@@ -2451,7 +2548,6 @@ void
pdf_write_page_fonts(PDF *p)
{
int i, total = 0;
- int bias = p->curr_ppt->fn_bias;
/* This doesn't really belong here, but all modules which write
* font resources also need this, so we include it here.
@@ -2466,7 +2562,7 @@ pdf_write_page_fonts(PDF *p)
if (p->fonts[i].used_on_current_page == pdc_true)
total++;
- if (total > 0 || bias)
+ if (total > 0)
{
pdc_puts(p->out, "/Font");
pdc_begin_dict(p->out); /* font resource dict */
@@ -2478,12 +2574,11 @@ pdf_write_page_fonts(PDF *p)
{
if (p->fonts[i].used_on_current_page == pdc_true) {
p->fonts[i].used_on_current_page = pdc_false; /* reset */
- pdc_printf(p->out, "/F%d", bias + i);
+ pdc_printf(p->out, "/F%d", i);
pdc_objref(p->out, "", p->fonts[i].obj_id);
}
}
- if (!bias)
pdc_end_dict(p->out); /* font resource dict */
}
}
@@ -2508,6 +2603,3 @@ pdf_mark_page_font(PDF *p, int ft)
{
p->fonts[ft].used_on_current_page = pdc_true;
}
-
-
-
diff --git a/src/pdflib/pdflib/p_font.h b/src/pdflib/pdflib/p_font.h
index 3dc4d91..3da2df4 100644
--- a/src/pdflib/pdflib/p_font.h
+++ b/src/pdflib/pdflib/p_font.h
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_font.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_font.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* Header file for the PDFlib font subsystem
*
@@ -30,6 +30,9 @@
/* minimal number of glyphs for appropriate encoding */
#define PDF_MIN_GLYPHS 5
+/* sign for vertical writing mode on Windows */
+#define PDF_VERTICAL_SIGN '@'
+
typedef enum
{
font_ascender = (1<<0),
@@ -62,6 +65,7 @@ struct pdf_font_options_s
int xheight;
int linegap;
pdc_bool auxiliary;
+ pdc_bool dropcorewidths;
};
/* Type3 font structures */
@@ -123,7 +127,7 @@ struct pdf_font_s
/* pdflib encoding and CMap properties */
char *encapiname; /* encoding name specified in API call */
- char *outcmapname; /* output CMap namel */
+ char *outcmapname; /* output CMap name */
int codepage; /* OEM multi byte code-page number */
pdc_encoding towinansi; /* convert to 'towinansi' enc. for output */
pdc_bool hasnomac; /* TT font has no macroman cmap */
@@ -152,6 +156,10 @@ struct pdf_font_s
pdc_bool expectglyphs; /* TT: glyph id text strings are expected */
pdc_bool iscidfont; /* is CID font */
+ int *widths; /* temporary glyph widths: code/gid -> width */
+ int numwidths; /* number of entries in widths */
+ pdc_bool konlydef; /* only default widths */
+
};
/* p_truetype.c */
@@ -202,6 +210,7 @@ pdc_encodingvector *pdf_create_font_encoding(PDF *p, pdc_encoding enc,
pdf_font *font, const char *fontname, pdc_bool kreg);
void pdf_transform_fontwidths(PDF *p, pdf_font *font,
pdc_encodingvector *evto, pdc_encodingvector *evfrom);
+void pdf_prepare_fontwidths(PDF *p, pdf_font *font, int nusedgids);
/* p_type1.c */
pdc_bool pdf_t1open_fontfile(PDF *p, pdf_font *font, const char *fontname,
diff --git a/src/pdflib/pdflib/p_generr.h b/src/pdflib/pdflib/p_generr.h
index 166e0f7..f11d9c0 100644
--- a/src/pdflib/pdflib/p_generr.h
+++ b/src/pdflib/pdflib/p_generr.h
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_generr.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_generr.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib error messages
*
@@ -51,6 +51,9 @@ gen(0, 2012, UNSUPP_UNICODE,
gen(0, 2014, UNSUPP_SPOTCOLOR, "Spot colors not supported in PDFlib Lite")
+gen(0, 2015, UNSUPP_ICCBASEDCOLOR,
+ "ICC based or Lab colors not supported in PDFlib Lite")
+
gen(0, 2016, UNSUPP_PDI, "PDF import (PDI) not supported in PDFlib Lite")
gen(0, 2017, UNSUPP_PDI_CONFIG,
@@ -99,7 +102,7 @@ gen(0, 2098, BETA_EXPIRED,
/* -------------------------------------------------------------------- */
-/* Document, page, scoping and resource (21xx) */
+/* Document, page, scoping, resource and matchbox (21xx) */
/* -------------------------------------------------------------------- */
gen(1, 2100, DOC_SCOPE, "Function must not be called in '$1' scope")
@@ -157,7 +160,7 @@ gen(1, 2150, DOC_NEED_LABELOPT,
"Option 'labels' requires suboption '$1' if used with this function")
gen(1, 2152, PAGE_TRANS_COMPAT,
- "Page transition '$1' requires PDF version 1.5 or higher")
+ "Page transition '$1' requires PDF 1.5")
gen(1, 2154, PAGE_ILLROTATE, "Option 'rotate' has illegal value $1")
@@ -192,6 +195,12 @@ gen(0, 2176, DOC_GETBUF_LIN,
gen(1, 2178, PAGE_ILLREF,
"A link annotation refers to non-existing page '$1'")
+gen(0, 2180, DOC_NOLINOPT_ENCATT,
+ "Optimization/linearization not supported for encrypted file attachments")
+
+gen(1, 2190, MBOX_NOTFOUND,
+ "Matchbox '$1' not found")
+
/* -------------------------------------------------------------------- */
/* Graphics and Text (22xx) */
@@ -210,6 +219,11 @@ gen(0, 2212, SHADING13, "Smooth shadings are not supported in PDF 1.3")
gen(1, 2220, TEMPLATE_SELF,
"Can't place template handle $1 within its own definition")
+gen(1, 2222, TEXT_ALIGNCHARNOTFOUND,
+ "Character U+$1 for option 'alignchar' not found in font or encoding")
+
+gen(1, 2223, TEXT_BADTEXTFORMAT, "Bad textformat '$1' (must be 'bytes')")
+
/* UNUSED
gen(1, 2230, TEXT_UNICODENOTSHOW,
"Can't show character with Unicode value U+$1")
@@ -220,7 +234,7 @@ gen(1, 2233, TEXT_BUILTINNOTSHOW,
"Can't show 16-bit character $1 for builtin encoding")
*/
-gen(1, 2234, TEXT_TOOLONG, "Text too long (max. $1)")
+gen(2, 2234, TEXT_TOOLONG, "Text with $1 bytes is too long (max. $2)")
gen(2, 2235, TEXT_SIZENOMATCH,
"Size ($1) of glyphwidths list doesn't match size ($2 characters) of text")
@@ -261,6 +275,11 @@ gen(2, 2309, COLOR_REDEFINE_SPOTNAME,
"Option '$1': spot color '$2' has already an alternative color")
+gen(1, 2350, COLOR_INVALPATT,
+ "Pattern with painttype 2 can not be colorized with another pattern")
+
+gen(0, 2352, COLOR_INVALSPEC,
+ "Color specification not allowed while defining a pattern with painttype 2")
/* -------------------------------------------------------------------- */
/* Image (24xx) */
@@ -268,6 +287,8 @@ gen(2, 2309, COLOR_REDEFINE_SPOTNAME,
gen(2, 2400, IMAGE_CORRUPT, "Corrupt $1 image file '$2'")
+gen(4, 2401, IMAGE_TOO_LARGE, "$1 image '$2' too large ($3 x $4)")
+
gen(3, 2402, IMAGE_NOPAGE, "Requested page $1 in $2 image '$3' not found")
gen(2, 2404, IMAGE_BADDEPTH,
@@ -378,8 +399,12 @@ gen(1, 2482, TIFF_UNSUPP_JPEG_TILED,
gen(2, 2483, TIFF_UNSUPP_COLORSPACE,
"Color space (photometric) $1 in TIFF image '$2' not supported")
-gen(1, 2484, TIFF_UNSUPP_JPEG_SEPARATE,
- "Couldn't open TIFF image '$1' (JPEG with separate image planes)")
+gen(1, 2484, TIFF_UNSUPP_SEPARATE,
+ "Couldn't open TIFF image '$1' (separate image planes not supported)")
+
+gen(1, 2485, TIFF_TILE_UNSUPP,
+ "Couldn't open TIFF image '$1' "
+ "(separate image planes with tiles not supported)")
gen(2, 2486, TIFF_UNSUPP_SEP_NONCMYK,
"Couldn't open TIFF image '$1' (unsupported inkset tag $2)")
@@ -409,12 +434,14 @@ gen(1, 2496, JPX_RAWDATAUNSUPP,
gen(1, 2498, JPX_COMPOUNDUNSUPP,
"Compound JPEG2000 (JPM) image file '$1' not supported")
+gen(1, 2499, TIFF_BPC_UNSUPP,
+"TIFF image '$1' contains bpc that not equal to 1,2, 4, 8, 16, not supported")
/* -------------------------------------------------------------------- */
/* Font (25xx) */
/* -------------------------------------------------------------------- */
-gen(2, 2500, FONT_CORRUPT, "Corrupt $1 font file '$2'")
+gen(2, 2500, FONT_CORRUPT, "Corrupt $1 font file $2")
gen(2, 2501, FONT_PREFIX, "Font '$1' with encoding '$2': ")
@@ -446,9 +473,18 @@ gen(0, 2509, FONT_FORCECVTUNI,
gen(0, 2514, FONT_EMBEDMM, "Multiple Master font cannot be embedded")
-gen(0, 2516, FONT_NOMETRICS, "Metrics data not found")
+gen(0, 2516, FONT_NOMETRICS,
+ "Font file (AFM, PFM, TTF, OTF etc.) or host font not found")
+gen(0, 2517, FONT_NOOUTLINE_PS,
+ "Font cannot be embedded (PFA or PFB font file not found)")
+
+/* Unused
gen(0, 2518, FONT_NOOUTLINE, "File with outline data not found")
+*/
+
+gen(0, 2519, FONT_NOOUTLINE_TT,
+ "Font cannot be embedded (TTF or OTF font file not found)")
/* Unused
gen(0, 2520, FONT_NOGLYPHID, "Font doesn't contain any glyph IDs")
@@ -510,6 +546,9 @@ gen(2, 2554, T1_AFMBADKEY, "Unknown key '$1' in AFM file '$2'")
gen(1, 2558, T1_NOFONT, "'$1' is not a PostScript Type1 font file")
+gen(1, 2559, T1_RESOURCENOTLOADED,
+ "Couldn't load PostScript font resource file (system error code $1)")
+
gen(2, 2560, FONT_CODENOTFOUND1,
"Glyph with character code $1 not found in font '$2'")
@@ -611,6 +650,10 @@ gen(1, 2830, FF_NOEMBEDFONT,
gen(1, 2832, FF_SUBSETTFONT,
"Specified font '$1' not allowed for fields (must not be subset)")
+gen(2, 2833, FF_NOPDFDOCFONT,
+ "Specified encoding '$1' of font '$2' not recommended for fields "
+ "(please use encoding 'pdfdoc')")
+
gen(1, 2834, FF_CAPTMISSING, "No caption or icon specified for field '$1'")
gen(0, 2836, FF_DIFFSTRLISTS,
@@ -666,6 +709,12 @@ gen(1, 2886, ANN_OPTALRDEF,
gen(1, 2888, ANN_ILLCUSTOMKEY,
"Option 'custom' uses illegal key '$1' (already defined in PDF)")
+gen(0, 2890, ANN_ILLTEMPLATE,
+ "Option 'movieposter' has bad template handle "
+ "(only images with RGB or Gray color spaces supported)")
+
+gen(1, 2892, ANN_ACTIONNOTALLOWED,
+ "Option 'action' not allowed for annotation type '$1'")
/* -------------------------------------------------------------------- */
/* Internal (29xx) */
@@ -689,7 +738,7 @@ gen(1, 2912, INT_SSTACK_UNDER, "State stack underflow in function '$1'")
gen(3, 2914, INT_WRAPPER, "Error in PDFlib $1 wrapper function $2 ($3)")
gen(0, 2990, OT_UNSUPP_SID2CID,
- "Accented characters not supported; contact support@pdflib.com")
+"Accented characters not supported; use autocidfont=false in PDF_load_font()")
diff --git a/src/pdflib/pdflib/p_gif.c b/src/pdflib/pdflib/p_gif.c
index 59d80f5..12993bf 100644
--- a/src/pdflib/pdflib/p_gif.c
+++ b/src/pdflib/pdflib/p_gif.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_gif.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_gif.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* GIF processing for PDFlib
*
@@ -51,14 +51,13 @@ pdf_process_GIF_data(
PDF *p,
int imageslot)
{
- pdf_image *image = &p->images[imageslot];
+ (void) imageslot;
pdc_set_errmsg(p->pdc, PDF_E_UNSUPP_IMAGE, "GIF", 0, 0, 0);
return -1;
}
-/* CDPDF - added missing function */
void
pdf_cleanup_gif(PDF *p, pdf_image *image)
{
@@ -463,7 +462,7 @@ GetDataBlock(PDF *p, pdf_image *image, unsigned char *lbuf)
if (!PDC_OK_FREAD(fp, &count, 1))
return -1; /* Error in getting DataBlock size */
- ZeroDataBlock = (count == 0);
+ ZeroDataBlock = (count == (unsigned char) 0);
if ((count != (unsigned char) 0) && (!PDC_OK_FREAD(fp, lbuf, count)))
{
diff --git a/src/pdflib/pdflib/p_gstate.c b/src/pdflib/pdflib/p_gstate.c
index 2b62542..892a9d2 100644
--- a/src/pdflib/pdflib/p_gstate.c
+++ b/src/pdflib/pdflib/p_gstate.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_gstate.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_gstate.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib routines dealing with the graphics states
*
@@ -23,15 +23,31 @@
void
pdf_concat_raw(PDF *p, pdc_matrix *m)
{
- if (pdc_is_identity_matrix(m))
- return;
+ if (!pdc_is_identity_matrix(m))
+ {
+ char sa[32], sb[32], sc[32], sd[32];
- pdf_end_text(p);
+ pdc_sprintf(p->pdc, pdc_true, sa, "%f", m->a);
+ pdc_sprintf(p->pdc, pdc_true, sb, "%f", m->b);
+ pdc_sprintf(p->pdc, pdc_true, sc, "%f", m->c);
+ pdc_sprintf(p->pdc, pdc_true, sd, "%f", m->d);
+
+ if ((!strcmp(sa, "0") || !strcmp(sd, "0")) &&
+ (!strcmp(sb, "0") || !strcmp(sc, "0")))
+ {
+ pdc_error(p->pdc, PDC_E_ILLARG_MATRIX,
+ pdc_errprintf(p->pdc, "%f %f %f %f %f %f",
+ m->a, m->b, m->c, m->d, m->e, m->f),
+ 0, 0, 0);
+ }
+
+ pdf_end_text(p);
- pdc_printf(p->out, "%f %f %f %f %f %f cm\n",
- m->a, m->b, m->c, m->d, m->e, m->f);
+ pdc_printf(p->out, "%s %s %s %s %f %f cm\n",
+ sa, sb, sc, sd, m->e, m->f);
- pdc_multiply_matrix(m, &p->curr_ppt->gstate[p->curr_ppt->sl].ctm);
+ pdc_multiply_matrix(m, &p->curr_ppt->gstate[p->curr_ppt->sl].ctm);
+ }
}
void
@@ -189,7 +205,6 @@ pdf__concat(PDF *p, pdc_scalar a, pdc_scalar b, pdc_scalar c, pdc_scalar d,
pdc_scalar e, pdc_scalar f)
{
pdc_matrix m;
- pdc_scalar det = a * d - b * c;
pdc_check_number(p->pdc, "a", a);
pdc_check_number(p->pdc, "b", b);
@@ -198,11 +213,6 @@ pdf__concat(PDF *p, pdc_scalar a, pdc_scalar b, pdc_scalar c, pdc_scalar d,
pdc_check_number(p->pdc, "e", e);
pdc_check_number(p->pdc, "f", f);
- if (fabs(det) < PDF_SMALLREAL)
- pdc_error(p->pdc, PDC_E_ILLARG_MATRIX,
- pdc_errprintf(p->pdc, "%f %f %f %f %f %f", a, b, c, d, e, f),
- 0, 0, 0);
-
m.a = a;
m.b = b;
m.c = c;
@@ -217,13 +227,6 @@ void
pdf_setmatrix_e(PDF *p, pdc_matrix *n)
{
pdc_matrix m;
- pdc_scalar det = n->a * n->d - n->b * n->c;
-
- if (fabs(det) < PDF_SMALLREAL)
- pdc_error(p->pdc, PDC_E_ILLARG_MATRIX,
- pdc_errprintf(p->pdc, "%f %f %f %f %f %f",
- n->a, n->b, n->c, n->d, n->e, n->f),
- 0, 0, 0);
pdc_invert_matrix(p->pdc, &m, &p->curr_ppt->gstate[p->curr_ppt->sl].ctm);
pdc_multiply_matrix(n, &m);
diff --git a/src/pdflib/pdflib/p_hkscmyk.h b/src/pdflib/pdflib/p_hkscmyk.h
index 924ad64..b1e6c21 100644
--- a/src/pdflib/pdflib/p_hkscmyk.h
+++ b/src/pdflib/pdflib/p_hkscmyk.h
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_hkscmyk.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_hkscmyk.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib HKS spot CMYK color table
*
diff --git a/src/pdflib/pdflib/p_hkslab.h b/src/pdflib/pdflib/p_hkslab.h
index 68f13bb..6ad0c3b 100644
--- a/src/pdflib/pdflib/p_hkslab.h
+++ b/src/pdflib/pdflib/p_hkslab.h
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_hkslab.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_hkslab.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib HKS spot Lab color table
*
diff --git a/src/pdflib/pdflib/p_hyper.c b/src/pdflib/pdflib/p_hyper.c
index 644e311..a72d0ec 100644
--- a/src/pdflib/pdflib/p_hyper.c
+++ b/src/pdflib/pdflib/p_hyper.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_hyper.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_hyper.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib routines for hypertext stuff:
* named destination, bookmarks, document info
@@ -544,7 +544,8 @@ pdf__add_nameddest(
pdf_dest *dest;
int inum;
- if (!name)
+ len = pdc_check_text_length(p->pdc, &name, len, PDF_MAXSTRINGSIZE);
+ if (!len)
pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "name", 0, 0, 0);
resopts = pdc_parse_optionlist(p->pdc, optlist,
@@ -955,6 +956,10 @@ pdf__create_bookmark(PDF *p, const char *text, int len, const char *optlist)
int ns, inum, outlen, retval = 0;
int jndex = -2;
+ len = pdc_check_text_length(p->pdc, &text, len, PDF_MAXSTRINGSIZE);
+ if (!len)
+ pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "text", 0, 0, 0);
+
/* Initialize */
pdf_init_outline(p, &self);
hypertextformat = p->hypertextformat;
@@ -1196,12 +1201,17 @@ pdf_cleanup_outlines(PDF *p)
int
pdf__add_bookmark(PDF *p, const char *text, int len, int parent, int open)
{
+ static const char *fn = "pdf__add_bookmark";
pdf_outline self;
pdf_dest *dest = (pdf_dest *) p->bookmark_dest;
char *hypertext = NULL;
int acthdl;
int retval = 0;
+ len = pdc_check_text_length(p->pdc, &text, len, PDF_MAXSTRINGSIZE);
+ if (!len)
+ pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "text", 0, 0, 0);
+
pdf_init_outline(p, &self);
if (parent != 0)
@@ -1212,16 +1222,21 @@ pdf__add_bookmark(PDF *p, const char *text, int len, int parent, int open)
/* creating a Launch action - defined via bookmarkdest */
if (dest->filename)
{
- char actoptlist[2048];
+ char *actoptlist;
- sprintf(actoptlist, "filename {%s} ", dest->filename);
+ actoptlist = (char *)
+ pdc_malloc(p->pdc, strlen(dest->filename) + 80, fn);
+ pdc_sprintf(p->pdc, pdc_false, actoptlist, "filename {%s} ",
+ dest->filename);
acthdl = pdf__create_action(p, "Launch", actoptlist);
if (acthdl != -1)
{
if (p->pdc->hastobepos) acthdl++;
- sprintf(actoptlist, "activate %d", acthdl);
+ pdc_sprintf(p->pdc, pdc_false, actoptlist, "activate %d", acthdl);
self.action = pdc_strdup(p->pdc, actoptlist);
}
+
+ pdc_free(p->pdc, actoptlist);
}
else
{
@@ -1311,21 +1326,38 @@ pdf__set_info(PDF *p, const char *key, const char *value, int len)
static const char fn[] = "pdf__set_info";
char *key_buf, *val_buf;
pdf_info *oldentry, *newentry;
+ const char **kp;
+ static const char *forbidden_keys[] =
+ {
+ "Producer",
+ "CreationDate",
+ "ModDate",
+ "GTS_PDFXVersion",
+ "GTS_PDFXConformance",
+ "ISO_PDFEVersion"
+ };
if (key == NULL || !*key)
pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "key", 0, 0, 0);
- if (!strcmp(key, "Producer") ||
- !strcmp(key, "CreationDate") ||
- !strcmp(key, "ModDate"))
- pdc_error(p->pdc, PDC_E_ILLARG_STRING, "key", key, 0, 0);
+ len = pdc_check_text_length(p->pdc, &value, len, PDF_MAXSTRINGSIZE);
+
+ for (kp = forbidden_keys;
+ kp != sizeof(forbidden_keys) / sizeof(char *) + forbidden_keys;
+ kp += 1)
+ {
+ if (!strcmp(*kp, key))
+ {
+ pdc_error(p->pdc, PDC_E_ILLARG_STRING, "key", key, 0, 0);
+ }
+ }
/* converting key */
key_buf = pdf_convert_name(p, key, 0, 0);
/* convert text string */
val_buf = pdf_convert_hypertext_depr(p, value, len);
- if (!val_buf)
+ if (val_buf == NULL)
pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "value", 0, 0, 0);
/* special handling required for "Trapped" */
@@ -1365,8 +1397,9 @@ pdf__set_info(PDF *p, const char *key, const char *value, int len)
pdc_id
pdf_write_info(PDF *p, pdc_bool moddate)
{
+ pdc_bool logg3 = pdc_logg_is_enabled(p->pdc, 3, trc_xmp);
char time_str[PDC_TIME_SBUF_SIZE];
- char producer[PDF_MAX_PARAMSTRING];
+ char producer[PDC_GEN_BUFSIZE];
pdf_info *info;
pdc_id info_id;
@@ -1374,6 +1407,8 @@ pdf_write_info(PDF *p, pdc_bool moddate)
const char *product = "PDFlib Lite";
+ (void) logg3;
+
if (!p->pdc->smokerun)
pdc_logg_cond(p->pdc, 1, trc_api,
@@ -1427,10 +1462,10 @@ pdf_write_info(PDF *p, pdc_bool moddate)
*/
if (p->pdc->binding)
- sprintf(producer, "%s %s (%s/%s)", product,
+ pdc_sprintf(p->pdc, pdc_false, producer, "%s %s (%s/%s)", product,
PDFLIB_VERSIONSTRING, p->pdc->binding, PDF_PLATFORM);
else
- sprintf(producer, "%s %s (%s)", product,
+ pdc_sprintf(p->pdc, pdc_false, producer, "%s %s (%s)", product,
PDFLIB_VERSIONSTRING, PDF_PLATFORM);
pdc_puts(p->out, "/Producer ");
@@ -1447,3 +1482,4 @@ pdf_write_info(PDF *p, pdc_bool moddate)
}
+
diff --git a/src/pdflib/pdflib/p_icc.c b/src/pdflib/pdflib/p_icc.c
index 072ea55..250c2b2 100644
--- a/src/pdflib/pdflib/p_icc.c
+++ b/src/pdflib/pdflib/p_icc.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_icc.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_icc.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib ICC handling routines
*
diff --git a/src/pdflib/pdflib/p_icc.h b/src/pdflib/pdflib/p_icc.h
index 73fedfa..7a2f192 100644
--- a/src/pdflib/pdflib/p_icc.h
+++ b/src/pdflib/pdflib/p_icc.h
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_icc.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_icc.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib ICC typedefs, structures, and enums
*
diff --git a/src/pdflib/pdflib/p_icc9809.h b/src/pdflib/pdflib/p_icc9809.h
index 3ceb0f7..e7eb077 100644
--- a/src/pdflib/pdflib/p_icc9809.h
+++ b/src/pdflib/pdflib/p_icc9809.h
@@ -1,4 +1,4 @@
-/* $Id: p_icc9809.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_icc9809.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* Header file of ICC (name see note above) for ICClib and PDFlib
*
diff --git a/src/pdflib/pdflib/p_icclib.c b/src/pdflib/pdflib/p_icclib.c
index 02275da..e62a80f 100644
--- a/src/pdflib/pdflib/p_icclib.c
+++ b/src/pdflib/pdflib/p_icclib.c
@@ -1,14 +1,14 @@
-/* $Id: p_icclib.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_icclib.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* ICClib routines for PDFlib, slightly modified from the original ICClib.
* (see below).
*
* $Log: p_icclib.c,v $
- * Revision 1.1 2008/10/17 06:11:49 scuri
- * First commit - moving from LuaForge to SourceForge
+ * Revision 1.2 2009/10/20 18:14:16 scuri
+ * *** empty log message ***
*
- * Revision 1.3 2007/11/06 15:48:55 scuri
- * PDF Lite library updated to version "7.0.2".
+ * Revision 1.18.8.4 2007/11/22 17:54:38 kurt
+ * bug #1538 (Relax date check for embedded ICC profile) fixed
*
* Revision 1.18.8.3 2007/05/23 21:15:00 york
* fixed #1230: "Performance problems in mulithreaded env with tolower/toupper".
diff --git a/src/pdflib/pdflib/p_icclib.h b/src/pdflib/pdflib/p_icclib.h
index b300419..ac933ff 100644
--- a/src/pdflib/pdflib/p_icclib.h
+++ b/src/pdflib/pdflib/p_icclib.h
@@ -1,13 +1,10 @@
-/* $Id: p_icclib.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_icclib.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* ICClib Header file icc.h for PDFlib
*
* $Log: p_icclib.h,v $
- * Revision 1.1 2008/10/17 06:11:49 scuri
- * First commit - moving from LuaForge to SourceForge
- *
- * Revision 1.3 2007/11/06 15:48:55 scuri
- * PDF Lite library updated to version "7.0.2".
+ * Revision 1.2 2009/10/20 18:14:16 scuri
+ * *** empty log message ***
*
* Revision 1.12.8.1 2007/03/28 12:47:10 kurt
* bug #1180 (Function prefixes missing for zlib assembler and ICC code) fixed
diff --git a/src/pdflib/pdflib/p_image.c b/src/pdflib/pdflib/p_image.c
index fe95b1c..8e5cd6e 100644
--- a/src/pdflib/pdflib/p_image.c
+++ b/src/pdflib/pdflib/p_image.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_image.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_image.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib image routines
*
@@ -112,6 +112,8 @@ pdf_grow_images(PDF *p)
for (im = p->images_capacity; im < 2 * p->images_capacity; im++)
pdf_init_image_struct(p, &(p->images[im]));
+ for (im = 0; im < p->images_capacity; im++)
+ p->images[im].src.private_data = &(p->images[im]);
p->images_capacity *= 2;
}
@@ -400,7 +402,10 @@ pdf_put_inline_image(PDF *p, int im)
if ((int) image->width != 1728) /* CCITT default width */
pdc_printf(p->out, "/Columns %d", (int) image->width);
- /* /Rows is not required */
+ /* /Rows is optional, but it helps in certain cases with damaged
+ * CCITT compressed image data
+ */
+ pdc_printf(p->out, "/Rows %d", (int) fabs(image->height));
}
pdc_puts(p->out, ">>]"); /* DecodeParms dict and array */
}
@@ -618,9 +623,10 @@ pdf_put_image(PDF *p, int im, pdc_bool firststrip, pdc_bool checkcontentstream)
if ((int) image->width != 1728) /* CCITT default width */
pdc_printf(p->out, "/Columns %d", (int) image->width);
- /*
+ /* /Rows is optional, but it helps in certain cases with damaged
+ * CCITT compressed image data
+ */
pdc_printf(p->out, "/Rows %d", (int) fabs(image->height));
- */
if (image->K != 0)
pdc_printf(p->out, "/K %d", image->K);
@@ -650,6 +656,9 @@ pdf_put_image(PDF *p, int im, pdc_bool firststrip, pdc_bool checkcontentstream)
/* We must avoid pdc_begin/end_pdfstream() here in order to
* generate a really empty stream.
+ * Note: this doesn't work with AES encryption, but we don't
+ * bother to fix it since file references are no longer
+ * supported anyway.
*/
pdc_puts(p->out, "stream\n"); /* dummy image stream */
pdc_puts(p->out, "endstream\n");
@@ -711,7 +720,10 @@ pdf_put_image(PDF *p, int im, pdc_bool firststrip, pdc_bool checkcontentstream)
if ((int) image->width != 1728) /* CCITT default width */
pdc_printf(p->out, "/Columns %d", (int) image->width);
- /* /Rows is not required */
+ /* /Rows is optional, but it helps in certain cases with damaged
+ * CCITT compressed image data
+ */
+ pdc_printf(p->out, "/Rows %d", (int) fabs(image->height));
}
pdc_puts(p->out, ">>\n"); /* DecodeParms dict */
@@ -775,6 +787,9 @@ pdf__fit_image(PDF *p, int im, pdc_scalar x, pdc_scalar y, const char *optlist)
if (PDF_GET_STATE(p) == pdf_state_glyph && !pdf_get_t3colorized(p) &&
image->imagemask == pdc_false)
legal_states = pdf_state_page | pdf_state_pattern | pdf_state_template;
+ else if (PDF_GET_STATE(p) == pdf_state_pattern &&
+ pdf_get_shading_painttype(p) == 2 && image->imagemask == pdc_false)
+ legal_states = pdf_state_page | pdf_state_glyph | pdf_state_template;
else
legal_states = pdf_state_content;
PDF_CHECK_STATE(p, legal_states);
@@ -937,15 +952,15 @@ pdf_fit_xobject_internal(PDF *p, pdf_xobject_options *xo, pdf_fit_options *fit,
pdf_xobject_options xo_save;
pdc_rectangle matchrect;
pdf_fit_options fit_save;
- pdc_matrix m, mm, sm, ctm_save;
+ pdc_matrix m, mm, sm, ctm_clip, ctm_save;
pdc_vector tmpscale, elemscale, fitscale, purescale;
pdc_vector elemsize, mirror, shift, relpos;
pdc_vector polyline[5];
- pdc_box fitbox, clipbox, elembox;
+ pdc_box fitbox, clipbox, elembox, redbox;
pdc_scalar x, y, ss;
pdc_scalar rowsize = 1, lastratio = 1;
pdc_scalar dpi_x, dpi_y, tx = 0, ty = 0, boxwidth, boxheight;
- pdc_bool hasfitbox, kclip = pdc_false, kcliptiff = pdc_false;
+ pdc_bool kclip = pdc_false, kcliptiff = pdc_false;
int indangle, indmirror;
int is, ip, islast;
int imageno;
@@ -967,7 +982,6 @@ pdf_fit_xobject_internal(PDF *p, pdf_xobject_options *xo, pdf_fit_options *fit,
/* box size */
boxwidth = fit->boxsize[0];
boxheight = fit->boxsize[1];
- hasfitbox = boxwidth > PDC_FLOAT_PREC && boxheight > PDC_FLOAT_PREC;
/* element size */
elemsize.x = fabs(image->width);
@@ -1237,15 +1251,18 @@ pdf_fit_xobject_internal(PDF *p, pdf_xobject_options *xo, pdf_fit_options *fit,
/* clipping */
if (fit->fitmethod == pdc_clip || fit->fitmethod == pdc_slice)
{
- pdc_scalar cw = boxwidth;
- pdc_scalar ch = boxheight;
-
- if (cw < PDC_FLOAT_PREC)
- cw = PDF_ACRO_MAXPAGE;
- if (ch < PDC_FLOAT_PREC)
- ch = PDF_ACRO_MAXPAGE;
- pdf__rect(p, 0, 0, cw, ch);
+ if (boxwidth < PDC_FLOAT_PREC)
+ boxwidth = PDF_ACRO_MAXPAGE;
+ if (boxheight < PDC_FLOAT_PREC)
+ boxheight = PDF_ACRO_MAXPAGE;
+ pdf__rect(p, 0, 0, boxwidth, boxheight);
pdf__clip(p);
+
+ ctm_clip = p->curr_ppt->gstate[p->curr_ppt->sl].ctm;
+ redbox.ll.x = 0;
+ redbox.ll.y = 0;
+ redbox.ur.x = boxwidth;
+ redbox.ur.y = p->ydirection * boxheight;
}
}
@@ -1309,6 +1326,21 @@ pdf_fit_xobject_internal(PDF *p, pdf_xobject_options *xo, pdf_fit_options *fit,
matchrect.lly = 0;
matchrect.urx = boxwidth;
matchrect.ury = p->ydirection * boxheight;
+
+ if (fit->fitmethod == pdc_clip || fit->fitmethod == pdc_slice)
+ {
+ pdc_rectangle cliprect;
+ pdc_matrix ctm_inv;
+
+ pdc_invert_matrix(p->pdc, &ctm_inv,
+ &p->curr_ppt->gstate[p->curr_ppt->sl].ctm);
+ pdc_multiply_matrix(&ctm_clip, &ctm_inv);
+ pdc_box2polyline(&ctm_inv, &redbox, polyline);
+ pdc_polyline2rect(polyline, 4, &cliprect);
+
+ pdc_rect_intersect(&matchrect, &matchrect, &cliprect);
+ }
+
pdf_set_mbox_rectangle(p, fit->matchbox, &matchrect, 0);
pdf_draw_mbox_rectangle(p, fit->matchbox, mbox_area | mbox_border);
@@ -1429,7 +1461,12 @@ pdf_fit_xobject_internal(PDF *p, pdf_xobject_options *xo, pdf_fit_options *fit,
}
}
if (image->mask != pdc_undef)
+ {
p->xobjects[p->images[image->mask].no].flags |= xobj_flag_write;
+
+ if (p->images[image->mask].bpc > 1)
+ pdf_set_autotgroup(p, pdc_true);
+ }
}
}
@@ -1484,6 +1521,20 @@ pdf_get_image_resolution(PDF *p, int im, pdc_scalar *dpi_x, pdc_scalar *dpi_y)
}
}
+int
+pdf_get_image_colorspace(PDF *p, int im)
+{
+ pdf_image *image;
+
+ pdf_check_handle(p, im, pdc_imagehandle);
+ image = &p->images[im];
+
+ if (image->colorspace != pdc_undef)
+ return (int) p->colorspaces[image->colorspace].type;
+
+ return (int) NoColor;
+}
+
const char *
pdf_get_image_filename(PDF *p, pdf_image *image)
@@ -1567,14 +1618,14 @@ static const pdc_defopt pdf_open_image_options[] =
0.0, 0.0, NULL},
{"clippingpathname", pdc_stringlist, PDF_CLIPPATH_FLAG, 1, 1,
- 1.0, PDC_INT_MAX, NULL},
+ 1.0, 255.0, NULL},
{"ignoremask", pdc_booleanlist, 0, 1, 1, 0.0, 0.0, NULL},
{"ignoreorientation", pdc_booleanlist, 0, 1, 1, 0.0, 0.0, NULL},
/* deprecated */
- {"imagewarning", pdc_booleanlist, 0, 1, 1, 0.0, 0.0, NULL},
+ {"imagewarning", pdc_booleanlist, PDC_OPT_PDFLIB_7, 1, 1, 0.0, 0.0, NULL},
{"inline", pdc_booleanlist, 0, 1, 1, 0.0, 0.0, NULL},
@@ -1652,7 +1703,14 @@ pdf__load_image(
imgtype = (pdf_image_type) k;
type = pdc_get_keyword(imgtype, pdf_image_keylist);
- verbose = pdf_get_errorpolicy(p, NULL, verbose);
+ /* parsing option list */
+ pdf_set_clientdata(p, &data);
+ resopts = pdc_parse_optionlist(p->pdc, optlist, pdf_open_image_options,
+ &data, pdc_true);
+
+ keyword = "imagewarning";
+ pdc_get_optvalues(keyword, resopts, &verbose, NULL);
+ verbose = pdf_get_errorpolicy(p, resopts, verbose);
/* filename must be already converted to UTF-8 */
pdc_logg_cond(p->pdc, 1, trc_image, "\tImage file: \"%s\"\n", filename);
@@ -1785,15 +1843,6 @@ pdf__load_image(
/* parsing optlist */
if (optlist && strlen(optlist))
{
- pdf_set_clientdata(p, &data);
- resopts = pdc_parse_optionlist(p->pdc, optlist, pdf_open_image_options,
- &data, pdc_true);
- /* save and check options */
- keyword = "imagewarning";
- pdc_get_optvalues(keyword, resopts, &image->verbose, NULL);
- image->verbose = pdf_get_errorpolicy(p, resopts, image->verbose);
- verbose = image->verbose;
-
keyword = "reftype";
if (pdc_get_optvalues(keyword, resopts, &inum, NULL))
{
@@ -2171,7 +2220,7 @@ pdf__load_image(
image->fp = NULL;
/* logging protocol */
- if (pdc_logg_is_enabled(p->pdc, 1, trc_image))
+ if (image->in_use && pdc_logg_is_enabled(p->pdc, 1, trc_image))
{
pdc_scalar width, height, dpi_x, dpi_y;
diff --git a/src/pdflib/pdflib/p_image.h b/src/pdflib/pdflib/p_image.h
index 2f67649..f5423c8 100644
--- a/src/pdflib/pdflib/p_image.h
+++ b/src/pdflib/pdflib/p_image.h
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_image.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_image.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* Header file for the PDFlib image subsystem
*
@@ -155,7 +155,7 @@ typedef struct pdf_jpeg_info_t {
pdf_jpeg_segment *seglist; /* list of segments to be copy */
int capacity; /* currently allocated size */
int number; /* next available segment number */
- pdc_uint32 jpegifoffset; /* offset to JPEG data for TIFF OJPEG */ /* CDPDF - replaced toff_t by pdc_uint32 */
+ pdc_uint32 jpegifoffset; /* offset to JPEG data for TIFF OJPEG */
pdc_byte id[JPEG_MAX_COMPS]; /* component ids */
pdc_byte hsamp[JPEG_MAX_COMPS]; /* horizontal sampling factor */
pdc_byte vsamp[JPEG_MAX_COMPS]; /* vertical sampling factor */
@@ -252,10 +252,11 @@ struct pdf_image_s {
pdf_ref_type reference; /* kind of image data reference */
pdc_bool topdown_save; /* saved topdown flag */
char *iconname; /* icon name for template images */
+ pdf_transgroup tgroup; /* transparency group definition */
/**************************************************************************/
pdc_bool transparent; /* image is transparent */
- pdc_byte transval[4]; /* transparent color values */
+ pdc_ushort transval[4]; /* transparent color values */
pdf_predictor predictor; /* predictor for lzw and flate */
pdc_scalar dpi_x; /* horiz. resolution in dots per inch */
@@ -341,6 +342,9 @@ int pdf_process_TIFF_data(PDF *p, int imageslot);
pdc_bool pdf_is_TIFF_file(PDF *p, pdc_file *fp, pdf_tiff_info *tiff,
pdc_bool check);
+void pdf_proc_TIFF_alpha(PDF *p, int imageslot, pdc_byte *smaskData,
+ unsigned int smaskLen);
+
/* p_image.c */
pdc_id pdf_get_xobject(PDF *p, int im);
void pdf_init_xobjects(PDF *p);
diff --git a/src/pdflib/pdflib/p_intern.h b/src/pdflib/pdflib/p_intern.h
index 80f92d9..2123b9e 100644
--- a/src/pdflib/pdflib/p_intern.h
+++ b/src/pdflib/pdflib/p_intern.h
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_intern.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_intern.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib internal definitions
*
@@ -109,14 +109,21 @@ enum
};
#endif
-#define pdf_state_content \
+#define pdf_state_content \
(pdf_state) (pdf_state_page | pdf_state_pattern | \
pdf_state_template | pdf_state_glyph)
-#define pdf_state_all \
- (pdf_state) (pdf_state_object | pdf_state_document | pdf_state_page | \
- pdf_state_pattern | pdf_state_template | pdf_state_path | \
- pdf_state_font | pdf_state_glyph)
+#define pdf_state_firsttest \
+ (pdf_state) (pdf_state_document | pdf_state_content | \
+ pdf_state_path | pdf_state_font | \
+ pdf_state_glyphmetrics)
+
+#define pdf_state_documentall \
+ (pdf_state) (pdf_state_document | pdf_state_content | \
+ pdf_state_path | pdf_state_font | \
+ pdf_state_glyphmetrics | pdf_state_glyphignore)
+
+#define pdf_state_all (pdf_state) (pdf_state_object | pdf_state_documentall)
#define PDF_STATE_STACK_SIZE 4
@@ -198,6 +205,14 @@ typedef struct pdf_widget_s pdf_widget;
typedef struct pdf_xobject_s pdf_xobject;
+/* -------------------- transparency group -------------------- */
+typedef struct
+{
+ pdf_colortype colorspace; /* color space */
+ pdc_bool isolated; /* isolated flag I */
+ pdc_bool knockout; /* knockout flag K */
+} pdf_transgroup;
+
/* -------------------- special graphics state -------------------- */
typedef struct {
pdc_matrix ctm; /* current transformation matrix */
@@ -230,16 +245,6 @@ typedef struct
pdc_vtr * mboxes; /* matchbox chain */
- /* in update mode, the resource numbers generally don't start
- ** with 0, but with a bias value derived from the original
- ** page's resources.
- */
- int cs_bias; /* colorspaces */
- int eg_bias; /* extended gstates */
- int fn_bias; /* fonts */
- int pt_bias; /* patterns */
- int sh_bias; /* shadings */
- int xo_bias; /* xobjects */
} pdf_ppt;
/* Force graphics or color operator output, avoiding the optimization
@@ -736,6 +741,7 @@ void pdf_cleanup_image(PDF *p, int im);
void pdf_get_image_size(PDF *p, int im, pdc_scalar *width, pdc_scalar *height);
void pdf_get_image_resolution(PDF *p, int im, pdc_scalar *dpi_x,
pdc_scalar *dpi_y);
+int pdf_get_image_colorspace(PDF *p, int im);
@@ -810,7 +816,7 @@ int pdf_search_page_fwd(PDF *p, int start_page, pdc_id id);
int pdf_search_page_bwd(PDF *p, int start_page, pdc_id id);
int pdf_xlat_pageno(PDF *p, int pageno, const char *groupname);
-double pdf_get_pageheight(PDF *p);
+pdc_scalar pdf_get_pageheight(PDF *p);
const pdc_rectangle *pdf_get_pagebox(PDF *p, pdf_pagebox box);
void pdf_set_pagebox_llx(PDF *p, pdf_pagebox box, pdc_scalar llx);
void pdf_set_pagebox_lly(PDF *p, pdf_pagebox box, pdc_scalar lly);
@@ -818,11 +824,14 @@ void pdf_set_pagebox_urx(PDF *p, pdf_pagebox box, pdc_scalar urx);
void pdf_set_pagebox_ury(PDF *p, pdf_pagebox box, pdc_scalar ury);
void pdf_set_pagebox(PDF *p, pdf_pagebox box, pdc_scalar llx, pdc_scalar lly,
pdc_scalar urx, pdc_scalar ury);
+void pdf_set_transgroup(PDF *p, const char *optlist, pdf_transgroup *tgroup);
+void pdf_write_transgroup(PDF *p, pdf_transgroup *tgroup);
pdc_vtr *pdf_get_annots_list(PDF *p);
void pdf_set_annots_list(PDF *p, pdc_vtr *annots);
pdc_id pdf_get_thumb_id(PDF *p);
void pdf_set_thumb_id(PDF *p, pdc_id id);
+void pdf_set_autotgroup(PDF *p, pdc_bool autotgroup);
void pdf_begin_contents_section(PDF *p);
void pdf_end_contents_section(PDF *p);
@@ -979,12 +988,16 @@ char *pdf_convert_hypertext_depr(PDF *p, const char *text, int len);
char *pdf_convert_hypertext(PDF *p, const char *text, int len,
pdc_text_format hypertextformat, pdc_encoding hypertextencoding,
int codepage, int *outlen, pdc_bool oututf8, pdc_bool verbose);
+char *pdf_convert_pdfstring(PDF *p, const char *text, int inlen, int convflags,
+ int *outlen);
void pdf_put_hypertext(PDF *p, const char *text);
char *pdf_convert_name(PDF *p, const char *name, int len, int flags);
const char *pdf_convert_filename(PDF *p, const char *filename, int len,
const char *paramname, int flags);
-void pdf_add_resource(PDF *p, const char *category, const char *resname);
+void pdf_add_pdflib_resource(PDF *p, const char *category, const char *resname);
void pdf_put_pdffilename(PDF *p, const char *text);
+void pdf_put_pdfunifilename(PDF *p, const char *text);
+int pdf_check_opt_handle(void *opaque, int handle, pdc_opttype type);
void pdf_check_handle(PDF *p, int value, pdc_opttype type);
void pdf_set_clientdata(PDF *p, pdc_clientdata *clientdata);
void pdf_init_stringlists(PDF *p);
@@ -995,6 +1008,8 @@ const char *pdf_get_utilstring(PDF *p, int i);
int pdf_get_opt_textlist(PDF *p, const char *keyword, pdc_resopt *resopts,
pdc_encoding enc, int codepage, pdc_bool ishypertext,
const char *fieldname, char **text, char ***textlist);
+char *pdf_get_opt_filename(PDF *p, const char *keyword, pdc_resopt *resopts,
+ pdc_encoding enc, int codepage);
char *pdf_get_opt_utf8name(PDF *p, const char *keyword, pdc_resopt *resopts);
pdc_bool pdf_get_errorpolicy(PDF *p, pdc_resopt *resopts, pdc_bool verbose);
@@ -1025,3 +1040,4 @@ pdc_id pdf_get_gstate_id(PDF *p, int gstate);
+
diff --git a/src/pdflib/pdflib/p_jpeg.c b/src/pdflib/pdflib/p_jpeg.c
index 467f282..fb7cd18 100644
--- a/src/pdflib/pdflib/p_jpeg.c
+++ b/src/pdflib/pdflib/p_jpeg.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_jpeg.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_jpeg.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* JPEG processing for PDFlib
*
@@ -36,14 +36,13 @@ pdf_process_JPEG_data(
PDF *p,
int imageslot)
{
- pdf_image *image = &p->images[imageslot];
+ (void) imageslot;
pdc_set_errmsg(p->pdc, PDF_E_UNSUPP_IMAGE, "JPEG", 0, 0, 0);
return -1;
}
-/* CDPDF - added missing function */
void
pdf_cleanup_jpeg(PDF *p, pdf_image *image)
{
diff --git a/src/pdflib/pdflib/p_jpx.c b/src/pdflib/pdflib/p_jpx.c
index 73e364c..412339c 100644
--- a/src/pdflib/pdflib/p_jpx.c
+++ b/src/pdflib/pdflib/p_jpx.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_jpx.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_jpx.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* JPEG2000 processing for PDFlib
*
diff --git a/src/pdflib/pdflib/p_kerning.c b/src/pdflib/pdflib/p_kerning.c
index bc711ba..035d273 100644
--- a/src/pdflib/pdflib/p_kerning.c
+++ b/src/pdflib/pdflib/p_kerning.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_kerning.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_kerning.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib kerning routines
*
diff --git a/src/pdflib/pdflib/p_keyconn.h b/src/pdflib/pdflib/p_keyconn.h
index a56d783..86e13ce 100644
--- a/src/pdflib/pdflib/p_keyconn.h
+++ b/src/pdflib/pdflib/p_keyconn.h
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_keyconn.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_keyconn.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib shared keys connection lists
*
@@ -25,17 +25,17 @@
typedef enum
{
- pdf_state_object = (1<<0), /* outside any document */
- pdf_state_document = (1<<1), /* document */
- pdf_state_page = (1<<2), /* page description in a document */
- pdf_state_pattern = (1<<3), /* pattern in a document */
- pdf_state_template = (1<<4), /* template in a document */
- pdf_state_path = (1<<5), /* path in a page description */
- pdf_state_font = (1<<6), /* font definition */
- pdf_state_glyph = (1<<7), /* glyph description in a Type3 font */
- pdf_state_glyphmetric = (1<<8), /* glyph metric in a Type3 font */
- pdf_state_glyphignore = (1<<9), /* glyph will be ignored without error */
- pdf_state_error = (1<<10) /* in error cleanup */
+ pdf_state_object = (1<<0), /* outside any document */
+ pdf_state_document = (1<<1), /* document */
+ pdf_state_page = (1<<2), /* page description in a document */
+ pdf_state_pattern = (1<<3), /* pattern in a document */
+ pdf_state_template = (1<<4), /* template in a document */
+ pdf_state_path = (1<<5), /* path in a page description */
+ pdf_state_font = (1<<6), /* font definition */
+ pdf_state_glyph = (1<<7), /* glyph description in a Type3 font */
+ pdf_state_glyphmetrics = (1<<8), /* glyph metrics in a Type3 font */
+ pdf_state_glyphignore = (1<<9), /* glyph ignored without error */
+ pdf_state_error = (1<<10) /* in error cleanup */
}
pdf_state;
@@ -50,7 +50,7 @@ pdf_errpol;
typedef enum
{
names_undef = 0,
- names_3dannots, /* internal for named 3D annotations */
+ names_annots, /* internal for named 3D or Movie annotations */
names_dests,
names_javascript,
names_ap,
@@ -167,6 +167,7 @@ typedef enum
fo_subsetting,
fo_unicodemap,
fo_embedopentype,
+ fo_skipposttable,
fo_vertical,
fo_keepnative,
fo_replacementchar,
@@ -421,6 +422,19 @@ static const pdc_keyconn pdf_mbox_keylist[] =
#endif /* P_MBOX_C */
+#if defined(P_PAGE_C) || defined(P_TEMPLATE_C)
+
+static const pdc_keyconn pdf_tgroup_cs_pdfkeylist[] =
+{
+ {"DeviceGray", color_gray},
+ {"DeviceRGB", color_rgb},
+ {"DeviceCMYK", color_cmyk},
+ {NULL, 0}
+};
+
+#endif /* P_PAGE_C || P_TEMPLATE_C */
+
+
#if defined(P_DOCUMENT_C) || defined(P_PARAMS_C)
static const pdc_keyconn pdf_compatibility_keylist[] =
@@ -492,7 +506,7 @@ static const pdc_keyconn pdf_renderingintent_pdfkeylist[] =
#endif /* P_IMAGE_C || P_PARAMS_C || P_XGSTATE_C */
-#if defined(P_MBOX_C) || defined(P_XGSTATE_C)
+#if defined(P_MBOX_C) || defined(P_TABLE_C) || defined(P_XGSTATE_C)
static const pdc_keyconn pdf_linecap_keylist[] =
{
@@ -510,7 +524,19 @@ static const pdc_keyconn pdf_linejoin_keylist[] =
{NULL, 0}
};
-#endif /* P_MBOX_C || P_XGSTATE_C */
+#endif /* P_MBOX_C || P_TABLE_C || P_XGSTATE_C */
+
+
+#if defined(P_PARAMS_C) || defined(P_TEXTFLOW_C)
+
+static const pdc_keyconn pdf_fillrule_keylist[] =
+{
+ {"winding", pdf_fill_winding },
+ {"evenodd", pdf_fill_evenodd },
+ {NULL, 0}
+};
+
+#endif /* P_PARAMS_C || P_TEXTFLOW_C */
#if defined(P_DOCUMENT_C) || defined(P_PARAMS_C) || defined(P_PDI_C)
@@ -622,7 +648,7 @@ static const pdc_keyconn pdf_glyphcheck_keylist[] =
#endif /* P_BLOCK_C || P_PARAMS_C || P_TEXT_C || P_TEXTFLOW_C */
-#if defined(P_BLOCK_C) || defined(P_FIELDS_C) || \
+#if defined(P_ANNOTS_C) || defined(P_BLOCK_C) || defined(P_FIELDS_C) || \
defined(P_IMAGE_C) || defined(P_TEXT_C)
static const pdc_keyconn pdf_position_keylist[] =
@@ -635,7 +661,7 @@ static const pdc_keyconn pdf_position_keylist[] =
{NULL, 0}
};
-#endif /* P_BLOCK_C || P_FIELDS_C || P_IMAGE_C || P_TEXT_C */
+#endif /* P_ANNOTS_C || P_BLOCK_C || P_FIELDS_C || P_IMAGE_C || P_TEXT_C */
#if defined(P_BLOCK_C) || defined(P_FIELDS_C) || \
diff --git a/src/pdflib/pdflib/p_layer.c b/src/pdflib/pdflib/p_layer.c
index 1600a5b..7fb7321 100644
--- a/src/pdflib/pdflib/p_layer.c
+++ b/src/pdflib/pdflib/p_layer.c
@@ -9,7 +9,7 @@
| available, please check http://www.pdflib.com. |
*---------------------------------------------------------------------------*/
-/* $Id: p_layer.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_layer.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib optional content routines
*
@@ -34,3 +34,5 @@
+
+
diff --git a/src/pdflib/pdflib/p_layer.h b/src/pdflib/pdflib/p_layer.h
index 74d51eb..41f350b 100644
--- a/src/pdflib/pdflib/p_layer.h
+++ b/src/pdflib/pdflib/p_layer.h
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_layer.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_layer.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib marked content header
*
diff --git a/src/pdflib/pdflib/p_mbox.c b/src/pdflib/pdflib/p_mbox.c
index db6ffff..0c7497e 100644
--- a/src/pdflib/pdflib/p_mbox.c
+++ b/src/pdflib/pdflib/p_mbox.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_mbox.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_mbox.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib matchbox related routines
*
@@ -452,9 +452,9 @@ pdf_set_mbox_rectangle(PDF *p, pdf_mbox *mbox, pdc_rectangle *rect, int flags)
if (!(flags & mbox_statbottom))
{
if (mbox->percentbottom)
- mbox->rect.lly += mbox->offsetbottom * height;
+ mbox->rect.lly += p->ydirection * mbox->offsetbottom * height;
else
- mbox->rect.lly += mbox->offsetbottom;
+ mbox->rect.lly += p->ydirection * mbox->offsetbottom;
}
if (!(flags & mbox_statright))
@@ -468,9 +468,9 @@ pdf_set_mbox_rectangle(PDF *p, pdf_mbox *mbox, pdc_rectangle *rect, int flags)
if (!(flags & mbox_stattop))
{
if (mbox->percenttop)
- mbox->rect.ury += mbox->offsettop * height;
+ mbox->rect.ury += p->ydirection * mbox->offsettop * height;
else
- mbox->rect.ury += mbox->offsettop;
+ mbox->rect.ury += p->ydirection * mbox->offsettop;
}
}
@@ -620,7 +620,7 @@ pdf_get_usematchbox(PDF *p, const char *option, const char *optval,
&strlist);
if (ns)
{
- boxname = pdc_errprintf(p->pdc, "%.*s", PDC_ERR_MAXSTRLEN, strlist[0]);
+ boxname = pdc_strdup_tmp(p->pdc, strlist[0]);
/* number of rectangles */
pdf_get_mbox(p, NULL, boxname, 0, &nrect);
@@ -674,16 +674,18 @@ static const pdc_keyconn pdf_info_keylist[] =
{
{"count", 0},
{"exists", 1},
- {"width", 2},
- {"height", 3},
- {"x1", 4},
- {"y1", 5},
- {"x2", 6},
- {"y2", 7},
- {"x3", 8},
- {"y3", 9},
- {"x4", 10},
- {"y4", 11},
+ {"name", 2},
+
+ {"width", 3},
+ {"height", 4},
+ {"x1", 5},
+ {"y1", 6},
+ {"x2", 7},
+ {"y2", 8},
+ {"x3", 9},
+ {"y3", 10},
+ {"x4", 11},
+ {"y4", 12},
{NULL, 0}
};
@@ -692,7 +694,6 @@ pdf__info_matchbox(PDF *p, const char *boxname, int len, int num,
const char *keyword)
{
pdf_mbox *mbox;
- char *cname;
double mbinfo = 0;
int infokey, count;
@@ -703,20 +704,21 @@ pdf__info_matchbox(PDF *p, const char *boxname, int len, int num,
pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "keyword", 0, 0, 0);
/* Converting boxname */
- cname = pdf_convert_name(p, boxname, len, 0);
- if (cname == NULL || *cname == '\0')
+ boxname = pdf_convert_name(p, boxname, len, PDC_CONV_TMPALLOC);
+ if (boxname == NULL || *boxname == '\0')
pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "boxname", 0, 0, 0);
- boxname = pdc_errprintf(p->pdc, "%.*s", PDC_ERR_MAXSTRLEN, cname);
- pdc_free(p->pdc, cname);
infokey = pdc_get_keycode_ci(keyword, pdf_info_keylist);
if (infokey == PDC_KEY_NOTFOUND)
pdc_error(p->pdc, PDC_E_ILLARG_STRING, "keyword", keyword, 0, 0);
+ if (!strcmp(boxname, "*"))
+ boxname = NULL;
+
/* count */
if (!infokey)
{
- pdf_get_mbox(p, NULL, boxname, num, &count);
+ pdf_get_mbox(p, NULL, boxname, -1, &count);
mbinfo = (double) count;
}
else
@@ -735,51 +737,63 @@ pdf__info_matchbox(PDF *p, const char *boxname, int len, int num,
switch (infokey)
{
+ /* exists */
case 1:
mbinfo = 1;
break;
+ /* name */
case 2:
- mbinfo = pdc_get_vector_length(&polyline[0], &polyline[1]);
+ mbinfo = (double)
+ pdf_insert_utilstring(p, mbox->name, pdc_true);
break;
+ /* geometrical keys */
case 3:
- mbinfo = pdc_get_vector_length(&polyline[0], &polyline[3]);
+ mbinfo = pdc_get_vector_length(&polyline[0], &polyline[1]);
break;
case 4:
- mbinfo = polyline[0].x;
+ mbinfo = pdc_get_vector_length(&polyline[0], &polyline[3]);
break;
case 5:
- mbinfo = polyline[0].y;
+ mbinfo = polyline[0].x;
break;
case 6:
- mbinfo = polyline[1].x;
+ mbinfo = polyline[0].y;
break;
case 7:
- mbinfo = polyline[1].y;
+ mbinfo = polyline[1].x;
break;
case 8:
- mbinfo = polyline[2].x;
+ mbinfo = polyline[1].y;
break;
case 9:
- mbinfo = polyline[2].y;
+ mbinfo = polyline[2].x;
break;
case 10:
- mbinfo = polyline[3].x;
+ mbinfo = polyline[2].y;
break;
case 11:
+ mbinfo = polyline[3].x;
+ break;
+
+ case 12:
mbinfo = polyline[3].y;
break;
}
}
+ else if (infokey == 2)
+ {
+ mbinfo = -1;
+ }
}
return mbinfo;
diff --git a/src/pdflib/pdflib/p_object.c b/src/pdflib/pdflib/p_object.c
index 8ff285c..2c2d28b 100644
--- a/src/pdflib/pdflib/p_object.c
+++ b/src/pdflib/pdflib/p_object.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_object.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_object.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib PDF object functions
*
@@ -25,17 +25,17 @@
static const pdc_keyconn pdf_scope_keylist[] =
{
- {"object", pdf_state_object},
- {"document", pdf_state_document},
- {"page", pdf_state_page},
- {"pattern", pdf_state_pattern},
- {"template", pdf_state_template},
- {"path", pdf_state_path},
- {"font", pdf_state_font},
- {"glyph", pdf_state_glyph},
- {"glyphmetric", pdf_state_glyphmetric},
- {"glyphignore", pdf_state_glyphignore},
- {"error", pdf_state_error},
+ {"object", pdf_state_object},
+ {"document", pdf_state_document},
+ {"page", pdf_state_page},
+ {"pattern", pdf_state_pattern},
+ {"template", pdf_state_template},
+ {"path", pdf_state_path},
+ {"font", pdf_state_font},
+ {"glyph", pdf_state_glyph},
+ {"glyphmetrics", pdf_state_glyphmetrics},
+ {"glyphignore", pdf_state_glyphignore},
+ {"error", pdf_state_error},
{NULL, 0}
};
@@ -243,7 +243,10 @@ pdf__delete(PDF *p)
if (p->out)
+ {
pdc_free(p->pdc, p->out);
+ p->out = NULL;
+ }
/* we never reach this point if (p->pdc == NULL).
*/
diff --git a/src/pdflib/pdflib/p_opi.c b/src/pdflib/pdflib/p_opi.c
index 94cb435..2d2a308 100644
--- a/src/pdflib/pdflib/p_opi.c
+++ b/src/pdflib/pdflib/p_opi.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_opi.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_opi.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib OPI routines
*
diff --git a/src/pdflib/pdflib/p_page.c b/src/pdflib/pdflib/p_page.c
index c03aaf3..02be317 100644
--- a/src/pdflib/pdflib/p_page.c
+++ b/src/pdflib/pdflib/p_page.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_page.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_page.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib page related routines
*
@@ -67,21 +67,6 @@ static const pdc_keyconn pdf_taborder_pdfkeylist[] =
{NULL, 0}
};
-static const pdc_keyconn pdf_colorspace_pdfkeylist[] =
-{
- {"DeviceGray", color_gray},
- {"DeviceRGB", color_rgb},
- {"DeviceCMYK", color_cmyk},
- {NULL, 0}
-};
-
-typedef struct
-{
- pdf_colortype colorspace; /* color space */
- pdc_bool isolated; /* isolated flag I */
- pdc_bool knockout; /* knockout flag K */
-} pg_transgroup;
-
typedef struct
{
pdf_labelstyle style; /* page label style */
@@ -160,7 +145,8 @@ typedef struct
pdc_scalar userunit; /* page user unit */
char * action; /* "action" option string */
- pg_transgroup tgroup; /* transparency group definition */
+ pdf_transgroup tgroup; /* transparency group definition */
+ pdc_bool autotgroup; /* create transp. group automatically */
pdc_id * act_idlist; /* action object ids */
@@ -218,31 +204,28 @@ static const pdc_rectangle pdf_null_rect =
/*********************** initialization & cleanup ***********************/
static void
-pdf_init_ppt(PDF *p, pdc_bool new_ppt)
+pdf_init_ppt(PDF *p)
{
pdf_ppt *ppt = p->curr_ppt;
- if (new_ppt)
- {
- ppt->cstate = 0;
- ppt->tstate = 0;
+ ppt->cstate = (pdf_cstate *) 0;
+ ppt->tstate = (pdf_tstate *) 0;
- ppt->mboxes = (pdc_vtr *) 0;
+ ppt->mboxes = (pdc_vtr *) 0;
- ppt->cs_bias = 0;
- ppt->eg_bias = 0;
- ppt->fn_bias = 0;
- ppt->pt_bias = 0;
- ppt->sh_bias = 0;
- ppt->xo_bias = 0;
- }
+} /* pdf_init_ppt */
+
+static void
+pdf_init_ppt_states(PDF *p)
+{
+ pdf_ppt *ppt = p->curr_ppt;
ppt->sl = 0;
pdf_init_tstate(p);
pdf_init_gstate(p);
pdf_init_cstate(p);
-} /* pdf_init_ppt */
+} /* pdf_init_ppt_states */
static void
pdf_reset_ppt(pdf_ppt *ppt)
@@ -305,6 +288,7 @@ pdf_init_page_obj(page_obj *po)
po->tgroup.colorspace = color_none;
po->tgroup.isolated = pdc_false;
po->tgroup.knockout = pdc_false;
+ po->autotgroup = pdc_false;
po->annots_id = PDC_BAD_ID;
po->contents_id = PDC_BAD_ID;
@@ -363,6 +347,9 @@ pdf_init_pages(PDF *p, const char **groups, int n_groups)
dp->pages = (page_obj *) 0;
dp->pnodes = (pdc_id *) 0;
+ p->curr_ppt = &dp->default_ppt;
+ pdf_init_ppt(p);
+
dp->pages_capacity = PAGES_CHUNKSIZE;
dp->pages = (page_obj *)
pdc_malloc(p->pdc, sizeof (page_obj) * dp->pages_capacity, fn);
@@ -383,13 +370,6 @@ pdf_init_pages(PDF *p, const char **groups, int n_groups)
dp->current_pnode = 0;
dp->current_pnode_kids = 0;
- /* clients may set char/word spacing and horizontal scaling outside pages
- ** for PDF_stringwidth() calculations, and they may set a color for use
- ** in PDF_makespotcolor(). that's what default_ppt is good for.
- */
- p->curr_ppt = &dp->default_ppt;
- pdf_init_ppt(p, pdc_true);
-
for (i = 0; i < n_groups - 1; ++i)
for (k = i + 1; k < n_groups; ++k)
if (strcmp(groups[i], groups[k]) == 0)
@@ -410,6 +390,13 @@ pdf_init_pages(PDF *p, const char **groups, int n_groups)
dp->groups[i].label.prefix = (char *) 0;
dp->groups[i].label.start = 0;
}
+
+ /* clients may set char/word spacing and horizontal scaling outside pages
+ ** for PDF_stringwidth() calculations, and they may set a color for use
+ ** in PDF_makespotcolor(). that's what default_ppt is good for.
+ */
+ pdf_init_ppt_states(p);
+
} /* pdf_init_pages */
@@ -806,22 +793,20 @@ pdf_write_pagelabels(PDF *p)
static const pdc_defopt pdf_transgroup_options[] =
{
{"CS", pdc_keywordlist, PDC_OPT_NONE, 1, 1,
- 1.0, PDC_INT_MAX, pdf_colorspace_pdfkeylist},
+ 1.0, PDC_INT_MAX, pdf_tgroup_cs_pdfkeylist},
{"I", pdc_booleanlist, PDC_OPT_NONE, 1, 1,
0.0, 0.0, NULL},
- {"K", pdc_booleanlist, PDC_OPT_NONE, 1, 1, \
- 0.0, 0.0, NULL}, \
+ {"K", pdc_booleanlist, PDC_OPT_NONE, 1, 1,
+ 0.0, 0.0, NULL},
PDC_OPT_TERMINATE
};
-static void
-pdf_set_transgroup(PDF *p, const char *optlist, int pageno)
+void
+pdf_set_transgroup(PDF *p, const char *optlist, pdf_transgroup *tgroup)
{
- pdf_pages * dp = p->doc_pages;
- page_obj * po = &dp->pages[pageno];
pdc_resopt *resopts = NULL;
int inum;
@@ -829,29 +814,28 @@ pdf_set_transgroup(PDF *p, const char *optlist, int pageno)
NULL, pdc_true);
if (pdc_get_optvalues("CS", resopts, &inum, NULL))
- po->tgroup.colorspace = (pdf_colortype) inum;
+ tgroup->colorspace = (pdf_colortype) inum;
- pdc_get_optvalues("I", resopts, &po->tgroup.isolated, NULL);
- pdc_get_optvalues("K", resopts, &po->tgroup.knockout, NULL);
+ pdc_get_optvalues("I", resopts, &tgroup->isolated, NULL);
+ pdc_get_optvalues("K", resopts, &tgroup->knockout, NULL);
}
-static void
-write_transgroup(PDF *p, int pageno)
+void
+pdf_write_transgroup(PDF *p, pdf_transgroup *tgroup)
{
- pdf_pages * dp = p->doc_pages;
- page_obj *po = &dp->pages[pageno];
-
pdc_puts(p->out, "/Group");
pdc_begin_dict(p->out);
- pdc_printf(p->out, "/S/Transparency/CS/%s",
- pdc_get_keyword(po->tgroup.colorspace,
- pdf_colorspace_pdfkeylist));
- if (po->tgroup.isolated)
- pdc_printf(p->out, "/I true");
+ pdc_puts(p->out, "/S/Transparency/CS/");
+
+ pdc_printf(p->out, "%s", pdc_get_keyword(tgroup->colorspace,
+ pdf_tgroup_cs_pdfkeylist));
- if (po->tgroup.knockout)
- pdc_printf(p->out, "/K true");
+ if (tgroup->isolated)
+ pdc_puts(p->out, "/I true");
+
+ if (tgroup->knockout)
+ pdc_puts(p->out, "/K true");
pdc_end_dict(p->out);
}
@@ -949,7 +933,7 @@ pdf_search_page_bwd(PDF *p, int start_page, pdc_id id)
} /* pdf_search_page_bwd */
-double
+pdc_scalar
pdf_get_pageheight(PDF *p)
{
pdf_pages * dp = p->doc_pages;
@@ -1099,12 +1083,21 @@ pdf_get_thumb_id(PDF *p)
void
pdf_set_thumb_id(PDF *p, pdc_id id)
{
- pdf_pages * dp = p->doc_pages;
- page_obj * po = &dp->pages[dp->current_page];
+ pdf_pages * dp = p->doc_pages;
+ page_obj * po = &dp->pages[dp->current_page];
po->thumb_id = id;
} /* pdf_set_thumb_id */
+void
+pdf_set_autotgroup(PDF *p, pdc_bool autotgroup)
+{
+ pdf_pages * dp = p->doc_pages;
+ page_obj * po = &dp->pages[dp->current_page];
+
+ po->autotgroup = autotgroup;
+} /* pdf_set_thumb_id */
+
/************************* contents sections ***************************/
@@ -1323,7 +1316,7 @@ pdf_write_pages_tree(PDF *p)
pdc_printf(p->out, "/Tabs/%s\n",
pdc_get_keyword(po->taborder, pdf_taborder_pdfkeylist));
- if (po->userunit > 1.0)
+ if (po->userunit != 1.0)
pdc_printf(p->out, "/UserUnit %f\n", po->userunit);
if (po->rotate > 0)
@@ -1345,8 +1338,11 @@ pdf_write_pages_tree(PDF *p)
pdc_end_dict(p->out);
}
+ if (po->tgroup.colorspace == color_none && po->autotgroup)
+ po->tgroup.colorspace = color_rgb;
+
if (po->tgroup.colorspace != color_none)
- write_transgroup(p, i);
+ pdf_write_transgroup(p, &po->tgroup);
pdf_write_box(p, po->boxes[pdf_artbox], "ArtBox");
pdf_write_box(p, po->boxes[pdf_bleedbox], "BleedBox");
@@ -1532,7 +1528,7 @@ static const pdc_keyconn pdf_userunit_keylist[] =
{"transition", pdc_keywordlist, PDC_OPT_NONE, 1, 1, \
0.0, 0.0, pdf_transition_keylist}, \
\
- {"transparencygroup", pdc_stringlist, PDC_OPT_NONE, 1, 1, \
+ {"transparencygroup", pdc_stringlist, PDC_OPT_PDC_1_4, 1, 1, \
1.0, PDF_MAX_NAMESTRING, NULL}, \
\
{"taborder", pdc_keywordlist, PDC_OPT_PDC_1_5, 1, 1, \
@@ -1643,8 +1639,8 @@ get_page_options3(PDF *p, pdc_resopt *resopts, pdc_bool end_page)
pdc_get_optvalues("taborder", resopts, &po->taborder, NULL);
pdc_get_optvalues("duration", resopts, &po->duration, NULL);
pdc_get_optvalues("userunit", resopts, &po->userunit, NULL);
- if (po->userunit < 1.0)
- po->userunit = 72.0 / (PDC_INCH2METER * fabs(po->userunit));
+ if (po->userunit < 0.0)
+ po->userunit = 72.0 / (PDC_INCH2METER * -po->userunit);
if (pdc_get_optvalues("label", resopts, NULL, NULL))
{
@@ -1654,7 +1650,7 @@ get_page_options3(PDF *p, pdc_resopt *resopts, pdc_bool end_page)
}
if (pdc_get_optvalues("transparencygroup", resopts, NULL, &slist))
- pdf_set_transgroup(p, slist[0], pageno);
+ pdf_set_transgroup(p, slist[0], &po->tgroup);
/* the "width" and "height" options must be processed BEFORE the
** "mediabox" option, since the latter dominates over the formers.
@@ -1711,6 +1707,8 @@ get_page_options3(PDF *p, pdc_resopt *resopts, pdc_bool end_page)
} /* get_page_options3 */
+#if 0
+#endif
static const pdc_defopt pdf_begin_page_ext_options[] =
{
@@ -1807,6 +1805,7 @@ pdf__begin_page_ext(
pg = dp->curr_pg = (pdf_page *) pdc_malloc(p->pdc, sizeof (pdf_page), fn);
p->curr_ppt = &pg->ppt;
+ pdf_init_ppt(p);
pg->contents_ids = (pdc_id *) 0;
pg->annots = (pdc_vtr *) 0;
@@ -1845,7 +1844,7 @@ pdf__begin_page_ext(
/* initialize the current ppt descriptor. p->ydirection
** must be set before pdf_init_ppt()!
*/
- pdf_init_ppt(p, pdc_true);
+ pdf_init_ppt_states(p);
pg->next_content = 0;
@@ -1866,6 +1865,8 @@ pdf__begin_page_ext(
/* set color differing from PDF default */
pdf_set_default_color(p, pdc_false);
+#if 0
+#endif
if (!p->pdc->smokerun)
@@ -1903,6 +1904,7 @@ pdf_pg_suspend(PDF *p)
{
pdf_page *pg = dp->curr_pg;
+
pdf_end_contents_section(p);
/* restore global parms.
@@ -1925,7 +1927,7 @@ pdf_pg_suspend(PDF *p)
p->curr_ppt = &dp->default_ppt;
}
- pdf_init_ppt(p, pdc_false);
+ pdf_init_ppt_states(p);
} /* pdf_pg_suspend */
@@ -2131,6 +2133,8 @@ pdf__end_page_ext(PDF *p, const char *optlist)
/* TODO (york): avoid memory leak in error case. */
pg = dp->curr_pg;
+#if 0
+#endif
pdf_end_contents_section(p);
@@ -2210,7 +2214,7 @@ pdf__end_page_ext(PDF *p, const char *optlist)
/* restore the default ppt for out-of-page usage.
*/
p->curr_ppt = &dp->default_ppt;
- pdf_init_ppt(p, pdc_false);
+ pdf_init_ppt_states(p);
PDF_SET_STATE(p, pdf_state_document);
pdf_delete_page(p, pg);
dp->curr_pg = (pdf_page *) 0;
@@ -2259,3 +2263,4 @@ pdf_set_transition(PDF *p, const char *transition)
p->doc_pages->transition = i;
}
+
diff --git a/src/pdflib/pdflib/p_page.h b/src/pdflib/pdflib/p_page.h
index 3f496e4..acfd861 100644
--- a/src/pdflib/pdflib/p_page.h
+++ b/src/pdflib/pdflib/p_page.h
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_page.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_page.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* Header file for the PDFlib page system
*
diff --git a/src/pdflib/pdflib/p_pantlab.h b/src/pdflib/pdflib/p_pantlab.h
index 79c35cc..67ad728 100644
--- a/src/pdflib/pdflib/p_pantlab.h
+++ b/src/pdflib/pdflib/p_pantlab.h
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_pantlab.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_pantlab.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib PANTONE spot LAB color table derived from
* PANTONE MATCHING SYSTEM
diff --git a/src/pdflib/pdflib/p_params.c b/src/pdflib/pdflib/p_params.c
index e55a8b1..efe2c87 100644
--- a/src/pdflib/pdflib/p_params.c
+++ b/src/pdflib/pdflib/p_params.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_params.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_params.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib parameter handling
*
@@ -25,12 +25,8 @@
#include "p_page.h"
#include "p_tagged.h"
-static const pdc_keyconn pdf_fillrule_keylist[] =
-{
- {"winding", pdf_fill_winding },
- {"evenodd", pdf_fill_evenodd },
- {NULL, 0}
-};
+#include "pc_scope.h"
+#include "pc_file.h"
/*
* PDF_get_parameter() and PDF_set_parameter() deal with strings,
@@ -42,6 +38,7 @@ typedef struct
char * name; /* parameter name */
pdc_bool mod_zero; /* PDF_get_() modifier argument must be 0 */
pdc_bool check_scope; /* check following scope for PDF_get_...() */
+ int deprecated; /* deprecated and unsupported level */
int scope; /* bit mask of legal states */
}
@@ -53,7 +50,7 @@ static pdf_parm_descr parms[] =
#include "p_params.h"
#undef pdf_gen_parm_descr
- { "", 0, 0, 0 }
+ { "", 0, 0, 0, 0 }
};
enum
@@ -78,9 +75,26 @@ pdf_get_index(PDF *p, const char *key, pdc_bool setpar)
if (pdc_stricmp(key, parms[i].name) == 0)
{
if ((setpar || parms[i].check_scope) &&
- (p->state_stack[p->state_sp] & parms[i].scope) == 0)
- pdc_error(p->pdc, PDF_E_DOC_SCOPE_SET, key,
- pdf_current_scope(p), 0, 0);
+ (p->state_stack[p->state_sp] & parms[i].scope) == 0 &&
+ (p->state_stack[p->state_sp] & pdf_state_glyphignore) == 0)
+ {
+ pdc_error(p->pdc,
+ setpar ? PDF_E_DOC_SCOPE_SET : PDF_E_DOC_SCOPE_GET,
+ key, pdf_current_scope(p), 0, 0);
+ }
+
+ if (parms[i].deprecated > 0)
+ {
+ pdc_logg_cond(p->pdc, 2, trc_api,
+ "[Parameter \"%s\" is deprecated since PDFlib %d]\n",
+ key, parms[i].deprecated);
+ }
+ else if (parms[i].deprecated < 0)
+ {
+ pdc_logg_cond(p->pdc, 2, trc_api,
+ "[Parameter \"%s\" is unsupported]\n", key);
+ }
+
return i;
}
}
@@ -110,7 +124,7 @@ pdf__set_parameter(PDF *p, const char *key, const char *value)
{
pdc_pagebox usebox = pdc_pbox_none;
pdc_text_format textformat = pdc_auto;
- char optlist[512];
+ char optlist[PDC_GEN_BUFSIZE];
pdf_ppt *ppt;
int i, k;
@@ -131,9 +145,7 @@ pdf__set_parameter(PDF *p, const char *key, const char *value)
if (k == PDC_KEY_NOTFOUND)
pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0);
usebox = (pdc_pagebox) k;
- strcpy(optlist, key);
- strcat(optlist, " ");
- strcat(optlist, value);
+ pdc_sprintf(p->pdc, pdc_false, optlist, "%s %s", key, value);
break;
case PDF_PARAMETER_TEXTFORMAT:
@@ -156,7 +168,7 @@ pdf__set_parameter(PDF *p, const char *key, const char *value)
case PDF_PARAMETER_ICCPROFILE:
case PDF_PARAMETER_STANDARDOUTPUTINTENT:
{
- pdf_add_resource(p, key, value);
+ pdf_add_pdflib_resource(p, key, value);
break;
}
@@ -393,8 +405,7 @@ pdf__set_parameter(PDF *p, const char *key, const char *value)
}
case PDF_PARAMETER_TRACEFILE:
- strcpy(optlist, "filename ");
- strcat(optlist, value);
+ pdc_sprintf(p->pdc, pdc_false, optlist, "filename %s", value);
pdc_set_logg_options(p->pdc, optlist);
break;
@@ -567,6 +578,15 @@ pdf__set_value(PDF *p, const char *key, double value)
switch (i)
{
+#if defined(WIN32) && !defined(__BORLANDC__)
+ case PDF_PARAMETER_MAXFILEHANDLES:
+ ivalue = pdc_set_maxfilehandles(p->pdc, ivalue);
+ if (ivalue == -1)
+ pdc_error(p->pdc, PDC_E_PAR_ILLVALUE,
+ pdc_errprintf(p->pdc, "%f", value), key, 0, 0);
+ break;
+#endif
+
case PDF_PARAMETER_COMPRESS:
if (ivalue < 0 || ivalue > 9)
pdc_error(p->pdc, PDC_E_PAR_ILLVALUE,
@@ -827,6 +847,12 @@ pdf__get_value(PDF *p, const char *key, double mod)
switch (i)
{
+#if defined(WIN32) && !defined(__BORLANDC__)
+ case PDF_PARAMETER_MAXFILEHANDLES:
+ result = (double) pdc_get_maxfilehandles();
+ break;
+#endif
+
case PDF_PARAMETER_COMPRESS:
result = (double) pdc_get_compresslevel(p->out);
break;
@@ -1126,6 +1152,10 @@ pdf__get_parameter(PDF *p, const char *key, double mod)
result = "lite";
break;
+ case PDF_PARAMETER_PRODUCT:
+ result = "PDFlib Lite";
+ break;
+
case PDF_PARAMETER_ERRORPOLICY:
result = pdc_get_keyword(p->errorpolicy, pdf_errpol_keylist);
break;
diff --git a/src/pdflib/pdflib/p_params.h b/src/pdflib/pdflib/p_params.h
index 12bbf6d..3fdcd75 100644
--- a/src/pdflib/pdflib/p_params.h
+++ b/src/pdflib/pdflib/p_params.h
@@ -10,40 +10,39 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_params.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_params.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib parameter table
*
*/
#if pdf_gen_parm_enum
-#define pdf_gen1(code, name, zero, check, scope) PDF_PARAMETER_##code,
+#define pdf_gen1(code, name, zero, check, depr, scope) PDF_PARAMETER_##code,
#elif pdf_gen_parm_descr
-#define pdf_gen1(code, name, zero, check, scope) \
- { name, zero, check, scope },
+#define pdf_gen1(code, name, zero, check, depr, scope) \
+ { name, zero, check, depr, scope },
#else
#error invalid inclusion of generator file
#endif
/*
- * Deprecated and unsupported parameters:
- * dep7 Deprecated since PDFlib 7
- * dep6 Deprecated since PDFlib 6
- * dep5 Deprecated since PDFlib 5
- * unsupp Unsupported (internal use, dysfunctional, or other)
+ * Deprecated and unsupported parameters (see variable depr = i):
+ * i = 0: Neither deprecated nor unsupported
+ * i > 0: Deprecated since PDFlib i
+ * i =-1: Unsupported (internal use, dysfunctional, or other)
*/
/*
List of unsupported control characters for the "debug" parameter:
2 disable the search for the Windows color directory via mscms.dll
e extract embedded ICC profiles from image files
- F throw an exception in PDF_load_font (dep7);
- g throw an exception in PDF_fit_textline and PDF_show (dep7)
+ F throw an exception in PDF_load_font (depr = 7);
+ g throw an exception in PDF_fit_textline and PDF_show (depr = 7)
h disable host font processing
- i throw an exception in PDF_load_image (dep7)
- I throw an exception in PDF_load_iccprofile (dep7);
- o throw an exception in PDF_begin_document (dep7)
- p throw an exception in PDF_open_pdi (dep7)
+ i throw an exception in PDF_load_image (depr = 7)
+ I throw an exception in PDF_load_iccprofile (depr = 7);
+ o throw an exception in PDF_begin_document (depr = 7)
+ p throw an exception in PDF_open_pdi (depr = 7)
On by default: e F I
*/
@@ -55,44 +54,46 @@
* ----------------------------------------------------------------------
*/
-pdf_gen1(OPENWARNING, "openwarning", 1, 1, pdf_state_all) /* dep6 */
-pdf_gen1(COMPRESS, "compress", 1, 1,
+pdf_gen1(OPENWARNING, "openwarning", 1, 1, 6, pdf_state_all)
+pdf_gen1(COMPRESS, "compress", 1, 1, 0,
pdf_state_page | pdf_state_document)
-pdf_gen1(FLUSH, "flush", 1, 1, pdf_state_all) /* dep6 */
-pdf_gen1(RESOURCEFILE, "resourcefile", 1, 1, pdf_state_all)
-pdf_gen1(COMPATIBILITY, "compatibility",1, 0, pdf_state_object) /* dep6 */
-pdf_gen1(PDFX, "pdfx", 1, 0, pdf_state_object) /* dep6 */
-pdf_gen1(SEARCHPATH, "SearchPath", 0, 1, pdf_state_all)
-pdf_gen1(ASCIIFILE, "asciifile", 1, 1, pdf_state_all)
-pdf_gen1(WARNING, "warning", 1, 1, pdf_state_all) /* dep7 */
-pdf_gen1(ERRORPOLICY, "errorpolicy", 1, 1, pdf_state_all)
-pdf_gen1(NODEMOSTAMP, "nodemostamp", 1, 0, pdf_state_object)
-pdf_gen1(LICENSE, "license", 1, 0, pdf_state_object)
-pdf_gen1(LICENCE, "licence", 1, 0, pdf_state_object) /* unsupp */
-pdf_gen1(LICENSEFILE, "licensefile", 1, 0, pdf_state_object)
-pdf_gen1(LICENCEFILE, "licencefile", 1, 0, pdf_state_object) /* unsupp */
-pdf_gen1(TRACE, "trace", 1, 1, pdf_state_all) /* dep7 */
-pdf_gen1(TRACEFILE, "tracefile", 1, 1, pdf_state_all) /* dep7 */
-pdf_gen1(TRACEMSG, "tracemsg", 1, 1, pdf_state_all) /* dep7 */
-pdf_gen1(LOGGING, "logging", 1, 1, pdf_state_all)
-pdf_gen1(LOGMSG, "logmsg", 1, 1, pdf_state_all)
-pdf_gen1(CHARREF, "charref", 1, 1, pdf_state_all)
-pdf_gen1(ESCAPESEQUENCE,"escapesequence",1,1, pdf_state_all)
-pdf_gen1(HONORLANG, "honorlang", 1, 1, pdf_state_all) /* unsupp */
-pdf_gen1(STRING, "string", 0, 1, pdf_state_all)
-pdf_gen1(SCOPE, "scope", 1, 1, pdf_state_all)
-
-pdf_gen1(SERIAL, "serial", 1, 0, pdf_state_object) /* unsupp */
-pdf_gen1(FLOATDIGITS, "floatdigits", 1, 1, pdf_state_all) /* unsupp */
-pdf_gen1(BINDING, "binding", 1, 1, pdf_state_all) /* unsupp */
-pdf_gen1(OBJORIENT, "objorient", 1, 1, pdf_state_all) /* unsupp */
-pdf_gen1(HASTOBEPOS, "hastobepos", 1, 1, pdf_state_all) /* unsupp */
-pdf_gen1(UNICAPLANG, "unicaplang", 1, 1, pdf_state_all) /* unsupp */
-pdf_gen1(DEBUG, "debug", 1, 1, pdf_state_all) /* unsupp */
-pdf_gen1(NODEBUG, "nodebug", 1, 1, pdf_state_all) /* unsupp */
-pdf_gen1(PTFRUN, "ptfrun", 1, 1, pdf_state_all) /* unsupp */
-pdf_gen1(SMOKERUN, "smokerun", 1, 1, pdf_state_all) /* unsupp */
-pdf_gen1(CONFIGURATION, "configuration",1, 1, pdf_state_all) /* unsupp */
+pdf_gen1(FLUSH, "flush", 1, 1, 6, pdf_state_all)
+pdf_gen1(RESOURCEFILE, "resourcefile", 1, 1, 0, pdf_state_all)
+pdf_gen1(COMPATIBILITY, "compatibility",1, 0, 6, pdf_state_object)
+pdf_gen1(PDFX, "pdfx", 1, 0, 6, pdf_state_object)
+pdf_gen1(SEARCHPATH, "SearchPath", 0, 1, 0, pdf_state_all)
+pdf_gen1(ASCIIFILE, "asciifile", 1, 1, 0, pdf_state_all)
+pdf_gen1(WARNING, "warning", 1, 1, 7, pdf_state_all)
+pdf_gen1(ERRORPOLICY, "errorpolicy", 1, 1, 0, pdf_state_all)
+pdf_gen1(NODEMOSTAMP, "nodemostamp", 1, 0, 0, pdf_state_object)
+pdf_gen1(LICENSE, "license", 1, 0, 0, pdf_state_object)
+pdf_gen1(LICENCE, "licence", 1, 0,-1, pdf_state_object)
+pdf_gen1(LICENSEFILE, "licensefile", 1, 0, 0, pdf_state_object)
+pdf_gen1(LICENCEFILE, "licencefile", 1, 0,-1, pdf_state_object)
+pdf_gen1(TRACE, "trace", 1, 1, 7, pdf_state_all)
+pdf_gen1(TRACEFILE, "tracefile", 1, 1, 7, pdf_state_all)
+pdf_gen1(TRACEMSG, "tracemsg", 1, 1, 7, pdf_state_all)
+pdf_gen1(LOGGING, "logging", 1, 1, 0, pdf_state_all)
+pdf_gen1(LOGMSG, "logmsg", 1, 1, 0, pdf_state_all)
+pdf_gen1(CHARREF, "charref", 1, 1, 0, pdf_state_all)
+pdf_gen1(ESCAPESEQUENCE,"escapesequence",1,1, 0, pdf_state_all)
+pdf_gen1(HONORLANG, "honorlang", 1, 1,-1, pdf_state_all)
+pdf_gen1(STRING, "string", 0, 1, 0, pdf_state_all)
+pdf_gen1(SCOPE, "scope", 1, 1, 0, pdf_state_all)
+
+pdf_gen1(SERIAL, "serial", 1, 0,-1, pdf_state_object)
+pdf_gen1(FLOATDIGITS, "floatdigits", 1, 1,-1, pdf_state_all)
+pdf_gen1(BINDING, "binding", 1, 1,-1, pdf_state_all)
+pdf_gen1(OBJORIENT, "objorient", 1, 1,-1, pdf_state_all)
+pdf_gen1(HASTOBEPOS, "hastobepos", 1, 1,-1, pdf_state_all)
+pdf_gen1(UNICAPLANG, "unicaplang", 1, 1,-1, pdf_state_all)
+pdf_gen1(DEBUG, "debug", 1, 1,-1, pdf_state_all)
+pdf_gen1(NODEBUG, "nodebug", 1, 1,-1, pdf_state_all)
+pdf_gen1(PTFRUN, "ptfrun", 1, 1,-1, pdf_state_all)
+pdf_gen1(SMOKERUN, "smokerun", 1, 1,-1, pdf_state_all)
+pdf_gen1(CONFIGURATION, "configuration",1, 1,-1, pdf_state_all)
+pdf_gen1(PRODUCT, "product", 1, 1,-1, pdf_state_all)
+pdf_gen1(MAXFILEHANDLES,"maxfilehandles",1, 1,-1, pdf_state_object)
/*
@@ -101,10 +102,10 @@ pdf_gen1(CONFIGURATION, "configuration",1, 1, pdf_state_all) /* unsupp */
* ----------------------------------------------------------------------
*/
-pdf_gen1(MAJOR, "major", 1, 1, pdf_state_all)
-pdf_gen1(MINOR, "minor", 1, 1, pdf_state_all)
-pdf_gen1(REVISION, "revision", 1, 1, pdf_state_all)
-pdf_gen1(VERSION, "version", 1, 1, pdf_state_all)
+pdf_gen1(MAJOR, "major", 1, 1, 0, pdf_state_all)
+pdf_gen1(MINOR, "minor", 1, 1, 0, pdf_state_all)
+pdf_gen1(REVISION, "revision", 1, 1, 0, pdf_state_all)
+pdf_gen1(VERSION, "version", 1, 1, 0, pdf_state_all)
/*
@@ -115,24 +116,24 @@ pdf_gen1(VERSION, "version", 1, 1, pdf_state_all)
/* all of the following group are dep6 */
-pdf_gen1(PAGEWIDTH, "pagewidth", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(PAGEHEIGHT, "pageheight", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(CROPBOX_LLX, "CropBox/llx", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(CROPBOX_LLY, "CropBox/lly", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(CROPBOX_URX, "CropBox/urx", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(CROPBOX_URY, "CropBox/ury", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(BLEEDBOX_LLX, "BleedBox/llx", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(BLEEDBOX_LLY, "BleedBox/lly", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(BLEEDBOX_URX, "BleedBox/urx", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(BLEEDBOX_URY, "BleedBox/ury", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(TRIMBOX_LLX, "TrimBox/llx", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(TRIMBOX_LLY, "TrimBox/lly", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(TRIMBOX_URX, "TrimBox/urx", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(TRIMBOX_URY, "TrimBox/ury", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(ARTBOX_LLX, "ArtBox/llx", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(ARTBOX_LLY, "ArtBox/lly", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(ARTBOX_URX, "ArtBox/urx", 1, 1, pdf_state_page | pdf_state_path)
-pdf_gen1(ARTBOX_URY, "ArtBox/ury", 1, 1, pdf_state_page | pdf_state_path)
+pdf_gen1(PAGEWIDTH, "pagewidth", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(PAGEHEIGHT, "pageheight", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(CROPBOX_LLX, "CropBox/llx", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(CROPBOX_LLY, "CropBox/lly", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(CROPBOX_URX, "CropBox/urx", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(CROPBOX_URY, "CropBox/ury", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(BLEEDBOX_LLX, "BleedBox/llx", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(BLEEDBOX_LLY, "BleedBox/lly", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(BLEEDBOX_URX, "BleedBox/urx", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(BLEEDBOX_URY, "BleedBox/ury", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(TRIMBOX_LLX, "TrimBox/llx", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(TRIMBOX_LLY, "TrimBox/lly", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(TRIMBOX_URX, "TrimBox/urx", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(TRIMBOX_URY, "TrimBox/ury", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(ARTBOX_LLX, "ArtBox/llx", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(ARTBOX_LLY, "ArtBox/lly", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(ARTBOX_URX, "ArtBox/urx", 1, 1, 0, pdf_state_page | pdf_state_path)
+pdf_gen1(ARTBOX_URY, "ArtBox/ury", 1, 1, 0, pdf_state_page | pdf_state_path)
/*
@@ -141,34 +142,34 @@ pdf_gen1(ARTBOX_URY, "ArtBox/ury", 1, 1, pdf_state_page | pdf_state_path)
* ----------------------------------------------------------------------
*/
-pdf_gen1(FONTAFM, "FontAFM", 0, 1, pdf_state_all)
-pdf_gen1(FONTPFM, "FontPFM", 0, 1, pdf_state_all)
-pdf_gen1(FONTOUTLINE, "FontOutline", 0, 1, pdf_state_all)
-pdf_gen1(HOSTFONT, "HostFont", 0, 1, pdf_state_all)
-pdf_gen1(ENCODING, "Encoding", 0, 1, pdf_state_all)
-pdf_gen1(FONTWARNING, "fontwarning", 1, 1, pdf_state_all) /* dep7 */
-pdf_gen1(FONT, "font", 1, 1, pdf_state_content)
-pdf_gen1(FONTSIZE, "fontsize", 1, 1, pdf_state_content)
-
-pdf_gen1(SUBSETLIMIT, "subsetlimit", 1, 1, pdf_state_all) /* dep7 */
-pdf_gen1(SUBSETMINSIZE, "subsetminsize",1, 1, pdf_state_all) /* dep7 */
-pdf_gen1(AUTOSUBSETTING,"autosubsetting",1,1, pdf_state_all) /* dep7 */
-pdf_gen1(AUTOCIDFONT, "autocidfont", 1, 1, pdf_state_all) /* dep7 */
-pdf_gen1(UNICODEMAP, "unicodemap", 1, 1, pdf_state_all) /* dep7 */
-
-pdf_gen1(FONTNAME, "fontname", 1, 1, pdf_state_content) /* dep7 */
-pdf_gen1(FONTSTYLE, "fontstyle", 1, 1, pdf_state_content) /* dep7 */
-pdf_gen1(FONTENCODING, "fontencoding", 1, 1, pdf_state_content) /* dep7 */
-pdf_gen1(MONOSPACE, "monospace", 1, 1, pdf_state_content) /* dep7 */
-pdf_gen1(FONTMAXCODE, "fontmaxcode", 0, 1, pdf_state_all) /* dep7 */
-pdf_gen1(ASCENDER, "ascender", 0, 1, pdf_state_all) /* dep7 */
-pdf_gen1(DESCENDER, "descender", 0, 1, pdf_state_all) /* dep7 */
-pdf_gen1(CAPHEIGHT, "capheight", 0, 1, pdf_state_all) /* dep7 */
-pdf_gen1(XHEIGHT, "xheight", 0, 1, pdf_state_all) /* dep7 */
-pdf_gen1(ASCENDERFAKED, "ascenderfaked",0, 1, pdf_state_all) /* dep7 */
-pdf_gen1(DESCENDERFAKED,"descenderfaked",0,1, pdf_state_all) /* dep7 */
-pdf_gen1(CAPHEIGHTFAKED,"capheightfaked",0,1, pdf_state_all) /* dep7 */
-pdf_gen1(XHEIGHTFAKED, "xheightfaked", 0,1, pdf_state_all) /* dep7 */
+pdf_gen1(FONTAFM, "FontAFM", 0, 1, 0, pdf_state_all)
+pdf_gen1(FONTPFM, "FontPFM", 0, 1, 0, pdf_state_all)
+pdf_gen1(FONTOUTLINE, "FontOutline", 0, 1, 0, pdf_state_all)
+pdf_gen1(HOSTFONT, "HostFont", 0, 1, 0, pdf_state_all)
+pdf_gen1(ENCODING, "Encoding", 0, 1, 0, pdf_state_all)
+pdf_gen1(FONTWARNING, "fontwarning", 1, 1, 7, pdf_state_all)
+pdf_gen1(FONT, "font", 1, 1, 0, pdf_state_content)
+pdf_gen1(FONTSIZE, "fontsize", 1, 1, 0, pdf_state_content)
+
+pdf_gen1(SUBSETLIMIT, "subsetlimit", 1, 1, 7, pdf_state_all)
+pdf_gen1(SUBSETMINSIZE, "subsetminsize",1, 1, 7, pdf_state_all)
+pdf_gen1(AUTOSUBSETTING,"autosubsetting",1,1, 7, pdf_state_all)
+pdf_gen1(AUTOCIDFONT, "autocidfont", 1, 1, 7, pdf_state_all)
+pdf_gen1(UNICODEMAP, "unicodemap", 1, 1, 7, pdf_state_all)
+
+pdf_gen1(FONTNAME, "fontname", 1, 1, 7, pdf_state_content)
+pdf_gen1(FONTSTYLE, "fontstyle", 1, 1, 7, pdf_state_content)
+pdf_gen1(FONTENCODING, "fontencoding", 1, 1, 7, pdf_state_content)
+pdf_gen1(MONOSPACE, "monospace", 1, 1, 7, pdf_state_content)
+pdf_gen1(FONTMAXCODE, "fontmaxcode", 0, 1, 7, pdf_state_all)
+pdf_gen1(ASCENDER, "ascender", 0, 1, 7, pdf_state_all)
+pdf_gen1(DESCENDER, "descender", 0, 1, 7, pdf_state_all)
+pdf_gen1(CAPHEIGHT, "capheight", 0, 1, 7, pdf_state_all)
+pdf_gen1(XHEIGHT, "xheight", 0, 1, 7, pdf_state_all)
+pdf_gen1(ASCENDERFAKED, "ascenderfaked",0, 1, 7, pdf_state_all)
+pdf_gen1(DESCENDERFAKED,"descenderfaked",0,1, 7, pdf_state_all)
+pdf_gen1(CAPHEIGHTFAKED,"capheightfaked",0,1, 7, pdf_state_all)
+pdf_gen1(XHEIGHTFAKED, "xheightfaked", 0,1, 7, pdf_state_all)
/*
@@ -177,32 +178,32 @@ pdf_gen1(XHEIGHTFAKED, "xheightfaked", 0,1, pdf_state_all) /* dep7 */
* ----------------------------------------------------------------------
*/
-pdf_gen1(TEXTX, "textx", 1, 1, pdf_state_content)
-pdf_gen1(TEXTY, "texty", 1, 1, pdf_state_content)
-pdf_gen1(LEADING, "leading", 1, 1, pdf_state_content)
-pdf_gen1(TEXTRISE, "textrise", 1, 1, pdf_state_content)
-pdf_gen1(HORIZSCALING, "horizscaling", 1, 1,
+pdf_gen1(TEXTX, "textx", 1, 1, 0, pdf_state_content)
+pdf_gen1(TEXTY, "texty", 1, 1, 0, pdf_state_content)
+pdf_gen1(LEADING, "leading", 1, 1, 0, pdf_state_content)
+pdf_gen1(TEXTRISE, "textrise", 1, 1, 0, pdf_state_content)
+pdf_gen1(HORIZSCALING, "horizscaling", 1, 1, 0,
pdf_state_content | pdf_state_document)
-pdf_gen1(TEXTRENDERING, "textrendering",1, 1, pdf_state_content)
-pdf_gen1(CHARSPACING, "charspacing", 1, 1,
+pdf_gen1(TEXTRENDERING, "textrendering",1, 1, 0, pdf_state_content)
+pdf_gen1(CHARSPACING, "charspacing", 1, 1, 0,
pdf_state_content | pdf_state_document)
-pdf_gen1(WORDSPACING, "wordspacing", 1, 1,
+pdf_gen1(WORDSPACING, "wordspacing", 1, 1, 0,
pdf_state_content | pdf_state_document)
-pdf_gen1(ITALICANGLE, "italicangle", 1, 1,
+pdf_gen1(ITALICANGLE, "italicangle", 1, 1, 0,
pdf_state_content | pdf_state_document)
-pdf_gen1(FAKEBOLD, "fakebold", 1, 1,
+pdf_gen1(FAKEBOLD, "fakebold", 1, 1, 0,
pdf_state_content | pdf_state_document)
-pdf_gen1(UNDERLINEWIDTH,"underlinewidth", 1, 1,
+pdf_gen1(UNDERLINEWIDTH,"underlinewidth", 1, 1, 0,
pdf_state_content | pdf_state_document)
-pdf_gen1(UNDERLINEPOSITION,"underlineposition", 1, 1,
+pdf_gen1(UNDERLINEPOSITION,"underlineposition", 1, 1, 0,
pdf_state_content | pdf_state_document)
-pdf_gen1(UNDERLINE, "underline", 1, 1, pdf_state_content)
-pdf_gen1(OVERLINE, "overline", 1, 1, pdf_state_content)
-pdf_gen1(STRIKEOUT, "strikeout", 1, 1, pdf_state_content)
-pdf_gen1(KERNING, "kerning", 1, 1, pdf_state_all)
-pdf_gen1(TEXTFORMAT, "textformat", 1, 1, pdf_state_all)
-pdf_gen1(GLYPHWARNING, "glyphwarning", 1, 1, pdf_state_all) /* dep7 */
-pdf_gen1(GLYPHCHECK, "glyphcheck", 1, 1, pdf_state_all)
+pdf_gen1(UNDERLINE, "underline", 1, 1, 0, pdf_state_content)
+pdf_gen1(OVERLINE, "overline", 1, 1, 0, pdf_state_content)
+pdf_gen1(STRIKEOUT, "strikeout", 1, 1, 0, pdf_state_content)
+pdf_gen1(KERNING, "kerning", 1, 1, 0, pdf_state_all)
+pdf_gen1(TEXTFORMAT, "textformat", 1, 1, 0, pdf_state_all)
+pdf_gen1(GLYPHWARNING, "glyphwarning", 1, 1, 7, pdf_state_all)
+pdf_gen1(GLYPHCHECK, "glyphcheck", 1, 1, 0, pdf_state_all)
/*
@@ -211,18 +212,18 @@ pdf_gen1(GLYPHCHECK, "glyphcheck", 1, 1, pdf_state_all)
* ----------------------------------------------------------------------
*/
-pdf_gen1(CURRENTX, "currentx", 1, 1,
+pdf_gen1(CURRENTX, "currentx", 1, 1, 0,
pdf_state_content | pdf_state_path)
-pdf_gen1(CURRENTY, "currenty", 1, 1,
+pdf_gen1(CURRENTY, "currenty", 1, 1, 0,
pdf_state_content | pdf_state_path)
-pdf_gen1(FILLRULE, "fillrule", 1, 1, pdf_state_content)
-pdf_gen1(TOPDOWN, "topdown", 1, 0, pdf_state_document)
-pdf_gen1(CTM_A, "ctm_a", 1, 1, pdf_state_content)
-pdf_gen1(CTM_B, "ctm_b", 1, 1, pdf_state_content)
-pdf_gen1(CTM_C, "ctm_c", 1, 1, pdf_state_content)
-pdf_gen1(CTM_D, "ctm_d", 1, 1, pdf_state_content)
-pdf_gen1(CTM_E, "ctm_e", 1, 1, pdf_state_content)
-pdf_gen1(CTM_F, "ctm_f", 1, 1, pdf_state_content)
+pdf_gen1(FILLRULE, "fillrule", 1, 1, 0, pdf_state_content)
+pdf_gen1(TOPDOWN, "topdown", 1, 0, 0, pdf_state_document)
+pdf_gen1(CTM_A, "ctm_a", 1, 1, 0, pdf_state_content)
+pdf_gen1(CTM_B, "ctm_b", 1, 1, 0, pdf_state_content)
+pdf_gen1(CTM_C, "ctm_c", 1, 1, 0, pdf_state_content)
+pdf_gen1(CTM_D, "ctm_d", 1, 1, 0, pdf_state_content)
+pdf_gen1(CTM_E, "ctm_e", 1, 1, 0, pdf_state_content)
+pdf_gen1(CTM_F, "ctm_f", 1, 1, 0, pdf_state_content)
/*
@@ -231,32 +232,33 @@ pdf_gen1(CTM_F, "ctm_f", 1, 1, pdf_state_content)
* ----------------------------------------------------------------------
*/
-pdf_gen1(SETCOLOR_ICCPROFILEGRAY, "setcolor:iccprofilegray", 1, 1,
+pdf_gen1(SETCOLOR_ICCPROFILEGRAY, "setcolor:iccprofilegray", 1, 1, 0,
pdf_state_document | pdf_state_content)
-pdf_gen1(SETCOLOR_ICCPROFILERGB, "setcolor:iccprofilergb", 1, 1,
+pdf_gen1(SETCOLOR_ICCPROFILERGB, "setcolor:iccprofilergb", 1, 1, 0,
pdf_state_document | pdf_state_content)
-pdf_gen1(SETCOLOR_ICCPROFILECMYK, "setcolor:iccprofilecmyk", 1, 1,
+pdf_gen1(SETCOLOR_ICCPROFILECMYK, "setcolor:iccprofilecmyk", 1, 1, 0,
pdf_state_document | pdf_state_content)
-pdf_gen1(IMAGE_ICCPROFILE,"image:iccprofile", 0, 1,
+pdf_gen1(IMAGE_ICCPROFILE,"image:iccprofile", 0, 1, 0,
pdf_state_path | pdf_state_content | pdf_state_document)
-pdf_gen1(ICCWARNING, "iccwarning", 1, 1, pdf_state_all) /* dep7 */
-pdf_gen1(HONORICCPROFILE, "honoriccprofile", 1, 1, pdf_state_all)
-pdf_gen1(ICCCOMPONENTS, "icccomponents", 0, 1, pdf_state_all)
-pdf_gen1(ICCPROFILE, "ICCProfile", 0, 1, pdf_state_all)
-pdf_gen1(STANDARDOUTPUTINTENT, "StandardOutputIntent", 0, 1, pdf_state_all)
-pdf_gen1(RENDERINGINTENT, "renderingintent", 1, 1, pdf_state_all)
+pdf_gen1(ICCWARNING, "iccwarning", 1, 1, 7,
+ pdf_state_all)
+pdf_gen1(HONORICCPROFILE, "honoriccprofile", 1, 1, 0, pdf_state_all)
+pdf_gen1(ICCCOMPONENTS, "icccomponents", 0, 1, 0, pdf_state_all)
+pdf_gen1(ICCPROFILE, "ICCProfile", 0, 1, 0, pdf_state_all)
+pdf_gen1(STANDARDOUTPUTINTENT, "StandardOutputIntent", 0, 1, 0, pdf_state_all)
+pdf_gen1(RENDERINGINTENT, "renderingintent", 1, 1, 0, pdf_state_all)
/* 3 x dep6 */
-pdf_gen1(DEFAULTRGB, "defaultrgb", 1, 1,
+pdf_gen1(DEFAULTRGB, "defaultrgb", 1, 1, 0,
pdf_state_content | pdf_state_path)
-pdf_gen1(DEFAULTGRAY, "defaultgray", 1, 1,
+pdf_gen1(DEFAULTGRAY, "defaultgray", 1, 1, 0,
pdf_state_content | pdf_state_path)
-pdf_gen1(DEFAULTCMYK, "defaultcmyk", 1, 1,
+pdf_gen1(DEFAULTCMYK, "defaultcmyk", 1, 1, 0,
pdf_state_content | pdf_state_path)
-pdf_gen1(PRESERVEOLDPANTONENAMES, "preserveoldpantonenames", 1, 1,
+pdf_gen1(PRESERVEOLDPANTONENAMES, "preserveoldpantonenames", 1, 1, 0,
pdf_state_all)
-pdf_gen1(SPOTCOLORLOOKUP, "spotcolorlookup", 1, 1,
+pdf_gen1(SPOTCOLORLOOKUP, "spotcolorlookup", 1, 1, 0,
pdf_state_all)
/*
@@ -265,19 +267,19 @@ pdf_gen1(SPOTCOLORLOOKUP, "spotcolorlookup", 1, 1,
* ----------------------------------------------------------------------
*/
-pdf_gen1(IMAGEWARNING, "imagewarning", 1, 1, pdf_state_all) /* dep7 */
-pdf_gen1(IMAGEWIDTH, "imagewidth", 0, 1,
+pdf_gen1(IMAGEWARNING, "imagewarning", 1, 1, 7, pdf_state_all)
+pdf_gen1(IMAGEWIDTH, "imagewidth", 0, 1, 0,
pdf_state_path | pdf_state_content | pdf_state_document)
-pdf_gen1(IMAGEHEIGHT, "imageheight", 0, 1,
+pdf_gen1(IMAGEHEIGHT, "imageheight", 0, 1, 0,
pdf_state_path | pdf_state_content | pdf_state_document)
-pdf_gen1(RESX, "resx", 0, 1,
+pdf_gen1(RESX, "resx", 0, 1, 0,
pdf_state_path | pdf_state_content | pdf_state_document)
-pdf_gen1(RESY, "resy", 0, 1,
+pdf_gen1(RESY, "resy", 0, 1, 0,
pdf_state_path | pdf_state_content | pdf_state_document)
-pdf_gen1(ORIENTATION, "orientation", 0, 1,
+pdf_gen1(ORIENTATION, "orientation", 0, 1, 0,
pdf_state_path | pdf_state_content | pdf_state_document)
-pdf_gen1(INHERITGSTATE, "inheritgstate",1, 1, pdf_state_all) /* dep6 */
+pdf_gen1(INHERITGSTATE, "inheritgstate",1, 1, 6, pdf_state_all)
/*
@@ -286,10 +288,10 @@ pdf_gen1(INHERITGSTATE, "inheritgstate",1, 1, pdf_state_all) /* dep6 */
* ----------------------------------------------------------------------
*/
-pdf_gen1(PDI, "pdi", 1, 1, pdf_state_all)
-pdf_gen1(PDIWARNING, "pdiwarning", 1, 1, pdf_state_all) /* dep7 */
-pdf_gen1(PDIUSEBOX, "pdiusebox", 1, 1, pdf_state_all) /* dep6 */
-pdf_gen1(PDISTRICT, "pdistrict", 1, 1, pdf_state_all) /* unsupp */
+pdf_gen1(PDI, "pdi", 1, 1, 0, pdf_state_all)
+pdf_gen1(PDIWARNING, "pdiwarning", 1, 1, 7, pdf_state_all)
+pdf_gen1(PDIUSEBOX, "pdiusebox", 1, 1, 6, pdf_state_all)
+pdf_gen1(PDISTRICT, "pdistrict", 1, 1,-1, pdf_state_all)
/*
@@ -298,55 +300,55 @@ pdf_gen1(PDISTRICT, "pdistrict", 1, 1, pdf_state_all) /* unsupp */
* ----------------------------------------------------------------------
*/
-pdf_gen1(HYPERTEXTFORMAT, "hypertextformat", 1, 1, pdf_state_all)
-pdf_gen1(HYPERTEXTENCODING, "hypertextencoding", 1, 1, pdf_state_all)
-pdf_gen1(USERCOORDINATES, "usercoordinates", 1, 1, pdf_state_all)
-pdf_gen1(USEHYPERTEXTENCODING, "usehypertextencoding", 1, 1, pdf_state_all)
- /* unsupp */
-
-pdf_gen1(HIDETOOLBAR, "hidetoolbar", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-pdf_gen1(HIDEMENUBAR, "hidemenubar", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-pdf_gen1(HIDEWINDOWUI, "hidewindowui", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-pdf_gen1(FITWINDOW, "fitwindow", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-pdf_gen1(CENTERWINDOW, "centerwindow", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-pdf_gen1(DISPLAYDOCTITLE, "displaydoctitle", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-pdf_gen1(NONFULLSCREENPAGEMODE, "nonfullscreenpagemode", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-pdf_gen1(DIRECTION, "direction", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-
-pdf_gen1(VIEWAREA, "viewarea", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-pdf_gen1(VIEWCLIP, "viewclip", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-pdf_gen1(PRINTAREA, "printarea", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-pdf_gen1(PRINTCLIP, "printclip", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-
-pdf_gen1(OPENACTION, "openaction", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-pdf_gen1(OPENMODE, "openmode", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-pdf_gen1(BOOKMARKDEST, "bookmarkdest", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-pdf_gen1(TRANSITION, "transition", 1, 1, pdf_state_all) /* dep6 */
-pdf_gen1(DURATION, "duration", 1, 1, pdf_state_all) /* dep6 */
-pdf_gen1(BASE, "base", 1, 1,
- pdf_state_content | pdf_state_document) /* dep6 */
-
-pdf_gen1(LAUNCHLINK_PARAMETERS, "launchlink:parameters", 1, 1,
- pdf_state_all) /* dep6 */
-pdf_gen1(LAUNCHLINK_OPERATION, "launchlink:operation", 1, 1,
- pdf_state_all) /* dep6 */
-pdf_gen1(LAUNCHLINK_DEFAULTDIR, "launchlink:defaultdir", 1, 1,
- pdf_state_all) /* dep6 */
+pdf_gen1(HYPERTEXTFORMAT, "hypertextformat", 1, 1, 0, pdf_state_all)
+pdf_gen1(HYPERTEXTENCODING, "hypertextencoding", 1, 1, 0, pdf_state_all)
+pdf_gen1(USERCOORDINATES, "usercoordinates", 1, 1, 0, pdf_state_all)
+pdf_gen1(USEHYPERTEXTENCODING, "usehypertextencoding", 1, 1, 0,
+ pdf_state_all)
+
+pdf_gen1(HIDETOOLBAR, "hidetoolbar", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+pdf_gen1(HIDEMENUBAR, "hidemenubar", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+pdf_gen1(HIDEWINDOWUI, "hidewindowui", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+pdf_gen1(FITWINDOW, "fitwindow", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+pdf_gen1(CENTERWINDOW, "centerwindow", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+pdf_gen1(DISPLAYDOCTITLE, "displaydoctitle", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+pdf_gen1(NONFULLSCREENPAGEMODE, "nonfullscreenpagemode", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+pdf_gen1(DIRECTION, "direction", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+
+pdf_gen1(VIEWAREA, "viewarea", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+pdf_gen1(VIEWCLIP, "viewclip", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+pdf_gen1(PRINTAREA, "printarea", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+pdf_gen1(PRINTCLIP, "printclip", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+
+pdf_gen1(OPENACTION, "openaction", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+pdf_gen1(OPENMODE, "openmode", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+pdf_gen1(BOOKMARKDEST, "bookmarkdest", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+pdf_gen1(TRANSITION, "transition", 1, 1, 6, pdf_state_all)
+pdf_gen1(DURATION, "duration", 1, 1, 6, pdf_state_all)
+pdf_gen1(BASE, "base", 1, 1, 6,
+ pdf_state_content | pdf_state_document)
+
+pdf_gen1(LAUNCHLINK_PARAMETERS, "launchlink:parameters", 1, 1, 6,
+ pdf_state_all)
+pdf_gen1(LAUNCHLINK_OPERATION, "launchlink:operation", 1, 1, 6,
+ pdf_state_all)
+pdf_gen1(LAUNCHLINK_DEFAULTDIR, "launchlink:defaultdir", 1, 1, 6,
+ pdf_state_all)
/*
@@ -355,9 +357,9 @@ pdf_gen1(LAUNCHLINK_DEFAULTDIR, "launchlink:defaultdir", 1, 1,
* ----------------------------------------------------------------------
*/
-pdf_gen1(USERPASSWORD, "userpassword", 1, 1, pdf_state_object) /* dep6 */
-pdf_gen1(MASTERPASSWORD,"masterpassword",1,1, pdf_state_object) /* dep6 */
-pdf_gen1(PERMISSIONS, "permissions", 1, 1, pdf_state_object) /* dep6 */
+pdf_gen1(USERPASSWORD, "userpassword", 1, 1, 6, pdf_state_object)
+pdf_gen1(MASTERPASSWORD,"masterpassword",1,1, 6, pdf_state_object)
+pdf_gen1(PERMISSIONS, "permissions", 1, 1, 6, pdf_state_object)
/*
@@ -366,7 +368,7 @@ pdf_gen1(PERMISSIONS, "permissions", 1, 1, pdf_state_object) /* dep6 */
* ----------------------------------------------------------------------
*/
-pdf_gen1(AUTOSPACE, "autospace", 1, 1, pdf_state_all)
+pdf_gen1(AUTOSPACE, "autospace", 1, 1, 0, pdf_state_all)
#undef pdf_gen1
diff --git a/src/pdflib/pdflib/p_pattern.c b/src/pdflib/pdflib/p_pattern.c
index 73306f7..dd458b6 100644
--- a/src/pdflib/pdflib/p_pattern.c
+++ b/src/pdflib/pdflib/p_pattern.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_pattern.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_pattern.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib pattern routines
*
@@ -59,13 +59,12 @@ void
pdf_write_page_pattern(PDF *p)
{
int i, total = 0;
- int bias = p->curr_ppt->pt_bias;
for (i = 0; i < p->pattern_number; i++)
if (p->pattern[i].used_on_current_page)
total++;
- if (total > 0 || bias)
+ if (total > 0)
{
pdc_puts(p->out, "/Pattern");
pdc_begin_dict(p->out);
@@ -78,12 +77,11 @@ pdf_write_page_pattern(PDF *p)
if (p->pattern[i].used_on_current_page)
{
p->pattern[i].used_on_current_page = pdc_false; /* reset */
- pdc_printf(p->out, "/P%d", bias + i);
+ pdc_printf(p->out, "/P%d", i);
pdc_objref(p->out, "", p->pattern[i].obj_id);
}
}
- if (!bias)
pdc_end_dict(p->out);
}
}
diff --git a/src/pdflib/pdflib/p_pdi.c b/src/pdflib/pdflib/p_pdi.c
index a138987..79ece1b 100644
--- a/src/pdflib/pdflib/p_pdi.c
+++ b/src/pdflib/pdflib/p_pdi.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_pdi.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_pdi.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDF import routines (require the PDI library)
*
@@ -26,3 +26,4 @@
+
diff --git a/src/pdflib/pdflib/p_pfm.c b/src/pdflib/pdflib/p_pfm.c
index cab291b..b1989a4 100644
--- a/src/pdflib/pdflib/p_pfm.c
+++ b/src/pdflib/pdflib/p_pfm.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_pfm.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_pfm.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib routines for fast reading of PFM font metrics files
*
@@ -115,32 +115,32 @@ pdf_check_pfm_encoding(PDF *p, pdf_font *font, pdc_encoding enc)
const char *encname =
pdc_errprintf(p->pdc, "%.*s", PDC_ERR_MAXSTRLEN,
pdf_get_encoding_name(p, enc, font));
- const char *newencname = NULL;
- pdc_encoding newenc = pdc_invalidenc;
+ const char *intencname = NULL;
+ pdc_encoding intenc = pdc_invalidenc;
pdc_bool issymbfont = pdc_undef;
pdc_logg_cond(p->pdc, 2, trc_font,
"\tFont internal charset (dfCharSet): %d\n", font->ft.enc);
/* Font encoding */
- newencname = pdc_get_keyword(font->ft.enc, pdf_charset_keylist);
- if (newencname == NULL)
+ intencname = pdc_get_keyword(font->ft.enc, pdf_charset_keylist);
+ if (intencname == NULL)
{
pdc_set_errmsg(p->pdc, PDF_E_T1_BADCHARSET,
pdc_errprintf(p->pdc, "%d", font->ft.enc), 0, 0, 0);
return pdc_false;
}
- if (strlen(newencname))
+ if (strlen(intencname))
{
int codepage = 0;
pdc_logg_cond(p->pdc, 2, trc_font,
- "\tFont internal encoding \"%s\" found\n", newencname);
+ "\tFont internal encoding \"%s\" found\n", intencname);
- newenc = pdc_find_encoding(p->pdc, newencname);
- if (newenc == pdc_invalidenc)
- newenc = pdc_insert_encoding(p->pdc, newencname, &codepage,
+ intenc = pdc_find_encoding(p->pdc, intencname);
+ if (intenc == pdc_invalidenc)
+ intenc = pdc_insert_encoding(p->pdc, intencname, &codepage,
pdc_true);
font->ft.issymbfont = pdc_false;
@@ -150,7 +150,7 @@ pdf_check_pfm_encoding(PDF *p, pdf_font *font, pdc_encoding enc)
pdc_logg_cond(p->pdc, 2, trc_font, "\tSymbol font\n");
font->ft.issymbfont = pdc_true;
- newenc = pdc_builtin;
+ intenc = pdc_builtin;
/* auto */
if (!strcmp(font->encapiname, "auto"))
@@ -169,21 +169,25 @@ pdf_check_pfm_encoding(PDF *p, pdf_font *font, pdc_encoding enc)
{
font->unibyte = pdc_true;
issymbfont = pdc_false;
- enc = newenc;
+ enc = intenc;
}
/* encoding is subset of 8-bit encoding */
- if (enc >= pdc_winansi && newenc >= pdc_winansi)
+ if (enc >= pdc_winansi && intenc >= pdc_winansi)
{
if (pdc_is_encoding_subset(p->pdc, pdc_get_encoding_vector(p->pdc, enc),
- pdc_get_encoding_vector(p->pdc, newenc)))
+ pdc_get_encoding_vector(p->pdc, intenc)))
{
- if (enc != pdc_winansi && newenc == pdc_winansi &&
+ if (enc != pdc_winansi && intenc == pdc_winansi &&
strcmp(encname, "iso8859-1"))
- font->towinansi = pdc_invalidenc;
-
+ {
+ font->towinansi = intenc;
+ }
+ else
+ {
+ enc = intenc;
+ }
issymbfont = pdc_false;
- enc = newenc;
}
}
@@ -198,9 +202,9 @@ pdf_check_pfm_encoding(PDF *p, pdf_font *font, pdc_encoding enc)
if (issymbfont && !font->ft.issymbfont)
{
pdc_warning(p->pdc, PDF_E_FONT_FORCEENC,
- pdf_get_encoding_name(p, newenc, NULL),
+ pdf_get_encoding_name(p, intenc, NULL),
0, 0, 0);
- font->ft.enc = newenc;
+ font->ft.enc = intenc;
}
if (!issymbfont && font->ft.issymbfont)
{
diff --git a/src/pdflib/pdflib/p_photoshp.c b/src/pdflib/pdflib/p_photoshp.c
index 354f547..825929b 100644
--- a/src/pdflib/pdflib/p_photoshp.c
+++ b/src/pdflib/pdflib/p_photoshp.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_photoshp.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_photoshp.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib Photoshop image resource data routines
*
diff --git a/src/pdflib/pdflib/p_png.c b/src/pdflib/pdflib/p_png.c
index 42359a3..5882f2a 100644
--- a/src/pdflib/pdflib/p_png.c
+++ b/src/pdflib/pdflib/p_png.c
@@ -1,7 +1,7 @@
/*---------------------------------------------------------------------------*
| PDFlib - A library for generating PDF on the fly |
+---------------------------------------------------------------------------+
- | Copyright (c) 1997-2006 Thomas Merz and PDFlib GmbH. All rights reserved. |
+ | Copyright (c) 1997-2009 Thomas Merz and PDFlib GmbH. All rights reserved. |
+---------------------------------------------------------------------------+
| |
| This software is subject to the PDFlib license. It is NOT in the |
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_png.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_png.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PNG processing for PDFlib
*
@@ -24,173 +24,22 @@
#define PDF_ALIGN16
#endif
-/* SPNG - Simple PNG
-**
-** The items below, prefixed with spng_, or SPNG_, establish a replacement
-** for LIBPNG that works very fast, but processes simple PNG images only:
-** - bit_depth <= 8 (no 16-bit)
-** - interlace_type 0 (no interlacing)
-** - color_type 0, 2, or 3 (no alpha-channel); color type 3 requires
-** libpng for palette processing
-*/
-#define SPNG_SIGNATURE "\211\120\116\107\015\012\032\012"
-
-#define SPNG_CHUNK_IHDR 0x49484452
-#define SPNG_CHUNK_PLTE 0x504C5445
-#define SPNG_CHUNK_tRNS 0x74524E53
-#define SPNG_CHUNK_IDAT 0x49444154
-#define SPNG_CHUNK_IEND 0x49454E44
-
-/* spng_init() return codes
-*/
-#define SPNG_ERR_OK 0 /* no error */
-#define SPNG_ERR_NOPNG 1 /* bad PNG signature */
-#define SPNG_ERR_FMT 2 /* bad PNG file format */
-
-typedef struct
-{
- /* from IHDR:
- */
- int width;
- int height;
- pdc_byte bit_depth;
- pdc_byte color_type;
- pdc_byte compr_type;
- pdc_byte filter_type;
- pdc_byte interlace_type;
-} spng_info;
-
-static int
-spng_getint(pdc_file *fp)
-{
- unsigned char buf[4];
-
- if (!PDC_OK_FREAD(fp, buf, 4))
- return -1;
-
- return (int) pdc_get_be_long(buf);
-} /* spng_getint */
-
-static int
-spng_init(PDF *p, pdf_image *image, spng_info *spi)
-{
- pdc_file *fp = image->fp;
- char buf[8];
-
- (void) p;
-
- /* check signature
- */
- if (!PDC_OK_FREAD(fp, buf, 8) ||
- strncmp(buf, SPNG_SIGNATURE, 8) != 0)
- return SPNG_ERR_NOPNG;
-
- /* read IHDR
- */
- if (spng_getint(fp) != 13 ||
- spng_getint(fp) != SPNG_CHUNK_IHDR)
- return SPNG_ERR_FMT;
-
- spi->width = spng_getint(fp);
- spi->height = spng_getint(fp);
-
- if (!PDC_OK_FREAD(fp, buf, 5))
- return SPNG_ERR_FMT;
-
- spi->bit_depth = (pdc_byte) buf[0];
- spi->color_type = (pdc_byte) buf[1];
- spi->compr_type = (pdc_byte) buf[2];
- spi->filter_type = (pdc_byte) buf[3];
- spi->interlace_type = (pdc_byte) buf[4];
-
- (void) spng_getint(fp); /* CRC */
-
- /* decide whether this image is "simple".
- */
#ifdef HAVE_LIBPNG
- if (spi->bit_depth > 8 || spi->color_type > 3 || spi->interlace_type != 0)
-#else
- if (spi->bit_depth > 8 || spi->color_type > 2 || spi->interlace_type != 0)
-#endif /* !HAVE_LIBPNG */
- {
- image->use_raw = pdc_false;
- return SPNG_ERR_OK;
- }
- else
- image->use_raw = pdc_true;
-
- /* read (or skip) all chunks up to the first IDAT.
- */
- for (/* */ ; /* */ ; /* */)
- {
- int len = spng_getint(fp);
- int type = spng_getint(fp);
-
- switch (type)
- {
- case SPNG_CHUNK_IDAT: /* prepare data xfer */
- image->info.png.nbytes = (size_t) len;
- return SPNG_ERR_OK;
-
- case -1:
- return SPNG_ERR_FMT;
-
- /* if we decide to live without LIBPNG,
- ** we should handle these cases, too.
- */
- case SPNG_CHUNK_tRNS: /* transparency chunk */
- case SPNG_CHUNK_PLTE: /* read in palette */
-
- default:
- pdc_fseek(fp, len + 4, SEEK_CUR);
- /* skip data & CRC */
- break;
- } /* switch */
- }
-
- return SPNG_ERR_OK;
-} /* spng_init */
-
-#define PDF_PNG_BUFFERSIZE 8192
static void
pdf_data_source_PNG_init(PDF *p, PDF_data_source *src)
{
- static const char fn[] = "pdf_data_source_PNG_init";
- pdf_image *image = (pdf_image *) src->private_data;
+ pdf_image *image = (pdf_image *) src->private_data;
-#ifdef HAVE_LIBPNG
- if (image->use_raw)
- {
-#endif
- src->buffer_length = PDF_PNG_BUFFERSIZE;
- src->buffer_start = (pdc_byte *)
- pdc_malloc(p->pdc, src->buffer_length, fn);
- src->bytes_available = 0;
- src->next_byte = src->buffer_start;
+ (void) p;
-#ifdef HAVE_LIBPNG
- }
- else
- {
- image->info.png.cur_line = 0;
- src->buffer_length = image->info.png.rowbytes;
- }
-#endif
+ image->info.png.cur_line = 0;
+ src->buffer_length = image->info.png.rowbytes;
}
#undef min
#define min(a, b) (((a) < (b)) ? (a) : (b))
-static void
-spng_error(PDF *p, PDF_data_source *src)
-{
- pdf_image *image = (pdf_image *) src->private_data;
-
- pdc_error(p->pdc, PDF_E_IMAGE_CORRUPT, "PNG",
- pdf_get_image_filename(p, image), 0, 0);
-} /* spng_error */
-
static pdc_bool
pdf_data_source_PNG_fill(PDF *p, PDF_data_source *src)
{
@@ -198,69 +47,18 @@ pdf_data_source_PNG_fill(PDF *p, PDF_data_source *src)
PDC_TRY(p->pdc)
{
-#ifdef HAVE_LIBPNG
- if (image->use_raw)
- {
-#endif
- pdc_file * fp = image->fp;
- size_t buf_avail = src->buffer_length;
- pdc_byte *scan = src->buffer_start;
-
- src->bytes_available = 0;
-
- if (image->info.png.nbytes == 0)
- {
- PDC_EXIT_TRY(p->pdc);
- return pdc_false;
- }
-
- do
- {
- size_t nbytes = min(image->info.png.nbytes, buf_avail);
-
- if (!PDC_OK_FREAD(fp, scan, nbytes))
- spng_error(p, src);
-
- src->bytes_available += nbytes;
- scan += nbytes;
- buf_avail -= nbytes;
-
- if ((image->info.png.nbytes -= nbytes) == 0)
- {
- /* proceed to next IDAT chunk
- */
- (void) spng_getint(fp); /* CRC */
- image->info.png.nbytes =
- (size_t) spng_getint(fp); /* length */
-
- if (spng_getint(fp) != SPNG_CHUNK_IDAT)
- {
- image->info.png.nbytes = 0;
- PDC_EXIT_TRY(p->pdc);
- return pdc_true;
- }
- }
- }
- while (buf_avail);
-
-#ifdef HAVE_LIBPNG
- }
- else
- {
- if (image->info.png.cur_line == image->height)
- {
- PDC_EXIT_TRY(p->pdc);
- return pdc_false;
- }
+ if (image->info.png.cur_line == image->height)
+ {
+ PDC_EXIT_TRY(p->pdc);
+ return pdc_false;
+ }
- src->next_byte = image->info.png.raster +
- image->info.png.cur_line * image->info.png.rowbytes;
+ src->next_byte = image->info.png.raster +
+ image->info.png.cur_line * image->info.png.rowbytes;
- src->bytes_available = src->buffer_length;
+ src->bytes_available = src->buffer_length;
- image->info.png.cur_line++;
- }
-#endif /* HAVE_LIBPNG */
+ image->info.png.cur_line++;
}
PDC_CATCH(p->pdc)
{
@@ -273,20 +71,24 @@ pdf_data_source_PNG_fill(PDF *p, PDF_data_source *src)
static void
pdf_data_source_PNG_terminate(PDF *p, PDF_data_source *src)
{
- pdf_image *image = (pdf_image *) src->private_data;
+ (void) p;
+ (void) src;
+}
-#ifdef HAVE_LIBPNG
- if (image->use_raw)
+static void
+pdf_png_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
+{
+ pdc_file *fp = (pdc_file *) png_ptr->io_ptr;
+ char *filename = (char *) pdc_file_name(fp);
+
+ if (!PDC_OK_FREAD(fp, data, length))
{
-#endif
- pdc_free(p->pdc, (void *) src->buffer_start);
+ pdc_core *pdc = pdc_file_getpdc(fp);
-#ifdef HAVE_LIBPNG
+ pdc_error(pdc, PDF_E_IMAGE_CORRUPT, "PNG", filename, 0, 0);
}
-#endif
}
-#ifdef HAVE_LIBPNG
/*
* We suppress libpng's warning message by supplying
* our own error and warning handlers
@@ -294,11 +96,8 @@ pdf_data_source_PNG_terminate(PDF *p, PDF_data_source *src)
static void
pdf_libpng_warning_handler(png_structp png_ptr, png_const_charp message)
{
- (void) png_ptr; /* avoid compiler warning "unreferenced parameter" */
- (void) message; /* avoid compiler warning "unreferenced parameter" */
-
- /* do nothing */
- return;
+ PDF *p = (PDF *)png_ptr->mem_ptr;
+ pdc_logg_cond(p->pdc, 5, trc_image, "\tlibpng warning: %s\n", message);
}
/*
@@ -311,11 +110,13 @@ pdf_libpng_warning_handler(png_structp png_ptr, png_const_charp message)
static void
pdf_libpng_error_handler(png_structp png_ptr, png_const_charp message)
{
+ PDF *p = (PDF *)png_ptr->mem_ptr;
+
#ifdef PDF_ALIGN16
jmp_buf jbuf;
#endif
- (void) message; /* avoid compiler warning "unreferenced parameter" */
+ pdc_logg_cond(p->pdc, 5, trc_image, "\tlibpng error: %s\n", message);
#ifdef PDF_ALIGN16
memcpy(jbuf, png_jmpbuf(png_ptr), sizeof (jmp_buf));
@@ -355,20 +156,6 @@ pdf_is_PNG_file(PDF *p, pdc_file *fp)
return pdc_true;
}
-static void /* CDPDF - moved to inside the HAVE_LIBPNG definition */
-pdf_png_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
- pdc_file *fp = (pdc_file *) png_ptr->io_ptr;
- char *filename = (char *) pdc_file_name(fp);
-
- if (!PDC_OK_FREAD(fp, data, length))
- {
- pdc_core *pdc = pdc_file_getpdc(fp);
-
- pdc_error(pdc, PDF_E_IMAGE_CORRUPT, "PNG", filename, 0, 0);
- }
-}
-
int
pdf_process_PNG_data(
PDF *p,
@@ -376,7 +163,7 @@ pdf_process_PNG_data(
{
static const char *fn = "pdf_process_PNG_data";
pdc_file *save_fp;
- spng_info s_info;
+ size_t bytecount;
#ifdef PDF_ALIGN16
jmp_buf jbuf;
#endif
@@ -404,8 +191,10 @@ pdf_process_PNG_data(
image->info.png.png_ptr =
png_create_read_struct_2(PNG_LIBPNG_VER_STRING, (png_voidp) NULL,
- (png_error_ptr)pdf_libpng_error_handler, (png_error_ptr)pdf_libpng_warning_handler, /* CDPDF - added type cast */
- p, (png_malloc_ptr) pdf_libpng_malloc,
+ (png_error_ptr) pdf_libpng_error_handler,
+ (png_error_ptr) pdf_libpng_warning_handler,
+ p,
+ (png_malloc_ptr) pdf_libpng_malloc,
(png_free_ptr) pdf_libpng_free);
if (!image->info.png.png_ptr)
@@ -446,7 +235,8 @@ pdf_process_PNG_data(
}
/* from file or from memory */
- png_set_read_fn(image->info.png.png_ptr, image->fp, (png_rw_ptr)pdf_png_read_data); /* CDPDF - added type cast */
+ png_set_read_fn(image->info.png.png_ptr, image->fp,
+ (png_rw_ptr) pdf_png_read_data);
png_set_sig_bytes(image->info.png.png_ptr, 8);
png_read_info(image->info.png.png_ptr, image->info.png.info_ptr);
@@ -667,6 +457,14 @@ pdf_process_PNG_data(
image->info.png.rowbytes =
png_get_rowbytes(image->info.png.png_ptr, image->info.png.info_ptr);
+ /* Check for overflow */
+ bytecount = image->info.png.rowbytes * height;
+ if (bytecount / height != image->info.png.rowbytes)
+ {
+ errcode = PDF_E_IMAGE_TOO_LARGE;
+ goto PDF_PNG_ERROR;
+ }
+
image->info.png.raster = (pdc_byte *)
pdc_calloc(p->pdc,image->info.png.rowbytes * height, fn);
@@ -691,60 +489,50 @@ pdf_process_PNG_data(
image->fp = pdc_fsearch_fopen(p->pdc, image->filename, NULL, NULL,
PDC_FILE_BINARY);
- if (image->fp != NULL &&
- spng_init(p, image, &s_info) == SPNG_ERR_OK && image->use_raw)
- {
- pdc_fclose(save_fp);
- image->predictor = pred_png;
- image->compression = pdf_comp_flate;
- }
- else
- {
- if (image->fp != (pdc_file *) 0)
- pdc_fclose(image->fp);
+ if (image->fp != (pdc_file *) 0)
+ pdc_fclose(image->fp);
- image->fp = save_fp;
+ image->fp = save_fp;
+
+ /* Provide a suitable background for images with alpha channel */
+ if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
+ color_type == PNG_COLOR_TYPE_RGB_ALPHA)
+ {
+ png_color_16p image_background;
- /* Provide a suitable background for images with alpha channel */
- if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
- color_type == PNG_COLOR_TYPE_RGB_ALPHA)
+ if (png_get_bKGD(image->info.png.png_ptr, image->info.png.info_ptr,
+ &image_background))
{
- png_color_16p image_background;
+ png_set_background(image->info.png.png_ptr, image_background,
+ PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
+ }
+ else
+ {
+ png_color_16 my_white;
- if (png_get_bKGD(image->info.png.png_ptr, image->info.png.info_ptr,
- &image_background))
+ if (bit_depth == 8)
{
- png_set_background(image->info.png.png_ptr, image_background,
- PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
+ my_white.red = 0xFF;
+ my_white.green = 0xFF;
+ my_white.blue = 0xFF;
+ my_white.gray = 0xFF;
}
else
{
- png_color_16 my_white;
-
- if (bit_depth == 8)
- {
- my_white.red = 0xFF;
- my_white.green = 0xFF;
- my_white.blue = 0xFF;
- my_white.gray = 0xFF;
- }
- else
- {
- my_white.red = 0xFFFF;
- my_white.green = 0xFFFF;
- my_white.blue = 0xFFFF;
- my_white.gray = 0xFFFF;
- }
-
- png_set_background(image->info.png.png_ptr, &my_white,
- PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
+ my_white.red = 0xFFFF;
+ my_white.green = 0xFFFF;
+ my_white.blue = 0xFFFF;
+ my_white.gray = 0xFFFF;
}
- }
- /* fetch the actual image data */
- png_read_image(image->info.png.png_ptr, row_pointers);
+ png_set_background(image->info.png.png_ptr, &my_white,
+ PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
+ }
}
+ /* fetch the actual image data */
+ png_read_image(image->info.png.png_ptr, row_pointers);
+
image->in_use = pdc_true; /* mark slot as used */
pdf_put_image(p, imageslot, pdc_true, pdc_true);
@@ -787,6 +575,12 @@ pdf_process_PNG_data(
pdc_set_errmsg(p->pdc, errcode, "PNG", stemp, 0, 0);
break;
+ case PDF_E_IMAGE_TOO_LARGE:
+ pdc_set_errmsg(p->pdc, errcode, "PNG", stemp,
+ pdc_errprintf(p->pdc, "%ld", (long) image->width),
+ pdc_errprintf(p->pdc, "%ld", (long) image->height));
+ break;
+
case 0: /* error code and message already set */
break;
}
@@ -800,56 +594,20 @@ pdf_process_PNG_data(
pdc_bool
pdf_is_PNG_file(PDF *p, pdc_file *fp)
{
+ (void) p;
+ (void) fp;
+
return pdc_false;
}
-/* simple built-in PNG reader without libpng */
-
int
-pdf_process_PNG_data(
- PDF *p,
- int imageslot)
+pdf_process_PNG_data(PDF *p, int imageslot)
{
- static const char fn[] = "pdf_process_PNG_data";
- spng_info s_info;
- pdf_image *image;
-
- image = &p->images[imageslot];
-
- image->src.init = pdf_data_source_PNG_init;
- image->src.fill = pdf_data_source_PNG_fill;
- image->src.terminate = pdf_data_source_PNG_terminate;
- image->src.private_data = (void *) image;
-
- if (spng_init(p, image, &s_info) == SPNG_ERR_OK && image->use_raw)
- {
- image->predictor = pred_png;
- image->compression = pdf_comp_flate; /* CDPDF - fixed function name */
-
- image->width = (pdc_scalar) s_info.width;
- image->height = (pdc_scalar) s_info.height;
- image->bpc = s_info.bit_depth;
-
- image->components = 3;
-
- /* other types are rejected in spng_init() */
- image->colorspace =
- (s_info.color_type == 0 ? DeviceGray : DeviceRGB);
+ (void) imageslot;
+ pdc_set_errmsg(p->pdc, PDF_E_UNSUPP_IMAGE, "PNG", 0, 0, 0);
-
- }
- else
- {
- pdc_set_errmsg(p->pdc, PDF_E_UNSUPP_IMAGE, "PNG", 0, 0, 0);
- return -1;
- }
-
- image->in_use = pdc_true; /* mark slot as used */
-
- pdf_put_image(p, imageslot, pdc_true, pdc_true);
-
- return image->corrupt ? -1 : imageslot;
+ return -1;
}
#endif /* !HAVE_LIBPNG */
diff --git a/src/pdflib/pdflib/p_shading.c b/src/pdflib/pdflib/p_shading.c
index e027ce6..de0f762 100644
--- a/src/pdflib/pdflib/p_shading.c
+++ b/src/pdflib/pdflib/p_shading.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_shading.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_shading.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib routines for smooth shading
*
@@ -68,13 +68,12 @@ void
pdf_write_page_shadings(PDF *p)
{
int i, total = 0;
- int bias = p->curr_ppt->sh_bias;
for (i = 0; i < p->shadings_number; i++)
if (p->shadings[i].used_on_current_page)
total++;
- if (total > 0 || bias)
+ if (total > 0)
{
pdc_puts(p->out, "/Shading");
pdc_begin_dict(p->out);
@@ -87,12 +86,11 @@ pdf_write_page_shadings(PDF *p)
if (p->shadings[i].used_on_current_page)
{
p->shadings[i].used_on_current_page = pdc_false; /* reset */
- pdc_printf(p->out, "/Sh%d", bias + i);
+ pdc_printf(p->out, "/Sh%d", i);
pdc_objref(p->out, "", p->shadings[i].obj_id);
}
}
- if (!bias)
pdc_end_dict(p->out);
}
}
@@ -201,15 +199,13 @@ pdf__shading_pattern(PDF *p, int shading, const char *optlist)
void
pdf__shfill(PDF *p, int shading)
{
- int bias = p->curr_ppt->sh_bias;
-
if (p->compatibility == PDC_1_3)
pdc_error(p->pdc, PDF_E_SHADING13, 0, 0, 0, 0);
pdf_check_handle(p, shading, pdc_shadinghandle);
pdf_end_text(p);
- pdc_printf(p->out, "/Sh%d sh\n", bias + shading);
+ pdc_printf(p->out, "/Sh%d sh\n", shading);
p->shadings[shading].used_on_current_page = pdc_true;
}
diff --git a/src/pdflib/pdflib/p_subsett.c b/src/pdflib/pdflib/p_subsett.c
index 47eece6..de2a821 100644
--- a/src/pdflib/pdflib/p_subsett.c
+++ b/src/pdflib/pdflib/p_subsett.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_subsett.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_subsett.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib subsetting routines
*
diff --git a/src/pdflib/pdflib/p_table.c b/src/pdflib/pdflib/p_table.c
index dc45525..c619666 100644
--- a/src/pdflib/pdflib/p_table.c
+++ b/src/pdflib/pdflib/p_table.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_table.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_table.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib table function
*
diff --git a/src/pdflib/pdflib/p_tagged.c b/src/pdflib/pdflib/p_tagged.c
index 339b848..92c3eb7 100644
--- a/src/pdflib/pdflib/p_tagged.c
+++ b/src/pdflib/pdflib/p_tagged.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_tagged.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_tagged.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib marked content routines
*
@@ -21,6 +21,7 @@
#include "p_intern.h"
#include "p_layer.h"
#include "p_tagged.h"
+#include "pc_strconst.h"
@@ -51,3 +52,4 @@
+
diff --git a/src/pdflib/pdflib/p_tagged.h b/src/pdflib/pdflib/p_tagged.h
index 8dab696..2e6017d 100644
--- a/src/pdflib/pdflib/p_tagged.h
+++ b/src/pdflib/pdflib/p_tagged.h
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_tagged.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_tagged.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib marked content header
*
diff --git a/src/pdflib/pdflib/p_template.c b/src/pdflib/pdflib/p_template.c
index b6a4f6d..6237467 100644
--- a/src/pdflib/pdflib/p_template.c
+++ b/src/pdflib/pdflib/p_template.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_template.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_template.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib template routines
*
@@ -26,7 +26,7 @@ int
pdf_embed_image(PDF *p, int im)
{
pdf_image *image = &p->images[im];
- char optlist[2048], *ol;
+ char optlist[PDC_GEN_BUFSIZE], *ol;
pdc_scalar width, height;
int templ;
@@ -39,13 +39,14 @@ pdf_embed_image(PDF *p, int im)
if (image->iconname)
- sprintf(ol, "iconname {%s}", image->iconname);
+ pdc_sprintf(p->pdc, pdc_false, ol, "iconname {%s}", image->iconname);
/* create template */
templ = pdf__begin_template(p, width, height, optlist);
/* fit image */
- sprintf(optlist, "boxsize {%g %g} fitmethod meet", width, height);
+ pdc_sprintf(p->pdc, pdc_false, optlist, "boxsize {%g %g} fitmethod meet",
+ width, height);
pdf__fit_image(p, im, 0, 0, optlist);
/* end template */
@@ -65,6 +66,9 @@ static const pdc_defopt pdf_begin_template_options[] =
{
{"topdown", pdc_booleanlist, PDC_OPT_NONE, 1, 1, 0.0, 0.0, NULL},
+ {"transparencygroup", pdc_stringlist, PDC_OPT_PDC_1_4, 1, 1,
+ 1.0, PDF_MAX_NAMESTRING, NULL},
+
{"OPI-1.3", pdc_stringlist, PDF_OPIOPT_FLAG, 1, 1, 0.0, 32000.0, NULL},
{"OPI-2.0", pdc_stringlist, PDF_OPIOPT_FLAG | PDC_OPT_IGNOREIF1,
@@ -114,6 +118,9 @@ pdf__begin_template(PDF *p, pdc_scalar width, pdc_scalar height,
image->topdown_save = (p->ydirection == -1) ? pdc_true : pdc_false;
topdown = image->topdown_save;
image->in_use = pdc_true; /* mark slot as used */
+ image->tgroup.colorspace = color_none;
+ image->tgroup.isolated = pdc_false;
+ image->tgroup.knockout = pdc_false;
/* parsing optlist */
pdf_set_clientdata(p, &cdata);
@@ -123,11 +130,16 @@ pdf__begin_template(PDF *p, pdc_scalar width, pdc_scalar height,
/* save and check options */
if (optlist && *optlist)
{
+ char **slist;
+
image->verbose = pdf_get_errorpolicy(p, resopts, image->verbose);
keyword = "topdown";
pdc_get_optvalues(keyword, resopts, &topdown, NULL);
+ if (pdc_get_optvalues("transparencygroup", resopts, NULL, &slist))
+ pdf_set_transgroup(p, slist[0], &image->tgroup);
+
keyword = "iconname";
if (pdc_get_optvalues(keyword, resopts, NULL, NULL))
iconname = (char *) pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM);
@@ -168,6 +180,9 @@ pdf__begin_template(PDF *p, pdc_scalar width, pdc_scalar height,
pdc_printf(p->out, "/BBox[0 0 %f %f]\n", width, height);
+ if (image->tgroup.colorspace != color_none)
+ pdf_write_transgroup(p, &image->tgroup);
+
diff --git a/src/pdflib/pdflib/p_text.c b/src/pdflib/pdflib/p_text.c
index 105df11..b932bc0 100644
--- a/src/pdflib/pdflib/p_text.c
+++ b/src/pdflib/pdflib/p_text.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_text.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_text.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib text routines
*
@@ -428,7 +428,8 @@ pdf_init_text_options(PDF *p, pdf_text_options *to)
static pdf_text_optflags pdf_toptflags[] =
{
to_font, to_fontsize, to_textrendering, to_charspacing,
- to_horizscaling, to_italicangle, to_wordspacing, to_textrise
+ to_horizscaling, to_italicangle, to_fakebold, to_wordspacing,
+ to_textrise, to_underlinewidth, to_underlineposition
};
void
@@ -454,6 +455,13 @@ pdf_set_text_options(PDF *p, pdf_text_options *to)
if (!(currto->mask & (1 << tflag)) &&
to->font == currto->font)
break;
+ if (currto->font != -1 &&
+ (p->fonts[to->font].metricflags & font_italic) !=
+ (p->fonts[currto->font].metricflags & font_italic))
+ {
+ to->mask |= (1 << to_italicangle);
+ currto->mask = to->mask; /* otherwise order dependent */
+ }
ts->font = currto->font = to->font;
continue;
@@ -593,7 +601,8 @@ pdf_calculate_text_options(PDF *p, pdf_text_options *to, pdc_bool force,
{
pdc_bool kminfs = pdc_false;
- if (to->mask & (1 << to_fontsize) || force)
+ if (to->mask & (1U << to_fontsize) ||
+ (force && to->fontsize != PDC_FLOAT_MIN))
{
pdc_scalar fontsize;
@@ -632,12 +641,9 @@ pdf_calculate_text_options(PDF *p, pdf_text_options *to, pdc_bool force,
fontsize *= 1000.0 / fm;
}
- if (fontscale < 1.0 && fabs(fontsize) < minfontsize)
+ if (fontscale < 1.0 && PDC_ABS(fontsize) < minfontsize)
{
- if (fontsize > 0)
- fontsize = minfontsize;
- else
- fontsize = -minfontsize;
+ fontsize = PDC_SIGN(fontsize) * minfontsize;
kminfs = pdc_true;
}
to->fontsize = fontsize;
@@ -919,7 +925,7 @@ pdf_begin_text(PDF *p)
(currto->mask & (1L << to_fontsize)) || !ts->glyphinit))
{
pdc_printf(p->out, "/F%d %f Tf\n",
- ppt->fn_bias + currto->font, p->ydirection * currto->fontsize);
+ currto->font, p->ydirection * currto->fontsize);
currfont->used_in_current_doc = pdc_true;
currfont->used_on_current_page = pdc_true;
@@ -998,6 +1004,31 @@ pdf_reset_tstate(PDF *p)
/* ------------------- Text string checking function ---------------------- */
+struct pdf_fitres_s
+{
+ pdc_bool verbose;
+ pdc_vector start; /* text start position */
+ pdc_vector end; /* text end position */
+ pdc_vector writingdir; /* unit vector of text writing direction */
+ pdc_vector perpendiculardir;/* unit vector perpendicular to writing dir. */
+ pdc_vector scale; /* x/y scaling */
+ pdc_scalar angle; /* rotation angle of writingdir in degree */
+ pdc_scalar width; /* textline width */
+ pdc_scalar height; /* textline height */
+ pdc_scalar mwidth; /* textline width with margins */
+ pdc_scalar mheight; /* textline height with margins */
+ pdc_scalar ascender; /* textline ascender */
+ pdc_scalar capheight; /* textline capheight */
+ pdc_scalar xheight; /* textline xheight */
+ pdc_scalar descender; /* textline descender */
+ int unmappedchars; /* number of characters not contained
+ * in the encoding and not in the font */
+ int replacedchars; /* number of characters replaced by
+ * typografically similar characters */
+ int unknownchars; /* number of characters replaced by
+ * given replcement character */
+};
+
typedef struct pdf_ligat_s pdf_ligat;
struct pdf_ligat_s
@@ -1067,7 +1098,7 @@ pdf_cleanup_ligat(PDF *p, pdf_ligat *list)
int
pdf_get_approximate_uvlist(PDF *p, pdf_font *currfont, pdc_encodingvector *ev,
- int usv, pdc_bool replace,
+ int usv, pdc_bool replace, pdf_fitres *fitres,
pdc_ushort *uvlist, pdc_ushort *cglist)
{
int cg = 0, nv = 1;
@@ -1090,6 +1121,13 @@ pdf_get_approximate_uvlist(PDF *p, pdf_font *currfont, pdc_encodingvector *ev,
uvlist[0] = 0;
}
nv = 1;
+
+ if (fitres != NULL)
+ fitres->unknownchars++;
+ }
+ else if (fitres != NULL)
+ {
+ fitres->replacedchars++;
}
return nv;
@@ -1168,14 +1206,14 @@ pdf_get_input_textformat(pdf_font *currfont,
* (pdc_malloc_tmp, pdc_free_tmp) containing the converted string
* if flag PDF_USE_TMPALLOC is set.
*
- * If return value is -1 an error was occurred, otherwise >= 0.
- * glyphcheck = none: the number of unmapped glyphs will be returned.
+ * If return value is pdc_false an error was occurred, otherwise pdc_true.
*
*/
-int
+pdc_bool
pdf_check_textstring(PDF *p, const char *text, int len, int flags,
- pdf_text_options *to, pdc_byte **outtext_p, int *outlen,
+ pdf_text_options *to, pdf_fitres *fitres,
+ pdc_byte **outtext_p, int *outlen,
int *outcharlen, pdc_bool verbose)
{
static const char fn[] = "pdf_check_textstring";
@@ -1191,13 +1229,13 @@ pdf_check_textstring(PDF *p, const char *text, int len, int flags,
pdc_text_format intextformat = to->textformat;
pdc_text_format outtextformat = pdc_utf16;
+ int maxlen = PDF_MAXDICTSIZE;
int charlen = 1, newcharlen = 1;
int convflags = PDC_CONV_NOBOM;
- int unmapgids = 0;
pdf_ligat *ligat, *ligatlist = NULL;
pdc_byte *intext = (pdc_byte *) text, *outtext = NULL;
- int newlen = -1, maxlen, replchar;
+ int newlen = -1, replchar;
if (logg1)
{
@@ -1237,6 +1275,10 @@ pdf_check_textstring(PDF *p, const char *text, int len, int flags,
if (logg2)
pdc_logg(p->pdc, "\t\ttext is passed through as is\n");
+ if (intextformat > pdc_bytes2)
+ pdc_warning(p->pdc, PDF_E_TEXT_BADTEXTFORMAT,
+ pdc_get_textformat(intextformat), 0, 0, 0);
+
outtext = (pdc_byte *) ((flags & PDF_USE_TMPALLOC) ?
pdc_malloc_tmp(p->pdc, (size_t) len + 2, fn, NULL, NULL) :
pdc_malloc(p->pdc, (size_t) len + 2, fn));
@@ -1327,12 +1369,29 @@ pdf_check_textstring(PDF *p, const char *text, int len, int flags,
}
/* maximal text string length - found out emprirically! */
- maxlen = (currfont->codesize == 1) ? PDF_MAXARRAYSIZE : PDF_MAXDICTSIZE;
- if (!(flags & PDF_KEEP_TEXTLEN) && *outlen > maxlen)
+ if (*outlen > maxlen && !(flags & PDF_KEEP_TEXTLEN))
{
- pdc_set_errmsg(p->pdc, PDF_E_TEXT_TOOLONG,
- pdc_errprintf(p->pdc, "%d", maxlen), 0, 0, 0);
- goto PDF_CHECK_TEXT_ERROR;
+ int textlen = *outlen;
+
+ if (!to->kerning && to->wordspacing == 0.0)
+ {
+ if (currfont->codesize == 1)
+ textlen /= charlen;
+ maxlen = PDF_MAXTEXTSIZE;
+ }
+ else
+ {
+ if (currfont->codesize == 2)
+ maxlen *= charlen;
+ }
+
+ if (textlen > maxlen)
+ {
+ pdc_set_errmsg(p->pdc, PDF_E_TEXT_TOOLONG,
+ pdc_errprintf(p->pdc, "%d", textlen),
+ pdc_errprintf(p->pdc, "%d", maxlen), 0, 0);
+ goto PDF_CHECK_TEXT_ERROR;
+ }
}
len = *outlen / charlen;
@@ -1360,7 +1419,6 @@ pdf_check_textstring(PDF *p, const char *text, int len, int flags,
/* glyph id for code value not available */
if (gid <= 0)
{
- unmapgids++;
if (to->glyphcheck == text_error)
{
pdc_set_errmsg(p->pdc, PDF_E_FONT_CODENOTFOUND1,
@@ -1374,7 +1432,13 @@ pdf_check_textstring(PDF *p, const char *text, int len, int flags,
pdc_errprintf(p->pdc, "x%02X", code),
currfont->ft.name, 0, 0);
code = currfont->replacementcode;
+
+ if (fitres != NULL)
+ fitres->unknownchars++;
}
+
+ if (fitres != NULL)
+ fitres->unmappedchars++;
}
}
@@ -1435,7 +1499,6 @@ pdf_check_textstring(PDF *p, const char *text, int len, int flags,
/* encoding vector hasn't defined [Uni]code */
if (usv <= 0 || code <= 0)
{
- unmapgids++;
if (to->glyphcheck == text_error)
{
if (usv <= 0)
@@ -1458,6 +1521,7 @@ pdf_check_textstring(PDF *p, const char *text, int len, int flags,
usvp = (usv <= 0) ? code : usv;
nv = pdf_get_approximate_uvlist(p, currfont, ev,
usv, pdc_true,
+ fitres,
uvlist, cglist);
usv = (int) uvlist[0];
code = (int) cglist[0];
@@ -1468,6 +1532,9 @@ pdf_check_textstring(PDF *p, const char *text, int len, int flags,
enc, charlen, uvlist, cglist, nv);
}
}
+
+ if (fitres != NULL)
+ fitres->unmappedchars++;
}
else
{
@@ -1476,7 +1543,6 @@ pdf_check_textstring(PDF *p, const char *text, int len, int flags,
/* glyph id for code not available */
if (gid <= 0 && currfont->gid0code != code)
{
- unmapgids++;
if (to->glyphcheck == text_error)
{
pdc_set_errmsg(p->pdc, PDF_E_FONT_CODENOTFOUND2,
@@ -1495,6 +1561,7 @@ pdf_check_textstring(PDF *p, const char *text, int len, int flags,
usvp = (usv <= 0) ? code : usv;
nv = pdf_get_approximate_uvlist(p, currfont, ev,
usv, pdc_true,
+ fitres,
uvlist, cglist);
usv = (int) uvlist[0];
code = (int) cglist[0];
@@ -1505,6 +1572,9 @@ pdf_check_textstring(PDF *p, const char *text, int len, int flags,
enc, charlen, uvlist, cglist, nv);
}
}
+
+ if (fitres != NULL)
+ fitres->unmappedchars++;
}
}
}
@@ -1603,7 +1673,11 @@ pdf_check_textstring(PDF *p, const char *text, int len, int flags,
"\tChecked and converted text of length %d: \"%T\"\n",
*outlen, outtext, *outlen);
}
- return unmapgids;
+
+ if (*outlen)
+ return pdc_true;
+
+ verbose = pdc_false;
PDF_CHECK_TEXT_ERROR:
@@ -1618,12 +1692,12 @@ pdf_check_textstring(PDF *p, const char *text, int len, int flags,
pdf_cleanup_ligat(p, ligatlist);
if (verbose)
- pdc_error(p->pdc, -1, 0, 0, 0, 0);
+ PDC_RETHROW(p->pdc);
*outtext_p = NULL;
*outlen = 0;
- return -1;
+ return pdc_false;
}
@@ -1790,10 +1864,9 @@ pdf__stringwidth(PDF *p, const char *text, int len, int font,
pdc_scalar width = 0, height = 0;
pdf_text_options to = *p->curr_ppt->currto;
- if (text && len == 0)
- len = (int) strlen(text);
- if (text == NULL || len <= 0)
- return width;
+ len = pdc_check_text_length(p->pdc, &text, len, PDF_MAXTEXTSIZE);
+ if (!len)
+ return 0.0;
pdf_check_handle(p, font, pdc_fonthandle);
@@ -1802,11 +1875,12 @@ pdf__stringwidth(PDF *p, const char *text, int len, int font,
/* convert text string */
to.font = font;
to.fontsize = fontsize;
- pdf_check_textstring(p, text, len, PDF_KEEP_TEXTLEN | PDF_USE_TMPALLOC,
- &to, &utext, &len, &charlen, pdc_true);
- if (utext && len)
+ if (pdf_check_textstring(p, text, len, PDF_KEEP_TEXTLEN | PDF_USE_TMPALLOC,
+ &to, NULL, &utext, &len, &charlen, pdc_true))
+ {
width = pdf_calculate_textsize(p, utext, len, charlen,
&to, -1, &height, pdc_true);
+ }
return width;
}
@@ -1835,7 +1909,7 @@ pdf_put_fieldtext(PDF *p, const char *text, int font)
{
pdf_put_hypertext(p, text);
}
- else
+ else if (font > -1)
{
static const char fn[] = "pdf_put_fieldtext";
pdf_font *currfont = &p->fonts[font];
@@ -2301,15 +2375,9 @@ pdf__show_text(
int charlen = 1;
pdc_scalar width = 0, height = 0;
- if (text && len == 0)
- len = (int) strlen(text);
- if (text == NULL || len <= 0)
- {
- if (cont)
- len = 0;
- else
- return;
- }
+ len = pdc_check_text_length(p->pdc, &text, len, PDF_MAXTEXTSIZE);
+ if (!len && !cont)
+ return;
/* no font set */
if (currto->font == -1)
@@ -2318,14 +2386,17 @@ pdf__show_text(
if (len)
{
/* convert text string */
- pdf_check_textstring(p, text, len, PDF_USE_TMPALLOC,
- currto, &utext, &len, &charlen, pdc_true);
- if (utext == NULL || (!cont && !len))
+ if (pdf_check_textstring(p, text, len, PDF_USE_TMPALLOC,
+ currto, NULL, &utext, &len, &charlen, pdc_true))
+ {
+ /* width and height of text string */
+ width = pdf_calculate_textsize(p, utext, len, charlen,
+ currto, -1, &height, pdc_true);
+ }
+ else if (!cont)
+ {
return;
-
- /* width and height of text string */
- width = pdf_calculate_textsize(p, utext, len, charlen,
- currto, -1, &height, pdc_true);
+ }
}
else
{
@@ -2350,9 +2421,8 @@ pdf__xshow(PDF *p, const char *text, int len, const pdc_scalar *xadvancelist)
size_t nbytes = 0;
pdc_scalar width, height;
- if (text && len == 0)
- len = (int) strlen(text);
- if (text == NULL || !len)
+ len = pdc_check_text_length(p->pdc, &text, len, PDF_MAXTEXTSIZE);
+ if (!len)
return;
/* no font set */
@@ -2360,28 +2430,28 @@ pdf__xshow(PDF *p, const char *text, int len, const pdc_scalar *xadvancelist)
pdc_error(p->pdc, PDF_E_TEXT_NOFONT, 0, 0, 0, 0);
/* convert text string */
- pdf_check_textstring(p, text, len, PDF_USE_TMPALLOC,
- currto, &utext, &len, &charlen, pdc_true);
- if (utext == NULL || !len)
- return;
-
- /* allocating glyph widths arrays */
- nbytes = (size_t) (len / charlen) * sizeof(pdc_scalar);
- currto->xadvancelist = (pdc_scalar *) pdc_malloc_tmp(p->pdc,
- nbytes, fn, NULL, NULL);
- memcpy(currto->xadvancelist, xadvancelist, nbytes);
- currto->nglyphs = len / charlen;
+ if (pdf_check_textstring(p, text, len, PDF_USE_TMPALLOC,
+ currto, NULL, &utext, &len, &charlen, pdc_true))
+ {
+ /* allocating glyph widths arrays */
+ nbytes = (size_t) (len / charlen) * sizeof(pdc_scalar);
+ currto->xadvancelist = (pdc_scalar *) pdc_malloc_tmp(p->pdc,
+ nbytes, fn, NULL, NULL);
+ memcpy(currto->xadvancelist, xadvancelist, nbytes);
+ currto->nglyphs = len / charlen;
- /* length of text */
- width = pdf_calculate_textsize(p, utext, len, charlen,
- currto, -1, &height, pdc_true);
+ /* length of text */
+ width = pdf_calculate_textsize(p, utext, len, charlen,
+ currto, -1, &height, pdc_true);
- /* place text */
- pdf_place_text(p, utext, len, charlen, currto, width, height, pdc_false);
+ /* place text */
+ pdf_place_text(p, utext, len, charlen, currto, width, height,
+ pdc_false);
- currto->xadvancelist = NULL;
- currto->nglyphs = 0;
+ currto->xadvancelist = NULL;
+ currto->nglyphs = 0;
+ }
}
@@ -2391,24 +2461,6 @@ pdf__xshow(PDF *p, const char *text, int len, const pdc_scalar *xadvancelist)
/* ----------------------- Text fitting function ------------------------ */
-struct pdf_fittext_s
-{
- pdc_vector start; /* text start position */
- pdc_vector end; /* text end position */
- pdc_vector writingdir; /* unit vector of text writing direction */
- pdc_vector perpendiculardir;/* unit vector perpendicular to writing dir. */
- pdc_vector scale; /* x/y scaling */
- pdc_scalar angle; /* rotation angle of writingdir in degree */
- pdc_scalar width; /* textline width */
- pdc_scalar height; /* textline height */
- pdc_scalar mwidth; /* textline width with margins */
- pdc_scalar mheight; /* textline height with margins */
- pdc_scalar ascender; /* textline ascender */
- pdc_scalar capheight; /* textline capheight */
- pdc_scalar xheight; /* textline xheight */
- pdc_scalar descender; /* textline descender */
-};
-
/* definitions of fit text options */
static const pdc_defopt pdf_fit_textline_options[] =
@@ -2482,9 +2534,8 @@ pdf_parse_textline_options(PDF *p, const char *text, int len,
{
pdf_ppt *ppt = p->curr_ppt;
- if (text && len == 0)
- len = (int) strlen(text);
- if (text == NULL || len <= 0)
+ len = pdc_check_text_length(p->pdc, &text, len, PDF_MAXTEXTSIZE);
+ if (!len)
return pdc_false;
/* initialize text options */
@@ -2508,8 +2559,8 @@ pdf_parse_textline_options(PDF *p, const char *text, int len,
return pdc_true;
}
-int
-pdf_fit_textline_internal(PDF *p, pdf_fittext *fitres,
+pdc_bool
+pdf_fit_textline_internal(PDF *p, pdf_fitres *fitres,
pdf_text_options *to, pdf_fit_options *fit,
pdc_matrix *matrix)
{
@@ -2531,9 +2582,11 @@ pdf_fit_textline_internal(PDF *p, pdf_fittext *fitres,
pdc_scalar ascender, capheight, xheight, descender;
pdc_scalar x, y, tx = 0, ty = 0, basey = 0;
pdc_bool hasfitbox = pdc_false;
+ pdc_bool hasboxwidth = pdc_false;
+ pdc_bool verbose = pdc_true;
pdc_scalar font2user;
int indangle = fit->orientate / 90;
- int unmapgids = 0, i;
+ int i;
(void) ppt;
@@ -2552,12 +2605,13 @@ pdf_fit_textline_internal(PDF *p, pdf_fittext *fitres,
fontsizeref);
if (!blind)
pdf_set_text_options(p, to);
+ else
+ verbose = fitres->verbose;
/* convert text string */
- unmapgids = pdf_check_textstring(p, to->text, to->textlen, PDF_USE_TMPALLOC,
- to, &utext, &len, &charlen, pdc_true);
- if (utext == NULL || !len)
- return -1;
+ if (!pdf_check_textstring(p, to->text, to->textlen, PDF_USE_TMPALLOC,
+ to, fitres, &utext, &len, &charlen, verbose))
+ return pdc_false;
if (to->nglyphs && len/charlen != to->nglyphs)
pdc_warning(p->pdc, PDF_E_TEXT_SIZENOMATCH,
@@ -2568,8 +2622,11 @@ pdf_fit_textline_internal(PDF *p, pdf_fittext *fitres,
width = pdf_calculate_textsize(p, utext, len, charlen,
to, -1, &height, pdc_true);
width = pdf_trim_textwidth(width, to);
+
+ /* incredible bug #1451
if (PDC_FLOAT_ISNULL(width))
return -1;
+ */
/* font specifics */
font2user = to->fontsize / 1000.0;
@@ -2589,7 +2646,8 @@ pdf_fit_textline_internal(PDF *p, pdf_fittext *fitres,
boxheight -= 2 * elemmargin.y;
if (boxheight < 0)
boxheight = 0;
- hasfitbox = boxwidth > PDC_FLOAT_PREC && boxheight > PDC_FLOAT_PREC;
+ hasboxwidth = boxwidth > PDC_FLOAT_PREC;
+ hasfitbox = hasboxwidth && boxheight > PDC_FLOAT_PREC;
/* kind of text box */
pdf_get_mbox_boxheight(p, fit->matchbox, textyextent);
@@ -2680,8 +2738,10 @@ pdf_fit_textline_internal(PDF *p, pdf_fittext *fitres,
switch(enc)
{
case pdc_cid:
+ /* non-Unicode compatible CMaps seem to work (see bug #1605)
if (currfont->codesize != 2)
poschar = -1;
+ */
break;
case pdc_glyphid:
@@ -2701,12 +2761,23 @@ pdf_fit_textline_internal(PDF *p, pdf_fittext *fitres,
break;
}
+ if (to->glyphcheck == text_error && poschar == -1)
+ {
+ pdc_set_errmsg(p->pdc, PDF_E_TEXT_ALIGNCHARNOTFOUND,
+ pdc_errprintf(p->pdc, "%04X", fit->alignchar),
+ 0, 0, 0);
+ if (verbose)
+ PDC_RETHROW(p->pdc);
+
+ return pdc_false;
+ }
+
/* width and height of text part ranging to decimal character */
decwidth = pdf_calculate_textsize(p, utext, len, charlen,
to, poschar, &decheight, pdc_true);
/* position found */
- if (decwidth > 0)
+ if (decwidth > 0 && !PDC_FLOAT_ISNULL(width))
{
/* relative position of position character */
pos1 = decwidth / width;
@@ -2925,7 +2996,7 @@ pdf_fit_textline_internal(PDF *p, pdf_fittext *fitres,
{
pdc_scalar mwidth = 2 * fabs(elemmargin.x);
pdc_scalar mheight = 2 * fabs(elemmargin.y);
- pdc_scalar vlen;
+ pdc_scalar wlen, plen;
/* start position */
pdc_transform_point(&m, x, y, &tx, &ty);
@@ -2950,41 +3021,48 @@ pdf_fit_textline_internal(PDF *p, pdf_fittext *fitres,
/* relative vector from start to end */
tx = fitres->end.x - fitres->start.x;
ty = fitres->end.y - fitres->start.y;
- vlen = sqrt(tx * tx + ty * ty);
+ wlen = sqrt(tx * tx + ty * ty);
if (!vertical)
{
/* width and x scaling */
- fitres->width = vlen;
- fitres->mwidth = vlen + mwidth;
- fitres->scale.x = fitres->width / width;
+ fitres->width = wlen;
+ fitres->mwidth = wlen + mwidth;
+ }
+ else
+ {
+ /* height and y scaling */
+ fitres->height = wlen;
+ fitres->mheight = wlen + mheight;
+ }
- /* unit vector of base line */
- fitres->writingdir.x = tx / vlen;
- fitres->writingdir.y = ty / vlen;
+ /* unit vector of writingdir line */
+ if (!PDC_FLOAT_ISNULL(wlen))
+ {
+ fitres->writingdir.x = tx / wlen;
+ fitres->writingdir.y = ty / wlen;
+ }
+ else
+ {
+ fitres->writingdir.x = 0;
+ fitres->writingdir.y = 0;
+ }
+ if (!vertical)
+ {
/* relative vector of fontsize */
tx = x;
ty = y + p->ydirection * height;
pdc_transform_point(&m, tx, ty, &tx, &ty);
tx -= fitres->start.x;
ty -= fitres->start.y;
- vlen = sqrt(tx * tx + ty * ty);
+ plen = sqrt(tx * tx + ty * ty);
/* height and y scaling */
- fitres->height = vlen;
- fitres->mheight = vlen + mheight;
- fitres->scale.y = fitres->height / height;
+ fitres->height = plen;
+ fitres->mheight = plen + mheight;
}
else
{
- /* height and y scaling */
- fitres->height = vlen;
- fitres->mheight = vlen + mheight;
- fitres->scale.y = fitres->height / height;
-
- /* unit vector of perpendiculardir line */
- fitres->writingdir.x = tx / vlen;
- fitres->writingdir.y = ty / vlen;
/* relative vector of width */
tx = x + width;
@@ -2992,17 +3070,34 @@ pdf_fit_textline_internal(PDF *p, pdf_fittext *fitres,
pdc_transform_point(&m, tx, ty, &tx, &ty);
tx -= fitres->start.x;
ty -= fitres->start.y;
- vlen = sqrt(tx * tx + ty * ty);
+ plen = sqrt(tx * tx + ty * ty);
/* width ans x scaling */
- fitres->width = vlen;
- fitres->mwidth = vlen + mwidth;
- fitres->scale.x = fitres->width / width;
+ fitres->width = plen;
+ fitres->mwidth = plen + mwidth;
}
/* unit vector of perpendiculardir line */
- fitres->perpendiculardir.x = tx / vlen;
- fitres->perpendiculardir.y = ty / vlen;
+ if (!PDC_FLOAT_ISNULL(plen))
+ {
+ fitres->perpendiculardir.x = tx / plen;
+ fitres->perpendiculardir.y = ty / plen;
+ }
+ else
+ {
+ fitres->perpendiculardir.x = 0;
+ fitres->perpendiculardir.y = 0;
+ }
+
+ if (!PDC_FLOAT_ISNULL(width))
+ fitres->scale.x = fitres->width / width;
+ else
+ fitres->scale.x = 1.0;
+
+ if (!PDC_FLOAT_ISNULL(height))
+ fitres->scale.y = fitres->height / height;
+ else
+ fitres->scale.y = 1.0;
/* rotation angle of base line */
fitres->angle = atan2(fitres->writingdir.y, fitres->writingdir.x) /
@@ -3030,17 +3125,20 @@ pdf_fit_textline_internal(PDF *p, pdf_fittext *fitres,
/* create a link - deprecated - */
if (to->link)
{
- pdf_check_textstring(p, to->text, to->textlen,
+ if (pdf_check_textstring(p, to->text, to->textlen,
PDF_USE_TMPALLOC | PDF_KEEP_UNICODE,
- to, &utext, &len, &charlen, pdc_true);
- pdf_create_link(p, to->linktype, x, y + p->ydirection * descender,
- x + width, y + p->ydirection * to->fontsize,
- to->link, (char *) utext, len);
- pdc_free_tmp(p->pdc, utext);
+ to, NULL, &utext, &len, &charlen, pdc_true))
+ {
+ pdf_create_link(p, to->linktype,
+ x, y + p->ydirection * descender,
+ x + width, y + p->ydirection * to->fontsize,
+ to->link, (char *) utext, len);
+ pdc_free_tmp(p->pdc, utext);
+ }
}
}
- return unmapgids;
+ return pdc_true;
}
void
@@ -3048,10 +3146,11 @@ pdf_calculate_textline_size(PDF *p, pdf_text_options *to, pdf_fit_options *fit,
pdc_scalar *width, pdc_scalar *height)
{
pdf_ppt *ppt = p->curr_ppt;
- pdf_fittext fitres;
+ pdf_fitres fitres;
pdc_matrix ctminv;
/* calculate textline size for table cells */
+ fitres.verbose = pdc_true;
fitres.width = 0.0;
fitres.height = 0.0;
pdf_fit_textline_internal(p, &fitres, to, fit, NULL);
@@ -3120,8 +3219,13 @@ static const pdc_keyconn pdf_info_keylist[] =
{"capheight", 14},
{"xheight", 15},
{"descender", 16},
- {"unmappedglyphs", 17},
- {"angle", 18},
+ {"angle", 17},
+
+ {"unmappedglyphs", 20}, /* deprecated */
+ {"unmappedchars", 20},
+ {"replacedchars", 21},
+ {"unknownchars", 22},
+ {"wellformed", 23},
{NULL, 0}
};
@@ -3132,8 +3236,8 @@ pdf__info_textline(PDF *p, const char *text, int len, const char *keyword,
pdf_ppt *ppt = p->curr_ppt;
pdf_text_options to;
pdf_fit_options fit;
- pdf_fittext fitres;
- double tinfo = 0;
+ pdf_fitres fitres;
+ double tinfo = 0.0;
int retval, infokey;
if (!keyword || !*keyword)
@@ -3149,10 +3253,14 @@ pdf__info_textline(PDF *p, const char *text, int len, const char *keyword,
if (retval)
{
/* calculate textline */
+ fitres.verbose = to.glyphwarning;
+ fitres.unmappedchars = 0;
+ fitres.replacedchars = 0;
+ fitres.unknownchars = 0;
retval = pdf_fit_textline_internal(p, &fitres, &to, &fit, NULL);
pdf_cleanup_fit_options(p, &fit);
- if (retval > -1)
+ if (retval)
{
pdf_font *currfont = &p->fonts[to.font];
pdc_matrix ctminv;
@@ -3277,11 +3385,24 @@ pdf__info_textline(PDF *p, const char *text, int len, const char *keyword,
break;
case 17:
- tinfo = (double) retval;
+ tinfo = (double) fitres.angle;
break;
- case 18:
- tinfo = (double) fitres.angle;
+ case 20:
+ tinfo = (double) fitres.unmappedchars;
+ break;
+
+ case 21:
+ tinfo = (double) fitres.replacedchars;
+ break;
+
+ case 22:
+ tinfo = (double) fitres.unknownchars;
+ break;
+
+ /* wellformed */
+ case 23:
+ tinfo = (double) 1;
break;
}
}
@@ -3292,6 +3413,7 @@ pdf__info_textline(PDF *p, const char *text, int len, const char *keyword,
+
/*****************************************************************************/
/** deprecated historical text formatting function **/
/*****************************************************************************/
@@ -3363,11 +3485,7 @@ pdf__show_boxed(
pdf_alignment mode = text_left;
pdc_bool blind = pdc_false;
- /* text length */
- if (text == NULL)
- return 0;
- if (!len)
- len = (int) strlen(text);
+ len = pdc_check_text_length(p->pdc, &text, len, PDF_MAXTEXTSIZE);
if (!len)
return 0;
@@ -3451,10 +3569,9 @@ pdf__show_boxed(
int charlen;
/* convert text string */
- pdf_check_textstring(p, text, len,
+ if (!pdf_check_textstring(p, text, len,
PDF_KEEP_CONTROL | PDF_KEEP_TEXTLEN | PDF_USE_TMPALLOC,
- currto, &utext, &len, &charlen, pdc_true);
- if (utext == NULL || !len)
+ currto, NULL, &utext, &len, &charlen, pdc_true))
return 0;
utext[len] = 0;
diff --git a/src/pdflib/pdflib/p_textflow.c b/src/pdflib/pdflib/p_textflow.c
index 006facb..fc4ab3d 100644
--- a/src/pdflib/pdflib/p_textflow.c
+++ b/src/pdflib/pdflib/p_textflow.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_textflow.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_textflow.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib textflow function
*
diff --git a/src/pdflib/pdflib/p_tiff.c b/src/pdflib/pdflib/p_tiff.c
index 5ed382f..3116a50 100644
--- a/src/pdflib/pdflib/p_tiff.c
+++ b/src/pdflib/pdflib/p_tiff.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_tiff.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_tiff.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* TIFF processing for PDFlib
*
@@ -22,7 +22,7 @@
#ifndef HAVE_LIBTIFF
-pdc_bool /* CDPDF fixed last parameter declaration */
+pdc_bool
pdf_is_TIFF_file(PDF *p, pdc_file *fp, pdf_tiff_info *tiff, pdc_bool check)
{
(void) p;
@@ -38,7 +38,7 @@ pdf_process_TIFF_data(
PDF *p,
int imageslot)
{
- pdf_image *image = &p->images[imageslot];
+ (void) imageslot;
pdc_set_errmsg(p->pdc, PDF_E_UNSUPP_IMAGE, "TIFF", 0, 0, 0);
@@ -114,7 +114,7 @@ pdf_libtiff_error(TIFF *t, const char* module, const char* fmt, va_list ap)
char buffer[PDF_TIFF_LENGTH_MAX];
/* Create the message */
- pdc_vsnprintf(buffer, PDF_TIFF_LENGTH_MAX, fmt, ap);
+ pdc_vsnprintf(p->pdc, buffer, PDF_TIFF_LENGTH_MAX, fmt, ap);
pdc_logg(p->pdc, "\tlibtiff(%s): %s\n", module, buffer);
}
}
@@ -240,6 +240,7 @@ pdf_data_source_TIFF_fill(PDF *p, PDF_data_source *src)
}
else
{
+ {
if (image->info.tiff.cur_line++ == image->height)
{
PDC_EXIT_TRY(p->pdc);
@@ -308,6 +309,7 @@ pdf_data_source_TIFF_fill(PDF *p, PDF_data_source *src)
pdc_error(p->pdc, PDF_E_IMAGE_BADCOMP,
pdc_errprintf(p->pdc, "%d", image->components),
pdf_get_image_filename(p, image), 0, 0);
+ }
}
}
}
@@ -365,7 +367,7 @@ pdf_process_TIFF_data(
int imageslot)
{
static const char *fn = "pdf_process_TIFF_data";
- uint32 w, h;
+ uint32 width, height;
uint16 unit, bpc, compression, photometric, extra, *sinfo;
uint16 orientation, planarconfig;
uint16 *rmap, *gmap, *bmap;
@@ -407,11 +409,11 @@ pdf_process_TIFF_data(
TIFFGetField(MYTIFF, TIFFTAG_COMPRESSION, &compression);
- TIFFGetField(MYTIFF, TIFFTAG_IMAGEWIDTH, &w);
- image->width = (pdc_scalar) w;
+ TIFFGetField(MYTIFF, TIFFTAG_IMAGEWIDTH, &width);
+ image->width = (pdc_scalar) width;
- TIFFGetField(MYTIFF, TIFFTAG_IMAGELENGTH, &h);
- image->height = (pdc_scalar) h;
+ TIFFGetField(MYTIFF, TIFFTAG_IMAGELENGTH, &height);
+ image->height = (pdc_scalar) height;
TIFFGetFieldDefaulted(MYTIFF, TIFFTAG_BITSPERSAMPLE, &bpc);
image->bpc = bpc;
@@ -465,14 +467,14 @@ pdf_process_TIFF_data(
/* Catch some rare properties related to compression, photometric,
* and bpc which are definitely not supported (neither in pass-through
- * mode nor libtiff) in order to provide a better error message than
+ * mode nor libtiff) in order to provide a better error message than
* the generic "Error reading data".
*/
/* Unsupported compression types */
switch ((int) compression)
{
- case /* 34661 */ COMPRESSION_JBIG:
+ case /* 34661 */ COMPRESSION_JBIG:
case /* 34712 */ COMPRESSION_JP2000:
case 9 /* JBIG T85 */:
case 10 /* TIFF-FX JBIG (T.82) MRC (T.43) */:
@@ -575,7 +577,7 @@ pdf_process_TIFF_data(
if (strips > 25 &&
compression != COMPRESSION_OJPEG && compression != COMPRESSION_JPEG &&
photometric != PHOTOMETRIC_PALETTE &&
- image->width * image->width < PDF_TIFF_THRESHOLD)
+ image->width * image->height < PDF_TIFF_THRESHOLD)
{
image->use_raw = pdc_false;
}
@@ -808,7 +810,7 @@ pdf_process_TIFF_data(
if (planarconfig == PLANARCONFIG_SEPARATE &&
(compression == COMPRESSION_OJPEG || compression==COMPRESSION_JPEG))
{
- errcode = PDF_E_TIFF_UNSUPP_JPEG_SEPARATE;
+ errcode = PDF_E_TIFF_UNSUPP_SEPARATE;
goto PDF_TIFF_ERROR;
}
@@ -835,6 +837,7 @@ pdf_process_TIFF_data(
TIFFGetField(MYTIFF, TIFFTAG_COLORMAP, &rmap, &gmap, &bmap))
{
image->components = 3;
+ image->bpc = 8;
}
pdc_logg_cond(p->pdc, 1, trc_image, "\tno passthrough mode...\n");
}
@@ -928,6 +931,8 @@ pdf_process_TIFF_data(
image->src.init = pdf_data_source_TIFF_init;
image->src.fill = pdf_data_source_TIFF_fill;
image->src.terminate = pdf_data_source_TIFF_terminate;
+ image->in_use = pdc_true; /* mark slot as used */
+ image->src.next_byte = NULL;
if (image->use_raw) {
uint32 row, rowsperstrip;
@@ -945,6 +950,25 @@ pdf_process_TIFF_data(
goto PDF_TIFF_ERROR;
}
+ /* CCITT compression implicitly carries
+ * photometric==PHOTOMETRIC_MINISWHITE. Although the combination
+ * of CCITT compression and palette probably doesn't conform
+ * to the TIFF spec, we accept it, but must invert the color
+ * palette in order to match Acrobat's behavior.
+ * Note that most TIFF viewers either ignore the palette in
+ * this case or display the image with wrong colors.
+ */
+ if (compression == COMPRESSION_CCITTRLE ||
+ compression == COMPRESSION_CCITTRLEW ||
+ compression == COMPRESSION_CCITTFAX3 ||
+ compression == COMPRESSION_CCITTFAX4)
+ {
+ image->invert = !image->invert;
+ pdc_logg_cond(p->pdc, 1, trc_image,
+ "\tinverting colors for CCITT-compressed "
+ "image with palette...\n");
+ }
+
cs.type = Indexed;
cs.val.indexed.palette_size = 1 << bpc;
cs.val.indexed.colormap = &colormap;
@@ -952,7 +976,7 @@ pdf_process_TIFF_data(
cs.val.indexed.base = DeviceRGB;
-#define CVT(x) (uint16) (((x) * 255) / ((1L<<16)-1))
+#define CVT(x) (uint16) ((x)>>8)
/* TODO: properly deal with 16-bit palette entries in PDF 1.5 */
if (pdf_check_colormap(cs.val.indexed.palette_size,
rmap, gmap, bmap) == 16)
@@ -999,7 +1023,8 @@ pdf_process_TIFF_data(
*/
image->info.tiff.cur_line = 0;
image->height = (pdc_scalar)
- (image->rowsperstrip > (int) h ? (int) h : image->rowsperstrip);
+ (image->rowsperstrip > (int) height ?
+ (int) height : image->rowsperstrip);
/*
* Images may also be written to the output before the first page
@@ -1012,10 +1037,10 @@ pdf_process_TIFF_data(
pdf_put_image(p, imageslot, pdc_true, pdc_false);
for (row = (uint32) image->rowsperstrip, strip = 1;
- row < h; row += (uint32) image->rowsperstrip, strip++) {
-
- image->height = (pdc_scalar) (row+image->rowsperstrip > h ?
- (int) (h - row) : image->rowsperstrip);
+ row < height; row += (uint32) image->rowsperstrip, strip++)
+ {
+ image->height = (pdc_scalar) (row+image->rowsperstrip > height ?
+ (int) (height - row) : image->rowsperstrip);
/*
* tell pdf_data_source_TIFF_fill() to read only data of the
@@ -1023,16 +1048,20 @@ pdf_process_TIFF_data(
*/
image->info.tiff.cur_line = strip;
pdf_put_image(p, imageslot, pdc_false, pdc_false);
+ /* Refresh, in case p->images reallocate */
+ image = &p->images[imageslot];
}
- image->height = (pdc_scalar) h;
+ image->height = (pdc_scalar) height;
image->no -= (image->strips - 1); /* number of first strip */
/* Special handling for multi-strip images (see comment above) */
if (PDF_GET_STATE(p) == pdf_state_page)
pdf_begin_contents_section(p);
- } else { /* !use_raw */
+ }
+ else /* !use_raw */
+ {
size_t npixels;
@@ -1056,15 +1085,20 @@ pdf_process_TIFF_data(
image->pixelmode = pdc_true;
}
- if (image->pixelmode)
+ if (planarconfig == PLANARCONFIG_SEPARATE)
{
- npixels = (size_t) (w * h);
+ errcode = PDF_E_TIFF_UNSUPP_SEPARATE;
+ goto PDF_TIFF_ERROR;
+ }
+ else if (image->pixelmode)
+ {
+ npixels = (size_t) (width * height);
image->info.tiff.raster = (uint32 *) pdc_malloc(p->pdc,
(size_t) (npixels * sizeof (uint32)), fn);
if (!TIFFReadRGBAImageOriented(MYTIFF,
- w, h, image->info.tiff.raster, orientation, 1))
+ width, height, image->info.tiff.raster, orientation, 1))
{
errcode = PDC_E_IO_READ;
goto PDF_TIFF_ERROR;
@@ -1072,33 +1106,41 @@ pdf_process_TIFF_data(
}
else
{
- int linecounter = 0;
+ int linecounter = 0, sclsize = TIFFScanlineSize(MYTIFF);
- npixels = (size_t) (TIFFScanlineSize(MYTIFF) * h);
- image->info.tiff.raster = (uint32 *)
- pdc_malloc(p->pdc, (size_t) npixels, fn);
+ npixels = (size_t) (sclsize * height);
+ image->info.tiff.raster = (uint32 *)pdc_malloc(p->pdc, npixels, fn);
- while (linecounter < image->height)
- {
- if (TIFFReadScanline(MYTIFF,
- (tdata_t) (image->info.tiff.raster +
- ((int)image->height - linecounter - 1) * (int)image->width),
- (uint32) linecounter, (tsample_t) 0) == -1)
+ while (linecounter < (int) height)
{
- errcode = PDC_E_IO_READ;
- goto PDF_TIFF_ERROR;
- }
- linecounter++;
- }
- }
+ size_t ndots = (size_t)((height - linecounter - 1) * width);
+
+ if (npixels <= sizeof(uint32) * ndots)
+ {
+ errcode = PDF_E_IMAGE_CORRUPT;
+ goto PDF_TIFF_ERROR;
+ }
+
+ if (TIFFReadScanline(MYTIFF,
+ (tdata_t) (image->info.tiff.raster + ndots),
+ (uint32) linecounter, (tsample_t) 0) == -1)
+ {
+ errcode = PDC_E_IO_READ;
+ goto PDF_TIFF_ERROR;
+ }
+ linecounter++;
+ }
+ }
pdf_put_image(p, imageslot, pdc_true, pdc_true);
- if (image->info.tiff.raster != NULL)
+ if (image->info.tiff.raster != NULL){
pdc_free(p->pdc, (void *) image->info.tiff.raster);
+ image->info.tiff.raster = NULL;
+ }
+
}
- image->in_use = pdc_true; /* mark slot as used */
if (!image->corrupt)
{
@@ -1130,7 +1172,7 @@ pdf_process_TIFF_data(
case PDF_E_IMAGE_COLORMAP:
case PDF_E_IMAGE_BADMASK:
case PDF_E_TIFF_CMYK_MASK:
- case PDF_E_TIFF_UNSUPP_JPEG_SEPARATE:
+ case PDF_E_TIFF_UNSUPP_SEPARATE:
case PDF_E_TIFF_16BITCMYK_UNSUPP:
case PDF_E_TIFF_16BIT_UNSUPP:
pdc_set_errmsg(p->pdc, errcode, stemp, 0, 0, 0);
diff --git a/src/pdflib/pdflib/p_truetype.c b/src/pdflib/pdflib/p_truetype.c
index 80f2f10..c8b8ec3 100644
--- a/src/pdflib/pdflib/p_truetype.c
+++ b/src/pdflib/pdflib/p_truetype.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_truetype.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_truetype.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib TrueType handling routines
*
@@ -248,9 +248,11 @@ pdf_get_metrics_tt(PDF *p, pdf_font *font, const char *fontname,
pdc_logg(p->pdc,
"\tFull font name: \"%s\"\n"
"\tPostScript font name: \"%s\"\n"
- "\tFont embedding: %s\n",
+ "\tFont embedding: %s\n"
+ "\tVertical font: %s\n",
font->ft.name, font->ft.m.name,
- PDC_BOOLSTR(font->opt.embedding));
+ PDC_BOOLSTR(font->opt.embedding),
+ PDC_BOOLSTR(font->ft.vertical));
if (ttf->tab_name->producer != NULL)
pdc_logg(p->pdc, "\tFont producer: \"%s\"\n",
@@ -266,6 +268,7 @@ pdf_get_metrics_tt(PDF *p, pdf_font *font, const char *fontname,
flags = TT_FONT_code2gid | TT_FONT_m_widths;
+
/* Create font mapping and width arrays */
foundglyphs = fnt_set_tt_fontarrays(ttf, flags);
diff --git a/src/pdflib/pdflib/p_type1.c b/src/pdflib/pdflib/p_type1.c
index 8483710..bfdd403 100644
--- a/src/pdflib/pdflib/p_type1.c
+++ b/src/pdflib/pdflib/p_type1.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_type1.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_type1.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib Type1 font handling routines
*
@@ -130,12 +130,10 @@ PFA_data_fill(PDF *p, PDF_data_source *src)
(!pdc_isxdigit(s[i+1]) && !pdc_isspace(s[i+1])))
{
pdc_fclose(t1_private->fontfile);
- pdc_error(p->pdc, PDF_E_FONT_CORRUPT, "PFA", "?", 0, 0);
+ pdc_error(p->pdc, PDF_E_FONT_CORRUPT, "PFA", "", 0, 0);
}
-#ifndef PDFLIB_EBCDIC
s[i/2] = (char) (16*HexToBin[s[i]-'0'] + HexToBin[s[i+1]-'0']);
-#else
-#endif
+
src->bytes_available++;
}
t1_private->length[2] += src->bytes_available;
@@ -186,13 +184,19 @@ pdf_read_pfb_segment(PDF *p, PDF_data_source *src, t1_private_data *t1, int i)
length |= (size_t) (pdf_t1getc(t1) & 0xff) << 16;
length |= (size_t) (pdf_t1getc(t1) & 0xff) << 24;
+ pdc_logg_cond(p->pdc, 5, trc_font,
+ " and length x%04X", length);
+
if (src->buffer_start)
pdc_free(p->pdc, (void *) src->buffer_start);
src->buffer_start = (pdc_byte *) pdc_malloc(p->pdc, length, fn);
- if (t1->fontfile) {
+ if (t1->fontfile)
+ {
len = pdc_fread(src->buffer_start, 1, length, t1->fontfile);
- } else {
+ }
+ else
+ {
len = length;
if (t1->pos + len > t1->end)
len = (unsigned int)(t1->end - t1->pos);
@@ -204,54 +208,61 @@ pdf_read_pfb_segment(PDF *p, PDF_data_source *src, t1_private_data *t1, int i)
src->next_byte = src->buffer_start;
src->bytes_available = len;
- return (len != length) ? pdc_true : pdc_false;;
+ return (len != length) ? pdc_false : pdc_true;
}
-static int
+static pdc_bool
PFB_data_fill(PDF *p, PDF_data_source *src)
{
- t1_private_data *t1;
- unsigned char c, type;
- pdc_bool err = pdc_false;
+ pdc_bool logg = pdc_logg_is_enabled(p->pdc, 5, trc_font);
+ t1_private_data *t1 = (t1_private_data *) src->private_data;
+ pdc_bool succ = pdc_false;
+ pdc_byte c, type;
+ int i;
- t1 = (t1_private_data *) src->private_data;
+ c = (pdc_byte) pdf_t1getc(t1);
- c = (unsigned char) pdf_t1getc(t1);
- type = (unsigned char) pdf_t1getc(t1);
+ if (c == PFB_MARKER)
+ {
+ type = (pdc_byte) pdf_t1getc(t1);
- if (t1->length[1] == (size_t) 0) {
- if (c != PFB_MARKER || type != PFB_ASCII) {
- err = pdc_true;
- } else {
- err = pdf_read_pfb_segment(p, src, t1, 1);
- }
+ if (logg)
+ pdc_logg(p->pdc, "\t\t\treading segment of type x%02X", type);
- } else if (t1->length[2] == (size_t) 0) {
- if (c != PFB_MARKER || type != PFB_BINARY) {
- err = pdc_true;
- } else {
- err = pdf_read_pfb_segment(p, src, t1, 2);
+ for (i = 1; i < 4; i++)
+ {
+ if (t1->length[i] == (size_t) 0)
+ {
+ succ = pdf_read_pfb_segment(p, src, t1, i);
+ break;
+ }
}
- } else if (t1->length[3] == 0) {
- if (c != PFB_MARKER || type != PFB_ASCII) {
- err = pdc_true;
- } else {
- err = pdf_read_pfb_segment(p, src, t1, 3);
+ if (i < 4)
+ {
+ if (succ)
+ {
+ if (logg)
+ pdc_logg(p->pdc, " successful\n");
+ return pdc_true;
+ }
+ }
+ else
+ {
+ if (logg)
+ pdc_logg(p->pdc, " (EOF)\n");
+ return pdc_false;
}
- } else if (c != PFB_MARKER || type != PFB_EOF) {
- err = pdc_true;
- } else {
- return pdc_false;
}
- if (err) {
- if (t1->fontfile)
- pdc_fclose(t1->fontfile);
- pdc_error(p->pdc, PDF_E_FONT_CORRUPT, "PFB", "?", 0, 0);
- }
+ if (logg)
+ pdc_logg(p->pdc, " unsuccessful\n");
- return pdc_true;
+ if (t1->fontfile)
+ pdc_fclose(t1->fontfile);
+ pdc_error(p->pdc, PDF_E_FONT_CORRUPT, "PFB", "", 0, 0);
+
+ return pdc_false;
}
static void
@@ -286,25 +297,32 @@ pdf_t1open_fontfile(PDF *p, pdf_font *font, const char *filename,
t1_private_data *t1_private = NULL;
pdc_file *fp = NULL;
const char *stemp = NULL;
- unsigned char magic[PFA_TESTBYTE];
+ pdc_byte magic[PFA_TESTBYTE];
char fullname[PDC_FILENAMELEN];
int fflags = PDC_FILE_BINARY;
- int ispfb = pdc_true;
+ pdc_bool ispfb = pdc_true;
if (filename)
{
+ pdc_bool retval = pdc_true;
+ pdc_bool fnamegiven = (strcmp(filename, FNT_MISSING_FILENAME) == 0) ?
+ pdc_false : pdc_true;
+ (void) retval;
- fp = pdc_fsearch_fopen(p->pdc, filename, fullname, "PostScript Type1 ",
- fflags);
- if (fp == NULL)
+ if (fnamegiven)
{
- if (t1src)
- pdc_error(p->pdc, -1, 0, 0, 0, 0);
- return pdc_check_fopen_errmsg(p->pdc, requested);
- }
+ fp = pdc_fsearch_fopen(p->pdc, filename, fullname,
+ "PostScript Type1 ", fflags);
+ if (fp == NULL)
+ {
+ if (t1src)
+ PDC_RETHROW(p->pdc);
+ return pdc_check_fopen_errmsg(p->pdc, requested);
+ }
- pdc_logg_cond(p->pdc, 1, trc_font,
- "\tLoading PostScript Type1 fontfile \"%s\":\n", fullname);
+ pdc_logg_cond(p->pdc, 1, trc_font,
+ "\tLoading PostScript Type1 fontfile \"%s\":\n", fullname);
+ }
}
@@ -332,7 +350,7 @@ pdf_t1open_fontfile(PDF *p, pdf_font *font, const char *filename,
pdc_fclose(fp);
pdc_set_errmsg(p->pdc, PDF_E_T1_NOFONT, stemp, 0, 0, 0);
if (t1src)
- pdc_error(p->pdc, -1, 0, 0, 0, 0);
+ PDC_RETHROW(p->pdc);
return pdc_false;
}
ispfb = pdc_false;
@@ -364,7 +382,7 @@ pdf_t1open_fontfile(PDF *p, pdf_font *font, const char *filename,
}
if (t1_private->fontfile == NULL)
- pdc_error(p->pdc, -1, 0, 0, 0, 0);
+ PDC_RETHROW(p->pdc);
}
else if (font->ft.img)
{
diff --git a/src/pdflib/pdflib/p_type3.c b/src/pdflib/pdflib/p_type3.c
index c177443..d31592f 100644
--- a/src/pdflib/pdflib/p_type3.c
+++ b/src/pdflib/pdflib/p_type3.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_type3.c,v 1.2 2009/06/23 03:18:34 scuri Exp $
+/* $Id: p_type3.c,v 1.3 2009/10/20 18:14:16 scuri Exp $
*
* Routines for Type 3 (user-defined) fonts
*
@@ -147,6 +147,7 @@ pdf_handle_t3font(PDF *p, const char *fontname, pdc_encoding enc,
/* copy data from available font (see pdf__begin_font()) */
font->ft.m.type = fnt_Type3;
font->ft.matrix = deffont->ft.matrix;
+ font->ft.bbox = deffont->ft.bbox;
font->t3font = deffont->t3font;
font->ft.numglyphs = deffont->t3font->next_glyph;
nalloc = (size_t) font->ft.numglyphs;
@@ -321,7 +322,6 @@ pdf__begin_font(
const char *optlist)
{
static const char fn[] = "pdf__begin_font";
- char *fname;
pdc_resopt *results;
pdf_font tmpfont, *font;
pdf_font_options fo;
@@ -335,11 +335,10 @@ pdf__begin_font(
pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "fontname", 0, 0, 0);
/* Converting fontname */
- fname = pdf_convert_name(p, fontname, len, PDC_CONV_WITHBOM);
- if (fname == NULL || *fname == '\0')
+ fontname = pdf_convert_name(p, fontname, len,
+ PDC_CONV_WITHBOM | PDC_CONV_TMPALLOC);
+ if (fontname == NULL || *fontname == '\0')
pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "fontname", 0, 0, 0);
- fontname = pdc_errprintf(p->pdc, "%.*s", PDC_ERR_MAXSTRLEN, fname);
- pdc_free(p->pdc, fname);
pdc_logg_cond(p->pdc, 1, trc_font,
"\tBegin of Type3 font \"%s\"\n", fontname);
@@ -633,7 +632,7 @@ pdf__begin_glyph(
/* see comment in p_font.c for explanation */
glyph->width = 1000 * wx * font->ft.matrix.a;
- /* if the pdc_strdup above fails, cleanup won't touch this slot. */
+ /* if the strdup above fails, cleanup won't touch this slot. */
t3font->next_glyph++;
}
glyph->pass = t3font->pass;
@@ -692,7 +691,7 @@ pdf__begin_glyph(
}
else
{
- PDF_SET_STATE(p, pdf_state_glyphmetric);
+ PDF_SET_STATE(p, pdf_state_glyphmetrics);
}
pdc_pop_errmsg(p->pdc);
diff --git a/src/pdflib/pdflib/p_util.c b/src/pdflib/pdflib/p_util.c
index 2728236..8b3f5e6 100644
--- a/src/pdflib/pdflib/p_util.c
+++ b/src/pdflib/pdflib/p_util.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_util.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_util.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib utility functions
*
@@ -320,6 +320,9 @@ pdf_convert_hypertext(PDF *p, const char *text, int len,
/* conversion to UTF-16-BE or PDFDocEncoding / EBCDIC */
pdf_set_convertflags(p, &convflags);
+ if (pdc_logg_is_enabled(p->pdc, 3, trc_text))
+ convflags |= PDC_CONV_LOGGING;
+
pdc_convert_string(p->pdc, hypertextformat, codepage, inev,
intext, len,
&textformat, outev, &outtext, outlen,
@@ -332,9 +335,13 @@ pdf_convert_hypertext(PDF *p, const char *text, int len,
pdc_text_format outtextformat = PDC_UTF8;
pdc_byte *newtext = NULL;
+ convflags = PDC_CONV_WITHBOM;
+ if (pdc_logg_is_enabled(p->pdc, 3, trc_text))
+ convflags |= PDC_CONV_LOGGING;
+
pdc_convert_string(p->pdc, textformat, 0, NULL, outtext, *outlen,
&outtextformat, NULL, &newtext, outlen,
- PDC_CONV_WITHBOM, verbose);
+ convflags, verbose);
pdc_free(p->pdc, outtext);
outtext = newtext;
}
@@ -346,61 +353,101 @@ pdf_convert_hypertext(PDF *p, const char *text, int len,
/*
* Conversion from [EBCDIC-]UTF-8 to UTF-16 and from EBCDIC to PDFDoc
*/
-static void
-pdf_put_hypertext_ext(PDF *p, const char *text, pdc_bool isfilename)
+
+char *
+pdf_convert_pdfstring(PDF *p, const char *text, int inlen, int convflags,
+ int *outlen)
{
pdc_byte *newtext = NULL;
- pdc_encodingvector *outev = pdc_get_encoding_vector(p->pdc, pdc_pdfdoc);
- int len = (int) pdc_strlen(text);
- int convflags = PDC_CONV_WITHBOM | PDC_CONV_TRYBYTES;
if (pdc_is_utf8_bytecode(text))
{
pdc_text_format textformat = PDC_UTF8;
pdc_text_format outtextformat = pdc_utf16be;
+ pdc_encodingvector *outev = pdc_get_encoding_vector(p->pdc, pdc_pdfdoc);
pdf_set_convertflags(p, &convflags);
- pdc_convert_string(p->pdc, textformat, 0, NULL, (pdc_byte *) text, len,
- &outtextformat, outev, &newtext, &len,
- convflags, pdc_true);
- text = (const char *) newtext;
- }
- if (isfilename)
- {
- if (pdc_is_utf16be_unicode(text))
- pdc_error(p->pdc, PDC_E_IO_UNSUPP_UNINAME, 0, 0, 0, 0);
- pdc_put_pdffilename(p->out, text, len);
+ pdc_convert_string(p->pdc, textformat, 0, NULL,
+ (pdc_byte *) text, inlen,
+ &outtextformat, outev, &newtext, outlen,
+ convflags, pdc_true);
}
else
{
- pdc_put_pdfstring(p->out, text, len);
+ newtext = (pdc_byte *) text;
+ *outlen = inlen;
}
- if (newtext != NULL)
- pdc_free(p->pdc, newtext);
+ return (char *) newtext;
}
void
pdf_put_hypertext(PDF *p, const char *text)
{
- pdf_put_hypertext_ext(p, text, pdc_false);
+ int convflags = PDC_CONV_WITHBOM | PDC_CONV_TRYBYTES;
+ int inlen = (int) pdc_strlen(text);
+ int outlen;
+
+ char *newtext = pdf_convert_pdfstring(p, text, inlen, convflags, &outlen);
+
+ pdc_put_pdfstring(p->out, newtext, outlen);
+
+ if (newtext != text)
+ pdc_free(p->pdc, newtext);
}
void
pdf_put_pdffilename(PDF *p, const char *text)
{
- pdf_put_hypertext_ext(p, text, pdc_true);
+ int convflags = PDC_CONV_FILENAME | PDC_CONV_TRYBYTES;
+ int inlen = (int) pdc_strlen(text);
+ int outlen;
+
+ char *newtext = pdf_convert_pdfstring(p, text, inlen, convflags, &outlen);
+
+ pdc_put_pdffilename(p->out, newtext, outlen);
+
+ if (newtext != text)
+ pdc_free(p->pdc, newtext);
+}
+
+void
+pdf_put_pdfunifilename(PDF *p, const char *text)
+{
+ int convflags = PDC_CONV_WITHBOM | PDC_CONV_TRYBYTES;
+ int inlen = (int) pdc_strlen(text);
+ int outlen;
+
+ char *newtext = pdf_convert_pdfstring(p, text, inlen, convflags, &outlen);
+
+ pdc_put_pdffilename(p->out, newtext, outlen);
+
+ if (newtext != text)
+ pdc_free(p->pdc, newtext);
}
/* ------------------------ name strings -------------------------------*/
static void
-pdf_prepare_name_string(PDF *p, const char *name, int len,
+pdf_prepare_name_string(PDF *p, const char *name, int len, int maxlen,
char **newname, int *newlen,
pdc_encoding *htenc, int *htcp)
{
+ if (name == NULL)
+ {
+ len = 0;
+ name = "";
+ }
+
+ if (len < 0 || len > maxlen)
+ {
+ pdc_error(p->pdc, PDC_E_ILLARG_STRINGLEN,
+ pdc_errprintf(p->pdc, "%d", len),
+ pdc_errprintf(p->pdc, "%d", PDC_SHRT_MAX), 0, 0);
+ }
+
*newname = (char *) name;
*newlen = len;
*htenc = pdc_invalidenc;
@@ -422,9 +469,13 @@ pdf_convert_name(PDF *p, const char *name, int len, int flags)
pdc_encoding htenc;
int htcp;
- pdf_prepare_name_string(p, name, len, &newname, &newlen, &htenc, &htcp);
+ pdf_prepare_name_string(p, name, len, PDC_SHRT_MAX,
+ &newname, &newlen, &htenc, &htcp);
flags |= PDC_CONV_EBCDIC;
+ if (pdc_logg_is_enabled(p->pdc, 3, trc_text))
+ flags |= PDC_CONV_LOGGING;
+
resname = pdc_convert_name_ext(p->pdc, newname, newlen, htenc, htcp, flags);
if (newname != name)
pdc_free(p->pdc, newname);
@@ -442,10 +493,13 @@ pdf_convert_filename(PDF *p, const char *filename, int len,
pdc_encoding htenc;
int htcp;
- pdf_prepare_name_string(p, filename, len, &newfilename, &newlen,
- &htenc, &htcp);
+ pdf_prepare_name_string(p, filename, len, PDC_FILENAMELEN - 1,
+ &newfilename, &newlen, &htenc, &htcp);
flags |= PDC_CONV_EBCDIC;
+ if (pdc_logg_is_enabled(p->pdc, 3, trc_text))
+ flags |= PDC_CONV_LOGGING;
+
resfilename = pdc_convert_filename_ext(p->pdc, newfilename, len,
paramname, htenc, htcp, flags);
if (newfilename != filename)
@@ -455,15 +509,15 @@ pdf_convert_filename(PDF *p, const char *filename, int len,
}
void
-pdf_add_resource(PDF *p, const char *category, const char *resname)
+pdf_add_pdflib_resource(PDF *p, const char *category, const char *resname)
{
char *newresname;
int newlen;
pdc_encoding htenc;
int htcp;
- pdf_prepare_name_string(p, resname, 0, &newresname, &newlen,
- &htenc, &htcp);
+ pdf_prepare_name_string(p, resname, 0, PDC_FILENAMELEN,
+ &newresname, &newlen, &htenc, &htcp);
if (newlen)
{
char *tmpresname = pdc_utf16_to_utf8(p->pdc, newresname, newlen,
@@ -496,8 +550,10 @@ pdf_get_opt_textlist(PDF *p, const char *keyword, pdc_resopt *resopts,
{
pdc_byte *string = NULL;
pdc_encodingvector *inev = NULL, *outev = NULL;
- pdc_text_format intextformat = pdc_bytes, outtextformat = pdc_utf16be;
- int convflags = PDC_CONV_WITHBOM | PDC_CONV_TRYBYTES;
+ pdc_text_format intextformat = pdc_bytes;
+ pdc_text_format outtextformat = pdc_utf16be;
+ pdc_text_format textformat;
+ int convflags = PDC_CONV_WITHBOM;
pdc_bool isutf8;
int i, outlen;
@@ -517,8 +573,10 @@ pdf_get_opt_textlist(PDF *p, const char *keyword, pdc_resopt *resopts,
inev = pdc_get_encoding_vector(p->pdc, enc);
}
- /* PDFDocEncoding */
outev = pdc_get_encoding_vector(p->pdc, pdc_pdfdoc);
+
+ /* conversion to PDFDocEncoding if possible */
+ convflags |= PDC_CONV_TRYBYTES;
}
else
{
@@ -531,9 +589,10 @@ pdf_get_opt_textlist(PDF *p, const char *keyword, pdc_resopt *resopts,
}
return 0;
}
- else if (enc >= 0)
+ else if (enc >= 0 && !isutf8)
{
- outev = pdc_get_encoding_vector(p->pdc, enc);
+ /* bug #2069: always conversion to UTF-16BE */
+ inev = pdc_get_encoding_vector(p->pdc, enc);
}
}
@@ -556,16 +615,17 @@ pdf_get_opt_textlist(PDF *p, const char *keyword, pdc_resopt *resopts,
string = (pdc_byte *) strlist[i];
{
- if (ishypertext || isutf8)
+ if (ishypertext || isutf8 || inev != NULL)
{
intextformat = isutf8 ? PDC_UTF8 : pdc_bytes;
- if (pdc_logg_is_enabled(p->pdc, 2, trc_optlist))
+ if (pdc_logg_is_enabled(p->pdc, 3, trc_text))
convflags |= PDC_CONV_LOGGING;
pdf_set_convertflags(p, &convflags);
+ textformat = outtextformat;
pdc_convert_string(p->pdc, intextformat, codepage, inev,
string, (int) strlen((char *) string),
- &outtextformat, outev, &string, &outlen,
+ &textformat, outev, &string, &outlen,
convflags, pdc_true);
pdc_free(p->pdc, strlist[i]);
strlist[i] = (char *) string;
@@ -589,6 +649,98 @@ pdf_get_opt_textlist(PDF *p, const char *keyword, pdc_resopt *resopts,
}
char *
+pdf_get_opt_filename(PDF *p, const char *keyword, pdc_resopt *resopts,
+ pdc_encoding enc, int codepage)
+{
+ pdc_bool logg1 = pdc_logg_is_enabled(p->pdc, 1, trc_optlist);
+ pdc_bool logg3 = pdc_logg_is_enabled(p->pdc, 3, trc_text);
+ pdc_byte *filename = NULL;
+ char **strlist;
+
+ if (pdc_get_optvalues(keyword, resopts, NULL, &strlist))
+ {
+ pdc_encodingvector *inev = NULL, *outev = NULL;
+ pdc_text_format intextformat = pdc_bytes;
+ pdc_text_format outtextformat = pdc_utf16; /* sic! */
+ int convflags = PDC_CONV_NOBOM | PDC_CONV_TRYBYTES | PDC_CONV_NEWALLOC;
+ pdc_bool isutf8;
+ int ic, outlen;
+
+ /* whole option list or string list is in UTF-8 */
+ isutf8 = pdc_is_lastopt_utf8(resopts);
+
+ if (!isutf8)
+ {
+ if (enc < 0 && enc != pdc_unicode && enc != pdc_cid)
+ enc = pdf_get_hypertextencoding(p, "auto", &codepage,
+ pdc_true);
+ if (enc >= 0)
+ inev = pdc_get_encoding_vector(p->pdc, enc);
+ }
+ else
+ {
+ intextformat = PDC_UTF8;
+ }
+
+ if (logg1)
+ {
+ if (isutf8)
+ {
+ pdc_logg(p->pdc, "\tOption \"%s\" is "PDC_UTF8_STRG" encoded\n",
+ keyword);
+ }
+ else
+ {
+ pdc_logg(p->pdc, "\tOption \"%s\" is %s encoded\n",
+ keyword, pdc_get_user_encoding(p->pdc, enc));
+ }
+ }
+
+ outev = pdc_get_encoding_vector(p->pdc, pdc_winansi);
+
+ if (logg3)
+ convflags |= PDC_CONV_LOGGING;
+ pdf_set_convertflags(p, &convflags);
+
+ pdc_convert_string(p->pdc, intextformat, codepage, inev,
+ (pdc_byte *) strlist[0], (int) strlen(strlist[0]),
+ &outtextformat, outev, &filename, &outlen,
+ convflags, pdc_true);
+
+ if (outtextformat == pdc_utf16)
+ {
+ pdc_ushort uv, *unifilename = (pdc_ushort *) filename;
+ int code;
+
+ if (p->compatibility < PDC_1_7)
+ pdc_error(p->pdc, PDC_E_IO_UNSUPP_PDFUNINAME, 0, 0, 0, 0);
+
+ /* we must replace non-WinAnsi characters by period
+ * and omit the BOM to get a WinAnsi string.
+ */
+ outlen /= 2;
+ for (ic = 0; ic < outlen; ic++)
+ {
+ uv = unifilename[ic];
+
+ code = pdc_get_encoding_bytecode(p->pdc, outev, uv);
+ if (code <= 0)
+ uv = PDC_UNICODE_PERIOD;
+
+ filename[ic] = (char) uv;
+ }
+ filename[ic] = 0;
+ }
+
+ if (logg3)
+ pdc_logg_hexdump(p->pdc, "output filename", "\t\t",
+ (char *) filename, strlen((char *) filename));
+ }
+
+ return (char *) filename;
+}
+
+char *
pdf_get_opt_utf8name(PDF *p, const char *keyword, pdc_resopt *resopts)
{
char **strlist = NULL;
@@ -623,9 +775,10 @@ pdf_get_errorpolicy(PDF *p, pdc_resopt *resopts, pdc_bool verbose)
/* -------------------------- handle check -------------------------------*/
-void
-pdf_check_handle(PDF *p, int handle, pdc_opttype type)
+int
+pdf_check_opt_handle(void *opaque, int handle, pdc_opttype type)
{
+ PDF *p = (PDF*)opaque;
int minval = 0, maxval = 0;
pdc_bool empty = pdc_false;
@@ -701,13 +854,23 @@ pdf_check_handle(PDF *p, int handle, pdc_opttype type)
}
if (handle < minval || handle > maxval || empty)
+ return PDC_E_ILLARG_HANDLE;
+
+ return 0;
+}
+
+void
+pdf_check_handle(PDF *p, int handle, pdc_opttype type)
+{
+ if (pdf_check_opt_handle(p, handle, type))
{
- const char *stemp1 = pdc_errprintf(p->pdc, "%.*s", PDC_ERR_MAXSTRLEN,
- pdc_get_handletype(type));
- const char *stemp2 = pdc_errprintf(p->pdc, "%d",
- (p->pdc->hastobepos && type != pdc_stringhandle) ?
- handle + 1 : handle);
- pdc_error(p->pdc, PDC_E_ILLARG_HANDLE, stemp1, stemp2, 0, 0);
+ if (p->pdc->hastobepos && type != pdc_stringhandle)
+ handle++;
+
+ pdc_error(p->pdc, PDC_E_ILLARG_HANDLE,
+ pdc_errprintf(p->pdc, "%.*s", PDC_ERR_MAXSTRLEN,
+ pdc_get_handletype(type)),
+ pdc_errprintf(p->pdc, "%d", handle), 0, 0);
}
}
diff --git a/src/pdflib/pdflib/p_xgstate.c b/src/pdflib/pdflib/p_xgstate.c
index 0e62df9..32acf55 100644
--- a/src/pdflib/pdflib/p_xgstate.c
+++ b/src/pdflib/pdflib/p_xgstate.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_xgstate.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_xgstate.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* Extended graphics state handling
*
@@ -234,13 +234,12 @@ void
pdf_write_page_extgstates(PDF *p)
{
int i, total = 0;
- int bias = p->curr_ppt->eg_bias;
for (i = 0; i < p->extgstates_number; i++)
if (p->extgstates[i].used_on_current_page)
total++;
- if (total > 0 || bias)
+ if (total > 0)
{
pdc_puts(p->out, "/ExtGState");
pdc_begin_dict(p->out);
@@ -253,12 +252,11 @@ pdf_write_page_extgstates(PDF *p)
if (p->extgstates[i].used_on_current_page)
{
p->extgstates[i].used_on_current_page = pdc_false; /* reset */
- pdc_printf(p->out, "/GS%d", bias + i);
+ pdc_printf(p->out, "/GS%d", i);
pdc_objref(p->out, "", p->extgstates[i].obj_id);
}
}
- if (!bias)
pdc_end_dict(p->out);
}
}
@@ -505,10 +503,14 @@ pdf__create_gstate(PDF *p, const char *optlist)
void
pdf__set_gstate(PDF *p, int gstate)
{
- int bias = p->curr_ppt->eg_bias;
+ pdf_extgstateresource *gs;
pdf_check_handle(p, gstate, pdc_gstatehandle);
- pdc_printf(p->out, "/GS%d gs\n", bias + gstate);
+ pdc_printf(p->out, "/GS%d gs\n", gstate);
p->extgstates[gstate].used_on_current_page = pdc_true;
+
+ gs = &p->extgstates[gstate];
+ if (gs->opacity_fill != pdc_undef || gs->opacity_stroke != pdc_undef)
+ pdf_set_autotgroup(p, pdc_true);
}
diff --git a/src/pdflib/pdflib/p_xmp.c b/src/pdflib/pdflib/p_xmp.c
index eec4002..5db2615 100644
--- a/src/pdflib/pdflib/p_xmp.c
+++ b/src/pdflib/pdflib/p_xmp.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: p_xmp.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: p_xmp.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib Metadata (XMP) related routines
*
@@ -23,3 +23,8 @@
+
+
+
+
+
diff --git a/src/pdflib/pdflib/pdflib.c b/src/pdflib/pdflib/pdflib.c
index 7ecd1f3..c369abe 100644
--- a/src/pdflib/pdflib/pdflib.c
+++ b/src/pdflib/pdflib/pdflib.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: pdflib.c,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: pdflib.c,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* PDFlib API functions
*
@@ -330,6 +330,21 @@ pdf_exit_handle_api(PDF *p, int retval)
return retval;
}
+static void
+pdf_logg_is_deprecated(PDF *p, const char *fn, int version)
+{
+ pdc_logg_cond(p->pdc, 2, trc_api,
+ "[Function \"%s\" is deprecated since PDFlib %d]\n",
+ fn, version);
+}
+
+static void
+pdf_logg_is_unsupported(PDF *p, const char *fn)
+{
+ pdc_logg_cond(p->pdc, 2, trc_api,
+ "[Function \"%s\" is unsupported]\n", fn);
+}
+
/***************************
*
@@ -628,6 +643,8 @@ PDF_attach_file(
int len_descr = description ? (int) pdc_strlen(description) : 0;
int len_auth = author ? (int) pdc_strlen(author) : 0;
+ pdf_logg_is_deprecated(p, fn, 6);
+
pdf__attach_file(p, llx, lly, urx, ury, filename, 0,
description, len_descr, author, len_auth, mimetype, icon);
@@ -659,6 +676,8 @@ PDF_attach_file2(
author, len_auth, len_auth,
mimetype, icon))
{
+ pdf_logg_is_deprecated(p, fn, 6);
+
pdf__attach_file(p, llx, lly, urx, ury, filename, len_filename,
description, len_descr, author, len_auth, mimetype, icon);
@@ -688,6 +707,8 @@ PDF_add_note(
int len_cont = contents ? (int) pdc_strlen(contents) : 0;
int len_title = title ? (int) pdc_strlen(title) : 0;
+ pdf_logg_is_deprecated(p, fn, 6);
+
pdf__add_note(p, llx, lly, urx, ury, contents, len_cont,
title, len_title, icon, open);
@@ -715,6 +736,8 @@ PDF_add_note2(
(void *) p, llx, lly, urx, ury, contents, len_cont, len_cont,
title, len_title, len_title, icon, open))
{
+ pdf_logg_is_deprecated(p, fn, 6);
+
pdf__add_note(p, llx, lly, urx, ury, contents, len_cont,
title, len_title, icon, open);
@@ -723,67 +746,73 @@ PDF_add_note2(
}
PDFLIB_API void PDFLIB_CALL
-PDF_add_pdflink(
+PDF_add_launchlink(
PDF *p,
double llx,
double lly,
double urx,
double ury,
- const char *filename,
- int page,
- const char *optlist)
+ const char *filename)
{
- static const char fn[] = "PDF_add_pdflink";
+ static const char fn[] = "PDF_add_launchlink";
if (pdf_enter_api(p, fn, pdf_state_page,
- "(p_%p, %f, %f, %f, %f, \"%s\", %d, \"%T\")\n",
- (void *) p, llx, lly, urx, ury, filename, page,
- optlist, 0))
+ "(p_%p, %f, %f, %f, %f, \"%s\")\n",
+ (void *)p, llx, lly, urx, ury, filename))
{
- pdf__add_pdflink(p, llx, lly, urx, ury, filename, page, optlist);
+ pdf_logg_is_deprecated(p, fn, 6);
+
+ pdf__add_launchlink(p, llx, lly, urx, ury, filename);
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
}
}
PDFLIB_API void PDFLIB_CALL
-PDF_add_launchlink(
+PDF_add_locallink(
PDF *p,
double llx,
double lly,
double urx,
double ury,
- const char *filename)
+ int page,
+ const char *optlist)
{
- static const char fn[] = "PDF_add_launchlink";
+ static const char fn[] = "PDF_add_locallink";
if (pdf_enter_api(p, fn, pdf_state_page,
- "(p_%p, %f, %f, %f, %f, \"%s\")\n",
- (void *)p, llx, lly, urx, ury, filename))
+ "(p_%p, %f, %f, %f, %f, %d, \"%T\")\n",
+ (void *) p, llx, lly, urx, ury, page, optlist, 0))
{
- pdf__add_launchlink(p, llx, lly, urx, ury, filename);
+ pdf_logg_is_deprecated(p, fn, 6);
+
+ pdf__add_locallink(p, llx, lly, urx, ury, page, optlist);
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
}
}
PDFLIB_API void PDFLIB_CALL
-PDF_add_locallink(
+PDF_add_pdflink(
PDF *p,
double llx,
double lly,
double urx,
double ury,
+ const char *filename,
int page,
const char *optlist)
{
- static const char fn[] = "PDF_add_locallink";
+ static const char fn[] = "PDF_add_pdflink";
if (pdf_enter_api(p, fn, pdf_state_page,
- "(p_%p, %f, %f, %f, %f, %d, \"%T\")\n",
- (void *) p, llx, lly, urx, ury, page, optlist, 0))
+ "(p_%p, %f, %f, %f, %f, \"%s\", %d, \"%T\")\n",
+ (void *) p, llx, lly, urx, ury, filename, page,
+ optlist, 0))
{
- pdf__add_locallink(p, llx, lly, urx, ury, page, optlist);
+ pdf_logg_is_deprecated(p, fn, 6);
+
+ pdf__add_pdflink(p, llx, lly, urx, ury, filename, page, optlist);
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
}
@@ -804,6 +833,8 @@ PDF_add_weblink(
"(p_%p, %f, %f, %f, %f, \"%s\")\n",
(void *) p, llx, lly, urx, ury, url))
{
+ pdf_logg_is_deprecated(p, fn, 6);
+
pdf__add_weblink(p, llx, lly, urx, ury, url);
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
@@ -845,6 +876,8 @@ PDF_set_border_color(
(pdf_state) (pdf_state_document | pdf_state_page),
"(p_%p, %f, %f, %f)\n", (void *) p, red, green, blue))
{
+ pdf_logg_is_deprecated(p, fn, 6);
+
pdf__set_border_color(p, red, green, blue);
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
@@ -863,6 +896,8 @@ PDF_set_border_dash(
(pdf_state) (pdf_state_document | pdf_state_page),
"(p_%p, %f, %f)\n", (void *) p, b, w))
{
+ pdf_logg_is_deprecated(p, fn, 6);
+
pdf__set_border_dash(p, b, w);
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
@@ -881,6 +916,8 @@ PDF_set_border_style(
(pdf_state) (pdf_state_document | pdf_state_page),
"(p_%p, \"%s\", %f)\n", (void *) p, style, width))
{
+ pdf_logg_is_deprecated(p, fn, 6);
+
pdf__set_border_style(p, style, width);
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
@@ -1020,6 +1057,8 @@ PDF_setgray(PDF *p, double g)
if (pdf_enter_api(p, fn, pdf_state_content, "(p_%p, %f)\n",
(void *) p, g))
{
+ pdf_logg_is_deprecated(p, fn, 5);
+
pdf__setcolor(p, "fillstroke", "gray", g, 0, 0, 0);
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
@@ -1034,6 +1073,8 @@ PDF_setgray_fill(PDF *p, double gray)
if (pdf_enter_api(p, fn, pdf_state_content, "(p_%p, %f)\n",
(void *) p, gray))
{
+ pdf_logg_is_deprecated(p, fn, 5);
+
pdf__setcolor(p, "fill", "gray", gray, 0, 0, 0);
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
@@ -1048,6 +1089,8 @@ PDF_setgray_stroke(PDF *p, double gray)
if (pdf_enter_api(p, fn, pdf_state_content, "(p_%p, %f)\n",
(void *) p, gray))
{
+ pdf_logg_is_deprecated(p, fn, 5);
+
pdf__setcolor(p, "stroke", "gray", gray, 0, 0, 0);
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
@@ -1062,6 +1105,8 @@ PDF_setrgbcolor(PDF *p, double r, double g, double b)
if (pdf_enter_api(p, fn, pdf_state_content, "(p_%p, %f, %f, %f)\n",
(void *) p, r, g, b))
{
+ pdf_logg_is_deprecated(p, fn, 5);
+
pdf__setcolor(p, "fillstroke", "rgb", r, g, b, 0);
pdc_logg_exit_api(p->pdc, pdc_false, NULL);
@@ -1076,6 +1121,8 @@ PDF_setrgbcolor_fill(PDF *p, double r, double g, double b)
if (pdf_enter_api(p, fn, pdf_state_content, "(p_%p, %f, %f, %f)\n",
(void *) p, r, g, b))
{
+ pdf_logg_is_deprecated(p, fn, 5);
+
pdf__setcolor(p, "fill", "rgb", r, g, b, 0);
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
@@ -1090,6 +1137,8 @@ PDF_setrgbcolor_stroke(PDF *p, double r, double g, double b)
if (pdf_enter_api(p, fn, pdf_state_content, "(p_%p, %f, %f, %f)\n",
(void *) p, r, g, b))
{
+ pdf_logg_is_deprecated(p, fn, 5);
+
pdf__setcolor(p, "stroke", "rgb", r, g, b, 0);
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
@@ -1151,6 +1200,8 @@ PDF_close(PDF *p)
if (pdf_enter_api(p, fn, pdf_state_document,
"(p_%p)\n", (void *) p))
{
+ pdf_logg_is_deprecated(p, fn, 6);
+
pdf__end_document(p, "");
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
@@ -1204,6 +1255,8 @@ PDF_open_file(PDF *p, const char *filename)
if (pdf_enter_api(p, fn, pdf_state_object, "(p_%p, \"%s\")\n",
(void *) p, filename))
{
+ pdf_logg_is_deprecated(p, fn, 6);
+
retval = pdf__begin_document(p, filename, 0, "");
}
@@ -1221,6 +1274,8 @@ PDF_open_mem(
if (pdf_enter_api(p, fn, pdf_state_object,
"(p_%p, wp_%p)\n", (void *) p, (void *) writeproc))
{
+ pdf_logg_is_deprecated(p, fn, 6);
+
pdf__begin_document_callback(p, writeproc, "");
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
@@ -1425,6 +1480,8 @@ PDF_rcurveto(PDF *p,
"(p_%p, %f, %f, %f, %f, %f, %f)\n",
(void *) p, x_1, y_1, x_2, y_2, x_3, y_3))
{
+ pdf_logg_is_unsupported(p, fn);
+
pdf__rcurveto(p, x_1, y_1, x_2, y_2, x_3, y_3);
pdc_logg_exit_api(p->pdc, pdc_false, NULL);
@@ -1454,6 +1511,8 @@ PDF_rlineto(PDF *p, double x, double y)
if (pdf_enter_api(p, fn, pdf_state_path, "(p_%p, %f, %f)\n",
(void *) p, x, y))
{
+ pdf_logg_is_unsupported(p, fn);
+
pdf__rlineto(p, x, y);
pdc_logg_exit_api(p->pdc, pdc_false, NULL);
@@ -1469,6 +1528,8 @@ PDF_rmoveto(PDF *p, double x, double y)
(pdf_state) (pdf_state_content | pdf_state_path),
"(p_%p, %f, %f)\n", (void *) p, x, y))
{
+ pdf_logg_is_unsupported(p, fn);
+
pdf__rmoveto(p, x, y);
pdc_logg_exit_api(p->pdc, pdc_false, NULL);
@@ -1552,7 +1613,7 @@ PDF_create_fieldgroup(
{
static const char fn[] = "PDF_create_fieldgroup";
- if (pdf_enter_api(p, fn, pdf_state_all,
+ if (pdf_enter_api(p, fn, pdf_state_documentall,
"(p_%p, \"%T\", /*c*/%d, \"%T\")\n",
(void *) p, name, len, len, optlist, 0))
{
@@ -1585,6 +1646,8 @@ PDF_findfont(
"(p_%p, \"%s\", \"%s\", %d)\n",
(void *) p, fontname, encoding, embed))
{
+ pdf_logg_is_deprecated(p, fn, 6);
+
if (embed < 0 || embed > 1)
pdc_error(p->pdc, PDC_E_ILLARG_INT,
"embed", pdc_errprintf(p->pdc, "%d", embed), 0, 0);
@@ -1602,7 +1665,7 @@ PDF_info_font(PDF *p, int font, const char *keyword, const char *optlist)
static const char fn[] = "PDF_info_font";
double retval = 0;
- if (pdf_enter_api(p, fn, pdf_state_all,
+ if (pdf_enter_api(p, fn, pdf_state_documentall,
"(p_%p, %d, \"%s\", \"%s\")\n",
(void *) p, font, keyword, optlist))
{
@@ -1853,7 +1916,11 @@ PDF_setpolydash(PDF *p, float *darray, int length)
if (pdf_enter_api(p, fn, pdf_state_content,
"(p_%p, darray_%p, /*c*/%d)\n", (void *) p, (void *) darray, length))
{
- char optlist[1024], *sopt;
+ char optlist[PDC_GEN_BUFSIZE], *sopt;
+
+ if (length > PDF_MAX_DASHLENGTH)
+ pdc_error(p->pdc, PDC_E_ILLARG_TOOMANY, "darray",
+ pdc_errprintf(p->pdc, "%d", PDF_MAX_DASHLENGTH), 0, 0);
sopt = optlist;
sopt += pdc_sprintf(p->pdc, pdc_false, optlist, "dasharray {");
@@ -1921,6 +1988,9 @@ PDF_add_bookmark(
"(p_%p, \"%T\", %d, %d)\n", (void *) p, text, 0, parent, open))
{
int len = text ? (int) pdc_strlen(text) : 0;
+
+ pdf_logg_is_deprecated(p, fn, 6);
+
retval = pdf__add_bookmark(p, text, len, parent, open);
pdc_logg_exit_api(p->pdc, pdc_true, "[%d]\n", retval);
}
@@ -1943,6 +2013,8 @@ PDF_add_bookmark2(
"(p_%p, \"%T\", /*c*/%d, %d, %d)\n",
(void *) p, text, len, len, parent, open))
{
+ pdf_logg_is_deprecated(p, fn, 6);
+
retval = pdf__add_bookmark(p, text, len, parent, open);
pdc_logg_exit_api(p->pdc, pdc_true, "[%d]\n", retval);
}
@@ -2099,7 +2171,7 @@ PDF_fit_image(
static const char fn[] = "PDF_fit_image";
/* scope check dependent on image type in kernel function */
- if (pdf_enter_api(p, fn, pdf_state_all,
+ if (pdf_enter_api(p, fn, pdf_state_firsttest,
"(p_%p, %d, %f, %f, \"%T\")\n", (void *) p, image, x, y, optlist, 0))
{
if (p->pdc->hastobepos) image -= 1;
@@ -2154,7 +2226,9 @@ PDF_open_CCITT(
(void *) p, filename, width, height,
BitReverse, K, BlackIs1))
{
- char optlist[128];
+ char optlist[PDC_GEN_BUFSIZE];
+
+ pdf_logg_is_deprecated(p, fn, 6);
pdc_sprintf(p->pdc, pdc_false, optlist,
"width %d height %d bitreverse %s K %d invert %s",
@@ -2192,9 +2266,11 @@ PDF_open_image(
width, height, components, bpc, params))
{
const char *filename = data;
- char optlist[512];
+ char optlist[PDC_GEN_BUFSIZE];
pdc_bool memory = pdc_false;
+ pdf_logg_is_deprecated(p, fn, 6);
+
if (type == NULL || *type == '\0')
pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "type", 0, 0, 0);
@@ -2293,7 +2369,9 @@ PDF_open_image_file(
"(p_%p, \"%s\", \"%s\", \"%s\", %d)\n",
(void *) p, type, filename, stringparam, intparam))
{
- char optlist[128];
+ char optlist[PDC_GEN_BUFSIZE];
+
+ pdf_logg_is_deprecated(p, fn, 6);
optlist[0] = 0;
if (stringparam != NULL && *stringparam != '\0')
@@ -2338,10 +2416,12 @@ PDF_place_image(
static const char fn[] = "PDF_place_image";
/* scope check dependent on image type in kernel function */
- if (pdf_enter_api(p, fn, pdf_state_all,
+ if (pdf_enter_api(p, fn, pdf_state_firsttest,
"(p_%p, %d, %f, %f, %f)\n", (void *) p, image, x, y, scale))
{
- char optlist[128];
+ char optlist[PDC_GEN_BUFSIZE];
+
+ pdf_logg_is_deprecated(p, fn, 6);
pdc_sprintf(p->pdc, pdc_false, optlist, "dpi none scale %f", scale);
if (p->pdc->hastobepos) image -= 1;
@@ -2529,6 +2609,8 @@ PDF_begin_page(PDF *p, double width, double height)
if (pdf_enter_api(p, fn, pdf_state_document, "(p_%p, %f, %f)\n",
(void *) p, width, height))
{
+ pdf_logg_is_deprecated(p, fn, 6);
+
pdf__begin_page(p, width, height);
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
@@ -2556,6 +2638,8 @@ PDF_end_page(PDF *p)
if (pdf_enter_api(p, fn, pdf_state_page, "(p_%p)\n", (void *) p))
{
+ pdf_logg_is_deprecated(p, fn, 6);
+
pdf__end_page_ext(p, "");
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
@@ -3259,7 +3343,7 @@ PDF_add_table_cell(PDF *p, int table, int column, int row, const char *text,
static const char fn[] = "PDF_add_table_cell";
int retval = -1;
- if (pdf_enter_api(p, fn, pdf_state_all,
+ if (pdf_enter_api(p, fn, pdf_state_documentall,
"(p_%p, %d, %d, %d, \"%T\", /*c*/%d, \"%T\")\n",
(void *) p, table, column, row, text, len, len, optlist, 0))
{
@@ -3274,7 +3358,7 @@ PDF_delete_table(PDF *p, int table, const char *optlist)
{
static const char fn[] = "PDF_delete_table";
- if (pdf_enter_api(p, fn, pdf_state_all,
+ if (pdf_enter_api(p, fn, pdf_state_documentall,
"(p_%p, %d, \"%T\")\n", (void *) p, table, optlist, 0))
{
pdc_error(p->pdc, PDF_E_UNSUPP_TABLES, 0, 0, 0, 0);
@@ -3308,7 +3392,7 @@ PDF_info_table(PDF *p, int table, const char *keyword)
static const char fn[] = "PDF_info_table";
double retval = -1;
- if (pdf_enter_api(p, fn, pdf_state_all,
+ if (pdf_enter_api(p, fn, pdf_state_documentall,
"(p_%p, %d, \"%s\")\n", (void *) p, table, keyword))
{
pdc_error(p->pdc, PDF_E_UNSUPP_TABLES, 0, 0, 0, 0);
@@ -3432,6 +3516,8 @@ PDF_begin_template(PDF *p, double width, double height)
if (pdf_enter_api(p, fn, (pdf_state) (pdf_state_document | pdf_state_page),
"(p_%p, %f, %f)\n", (void *) p, width, height))
{
+ pdf_logg_is_deprecated(p, fn, 7);
+
retval = pdf__begin_template(p, width, height, "");
}
@@ -3444,8 +3530,8 @@ PDF_begin_template_ext(PDF *p, double width, double height, const char *optlist)
static const char fn[] = "\nPDF_begin_template_ext";
int retval = -1;
- if (pdf_enter_api(p, fn, pdf_state_document, "(p_%p, %f, %f, \"%T\")\n",
- (void *) p, width, height, optlist, 0))
+ if (pdf_enter_api(p, fn, (pdf_state) (pdf_state_document | pdf_state_page),
+ "(p_%p, %f, %f, \"%T\")\n", (void *) p, width, height, optlist, 0))
{
retval = pdf__begin_template(p, width, height, optlist);
}
@@ -3612,6 +3698,8 @@ PDF_show_boxed(
"(p_%p, \"%T\", %f, %f, %f, %f, \"%s\", \"%s\")\n",
(void *) p, text, 0, left, bottom, width, height, hmode, feature))
{
+ pdf_logg_is_deprecated(p, fn, 6);
+
retval = pdf__show_boxed(p, text, 0, left, bottom, width, height,
hmode, feature);
@@ -3641,6 +3729,8 @@ PDF_show_boxed2(
(void *) p, text, len, len, left, bottom, width, height,
hmode, feature))
{
+ pdf_logg_is_deprecated(p, fn, 6);
+
retval = pdf__show_boxed(p, text, len, left, bottom, width, height,
hmode, feature);
@@ -3730,6 +3820,8 @@ PDF_xshow(PDF *p, const char *text, int len, const double *xadvancelist)
if (pdf_enter_api(p, fn, pdf_state_content,
"(p_%p, \"%T\", %d, %p)\n", (void *) p, text, len, len, xadvancelist))
{
+ pdf_logg_is_unsupported(p, fn);
+
pdf__xshow(p, text, len, xadvancelist);
pdc_logg_exit_api(p->pdc, pdc_true, NULL);
@@ -3750,7 +3842,7 @@ PDF_add_textflow(PDF *p, int textflow, const char *text, int len,
static const char fn[] = "PDF_add_textflow";
int retval = -1;
- if (pdf_enter_api(p, fn, pdf_state_all,
+ if (pdf_enter_api(p, fn, pdf_state_documentall,
"(p_%p, %d, \"%T\", /*c*/%d, \"%T\")\n",
(void *) p, textflow, text, len, len, optlist, 0))
{
@@ -3766,7 +3858,7 @@ PDF_create_textflow(PDF *p, const char *text, int len, const char *optlist)
static const char fn[] = "PDF_create_textflow";
int retval = -1;
- if (pdf_enter_api(p, fn, pdf_state_all,
+ if (pdf_enter_api(p, fn, pdf_state_documentall,
"(p_%p, \"%T\", /*c*/%d, \"%T\")\n",
(void *) p, text, len, len, optlist, 0))
{
@@ -3781,7 +3873,7 @@ PDF_delete_textflow(PDF *p, int textflow)
{
static const char fn[] = "PDF_delete_textflow";
- if (pdf_enter_api(p, fn, pdf_state_all,
+ if (pdf_enter_api(p, fn, pdf_state_documentall,
"(p_%p, %d)\n", (void *) p, textflow))
{
pdc_error(p->pdc, PDF_E_UNSUPP_TEXTFLOWS, 0, 0, 0, 0);
@@ -3821,7 +3913,7 @@ PDF_info_textflow(PDF *p, int textflow, const char *keyword)
static const char fn[] = "PDF_info_textflow";
double retval = -1;
- if (pdf_enter_api(p, fn, pdf_state_all,
+ if (pdf_enter_api(p, fn, pdf_state_documentall,
"(p_%p, %d, \"%s\")\n", (void *) p, textflow, keyword))
{
pdc_error(p->pdc, PDF_E_UNSUPP_TEXTFLOWS, 0, 0, 0, 0);
@@ -3896,7 +3988,7 @@ PDF_end_glyph(PDF *p)
static const char fn[] = "PDF_end_glyph";
if (pdf_enter_api(p, fn,
- (pdf_state) (pdf_state_glyph | pdf_state_glyphmetric |
+ (pdf_state) (pdf_state_glyph | pdf_state_glyphmetrics |
pdf_state_glyphignore),
"(p_%p)\n", (void *) p))
{
diff --git a/src/pdflib/pdflib/pdflib.h b/src/pdflib/pdflib/pdflib.h
index 23468dd..65311cb 100644
--- a/src/pdflib/pdflib/pdflib.h
+++ b/src/pdflib/pdflib/pdflib.h
@@ -1,7 +1,7 @@
/*---------------------------------------------------------------------------*
| PDFlib - A library for generating PDF on the fly |
+---------------------------------------------------------------------------+
- | Copyright (c) 1997-2006 Thomas Merz and PDFlib GmbH. All rights reserved. |
+ | Copyright (c) 1997-2009 Thomas Merz and PDFlib GmbH. All rights reserved. |
+---------------------------------------------------------------------------+
| |
| This software is subject to the PDFlib license. It is NOT in the |
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: pdflib.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
+/* $Id: pdflib.h,v 1.2 2009/10/20 18:14:16 scuri Exp $
*
* Public function declarations for PDFlib Lite, PDFlib, PDFlib+PDI, and PPS;
* see PDFlib API reference for details.
@@ -37,8 +37,8 @@ extern "C" {
#define PDFLIB_MAJORVERSION 7 /* major version number */
#define PDFLIB_MINORVERSION 0 /* minor version number */
-#define PDFLIB_REVISION 2 /* revision number */
-#define PDFLIB_VERSIONSTRING "7.0.2" /* The whole bunch */
+#define PDFLIB_REVISION 4 /* revision number */
+#define PDFLIB_VERSIONSTRING "7.0.4p4" /* The whole bunch */
/*
@@ -1512,6 +1512,7 @@ typedef enum
#pragma deprecated(PDF_open_image)
#pragma deprecated(PDF_open_image_file)
#pragma deprecated(PDF_open_mem)
+#pragma deprecated(PDF_open_pdi)
#pragma deprecated(PDF_place_image)
#pragma deprecated(PDF_place_pdi_page)
#pragma deprecated(PDF_set_border_color)
diff --git a/src/sim/cd_truetype.c b/src/sim/cd_truetype.c
index be0e860..bd06830 100644
--- a/src/sim/cd_truetype.c
+++ b/src/sim/cd_truetype.c
@@ -128,8 +128,7 @@ static void cdTT_checkversion(cdTT_Text* tt_text)
FT_Int major, minor, patch;
FT_Library_Version(tt_text->library, &major, &minor, &patch);
if (major != FREETYPE_MAJOR ||
- minor != FREETYPE_MINOR ||
- patch != FREETYPE_PATCH)
+ minor != FREETYPE_MINOR)
{
printf("CD - Canvas Draw: Warning - Different FreeType library used!\n"
" Compiled = %d.%d.%d\n"