2007-12-01 02:22 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)

- contrib/pdflib
   * contrib/make_b32_all.bat
   * contrib/make_vc_all.bat
     - Removed pdflib (not working, abandoned)
This commit is contained in:
Viktor Szakats
2007-12-01 01:23:35 +00:00
parent 684c58d448
commit 52a0660a67
12 changed files with 6 additions and 4099 deletions

View File

@@ -8,6 +8,12 @@
2002-12-01 13:30 UTC+0100 Foo Bar <foo.bar@foobar.org>
*/
2007-12-01 02:22 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
- contrib/pdflib
* contrib/make_b32_all.bat
* contrib/make_vc_all.bat
- Removed pdflib (not working, abandoned)
2007-12-01 02:20 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
- contrib/htmllib
* contrib/Makefile

View File

@@ -22,7 +22,6 @@ if not "%FIREBIRD_DIR%" == "" set _HB_DIRS=%_HB_DIRS% hbfbird
if not "%FREEIMAGE_DIR%" == "" set _HB_DIRS=%_HB_DIRS% hbfimage
if not "%GD_DIR%" == "" set _HB_DIRS=%_HB_DIRS% hbgd
if not "%MYSQL_DIR%" == "" set _HB_DIRS=%_HB_DIRS% mysql
if not "%PDFLIB_DIR%" == "" set _HB_DIRS=%_HB_DIRS% pdflib
if not "%PGSQL_DIR%" == "" set _HB_DIRS=%_HB_DIRS% pgsql
if not "%ADS_DIR%" == "" set _HB_DIRS=%_HB_DIRS% rdd_ads
for %%n in ( %_HB_DIRS% ) do %COMSPEC% /c make_b32.bat %%n %1 %2 %3 %4 %5 %6 %7 %8 %9

View File

@@ -22,7 +22,6 @@ if not "%FIREBIRD_DIR%" == "" set _HB_DIRS=%_HB_DIRS% hbfbird
if not "%FREEIMAGE_DIR%" == "" set _HB_DIRS=%_HB_DIRS% hbfimage
if not "%GD_DIR%" == "" set _HB_DIRS=%_HB_DIRS% hbgd
if not "%MYSQL_DIR%" == "" set _HB_DIRS=%_HB_DIRS% mysql
if not "%PDFLIB_DIR%" == "" set _HB_DIRS=%_HB_DIRS% pdflib
if not "%PGSQL_DIR%" == "" set _HB_DIRS=%_HB_DIRS% pgsql
if not "%ADS_DIR%" == "" set _HB_DIRS=%_HB_DIRS% rdd_ads
for %%n in ( %_HB_DIRS% ) do %COMSPEC% /c make_vc.bat %%n %1 %2 %3 %4 %5 %6 %7 %8 %9

View File

@@ -1,19 +0,0 @@
#
# $Id$
#
ROOT = ../../
C_SOURCES= \
pdfhbdoc.c \
PRG_SOURCES= \
pdf1.prg \
# pdfhbdocs.prg \
PRG_HEADERS=\
pdf.ch \
LIBNAME=hbpdflib
include $(TOP)$(ROOT)config/lib.cf

View File

@@ -1,19 +0,0 @@
#
# $Id$
#
LIBNAME = hbpdflib
LIB_PATH = $(LIB_DIR)\$(LIBNAME)$(LIBEXT)
PRG_HEADERS = \
pdf.ch \
LIB_OBJS = \
$(OBJ_DIR)\pdfhbdoc$(OBJEXT) \
\
# $(OBJ_DIR)\pdfhbdocs$(OBJEXT) \
$(OBJ_DIR)\pdf1$(OBJEXT) \
all: \
$(LIB_PATH) \

View File

@@ -1,21 +0,0 @@
@echo off
rem
rem $Id$
rem
if not "%PDFLIB_DIR%" == "" goto DIR_OK
echo ---------------------------------------------------------------
echo IMPORTANT: You'll need PDFLIB sources and this envvar
echo to be set to successfully build this library:
echo set PDFLIB_DIR=C:\pdflib
echo ---------------------------------------------------------------
exit 1
:DIR_OK
set CFLAGS=-I%PDFLIB_DIR%\src\pdflib
call ..\mtpl_b32.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
set CFLAGS=

View File

@@ -1,21 +0,0 @@
@echo off
rem
rem $Id$
rem
if not "%PDFLIB_DIR%" == "" goto DIR_OK
echo ---------------------------------------------------------------
echo IMPORTANT: You'll need PDFLIB sources and this envvar
echo to be set to successfully build this library:
echo set PDFLIB_DIR=C:\pdflib
echo ---------------------------------------------------------------
exit 1
:DIR_OK
set CFLAGS=-I%PDFLIB_DIR%\src\pdflib
call ..\mtpl_vc.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
set CFLAGS=

View File

@@ -1,234 +0,0 @@
/*
* $Id$
*/
#include "fileio.ch"
#include "common.ch"
#define CRLF chr(13)+chr(10)
#define NORMAL 0
#define BOLD 1
#define ITALIC 2
#define BOLDITALIC 3
#define BOOKLEVEL 1
#define BOOKTITLE 2
#define BOOKPARENT 3
#define BOOKPREV 4
#define BOOKNEXT 5
#define BOOKFIRST 6
#define BOOKLAST 7
#define BOOKCOUNT 8
#define BOOKPAGE 9
#define BOOKCOORD 10
#define FONTNAME 1 // font name
#define FONTSIZE 2 // font size
#define LPI 3 // lines per inch
#define PAGESIZE 4 // page size
#define PAGEORIENT 5 // page orientation
#define PAGEX 6
#define PAGEY 7
#define REPORTWIDTH 8 // report width
#define REPORTPAGE 9 // report page
#define REPORTLINE 10 // report line
#define FONTNAMEPREV 11 // prev font name
#define FONTSIZEPREV 12 // prev font size
#define PAGEBUFFER 13 // page buffer
#define REPORTOBJ 14 // current obj
#define DOCLEN 15 // document length
#define TYPE1 16 // array of type 1 fonts
#define MARGINS 17 // recalc margins ?
#define HEADEREDIT 18 // edit header ?
#define NEXTOBJ 19 // next obj
#define PDFTOP 20 // top row
#define PDFLEFT 21 // left & right margin in mm
#define PDFBOTTOM 22 // bottom row
#define HANDLE 23 // handle
#define PAGES 24 // array of pages
#define REFS 25 // array of references
#define BOOKMARK 26 // array of bookmarks
#define HEADER 27 // array of headers
#define FONTS 28 // array of report fonts
#define IMAGES 29 // array of report images
#define PAGEIMAGES 30 // array of current page images
#define PAGEFONTS 31 // array of current page fonts
#define FONTWIDTH 32 // array of fonts width's
#define OPTIMIZE 33 // optimized ?
#define CREATOR 34
#define KEYWORD 35
#define AUTHOR 36
#define SUBJECT 37
#define OVERLINE 38
#define UNDERLINE 39
#define PDFCOMPLVL 40
#define PARAMLEN 40 // number of report elements
#define ALIGN_LEFT 1
#define ALIGN_CENTER 2
#define ALIGN_RIGHT 3
#define ALIGN_JUSTIFY 4
#define IMAGE_WIDTH 1
#define IMAGE_HEIGHT 2
#define IMAGE_XRES 3
#define IMAGE_YRES 4
#define IMAGE_BITS 5
#define IMAGE_FROM 6
#define IMAGE_LENGTH 7
#define BYTE 1
#define ASCII 2
#define SHORT 3
#define LONG 4
#define RATIONAL 5
#define SBYTE 6
#define UNDEFINED 7
#define SSHORT 8
#define SLONG 9
#define SRATIONAL 10
#define FLOAT 11
#define DOUBLE 12
#define pdf_ALICEBLUE "F0F8FF"
#define pdf_ANTIQUEWHITE "FAEBD7"
#define pdf_AQUA "00FFFF"
#define pdf_AQUAMARINE "7FFFD4"
#define pdf_AZURE "F0FFFF"
#define pdf_BEIGE "F5F5DC"
#define pdf_BISQUE "FFE4C4"
#define pdf_BLACK "000000"
#define pdf_BLANCHEDALMOND "FFEBCD"
#define pdf_BLUE "0000FF"
#define pdf_BLUEVIOLET "8A2BE2"
#define pdf_BROWN "A52A2A"
#define pdf_BURLYWOOD "DEB887"
#define pdf_CADETBLUE "5F9EA0"
#define pdf_CHARTREUSE "7FFF00"
#define pdf_CHOCOLATE "D2691E"
#define pdf_CORAL "FF7F50"
#define pdf_CORNFLOWERBLUE "6495ED"
#define pdf_CORNSILK "FFF8DC"
#define pdf_CRIMSON "DC143C"
#define pdf_CYAN "00FFFF"
#define pdf_DARKBLUE "00008B"
#define pdf_DARKCYAN "008B8B"
#define pdf_DARKGOLDENROD "B8860B"
#define pdf_DARKGRAY "A9A9A9"
#define pdf_DARKGREEN "006400"
#define pdf_DARKKHAKI "BDB76B"
#define pdf_DARKMAGENTA "8B008B"
#define pdf_DARKOLIVEGREEN "556B2F"
#define pdf_DARKORANGE "FF8C00"
#define pdf_DARKORCHID "9932CC"
#define pdf_DARKRED "8B0000"
#define pdf_DARKSALMON "E9967A"
#define pdf_DARKSEAGREEN "8FBC8F"
#define pdf_DARKSLATEBLUE "483D8B"
#define pdf_DARKSLATEGRAY "2F4F4F"
#define pdf_DARKTURQUOISE "00CED1"
#define pdf_DARKVIOLET "9400D3"
#define pdf_DEEPPINK "FF1493"
#define pdf_DEEPSKYBLUE "00BFFF"
#define pdf_DIMGRAY "696969"
#define pdf_DODGERBLUE "1E90FF"
#define pdf_FIREBRICK "B22222"
#define pdf_FLORALWHITE "FFFAF0"
#define pdf_FORESTGREEN "228B22"
#define pdf_FUCHSIA "FF00FF"
#define pdf_GAINSBORO "DCDCDC"
#define pdf_GHOSTWHITE "F8F8FF"
#define pdf_GOLD "FFD700"
#define pdf_GOLDENROD "DAA520"
#define pdf_GRAY "808080"
#define pdf_GREEN "008000"
#define pdf_GREENYELLOW "ADFF2F"
#define pdf_HONEYDEW "F0FFF0"
#define pdf_HOTPINK "FF69B4"
#define pdf_INDIANRED "CD5C5C"
#define pdf_INDIGO "4B0082"
#define pdf_IVORY "FFFFF0"
#define pdf_KHAKI "F0E68C"
#define pdf_LAVENDER "E6E6FA"
#define pdf_LAVENDERBLUSH "FFF0F5"
#define pdf_LAWNGREEN "7CFC00"
#define pdf_LEMONCHIFFON "FFFACD"
#define pdf_LIGHTBLUE "ADD8E6"
#define pdf_LIGHTCORAL "F08080"
#define pdf_LIGHTCYAN "E0FFFF"
#define pdf_LIGHTGOLDENRODYELLOW "FAFAD2"
#define pdf_LIGHTGREEN "90EE90"
#define pdf_LIGHTGREY "D3D3D3"
#define pdf_LIGHTPINK "FFB6C1"
#define pdf_LIGHTSALMON "FFA07A"
#define pdf_LIGHTSEAGREEN "20B2AA"
#define pdf_LIGHTSKYBLUE "87CEFA"
#define pdf_LIGHTSLATEGRAY "778899"
#define pdf_LIGHTSTEELBLUE "B0C4DE"
#define pdf_LIGHTYELLOW "FFFFE0"
#define pdf_LIME "00FF00"
#define pdf_LIMEGREEN "32CD32"
#define pdf_LINEN "FAF0E6"
#define pdf_MAGENTA "FF00FF"
#define pdf_MAROON "800000"
#define pdf_MEDIUMAQUAMARINE "66CDAA"
#define pdf_MEDIUMBLUE "0000CD"
#define pdf_MEDIUMORCHID "BA55D3"
#define pdf_MEDIUMPURPLE "9370DB"
#define pdf_MEDIUMSEAGREEN "3CB371"
#define pdf_MEDIUMSLATEBLUE "7B68EE"
#define pdf_MEDIUMSPRINGGREEN "00FA9A"
#define pdf_MEDIUMTURQUOISE "48D1CC"
#define pdf_MEDIUMVIOLETRED "C71585"
#define pdf_MIDNIGHTBLUE "191970"
#define pdf_MINTCREAM "F5FFFA"
#define pdf_MISTYROSE "FFE4E1"
#define pdf_MOCCASIN "FFE4B5"
#define pdf_NAVAJOWHITE "FFDEAD"
#define pdf_NAVY "000080"
#define pdf_OLDLACE "FDF5E6"
#define pdf_OLIVE "808000"
#define pdf_OLIVEDRAB "6B8E23"
#define pdf_ORANGE "FFA500"
#define pdf_ORANGERED "FF4500"
#define pdf_ORCHID "DA70D6"
#define pdf_PALEGOLDENROD "EEE8AA"
#define pdf_PALEGREEN "98FB98"
#define pdf_PALETURQUOISE "AFEEEE"
#define pdf_PALEVIOLETRED "DB7093"
#define pdf_PAPAYAWHIP "FFEFD5"
#define pdf_PEACHPUFF "FFDAB9"
#define pdf_PERU "CD853F"
#define pdf_PINK "FFC0CB"
#define pdf_PLUM "DDADDD"
#define pdf_POWDERBLUE "B0E0E6"
#define pdf_PURPLE "800080"
#define pdf_RED "FF0000"
#define pdf_ROSYBROWN "BC8F8F"
#define pdf_ROYALBLUE "4169E1"
#define pdf_SADDLEBROWN "8B4513"
#define pdf_SALMON "FA8072"
#define pdf_SANDYBROWN "F4A460"
#define pdf_SEAGREEN "2E8B57"
#define pdf_SEASHELL "FFF5EE"
#define pdf_SIENNA "A0522D"
#define pdf_SILVER "C0C0C0"
#define pdf_SKYBLUE "87CEEB"
#define pdf_SLATEBLUE "6A5ACD"
#define pdf_SLATEGRAY "708090"
#define pdf_SNOW "FFFAFA"
#define pdf_SPRINGGREEN "00FF7F"
#define pdf_STEELBLUE "4682B4"
#define pdf_TAN "D2B48C"
#define pdf_TEAL "008080"
#define pdf_THISTLE "D8BFD8"
#define pdf_TOMATO "FF6347"
#define pdf_TURQUOISE "40E0D0"
#define pdf_VIOLET "EE82EE"
#define pdf_WHEAT "F5DEB3"
#define pdf_WHITE "FFFFFF"
#define pdf_WHITESMOKE "F5F5F5"
#define pdf_YELLOW "FFFF00"
#define pdf_YELLOWGREEN "9ACD32"

File diff suppressed because it is too large Load Diff

View File

@@ -1,965 +0,0 @@
/*
* $Id$
*/
/*
* Harbour Project source code:
* PDF low level Api for HBDOC
*
* Copyright 2000-2004 Luiz Rafael Culik <culikr /at/ brturbo.com>
* www - http://www.harbour-project.org
*
* 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 software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* 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.
*
*/
#define HB_OS_WIN_32_USED
#include <hbapi.h>
#include <hbapiitm.h>
#include "pdflib.h"
PDF *szPDFFile;
#define FONTBOLD "Courier-Bold"
#define FONTNORMAL "Courier"
#define FONTSIZE 10.0/*10.0*/
#define FONTSIZEBOLD 15.0
#define FONTSIZESMALL 10.0 /*10.0*/
#define FONTSIZETABLE 8.5
#define LEAD ((int) (FONTSIZESMALL * 1.0))
#define LEADLINK ((int) (FONTSIZESMALL * 1.3))
#define LEADTABLE ((int) (FONTSIZESMALL * 1.2))
static float fRow = 800;
static float fOldPos;
static float iWidth;
static float fCol;
static int sziFontBold = 0;
static int sziFont = 0;
static int iPage = 1;
static ULONG uiLen;
static ULONG uiCount;
static BOOL bTItems;
static BOOL bFItems;
#if 0
static float fRow = 0
#endif
static float fCurCol = 0, fCurLastCol, fLastRow;
static float fStartCol, fStartCol2;
static PHB_ITEM pArray = NULL;
static BOOL bInitArray = 0;
static float hb_checkStringWidth( const char * szString );
static float hb_pdfGetHeight( const char *szText );
static void hb_ProcessTableItem( PHB_ITEM p1, PHB_ITEM p2, PHB_ITEM p3, PHB_ITEM p4 );
float getText( PDF *p, const char *szText, int iFont, float frow, float fcol, float iw);
void setText( PDF *p, const char *szText, float frow, float fcol, float h, float iw);
HB_FUNC(HB_PDFNEW)
{
const char *szFileResult;
szFileResult= ( char * ) hb_parc( 1 );
if ( szPDFFile == NULL)
{
szPDFFile = PDF_new();
PDF_set_value( szPDFFile, "compress", ( float ) 9);
}
if ( PDF_open_file( szPDFFile, szFileResult ) == -1 )
{
hb_retl( 1 );
}
PDF_set_info( szPDFFile, "Keywords", "XHarbour compiler" );
PDF_set_info( szPDFFile, "Subject" , "XHarbour" ) ;
PDF_set_info( szPDFFile, "Title" , "XHarbour doc guide" );
PDF_set_info( szPDFFile, "Creator" , "HBDOC XHarbour Document Extractor" );
PDF_set_info( szPDFFile, "Author" , "Luiz Rafael Culik" );
sziFont = PDF_findfont( szPDFFile, FONTNORMAL, "host", 0);
sziFontBold = PDF_findfont( szPDFFile, FONTBOLD, "host", 0);
hb_retl( 0 );
}
HB_FUNC(HB_PDFNEWPAGE)
{
const char *szTitleT;
fCurCol = 0;
szTitleT= ( char * ) hb_parc( 1 );
PDF_begin_page( szPDFFile, a4_width, a4_height ); /* start a new page */
PDF_setfont( szPDFFile, sziFontBold, FONTSIZEBOLD );
PDF_show_xy( szPDFFile, szTitleT, 50, fRow -= LEAD );
}
HB_FUNC(HB_PDFENDPAGE)
{
fRow = 800;
PDF_end_page( szPDFFile ); /* close page */
iPage ++ ;
}
HB_FUNC(HB_PDFWRITEBOLDTEXT)
{
const char *szTextT;
szTextT = ( char * ) hb_parc( 1 );
if ( fRow<=40)
{
fRow=800;
PDF_end_page( szPDFFile );
sziFont = PDF_findfont( szPDFFile, FONTNORMAL, "host", 0 );
sziFontBold = PDF_findfont( szPDFFile, FONTBOLD, "host", 0 );
PDF_begin_page( szPDFFile, a4_width, a4_height ); /* start a new page */
iPage ++ ;
}
PDF_setfont( szPDFFile, sziFontBold, FONTSIZESMALL );
PDF_show_xy( szPDFFile, szTextT, 25, fRow -= LEAD );
PDF_setfont( szPDFFile, sziFont, FONTSIZESMALL );
}
HB_FUNC(HB_PDFWRITEBOLDTEXT1)
{
const char *szTextT;
szTextT = ( char * ) hb_parc( 1 );
if ( fRow <= 40 )
{
fRow = 800;
PDF_end_page( szPDFFile );
PDF_begin_page( szPDFFile, a4_width, a4_height ); /* start a new page */
sziFont = PDF_findfont( szPDFFile, FONTNORMAL, "host", 0);
sziFontBold = PDF_findfont( szPDFFile, FONTBOLD, "host", 0);
iPage ++;
}
PDF_setfont( szPDFFile, sziFontBold, FONTSIZEBOLD );
PDF_show_xy( szPDFFile, szTextT, 25, fRow -= LEAD );
PDF_setfont( szPDFFile, sziFont, FONTSIZESMALL );
}
HB_FUNC(HB_PDFWRITETEXT)
{
const char *szTextT;
szTextT = ( char * ) hb_parc( 1 );
if ( fRow <= 40 )
{
fRow=800;
PDF_end_page( szPDFFile );
sziFont = PDF_findfont( szPDFFile, FONTNORMAL, "host", 0);
sziFontBold = PDF_findfont( szPDFFile, FONTBOLD, "host", 0);
PDF_begin_page( szPDFFile, a4_width, a4_height); /* start a new page */
iPage ++;
}
PDF_setfont( szPDFFile, sziFont, FONTSIZESMALL );
PDF_show_xy( szPDFFile, szTextT, 25, fRow -= LEAD);
}
HB_FUNC(HB_PDFCLOSE)
{
hb_itemClear( pArray );
PDF_close( szPDFFile ); /* close PDF document */
PDF_delete( szPDFFile ); /* delete the PDF object */
szPDFFile=NULL;
sziFontBold=0;
sziFont=0;
}
HB_FUNC(HB_PDFWRITEARG)
{
const char *szTextT;
const char *szBTextT;
szTextT = ( char * ) hb_parc( 2 );
szBTextT = ( char * ) hb_parc( 1 );
if ( fRow <= 40 )
{
fRow = 800;
PDF_end_page( szPDFFile );
sziFont = PDF_findfont( szPDFFile, FONTNORMAL, "host", 0);
sziFontBold = PDF_findfont( szPDFFile, FONTBOLD, "host", 0);
PDF_begin_page( szPDFFile, a4_width, a4_height); /* start a new page */
iPage ++;
}
PDF_setfont( szPDFFile, sziFontBold, FONTSIZESMALL );
PDF_show_xy( szPDFFile, szBTextT, 25, fRow -= LEAD );
PDF_setfont( szPDFFile, sziFont, FONTSIZESMALL );
PDF_show( szPDFFile, szTextT );
}
HB_FUNC(HB_PDFADDLINK)
{
int iPagetoGo = hb_parni( 2 ) - 1;
const char *szLink;
szLink = ( char * ) hb_parc( 1 );
if (fRow <= 40 )
{
fRow = 800;
PDF_end_page( szPDFFile );
sziFont = PDF_findfont( szPDFFile, FONTNORMAL, "host", 0 );
sziFontBold = PDF_findfont( szPDFFile, FONTBOLD, "host", 0 );
PDF_begin_page( szPDFFile, a4_width, a4_height ); /* start a new page */
PDF_setfont( szPDFFile, sziFont, FONTSIZESMALL );
iPage ++;
}
fCol = ( float ) fRow;
iWidth = hb_checkStringWidth( szLink );
// New Page, so curCol is 0
if ( fCurCol == 0)
{
fCurCol = 60 ;
fLastRow = ( fRow - LEADLINK );
fCurLastCol = ( fCol - LEAD );
fStartCol = 49 ;
fStartCol2 = 50 ;
}
if ( fCurCol + iWidth + 10 <= a4_width )
{
PDF_set_border_color( szPDFFile, ( float ) 1 ,( float ) 1 ,( float ) 1 );
PDF_add_locallink( szPDFFile, fStartCol, fLastRow, fCurCol + iWidth, fCol, iPagetoGo, "fitwidth");
PDF_setrgbcolor( szPDFFile, ( float ) 0, ( float ) 0, ( float ) 1 );
PDF_set_parameter( szPDFFile, "underline", "true" );
PDF_show_xy( szPDFFile, szLink, fStartCol2, fCurLastCol );
PDF_setrgbcolor( szPDFFile, ( float ) 0, ( float ) 0, ( float ) 0);
PDF_set_parameter( szPDFFile, "underline", "false");
fCurCol += 10 + iWidth;
fStartCol += iWidth;
fStartCol2 += iWidth;
if( fCurCol > a4_width )
{
fCurCol = 00 ;
fStartCol = 49 ;
fStartCol2 = 50 ;
fRow -= LEADLINK;
fCol -= LEAD;
}
}
iWidth = 0 ;
}
HB_FUNC(HB_PDFINITBOOK)
{
PHB_ITEM pItems;
pItems = hb_param( 1, HB_IT_ARRAY );
uiLen = hb_arrayLen( pItems );
if ( !bInitArray )
{
pArray = hb_itemNew( NULL );
hb_arrayNew( pArray, 0 );
bInitArray = 1;
}
for ( uiCount = 1 ; uiCount <= uiLen ; uiCount++ )
{
const char *szBook = ( char * ) hb_arrayGetCPtr( pItems, uiCount );
int iLevel;
PHB_ITEM TempArray = hb_itemNew( NULL );
PHB_ITEM Temp = hb_itemNew( NULL );
hb_arrayNew( TempArray, 2 );
iLevel = PDF_add_bookmark( szPDFFile, szBook, 0, 0 );
hb_arraySetForward( TempArray, 1, hb_itemPutC( Temp, hb_arrayGetCPtr( pItems, uiCount ) ) );
hb_arraySetForward( TempArray, 2, hb_itemPutNI( Temp, iLevel) );
hb_arraySetForward( pArray, uiCount, TempArray );
hb_itemRelease( Temp );
hb_itemRelease( TempArray );
}
}
HB_FUNC(HB_PDFBOOKMARK)
{
const char *szBook1 =( char * )hb_parc( 2 );
ULONG uiPos;
PHB_ITEM TempArray = hb_itemNew( NULL );
int iParent = 0;
PHB_ITEM pBlock = hb_param( 3, HB_IT_BLOCK );
uiPos = hb_arrayScan( pArray, pBlock, NULL, NULL, FALSE );
if ( uiPos > 0 )
{
if ( hb_arrayGet( pArray, uiPos, TempArray ) )
{
iParent = hb_arrayGetNI( TempArray, 2 );
hb_itemClear( TempArray );
}
}
PDF_add_bookmark(szPDFFile, szBook1, iParent, 0);
hb_itemRelease( TempArray );
}
HB_FUNC(HB_GETPAGE)
{
hb_retni( iPage );
}
#if 0
static BOOL hb_checkRow( float iLine )
{
if ( iLine <= 20 )
{
fRow = 800;
PDF_end_page( szPDFFile );
PDF_begin_page( szPDFFile, a4_width, a4_height); /* start a new page */
iPage ++;
return TRUE;
}
return FALSE;
}
#endif
static float hb_checkStringWidth(const char *szString)
{
float fReturn;
fReturn = PDF_stringwidth( szPDFFile, szString, sziFont, FONTSIZESMALL);
return fReturn;
}
HB_FUNC(HB_PDFTABLE)
{
PHB_ITEM pTableItem ;
PHB_ITEM pTableItem1 ;
PHB_ITEM pTableItem2 ;
PHB_ITEM pTableItem3 ;
ULONG ulPos;
pTableItem = hb_param( 1, HB_IT_ARRAY );
pTableItem1 = hb_param( 2, HB_IT_ARRAY );
pTableItem2 = hb_param( 3, HB_IT_ARRAY );
pTableItem3 = hb_param( 4, HB_IT_ARRAY );
if ( pTableItem2 != NULL)
{
bTItems = TRUE;
}
if ( pTableItem3 != NULL )
{
bFItems = TRUE;
bTItems = FALSE;
}
fRow -= LEAD;
for ( ulPos = 1 ; ulPos <= hb_arrayLen( pTableItem ) ; ulPos ++ )
{
PHB_ITEM TempArray = hb_itemNew( NULL );
PHB_ITEM TempArray1 = hb_itemNew( NULL );
fCol = fRow;
hb_arrayGet( pTableItem, ulPos, TempArray );
hb_arrayGet( pTableItem1, ulPos, TempArray1 );
if ( !bTItems && !bFItems)
{
hb_ProcessTableItem( TempArray, TempArray1, NULL, NULL);
hb_itemClear( TempArray );
hb_itemClear( TempArray1 );
}
if ( bTItems && !bFItems)
{
PHB_ITEM TempArray2 = hb_itemNew( NULL );
hb_arrayGet( pTableItem2 , ulPos, TempArray2 );
hb_ProcessTableItem( TempArray, TempArray1, TempArray2, NULL );
hb_itemClear( TempArray );
hb_itemClear( TempArray1 );
hb_itemClear( TempArray2 );
hb_itemRelease( TempArray2 );
}
if (!bTItems && bFItems)
{
PHB_ITEM TempArray2 = hb_itemNew( NULL );
PHB_ITEM TempArray3 = hb_itemNew( NULL );
hb_arrayGet( pTableItem2, ulPos, TempArray2 );
hb_arrayGet( pTableItem3, ulPos, TempArray3 );
hb_ProcessTableItem( TempArray, TempArray1, TempArray2, TempArray3 );
hb_itemClear( TempArray );
hb_itemClear( TempArray1 );
hb_itemClear( TempArray2 );
hb_itemClear( TempArray3 );
hb_itemRelease( TempArray2 );
hb_itemRelease( TempArray3 );
}
}
bTItems=FALSE;
bFItems=FALSE;
fOldPos=0;
}
static void hb_ProcessTableItem( PHB_ITEM p1, PHB_ITEM p2, PHB_ITEM p3, PHB_ITEM p4)
{
ULONG ulTempPos;
ULONG ulLen;
float iitem, iitem1, iitem2,iitem3;
ulLen = hb_arrayLen( p1 );
for ( ulTempPos = 1 ; ulTempPos <= ulLen ; ulTempPos ++ )
{
const char *szTemp = ( char * ) hb_arrayGetCPtr( p1, ulTempPos );
const char *szTemp1 = ( char * ) hb_arrayGetCPtr( p2, ulTempPos );
if (!bTItems && !bFItems)
{
PDF_setfont( szPDFFile, sziFont, FONTSIZETABLE);
iitem = getText( szPDFFile, szTemp1, sziFont, 293, fRow, 261);
iitem1 = getText( szPDFFile, szTemp, sziFont, 27, fRow, 261);
if ( iitem < iitem1)
{
setText( szPDFFile, szTemp1, 293, fRow, iitem1, 261);
setText( szPDFFile, szTemp, 27, fRow, iitem1, 261);
fRow -= iitem1;
}
else
{
setText( szPDFFile, szTemp1, 293, fRow, iitem, 261);
setText( szPDFFile, szTemp, 27, fRow, iitem, 261);
fRow -= iitem;
}
}
if (bTItems && !bFItems)
{
const char * szTemp2=( char * ) hb_arrayGetCPtr( p3, ulTempPos );
PDF_setfont( szPDFFile, sziFont, FONTSIZETABLE);
iitem = getText( szPDFFile, szTemp2, sziFont, 381, fRow, 173);
iitem1 = getText( szPDFFile, szTemp1, sziFont, 204, fRow, 172);
iitem2 = getText( szPDFFile, szTemp, sziFont, 27, fRow, 172);
if ( iitem > iitem1 && iitem > iitem2)
{
setText( szPDFFile, szTemp2, 381, fRow, iitem, 173);
setText( szPDFFile, szTemp1, 204, fRow, iitem, 172);
setText( szPDFFile, szTemp , 27, fRow, iitem, 172);
fRow -= iitem;
}
if ( iitem2 > iitem && iitem2 >iitem1)
{
setText( szPDFFile, szTemp2, 381, fRow, iitem2, 173);
setText( szPDFFile, szTemp1, 204, fRow, iitem2, 172);
setText( szPDFFile, szTemp, 27, fRow, iitem2, 172);
fRow -= iitem2;
}
if ( iitem1 > iitem && iitem1 > iitem2 )
{
setText( szPDFFile, szTemp2, 381, fRow, iitem1, 173);
setText( szPDFFile, szTemp1, 204, fRow, iitem1, 172);
setText( szPDFFile, szTemp, 27, fRow, iitem1, 172);
fRow -= iitem1;
}
}
if ( !bTItems && bFItems )
{
const char * szTemp2 = ( char * ) hb_arrayGetCPtr( p3, ulTempPos );
const char * szTemp3 = ( char * ) hb_arrayGetCPtr( p4, ulTempPos );
PDF_setfont( szPDFFile, sziFont, FONTSIZETABLE);
iitem1 = getText( szPDFFile, szTemp3, sziFont, 426, fRow, 128 );
iitem2 = getText( szPDFFile, szTemp2, sziFont, 293, fRow, 128 );
iitem = getText( szPDFFile, szTemp1, sziFont, 160, fRow, 128 );
iitem3 = getText( szPDFFile, szTemp, sziFont, 27, fRow, 128 );
if (iitem > iitem1 && iitem > iitem2 && iitem > iitem3)
{
setText( szPDFFile, szTemp3, 426, fRow, iitem, 128);
setText( szPDFFile, szTemp2, 293, fRow, iitem, 128);
setText( szPDFFile, szTemp1, 160, fRow, iitem, 128);
setText( szPDFFile, szTemp, 27, fRow, iitem, 128);
fRow -= iitem;
}
else
{
if (iitem2 > iitem && iitem2 > iitem1 && iitem2 > iitem3)
{
setText( szPDFFile, szTemp3, 426, fRow, iitem2, 128);
setText( szPDFFile, szTemp2, 293, fRow, iitem2, 128);
setText( szPDFFile, szTemp1, 160, fRow, iitem2, 128);
setText( szPDFFile, szTemp, 27, fRow, iitem2, 128);
fRow -= iitem2;
}
else
{
if ( iitem1 > iitem && iitem1 > iitem2 && iitem1 > iitem3)
{
setText( szPDFFile, szTemp3, 426, fRow, iitem1, 128);
setText( szPDFFile, szTemp2, 293, fRow, iitem1, 128);
setText( szPDFFile, szTemp1, 160, fRow, iitem1, 128);
setText( szPDFFile, szTemp, 27, fRow, iitem1, 128);
fRow -= iitem1;
}
else
{
if ( iitem3 > iitem && iitem3 > iitem2 && iitem3 > iitem)
{
setText( szPDFFile, szTemp3, 426, fRow, iitem3, 128);
setText( szPDFFile, szTemp2, 293, fRow, iitem3, 128);
setText( szPDFFile, szTemp1, 160, fRow, iitem3, 128);
setText( szPDFFile, szTemp, 27, fRow, iitem3, 128);
fRow -= iitem3;
}
else
{
setText( szPDFFile, szTemp3, 426, fRow, iitem3, 128);
setText( szPDFFile, szTemp2, 293, fRow, iitem3, 128);
setText( szPDFFile, szTemp1, 160, fRow, iitem3, 128);
setText( szPDFFile, szTemp, 27, fRow, iitem3, 128);
fRow -= iitem3;
}
}
}
}
}
}
}
float getText( PDF *p, const char *szText, int iFont, float frow, float fcol, float iw )
{
float h;
int c;
h = FONTSIZETABLE * 2;
PDF_setfont( p, iFont, 7.0);
c = PDF_show_boxed( p, szText, frow, fcol, iw, h, "justify", "blind" );
while ( c > 0)
{
h += FONTSIZETABLE;
c = PDF_show_boxed(p, szText, frow, fcol, iw, h, "justify", "blind" );
}
return h;
}
void setText( PDF *p, const char *szText, float frow, float fcol, float h, float iw )
{
PDF_show_boxed( p, szText, frow, fcol, iw, h, "justify", "" );
PDF_rect( p, frow, fcol, iw + 5, h );
PDF_stroke( p );
}
const char szFontTable[ ] = {
"\xfa\0\xfa\0\xfa\0\xfa\0\x4d\x01\x4d\x01\x4d\x01\x85\x01"
"\x98\x01\x2b\x02\xa4\x01\x2b\x02\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\xf4\x01\xf4\x01\xf4\x01\xf4\x01\x41\x03\xe8\x03\x41\x03\x41\x03"
"\x0a\x03\x41\x03\x0a\x03\x0a\x03\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\xf4\x01\xf4\x01\xf4\x01\xf4\x01\x34\x02\x3a\x02\xa3\x02\x3a\x02"
"\xfa\0\xfa\0\xfa\0\xfa\0\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\xfa\0\xfa\0\xfa\0\xfa\0\x16\x01\x16\x01\x16\x01\x16\x01"
"\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\x16\x01\x4d\x01\x4d\x01\x4d\x01\x16\x01\x4d\x01\x4d\x01\x4d\x01"
"\x34\x02\x3a\x02\xa3\x02\x3a\x02\x34\x02\x3a\x02\xa3\x02\x3a\x02"
"\x34\x02\x3a\x02\xa3\x02\x3a\x02\xbc\x01\xf4\x01\xf4\x01\xf4\x01"
"\x99\x03\xa2\x03\x98\x03\x40\x03\xd2\x02\xd2\x02\x63\x02\x9b\x02"
"\x9b\x02\x9b\x02\x63\x02\x9b\x02\x9b\x02\xd2\x02\x9b\x02\x9b\x02"
"\xd2\x02\xd2\x02\xd2\x02\xd2\x02\x63\x02\x9b\x02\x63\x02\x9b\x02"
"\x2c\x02\x63\x02\x63\x02\x9b\x02\xd2\x02\x0a\x03\xd2\x02\xd2\x02"
"\xd2\x02\x0a\x03\xd2\x02\x0a\x03\x4d\x01\x85\x01\x4d\x01\x85\x01"
"\x85\x01\xf4\x01\xbc\x01\xf4\x01\xd2\x02\x0a\x03\x9b\x02\x9b\x02"
"\x63\x02\x9b\x02\x2c\x02\x63\x02\x79\x03\xb0\x03\x41\x03\x79\x03"
"\xd2\x02\xd2\x02\x9b\x02\xd2\x02\xd2\x02\x0a\x03\xd2\x02\xd2\x02"
"\x2c\x02\x63\x02\x63\x02\x63\x02\xd2\x02\x0a\x03\xd2\x02\xd2\x02"
"\x9b\x02\xd2\x02\x63\x02\x9b\x02\x2c\x02\x2c\x02\xf4\x01\x2c\x02"
"\x63\x02\x9b\x02\x2c\x02\x63\x02\xd2\x02\xd2\x02\xd2\x02\xd2\x02"
"\xd2\x02\xd2\x02\x63\x02\x9b\x02\xb0\x03\xe8\x03\x41\x03\x79\x03"
"\xd2\x02\xd2\x02\x63\x02\x9b\x02\xd2\x02\xd2\x02\x2c\x02\x63\x02"
"\x63\x02\x9b\x02\x2c\x02\x63\x02\x4d\x01\x4d\x01\x85\x01\x4d\x01"
"\x16\x01\x16\x01\x16\x01\x16\x01\x4d\x01\x4d\x01\x85\x01\x4d\x01"
"\xd5\x01\x45\x02\xa6\x01\x3a\x02\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\xbc\x01\xf4\x01\xf4\x01\xf4\x01"
"\xf4\x01\x2c\x02\xf4\x01\xf4\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01"
"\xf4\x01\x2c\x02\xf4\x01\xf4\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01"
"\x4d\x01\x4d\x01\x16\x01\x4d\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\xf4\x01\x2c\x02\xf4\x01\x2c\x02\x16\x01\x16\x01\x16\x01\x16\x01"
"\x16\x01\x4d\x01\x16\x01\x16\x01\xf4\x01\x2c\x02\xbc\x01\xf4\x01"
"\x16\x01\x16\x01\x16\x01\x16\x01\x0a\x03\x41\x03\xd2\x02\x0a\x03"
"\xf4\x01\x2c\x02\xf4\x01\x2c\x02\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\xf4\x01\x2c\x02\xf4\x01\xf4\x01\xf4\x01\x2c\x02\xf4\x01\xf4\x01"
"\x4d\x01\xbc\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01"
"\x16\x01\x4d\x01\x16\x01\x16\x01\xf4\x01\x2c\x02\xf4\x01\x2c\x02"
"\xf4\x01\xf4\x01\xbc\x01\xbc\x01\xd2\x02\xd2\x02\x9b\x02\x9b\x02"
"\xf4\x01\xf4\x01\xbc\x01\xf4\x01\xf4\x01\xf4\x01\xbc\x01\xbc\x01"
"\xbc\x01\xbc\x01\x85\x01\x85\x01\xe0\x01\x8a\x01\x90\x01\x5c\x01"
"\xc8\0\xdc\0\x13\x01\xdc\0\xe0\x01\x8a\x01\x90\x01\x5c\x01"
"\x1d\x02\x08\x02\x1d\x02\x3a\x02\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\x4d\x01\x4d\x01\x85\x01\x85\x01"
"\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\xa7\0\xa7\0\xa7\0\xa7\0\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xb4\0\x16\x01\xd6\0\x16\x01"
"\xbc\x01\xf4\x01\x2c\x02\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\x2c\x02\x2c\x02\xf4\x01\x2c\x02\x2c\x02\x2c\x02\xf4\x01\x2c\x02"
"\0\0\0\0\0\0\0\0\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\xfa\0\xfa\0\xfa\0\xfa\0\0\0\0\0\0\0\0\0"
"\xc5\x01\x1c\x02\x0b\x02\xf4\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\xbc\x01\xf4\x01\x2c\x02\xf4\x01"
"\xbc\x01\xf4\x01\x2c\x02\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\xe8\x03\xe8\x03\x79\x03\xe8\x03\xe8\x03\xe8\x03\xe8\x03\xe8\x03"
"\0\0\0\0\0\0\0\0\xbc\x01\xf4\x01\xf4\x01\xf4\x01"
"\0\0\0\0\0\0\0\0\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\0\0\0\0\0\0\0\0"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\0\0\0\0\0\0\0\0\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\xe8\x03\xe8\x03\x79\x03\xe8\x03\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\x79\x03\xe8\x03\x79\x03\xb0\x03"
"\0\0\0\0\0\0\0\0\x14\x01\x2c\x01\x14\x01\x0a\x01"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\x63\x02\x9b\x02\x2c\x02\x63\x02\xd2\x02\x0a\x03\xd2\x02\xd2\x02"
"\x79\x03\xe8\x03\xb0\x03\xb0\x03\x36\x01\x4a\x01\x36\x01\x2c\x01"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\x9b\x02\xd2\x02\x9b\x02\xd2\x02"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\x16\x01\x16\x01\x16\x01\x16\x01"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\x16\x01\x16\x01\x16\x01\x16\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
"\xd2\x02\xd2\x02\x9b\x02\xd2\x02\xf4\x01\x2c\x02\xf4\x01\xf4\x01"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x4d\x01\x16\x01\x4d\x01"
"\x63\x01\xda\x01\x63\x01\xda\x01\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x79\x03\x79\x03\x79\x03\x79\x03"
"\x9b\x02\xd2\x02\x9b\x02\xd2\x02\xde\0\x16\x01\xde\0\x16\x01"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\x85\x01\x85\x01\x85\x01\x85\x01\x48\x02\x48\x02\x48\x02\x48\x02"
"\x16\x01\x16\x01\x16\x01\x16\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01"
"\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\x16\x01\x4d\x01\x16\x01\x4d\x01\x16\x01\x4d\x01\x16\x01\x4d\x01"
"\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02"
"\x48\x02\x48\x02\x48\x02\x48\x02\x2c\x02\x63\x02\x2c\x02\x63\x02"
"\xf7\x03\xcf\x03\xf7\x03\xcf\x03\x9b\x02\xd2\x02\x9b\x02\xd2\x02"
"\x9b\x02\xd2\x02\x9b\x02\xd2\x02\xd2\x02\xd2\x02\xd2\x02\xd2\x02"
"\xd2\x02\xd2\x02\xd2\x02\xd2\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02"
"\x63\x02\x63\x02\x63\x02\x63\x02\x0a\x03\x0a\x03\x0a\x03\x0a\x03"
"\xd2\x02\xd2\x02\xd2\x02\xd2\x02\x16\x01\x16\x01\x16\x01\x16\x01"
"\xf4\x01\x2c\x02\xf4\x01\x2c\x02\x9b\x02\xd2\x02\x9b\x02\xd2\x02"
"\x2c\x02\x63\x02\x2c\x02\x63\x02\x41\x03\x41\x03\x41\x03\x41\x03"
"\xd2\x02\xd2\x02\xd2\x02\xd2\x02\x0a\x03\x0a\x03\x0a\x03\x0a\x03"
"\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x0a\x03\x0a\x03\x0a\x03\x0a\x03"
"\xd2\x02\xd2\x02\xd2\x02\xd2\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02"
"\x63\x02\x63\x02\x63\x02\x63\x02\xd2\x02\xd2\x02\xd2\x02\xd2\x02"
"\x9b\x02\x9b\x02\x9b\x02\x9b\x02\xb0\x03\xb0\x03\xb0\x03\xb0\x03"
"\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02"
"\x63\x02\x63\x02\x63\x02\x63\x02\x16\x01\x4d\x01\x16\x01\x4d\x01"
"\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x4d\x01\x16\x01\x4d\x01"
"\xd5\x01\x48\x02\xd5\x01\x48\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\xde\0\x16\x01\xde\0\x16\x01\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\x2c\x02\x63\x02\x2c\x02\x63\x02\xf4\x01\x2c\x02\xf4\x01\x2c\x02"
"\x2c\x02\x63\x02\x2c\x02\x63\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\x16\x01\x4d\x01\x16\x01\x4d\x01\x2c\x02\x63\x02\x2c\x02\x63\x02"
"\x2c\x02\x63\x02\x2c\x02\x63\x02\xde\0\x16\x01\xde\0\x16\x01"
"\xde\0\x16\x01\xde\0\x16\x01\xf4\x01\x2c\x02\xf4\x01\x2c\x02"
"\xde\0\x16\x01\xde\0\x16\x01\x41\x03\x79\x03\x41\x03\x79\x03"
"\x2c\x02\x63\x02\x2c\x02\x63\x02\x2c\x02\x63\x02\x2c\x02\x63\x02"
"\x2c\x02\x63\x02\x2c\x02\x63\x02\x2c\x02\x63\x02\x2c\x02\x63\x02"
"\x4d\x01\x85\x01\x4d\x01\x85\x01\xf4\x01\x2c\x02\xf4\x01\x2c\x02"
"\x16\x01\x4d\x01\x16\x01\x4d\x01\x2c\x02\x63\x02\x2c\x02\x63\x02"
"\xf4\x01\x2c\x02\xf4\x01\x2c\x02\xd2\x02\x0a\x03\xd2\x02\x0a\x03"
"\xf4\x01\x2c\x02\xf4\x01\x2c\x02\xf4\x01\x2c\x02\xf4\x01\x2c\x02"
"\xf4\x01\xf4\x01\xf4\x01\xf4\x01\x4e\x01\x85\x01\x4e\x01\x85\x01"
"\x04\x01\x18\x01\x04\x01\x18\x01\x4e\x01\x85\x01\x4e\x01\x85\x01"
"\x48\x02\x48\x02\x48\x02\x48\x02\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\xa7\0\xa7\0\xa7\0\xa7\0\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\x2c\x02\x2c\x02\x2c\x02\x2c\x02\xbf\0\xee\0\xbf\0\xee\0"
"\x4d\x01\xf4\x01\x4d\x01\xf4\x01\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\xf4\x01\x63\x02\xf4\x01\x63\x02\xf4\x01\x63\x02\xf4\x01\x63\x02"
"\0\0\0\0\0\0\0\0\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\x16\x01\x16\x01\x16\x01\x16\x01\0\0\0\0\0\0\0\0"
"\x19\x02\x2c\x02\x19\x02\x2c\x02\x5e\x01\x5e\x01\x5e\x01\x5e\x01"
"\xde\0\x16\x01\xde\0\x16\x01\x4d\x01\xf4\x01\x4d\x01\xf4\x01"
"\x4d\x01\xf4\x01\x4d\x01\xf4\x01\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
"\xe8\x03\xe8\x03\xe8\x03\xe8\x03\xe8\x03\xe8\x03\xe8\x03\xe8\x03"
"\0\0\0\0\0\0\0\0\x63\x02\x63\x02\x63\x02\x63\x02"
"\0\0\0\0\0\0\0\0\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\0\0\0\0\0\0\0\0"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\0\0\0\0\0\0\0\0\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
"\xe8\x03\xe8\x03\xe8\x03\xe8\x03\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\xe8\x03\xe8\x03\xe8\x03\xe8\x03"
"\0\0\0\0\0\0\0\0\x72\x01\x72\x01\x72\x01\x72\x01"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\x2c\x02\x63\x02\x2c\x02\x63\x02\x0a\x03\x0a\x03\x0a\x03\x0a\x03"
"\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x6d\x01\x6d\x01\x6d\x01\x6d\x01"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\x79\x03\x79\x03\x79\x03\x79\x03"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\x16\x01\x16\x01\x16\x01\x16\x01"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\xde\0\x16\x01\xde\0\x16\x01\x63\x02\x63\x02\x63\x02\x63\x02"
"\xb0\x03\xb0\x03\xb0\x03\xb0\x03\x63\x02\x63\x02\x63\x02\x63\x02"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
"\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
};
const int szFontTable_size = 5376 ;
HB_FUNC( CALCDATA )
{
int rowsperstrip = hb_parnd( 1 );
float y = hb_parnd( 2 );
float h = hb_parnd( 3 );
int row, res;
int p;
for( row = 0 ; row < h ; row += rowsperstrip )
{
int height = row + rowsperstrip > h ? h - row :rowsperstrip;
p = ( h - row - height );
res = y + 1 * p;
}
hb_retni( res );
}

