示例#1
0
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);
}
示例#2
0
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);
}
示例#3
0
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;
}