/* +----------------------------------------------------------------------+ | PHP HTML Embedded Scripting Language Version 3.0 | +----------------------------------------------------------------------+ | Copyright (c) 1997-1999 PHP Development Team (See Credits file) | +----------------------------------------------------------------------+ | This program is free software; you can redistribute it and/or modify | | it under the terms of one of the following licenses: | | | | A) the GNU General Public License as published by the Free Software | | Foundation; either version 2 of the License, or (at your option) | | any later version. | | | | B) the PHP License as published by the PHP Development Team and | | included in the distribution in the file: LICENSE | | | | This program is distributed in the hope that it will be useful, | | but WITHOUT ANY WARRANTY; without even the implied warranty of | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | GNU General Public License for more details. | | | | You should have received a copy of both licenses referred to here. | | If you did not, or have any questions about PHP licensing, please | | contact core@php.net. | +----------------------------------------------------------------------+ | Authors: Uwe Steinmann | +----------------------------------------------------------------------+ */ /* $Id$ */ /* cpdflib.h -- C language API definitions for ClibPDF library * Copyright (C) 1998 FastIO Systems, All Rights Reserved. */ /* Note that there is no code from the cpdflib package in this file */ #if !PHP_31 && defined(THREAD_SAFE) #undef THREAD_SAFE #endif #include "php.h" #include "php_globals.h" #include #if HAVE_LIBGD13 #include #endif #ifdef HAVE_UNISTD_H # include #endif #if WIN32|WINNT # include # include #endif #if HAVE_CPDFLIB #include "php3_cpdf.h" #ifdef THREAD_SAFE DWORD CPDFlibTls; static int numthreads=0; typedef struct cpdflib_global_struct{ int le_cpdf; int le_outline; } cpdflib_global_struct; # define CPDF_GLOBAL(a) cpdflib_globals->a # define CPDF_TLS_VARS cpdflib_global_struct *cpdflib_globals=TlsGetValue(CPDFlibTls) #else # define CPDF_GLOBAL(a) a # define CPDF_TLS_VARS static int le_cpdf; static int le_outline; #endif function_entry cpdf_functions[] = { PHP_FE(cpdf_set_creator, NULL) PHP_FE(cpdf_set_title, NULL) PHP_FE(cpdf_set_subject, NULL) PHP_FE(cpdf_set_keywords, NULL) PHP_FE(cpdf_open, NULL) PHP_FE(cpdf_close, NULL) PHP_FE(cpdf_set_viewer_preferences, NULL) PHP_FE(cpdf_page_init, NULL) PHP_FE(cpdf_finalize_page, NULL) PHP_FE(cpdf_set_current_page, NULL) PHP_FE(cpdf_begin_text, NULL) PHP_FE(cpdf_end_text, NULL) PHP_FE(cpdf_show, NULL) PHP_FE(cpdf_show_xy, NULL) PHP_FE(cpdf_text, NULL) PHP_FE(cpdf_continue_text, NULL) PHP_FE(cpdf_set_font, NULL) PHP_FE(cpdf_set_leading, NULL) PHP_FE(cpdf_set_text_rendering, NULL) PHP_FE(cpdf_set_horiz_scaling, NULL) PHP_FE(cpdf_set_text_rise, NULL) PHP_FE(cpdf_set_text_matrix, NULL) PHP_FE(cpdf_set_text_pos, NULL) PHP_FE(cpdf_rotate_text, NULL) PHP_FE(cpdf_set_char_spacing, NULL) PHP_FE(cpdf_set_word_spacing, NULL) PHP_FE(cpdf_stringwidth, NULL) PHP_FE(cpdf_save, NULL) PHP_FE(cpdf_restore, NULL) PHP_FE(cpdf_translate, NULL) PHP_FE(cpdf_scale, NULL) PHP_FE(cpdf_rotate, NULL) PHP_FE(cpdf_setflat, NULL) PHP_FE(cpdf_setlinejoin, NULL) PHP_FE(cpdf_setlinecap, NULL) PHP_FE(cpdf_setmiterlimit, NULL) PHP_FE(cpdf_setlinewidth, NULL) PHP_FE(cpdf_setdash, NULL) PHP_FE(cpdf_moveto, NULL) PHP_FE(cpdf_rmoveto, NULL) PHP_FE(cpdf_lineto, NULL) PHP_FE(cpdf_rlineto, NULL) PHP_FE(cpdf_curveto, NULL) PHP_FE(cpdf_circle, NULL) PHP_FE(cpdf_arc, NULL) PHP_FE(cpdf_rect, NULL) PHP_FE(cpdf_newpath, NULL) PHP_FE(cpdf_closepath, NULL) PHP_FE(cpdf_stroke, NULL) PHP_FE(cpdf_closepath_stroke, NULL) PHP_FE(cpdf_fill, NULL) PHP_FE(cpdf_fill_stroke, NULL) PHP_FE(cpdf_closepath_fill_stroke, NULL) PHP_FE(cpdf_clip, NULL) PHP_FE(cpdf_setgray_fill, NULL) PHP_FE(cpdf_setgray_stroke, NULL) PHP_FE(cpdf_setgray, NULL) PHP_FE(cpdf_setrgbcolor_fill, NULL) PHP_FE(cpdf_setrgbcolor_stroke, NULL) PHP_FE(cpdf_setrgbcolor, NULL) PHP_FE(cpdf_set_page_animation, NULL) PHP_FE(cpdf_finalize, NULL) PHP_FE(cpdf_output_buffer, NULL) PHP_FE(cpdf_save_to_file, NULL) PHP_FE(cpdf_import_jpeg, NULL) #if HAVE_LIBGD13 PHP_FE(cpdf_place_inline_image, NULL) #endif PHP_FE(cpdf_add_annotation, NULL) PHP_FE(cpdf_add_outline, NULL) PHP_FE(cpdf_set_action_url, NULL) {NULL, NULL, NULL} }; php3_module_entry cpdf_module_entry = { "cpdf", cpdf_functions, PHP_MINIT(cpdf), PHP_MSHUTDOWN(cpdf), PHP_RINIT(cpdf), NULL, PHP_MINFO(cpdf), STANDARD_MODULE_PROPERTIES }; #if COMPILE_DL #include "dl/phpdl.h" DLEXPORT php3_module_entry *get_module(void) { return &cpdf_module_entry; } #endif static void _free_outline(CPDFoutlineEntry *outline) { } static void _free_doc(CPDFdoc *pdf) { cpdf_close(pdf); } PHP_MINIT_FUNCTION(cpdf) { CPDF_GLOBAL(le_outline) = register_list_destructors(_free_outline, NULL); CPDF_GLOBAL(le_cpdf) = register_list_destructors(_free_doc, NULL); return SUCCESS; } PHP_RINIT_FUNCTION(cpdf) { /* CPDF_GLOBAL(le_outline) = NULL; */ return SUCCESS; } PHP_MINFO_FUNCTION(cpdf) { /* need to use a PHPAPI function here because it is external module in windows */ php3_printf("ClibPDF"); } PHP_MSHUTDOWN_FUNCTION(cpdf){ return SUCCESS; } /* {{{ proto bool cpdf_set_creator(int pdfdoc, string creator) Sets the creator field */ PHP_FUNCTION(cpdf_set_creator) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if (!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d (type=%d)",id, type); RETURN_FALSE; } cpdf_setCreator(pdf, arg2->value.str.val); RETURN_TRUE; } /* }}} */ /* {{{ proto bool cpdf_set_title(int pdfptr, string title) Fills the title field of the info structure */ PHP_FUNCTION(cpdf_set_title) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if (!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d (type=%d)",id, type); RETURN_FALSE; } cpdf_setTitle(pdf, arg2->value.str.val); RETURN_TRUE; } /* }}} */ /* {{{ proto bool cpdf_set_subject(int pdfptr, string subject) Fills the subject field of the info structure */ PHP_FUNCTION(cpdf_set_subject) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if (!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d (type=%d)",id, type); RETURN_FALSE; } cpdf_setSubject(pdf, arg2->value.str.val); RETURN_TRUE; } /* }}} */ /* {{{ proto bool cpdf_set_keywords(int pdfptr, string keywords) Fills the keywords field of the info structure */ PHP_FUNCTION(cpdf_set_keywords) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if (!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d (type=%d)",id, type); RETURN_FALSE; } cpdf_setKeywords(pdf, arg2->value.str.val); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_viewer_preferences(int pdfdoc, int pagemode) How to show the document by the viewer */ PHP_FUNCTION(cpdf_set_viewer_preferences) { pval *argv[6]; int id, type, pagemode; int argc; CPDFdoc *pdf; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if(argc < 1 || argc > 2) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_long(argv[1]); id=argv[0]->value.lval; pagemode=argv[1]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } // cpdf_setViewerPreferences(pdf, pagemode, 0, 0, 0, 0, 0, 0, pagemode); RETURN_TRUE; } /* }}} */ /* {{{ proto int cpdf_open(int compression [, string filename [, array doc_limits]]) Opens a new pdf document */ PHP_FUNCTION(cpdf_open) { pval *arg1, *arg2, *arg3; int id, type, argc; FILE *fp; CPDFdoc *cpdf; CPDF_TLS_VARS; argc = ARG_COUNT(ht); switch(argc) { case 1: if (getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } break; case 2: if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } break; case 3: if (getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) { WRONG_PARAM_COUNT; } break; default: WRONG_PARAM_COUNT; } convert_to_long(arg1); cpdf = cpdf_open(0, NULL); if(!cpdf) RETURN_FALSE; if(arg1->value.lval == 1) cpdf_enableCompression(cpdf, YES); else cpdf_enableCompression(cpdf, NO); if(argc > 1) { convert_to_string(arg2); #if APACHE if(strcmp(arg2->value.str.val, "-") == 0) php3_error(E_WARNING,"Writing to stdout as described in the ClibPDF manual is not possible if php3 is used as an Apache module. Write to a memory stream and use cpdf_output_buffer() instead."); #endif cpdf_setOutputFilename(cpdf, arg2->value.str.val); } cpdf_init(cpdf); id = php3_list_insert(cpdf, CPDF_GLOBAL(le_cpdf)); RETURN_LONG(id); } /* }}} */ /* {{{ proto void cpdf_close(int pdfdoc) Closes the pdf document */ PHP_FUNCTION(cpdf_close) { pval *arg1; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } php3_list_delete(id); RETURN_TRUE; } /* }}} */ #define BUFFERLEN 40 /* {{{ proto void cpdf_page_init(int pdfdoc, int pagenr, int orientation, int height, int width [, double unit]) Starts page */ PHP_FUNCTION(cpdf_page_init) { pval *argv[6]; int id, type, pagenr, orientation; int height, width, argc; char buffer[BUFFERLEN]; CPDFdoc *pdf; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if(argc < 5 || argc > 6) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_long(argv[1]); convert_to_long(argv[2]); convert_to_long(argv[3]); convert_to_long(argv[4]); id=argv[0]->value.lval; pagenr=argv[1]->value.lval; orientation=argv[2]->value.lval; height = argv[3]->value.lval; width = argv[4]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(argc > 5) { convert_to_double(argv[5]); if(argv[5]->value.dval > 0.0) cpdf_setDefaultDomainUnit(pdf, argv[5]->value.dval); } snprintf(buffer, BUFFERLEN, "0 0 %d %d", width, height); cpdf_pageInit(pdf, pagenr, orientation, buffer, buffer); RETURN_TRUE; } /* }}} */ #undef BUFFERLEN /* {{{ proto void cpdf_finalize_page(int pdfdoc, int pagenr) Ends the page to save memory */ PHP_FUNCTION(cpdf_finalize_page) { pval *arg1, *arg2; int id, type, pagenr; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_long(arg2); id=arg1->value.lval; pagenr=arg2->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_finalizePage(pdf, pagenr); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_current_page(int pdfdoc, int pagenr) Sets page for output */ PHP_FUNCTION(cpdf_set_current_page) { pval *arg1, *arg2; int id, type, pagenr; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_long(arg2); id=arg1->value.lval; pagenr=arg2->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_setCurrentPage(pdf, pagenr); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_begin_text(int pdfdoc) Starts text section */ PHP_FUNCTION(cpdf_begin_text) { pval *arg1; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_beginText(pdf, 0); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_end_text(int pdfdoc) Ends text section */ PHP_FUNCTION(cpdf_end_text) { pval *arg1; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_endText(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_show(int pdfdoc, string text) Output text at current position */ PHP_FUNCTION(cpdf_show) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_textShow(pdf, arg2->value.str.val); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_show_xy(int pdfdoc, string text, double x-koor, double y-koor [, int mode]) Output text at position */ PHP_FUNCTION(cpdf_show_xy) { pval *argv[5]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if((argc < 4) || (argc > 5)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_string(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(argc == 5) { convert_to_long(argv[4]); mode = argv[4]->value.lval; } if(mode == 1) cpdf_rawText(pdf, (float) argv[2]->value.dval, (float) argv[3]->value.dval, 0.0, argv[1]->value.str.val); else cpdf_text(pdf, (float) argv[2]->value.dval, (float) argv[3]->value.dval, 0.0, argv[1]->value.str.val); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_continue_text(int pdfdoc, string text) Output text in next line */ PHP_FUNCTION(cpdf_continue_text) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_textCRLFshow(pdf, arg2->value.str.val); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_text(int pdfdoc, string text [, double x-koor, double y-koor [, int mode [, double orientation [, int alignmode]]]]) Output text */ PHP_FUNCTION(cpdf_text) { pval *argv[7]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if((argc < 2) || (argc == 3) || (argc > 7) || getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_string(argv[1]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(argc > 4) { convert_to_long(argv[4]); mode = argv[2]->value.lval; } switch(argc) { case 2: cpdf_textShow(pdf, argv[1]->value.str.val); break; case 4: convert_to_double(argv[2]); convert_to_double(argv[3]); cpdf_text(pdf, (float) argv[2]->value.dval, (float) argv[3]->value.dval, 0.0, argv[1]->value.str.val); break; case 5: convert_to_double(argv[2]); convert_to_double(argv[3]); if(mode == 1) cpdf_rawText(pdf, (float) argv[2]->value.dval, (float) argv[3]->value.dval, 0.0, argv[1]->value.str.val); else cpdf_text(pdf, (float) argv[2]->value.dval, (float) argv[3]->value.dval, 0.0, argv[1]->value.str.val); break; case 6: convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[5]); if(mode == 1) cpdf_rawText(pdf, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[5]->value.dval, argv[1]->value.str.val); else cpdf_text(pdf, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[5]->value.dval, argv[1]->value.str.val); break; case 7: convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[5]); convert_to_long(argv[6]); if(mode == 1) cpdf_rawTextAligned(pdf, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[5]->value.dval, argv[6]->value.lval, argv[1]->value.str.val); else cpdf_textAligned(pdf, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[5]->value.dval, argv[6]->value.lval, argv[1]->value.str.val); break; } RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_font(int pdfdoc, string font, double size, int encoding) Select the current font face, size and encoding */ PHP_FUNCTION(cpdf_set_font) { pval *arg1, *arg2, *arg3, *arg4; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 4 || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); convert_to_double(arg3); convert_to_long(arg4); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(arg4->value.lval > 6) { php3_error(E_WARNING,"Font encoding set to 5"); arg4->value.lval = 5; } switch(arg4->value.lval) { case 2: cpdf_setFont(pdf, arg2->value.str.val, "MacRomanEncoding", (float) arg3->value.dval); break; case 3: cpdf_setFont(pdf, arg2->value.str.val, "MacExpertEncoding", (float) arg3->value.dval); break; case 4: cpdf_setFont(pdf, arg2->value.str.val, "WinAnsiEncoding", (float) arg3->value.dval); break; default: cpdf_setFont(pdf, arg2->value.str.val, NULL, (float) arg3->value.dval); break; } RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_leading(int pdfdoc, double distance) Sets distance between text lines */ PHP_FUNCTION(cpdf_set_leading) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_setTextLeading(pdf, (float) arg2->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_text_rendering(int pdfdoc, int rendermode) Determines how text is rendered */ PHP_FUNCTION(cpdf_set_text_rendering) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_long(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_setTextRenderingMode(pdf, arg2->value.lval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_horiz_scaling(int pdfdoc, double scale) Sets horizontal scaling of text */ PHP_FUNCTION(cpdf_set_horiz_scaling) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_setHorizontalScaling(pdf, (float) arg2->value.dval * 100.0); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_text_rise(int pdfdoc, double value) Sets the text rise */ PHP_FUNCTION(cpdf_set_text_rise) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_setTextRise(pdf, (float) arg2->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_text_matrix(int pdfdoc, arry matrix) Sets the text matrix */ PHP_FUNCTION(cpdf_set_text_matrix) { pval *arg1, *arg2, *data; int id, type, i; HashTable *matrix; CPDFdoc *pdf; float *pdfmatrixptr; float pdfmatrix[6]; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_array(arg2); id=arg1->value.lval; matrix=arg2->value.ht; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(_php3_hash_num_elements(matrix) != 6) { php3_error(E_WARNING,"Text matrix must have 6 elements"); RETURN_FALSE; } pdfmatrixptr = pdfmatrix; _php3_hash_internal_pointer_reset(matrix); for(i=0; i<_php3_hash_num_elements(matrix); i++) { _php3_hash_get_current_data(matrix, (void *) &data); switch(data->type) { case IS_DOUBLE: *pdfmatrixptr++ = (float) data->value.dval; break; default: *pdfmatrixptr++ = 0.0; break; } _php3_hash_move_forward(matrix); } cpdf_setTextMatrix(pdf, pdfmatrix[0], pdfmatrix[1], pdfmatrix[2], pdfmatrix[3], pdfmatrix[4], pdfmatrix[5]); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_text_pos(int pdfdoc, double x, double y [, int mode]) Set the position of text for the next cpdf_show call */ PHP_FUNCTION(cpdf_set_text_pos) { pval *argv[4]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if((argc < 3) || (argc > 4)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(argc > 3) { convert_to_long(argv[3]); mode = argv[3]->value.lval; } if(mode == 1) cpdf_rawSetTextPosition(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval); else cpdf_setTextPosition(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_rotate_text(int pdfdoc, double angle) Sets character spacing */ PHP_FUNCTION(cpdf_rotate_text) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_rotateText(pdf, (float) arg2->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_char_spacing(int pdfdoc, double space) Sets character spacing */ PHP_FUNCTION(cpdf_set_char_spacing) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_setCharacterSpacing(pdf, (float) arg2->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_word_spacing(int pdfdoc, double space) Sets spacing between words */ PHP_FUNCTION(cpdf_set_word_spacing) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_setWordSpacing(pdf, (float) arg2->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto double cpdf_stringwidth(int pdfdoc, string text) Returns width of text in current font */ PHP_FUNCTION(cpdf_stringwidth) { pval *arg1, *arg2; int id, type; double width; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } width = (double) cpdf_stringWidth(pdf, arg2->value.str.val); RETURN_DOUBLE((double)width); } /* }}} */ /* {{{ proto void cpdf_save(int pdfdoc) Saves current enviroment */ PHP_FUNCTION(cpdf_save) { pval *arg1; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_gsave(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_restore(int pdfdoc) Restores formerly saved enviroment */ PHP_FUNCTION(cpdf_restore) { pval *arg1; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_grestore(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_translate(int pdfdoc, double x, double y) Sets origin of coordinate system */ PHP_FUNCTION(cpdf_translate) { pval *arg1, *arg2, *arg3; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); convert_to_double(arg3); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_rawTranslate(pdf, (float) arg2->value.dval, (float) arg3->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_scale(int pdfdoc, double x-scale, double y-scale) Sets scaling */ PHP_FUNCTION(cpdf_scale) { pval *arg1, *arg2, *arg3; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); convert_to_double(arg3); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_scale(pdf, (float) arg2->value.dval, (float) arg3->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_rotate(int pdfdoc, double angle) Sets rotation */ PHP_FUNCTION(cpdf_rotate) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_rotate(pdf, (float) arg2->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setflat(int pdfdoc, double value) Sets flatness */ PHP_FUNCTION(cpdf_setflat) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; int flatness; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if((arg2->value.lval > 100) && (arg2->value.lval < 0)) { php3_error(E_WARNING,"Parameter of pdf_setflat() has to between 0 and 100"); RETURN_FALSE; } cpdf_setflat(pdf, (int) arg2->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setlinejoin(int pdfdoc, int value) Sets linejoin parameter */ PHP_FUNCTION(cpdf_setlinejoin) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_long(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if((arg2->value.lval > 2) && (arg2->value.lval < 0)) { php3_error(E_WARNING,"Parameter of pdf_setlinejoin() has to between 0 and 2"); RETURN_FALSE; } cpdf_setlinejoin(pdf, arg2->value.lval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setlinecap(int pdfdoc, int value) Sets linecap parameter */ PHP_FUNCTION(cpdf_setlinecap) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_long(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if((arg2->value.lval > 2) && (arg2->value.lval < 0)) { php3_error(E_WARNING,"Parameter of pdf_setlinecap() has to be > 0 and =< 2"); RETURN_FALSE; } cpdf_setlinecap(pdf, arg2->value.lval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setmiterlimit(int pdfdoc, double value) Sets miter limit */ PHP_FUNCTION(cpdf_setmiterlimit) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(arg2->value.dval < 1) { php3_error(E_WARNING,"Parameter of pdf_setmiterlimit() has to be >= 1"); RETURN_FALSE; } cpdf_setmiterlimit(pdf, (float) arg2->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setlinewidth(int pdfdoc, double width) Sets line width */ PHP_FUNCTION(cpdf_setlinewidth) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_setlinewidth(pdf, (float) arg2->value.dval); RETURN_TRUE; } /* }}} */ #define BUFFERLEN 20 /* {{{ proto void cpdf_setdash(int pdfdoc, long white, long black) Sets dash pattern */ PHP_FUNCTION(cpdf_setdash) { pval *arg1, *arg2, *arg3; int id, type; char buffer[BUFFERLEN]; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_long(arg2); convert_to_long(arg3); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } snprintf(buffer, BUFFERLEN, "[%d %d] 0", arg2->value.lval, arg3->value.lval); cpdf_setdash(pdf, buffer); RETURN_TRUE; } /* }}} */ #undef BUFFERLEN /* {{{ proto void cpdf_moveto(int pdfdoc, double x, double y [, int mode]) Sets current point */ PHP_FUNCTION(cpdf_moveto) { pval *argv[4]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if((argc < 3) || (argc > 4)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(argc > 3) { convert_to_long(argv[3]); mode = argv[3]->value.lval; } if(mode == 1) cpdf_rawMoveto(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval); else cpdf_moveto(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_rmoveto(int pdfdoc, double x, double y [, int mode]) Sets current point */ PHP_FUNCTION(cpdf_rmoveto) { pval *argv[4]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if((argc < 3) || (argc > 4)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(argc > 3) { convert_to_long(argv[3]); mode = argv[3]->value.lval; } if(mode == 1) cpdf_rawRmoveto(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval); else cpdf_rmoveto(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_curveto(int pdfdoc, double x1, double y1, double x2, double y2, double x3, double y3 [, int mode]) Draws a curve */ PHP_FUNCTION(cpdf_curveto) { pval *argv[8]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if((argc < 7) || (argc > 8)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[4]); convert_to_double(argv[5]); convert_to_double(argv[6]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(argc > 7) { convert_to_long(argv[7]); mode = argv[7]->value.lval; } if(mode == 1) cpdf_rawCurveto(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[4]->value.dval, (float) argv[5]->value.dval, (float) argv[6]->value.dval); else cpdf_curveto(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[4]->value.dval, (float) argv[5]->value.dval, (float) argv[6]->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_lineto(int pdfdoc, double x, double y [, int mode]) Draws a line */ PHP_FUNCTION(cpdf_lineto) { pval *argv[4]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if((argc < 3) || (argc > 4)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(argc > 3) { convert_to_long(argv[3]); mode = argv[3]->value.lval; } if(mode == 1) cpdf_rawLineto(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval); else cpdf_lineto(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_rlineto(int pdfdoc, double x, double y [, int mode]) Draws a line relative to current point */ PHP_FUNCTION(cpdf_rlineto) { pval *argv[4]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if((argc < 3) || (argc > 4)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(argc > 3) { convert_to_long(argv[3]); mode = argv[3]->value.lval; } if(mode == 1) cpdf_rawRlineto(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval); else cpdf_rlineto(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_circle(int pdfdoc, double x, double y, double radius [, int mode]) Draws a circle */ PHP_FUNCTION(cpdf_circle) { pval *argv[5]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if((argc < 4) || (argc > 5)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(argc > 4) { convert_to_long(argv[4]); mode = argv[4]->value.lval; } if(mode == 1) cpdf_rawCircle(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval, (float) argv[3]->value.dval); else cpdf_circle(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval, (float) argv[3]->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_arc(int pdfdoc, double x, double y, double radius, double start, double end [, int mode]) Draws an arc */ PHP_FUNCTION(cpdf_arc) { pval *argv[7]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if((argc < 6) || (argc > 7)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[4]); convert_to_double(argv[5]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(argc > 6) { convert_to_long(argv[6]); mode = argv[6]->value.lval; } if(mode == 1) cpdf_rawArc(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[4]->value.dval, (float) argv[5]->value.dval, 1); else cpdf_arc(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[4]->value.dval, (float) argv[5]->value.dval, 1); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_rect(int pdfdoc, double x, double y, double width, double height [, int mode]) Draws a rectangle */ PHP_FUNCTION(cpdf_rect) { pval *argv[6]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if((argc < 5) || (argc > 6)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[4]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(argc > 5) { convert_to_long(argv[5]); mode = argv[5]->value.lval; } if(mode == 1) cpdf_rawRect(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[4]->value.dval); else cpdf_rect(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[4]->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_newpath(int pdfdoc) Starts new path */ PHP_FUNCTION(cpdf_newpath) { pval *arg1; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_newpath(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_closepath(int pdfdoc) Close path */ PHP_FUNCTION(cpdf_closepath) { pval *arg1; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_closepath(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_closepath_stroke(int pdfdoc) Close path and draw line along path */ PHP_FUNCTION(cpdf_closepath_stroke) { pval *arg1; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_closepath(pdf); cpdf_stroke(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_stroke(int pdfdoc) Draw line along path path */ PHP_FUNCTION(cpdf_stroke) { pval *arg1; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_stroke(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_fill(int pdfdoc) Fill current path */ PHP_FUNCTION(cpdf_fill) { pval *arg1; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_fill(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_fill_stroke(int pdfdoc) Fill and stroke current path */ PHP_FUNCTION(cpdf_fill_stroke) { pval *arg1; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_fill(pdf); cpdf_stroke(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_closepath_fill_stroke(int pdfdoc) Close, fill and stroke current path */ PHP_FUNCTION(cpdf_closepath_fill_stroke) { pval *arg1; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_closepath(pdf); cpdf_fill(pdf); cpdf_stroke(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_clip(int pdfdoc) Clips to current path */ PHP_FUNCTION(cpdf_clip) { pval *arg1; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_clip(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setgray_fill(int pdfdoc, double value) Sets filling color to gray value */ PHP_FUNCTION(cpdf_setgray_fill) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_setgrayFill(pdf, (float) arg2->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setgray_stroke(int pdfdoc, double value) Sets drawing color to gray value */ PHP_FUNCTION(cpdf_setgray_stroke) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_setgrayStroke(pdf, (float) arg2->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setgray(int pdfdoc, double value) Sets drawing and filling color to gray value */ PHP_FUNCTION(cpdf_setgray) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_setgray(pdf, (float) arg2->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setrgbcolor_fill(int pdfdoc, double red, double green, double blue) Sets filling color to rgb color value */ PHP_FUNCTION(cpdf_setrgbcolor_fill) { pval *arg1, *arg2, *arg3, *arg4; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 4 || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); convert_to_double(arg3); convert_to_double(arg4); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_setrgbcolorFill(pdf, (float) arg2->value.dval, (float) arg3->value.dval, (float) arg4->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setrgbcolor_stroke(int pdfdoc, double red, double green, double blue) Sets drawing color to rgb color value */ PHP_FUNCTION(cpdf_setrgbcolor_stroke) { pval *arg1, *arg2, *arg3, *arg4; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 4 || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); convert_to_double(arg3); convert_to_double(arg4); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_setrgbcolorStroke(pdf, (float) arg2->value.dval, (float) arg3->value.dval, (float) arg4->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setrgbcolor(int pdfdoc, double red, double green, double blue) Sets drawing and filling color to rgb color value */ PHP_FUNCTION(cpdf_setrgbcolor) { pval *arg1, *arg2, *arg3, *arg4; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 4 || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); convert_to_double(arg3); convert_to_double(arg4); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_setrgbcolor(pdf, (float) arg2->value.dval, (float) arg3->value.dval, (float) arg4->value.dval); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_page_animation(int pdfdoc, int transition, double duration, double direction, int orientation, int inout) Sets transition between pages */ PHP_FUNCTION(cpdf_set_page_animation) { pval *arg1, *arg2, *arg3, *arg4, *arg5, *arg6; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 6 || getParameters(ht, 6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_long(arg2); convert_to_double(arg3); convert_to_double(arg4); convert_to_long(arg5); convert_to_long(arg6); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_setPageTransition(pdf, arg2->value.lval, arg3->value.dval, arg4->value.dval, arg5->value.lval, arg6->value.lval); RETURN_TRUE; } /* }}} */ /* {{{ proto array cpdf_finalize(int pdfdoc) Creates pdf doc in memory */ PHP_FUNCTION(cpdf_finalize) { pval *arg1; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } cpdf_finalizeAll(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto array cpdf_output_buffer(int pdfdoc) Returns the internal memory stream as string */ PHP_FUNCTION(cpdf_output_buffer) { pval *arg1; pval out_arr; int id, type, lenght; CPDFdoc *pdf; char *buffer; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } buffer = cpdf_getBufferForPDF(pdf, &lenght); php3_header(); php3_write(buffer, lenght); RETURN_TRUE; } /* }}} */ /* {{{ proto array cpdf_save_to_file(int pdfdoc, string filename) Saves the internal memory stream to a file */ PHP_FUNCTION(cpdf_save_to_file) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; CPDF_TLS_VARS; if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=arg1->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } #if APACHE if(strcmp(arg2->value.str.val, "-") == 0) php3_error(E_WARNING,"Writing to stdout as described in the ClibPDF manual is not possible if php3 is used as an Apache module. Use cpdf_output_buffer() instead."); #endif cpdf_savePDFmemoryStreamToFile(pdf, arg2->value.str.val); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_import_jpeg(int pdfdoc, string filename, double x, double y, double angle, double width, double height, double x-scale, double y-scale, int gsave [, int mode]) Includes jpeg image */ PHP_FUNCTION(cpdf_import_jpeg) { pval *argv[11]; int id, type, argc, mode=0; float width, height, xscale, yscale; CPDFdoc *pdf; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if((argc < 10) || (argc > 11)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_string(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[4]); convert_to_double(argv[5]); width = (float) argv[5]->value.dval; convert_to_double(argv[6]); height = (float) argv[6]->value.dval; convert_to_double(argv[7]); xscale = (float) argv[7]->value.dval; convert_to_double(argv[8]); yscale = (float) argv[8]->value.dval; convert_to_long(argv[9]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } if(argc > 10) { convert_to_long(argv[10]); mode = argv[10]->value.lval; } if(mode == 1) cpdf_rawImportImage(pdf, argv[1]->value.str.val, JPEG_IMG, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[4]->value.dval, &width, &height, &xscale, &yscale, argv[9]->value.lval); else cpdf_rawImportImage(pdf, argv[1]->value.str.val, JPEG_IMG, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[4]->value.dval, &width, &height, &xscale, &yscale, argv[9]->value.lval); RETURN_TRUE; } /* }}} */ #if HAVE_LIBGD13 /* {{{ proto void cpdf_place_inline_image(int pdfdoc, int gdimage, double x, double y, double angle, fload width, float height, int gsave [, int mode]) Includes image */ PHP_FUNCTION(cpdf_place_inline_image) { pval *argv[11]; int id, gid, type, argc, mode=0; int count, i, j, color; float width, height; CPDFdoc *pdf; unsigned char *buffer, *ptr; gdImagePtr im; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if((argc < 8) || (argc > 9)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_long(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[4]); convert_to_double(argv[5]); convert_to_double(argv[6]); convert_to_long(argv[7]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } gid=argv[1]->value.lval; im = php3_list_find(gid, &type); if (!im || type != phpi_get_le_gd()) { php3_error(E_WARNING, "cpdf: Unable to find image pointer"); RETURN_FALSE; } if(argc > 8) { convert_to_long(argv[8]); mode = argv[8]->value.lval; } count = 3 * im->sx * im->sy; if(NULL == (buffer = (unsigned char *) emalloc(count))) RETURN_FALSE; ptr = buffer; for(i=0; isy; i++) { for(j=0; jsx; j++) { color = im->pixels[i][j]; *ptr++ = im->red[color]; *ptr++ = im->green[color]; *ptr++ = im->blue[color]; } } if(mode == 1) cpdf_placeInLineImage(pdf, buffer, count, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[4]->value.dval, (float) argv[5]->value.dval, (float) argv[6]->value.dval, im->sx, im->sy, 8, 2, argv[7]->value.lval); else cpdf_rawPlaceInLineImage(pdf, buffer, count, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[4]->value.dval, (float) argv[5]->value.dval, (float) argv[6]->value.dval, im->sx, im->sy, 8, 2, argv[7]->value.lval); efree(buffer); RETURN_TRUE; } /* }}} */ #endif /* {{{ proto void cpdf_add_annotation(int pdfdoc, double xll, double yll, double xur, double xur, string title, string text [, int mode]) Sets annotation */ PHP_FUNCTION(cpdf_add_annotation) { pval *argv[11]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDFannotAttrib attrib; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if((argc < 7) || (argc > 8)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[4]); convert_to_string(argv[5]); convert_to_string(argv[6]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } attrib.flags = AF_NOZOOM | AF_NOROTATE | AF_READONLY; attrib.border_array = "[0 0 1 [4 2]]"; attrib.BS = NULL; attrib.r = 0.00; attrib.g = 1.00; attrib.b = 1.00; if(argc > 7) { convert_to_long(argv[7]); mode = argv[7]->value.lval; } if(mode == 1) cpdf_rawSetAnnotation(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[4]->value.dval, argv[5]->value.str.val, argv[6]->value.str.val, &attrib); else cpdf_setAnnotation(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[4]->value.dval, argv[5]->value.str.val, argv[6]->value.str.val, &attrib); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_action_url(int pdfdoc, double xll, double yll, double xur, double xur, string url [, int mode]) Sets Hyperlink */ PHP_FUNCTION(cpdf_set_action_url) { pval *argv[11]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDFannotAttrib attrib; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if((argc < 6) || (argc > 7)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[4]); convert_to_string(argv[5]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } attrib.flags = AF_NOZOOM | AF_NOROTATE | AF_READONLY; attrib.border_array = "[0 0 1 [4 0]]"; attrib.BS = NULL; attrib.r = 0.00; attrib.g = 0.00; attrib.b = 1.00; if(argc > 6) { convert_to_long(argv[6]); mode = argv[6]->value.lval; } if(mode == 1) cpdf_rawSetActionURL(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[4]->value.dval, argv[5]->value.str.val, &attrib); else cpdf_setActionURL(pdf, (float) argv[1]->value.dval, (float) argv[2]->value.dval, (float) argv[3]->value.dval, (float) argv[4]->value.dval, argv[5]->value.str.val, &attrib); RETURN_TRUE; } /* }}} */ /* {{{ proto int cpdf_add_outline(int pdfdoc, int lastoutline, int sublevel, int open, int pagenr, string title) Add outline */ PHP_FUNCTION(cpdf_add_outline) { pval *argv[11]; int id, oid, type, argc, mode=0; CPDFdoc *pdf; CPDFoutlineEntry *lastoutline; CPDF_TLS_VARS; argc = ARG_COUNT(ht); if(argc != 6) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_long(argv[1]); convert_to_long(argv[2]); convert_to_long(argv[3]); convert_to_long(argv[4]); convert_to_string(argv[5]); id=argv[0]->value.lval; pdf = php3_list_find(id,&type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php3_error(E_WARNING,"Unable to find identifier %d",id); RETURN_FALSE; } oid=argv[1]->value.lval; lastoutline = php3_list_find(oid,&type); if(!lastoutline || type!=CPDF_GLOBAL(le_outline)) { lastoutline = NULL; /* php3_error(E_WARNING,"Unable to find last outline entry %d",id); RETURN_FALSE; */ } lastoutline = cpdf_addOutlineEntry(pdf, lastoutline, argv[2]->value.lval, argv[3]->value.lval, argv[4]->value.lval, argv[5]->value.str.val, 1, 0.0, 0.0, 0.0, 0.0); id = php3_list_insert(lastoutline,CPDF_GLOBAL(le_outline)); RETURN_LONG(id); } /* }}} */ #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */