Haru Free PDF Library
ext_gstate_demo.c
/*
* << Haru Free PDF Library 2.0.0 >> -- ext_gstate_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 <setjmp.h>
#include "hpdf.h"
#include "grid_sheet.h"
#include "handler.h"
void
draw_circles (HPDF_Page page, const char *description, HPDF_REAL x, HPDF_REAL y)
{
HPDF_Page_SetLineWidth (page, 1.0f);
HPDF_Page_SetRGBStroke (page, 0.0f, 0.0f, 0.0f);
HPDF_Page_SetRGBFill (page, 1.0f, 0.0f, 0.0f);
HPDF_Page_Circle (page, x + 40, y + 40, 40);
HPDF_Page_SetRGBFill (page, 0.0f, 1.0f, 0.0f);
HPDF_Page_Circle (page, x + 100, y + 40, 40);
HPDF_Page_SetRGBFill (page, 0.0f, 0.0f, 1.0f);
HPDF_Page_Circle (page, x + 70, y + 74.64, 40);
HPDF_Page_SetRGBFill (page, 0.0f, 0.0f, 0.0f);
HPDF_Page_TextOut (page, x + 0.0f, y + 130.0f, description);
}
int
main (int argc, char **argv)
{
HPDF_Doc pdf;
HPDF_Page page;
char fname[256];
HPDF_Font hfont;
const HPDF_REAL PAGE_WIDTH = 600;
const HPDF_REAL PAGE_HEIGHT = 900;
strcpy (fname, argv[0]);
strcat (fname, ".pdf");
pdf = HPDF_New (demo_error_handler, NULL);
if (!pdf) {
printf ("error: cannot create PdfDoc object\n");
return 1;
}
if (setjmp(env)) {
HPDF_Free (pdf);
return 1;
}
hfont = HPDF_GetFont (pdf, "Helvetica-Bold", NULL);
/* add a new page object. */
page = HPDF_AddPage (pdf);
HPDF_Page_SetFontAndSize (page, hfont, 10);
HPDF_Page_SetHeight (page, PAGE_HEIGHT);
HPDF_Page_SetWidth (page, PAGE_WIDTH);
/* normal */
draw_circles (page, "normal", 40.0f, PAGE_HEIGHT - 170);
/* transparency (0.8) */
gstate = HPDF_CreateExtGState (pdf);
HPDF_Page_SetExtGState (page, gstate);
draw_circles (page, "alpha fill = 0.8", 230.0f, PAGE_HEIGHT - 170);
/* transparency (0.4) */
gstate = HPDF_CreateExtGState (pdf);
HPDF_Page_SetExtGState (page, gstate);
draw_circles (page, "alpha fill = 0.4", 420.0f, PAGE_HEIGHT - 170);
/* blend-mode=HPDF_BM_MULTIPLY */
gstate = HPDF_CreateExtGState (pdf);
HPDF_Page_SetExtGState (page, gstate);
draw_circles (page, "HPDF_BM_MULTIPLY", 40.0f, PAGE_HEIGHT - 340);
/* blend-mode=HPDF_BM_SCREEN */
gstate = HPDF_CreateExtGState (pdf);
HPDF_Page_SetExtGState (page, gstate);
draw_circles (page, "HPDF_BM_SCREEN", 230.0f, PAGE_HEIGHT - 340);
/* blend-mode=HPDF_BM_OVERLAY */
gstate = HPDF_CreateExtGState (pdf);
HPDF_Page_SetExtGState (page, gstate);
draw_circles (page, "HPDF_BM_OVERLAY", 420.0f, PAGE_HEIGHT - 340);
/* blend-mode=HPDF_BM_DARKEN */
gstate = HPDF_CreateExtGState (pdf);
HPDF_Page_SetExtGState (page, gstate);
draw_circles (page, "HPDF_BM_DARKEN", 40.0f, PAGE_HEIGHT - 510);
/* blend-mode=HPDF_BM_LIGHTEN */
gstate = HPDF_CreateExtGState (pdf);
HPDF_Page_SetExtGState (page, gstate);
draw_circles (page, "HPDF_BM_LIGHTEN", 230.0f, PAGE_HEIGHT - 510);
/* blend-mode=HPDF_BM_COLOR_DODGE */
gstate = HPDF_CreateExtGState (pdf);
HPDF_Page_SetExtGState (page, gstate);
draw_circles (page, "HPDF_BM_COLOR_DODGE", 420.0f, PAGE_HEIGHT - 510);
/* blend-mode=HPDF_BM_COLOR_BUM */
gstate = HPDF_CreateExtGState (pdf);
HPDF_Page_SetExtGState (page, gstate);
draw_circles (page, "HPDF_BM_COLOR_BUM", 40.0f, PAGE_HEIGHT - 680);
/* blend-mode=HPDF_BM_HARD_LIGHT */
gstate = HPDF_CreateExtGState (pdf);
HPDF_Page_SetExtGState (page, gstate);
draw_circles (page, "HPDF_BM_HARD_LIGHT", 230.0f, PAGE_HEIGHT - 680);
/* blend-mode=HPDF_BM_SOFT_LIGHT */
gstate = HPDF_CreateExtGState (pdf);
HPDF_Page_SetExtGState (page, gstate);
draw_circles (page, "HPDF_BM_SOFT_LIGHT", 420.0f, PAGE_HEIGHT - 680);
/* blend-mode=HPDF_BM_DIFFERENCE */
gstate = HPDF_CreateExtGState (pdf);
HPDF_Page_SetExtGState (page, gstate);
draw_circles (page, "HPDF_BM_DIFFERENCE", 40.0f, PAGE_HEIGHT - 850);
/* blend-mode=HPDF_BM_EXCLUSHON */
gstate = HPDF_CreateExtGState (pdf);
HPDF_Page_SetExtGState (page, gstate);
draw_circles (page, "HPDF_BM_EXCLUSHON", 230.0f, PAGE_HEIGHT - 850);
/* save the document to a file */
HPDF_SaveToFile (pdf, fname);
/* clean up */
HPDF_Free (pdf);
return 0;
}
HPDF_STATUS HPDF_SaveToFile(HPDF_Doc pdf, const char *filename)
Saves the current document to file.
void HPDF_Free(HPDF_Doc pdf)
Revoke a document object and all resources.
HPDF_Doc HPDF_New(HPDF_Error_Handler user_error_fn, void *user_data)
Create an instance of a document object and initialize it.
HPDF_Font HPDF_GetFont(HPDF_Doc pdf, const char *font_name, const char *encoding_name)
Get requested font object handle.
HPDF_STATUS HPDF_Page_ClosePathFillStroke(HPDF_Page page)
Close current path, fill current path using the non-zero winding number rule, then paint path.
HPDF_STATUS HPDF_Page_SetLineWidth(HPDF_Page page, HPDF_REAL line_width)
Set width of the line used to stroke paths.
HPDF_STATUS HPDF_Page_SetRGBStroke(HPDF_Page page, HPDF_REAL r, HPDF_REAL g, HPDF_REAL b)
Set stroke color (RGB).
HPDF_STATUS HPDF_Page_SetRGBFill(HPDF_Page page, HPDF_REAL r, HPDF_REAL g, HPDF_REAL b)
Set filling color (RGB).
HPDF_STATUS HPDF_Page_TextOut(HPDF_Page page, HPDF_REAL xpos, HPDF_REAL ypos, const char *text)
Put text to the specified position.
HPDF_STATUS HPDF_Page_GSave(HPDF_Page page)
Save the page's current graphics state to the stack.
HPDF_STATUS HPDF_Page_SetFontAndSize(HPDF_Page page, HPDF_Font font, HPDF_REAL size)
Set the type of font and size leading.
HPDF_STATUS HPDF_Page_SetExtGState(HPDF_Page page, HPDF_ExtGState ext_gstate)
Apply graphics state to page.
HPDF_STATUS HPDF_Page_Circle(HPDF_Page page, HPDF_REAL x, HPDF_REAL y, HPDF_REAL radius)
Append circle to current path.
HPDF_STATUS HPDF_Page_GRestore(HPDF_Page page)
Restore graphics state which is saved by HPDF_Page_GSave().
HPDF_STATUS HPDF_Page_BeginText(HPDF_Page page)
Begin text object and set text position to (0, 0).
HPDF_STATUS HPDF_Page_EndText(HPDF_Page page)
Finish text object.
HPDF_Page HPDF_AddPage(HPDF_Doc pdf)
Create new page and add it after the last page of document.
HPDF_STATUS HPDF_Page_SetWidth(HPDF_Page page, HPDF_REAL value)
Change page width.
HPDF_STATUS HPDF_Page_SetHeight(HPDF_Page page, HPDF_REAL value)
Change page height.
HPDF_ExtGState HPDF_CreateExtGState(HPDF_Doc pdf)
HPDF_STATUS HPDF_ExtGState_SetAlphaStroke(HPDF_ExtGState ext_gstate, HPDF_REAL value)
HPDF_STATUS HPDF_ExtGState_SetAlphaFill(HPDF_ExtGState ext_gstate, HPDF_REAL value)
HPDF_STATUS HPDF_ExtGState_SetBlendMode(HPDF_ExtGState ext_gstate, HPDF_BlendMode mode)
float HPDF_REAL
Definition: hpdf_types.h:79
@ HPDF_BM_DIFFERENCE
Definition: hpdf_types.h:540
@ HPDF_BM_HARD_LIGHT
Definition: hpdf_types.h:538
@ HPDF_BM_LIGHTEN
Definition: hpdf_types.h:535
@ HPDF_BM_COLOR_DODGE
Definition: hpdf_types.h:536
@ HPDF_BM_SOFT_LIGHT
Definition: hpdf_types.h:539
@ HPDF_BM_DARKEN
Definition: hpdf_types.h:534
@ HPDF_BM_SCREEN
Definition: hpdf_types.h:532
@ HPDF_BM_COLOR_BUM
Definition: hpdf_types.h:537
@ HPDF_BM_MULTIPLY
Definition: hpdf_types.h:531
@ HPDF_BM_OVERLAY
Definition: hpdf_types.h:533
@ HPDF_BM_EXCLUSHON
Definition: hpdf_types.h:541
Definition: hpdf_objects.h:421
Definition: hpdf_doc.h:36