HPDF_Image HPDF_Image_LoadJpegImageFromMem (HPDF_MMgr mmgr, const HPDF_BYTE *buf, HPDF_UINT size, HPDF_Xref xref) { HPDF_Stream jpeg_data; HPDF_Image image; HPDF_PTRACE ((" HPDF_Image_LoadJpegImageFromMem\n")); jpeg_data = HPDF_MemStream_New(mmgr,size); if (!HPDF_Stream_Validate (jpeg_data)) { HPDF_RaiseError (mmgr->error, HPDF_INVALID_STREAM, 0); return NULL; } if (HPDF_Stream_Write (jpeg_data, buf, size) != HPDF_OK) { HPDF_Stream_Free (jpeg_data); return NULL; } image = HPDF_Image_LoadJpegImage(mmgr,jpeg_data,xref); /* destroy file stream */ HPDF_Stream_Free (jpeg_data); return image; }
HPDF_GetContents (HPDF_Doc pdf, HPDF_BYTE *buf, HPDF_UINT32 *size) { HPDF_Stream stream; HPDF_UINT isize; HPDF_STATUS ret; HPDF_PTRACE ((" HPDF_GetContents\n")); if (!HPDF_HasDoc (pdf)) { return HPDF_INVALID_DOCUMENT; } stream = HPDF_MemStream_New (pdf->mmgr, HPDF_STREAM_BUF_SIZ); if (!stream) { return HPDF_CheckError (&pdf->error); } if (InternalSaveToStream (pdf, stream) != HPDF_OK) { HPDF_Stream_Free (stream); return HPDF_CheckError (&pdf->error); } ret = HPDF_Stream_Read (stream, buf, &isize); *size = isize; HPDF_Stream_Free (stream); return ret; }
HPDF_SaveToStream (HPDF_Doc pdf) { HPDF_PTRACE ((" HPDF_SaveToStream\n")); if (!HPDF_HasDoc (pdf)) return HPDF_INVALID_DOCUMENT; if (!pdf->stream) pdf->stream = HPDF_MemStream_New (pdf->mmgr, HPDF_STREAM_BUF_SIZ); if (!HPDF_Stream_Validate (pdf->stream)) return HPDF_RaiseError (&pdf->error, HPDF_INVALID_STREAM, 0); HPDF_MemStream_FreeData (pdf->stream); if (InternalSaveToStream (pdf, pdf->stream) != HPDF_OK) return HPDF_CheckError (&pdf->error); return HPDF_OK; }
HPDF_LoadU3DFromMem (HPDF_Doc pdf, const HPDF_BYTE *buffer, HPDF_UINT size) { HPDF_Stream imagedata; HPDF_Image image; HPDF_PTRACE ((" HPDF_LoadU3DFromMem\n")); if (!HPDF_HasDoc (pdf)) { return NULL; } /* create file stream */ imagedata = HPDF_MemStream_New (pdf->mmgr, size); if (!HPDF_Stream_Validate (imagedata)) { HPDF_RaiseError (&pdf->error, HPDF_INVALID_STREAM, 0); return NULL; } if (HPDF_Stream_Write (imagedata, buffer, size) != HPDF_OK) { HPDF_Stream_Free (imagedata); return NULL; } if (HPDF_Stream_Validate (imagedata)) { image = HPDF_U3D_LoadU3D (pdf->mmgr, imagedata, pdf->xref); } else { image = NULL; } /* destroy file stream */ HPDF_Stream_Free (imagedata); if (!image) { HPDF_CheckError (&pdf->error); } return image; }
static HPDF_STATUS LoadFontData (HPDF_FontDef fontdef, HPDF_Stream stream) { HPDF_Type1FontDefAttr attr = (HPDF_Type1FontDefAttr)fontdef->attr; char buf[HPDF_STREAM_BUF_SIZ]; char* pbuf = buf; HPDF_UINT len = 0; HPDF_STATUS ret; HPDF_BOOL end_flg = HPDF_FALSE; HPDF_PTRACE (" LoadFontData\n"); attr->font_data = HPDF_MemStream_New (fontdef->mmgr, HPDF_STREAM_BUF_SIZ); if (!attr->font_data) return HPDF_Error_GetCode (fontdef->error); len = 11; ret = HPDF_Stream_Read (stream, (HPDF_BYTE *)pbuf, &len); if (ret != HPDF_OK) return ret; pbuf += 11; for (;;) { len = HPDF_STREAM_BUF_SIZ - 11; ret = HPDF_Stream_Read (stream, (HPDF_BYTE *)pbuf, &len); if (ret == HPDF_STREAM_EOF) { end_flg = HPDF_TRUE; } else if (ret != HPDF_OK) return ret; if (len > 0) { if (attr->length1 == 0) { const char *s1 = HPDF_StrStr (buf, "eexec", len + 11); /* length1 indicate the size of ascii-data of font-file. */ if (s1) attr->length1 = attr->font_data->size + (s1 - buf) + 6; } if (attr->length1 > 0 && attr->length2 == 0) { const char *s2 = HPDF_StrStr (buf, "cleartomark", len + 11); if (s2) attr->length2 = attr->font_data->size + - 520 - attr->length1 + (s2 - buf); /* length1 indicate the size of binary-data. * in most fonts, it is all right at 520 bytes . but it need * to modify because it does not fully satisfy the * specification of type-1 font. */ } } if (end_flg) { if ((ret = HPDF_Stream_Write (attr->font_data, (HPDF_BYTE *)buf, len + 11)) != HPDF_OK) return ret; break; } else { if ((ret = HPDF_Stream_Write (attr->font_data, (HPDF_BYTE *)buf, len)) != HPDF_OK) return ret; HPDF_MemCpy ((HPDF_BYTE *)buf, (HPDF_BYTE *)buf + len, 11); pbuf = buf + 11; } } if (attr->length1 == 0 || attr->length2 == 0) return HPDF_SetError (fontdef->error, HPDF_UNSUPPORTED_TYPE1_FONT, 0); attr->length3 = attr->font_data->size - attr->length1 - attr->length2; return HPDF_OK; }