PDF_begin_template
(PHP 4 >= 4.0.5, PECL pdflib >= 1.0.0)
PDF_begin_template — Start template definition [deprecated]
Описание
int PDF_begin_template
( resource
$pdfdoc
, float $width
, float $height
)Starts a new template definition.
This function is deprecated since PDFlib version 7, use PDF_begin_template_ext() instead.
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Генерация нетекстовых MIME форматов
- PDF_activate_item
- PDF_add_annotation
- PDF_add_bookmark
- PDF_add_launchlink
- PDF_add_locallink
- PDF_add_nameddest
- PDF_add_note
- PDF_add_outline
- PDF_add_pdflink
- PDF_add_table_cell
- PDF_add_textflow
- PDF_add_thumbnail
- PDF_add_weblink
- PDF_arc
- PDF_arcn
- PDF_attach_file
- PDF_begin_document
- PDF_begin_font
- PDF_begin_glyph
- PDF_begin_item
- PDF_begin_layer
- PDF_begin_page_ext
- PDF_begin_page
- PDF_begin_pattern
- PDF_begin_template_ext
- PDF_begin_template
- PDF_circle
- PDF_clip
- PDF_close_image
- PDF_close_pdi_page
- PDF_close_pdi
- PDF_close
- PDF_closepath_fill_stroke
- PDF_closepath_stroke
- PDF_closepath
- PDF_concat
- PDF_continue_text
- PDF_create_3dview
- PDF_create_action
- PDF_create_annotation
- PDF_create_bookmark
- PDF_create_field
- PDF_create_fieldgroup
- PDF_create_gstate
- PDF_create_pvf
- PDF_create_textflow
- PDF_curveto
- PDF_define_layer
- PDF_delete_pvf
- PDF_delete_table
- PDF_delete_textflow
- PDF_delete
- PDF_encoding_set_char
- PDF_end_document
- PDF_end_font
- PDF_end_glyph
- PDF_end_item
- PDF_end_layer
- PDF_end_page_ext
- PDF_end_page
- PDF_end_pattern
- PDF_end_template
- PDF_endpath
- PDF_fill_imageblock
- PDF_fill_pdfblock
- PDF_fill_stroke
- PDF_fill_textblock
- PDF_fill
- PDF_findfont
- PDF_fit_image
- PDF_fit_pdi_page
- PDF_fit_table
- PDF_fit_textflow
- PDF_fit_textline
- PDF_get_apiname
- PDF_get_buffer
- PDF_get_errmsg
- PDF_get_errnum
- PDF_get_font
- PDF_get_fontname
- PDF_get_fontsize
- PDF_get_image_height
- PDF_get_image_width
- PDF_get_majorversion
- PDF_get_minorversion
- PDF_get_parameter
- PDF_get_pdi_parameter
- PDF_get_pdi_value
- PDF_get_value
- PDF_info_font
- PDF_info_matchbox
- PDF_info_table
- PDF_info_textflow
- PDF_info_textline
- PDF_initgraphics
- PDF_lineto
- PDF_load_3ddata
- PDF_load_font
- PDF_load_iccprofile
- PDF_load_image
- PDF_makespotcolor
- PDF_moveto
- PDF_new
- PDF_open_ccitt
- PDF_open_file
- PDF_open_gif
- PDF_open_image_file
- PDF_open_image
- PDF_open_jpeg
- PDF_open_memory_image
- PDF_open_pdi_document
- PDF_open_pdi_page
- PDF_open_pdi
- PDF_open_tiff
- PDF_pcos_get_number
- PDF_pcos_get_stream
- PDF_pcos_get_string
- PDF_place_image
- PDF_place_pdi_page
- PDF_process_pdi
- PDF_rect
- PDF_restore
- PDF_resume_page
- PDF_rotate
- PDF_save
- PDF_scale
- PDF_set_border_color
- PDF_set_border_dash
- PDF_set_border_style
- PDF_set_char_spacing
- PDF_set_duration
- PDF_set_gstate
- PDF_set_horiz_scaling
- PDF_set_info_author
- PDF_set_info_creator
- PDF_set_info_keywords
- PDF_set_info_subject
- PDF_set_info_title
- PDF_set_info
- PDF_set_layer_dependency
- PDF_set_leading
- PDF_set_parameter
- PDF_set_text_matrix
- PDF_set_text_pos
- PDF_set_text_rendering
- PDF_set_text_rise
- PDF_set_value
- PDF_set_word_spacing
- PDF_setcolor
- PDF_setdash
- PDF_setdashpattern
- PDF_setflat
- PDF_setfont
- PDF_setgray_fill
- PDF_setgray_stroke
- PDF_setgray
- PDF_setlinecap
- PDF_setlinejoin
- PDF_setlinewidth
- PDF_setmatrix
- PDF_setmiterlimit
- PDF_setpolydash
- PDF_setrgbcolor_fill
- PDF_setrgbcolor_stroke
- PDF_setrgbcolor
- PDF_shading_pattern
- PDF_shading
- PDF_shfill
- PDF_show_boxed
- PDF_show_xy
- PDF_show
- PDF_skew
- PDF_stringwidth
- PDF_stroke
- PDF_suspend_page
- PDF_translate
- PDF_utf16_to_utf8
- PDF_utf32_to_utf16
- PDF_utf8_to_utf16
Коментарии
A template is an "image" that can be drawn like a normal image, but is composed of pdflib-commands, directly specified in the program.
Templates can be used if you have a graphical pattern that you want to repeat several times - i.e. a logo repeated on top of each page. As the pdf-commands that draws the template are only included once in the file even if the template is shown several times, you can save a lot of space.
This program draws a simple fractal without the use of templates:
<?php
function drawmenger(&$pdf,$x,$y,$w,$level) {
if($level===0) {
pdf_rect($pdf,$x,$y,$w,$w);
pdf_fill($pdf);
return;
}
$w /= 3;
for($i=0; $i<3; $i++)
for($j=0; $j<3; $j++)
if($i!=1 || $j!=1)
drawmenger($pdf,$x+$w*$j,$y+$w*$i,$w,$level-1);
}
$pdf = pdf_new();
pdf_open_file($pdf);
pdf_begin_page($pdf, 595, 421);
drawmenger($pdf,50,50,300,6);
header('Content-type: application/pdf');
header('Content-disposition: inline; filename=test.pdf');
header('Content-length: ' . strlen($data));
echo $data;
pdf_end_page($pdf);
pdf_close($pdf);
pdf_delete($pdf);
?>
The file created is almost 1Mb.
Using templates to store the intermediate results reduces the filesize to a mere 3kb.
<?php
function drawmenger(&$pdf,$x,$y,$w,$level) {
if($level===0) {
pdf_rect($pdf,$x,$y,$w,$w);
pdf_fill($pdf);
return;
}
$w /= 3;
for($i=0; $i<3; $i++)
for($j=0; $j<3; $j++)
if($i!=1 || $j!=1)
drawmenger($pdf,$x+$w*$j,$y+$w*$i,$w,$level-1);
}
$pdf = pdf_new();
pdf_open_file($pdf);
pdf_begin_page($pdf, 595, 421);
drawmenger($pdf,50,50,300,6);
header('Content-type: application/pdf');
header('Content-disposition: inline; filename=test.pdf');
header('Content-length: ' . strlen($data));
echo $data;
pdf_end_page($pdf);
pdf_close($pdf);
pdf_delete($pdf);
?>
Sorry. In the previous note I somehow managed to include the same program twice.
The program that uses templates to draw the fractal is
<?php
function initmengers(&$pdf,$level) {
static $mengers;
if($level>0) initmengers($pdf,$level-1);
$mengers[$level] = pdf_begin_template($pdf,1,1);
if($level===0) {
pdf_rect($pdf,$x,$y,1,1);
pdf_fill($pdf);
}
else {
for($i=0; $i<3; $i++)
for($j=0; $j<3; $j++)
if($i!=1 || $j!=1)
pdf_place_image($pdf,$mengers[$level-1],$j/3,$i/3,1/3);
}
pdf_end_template($pdf);
return $mengers[$level];
}
$pdf = pdf_new();
pdf_open_file($pdf);
$pic = initmengers($pdf,6);
pdf_begin_page($pdf, 595, 421);
pdf_place_image($pdf,$pic,50,50,300);
pdf_end_page($pdf);
pdf_close($pdf);
$data = pdf_get_buffer($pdf);
header('Content-type: application/pdf');
header('Content-disposition: inline; filename=test.pdf');
header('Content-length: ' . strlen($data));
echo $data;
pdf_delete($pdf);
?>