php-src/ext/pdf/pdf.c
2003-08-11 11:27:27 +00:00

3250 lines
81 KiB
C

/*
+----------------------------------------------------------------------+
| PHP Version 4 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2003 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.0 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.php.net/license/3_0.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> |
| Rainer Schaaf <rjs@pdflib.com> |
+----------------------------------------------------------------------+
*/
/* $Id$ */
/* pdflib 2.02 ... 3.0x is subject to the ALADDIN FREE PUBLIC LICENSE.
Copyright (C) 1997-1999 Thomas Merz. 2000-2001 PDFlib GmbH */
/* Note that there is no code from the pdflib package in this file */
/* {{{ includes
*/
#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;
/* {{{ constants
* to adopt the php way of error handling to PDFlib
* The image related functions in PDFlib return -1 on error
* but they may return 0 (FALSE) in normal cases
* so this offset will repair this
*/
#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
/* }}} */
/* {{{ pdf_functions[]
*/
function_entry pdf_functions[] = {
PHP_FE(pdf_new, NULL) /* new function */
PHP_FE(pdf_delete, NULL) /* new function */
PHP_FE(pdf_open_file, NULL) /* new function */
PHP_FE(pdf_get_buffer, NULL) /* new function */
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) /* new function */
PHP_FE(pdf_setfont, NULL) /* new function */
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) /* new parameters: [int font, float size] */
PHP_FE(pdf_set_text_pos, NULL)
PHP_FE(pdf_setdash, NULL)
PHP_FE(pdf_setpolydash, NULL) /* new function: not yet finished */
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) /* new function */
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) /* new parameters: [char *stringpram, int intparam] */
PHP_FE(pdf_open_ccitt, NULL) /* new function */
PHP_FE(pdf_open_image, NULL) /* new function */
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) /* new function */
PHP_FE(pdf_add_note, NULL) /* new function */
PHP_FE(pdf_add_pdflink, NULL)
PHP_FE(pdf_add_locallink, NULL) /* new function */
PHP_FE(pdf_add_launchlink, NULL)/* new function */
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)
/* End of the official PDFLIB V3.x API */
/* aliases for compatibility reasons */
PHP_FALIAS(pdf_add_outline, pdf_add_bookmark, NULL)
/* old font handling */
PHP_FE(pdf_set_font, NULL) /* deprecated */
PHP_FE(pdf_get_font, NULL) /* deprecated */
PHP_FE(pdf_get_fontname, NULL) /* deprecated */
PHP_FE(pdf_get_fontsize, NULL) /* deprecated */
/* old way of starting a PDF document */
PHP_FE(pdf_open, NULL) /* deprecated */
/* old stuff for setting infos */
PHP_FE(pdf_set_info_creator, NULL) /* deprecated */
PHP_FE(pdf_set_info_title, NULL) /* deprecated */
PHP_FE(pdf_set_info_subject, NULL) /* deprecated */
PHP_FE(pdf_set_info_author, NULL) /* deprecated */
PHP_FE(pdf_set_info_keywords, NULL) /* deprecated */
PHP_FE(pdf_set_leading, NULL) /* deprecated */
PHP_FE(pdf_set_text_rendering, NULL) /* deprecated */
PHP_FE(pdf_set_horiz_scaling, NULL) /* deprecated */
PHP_FE(pdf_set_text_rise, NULL) /* deprecated */
PHP_FE(pdf_set_char_spacing, NULL) /* deprecated */
PHP_FE(pdf_set_word_spacing, NULL) /* deprecated */
PHP_FE(pdf_set_transition, NULL) /* deprecated */
PHP_FE(pdf_set_duration, NULL) /* deprecated */
PHP_FE(pdf_get_image_height, NULL) /* deprecated */
PHP_FE(pdf_get_image_width, NULL) /* deprecated */
/* old stuff for opening images */
PHP_FE(pdf_open_jpeg, NULL) /* deprecated */
PHP_FE(pdf_open_tiff, NULL) /* deprecated */
PHP_FE(pdf_open_png, NULL) /* deprecated */
PHP_FE(pdf_open_gif, NULL) /* deprecated */
/* some more stuff for compatibility */
PHP_FE(pdf_add_annotation, NULL)
#if HAVE_LIBGD13
PHP_FE(pdf_open_memory_image, NULL)
#endif
/* depreciatet after V4.0 of PDFlib */
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)
/* support for new functions in PDFlib V4.0 */
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 /* PDFlib >= V4 */
{NULL, NULL, NULL}
};
/* }}} */
/* {{{ pdf_module_entry
*/
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
/* {{{ _free_pdf_doc
*/
static void _free_pdf_doc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
{
PDF *pdf = (PDF *)rsrc->ptr;
PDF_delete(pdf);
}
/* }}} */
/* {{{ custom_errorhandler
*/
static void custom_errorhandler(PDF *p, int type, const char *shortmsg)
{
TSRMLS_FETCH();
if (type == PDF_NonfatalError) {
/*
* PDFlib warnings should be visible to the user.
* If he decides to live with PDFlib warnings
* he may use the PDFlib function
* pdf_set_parameter($p, "warning" 0) to switch off
* the warnings inside PDFlib.
*/
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Internal PDFlib warning: %s", shortmsg);
return;
} else {
/* give up in all other cases */
php_error_docref(NULL TSRMLS_CC, E_ERROR,"PDFlib error: %s", shortmsg);
}
}
/* }}} */
/* {{{ pdf_emalloc
*/
static void *pdf_emalloc(PDF *p, size_t size, const char *caller)
{
return(emalloc(size));
}
/* }}} */
/* {{{ pdf_realloc
*/
static void *pdf_realloc(PDF *p, void *mem, size_t size, const char *caller)
{
return(erealloc(mem, size));
}
/* }}} */
/* {{{ pdf_efree
*/
static void pdf_efree(PDF *p, void *mem)
{
efree(mem);
}
/* }}} */
/* {{{ pdf_flushwrite
*/
static size_t pdf_flushwrite(PDF *p, void *data, size_t size)
{
TSRMLS_FETCH();
return(php_write(data, size TSRMLS_CC));
}
/* }}} */
/* {{{ PHP_MINFO_FUNCTION
*/
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$" );
php_info_print_table_end();
}
/* }}} */
/* {{{ PHP_MINIT_FUNCTION
*/
PHP_MINIT_FUNCTION(pdf)
{
if ((PDF_get_majorversion() != PDFLIB_MAJORVERSION) ||
(PDF_get_minorversion() != PDFLIB_MINORVERSION)) {
php_error_docref(NULL TSRMLS_CC, E_ERROR,"PDFlib error: Version mismatch in wrapper code");
}
le_pdf = zend_register_list_destructors_ex(_free_pdf_doc, NULL, "pdf object", module_number);
/* this does something like setlocale("C", ...) in PDFlib 3.x */
PDF_boot();
return SUCCESS;
}
/* }}} */
/* {{{ PHP_MSHUTDOWN_FUNCTION
*/
PHP_MSHUTDOWN_FUNCTION(pdf)
{
PDF_shutdown();
return SUCCESS;
}
/* }}} */
/* {{{ _php_pdf_set_info
*/
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;
}
/* }}} */
/* {{{ proto bool pdf_set_info(resource pdfdoc, string fieldname, string value)
Fills an info field of the document */
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;
}
/* }}} */
/* {{{ proto bool pdf_set_info_creator(resource pdfdoc, string creator)
Fills the creator field of the document */
PHP_FUNCTION(pdf_set_info_creator)
{
_php_pdf_set_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, "Creator");
}
/* }}} */
/* {{{ proto bool pdf_set_info_title(resource pdfdoc, string title)
Fills the title field of the document */
PHP_FUNCTION(pdf_set_info_title)
{
_php_pdf_set_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, "Title");
}
/* }}} */
/* {{{ proto bool pdf_set_info_subject(resource pdfdoc, string subject)
Fills the subject field of the document */
PHP_FUNCTION(pdf_set_info_subject)
{
_php_pdf_set_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, "Subject");
}
/* }}} */
/* {{{ proto bool pdf_set_info_author(resource pdfdoc, string author)
Fills the author field of the document */
PHP_FUNCTION(pdf_set_info_author)
{
_php_pdf_set_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, "Author");
}
/* }}} */
/* {{{ proto bool pdf_set_info_keywords(resource pdfdoc, string keywords)
Fills the keywords field of the document */
PHP_FUNCTION(pdf_set_info_keywords)
{
_php_pdf_set_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, "Keywords");
}
/* }}} */
/* {{{ proto resource pdf_open([resource filedesc])
Opens a new pdf document. If filedesc is NULL, document is created in memory. This is the old interface, only for compatibility use pdf_new + pdf_open_file instead */
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);
}
/* }}} */
/* {{{ proto bool pdf_close(resource pdfdoc)
Closes the pdf document */
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;
}
/* }}} */
/* {{{ proto bool pdf_begin_page(resource pdfdoc, float width, float height)
Starts page */
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;
}
/* }}} */
/* {{{ proto bool pdf_end_page(resource pdfdoc)
Ends page */
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;
}
/* }}} */
/* {{{ proto bool pdf_show(resource pdfdoc, string text)
Output text at current position */
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;
}
/* }}} */
/* {{{ proto bool pdf_show_xy(resource pdfdoc, string text, float x_koor, float y_koor)
Output text at position */
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;
}
/* }}} */
/* {{{ proto int pdf_show_boxed(resource pdfdoc, string text, float x_koor, float y_koor, float width, float height, string mode [, string feature])
Output text formated in a boxed */
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);
}
/* }}} */
/* {{{ proto bool pdf_set_font(resource pdfdoc, string font, float size, string encoding [, int embed])
Select the current font face, size and encoding */
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_docref(NULL TSRMLS_CC, E_WARNING, "Font %s not found", Z_STRVAL_PP(arg2));
RETURN_FALSE;
}
PDF_setfont(pdf, font, (float) Z_DVAL_PP(arg3));
RETURN_TRUE;
}
/* }}} */
/* {{{ _php_pdf_set_value
*/
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;
}
/* }}} */
/* {{{ proto bool pdf_set_value(resource pdfdoc, string key, float value)
Sets arbitrary value */
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;
}
/* }}} */
/* {{{ proto float pdf_get_value(resource pdfdoc, string key, float modifier)
Gets arbitrary value */
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);
}
/* }}} */
/* {{{ proto int pdf_get_font(resource pdfdoc)
Gets the current font */
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);
}
/* }}} */
/* {{{ proto string pdf_get_fontname(resource pdfdoc)
Gets the current font name */
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);
}
/* }}} */
/* {{{ proto float pdf_get_fontsize(resource pdfdoc)
Gets the current font size */
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);
}
/* }}} */
/* {{{ proto bool pdf_set_leading(resource pdfdoc, float distance)
Sets distance between text lines */
PHP_FUNCTION(pdf_set_leading)
{
_php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "leading");
}
/* }}} */
/* {{{ proto bool pdf_set_text_rendering(resource pdfdoc, int mode)
Determines how text is rendered */
PHP_FUNCTION(pdf_set_text_rendering)
{
_php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "textrendering");
}
/* }}} */
/* {{{ proto bool pdf_set_horiz_scaling(resource pdfdoc, float scale)
Sets horizontal scaling of text */
PHP_FUNCTION(pdf_set_horiz_scaling)
{
_php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "horizscaling");
}
/* }}} */
/* {{{ proto bool pdf_set_text_rise(resource pdfdoc, float value)
Sets the text rise */
PHP_FUNCTION(pdf_set_text_rise)
{
_php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "textrise");
}
/* }}} */
/* {{{ proto bool pdf_set_char_spacing(resource pdfdoc, float space)
Sets character spacing */
PHP_FUNCTION(pdf_set_char_spacing)
{
_php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "charspacing");
}
/* }}} */
/* {{{ proto bool pdf_set_word_spacing(resource pdfdoc, float space)
Sets spacing between words */
PHP_FUNCTION(pdf_set_word_spacing)
{
_php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "wordspacing");
}
/* }}} */
/* {{{ proto bool pdf_set_text_pos(resource pdfdoc, float x, float y)
Sets the position of text for the next pdf_show call */
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;
}
/* }}} */
/* {{{ proto bool pdf_continue_text(resource pdfdoc, string text)
Output text in next line */
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;
}
/* }}} */
/* {{{ proto float pdf_stringwidth(resource pdfdoc, string text [, int font, float size])
Returns width of text in current font */
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;
/* double convert_to_long_ex(arg3) - look below . is this needed ? */
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);
}
/* }}} */
/* {{{ proto bool pdf_save(resource pdfdoc)
Saves current enviroment */
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;
}
/* }}} */
/* {{{ proto bool pdf_restore(resource pdfdoc)
Restores formerly saved enviroment */
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;
}
/* }}} */
/* {{{ proto bool pdf_translate(resource pdfdoc, float x, float y)
Sets origin of coordinate system */
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;
}
/* }}} */
/* {{{ proto bool pdf_scale(resource pdfdoc, float x_scale, float y_scale)
Sets scaling */
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;
}
/* }}} */
/* {{{ proto bool pdf_rotate(resource pdfdoc, float angle)
Sets rotation */
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;
}
/* }}} */
/* {{{ proto bool pdf_skew(resource pdfdoc, float xangle, float yangle)
Skew the coordinate system */
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;
}
/* }}} */
/* {{{ proto bool pdf_setflat(resource pdfdoc, float value)
Sets flatness */
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);
/* pdflib will do this for you, will throw some exception
if((Z_LVAL_PP(arg2) > 100) && (Z_LVAL_PP(arg2) < 0)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parameter of pdf_setflat() has to between 0 and 100");
RETURN_FALSE;
}
*/
PDF_setflat(pdf, (float) Z_DVAL_PP(arg2));
RETURN_TRUE;
}
/* }}} */
/* {{{ proto bool pdf_setlinejoin(resource pdfdoc, int value)
Sets linejoin parameter */
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);
/* pdflib will do this for you, will throw some exception
if((Z_LVAL_PP(arg2) > 2) && (Z_LVAL_PP(arg2) < 0)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parameter of pdf_setlinejoin() must be between 0 and 2");
RETURN_FALSE;
}
*/
PDF_setlinejoin(pdf, Z_LVAL_PP(arg2));
RETURN_TRUE;
}
/* }}} */
/* {{{ proto bool pdf_setlinecap(resource pdfdoc, int value)
Sets linecap parameter */
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);
/* pdflib will do this for you, will throw some exception
if((Z_LVAL_PP(arg2) > 2) && (Z_LVAL_PP(arg2) < 0)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parameter of pdf_setlinecap() must be > 0 and <= 2");
RETURN_FALSE;
}
*/
PDF_setlinecap(pdf, Z_LVAL_PP(arg2));
RETURN_TRUE;
}
/* }}} */
/* {{{ proto bool pdf_setmiterlimit(resource pdfdoc, float value)
Sets miter limit */
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);
/* pdflib will do this for you, will throw some exception
if(Z_DVAL_PP(arg2) < 1) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parameter of pdf_setmiterlimit() must be >= 1");
RETURN_FALSE;
}
*/
PDF_setmiterlimit(pdf, (float) Z_DVAL_PP(arg2));
RETURN_TRUE;
}
/* }}} */
/* {{{ proto bool pdf_setlinewidth(resource pdfdoc, float width)
Sets line width */
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;
}
/* }}} */
/* {{{ proto bool pdf_setdash(resource pdfdoc, float black, float white)
Sets dash pattern */
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;
}
/* }}} */
/* {{{ proto bool pdf_moveto(resource pdfdoc, float x, float y)
Sets current point */
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;
}
/* }}} */
/* {{{ proto bool pdf_curveto(resource pdfdoc, float x1, float y1, float x2, float y2, float x3, float y3)
Draws a curve */
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;
}
/* }}} */
/* {{{ proto bool pdf_lineto(resource pdfdoc, float x, float y)
Draws a line */
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;
}
/* }}} */
/* {{{ proto bool pdf_circle(resource pdfdoc, float x, float y, float radius)
Draws a circle */
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;
}
/* }}} */
/* {{{ proto bool pdf_arc(resource pdfdoc, float x, float y, float radius, float start, float end)
Draws an arc */
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;
}
/* }}} */
/* {{{ proto bool pdf_rect(resource pdfdoc, float x, float y, float width, float height)
Draws a rectangle */
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;
}
/* }}} */
/* {{{ proto bool pdf_closepath(resource pdfdoc)
Close path */
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;
}
/* }}} */
/* {{{ proto bool pdf_closepath_stroke(resource pdfdoc)
Close path and draw line along path */
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;
}
/* }}} */
/* {{{ proto bool pdf_stroke(resource pdfdoc)
Draw line along path path */
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;
}
/* }}} */
/* {{{ proto bool pdf_fill(resource pdfdoc)
Fill current path */
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;
}
/* }}} */
/* {{{ proto bool pdf_fill_stroke(resource pdfdoc)
Fill and stroke current path */
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;
}
/* }}} */
/* {{{ proto bool pdf_closepath_fill_stroke(resource pdfdoc)
Close, fill and stroke current path */
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;
}
/* }}} */
/* {{{ proto bool pdf_endpath(resource pdfdoc)
Ends current path */
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;
}
/* }}} */
/* {{{ proto bool pdf_clip(resource pdfdoc)
Clips to current path */
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;
}
/* }}} */
/* {{{ proto bool pdf_set_parameter(resource pdfdoc, string key, string value)
Sets arbitrary parameters */
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;
}
/* }}} */
/* {{{ proto string pdf_get_parameter(resource pdfdoc, string key, mixed modifier)
Gets arbitrary parameters */
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);
}
/* }}} */
/* {{{ proto bool pdf_setgray_fill(resource pdfdoc, float value)
Sets filling color to gray value */
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;
}
/* }}} */
/* {{{ proto bool pdf_setgray_stroke(resource pdfdoc, float value)
Sets drawing color to gray value */
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;
}
/* }}} */
/* {{{ proto bool pdf_setgray(resource pdfdoc, float value)
Sets drawing and filling color to gray value */
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;
}
/* }}} */
/* {{{ proto bool pdf_setrgbcolor_fill(resource pdfdoc, float red, float green, float blue)
Sets filling color to RGB color value */
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;
}
/* }}} */
/* {{{ proto bool pdf_setrgbcolor_stroke(resource pdfdoc, float red, float green, float blue)
Sets drawing color to RGB color value */
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;
}
/* }}} */
/* {{{ proto bool pdf_setrgbcolor(resource pdfdoc, float red, float green, float blue)
Sets drawing and filling color to RGB color value */
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;
}
/* }}} */
/* {{{ proto int pdf_add_bookmark(resource pdfdoc, string text [, int parent [, int open]])
Adds bookmark for current page */
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;
}
/* will never return 0 */
id = PDF_add_bookmark(pdf, Z_STRVAL_PP(arg2), parentid, open);
RETURN_LONG(id);
}
/* }}} */
/* {{{ proto bool pdf_set_transition(resource pdfdoc, int transition)
Sets transition between pages */
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;
}
/* }}} */
/* {{{ proto bool pdf_set_duration(resource pdfdoc, float duration)
Sets duration between pages */
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;
}
/* }}} */
/* {{{ _php_pdf_open_image
*/
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);
}
/* }}} */
/* {{{ proto int pdf_open_gif(resource pdf, string giffile)
Opens a GIF file and returns an image for placement in a pdf object */
PHP_FUNCTION(pdf_open_gif)
{
_php_pdf_open_image(INTERNAL_FUNCTION_PARAM_PASSTHRU,"gif");
}
/* }}} */
/* {{{ proto int pdf_open_jpeg(resource pdf, string jpegfile)
Opens a JPEG file and returns an image for placement in a PDF document */
PHP_FUNCTION(pdf_open_jpeg)
{
_php_pdf_open_image(INTERNAL_FUNCTION_PARAM_PASSTHRU,"jpeg");
}
/* }}} */
/* {{{ proto int pdf_open_png(resource pdf, string pngfile)
Opens a PNG file and returns an image for placement in a PDF document */
PHP_FUNCTION(pdf_open_png)
{
_php_pdf_open_image(INTERNAL_FUNCTION_PARAM_PASSTHRU,"png");
}
/* }}} */
/* {{{ proto int pdf_open_tiff(resource pdf, string tifffile)
Opens a TIFF file and returns an image for placement in a PDF document */
PHP_FUNCTION(pdf_open_tiff)
{
_php_pdf_open_image(INTERNAL_FUNCTION_PARAM_PASSTHRU,"tiff");
}
/* }}} */
/* {{{ proto int pdf_open_image_file(resource pdf, string type, string file [, string stringparam, int intparam])
Opens an image file of the given type and returns an image for placement in a PDF document */
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);
/* adjust the image handle */
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) {
/* pdflib will do this for you, will throw some exception
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not open image: %s", image);
*/
RETURN_FALSE;
}
RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
}
/* }}} */
#if HAVE_LIBGD13
/* {{{ proto int pdf_open_memory_image(resource pdf, resource image)
Takes an GD image and returns an image for placement in a PDF document */
PHP_FUNCTION(pdf_open_memory_image)
{
zval **arg1, **arg2;
int i, j, color, count;
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_docref(NULL TSRMLS_CC, 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);
count = 3 * im->sx * im->sy;
buffer = (unsigned char *) emalloc(count);
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) {
/* pdflib will do this for you, will throw some exception
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not open image");
*/
efree(buffer);
RETURN_FALSE;
}
RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
}
/* }}} */
#endif /* HAVE_LIBGD13 */
/* {{{ proto void pdf_close_image(resource pdf, int pdfimage)
Closes the PDF image */
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);
}
/* }}} */
/* {{{ proto bool pdf_place_image(resource pdf, int pdfimage, float x, float y, float scale)
Places image in the PDF document */
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;
}
/* }}} */
/* {{{ proto int pdf_get_image_width(resource pdf, int pdfimage)
Returns the width of an image */
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);
}
/* }}} */
/* {{{ proto int pdf_get_image_height(resource pdf, int pdfimage)
Returns the height of an image */
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);
}
/* }}} */
/* {{{ proto bool pdf_add_weblink(resource pdfdoc, float llx, float lly, float urx, float ury, string url)
Adds link to web resource */
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;
}
/* }}} */
/* {{{ proto bool pdf_add_pdflink(resource pdfdoc, float llx, float lly, float urx, float ury, string filename, int page, string dest)
Adds link to PDF document */
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;
}
/* }}} */
/* {{{ proto bool pdf_set_border_style(resource pdfdoc, string style, float width)
Sets style of box surounding all kinds of annotations and link */
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;
}
/* }}} */
/* {{{ proto bool pdf_set_border_color(resource pdfdoc, float red, float green, float blue)
Sets color of box surounded all kinds of annotations and links */
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;
}
/* }}} */
/* {{{ proto bool pdf_set_border_dash(resource pdfdoc, float black, float white)
Sets the border dash style of all kinds of annotations and links */
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;
}
/* }}} */
/* {{{ proto bool pdf_add_annotation(resource pdfdoc, float xll, float yll, float xur, float xur, string title, string text)
Sets annotation (depreciated use pdf_add_note instead) */
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;
}
/* }}} */
/* RJS: START OF NEW CODE */
/* {{{ proto resource pdf_new()
Creates a new PDF object */
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);
}
/* }}} */
/* {{{ proto int pdf_get_majorversion()
Returns the major version number of the PDFlib */
PHP_FUNCTION(pdf_get_majorversion)
{
if (ZEND_NUM_ARGS() != 0) {
WRONG_PARAM_COUNT;
}
RETURN_LONG(PDF_get_majorversion());
}
/* }}} */
/* {{{ proto int pdf_get_minorversion()
Returns the minor version number of the PDFlib */
PHP_FUNCTION(pdf_get_minorversion)
{
if (ZEND_NUM_ARGS() != 0) {
WRONG_PARAM_COUNT;
}
RETURN_LONG(PDF_get_minorversion());
}
/* }}} */
/* {{{ proto bool pdf_delete(resource pdfdoc)
Deletes the PDF object */
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;
}
/* }}} */
/* {{{ proto bool pdf_open_file(resource pdfdoc [, string filename])
Opens a new PDF document. If filename is NULL, document is created in memory. This is not yet fully supported */
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 {
/* open in memory */
pdf_file = PDF_open_file(pdf, "");
}
if (pdf_file == -1)
RETURN_FALSE;
RETURN_TRUE;
}
/* }}} */
/* {{{ proto string pdf_get_buffer(resource pdfdoc)
Fetches the full buffer containig the generated PDF data */
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);
}
/* }}} */
/* {{{ proto int pdf_findfont(resource pdfdoc, string fontname, string encoding [, int embed])
Prepares the font fontname for later use with pdf_setfont() */
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) {
/* pdflib will do this for you, will throw some exception
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Font %s not found", fontname);
*/
RETURN_FALSE;
}
RETURN_LONG(font+PDFLIB_FONT_OFFSET);
}
/* }}} */
/* {{{ proto bool pdf_setfont(resource pdfdoc, int font, float fontsize)
Sets the current font in the fiven fontsize */
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;
}
/* }}} */
/* {{{ proto bool pdf_setpolydash(resource pdfdoc, float darray)
Sets more complicated dash pattern */
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);
darray = safe_emalloc(len, sizeof(double), 0);
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_docref(NULL TSRMLS_CC, E_WARNING, "PDFlib set_polydash: illegal darray value");
}
zend_hash_move_forward(array);
}
PDF_setpolydash(pdf, darray, len);
efree(darray);
RETURN_TRUE;
}
/* }}} */
/* {{{ proto bool pdf_concat(resource pdf, float a, float b, float c, float d, float e, float f)
Concatenates a matrix to the current transformation matrix for text and graphics */
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;
}
/* }}} */
/* {{{ proto int pdf_open_ccitt(resource pdf, string filename, int width, int height, int bitreverse, int k, int blackls1)
Opens an image file with raw CCITT G3 or G4 compresed bitmap data */
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);
}
/* }}} */
/* {{{ proto int pdf_open_image(resource pdf, string type, string source, string data, long length, int width, int height, int components, int bpc, string params)
Opens an image of the given type and returns an image for placement in a PDF document */
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);
}
/* }}} */
/* {{{ proto bool pdf_attach_file(resource pdf, float lly, float lly, float urx, float ury, string filename, string description, string author, string mimetype, string icon)
Adds a file attachment annotation at the rectangle specified by his lower left and upper right corners */
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;
}
/* }}} */
/* {{{ proto bool pdf_add_note(resource pdfdoc, float llx, float lly, float urx, float ury, string contents, string title, string icon, int open)
Sets annotation */
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;
}
/* }}} */
/* {{{ proto bool pdf_add_locallink(resource pdfdoc, float llx, float lly, float urx, float ury, int page, string dest)
Adds link to local resource */
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;
}
/* }}} */
/* {{{ proto bool pdf_add_launchlink(resource pdfdoc, float llx, float lly, float urx, float ury, string filename)
Adds link to web resource */
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)
/* {{{ proto int pdf_open_pdi(resource pdf, string filename, string stringparam, int intparam);
* Open an existing PDF document and prepare it for later use. */
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);
}
/* }}} */
/* {{{ proto bool pdf_close_pdi(resource pdf, int doc);
* Close all open page handles, and close the input PDF document. */
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;
}
/* }}} */
/* {{{ proto int pdf_open_pdi_page(resource pdf, int doc, int page, string label);
* Prepare a page for later use with PDF_place_image(). */
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);
}
/* }}} */
/* {{{ proto bool pdf_place_pdi_page(resource pdf, int page, float x, float y, float sx, float sy)
* Place a PDF page with the lower left corner at (x, y), and scale it. */
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;
}
/* }}} */
/* {{{ proto bool pdf_close_pdi_page(resource pdf, int page);
* Close the page handle, and free all page-related resources. */
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;
}
/* }}} */
/* {{{ proto string pdf_get_pdi_parameter(resource pdf, string key, int doc, int page, int index);
* Get the contents of some PDI document parameter with string type. */
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);
}
/* }}} */
/* {{{ proto float pdf_get_pdi_value(resource pdf, string key, int doc, int page, int index);
* Get the contents of some PDI document parameter with numerical type. */
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);
}
/* }}} */
/* {{{ proto int pdf_begin_pattern(resource pdf, float width, float height, float xstep, float ystep, int painttype);
* Start a new pattern definition. */
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);
}
/* }}} */
/* {{{ proto bool pdf_end_pattern(resource pdf);
* Finish the pattern definition. */
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;
}
/* }}} */
/* {{{ proto int pdf_begin_template(resource pdf, float width, float height);
* Start a new template definition. */
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);
}
/* }}} */
/* {{{ proto bool pdf_end_template(resource pdf);
* Finish the template definition. */
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;
}
/* }}} */
/* {{{ proto bool pdf_setcolor(resource pdf, string type, string colorspace, float c1 [, float c2 [, float c3 [, float c4]]]);
* Set the current color space and color. */
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;
}
/* }}} */
/* {{{ proto int pdf_makespotcolor(resource pdf, string spotname);
* Make a named spot color from the current color. */
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);
}
/* }}} */
/* {{{ proto bool pdf_arcn(resource pdf, float x, float y, float r, float alpha, float beta);
* Draw a clockwise circular arc from alpha to beta degrees. */
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;
}
/* }}} */
/* {{{ proto bool pdf_initgraphics(resource pdf);
* Reset all implicit color and graphics state parameters to their defaults. */
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;
}
/* }}} */
/* {{{ proto bool pdf_add_thumbnail(resource pdf, int image);
* Add an existing image as thumbnail for the current page. */
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;
}
/* }}} */
/* {{{ proto bool pdf_setmatrix(resource pdf, float a, float b, float c, float d, float e, float f)
Explicitly set the current transformation matrix. */
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 /* PDFlib >= V4 */
#endif
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
* vim600: sw=4 ts=4 fdm=marker
* vim<600: sw=4 ts=4
*/