Forum und email
PDF funkce

CXX. PDF funkce

Úvod

PDF funkce v PHP mohou vytvořit PDF soubory s využitím knihovny PDFlib vytvořené Thomasem Merzem.

Dokumentace této sekce je myšlena pouze jako přehled dostupných funkcí v knihovně PDFlib a neměla by být považována za vyčerpávající přehled. Prosím konzultujte dokumentaci obsaženou v distribuci PDFlib pro úplné a detailní vysvětlené každé zde uvedené funkce. Poskytuje velmi dobrý přehled toho, co PDFlib dokáže a obsahuje nejčerstvější dokumentaci ke všem funkcím.

Většina funkcí pdflib a příslušného PHP modulu má stejné jméno. Argumenty jsou také identické. Pokud chcete tento modul využívat opravdu efektivně, měli byste chápat také některé z konceptů PDF nebo Postscriptu. Všechny rozměry a koordináty se udávají v Postscriptových bodech. Obecně je 72 PostScriptových bodů na palec, ale závisí to na výstupním rozlišení. Věnujte prosím pozornost dokumentaci pdflib, která je součástí distribuce zdrojového kódu, pro bližší vysvětlení použitého souřadnicového systému.

Vemte prosím na vědomí, že většina PDF funkcí vyžaduje pdfdoc jako první parametr. Viz příklady níže pro bližší vysvětlení.

Poznámka: Pokud se zajímáté o alternativní volně dostupné PDF generátory, které nepotřebují externí PDF knihovny, podívejte se na tuto související FAQ.

Požadavky

PDFlib lze stáhnout na https://www.pdflib.com/products/pdflib-family/, ale vyžaduje, abyste zakoupili licenci pro komerční použití. Pro zkompilování tohoto rozšíření jsou potřeba knihovny JPEG a TIFF.

Problémy se starými verzemi PDFlib

Žádná verze PHP 4 od data 9. března 2000 nepodporuje podflib starší než 3.0.

PDFlib 3.0 a vyšší je podporováno PHP 3.0.19 a vyšší.

Instalace

Abyste mohli tyto funkce používat, musíte PHP zkompilovat s volbou --with-pdflib[=DIR]. DIR je základní instalační adresář PDFlib, výchozí hodnota je /usr/local. Navíc můžete určit knihovny jpeg, tiff a png, které má PDFlib používat, což je volitelné v PDFlib 4.x. Pokud tak chcete učinit, přidejte volby configure --with-jpeg-dir[=DIR] --with-png-dir[=DIR] --with-tiff-dir[=DIR].

Od pdflib 3.0 by se pdflib měla konfigurovat s volbou --enable-shared-pdflib.

Konfigurace běhu

Toto rozšíření nemá definováno žádné konfigurační direktivy.

Zmatek se starými verzemi PDFlib

Od PHP 4.0.5 je PHP rozšíření oficiálně podporováno společností PDFlib GmbH. To znamená, že všechny funkce popsané v PDFlib manuálu (V3.00 nebo vyšší) jsou podporovány v PHP 4 s přesně stejným významem a stejnými parametry. Oproti manuálu PDFlib se mohou lišit pouze návratové hodnoty, protože byla převzata konvence PHP pro vracení FALSE was adopted. Z důvodu kompatibility toto rozšíření PDFlib stále podporuje staré funkce, ale tyto by měly být nahrazeny jejich novějšími verzemi. PDFlib GmbH nepomáhá s řešením žádných problémů plynoucích z používání těchto zastaralých funkcí.

Tabulka 1. Zastaralé funkce a jejich náhrady

