* contrib/hbhpdf/core.c
+ HPDF_GetPageByIndex( hDoc, nIndex ) --> hPage / NIL
suggested by Luigi Ferraris
* contrib/hbhpdf/tests/harupdf.prg
+ test the above (disabled by default)
* README.md
* updated CI badge(s) to GitHub Actions - they also cover
the strict compilation mode, definitions are currently
located in the same file as normal
! cleaned up links, mostly in tools section, some were
broken, for others switched to https where applicable
* mention HB_CCPREFIX= support for clang
* contrib/hbdoc/hbdoc.prg
* contrib/hbformat/utils/hbformat.prg
* contrib/hbnetio/utils/hbnetio/hbnetio.prg
* package/harbour.mft
* package/harbour.rc
* src/compiler/hbusage.c
* utils/hbi18n/hbi18n.prg
* utils/hbtest/hbtest.prg
* bumped copyright year to 2025
1439 lines
42 KiB
Plaintext
1439 lines
42 KiB
Plaintext
/*
|
|
* Copyright 2008 Pritpal Bedi <pritpal@vouchcac.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; see the file LICENSE.txt. If not, write to
|
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301 USA (or visit https://www.gnu.org/licenses/).
|
|
*
|
|
* As a special exception, the Harbour Project gives permission for
|
|
* additional uses of the text contained in its release of Harbour.
|
|
*
|
|
* The exception is that, if you link the Harbour libraries with other
|
|
* files to produce an executable, this does not by itself cause the
|
|
* resulting executable to be covered by the GNU General Public License.
|
|
* Your use of that executable is in no way restricted on account of
|
|
* linking the Harbour library code into it.
|
|
*
|
|
* This exception does not however invalidate any other reasons why
|
|
* the executable file might be covered by the GNU General Public License.
|
|
*
|
|
* This exception applies only to the code released by the Harbour
|
|
* Project under the name Harbour. If you copy code from other
|
|
* Harbour Project or Free Software Foundation releases into a copy of
|
|
* Harbour, as the General Public License permits, the exception does
|
|
* not apply to the code that you add in this way. To avoid misleading
|
|
* anyone as to the status of such modified files, you must delete
|
|
* this exception notice from them.
|
|
*
|
|
* If you write modifications of your own for Harbour, it is your choice
|
|
* whether to permit this exception to apply to your modifications.
|
|
* If you do not wish that, delete this exception notice.
|
|
*
|
|
*/
|
|
|
|
#require "hbhpdf"
|
|
|
|
//
|
|
|
|
PROCEDURE Main( cFileToSave )
|
|
|
|
CLS
|
|
|
|
IF Empty( cFileToSave )
|
|
cFileToSave := "myharu.pdf"
|
|
ENDIF
|
|
|
|
IF DesignHaruPDF( cFileToSave )
|
|
Alert( "PDF File <" + cFileToSave + "> is created!" )
|
|
ELSE
|
|
Alert( "Some problems in creating the PDF!" )
|
|
ENDIF
|
|
|
|
RETURN
|
|
|
|
//
|
|
FUNCTION DesignHaruPDF( cFileToSave )
|
|
|
|
LOCAL i, page, height, width, def_font, tw, samp_text, font
|
|
LOCAL page_title := "hbhpdf demo"
|
|
LOCAL font_list := { ;
|
|
"Courier" , ;
|
|
"Courier-Bold" , ;
|
|
"Courier-Oblique" , ;
|
|
"Courier-BoldOblique" , ;
|
|
"Helvetica" , ;
|
|
"Helvetica-Bold" , ;
|
|
"Helvetica-Oblique" , ;
|
|
"Helvetica-BoldOblique" , ;
|
|
"Times-Roman" , ;
|
|
"Times-Bold" , ;
|
|
"Times-Italic" , ;
|
|
"Times-BoldItalic" , ;
|
|
"Symbol" , ;
|
|
"ZapfDingbats" }
|
|
|
|
LOCAL pdf := HPDF_New()
|
|
|
|
IF pdf == NIL
|
|
Alert( "PDF could not be created!" )
|
|
RETURN NIL
|
|
ENDIF
|
|
|
|
/* set compression mode */
|
|
HPDF_SetCompressionMode( pdf, HPDF_COMP_ALL )
|
|
|
|
/*
|
|
// Passwords and Permissions
|
|
//
|
|
HPDF_SetPassword( pdf, "owner", "user" )
|
|
HPDF_SetPermission( pdf, HPDF_ENABLE_READ ) // cannot print
|
|
HPDF_SetEncryptionMode( pdf, HPDF_ENCRYPT_R3, 16 )
|
|
*/
|
|
|
|
page := HPDF_AddPage( pdf )
|
|
|
|
height := HPDF_Page_GetHeight( page )
|
|
width := HPDF_Page_GetWidth( page )
|
|
|
|
/* Print the lines of the page. */
|
|
HPDF_Page_SetLineWidth( page, 1 )
|
|
HPDF_Page_Rectangle( page, 50, 50, width - 100, height - 110 )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
/* Print the title of the page(with positioning center). */
|
|
def_font := HPDF_GetFont( pdf, "Helvetica", NIL )
|
|
|
|
HPDF_Page_SetFontAndSize( page, def_font, 24 )
|
|
tw := HPDF_Page_TextWidth( page, page_title )
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_TextOut( page, ( width - tw ) / 2, height - 50, page_title )
|
|
HPDF_Page_EndText( page )
|
|
|
|
/* output subtitle. */
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_SetFontAndSize( page, def_font, 16 )
|
|
HPDF_Page_TextOut( page, 60, height - 80, "<Standard Type1 fonts samples>" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, 60, height - 105 )
|
|
|
|
|
|
FOR i := 1 TO Len( font_list )
|
|
samp_text := "abcdefgABCDEFG12345!#$%&+-@?"
|
|
font := HPDF_GetFont( pdf, font_list[ i ], NIL )
|
|
|
|
|
|
HPDF_Page_SetFontAndSize( page, def_font, 9 )
|
|
HPDF_Page_ShowText( page, font_list[ i ] )
|
|
HPDF_Page_MoveTextPos( page, 0, - 18 )
|
|
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 20 )
|
|
HPDF_Page_ShowText( page, samp_text )
|
|
HPDF_Page_MoveTextPos( page, 0, - 20 )
|
|
NEXT
|
|
HPDF_Page_EndText( page )
|
|
|
|
Page_Lines( pdf )
|
|
|
|
Page_Text( pdf )
|
|
|
|
Page_TextScaling( pdf )
|
|
|
|
Page_Graphics( pdf )
|
|
|
|
Page_Annotation( pdf )
|
|
|
|
Page_Images( pdf )
|
|
|
|
// Comment out the following line if you need ASCII chart by Codepages
|
|
Page_CodePages( pdf )
|
|
|
|
IF HPDF_SaveToFile( pdf, cFileToSave ) != 0
|
|
? "0x" + hb_NumToHex( HPDF_GetError( pdf ), 4 ), hb_HPDF_GetErrorString( HPDF_GetError( pdf ) ), HPDF_GetErrorDetail( pdf )
|
|
ENDIF
|
|
|
|
#if 0
|
|
/* you should really count the pages while creating them */
|
|
? "pdf page count:", lazy_pagecount( pdf )
|
|
#endif
|
|
|
|
HPDF_Free( pdf )
|
|
|
|
RETURN hb_FileExists( cFileToSave )
|
|
|
|
STATIC PROCEDURE Page_Lines( pdf )
|
|
|
|
LOCAL page_title := "Line Example"
|
|
LOCAL font, page
|
|
|
|
LOCAL DASH_MODE1 := { 3 }
|
|
LOCAL DASH_MODE2 := { 3, 7 }
|
|
LOCAL DASH_MODE3 := { 8, 7, 2, 7 }
|
|
|
|
LOCAL x, y, x1, y1, x2, y2, x3, y3, tw
|
|
|
|
/* create default-font */
|
|
font := HPDF_GetFont( pdf, "Helvetica", NIL )
|
|
|
|
/* add a new page object. */
|
|
page := HPDF_AddPage( pdf )
|
|
|
|
/* 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_MoveTextPos( page, ( HPDF_Page_GetWidth( page ) - tw ) / 2, ;
|
|
HPDF_Page_GetHeight( page ) - 50 )
|
|
HPDF_Page_ShowText( page, page_title )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 10 )
|
|
|
|
/* Draw various widths of lines. */
|
|
HPDF_Page_SetLineWidth( page, 0 )
|
|
draw_line( page, 60, 770, "line width: 0" )
|
|
|
|
HPDF_Page_SetLineWidth( page, 1.0 )
|
|
draw_line( page, 60, 740, "line width: 1.0" )
|
|
|
|
HPDF_Page_SetLineWidth( page, 2.0 )
|
|
draw_line( page, 60, 710, "line width: 2.0" )
|
|
|
|
/* Line dash pattern */
|
|
HPDF_Page_SetLineWidth( page, 1.0 )
|
|
|
|
HPDF_Page_SetDash( page, DASH_MODE1, 1, 1 )
|
|
draw_line( page, 60, 680, "dash_ptn=[3], phase=1 -- 2 on, 3 off, 3 on..." )
|
|
|
|
HPDF_Page_SetDash( page, DASH_MODE2, 2, 2 )
|
|
draw_line( page, 60, 650, "dash_ptn=[7, 3], phase=2 -- 5 on 3 off, 7 on,..." )
|
|
|
|
HPDF_Page_SetDash( page, DASH_MODE3, 4, 0 )
|
|
draw_line( page, 60, 620, "dash_ptn=[8, 7, 2, 7], phase=0" )
|
|
|
|
HPDF_Page_SetDash( page, , 0, 0 )
|
|
|
|
HPDF_Page_SetLineWidth( page, 30 )
|
|
HPDF_Page_SetRGBStroke( page, 0.0, 0.5, 0.0 )
|
|
|
|
/* Line Cap Style */
|
|
HPDF_Page_SetLineCap( page, HPDF_BUTT_END )
|
|
draw_line2( page, 60, 570, "PDF_BUTT_END" )
|
|
|
|
HPDF_Page_SetLineCap( page, HPDF_ROUND_END )
|
|
draw_line2( page, 60, 505, "PDF_ROUND_END" )
|
|
|
|
HPDF_Page_SetLineCap( page, HPDF_PROJECTING_SCUARE_END )
|
|
draw_line2( page, 60, 440, "PDF_PROJECTING_SCUARE_END" )
|
|
|
|
/* Line Join Style */
|
|
HPDF_Page_SetLineWidth( page, 30 )
|
|
HPDF_Page_SetRGBStroke( page, 0.0, 0.0, 0.5 )
|
|
|
|
HPDF_Page_SetLineJoin( page, HPDF_MITER_JOIN )
|
|
HPDF_Page_MoveTo( page, 120, 300 )
|
|
HPDF_Page_LineTo( page, 160, 340 )
|
|
HPDF_Page_LineTo( page, 200, 300 )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, 60, 360 )
|
|
HPDF_Page_ShowText( page, "PDF_MITER_JOIN" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_SetLineJoin( page, HPDF_ROUND_JOIN )
|
|
HPDF_Page_MoveTo( page, 120, 195 )
|
|
HPDF_Page_LineTo( page, 160, 235 )
|
|
HPDF_Page_LineTo( page, 200, 195 )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, 60, 255 )
|
|
HPDF_Page_ShowText( page, "PDF_ROUND_JOIN" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_SetLineJoin( page, HPDF_BEVEL_JOIN )
|
|
HPDF_Page_MoveTo( page, 120, 90 )
|
|
HPDF_Page_LineTo( page, 160, 130 )
|
|
HPDF_Page_LineTo( page, 200, 90 )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, 60, 150 )
|
|
HPDF_Page_ShowText( page, "PDF_BEVEL_JOIN" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
/* Draw Rectangle */
|
|
HPDF_Page_SetLineWidth( page, 2 )
|
|
HPDF_Page_SetRGBStroke( page, 0, 0, 0 )
|
|
HPDF_Page_SetRGBFill( page, 0.75, 0.0, 0.0 )
|
|
|
|
draw_rect( page, 300, 770, "Stroke" )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
draw_rect( page, 300, 720, "Fill" )
|
|
HPDF_Page_Fill( page )
|
|
|
|
draw_rect( page, 300, 670, "Fill then Stroke" )
|
|
HPDF_Page_FillStroke( page )
|
|
|
|
/* Clip Rect */
|
|
HPDF_Page_GSave( page ) /* Save the current graphic state */
|
|
draw_rect( page, 300, 620, "Clip Rectangle" )
|
|
HPDF_Page_Clip( page )
|
|
HPDF_Page_Stroke( page )
|
|
HPDF_Page_SetFontAndSize( page, font, 13 )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, 290, 600 )
|
|
HPDF_Page_SetTextLeading( page, 12 )
|
|
HPDF_Page_ShowText( page, "Clip Clip Clip Clip Clip Clipi Clip Clip Clip" )
|
|
HPDF_Page_ShowTextNextLine( page, "Clip Clip Clip Clip Clip Clip Clip Clip Clip" )
|
|
HPDF_Page_ShowTextNextLine( page, "Clip Clip Clip Clip Clip Clip Clip Clip Clip" )
|
|
HPDF_Page_EndText( page )
|
|
HPDF_Page_GRestore( page )
|
|
|
|
/* Curve Example(CurveTo2) */
|
|
x := 330
|
|
y := 440
|
|
x1 := 430
|
|
y1 := 530
|
|
x2 := 480
|
|
y2 := 470
|
|
x3 := 480
|
|
y3 := 90
|
|
|
|
HPDF_Page_SetRGBFill( page, 0, 0, 0 )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, 300, 540 )
|
|
HPDF_Page_ShowText( page, "CurveTo2(x1, y1, x2. y2)" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, x + 5, y - 5 )
|
|
HPDF_Page_ShowText( page, "Current point" )
|
|
HPDF_Page_MoveTextPos( page, x1 - x, y1 - y )
|
|
HPDF_Page_ShowText( page, "(x1, y1)" )
|
|
HPDF_Page_MoveTextPos( page, x2 - x1, y2 - y1 )
|
|
HPDF_Page_ShowText( page, "(x2, y2)" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_SetDash( page, DASH_MODE1, 1, 0 )
|
|
|
|
HPDF_Page_SetLineWidth( page, 0.5 )
|
|
HPDF_Page_MoveTo( page, x1, y1 )
|
|
HPDF_Page_LineTo( page, x2, y2 )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
HPDF_Page_SetDash( page, , 0, 0 )
|
|
|
|
HPDF_Page_SetLineWidth( page, 1.5 )
|
|
|
|
HPDF_Page_MoveTo( page, x, y )
|
|
HPDF_Page_CurveTo2( page, x1, y1, x2, y2 )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
/* Curve Example(CurveTo3) */
|
|
y -= 150
|
|
y1 -= 150
|
|
y2 -= 150
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, 300, 390 )
|
|
HPDF_Page_ShowText( page, "CurveTo3(x1, y1, x2. y2)" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, x + 5, y - 5 )
|
|
HPDF_Page_ShowText( page, "Current point" )
|
|
HPDF_Page_MoveTextPos( page, x1 - x, y1 - y )
|
|
HPDF_Page_ShowText( page, "(x1, y1)" )
|
|
HPDF_Page_MoveTextPos( page, x2 - x1, y2 - y1 )
|
|
HPDF_Page_ShowText( page, "(x2, y2)" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_SetDash( page, DASH_MODE1, 1, 0 )
|
|
|
|
HPDF_Page_SetLineWidth( page, 0.5 )
|
|
HPDF_Page_MoveTo( page, x, y )
|
|
HPDF_Page_LineTo( page, x1, y1 )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
HPDF_Page_SetDash( page, , 0, 0 )
|
|
|
|
HPDF_Page_SetLineWidth( page, 1.5 )
|
|
HPDF_Page_MoveTo( page, x, y )
|
|
HPDF_Page_CurveTo3( page, x1, y1, x2, y2 )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
/* Curve Example(CurveTo) */
|
|
y -= 150
|
|
y1 -= 160
|
|
y2 -= 130
|
|
x2 += 10
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, 300, 240 )
|
|
HPDF_Page_ShowText( page, "CurveTo(x1, y1, x2. y2, x3, y3)" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, x + 5, y - 5 )
|
|
HPDF_Page_ShowText( page, "Current point" )
|
|
HPDF_Page_MoveTextPos( page, x1 - x, y1 - y )
|
|
HPDF_Page_ShowText( page, "(x1, y1)" )
|
|
HPDF_Page_MoveTextPos( page, x2 - x1, y2 - y1 )
|
|
HPDF_Page_ShowText( page, "(x2, y2)" )
|
|
HPDF_Page_MoveTextPos( page, x3 - x2, y3 - y2 )
|
|
HPDF_Page_ShowText( page, "(x3, y3)" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_SetDash( page, DASH_MODE1, 1, 0 )
|
|
|
|
HPDF_Page_SetLineWidth( page, 0.5 )
|
|
HPDF_Page_MoveTo( page, x, y )
|
|
HPDF_Page_LineTo( page, x1, y1 )
|
|
HPDF_Page_Stroke( page )
|
|
HPDF_Page_MoveTo( page, x2, y2 )
|
|
HPDF_Page_LineTo( page, x3, y3 )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
HPDF_Page_SetDash( page, , 0, 0 )
|
|
|
|
HPDF_Page_SetLineWidth( page, 1.5 )
|
|
HPDF_Page_MoveTo( page, x, y )
|
|
HPDF_Page_CurveTo( page, x1, y1, x2, y2, x3, y3 )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE draw_rect( page, x, y, label )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, x, y - 10 )
|
|
HPDF_Page_ShowText( page, label )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_Rectangle( page, x, y - 40, 220, 25 )
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE draw_line( page, x, y, label )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, x, y - 10 )
|
|
HPDF_Page_ShowText( page, label )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_MoveTo( page, x, y - 15 )
|
|
HPDF_Page_LineTo( page, x + 220, y - 15 )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE draw_line2( page, x, y, label )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, x, y )
|
|
HPDF_Page_ShowText( page, label )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_MoveTo( page, x + 30, y - 25 )
|
|
HPDF_Page_LineTo( page, x + 160, y - 25 )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE Page_Text( pdf )
|
|
|
|
LOCAL page, font, rect := Array( 4 )
|
|
LOCAL SAMP_TXT := "The quick brown fox jumps over the lazy dog. "
|
|
LOCAL angle1, angle2, rad1, rad2, i, x, y, buf
|
|
|
|
#if 0
|
|
LOCAL page_height
|
|
#endif
|
|
|
|
/* add a new page object. */
|
|
page := HPDF_AddPage( pdf )
|
|
HPDF_Page_SetSize( page, HPDF_PAGE_SIZE_A5, HPDF_PAGE_PORTRAIT )
|
|
|
|
#if 0
|
|
print_grid( pdf, page )
|
|
|
|
page_height := HPDF_Page_GetHeight( page )
|
|
#endif
|
|
|
|
font := HPDF_GetFont( pdf, "Helvetica", NIL )
|
|
HPDF_Page_SetTextLeading( page, 20 )
|
|
|
|
#define rLEFT 1
|
|
#define rTOP 2
|
|
#define rRIGHT 3
|
|
#define rBOTTOM 4
|
|
|
|
/* text_rect method */
|
|
|
|
/* HPDF_TALIGN_LEFT */
|
|
rect[ rLEFT ] := 25
|
|
rect[ rTOP ] := 545
|
|
rect[ rRIGHT ] := 200
|
|
rect[ rBOTTOM ] := rect[ 2 ] - 40
|
|
|
|
HPDF_Page_Rectangle( page, rect[ rLEFT ], rect[ rBOTTOM ], rect[ rRIGHT ] - rect[ rLEFT ], ;
|
|
rect[ rTOP ] - rect[ rBOTTOM ] )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 10 )
|
|
HPDF_Page_TextOut( page, rect[ rLEFT ], rect[ rTOP ] + 3, "HPDF_TALIGN_LEFT" )
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 13 )
|
|
HPDF_Page_TextRect( page, rect[ rLEFT ], rect[ rTOP ], rect[ rRIGHT ], rect[ rBOTTOM ], ;
|
|
SAMP_TXT, HPDF_TALIGN_LEFT, NIL )
|
|
|
|
HPDF_Page_EndText( page )
|
|
|
|
/* HPDF_TALIGN_RIGTH */
|
|
rect[ rLEFT ] := 220
|
|
rect[ rRIGHT ] := 395
|
|
|
|
HPDF_Page_Rectangle( page, rect[ rLEFT ], rect[ rBOTTOM ], rect[ rRIGHT ] - rect[ rLEFT ], ;
|
|
rect[ rTOP ] - rect[ rBOTTOM ] )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 10 )
|
|
HPDF_Page_TextOut( page, rect[ rLEFT ], rect[ rTOP ] + 3, "HPDF_TALIGN_RIGTH" )
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 13 )
|
|
HPDF_Page_TextRect( page, rect[ rLEFT ], rect[ rTOP ], rect[ rRIGHT ], rect[ rBOTTOM ], ;
|
|
SAMP_TXT, HPDF_TALIGN_RIGHT, NIL )
|
|
|
|
HPDF_Page_EndText( page )
|
|
|
|
/* HPDF_TALIGN_CENTER */
|
|
rect[ rLEFT ] := 25
|
|
rect[ rTOP ] := 475
|
|
rect[ rRIGHT ] := 200
|
|
rect[ rBOTTOM ] := rect[ rTOP ] - 40
|
|
|
|
HPDF_Page_Rectangle( page, rect[ rLEFT ], rect[ rBOTTOM ], rect[ rRIGHT ] - rect[ rLEFT ], ;
|
|
rect[ rTOP ] - rect[ rBOTTOM ] )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 10 )
|
|
HPDF_Page_TextOut( page, rect[ rLEFT ], rect[ rTOP ] + 3, "HPDF_TALIGN_CENTER" )
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 13 )
|
|
HPDF_Page_TextRect( page, rect[ rLEFT ], rect[ rTOP ], rect[ rRIGHT ], rect[ rBOTTOM ], ;
|
|
SAMP_TXT, HPDF_TALIGN_CENTER, NIL )
|
|
|
|
HPDF_Page_EndText( page )
|
|
|
|
/* HPDF_TALIGN_JUSTIFY */
|
|
rect[ rLEFT ] := 220
|
|
rect[ rRIGHT ] := 395
|
|
|
|
HPDF_Page_Rectangle( page, rect[ rLEFT ], rect[ rBOTTOM ], rect[ rRIGHT ] - rect[ rLEFT ], ;
|
|
rect[ rTOP ] - rect[ rBOTTOM ] )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 10 )
|
|
HPDF_Page_TextOut( page, rect[ rLEFT ], rect[ rTOP ] + 3, "HPDF_TALIGN_JUSTIFY" )
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 13 )
|
|
HPDF_Page_TextRect( page, rect[ rLEFT ], rect[ rTOP ], rect[ rRIGHT ], rect[ rBOTTOM ], ;
|
|
SAMP_TXT, HPDF_TALIGN_JUSTIFY, NIL )
|
|
|
|
HPDF_Page_EndText( page )
|
|
|
|
/* Skewed coordinate system */
|
|
HPDF_Page_GSave( page )
|
|
|
|
angle1 := 5
|
|
angle2 := 10
|
|
rad1 := angle1 / 180 * 3.141592
|
|
rad2 := angle2 / 180 * 3.141592
|
|
|
|
HPDF_Page_Concat( page, 1, Tan( rad1 ), Tan( rad2 ), 1, 25, 350 )
|
|
rect[ rLEFT ] := 0
|
|
rect[ rTOP ] := 40
|
|
rect[ rRIGHT ] := 175
|
|
rect[ rBOTTOM ] := 0
|
|
|
|
HPDF_Page_Rectangle( page, rect[ rLEFT ], rect[ rBOTTOM ], rect[ rRIGHT ] - rect[ rLEFT ], ;
|
|
rect[ rTOP ] - rect[ rBOTTOM ] )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 10 )
|
|
HPDF_Page_TextOut( page, rect[ rLEFT ], rect[ rTOP ] + 3, "Skewed coordinate system" )
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 13 )
|
|
HPDF_Page_TextRect( page, rect[ rLEFT ], rect[ rTOP ], rect[ rRIGHT ], rect[ rBOTTOM ], ;
|
|
SAMP_TXT, HPDF_TALIGN_LEFT, NIL )
|
|
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_GRestore( page )
|
|
|
|
/* Rotated coordinate system */
|
|
HPDF_Page_GSave( page )
|
|
|
|
angle1 := 5
|
|
rad1 := angle1 / 180 * 3.141592
|
|
|
|
HPDF_Page_Concat( page, Cos( rad1 ), Sin( rad1 ), - Sin( rad1 ), Cos( rad1 ), 220, 350 )
|
|
rect[ rLEFT ] := 0
|
|
rect[ rTOP ] := 40
|
|
rect[ rRIGHT ] := 175
|
|
rect[ rBOTTOM ] := 0
|
|
|
|
HPDF_Page_Rectangle( page, rect[ rLEFT ], rect[ rBOTTOM ], rect[ rRIGHT ] - rect[ rLEFT ], ;
|
|
rect[ rTOP ] - rect[ rBOTTOM ] )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 10 )
|
|
HPDF_Page_TextOut( page, rect[ rLEFT ], rect[ rTOP ] + 3, "Rotated coordinate system" )
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 13 )
|
|
HPDF_Page_TextRect( page, rect[ rLEFT ], rect[ rTOP ], rect[ rRIGHT ], rect[ rBOTTOM ], ;
|
|
SAMP_TXT, HPDF_TALIGN_LEFT, NIL )
|
|
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_GRestore( page )
|
|
|
|
/* text along a circle */
|
|
HPDF_Page_SetGrayStroke( page, 0 )
|
|
HPDF_Page_Circle( page, 210, 190, 145 )
|
|
HPDF_Page_Circle( page, 210, 190, 113 )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
angle1 := 360 / ( Len( SAMP_TXT ) )
|
|
angle2 := 180
|
|
|
|
HPDF_Page_BeginText( page )
|
|
font := HPDF_GetFont( pdf, "Courier-Bold", NIL )
|
|
HPDF_Page_SetFontAndSize( page, font, 30 )
|
|
|
|
FOR i := 1 TO Len( SAMP_TXT )
|
|
rad1 := ( angle2 - 90 ) / 180 * 3.141592
|
|
rad2 := angle2 / 180 * 3.141592
|
|
|
|
x := 210 + Cos( rad2 ) * 122
|
|
y := 190 + Sin( rad2 ) * 122
|
|
|
|
HPDF_Page_SetTextMatrix( page, Cos( rad1 ), Sin( rad1 ), - Sin( rad1 ), Cos( rad1 ), x, y )
|
|
|
|
buf := SubStr( SAMP_TXT, i, 1 )
|
|
HPDF_Page_ShowText( page, buf )
|
|
angle2 -= angle1
|
|
NEXT
|
|
|
|
HPDF_Page_EndText( page )
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE Page_TextScaling( pdf )
|
|
|
|
LOCAL font, page, tw, angle1, angle2, buf, len, fsize, i, r, b, g, yPos, rad1, rad2
|
|
LOCAL samp_text := "abcdefgABCDEFG123!#$%&+-@?"
|
|
LOCAL samp_text2 := "The quick brown fox jumps over the lazy dog."
|
|
LOCAL page_title := "Text Demo"
|
|
|
|
/* set compression mode */
|
|
#if 0
|
|
HPDF_SetCompressionMode( pdf, HPDF_COMP_ALL )
|
|
#endif
|
|
|
|
/* create default-font */
|
|
font := HPDF_GetFont( pdf, "Helvetica", NIL )
|
|
|
|
/* add a new page object. */
|
|
page := HPDF_AddPage( pdf )
|
|
|
|
/* draw grid to the page */
|
|
#if 0
|
|
print_grid( pdf, page )
|
|
#endif
|
|
|
|
/* print the lines of the page */
|
|
#if 0
|
|
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 )
|
|
#endif
|
|
|
|
/* 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
|
|
DO WHILE fsize < 60
|
|
/* 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. */
|
|
buf := samp_text
|
|
HPDF_Page_MeasureText( page, samp_text, ;
|
|
HPDF_Page_GetWidth( page ) - 120, .F., NIL )
|
|
|
|
HPDF_Page_ShowText( page, buf )
|
|
|
|
/* print the description. */
|
|
HPDF_Page_MoveTextPos( page, 0, -10 )
|
|
HPDF_Page_SetFontAndSize( page, font, 8 )
|
|
buf := "Fontsize=" + hb_ntos( fsize )
|
|
|
|
HPDF_Page_ShowText( page, buf )
|
|
|
|
fsize *= 1.5
|
|
ENDDO
|
|
|
|
/* 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 := Len( samp_text )
|
|
FOR i := 1 TO len
|
|
r := i / len
|
|
g := 1 - ( i / len )
|
|
buf := SubStr( samp_text, i, 1 )
|
|
|
|
HPDF_Page_SetRGBFill( page, r, g, 0.0 )
|
|
HPDF_Page_ShowText( page, buf )
|
|
NEXT
|
|
HPDF_Page_MoveTextPos( page, 0, -25 )
|
|
|
|
FOR i := 1 TO len
|
|
r := i / len
|
|
b := 1 - ( i / len )
|
|
buf := SubStr( samp_text, i, 1 )
|
|
|
|
HPDF_Page_SetRGBFill( page, r, 0.0, b )
|
|
HPDF_Page_ShowText( page, buf )
|
|
NEXT
|
|
HPDF_Page_MoveTextPos( page, 0, -25 )
|
|
|
|
FOR i := 1 TO len
|
|
b := i / len
|
|
g := 1 - ( i / len )
|
|
buf := SubStr( samp_text, i, 1 )
|
|
|
|
HPDF_Page_SetRGBFill( page, 0.0, g, b )
|
|
HPDF_Page_ShowText( page, buf )
|
|
NEXT
|
|
|
|
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 )
|
|
|
|
#if 0
|
|
HPDF_SetCompressionMode( pdf, nComp )
|
|
#endif
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE show_stripe_pattern( page, x, y )
|
|
LOCAL iy
|
|
|
|
|
|
FOR iy := 0 TO 50 STEP 3
|
|
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 )
|
|
NEXT
|
|
|
|
HPDF_Page_SetLineWidth( page, 2.5 )
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE show_description( page, x, y, text )
|
|
|
|
LOCAL fsize := HPDF_Page_GetCurrentFontSize( page )
|
|
LOCAL font := HPDF_Page_GetCurrentFont( page )
|
|
LOCAL 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[ 1 ], c[ 2 ], c[ 3 ] )
|
|
|
|
RETURN
|
|
|
|
#define PAGE_WIDTH 420
|
|
#define PAGE_HEIGHT 400
|
|
#define CELL_WIDTH 20
|
|
#define CELL_HEIGHT 20
|
|
#define CELL_HEADER 10
|
|
|
|
STATIC FUNCTION Page_CodePages( pdf )
|
|
|
|
LOCAL page, outline, font2, font_name, root, i, font, dst
|
|
LOCAL cResPath := "files" + hb_ps()
|
|
LOCAL cAfm := cResPath + "a010013l.afm"
|
|
LOCAL cPfb := cResPath + "a010013l.pfb"
|
|
LOCAL encodings := { ;
|
|
"StandardEncoding", ;
|
|
"MacRomanEncoding", ;
|
|
"WinAnsiEncoding", ;
|
|
"ISO8859-2", ;
|
|
"ISO8859-3", ;
|
|
"ISO8859-4", ;
|
|
"ISO8859-5", ;
|
|
"ISO8859-9", ;
|
|
"ISO8859-10", ;
|
|
"ISO8859-13", ;
|
|
"ISO8859-14", ;
|
|
"ISO8859-15", ;
|
|
"ISO8859-16", ;
|
|
"CP1250", ;
|
|
"CP1251", ;
|
|
"CP1252", ;
|
|
"CP1254", ;
|
|
"CP1257", ;
|
|
"KOI8-R", ;
|
|
"Symbol-Set", ;
|
|
"ZapfDingbats-Set" }
|
|
|
|
/* Set page mode to use outlines. */
|
|
HPDF_SetPageMode( pdf, HPDF_PAGE_MODE_USE_OUTLINE )
|
|
|
|
/* get default font */
|
|
font := HPDF_GetFont( pdf, "Helvetica", NIL )
|
|
|
|
/* load font object */
|
|
font_name := HPDF_LoadType1FontFromFile( pdf, cAfm, cPfb )
|
|
|
|
/* create outline root. */
|
|
root := HPDF_CreateOutline( pdf, NIL, "Encoding list", NIL )
|
|
HPDF_Outline_SetOpened( root, .T. )
|
|
|
|
FOR i := 1 TO Len( encodings )
|
|
page := HPDF_AddPage( pdf )
|
|
|
|
HPDF_Page_SetWidth( page, PAGE_WIDTH )
|
|
HPDF_Page_SetHeight( page, PAGE_HEIGHT )
|
|
|
|
outline := HPDF_CreateOutline( pdf, root, encodings[ i ], NIL )
|
|
dst := HPDF_Page_CreateDestination( page )
|
|
HPDF_Destination_SetXYZ( dst, 0, HPDF_Page_GetHeight( page ), 1 )
|
|
|
|
#if 0
|
|
HPDF_Destination_SetFitB( dst )
|
|
#endif
|
|
HPDF_Outline_SetDestination( outline, dst )
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 15 )
|
|
draw_graph( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_SetFontAndSize( page, font, 20 )
|
|
HPDF_Page_MoveTextPos( page, 40, PAGE_HEIGHT - 50 )
|
|
HPDF_Page_ShowText( page, encodings[ i ] )
|
|
HPDF_Page_ShowText( page, " Encoding" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
IF encodings[ i ] == "Symbol-Set"
|
|
font2 := HPDF_GetFont( pdf, "Symbol", NIL )
|
|
ELSEIF encodings[ i ] == "ZapfDingbats-Set"
|
|
font2 := HPDF_GetFont( pdf, "ZapfDingbats", NIL )
|
|
ELSE
|
|
font2 := HPDF_GetFont( pdf, font_name, encodings[ i ] )
|
|
ENDIF
|
|
|
|
HPDF_Page_SetFontAndSize( page, font2, 14 )
|
|
draw_fonts( page )
|
|
NEXT
|
|
|
|
RETURN NIL
|
|
|
|
STATIC PROCEDURE draw_graph( page )
|
|
|
|
LOCAL buf, i, x, y
|
|
|
|
/* Draw 16 X 15 cells */
|
|
|
|
/* Draw vertical lines. */
|
|
HPDF_Page_SetLineWidth( page, 0.5 )
|
|
|
|
FOR i := 0 TO 17
|
|
x := i * CELL_WIDTH + 40
|
|
|
|
HPDF_Page_MoveTo( page, x, PAGE_HEIGHT - 60 )
|
|
HPDF_Page_LineTo( page, x, 40 )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
IF i > 0 .AND. i <= 16
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, x + 5, PAGE_HEIGHT - 75 )
|
|
buf := hb_NumToHex( i - 1 )
|
|
HPDF_Page_ShowText( page, buf )
|
|
HPDF_Page_EndText( page )
|
|
ENDIF
|
|
NEXT
|
|
|
|
/* Draw horizontal lines. */
|
|
FOR i := 0 TO 15
|
|
y := i * CELL_HEIGHT + 40
|
|
|
|
HPDF_Page_MoveTo( page, 40, y )
|
|
HPDF_Page_LineTo( page, PAGE_WIDTH - 40, y )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
IF i < 14
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, 45, y + 5 )
|
|
buf := hb_NumToHex( 15 - i )
|
|
HPDF_Page_ShowText( page, buf )
|
|
HPDF_Page_EndText( page )
|
|
ENDIF
|
|
NEXT
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE draw_fonts( page )
|
|
|
|
LOCAL i, j, buf, x, y, d
|
|
|
|
HPDF_Page_BeginText( page )
|
|
|
|
/* Draw all character from 0x20 to 0xFF to the canvas. */
|
|
FOR i := 1 TO 16
|
|
FOR j := 1 TO 16
|
|
y := PAGE_HEIGHT - 55 - ( ( i - 1 ) * CELL_HEIGHT )
|
|
x := j * CELL_WIDTH + 50
|
|
|
|
buf := ( i - 1 ) * 16 + ( j - 1 )
|
|
IF buf >= 32
|
|
d := x - HPDF_Page_TextWidth( page, Chr( buf ) ) / 2
|
|
HPDF_Page_TextOut( page, d, y, Chr( buf ) )
|
|
ENDIF
|
|
NEXT
|
|
NEXT
|
|
|
|
HPDF_Page_EndText( page )
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE Page_Graphics( pdf )
|
|
|
|
LOCAL page, pos
|
|
|
|
/* add a new page object. */
|
|
page := HPDF_AddPage( pdf )
|
|
|
|
HPDF_Page_SetHeight( page, 220 )
|
|
HPDF_Page_SetWidth( page, 200 )
|
|
|
|
/* draw grid to the page */
|
|
#if 0
|
|
print_grid( pdf, page )
|
|
#endif
|
|
|
|
/* draw pie chart
|
|
*
|
|
* A: 45% Red
|
|
* B: 25% Blue
|
|
* C: 15% green
|
|
* D: other yellow
|
|
*/
|
|
|
|
/* A */
|
|
HPDF_Page_SetRGBFill( page, 1.0, 0, 0 )
|
|
HPDF_Page_MoveTo( page, 100, 100 )
|
|
HPDF_Page_LineTo( page, 100, 180 )
|
|
HPDF_Page_Arc( page, 100, 100, 80, 0, 360 * 0.45 )
|
|
pos := HPDF_Page_GetCurrentPos( page )
|
|
HPDF_Page_LineTo( page, 100, 100 )
|
|
HPDF_Page_Fill( page )
|
|
|
|
/* B */
|
|
HPDF_Page_SetRGBFill( page, 0, 0, 1.0 )
|
|
HPDF_Page_MoveTo( page, 100, 100 )
|
|
HPDF_Page_LineTo( page, pos[ 1 ], pos[ 2 ] )
|
|
HPDF_Page_Arc( page, 100, 100, 80, 360 * 0.45, 360 * 0.7 )
|
|
pos := HPDF_Page_GetCurrentPos( page )
|
|
HPDF_Page_LineTo( page, 100, 100 )
|
|
HPDF_Page_Fill( page )
|
|
|
|
/* C */
|
|
HPDF_Page_SetRGBFill( page, 0, 1.0, 0 )
|
|
HPDF_Page_MoveTo( page, 100, 100 )
|
|
HPDF_Page_LineTo( page, pos[ 1 ], pos[ 2 ] )
|
|
HPDF_Page_Arc( page, 100, 100, 80, 360 * 0.7, 360 * 0.85 )
|
|
pos := HPDF_Page_GetCurrentPos( page )
|
|
HPDF_Page_LineTo( page, 100, 100 )
|
|
HPDF_Page_Fill( page )
|
|
|
|
/* D */
|
|
HPDF_Page_SetRGBFill( page, 1.0, 1.0, 0 )
|
|
HPDF_Page_MoveTo( page, 100, 100 )
|
|
HPDF_Page_LineTo( page, pos[ 1 ], pos[ 2 ] )
|
|
HPDF_Page_Arc( page, 100, 100, 80, 360 * 0.85, 360 )
|
|
#if 0
|
|
pos := HPDF_Page_GetCurrentPos( page )
|
|
#endif
|
|
HPDF_Page_LineTo( page, 100, 100 )
|
|
HPDF_Page_Fill( page )
|
|
|
|
/* draw center circle */
|
|
HPDF_Page_SetGrayStroke( page, 0 )
|
|
HPDF_Page_SetGrayFill( page, 1 )
|
|
HPDF_Page_Circle( page, 100, 100, 30 )
|
|
HPDF_Page_Fill( page )
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE Page_Annotation( pdf )
|
|
|
|
LOCAL rect1 := { 50, 350, 150, 400 }
|
|
LOCAL rect2 := { 210, 350, 350, 400 }
|
|
LOCAL rect3 := { 50, 250, 150, 300 }
|
|
LOCAL rect4 := { 210, 250, 350, 300 }
|
|
LOCAL rect5 := { 50, 150, 150, 200 }
|
|
LOCAL rect6 := { 210, 150, 350, 200 }
|
|
LOCAL rect7 := { 50, 50, 150, 100 }
|
|
LOCAL rect8 := { 210, 50, 350, 100 }
|
|
|
|
LOCAL page, font, encoding, annot
|
|
|
|
/* use Times-Roman font. */
|
|
font := HPDF_GetFont( pdf, "Times-Roman", "WinAnsiEncoding" )
|
|
|
|
page := HPDF_AddPage( pdf )
|
|
|
|
HPDF_Page_SetWidth( page, 400 )
|
|
HPDF_Page_SetHeight( page, 500 )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_SetFontAndSize( page, font, 16 )
|
|
HPDF_Page_MoveTextPos( page, 130, 450 )
|
|
HPDF_Page_ShowText( page, "Annotation Demo" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
|
|
annot := HPDF_Page_CreateTextAnnot( page, rect1, ;
|
|
"Annotation with Comment Icons" + hb_eol() + ;
|
|
"This annotation set to be opened initially.", ;
|
|
NIL )
|
|
|
|
HPDF_TextAnnot_SetIcon( annot, HPDF_ANNOT_ICON_COMMENT )
|
|
HPDF_TextAnnot_SetOpened( annot, HPDF_TRUE )
|
|
|
|
annot := HPDF_Page_CreateTextAnnot( page, rect2, "Annotation with Key Icon", NIL )
|
|
HPDF_TextAnnot_SetIcon( annot, HPDF_ANNOT_ICON_PARAGRAPH )
|
|
|
|
annot := HPDF_Page_CreateTextAnnot( page, rect3, "Annotation with Note Icon", NIL )
|
|
HPDF_TextAnnot_SetIcon( annot, HPDF_ANNOT_ICON_NOTE )
|
|
|
|
annot := HPDF_Page_CreateTextAnnot( page, rect4, "Annotation with Help Icon", NIL )
|
|
HPDF_TextAnnot_SetIcon( annot, HPDF_ANNOT_ICON_HELP )
|
|
|
|
annot := HPDF_Page_CreateTextAnnot( page, rect5, "Annotation with NewParagraph Icon", NIL )
|
|
HPDF_TextAnnot_SetIcon( annot, HPDF_ANNOT_ICON_NEW_PARAGRAPH )
|
|
|
|
annot := HPDF_Page_CreateTextAnnot( page, rect6, "Annotation with Paragraph Icon", NIL )
|
|
HPDF_TextAnnot_SetIcon( annot, HPDF_ANNOT_ICON_PARAGRAPH )
|
|
|
|
annot := HPDF_Page_CreateTextAnnot( page, rect7, "Annotation with Insert Icon", NIL )
|
|
HPDF_TextAnnot_SetIcon( annot, HPDF_ANNOT_ICON_INSERT )
|
|
|
|
encoding := HPDF_GetEncoder( pdf, "ISO8859-2" )
|
|
|
|
HPDF_Page_CreateTextAnnot( page, rect8, "Annotation with ISO8859 text " + hb_BChar( 211 ) + hb_BChar( 212 ) + hb_BChar( 213 ) + hb_BChar( 214 ) + hb_BChar( 215 ) + hb_BChar( 216 ) + hb_BChar( 217 ), encoding )
|
|
|
|
HPDF_Page_SetFontAndSize( page, font, 11 )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, rect1[ 1 ] + 35, rect1[ 2 ] - 20 )
|
|
HPDF_Page_ShowText( page, "Comment Icon." )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, rect2[ 1 ] + 35, rect2[ 2 ] - 20 )
|
|
HPDF_Page_ShowText( page, "Key Icon" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, rect3[ 1 ] + 35, rect3[ 2 ] - 20 )
|
|
HPDF_Page_ShowText( page, "Note Icon." )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, rect4[ 1 ] + 35, rect4[ 2 ] - 20 )
|
|
HPDF_Page_ShowText( page, "Help Icon" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, rect5[ 1 ] + 35, rect5[ 2 ] - 20 )
|
|
HPDF_Page_ShowText( page, "NewParagraph Icon" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, rect6[ 1 ] + 35, rect6[ 2 ] - 20 )
|
|
HPDF_Page_ShowText( page, "Paragraph Icon" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, rect7[ 1 ] + 35, rect7[ 2 ] - 20 )
|
|
HPDF_Page_ShowText( page, "Insert Icon" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, rect8[ 1 ] + 35, rect8[ 2 ] - 20 )
|
|
HPDF_Page_ShowText( page, "Text Icon(ISO8859-2 text)" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE Page_Images( pdf )
|
|
|
|
LOCAL font, page, dst, image, image1, image2, image3
|
|
LOCAL x, y, angle, angle1, angle2, rad, rad1, rad2, iw, ih
|
|
LOCAL cImagePath := hb_DirBase() + "files" + hb_ps()
|
|
|
|
/* create default-font */
|
|
font := HPDF_GetFont( pdf, "Helvetica", NIL )
|
|
|
|
/* add a new page object. */
|
|
page := HPDF_AddPage( pdf )
|
|
|
|
HPDF_Page_SetWidth( page, 550 )
|
|
HPDF_Page_SetHeight( page, 500 )
|
|
|
|
dst := HPDF_Page_CreateDestination( page )
|
|
HPDF_Destination_SetXYZ( dst, 0, HPDF_Page_GetHeight( page ), 1 )
|
|
HPDF_SetOpenAction( pdf, dst )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_SetFontAndSize( page, font, 20 )
|
|
HPDF_Page_MoveTextPos( page, 220, HPDF_Page_GetHeight( page ) - 70 )
|
|
HPDF_Page_ShowText( page, "ImageDemo" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
/* load image file. */
|
|
image := HPDF_LoadPngImageFromFile( pdf, cImagePath + "basn3p02.png" )
|
|
|
|
/* image1 is masked by image2. */
|
|
image1 := HPDF_LoadPngImageFromFile( pdf, cImagePath + "basn3p02.png" )
|
|
|
|
/* image2 is a mask image. */
|
|
image2 := HPDF_LoadPngImageFromFile( pdf, cImagePath + "basn0g01.png" )
|
|
|
|
/* image3 is a RGB-color image. we use this image for color-mask demo. */
|
|
image3 := HPDF_LoadPngImageFromFile( pdf, cImagePath + "maskimag.png" )
|
|
|
|
iw := HPDF_Image_GetWidth( image )
|
|
ih := HPDF_Image_GetHeight( image )
|
|
HPDF_Page_SetLineWidth( page, 0.5 )
|
|
|
|
x := 100
|
|
y := HPDF_Page_GetHeight( page ) - 150
|
|
|
|
/* Draw image to the canvas. (normal-mode with actual size.) */
|
|
HPDF_Page_DrawImage( page, image, x, y, iw, ih )
|
|
|
|
show_description_1( page, x, y, "Actual Size" )
|
|
|
|
x += 150
|
|
|
|
/* Scaling image(X direction) */
|
|
HPDF_Page_DrawImage( page, image, x, y, iw * 1.5, ih )
|
|
|
|
show_description_1( page, x, y, "Scaling image(X direction)" )
|
|
|
|
x += 150
|
|
|
|
/* Scaling image(Y direction). */
|
|
HPDF_Page_DrawImage( page, image, x, y, iw, ih * 1.5 )
|
|
show_description_1( page, x, y, "Scaling image(Y direction)" )
|
|
|
|
x := 100
|
|
y -= 120
|
|
|
|
/* Skewing image. */
|
|
angle1 := 10
|
|
angle2 := 20
|
|
rad1 := angle1 / 180 * 3.141592
|
|
rad2 := angle2 / 180 * 3.141592
|
|
|
|
HPDF_Page_GSave( page )
|
|
HPDF_Page_Concat( page, iw, Tan( rad1 ) * iw, Tan( rad2 ) * ih, ih, x, y )
|
|
HPDF_Page_ExecuteXObject( page, image )
|
|
HPDF_Page_GRestore( page )
|
|
|
|
show_description_1( page, x, y, "Skewing image" )
|
|
|
|
x += 150
|
|
|
|
/* Rotating image */
|
|
angle := 30 /* rotation of 30 degrees. */
|
|
rad := angle / 180 * 3.141592 /* Calcurate the radian value. */
|
|
|
|
HPDF_Page_GSave( page )
|
|
HPDF_Page_Concat( page, iw * Cos( rad ), ;
|
|
iw * Sin( rad ), ;
|
|
ih * -Sin( rad ), ;
|
|
ih * Cos( rad ), ;
|
|
x, y )
|
|
HPDF_Page_ExecuteXObject( page, image )
|
|
HPDF_Page_GRestore( page )
|
|
|
|
show_description_1( page, x, y, "Rotating image" )
|
|
|
|
x += 150
|
|
|
|
/* draw masked image. */
|
|
|
|
/* Set image2 to the mask image of image1 */
|
|
HPDF_Image_SetMaskImage( image1, image2 )
|
|
|
|
HPDF_Page_SetRGBFill( page, 0, 0, 0 )
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, x - 6, y + 14 )
|
|
HPDF_Page_ShowText( page, "MASKMASK" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_DrawImage( page, image1, x - 3, y - 3, iw + 6, ih + 6 )
|
|
|
|
show_description_1( page, x, y, "masked image" )
|
|
|
|
x := 100
|
|
y -= 120
|
|
|
|
/* color mask. */
|
|
HPDF_Page_SetRGBFill( page, 0, 0, 0 )
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, x - 6, y + 14 )
|
|
HPDF_Page_ShowText( page, "MASKMASK" )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Image_SetColorMask( image3, 0, 255, 0, 0, 0, 255 )
|
|
HPDF_Page_DrawImage( page, image3, x, y, iw, ih )
|
|
|
|
show_description_1( page, x, y, "Color Mask" )
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE show_description_1( page, x, y, text )
|
|
|
|
LOCAL buf
|
|
|
|
HPDF_Page_MoveTo( page, x, y - 10 )
|
|
HPDF_Page_LineTo( page, x, y + 10 )
|
|
HPDF_Page_MoveTo( page, x - 10, y )
|
|
HPDF_Page_LineTo( page, x + 10, y )
|
|
HPDF_Page_Stroke( page )
|
|
|
|
HPDF_Page_SetFontAndSize( page, HPDF_Page_GetCurrentFont( page ), 8 )
|
|
HPDF_Page_SetRGBFill( page, 0, 0, 0 )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
|
|
buf := "x=" + hb_ntos( x ) + ",y=" + hb_ntos( y )
|
|
|
|
HPDF_Page_MoveTextPos( page, x - HPDF_Page_TextWidth( page, buf ) - 5, y - 10 )
|
|
HPDF_Page_ShowText( page, buf )
|
|
HPDF_Page_EndText( page )
|
|
|
|
HPDF_Page_BeginText( page )
|
|
HPDF_Page_MoveTextPos( page, x - 20, y - 25 )
|
|
HPDF_Page_ShowText( page, text )
|
|
HPDF_Page_EndText( page )
|
|
|
|
RETURN
|
|
|
|
#if 0
|
|
STATIC FUNCTION lazy_pagecount( pdf )
|
|
|
|
LOCAL page_count := 0
|
|
|
|
DO WHILE hb_isPointer( HPDF_GetPageByIndex( pdf, page_count ) )
|
|
page_count++
|
|
ENDDO
|
|
|
|
/* getting page out of index bounds raises an error */
|
|
HPDF_ResetError( pdf )
|
|
|
|
RETURN page_count
|
|
#endif
|