static HPDF_STATUS OnWrite (HPDF_Dict obj, HPDF_Stream stream) { HPDF_FontAttr attr = (HPDF_FontAttr)obj->attr; HPDF_BasicEncoderAttr encoder_attr = (HPDF_BasicEncoderAttr)attr->encoder->attr; HPDF_UINT i; HPDF_STATUS ret; char buf[128]; char *pbuf = buf; char *eptr = buf + 127; HPDF_PTRACE ((" HPDF_Font_OnWrite\n")); /* Widths entry */ if ((ret = HPDF_Stream_WriteEscapeName (stream, "Widths")) != HPDF_OK) return ret; if ((ret = HPDF_Stream_WriteStr (stream, " [\012")) != HPDF_OK) return ret; for (i = encoder_attr->first_char; i <= encoder_attr->last_char; i++) { pbuf = HPDF_IToA (pbuf, attr->widths[i], eptr); *pbuf++ = ' '; if ((i + 1) % 16 == 0) { HPDF_StrCpy(pbuf, "\012", eptr); if ((ret = HPDF_Stream_WriteStr (stream, buf)) != HPDF_OK) return ret; pbuf = buf; } } HPDF_StrCpy (pbuf, "]\012", eptr); if ((ret = HPDF_Stream_WriteStr (stream, buf)) != HPDF_OK) return ret; return attr->encoder->write_fn (attr->encoder, stream); }
static HPDF_STATUS Type1Font_OnWrite (HPDF_Dict obj, HPDF_Stream stream) { HPDF_FontAttr attr = (HPDF_FontAttr)obj->attr; HPDF_Type1FontDefAttr fontdef_attr = (HPDF_Type1FontDefAttr)attr->fontdef->attr; HPDF_BasicEncoderAttr encoder_attr = (HPDF_BasicEncoderAttr)attr->encoder->attr; HPDF_UINT i; HPDF_STATUS ret; char buf[HPDF_TMP_BUF_SIZ]; char *eptr = buf + HPDF_TMP_BUF_SIZ - 1; HPDF_PTRACE ((" HPDF_Font_Type1Font_OnWrite\n")); /* if font is base14-font these entries is not required */ if ( ( fontdef_attr->write_widths || fontdef_attr->font_data ) && ( !fontdef_attr->is_base14font || encoder_attr->has_differences ) ) { char *pbuf; pbuf = (char *)HPDF_StrCpy (buf, "/FirstChar ", eptr); pbuf = HPDF_IToA (pbuf, encoder_attr->first_char, eptr); HPDF_StrCpy (pbuf, "\012", eptr); if ((ret = HPDF_Stream_WriteStr (stream, buf)) != HPDF_OK) return ret; pbuf = (char *)HPDF_StrCpy (buf, "/LastChar ", eptr); pbuf = HPDF_IToA (pbuf, encoder_attr->last_char, eptr); HPDF_StrCpy (pbuf, "\012", eptr); if ((ret = HPDF_Stream_WriteStr (stream, buf)) != HPDF_OK) return ret; /* Widths entry */ if ((ret = HPDF_Stream_WriteEscapeName (stream, "Widths")) != HPDF_OK) return ret; if ((ret = HPDF_Stream_WriteStr (stream, " [\012")) != HPDF_OK) return ret; pbuf = buf; for (i = encoder_attr->first_char; i <= encoder_attr->last_char; i++) { pbuf = HPDF_IToA (pbuf, attr->widths[i], eptr); *pbuf++ = ' '; if ((i + 1) % 16 == 0) { HPDF_StrCpy(pbuf, "\012", eptr); if ((ret = HPDF_Stream_WriteStr (stream, buf)) != HPDF_OK) return ret; pbuf = buf; } } HPDF_StrCpy (pbuf, "]\012", eptr); if ((ret = HPDF_Stream_WriteStr (stream, buf)) != HPDF_OK) return ret; } return attr->encoder->write_fn (attr->encoder, stream); }
static HPDF_STATUS Type3RasterFont_OnWrite(HPDF_Dict obj, HPDF_Stream stream) { HPDF_FontAttr attr = (HPDF_FontAttr)obj->attr; HPDF_Type3RasterFontDefAttr fontdef_attr = (HPDF_Type3RasterFontDefAttr)attr->fontdef->attr; HPDF_BasicEncoderAttr encoder_attr = (HPDF_BasicEncoderAttr)attr->encoder->attr; HPDF_UINT i; HPDF_STATUS ret; char buf[HPDF_TMP_BUF_SIZ]; char *eptr = buf + HPDF_TMP_BUF_SIZ - 1; HPDF_PTRACE((" HPDF_Font_Type3RasterFont_OnWrite\n")); /* if font is base14-font these entries is not required */ if (1) { char *pbuf; pbuf = (char *)HPDF_StrCpy(buf, "/FirstChar ", eptr); pbuf = HPDF_IToA(pbuf, /*encoder_attr->first_char*/0, eptr); HPDF_StrCpy(pbuf, "\012", eptr); if ((ret = HPDF_Stream_WriteStr(stream, buf)) != HPDF_OK) return ret; pbuf = (char *)HPDF_StrCpy(buf, "/LastChar ", eptr); pbuf = HPDF_IToA(pbuf, /*encoder_attr->last_char*/255, eptr); HPDF_StrCpy(pbuf, "\012", eptr); if ((ret = HPDF_Stream_WriteStr(stream, buf)) != HPDF_OK) return ret; /* Widths entry */ if ((ret = HPDF_Stream_WriteEscapeName(stream, "Widths")) != HPDF_OK) return ret; if ((ret = HPDF_Stream_WriteStr(stream, " [\012")) != HPDF_OK) return ret; pbuf = buf; for (i = 0 /*encoder_attr->first_char*/; i <= 255/*encoder_attr->last_char*/; i++) { pbuf = HPDF_FToA(pbuf, fontdef_attr->chars[i].width / (72.0f / (HPDF_REAL)fontdef_attr->dpi_x), eptr); *pbuf++ = ' '; if ((i + 1) % 16 == 0) { HPDF_StrCpy(pbuf, "\012", eptr); if ((ret = HPDF_Stream_WriteStr(stream, buf)) != HPDF_OK) return ret; pbuf = buf; } } HPDF_StrCpy(pbuf, "]\012", eptr); if ((ret = HPDF_Stream_WriteStr(stream, buf)) != HPDF_OK) return ret; } return ret; }