void show_description (HPDF_Page page, HPDF_REAL x, HPDF_REAL y, const char *text) { float fsize = HPDF_Page_GetCurrentFontSize (page); HPDF_Font font = HPDF_Page_GetCurrentFont (page); HPDF_RGBColor c = HPDF_Page_GetRGBFill (page); HPDF_Page_BeginText (page); HPDF_Page_SetRGBFill (page, 0, 0, 0); HPDF_Page_SetTextRenderingMode (page, HPDF_FILL); HPDF_Page_SetFontAndSize (page, font, 10); HPDF_Page_TextOut (page, x, y - 12, text); HPDF_Page_EndText (page); HPDF_Page_SetFontAndSize (page, font, fsize); HPDF_Page_SetRGBFill (page, c.r, c.g, c.b); }
void hpdf_doc::add_text(et_datachunk &dc) { et_type datatype = dc.type; wstring &out_string = dc.w_string; char *line = new char[4096]; memset(line, 0, 4096); _locale_t loceng; size_t size = 0; loceng = _create_locale(LC_ALL, "en-US"); int len = out_string.length(); // count of space int n_TX = (et_cp.TX > 0) ? et_cp.TX : et_cp.T, n_TY = (et_cp.TY > 0) ? et_cp.TY : et_cp.T; HPDF_REAL f_xpos = dc.rect.left, f_ypos = dc.rect.bottom; HPDF_REAL f_advance = 0.0; HPDF_REAL f_width = MMTEXT2PTX(et_cp.W * n_TX / 2); HPDF_REAL f_gap = MMTEXT2PTX(et_cp.X/2); HPDF_REAL f_space = MMTEXT2PTY((et_cp.Z * n_TY) + et_cp.L); HPDF_Page_BeginText(h_current_page); select_datatype_font(datatype); f_space = HPDF_Page_GetCurrentFontSize(h_current_page); if (f_space > f_linespace) f_linespace = f_space; switch (datatype) { case ET_LATAN: /* size = _wcstombs_l(line, out_string.c_str(), 4096, loceng); if (size == 0) goto END_PROC; HPDF_Page_TextOut(h_current_page, f_xpos, f_ypos - f_linespace, line); f_advance = HPDF_Page_TextWidth(h_current_page, line); */ if (et_cp.CorE == 'C') f_width = f_width * 2; text_out_eng(f_xpos, f_ypos, out_string, f_advance, f_width, f_gap, f_space, loceng); break; case ET_SPACE: f_advance += ((f_width + f_gap) * len); break; case ET_CJK: case ET_CJKFORM: case ET_BOXDRAW: if (et_cp.VorH == 'H' || datatype != ET_CJK) horizontal(f_xpos, f_ypos); else vertical(f_xpos, f_ypos); if (datatype == ET_BOXDRAW) resize_font_boxdraw(); /* size = wchar_to_utf8(out_string.c_str(), out_string.length(), line, 4096, NULL); if (size == 0) goto END_PROC; HPDF_Page_TextOut(h_current_page, f_xpos, f_ypos - f_linespace, line); //if (datatype == ET_BOXDRAW) // f_advance += (len * ((f_width + f_gap) * 2)); //else f_advance += HPDF_Page_TextWidth(h_current_page, line); //(len * ((f_width + f_gap) * 2)); */ text_out_cjk(f_xpos, f_ypos, out_string, f_advance, f_width, f_gap, f_space); break; } HPDF_Page_EndText(h_current_page); if (et_cp.U > 0) { HPDF_Page_SetLineWidth(h_current_page, 0.5); HPDF_Page_MoveTo(h_current_page, f_xpos, f_ypos - f_linespace); HPDF_Page_LineTo(h_current_page, f_xpos, f_ypos); HPDF_Page_Stroke(h_current_page); } f_xpos += f_advance; delete [] line; // free buffer _free_locale(loceng); }