123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- /*
- * << Haru Free PDF Library 2.0.0 >> -- text_demo.c
- *
- * Copyright (c) 1999-2006 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp>
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation.
- * It is provided "as is" without express or implied warranty.
- *
- */
- #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;
- }
- /* set compression mode */
- HPDF_SetCompressionMode (pdf, HPDF_COMP_ALL);
- /* create default-font */
- font = HPDF_GetFont (pdf, "Helvetica", NULL);
- /* add a new page object. */
- page = HPDF_AddPage (pdf);
- /* draw grid to the page */
- //print_grid (pdf, page);
- /* print the lines of the page.
- HPDF_Page_SetLineWidth (page, 1);
- HPDF_Page_Rectangle (page, 50, 50, HPDF_Page_GetWidth(page) - 100,
- HPDF_Page_GetHeight (page) - 110);
- HPDF_Page_Stroke (page);
- */
- /* print the title of the page (with positioning center). */
- 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);
- /*
- * font size
- */
- fsize = 8;
- while (fsize < 60) {
- char buf[50];
- int len;
- /* set style and size of font. */
- HPDF_Page_SetFontAndSize(page, font, fsize);
- /* set the position of the text. */
- HPDF_Page_MoveTextPos (page, 0, -5 - fsize);
- /* measure the number of characters which included in the page. */
- strcpy(buf, samp_text);
- len = HPDF_Page_MeasureText (page, samp_text,
- HPDF_Page_GetWidth(page) - 120, HPDF_FALSE, NULL);
- /* truncate the text. */
- buf[len] = 0x00;
- HPDF_Page_ShowText (page, buf);
- /* print the description. */
- 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;
- }
- /*
- * font color
- */
- 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;
- /*
- * Font rendering mode
- */
- HPDF_Page_SetFontAndSize(page, font, 32);
- HPDF_Page_SetRGBFill (page, 0.5, 0.5, 0.0);
- HPDF_Page_SetLineWidth (page, 1.5);
- /* PDF_FILL */
- 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);
- /* PDF_STROKE */
- 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);
- /* PDF_FILL_THEN_STROKE */
- 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);
- /* PDF_FILL_CLIPPING */
- 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);
- /* PDF_STROKE_CLIPPING */
- 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);
- /* PDF_FILL_STROKE_CLIPPING */
- 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);
- /* Reset text attributes */
- HPDF_Page_SetTextRenderingMode (page, HPDF_FILL);
- HPDF_Page_SetRGBFill (page, 0, 0, 0);
- HPDF_Page_SetFontAndSize(page, font, 30);
- /*
- * Rotating text
- */
- angle1 = 30; /* A rotation of 30 degrees. */
- rad1 = angle1 / 180 * 3.141592; /* Calcurate the radian value. */
- 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);
- /*
- * Skewing text.
- */
- 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);
- /*
- * scaling text (X direction)
- */
- 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);
- /*
- * scaling text (Y direction)
- */
- 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);
- /*
- * char spacing, word spacing
- */
- 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);
- /* char-spacing 0 */
- HPDF_Page_BeginText (page);
- HPDF_Page_TextOut (page, 60, 140, samp_text2);
- HPDF_Page_EndText (page);
- /* char-spacing 1.5 */
- HPDF_Page_SetCharSpace (page, 1.5);
- HPDF_Page_BeginText (page);
- HPDF_Page_TextOut (page, 60, 100, samp_text2);
- HPDF_Page_EndText (page);
- /* char-spacing 1.5, word-spacing 3.5 */
- HPDF_Page_SetWordSpace (page, 2.5);
- HPDF_Page_BeginText (page);
- HPDF_Page_TextOut (page, 60, 60, samp_text2);
- HPDF_Page_EndText (page);
- /* save the document to a file */
- HPDF_SaveToFile (pdf, fname);
- /* clean up */
- HPDF_Free (pdf);
- return 0;
- }
|