123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <math.h>
- #include <setjmp.h>
- #include "hpdf.h"
- #include "grid_sheet.h"
- jmp_buf env;
- #define HPDF_DLL
- #ifdef HPDF_DLL
- void __stdcall
- #else
- void
- #endif
- error_handler (HPDF_STATUS error_no,
- HPDF_STATUS detail_no,
- void *user_data)
- {
- printf ("ERROR: error_no=%04X, detail_no=%u\n", (HPDF_UINT)error_no,
- (HPDF_UINT)detail_no);
- longjmp(env, 1);
- }
- void
- show_stripe_pattern (HPDF_Page page,
- HPDF_REAL x,
- HPDF_REAL y)
- {
- HPDF_UINT iy = 0;
- while (iy < 50) {
- HPDF_Page_SetRGBStroke (page, 0.0, 0.0, 0.5);
- HPDF_Page_SetLineWidth (page, 1);
- HPDF_Page_MoveTo (page, x, y + iy);
- HPDF_Page_LineTo (page, x + HPDF_Page_TextWidth (page, "ABCabc123"),
- y + iy);
- HPDF_Page_Stroke (page);
- iy += 3;
- }
- HPDF_Page_SetLineWidth (page, 2.5);
- }
- 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);
- }
- int main (int argc, char **argv)
- {
- const char *page_title = "Text Demo";
- HPDF_Doc pdf;
- HPDF_Font font;
- HPDF_Page page;
- char fname[256];
- const char* samp_text = "abcdefgABCDEFG123!#$%&+-@?";
- const char* samp_text2 = "The quick brown LOG jumps over the lazy WESLEHY.";
- float tw;
- float fsize;
- int i;
- int len;
- float angle1;
- float angle2;
- float rad1;
- float rad2;
- float ypos;
- strcpy (fname, argv[0]);
- strcat (fname, ".pdf");
- pdf = HPDF_New (error_handler, NULL);
- if (!pdf) {
- printf ("error: cannot create PdfDoc object\n");
- return 1;
- }
- if (setjmp(env)) {
- HPDF_Free (pdf);
- return 1;
- }
-
- HPDF_SetCompressionMode (pdf, HPDF_COMP_ALL);
-
- font = HPDF_GetFont (pdf, "Helvetica", NULL);
-
- page = HPDF_AddPage (pdf);
-
-
-
-
- HPDF_Page_SetFontAndSize (page, font, 24);
- tw = HPDF_Page_TextWidth (page, page_title);
- HPDF_Page_BeginText (page);
- HPDF_Page_TextOut (page, (HPDF_Page_GetWidth(page) - tw) / 2,
- HPDF_Page_GetHeight (page) - 50, page_title);
- HPDF_Page_EndText (page);
- HPDF_Page_BeginText (page);
- HPDF_Page_MoveTextPos (page, 60, HPDF_Page_GetHeight(page) - 60);
-
- fsize = 8;
- while (fsize < 60) {
- char buf[50];
- int len;
-
- HPDF_Page_SetFontAndSize(page, font, fsize);
-
- HPDF_Page_MoveTextPos (page, 0, -5 - fsize);
-
- strcpy(buf, samp_text);
- len = HPDF_Page_MeasureText (page, samp_text,
- HPDF_Page_GetWidth(page) - 120, HPDF_FALSE, NULL);
-
- buf[len] = 0x00;
- HPDF_Page_ShowText (page, buf);
-
- HPDF_Page_MoveTextPos (page, 0, -10);
- HPDF_Page_SetFontAndSize(page, font, 8);
- #ifdef __WIN32__
- _snprintf(buf, 50, "Fontsize=%.0f", fsize);
- #else
- snprintf(buf, 50, "Fontsize=%.0f", fsize);
- #endif
- HPDF_Page_ShowText (page, buf);
- fsize *= 1.5;
- }
-
- HPDF_Page_SetFontAndSize(page, font, 8);
- HPDF_Page_MoveTextPos (page, 0, -30);
- HPDF_Page_ShowText (page, "Font color");
- HPDF_Page_SetFontAndSize (page, font, 18);
- HPDF_Page_MoveTextPos (page, 0, -20);
- len = strlen (samp_text);
- for (i = 0; i < len; i++) {
- char buf[2];
- float r = (float)i / (float)len;
- float g = 1 - ((float)i / (float)len);
- buf[0] = samp_text[i];
- buf[1] = 0x00;
- HPDF_Page_SetRGBFill (page, r, g, 0.0);
- HPDF_Page_ShowText (page, buf);
- }
- HPDF_Page_MoveTextPos (page, 0, -25);
- for (i = 0; i < len; i++) {
- char buf[2];
- float r = (float)i / (float)len;
- float b = 1 - ((float)i / (float)len);
- buf[0] = samp_text[i];
- buf[1] = 0x00;
- HPDF_Page_SetRGBFill (page, r, 0.0, b);
- HPDF_Page_ShowText (page, buf);
- }
- HPDF_Page_MoveTextPos (page, 0, -25);
- for (i = 0; i < len; i++) {
- char buf[2];
- float b = (float)i / (float)len;
- float g = 1 - ((float)i / (float)len);
- buf[0] = samp_text[i];
- buf[1] = 0x00;
- HPDF_Page_SetRGBFill (page, 0.0, g, b);
- HPDF_Page_ShowText (page, buf);
- }
- HPDF_Page_EndText (page);
- ypos = 450;
-
- HPDF_Page_SetFontAndSize(page, font, 32);
- HPDF_Page_SetRGBFill (page, 0.5, 0.5, 0.0);
- HPDF_Page_SetLineWidth (page, 1.5);
-
- show_description (page, 60, ypos,
- "RenderingMode=PDF_FILL");
- HPDF_Page_SetTextRenderingMode (page, HPDF_FILL);
- HPDF_Page_BeginText (page);
- HPDF_Page_TextOut (page, 60, ypos, "ABCabc123");
- HPDF_Page_EndText (page);
-
- show_description (page, 60, ypos - 50,
- "RenderingMode=PDF_STROKE");
- HPDF_Page_SetTextRenderingMode (page, HPDF_STROKE);
- HPDF_Page_BeginText (page);
- HPDF_Page_TextOut (page, 60, ypos - 50, "ABCabc123");
- HPDF_Page_EndText (page);
-
- show_description (page, 60, ypos - 100,
- "RenderingMode=PDF_FILL_THEN_STROKE");
- HPDF_Page_SetTextRenderingMode (page, HPDF_FILL_THEN_STROKE);
- HPDF_Page_BeginText (page);
- HPDF_Page_TextOut (page, 60, ypos - 100, "ABCabc123");
- HPDF_Page_EndText (page);
-
- show_description (page, 60, ypos - 150,
- "RenderingMode=PDF_FILL_CLIPPING");
- HPDF_Page_GSave (page);
- HPDF_Page_SetTextRenderingMode (page, HPDF_FILL_CLIPPING);
- HPDF_Page_BeginText (page);
- HPDF_Page_TextOut (page, 60, ypos - 150, "ABCabc123");
- HPDF_Page_EndText (page);
- show_stripe_pattern (page, 60, ypos - 150);
- HPDF_Page_GRestore (page);
-
- show_description (page, 60, ypos - 200,
- "RenderingMode=PDF_STROKE_CLIPPING");
- HPDF_Page_GSave (page);
- HPDF_Page_SetTextRenderingMode (page, HPDF_STROKE_CLIPPING);
- HPDF_Page_BeginText (page);
- HPDF_Page_TextOut (page, 60, ypos - 200, "ABCabc123");
- HPDF_Page_EndText (page);
- show_stripe_pattern (page, 60, ypos - 200);
- HPDF_Page_GRestore (page);
-
- show_description (page, 60, ypos - 250,
- "RenderingMode=PDF_FILL_STROKE_CLIPPING");
- HPDF_Page_GSave (page);
- HPDF_Page_SetTextRenderingMode (page, HPDF_FILL_STROKE_CLIPPING);
- HPDF_Page_BeginText (page);
- HPDF_Page_TextOut (page, 60, ypos - 250, "ABCabc123");
- HPDF_Page_EndText (page);
- show_stripe_pattern (page, 60, ypos - 250);
- HPDF_Page_GRestore (page);
-
- HPDF_Page_SetTextRenderingMode (page, HPDF_FILL);
- HPDF_Page_SetRGBFill (page, 0, 0, 0);
- HPDF_Page_SetFontAndSize(page, font, 30);
-
- angle1 = 30;
- rad1 = angle1 / 180 * 3.141592;
- show_description (page, 320, ypos - 60, "Rotating text");
- HPDF_Page_BeginText (page);
- HPDF_Page_SetTextMatrix (page, cos(rad1), sin(rad1), -sin(rad1), cos(rad1),
- 330, ypos - 60);
- HPDF_Page_ShowText (page, "ABCabc123");
- HPDF_Page_EndText (page);
-
- show_description (page, 320, ypos - 120, "Skewing text");
- HPDF_Page_BeginText (page);
- angle1 = 10;
- angle2 = 20;
- rad1 = angle1 / 180 * 3.141592;
- rad2 = angle2 / 180 * 3.141592;
- HPDF_Page_SetTextMatrix (page, 1, tan(rad1), tan(rad2), 1, 320, ypos - 120);
- HPDF_Page_ShowText (page, "ABCabc123");
- HPDF_Page_EndText (page);
-
- show_description (page, 320, ypos - 175, "Scaling text (X direction)");
- HPDF_Page_BeginText (page);
- HPDF_Page_SetTextMatrix (page, 1.5, 0, 0, 1, 320, ypos - 175);
- HPDF_Page_ShowText (page, "ABCabc12");
- HPDF_Page_EndText (page);
-
- show_description (page, 320, ypos - 250, "Scaling text (Y direction)");
- HPDF_Page_BeginText (page);
- HPDF_Page_SetTextMatrix (page, 1, 0, 0, 2, 320, ypos - 250);
- HPDF_Page_ShowText (page, "ABCabc123");
- HPDF_Page_EndText (page);
-
- show_description (page, 60, 140, "char-spacing 0");
- show_description (page, 60, 100, "char-spacing 1.5");
- show_description (page, 60, 60, "char-spacing 1.5, word-spacing 2.5");
- HPDF_Page_SetFontAndSize (page, font, 20);
- HPDF_Page_SetRGBFill (page, 0.1, 0.3, 0.1);
-
- HPDF_Page_BeginText (page);
- HPDF_Page_TextOut (page, 60, 140, samp_text2);
- HPDF_Page_EndText (page);
-
- HPDF_Page_SetCharSpace (page, 1.5);
- HPDF_Page_BeginText (page);
- HPDF_Page_TextOut (page, 60, 100, samp_text2);
- HPDF_Page_EndText (page);
-
- HPDF_Page_SetWordSpace (page, 2.5);
- HPDF_Page_BeginText (page);
- HPDF_Page_TextOut (page, 60, 60, samp_text2);
- HPDF_Page_EndText (page);
-
- HPDF_SaveToFile (pdf, fname);
-
- HPDF_Free (pdf);
- return 0;
- }
|