Stará funkceNáhrada
pdf_put_image()Není potřeba.
pdf_execute_image()Není potřeba.
pdf_get_annotation()pdf_get_bookmark() se stejnými parametry.
pdf_get_font()pdf_get_value() s "font" jako druhý argument.
pdf_get_fontsize()pdf_get_value() s "fontsize" jako druhý argument.
pdf_get_fontname()pdf_get_parameter() s "fontname" jako druhý argument.
pdf_set_info_creator()pdf_set_info() s "Creator" jako druhý argument.
pdf_set_info_title()pdf_set_info() s "Title" jako druhý argument.
pdf_set_info_subject()pdf_set_info() s "Subject" jako druhý argument.
pdf_set_info_author()pdf_set_info() s "Author" jako druhý argument.
pdf_set_info_keywords()pdf_set_info() s "Keywords" jako druhý argument.
pdf_set_leading()pdf_set_value() s "leading" jako druhý argument.
pdf_set_text_rendering()pdf_set_value() s "textrendering" jako druhý argument.
pdf_set_text_rise()pdf_set_value() s "textrise" jako druhý argument.
pdf_set_horiz_scaling()pdf_set_value() s "horizscaling" jako druhý argument.
pdf_set_text_matrix()neexistuje
pdf_set_char_spacing()pdf_set_value() s "charspacing" jako druhý argument.
pdf_set_word_spacing()pdf_set_value() s "wordspacing" jako druhý argument.
pdf_set_transition()pdf_set_parameter() s "transition" jako druhý argument.
pdf_open()pdf_new() plus následné zavolání pdf_open_file()
pdf_set_font()pdf_findfont() plus následné zavolání pdf_setfont()
pdf_set_duration()pdf_set_value() s "duration" jako druhý argument.
pdf_open_gif()pdf_open_image_file() s "gif" jako druhý argument.
pdf_open_jpeg()pdf_open_image_file() s "jpeg" jako druhý argument.
pdf_open_tiff()pdf_open_image_file() s "tiff" jako druhý argument.
pdf_open_png()pdf_open_image_file() s "png" jako druhý argument.
pdf_get_image_width()pdf_get_value() s "imagewidth" jako druhý argument a obrázkem jako třetí argument.
pdf_get_image_height()pdf_get_value() s "imageheight" jako druhý argument a obrázkem jako třetí argument.

Příklady

Většina funkcí se používá docela snadno. Nejtěžší je zřejmě vůbec nějaký jednoduchý PDF dokument vůbec vytvořit. Následující ukázka by měla pomoci začít. Vytvoří soubor test.pdf s jednou stránkou. Tato stránka obsahuje text "Times Roman outlined" napsaný 30ti bodovým obrysem. Text je také podtržený.

Příklad 1. Tvorba PDF dokumentu s pdflib

<?php
$pdf
= pdf_new();
pdf_open_file($pdf, "test.pdf");
pdf_set_info($pdf, "Author", "Uwe Steinmann");
pdf_set_info($pdf, "Title", "Test for PHP wrapper of PDFlib 2.0");
pdf_set_info($pdf, "Creator", "See Author");
pdf_set_info($pdf, "Subject", "Testing");
pdf_begin_page($pdf, 595, 842);
pdf_add_outline($pdf, "Page 1");
$font = pdf_findfont($pdf, "Times New Roman", "winansi", 1);
pdf_setfont($pdf, $font, 10);
pdf_set_value($pdf, "textrendering", 1);
pdf_show_xy($pdf, "Times Roman outlined", 50, 750);
pdf_moveto($pdf, 50, 740);
pdf_lineto($pdf, 330, 740);
pdf_stroke($pdf);
pdf_end_page($pdf);
pdf_close($pdf);
pdf_delete($pdf);
echo
"<A HREF=getpdf.php>finished</A>";
?>
Skript getpdf.php pouze vrátí vytvořený pdf dokument.

Příklad 2. Vrátit připravené PDF

<?php
$len
= filesize($filename);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=foo.pdf");
readfile($filename);
?>

Distribuce pdflib obsahuje rozsáhlejší ukázku, která obsahuje sérii stránek s analogovými hodinami. Tato ukázka převedená do PHP vypadá takto (stejnou ukázku najdete v dokumentaci k clibpdf modulu):

Příklad 3. pdfclock ukázka z pdflib distribuce

<?php
$radius
= 200;
$margin = 20;
$pagecount = 10;

$pdf = pdf_new();

if (!
pdf_open_file($pdf, "")) {
    print
error;
    exit;
};

pdf_set_parameter($pdf, "warning", "true");

pdf_set_info($pdf, "Creator", "pdf_clock.php");
pdf_set_info($pdf, "Author", "Uwe Steinmann");
pdf_set_info($pdf, "Title", "Analog Clock");

while(
$pagecount-- > 0) {
    
pdf_begin_page($pdf, 2 * ($radius + $margin), 2 * ($radius + $margin));

    
pdf_set_parameter($pdf, "transition", "wipe");
    
pdf_set_value($pdf, "duration", 0.5);
  
    
pdf_translate($pdf, $radius + $margin, $radius + $margin);
    
pdf_save($pdf);
    
pdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);

    
/* minute strokes */
    
pdf_setlinewidth($pdf, 2.0);
    for (
$alpha = 0; $alpha < 360; $alpha += 6) {
        
pdf_rotate($pdf, 6.0);
        
pdf_moveto($pdf, $radius, 0.0);
        
pdf_lineto($pdf, $radius-$margin/3, 0.0);
        
pdf_stroke($pdf);
    }

    
pdf_restore($pdf);
    
pdf_save($pdf);

    
/* 5 minute strokes */
    
pdf_setlinewidth($pdf, 3.0);
    for (
$alpha = 0; $alpha < 360; $alpha += 30) {
        
pdf_rotate($pdf, 30.0);
        
pdf_moveto($pdf, $radius, 0.0);
        
pdf_lineto($pdf, $radius-$margin, 0.0);
        
pdf_stroke($pdf);
    }

    
$ltime = getdate();

    
/* draw hour hand */
    
pdf_save($pdf);
    
pdf_rotate($pdf,-(($ltime['minutes']/60.0)+$ltime['hours']-3.0)*30.0);
    
pdf_moveto($pdf, -$radius/10, -$radius/20);
    
pdf_lineto($pdf, $radius/2, 0.0);
    
pdf_lineto($pdf, -$radius/10, $radius/20);
    
pdf_closepath($pdf);
    
pdf_fill($pdf);
    
pdf_restore($pdf);

    
/* draw minute hand */
    
pdf_save($pdf);
    
pdf_rotate($pdf,-(($ltime['seconds']/60.0)+$ltime['minutes']-15.0)*6.0);
    
pdf_moveto($pdf, -$radius/10, -$radius/20);
    
pdf_lineto($pdf, $radius * 0.8, 0.0);
    
pdf_lineto($pdf, -$radius/10, $radius/20);
    
pdf_closepath($pdf);
    
pdf_fill($pdf);
    
pdf_restore($pdf);

    
/* draw second hand */
    
pdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);
    
pdf_setlinewidth($pdf, 2);
    
pdf_save($pdf);
    
pdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));
    
pdf_moveto($pdf, -$radius/5, 0.0);
    
pdf_lineto($pdf, $radius, 0.0);
    
pdf_stroke($pdf);
    
pdf_restore($pdf);

    
/* draw little circle at center */
    
pdf_circle($pdf, 0, 0, $radius/30);
    
pdf_fill($pdf);

    
pdf_restore($pdf);

    
pdf_end_page($pdf);

    
# to see some difference
    
sleep(1);
}

pdf_close($pdf);

$buf = pdf_get_buffer($pdf);
$len = strlen($buf);

header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=foo.pdf");
print
$buf;

pdf_delete($pdf);
?>

Viz také

Poznámka: Existuje další PHP modul na tvorbu PDF dokumentů, založený na ClibPDF od firmy FastIO. Detaily viz ClibPDF funkce. Má mírně jinou API.

Obsah
PDF_activate_item -- Activate structure element or other content item
PDF_add_annotation -- Add annotation [deprecated]
PDF_add_bookmark -- Add bookmark for current page [deprecated]
PDF_add_launchlink -- Add launch annotation for current page [deprecated]
PDF_add_locallink -- Add link annotation for current page [deprecated]
PDF_add_nameddest -- Create named destination
PDF_add_note -- Set annotation for current page [deprecated]
PDF_add_outline -- Add bookmark for current page [deprecated]
PDF_add_pdflink -- Add file link annotation for current page [deprecated]
PDF_add_thumbnail -- Add thumbnail for current page
PDF_add_weblink -- Add weblink for current page [deprecated]
PDF_arc -- Draw a counterclockwise circular arc segment
PDF_arcn -- Draw a clockwise circular arc segment
PDF_attach_file -- Add file attachment for current page [deprecated]
PDF_begin_document -- Create new PDF file
PDF_begin_font -- Start a Type 3 font definition
PDF_begin_glyph -- Start glyph definition for Type 3 font
PDF_begin_item -- Open structure element or other content item
PDF_begin_layer -- Start layer
PDF_begin_page_ext -- Start new page
pdf_begin_page -- Začít novou stranu
PDF_begin_pattern -- Start pattern definition
PDF_begin_template -- Start template definition
PDF_circle -- Draw a circle
PDF_clip -- Clip to current path
PDF_close_image -- Close image
PDF_close_pdi_page -- Close the page handle
PDF_close_pdi -- Close the input PDF document
pdf_close -- Zavřít PDF dokument
PDF_closepath_fill_stroke -- Close, fill and stroke current path
PDF_closepath_stroke -- Close and stroke path
PDF_closepath -- Close current path
PDF_concat -- Concatenate a matrix to the CTM
PDF_continue_text -- Output text in next line
PDF_create_action -- Create action for objects or events
PDF_create_annotation -- Create rectangular annotation
PDF_create_bookmark -- Create bookmark
PDF_create_field -- Create form field
PDF_create_fieldgroup -- Create form field group
PDF_create_gstate -- Create graphics state object
PDF_create_pvf -- Create PDFlib virtual file
PDF_create_textflow -- Create textflow object
PDF_curveto -- Draw Bezier curve
PDF_define_layer -- Create layer definition
PDF_delete_pvf -- Delete PDFlib virtual file
PDF_delete_textflow -- Delete textflow object
PDF_delete -- Delete PDFlib object
PDF_encoding_set_char -- Add glyph name and/or Unicode value
PDF_end_document -- Close PDF file
PDF_end_font -- Terminate Type 3 font definition
PDF_end_glyph -- Terminate glyph definition for Type 3 font
PDF_end_item -- Close structure element or other content item
PDF_end_layer -- Deactivate all active layers
PDF_end_page_ext -- Finish page
pdf_end_page -- Ukončit stranu
PDF_end_pattern -- Finish pattern
PDF_end_template -- Finish template
PDF_endpath -- End current path
PDF_fill_imageblock -- Fill image block with variable data
PDF_fill_pdfblock -- Fill PDF block with variable data
PDF_fill_stroke -- Fill and stroke path
PDF_fill_textblock -- Fill text block with variable data
PDF_fill -- Fill current path
PDF_findfont -- Prepare font for later use [deprecated]
PDF_fit_image -- Place image or template
PDF_fit_pdi_page -- Place imported PDF page
PDF_fit_textflow -- Format textflow in rectangular area
PDF_fit_textline -- Place single line of text
PDF_get_apiname -- Get name of unsuccessfull API function
PDF_get_buffer -- Get PDF output buffer
PDF_get_errmsg -- Get error text
PDF_get_errnum -- Get error number
PDF_get_font -- Get font [deprecated]
PDF_get_fontname -- Get font name [deprecated]
PDF_get_fontsize -- Font handling [deprecated]
PDF_get_image_height -- Get image height [deprecated]
PDF_get_image_width -- Get image width [deprecated]
PDF_get_majorversion -- Get major version number [deprecated]
PDF_get_minorversion -- Get minor version number [deprecated]
PDF_get_parameter -- Get string parameter
PDF_get_pdi_parameter -- Get PDI string parameter
PDF_get_pdi_value -- Get PDI numerical parameter
PDF_get_value -- Get numerical parameter
PDF_info_textflow -- Query textflow state
PDF_initgraphics -- Reset graphic state
PDF_lineto -- Draw a line
PDF_load_font -- Search and prepare font
PDF_load_iccprofile -- Search and prepare ICC profile
PDF_load_image -- Open image file
PDF_makespotcolor -- Make spot color
PDF_moveto -- Set current point
PDF_new -- Create PDFlib object
PDF_open_ccitt -- Open raw CCITT image [deprecated]
PDF_open_file -- Create PDF file [deprecated]
PDF_open_gif -- Open GIF image [deprecated]
PDF_open_image_file -- Read image from file [deprecated]
PDF_open_image -- Use image data [deprecated]
PDF_open_jpeg -- Open JPEG image [deprecated]
PDF_open_memory_image -- Open image created with PHP's image functions [not supported]
PDF_open_pdi_page -- Prepare a page
PDF_open_pdi -- Open PDF file
PDF_open_tiff -- Open TIFF image [deprecated]
PDF_place_image -- Place image on the page [deprecated]
PDF_place_pdi_page -- Place PDF page [deprecated]
PDF_process_pdi -- Process imported PDF document
PDF_rect -- Draw rectangle
PDF_restore -- Restore graphics state
PDF_resume_page -- Resume page
PDF_rotate -- Rotate coordinate system
PDF_save -- Save graphics state
PDF_scale -- Scale coordinate system
PDF_set_border_color -- Set border color of annotations [deprecated]
PDF_set_border_dash -- Set border dash style of annotations [deprecated]
PDF_set_border_style -- Set border style of annotations [deprecated]
PDF_set_char_spacing -- Set character spacing [deprecated]
PDF_set_duration -- Set duration between pages [deprecated]
PDF_set_gstate -- Activate graphics state object
PDF_set_horiz_scaling -- Set horizontal text scaling [deprecated]
PDF_set_info_author -- Fill the author document info field [deprecated]
PDF_set_info_creator -- Fill the creator document info field [deprecated]
PDF_set_info_keywords -- Fill the keywords document info field [deprecated]
PDF_set_info_subject -- Fill the subject document info field [deprecated]
PDF_set_info_title -- Fill the title document info field [deprecated]
pdf_set_info -- Vyplnit položku informací o dokumentu
PDF_set_layer_dependency -- Define relationships among layers
pdf_set_leading -- Nastavit vzdálenost mezi řádky
pdf_set_parameter -- Nastavit určité parametry
PDF_set_text_matrix -- Set text matrix [deprecated]
PDF_set_text_pos -- Set text position
PDF_set_text_rendering -- Determine text rendering [deprecated]
PDF_set_text_rise -- Set text rise [deprecated]
PDF_set_value -- Set numerical parameter
PDF_set_word_spacing -- Set spacing between words [deprecated]
PDF_setcolor -- Set fill and stroke color
PDF_setdash -- Set simple dash pattern
PDF_setdashpattern -- Set dash pattern
PDF_setflat -- Set flatness
PDF_setfont -- Set font
PDF_setgray_fill -- Set fill color to gray [deprecated]
PDF_setgray_stroke -- Set stroke color to gray [deprecated]
PDF_setgray -- Set color to gray [deprecated]
PDF_setlinecap -- Set linecap parameter
PDF_setlinejoin -- Set linejoin parameter
PDF_setlinewidth -- Set line width
PDF_setmatrix -- Set current transformation matrix
PDF_setmiterlimit -- Set miter limit
PDF_setpolydash -- Set complicated dash pattern [deprecated]
PDF_setrgbcolor_fill -- Set fill rgb color values [deprecated]
PDF_setrgbcolor_stroke -- Set stroke rgb color values [deprecated]
PDF_setrgbcolor -- Set fill and stroke rgb color values [deprecated]
PDF_shading_pattern -- Define shading pattern
PDF_shading -- Define blend
PDF_shfill -- Fill area with shading
pdf_show_boxed -- Vytisknout text v rámečku
pdf_show_xy -- Vytisknout text na určené pozici
pdf_show -- Umístit text na aktuální pozici
PDF_skew -- Skew the coordinate system
PDF_stringwidth -- Return width of text
PDF_stroke -- Stroke path
PDF_suspend_page -- Suspend page
PDF_translate -- Set origin of coordinate system
PDF_utf16_to_utf8 -- Convert string from UTF-16 to UTF-8
PDF_utf8_to_utf16 -- Convert string from UTF-8 to UTF-16