#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "php.h"
#include "php_ini.h"
#include "php_globals.h"
#include "zend_list.h"
#include "ext/standard/head.h"
#include "ext/standard/info.h"
#include "ext/standard/file.h"
#include "php_streams.h"
#if HAVE_LIBGD13
#include "ext/gd/php_gd.h"
#if HAVE_GD_BUNDLED
#include "ext/gd/libgd/gd.h"
#else
#include "gd.h"
#endif
static int le_gd;
#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#ifdef PHP_WIN32
# include <io.h>
# include <fcntl.h>
#endif
#if HAVE_PDFLIB
#include "php_pdf.h"
static int le_pdf;
#define PDFLIB_IMAGE_OFFSET 1
#define PDFLIB_FONT_OFFSET 1
#define PDFLIB_PDI_OFFSET 1
#define PDFLIB_PATTERN_OFFSET 1
#define PDFLIB_SPOT_OFFSET 1
function_entry pdf_functions[] = {
PHP_FE(pdf_new, NULL)
PHP_FE(pdf_delete, NULL)
PHP_FE(pdf_open_file, NULL)
PHP_FE(pdf_get_buffer, NULL)
PHP_FE(pdf_close, NULL)
PHP_FE(pdf_begin_page, NULL)
PHP_FE(pdf_end_page, NULL)
PHP_FE(pdf_get_majorversion, NULL)
PHP_FE(pdf_get_minorversion, NULL)
PHP_FE(pdf_get_value, NULL)
PHP_FE(pdf_set_value, NULL)
PHP_FE(pdf_get_parameter, NULL)
PHP_FE(pdf_set_parameter, NULL)
PHP_FE(pdf_findfont, NULL)
PHP_FE(pdf_setfont, NULL)
PHP_FE(pdf_show, NULL)
PHP_FE(pdf_show_xy, NULL)
PHP_FE(pdf_continue_text, NULL)
PHP_FE(pdf_show_boxed, NULL)
PHP_FE(pdf_stringwidth, NULL)
PHP_FE(pdf_set_text_pos, NULL)
PHP_FE(pdf_setdash, NULL)
PHP_FE(pdf_setpolydash, NULL)
PHP_FE(pdf_setflat, NULL)
PHP_FE(pdf_setlinejoin, NULL)
PHP_FE(pdf_setlinecap, NULL)
PHP_FE(pdf_setmiterlimit, NULL)
PHP_FE(pdf_setlinewidth, NULL)
PHP_FE(pdf_save, NULL)
PHP_FE(pdf_restore, NULL)
PHP_FE(pdf_translate, NULL)
PHP_FE(pdf_scale, NULL)
PHP_FE(pdf_rotate, NULL)
PHP_FE(pdf_skew, NULL)
PHP_FE(pdf_concat, NULL)
PHP_FE(pdf_moveto, NULL)
PHP_FE(pdf_lineto, NULL)
PHP_FE(pdf_curveto, NULL)
PHP_FE(pdf_circle, NULL)
PHP_FE(pdf_arc, NULL)
PHP_FE(pdf_rect, NULL)
PHP_FE(pdf_closepath, NULL)
PHP_FE(pdf_stroke, NULL)
PHP_FE(pdf_closepath_stroke, NULL)
PHP_FE(pdf_fill, NULL)
PHP_FE(pdf_fill_stroke, NULL)
PHP_FE(pdf_closepath_fill_stroke, NULL)
PHP_FE(pdf_clip, NULL)
PHP_FE(pdf_endpath, NULL)
PHP_FE(pdf_open_image_file, NULL)
PHP_FE(pdf_open_ccitt, NULL)
PHP_FE(pdf_open_image, NULL)
PHP_FE(pdf_close_image, NULL)
PHP_FE(pdf_place_image, NULL)
PHP_FE(pdf_add_bookmark, NULL)
PHP_FE(pdf_set_info, NULL)
PHP_FE(pdf_attach_file, NULL)
PHP_FE(pdf_add_note, NULL)
PHP_FE(pdf_add_pdflink, NULL)
PHP_FE(pdf_add_locallink, NULL)
PHP_FE(pdf_add_launchlink, NULL)
PHP_FE(pdf_add_weblink, NULL)
PHP_FE(pdf_set_border_style, NULL)
PHP_FE(pdf_set_border_color, NULL)
PHP_FE(pdf_set_border_dash, NULL)
PHP_FALIAS(pdf_add_outline, pdf_add_bookmark, NULL)
PHP_FE(pdf_set_font, NULL)
PHP_FE(pdf_get_font, NULL)
PHP_FE(pdf_get_fontname, NULL)
PHP_FE(pdf_get_fontsize, NULL)
PHP_FE(pdf_open, NULL)
PHP_FE(pdf_set_info_creator, NULL)
PHP_FE(pdf_set_info_title, NULL)
PHP_FE(pdf_set_info_subject, NULL)
PHP_FE(pdf_set_info_author, NULL)
PHP_FE(pdf_set_info_keywords, NULL)
PHP_FE(pdf_set_leading, NULL)
PHP_FE(pdf_set_text_rendering, NULL)
PHP_FE(pdf_set_horiz_scaling, NULL)
PHP_FE(pdf_set_text_rise, NULL)
PHP_FE(pdf_set_char_spacing, NULL)
PHP_FE(pdf_set_word_spacing, NULL)
PHP_FE(pdf_set_transition, NULL)
PHP_FE(pdf_set_duration, NULL)
PHP_FE(pdf_get_image_height, NULL)
PHP_FE(pdf_get_image_width, NULL)
PHP_FE(pdf_open_jpeg, NULL)
PHP_FE(pdf_open_tiff, NULL)
PHP_FE(pdf_open_png, NULL)
PHP_FE(pdf_open_gif, NULL)
PHP_FE(pdf_add_annotation, NULL)
#if HAVE_LIBGD13
PHP_FE(pdf_open_memory_image, NULL)
#endif
PHP_FE(pdf_setgray_fill, NULL)
PHP_FE(pdf_setgray_stroke, NULL)
PHP_FE(pdf_setgray, NULL)
PHP_FE(pdf_setrgbcolor_fill, NULL)
PHP_FE(pdf_setrgbcolor_stroke, NULL)
PHP_FE(pdf_setrgbcolor, NULL)
#if (PDFLIB_MAJORVERSION >= 4)
PHP_FE(pdf_open_pdi, NULL)
PHP_FE(pdf_close_pdi, NULL)
PHP_FE(pdf_open_pdi_page, NULL)
PHP_FE(pdf_place_pdi_page, NULL)
PHP_FE(pdf_close_pdi_page, NULL)
PHP_FE(pdf_get_pdi_parameter, NULL)
PHP_FE(pdf_get_pdi_value, NULL)
PHP_FE(pdf_begin_pattern, NULL)
PHP_FE(pdf_end_pattern, NULL)
PHP_FE(pdf_begin_template, NULL)
PHP_FE(pdf_end_template, NULL)
PHP_FE(pdf_setcolor, NULL)
PHP_FE(pdf_makespotcolor, NULL)
PHP_FE(pdf_arcn, NULL)
PHP_FE(pdf_add_thumbnail, NULL)
PHP_FE(pdf_initgraphics, NULL)
PHP_FE(pdf_setmatrix, NULL)
#endif
{NULL, NULL, NULL}
};
zend_module_entry pdf_module_entry = {
STANDARD_MODULE_HEADER,
"pdf",
pdf_functions,
PHP_MINIT(pdf),
PHP_MSHUTDOWN(pdf),
NULL,
NULL,
PHP_MINFO(pdf),
NO_VERSION_YET,
STANDARD_MODULE_PROPERTIES
};
#ifdef COMPILE_DL_PDF
ZEND_GET_MODULE(pdf)
#endif
static void _free_pdf_doc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
{
PDF *pdf = (PDF *)rsrc->ptr;
PDF_delete(pdf);
}
static void custom_errorhandler(PDF *p, int type, const char *shortmsg)
{
switch (type){
case PDF_NonfatalError:
php_error(E_WARNING,"Internal PDFlib warning: %s", shortmsg);
return;
case PDF_MemoryError:
case PDF_IOError:
case PDF_RuntimeError:
case PDF_IndexError:
case PDF_TypeError:
case PDF_DivisionByZero:
case PDF_OverflowError:
case PDF_SyntaxError:
case PDF_ValueError:
case PDF_SystemError:
case PDF_UnknownError:
default:
php_error(E_ERROR,"PDFlib error: %s", shortmsg);
}
}
static void *pdf_emalloc(PDF *p, size_t size, const char *caller)
{
return(emalloc(size));
}
static void *pdf_realloc(PDF *p, void *mem, size_t size, const char *caller)
{
return(erealloc(mem, size));
}
static void pdf_efree(PDF *p, void *mem)
{
efree(mem);
}
static size_t pdf_flushwrite(PDF *p, void *data, size_t size)
{
TSRMLS_FETCH();
return(php_write(data, size TSRMLS_CC));
}
PHP_MINFO_FUNCTION(pdf)
{
char tmp[32];
snprintf(tmp, 31, "%d.%02d", PDF_get_majorversion(), PDF_get_minorversion() );
tmp[31]=0;
php_info_print_table_start();
php_info_print_table_row(2, "PDF Support", "enabled" );
#if (PDFLIB_MAJORVERSION >= 4)
php_info_print_table_row(2, "PDFlib GmbH Version", PDFLIB_VERSIONSTRING );
#else
php_info_print_table_row(2, "PDFlib GmbH Version", tmp );
#endif
php_info_print_table_row(2, "Revision", "$Revision: 1.112.2.11.2.2 $" );
php_info_print_table_end();
}
PHP_MINIT_FUNCTION(pdf)
{
if ((PDF_get_majorversion() != PDFLIB_MAJORVERSION) ||
(PDF_get_minorversion() != PDFLIB_MINORVERSION)) {
php_error(E_ERROR,"PDFlib error: Version mismatch in wrapper code");
}
le_pdf = zend_register_list_destructors_ex(_free_pdf_doc, NULL, "pdf object", module_number);
PDF_boot();
return SUCCESS;
}
PHP_MSHUTDOWN_FUNCTION(pdf)
{
PDF_shutdown();
return SUCCESS;
}
static void _php_pdf_set_info(INTERNAL_FUNCTION_PARAMETERS, char *field)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
PDF_set_info(pdf, field, Z_STRVAL_PP(arg2));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_set_info)
{
zval **arg1, **arg2, **arg3;
PDF *pdf;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
convert_to_string_ex(arg3);
PDF_set_info(pdf, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_set_info_creator)
{
_php_pdf_set_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, "Creator");
}
PHP_FUNCTION(pdf_set_info_title)
{
_php_pdf_set_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, "Title");
}
PHP_FUNCTION(pdf_set_info_subject)
{
_php_pdf_set_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, "Subject");
}
PHP_FUNCTION(pdf_set_info_author)
{
_php_pdf_set_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, "Author");
}
PHP_FUNCTION(pdf_set_info_keywords)
{
_php_pdf_set_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, "Keywords");
}
PHP_FUNCTION(pdf_open)
{
zval **file;
FILE *fp = NULL;
PDF *pdf;
int argc = ZEND_NUM_ARGS();
if(argc > 1) {
WRONG_PARAM_COUNT;
} else if (argc != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {
fp = NULL;
} else {
php_stream *stream;
php_stream_from_zval(stream, file);
if (php_stream_cast(stream, PHP_STREAM_AS_STDIO, (void*)&fp, 1) == FAILURE) {
RETURN_FALSE;
}
}
pdf = PDF_new2(custom_errorhandler, pdf_emalloc, pdf_realloc, pdf_efree, NULL);
if(fp) {
if (PDF_open_fp(pdf, fp) < 0) {
RETURN_FALSE;
}
} else {
PDF_open_mem(pdf, pdf_flushwrite);
}
#if (PDFLIB_MAJORVERSION >= 4)
PDF_set_parameter(pdf, "imagewarning", "true");
#endif
PDF_set_parameter(pdf, "binding", "PHP");
ZEND_REGISTER_RESOURCE(return_value, pdf, le_pdf);
}
PHP_FUNCTION(pdf_close)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
PDF_close(pdf);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_begin_page)
{
zval **arg1, **arg2, **arg3;
PDF *pdf;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
PDF_begin_page(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_end_page)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
PDF_end_page(pdf);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_show)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
PDF_show2(pdf, Z_STRVAL_PP(arg2), Z_STRLEN_PP(arg2));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_show_xy)
{
zval **arg1, **arg2, **arg3, **arg4;
PDF *pdf;
if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
PDF_show_xy2(pdf, Z_STRVAL_PP(arg2), Z_STRLEN_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_show_boxed)
{
zval **argv[8];
int argc = ZEND_NUM_ARGS();
int nr;
char *feature;
PDF *pdf;
if (((argc < 7) || (argc > 8)) || zend_get_parameters_array_ex(argc, argv) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, argv[0], -1, "pdf object", le_pdf);
convert_to_string_ex(argv[1]);
convert_to_double_ex(argv[2]);
convert_to_double_ex(argv[3]);
convert_to_double_ex(argv[4]);
convert_to_double_ex(argv[5]);
convert_to_string_ex(argv[6]);
if(argc == 8) {
convert_to_string_ex(argv[7]);
feature = Z_STRVAL_PP(argv[7]);
} else {
feature = NULL;
}
nr = PDF_show_boxed(pdf, Z_STRVAL_PP(argv[1]),
(float) Z_DVAL_PP(argv[2]),
(float) Z_DVAL_PP(argv[3]),
(float) Z_DVAL_PP(argv[4]),
(float) Z_DVAL_PP(argv[5]),
Z_STRVAL_PP(argv[6]),
feature);
RETURN_LONG(nr);
}
PHP_FUNCTION(pdf_set_font)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5;
int font, embed;
PDF *pdf;
switch (ZEND_NUM_ARGS()) {
case 4:
if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
WRONG_PARAM_COUNT;
}
embed = 0;
break;
case 5:
if (zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(arg5);
embed = Z_LVAL_PP(arg5);
break;
default:
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
convert_to_double_ex(arg3);
convert_to_string_ex(arg4);
font = PDF_findfont(pdf, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg4), embed);
if (font == -1) {
php_error(E_WARNING,"Font %s not found", Z_STRVAL_PP(arg2));
RETURN_FALSE;
}
PDF_setfont(pdf, font, (float) Z_DVAL_PP(arg3));
RETURN_TRUE;
}
static void _php_pdf_set_value(INTERNAL_FUNCTION_PARAMETERS, char *field)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
PDF_set_value(pdf, field, (float)Z_DVAL_PP(arg2));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_set_value)
{
zval **arg1, **arg2, **arg3;
PDF *pdf;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
convert_to_double_ex(arg3);
PDF_set_value(pdf, Z_STRVAL_PP(arg2), (float)Z_DVAL_PP(arg3));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_get_value)
{
zval **argv[3];
int argc = ZEND_NUM_ARGS();
PDF *pdf;
double value;
if(((argc < 2) || (argc > 3)) || zend_get_parameters_array_ex(argc, argv) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, argv[0], -1, "pdf object", le_pdf);
convert_to_string_ex(argv[1]);
if(argc == 3)
convert_to_double_ex(argv[2]);
if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "imagewidth"))) {
if(argc < 3) WRONG_PARAM_COUNT;
value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2])-PDFLIB_IMAGE_OFFSET);
} else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "imageheight"))) {
if(argc < 3) WRONG_PARAM_COUNT;
value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2])-PDFLIB_IMAGE_OFFSET);
} else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "resx"))) {
if(argc < 3) WRONG_PARAM_COUNT;
value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2])-PDFLIB_IMAGE_OFFSET);
} else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "resy"))) {
if(argc < 3) WRONG_PARAM_COUNT;
value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2])-PDFLIB_IMAGE_OFFSET);
} else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "capheight"))) {
if(argc < 3) WRONG_PARAM_COUNT;
value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2])-PDFLIB_FONT_OFFSET);
} else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "ascender"))) {
if(argc < 3) WRONG_PARAM_COUNT;
value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2])-PDFLIB_FONT_OFFSET);
} else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "descender"))) {
if(argc < 3) WRONG_PARAM_COUNT;
value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2])-PDFLIB_FONT_OFFSET);
} else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "font"))) {
value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), 0.0)+PDFLIB_FONT_OFFSET;
} else {
if(argc < 3) {
value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), 0.0);
} else {
value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2]));
}
}
RETURN_DOUBLE(value);
}
PHP_FUNCTION(pdf_get_font)
{
zval **arg1;
int font;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
font = (int) PDF_get_value(pdf, "font", 0);
RETURN_LONG(font+PDFLIB_FONT_OFFSET);
}
PHP_FUNCTION(pdf_get_fontname)
{
zval **arg1;
char *fontname;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
fontname = (char *) PDF_get_parameter(pdf, "fontname", 0);
RETURN_STRING(fontname, 1);
}
PHP_FUNCTION(pdf_get_fontsize)
{
zval **arg1;
float fontsize;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
fontsize = PDF_get_value(pdf, "fontsize", 0);
RETURN_DOUBLE(fontsize);
}
PHP_FUNCTION(pdf_set_leading)
{
_php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "leading");
}
PHP_FUNCTION(pdf_set_text_rendering)
{
_php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "textrendering");
}
PHP_FUNCTION(pdf_set_horiz_scaling)
{
_php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "horizscaling");
}
PHP_FUNCTION(pdf_set_text_rise)
{
_php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "textrise");
}
PHP_FUNCTION(pdf_set_char_spacing)
{
_php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "charspacing");
}
PHP_FUNCTION(pdf_set_word_spacing)
{
_php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "wordspacing");
}
PHP_FUNCTION(pdf_set_text_pos)
{
zval **arg1, **arg2, **arg3;
PDF *pdf;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
PDF_set_text_pos(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_continue_text)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
PDF_continue_text2(pdf, Z_STRVAL_PP(arg2), Z_STRLEN_PP(arg2));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_stringwidth)
{
zval **arg1, **arg2, **arg3, **arg4;
int font;
double width, size;
PDF *pdf;
switch (ZEND_NUM_ARGS()) {
case 2:
if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
WRONG_PARAM_COUNT;
break;
case 4:
if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE)
WRONG_PARAM_COUNT;
convert_to_long_ex(arg3);
break;
default:
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
if (ZEND_NUM_ARGS() == 2) {
font = (int)PDF_get_value(pdf, "font", 0)+PDFLIB_FONT_OFFSET;
size = PDF_get_value(pdf, "fontsize", 0);
} else {
convert_to_long_ex(arg3);
font = Z_LVAL_PP(arg3);
convert_to_double_ex(arg4);
size = Z_DVAL_PP(arg4);
}
width = (double) PDF_stringwidth2(pdf,
Z_STRVAL_PP(arg2),
Z_STRLEN_PP(arg2),
font-PDFLIB_FONT_OFFSET,
(float)size);
RETURN_DOUBLE((double) width);
}
PHP_FUNCTION(pdf_save)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
PDF_save(pdf);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_restore)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
PDF_restore(pdf);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_translate)
{
zval **arg1, **arg2, **arg3;
PDF *pdf;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
PDF_translate(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_scale)
{
zval **arg1, **arg2, **arg3;
PDF *pdf;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
PDF_scale(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_rotate)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
PDF_rotate(pdf, (float) Z_DVAL_PP(arg2));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_skew)
{
zval **arg1, **arg2, **arg3;
PDF *pdf;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
PDF_skew(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_setflat)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
PDF_setflat(pdf, (float) Z_DVAL_PP(arg2));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_setlinejoin)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
PDF_setlinejoin(pdf, Z_LVAL_PP(arg2));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_setlinecap)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
PDF_setlinecap(pdf, Z_LVAL_PP(arg2));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_setmiterlimit)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
PDF_setmiterlimit(pdf, (float) Z_DVAL_PP(arg2));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_setlinewidth)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
PDF_setlinewidth(pdf, (float) Z_DVAL_PP(arg2));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_setdash)
{
zval **arg1, **arg2, **arg3;
PDF *pdf;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
PDF_setdash(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_moveto)
{
zval **arg1, **arg2, **arg3;
PDF *pdf;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
PDF_moveto(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_curveto)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
PDF *pdf;
if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
convert_to_double_ex(arg5);
convert_to_double_ex(arg6);
convert_to_double_ex(arg7);
PDF_curveto(pdf, (float) Z_DVAL_PP(arg2),
(float) Z_DVAL_PP(arg3),
(float) Z_DVAL_PP(arg4),
(float) Z_DVAL_PP(arg5),
(float) Z_DVAL_PP(arg6),
(float) Z_DVAL_PP(arg7));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_lineto)
{
zval **arg1, **arg2, **arg3;
PDF *pdf;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
PDF_lineto(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_circle)
{
zval **arg1, **arg2, **arg3, **arg4;
PDF *pdf;
if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
PDF_circle(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_arc)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
PDF *pdf;
if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
convert_to_double_ex(arg5);
convert_to_double_ex(arg6);
PDF_arc(pdf, (float) Z_DVAL_PP(arg2),
(float) Z_DVAL_PP(arg3),
(float) Z_DVAL_PP(arg4),
(float) Z_DVAL_PP(arg5),
(float) Z_DVAL_PP(arg6));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_rect)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5;
PDF *pdf;
if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
convert_to_double_ex(arg5);
PDF_rect(pdf, (float) Z_DVAL_PP(arg2),
(float) Z_DVAL_PP(arg3),
(float) Z_DVAL_PP(arg4),
(float) Z_DVAL_PP(arg5));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_closepath)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
PDF_closepath(pdf);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_closepath_stroke)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
PDF_closepath_stroke(pdf);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_stroke)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
PDF_stroke(pdf);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_fill)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
PDF_fill(pdf);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_fill_stroke)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
PDF_fill_stroke(pdf);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_closepath_fill_stroke)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
PDF_closepath_fill_stroke(pdf);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_endpath)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
PDF_endpath(pdf);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_clip)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
PDF_clip(pdf);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_set_parameter)
{
zval **arg1, **arg2, **arg3;
PDF *pdf;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
convert_to_string_ex(arg3);
PDF_set_parameter(pdf, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_get_parameter)
{
zval **argv[3];
int argc = ZEND_NUM_ARGS();
PDF *pdf;
char *value;
if(((argc < 2) || (argc > 3)) || zend_get_parameters_array_ex(argc, argv) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, argv[0], -1, "pdf object", le_pdf);
convert_to_string_ex(argv[1]);
if(argc == 3) {
convert_to_double_ex(argv[2]);
value = (char *) PDF_get_parameter(pdf, Z_STRVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]));
} else {
value = (char *) PDF_get_parameter(pdf, Z_STRVAL_PP(argv[1]), 0.0);
}
RETURN_STRING(value, 1);
}
PHP_FUNCTION(pdf_setgray_fill)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
#if (PDFLIB_MAJORVERSION >= 4)
PDF_setcolor(pdf, "fill", "gray", (float) Z_DVAL_PP(arg2), 0, 0, 0);
#else
PDF_setgray_fill(pdf, (float) Z_DVAL_PP(arg2));
#endif
RETURN_TRUE;
}
PHP_FUNCTION(pdf_setgray_stroke)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
#if (PDFLIB_MAJORVERSION >= 4)
PDF_setcolor(pdf, "stroke", "gray", (float) Z_DVAL_PP(arg2), 0, 0, 0);
#else
PDF_setgray_stroke(pdf, (float) Z_DVAL_PP(arg2));
#endif
RETURN_TRUE;
}
PHP_FUNCTION(pdf_setgray)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
#if (PDFLIB_MAJORVERSION >= 4)
PDF_setcolor(pdf, "both", "gray", (float) Z_DVAL_PP(arg2), 0, 0, 0);
#else
PDF_setgray(pdf, (float) Z_DVAL_PP(arg2));
#endif
RETURN_TRUE;
}
PHP_FUNCTION(pdf_setrgbcolor_fill)
{
zval **arg1, **arg2, **arg3, **arg4;
PDF *pdf;
if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
#if (PDFLIB_MAJORVERSION >= 4)
PDF_setcolor(pdf, "fill", "rgb", (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4), 0);
#else
PDF_setrgbcolor_fill(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4));
#endif
RETURN_TRUE;
}
PHP_FUNCTION(pdf_setrgbcolor_stroke)
{
zval **arg1, **arg2, **arg3, **arg4;
PDF *pdf;
if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
#if (PDFLIB_MAJORVERSION >= 4)
PDF_setcolor(pdf, "stroke", "rgb", (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4), 0);
#else
PDF_setrgbcolor_stroke(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4));
#endif
RETURN_TRUE;
}
PHP_FUNCTION(pdf_setrgbcolor)
{
zval **arg1, **arg2, **arg3, **arg4;
PDF *pdf;
if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
#if (PDFLIB_MAJORVERSION >= 4)
PDF_setcolor(pdf, "both", "rgb", (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4), 0);
#else
PDF_setrgbcolor(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4));
#endif
RETURN_TRUE;
}
PHP_FUNCTION(pdf_add_bookmark)
{
zval **arg1, **arg2, **arg3, **arg4;
int parentid, open, id;
PDF *pdf;
switch (ZEND_NUM_ARGS()) {
case 2:
if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
break;
case 3:
if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
break;
case 4:
if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
WRONG_PARAM_COUNT;
}
break;
default:
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
if (ZEND_NUM_ARGS() > 2) {
convert_to_long_ex(arg3);
parentid = Z_LVAL_PP(arg3);
if (ZEND_NUM_ARGS() > 3) {
convert_to_long_ex(arg4);
open = Z_LVAL_PP(arg4);
} else {
open = 0;
}
} else {
parentid = 0;
open = 0;
}
id = PDF_add_bookmark(pdf, Z_STRVAL_PP(arg2), parentid, open);
RETURN_LONG(id);
}
PHP_FUNCTION(pdf_set_transition)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
switch(Z_LVAL_PP(arg2)) {
case 0:
PDF_set_parameter(pdf, "transition", "none");
break;
case 1:
PDF_set_parameter(pdf, "transition", "split");
break;
case 2:
PDF_set_parameter(pdf, "transition", "blinds");
break;
case 3:
PDF_set_parameter(pdf, "transition", "box");
break;
case 4:
PDF_set_parameter(pdf, "transition", "wipe");
break;
case 5:
PDF_set_parameter(pdf, "transition", "dissolve");
break;
case 6:
PDF_set_parameter(pdf, "transition", "glitter");
break;
case 7:
PDF_set_parameter(pdf, "transition", "replace");
break;
default:
PDF_set_parameter(pdf, "transition", "none");
}
RETURN_TRUE;
}
PHP_FUNCTION(pdf_set_duration)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
PDF_set_value(pdf, "duration", (float) Z_DVAL_PP(arg2));
RETURN_TRUE;
}
static void _php_pdf_open_image(INTERNAL_FUNCTION_PARAMETERS, char *type)
{
zval **arg1, **arg2;
PDF *pdf;
int pdf_image;
char *image;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
#ifdef VIRTUAL_DIR
virtual_filepath(Z_STRVAL_PP(arg2), &image TSRMLS_CC);
#else
image = Z_STRVAL_PP(arg2);
#endif
if (php_check_open_basedir(image TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(image, "rb+", CHECKUID_CHECK_MODE_PARAM))) {
RETURN_FALSE;
}
pdf_image = PDF_open_image_file(pdf, type, image, "", 0);
RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
}
PHP_FUNCTION(pdf_open_gif)
{
_php_pdf_open_image(INTERNAL_FUNCTION_PARAM_PASSTHRU,"gif");
}
PHP_FUNCTION(pdf_open_jpeg)
{
_php_pdf_open_image(INTERNAL_FUNCTION_PARAM_PASSTHRU,"jpeg");
}
PHP_FUNCTION(pdf_open_png)
{
_php_pdf_open_image(INTERNAL_FUNCTION_PARAM_PASSTHRU,"png");
}
PHP_FUNCTION(pdf_open_tiff)
{
_php_pdf_open_image(INTERNAL_FUNCTION_PARAM_PASSTHRU,"tiff");
}
PHP_FUNCTION(pdf_open_image_file)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5;
PDF *pdf;
int pdf_image, argc;
char *image;
char *stringparam;
int intparam;
switch ((argc = ZEND_NUM_ARGS())) {
case 3:
if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
WRONG_PARAM_COUNT;
break;
case 5:
if (zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE)
WRONG_PARAM_COUNT;
break;
default:
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
convert_to_string_ex(arg3);
#ifdef VIRTUAL_DIR
virtual_filepath(Z_STRVAL_PP(arg3), &image TSRMLS_CC);
#else
image = Z_STRVAL_PP(arg3);
#endif
if (php_check_open_basedir(image TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(image, "rb+", CHECKUID_CHECK_MODE_PARAM))) {
RETURN_FALSE;
}
if (argc == 3) {
pdf_image = PDF_open_image_file(pdf, Z_STRVAL_PP(arg2), image, "", 0);
} else {
convert_to_string_ex(arg4);
convert_to_long_ex(arg5);
stringparam = Z_STRVAL_PP(arg4);
intparam = Z_LVAL_PP(arg5);
if (!strcmp(stringparam, "masked"))
intparam -= PDFLIB_IMAGE_OFFSET;
pdf_image = PDF_open_image_file(pdf, Z_STRVAL_PP(arg2), image, stringparam, intparam);
}
if (pdf_image == -1) {
RETURN_FALSE;
}
RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
}
#if HAVE_LIBGD13
PHP_FUNCTION(pdf_open_memory_image)
{
zval **arg1, **arg2;
int i, j, color;
int pdf_image;
gdImagePtr im;
unsigned char *buffer, *ptr;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
ZEND_GET_RESOURCE_TYPE_ID(le_gd,"gd");
if(!le_gd)
{
php_error(E_ERROR, "Unable to find handle for GD image stream. Please check the GD extension is loaded.");
}
ZEND_FETCH_RESOURCE(im, gdImagePtr, arg2, -1, "Image", le_gd);
buffer = (unsigned char *) safe_emalloc(3 * im->sx, im->sy, 0);
ptr = buffer;
for(i=0; i<im->sy; i++) {
for(j=0; j<im->sx; j++) {
#if HAVE_LIBGD20
if(gdImageTrueColor(im)) {
if (im->tpixels && gdImageBoundsSafe(im, j, i)) {
color = gdImageTrueColorPixel(im, j, i);
*ptr++ = (color >> 16) & 0xFF;
*ptr++ = (color >> 8) & 0xFF;
*ptr++ = color & 0xFF;
}
} else {
#endif
if (im->pixels && gdImageBoundsSafe(im, j, i)) {
color = im->pixels[i][j];
*ptr++ = im->red[color];
*ptr++ = im->green[color];
*ptr++ = im->blue[color];
}
#if HAVE_LIBGD20
}
#endif
}
}
pdf_image = PDF_open_image(pdf, "raw", "memory", buffer, im->sx*im->sy*3, im->sx, im->sy, 3, 8, NULL);
efree(buffer);
if(pdf_image == -1) {
efree(buffer);
RETURN_FALSE;
}
RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
}
#endif
PHP_FUNCTION(pdf_close_image)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
PDF_close_image(pdf, Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET);
}
PHP_FUNCTION(pdf_place_image)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5;
PDF *pdf;
if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
convert_to_double_ex(arg5);
PDF_place_image(pdf, Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET, (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4), (float) Z_DVAL_PP(arg5));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_get_image_width)
{
zval **arg1, **arg2;
PDF *pdf;
int width;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
width = (int) PDF_get_value(pdf, "imagewidth", (float)Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET);
RETURN_LONG(width);
}
PHP_FUNCTION(pdf_get_image_height)
{
zval **arg1, **arg2;
PDF *pdf;
int height;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
height = (int) PDF_get_value(pdf, "imageheight", (float)Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET);
RETURN_LONG(height);
}
PHP_FUNCTION(pdf_add_weblink)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
PDF *pdf;
if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
convert_to_double_ex(arg5);
convert_to_string_ex(arg6);
PDF_add_weblink(pdf, (float) Z_DVAL_PP(arg2),
(float) Z_DVAL_PP(arg3),
(float) Z_DVAL_PP(arg4),
(float) Z_DVAL_PP(arg5),
Z_STRVAL_PP(arg6));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_add_pdflink)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8;
PDF *pdf;
if (ZEND_NUM_ARGS() != 8 || zend_get_parameters_ex(8, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
convert_to_double_ex(arg5);
convert_to_string_ex(arg6);
convert_to_long_ex(arg7);
convert_to_string_ex(arg8);
PDF_add_pdflink(pdf, (float) Z_DVAL_PP(arg2),
(float) Z_DVAL_PP(arg3),
(float) Z_DVAL_PP(arg4),
(float) Z_DVAL_PP(arg5),
Z_STRVAL_PP(arg6),
Z_LVAL_PP(arg7),
Z_STRVAL_PP(arg8));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_set_border_style)
{
zval **arg1, **arg2, **arg3;
PDF *pdf;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
convert_to_double_ex(arg3);
PDF_set_border_style(pdf, Z_STRVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_set_border_color)
{
zval **arg1, **arg2, **arg3, **arg4;
PDF *pdf;
if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
PDF_set_border_color(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_set_border_dash)
{
zval **arg1, **arg2, **arg3;
PDF *pdf;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
PDF_set_border_dash(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_add_annotation)
{
zval **argv[7];
PDF *pdf;
if(ZEND_NUM_ARGS() != 7 || zend_get_parameters_array_ex(7, argv) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, argv[0], -1, "pdf object", le_pdf);
convert_to_double_ex(argv[1]);
convert_to_double_ex(argv[2]);
convert_to_double_ex(argv[3]);
convert_to_double_ex(argv[4]);
convert_to_string_ex(argv[5]);
convert_to_string_ex(argv[6]);
PDF_add_note(pdf, (float) Z_DVAL_PP(argv[1]),
(float) Z_DVAL_PP(argv[2]),
(float) Z_DVAL_PP(argv[3]),
(float) Z_DVAL_PP(argv[4]),
Z_STRVAL_PP(argv[6]),
Z_STRVAL_PP(argv[5]),
"note", 1);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_new)
{
PDF *pdf;
pdf = PDF_new2(custom_errorhandler, pdf_emalloc, pdf_realloc, pdf_efree, NULL);
#if (PDFLIB_MAJORVERSION >= 4)
PDF_set_parameter(pdf, "imagewarning", "true");
#endif
PDF_set_parameter(pdf, "binding", "PHP");
ZEND_REGISTER_RESOURCE(return_value, pdf, le_pdf);
}
PHP_FUNCTION(pdf_get_majorversion)
{
if (ZEND_NUM_ARGS() != 0) {
WRONG_PARAM_COUNT;
}
RETURN_LONG(PDF_get_majorversion());
}
PHP_FUNCTION(pdf_get_minorversion)
{
if (ZEND_NUM_ARGS() != 0) {
WRONG_PARAM_COUNT;
}
RETURN_LONG(PDF_get_minorversion());
}
PHP_FUNCTION(pdf_delete)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
zend_list_delete(Z_RESVAL_PP(arg1));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_open_file)
{
zval **arg1, **arg2;
int pdf_file;
char *filename;
int argc;
PDF *pdf;
if((argc = ZEND_NUM_ARGS()) > 2)
WRONG_PARAM_COUNT;
if (argc == 1) {
if (zend_get_parameters_ex(1, &arg1) == FAILURE)
WRONG_PARAM_COUNT;
} else {
if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
if (argc == 2) {
convert_to_string_ex(arg2);
filename = Z_STRVAL_PP(arg2);
if (php_check_open_basedir(filename TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(filename, "wb+", CHECKUID_CHECK_MODE_PARAM))) {
RETURN_FALSE;
}
pdf_file = PDF_open_file(pdf, filename);
} else {
pdf_file = PDF_open_file(pdf, "");
}
if (pdf_file == -1)
RETURN_FALSE;
RETURN_TRUE;
}
PHP_FUNCTION(pdf_get_buffer)
{
zval **arg1;
long size;
PDF *pdf;
const char *buffer;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
buffer = PDF_get_buffer(pdf, &size);
RETURN_STRINGL((char *)buffer, size, 1);
}
PHP_FUNCTION(pdf_findfont)
{
zval **arg1, **arg2, **arg3, **arg4;
int embed, font;
const char *fontname, *encoding;
PDF *pdf;
switch (ZEND_NUM_ARGS()) {
case 3:
if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
embed = 0;
break;
case 4:
if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(arg4);
embed = Z_LVAL_PP(arg4);
break;
default:
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
fontname = Z_STRVAL_PP(arg2);
convert_to_string_ex(arg3);
encoding = Z_STRVAL_PP(arg3);
font = PDF_findfont(pdf, fontname, encoding, embed);
if (font == -1) {
RETURN_FALSE;
}
RETURN_LONG(font+PDFLIB_FONT_OFFSET);
}
PHP_FUNCTION(pdf_setfont)
{
zval **arg1, **arg2, **arg3;
int font;
float fontsize;
PDF *pdf;
if(ZEND_NUM_ARGS() != 3)
WRONG_PARAM_COUNT;
if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
WRONG_PARAM_COUNT;
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
font = Z_LVAL_PP(arg2);
convert_to_double_ex(arg3);
fontsize = (float)Z_DVAL_PP(arg3);
PDF_setfont(pdf, font-PDFLIB_FONT_OFFSET, fontsize);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_setpolydash)
{
zval **arg1, **arg2;
HashTable *array;
int len, i;
float *darray;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_array_ex(arg2);
array = Z_ARRVAL_PP(arg2);
len = zend_hash_num_elements(array);
if (NULL == (darray = safe_emalloc(len, sizeof(double), 0))) {
RETURN_FALSE;
}
zend_hash_internal_pointer_reset(array);
for (i=0; i<len; i++) {
zval *keydata, **keydataptr;
zend_hash_get_current_data(array, (void **) &keydataptr);
keydata = *keydataptr;
if (Z_TYPE_P(keydata) == IS_DOUBLE) {
darray[i] = (float) Z_DVAL_P(keydata);
} else if (Z_TYPE_P(keydata) == IS_LONG) {
darray[i] = (float) Z_LVAL_P(keydata);
} else {
php_error(E_WARNING,"PDFlib set_polydash: illegal darray value");
}
zend_hash_move_forward(array);
}
PDF_setpolydash(pdf, darray, len);
efree(darray);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_concat)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
PDF *pdf;
if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
convert_to_double_ex(arg5);
convert_to_double_ex(arg6);
convert_to_double_ex(arg7);
PDF_concat(pdf,
(float) Z_DVAL_PP(arg2),
(float) Z_DVAL_PP(arg3),
(float) Z_DVAL_PP(arg4),
(float) Z_DVAL_PP(arg5),
(float) Z_DVAL_PP(arg6),
(float) Z_DVAL_PP(arg7));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_open_ccitt)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
PDF *pdf;
int pdf_image;
char *image;
if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
#ifdef VIRTUAL_DIR
virtual_filepath(Z_STRVAL_PP(arg2), &image TSRMLS_CC);
#else
image = Z_STRVAL_PP(arg2);
#endif
if (php_check_open_basedir(image TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(image, "rb+", CHECKUID_CHECK_MODE_PARAM))) {
RETURN_FALSE;
}
convert_to_long_ex(arg3);
convert_to_long_ex(arg4);
convert_to_long_ex(arg5);
convert_to_long_ex(arg6);
convert_to_long_ex(arg7);
pdf_image = PDF_open_CCITT(pdf,
image,
Z_LVAL_PP(arg3),
Z_LVAL_PP(arg4),
Z_LVAL_PP(arg5),
Z_LVAL_PP(arg6),
Z_LVAL_PP(arg7));
RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
}
PHP_FUNCTION(pdf_open_image)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9, **arg10;
PDF *pdf;
int pdf_image;
char *image;
if (ZEND_NUM_ARGS() != 10 || zend_get_parameters_ex(10, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
convert_to_string_ex(arg3);
convert_to_string_ex(arg4);
convert_to_long_ex(arg5);
convert_to_long_ex(arg6);
convert_to_long_ex(arg7);
convert_to_long_ex(arg8);
convert_to_long_ex(arg9);
convert_to_string_ex(arg10);
#ifdef VIRTUAL_DIR
virtual_filepath(Z_STRVAL_PP(arg4), &image TSRMLS_CC);
#else
image = Z_STRVAL_PP(arg4);
#endif
if (php_check_open_basedir(image TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(image, "rb+", CHECKUID_CHECK_MODE_PARAM))) {
RETURN_FALSE;
}
pdf_image = PDF_open_image(pdf,
Z_STRVAL_PP(arg2),
Z_STRVAL_PP(arg3),
image,
Z_LVAL_PP(arg5),
Z_LVAL_PP(arg6),
Z_LVAL_PP(arg7),
Z_LVAL_PP(arg8),
Z_LVAL_PP(arg9),
Z_STRVAL_PP(arg10));
RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
}
PHP_FUNCTION(pdf_attach_file)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9, **arg10;
PDF *pdf;
if (ZEND_NUM_ARGS() != 10 || zend_get_parameters_ex(10, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
convert_to_long_ex(arg3);
convert_to_long_ex(arg4);
convert_to_long_ex(arg5);
convert_to_string_ex(arg6);
convert_to_string_ex(arg7);
convert_to_string_ex(arg8);
convert_to_string_ex(arg9);
convert_to_string_ex(arg10);
if (php_check_open_basedir(Z_STRVAL_PP(arg6) TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(arg6), "rb+", CHECKUID_CHECK_MODE_PARAM))) {
RETURN_FALSE;
}
PDF_attach_file(pdf,
(float) Z_DVAL_PP(arg2),
(float) Z_DVAL_PP(arg3),
(float) Z_DVAL_PP(arg4),
(float) Z_DVAL_PP(arg5),
Z_STRVAL_PP(arg6),
Z_STRVAL_PP(arg7),
Z_STRVAL_PP(arg8),
Z_STRVAL_PP(arg9),
Z_STRVAL_PP(arg10));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_add_note)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9;
PDF *pdf;
if (ZEND_NUM_ARGS() != 9 || zend_get_parameters_ex(9, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
convert_to_double_ex(arg5);
convert_to_string_ex(arg6);
convert_to_string_ex(arg7);
convert_to_string_ex(arg8);
convert_to_long_ex(arg9);
PDF_add_note(pdf,
(float) Z_DVAL_PP(arg2),
(float) Z_DVAL_PP(arg3),
(float) Z_DVAL_PP(arg4),
(float) Z_DVAL_PP(arg5),
Z_STRVAL_PP(arg6),
Z_STRVAL_PP(arg7),
Z_STRVAL_PP(arg8),
Z_LVAL_PP(arg9));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_add_locallink)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
PDF *pdf;
if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
convert_to_double_ex(arg5);
convert_to_long_ex(arg6);
convert_to_string_ex(arg7);
PDF_add_locallink(pdf,
(float) Z_DVAL_PP(arg2),
(float) Z_DVAL_PP(arg3),
(float) Z_DVAL_PP(arg4),
(float) Z_DVAL_PP(arg5),
Z_LVAL_PP(arg6),
Z_STRVAL_PP(arg7));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_add_launchlink)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
PDF *pdf;
if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
convert_to_double_ex(arg5);
convert_to_string_ex(arg6);
PDF_add_launchlink(pdf,
(float) Z_DVAL_PP(arg2),
(float) Z_DVAL_PP(arg3),
(float) Z_DVAL_PP(arg4),
(float) Z_DVAL_PP(arg5),
Z_STRVAL_PP(arg6));
RETURN_TRUE;
}
#if (PDFLIB_MAJORVERSION >= 4)
PHP_FUNCTION(pdf_open_pdi)
{
zval **arg1, **arg2, **arg3, **arg4;
PDF *pdf;
int pdi_handle;
char *file;
if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
convert_to_string_ex(arg3);
convert_to_long_ex(arg4);
#ifdef VIRTUAL_DIR
virtual_filepath(Z_STRVAL_PP(arg2), &file TSRMLS_CC);
#else
file = Z_STRVAL_PP(arg2);
#endif
if (php_check_open_basedir(file TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(file, "rb+", CHECKUID_CHECK_MODE_PARAM))) {
RETURN_FALSE;
}
pdi_handle = PDF_open_pdi(pdf,
file,
Z_STRVAL_PP(arg3),
Z_LVAL_PP(arg4));
RETURN_LONG(pdi_handle+PDFLIB_PDI_OFFSET);
}
PHP_FUNCTION(pdf_close_pdi)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
PDF_close_pdi(pdf,
Z_LVAL_PP(arg2)-PDFLIB_PDI_OFFSET);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_open_pdi_page)
{
zval **arg1, **arg2, **arg3, **arg4;
PDF *pdf;
int pdi_image;
if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
convert_to_long_ex(arg3);
convert_to_string_ex(arg4);
pdi_image = PDF_open_pdi_page(pdf,
Z_LVAL_PP(arg2)-PDFLIB_PDI_OFFSET,
Z_LVAL_PP(arg3),
Z_STRVAL_PP(arg4));
RETURN_LONG(pdi_image+PDFLIB_IMAGE_OFFSET);
}
PHP_FUNCTION(pdf_place_pdi_page)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
PDF *pdf;
if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
convert_to_double_ex(arg5);
convert_to_double_ex(arg6);
PDF_place_pdi_page(pdf,
Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET,
(float) Z_DVAL_PP(arg3),
(float) Z_DVAL_PP(arg4),
(float) Z_DVAL_PP(arg5),
(float) Z_DVAL_PP(arg6));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_close_pdi_page)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
PDF_close_pdi_page(pdf,
Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_get_pdi_parameter)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5;
PDF *pdf;
const char *buffer;
int size;
if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
convert_to_long_ex(arg3);
convert_to_long_ex(arg4);
convert_to_long_ex(arg5);
buffer = PDF_get_pdi_parameter(pdf,
Z_STRVAL_PP(arg2),
Z_LVAL_PP(arg3)-PDFLIB_PDI_OFFSET,
Z_LVAL_PP(arg4)-PDFLIB_IMAGE_OFFSET,
Z_LVAL_PP(arg5),
&size);
RETURN_STRINGL((char *)buffer, size, 1);
}
PHP_FUNCTION(pdf_get_pdi_value)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5;
PDF *pdf;
double value;
if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
convert_to_long_ex(arg3);
convert_to_long_ex(arg4);
convert_to_long_ex(arg5);
value = (double)PDF_get_pdi_value(pdf,
Z_STRVAL_PP(arg2),
Z_LVAL_PP(arg3)-PDFLIB_PDI_OFFSET,
Z_LVAL_PP(arg4)-PDFLIB_IMAGE_OFFSET,
Z_LVAL_PP(arg5));
RETURN_DOUBLE(value);
}
PHP_FUNCTION(pdf_begin_pattern)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
PDF *pdf;
int pattern_image;
if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
convert_to_double_ex(arg5);
convert_to_long_ex(arg6);
pattern_image = PDF_begin_pattern(pdf,
(float) Z_DVAL_PP(arg2),
(float) Z_DVAL_PP(arg3),
(float) Z_DVAL_PP(arg4),
(float) Z_DVAL_PP(arg5),
Z_LVAL_PP(arg6));
RETURN_LONG(pattern_image+PDFLIB_PATTERN_OFFSET);
}
PHP_FUNCTION(pdf_end_pattern)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
PDF_end_pattern(pdf);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_begin_template)
{
zval **arg1, **arg2, **arg3;
PDF *pdf;
int tmpl_image;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
tmpl_image = PDF_begin_template(pdf,
(float) Z_DVAL_PP(arg2),
(float) Z_DVAL_PP(arg3));
RETURN_LONG(tmpl_image+PDFLIB_IMAGE_OFFSET);
}
PHP_FUNCTION(pdf_end_template)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
PDF_end_template(pdf);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_setcolor)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
PDF *pdf;
double c1;
int argc = ZEND_NUM_ARGS();
if(argc < 4 || argc > 7) {
WRONG_PARAM_COUNT;
}
switch(argc) {
case 4:
if(zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
WRONG_PARAM_COUNT;
}
break;
case 5:
if(zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) {
WRONG_PARAM_COUNT;
}
break;
case 6:
if(zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
WRONG_PARAM_COUNT;
}
break;
case 7:
if(zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) {
WRONG_PARAM_COUNT;
}
break;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
convert_to_string_ex(arg3);
convert_to_double_ex(arg4);
if(argc > 4) convert_to_double_ex(arg5);
if(argc > 5) convert_to_double_ex(arg6);
if(argc > 6) convert_to_double_ex(arg7);
if (0 == (strcmp(Z_STRVAL_PP(arg3), "spot"))) {
c1 = Z_DVAL_PP(arg4)-PDFLIB_SPOT_OFFSET;
} else if(0 == (strcmp(Z_STRVAL_PP(arg3), "pattern"))) {
c1 = Z_DVAL_PP(arg4)-PDFLIB_PATTERN_OFFSET;
} else {
c1 = Z_DVAL_PP(arg4);
}
PDF_setcolor(pdf,
Z_STRVAL_PP(arg2),
Z_STRVAL_PP(arg3),
(float) c1,
(float) ((argc>4) ? Z_DVAL_PP(arg5):0),
(float) ((argc>5) ? Z_DVAL_PP(arg6):0),
(float) ((argc>6) ? Z_DVAL_PP(arg7):0));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_makespotcolor)
{
zval **arg1, **arg2;
PDF *pdf;
int spotcolor;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_string_ex(arg2);
spotcolor = PDF_makespotcolor(pdf,
Z_STRVAL_PP(arg2),
Z_STRLEN_PP(arg2));
RETURN_LONG(spotcolor+PDFLIB_SPOT_OFFSET);
}
PHP_FUNCTION(pdf_arcn)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
PDF *pdf;
if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
convert_to_double_ex(arg5);
convert_to_double_ex(arg6);
PDF_arcn(pdf,
(float) Z_DVAL_PP(arg2),
(float) Z_DVAL_PP(arg3),
(float) Z_DVAL_PP(arg4),
(float) Z_DVAL_PP(arg5),
(float) Z_DVAL_PP(arg6));
RETURN_TRUE;
}
PHP_FUNCTION(pdf_initgraphics)
{
zval **arg1;
PDF *pdf;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
PDF_initgraphics(pdf);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_add_thumbnail)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
PDF_add_thumbnail(pdf,
Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET);
RETURN_TRUE;
}
PHP_FUNCTION(pdf_setmatrix)
{
zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
PDF *pdf;
if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
convert_to_double_ex(arg3);
convert_to_double_ex(arg4);
convert_to_double_ex(arg5);
convert_to_double_ex(arg6);
convert_to_double_ex(arg7);
PDF_setmatrix(pdf,
(float) Z_DVAL_PP(arg2),
(float) Z_DVAL_PP(arg3),
(float) Z_DVAL_PP(arg4),
(float) Z_DVAL_PP(arg5),
(float) Z_DVAL_PP(arg6),
(float) Z_DVAL_PP(arg7));
RETURN_TRUE;
}
#endif
#endif