pdf.c
来自「windows下PDF文档的开发包」· C语言 代码 · 共 2,468 行 · 第 1/5 页
C
2,468 行
}
/* }}} */
/* {{{ proto void pdf_fill_stroke(int pdfdoc)
* Fill and stroke the path with the current fill and stroke color. */
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 void pdf_lineto(int pdfdoc, float x, float y)
* Draw a line from the current point to (x, y). */
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 void pdf_moveto(int pdfdoc, float x, float y)
* Set the 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 void pdf_rect(int pdfdoc, float x, float y, float width, float height)
* Draw a rectangle at lower left (x, y) with width and height. */
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 void pdf_stroke(int pdfdoc)
* Stroke the path with the current color and line width, and clear it. */
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;
}
/* }}} */
/* p_encoding.c */
/* {{{ proto void pdf_encoding_set_char(int pdfdoc, string encoding, int slot, string glyphname, int uv);
* Add a glyph name to a custom encoding. */
PHP_FUNCTION(pdf_encoding_set_char)
{
zval **p, **encoding, **slot, **glyphname, **uv;
PDF *pdf;
if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &p, &encoding, &slot, &glyphname, &uv) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf);
convert_to_string_ex(encoding);
convert_to_long_ex(slot);
convert_to_string_ex(glyphname);
convert_to_long_ex(uv);
PDF_encoding_set_char(pdf,
Z_STRVAL_PP(encoding),
Z_LVAL_PP(slot),
Z_STRVAL_PP(glyphname),
Z_LVAL_PP(uv));
RETURN_TRUE;
}
/* }}} */
/* p_font.c */
/* {{{ proto int pdf_findfont(int pdfdoc, string fontname, string encoding [, int embed])
* Search a font, and prepare it for later use. PDF_load_font() is recommended. */
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);
RETURN_LONG(font); /* offset handled in PDFlib Kernel */
}
/* }}} */
/* TODO [optlist] */
/* {{{ proto int pdf_load_font(int pdfdoc, string fontname, string encoding, string optlist);
* Open and search a font, and prepare it for later use.*/
PHP_FUNCTION(pdf_load_font)
{
zval **p, **fontname, **encoding, **optlist;
PDF *pdf;
int reserved = 0;
int retval;
if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &p, &fontname, &encoding, &optlist) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf);
convert_to_string_ex(fontname);
convert_to_string_ex(encoding);
convert_to_string_ex(optlist);
retval = PDF_load_font(pdf,
Z_STRVAL_PP(fontname),
reserved,
Z_STRVAL_PP(encoding),
Z_STRVAL_PP(optlist));
RETURN_LONG(retval); /* offset handled in PDFlib Kernel */
}
/* }}} */
/* {{{ proto void pdf_setfont(int pdfdoc, int font, float fontsize)
* Set the current font in the given size, using a font handle returned by PDF_load_font(). */
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, fontsize);
RETURN_TRUE;
}
/* }}} */
/* p_gstate.c */
/* {{{ proto void pdf_concat(int pdfdoc, float a, float b, float c, float d, float e, float f)
* Concatenate a matrix to the current transformation matrix. */
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 void pdf_initgraphics(int pdfdoc);
* Reset all 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 void pdf_restore(int pdfdoc)
* Restore the most recently saved graphics state. */
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 void pdf_rotate(int pdfdoc, float angle)
* Rotate the coordinate system by phi degrees. */
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 void pdf_save(int pdfdoc)
* Save the current graphics state. */
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 void pdf_scale(int pdfdoc, float x_scale, float y_scale)
* Scale the coordinate system. */
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 void pdf_setdash(int pdfdoc, float black, float white)
* Set the current dash pattern to b black and w white units. */
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 void pdf_setdashpattern(int pdfdoc, string optlist)
* Set a more complicated dash pattern defined by an optlist. */
PHP_FUNCTION(pdf_setdashpattern)
{
zval **p, **optlist;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &p, &optlist) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, p, -1, "pdf object", le_pdf);
convert_to_string_ex(optlist);
PDF_setdashpattern(pdf, Z_STRVAL_PP(optlist));
RETURN_TRUE;
}
/* }}} */
/* {{{ proto void pdf_setflat(int pdfdoc, float flatness)
* Set the flatness to a value between 0 and 100 inclusive. */
PHP_FUNCTION(pdf_setflat)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_double_ex(arg2);
PDF_setflat(pdf, (float) Z_DVAL_PP(arg2));
RETURN_TRUE;
}
/* }}} */
/* {{{ proto void pdf_setlinecap(int pdfdoc, int linecap)
* Set the linecap parameter to a value between 0 and 2 inclusive. */
PHP_FUNCTION(pdf_setlinecap)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
PDF_setlinecap(pdf, Z_LVAL_PP(arg2));
RETURN_TRUE;
}
/* }}} */
/* {{{ proto void pdf_setlinejoin(int pdfdoc, int linejoin)
* Set the line join parameter to a value between 0 and 2 inclusive. */
PHP_FUNCTION(pdf_setlinejoin)
{
zval **arg1, **arg2;
PDF *pdf;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
convert_to_long_ex(arg2);
PDF_setlinejoin(pdf, Z_LVAL_PP(arg2));
RETURN_TRUE;
}
/* }}} */
/* {{{ proto void pdf_setlinewidth(int pdfdoc, float width)
* Set the current linewidth to 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 void pdf_setmatrix(int pdfdoc, 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) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?