mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-04-25 05:00:43 +02:00
Fix Type 1 embedding in PDF
PDF Files with Type 1 fonts fail to open in any version of ghostscript prior to 8.54. The problem is the hex encoding of the encrypted portion of the font. The PDF reference says this should only be in binary.
This commit is contained in:
parent
e5a9c23308
commit
d81de15804
4 changed files with 11 additions and 8 deletions
|
|
@ -1594,7 +1594,7 @@ _cairo_pdf_surface_emit_type1_font_subset (cairo_pdf_surface_t *surface,
|
|||
|
||||
snprintf (name, sizeof name, "CairoFont-%d-%d",
|
||||
font_subset->font_id, font_subset->subset_id);
|
||||
status = _cairo_type1_subset_init (&subset, name, font_subset);
|
||||
status = _cairo_type1_subset_init (&subset, name, font_subset, FALSE);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
|
|
|
|||
|
|
@ -399,7 +399,7 @@ _cairo_ps_surface_emit_type1_font_subset (cairo_ps_surface_t *surface,
|
|||
|
||||
snprintf (name, sizeof name, "CairoFont-%d-%d",
|
||||
font_subset->font_id, font_subset->subset_id);
|
||||
status = _cairo_type1_subset_init (&subset, name, font_subset);
|
||||
status = _cairo_type1_subset_init (&subset, name, font_subset, TRUE);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
|
|
|
|||
|
|
@ -239,6 +239,7 @@ typedef struct _cairo_type1_subset {
|
|||
* _cairo_type1_subset_init:
|
||||
* @type1_subset: a #cairo_type1_subset_t to initialize
|
||||
* @font_subset: the #cairo_scaled_font_subset_t to initialize from
|
||||
* @hex_encode: if true the encrypted portion of the font is hex encoded
|
||||
*
|
||||
* If possible (depending on the format of the underlying
|
||||
* cairo_scaled_font_t and the font backend in use) generate a type1
|
||||
|
|
@ -253,7 +254,8 @@ typedef struct _cairo_type1_subset {
|
|||
cairo_private cairo_status_t
|
||||
_cairo_type1_subset_init (cairo_type1_subset_t *type_subset,
|
||||
const char *name,
|
||||
cairo_scaled_font_subset_t *font_subset);
|
||||
cairo_scaled_font_subset_t *font_subset,
|
||||
cairo_bool_t hex_encode);
|
||||
|
||||
/**
|
||||
* _cairo_type1_subset_fini:
|
||||
|
|
|
|||
|
|
@ -103,7 +103,8 @@ typedef struct _cairo_type1_font_subset {
|
|||
|
||||
static cairo_status_t
|
||||
_cairo_type1_font_subset_create (cairo_unscaled_font_t *unscaled_font,
|
||||
cairo_type1_font_subset_t **subset_return)
|
||||
cairo_type1_font_subset_t **subset_return,
|
||||
cairo_bool_t hex_encode)
|
||||
{
|
||||
cairo_ft_unscaled_font_t *ft_unscaled_font;
|
||||
FT_Face face;
|
||||
|
|
@ -145,6 +146,7 @@ _cairo_type1_font_subset_create (cairo_unscaled_font_t *unscaled_font,
|
|||
if (font->glyphs == NULL)
|
||||
goto fail2;
|
||||
|
||||
font->hex_encode = hex_encode;
|
||||
font->num_glyphs = 0;
|
||||
for (i = 0; i < face->num_glyphs; i++)
|
||||
font->glyphs[i].subset_index = -1;
|
||||
|
|
@ -900,7 +902,6 @@ cairo_type1_font_subset_write (cairo_type1_font_subset_t *font,
|
|||
}
|
||||
|
||||
font->eexec_key = private_dict_key;
|
||||
font->hex_encode = TRUE;
|
||||
font->hex_column = 0;
|
||||
|
||||
cairo_type1_font_subset_write_private_dict (font, name);
|
||||
|
|
@ -994,7 +995,8 @@ cairo_type1_font_subset_destroy (void *abstract_font)
|
|||
cairo_status_t
|
||||
_cairo_type1_subset_init (cairo_type1_subset_t *type1_subset,
|
||||
const char *name,
|
||||
cairo_scaled_font_subset_t *scaled_font_subset)
|
||||
cairo_scaled_font_subset_t *scaled_font_subset,
|
||||
cairo_bool_t hex_encode)
|
||||
{
|
||||
cairo_type1_font_subset_t *font;
|
||||
cairo_status_t status;
|
||||
|
|
@ -1008,7 +1010,7 @@ _cairo_type1_subset_init (cairo_type1_subset_t *type1_subset,
|
|||
|
||||
unscaled_font = _cairo_ft_scaled_font_get_unscaled_font (scaled_font_subset->scaled_font);
|
||||
|
||||
status = _cairo_type1_font_subset_create (unscaled_font, &font);
|
||||
status = _cairo_type1_font_subset_create (unscaled_font, &font, hex_encode);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
|
|
@ -1079,4 +1081,3 @@ _cairo_type1_subset_fini (cairo_type1_subset_t *subset)
|
|||
free (subset->widths);
|
||||
free (subset->data);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue