Added PDFlib lite 5.0.3 which is required to build the PDF printer driver.

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9230 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Michael Pfeiffer 2004-10-06 17:51:27 +00:00
parent 9f61371bd2
commit ffe881b8a5
342 changed files with 140837 additions and 0 deletions

View File

@ -0,0 +1,8 @@
# PDFlib bindings Makefile
# $Id: Makefile,v 1.1 2004/10/06 17:46:38 laplace Exp $
include ../config/mkcommon.inc
SUB_DIRS = $(BINDTARGETS)
include ../config/mksubdirs.inc

View File

@ -0,0 +1,86 @@
# Makefile for PDFlib C samples, C language binding
# $Id: Makefile,v 1.1 2004/10/06 17:46:38 laplace Exp $
top_builddir = ../../..
include $(top_builddir)/config/mkcommon.inc
DEPLIBS = $(PDFLIBLINK)
LIBS = $(DEPLIBS) $(EXTERNALLIBS)
INCLUDES = $(PDFLIBINC) $(PDCORELIBINC)
FLAGS = $(LDFLAGS) $(CPPFLAGS) $(CFLAGS)
# the following is platform-specific
DLLIB = -ldl
# ------------------------------
SRC = \
$(srcdir)/chartab.c \
$(srcdir)/hello.c \
$(srcdir)/hellodl.c \
$(srcdir)/image.c \
$(srcdir)/pdfclock.c \
$(srcdir)/invoice.c \
$(srcdir)/businesscard.c \
$(srcdir)/quickreference.c \
$(srcdir)/smoketest.c \
$(srcdir)/smoketestdl.c
PROGS = \
hello$(EXE) \
image$(EXE) \
pdfclock$(EXE) \
chartab$(EXE) \
invoice$(EXE) \
businesscard$(EXE) \
quickreference$(EXE)
include $(top_builddir)/config/mkprogs.inc
test:: $(PROGS)
-./hello
-./image
-./pdfclock
-./chartab
-./invoice
-./businesscard
-./quickreference
smoke:: test smoketest$(EXE)
-./smoketest
clean::
$(RM) chartab.pdf hello.pdf image.pdf pdfclock.pdf invoice.pdf
$(RM) smoketest$(EXE) smoketestdl$(EXE) smoke_c_?.pdf smoke_cdl_?.pdf
$(RM) hellodl hellodl.pdf businesscard.pdf quickreference.pdf
hello$(EXE): hello.c $(DEPLIBS)
$(PROGS_BUILD)
image$(EXE): image.c $(DEPLIBS)
$(PROGS_BUILD)
pdfclock$(EXE): pdfclock.c $(DEPLIBS)
$(PROGS_BUILD)
chartab$(EXE): chartab.c $(DEPLIBS)
$(PROGS_BUILD)
invoice$(EXE): invoice.c $(DEPLIBS)
$(PROGS_BUILD)
businesscard$(EXE): businesscard.c $(DEPLIBS)
$(PROGS_BUILD)
quickreference$(EXE): quickreference.c $(DEPLIBS)
$(PROGS_BUILD)
smoketest$(EXE): smoketest.c $(DEPLIBS)
$(PROGS_BUILD)
smoketestdl$(EXE): smoketestdl.c pdflibdl.c $(DEPLIBS) $(DLLIB) pdflibdl.h
$(PROGS_BUILD) pdflibdl.c $(DLLIB)
hellodl$(EXE): hellodl.c pdflibdl.c $(DEPLIBS) $(DLLIB) pdflibdl.h
$(PROGS_BUILD) pdflibdl.c $(DLLIB)

View File

@ -0,0 +1,109 @@
/* $Id: businesscard.c,v 1.1 2004/10/06 17:46:38 laplace Exp $
* PDFlib client: block processing example in C
*
*/
#include <stdio.h>
#include <stdlib.h>
#include "pdflib.h"
int
main(void)
{
PDF *p;
int i, blockcontainer, page;
char *infile = "boilerplate.pdf";
/*
* This is where font/image/PDF input files live. Adjust as necessary.
*
* Note that this directory must also contain the LuciduxSans font outline
* and metrics files.
*/
char *searchpath = "../data";
typedef struct { char *name; char *value; } blockdata;
blockdata data[] = {
{ "name", "Victor Kraxi" },
{ "business.title", "Chief Paper Officer" },
{ "business.address.line1", "17, Aviation Road" },
{ "business.address.city", "Paperfield" },
{ "business.telephone.voice","phone +1 234 567-89" },
{ "business.telephone.fax", "fax +1 234 567-98" },
{ "business.email", "victor@kraxi.com" },
{ "business.homepage", "www.kraxi.com" },
};
#define BLOCKCOUNT (sizeof(data)/sizeof(data[0]))
/* create a new PDFlib object */
if ((p = PDF_new()) == (PDF *) 0)
{
printf("Couldn't create PDFlib object (out of memory)!\n");
return(2);
}
PDF_TRY(p) {
/* Set the search path for fonts and PDF files */
/* open new PDF file */
if (PDF_open_file(p, "businesscard.pdf") == -1) {
printf("Error: %s\n", PDF_get_errmsg(p));
return(2);
}
PDF_set_parameter(p, "SearchPath", searchpath);
/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter(p, "hypertextencoding", "host");
PDF_set_info(p, "Creator", "businesscard.c");
PDF_set_info(p, "Author", "Thomas Merz");
PDF_set_info(p, "Title","PDFlib block processing sample (C)");
blockcontainer = PDF_open_pdi(p, infile, "", 0);
if (blockcontainer == -1) {
printf("Error: %s\n", PDF_get_errmsg(p));
return(2);
}
page = PDF_open_pdi_page(p, blockcontainer, 1, "");
if (page == -1) {
printf("Error: %s\n", PDF_get_errmsg(p));
return(2);
}
PDF_begin_page(p, 20, 20); /* dummy page size */
/* This will adjust the page size to the block container's size. */
PDF_fit_pdi_page(p, page, 0, 0, "adjustpage");
/* Fill all text blocks with dynamic data */
for (i = 0; i < (int) BLOCKCOUNT; i++) {
if (PDF_fill_textblock(p, page, data[i].name, data[i].value, 0,
"embedding encoding=host") == -1) {
printf("Warning: %s\n", PDF_get_errmsg(p));
}
}
PDF_end_page(p); /* close page */
PDF_close_pdi_page(p, page);
PDF_close(p); /* close PDF document */
PDF_close_pdi(p, blockcontainer);
}
PDF_CATCH(p) {
printf("PDFlib exception occurred in businesscard sample:\n");
printf("[%d] %s: %s\n",
PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));
PDF_delete(p);
return(2);
}
PDF_delete(p); /* delete the PDFlib object */
return 0;
}

View File

@ -0,0 +1,107 @@
# Microsoft Developer Studio Project File - Name="businesscard" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=businesscard - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "businesscard.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "businesscard.mak" CFG="businesscard - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "businesscard - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "businesscard - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "businesscard - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /out:"businesscard.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /debug
!ELSEIF "$(CFG)" == "businesscard - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "PDFLIB_STATIC" /D "_MT" /FR /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /machine:I386 /out:"businesscard.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib"
# SUBTRACT BASE LINK32 /debug
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /pdb:none
!ENDIF
# Begin Target
# Name "businesscard - Win32 Release"
# Name "businesscard - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\businesscard.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,129 @@
/* $Id: chartab.c,v 1.1 2004/10/06 17:46:38 laplace Exp $
* PDFlib client: character table in C
*
*/
#include <stdio.h>
#include <stdlib.h>
#include "pdflib.h"
int
main(void)
{
/* change these as required */
const char *fontname = "LuciduxSans-Oblique";
/* This is where font/image/PDF input files live. Adjust as necessary. */
char *searchpath = "../data";
/* list of encodings to use */
const char *encodings[] = { "iso8859-1", "iso8859-2", "iso8859-15" };
/* whether or not to embed the font */
int embed = 1;
#define ENCODINGS ((int) ((sizeof(encodings)/sizeof(encodings[0]))))
char buf[256];
float x, y;
PDF *p;
int row, col, font, page;
#define FONTSIZE ((float) 16)
#define TOP ((float) 700)
#define LEFT ((float) 50)
#define YINCR 2*FONTSIZE
#define XINCR 2*FONTSIZE
/* create a new PDFlib object */
if ((p = PDF_new()) == (PDF *) 0)
{
printf("Couldn't create PDFlib object (out of memory)!\n");
return(2);
}
PDF_TRY(p)
{
/* open new PDF file */
if (PDF_open_file(p, "chartab.pdf") == -1) {
printf("Error: %s\n", PDF_get_errmsg(p));
return(2);
}
PDF_set_parameter(p, "openaction", "fitpage");
PDF_set_parameter(p, "fontwarning", "true");
PDF_set_parameter(p, "SearchPath", searchpath);
/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter(p, "hypertextencoding", "host");
PDF_set_info(p, "Creator", "chartab.c");
PDF_set_info(p, "Author", "Thomas Merz");
PDF_set_info(p, "Title", "Character table (C)");
/* loop over all encodings */
for (page = 0; page < ENCODINGS; page++)
{
PDF_begin_page(p, a4_width, a4_height); /* start a new page */
/* print the heading and generate the bookmark */
/* Change "host" encoding to "winansi" or whatever you need! */
font = PDF_load_font(p, "Helvetica", 0, "host", "");
PDF_setfont(p, font, FONTSIZE);
sprintf(buf, "%s (%s) %sembedded",
fontname, encodings[page], embed ? "" : "not ");
PDF_show_xy(p, buf, LEFT - XINCR, TOP + 3 * YINCR);
PDF_add_bookmark(p, buf, 0, 0);
/* print the row and column captions */
PDF_setfont(p, font, 2 * FONTSIZE/3);
for (row = 0; row < 16; row++)
{
sprintf(buf, "x%X", row);
PDF_show_xy(p, buf, LEFT + row*XINCR, TOP + YINCR);
sprintf(buf, "%Xx", row);
PDF_show_xy(p, buf, LEFT - XINCR, TOP - row * YINCR);
}
/* print the character table */
font = PDF_load_font(p, fontname, 0, encodings[page],
embed ? "embedding": "");
PDF_setfont(p, font, FONTSIZE);
y = TOP;
x = LEFT;
for (row = 0; row < 16; row++)
{
for (col = 0; col < 16; col++) {
sprintf(buf, "%c", 16*row + col);
PDF_show_xy(p, buf, x, y);
x += XINCR;
}
x = LEFT;
y -= YINCR;
}
PDF_end_page(p); /* close page */
}
PDF_close(p); /* close PDF document */
}
PDF_CATCH(p)
{
printf("PDFlib exception occurred in chartab sample:\n");
printf("[%d] %s: %s\n",
PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));
PDF_delete(p);
return(2);
}
PDF_delete(p); /* delete the PDFlib object */
return 0;
}

View File

@ -0,0 +1,107 @@
# Microsoft Developer Studio Project File - Name="chartab" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=chartab - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "chartab.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "chartab.mak" CFG="chartab - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "chartab - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "chartab - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "chartab - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /out:"chartab.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /debug
!ELSEIF "$(CFG)" == "chartab - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "PDFLIB_STATIC" /D "_MT" /FR /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /machine:I386 /out:"chartab.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib"
# SUBTRACT BASE LINK32 /debug
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /pdb:none
!ENDIF
# Begin Target
# Name "chartab - Win32 Release"
# Name "chartab - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\chartab.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,101 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "businesscard"=".\businesscard.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "chartab"=".\chartab.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "hello"=".\hello.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "image"=".\image.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "invoice"=".\invoice.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "pdfclock"=".\pdfclock.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "quickreference"=".\quickreference.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@ -0,0 +1,63 @@
/* $Id: hello.c,v 1.1 2004/10/06 17:46:38 laplace Exp $
* PDFlib client: hello example in C
*
*/
#include <stdio.h>
#include <stdlib.h>
#include "pdflib.h"
int
main(void)
{
PDF *p;
int font;
/* create a new PDFlib object */
if ((p = PDF_new()) == (PDF *) 0)
{
printf("Couldn't create PDFlib object (out of memory)!\n");
return(2);
}
PDF_TRY(p) {
/* open new PDF file */
if (PDF_open_file(p, "hello.pdf") == -1) {
printf("Error: %s\n", PDF_get_errmsg(p));
return(2);
}
/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter(p, "hypertextencoding", "host");
PDF_set_info(p, "Creator", "hello.c");
PDF_set_info(p, "Author", "Thomas Merz");
PDF_set_info(p, "Title", "Hello, world (C)!");
PDF_begin_page(p, a4_width, a4_height); /* start a new page */
/* Change "host" encoding to "winansi" or whatever you need! */
font = PDF_load_font(p, "Helvetica-Bold", 0, "host", "");
PDF_setfont(p, font, 24);
PDF_set_text_pos(p, 50, 700);
PDF_show(p, "Hello, world!");
PDF_continue_text(p, "(says C)");
PDF_end_page(p); /* close page */
PDF_close(p); /* close PDF document */
}
PDF_CATCH(p) {
printf("PDFlib exception occurred in hello sample:\n");
printf("[%d] %s: %s\n",
PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));
PDF_delete(p);
return(2);
}
PDF_delete(p); /* delete the PDFlib object */
return 0;
}

View File

@ -0,0 +1,107 @@
# Microsoft Developer Studio Project File - Name="hello" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=hello - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "hello.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "hello.mak" CFG="hello - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "hello - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "hello - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "hello - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /out:"hello.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /debug
!ELSEIF "$(CFG)" == "hello - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "PDFLIB_STATIC" /D "_MT" /FR /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /machine:I386 /out:"hello.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib"
# SUBTRACT BASE LINK32 /debug
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /pdb:none
!ENDIF
# Begin Target
# Name "hello - Win32 Release"
# Name "hello - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\hello.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,66 @@
/* $Id: hellodl.c,v 1.1 2004/10/06 17:46:38 laplace Exp $
* PDFlib client: hello example in C with dynamic DLL loading
*
*/
#include <stdio.h>
#include <stdlib.h>
#include "pdflibdl.h"
int
main(void)
{
PDF *p;
int font;
PDFlib_api *PDFlib;
/* load the PDFlib dynamic library and create a new PDFlib object*/
if ((PDFlib = PDF_new_dl(&p)) == (PDFlib_api *) NULL)
{
printf("Couldn't create PDFlib object (DLL not found?)\n");
return(2);
}
PDF_TRY_DL(PDFlib, p) {
/* open new PDF file */
if (PDFlib->PDF_open_file(p, "hellodl.pdf") == -1) {
printf("Error: %s\n", PDFlib->PDF_get_errmsg(p));
return(2);
}
/* This line is required to avoid problems on Japanese systems */
PDFlib->PDF_set_parameter(p, "hypertextencoding", "host");
PDFlib->PDF_set_info(p, "Creator", "hello.c");
PDFlib->PDF_set_info(p, "Author", "Thomas Merz");
PDFlib->PDF_set_info(p, "Title", "Hello, world (C DLL)!");
PDFlib->PDF_begin_page(p, a4_width, a4_height); /* start a new page */
/* Change "host" encoding to "winansi" or whatever you need! */
font = PDFlib->PDF_load_font(p, "Helvetica-Bold", 0, "host", "");
PDFlib->PDF_setfont(p, font, 24);
PDFlib->PDF_set_text_pos(p, 50, 700);
PDFlib->PDF_show(p, "Hello, world!");
PDFlib->PDF_continue_text(p, "(says C DLL)");
PDFlib->PDF_end_page(p); /* close page */
PDFlib->PDF_close(p); /* close PDF document */
}
PDF_CATCH_DL(PDFlib, p) {
printf("PDFlib exception occurred in hellodl sample:\n");
printf("[%d] %s: %s\n",
PDFlib->PDF_get_errnum(p), PDFlib->PDF_get_apiname(p),
PDFlib->PDF_get_errmsg(p));
PDF_delete_dl(PDFlib, p);
return(2);
}
/* delete the PDFlib object and unload the library */
PDF_delete_dl(PDFlib, p);
return 0;
}

View File

@ -0,0 +1,71 @@
/* $Id: image.c,v 1.1 2004/10/06 17:46:38 laplace Exp $
* PDFlib client: image example in C
*
*/
#include <stdio.h>
#include <stdlib.h>
#include "pdflib.h"
int
main(void)
{
PDF *p;
int image;
char *imagefile = "nesrin.jpg";
/* This is where font/image/PDF input files live. Adjust as necessary. */
char *searchpath = "../data";
/* create a new PDFlib object */
if ((p = PDF_new()) == (PDF *) 0)
{
printf("Couldn't create PDFlib object (out of memory)!\n");
return(2);
}
PDF_TRY(p){
/* open new PDF file */
if (PDF_open_file(p, "image.pdf") == -1) {
printf("Error: %s\n", PDF_get_errmsg(p));
return(2);
}
PDF_set_parameter(p, "SearchPath", searchpath);
/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter(p, "hypertextencoding", "host");
PDF_set_info(p, "Creator", "image.c");
PDF_set_info(p, "Author", "Thomas Merz");
PDF_set_info(p, "Title", "image sample (C)");
image = PDF_load_image(p, "auto", imagefile, 0, "");
if (image == -1) {
printf("Error: %s\n", PDF_get_errmsg(p));
return(3);
}
/* dummy page size, will be adjusted by PDF_fit_image() */
PDF_begin_page(p, 10, 10);
PDF_fit_image(p, image, (float) 0.0, (float) 0.0, "adjustpage");
PDF_close_image(p, image);
PDF_end_page(p); /* close page */
PDF_close(p); /* close PDF document */
}
PDF_CATCH(p) {
printf("PDFlib exception occurred in image sample:\n");
printf("[%d] %s: %s\n",
PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));
PDF_delete(p);
return(2);
}
PDF_delete(p); /* delete the PDFlib object */
return 0;
}

View File

@ -0,0 +1,107 @@
# Microsoft Developer Studio Project File - Name="image" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=image - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "image.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "image.mak" CFG="image - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "image - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "image - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "image - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /out:"image.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /debug
!ELSEIF "$(CFG)" == "image - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "PDFLIB_STATIC" /D "_MT" /FR /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /machine:I386 /out:"image.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib"
# SUBTRACT BASE LINK32 /debug
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /pdb:none
!ENDIF
# Begin Target
# Name "image - Win32 Release"
# Name "image - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\image.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,196 @@
/* $Id: invoice.c,v 1.1 2004/10/06 17:46:38 laplace Exp $
*
* PDFlib/PDI client: invoice generation demo
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "pdflib.h"
int
main(void)
{
PDF * p;
int i, form, page, regularfont, boldfont;
char * infile = "stationery.pdf";
/* This is where font/image/PDF input files live. Adjust as necessary. */
char *searchpath = "../data";
const float col1 = 55;
const float col2 = 100;
const float col3 = 330;
const float col4 = 430;
const float col5 = 530;
time_t timer;
struct tm ltime;
float fontsize = 12, leading, y;
float sum, total;
float pagewidth = 595, pageheight = 842;
char buf[128];
char *closingtext =
"30 days warranty starting at the day of sale. "
"This warranty covers defects in workmanship only. "
"Kraxi Systems, Inc. will, at its option, repair or replace the "
"product under the warranty. This warranty is not transferable. "
"No returns or exchanges will be accepted for wet products.";
typedef struct { char *name; float price; int quantity; } articledata;
articledata data[] = {
{ "Super Kite", 20, 2},
{ "Turbo Flyer", 40, 5},
{ "Giga Trash", 180, 1},
{ "Bare Bone Kit", 50, 3},
{ "Nitty Gritty", 20, 10},
{ "Pretty Dark Flyer", 75, 1},
{ "Free Gift", 0, 1},
};
#define ARTICLECOUNT (sizeof(data)/sizeof(data[0]))
static const char *months[] = {
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
};
/* create a new PDFlib object */
if ((p = PDF_new()) == (PDF *) 0)
{
printf("Couldn't create PDFlib object (out of memory)!\n");
return(2);
}
PDF_TRY(p) {
/* open new PDF file */
if (PDF_open_file(p, "invoice.pdf") == -1) {
printf("Error: %s\n", PDF_get_errmsg(p));
return(2);
}
PDF_set_parameter(p, "SearchPath", searchpath);
/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter(p, "hypertextencoding", "host");
PDF_set_info(p, "Creator", "invoice.c");
PDF_set_info(p, "Author", "Thomas Merz");
PDF_set_info(p, "Title", "PDFlib invoice generation demo (C)");
form = PDF_open_pdi(p, infile, "", 0);
if (form == -1) {
printf("Error: %s\n", PDF_get_errmsg(p));
return(2);
}
page = PDF_open_pdi_page(p, form, 1, "");
if (page == -1) {
printf("Error: %s\n", PDF_get_errmsg(p));
return(2);
}
boldfont = PDF_load_font(p, "Helvetica-Bold", 0, "host", "");
regularfont = PDF_load_font(p, "Helvetica", 0, "host", "");
leading = fontsize + 2;
/* Establish coordinates with the origin in the upper left corner. */
PDF_set_parameter(p, "topdown", "true");
PDF_begin_page(p, pagewidth, pageheight); /* A4 page */
PDF_fit_pdi_page(p, page, 0, pageheight, "");
PDF_close_pdi_page(p, page);
PDF_setfont(p, regularfont, fontsize);
/* Print the address */
y = 170;
PDF_set_value(p, "leading", leading);
PDF_show_xy(p, "John Q. Doe", col1, y);
PDF_continue_text(p, "255 Customer Lane");
PDF_continue_text(p, "Suite B");
PDF_continue_text(p, "12345 User Town");
PDF_continue_text(p, "Everland");
/* Print the header and date */
PDF_setfont(p, boldfont, fontsize);
y = 300;
PDF_show_xy(p, "INVOICE", col1, y);
time(&timer);
ltime = *localtime(&timer);
sprintf(buf, "%s %d, %d",
months[ltime.tm_mon], ltime.tm_mday, ltime.tm_year + 1900);
PDF_fit_textline(p, buf, 0, col5, y, "position {100 0}");
/* Print the invoice header line */
PDF_setfont(p, boldfont, fontsize);
/* "position {0 0}" is left-aligned, "position {100 0}" right-aligned */
y = 370;
PDF_fit_textline(p, "ITEM", 0, col1, y, "position {0 0}");
PDF_fit_textline(p, "DESCRIPTION", 0, col2, y, "position {0 0}");
PDF_fit_textline(p, "QUANTITY", 0, col3, y, "position {100 0}");
PDF_fit_textline(p, "PRICE", 0, col4, y, "position {100 0}");
PDF_fit_textline(p, "AMOUNT", 0, col5, y, "position {100 0}");
/* Print the article list */
PDF_setfont(p, regularfont, fontsize);
y += 2*leading;
total = 0;
for (i = 0; i < (int) ARTICLECOUNT; i++) {
sprintf(buf, "%d", i+1);
PDF_show_xy(p, buf, col1, y);
PDF_show_xy(p, data[i].name, col2, y);
sprintf(buf, "%d", data[i].quantity);
PDF_fit_textline(p, buf, 0, col3, y, "position {100 0}");
sprintf(buf, "%.2f", data[i].price);
PDF_fit_textline(p, buf, 0, col4, y, "position {100 0}");
sum = data[i].price * data[i].quantity;
sprintf(buf, "%.2f", sum);
PDF_fit_textline(p, buf, 0, col5, y, "position {100 0}");
y += leading;
total += sum;
}
y += leading;
PDF_setfont(p, boldfont, fontsize);
sprintf(buf, "%.2f", total);
PDF_fit_textline(p, buf, 0, col5, y, "position {100 0}");
/* Print the closing text */
y += 5*leading;
PDF_setfont(p, regularfont, fontsize);
PDF_set_value(p, "leading", leading);
PDF_show_boxed(p, closingtext,
col1, y + 4*leading, col5-col1, 4*leading, "justify", "");
PDF_end_page(p);
PDF_close(p);
PDF_close_pdi(p, form);
}
PDF_CATCH(p) {
printf("PDFlib exception occurred in invoice sample:\n");
printf("[%d] %s: %s\n",
PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));
PDF_delete(p);
return(2);
}
PDF_delete(p);
return 0;
}

View File

@ -0,0 +1,107 @@
# Microsoft Developer Studio Project File - Name="invoice" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=invoice - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "invoice.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "invoice.mak" CFG="invoice - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "invoice - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "invoice - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "invoice - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /out:"invoice.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /debug
!ELSEIF "$(CFG)" == "invoice - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "PDFLIB_STATIC" /D "_MT" /FR /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /machine:I386 /out:"invoice.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib"
# SUBTRACT BASE LINK32 /debug
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /pdb:none
!ENDIF
# Begin Target
# Name "invoice - Win32 Release"
# Name "invoice - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\invoice.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,131 @@
/* $Id: pdfclock.c,v 1.1 2004/10/06 17:46:38 laplace Exp $
* A little PDFlib application to draw an analog clock.
*
*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include "pdflib.h"
#define RADIUS 200.0f
#define MARGIN 20.0f
int
main(void)
{
PDF *p;
float alpha;
time_t timer;
struct tm ltime;
/* create a new PDFlib object */
if ((p = PDF_new()) == (PDF *) 0)
{
printf("Couldn't create PDFlib object (out of memory)!\n");
return(2);
}
PDF_TRY(p) {
/* open new PDF file */
if (PDF_open_file(p, "pdfclock.pdf") == -1) {
printf("Error: %s\n", PDF_get_errmsg(p));
return(2);
}
/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter(p, "hypertextencoding", "host");
PDF_set_info(p, "Creator", "pdfclock.c");
PDF_set_info(p, "Author", "Thomas Merz");
PDF_set_info(p, "Title", "PDF clock (C)");
PDF_begin_page(p, (float) (2 * (RADIUS + MARGIN)),
(float) (2 * (RADIUS + MARGIN)));
PDF_translate(p, RADIUS + MARGIN, RADIUS + MARGIN);
PDF_setcolor(p, "fillstroke", "rgb", 0, 0, 1, 0);
PDF_save(p);
/* minute strokes */
PDF_setlinewidth(p, 2);
for (alpha = 0; alpha < 360; alpha += 6)
{
PDF_rotate(p, 6);
PDF_moveto(p, RADIUS, 0);
PDF_lineto(p, (float) (RADIUS-MARGIN/3), 0);
PDF_stroke(p);
}
PDF_restore(p);
PDF_save(p);
/* 5 minute strokes */
PDF_setlinewidth(p, 3);
for (alpha = 0; alpha < 360; alpha += 30)
{
PDF_rotate(p, 30);
PDF_moveto(p, RADIUS, 0);
PDF_lineto(p, RADIUS-MARGIN, 0);
PDF_stroke(p);
}
time(&timer);
ltime = *localtime(&timer);
/* draw hour hand */
PDF_save(p);
PDF_rotate(p,
(float)(-((ltime.tm_min/60.0) + ltime.tm_hour - 3.0) * 30.0));
PDF_moveto(p, -RADIUS/10, -RADIUS/20);
PDF_lineto(p, RADIUS/2, 0);
PDF_lineto(p, -RADIUS/10, RADIUS/20);
PDF_closepath(p);
PDF_fill(p);
PDF_restore(p);
/* draw minute hand */
PDF_save(p);
PDF_rotate(p,
(float) (-((ltime.tm_sec/60.0) + ltime.tm_min - 15.0) * 6.0));
PDF_moveto(p, -RADIUS/10, -RADIUS/20);
PDF_lineto(p, RADIUS * 0.8f, 0);
PDF_lineto(p, -RADIUS/10, RADIUS/20);
PDF_closepath(p);
PDF_fill(p);
PDF_restore(p);
/* draw second hand */
PDF_setcolor(p, "fillstroke", "rgb", 1, 0, 0, 0);
PDF_setlinewidth(p, 2);
PDF_save(p);
PDF_rotate(p, (float) -((ltime.tm_sec - 15.0) * 6.0));
PDF_moveto(p, -RADIUS/5, 0);
PDF_lineto(p, RADIUS, 0);
PDF_stroke(p);
PDF_restore(p);
/* draw little circle at center */
PDF_circle(p, 0, 0, (float) RADIUS/30);
PDF_fill(p);
PDF_restore(p);
PDF_end_page(p);
PDF_close(p);
}
PDF_CATCH(p) {
printf("PDFlib exception occurred in pdfclock sample:\n");
printf("[%d] %s: %s\n",
PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));
PDF_delete(p);
return(2);
}
PDF_delete(p); /* delete the PDFlib object */
return 0;
}

View File

@ -0,0 +1,107 @@
# Microsoft Developer Studio Project File - Name="pdfclock" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=pdfclock - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "pdfclock.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "pdfclock.mak" CFG="pdfclock - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "pdfclock - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "pdfclock - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "pdfclock - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /debug
!ELSEIF "$(CFG)" == "pdfclock - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "PDFLIB_STATIC" /D "_MT" /FR /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /machine:I386 /out:"pdfclock.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib"
# SUBTRACT BASE LINK32 /debug
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /pdb:none
!ENDIF
# Begin Target
# Name "pdfclock - Win32 Release"
# Name "pdfclock - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\pdfclock.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,532 @@
/*---------------------------------------------------------------------------*
| PDFlib - A library for generating PDF on the fly |
+---------------------------------------------------------------------------+
| Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. |
+---------------------------------------------------------------------------+
| |
| This software is subject to the PDFlib license. It is NOT in the |
| public domain. Extended versions and commercial licenses are |
| available, please check http://www.pdflib.com. |
| |
*---------------------------------------------------------------------------*/
/* $Id: pdflibdl.c,v 1.1 2004/10/06 17:46:38 laplace Exp $
*
* C wrapper code for dynamically loading the PDFlib DLL at runtime.
*
* This module is not supported on all platforms.
*
*/
#include <stdlib.h>
#include "pdflibdl.h"
/* enable this to avoid error messages */
//#define PDF_SILENT
/* ---------------------------------- WIN32 ----------------------------- */
#ifdef WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winbase.h>
#undef WIN32_LEAN_AND_MEAN
#define PDF_DLLNAME "pdflib.dll"
static void *
pdf_dlopen(const char *filename)
{
return (void *) LoadLibrary(filename);
}
static void *
pdf_dlsym(void *handle, const char *funcname)
{
return (void *) GetProcAddress((HINSTANCE) handle, funcname);
}
static void
pdf_dlclose(void *handle)
{
(void) FreeLibrary((HINSTANCE) handle);
}
/* ---------------------------------- MVS ----------------------------- */
#elif defined(__MVS__)
#include <dynit.h>
#include <dll.h>
#define PDF_DLLNAME "PDFLIB"
static void *
pdf_dlopen(const char *filename)
{
return dllload(filename);
}
static void *
pdf_dlsym(void *handle, const char *funcname)
{
return dllqueryfn((dllhandle *) handle, funcname);
}
static void pdf_dlclose(void *handle)
{
(void) dllfree((dllhandle *) handle);
}
/* ---------------------------------- Linux ----------------------------- */
#elif defined(linux)
#include <dlfcn.h>
#define PDF_DLLNAME "libpdf.so"
static void *
pdf_dlopen(const char *filename)
{
return dlopen(filename, RTLD_LAZY);
}
static void *
pdf_dlsym(void *handle, const char *funcname)
{
return dlsym(handle, funcname);
}
static void pdf_dlclose(void *handle)
{
(void) dlclose(handle);
}
/* ---------------------------------- Mac OS X ----------------------------- */
#elif defined(__ppc__) && defined(__APPLE__)
#define PDF_DLLNAME "libpdf.dylib"
/*
* The dl code for Mac OS X has been butchered from dlcompat,
* see http://www.opendarwin.org/projects/dlcompat
* It contained the copyright notice below.
*/
/*
Copyright (c) 2002 Peter O'Gorman <ogorman@users.sourceforge.net>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include <string.h>
#include <mach-o/dyld.h>
#if defined (__GNUC__) && __GNUC__ > 3
#define dl_restrict __restrict
#else
#define dl_restrict
#endif
/*
* Structure filled in by dladdr().
*/
typedef struct dl_info {
const char *dli_fname; /* Pathname of shared object */
void *dli_fbase; /* Base address of shared object */
const char *dli_sname; /* Name of nearest symbol */
void *dli_saddr; /* Address of nearest symbol */
} Dl_info;
#define RTLD_LAZY 0x1
#define RTLD_NOW 0x2
#define RTLD_LOCAL 0x4
#define RTLD_GLOBAL 0x8
#define RTLD_NOLOAD 0x10
#define RTLD_NODELETE 0x80
/*
* Special handle arguments for dlsym().
*/
#define RTLD_NEXT ((void *) -1) /* Search subsequent objects. */
#define RTLD_DEFAULT ((void *) -2) /* Use default search algorithm. */
static void *dlsymIntern(void *handle, const char *symbol);
void *pdf_dlopen(const char *path)
{
int mode = RTLD_LAZY;
void *module = 0;
NSObjectFileImage ofi = 0;
NSObjectFileImageReturnCode ofirc;
static int (*make_private_module_public) (NSModule module) = 0;
unsigned int flags =
NSLINKMODULE_OPTION_RETURN_ON_ERROR | NSLINKMODULE_OPTION_PRIVATE;
/* If we got no path, the app wants the global namespace, use -1 as the marker
in this case */
if (!path)
return (void *)-1;
/* Create the object file image, works for things linked with the
-bundle arg to ld */
ofirc = NSCreateObjectFileImageFromFile(path, &ofi);
switch (ofirc)
{
case NSObjectFileImageSuccess:
/* It was okay, so use NSLinkModule to link in the image */
if (!(mode & RTLD_LAZY)) flags += NSLINKMODULE_OPTION_BINDNOW;
module = NSLinkModule(ofi, path,flags);
/* Don't forget to destroy the object file image, unless you like leaks */
NSDestroyObjectFileImage(ofi);
/* If the mode was global, then change the module, this avoids
multiply defined symbol errors to first load private then make
global. Silly, isn't it. */
if ((mode & RTLD_GLOBAL))
{
if (!make_private_module_public)
{
_dyld_func_lookup("__dyld_NSMakePrivateModulePublic",
(unsigned long *)&make_private_module_public);
}
make_private_module_public(module);
}
break;
case NSObjectFileImageInappropriateFile:
/* It may have been a dynamic library rather than a bundle, try to load it */
module =
(void *)NSAddImage(path, NSADDIMAGE_OPTION_RETURN_ON_ERROR);
break;
case NSObjectFileImageFailure:
/*
error(0,"Object file setup failure : \"%s\"", path);
*/
return 0;
case NSObjectFileImageArch:
/*
error(0,"No object for this architecture : \"%s\"", path);
*/
return 0;
case NSObjectFileImageFormat:
/*
error(0,"Bad object file format : \"%s\"", path);
*/
return 0;
case NSObjectFileImageAccess:
/*
error(0,"Can't read object file : \"%s\"", path);
*/
return 0;
}
if (!module)
/*
error(0, "Can not open \"%s\"", path);
*/
;
return module;
}
/* dlsymIntern is used by dlsym to find the symbol */
void *dlsymIntern(void *handle, const char *symbol)
{
NSSymbol *nssym = 0;
/* If the handle is -1, if is the app global context */
if (handle == (void *)-1)
{
/* Global context, use NSLookupAndBindSymbol */
if (NSIsSymbolNameDefined(symbol))
{
nssym = NSLookupAndBindSymbol(symbol);
}
}
/* Now see if the handle is a struch mach_header* or not, use
NSLookupSymbol in image for libraries, and NSLookupSymbolInModule
for bundles */
else
{
/* Check for both possible magic numbers depending on x86/ppc byte order */
if ((((struct mach_header *)handle)->magic == MH_MAGIC) ||
(((struct mach_header *)handle)->magic == MH_CIGAM))
{
if (NSIsSymbolNameDefinedInImage((struct mach_header *)handle, symbol))
{
nssym = NSLookupSymbolInImage((struct mach_header *)handle,
symbol, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND
| NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
}
}
else
{
nssym = NSLookupSymbolInModule(handle, symbol);
}
}
if (!nssym)
{
/*
error(0, "Symbol \"%s\" Not found", symbol);
*/
return NULL;
}
return NSAddressOfSymbol(nssym);
}
int pdf_dlclose(void *handle)
{
if ((((struct mach_header *)handle)->magic == MH_MAGIC) ||
(((struct mach_header *)handle)->magic == MH_CIGAM))
{
/*
error(-1, "Can't remove dynamic libraries on darwin");
*/
return 0;
}
if (!NSUnLinkModule(handle, 0))
{
/*
error(0, "unable to unlink module %s", NSNameOfModule(handle));
*/
return 1;
}
return 0;
}
/* dlsym, prepend the underscore and call dlsymIntern */
void *pdf_dlsym(void *handle, const char *symbol)
{
static char undersym[257]; /* Saves calls to malloc(3) */
int sym_len = strlen(symbol);
void *value = NULL;
char *malloc_sym = NULL;
if (sym_len < 256)
{
snprintf(undersym, 256, "_%s", symbol);
value = dlsymIntern(handle, undersym);
}
else
{
malloc_sym = malloc(sym_len + 2);
if (malloc_sym)
{
sprintf(malloc_sym, "_%s", symbol);
value = dlsymIntern(handle, malloc_sym);
free(malloc_sym);
}
else
{
/*
error(-1, "Unable to allocate memory");
*/
}
}
return value;
}
/* ---------------------------------- AS/400 ----------------------------- */
#elif defined __ILEC400__
#include <string.h>
#include <miptrnam.h>
#include <qleawi.h>
#include <qusec.h>
#include "mgosifc.h"
#define PDF_DLLNAME "PDFLIB"
static void *
pdf_dlopen(const char *filename)
{
char libName[11], objName[11], *s;
HMODULE handle;
_SYSPTR pSrvPgm;
Qle_ABP_Info_t actInfo;
int actInfoLen;
Qus_EC_t errCode;
memset(libName, '\0', sizeof(libName));
if ((s = strchr(filename, '/')) == NULL) {
s = filename;
} else {
memcpy(libName, filename, s - filename);
if (!strcmp(libName, "*LIBL"))
libName[0] = '\0';
s += 1;
}
strcpy(objName, s);
/* Get system pointer to service program */
pSrvPgm = rslvsp(WLI_SRVPGM, objName, libName, _AUTH_NONE);
/* Activate Bound Program */
handle = malloc(sizeof(int));
actInfoLen = sizeof(actInfo);
errCode.Bytes_Provided = sizeof(errCode);
QleActBndPgm(&pSrvPgm, handle, &actInfo, &actInfoLen, &errCode);
if (errCode.Bytes_Available > 0)
return NULL;
return (void *) handle;
}
static void *
pdf_dlsym(void *handle, const char *funcname)
{
int expID;
int expNameLen;
void *ret;
int expType;
Qus_EC_t errCode;
expID = 0;
expNameLen = strlen(funcname);
errCode.Bytes_Provided = sizeof(errCode);
QleGetExp((HMODULE) handle,
&expID, &expNameLen, funcname, &ret, &expType, &errCode);
if (errCode.Bytes_Available > 0)
return NULL;
return ret;
}
static void pdf_dlclose(void *handle)
{
free((HMODULE) handle);
}
/* ---------------------------------- unknown ----------------------------- */
#else
#error No DLL loading code for this platform available!
#endif
/* ---------------------------------- generic ----------------------------- */
static void
pdf_dlerror(const char *msg)
{
#ifndef PDF_SILENT
fprintf(stderr, msg);
#endif
}
/* Load the PDFlib DLL and fetch the API structure */
PDFLIB_API PDFlib_api * PDFLIB_CALL
PDF_new_dl(PDF **pp)
{
PDFlib_api *PDFlib, *(PDFLIB_CALL *get_api)(void);
char buf[256];
void *handle;
PDF *p;
/* load the PDFLIB DLL... */
handle = pdf_dlopen(PDF_DLLNAME);
if (!handle)
{
pdf_dlerror("Error: couldn't load PDFlib DLL\n");
return NULL;
}
/* ...and fetch function pointers */
get_api = (PDFlib_api *(PDFLIB_CALL *)(void))
pdf_dlsym(handle, "PDF_get_api");
if (get_api == NULL)
{
pdf_dlerror(
"Error: couldn't find function PDF_get_api in PDFlib DLL\n");
pdf_dlclose(handle);
return NULL;
}
/* Fetch the API structure and boot the library. */
PDFlib = (*get_api)();
/*
* Check the version number of the loaded DLL against that of
* the included header file to avoid version mismatch.
*/
if (PDFlib->sizeof_PDFlib_api != sizeof(PDFlib_api) ||
PDFlib->major != PDFLIB_MAJORVERSION ||
PDFlib->minor != PDFLIB_MINORVERSION) {
sprintf(buf,
"Error: loaded wrong version of PDFlib DLL\n"
"Expected version %d.%d (API size %d), loaded %d.%d (API size %d)\n",
PDFLIB_MAJORVERSION, PDFLIB_MINORVERSION, sizeof(PDFlib_api),
PDFlib->major, PDFlib->minor, PDFlib->sizeof_PDFlib_api);
pdf_dlerror(buf);
pdf_dlclose(handle);
return NULL;
}
/* Boot the library. */
PDFlib->PDF_boot();
/*
* Create a new PDFlib object; use PDF_new2() so that we can store
* the DLL handle within PDFlib and later retrieve it.
*/
if ((p = PDFlib->PDF_new2(NULL, NULL, NULL, NULL, handle)) == (PDF *) NULL)
{
pdf_dlerror("Couldn't create PDFlib object (out of memory)!\n");
return NULL;
}
/* Make the PDF * available to the client and return */
*pp = p;
return PDFlib;
}
/* delete the PDFlib object and unload the previously loaded PDFlib DLL */
PDFLIB_API void PDFLIB_CALL
PDF_delete_dl(PDFlib_api *PDFlib, PDF *p)
{
void *handle;
if (!PDFlib || !p)
return;
/* fetch the DLL handle (previously stored in PDFlib) */
handle = PDFlib->PDF_get_opaque(p);
if (!handle)
return;
PDFlib->PDF_delete(p);
PDFlib->PDF_shutdown();
pdf_dlclose(handle);
}

View File

@ -0,0 +1,63 @@
/*---------------------------------------------------------------------------*
| PDFlib - A library for generating PDF on the fly |
+---------------------------------------------------------------------------+
| Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. |
+---------------------------------------------------------------------------+
| |
| This software is subject to the PDFlib license. It is NOT in the |
| public domain. Extended versions and commercial licenses are |
| available, please check http://www.pdflib.com. |
| |
*---------------------------------------------------------------------------*/
/* $Id: pdflibdl.h,v 1.1 2004/10/06 17:46:39 laplace Exp $
*
* Function prototypes for dynamically loading the PDFlib DLL at runtime
*
*/
#ifdef __cplusplus
#define PDF PDF_c
#endif
#include "pdflib.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
* Notes for using the PDFlib DLL loading mechanism:
*
* - PDF_TRY_DL()/PDF_CATCH_DL() must be used instead of the standard
* exception handling macros.
* - PDF_new_dl() must be used instead of PDF_boot() and PDF_new()/PDF_new2().
* - PDF_delete_dl() must be used instead of PDF_delete() and PDF_shutdown().
* - PDF_get_opaque() must not be used.
*/
/* Load the PDFlib DLL, and fetch pointers to all exported functions. */
PDFLIB_API PDFlib_api * PDFLIB_CALL
PDF_new_dl(PDF **pp);
/* Unload the previously loaded PDFlib DLL (also calls PDF_shutdown()) */
PDFLIB_API void PDFLIB_CALL
PDF_delete_dl(PDFlib_api *PDFlib, PDF *p);
#define PDF_TRY_DL(PDFlib, p) \
if (p) { if (setjmp(PDFlib->pdf_jbuf(p)->jbuf) == 0)
/* Inform the exception machinery that a PDF_TRY() will be left without
entering the corresponding PDF_CATCH( ) clause. */
#define PDF_EXIT_TRY_DL(PDFlib, p) PDFlib->pdf_exit_try(p)
/* Catch an exception; must always be paired with PDF_TRY(). */
#define PDF_CATCH_DL(PDFlib, p) } if (PDFlib->pdf_catch(p))
/* Re-throw an exception to another handler. */
#define PDF_RETHROW_DL(PDFlib, p) PDFlib->pdf_rethrow(p)
#ifdef __cplusplus
} /* extern "C" */
#endif

View File

@ -0,0 +1,112 @@
/* $Id: quickreference.c,v 1.1 2004/10/06 17:46:39 laplace Exp $
*
* PDFlib/PDI client: mini imposition demo
*/
#include <stdio.h>
#include <stdlib.h>
#include "pdflib.h"
int
main(void)
{
PDF *p;
int manual, page;
int font, row, col;
const int maxrow = 2;
const int maxcol = 2;
char optlist[128];
int startpage = 1, endpage = 4;
const float width = 500, height = 770;
int pageno;
const char *infile = "reference.pdf";
/* This is where font/image/PDF input files live. Adjust as necessary. */
char *searchpath = "../data";
/* create a new PDFlib object */
if ((p = PDF_new()) == (PDF *) 0)
{
printf("Couldn't create PDFlib object (out of memory)!\n");
return(2);
}
PDF_TRY(p) {
/* open new PDF file */
if (PDF_open_file(p, "quickreference.pdf") == -1) {
printf("Error: %s\n", PDF_get_errmsg(p));
return(2);
}
PDF_set_parameter(p, "SearchPath", searchpath);
/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter(p, "hypertextencoding", "host");
PDF_set_info(p, "Creator", "quickreference.c");
PDF_set_info(p, "Author", "Thomas Merz");
PDF_set_info(p, "Title", "mini imposition demo (C)");
manual = PDF_open_pdi(p, infile, "", 0);
if (manual == -1) {
printf("Error: %s\n", PDF_get_errmsg(p));
return(2);
}
row = 0;
col = 0;
PDF_set_parameter(p, "topdown", "true");
for (pageno = startpage; pageno <= endpage; pageno++) {
if (row == 0 && col == 0) {
PDF_begin_page(p, width, height);
font = PDF_load_font(p, "Helvetica-Bold", 0, "host", "");
PDF_setfont(p, font, 18);
PDF_set_text_pos(p, 24, 24);
PDF_show(p, "PDFlib Quick Reference");
}
page = PDF_open_pdi_page(p, manual, pageno, "");
if (page == -1) {
printf("Error: %s\n", PDF_get_errmsg(p));
return(2);
}
sprintf(optlist, "scale %f", (float) 1/maxrow);
PDF_fit_pdi_page(p, page,
width/maxcol*col, (row + 1) * height/maxrow, optlist);
PDF_close_pdi_page(p, page);
col++;
if (col == maxcol) {
col = 0;
row++;
}
if (row == maxrow) {
row = 0;
PDF_end_page(p);
}
}
/* finish the last partial page */
if (row != 0 || col != 0)
PDF_end_page(p);
PDF_close(p);
PDF_close_pdi(p, manual);
}
PDF_CATCH(p) {
printf("PDFlib exception occurred in quickreference sample:\n");
printf("[%d] %s: %s\n",
PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));
PDF_delete(p);
return(2);
}
PDF_delete(p);
return 0;
}

View File

@ -0,0 +1,107 @@
# Microsoft Developer Studio Project File - Name="quickreference" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=quickreference - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "quickreference.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "quickreference.mak" CFG="quickreference - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "quickreference - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "quickreference - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "quickreference - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /out:"quickreference.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /debug
!ELSEIF "$(CFG)" == "quickreference - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "PDFLIB_STATIC" /D "_MT" /FR /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /machine:I386 /out:"quickreference.exe" /pdbtype:sept /libpath:"..\..\..\libs\pdflib"
# SUBTRACT BASE LINK32 /debug
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /pdb:none
!ENDIF
# Begin Target
# Name "quickreference - Win32 Release"
# Name "quickreference - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\quickreference.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,3 @@
Notes on the PDFlib C binding:
(none)

Binary file not shown.

View File

@ -0,0 +1,81 @@
# Makefile for PDFlib, C++ language binding
# $Id: Makefile,v 1.1 2004/10/06 17:46:40 laplace Exp $
top_builddir = ../../..
include $(top_builddir)/config/mkcommon.inc
DEPLIBS = $(PDFLIBLINK) pdflib$(LO)
LIBS = $(DEPLIBS) $(STDCPP) $(EXTERNALLIBS)
INCLUDES = $(PDFLIBINC)
CXXFLAGS = $(CFLAGS)
FLAGS = $(LDFLAGS) $(CPPFLAGS) $(CFLAGS)
# --------------------------------------------------------------------------
SRC = \
$(srcdir)/pdflib.cpp \
$(srcdir)/hello.cpp \
$(srcdir)/image.cpp \
$(srcdir)/pdfclock.cpp \
$(srcdir)/chartab.cpp \
$(srcdir)/invoice.cpp \
$(srcdir)/businesscard.cpp \
$(srcdir)/quickreference.cpp \
$(srcdir)/smoketest.cpp
PROGS = \
hello$(EXE) \
image$(EXE) \
pdfclock$(EXE) \
chartab$(EXE) \
invoice$(EXE) \
businesscard$(EXE) \
quickreference$(EXE)
include $(top_builddir)/config/mkprogs.inc
test:: $(PROGS)
-./hello
-./image
-./pdfclock
-./chartab
-./invoice
-./businesscard
-./quickreference
smoke:: test smoketest$(EXE)
-./smoketest
clean::
$(RM) smoketest$(EXE) smoke_cpp_?.pdf
$(RM) hello.pdf image.pdf pdfclock.pdf chartab.pdf invoice.pdf
$(RM) businesscard.pdf quickreference.pdf
hello$(EXE): hello.cpp $(DEPLIBS)
$(CXXPROGS_BUILD)
image$(EXE): image.cpp $(DEPLIBS)
$(CXXPROGS_BUILD)
pdfclock$(EXE): pdfclock.cpp $(DEPLIBS)
$(CXXPROGS_BUILD)
chartab$(EXE): chartab.cpp $(DEPLIBS)
$(CXXPROGS_BUILD)
invoice$(EXE): invoice.cpp $(DEPLIBS)
$(CXXPROGS_BUILD)
businesscard$(EXE): businesscard.cpp $(DEPLIBS)
$(CXXPROGS_BUILD)
quickreference$(EXE): quickreference.cpp $(DEPLIBS)
$(CXXPROGS_BUILD)
smoketest$(EXE): smoketest.cpp $(DEPLIBS)
$(CXXPROGS_BUILD)
pdflib$(LO): ./pdflib.cpp pdflib.hpp ../../../libs/pdflib/pdflib.h
$(LIBTOOL_CC) $(CXX) -c $(CXXFLAGS) pdflib.cpp

View File

@ -0,0 +1,96 @@
// $Id: businesscard.cpp,v 1.1 2004/10/06 17:46:40 laplace Exp $
// PDFlib client: hello example in C++
//
//
#include <iostream>
#include "pdflib.hpp"
int
main(void)
{
try {
PDFlib p; // the PDFlib object
int i, blockcontainer, page;
const string infile = "boilerplate.pdf";
/* This is where font/image/PDF input files live. Adjust as necessary.
*
* Note that this directory must also contain the LuciduxSans font
* outline and metrics files.
*/
const string searchpath = "../data";
struct blockdata {
blockdata(string n, string v): name(n), value(v){}
string name;
string value;
};
blockdata data[] = {
blockdata("name", "Victor Kraxi"),
blockdata("business.title", "Chief Paper Officer"),
blockdata("business.address.line1", "17, Aviation Road"),
blockdata("business.address.city", "Paperfield"),
blockdata("business.telephone.voice","phone +1 234 567-89"),
blockdata("business.telephone.fax", "fax +1 234 567-98"),
blockdata("business.email", "victor@kraxi.com"),
blockdata("business.homepage", "www.kraxi.com"),
};
#define BLOCKCOUNT (sizeof(data)/sizeof(data[0]))
// open new PDF file
if (p.open_file("businesscard.pdf") == -1) {
cerr << "Error: " << p.get_errmsg() << endl;
return(2);
}
p.set_parameter("SearchPath", searchpath);
// This line is required to avoid problems on Japanese systems
p.set_parameter("hypertextencoding", "host");
p.set_info("Creator", "businesscard.cpp");
p.set_info("Author", "Thomas Merz");
p.set_info("Title","PDFlib block processing sample (C++)");
blockcontainer = p.open_pdi(infile, "", 0);
if (blockcontainer == -1) {
cerr << "Error: " << p.get_errmsg() << endl;
return(2);
}
page = p.open_pdi_page(blockcontainer, 1, "");
if (page == -1) {
cerr << "Error: " << p.get_errmsg() << endl;
return(2);
}
p.begin_page(20, 20); // dummy page size
// This will adjust the page size to the block container's size.
p.fit_pdi_page(page, 0, 0, "adjustpage");
// Fill all text blocks with dynamic data
for (i = 0; i < (int) BLOCKCOUNT; i++) {
if (p.fill_textblock(page, data[i].name, data[i].value,
"embedding encoding=host") == -1) {
cerr << "Error: " << p.get_errmsg() << endl;
}
}
p.end_page(); // close page
p.close_pdi_page(page);
p.close(); // close PDF document
p.close_pdi(blockcontainer);
}
catch (PDFlib::Exception &ex) {
cerr << "PDFlib exception occurred in businesscard sample: " << endl;
cerr << "[" << ex.get_errnum() << "] " << ex.get_apiname()
<< ": " << ex.get_errmsg() << endl;
return 99;
}
return 0;
}

View File

@ -0,0 +1,113 @@
# Microsoft Developer Studio Project File - Name="businesscard" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=businesscard - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "businesscard.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "businesscard.mak" CFG="businesscard - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "businesscard - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "businesscard - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "businesscard - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:5.0 /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"release\businesscard.exe" /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib"
!ELSEIF "$(CFG)" == "businesscard - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"businesscard.exe"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /map
!ENDIF
# Begin Target
# Name "businesscard - Win32 Release"
# Name "businesscard - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\pdflib.cpp
# End Source File
# Begin Source File
SOURCE=.\businesscard.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\pdflib.hpp
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,120 @@
// $Id: chartab.cpp,v 1.1 2004/10/06 17:46:40 laplace Exp $
// PDFlib client: chartab example in C++
//
//
#include <iostream>
#include "pdflib.hpp"
int
main(void)
{
/* change these as required */
const char *fontname = "LuciduxSans-Oblique";
/* This is where font/image/PDF input files live. Adjust as necessary. */
char *searchpath = "../data";
/* list of encodings to use */
const char *encodings[] = { "iso8859-1", "iso8859-2", "iso8859-15" };
/* whether or not to embed the font */
int embed = 1;
char buf[256];
float x, y;
int row, col, font, page;
static const int ENCODINGS = 3;
static const float FONTSIZE = 16;
static const float TOP = 700;
static const float LEFT = 50;
static const float YINCR = 2*FONTSIZE;
static const float XINCR = 2*FONTSIZE;
try {
/* create a new PDFlib object */
PDFlib p; // the PDFlib object
/* open new PDF file */
if (p.open_file("chartab.pdf") == -1) {
cerr << "Error: " << p.get_errmsg() << endl;
return(2);
}
p.set_parameter("openaction", "fitpage");
p.set_parameter("fontwarning", "true");
p.set_parameter("SearchPath", searchpath);
// This line is required to avoid problems on Japanese systems
p.set_parameter("hypertextencoding", "host");
p.set_info("Creator", "chartab.c");
p.set_info("Author", "Thomas Merz");
p.set_info("Title", "Character table (C++)");
/* loop over all encodings */
for (page = 0; page < ENCODINGS; page++)
{
p.begin_page(a4_width, a4_height); /* start a new page */
/* print the heading and generate the bookmark */
// Change "host" encoding to "winansi" or whatever you need!
font = p.load_font("Helvetica", "host", "");
p.setfont(font, FONTSIZE);
sprintf(buf, "%s (%s) %sembedded",
fontname, encodings[page], embed ? "" : "not ");
p.show_xy(buf, LEFT - XINCR, TOP + 3 * YINCR);
p.add_bookmark(buf, 0, 0);
/* print the row and column captions */
p.setfont(font, 2 * FONTSIZE/3);
for (row = 0; row < 16; row++)
{
sprintf(buf, "x%X", row);
p.show_xy(buf, LEFT + row*XINCR, TOP + YINCR);
sprintf(buf, "%Xx", row);
p.show_xy(buf, LEFT - XINCR, TOP - row * YINCR);
}
/* print the character table */
font = p.load_font(fontname, encodings[page],
embed ? "embedding": "");
p.setfont(font, FONTSIZE);
y = TOP;
x = LEFT;
for (row = 0; row < 16; row++)
{
for (col = 0; col < 16; col++) {
sprintf(buf, "%c", 16*row + col);
p.show_xy(buf, x, y);
x += XINCR;
}
x = LEFT;
y -= YINCR;
}
p.end_page(); /* close page */
}
p.close(); /* close PDF document */
}
catch (PDFlib::Exception &ex) {
cerr << "PDFlib exception occurred in chartab sample: " << endl;
cerr << "[" << ex.get_errnum() << "] " << ex.get_apiname()
<< ": " << ex.get_errmsg() << endl;
return 2;
}
return 0;
}

View File

@ -0,0 +1,113 @@
# Microsoft Developer Studio Project File - Name="chartab" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=chartab - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "chartab.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "chartab.mak" CFG="chartab - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "chartab - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "chartab - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "chartab - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:5.0 /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"release\chartab.exe" /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib"
!ELSEIF "$(CFG)" == "chartab - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"chartab.exe"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /map
!ENDIF
# Begin Target
# Name "chartab - Win32 Release"
# Name "chartab - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\chartab.cpp
# End Source File
# Begin Source File
SOURCE=.\pdflib.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\pdflib.hpp
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,101 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "businesscard"=".\businesscard.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "chartab"=".\chartab.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "hello"=".\hello.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "image"=".\image.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "invoice"=".\invoice.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "pdfclock"=".\pdfclock.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "quickreference"=".\quickreference.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@ -0,0 +1,51 @@
// $Id: hello.cpp,v 1.1 2004/10/06 17:46:40 laplace Exp $
// PDFlib client: hello example in C++
//
//
#include <iostream>
#include "pdflib.hpp"
int
main(void)
{
try {
int font;
PDFlib p; // the PDFlib object
// open new PDF file
if (p.open_file("hello.pdf") == -1) {
cerr << "Error: " << p.get_errmsg() << endl;
return 2;
}
// This line is required to avoid problems on Japanese systems
p.set_parameter("hypertextencoding", "host");
p.set_info("Creator", "hello.cpp");
p.set_info("Author", "Thomas Merz");
p.set_info("Title", "Hello, world (C++)!");
// start a new page
p.begin_page((float) a4_width, (float) a4_height);
// Change "host" encoding to "winansi" or whatever you need!
font = p.load_font("Helvetica-Bold", "host", "");
p.setfont(font, 24);
p.set_text_pos(50, 700);
p.show("Hello, world!");
p.continue_text("(says C++)");
p.end_page(); // close page
p.close(); // close PDF document
}
catch (PDFlib::Exception &ex) {
cerr << "PDFlib exception occurred in hello sample: " << endl;
cerr << "[" << ex.get_errnum() << "] " << ex.get_apiname()
<< ": " << ex.get_errmsg() << endl;
return 2;
}
return 0;
}

View File

@ -0,0 +1,113 @@
# Microsoft Developer Studio Project File - Name="hello" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=hello - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "hello.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "hello.mak" CFG="hello - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "hello - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "hello - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "hello - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:5.0 /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"release\hello.exe" /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib"
!ELSEIF "$(CFG)" == "hello - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"hello.exe"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /map
!ENDIF
# Begin Target
# Name "hello - Win32 Release"
# Name "hello - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\pdflib.cpp
# End Source File
# Begin Source File
SOURCE=.\hello.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\pdflib.hpp
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,60 @@
// $Id: image.cpp,v 1.1 2004/10/06 17:46:40 laplace Exp $
// PDFlib client: image example in C++
//
//
#include <iostream>
#include "pdflib.hpp"
int
main(void)
{
try {
PDFlib *p; // pointer to the PDFlib class
int image;
char *imagefile = (char *) "nesrin.jpg";
// This is where font/image/PDF input files live. Adjust as necessary.
char *searchpath = (char *) "../data";
p = new PDFlib();
// Open new PDF file
if (p->open_file("image.pdf") == -1) {
cerr << "Error: " << p->get_errmsg() << endl;
return 2;
}
p->set_parameter("SearchPath", searchpath);
// This line is required to avoid problems on Japanese systems
p->set_parameter("hypertextencoding", "host");
p->set_info("Creator", "image.cpp");
p->set_info("Author", "Thomas Merz");
p->set_info("Title", "image sample (C++)!");
image = p->load_image("auto", imagefile, "");
if (image == -1) {
cerr << "Error: " << p->get_errmsg() << endl;
exit(3);
}
// dummy page size, will be adjusted by PDF_fit_image()
p->begin_page(10, 10);
p->fit_image(image, (float) 0.0,(float) 0.0, "adjustpage");
p->close_image(image);
p->end_page(); // close page
p->close(); // close PDF document
}
catch (PDFlib::Exception &ex) {
cerr << "PDFlib exception occurred in hello sample: " << endl;
cerr << "[" << ex.get_errnum() << "] " << ex.get_apiname()
<< ": " << ex.get_errmsg() << endl;
return 2;
}
return 0;
}

View File

@ -0,0 +1,113 @@
# Microsoft Developer Studio Project File - Name="image" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=image - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "image.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "image.mak" CFG="image - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "image - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "image - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "image - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /machine:I386 /out:"release\image.exe" /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib"
!ELSEIF "$(CFG)" == "image - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /machine:I386 /out:"hello.exe"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /map
!ENDIF
# Begin Target
# Name "image - Win32 Release"
# Name "image - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\pdflib.cpp
# End Source File
# Begin Source File
SOURCE=.\image.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\pdflib.hpp
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,194 @@
// $Id: invoice.cpp,v 1.1 2004/10/06 17:46:40 laplace Exp $
// PDFlib client: invoice example in C++
//
//
#include <iostream>
#include <time.h>
#if !defined(WIN32) && !defined(MAC)
#include <unistd.h>
#endif
#include "pdflib.hpp"
int
main(void)
{
try {
int i, form, page, regularfont, boldfont;
string infile = "stationery.pdf";
// This is where font/image/PDF input files live. Adjust as necessary.
string searchpath = "../data";
const float col1 = 55;
const float col2 = 100;
const float col3 = 330;
const float col4 = 430;
const float col5 = 530;
time_t timer;
struct tm ltime;
float fontsize = 12, leading, y;
float sum, total;
float pagewidth = 595, pageheight = 842;
char buf[128];
PDFlib p;
string closingtext =
"30 days warranty starting at the day of sale. "
"This warranty covers defects in workmanship only. "
"Kraxi Systems, Inc. will, at its option, repair or replace the "
"product under the warranty. This warranty is not transferable. "
"No returns or exchanges will be accepted for wet products.";
struct articledata {
articledata(string n, float pr, int q):
name(n), price(pr), quantity(q){}
string name;
float price;
int quantity;
};
articledata data[] = {
articledata("Super Kite", 20, 2),
articledata("Turbo Flyer", 40, 5),
articledata("Giga Trash", 180, 1),
articledata("Bare Bone Kit", 50, 3),
articledata("Nitty Gritty", 20, 10),
articledata("Pretty Dark Flyer", 75, 1),
articledata("Free Gift", 0, 1),
};
#define ARTICLECOUNT (sizeof(data)/sizeof(data[0]))
static const string months[] = {
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
};
// open new PDF file
if (p.open_file("invoice.pdf") == -1) {
cerr << "Error: " << p.get_errmsg() << endl;
return(2);
}
p.set_parameter("SearchPath", searchpath);
// This line is required to avoid problems on Japanese systems
p.set_parameter("hypertextencoding", "host");
p.set_info("Creator", "invoice.cpp");
p.set_info("Author", "Thomas Merz");
p.set_info("Title", "PDFlib invoice generation demo (C++)");
form = p.open_pdi(infile, "", 0);
if (form == -1) {
cerr << "Error: " << p.get_errmsg() << endl;
return(2);
}
page = p.open_pdi_page(form, 1, "");
if (page == -1) {
cerr << "Error: " << p.get_errmsg() << endl;
return(2);
}
boldfont = p.load_font("Helvetica-Bold", "host", "");
regularfont = p.load_font("Helvetica", "host", "");
leading = fontsize + 2;
// Establish coordinates with the origin in the upper left corner.
p.set_parameter("topdown", "true");
p.begin_page(pagewidth, pageheight); // A4 page
p.fit_pdi_page(page, 0, pageheight, "");
p.close_pdi_page(page);
p.setfont(regularfont, 12);
// Print the address
y = 170;
p.set_value("leading", leading);
p.show_xy("John Q. Doe", col1, y);
p.continue_text("255 Customer Lane");
p.continue_text("Suite B");
p.continue_text("12345 User Town");
p.continue_text("Everland");
// Print the header and date
p.setfont(boldfont, 12);
y = 300;
p.show_xy("INVOICE", col1, y);
time(&timer);
ltime = *localtime(&timer);
sprintf(buf, "%s %d, %d", months[ltime.tm_mon].c_str(),
ltime.tm_mday, ltime.tm_year + 1900);
p.fit_textline(buf, col5, y, "position {100 0}");
// Print the invoice header line
p.setfont(boldfont, 12);
// "position {0 0}" is left-aligned, "position {100 0}" right-aligned
y = 370;
p.fit_textline("ITEM", col1, y, "position {0 0}");
p.fit_textline("DESCRIPTION", col2, y, "position {0 0}");
p.fit_textline("QUANTITY", col3, y, "position {100 0}");
p.fit_textline("PRICE", col4, y, "position {100 0}");
p.fit_textline("AMOUNT", col5, y, "position {100 0}");
// Print the article list
p.setfont(regularfont, 12);
y += 2*leading;
total = 0;
for (i = 0; i < (int)ARTICLECOUNT; i++) {
sprintf(buf, "%d", i+1);
p.show_xy(buf, col1, y);
p.show_xy(data[i].name, col2, y);
sprintf(buf, "%d", data[i].quantity);
p.fit_textline(buf, col3, y, "position {100 0}");
sprintf(buf, "%.2f", data[i].price);
p.fit_textline(buf, col4, y, "position {100 0}");
sum = data[i].price * data[i].quantity;
sprintf(buf, "%.2f", sum);
p.fit_textline(buf, col5, y, "position {100 0}");
y += leading;
total += sum;
}
y += leading;
p.setfont(boldfont, 12);
sprintf(buf, "%.2f", total);
p.fit_textline(buf, col5, y, "position {100 0}");
// Print the closing text
y += 5*leading;
p.setfont(regularfont, 12);
p.set_value("leading", leading);
p.show_boxed(closingtext,
col1, y + 4*leading, col5-col1, 4*leading, "justify", "");
p.end_page();
p.close();
p.close_pdi(form);
}
catch (PDFlib::Exception &ex) {
cerr << "PDFlib exception occurred in invoice sample: " << endl;
cerr << "[" << ex.get_errnum() << "] " << ex.get_apiname()
<< ": " << ex.get_errmsg() << endl;
return 2;
}
return 0;
}

View File

@ -0,0 +1,113 @@
# Microsoft Developer Studio Project File - Name="invoice" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=invoice - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "invoice.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "invoice.mak" CFG="invoice - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "invoice - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "invoice - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "invoice - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:5.0 /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"release\invoice.exe" /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib"
!ELSEIF "$(CFG)" == "invoice - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /machine:I386 /out:"invoice.exe"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:5.0 /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /map
!ENDIF
# Begin Target
# Name "invoice - Win32 Release"
# Name "invoice - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\pdflib.cpp
# End Source File
# Begin Source File
SOURCE=.\invoice.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\pdflib.hpp
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,126 @@
// $Id: pdfclock.cpp,v 1.1 2004/10/06 17:46:40 laplace Exp $
// A little PDFlib application to draw an analog clock.
//
//
#include <iostream>
#include <time.h>
#if !defined(WIN32) && !defined(MAC)
#include <unistd.h>
#endif
#include "pdflib.hpp"
#define RADIUS 200.0f
#define MARGIN 20.0f
int
main()
{
try {
PDFlib *p;
float alpha;
time_t timer;
struct tm ltime;
// Create a new PDFlib object
p = new PDFlib();
// Open new PDF file
if (p->open_file("pdfclock.pdf") == -1) {
cerr << "Error: " << p->get_errmsg() << endl;
return 2;
}
// This line is required to avoid problems on Japanese systems
p->set_parameter("hypertextencoding", "host");
p->set_info("Creator", "pdfclock.cpp");
p->set_info("Author", "Thomas Merz");
p->set_info("Title", "PDF clock (C++)");
p->begin_page((unsigned int) (2 * (RADIUS + MARGIN)),
(unsigned int) (2 * (RADIUS + MARGIN)));
p->translate(RADIUS + MARGIN, RADIUS + MARGIN);
p->setcolor("fillstroke", "rgb", 0, 0, 1, 0);
p->save();
// minute strokes
p->setlinewidth(2);
for (alpha = 0; alpha < 360; alpha += 6)
{
p->rotate(6);
p->moveto(RADIUS, 0);
p->lineto((float) (RADIUS-MARGIN/3), 0);
p->stroke();
}
p->restore();
p->save();
// 5 minute strokes
p->setlinewidth(3);
for (alpha = 0; alpha < 360; alpha += 30)
{
p->rotate(30);
p->moveto(RADIUS, 0);
p->lineto(RADIUS-MARGIN, 0);
p->stroke();
}
time(&timer);
ltime = *localtime(&timer);
// draw hour hand
p->save();
p->rotate(
(float)(-((ltime.tm_min/60) + ltime.tm_hour - 3.0) * 30));
p->moveto(-RADIUS/10, -RADIUS/20);
p->lineto(RADIUS/2, 0);
p->lineto(-RADIUS/10, RADIUS/20);
p->closepath();
p->fill();
p->restore();
// draw minute hand
p->save();
p->rotate((float) (-((ltime.tm_sec/60.0) + ltime.tm_min - 15.0) * 6.0));
p->moveto(-RADIUS/10, -RADIUS/20);
p->lineto(RADIUS * 0.8, 0);
p->lineto(-RADIUS/10, RADIUS/20);
p->closepath();
p->fill();
p->restore();
// draw second hand
p->setcolor("fillstroke", "rgb", 1, 0, 0, 0);
p->setlinewidth(2);
p->save();
p->rotate((float) -((ltime.tm_sec - 15) * 6));
p->moveto(-RADIUS/5, 0);
p->lineto(RADIUS, 0);
p->stroke();
p->restore();
// draw little circle at center
p->circle(0, 0, (float) RADIUS/30);
p->fill();
p->restore();
p->end_page();
p->close();
}
catch (PDFlib::Exception &ex) {
cerr << "PDFlib exception occurred in pdfclock sample: " << endl;
cerr << "[" << ex.get_errnum() << "] " << ex.get_apiname()
<< ": " << ex.get_errmsg() << endl;
return 2;
}
return 0;
}

View File

@ -0,0 +1,113 @@
# Microsoft Developer Studio Project File - Name="pdfclock" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=pdfclock - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "pdfclock.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "pdfclock.mak" CFG="pdfclock - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "pdfclock - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "pdfclock - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "pdfclock - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /machine:I386 /out:"release\pdfclock.exe"/libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib"
!ELSEIF "$(CFG)" == "pdfclock - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /machine:I386 /out:"hello.exe"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /map
!ENDIF
# Begin Target
# Name "pdfclock - Win32 Release"
# Name "pdfclock - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\pdflib.cpp
# End Source File
# Begin Source File
SOURCE=.\pdfclock.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\pdflib.hpp
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,312 @@
/*---------------------------------------------------------------------------*
| PDFlib - A library for generating PDF on the fly |
+---------------------------------------------------------------------------+
| Copyright (c) 1997-2004 Thomas Merz and PDFlib GmbH. All rights reserved. |
+---------------------------------------------------------------------------+
| |
| This software is subject to the PDFlib license. It is NOT in the |
| public domain. Extended versions and commercial licenses are |
| available, please check http://www.pdflib.com. |
| |
*---------------------------------------------------------------------------*/
// $Id: pdflib.hpp,v 1.1 2004/10/06 17:46:40 laplace Exp $
//
// in sync with pdflib.h 1.151.2.22
//
// C++ wrapper for PDFlib
//
//
#ifndef PDFLIB_HPP
#define PDFLIB_HPP
#include <string>
using namespace std;
// We use PDF as a C++ class name, therefore hide the actual C struct
// name for PDFlib usage with C++.
#define PDF_THROWS_CPP_EXCEPTIONS
#include "pdflib.h"
#ifdef PDF_THROWS_CPP_EXCEPTIONS
#define PDF_THROWS(x) throw (x)
#define PDF_THROWS_NOTHING throw ()
#else
#define PDFlib PDF
#define PDF_THROWS(x)
#define PDF_THROWS_NOTHING
#endif
// The C++ class wrapper for PDFlib
class PDFlib {
public:
#ifdef PDF_THROWS_CPP_EXCEPTIONS
class Exception
{
public:
Exception(string errmsg, int errnum, string apiname, void *opaque);
string get_message();
string get_errmsg();
int get_errnum();
string get_apiname();
const void *get_opaque();
private:
string m_errmsg;
int m_errnum;
string m_apiname;
void * m_opaque;
}; // Exception
PDFlib(errorproc_t errorproc = NULL,
allocproc_t allocproc = NULL,
reallocproc_t reallocproc = NULL,
freeproc_t freeproc = NULL,
void *opaque = NULL) PDF_THROWS(Exception);
PDFlib(allocproc_t allocproc,
reallocproc_t reallocproc,
freeproc_t freeproc,
void *opaque = NULL) PDF_THROWS(Exception);
#else // PDF_THROWS_CPP_EXCEPTIONS
PDFlib(errorproc_t errorproc = NULL,
allocproc_t allocproc = NULL,
reallocproc_t reallocproc = NULL,
freeproc_t freeproc = NULL,
void *opaque = NULL);
#endif // PDF_THROWS_CPP_EXCEPTIONS
~PDFlib() PDF_THROWS_NOTHING;
/* p_annots.c */
void add_launchlink(float llx, float lly, float urx, float ury,
string filename) PDF_THROWS(PDFlib::Exception);
void add_locallink(float llx, float lly, float urx, float ury,
int page, string optlist) PDF_THROWS(PDFlib::Exception);
void add_note(float llx, float lly, float urx, float ury,
string contents, string title, string icon, bool open)
PDF_THROWS(PDFlib::Exception);
void add_pdflink(float llx, float lly, float urx, float ury,
string filename, int page,
string optlist) PDF_THROWS(PDFlib::Exception);
void add_weblink(float llx, float lly, float urx, float ury, string url)
PDF_THROWS(PDFlib::Exception);
void attach_file(float llx, float lly, float urx, float ury,
string filename, string description, string author,
string mimetype, string icon) PDF_THROWS(PDFlib::Exception);
void set_border_color(float red, float green, float blue)
PDF_THROWS(PDFlib::Exception);
void set_border_dash(float b, float w) PDF_THROWS(PDFlib::Exception);
void set_border_style(string style, float width)
PDF_THROWS(PDFlib::Exception);
/* p_basic.c */
void begin_page(float width, float height) PDF_THROWS(PDFlib::Exception);
void close() PDF_THROWS(PDFlib::Exception);
void end_page() PDF_THROWS(PDFlib::Exception);
string get_apiname() PDF_THROWS(PDFlib::Exception);
const char *get_buffer(long *size) PDF_THROWS(PDFlib::Exception);
string get_errmsg() PDF_THROWS(PDFlib::Exception);
int get_errnum() PDF_THROWS(PDFlib::Exception);
int get_majorversion() PDF_THROWS_NOTHING;
int get_minorversion() PDF_THROWS_NOTHING;
void * get_opaque() PDF_THROWS(PDFlib::Exception);
// Overloaded generic open and close methods
int open(string filename) PDF_THROWS(PDFlib::Exception);
int open(FILE *fp) PDF_THROWS(PDFlib::Exception);
void open(writeproc_t writeproc) PDF_THROWS(PDFlib::Exception);
int open_fp(FILE *fp) PDF_THROWS(PDFlib::Exception);
int open_file(string filename) PDF_THROWS(PDFlib::Exception);
void open_mem(writeproc_t writeproc) PDF_THROWS(PDFlib::Exception);
/* p_block.c */
int fill_imageblock(int page, string blockname, int image, string optlist)
PDF_THROWS(PDFlib::Exception);
int fill_pdfblock(int page, string blockname, int contents, string optlist)
PDF_THROWS(PDFlib::Exception);
int fill_textblock(int page, string blockname, string text, string optlist)
PDF_THROWS(PDFlib::Exception);
/* p_color.c */
int makespotcolor(string spotname, int reserved)
PDF_THROWS(PDFlib::Exception);
void setcolor(string fstype, string colorspace,
float c1, float c2, float c3, float c4) PDF_THROWS(PDFlib::Exception);
void setgray(float g) PDF_THROWS(PDFlib::Exception);
void setgray_fill(float g) PDF_THROWS(PDFlib::Exception);
void setgray_stroke(float g) PDF_THROWS(PDFlib::Exception);
void setrgbcolor(float red, float green, float blue)
PDF_THROWS(PDFlib::Exception);
void setrgbcolor_fill(float red, float green, float blue)
PDF_THROWS(PDFlib::Exception);
void setrgbcolor_stroke(float red, float green, float blue)
PDF_THROWS(PDFlib::Exception);
/* p_draw.c */
void arc(float x, float y, float r, float alpha, float beta)
PDF_THROWS(PDFlib::Exception);
void arcn(float x, float y, float r, float alpha, float beta)
PDF_THROWS(PDFlib::Exception);
void circle(float x, float y, float r) PDF_THROWS(PDFlib::Exception);
void clip() PDF_THROWS(PDFlib::Exception);
void closepath() PDF_THROWS(PDFlib::Exception);
void closepath_fill_stroke() PDF_THROWS(PDFlib::Exception);
void closepath_stroke() PDF_THROWS(PDFlib::Exception);
void curveto(float x1, float y1, float x2, float y2, float x3, float y3)
PDF_THROWS(PDFlib::Exception);
void endpath() PDF_THROWS(PDFlib::Exception);
void fill() PDF_THROWS(PDFlib::Exception);
void fill_stroke() PDF_THROWS(PDFlib::Exception);
void lineto(float x, float y) PDF_THROWS(PDFlib::Exception);
void moveto(float x, float y) PDF_THROWS(PDFlib::Exception);
void rect(float x, float y, float width, float height)
PDF_THROWS(PDFlib::Exception);
void stroke() PDF_THROWS(PDFlib::Exception);
/* p_encoding.c */
void encoding_set_char(string encoding, int slot, string glyphname,
int uv) PDF_THROWS(PDFlib::Exception);
/* p_font.c */
int findfont(string fontname, string encoding, int embed)
PDF_THROWS(PDFlib::Exception);
int load_font(string fontname, string encoding, string optlist)
PDF_THROWS(PDFlib::Exception);
void setfont(int font, float fontsize) PDF_THROWS(PDFlib::Exception);
/* p_gstate.c */
void concat(float a, float b, float c, float d, float e, float f)
PDF_THROWS(PDFlib::Exception);
void initgraphics() PDF_THROWS(PDFlib::Exception);
void restore() PDF_THROWS(PDFlib::Exception);
void rotate(float phi) PDF_THROWS(PDFlib::Exception);
void save() PDF_THROWS(PDFlib::Exception);
void scale(float sx, float sy) PDF_THROWS(PDFlib::Exception);
void setdash(float b, float w) PDF_THROWS(PDFlib::Exception);
void setdashpattern(string optlist) PDF_THROWS(PDFlib::Exception);
void setflat(float flatness) PDF_THROWS(PDFlib::Exception);
void setlinecap(int linecap) PDF_THROWS(PDFlib::Exception);
void setlinejoin(int linejoin) PDF_THROWS(PDFlib::Exception);
void setlinewidth(float width) PDF_THROWS(PDFlib::Exception);
void setmatrix(float a, float b, float c, float d, float e, float f)
PDF_THROWS(PDFlib::Exception);
void setmiterlimit(float miter) PDF_THROWS(PDFlib::Exception);
void setpolydash(float *darray, int length) PDF_THROWS(PDFlib::Exception);
void skew(float alpha, float beta) PDF_THROWS(PDFlib::Exception);
void translate(float tx, float ty) PDF_THROWS(PDFlib::Exception);
/* p_hyper.c */
int add_bookmark(string text, int parent, bool open)
PDF_THROWS(PDFlib::Exception);
void add_nameddest (string name, string optlist) PDF_THROWS(PDFlib::Exception);
void set_info(string key, string value) PDF_THROWS(PDFlib::Exception);
/* p_icc.c */
int load_iccprofile(string profilename, string optlist)
PDF_THROWS(PDFlib::Exception);
/* p_image.c */
void add_thumbnail(int image) PDF_THROWS(PDFlib::Exception);
void close_image(int image) PDF_THROWS(PDFlib::Exception);
void fit_image (int image, float x, float y, string optlist)
PDF_THROWS(PDFlib::Exception);
int load_image (string imagetype, string filename, string optlist)
PDF_THROWS(PDFlib::Exception);
int open_CCITT(string filename, int width, int height,
bool BitReverse, int K, bool BlackIs1) PDF_THROWS(PDFlib::Exception);
int open_image(string imagetype, string source, const char *data,
long len, int width, int height, int components, int bpc,
string params) PDF_THROWS(PDFlib::Exception);
int open_image_file(string imagetype, string filename,
string stringparam, int intparam) PDF_THROWS(PDFlib::Exception);
void place_image(int image, float x, float y, float scale)
PDF_THROWS(PDFlib::Exception);
/* p_params.c */
string get_parameter(string key, float modifier)
PDF_THROWS(PDFlib::Exception);
float get_value(string key, float modifier) PDF_THROWS(PDFlib::Exception);
void set_parameter(string key, string value) PDF_THROWS(PDFlib::Exception);
void set_value(string key, float value) PDF_THROWS(PDFlib::Exception);
/* p_pattern.c */
int begin_pattern(float width, float height, float xstep, float ystep,
int painttype) PDF_THROWS(PDFlib::Exception);
void end_pattern() PDF_THROWS(PDFlib::Exception);
/* p_pdi.c */
void close_pdi(int doc) PDF_THROWS(PDFlib::Exception);
void close_pdi_page(int page) PDF_THROWS(PDFlib::Exception);
void fit_pdi_page (int page, float x, float y, string optlist)
PDF_THROWS(PDFlib::Exception);
string get_pdi_parameter(string key, int doc, int page, int reserved,
int *len) PDF_THROWS(PDFlib::Exception);
float get_pdi_value(string key, int doc, int page, int reserved)
PDF_THROWS(PDFlib::Exception);
int open_pdi(string filename, string stringparam, int reserved)
PDF_THROWS(PDFlib::Exception);
int open_pdi_page(int doc, int pagenumber, string optlist)
PDF_THROWS(PDFlib::Exception);
void place_pdi_page(int page, float x, float y, float sx, float sy)
PDF_THROWS(PDFlib::Exception);
int process_pdi(int doc, int page, string optlist)
PDF_THROWS(PDFlib::Exception);
/* p_resource.c */
void create_pvf(string filename, void *data, size_t size, string options)
PDF_THROWS(PDFlib::Exception);
int delete_pvf(string filename) PDF_THROWS(PDFlib::Exception);
/* p_shading.c */
int shading (string shtype, float x0, float y0, float x1, float y1,
float c1, float c2, float c3, float c4, string optlist)
PDF_THROWS(PDFlib::Exception);
int shading_pattern (int shading, string optlist)
PDF_THROWS(PDFlib::Exception);
void shfill (int shading) PDF_THROWS(PDFlib::Exception);
/* p_template.c */
int begin_template(float width, float height) PDF_THROWS(PDFlib::Exception);
void end_template() PDF_THROWS(PDFlib::Exception);
/* p_text.c */
void continue_text(string text) PDF_THROWS(PDFlib::Exception);
void fit_textline(string text, float x, float y, string optlist)
PDF_THROWS(PDFlib::Exception);
void set_text_pos(float x, float y) PDF_THROWS(PDFlib::Exception);
void show(string text) PDF_THROWS(PDFlib::Exception);
int show_boxed(string text, float left, float top,
float width, float height, string hmode, string feature)
PDF_THROWS(PDFlib::Exception);
void show_xy(string text, float x, float y) PDF_THROWS(PDFlib::Exception);
float stringwidth(string text, int font, float fontsize)
PDF_THROWS(PDFlib::Exception);
/* p_type3.c */
void begin_font(string fontname, float a, float b, float c, float d,
float e, float f, string optlist) PDF_THROWS(PDFlib::Exception);
void begin_glyph(string glyphname, float wx, float llx, float lly,
float urx, float ury) PDF_THROWS(PDFlib::Exception);
void end_font() PDF_THROWS(PDFlib::Exception);
void end_glyph() PDF_THROWS(PDFlib::Exception);
/* p_xgstate.c */
int create_gstate (string optlist) PDF_THROWS(PDFlib::Exception);
void set_gstate(int gstate) PDF_THROWS(PDFlib::Exception);
private:
PDF *p;
const PDFlib_api *m_PDFlib_api;
};
#endif // PDFLIB_HPP

View File

@ -0,0 +1,102 @@
// $Id: quickreference.cpp,v 1.1 2004/10/06 17:46:40 laplace Exp $
//
// PDFlib/PDI client: mini imposition demo
//
#include <iostream>
#include "pdflib.hpp"
int
main(void)
{
try {
PDFlib *p; // pointer to the PDFlib class
int manual, page;
int font, row, col;
const int maxrow = 2;
const int maxcol = 2;
char optlist[128];
int startpage = 1, endpage = 4;
const float width = 500, height = 770;
int pageno;
const string infile = "reference.pdf";
/* This is where font/image/PDF input files live. Adjust as necessary.*/
const string searchpath = "../data";
p = new PDFlib();
// open new PDF file
if (p->open_file("quickreference.pdf") == -1) {
cerr << "Error: " << p->get_errmsg() << endl;
return 2;
}
p->set_parameter("SearchPath", searchpath);
// This line is required to avoid problems on Japanese systems
p->set_parameter("hypertextencoding", "host");
p->set_info("Creator", "quickreference.cpp");
p->set_info("Author", "Thomas Merz");
p->set_info("Title", "mini imposition demo (C++)");
manual = p->open_pdi(infile, "", 0);
if (manual == -1) {
cerr << "Error: " << p->get_errmsg() << endl;
return 2;
}
row = 0;
col = 0;
p->set_parameter("topdown", "true");
for (pageno = startpage; pageno <= endpage; pageno++) {
if (row == 0 && col == 0) {
p->begin_page(width, height);
font = p->load_font("Helvetica-Bold", "host", "");
p->setfont(font, 18);
p->set_text_pos(24, 24);
p->show("PDFlib Quick Reference");
}
page = p->open_pdi_page(manual, pageno, "");
if (page == -1) {
cerr << "Error: " << p->get_errmsg() << endl;
return 2;
}
sprintf(optlist, "scale %f", (float) 1/maxrow);
p->fit_pdi_page(page, width/maxcol*col,
(row + 1) * height/maxrow, optlist);
p->close_pdi_page(page);
col++;
if (col == maxcol) {
col = 0;
row++;
}
if (row == maxrow) {
row = 0;
p->end_page();
}
}
// finish the last partial page
if (row != 0 || col != 0)
p->end_page();
p->close();
p->close_pdi(manual);
}
catch (PDFlib::Exception &ex) {
cerr << "PDFlib exception occurred in quickreference sample: " << endl;
cerr << "[" << ex.get_errnum() << "] " << ex.get_apiname()
<< ": " << ex.get_errmsg() << endl;
return 2;
}
return 0;
}

View File

@ -0,0 +1,113 @@
# Microsoft Developer Studio Project File - Name="quickreference" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=quickreference - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "quickreference.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "quickreference.mak" CFG="quickreference - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "quickreference - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "quickreference - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "quickreference - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /out:"pdfclock.exe" /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /machine:I386 /out:"release\quickreference.exe" /libpath:"..\..\..\libs\pdflib\Release" /libpath:"..\..\pdflib"
!ELSEIF "$(CFG)" == "quickreference - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "../../../libs/pdflib" /I "../../pdflib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_MT" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /machine:I386 /out:"hello.exe"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib /nologo /version:4.0 /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\..\..\libs\pdflib\Debug" /libpath:"..\..\pdflib"
# SUBTRACT LINK32 /map
!ENDIF
# Begin Target
# Name "quickreference - Win32 Release"
# Name "quickreference - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\pdflib.cpp
# End Source File
# Begin Source File
SOURCE=.\quickreference.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\pdflib.hpp
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,3 @@
Notes on the PDFlib C++ binding:
(none)

Binary file not shown.

View File

@ -0,0 +1,497 @@
StartFontMetrics 2.0
Comment Copyright (c) 2000 Bigelow & Holmes Inc. and Y&Y, Inc.
Comment Patents pending. All Rights Reserved.
Comment Lucidux is a trademark of Bigelow & Holmes Inc.
Comment CreationDate: 2000 Mar 04 11:21:33
Comment For other Bigelow & Holmes fonts see http://www.YandY.com
Version 000.200
Notice Copyright (C) 2000 Bigelow & Holmes Inc. and Y&Y, Inc. All rights reserved.
FullName Lucidux Sans Oblique
FamilyName LuciduxSans
Weight Normal
ItalicAngle -11.3
IsFixedPitch false
UnderlinePosition -100
UnderlineThickness 50
FontName LuciduxSans-Oblique
FontBBox -114 -211 1095 993
Comment UniqueID 5096732
CapHeight 723
XHeight 530
Ascender 771
Descender -193
EncodingScheme AdobeStandardEncoding
StartCharMetrics 337
C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
C 33 ; WX 278 ; N exclam ; B 91 0 332 723 ;
C 34 ; WX 355 ; N quotedbl ; B 163 530 464 771 ;
C 35 ; WX 556 ; N numbersign ; B 55 0 645 723 ;
C 36 ; WX 556 ; N dollar ; B 58 -60 586 783 ;
C 37 ; WX 889 ; N percent ; B 118 -18 915 741 ;
C 38 ; WX 667 ; N ampersand ; B 65 -18 706 741 ;
C 40 ; WX 333 ; N parenleft ; B 116 -145 447 771 ;
C 41 ; WX 333 ; N parenright ; B 11 -145 343 771 ;
C 42 ; WX 389 ; N asterisk ; B 131 367 482 723 ;
C 43 ; WX 584 ; N plus ; B 102 48 598 530 ;
C 44 ; WX 278 ; N comma ; B 48 -157 223 120 ;
C 45 ; WX 333 ; N hyphen ; B 94 253 355 325 ;
C 46 ; WX 278 ; N period ; B 79 0 223 120 ;
C 47 ; WX 278 ; N slash ; B -58 -145 452 723 ;
C 48 ; WX 556 ; N zero ; B 96 -18 605 741 ;
C 49 ; WX 556 ; N one ; B 112 0 512 741 ;
C 50 ; WX 556 ; N two ; B 50 0 573 741 ;
C 51 ; WX 556 ; N three ; B 76 -18 567 741 ;
C 52 ; WX 556 ; N four ; B 56 0 580 723 ;
C 53 ; WX 556 ; N five ; B 78 -18 602 723 ;
C 54 ; WX 556 ; N six ; B 95 -18 605 741 ;
C 55 ; WX 556 ; N seven ; B 108 0 675 723 ;
C 56 ; WX 556 ; N eight ; B 80 -18 623 741 ;
C 57 ; WX 556 ; N nine ; B 82 -18 592 741 ;
C 58 ; WX 278 ; N colon ; B 91 0 293 530 ;
C 59 ; WX 278 ; N semicolon ; B 60 -157 293 530 ;
C 60 ; WX 584 ; N less ; B 109 48 639 530 ;
C 61 ; WX 584 ; N equal ; B 84 163 616 416 ;
C 62 ; WX 584 ; N greater ; B 61 48 591 530 ;
C 63 ; WX 556 ; N question ; B 183 0 614 741 ;
C 64 ; WX 1015 ; N at ; B 173 -18 994 741 ;
C 65 ; WX 667 ; N A ; B 9 0 655 723 ;
C 66 ; WX 667 ; N B ; B 81 0 688 723 ;
C 67 ; WX 722 ; N C ; B 118 -18 801 741 ;
C 68 ; WX 722 ; N D ; B 81 0 762 723 ;
C 69 ; WX 667 ; N E ; B 93 0 762 723 ;
C 70 ; WX 611 ; N F ; B 93 0 729 723 ;
C 71 ; WX 778 ; N G ; B 106 -18 827 741 ;
C 72 ; WX 722 ; N H ; B 81 0 786 723 ;
C 73 ; WX 278 ; N I ; B 88 0 335 723 ;
C 74 ; WX 500 ; N J ; B 1 -145 555 723 ;
C 75 ; WX 667 ; N K ; B 93 0 738 723 ;
C 76 ; WX 556 ; N L ; B 81 0 552 723 ;
C 77 ; WX 833 ; N M ; B 81 0 897 723 ;
C 78 ; WX 722 ; N N ; B 81 0 786 723 ;
C 79 ; WX 778 ; N O ; B 107 -18 816 741 ;
C 80 ; WX 667 ; N P ; B 81 0 756 723 ;
C 81 ; WX 778 ; N Q ; B 107 -145 816 741 ;
C 82 ; WX 722 ; N R ; B 81 0 718 723 ;
C 83 ; WX 667 ; N S ; B 64 -18 704 741 ;
C 84 ; WX 611 ; N T ; B 139 0 746 723 ;
C 85 ; WX 722 ; N U ; B 122 -18 786 723 ;
C 86 ; WX 667 ; N V ; B 162 0 806 723 ;
C 87 ; WX 944 ; N W ; B 157 0 1077 723 ;
C 88 ; WX 667 ; N X ; B 13 0 793 723 ;
C 89 ; WX 667 ; N Y ; B 160 0 798 723 ;
C 90 ; WX 611 ; N Z ; B 50 0 706 723 ;
C 91 ; WX 278 ; N bracketleft ; B 44 -145 420 771 ;
C 92 ; WX 278 ; N backslash ; B 116 -145 278 723 ;
C 93 ; WX 278 ; N bracketright ; B -16 -145 359 771 ;
C 94 ; WX 469 ; N asciicircum ; B 76 289 509 723 ;
C 95 ; WX 556 ; N underscore ; B 34 -72 508 0 ;
C 97 ; WX 556 ; N a ; B 69 -12 543 542 ;
C 98 ; WX 556 ; N b ; B 74 -12 579 771 ;
C 99 ; WX 500 ; N c ; B 87 -12 552 542 ;
C 100 ; WX 556 ; N d ; B 83 -12 635 771 ;
C 101 ; WX 556 ; N e ; B 89 -12 564 542 ;
C 102 ; WX 278 ; N f ; B 85 0 461 783 ;
C 103 ; WX 556 ; N g ; B 14 -205 590 542 ;
C 104 ; WX 556 ; N h ; B 75 0 570 771 ;
C 105 ; WX 222 ; N i ; B 63 0 304 723 ;
C 106 ; WX 222 ; N j ; B -114 -205 307 723 ;
C 107 ; WX 500 ; N k ; B 75 0 547 771 ;
C 108 ; WX 222 ; N l ; B 63 0 313 771 ;
C 109 ; WX 833 ; N m ; B 75 0 846 542 ;
C 110 ; WX 556 ; N n ; B 75 0 570 542 ;
C 111 ; WX 556 ; N o ; B 86 -12 576 542 ;
C 112 ; WX 556 ; N p ; B 36 -193 579 542 ;
C 113 ; WX 556 ; N q ; B 83 -193 587 542 ;
C 114 ; WX 333 ; N r ; B 75 0 434 542 ;
C 115 ; WX 500 ; N s ; B 61 -12 508 542 ;
C 116 ; WX 278 ; N t ; B 97 -12 379 636 ;
C 117 ; WX 556 ; N u ; B 92 -12 587 530 ;
C 118 ; WX 500 ; N v ; B 115 0 600 530 ;
C 119 ; WX 722 ; N w ; B 112 0 821 530 ;
C 120 ; WX 500 ; N x ; B 14 0 578 530 ;
C 121 ; WX 500 ; N y ; B 75 -193 600 530 ;
C 122 ; WX 500 ; N z ; B 36 0 564 530 ;
C 123 ; WX 334 ; N braceleft ; B 67 -145 431 771 ;
C 124 ; WX 260 ; N bar ; B 65 -145 320 771 ;
C 125 ; WX 334 ; N braceright ; B 28 -145 392 771 ;
C 126 ; WX 584 ; N asciitilde ; B 94 201 605 377 ;
C 161 ; WX 333 ; N exclamdown ; B 79 -193 321 530 ;
C 162 ; WX 556 ; N cent ; B 149 0 617 723 ;
C 163 ; WX 556 ; N sterling ; B 59 0 609 741 ;
C 165 ; WX 556 ; N yen ; B 110 0 671 723 ;
C 167 ; WX 556 ; N section ; B 38 -163 610 741 ;
C 168 ; WX 556 ; N currency ; B 97 143 604 580 ;
C 169 ; WX 191 ; N quotesingle ; B 160 506 310 771 ;
C 171 ; WX 556 ; N guillemotleft ; B 109 48 579 482 ;
C 180 ; WX 278 ; N periodcentered ; B 127 240 271 360 ;
C 182 ; WX 537 ; N paragraph ; B 151 -145 586 723 ;
C 187 ; WX 556 ; N guillemotright ; B 83 48 553 482 ;
C 191 ; WX 611 ; N questiondown ; B 77 -211 508 530 ;
C 193 ; WX 333 ; N grave ; B 209 626 406 783 ;
C 194 ; WX 333 ; N acute ; B 188 626 449 783 ;
C 195 ; WX 333 ; N circumflex ; B 121 626 462 783 ;
C 196 ; WX 333 ; N tilde ; B 129 626 477 741 ;
C 197 ; WX 333 ; N macron ; B 135 627 463 699 ;
C 198 ; WX 333 ; N breve ; B 160 626 486 783 ;
C 199 ; WX 333 ; N dotaccent ; B 243 626 360 723 ;
C 200 ; WX 333 ; N dieresis ; B 153 626 447 711 ;
C 202 ; WX 333 ; N ring ; B 201 626 427 848 ;
C 203 ; WX 333 ; N cedilla ; B 44 -211 228 0 ;
C 205 ; WX 333 ; N hungarumlaut ; B 100 626 515 783 ;
C 206 ; WX 333 ; N ogonek ; B 61 -181 225 0 ;
C 207 ; WX 333 ; N caron ; B 153 626 494 783 ;
C 225 ; WX 1000 ; N AE ; B 9 0 1095 723 ;
C 227 ; WX 370 ; N ordfeminine ; B 139 402 436 741 ;
C 232 ; WX 556 ; N Lslash ; B 68 0 552 723 ;
C 233 ; WX 778 ; N Oslash ; B 47 -18 881 741 ;
C 234 ; WX 1000 ; N OE ; B 107 -18 1095 741 ;
C 235 ; WX 365 ; N ordmasculine ; B 145 402 448 741 ;
C 241 ; WX 889 ; N ae ; B 69 -12 897 542 ;
C 245 ; WX 222 ; N dotlessi ; B 63 0 265 530 ;
C 248 ; WX 222 ; N lslash ; B 60 0 329 771 ;
C 249 ; WX 611 ; N oslash ; B 68 -12 649 542 ;
C 250 ; WX 944 ; N oe ; B 87 -12 951 542 ;
C 251 ; WX 611 ; N germandbls ; B 63 -12 602 783 ;
C -1 ; WX 667 ; N Aacute ; B 9 0 690 940 ;
C -1 ; WX 667 ; N Abreve ; B 9 0 686 940 ;
C -1 ; WX 667 ; N Acircumflex ; B 9 0 662 940 ;
C -1 ; WX 667 ; N Adieresis ; B 9 0 655 868 ;
C -1 ; WX 667 ; N Agrave ; B 9 0 655 940 ;
C -1 ; WX 667 ; N Amacron ; B 9 0 663 856 ;
C -1 ; WX 667 ; N Aogonek ; B 9 -181 655 723 ;
C -1 ; WX 667 ; N Aring ; B 9 0 655 945 ;
C -1 ; WX 667 ; N Atilde ; B 9 0 677 898 ;
C -1 ; WX 722 ; N Cacute ; B 118 -18 801 940 ;
C -1 ; WX 722 ; N Ccaron ; B 118 -18 801 940 ;
C -1 ; WX 722 ; N Ccedilla ; B 118 -211 801 741 ;
C -1 ; WX 722 ; N Ccircumflex ; B 118 -18 801 940 ;
C -1 ; WX 722 ; N Cdotaccent ; B 118 -18 801 880 ;
C -1 ; WX 722 ; N Dcaron ; B 81 0 762 940 ;
C -1 ; WX 722 ; N Dcroat ; B 68 0 763 723 ;
C -1 ; WX 667 ; N Eacute ; B 93 0 762 940 ;
C -1 ; WX 667 ; N Ebreve ; B 93 0 762 940 ;
C -1 ; WX 667 ; N Ecaron ; B 93 0 762 940 ;
C -1 ; WX 667 ; N Ecircumflex ; B 93 0 762 940 ;
C -1 ; WX 667 ; N Edieresis ; B 93 0 762 868 ;
C -1 ; WX 667 ; N Edotaccent ; B 93 0 762 880 ;
C -1 ; WX 667 ; N Egrave ; B 93 0 762 940 ;
C -1 ; WX 667 ; N Emacron ; B 93 0 762 856 ;
C -1 ; WX 722 ; N Eng ; B 81 -205 786 723 ;
C -1 ; WX 667 ; N Eogonek ; B 93 -181 762 723 ;
C -1 ; WX 722 ; N Eth ; B 68 0 763 723 ;
C -1 ; WX 556 ; N Euro ; B 52 -18 671 740 ;
C -1 ; WX 778 ; N Gbreve ; B 106 -18 827 940 ;
C -1 ; WX 778 ; N Gcircumflex ; B 106 -18 827 940 ;
C -1 ; WX 778 ; N Gcommaaccent ; B 106 -211 827 741 ;
C -1 ; WX 778 ; N Gdotaccent ; B 106 -18 827 880 ;
C -1 ; WX 722 ; N Hbar ; B 81 0 834 723 ;
C -1 ; WX 722 ; N Hcircumflex ; B 81 0 786 940 ;
C -1 ; WX 735 ; N IJ ; B 88 -145 790 723 ;
C -1 ; WX 278 ; N Iacute ; B 88 0 495 940 ;
C -1 ; WX 278 ; N Ibreve ; B 88 0 489 940 ;
C -1 ; WX 278 ; N Icircumflex ; B 88 0 466 940 ;
C -1 ; WX 278 ; N Idieresis ; B 88 0 451 868 ;
C -1 ; WX 278 ; N Idotaccent ; B 88 0 364 880 ;
C -1 ; WX 278 ; N Igrave ; B 88 0 368 940 ;
C -1 ; WX 278 ; N Imacron ; B 88 0 466 856 ;
C -1 ; WX 278 ; N Iogonek ; B 37 -181 335 723 ;
C -1 ; WX 278 ; N Itilde ; B 88 0 481 898 ;
C -1 ; WX 500 ; N Jcircumflex ; B 1 -145 674 940 ;
C -1 ; WX 667 ; N Kcommaaccent ; B 93 -211 738 723 ;
C -1 ; WX 556 ; N Lacute ; B 81 0 552 940 ;
C -1 ; WX 556 ; N Lcaron ; B 81 0 569 723 ;
C -1 ; WX 556 ; N Lcommaaccent ; B 81 -211 552 723 ;
C -1 ; WX 556 ; N Ldot ; B 81 0 552 723 ;
C -1 ; WX 722 ; N Nacute ; B 81 0 786 940 ;
C -1 ; WX 722 ; N Ncaron ; B 81 0 786 940 ;
C -1 ; WX 722 ; N Ncommaaccent ; B 81 -211 786 723 ;
C -1 ; WX 722 ; N Ntilde ; B 81 0 786 898 ;
C -1 ; WX 778 ; N Oacute ; B 107 -18 816 940 ;
C -1 ; WX 778 ; N Obreve ; B 107 -18 816 940 ;
C -1 ; WX 778 ; N Ocircumflex ; B 107 -18 816 940 ;
C -1 ; WX 778 ; N Odieresis ; B 107 -18 816 868 ;
C -1 ; WX 778 ; N Ograve ; B 107 -18 816 940 ;
C -1 ; WX 778 ; N Ohungarumlaut ; B 107 -18 847 940 ;
C -1 ; WX 778 ; N Omacron ; B 107 -18 816 856 ;
C -1 ; WX 778 ; N Otilde ; B 107 -18 816 898 ;
C -1 ; WX 722 ; N Racute ; B 81 0 718 940 ;
C -1 ; WX 722 ; N Rcaron ; B 81 0 718 940 ;
C -1 ; WX 722 ; N Rcommaaccent ; B 81 -211 718 723 ;
C -1 ; WX 667 ; N Sacute ; B 64 -18 704 940 ;
C -1 ; WX 667 ; N Scaron ; B 64 -18 704 940 ;
C -1 ; WX 667 ; N Scedilla ; B 64 -191 704 741 ;
C -1 ; WX 667 ; N Scircumflex ; B 64 -18 704 940 ;
C -1 ; WX 667 ; N Scommaaccent ; B 64 -211 704 741 ;
C -1 ; WX 611 ; N Tbar ; B 139 0 746 723 ;
C -1 ; WX 611 ; N Tcaron ; B 139 0 746 940 ;
C -1 ; WX 611 ; N Tcedilla ; B 139 -191 746 723 ;
C -1 ; WX 611 ; N Tcommaaccent ; B 139 -211 746 723 ;
C -1 ; WX 667 ; N Thorn ; B 81 0 729 723 ;
C -1 ; WX 722 ; N Uacute ; B 122 -18 786 940 ;
C -1 ; WX 722 ; N Ubreve ; B 122 -18 786 940 ;
C -1 ; WX 722 ; N Ucircumflex ; B 122 -18 786 940 ;
C -1 ; WX 722 ; N Udieresis ; B 122 -18 786 868 ;
C -1 ; WX 722 ; N Ugrave ; B 122 -18 786 940 ;
C -1 ; WX 722 ; N Uhungarumlaut ; B 122 -18 815 940 ;
C -1 ; WX 722 ; N Umacron ; B 122 -18 786 856 ;
C -1 ; WX 722 ; N Uogonek ; B 122 -181 786 723 ;
C -1 ; WX 722 ; N Uring ; B 122 -18 786 993 ;
C -1 ; WX 722 ; N Utilde ; B 122 -18 786 898 ;
C -1 ; WX 944 ; N Wcircumflex ; B 157 0 1077 940 ;
C -1 ; WX 667 ; N Yacute ; B 160 0 798 940 ;
C -1 ; WX 667 ; N Ycircumflex ; B 160 0 798 940 ;
C -1 ; WX 667 ; N Ydieresis ; B 160 0 798 868 ;
C -1 ; WX 611 ; N Zacute ; B 50 0 706 940 ;
C -1 ; WX 611 ; N Zcaron ; B 50 0 706 940 ;
C -1 ; WX 611 ; N Zdotaccent ; B 50 0 706 880 ;
C -1 ; WX 556 ; N aacute ; B 69 -12 607 783 ;
C -1 ; WX 556 ; N abreve ; B 69 -12 607 783 ;
C -1 ; WX 556 ; N acircumflex ; B 69 -12 578 783 ;
C -1 ; WX 556 ; N adieresis ; B 69 -12 554 711 ;
C -1 ; WX 333 ; N afii57929 ; B 228 549 369 771 ;
C -1 ; WX 556 ; N agrave ; B 69 -12 543 783 ;
C -1 ; WX 556 ; N amacron ; B 69 -12 569 699 ;
C -1 ; WX 556 ; N aogonek ; B 69 -181 543 542 ;
C -1 ; WX 333 ; N apostrophe ; B 228 549 369 771 ;
C -1 ; WX 556 ; N aring ; B 69 -12 543 848 ;
C -1 ; WX 556 ; N atilde ; B 69 -12 578 741 ;
C -1 ; WX 260 ; N brokenbar ; B 65 -145 320 771 ;
C -1 ; WX 500 ; N cacute ; B 87 -12 610 783 ;
C -1 ; WX 500 ; N ccaron ; B 87 -12 624 783 ;
C -1 ; WX 500 ; N ccedilla ; B 87 -211 552 542 ;
C -1 ; WX 500 ; N ccircumflex ; B 87 -12 592 783 ;
C -1 ; WX 500 ; N cdotaccent ; B 87 -12 552 723 ;
C -1 ; WX 333 ; N commaaccent ; B 45 -211 227 -54 ;
C -1 ; WX 737 ; N copyright ; B 72 0 810 723 ;
C -1 ; WX 615 ; N dcaron ; B 83 -12 769 771 ;
C -1 ; WX 556 ; N dcroat ; B 83 -12 688 771 ;
C -1 ; WX 400 ; N degree ; B 171 452 467 741 ;
C -1 ; WX 584 ; N divide ; B 102 0 598 578 ;
C -1 ; WX 222 ; N dotlessj ; B -114 -205 268 530 ;
C -1 ; WX 556 ; N eacute ; B 89 -12 603 783 ;
C -1 ; WX 556 ; N ebreve ; B 89 -12 597 783 ;
C -1 ; WX 556 ; N ecaron ; B 89 -12 606 783 ;
C -1 ; WX 556 ; N ecircumflex ; B 89 -12 579 783 ;
C -1 ; WX 556 ; N edieresis ; B 89 -12 565 711 ;
C -1 ; WX 556 ; N edotaccent ; B 89 -12 564 723 ;
C -1 ; WX 556 ; N egrave ; B 89 -12 564 783 ;
C -1 ; WX 556 ; N emacron ; B 89 -12 574 699 ;
C -1 ; WX 556 ; N eng ; B 75 -205 570 542 ;
C -1 ; WX 556 ; N eogonek ; B 89 -181 564 542 ;
C -1 ; WX 602 ; N eth ; B 87 -12 624 818 ;
C -1 ; WX 556 ; N gbreve ; B 14 -205 612 783 ;
C -1 ; WX 556 ; N gcircumflex ; B 14 -205 590 783 ;
C -1 ; WX 556 ; N gcommaaccent ; B 14 -205 590 848 ;
C -1 ; WX 556 ; N gdotaccent ; B 14 -205 590 723 ;
C -1 ; WX 556 ; N hbar ; B 75 0 570 771 ;
C -1 ; WX 556 ; N hcircumflex ; B 75 0 616 976 ;
C -1 ; WX 222 ; N iacute ; B 63 0 436 783 ;
C -1 ; WX 222 ; N ibreve ; B 63 0 430 783 ;
C -1 ; WX 222 ; N icircumflex ; B 63 0 406 783 ;
C -1 ; WX 222 ; N idieresis ; B 63 0 391 711 ;
C -1 ; WX 222 ; N igrave ; B 63 0 308 783 ;
C -1 ; WX 444 ; N ij ; B 63 -205 529 723 ;
C -1 ; WX 222 ; N imacron ; B 63 0 407 699 ;
C -1 ; WX 222 ; N iogonek ; B 8 -181 304 723 ;
C -1 ; WX 222 ; N itilde ; B 63 0 421 741 ;
C -1 ; WX 222 ; N jcircumflex ; B -114 -205 401 783 ;
C -1 ; WX 500 ; N kcommaaccent ; B 75 -211 547 771 ;
C -1 ; WX 500 ; N kgreenlandic ; B 75 0 547 530 ;
C -1 ; WX 222 ; N lacute ; B 63 0 463 976 ;
C -1 ; WX 292 ; N lcaron ; B 63 0 452 771 ;
C -1 ; WX 222 ; N lcommaaccent ; B -2 -211 313 771 ;
C -1 ; WX 334 ; N ldot ; B 63 0 410 771 ;
C -1 ; WX 584 ; N logicalnot ; B 114 145 611 434 ;
C -1 ; WX 222 ; N longs ; B 70 0 406 783 ;
C -1 ; WX 556 ; N mu ; B 30 -193 587 530 ;
C -1 ; WX 584 ; N multiply ; B 79 55 620 523 ;
C -1 ; WX 556 ; N nacute ; B 75 0 588 783 ;
C -1 ; WX 604 ; N napostrophe ; B 110 0 618 771 ;
C -1 ; WX 278 ; N nbspace ; B 0 0 0 0 ;
C -1 ; WX 556 ; N ncaron ; B 75 0 613 783 ;
C -1 ; WX 556 ; N ncommaaccent ; B 75 -211 570 542 ;
C -1 ; WX 556 ; N ntilde ; B 75 0 584 741 ;
C -1 ; WX 556 ; N oacute ; B 86 -12 603 783 ;
C -1 ; WX 556 ; N obreve ; B 86 -12 597 783 ;
C -1 ; WX 556 ; N ocircumflex ; B 86 -12 576 783 ;
C -1 ; WX 556 ; N odieresis ; B 86 -12 576 711 ;
C -1 ; WX 556 ; N ograve ; B 86 -12 576 783 ;
C -1 ; WX 556 ; N ohungarumlaut ; B 86 -12 705 783 ;
C -1 ; WX 556 ; N omacron ; B 86 -12 576 699 ;
C -1 ; WX 834 ; N onehalf ; B 65 -18 841 741 ;
C -1 ; WX 834 ; N onequarter ; B 89 -18 839 741 ;
C -1 ; WX 333 ; N onesuperior ; B 187 289 376 734 ;
C -1 ; WX 556 ; N otilde ; B 86 -12 588 741 ;
C -1 ; WX 584 ; N plusminus ; B 51 0 613 578 ;
C -1 ; WX 333 ; N racute ; B 75 0 510 783 ;
C -1 ; WX 333 ; N rcaron ; B 75 0 500 783 ;
C -1 ; WX 333 ; N rcommaaccent ; B 34 -211 434 542 ;
C -1 ; WX 737 ; N registered ; B 72 0 810 723 ;
C -1 ; WX 500 ; N sacute ; B 61 -12 582 783 ;
C -1 ; WX 500 ; N scaron ; B 61 -12 596 783 ;
C -1 ; WX 500 ; N scedilla ; B 61 -191 508 542 ;
C -1 ; WX 500 ; N scircumflex ; B 61 -12 563 783 ;
C -1 ; WX 500 ; N scommaaccent ; B 61 -211 508 542 ;
C -1 ; WX 333 ; N sfthyphen ; B 94 253 355 325 ;
C -1 ; WX 278 ; N tbar ; B 69 -12 379 636 ;
C -1 ; WX 375 ; N tcaron ; B 97 -12 517 824 ;
C -1 ; WX 278 ; N tcedilla ; B 69 -191 379 636 ;
C -1 ; WX 278 ; N tcommaaccent ; B 46 -211 379 636 ;
C -1 ; WX 556 ; N thorn ; B 36 -193 579 771 ;
C -1 ; WX 834 ; N threequarters ; B 112 -18 884 741 ;
C -1 ; WX 333 ; N threesuperior ; B 94 278 419 734 ;
C -1 ; WX 333 ; N twosuperior ; B 94 289 437 734 ;
C -1 ; WX 556 ; N uacute ; B 92 -12 600 783 ;
C -1 ; WX 556 ; N ubreve ; B 92 -12 594 783 ;
C -1 ; WX 556 ; N ucircumflex ; B 92 -12 587 783 ;
C -1 ; WX 556 ; N udieresis ; B 92 -12 587 711 ;
C -1 ; WX 556 ; N ugrave ; B 92 -12 587 783 ;
C -1 ; WX 556 ; N uhungarumlaut ; B 92 -12 682 783 ;
C -1 ; WX 556 ; N umacron ; B 92 -12 587 699 ;
C -1 ; WX 556 ; N uni20AC ; B 52 -18 671 740 ;
C -1 ; WX 556 ; N uogonek ; B 92 -181 587 530 ;
C -1 ; WX 556 ; N uring ; B 92 -12 587 848 ;
C -1 ; WX 556 ; N utilde ; B 92 -12 587 741 ;
C -1 ; WX 722 ; N wcircumflex ; B 112 0 821 783 ;
C -1 ; WX 500 ; N yacute ; B 75 -193 600 783 ;
C -1 ; WX 500 ; N ycircumflex ; B 75 -193 600 783 ;
C -1 ; WX 500 ; N ydieresis ; B 75 -193 600 711 ;
C -1 ; WX 500 ; N zacute ; B 36 0 564 783 ;
C -1 ; WX 500 ; N zcaron ; B 36 0 579 783 ;
C -1 ; WX 500 ; N zdotaccent ; B 36 0 564 723 ;
EndCharMetrics
StartComposites 132
CC Aacute 2 ; PCC A 0 0 ; PCC acute 210 157 ;
CC Abreve 2 ; PCC A 0 0 ; PCC breve 169 157 ;
CC Acircumflex 2 ; PCC A 0 0 ; PCC circumflex 168 157 ;
CC Adieresis 2 ; PCC A 0 0 ; PCC dieresis 168 157 ;
CC Agrave 2 ; PCC A 0 0 ; PCC grave 126 157 ;
CC Amacron 2 ; PCC A 0 0 ; PCC macron 169 157 ;
CC Atilde 2 ; PCC A 0 0 ; PCC tilde 168 157 ;
CC Cacute 2 ; PCC C 0 0 ; PCC acute 281 157 ;
CC Ccaron 2 ; PCC C 0 0 ; PCC caron 250 157 ;
CC Ccircumflex 2 ; PCC C 0 0 ; PCC circumflex 250 157 ;
CC Cdotaccent 2 ; PCC C 0 0 ; PCC dotaccent 250 157 ;
CC Dcaron 2 ; PCC D 0 0 ; PCC caron 167 157 ;
CC Eacute 2 ; PCC E 0 0 ; PCC acute 240 157 ;
CC Ebreve 2 ; PCC E 0 0 ; PCC breve 193 157 ;
CC Ecaron 2 ; PCC E 0 0 ; PCC caron 191 157 ;
CC Ecircumflex 2 ; PCC E 0 0 ; PCC circumflex 199 157 ;
CC Edieresis 2 ; PCC E 0 0 ; PCC dieresis 192 157 ;
CC Edotaccent 2 ; PCC E 0 0 ; PCC dotaccent 192 157 ;
CC Egrave 2 ; PCC E 0 0 ; PCC grave 156 157 ;
CC Emacron 2 ; PCC E 0 0 ; PCC macron 186 157 ;
CC Gbreve 2 ; PCC G 0 0 ; PCC breve 256 157 ;
CC Gcircumflex 2 ; PCC G 0 0 ; PCC circumflex 256 157 ;
CC Gdotaccent 2 ; PCC G 0 0 ; PCC dotaccent 257 157 ;
CC Hcircumflex 2 ; PCC H 0 0 ; PCC circumflex 194 157 ;
CC Iacute 2 ; PCC I 0 0 ; PCC acute 15 157 ;
CC Ibreve 2 ; PCC I 0 0 ; PCC breve -28 157 ;
CC Icircumflex 2 ; PCC I 0 0 ; PCC circumflex -28 157 ;
CC Idieresis 2 ; PCC I 0 0 ; PCC dieresis -28 157 ;
CC Idotaccent 2 ; PCC I 0 0 ; PCC dotaccent -27 157 ;
CC Igrave 2 ; PCC I 0 0 ; PCC grave -70 157 ;
CC Imacron 2 ; PCC I 0 0 ; PCC macron -28 157 ;
CC Itilde 2 ; PCC I 0 0 ; PCC tilde -28 157 ;
CC Jcircumflex 2 ; PCC J 0 0 ; PCC circumflex 180 157 ;
CC Lacute 2 ; PCC L 0 0 ; PCC acute 24 157 ;
CC Ldot 2 ; PCC L 0 0 ; PCC dotaccent 245 -313 ;
CC Nacute 2 ; PCC N 0 0 ; PCC acute 226 157 ;
CC Ncaron 2 ; PCC N 0 0 ; PCC caron 195 157 ;
CC Ntilde 2 ; PCC N 0 0 ; PCC tilde 207 157 ;
CC Oacute 2 ; PCC O 0 0 ; PCC acute 265 157 ;
CC Obreve 2 ; PCC O 0 0 ; PCC breve 222 157 ;
CC Ocircumflex 2 ; PCC O 0 0 ; PCC circumflex 222 157 ;
CC Odieresis 2 ; PCC O 0 0 ; PCC dieresis 222 157 ;
CC Ograve 2 ; PCC O 0 0 ; PCC grave 180 157 ;
CC Ohungarumlaut 2 ; PCC O 0 0 ; PCC hungarumlaut 301 157 ;
CC Omacron 2 ; PCC O 0 0 ; PCC macron 222 157 ;
CC Otilde 2 ; PCC O 0 0 ; PCC tilde 222 157 ;
CC Racute 2 ; PCC R 0 0 ; PCC acute 192 157 ;
CC Rcaron 2 ; PCC R 0 0 ; PCC caron 143 157 ;
CC Sacute 2 ; PCC S 0 0 ; PCC acute 193 157 ;
CC Scaron 2 ; PCC S 0 0 ; PCC caron 162 157 ;
CC Scircumflex 2 ; PCC S 0 0 ; PCC circumflex 161 157 ;
CC Tcaron 2 ; PCC T 0 0 ; PCC caron 139 157 ;
CC Uacute 2 ; PCC U 0 0 ; PCC acute 243 157 ;
CC Ubreve 2 ; PCC U 0 0 ; PCC breve 201 157 ;
CC Ucircumflex 2 ; PCC U 0 0 ; PCC circumflex 201 157 ;
CC Udieresis 2 ; PCC U 0 0 ; PCC dieresis 201 157 ;
CC Ugrave 2 ; PCC U 0 0 ; PCC grave 159 157 ;
CC Uhungarumlaut 2 ; PCC U 0 0 ; PCC hungarumlaut 269 157 ;
CC Umacron 2 ; PCC U 0 0 ; PCC macron 201 157 ;
CC Uring 2 ; PCC U 0 0 ; PCC ring 201 145 ;
CC Utilde 2 ; PCC U 0 0 ; PCC tilde 201 157 ;
CC Wcircumflex 2 ; PCC W 0 0 ; PCC circumflex 311 157 ;
CC Yacute 2 ; PCC Y 0 0 ; PCC acute 213 157 ;
CC Ycircumflex 2 ; PCC Y 0 0 ; PCC circumflex 178 157 ;
CC Ydieresis 2 ; PCC Y 0 0 ; PCC dieresis 178 157 ;
CC Zacute 2 ; PCC Z 0 0 ; PCC acute 170 157 ;
CC Zcaron 2 ; PCC Z 0 0 ; PCC caron 145 157 ;
CC Zdotaccent 2 ; PCC Z 0 0 ; PCC dotaccent 145 157 ;
CC aacute 2 ; PCC a 0 0 ; PCC acute 158 0 ;
CC abreve 2 ; PCC a 0 0 ; PCC breve 121 0 ;
CC acircumflex 2 ; PCC a 0 0 ; PCC circumflex 116 0 ;
CC adieresis 2 ; PCC a 0 0 ; PCC dieresis 107 0 ;
CC agrave 2 ; PCC a 0 0 ; PCC grave 74 0 ;
CC amacron 2 ; PCC a 0 0 ; PCC macron 106 0 ;
CC aring 2 ; PCC a 0 0 ; PCC ring 116 0 ;
CC atilde 2 ; PCC a 0 0 ; PCC tilde 101 0 ;
CC cacute 2 ; PCC c 0 0 ; PCC acute 161 0 ;
CC ccaron 2 ; PCC c 0 0 ; PCC caron 130 0 ;
CC ccircumflex 2 ; PCC c 0 0 ; PCC circumflex 130 0 ;
CC cdotaccent 2 ; PCC c 0 0 ; PCC dotaccent 130 0 ;
CC eacute 2 ; PCC e 0 0 ; PCC acute 154 0 ;
CC ebreve 2 ; PCC e 0 0 ; PCC breve 111 0 ;
CC ecaron 2 ; PCC e 0 0 ; PCC caron 112 0 ;
CC ecircumflex 2 ; PCC e 0 0 ; PCC circumflex 117 0 ;
CC edieresis 2 ; PCC e 0 0 ; PCC dieresis 118 0 ;
CC edotaccent 2 ; PCC e 0 0 ; PCC dotaccent 112 0 ;
CC egrave 2 ; PCC e 0 0 ; PCC grave 69 0 ;
CC emacron 2 ; PCC e 0 0 ; PCC macron 111 0 ;
CC gbreve 2 ; PCC g 0 0 ; PCC breve 126 0 ;
CC gcircumflex 2 ; PCC g 0 0 ; PCC circumflex 125 0 ;
CC gdotaccent 2 ; PCC g 0 0 ; PCC dotaccent 120 0 ;
CC hcircumflex 2 ; PCC h 0 0 ; PCC circumflex 115 193 ;
CC iacute 2 ; PCC dotlessi 0 0 ; PCC acute -13 0 ;
CC ibreve 2 ; PCC dotlessi 0 0 ; PCC breve -56 0 ;
CC icircumflex 2 ; PCC dotlessi 0 0 ; PCC circumflex -56 0 ;
CC idieresis 2 ; PCC dotlessi 0 0 ; PCC dieresis -56 0 ;
CC igrave 2 ; PCC dotlessi 0 0 ; PCC grave -98 0 ;
CC imacron 2 ; PCC dotlessi 0 0 ; PCC macron -56 0 ;
CC itilde 2 ; PCC dotlessi 0 0 ; PCC tilde -56 0 ;
CC lacute 2 ; PCC l 0 0 ; PCC acute -24 193 ;
CC nacute 2 ; PCC n 0 0 ; PCC acute 139 0 ;
CC ncaron 2 ; PCC n 0 0 ; PCC caron 119 0 ;
CC ntilde 2 ; PCC n 0 0 ; PCC tilde 107 0 ;
CC oacute 2 ; PCC o 0 0 ; PCC acute 154 0 ;
CC obreve 2 ; PCC o 0 0 ; PCC breve 111 0 ;
CC ocircumflex 2 ; PCC o 0 0 ; PCC circumflex 111 0 ;
CC odieresis 2 ; PCC o 0 0 ; PCC dieresis 111 0 ;
CC ograve 2 ; PCC o 0 0 ; PCC grave 69 0 ;
CC ohungarumlaut 2 ; PCC o 0 0 ; PCC hungarumlaut 190 0 ;
CC omacron 2 ; PCC o 0 0 ; PCC macron 111 0 ;
CC otilde 2 ; PCC o 0 0 ; PCC tilde 111 0 ;
CC racute 2 ; PCC r 0 0 ; PCC acute 61 0 ;
CC rcaron 2 ; PCC r 0 0 ; PCC caron 6 0 ;
CC sacute 2 ; PCC s 0 0 ; PCC acute 133 0 ;
CC scaron 2 ; PCC s 0 0 ; PCC caron 102 0 ;
CC scircumflex 2 ; PCC s 0 0 ; PCC circumflex 101 0 ;
CC uacute 2 ; PCC u 0 0 ; PCC acute 151 0 ;
CC ubreve 2 ; PCC u 0 0 ; PCC breve 108 0 ;
CC ucircumflex 2 ; PCC u 0 0 ; PCC circumflex 108 0 ;
CC udieresis 2 ; PCC u 0 0 ; PCC dieresis 108 0 ;
CC ugrave 2 ; PCC u 0 0 ; PCC grave 72 0 ;
CC uhungarumlaut 2 ; PCC u 0 0 ; PCC hungarumlaut 167 0 ;
CC umacron 2 ; PCC u 0 0 ; PCC macron 108 0 ;
CC uring 2 ; PCC u 0 0 ; PCC ring 108 0 ;
CC utilde 2 ; PCC u 0 0 ; PCC tilde 108 0 ;
CC wcircumflex 2 ; PCC w 0 0 ; PCC circumflex 198 0 ;
CC yacute 2 ; PCC y 0 0 ; PCC acute 127 0 ;
CC ycircumflex 2 ; PCC y 0 0 ; PCC circumflex 91 0 ;
CC ydieresis 2 ; PCC y 0 0 ; PCC dieresis 91 0 ;
CC zacute 2 ; PCC z 0 0 ; PCC acute 115 0 ;
CC zcaron 2 ; PCC z 0 0 ; PCC caron 85 0 ;
CC zdotaccent 2 ; PCC z 0 0 ; PCC dotaccent 82 0 ;
EndComposites
EndFontMetrics

View File

@ -0,0 +1,947 @@
%!PS-AdobeFont-1.1: LuciduxSans-Oblique 000.200
%%CreationDate: 2000 Mar 04 11:21:33
% Copyright (C) 2000 Bigelow & Holmes Inc. and Y&Y, Inc.
% Patents pending. All Rights Reserved.
% Lucidux is a trademark of Bigelow & Holmes Inc.
% Permission is hereby granted, free of charge, to any person obtaining a
% copy of these Fonts and associated documentation files (the "Font Software"),
% to deal in the Font Software, including without limitation the rights to
% use, copy, merge, publish, distribute, sublicense, and/or sell copies of
% the Font Software, and to permit persons to whom the Font Software is
% furnished to do so, subject to the following conditions:
% The above copyright, trademark, patent notices and this permission notice
% shall be included in all copies of one or more of the Software.
% The Font Software may not be modified, alterered, or added to, and in
% particular the designs of glyphs or characters in the Fonts may not be
% modified nor may additional glyphs or characters be added to the Fonts,
% except that composite characters composed of two or more characters in the
% Fonts may be created using the seac (Standard Encoding Accented Character)
% Type 1 operator.
% THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
% COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BIGELOW &
% HOLMES INC. OR Y&Y, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
% LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR
% CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
% ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
% OTHER DEALINGS IN THE FONT SOFTWARE.
% Except as contained in this notice, the names of Bigelow & Holmes Inc.
% and Y&Y, Inc. shall not be used in advertising or otherwise to promote
% the sale, use or other dealings in this Font Software without prior
% written authorization from the Bigelow & Holmes Inc. and Y&Y, Inc.
% For further information, contact:
% mailto:support@yandy.com or mailto:design@bigelowandholmes.com
% For other Bigelow & Holmes fonts see http://www.YandY.com
12 dict begin
/FontInfo 9 dict dup begin
/version (000.200) readonly def
/Notice (Copyright (C) 2000 Bigelow & Holmes Inc. and Y&Y, Inc. All rights reserved.) readonly def
/FullName (Lucidux Sans Oblique) readonly def
/FamilyName (LuciduxSans) readonly def
/Weight (Normal) readonly def
/ItalicAngle -11.3 def
/isFixedPitch false def
/UnderlinePosition -100 def
/UnderlineThickness 50 def
end readonly def
/FontName /LuciduxSans-Oblique def
/PaintType 0 def
/FontType 1 def
/FontMatrix [0.001 0 0.0002 0.001 0 0] readonly def
/Encoding StandardEncoding def
/FontBBox{-114 -211 1095 993}readonly def
/UniqueID 5096732 def
currentdict end
currentfile eexec
8053514D28EC28DA1630165FAB262882D3FD7667933E8516EE9710995B33AD6AFA66AE56E3B4F8
1A010BA2D16746155E0B46B8233AF9FC6FB5A1DE6E6D7277AEC5CE81679028F3B440619FB93E88
614EBEE63F9A83374DA4CF45FCBBACEBE22717D34438C9B2E3DC7580F497AC697EA20AC096930F
E90934EA8FFE999902BA55F2149DEADDCBC4CF03F530F526450856BF8F3CE1C247AA6810D725B6
E4CB0C6B7DC3B7B5FBE22909A1ED01A6BCEFAE9A709DB1D61BF8A223420C27BC28535F3C5C58CE
BD7239771F455E727EB9C9025F7B0B98D9C49F8A33E8C9A67A30CBC40719B9902A42978F54386A
B019C6EED778074F809506075C7CF394AFF792A52C36CC8FCE79BAABF945F6AB3AE924FBF89F12
D0D56822E09D7226051E5235D975B5A7E02610477A9B9148DA4E93861FF37C54BBB2F3196A5A37
94CC7C8B06CB9817A184DD7B41CF130CA812FD511CC539DA6AE1E3D8D57C26DC2630D87CA276CB
0B55BEC3BB4626608A4DE50E3CBF313230AFAA9E86F83366003B63876ED7072ADF068B03629105
DE8544254F4129096C4FCB741029ED5BA6CB35A252101753C6C281596F941C8920384006DC05B0
7524CE87D7417B91C09BBEB93B101B235AB55AA83002BBEB2985F027DFBBC44788AEDC34EF62DC
2A09A392092F1A50F78EA5581DFC60B398AC14788E3B34B0668E36052A5CEE9B99194450D5EF58
09CE4A135E0748A0B303CE38670BF1259F07723DE12F4CD22AF12BD694E18ED00771D33F9526DA
174BDF8B8A436D9393EBE156CCA73F0BF8918F0B38391DFF01B58AAEB19CDC034A8AF404241B38
76EF2BA5BCA0B558529249379A42CF8760EEA3940C75D8BB8E8B73F93AF59AD85BCA1CBAD644AE
A6250A5D31A85622C0679181F4C77750A5B677F9E8E15DE7BF691BEE2D69968CA11564E06C0329
26537AC3FABA055613A724B3963FE5D55CE9ACA3CB3B60A441545B5A0FC5997997B5A3F0E1278B
22BD9261203FF2843678148A6F35DAFD8A84FB0A31C02D199BE33C6D5028BA15BCD58A16B4A2EA
B46183B6C91682BF4D8FD64F91D8EE0AB4BE4C2F3B6563ECDD4EEC06069E63D1DB4C0444C4FADB
70C16B6C29BB621E1F5F55405E90D965A6AB5870C30A02BF977C49062B104C6D9F9E4B1B1B1FE4
E4A19F5B2B36DDD1B9015B2BDF27CC38376393DFA5610A2AA765ED36F113A7F8534AE0ABFCEA93
DCD5BC0C00B77742E6B92C88CD296CE78F6DDDF463FADF15D59F986035CAD7998191B9002D536F
D1578FA40E4B18D23164AFFD6C91D7B636497C86F743D14AB370FA25BFE68047223B3890AE5348
BBD1A35D5B80579A6C1754EF5FC435A2D3F2131FC63525294329133007E8A2FDF8C3CCBB235577
F0B8A91BDEB2648A833F63382FDB32E2E646CFF228F1F326F51E086D3023FFFC9185C666BF727C
4AD617741FF3DF6B205D21D7C2AA1616421AC49E94FF2F1A04A33ED9A13218C10650FCF75865E0
CB7F08D250D3511E22D34E28DEFD4A44FBC573C888C769600053C088DA2D643AD043C4339F7581
A38D4CDA6DC5005E90251D38F1FBA1AC10C679894D096C7572DE0E6CE0B8B3C8281DEC22BF337C
9D8ACC39B5A5030FC54E46C779AEF20DCA8926C5FE6422DB9AA089113A3E001A97E8762B68D7BE
E7E9AABC8F098161B076C10A9D560F9094A41114F56746C6ABB9E9F3454CDCE50669B0AB11F795
1E928CA3A37EFEFCFF97D42127A373A35CC54D054150ACC4851969E4C848EF44B9B2C2F314DA9A
C684A09C35569DB4D0CEF7511AE719DEB3181C47E7F95FECB8BC2A1F8301350D7384E67B7EEAB7
6EDAD4C361E8910F3A4538B0528E8E2338267506B8BAB757C203D9F96B01AA67534BBC736D108C
376EB8500E121768BFA217A6D0EB02DF688E9F664B4F15FD5CEAF0EF820B15AEFF20C18103865F
2C0457C39EA7F37FC5B1F02B45B85B91AFD59E3ACCF6392845FD5F0D197AE0DA7D2B992542CF20
72AF36CD6DAF3E96E5B56F28F072D844A0114B35FCA75ED7B2ACFA9C71093A78ED1F749120C4AF
661B8D6CF18F054C459A8B939B30A6D72E9349794436167F048723E1E18A04E6DF65584DB34B89
8313151E9E59E504B5EC388EE6B744F5D7E037BD99275D7DFA5D2ECFE2538B49B315B3A6994326
8FE326CEB209E407BD9801C65321F3180E00DFA768DD7733EBBB5BD1FE14A96A1B86F5D7DBEF3A
EDAE880D7CFA4890E330A131C9B32E5EF275776B6E458ACAD52467570309F73B4E6BF16A18FE88
DD79CFA7CB98E02F92AD7431B0474178BFE342DD6022BB7FA6443C7D8054D5CBB1055F515686A3
2CF31102B435C4ADBE6D72CE5F5103FBABEE30CDC37580CCDB54DE8FB3CA1E43562D73B29788B8
E1F3350F82DF5039C8E06D3B2191A750DF0AB9D2922A0DB6B4673E5226422BD81B58C058E5581F
A8E17C9935BEEAD10D3EC338BF825502700FF94619611955A6D7DDF55AAAE6B1EF2F9EDA1E7EDC
7D5B11B2771D03382A2594D9A08DDF522FBB8ED5183BDAD992530639F351586FDF24C4B9D9037E
8B97E36502F7DACB52E4C4602F5224BF8C1FC37908EA64FC8A2A5F05902E4B8BEFBCFBDE971A8F
82A99BDCCC29CE2677B832D08493D5463B13B25829BBD265201808D7412CB41A6B3CE3461CF737
463EB19D3FCC05507A71AD250537CC05458FDB7ACDA9343892F3B27E215C572FB42D8AA9F4300A
1C282AB7F83BB28FBD134716EE09BE26488306488CD8E869647493156D540B90C2288FF1F359D9
9685CB6EFEDAA78FD29F1302C67E97B01B8DAF5E6D77E16885460294F195C390B3D6ACEF2383DA
E3E4FFE6BA911C50F27B3AC9508F44327AB89DA58965079F3719EFC76B159B68328BDB139C1104
54D7601E22D7E5EA501F805C5BF4FBA3EA051152EDEEDF0CC05D7C6765F194C5AEACD110816D94
C6B30E978E4B07202AD3F748411BAF9200376B2FF1926255BA38A461A127FA8AC8C9B8BC3B4F83
8A48515191B4A8C228FCB7680EA09D1EB9A482C1FCF5FB9320C3FCD37388EDE07099D0254F33BB
AE55EED41766B96278B46DF7CBECFA52D0DF759EE64C1CF9ADD80521CDDD11B8F137C40F0EF319
632D5FAC752ECC0A398DAE6130B3E01AEA8D6804A7F2BCF6844A5E74398E626003FB64BD0F1B2E
99E3657FE6DCFD80B2F469D92EF076BACFAF61E14DF817C5E24EBD1CF9F1C0B4583F287E9E2FBB
048A2A00023514E4920F46289E4185C539C27D80F459B32D5EB2D43275C91CD09989731F423E33
5263CF83F2215DD6649A39824DB3B89350CEE31C6C07D04C9B679DA07A78793A4CA3B75F7E31B9
901C4379B103187BD1FCB473A327E9FCC7D45C9AC6F6EFB2DAD1817CA2F8976550116F9C3B6471
CF39F1843F07E168303EE34EA83A84E3EDCD145B453856AD21FEEB480649CE489A42A3116115BD
BDE85F9F801D59AA8DDAE8603A6F778785C47E41FD3535F867A0C6EA2601492A64EFAC053E529A
5D1A77FF58F784050BFF66694145C44603100D079BD633A0F90200A14D92B717D58D639C5E119E
479C0B92DD6058791715D07F21646CDA08D5EF31E7F9D5722A48DCF8451B9C969254651801358A
A13244B9BF93E4B1B4C952574A1548E8C0A49B57F471F4C5093FFCAAE3DDD38E80C33A101BF195
241E673F671438EC54DECBD006B6C9E3DB67C4B5AB05B9162900CD66F19B0EB3BF559B48D50F8D
CA100F63FE834A93AC0F9A0BAD4245E947CD848FA3277E24CADC2C477B2EEA0B2A339F0E7CF450
CA0EF79D3A6C28598825E03FE55B4180A2494E097391D4D910ABDBFB2237275CC30606EC425B20
472A229E8C778235A0DF2A002DA99A5DF4E83AC2816AE5229BAADEE4723AABEDF48C57017EF06C
8F1C4113C3C0B584453C96CC454835159E34F00B6FBECB94A79D21425D14506D23D0A918770BEE
69D60EF872BD5799A51149D875A8D6FFBA73830C4A5E0BC8D8CE28E72E9BCF3B32CC864A12E44B
1E8B9934BA0D2EF9DECA37431E542E0861CC85C8A7974440965995E0F773506FB7936F6613F023
251C315267899ED6879FE1FD27C90E2579B4517B379DE6B9219FE84842D7206C6614C18722D6AB
5665B9E4294E178D8A141A3CA7F3413D922B4EFC6AC99F84870CD1655154E04E3C78DAB918F951
5565D481F38DF8795940603CA0CBDE93F5455BB10DC043CF37342C03778F47ACA9BD2BA8502591
9DB8199EC26FD75901809188CA821F99194480A7C3670D8B0B89C65A9D9FA372C6FD56075C3072
E27B9ADFFBAFE39E646FC526DDEA73EB9B18E8A9D92D087A21A86C48DED12B0E11B9D04E1C1016
9F2D1BF2E6E6AF8CD15028D54087DF5322503C931538C0E56BCA5CEBEAE300CD44C285EEBB5508
7500BCD00B7DEC624F1758DA5E1D9AC0B7C3DBE5E8F1A7F87CBAE422D63E267FB7245736EB76DF
F82B54B156921AA5D31044CB1A2E88C1D0B108C4512543C2D8F001A104E2BE729B0AF4864F32A9
2FB8385A1005753F545DC69D66B1ED980B9AEB13B3A0921BB13EFC532152C2A258D88ED3DA9B15
2901A965A8108FF88B834DFBA4D80CA96148BDB3E13C037515872718FB22FEB61999671C1DFDFA
0AD97032B8E4CE1B3ADEFB01C6327AD2C492EC3B7439ED80E6BC296888225511FEBE1F165411E1
A18FF41C2363D1538BB9CEF5DD7667BE52A28BAB7D4D8AE6823CCE5FCFD6284D4AC21B42B5F42E
81ED445D914F558CADF62907E1C37EC0AED73FA6DCC88529E6379C30B9B61C2E72CFF7CD919C08
B81C924A65EDB08776E3762A109DA8B55B5F89C30A2AA4335EF6D5B6FC91F5BB9031F529EF6250
08AF9BD044416428349CE319F1E98BBDF46C95628DF86B62F0385DDB5288D3BA3AA48DBFB0A726
3BD3CBD87A75B52E2FA4E6E74BE7E335888EEE6EC40005B39C758A4E06FF9BCCF75ED94D643948
B04691E7C46286D7D611A238A07ACD1FFC9F742F9DE1F570C8EDD01C6C3C03A1EE45E0783AD514
BC071640BDB313C33D1BB81D4C8B59B4437B58BDFFEA478464E828F4DED42C55C9DC3C27C8A867
BD8E754069FC1DECD51E5B3FAA42B39B429DACE417AA2BDDC825D2AF88D08BA85A54B65B96F15F
8594B13E09526BF8AB8A674DACBDCF1984739CFC1DD40BC2F64B1A4F7AADF93891FC191896A6AA
CD01598F655BF7BF4B681832A5E08EF9FB17A505AFF213A3D2CD5C4CF2DFB6861BC85CED1BEA11
9C3715324857B8604F941543B85D97E52801CC4ABB95649CA733E6C393F480E0A16963A2CB3801
37215CE5802D673337E6308D46F8AE275E26F19746CB319D3E4340AE879DBB7FC553DAEC61C4AA
56DEAFFDEFD42FA1DC5C45C28FD9F66E5D6F00489D53A3367BCAE8A81286E3A89F6091B43C245D
F6C7B6F9C35C47D639FDD264DD716603D8B3BABEF8785AC4F0740C6FB7EABC7BAE61A4517C1BF6
F69DBF9F009500E576409BB69A4853CFBC72438829B86D6276DA9A6A0EB1F1711F730638DA6B91
8A381890FC8EAD040297C85BD0307A62CC45A5BE691D1D258CB9F9BB776A32DC6F3624E9C897B2
3FB5215AE222438504ED14C1553662AF4EEC414B8DD564DD78F713B1470750E5D143A0CD8475C9
C85DE3AA5B8D06A527BA8100FD346D7B091FF5B4242099BBD680C7F4378BA86D70CF9AF604A812
E51B64E0A6F26A3E278B58C67B5A49AD185BCE7EBD99597DF1BB5C0522EA51701D654DB5E2C657
62EC461A245CB956B0B18FD09BDB2CB0617EC2D89EC932CC5F989938DFDE6487C29CD8308FB3A6
4149590DC7AAFA3C9A79AC31B80152B8D49CECEB7FCBD28FDB98001E95D3C5AA65D63A3F2CD4F9
A7EA2D5BB4D820D4C0A0ED49AB0643574ADA5276A9E6DD59B019C49B17EBB7DE7F2B400C54C852
374DAA0539F683C3D684775CDE0EC09485B60FF2122A0EA168B4528253FD3EED1C9FBAF78B0D7F
1F1C6B509E3D8ECDA6D2E92C963319808EA7B268A3C37FAE564C84C78B450E67B2B69441051380
D5AC704BDEE2EBE93D29E32B574A622FF6610DA773CA34210CF5D835BCB2BF121877D69B1ECB56
3D694DA5995CF3F9C8CB525CFABF344D638EA8475790A055AFF046A32A8EC2691606B0F00141B2
ADF78382AE4B6A7A16378D1AEA1B35C92E4DBA9183157A8F7AE96E7267E220315B3A00F204C235
4C3350AD42833115AA3B783FEDD36D660165E7758F11D99EA3E8F0306F8989EE3ADCC5FB561381
AB45CA683B78A35AD3BACA299770505F33E815BCBD0F513F5E7EA12A8782749142F94BA886B521
64EDCB12EBF6DFB715C485D7A25AC051F71BF026D71D428320AD284CFCCF833756988279C2249F
F4E2282520CDC423376238BB57A4C6A7E29CEDAFEDF2F224F69FFD6B291664C898BC5F049DEDCE
4BB359CAE6F055E2A8160D24A96AB6E1CA0AD93FB80D95F7AB5083DA60336AF05A6DB33EA47651
28F7273D09B3F0501E89CA21BD8E0A87FEA3BB92BAC38134100071BD46AA4B164472DD6EFFC697
4C3C52B0B5D1849E1196D0D4B159FC4F7177D2DCF985BC6629DDDD1876EF83F522EFB7A4A7BD98
98E439122195523E1825120A209F1D4DE2FEE3B9110AECE61ED044A1B0981ADEB82AF59B6B8FE7
88B4DD6600098A4780914AD5BBF6CF66B53B642B0D57C4929BA0912888E995411C20A7F52E05E4
BF3A2D7847ECE17DE0D6ACD79379988B2115B2469E39C24CE54A9D31114184F9865C07D707A2CB
14A2F45B62A19C5E3ADFC090F2F53C97458EDF8EBE0D23A1680CBE18AA90B694153E8E9A805E77
B878C9CDE4D6D4532B6C1BAD4A42F7BB1EE748BAE521686B11A18B9FB97D10229997B718EFAF6E
EB3C223059083F3143E57DF2990229FEFCC5E91600CB3DC2602703F8256C663FF753B636475B05
ECA220FF5D9897A3080C38440DC9C0095D3ADFB49C24E3B4CAAC89F5E4FB2527B54ECD34B4F094
4D3C39657DF53FBB696C352E5AD9EA245BB4D61018E34154916DA4C227B2BC55034C67F373E65A
A4F3A9838DEF143CBA0409DE99206E3D31DF19AE24189613B4B11B47359966B72624A83D88A897
696E2CED831E895A4C9337DFE19483AA3F967E2A483149EFB53B53791078B06E43DC859F84F35A
9201DD09588E695C707169258B18C7E8A72AD464786E9188E017125642D9D56427F18C8622426E
4144451E56108E615EE15A26419F0AB0AF19EDE2988C982BEBBCC99506EB5D9D2D22940E3CB28F
EECBCF8AF67F81F196D53462FAC860FA0076A902A785AC346A2DCD064294CE87602F3791D3E178
88A5167DBB5FFF6DA15F221C47C50851FA7D81B7AFB2F7B8AE72566EA5EC5CDBE149CA15E1E07D
43F42497A7CCE6E2FB21168960446F31071F5F101BAEA8A1687ABE5BB00F564CFDC8A41D04826A
BDB6DDBAF8F02413F1E5E40446A74F64D287A16A70A305B38C5D58C40C80B2646CB7B9A8440715
EA1A1496E10B1EC58357B6296548635A5709724B0858D0E56F1778590FA592DA34B0F5085BF1AB
F06B5B31C7C1119CF65D17106A5A657C737D1A3289F74DD8258BEB910EA530E1406CE6D0E78589
BFD383BC20EDA6FF09D8DF2B9232053C4DD8A43D659BD28FEE42E451C14C5BC39C3689B1225869
724668393B0D1917A4F85F9171054D30F6E77B8210CEE239F6E72D55463AF4729DAE9DCF007371
6BB69BB5C57EEADCEE8387E600A7F9DBB36A25FB3B31E78E03019A19B8470ABF9691F2158B6CD0
1A834164ACD7E6BB471C88E31A3A3EE5FD793EC2B66B459DB7643AF4E99A683B7CF84644F3149C
1D9108C93CF41A60696DCE71C0B9D0DB1DEEEFD812ECFC40CAB9E970FA0262D2428C515377043B
C9111E2972EB943FDFBE04ACDF77259A2E16A11BF14223871B00DCAA88CA0E43E4CFB615395FA5
130AE496BC9F039055520187A5A03A491760CA2F755C7E8A9237A9FF40A3E10837B4A6C5731542
9BDB0A55A29059D73AB0A7C12FC31267185279AE9DBC0DBFB0E431CF2A094C4B5EFFE835D627DA
FBED6C6F1E4993912FEF954036AD8F1554376369DC38C61AA9DA8E02233552BD769B3036992B47
F3387D09F9AA1980C5312999899E4A4EF3C7BF90C8579C883D7B0BA2242E40F9A95501614B241C
4ECA8CB31071EC6EB6CEBBB917A0FCD3B12ADD6046AF3790668D9AEE87DAB0160F37DDB2230DD6
51BB701E72A9B05A998516EE6F506B3504AF675A9DECF7A3719B16253F94B1A0D873582A61471F
B0F9CA6B9A4143DA90C60FA53F2D6C741F4D15E26AD2BAC61DFC0817EAF480D67F16D4A88183C6
EEE75732772FCB0B31D149E2082AB91E9F2FD4C4569EC5FC46F1754E0C1E0A4EA3EEAF7A871DCD
9B05FA45A170D3052D1734A38F56B7D3F835CB8D375E7772B389AC5B924CCE960EE53019BF1322
4918E1672C65D14331F32FFC0189762EF3EE777D0BFE48D5AB94B498D097D79ABD0FCF53A1402C
A94FFCDAE7FF694A99718B8111EA52CBD0A5F228A393852B2F9A1BB5AE74C39AAF9B8260FA6255
A2946815E5AC55075074CC2BF6E3BF30F6B9477E6F162114485F80F8F271FB3100B5A6851AA333
8B9FD55C62632BF3ED4ECDE95D8C291AF0B4E0C04766C061295095C3F157047A0A6CBB8B83D220
623E2F28C8D1068C751C8C0EBDB1B0C92EF2E410EBF3DF9CA11624D481BA44C5B46424EA8F5E1F
EE45A6157DB420DD1168C77218A55BE868AF011AD844592BAF82CACF37A614AA4173C2BEE42D07
1D21C2C136171CE5E3AF793BBDFB8F4DD613DABEAA00127156A60BFA49616EB454018FD2226DBC
1C31398BE17A926E67C3A9B51E54CC1BA91579AC3F36FA1C90C0497AE6BCC1FB9AC399BA49F855
DFA95D303DF17D7578227087FEA07E4833EAB50170E4B2E1964F3227D69921887A462AA939F118
2AF3310257B9DCB70AA063AF79E8D70D3EB52099A4D5B17F90F4D8D465EEED09BD4EC53811491A
9AE9A2648679CD4551FB68F7A8A32AE41B5C1C4BD79E0E538BFC58F4468FFB81B5341BE9AB45EB
05148D080B74CFB0E4F290A2E9A8B165DE52999A107608596F6DB9198545B252EC068C0330E1E5
C9A613380C9421107EFA5BC4A65688143FD0C13165E2FC77705F1890E423C00BFA8C01AEBB6CF8
094762D8E14CB390E63673FF5CFA983DEB170021104CD0A01407C0C4E4C3CDE146D749202B3DE7
2FA97DAE1F89C28000727A7A7735DEFACBD19BEB8B34E63F0AF0D64F7F7A3CF3D8B579A69FD70B
449E677ACB9C2059A4B800AF36B03224F0729CE60C4DAAA4312AF1144932BAA474164C09377913
57E38ED1F81403D3D70E87AC620E404B67D176EA3FC388F0996D29E558518F321EF9E48C0B58C9
D5EA596C020A2283AB53240B58CFB2F3A1CF9203DA24BC43D8D41AB27248A5FD3F1DF2D9C25AC2
2BE2FDC79C3C9688AAC025E2ED0E2FDCAE9C01F5E93892E7DCEA21FC6A75C3B33B0150C3E5EA36
A8BB9598297550155B6F7947218F41CACCD3BE58AFA2329EAFB9E21AD9A143B97218D0FC606897
301D358A70705F155525572CDBC419518271ECC052EBA5A9BC514AAEDB63C164306A63731C21A8
499F2290DC24D81A4E461B7452FDC0E2ABDC89A7D98EE00ADC4DF87A3767A07948308EC40C3418
FAA51ED4BB717794472D2F0D9D4B20C8801FA37B8E595946A2331A30A2464275AE3AC8EFAD8A22
7CAB2C93E118D5B06D8A71C290887CF7ED7AF4601B54B3F1F6E0CA5C540768B44B64E6E7E58F8E
3FC5DBFF8BDD0B4A34A35589F8A4E85A46B3C6598D93666996D984E076F97A532D5FAA6C676502
86979E208B03E95BF39B57DCBD25F21D325A2A6830F88476F9B8245FAB4BB958C9DEA3ABADF877
6F4E8B710E2A8A34E8EDCF51F7BDBEFDA7536EC603C6EC7787AB070E4A1E347CD2A8A71B2E51B9
EC40844FFABBF21DDE78FFB26E77F71D67D00E54E1C2D4C93C400BCAF2F420F728870C613A3095
66E2CD17671EB9D17328C888543D2B07BE7B3673C3CA3BE4575EFCE4C41CDAEA9DE3FC724147A7
62B48566F9904C89F56F21416C7D06BB2C4388E8AC2EE8405FC8699CE296ECCA953AC57A563FAD
DC3CD09320AEA8141A5B8D40B7E36589E15C903FD3AA21A879216CDCDDF7A6A380C66977DB988E
571805923D17A42138474486AD92D40E1DD87155F86189675A26686CA3237B74BBFE82F501E03B
4C6926E604E58ED619EB2DF4C6489A26C4D45E56C2433BCBF66401994AB0EA8DAA93FC93ADEA8C
C03838F50C47A343DBBD8EBAC78E2FE61369D79657EFEA08521DC8F24105495E10C45C24293712
32EF31B24C63EAACC85C59864325429BF906E90C027C0C2AA5093B92FF293BBB45F4FF8711F81E
361DA2198EEA0BC761CD8C0D9D3032D0ED03AE529072FDB7120F8C8704FDD41FE4E35FE20AB947
F25C83AA2A2B1893A2A1C1904C94B524F03F0645526B886D116848B9032B76707F46C65678EC17
D83965BC5564ECAB2674F38AB2A7BCD544E6BADFA39BC5DDD8E0776FA466D923FA75DE28F8187A
63CE60F1B96CB9681FEEF4C432FD75A1B7A753112D79C9521262D9199AA1151475BA5C95E8A272
34DD27F6CB2CA3D7F36457A0E16FAACBF59807672C8A08E498182755754A6722853AC9C5EC246B
153F5879BC910AC2647B9517EC12307FFE30997DC2A96B6742F4C3E7A2978FE29A4DF5D19B8B97
06ED7379EA6096D13B7C69BCFAC8D00101BF38FD6712F348A6D82E7E7DA0A6D551F4AAD036FFE4
FE558161270ECA320FEE2CA914CB22470275484F10D9EB1CE7782E5336729729009804B7FA5227
E301E841608090F109929B395894907E410F8088FE16E61D820206E5852A06E52F0487A1867719
EE4182F57FEFAED44FF16C5D07F8050CF36232368BE568360E8E5E36B0A389812C4C38D6E06599
B394023C5AC862F10418D45B897535242EA4B85C0B39889CCB51350244F360A7C15FE9BE8D4FEA
4DCBD99DCA136E4AC27A6232B0E4051CA30E28D7334FA443CEDEEA4D9D1E47106667C6129E40E6
8E033D54E8B41FD0B8C7297B92C641D4F31C4E8D4884590678A90BBDA4A0550A7A6608313221C9
E23D40886A154FC3B81882E2E2A239B4051D78FE495F336BC1B157EEDB434B31CAFBB9A14D008E
DE727F5949F4EB5FC2104DAED0D1A48113172099A72D05AE12771006FB8CFE05B2368B9B42CB21
EF2C18F61A8C4379E8C37C5CA661E79C8DE56AB6DA4A6364150FA27A2F94E56713C674F30C0EBF
F9B725B754688D2E8EDABD5A4E0C8595BE5BFF2313BD5B53DF71282C6C2EBF49AFA6004AF2CA21
577C3F1CC44FF3C2B4025D914D943759060B1106E062957CD43E01AFA864140B0002ABE6A325ED
10385B3AA72C49C77EA067401C7F155F282B96397B84E0E6DD4E28480F4D09C1396E51DF7ACA92
C47732C752BB28DBF2FE284A689FA6EF092A0B8FDE8253023D0C3A2F9437B57C6082CC5C88E6DA
831A0DFC932A009FF4ED36DC187562EDCE833EB70F3E128F918DDA9089B521AB1215ED6AD8328B
3371C660AA42EA386345169CC9936C74EC5B9442F34E43E0A6648C61DBC00A6595F4F27F3E59D7
2123B7F84D4496F80BA60C3FD3B6DB97821E11DE92918F74DCD48CABE3A5F4BB20606B7232D1B2
3C86ABE6DF561F496F45BA03EC89A84585CBD62E0E3C1E33ECB2B2EC80BE4F65958EBCFE42BB29
43B6E396560BADAD5DF6E3DC4CF1222AC2E339A9A861DC8B4A85449918A5BB7C3E0A449F392B42
192DF15A0C9F0DE2843DD0BA26FD8162734FBA4DAB878F29639B95E58CA740C33B618293908388
2530C11416F949D4D1E78D5A61549A21AA6C038FD4AA8EA1F65FD68AFBF9BCB4797512CCE43C69
0650A8648F2E84922B34A064A44060E9010C6CB700AFDCF765F16A76677A4D60A4A4D3BF23DB87
C411A480F2FEBDB08B45582B4F15B486225512D4A0123126B79996FB409D9A1C2CAD9C4DCC0E26
2F20B16D218A03C053FC84A52548AA808B278355E897B0418CC7710762163A97F5291D6F4C2DA6
220D6A4A18F7970326BEAA3B11CDC64203330B73DB774EEFDEC7C5894525328817AE98EC67D06C
E232D3213BFE16CEA3B41AA69A8F573A69EBDBE40BEC1E25A83B89378643F8CF5BAE906389A403
B8BB2A2A073EB58E4676C55E9BCE21DA1055E61D89AFF8E5286F80C97BBEE472D1337A9FAF0900
576407AC06AF4E2D2F78E262CD203EB3094280A5F406B261C8F481B59F8833A0D0EB6B125EB7E5
206E2C89A35B35964E52D0B3DBDAE7008F0C299C0498DD84149AFFAA9A3377144FC90ED52C6AB6
E2544ADC6CC58B73F3898F7D0DA5FDCC54D9E676AA747894991038A5CF2AA4F65BFBAAE4D32C82
1A21C5B284FB37D3DE45C2C92B29C8A3C911B01915586D8C4D57C5C6A0F1BA3E9D436B523D4D00
C0CCD3E7EEC13736EF20E744E1ABE9AEABD32931DAD3DD2BC88388105C65C211C7F853A1C90BE6
51645E4C9793B0F95C1FFCD3BEE11994F3C05D444D8C2511A0D5468457D2F4E749A5927E59EC9F
85F69D5057956FD0B70D69DBAD0E8DBAC7EC1410262929F7C53D316333375F23E6B686DDDF2AF8
7BBC56729714372E5D5B04E8BAD8011718211293A3402CA94AD423362745028B8BCEED09670183
7A47BA659CB282CF51403ED3E74EBB6D51A79C6951EDF9C65828A0F360D402A8593CD484EC2AFA
E543288B28E89ACF7070679F4DD79E2C98E81D06A2EC6FA93F4DD34DDC143B56F5734AC27B3F3B
FC696BEDCEA113F035249AF11C9BB38A891384E7F4ABDFA8B7F9F9EFB9CD5C7CCE4FB2CBCD1624
20D265BF6D62C8318043E37FCE4EB54EFDC6B0AC22C86BBC2E1C3F8A179BA736ABCA0686CCF489
1EB7B9F6073791F7DFE3A4EBB89C17EFB81459573F62AEBCE3751D7C2FFF6F8BB1F846649F1706
F06CB4078914BA7A03D9A2F3184960D6F7D0D15283267BAB1D3A85C6743F57B2372958BEEFDFC7
088224A09298E43ABA58DD5F7E181B3055759734BFBCE114B8D10C104CC9AD471251A993709571
27E120FD7CC83381C321E1B607FE7EDA1D7BCC0420E04921B3E14FD0774987A6277C5C9E94BF06
3BF0AACF88D14438067509DC123972A3C63545D7D8A23EA7CA721A3BB7611B42439949C537369E
B5706C4DF7ABB673A5319FCD42C4EA0B876A158E476DBE914F129FF88C1FDC6FD9C81EE073DB7D
81AE7EB717CC78420C08693C0ADFF3D5A6B2580FB03FAEE2B28B68368F05DA7E6164C0356D81A1
736118C656798D2A59B931D337B36983851B846848A1AB2F18717A1BA02B5F86559FD693CD965E
B4F334FEF23B3C7F64CB1BBE86ED595695CB11AF4F32C26046059E4DCDD149EF2E47D81147F375
A8432FA727386BC5D5D509711A258920F163FA24A7C7B936BF6F78DFB85FF1731670885DA6E7CF
92C36B13416CB099DFA12775332013B5EC11A4B1884E458EC62BA2D313625380E875653529BD18
046C1C6C4BFA4885484497174F0C73DBF92B1921130F4398B76B6F5495725E33E930B677D6A60E
E388F5699F5347ED8B520F6AB9B71A9F417BDA923EA6FAD6298D253BD55DD27806A53E926604F6
5E51E217DE1A3F57DE33B9CC678CF0590590D174F6822236FBEC7234BE06F07F886B408684CC84
AEAA429AC7240BBAFE45121F40D01938AF2C5D247CD696255FEABD9159256F51689B339A7843ED
1763FF2B357E5ED39FE9E3053A74C588181C15694F0CA77FD721CE0AF61D68B8CE913124888383
E51F4795874CFEE6C13B30415D4AA6377BB37DB5E2654E745D483B6FAEDAC975DB56CFEDAC6264
C935D83D0372DA2B98B84CAB5450AE2335E409EB7E210451DE1FE08FC78CAC720B6FEE56BB6DFB
5B3D83EF2092E890CEF54412FA3AF3F92AE24CF4E53F2CA48429A7EE2DDC34EACACB484CF02116
3B303B38546D9799FFB37B0D5F9394108F518AC824FEAA68DAC5B5159DFBD469996F80F1DC41DE
5AB6ED10D3FED9A298F39483052311BC6E7CADCE546AD8E65820DE1F47AF5882E9F035ED64C3A5
F1368E1AE38DCBD80F4AFE0DC427BDC881110A292A023D8922745EE3FEEB057048CDE275AC0E17
1681A3FFA7264AED9BA03E3FE3DF81A463FE2AE5B362BC89920FB6A6A6FF1CEB9F24E61B3D0219
6FF0F2837326DA8F943AAD0317F68B7B3F81457785FAC57F882CAD078CC502D2AFCF64260EF779
461D622A117E5DA766F2FCC7033B87717628451992EA4158A16FA3C889226B2FC0540C220BB480
FA2AE0170E69C8FE97AB89AF3A5C7A0A398F34F2FFCB20A56A1D691A303A84AE09FF399497E638
4E8EB6FDF67D941B424C84C58B9B5FCA6484370467F6F0DDD5B407156F6A41422CEC15FF38BC87
7264D0558AB3A84F3B92FAE804D9F15FCA39F4ADD22821E636F01C3F25C3DAAF48DBC646428CFB
A690373961CEFCBDF1E747A735716FCA30AA72F3776F279E8CD6D223FF9A3C133CE93AE7B4D901
61F1B2589F51E33387558D96ED493599554BCD3124D9F9E4F85076636862E3FA9E9C33704C0716
684E2315AAB19CA54CD8774EAF4542CA2AC861C186A9660BD1FF972B341B825A7CE829970EC32E
646DAE9103E1AD2F337E880D3149000B1A4C3703EBA589B9D6324AB5AEDEF54102057226F43BDC
BD4C2542596218F50F3D9B8BD86241060E55385CF40CD1BB32D3361573B645D09840CAAA9F692A
5802D4E6863B23EB526834FB9FEC4C8BECE83B1DDDAF0E78EF6CB5691A83C2F45D62CD2D7BFED1
6B6B1844942E43E7473305BF88551F0AB7B4DAADEB544E5344D77D7FD76190FB008CDF09D762C3
E67C3796B1906E2F16A2F6EA46E0E266520D823B36F5D30B834C75E2A58C97B26B07A912F30B48
9C8DD9BED4A4C76A9C4CC099AE2524D1B760CA6A1047CA8CF682CE6E6D7532E132477DAFA145FA
B571DFA8D9690C87FC9F7BAD55ED0FBD266E3C3CF618D94D2F0796C1AC2E86CD06C8C671A2528C
B5331C751DF60166841FC61A2D498FCA1DB077C8AB3FEF45F3C918A062DCBB3FF10199B62FACDE
9F6D7633603B3A4DE267D013A8C6FAA0EFCDCDD7EC38A82E9EEB177CB1AFF3A22B590B9F2F00EF
B44B5AA6E1A912181DE1F5E0BB6253F63D47FE9F9E6CBC3B4E7E5AD767841B7FF40FE9433651A2
9B70ECC43C193A34CC5271BFF7682F5431B32E10B60F8F776168EDF198734846E93308502962F1
7895AC2A253D367C4FC280EF45CFB287DB362CA5DD712342F7BC1DBC91E3F014F6C9CBE60757A4
BDA19A16792D98BEDEC85C5DEBF5FEF45C1ED6A9529F0C071ABBE824293650959BE5446B21A23D
76FD9575729A7248BFC08A07505D539DCDC7E946D96130EB592DC2C5B0BC669EEFE149BD07741A
C388859D10337E07E3FB75132BA943BA0495834E297FBA2AAA671E4507FAC24823234FC0CDD166
49C5577465675958A863B64683DE16F205F3FD5C00258D590B1A4832B094632DB6EF8C2829F753
918516633859AF29552DB3E6D1F74F5AB15BA7216F900D3A708317B971375D11D4F4F9BC831299
2E751FD31D0DADA44B0CB303C6AF3B3A6090B55CCA087DD0F4A16B25CC2B1E249C4F08622AB6E9
D16B938DAE0E57E441151DE90FE40A7DC4DEDB300C99E967FAD2A1808A4DE6B106F743DAD775D3
0BEDAA3C9D18A93F5024BB89887D373771EBFE8CB04AF4BB0B17B3CE4208D401E1BAC23F36241B
4166BF66F2A7CE59A240396FE8D6F37EAF30E1482639ABAE1FA3B05A9F1A915BEBCAD0C39EA72E
7FDA4326F02649B5765ABAA6136A53E96224E5320D8FD9CDB0C354EB729FD37302078E4418AC5C
CF29DF19A686C7031AC6BB28AB99608F3D92FEEE1D795E444B819624FE3BA235C6116118A7BBE2
D3FCA93D01096D8B39186FA74D112B2E9548D3F08909F19F34872AB08075A3586E9674627E2DE2
80D2358F2D4A39919FD4359E3F3016293B5EC420AAD2EED0DA0621C1F4F67FEDBCB3F52D2475BC
697F9637655DE73D38D37DD7BEFA8FFB241D41009B0CF30E8F749BAB37DA0E8A21873647ADB342
C2D34B19C195B6FCB0CE92005ACFF149DFBAB097E7FA7D456C774BA66C7F901E6B627EB3D8D2E8
64ABED0B7B43E036491486909C67ACA1BE8E375F3CC269242FDF813720ED71114D65B5EE33E2A9
BB4D0025D8703095458592CFAB5F1D89EB134B4C74AD59D12B04CAB6D60775D5F61E9EA9F549B8
DFD662C1DC2E67912A7C83CD6996718274D196DE9F8DAF382C05B71EF24ED35D23B92A63A8BD06
BEE8B178A39AE50669135E28FB18752C39007998AEE3FECA68091FF94531EE2341731C8010BEE1
95CFBC398F2A6A8B9356BC9315C3C65AD4155F577275CB4697AB8322149F68B3F49E0D697B5E9B
14EEEA36572128D2CB97299EB9039A26971720AD09DC033C5F3E72A8CF5099F0C661F061AA73D8
F7B7EF6A3231D71B8CA31D0F1EF511C7C43F67904F777CDC99B99EBC339064F7873A205F766DA5
1979E93AD7987BC1046E08584D1E0BE1D6A2FEE34E8AADE64624DDC3113DE99505D10343A5D92E
D737201CA31EE3A14EC98EA89090BD0CA90694ECA4D225E29584621EE6621CA1D9E5CBC7A7510F
4EDA32274D13D9293A786E8723D3E49A5F647B98DC14C3C11141EF875CCDCBEB9812F0FF225598
AADB836BAE5714060DCBF2CAC0C6C042F6B5389EFC01776CDF4992A78C371A657596BAAC97738F
2EB75200C47BF7653A561983C7ADF807D676E25BE355F3B76247EAB21F32A8A0F010B7454848C1
17EFE1705F67B72E1CBEFFB821F839FC141699507607BB181C68A360366F0167F9CC39DD4D0DFF
8464C8FA4AE47894BA20D5DA5E40C604BEC10441352A3EA8890CAFFA5A64E0BC07D8645660F9D6
F830A271719846CBB7A5850E17E3F3924C55951C31F7E6ED1CB887FB95CFDD7B99746E8F3E773A
EF8EFAF5071B8E41A7755334C2E2931AE15B7DE4E64938286BA03111CCB90AB09EC39CC12A8A45
82B1D54BC5140FCBF51BA190A6A439C81ED22E0182A1083AFA1A03EA8A4D546D6B564E618D553E
D313DD35D5E1FFC8D7BDC15B1F4E8BE094DDA24F0E8109198ED8B0810F5D13AD2A9C97ECE518B8
377E054CEBB3B85EF73B4C4F0FF59A1F727131B00C5E4A1E3A2215D7523E7A80F32CD80E21BF89
F10E5E93697448D743518C0A5C5905365C3E80C2C3896D36424006CF72B613B20668792F0C3903
AF69A59FC29BA87633BDAA063B27CC0DAF6882B0378499F627FB184A1F3DF2FAEA6DCC4333E1A8
4D62DCC8BBA596500EBECF3C5353893BD07F7D282EC9F8050D892B00972F99DECA3923C5F77BC5
E62BF3E9F78C268AFAC2C00F5639790F2C255A41A3C660916B2CD25D2F075D6FCCDB8ED7780206
990039B0A2440E59065A07418EBC53D7F35F4C1FBD10ED357D3B25E1B2AB42EF8A0C1C1BC30F62
4BA98E317A9FAF0943480765BCB5DF0192DA204EB1DECF7766F4F57D27209203525598C4EAD672
DFA16C99E1F5E92EA7CB142A1B929E282D8D3257E898D89CE32B25E4A0649EFCBBAD87441B2612
372C15922BD6E6E46CAC07871D3A903FC9A16F2608AD8E2BF2FDF62CEC4D133DA9F3C371425418
0987F8CE7BF4E907A63A6624A8BC08511380234E3B9F8E9943AF99DE6E1943F7055ED5A6467D71
97146BA48B6C6A9B6802D2EDF7F7B0C55C66E53E94338468C334C4BCFAB842E4E62CEF3A86D052
FEBDBF6059692E5446309E6AAAD7C3AFF70864F2F6D70AD9AD75D2AAB8436A750580C3969317F9
850D7BF6EFDD3EC9142712F8611FDE2948E3457352E299C81B20ADA11055AC1162FD3CB67F34B3
DDDFD0FAA99B5912641FD82C2999A16AF3110D4CEDF7598A402446FF14AA065979F32B11511B7B
692325EAB481B179CA6BA09DC0B0F2C6278570C6E93592093CE5EFFAE490619D58BBA6906924D5
F9107E2CB71FF8D826868928F08A3E43DD6CF61CAE912DACE89BED9970506489CF6966A31A360A
AAFB25EC26735DD44241FCBDECF0F8ABB89DB3410D9477D4615A13F67E082A8958F8E1D1FA730C
4E9AECC71075FFF0002D2013BC8F1ACFEA24BCDDAC5591D8740646157EBD7606F66929F89C0BDD
57ECF5AAF3E99CBADB9F5C9F70ACCAE2B7E99221F7B489DF9042B80F24C9B5675DDE6BE8098726
98DEB1A014F0E8E917E17990162BB9B149401CD4EF82D47C53AC369CD89BB7FBC2A9283D9114E4
1BAF3D17A717B214C60F20576A058BC603C8D2D0E1FE42F473DF6491ED0F3DA6D960DEDDF80D64
A23908E8B03C204EDC0F9CB787B8758408188BB2F0899519B826FBCCFF69978EAA8499E38EEBC6
CBF6475A1B8682E6562D5A1B538303C4E313BA8C63A2442D9F182743FFFEB953D40E7B71CFC867
2954CFFB39B3DDF0AFA03687F3FE8E5BDE44F5F6E9D3DACFAB5178239DDA89FAB6ACF15D46676B
1E0F093DE8FA0F099B045AE0039C2A4AB450B6CD6D9FB9A0F0A16D31CDABCC2300A449DF463B4E
37988EF16AB0A56E64A30382741AFCCF386EB6F41D2B8E99F1A1F63C9EEA6646A48069C736EF4A
C5074FEABA3FCE00F33B1C4B2E0442175127E022EBAFEF645A40B8FE006C9FC16812FE62468B31
BE648C96799F9E227A2E96F629EAA1FA0C26A7DC8EDFA916059CAD8DDA35BD1DFAE4AD4C6F4E92
D4B89D862C0C4EE1C458F7E9BAFD67C731922220A20C57E7E84A92B14CA7CD0C4E6BC1467A7543
D97A1933BE0C0263E0ADE5F9A4434C45C17576314946B4825A07417D94D061CF0B71AF2F1E1F8B
7030F0E7210A7DEE8882E64DD777A5BF247EA5708607E2200AD0EE450225CF17277A97C13F2642
09A5F83A46501CAF0AC674596379FCA3B9B2C71DAC24106826FB99ADE52A978B10C4408C637101
D500C9198642552A88184038042E3E7193D6AEE4B65D706287C60375C250B6547205D84938D4BF
FA8F71A2596F5EBF115D2386FB639E37286C4B0ACE6C45AC4E0A3BC02DE8DEF7E2628D6C4D4D2C
21495B16D6FACECF7783FD44E20AF622D2F3829BDA0D9326A46C13FFAFF179A740F22483D99E05
82E81E9DDEA9741F916A13C1AC247E52705389A75805C01FD9B361EA097A7D47EAB1DFD13D9111
86E60F0B69823C6E0402F51F66D3677F4DC68B83B8DBFCE9A9769C9EC6631AAD5484738C024D1B
DB71BBEDED98E518D3D8043B762FC1A3A17966B1A3EA1E59585D23B697D988CE36E337726FAD4F
1192EFDF2CE53D58991441CE981A640CF683D412CFF40243A0C5959A717542756E185A4689F265
D080FB0D762EBB2DB9B37C47A87E9FCAD6A8C032D6C914636710D9CDB3B082FCA62907E93DC849
8998BF5BEF3BEEC31EEC205F536C39B1ECD0BAE888AFB1E43CA0978A97C1A51E1E822A9BA9E7AA
27DE81A573C822C8C58D62186FAA9F326FD31AD9641DC196C3676F32171F118A8C500D564048B4
315C4EFDE53CCCA5D19BF70E6C0B9613037E95DE267B05CEA87AA3C3C66A07B266CD5F7FD39B8F
A6B4D8E72D8F4DFD4FA52A00A1D66CDA36711090FF5E182416BD3E0BD7248426C4E7F9F02CE817
88B7D33AB94AC6F41634DC7E622BC11C1D2249915F21CB9B80713B106943F87CC97772A9B84C63
FB5F13771E485967D2292BEA3BD017C6C6061DD0E593863C5ED982775274C0582D715A3170CFF6
B895EB61F999BEC8A5528BB33282F22B9675AC71A489041FDCAF51D51A19D81811025440EFB49A
50C1EC14FE04596C14A7DD8F4F9D9071EA40328D21D05E89267E710E704FCAC607D55E9E3EA88D
63C0EFAB004CE589474A3945414EA5CA9A77C6A7E1CB00BEF416931CBB42625BE1D4D892616676
791D41E6986F98AF29DF13A42F086546DA429C9FD464AEB7FD8647276704ECEC2E3282016C931C
74DF9DFDE9218A703ED29989AEBD5F08480F63994FCB03BA872C737B33851F164B6EAA40687E76
35C82BB6134CF945FA1D074441C150B32CC01417203FFEFAFA07D4E6581CE31CF48FF6B4AD7103
896C5B120ECAA67CADED19B6C3E1C273954AA518B112478ACF06F57C6F631844A781CC82A18283
ACD80EB5BAA7A08D6910EC9C212DC483C31FAE516E286F735E616E46239076D1860A52382B28F2
893E22A5E81ABD92C1E71D7D73A6F75BBD8EC4E62975F6B13B83431B93C84CF8B04B5923D43209
530261BF3D92221485111B8428D0D347BF494A3DFB92CDE7F4FC1EFFC6E7B0E58AC3000CE36C2B
E8194932A52702604FFF93BBE313B41DBDE474DFC3619F3A861FC8BE35B2F2F72E0E0D76D2CABE
A25CEFDBAFFC084CAD9B8C56F4817CA2291AA2E05F9D5A47CF83EC6889A9CD709095B531FC39EA
9EF7AFC813814806927D226078633A71E92455A4347B07DAE5CBF9448CD54361757ED686809868
79B159F3D906A4469622BBA3BC63921BB45E0DBDF4E6B412C576FF8D1545C258FDE4AA76E3A588
C506467395AA8EF1F5C4D42DA413D42E17032C4994690FF655839E65AF9352E70A0B522353D154
D8B5F3278D8596FC07744708BBA8220190AD78AD44A4D97F42C57BE89E281EC8EAA3227DE396C2
51D22BDC019D95AE8DD73D01463DF9A9654440314B2A8AA78EA16EE5441FF358C83934E5B22DED
527050FEBB7523148EA2CCCEDEBCE2B19608AD9A03321108EE9BB0AE167CE3E996783DD7FB22BA
6DF7620741F7ABD1B970A72A7535B3C43210D8A6F87389BB4A6BE7BA1A4481383D448303691368
04F99FC313500F5E064F5DBFF1194894B9F120A669D67E5C321B5EBB041B9CC9B85B2FE2DCA0AA
0FA5B2B389BF1B0A60498E425D31CE00052F5D8E24F04E01880E92E29CD963C99948876D9DCDD9
306DCA082EE3A8BFF3B1D4A8CE9302B9DA4C9BBEE9BA9941C7C19A761F5699F9F8874E86597A92
46A156B1338435A1DF700BE1E6D365698B99EF460D558DF976E7CBF9305226FC0BD8EEF41CD8C4
5659452C5AFD8CDC6A7681883B460E34E88A0346B5B41AF8CE56542395AE7D9EE630C1547BDE1E
EEF0464ED5D8A59F487422BF14B69CAEA9FE4B44B35E8C224A28ED01FA3F478A132F5EDC9D55F9
D53B5891DBBD462F35C373921D6E062190C01840AF421AB8884F209D3572A3BCBBE0061E7D3CC8
0A40259088D0A7F82A865776AE02979749394798E0A65CC74ED6B4E7EE07062060CAA5889E324C
284B40D11B22AD49144797F9E2852692199840586D98003C218D355F499A4B4F3CC4ECE85F043C
8B17448EAB12502219616E73FBC9E024E002746A4DC4A4746CCE089B5BDA14546CECC0AC036862
1E5EE5F3333AEE176866F22F79E7C4B3C4C0F013F019A8423F0BDFB0BD069CEB21AC533304EE10
DA6133A3909B0F2CCCB61084F14699C7BDC7FAAF7E08E5A978270D2FDBAE6B5E02B2801217605C
788C9899B9B82EFECB9CB02AB2AE5FB157D50681F1D43C159CDF46B1F05491C5E439F24A9D0BB5
EE1C2F520AE58E4628981F03F36957130C2880C2738C84C87DCB79EB5C7C130EEF0490859BEEDD
FEA0C624BF8265229826292F3BC6FB29A27A850A6D69087568EF9506DDE2E900B1C37EDE3C8605
7E6A0E97C178A67BECB622405A4F99D5E0F9F9B9762AD25503C2BF02E5C36AA819BC8C37141975
F3AB1C7E4C4418E5E56D2E16BF99B856C47BA738ACAA7068D81E76A24F197C74C04D3E72CFDCEF
B6EF052EA7A436105D27D7566552311A03E29076296D4818EF7BBBDA18AC6626EA7BBF3CA28EBC
0359E0F66ED49C89AC23314D585524AD63B48DD63CEDC066416D142583A75383F0FA138D53EE8A
FB81CDEDEBC90B676373B712485726B8049EF6717599976972412A75BBDAD6A4570FD95F58A4DD
043424F7DA4AD1FAAB8B8F974B955704B634F9C3CF0F297EAB66218CC678D31DB4FCAA789DEF80
F13BCAE4855EFD9F86251A4A6A746B157F61905C001EA4438A1F00AEEE8E161D879546EF2BAF6D
40AAEF9494E127B291E3DCD29941A52563BC402FE9EA357B853A21B4E50D5BE2BCC93912FDDBF6
B46A2DD3AF397F0E09E39AEE129F12ACC6AC407426102766381593D73933F41C08A6D293C88374
0A51B2102AC1A3F71BB46BEFACAC04D80532D6E36D89C716BBA853D447200FC27649E38580EC1D
A1728D07629D9676E2B7CDE31C46A31DF5F9A9CFD04EBEB1797BE6FBC58C29C8C135259BCA6B09
BA7292B965358F6C79B75084923E0BDC1DDD214A6578DC4A4A968F3844CCE1216ED1C1966816FF
99B4B7CDACF2F3D363AFA381467328D72843D61AAABF4B752E36B334BA23FA1D834DCC959B4DFD
DE5C32DAC6D5D3DE385FE3791EDD62551101D9E219B77E2C51CCF63E219C51B330F197DBCA948B
3727CDEFE782BC7513A9A11045F0F184AF1DDF2FB654B5CFA2FD7CEE4E198137CBF8C16C902FF2
B35FC7DDB8E769750E2920895758D853897EC2C2E79B5763B88530B4A5A4E10A20A71E7991CAD0
26F8DFB9EA166D8B58CE596FB9E456AE276DB602716EBE339D81C15E62D2CFF2A356B97B7A6D70
CAAE6276DBF3E41D995CC20B76450342314805FFB74639217E2316CD2FA6406DD5A88B6987EA6F
A23E620A461B075B81DE8F4F2F4AF703FB16C5166E9620A50DAEE9827F6E05C913B1B07C70B550
A3855F63CB1F18B21B2C0B64C930FA01DF40503D486E3ADCD31FB244A2590AA19FDD395C1E52FA
833A69A0D8DB922897291EBE520006A949C6228520906590426DC9FC298D3B4909DF305C2B41CF
7BA0181A437C88BEBFCE09FB9DC21829ABF5CC5A72004F7DC1A04310E9AAFEE3844528B52C6034
06DE4AA5FE8A70DE9347DD2D129B9D0C96B1E2B8B67006B4F6763162ADEB702739AC0A3F2F4B3D
C1181A0AF575A90DE3F4808D399D57E4BA2AD9C33AD87DEF44E1A72817B14893E7344BD33DC104
6583526AAE6FB4B19B7A4890B3B38B06DECC81F7C8B8754924E32F09F1DF35AB1E63918D643BFF
E12EE8A4EECD816FCC648883E67B8D8C3D37869D75BC0E38CE6C213E17B624F5A82604922E4CEB
6047A7002CC260CAFE7E501E7DBCC71D08F0C0267B3391D58C00F17322E18A88648B59460101C9
801950A6AE05F90367E1D0B2B68AA7C82997747998CF36E2BAB18F80B9225BB8303D9C68ADD86A
AFE9DDEB4E7AA39B3BC61FAF63477C355C7C04324ED3BC943EEEBA3BC2E2C0C156C2874A3663D0
1C1F8EA826A1DDCA09566637D4B5AFCBD2FC112DF0F35E2C0D6F385AD575C1480DBEE713527655
00ECDBADCDE426C3B33781B4FC5926576708998537EDEF5AF2AF65C0198B0957B7C0C822B033D4
8D3B547A32FEEA3A45BDCF869287C981D3EA1BA6928944D62DD3F4C21BD2DB628C1C8707B343AA
97199ED1ACB52CCCD0822A4538E12FAB15D704812D19D04C7A0A4AA1B1B360FA6A6876A8C79CB6
4E0EFF153C65C1F0226B5DF7100BD9D0F3CA6567BAD1ADB1E695AA440579A8B643AD4B4FC12982
A46B1A97323B9CA57D3F9C4F4F257274EEE06669D83A6A64B1CB90DDE54EECCAAE923D234D7FBE
F89A04C755B1C92CE5E20086222413D8F4555EB4E452124F83AF92EEDFCD0FE63FABFF189DCEBD
5FD618F956E206F3970C558818136E95EFC257227553B790BDE15B2BA19A775D6F1A6909C7E877
C50803ECBD75868D20700EA708416A947C8D4CAA9E20B1C26790063B68C4A517D805A1EDF22357
3607C6E7EB571F13B61F294A3ADA65B6551A35163B2B09FF48204DA33C39228B90EBC2C42066D4
3CF90E8152C9640F72314C415855B1A20C46F0CB69D91E690FC601A430F1605E710D1B6DE24B4C
BF183DAABCD4EB1F9A064B1C0EE66CF8583EDB4B929623BA1D0DAA518DDF244B33101930182E96
620CF26D9FFD672FF7CE2E7A1E6C1FD5E263175D4383A9824006E3A24EF54BEA370BF09C4467D9
9C7DA12786EAF43DBF0FEC582315890C8DF0BDFDFE60E50EB05D7D9CBB57E5AD8B680AACF1E600
AC70ADAA467EB9FE4CE9FB15AB3B1733D1668D5DE1195E02810780D977F72CB8A249CB6060F756
5B09D6D6205AD0F63566C56DAC006CD80A67FC4B522BFD5F0AB88EC6E46715B95074F7AD5EA332
347F5F288DD1955B11674F46BB0FFBD3AEEB0B89926FFFF951D3A1F29633B3270863D3AE368974
77BA28AD8245374F09B2F75D7930AA74118400C96AEC68A49F69F8402201BE29D5ED5009FBE347
0D5B1F37C59383294CEC3BA4FFFCA5EEA6471E41F1CFD3B366719228263E4194CB7D91F729CEC4
134414C18719D5F66A90707F0B8763C23C369EA27F3475F4E5BC18DF91713338EDC64E37398107
E858D2FA86B34319F630175CC0EA0C0A69AFB950B6A44DC453725391EC4E2BE1D94EC660A728CA
3C9E9154DE885AE99B2255A8E503617C494ABED9974699A39F0AC8204C67D25B377F44A083CB75
B36181284C75D1E43D457E1FABF44587267FEB0335D5951411A54EB0D3C95E0C8E5B99BE2023D9
56D3AA605760175DB8BEB96AB13B5719B9DB208D676FAD5B7268AE7BBF16BD6D446B4C0049C363
E40436A562786CB908194A7B8779B8E643C4EDD8F7B04B38D7CBDD011CB962A9E96297567A9F3A
82FAA696F6BDD100E5D74824BF84B16DD619CE7C9EC8C835EEE6DB5CD3CB8C41F39BC18E8DD7CF
94B139222930B39F9E1BA15981DE9F82D4C7797513FAC518C1D4F2EA30E803E0E3B665E21E073D
275A173CC2615DF9A69DA5CCFA720CD300486F03E34DA79856DF7716584940DD3F786BBA10B315
3AA3D81C17CB2B5964A5259E9B739AD177532F8C1160E44666E4D0C3C3DCBB6A873B9797CF0239
35459FFCFA6C463605A8A77C74AA9AE3E5A989FF03E7C55776696D21F11E801CB1AFD551234152
EAC591D789E70FBD147C908ED8DA319A41F9714A7F1FC023F112CEDF88B4EEAE8794CADE8A1AAB
68D9EDF19082C4F7DA38865C3B905783BC9CAAB7E16CB1F5EFDA2F6AE513CC50544160687A6C82
1B54E5F897DF81EA0004B763D02FDE7FC4ADA768CC7F2830C7D7BF5C446B15804E7777CAEA78FB
9F14D3B95A6EB62B4A310CE75725D1372DFE08BDFD7AA8FA58D36DB1D2C33DBD632BD5D0056135
53E846815D995AEA6D8422ED35EE328231F57ED0A5BA065E1296FB513CC584A0205DC34C2D1ACC
580041F4806B3B7E163BF3CAF9C9102AED1DBF23017F6EE5F14A486977BF8E4801BF9BED1992D5
4001E7D6015454F9A7D3A39424E1D16D1D0456CBE4EC4B28C019A0CF581089C068C796FEFF4768
0C7306A4E0905D91BFE9C874786574164C09374FFF473212CD28F7549C85F742F6EDFD34A3EC96
7311092F305CCDB9439101F9DE2341A0A341C19EB86718FC837473C31DE015530BE489A3DE1719
6AD8D52BEC8207DC2C52AD1B6DA14E2E5E55E18E588182C49377F4F83FB1B878351B25B1B480D1
369E69DD6F5FF1079170D185B3E9D104AD4EA0D325B03274C53AC0FF5C499CC106BDADFA07EC3A
5279475AC5F1807A2AEF64FA1C8ED95D8D865502337CE250177B18940C49310A81AFFEA7290A53
8CE2806DB563CB130EC43166E6262F40BAC7A10C3176B0F5CF263491B90C3D9E16F1451063A0FC
28C4CF2F5B879583F4E7F28CF7BCCB3C24A12064037F04EA84F2A99D37EE787B023973EED0A62F
7791A1EC592A009512F93F5C798398AADE97B26CBA03C04C4324FCE97EB5789C3FAFB6BBB4AEEB
E241CF464AB0B78502DBCBFD29986A2BEDAC0F44AD4CDB15B1143DBC7FFEFF6C57914328176489
5B315178BD0EAB310FE4D364D31B424ABE7F5192B89C1D1E92D27AC1E749A5D7FB1788552F5662
08731B8A6766C0EC3B06740BF336BD314F8CD0A29E77F9368A088A99ABD60B880AFDA377E9C1D8
CD4BE7E77010BF09396858526C49540AF6AD87112D07A83330703CCBE88869287262F1DB69F17A
E09BC16BCB22A5A7AE2F979956498E74A754B94971FF67645808FF9189E89019B8EEF8D48BE24C
98A031AA823115B638F5014FE507198CEA3CAC92D8A237BB0E49F2C02689E9E776E16F21A1139B
AB3311433B6373BF536E30A5959410D66823DE25B870E3C8568E0F95995DDA5D76D3817728D9CC
C39E53869EE7F5A0D4D662389CBCDE890600A581451DA0A37427237AAD1D77E0EA543A00B8379A
55F55AB79E5A1D44ED010C6847A3A657AF68A894E4E3AA45B88EF00A82B7ECF590BAABC2371B0D
5320001C3D1FA425F6F57B13C7EC69B64AB4B21F8C00E3D63DEC8C56713ACA560A0A349A1BF0FD
A614CDFE65E935B40F502B7D914BBDB4A77F5A4AAE5A2CFFEB26D5A58E3E50FDAA8D34811CEB61
CF811D37C92A53CF493A7D6157CB48AA26367FAE934BB478ABE1EA432CB77F2411E7DEA7F65540
B904CED9DB4BFA3ED733505DCF97D1971A66317E516F7F04EA905325C263EBB7BD8513B73D74B9
220FB92616250EDE3F72169BCD8304FD8BC3A27B7C103E0045F769DB56A418AE8880AD56BC9E9C
DC833AE39C55A3C2948CA60384171CF9C207EE9BA9CE27BDFE3471C65DE1D617C6407133346AA2
C25A88F42C08E72B12A32A2061800D825C31CD595D92FB6DB14FF28B309F1D317DBB1AFDE68221
D98262E4A264F5A35570F40368D638BA8FAE9871F39782A6B46D8F3545186DDB8277A7C7EFB96D
5F09EA49652C129B4C54B872D8A409BDB611ABE271DF3300A7F3E8C8E161017FD0188580C954F8
C4CC674E22FEB88CF5E0ABD19A284A0D9D91F2EC95F9A93F1D35FCA8D00BCAD8C6612E92C358DF
A868DA9C5DBFD73B01D11C38CA5F131564872BDC60F819BC5BFD15FD8E75AB533DAC3548B8266F
8D1D596DE55166BA58B3003A07182C7C0F69D4B1F298233262F2E7AF2B24A3CCFB725BDE5A5E48
D7E9565970651803930E70E4189529CD573697A81C0B0A61ECDCF942F3339FDE20D1DDC8086202
D1D3609AD6603E3690A79A285E1692353124196549C913077D3F8C6646975591A42AF8B5DDEE53
78238DFB9624F44365ADDEAD9ED557CF4D8CAC26BFDDD772CEB98C5B366AFB2140959055EEE647
90206F72E58E161E8773F8FF59582AB55B1B3E638399539F630E11780E5352ED6EE9737876FCC1
763241305257C279854203A088F4782C30C6EAA125C8A6FC26212C535E66789980970DC0803E50
6671FE3E96928BA55FE297368079A35A67B7FE13C8DC465C360E22A406DDF868FF4FFA3CFA6955
0AD36656CC1CD19A1A1836FECE37B79F458DB40D42DE82D4E5ADA8BBB910EA51154948346FFFC2
46EB10EF2660EDA4BFFFFFE6FF201D5A3CDD09528066C739255F4C23D39389E59FEC4407021D2E
0A870C6C627C32DAD68511ED8C91C05BD746BAA819D9900AD5102EFE6360858FBCD2F9A71FFFCE
AEC72FD18B5767336D08446AE9D69486C9C593CEDB8A91EB0804DD709C757DEAE3F9E6D6248AC8
F8CC65E617965AF69FE99CCBA7189B288FCD4C1CE3DE8EEA0776D38B8A2B8F01679C2270356046
C9310723589B7F396E9FB18C628EE7A83AE57F6D1817C1D94FD3EC6C45CD6728C82EA72E2CEED8
2F0857A6143CCC6EAAE0B443EC7D274D7974B895948F6483C58F0F33FBD311D498E0A029012249
8DFC0A644CDDC892B8CF603F7A6D39F7B650EF99E0C0F7D1611227BC3BC8BDCADED093902193EF
A008E6C5E52E032914165156CD97FBFA0B423447A8BF6CE288047D77F0B7A9E4932F89F6560C47
B02738DF984BB26E0548423BAC15FD9FEF5B46CB5B396A3472CCC0D61B334B7DEB439892BF377D
BE2435787D0145F410E19640224A3DBF881521D31888AC1A4FA69A5E90852811B13596B546F159
340A0F66E06251A095204556D8175A10A57EF634A6152B036F9EBF2F3639DFDE53C3CBB14CA209
EA4BDA72BB143299E5EEDE1B535D45F07B24495918E7C71879E2F03467AA3D19C0D63F61A6252B
724EBD3EC0E343BB4F627B02914972D07DE8298CD128FD99A1D484BB1B5CA373F4E2491D24BAFC
320DA213FD2DA7F2B09DB190CDD2F30BDA955E44096617E5AD294DD32E35CB60CFA20615DB6337
C23D83054F5E6F595FD907D150272AE09C66216DFB4F743E3B2E62B7D53B5E8E7667B289A00CE7
B96B0B53244F3D124FF980C0BA68306C01FE4A8F282EF4C8D6568A53D90F3B05EB14E26BF96777
50BF259A58735E2AABF4F003380CB8CB8EE541507C36BE19B2C46A2A2657FBD11BEB0A30BFA051
2A6D3C9F8E26FF2C72BBD173EF0F04C8DB3DC608336C84829D5D54571A90F1B7728E0AA3108802
C8992B6987B27FAE219EA24AF3F178DBBC7B455C9B59402B4BF3B265929C02D95B8BB3BFDFF9A0
9639B4E1CD845B1340915489A7AA9AA19AD6822CD437E52033499D9CE1BE3A351811661CC140A8
66E9BD299727F14813431B7DE87A015E84298EDACEB0BF034A9BFA2CDA13EEF9970FE8BD269246
7BBA1FD66B349217DAB37501E98D330623D2E7BFFCB076ECCAA19D835074DBB07C6395F6930C5B
67077B26210227DD697D0B6F46FC88C182BEA5C5A4BFBE33D772AB706215308854A30AD2D065C7
708A4AE333C65CE0BC2B0F22F0B60EA61197BBA3AF236D9E1FBF21DB6BEAD9AE94C3B28A3DA552
09827CC8752A7BA6763EF1A943AAA5E60726B4015CF14D16F1352D433C5F4AE74D2D2B31204F05
06966383AAF38A5CF0E5ECBD1B792BD1073B25A8CC4D0D2E1650AB4E931D89A2A619F860BC7244
1DDB888F0324BB646DCCCE2D491F5FA75E598CF2651B0323187F3A8DB5A8BB4BD59367871B76F4
ACBAB3D7153CD215540799F29EC08139EB9918AF0FF098ABF8554A9035A16442A5C202389076DC
D6E23751A85FD1B3F3AEA19E043B8A3EEB75C40C70EF918FA4102973E0E8615959F28807C3D20C
DB9E972E392745BC632B451FEA1FE04A410C8077B035AFA74F1B701FD91753B0D01BB3DE1AFE1B
E79802710DAB4DCE481870EE559F8C677D4C978D20CAF4474804F1F053812E67CACB662427B560
458532D532C202E4942221A492EB14885148C43B62F8A0D19EF45490FF38CCAD1FA02C378EC0AC
44600B2CB28B244C787150A468BA7FA4986BC2E3A93A18531243E0B836988DD2C196AD291A305D
D91F3B4DA47CA75BD05FF0513FE10F844072E60AC651AEB7BC78DF6FC3A5E8E37584B0E45B457C
046557A3B3586442803328D2BE2C286456F34F8DFC1D1478377DA6847CF53C1ACA05AD72999E77
C0FC0A262120BEA3FA83AC099756309B444596C26486208726CBE32558991EF39838798463BA21
1345B85FD8FDA2A2FE834C488DDE8F8264A5E86246DB3AAB30B75B8C51A71EA729DAEF0F03FBF5
B020AD02E09D43803126C34C11CFF1A69F2AE2DF39274ECAEC92C868989335190E6E2C245925D7
1F45B1A4593578338BBFA6A2E2CAD3CE8AE00E97F5039B430DD9EC8A77404BC1231589F7FD32CE
3AFD2D0238085FF6FEFE450C9A2014463C41F4D3312DD98FF27A039BC894AC993961F81ED116B6
5CA0BB449011527101A0D1168CB8CCCA699231C96ADF616582C557E4ADE73B0377F825C9AB0BB3
C789F46535E0A3843A9955F292DC9A3E046E3990A558004478B12A2ADE2A95626FAC0F60DEA236
0C0BB784F5073DE5185CD81565FBFF1189F47DCA5B947C59CA154C13F38260D51C47989D1C60DA
57D3ED1C8BD10A54D0D646F901D9B2E4A08D0477BB3B06E99C4CC3BEE8AD49CBFCD70FCA133F71
0F8C2E8AD72191B672A37EC62BB27BC5905C70EEB185D4E801028764F2B3FCFA28321264950971
37FDD160FC2F91B01A55F41CE24DCF84FFCA957D272FF4B8CCD8DAFC196816F258F12000975EEA
8284FE1C9894B140C717B9892B2F1FB1F9A63F27342363A34E280F42FC7517070062F3B45FD468
4836E9B48C7BD721105B0D8D2FE65C759E47AF34C2D99EFA576DBC7B390597ED274AE0AFE364C7
66B24E9C267AB0E6AF79E29D9A61A1141440FFEF47FAC973E1277122833B65CCD0C1669E8E0943
CA94CDF9879F5B3540D9DA03B314274B338EECB14D93F6B229ED1BF061E0E662601F4BB44EC49D
58CFE25CF826B28F9885B8DC6C171F5D9F886E28BCB68291B0A00BBF8AE9A10F5B137AED55165B
CD3044786C0464EEAD2641B5B416ACE8B4D15B48E12D509D42188E3F3143E56AB28C85A3C312ED
F114B8931C57E66CCCED4CAB926F6CE5AE543CE2858C16AD0ABBEF49C66614255285549465F618
12207C1DE430353F9C84D69D0D8AD5DD6594CF1770DBE352E41F5E12793A51CC70F386133B0EE8
F96E4249F7DE76AE85233938BA8DFD4E8006F53FAFECF02DD407816873A76CD4EC41B175170ABD
70951C54647063553EB4E5EB14C900DBD377D2413575C50381317CA959747CE3E354768728484D
7B9AAC935EA5B17616DB1F80CC1D1DFDC1DAA780384B3475A816F4CDC3E92F307FD5373BFF893F
AF1E294259719699A387068094F8DEA44146EFEF7E079A131D9727347F351AF955CC435C07AD95
49B8B1D75D19C5C465753BB77355FCA71406B77A6AF3204AFF93B4CD3E34E90A88DAC6D9A9A453
37BC6AE499E07CEB31D14798FF0F55E2D8FC111B7D095554E7751BF71C3D4A7C33199C3E320246
04B645D1D7029ABF2FC1801D4314E01D1C209A4F1ADB0FA96FE882B7416FA41AACC9EFA6879E53
971A639D90B2AD319D259507E73A536575CE9251AAB41BF174395A5657E83FBC9D7003889561EB
AF9AC04CF2BF8E7310B7E6659812D19248CF6991DEB4C2A396AE00E725DEA00528CE08FD8D1D59
5D1DD69D556F4584D50A80D51FCA123E8A35E13E5BD9EE977E09A692D821832B4ABDF01DA3ADEE
6AFCB27D3A7799711E3442FB8F83AC27FBD12BB7345D71F1F9712DA9DF2111FC10CFFCE8770699
55011A4D38355B005B531AD274A09EEBFB8CD6A1F964A4DB7907B1781E52C42514D7858AD21CE9
E6D97817432229CBC8CDDD5F0917F3FD35F9E62EDE71102A96CCEA949CDD94C1ACD847241C4FCE
BFFE7FF6028FFBC05E999F1C1C002FF395502643782D78543ADE03568B73A269266556CB545B7A
8D4177A782264B71BCC4B6B605C75B62ACFD6485D2E5D07A7FF53BF84A28FE086ADCE032D12729
03D7C9901FF0E71C2E2411F6157A4CDDC9260E47A768CE48F099D4DB84868741913274F219DAA8
068E82298242261D9BC0F4515298CA81FDD19215E5380EB4F46B1ADDD33BC8520361121C624BE4
FFF8339DAE4776EA251776F6AB33AB8FDE785B6A94DBA8C960F95136308D09B4BA32D25F3A8CCB
2BE5AE8B4468A302435F4DD30EE92D165D12A463CF5BDADF434804CBF1686D4F5433D01E50F60C
DB832DB19E52CAAFC73DFD28510228646F610869C0CEC899C497B272D470F4B8B7710AD23E8059
8BE10019858015F16FFC232CE4D5336370DF76EBBDA878CF686E3331D814EC72CDD40C5BCDEBEC
AF33C40081A4C27B1B21522F4BB7A92A674C5456EABC8D90827D747012F268C84C16E7AB4401AD
4E7F96FB64E0C83631A44723C9F35278174A56DE96322E152B3FE95658D11EF4C0BE5C0BCC1349
0293310B10B0C8CCFA2479D50439A8B40F5CA0955A2D30E9327364080A83A1896B1A062793A557
2DF318BEDDA17F3E662C0D4B41D8C348C1F2CCDE37392D715C4BC89BB5F9DD323E6AC6C3EAE658
0B61EC042A91C45C6D72250CA6CB87B660389672933ED446B7D80D88E1A0BCC9D618C67B26D8A0
12FB02C68FA7E4FC9FC91A22926C2D8F48F2371709E8151C31F5F4D40C6E75280FF9428F13D559
DB7D37F75456E9B53B271BA496EE76A1AFF092390E5B896145C1ECFE3D39359634F9B942BE156E
9951FEC9D81A290469961303EF4ECFC1C050540A5FC778D18BFAB6FF326814CB256DD315F9C224
8466F67E996E67DE3B772A4BD0238BC5C532F387B5F2A8546E6703B35E86D59716972B0C0883A0
9C37410CE21704956BF6F5BFD93355B079C6405DACF179254BC08E415D0ED560CF9D7D786A4149
DDD69FF12EFF44F4628D39830AABB8E951C9D6F2D80EA8EBE498CFA76E47BF82C76246A337346D
005EE988C82DBB8D1FD4729E2234A549666FF469D15349402B322A205E69CFB65A2C93E5C51B7D
D45F2E488DDBF1AC7BBA4484E0013A456DB8568BC8C48F8DB292055062FD73D01C47D5A48A0B6D
EAA5485F2D3717899AA9A7C861247DE19E3EF236506A76A7CF6A03335FD453DA1A319E209E71AB
A95C7727805EF257093573A1F963ECCDD8D5EB00CA24F323A74703EEA66668B38E76DC53A00542
C61C737EBB67552C8C0D90A04D30109F562105E03A669AA93168FABCE3F6E8F15D0F94A7DF9659
447E45F00570C63B74449D628471A70754B8A5C3DD4B7F1257CB9C02360CA1118EF42445B81A77
8E671CF4B94BF5EC261A34A7EA7BD65B80D149F68CE50320DBC63E45BAD02BBF09C28D50A021E6
0859FC9BFB6ABB71F874C39547291060CA4AD86BA98D6F106C945924EB226B0604E65D41C70921
8822B9BF062BB0795E8CA290DDAA2FFE6ABE37D13995731F008F06CDF4654AE43F6D0F180E9430
2FF7F71349F12D0E6C5D7BB8981A94930A6C1CF5799F5B3A64486A1B279E5DFEF99FB82CED12F1
9C5B9A80CDE6D8AC2AABCAA1D2FDDC03455E69EDBCA45654321A7CEE805D3555A6870CD69DFAFE
8DC3DFFB20FD9DEF9EC095BBDF1894543A2EED30B416083E0C976F099569B95722D48ECD95258D
6FDFED1E14427F44A56F25B974FCB4D47F5749564EFEC60A783695924CD5E6569339F6E43C6696
00A478AD5ACFEDA6E60835F19274BFE1E9085AE42DDBC2CEE9B856BBDEA49C0BBD66A400509D22
B75C8AC63FFC5D82758FD22D9CBBFAAC44FB258BC893977E823D00F3837172AF051B69FFB4B427
3911ADEBEA9D520F234BA4D8FC3E3C363238CD744402D096FA5078681AC3CAD245F9FFB510EC68
13DCE93C66BF83C0AE307ABF446F4E1091745F57C941544336DD8F59749E832B5437C3AB8994B0
82914781AF7EA09208D7F1BD45DD6D21FDBF11031AF0CAF929C39DB34BCB05144821082D1471E9
E6526937C7F78DA1113ED907D7C0C03A6EB8D72BC0BD292EA13B0C92295FAD404DDE1212DBB454
C3BE0EA56E5270B6E5FB81918AFA8D8574582D3464869C07188211730888ED6F5405BE928A9928
E851A4CF29DBF352F3D257525B708FA7A1303B55A532E4C1258A5F6A0D12995802529CBD6E65AA
AA602E4220815A5AB18673FFA922789D35943DE4157F63142B3CBD2C8FC0E0CE664AAE02BE5A93
C97CEE6FA6F8F6AB841857B3887FA143F6B9610B2F3AFD3740F3E0B442B5AC065AF833C29F01E2
29FC382804E896DED6E0F676CD666F8787DD406DB5C69C9A2847E18BCE2FD27A138AA93379CE8C
37891058DC1C5515CA5F23380D3530050EE56F6B9732E4A0185B4D8FEDFB1E7460AA13771EF4DF
05D74602200CC84DFF2A103D3748D6198756F4749B74AA32B2F30F700D1F08E71E1645BF2C9A4F
544544E13F1439825969ACC1A6DC057348702E1CFD18DC3B697B28B042E39CB7B09C80E70707F2
13C636A75753EBF406B599010D028940E9312B75BFEEC39C0030BD18333404479447210F91684D
BE2105B852064B685C3C6028C7178FC5CA73C17F0954C93F6B2C4B2191175D4CDDFEDF41FC4048
0F0C8B8B369A27F550AC1D353FA11B318DEEBB01B4B8FC7AA6F06828968E1FE4F9B5B96F9D3017
1866B8D14485287A60037526E721739C7CD0C17F6F64FD99EE76623F71C48C0A982E50CAE84DE3
D25F5F1AABBC058FFA718AF92327E4FEBF106F744C170EAB07749FFB69633FD98E480CB281AA03
93E6DE2159DD6B99C790167E538CD79D6155775604F644D040E43869DB91A4D00875EA13440FC3
902AD40066380C2F83443B0499206BE189DDA2076DF315B58D6BCC0C89D42A699225676A47144B
04DF1BA596017F3A2E2EC3D513CDD2A9F184070CCE94C96F7BF6CFF00D922748BFC1C8597C7668
F116989E7F08CA14585BF06880EF1A073FB8A77075074957BC126EE2BD330BB4C569A23009D01C
A08D0F691A6BCE9C4B5A50AE33A8D7C8948FBE555D9A0BD39BF49EA21811C515CD384361D5A0DC
611DBD505058A43122D8D9647FE84DC4DDC8BFFA1E31D3FEBA54276784D9B36CA7614B9938700F
59C39289B78213122F7B4602CB59013CB72E028C3D297E574A6B43A0C68BE116BDA1276BACC516
73FAE3818E011213F0F87AB6DB1888140BBEC4F1119C00E4A62288F0F5E23B6058099F3F65FE3B
3E074385ECBE56E5DA88FE13C1EC3E7FDF22E775C7E1FD0CBC4B7FE931B7395A2E9350B69C484C
389628F1A7A85CF10B665734B60C4A945FC79388EA356FE1A03C9FB016DE980B8BC3B9BB8BAF80
16FEFCBBC66690E1356BB97AFF51F98CEA4837A418557E5FC1619D069FC59A4A4C3EC08714D00A
8F1AA53F8B59C403C123A8C04EE38025DB14CB7CF964A4DB792E25A9E8FB5743817EF7F9000B3F
EADF7726EAFCB71940D2A9FDDAA02AA62D8B13EE70FCAC1358A34591AC3CCD3F163B4DA0EACE30
0467E63CF26F6BCEA3EB934AC6775DE665AED32C8119293CBA154DAED637633C0253D4E001CC2F
699E318C5D2413FB8468B43EF418EA0C6C2314AEFD5E429F3BEDDDD122DE559D0725A44B31A749
0F653D9A9233117B76237DE8B27E4C1886423A04F999792ACCCCA4BA4CD7BF35C785FA07D65672
223E0C8661CE11EC0FBD391AA4B990CD353CAF98135827FBEBD98BBA4D618CC0BFE026589EAEAE
55DAF78E0597BC770A36751261192555BE810C82F6A736BA2AE6D3D8043B761826D440F795280B
03AAC4CEB41DB919A67C2AC68947B39B70D9C4918CC8512FC2F7C663190A81E33335A5A6196E95
39A276D49FB75DD408570144DEACEC7153917E6494A56A1D8E8B3A2D06D997A9AF15575E4F50E1
FC7A1067291BF0E9C69FBE1784AABA9874712B1E37F3EEBDE499E3FC6B3B9A9F15C620ADCB559A
8F79A17C5403411C1F72CC343B1FC1A639C5B5CA0D2D0B75DAD4B0B4834D7948A1B82D2AD1C6AF
FC0664EE1E82A6445E1BDDBE61CE2E5FA89CBA747ACB305C0458C71D1C40278FD48840C3EDBD15
DEF854810CEA55DBD03FC20A63F7D2027A6553C053E153DB79D08A447835E252216DEFC01C2262
32C8EA4A13A477207A37180A21E6C36DBF11DB159966F862B6BEEAAC2AABC9DA188F0D10AFCE82
588F6457AADB7C3B4DE2FC6DB3EAF91E09FB2D1C748F0584E037F1C901F532217F2BA27C4491AA
8EF780DEF8177C2E80ACEFA425508D81737A008B6D9342130799AAFB7F5BE5A4F05EEC34F93F5A
4DF2F01EC3AB9574D32AE530A6BDD9EAE39AB88FF21FA502C434730537D38AE69F747A0413E4B0
7B6AFCABCC807FEA7088AC8C96FB6DA878C08E2A114AE417AF245C6302B705C1B7A8FAB1CC76B3
08A71E905602C35799828ED1185048EC2B5C01465E70A996655C6AD5B9638DB6FBDF425980BB31
642A9B57CB1675E94804F6C3D35679E3C37A020D361D6FBDACF6963689201B8EEC706CFF2D5107
41B4BEAA7FAF600D3608CEFFB406B06887C1A1A1D08093EC3C7510D292278ABB7193DD9988BF2F
E9A6612422B8E44656EBC88D9299F9FE5DA3AD9DBE9D75A2D49E4CF8BBE6A794039E5F69931ED3
40081841C762AB97ED85F786692038DD1B59D89EAF49920E768E7F7F1EDD29C75DB9C1D3617E75
B1940DB46CE53264F3992A1FB5BDEB1799F5D3A695A63BA2C6D33D594C5C365683C66FBA942B2E
FD09F3F0BCA92248D5F30FC7C7189D8B01B13D4D50CA60091F590407AFEB4EC2076B5B92F0B30F
4041F2E4100EA471A066E823695F1D2233F2A6E03F8CA102E0C155334330EECEE15147827AEA8E
C014A0C08E6CA126D9CE917861CF2111B5E03DDFAA0CAC9AE2F6B2E6AE961D4377AD47041999B9
CD86A17ECAB5315823ECC411598F37B7E756190DCC6A1FDA59FE638C1A93907E04CF90DB5C7224
FD8719E57D5A430C429E210FD49FBD3CEC3F24D845EBF8F5A088F68E19CF7D339887AF3C298912
26CB77855A7F2683F257407C708BBAA4C4B9DB8745270C8980BFF767BB06561B3015B9932294D9
5DB8A1040D7BF9E3D40A63C617DAF8EE7644D5B0D6308FB171EF3E78614648A321C5FDE3AD8184
4BB85BBD99592562D7002347ABC2638E9338F26CCF0743087FECD56D3CA82B6849BEB2ECD7D377
CA06361AB29CF13EB1DBDC56F86BDFEB451AD6C48915FDD35A14E7A6911837AD87CA3E38199C09
16374140E83C9AF1A8A85C56DE956FAEC1D75541F4ED3B64C99D951180E1B8F64F1F8B7B45B159
F8F5A0D426766C68D7B072EF6974F3ADF3A5BE90B7E9A21FEDCF47E29E7414C80C845C5D93B8B1
D9FA86B1CA0E22558DF8EBCD439EB920BAB797536C174C458B1550F2EE8D7A784521F02517F8EC
A4F71CB240FB5F9D86E4F51F9151F403B0AC8A72C0FB6842356941FC3A2370996C9642CBBBCB08
9BA6A5CB6FB9E2BAFA06E84F0E2E549E0EE23B21821E626077FAA50F021A23D42FBF4A7C4829E7
26708780FE7B0613923D556F039B934712658859E8E685E74141499E09EAD6FCB62B0CE175A021
36887CC85EDA5D3B8377AD464EEBDBDA46D0ABB1446D87AE5F0A45E3A94F1C6281647A0B899954
410DD0DE1117BA611AA431F573CC4DA9CDA2FD3AD71C37A4FFF7B8250212797DFC54B99A8A6067
A27D70D6FE72DF3C59247CD853E07CCDBB6A74F6B228B19F5FC764222E63D09BDDAE37245516DD
37517F13E23205C8B0D0CE1AEE7612D61D962A67559E3FD96566C1BA374D07A9A462B499734332
5C78AFA5230AB300EB23F6A225DC7C7C7233403713774A190AEF9B6E7AAB5D8B887EB7F1F8F585
C9B3118AA1C30F80284BCE0E730E247085FF7B1CD7E0988F36BAA813C8FCD339887407D4882AB3
74112DE05DDFA5139EDB6AE5B583E031157980C2D52169D49775FBA8B4E1D906EA4B8E10DAB35E
203CA01FA7629BB5325218A005637EB76CD3E55D11B771FA770C337E6CEEB465A8D7F1597F6551
B2FF65FC891033FADF0389DBC588C8DFBD1DA9AFCACCE38582B167C3E36210B9AD5551E75067BC
50AD37890806683F8028D06ED899E9B198A9EFBD321A3AC3C6D9FE41B644CD37B66412E5720D14
47A89CFE14AF540B5DE8E900E9D66C21BD6528D636F6AE5293F1C9444883F0C15C41D79EBBDC25
4BFAF1005645A73FFE6C2F657CAAE102E0BB5E787471E929F7F8DD97C6E59659925F0C3D741BA0
9CE501E074E78CF9333485AEF2730507157A422D843A19CA1DE2B808D5F0A22318A1B9CC5E07C5
5CF186372472A2C737D87499294A5C5E8EA50EEB7947C833AEF8A3CD932D4A7E4B8FD99C74604A
BCA2B4AA067CA63C1CFBAF9FCD793B00F452011DF2DECB602EDE3FFB8A06FAA52489EF4EE736F0
B8C5FB0B6B9BC8B59E9ECEEA1D22668FBC908A89EFFDE0DF6BAC4D0A7A7F038DD8EFC85F177970
9B4DB3949C6943F9E080853762B79D5BD391C6B066BF52547320E2C8358D0C0CEE994C89CA1CA9
F37CD219736C2C01AD74993103C4E992FEE17503A00F025A55A882DBB711112E3A247623DC65D5
14FF7CEC646305862AFEB7BF057B1816F9CDAD7DA4A1DAA6E26682FAFD0A7D20F88F37FF51BD77
734B1EDE7092B809A214CC1C12EC8B8434F34E0DB6C249D3553C548E2A00D71D2C4723D9E10F76
05E66FDD97F90C26DB0864421B57313FC2A345D31829B0B25450E2CB4ABEC4FB9D1F39A2D68BCF
BF41B93F92B39E7EC6DA3912DF9BCA1686DAD2F69EDB26B37C1205A1409187C8274A50ECB0434A
D03524EFCF0BD29131EA2B6DC7115FD69D98E4D8D9C38DB3A9A5AF5605A13E627F4EAB13B08911
B44E2E6C678004F88DA3FE2DD09C3407220DEA3DCAC845C89049D9370DD8383EF4CD3B684AC7B0
A61B688FA132868C52A27DCF6C885EA96B5313627164D532C3C70CADA13EC5124E940C55837008
78D64D77AF0A13F4803E2716A1C6973130AFC4954A6800461DE890AF174C3501D575C1F3A3661C
0974B3D4CDFEC08205DBFC683D6F265DFDE654C623F30BDF9CBE83262869767D243291A7BC5747
8929BD6231701D3C493E47C54824F073C45739A179BE64EED97B01B6161840BD9DBF4E54B2BD1A
2768FD02108989F4A41D4A727100E5B9B1CCFE3891BD70A6926AA1DE689620DE6925CF29F10657
91FEFBACA00068DA6A1AF89E0DB4C042B97517EB6AA79BDAC43EE8FEB822F8BF616BFD7123200C
BAA27C8468BB472F93DB1A012BAF9B0A4B5F826D6E2DACB093022BBAB16FA3ECA34CF711BCE815
CFF4C2D72F49020C34EC029DDB65E0793F9ABACE04003CC7FDAEC84340964BF7010B37F05AC17D
B406FDD7975C49FB46280D6599C47C0123FB86218D242338BC54F8566CB38FD2425F70379E0123
C9D0A53B3BC609BA0586E7BAA48C889DB4AC331FBACC669C2E14F3419C6B0F58E75FC76C405C42
E9562D33FAF544941B0F8CF79DC26F83A14F1D8746BFBF020D4D443D22CEC07432C921187827E1
D52C93DE2743A75320E55169F2D619B78C0A0089CA20C6832FDF1116145FD98BF771ECCD42DB59
BD173B046FD71DDDBF9D9AFEBBAD6116B1863427EE0D81713BEB43CD0EB9166296FDEE311EB20C
013B3F7601CE6229425FBD8B28A0972A81A8D1C0484289F5561B69C2ADDDBB70F75F770DF38996
8FE1C7D6DB3872BE6EA35EB1C7B56D4593016541D22EC5C71A635CCCF52D6A621A9122D14C37C2
93EA5CE08E368E8292F7C98B2500229B04A5E1C96924E802A3BC0FB5E58B8F778A6E57AA8C64C2
759E0C8B63083DF8F46FC3761FC9F984EEA18C5A932A144E58DAA18FD55F51FAAB06E1D28F2655
09365235B5E44F1453E3B0624C6E3709641AB1C5814FAE6642D852DA32AC7B54FE8560BF3ADD3A
B3033BA8923A0884E565D1CADC4D09C8A52CBDDD039E2C83769058DD389F86F71852F10998B4E3
A758498F4A9B79CA6C334019901CC779B9A6B005569A0E192AE2628E16A8BCBD70276E36E175CA
A41E221A3502A046B178FAACF020A1CF03188D8764730809B2D37A45FAA742D7E591BE258B4172
6D91960670CAE77ADADEC51A672A7F7624057603FFEF82622FBFBD4E0EF4661151429E37A64B5F
4CE3C03D593AD9F504597EB6F0528F36399B33F30CC3B2F96F3733A8013041EB3A6AAF4B0A45FE
F733D1FC07D44693D6AF26F4E3A902C8F20A7AFA23A9726F334C4E6120855EB049172A34E4BD0C
93C3003AA814CF57C912C53C6254E3B37F494C99AFAEF3ED92ED9D1A3826C812C315F5D1C78641
1EA2CD5ED850E596EC26CD63CF6AD87D0A43B9F44E0A297180416C2B551D6DB874E7E11E0D23AF
306F045C7F67B6F54AA8A588084EC5FC95BEC9E4591231BE11A52E398B863C32B7256475C6EBCB
5F2313D750C7742E3E838C62DE54311278BBCCCD5116DD957EB97D34D6452700C1847581DC82AF
67E3288DAE3B6F16E9DC35799C1C85F9A568DCFB9839960C8D28F11261375C4A19B4DF0B2DE321
AEF39EEFE81A28147876D457931A141E1E6FB18DE81582DE371EB7304AC7BFCD7E116E7277DC4B
041A8E304CD6AFC986E037D112DEE3B26D0B353D8011FA8B0E9B048CB382D6C4C7BB82AC2E0EC2
FB6C4D904FB9E6D3A9FB83F88605DAB42E02C7982B894B945787E8C61E3A256F42D36B2632DFB7
CD62BB7EFD676D42A155F0FB6475B51008729CCF23957B468946D4286272C7510DB2D0645EE78B
AF3F051730DDB1F7D56092BEC76E82B76D201A470D3946BE6AD863533526D66DAE5914DEC93438
77BFDB7C2F01D9886354059CB8EFE4270058D3A06146B213C36D1B342D457DB8673BFFAC4315BC
CEE9ABCC370920E95F8637B83480D8C978C093CE085EA1B4E01CE104C94AC744BC0E69671AB889
CDE75E6CD976FD2D0FA70C306B6D36C4511E70AEA5B6655512372FD55C016432A3CD9417D97D0A
4C228BE55911C32419A0FE5F16EC9A6071AAAE1D851F74AE0710056014BF9630039F6637EEF891
99BF3CF081C955795B4467EAE95019BAC7EF36FA79D9F97F3D33DF2251F44B99D13DCB7D832378
24E4BE48A308529C6BC428B12CF69A6127EFC21121444DCC37F9A7A3F2730F02D8D3FE9581CA2B
88BE913CF948A95152A64566A881389A059E5BEE75841870787C4720DC6FAD43F12F853EEC7A65
FE5ED736DF222CE1E386B806BEA91AF7F7F72EEC0EFDF895471D76057854AA61255D6E2EA52813
62153D6F589FA2FBD0376DF21968B0FA750B30D65EDCA7FC2D85702361C4CAF1CD043E48485C45
1534C56AA12BCDE172F23F6738D165A320CDF987B827BC566FB90EDD853C6D7C567C095AA5DA9D
379415125D7C67919EF3B8D982A1469169016064F637708A327E68EF2C5AF23BFE04C1AB598DF0
85BC3CB55A0646850932FA352A9E8AE66017D9837AF4129339680A1E55C160E4A049F31FCC2A25
76C7EB46248B94CE3519BAC922CF46F1E1E9A7B8A75F47AAE73EBF0A994CF247A0D08E65AB321A
059CB4EE443F720EE5BB46A1271305FF9884F5EC3E63DFE059B32849E88FB974A4A091DBB853D9
B39DBC19E523D69925A419E891E8AEA1476B14BCC1BA4AE031263CB83BEEF7C7060362BC08D82A
6415FD9958CF428D4C43961DBEBAD1FB7D77663700DC73B80F6692E862A5FA8E5B31C028B6C7C8
A7C11B3B1B0A79787ADABD6D1E37306118CA3505DC3C07372641E721DA4C5460A82CC6CA846FA5
49CE1054C7C096FCE1AE70765DDDA2679F035226A0321F422FF944689BB614169B7E41FA56AB25
E1CBD33DD1612E53D4484F49526800E2FF17233E262E3BCEE284CF7451B81F07037C7B9D724EB6
40D32F49D2CF36A63E8F41D967BE05EE2B1A96B0C1CA58ACC971CBA30074970DEEBC91B0D66ACF
6DF605332DD97B1BE3CB54B7A8EECB390FBE859084BCD1A458ACEB0042C778FED53D5EAB466A28
10EAB53A25E40F97B0550FEB048F83E8CA232DCE97FE280E98F43867A62D7F9EB5DA265435C783
2BDB173271FA2AE0A3863D03AE13F0CF54B7DF774767F87D1BAA65CEE822C038A6F91AB256CB68
23B9C505D77EE082844FD8C7072CA789737FE8D6F4D6621CED1DEC6C9756F1195DCCF09244FB8E
87BE0077EA745DA363F398328CD3B22EC1EAE10BD08E5FCEEED39B7E0B86305628FAC28A050C75
A6F17864E16BE855C2E4A1998B83AB94AE09FA37B69FE6673F4D1D241ED9ABE53FFA2175777364
7B5F07FF8CE2BC3121EA092FCE04072647C5645C1937B7EFE57CC1D6C2652F8EE4F5F7788A7243
AC033876ECAFD7C5DB01D09F00830661A8F01C0FFB7CEDF7C23E620A78733A50028CAD88D33DF1
58CE6A1F833C2AE7E57C875CF29304DD96DADBFE1DC590FE866C066EA6EF0C78F7FBE8229200E4
8A0E6FD4AC0A81623255CCE187ADB8AEEA7C1D791EC5901ACF30074FBF6C97AECB19BCE7CD96A2
58C901D1FFC4A79446EF7BE7A9080AEEFB054372C30F3555D3654D5CC2DE0BFA214B00A5764B9D
69B0F02B420647C0C61CAED3755896D4A9E872CD95D0FE6DF1D3799626E818B802435C6AF74308
5F0AC41AE3618C4D345C509E9E689C8934EDA9F76A17F8F056ADD5367884E14AA984C28FEF4F5D
4D9776E0133A4A550F7964F43E2C9E8AF8B54C9F81FC7818A6C80B2C3319690A5CD785D00320C5
8FC00E762F2A1D8102F8EB7A3EA692928900CEBF2764907E75CCA0F1500C546D931B9ECC96A53E
CA6FA69EBAEF1F09EC6F4FD6C16B34243F5639C9F9DA5C4E2851D7A21E76FCB35F5D2E8EBA7CA7
AB688C96F27D782C335BBB3DCF7CF8EEB322FE5692CF2EBC2E363F12ACCF9F7A513BBBB024FF94
788BAF7086ECEFFDAEA528D8168D8BD43E428D4BD7A0E5F9414C116BD6E42D257882EB8634CBC6
D11B5AEA305DD6C628387C6E489B9A871CED2085903463470A10E8B85433BB7865B7B9B955ED04
60691CCF814A0BA81F6C20C2B19877E4F37C406744BA5FEAD343EDC4B42BC0040B8FDEA21BDCF3
047030A1E62365FBEBB3E0C419DB4DB280BEC3CBBDE80DAE0088D1AA03DD1A8A3313FC744EBEEF
1E993482AADE395EB6024A67BC90A4DD121D8D2A82BC9B50B817843CBBC79A2810FDE2A148BDDC
183C9B8391CD0FD80817E39F299028420A09939D41C1351C2562E20A45BF8392ADB750A1AA3245
24D61999129D827D4C28BDCBF3A9DF6207BF8C33337B19F886B9326AB723071652AAC0CCD5FD1F
2D47062848BC1AEF1032B35F8F20AF5739BE6B0F7A612559A36CA3814F4807CF62B65FD6DCF1F0
26F31D2523B523DA3A55270EDA57C727C69EC945911028F9F6E56234B3A400FDF92C80C1D42211
F661DEC84271C010E2450B08500534530BB6CFBECDC8FEA688C2CCEFB0FCD77744CF4E0719FBC5
CED407B114EB2F51E266F5BB9766F831ADEBDC8485C4B519ED77A1BC98BB56BBE0E5940D3BD1D2
46ECAFD652DE1BA803D2798645CEBA92D6E6E123852D27BBD75F9946CC17E2DB56008231D07BEE
887EF18AC9F99EEFCF1B2BFAE8F99987B61451AD50DDD548DED93CE69161A2E67435E9BA5EDB8C
2EEA6088D4F71FACE28CA3B27628C3EAA0C59A1049EF61DDCF048F587F725082F557953FE0B804
8B7B38A196A66A975557F6F5749B52474DB4AC594AEF8181876EB84277E2699F637DB5AA2F5B46
20CC1037D83881D63D7E8DD3430C307E4646466F94E529BCB54EE9A7F8A795DD789683615CB182
623D16D1F80257B9FC1759C798CD3917648F992A34BC685B3F6798D398E762E0E0F3F86B6933B0
D7AF1ADC561B621BA00828F89E21335B079738ACCAB8D88AE5C406AE9CB920708F41110E6D7ED4
315330E6FDFCBFEBB541CE32E5F93C5FF1396BDF250232E9893CEB5F87F5E4165A9FE1AD8D71C0
7C23B65B875A7331F59340874222B9F3085B25E4F00F11154AAAC24562B2BFA901B960426A4E6C
E481ED163C9AB39E6426C4CCE2B20E8C72B1C108C405977D45C460115FF4EC599C9BBE75F8BF4F
0D186A2FE9309D9F50768E829531C40BB63297C382B19DBCE41D5E5E91F4B58D98990291D9CFF1
EFCCC6F8B1F8CEDC8076825B673121609812A297D6B9564B4048C8A899631D351A438621003BF8
AEA0B738AE619E99C0531D175EBCAE621B836CD9C593358E03CBA68498B05BA0B56F233F59DC52
0699C21985E63F5A4A3F77CB74A2AE1946AC5C78DAC2AB7728EAC7B5CF10A97755059B1EAD6640
91C8ED90AB4EE76F827F1AE1EF1DD9A50396C1832FDC24754A976878A49F6E87AE9B2195F82BDD
DB8D035BC0343CA13815B3A4A6DFE42D6F59C07E017F8CF207711397897435E3C5B914AC719210
FA8D12A2909E11FFF50A2C47299916A49D4E180F5BCA51F0F3EA76E549A04A1A117279FDA57CA0
6A069A4578525471537268F263E8A150D14C266383B94E61972B189525D99A9BA9D65E4F0EED37
88C2DA2B5D476FE2A70EACB7CAA301BABCCEBD031B12A8AF178D371232AD0A47DB8972E7722BDF
BA44356EB7C5D7B6EAB76305BE2267F4F8F7F3579F8CEFB2919FCB14FE218197B6C2997BEF23DF
8FBB588F2DCF0F2D3AE1F057FC2049FD732C238981F5FBD1B057B49A4C0092BC958780EE01BEE2
A4F42B0486935409EAB9E8E1C0E8D7D46D834A09E191FEDBA815094F745B87F2BAAEAB278B0FD7
C68A95363FAA80A24BD3CD02979B6C0A168A7C056370020D4E70721FD0309D6405D1E61FB307B1
5C54FF8139EAE59C2A1BA1D893A7D26609296369763BA51577B5C9A7497A7DAE54E939C289E4D0
C925B456EA7A08DE43D89BA5AD3E5E629637AAA91BDE15D982A3FF9971C6EDCC8568B3A262DB7A
B3BD950E4C9A372D2995B7EF38DF40246F2EF7366A8DD25074BB52FAD66589E892DC53B0F76D94
E54381D0D5ACE114E8B1114E1233419C688B207F2982633960DF741AC2D97B9CBE1C492F2F7A70
EA70968F75DC7C49F3F17864ACD90177CA8E0E1F02BA7EEDA27271F2ADBCD7F8C980CAC6ABA671
8E3BAC6016FB2BDB2D44A81A0967386BF9E6212797B0F2F9A9B2B4A2015DE47D4722289E5632FC
3BDCE60F5F1AF5D1033BAFA4366FA938B1DC63A799190319CF16236EEAA454585C3D22DA9E28CA
C0174C9C878075F29692C9865C54726316A0016E148F37210E1C90BFDE8FF6A6AE696529B3039A
1BA3C28179C198035CE42A1F794B290814BC98EE2F46A39750DDD65C873F25D173ACDEE1A5BC53
1564EA76995DCF122E4E1D05F6E84524A2FE136E6BE115F8E3E80AAEC073A150DDFA6394B0FE5B
0398FC08F49C2B271960182F63ECCC2F71C973A0768F5D1464D86CFA932B9FEBAEA87EF97E0FCD
6EFE7E4BBED09C2184902176FB7D2EA1A885250D338EA4C8FE4DF827A402CB4D511B730E98C644
D3009A2A6AA30604DCC012F9B3833AC40FB72040EBB22FF3CCF65697158F50248F2ED01F749570
6684DCA7556FABF359CCC3A73FEB39E2AABBE9E337C1B338EA33CF54BF25B8B9788F418CFB064E
0667948946027A755ABFBA7A72EE83D34533F95A72F34A724181C6E52C1944D11F6DD2B2AB4E1E
3C9BB1C94A0782DDB2B63BDA717DDAE42618B99E24AAD06B5463DFDC8C055F39820911D2BF2605
3CC93F110ED75B5F48DA4599454C03461C95F48A1915EE53689C05AE84A7B1D3938FF5B3AC5F5A
34A1BA2725FA5BDBA7B6C272FBA86731207502C8BBECCEF03B6CD4E50FE6FDEFFC87E74F48816A
566A1222BE1F47491DBD73E4DECB5791BA834D4D1C99C497985959A1847B817751C4ABAF98D96A
6F995AE37DB073655CBFBB9DC91497CCA1434BCDEBD5F83CB160E74963BA96F0E795FF727061C4
D0CA9FFA9B373762EC0FE39E1CD41C6D2434537D159EEE9ECFDD6F3564F31452035D2303D7938A
AF260E8442D58EF5BFDA2DA2FEA1D89582C1E13903CE2002BBCBE0F79D623A3498A7333B1F9A9F
383795981679F5DC5F1B782F20F3464D00107970B2B05FED2A02BA813C66BCFC67385B79EF4358
AAA05039F1765780177E1CF51A5B4CE720D491C16D929495015AACABC3F898068EC8EE33895AF7
2AA3EB7203BCAAAE9ACB00390BF9AA87B113C230FB9B1442FA0C2102DBDEB3B95B712F05407B9B
7012A0602009A6A69474181B552E8398D8B9093E588427C2A4EE8F601332A89DE59724C07DD39A
C83B5FA441256A517117801E56FE217B47764C79B4250A8ABF00B60B6B68A7919A4BCDAF8C9A6B
590F6A7F93C361D74606B0C96A6242A515E859032AF658E3817943FCAC6981FE1D7C865D5CC57E
000A3F1E9535E0C45105ED0B0BD4700C29E9C89441C931785925B711E1FD4E8ECCBB3F7A3AD63F
68C41C1BCE45557139D329C076E167DDD4FFAAE81D4664353D03C20759354232D85EA6869854EA
2D9E8AA9300D3DF0039A0A0AB73D018476B5F9BA8B5CCA9A20270FC1CEA623630FBA1ACFB66BB6
BBE9A218855F07DCA2479EB8876354533186C7FEC2D63B3974D3FB8C3F5064BC8A0EAD9B8F1698
85F93B1BEB0181242D76A94956BBC5314E57515C3ACFFAE5CFA1C1584715C4290A850847C06995
18B2CA576B128EBD9BE61196EB0A2CCC51477707D1D073CCAD6851501EA673966FE65E2342C54C
05C81CD80FFDF78FDCC77A0C0E8C5FABA906C1FDD4D08DE0184BCEC1BF9E6F7AAB80862A4E5EF6
509ECFCD45D48A74EA2886D244A361256E8B8112DDDD5432C68936FD7FC2D5A62722BB50183470
11DC2FE65B2C7E28005347EE495FE071E59DF2326E9C4B91D324BE9185D3511212B2A2E47CFA7B
D1A4CD5CB3CB986488FC985E7624737A00F18C547852AC26658210C94C2F84761BA0230AB0F484
18D591E115C6016EC39B97F8B12899FD7A4C1C6B155EF17EF46AEC8FC6F5D10353EBAD43D87C44
A085A86F9DBA13F0BEB46C85DA96D08C1D9BC65E2E5443631AE92FDDD68E3E24A2F2249E36460D
F1CCBB2CF80A5D1545D8AC3D71D9B11098EA4DC944B4D1F83E43DD9C3804B101220A74692FF7E2
281D509FA230567FD325D0D2717150C52C557506D61DDDD33430230E74F6E9ADC722B24A7471AA
9ABE1942AFB075E2AF7A1EBABF205EE7C89EFA9807BA76E28F12406B0B2B8E3404768EF607131D
E759494BFA1B2F935415299734E0C68EAF737D44F207163E16AF0CEE304CB57E5AFE3E5DA24DA2
4513A3BE9F1A7E489AAFFBA73F46E0475705AFB8C0762FB011FF6AA4CF201BDC4F519BE49E18EF
C5406269E9850A8D70BE682451B541094FB99C7DC23693A2761826BE7531E4FF4F853FB38EE944
94E51A45991E256F0E9B841945351EC27AA28F33717EE276D3F1ACCDA6584A89C11F9FA0878B98
96ED230C9440E6DE15F6F16D3DFFF568CF1DFDCD629A0259C174C5B366A13C545AFBF7EBAB3499
6F7F0EED236BDFB8B20CCA618BB717E63658DC3805C259AF55E1A515AAC1E6D1A25AF80925D54E
3AB059F1634D966AC7A184B22D03CB000F766C60C579684CA613D8B6DCEBD3202C11D117797435
D88FA620A0CA34E7C1242E2AF58EE6B102C15D6D19EEFD837E360AAD094BA6C646FB18FA15C2A2
3755DF7B1A5E78460E3625BC0496B864405BC5EB57690ED18A7402F5A5EBA9FE39AD3B89000652
90DFDE4604A8837DB0E8C15CED65679FCBAE5E36AD6361CB1BAD709F4CC7EB620D4F36FBB41CB9
CF1A58E92D31E48419D4C3E265E465AC1D1A72CA49FEFB007BE89FC577BE36EA07CC77DD456A4B
9A1B534347A9FCEB1E342B3BDAA514289DBC68C504A3F0BA2F2CBDB2FEA9BEE064FD28B616594C
B9544AE541ED7C3BD384D5AF90E04F3054D3525A1650A14A61F9458A5B57645310C6BF0E4228C4
8368E50433AD91AB68C5420BC0D280BC01DE983DE039B205B82349BB16F96F6AE3563335B0BA23
ECE046C4C8B74545AED35F6686A53AD04CCADF82D6158907BD7849D308E8211FCAE32A0D7C6530
833520005842093FDEE243B68BED8ED474CA329F4456D46E3EA01E4E8D350C710CFA5211B7DDE4
1119BF82249E7BC7CF2B34A7AB2CAD5919DB030F08DCB38203537B864E208AB2AF0E7C71D6241D
D52068080641FF8F0ABF3C7870D3ED073C858E9037868D4CFC078E65E2781146550320B5760C6D
C267F0FCBDA013AC5D3E53104D29FC7BE967F94756337BA8326A4236CF1BF6ABEFE33ACFCCDB6E
FB14F847D0966FA25C3712ACB68FB1D43323198D2114FB4699814307311A06EE32E6BA0874D891
C33471BEB116209013F89F843F47B3EB599F0D3C4E9FE3AB5164C6E9A91D219E0BE9E651A01A1F
373FC8650A81A3303756D63CE841C7577DF7915FDF112897393B3CD3C3607DA7C6DCCEF2352595
E532F8FF9E6636F90AC733CFA66FB911768C0CCEC0FA71E7E13E6291D5DF3CBD60E13B9979BC1A
AD37FD2F1927B9755212E6ACF5DF241F231D8C46F656F85F563DACEFF22B117535332CA805099F
1EDAE0D808021C9F401B44A5AD7B60A447E229D8BB7B0808C152F2008D6762C95E5461399DE9D8
CE542B5F9B706D0D3A57F2FC0E8C0773414A9E68434D1FDDF5B6FFBEB267F68D9D9161774094FE
01239404823F2CCBA524C1C01716D2FBBA0084127ACF78EE9DFBAA0ED8F78BE95C86C125940CC4
4B212C731159B19C0B408E99D4C548AA46B2AE843FE48E468198F8D95756960612B4202102F3E4
D52B3820494459555FA4023263706F11B42893695D07F0EB8E127DFD37A97E91D5DC7FB0196446
E01D601FBB5B8760E4AB2C29748812902D70DD542768348BA72474CB11002B3F8409B8EE61E994
40F953E188265FD44098477F84C792A1370D6E69886F2B1519FD44C3D8A5864BDA156A7ECDA773
07A0E02FDD14EEC81E3B47290710078FFC0327CD05EF83322B2895F5EFD50316AB6DD8E4728C41
6E53A4D1FBFF227B6AA74AF674D610ABE75232164D67A28888CD1761F1495EA4E952D7C6E9DFF7
F34BB44BF18EA414A777D0287FDE8D87AF5961964C3983B34CDA085C809460FE1AC18BA1EF66F7
6BFE1DED0C4D2F5BB503464F6AE24C3EB1D8A0FFBAD22E62CD09A44C42F5AC9F65639A617A4BE5
A7ED95ED939485671FADE5118C8C62B27903D13C872899813B511C16246D0EB28FD225992E4C45
1FBACB81875A8BC56CC80F6CFFF53BCF0E13B5613D8E67183029B7297FED40D4A0094F69B05FF2
2021C2E27B7581B9C02D849D58D53F6BE9B1393C0089EC07CB15624FAA4B85ED8221E559351E51
78AB83CAC67F38C972A8A1763993356BE358E73378AAAE22FB2345EB68C09D61B7CA2A7217F396
C25F8D1230E81CE01269DCE2FE7006BB68F50375A53A38FF7F387F19120260AD9E8E39A797AC33
E85D7BD2F960A3E8606F7C7AC756279BC3B0DDDC2575D29800AF220D0928DCFEC6FD9A287A5E8E
3CAD8D3FE4ED4904100163695F2C32B3BC9C3074E2AC1E28EFC899EF49D1424199663BEB347F6E
E1
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
cleartomark

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,86 @@
<%@page import="java.io.*, javax.servlet.*, com.pdflib.pdflib" %><%
/* $Id: businesscard.jsp,v 1.1 2004/10/06 17:46:41 laplace Exp $
*
* businesscard.jsp
*/
int font;
pdflib p = null ;
int i, blockcontainer, pdipage;
String infile = "boilerplate.pdf";
/* This is where font/image/PDF input files live. Adjust as necessary.
*
* Note that this directory must also contain the LuciduxSans font
* outline and metrics files.
*/
String searchpath = "../data";
String[][] data = {
{ "name", "Victor Kraxi" },
{ "business.title", "Chief Paper Officer" },
{ "business.address.line1", "17, Aviation Road" },
{ "business.address.city", "Paperfield" },
{ "business.telephone.voice","phone +1 234 567-89" },
{ "business.telephone.fax", "fax +1 234 567-98" },
{ "business.email", "victor@kraxi.com" },
{ "business.homepage", "www.kraxi.com" },
};
byte[] buf;
ServletOutputStream output;
p = new pdflib();
// Generate a PDF in memory; insert a file name to create PDF on disk
if (p.open_file("") == -1) {
System.err.println("Error: " + p.get_errmsg());
System.exit(1);
}
p.set_parameter("SearchPath", searchpath);
p.set_info("Creator", "businesscard.jsp");
p.set_info("Author", "Rainer Ploeckl");
p.set_info("Title","PDFlib block processing sample (JSP)");
blockcontainer = p.open_pdi(infile, "", 0);
if (blockcontainer == -1) {
System.err.println("Error: " + p.get_errmsg());
System.exit(1);
}
pdipage = p.open_pdi_page(blockcontainer, 1, "");
if (pdipage == -1) {
System.err.println("Error: " + p.get_errmsg());
System.exit(1);
}
p.begin_page(20, 20); // dummy page size
// This will adjust the page size to the block container's size.
p.fit_pdi_page(pdipage, 0, 0, "adjustpage");
// Fill all text blocks with dynamic data
for (i = 0; i < (int) data.length; i++) {
if (p.fill_textblock(pdipage, data[i][0], data[i][1],
"embedding encoding=winansi") == -1) {
System.err.println("Warning: " + p.get_errmsg());
}
}
p.end_page(); // close page
p.close_pdi_page(pdipage);
p.close(); // close PDF document
p.close_pdi(blockcontainer);
buf = p.get_buffer();
response.setContentType("application/pdf");
response.setContentLength(buf.length);
output = response.getOutputStream();
output.write(buf);
output.close();
%>

View File

@ -0,0 +1,115 @@
<%@page import="java.io.*, javax.servlet.*, com.pdflib.pdflib" %><%
/* $Id: chartab.jsp,v 1.1 2004/10/06 17:46:41 laplace Exp $
*
* chartab.jsp
*/
/* change these as required */
String fontname = "LuciduxSans-Oblique";
/* This is where font/image/PDF input files live. Adjust as necessary. */
String searchpath = "../data";
/* list of encodings to use */
String encodings[] = { "iso8859-1", "iso8859-2", "iso8859-15" };
int ENCODINGS = 3;
float FONTSIZE= 16;
float TOP = 700;
float LEFT = 50;
float YINCR = 2*FONTSIZE;
float XINCR = 2*FONTSIZE;
/* whether or not to embed the font */
int embed = 1;
String buf;
float x, y;
int row, col, font, codepage;
pdflib p = null ;
byte[] outbuf;
ServletOutputStream output;
p = new pdflib();
// Generate a PDF in memory; insert a file name to create PDF on disk
if (p.open_file("") == -1) {
System.err.println("Error: " + p.get_errmsg());
System.exit(1);
}
p.set_parameter("openaction", "fitpage");
p.set_parameter("fontwarning", "true");
p.set_parameter("SearchPath", searchpath);
p.set_info("Creator", "chartab.jsp");
p.set_info("Author", "Thomas Merz");
p.set_info("Title", "Character table (Java/JSP)");
/* loop over all encodings */
for (codepage = 0; codepage < ENCODINGS; codepage++)
{
p.begin_page(595, 842); /* start a new page */
/* print the heading and generate the bookmark */
font = p.load_font("Helvetica", "winansi", "");
p.setfont(font, FONTSIZE);
if (embed == 1) {
buf = fontname + " (" + encodings[codepage] + ") embedded";
} else{
buf = fontname + " (" + encodings[codepage] + ") not embedded";
}
p.show_xy(buf, LEFT - XINCR, TOP + 3 * YINCR);
p.add_bookmark(buf, 0, 0);
/* print the row and column captions */
p.setfont(font, 2 * FONTSIZE/3);
for (row = 0; row < 16; row++)
{
buf ="x" + (Integer.toHexString(row)).toUpperCase();
p.show_xy(buf, LEFT + row*XINCR, TOP + YINCR);
buf = (Integer.toHexString(row)).toUpperCase() + "x";
p.show_xy(buf, LEFT - XINCR, TOP - row * YINCR);
}
/* print the character table */
if (embed == 1) {
buf = "embedding";
} else{
buf = "";
}
font = p.load_font(fontname, encodings[codepage],buf);
p.setfont(font, FONTSIZE);
y = TOP;
x = LEFT;
for (row = 0; row < 16; row++)
{
for (col = 0; col < 16; col++) {
buf = String.valueOf((char)(16*row + col));
p.show_xy(buf, x, y);
x += XINCR;
}
x = LEFT;
y -= YINCR;
}
p.end_page(); /* close page */
}
p.close(); /* close PDF document */
outbuf = p.get_buffer();
response.setContentType("application/pdf");
response.setContentLength(outbuf.length);
output = response.getOutputStream();
output.write(outbuf);
output.close();
%>

View File

@ -0,0 +1,46 @@
<%@page import="java.io.*, javax.servlet.*, com.pdflib.pdflib" %><%
/* $Id: hello.jsp,v 1.1 2004/10/06 17:46:41 laplace Exp $
*
* hello.jsp
*/
int font;
pdflib p;
byte[] buf;
ServletOutputStream output;
p = new pdflib();
// Generate a PDF in memory; insert a file name to create PDF on disk
if (p.open_file("") == -1) {
System.err.println("Error: " + p.get_errmsg());
System.exit(1);
}
p.set_info("Creator", "hello.jsp");
p.set_info("Author", "Rainer Ploeckl");
p.set_info("Title", "Hello world (Java/JSP)!");
p.begin_page(595, 842); /* start a new page */
font = p.load_font("Helvetica-Bold", "winansi", "");
p.setfont(font, 18);
p.set_text_pos(50, 700);
p.show("Hello world!");
p.continue_text("(says Java/JSP)");
p.end_page(); /* close page */
p.close(); /* close PDF document */
buf = p.get_buffer();
response.setContentType("application/pdf");
response.setContentLength(buf.length);
output = response.getOutputStream();
output.write(buf);
output.close();
%>

View File

@ -0,0 +1,52 @@
<%@page import="java.io.*, javax.servlet.*, com.pdflib.pdflib" %><%
/* $Id: image.jsp,v 1.1 2004/10/06 17:46:41 laplace Exp $
*
* image.jsp
*/
int image;
float width, height;
pdflib p;
String imagefile = "nesrin.jpg";
byte[] buf;
ServletOutputStream output;
/* This is where font/image/PDF input files live. Adjust as necessary.*/
String searchpath = "../data";
p = new pdflib();
// Generate a PDF in memory; insert a file name to create PDF on disk
if (p.open_file("") == -1) {
System.err.println("Error: " + p.get_errmsg());
System.exit(1);
}
p.set_parameter("SearchPath", searchpath);
p.set_info("Creator", "image.jsp");
p.set_info("Author", "Rainer Ploeckl");
p.set_info("Title", "image sample (JSP)");
image = p.load_image("auto", imagefile, "");
if (image == -1) {
System.err.println("Error: " + p.get_errmsg());
System.exit(1);
}
/* dummy page size, will be adjusted by PDF_fit_image() */
p.begin_page(10, 10);
p.fit_image(image, (float) 0.0, (float) 0.0, "adjustpage");
p.close_image(image);
p.end_page();
p.close();
buf = p.get_buffer();
response.setContentType("application/pdf");
response.setContentLength(buf.length);
output = response.getOutputStream();
output.write(buf);
output.close();
%>

View File

@ -0,0 +1,167 @@
<%@page import="java.io.*,
javax.servlet.*,
java.text.*,
java.util.*,
com.pdflib.pdflib"
%><%
/* $Id: invoice.jsp,v 1.1 2004/10/06 17:46:41 laplace Exp $
*
* invoice.jsp
*/
pdflib p = null ;
int i, form, pdipage, regularfont, boldfont;
String infile = "stationery.pdf";
/* This is where font/image/PDF input files live. Adjust as necessary.*/
String searchpath = "../data";
final float col1 = 55;
final float col2 = 100;
final float col3 = 330;
final float col4 = 430;
final float col5 = 530;
float fontsize = 12, leading, y;
float sum, total;
float pagewidth = 595, pageheight = 842;
Date now = new Date();
DateFormat fulldate = DateFormat.getDateInstance(DateFormat.LONG);
byte[] buf;
ServletOutputStream output;
String closingtext =
"30 days warranty starting at the day of sale. " +
"This warranty covers defects in workmanship only. " +
"Kraxi Systems, Inc. will, at its option, repair or replace the " +
"product under the warranty. This warranty is not transferable. " +
"No returns or exchanges will be accepted for wet products.";
String[][] data = {
{ "Super Kite", "20", "2"},
{ "Turbo Flyer", "40", "5"},
{ "Giga Trash", "180", "1"},
{ "Bare Bone Kit", "50", "3"},
{ "Nitty Gritty", "20", "10"},
{ "Pretty Dark Flyer", "75", "1"},
{ "Free Gift", "0", "1"},
};
String[] months = {
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
};
p = new pdflib();
// Generate a PDF in memory; insert a file name to create PDF on disk
if (p.open_file("") == -1) {
System.err.println("Error: " + p.get_errmsg());
System.exit(1);
}
p.set_parameter("SearchPath", searchpath);
p.set_info("Creator", "invoice.jsp");
p.set_info("Author", "Rainer Ploeckl");
p.set_info("Title", "PDFlib invoice generation demo (Java/JSP)");
form = p.open_pdi(infile, "", 0);
if (form == -1) {
System.err.println("Couldn't open infile '" + infile + "'.\n");
System.exit(1);
}
pdipage = p.open_pdi_page(form, 1, "");
if (pdipage == -1) {
System.err.println("Error: " + p.get_errmsg());
System.exit(1);
}
boldfont = p.load_font("Helvetica-Bold", "winansi", "");
regularfont = p.load_font("Helvetica", "winansi", "");
leading = fontsize + 2;
// Establish coordinates with the origin in the upper left corner.
p.set_parameter("topdown", "true");
p.begin_page(pagewidth, pageheight); // A4 page
p.fit_pdi_page(pdipage, 0, pageheight, "");
p.close_pdi_page(pdipage);
p.setfont(regularfont, fontsize);
// Print the address
y = 170;
p.set_value("leading", leading);
p.show_xy("John Q. Doe", col1, y);
p.continue_text("255 Customer Lane");
p.continue_text("Suite B");
p.continue_text("12345 User Town");
p.continue_text("Everland");
// Print the header and date
p.setfont(boldfont, fontsize);
y = 300;
p.show_xy("INVOICE", col1, y);
p.fit_textline(fulldate.format(now), col5, y, "position {100 0}");
// Print the invoice header line
p.setfont(boldfont, fontsize);
// "position {0 0}" is left-aligned, "position {100 0}" right-aligned
y = 370;
p.fit_textline("ITEM", col1, y, "position {0 0}");
p.fit_textline("DESCRIPTION", col2, y, "position {0 0}");
p.fit_textline("QUANTITY", col3, y, "position {100 0}");
p.fit_textline("PRICE", col4, y, "position {100 0}");
p.fit_textline("AMOUNT", col5, y, "position {100 0}");
// Print the article list
p.setfont(regularfont, fontsize);
y += 2*leading;
total = 0;
for (i = 0; i < data.length; i++) {
p.show_xy(Integer.toString(i+1), col1, y);
p.show_xy(data[i][0], col2, y);
p.fit_textline(data[i][2], col3, y, "position {100 0}");
p.fit_textline(data[i][1], col4, y, "position {100 0}");
sum = 0;
sum = Integer.parseInt(data[i][2]) * Integer.parseInt(data[i][1]);
p.fit_textline(Float.toString(sum), col5, y, "position {100 0}");
y += leading;
total += sum;
}
y += leading;
p.setfont(boldfont, fontsize);
p.fit_textline(Float.toString(total), col5, y, "position {100 0}");
// Print the closing text
y += 5*leading;
p.setfont(regularfont, fontsize);
p.set_value("leading", leading);
p.show_boxed(closingtext,
col1, y + 4*leading, col5-col1, 4*leading, "justify", "");
p.end_page();
p.close();
p.close_pdi(form);
buf = p.get_buffer();
response.setContentType("application/pdf");
response.setContentLength(buf.length);
output = response.getOutputStream();
output.write(buf);
output.close();
%>

View File

@ -0,0 +1,114 @@
<%@page import="java.io.*,
javax.servlet.*,
java.text.*,
java.util.*,
com.pdflib.pdflib" %><%
/* $Id: pdfclock.jsp,v 1.1 2004/10/06 17:46:41 laplace Exp $
*
* PDFclock.jsp
*/
pdflib p;
int tm_hour, tm_min, tm_sec, alpha;
float RADIUS = 200.0f;
float MARGIN = 20.0f;
SimpleDateFormat format;
Date now = new Date();
byte[] buf;
ServletOutputStream output;
p = new pdflib();
// Generate a PDF in memory; insert a file name to create PDF on disk
if (p.open_file("") == -1) {
System.err.println("Error: " + p.get_errmsg());
System.exit(1);
}
p.set_info("Creator", "pdfclock.jsp");
p.set_info("Author", "Rainer Ploeckl");
p.set_info("Title", "PDF clock (Java/JSP)");
p.begin_page( (int) (2 * (RADIUS + MARGIN)),
(int) (2 * (RADIUS + MARGIN)));
p.translate(RADIUS + MARGIN, RADIUS + MARGIN);
p.setcolor("fillstroke", "rgb", 0.0f, 0.0f, 1.0f, 0.0f);
p.save();
// minute strokes
p.setlinewidth(2.0f);
for (alpha = 0; alpha < 360; alpha += 6)
{
p.rotate(6.0f);
p.moveto(RADIUS, 0.0f);
p.lineto(RADIUS-MARGIN/3, 0.0f);
p.stroke();
}
p.restore();
p.save();
// 5 minute strokes
p.setlinewidth(3.0f);
for (alpha = 0; alpha < 360; alpha += 30)
{
p.rotate(30.0f);
p.moveto(RADIUS, 0.0f);
p.lineto(RADIUS-MARGIN, 0.0f);
p.stroke();
}
format = new SimpleDateFormat("hh");
tm_hour= Integer.parseInt(format.format(now));
format = new SimpleDateFormat("mm");
tm_min = Integer.parseInt(format.format(now));
format = new SimpleDateFormat("ss");
tm_sec = Integer.parseInt(format.format(now));
// draw hour hand
p.save();
p.rotate((-((tm_min/60.0f) + tm_hour - 3.0f) * 30.0f));
p.moveto(-RADIUS/10, -RADIUS/20);
p.lineto(RADIUS/2, 0.0f);
p.lineto(-RADIUS/10, RADIUS/20);
p.closepath();
p.fill();
p.restore();
// draw minute hand
p.save();
p.rotate((-((tm_sec/60.0f) + tm_min - 15.0f) * 6.0f));
p.moveto(-RADIUS/10, -RADIUS/20);
p.lineto(RADIUS * 0.8f, 0.0f);
p.lineto(-RADIUS/10, RADIUS/20);
p.closepath();
p.fill();
p.restore();
// draw second hand
p.setcolor("fillstroke", "rgb", 1.0f, 0.0f, 0.0f, 0.0f);
p.setlinewidth(2);
p.save();
p.rotate(-((tm_sec - 15.0f) * 6.0f));
p.moveto(-RADIUS/5, 0.0f);
p.lineto(RADIUS, 0.0f);
p.stroke();
p.restore();
// draw little circle at center
p.circle(0f, 0f, RADIUS/30);
p.fill();
p.restore();
p.end_page();
p.close();
buf = p.get_buffer();
response.setContentType("application/pdf");
response.setContentLength(buf.length);
output = response.getOutputStream();
output.write(buf);
output.close();
%>

View File

@ -0,0 +1,94 @@
<%@page import="java.io.*,
javax.servlet.*,
com.pdflib.pdflib" %><%
/* $Id: quickreference.jsp,v 1.1 2004/10/06 17:46:41 laplace Exp $
*
* quickreference.jsp
*/
int font, row, col, i;
int manual, pages;
final int maxrow=2, maxcol=2;
int startpage = 1, endpage = 4;
final float width = 500, height = 770;
int pageno;
String infile = "reference.pdf";
/* This is where font/image/PDF input files live. Adjust as necessary. */
String searchpath = "../data";
byte[] buf;
ServletOutputStream output;
pdflib p;
p = new pdflib();
// Generate a PDF in memory; insert a file name to create PDF on disk
if (p.open_file("") == -1) {
System.err.println("Error: " + p.get_errmsg());
System.exit(1);
}
p.set_parameter("SearchPath", searchpath);
p.set_info("Creator", "quickreference.jsp");
p.set_info("Author", "Rainer Ploeckl");
p.set_info("Title", "quickreference (Java/JSP)");
manual = p.open_pdi(infile, "", 0);
row = 0;
col = 0;
i = 0;
if (manual == -1){
System.err.println("Error: " + p.get_errmsg());
System.exit(1);
}
p.set_parameter("topdown", "true");
for (pageno = startpage; pageno <= endpage; pageno++) {
if (row == 0 && col == 0) {
i++;
p.begin_page(width, height);
font = p.load_font("Helvetica-Bold", "winansi", "");
p.setfont(font, 18);
p.set_text_pos(24, 24);
p.show("PDFlib Quick Reference");
}
pages = p.open_pdi_page(manual, pageno, "");
if (pages == -1) {
System.err.println("Error: " + p.get_errmsg());
System.exit(1);
}
p.fit_pdi_page(manual, width/maxcol*col,
(row + 1) * height/maxrow, "scale " + (float)1/maxrow);
p.close_pdi_page(pages);
col++;
if (col == maxcol) {
col = 0;
row++;
}
if (row == maxrow) {
row = 0;
p.end_page();
}
}
// finish the last partial page
if (row != 0 || col != 0)
p.end_page();
p.close();
p.close_pdi(manual);
buf = p.get_buffer();
response.setContentType("application/pdf");
response.setContentLength(buf.length);
output = response.getOutputStream();
output.write(buf);
output.close();
%>

View File

@ -0,0 +1,232 @@
Using the JSP and servlet examples
==================================
Before using the examples you must either copy the relevant
image and PDF files to an appropriate location, or modify
the paths in the source code to point to the sample files.
Note: If you find corrections to the instructions below, or
can contribute configuration hints for other environments
we'll be happy to hear from you -- please send all suggestions
to support@pdflib.com.
Exception: PDFlib already loaded in another classloader
=======================================================
When using PDFlib (on any platform) with an application server you
may encounter the following exception:
java.lang.UnsatisfiedLinkError: Native Library
C:\WINNT\system32\pdf_java.dll already loaded in another classloader
This is caused by multiple classloaders trying to load the PDFlib class,
and therefore the PDFlib native libary, into the server's address space
simultaneously. The problem can be avoided by putting pdflib.jar into
the global class path instead of the classpath of the web application.
The PDFlib shared library/DLL should still be placed in an accessible
system directory.
For example, for Tomcat consider the following directories for pdflib.jar:
bad: WEB-INF/lib
good: $CATALINA_HOME/shared/lib
Using PDFlib with IBM Visual Age for Java
==========================================
- Add pdflib.jar to your project.
- Place pdf_java.dll in the \winnt\system32 directory, or some
other directory contained in the PATH environment variable.
- Relative pathnames in PDFlib function calls are interpreted relative
to the java bin directory, not the project directory. For this reason
the output of the supplied PDFlib samples may end up in some strange
place. Absolute path names work.
Using PDFlib with Borland JBuilder
==================================
- Having pdflib.java in the same directory as the project file
seems to confuse JBuilder.
- On Windows pdf_java.dll must be placed in the \winnt\system32 directory,
or some other directory contained in the PATH environment variable.
On Linux libpdf_java.so should be placed in /usr/lib or a similar
well-known (to the system) directory.
- Relative pathnames in PDFlib function calls are interpreted relative
to the JBuilder bin directory, not the project directory. For this
reason the output of the supplied PDFlib samples may end up in some
strange place. Absolute path names work.
Using PDFlib with MacroMedia ColdFusion MX
==========================================
We recommend the PDFlib Java edition (instead of the COM edition) for
use with ColdFusion MX. Install the PDFlib Java edition by extracting
pdflib.jar and pdf_java.dll into a folder defined in ColdFusion MX's
Java classpath and the system's PATH variable (might as well just use
C:/CFusionMX/lib). If you previously used the PDFlib COM edition
with ColdFusion you have to change the <cfobject> tag parameters in
the CF file as follows:
<cfobject type="Java" name="oPDF" class="com.pdflib.pdflib" action="create">
Using PDFlib with Allaire JRun
==============================
In order to use PDFlib with JRun the following is suggested:
- Copy PDFlib.jar and lib_java.dll to the .../JRun/servers/lib directory.
- Make sure that the lib directory is contained in the servlet.jnipath
property. This property can be set from the management console, or
specified in a local.properties file.
Using PDFlib with J2EE-compliant servers
========================================
In order to use PDFlib with J2EE do the following:
- Add the following lines in the file $J2EE_HOME/lib/security/server.policy
in order to allow the PDFlib native library to be loaded:
// default permissions granted to all domains
grant {
permission java.lang.RuntimePermission "loadLibrary.*";
permission java.lang.RuntimePermission "accessClassInPackage.*";
...
- Use the deployment tool to add pdflib.jar to the project as an external
jar library.
It seems that pdflib.jar must be placed in the %J2EE_HOME%/lib directory;
otherwise the server will attempt to load the PDFlib shared library
multiply, resulting in the error message "shared library already loaded".
- pdf_java.dll or libpdf_java.so must be accessible in some system path,
e.g. \winnt\system32 or /usr/local/lib, or via PATH/LD_LIBRARY_PATH.
- The PATH and CLASSPATH variables should point to the bin subdirectories
of J2EE and JDK.
Using PDFlib with Tomcat
========================
In order to use PDFlib with Apache Tomcat do the following:
- Put the PDFlib shared library or DLL (e.g. pdf_java.dll) into a directly
which is accessible systemwide (e.g. C:\winnt\system32).
- It is suggested to load PDFlib as early as possible. Loading PDFlib later
in the servlet (e.g., via repositories) may fail due to different
class loaders.
- Put pdflib.jar into
$CATALINA_HOME/common/lib (Tomcat 3) or
$CATALINA_HOME/shared/lib (Tomcat 4).
- Add a line similar to the file tomcat.properties:
wrapper.env="/usr/local/lib:/usr/lib:/lib"
- After building or installing PDFlib it may help to update the shared
library cache via
ldconfig -v (or similar command depending on your Unix version)
Using PDFlib with IBM WebSphere Application Server
==================================================
The instructions in this section apply to WebSphere 3 and 4.
For WebSphere 5 please refer to the section above on J2EE-compliant
servers.
Servlets are loaded with a custom class loader. For this reason,
the pdflib.jar file has to be located in the Application Server's
classpath rather than the web application's classpath.
To locate the pdflib.jar file in the app server's classpath, place the jar
file in the \<WAS app-server's path>\lib directory and edit the
admin.config file. In the admin.config file add the path to the jar file
to the setting labeled:
com.ibm.ejs.sm.adminserver.classpath
If you use the Websphere Application Assembly Tool you can add pdflib.jar
to your project.
The DLL or .so must be located somewhere on the machine's path.
The winnt\system32 directory works for Windows, the bin directory
of WAS on Solaris.
On the AS/400 make sure that the PDFLIB and PDF_JAVA SRVPGM can be
found in the library list of the jobs running your Java apps. The
easiest way to achieve this is to copy these SRVPGMs to the QGPL
library. In most cases this library is found in every LIBL.
Using PDFlib on Mac OS X
========================
On Mac OS X the shared PDFlib library for Java, which has a default file
name of libpdf_java.dylib, must be renamed to libpdf_java.jnilib. The
PDFlib build process does this automatically.
The default search path for JNI libraries on OS X is as follows:
.:/usr/lib:/usr/lib/java:/lib:
/System/Library/Frameworks/JavaVM.framework/Versions/1.2/Libraries
You can extend the JNI search path by defining the DYLD_LIBRARY_PATH
with more directories.
Using PDFlib with Apple WebObjects
==================================
To the best of our knowledge, the following should be sufficient in order
to use PDFlib with WebObjects:
- Use the java-framework-maker tool to create a new WebObjects Framework,
and select PDFlib.jar as input package.
- Add the new framework to your project.
Using PDFlib with Lotus Notes
=============================
We don't have first-hand experience with deploying PDFlib in Notes.
However, a user contributed the following information:
> Apparently when you compile the Java code and then you run the code, Domino
> is not using the same paths. To compile the code you need to add the
> pdflib.jar to the project. This can be done by clicking the Edit Project
> button and browsing to the directory where the file is located and then
> adding the file to the project. This will allow you to compile the code
> without errors. If you are a programmer you will assume that since the
> code compiled therefore Domino knows where the Java class resides but you
> know what happens when you assume. The second thing that you need to do is
> create a "\com\pdflib" directory within your Notes directory and put the
> pdflib.class file in that directory. When you specify "import
> com.pdflib.pdflib" this is where Java will go to look for the class
> then it executes it. I found documentation that said that you can add a
> path my adding a line in the notes.ini file "JavaUserClasses=yourpath" but
> it did not work.
Using PDFlib on SGI IRIX
========================
Use the LD_LIBRARYN32_PATH environment variable (as opposed to the
traditional LD_LIBRARY_PATH) in order to set the directory where the
PDFlib shared library for Java will be found.

View File

@ -0,0 +1,103 @@
/* $Id: businesscardServlet.java,v 1.1 2004/10/06 17:46:42 laplace Exp $
*
* PDFlib client: hello servlet example in Java
*/
import java.io.*;
import javax.servlet.*;
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;
public class businesscardServlet extends GenericServlet
{
public void service(ServletRequest request, ServletResponse response)
{
int font;
pdflib p = null ;
int i, blockcontainer, page;
String infile = "boilerplate.pdf";
/* This is where font/image/PDF input files live. Adjust as necessary.
*
* Note that this directory must also contain the LuciduxSans font
* outline and metrics files.
*/
String searchpath = "../data";
String[][] data = {
{ "name", "Victor Kraxi" },
{ "business.title", "Chief Paper Officer" },
{ "business.address.line1", "17, Aviation Road" },
{ "business.address.city", "Paperfield" },
{ "business.telephone.voice","phone +1 234 567-89" },
{ "business.telephone.fax", "fax +1 234 567-98" },
{ "business.email", "victor@kraxi.com" },
{ "business.homepage", "www.kraxi.com" },
};
byte[] buf;
ServletOutputStream out;
try{
p = new pdflib();
// Generate a PDF in memory; insert a file name to create PDF on disk
if (p.open_file("") == -1) {
throw new Exception("Error: " + p.get_errmsg());
}
p.set_parameter("SearchPath", searchpath);
p.set_info("Creator", "businesscard.java");
p.set_info("Author", "Thomas Merz");
p.set_info("Title","PDFlib block processing sample (Java)");
blockcontainer = p.open_pdi(infile, "", 0);
if (blockcontainer == -1) {
throw new Exception("Error: " + p.get_errmsg());
}
page = p.open_pdi_page(blockcontainer, 1, "");
if (page == -1) {
throw new Exception("Error: " + p.get_errmsg());
}
p.begin_page(20, 20); // dummy page size
// This will adjust the page size to the block container's size.
p.fit_pdi_page(page, 0, 0, "adjustpage");
// Fill all text blocks with dynamic data
for (i = 0; i < (int) data.length; i++) {
if (p.fill_textblock(page, data[i][0], data[i][1],
"embedding encoding=winansi") == -1) {
System.err.println("Warning: " + p.get_errmsg());
}
}
p.end_page(); // close page
p.close_pdi_page(page);
p.close(); // close PDF document
p.close_pdi(blockcontainer);
buf = p.get_buffer();
response.setContentType("application/pdf");
response.setContentLength(buf.length);
out = response.getOutputStream();
out.write(buf);
out.close();
} catch (PDFlibException e) {
System.err.print("PDFlib exception occurred in businesscard sample:\n");
System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() +
": " + e.getMessage() + "\n");
} catch (Exception e) {
System.err.println(e.getMessage());
} finally {
if (p != null) {
p.delete(); /* delete the PDFlib object */
}
}
}
}

View File

@ -0,0 +1,136 @@
/* $Id: chartabServlet.java,v 1.1 2004/10/06 17:46:42 laplace Exp $
*
* PDFlib client: hello servlet example in Java
*/
import java.io.*;
import javax.servlet.*;
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;
public class chartabServlet extends GenericServlet
{
/* change these as required */
static final String fontname = "LuciduxSans-Oblique";
/* This is where font/image/PDF input files live. Adjust as necessary. */
static final String searchpath = "../data";
/* list of encodings to use */
static final String encodings[] = { "iso8859-1", "iso8859-2", "iso8859-15" };
static final int ENCODINGS = 3;
static final float FONTSIZE = 16;
static final float TOP = 700;
static final float LEFT = 50;
static final float YINCR = 2*FONTSIZE;
static final float XINCR = 2*FONTSIZE;
public void service(ServletRequest request, ServletResponse response)
{
/* whether or not to embed the font */
int embed = 1;
String buf;
float x, y;
int row, col, font, page;
pdflib p = null ;
byte[] outbuf;
ServletOutputStream out;
try{
p = new pdflib();
// Generate a PDF in memory; insert a file name to create PDF on disk
if (p.open_file("") == -1) {
throw new Exception("Error: " + p.get_errmsg());
}
p.set_parameter("openaction", "fitpage");
p.set_parameter("fontwarning", "true");
p.set_parameter("SearchPath", searchpath);
p.set_info("Creator", "chartabServlet.java");
p.set_info("Author", "Thomas Merz");
p.set_info("Title", "Character table (Java/Servlet)");
/* loop over all encodings */
for (page = 0; page < ENCODINGS; page++)
{
p.begin_page(595, 842); /* start a new page */
/* print the heading and generate the bookmark */
font = p.load_font("Helvetica", "winansi", "");
p.setfont(font, FONTSIZE);
if (embed == 1) {
buf = fontname + " (" + encodings[page] + ") embedded";
} else{
buf = fontname + " (" + encodings[page] + ") not embedded";
}
p.show_xy(buf, LEFT - XINCR, TOP + 3 * YINCR);
p.add_bookmark(buf, 0, 0);
/* print the row and column captions */
p.setfont(font, 2 * FONTSIZE/3);
for (row = 0; row < 16; row++)
{
buf ="x" + (Integer.toHexString(row)).toUpperCase();
p.show_xy(buf, LEFT + row*XINCR, TOP + YINCR);
buf = (Integer.toHexString(row)).toUpperCase() + "x";
p.show_xy(buf, LEFT - XINCR, TOP - row * YINCR);
}
/* print the character table */
if (embed == 1) {
buf = "embedding";
} else{
buf = "";
}
font = p.load_font(fontname, encodings[page],buf);
p.setfont(font, FONTSIZE);
y = TOP;
x = LEFT;
for (row = 0; row < 16; row++)
{
for (col = 0; col < 16; col++) {
buf = String.valueOf((char)(16*row + col));
p.show_xy(buf, x, y);
x += XINCR;
}
x = LEFT;
y -= YINCR;
}
p.end_page(); /* close page */
}
p.close(); /* close PDF document */
outbuf = p.get_buffer();
response.setContentType("application/pdf");
response.setContentLength(outbuf.length);
out = response.getOutputStream();
out.write(outbuf);
out.close();
} catch (PDFlibException e) {
System.err.print("PDFlib exception occurred in chartab sample:\n");
System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() +
": " + e.getMessage() + "\n");
} catch (Exception e) {
System.err.println(e.getMessage());
} finally {
if (p != null) {
p.delete(); /* delete the PDFlib object */
}
}
}
}

View File

@ -0,0 +1,65 @@
/* $Id: helloServlet.java,v 1.1 2004/10/06 17:46:42 laplace Exp $
*
* PDFlib client: hello servlet example in Java
*/
import java.io.*;
import javax.servlet.*;
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;
public class helloServlet extends GenericServlet
{
public void service(ServletRequest request, ServletResponse response)
{
int font;
pdflib p = null;
byte[] buf;
ServletOutputStream out;
try{
p = new pdflib();
// Generate a PDF in memory; insert a file name to create PDF on disk
if (p.open_file("") == -1) {
throw new Exception("Error: " + p.get_errmsg());
}
p.set_info("Creator", "helloServlet.java");
p.set_info("Author", "Thomas Merz");
p.set_info("Title", "Hello world (Java/Servlet)!");
p.begin_page(595, 842); /* start a new page */
font = p.load_font("Helvetica-Bold", "winansi", "");
p.setfont(font, 18);
p.set_text_pos(50, 700);
p.show("Hello world!");
p.continue_text("(says Java/Servlet)");
p.end_page(); /* close page */
p.close(); /* close PDF document */
buf = p.get_buffer();
response.setContentType("application/pdf");
response.setContentLength(buf.length);
out = response.getOutputStream();
out.write(buf);
out.close();
} catch (PDFlibException e) {
System.err.print("PDFlib exception occurred in hello sample:\n");
System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() +
": " + e.getMessage() + "\n");
} catch (Exception e) {
System.err.println(e.getMessage());
} finally {
if (p != null) {
p.delete(); /* delete the PDFlib object */
}
}
}
}

View File

@ -0,0 +1,80 @@
/* $Id: imageServlet.java,v 1.1 2004/10/06 17:46:42 laplace Exp $
*
* PDFlib client: image example in JavaServlet
*/
import java.io.*;
import javax.servlet.*;
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;
public class imageServlet extends GenericServlet
{
public void service (ServletRequest request, ServletResponse response)
{
int image;
float width, height;
pdflib p = null;
String imagefile = "nesrin.jpg";
byte[] buf;
ServletOutputStream output;
int manual, page;
/* This is where font/image/PDF input files live. Adjust as necessary.*/
String searchpath = "../data";
try{
p = new pdflib();
// Generate a PDF in memory; insert a file name to create PDF on disk
if (p.open_file("") == -1) {
throw new Exception("Error: " + p.get_errmsg());
}
p.set_parameter("SearchPath", searchpath);
p.set_info("Creator", "imageServlet.java");
p.set_info("Author", "Rainer Ploeckl");
p.set_info("Title", "image sample (JavaServlet)");
if (request.getParameter("image") != null){
imagefile = request.getParameter("image") ;
}
image = p.load_image("auto", imagefile, "");
if (image == -1) {
throw new Exception("Error: " + p.get_errmsg());
}
/* dummy page size, will be adjusted by PDF_fit_image() */
p.begin_page(10, 10);
p.fit_image(image, (float) 0.0, (float) 0.0, "adjustpage");
p.close_image(image);
p.end_page();
p.close();
buf = p.get_buffer();
response.setContentType("application/pdf");
response.setContentLength(buf.length);
output = response.getOutputStream();
output.write(buf);
output.close();
} catch (PDFlibException e) {
System.err.print("PDFlib exception occurred in hello sample:\n");
System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() +
": " + e.getMessage() + "\n");
} catch (Exception e) {
System.err.println(e.getMessage());
} finally {
if (p != null) {
p.delete(); /* delete the PDFlib object */
}
}
}
}

View File

@ -0,0 +1,184 @@
/* $Id: invoiceServlet.java,v 1.1 2004/10/06 17:46:42 laplace Exp $
*
* PDFlib client: invoice servlet example in Java
*/
import java.io.*;
import java.text.*; // DateFormat
import java.util.*; // Date
import javax.servlet.*;
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;
public class invoiceServlet extends GenericServlet
{
public void service(ServletRequest request, ServletResponse response)
{
pdflib p = null ;
int i, form, page, regularfont, boldfont;
String infile = "stationery.pdf";
/* This is where font/image/PDF input files live. Adjust as necessary.*/
String searchpath = "../data";
final float col1 = 55;
final float col2 = 100;
final float col3 = 330;
final float col4 = 430;
final float col5 = 530;
float fontsize = 12, leading, y;
float sum, total;
float pagewidth = 595, pageheight = 842;
Date now = new Date();
DateFormat fulldate = DateFormat.getDateInstance(DateFormat.LONG);
byte[] buf;
ServletOutputStream out;
String closingtext =
"30 days warranty starting at the day of sale. " +
"This warranty covers defects in workmanship only. " +
"Kraxi Systems, Inc. will, at its option, repair or replace the " +
"product under the warranty. This warranty is not transferable. " +
"No returns or exchanges will be accepted for wet products.";
String[][] data = {
{ "Super Kite", "20", "2"},
{ "Turbo Flyer", "40", "5"},
{ "Giga Trash", "180", "1"},
{ "Bare Bone Kit", "50", "3"},
{ "Nitty Gritty", "20", "10"},
{ "Pretty Dark Flyer", "75", "1"},
{ "Free Gift", "0", "1"},
};
String[] months = {
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
};
try{
p = new pdflib();
// Generate a PDF in memory; insert a file name to create PDF on disk
if (p.open_file("") == -1) {
throw new Exception("Error: " + p.get_errmsg());
}
p.set_parameter("SearchPath", searchpath);
p.set_info("Creator", "invoiceServlet.java");
p.set_info("Author", "Rainer Ploeckl");
p.set_info("Title",
"PDFlib invoice generation demo (Java/Servlet)");
form = p.open_pdi(infile, "", 0);
if (form == -1) {
throw new Exception("Error: " + p.get_errmsg());
}
page = p.open_pdi_page(form, 1, "");
if (page == -1) {
throw new Exception("Error: " + p.get_errmsg());
}
boldfont = p.load_font("Helvetica-Bold", "winansi", "");
regularfont = p.load_font("Helvetica", "winansi", "");
leading = fontsize + 2;
// Establish coordinates with the origin in the upper left corner.
p.set_parameter("topdown", "true");
p.begin_page(pagewidth, pageheight); // A4 page
p.fit_pdi_page(page, 0, pageheight, "");
p.close_pdi_page(page);
p.setfont(regularfont, fontsize);
// Print the address
y = 170;
p.set_value("leading", leading);
p.show_xy("John Q. Doe", col1, y);
p.continue_text("255 Customer Lane");
p.continue_text("Suite B");
p.continue_text("12345 User Town");
p.continue_text("Everland");
// Print the header and date
p.setfont(boldfont, fontsize);
y = 300;
p.show_xy("INVOICE", col1, y);
p.fit_textline(fulldate.format(now), col5, y, "position {100 0}");
// Print the invoice header line
p.setfont(boldfont, fontsize);
// "position {0 0}" is left-aligned, "position {100 0}" right-aligned
y = 370;
p.fit_textline("ITEM", col1, y, "position {0 0}");
p.fit_textline("DESCRIPTION", col2, y, "position {0 0}");
p.fit_textline("QUANTITY", col3, y, "position {100 0}");
p.fit_textline("PRICE", col4, y, "position {100 0}");
p.fit_textline("AMOUNT", col5, y, "position {100 0}");
// Print the article list
p.setfont(regularfont, fontsize);
y += 2*leading;
total = 0;
for (i = 0; i < data.length; i++) {
p.show_xy(Integer.toString(i+1), col1, y);
p.show_xy(data[i][0], col2, y);
p.fit_textline(data[i][2], col3, y, "position {100 0}");
p.fit_textline(data[i][1], col4, y, "position {100 0}");
sum = 0;
sum = Integer.parseInt(data[i][2]) * Integer.parseInt(data[i][1]);
p.fit_textline(Float.toString(sum), col5, y, "position {100 0}");
y += leading;
total += sum;
}
y += leading;
p.setfont(boldfont, fontsize);
p.fit_textline(Float.toString(total), col5, y, "position {100 0}");
// Print the closing text
y += 5*leading;
p.setfont(regularfont, fontsize);
p.set_value("leading", leading);
p.show_boxed(closingtext,
col1, y + 4*leading, col5-col1, 4*leading, "justify", "");
p.end_page();
p.close();
p.close_pdi(form);
buf = p.get_buffer();
response.setContentType("application/pdf");
response.setContentLength(buf.length);
out = response.getOutputStream();
out.write(buf);
out.close();
} catch (PDFlibException e) {
System.err.print("PDFlib exception occurred in invoice sample:\n");
System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() +
": " + e.getMessage() + "\n");
} catch (Exception e) {
System.err.println(e.getMessage());
} finally {
if (p != null) {
p.delete(); /* delete the PDFlib object */
}
}
}
}

View File

@ -0,0 +1,134 @@
/* $Id: pdfclockServlet.java,v 1.1 2004/10/06 17:46:42 laplace Exp $
*
* PDFlib client: pdfclock example in Java
*/
import java.io.*;
import java.text.*; // SimpleDateFormat
import java.util.*; // Date
import javax.servlet.*;
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;
public class pdfclockServlet extends GenericServlet
{
public void service (ServletRequest request, ServletResponse response)
{
pdflib p = null;
int tm_hour, tm_min, tm_sec, alpha;
float RADIUS = 200.0f;
float MARGIN = 20.0f;
SimpleDateFormat format;
Date now = new Date();
try{
p = new pdflib();
byte[] buf;
ServletOutputStream out;
// Generate a PDF in memory; insert a file name to create PDF on disk
if (p.open_file("") == -1) {
throw new Exception("Error: " + p.get_errmsg());
}
p.set_info("Creator", "pdfclockServlet.java");
p.set_info("Author", "Thomas Merz");
p.set_info("Title", "PDF clock (Java/servlet)");
p.begin_page( (int) (2 * (RADIUS + MARGIN)),
(int) (2 * (RADIUS + MARGIN)));
p.translate(RADIUS + MARGIN, RADIUS + MARGIN);
p.setcolor("fillstroke", "rgb", 0.0f, 0.0f, 1.0f, 0.0f);
p.save();
// minute strokes
p.setlinewidth(2.0f);
for (alpha = 0; alpha < 360; alpha += 6)
{
p.rotate(6.0f);
p.moveto(RADIUS, 0.0f);
p.lineto(RADIUS-MARGIN/3, 0.0f);
p.stroke();
}
p.restore();
p.save();
// 5 minute strokes
p.setlinewidth(3.0f);
for (alpha = 0; alpha < 360; alpha += 30)
{
p.rotate(30.0f);
p.moveto(RADIUS, 0.0f);
p.lineto(RADIUS-MARGIN, 0.0f);
p.stroke();
}
format = new SimpleDateFormat("hh");
tm_hour= Integer.parseInt(format.format(now));
format = new SimpleDateFormat("mm");
tm_min = Integer.parseInt(format.format(now));
format = new SimpleDateFormat("ss");
tm_sec = Integer.parseInt(format.format(now));
// draw hour hand
p.save();
p.rotate((-((tm_min/60.0f) + tm_hour - 3.0f) * 30.0f));
p.moveto(-RADIUS/10, -RADIUS/20);
p.lineto(RADIUS/2, 0.0f);
p.lineto(-RADIUS/10, RADIUS/20);
p.closepath();
p.fill();
p.restore();
// draw minute hand
p.save();
p.rotate((-((tm_sec/60.0f) + tm_min - 15.0f) * 6.0f));
p.moveto(-RADIUS/10, -RADIUS/20);
p.lineto(RADIUS * 0.8f, 0.0f);
p.lineto(-RADIUS/10, RADIUS/20);
p.closepath();
p.fill();
p.restore();
// draw second hand
p.setcolor("fillstroke", "rgb", 1.0f, 0.0f, 0.0f, 0.0f);
p.setlinewidth(2);
p.save();
p.rotate(-((tm_sec - 15.0f) * 6.0f));
p.moveto(-RADIUS/5, 0.0f);
p.lineto(RADIUS, 0.0f);
p.stroke();
p.restore();
// draw little circle at center
p.circle(0f, 0f, RADIUS/30);
p.fill();
p.restore();
p.end_page();
p.close();
buf = p.get_buffer();
response.setContentType("application/pdf");
response.setContentLength(buf.length);
out = response.getOutputStream();
out.write(buf);
out.close();
} catch (PDFlibException e) {
System.err.print("PDFlib exception occurred in pdfclock sample:\n");
System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() +
": " + e.getMessage() + "\n");
} catch (Exception e) {
System.err.println(e.getMessage());
} finally {
if (p != null) {
p.delete(); /* delete the PDFlib object */
}
}
}
}

View File

@ -0,0 +1,108 @@
/* $Id: quickreferenceServlet.java,v 1.1 2004/10/06 17:46:42 laplace Exp $
*
* PDFlib/PDI client: mini imposition demo
*/
import java.io.*;
import javax.servlet.*;
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;
public class quickreferenceServlet extends GenericServlet
{
public void service (ServletRequest request, ServletResponse response)
{
int font, row = 0 , col = 0 , i;
int manual, pages;
final int maxrow=2, maxcol=2;
int startpage = 1, endpage = 4;
final float width = 500, height = 770;
int pageno;
String infile = "reference.pdf";
/* This is where font/image/PDF input files live. Adjust as necessary.*/
String searchpath = "../data";
byte[] buf;
ServletOutputStream output;
pdflib p = null;
try{
p = new pdflib();
// Generate a PDF in memory; insert a file name to create PDF on disk
if (p.open_file("") == -1) {
throw new Exception("Couldn't create PDF output.\n");
}
p.set_parameter("SearchPath", searchpath);
p.set_info("Creator", "quickreferenceServlet.java");
p.set_info("Author", "Rainer Ploeckl");
p.set_info("Title", "imposition demo (Java/Servlet)");
manual = p.open_pdi(infile, "", 0);
i = 0;
if (manual == -1){
throw new Exception("Error: " + p.get_errmsg());
}
p.set_parameter("topdown", "true");
for (pageno = startpage; pageno <= endpage; pageno++) {
if (row == 0 && col == 0) {
i++;
p.begin_page(width, height);
font = p.load_font("Helvetica-Bold", "winansi", "");
p.setfont(font, 18);
p.set_text_pos(24, 24);
p.show("PDFlib Quick Reference");
}
pages = p.open_pdi_page(manual, pageno, "");
if (pages == -1) {
throw new Exception("Error: " + p.get_errmsg());
}
p.fit_pdi_page(manual, width/maxcol*col,
(row + 1) * height/maxrow, "scale " + (float)1/maxrow);
p.close_pdi_page(pages);
col++;
if (col == maxcol) {
col = 0;
row++;
}
if (row == maxrow) {
row = 0;
p.end_page();
}
}
// finish the last partial page
if (row != 0 || col != 0)
p.end_page();
p.close();
p.close_pdi(manual);
buf = p.get_buffer();
response.setContentType("application/pdf");
response.setContentLength(buf.length);
output = response.getOutputStream();
output.write(buf);
output.close();
} catch (PDFlibException e) {
System.err.print("PDFlib exception occurred in quickreference sample:\n");
System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() +
": " + e.getMessage() + "\n");
} catch (Exception e) {
System.err.println(e.getMessage());
} finally {
if (p != null) {
p.delete(); /* delete the PDFlib object */
}
}
}
}

View File

@ -0,0 +1,48 @@
# Makefile for PDFlib's Perl binding
# $Id: Makefile,v 1.1 2004/10/06 17:46:42 laplace Exp $
top_builddir = ../../..
include $(top_builddir)/config/mkcommon.inc
INCLUDES = $(PDFLIBINC) $(PERLBOOLDEF) $(PERLINCLUDE)
# special CFLAGS, as -ansi is not working here.
CFLAGS = $(DEFS) $(DEFINES) $(INCLUDES)
PERLBIN = $(PERL) -I. -I.libs
LANG_LIBDIR = $(PERLLIBDIR)
BINDEXTERNALLIBS= $(PERLLINK)
LIBNAME = pdflib_pl$(LA)
OBJ = pdflib_pl$(LO)
SRC = pdflib_pl.c
include $(top_builddir)/config/mkbind.inc
test:: all
-$(PERLBIN) hello.pl
-$(PERLBIN) image.pl
-$(PERLBIN) pdfclock.pl
-$(PERLBIN) chartab.pl
-$(PERLBIN) invoice.pl
-$(PERLBIN) businesscard.pl
-$(PERLBIN) quickreference.pl
smoke:: test
-$(PERLBIN) smoketest.pl
install:: $(SWIG_LIB)
$(LIBTOOL) --mode=install \
$(INSTALL_DATA) $(SWIG_LIB) $(LANG_LIBDIR)
$(INSTALL_DATA) pdflib_pl.pm $(LANG_LIBDIR)
uninstall::
$(LIBTOOL) --mode=uninstall \
$(RM) $(LANG_LIBDIR)/$(SWIG_LIB) $(LANG_LIBDIR)/pdflib_pl.pm
clean::
$(RM) smoke_c_?.pdf
$(RM) hello.pdf image.pdf pdfclock.pdf chartab.pdf invoice.pdf
$(RM) businesscard.pdf quickreference.pdf
# Automatically generated dependencies

View File

@ -0,0 +1,140 @@
# Microsoft Developer Studio Project File - Name="Perl" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=Perl - Win32 perlAS56
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "Perl.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "Perl.mak" CFG="Perl - Win32 perlAS56"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "Perl - Win32 perlAS56" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "Perl - Win32 perlAS58" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "Perl - Win32 perl5005" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "Perl - Win32 perlAS56"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "perlAS56"
# PROP BASE Intermediate_Dir "perlAS56"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "perlAS56"
# PROP Intermediate_Dir "perlAS56"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O2 /I "c:\programme\Perl\lib\CORE" /I "c:\programme\Perl\lib\CORE\win32" /I "..\..\..\libs\pdflib" /D "WIN32" /D "_MT" /D "PDFLIB_STATIC" /FR /YX /FD /c
# ADD CPP /nologo /MT /W3 /O2 /I "c:\programme\Perl\lib\CORE" /I "c:\programme\Perl56\lib\CORE" /I "..\..\..\libs\pdflib" /D "WIN32" /D "_MT" /D "PDFLIB_STATIC" /FR /YX /FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib perl56.lib pdflib.lib /nologo /base:"0x55330000" /dll /pdb:none /machine:I386 /out:"perlAS56\pdflib_pl.dll" /libpath:"c:\programme\Perl\lib\CORE" /libpath:"..\..\..\libs\pdflib\Release"
# SUBTRACT BASE LINK32 /debug
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib perl56.lib pdflib.lib /nologo /base:"0x55330000" /dll /pdb:none /machine:I386 /out:"perlAS56\pdflib_pl.dll" /libpath:"c:\programme\Perl56\lib\CORE" /libpath:"c:\programme\Perl\lib\CORE" /libpath:"..\..\..\libs\pdflib\Release"
# SUBTRACT LINK32 /debug
!ELSEIF "$(CFG)" == "Perl - Win32 perlAS58"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "perlAS58"
# PROP BASE Intermediate_Dir "perlAS58"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "perlAS58"
# PROP Intermediate_Dir "perlAS58"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O2 /I "c:\programme\Perl\lib\CORE" /I "c:\programme\Perl\lib\CORE\win32" /I "..\..\..\libs\pdflib" /D "WIN32" /D "_MT" /D "PDFLIB_STATIC" /FR /YX /FD /c
# ADD CPP /nologo /MT /W3 /O2 /I "c:\programme\Perl58\lib\CORE" /I "c:\programme\Perl58\lib\CORE\win32" /I "..\..\..\libs\pdflib" /D "WIN32" /D "_MT" /D "PDFLIB_STATIC" /FR /YX /FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib perl56.lib pdflib.lib /nologo /base:"0x55330000" /dll /pdb:none /machine:I386 /out:"perlAS58\pdflib_pl.dll" /libpath:"c:\programme\Perl\lib\CORE" /libpath:"..\..\..\libs\pdflib\Release"
# SUBTRACT BASE LINK32 /debug
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib perl58.lib pdflib.lib /nologo /base:"0x55330000" /dll /pdb:none /machine:I386 /out:"perlAS58\pdflib_pl.dll" /libpath:"c:\programme\Perl58\lib\CORE" /libpath:"..\..\..\libs\pdflib\Release"
# SUBTRACT LINK32 /debug
!ELSEIF "$(CFG)" == "Perl - Win32 perl5005"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "perl5005"
# PROP BASE Intermediate_Dir "perl5005"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "perl5005"
# PROP Intermediate_Dir "perl5005"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O2 /I "c:\programme\Perl5.005\lib\CORE" /I "c:\programme\Perl5.005\lib\CORE\win32" /I "..\..\..\libs\pdflib" /D "WIN32" /D "_MT" /D "PDFLIB_STATIC" /D "PERL_OBJECT" /FR /YX /FD /c /Tp
# ADD CPP /nologo /MT /W3 /O2 /I "c:\programme\Perl5.005\lib\CORE" /I "c:\programme\Perl5.005\lib\CORE\win32" /I "..\..\..\libs\pdflib" /D "WIN32" /D "_MT" /D "PDFLIB_STATIC" /D "PERL_OBJECT" /FR /YX /FD /c /Tp
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib perlcore.lib /nologo /base:"0x55330000" /dll /pdb:none /machine:I386 /out:"perl5005\pdflib_pl.dll" /libpath:"c:\programme\Perl5.005\lib\CORE" /libpath:"..\..\..\libs\pdflib\Release"
# SUBTRACT BASE LINK32 /debug
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib pdflib.lib perlcore.lib /nologo /base:"0x55330000" /dll /pdb:none /machine:I386 /out:"perl5005\pdflib_pl.dll" /libpath:"c:\programme\Perl5.005\lib\CORE" /libpath:"..\..\..\libs\pdflib\Release"
# SUBTRACT LINK32 /debug
!ENDIF
# Begin Target
# Name "Perl - Win32 perlAS56"
# Name "Perl - Win32 perlAS58"
# Name "Perl - Win32 perl5005"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\pdflib_pl.c
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,82 @@
#!/usr/bin/perl
# $Id: businesscard.pl,v 1.1 2004/10/06 17:46:42 laplace Exp $
#
# PDFlib client: block processing example in C
#
use pdflib_pl 5.0;
$infile = "boilerplate.pdf";
# This is where font/image/PDF input files live. Adjust as necessary.
#
# Note that this directory must also contain the LuciduxSans font outline
# and metrics files.
#
$searchpath = "../data";
%data = ( "name" => "Victor Kraxi",
"business.title" => "Chief Paper Officer",
"business.address.line1" => "17, Aviation Road",
"business.address.city" => "Paperfield",
"business.telephone.voice" => "phone +1 234 567-89",
"business.telephone.fax" => "fax +1 234 567-98",
"business.email" => "victor\@kraxi.com",
"business.homepage" => "www.kraxi.com"
);
# create a new PDFlib object
$p = PDF_new();
eval {
# open new PDF file
if (PDF_open_file($p, "businesscard.pdf") == -1){
printf ("Error: %s\n", PDF_get_errmsg($p));
exit;
}
PDF_set_parameter($p, "SearchPath", $searchpath);
# This line is required to avoid problems on Japanese systems
PDF_set_parameter($p, "hypertextencoding", "winansi");
PDF_set_info($p, "Creator", "businesscard.pl");
PDF_set_info($p, "Author", "Thomas Merz");
PDF_set_info($p, "Title", "PDFlib block processing sample (Perl)");
$blockcontainer = PDF_open_pdi($p, $infile, "", 0);
if ($blockcontainer == -1){
printf ("Error: %s\n", PDF_get_errmsg($p));
exit;
}
$page = PDF_open_pdi_page($p, $blockcontainer, 1, "");
if ($page == -1){
printf ("Error: %s\n", PDF_get_errmsg($p));
exit;
}
PDF_begin_page($p, 20, 20); # dummy page size
# This will adjust the page size to the block container's size.
PDF_fit_pdi_page($p, $page, 0, 0, "adjustpage");
# Fill all text blocks with dynamic data
foreach $elem(keys %data){
if (PDF_fill_textblock($p, $page, $elem, $data{$elem},
"embedding encoding=winansi") == -1) {
printf ("Warning: %s\n", PDF_get_errmsg($p));
}
}
PDF_end_page($p); # close page
PDF_close_pdi_page($p, $page);
PDF_close($p); # close PDF document
PDF_close_pdi($p, $blockcontainer);
};
if ($@) {
printf("businesscard: PDFlib Exception occurred:\n");
printf(" $@\n");
exit;
}
PDF_delete($p); # delete the PDFlib object

View File

@ -0,0 +1,107 @@
#!/usr/bin/perl
# $Id: chartab.pl,v 1.1 2004/10/06 17:46:42 laplace Exp $
#
# PDFlib client: hello example in Perl
#
use pdflib_pl 5.0;
# change these as required
$fontname = "LuciduxSans-Oblique";
# This is where font/image/PDF input files live. Adjust as necessary.
$searchpath = "../data";
# list of encodings to use
@encodings = ( "iso8859-1", "iso8859-2", "iso8859-15" );
# whether or not to embed the font
$embed = 1;
use constant "FONTSIZE" => 16;
use constant "TOP" => 700;
use constant "LEFT" => 50;
use constant "YINCR" => 2*FONTSIZE;
use constant "XINCR" => 2*FONTSIZE;
# create a new PDFlib object
$p = PDF_new();
eval {
# open new PDF file
if (PDF_open_file($p, "chartab.pdf") == 0) {
printf("Error: %s\n", PDF_get_errmsg($p));
exit;
}
PDF_set_parameter($p, "openaction", "fitpage");
PDF_set_parameter($p, "fontwarning", "true");
PDF_set_parameter($p, "SearchPath", $searchpath);
# This line is required to avoid problems on Japanese systems
PDF_set_parameter($p, "hypertextencoding", "winansi");
PDF_set_info($p, "Creator", "chartab.pl");
PDF_set_info($p, "Author", "Thomas Merz");
PDF_set_info($p, "Title", "Character table (Perl)");
# loop over all encodings
for ($page = 0; $page <= $#encodings; $page++)
{
PDF_begin_page($p, 595, 842); # start a new page
# print the heading and generate the bookmark
$font = PDF_load_font($p, "Helvetica", "winansi", "");
PDF_setfont($p, $font, FONTSIZE);
$buf = sprintf("%s (%s) %sembedded",
$fontname, $encodings[$page], $embed ? "" : "not ");
PDF_show_xy($p, $buf, LEFT - XINCR, TOP + 3 * YINCR);
PDF_add_bookmark($p, $buf, 0, 0);
# print the row and column captions
PDF_setfont($p, $font, 2 * FONTSIZE/3);
for ($row = 0; $row < 16; $row++)
{
$buf = sprintf("x%X", $row);
PDF_show_xy($p, $buf, LEFT + $row*XINCR, TOP + YINCR);
$buf = sprintf("%Xx", $row);
PDF_show_xy($p, $buf, LEFT - XINCR, TOP - $row * YINCR);
}
# print the character table
$font = PDF_load_font($p, $fontname, $encodings[$page],
$embed ? "embedding": "");
PDF_setfont($p, $font, FONTSIZE);
$y = TOP;
$x = LEFT;
for ($row = 0; $row < 16; $row++)
{
for ($col = 0; $col < 16; $col++) {
$buf = sprintf("%c", 16*$row + $col);
PDF_show_xy($p, $buf, $x, $y);
$x += XINCR;
}
$x = LEFT;
$y -= YINCR;
}
PDF_end_page($p); # close page
}
PDF_close($p); # close PDF document
};
if ($@) {
printf("chartab: PDFlib Exception occurred:\n");
printf(" $@\n");
exit;
}
PDF_delete($p); # delete the PDFlib object

View File

@ -0,0 +1,45 @@
#!/usr/bin/perl
# $Id: hello.pl,v 1.1 2004/10/06 17:46:42 laplace Exp $
#
# PDFlib client: hello example in Perl
#
use pdflib_pl 5.0;
# create a new PDFlib object
$p = PDF_new();
eval {
# open new PDF file
if (PDF_open_file($p, "hello.pdf") == -1) {
printf("Error: %s\n", PDF_get_errmsg($p));
exit;
}
# This line is required to avoid problems on Japanese systems
PDF_set_parameter($p, "hypertextencoding", "winansi");
PDF_set_info($p, "Creator", "hello.pl");
PDF_set_info($p, "Author", "Thomas Merz");
PDF_set_info($p, "Title", "Hello world (Perl)!");
PDF_begin_page($p, 595, 842); # start a new page
$font = PDF_load_font($p, "Helvetica-Bold", "winansi", "");
PDF_setfont($p, $font, 24.0);
PDF_set_text_pos($p, 50, 700);
PDF_show($p, "Hello world!");
PDF_continue_text($p, "(says Perl)");
PDF_end_page($p); # close page
PDF_close($p); # close PDF document
};
if ($@) {
printf("hello: PDFlib Exception occurred:\n");
printf(" $@\n");
exit;
}
PDF_delete($p); # delete the PDFlib object

View File

@ -0,0 +1,48 @@
#!/usr/bin/perl
# $Id: image.pl,v 1.1 2004/10/06 17:46:42 laplace Exp $
#
# PDFlib client: image example in Perl
#
use pdflib_pl 5.0;
# This is where font/image/PDF input files live. Adjust as necessary.
$searchpath = "../data";
$imagefile = "nesrin.jpg";
$p = PDF_new();
eval {
if (PDF_open_file($p, "image.pdf") == -1){
printf("Error: %s\n", PDF_get_errmsg($p));
exit;
}
PDF_set_parameter($p, "SearchPath", $searchpath);
# This line is required to avoid problems on Japanese systems
PDF_set_parameter($p, "hypertextencoding", "winansi");
PDF_set_info($p, "Creator", "image.pl");
PDF_set_info($p, "Author", "Thomas Merz");
PDF_set_info($p, "Title", "image sample (Perl)");
$image = PDF_load_image($p, "auto", $imagefile, "");
die "Couldn't open image '$imagefile'" if ($image == -1);
# dummy page size, will be adjusted by PDF_fit_image()
PDF_begin_page($p, 10, 10);
PDF_fit_image($p, $image, 0, 0, "adjustpage");
PDF_close_image($p, $image);
PDF_end_page($p); # close page
PDF_close($p); # close PDF document
};
if ($@) {
printf("image: PDFlib Exception occurred:\n");
printf(" $@\n");
exit;
}
PDF_delete($p); # delete the PDFlib object

View File

@ -0,0 +1,156 @@
#!/usr/bin/perl
# $Id: invoice.pl,v 1.1 2004/10/06 17:46:42 laplace Exp $
#
# PDFlib client: invoice generation demo
#
use pdflib_pl 5.0;
$col1 = 55;
$col2 = 100;
$col3 = 330;
$col4 = 430;
$col5 = 530;
$fontsize = 12;
$pagewidth = 595;
$pageheight = 842;
$fontsize = 12;
$infile = "stationery.pdf";
# This is where font/image/PDF input files live. Adjust as necessary.
$searchpath = "../data";
$closingtext =
"30 days warranty starting at the day of sale. " .
"This warranty covers defects in workmanship only. " .
"Kraxi Systems, Inc. will, at its option, repair or replace the " .
"product under the warranty. This warranty is not transferable. " .
"No returns or exchanges will be accepted for wet products.";
@data = ( {name=>"Super Kite", price=>20, quantity=>2},
{name=>"Turbo Flyer", price=>40, quantity=>5},
{name=>"Giga Trasch", price=>180, quantity=>1},
{name=>"Bare Bone Kit", price=>50, quantity=>3},
{name=>"Nitty Gritty", price=>20, quantity=>10},
{name=>"Pretty Dark Flyer", price=>75, quantity=>1},
{name=>"Free Gift", price=>0, quantity=>1}
);
@months = ( "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December");
# create a new PDFlib object
$p = PDF_new();
eval {
# open new PDF file
if (PDF_open_file($p, "invoice.pdf") == -1){
printf("Error: %s\n", PDF_get_errmsg($p));
exit;
}
PDF_set_parameter($p, "SearchPath", $searchpath);
# This line is required to avoid problems on Japanese systems
PDF_set_parameter($p, "hypertextencoding", "winansi");
PDF_set_info($p, "Creator", "invoice.pl");
PDF_set_info($p, "Author", "Thomas Merz");
PDF_set_info($p, "Title", "PDFlib invoice generation demo (Perl)");
$form = PDF_open_pdi($p, $infile, "", 0);
if ($form == -1){
printf("Error: %s\n", PDF_get_errmsg($p));
exit;
}
$page = PDF_open_pdi_page($p, $form, 1, "");
if ($page == -1){
printf("Error: %s\n", PDF_get_errmsg($p));
exit;
}
$boldfont = PDF_load_font($p, "Helvetica-Bold", "winansi", "");
$regularfont = PDF_load_font($p, "Helvetica", "winansi", "");
$leading = $fontsize + 2;
# Establish coordinates with the origin in the upper left corner.
PDF_set_parameter($p, "topdown", "true");
PDF_begin_page($p, $pagewidth, $pageheight); # A4 page
PDF_fit_pdi_page($p, $page, 0, $pageheight, "");
PDF_close_pdi_page($p, $page);
PDF_setfont($p, $regularfont, $fontsize);
# print the address
$y = 170;
PDF_set_value($p, "leading", $leading);
PDF_show_xy($p, "John Q. Doe", $col1, $y);
PDF_continue_text($p, "255 Customer Lane");
PDF_continue_text($p, "Suite B");
PDF_continue_text($p, "12345 User Town");
PDF_continue_text($p, "Everland");
# print the header and date
PDF_setfont($p, $boldfont, $fontsize);
$y = 300;
PDF_show_xy($p, "INVOICE", $col1, $y);
$buf = sprintf("%s %d, %d", $months[(localtime)[4]], (localtime)[3],
(localtime)[5]+1900);
PDF_fit_textline($p, $buf, $col5, $y, "position {100 0}");
# print the invoice header line
PDF_setfont($p, $boldfont, $fontsize);
# "position {0 0}" is left-aligned, "position {100 0}" right-aligned
$y = 370;
PDF_fit_textline($p, "ITEM", $col1, $y, "position {0 0}");
PDF_fit_textline($p, "DESCRIPTION", $col2, $y, "position {0 0}");
PDF_fit_textline($p, "QUANTITY", $col3, $y, "position {100 0}");
PDF_fit_textline($p, "PRICE", $col4, $y, "position {100 0}");
PDF_fit_textline($p, "AMOUNT", $col5, $y, "position {100 0}");
PDF_setfont($p, $regularfont, $fontsize);
$y += 2*$leading;
$total = 0;
for ($i = 0; $i <= $#data; $i++){
PDF_show_xy($p, $i+1, $col1, $y);
PDF_show_xy($p, $data[$i]{name}, $col2, $y);
PDF_fit_textline($p, $data[$i]{quantity}, $col3, $y, "position {100 0}");
PDF_fit_textline($p, $data[$i]{price}, $col4, $y, "position {100 0}");
$sum = $data[$i]{price}*$data[$i]{quantity};
$buf = sprintf("%.2f", $sum);
PDF_fit_textline($p, $buf, $col5, $y, "position {100 0}");
$y += $leading;
$total +=$sum;
}
$y += $leading;
PDF_setfont($p, $boldfont, $fontsize);
PDF_fit_textline($p,sprintf("%.2f",$total), $col5, $y, "position {100 0}");
# Print the closing text
$y +=5*$leading;
PDF_setfont($p, $regularfont, $fontsize);
PDF_set_value($p, "leading", $leading);
PDF_show_boxed($p, $closingtext,
$col1, $y + 4*$leading, $col5-$col1, 4*$leading, "justify", "");
PDF_end_page($p);
PDF_close($p);
PDF_close_pdi($p, $form);
};
if ($@) {
printf("invoice: PDFlib Exception occurred:\n");
printf(" $@\n");
exit;
}
PDF_delete($p);

View File

@ -0,0 +1,103 @@
#!/usr/bin/perl
# $Id: pdfclock.cgi.pl,v 1.1 2004/10/06 17:46:42 laplace Exp $
#
# PDFlib client: pdfclock CGI example in Perl
#
use pdflib_pl 5.0;
$RADIUS = 200.0;
$MARGIN = 20.0;
$p = PDF_new();
PDF_open_file($p, "");
# This line is required to avoid problems on Japanese systems
PDF_set_parameter($p, "hypertextencoding", "winansi");
PDF_set_info($p, "Creator", "pdfclock.cgi.pl");
PDF_set_info($p, "Author", "Thomas Merz");
PDF_set_info($p, "Title", "PDF clock (Perl/CGI)");
PDF_begin_page($p, 2 * ($RADIUS + $MARGIN), 2 * ($RADIUS + $MARGIN));
PDF_translate($p, $RADIUS + $MARGIN, $RADIUS + $MARGIN);
PDF_setcolor($p, "fillstroke", "rgb", 0.0, 0.0, 1.0, 0.0);
PDF_save($p);
# minute strokes
PDF_setlinewidth($p, 2.0);
for ($alpha = 0; $alpha < 360; $alpha += 6)
{
PDF_rotate($p, 6.0);
PDF_moveto($p, $RADIUS, 0.0);
PDF_lineto($p, $RADIUS-$MARGIN/3, 0.0);
PDF_stroke($p);
}
PDF_restore($p);
PDF_save($p);
# 5 minute strokes
PDF_setlinewidth($p, 3.0);
for ($alpha = 0; $alpha < 360; $alpha += 30)
{
PDF_rotate($p, 30.0);
PDF_moveto($p, $RADIUS, 0.0);
PDF_lineto($p, $RADIUS-$MARGIN, 0.0);
PDF_stroke($p);
}
($tm_sec,$tm_min,$tm_hour) = localtime(time);
# draw hour hand
PDF_save($p);
PDF_rotate($p, (-(($tm_min/60.0) + $tm_hour - 3.0) * 30.0));
PDF_moveto($p, -$RADIUS/10, -$RADIUS/20);
PDF_lineto($p, $RADIUS/2, 0.0);
PDF_lineto($p, -$RADIUS/10, $RADIUS/20);
PDF_closepath($p);
PDF_fill($p);
PDF_restore($p);
# draw minute hand
PDF_save($p);
PDF_rotate($p, (-(($tm_sec/60.0) + $tm_min - 15.0) * 6.0));
PDF_moveto($p, -$RADIUS/10, -$RADIUS/20);
PDF_lineto($p, $RADIUS * 0.8, 0.0);
PDF_lineto($p, -$RADIUS/10, $RADIUS/20);
PDF_closepath($p);
PDF_fill($p);
PDF_restore($p);
# draw second hand
PDF_setcolor($p, "fillstroke", "rgb", 1.0, 0.0, 0.0, 0.0);
PDF_setlinewidth($p, 2);
PDF_save($p);
PDF_rotate($p, -(($tm_sec - 15.0) * 6.0));
PDF_moveto($p, -$RADIUS/5, 0.0);
PDF_lineto($p, $RADIUS, 0.0);
PDF_stroke($p);
PDF_restore($p);
# draw little circle at center
PDF_circle($p, 0, 0, $RADIUS/30);
PDF_fill($p);
PDF_restore($p);
PDF_end_page($p);
PDF_close($p);
$buf = PDF_get_buffer($p);
# the following is required on Windows systems
binmode(STDOUT);
print "Content-Type: application/pdf\n";
print "Content-Length: " . length($buf) . "\n";
print "Content-Disposition: inline; filename=" . "pdfclock.cgi.pl.pdf" . "\n\n";
print $buf;
PDF_delete($p);

View File

@ -0,0 +1,103 @@
#!/usr/bin/perl
# $Id: pdfclock.pl,v 1.1 2004/10/06 17:46:42 laplace Exp $
#
# PDFlib client: pdfclock example in Perl
#
use pdflib_pl 5.0;
$RADIUS = 200.0;
$MARGIN = 20.0;
$p = PDF_new();
eval{
if (PDF_open_file($p, "pdfclock.pdf") == -1){
printf("Error: %s\n", PDF_get_errmsg($p));
exit;
}
# This line is required to avoid problems on Japanese systems
PDF_set_parameter($p, "hypertextencoding", "winansi");
PDF_set_info($p, "Creator", "pdfclock.pl");
PDF_set_info($p, "Author", "Thomas Merz");
PDF_set_info($p, "Title", "PDF clock (Perl)");
PDF_begin_page($p, 2 * ($RADIUS + $MARGIN), 2 * ($RADIUS + $MARGIN));
PDF_translate($p, $RADIUS + $MARGIN, $RADIUS + $MARGIN);
PDF_setcolor($p, "fillstroke", "rgb", 0.0, 0.0, 1.0, 0.0);
PDF_save($p);
# minute strokes
PDF_setlinewidth($p, 2.0);
for ($alpha = 0; $alpha < 360; $alpha += 6)
{
PDF_rotate($p, 6.0);
PDF_moveto($p, $RADIUS, 0.0);
PDF_lineto($p, $RADIUS-$MARGIN/3, 0.0);
PDF_stroke($p);
}
PDF_restore($p);
PDF_save($p);
# 5 minute strokes
PDF_setlinewidth($p, 3.0);
for ($alpha = 0; $alpha < 360; $alpha += 30)
{
PDF_rotate($p, 30.0);
PDF_moveto($p, $RADIUS, 0.0);
PDF_lineto($p, $RADIUS-$MARGIN, 0.0);
PDF_stroke($p);
}
($tm_sec,$tm_min,$tm_hour) = localtime(time);
# draw hour hand
PDF_save($p);
PDF_rotate($p, (-(($tm_min/60.0) + $tm_hour - 3.0) * 30.0));
PDF_moveto($p, -$RADIUS/10, -$RADIUS/20);
PDF_lineto($p, $RADIUS/2, 0.0);
PDF_lineto($p, -$RADIUS/10, $RADIUS/20);
PDF_closepath($p);
PDF_fill($p);
PDF_restore($p);
# draw minute hand
PDF_save($p);
PDF_rotate($p, (-(($tm_sec/60.0) + $tm_min - 15.0) * 6.0));
PDF_moveto($p, -$RADIUS/10, -$RADIUS/20);
PDF_lineto($p, $RADIUS * 0.8, 0.0);
PDF_lineto($p, -$RADIUS/10, $RADIUS/20);
PDF_closepath($p);
PDF_fill($p);
PDF_restore($p);
# draw second hand
PDF_setcolor($p, "fillstroke", "rgb", 1.0, 0.0, 0.0, 0.0);
PDF_setlinewidth($p, 2);
PDF_save($p);
PDF_rotate($p, -(($tm_sec - 15.0) * 6.0));
PDF_moveto($p, -$RADIUS/5, 0.0);
PDF_lineto($p, $RADIUS, 0.0);
PDF_stroke($p);
PDF_restore($p);
# draw little circle at center
PDF_circle($p, 0, 0, $RADIUS/30);
PDF_fill($p);
PDF_restore($p);
PDF_end_page($p);
PDF_close($p);
};
if ($@) {
printf("pdfclock: PDFlib Exception occurred:\n");
printf(" $@\n");
exit;
}
PDF_delete($p); # delete the PDFlib object

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,174 @@
# $Id: pdflib_pl.pm,v 1.1 2004/10/06 17:46:42 laplace Exp $
package pdflib_pl;
require Exporter;
require DynaLoader;
$VERSION=5.0;
@ISA = qw(Exporter DynaLoader);
package pdflibc;
bootstrap pdflib_pl;
var_pdflib_init();
@EXPORT = qw( );
# ---------- BASE METHODS -------------
package pdflib_pl;
sub TIEHASH {
my ($classname,$obj) = @_;
return bless $obj, $classname;
}
sub CLEAR { }
sub this {
my $ptr = shift;
return tied(%$ptr);
}
# ------- FUNCTION WRAPPERS --------
package pdflib_pl;
# p_annots.c
*PDF_add_launchlink = *pdflibc::PDF_add_launchlink;
*PDF_add_locallink = *pdflibc::PDF_add_locallink;
*PDF_add_note = *pdflibc::PDF_add_note;
*PDF_add_pdflink = *pdflibc::PDF_add_pdflink;
*PDF_add_weblink = *pdflibc::PDF_add_weblink;
*PDF_attach_file = *pdflibc::PDF_attach_file;
*PDF_set_border_color = *pdflibc::PDF_set_border_color;
*PDF_set_border_dash = *pdflibc::PDF_set_border_dash;
*PDF_set_border_style = *pdflibc::PDF_set_border_style;
# p_basic.c
*PDF_begin_page = *pdflibc::PDF_begin_page;
*PDF_close = *pdflibc::PDF_close;
*PDF_delete = *pdflibc::PDF_delete;
*PDF_end_page = *pdflibc::PDF_end_page;
*PDF_get_apiname = *pdflibc::PDF_get_apiname;
*PDF_get_buffer = *pdflibc::PDF_get_buffer;
*PDF_get_errmsg = *pdflibc::PDF_get_errmsg;
*PDF_get_errnum = *pdflibc::PDF_get_errnum;
*PDF_new = *pdflibc::PDF_new;
*PDF_open_file = *pdflibc::PDF_open_file;
# p_block.c
*PDF_fill_imageblock = *pdflibc::PDF_fill_imageblock;
*PDF_fill_pdfblock = *pdflibc::PDF_fill_pdfblock;
*PDF_fill_textblock = *pdflibc::PDF_fill_textblock;
# p_color.c
*PDF_makespotcolor = *pdflibc::PDF_makespotcolor;
*PDF_setcolor = *pdflibc::PDF_setcolor;
*PDF_setgray = *pdflibc::PDF_setgray;
*PDF_setgray_fill = *pdflibc::PDF_setgray_fill;
*PDF_setgray_stroke = *pdflibc::PDF_setgray_stroke;
*PDF_setrgbcolor = *pdflibc::PDF_setrgbcolor;
*PDF_setrgbcolor_fill = *pdflibc::PDF_setrgbcolor_fill;
*PDF_setrgbcolor_stroke = *pdflibc::PDF_setrgbcolor_stroke;
# p_draw.c
*PDF_arc = *pdflibc::PDF_arc;
*PDF_arcn = *pdflibc::PDF_arcn;
*PDF_circle = *pdflibc::PDF_circle;
*PDF_clip = *pdflibc::PDF_clip;
*PDF_closepath = *pdflibc::PDF_closepath;
*PDF_closepath_fill_stroke = *pdflibc::PDF_closepath_fill_stroke;
*PDF_closepath_stroke = *pdflibc::PDF_closepath_stroke;
*PDF_curveto = *pdflibc::PDF_curveto;
*PDF_endpath = *pdflibc::PDF_endpath;
*PDF_fill = *pdflibc::PDF_fill;
*PDF_fill_stroke = *pdflibc::PDF_fill_stroke;
*PDF_lineto = *pdflibc::PDF_lineto;
*PDF_moveto = *pdflibc::PDF_moveto;
*PDF_rect = *pdflibc::PDF_rect;
*PDF_stroke = *pdflibc::PDF_stroke;
# p_encoding.c
*PDF_encoding_set_char = *pdflibc::PDF_encoding_set_char;
# p_font.c
*PDF_findfont = *pdflibc::PDF_findfont;
*PDF_load_font = *pdflibc::PDF_load_font;
*PDF_setfont = *pdflibc::PDF_setfont;
# p_gstate.c
*PDF_concat = *pdflibc::PDF_concat;
*PDF_initgraphics = *pdflibc::PDF_initgraphics;
*PDF_restore = *pdflibc::PDF_restore;
*PDF_rotate = *pdflibc::PDF_rotate;
*PDF_save = *pdflibc::PDF_save;
*PDF_scale = *pdflibc::PDF_scale;
*PDF_setdash = *pdflibc::PDF_setdash;
*PDF_setdashpattern = *pdflibc::PDF_setdashpattern;
*PDF_setflat = *pdflibc::PDF_setflat;
*PDF_setlinecap = *pdflibc::PDF_setlinecap;
*PDF_setlinejoin = *pdflibc::PDF_setlinejoin;
*PDF_setlinewidth = *pdflibc::PDF_setlinewidth;
*PDF_setmatrix = *pdflibc::PDF_setmatrix;
*PDF_setmiterlimit = *pdflibc::PDF_setmiterlimit;
*PDF_setpolydash = *pdflibc::PDF_setpolydash;
*PDF_skew = *pdflibc::PDF_skew;
*PDF_translate = *pdflibc::PDF_translate;
# p_hyper.c
*PDF_add_bookmark = *pdflibc::PDF_add_bookmark;
*PDF_add_nameddest = *pdflibc::PDF_add_nameddest;
*PDF_set_info = *pdflibc::PDF_set_info;
# p_icc.c
*PDF_load_iccprofile = *pdflibc::PDF_load_iccprofile;
# p_image.c
*PDF_add_thumbnail = *pdflibc::PDF_add_thumbnail;
*PDF_close_image = *pdflibc::PDF_close_image;
*PDF_fit_image = *pdflibc::PDF_fit_image;
*PDF_load_image = *pdflibc::PDF_load_image;
*PDF_open_CCITT = *pdflibc::PDF_open_CCITT;
*PDF_open_image = *pdflibc::PDF_open_image;
*PDF_open_image_file = *pdflibc::PDF_open_image_file;
*PDF_place_image = *pdflibc::PDF_place_image;
# p_parmas.c
*PDF_get_parameter = *pdflibc::PDF_get_parameter;
*PDF_get_value = *pdflibc::PDF_get_value;
*PDF_set_parameter = *pdflibc::PDF_set_parameter;
*PDF_set_value = *pdflibc::PDF_set_value;
# p_pattern.c
*PDF_begin_pattern = *pdflibc::PDF_begin_pattern;
*PDF_end_pattern = *pdflibc::PDF_end_pattern;
# p_pdi.c
*PDF_close_pdi = *pdflibc::PDF_close_pdi;
*PDF_close_pdi_page = *pdflibc::PDF_close_pdi_page;
*PDF_fit_pdi_page = *pdflibc::PDF_fit_pdi_page;
*PDF_get_pdi_parameter = *pdflibc::PDF_get_pdi_parameter;
*PDF_get_pdi_value = *pdflibc::PDF_get_pdi_value;
*PDF_open_pdi = *pdflibc::PDF_open_pdi;
*PDF_open_pdi_page = *pdflibc::PDF_open_pdi_page;
*PDF_place_pdi_page = *pdflibc::PDF_place_pdi_page;
*PDF_process_pdi = *pdflibc::PDF_process_pdi;
# p_resource.c
*PDF_create_pvf = *pdflibc::PDF_create_pvf;
*PDF_delete_pvf = *pdflibc::PDF_delete_pvf;
# p_shading.c
*PDF_shading = *pdflibc::PDF_shading;
*PDF_shading_pattern = *pdflibc::PDF_shading_pattern;
*PDF_shfill = *pdflibc::PDF_shfill;
# p_template.c
*PDF_begin_template = *pdflibc::PDF_begin_template;
*PDF_end_template = *pdflibc::PDF_end_template;
# p_text.c
*PDF_continue_text = *pdflibc::PDF_continue_text;
*PDF_fit_textline = *pdflibc::PDF_fit_textline;
*PDF_set_text_pos = *pdflibc::PDF_set_text_pos;
*PDF_show = *pdflibc::PDF_show;
*PDF_show_boxed = *pdflibc::PDF_show_boxed;
*PDF_show_xy = *pdflibc::PDF_show_xy;
*PDF_stringwidth = *pdflibc::PDF_stringwidth;
# p_type3.c
*PDF_begin_font = *pdflibc::PDF_begin_font;
*PDF_begin_glyph = *pdflibc::PDF_begin_glyph;
*PDF_end_font = *pdflibc::PDF_end_font;
*PDF_end_glyph = *pdflibc::PDF_end_glyph;
# p_xgstate.c
*PDF_create_gstate = *pdflibc::PDF_create_gstate;
*PDF_set_gstate = *pdflibc::PDF_set_gstate;
@EXPORT = qw( PDF_add_launchlink PDF_add_locallink PDF_add_note PDF_add_pdflink PDF_add_weblink PDF_attach_file PDF_set_border_color PDF_set_border_dash PDF_set_border_style PDF_begin_page PDF_close PDF_delete PDF_end_page PDF_get_apiname PDF_get_buffer PDF_get_errmsg PDF_get_errnum PDF_new PDF_open_file PDF_fill_imageblock PDF_fill_pdfblock PDF_fill_textblock PDF_makespotcolor PDF_setcolor PDF_setgray PDF_setgray_fill PDF_setgray_stroke PDF_setrgbcolor PDF_setrgbcolor_fill PDF_setrgbcolor_stroke PDF_arc PDF_arcn PDF_circle PDF_clip PDF_closepath PDF_closepath_fill_stroke PDF_closepath_stroke PDF_curveto PDF_endpath PDF_fill PDF_fill_stroke PDF_lineto PDF_moveto PDF_rect PDF_stroke PDF_encoding_set_char PDF_findfont PDF_load_font PDF_setfont PDF_concat PDF_initgraphics PDF_restore PDF_rotate PDF_save PDF_scale PDF_setdash PDF_setdashpattern PDF_setflat PDF_setlinecap PDF_setlinejoin PDF_setlinewidth PDF_setmatrix PDF_setmiterlimit PDF_setpolydash PDF_skew PDF_translate PDF_add_bookmark PDF_add_nameddest PDF_set_info PDF_load_iccprofile PDF_add_thumbnail PDF_close_image PDF_fit_image PDF_load_image PDF_open_CCITT PDF_open_image PDF_open_image_file PDF_place_image PDF_get_parameter PDF_get_value PDF_set_parameter PDF_set_value PDF_begin_pattern PDF_end_pattern PDF_close_pdi PDF_close_pdi_page PDF_fit_pdi_page PDF_get_pdi_parameter PDF_get_pdi_value PDF_open_pdi PDF_open_pdi_page PDF_place_pdi_page PDF_process_pdi PDF_create_pvf PDF_delete_pvf PDF_shading PDF_shading_pattern PDF_shfill PDF_begin_template PDF_end_template PDF_continue_text PDF_fit_textline PDF_set_text_pos PDF_show PDF_show_boxed PDF_show_xy PDF_stringwidth PDF_begin_font PDF_begin_glyph PDF_end_font PDF_end_glyph PDF_create_gstate PDF_set_gstate );
# ------- VARIABLE STUBS --------
package pdflib_pl;
1;

View File

@ -0,0 +1,92 @@
#!/usr/bin/perl
# $Id: quickreference.pl,v 1.1 2004/10/06 17:46:42 laplace Exp $
#
# PDFlib/PDI client: mini imposition demo
#
use pdflib_pl 5.0;
$infile = "reference.pdf";
# This is where font/image/PDF input files live. Adjust as necessary.
$searchpath = "../data";
$maxrow = 2;
$maxcol = 2;
$pagecount = 4;
$width = 500.0;
$height = 770.0;
$startpage = 1;
$endpage = 4;
$p = PDF_new();
eval{
if (PDF_open_file($p, "quickreference.pdf") == -1) {
printf("Error: %s\n", PDF_get_errmsg($p));
exit;
}
PDF_set_parameter($p, "SearchPath", $searchpath);
# This line is required to avoid problems on Japanese systems
PDF_set_parameter($p, "hypertextencoding", "winansi");
PDF_set_info($p, "Creator", "quickreference.pl");
PDF_set_info($p, "Author", "Thomas Merz");
PDF_set_info($p, "Title", "mini imposition demo (Perl)");
$manual = PDF_open_pdi($p, $infile, "", 0);
if ($manual == -1) {
printf("Error: %s\n", PDF_get_errmsg($p));
exit;
}
$row = 0;
$col = 0;
PDF_set_parameter($p, "topdown", "true");
for ($pageno = $startpage; $pageno <= $endpage; $pageno++) {
if ($row == 0 && $col == 0) {
PDF_begin_page($p, $width, $height);
$font = PDF_load_font($p, "Helvetica-Bold", "winansi", "");
PDF_setfont($p, $font, 18);
PDF_set_text_pos($p, 24, 24);
PDF_show($p, "PDFlib Quick Reference");
}
$page = PDF_open_pdi_page($p, $manual, $pageno, "");
if ($page == -1) {
printf("Error: %s\n", PDF_get_errmsg($p));
exit;
}
PDF_fit_pdi_page($p, $page,
$width/$maxcol*$col, ($row + 1) * $height/$maxrow, "scale ". 1/$maxrow);
PDF_close_pdi_page($p, $page);
$col++;
if ($col == $maxcol) {
$col = 0;
$row++;
}
if ($row == $maxrow) {
$row = 0;
PDF_end_page($p);
}
}
# finish the last partial page
if ($row != 0 || $col != 0) {
PDF_end_page($p);
}
PDF_close($p);
PDF_close_pdi($p, $manual);
};
if ($@) {
printf("quickreference: PDFlib Exception occurred:\n");
printf(" $@\n");
exit;
}
PDF_delete($p);

View File

@ -0,0 +1,27 @@
ActivePerl versions
===================
- ActivePerl 5.6 is _not_ binary compatible to older versions of ActivePerl
with respect to extensions. For this reason the same PDFlib DLL can _not_
be used with ActivePerl 5.6 and older versions. The "oldperl" directory
of the PDFlib binary distribution for Windows contains a PDFlib DLL for
ActivePerl versions before 5.6.
Compiling PDFlib for ActivePerl on Win32
========================================
(not relevant for users of the binary distribution)
The distribution is set up to be compiled with ActivePerl 5.6.
With some minor modification you can also compile with ActivePerl
versions older than 5.6 (the MSVC project contains an "oldperl" configuration
with all of this):
- Run the compiler in C++ mode (required by ActiveState). In MSVC++ 6 there
doesn't seem to be a GUI option for C++ mode, but the compiler switch
/Tp works.
- Change the Perl include and lib paths appropriately.
- Change perl56.lib to perlcore.lib.

View File

@ -0,0 +1,81 @@
<?php
/* $Id: businesscard.php,v 1.1 2004/10/06 17:46:43 laplace Exp $
* PDFlib client: businesscard example in PHP
*
*/
$infile = "boilerplate.pdf";
/* This is where font/image/PDF input files live. Adjust as necessary.
*
* Note that this directory must also contain the LuciduxSans font outline
* and metrics files.
*/
$searchpath = "../data";
$data = array( "name" => "Victor Kraxi",
"business.title" => "Chief Paper Officer",
"business.address.line1" => "17, Aviation Road",
"business.address.city" => "Paperfield",
"business.telephone.voice" => "phone +1 234 567-89",
"business.telephone.fax" => "fax +1 234 567-98",
"business.email" => "victor@kraxi.com",
"business.homepage" => "www.kraxi.com"
);
$p = PDF_new();
/* open new PDF file; insert a file name to create the PDF on disk */
if (PDF_open_file($p, "") == 0) {
die("Error: " . PDF_get_errmsg($p));
}
PDF_set_parameter($p, "SearchPath", $searchpath);
/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter($p, "hypertextencoding", "winansi");
PDF_set_info($p, "Creator", "businesscard.php");
PDF_set_info($p, "Author", "Thomas Merz");
PDF_set_info($p, "Title", "PDFlib block processing sample (PHP)");
$blockcontainer = PDF_open_pdi($p, $infile, "", 0);
if ($blockcontainer == 0){
die ("Error: " . PDF_get_errmsg($p));
}
$page = PDF_open_pdi_page($p, $blockcontainer, 1, "");
if ($page == 0){
die ("Error: " . PDF_get_errmsg($p));
}
PDF_begin_page($p, 20, 20); /* dummy page size */
/* This will adjust the page size to the block container's size. */
PDF_fit_pdi_page($p, $page, 0, 0, "adjustpage");
/* Fill all text blocks with dynamic data */
foreach ($data as $key => $value){
if (PDF_fill_textblock($p, $page, $key, $value,
"embedding encoding=winansi") == 0) {
printf("Warning: %s\n ", PDF_get_errmsg($p));
}
}
PDF_end_page($p); /* close page */
PDF_close_pdi_page($p, $page);
PDF_close($p); /* close PDF document */
PDF_close_pdi($p, $blockcontainer);
$buf = PDF_get_buffer($p);
$len = strlen($buf);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=businesscard.pdf");
print $buf;
PDF_delete($p); /* delete the PDFlib object */
?>

View File

@ -0,0 +1,105 @@
<?php
/*
* $Id: chartab.php,v 1.1 2004/10/06 17:46:43 laplace Exp $
* PDFlib client: chartab example in PHP
*/
/* change these as required */
$fontname = "LuciduxSans-Oblique";
/* This is where font/image/PDF input files live. Adjust as necessary. */
$searchpath = "../data";
/* list of encodings to use */
$encodings = array( "iso8859-1", "iso8859-2", "iso8859-15" );
/* whether or not to embed the font */
$embed = 1;
define("FONTSIZE", 16);
define("TOP", 700);
define("LEFT", 50);
define("YINCR", 2*FONTSIZE);
define("XINCR", 2*FONTSIZE);
/* create a new PDFlib object */
$p = PDF_new();
/* open new PDF file */
if (PDF_open_file($p, "") == 0) {
die("Error: " . PDF_get_errmsg($p));
}
PDF_set_parameter($p, "openaction", "fitpage");
PDF_set_parameter($p, "fontwarning", "true");
PDF_set_parameter($p, "SearchPath", $searchpath);
/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter($p, "hypertextencoding", "winansi");
PDF_set_info($p, "Creator", "chartab.php");
PDF_set_info($p, "Author", "Thomas Merz");
PDF_set_info($p, "Title", "Character table (PHP)");
/* loop over all encodings */
for ($page = 0; $page < count($encodings); $page++)
{
PDF_begin_page($p, 595, 842); /* start a new page */
/* print the heading and generate the bookmark */
$font = PDF_load_font($p, "Helvetica", "winansi", "");
PDF_setfont($p, $font, FONTSIZE);
$buf = sprintf("%s (%s) %sembedded",
$fontname, $encodings[$page], $embed ? "" : "not ");
PDF_show_xy($p, $buf, LEFT - XINCR, TOP + 3 * YINCR);
PDF_add_bookmark($p, $buf, 0, 0);
/* print the row and column captions */
PDF_setfont($p, $font, 2 * FONTSIZE/3);
for ($row = 0; $row < 16; $row++)
{
$buf = sprintf("x%X", $row);
PDF_show_xy($p, $buf, LEFT + $row*XINCR, TOP + YINCR);
$buf = sprintf("%Xx", $row);
PDF_show_xy($p, $buf, LEFT - XINCR, TOP - $row * YINCR);
}
/* print the character table */
$font = PDF_load_font($p, $fontname, $encodings[$page],
$embed ? "embedding": "");
PDF_setfont($p, $font, FONTSIZE);
$y = TOP;
$x = LEFT;
for ($row = 0; $row < 16; $row++)
{
for ($col = 0; $col < 16; $col++) {
$buf = sprintf("%c", 16*$row + $col);
PDF_show_xy($p, $buf, $x, $y);
$x += XINCR;
}
$x = LEFT;
$y -= YINCR;
}
PDF_end_page($p); /* close page */
}
PDF_close($p); /* close PDF document */
$buf = PDF_get_buffer($p);
$len = strlen($buf);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=hello.pdf");
print $buf;
PDF_delete($p); /* delete the PDFlib object */
?>

View File

@ -0,0 +1,8 @@
LTLIBRARY_NAME = libpdf.la
LTLIBRARY_SOURCES = pdf.c
LTLIBRARY_SHARED_NAME = libpdf_php.la
PDFLIB_SHARED_LIBBADD = -lpdf
LTLIBRARY_SHARED_LIBADD = $(PDFLIB_SHARED_LIBBADD)
include $(top_srcdir)/build/dynlib.mk

View File

@ -0,0 +1,29 @@
dnl $Id: config.m4,v 1.1 2004/10/06 17:46:43 laplace Exp $
PHP_ARG_WITH(pdflib,whether to include PDFlib support,
[ --with-pdflib[=DIR] Include PDFlib 4.x support. DIR is the PDFlib
base install directory, defaults to /usr/local
Set DIR to "shared" to build as dl, or "shared,DIR"
to build as dl and still specify DIR.])
case "$PHP_PDFLIB" in
yes)
PHP_EXTENSION(pdf, $ext_shared)
AC_DEFINE(HAVE_PDFLIB,1,[ ])
AC_SUBST(PDFLIB_SHARED_LIBADD)
PHP_ADD_LIBRARY(pdf, PDFLIB_SHARED_LIBADD)
;;
no)
;;
*)
dnl build from a installed/binary pdflib distribution
if test -f "$PHP_PDFLIB/include/pdflib.h" ; then
PHP_EXTENSION(pdf, $ext_shared)
AC_DEFINE(HAVE_PDFLIB,1,[ ])
AC_SUBST(PDFLIB_SHARED_LIBADD)
PHP_ADD_LIBRARY_WITH_PATH(pdf, $withval/lib, PDFLIB_SHARED_LIBADD)
PHP_ADD_INCLUDE($PHP_PDFLIB/include)
else
AC_MSG_ERROR([pdflib.h not found under $PHP_PDFLIB/include/])
fi ;;
esac

View File

@ -0,0 +1,40 @@
dnl $Id: config.php-406+.m4,v 1.1 2004/10/06 17:46:43 laplace Exp $
PHP_ARG_WITH(pdflib,whether to include PDFlib support,
[ --with-pdflib[=DIR] Include PDFlib 4.x support. DIR is the PDFlib
base install directory, defaults to /usr/local
Set DIR to "shared" to build as dl, or "shared,DIR"
to build as dl and still specify DIR.])
PHP_SUBST(PDFLIB_SHARED_LIBADD)
PHP_EXTENSION(pdf, $ext_shared)
case "$PHP_PDFLIB" in
yes)
AC_CHECK_LIB(pdf, PDF_open_pdi, [
AC_DEFINE(HAVE_PDFLIB,1,[ ])
PHP_ADD_LIBRARY(pdf,, PDFLIB_SHARED_LIBADD)
],[
AC_MSG_ERROR(PDFlib extension requires PDFlib 4.x.)
])
PHP_ADD_LIBRARY(pdf,, PDFLIB_SHARED_LIBADD)
;;
no)
;;
*)
test -f $PHP_PDFLIB/include/pdflib.h && PDFLIB_INCLUDE="$PHP_PDFLIB/include"
if test -n "$PDFLIB_INCLUDE" ; then
PHP_CHECK_LIBRARY(pdf, PDF_open_pdi, [
AC_DEFINE(HAVE_PDFLIB,1,[ ])
PHP_ADD_LIBRARY_WITH_PATH(pdf, $PHP_PDFLIB/lib, PDFLIB_SHARED_LIBADD)
PHP_ADD_INCLUDE($PDFLIB_INCLUDE)
],[
AC_MSG_ERROR(PDFlib extension requires PDFlib 4.x.)
],[
-L$PHP_PDFLIB/lib
])
else
AC_MSG_ERROR([pdflib.h not found under $PHP_PDFLIB/include/])
fi ;;
esac

View File

@ -0,0 +1,8 @@
include $(top_builddir)/config_vars.mk
LTLIBRARY_OBJECTS = $(LTLIBRARY_SOURCES:.c=.lo) $(LTLIBRARY_OBJECTS_X)
LTLIBRARY_SHARED_OBJECTS = $(LTLIBRARY_OBJECTS:.lo=.slo)
$(LTLIBRARY_SHARED_NAME): $(LTLIBRARY_SHARED_OBJECTS) $(LTLIBRARY_DEPENDENCIES)
$(SHARED_LIBTOOL) --mode=link $(COMPILE) $(LDFLAGS) -o $@ -avoid-version -module -rpath $(phplibdir) $(LTLIBRARY_LDFLAGS) $(LTLIBRARY_OBJECTS) $(LTLIBRARY_SHARED_LIBADD)
$(SHARED_LIBTOOL) --mode=install cp $@ $(phplibdir)
targets = $(LTLIBRARY_SHARED_NAME)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,207 @@
/*
+----------------------------------------------------------------------+
| PHP version 4.0 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2001 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.txt. |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Uwe Steinmann <Uwe.Steinmann@fernuni-hagen.de> |
+----------------------------------------------------------------------+
*/
/* $Id: php_pdf.h,v 1.1 2004/10/06 17:46:43 laplace Exp $ */
/* Derived from:
Id: php_pdf.h,v 1.22 2001/11/30 04:46:35 sniper Exp */
#ifndef PHP_PDF_H
#define PHP_PDF_H
#if HAVE_PDFLIB
#include <pdflib.h>
extern zend_module_entry pdf_module_entry;
#define pdf_module_ptr &pdf_module_entry
PHP_MINFO_FUNCTION(pdf);
PHP_MINIT_FUNCTION(pdf);
PHP_MSHUTDOWN_FUNCTION(pdf);
/* p_font.c */
PHP_FUNCTION(pdf_add_launchlink);
PHP_FUNCTION(pdf_add_locallink);
PHP_FUNCTION(pdf_add_note);
PHP_FUNCTION(pdf_add_pdflink);
PHP_FUNCTION(pdf_add_weblink);
PHP_FUNCTION(pdf_attach_file);
PHP_FUNCTION(pdf_set_border_color);
PHP_FUNCTION(pdf_set_border_dash);
PHP_FUNCTION(pdf_set_border_style);
/* p_basic.c */
PHP_FUNCTION(pdf_begin_page);
PHP_FUNCTION(pdf_close);
PHP_FUNCTION(pdf_delete);
PHP_FUNCTION(pdf_end_page);
PHP_FUNCTION(pdf_get_apiname);
PHP_FUNCTION(pdf_get_errmsg);
PHP_FUNCTION(pdf_get_errnum);
PHP_FUNCTION(pdf_get_buffer);
PHP_FUNCTION(pdf_new);
PHP_FUNCTION(pdf_open_file);
/* p_block.c */
PHP_FUNCTION(pdf_fill_imageblock);
PHP_FUNCTION(pdf_fill_pdfblock);
PHP_FUNCTION(pdf_fill_textblock);
/* p_color.c */
PHP_FUNCTION(pdf_makespotcolor);
PHP_FUNCTION(pdf_setcolor);
PHP_FUNCTION(pdf_setgray_fill); /* deprecated (since 4.0) */
PHP_FUNCTION(pdf_setgray_stroke); /* deprecated (since 4.0) */
PHP_FUNCTION(pdf_setgray); /* deprecated (since 4.0) */
PHP_FUNCTION(pdf_setrgbcolor_fill); /* deprecated (since 4.0) */
PHP_FUNCTION(pdf_setrgbcolor_stroke);/* deprecated (since 4.0) */
PHP_FUNCTION(pdf_setrgbcolor); /* deprecated (since 4.0) */
/* p_draw.c */
PHP_FUNCTION(pdf_arc);
PHP_FUNCTION(pdf_arcn);
PHP_FUNCTION(pdf_circle);
PHP_FUNCTION(pdf_clip);
PHP_FUNCTION(pdf_closepath);
PHP_FUNCTION(pdf_closepath_fill_stroke);
PHP_FUNCTION(pdf_closepath_stroke);
PHP_FUNCTION(pdf_curveto);
PHP_FUNCTION(pdf_endpath);
PHP_FUNCTION(pdf_fill);
PHP_FUNCTION(pdf_fill_stroke);
PHP_FUNCTION(pdf_lineto);
PHP_FUNCTION(pdf_moveto);
PHP_FUNCTION(pdf_rect);
PHP_FUNCTION(pdf_stroke);
/* p_encoding.c */
PHP_FUNCTION(pdf_encoding_set_char);
/* p_font.c */
PHP_FUNCTION(pdf_findfont);
PHP_FUNCTION(pdf_load_font);
PHP_FUNCTION(pdf_setfont);
/* p_gstate.c */
PHP_FUNCTION(pdf_concat);
PHP_FUNCTION(pdf_initgraphics);
PHP_FUNCTION(pdf_restore);
PHP_FUNCTION(pdf_rotate);
PHP_FUNCTION(pdf_save);
PHP_FUNCTION(pdf_scale);
PHP_FUNCTION(pdf_setdash);
PHP_FUNCTION(pdf_setdashpattern);
PHP_FUNCTION(pdf_setflat);
PHP_FUNCTION(pdf_setlinecap);
PHP_FUNCTION(pdf_setlinejoin);
PHP_FUNCTION(pdf_setlinewidth);
PHP_FUNCTION(pdf_setmatrix);
PHP_FUNCTION(pdf_setmiterlimit);
PHP_FUNCTION(pdf_setpolydash); /* deprecated since V5.0 */
PHP_FUNCTION(pdf_skew);
PHP_FUNCTION(pdf_translate);
/* p_hyper.c */
PHP_FUNCTION(pdf_add_bookmark);
PHP_FUNCTION(pdf_add_nameddest);
PHP_FUNCTION(pdf_set_info);
/* p_icc.c */
PHP_FUNCTION(pdf_load_iccprofile);
/* p_image.c */
PHP_FUNCTION(pdf_add_thumbnail);
PHP_FUNCTION(pdf_close_image);
PHP_FUNCTION(pdf_fit_image);
PHP_FUNCTION(pdf_load_image);
PHP_FUNCTION(pdf_open_ccitt); /* deprecated since V5.0 */
PHP_FUNCTION(pdf_open_image); /* deprecated since V5.0 */
PHP_FUNCTION(pdf_open_image_file); /* deprecated since V5.0 */
PHP_FUNCTION(pdf_place_image); /* deprecated since V5.0 */
/* p_params.c */
PHP_FUNCTION(pdf_get_parameter);
PHP_FUNCTION(pdf_get_value);
PHP_FUNCTION(pdf_set_parameter);
PHP_FUNCTION(pdf_set_value);
/* p_pattern.c */
PHP_FUNCTION(pdf_begin_pattern);
PHP_FUNCTION(pdf_end_pattern);
/* p_pdi.c */
PHP_FUNCTION(pdf_close_pdi);
PHP_FUNCTION(pdf_close_pdi_page);
PHP_FUNCTION(pdf_fit_pdi_page);
PHP_FUNCTION(pdf_get_pdi_parameter);
PHP_FUNCTION(pdf_get_pdi_value);
PHP_FUNCTION(pdf_open_pdi);
PHP_FUNCTION(pdf_open_pdi_page);
PHP_FUNCTION(pdf_place_pdi_page); /* deprecated since V5.0 */
PHP_FUNCTION(pdf_process_pdi);
/* p_resource.c */
PHP_FUNCTION(pdf_create_pvf);
PHP_FUNCTION(pdf_delete_pvf);
/* p_shading.c */
PHP_FUNCTION(pdf_shading);
PHP_FUNCTION(pdf_shading_pattern);
PHP_FUNCTION(pdf_shfill);
/* p_template.c */
PHP_FUNCTION(pdf_begin_template);
PHP_FUNCTION(pdf_end_template);
/* p_text.c */
PHP_FUNCTION(pdf_continue_text);
PHP_FUNCTION(pdf_fit_textline);
PHP_FUNCTION(pdf_set_text_pos);
PHP_FUNCTION(pdf_show);
PHP_FUNCTION(pdf_show_boxed);
PHP_FUNCTION(pdf_show_xy);
PHP_FUNCTION(pdf_stringwidth);
/* p_type3.c */
PHP_FUNCTION(pdf_begin_font);
PHP_FUNCTION(pdf_begin_glyph);
PHP_FUNCTION(pdf_end_font);
PHP_FUNCTION(pdf_end_glyph);
/* p_xgstate.c */
PHP_FUNCTION(pdf_create_gstate);
PHP_FUNCTION(pdf_set_gstate);
#if HAVE_LIBGD13
/* not supported by PDFlib GmbH */
PHP_FUNCTION(pdf_open_memory_image);
#endif
#ifdef ZTS
#define PDFG(v) TSRMG(pdf_globals_id, php_pdf_globals *, v)
#else
#define PDFG(v) (pdf_globals.v)
#endif
#else
#define pdf_module_ptr NULL
#endif
#define phpext_pdf_ptr pdf_module_ptr
#endif /* PHP_PDF_H */

View File

@ -0,0 +1,40 @@
<?php
# $Id: hello.php,v 1.1 2004/10/06 17:46:43 laplace Exp $
/* create a new PDFlib object */
$p = PDF_new();
/* open new PDF file; insert a file name to create the PDF on disk */
if (PDF_open_file($p, "") == 0) {
die("Error: " . PDF_get_errmsg($p));
}
/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter($p, "hypertextencoding", "winansi");
PDF_set_info($p, "Creator", "hello.php");
PDF_set_info($p, "Author", "Rainer Schaaf");
PDF_set_info($p, "Title", "Hello world (PHP)!");
PDF_begin_page($p, 595, 842); /* start a new page */
$font = PDF_load_font($p, "Helvetica-Bold", "winansi", "");
PDF_setfont($p, $font, 24.0);
PDF_set_text_pos($p, 50, 700);
PDF_show($p, "Hello world!");
PDF_continue_text($p, "(says PHP)");
PDF_end_page($p); /* close page */
PDF_close($p); /* close PDF document */
$buf = PDF_get_buffer($p);
$len = strlen($buf);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=hello.pdf");
print $buf;
PDF_delete($p); /* delete the PDFlib object */
?>

View File

@ -0,0 +1,47 @@
<?php
# $Id: image.php,v 1.1 2004/10/06 17:46:43 laplace Exp $
/* This is where font/image/PDF input files live. Adjust as necessary. */
$searchpath = "../data";
$p = PDF_new(); /* create a new PDFlib object */
PDF_set_parameter($p, "SearchPath", $searchpath);
/* open new PDF file; insert a file name to create the PDF on disk */
if (PDF_open_file($p, "") == 0) {
die("Error: " . PDF_get_errmsg($p));
}
/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter($p, "hypertextencoding", "winansi");
PDF_set_info($p, "Creator", "image.php");
PDF_set_info($p, "Author", "Rainer Schaaf");
PDF_set_info($p, "Title", "image sample (PHP)");
$imagefile = "nesrin.jpg";
$image = PDF_load_image($p, "auto", $imagefile, "");
if (!$image) {
die("Error: " . PDF_get_errmsg($p));
}
/* dummy page size, will be adjusted by PDF_fit_image() */
PDF_begin_page($p, 10, 10);
PDF_fit_image($p, $image, 0, 0, "adjustpage");
PDF_close_image($p, $image);
PDF_end_page($p); /* close page */
PDF_close($p); /* close PDF document */
$buf = PDF_get_buffer($p);
$len = strlen($buf);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=image.pdf");
print $buf;
PDF_delete($p); /* delete the PDFlib object */
?>

View File

@ -0,0 +1,152 @@
<?php
/* $Id: invoice.php,v 1.1 2004/10/06 17:46:43 laplace Exp $
*
* PDFlib client: invoice example in PHP
*/
$col1 = 55;
$col2 = 100;
$col3 = 330;
$col4 = 430;
$col5 = 530;
$fontsize = 12;
$pagewidth = 595;
$pageheight = 842;
$fontsize = 12;
$infile = "stationery.pdf";
/* This is where font/image/PDF input files live. Adjust as necessary. */
$searchpath = "../data";
$closingtext =
"30 days warranty starting at the day of sale. " .
"This warranty covers defects in workmanship only. " .
"Kraxi Systems, Inc. will, at its option, repair or replace the " .
"product under the warranty. This warranty is not transferable. " .
"No returns or exchanges will be accepted for wet products.";
$data = array( array("name"=>"Super Kite", "price"=>20, "quantity"=>2),
array("name"=>"Turbo Flyer", "price"=>40, "quantity"=>5),
array("name"=>"Giga Trasch", "price"=>180, "quantity"=>1),
array("name"=>"Bare Bone Kit", "price"=>50, "quantity"=>3),
array("name"=>"Nitty Gritty", "price"=>20, "quantity"=>10),
array("name"=>"Pretty Dark Flyer","price"=>75, "quantity"=>1),
array("name"=>"Free Gift", "price"=>0, "quantity"=>1)
);
$months = array( "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December");
$p = PDF_new();
/* open new PDF file; insert a file name to create the PDF on disk */
if (PDF_open_file($p, "") == 0) {
die("Error: " . PDF_get_errmsg($p));
}
PDF_set_parameter($p, "SearchPath", $searchpath);
/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter($p, "hypertextencoding", "winansi");
PDF_set_info($p, "Creator", "invoice.php");
PDF_set_info($p, "Author", "Thomas Merz");
PDF_set_info($p, "Title", "PDFlib invoice generation demo (PHP)");
$form = PDF_open_pdi($p, $infile, "", 0);
if ($form == 0){
die("Error: " . PDF_get_errmsg($p));
}
$page = PDF_open_pdi_page($p, $form, 1, "");
if ($page == 0){
die("Error: " . PDF_get_errmsg($p));
}
$boldfont = PDF_load_font($p, "Helvetica-Bold", "winansi", "");
$regularfont = PDF_load_font($p, "Helvetica", "winansi", "");
$leading = $fontsize + 2;
/* Establish coordinates with the origin in the upper left corner. */
PDF_set_parameter($p, "topdown", "true");
PDF_begin_page($p, $pagewidth, $pageheight); /* A4 page */
PDF_fit_pdi_page($p, $page, 0, $pageheight, "");
PDF_close_pdi_page($p, $page);
PDF_setfont($p, $regularfont, $fontsize);
/* print the address */
$y = 170;
PDF_set_value($p, "leading", $leading);
PDF_show_xy($p, "John Q. Doe", $col1, $y);
PDF_continue_text($p, "255 Customer Lane");
PDF_continue_text($p, "Suite B");
PDF_continue_text($p, "12345 User Town");
PDF_continue_text($p, "Everland");
/* print the header and date */
PDF_setfont($p, $boldfont, $fontsize);
$y = 300;
PDF_show_xy($p, "INVOICE", $col1, $y);
$time = localtime();
$buf = sprintf("%s %d, %d", $months[$time[4]], $time[3], $time[5]+1900);
PDF_fit_textline($p, $buf, $col5, $y, "position {100 0}");
/* print the invoice header line */
PDF_setfont($p, $boldfont, $fontsize);
/* "position {0 0}" is left-aligned, "position {100 0}" right-aligned */
$y = 370;
PDF_fit_textline($p, "ITEM", $col1, $y, "position {0 0}");
PDF_fit_textline($p, "DESCRIPTION", $col2, $y, "position {0 0}");
PDF_fit_textline($p, "QUANTITY", $col3, $y, "position {100 0}");
PDF_fit_textline($p, "PRICE", $col4, $y, "position {100 0}");
PDF_fit_textline($p, "AMOUNT", $col5, $y, "position {100 0}");
PDF_setfont($p, $regularfont, $fontsize);
$y += 2*$leading;
$total = 0;
for ($i = 0; $i < count($data); $i++){
PDF_show_xy($p, $i+1, $col1, $y);
PDF_show_xy($p, $data[$i]{"name"}, $col2, $y);
PDF_fit_textline($p, $data[$i]{"quantity"}, $col3, $y, "position {100 0}");
PDF_fit_textline($p, $data[$i]{"price"}, $col4, $y, "position {100 0}");
$sum = $data[$i]{"price"}*$data[$i]{"quantity"};
$buf = sprintf("%.2f", $sum);
PDF_fit_textline($p, $buf, $col5, $y, "position {100 0}");
$y += $leading;
$total +=$sum;
}
$y += $leading;
PDF_setfont($p, $boldfont, $fontsize);
PDF_fit_textline($p,sprintf("%.2f",$total), $col5, $y, "position {100 0}");
/* Print the closing text */
$y +=5*$leading;
PDF_setfont($p, $regularfont, $fontsize);
PDF_set_value($p, "leading", $leading);
PDF_show_boxed($p, $closingtext,
$col1, $y + 4*$leading, $col5-$col1, 4*$leading, "justify", "");
PDF_end_page($p);
PDF_close($p);
PDF_close_pdi($p, $form);
$buf = PDF_get_buffer($p);
$len = strlen($buf);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=hello.pdf");
print $buf;
PDF_delete($p);
?>

View File

@ -0,0 +1,102 @@
<?php
/* $Id: pdfclock.php,v 1.1 2004/10/06 17:46:43 laplace Exp $
* A little PDFlib application to draw an analog clock.
*
*/
$RADIUS = 200.0;
$MARGIN = 20.0;
$p = PDF_new(); /* create a new PDFlib object */
/* open new PDF file; insert a file name to create the PDF on disk */
if (PDF_open_file($p, "") == 0) {
die("Error: " . PDF_get_errmsg($p));
}
/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter($p, "hypertextencoding", "winansi");
PDF_set_info($p, "Creator", "pdfclock.php");
PDF_set_info($p, "Author", "Rainer Schaaf");
PDF_set_info($p, "Title", "PDF clock (PHP)");
/* start a new page */
PDF_begin_page($p, 2 * ($RADIUS + $MARGIN), 2 * ($RADIUS + $MARGIN));
PDF_translate($p, $RADIUS + $MARGIN, $RADIUS + $MARGIN);
PDF_setcolor($p, "fillstroke", "rgb", 0.0, 0.0, 1.0, 0.0);
PDF_save($p);
/* minute strokes */
PDF_setlinewidth($p, 2.0);
for ($alpha = 0; $alpha < 360; $alpha += 6)
{
PDF_rotate($p, 6.0);
PDF_moveto($p, $RADIUS, 0.0);
PDF_lineto($p, $RADIUS-$MARGIN/3, 0.0);
PDF_stroke($p);
}
PDF_restore($p);
PDF_save($p);
/* 5 minute strokes */
PDF_setlinewidth($p, 3.0);
for ($alpha = 0; $alpha < 360; $alpha += 30)
{
PDF_rotate($p, 30.0);
PDF_moveto($p, $RADIUS, 0.0);
PDF_lineto($p, $RADIUS-$MARGIN, 0.0);
PDF_stroke($p);
}
$ltime = getdate();
/* draw hour hand */
PDF_save($p);
PDF_rotate($p, -(($ltime['minutes']/60.0)+$ltime['hours']-3.0)*30.0);
PDF_moveto($p, -$RADIUS/10, -$RADIUS/20);
PDF_lineto($p, $RADIUS/2, 0.0);
PDF_lineto($p, -$RADIUS/10, $RADIUS/20);
PDF_closepath($p);
PDF_fill($p);
PDF_restore($p);
/* draw minute hand */
PDF_save($p);
PDF_rotate($p, -(($ltime['seconds']/60.0)+$ltime['minutes']-15.0)*6.0);
PDF_moveto($p, -$RADIUS/10, -$RADIUS/20);
PDF_lineto($p, $RADIUS * 0.8, 0.0);
PDF_lineto($p, -$RADIUS/10, $RADIUS/20);
PDF_closepath($p);
PDF_fill($p);
PDF_restore($p);
/* draw second hand */
PDF_setcolor($p, "fillstroke", "rgb", 1.0, 0.0, 0.0, 0.0);
PDF_setlinewidth($p, 2);
PDF_save($p);
PDF_rotate($p, -(($ltime['seconds'] - 15.0) * 6.0));
PDF_moveto($p, -$RADIUS/5, 0.0);
PDF_lineto($p, $RADIUS, 0.0);
PDF_stroke($p);
PDF_restore($p);
/* draw little circle at center */
PDF_circle($p, 0, 0, $RADIUS/30);
PDF_fill($p);
PDF_restore($p);
PDF_end_page($p); /* close page */
PDF_close($p); /* close PDF document */
$buf = PDF_get_buffer($p);
$len = strlen($buf);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=pdfclock.pdf");
print $buf;
PDF_delete($p); /* delete the PDFlib object */
?>

View File

@ -0,0 +1,89 @@
<?php
# $Id: quickreference.php,v 1.1 2004/10/06 17:46:43 laplace Exp $
$infile = "reference.pdf";
/* This is where font/image/PDF input files live. Adjust as necessary. */
$searchpath = "../data";
$maxrow = 2;
$maxcol = 2;
$width = 500.0;
$height = 770.0;
$startpage = 1;
$endpage = 4;
$p = PDF_new(); /* create a new PDFlib object */
/* open new PDF file; insert a file name to create the PDF on disk */
if (PDF_open_file($p, "") == 0) {
die("Error: " . PDF_get_errmsg($p));
}
PDF_set_parameter($p, "SearchPath", $searchpath);
/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter($p, "hypertextencoding", "winansi");
PDF_set_info($p, "Creator", "quickreference.php");
PDF_set_info($p, "Author", "Thomas Merz");
PDF_set_info($p, "Title", "mini imposition demo (php)");
$manual = PDF_open_pdi($p, $infile, "", 0);
if (!$manual) {
die("Error: " . PDF_get_errmsg($p));
}
$row = 0;
$col = 0;
PDF_set_parameter($p, "topdown", "true");
for ($pageno = $startpage; $pageno <= $endpage; $pageno++) {
if ($row == 0 && $col == 0) {
PDF_begin_page($p, $width, $height);
$font = PDF_load_font($p, "Helvetica-Bold", "winansi", "");
PDF_setfont($p, $font, 18);
PDF_set_text_pos($p, 24, 24);
PDF_show($p, "PDFlib Quick Reference");
}
$page = PDF_open_pdi_page($p, $manual, $pageno, "");
if (!$page) {
die("Error: " . PDF_get_errmsg($p));
}
$optlist = sprintf("scale %f", 1/$maxrow);
PDF_fit_pdi_page($p, $page,
$width/$maxcol*$col, ($row + 1) * $height/$maxrow, $optlist);
PDF_close_pdi_page($p, $page);
$col++;
if ($col == $maxcol) {
$col = 0;
$row++;
}
if ($row == $maxrow) {
$row = 0;
PDF_end_page($p);
}
}
/* finish the last partial page */
if ($row != 0 || $col != 0) {
PDF_end_page($p);
}
PDF_close($p);
PDF_close_pdi($p, $manual);
$buf = PDF_get_buffer($p);
$len = strlen($buf);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=quickreference_php.pdf");
print $buf;
PDF_delete($p);
?>

View File

@ -0,0 +1,243 @@
===================================
Notes on the PDFlib binding for PHP
===================================
The binary distribution of PDFlib supports using PDFlib as a loadable
module (DSO) in PHP. This implies some restrictions, but simplifies PDFlib
deployment a lot. Using PDFlib as a loadable module is the recommended
way for using PDFlib with PHP.
If the loadable module does not fit your needs, the binary distribution
also includes a precompiled PDFlib library (bind/c/lib/libpdf.*), to be used in
your custom build process for PHP. This will allow you to integrate PDFlib
(including the PDI functionality) into your own PHP build process.
Please note that only PDFlib Lite is available in source form.
PDFlib, PDFlib+PDI, and the PDFlib Personalization Server (PPS) are
available for commercial licensing only, and therefore require a
binary package.
If your distribution does not contain the expected binaries, please contact
bindings@pdflib.com. We only include binaries for the most common PHP versions
to not overload the download package. Please include the platform and the
exact PHP version you are looking for.
Of course you may also use PDFlib for PHP with the source distribution, but
since there are so many PHP configuration options we will only give a rough
overview how to do this.
Summary of this document:
- "Loadable Module (DSO)"
The recommended way for using PDFlib with PHP.
If you could not find a DSO for your PHP version/platform in the distribution
please contact bindings@pdflib.com.
- "Rebuild PHP"
If the loadable module does not fit your needs, or if DSO modules are not
supported on your platform, you can rebuild PHP with PDFlib support.
Caution: this requires substantially more effort than the loadable module.
- "Samples"
How to set up the supplied PDFlib examples.
Loadable Module
===============
Use the PDFlib loadable module from the "bind/php/<phpversion>" directory
of the PDFlib binary distribution. The name of the loadable module depends
on the platform:
- Windows: libpdf_php.dll
- Linux: libpdf_php.so
- Other Unix systems: libpdf_php.* with the appropriate shared
library suffix
The following conditions must be met in order to use PDFlib as a
loadable module:
- PHP on your platform must support DSOs. This is the case on Windows
and many Unix platforms, but not all. For example, PHP does not support
DSOs on Mac OS X before PHP 4.3.0.
- PDFlib support must not already have been compiled into your PHP version.
If your PHP already includes PDFlib support (this is the case for
versions of PHP distributed with many Linux distributions) you must
rebuild PHP with the "-with-pdflib=no" configure option.
(*HINT* for maintainers of Linux distributions:
include PDFlib support for PHP as DSO, this allows easier updates)
- Several properties of your PHP version must match the loadable module
of PDFlib. The supplied binary modules for PDFlib have been built as
follows:
- nondebug version
- for supported PHP version numbers see "bind/php/<phpversion>
- thread-safe (only relevant for Windows)
If you get an error message similar to the following your PHP version
number does not match that of the PDFlib module:
Warning: pdf: Unable to initialize module
Module compiled with debug=0, thread-safety=1 module API=20001214
PHP compiled with debug=0, thread-safety=1 module API=20001222
Unfortunately new PHP version simply deny loading a wrong module
whithout any specific error message.
All of these options must match.
If you can't meet the above conditions you must choose to "Rebuild PHP" as
described below (or ask us whether your combination will be available soon).
Installing the module on Windows:
- Our DLLs have been tested with the binary PHP distribution which is
available from http://www.php.net.
- The PDFlib binary distribution for Windows contains several DLLs
for different versions of PHP. Currently we offer the following
flavors:
- "php-4.1.0\libpdf_php.dll" was built for PHP 4.1.0/4.1.1/4.2.0
- "php-4.2.1\libpdf_php.dll" was built for PHP 4.2.1-4.3.5
- For the PHP installation please follow the documentation of your
PHP distribution and copy "bind/php/<your phpversion>/libpdf_php.dll"
to the directory which is specified in the "extension_dir" line in
php.ini.
Installing the module on Unix:
- The PDFlib binary distribution for Unix contains several shared libraries
for different versions of PHP. Currently we offer the following
flavors:
- "php-4.1.0\libpdf_php.*" was built for PHP 4.1.0, 4.1.1, 4.2.0
- "php-4.2.1\libpdf_php.*" was built for PHP 4.2.1-4.3.5
- Copy the file libpdf_php.* from the directory "bind/php/<phpversion>"
of the PDFlib binary distribution to the directory which is specified in
the "extension_dir" line in php.ini.
Using the module:
- If you decide to load PDFlib each time PHP starts insert one line in
php.ini:
extension=libpdf_php.dll (on Windows)
or
extension = libpdf_php.so (on Unix)
and restart apache, so that the changes are recognized.
You may check <?phpinfo()?> whether the installation did work. If you
don't find a PDF section please check your logfiles for the reason.
- Without the "extension = ..." line in php.ini you must include the
following line in your PHP scripts:
dl("libpdf_php.dll"); (on Windows)
or
dl("libpdf_php.so"); (on Unix)
In this case your php.ini needs these settings:
- php.ini must include the line "safe_mode=Off".
- php.ini must include the line "enable_dl=On".
Rebuild PHP
===========
If the loadable module does not fit your needs, or if DSO modules are not
supported on your platform, you can rebuild PHP with PDFlib support.
WARNING: this option requires substantial experience with building PHP.
It is not a matter of simply calling "make" and waiting for the result.
If you never built PHP from source code it is strongly recommended to
avoid this option.
When recompiling PHP using the library from the binary PDFlib distribution
you have to use the library located in the "bind/c" directory of the PDFlib
distribution.
Note: Building PDFlib for PHP from the source code of PDFlib is not supported
by PDFlib GmbH since we supply precompiled binaries (although it should work,
and therefore you will find hints how to do it below).
Unix
- Unpack the PDFlib binary distribution to <pdflib-dir>,
or unpack the PDFlib source distribution to <pdflib-dir>, and
issue the command
$ ./configure; make; make install
- Copy some PDFlib support files for PHP to your PHP source tree (check
the section "Support Files" below to see which files apply to your
PHP version.
$ cp <pdflib-dir>/bind/php/ext/pdf/<somefiles> <php-dir>/ext/pdf
and rebuild the PHP configure script in the PHP directory (only
neccesary if you decided to use our config.m4 script):
$ ./buildconf
- For rebuilding PHP add the following to your PHP configure options:
--with-pdflib=<pdflib-dir>/bind/c
or if building PDFlib from source:
--with-pdflib[=<pdflib-install-directory>]
where <pdflib-install-directory> will typically be something like
/usr/local or similar (the directory where "lib" and "include" for PDFlib
reside).
- Now rebuild PHP as usual, and install it.
Windows
- Create PDFlib.lib from the PDFlib sources. Change the project settings
to create a "Multithreaded DLL" library named pdflib.lib.
- Copy the required PDFlib support files (see below) for PHP to your
PHP source tree.
C:\> copy <pdflib-dir>\bind\php\ext\pdf\<somefiles> <php-dir>\ext\pdf
- Now rebuild libpdf_php.dll.
Support files
The following files have to be copied from bind/php/ext/pdf to the ext/pdf
directory of your PHP source tree. Replacing config.m4 is optional, but
the config.m4 supplied by us is much simpler and therefor makes less
troubles if you manage to go through the buildconf process.
Which files are needed depends on the PHP version you use:
PHP 4.1.0-4.1.1
config.php-406+.m4 -> config.m4
pdf.c -> pdf.c
php_pdf.h -> php_pdf.h
PHP 4.2.1-4.2.3
config.php-406+.m4 -> config.m4
pdf.c -> pdf.c
php_pdf.h -> php_pdf.h
PHP 4.3.0-4.3.5
pdf.c -> pdf.c
php_pdf.h -> php_pdf.h
Samples
=======
To use the samples:
- Copy some files:
$ cp bind/php/*.php .../htdocs # (to your htdocs directory)
$ cp bind/data/* .../htdocs/data # (to your htdocs)
- point your browser to the sample files
- enjoy the generated PDFs

View File

@ -0,0 +1,56 @@
# Makefile for PDFlib's Python binding
# $Id: Makefile,v 1.1 2004/10/06 17:46:43 laplace Exp $
top_builddir = ../../..
include $(top_builddir)/config/mkcommon.inc
INCLUDES = $(PDFLIBINC) $(PYINCLUDE)
# special CFLAGS, as -ansi is not working here.
CFLAGS = $(DEFS) $(DEFINES) $(INCLUDES)
LANG_LIBDIR = $(PYTHONLIBDIR)
LIBNAME = pdflib_py$(LA)
OBJ = pdflib_py$(LO)
SRC = pdflib_py.c
include $(top_builddir)/config/mkbind.inc
test:: all
@-(. ./pdflib_py$(LA); cd .libs; cp $$library_names ..)
-$(LIBTOOL_EXE) python hello.py
-$(LIBTOOL_EXE) python image.py
-$(LIBTOOL_EXE) python pdfclock.py
-$(LIBTOOL_EXE) python chartab.py
-$(LIBTOOL_EXE) python invoice.py
-$(LIBTOOL_EXE) python businesscard.py
-$(LIBTOOL_EXE) python quickreference.py
smoke:: test
install:: $(LIBNAME)
@-if test -f .libs/libpdflib_py.dylib; then \
$(INSTALL_DATA) .libs/pdflib_py.so $(LANG_LIBDIR); \
else \
$(LIBTOOL) --mode=install $(INSTALL_DATA) \
$(LIBNAME) $(LANG_LIBDIR); \
fi
uninstall::
@-if test -f .libs/libpdflib_py.dylib; then \
$(LIBTOOL) --mode=uninstall $(RM) $(LANG_LIBDIR)/pdflib_py.so\
else \
$(LIBTOOL) --mode=uninstall $(RM) $(LANG_LIBDIR)/$(LIBNAME) \
fi
clean::
@-if test -f pdflib_py.la; then \
(. ./pdflib_py.la; $(RM) $$library_names) \
fi
$(RM) smoke_c_?.pdf
$(RM) hello.pdf image.pdf pdfclock.pdf chartab.pdf invoice.pdf
$(RM) businesscard.pdf quickreference.pdf
# Automatically generated dependencies

View File

@ -0,0 +1,202 @@
# Microsoft Developer Studio Project File - Name="Python" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=Python - Win32 python23
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "Python.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "Python.mak" CFG="Python - Win32 python23"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "Python - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "Python - Win32 oldpython" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "Python - Win32 python21" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "Python - Win32 python22" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "Python - Win32 python23" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "Python - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Python___Win32_Release"
# PROP BASE Intermediate_Dir "Python___Win32_Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /O2 /I "c:\Programme\Python20\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python15.lib /nologo /dll /debug /machine:I386 /out:"pdflib.dll" /pdbtype:sept
# SUBTRACT BASE LINK32 /nodefaultlib
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python20.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"pdflib_py.dll" /libpath:"c:\programme\python20\libs" /libpath:"..\..\..\libs\pdflib\Release"
# SUBTRACT LINK32 /debug /nodefaultlib
!ELSEIF "$(CFG)" == "Python - Win32 oldpython"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Python___Win32_oldpython"
# PROP BASE Intermediate_Dir "Python___Win32_oldpython"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "oldpython"
# PROP Intermediate_Dir "oldpython"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O2 /I "c:\Programme\Python 1.5.2\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c
# ADD CPP /nologo /MT /W3 /O2 /I "c:\Programme\Python 1.5.2\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python15.lib libpng.lib libtiff.lib zlib.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"pdflib_py.dll" /libpath:"..\..\..\..\libs\zlib" /libpath:"c:\programme\python 1.5.2\libs" /libpath:"..\..\..\libs\pdflib" /libpath:"..\..\..\..\libs\libpng" /libpath:"..\..\..\..\libs\libtiff"
# SUBTRACT BASE LINK32 /debug /nodefaultlib
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python15.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"oldpython/pdflib_py.dll" /libpath:"c:\programme\python 1.5.2\libs" /libpath:"..\..\..\libs\pdflib"
# SUBTRACT LINK32 /debug /nodefaultlib
!ELSEIF "$(CFG)" == "Python - Win32 python21"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Python___Win32_python21"
# PROP BASE Intermediate_Dir "Python___Win32_python21"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "python21"
# PROP Intermediate_Dir "python21"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O2 /I "D:\Programme\Python21\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c
# ADD CPP /nologo /MT /W3 /O2 /I "C:\Programme\Python21\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python15.lib libpng.lib libtiff.lib zlib.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"pdflib_py.dll" /libpath:"..\..\..\..\libs\zlib" /libpath:"c:\programme\python21\libs" /libpath:"..\..\..\libs\pdflib" /libpath:"..\..\..\..\libs\libpng" /libpath:"..\..\..\..\libs\libtiff"
# SUBTRACT BASE LINK32 /debug /nodefaultlib
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python21.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"python21/pdflib_py.dll" /libpath:"C:\programme\python21\libs" /libpath:"..\..\..\libs\pdflib\Release"
# SUBTRACT LINK32 /debug /nodefaultlib
!ELSEIF "$(CFG)" == "Python - Win32 python22"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Python___Win32_python22"
# PROP BASE Intermediate_Dir "Python___Win32_python22"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "python22"
# PROP Intermediate_Dir "python22"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O2 /I "C:\Programme\Python21\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c
# ADD CPP /nologo /MT /W3 /O2 /I "C:\Programme\Python22\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python21.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"python21/pdflib_py.dll" /libpath:"C:\programme\python21\libs" /libpath:"..\..\..\libs\pdflib\Release"
# SUBTRACT BASE LINK32 /debug /nodefaultlib
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python22.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"python22/pdflib_py.dll" /libpath:"C:\programme\python22\libs" /libpath:"..\..\..\libs\pdflib\Release"
# SUBTRACT LINK32 /debug /nodefaultlib
!ELSEIF "$(CFG)" == "Python - Win32 python23"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Python___Win32_python23"
# PROP BASE Intermediate_Dir "Python___Win32_python23"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Python23"
# PROP Intermediate_Dir "Python23"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O2 /I "C:\Programme\Python22\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c
# ADD CPP /nologo /MT /W3 /O2 /I "C:\Programme\Python23\include" /I "..\..\..\libs\pdflib" /D "__WIN32__" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_MT" /D "PDFLIB_STATIC" /YX /FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python22.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"python22/pdflib_py.dll" /libpath:"C:\programme\python22\libs" /libpath:"..\..\..\libs\pdflib\Release"
# SUBTRACT BASE LINK32 /debug /nodefaultlib
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python23.lib pdflib.lib /nologo /base:"0x55340000" /dll /pdb:none /machine:I386 /out:"python23/pdflib_py.dll" /libpath:"C:\programme\python23\libs" /libpath:"..\..\..\libs\pdflib\Release"
# SUBTRACT LINK32 /debug /nodefaultlib
!ENDIF
# Begin Target
# Name "Python - Win32 Release"
# Name "Python - Win32 oldpython"
# Name "Python - Win32 python21"
# Name "Python - Win32 python22"
# Name "Python - Win32 python23"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\pdflib_py.c
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,84 @@
#!/usr/bin/python
# $Id: businesscard.py,v 1.1 2004/10/06 17:46:43 laplace Exp $
#
# PDFlib client: block processing example in Python
#
from sys import *
from pdflib_py import *
infile = "boilerplate.pdf"
# This is where font/image/PDF input files live. Adjust as necessary.
#
# Note that this directory must also contain the LuciduxSans font outline
# and metrics files.
#
searchpath = "../data"
data_name = [
"name",
"business.title",
"business.address.line1",
"business.address.city",
"business.telephone.voice",
"business.telephone.fax",
"business.email",
"business.homepage" ]
data_value = [
"Victor Kraxi",
"Chief Paper Officer",
"17, Aviation Road",
"Paperfield",
"phone +1 234 567-89",
"fax +1 234 567-98",
"victor@kraxi.com",
"www.kraxi.com" ]
BLOCKCOUNT = 8
p = PDF_new()
if PDF_open_file(p, "businesscard.pdf") == -1:
print "Error: " + PDF_get_errmsg(p) + "\n"
exit(2)
# Set the search path for fonts and PDF files
PDF_set_parameter(p, "SearchPath", searchpath)
# This line is required to avoid problems on Japanese systems
PDF_set_parameter(p, "hypertextencoding", "winansi")
PDF_set_info(p, "Creator", "businesscard.c")
PDF_set_info(p, "Author", "Thomas Merz")
PDF_set_info(p, "Title","PDFlib block processing sample (C)")
blockcontainer = PDF_open_pdi(p, infile, "", 0)
if blockcontainer == -1:
print "Error: " + PDF_get_errmsg(p) + "\n"
exit(2)
page = PDF_open_pdi_page(p, blockcontainer, 1, "")
if page == -1:
print "Error: " + PDF_get_errmsg(p) + "\n"
exit(2)
PDF_begin_page(p, 20, 20) # dummy page size
# This will adjust the page size to the block container's size.
PDF_fit_pdi_page(p, page, 0, 0, "adjustpage")
# Fill all text blocks with dynamic data
for i in range(0, BLOCKCOUNT, 1):
if PDF_fill_textblock(p, page, data_name[i], data_value[i], \
"embedding encoding=winansi") == -1:
print "Warning: " + PDF_get_errmsg(p) + "\n"
PDF_end_page(p) # close page */
PDF_close_pdi_page(p, page)
PDF_close(p) # close PDF document */
PDF_close_pdi(p, blockcontainer)
PDF_delete(p) # delete the PDFlib object

View File

@ -0,0 +1,95 @@
#!/usr/bin/python
# $Id: chartab.py,v 1.1 2004/10/06 17:46:43 laplace Exp $
#
# PDFlib client: hello character table in Python
#
from sys import *
from pdflib_py import *
# change these as required
fontname = "LuciduxSans-Oblique"
# This is where font/image/PDF input files live. Adjust as necessary.
searchpath = "../data"
# list of encodings to use
encoding = ["iso8859-1", "iso8859-2", "iso8859-15"]
# whether or not to embed the font
embed = ""
# embed = "not "
embedding = "embedding"
# embedding = ""
ENCODINGS = 3
FONTSIZE = 16
TOP = 700
LEFT = 50
YINCR = 2*FONTSIZE
XINCR = 2*FONTSIZE
# create a new PDFlib object
p = PDF_new()
# open new PDF file
if PDF_open_file(p, "chartab.pdf") == -1:
print "Error: " + PDF_get_errmsg(p) + "\n"
exit(2)
PDF_set_parameter(p, "openaction", "fitpage")
PDF_set_parameter(p, "fontwarning", "true")
PDF_set_parameter(p, "SearchPath", searchpath)
# This line is required to avoid problems on Japanese systems
PDF_set_parameter(p, "hypertextencoding", "winansi")
PDF_set_info(p, "Creator", "chartab.c")
PDF_set_info(p, "Author", "Thomas Merz")
PDF_set_info(p, "Title", "Character table (C)")
# loop over all encodings
for page in range(0, ENCODINGS, 1):
PDF_begin_page(p, 595, 842) # start a new page
# print the heading and generate the bookmark
font = PDF_load_font(p, "Helvetica", "winansi", "")
PDF_setfont(p, font, FONTSIZE)
buf = fontname + " (" + encoding[page] + ") " + embed + "embedded"
PDF_show_xy(p, buf, LEFT - XINCR, TOP + 3 * YINCR)
PDF_add_bookmark(p, buf, 0, 0)
# print the row and column captions
PDF_setfont(p, font, 2 * FONTSIZE/3)
for row in range(0, 16, 1):
buf = "x" + repr(row)
PDF_show_xy(p, buf, LEFT + row*XINCR, TOP + YINCR)
buf = "x" + repr(row)
PDF_show_xy(p, buf, LEFT - XINCR, TOP - row * YINCR)
# print the character table
font = PDF_load_font(p, fontname, encoding[page], embedding)
PDF_setfont(p, font, FONTSIZE)
y = TOP
x = LEFT
for row in range(0, 16, 1):
for col in range(0, 16, 1):
val = (16*row + col)
if val != 0:
buf = chr(val)
PDF_show_xy(p, buf, x, y)
x += XINCR
x = LEFT
y -= YINCR
PDF_end_page(p) # close page
PDF_close(p) # close PDF document
PDF_delete(p) # delete the PDFlib object

View File

@ -0,0 +1,37 @@
#!/usr/bin/python
# $Id: hello.py,v 1.1 2004/10/06 17:46:43 laplace Exp $
#
# PDFlib client: hello example in Python
#
from sys import *
from pdflib_py import *
# create a new PDFlib object
p = PDF_new()
# open new PDF file
if PDF_open_file(p, "hello.pdf") == -1:
print "Error: " + PDF_get_errmsg(p) + "\n"
exit(2)
# This line is required to avoid problems on Japanese systems
PDF_set_parameter(p, "hypertextencoding", "winansi")
PDF_set_info(p, "Author", "Thomas Merz")
PDF_set_info(p, "Creator", "hello.py")
PDF_set_info(p, "Title", "Hello world (Python)")
PDF_begin_page(p, 595, 842) # start a new page
font = PDF_load_font(p, "Helvetica-Bold", "winansi", "")
PDF_setfont(p, font, 24)
PDF_set_text_pos(p, 50, 700)
PDF_show(p, "Hello world!")
PDF_continue_text(p, "(says Python)")
PDF_end_page(p) # close page
PDF_close(p) # close PDF document
PDF_delete(p) # delete the PDFlib object

View File

@ -0,0 +1,45 @@
#!/usr/bin/python
# $Id: image.py,v 1.1 2004/10/06 17:46:43 laplace Exp $
#
# PDFlib client: image example in Python
#
from sys import *
from pdflib_py import *
imagefile = "nesrin.jpg"
# This is where font/image/PDF input files live. Adjust as necessary.
searchpath = "../data"
p = PDF_new()
if PDF_open_file(p, "image.pdf") == -1:
print "Error: " + PDF_get_errmsg(p) + "\n"
exit(2)
PDF_set_parameter(p, "SearchPath", searchpath)
# This line is required to avoid problems on Japanese systems
PDF_set_parameter(p, "hypertextencoding", "winansi")
PDF_set_info(p, "Creator", "image.py")
PDF_set_info(p, "Author", "Thomas Merz")
PDF_set_info(p, "Title", "image sample (Python)")
image = PDF_load_image(p, "auto", imagefile, "")
if image == -1:
print "Error: " + PDF_get_errmsg(p) + "\n"
exit(3)
# dummy page size, will be adjusted by PDF_fit_image()
PDF_begin_page(p, 10, 10)
PDF_fit_image(p, image, 0, 0, "adjustpage")
PDF_close_image(p, image)
PDF_end_page(p) # close page
PDF_close(p) # close PDF document
PDF_delete(p)

View File

@ -0,0 +1,161 @@
#!/usr/bin/python
# $Id: invoice.py,v 1.1 2004/10/06 17:46:44 laplace Exp $
#
# PDFlib client: invoice generation demo
#
from sys import *
import time
import fpformat
from pdflib_py import *
infile = "stationery.pdf"
# This is where font/image/PDF input files live. Adjust as necessary.
searchpath = "../data"
col1 = 55
col2 = 100
col3 = 330
col4 = 430
col5 = 530
fontsize = 12
pagewidth = 595
pageheight = 842
closingtext = \
"30 days warranty starting at the day of sale. " +\
"This warranty covers defects in workmanship only. " +\
"Kraxi Systems, Inc. will, at its option, repair or replace the " +\
"product under the warranty. This warranty is not transferable. " +\
"No returns or exchanges will be accepted for wet products."
data_name = [
"Super Kite",
"Turbo Flyer",
"Giga Trash",
"Bare Bone Kit",
"Nitty Gritty",
"Pretty Dark Flyer",
"Free Gift" ]
data_price = [ 20, 40, 180, 50, 20, 75, 0]
data_quantity = [ 2, 5, 1, 3, 10, 1, 1]
ARTICLECOUNT = 6
p = PDF_new()
PDF_set_parameter(p, "tracefile", "invoice.trace")
PDF_set_parameter(p, "debug", "t")
# open new PDF file
if PDF_open_file(p, "invoice.pdf") == -1:
print "Error: " + PDF_get_errmsg(p) + "\n"
exit(2)
PDF_set_parameter(p, "SearchPath", searchpath)
# This line is required to avoid problems on Japanese systems
PDF_set_parameter(p, "hypertextencoding", "winansi")
PDF_set_info(p, "Creator", "invoice.c")
PDF_set_info(p, "Author", "Thomas Merz")
PDF_set_info(p, "Title", "PDFlib invoice generation demo (C)")
form = PDF_open_pdi(p, infile, "", 0)
if form == -1:
print "Error: " + PDF_get_errmsg(p) + "\n"
exit(2)
page = PDF_open_pdi_page(p, form, 1, "")
if page == -1:
print "Error: " + PDF_get_errmsg(p) + "\n"
exit(2)
boldfont = PDF_load_font(p, "Helvetica-Bold", "winansi", "")
regularfont = PDF_load_font(p, "Helvetica", "winansi", "")
leading = fontsize + 2
# Establish coordinates with the origin in the upper left corner.
PDF_set_parameter(p, "topdown", "true")
PDF_begin_page(p, pagewidth, pageheight) # A4 page
PDF_fit_pdi_page(p, page, 0, pageheight, "")
PDF_close_pdi_page(p, page)
PDF_setfont(p, regularfont, fontsize)
# Print the address
y = 170
PDF_set_value(p, "leading", leading)
PDF_show_xy(p, "John Q. Doe", col1, y)
PDF_continue_text(p, "255 Customer Lane")
PDF_continue_text(p, "Suite B")
PDF_continue_text(p, "12345 User Town")
PDF_continue_text(p, "Everland")
# Print the header and date
PDF_setfont(p, boldfont, fontsize)
y = 300
PDF_show_xy(p, "INVOICE", col1, y)
buf = time.strftime("%x", time.gmtime(time.time()))
PDF_fit_textline(p, buf, col5, y, "position {100 0}")
# Print the invoice header line
PDF_setfont(p, boldfont, fontsize)
# "position {0 0}" is left-aligned, "position {100 0}" right-aligned
y = 370
PDF_fit_textline(p, "ITEM", col1, y, "position {0 0}")
PDF_fit_textline(p, "DESCRIPTION", col2, y, "position {0 0}")
PDF_fit_textline(p, "QUANTITY", col3, y, "position {100 0}")
PDF_fit_textline(p, "PRICE", col4, y, "position {100 0}")
PDF_fit_textline(p, "AMOUNT", col5, y, "position {100 0}")
# Print the article list
PDF_setfont(p, regularfont, fontsize)
y += 2*leading
total = 0
for i in range(0, ARTICLECOUNT, 1):
buf = repr(i)
i +=1
PDF_show_xy(p, buf, col1, y)
PDF_show_xy(p, data_name[i], col2, y)
buf = repr(data_quantity[i])
PDF_fit_textline(p, buf, col3, y, "position {100 0}")
buf = fpformat.fix(data_price[i], 2)
PDF_fit_textline(p, buf, col4, y, "position {100 0}")
sum = data_price[i] * data_quantity[i]
buf = fpformat.fix(sum, 2)
PDF_fit_textline(p, buf, col5, y, "position {100 0}")
y += leading
total += sum
y += leading
PDF_setfont(p, boldfont, fontsize)
buf = fpformat.fix(total, 2)
PDF_fit_textline(p, buf, col5, y, "position {100 0}")
# Print the closing text
y += 5*leading
PDF_setfont(p, regularfont, fontsize)
PDF_set_value(p, "leading", leading)
PDF_show_boxed(p, closingtext,
col1, y + 4*leading, col5-col1, 4*leading, "justify", "")
PDF_end_page(p)
PDF_close(p)
PDF_close_pdi(p, form)
PDF_delete(p)

View File

@ -0,0 +1,96 @@
#!/usr/bin/python
# $Id: pdfclock.py,v 1.1 2004/10/06 17:46:44 laplace Exp $
#
# PDFlib client: pdfclock example in Python
#
from sys import *
from time import *
from pdflib_py import *
RADIUS = 200.0
MARGIN = 20.0
p = PDF_new()
if PDF_open_file(p, "pdfclock.pdf") == -1:
print "Error: " + PDF_get_errmsg(p) + "\n"
exit(2)
# This line is required to avoid problems on Japanese systems
PDF_set_parameter(p, "hypertextencoding", "winansi")
PDF_set_info(p, "Creator", "pdfclock.py")
PDF_set_info(p, "Author", "Thomas Merz")
PDF_set_info(p, "Title", "PDF clock (Python)")
PDF_begin_page(p, 2 * (RADIUS + MARGIN), 2 * (RADIUS + MARGIN))
PDF_translate(p, RADIUS + MARGIN, RADIUS + MARGIN)
PDF_setcolor(p, "fillstroke", "rgb", 0.0, 0.0, 1.0, 0.0)
PDF_save(p)
# minute strokes
PDF_setlinewidth(p, 2.0)
for alpha in range(0, 360, 6):
PDF_rotate(p, 6.0)
PDF_moveto(p, RADIUS, 0.0)
PDF_lineto(p, RADIUS-MARGIN/3, 0.0)
PDF_stroke(p)
PDF_restore(p)
PDF_save(p)
# 5 minute strokes
PDF_setlinewidth(p, 3.0)
for alpha in range(0, 360, 30):
PDF_rotate(p, 30.0)
PDF_moveto(p, RADIUS, 0.0)
PDF_lineto(p, RADIUS-MARGIN, 0.0)
PDF_stroke(p)
(tm_year, tm_month, tm_day,
tm_hour, tm_min, tm_sec,
tm_weekday, tm_julian, tm_ds) = localtime(time())
# draw hour hand
PDF_save(p)
PDF_rotate(p, (-((tm_min/60.0) + tm_hour - 3.0) * 30.0))
PDF_moveto(p, -RADIUS/10, -RADIUS/20)
PDF_lineto(p, RADIUS/2, 0.0)
PDF_lineto(p, -RADIUS/10, RADIUS/20)
PDF_closepath(p)
PDF_fill(p)
PDF_restore(p)
# draw minute hand
PDF_save(p)
PDF_rotate(p, (-((tm_sec/60.0) + tm_min - 15.0) * 6.0))
PDF_moveto(p, -RADIUS/10, -RADIUS/20)
PDF_lineto(p, RADIUS * 0.8, 0.0)
PDF_lineto(p, -RADIUS/10, RADIUS/20)
PDF_closepath(p)
PDF_fill(p)
PDF_restore(p)
# draw second hand
PDF_setcolor(p, "fillstroke", "rgb", 1.0, 0.0, 0.0, 0.0)
PDF_setlinewidth(p, 2)
PDF_save(p)
PDF_rotate(p, -((tm_sec - 15.0) * 6.0))
PDF_moveto(p, -RADIUS/5, 0.0)
PDF_lineto(p, RADIUS, 0.0)
PDF_stroke(p)
PDF_restore(p)
# draw little circle at center
PDF_circle(p, 0, 0, RADIUS/30)
PDF_fill(p)
PDF_restore(p)
PDF_end_page(p)
PDF_close(p)
PDF_delete(p) # delete the PDFlib object

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More