{* * << Haru Free PDF Library 2.0.5 >> -- ExtGStateDemo.dpr * * Copyright (c) 1999-2006 Takeshi Kanno * * 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. * *} program LineDemo; {$APPTYPE CONSOLE} uses SysUtils, hpdf, hpdf_types, hpdf_consts; procedure error_handler (error_no: HPDF_STATUS; detail_no: HPDF_STATUS; user_data: Pointer); stdcall; var message: string; begin message := 'ERROR: ' + IntToStr(error_no) + '-' + IntToStr(detail_no); raise Exception.Create(message); end; procedure draw_circles (page: HPDF_Page; const description: PChar; x: HPDF_REAL; y: HPDF_REAL); begin HPDF_Page_SetLineWidth (page, 1.0); HPDF_Page_SetRGBStroke (page, 0.0, 0.0, 0.0); HPDF_Page_SetRGBFill (page, 1.0, 0.0, 0.0); HPDF_Page_Circle (page,x + 40, y + 40, 40); HPDF_Page_FillStroke (page); HPDF_Page_SetRGBFill (page, 0.0, 1.0, 0.0); HPDF_Page_Circle (page, x + 100, y + 40, 40); HPDF_Page_FillStroke (page); HPDF_Page_SetRGBFill (page, 0.0, 0.0, 1.0); HPDF_Page_Circle (page, x + 70, y + 74.64, 40); HPDF_Page_FillStroke (page); HPDF_Page_SetRGBFill (page, 0.0, 0.0, 0.0); HPDF_Page_BeginText (page); HPDF_Page_TextOut (page, x + 0.0, y + 130.0, description); HPDF_Page_EndText (page); end; procedure make_pdf (); const fname: string = 'ExtGStateDemo.pdf'; PAGE_WIDTH: HPDF_REAL = 600; PAGE_HEIGHT: HPDF_REAL = 900; var pdf: HPDF_Doc; font: HPDF_Font; page: HPDF_Page; gstate: HPDF_ExtGState; begin pdf := HPDF_New(@error_handler, nil); if pdf = nil then begin WriteLn('error: cannot create PdfDoc object\n'); Halt (1); end; try // HPDF_SetCompressionMode(pdf, HPDF_COMP_ALL); {* create default-font *} font := HPDF_GetFont (pdf, 'Helvetica-Bold', nil); {* add a new page object. *} page := HPDF_AddPage(pdf); HPDF_Page_SetFontAndSize (page, font, 10); HPDF_Page_SetHeight (page, PAGE_HEIGHT); HPDF_Page_SetWidth (page, PAGE_WIDTH); {* normal *} HPDF_Page_GSave (page); draw_circles (page, 'normal', 40.0, PAGE_HEIGHT - 170); HPDF_Page_GRestore (page); {* alpha fill *} HPDF_Page_GSave (page); gstate := HPDF_CreateExtGState (pdf); HPDF_ExtGState_SetAlphaFill (gstate, 0.8); HPDF_Page_SetExtGState (page, gstate); draw_circles (page, 'alpha fill = 0.8', 230.0, PAGE_HEIGHT - 170); HPDF_Page_GRestore (page); {* alpha stroke *} HPDF_Page_GSave (page); gstate := HPDF_CreateExtGState (pdf); HPDF_ExtGState_SetAlphaFill (gstate, 0.4); HPDF_Page_SetExtGState (page, gstate); draw_circles (page, 'alpha fill = 0.4', 420.0, PAGE_HEIGHT - 170); HPDF_Page_GRestore (page); {* blend-mode=HPDF_BM_MULTIPLY *} HPDF_Page_GSave (page); gstate := HPDF_CreateExtGState (pdf); HPDF_ExtGState_SetBlendMode (gstate, HPDF_BM_MULTIPLY); HPDF_Page_SetExtGState (page, gstate); draw_circles (page, 'HPDF_BM_MULTIPLY', 40.0, PAGE_HEIGHT - 340); HPDF_Page_GRestore (page); {* blend-mode=HPDF_BM_SCREEN *} HPDF_Page_GSave (page); gstate := HPDF_CreateExtGState (pdf); HPDF_ExtGState_SetBlendMode (gstate, HPDF_BM_SCREEN); HPDF_Page_SetExtGState (page, gstate); draw_circles (page, 'HPDF_BM_SCREEN', 230.0, PAGE_HEIGHT - 340); HPDF_Page_GRestore (page); {* blend-mode=HPDF_BM_OVERLAY *} HPDF_Page_GSave (page); gstate := HPDF_CreateExtGState (pdf); HPDF_ExtGState_SetBlendMode (gstate, HPDF_BM_OVERLAY); HPDF_Page_SetExtGState (page, gstate); draw_circles (page, 'HPDF_BM_OVERLAY', 420.0, PAGE_HEIGHT - 340); HPDF_Page_GRestore (page); {* blend-mode=HPDF_BM_DARKEN *} HPDF_Page_GSave (page); gstate := HPDF_CreateExtGState (pdf); HPDF_ExtGState_SetBlendMode (gstate, HPDF_BM_DARKEN); HPDF_Page_SetExtGState (page, gstate); draw_circles (page, 'HPDF_BM_DARKEN', 40.0, PAGE_HEIGHT - 510); HPDF_Page_GRestore (page); {* blend-mode=HPDF_BM_LIGHTEN *} HPDF_Page_GSave (page); gstate := HPDF_CreateExtGState (pdf); HPDF_ExtGState_SetBlendMode (gstate, HPDF_BM_LIGHTEN); HPDF_Page_SetExtGState (page, gstate); draw_circles (page, 'HPDF_BM_LIGHTEN', 230.0, PAGE_HEIGHT - 510); HPDF_Page_GRestore (page); {* blend-mode=HPDF_BM_COLOR_DODGE *} HPDF_Page_GSave (page); gstate := HPDF_CreateExtGState (pdf); HPDF_ExtGState_SetBlendMode (gstate, HPDF_BM_COLOR_DODGE); HPDF_Page_SetExtGState (page, gstate); draw_circles (page, 'HPDF_BM_COLOR_DODGE', 420.0, PAGE_HEIGHT - 510); HPDF_Page_GRestore (page); {* blend-mode=HPDF_BM_COLOR_BUM *} HPDF_Page_GSave (page); gstate := HPDF_CreateExtGState (pdf); HPDF_ExtGState_SetBlendMode (gstate, HPDF_BM_COLOR_BUM); HPDF_Page_SetExtGState (page, gstate); draw_circles (page, 'HPDF_BM_COLOR_BUM', 40.0, PAGE_HEIGHT - 680); HPDF_Page_GRestore (page); {* blend-mode=HPDF_BM_HARD_LIGHT *} HPDF_Page_GSave (page); gstate := HPDF_CreateExtGState (pdf); HPDF_ExtGState_SetBlendMode (gstate, HPDF_BM_HARD_LIGHT); HPDF_Page_SetExtGState (page, gstate); draw_circles (page, 'HPDF_BM_HARD_LIGHT', 230.0, PAGE_HEIGHT - 680); HPDF_Page_GRestore (page); {* blend-mode=HPDF_BM_SOFT_LIGHT *} HPDF_Page_GSave (page); gstate := HPDF_CreateExtGState (pdf); HPDF_ExtGState_SetBlendMode (gstate, HPDF_BM_SOFT_LIGHT); HPDF_Page_SetExtGState (page, gstate); draw_circles (page, 'HPDF_BM_SOFT_LIGHT', 420.0, PAGE_HEIGHT - 680); HPDF_Page_GRestore (page); {* blend-mode=HPDF_BM_DIFFERENCE *} HPDF_Page_GSave (page); gstate := HPDF_CreateExtGState (pdf); HPDF_ExtGState_SetBlendMode (gstate, HPDF_BM_DIFFERENCE); HPDF_Page_SetExtGState (page, gstate); draw_circles (page, 'HPDF_BM_DIFFERENCE', 40.0, PAGE_HEIGHT - 850); HPDF_Page_GRestore (page); {* blend-mode=HPDF_BM_EXCLUSHON *} HPDF_Page_GSave (page); gstate := HPDF_CreateExtGState (pdf); HPDF_ExtGState_SetBlendMode (gstate, HPDF_BM_EXCLUSHON); HPDF_Page_SetExtGState (page, gstate); draw_circles (page, 'HPDF_BM_EXCLUSHON', 230.0, PAGE_HEIGHT - 850); HPDF_Page_GRestore (page); {* save the document to a file *} HPDF_SaveToFile (pdf, PChar(fname)); except on e: Exception do begin Writeln (e.message); HPDF_Free (pdf); Halt (1); end; end; {* clean up *} HPDF_Free (pdf); end; begin make_pdf; end.