View File

@@ -1,35 +0,0 @@
/*
* $Id$
*/
/* Defines */
#define FONTBOLD "Courier-Bold"
#define FONTNORMAL "Courier"
#define FONTSIZEBOLD 15.0
#define FONTSIZETABLE 8.5
#define LEADLINK ( (fontSizePoints * 1.3))
#define LEADTABLE ( (fontSizePoints * 1.2))
#define a0_width 2380.0
#define a0_height 3368.0
#define a1_width 1684.0
#define a1_height 2380.0
#define a2_width 1190.0
#define a2_height 1684.0
#define a3_width 842.0
#define a3_height 1190.0
#define a4_width 595.0
#define a4_height 842.0
#define a5_width 421.0
#define a5_height 595.0
#define a6_width 297.0
#define a6_height 421.0
#define b5_width 501.0
#define b5_height 709.0
#define letter_width 612.0
#define letter_height 792.0
#define legal_width 612.0
#define legal_height 1008.0
#define ledger_width 1224.0
#define ledger_height 792.0
#define p11x17_width 792.0
#define p11x17_height 1224.0

View File

@@ -1,936 +0,0 @@
/*
* $Id$
*/
/*
* Harbour Project source code:
* PDF api Api for multiple porpurse
*
* Copyright 2000-2004 Luiz Rafael Culik <culikr /at/ brturbo.com>
* www - http://www.harbour-project.org
*
* 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 software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* 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.
*
*/
#include "pdfhbdoc.ch"
#include "common.ch"
#INCLUDE "pdf.ch"
/*Variaveis Staticas */
STATIC lLandScape := .F.
STATIC fontSizePoints := 10.0 /*10.0*/
STATIC NumofRows
STATIC LEAD := 10
STATIC iRow := 800
STATIC fCurrentRowSetting := 800
STATIC fOldPos
STATIC iWidth
STATIC iCol
STATIC sziFontBold := 0
STATIC fFootBottom := 40
STATIC fColumn := 10
STATIC sziFont := 0
STATIC fPageWidth := a4_width
STATIC fPageHeigth := a4_height
STATIC iPage := 1
STATIC uiLen
STATIC uiCount
STATIC bTItems
STATIC bFItems
STATIC szUserpass
STATIC iLastLinkPos := 0
STATIC oPdf
FUNCTION pdf_GetLandScape()
RETURN lLandScape
STATIC FUNCTION setBox( irow, icol, h, iw )
opdf:PDF_RECT( irow, icol, h, iw )
opdf:PDF_STROKE()
RETURN NIL
FUNCTION HB_PDFNEW( szFileResult, fontsize, iStartRow, iBottom, iStartCol, iEndBottom, szMasterPass, szPass )
DEFAULT fontsize TO fontSizePoints
DEFAULT iStartRow TO fPageWidth
DEFAULT iBottom TO fPageHeigth
DEFAULT iStartCol TO fColumn
DEFAULT iEndBottom TO fFootBottom
DEFAULT szMasterPass TO ""
DEFAULT szPass TO ""
szFileResult := Lower( szFileResult )
oPdf := TPdf():New( szFileResult,, iStartRow, iBottom )
IF oPdf == NIL
RETURN .f.
ENDIF
fColumn := iStartCol
oPdf:SetTop( iRow ) // top
oPdf:SetLeft( fColumn ) // left & right
oPdf:SetBottom( iEndBottom )
fPageWidth := iStartRow
fPageHeigth := iBottom
fontSizePoints := fontsize
LEAD := fontSizePoints
/* Ajusta Coluna inicial/rodapé e o numero atual de linhas por pagina */
iRow := iStartRow - iEndBottom
fCurrentRowSetting := iRow
fFootBottom := iEndBottom
fColumn := iStartCol
NumofRows := iRow / fontSizePoints
RETURN .T.
FUNCTION HB_PDFENDPAGE
iRow := fCurrentRowSetting
opdf:PDFCLOSEpage() /* close page */
iPage ++
iLastLinkPos := 0
RETURN NIL
FUNCTION HB_PDFNEWPAGE( szTitleT, szFile )
oPdf:pdfNewPage( "A4", Iif( fPageHeigth < fPageWidth, "P", "L" ),, "Courier", 0 )
IF Ischaracter( szFile )
IF lLandScape .OR. opdf:aReport[ PAGEORIENT ] == "L"
oPdf:pdfImage( szFile, 490 / 0.4, 60, 126, 126,, 0.4, 0.4 )
ELSE
oPdf:pdfImage( szFile, 755 / 0.4, 20, 126, 126,, 0.4, 0.4 )
ENDIF
ENDIF
oPdF:PDFsetfont( "Courier", 1, FONTSIZEBOLD )
oPdf:pdfAtSay( szTitleT, iRow -= 15, fColumn, .T. )
RETURN nil
FUNC HB_PDFWRITETEXT( cText )
IF ( iRow <= fFootBottom )
iRow := fCurrentRowSetting
opdf:PDFCLOSEpage()
//PDF_begin_page(szPDFFile, fPageWidth, fPageHeigth) /* start a new page */
oPdf:pdfNewPage( "A4", Iif( fPageHeigth < fPageWidth, "P", "L" ),, "Courier", 0 )
iLastLinkPos := 0
iPage ++
ENDIF
opdf:PDFsetfont( FONTNORMAL, 0, fontSizePoints )
opdf:pdfAtSay( cText, iRow -= LEAD, fColumn, .T. )
RETURN nil
FUNC HB_PDFWRITEBOLDTEXT( ctext )
IF ( iRow <= fFootBottom )
iRow := fCurrentRowSetting
opdf:PDFCLOSEpage()
//PDF_begin_page(szPDFFile, fPageWidth, fPageHeigth) /* start a new page */
oPdf:pdfNewPage( "A4", Iif( fPageHeigth < fPageWidth, "P", "L" ),, "Courier", 1 )
iLastLinkPos := 0
iPage ++
ENDIF
opdf:PDFsetfont( FONTNORMAL, 1, fontSizePoints )
opdf:pdfAtSay( cText, iRow -= LEAD, fColumn, .T. )
RETURN nil
FUNC HB_PDFWRITETEXTBOLD1( cText )
IF ( iRow <= fFootBottom )
iRow := fCurrentRowSetting
opdf:PDFCLOSEpage()
//PDF_begin_page(szPDFFile, fPageWidth, fPageHeigth) /* start a new page */
oPdf:pdfNewPage( "A4", Iif( fPageHeigth < fPageWidth, "P", "L" ),, "Courier", 1 )
iLastLinkPos := 0
iPage ++
ENDIF
opdf:PDFsetfont( FONTNORMAL, 1, FONTSIZEBOLD )
opdf:pdfAtSay( cText, iRow -= LEAD, fColumn, .T. )
// PDFsetfont(FONTNORMAL,0, fontSizePoints)
RETURN nil
FUNCTION HB_PDFCLOSE
opdf:pdfclose()
fontSizePoints := 10.0 /*10.0*/
LEAD := 10
iRow := 800
fCurrentRowSetting := 800
lLandScape := .F.
RETURN nil
/* FUNCAO PDFMAXLINES()
Essa funcao retorna o numero maximo de linhas por pagina de
acordo com a fonte setada.
*/
FUNCTION PDFMAXLINES
RETURN NumofRows
/* FUNCAO PDFMAXCOLS()
Essa funcao retorna o numero maximo de colunas por pagina de
acordo com a fonte setada.
*/
FUNCTION PDFMAXCOLS
RETURN ( ( fPageWidth - 2 * fColumn ) / fontSizePoints )
FUNCTION PDFWRITETEXTAT( cText, iThisRow, iThisCol )
LOCAL currow
iThisRow := Iif( Isnumber( iThisRow ), fCurrentRowSetting - RowtoPoint( iThisRow ), iRow )
iThisCol := RowtoPoint( iThisCol )
currow := iRow
opdf:PDFsetfont( FONTNORMAL, 0, fontSizePoints )
opdf:pdfAtSay( cText, iThisRow, iThisCol, .T. )
RETURN Nil
FUNCTION POINTTOROW( iPt )
LOCAL thisRow
thisRow := iPt / FONTSIZEPOINTS
RETURN NUMOFROWS - thisRow
FUNCTION ROWTOPOINT( ThisRow )
RETURN thisRow * FONTSIZEPOINTS
/* FUNCAO PDFWRITETABLE(nRow, nCol , aTableCols, aLenCol,nNumLines, nStyle)
Parametros
nRow -> Linha onde tabela inicia
nCol -> Coluna onde tabela inicia
aTableCols -> Array de Items da coluna
aLenCol -> Array com as larguras da coluna
nNumLines -> Numero de linhas da tabela
nStyle -> Stilo da tabela
*/
FUNCTION PDFWRITETABLE( nRow, nCol, pArray, pCol, fNumLines, nStyle )
LOCAL ulTempPos
LOCAL ulTempPos1
LOCAL fRow := GraphRowtoPoint( nRow ) - 0.5 * fontSizePoints
LOCAL fCol := RowtoPoint( nCol )
LOCAL nNumLines := fNumLines
LOCAL fThisRow := RowtoPoint( nRow )
LOCAL fCurRow := fNumLines + 0.5 * fontSizePoints
LOCAL fLinesDiff := fNumLines - fRow
LOCAL DiffFromRow := fRow - iRow
LOCAL fLen := 0
LOCAL fCurrRow := fRow
LOCAL fTemp
LOCAL fOldCol := fCol
LOCAL pTemp
LOCAL nLineGen
LOCAL fBoxSize
LOCAL fLastRow
LOCAL cItem
DEFAULT pArray TO NIL
SWITCH( nStyle )
CASE 0
FOR Each pTemp in pCol
fLen += RowtoPoint( pTemp )
NEXT
setBox( fCol, fRow, fLen, - fCurRow )
FOR EACH pTemp IN pArray
fRow -= LEAD
IF Isarray( pTemp )
fCol := fOldCol
FOR each cItem IN pTemp
ultempPos1 := hb_enumindex()
opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )
fCol += RowtoPoint( pCol[ ulTempPos1 ] )
NEXT
ENDIF
NEXT
iRow -= fNumLines + fontSizePoints
EXIT
CASE 1
fTemp := - fCurRow
fCol := fOldCol
FOR each pTemp in pCol
setBox( fCol, fRow, RowtoPoint( pTemp ), - fCurRow + ( 1 * fontSizePoints ) )
fCol += RowtoPoint( pTemp )
NEXT
FOR each pTemp IN pArray
IF Isarray( pTemp )
fRow -= LEAD
fCol := fOldCol
FOR each cItem in pTemp
ulTempPos1 := hb_enumindex()
opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )
fCol += RowtoPoint( pCol[ ulTempPos1 ] )
NEXT
ENDIF
NEXT
iRow -= fNumLines + fontSizePoints
EXIT
CASE 2
nLineGen := 0
fBoxSize := 0
fLastRow := fRow
fTemp := - fCurRow
fLen := fRow
FOR each pTemp in pCol
fBoxSize += RowtoPoint( pTemp )
NEXT
WHILE ( nLineGen < nNumLines )
setBox( fCol, fLen, fBoxSize, - fontSizePoints * 1.5 )
fLen -= fontSizePoints * 1.5
nLineGen += 2
ENDDO
fRow := fCurrRow
fLen := fRow
nLineGen := 0
FOR EACH pTemp IN pCol
WHILE ( nLineGen < nNumLines )
setBox( fCol, fLen, RowtoPoint( pTemp ), - fontSizePoints * 1.5 )
fLen -= fontSizePoints * 1.5
nLineGen += 2
ENDDO
fCol += RowtoPoint( pTemp )
fLen := fRow
nLineGen := 0
NEXT
fCol := fOldCol
fRow := fLastRow
fRow -= LEAD
FOR EACH pTemp in pArray
ulTempPos := hb_enumindex()
IF Isarray( pTemp )
//if ( hb_arrayGet(pArray, ulTempPos,pTemp))
fCol := fOldCol
FOR each cItem in pTemp
// PDF_show_xy( szPDFFile, hb_arrayGetCPtr( pTemp , ulTempPos1 ), fCol+1 , fRow )
opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )
fCol += RowtoPoint( pCol[ hb_enumindex() ] )
NEXT
fRow -= LEAD
IF ( ulTempPos == 1 )
fRow += LEAD / 2
ELSE
fRow -= LEAD / 2
ENDIF
ENDIF
IF ( ulTempPos == 1 )
fRow -= LEAD
ENDIF
NEXT
iRow -= fNumLines + fontSizePoints
EXIT
CASE 3
fBoxSize := 0
fLastRow := fRow
fTemp := - fCurRow
fLen := fRow
FOR EACH pTemp in pCol
fBoxSize += RowtoPoint( pTemp )
NEXT
fTemp := - fCurRow
setBox( fCol, fRow, fBoxSize, - ( 1.5 * fontSizePoints ) )
fTemp := fCurRow
fNumLines -= RowtoPoint( 3 )
fCurRow := fNumLines + 0.5 * fontSizePoints
setBox( fCol, fRow - 1.5 * fontSizePoints, fBoxSize, - fCurRow + ( 1.0 * fontSizePoints ) )
fRow := fCurrRow
fCol := fOldCol
FOR EACH pTemp In pCol
// if (ulTempPos == 1 ||ulTempPos == 2 )
setBox( fCol, fRow, RowtoPoint( pTemp ), - ( 1.5 * fontSizePoints ) )
// else
setBox( fCol, fRow - 1.5 * fontSizePoints, RowtoPoint( pTemp ), - fCurRow + ( 1.0 * fontSizePoints ) )
fCol += RowtoPoint( pTemp )
NEXT
fRow -= LEAD
FOR EACH pTemp in pArray
ulTempPos := hb_enumindex()
IF Isarray( ptemp )
fCol := fOldCol
FOR each cItem in pTemp
ulTempPos1 := hb_enumindex()
IF ( ulTempPos == 1 )
opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )
ELSE
opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )
ENDIF
fCol += RowtoPoint( pCol[ ulTempPos1 ] )
NEXT
fRow -= LEAD
IF ( ulTempPos == 1 )
fRow += LEAD / 2
ENDIF
ENDIF
IF ( ulTempPos == 1 )
fRow -= LEAD
ENDIF
NEXT
iRow -= fNumLines + fontSizePoints
EXIT
CASE 4
// printf("estou case 3 \n")
fBoxSize := 0
fLastRow := fRow
fTemp := - fCurRow
FOR each pTemp in pCol
fBoxSize += RowtoPoint( pTemp )
NEXT
setBox( fCol, fRow, fBoxSize, - ( fontSizePoints * 1.5 ) )
setBox( fCol, fRow - ( fNumLines + 0.5 * fontSizePoints ) + ( 1.5 * fontSizePoints ), fBoxSize, + ( fontSizePoints * 1.5 ) )
fCol := fOldCol
FOR EACH pTemp IN pCol
setBox( fCol, fRow, RowtoPoint( pTemp ), - fCurRow + ( 1.5 * fontSizePoints ) )
fCol += RowtoPoint( pTemp )
NEXT
FOR each pTemp in pArray
ulTempPos := hb_enumindex()
IF Isarray( pTemp )
fRow -= LEAD
fCol := fOldCol
FOR each cItem in pTemp
ulTempPos1 := hb_enumindex()
IF ulTempPos == Len( pTemp )
opdf:pdfAtSay( cItem, fRow - ( 0.5 * fontSizePoints ), fCol + 1, .T. )
ELSEIF ulTempPos == 1
opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )
ELSE
opdf:pdfAtSay( cItem, fRow - ( 0.5 * fontSizePoints ), fCol + 1, .T. )
ENDIF
fCol += RowtoPoint( pCol[ ulTempPos1 ] )
NEXT
fRow -= LEAD
ENDIF
NEXT
iRow -= fNumLines + fontSizePoints
EXIT
CASE 5
fBoxSize := 0
FOR each pTemp in pCol
fBoxSize += RowtoPoint( pTemp )
NEXT
setBox( fCol, fRow, fBoxSize, - ( 1.5 * fontSizePoints ) )
fNumLines -= RowtoPoint( 3 )
fCurRow := fNumLines + 0.5 * fontSizePoints
setBox( fCol, fRow - 1.5 * fontSizePoints, fBoxSize, - fCurRow + ( 2 * fontSizePoints ) )
fRow -= LEAD
FOR EACH pTemp in pArray
ulTempPos := hb_enumindex()
IF Isarray( ptemp )
fCol := fOldCol
FOR each cItem in pTemp
ulTempPos1 := hb_enumindex()
opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )
fCol += RowtoPoint( pCol[ ulTempPos1 ] )
NEXT
fRow -= LEAD
IF ( ulTempPos == 1 )
fRow += LEAD / 2
ENDIF
ENDIF
IF ( ulTempPos == 1 )
fRow -= LEAD
ENDIF
NEXT
iRow -= fNumLines + fontSizePoints
EXIT
CASE 6
nLineGen := 0
fBoxSize := 0
fTemp := - fCurRow
fLen := fRow
FOR each pTemp in pCol
fBoxSize += RowtoPoint( pTemp )
NEXT
WHILE ( nLineGen < nNumLines )
setBox( fCol, fLen, fBoxSize, - fontSizePoints * 1.5 )
fLen -= fontSizePoints * 1.5
nLineGen += 2
ENDDO
fRow -= LEAD
FOR each pTemp in pArray
ulTempPos := hb_enumindex()
IF Isarray( ptemp )
fCol := fOldCol
FOR each cItem in pTemp
ulTempPos1 := hB_enumIndex()
opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )
fCol += RowtoPoint( pCol[ ulTempPos1 ] )
NEXT
fRow -= LEAD
IF ( ulTempPos == 1 )
fRow += LEAD / 2
ELSE
fRow -= LEAD / 2
ENDIF
ENDIF
IF ( ulTempPos == 1 )
fRow -= LEAD
ENDIF
NEXT
iRow -= fNumLines + fontSizePoints
EXIT
END
RETURN 0
FUNCTION GraphRowtoPoint( thisRow )
RETURN fCurrentRowSetting - ( thisRow * fontSizePoints )
STATIC FUNCTION inverty( y )
RETURN fCurrentRowSetting - y
FUNCTION PDFTEXTBOXED2( pText, pEnd, pStart, lDecRow, lBold )
LOCAL iSize
LOCAL sLastSize := 0
LOCAL ulTempPos := 0
LOCAL cText
DEFAULT lBold TO .F.
iSize := PdfMaxBoxSize( pText, Iif( lBold, 1, 0 ), pEnd, iRow, pStart )
FOR each cText in pText
setText( cText, pStart[ hb_enumindex() ], iRow, iSize, pEnd[ hb_enumindex() ], lBold )
NEXT
IF ( lDecRow )
iRow -= iSize
ENDIF
RETURN nil
/* FUNCAO PDFNEW( Nome,Tamanho fonte,largura pagina, altura pagina,coluna inicial,linha final,Senhamestre,SenhaNormal, aInfo)
Parametros:
Nome -> Nome do arquivo a ser criado
Tamanho fonte -> Tamanho da fonte a ser usada nesse documento
largura pagina -> Tamanho da largura da pagina
altura paginas -> Tamanho da altura da pagina
coluna inicial -> Coluna inicial do texto
linha final -> Linha final do texto (
Senhamestre -> senha mestre de protecao
SenhaNormal -> senha do arquivo
aInfo -> Array de caracteres contendo informacoes do arquivo
Array nesse Formato -> { Keywords,Subject,Title,Creator,Author}
retorna verdadeiro se o arquivo foi criado, senao falso
*/
FUNCTION Pdfnew( szFileresult, fontsize, iStartRow, iBottom, iStartCol, iEndBottom, szMasterPass, szPass, ainfo )
DEFAULT fontsize TO fontSizePoints
DEFAULT iStartRow TO fPageWidth
DEFAULT iBottom TO fPageHeigth
DEFAULT iStartCol TO fColumn
DEFAULT iEndBottom TO fFootBottom
DEFAULT szMasterPass TO Nil
DEFAULT szPass TO Nil
oPdf := TPdf():New( szFileResult,, iStartRow, iBottom )
IF oPdf == NIL
RETURN 0
ENDIF
/* Ajusta fonte da geração e numero de linhas para pulos */
fontSizePoints := fontsize
LEAD := fontSizePoints
/* Ajusta Coluna inicial/rodapé e o numero atual de linhas por pagina */
fPageWidth := iStartRow
fPageHeigth := iBottom
iRow := iStartRow - iEndBottom
IF ( iRow > 800 )
iRow := 800
ENDIF
NumofRows := iRow / fontSizePoints
fCurrentRowSetting := iRow
fFootBottom := iEndBottom
fColumn := iStartCol
IF Isarray( aInfo )
opdf:PDFINFO( aInfo[ 1 ], aInfo[ 5 ], aInfo[ 2 ], aInfo[ 4 ] )
ENDIF
RETURN 1
FUNCTION PDFEND
opdf:PDFclose() /* close PDF document */
fontSizePoints := 10.0 /*10.0*/
LEAD := 10
iRow := 800
fCurrentRowSetting := 800
sziFontBold := 0
fFootBottom := 40
fColumn := 10
sziFont := 0
fPageWidth := a4_width
fPageHeigth := a4_height
iPage := 1
lLandScape := .F.
RETURN nil
/* PDFSETUNDERLINE( lUnder )
Parametros
lUnder -> Flag the informa se e para usar underline ou nao
retorna o ultimo setting
*/
FUNCTION PDFSETUNDERLINE( lSet )
RETURN opdf:SetUnderline( lSet )
/* PDFSETOVERLINE( lUnder )
Parametros
lUnder -> Flag the informa se e para usar overline ou nao
retorna o ultimo setting
*/
FUNCTION PDFSETOVERLINE( l )
RETURN opdf:SetOverline( l )
/* FUNCAO PDFSTARTPAGE( aHead,llShowHeader)
PARAMETROS
aHead -> Array que contem os cabecalhos das colunas
llShowHeader -> flag que indica de e para criar uma nova pagina
*/
FUNCTION PDFSTARTPAGE( aPage, bOpenPage )
LOCAL cItem
LOCAL i
DEFAULT bOpenPage TO .f.
IF ( bOpenPage )
opdf:pdfNewPage( "A4", Iif( fPageHeigth < fPageWidth, "P", "L" ),, "Courier", 0 )
ENDIF
FOR each citem in aPage
i := hb_enumindex()
IF ( i == 1 )
opdf:PDFsetfont( "Courier", 1, FONTSIZEBOLD )
opdf:pdfAtSay( cItem, iRow -= 15, fColumn, .T. )
ELSE
opdf:PDFsetfont( "Courier", 0, fontSizePoints )
opdf:pdfAtSay( cItem, iRow -= LEAD, fColumn, .T. )
ENDIF
NEXT
RETURN nil
/* FUNCAO PDFDRAWPAGE( aPage)
Parametros
aPage -> Array com items a escrever na PDF
bOnNewPage -> Code block para evaluar se pagina acabar
*/
FUNCTION PDFDRAWPAGE( aPage, bOnNewPage )
LOCAL cItem
FOR each cItem in aPage
/* testa se a pagina acabou */
IF ( iRow <= fFootBottom )
iRow := fCurrentRowSetting
opdf:pdfClosePage()
iLastLinkPos := 0
opdf:pdfNewPage( "A4", Iif( fPageHeigth < fPageWidth, "P", "L" ),, "Courier", 0 )
iPage ++
IF isblock( bOnNewPage )
Eval( bOnNewPage )
ENDIF
ENDIF
opdf:PDFsetfont( "Courier", 0, fontSizePoints )
opdf:pdfAtSay( cItem, iRow -= LEAD, fColumn, .T. )
NEXT
RETURN nil
/* FUNCAO PDFENDPAGE()
fecha a pagina em criacao
*/
FUNCTION PDFENDPAGE
iRow := fCurrentRowSetting
opdf:PDFclosepage() /* close page */
iPage ++
iLastLinkPos := 0
RETURN nil
STATIC FUNCTION SetText( szText, irow, icol, h, iw, bBold )
opdf:PDFsetfont( "Courier", Iif( bBold, 1, 0 ), fontSizePoints )
opdf:PDF_rect( irow, icol, iw + 5, h )
opdf:PDF_stroke()
// PDF_show_boxed(p, szText, irow, icol, iw, h, "center", "")
opdf:pdfText( szText, iRow, iCol, iw, 0, 2 )
RETURN nil
FUNCTION getText( szText, iFont, irow, icol, iw )
LOCAL h
LOCAL c
HB_SYMBOL_UNUSED( iFont )
h := fontSizePoints * 2.1
c := opdf:pdfTextCount( szText, irow, icol, iw, 0, 2 )
h += fontSizePoints * c
RETURN h
FUNCTION PdfMaxBoxSize( pText, iFont, pEnd, iw, pStart )
LOCAL fMax := 0
LOCAL fCurrentSize
LOCAL ulTempPos
HB_SYMBOL_UNUSED( iw )
FOR ulTempPos := 1 TO Len( pText )
fCurrentSize := getText( pText[ ulTempPos ], iFont, pStart[ ulTempPos ], iRow, pEnd[ ulTempPos ] )
fMax := Iif( fCurrentSize > fMax, fCurrentSize, fMax )
NEXT
RETURN fMax
FUNCTION PDFHR( fPos, fStart )
DEFAULT fPos TO Iif( lLandScape, fPageWidth - fColumn, fPageHeigth - fColumn )
DEFAULT fStart TO fColumn
opdf:PDFmoveto( fStart * fontSizePoints, iRow - LEAD / 2 )
opdf:PDFlineto( fPos * fontSizePoints, iRow - LEAD / 2 )
iRow -= LEAD
opdf:PDF_stroke( )
RETURN NIL
/*
FUNCAO PDFPAGENUMBER()
Retorna o numero da pagina atual sendo construida
*/
FUNCTION PDFPAGENUMBER
RETURN iPage
/* FUNCAO PDFCURRENTLINE()
retorna a linha atual
*/
FUNCTION PDFCURRENTLINE
RETURN PointtoRow( iRow )
/* FUNCAO PDFNEWLINE()
incremanta a linha atual
*/
PROCEDURE PDFNEWLINE
iRow -= LEAD
RETURN
FUNCTION PDFPLACEIMAGE( szfile, row, col, scale_y )
// int image;
LOCAL scale_x
row := RowtoPoint( row )
col := RowtoPoint( col )
col := inverty( col )
scale_x := 0.40
scale_y := Iif( Isnumber( scale_y ), scale_y / 100, 0.40 )
opdf:PdfImage( szfile, row / scale_y, col )
RETURN nil
FUNCTION HB_SETLANDSCAPE( lLand )
lLandScape := lLand
// oPdf:pdfPageOrient( Iif( lLand, "L", "P" ) )
RETURN nil
FUNCTION Pdfcomplevel( X )
opdf:PdfCompLevel( x )
RETURN NIL
/*FUNCAO PDFBOXCOLOR(nRed,nGreen,nBlue)
Parametros
nRed -> Quantidade de vermelho na composicao da cor ( valor entre 0 a 255)
nGreen -> Quantidade de verde na composicao da cor ( valor entre 0 a 255)
nBlue -> Quantidade de azul na composicao da cor ( valor entre 0 a 255)
*/
FUNCTION PDFBOXCOLOR( R, G, B )
oPdf:PDFsetrgbcolor( R / 255, G / 255, B / 255 )
RETURN NIL
FUNCTION PDFTEXTCOLOR( R, G, B )
oPdf:PDFsetrgbcolor( R / 255, G / 255, B / 255 )
RETURN NIL