ILIAS  eassessment Revision 61809
 All Data Structures Namespaces Files Functions Variables Groups Pages
TCPDF Class Reference
+ Collaboration diagram for TCPDF:

Public Member Functions

 __construct ($orientation='P', $unit='mm', $format='A4', $unicode=true, $encoding='UTF-8', $diskcache=false)
 This is the class constructor.
 __destruct ()
 Default destructor.
 setPageUnit ($unit)
 Set the units of measure for the document.
 getPageSizeFromFormat ($format)
 Get page dimensions from format name.
 setPageBoxes ($page, $type, $llx, $lly, $urx, $ury, $points=false)
 Set page boundaries.
 setPageOrientation ($orientation, $autopagebreak='', $bottommargin='')
 Set page orientation.
 setSpacesRE ($re='/[^\S\xa0]/')
 Set regular expression to detect withespaces or word separators.
 setRTL ($enable, $resetx=true)
 Enable or disable Right-To-Left language mode.
 getRTL ()
 Return the RTL status.
 setTempRTL ($mode)
 Force temporary RTL language direction.
 isRTLTextDir ()
 Return the current temporary RTL status.
 setLastH ($h)
 Set the last cell height.
 resetLastH ()
 Reset the last cell height.
 getLastH ()
 Get the last cell height.
 setImageScale ($scale)
 Set the adjusting factor to convert pixels to user units.
 getImageScale ()
 Returns the adjusting factor to convert pixels to user units.
 getPageDimensions ($pagenum='')
 Returns an array of page dimensions:
 getPageWidth ($pagenum='')
 Returns the page width in units.
 getPageHeight ($pagenum='')
 Returns the page height in units.
 getBreakMargin ($pagenum='')
 Returns the page break margin.
 getScaleFactor ()
 Returns the scale factor (number of points in user unit).
 SetMargins ($left, $top, $right=-1, $keepmargins=false)
 Defines the left, top and right margins.
 SetLeftMargin ($margin)
 Defines the left margin.
 SetTopMargin ($margin)
 Defines the top margin.
 SetRightMargin ($margin)
 Defines the right margin.
 SetCellPadding ($pad)
 Set the same internal Cell padding for top, right, bottom, left-.
 setCellPaddings ($left='', $top='', $right='', $bottom='')
 Set the internal Cell paddings.
 getCellPaddings ()
 Get the internal Cell padding array.
 setCellMargins ($left='', $top='', $right='', $bottom='')
 Set the internal Cell margins.
 getCellMargins ()
 Get the internal Cell margin array.
 SetAutoPageBreak ($auto, $margin=0)
 Enables or disables the automatic page breaking mode.
 SetDisplayMode ($zoom, $layout='SinglePage', $mode='UseNone')
 Defines the way the document is to be displayed by the viewer.
 SetCompression ($compress)
 Activates or deactivates page compression.
 SetTitle ($title)
 Defines the title of the document.
 SetSubject ($subject)
 Defines the subject of the document.
 SetAuthor ($author)
 Defines the author of the document.
 SetKeywords ($keywords)
 Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'.
 SetCreator ($creator)
 Defines the creator of the document.
 Error ($msg)
 This method is automatically called in case of fatal error; it simply outputs the message and halts the execution.
 Open ()
 This method begins the generation of the PDF document.
 Close ()
 Terminates the PDF document.
 setPage ($pnum, $resetmargins=false)
 Move pointer at the specified document page and update page dimensions.
 lastPage ($resetmargins=false)
 Reset pointer to the last document page.
 getPage ()
 Get current document page number.
 getNumPages ()
 Get the total number of insered pages.
 addTOCPage ($orientation='', $format='', $keepmargins=false)
 Adds a new TOC (Table Of Content) page to the document.
 endTOCPage ()
 Terminate the current TOC (Table Of Content) page public.
 AddPage ($orientation='', $format='', $keepmargins=false, $tocpage=false)
 Adds a new page to the document.
 endPage ($tocpage=false)
 Terminate the current page.
 startPage ($orientation='', $format='', $tocpage=false)
 Starts a new page to the document.
 setPageMark ()
 Set start-writing mark on current page stream used to put borders and fills.
 setHeaderData ($ln='', $lw=0, $ht='', $hs='')
 Set header data.
 getHeaderData ()
 Returns header data:
 setHeaderMargin ($hm=10)
 Set header margin.
 getHeaderMargin ()
 Returns header margin in user units.
 setFooterMargin ($fm=10)
 Set footer margin.
 getFooterMargin ()
 Returns footer margin in user units.
 setPrintHeader ($val=true)
 Set a flag to print page header.
 setPrintFooter ($val=true)
 Set a flag to print page footer.
 getImageRBX ()
 Return the right-bottom (or left-bottom for RTL) corner X coordinate of last inserted image.
 getImageRBY ()
 Return the right-bottom (or left-bottom for RTL) corner Y coordinate of last inserted image.
 Header ()
 This method is used to render the page header.
 Footer ()
 This method is used to render the page footer.
 PageNo ()
 Returns the current page number.
 AddSpotColor ($name, $c, $m, $y, $k)
 Defines a new spot color.
 SetDrawColorArray ($color, $ret=false)
 Defines the color used for all drawing operations (lines, rectangles and cell borders).
 SetDrawColor ($col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false)
 Defines the color used for all drawing operations (lines, rectangles and cell borders).
 SetDrawSpotColor ($name, $tint=100)
 Defines the spot color used for all drawing operations (lines, rectangles and cell borders).
 SetFillColorArray ($color)
 Defines the color used for all filling operations (filled rectangles and cell backgrounds).
 SetFillColor ($col1=0, $col2=-1, $col3=-1, $col4=-1)
 Defines the color used for all filling operations (filled rectangles and cell backgrounds).
 SetFillSpotColor ($name, $tint=100)
 Defines the spot color used for all filling operations (filled rectangles and cell backgrounds).
 SetTextColorArray ($color)
 Defines the color used for text.
 SetTextColor ($col1=0, $col2=-1, $col3=-1, $col4=-1)
 Defines the color used for text.
 SetTextSpotColor ($name, $tint=100)
 Defines the spot color used for text.
 GetStringWidth ($s, $fontname='', $fontstyle='', $fontsize=0, $getarray=false)
 Returns the length of a string in user unit.
 GetArrStringWidth ($sa, $fontname='', $fontstyle='', $fontsize=0, $getarray=false)
 Returns the string length of an array of chars in user unit or an array of characters widths.
 GetCharWidth ($char, $notlast=true)
 Returns the length of the char in user unit for the current font considering current stretching and spacing (tracking/kerning).
 getRawCharWidth ($char)
 Returns the length of the char in user unit for the current font.
 GetNumChars ($s)
 Returns the numbero of characters in a string.
 AddFont ($family, $style='', $fontfile='', $subset='default')
 Imports a TrueType, Type1, core, or CID0 font and makes it available.
 SetFont ($family, $style='', $size=0, $fontfile='', $subset='default')
 Sets the font used to print character strings.
 SetFontSize ($size, $out=true)
 Defines the size of the current font.
 getFontDescent ($font, $style='', $size=0)
 Return the font descent value.
 getFontAscent ($font, $style='', $size=0)
 Return the font ascent value.
 SetDefaultMonospacedFont ($font)
 Defines the default monospaced font.
 AddLink ()
 Creates a new internal link and returns its identifier.
 SetLink ($link, $y=0, $page=-1)
 Defines the page and position a link points to.
 Link ($x, $y, $w, $h, $link, $spaces=0)
 Puts a link on a rectangular area of the page.
 Annotation ($x, $y, $w, $h, $text, $opt=array('Subtype'=>'Text'), $spaces=0)
 Puts a markup annotation on a rectangular area of the page.
 Text ($x, $y, $txt, $fstroke=false, $fclip=false, $ffill=true, $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M', $rtloff=false)
 Prints a text cell at the specified position.
 AcceptPageBreak ()
 Whenever a page break condition is met, the method is called, and the break is issued or not depending on the returned value.
 removeSHY ($txt='')
 Removes SHY characters from text.
 Cell ($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M')
 Prints a cell (rectangular area) with optional borders, background color and character string.
 MultiCell ($w, $h, $txt, $border=0, $align='J', $fill=false, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0, $valign='T', $fitcell=false)
 This method allows printing text with line breaks.
 getNumLines ($txt, $w=0, $reseth=false, $autopadding=true, $cellpadding='', $border=0)
 This method return the estimated number of lines for print a simple text string using Multicell() method.
 getStringHeight ($w, $txt, $reseth=false, $autopadding=true, $cellpadding='', $border=0)
 This method return the estimated needed height for print a simple text string in Multicell() method.
 Write ($h, $txt, $link='', $fill=false, $align='', $ln=false, $stretch=0, $firstline=false, $firstblock=false, $maxh=0, $wadj=0, $margin='')
 This method prints text from the current position.
 UTF8ArrSubString ($strarr, $start='', $end='')
 Extract a slice of the $strarr array and return it as string.
 UniArrSubString ($uniarr, $start='', $end='')
 Extract a slice of the $uniarr array and return it as string.
 UTF8ArrayToUniArray ($ta)
 Convert an array of UTF8 values to array of unicode characters.
 unichr ($c)
 Returns the unicode caracter specified by UTF-8 value.
 getImageFileType ($imgfile, $iminfo=array())
 Return the image type given the file name or array returned by getimagesize() function.
 Image ($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false, $fitonpage=false)
 Puts an image in the page.
 set_mqr ($mqr)
 Sets the current active configuration setting of magic_quotes_runtime (if the set_magic_quotes_runtime function exist)
 get_mqr ()
 Gets the current active configuration setting of magic_quotes_runtime (if the get_magic_quotes_runtime function exist)
 Ln ($h='', $cell=false)
 Performs a line break.
 GetX ()
 Returns the relative X value of current position.
 GetAbsX ()
 Returns the absolute X value of current position.
 GetY ()
 Returns the ordinate of the current position.
 SetX ($x, $rtloff=false)
 Defines the abscissa of the current position.
 SetY ($y, $resetx=true, $rtloff=false)
 Moves the current abscissa back to the left margin and sets the ordinate.
 SetXY ($x, $y, $rtloff=false)
 Defines the abscissa and ordinate of the current position.
 Output ($name='doc.pdf', $dest='I')
 Send the document to a given destination: string, local file or browser.
 _destroy ($destroyall=false, $preserve_objcopy=false)
 Unset all class variables except the following critical variables: internal_encoding, state, bufferlen, buffer and diskcache.
 setHeaderFont ($font)
 Set header font.
 getHeaderFont ()
 Get header font.
 setFooterFont ($font)
 Set footer font.
 getFooterFont ()
 Get Footer font.
 setLanguageArray ($language)
 Set language array.
 getPDFData ()
 Returns the PDF data.
 addHtmlLink ($url, $name, $fill=false, $firstline=false, $color='', $style=-1, $firstblock=false)
 Output anchor link.
 convertHTMLColorToDec ($color='#FFFFFF')
 Returns an associative array (keys: R,G,B) from an html color name or a six-digit or three-digit hexadecimal color representation (i.e.
 pixelsToUnits ($px)
 Converts pixels to User's Units.
 unhtmlentities ($text_to_convert)
 Reverse function for htmlentities.
 SetProtection ($permissions=array('print', 'modify', 'copy', 'annot-forms', 'fill-forms', 'extract', 'assemble', 'print-high'), $user_pass='', $owner_pass=null, $mode=0, $pubkeys=null)
 Set document protection Remark: the protection against modification is for people who have the full Acrobat product.
 StartTransform ()
 Starts a 2D tranformation saving current graphic state.
 StopTransform ()
 Stops a 2D tranformation restoring previous graphic state.
 ScaleX ($s_x, $x='', $y='')
 Horizontal Scaling.
 ScaleY ($s_y, $x='', $y='')
 Vertical Scaling.
 ScaleXY ($s, $x='', $y='')
 Vertical and horizontal proportional Scaling.
 Scale ($s_x, $s_y, $x='', $y='')
 Vertical and horizontal non-proportional Scaling.
 MirrorH ($x='')
 Horizontal Mirroring.
 MirrorV ($y='')
 Verical Mirroring.
 MirrorP ($x='', $y='')
 Point reflection mirroring.
 MirrorL ($angle=0, $x='', $y='')
 Reflection against a straight line through point (x, y) with the gradient angle (angle).
 TranslateX ($t_x)
 Translate graphic object horizontally.
 TranslateY ($t_y)
 Translate graphic object vertically.
 Translate ($t_x, $t_y)
 Translate graphic object horizontally and vertically.
 Rotate ($angle, $x='', $y='')
 Rotate object.
 SkewX ($angle_x, $x='', $y='')
 Skew horizontally.
 SkewY ($angle_y, $x='', $y='')
 Skew vertically.
 Skew ($angle_x, $angle_y, $x='', $y='')
 Skew.
 SetLineWidth ($width)
 Defines the line width.
 GetLineWidth ()
 Returns the current the line width.
 SetLineStyle ($style, $ret=false)
 Set line style.
 Line ($x1, $y1, $x2, $y2, $style=array())
 Draws a line between two points.
 Rect ($x, $y, $w, $h, $style='', $border_style=array(), $fill_color=array())
 Draws a rectangle.
 Curve ($x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3, $style='', $line_style=array(), $fill_color=array())
 Draws a Bezier curve.
 Polycurve ($x0, $y0, $segments, $style='', $line_style=array(), $fill_color=array())
 Draws a poly-Bezier curve.
 Ellipse ($x0, $y0, $rx, $ry='', $angle=0, $astart=0, $afinish=360, $style='', $line_style=array(), $fill_color=array(), $nc=2)
 Draws an ellipse.
 Circle ($x0, $y0, $r, $angstr=0, $angend=360, $style='', $line_style=array(), $fill_color=array(), $nc=2)
 Draws a circle.
 PolyLine ($p, $style='', $line_style=array(), $fill_color=array())
 Draws a polygonal line.
 Polygon ($p, $style='', $line_style=array(), $fill_color=array(), $closed=true)
 Draws a polygon.
 RegularPolygon ($x0, $y0, $r, $ns, $angle=0, $draw_circle=false, $style='', $line_style=array(), $fill_color=array(), $circle_style='', $circle_outLine_style=array(), $circle_fill_color=array())
 Draws a regular polygon.
 StarPolygon ($x0, $y0, $r, $nv, $ng, $angle=0, $draw_circle=false, $style='', $line_style=array(), $fill_color=array(), $circle_style='', $circle_outLine_style=array(), $circle_fill_color=array())
 Draws a star polygon.
 RoundedRect ($x, $y, $w, $h, $r, $round_corner='1111', $style='', $border_style=array(), $fill_color=array())
 Draws a rounded rectangle.
 RoundedRectXY ($x, $y, $w, $h, $rx, $ry, $round_corner='1111', $style='', $border_style=array(), $fill_color=array())
 Draws a rounded rectangle.
 Arrow ($x0, $y0, $x1, $y1, $head_style=0, $arm_size=5, $arm_angle=15)
 Draws a grahic arrow.
 Bookmark ($txt, $level=0, $y=-1, $page='')
 Adds a bookmark.
 IncludeJS ($script)
 Adds a javascript.
 addJavascriptObject ($script, $onload=false)
 Adds a javascript object and return object ID.
 setFormDefaultProp ($prop=array())
 Set default properties for form fields.
 getFormDefaultProp ()
 Return the default properties for form fields.
 TextField ($name, $w, $h, $prop=array(), $opt=array(), $x='', $y='', $js=false)
 Creates a text field.
 RadioButton ($name, $w, $prop=array(), $opt=array(), $onvalue='On', $checked=false, $x='', $y='', $js=false)
 Creates a RadioButton field.
 ListBox ($name, $w, $h, $values, $prop=array(), $opt=array(), $x='', $y='', $js=false)
 Creates a List-box field.
 ComboBox ($name, $w, $h, $values, $prop=array(), $opt=array(), $x='', $y='', $js=false)
 Creates a Combo-box field.
 CheckBox ($name, $w, $checked=false, $prop=array(), $opt=array(), $onvalue='Yes', $x='', $y='', $js=false)
 Creates a CheckBox field.
 Button ($name, $w, $h, $caption, $action, $prop=array(), $opt=array(), $x='', $y='', $js=false)
 Creates a button field.
 setUserRights ($enable=true, $document='/FullSave', $annots='/Create/Delete/Modify/Copy/Import/Export', $form='/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate', $signature='/Modify', $ef='/Create/Delete/Modify/Import', $formex='')
 Set User's Rights for PDF Reader WARNING: This is experimental and currently do not work.
 setSignature ($signing_cert='', $private_key='', $private_key_password='', $extracerts='', $cert_type=2, $info=array())
 Enable document signature (requires the OpenSSL Library).
 setSignatureAppearance ($x=0, $y=0, $w=0, $h=0, $page=-1)
 Set the digital signature appearance (a cliccable rectangle area to get signature properties)
 startPageGroup ($page='')
 Create a new page group.
 AliasNbPages ($alias='{nb}')
 Defines an alias for the total number of pages.
 getAliasNbPages ()
 Returns the string alias used for the total number of pages.
 AliasNumPage ($alias='{pnb}')
 Defines an alias for the page number.
 getAliasNumPage ()
 Returns the string alias used for the page number.
 getGroupPageNo ()
 Return the current page in the group.
 getGroupPageNoFormatted ()
 Returns the current group page number formatted as a string.
 getPageGroupAlias ()
 Return the alias of the current page group If the current font is unicode type, the returned string is surrounded by additional curly braces.
 getPageNumGroupAlias ()
 Return the alias for the page number on the current page group If the current font is unicode type, the returned string is surrounded by additional curly braces.
 PageNoFormatted ()
 Returns the current page number formatted as a string.
 setVisibility ($v)
 Set the visibility of the successive elements.
 setAlpha ($alpha, $bm='Normal')
 Set alpha for stroking (CA) and non-stroking (ca) operations.
 setJPEGQuality ($quality)
 Set the default JPEG compression quality (1-100)
 setDefaultTableColumns ($cols=4)
 Set the default number of columns in a row for HTML tables.
 setCellHeightRatio ($h)
 Set the height of the cell (line height) respect the font height.
 getCellHeightRatio ()
 return the height of cell repect font height.
 setPDFVersion ($version='1.7')
 Set the PDF version (check PDF reference for valid values).
 setViewerPreferences ($preferences)
 Set the viewer preferences dictionary controlling the way the document is to be presented on the screen or in print.
 colorRegistrationBar ($x, $y, $w, $h, $transition=true, $vertical=false, $colors='A, R, G, B, C, M, Y, K')
 Paints color transition registration bars.
 cropMark ($x, $y, $w, $h, $type='A, B, C, D', $color=array(0, 0, 0))
 Paints crop mark.
 registrationMark ($x, $y, $r, $double=false, $cola=array(0, 0, 0), $colb=array(255, 255, 255))
 Paints a registration mark.
 LinearGradient ($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0, 0, 1, 0))
 Paints a linear colour gradient.
 RadialGradient ($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0.5, 0.5, 0.5, 0.5, 1))
 Paints a radial colour gradient.
 CoonsPatchMesh ($x, $y, $w, $h, $col1=array(), $col2=array(), $col3=array(), $col4=array(), $coords=array(0.00, 0.0, 0.33, 0.00, 0.67, 0.00, 1.00, 0.00, 1.00, 0.33, 1.00, 0.67, 1.00, 1.00, 0.67, 1.00, 0.33, 1.00, 0.00, 1.00, 0.00, 0.67, 0.00, 0.33), $coords_min=0, $coords_max=1, $antialias=false)
 Paints a coons patch mesh.
 Gradient ($type, $coords, $stops, $background=array(), $antialias=false)
 Output gradient.
 _putshaders ()
 Output gradient shaders.
 PieSector ($xc, $yc, $r, $a, $b, $style='FD', $cw=true, $o=90)
 Draw the sector of a circle.
 PieSectorXY ($xc, $yc, $rx, $ry, $a, $b, $style='FD', $cw=false, $o=0, $nc=2)
 Draw the sector of an ellipse.
 ImageEps ($file, $x='', $y='', $w=0, $h=0, $link='', $useBoundingBox=true, $align='', $palign='', $border=0, $fitonpage=false)
 Embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files.
 setBarcode ($bc='')
 Set document barcode.
 getBarcode ()
 Get current barcode.
 write1DBarcode ($code, $type, $x='', $y='', $w='', $h='', $xres='', $style='', $align='')
 Print a Linear Barcode.
 writeBarcode ($x, $y, $w, $h, $type, $style, $font, $xres, $code)
 This function is DEPRECATED, please use the new write1DBarcode() function.
 write2DBarcode ($code, $type, $x='', $y='', $w='', $h='', $style='', $align='', $distort=false)
 Print 2D Barcode.
 getMargins ()
 Returns an array containing current margins:
 getOriginalMargins ()
 Returns an array containing original margins:
 getFontSize ()
 Returns the current font size.
 getFontSizePt ()
 Returns the current font size in points unit.
 getFontFamily ()
 Returns the current font family name.
 getFontStyle ()
 Returns the current font style.
 getCSSPadding ($csspadding, $width=0)
 Get the internal Cell padding from CSS attribute.
 getCSSMargin ($cssmargin, $width=0)
 Get the internal Cell margin from CSS attribute.
 writeHTMLCell ($w, $h, $x, $y, $html='', $border=0, $ln=0, $fill=false, $reseth=true, $align='', $autopadding=true)
 Prints a cell (rectangular area) with optional borders, background color and html text string.
 writeHTML ($html, $ln=true, $fill=false, $reseth=false, $cell=false, $align='')
 Allows to preserve some HTML formatting (limited support).
 setLIsymbol ($symbol='!')
 Set the default bullet to be used as LI bullet symbol.
 SetBooklet ($booklet=true, $inner=-1, $outer=-1)
 Set the booklet mode for double-sided pages.
 setHtmlVSpace ($tagvs)
 Set the vertical spaces for HTML tags.
 setListIndentWidth ($width)
 Set custom width for list indentation.
 setOpenCell ($isopen)
 Set the top/bottom cell sides to be open or closed when the cell cross the page.
 setHtmlLinksStyle ($color=array(0, 0, 255), $fontstyle='U')
 Set the color and font style for HTML links.
 getHTMLUnitToUnits ($htmlval, $refsize=1, $defaultunit='px', $points=false)
 Convert HTML string containing value and unit of measure to user's units or points.
 intToRoman ($number)
 Returns the Roman representation of an integer number.
 movePage ($frompage, $topage)
 Move a page to a previous position.
 deletePage ($page)
 Remove the specified page.
 copyPage ($page=0)
 Clone the specified page to a new page.
 addTOC ($page='', $numbersfont='', $filler='.', $toc_name='TOC')
 Output a Table of Content Index (TOC).
 addHTMLTOC ($page='', $toc_name='TOC', $templates=array(), $correct_align=true)
 Output a Table Of Content Index (TOC) using HTML templates.
 startTransaction ()
 Stores a copy of the current TCPDF object used for undo operation.
 commitTransaction ()
 Delete the copy of the current TCPDF object used for undo operation.
 rollbackTransaction ($self=false)
 This method allows to undo the latest transaction by returning the latest saved TCPDF object with startTransaction().
 objclone ($object)
 Creates a copy of a class object.
 empty_string ($str)
 Determine whether a string is empty.
 revstrpos ($haystack, $needle, $offset=0)
 Find position of last occurrence of a substring in a string.
 setEqualColumns ($numcols=0, $width=0, $y='')
 Set multiple columns of the same size.
 setColumnsArray ($columns)
 Set columns array.
 selectColumn ($col='')
 Set position at a given column.
 getColumn ()
 Return the current column number.
 getNumberOfColumns ()
 Return the current number of columns.
 serializeTCPDFtagParameters ($pararray)
 Serialize an array of parameters to be used with TCPDF tag in HTML code.
 setTextRenderingMode ($stroke=0, $fill=true, $clip=false)
 Set Text rendering mode.
 getHyphenPatternsFromTEX ($file)
 Returns an array of hyphenation patterns.
 hyphenateText ($text, $patterns, $dictionary=array(), $leftmin=1, $rightmin=2, $charmin=1, $charmax=8)
 Returns text with soft hyphens.
 setRasterizeVectorImages ($mode)
 Enable/disable rasterization of vector images using ImageMagick library.
 setFontSubsetting ($enable=true)
 Enable or disable default option for font subsetting.
 getFontSubsetting ()
 Return the default option for font subsetting.
 stringLeftTrim ($str, $replace='')
 Left trim the input string.
 stringRightTrim ($str, $replace='')
 Right trim the input string.
 stringTrim ($str, $replace='')
 Trim the input string.
 isUnicodeFont ()
 Return true if the current font is unicode type.
 getFontFamilyName ($fontfamily)
 Return normalized font name.
 startTemplate ($w=0, $h=0)
 Start a new XObject Template.
 endTemplate ()
 End the current XObject Template started with startTemplate() and restore the previous graphic state.
 printTemplate ($id, $x='', $y='', $w=0, $h=0, $align='', $palign='', $fitonpage=false)
 Print an XObject Template.
 setFontStretching ($perc=100)
 Set the percentage of character stretching.
 getFontStretching ()
 Get the percentage of character stretching.
 setFontSpacing ($spacing=0)
 Set the amount to increase or decrease the space between characters in a text.
 getFontSpacing ()
 Get the amount to increase or decrease the space between characters in a text.
 getPageRegions ()
 Return an array of no-write page regions.
 setPageRegions ($regions=array())
 Set no-write regions on page.
 addPageRegion ($region)
 Add a single no-write region on selected page.
 removePageRegion ($key)
 Remove a single no-write region.
 ImageSVG ($file, $x='', $y='', $w=0, $h=0, $link='', $align='', $palign='', $border=0, $fitonpage=false)
 Embedd a Scalable Vector Graphics (SVG) image.

Protected Member Functions

 setPageFormat ($format, $orientation='P')
 Change the format of the current page.
 swapPageBoxCoordinates ($page)
 Swap X and Y coordinates of page boxes (change page boxes orientation).
 adjustCellPadding ($brd=0)
 Adjust the internal Cell padding array to take account of the line width.
 setContentMark ($page=0)
 Set start-writing mark on selected page.
 setHeader ()
 This method is used to render the page header.
 setFooter ()
 This method is used to render the page footer.
 setTableHeader ()
 This method is used to render the table header on new page (if any).
 getFontsList ()
 Fill the list of available fonts ($this->fontlist).
 _putEmbeddedFiles ()
 Embedd the attached files.
 checkPageBreak ($h=0, $y='', $addpage=true)
 Add page if needed.
 getCellCode ($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M')
 Returns the PDF string code to print a cell (rectangular area) with optional borders, background color and character string.
 getCellBorder ($x, $y, $w, $h, $brd)
 Returns the code to draw the cell border.
 getBorderMode ($brd, $position='start')
 Get the border mode accounting for multicell position (opens bottom side of multicell crossing pages)
 getRemainingWidth ()
 Returns the remaining width between the current position and margins.
 fitBlock (&$w, &$h, &$x, &$y, $fitonpage=false)
 Set the block dimensions accounting for page breaks and page/column fitting.
 _toJPEG ($image)
 Convert the loaded image to a JPEG and then return a structure for the PDF creator.
 _toPNG ($image)
 Convert the loaded image to a PNG and then return a structure for the PDF creator.
 _setGDImageTransparency ($new_image, $image)
 Set the transparency for the given GD image.
 _parsejpeg ($file)
 Extract info from a JPEG file without using the GD library.
 _parsepng ($file)
 Extract info from a PNG file without using the GD library.
 rfread ($handle, $length)
 Binary-safe and URL-safe file read.
 ImagePngAlpha ($file, $x, $y, $wpx, $hpx, $w, $h, $type, $link, $align, $resize, $dpi, $palign)
 Extract info from a PNG image with alpha channel using the GD library.
 getGDgamma ($v)
 Correct the gamma value to be used with GD library.
 _dochecks ()
 Check for locale-related bug protected.
 _getfontpath ()
 Return fonts path.
 _putpages ()
 Output pages.
 _putannotsrefs ($n)
 Output references to page annotations.
 _getannotsrefs ($n)
 Get references to page annotations.
 _putannotsobjs ()
 Output annotations objects for all pages.
 _putAPXObject ($w=0, $h=0, $stream='')
 Put appearance streams XObject used to define annotation's appearance states.
 _getULONG (&$str, &$offset)
 Get ULONG from string (Big Endian 32-bit unsigned integer).
 _getUSHORT (&$str, &$offset)
 Get USHORT from string (Big Endian 16-bit unsigned integer).
 _getSHORT (&$str, &$offset)
 Get SHORT from string (Big Endian 16-bit signed integer).
 _getBYTE (&$str, &$offset)
 Get BYTE from string (8-bit unsigned integer).
 _getTrueTypeFontSubset ($font, $subsetchars)
 Returns a subset of the TrueType font data without the unused glyphs.
 _getTTFtableChecksum ($table, $length)
 Returs the checksum of a TTF table.
 _putfontwidths ($font, $cidoffset=0)
 Outputs font widths.
 _putfonts ()
 Output fonts.
 _puttruetypeunicode ($font)
 Adds unicode fonts.
 _putcidfont0 ($font)
 Output CID-0 fonts.
 _putimages ()
 Output images.
 _putxobjects ()
 Output Form XObjects Templates.
 _putspotcolors ()
 Output Spot Colors Resources.
 _getxobjectdict ()
 Return XObjects Dictionary.
 _putresourcedict ()
 Output Resources Dictionary.
 _putresources ()
 Output Resources.
 _putinfo ()
 Adds some Metadata information (Document Information Dictionary) (see Chapter 14.3.3 Document Information Dictionary of PDF32000_2008.pdf Reference)
 _putcatalog ()
 Output Catalog.
 _putviewerpreferences ()
 Output viewer preferences.
 _putheader ()
 Output PDF header.
 _enddoc ()
 Output end of document (EOF).
 _beginpage ($orientation='', $format='')
 Initialize a new page.
 _endpage ()
 Mark end of page.
 _newobj ()
 Begin a new object and return the object number.
 _getobj ($objid='')
 Return the starting object string for the selected object ID.
 _dounderline ($x, $y, $txt)
 Underline text.
 _dounderlinew ($x, $y, $w)
 Underline for rectangular text area.
 _dolinethrough ($x, $y, $txt)
 Line through text.
 _dolinethroughw ($x, $y, $w)
 Line through for rectangular text area.
 _dooverline ($x, $y, $txt)
 Overline text.
 _dooverlinew ($x, $y, $w)
 Overline for rectangular text area.
 _freadint ($f)
 Read a 4-byte (32 bit) integer from file.
 _escape ($s)
 Add "\" before "\", "(" and ")".
 _datastring ($s, $n=0)
 Format a data string for meta information.
 _datestring ($n=0)
 Returns a formatted date for meta information.
 _textstring ($s, $n=0)
 Format a text string for meta information.
 _escapetext ($s)
 THIS METHOD IS DEPRECATED Format a text string.
 _getrawstream ($s, $n=0)
 get raw output stream.
 _getstream ($s, $n=0)
 Format output stream (DEPRECATED).
 _putstream ($s, $n=0)
 Output a stream (DEPRECATED).
 _out ($s)
 Output a string to the document.
 UTF8StringToArray ($str)
 Converts UTF-8 strings to codepoints array.
 UTF8ToUTF16BE ($str, $setbom=true)
 Converts UTF-8 strings to UTF16-BE.
 UTF8ToLatin1 ($str)
 Converts UTF-8 strings to Latin1 when using the standard 14 core fonts.
 UTF8ArrToLatin1 ($unicode)
 Converts UTF-8 characters array to array of Latin1 characters

 arrUTF8ToUTF16BE ($unicode, $setbom=true)
 Converts array of UTF-8 characters to UTF16-BE string.
 getRandomSeed ($seed='')
 Returns a string containing random data to be used as a seed for encryption methods.
 _objectkey ($n)
 Compute encryption key depending on object number where the encrypted data is stored.
 _encrypt_data ($n, $s)
 Encrypt the input string.
 _putencryption ()
 Put encryption on PDF document.
 _RC4 ($key, $text)
 Returns the input text encrypted using RC4 algorithm and the specified key.
 _AES ($key, $text)
 Returns the input text exrypted using AES algorithm and the specified key.
 _md5_16 ($str)
 Encrypts a string using MD5 and returns it's value as a binary string.
 _Uvalue ()
 Compute U value (used for encryption)
 _UEvalue ()
 Compute UE value (used for encryption)
 _Ovalue ()
 Compute O value (used for encryption)
 _OEvalue ()
 Compute OE value (used for encryption)
 _fixAES256Password ($password)
 Convert password for AES-256 encryption mode.
 _generateencryptionkey ()
 Compute encryption key protected.
 getUserPermissionCode ($permissions, $mode=0)
 Return the premission code used on encryption (P value).
 convertHexStringToString ($bs)
 Convert hexadecimal string to string.
 convertStringToHexString ($s)
 Convert string to hexadecimal string (byte string)
 getEncPermissionsString ($protection)
 Convert encryption P value to a string of bytes, low-order byte first.
 Transform ($tm)
 Apply graphic transformations.
 _outPoint ($x, $y)
 Begin a new subpath by moving the current point to coordinates (x, y), omitting any connecting line segment.
 _outLine ($x, $y)
 Append a straight line segment from the current point to the point (x, y).
 _outRect ($x, $y, $w, $h, $op)
 Append a rectangle to the current path as a complete subpath, with lower-left corner (x, y) and dimensions widthand height in user space.
 _outCurve ($x1, $y1, $x2, $y2, $x3, $y3)
 Append a cubic Bézier curve to the current path.
 _outCurveV ($x2, $y2, $x3, $y3)
 Append a cubic Bézier curve to the current path.
 _outCurveY ($x1, $y1, $x3, $y3)
 Append a cubic Bézier curve to the current path.
 _outellipticalarc ($xc, $yc, $rx, $ry, $xang=0, $angs=0, $angf=360, $pie=false, $nc=2)
 Append an elliptical arc to the current path.
 utf8StrRev ($str, $setbom=false, $forcertl=false)
 Reverse the RLT substrings using the Bidirectional Algorithm (http://unicode.org/reports/tr9/).
 utf8StrArrRev ($arr, $str='', $setbom=false, $forcertl=false)
 Reverse the RLT substrings array using the Bidirectional Algorithm (http://unicode.org/reports/tr9/).
 utf8Bidi ($ta, $str='', $forcertl=false)
 Reverse the RLT substrings using the Bidirectional Algorithm (http://unicode.org/reports/tr9/).
 _putbookmarks ()
 Create a bookmark PDF string.
 _putjavascript ()
 Create a javascript PDF string.
 _JScolor ($color)
 Convert color to javascript color.
 _addfield ($type, $name, $x, $y, $w, $h, $prop)
 Adds a javascript form field.
 getAnnotOptFromJSProp ($prop)
 Convert JavaScript form fields properties array to Annotation Properties array.
 _putsignature ()
 Add certification signature (DocMDP or UR3) You can set only one signature type protected.
 formatPageNumber ($num)
 Format the page numbers.
 formatTOCPageNumber ($num)
 Format the page numbers on the Table Of Content.
 _putocg ()
 Put visibility settings.
 addExtGState ($parms)
 Add transparency parameters to the current extgstate.
 setExtGState ($gs)
 Add an extgstate.
 _putextgstates ()
 Put extgstates for object transparency.
 Clip ($x, $y, $w, $h)
 Set a rectangular clipping area.
 extractCSSproperties ($cssdata)
 Extracts the CSS properties from a CSS string.
 isValidCSSSelectorForTag ($dom, $key, $selector)
 Returns true if the CSS selector is valid for the selected HTML tag.
 getTagStyleFromCSS ($dom, $key, $css)
 Returns the styles that apply for the selected HTML tag.
 getCSSBorderWidth ($width)
 Returns the border width from CSS property.
 getCSSBorderDashStyle ($style)
 Returns the border dash style from CSS property.
 getCSSBorderStyle ($cssborder)
 Returns the border style array from CSS border properties.
 getCSSFontSpacing ($spacing, $parent=0)
 Returns the letter-spacing value from CSS value.
 getCSSFontStretching ($stretch, $parent=100)
 Returns the percentage of font stretching from CSS value.
 getHtmlDomArray ($html)
 Returns the HTML DOM array.
 getSpaceString ()
 Returns the string used to find spaces.
 openHTMLTagHandler (&$dom, $key, $cell)
 Process opening tags.
 closeHTMLTagHandler (&$dom, $key, $cell, $maxbottomliney=0)
 Process closing tags.
 addHTMLVertSpace ($hbz=0, $hb=0, $cell=false, $firsttag=false, $lasttag=false)
 Add vertical spaces if needed.
 getBorderStartPosition ()
 Return the starting coordinates to draw an html border.
 drawHTMLTagBorder ($tag, $xmax)
 Draw an HTML block border and fill.
 swapMargins ($reverse=true)
 Swap the left and right margins.
 putHtmlListBullet ($listdepth, $listtype='', $size=10)
 Output an HTML list bullet or ordered item symbol.
 getGraphicVars ()
 Returns current graphic variables as array.
 setGraphicVars ($gvars, $extended=false)
 Set graphic variables.
 getObjFilename ($name)
 Returns a temporary filename for caching object on filesystem.
 writeDiskCache ($filename, $data, $append=false)
 Writes data to a temporary file on filesystem.
 readDiskCache ($filename)
 Read data from a temporary file on filesystem.
 setBuffer ($data)
 Set buffer content (always append data).
 replaceBuffer ($data)
 Replace the buffer content.
 getBuffer ()
 Get buffer content.
 setPageBuffer ($page, $data, $append=false)
 Set page buffer content.
 getPageBuffer ($page)
 Get page buffer content.
 setImageBuffer ($image, $data)
 Set image buffer content.
 setImageSubBuffer ($image, $key, $data)
 Set image buffer content for a specified sub-key.
 getImageBuffer ($image)
 Get image buffer content.
 setFontBuffer ($font, $data)
 Set font buffer content.
 setFontSubBuffer ($font, $key, $data)
 Set font buffer content.
 getFontBuffer ($font)
 Get font buffer content.
 hyphenateWord ($word, $patterns, $dictionary=array(), $leftmin=1, $rightmin=2, $charmin=1, $charmax=8)
 Returns an array of chars containing soft hyphens.
 getPathPaintOperator ($style, $default='S')
 Get the Path-Painting Operators.
 checkPageRegions ($h=0, &$x='', &$y='')
 Check page for no-write regions and adapt current coordinates and page margins if necessary.
 getSVGTransformMatrix ($attribute)
 Get the tranformation matrix from SVG transform attribute.
 getTransformationMatrixProduct ($ta, $tb)
 Get the product of two SVG tranformation matrices.
 convertSVGtMatrix ($tm)
 Convert SVG transformation matrix to PDF.
 SVGTransform ($tm)
 Apply SVG graphic transformation matrix.
 setSVGStyles ($svgstyle, $prevsvgstyle, $x=0, $y=0, $w=1, $h=1, $clip_function='', $clip_params=array())
 Apply the requested SVG styles (*** TO BE COMPLETED ***)
 SVGPath ($d, $style='')
 Draws an SVG path.
 getVectorsAngle ($x1, $y1, $x2, $y2)
 Returns the angle in radiants between two vectors.
 startSVGElementHandler ($parser, $name, $attribs, $ctm=array())
 Sets the opening SVG element handler function for the XML parser.
 endSVGElementHandler ($parser, $name)
 Sets the closing SVG element handler function for the XML parser.
 segSVGContentHandler ($parser, $data)
 Sets the character data handler function for the XML parser.

Protected Attributes

 $page
 $n
 $offsets
 $buffer
 $pages = array()
 $state
 $compress
 $CurOrientation
 $pagedim = array()
 $k
 $fwPt
 $fhPt
 $wPt
 $hPt
 $w
 $h
 $lMargin
 $tMargin
 $rMargin
 $bMargin
 $cell_padding = array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0)
 $cell_margin = array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0)
 $x
 $y
 $lasth
 $LineWidth
 $CoreFonts
 $fonts = array()
 $FontFiles = array()
 $diffs = array()
 $images = array()
 $PageAnnots = array()
 $links = array()
 $FontFamily
 $FontStyle
 $FontAscent
 $FontDescent
 $underline
 $overline
 $CurrentFont
 $FontSizePt
 $FontSize
 $DrawColor
 $FillColor
 $TextColor
 $ColorFlag
 $AutoPageBreak
 $PageBreakTrigger
 $InFooter = false
 $ZoomMode
 $LayoutMode
 $title = ''
 $subject = ''
 $author = ''
 $keywords = ''
 $creator = ''
 $AliasNbPages = '{nb}'
 $AliasNumPage = '{pnb}'
 $img_rb_x
 $img_rb_y
 $imgscale = 1
 $isunicode = false
 $unicode
 $PDFVersion = '1.7'
 $header_margin
 $footer_margin
 $original_lMargin
 $original_rMargin
 $header_font
 $footer_font
 $l
 $barcode = false
 $print_header = true
 $print_footer = true
 $header_logo = ''
 $header_logo_width = 30
 $header_title = ''
 $header_string = ''
 $default_table_columns = 4
 $HREF = array()
 $fontlist = array()
 $fgcolor
 $listordered = array()
 $listcount = array()
 $listnum = 0
 $listindent = 0
 $listindentlevel = 0
 $bgcolor
 $tempfontsize = 10
 $lispacer = ''
 $encoding = 'UTF-8'
 $internal_encoding
 $rtl = false
 $tmprtl = false
 $encrypted
 Indicates whether document is protected protected.
 $encryptdata = array()
 Array containing encryption settings protected.
 $last_enc_key
 last RC4 key encrypted (cached for optimisation) protected
 $last_enc_key_c
 last RC4 computed key protected
 $enc_padding = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A"
 Encryption padding protected.
 $file_id
 File ID (used on trailer) protected.
 $outlines = array()
 Outlines for bookmark protected.
 $OutlineRoot
 Outline root for bookmark protected.
 $javascript = ''
 javascript code protected
 $n_js
 javascript counter protected
 $linethrough
 line trough state protected
 $ur = array()
 Array with additional document-wide usage rights for the document.
 $dpi = 72
 Dot Per Inch Document Resolution (do not change) protected.
 $newpagegroup = array()
 Array of page numbers were a new page group was started protected.
 $pagegroups
 Contains the number of pages of the groups protected.
 $currpagegroup
 Contains the alias of the current page group protected.
 $visibility = 'all'
 Restrict the rendering of some elements to screen or printout.
 $n_ocg_print
 Print visibility.
 $n_ocg_view
 View visibility.
 $extgstates
 Array of transparency objects and parameters.
 $jpeg_quality
 Set the default JPEG compression quality (1-100) protected.
 $cell_height_ratio = K_CELL_HEIGHT_RATIO
 Default cell height ratio.
 $viewer_preferences
 PDF viewer preferences.
 $PageMode
 A name object specifying how the document should be displayed when opened.
 $gradients = array()
 Array for storing gradient information.
 $intmrk = array()
 Array used to store positions inside the pages buffer.
 $bordermrk = array()
 Array used to store positions inside the pages buffer.
 $emptypagemrk = array()
 Array used to store page positions to track empty pages.
 $cntmrk = array()
 Array used to store content positions inside the pages buffer.
 $footerpos = array()
 Array used to store footer positions of each page.
 $footerlen = array()
 Array used to store footer length of each page.
 $newline = true
 True if a newline is created.
 $endlinex = 0
 End position of the latest inserted line protected.
 $linestyleWidth = ''
 PDF string for last line width protected.
 $linestyleCap = '0 J'
 PDF string for last line width protected.
 $linestyleJoin = '0 j'
 PDF string for last line width protected.
 $linestyleDash = '[] 0 d'
 PDF string for last line width protected.
 $openMarkedContent = false
 True if marked-content sequence is open protected.
 $htmlvspace = 0
 Count the latest inserted vertical spaces on HTML protected.
 $spot_colors = array()
 Array of Spot colors protected.
 $lisymbol = ''
 Symbol used for HTML unordered list items protected.
 $epsmarker = 'x#!#EPS#!#x'
 String used to mark the beginning and end of EPS image blocks protected.
 $transfmatrix = array()
 Array of transformation matrix protected.
 $transfmatrix_key = 0
 Current key for transformation matrix protected.
 $booklet = false
 Booklet mode for double-sided pages protected.
 $feps = 0.005
 Epsilon value used for float calculations protected.
 $tagvspaces = array()
 Array used for custom vertical spaces for HTML tags protected.
 $customlistindent = -1
 $opencell = true
 $embeddedfiles = array()
 $premode = false
 $transfmrk = array()
 Array used to store positions of graphics transformation blocks inside the page buffer.
 $htmlLinkColorArray = array(0, 0, 255)
 Default color for html links protected.
 $htmlLinkFontStyle = 'U'
 Default font style to add to html links protected.
 $numpages = 0
 Counts the number of pages.
 $pagelen = array()
 Array containing page lengths in bytes.
 $numimages = 0
 Counts the number of pages.
 $imagekeys = array()
 Store the image keys.
 $bufferlen = 0
 Length of the buffer in bytes.
 $diskcache = false
 If true enables disk caching.
 $numfonts = 0
 Counts the number of fonts.
 $fontkeys = array()
 Store the font keys.
 $font_obj_ids = array()
 Store the font object IDs.
 $pageopen = array()
 Store the fage status (true when opened, false when closed).
 $default_monospaced_font = 'courier'
 Default monospaced font protected.
 $objcopy
 Used to store a cloned copy of the current class object protected.
 $cache_file_length = array()
 Array used to store the lengths of cache files protected.
 $thead = ''
 Table header content to be repeated on each new page protected.
 $theadMargins = array()
 Margins used for table header.
 $cache_UTF8StringToArray = array()
 Cache array for UTF8StringToArray() method.
 $cache_maxsize_UTF8StringToArray = 8
 Maximum size of cache array used for UTF8StringToArray() method.
 $cache_size_UTF8StringToArray = 0
 Current size of cache array used for UTF8StringToArray() method.
 $sign = false
 If true enables document signing protected.
 $signature_data = array()
 Signature data protected.
 $signature_max_length = 11742
 Signature max length protected.
 $signature_appearance = array('page' => 1, 'rect' => '0 0 0 0')
 data for signature appearance protected
 $re_spaces = '/[^\S\xa0]/'
 Regular expression used to find blank characters used for word-wrapping.
 $re_space = array('p' => '[^\S\xa0]', 'm' => '')
 Array of parts $re_spaces protected.
 $sig_obj_id = 0
 Signature object ID protected.
 $byterange_string = '/ByteRange[0 ********** ********** **********]'
 ByteRange placemark used during signature process.
 $sig_annot_ref = '***SIGANNREF*** 0 R'
 Placemark used during signature process.
 $page_obj_id = array()
 ID of page objects protected.
 $form_obj_id = array()
 List of form annotations IDs protected.
 $default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128))
 Deafult Javascript field properties.
 $js_objects = array()
 Javascript objects array protected.
 $form_action = ''
 Current form action (used during XHTML rendering) protected.
 $form_enctype = 'application/x-www-form-urlencoded'
 Current form encryption type (used during XHTML rendering) protected.
 $form_mode = 'post'
 Current method to submit forms.
 $annotation_fonts = array()
 List of fonts used on form fields (fontname => fontkey).
 $radiobutton_groups = array()
 List of radio buttons parent objects.
 $radio_groups = array()
 List of radio group objects IDs protected.
 $textindent = 0
 Text indentation value (used for text-indent CSS attribute) protected.
 $start_transaction_page = 0
 Store page number when startTransaction() is called.
 $start_transaction_y = 0
 Store Y position when startTransaction() is called.
 $inthead = false
 True when we are printing the thead section on a new page protected.
 $columns = array()
 Array of column measures (width, space, starting Y position) protected.
 $num_columns = 1
 Number of colums protected.
 $current_column = 0
 Current column number protected.
 $column_start_page = 0
 Starting page for columns protected.
 $maxselcol = array('page' => 0, 'column' => 0)
 Maximum page and column selected protected.
 $colxshift = array('x' => 0, 's' => 0, 'p' => 0)
 Array of: X difference between table cell x start and starting page margin, cellspacing, cellpadding protected.
 $textrendermode = 0
 Text rendering mode: 0 = Fill text; 1 = Stroke text; 2 = Fill, then stroke text; 3 = Neither fill nor stroke text (invisible); 4 = Fill text and add to path for clipping; 5 = Stroke text and add to path for clipping; 6 = Fill, then stroke text and add to path for clipping; 7 = Add text to path for clipping.
 $textstrokewidth = 0
 Text stroke width in doc units protected.
 $strokecolor
 $pdfunit = 'mm'
 $tocpage = false
 $rasterize_vector_images = false
 $font_subsetting = true
 $default_graphic_vars = array()
 $xobjects = array()
 $inxobj = false
 $xobjid = ''
 $font_stretching = 100
 $font_spacing = 0
 $page_regions = array()
 $webcolor = array()
 $svgdir = ''
 $svgunit = 'px'
 $svggradients = array()
 $svggradientid = 0
 $svgdefsmode = false
 $svgdefs = array()
 $svgclipmode = false
 $svgclippaths = array()
 $svgcliptm = array()
 $svgclipid = 0
 $svgtext = ''
 $svgtextmode = array()
 $svginheritprop = array('clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cursor', 'direction', 'fill', 'fill-opacity', 'fill-rule', 'font', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'image-rendering', 'kerning', 'letter-spacing', 'marker', 'marker-end', 'marker-mid', 'marker-start', 'pointer-events', 'shape-rendering', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-rendering', 'visibility', 'word-spacing', 'writing-mode')
 $svgstyles

Detailed Description

Definition at line 161 of file tcpdf.php.

Constructor & Destructor Documentation

TCPDF::__construct (   $orientation = 'P',
  $unit = 'mm',
  $format = 'A4',
  $unicode = true,
  $encoding = 'UTF-8',
  $diskcache = false 
)

This is the class constructor.

It allows to set up the page format, the orientation and the measure unit used in all the methods (except for the font sizes).

Parameters
string$orientationpage orientation. Possible values are (case insensitive):
  • P or Portrait (default)
  • L or Landscape
  • '' (empty string) for automatic orientation
string$unitUser measure unit. Possible values are:
  • pt: point
  • mm: millimeter (default)
  • cm: centimeter
  • in: inch

A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit.
mixed$formatThe format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat().
boolean$unicodeTRUE means that the input text is unicode (default = true)
boolean$diskcacheif TRUE reduce the RAM memory usage by caching temporary data on filesystem (slower).
String$encodingcharset encoding; default is UTF-8 public
See Also
getPageSizeFromFormat(), setPageFormat()

Definition at line 1753 of file tcpdf.php.

References $diskcache, $encoding, $k, $unicode, $webcolor, _dochecks(), getFontsList(), getGraphicVars(), getRandomSeed(), n, SetAutoPageBreak(), setCellMargins(), setCellPaddings(), SetCompression(), SetDisplayMode(), SetFont(), SetMargins(), setPageFormat(), setPageUnit(), setSpacesRE(), and utf8Bidi().

{
/* Set internal character encoding to ASCII */
if (function_exists('mb_internal_encoding') AND mb_internal_encoding()) {
$this->internal_encoding = mb_internal_encoding();
mb_internal_encoding('ASCII');
}
require(dirname(__FILE__).'/htmlcolors.php');
$this->webcolor = $webcolor;
require_once(dirname(__FILE__).'/unicode_data.php');
$this->unicode = new TCPDF_UNICODE_DATA();
$this->font_obj_ids = array();
$this->page_obj_id = array();
$this->form_obj_id = array();
// set disk caching
$this->diskcache = $diskcache ? true : false;
// set language direction
$this->rtl = false;
$this->tmprtl = false;
// some checks
$this->_dochecks();
// initialization of properties
$this->isunicode = $unicode;
$this->page = 0;
$this->transfmrk[0] = array();
$this->pagedim = array();
$this->n = 2;
$this->buffer = '';
$this->pages = array();
$this->state = 0;
$this->fonts = array();
$this->FontFiles = array();
$this->diffs = array();
$this->images = array();
$this->links = array();
$this->gradients = array();
$this->InFooter = false;
$this->lasth = 0;
$this->FontFamily = 'helvetica';
$this->FontStyle = '';
$this->FontSizePt = 12;
$this->underline = false;
$this->overline = false;
$this->linethrough = false;
$this->DrawColor = '0 G';
$this->FillColor = '0 g';
$this->TextColor = '0 g';
$this->ColorFlag = false;
// encryption values
$this->encrypted = false;
$this->last_enc_key = '';
// standard Unicode fonts
$this->CoreFonts = array(
'courier'=>'Courier',
'courierB'=>'Courier-Bold',
'courierI'=>'Courier-Oblique',
'courierBI'=>'Courier-BoldOblique',
'helvetica'=>'Helvetica',
'helveticaB'=>'Helvetica-Bold',
'helveticaI'=>'Helvetica-Oblique',
'helveticaBI'=>'Helvetica-BoldOblique',
'times'=>'Times-Roman',
'timesB'=>'Times-Bold',
'timesI'=>'Times-Italic',
'timesBI'=>'Times-BoldItalic',
'symbol'=>'Symbol',
'zapfdingbats'=>'ZapfDingbats'
);
// set scale factor
$this->setPageUnit($unit);
// set page format and orientation
$this->setPageFormat($format, $orientation);
// page margins (1 cm)
$margin = 28.35 / $this->k;
$this->SetMargins($margin, $margin);
// internal cell padding
$cpadding = $margin / 10;
$this->setCellPaddings($cpadding, 0, $cpadding, 0);
// cell margins
$this->setCellMargins(0, 0, 0, 0);
// line width (0.2 mm)
$this->LineWidth = 0.57 / $this->k;
$this->linestyleWidth = sprintf('%.2F w', ($this->LineWidth * $this->k));
$this->linestyleCap = '0 J';
$this->linestyleJoin = '0 j';
$this->linestyleDash = '[] 0 d';
// automatic page break
$this->SetAutoPageBreak(true, (2 * $margin));
// full width display mode
$this->SetDisplayMode('fullwidth');
// compression
$this->SetCompression(true);
// set default PDF version number
$this->PDFVersion = '1.7';
$this->encoding = $encoding;
$this->HREF = array();
$this->getFontsList();
$this->fgcolor = array('R' => 0, 'G' => 0, 'B' => 0);
$this->strokecolor = array('R' => 0, 'G' => 0, 'B' => 0);
$this->bgcolor = array('R' => 255, 'G' => 255, 'B' => 255);
$this->extgstates = array();
// user's rights
$this->sign = false;
$this->ur['enabled'] = false;
$this->ur['document'] = '/FullSave';
$this->ur['annots'] = '/Create/Delete/Modify/Copy/Import/Export';
$this->ur['form'] = '/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate';
$this->ur['signature'] = '/Modify';
$this->ur['ef'] = '/Create/Delete/Modify/Import';
$this->ur['formex'] = '';
$this->signature_appearance = array('page' => 1, 'rect' => '0 0 0 0');
// set default JPEG quality
$this->jpeg_quality = 75;
// initialize some settings
$this->utf8Bidi(array(''), '');
// set default font
$this->SetFont($this->FontFamily, $this->FontStyle, $this->FontSizePt);
// check if PCRE Unicode support is enabled
if ($this->isunicode AND (@preg_match('/\pL/u', 'a') == 1)) {
// PCRE unicode support is turned ON
// \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator.
// \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants.
// \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between.
//$this->setSpacesRE('/[^\S\P{Z}\P{Lo}\xa0]/u');
$this->setSpacesRE('/[^\S\P{Z}\xa0]/u');
} else {
// PCRE unicode support is turned OFF
$this->setSpacesRE('/[^\S\xa0]/');
}
$this->default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128));
// set file ID for trailer
$this->file_id = md5($this->getRandomSeed('TCPDF'.$orientation.$unit.$format.$encoding));
// get default graphic vars
$this->default_graphic_vars = $this->getGraphicVars();
}

+ Here is the call graph for this function:

TCPDF::__destruct ( )

Default destructor.

public

Since
1.53.0.TC016

Definition at line 1893 of file tcpdf.php.

References _destroy().

{
// restore internal encoding
if (isset($this->internal_encoding) AND !empty($this->internal_encoding)) {
mb_internal_encoding($this->internal_encoding);
}
// unset all class variables
$this->_destroy(true);
}

+ Here is the call graph for this function:

Member Function Documentation

TCPDF::_addfield (   $type,
  $name,
  $x,
  $y,
  $w,
  $h,
  $prop 
)
protected

Adds a javascript form field.

Parameters
string$typefield type
string$namefield name
int$xhorizontal position
int$yvertical position
int$wwidth
int$hheight
array$propjavascript field properties. Possible values are described on official Javascript for Acrobat API reference. protected
Author
Denis Van Nuffelen, Nicola Asuni
Since
2.1.002 (2008-02-12)

Definition at line 14130 of file tcpdf.php.

References $name, $type, $x, and $y.

{
if ($this->rtl) {
$x = $x - $w;
}
// the followind avoid fields duplication after saving the document
$this->javascript .= "if(getField('tcpdfdocsaved').value != 'saved') {";
$this->javascript .= sprintf("f".$name."=this.addField('%s','%s',%u,[%.2F,%.2F,%.2F,%.2F]);", $name, $type, $this->PageNo()-1, $x*$k, ($this->h-$y)*$k+1, ($x+$w)*$k, ($this->h-$y-$h)*$k+1)."\n";
$this->javascript .= 'f'.$name.'.textSize='.$this->FontSizePt.";\n";
while (list($key, $val) = each($prop)) {
if (strcmp(substr($key, -5), 'Color') == 0) {
$val = $this->_JScolor($val);
} else {
$val = "'".$val."'";
}
$this->javascript .= 'f'.$name.'.'.$key.'='.$val.";\n";
}
if ($this->rtl) {
$this->x -= $w;
} else {
$this->x += $w;
}
$this->javascript .= '}';
}
TCPDF::_AES (   $key,
  $text 
)
protected

Returns the input text exrypted using AES algorithm and the specified key.

This method requires mcrypt.

Parameters
string$keyencryption key
String$textinput text to be encrypted
Returns
String encrypted text protected
Author
Nicola Asuni
Since
5.0.005 (2010-05-11)

Definition at line 11683 of file tcpdf.php.

{
// padding (RFC 2898, PKCS #5: Password-Based Cryptography Specification Version 2.0)
$padding = 16 - (strlen($text) % 16);
$text .= str_repeat(chr($padding), $padding);
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
$text = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);
$text = $iv.$text;
return $text;
}
TCPDF::_beginpage (   $orientation = '',
  $format = '' 
)
protected

Initialize a new page.

Parameters
string$orientationpage orientation. Possible values are (case insensitive):
  • P or PORTRAIT (default)
  • L or LANDSCAPE
mixed$formatThe format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). protected
See Also
getPageSizeFromFormat(), setPageFormat()

Definition at line 10627 of file tcpdf.php.

Referenced by startPage().

{
$this->setPageBuffer($this->page, '');
// initialize array for graphics tranformation positions inside a page buffer
$this->transfmrk[$this->page] = array();
$this->state = 2;
if ($this->empty_string($orientation)) {
if (isset($this->CurOrientation)) {
$orientation = $this->CurOrientation;
} elseif ($this->fwPt > $this->fhPt) {
// landscape
$orientation = 'L';
} else {
// portrait
$orientation = 'P';
}
}
if ($this->empty_string($format)) {
$this->pagedim[$this->page] = $this->pagedim[($this->page - 1)];
$this->setPageOrientation($orientation);
} else {
$this->setPageFormat($format, $orientation);
}
if ($this->rtl) {
$this->x = $this->w - $this->rMargin;
} else {
$this->x = $this->lMargin;
}
$this->y = $this->tMargin;
if (isset($this->newpagegroup[$this->page])) {
// start a new group
$n = sizeof($this->pagegroups) + 1;
$alias = '{nb'.$n.'}';
$this->pagegroups[$alias] = 1;
$this->currpagegroup = $alias;
} elseif ($this->currpagegroup) {
++$this->pagegroups[$this->currpagegroup];
}
}

+ Here is the caller graph for this function:

TCPDF::_datastring (   $s,
  $n = 0 
)
protected

Format a data string for meta information.

Parameters
string$sdata string to escape.
int$nobject ID
Returns
string escaped string. protected

Definition at line 10808 of file tcpdf.php.

{
if ($n == 0) {
}
$s = $this->_encrypt_data($n, $s);
return '('. $this->_escape($s).')';
}
TCPDF::_datestring (   $n = 0)
protected

Returns a formatted date for meta information.

Parameters
int$nobject ID
Returns
string escaped date string. protected
Since
4.6.028 (2009-08-25)

Definition at line 10823 of file tcpdf.php.

{
$current_time = substr_replace(date('YmdHisO'), '\'', (0 - 2), 0).'\'';
return $this->_datastring('D:'.$current_time, $n);
}
TCPDF::_destroy (   $destroyall = false,
  $preserve_objcopy = false 
)

Unset all class variables except the following critical variables: internal_encoding, state, bufferlen, buffer and diskcache.

Parameters
boolean$destroyallif true destroys all class variables, otherwise preserves critical variables.
boolean$preserve_objcopyif true preserves the objcopy variable public
Since
4.5.016 (2009-02-24)

Definition at line 8020 of file tcpdf.php.

Referenced by __destruct(), Close(), and Error().

{
if ($destroyall AND isset($this->diskcache) AND $this->diskcache AND (!$preserve_objcopy) AND (!$this->empty_string($this->buffer))) {
// remove buffer file from cache
unlink($this->buffer);
}
foreach (array_keys(get_object_vars($this)) as $val) {
if ($destroyall OR (
($val != 'internal_encoding')
AND ($val != 'state')
AND ($val != 'bufferlen')
AND ($val != 'buffer')
AND ($val != 'diskcache')
AND ($val != 'sign')
AND ($val != 'signature_data')
AND ($val != 'signature_max_length')
AND ($val != 'byterange_string')
)) {
if ((!$preserve_objcopy OR ($val != 'objcopy')) AND isset($this->$val)) {
unset($this->$val);
}
}
}
}

+ Here is the caller graph for this function:

TCPDF::_dochecks ( )
protected

Check for locale-related bug protected.

Definition at line 8048 of file tcpdf.php.

Referenced by __construct().

{
//Check for locale-related bug
if (1.1 == 1) {
$this->Error('Don\'t alter the locale before including class file');
}
//Check for decimal separator
if (sprintf('%.1F', 1.0) != '1.0') {
setlocale(LC_NUMERIC, 'C');
}
}

+ Here is the caller graph for this function:

TCPDF::_dolinethrough (   $x,
  $y,
  $txt 
)
protected

Line through text.

Parameters
int$xX coordinate
int$yY coordinate
string$txttext to linethrough protected

Definition at line 10734 of file tcpdf.php.

References $x, and $y.

{
$w = $this->GetStringWidth($txt);
return $this->_dolinethroughw($x, $y, $w);
}
TCPDF::_dolinethroughw (   $x,
  $y,
  $w 
)
protected

Line through for rectangular text area.

Parameters
int$xX coordinate
int$yY coordinate
string$txttext to linethrough protected
Since
4.9.008 (2009-09-29)

Definition at line 10747 of file tcpdf.php.

References $x, and $y.

{
$linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt;
return sprintf('%.2F %.2F %.2F %.2F re f', $x * $this->k, ((($this->h - $y) * $this->k) + $linew + ($this->FontSizePt / 3)), $w * $this->k, $linew);
}
TCPDF::_dooverline (   $x,
  $y,
  $txt 
)
protected

Overline text.

Parameters
int$xX coordinate
int$yY coordinate
string$txttext to overline protected
Since
4.9.015 (2010-04-19)

Definition at line 10760 of file tcpdf.php.

References $x, and $y.

{
$w = $this->GetStringWidth($txt);
return $this->_dooverlinew($x, $y, $w);
}
TCPDF::_dooverlinew (   $x,
  $y,
  $w 
)
protected

Overline for rectangular text area.

Parameters
int$xX coordinate
int$yY coordinate
int$wwidth to overline protected
Since
4.9.015 (2010-04-19)

Definition at line 10773 of file tcpdf.php.

References $x, and $y.

{
$linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt;
return sprintf('%.2F %.2F %.2F %.2F re f', $x * $this->k, (($this->h - $y + $this->FontAscent) * $this->k) - $linew, $w * $this->k, $linew);
}
TCPDF::_dounderline (   $x,
  $y,
  $txt 
)
protected

Underline text.

Parameters
int$xX coordinate
int$yY coordinate
string$txttext to underline protected

Definition at line 10709 of file tcpdf.php.

References $x, and $y.

{
$w = $this->GetStringWidth($txt);
return $this->_dounderlinew($x, $y, $w);
}
TCPDF::_dounderlinew (   $x,
  $y,
  $w 
)
protected

Underline for rectangular text area.

Parameters
int$xX coordinate
int$yY coordinate
int$wwidth to underline protected
Since
4.8.008 (2009-09-29)

Definition at line 10722 of file tcpdf.php.

References $x, and $y.

{
$linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt;
return sprintf('%.2F %.2F %.2F %.2F re f', $x * $this->k, ((($this->h - $y) * $this->k) + $linew), $w * $this->k, $linew);
}
TCPDF::_encrypt_data (   $n,
  $s 
)
protected

Encrypt the input string.

Parameters
int$nobject number
string$sdata string to encrypt
Returns
encrypted string protected
Author
Nicola Asuni
Since
5.0.005 (2010-05-11)

Definition at line 11486 of file tcpdf.php.

{
if (!$this->encrypted) {
return $s;
}
switch ($this->encryptdata['mode']) {
case 0: // RC4-40
case 1: { // RC4-128
$s = $this->_RC4($this->_objectkey($n), $s);
break;
}
case 2: { // AES-128
$s = $this->_AES($this->_objectkey($n), $s);
break;
}
case 3: { // AES-256
$s = $this->_AES($this->encryptdata['key'], $s);
break;
}
}
return $s;
}
TCPDF::_enddoc ( )
protected

Output end of document (EOF).

protected

Definition at line 10555 of file tcpdf.php.

References $out, and n.

Referenced by Close().

{
$this->state = 1;
$this->_putheader();
$this->_putpages();
$this->_putresources();
// Signature
if ($this->sign AND isset($this->signature_data['cert_type'])) {
// widget annotation for signature
$out = $this->_getobj($this->sig_obj_id)."\n";
$out .= '<< /Type /Annot';
$out .= ' /Subtype /Widget';
$out .= ' /Rect ['.$this->signature_appearance['rect'].']';
$out .= ' /P '.$this->page_obj_id[($this->signature_appearance['page'])].' 0 R'; // link to signature appearance page
$out .= ' /F 4';
$out .= ' /FT /Sig';
$out .= ' /T '.$this->_textstring('Signature', $this->sig_obj_id);
$out .= ' /Ff 0';
$out .= ' /V '.($this->sig_obj_id + 1).' 0 R';
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
// signature
$this->_putsignature();
}
// Info
$objid_info = $this->_putinfo();
// Catalog
$objid_catalog = $this->_putcatalog();
// Cross-ref
// XREF section
$this->_out('xref');
$this->_out('0 '.($this->n + 1));
$this->_out('0000000000 65535 f ');
for ($i=1; $i <= $this->n; ++$i) {
$this->_out(sprintf('%010d 00000 n ', $this->offsets[$i]));
}
// TRAILER
$out = 'trailer <<';
$out .= ' /Size '.($this->n + 1);
$out .= ' /Root '.$objid_catalog.' 0 R';
$out .= ' /Info '.$objid_info.' 0 R';
if ($this->encrypted) {
$out .= ' /Encrypt '.$this->encryptdata['objid'].' 0 R';
}
$out .= ' /ID [ <'.$this->file_id.'> <'.$this->file_id.'> ]';
$out .= ' >>';
$this->_out($out);
$this->_out('startxref');
$this->_out($o);
$this->_out('%%EOF');
$this->state = 3; // end-of-doc
if ($this->diskcache) {
// remove temporary files used for images
foreach ($this->imagekeys as $key) {
// remove temporary files
unlink($this->images[$key]);
}
foreach ($this->fontkeys as $key) {
// remove temporary files
unlink($this->fonts[$key]);
}
}
}

+ Here is the caller graph for this function:

TCPDF::_endpage ( )
protected

Mark end of page.

protected

Definition at line 10671 of file tcpdf.php.

Referenced by endPage().

{
$this->setVisibility('all');
$this->state = 1;
}

+ Here is the caller graph for this function:

TCPDF::_escape (   $s)
protected

Add "\" before "\", "(" and ")".

Parameters
string$sstring to escape.
Returns
string escaped string. protected

Definition at line 10796 of file tcpdf.php.

Referenced by getCellCode().

{
// the chr(13) substitution fixes the Bugs item #1421290.
return strtr($s, array(')' => '\\)', '(' => '\\(', '\\' => '\\\\', chr(13) => '\r'));
}

+ Here is the caller graph for this function:

TCPDF::_escapetext (   $s)
protected

THIS METHOD IS DEPRECATED Format a text string.

Parameters
string$sstring to escape.
Returns
string escaped string. protected
Deprecated:

Definition at line 10851 of file tcpdf.php.

{
if ($this->isunicode) {
if (($this->CurrentFont['type'] == 'core') OR ($this->CurrentFont['type'] == 'TrueType') OR ($this->CurrentFont['type'] == 'Type1')) {
$s = $this->UTF8ToLatin1($s);
} else {
//Convert string to UTF-16BE and reverse RTL language
$s = $this->utf8StrRev($s, false, $this->tmprtl);
}
}
return $this->_escape($s);
}
TCPDF::_fixAES256Password (   $password)
protected

Convert password for AES-256 encryption mode.

Returns
string password protected
Since
5.9.006 (2010-10-19)
Author
Nicola Asuni

Definition at line 11809 of file tcpdf.php.

{
$psw = ''; // password to be returned
$psw_array = $this->utf8Bidi($this->UTF8StringToArray($password), $password, $this->rtl);
foreach ($psw_array as $c) {
$psw .= $this->unichr($c);
}
return substr($psw, 0, 127);
}
TCPDF::_freadint (   $f)
protected

Read a 4-byte (32 bit) integer from file.

Parameters
string$ffile name.
Returns
4-byte integer protected

Definition at line 10785 of file tcpdf.php.

References $f.

Referenced by _parsepng().

{
$a = unpack('Ni', fread($f, 4));
return $a['i'];
}

+ Here is the caller graph for this function:

TCPDF::_generateencryptionkey ( )
protected

Compute encryption key protected.

Since
2.0.000 (2008-01-02)
Author
Nicola Asuni

Definition at line 11824 of file tcpdf.php.

References $f, and K_PATH_CACHE.

{
$keybytelen = ($this->encryptdata['Length'] / 8);
if (!$this->encryptdata['pubkey']) { // standard mode
if ($this->encryptdata['mode'] == 3) { // AES-256
// generate 256 bit random key
$this->encryptdata['key'] = substr(hash('sha256', $this->getRandomSeed(), true), 0, $keybytelen);
// truncate passwords
$this->encryptdata['user_password'] = $this->_fixAES256Password($this->encryptdata['user_password']);
$this->encryptdata['owner_password'] = $this->_fixAES256Password($this->encryptdata['owner_password']);
// Compute U value
$this->encryptdata['U'] = $this->_Uvalue();
// Compute UE value
$this->encryptdata['UE'] = $this->_UEvalue();
// Compute O value
$this->encryptdata['O'] = $this->_Ovalue();
// Compute OE value
$this->encryptdata['OE'] = $this->_OEvalue();
// Compute P value
$this->encryptdata['P'] = $this->encryptdata['protection'];
// Computing the encryption dictionary's Perms (permissions) value
$perms = $this->getEncPermissionsString($this->encryptdata['protection']); // bytes 0-3
$perms .= chr(255).chr(255).chr(255).chr(255); // bytes 4-7
if (isset($this->encryptdata['CF']['EncryptMetadata']) AND (!$this->encryptdata['CF']['EncryptMetadata'])) { // byte 8
$perms .= 'F';
} else {
$perms .= 'T';
}
$perms .= 'adb'; // bytes 9-11
$perms .= 'nick'; // bytes 12-15
$iv = str_repeat("\x00", mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB));
$this->encryptdata['perms'] = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $this->encryptdata['key'], $perms, MCRYPT_MODE_ECB, $iv);
} else { // RC4-40, RC4-128, AES-128
// Pad passwords
$this->encryptdata['user_password'] = substr($this->encryptdata['user_password'].$this->enc_padding, 0, 32);
$this->encryptdata['owner_password'] = substr($this->encryptdata['owner_password'].$this->enc_padding, 0, 32);
// Compute O value
$this->encryptdata['O'] = $this->_Ovalue();
// get default permissions (reverse byte order)
$permissions = $this->getEncPermissionsString($this->encryptdata['protection']);
// Compute encryption key
$tmp = $this->_md5_16($this->encryptdata['user_password'].$this->encryptdata['O'].$permissions.$this->encryptdata['fileid']);
if ($this->encryptdata['mode'] > 0) {
for ($i = 0; $i < 50; ++$i) {
$tmp = $this->_md5_16(substr($tmp, 0, $keybytelen));
}
}
$this->encryptdata['key'] = substr($tmp, 0, $keybytelen);
// Compute U value
$this->encryptdata['U'] = $this->_Uvalue();
// Compute P value
$this->encryptdata['P'] = $this->encryptdata['protection'];
}
} else { // Public-Key mode
// random 20-byte seed
$seed = sha1($this->getRandomSeed(), true);
$recipient_bytes = '';
foreach ($this->encryptdata['pubkeys'] as $pubkey) {
// for each public certificate
if (isset($pubkey['p'])) {
$pkprotection = $this->getUserPermissionCode($pubkey['p'], $this->encryptdata['mode']);
} else {
$pkprotection = $this->encryptdata['protection'];
}
// get default permissions (reverse byte order)
$pkpermissions = $this->getEncPermissionsString($pkprotection);
// envelope data
$envelope = $seed.$pkpermissions;
// write the envelope data to a temporary file
$tempkeyfile = tempnam(K_PATH_CACHE, 'tmpkey_');
$f = fopen($tempkeyfile, 'wb');
if (!$f) {
$this->Error('Unable to create temporary key file: '.$tempkeyfile);
}
$envelope_lenght = strlen($envelope);
fwrite($f, $envelope, $envelope_lenght);
fclose($f);
$tempencfile = tempnam(K_PATH_CACHE, 'tmpenc_');
if (!openssl_pkcs7_encrypt($tempkeyfile, $tempencfile, $pubkey['c'], array(), PKCS7_DETACHED | PKCS7_BINARY)) {
$this->Error('Unable to encrypt the file: '.$tempkeyfile);
}
unlink($tempkeyfile);
// read encryption signature
$signature = file_get_contents($tempencfile, false, null, $envelope_lenght);
unlink($tempencfile);
// extract signature
$signature = substr($signature, strpos($signature, 'Content-Disposition'));
$tmparr = explode("\n\n", $signature);
$signature = trim($tmparr[1]);
unset($tmparr);
// decode signature
$signature = base64_decode($signature);
// convert signature to hex
$hexsignature = current(unpack('H*', $signature));
// store signature on recipients array
$this->encryptdata['Recipients'][] = $hexsignature;
// The bytes of each item in the Recipients array of PKCS#7 objects in the order in which they appear in the array
$recipient_bytes .= $signature;
}
// calculate encryption key
if ($this->encryptdata['mode'] == 3) { // AES-256
$this->encryptdata['key'] = substr(hash('sha256', $seed.$recipient_bytes, true), 0, $keybytelen);
} else { // RC4-40, RC4-128, AES-128
$this->encryptdata['key'] = substr(sha1($seed.$recipient_bytes, true), 0, $keybytelen);
}
}
}
TCPDF::_getannotsrefs (   $n)
protected

Get references to page annotations.

Parameters
int$npage number
Returns
string protected
Author
Nicola Asuni
Since
5.0.010 (2010-05-17)

Definition at line 8296 of file tcpdf.php.

References $data, and $out.

{
if (!(isset($this->PageAnnots[$n]) OR ($this->sign AND isset($this->signature_data['cert_type'])))) {
return '';
}
$out = ' /Annots [';
if (isset($this->PageAnnots[$n])) {
foreach ($this->PageAnnots[$n] as $key => $val) {
if (!in_array($val['n'], $this->radio_groups)) {
$out .= ' '.$val['n'].' 0 R';
}
}
// add radiobutton groups
if (isset($this->radiobutton_groups[$n])) {
foreach ($this->radiobutton_groups[$n] as $key => $data) {
if (isset($data['n'])) {
$out .= ' '.$data['n'].' 0 R';
}
}
}
}
if ($this->sign AND ($n == $this->signature_appearance['page']) AND isset($this->signature_data['cert_type'])) {
// set reference for signature object
$out .= ' '.$this->sig_obj_id.' 0 R';
}
$out .= ' ]';
return $out;
}
TCPDF::_getBYTE ( $str,
$offset 
)
protected

Get BYTE from string (8-bit unsigned integer).

Parameters
string$strstring from where to extract value
int$offsetpoint from where to read the data
Returns
int 8 bit value
Author
Nicola Asuni protected
Since
5.2.000 (2010-06-02)

Definition at line 9030 of file tcpdf.php.

{
$v = unpack('Ci', substr($str, $offset, 1));
++$offset;
return $v['i'];
}
TCPDF::_getfontpath ( )
protected

Return fonts path.

Returns
string protected

Definition at line 8064 of file tcpdf.php.

References K_PATH_FONTS.

Referenced by AddFont(), and getFontsList().

{
if (!defined('K_PATH_FONTS') AND is_dir(dirname(__FILE__).'/fonts')) {
define('K_PATH_FONTS', dirname(__FILE__).'/fonts/');
}
return defined('K_PATH_FONTS') ? K_PATH_FONTS : '';
}

+ Here is the caller graph for this function:

TCPDF::_getobj (   $objid = '')
protected

Return the starting object string for the selected object ID.

Parameters
int$objidObject ID (leave empty to get a new ID).
Returns
string the starting object string protected
Since
5.8.009 (2010-08-20)

Definition at line 10693 of file tcpdf.php.

Referenced by _putEmbeddedFiles().

{
if ($objid === '') {
$objid = $this->n;
}
$this->offsets[$objid] = $this->bufferlen;
return $objid.' 0 obj';
}

+ Here is the caller graph for this function:

TCPDF::_getrawstream (   $s,
  $n = 0 
)
protected

get raw output stream.

Parameters
string$sstring to output.
int$nobject reference for encryption mode protected
Author
Nicola Asuni
Since
5.5.000 (2010-06-22)

Definition at line 10871 of file tcpdf.php.

Referenced by _putEmbeddedFiles().

{
if ($n <= 0) {
// default to current object
}
return $this->_encrypt_data($n, $s);
}

+ Here is the caller graph for this function:

TCPDF::_getSHORT ( $str,
$offset 
)
protected

Get SHORT from string (Big Endian 16-bit signed integer).

Parameters
string$strstring from where to extract value
int$offsetpoint from where to read the data
Returns
int 16 bit value
Author
Nicola Asuni protected
Since
5.2.000 (2010-06-02)

Definition at line 9015 of file tcpdf.php.

{
$v = unpack('si', substr($str, $offset, 2));
$offset += 2;
return $v['i'];
}
TCPDF::_getstream (   $s,
  $n = 0 
)
protected

Format output stream (DEPRECATED).

Parameters
string$sstring to output.
int$nobject reference for encryption mode protected
Deprecated:

Definition at line 10886 of file tcpdf.php.

{
return 'stream'."\n".$this->_getrawstream($s, $n)."\n".'endstream';
}
TCPDF::_getTrueTypeFontSubset (   $font,
  $subsetchars 
)
protected

Returns a subset of the TrueType font data without the unused glyphs.

Parameters
string$fontTrueType font data
array$subsetcharsarray of used characters (the glyphs to keep)
Returns
string a subset of TrueType font data without the unused glyphs
Author
Nicola Asuni protected
Since
5.2.000 (2010-06-02)

Definition at line 9045 of file tcpdf.php.

References $data.

{
ksort($subsetchars);
$offset = 0; // offset position of the font data
if ($this->_getULONG($font, $offset) != 0x10000) {
// sfnt version must be 0x00010000 for TrueType version 1.0.
return $font;
}
// get number of tables
$numTables = $this->_getUSHORT($font, $offset);
// skip searchRange, entrySelector and rangeShift
$offset += 6;
// tables array
$table = array();
// for each table
for ($i = 0; $i < $numTables; ++$i) {
// get table info
$tag = substr($font, $offset, 4);
$offset += 4;
$table[$tag] = array();
$table[$tag]['checkSum'] = $this->_getULONG($font, $offset);
$table[$tag]['offset'] = $this->_getULONG($font, $offset);
$table[$tag]['length'] = $this->_getULONG($font, $offset);
}
// check magicNumber
$offset = $table['head']['offset'] + 12;
if ($this->_getULONG($font, $offset) != 0x5F0F3CF5) {
// magicNumber must be 0x5F0F3CF5
return $font;
}
// get offset mode (indexToLocFormat : 0 = short, 1 = long)
$offset = $table['head']['offset'] + 50;
$short_offset = ($this->_getSHORT($font, $offset) == 0);
// get the offsets to the locations of the glyphs in the font, relative to the beginning of the glyphData table
$indexToLoc = array();
$offset = $table['loca']['offset'];
if ($short_offset) {
// short version
$n = $table['loca']['length'] / 2; // numGlyphs + 1
for ($i = 0; $i < $n; ++$i) {
$indexToLoc[$i] = $this->_getUSHORT($font, $offset) * 2;
}
} else {
// long version
$n = $table['loca']['length'] / 4; // numGlyphs + 1
for ($i = 0; $i < $n; ++$i) {
$indexToLoc[$i] = $this->_getULONG($font, $offset);
}
}
// get glyphs indexes of chars from cmap table
$subsetglyphs = array(); // glyph IDs on key
$subsetglyphs[0] = true; // character codes that do not correspond to any glyph in the font should be mapped to glyph index 0
$offset = $table['cmap']['offset'] + 2;
$numEncodingTables = $this->_getUSHORT($font, $offset);
$encodingTables = array();
for ($i = 0; $i < $numEncodingTables; ++$i) {
$encodingTables[$i]['platformID'] = $this->_getUSHORT($font, $offset);
$encodingTables[$i]['encodingID'] = $this->_getUSHORT($font, $offset);
$encodingTables[$i]['offset'] = $this->_getULONG($font, $offset);
}
foreach ($encodingTables as $enctable) {
if (($enctable['platformID'] == 3) AND ($enctable['encodingID'] == 0)) {
$modesymbol = true;
} else {
$modesymbol = false;
}
$offset = $table['cmap']['offset'] + $enctable['offset'];
$format = $this->_getUSHORT($font, $offset);
switch ($format) {
case 0: { // Format 0: Byte encoding table
$offset += 4; // skip length and version/language
for ($k = 0; $k < 256; ++$k) {
if (isset($subsetchars[$k])) {
$g = $this->_getBYTE($font, $offset);
$subsetglyphs[$g] = $k;
} else {
++$offset;
}
}
break;
}
case 2: { // Format 2: High-byte mapping through table
$offset += 4; // skip length and version
// to be implemented ...
break;
}
case 4: { // Format 4: Segment mapping to delta values
$length = $this->_getUSHORT($font, $offset);
$offset += 2; // skip version/language
$segCount = ($this->_getUSHORT($font, $offset) / 2);
$offset += 6; // skip searchRange, entrySelector, rangeShift
$endCount = array(); // array of end character codes for each segment
for ($k = 0; $k < $segCount; ++$k) {
$endCount[$k] = $this->_getUSHORT($font, $offset);
}
$offset += 2; // skip reservedPad
$startCount = array(); // array of start character codes for each segment
for ($k = 0; $k < $segCount; ++$k) {
$startCount[$k] = $this->_getUSHORT($font, $offset);
}
$idDelta = array(); // delta for all character codes in segment
for ($k = 0; $k < $segCount; ++$k) {
$idDelta[$k] = $this->_getUSHORT($font, $offset);
}
$idRangeOffset = array(); // Offsets into glyphIdArray or 0
for ($k = 0; $k < $segCount; ++$k) {
$idRangeOffset[$k] = $this->_getUSHORT($font, $offset);
}
$gidlen = ($length / 2) - 8 - (4 * $segCount);
$glyphIdArray = array(); // glyph index array
for ($k = 0; $k < $gidlen; ++$k) {
$glyphIdArray[$k] = $this->_getUSHORT($font, $offset);
}
for ($k = 0; $k < $segCount; ++$k) {
for ($c = $startCount[$k]; $c <= $endCount[$k]; ++$c) {
if (isset($subsetchars[$c])) {
if ($idRangeOffset[$k] == 0) {
$g = $c;
} else {
$gid = (($idRangeOffset[$k] / 2) + ($c - $startCount[$k]) - ($segCount - $k));
$g = $glyphIdArray[$gid];
}
$g += ($idDelta[$k] - 65536);
if ($g < 0) {
$g = 0;
}
$subsetglyphs[$g] = $c;
}
}
}
break;
}
case 6: { // Format 6: Trimmed table mapping
$offset += 4; // skip length and version/language
$firstCode = $this->_getUSHORT($font, $offset);
$entryCount = $this->_getUSHORT($font, $offset);
for ($k = 0; $k < $entryCount; ++$k) {
$c = ($k + $firstCode);
if (isset($subsetchars[$c])) {
$g = $this->_getUSHORT($font, $offset);
$subsetglyphs[$g] = $c;
} else {
$offset += 2;
}
}
break;
}
case 8: { // Format 8: Mixed 16-bit and 32-bit coverage
$offset += 10; // skip length and version
// to be implemented ...
break;
}
case 10: { // Format 10: Trimmed array
$offset += 10; // skip length and version/language
$startCharCode = $this->_getULONG($font, $offset);
$numChars = $this->_getULONG($font, $offset);
for ($k = 0; $k < $numChars; ++$k) {
$c = ($k + $startCharCode);
if (isset($subsetchars[$c])) {
$g = $this->_getUSHORT($font, $offset);
$subsetglyphs[$g] = $c;
} else {
$offset += 2;
}
}
break;
}
case 12: { // Format 12: Segmented coverage
$offset += 10; // skip length and version/language
$nGroups = $this->_getULONG($font, $offset);
for ($k = 0; $k < $nGroups; ++$k) {
$startCharCode = $this->_getULONG($font, $offset);
$endCharCode = $this->_getULONG($font, $offset);
$startGlyphCode = $this->_getULONG($font, $offset);
for ($c = $startCharCode; $c <= $endCharCode; ++$c) {
if (isset($subsetchars[$c])) {
$subsetglyphs[$startGlyphCode] = $c;
}
++$startGlyphCode;
}
}
break;
}
}
}
// sort glyphs by key
ksort($subsetglyphs);
// add composite glyps to $subsetglyphs and remove missing glyphs
foreach ($subsetglyphs as $key => $val) {
if (isset($indexToLoc[$key])) {
$offset = $table['glyf']['offset'] + $indexToLoc[$key];
$numberOfContours = $this->_getSHORT($font, $offset);
if ($numberOfContours < 0) { // composite glyph
$offset += 8; // skip xMin, yMin, xMax, yMax
do {
$flags = $this->_getUSHORT($font, $offset);
$glyphIndex = $this->_getUSHORT($font, $offset);
if (!isset($subsetglyphs[$glyphIndex]) AND isset($indexToLoc[$glyphIndex])) {
// add missing glyphs
$subsetglyphs[$glyphIndex] = true;
}
// skip some bytes by case
if ($flags & 1) {
$offset += 4;
} else {
$offset += 2;
}
if ($flags & 8) {
$offset += 2;
} elseif ($flags & 64) {
$offset += 4;
} elseif ($flags & 128) {
$offset += 8;
}
} while ($flags & 32);
}
} else {
unset($subsetglyphs[$key]);
}
}
// build new glyf table with only used glyphs
$glyf = '';
$glyfSize = 0;
// create new empty indexToLoc table
$newIndexToLoc = array_fill(0, count($indexToLoc), 0);
$goffset = 0;
foreach ($subsetglyphs as $glyphID => $char) {
if (isset($indexToLoc[$glyphID]) AND isset($indexToLoc[($glyphID + 1)])) {
$start = $indexToLoc[$glyphID];
$length = ($indexToLoc[($glyphID + 1)] - $start);
$glyf .= substr($font, ($table['glyf']['offset'] + $start), $length);
$newIndexToLoc[$glyphID] = $goffset;
$goffset += $length;
}
}
// build new loca table
$loca = '';
if ($short_offset) {
foreach ($newIndexToLoc as $glyphID => $offset) {
$loca .= pack('n', ($offset / 2));
}
} else {
foreach ($newIndexToLoc as $glyphID => $offset) {
$loca .= pack('N', $offset);
}
}
// array of table names to preserve (loca and glyf tables will be added later)
//$table_names = array ('cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt ', 'fpgm', 'prep');
// the cmap table is not needed and shall not be present, since the mapping from character codes to glyph descriptions is provided separately
$table_names = array ('head', 'hhea', 'hmtx', 'maxp', 'cvt ', 'fpgm', 'prep'); // minimum required table names
// get the tables to preserve
$offset = 12;
foreach ($table as $tag => $val) {
if (in_array($tag, $table_names)) {
$table[$tag]['data'] = substr($font, $table[$tag]['offset'], $table[$tag]['length']);
if ($tag == 'head') {
// set the checkSumAdjustment to 0
$table[$tag]['data'] = substr($table[$tag]['data'], 0, 8)."\x0\x0\x0\x0".substr($table[$tag]['data'], 12);
}
$pad = 4 - ($table[$tag]['length'] % 4);
if ($pad != 4) {
// the length of a table must be a multiple of four bytes
$table[$tag]['length'] += $pad;
$table[$tag]['data'] .= str_repeat("\x0", $pad);
}
$table[$tag]['offset'] = $offset;
$offset += $table[$tag]['length'];
// check sum is not changed (so keep the following line commented)
//$table[$tag]['checkSum'] = $this->_getTTFtableChecksum($table[$tag]['data'], $table[$tag]['length']);
} else {
unset($table[$tag]);
}
}
// add loca
$table['loca']['data'] = $loca;
$table['loca']['length'] = strlen($loca);
$pad = 4 - ($table['loca']['length'] % 4);
if ($pad != 4) {
// the length of a table must be a multiple of four bytes
$table['loca']['length'] += $pad;
$table['loca']['data'] .= str_repeat("\x0", $pad);
}
$table['loca']['offset'] = $offset;
$table['loca']['checkSum'] = $this->_getTTFtableChecksum($table['loca']['data'], $table['loca']['length']);
$offset += $table['loca']['length'];
// add glyf
$table['glyf']['data'] = $glyf;
$table['glyf']['length'] = strlen($glyf);
$pad = 4 - ($table['glyf']['length'] % 4);
if ($pad != 4) {
// the length of a table must be a multiple of four bytes
$table['glyf']['length'] += $pad;
$table['glyf']['data'] .= str_repeat("\x0", $pad);
}
$table['glyf']['offset'] = $offset;
$table['glyf']['checkSum'] = $this->_getTTFtableChecksum($table['glyf']['data'], $table['glyf']['length']);
// rebuild font
$font = '';
$font .= pack('N', 0x10000); // sfnt version
$numTables = count($table);
$font .= pack('n', $numTables); // numTables
$entrySelector = floor(log($numTables, 2));
$searchRange = pow(2, $entrySelector) * 16;
$rangeShift = ($numTables * 16) - $searchRange;
$font .= pack('n', $searchRange); // searchRange
$font .= pack('n', $entrySelector); // entrySelector
$font .= pack('n', $rangeShift); // rangeShift
$offset = ($numTables * 16);
foreach ($table as $tag => $data) {
$font .= $tag; // tag
$font .= pack('N', $data['checkSum']); // checkSum
$font .= pack('N', ($data['offset'] + $offset)); // offset
$font .= pack('N', $data['length']); // length
}
foreach ($table as $data) {
$font .= $data['data'];
}
// set checkSumAdjustment on head table
$checkSumAdjustment = 0xB1B0AFBA - $this->_getTTFtableChecksum($font, strlen($font));
$font = substr($font, 0, $table['head']['offset'] + 8).pack('N', $checkSumAdjustment).substr($font, $table['head']['offset'] + 12);
return $font;
}
TCPDF::_getTTFtableChecksum (   $table,
  $length 
)
protected

Returs the checksum of a TTF table.

Parameters
string$tabletable to check
int$lengthlenght of table in bytes
Returns
int checksum
Author
Nicola Asuni protected
Since
5.2.000 (2010-06-02)

Definition at line 9376 of file tcpdf.php.

{
$sum = 0;
$tlen = ($length / 4);
$offset = 0;
for ($i = 0; $i < $tlen; ++$i) {
$v = unpack('Ni', substr($table, $offset, 4));
$sum += $v['i'];
$offset += 4;
}
$sum = unpack('Ni', pack('N', $sum));
return $sum['i'];
}
TCPDF::_getULONG ( $str,
$offset 
)
protected

Get ULONG from string (Big Endian 32-bit unsigned integer).

Parameters
string$strstring from where to extract value
int$offsetpoint from where to read the data
Returns
int 32 bit value
Author
Nicola Asuni protected
Since
5.2.000 (2010-06-02)

Definition at line 8985 of file tcpdf.php.

{
$v = unpack('Ni', substr($str, $offset, 4));
$offset += 4;
return $v['i'];
}
TCPDF::_getUSHORT ( $str,
$offset 
)
protected

Get USHORT from string (Big Endian 16-bit unsigned integer).

Parameters
string$strstring from where to extract value
int$offsetpoint from where to read the data
Returns
int 16 bit value
Author
Nicola Asuni protected
Since
5.2.000 (2010-06-02)

Definition at line 9000 of file tcpdf.php.

{
$v = unpack('ni', substr($str, $offset, 2));
$offset += 2;
return $v['i'];
}
TCPDF::_getxobjectdict ( )
protected

Return XObjects Dictionary.

Returns
string XObjects dictionary protected
Since
5.8.014 (2010-08-23)

Definition at line 10241 of file tcpdf.php.

References $out.

{
$out = '';
foreach ($this->xobjects as $id => $objid) {
$out .= ' /'.$id.' '.$objid['n'].' 0 R';
}
return $out;
}
TCPDF::_JScolor (   $color)
protected

Convert color to javascript color.

Parameters
string$colorcolor name or #RRGGBB protected
Author
Denis Van Nuffelen, Nicola Asuni
Since
2.1.002 (2008-02-12)

Definition at line 14106 of file tcpdf.php.

{
static $aColors = array('transparent', 'black', 'white', 'red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'dkGray', 'gray', 'ltGray');
if (substr($color,0,1) == '#') {
return sprintf("['RGB',%.3F,%.3F,%.3F]", hexdec(substr($color,1,2))/255, hexdec(substr($color,3,2))/255, hexdec(substr($color,5,2))/255);
}
if (!in_array($color,$aColors)) {
$this->Error('Invalid color: '.$color);
}
return 'color.'.$color;
}
TCPDF::_md5_16 (   $str)
protected

Encrypts a string using MD5 and returns it's value as a binary string.

Parameters
string$strinput string
Returns
String MD5 encrypted binary string protected
Since
2.0.000 (2008-01-02)
Author
Klemen Vodopivec

Definition at line 11701 of file tcpdf.php.

{
return pack('H*', md5($str));
}
TCPDF::_newobj ( )
protected

Begin a new object and return the object number.

Returns
int object number protected

Definition at line 10681 of file tcpdf.php.

{
$this->_out($this->_getobj());
return $this->n;
}
TCPDF::_objectkey (   $n)
protected

Compute encryption key depending on object number where the encrypted data is stored.

This is used for all strings and streams without crypt filter specifier.

Parameters
int$nobject number
Returns
int object key protected
Author
Nicola Asuni
Since
2.0.000 (2008-01-02)

Definition at line 11466 of file tcpdf.php.

{
$objkey = $this->encryptdata['key'].pack('VXxx', $n);
if ($this->encryptdata['mode'] == 2) { // AES-128
// AES padding
$objkey .= "\x73\x41\x6C\x54"; // sAlT
}
$objkey = substr($this->_md5_16($objkey), 0, (($this->encryptdata['Length'] / 8) + 5));
$objkey = substr($objkey, 0, 16);
return $objkey;
}
TCPDF::_OEvalue ( )
protected

Compute OE value (used for encryption)

Returns
string OE value protected
Since
5.9.006 (2010-10-19)
Author
Nicola Asuni

Definition at line 11796 of file tcpdf.php.

{
$hashkey = hash('sha256', $this->encryptdata['owner_password'].$this->encryptdata['OKS'].$this->encryptdata['U'], true);
$iv = str_repeat("\x00", mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $hashkey, $this->encryptdata['key'], MCRYPT_MODE_CBC, $iv);
}
TCPDF::_out (   $s)
protected

Output a string to the document.

Parameters
string$sstring to output. protected

Definition at line 10906 of file tcpdf.php.

Referenced by _putEmbeddedFiles(), Cell(), Close(), Image(), SetDrawColor(), SetDrawSpotColor(), SetFillColor(), SetFillSpotColor(), SetFontSize(), setFooter(), setHeader(), and SetTextSpotColor().

{
if ($this->state == 2) {
if ($this->inxobj) {
// we are inside an XObject template
$this->xobjects[$this->xobjid]['outdata'] .= $s."\n";
} elseif ((!$this->InFooter) AND isset($this->footerlen[$this->page]) AND ($this->footerlen[$this->page] > 0)) {
// puts data before page footer
$pagebuff = $this->getPageBuffer($this->page);
$page = substr($pagebuff, 0, -$this->footerlen[$this->page]);
$footer = substr($pagebuff, -$this->footerlen[$this->page]);
$this->setPageBuffer($this->page, $page.$s."\n".$footer);
// update footer position
$this->footerpos[$this->page] += strlen($s."\n");
} else {
$this->setPageBuffer($this->page, $s."\n", true);
}
} else {
$this->setBuffer($s."\n");
}
}

+ Here is the caller graph for this function:

TCPDF::_outCurve (   $x1,
  $y1,
  $x2,
  $y2,
  $x3,
  $y3 
)
protected

Append a cubic Bézier curve to the current path.

The curve shall extend from the current point to the point (x3, y3), using (x1, y1) and (x2, y2) as the Bézier control points. The new current point shall be (x3, y3).

Parameters
float$x1Abscissa of control point 1.
float$y1Ordinate of control point 1.
float$x2Abscissa of control point 2.
float$y2Ordinate of control point 2.
float$x3Abscissa of end point.
float$y3Ordinate of end point. protected
Since
2.1.000 (2008-01-08)

Definition at line 12611 of file tcpdf.php.

{
$this->_out(sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c', $x1 * $this->k, ($this->h - $y1) * $this->k, $x2 * $this->k, ($this->h - $y2) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k));
}
TCPDF::_outCurveV (   $x2,
  $y2,
  $x3,
  $y3 
)
protected

Append a cubic Bézier curve to the current path.

The curve shall extend from the current point to the point (x3, y3), using the current point and (x2, y2) as the Bézier control points. The new current point shall be (x3, y3).

Parameters
float$x2Abscissa of control point 2.
float$y2Ordinate of control point 2.
float$x3Abscissa of end point.
float$y3Ordinate of end point. protected
Since
4.9.019 (2010-04-26)

Definition at line 12625 of file tcpdf.php.

{
$this->_out(sprintf('%.2F %.2F %.2F %.2F v', $x2 * $this->k, ($this->h - $y2) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k));
}
TCPDF::_outCurveY (   $x1,
  $y1,
  $x3,
  $y3 
)
protected

Append a cubic Bézier curve to the current path.

The curve shall extend from the current point to the point (x3, y3), using (x1, y1) and (x3, y3) as the Bézier control points. The new current point shall be (x3, y3).

Parameters
float$x1Abscissa of control point 1.
float$y1Ordinate of control point 1.
float$x2Abscissa of control point 2.
float$y2Ordinate of control point 2.
float$x3Abscissa of end point.
float$y3Ordinate of end point. protected
Since
2.1.000 (2008-01-08)

Definition at line 12641 of file tcpdf.php.

{
$this->_out(sprintf('%.2F %.2F %.2F %.2F y', $x1 * $this->k, ($this->h - $y1) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k));
}
TCPDF::_outellipticalarc (   $xc,
  $yc,
  $rx,
  $ry,
  $xang = 0,
  $angs = 0,
  $angf = 360,
  $pie = false,
  $nc = 2 
)
protected

Append an elliptical arc to the current path.

An ellipse is formed from n Bezier curves.

Parameters
float$xcAbscissa of center point.
float$ycOrdinate of center point.
float$rxHorizontal radius.
float$ryVertical radius (if ry = 0 then is a circle, see Circle). Default value: 0.
float$xang,:Angle between the X-axis and the major axis of the ellipse. Default value: 0.
float$angs,:Angle start of draw line. Default value: 0.
float$angf,:Angle finish of draw line. Default value: 360.
boolean$pieif true do not mark the border point (used to draw pie sectors).
integer$ncNumber of curves used to draw a 90 degrees portion of ellipse.
Author
Nicola Asuni protected
Since
4.9.019 (2010-04-26)

Definition at line 12837 of file tcpdf.php.

{
if ($nc < 2) {
$nc = 2;
}
if ($pie) {
// center of the arc
$this->_outPoint($xc, $yc);
}
$xang = deg2rad((float) $xang);
$angs = deg2rad((float) $angs);
$angf = deg2rad((float) $angf);
$as = atan2((sin($angs) / $ry), (cos($angs) / $rx));
$af = atan2((sin($angf) / $ry), (cos($angf) / $rx));
if ($as < 0) {
$as += (2 * M_PI);
}
if ($af < 0) {
$af += (2 * M_PI);
}
if ($as > $af) {
// reverse rotation go clockwise
$as -= (2 * M_PI);
}
$total_angle = ($af - $as);
if ($nc < 2) {
$nc = 2;
}
// total arcs to draw
$nc *= (2 * abs($total_angle) / M_PI);
$nc = round($nc) + 1;
// angle of each arc
$arcang = $total_angle / $nc;
// center point in PDF coordiantes
$x0 = $xc;
$y0 = ($this->h - $yc);
// starting angle
$ang = $as;
$alpha = sin($arcang) * ((sqrt(4 + (3 * pow(tan(($arcang) / 2), 2))) - 1) / 3);
$cos_xang = cos($xang);
$sin_xang = sin($xang);
$cos_ang = cos($ang);
$sin_ang = sin($ang);
// first arc point
$px1 = $x0 + ($rx * $cos_xang * $cos_ang) - ($ry * $sin_xang * $sin_ang);
$py1 = $y0 + ($rx * $sin_xang * $cos_ang) + ($ry * $cos_xang * $sin_ang);
// first Bezier control point
$qx1 = ($alpha * ((-$rx * $cos_xang * $sin_ang) - ($ry * $sin_xang * $cos_ang)));
$qy1 = ($alpha * ((-$rx * $sin_xang * $sin_ang) + ($ry * $cos_xang * $cos_ang)));
if ($pie) {
$this->_outLine($px1, $this->h - $py1);
} else {
$this->_outPoint($px1, $this->h - $py1);
}
// draw arcs
for ($i = 1; $i <= $nc; ++$i) {
// starting angle
$ang = $as + ($i * $arcang);
$cos_xang = cos($xang);
$sin_xang = sin($xang);
$cos_ang = cos($ang);
$sin_ang = sin($ang);
// second arc point
$px2 = $x0 + ($rx * $cos_xang * $cos_ang) - ($ry * $sin_xang * $sin_ang);
$py2 = $y0 + ($rx * $sin_xang * $cos_ang) + ($ry * $cos_xang * $sin_ang);
// second Bezier control point
$qx2 = ($alpha * ((-$rx * $cos_xang * $sin_ang) - ($ry * $sin_xang * $cos_ang)));
$qy2 = ($alpha * ((-$rx * $sin_xang * $sin_ang) + ($ry * $cos_xang * $cos_ang)));
// draw arc
$this->_outCurve(($px1 + $qx1), ($this->h - ($py1 + $qy1)), ($px2 - $qx2), ($this->h - ($py2 - $qy2)), $px2, ($this->h - $py2));
// move to next point
$px1 = $px2;
$py1 = $py2;
$qx1 = $qx2;
$qy1 = $qy2;
}
if ($pie) {
$this->_outLine($xc, $yc);
}
}
TCPDF::_outLine (   $x,
  $y 
)
protected

Append a straight line segment from the current point to the point (x, y).

The new current point shall be (x, y).

Parameters
float$xAbscissa of end point.
float$yOrdinate of end point. protected
Since
2.1.000 (2008-01-08)

Definition at line 12581 of file tcpdf.php.

References $x, and $y.

{
$this->_out(sprintf('%.2F %.2F l', $x * $this->k, ($this->h - $y) * $this->k));
}
TCPDF::_outPoint (   $x,
  $y 
)
protected

Begin a new subpath by moving the current point to coordinates (x, y), omitting any connecting line segment.

Parameters
float$xAbscissa of point.
float$yOrdinate of point. protected
Since
2.1.000 (2008-01-08)

Definition at line 12569 of file tcpdf.php.

References $x, and $y.

{
$this->_out(sprintf('%.2F %.2F m', $x * $this->k, ($this->h - $y) * $this->k));
}
TCPDF::_outRect (   $x,
  $y,
  $w,
  $h,
  $op 
)
protected

Append a rectangle to the current path as a complete subpath, with lower-left corner (x, y) and dimensions widthand height in user space.

Parameters
float$xAbscissa of upper-left corner (or upper-right corner for RTL language).
float$yOrdinate of upper-left corner (or upper-right corner for RTL language).
float$wWidth.
float$hHeight.
string$opoptions protected
Since
2.1.000 (2008-01-08)

Definition at line 12595 of file tcpdf.php.

References $x, and $y.

{
$this->_out(sprintf('%.2F %.2F %.2F %.2F re %s', $x * $this->k, ($this->h - $y) * $this->k, $w * $this->k, -$h * $this->k, $op));
}
TCPDF::_Ovalue ( )
protected

Compute O value (used for encryption)

Returns
string O value protected
Since
2.0.000 (2008-01-02)
Author
Nicola Asuni

Definition at line 11758 of file tcpdf.php.

References $enc.

{
if ($this->encryptdata['mode'] < 3) { // RC4-40, RC4-128, AES-128
$tmp = $this->_md5_16($this->encryptdata['owner_password']);
if ($this->encryptdata['mode'] > 0) {
for ($i = 0; $i < 50; ++$i) {
$tmp = $this->_md5_16($tmp);
}
}
$owner_key = substr($tmp, 0, ($this->encryptdata['Length'] / 8));
$enc = $this->_RC4($owner_key, $this->encryptdata['user_password']);
if ($this->encryptdata['mode'] > 0) {
$len = strlen($owner_key);
for ($i = 1; $i <= 19; ++$i) {
$ek = '';
for ($j = 0; $j < $len; ++$j) {
$ek .= chr(ord($owner_key{$j}) ^ $i);
}
$enc = $this->_RC4($ek, $enc);
}
}
return $enc;
} elseif ($this->encryptdata['mode'] == 3) { // AES-256
$seed = $this->_md5_16($this->getRandomSeed());
// Owner Validation Salt
$this->encryptdata['OVS'] = substr($seed, 0, 8);
// Owner Key Salt
$this->encryptdata['OKS'] = substr($seed, 8, 16);
return hash('sha256', $this->encryptdata['owner_password'].$this->encryptdata['OVS'].$this->encryptdata['U'], true).$this->encryptdata['OVS'].$this->encryptdata['OKS'];
}
}
TCPDF::_parsejpeg (   $file)
protected

Extract info from a JPEG file without using the GD library.

Parameters
string$fileimage file to parse
Returns
array structure containing the image data protected

Definition at line 7435 of file tcpdf.php.

References $data, $file, and Error().

Referenced by _toJPEG(), and Image().

{
$a = getimagesize($file);
if (empty($a)) {
$this->Error('Missing or incorrect image file: '.$file);
}
if ($a[2] != 2) {
$this->Error('Not a JPEG file: '.$file);
}
if ((!isset($a['channels'])) OR ($a['channels'] == 3)) {
$colspace = 'DeviceRGB';
} elseif ($a['channels'] == 4) {
$colspace = 'DeviceCMYK';
} else {
$colspace = 'DeviceGray';
}
$bpc = isset($a['bits']) ? $a['bits'] : 8;
$data = file_get_contents($file);
return array('w' => $a[0], 'h' => $a[1], 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'DCTDecode', 'data' => $data);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::_parsepng (   $file)
protected

Extract info from a PNG file without using the GD library.

Parameters
string$fileimage file to parse
Returns
array structure containing the image data protected

Definition at line 7461 of file tcpdf.php.

References $data, $f, $file, $h, $n, $pos, $t, $type, $w, _freadint(), Error(), and rfread().

Referenced by _toPNG().

{
$f = fopen($file, 'rb');
if ($f === false) {
$this->Error('Can\'t open image file: '.$file);
}
//Check signature
if (fread($f, 8) != chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) {
$this->Error('Not a PNG file: '.$file);
}
//Read header chunk
fread($f, 4);
if (fread($f, 4) != 'IHDR') {
$this->Error('Incorrect PNG file: '.$file);
}
$w = $this->_freadint($f);
$h = $this->_freadint($f);
$bpc = ord(fread($f, 1));
if ($bpc > 8) {
//$this->Error('16-bit depth not supported: '.$file);
fclose($f);
return false;
}
$ct = ord(fread($f, 1));
if ($ct == 0) {
$colspace = 'DeviceGray';
} elseif ($ct == 2) {
$colspace = 'DeviceRGB';
} elseif ($ct == 3) {
$colspace = 'Indexed';
} else {
// alpha channel
fclose($f);
return 'pngalpha';
}
if (ord(fread($f, 1)) != 0) {
//$this->Error('Unknown compression method: '.$file);
fclose($f);
return false;
}
if (ord(fread($f, 1)) != 0) {
//$this->Error('Unknown filter method: '.$file);
fclose($f);
return false;
}
if (ord(fread($f, 1)) != 0) {
//$this->Error('Interlacing not supported: '.$file);
fclose($f);
return false;
}
fread($f, 4);
$parms = '/DecodeParms << /Predictor 15 /Colors '.($ct == 2 ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w.' >>';
//Scan chunks looking for palette, transparency and image data
$pal = '';
$trns = '';
$data = '';
do {
$n = $this->_freadint($f);
$type = fread($f, 4);
if ($type == 'PLTE') {
//Read palette
$pal = $this->rfread($f, $n);
fread($f, 4);
} elseif ($type == 'tRNS') {
//Read transparency info
$t = $this->rfread($f, $n);
if ($ct == 0) {
$trns = array(ord(substr($t, 1, 1)));
} elseif ($ct == 2) {
$trns = array(ord(substr($t, 1, 1)), ord(substr($t, 3, 1)), ord(substr($t, 5, 1)));
} else {
$pos = strpos($t, chr(0));
if ($pos !== false) {
$trns = array($pos);
}
}
fread($f, 4);
} elseif ($type == 'IDAT') {
//Read image data block
$data .= $this->rfread($f, $n);
fread($f, 4);
} elseif ($type == 'IEND') {
break;
} else {
$this->rfread($f, $n + 4);
}
} while ($n);
if (($colspace == 'Indexed') AND (empty($pal))) {
//$this->Error('Missing palette in '.$file);
fclose($f);
return false;
}
fclose($f);
return array('w' => $w, 'h' => $h, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'FlateDecode', 'parms' => $parms, 'pal' => $pal, 'trns' => $trns, 'data' => $data);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::_putannotsobjs ( )
protected

Output annotations objects for all pages.

!!! THIS METHOD IS NOT YET COMPLETED !!! See section 12.5 of PDF 32000_2008 reference. protected

Author
Nicola Asuni
Since
4.0.018 (2008-08-06)

Definition at line 8332 of file tcpdf.php.

References $d, $data, $f, $filename, $l, and $t.

{
// reset object counter
for ($n=1; $n <= $this->numpages; ++$n) {
if (isset($this->PageAnnots[$n])) {
// set page annotations
foreach ($this->PageAnnots[$n] as $key => $pl) {
$annot_obj_id = $this->PageAnnots[$n][$key]['n'];
// create annotation object for grouping radiobuttons
if (isset($this->radiobutton_groups[$n][$pl['txt']]) AND is_array($this->radiobutton_groups[$n][$pl['txt']])) {
$radio_button_obj_id = $this->radiobutton_groups[$n][$pl['txt']]['n'];
$annots = '<<';
$annots .= ' /Type /Annot';
$annots .= ' /Subtype /Widget';
$annots .= ' /Rect [0 0 0 0]';
$annots .= ' /T '.$this->_datastring($pl['txt'], $radio_button_obj_id);
$annots .= ' /FT /Btn';
$annots .= ' /Ff 49152';
$annots .= ' /Kids [';
foreach ($this->radiobutton_groups[$n][$pl['txt']] as $key => $data) {
if ($key !== 'n') {
$annots .= ' '.$data['kid'].' 0 R';
if ($data['def'] !== 'Off') {
$defval = $data['def'];
}
}
}
$annots .= ' ]';
if (isset($defval)) {
$annots .= ' /V /'.$defval;
}
$annots .= ' >>';
$this->_out($this->_getobj($radio_button_obj_id)."\n".$annots."\n".'endobj');
$this->form_obj_id[] = $radio_button_obj_id;
// store object id to be used on Parent entry of Kids
$this->radiobutton_groups[$n][$pl['txt']] = $radio_button_obj_id;
}
$formfield = false;
$pl['opt'] = array_change_key_case($pl['opt'], CASE_LOWER);
$a = $pl['x'] * $this->k;
$b = $this->pagedim[$n]['h'] - (($pl['y'] + $pl['h']) * $this->k);
$c = $pl['w'] * $this->k;
$d = $pl['h'] * $this->k;
$rect = sprintf('%.2F %.2F %.2F %.2F', $a, $b, $a+$c, $b+$d);
// create new annotation object
$annots = '<</Type /Annot';
$annots .= ' /Subtype /'.$pl['opt']['subtype'];
$annots .= ' /Rect ['.$rect.']';
$ft = array('Btn', 'Tx', 'Ch', 'Sig');
if (isset($pl['opt']['ft']) AND in_array($pl['opt']['ft'], $ft)) {
$annots .= ' /FT /'.$pl['opt']['ft'];
$formfield = true;
}
$annots .= ' /Contents '.$this->_textstring($pl['txt'], $annot_obj_id);
$annots .= ' /P '.$this->page_obj_id[$n].' 0 R';
$annots .= ' /NM '.$this->_datastring(sprintf('%04u-%04u', $n, $key), $annot_obj_id);
$annots .= ' /M '.$this->_datestring($annot_obj_id);
if (isset($pl['opt']['f'])) {
$val = 0;
if (is_array($pl['opt']['f'])) {
foreach ($pl['opt']['f'] as $f) {
switch (strtolower($f)) {
case 'invisible': {
$val += 1 << 0;
break;
}
case 'hidden': {
$val += 1 << 1;
break;
}
case 'print': {
$val += 1 << 2;
break;
}
case 'nozoom': {
$val += 1 << 3;
break;
}
case 'norotate': {
$val += 1 << 4;
break;
}
case 'noview': {
$val += 1 << 5;
break;
}
case 'readonly': {
$val += 1 << 6;
break;
}
case 'locked': {
$val += 1 << 8;
break;
}
case 'togglenoview': {
$val += 1 << 9;
break;
}
case 'lockedcontents': {
$val += 1 << 10;
break;
}
default: {
break;
}
}
}
} else {
$val = intval($pl['opt']['f']);
}
$annots .= ' /F '.intval($val);
}
if (isset($pl['opt']['as']) AND is_string($pl['opt']['as'])) {
$annots .= ' /AS /'.$pl['opt']['as'];
}
if (isset($pl['opt']['ap'])) {
// appearance stream
$annots .= ' /AP <<';
if (is_array($pl['opt']['ap'])) {
foreach ($pl['opt']['ap'] as $apmode => $apdef) {
// $apmode can be: n = normal; r = rollover; d = down;
$annots .= ' /'.strtoupper($apmode);
if (is_array($apdef)) {
$annots .= ' <<';
foreach ($apdef as $apstate => $stream) {
// reference to XObject that define the appearance for this mode-state
$apsobjid = $this->_putAPXObject($c, $d, $stream);
$annots .= ' /'.$apstate.' '.$apsobjid.' 0 R';
}
$annots .= ' >>';
} else {
// reference to XObject that define the appearance for this mode
$apsobjid = $this->_putAPXObject($c, $d, $apdef);
$annots .= ' '.$apsobjid.' 0 R';
}
}
} else {
$annots .= $pl['opt']['ap'];
}
$annots .= ' >>';
}
if (isset($pl['opt']['bs']) AND (is_array($pl['opt']['bs']))) {
$annots .= ' /BS <<';
$annots .= ' /Type /Border';
if (isset($pl['opt']['bs']['w'])) {
$annots .= ' /W '.intval($pl['opt']['bs']['w']);
}
$bstyles = array('S', 'D', 'B', 'I', 'U');
if (isset($pl['opt']['bs']['s']) AND in_array($pl['opt']['bs']['s'], $bstyles)) {
$annots .= ' /S /'.$pl['opt']['bs']['s'];
}
if (isset($pl['opt']['bs']['d']) AND (is_array($pl['opt']['bs']['d']))) {
$annots .= ' /D [';
foreach ($pl['opt']['bs']['d'] as $cord) {
$annots .= ' '.intval($cord);
}
$annots .= ']';
}
$annots .= ' >>';
} else {
$annots .= ' /Border [';
if (isset($pl['opt']['border']) AND (count($pl['opt']['border']) >= 3)) {
$annots .= intval($pl['opt']['border'][0]).' ';
$annots .= intval($pl['opt']['border'][1]).' ';
$annots .= intval($pl['opt']['border'][2]);
if (isset($pl['opt']['border'][3]) AND is_array($pl['opt']['border'][3])) {
$annots .= ' [';
foreach ($pl['opt']['border'][3] as $dash) {
$annots .= intval($dash).' ';
}
$annots .= ']';
}
} else {
$annots .= '0 0 0';
}
$annots .= ']';
}
if (isset($pl['opt']['be']) AND (is_array($pl['opt']['be']))) {
$annots .= ' /BE <<';
$bstyles = array('S', 'C');
if (isset($pl['opt']['be']['s']) AND in_array($pl['opt']['be']['s'], $markups)) {
$annots .= ' /S /'.$pl['opt']['bs']['s'];
} else {
$annots .= ' /S /S';
}
if (isset($pl['opt']['be']['i']) AND ($pl['opt']['be']['i'] >= 0) AND ($pl['opt']['be']['i'] <= 2)) {
$annots .= ' /I '.sprintf(' %.4F', $pl['opt']['be']['i']);
}
$annots .= '>>';
}
if (isset($pl['opt']['c']) AND (is_array($pl['opt']['c'])) AND !empty($pl['opt']['c'])) {
$annots .= ' /C [';
foreach ($pl['opt']['c'] as $col) {
$col = intval($col);
$color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255);
$annots .= sprintf(' %.4F', $color);
}
$annots .= ']';
}
//$annots .= ' /StructParent ';
//$annots .= ' /OC ';
$markups = array('text', 'freetext', 'line', 'square', 'circle', 'polygon', 'polyline', 'highlight', 'underline', 'squiggly', 'strikeout', 'stamp', 'caret', 'ink', 'fileattachment', 'sound');
if (in_array(strtolower($pl['opt']['subtype']), $markups)) {
// this is a markup type
if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) {
$annots .= ' /T '.$this->_textstring($pl['opt']['t'], $annot_obj_id);
}
//$annots .= ' /Popup ';
if (isset($pl['opt']['ca'])) {
$annots .= ' /CA '.sprintf('%.4F', floatval($pl['opt']['ca']));
}
if (isset($pl['opt']['rc'])) {
$annots .= ' /RC '.$this->_textstring($pl['opt']['rc'], $annot_obj_id);
}
$annots .= ' /CreationDate '.$this->_datestring($annot_obj_id);
//$annots .= ' /IRT ';
if (isset($pl['opt']['subj'])) {
$annots .= ' /Subj '.$this->_textstring($pl['opt']['subj'], $annot_obj_id);
}
//$annots .= ' /RT ';
//$annots .= ' /IT ';
//$annots .= ' /ExData ';
}
$lineendings = array('Square', 'Circle', 'Diamond', 'OpenArrow', 'ClosedArrow', 'None', 'Butt', 'ROpenArrow', 'RClosedArrow', 'Slash');
// Annotation types
switch (strtolower($pl['opt']['subtype'])) {
case 'text': {
if (isset($pl['opt']['open'])) {
$annots .= ' /Open '. (strtolower($pl['opt']['open']) == 'true' ? 'true' : 'false');
}
$iconsapp = array('Comment', 'Help', 'Insert', 'Key', 'NewParagraph', 'Note', 'Paragraph');
if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) {
$annots .= ' /Name /'.$pl['opt']['name'];
} else {
$annots .= ' /Name /Note';
}
$statemodels = array('Marked', 'Review');
if (isset($pl['opt']['statemodel']) AND in_array($pl['opt']['statemodel'], $statemodels)) {
$annots .= ' /StateModel /'.$pl['opt']['statemodel'];
} else {
$pl['opt']['statemodel'] = 'Marked';
$annots .= ' /StateModel /'.$pl['opt']['statemodel'];
}
if ($pl['opt']['statemodel'] == 'Marked') {
$states = array('Accepted', 'Unmarked');
} else {
$states = array('Accepted', 'Rejected', 'Cancelled', 'Completed', 'None');
}
if (isset($pl['opt']['state']) AND in_array($pl['opt']['state'], $states)) {
$annots .= ' /State /'.$pl['opt']['state'];
} else {
if ($pl['opt']['statemodel'] == 'Marked') {
$annots .= ' /State /Unmarked';
} else {
$annots .= ' /State /None';
}
}
break;
}
case 'link': {
if(is_string($pl['txt'])) {
// external URI link
$annots .= ' /A <</S /URI /URI '.$this->_datastring($this->unhtmlentities($pl['txt']), $annot_obj_id).'>>';
} else {
// internal link
$l = $this->links[$pl['txt']];
$annots .= sprintf(' /Dest [%u 0 R /XYZ 0 %.2F null]', $this->page_obj_id[($l[0])], ($this->pagedim[$l[0]]['h'] - ($l[1] * $this->k)));
}
$hmodes = array('N', 'I', 'O', 'P');
if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmodes)) {
$annots .= ' /H /'.$pl['opt']['h'];
} else {
$annots .= ' /H /I';
}
//$annots .= ' /PA ';
//$annots .= ' /Quadpoints ';
break;
}
case 'freetext': {
if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) {
$annots .= ' /DA ('.$pl['opt']['da'].')';
}
if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) {
$annots .= ' /Q '.intval($pl['opt']['q']);
}
if (isset($pl['opt']['rc'])) {
$annots .= ' /RC '.$this->_textstring($pl['opt']['rc'], $annot_obj_id);
}
if (isset($pl['opt']['ds'])) {
$annots .= ' /DS '.$this->_textstring($pl['opt']['ds'], $annot_obj_id);
}
if (isset($pl['opt']['cl']) AND is_array($pl['opt']['cl'])) {
$annots .= ' /CL [';
foreach ($pl['opt']['cl'] as $cl) {
$annots .= sprintf('%.4F ', $cl * $this->k);
}
$annots .= ']';
}
$tfit = array('FreeText', 'FreeTextCallout', 'FreeTextTypeWriter');
if (isset($pl['opt']['it']) AND in_array($pl['opt']['it'], $tfit)) {
$annots .= ' /IT /'.$pl['opt']['it'];
}
if (isset($pl['opt']['rd']) AND is_array($pl['opt']['rd'])) {
$l = $pl['opt']['rd'][0] * $this->k;
$r = $pl['opt']['rd'][1] * $this->k;
$t = $pl['opt']['rd'][2] * $this->k;
$b = $pl['opt']['rd'][3] * $this->k;
$annots .= ' /RD ['.sprintf('%.2F %.2F %.2F %.2F', $l, $r, $t, $b).']';
}
if (isset($pl['opt']['le']) AND in_array($pl['opt']['le'], $lineendings)) {
$annots .= ' /LE /'.$pl['opt']['le'];
}
break;
}
case 'line': {
break;
}
case 'square': {
break;
}
case 'circle': {
break;
}
case 'polygon': {
break;
}
case 'polyline': {
break;
}
case 'highlight': {
break;
}
case 'underline': {
break;
}
case 'squiggly': {
break;
}
case 'strikeout': {
break;
}
case 'stamp': {
break;
}
case 'caret': {
break;
}
case 'ink': {
break;
}
case 'popup': {
break;
}
case 'fileattachment': {
if (!isset($pl['opt']['fs'])) {
break;
}
$filename = basename($pl['opt']['fs']);
if (isset($this->embeddedfiles[$filename]['n'])) {
$annots .= ' /FS <</Type /Filespec /F '.$this->_datastring($filename, $annot_obj_id).' /EF <</F '.$this->embeddedfiles[$filename]['n'].' 0 R>> >>';
$iconsapp = array('Graph', 'Paperclip', 'PushPin', 'Tag');
if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) {
$annots .= ' /Name /'.$pl['opt']['name'];
} else {
$annots .= ' /Name /PushPin';
}
}
break;
}
case 'sound': {
if (!isset($pl['opt']['fs'])) {
break;
}
$filename = basename($pl['opt']['fs']);
if (isset($this->embeddedfiles[$filename]['n'])) {
// ... TO BE COMPLETED ...
// /R /C /B /E /CO /CP
$annots .= ' /Sound <</Type /Filespec /F '.$this->_datastring($filename, $annot_obj_id).' /EF <</F '.$this->embeddedfiles[$filename]['n'].' 0 R>> >>';
$iconsapp = array('Speaker', 'Mic');
if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) {
$annots .= ' /Name /'.$pl['opt']['name'];
} else {
$annots .= ' /Name /Speaker';
}
}
break;
}
case 'movie': {
break;
}
case 'widget': {
$hmode = array('N', 'I', 'O', 'P', 'T');
if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmode)) {
$annots .= ' /H /'.$pl['opt']['h'];
}
if (isset($pl['opt']['mk']) AND (is_array($pl['opt']['mk'])) AND !empty($pl['opt']['mk'])) {
$annots .= ' /MK <<';
if (isset($pl['opt']['mk']['r'])) {
$annots .= ' /R '.$pl['opt']['mk']['r'];
}
if (isset($pl['opt']['mk']['bc']) AND (is_array($pl['opt']['mk']['bc']))) {
$annots .= ' /BC [';
foreach($pl['opt']['mk']['bc'] AS $col) {
$col = intval($col);
$color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255);
$annots .= sprintf(' %.2F', $color);
}
$annots .= ']';
}
if (isset($pl['opt']['mk']['bg']) AND (is_array($pl['opt']['mk']['bg']))) {
$annots .= ' /BG [';
foreach($pl['opt']['mk']['bg'] AS $col) {
$col = intval($col);
$color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255);
$annots .= sprintf(' %.2F', $color);
}
$annots .= ']';
}
if (isset($pl['opt']['mk']['ca'])) {
$annots .= ' /CA '.$pl['opt']['mk']['ca'];
}
if (isset($pl['opt']['mk']['rc'])) {
$annots .= ' /RC '.$pl['opt']['mk']['rc'];
}
if (isset($pl['opt']['mk']['ac'])) {
$annots .= ' /AC '.$pl['opt']['mk']['ac'];
}
if (isset($pl['opt']['mk']['i'])) {
$info = $this->getImageBuffer($pl['opt']['mk']['i']);
if ($info !== false) {
$annots .= ' /I '.$info['n'].' 0 R';
}
}
if (isset($pl['opt']['mk']['ri'])) {
$info = $this->getImageBuffer($pl['opt']['mk']['ri']);
if ($info !== false) {
$annots .= ' /RI '.$info['n'].' 0 R';
}
}
if (isset($pl['opt']['mk']['ix'])) {
$info = $this->getImageBuffer($pl['opt']['mk']['ix']);
if ($info !== false) {
$annots .= ' /IX '.$info['n'].' 0 R';
}
}
if (isset($pl['opt']['mk']['if']) AND (is_array($pl['opt']['mk']['if'])) AND !empty($pl['opt']['mk']['if'])) {
$annots .= ' /IF <<';
$if_sw = array('A', 'B', 'S', 'N');
if (isset($pl['opt']['mk']['if']['sw']) AND in_array($pl['opt']['mk']['if']['sw'], $if_sw)) {
$annots .= ' /SW /'.$pl['opt']['mk']['if']['sw'];
}
$if_s = array('A', 'P');
if (isset($pl['opt']['mk']['if']['s']) AND in_array($pl['opt']['mk']['if']['s'], $if_s)) {
$annots .= ' /S /'.$pl['opt']['mk']['if']['s'];
}
if (isset($pl['opt']['mk']['if']['a']) AND (is_array($pl['opt']['mk']['if']['a'])) AND !empty($pl['opt']['mk']['if']['a'])) {
$annots .= sprintf(' /A [%.2F %.2F]', $pl['opt']['mk']['if']['a'][0], $pl['opt']['mk']['if']['a'][1]);
}
if (isset($pl['opt']['mk']['if']['fb']) AND ($pl['opt']['mk']['if']['fb'])) {
$annots .= ' /FB true';
}
$annots .= '>>';
}
if (isset($pl['opt']['mk']['tp']) AND ($pl['opt']['mk']['tp'] >= 0) AND ($pl['opt']['mk']['tp'] <= 6)) {
$annots .= ' /TP '.intval($pl['opt']['mk']['tp']);
} else {
$annots .= ' /TP 0';
}
$annots .= '>>';
} // end MK
// --- Entries for field dictionaries ---
if (isset($this->radiobutton_groups[$n][$pl['txt']])) {
// set parent
$annots .= ' /Parent '.$this->radiobutton_groups[$n][$pl['txt']].' 0 R';
}
if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) {
$annots .= ' /T '.$this->_datastring($pl['opt']['t'], $annot_obj_id);
}
if (isset($pl['opt']['tu']) AND is_string($pl['opt']['tu'])) {
$annots .= ' /TU '.$this->_datastring($pl['opt']['tu'], $annot_obj_id);
}
if (isset($pl['opt']['tm']) AND is_string($pl['opt']['tm'])) {
$annots .= ' /TM '.$this->_datastring($pl['opt']['tm'], $annot_obj_id);
}
if (isset($pl['opt']['ff'])) {
if (is_array($pl['opt']['ff'])) {
// array of bit settings
$flag = 0;
foreach($pl['opt']['ff'] as $val) {
$flag += 1 << ($val - 1);
}
} else {
$flag = intval($pl['opt']['ff']);
}
$annots .= ' /Ff '.$flag;
}
if (isset($pl['opt']['maxlen'])) {
$annots .= ' /MaxLen '.intval($pl['opt']['maxlen']);
}
if (isset($pl['opt']['v'])) {
$annots .= ' /V';
if (is_array($pl['opt']['v'])) {
foreach ($pl['opt']['v'] AS $optval) {
if (is_float($optval)) {
$optval = sprintf('%.2F', $optval);
}
$annots .= ' '.$optval;
}
} else {
$annots .= ' '.$this->_textstring($pl['opt']['v'], $annot_obj_id);
}
}
if (isset($pl['opt']['dv'])) {
$annots .= ' /DV';
if (is_array($pl['opt']['dv'])) {
foreach ($pl['opt']['dv'] AS $optval) {
if (is_float($optval)) {
$optval = sprintf('%.2F', $optval);
}
$annots .= ' '.$optval;
}
} else {
$annots .= ' '.$this->_textstring($pl['opt']['dv'], $annot_obj_id);
}
}
if (isset($pl['opt']['rv'])) {
$annots .= ' /RV';
if (is_array($pl['opt']['rv'])) {
foreach ($pl['opt']['rv'] AS $optval) {
if (is_float($optval)) {
$optval = sprintf('%.2F', $optval);
}
$annots .= ' '.$optval;
}
} else {
$annots .= ' '.$this->_textstring($pl['opt']['rv'], $annot_obj_id);
}
}
if (isset($pl['opt']['a']) AND !empty($pl['opt']['a'])) {
$annots .= ' /A << '.$pl['opt']['a'].' >>';
}
if (isset($pl['opt']['aa']) AND !empty($pl['opt']['aa'])) {
$annots .= ' /AA << '.$pl['opt']['aa'].' >>';
}
if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) {
$annots .= ' /DA ('.$pl['opt']['da'].')';
}
if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) {
$annots .= ' /Q '.intval($pl['opt']['q']);
}
if (isset($pl['opt']['opt']) AND (is_array($pl['opt']['opt'])) AND !empty($pl['opt']['opt'])) {
$annots .= ' /Opt [';
foreach($pl['opt']['opt'] AS $copt) {
if (is_array($copt)) {
$annots .= ' ['.$this->_textstring($copt[0], $annot_obj_id).' '.$this->_textstring($copt[1], $annot_obj_id).']';
} else {
$annots .= ' '.$this->_textstring($copt, $annot_obj_id);
}
}
$annots .= ']';
}
if (isset($pl['opt']['ti'])) {
$annots .= ' /TI '.intval($pl['opt']['ti']);
}
if (isset($pl['opt']['i']) AND (is_array($pl['opt']['i'])) AND !empty($pl['opt']['i'])) {
$annots .= ' /I [';
foreach($pl['opt']['i'] AS $copt) {
$annots .= intval($copt).' ';
}
$annots .= ']';
}
break;
}
case 'screen': {
break;
}
case 'printermark': {
break;
}
case 'trapnet': {
break;
}
case 'watermark': {
break;
}
case '3d': {
break;
}
default: {
break;
}
}
$annots .= '>>';
// create new annotation object
$this->_out($this->_getobj($annot_obj_id)."\n".$annots."\n".'endobj');
if ($formfield AND !isset($this->radiobutton_groups[$n][$pl['txt']])) {
// store reference of form object
$this->form_obj_id[] = $annot_obj_id;
}
}
}
} // end for each page
}
TCPDF::_putannotsrefs (   $n)
protected

Output references to page annotations.

Parameters
int$npage number protected
Author
Nicola Asuni
Since
4.7.000 (2008-08-29)
Deprecated:

Definition at line 8284 of file tcpdf.php.

{
$this->_out($this->_getannotsrefs($n));
}
TCPDF::_putAPXObject (   $w = 0,
  $h = 0,
  $stream = '' 
)
protected

Put appearance streams XObject used to define annotation's appearance states.

Parameters
int$wannotation width
int$hannotation height
string$streamappearance stream
Returns
int object ID protected
Since
4.8.001 (2009-09-09)

Definition at line 8944 of file tcpdf.php.

References $out, and n.

{
$stream = trim($stream);
$out = $this->_getobj()."\n";
$this->xobjects['AX'.$this->n] = array('n' => $this->n);
$out .= '<<';
$out .= ' /Type /XObject';
$out .= ' /Subtype /Form';
$out .= ' /FormType 1';
if ($this->compress) {
$stream = gzcompress($stream);
$out .= ' /Filter /FlateDecode';
}
$rect = sprintf('%.2F %.2F', $w, $h);
$out .= ' /BBox [0 0 '.$rect.']';
$out .= ' /Matrix [1 0 0 1 0 0]';
$out .= ' /Resources <<';
$out .= ' /ProcSet [/PDF /Text]';
$out .= ' /Font <<';
foreach ($this->annotation_fonts as $fontkey => $fontid) {
$out .= ' /F'.$fontid.' '.$this->font_obj_ids[$fontkey].' 0 R';
}
$out .= ' >>';
$out .= ' >>';
$stream = $this->_getrawstream($stream);
$out .= ' /Length '.strlen($stream);
$out .= ' >>';
$out .= ' stream'."\n".$stream."\n".'endstream';
$out .= "\n".'endobj';
$this->_out($out);
return $this->n;
}
TCPDF::_putbookmarks ( )
protected

Create a bookmark PDF string.

protected

Author
Olivier Plathey, Nicola Asuni
Since
2.1.002 (2008-02-12)

Definition at line 13943 of file tcpdf.php.

References $out, $row, $title, and n.

{
$nb = count($this->outlines);
if ($nb == 0) {
return;
}
// get sorting columns
$outline_p = array();
$outline_y = array();
foreach ($this->outlines as $key => $row) {
$outline_p[$key] = $row['p'];
$outline_k[$key] = $key;
}
// sort outlines by page and original position
array_multisort($outline_p, SORT_NUMERIC, SORT_ASC, $outline_k, SORT_NUMERIC, SORT_ASC, $this->outlines);
$lru = array();
$level = 0;
foreach ($this->outlines as $i => $o) {
if ($o['l'] > 0) {
$parent = $lru[($o['l'] - 1)];
//Set parent and last pointers
$this->outlines[$i]['parent'] = $parent;
$this->outlines[$parent]['last'] = $i;
if ($o['l'] > $level) {
//Level increasing: set first pointer
$this->outlines[$parent]['first'] = $i;
}
} else {
$this->outlines[$i]['parent'] = $nb;
}
if (($o['l'] <= $level) AND ($i > 0)) {
//Set prev and next pointers
$prev = $lru[$o['l']];
$this->outlines[$prev]['next'] = $i;
$this->outlines[$i]['prev'] = $prev;
}
$lru[$o['l']] = $i;
$level = $o['l'];
}
//Outline items
$n = $this->n + 1;
$nltags = '/<br[\s]?\/>|<\/(blockquote|dd|dl|div|dt|h1|h2|h3|h4|h5|h6|hr|li|ol|p|pre|ul|tcpdf|table|tr|td)>/si';
foreach ($this->outlines as $i => $o) {
if (isset($this->page_obj_id[($o['p'])])) {
$oid = $this->_newobj();
// covert HTML title to string
$title = preg_replace($nltags, "\n", $o['t']);
$title = preg_replace("/[\r]+/si", '', $title);
$title = preg_replace("/[\n]+/si", "\n", $title);
$title = strip_tags($title);
$out = '<</Title '.$this->_textstring($title, $oid);
$out .= ' /Parent '.($n + $o['parent']).' 0 R';
if (isset($o['prev'])) {
$out .= ' /Prev '.($n + $o['prev']).' 0 R';
}
if (isset($o['next'])) {
$out .= ' /Next '.($n + $o['next']).' 0 R';
}
if (isset($o['first'])) {
$out .= ' /First '.($n + $o['first']).' 0 R';
}
if (isset($o['last'])) {
$out .= ' /Last '.($n + $o['last']).' 0 R';
}
$out .= ' '.sprintf('/Dest [%u 0 R /XYZ 0 %.2F null]', $this->page_obj_id[($o['p'])], ($this->pagedim[$o['p']]['h'] - ($o['y'] * $this->k)));
$out .= ' /Count 0 >>';
$out .= "\n".'endobj';
$this->_out($out);
}
}
//Outline root
$this->OutlineRoot = $this->_newobj();
$this->_out('<< /Type /Outlines /First '.$n.' 0 R /Last '.($n + $lru[0]).' 0 R >>'."\n".'endobj');
}
TCPDF::_putcatalog ( )
protected

Output Catalog.

Returns
int object id protected

Definition at line 10380 of file tcpdf.php.

References $out.

{
$oid = $this->_newobj();
$out = '<< /Type /Catalog';
$out .= ' /Pages 1 0 R';
if ($this->ZoomMode == 'fullpage') {
$out .= ' /OpenAction ['.$this->page_obj_id[1].' 0 R /Fit]';
} elseif ($this->ZoomMode == 'fullwidth') {
$out .= ' /OpenAction ['.$this->page_obj_id[1].' 0 R /FitH null]';
} elseif ($this->ZoomMode == 'real') {
$out .= ' /OpenAction ['.$this->page_obj_id[1].' 0 R /XYZ null null 1]';
} elseif (!is_string($this->ZoomMode)) {
$out .= sprintf(' /OpenAction ['.$this->page_obj_id[1].' 0 R /XYZ null null %.2F]',($this->ZoomMode / 100));
}
if (isset($this->LayoutMode) AND (!$this->empty_string($this->LayoutMode))) {
$out .= ' /PageLayout /'.$this->LayoutMode;
}
if (isset($this->PageMode) AND (!$this->empty_string($this->PageMode))) {
$out .= ' /PageMode /'.$this->PageMode;
}
if (isset($this->l['a_meta_language'])) {
$out .= ' /Lang '.$this->_textstring($this->l['a_meta_language'], $oid);
}
$out .= ' /Names <<';
if ((!empty($this->javascript)) OR (!empty($this->js_objects))) {
$out .= ' /JavaScript '.($this->n_js).' 0 R';
}
$out .= ' >>';
if (count($this->outlines) > 0) {
$out .= ' /Outlines '.$this->OutlineRoot.' 0 R';
$out .= ' /PageMode /UseOutlines';
}
$out .= ' '.$this->_putviewerpreferences();
$p = $this->n_ocg_print.' 0 R';
$v = $this->n_ocg_view.' 0 R';
$as = '<< /Event /Print /OCGs ['.$p.' '.$v.'] /Category [/Print] >> << /Event /View /OCGs ['.$p.' '.$v.'] /Category [/View] >>';
$out .= ' /OCProperties << /OCGs ['.$p.' '.$v.'] /D << /ON ['.$p.'] /OFF ['.$v.'] /AS ['.$as.'] >> >>';
// AcroForm
if (!empty($this->form_obj_id) OR ($this->sign AND isset($this->signature_data['cert_type']))) {
$out .= ' /AcroForm <<';
$objrefs = '';
if ($this->sign AND isset($this->signature_data['cert_type'])) {
$objrefs .= $this->sig_obj_id.' 0 R';
}
if (!empty($this->form_obj_id)) {
foreach($this->form_obj_id as $objid) {
$objrefs .= ' '.$objid.' 0 R';
}
}
$out .= ' /Fields ['.$objrefs.']';
if (!empty($this->form_obj_id) AND !$this->sign) {
// It's better to turn off this value and set the appearance stream for each annotation (/AP) to avoid conflicts with signature fields.
$out .= ' /NeedAppearances true';
}
if ($this->sign AND isset($this->signature_data['cert_type'])) {
if ($this->signature_data['cert_type'] > 0) {
$out .= ' /SigFlags 3';
} else {
$out .= ' /SigFlags 1';
}
}
//$out .= ' /CO ';
if (isset($this->annotation_fonts) AND !empty($this->annotation_fonts)) {
$out .= ' /DR <<';
$out .= ' /Font <<';
foreach ($this->annotation_fonts as $fontkey => $fontid) {
$out .= ' /F'.$fontid.' '.$this->font_obj_ids[$fontkey].' 0 R';
}
$out .= ' >> >>';
}
$font = $this->getFontBuffer('helvetica');
$out .= ' /DA (/F'.$font['i'].' 0 Tf 0 g)';
$out .= ' /Q '.(($this->rtl)?'2':'0');
//$out .= ' /XFA ';
$out .= ' >>';
// signatures
if ($this->sign AND isset($this->signature_data['cert_type'])) {
if ($this->signature_data['cert_type'] > 0) {
$out .= ' /Perms << /DocMDP '.($this->sig_obj_id + 1).' 0 R >>';
} else {
$out .= ' /Perms << /UR3 '.($this->sig_obj_id + 1).' 0 R >>';
}
}
}
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
return $oid;
}
TCPDF::_putcidfont0 (   $font)
protected

Output CID-0 fonts.

A Type 0 CIDFont contains glyph descriptions based on the Adobe Type 1 font format

Parameters
array$fontfont data protected
Author
Andrew Whitehead, Nicola Asuni, Yukihiro Nakadaira
Since
3.2.000 (2008-06-23)

Definition at line 10040 of file tcpdf.php.

References $cidinfo, $cw, $enc, $name, and $out.

{
$cidoffset = 0;
if (!isset($font['cw'][1])) {
$cidoffset = 31;
}
if (isset($font['cidinfo']['uni2cid'])) {
// convert unicode to cid.
$uni2cid = $font['cidinfo']['uni2cid'];
$cw = array();
foreach ($font['cw'] as $uni => $width) {
if (isset($uni2cid[$uni])) {
$cw[($uni2cid[$uni] + $cidoffset)] = $width;
} elseif ($uni < 256) {
$cw[$uni] = $width;
} // else unknown character
}
$font = array_merge($font, array('cw' => $cw));
}
$name = $font['name'];
$enc = $font['enc'];
if ($enc) {
$longname = $name.'-'.$enc;
} else {
$longname = $name;
}
$out = $this->_getobj($this->font_obj_ids[$font['fontkey']])."\n";
$out .= '<</Type /Font';
$out .= ' /Subtype /Type0';
$out .= ' /BaseFont /'.$longname;
$out .= ' /Name /F'.$font['i'];
if ($enc) {
$out .= ' /Encoding /'.$enc;
}
$out .= ' /DescendantFonts ['.($this->n + 1).' 0 R]';
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
$oid = $this->_newobj();
$out = '<</Type /Font';
$out .= ' /Subtype /CIDFontType0';
$out .= ' /BaseFont /'.$name;
$cidinfo = '/Registry '.$this->_datastring($font['cidinfo']['Registry'], $oid);
$cidinfo .= ' /Ordering '.$this->_datastring($font['cidinfo']['Ordering'], $oid);
$cidinfo .= ' /Supplement '.$font['cidinfo']['Supplement'];
$out .= ' /CIDSystemInfo <<'.$cidinfo.'>>';
$out .= ' /FontDescriptor '.($this->n + 1).' 0 R';
$out .= ' /DW '.$font['dw'];
$out .= "\n".$this->_putfontwidths($font, $cidoffset);
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
$this->_newobj();
$s = '<</Type /FontDescriptor /FontName /'.$name;
foreach ($font['desc'] as $k => $v) {
if ($k != 'Style') {
if(is_float($v)) {
$v = sprintf('%.3F', $v);
}
$s .= ' /'.$k.' '.$v.'';
}
}
$s .= '>>';
$s .= "\n".'endobj';
$this->_out($s);
}
TCPDF::_putEmbeddedFiles ( )
protected

Embedd the attached files.

Since
4.4.000 (2008-12-07) protected
See Also
Annotation()

Definition at line 5119 of file tcpdf.php.

References $data, $filename, $out, _getobj(), _getrawstream(), and _out().

{
reset($this->embeddedfiles);
foreach ($this->embeddedfiles as $filename => $filedata) {
$data = file_get_contents($filedata['file']);
$filter = '';
if ($this->compress) {
$data = gzcompress($data);
$filter = ' /Filter /FlateDecode';
}
$stream = $this->_getrawstream($data, $filedata['n']);
$out = $this->_getobj($filedata['n'])."\n";
$out .= '<< /Type /EmbeddedFile'.$filter.' /Length '.strlen($stream).' >>';
$out .= ' stream'."\n".$stream."\n".'endstream';
$out .= "\n".'endobj';
$this->_out($out);
}
}

+ Here is the call graph for this function:

TCPDF::_putencryption ( )
protected

Put encryption on PDF document.

protected

Author
Nicola Asuni
Since
2.0.000 (2008-01-02)

Definition at line 11514 of file tcpdf.php.

References $out.

{
if (!$this->encrypted) {
return;
}
$this->encryptdata['objid'] = $this->_newobj();
$out = '<<';
if (!isset($this->encryptdata['Filter']) OR empty($this->encryptdata['Filter'])) {
$this->encryptdata['Filter'] = 'Standard';
}
$out .= ' /Filter /'.$this->encryptdata['Filter'];
if (isset($this->encryptdata['SubFilter']) AND !empty($this->encryptdata['SubFilter'])) {
$out .= ' /SubFilter /'.$this->encryptdata['SubFilter'];
}
if (!isset($this->encryptdata['V']) OR empty($this->encryptdata['V'])) {
$this->encryptdata['V'] = 1;
}
// V is a code specifying the algorithm to be used in encrypting and decrypting the document
$out .= ' /V '.$this->encryptdata['V'];
if (isset($this->encryptdata['Length']) AND !empty($this->encryptdata['Length'])) {
// The length of the encryption key, in bits. The value shall be a multiple of 8, in the range 40 to 256
$out .= ' /Length '.$this->encryptdata['Length'];
} else {
$out .= ' /Length 40';
}
if ($this->encryptdata['V'] >= 4) {
if (!isset($this->encryptdata['StmF']) OR empty($this->encryptdata['StmF'])) {
$this->encryptdata['StmF'] = 'Identity';
}
if (!isset($this->encryptdata['StrF']) OR empty($this->encryptdata['StrF'])) {
// The name of the crypt filter that shall be used when decrypting all strings in the document.
$this->encryptdata['StrF'] = 'Identity';
}
// A dictionary whose keys shall be crypt filter names and whose values shall be the corresponding crypt filter dictionaries.
if (isset($this->encryptdata['CF']) AND !empty($this->encryptdata['CF'])) {
$out .= ' /CF <<';
$out .= ' /'.$this->encryptdata['StmF'].' <<';
$out .= ' /Type /CryptFilter';
if (isset($this->encryptdata['CF']['CFM']) AND !empty($this->encryptdata['CF']['CFM'])) {
// The method used
$out .= ' /CFM /'.$this->encryptdata['CF']['CFM'];
if ($this->encryptdata['pubkey']) {
$out .= ' /Recipients [';
foreach ($this->encryptdata['Recipients'] as $rec) {
$out .= ' <'.$rec.'>';
}
$out .= ' ]';
if (isset($this->encryptdata['CF']['EncryptMetadata']) AND (!$this->encryptdata['CF']['EncryptMetadata'])) {
$out .= ' /EncryptMetadata false';
} else {
$out .= ' /EncryptMetadata true';
}
}
} else {
$out .= ' /CFM /None';
}
if (isset($this->encryptdata['CF']['AuthEvent']) AND !empty($this->encryptdata['CF']['AuthEvent'])) {
// The event to be used to trigger the authorization that is required to access encryption keys used by this filter.
$out .= ' /AuthEvent /'.$this->encryptdata['CF']['AuthEvent'];
} else {
$out .= ' /AuthEvent /DocOpen';
}
if (isset($this->encryptdata['CF']['Length']) AND !empty($this->encryptdata['CF']['Length'])) {
// The bit length of the encryption key.
$out .= ' /Length '.$this->encryptdata['CF']['Length'];
}
$out .= ' >> >>';
}
// The name of the crypt filter that shall be used by default when decrypting streams.
$out .= ' /StmF /'.$this->encryptdata['StmF'];
// The name of the crypt filter that shall be used when decrypting all strings in the document.
$out .= ' /StrF /'.$this->encryptdata['StrF'];
if (isset($this->encryptdata['EFF']) AND !empty($this->encryptdata['EFF'])) {
// The name of the crypt filter that shall be used when encrypting embedded file streams that do not have their own crypt filter specifier.
$out .= ' /EFF /'.$this->encryptdata[''];
}
}
// Additional encryption dictionary entries for the standard security handler
if ($this->encryptdata['pubkey']) {
if (($this->encryptdata['V'] < 4) AND isset($this->encryptdata['Recipients']) AND !empty($this->encryptdata['Recipients'])) {
$out .= ' /Recipients [';
foreach ($this->encryptdata['Recipients'] as $rec) {
$out .= ' <'.$rec.'>';
}
$out .= ' ]';
}
} else {
$out .= ' /R';
if ($this->encryptdata['V'] == 5) { // AES-256
$out .= ' 5';
$out .= ' /OE ('.$this->_escape($this->encryptdata['OE']).')';
$out .= ' /UE ('.$this->_escape($this->encryptdata['UE']).')';
$out .= ' /Perms ('.$this->_escape($this->encryptdata['perms']).')';
} elseif ($this->encryptdata['V'] == 4) { // AES-128
$out .= ' 4';
} elseif ($this->encryptdata['V'] < 2) { // RC-40
$out .= ' 2';
} else { // RC-128
$out .= ' 3';
}
$out .= ' /O ('.$this->_escape($this->encryptdata['O']).')';
$out .= ' /U ('.$this->_escape($this->encryptdata['U']).')';
$out .= ' /P '.$this->encryptdata['P'];
if (isset($this->encryptdata['EncryptMetadata']) AND (!$this->encryptdata['EncryptMetadata'])) {
$out .= ' /EncryptMetadata false';
} else {
$out .= ' /EncryptMetadata true';
}
}
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
}
TCPDF::_putextgstates ( )
protected

Put extgstates for object transparency.

Parameters
array$gsextgstate protected
Since
3.0.000 (2008-03-27)

Definition at line 15485 of file tcpdf.php.

References $out.

{
$ne = count($this->extgstates);
for ($i = 1; $i <= $ne; ++$i) {
$this->extgstates[$i]['n'] = $this->_newobj();
$out = '<< /Type /ExtGState';
foreach ($this->extgstates[$i]['parms'] as $k => $v) {
if (is_float($v)) {
$v = sprintf('%.2F', $v);
}
$out .= ' /'.$k.' '.$v;
}
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
}
}
TCPDF::_putfonts ( )
protected

Output fonts.

Author
Nicola Asuni protected

Definition at line 9497 of file tcpdf.php.

References $cw, $diff, $file, $name, $out, and $type.

{
$nf = $this->n;
foreach ($this->diffs as $diff) {
//Encodings
$this->_newobj();
$this->_out('<< /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$diff.'] >>'."\n".'endobj');
}
$mqr = $this->get_mqr();
$this->set_mqr(false);
foreach ($this->FontFiles as $file => $info) {
// search and get font file to embedd
$fontdir = $info['fontdir'];
$file = strtolower($file);
$fontfile = '';
// search files on various directories
if (($fontdir !== false) AND file_exists($fontdir.$file)) {
$fontfile = $fontdir.$file;
} elseif (file_exists($this->_getfontpath().$file)) {
$fontfile = $this->_getfontpath().$file;
} elseif (file_exists($file)) {
$fontfile = $file;
}
if (!$this->empty_string($fontfile)) {
$font = file_get_contents($fontfile);
$compressed = (substr($file, -2) == '.z');
if ((!$compressed) AND (isset($info['length2']))) {
$header = (ord($font{0}) == 128);
if ($header) {
//Strip first binary header
$font = substr($font, 6);
}
if ($header AND (ord($font{$info['length1']}) == 128)) {
//Strip second binary header
$font = substr($font, 0, $info['length1']).substr($font, ($info['length1'] + 6));
}
} elseif ($info['subset'] AND ((!$compressed) OR ($compressed AND function_exists('gzcompress')))) {
if ($compressed) {
// uncompress font
$font = gzuncompress($font);
}
// merge subset characters
$subsetchars = array(); // used chars
foreach ($info['fontkeys'] as $fontkey) {
$fontinfo = $this->getFontBuffer($fontkey);
$subsetchars += $fontinfo['subsetchars'];
}
$font = $this->_getTrueTypeFontSubset($font, $subsetchars);
if ($compressed) {
// recompress font
$font = gzcompress($font);
}
}
$this->_newobj();
$this->FontFiles[$file]['n'] = $this->n;
$stream = $this->_getrawstream($font);
$out = '<< /Length '.strlen($stream);
if ($compressed) {
$out .= ' /Filter /FlateDecode';
}
$out .= ' /Length1 '.$info['length1'];
if (isset($info['length2'])) {
$out .= ' /Length2 '.$info['length2'].' /Length3 0';
}
$out .= ' >>';
$out .= ' stream'."\n".$stream."\n".'endstream';
$out .= "\n".'endobj';
$this->_out($out);
}
}
$this->set_mqr($mqr);
foreach ($this->fontkeys as $k) {
//Font objects
$font = $this->getFontBuffer($k);
$type = $font['type'];
$name = $font['name'];
if ($type == 'core') {
// standard core font
$out = $this->_getobj($this->font_obj_ids[$k])."\n";
$out .= '<</Type /Font';
$out .= ' /Subtype /Type1';
$out .= ' /BaseFont /'.$name;
$out .= ' /Name /F'.$font['i'];
if ((strtolower($name) != 'symbol') AND (strtolower($name) != 'zapfdingbats')) {
$out .= ' /Encoding /WinAnsiEncoding';
}
if ($k == 'helvetica') {
// add default font for annotations
$this->annotation_fonts[$k] = $font['i'];
}
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
} elseif (($type == 'Type1') OR ($type == 'TrueType')) {
// additional Type1 or TrueType font
$out = $this->_getobj($this->font_obj_ids[$k])."\n";
$out .= '<</Type /Font';
$out .= ' /Subtype /'.$type;
$out .= ' /BaseFont /'.$name;
$out .= ' /Name /F'.$font['i'];
$out .= ' /FirstChar 32 /LastChar 255';
$out .= ' /Widths '.($this->n + 1).' 0 R';
$out .= ' /FontDescriptor '.($this->n + 2).' 0 R';
if ($font['enc']) {
if (isset($font['diff'])) {
$out .= ' /Encoding '.($nf + $font['diff']).' 0 R';
} else {
$out .= ' /Encoding /WinAnsiEncoding';
}
}
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
// Widths
$this->_newobj();
$cw = &$font['cw'];
$s = '[';
for ($i = 32; $i < 256; ++$i) {
$s .= $cw[$i].' ';
}
$s .= ']';
$s .= "\n".'endobj';
$this->_out($s);
//Descriptor
$this->_newobj();
$s = '<</Type /FontDescriptor /FontName /'.$name;
foreach ($font['desc'] as $fdk => $fdv) {
if(is_float($fdv)) {
$fdv = sprintf('%.3F', $fdv);
}
$s .= ' /'.$fdk.' '.$fdv.'';
}
if (!$this->empty_string($font['file'])) {
$s .= ' /FontFile'.($type == 'Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R';
}
$s .= '>>';
$s .= "\n".'endobj';
$this->_out($s);
} else {
// additional types
$mtd = '_put'.strtolower($type);
if (!method_exists($this, $mtd)) {
$this->Error('Unsupported font type: '.$type);
}
$this->$mtd($font);
}
}
}
TCPDF::_putfontwidths (   $font,
  $cidoffset = 0 
)
protected

Outputs font widths.

Parameters
array$fontfont data
int$cidoffsetoffset for CID values
Returns
PDF command string for font widths
Author
Nicola Asuni protected
Since
4.4.000 (2008-12-07)

Definition at line 9398 of file tcpdf.php.

{
ksort($font['cw']);
$rangeid = 0;
$range = array();
$prevcid = -2;
$prevwidth = -1;
$interval = false;
// for each character
foreach ($font['cw'] as $cid => $width) {
$cid -= $cidoffset;
if ($font['subset'] AND ($cid > 255) AND (!isset($font['subsetchars'][$cid]))) {
// ignore the unused characters (font subsetting)
continue;
}
if ($width != $font['dw']) {
if ($cid == ($prevcid + 1)) {
// consecutive CID
if ($width == $prevwidth) {
if ($width == $range[$rangeid][0]) {
$range[$rangeid][] = $width;
} else {
array_pop($range[$rangeid]);
// new range
$rangeid = $prevcid;
$range[$rangeid] = array();
$range[$rangeid][] = $prevwidth;
$range[$rangeid][] = $width;
}
$interval = true;
$range[$rangeid]['interval'] = true;
} else {
if ($interval) {
// new range
$rangeid = $cid;
$range[$rangeid] = array();
$range[$rangeid][] = $width;
} else {
$range[$rangeid][] = $width;
}
$interval = false;
}
} else {
// new range
$rangeid = $cid;
$range[$rangeid] = array();
$range[$rangeid][] = $width;
$interval = false;
}
$prevcid = $cid;
$prevwidth = $width;
}
}
// optimize ranges
$prevk = -1;
$nextk = -1;
$prevint = false;
foreach ($range as $k => $ws) {
$cws = count($ws);
if (($k == $nextk) AND (!$prevint) AND ((!isset($ws['interval'])) OR ($cws < 4))) {
if (isset($range[$k]['interval'])) {
unset($range[$k]['interval']);
}
$range[$prevk] = array_merge($range[$prevk], $range[$k]);
unset($range[$k]);
} else {
$prevk = $k;
}
$nextk = $k + $cws;
if (isset($ws['interval'])) {
if ($cws > 3) {
$prevint = true;
} else {
$prevint = false;
}
unset($range[$k]['interval']);
--$nextk;
} else {
$prevint = false;
}
}
// output data
$w = '';
foreach ($range as $k => $ws) {
if (count(array_count_values($ws)) == 1) {
// interval mode is more compact
$w .= ' '.$k.' '.($k + count($ws) - 1).' '.$ws[0];
} else {
// range mode
$w .= ' '.$k.' [ '.implode(' ', $ws).' ]';
}
}
return '/W ['.$w.' ]';
}
TCPDF::_putheader ( )
protected

Output PDF header.

protected

Definition at line 10547 of file tcpdf.php.

{
$this->_out('%PDF-'.$this->PDFVersion);
}
TCPDF::_putimages ( )
protected

Output images.

protected

Definition at line 10110 of file tcpdf.php.

References $file, $out, and n.

{
$filter = ($this->compress) ? '/Filter /FlateDecode ' : '';
foreach ($this->imagekeys as $file) {
$info = $this->getImageBuffer($file);
$oid = $this->_newobj();
$this->xobjects['I'.$info['i']] = array('n' => $oid);
$this->setImageSubBuffer($file, 'n', $this->n);
$out = '<</Type /XObject';
$out .= ' /Subtype /Image';
$out .= ' /Width '.$info['w'];
$out .= ' /Height '.$info['h'];
if (array_key_exists('masked', $info)) {
$out .= ' /SMask '.($this->n - 1).' 0 R';
}
if ($info['cs'] == 'Indexed') {
$out .= ' /ColorSpace [/Indexed /DeviceRGB '.((strlen($info['pal']) / 3) - 1).' '.($this->n + 1).' 0 R]';
} else {
$out .= ' /ColorSpace /'.$info['cs'];
if ($info['cs'] == 'DeviceCMYK') {
$out .= ' /Decode [1 0 1 0 1 0 1 0]';
}
}
$out .= ' /BitsPerComponent '.$info['bpc'];
if (isset($info['f'])) {
$out .= ' /Filter /'.$info['f'];
}
if (isset($info['parms'])) {
$out .= ' '.$info['parms'];
}
if (isset($info['trns']) AND is_array($info['trns'])) {
$trns='';
$count_info = count($info['trns']);
for ($i=0; $i < $count_info; ++$i) {
$trns .= $info['trns'][$i].' '.$info['trns'][$i].' ';
}
$out .= ' /Mask ['.$trns.']';
}
$stream = $this->_getrawstream($info['data']);
$out .= ' /Length '.strlen($stream).' >>';
$out .= ' stream'."\n".$stream."\n".'endstream';
$out .= "\n".'endobj';
$this->_out($out);
//Palette
if ($info['cs'] == 'Indexed') {
$this->_newobj();
$pal = ($this->compress) ? gzcompress($info['pal']) : $info['pal'];
$pal = $this->_getrawstream($pal);
$this->_out('<<'.$filter.'/Length '.strlen($pal).'>> stream'."\n".$pal."\n".'endstream'."\n".'endobj');
}
}
}
TCPDF::_putinfo ( )
protected

Adds some Metadata information (Document Information Dictionary) (see Chapter 14.3.3 Document Information Dictionary of PDF32000_2008.pdf Reference)

Returns
int object id protected

Definition at line 10333 of file tcpdf.php.

References $out, and PDF_PRODUCER.

{
$oid = $this->_newobj();
$out = '<<';
if (!$this->empty_string($this->title)) {
// The document's title.
$out .= ' /Title '.$this->_textstring($this->title, $oid);
}
if (!$this->empty_string($this->author)) {
// The name of the person who created the document.
$out .= ' /Author '.$this->_textstring($this->author, $oid);
}
if (!$this->empty_string($this->subject)) {
// The subject of the document.
$out .= ' /Subject '.$this->_textstring($this->subject, $oid);
}
if (!$this->empty_string($this->keywords)) {
// Keywords associated with the document.
$out .= ' /Keywords '.$this->_textstring($this->keywords.' TCP'.'DF', $oid);
}
if (!$this->empty_string($this->creator)) {
// If the document was converted to PDF from another format, the name of the conforming product that created the original document from which it was converted.
$out .= ' /Creator '.$this->_textstring($this->creator, $oid);
}
if (defined('PDF_PRODUCER')) {
// If the document was converted to PDF from another format, the name of the conforming product that converted it to PDF.
$out .= ' /Producer '.$this->_textstring(PDF_PRODUCER.' (TCP'.'DF)', $oid);
} else {
// default producer
$out .= ' /Producer '.$this->_textstring('TCP'.'DF', $oid);
}
// The date and time the document was created, in human-readable form
$out .= ' /CreationDate '.$this->_datestring();
// The date and time the document was most recently modified, in human-readable form
$out .= ' /ModDate '.$this->_datestring();
// A name object indicating whether the document has been modified to include trapping information
$out .= ' /Trapped /False';
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
return $oid;
}
TCPDF::_putjavascript ( )
protected

Create a javascript PDF string.

protected

Author
Johannes Güntert, Nicola Asuni
Since
2.1.002 (2008-02-12)

Definition at line 14052 of file tcpdf.php.

References $out.

{
if (empty($this->javascript) AND empty($this->js_objects)) {
return;
}
if (strpos($this->javascript, 'this.addField') > 0) {
if (!$this->ur['enabled']) {
//$this->setUserRights();
}
// the following two lines are used to avoid form fields duplication after saving
// The addField method only works when releasing user rights (UR3)
$jsa = sprintf("ftcpdfdocsaved=this.addField('%s','%s',%d,[%.2F,%.2F,%.2F,%.2F]);", 'tcpdfdocsaved', 'text', 0, 0, 1, 0, 1);
$jsb = "getField('tcpdfdocsaved').value='saved';";
$this->javascript = $jsa."\n".$this->javascript."\n".$jsb;
}
$this->n_js = $this->_newobj();
$out = ' << /Names [';
if (!empty($this->javascript)) {
$out .= ' (EmbeddedJS) '.($this->n + 1).' 0 R';
}
if (!empty($this->js_objects)) {
foreach ($this->js_objects as $key => $val) {
if ($val['onload']) {
$out .= ' (JS'.$key.') '.$key.' 0 R';
}
}
}
$out .= ' ] >>';
$out .= "\n".'endobj';
$this->_out($out);
// default Javascript object
if (!empty($this->javascript)) {
$obj_id = $this->_newobj();
$out = '<< /S /JavaScript';
$out .= ' /JS '.$this->_textstring($this->javascript, $obj_id);
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
}
// additional Javascript objects
if (!empty($this->js_objects)) {
foreach ($this->js_objects as $key => $val) {
$out = $this->_getobj($key)."\n".' << /S /JavaScript /JS '.$this->_textstring($val['js'], $key).' >>'."\n".'endobj';
$this->_out($out);
}
}
}
TCPDF::_putocg ( )
protected

Put visibility settings.

protected

Since
3.0.000 (2008-03-27)

Definition at line 15405 of file tcpdf.php.

{
$this->n_ocg_print = $this->_newobj();
$this->_out('<< /Type /OCG /Name '.$this->_textstring('print', $this->n_ocg_print).' /Usage << /Print <</PrintState /ON>> /View <</ViewState /OFF>> >> >>'."\n".'endobj');
$this->n_ocg_view = $this->_newobj();
$this->_out('<< /Type /OCG /Name '.$this->_textstring('view', $this->n_ocg_view).' /Usage << /Print <</PrintState /OFF>> /View <</ViewState /ON>> >> >>'."\n".'endobj');
}
TCPDF::_putpages ( )
protected

Output pages.

protected

Definition at line 8075 of file tcpdf.php.

References $out.

{
if (!empty($this->AliasNbPages)) {
$nbs = $this->formatPageNumber($nb);
$nbu = $this->UTF8ToUTF16BE($nbs, false); // replacement for unicode font
$alias_a = $this->_escape($this->AliasNbPages);
$alias_au = $this->_escape('{'.$this->AliasNbPages.'}');
if ($this->isunicode) {
$alias_b = $this->_escape($this->UTF8ToLatin1($this->AliasNbPages));
$alias_bu = $this->_escape($this->UTF8ToLatin1('{'.$this->AliasNbPages.'}'));
$alias_c = $this->_escape($this->utf8StrRev($this->AliasNbPages, false, $this->tmprtl));
$alias_cu = $this->_escape($this->utf8StrRev('{'.$this->AliasNbPages.'}', false, $this->tmprtl));
}
}
if (!empty($this->AliasNumPage)) {
$alias_pa = $this->_escape($this->AliasNumPage);
$alias_pau = $this->_escape('{'.$this->AliasNumPage.'}');
if ($this->isunicode) {
$alias_pb = $this->_escape($this->UTF8ToLatin1($this->AliasNumPage));
$alias_pbu = $this->_escape($this->UTF8ToLatin1('{'.$this->AliasNumPage.'}'));
$alias_pc = $this->_escape($this->utf8StrRev($this->AliasNumPage, false, $this->tmprtl));
$alias_pcu = $this->_escape($this->utf8StrRev('{'.$this->AliasNumPage.'}', false, $this->tmprtl));
}
}
$pagegroupnum = 0;
$filter = ($this->compress) ? '/Filter /FlateDecode ' : '';
for ($n=1; $n <= $nb; ++$n) {
$temppage = $this->getPageBuffer($n);
if (!empty($this->pagegroups)) {
if(isset($this->newpagegroup[$n])) {
$pagegroupnum = 0;
}
++$pagegroupnum;
foreach ($this->pagegroups as $k => $v) {
// replace total pages group numbers
$vs = $this->formatPageNumber($v);
$vu = $this->UTF8ToUTF16BE($vs, false);
$alias_ga = $this->_escape($k);
$alias_gau = $this->_escape('{'.$k.'}');
if ($this->isunicode) {
$alias_gb = $this->_escape($this->UTF8ToLatin1($k));
$alias_gbu = $this->_escape($this->UTF8ToLatin1('{'.$k.'}'));
$alias_gc = $this->_escape($this->utf8StrRev($k, false, $this->tmprtl));
$alias_gcu = $this->_escape($this->utf8StrRev('{'.$k.'}', false, $this->tmprtl));
}
$temppage = str_replace($alias_gau, $vu, $temppage);
if ($this->isunicode) {
$temppage = str_replace($alias_gbu, $vu, $temppage);
$temppage = str_replace($alias_gcu, $vu, $temppage);
$temppage = str_replace($alias_gb, $vs, $temppage);
$temppage = str_replace($alias_gc, $vs, $temppage);
}
$temppage = str_replace($alias_ga, $vs, $temppage);
// replace page group numbers
$pvs = $this->formatPageNumber($pagegroupnum);
$pvu = $this->UTF8ToUTF16BE($pvs, false);
$pk = str_replace('{nb', '{pnb', $k);
$alias_pga = $this->_escape($pk);
$alias_pgau = $this->_escape('{'.$pk.'}');
if ($this->isunicode) {
$alias_pgb = $this->_escape($this->UTF8ToLatin1($pk));
$alias_pgbu = $this->_escape($this->UTF8ToLatin1('{'.$pk.'}'));
$alias_pgc = $this->_escape($this->utf8StrRev($pk, false, $this->tmprtl));
$alias_pgcu = $this->_escape($this->utf8StrRev('{'.$pk.'}', false, $this->tmprtl));
}
$temppage = str_replace($alias_pgau, $pvu, $temppage);
if ($this->isunicode) {
$temppage = str_replace($alias_pgbu, $pvu, $temppage);
$temppage = str_replace($alias_pgcu, $pvu, $temppage);
$temppage = str_replace($alias_pgb, $pvs, $temppage);
$temppage = str_replace($alias_pgc, $pvs, $temppage);
}
$temppage = str_replace($alias_pga, $pvs, $temppage);
}
}
if (!empty($this->AliasNbPages)) {
// replace total pages number
$temppage = str_replace($alias_au, $nbu, $temppage);
if ($this->isunicode) {
$temppage = str_replace($alias_bu, $nbu, $temppage);
$temppage = str_replace($alias_cu, $nbu, $temppage);
$temppage = str_replace($alias_b, $nbs, $temppage);
$temppage = str_replace($alias_c, $nbs, $temppage);
}
$temppage = str_replace($alias_a, $nbs, $temppage);
}
if (!empty($this->AliasNumPage)) {
// replace page number
$pnbs = $this->formatPageNumber($n);
$pnbu = $this->UTF8ToUTF16BE($pnbs, false); // replacement for unicode font
$temppage = str_replace($alias_pau, $pnbu, $temppage);
if ($this->isunicode) {
$temppage = str_replace($alias_pbu, $pnbu, $temppage);
$temppage = str_replace($alias_pcu, $pnbu, $temppage);
$temppage = str_replace($alias_pb, $pnbs, $temppage);
$temppage = str_replace($alias_pc, $pnbs, $temppage);
}
$temppage = str_replace($alias_pa, $pnbs, $temppage);
}
$temppage = str_replace($this->epsmarker, '', $temppage);
//Page
$this->page_obj_id[$n] = $this->_newobj();
$out = '<<';
$out .= ' /Type /Page';
$out .= ' /Parent 1 0 R';
$out .= ' /LastModified '.$this->_datestring();
$out .= ' /Resources 2 0 R';
$boxes = array('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox');
foreach ($boxes as $box) {
$out .= ' /'.$box;
$out .= sprintf(' [%.2F %.2F %.2F %.2F]', $this->pagedim[$n][$box]['llx'], $this->pagedim[$n][$box]['lly'], $this->pagedim[$n][$box]['urx'], $this->pagedim[$n][$box]['ury']);
}
if (isset($this->pagedim[$n]['BoxColorInfo']) AND !empty($this->pagedim[$n]['BoxColorInfo'])) {
$out .= ' /BoxColorInfo <<';
foreach ($boxes as $box) {
if (isset($this->pagedim[$n]['BoxColorInfo'][$box])) {
$out .= ' /'.$box.' <<';
if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['C'])) {
$color = $this->pagedim[$n]['BoxColorInfo'][$box]['C'];
$out .= ' /C [';
$out .= sprintf(' %.3F %.3F %.3F', $color[0]/255, $color[1]/255, $color[2]/255);
$out .= ' ]';
}
if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['W'])) {
$out .= ' /W '.($this->pagedim[$n]['BoxColorInfo'][$box]['W'] * $this->k);
}
if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['S'])) {
$out .= ' /S /'.$this->pagedim[$n]['BoxColorInfo'][$box]['S'];
}
if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['D'])) {
$dashes = $this->pagedim[$n]['BoxColorInfo'][$box]['D'];
$out .= ' /D [';
foreach ($dashes as $dash) {
$out .= sprintf(' %.3F', ($dash * $this->k));
}
$out .= ' ]';
}
$out .= ' >>';
}
}
$out .= ' >>';
}
$out .= ' /Contents '.($this->n + 1).' 0 R';
$out .= ' /Rotate '.$this->pagedim[$n]['Rotate'];
$out .= ' /Group << /Type /Group /S /Transparency /CS /DeviceRGB >>';
if (isset($this->pagedim[$n]['trans']) AND !empty($this->pagedim[$n]['trans'])) {
// page transitions
if (isset($this->pagedim[$n]['trans']['Dur'])) {
$out .= ' /Dur '.$this->pagedim[$n]['trans']['Dur'];
}
$out .= ' /Trans <<';
$out .= ' /Type /Trans';
if (isset($this->pagedim[$n]['trans']['S'])) {
$out .= ' /S /'.$this->pagedim[$n]['trans']['S'];
}
if (isset($this->pagedim[$n]['trans']['D'])) {
$out .= ' /D '.$this->pagedim[$n]['trans']['D'];
}
if (isset($this->pagedim[$n]['trans']['Dm'])) {
$out .= ' /Dm /'.$this->pagedim[$n]['trans']['Dm'];
}
if (isset($this->pagedim[$n]['trans']['M'])) {
$out .= ' /M /'.$this->pagedim[$n]['trans']['M'];
}
if (isset($this->pagedim[$n]['trans']['Di'])) {
$out .= ' /Di '.$this->pagedim[$n]['trans']['Di'];
}
if (isset($this->pagedim[$n]['trans']['SS'])) {
$out .= ' /SS '.$this->pagedim[$n]['trans']['SS'];
}
if (isset($this->pagedim[$n]['trans']['B'])) {
$out .= ' /B '.$this->pagedim[$n]['trans']['B'];
}
$out .= ' >>';
}
$out .= $this->_getannotsrefs($n);
$out .= ' /PZ '.$this->pagedim[$n]['PZ'];
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
//Page content
$p = ($this->compress) ? gzcompress($temppage) : $temppage;
$this->_newobj();
$p = $this->_getrawstream($p);
$this->_out('<<'.$filter.'/Length '.strlen($p).'>> stream'."\n".$p."\n".'endstream'."\n".'endobj');
if ($this->diskcache) {
// remove temporary files
unlink($this->pages[$n]);
}
}
//Pages root
$out = $this->_getobj(1)."\n";
$out .= '<< /Type /Pages /Kids [';
foreach($this->page_obj_id as $page_obj) {
$out .= ' '.$page_obj.' 0 R';
}
$out .= ' ] /Count '.$nb.' >>';
$out .= "\n".'endobj';
$this->_out($out);
}
TCPDF::_putresourcedict ( )
protected

Output Resources Dictionary.

protected

Definition at line 10253 of file tcpdf.php.

References $out.

{
$out = $this->_getobj(2)."\n";
$out .= '<< /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]';
$out .= ' /Font <<';
foreach ($this->fontkeys as $fontkey) {
$font = $this->getFontBuffer($fontkey);
$out .= ' /F'.$font['i'].' '.$font['n'].' 0 R';
}
$out .= ' >>';
$out .= ' /XObject <<';
$out .= $this->_getxobjectdict();
$out .= ' >>';
// visibility
$out .= ' /Properties <</OC1 '.$this->n_ocg_print.' 0 R /OC2 '.$this->n_ocg_view.' 0 R>>';
// transparency
$out .= ' /ExtGState <<';
foreach ($this->extgstates as $k => $extgstate) {
if (isset($extgstate['name'])) {
$out .= ' /'.$extgstate['name'];
} else {
$out .= ' /GS'.$k;
}
$out .= ' '.$extgstate['n'].' 0 R';
}
$out .= ' >>';
// gradient patterns
if (isset($this->gradients) AND (count($this->gradients) > 0)) {
$out .= ' /Pattern <<';
foreach ($this->gradients as $id => $grad) {
$out .= ' /p'.$id.' '.$grad['pattern'].' 0 R';
}
$out .= ' >>';
}
// gradient shadings
if (isset($this->gradients) AND (count($this->gradients) > 0)) {
$out .= ' /Shading <<';
foreach ($this->gradients as $id => $grad) {
$out .= ' /Sh'.$id.' '.$grad['id'].' 0 R';
}
$out .= ' >>';
}
// spot colors
if (isset($this->spot_colors) AND (count($this->spot_colors) > 0)) {
$out .= ' /ColorSpace <<';
foreach ($this->spot_colors as $color) {
$out .= ' /CS'.$color['i'].' '.$color['n'].' 0 R';
}
$out .= ' >>';
}
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
}
TCPDF::_putresources ( )
protected

Output Resources.

protected

Definition at line 10311 of file tcpdf.php.

{
$this->_putextgstates();
$this->_putocg();
$this->_putfonts();
$this->_putimages();
$this->_putxobjects();
$this->_putspotcolors();
$this->_putshaders();
$this->_putresourcedict();
$this->_putbookmarks();
$this->_putannotsobjs();
$this->_putjavascript();
$this->_putencryption();
}
TCPDF::_putshaders ( )

Output gradient shaders.

Author
Nicola Asuni
Since
3.1.000 (2008-06-09) protected

Definition at line 16039 of file tcpdf.php.

References $out, and n.

{
$idt = count($this->gradients); //index for transparency gradients
foreach ($this->gradients as $id => $grad) {
if (($grad['type'] == 2) OR ($grad['type'] == 3)) {
$fc = $this->_newobj();
$out = '<<';
$out .= ' /FunctionType 3';
$out .= ' /Domain [0 1]';
$functions = '';
$bounds = '';
$encode = '';
$i = 1;
$num_cols = count($grad['colors']);
$lastcols = $num_cols - 1;
for ($i = 1; $i < $num_cols; ++$i) {
$functions .= ($fc + $i).' 0 R ';
if ($i < $lastcols) {
$bounds .= sprintf('%.3F ', $grad['colors'][$i]['offset']);
}
$encode .= '0 1 ';
}
$out .= ' /Functions ['.trim($functions).']';
$out .= ' /Bounds ['.trim($bounds).']';
$out .= ' /Encode ['.trim($encode).']';
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
for ($i = 1; $i < $num_cols; ++$i) {
$this->_newobj();
$out = '<<';
$out .= ' /FunctionType 2';
$out .= ' /Domain [0 1]';
$out .= ' /C0 ['.$grad['colors'][($i - 1)]['color'].']';
$out .= ' /C1 ['.$grad['colors'][$i]['color'].']';
$out .= ' /N '.$grad['colors'][$i]['exponent'];
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
}
// set transparency fuctions
if ($grad['transparency']) {
$ft = $this->_newobj();
$out = '<<';
$out .= ' /FunctionType 3';
$out .= ' /Domain [0 1]';
$functions = '';
$i = 1;
$num_cols = count($grad['colors']);
for ($i = 1; $i < $num_cols; ++$i) {
$functions .= ($ft + $i).' 0 R ';
}
$out .= ' /Functions ['.trim($functions).']';
$out .= ' /Bounds ['.trim($bounds).']';
$out .= ' /Encode ['.trim($encode).']';
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
for ($i = 1; $i < $num_cols; ++$i) {
$this->_newobj();
$out = '<<';
$out .= ' /FunctionType 2';
$out .= ' /Domain [0 1]';
$out .= ' /C0 ['.$grad['colors'][($i - 1)]['opacity'].']';
$out .= ' /C1 ['.$grad['colors'][$i]['opacity'].']';
$out .= ' /N '.$grad['colors'][$i]['exponent'];
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
}
}
}
// set shading object
$this->_newobj();
$out = '<< /ShadingType '.$grad['type'];
if (isset($grad['colspace'])) {
$out .= ' /ColorSpace /'.$grad['colspace'];
} else {
$out .= ' /ColorSpace /DeviceRGB';
}
if (isset($grad['background']) AND !empty($grad['background'])) {
$out .= ' /Background ['.$grad['background'].']';
}
if (isset($grad['antialias']) AND ($grad['antialias'] === true)) {
$out .= ' /AntiAlias true';
}
if ($grad['type'] == 2) {
$out .= ' '.sprintf('/Coords [%.3F %.3F %.3F %.3F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3]);
$out .= ' /Domain [0 1]';
$out .= ' /Function '.$fc.' 0 R';
$out .= ' /Extend [true true]';
$out .= ' >>';
} elseif ($grad['type'] == 3) {
//x0, y0, r0, x1, y1, r1
//at this this time radius of inner circle is 0
$out .= ' '.sprintf('/Coords [%.3F %.3F 0 %.3F %.3F %.3F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3], $grad['coords'][4]);
$out .= ' /Domain [0 1]';
$out .= ' /Function '.$fc.' 0 R';
$out .= ' /Extend [true true]';
$out .= ' >>';
} elseif ($grad['type'] == 6) {
$out .= ' /BitsPerCoordinate 16';
$out .= ' /BitsPerComponent 8';
$out .= ' /Decode[0 1 0 1 0 1 0 1 0 1]';
$out .= ' /BitsPerFlag 8';
$stream = $this->_getrawstream($grad['stream']);
$out .= ' /Length '.strlen($stream);
$out .= ' >>';
$out .= ' stream'."\n".$stream."\n".'endstream';
}
$out .= "\n".'endobj';
$this->_out($out);
if ($grad['transparency']) {
$shading_transparency = preg_replace('/\/ColorSpace \/[^\s]+/si', '/ColorSpace /DeviceGray', $out);
$shading_transparency = preg_replace('/\/Function [0-9]+ /si', '/Function '.$ft.' ', $shading_transparency);
}
$this->gradients[$id]['id'] = $this->n;
// set pattern object
$this->_newobj();
$out = '<< /Type /Pattern /PatternType 2';
$out .= ' /Shading '.$this->gradients[$id]['id'].' 0 R';
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
$this->gradients[$id]['pattern'] = $this->n;
// set shading and pattern for transparency mask
if ($grad['transparency']) {
// luminosity pattern
$idgs = $id + $idt;
$this->_newobj();
$this->_out($shading_transparency);
$this->gradients[$idgs]['id'] = $this->n;
$this->_newobj();
$out = '<< /Type /Pattern /PatternType 2';
$out .= ' /Shading '.$this->gradients[$idgs]['id'].' 0 R';
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
$this->gradients[$idgs]['pattern'] = $this->n;
// luminosity XObject
$oid = $this->_newobj();
$this->xobjects['LX'.$oid] = array('n' => $oid);
$filter = '';
$stream = 'q /a0 gs /Pattern cs /p'.$idgs.' scn 0 0 '.$this->wPt.' '.$this->hPt.' re f Q';
if ($this->compress) {
$filter = ' /Filter /FlateDecode';
$stream = gzcompress($stream);
}
$stream = $this->_getrawstream($stream);
$out = '<< /Type /XObject /Subtype /Form /FormType 1'.$filter;
$out .= ' /Length '.strlen($stream);
$rect = sprintf('%.2F %.2F', $this->wPt, $this->hPt);
$out .= ' /BBox [0 0 '.$rect.']';
$out .= ' /Group << /Type /Group /S /Transparency /CS /DeviceGray >>';
$out .= ' /Resources <<';
$out .= ' /ExtGState << /a0 << /ca 1 /CA 1 >> >>';
$out .= ' /Pattern << /p'.$idgs.' '.$this->gradients[$idgs]['pattern'].' 0 R >>';
$out .= ' >>';
$out .= ' >> ';
$out .= ' stream'."\n".$stream."\n".'endstream';
$out .= "\n".'endobj';
$this->_out($out);
// SMask
$this->_newobj();
$out = '<< /Type /Mask /S /Luminosity /G '.($this->n - 1).' 0 R >>'."\n".'endobj';
$this->_out($out);
// ExtGState
$this->_newobj();
$out = '<< /Type /ExtGState /SMask '.($this->n - 1).' 0 R /AIS false >>'."\n".'endobj';
$this->_out($out);
$this->extgstates[] = array('n' => $this->n, 'name' => 'TGS'.$id);
}
}
}
TCPDF::_putsignature ( )
protected

Add certification signature (DocMDP or UR3) You can set only one signature type protected.

Author
Nicola Asuni
Since
4.6.008 (2009-05-07)

Definition at line 15078 of file tcpdf.php.

References $out.

{
if ((!$this->sign) OR (!isset($this->signature_data['cert_type']))) {
return;
}
$out = $this->_getobj($this->sig_obj_id + 1)."\n";
$out .= '<< /Type /Sig';
$out .= ' /Filter /Adobe.PPKLite';
$out .= ' /SubFilter /adbe.pkcs7.detached';
$out .= ' '.$this->byterange_string;
$out .= ' /Contents<'.str_repeat('0', $this->signature_max_length).'>';
$out .= ' /Reference ['; // array of signature reference dictionaries
$out .= ' << /Type /SigRef';
if ($this->signature_data['cert_type'] > 0) {
$out .= ' /TransformMethod /DocMDP';
$out .= ' /TransformParams <<';
$out .= ' /Type /TransformParams';
$out .= ' /V /1.2';
$out .= ' /P '.$this->signature_data['cert_type'];
} else {
$out .= ' /TransformMethod /UR3';
$out .= ' /TransformParams <<';
$out .= ' /Type /TransformParams';
$out .= ' /V /2.2';
if (!$this->empty_string($this->ur['document'])) {
$out .= ' /Document['.$this->ur['document'].']';
}
if (!$this->empty_string($this->ur['form'])) {
$out .= ' /Form['.$this->ur['form'].']';
}
if (!$this->empty_string($this->ur['signature'])) {
$out .= ' /Signature['.$this->ur['signature'].']';
}
if (!$this->empty_string($this->ur['annots'])) {
$out .= ' /Annots['.$this->ur['annots'].']';
}
if (!$this->empty_string($this->ur['ef'])) {
$out .= ' /EF['.$this->ur['ef'].']';
}
if (!$this->empty_string($this->ur['formex'])) {
$out .= ' /FormEX['.$this->ur['formex'].']';
}
}
$out .= ' >>'; // close TransformParams
// optional digest data (values must be calculated and replaced later)
//$out .= ' /Data ********** 0 R';
//$out .= ' /DigestMethod/MD5';
//$out .= ' /DigestLocation[********** 34]';
//$out .= ' /DigestValue<********************************>';
$out .= ' >>';
$out .= ' ]'; // end of reference
if (isset($this->signature_data['info']['Name']) AND !$this->empty_string($this->signature_data['info']['Name'])) {
$out .= ' /Name '.$this->_textstring($this->signature_data['info']['Name']);
}
if (isset($this->signature_data['info']['Location']) AND !$this->empty_string($this->signature_data['info']['Location'])) {
$out .= ' /Location '.$this->_textstring($this->signature_data['info']['Location']);
}
if (isset($this->signature_data['info']['Reason']) AND !$this->empty_string($this->signature_data['info']['Reason'])) {
$out .= ' /Reason '.$this->_textstring($this->signature_data['info']['Reason']);
}
if (isset($this->signature_data['info']['ContactInfo']) AND !$this->empty_string($this->signature_data['info']['ContactInfo'])) {
$out .= ' /ContactInfo '.$this->_textstring($this->signature_data['info']['ContactInfo']);
}
$out .= ' /M '.$this->_datestring();
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
}
TCPDF::_putspotcolors ( )
protected

Output Spot Colors Resources.

protected

Since
4.0.024 (2008-09-12)

Definition at line 10221 of file tcpdf.php.

References $name, and $out.

{
foreach ($this->spot_colors as $name => $color) {
$this->_newobj();
$this->spot_colors[$name]['n'] = $this->n;
$out = '[/Separation /'.str_replace(' ', '#20', $name);
$out .= ' /DeviceCMYK <<';
$out .= ' /Range [0 1 0 1 0 1 0 1] /C0 [0 0 0 0]';
$out .= ' '.sprintf('/C1 [%.4F %.4F %.4F %.4F] ', $color['c']/100, $color['m']/100, $color['y']/100, $color['k']/100);
$out .= ' /FunctionType 2 /Domain [0 1] /N 1>>]';
$out .= "\n".'endobj';
$this->_out($out);
}
}
TCPDF::_putstream (   $s,
  $n = 0 
)
protected

Output a stream (DEPRECATED).

Parameters
string$sstring to output.
int$nobject reference for encryption mode protected
Deprecated:

Definition at line 10897 of file tcpdf.php.

{
$this->_out($this->_getstream($s, $n));
}
TCPDF::_puttruetypeunicode (   $font)
protected

Adds unicode fonts.


Based on PDF Reference 1.3 (section 5)

Parameters
array$fontfont data protected
Author
Nicola Asuni
Since
1.52.0.TC005 (2005-01-05)

Definition at line 9653 of file tcpdf.php.

References $cidinfo, $out, and n.

{
$fontname = '';
if ($font['subset']) {
// change name for font subsetting
$subtag = sprintf('%06u', $font['i']);
$subtag = strtr($subtag, '0123456789', 'ABCDEFGHIJ');
$fontname .= $subtag.'+';
}
$fontname .= $font['name'];
// Type0 Font
// A composite font composed of other fonts, organized hierarchically
$out = $this->_getobj($this->font_obj_ids[$font['fontkey']])."\n";
$out .= '<< /Type /Font';
$out .= ' /Subtype /Type0';
$out .= ' /BaseFont /'.$fontname;
$out .= ' /Name /F'.$font['i'];
$out .= ' /Encoding /'.$font['enc'];
$out .= ' /ToUnicode '.($this->n + 1).' 0 R';
$out .= ' /DescendantFonts ['.($this->n + 2).' 0 R]';
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
// ToUnicode map for Identity-H
$stream = "/CIDInit /ProcSet findresource begin\n";
$stream .= "12 dict begin\n";
$stream .= "begincmap\n";
$stream .= "/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def\n";
$stream .= "/CMapName /Adobe-Identity-UCS def\n";
$stream .= "/CMapType 2 def\n";
$stream .= "/WMode 0 def\n";
$stream .= "1 begincodespacerange\n";
$stream .= "<0000> <FFFF>\n";
$stream .= "endcodespacerange\n";
$stream .= "100 beginbfrange\n";
$stream .= "<0000> <00ff> <0000>\n";
$stream .= "<0100> <01ff> <0100>\n";
$stream .= "<0200> <02ff> <0200>\n";
$stream .= "<0300> <03ff> <0300>\n";
$stream .= "<0400> <04ff> <0400>\n";
$stream .= "<0500> <05ff> <0500>\n";
$stream .= "<0600> <06ff> <0600>\n";
$stream .= "<0700> <07ff> <0700>\n";
$stream .= "<0800> <08ff> <0800>\n";
$stream .= "<0900> <09ff> <0900>\n";
$stream .= "<0a00> <0aff> <0a00>\n";
$stream .= "<0b00> <0bff> <0b00>\n";
$stream .= "<0c00> <0cff> <0c00>\n";
$stream .= "<0d00> <0dff> <0d00>\n";
$stream .= "<0e00> <0eff> <0e00>\n";
$stream .= "<0f00> <0fff> <0f00>\n";
$stream .= "<1000> <10ff> <1000>\n";
$stream .= "<1100> <11ff> <1100>\n";
$stream .= "<1200> <12ff> <1200>\n";
$stream .= "<1300> <13ff> <1300>\n";
$stream .= "<1400> <14ff> <1400>\n";
$stream .= "<1500> <15ff> <1500>\n";
$stream .= "<1600> <16ff> <1600>\n";
$stream .= "<1700> <17ff> <1700>\n";
$stream .= "<1800> <18ff> <1800>\n";
$stream .= "<1900> <19ff> <1900>\n";
$stream .= "<1a00> <1aff> <1a00>\n";
$stream .= "<1b00> <1bff> <1b00>\n";
$stream .= "<1c00> <1cff> <1c00>\n";
$stream .= "<1d00> <1dff> <1d00>\n";
$stream .= "<1e00> <1eff> <1e00>\n";
$stream .= "<1f00> <1fff> <1f00>\n";
$stream .= "<2000> <20ff> <2000>\n";
$stream .= "<2100> <21ff> <2100>\n";
$stream .= "<2200> <22ff> <2200>\n";
$stream .= "<2300> <23ff> <2300>\n";
$stream .= "<2400> <24ff> <2400>\n";
$stream .= "<2500> <25ff> <2500>\n";
$stream .= "<2600> <26ff> <2600>\n";
$stream .= "<2700> <27ff> <2700>\n";
$stream .= "<2800> <28ff> <2800>\n";
$stream .= "<2900> <29ff> <2900>\n";
$stream .= "<2a00> <2aff> <2a00>\n";
$stream .= "<2b00> <2bff> <2b00>\n";
$stream .= "<2c00> <2cff> <2c00>\n";
$stream .= "<2d00> <2dff> <2d00>\n";
$stream .= "<2e00> <2eff> <2e00>\n";
$stream .= "<2f00> <2fff> <2f00>\n";
$stream .= "<3000> <30ff> <3000>\n";
$stream .= "<3100> <31ff> <3100>\n";
$stream .= "<3200> <32ff> <3200>\n";
$stream .= "<3300> <33ff> <3300>\n";
$stream .= "<3400> <34ff> <3400>\n";
$stream .= "<3500> <35ff> <3500>\n";
$stream .= "<3600> <36ff> <3600>\n";
$stream .= "<3700> <37ff> <3700>\n";
$stream .= "<3800> <38ff> <3800>\n";
$stream .= "<3900> <39ff> <3900>\n";
$stream .= "<3a00> <3aff> <3a00>\n";
$stream .= "<3b00> <3bff> <3b00>\n";
$stream .= "<3c00> <3cff> <3c00>\n";
$stream .= "<3d00> <3dff> <3d00>\n";
$stream .= "<3e00> <3eff> <3e00>\n";
$stream .= "<3f00> <3fff> <3f00>\n";
$stream .= "<4000> <40ff> <4000>\n";
$stream .= "<4100> <41ff> <4100>\n";
$stream .= "<4200> <42ff> <4200>\n";
$stream .= "<4300> <43ff> <4300>\n";
$stream .= "<4400> <44ff> <4400>\n";
$stream .= "<4500> <45ff> <4500>\n";
$stream .= "<4600> <46ff> <4600>\n";
$stream .= "<4700> <47ff> <4700>\n";
$stream .= "<4800> <48ff> <4800>\n";
$stream .= "<4900> <49ff> <4900>\n";
$stream .= "<4a00> <4aff> <4a00>\n";
$stream .= "<4b00> <4bff> <4b00>\n";
$stream .= "<4c00> <4cff> <4c00>\n";
$stream .= "<4d00> <4dff> <4d00>\n";
$stream .= "<4e00> <4eff> <4e00>\n";
$stream .= "<4f00> <4fff> <4f00>\n";
$stream .= "<5000> <50ff> <5000>\n";
$stream .= "<5100> <51ff> <5100>\n";
$stream .= "<5200> <52ff> <5200>\n";
$stream .= "<5300> <53ff> <5300>\n";
$stream .= "<5400> <54ff> <5400>\n";
$stream .= "<5500> <55ff> <5500>\n";
$stream .= "<5600> <56ff> <5600>\n";
$stream .= "<5700> <57ff> <5700>\n";
$stream .= "<5800> <58ff> <5800>\n";
$stream .= "<5900> <59ff> <5900>\n";
$stream .= "<5a00> <5aff> <5a00>\n";
$stream .= "<5b00> <5bff> <5b00>\n";
$stream .= "<5c00> <5cff> <5c00>\n";
$stream .= "<5d00> <5dff> <5d00>\n";
$stream .= "<5e00> <5eff> <5e00>\n";
$stream .= "<5f00> <5fff> <5f00>\n";
$stream .= "<6000> <60ff> <6000>\n";
$stream .= "<6100> <61ff> <6100>\n";
$stream .= "<6200> <62ff> <6200>\n";
$stream .= "<6300> <63ff> <6300>\n";
$stream .= "endbfrange\n";
$stream .= "100 beginbfrange\n";
$stream .= "<6400> <64ff> <6400>\n";
$stream .= "<6500> <65ff> <6500>\n";
$stream .= "<6600> <66ff> <6600>\n";
$stream .= "<6700> <67ff> <6700>\n";
$stream .= "<6800> <68ff> <6800>\n";
$stream .= "<6900> <69ff> <6900>\n";
$stream .= "<6a00> <6aff> <6a00>\n";
$stream .= "<6b00> <6bff> <6b00>\n";
$stream .= "<6c00> <6cff> <6c00>\n";
$stream .= "<6d00> <6dff> <6d00>\n";
$stream .= "<6e00> <6eff> <6e00>\n";
$stream .= "<6f00> <6fff> <6f00>\n";
$stream .= "<7000> <70ff> <7000>\n";
$stream .= "<7100> <71ff> <7100>\n";
$stream .= "<7200> <72ff> <7200>\n";
$stream .= "<7300> <73ff> <7300>\n";
$stream .= "<7400> <74ff> <7400>\n";
$stream .= "<7500> <75ff> <7500>\n";
$stream .= "<7600> <76ff> <7600>\n";
$stream .= "<7700> <77ff> <7700>\n";
$stream .= "<7800> <78ff> <7800>\n";
$stream .= "<7900> <79ff> <7900>\n";
$stream .= "<7a00> <7aff> <7a00>\n";
$stream .= "<7b00> <7bff> <7b00>\n";
$stream .= "<7c00> <7cff> <7c00>\n";
$stream .= "<7d00> <7dff> <7d00>\n";
$stream .= "<7e00> <7eff> <7e00>\n";
$stream .= "<7f00> <7fff> <7f00>\n";
$stream .= "<8000> <80ff> <8000>\n";
$stream .= "<8100> <81ff> <8100>\n";
$stream .= "<8200> <82ff> <8200>\n";
$stream .= "<8300> <83ff> <8300>\n";
$stream .= "<8400> <84ff> <8400>\n";
$stream .= "<8500> <85ff> <8500>\n";
$stream .= "<8600> <86ff> <8600>\n";
$stream .= "<8700> <87ff> <8700>\n";
$stream .= "<8800> <88ff> <8800>\n";
$stream .= "<8900> <89ff> <8900>\n";
$stream .= "<8a00> <8aff> <8a00>\n";
$stream .= "<8b00> <8bff> <8b00>\n";
$stream .= "<8c00> <8cff> <8c00>\n";
$stream .= "<8d00> <8dff> <8d00>\n";
$stream .= "<8e00> <8eff> <8e00>\n";
$stream .= "<8f00> <8fff> <8f00>\n";
$stream .= "<9000> <90ff> <9000>\n";
$stream .= "<9100> <91ff> <9100>\n";
$stream .= "<9200> <92ff> <9200>\n";
$stream .= "<9300> <93ff> <9300>\n";
$stream .= "<9400> <94ff> <9400>\n";
$stream .= "<9500> <95ff> <9500>\n";
$stream .= "<9600> <96ff> <9600>\n";
$stream .= "<9700> <97ff> <9700>\n";
$stream .= "<9800> <98ff> <9800>\n";
$stream .= "<9900> <99ff> <9900>\n";
$stream .= "<9a00> <9aff> <9a00>\n";
$stream .= "<9b00> <9bff> <9b00>\n";
$stream .= "<9c00> <9cff> <9c00>\n";
$stream .= "<9d00> <9dff> <9d00>\n";
$stream .= "<9e00> <9eff> <9e00>\n";
$stream .= "<9f00> <9fff> <9f00>\n";
$stream .= "<a000> <a0ff> <a000>\n";
$stream .= "<a100> <a1ff> <a100>\n";
$stream .= "<a200> <a2ff> <a200>\n";
$stream .= "<a300> <a3ff> <a300>\n";
$stream .= "<a400> <a4ff> <a400>\n";
$stream .= "<a500> <a5ff> <a500>\n";
$stream .= "<a600> <a6ff> <a600>\n";
$stream .= "<a700> <a7ff> <a700>\n";
$stream .= "<a800> <a8ff> <a800>\n";
$stream .= "<a900> <a9ff> <a900>\n";
$stream .= "<aa00> <aaff> <aa00>\n";
$stream .= "<ab00> <abff> <ab00>\n";
$stream .= "<ac00> <acff> <ac00>\n";
$stream .= "<ad00> <adff> <ad00>\n";
$stream .= "<ae00> <aeff> <ae00>\n";
$stream .= "<af00> <afff> <af00>\n";
$stream .= "<b000> <b0ff> <b000>\n";
$stream .= "<b100> <b1ff> <b100>\n";
$stream .= "<b200> <b2ff> <b200>\n";
$stream .= "<b300> <b3ff> <b300>\n";
$stream .= "<b400> <b4ff> <b400>\n";
$stream .= "<b500> <b5ff> <b500>\n";
$stream .= "<b600> <b6ff> <b600>\n";
$stream .= "<b700> <b7ff> <b700>\n";
$stream .= "<b800> <b8ff> <b800>\n";
$stream .= "<b900> <b9ff> <b900>\n";
$stream .= "<ba00> <baff> <ba00>\n";
$stream .= "<bb00> <bbff> <bb00>\n";
$stream .= "<bc00> <bcff> <bc00>\n";
$stream .= "<bd00> <bdff> <bd00>\n";
$stream .= "<be00> <beff> <be00>\n";
$stream .= "<bf00> <bfff> <bf00>\n";
$stream .= "<c000> <c0ff> <c000>\n";
$stream .= "<c100> <c1ff> <c100>\n";
$stream .= "<c200> <c2ff> <c200>\n";
$stream .= "<c300> <c3ff> <c300>\n";
$stream .= "<c400> <c4ff> <c400>\n";
$stream .= "<c500> <c5ff> <c500>\n";
$stream .= "<c600> <c6ff> <c600>\n";
$stream .= "<c700> <c7ff> <c700>\n";
$stream .= "endbfrange\n";
$stream .= "56 beginbfrange\n";
$stream .= "<c800> <c8ff> <c800>\n";
$stream .= "<c900> <c9ff> <c900>\n";
$stream .= "<ca00> <caff> <ca00>\n";
$stream .= "<cb00> <cbff> <cb00>\n";
$stream .= "<cc00> <ccff> <cc00>\n";
$stream .= "<cd00> <cdff> <cd00>\n";
$stream .= "<ce00> <ceff> <ce00>\n";
$stream .= "<cf00> <cfff> <cf00>\n";
$stream .= "<d000> <d0ff> <d000>\n";
$stream .= "<d100> <d1ff> <d100>\n";
$stream .= "<d200> <d2ff> <d200>\n";
$stream .= "<d300> <d3ff> <d300>\n";
$stream .= "<d400> <d4ff> <d400>\n";
$stream .= "<d500> <d5ff> <d500>\n";
$stream .= "<d600> <d6ff> <d600>\n";
$stream .= "<d700> <d7ff> <d700>\n";
$stream .= "<d800> <d8ff> <d800>\n";
$stream .= "<d900> <d9ff> <d900>\n";
$stream .= "<da00> <daff> <da00>\n";
$stream .= "<db00> <dbff> <db00>\n";
$stream .= "<dc00> <dcff> <dc00>\n";
$stream .= "<dd00> <ddff> <dd00>\n";
$stream .= "<de00> <deff> <de00>\n";
$stream .= "<df00> <dfff> <df00>\n";
$stream .= "<e000> <e0ff> <e000>\n";
$stream .= "<e100> <e1ff> <e100>\n";
$stream .= "<e200> <e2ff> <e200>\n";
$stream .= "<e300> <e3ff> <e300>\n";
$stream .= "<e400> <e4ff> <e400>\n";
$stream .= "<e500> <e5ff> <e500>\n";
$stream .= "<e600> <e6ff> <e600>\n";
$stream .= "<e700> <e7ff> <e700>\n";
$stream .= "<e800> <e8ff> <e800>\n";
$stream .= "<e900> <e9ff> <e900>\n";
$stream .= "<ea00> <eaff> <ea00>\n";
$stream .= "<eb00> <ebff> <eb00>\n";
$stream .= "<ec00> <ecff> <ec00>\n";
$stream .= "<ed00> <edff> <ed00>\n";
$stream .= "<ee00> <eeff> <ee00>\n";
$stream .= "<ef00> <efff> <ef00>\n";
$stream .= "<f000> <f0ff> <f000>\n";
$stream .= "<f100> <f1ff> <f100>\n";
$stream .= "<f200> <f2ff> <f200>\n";
$stream .= "<f300> <f3ff> <f300>\n";
$stream .= "<f400> <f4ff> <f400>\n";
$stream .= "<f500> <f5ff> <f500>\n";
$stream .= "<f600> <f6ff> <f600>\n";
$stream .= "<f700> <f7ff> <f700>\n";
$stream .= "<f800> <f8ff> <f800>\n";
$stream .= "<f900> <f9ff> <f900>\n";
$stream .= "<fa00> <faff> <fa00>\n";
$stream .= "<fb00> <fbff> <fb00>\n";
$stream .= "<fc00> <fcff> <fc00>\n";
$stream .= "<fd00> <fdff> <fd00>\n";
$stream .= "<fe00> <feff> <fe00>\n";
$stream .= "<ff00> <ffff> <ff00>\n";
$stream .= "endbfrange\n";
$stream .= "endcmap\n";
$stream .= "CMapName currentdict /CMap defineresource pop\n";
$stream .= "end\n";
$stream .= "end";
// ToUnicode Object
$this->_newobj();
$stream = ($this->compress) ? gzcompress($stream) : $stream;
$filter = ($this->compress) ? '/Filter /FlateDecode ' : '';
$stream = $this->_getrawstream($stream);
$this->_out('<<'.$filter.'/Length '.strlen($stream).'>> stream'."\n".$stream."\n".'endstream'."\n".'endobj');
// CIDFontType2
// A CIDFont whose glyph descriptions are based on TrueType font technology
$oid = $this->_newobj();
$out = '<< /Type /Font';
$out .= ' /Subtype /CIDFontType2';
$out .= ' /BaseFont /'.$fontname;
// A dictionary containing entries that define the character collection of the CIDFont.
$cidinfo = '/Registry '.$this->_datastring($font['cidinfo']['Registry'], $oid);
$cidinfo .= ' /Ordering '.$this->_datastring($font['cidinfo']['Ordering'], $oid);
$cidinfo .= ' /Supplement '.$font['cidinfo']['Supplement'];
$out .= ' /CIDSystemInfo << '.$cidinfo.' >>';
$out .= ' /FontDescriptor '.($this->n + 1).' 0 R';
$out .= ' /DW '.$font['dw']; // default width
$out .= "\n".$this->_putfontwidths($font, 0);
if (isset($font['ctg']) AND (!$this->empty_string($font['ctg']))) {
$out .= "\n".'/CIDToGIDMap '.($this->n + 2).' 0 R';
}
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
// Font descriptor
// A font descriptor describing the CIDFont default metrics other than its glyph widths
$this->_newobj();
$out = '<< /Type /FontDescriptor';
$out .= ' /FontName /'.$fontname;
foreach ($font['desc'] as $key => $value) {
if(is_float($value)) {
$value = sprintf('%.3F', $value);
}
$out .= ' /'.$key.' '.$value;
}
$fontdir = false;
if (!$this->empty_string($font['file'])) {
// A stream containing a TrueType font
$out .= ' /FontFile2 '.$this->FontFiles[$font['file']]['n'].' 0 R';
$fontdir = $this->FontFiles[$font['file']]['fontdir'];
}
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
if (isset($font['ctg']) AND (!$this->empty_string($font['ctg']))) {
$this->_newobj();
// Embed CIDToGIDMap
// A specification of the mapping from CIDs to glyph indices
// search and get CTG font file to embedd
$ctgfile = strtolower($font['ctg']);
// search and get ctg font file to embedd
$fontfile = '';
// search files on various directories
if (($fontdir !== false) AND file_exists($fontdir.$ctgfile)) {
$fontfile = $fontdir.$ctgfile;
} elseif (file_exists($this->_getfontpath().$ctgfile)) {
$fontfile = $this->_getfontpath().$ctgfile;
} elseif (file_exists($ctgfile)) {
$fontfile = $ctgfile;
}
if ($this->empty_string($fontfile)) {
$this->Error('Font file not found: '.$ctgfile);
}
$stream = $this->_getrawstream(file_get_contents($fontfile));
$out = '<< /Length '.strlen($stream).'';
if (substr($fontfile, -2) == '.z') { // check file extension
// Decompresses data encoded using the public-domain
// zlib/deflate compression method, reproducing the
// original text or binary data
$out .= ' /Filter /FlateDecode';
}
$out .= ' >>';
$out .= ' stream'."\n".$stream."\n".'endstream';
$out .= "\n".'endobj';
$this->_out($out);
}
}
TCPDF::_putviewerpreferences ( )
protected

Output viewer preferences.

Returns
string for viewer preferences
Author
Nicola asuni
Since
3.1.000 (2008-06-09) protected

Definition at line 10476 of file tcpdf.php.

References $out.

{
$out = '/ViewerPreferences <<';
if ($this->rtl) {
$out .= ' /Direction /R2L';
} else {
$out .= ' /Direction /L2R';
}
if (isset($this->viewer_preferences['HideToolbar']) AND ($this->viewer_preferences['HideToolbar'])) {
$out .= ' /HideToolbar true';
}
if (isset($this->viewer_preferences['HideMenubar']) AND ($this->viewer_preferences['HideMenubar'])) {
$out .= ' /HideMenubar true';
}
if (isset($this->viewer_preferences['HideWindowUI']) AND ($this->viewer_preferences['HideWindowUI'])) {
$out .= ' /HideWindowUI true';
}
if (isset($this->viewer_preferences['FitWindow']) AND ($this->viewer_preferences['FitWindow'])) {
$out .= ' /FitWindow true';
}
if (isset($this->viewer_preferences['CenterWindow']) AND ($this->viewer_preferences['CenterWindow'])) {
$out .= ' /CenterWindow true';
}
if (isset($this->viewer_preferences['DisplayDocTitle']) AND ($this->viewer_preferences['DisplayDocTitle'])) {
$out .= ' /DisplayDocTitle true';
}
if (isset($this->viewer_preferences['NonFullScreenPageMode'])) {
$out .= ' /NonFullScreenPageMode /'.$this->viewer_preferences['NonFullScreenPageMode'];
}
if (isset($this->viewer_preferences['ViewArea'])) {
$out .= ' /ViewArea /'.$this->viewer_preferences['ViewArea'];
}
if (isset($this->viewer_preferences['ViewClip'])) {
$out .= ' /ViewClip /'.$this->viewer_preferences['ViewClip'];
}
if (isset($this->viewer_preferences['PrintArea'])) {
$out .= ' /PrintArea /'.$this->viewer_preferences['PrintArea'];
}
if (isset($this->viewer_preferences['PrintClip'])) {
$out .= ' /PrintClip /'.$this->viewer_preferences['PrintClip'];
}
if (isset($this->viewer_preferences['PrintScaling'])) {
$out .= ' /PrintScaling /'.$this->viewer_preferences['PrintScaling'];
}
if (isset($this->viewer_preferences['Duplex']) AND (!$this->empty_string($this->viewer_preferences['Duplex']))) {
$out .= ' /Duplex /'.$this->viewer_preferences['Duplex'];
}
if (isset($this->viewer_preferences['PickTrayByPDFSize'])) {
if ($this->viewer_preferences['PickTrayByPDFSize']) {
$out .= ' /PickTrayByPDFSize true';
} else {
$out .= ' /PickTrayByPDFSize false';
}
}
if (isset($this->viewer_preferences['PrintPageRange'])) {
$PrintPageRangeNum = '';
foreach ($this->viewer_preferences['PrintPageRange'] as $k => $v) {
$PrintPageRangeNum .= ' '.($v - 1).'';
}
$out .= ' /PrintPageRange ['.substr($PrintPageRangeNum,1).']';
}
if (isset($this->viewer_preferences['NumCopies'])) {
$out .= ' /NumCopies '.intval($this->viewer_preferences['NumCopies']);
}
$out .= ' >>';
return $out;
}
TCPDF::_putxobjects ( )
protected

Output Form XObjects Templates.

Author
Nicola Asuni
Since
5.8.017 (2010-08-24) protected
See Also
startTemplate(), endTemplate(), printTemplate()

Definition at line 10169 of file tcpdf.php.

References $data, and $out.

{
foreach ($this->xobjects as $key => $data) {
if (isset($data['outdata'])) {
$stream = trim($data['outdata']);
$out = $this->_getobj($data['n'])."\n";
$out .= '<<';
$out .= ' /Type /XObject';
$out .= ' /Subtype /Form';
$out .= ' /FormType 1';
if ($this->compress) {
$stream = gzcompress($stream);
$out .= ' /Filter /FlateDecode';
}
$out .= sprintf(' /BBox [%.2F %.2F %.2F %.2F]', ($data['x'] * $this->k), (-$data['y'] * $this->k), (($data['w'] + $data['x']) * $this->k), (($data['h'] - $data['y']) * $this->k));
$out .= ' /Matrix [1 0 0 1 0 0]';
$out .= ' /Resources <<';
$out .= ' /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]';
// fonts
if (!empty($data['fonts'])) {
$out .= ' /Font <<';
foreach ($data['fonts'] as $fontkey => $fontid) {
$out .= ' /F'.$fontid.' '.$this->font_obj_ids[$fontkey].' 0 R';
}
$out .= ' >>';
}
// images or nested xobjects
if (!empty($data['images']) OR !empty($data['xobjects'])) {
$out .= ' /XObject <<';
foreach ($data['images'] as $imgid) {
$out .= ' /I'.$imgid.' '.$this->xobjects['I'.$imgid]['n'].' 0 R';
}
foreach ($data['xobjects'] as $sub_id => $sub_objid) {
$out .= ' /'.$sub_id.' '.$sub_objid['n'].' 0 R';
}
$out .= ' >>';
}
$out .= ' >>';
$stream = $this->_getrawstream($stream);
$out .= ' /Length '.strlen($stream);
$out .= ' >>';
$out .= ' stream'."\n".$stream."\n".'endstream';
$out .= "\n".'endobj';
$this->_out($out);
}
}
}
TCPDF::_RC4 (   $key,
  $text 
)
protected

Returns the input text encrypted using RC4 algorithm and the specified key.

RC4 is the standard encryption algorithm used in PDF format

Parameters
string$keyencryption key
String$textinput text to be encrypted
Returns
String encrypted text protected
Since
2.0.000 (2008-01-02)
Author
Klemen Vodopivec, Nicola Asuni

Definition at line 11637 of file tcpdf.php.

References $out, and $t.

{
if (function_exists('mcrypt_decrypt') AND ($out = @mcrypt_decrypt(MCRYPT_ARCFOUR, $key, $text, MCRYPT_MODE_STREAM, ''))) {
// try to use mcrypt function if exist
return $out;
}
if ($this->last_enc_key != $key) {
$k = str_repeat($key, ((256 / strlen($key)) + 1));
$rc4 = range(0, 255);
$j = 0;
for ($i = 0; $i < 256; ++$i) {
$t = $rc4[$i];
$j = ($j + $t + ord($k{$i})) % 256;
$rc4[$i] = $rc4[$j];
$rc4[$j] = $t;
}
$this->last_enc_key = $key;
$this->last_enc_key_c = $rc4;
} else {
}
$len = strlen($text);
$a = 0;
$b = 0;
$out = '';
for ($i = 0; $i < $len; ++$i) {
$a = ($a + 1) % 256;
$t = $rc4[$a];
$b = ($b + $t) % 256;
$rc4[$a] = $rc4[$b];
$rc4[$b] = $t;
$k = $rc4[($rc4[$a] + $rc4[$b]) % 256];
$out .= chr(ord($text{$i}) ^ $k);
}
return $out;
}
TCPDF::_setGDImageTransparency (   $new_image,
  $image 
)
protected

Set the transparency for the given GD image.

Parameters
image$new_imageGD image object
image$imageGD image object. return GD image object. protected
Since
4.9.016 (2010-04-20)

Definition at line 7414 of file tcpdf.php.

Referenced by Image().

{
// transparency index
$tid = imagecolortransparent($image);
// default transparency color
$tcol = array('red' => 255, 'green' => 255, 'blue' => 255);
if ($tid >= 0) {
// get the colors for the transparency index
$tcol = imagecolorsforindex($image, $tid);
}
$tid = imagecolorallocate($new_image, $tcol['red'], $tcol['green'], $tcol['blue']);
imagefill($new_image, 0, 0, $tid);
imagecolortransparent($new_image, $tid);
return $new_image;
}

+ Here is the caller graph for this function:

TCPDF::_textstring (   $s,
  $n = 0 
)
protected

Format a text string for meta information.

Parameters
string$sstring to escape.
int$nobject ID
Returns
string escaped string. protected

Definition at line 10835 of file tcpdf.php.

{
if ($this->isunicode) {
//Convert string to UTF-16BE
$s = $this->UTF8ToUTF16BE($s, true);
}
return $this->_datastring($s, $n);
}
TCPDF::_toJPEG (   $image)
protected

Convert the loaded image to a JPEG and then return a structure for the PDF creator.

This function requires GD library and write access to the directory defined on K_PATH_CACHE constant.

Parameters
string$fileImage file name.
image$imageImage object. return image JPEG image object. protected

Definition at line 7377 of file tcpdf.php.

References _parsejpeg(), and K_PATH_CACHE.

Referenced by Image().

{
$tempname = tempnam(K_PATH_CACHE, 'jpg_');
imagejpeg($image, $tempname, $this->jpeg_quality);
imagedestroy($image);
$retvars = $this->_parsejpeg($tempname);
// tidy up by removing temporary image
unlink($tempname);
return $retvars;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::_toPNG (   $image)
protected

Convert the loaded image to a PNG and then return a structure for the PDF creator.

This function requires GD library and write access to the directory defined on K_PATH_CACHE constant.

Parameters
string$fileImage file name.
image$imageImage object. return image PNG image object. protected
Since
4.9.016 (2010-04-20)

Definition at line 7396 of file tcpdf.php.

References _parsepng(), and K_PATH_CACHE.

Referenced by Image().

{
$tempname = tempnam(K_PATH_CACHE, 'jpg_');
imagepng($image, $tempname);
imagedestroy($image);
$retvars = $this->_parsepng($tempname);
// tidy up by removing temporary image
unlink($tempname);
return $retvars;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::_UEvalue ( )
protected

Compute UE value (used for encryption)

Returns
string UE value protected
Since
5.9.006 (2010-10-19)
Author
Nicola Asuni

Definition at line 11745 of file tcpdf.php.

{
$hashkey = hash('sha256', $this->encryptdata['user_password'].$this->encryptdata['UKS'], true);
$iv = str_repeat("\x00", mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $hashkey, $this->encryptdata['key'], MCRYPT_MODE_CBC, $iv);
}
TCPDF::_Uvalue ( )
protected

Compute U value (used for encryption)

Returns
string U value protected
Since
2.0.000 (2008-01-02)
Author
Nicola Asuni

Definition at line 11712 of file tcpdf.php.

References $enc.

{
if ($this->encryptdata['mode'] == 0) { // RC4-40
return $this->_RC4($this->encryptdata['key'], $this->enc_padding);
} elseif ($this->encryptdata['mode'] < 3) { // RC4-128, AES-128
$tmp = $this->_md5_16($this->enc_padding.$this->encryptdata['fileid']);
$enc = $this->_RC4($this->encryptdata['key'], $tmp);
$len = strlen($tmp);
for ($i = 1; $i <= 19; ++$i) {
$ek = '';
for ($j = 0; $j < $len; ++$j) {
$ek .= chr(ord($this->encryptdata['key']{$j}) ^ $i);
}
$enc = $this->_RC4($ek, $enc);
}
$enc .= str_repeat("\x00", 16);
return substr($enc, 0, 32);
} elseif ($this->encryptdata['mode'] == 3) { // AES-256
$seed = $this->_md5_16($this->getRandomSeed());
// User Validation Salt
$this->encryptdata['UVS'] = substr($seed, 0, 8);
// User Key Salt
$this->encryptdata['UKS'] = substr($seed, 8, 16);
return hash('sha256', $this->encryptdata['user_password'].$this->encryptdata['UVS'], true).$this->encryptdata['UVS'].$this->encryptdata['UKS'];
}
}
TCPDF::AcceptPageBreak ( )

Whenever a page break condition is met, the method is called, and the break is issued or not depending on the returned value.

The default implementation returns a value according to the mode selected by SetAutoPageBreak().
This method is called automatically and should not be called directly by the application.

Returns
boolean public
Since
1.4
See Also
SetAutoPageBreak()

Definition at line 5181 of file tcpdf.php.

References $AutoPageBreak, AddPage(), and selectColumn().

Referenced by checkPageBreak(), and Write().

{
if ($this->num_columns > 1) {
// multi column mode
if($this->current_column < ($this->num_columns - 1)) {
// go to next column
$this->selectColumn($this->current_column + 1);
} else {
// add a new page
$this->AddPage();
// set first column
$this->selectColumn(0);
}
// avoid page breaking from checkPageBreak()
return false;
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::addExtGState (   $parms)
protected

Add transparency parameters to the current extgstate.

Parameters
array$paramsparameters
Returns
the number of extgstates protected
Since
3.0.000 (2008-03-27)

Definition at line 15456 of file tcpdf.php.

{
$n = count($this->extgstates) + 1;
// check if this ExtGState already exist
for ($i = 1; $i < $n; ++$i) {
if ($this->extgstates[$i]['parms'] == $parms) {
// return reference to existing ExtGState
return $i;
}
}
$this->extgstates[$n]['parms'] = $parms;
return $n;
}
TCPDF::AddFont (   $family,
  $style = '',
  $fontfile = '',
  $subset = 'default' 
)

Imports a TrueType, Type1, core, or CID0 font and makes it available.

It is necessary to generate a font definition file first (read /fonts/utils/README.TXT). The definition file (and the font file itself when embedding) must be present either in the current directory or in the one indicated by K_PATH_FONTS if the constant is defined. If it could not be found, the error "Could not include font definition file" is generated.

Parameters
string$familyFont family. The name can be chosen arbitrarily. If it is a standard family name, it will override the corresponding font.
string$styleFont style. Possible values are (case insensitive):
  • empty string: regular (default)
  • B: bold
  • I: italic
  • BI or IB: bold italic
string$fontfileThe font definition file. By default, the name is built from the family and style, in lower case with no spaces.
Returns
array containing the font data, or false in case of error.
Parameters
mixed$subsetif true embedd only a subset of the font (stores only the information related to the used characters); if false embedd full font; if 'default' uses the default value set using setFontSubsetting(). This option is valid only for TrueTypeUnicode fonts. If you want to enable users to change the document, set this parameter to false. If you subset the font, the person who receives your PDF would need to have your same font in order to make changes to your PDF. The file size of the PDF would also be smaller because you are embedding only part of a font. public
Since
1.5
See Also
SetFont(), setFontSubsetting()

Definition at line 4622 of file tcpdf.php.

References $cidinfo, $ctg, $cw, $d, $desc, $diff, $dw, $enc, $file, $font_subsetting, $FontFamily, $name, $numfonts, $originalsize, $type, $up, $ut, $xobjid, _getfontpath(), empty_string(), Error(), getFontBuffer(), setFontBuffer(), and setFontSubBuffer().

Referenced by getFontAscent(), getFontDescent(), and SetFont().

{
if ($subset === 'default') {
}
if ($this->empty_string($family)) {
if (!$this->empty_string($this->FontFamily)) {
$family = $this->FontFamily;
} else {
$this->Error('Empty font family');
}
}
// move embedded styles on $style
if (substr($family, -1) == 'I') {
$style .= 'I';
$family = substr($family, 0, -1);
}
if (substr($family, -1) == 'B') {
$style .= 'B';
$family = substr($family, 0, -1);
}
// normalize family name
$family = strtolower($family);
if ((!$this->isunicode) AND ($family == 'arial')) {
$family = 'helvetica';
}
if (($family == 'symbol') OR ($family == 'zapfdingbats')) {
$style = '';
}
$tempstyle = strtoupper($style);
$style = '';
// underline
if (strpos($tempstyle, 'U') !== false) {
$this->underline = true;
} else {
$this->underline = false;
}
// line-through (deleted)
if (strpos($tempstyle, 'D') !== false) {
$this->linethrough = true;
} else {
$this->linethrough = false;
}
// overline
if (strpos($tempstyle, 'O') !== false) {
$this->overline = true;
} else {
$this->overline = false;
}
// bold
if (strpos($tempstyle, 'B') !== false) {
$style .= 'B';
}
// oblique
if (strpos($tempstyle, 'I') !== false) {
$style .= 'I';
}
$bistyle = $style;
$fontkey = $family.$style;
$font_style = $style.($this->underline ? 'U' : '').($this->linethrough ? 'D' : '').($this->overline ? 'O' : '');
$fontdata = array('fontkey' => $fontkey, 'family' => $family, 'style' => $font_style);
// check if the font has been already added
$fb = $this->getFontBuffer($fontkey);
if ($fb !== false) {
if ($this->inxobj) {
// we are inside an XObject template
$this->xobjects[$this->xobjid]['fonts'][$fontkey] = $fb['i'];
}
return $fontdata;
}
if (isset($type)) {
unset($type);
}
if (isset($cw)) {
unset($cw);
}
// get specified font directory (if any)
$fontdir = false;
if (!$this->empty_string($fontfile)) {
$fontdir = dirname($fontfile);
if ($this->empty_string($fontdir) OR ($fontdir == '.')) {
$fontdir = '';
} else {
$fontdir .= '/';
}
}
// search and include font file
if ($this->empty_string($fontfile) OR (!file_exists($fontfile))) {
// build a standard filenames for specified font
$fontfile1 = str_replace(' ', '', $family).strtolower($style).'.php';
$fontfile2 = str_replace(' ', '', $family).'.php';
// search files on various directories
if (($fontdir !== false) AND file_exists($fontdir.$fontfile1)) {
$fontfile = $fontdir.$fontfile1;
} elseif (file_exists($this->_getfontpath().$fontfile1)) {
$fontfile = $this->_getfontpath().$fontfile1;
} elseif (file_exists($fontfile1)) {
$fontfile = $fontfile1;
} elseif (($fontdir !== false) AND file_exists($fontdir.$fontfile2)) {
$fontfile = $fontdir.$fontfile2;
} elseif (file_exists($this->_getfontpath().$fontfile2)) {
$fontfile = $this->_getfontpath().$fontfile2;
} else {
$fontfile = $fontfile2;
}
}
// include font file
if (file_exists($fontfile)) {
include($fontfile);
} else {
$this->Error('Could not include font definition file: '.$family.'');
}
// check font parameters
if ((!isset($type)) OR (!isset($cw))) {
$this->Error('The font definition file has a bad format: '.$fontfile.'');
}
// SET default parameters
if (!isset($file) OR $this->empty_string($file)) {
$file = '';
}
if (!isset($enc) OR $this->empty_string($enc)) {
$enc = '';
}
if (!isset($cidinfo) OR $this->empty_string($cidinfo)) {
$cidinfo = array('Registry'=>'Adobe','Ordering'=>'Identity','Supplement'=>0);
$cidinfo['uni2cid'] = array();
}
if (!isset($ctg) OR $this->empty_string($ctg)) {
$ctg = '';
}
if (!isset($desc) OR $this->empty_string($desc)) {
$desc = array();
}
if (!isset($up) OR $this->empty_string($up)) {
$up = -100;
}
if (!isset($ut) OR $this->empty_string($ut)) {
$ut = 50;
}
if (!isset($cw) OR $this->empty_string($cw)) {
$cw = array();
}
if (!isset($dw) OR $this->empty_string($dw)) {
// set default width
if (isset($desc['MissingWidth']) AND ($desc['MissingWidth'] > 0)) {
$dw = $desc['MissingWidth'];
} elseif (isset($cw[32])) {
$dw = $cw[32];
} else {
$dw = 600;
}
}
if ($type == 'cidfont0') {
// register CID font (all styles at once)
$styles = array('' => '', 'B' => ',Bold', 'I' => ',Italic', 'BI' => ',BoldItalic');
$sname = $name.$styles[$bistyle];
// artificial bold
if (strpos($bistyle, 'B') !== false) {
if (isset($desc['StemV'])) {
$desc['StemV'] *= 2;
} else {
$desc['StemV'] = 120;
}
}
// artificial italic
if (strpos($bistyle, 'I') !== false) {
if (isset($desc['ItalicAngle'])) {
$desc['ItalicAngle'] -= 11;
} else {
$desc['ItalicAngle'] = -11;
}
}
} elseif ($type == 'core') {
$name = $this->CoreFonts[$fontkey];
$subset = false;
} elseif (($type == 'TrueType') OR ($type == 'Type1')) {
$subset = false;
} elseif ($type == 'TrueTypeUnicode') {
$enc = 'Identity-H';
} else {
$this->Error('Unknow font type: '.$type.'');
}
// initialize subsetchars to contain default ASCII values (0-255)
$subsetchars = array_fill(0, 256, true);
$this->setFontBuffer($fontkey, array('fontkey' => $fontkey, 'i' => $this->numfonts, 'type' => $type, 'name' => $name, 'desc' => $desc, 'up' => $up, 'ut' => $ut, 'cw' => $cw, 'dw' => $dw, 'enc' => $enc, 'cidinfo' => $cidinfo, 'file' => $file, 'ctg' => $ctg, 'subset' => $subset, 'subsetchars' => $subsetchars));
if ($this->inxobj) {
// we are inside an XObject template
$this->xobjects[$this->xobjid]['fonts'][$fontkey] = $this->numfonts;
}
if (isset($diff) AND (!empty($diff))) {
//Search existing encodings
$d = 0;
$nb = count($this->diffs);
for ($i=1; $i <= $nb; ++$i) {
if ($this->diffs[$i] == $diff) {
$d = $i;
break;
}
}
if ($d == 0) {
$d = $nb + 1;
$this->diffs[$d] = $diff;
}
$this->setFontSubBuffer($fontkey, 'diff', $d);
}
if (!$this->empty_string($file)) {
if (!isset($this->FontFiles[$file])) {
if ((strcasecmp($type,'TrueType') == 0) OR (strcasecmp($type, 'TrueTypeUnicode') == 0)) {
$this->FontFiles[$file] = array('length1' => $originalsize, 'fontdir' => $fontdir, 'subset' => $subset, 'fontkeys' => array($fontkey));
} elseif ($type != 'core') {
$this->FontFiles[$file] = array('length1' => $size1, 'length2' => $size2, 'fontdir' => $fontdir, 'subset' => $subset, 'fontkeys' => array($fontkey));
}
} else {
// update fontkeys that are sharing this font file
$this->FontFiles[$file]['subset'] = ($this->FontFiles[$file]['subset'] AND $subset);
if (!in_array($fontkey, $this->FontFiles[$file]['fontkeys'])) {
$this->FontFiles[$file]['fontkeys'][] = $fontkey;
}
}
}
return $fontdata;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::addHtmlLink (   $url,
  $name,
  $fill = false,
  $firstline = false,
  $color = '',
  $style = -1,
  $firstblock = false 
)

Output anchor link.

Parameters
string$urllink URL or internal link (i.e.: <a href="#23,4.5">link to page 23 at 4.5 Y position</a>)
string$namelink name
boolean$fillIndicates if the cell background must be painted (true) or transparent (false).
boolean$firstlineif true prints only the first line and return the remaining string.
array$colorarray of RGB text color
string$stylefont style (U, D, B, I)
boolean$firstblockif true the string is the starting of a line.
Returns
the number of cells used or the remaining text if $firstline = true; public

Definition at line 11288 of file tcpdf.php.

References $name, and $ret.

{
if (!$this->empty_string($url) AND ($url{0} == '#')) {
// convert url to internal link
$lnkdata = explode(',', $url);
if (isset($lnkdata[0])) {
$page = intval(substr($lnkdata[0], 1));
if (empty($page) OR ($page <= 0)) {
}
if (isset($lnkdata[1]) AND (strlen($lnkdata[1]) > 0)) {
$lnky = floatval($lnkdata[1]);
} else {
$lnky = 0;
}
$url = $this->AddLink();
$this->SetLink($url, $lnky, $page);
}
}
// store current settings
$prevcolor = $this->fgcolor;
$prevstyle = $this->FontStyle;
if (empty($color)) {
$this->SetTextColorArray($this->htmlLinkColorArray);
} else {
$this->SetTextColorArray($color);
}
if ($style == -1) {
$this->SetFont('', $this->FontStyle.$this->htmlLinkFontStyle);
} else {
$this->SetFont('', $this->FontStyle.$style);
}
$ret = $this->Write($this->lasth, $name, $url, $fill, '', false, 0, $firstline, $firstblock, 0);
// restore settings
$this->SetFont('', $prevstyle);
$this->SetTextColorArray($prevcolor);
return $ret;
}
TCPDF::addHTMLTOC (   $page = '',
  $toc_name = 'TOC',
  $templates = array(),
  $correct_align = true 
)

Output a Table Of Content Index (TOC) using HTML templates.

Before calling this method you have to open the page using the addTOCPage() method. After calling this method you have to call endTOCPage() to close the TOC page.

Parameters
int$pagepage number where this TOC should be inserted (leave empty for current page).
string$toc_namename to use for TOC bookmark.
array$templatesarray of html templates. Use: #TOC_DESCRIPTION# for bookmark title, #TOC_PAGE_NUMBER# for page number.
boolean$correct_alignif true correct the number alignment (numbers must be in monospaced font like courier and right aligned on LTR, or left aligned on RTL) public
Author
Nicola Asuni
Since
5.0.001 (2010-05-06)
See Also
addTOCPage(), endTOCPage(), addTOC()

Definition at line 22820 of file tcpdf.php.

References $row.

{
$prev_htmlLinkColorArray = $this->htmlLinkColorArray;
$prev_htmlLinkFontStyle = $this->htmlLinkFontStyle;
// set new style for link
$this->htmlLinkColorArray = array();
$this->htmlLinkFontStyle = '';
$page_first = $this->getPage();
// get the font type used for numbers in each template
$current_font = $this->FontFamily;
foreach ($templates as $level => $html) {
$dom = $this->getHtmlDomArray($html);
foreach ($dom as $key => $value) {
if ($value['value'] == '#TOC_PAGE_NUMBER#') {
$this->SetFont($dom[($key - 1)]['fontname']);
$templates['F'.$level] = $this->isUnicodeFont();
}
}
}
$this->SetFont($current_font);
foreach ($this->outlines as $key => $outline) {
// get HTML template
$row = $templates[$outline['l']];
if ($this->empty_string($page)) {
$pagenum = $outline['p'];
} else {
// placemark to be replaced with the correct number
$pagenum = '{#'.($outline['p']).'}';
if ($templates['F'.$outline['l']]) {
$pagenum = '{'.$pagenum.'}';
}
}
// replace templates with current values
$row = str_replace('#TOC_DESCRIPTION#', $outline['t'], $row);
$row = str_replace('#TOC_PAGE_NUMBER#', $pagenum, $row);
// add link to page
$row = '<a href="#'.$outline['p'].','.$outline['y'].'">'.$row.'</a>';
// write bookmark entry
$this->writeHTML($row, false, false, true, false, '');
}
// restore link styles
$this->htmlLinkColorArray = $prev_htmlLinkColorArray;
$this->htmlLinkFontStyle = $prev_htmlLinkFontStyle;
// move TOC page and replace numbers
$page_last = $this->getPage();
$numpages = $page_last - $page_first + 1;
if (!$this->empty_string($page)) {
for ($p = $page_first; $p <= $page_last; ++$p) {
// get page data
$temppage = $this->getPageBuffer($p);
for ($n = 1; $n <= $this->numpages; ++$n) {
// update page numbers
$k = '{#'.$n.'}';
$ku = '{'.$k.'}';
$alias_a = $this->_escape($k);
$alias_au = $this->_escape('{'.$k.'}');
if ($this->isunicode) {
$alias_b = $this->_escape($this->UTF8ToLatin1($k));
$alias_bu = $this->_escape($this->UTF8ToLatin1($ku));
$alias_c = $this->_escape($this->utf8StrRev($k, false, $this->tmprtl));
$alias_cu = $this->_escape($this->utf8StrRev($ku, false, $this->tmprtl));
}
if ($n >= $page) {
$np = $n + $numpages;
} else {
$np = $n;
}
$ns = $this->formatTOCPageNumber($np);
$nu = $ns;
if ($correct_align) {
$sdiff = strlen($k) - strlen($ns);
$sdiffu = strlen($ku) - strlen($ns);
$sfill = str_repeat(' ', $sdiff);
$sfillu = str_repeat(' ', $sdiffu);
if ($this->rtl) {
$ns = $ns.$sfill;
$nu = $nu.$sfillu;
} else {
$ns = $sfill.$ns;
$nu = $sfillu.$nu;
}
}
$nu = $this->UTF8ToUTF16BE($nu, false);
$temppage = str_replace($alias_au, $nu, $temppage);
if ($this->isunicode) {
$temppage = str_replace($alias_bu, $nu, $temppage);
$temppage = str_replace($alias_cu, $nu, $temppage);
$temppage = str_replace($alias_b, $ns, $temppage);
$temppage = str_replace($alias_c, $ns, $temppage);
}
$temppage = str_replace($alias_a, $ns, $temppage);
}
// save changes
$this->setPageBuffer($p, $temppage);
}
// move pages
$this->Bookmark($toc_name, 0, 0, $page_first);
for ($i = 0; $i < $numpages; ++$i) {
$this->movePage($page_last, $page);
}
}
}
TCPDF::addHTMLVertSpace (   $hbz = 0,
  $hb = 0,
  $cell = false,
  $firsttag = false,
  $lasttag = false 
)
protected

Add vertical spaces if needed.

Parameters
string$hbzDistance between current y and line bottom.
string$hbThe height of the break.
boolean$cellif true add the default left (or right if RTL) padding to each new line (default false).
boolean$firsttagset to true when the tag is the first.
boolean$lasttagset to true when the tag is the last. protected

Definition at line 21252 of file tcpdf.php.

{
if ($firsttag) {
$this->Ln(0, $cell);
$this->htmlvspace = 0;
return;
}
if ($lasttag) {
$this->Ln($hbz, $cell);
$this->htmlvspace = 0;
return;
}
if ($hb < $this->htmlvspace) {
$hd = 0;
} else {
$hd = $hb - $this->htmlvspace;
$this->htmlvspace = $hb;
}
$this->Ln(($hbz + $hd), $cell);
}
TCPDF::addJavascriptObject (   $script,
  $onload = false 
)

Adds a javascript object and return object ID.

Parameters
string$scriptJavascript code
boolean$onloadif true executes this object when opening the document
Returns
int internal object ID public
Author
Nicola Asuni
Since
4.8.000 (2009-09-07)

Definition at line 14040 of file tcpdf.php.

References n.

{
$this->js_objects[$this->n] = array('n' => $this->n, 'js' => $script, 'onload' => $onload);
return $this->n;
}
TCPDF::AddLink ( )

Creates a new internal link and returns its identifier.

An internal link is a clickable area which directs to another place within the document.
The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is defined with SetLink(). public

Since
1.5
See Also
Cell(), Write(), Image(), Link(), SetLink()

Definition at line 4975 of file tcpdf.php.

References $n.

{
//Create a new internal link
$n = count($this->links) + 1;
$this->links[$n] = array(0, 0);
return $n;
}
TCPDF::AddPage (   $orientation = '',
  $format = '',
  $keepmargins = false,
  $tocpage = false 
)

Adds a new page to the document.

If a page is already present, the Footer() method is called first to output the footer (if enabled). Then the page is added, the current position set to the top-left corner according to the left and top margins (or top-right if in RTL mode), and Header() is called to display the header (if enabled). The origin of the coordinate system is at the top-left corner (or top-right for RTL) and increasing ordinates go downwards.

Parameters
string$orientationpage orientation. Possible values are (case insensitive):
  • P or PORTRAIT (default)
  • L or LANDSCAPE
mixed$formatThe format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat().
boolean$keepmarginsif true overwrites the default page margins with the current margins
boolean$tocpageif true set the tocpage state to true (the added page will be used to display Table Of Content). public
Since
1.0
See Also
startPage(), endPage(), addTOCPage(), endTOCPage(), getPageSizeFromFormat(), setPageFormat()

Definition at line 3737 of file tcpdf.php.

References $lMargin, $rMargin, $tocpage, endPage(), and startPage().

Referenced by AcceptPageBreak(), addTOCPage(), checkPageBreak(), and Close().

{
if ($this->inxobj) {
// we are inside an XObject template
return;
}
if (!isset($this->original_lMargin) OR $keepmargins) {
$this->original_lMargin = $this->lMargin;
}
if (!isset($this->original_rMargin) OR $keepmargins) {
$this->original_rMargin = $this->rMargin;
}
// terminate previous page
$this->endPage();
// start new page
$this->startPage($orientation, $format, $tocpage);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::addPageRegion (   $region)

Add a single no-write region on selected page.

A no-write region is a portion of the page with a rectangular or trapezium shape that will not be covered when writing text or html code. A region is always aligned on the left or right side of the page ad is defined using a vertical segment. You can set multiple regions for the same page.

Parameters
array$regionarray of a single no-write region array: ('page' => page number or empy for current page, 'xt' => X top, 'yt' => Y top, 'xb' => X bottom, 'yb' => Y bottom, 'side' => page side 'L' = left or 'R' = right).
Author
Nicola Asuni public
Since
5.9.003 (2010-10-13)
See Also
setPageRegions(), getPageRegions()

Definition at line 23913 of file tcpdf.php.

{
if (!isset($region['page']) OR empty($region['page'])) {
$region['page'] = $this->page;
}
if (isset($region['xt']) AND isset($region['xb']) AND ($region['xt'] > 0) AND ($region['xb'] > 0)
AND isset($region['yt']) AND isset($region['yb']) AND ($region['yt'] >= 0) AND ($region['yt'] < $region['yb'])
AND isset($region['side']) AND (($region['side'] == 'L') OR ($region['side'] == 'R'))) {
$this->page_regions[] = $region;
}
}
TCPDF::AddSpotColor (   $name,
  $c,
  $m,
  $y,
  $k 
)

Defines a new spot color.

It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.

Parameters
int$cCyan color for CMYK. Value between 0 and 255
int$mMagenta color for CMYK. Value between 0 and 255
int$yYellow color for CMYK. Value between 0 and 255
int$kKey (Black) color for CMYK. Value between 0 and 255 public
Since
4.0.024 (2008-09-12)
See Also
SetDrawSpotColor(), SetFillSpotColor(), SetTextSpotColor()

Definition at line 4208 of file tcpdf.php.

References $k, $name, and $y.

{
if (!isset($this->spot_colors[$name])) {
$i = 1 + count($this->spot_colors);
$this->spot_colors[$name] = array('i' => $i, 'c' => $c, 'm' => $m, 'y' => $y, 'k' => $k);
}
}
TCPDF::addTOC (   $page = '',
  $numbersfont = '',
  $filler = '.',
  $toc_name = 'TOC' 
)

Output a Table of Content Index (TOC).

Before calling this method you have to open the page using the addTOCPage() method. After calling this method you have to call endTOCPage() to close the TOC page. You can override this method to achieve different styles.

Parameters
int$pagepage number where this TOC should be inserted (leave empty for current page).
string$numbersfontset the font for page numbers (please use monospaced font for better alignment).
string$fillerstring used to fill the space between text and page number.
string$toc_namename to use for TOC bookmark. public
Author
Nicola Asuni
Since
4.5.000 (2009-01-02)
See Also
addTOCPage(), endTOCPage(), addHTMLTOC()

Definition at line 22648 of file tcpdf.php.

References $x.

{
$fontsize = $this->FontSizePt;
$fontfamily = $this->FontFamily;
$fontstyle = $this->FontStyle;
$w = $this->w - $this->lMargin - $this->rMargin;
$spacer = $this->GetStringWidth(chr(32)) * 4;
$page_first = $this->getPage();
$lmargin = $this->lMargin;
$rmargin = $this->rMargin;
$x_start = $this->GetX();
$current_page = $this->page;
if ($this->empty_string($numbersfont)) {
}
if ($this->empty_string($filler)) {
$filler = ' ';
}
if ($this->empty_string($page)) {
$gap = ' ';
} else {
$gap = '';
if ($page < 1) {
$page = 1;
}
}
foreach ($this->outlines as $key => $outline) {
if ($this->rtl) {
$aligntext = 'R';
$alignnum = 'L';
} else {
$aligntext = 'L';
$alignnum = 'R';
}
if ($outline['l'] == 0) {
$this->SetFont($fontfamily, $fontstyle.'B', $fontsize);
} else {
$this->SetFont($fontfamily, $fontstyle, $fontsize - $outline['l']);
}
// check for page break
$this->checkPageBreak(($this->FontSize * $this->cell_height_ratio));
// set margins and X position
if (($this->page == $current_page) AND ($this->current_column == $current_column)) {
$this->lMargin = $lmargin;
$this->rMargin = $rmargin;
} else {
if ($this->current_column != $current_column) {
if ($this->rtl) {
$x_start = $this->w - $this->columns[$this->current_column]['x'];
} else {
$x_start = $this->columns[$this->current_column]['x'];
}
}
$lmargin = $this->lMargin;
$rmargin = $this->rMargin;
$current_page = $this->page;
}
$this->SetX($x_start);
$indent = ($spacer * $outline['l']);
if ($this->rtl) {
$this->rMargin += $indent;
$this->x -= $indent;
} else {
$this->lMargin += $indent;
$this->x += $indent;
}
$link = $this->AddLink();
$this->SetLink($link, $outline['y'], $outline['p']);
// write the text
$this->Write(0, $outline['t'], $link, 0, $aligntext, false, 0, false, false, 0);
$this->SetFont($numbersfont, $fontstyle, $fontsize);
if ($this->empty_string($page)) {
$pagenum = $outline['p'];
} else {
// placemark to be replaced with the correct number
$pagenum = '{#'.($outline['p']).'}';
if ($this->isUnicodeFont()) {
$pagenum = '{'.$pagenum.'}';
}
}
$numwidth = $this->GetStringWidth($pagenum);
if ($this->rtl) {
$tw = $this->x - $this->lMargin;
} else {
$tw = $this->w - $this->rMargin - $this->x;
}
$fw = $tw - $numwidth - $this->GetStringWidth(chr(32));
$numfills = floor($fw / $this->GetStringWidth($filler));
if ($numfills > 0) {
$rowfill = str_repeat($filler, $numfills);
} else {
$rowfill = '';
}
if ($this->rtl) {
$pagenum = $pagenum.$gap.$rowfill.' ';
} else {
$pagenum = ' '.$rowfill.$gap.$pagenum;
}
// write the number
$this->Cell($tw, 0, $pagenum, 0, 1, $alignnum, 0, $link, 0);
}
$page_last = $this->getPage();
$numpages = $page_last - $page_first + 1;
if (!$this->empty_string($page)) {
for ($p = $page_first; $p <= $page_last; ++$p) {
// get page data
$temppage = $this->getPageBuffer($p);
for ($n = 1; $n <= $this->numpages; ++$n) {
// update page numbers
$k = '{#'.$n.'}';
$ku = '{'.$k.'}';
$alias_a = $this->_escape($k);
$alias_au = $this->_escape($ku);
if ($this->isunicode) {
$alias_b = $this->_escape($this->UTF8ToLatin1($k));
$alias_bu = $this->_escape($this->UTF8ToLatin1($ku));
$alias_c = $this->_escape($this->utf8StrRev($k, false, $this->tmprtl));
$alias_cu = $this->_escape($this->utf8StrRev($ku, false, $this->tmprtl));
}
if ($n >= $page) {
$np = $n + $numpages;
} else {
$np = $n;
}
$ns = $this->formatTOCPageNumber($np);
$nu = $ns;
$sdiff = strlen($k) - strlen($ns) - 1;
$sdiffu = strlen($ku) - strlen($ns) - 1;
$sfill = str_repeat($filler, $sdiff);
$sfillu = str_repeat($filler, $sdiffu);
if ($this->rtl) {
$ns = $ns.' '.$sfill;
$nu = $nu.' '.$sfillu;
} else {
$ns = $sfill.' '.$ns;
$nu = $sfillu.' '.$nu;
}
$nu = $this->UTF8ToUTF16BE($nu, false);
$temppage = str_replace($alias_au, $nu, $temppage);
if ($this->isunicode) {
$temppage = str_replace($alias_bu, $nu, $temppage);
$temppage = str_replace($alias_cu, $nu, $temppage);
$temppage = str_replace($alias_b, $ns, $temppage);
$temppage = str_replace($alias_c, $ns, $temppage);
}
$temppage = str_replace($alias_a, $ns, $temppage);
}
// save changes
$this->setPageBuffer($p, $temppage);
}
// move pages
$this->Bookmark($toc_name, 0, 0, $page_first);
for ($i = 0; $i < $numpages; ++$i) {
$this->movePage($page_last, $page);
}
}
}
TCPDF::addTOCPage (   $orientation = '',
  $format = '',
  $keepmargins = false 
)

Adds a new TOC (Table Of Content) page to the document.

Parameters
string$orientationpage orientation.
boolean$keepmarginsif true overwrites the default page margins with the current margins public
Since
5.0.001 (2010-05-06)
See Also
AddPage(), startPage(), endPage(), endTOCPage()

Definition at line 3712 of file tcpdf.php.

References AddPage().

{
$this->AddPage($orientation, $format, $keepmargins, true);
}

+ Here is the call graph for this function:

TCPDF::adjustCellPadding (   $brd = 0)
protected

Adjust the internal Cell padding array to take account of the line width.

Parameters
mixed$brdIndicates if borders must be drawn around the cell. The value can be a number:
  • 0: no border (default)
  • 1: frame
or a string containing some or all of the following characters (in any order):
  • L: left
  • T: top
  • R: right
  • B: bottom
or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
Returns
array of adjustments public
Since
5.9.000 (2010-10-03)

Definition at line 3318 of file tcpdf.php.

References $cell_padding, and $LineWidth.

Referenced by Cell(), getCellCode(), getNumLines(), getStringHeight(), and MultiCell().

{
if (empty($brd)) {
return;
}
if (is_string($brd)) {
// convert string to array
$slen = strlen($brd);
$newbrd = array();
for ($i = 0; $i < $slen; ++$i) {
$newbrd[$brd{$i}] = true;
}
$brd = $newbrd;
} elseif (($brd === 1) OR ($brd === true) OR (is_numeric($brd) AND (intval($brd) > 0))) {
$brd = array('LRTB' => true);
}
if (!is_array($brd)) {
return;
}
// store current cell padding
// select border mode
if (isset($brd['mode'])) {
$mode = $brd['mode'];
unset($brd['mode']);
} else {
$mode = 'normal';
}
// process borders
foreach ($brd as $border => $style) {
$line_width = $this->LineWidth;
if (is_array($style) AND isset($style['width'])) {
// get border width
$line_width = $style['width'];
}
$adj = 0; // line width inside the cell
switch ($mode) {
case 'ext': {
$adj = 0;
break;
}
case 'int': {
$adj = $line_width;
break;
}
case 'normal':
default: {
$adj = ($line_width / 2);
break;
}
}
// correct internal cell padding if required to avoid overlap between text and lines
if ((strpos($border,'T') !== false) AND ($this->cell_padding['T'] < $adj)) {
$this->cell_padding['T'] = $adj;
}
if ((strpos($border,'R') !== false) AND ($this->cell_padding['R'] < $adj)) {
$this->cell_padding['R'] = $adj;
}
if ((strpos($border,'B') !== false) AND ($this->cell_padding['B'] < $adj)) {
$this->cell_padding['B'] = $adj;
}
if ((strpos($border,'L') !== false) AND ($this->cell_padding['L'] < $adj)) {
$this->cell_padding['L'] = $adj;
}
}
return array('T' => ($this->cell_padding['T'] - $cp['T']), 'R' => ($this->cell_padding['R'] - $cp['R']), 'B' => ($this->cell_padding['B'] - $cp['B']), 'L' => ($this->cell_padding['L'] - $cp['L']));
}

+ Here is the caller graph for this function:

TCPDF::AliasNbPages ( )

Defines an alias for the total number of pages.

It will be substituted as the document is closed.

Parameters
string$aliasThe alias. public
Since
1.4
See Also
getAliasNbPages(), PageNo(), Footer()

Definition at line 15270 of file tcpdf.php.

{nb}') {
$this->AliasNbPages = $alias;
}
TCPDF::AliasNumPage ( )

Defines an alias for the page number.

It will be substituted as the document is closed.

Parameters
string$aliasThe alias. public
Since
4.5.000 (2009-01-02)
See Also
getAliasNbPages(), PageNo(), Footer()

Definition at line 15297 of file tcpdf.php.

{pnb}') {
//Define an alias for total number of pages
$this->AliasNumPage = $alias;
}
TCPDF::Annotation (   $x,
  $y,
  $w,
  $h,
  $text,
  $opt = array('Subtype'=>'Text'),
  $spaces = 0 
)

Puts a markup annotation on a rectangular area of the page.

!!!!THE ANNOTATION SUPPORT IS NOT YET FULLY IMPLEMENTED !!!!

Parameters
float$xAbscissa of the upper-left corner of the rectangle
float$yOrdinate of the upper-left corner of the rectangle
float$wWidth of the rectangle
float$hHeight of the rectangle
string$textannotation text or alternate content
array$optarray of options (see section 8.4 of PDF reference 1.7).
int$spacesnumber of spaces on the text to link public
Since
4.0.018 (2008-08-06)

Definition at line 5031 of file tcpdf.php.

References $h, $k, $n, $page, $w, $x, $xobjid, $y, checkPageRegions(), empty_string(), Image(), and n.

Referenced by Link().

{
if ($this->inxobj) {
// store parameters for later use on template
$this->xobjects[$this->xobjid]['annotations'][] = array('x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'text' => $text, 'opt' => $opt, 'spaces' => $spaces);
return;
}
if ($x === '') {
}
if ($y === '') {
}
// check page for no-write regions and adapt page margins if necessary
$this->checkPageRegions($h, $x, $y);
// recalculate coordinates to account for graphic transformations
if (isset($this->transfmatrix) AND !empty($this->transfmatrix)) {
for ($i=$this->transfmatrix_key; $i > 0; --$i) {
$maxid = count($this->transfmatrix[$i]) - 1;
for ($j=$maxid; $j >= 0; --$j) {
$ctm = $this->transfmatrix[$i][$j];
if (isset($ctm['a'])) {
$x = $x * $this->k;
$y = ($this->h - $y) * $this->k;
$w = $w * $this->k;
$h = $h * $this->k;
// top left
$xt = $x;
$yt = $y;
$x1 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
$y1 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
// top right
$xt = $x + $w;
$yt = $y;
$x2 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
$y2 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
// bottom left
$xt = $x;
$yt = $y - $h;
$x3 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
$y3 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
// bottom right
$xt = $x + $w;
$yt = $y - $h;
$x4 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
$y4 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
// new coordinates (rectangle area)
$x = min($x1, $x2, $x3, $x4);
$y = max($y1, $y2, $y3, $y4);
$w = (max($x1, $x2, $x3, $x4) - $x) / $this->k;
$h = ($y - min($y1, $y2, $y3, $y4)) / $this->k;
$x = $x / $this->k;
$y = $this->h - ($y / $this->k);
}
}
}
}
if ($this->page <= 0) {
$page = 1;
} else {
}
if (!isset($this->PageAnnots[$page])) {
$this->PageAnnots[$page] = array();
}
$this->PageAnnots[$page][] = array('n' => $this->n, 'x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'txt' => $text, 'opt' => $opt, 'numspaces' => $spaces);
if ((($opt['Subtype'] == 'FileAttachment') OR ($opt['Subtype'] == 'Sound')) AND (!$this->empty_string($opt['FS'])) AND file_exists($opt['FS']) AND (!isset($this->embeddedfiles[basename($opt['FS'])]))) {
$this->embeddedfiles[basename($opt['FS'])] = array('n' => $this->n, 'file' => $opt['FS']);
}
// Add widgets annotation's icons
if (isset($opt['mk']['i']) AND file_exists($opt['mk']['i'])) {
$this->Image($opt['mk']['i'], '', '', 10, 10, '', '', '', false, 300, '', false, false, 0, false, true);
}
if (isset($opt['mk']['ri']) AND file_exists($opt['mk']['ri'])) {
$this->Image($opt['mk']['ri'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true);
}
if (isset($opt['mk']['ix']) AND file_exists($opt['mk']['ix'])) {
$this->Image($opt['mk']['ix'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true);
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::Arrow (   $x0,
  $y0,
  $x1,
  $y1,
  $head_style = 0,
  $arm_size = 5,
  $arm_angle = 15 
)

Draws a grahic arrow.

Parameters
float$x0Abscissa of first point.
float$y0Ordinate of first point.
float$x0Abscissa of second point.
float$y1Ordinate of second point.
int$head_style(0 = draw only arrowhead arms, 1 = draw closed arrowhead, but no fill, 2 = closed and filled arrowhead, 3 = filled arrowhead)
float$arm_sizelength of arrowhead arms
int$arm_angleangle between an arm and the shaft
Author
Piotr Galecki, Nicola Asuni, Andy Meier
Since
4.6.018 (2009-07-10)

Definition at line 13245 of file tcpdf.php.

{
// getting arrow direction angle
// 0 deg angle is when both arms go along X axis. angle grows clockwise.
$dir_angle = atan2(($y0 - $y1), ($x0 - $x1));
if ($dir_angle < 0) {
$dir_angle += (2 * M_PI);
}
$arm_angle = deg2rad($arm_angle);
$sx1 = $x1;
$sy1 = $y1;
if ($head_style > 0) {
// calculate the stopping point for the arrow shaft
$sx1 = $x1 + (($arm_size - $this->LineWidth) * cos($dir_angle));
$sy1 = $y1 + (($arm_size - $this->LineWidth) * sin($dir_angle));
}
// main arrow line / shaft
$this->Line($x0, $y0, $sx1, $sy1);
// left arrowhead arm tip
$x2L = $x1 + ($arm_size * cos($dir_angle + $arm_angle));
$y2L = $y1 + ($arm_size * sin($dir_angle + $arm_angle));
// right arrowhead arm tip
$x2R = $x1 + ($arm_size * cos($dir_angle - $arm_angle));
$y2R = $y1 + ($arm_size * sin($dir_angle - $arm_angle));
$mode = 'D';
$style = array();
switch ($head_style) {
case 0: {
// draw only arrowhead arms
$mode = 'D';
$style = array(1, 1, 0);
break;
}
case 1: {
// draw closed arrowhead, but no fill
$mode = 'D';
break;
}
case 2: {
// closed and filled arrowhead
$mode = 'DF';
break;
}
case 3: {
// filled arrowhead
$mode = 'F';
break;
}
}
$this->Polygon(array($x2L, $y2L, $x1, $y1, $x2R, $y2R), $mode, $style, array());
}
TCPDF::arrUTF8ToUTF16BE (   $unicode,
  $setbom = true 
)
protected

Converts array of UTF-8 characters to UTF16-BE string.


Based on: http://www.faqs.org/rfcs/rfc2781.html

  Encoding UTF-16:
  Encoding of a single character from an ISO 10646 character value to
   UTF-16 proceeds as follows. Let U be the character number, no greater
   than 0x10FFFF.
   1) If U < 0x10000, encode U as a 16-bit unsigned integer and
      terminate.
   2) Let U' = U - 0x10000. Because U is less than or equal to 0x10FFFF,
      U' must be less than or equal to 0xFFFFF. That is, U' can be
      represented in 20 bits.
   3) Initialize two 16-bit unsigned integers, W1 and W2, to 0xD800 and
      0xDC00, respectively. These integers each have 10 bits free to
      encode the character value, for a total of 20 bits.
   4) Assign the 10 high-order bits of the 20-bit U' to the 10 low-order
      bits of W1 and the 10 low-order bits of U' to the 10 low-order
      bits of W2. Terminate.
   Graphically, steps 2 through 4 look like:
   U' = yyyyyyyyyyxxxxxxxxxx
   W1 = 110110yyyyyyyyyy
   W2 = 110111xxxxxxxxxx
Parameters
array$unicodearray containing UTF-8 unicode values
boolean$setbomif true set the Byte Order Mark (BOM = 0xFEFF)
Returns
string protected
Author
Nicola Asuni
Since
2.1.000 (2008-01-08)
See Also
UTF8ToUTF16BE()

Definition at line 11183 of file tcpdf.php.

Referenced by getCellCode().

{
$outstr = ''; // string to be returned
if ($setbom) {
$outstr .= "\xFE\xFF"; // Byte Order Mark (BOM)
}
foreach ($unicode as $char) {
if ($char == 0x200b) {
// skip Unicode Character 'ZERO WIDTH SPACE' (DEC:8203, U+200B)
} elseif ($char == 0xFFFD) {
$outstr .= "\xFF\xFD"; // replacement character
} elseif ($char < 0x10000) {
$outstr .= chr($char >> 0x08);
$outstr .= chr($char & 0xFF);
} else {
$char -= 0x10000;
$w1 = 0xD800 | ($char >> 0x10);
$w2 = 0xDC00 | ($char & 0x3FF);
$outstr .= chr($w1 >> 0x08);
$outstr .= chr($w1 & 0xFF);
$outstr .= chr($w2 >> 0x08);
$outstr .= chr($w2 & 0xFF);
}
}
return $outstr;
}

+ Here is the caller graph for this function:

TCPDF::Bookmark (   $txt,
  $level = 0,
  $y = -1,
  $page = '' 
)

Adds a bookmark.

Parameters
string$txtbookmark description.
int$levelbookmark level (minimum value is 0).
float$yY position in user units of the bookmark on the selected page (default = -1 = current position; 0 = page start;).
int$pagetarget page number (leave empty for current page). public
Author
Olivier Plathey, Nicola Asuni
Since
2.1.002 (2008-02-12)

Definition at line 13912 of file tcpdf.php.

References $y.

{
if ($level < 0) {
$level = 0;
}
if (isset($this->outlines[0])) {
$lastoutline = end($this->outlines);
$maxlevel = $lastoutline['l'] + 1;
} else {
$maxlevel = 0;
}
if ($level > $maxlevel) {
$level = $maxlevel;
}
if ($y == -1) {
$y = $this->GetY();
}
if (empty($page)) {
$page = $this->PageNo();
if (empty($page)) {
return;
}
}
$this->outlines[] = array('t' => $txt, 'l' => $level, 'y' => $y, 'p' => $page);
}
TCPDF::Button (   $name,
  $w,
  $h,
  $caption,
  $action,
  $prop = array(),
  $opt = array(),
  $x = '',
  $y = '',
  $js = false 
)

Creates a button field.

Parameters
string$namefield name
int$wwidth
int$hheight
string$captioncaption.
mixed$actionaction triggered by pressing the button. Use a string to specify a javascript action. Use an array to specify a form action options as on section 12.7.5 of PDF32000_2008.
array$propjavascript field properties. Possible values are described on official Javascript for Acrobat API reference.
array$optannotation parameters. Possible values are described on official PDF32000_2008 reference.
float$xAbscissa of the upper-left corner of the rectangle
float$yOrdinate of the upper-left corner of the rectangle
boolean$jsif true put the field using JavaScript (requires Acrobat Writer to be rendered). public
Author
Nicola Asuni
Since
4.8.000 (2009-09-07)

Definition at line 14926 of file tcpdf.php.

References $name, $x, $y, and n.

{
if ($x === '') {
}
if ($y === '') {
}
// check page for no-write regions and adapt page margins if necessary
$this->checkPageRegions($h, $x, $y);
if ($js) {
$this->_addfield('button', $name, $this->x, $this->y, $w, $h, $prop);
$this->javascript .= 'f'.$name.".buttonSetCaption('".addslashes($caption)."');\n";
$this->javascript .= 'f'.$name.".setAction('MouseUp','".addslashes($action)."');\n";
$this->javascript .= 'f'.$name.".highlight='push';\n";
$this->javascript .= 'f'.$name.".print=false;\n";
return;
}
// get default style
$prop = array_merge($this->getFormDefaultProp(), $prop);
$prop['Pushbutton'] = 'true';
$prop['highlight'] = 'push';
$prop['display'] = 'display.noPrint';
// get annotation data
$popt = $this->getAnnotOptFromJSProp($prop);
$this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i'];
$fontstyle = sprintf('/F%d %.2F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor);
$popt['da'] = $fontstyle;
$popt['ap'] = array();
$popt['ap']['n'] = 'q BT '.$fontstyle.' ET Q';
// set additional default options
if (!isset($popt['mk'])) {
$popt['mk'] = array();
}
$ann_obj_id = ($this->n + 1);
if (!empty($action) AND !is_array($action)) {
$ann_obj_id = ($this->n + 2);
}
$popt['mk']['ca'] = $this->_textstring($caption, $ann_obj_id);
$popt['mk']['rc'] = $this->_textstring($caption, $ann_obj_id);
$popt['mk']['ac'] = $this->_textstring($caption, $ann_obj_id);
// merge options
$opt = array_merge($popt, $opt);
// set remaining annotation data
$opt['Subtype'] = 'Widget';
$opt['ft'] = 'Btn';
$opt['t'] = $caption;
$opt['v'] = $name;
if (!empty($action)) {
if (is_array($action)) {
// form action options as on section 12.7.5 of PDF32000_2008.
$opt['aa'] = '/D <<';
$bmode = array('SubmitForm', 'ResetForm', 'ImportData');
foreach ($action AS $key => $val) {
if (($key == 'S') AND in_array($val, $bmode)) {
$opt['aa'] .= ' /S /'.$val;
} elseif (($key == 'F') AND (!empty($val))) {
$opt['aa'] .= ' /F '.$this->_datastring($val, $ann_obj_id);
} elseif (($key == 'Fields') AND is_array($val) AND !empty($val)) {
$opt['aa'] .= ' /Fields [';
foreach ($val AS $field) {
$opt['aa'] .= ' '.$this->_textstring($field, $ann_obj_id);
}
$opt['aa'] .= ']';
} elseif (($key == 'Flags')) {
$ff = 0;
if (is_array($val)) {
foreach ($val AS $flag) {
switch ($flag) {
case 'Include/Exclude': {
$ff += 1 << 0;
break;
}
case 'IncludeNoValueFields': {
$ff += 1 << 1;
break;
}
case 'ExportFormat': {
$ff += 1 << 2;
break;
}
case 'GetMethod': {
$ff += 1 << 3;
break;
}
case 'SubmitCoordinates': {
$ff += 1 << 4;
break;
}
case 'XFDF': {
$ff += 1 << 5;
break;
}
case 'IncludeAppendSaves': {
$ff += 1 << 6;
break;
}
case 'IncludeAnnotations': {
$ff += 1 << 7;
break;
}
case 'SubmitPDF': {
$ff += 1 << 8;
break;
}
case 'CanonicalFormat': {
$ff += 1 << 9;
break;
}
case 'ExclNonUserAnnots': {
$ff += 1 << 10;
break;
}
case 'ExclFKey': {
$ff += 1 << 11;
break;
}
case 'EmbedForm': {
$ff += 1 << 13;
break;
}
}
}
} else {
$ff = intval($val);
}
$opt['aa'] .= ' /Flags '.$ff;
}
}
$opt['aa'] .= ' >>';
} else {
// Javascript action or raw action command
$js_obj_id = $this->addJavascriptObject($action);
$opt['aa'] = '/D '.$js_obj_id.' 0 R';
}
}
$this->Annotation($x, $y, $w, $h, $name, $opt, 0);
if ($this->rtl) {
$this->x -= $w;
} else {
$this->x += $w;
}
}
TCPDF::Cell (   $w,
  $h = 0,
  $txt = '',
  $border = 0,
  $ln = 0,
  $align = '',
  $fill = false,
  $link = '',
  $stretch = 0,
  $ignore_min_height = false,
  $calign = 'T',
  $valign = 'M' 
)

Prints a cell (rectangular area) with optional borders, background color and character string.

The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.
If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.

Parameters
float$wCell width. If 0, the cell extends up to the right margin.
float$hCell height. Default value: 0.
string$txtString to print. Default value: empty string.
mixed$borderIndicates if borders must be drawn around the cell. The value can be a number:
  • 0: no border (default)
  • 1: frame
or a string containing some or all of the following characters (in any order):
  • L: left
  • T: top
  • R: right
  • B: bottom
or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
int$lnIndicates where the current position should go after the call. Possible values are:
  • 0: to the right (or left for RTL languages)
  • 1: to the beginning of the next line
  • 2: below
Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
string$alignAllows to center or align the text. Possible values are:
  • L or empty string: left align (default value)
  • C: center
  • R: right align
  • J: justify
boolean$fillIndicates if the cell background must be painted (true) or transparent (false).
mixed$linkURL or identifier returned by AddLink().
int$stretchfont stretch mode:
  • 0 = disabled
  • 1 = horizontal scaling only if text is larger than cell width
  • 2 = forced horizontal scaling to fit cell width
  • 3 = character spacing only if text is larger than cell width
  • 4 = forced character spacing to fit cell width
General font stretching and scaling values will be preserved when possible.
boolean$ignore_min_heightif true ignore automatic minimum height value.
string$caligncell vertical alignment relative to the specified Y value. Possible values are:
  • T : cell top
  • C : center
  • B : cell bottom
  • A : font top
  • L : font baseline
  • D : font bottom
string$valigntext vertical alignment inside the cell. Possible values are:
  • T : top
  • C : center
  • B : bottom
public
Since
1.0
See Also
SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), AddLink(), Ln(), MultiCell(), Write(), SetAutoPageBreak()

Definition at line 5288 of file tcpdf.php.

References $cell_height_ratio, $cell_margin, $cell_padding, $h, $w, _out(), adjustCellPadding(), checkPageBreak(), and getCellCode().

Referenced by Close(), Footer(), Header(), Image(), Text(), and Write().

{
$prev_cell_margin = $this->cell_margin;
$prev_cell_padding = $this->cell_padding;
$this->adjustCellPadding($border);
if (!$ignore_min_height) {
$min_cell_height = ($this->FontSize * $this->cell_height_ratio) + $this->cell_padding['T'] + $this->cell_padding['B'];
if ($h < $min_cell_height) {
$h = $min_cell_height;
}
}
$this->checkPageBreak($h + $this->cell_margin['T'] + $this->cell_margin['B']);
$this->_out($this->getCellCode($w, $h, $txt, $border, $ln, $align, $fill, $link, $stretch, true, $calign, $valign));
$this->cell_padding = $prev_cell_padding;
$this->cell_margin = $prev_cell_margin;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::CheckBox (   $name,
  $w,
  $checked = false,
  $prop = array(),
  $opt = array(),
  $onvalue = 'Yes',
  $x = '',
  $y = '',
  $js = false 
)

Creates a CheckBox field.

Parameters
string$namefield name
int$wwidth
boolean$checkeddefine the initial state.
array$propjavascript field properties. Possible values are described on official Javascript for Acrobat API reference.
array$optannotation parameters. Possible values are described on official PDF32000_2008 reference.
string$onvaluevalue to be returned if selected.
float$xAbscissa of the upper-left corner of the rectangle
float$yOrdinate of the upper-left corner of the rectangle
boolean$jsif true put the field using JavaScript (requires Acrobat Writer to be rendered). public
Author
Nicola Asuni
Since
4.8.000 (2009-09-07)

Definition at line 14856 of file tcpdf.php.

References $name, $x, and $y.

{
if ($x === '') {
}
if ($y === '') {
}
// check page for no-write regions and adapt page margins if necessary
$this->checkPageRegions($w, $x, $y);
if ($js) {
$this->_addfield('checkbox', $name, $x, $y, $w, $w, $prop);
return;
}
if (!isset($prop['value'])) {
$prop['value'] = array('Yes');
}
// get default style
$prop = array_merge($this->getFormDefaultProp(), $prop);
$prop['borderStyle'] = 'inset';
// get annotation data
$popt = $this->getAnnotOptFromJSProp($prop);
// set additional default options
$font = 'zapfdingbats';
$this->AddFont($font);
$tmpfont = $this->getFontBuffer($font);
$this->annotation_fonts[$tmpfont['fontkey']] = $tmpfont['i'];
$fontstyle = sprintf('/F%d %.2F Tf %s', $tmpfont['i'], $this->FontSizePt, $this->TextColor);
$popt['da'] = $fontstyle;
$popt['ap'] = array();
$popt['ap']['n'] = array();
$popt['ap']['n']['Yes'] = 'q BT '.$fontstyle.' 0 0 Td (8) Tj ET Q';
$popt['ap']['n']['Off'] = 'q BT '.$fontstyle.' 0 0 Td (8) Tj ET Q';
// merge options
$opt = array_merge($popt, $opt);
// set remaining annotation data
$opt['Subtype'] = 'Widget';
$opt['ft'] = 'Btn';
$opt['t'] = $name;
$opt['opt'] = array($onvalue);
if ($checked) {
$opt['v'] = array('/0');
$opt['as'] = 'Yes';
} else {
$opt['v'] = array('/Off');
$opt['as'] = 'Off';
}
$this->Annotation($x, $y, $w, $w, $name, $opt, 0);
if ($this->rtl) {
$this->x -= $w;
} else {
$this->x += $w;
}
}
TCPDF::checkPageBreak (   $h = 0,
  $y = '',
  $addpage = true 
)
protected

Add page if needed.

Parameters
float$hCell height. Default value: 0.
mixed$ystarting y position, leave empty for current position.
boolean$addpageif true add a page, otherwise only return the true/false state
Returns
boolean true in case of page break, false otherwise.
Since
3.2.000 (2008-07-01) protected

Definition at line 5208 of file tcpdf.php.

References $h, $page, $tMargin, $x, $y, AcceptPageBreak(), AddPage(), and empty_string().

Referenced by Cell(), fitBlock(), and MultiCell().

{
if ($this->empty_string($y)) {
}
$current_page = $this->page;
if ((($y + $h) > $this->PageBreakTrigger) AND (!$this->InFooter) AND ($this->AcceptPageBreak())) {
if ($addpage) {
//Automatic page break
$this->AddPage($this->CurOrientation);
$this->y = $this->tMargin;
$oldpage = $this->page - 1;
if ($this->rtl) {
if ($this->pagedim[$this->page]['orm'] != $this->pagedim[$oldpage]['orm']) {
$this->x = $x - ($this->pagedim[$this->page]['orm'] - $this->pagedim[$oldpage]['orm']);
} else {
$this->x = $x;
}
} else {
if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) {
$this->x = $x + ($this->pagedim[$this->page]['olm'] - $this->pagedim[$oldpage]['olm']);
} else {
$this->x = $x;
}
}
}
$this->newline = true;
return true;
}
if ($current_page != $this->page) {
// account for columns mode
$this->newline = true;
return true;
}
return false;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::checkPageRegions (   $h = 0,
$x = '',
$y = '' 
)
protected

Check page for no-write regions and adapt current coordinates and page margins if necessary.

A no-write region is a portion of the page with a rectangular or trapezium shape that will not be covered when writing text or html code. A region is always aligned on the left or right side of the page ad is defined using a vertical segment.

Parameters
float$hheight of the text/image/object to print in user units
float$xcurrent X coordinate in user units
float$ycurrent Y coordinate in user units
Author
Nicola Asuni protected
Since
5.9.003 (2010-10-13)

Definition at line 23949 of file tcpdf.php.

References $x, and $y.

Referenced by Annotation(), getCellCode(), getRemainingWidth(), Image(), MultiCell(), and Write().

{
// set default values
if ($x === '') {
}
if ($y === '') {
}
if (empty($this->page_regions)) {
// no page regions defined
return;
}
if (empty($h)) {
$h = ($this->FontSize * $this->cell_height_ratio) + $this->cell_padding['T'] + $this->cell_padding['B'];
}
if ($this->rtl) {
$this->lMargin = $this->original_lMargin;
} else {
$this->rMargin = $this->original_rMargin;
}
if ($this->AutoPageBreak AND !$this->InFooter AND (($y + $h) > $this->PageBreakTrigger)) {
// the content will be printed on a new page
return;
}
// adjust coordinates and page margins
foreach ($this->page_regions as $regid => $regdata) {
if ($regdata['page'] == $this->page) {
// check region boundaries
if (($y > ($regdata['yt'] - $h)) AND ($y <= $regdata['yb'])) {
// Y is inside the region
$minv = ($regdata['xb'] - $regdata['xt']) / ($regdata['yb'] - $regdata['yt']); // inverse of angular coefficient
$yt = max($y, $regdata['yt']);
$yb = min(($yt + $h), $regdata['yb']);
$xt = (($yt - $regdata['yt']) * $minv) + $regdata['xt'];
$xb = (($yb - $regdata['yt']) * $minv) + $regdata['xt'];
if ($regdata['side'] == 'L') { // left side
$new_margin = max($xt, $xb);
if ($this->lMargin < $new_margin) {
if ($this->rtl) {
// adjust left page margin
$this->lMargin = $new_margin;
}
if ($x < $new_margin) {
// adjust x position
$x = $new_margin;
}
}
} elseif ($regdata['side'] == 'R') { // right side
$new_margin = min($xt, $xb);
if (($this->w - $this->rMargin) > $new_margin) {
if (!$this->rtl) {
// adjust right page margin
$this->rMargin = ($this->w - $new_margin);
}
if ($x > $new_margin) {
// adjust x position
$x = $new_margin;
}
}
}
}
}
}
}

+ Here is the caller graph for this function:

TCPDF::Circle (   $x0,
  $y0,
  $r,
  $angstr = 0,
  $angend = 360,
  $style = '',
  $line_style = array(),
  $fill_color = array(),
  $nc = 2 
)

Draws a circle.

A circle is formed from n Bezier curves.

Parameters
float$x0Abscissa of center point.
float$y0Ordinate of center point.
float$rRadius.
float$angstr,:Angle start of draw line. Default value: 0.
float$angend,:Angle finish of draw line. Default value: 360.
string$styleStyle of rendering. See the getPathPaintOperator() function for more information.
array$line_styleLine style of circle. Array like for SetLineStyle. Default value: default line style (empty array).
array$fill_colorFill color. Format: array(red, green, blue). Default value: default color (empty array).
integer$ncNumber of curves used to draw a 90 degrees portion of circle. public
Since
2.1.000 (2008-01-08)

Definition at line 12933 of file tcpdf.php.

{
$this->Ellipse($x0, $y0, $r, $r, 0, $angstr, $angend, $style, $line_style, $fill_color, $nc);
}
TCPDF::Clip (   $x,
  $y,
  $w,
  $h 
)
protected

Set a rectangular clipping area.

Parameters
float$xabscissa of the top left corner of the rectangle (or top right corner for RTL mode).
float$yordinate of the top left corner of the rectangle.
float$wwidth of the rectangle.
float$hheight of the rectangle.
Author
Andreas Würmser, Nicola Asuni
Since
3.1.000 (2008-06-09) protected

Definition at line 15917 of file tcpdf.php.

References $x, and $y.

{
if ($this->rtl) {
$x = $this->w - $x - $w;
}
//save current Graphic State
$s = 'q';
//set clipping area
$s .= sprintf(' %.2F %.2F %.2F %.2F re W n', $x*$this->k, ($this->h-$y)*$this->k, $w*$this->k, -$h*$this->k);
//set up transformation matrix for gradient
$s .= sprintf(' %.3F 0 0 %.3F %.3F %.3F cm', $w*$this->k, $h*$this->k, $x*$this->k, ($this->h-($y+$h))*$this->k);
$this->_out($s);
}
TCPDF::Close ( )

Terminates the PDF document.

It is not necessary to call this method explicitly because Output() does it automatically. If the document contains no page, AddPage() is called to prevent from getting an invalid document. public

Since
1.0
See Also
Open(), Output()

Definition at line 3590 of file tcpdf.php.

References $k, _destroy(), _enddoc(), _out(), AddPage(), Cell(), endPage(), getGraphicVars(), SetAutoPageBreak(), SetFont(), setGraphicVars(), SetTextColor(), and setVisibility().

{
if ($this->state == 3) {
return;
}
if ($this->page == 0) {
$this->AddPage();
}
// save current graphic settings
$gvars = $this->getGraphicVars();
$this->lastpage(true);
$this->SetAutoPageBreak(false);
$this->x = 0;
$this->y = $this->h - (1 / $this->k);
$this->lMargin = 0;
$this->_out('q');
$this->setVisibility('screen');
$this->SetFont('helvetica', '', 1);
$this->SetTextColor(255, 255, 255);
$msg = "\x50\x6f\x77\x65\x72\x65\x64\x20\x62\x79\x20\x54\x43\x50\x44\x46\x20\x28\x77\x77\x77\x2e\x74\x63\x70\x64\x66\x2e\x6f\x72\x67\x29";
$lnk = "\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x74\x63\x70\x64\x66\x2e\x6f\x72\x67";
$this->Cell(0, 0, $msg, 0, 0, 'L', 0, $lnk, 0, false, 'D', 'B');
$this->setVisibility('all');
$this->_out('Q');
// restore graphic settings
$this->setGraphicVars($gvars);
// close page
$this->endPage();
// close document
$this->_enddoc();
// unset all class variables (except critical ones)
$this->_destroy(false);
}

+ Here is the call graph for this function:

TCPDF::closeHTMLTagHandler ( $dom,
  $key,
  $cell,
  $maxbottomliney = 0 
)
protected

Process closing tags.

Parameters
array$domhtml dom array
int$keycurrent element id
boolean$cellif true add the default left (or right if RTL) padding to each new line (default false).
int$maxbottomlineymaximum y value of current line protected

Definition at line 20734 of file tcpdf.php.

{
$tag = $dom[$key];
$parent = $dom[($dom[$key]['parent'])];
$lasttag = ((!isset($dom[($key + 1)])) OR ((!isset($dom[($key + 2)])) AND ($dom[($key + 1)]['value'] == 'marker')));
$in_table_head = false;
// maximum x position (used to draw borders)
if ($this->rtl) {
$xmax = $this->w;
} else {
$xmax = 0;
}
if ($tag['block']) {
$hbz = 0; // distance from y to line bottom
$hb = 0; // vertical space between block tags
// calculate vertical space for block tags
if (isset($this->tagvspaces[$tag['value']][1]['h']) AND ($this->tagvspaces[$tag['value']][1]['h'] >= 0)) {
$pre_h = $this->tagvspaces[$tag['value']][1]['h'];
} elseif (isset($parent['fontsize'])) {
$pre_h = (($parent['fontsize'] / $this->k) * $this->cell_height_ratio);
} else {
$pre_h = $this->FontSize * $this->cell_height_ratio;
}
if (isset($this->tagvspaces[$tag['value']][1]['n'])) {
$n = $this->tagvspaces[$tag['value']][1]['n'];
} elseif (preg_match('/[h][0-9]/', $tag['value']) > 0) {
$n = 0.6;
} else {
$n = 1;
}
$hb = ($n * $pre_h);
if ($this->y < $maxbottomliney) {
$hbz = ($maxbottomliney - $this->y);
}
}
// Closing tag
switch($tag['value']) {
case 'tr': {
$table_el = $dom[($dom[$key]['parent'])]['parent'];
if (!isset($parent['endy'])) {
$dom[($dom[$key]['parent'])]['endy'] = $this->y;
$parent['endy'] = $this->y;
}
if (!isset($parent['endpage'])) {
$dom[($dom[$key]['parent'])]['endpage'] = $this->page;
$parent['endpage'] = $this->page;
}
if (!isset($parent['endcolumn'])) {
$dom[($dom[$key]['parent'])]['endcolumn'] = $this->current_column;
$parent['endcolumn'] = $this->current_column;
}
// update row-spanned cells
if (isset($dom[$table_el]['rowspans'])) {
foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) {
$dom[$table_el]['rowspans'][$k]['rowspan'] -= 1;
if ($dom[$table_el]['rowspans'][$k]['rowspan'] == 0) {
if (($dom[$table_el]['rowspans'][$k]['endpage'] == $parent['endpage']) AND ($dom[$table_el]['rowspans'][$k]['endcolumn'] == $parent['endcolumn'])) {
$dom[($dom[$key]['parent'])]['endy'] = max($dom[$table_el]['rowspans'][$k]['endy'], $parent['endy']);
} elseif (($dom[$table_el]['rowspans'][$k]['endpage'] > $parent['endpage']) OR ($dom[$table_el]['rowspans'][$k]['endcolumn'] > $parent['endcolumn'])) {
$dom[($dom[$key]['parent'])]['endy'] = $dom[$table_el]['rowspans'][$k]['endy'];
$dom[($dom[$key]['parent'])]['endpage'] = $dom[$table_el]['rowspans'][$k]['endpage'];
$dom[($dom[$key]['parent'])]['endcolumn'] = $dom[$table_el]['rowspans'][$k]['endcolumn'];
}
}
}
// report new endy and endpage to the rowspanned cells
foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) {
if ($dom[$table_el]['rowspans'][$k]['rowspan'] == 0) {
$dom[$table_el]['rowspans'][$k]['endpage'] = max($dom[$table_el]['rowspans'][$k]['endpage'], $dom[($dom[$key]['parent'])]['endpage']);
$dom[($dom[$key]['parent'])]['endpage'] = $dom[$table_el]['rowspans'][$k]['endpage'];
$dom[$table_el]['rowspans'][$k]['endcolumn'] = max($dom[$table_el]['rowspans'][$k]['endcolumn'], $dom[($dom[$key]['parent'])]['endcolumn']);
$dom[($dom[$key]['parent'])]['endcolumn'] = $dom[$table_el]['rowspans'][$k]['endcolumn'];
$dom[$table_el]['rowspans'][$k]['endy'] = max($dom[$table_el]['rowspans'][$k]['endy'], $dom[($dom[$key]['parent'])]['endy']);
$dom[($dom[$key]['parent'])]['endy'] = $dom[$table_el]['rowspans'][$k]['endy'];
}
}
// update remaining rowspanned cells
foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) {
if ($dom[$table_el]['rowspans'][$k]['rowspan'] == 0) {
$dom[$table_el]['rowspans'][$k]['endpage'] = $dom[($dom[$key]['parent'])]['endpage'];
$dom[$table_el]['rowspans'][$k]['endcolumn'] = $dom[($dom[$key]['parent'])]['endcolumn'];
$dom[$table_el]['rowspans'][$k]['endy'] = $dom[($dom[$key]['parent'])]['endy'];
}
}
}
$this->setPage($dom[($dom[$key]['parent'])]['endpage']);
if ($this->num_columns > 1) {
$this->selectColumn($dom[($dom[$key]['parent'])]['endcolumn']);
}
$this->y = $dom[($dom[$key]['parent'])]['endy'];
if (isset($dom[$table_el]['attribute']['cellspacing'])) {
$cellspacing = $this->getHTMLUnitToUnits($dom[$table_el]['attribute']['cellspacing'], 1, 'px');
$this->y += $cellspacing;
}
$this->Ln(0, $cell);
if ($this->current_column == $parent['startcolumn']) {
$this->x = $parent['startx'];
}
// account for booklet mode
if ($this->page > $parent['startpage']) {
if (($this->rtl) AND ($this->pagedim[$this->page]['orm'] != $this->pagedim[$parent['startpage']]['orm'])) {
$this->x -= ($this->pagedim[$this->page]['orm'] - $this->pagedim[$parent['startpage']]['orm']);
} elseif ((!$this->rtl) AND ($this->pagedim[$this->page]['olm'] != $this->pagedim[$parent['startpage']]['olm'])) {
$this->x += ($this->pagedim[$this->page]['olm'] - $this->pagedim[$parent['startpage']]['olm']);
}
}
break;
}
case 'tablehead':
// closing tag used for the thead part
$in_table_head = true;
$this->inthead = false;
case 'table': {
$table_el = $parent;
// set default border
if (isset($table_el['attribute']['border']) AND ($table_el['attribute']['border'] > 0)) {
// set default border
$border = array('LTRB' => array('width' => $this->getCSSBorderWidth($table_el['attribute']['border']), 'cap'=>'square', 'join'=>'miter', 'dash'=> 0, 'color'=>array(0,0,0)));
} else {
$border = 0;
}
$default_border = $border;
if (isset($table_el['attribute']['cellspacing'])) {
$cellspacing = $this->getHTMLUnitToUnits($table_el['attribute']['cellspacing'], 1, 'px');
} else {
$cellspacing = 0;
}
// fix bottom line alignment of last line before page break
foreach ($dom[($dom[$key]['parent'])]['trids'] as $j => $trkey) {
// update row-spanned cells
if (isset($dom[($dom[$key]['parent'])]['rowspans'])) {
foreach ($dom[($dom[$key]['parent'])]['rowspans'] as $k => $trwsp) {
if ($trwsp['trid'] == $trkey) {
$dom[($dom[$key]['parent'])]['rowspans'][$k]['mrowspan'] -= 1;
}
if (isset($prevtrkey) AND ($trwsp['trid'] == $prevtrkey) AND ($trwsp['mrowspan'] >= 0)) {
$dom[($dom[$key]['parent'])]['rowspans'][$k]['trid'] = $trkey;
}
}
}
if (isset($prevtrkey) AND ($dom[$trkey]['startpage'] > $dom[$prevtrkey]['endpage'])) {
$pgendy = $this->pagedim[$dom[$prevtrkey]['endpage']]['hk'] - $this->pagedim[$dom[$prevtrkey]['endpage']]['bm'];
$dom[$prevtrkey]['endy'] = $pgendy;
// update row-spanned cells
if (isset($dom[($dom[$key]['parent'])]['rowspans'])) {
foreach ($dom[($dom[$key]['parent'])]['rowspans'] as $k => $trwsp) {
if (($trwsp['trid'] == $trkey) AND ($trwsp['mrowspan'] > 1) AND ($trwsp['endpage'] == $dom[$prevtrkey]['endpage'])) {
$dom[($dom[$key]['parent'])]['rowspans'][$k]['endy'] = $pgendy;
$dom[($dom[$key]['parent'])]['rowspans'][$k]['mrowspan'] = -1;
}
}
}
}
$prevtrkey = $trkey;
$table_el = $dom[($dom[$key]['parent'])];
}
// for each row
unset($xmax);
foreach ($table_el['trids'] as $j => $trkey) {
$parent = $dom[$trkey];
if (!isset($xmax)) {
$xmax = $parent['cellpos'][(count($parent['cellpos']) - 1)]['endx'];
}
// for each cell on the row
foreach ($parent['cellpos'] as $k => $cellpos) {
if (isset($cellpos['rowspanid']) AND ($cellpos['rowspanid'] >= 0)) {
$cellpos['startx'] = $table_el['rowspans'][($cellpos['rowspanid'])]['startx'];
$cellpos['endx'] = $table_el['rowspans'][($cellpos['rowspanid'])]['endx'];
$endy = $table_el['rowspans'][($cellpos['rowspanid'])]['endy'];
$startpage = $table_el['rowspans'][($cellpos['rowspanid'])]['startpage'];
$endpage = $table_el['rowspans'][($cellpos['rowspanid'])]['endpage'];
$startcolumn = $table_el['rowspans'][($cellpos['rowspanid'])]['startcolumn'];
$endcolumn = $table_el['rowspans'][($cellpos['rowspanid'])]['endcolumn'];
} else {
$endy = $parent['endy'];
$startpage = $parent['startpage'];
$endpage = $parent['endpage'];
$startcolumn = $parent['startcolumn'];
$endcolumn = $parent['endcolumn'];
}
if ($this->num_columns == 0) {
$this->num_columns = 1;
}
if (isset($cellpos['border'])) {
$border = $cellpos['border'];
}
if (isset($cellpos['bgcolor']) AND ($cellpos['bgcolor']) !== false) {
$this->SetFillColorArray($cellpos['bgcolor']);
$fill = true;
} else {
$fill = false;
}
$x = $cellpos['startx'];
$y = $parent['starty'];
$starty = $y;
$w = abs($cellpos['endx'] - $cellpos['startx']);
// get border modes
$border_start = $this->getBorderMode($border, $position='start');
$border_end = $this->getBorderMode($border, $position='end');
$border_middle = $this->getBorderMode($border, $position='middle');
// design borders around HTML cells.
for ($page = $startpage; $page <= $endpage; ++$page) { // for each page
$ccode = '';
$this->setPage($page);
if ($this->num_columns < 2) {
// single-column mode
$this->x = $x;
$this->y = $this->tMargin;
}
// account for margin changes
if ($page > $startpage) {
if (($this->rtl) AND ($this->pagedim[$page]['orm'] != $this->pagedim[$startpage]['orm'])) {
$this->x -= ($this->pagedim[$page]['orm'] - $this->pagedim[$startpage]['orm']);
} elseif ((!$this->rtl) AND ($this->pagedim[$page]['olm'] != $this->pagedim[$startpage]['olm'])) {
$this->x += ($this->pagedim[$page]['olm'] - $this->pagedim[$startpage]['olm']);
}
}
if ($startpage == $endpage) { // single page
$deltacol = 0;
$deltath = 0;
for ($column = $startcolumn; $column <= $endcolumn; ++$column) { // for each column
$this->selectColumn($column);
if ($startcolumn == $endcolumn) { // single column
$cborder = $border;
$h = $endy - $parent['starty'];
$this->y = $y;
$this->x = $x;
} elseif ($column == $startcolumn) { // first column
$cborder = $border_start;
$this->y = $starty;
$this->x = $x;
$h = $this->h - $this->y - $this->bMargin;
if ($this->rtl) {
$deltacol = $this->x + $this->rMargin - $this->w;
} else {
$deltacol = $this->x - $this->lMargin;
}
} elseif ($column == $endcolumn) { // end column
$cborder = $border_end;
if (isset($this->columns[$column]['th']['\''.$page.'\''])) {
$this->y = $this->columns[$column]['th']['\''.$page.'\''];
}
$this->x += $deltacol;
$h = $endy - $this->y;
} else { // middle column
$cborder = $border_middle;
if (isset($this->columns[$column]['th']['\''.$page.'\''])) {
$this->y = $this->columns[$column]['th']['\''.$page.'\''];
}
$this->x += $deltacol;
$h = $this->h - $this->y - $this->bMargin;
}
$ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
} // end for each column
} elseif ($page == $startpage) { // first page
$deltacol = 0;
$deltath = 0;
for ($column = $startcolumn; $column < $this->num_columns; ++$column) { // for each column
$this->selectColumn($column);
if ($column == $startcolumn) { // first column
$cborder = $border_start;
$this->y = $starty;
$this->x = $x;
$h = $this->h - $this->y - $this->bMargin;
if ($this->rtl) {
$deltacol = $this->x + $this->rMargin - $this->w;
} else {
$deltacol = $this->x - $this->lMargin;
}
} else { // middle column
$cborder = $border_middle;
if (isset($this->columns[$column]['th']['\''.$page.'\''])) {
$this->y = $this->columns[$column]['th']['\''.$page.'\''];
}
$this->x += $deltacol;
$h = $this->h - $this->y - $this->bMargin;
}
$ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
} // end for each column
} elseif ($page == $endpage) { // last page
$deltacol = 0;
$deltath = 0;
for ($column = 0; $column <= $endcolumn; ++$column) { // for each column
$this->selectColumn($column);
if ($column == $endcolumn) { // end column
$cborder = $border_end;
if (isset($this->columns[$column]['th']['\''.$page.'\''])) {
$this->y = $this->columns[$column]['th']['\''.$page.'\''];
}
$this->x += $deltacol;
$h = $endy - $this->y;
} else { // middle column
$cborder = $border_middle;
if (isset($this->columns[$column]['th']['\''.$page.'\''])) {
$this->y = $this->columns[$column]['th']['\''.$page.'\''];
}
$this->x += $deltacol;
$h = $this->h - $this->y - $this->bMargin;
}
$ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
} // end for each column
} else { // middle page
$deltacol = 0;
$deltath = 0;
for ($column = 0; $column < $this->num_columns; ++$column) { // for each column
$this->selectColumn($column);
$cborder = $border_middle;
if (isset($this->columns[$column]['th']['\''.$page.'\''])) {
$this->y = $this->columns[$column]['th']['\''.$page.'\''];
}
$this->x += $deltacol;
$h = $this->h - $this->y - $this->bMargin;
$ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
} // end for each column
}
if ($cborder OR $fill) {
// draw border and fill
if ($this->inxobj) {
// we are inside an XObject template
if (end($this->xobjects[$this->xobjid]['transfmrk']) !== false) {
$pagemarkkey = key($this->xobjects[$this->xobjid]['transfmrk']);
$pagemark = &$this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey];
} else {
$pagemark = &$this->xobjects[$this->xobjid]['intmrk'];
}
$pagebuff = $this->xobjects[$this->xobjid]['outdata'];
$pstart = substr($pagebuff, 0, $pagemark);
$pend = substr($pagebuff, $pagemark);
$this->xobjects[$this->xobjid]['outdata'] = $pstart.$ccode.$pend;
$pagemark += strlen($ccode);
} else {
// draw border and fill
if (end($this->transfmrk[$this->page]) !== false) {
$pagemarkkey = key($this->transfmrk[$this->page]);
$pagemark = &$this->transfmrk[$this->page][$pagemarkkey];
} elseif ($this->InFooter) {
$pagemark = &$this->footerpos[$this->page];
} else {
$pagemark = &$this->intmrk[$this->page];
}
$pagebuff = $this->getPageBuffer($this->page);
$pstart = substr($pagebuff, 0, $pagemark);
$pend = substr($pagebuff, $pagemark);
$this->setPageBuffer($this->page, $pstart.$ccode.$pend);
$pagemark += strlen($ccode);
}
}
} // end for each page
// restore default border
$border = $default_border;
} // end for each cell on the row
if (isset($table_el['attribute']['cellspacing'])) {
$cellspacing = $this->getHTMLUnitToUnits($table_el['attribute']['cellspacing'], 1, 'px');
$this->y += $cellspacing;
}
$this->Ln(0, $cell);
$this->x = $parent['startx'];
if ($endpage > $startpage) {
if (($this->rtl) AND ($this->pagedim[$endpage]['orm'] != $this->pagedim[$startpage]['orm'])) {
$this->x += ($this->pagedim[$endpage]['orm'] - $this->pagedim[$startpage]['orm']);
} elseif ((!$this->rtl) AND ($this->pagedim[$endpage]['olm'] != $this->pagedim[$startpage]['olm'])) {
$this->x += ($this->pagedim[$endpage]['olm'] - $this->pagedim[$startpage]['olm']);
}
}
}
if (!$in_table_head) { // we are not inside a thead section
$this->cell_padding = $table_el['old_cell_padding'];
// reset row height
$this->resetLastH();
if (($this->page == ($this->numpages - 1)) AND ($this->pageopen[$this->numpages]) AND ($this->emptypagemrk[$this->numpages] == $this->pagelen[$this->numpages])) {
// remove last blank page
$this->deletePage($this->numpages);
}
if (isset($this->theadMargins['top'])) {
// restore top margin
$this->tMargin = $this->theadMargins['top'];
$this->pagedim[$this->page]['tm'] = $this->tMargin;
}
if (!isset($table_el['attribute']['nested']) OR ($table_el['attribute']['nested'] != 'true')) {
// reset main table header
$this->thead = '';
$this->theadMargins = array();
}
}
$parent = $table_el;
break;
}
case 'a': {
$this->HREF = '';
break;
}
case 'sup': {
$this->SetXY($this->GetX(), $this->GetY() + ((0.7 * $parent['fontsize']) / $this->k));
break;
}
case 'sub': {
$this->SetXY($this->GetX(), $this->GetY() - ((0.3 * $parent['fontsize'])/$this->k));
break;
}
case 'div': {
$this->addHTMLVertSpace($hbz, 0, $cell, false, $lasttag);
break;
}
case 'blockquote': {
if ($this->rtl) {
$this->rMargin -= $this->listindent;
} else {
$this->lMargin -= $this->listindent;
}
$this->addHTMLVertSpace($hbz, $hb, $cell, false, $lasttag);
break;
}
case 'p': {
$this->addHTMLVertSpace($hbz, $hb, $cell, false, $lasttag);
break;
}
case 'pre': {
$this->addHTMLVertSpace($hbz, $hb, $cell, false, $lasttag);
$this->premode = false;
break;
}
case 'dl': {
if ($this->listnum <= 0) {
$this->listnum = 0;
$this->addHTMLVertSpace($hbz, $hb, $cell, false, $lasttag);
} else {
$this->addHTMLVertSpace(0, 0, $cell, false, $lasttag);
}
$this->resetLastH();
break;
}
case 'dt': {
$this->lispacer = '';
$this->addHTMLVertSpace(0, 0, $cell, false, $lasttag);
break;
}
case 'dd': {
$this->lispacer = '';
if ($this->rtl) {
$this->rMargin -= $this->listindent;
} else {
$this->lMargin -= $this->listindent;
}
$this->addHTMLVertSpace(0, 0, $cell, false, $lasttag);
break;
}
case 'ul':
case 'ol': {
$this->lispacer = '';
if ($this->rtl) {
$this->rMargin -= $this->listindent;
} else {
$this->lMargin -= $this->listindent;
}
if ($this->listnum <= 0) {
$this->listnum = 0;
$this->addHTMLVertSpace($hbz, $hb, $cell, false, $lasttag);
} else {
$this->addHTMLVertSpace(0, 0, $cell, false, $lasttag);
}
$this->resetLastH();
break;
}
case 'li': {
$this->lispacer = '';
$this->addHTMLVertSpace(0, 0, $cell, false, $lasttag);
break;
}
case 'h1':
case 'h2':
case 'h3':
case 'h4':
case 'h5':
case 'h6': {
$this->addHTMLVertSpace($hbz, $hb, $cell, false, $lasttag);
break;
}
// Form fields (since 4.8.000 - 2009-09-07)
case 'form': {
$this->form_action = '';
$this->form_enctype = 'application/x-www-form-urlencoded';
break;
}
default : {
break;
}
}
// draw border and background (if any)
$this->drawHTMLTagBorder($parent, $xmax);
if (isset($dom[($dom[$key]['parent'])]['attribute']['pagebreakafter'])) {
$pba = $dom[($dom[$key]['parent'])]['attribute']['pagebreakafter'];
// check for pagebreak
if (($pba == 'true') OR ($pba == 'left') OR ($pba == 'right')) {
// add a page (or trig AcceptPageBreak() for multicolumn mode)
$this->checkPageBreak($this->PageBreakTrigger + 1);
}
if ((($pba == 'left') AND (((!$this->rtl) AND (($this->page % 2) == 0)) OR (($this->rtl) AND (($this->page % 2) != 0))))
OR (($pba == 'right') AND (((!$this->rtl) AND (($this->page % 2) != 0)) OR (($this->rtl) AND (($this->page % 2) == 0))))) {
// add a page (or trig AcceptPageBreak() for multicolumn mode)
$this->checkPageBreak($this->PageBreakTrigger + 1);
}
}
$this->tmprtl = false;
}
TCPDF::colorRegistrationBar (   $x,
  $y,
  $w,
  $h,
  $transition = true,
  $vertical = false,
  $colors = 'A,
,
,
,
,
,
,
K'   
)

Paints color transition registration bars.

Parameters
float$xabscissa of the top left corner of the rectangle.
float$yordinate of the top left corner of the rectangle.
float$wwidth of the rectangle.
float$hheight of the rectangle.
boolean$transitionif true prints tcolor transitions to white.
boolean$verticalif true prints bar vertically.
string$colorscolors to print, one letter per color separated by comma (for example 'A,W,R,G,B,C,M,Y,K'): A=black, W=white, R=red, G=green, B=blue, C=cyan, M=magenta, Y=yellow, K=black.
Author
Nicola Asuni
Since
4.9.000 (2010-03-26) public

Definition at line 15592 of file tcpdf.php.

References $x, and $y.

{
$bars = explode(',', $colors);
$numbars = count($bars); // number of bars to print
// set bar measures
if ($vertical) {
$coords = array(0, 0, 0, 1);
$wb = $w / $numbars; // bar width
$hb = $h; // bar height
$xd = $wb; // delta x
$yd = 0; // delta y
} else {
$coords = array(1, 0, 0, 0);
$wb = $w; // bar width
$hb = $h / $numbars; // bar height
$xd = 0; // delta x
$yd = $hb; // delta y
}
$xb = $x;
$yb = $y;
foreach ($bars as $col) {
switch ($col) {
// set transition colors
case 'A': { // BLACK
$col_a = array(255);
$col_b = array(0);
break;
}
case 'W': { // WHITE
$col_a = array(0);
$col_b = array(255);
break;
}
case 'R': { // R
$col_a = array(255,255,255);
$col_b = array(255,0,0);
break;
}
case 'G': { // G
$col_a = array(255,255,255);
$col_b = array(0,255,0);
break;
}
case 'B': { // B
$col_a = array(255,255,255);
$col_b = array(0,0,255);
break;
}
case 'C': { // C
$col_a = array(0,0,0,0);
$col_b = array(100,0,0,0);
break;
}
case 'M': { // M
$col_a = array(0,0,0,0);
$col_b = array(0,100,0,0);
break;
}
case 'Y': { // Y
$col_a = array(0,0,0,0);
$col_b = array(0,0,100,0);
break;
}
case 'K': { // K
$col_a = array(0,0,0,0);
$col_b = array(0,0,0,100);
break;
}
default: { // GRAY
$col_a = array(255);
$col_b = array(0);
break;
}
}
if ($transition) {
// color gradient
$this->LinearGradient($xb, $yb, $wb, $hb, $col_a, $col_b, $coords);
} else {
// color rectangle
$this->SetFillColorArray($col_b);
$this->Rect($xb, $yb, $wb, $hb, 'F', array());
}
$xb += $xd;
$yb += $yd;
}
}
TCPDF::ComboBox (   $name,
  $w,
  $h,
  $values,
  $prop = array(),
  $opt = array(),
  $x = '',
  $y = '',
  $js = false 
)

Creates a Combo-box field.

Parameters
string$namefield name
int$wwidth
int$hheight
array$valuesarray containing the list of values.
array$propjavascript field properties. Possible values are described on official Javascript for Acrobat API reference.
array$optannotation parameters. Possible values are described on official PDF32000_2008 reference.
float$xAbscissa of the upper-left corner of the rectangle
float$yOrdinate of the upper-left corner of the rectangle
boolean$jsif true put the field using JavaScript (requires Acrobat Writer to be rendered). public
Author
Nicola Asuni
Since
4.8.000 (2009-09-07)

Definition at line 14797 of file tcpdf.php.

References $name, $x, and $y.

{
if ($x === '') {
}
if ($y === '') {
}
// check page for no-write regions and adapt page margins if necessary
$this->checkPageRegions($h, $x, $y);
if ($js) {
$this->_addfield('combobox', $name, $x, $y, $w, $h, $prop);
$s = '';
foreach ($values as $value) {
$s .= "'".addslashes($value)."',";
}
$this->javascript .= 'f'.$name.'.setItems(['.substr($s, 0, -1)."]);\n";
return;
}
// get default style
$prop = array_merge($this->getFormDefaultProp(), $prop);
$prop['Combo'] = true;
// get annotation data
$popt = $this->getAnnotOptFromJSProp($prop);
// set additional default options
$this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i'];
$fontstyle = sprintf('/F%d %.2F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor);
$popt['da'] = $fontstyle;
$popt['ap'] = array();
$popt['ap']['n'] = 'q BT '.$fontstyle.' ET Q';
// merge options
$opt = array_merge($popt, $opt);
// set remaining annotation data
$opt['Subtype'] = 'Widget';
$opt['ft'] = 'Ch';
$opt['t'] = $name;
$opt['opt'] = $values;
$this->Annotation($x, $y, $w, $h, $name, $opt, 0);
if ($this->rtl) {
$this->x -= $w;
} else {
$this->x += $w;
}
}
TCPDF::commitTransaction ( )

Delete the copy of the current TCPDF object used for undo operation.

public

Since
4.5.029 (2009-03-19)

Definition at line 22944 of file tcpdf.php.

{
if (isset($this->objcopy)) {
$this->objcopy->_destroy(true, true);
unset($this->objcopy);
}
}
TCPDF::convertHexStringToString (   $bs)
protected

Convert hexadecimal string to string.

Parameters
string$bsbyte-string to convert
Returns
String protected
Since
5.0.005 (2010-05-12)
Author
Nicola Asuni

Definition at line 12078 of file tcpdf.php.

{
$string = ''; // string to be returned
$bslenght = strlen($bs);
if (($bslenght % 2) != 0) {
// padding
$bs .= '0';
++$bslenght;
}
for ($i = 0; $i < $bslenght; $i += 2) {
$string .= chr(hexdec($bs{$i}.$bs{($i + 1)}));
}
return $string;
}
TCPDF::convertHTMLColorToDec (   $color = '#FFFFFF')

Returns an associative array (keys: R,G,B) from an html color name or a six-digit or three-digit hexadecimal color representation (i.e.

#3FE5AA or #7FF).

Parameters
string$colorhtml color
Returns
array RGB color or false in case of error. public

Definition at line 11332 of file tcpdf.php.

{
$returncolor = false;
$color = preg_replace('/[\s]*/', '', $color); // remove extra spaces
$color = strtolower($color);
if (($dotpos = strpos($color, '.')) !== false) {
// remove class parent (i.e.: color.red)
$color = substr($color, ($dotpos + 1));
}
if (strlen($color) == 0) {
return false;
}
// RGB ARRAY
if (substr($color, 0, 3) == 'rgb') {
$codes = substr($color, 4);
$codes = str_replace(')', '', $codes);
$returncolor = explode(',', $codes);
return $returncolor;
}
// CMYK ARRAY
if (substr($color, 0, 4) == 'cmyk') {
$codes = substr($color, 5);
$codes = str_replace(')', '', $codes);
$returncolor = explode(',', $codes);
return $returncolor;
}
// COLOR NAME
if (substr($color, 0, 1) != '#') {
// decode color name
if (isset($this->webcolor[$color])) {
$color_code = $this->webcolor[$color];
} else {
return false;
}
} else {
$color_code = substr($color, 1);
}
// RGB VALUE
switch (strlen($color_code)) {
case 3: {
// three-digit hexadecimal representation
$r = substr($color_code, 0, 1);
$g = substr($color_code, 1, 1);
$b = substr($color_code, 2, 1);
$returncolor['R'] = hexdec($r.$r);
$returncolor['G'] = hexdec($g.$g);
$returncolor['B'] = hexdec($b.$b);
break;
}
case 6: {
// six-digit hexadecimal representation
$returncolor['R'] = hexdec(substr($color_code, 0, 2));
$returncolor['G'] = hexdec(substr($color_code, 2, 2));
$returncolor['B'] = hexdec(substr($color_code, 4, 2));
break;
}
}
return $returncolor;
}
TCPDF::convertStringToHexString (   $s)
protected

Convert string to hexadecimal string (byte string)

Parameters
string$sstring to convert
Returns
byte string protected
Since
5.0.010 (2010-05-17)
Author
Nicola Asuni

Definition at line 12100 of file tcpdf.php.

{
$bs = '';
$chars = preg_split('//', $s, -1, PREG_SPLIT_NO_EMPTY);
foreach ($chars as $c) {
$bs .= sprintf('%02s', dechex(ord($c)));
}
return $bs;
}
TCPDF::convertSVGtMatrix (   $tm)
protected

Convert SVG transformation matrix to PDF.

Parameters
array$tmoriginal SVG transformation matrix
Returns
array transformation matrix protected
Since
5.0.000 (2010-05-02)

Definition at line 24439 of file tcpdf.php.

References $d, $f, $x, and $y.

{
$a = $tm[0];
$b = -$tm[1];
$c = -$tm[2];
$d = $tm[3];
$e = $this->getHTMLUnitToUnits($tm[4], 1, $this->svgunit, false) * $this->k;
$f = -$this->getHTMLUnitToUnits($tm[5], 1, $this->svgunit, false) * $this->k;
$x = 0;
$y = $this->h * $this->k;
$e = ($x * (1 - $a)) - ($y * $c) + $e;
$f = ($y * (1 - $d)) - ($x * $b) + $f;
return array($a, $b, $c, $d, $e, $f);
}
TCPDF::CoonsPatchMesh (   $x,
  $y,
  $w,
  $h,
  $col1 = array(),
  $col2 = array(),
  $col3 = array(),
  $col4 = array(),
  $coords = array(0.00,0.0,0.33,0.00,0.67,0.00,1.00,0.00,1.00,0.33,1.00,0.67,1.00,1.00,0.67,1.00,0.33,1.00,0.00,1.00,0.00,0.67,0.00,0.33),
  $coords_min = 0,
  $coords_max = 1,
  $antialias = false 
)

Paints a coons patch mesh.

Parameters
float$xabscissa of the top left corner of the rectangle.
float$yordinate of the top left corner of the rectangle.
float$wwidth of the rectangle.
float$hheight of the rectangle.
array$col1first color (lower left corner) (RGB components).
array$col2second color (lower right corner) (RGB components).
array$col3third color (upper right corner) (RGB components).
array$col4fourth color (upper left corner) (RGB components).
array$coords
  • for one patch mesh: array(float x1, float y1, .... float x12, float y12): 12 pairs of coordinates (normally from 0 to 1) which specify the Bezier control points that define the patch. First pair is the lower left edge point, next is its right control point (control point 2). Then the other points are defined in the order: control point 1, edge point, control point 2 going counter-clockwise around the patch. Last (x12, y12) is the first edge point's left control point (control point 1).
  • for two or more patch meshes: array[number of patches]: arrays with the following keys for each patch: f: where to put that patch (0 = first patch, 1, 2, 3 = right, top and left of precedent patch - I didn't figure this out completely - just try and error ;-) points: 12 pairs of coordinates of the Bezier control points as above for the first patch, 8 pairs of coordinates for the following patches, ignoring the coordinates already defined by the precedent patch (I also didn't figure out the order of these - also: try and see what's happening) colors: must be 4 colors for the first patch, 2 colors for the following patches
array$coords_minminimum value used by the coordinates. If a coordinate's value is smaller than this it will be cut to coords_min. default: 0
array$coords_maxmaximum value used by the coordinates. If a coordinate's value is greater than this it will be cut to coords_max. default: 1
boolean$antialiasA flag indicating whether to filter the shading function to prevent aliasing artifacts.
Author
Andreas Würmser, Nicola Asuni
Since
3.1.000 (2008-06-09) public

Definition at line 15832 of file tcpdf.php.

References $x, and $y.

{
$this->Clip($x, $y, $w, $h);
$n = count($this->gradients) + 1;
$this->gradients[$n] = array();
$this->gradients[$n]['type'] = 6; //coons patch mesh
$this->gradients[$n]['coords'] = array();
$this->gradients[$n]['antialias'] = $antialias;
$this->gradients[$n]['colors'] = array();
$this->gradients[$n]['transparency'] = false;
//check the coords array if it is the simple array or the multi patch array
if (!isset($coords[0]['f'])) {
//simple array -> convert to multi patch array
if (!isset($col1[1])) {
$col1[1] = $col1[2] = $col1[0];
}
if (!isset($col2[1])) {
$col2[1] = $col2[2] = $col2[0];
}
if (!isset($col3[1])) {
$col3[1] = $col3[2] = $col3[0];
}
if (!isset($col4[1])) {
$col4[1] = $col4[2] = $col4[0];
}
$patch_array[0]['f'] = 0;
$patch_array[0]['points'] = $coords;
$patch_array[0]['colors'][0]['r'] = $col1[0];
$patch_array[0]['colors'][0]['g'] = $col1[1];
$patch_array[0]['colors'][0]['b'] = $col1[2];
$patch_array[0]['colors'][1]['r'] = $col2[0];
$patch_array[0]['colors'][1]['g'] = $col2[1];
$patch_array[0]['colors'][1]['b'] = $col2[2];
$patch_array[0]['colors'][2]['r'] = $col3[0];
$patch_array[0]['colors'][2]['g'] = $col3[1];
$patch_array[0]['colors'][2]['b'] = $col3[2];
$patch_array[0]['colors'][3]['r'] = $col4[0];
$patch_array[0]['colors'][3]['g'] = $col4[1];
$patch_array[0]['colors'][3]['b'] = $col4[2];
} else {
//multi patch array
$patch_array = $coords;
}
$bpcd = 65535; //16 bits per coordinate
//build the data stream
$this->gradients[$n]['stream'] = '';
$count_patch = count($patch_array);
for ($i=0; $i < $count_patch; ++$i) {
$this->gradients[$n]['stream'] .= chr($patch_array[$i]['f']); //start with the edge flag as 8 bit
$count_points = count($patch_array[$i]['points']);
for ($j=0; $j < $count_points; ++$j) {
//each point as 16 bit
$patch_array[$i]['points'][$j] = (($patch_array[$i]['points'][$j] - $coords_min) / ($coords_max - $coords_min)) * $bpcd;
if ($patch_array[$i]['points'][$j] < 0) {
$patch_array[$i]['points'][$j] = 0;
}
if ($patch_array[$i]['points'][$j] > $bpcd) {
$patch_array[$i]['points'][$j] = $bpcd;
}
$this->gradients[$n]['stream'] .= chr(floor($patch_array[$i]['points'][$j] / 256));
$this->gradients[$n]['stream'] .= chr(floor($patch_array[$i]['points'][$j] % 256));
}
$count_cols = count($patch_array[$i]['colors']);
for ($j=0; $j < $count_cols; ++$j) {
//each color component as 8 bit
$this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['r']);
$this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['g']);
$this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['b']);
}
}
//paint the gradient
$this->_out('/Sh'.$n.' sh');
//restore previous Graphic State
$this->_out('Q');
}
TCPDF::copyPage (   $page = 0)

Clone the specified page to a new page.

Parameters
int$pagenumber of page to copy (0 = current page)
Returns
true in case of success, false in case of error. public
Since
4.9.015 (2010-04-20)

Definition at line 22578 of file tcpdf.php.

{
if ($page == 0) {
// default value
}
if (($page < 1) OR ($page > $this->numpages)) {
return false;
}
if ($page == $this->page) {
// close the page before cloning it
$this->endPage();
}
// copy all page-related states
$this->page = $this->numpages;
$this->pages[$this->page] = $this->pages[$page];
$this->pagedim[$this->page] = $this->pagedim[$page];
$this->pagelen[$this->page] = $this->pagelen[$page];
$this->intmrk[$this->page] = $this->intmrk[$page];
$this->bordermrk[$this->page] = $this->bordermrk[$page];
$this->cntmrk[$this->page] = $this->cntmrk[$page];
$this->pageopen[$this->page] = false;
if (isset($this->footerpos[$page])) {
$this->footerpos[$this->page] = $this->footerpos[$page];
}
if (isset($this->footerlen[$page])) {
$this->footerlen[$this->page] = $this->footerlen[$page];
}
if (isset($this->transfmrk[$page])) {
$this->transfmrk[$this->page] = $this->transfmrk[$page];
}
if (isset($this->PageAnnots[$page])) {
$this->PageAnnots[$this->page] = $this->PageAnnots[$page];
}
if (isset($this->newpagegroup[$page])) {
$this->newpagegroup[$this->page] = $this->newpagegroup[$page];
}
// copy outlines
$tmpoutlines = $this->outlines;
foreach ($tmpoutlines as $key => $outline) {
if ($outline['p'] == $page) {
$this->outlines[] = array('t' => $outline['t'], 'l' => $outline['l'], 'y' => $outline['y'], 'p' => $this->page);
}
}
// copy links
$tmplinks = $this->links;
foreach ($tmplinks as $key => $link) {
if ($link[0] == $page) {
$this->links[] = array($this->page, $link[1]);
}
}
// return to last page
$this->lastPage(true);
return true;
}
TCPDF::cropMark (   $x,
  $y,
  $w,
  $h,
  $type = 'A,
,
,
D'  ,
  $color = array(0,0,0) 
)

Paints crop mark.

Parameters
float$xabscissa of the crop mark center.
float$yordinate of the crop mark center.
float$wwidth of the crop mark.
float$hheight of the crop mark.
string$typetype of crop mark, one sybol per type separated by comma: A = top left, B = top right, C = bottom left, D = bottom right.
array$colorcrop mark color (default black).
Author
Nicola Asuni
Since
4.9.000 (2010-03-26) public

Definition at line 15690 of file tcpdf.php.

References $dw, $type, $x, and $y.

{
$this->SetLineStyle(array('width' => (0.5 / $this->k), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $color));
$crops = explode(',', $type);
$numcrops = count($crops); // number of crop marks to print
$dw = $w / 4; // horizontal space to leave before the intersection point
$dh = $h / 4; // vertical space to leave before the intersection point
foreach ($crops as $crop) {
switch ($crop) {
case 'A': {
$x1 = $x;
$y1 = $y - $h;
$x2 = $x;
$y2 = $y - $dh;
$x3 = $x - $w;
$y3 = $y;
$x4 = $x - $dw;
$y4 = $y;
break;
}
case 'B': {
$x1 = $x;
$y1 = $y - $h;
$x2 = $x;
$y2 = $y - $dh;
$x3 = $x + $dw;
$y3 = $y;
$x4 = $x + $w;
$y4 = $y;
break;
}
case 'C': {
$x1 = $x - $w;
$y1 = $y;
$x2 = $x - $dw;
$y2 = $y;
$x3 = $x;
$y3 = $y + $dh;
$x4 = $x;
$y4 = $y + $h;
break;
}
case 'D': {
$x1 = $x + $dw;
$y1 = $y;
$x2 = $x + $w;
$y2 = $y;
$x3 = $x;
$y3 = $y + $dh;
$x4 = $x;
$y4 = $y + $h;
break;
}
}
$this->Line($x1, $y1, $x2, $y2);
$this->Line($x3, $y3, $x4, $y4);
}
}
TCPDF::Curve (   $x0,
  $y0,
  $x1,
  $y1,
  $x2,
  $y2,
  $x3,
  $y3,
  $style = '',
  $line_style = array(),
  $fill_color = array() 
)

Draws a Bezier curve.

The Bezier curve is a tangent to the line between the control points at either end of the curve.

Parameters
float$x0Abscissa of start point.
float$y0Ordinate of start point.
float$x1Abscissa of control point 1.
float$y1Ordinate of control point 1.
float$x2Abscissa of control point 2.
float$y2Ordinate of control point 2.
float$x3Abscissa of end point.
float$y3Ordinate of end point.
string$styleStyle of rendering. See the getPathPaintOperator() function for more information.
array$line_styleLine style of curve. Array like for SetLineStyle. Default value: default line style (empty array).
array$fill_colorFill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). public
See Also
SetLineStyle()
Since
2.1.000 (2008-01-08)

Definition at line 12739 of file tcpdf.php.

{
if (!(false === strpos($style, 'F')) AND isset($fill_color)) {
$this->SetFillColorArray($fill_color);
}
$op = $this->getPathPaintOperator($style);
if ($line_style) {
$this->SetLineStyle($line_style);
}
$this->_outPoint($x0, $y0);
$this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3);
$this->_out($op);
}
TCPDF::deletePage (   $page)

Remove the specified page.

Parameters
int$pagepage to remove
Returns
true in case of success, false in case of error. public
Since
4.6.004 (2009-04-23)

Definition at line 22435 of file tcpdf.php.

{
if (($page < 1) OR ($page > $this->numpages)) {
return false;
}
// delete current page
unset($this->pages[$page]);
unset($this->pagedim[$page]);
unset($this->pagelen[$page]);
unset($this->intmrk[$page]);
unset($this->bordermrk[$page]);
unset($this->cntmrk[$page]);
if (isset($this->footerpos[$page])) {
unset($this->footerpos[$page]);
}
if (isset($this->footerlen[$page])) {
unset($this->footerlen[$page]);
}
if (isset($this->transfmrk[$page])) {
unset($this->transfmrk[$page]);
}
if (isset($this->PageAnnots[$page])) {
unset($this->PageAnnots[$page]);
}
if (isset($this->newpagegroup[$page])) {
unset($this->newpagegroup[$page]);
}
if (isset($this->pageopen[$page])) {
unset($this->pageopen[$page]);
}
// update remaining pages
for ($i = $page; $i < $this->numpages; ++$i) {
$j = $i + 1;
// shift pages
$this->pages[$i] = $this->pages[$j];
$this->pagedim[$i] = $this->pagedim[$j];
$this->pagelen[$i] = $this->pagelen[$j];
$this->intmrk[$i] = $this->intmrk[$j];
$this->bordermrk[$i] = $this->bordermrk[$j];
$this->cntmrk[$i] = $this->cntmrk[$j];
if (isset($this->footerpos[$j])) {
$this->footerpos[$i] = $this->footerpos[$j];
} elseif (isset($this->footerpos[$i])) {
unset($this->footerpos[$i]);
}
if (isset($this->footerlen[$j])) {
$this->footerlen[$i] = $this->footerlen[$j];
} elseif (isset($this->footerlen[$i])) {
unset($this->footerlen[$i]);
}
if (isset($this->transfmrk[$j])) {
$this->transfmrk[$i] = $this->transfmrk[$j];
} elseif (isset($this->transfmrk[$i])) {
unset($this->transfmrk[$i]);
}
if (isset($this->PageAnnots[$j])) {
$this->PageAnnots[$i] = $this->PageAnnots[$j];
} elseif (isset($this->PageAnnots[$i])) {
unset($this->PageAnnots[$i]);
}
if (isset($this->newpagegroup[$j])) {
$this->newpagegroup[$i] = $this->newpagegroup[$j];
} elseif (isset($this->newpagegroup[$i])) {
unset($this->newpagegroup[$i]);
}
if (isset($this->pageopen[$j])) {
$this->pageopen[$i] = $this->pageopen[$j];
} elseif (isset($this->pageopen[$i])) {
unset($this->pageopen[$i]);
}
}
// remove last page
unset($this->pages[$this->numpages]);
unset($this->pagedim[$this->numpages]);
unset($this->pagelen[$this->numpages]);
unset($this->intmrk[$this->numpages]);
unset($this->bordermrk[$this->numpages]);
unset($this->cntmrk[$this->numpages]);
if (isset($this->footerpos[$this->numpages])) {
unset($this->footerpos[$this->numpages]);
}
if (isset($this->footerlen[$this->numpages])) {
unset($this->footerlen[$this->numpages]);
}
if (isset($this->transfmrk[$this->numpages])) {
unset($this->transfmrk[$this->numpages]);
}
if (isset($this->PageAnnots[$this->numpages])) {
unset($this->PageAnnots[$this->numpages]);
}
if (isset($this->newpagegroup[$this->numpages])) {
unset($this->newpagegroup[$this->numpages]);
}
if (isset($this->pageopen[$this->numpages])) {
unset($this->pageopen[$this->numpages]);
}
$this->page = $this->numpages;
// adjust outlines
$tmpoutlines = $this->outlines;
foreach ($tmpoutlines as $key => $outline) {
if ($outline['p'] > $page) {
$this->outlines[$key]['p'] = $outline['p'] - 1;
} elseif ($outline['p'] == $page) {
unset($this->outlines[$key]);
}
}
// adjust links
$tmplinks = $this->links;
foreach ($tmplinks as $key => $link) {
if ($link[0] > $page) {
$this->links[$key][0] = $link[0] - 1;
} elseif ($link[0] == $page) {
unset($this->links[$key]);
}
}
// adjust javascript
$tmpjavascript = $this->javascript;
global $jpage;
$jpage = $page;
$this->javascript = preg_replace_callback('/this\.addField\(\'([^\']*)\',\'([^\']*)\',([0-9]+)/',
create_function('$matches', 'global $jpage;
$pagenum = intval($matches[3]) + 1;
if ($pagenum >= $jpage) {
$newpage = ($pagenum - 1);
} elseif ($pagenum == $jpage) {
$newpage = 1;
} else {
$newpage = $pagenum;
}
--$newpage;
return "this.addField(\'".$matches[1]."\',\'".$matches[2]."\',".$newpage."";'), $tmpjavascript);
// return to last page
$this->lastPage(true);
return true;
}
TCPDF::drawHTMLTagBorder (   $tag,
  $xmax 
)
protected

Draw an HTML block border and fill.

Parameters
array$tagarray of tag properties.
int$xmaxend X coordinate for border. protected
Since
5.7.000 (2010-08-03)

Definition at line 21294 of file tcpdf.php.

References $x, and $y.

{
if (!isset($tag['borderposition'])) {
// nothing to draw
return;
}
$prev_x = $this->x;
$prev_y = $this->y;
$prev_lasth = $this->lasth;
$border = 0;
$fill = false;
$this->lasth = 0;
if (isset($tag['border']) AND !empty($tag['border'])) {
// get border style
$border = $tag['border'];
if (!$this->empty_string($this->thead) AND (!$this->inthead)) {
// border for table header
$border = $this->getBorderMode($border, $position='middle');
}
}
if (isset($tag['bgcolor']) AND ($tag['bgcolor'] !== false)) {
// get background color
$old_bgcolor = $this->bgcolor;
$this->SetFillColorArray($tag['bgcolor']);
$fill = true;
}
if (!$border AND !$fill) {
// nothing to draw
return;
}
if (isset($tag['attribute']['cellspacing'])) {
$cellspacing = $this->getHTMLUnitToUnits($tag['attribute']['cellspacing'], 1, 'px');
} else {
$cellspacing = 0;
}
if (($tag['value'] != 'table') AND (is_array($border)) AND (!empty($border))) {
// draw the border externally respect the sqare edge.
$border['mode'] = 'ext';
}
if ($this->rtl) {
if ($xmax >= $tag['borderposition']['x']) {
$xmax = $tag['borderposition']['xmax'];
}
$w = ($tag['borderposition']['x'] - $xmax);
} else {
if ($xmax <= $tag['borderposition']['x']) {
$xmax = $tag['borderposition']['xmax'];
}
$w = ($xmax - $tag['borderposition']['x']);
}
if ($w <= 0) {
return;
}
$w += $cellspacing;
$startpage = $tag['borderposition']['page'];
$startcolumn = $tag['borderposition']['column'];
$x = $tag['borderposition']['x'];
$y = $tag['borderposition']['y'];
$endpage = $this->page;
$starty = $tag['borderposition']['y'] - $cellspacing;
$currentY = $this->y;
$this->x = $x;
// get latest column
$endcolumn = $this->current_column;
if ($this->num_columns == 0) {
$this->num_columns = 1;
}
// get border modes
$border_start = $this->getBorderMode($border, $position='start');
$border_end = $this->getBorderMode($border, $position='end');
$border_middle = $this->getBorderMode($border, $position='middle');
// design borders around HTML cells.
for ($page = $startpage; $page <= $endpage; ++$page) { // for each page
$ccode = '';
$this->setPage($page);
if ($this->num_columns < 2) {
// single-column mode
$this->x = $x;
$this->y = $this->tMargin;
}
// account for margin changes
if ($page > $startpage) {
if (($this->rtl) AND ($this->pagedim[$page]['orm'] != $this->pagedim[$startpage]['orm'])) {
$this->x -= ($this->pagedim[$page]['orm'] - $this->pagedim[$startpage]['orm']);
} elseif ((!$this->rtl) AND ($this->pagedim[$page]['olm'] != $this->pagedim[$startpage]['olm'])) {
$this->x += ($this->pagedim[$page]['olm'] - $this->pagedim[$startpage]['olm']);
}
}
if ($startpage == $endpage) {
// single page
for ($column = $startcolumn; $column <= $endcolumn; ++$column) { // for each column
$this->selectColumn($column);
if ($startcolumn == $endcolumn) { // single column
$cborder = $border;
$h = ($currentY - $y) + $cellspacing;
$this->y = $starty;
} elseif ($column == $startcolumn) { // first column
$cborder = $border_start;
$this->y = $starty;
$h = $this->h - $this->y - $this->bMargin;
} elseif ($column == $endcolumn) { // end column
$cborder = $border_end;
$h = $currentY - $this->y;
} else { // middle column
$cborder = $border_middle;
$h = $this->h - $this->y - $this->bMargin;
}
$ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
} // end for each column
} elseif ($page == $startpage) { // first page
for ($column = $startcolumn; $column < $this->num_columns; ++$column) { // for each column
$this->selectColumn($column);
if ($column == $startcolumn) { // first column
$cborder = $border_start;
$this->y = $starty;
$h = $this->h - $this->y - $this->bMargin;
} else { // middle column
$cborder = $border_middle;
$h = $this->h - $this->y - $this->bMargin;
}
$ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
} // end for each column
} elseif ($page == $endpage) { // last page
for ($column = 0; $column <= $endcolumn; ++$column) { // for each column
$this->selectColumn($column);
if ($column == $endcolumn) {
// end column
$cborder = $border_end;
$h = $currentY - $this->y;
} else {
// middle column
$cborder = $border_middle;
$h = $this->h - $this->y - $this->bMargin;
}
$ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
} // end for each column
} else { // middle page
for ($column = 0; $column < $this->num_columns; ++$column) { // for each column
$this->selectColumn($column);
$cborder = $border_middle;
$h = $this->h - $this->y - $this->bMargin;
$ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
} // end for each column
}
if ($cborder OR $fill) {
// draw border and fill
if ($this->inxobj) {
// we are inside an XObject template
if (end($this->xobjects[$this->xobjid]['transfmrk']) !== false) {
$pagemarkkey = key($this->xobjects[$this->xobjid]['transfmrk']);
$pagemark = &$this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey];
} else {
$pagemark = &$this->xobjects[$this->xobjid]['intmrk'];
}
$pagebuff = $this->xobjects[$this->xobjid]['outdata'];
$pstart = substr($pagebuff, 0, $pagemark);
$pend = substr($pagebuff, $pagemark);
$this->xobjects[$this->xobjid]['outdata'] = $pstart.$ccode.$pend;
$pagemark += strlen($ccode);
} else {
if (end($this->transfmrk[$this->page]) !== false) {
$pagemarkkey = key($this->transfmrk[$this->page]);
$pagemark = &$this->transfmrk[$this->page][$pagemarkkey];
} elseif ($this->InFooter) {
$pagemark = &$this->footerpos[$this->page];
} else {
$pagemark = &$this->intmrk[$this->page];
}
$pagebuff = $this->getPageBuffer($this->page);
$pstart = substr($pagebuff, 0, $this->bordermrk[$this->page]);
$pend = substr($pagebuff, $this->bordermrk[$this->page]);
$this->setPageBuffer($this->page, $pstart.$ccode.$pend);
$offsetlen = strlen($ccode);
$this->bordermrk[$this->page] += $offsetlen;
$this->cntmrk[$this->page] += $offsetlen;
$pagemark += $offsetlen;
}
}
} // end for each page
if (isset($old_bgcolor)) {
// restore background color
$this->SetFillColorArray($old_bgcolor);
}
// restore pointer position
$this->x = $prev_x;
$this->y = $prev_y;
$this->lasth = $prev_lasth;
}
TCPDF::Ellipse (   $x0,
  $y0,
  $rx,
  $ry = '',
  $angle = 0,
  $astart = 0,
  $afinish = 360,
  $style = '',
  $line_style = array(),
  $fill_color = array(),
  $nc = 2 
)

Draws an ellipse.

An ellipse is formed from n Bezier curves.

Parameters
float$x0Abscissa of center point.
float$y0Ordinate of center point.
float$rxHorizontal radius.
float$ryVertical radius (if ry = 0 then is a circle, see Circle). Default value: 0.
float$angle,:Angle oriented (anti-clockwise). Default value: 0.
float$astart,:Angle start of draw line. Default value: 0.
float$afinish,:Angle finish of draw line. Default value: 360.
string$styleStyle of rendering. See the getPathPaintOperator() function for more information.
array$line_styleLine style of ellipse. Array like for SetLineStyle. Default value: default line style (empty array).
array$fill_colorFill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array).
integer$ncNumber of curves used to draw a 90 degrees portion of ellipse.
Author
Nicola Asuni public
Since
2.1.000 (2008-01-08)

Definition at line 12803 of file tcpdf.php.

{
if ($this->empty_string($ry) OR ($ry == 0)) {
$ry = $rx;
}
if (!(false === strpos($style, 'F')) AND isset($fill_color)) {
$this->SetFillColorArray($fill_color);
}
$op = $this->getPathPaintOperator($style);
if ($op == 'f') {
$line_style = array();
}
if ($line_style) {
$this->SetLineStyle($line_style);
}
$this->_outellipticalarc($x0, $y0, $rx, $ry, $angle, $astart, $afinish, false, $nc);
$this->_out($op);
}
TCPDF::empty_string (   $str)

Determine whether a string is empty.

Parameters
string$strstring to be checked
Returns
boolean true if string is empty public
Since
4.5.044 (2009-04-16)

Definition at line 22998 of file tcpdf.php.

Referenced by AddFont(), Annotation(), checkPageBreak(), GetArrStringWidth(), getCellCode(), getImageFileType(), getNumLines(), MultiCell(), setPageOrientation(), and setTableHeader().

{
return (is_null($str) OR (is_string($str) AND (strlen($str) == 0)));
}

+ Here is the caller graph for this function:

TCPDF::endPage (   $tocpage = false)

Terminate the current page.

Parameters
boolean$tocpageif true set the tocpage state to false (end the page used to display Table Of Content). public
Since
4.2.010 (2008-11-14)
See Also
AddPage(), startPage(), addTOCPage(), endTOCPage()

Definition at line 3761 of file tcpdf.php.

References $page, $tocpage, _endpage(), and setFooter().

Referenced by AddPage(), Close(), and endTOCPage().

{
// check if page is already closed
if (($this->page == 0) OR ($this->numpages > $this->page) OR (!$this->pageopen[$this->page])) {
return;
}
$this->InFooter = true;
// print page footer
$this->setFooter();
// close page
$this->_endpage();
// mark page as closed
$this->pageopen[$this->page] = false;
$this->InFooter = false;
if ($tocpage) {
$this->tocpage = false;
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::endSVGElementHandler (   $parser,
  $name 
)
protected

Sets the closing SVG element handler function for the XML parser.

Parameters
resource$parserThe first parameter, parser, is a reference to the XML parser calling the handler.
string$nameThe second parameter, name, contains the name of the element for which this handler is called. If case-folding is in effect for this parser, the element name will be in uppercase letters.
Author
Nicola Asuni
Since
5.0.000 (2010-05-02) protected

Definition at line 25550 of file tcpdf.php.

References $name.

{
switch($name) {
case 'defs': {
$this->svgdefsmode = false;
break;
}
// clipPath
case 'clipPath': {
$this->svgclipmode = false;
break;
}
case 'g': {
// ungroup: remove last style from array
array_pop($this->svgstyles);
$this->StopTransform();
break;
}
case 'text':
case 'tspan': {
if ($this->svgtextmode['invisible']) {
// This implementation must be fixed to following the rule:
// If the 'visibility' property is set to hidden on a 'tspan', 'tref' or 'altGlyph' element, then the text is invisible but still takes up space in text layout calculations.
break;
}
// print text
$text = $this->stringTrim($this->svgtext);
if ($this->svgtextmode['text-anchor'] != 'start') {
$textlen = $this->GetStringWidth($text);
// check if string is RTL text
if ($this->svgtextmode['text-anchor'] == 'end') {
if ($this->svgtextmode['rtl']) {
$this->x += $textlen;
} else {
$this->x -= $textlen;
}
} elseif ($this->svgtextmode['text-anchor'] == 'middle') {
if ($this->svgtextmode['rtl']) {
$this->x += ($textlen / 2);
} else {
$this->x -= ($textlen / 2);
}
}
}
$this->setTextRenderingMode($this->svgtextmode['stroke'], true, false);
$this->Cell(0, 0, $text, 0, 0, '', false, '', 0, false, 'L', 'T');
// restore previous rendering mode
$this->textrendermode = $textrendermode;
$this->textstrokewidth = $textstrokewidth;
$this->svgtext = '';
$this->StopTransform();
array_pop($this->svgstyles);
break;
}
default: {
break;
}
}
}
TCPDF::endTemplate ( )

End the current XObject Template started with startTemplate() and restore the previous graphic state.

An XObject Template is a PDF block that is a self-contained description of any sequence of graphics objects (including path objects, text objects, and sampled images). An XObject Template may be painted multiple times, either on several pages or at several locations on the same page and produces the same results each time, subject only to the graphics state at the time it is invoked.

Returns
int the XObject Template ID in case of success or false in case of error.
Author
Nicola Asuni public
Since
5.8.017 (2010-08-24)
See Also
startTemplate(), printTemplate()

Definition at line 23680 of file tcpdf.php.

{
if (!$this->inxobj) {
// we are not inside a template
return false;
}
$this->inxobj = false;
// restore previous graphic state
$this->setGraphicVars($this->xobjects[$this->xobjid]['gvars'], true);
return $this->xobjid;
}
TCPDF::endTOCPage ( )

Terminate the current TOC (Table Of Content) page public.

Since
5.0.001 (2010-05-06)
See Also
AddPage(), startPage(), endPage(), addTOCPage()

Definition at line 3722 of file tcpdf.php.

References endPage().

{
$this->endPage(true);
}

+ Here is the call graph for this function:

TCPDF::Error (   $msg)

This method is automatically called in case of fatal error; it simply outputs the message and halts the execution.

An inherited class may override it to customize the error handling but should always halt the script, or the resulting document would probably be invalid. 2004-06-11 :: Nicola Asuni : changed bold tag with strong

Parameters
string$msgThe error message public
Since
1.0

Definition at line 3562 of file tcpdf.php.

References _destroy().

Referenced by _parsejpeg(), _parsepng(), AddFont(), Image(), SetDisplayMode(), SetDrawSpotColor(), SetFillSpotColor(), setPage(), setPageUnit(), and SetTextSpotColor().

{
// unset all class variables
$this->_destroy(true);
// exit program and print error
die('<strong>TCPDF ERROR: </strong>'.$msg);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::extractCSSproperties (   $cssdata)
protected

Extracts the CSS properties from a CSS string.

Parameters
string$cssdatastring containing CSS definitions.
Returns
An array where the keys are the CSS selectors and the values are the CSS properties.
Author
Nicola Asuni
Since
5.1.000 (2010-05-25) protected

Definition at line 17269 of file tcpdf.php.

References $d, and $type.

{
if (empty($cssdata)) {
return array();
}
// remove comments
$cssdata = preg_replace('/\/\*[^\*]*\*\//', '', $cssdata);
// remove newlines and multiple spaces
$cssdata = preg_replace('/[\s]+/', ' ', $cssdata);
// remove some spaces
$cssdata = preg_replace('/[\s]*([;:\{\}]{1})[\s]*/', '\\1', $cssdata);
// remove empty blocks
$cssdata = preg_replace('/([^\}\{]+)\{\}/', '', $cssdata);
// replace media type parenthesis
$cssdata = preg_replace('/@media[\s]+([^\{]*)\{/i', '@media \\1§', $cssdata);
$cssdata = preg_replace('/\}\}/si', '}§', $cssdata);
// trim string
$cssdata = trim($cssdata);
// find media blocks (all, braille, embossed, handheld, print, projection, screen, speech, tty, tv)
$cssblocks = array();
$matches = array();
if (preg_match_all('/@media[\s]+([^\§]*)§([^§]*)§/i', $cssdata, $matches) > 0) {
foreach ($matches[1] as $key => $type) {
$cssblocks[$type] = $matches[2][$key];
}
// remove media blocks
$cssdata = preg_replace('/@media[\s]+([^\§]*)§([^§]*)§/i', '', $cssdata);
}
// keep 'all' and 'print' media, other media types are discarded
if (isset($cssblocks['all']) AND !empty($cssblocks['all'])) {
$cssdata .= $cssblocks['all'];
}
if (isset($cssblocks['print']) AND !empty($cssblocks['print'])) {
$cssdata .= $cssblocks['print'];
}
// reset css blocks array
$cssblocks = array();
$matches = array();
// explode css data string into array
if (substr($cssdata, -1) == '}') {
// remove last parethesis
$cssdata = substr($cssdata, 0, -1);
}
$matches = explode('}', $cssdata);
foreach ($matches as $key => $block) {
// index 0 contains the CSS selector, index 1 contains CSS properties
$cssblocks[$key] = explode('{', $block);
if (!isset($cssblocks[$key][1])) {
// remove empty definitions
unset($cssblocks[$key]);
}
}
// split groups of selectors (comma-separated list of selectors)
foreach ($cssblocks as $key => $block) {
if (strpos($block[0], ',') > 0) {
$selectors = explode(',', $block[0]);
foreach ($selectors as $sel) {
$cssblocks[] = array(0 => trim($sel), 1 => $block[1]);
}
unset($cssblocks[$key]);
}
}
// covert array to selector => properties
$cssdata = array();
foreach ($cssblocks as $block) {
$selector = $block[0];
// calculate selector's specificity
$matches = array();
$a = 0; // the declaration is not from is a 'style' attribute
$b = intval(preg_match_all('/[\#]/', $selector, $matches)); // number of ID attributes
$c = intval(preg_match_all('/[\[\.]/', $selector, $matches)); // number of other attributes
$c += intval(preg_match_all('/[\:]link|visited|hover|active|focus|target|lang|enabled|disabled|checked|indeterminate|root|nth|first|last|only|empty|contains|not/i', $selector, $matches)); // number of pseudo-classes
$d = intval(preg_match_all('/[>\+\~\s]{1}[a-zA-Z0-9\*]+/', ' '.$selector, $matches)); // number of element names
$d += intval(preg_match_all('/[\:][\:]/', $selector, $matches)); // number of pseudo-elements
$specificity = $a.$b.$c.$d;
// add specificity to the beginning of the selector
$cssdata[$specificity.' '.$selector] = $block[1];
}
// sort selectors alphabetically to account for specificity
ksort($cssdata, SORT_STRING);
// return array
return $cssdata;
}
TCPDF::fitBlock ( $w,
$h,
$x,
$y,
  $fitonpage = false 
)
protected

Set the block dimensions accounting for page breaks and page/column fitting.

Parameters
float$wwidth
float$hheight
float$xX coordinate
float$yY coodiante
boolean$fitonpageif true the block is resized to not exceed page dimensions. protected
Since
5.5.009 (2010-07-05)

Definition at line 6964 of file tcpdf.php.

References $h, $lMargin, $PageBreakTrigger, $rMargin, $tMargin, $w, $x, $y, and checkPageBreak().

Referenced by Image().

{
// resize the block to be vertically contained on a single page or single column
if ($fitonpage OR $this->AutoPageBreak) {
$ratio_wh = ($w / $h);
if ($h > ($this->PageBreakTrigger - $this->tMargin)) {
$h = $this->PageBreakTrigger - $this->tMargin;
$w = ($h * $ratio_wh);
}
// resize the block to be horizontally contained on a single page or single column
if ($fitonpage) {
$maxw = ($this->w - $this->lMargin - $this->rMargin);
if ($w > $maxw) {
$w = $maxw;
$h = ($w / $ratio_wh);
}
}
}
// Check whether we need a new page or new column first as this does not fit
$prev_x = $this->x;
$prev_y = $this->y;
if ($this->checkPageBreak($h, $y) OR ($this->y < $prev_y)) {
if ($this->rtl) {
$x += ($prev_x - $this->x);
} else {
$x += ($this->x - $prev_x);
}
}
// resize the block to be contained on the remaining available page or column space
if ($fitonpage) {
$ratio_wh = ($w / $h);
$h = $this->PageBreakTrigger - $y;
$w = ($h * $ratio_wh);
}
if ((!$this->rtl) AND (($x + $w) > ($this->w - $this->rMargin))) {
$w = $this->w - $this->rMargin - $x;
$h = ($w / $ratio_wh);
} elseif (($this->rtl) AND (($x - $w) < ($this->lMargin))) {
$h = ($w / $ratio_wh);
}
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::Footer ( )

This method is used to render the page footer.

It is automatically called by AddPage() and could be overwritten in your own inherited class. public

Definition at line 4011 of file tcpdf.php.

References $barcode, Cell(), getAliasNbPages(), getAliasNumPage(), getBarcode(), getFooterMargin(), getOriginalMargins(), getPageGroupAlias(), getPageNumGroupAlias(), getPageWidth(), getRTL(), getScaleFactor(), GetY(), Ln(), SetLineStyle(), SetTextColor(), SetX(), SetY(), and write1DBarcode().

Referenced by setFooter().

{
$cur_y = $this->GetY();
$ormargins = $this->getOriginalMargins();
$this->SetTextColor(0, 0, 0);
//set style for cell border
$line_width = 0.85 / $this->getScaleFactor();
$this->SetLineStyle(array('width' => $line_width, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)));
//print document barcode
$barcode = $this->getBarcode();
if (!empty($barcode)) {
$this->Ln($line_width);
$barcode_width = round(($this->getPageWidth() - $ormargins['left'] - $ormargins['right']) / 3);
$style = array(
'position' => $this->rtl?'R':'L',
'align' => $this->rtl?'R':'L',
'stretch' => false,
'fitwidth' => true,
'cellfitalign' => '',
'border' => false,
'padding' => 0,
'fgcolor' => array(0,0,0),
'bgcolor' => false,
'text' => false
);
$this->write1DBarcode($barcode, 'C128B', '', $cur_y + $line_width, '', (($this->getFooterMargin() / 3) - $line_width), 0.3, $style, '');
}
if (empty($this->pagegroups)) {
$pagenumtxt = $this->l['w_page'].' '.$this->getAliasNumPage().' / '.$this->getAliasNbPages();
} else {
$pagenumtxt = $this->l['w_page'].' '.$this->getPageNumGroupAlias().' / '.$this->getPageGroupAlias();
}
$this->SetY($cur_y);
//Print page number
if ($this->getRTL()) {
$this->SetX($ormargins['right']);
$this->Cell(0, 0, $pagenumtxt, 'T', 0, 'L');
} else {
$this->SetX($ormargins['left']);
$this->Cell(0, 0, $pagenumtxt, 'T', 0, 'R');
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::formatPageNumber (   $num)
protected

Format the page numbers.

This method can be overriden for custom formats.

Parameters
int$numpage number protected
Since
4.2.005 (2008-11-06)

Definition at line 15374 of file tcpdf.php.

{
return number_format((float)$num, 0, '', '.');
}
TCPDF::formatTOCPageNumber (   $num)
protected

Format the page numbers on the Table Of Content.

This method can be overriden for custom formats.

Parameters
int$numpage number protected
Since
4.5.001 (2009-01-04)
See Also
addTOC(), addHTMLTOC()

Definition at line 15386 of file tcpdf.php.

{
return number_format((float)$num, 0, '', '.');
}
TCPDF::get_mqr ( )

Gets the current active configuration setting of magic_quotes_runtime (if the get_magic_quotes_runtime function exist)

Returns
Returns 0 if magic quotes runtime is off or get_magic_quotes_runtime doesn't exist, 1 otherwise.
Since
4.6.025 (2009-08-17)

Definition at line 7358 of file tcpdf.php.

Referenced by Image().

{
if(!defined('PHP_VERSION_ID')) {
$version = PHP_VERSION;
define('PHP_VERSION_ID', (($version{0} * 10000) + ($version{2} * 100) + $version{4}));
}
if (PHP_VERSION_ID < 50300) {
return @get_magic_quotes_runtime();
}
return 0;
}

+ Here is the caller graph for this function:

TCPDF::GetAbsX ( )

Returns the absolute X value of current position.

Returns
float public
Since
1.2
See Also
SetX(), GetY(), SetY()

Definition at line 7723 of file tcpdf.php.

References $x.

{
return $this->x;
}
TCPDF::getAliasNbPages ( )

Returns the string alias used for the total number of pages.

If the current font is unicode type, the returned string is surrounded by additional curly braces.

Returns
string public
Since
4.0.018 (2008-08-08)
See Also
AliasNbPages(), PageNo(), Footer()

Definition at line 15282 of file tcpdf.php.

Referenced by Footer().

{
if ($this->isUnicodeFont()) {
return '{'.$this->AliasNbPages.'}';
}
}

+ Here is the caller graph for this function:

TCPDF::getAliasNumPage ( )

Returns the string alias used for the page number.

If the current font is unicode type, the returned string is surrounded by additional curly braces.

Returns
string public
Since
4.5.000 (2009-01-02)
See Also
AliasNbPages(), PageNo(), Footer()

Definition at line 15310 of file tcpdf.php.

Referenced by Footer().

{
if ($this->isUnicodeFont()) {
return '{'.$this->AliasNumPage.'}';
}
}

+ Here is the caller graph for this function:

TCPDF::getAnnotOptFromJSProp (   $prop)
protected

Convert JavaScript form fields properties array to Annotation Properties array.

Parameters
array$propjavascript field properties. Possible values are described on official Javascript for Acrobat API reference.
Returns
array of annotation properties protected
Author
Nicola Asuni
Since
4.8.000 (2009-09-06)

Definition at line 14165 of file tcpdf.php.

References $f.

{
if (isset($prop['aopt']) AND is_array($prop['aopt'])) {
// the annotation options area lready defined
return $prop['aopt'];
}
$opt = array(); // value to be returned
// alignment: Controls how the text is laid out within the text field.
if (isset($prop['alignment'])) {
switch ($prop['alignment']) {
case 'left': {
$opt['q'] = 0;
break;
}
case 'center': {
$opt['q'] = 1;
break;
}
case 'right': {
$opt['q'] = 2;
break;
}
default: {
$opt['q'] = ($this->rtl)?2:0;
break;
}
}
}
// lineWidth: Specifies the thickness of the border when stroking the perimeter of a field's rectangle.
if (isset($prop['lineWidth'])) {
$linewidth = intval($prop['lineWidth']);
} else {
$linewidth = 1;
}
// borderStyle: The border style for a field.
if (isset($prop['borderStyle'])) {
switch ($prop['borderStyle']) {
case 'border.d':
case 'dashed': {
$opt['border'] = array(0, 0, $linewidth, array(3, 2));
$opt['bs'] = array('w'=>$linewidth, 's'=>'D', 'd'=>array(3, 2));
break;
}
case 'border.b':
case 'beveled': {
$opt['border'] = array(0, 0, $linewidth);
$opt['bs'] = array('w'=>$linewidth, 's'=>'B');
break;
}
case 'border.i':
case 'inset': {
$opt['border'] = array(0, 0, $linewidth);
$opt['bs'] = array('w'=>$linewidth, 's'=>'I');
break;
}
case 'border.u':
case 'underline': {
$opt['border'] = array(0, 0, $linewidth);
$opt['bs'] = array('w'=>$linewidth, 's'=>'U');
break;
}
default:
case 'border.s':
case 'solid': {
$opt['border'] = array(0, 0, $linewidth);
$opt['bs'] = array('w'=>$linewidth, 's'=>'S');
break;
}
}
}
if (isset($prop['border']) AND is_array($prop['border'])) {
$opt['border'] = $prop['border'];
}
if (!isset($opt['mk'])) {
$opt['mk'] = array();
}
if (!isset($opt['mk']['if'])) {
$opt['mk']['if'] = array();
}
$opt['mk']['if']['a'] = array(0.5, 0.5);
// buttonAlignX: Controls how space is distributed from the left of the button face with respect to the icon.
if (isset($prop['buttonAlignX'])) {
$opt['mk']['if']['a'][0] = $prop['buttonAlignX'];
}
// buttonAlignY: Controls how unused space is distributed from the bottom of the button face with respect to the icon.
if (isset($prop['buttonAlignY'])) {
$opt['mk']['if']['a'][1] = $prop['buttonAlignY'];
}
// buttonFitBounds: If true, the extent to which the icon may be scaled is set to the bounds of the button field.
if (isset($prop['buttonFitBounds']) AND ($prop['buttonFitBounds'] == 'true')) {
$opt['mk']['if']['fb'] = true;
}
// buttonScaleHow: Controls how the icon is scaled (if necessary) to fit inside the button face.
if (isset($prop['buttonScaleHow'])) {
switch ($prop['buttonScaleHow']) {
case 'scaleHow.proportional': {
$opt['mk']['if']['s'] = 'P';
break;
}
case 'scaleHow.anamorphic': {
$opt['mk']['if']['s'] = 'A';
break;
}
}
}
// buttonScaleWhen: Controls when an icon is scaled to fit inside the button face.
if (isset($prop['buttonScaleWhen'])) {
switch ($prop['buttonScaleWhen']) {
case 'scaleWhen.always': {
$opt['mk']['if']['sw'] = 'A';
break;
}
case 'scaleWhen.never': {
$opt['mk']['if']['sw'] = 'N';
break;
}
case 'scaleWhen.tooBig': {
$opt['mk']['if']['sw'] = 'B';
break;
}
case 'scaleWhen.tooSmall': {
$opt['mk']['if']['sw'] = 'S';
break;
}
}
}
// buttonPosition: Controls how the text and the icon of the button are positioned with respect to each other within the button face.
if (isset($prop['buttonPosition'])) {
switch ($prop['buttonPosition']) {
case 0:
case 'position.textOnly': {
$opt['mk']['tp'] = 0;
break;
}
case 1:
case 'position.iconOnly': {
$opt['mk']['tp'] = 1;
break;
}
case 2:
case 'position.iconTextV': {
$opt['mk']['tp'] = 2;
break;
}
case 3:
case 'position.textIconV': {
$opt['mk']['tp'] = 3;
break;
}
case 4:
case 'position.iconTextH': {
$opt['mk']['tp'] = 4;
break;
}
case 5:
case 'position.textIconH': {
$opt['mk']['tp'] = 5;
break;
}
case 6:
case 'position.overlay': {
$opt['mk']['tp'] = 6;
break;
}
}
}
// fillColor: Specifies the background color for a field.
if (isset($prop['fillColor'])) {
if (is_array($prop['fillColor'])) {
$opt['mk']['bg'] = $prop['fillColor'];
} else {
$opt['mk']['bg'] = $this->convertHTMLColorToDec($prop['fillColor']);
}
}
// strokeColor: Specifies the stroke color for a field that is used to stroke the rectangle of the field with a line as large as the line width.
if (isset($prop['strokeColor'])) {
if (is_array($prop['strokeColor'])) {
$opt['mk']['bc'] = $prop['strokeColor'];
} else {
$opt['mk']['bc'] = $this->convertHTMLColorToDec($prop['strokeColor']);
}
}
// rotation: The rotation of a widget in counterclockwise increments.
if (isset($prop['rotation'])) {
$opt['mk']['r'] = $prop['rotation'];
}
// charLimit: Limits the number of characters that a user can type into a text field.
if (isset($prop['charLimit'])) {
$opt['maxlen'] = intval($prop['charLimit']);
}
if (!isset($ff)) {
$ff = 0;
}
// readonly: The read-only characteristic of a field. If a field is read-only, the user can see the field but cannot change it.
if (isset($prop['readonly']) AND ($prop['readonly'] == 'true')) {
$ff += 1 << 0;
}
// required: Specifies whether a field requires a value.
if (isset($prop['required']) AND ($prop['required'] == 'true')) {
$ff += 1 << 1;
}
// multiline: Controls how text is wrapped within the field.
if (isset($prop['multiline']) AND ($prop['multiline'] == 'true')) {
$ff += 1 << 12;
}
// password: Specifies whether the field should display asterisks when data is entered in the field.
if (isset($prop['password']) AND ($prop['password'] == 'true')) {
$ff += 1 << 13;
}
// NoToggleToOff: If set, exactly one radio button shall be selected at all times; selecting the currently selected button has no effect.
if (isset($prop['NoToggleToOff']) AND ($prop['NoToggleToOff'] == 'true')) {
$ff += 1 << 14;
}
// Radio: If set, the field is a set of radio buttons.
if (isset($prop['Radio']) AND ($prop['Radio'] == 'true')) {
$ff += 1 << 15;
}
// Pushbutton: If set, the field is a pushbutton that does not retain a permanent value.
if (isset($prop['Pushbutton']) AND ($prop['Pushbutton'] == 'true')) {
$ff += 1 << 16;
}
// Combo: If set, the field is a combo box; if clear, the field is a list box.
if (isset($prop['Combo']) AND ($prop['Combo'] == 'true')) {
$ff += 1 << 17;
}
// editable: Controls whether a combo box is editable.
if (isset($prop['editable']) AND ($prop['editable'] == 'true')) {
$ff += 1 << 18;
}
// Sort: If set, the field's option items shall be sorted alphabetically.
if (isset($prop['Sort']) AND ($prop['Sort'] == 'true')) {
$ff += 1 << 19;
}
// fileSelect: If true, sets the file-select flag in the Options tab of the text field (Field is Used for File Selection).
if (isset($prop['fileSelect']) AND ($prop['fileSelect'] == 'true')) {
$ff += 1 << 20;
}
// multipleSelection: If true, indicates that a list box allows a multiple selection of items.
if (isset($prop['multipleSelection']) AND ($prop['multipleSelection'] == 'true')) {
$ff += 1 << 21;
}
// doNotSpellCheck: If true, spell checking is not performed on this editable text field.
if (isset($prop['doNotSpellCheck']) AND ($prop['doNotSpellCheck'] == 'true')) {
$ff += 1 << 22;
}
// doNotScroll: If true, the text field does not scroll and the user, therefore, is limited by the rectangular region designed for the field.
if (isset($prop['doNotScroll']) AND ($prop['doNotScroll'] == 'true')) {
$ff += 1 << 23;
}
// comb: If set to true, the field background is drawn as series of boxes (one for each character in the value of the field) and each character of the content is drawn within those boxes. The number of boxes drawn is determined from the charLimit property. It applies only to text fields. The setter will also raise if any of the following field properties are also set multiline, password, and fileSelect. A side-effect of setting this property is that the doNotScroll property is also set.
if (isset($prop['comb']) AND ($prop['comb'] == 'true')) {
$ff += 1 << 24;
}
// radiosInUnison: If false, even if a group of radio buttons have the same name and export value, they behave in a mutually exclusive fashion, like HTML radio buttons.
if (isset($prop['radiosInUnison']) AND ($prop['radiosInUnison'] == 'true')) {
$ff += 1 << 25;
}
// richText: If true, the field allows rich text formatting.
if (isset($prop['richText']) AND ($prop['richText'] == 'true')) {
$ff += 1 << 25;
}
// commitOnSelChange: Controls whether a field value is committed after a selection change.
if (isset($prop['commitOnSelChange']) AND ($prop['commitOnSelChange'] == 'true')) {
$ff += 1 << 26;
}
$opt['ff'] = $ff;
// defaultValue: The default value of a field - that is, the value that the field is set to when the form is reset.
if (isset($prop['defaultValue'])) {
$opt['dv'] = $prop['defaultValue'];
}
$f = 4; // default value for annotation flags
// readonly: The read-only characteristic of a field. If a field is read-only, the user can see the field but cannot change it.
if (isset($prop['readonly']) AND ($prop['readonly'] == 'true')) {
$f += 1 << 6;
}
// display: Controls whether the field is hidden or visible on screen and in print.
if (isset($prop['display'])) {
if ($prop['display'] == 'display.visible') {
//
} elseif ($prop['display'] == 'display.hidden') {
$f += 1 << 1;
} elseif ($prop['display'] == 'display.noPrint') {
$f -= 1 << 2;
} elseif ($prop['display'] == 'display.noView') {
$f += 1 << 5;
}
}
$opt['f'] = $f;
// currentValueIndices: Reads and writes single or multiple values of a list box or combo box.
if (isset($prop['currentValueIndices']) AND is_array($prop['currentValueIndices'])) {
$opt['i'] = $prop['currentValueIndices'];
}
// value: The value of the field data that the user has entered.
if (isset($prop['value'])) {
if (is_array($prop['value'])) {
$opt['opt'] = array();
foreach ($prop['value'] AS $key => $optval) {
// exportValues: An array of strings representing the export values for the field.
if (isset($prop['exportValues'][$key])) {
$opt['opt'][$key] = array($prop['exportValues'][$key], $prop['value'][$key]);
} else {
$opt['opt'][$key] = $prop['value'][$key];
}
}
} else {
$opt['v'] = $prop['value'];
}
}
// richValue: This property specifies the text contents and formatting of a rich text field.
if (isset($prop['richValue'])) {
$opt['rv'] = $prop['richValue'];
}
// submitName: If nonempty, used during form submission instead of name. Only applicable if submitting in HTML format (that is, URL-encoded).
if (isset($prop['submitName'])) {
$opt['tm'] = $prop['submitName'];
}
// name: Fully qualified field name.
if (isset($prop['name'])) {
$opt['t'] = $prop['name'];
}
// userName: The user name (short description string) of the field.
if (isset($prop['userName'])) {
$opt['tu'] = $prop['userName'];
}
// highlight: Defines how a button reacts when a user clicks it.
if (isset($prop['highlight'])) {
switch ($prop['highlight']) {
case 'none':
case 'highlight.n': {
$opt['h'] = 'N';
break;
}
case 'invert':
case 'highlight.i': {
$opt['h'] = 'i';
break;
}
case 'push':
case 'highlight.p': {
$opt['h'] = 'P';
break;
}
case 'outline':
case 'highlight.o': {
$opt['h'] = 'O';
break;
}
}
}
// Unsupported options:
// - calcOrderIndex: Changes the calculation order of fields in the document.
// - delay: Delays the redrawing of a field's appearance.
// - defaultStyle: This property defines the default style attributes for the form field.
// - style: Allows the user to set the glyph style of a check box or radio button.
// - textColor, textFont, textSize
return $opt;
}
TCPDF::GetArrStringWidth (   $sa,
  $fontname = '',
  $fontstyle = '',
  $fontsize = 0,
  $getarray = false 
)

Returns the string length of an array of chars in user unit or an array of characters widths.

A font must be selected.

Parameters
string$saThe array of chars whose total length is to be computed
string$fontnameFamily font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained.
string$fontstyleFont style. Possible values are (case insensitive):
  • empty string: regular
  • B: bold
  • I: italic
  • U: underline
  • D: line trough
  • O: overline
or any combination. The default value is regular.
float$fontsizeFont size in points. The default value is the current size.
boolean$getarrayif true returns an array of characters widths, if false returns the total length.
Returns
mixed int total string length or array of characted widths
Author
Nicola Asuni public
Since
2.4.000 (2008-03-06)

Definition at line 4501 of file tcpdf.php.

References $cw, $FontFamily, $FontSizePt, $FontStyle, $w, empty_string(), GetCharWidth(), SetFont(), and UTF8ArrToLatin1().

Referenced by getCellCode(), getNumLines(), GetStringWidth(), and Write().

{
// store current values
if (!$this->empty_string($fontname)) {
$prev_FontFamily = $this->FontFamily;
$prev_FontStyle = $this->FontStyle;
$prev_FontSizePt = $this->FontSizePt;
$this->SetFont($fontname, $fontstyle, $fontsize);
}
// convert UTF-8 array to Latin1 if required
$sa = $this->UTF8ArrToLatin1($sa);
$w = 0; // total width
$wa = array(); // array of characters widths
foreach ($sa as $ck => $char) {
// character width
$cw = $this->GetCharWidth($char, isset($sa[($ck + 1)]));
$wa[] = $cw;
$w += $cw;
}
// restore previous values
if (!$this->empty_string($fontname)) {
$this->SetFont($prev_FontFamily, $prev_FontStyle, $prev_FontSizePt);
}
if ($getarray) {
return $wa;
}
return $w;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::getBarcode ( )

Get current barcode.

Returns
string public
Since
4.0.012 (2008-07-24)

Definition at line 16558 of file tcpdf.php.

Referenced by Footer().

{
}

+ Here is the caller graph for this function:

TCPDF::getBorderMode (   $brd,
  $position = 'start' 
)
protected

Get the border mode accounting for multicell position (opens bottom side of multicell crossing pages)

Parameters
mixed$brdIndicates if borders must be drawn around the cell block. The value can be a number:
  • 0: no border (default)
  • 1: frame
or a string containing some or all of the following characters (in any order):
  • L: left
  • T: top
  • R: right
  • B: bottom
or an array of line styles for each border group: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
stringmulticell position: 'start', 'middle', 'end'
Returns
border mode array protected
Since
4.4.002 (2008-12-09)

Definition at line 6251 of file tcpdf.php.

Referenced by MultiCell().

{
if ((!$this->opencell) OR empty($brd)) {
return $brd;
}
if ($brd == 1) {
$brd = 'LTRB';
}
if (is_string($brd)) {
// convert string to array
$slen = strlen($brd);
$newbrd = array();
for ($i = 0; $i < $slen; ++$i) {
$newbrd[$brd{$i}] = array('cap' => 'square', 'join' => 'miter');
}
$brd = $newbrd;
}
foreach ($brd as $border => $style) {
switch ($position) {
case 'start': {
if (strpos($border, 'B') !== false) {
// remove bottom line
$newkey = str_replace('B', '', $border);
if (strlen($newkey) > 0) {
$brd[$newkey] = $style;
}
unset($brd[$border]);
}
break;
}
case 'middle': {
if (strpos($border, 'B') !== false) {
// remove bottom line
$newkey = str_replace('B', '', $border);
if (strlen($newkey) > 0) {
$brd[$newkey] = $style;
}
unset($brd[$border]);
$border = $newkey;
}
if (strpos($border, 'T') !== false) {
// remove bottom line
$newkey = str_replace('T', '', $border);
if (strlen($newkey) > 0) {
$brd[$newkey] = $style;
}
unset($brd[$border]);
}
break;
}
case 'end': {
if (strpos($border, 'T') !== false) {
// remove bottom line
$newkey = str_replace('T', '', $border);
if (strlen($newkey) > 0) {
$brd[$newkey] = $style;
}
unset($brd[$border]);
}
break;
}
}
}
return $brd;
}

+ Here is the caller graph for this function:

TCPDF::getBorderStartPosition ( )
protected

Return the starting coordinates to draw an html border.

Returns
array containing top-left border coordinates protected
Since
5.7.000 (2010-08-03)

Definition at line 21278 of file tcpdf.php.

{
if ($this->rtl) {
$xmax = $this->lMargin;
} else {
$xmax = $this->w - $this->rMargin;
}
return array('page' => $this->page, 'column' => $this->current_column, 'x' => $this->x, 'y' => $this->y, 'xmax' => $xmax);
}
TCPDF::getBreakMargin (   $pagenum = '')

Returns the page break margin.

Parameters
int$pagenumpage number (empty = current page)
Returns
int page break margin.
Author
Nicola Asuni public
Since
1.5.2
See Also
getPageDimensions()

Definition at line 3136 of file tcpdf.php.

References $bMargin.

{
if (empty($pagenum)) {
}
return $this->pagedim[$pagenum]['bm'];
}
TCPDF::getBuffer ( )
protected

Get buffer content.

Returns
string buffer content protected
Since
4.5.000 (2009-01-02)

Definition at line 22111 of file tcpdf.php.

{
if ($this->diskcache) {
return $this->readDiskCache($this->buffer);
} else {
return $this->buffer;
}
}
TCPDF::getCellBorder (   $x,
  $y,
  $w,
  $h,
  $brd 
)
protected

Returns the code to draw the cell border.

Parameters
float$xX coordinate.
float$yY coordinate.
float$wCell width.
float$hCell height.
mixed$brdIndicates if borders must be drawn around the cell. The value can be a number:
  • 0: no border (default)
  • 1: frame
or a string containing some or all of the following characters (in any order):
  • L: left
  • T: top
  • R: right
  • B: bottom
or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
string$modeborder position respect the square edge: normal: centered; ext: external; int: internal;
Returns
string containing cell border code protected
See Also
SetLineStyle()
Since
5.7.000 (2010-08-02)

Definition at line 5732 of file tcpdf.php.

References $h, $k, $LineWidth, $w, $x, $y, and SetLineStyle().

Referenced by getCellCode().

{
$s = ''; // string to be returned
if (empty($brd)) {
return $s;
}
if ($brd == 1) {
$brd = array('LRTB' => true);
}
// calculate coordinates for border
if ($this->rtl) {
$xeL = ($x - $w) * $k;
$xeR = $x * $k;
} else {
$xeL = $x * $k;
$xeR = ($x + $w) * $k;
}
$yeL = (($this->h - ($y + $h)) * $k);
$yeT = (($this->h - $y) * $k);
$xeT = $xeL;
$xeB = $xeR;
$yeR = $yeT;
$yeB = $yeL;
if (is_string($brd)) {
// convert string to array
$slen = strlen($brd);
$newbrd = array();
for ($i = 0; $i < $slen; ++$i) {
$newbrd[$brd{$i}] = array('cap' => 'square', 'join' => 'miter');
}
$brd = $newbrd;
}
if (isset($brd['mode'])) {
$mode = $brd['mode'];
unset($brd['mode']);
} else {
$mode = 'normal';
}
foreach ($brd as $border => $style) {
if (is_array($style) AND !empty($style)) {
// apply border style
$prev_style = $this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' ';
$s .= $this->SetLineStyle($style, true)."\n";
}
switch ($mode) {
case 'ext': {
$off = (($this->LineWidth / 2) * $k);
$xL = $xeL - $off;
$xR = $xeR + $off;
$yT = $yeT + $off;
$yL = $yeL - $off;
$xT = $xL;
$xB = $xR;
$yR = $yT;
$yB = $yL;
break;
}
case 'int': {
$off = ($this->LineWidth / 2) * $k;
$xL = $xeL + $off;
$xR = $xeR - $off;
$yT = $yeT - $off;
$yL = $yeL + $off;
$xT = $xL;
$xB = $xR;
$yR = $yT;
$yB = $yL;
break;
}
case 'normal':
default: {
$xL = $xeL;
$xT = $xeT;
$xB = $xeB;
$xR = $xeR;
$yL = $yeL;
$yT = $yeT;
$yB = $yeB;
$yR = $yeR;
break;
}
}
// draw borders by case
if (strlen($border) == 4) {
$s .= sprintf('%.2F %.2F %.2F %.2F re S ', $xT, $yT, ($w * $k), (-$h * $k));
} elseif (strlen($border) == 3) {
if (strpos($border,'B') === false) { // LTR
$s .= sprintf('%.2F %.2F m ', $xL, $yL);
$s .= sprintf('%.2F %.2F l ', $xT, $yT);
$s .= sprintf('%.2F %.2F l ', $xR, $yR);
$s .= sprintf('%.2F %.2F l ', $xB, $yB);
$s .= 'S ';
} elseif (strpos($border,'L') === false) { // TRB
$s .= sprintf('%.2F %.2F m ', $xT, $yT);
$s .= sprintf('%.2F %.2F l ', $xR, $yR);
$s .= sprintf('%.2F %.2F l ', $xB, $yB);
$s .= sprintf('%.2F %.2F l ', $xL, $yL);
$s .= 'S ';
} elseif (strpos($border,'T') === false) { // RBL
$s .= sprintf('%.2F %.2F m ', $xR, $yR);
$s .= sprintf('%.2F %.2F l ', $xB, $yB);
$s .= sprintf('%.2F %.2F l ', $xL, $yL);
$s .= sprintf('%.2F %.2F l ', $xT, $yT);
$s .= 'S ';
} elseif (strpos($border,'R') === false) { // BLT
$s .= sprintf('%.2F %.2F m ', $xB, $yB);
$s .= sprintf('%.2F %.2F l ', $xL, $yL);
$s .= sprintf('%.2F %.2F l ', $xT, $yT);
$s .= sprintf('%.2F %.2F l ', $xR, $yR);
$s .= 'S ';
}
} elseif (strlen($border) == 2) {
if ((strpos($border,'L') !== false) AND (strpos($border,'T') !== false)) { // LT
$s .= sprintf('%.2F %.2F m ', $xL, $yL);
$s .= sprintf('%.2F %.2F l ', $xT, $yT);
$s .= sprintf('%.2F %.2F l ', $xR, $yR);
$s .= 'S ';
} elseif ((strpos($border,'T') !== false) AND (strpos($border,'R') !== false)) { // TR
$s .= sprintf('%.2F %.2F m ', $xT, $yT);
$s .= sprintf('%.2F %.2F l ', $xR, $yR);
$s .= sprintf('%.2F %.2F l ', $xB, $yB);
$s .= 'S ';
} elseif ((strpos($border,'R') !== false) AND (strpos($border,'B') !== false)) { // RB
$s .= sprintf('%.2F %.2F m ', $xR, $yR);
$s .= sprintf('%.2F %.2F l ', $xB, $yB);
$s .= sprintf('%.2F %.2F l ', $xL, $yL);
$s .= 'S ';
} elseif ((strpos($border,'B') !== false) AND (strpos($border,'L') !== false)) { // BL
$s .= sprintf('%.2F %.2F m ', $xB, $yB);
$s .= sprintf('%.2F %.2F l ', $xL, $yL);
$s .= sprintf('%.2F %.2F l ', $xT, $yT);
$s .= 'S ';
} elseif ((strpos($border,'L') !== false) AND (strpos($border,'R') !== false)) { // LR
$s .= sprintf('%.2F %.2F m ', $xL, $yL);
$s .= sprintf('%.2F %.2F l ', $xT, $yT);
$s .= 'S ';
$s .= sprintf('%.2F %.2F m ', $xR, $yR);
$s .= sprintf('%.2F %.2F l ', $xB, $yB);
$s .= 'S ';
} elseif ((strpos($border,'T') !== false) AND (strpos($border,'B') !== false)) { // TB
$s .= sprintf('%.2F %.2F m ', $xT, $yT);
$s .= sprintf('%.2F %.2F l ', $xR, $yR);
$s .= 'S ';
$s .= sprintf('%.2F %.2F m ', $xB, $yB);
$s .= sprintf('%.2F %.2F l ', $xL, $yL);
$s .= 'S ';
}
} else { // strlen($border) == 1
if (strpos($border,'L') !== false) { // L
$s .= sprintf('%.2F %.2F m ', $xL, $yL);
$s .= sprintf('%.2F %.2F l ', $xT, $yT);
$s .= 'S ';
} elseif (strpos($border,'T') !== false) { // T
$s .= sprintf('%.2F %.2F m ', $xT, $yT);
$s .= sprintf('%.2F %.2F l ', $xR, $yR);
$s .= 'S ';
} elseif (strpos($border,'R') !== false) { // R
$s .= sprintf('%.2F %.2F m ', $xR, $yR);
$s .= sprintf('%.2F %.2F l ', $xB, $yB);
$s .= 'S ';
} elseif (strpos($border,'B') !== false) { // B
$s .= sprintf('%.2F %.2F m ', $xB, $yB);
$s .= sprintf('%.2F %.2F l ', $xL, $yL);
$s .= 'S ';
}
}
if (is_array($style) AND !empty($style)) {
// reset border style to previous value
$s .= "\n".$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor."\n";
}
}
return $s;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::getCellCode (   $w,
  $h = 0,
  $txt = '',
  $border = 0,
  $ln = 0,
  $align = '',
  $fill = false,
  $link = '',
  $stretch = 0,
  $ignore_min_height = false,
  $calign = 'T',
  $valign = 'M' 
)
protected

Returns the PDF string code to print a cell (rectangular area) with optional borders, background color and character string.

The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.
If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.

Parameters
float$wCell width. If 0, the cell extends up to the right margin.
float$hCell height. Default value: 0.
string$txtString to print. Default value: empty string.
mixed$borderIndicates if borders must be drawn around the cell. The value can be a number:
  • 0: no border (default)
  • 1: frame
or a string containing some or all of the following characters (in any order):
  • L: left
  • T: top
  • R: right
  • B: bottom
or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
int$lnIndicates where the current position should go after the call. Possible values are:
  • 0: to the right (or left for RTL languages)
  • 1: to the beginning of the next line
  • 2: below
Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
string$alignAllows to center or align the text. Possible values are:
  • L or empty string: left align (default value)
  • C: center
  • R: right align
  • J: justify
boolean$fillIndicates if the cell background must be painted (true) or transparent (false).
mixed$linkURL or identifier returned by AddLink().
int$stretchfont stretch mode:
  • 0 = disabled
  • 1 = horizontal scaling only if text is larger than cell width
  • 2 = forced horizontal scaling to fit cell width
  • 3 = character spacing only if text is larger than cell width
  • 4 = forced character spacing to fit cell width
General font stretching and scaling values will be preserved when possible.
boolean$ignore_min_heightif true ignore automatic minimum height value.
string$caligncell vertical alignment relative to the specified Y value. Possible values are:
  • T : cell top
  • C : center
  • B : cell bottom
  • A : font top
  • L : font baseline
  • D : font bottom
string$valigntext vertical alignment inside the cell. Possible values are:
  • T : top
  • M : middle
  • B : bottom
Returns
string containing cell code protected
Since
1.0
See Also
Cell()

Definition at line 5324 of file tcpdf.php.

References $cell_height_ratio, $cell_margin, $cell_padding, $font_spacing, $font_stretching, $FontAscent, $FontDescent, $FontSize, $h, $k, $lMargin, $rMargin, $unicode, $w, $x, $y, _escape(), adjustCellPadding(), arrUTF8ToUTF16BE(), checkPageRegions(), empty_string(), GetArrStringWidth(), getCellBorder(), GetNumChars(), GetStringWidth(), isUnicodeFont(), K_THAI_TOPCHARS, Link(), removeSHY(), utf8Bidi(), UTF8StringToArray(), and UTF8ToLatin1().

Referenced by Cell(), and MultiCell().

{
$prev_cell_margin = $this->cell_margin;
$prev_cell_padding = $this->cell_padding;
$txt = $this->removeSHY($txt);
$rs = ''; //string to be returned
$this->adjustCellPadding($border);
if (!$ignore_min_height) {
$min_cell_height = ($this->FontSize * $this->cell_height_ratio) + $this->cell_padding['T'] + $this->cell_padding['B'];
if ($h < $min_cell_height) {
$h = $min_cell_height;
}
}
// check page for no-write regions and adapt page margins if necessary
if ($this->rtl) {
$x = $this->x - $this->cell_margin['R'];
} else {
$x = $this->x + $this->cell_margin['L'];
}
$y = $this->y + $this->cell_margin['T'];
$prev_font_stretching = $this->font_stretching;
$prev_font_spacing = $this->font_spacing;
// cell vertical alignment
switch ($calign) {
case 'A': {
// font top
switch ($valign) {
case 'T': {
// top
$y -= $this->cell_padding['T'];
break;
}
case 'B': {
// bottom
$y -= ($h - $this->cell_padding['B'] - $this->FontAscent - $this->FontDescent);
break;
}
default:
case 'C':
case 'M': {
// center
$y -= (($h - $this->FontAscent - $this->FontDescent) / 2);
break;
}
}
break;
}
case 'L': {
// font baseline
switch ($valign) {
case 'T': {
// top
$y -= ($this->cell_padding['T'] + $this->FontAscent);
break;
}
case 'B': {
// bottom
$y -= ($h - $this->cell_padding['B'] - $this->FontDescent);
break;
}
default:
case 'C':
case 'M': {
// center
$y -= (($h + $this->FontAscent - $this->FontDescent) / 2);
break;
}
}
break;
}
case 'D': {
// font bottom
switch ($valign) {
case 'T': {
// top
$y -= ($this->cell_padding['T'] + $this->FontAscent + $this->FontDescent);
break;
}
case 'B': {
// bottom
$y -= ($h - $this->cell_padding['B']);
break;
}
default:
case 'C':
case 'M': {
// center
$y -= (($h + $this->FontAscent + $this->FontDescent) / 2);
break;
}
}
break;
}
case 'B': {
// cell bottom
$y -= $h;
break;
}
case 'C':
case 'M': {
// cell center
$y -= ($h / 2);
break;
}
default:
case 'T': {
// cell top
break;
}
}
// text vertical alignment
switch ($valign) {
case 'T': {
// top
$yt = $y + $this->cell_padding['T'];
break;
}
case 'B': {
// bottom
$yt = $y + $h - $this->cell_padding['B'] - $this->FontAscent - $this->FontDescent;
break;
}
default:
case 'C':
case 'M': {
// center
$yt = $y + (($h - $this->FontAscent - $this->FontDescent) / 2);
break;
}
}
$basefonty = $yt + $this->FontAscent;
if ($this->empty_string($w) OR ($w <= 0)) {
if ($this->rtl) {
} else {
$w = $this->w - $this->rMargin - $x;
}
}
$s = '';
// fill and borders
if (is_string($border) AND (strlen($border) == 4)) {
// full border
$border = 1;
}
if ($fill OR ($border == 1)) {
if ($fill) {
$op = ($border == 1) ? 'B' : 'f';
} else {
$op = 'S';
}
if ($this->rtl) {
$xk = (($x - $w) * $k);
} else {
$xk = ($x * $k);
}
$s .= sprintf('%.2F %.2F %.2F %.2F re %s ', $xk, (($this->h - $y) * $k), ($w * $k), (-$h * $k), $op);
}
// draw borders
$s .= $this->getCellBorder($x, $y, $w, $h, $border);
if ($txt != '') {
$txt2 = $txt;
if ($this->isunicode) {
if (($this->CurrentFont['type'] == 'core') OR ($this->CurrentFont['type'] == 'TrueType') OR ($this->CurrentFont['type'] == 'Type1')) {
$txt2 = $this->UTF8ToLatin1($txt2);
} else {
$unicode = $this->UTF8StringToArray($txt); // array of UTF-8 unicode values
$unicode = $this->utf8Bidi($unicode, '', $this->tmprtl);
if (defined('K_THAI_TOPCHARS') AND (K_THAI_TOPCHARS == true)) {
// ---- Fix for bug #2977340 "Incorrect Thai characters position arrangement" ----
// NOTE: this doesn't work with HTML justification
// Symbols that could overlap on the font top (only works in LTR)
$topchar = array(3611, 3613, 3615, 3650, 3651, 3652); // chars that extends on top
$topsym = array(3633, 3636, 3637, 3638, 3639, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662); // symbols with top position
$numchars = count($unicode); // number of chars
$unik = 0;
$uniblock = array();
$uniblock[$unik] = array();
$uniblock[$unik][] = $unicode[0];
// resolve overlapping conflicts by splitting the string in several parts
for ($i = 1; $i < $numchars; ++$i) {
// check if symbols overlaps at top
if (in_array($unicode[$i], $topsym) AND (in_array($unicode[($i - 1)], $topsym) OR in_array($unicode[($i - 1)], $topchar))) {
// move symbols to another array
++$unik;
$uniblock[$unik] = array();
$uniblock[$unik][] = $unicode[$i];
++$unik;
$uniblock[$unik] = array();
$unicode[$i] = 0x200b; // Unicode Character 'ZERO WIDTH SPACE' (DEC:8203, U+200B)
} else {
$uniblock[$unik][] = $unicode[$i];
}
}
// ---- END OF Fix for bug #2977340
}
$txt2 = $this->arrUTF8ToUTF16BE($unicode, false);
}
}
$txt2 = $this->_escape($txt2);
// get current text width (considering general font stretching and spacing)
$txwidth = $this->GetStringWidth($txt);
$width = $txwidth;
// check for stretch mode
if ($stretch > 0) {
// calculate ratio between cell width and text width
if ($width <= 0) {
$ratio = 1;
} else {
$ratio = (($w - $this->cell_padding['L'] - $this->cell_padding['R']) / $width);
}
// check if stretching is required
if (($ratio < 1) OR (($ratio > 1) AND (($stretch % 2) == 0))) {
// the text will be stretched to fit cell width
if ($stretch > 2) {
// set new character spacing
$this->font_spacing += ($w - $this->cell_padding['L'] - $this->cell_padding['R'] - $width) / (max(($this->GetNumChars($txt) - 1), 1) * ($this->font_stretching / 100));
} else {
// set new horizontal stretching
$this->font_stretching *= $ratio;
}
// recalculate text width (the text fills the entire cell)
$width = $w - $this->cell_padding['L'] - $this->cell_padding['R'];
// reset alignment
$align = '';
}
}
if ($this->font_stretching != 100) {
// apply font stretching
$rs .= sprintf('BT %.2F Tz ET ', $this->font_stretching);
}
if ($this->font_spacing != 0) {
// increase/decrease font spacing
$rs .= sprintf('BT %.2F Tc ET ', ($this->font_spacing * $this->k));
}
if ($this->ColorFlag) {
$s .= 'q '.$this->TextColor.' ';
}
// rendering mode
$s .= sprintf('BT %d Tr %.2F w ET ', $this->textrendermode, $this->textstrokewidth);
// count number of spaces
$ns = substr_count($txt, chr(32));
// Justification
$spacewidth = 0;
if (($align == 'J') AND ($ns > 0)) {
if ($this->isUnicodeFont()) {
// get string width without spaces
$width = $this->GetStringWidth(str_replace(' ', '', $txt));
// calculate average space width
$spacewidth = -1000 * ($w - $width - $this->cell_padding['L'] - $this->cell_padding['R']) / ($ns?$ns:1) / $this->FontSize;
if ($this->font_stretching != 100) {
// word spacing is affected by stretching
$spacewidth /= ($this->font_stretching / 100);
}
// set word position to be used with TJ operator
$txt2 = str_replace(chr(0).chr(32), ') '.sprintf('%.3F', $spacewidth).' (', $txt2);
$unicode_justification = true;
} else {
// get string width
$width = $txwidth;
// new space width
$spacewidth = (($w - $width - $this->cell_padding['L'] - $this->cell_padding['R']) / ($ns?$ns:1)) * $this->k;
if ($this->font_stretching != 100) {
// word spacing (Tw) is affected by stretching
$spacewidth /= ($this->font_stretching / 100);
}
// set word spacing
$rs .= sprintf('BT %.3F Tw ET ', $spacewidth);
}
$width = $w - $this->cell_padding['L'] - $this->cell_padding['R'];
}
// replace carriage return characters
$txt2 = str_replace("\r", ' ', $txt2);
switch ($align) {
case 'C': {
$dx = ($w - $width) / 2;
break;
}
case 'R': {
if ($this->rtl) {
$dx = $this->cell_padding['R'];
} else {
$dx = $w - $width - $this->cell_padding['R'];
}
break;
}
case 'L': {
if ($this->rtl) {
$dx = $w - $width - $this->cell_padding['L'];
} else {
$dx = $this->cell_padding['L'];
}
break;
}
case 'J':
default: {
if ($this->rtl) {
$dx = $this->cell_padding['R'];
} else {
$dx = $this->cell_padding['L'];
}
break;
}
}
if ($this->rtl) {
$xdx = $x - $dx - $width;
} else {
$xdx = $x + $dx;
}
$xdk = $xdx * $k;
// print text
$s .= sprintf('BT %.2F %.2F Td [(%s)] TJ ET', $xdk, (($this->h - $basefonty) * $k), $txt2);
if (isset($uniblock)) {
// print overlapping characters as separate string
$xshift = 0; // horizontal shift
$ty = (($this->h - $basefonty + (0.2 * $this->FontSize)) * $k);
$spw = (($w - $txwidth - $this->cell_padding['L'] - $this->cell_padding['R']) / ($ns?$ns:1));
foreach ($uniblock as $uk => $uniarr) {
if (($uk % 2) == 0) {
// x space to skip
if ($spacewidth != 0) {
// justification shift
$xshift += (count(array_keys($uniarr, 32)) * $spw);
}
$xshift += $this->GetArrStringWidth($uniarr); // + shift justification
} else {
// character to print
$topchr = $this->arrUTF8ToUTF16BE($uniarr, false);
$topchr = $this->_escape($topchr);
$s .= sprintf(' BT %.2F %.2F Td [(%s)] TJ ET', ($xdk + ($xshift * $k)), $ty, $topchr);
}
}
}
if ($this->underline) {
$s .= ' '.$this->_dounderlinew($xdx, $basefonty, $width);
}
if ($this->linethrough) {
$s .= ' '.$this->_dolinethroughw($xdx, $basefonty, $width);
}
if ($this->overline) {
$s .= ' '.$this->_dooverlinew($xdx, $basefonty, $width);
}
if ($this->ColorFlag) {
$s .= ' Q';
}
if ($link) {
$this->Link($xdx, $yt, $width, ($this->FontAscent + $this->FontDescent), $link, $ns);
}
}
// output cell
if ($s) {
// output cell
$rs .= $s;
if ($this->font_spacing != 0) {
// reset font spacing mode
$rs .= ' BT 0 Tc ET';
}
if ($this->font_stretching != 100) {
// reset font stretching mode
$rs .= ' BT 100 Tz ET';
}
}
// reset word spacing
if (!$this->isUnicodeFont() AND ($align == 'J')) {
$rs .= ' BT 0 Tw ET';
}
// reset stretching and spacing
$this->font_stretching = $prev_font_stretching;
$this->font_spacing = $prev_font_spacing;
$this->lasth = $h;
if ($ln > 0) {
//Go to the beginning of the next line
$this->y = $y + $h + $this->cell_margin['B'];
if ($ln == 1) {
if ($this->rtl) {
$this->x = $this->w - $this->rMargin;
} else {
$this->x = $this->lMargin;
}
}
} else {
// go left or right by case
if ($this->rtl) {
$this->x = $x - $w - $this->cell_margin['L'];
} else {
$this->x = $x + $w + $this->cell_margin['R'];
}
}
$gstyles = ''.$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '.$this->FillColor."\n";
$rs = $gstyles.$rs;
$this->cell_padding = $prev_cell_padding;
$this->cell_margin = $prev_cell_margin;
return $rs;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::getCellHeightRatio ( )

return the height of cell repect font height.

public

Since
4.0.012 (2008-07-24)

Definition at line 15552 of file tcpdf.php.

Referenced by Header().

+ Here is the caller graph for this function:

TCPDF::getCellMargins ( )

Get the internal Cell margin array.

Returns
array of margin values public
Since
5.9.000 (2010-10-03)
See Also
setCellMargins()

Definition at line 3307 of file tcpdf.php.

References $cell_margin.

{
}
TCPDF::getCellPaddings ( )

Get the internal Cell padding array.

Returns
array of padding values public
Since
5.9.000 (2010-10-03)
See Also
setCellPaddings(), SetCellPadding()

Definition at line 3271 of file tcpdf.php.

References $cell_padding.

{
}
TCPDF::GetCharWidth (   $char,
  $notlast = true 
)

Returns the length of the char in user unit for the current font considering current stretching and spacing (tracking/kerning).

Parameters
int$charThe char code whose length is to be returned
boolean$notlastset to false for the latest character on string, true otherwise (default)
Returns
float char width
Author
Nicola Asuni public
Since
2.4.000 (2008-03-06)

Definition at line 4538 of file tcpdf.php.

References $font_spacing, and getRawCharWidth().

Referenced by GetArrStringWidth(), and Write().

{
// get raw width
$chw = $this->getRawCharWidth($char);
if (($this->font_spacing != 0) AND $notlast) {
// increase/decrease font spacing
}
if ($this->font_stretching != 100) {
// fixed stretching mode
$chw *= ($this->font_stretching / 100);
}
return $chw;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::getColumn ( )

Return the current column number.

Returns
int current column number public
Since
5.5.011 (2010-07-08)

Definition at line 23149 of file tcpdf.php.

{
}
TCPDF::getCSSBorderDashStyle (   $style)
protected

Returns the border dash style from CSS property.

Parameters
string$styleborder style to convert
Returns
int sash style (return -1 in case of none or hidden border) protected
Since
5.7.000 (2010-08-02)

Definition at line 17569 of file tcpdf.php.

{
switch (strtolower($style)) {
case 'none':
case 'hidden': {
$dash = -1;
break;
}
case 'dotted': {
$dash = 1;
break;
}
case 'dashed': {
$dash = 3;
break;
}
case 'double':
case 'groove':
case 'ridge':
case 'inset':
case 'outset':
case 'solid':
default: {
$dash = 0;
break;
}
}
return $dash;
}
TCPDF::getCSSBorderStyle (   $cssborder)
protected

Returns the border style array from CSS border properties.

Parameters
string$cssborderborder properties
Returns
array containing border properties protected
Since
5.7.000 (2010-08-02)

Definition at line 17605 of file tcpdf.php.

{
$bprop = preg_split('/[\s]+/', trim($cssborder));
$border = array(); // value to be returned
switch (count($bprop)) {
case 3: {
$width = $bprop[0];
$style = $bprop[1];
$color = $bprop[2];
break;
}
case 2: {
$width = 'medium';
$style = $bprop[0];
$color = $bprop[1];
break;
}
case 1: {
$width = 'medium';
$style = $bprop[0];
$color = 'black';
break;
}
default: {
$width = 'medium';
$style = 'solid';
$color = 'black';
break;
}
}
if ($style == 'none') {
return array();
}
$border['cap'] = 'square';
$border['join'] = 'miter';
$border['dash'] = $this->getCSSBorderDashStyle($style);
if ($border['dash'] < 0) {
return array();
}
$border['width'] = $this->getCSSBorderWidth($width);
$border['color'] = $this->convertHTMLColorToDec($color);
return $border;
}
TCPDF::getCSSBorderWidth (   $width)
protected

Returns the border width from CSS property.

Parameters
string$widthborder width
Returns
int with in user units protected
Since
5.7.000 (2010-08-02)

Definition at line 17549 of file tcpdf.php.

{
if ($width == 'thin') {
$width = (2 / $this->k);
} elseif ($width == 'medium') {
$width = (4 / $this->k);
} elseif ($width == 'thick') {
$width = (6 / $this->k);
} else {
$width = $this->getHTMLUnitToUnits($width, 1, 'px', false);
}
return $width;
}
TCPDF::getCSSFontSpacing (   $spacing,
  $parent = 0 
)
protected

Returns the letter-spacing value from CSS value.

Parameters
string$spacingletter-spacing value
float$parentfont spacing (tracking/kerning) value of the parent element
Returns
float quantity to increases or decreases the space between characters in a text. protected
Since
5.9.000 (2010-10-02)

Definition at line 17762 of file tcpdf.php.

{
$val = 0; // value to be returned
$spacing = trim($spacing);
switch ($spacing) {
case 'normal': {
$val = 0;
break;
}
case 'inherit': {
if ($parent == 'normal') {
$val = 0;
} else {
$val = $parent;
}
break;
}
default: {
$val = $this->getHTMLUnitToUnits($spacing, 0, 'px', false);
}
}
return $val;
}
TCPDF::getCSSFontStretching (   $stretch,
  $parent = 100 
)
protected

Returns the percentage of font stretching from CSS value.

Parameters
string$stretchstretch mode
float$parentstretch value of the parent element
Returns
float font stretching percentage protected
Since
5.9.000 (2010-10-02)

Definition at line 17793 of file tcpdf.php.

{
$val = 100; // value to be returned
$stretch = trim($stretch);
switch ($stretch) {
case 'ultra-condensed': {
$val = 40;
break;
}
case 'extra-condensed': {
$val = 55;
break;
}
case 'condensed': {
$val = 70;
break;
}
case 'semi-condensed': {
$val = 85;
break;
}
case 'normal': {
$val = 100;
break;
}
case 'semi-expanded': {
$val = 115;
break;
}
case 'expanded': {
$val = 130;
break;
}
case 'extra-expanded': {
$val = 145;
break;
}
case 'ultra-expanded': {
$val = 160;
break;
}
case 'wider': {
$val = $parent + 10;
break;
}
case 'narrower': {
$val = $parent - 10;
break;
}
case 'inherit': {
if ($parent == 'normal') {
$val = 100;
} else {
$val = $parent;
}
break;
}
default: {
$val = $this->getHTMLUnitToUnits($stretch, 100, '%', false);
}
}
return $val;
}
TCPDF::getCSSMargin (   $cssmargin,
  $width = 0 
)

Get the internal Cell margin from CSS attribute.

Parameters
string$cssmarginmargin properties
float$widthwidth of the containing element public
Since
5.9.000 (2010-10-04)

Definition at line 17708 of file tcpdf.php.

{
$margin = preg_split('/[\s]+/', trim($cssmargin));
$cell_margin = array(); // value to be returned
switch (count($margin)) {
case 4: {
$cell_margin['T'] = $margin[0];
$cell_margin['R'] = $margin[1];
$cell_margin['B'] = $margin[2];
$cell_margin['L'] = $margin[3];
break;
}
case 3: {
$cell_margin['T'] = $margin[0];
$cell_margin['R'] = $margin[1];
$cell_margin['B'] = $margin[2];
$cell_margin['L'] = $margin[1];
break;
}
case 2: {
$cell_margin['T'] = $margin[0];
$cell_margin['R'] = $margin[1];
$cell_margin['B'] = $margin[0];
$cell_margin['L'] = $margin[1];
break;
}
case 1: {
$cell_margin['T'] = $margin[0];
$cell_margin['R'] = $margin[0];
$cell_margin['B'] = $margin[0];
$cell_margin['L'] = $margin[0];
break;
}
default: {
}
}
if ($width == 0) {
$width = $this->w - $this->lMargin - $this->rMargin;
}
$cell_margin['T'] = $this->getHTMLUnitToUnits(str_replace('auto', '0', $cell_margin['T']), $width, 'px', false);
$cell_margin['R'] = $this->getHTMLUnitToUnits(str_replace('auto', '0', $cell_margin['R']), $width, 'px', false);
$cell_margin['B'] = $this->getHTMLUnitToUnits(str_replace('auto', '0', $cell_margin['B']), $width, 'px', false);
$cell_margin['L'] = $this->getHTMLUnitToUnits(str_replace('auto', '0', $cell_margin['L']), $width, 'px', false);
return $cell_margin;
}
TCPDF::getCSSPadding (   $csspadding,
  $width = 0 
)

Get the internal Cell padding from CSS attribute.

Parameters
string$csspaddingpadding properties
float$widthwidth of the containing element public
Since
5.9.000 (2010-10-04)

Definition at line 17655 of file tcpdf.php.

{
$padding = preg_split('/[\s]+/', trim($csspadding));
$cell_padding = array(); // value to be returned
switch (count($padding)) {
case 4: {
$cell_padding['T'] = $padding[0];
$cell_padding['R'] = $padding[1];
$cell_padding['B'] = $padding[2];
$cell_padding['L'] = $padding[3];
break;
}
case 3: {
$cell_padding['T'] = $padding[0];
$cell_padding['R'] = $padding[1];
$cell_padding['B'] = $padding[2];
$cell_padding['L'] = $padding[1];
break;
}
case 2: {
$cell_padding['T'] = $padding[0];
$cell_padding['R'] = $padding[1];
$cell_padding['B'] = $padding[0];
$cell_padding['L'] = $padding[1];
break;
}
case 1: {
$cell_padding['T'] = $padding[0];
$cell_padding['R'] = $padding[0];
$cell_padding['B'] = $padding[0];
$cell_padding['L'] = $padding[0];
break;
}
default: {
}
}
if ($width == 0) {
$width = $this->w - $this->lMargin - $this->rMargin;
}
$cell_padding['T'] = $this->getHTMLUnitToUnits($cell_padding['T'], $width, 'px', false);
$cell_padding['R'] = $this->getHTMLUnitToUnits($cell_padding['R'], $width, 'px', false);
$cell_padding['B'] = $this->getHTMLUnitToUnits($cell_padding['B'], $width, 'px', false);
$cell_padding['L'] = $this->getHTMLUnitToUnits($cell_padding['L'], $width, 'px', false);
return $cell_padding;
}
TCPDF::getEncPermissionsString (   $protection)
protected

Convert encryption P value to a string of bytes, low-order byte first.

Parameters
string$protection32bit encryption permission value (P value)
Returns
String protected
Since
5.0.005 (2010-05-12)
Author
Nicola Asuni

Definition at line 12117 of file tcpdf.php.

{
$binprot = sprintf('%032b', $protection);
$str = chr(bindec(substr($binprot, 24, 8)));
$str .= chr(bindec(substr($binprot, 16, 8)));
$str .= chr(bindec(substr($binprot, 8, 8)));
$str .= chr(bindec(substr($binprot, 0, 8)));
return $str;
}
TCPDF::getFontAscent (   $font,
  $style = '',
  $size = 0 
)

Return the font ascent value.

Parameters
string$fontfont name
string$stylefont style
float$sizeThe size (in points)
Returns
int font ascent public
Author
Nicola Asuni
Since
4.9.003 (2010-03-30)

Definition at line 4947 of file tcpdf.php.

References AddFont(), and getFontBuffer().

{
$fontdata = $this->AddFont($font, $style);
$fontinfo = $this->getFontBuffer($fontdata['fontkey']);
if (isset($fontinfo['desc']['Ascent']) AND ($fontinfo['desc']['Ascent'] > 0)) {
$ascent = ($fontinfo['desc']['Ascent'] * $size / 1000);
} else {
$ascent = 1.219 * 0.76 * $size;
}
return ($ascent / $this->k);
}

+ Here is the call graph for this function:

TCPDF::getFontBuffer (   $font)
protected

Get font buffer content.

Parameters
string$fontfont key
Returns
string font buffer content or false in case of error protected
Since
4.5.000 (2009-01-02)

Definition at line 22275 of file tcpdf.php.

Referenced by AddFont(), getFontAscent(), getFontDescent(), and SetFont().

{
if ($this->diskcache AND isset($this->fonts[$font])) {
return unserialize($this->readDiskCache($this->fonts[$font]));
} elseif (isset($this->fonts[$font])) {
return $this->fonts[$font];
}
return false;
}

+ Here is the caller graph for this function:

TCPDF::getFontDescent (   $font,
  $style = '',
  $size = 0 
)

Return the font descent value.

Parameters
string$fontfont name
string$stylefont style
float$sizeThe size (in points)
Returns
int font descent public
Author
Nicola Asuni
Since
4.9.003 (2010-03-30)

Definition at line 4926 of file tcpdf.php.

References AddFont(), and getFontBuffer().

{
$fontdata = $this->AddFont($font, $style);
$fontinfo = $this->getFontBuffer($fontdata['fontkey']);
if (isset($fontinfo['desc']['Descent']) AND ($fontinfo['desc']['Descent'] <= 0)) {
$descent = (- $fontinfo['desc']['Descent'] * $size / 1000);
} else {
$descent = 1.219 * 0.24 * $size;
}
return ($descent / $this->k);
}

+ Here is the call graph for this function:

TCPDF::getFontFamily ( )

Returns the current font family name.

Returns
string current font family name public
Since
4.3.008 (2008-12-05)

Definition at line 17247 of file tcpdf.php.

{
}
TCPDF::getFontFamilyName (   $fontfamily)

Return normalized font name.

Parameters
string$fontfamilyproperty string containing font family names
Returns
string normalized font name
Author
Nicola Asuni public
Since
5.8.004 (2010-08-17)

Definition at line 23578 of file tcpdf.php.

{
// remove spaces and symbols
$fontfamily = preg_replace('/[^a-z0-9\,]/', '', strtolower($fontfamily));
// extract all font names
$fontslist = preg_split('/[,]/', $fontfamily);
// find first valid font name
foreach ($fontslist as $font) {
// replace font variations
$font = preg_replace('/italic$/', 'I', $font);
$font = preg_replace('/oblique$/', 'I', $font);
$font = preg_replace('/bold([I]?)$/', 'B\\1', $font);
// replace common family names and core fonts
$pattern = array();
$replacement = array();
$pattern[] = '/^serif|^cursive|^fantasy|^timesnewroman/';
$replacement[] = 'times';
$pattern[] = '/^sansserif/';
$replacement[] = 'helvetica';
$pattern[] = '/^monospace/';
$replacement[] = 'courier';
$font = preg_replace($pattern, $replacement, $font);
if (in_array(strtolower($font), $this->fontlist) OR in_array($font, $this->fontkeys)) {
return $font;
}
}
// return current font as default
return $this->CurrentFont['fontkey'];
}
TCPDF::getFontSize ( )

Returns the current font size.

Returns
current font size public
Since
3.2.000 (2008-06-23)

Definition at line 17227 of file tcpdf.php.

{
}
TCPDF::getFontSizePt ( )

Returns the current font size in points unit.

Returns
current font size in points unit public
Since
3.2.000 (2008-06-23)

Definition at line 17237 of file tcpdf.php.

{
}
TCPDF::getFontsList ( )
protected

Fill the list of available fonts ($this->fontlist).

protected

Since
4.0.013 (2008-07-28)

Definition at line 4599 of file tcpdf.php.

References $file, and _getfontpath().

Referenced by __construct().

{
$fontsdir = opendir($this->_getfontpath());
while (($file = readdir($fontsdir)) !== false) {
if (substr($file, -4) == '.php') {
array_push($this->fontlist, strtolower(basename($file, '.php')));
}
}
closedir($fontsdir);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::getFontSpacing ( )

Get the amount to increase or decrease the space between characters in a text.

Returns
int font spacing (tracking/kerning) value
Author
Nicola Asuni public
Since
5.9.000 (2010-09-29)

Definition at line 23866 of file tcpdf.php.

{
}
TCPDF::getFontStretching ( )

Get the percentage of character stretching.

Returns
float stretching value
Author
Nicola Asuni public
Since
5.9.000 (2010-09-29)

Definition at line 23844 of file tcpdf.php.

TCPDF::getFontStyle ( )

Returns the current font style.

Returns
string current font style public
Since
4.3.008 (2008-12-05)

Definition at line 17257 of file tcpdf.php.

{
}
TCPDF::getFontSubsetting ( )

Return the default option for font subsetting.

Returns
boolean default font subsetting state.
Author
Nicola Asuni public
Since
5.3.002 (2010-06-07)

Definition at line 23514 of file tcpdf.php.

TCPDF::getFooterFont ( )

Get Footer font.

Returns
array() public
Since
4.0.012 (2008-07-24)

Definition at line 11246 of file tcpdf.php.

{
}
TCPDF::getFooterMargin ( )

Returns footer margin in user units.

Returns
float
Since
4.0.012 (2008-07-24) public

Definition at line 3925 of file tcpdf.php.

References $footer_margin.

Referenced by Footer().

{
}

+ Here is the caller graph for this function:

TCPDF::getFormDefaultProp ( )

Return the default properties for form fields.

Returns
array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. public
Author
Nicola Asuni
Since
4.8.000 (2009-09-06)

Definition at line 14540 of file tcpdf.php.

TCPDF::getGDgamma (   $v)
protected

Correct the gamma value to be used with GD library.

Parameters
float$vthe gamma value to be corrected protected
Since
4.3.007 (2008-12-04)

Definition at line 7659 of file tcpdf.php.

{
return (pow(($v / 255), 2.2) * 255);
}
TCPDF::getGraphicVars ( )
protected

Returns current graphic variables as array.

Returns
array of graphic variables protected
Since
4.2.010 (2008-11-14)

Definition at line 21902 of file tcpdf.php.

Referenced by __construct(), Close(), setFooter(), and startPage().

{
$grapvars = array(
'FontFamily' => $this->FontFamily,
'FontStyle' => $this->FontStyle,
'FontSizePt' => $this->FontSizePt,
'rMargin' => $this->rMargin,
'lMargin' => $this->lMargin,
'cell_padding' => $this->cell_padding,
'cell_margin' => $this->cell_margin,
'LineWidth' => $this->LineWidth,
'linestyleWidth' => $this->linestyleWidth,
'linestyleCap' => $this->linestyleCap,
'linestyleJoin' => $this->linestyleJoin,
'linestyleDash' => $this->linestyleDash,
'textrendermode' => $this->textrendermode,
'textstrokewidth' => $this->textstrokewidth,
'DrawColor' => $this->DrawColor,
'FillColor' => $this->FillColor,
'TextColor' => $this->TextColor,
'ColorFlag' => $this->ColorFlag,
'bgcolor' => $this->bgcolor,
'fgcolor' => $this->fgcolor,
'htmlvspace' => $this->htmlvspace,
'listindent' => $this->listindent,
'listindentlevel' => $this->listindentlevel,
'listnum' => $this->listnum,
'listordered' => $this->listordered,
'listcount' => $this->listcount,
'lispacer' => $this->lispacer,
'cell_height_ratio' => $this->cell_height_ratio,
'font_stretching' => $this->font_stretching,
'font_spacing' => $this->font_spacing,
// extended
'lasth' => $this->lasth,
'tMargin' => $this->tMargin,
'bMargin' => $this->bMargin,
'AutoPageBreak' => $this->AutoPageBreak,
'PageBreakTrigger' => $this->PageBreakTrigger,
'x' => $this->x,
'y' => $this->y,
'w' => $this->w,
'h' => $this->h,
'wPt' => $this->wPt,
'hPt' => $this->hPt,
'fwPt' => $this->fwPt,
'fhPt' => $this->fhPt,
'page' => $this->page,
'current_column' => $this->current_column,
'num_columns' => $this->num_columns
);
return $grapvars;
}

+ Here is the caller graph for this function:

TCPDF::getGroupPageNo ( )

Return the current page in the group.

Returns
current page in the group public
Since
3.0.000 (2008-03-27)

Definition at line 15323 of file tcpdf.php.

{
return $this->pagegroups[$this->currpagegroup];
}
TCPDF::getGroupPageNoFormatted ( )

Returns the current group page number formatted as a string.

public

Since
4.3.003 (2008-11-18)
See Also
PaneNo(), formatPageNumber()

Definition at line 15333 of file tcpdf.php.

{
return $this->formatPageNumber($this->getGroupPageNo());
}
TCPDF::getHeaderData ( )

Returns header data:

  • $ret['logo'] = logo image
  • $ret['logo_width'] = width of the image logo in user units
  • $ret['title'] = header title
  • $ret['string'] = header description string
Returns
array() public
Since
4.0.012 (2008-07-24)

Definition at line 3880 of file tcpdf.php.

References $header_logo, $header_logo_width, $header_string, $header_title, and $ret.

Referenced by Header().

{
$ret = array();
$ret['logo_width'] = $this->header_logo_width;
return $ret;
}

+ Here is the caller graph for this function:

TCPDF::getHeaderFont ( )

Get header font.

Returns
array() public
Since
4.0.012 (2008-07-24)

Definition at line 11226 of file tcpdf.php.

Referenced by Header().

{
}

+ Here is the caller graph for this function:

TCPDF::getHeaderMargin ( )

Returns header margin in user units.

Returns
float
Since
4.0.012 (2008-07-24) public

Definition at line 3905 of file tcpdf.php.

References $header_margin.

{
}
TCPDF::getHtmlDomArray (   $html)
protected

Returns the HTML DOM array.

Parameters
string$htmlhtml code
Returns
array protected
Since
3.2.000 (2008-06-20)

Definition at line 17863 of file tcpdf.php.

References $name, $pos, $type, and K_SMALL_RATIO.

{
// array of CSS styles ( selector => properties).
$css = array();
// get CSS array defined at previous call
$matches = array();
if (preg_match_all('/<cssarray>([^<]*)<\/cssarray>/isU', $html, $matches) > 0) {
if (isset($matches[1][0])) {
$css = array_merge($css, unserialize($this->unhtmlentities($matches[1][0])));
}
$html = preg_replace('/<cssarray>(.*?)<\/cssarray>/isU', '', $html);
}
// extract external CSS files
$matches = array();
if (preg_match_all('/<link([^>]*)>/isU', $html, $matches) > 0) {
foreach ($matches[1] as $key => $link) {
$type = array();
if (preg_match('/type[\s]*=[\s]*"text\/css"/', $link, $type)) {
$type = array();
preg_match('/media[\s]*=[\s]*"([^"]*)"/', $link, $type);
// get 'all' and 'print' media, other media types are discarded
// (all, braille, embossed, handheld, print, projection, screen, speech, tty, tv)
if (empty($type) OR (isset($type[1]) AND (($type[1] == 'all') OR ($type[1] == 'print')))) {
$type = array();
if (preg_match('/href[\s]*=[\s]*"([^"]*)"/', $link, $type) > 0) {
// read CSS data file
$cssdata = file_get_contents(trim($type[1]));
$css = array_merge($css, $this->extractCSSproperties($cssdata));
}
}
}
}
}
// extract style tags
$matches = array();
if (preg_match_all('/<style([^>]*)>([^<]*)<\/style>/isU', $html, $matches) > 0) {
foreach ($matches[1] as $key => $media) {
$type = array();
preg_match('/media[\s]*=[\s]*"([^"]*)"/', $media, $type);
// get 'all' and 'print' media, other media types are discarded
// (all, braille, embossed, handheld, print, projection, screen, speech, tty, tv)
if (empty($type) OR (isset($type[1]) AND (($type[1] == 'all') OR ($type[1] == 'print')))) {
$cssdata = $matches[2][$key];
$css = array_merge($css, $this->extractCSSproperties($cssdata));
}
}
}
// create a special tag to contain the CSS array (used for table content)
$csstagarray = '<cssarray>'.htmlentities(serialize($css)).'</cssarray>';
// remove head and style blocks
$html = preg_replace('/<head([^>]*)>(.*?)<\/head>/siU', '', $html);
$html = preg_replace('/<style([^>]*)>([^<]*)<\/style>/isU', '', $html);
// define block tags
$blocktags = array('blockquote','br','dd','dl','div','dt','h1','h2','h3','h4','h5','h6','hr','li','ol','p','pre','ul','tcpdf','table','tr','td');
// define self-closing tags
$selfclosingtags = array('area','base','basefont','br','hr','input','img','link','meta');
// remove all unsupported tags (the line below lists all supported tags)
$html = strip_tags($html, '<marker/><a><b><blockquote><body><br><br/><dd><del><div><dl><dt><em><font><form><h1><h2><h3><h4><h5><h6><hr><hr/><i><img><input><label><li><ol><option><p><pre><s><select><small><span><strike><strong><sub><sup><table><tablehead><tcpdf><td><textarea><th><thead><tr><tt><u><ul>');
//replace some blank characters
$html = preg_replace('/<pre/', '<xre', $html); // preserve pre tag
$html = preg_replace('/<(table|tr|td|th|tcpdf|blockquote|dd|div|dl|dt|form|h1|h2|h3|h4|h5|h6|br|hr|li|ol|ul|p)([^>]*)>[\n\r\t]+/', '<\\1\\2>', $html);
$html = preg_replace('@(\r\n|\r)@', "\n", $html);
$repTable = array("\t" => ' ', "\0" => ' ', "\x0B" => ' ', "\\" => "\\\\");
$html = strtr($html, $repTable);
$offset = 0;
while (($offset < strlen($html)) AND ($pos = strpos($html, '</pre>', $offset)) !== false) {
$html_a = substr($html, 0, $offset);
$html_b = substr($html, $offset, ($pos - $offset + 6));
while (preg_match("'<xre([^>]*)>(.*?)\n(.*?)</pre>'si", $html_b)) {
// preserve newlines on <pre> tag
$html_b = preg_replace("'<xre([^>]*)>(.*?)\n(.*?)</pre>'si", "<xre\\1>\\2<br />\\3</pre>", $html_b);
}
while (preg_match("'<xre([^>]*)>(.*?)".$this->re_space['p']."(.*?)</pre>'".$this->re_space['m'], $html_b)) {
// preserve spaces on <pre> tag
$html_b = preg_replace("'<xre([^>]*)>(.*?)".$this->re_space['p']."(.*?)</pre>'".$this->re_space['m'], "<xre\\1>\\2&nbsp;\\3</pre>", $html_b);
}
$html = $html_a.$html_b.substr($html, $pos + 6);
$offset = strlen($html_a.$html_b);
}
$offset = 0;
while (($offset < strlen($html)) AND ($pos = strpos($html, '</textarea>', $offset)) !== false) {
$html_a = substr($html, 0, $offset);
$html_b = substr($html, $offset, ($pos - $offset + 11));
while (preg_match("'<textarea([^>]*)>(.*?)\n(.*?)</textarea>'si", $html_b)) {
// preserve newlines on <textarea> tag
$html_b = preg_replace("'<textarea([^>]*)>(.*?)\n(.*?)</textarea>'si", "<textarea\\1>\\2<TBR>\\3</textarea>", $html_b);
$html_b = preg_replace("'<textarea([^>]*)>(.*?)[\"](.*?)</textarea>'si", "<textarea\\1>\\2''\\3</textarea>", $html_b);
}
$html = $html_a.$html_b.substr($html, $pos + 11);
$offset = strlen($html_a.$html_b);
}
$html = preg_replace('/([\s]*)<option/si', '<option', $html);
$html = preg_replace('/<\/option>([\s]*)/si', '</option>', $html);
$offset = 0;
while (($offset < strlen($html)) AND ($pos = strpos($html, '</option>', $offset)) !== false) {
$html_a = substr($html, 0, $offset);
$html_b = substr($html, $offset, ($pos - $offset + 9));
while (preg_match("'<option([^>]*)>(.*?)</option>'si", $html_b)) {
$html_b = preg_replace("'<option([\s]+)value=\"([^\"]*)\"([^>]*)>(.*?)</option>'si", "\\2#!TaB!#\\4#!NwL!#", $html_b);
$html_b = preg_replace("'<option([^>]*)>(.*?)</option>'si", "\\2#!NwL!#", $html_b);
}
$html = $html_a.$html_b.substr($html, $pos + 9);
$offset = strlen($html_a.$html_b);
}
if (preg_match("'</select'si", $html)) {
$html = preg_replace("'<select([^>]*)>'si", "<select\\1 opt=\"", $html);
$html = preg_replace("'#!NwL!#</select>'si", "\" />", $html);
}
$html = str_replace("\n", ' ', $html);
// restore textarea newlines
$html = str_replace('<TBR>', "\n", $html);
// remove extra spaces from code
$html = preg_replace('/[\s]+<\/(table|tr|ul|ol|dl)>/', '</\\1>', $html);
$html = preg_replace('/'.$this->re_space['p'].'+<\/(td|th|li|dt|dd)>/'.$this->re_space['m'], '</\\1>', $html);
$html = preg_replace('/[\s]+<(tr|td|th|li|dt|dd)/', '<\\1', $html);
$html = preg_replace('/'.$this->re_space['p'].'+<(ul|ol|dl|br)/'.$this->re_space['m'], '<\\1', $html);
$html = preg_replace('/<\/(table|tr|td|th|blockquote|dd|dt|dl|div|dt|h1|h2|h3|h4|h5|h6|hr|li|ol|ul|p)>[\s]+</', '</\\1><', $html);
$html = preg_replace('/<\/(td|th)>/', '<marker style="font-size:0"/></\\1>', $html);
$html = preg_replace('/<\/table>([\s]*)<marker style="font-size:0"\/>/', '</table>', $html);
$html = preg_replace('/'.$this->re_space['p'].'+<img/'.$this->re_space['m'], chr(32).'<img', $html);
$html = preg_replace('/<img([^>]*)>/xi', '<img\\1><span><marker style="font-size:0"/></span>', $html);
$html = preg_replace('/<xre/', '<pre', $html); // restore pre tag
$html = preg_replace('/<textarea([^>]*)>([^<]*)<\/textarea>/xi', '<textarea\\1 value="\\2" />', $html);
$html = preg_replace('/<li([^>]*)><\/li>/', '<li\\1>&nbsp;</li>', $html);
$html = preg_replace('/<li([^>]*)>'.$this->re_space['p'].'*<img/'.$this->re_space['m'], '<li\\1><font size="1">&nbsp;</font><img', $html);
$html = preg_replace('/<([^>\/]*)>[\s]/', '<\\1>&nbsp;', $html); // preserve some spaces
$html = preg_replace('/[\s]<\/([^>]*)>/', '&nbsp;</\\1>', $html); // preserve some spaces
$html = preg_replace('/'.$this->re_space['p'].'+/'.$this->re_space['m'], chr(32), $html); // replace multiple spaces with a single space
// trim string
$html = $this->stringTrim($html);
// pattern for generic tag
$tagpattern = '/(<[^>]+>)/';
// explodes the string
$a = preg_split($tagpattern, $html, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
// count elements
$maxel = count($a);
$elkey = 0;
$key = 0;
// create an array of elements
$dom = array();
$dom[$key] = array();
// set inheritable properties fot the first void element
// possible inheritable properties are: azimuth, border-collapse, border-spacing, caption-side, color, cursor, direction, empty-cells, font, font-family, font-stretch, font-size, font-size-adjust, font-style, font-variant, font-weight, letter-spacing, line-height, list-style, list-style-image, list-style-position, list-style-type, orphans, page, page-break-inside, quotes, speak, speak-header, text-align, text-indent, text-transform, volume, white-space, widows, word-spacing
$dom[$key]['tag'] = false;
$dom[$key]['block'] = false;
$dom[$key]['value'] = '';
$dom[$key]['parent'] = 0;
$dom[$key]['fontname'] = $this->FontFamily;
$dom[$key]['fontstyle'] = $this->FontStyle;
$dom[$key]['fontsize'] = $this->FontSizePt;
$dom[$key]['font-stretch'] = 100;
$dom[$key]['letter-spacing'] = 0;
$dom[$key]['stroke'] = $this->textstrokewidth;
$dom[$key]['fill'] = (($this->textrendermode % 2) == 0);
$dom[$key]['clip'] = ($this->textrendermode > 3);
$dom[$key]['line-height'] = $this->cell_height_ratio;
$dom[$key]['bgcolor'] = false;
$dom[$key]['fgcolor'] = $this->fgcolor; // color
$dom[$key]['strokecolor'] = $this->strokecolor;
$dom[$key]['align'] = '';
$dom[$key]['listtype'] = '';
$dom[$key]['text-indent'] = 0;
$dom[$key]['border'] = array();
$dom[$key]['dir'] = $this->rtl?'rtl':'ltr';
$thead = false; // true when we are inside the THEAD tag
++$key;
$level = array();
array_push($level, 0); // root
while ($elkey < $maxel) {
$dom[$key] = array();
$element = $a[$elkey];
$dom[$key]['elkey'] = $elkey;
if (preg_match($tagpattern, $element)) {
// html tag
$element = substr($element, 1, -1);
// get tag name
preg_match('/[\/]?([a-zA-Z0-9]*)/', $element, $tag);
$tagname = strtolower($tag[1]);
// check if we are inside a table header
if ($tagname == 'thead') {
if ($element{0} == '/') {
$thead = false;
} else {
$thead = true;
}
++$elkey;
continue;
}
$dom[$key]['tag'] = true;
$dom[$key]['value'] = $tagname;
if (in_array($dom[$key]['value'], $blocktags)) {
$dom[$key]['block'] = true;
} else {
$dom[$key]['block'] = false;
}
if ($element{0} == '/') {
// *** closing html tag
$dom[$key]['opening'] = false;
$dom[$key]['parent'] = end($level);
array_pop($level);
$dom[$key]['fontname'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fontname'];
$dom[$key]['fontstyle'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fontstyle'];
$dom[$key]['fontsize'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fontsize'];
$dom[$key]['font-stretch'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['font-stretch'];
$dom[$key]['letter-spacing'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['letter-spacing'];
$dom[$key]['stroke'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['stroke'];
$dom[$key]['fill'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fill'];
$dom[$key]['clip'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['clip'];
$dom[$key]['line-height'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['line-height'];
$dom[$key]['bgcolor'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['bgcolor'];
$dom[$key]['fgcolor'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fgcolor'];
$dom[$key]['strokecolor'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['strokecolor'];
$dom[$key]['align'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['align'];
$dom[$key]['dir'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['dir'];
if (isset($dom[($dom[($dom[$key]['parent'])]['parent'])]['listtype'])) {
$dom[$key]['listtype'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['listtype'];
}
// set the number of columns in table tag
if (($dom[$key]['value'] == 'tr') AND (!isset($dom[($dom[($dom[$key]['parent'])]['parent'])]['cols']))) {
$dom[($dom[($dom[$key]['parent'])]['parent'])]['cols'] = $dom[($dom[$key]['parent'])]['cols'];
}
if (($dom[$key]['value'] == 'td') OR ($dom[$key]['value'] == 'th')) {
$dom[($dom[$key]['parent'])]['content'] = $csstagarray;
for ($i = ($dom[$key]['parent'] + 1); $i < $key; ++$i) {
$dom[($dom[$key]['parent'])]['content'] .= $a[$dom[$i]['elkey']];
}
$key = $i;
$parent_table = $dom[$dom[$dom[($dom[$key]['parent'])]['parent']]['parent']];
$parent_padding = 0;
$parent_spacing = 0;
if (isset($parent_table['attribute']['cellpadding'])) {
$parent_padding = $this->getHTMLUnitToUnits($parent_table['attribute']['cellpadding'], 1, 'px');
}
if (isset($parent_table['attribute']['cellspacing'])) {
$parent_spacing = $this->getHTMLUnitToUnits($parent_table['attribute']['cellspacing'], 1, 'px');
}
// mark nested tables
$dom[($dom[$key]['parent'])]['content'] = str_replace('<table', '<table nested="true" pcellpadding="'.$parent_padding.'" pcellspacing="'.$parent_spacing.'"', $dom[($dom[$key]['parent'])]['content']);
// remove thead sections from nested tables
$dom[($dom[$key]['parent'])]['content'] = str_replace('<thead>', '', $dom[($dom[$key]['parent'])]['content']);
$dom[($dom[$key]['parent'])]['content'] = str_replace('</thead>', '', $dom[($dom[$key]['parent'])]['content']);
}
// store header rows on a new table
if (($dom[$key]['value'] == 'tr') AND ($dom[($dom[$key]['parent'])]['thead'] === true)) {
if ($this->empty_string($dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'])) {
$dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'] = $a[$dom[($dom[($dom[$key]['parent'])]['parent'])]['elkey']];
}
for ($i = $dom[$key]['parent']; $i <= $key; ++$i) {
$dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'] .= $a[$dom[$i]['elkey']];
}
if (!isset($dom[($dom[$key]['parent'])]['attribute'])) {
$dom[($dom[$key]['parent'])]['attribute'] = array();
}
// header elements must be always contained in a single page
$dom[($dom[$key]['parent'])]['attribute']['nobr'] = 'true';
}
if (($dom[$key]['value'] == 'table') AND (!$this->empty_string($dom[($dom[$key]['parent'])]['thead']))) {
// remove the nobr attributes from the table header
$dom[($dom[$key]['parent'])]['thead'] = str_replace(' nobr="true"', '', $dom[($dom[$key]['parent'])]['thead']);
$dom[($dom[$key]['parent'])]['thead'] .= '</tablehead>';
}
} else {
// *** opening or self-closing html tag
$dom[$key]['opening'] = true;
$dom[$key]['parent'] = end($level);
if ((substr($element, -1, 1) == '/') OR (in_array($dom[$key]['value'], $selfclosingtags))) {
// self-closing tag
$dom[$key]['self'] = true;
} else {
// opening tag
array_push($level, $key);
$dom[$key]['self'] = false;
}
// copy some values from parent
$parentkey = 0;
if ($key > 0) {
$parentkey = $dom[$key]['parent'];
$dom[$key]['fontname'] = $dom[$parentkey]['fontname'];
$dom[$key]['fontstyle'] = $dom[$parentkey]['fontstyle'];
$dom[$key]['fontsize'] = $dom[$parentkey]['fontsize'];
$dom[$key]['font-stretch'] = $dom[$parentkey]['font-stretch'];
$dom[$key]['letter-spacing'] = $dom[$parentkey]['letter-spacing'];
$dom[$key]['stroke'] = $dom[$parentkey]['stroke'];
$dom[$key]['fill'] = $dom[$parentkey]['fill'];
$dom[$key]['clip'] = $dom[$parentkey]['clip'];
$dom[$key]['line-height'] = $dom[$parentkey]['line-height'];
$dom[$key]['bgcolor'] = $dom[$parentkey]['bgcolor'];
$dom[$key]['fgcolor'] = $dom[$parentkey]['fgcolor'];
$dom[$key]['strokecolor'] = $dom[$parentkey]['strokecolor'];
$dom[$key]['align'] = $dom[$parentkey]['align'];
$dom[$key]['listtype'] = $dom[$parentkey]['listtype'];
$dom[$key]['text-indent'] = $dom[$parentkey]['text-indent'];
$dom[$key]['border'] = array();
$dom[$key]['dir'] = $dom[$parentkey]['dir'];
}
// get attributes
preg_match_all('/([^=\s]*)[\s]*=[\s]*"([^"]*)"/', $element, $attr_array, PREG_PATTERN_ORDER);
$dom[$key]['attribute'] = array(); // reset attribute array
while (list($id, $name) = each($attr_array[1])) {
$dom[$key]['attribute'][strtolower($name)] = $attr_array[2][$id];
}
if (!empty($css)) {
// merge eternal CSS style to current style
$dom[$key]['attribute']['style'] = $this->getTagStyleFromCSS($dom, $key, $css);
}
// split style attributes
if (isset($dom[$key]['attribute']['style']) AND !empty($dom[$key]['attribute']['style'])) {
// get style attributes
preg_match_all('/([^;:\s]*):([^;]*)/', $dom[$key]['attribute']['style'], $style_array, PREG_PATTERN_ORDER);
$dom[$key]['style'] = array(); // reset style attribute array
while (list($id, $name) = each($style_array[1])) {
// in case of duplicate attribute the last replace the previous
$dom[$key]['style'][strtolower($name)] = trim($style_array[2][$id]);
}
// --- get some style attributes ---
// text direction
if (isset($dom[$key]['style']['direction'])) {
$dom[$key]['dir'] = $dom[$key]['style']['direction'];
}
// font family
if (isset($dom[$key]['style']['font-family'])) {
$dom[$key]['fontname'] = $this->getFontFamilyName($dom[$key]['style']['font-family']);
}
// list-style-type
if (isset($dom[$key]['style']['list-style-type'])) {
$dom[$key]['listtype'] = trim(strtolower($dom[$key]['style']['list-style-type']));
if ($dom[$key]['listtype'] == 'inherit') {
$dom[$key]['listtype'] = $dom[$parentkey]['listtype'];
}
}
// text-indent
if (isset($dom[$key]['style']['text-indent'])) {
$dom[$key]['text-indent'] = $this->getHTMLUnitToUnits($dom[$key]['style']['text-indent']);
if ($dom[$key]['text-indent'] == 'inherit') {
$dom[$key]['text-indent'] = $dom[$parentkey]['text-indent'];
}
}
// font size
if (isset($dom[$key]['style']['font-size'])) {
$fsize = trim($dom[$key]['style']['font-size']);
switch ($fsize) {
// absolute-size
case 'xx-small': {
$dom[$key]['fontsize'] = $dom[0]['fontsize'] - 4;
break;
}
case 'x-small': {
$dom[$key]['fontsize'] = $dom[0]['fontsize'] - 3;
break;
}
case 'small': {
$dom[$key]['fontsize'] = $dom[0]['fontsize'] - 2;
break;
}
case 'medium': {
$dom[$key]['fontsize'] = $dom[0]['fontsize'];
break;
}
case 'large': {
$dom[$key]['fontsize'] = $dom[0]['fontsize'] + 2;
break;
}
case 'x-large': {
$dom[$key]['fontsize'] = $dom[0]['fontsize'] + 4;
break;
}
case 'xx-large': {
$dom[$key]['fontsize'] = $dom[0]['fontsize'] + 6;
break;
}
// relative-size
case 'smaller': {
$dom[$key]['fontsize'] = $dom[$parentkey]['fontsize'] - 3;
break;
}
case 'larger': {
$dom[$key]['fontsize'] = $dom[$parentkey]['fontsize'] + 3;
break;
}
default: {
$dom[$key]['fontsize'] = $this->getHTMLUnitToUnits($fsize, $dom[$parentkey]['fontsize'], 'pt', true);
}
}
}
// font-stretch
if (isset($dom[$key]['style']['font-stretch'])) {
$dom[$key]['font-stretch'] = $this->getCSSFontStretching($dom[$key]['style']['font-stretch'], $dom[$parentkey]['font-stretch']);
}
// letter-spacing
if (isset($dom[$key]['style']['letter-spacing'])) {
$dom[$key]['letter-spacing'] = $this->getCSSFontSpacing($dom[$key]['style']['letter-spacing'], $dom[$parentkey]['letter-spacing']);
}
// line-height
if (isset($dom[$key]['style']['line-height'])) {
$lineheight = trim($dom[$key]['style']['line-height']);
switch ($lineheight) {
// A normal line height. This is default
case 'normal': {
$dom[$key]['line-height'] = $dom[0]['line-height'];
break;
}
default: {
if (is_numeric($lineheight)) {
$lineheight = $lineheight * 100;
}
$dom[$key]['line-height'] = $this->getHTMLUnitToUnits($lineheight, 1, '%', true);
}
}
}
// font style
if (isset($dom[$key]['style']['font-weight']) AND (strtolower($dom[$key]['style']['font-weight']{0}) == 'b')) {
$dom[$key]['fontstyle'] .= 'B';
}
if (isset($dom[$key]['style']['font-style']) AND (strtolower($dom[$key]['style']['font-style']{0}) == 'i')) {
$dom[$key]['fontstyle'] .= 'I';
}
// font color
if (isset($dom[$key]['style']['color']) AND (!$this->empty_string($dom[$key]['style']['color']))) {
$dom[$key]['fgcolor'] = $this->convertHTMLColorToDec($dom[$key]['style']['color']);
} elseif ($dom[$key]['value'] == 'a') {
$dom[$key]['fgcolor'] = $this->htmlLinkColorArray;
}
// background color
if (isset($dom[$key]['style']['background-color']) AND (!$this->empty_string($dom[$key]['style']['background-color']))) {
$dom[$key]['bgcolor'] = $this->convertHTMLColorToDec($dom[$key]['style']['background-color']);
}
// text-decoration
if (isset($dom[$key]['style']['text-decoration'])) {
$decors = explode(' ', strtolower($dom[$key]['style']['text-decoration']));
foreach ($decors as $dec) {
$dec = trim($dec);
if (!$this->empty_string($dec)) {
if ($dec{0} == 'u') {
// underline
$dom[$key]['fontstyle'] .= 'U';
} elseif ($dec{0} == 'l') {
// line-trough
$dom[$key]['fontstyle'] .= 'D';
} elseif ($dec{0} == 'o') {
// overline
$dom[$key]['fontstyle'] .= 'O';
}
}
}
} elseif ($dom[$key]['value'] == 'a') {
$dom[$key]['fontstyle'] = $this->htmlLinkFontStyle;
}
// check for width attribute
if (isset($dom[$key]['style']['width'])) {
$dom[$key]['width'] = $dom[$key]['style']['width'];
}
// check for height attribute
if (isset($dom[$key]['style']['height'])) {
$dom[$key]['height'] = $dom[$key]['style']['height'];
}
// check for text alignment
if (isset($dom[$key]['style']['text-align'])) {
$dom[$key]['align'] = strtoupper($dom[$key]['style']['text-align']{0});
}
// check for CSS border properties
if (isset($dom[$key]['style']['border'])) {
$borderstyle = $this->getCSSBorderStyle($dom[$key]['style']['border']);
if (!empty($borderstyle)) {
$dom[$key]['border']['LTRB'] = $borderstyle;
}
}
if (isset($dom[$key]['style']['border-color'])) {
$brd_colors = preg_split('/[\s]+/', trim($dom[$key]['style']['border-color']));
if (isset($brd_colors[3])) {
$dom[$key]['border']['L']['color'] = $this->convertHTMLColorToDec($brd_colors[3]);
}
if (isset($brd_colors[1])) {
$dom[$key]['border']['R']['color'] = $this->convertHTMLColorToDec($brd_colors[1]);
}
if (isset($brd_colors[0])) {
$dom[$key]['border']['T']['color'] = $this->convertHTMLColorToDec($brd_colors[0]);
}
if (isset($brd_colors[2])) {
$dom[$key]['border']['B']['color'] = $this->convertHTMLColorToDec($brd_colors[2]);
}
}
if (isset($dom[$key]['style']['border-width'])) {
$brd_widths = preg_split('/[\s]+/', trim($dom[$key]['style']['border-width']));
if (isset($brd_widths[3])) {
$dom[$key]['border']['L']['width'] = $this->getCSSBorderWidth($brd_widths[3]);
}
if (isset($brd_widths[1])) {
$dom[$key]['border']['R']['width'] = $this->getCSSBorderWidth($brd_widths[1]);
}
if (isset($brd_widths[0])) {
$dom[$key]['border']['T']['width'] = $this->getCSSBorderWidth($brd_widths[0]);
}
if (isset($brd_widths[2])) {
$dom[$key]['border']['B']['width'] = $this->getCSSBorderWidth($brd_widths[2]);
}
}
if (isset($dom[$key]['style']['border-style'])) {
$brd_styles = preg_split('/[\s]+/', trim($dom[$key]['style']['border-style']));
if (isset($brd_styles[3])) {
$dom[$key]['border']['L']['cap'] = 'square';
$dom[$key]['border']['L']['join'] = 'miter';
$dom[$key]['border']['L']['dash'] = $this->getCSSBorderDashStyle($brd_styles[3]);
if ($dom[$key]['border']['L']['dash'] < 0) {
$dom[$key]['border']['L'] = array();
}
}
if (isset($brd_styles[1])) {
$dom[$key]['border']['R']['cap'] = 'square';
$dom[$key]['border']['R']['join'] = 'miter';
$dom[$key]['border']['R']['dash'] = $this->getCSSBorderDashStyle($brd_styles[1]);
if ($dom[$key]['border']['R']['dash'] < 0) {
$dom[$key]['border']['R'] = array();
}
}
if (isset($brd_styles[0])) {
$dom[$key]['border']['T']['cap'] = 'square';
$dom[$key]['border']['T']['join'] = 'miter';
$dom[$key]['border']['T']['dash'] = $this->getCSSBorderDashStyle($brd_styles[0]);
if ($dom[$key]['border']['T']['dash'] < 0) {
$dom[$key]['border']['T'] = array();
}
}
if (isset($brd_styles[2])) {
$dom[$key]['border']['B']['cap'] = 'square';
$dom[$key]['border']['B']['join'] = 'miter';
$dom[$key]['border']['B']['dash'] = $this->getCSSBorderDashStyle($brd_styles[2]);
if ($dom[$key]['border']['B']['dash'] < 0) {
$dom[$key]['border']['B'] = array();
}
}
}
$cellside = array('L' => 'left', 'R' => 'right', 'T' => 'top', 'B' => 'bottom');
foreach ($cellside as $bsk => $bsv) {
if (isset($dom[$key]['style']['border-'.$bsv])) {
$borderstyle = $this->getCSSBorderStyle($dom[$key]['style']['border-'.$bsv]);
if (!empty($borderstyle)) {
$dom[$key]['border'][$bsk] = $borderstyle;
}
}
if (isset($dom[$key]['style']['border-'.$bsv.'-color'])) {
$dom[$key]['border'][$bsk]['color'] = $this->convertHTMLColorToDec($dom[$key]['style']['border-'.$bsv.'-color']);
}
if (isset($dom[$key]['style']['border-'.$bsv.'-width'])) {
$dom[$key]['border'][$bsk]['width'] = $this->getCSSBorderWidth($dom[$key]['style']['border-'.$bsv.'-width']);
}
if (isset($dom[$key]['style']['border-'.$bsv.'-style'])) {
$dom[$key]['border'][$bsk]['dash'] = $this->getCSSBorderDashStyle($dom[$key]['style']['border-'.$bsv.'-style']);
if ($dom[$key]['border'][$bsk]['dash'] < 0) {
$dom[$key]['border'][$bsk] = array();
}
}
}
// check for CSS padding properties
if (isset($dom[$key]['style']['padding'])) {
$dom[$key]['padding'] = $this->getCSSPadding($dom[$key]['style']['padding']);
} else {
$dom[$key]['padding'] = $this->cell_padding;
}
foreach ($cellside as $psk => $psv) {
if (isset($dom[$key]['style']['padding-'.$psv])) {
$dom[$key]['padding'][$psk] = $this->getHTMLUnitToUnits($dom[$key]['style']['padding-'.$psv], 0, 'px', false);
}
}
// check for CSS margin properties
if (isset($dom[$key]['style']['margin'])) {
$dom[$key]['margin'] = $this->getCSSMargin($dom[$key]['style']['margin']);
} else {
$dom[$key]['margin'] = $this->cell_margin;
}
foreach ($cellside as $psk => $psv) {
if (isset($dom[$key]['style']['margin-'.$psv])) {
$dom[$key]['margin'][$psk] = $this->getHTMLUnitToUnits(str_replace('auto', '0', $dom[$key]['style']['margin-'.$psv]), 0, 'px', false);
}
}
// page-break-inside
if (isset($dom[$key]['style']['page-break-inside']) AND ($dom[$key]['style']['page-break-inside'] == 'avoid')) {
$dom[$key]['attribute']['nobr'] = 'true';
}
// page-break-before
if (isset($dom[$key]['style']['page-break-before'])) {
if ($dom[$key]['style']['page-break-before'] == 'always') {
$dom[$key]['attribute']['pagebreak'] = 'true';
} elseif ($dom[$key]['style']['page-break-before'] == 'left') {
$dom[$key]['attribute']['pagebreak'] = 'left';
} elseif ($dom[$key]['style']['page-break-before'] == 'right') {
$dom[$key]['attribute']['pagebreak'] = 'right';
}
}
// page-break-after
if (isset($dom[$key]['style']['page-break-after'])) {
if ($dom[$key]['style']['page-break-after'] == 'always') {
$dom[$key]['attribute']['pagebreakafter'] = 'true';
} elseif ($dom[$key]['style']['page-break-after'] == 'left') {
$dom[$key]['attribute']['pagebreakafter'] = 'left';
} elseif ($dom[$key]['style']['page-break-after'] == 'right') {
$dom[$key]['attribute']['pagebreakafter'] = 'right';
}
}
}
if (isset($dom[$key]['attribute']['border']) AND ($dom[$key]['attribute']['border'] != 0)) {
$borderstyle = $this->getCSSBorderStyle($dom[$key]['attribute']['border'].' solid black');
if (!empty($borderstyle)) {
$dom[$key]['border']['LTRB'] = $borderstyle;
}
}
// check for font tag
if ($dom[$key]['value'] == 'font') {
// font family
if (isset($dom[$key]['attribute']['face'])) {
$dom[$key]['fontname'] = $this->getFontFamilyName($dom[$key]['attribute']['face']);
}
// font size
if (isset($dom[$key]['attribute']['size'])) {
if ($key > 0) {
if ($dom[$key]['attribute']['size']{0} == '+') {
$dom[$key]['fontsize'] = $dom[($dom[$key]['parent'])]['fontsize'] + intval(substr($dom[$key]['attribute']['size'], 1));
} elseif ($dom[$key]['attribute']['size']{0} == '-') {
$dom[$key]['fontsize'] = $dom[($dom[$key]['parent'])]['fontsize'] - intval(substr($dom[$key]['attribute']['size'], 1));
} else {
$dom[$key]['fontsize'] = intval($dom[$key]['attribute']['size']);
}
} else {
$dom[$key]['fontsize'] = intval($dom[$key]['attribute']['size']);
}
}
}
// force natural alignment for lists
if ((($dom[$key]['value'] == 'ul') OR ($dom[$key]['value'] == 'ol') OR ($dom[$key]['value'] == 'dl'))
AND (!isset($dom[$key]['align']) OR $this->empty_string($dom[$key]['align']) OR ($dom[$key]['align'] != 'J'))) {
if ($this->rtl) {
$dom[$key]['align'] = 'R';
} else {
$dom[$key]['align'] = 'L';
}
}
if (($dom[$key]['value'] == 'small') OR ($dom[$key]['value'] == 'sup') OR ($dom[$key]['value'] == 'sub')) {
if (!isset($dom[$key]['attribute']['size']) AND !isset($dom[$key]['style']['font-size'])) {
$dom[$key]['fontsize'] = $dom[$key]['fontsize'] * K_SMALL_RATIO;
}
}
if (($dom[$key]['value'] == 'strong') OR ($dom[$key]['value'] == 'b')) {
$dom[$key]['fontstyle'] .= 'B';
}
if (($dom[$key]['value'] == 'em') OR ($dom[$key]['value'] == 'i')) {
$dom[$key]['fontstyle'] .= 'I';
}
if ($dom[$key]['value'] == 'u') {
$dom[$key]['fontstyle'] .= 'U';
}
if (($dom[$key]['value'] == 'del') OR ($dom[$key]['value'] == 's') OR ($dom[$key]['value'] == 'strike')) {
$dom[$key]['fontstyle'] .= 'D';
}
if (!isset($dom[$key]['style']['text-decoration']) AND ($dom[$key]['value'] == 'a')) {
$dom[$key]['fontstyle'] = $this->htmlLinkFontStyle;
}
if (($dom[$key]['value'] == 'pre') OR ($dom[$key]['value'] == 'tt')) {
$dom[$key]['fontname'] = $this->default_monospaced_font;
}
if (($dom[$key]['value']{0} == 'h') AND (intval($dom[$key]['value']{1}) > 0) AND (intval($dom[$key]['value']{1}) < 7)) {
// headings h1, h2, h3, h4, h5, h6
if (!isset($dom[$key]['attribute']['size']) AND !isset($dom[$key]['style']['font-size'])) {
$headsize = (4 - intval($dom[$key]['value']{1})) * 2;
$dom[$key]['fontsize'] = $dom[0]['fontsize'] + $headsize;
}
if (!isset($dom[$key]['style']['font-weight'])) {
$dom[$key]['fontstyle'] .= 'B';
}
}
if (($dom[$key]['value'] == 'table')) {
$dom[$key]['rows'] = 0; // number of rows
$dom[$key]['trids'] = array(); // IDs of TR elements
$dom[$key]['thead'] = ''; // table header rows
}
if (($dom[$key]['value'] == 'tr')) {
$dom[$key]['cols'] = 0;
if ($thead) {
$dom[$key]['thead'] = true;
// rows on thead block are printed as a separate table
} else {
$dom[$key]['thead'] = false;
// store the number of rows on table element
++$dom[($dom[$key]['parent'])]['rows'];
// store the TR elements IDs on table element
array_push($dom[($dom[$key]['parent'])]['trids'], $key);
}
}
if (($dom[$key]['value'] == 'th') OR ($dom[$key]['value'] == 'td')) {
if (isset($dom[$key]['attribute']['colspan'])) {
$colspan = intval($dom[$key]['attribute']['colspan']);
} else {
$colspan = 1;
}
$dom[$key]['attribute']['colspan'] = $colspan;
$dom[($dom[$key]['parent'])]['cols'] += $colspan;
}
// text direction
if (isset($dom[$key]['attribute']['dir'])) {
$dom[$key]['dir'] = $dom[$key]['attribute']['dir'];
}
// set foreground color attribute
if (isset($dom[$key]['attribute']['color']) AND (!$this->empty_string($dom[$key]['attribute']['color']))) {
$dom[$key]['fgcolor'] = $this->convertHTMLColorToDec($dom[$key]['attribute']['color']);
} elseif (!isset($dom[$key]['style']['color']) AND ($dom[$key]['value'] == 'a')) {
$dom[$key]['fgcolor'] = $this->htmlLinkColorArray;
}
// set background color attribute
if (isset($dom[$key]['attribute']['bgcolor']) AND (!$this->empty_string($dom[$key]['attribute']['bgcolor']))) {
$dom[$key]['bgcolor'] = $this->convertHTMLColorToDec($dom[$key]['attribute']['bgcolor']);
}
// set stroke color attribute
if (isset($dom[$key]['attribute']['strokecolor']) AND (!$this->empty_string($dom[$key]['attribute']['strokecolor']))) {
$dom[$key]['strokecolor'] = $this->convertHTMLColorToDec($dom[$key]['attribute']['strokecolor']);
}
// check for width attribute
if (isset($dom[$key]['attribute']['width'])) {
$dom[$key]['width'] = $dom[$key]['attribute']['width'];
}
// check for height attribute
if (isset($dom[$key]['attribute']['height'])) {
$dom[$key]['height'] = $dom[$key]['attribute']['height'];
}
// check for text alignment
if (isset($dom[$key]['attribute']['align']) AND (!$this->empty_string($dom[$key]['attribute']['align'])) AND ($dom[$key]['value'] !== 'img')) {
$dom[$key]['align'] = strtoupper($dom[$key]['attribute']['align']{0});
}
// check for text rendering mode (the following attributes do not exist in HTML)
if (isset($dom[$key]['attribute']['stroke'])) {
// font stroke width
$dom[$key]['stroke'] = $this->getHTMLUnitToUnits($dom[$key]['attribute']['stroke'], $dom[$key]['fontsize'], 'pt', true);
}
if (isset($dom[$key]['attribute']['fill'])) {
// font fill
if ($dom[$key]['attribute']['fill'] == 'true') {
$dom[$key]['fill'] = true;
} else {
$dom[$key]['fill'] = false;
}
}
if (isset($dom[$key]['attribute']['clip'])) {
// clipping mode
if ($dom[$key]['attribute']['clip'] == 'true') {
$dom[$key]['clip'] = true;
} else {
$dom[$key]['clip'] = false;
}
}
} // end opening tag
} else {
// text
$dom[$key]['tag'] = false;
$dom[$key]['block'] = false;
$element = str_replace('$nbsp;', $this->unichr(160), $element);
$dom[$key]['value'] = stripslashes($this->unhtmlentities($element));
$dom[$key]['parent'] = end($level);
}
++$elkey;
++$key;
}
return $dom;
}
TCPDF::getHTMLUnitToUnits (   $htmlval,
  $refsize = 1,
  $defaultunit = 'px',
  $points = false 
)

Convert HTML string containing value and unit of measure to user's units or points.

Parameters
string$htmlvalstring containing values and unit
string$refsizereference value in points
string$defaultunitdefault unit (can be one of the following: %, em, ex, px, in, mm, pc, pt).
boolean$pointif true returns points, otherwise returns value in user's units
Returns
float value in user's unit or point if $points=true public
Since
4.4.004 (2008-12-10)

Definition at line 21613 of file tcpdf.php.

References $points.

Referenced by Image().

{
$supportedunits = array('%', 'em', 'ex', 'px', 'in', 'cm', 'mm', 'pc', 'pt');
$retval = 0;
$value = 0;
$unit = 'px';
if ($points) {
$k = 1;
}
if (in_array($defaultunit, $supportedunits)) {
$unit = $defaultunit;
}
if (is_numeric($htmlval)) {
$value = floatval($htmlval);
} elseif (preg_match('/([0-9\.\-\+]+)/', $htmlval, $mnum)) {
$value = floatval($mnum[1]);
if (preg_match('/([a-z%]+)/', $htmlval, $munit)) {
if (in_array($munit[1], $supportedunits)) {
$unit = $munit[1];
}
}
}
switch ($unit) {
// percentage
case '%': {
$retval = (($value * $refsize) / 100);
break;
}
// relative-size
case 'em': {
$retval = ($value * $refsize);
break;
}
// height of lower case 'x' (about half the font-size)
case 'ex': {
$retval = $value * ($refsize / 2);
break;
}
// absolute-size
case 'in': {
$retval = ($value * $this->dpi) / $k;
break;
}
// centimeters
case 'cm': {
$retval = ($value / 2.54 * $this->dpi) / $k;
break;
}
// millimeters
case 'mm': {
$retval = ($value / 25.4 * $this->dpi) / $k;
break;
}
// one pica is 12 points
case 'pc': {
$retval = ($value * 12) / $k;
break;
}
// points
case 'pt': {
$retval = $value / $k;
break;
}
// pixels
case 'px': {
$retval = $this->pixelsToUnits($value);
break;
}
}
return $retval;
}

+ Here is the caller graph for this function:

TCPDF::getHyphenPatternsFromTEX (   $file)

Returns an array of hyphenation patterns.

Parameters
string$fileTEX file containing hypenation patterns. TEX pattrns can be downloaded from http://www.ctan.org/tex-archive/language/hyph-utf8/tex/generic/hyph-utf8/patterns/
Returns
array of hyphenation patterns
Author
Nicola Asuni
Since
4.9.012 (2010-04-12) public

Definition at line 23315 of file tcpdf.php.

References $data, and $file.

{
// TEX patterns are available at:
// http://www.ctan.org/tex-archive/language/hyph-utf8/tex/generic/hyph-utf8/patterns/
$data = file_get_contents($file);
$patterns = array();
// remove comments
$data = preg_replace('/\%[^\n]*/', '', $data);
// extract the patterns part
preg_match('/\\\\patterns\{([^\}]*)\}/i', $data, $matches);
$data = trim(substr($matches[0], 10, -1));
// extract each pattern
$patterns_array = preg_split('/[\s]+/', $data);
// create new language array of patterns
$patterns = array();
foreach($patterns_array as $val) {
if (!$this->empty_string($val)) {
$val = trim($val);
$val = str_replace('\'', '\\\'', $val);
$key = preg_replace('/[0-9]+/', '', $val);
$patterns[$key] = $val;
}
}
return $patterns;
}
TCPDF::getImageBuffer (   $image)
protected

Get image buffer content.

Parameters
string$imageimage key
Returns
string image buffer content or false in case of error protected
Since
4.5.000 (2008-12-31)

Definition at line 22213 of file tcpdf.php.

Referenced by Image().

{
if ($this->diskcache AND isset($this->images[$image])) {
return unserialize($this->readDiskCache($this->images[$image]));
} elseif (isset($this->images[$image])) {
return $this->images[$image];
}
return false;
}

+ Here is the caller graph for this function:

TCPDF::getImageFileType (   $imgfile,
  $iminfo = array() 
)

Return the image type given the file name or array returned by getimagesize() function.

Parameters
string$imgfileimage file name
array$iminfoarray of image information returned by getimagesize() function.
Returns
string image type
Since
4.8.017 (2009-11-27)

Definition at line 6934 of file tcpdf.php.

References $type, and empty_string().

Referenced by Image().

{
$type = '';
if (isset($iminfo['mime']) AND !empty($iminfo['mime'])) {
$mime = explode('/', $iminfo['mime']);
if ((count($mime) > 1) AND ($mime[0] == 'image') AND (!empty($mime[1]))) {
$type = strtolower(trim($mime[1]));
}
}
if (empty($type)) {
$fileinfo = pathinfo($imgfile);
if (isset($fileinfo['extension']) AND (!$this->empty_string($fileinfo['extension']))) {
$type = strtolower(trim($fileinfo['extension']));
}
}
if ($type == 'jpg') {
$type = 'jpeg';
}
return $type;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::getImageRBX ( )

Return the right-bottom (or left-bottom for RTL) corner X coordinate of last inserted image.

Returns
float public

Definition at line 3951 of file tcpdf.php.

References $img_rb_x.

{
}
TCPDF::getImageRBY ( )

Return the right-bottom (or left-bottom for RTL) corner Y coordinate of last inserted image.

Returns
float public

Definition at line 3960 of file tcpdf.php.

References $img_rb_y.

Referenced by Header().

{
}

+ Here is the caller graph for this function:

TCPDF::getImageScale ( )

Returns the adjusting factor to convert pixels to user units.

Returns
float adjusting factor to convert pixels to user units.
Author
Nicola Asuni public
Since
1.5.2

Definition at line 3075 of file tcpdf.php.

References $imgscale.

{
}
TCPDF::getLastH ( )

Get the last cell height.

Returns
last cell height public
Since
4.0.017 (2008-08-05)

Definition at line 3053 of file tcpdf.php.

References $lasth.

{
return $this->lasth;
}
TCPDF::GetLineWidth ( )

Returns the current the line width.

Returns
int Line width public
Since
2.1.000 (2008-01-07)
See Also
Line(), SetLineWidth()

Definition at line 12479 of file tcpdf.php.

{
}
TCPDF::getMargins ( )

Returns an array containing current margins:

  • $ret['left'] = left margin
  • $ret['right'] = right margin
  • $ret['top'] = top margin
  • $ret['bottom'] = bottom margin
  • $ret['header'] = header margin
  • $ret['footer'] = footer margin
  • $ret['cell'] = cell padding array
  • $ret['padding_left'] = cell left padding
  • $ret['padding_top'] = cell top padding
  • $ret['padding_right'] = cell right padding
  • $ret['padding_bottom'] = cell bottom padding
Returns
array containing all margins measures public
Since
3.2.000 (2008-06-23)

Definition at line 17186 of file tcpdf.php.

References $ret.

{
$ret = array(
'left' => $this->lMargin,
'right' => $this->rMargin,
'top' => $this->tMargin,
'bottom' => $this->bMargin,
'header' => $this->header_margin,
'footer' => $this->footer_margin,
'cell' => $this->cell_padding,
'padding_left' => $this->cell_padding['L'],
'padding_top' => $this->cell_padding['T'],
'padding_right' => $this->cell_padding['R'],
'padding_bottom' => $this->cell_padding['B']
);
return $ret;
}
TCPDF::getNumberOfColumns ( )

Return the current number of columns.

Returns
int number of columns public
Since
5.8.018 (2010-08-25)

Definition at line 23159 of file tcpdf.php.

{
}
TCPDF::GetNumChars (   $s)

Returns the numbero of characters in a string.

Parameters
string$sThe input string.
Returns
int number of characters public
Since
2.0.0001 (2008-01-07)

Definition at line 4587 of file tcpdf.php.

References isUnicodeFont(), and UTF8StringToArray().

Referenced by getCellCode().

{
if ($this->isUnicodeFont()) {
return count($this->UTF8StringToArray($s));
}
return strlen($s);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::getNumLines (   $txt,
  $w = 0,
  $reseth = false,
  $autopadding = true,
  $cellpadding = '',
  $border = 0 
)

This method return the estimated number of lines for print a simple text string using Multicell() method.

Parameters
string$txtString for calculating his height
float$wWidth of cells. If 0, they extend up to the right margin of the page.
boolean$resethif true reset the last cell height (default false).
boolean$autopaddingif true, uses internal padding and automatically adjust it to account for line width (default true).
float$cellpaddingInternal cell padding, if empty uses default cell padding.
mixed$borderIndicates if borders must be drawn around the cell. The value can be a number:
  • 0: no border (default)
  • 1: frame
or a string containing some or all of the following characters (in any order):
  • L: left
  • T: top
  • R: right
  • B: bottom
or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
Returns
float Return the minimal height needed for multicell method for printing the $txt param.
Author
Alexander Escalona Fernández, Nicola Asuni public
Since
4.5.011

Definition at line 6329 of file tcpdf.php.

References $cell_padding, $lasth, $lMargin, $w, $x, adjustCellPadding(), empty_string(), GetArrStringWidth(), resetLastH(), unichr(), utf8Bidi(), and UTF8StringToArray().

Referenced by getStringHeight().

{
if ($txt === '') {
// empty string
return 1;
}
// adjust internal padding
$prev_cell_padding = $this->cell_padding;
$prev_lasth = $this->lasth;
if (is_array($cellpadding)) {
$this->cell_padding = $cellpadding;
}
$this->adjustCellPadding($border);
if ($this->empty_string($w) OR ($w <= 0)) {
if ($this->rtl) {
$w = $this->x - $this->lMargin;
} else {
$w = $this->w - $this->rMargin - $this->x;
}
}
$wmax = $w - $this->cell_padding['L'] - $this->cell_padding['R'];
if ($reseth) {
// reset row height
$this->resetLastH();
}
$lines = 1;
$sum = 0;
$chars = $this->utf8Bidi($this->UTF8StringToArray($txt), $txt, $this->tmprtl);
$charsWidth = $this->GetArrStringWidth($chars, '', '', 0, true);
$length = count($chars);
$lastSeparator = -1;
for ($i = 0; $i < $length; ++$i) {
$charWidth = $charsWidth[$i];
if (preg_match($this->re_spaces, $this->unichr($chars[$i]))) {
$lastSeparator = $i;
}
if ((($sum + $charWidth) > $wmax) OR ($chars[$i] == 10)) {
++$lines;
if ($lastSeparator != -1) {
$i = $lastSeparator;
$lastSeparator = -1;
$sum = 0;
} else {
$sum = $charWidth;
}
} else {
$sum += $charWidth;
}
}
if ($chars[($length - 1)] == 10) {
--$lines;
}
$this->cell_padding = $prev_cell_padding;
$this->lasth = $prev_lasth;
return $lines;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::getNumPages ( )

Get the total number of insered pages.

Returns
int number of pages public
Since
2.1.000 (2008-01-07)
See Also
setPage(), getPage(), lastpage()

Definition at line 3700 of file tcpdf.php.

References $numpages.

Referenced by lastPage().

{
}

+ Here is the caller graph for this function:

TCPDF::getObjFilename (   $name)
protected

Returns a temporary filename for caching object on filesystem.

Parameters
string$prefixprefix to add to filename return string filename. protected
Since
4.5.000 (2008-12-31)

Definition at line 22025 of file tcpdf.php.

References $name, and K_PATH_CACHE.

{
return tempnam(K_PATH_CACHE, $name.'_');
}
TCPDF::getOriginalMargins ( )

Returns an array containing original margins:

  • $ret['left'] = left margin
  • $ret['right'] = right margin
Returns
array containing all margins measures public
Since
4.0.012 (2008-07-24)

Definition at line 17213 of file tcpdf.php.

References $ret.

Referenced by Footer(), and Header().

{
$ret = array(
'left' => $this->original_lMargin,
'right' => $this->original_rMargin
);
return $ret;
}

+ Here is the caller graph for this function:

TCPDF::getPage ( )

Get current document page number.

Returns
int page number public
Since
2.1.000 (2008-01-07)
See Also
setPage(), lastpage(), getNumPages()

Definition at line 3689 of file tcpdf.php.

References $page.

{
return $this->page;
}
TCPDF::getPageBuffer (   $page)
protected

Get page buffer content.

Parameters
int$pagepage number
Returns
string page buffer content or false in case of error protected
Since
4.5.000 (2008-12-31)

Definition at line 22154 of file tcpdf.php.

Referenced by MultiCell().

{
if ($this->diskcache) {
return $this->readDiskCache($this->pages[$page]);
} elseif (isset($this->pages[$page])) {
return $this->pages[$page];
}
return false;
}

+ Here is the caller graph for this function:

TCPDF::getPageDimensions (   $pagenum = '')

Returns an array of page dimensions:

  • $this->pagedim[$this->page]['w'] = page width in points
  • $this->pagedim[$this->page]['h'] = height in points
  • $this->pagedim[$this->page]['wk'] = page width in user units
  • $this->pagedim[$this->page]['hk'] = page height in user units
  • $this->pagedim[$this->page]['tm'] = top margin
  • $this->pagedim[$this->page]['bm'] = bottom margin
  • $this->pagedim[$this->page]['lm'] = left margin
  • $this->pagedim[$this->page]['rm'] = right margin
  • $this->pagedim[$this->page]['pb'] = auto page break
  • $this->pagedim[$this->page]['or'] = page orientation
  • $this->pagedim[$this->page]['olm'] = original left margin
  • $this->pagedim[$this->page]['orm'] = original right margin
  • $this->pagedim[$this->page]['Rotate'] = The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90.
  • $this->pagedim[$this->page]['PZ'] = The page's preferred zoom (magnification) factor.
  • $this->pagedim[$this->page]['trans'] : the style and duration of the visual transition to use when moving from another page to the given page during a presentation
    • $this->pagedim[$this->page]['trans']['Dur'] = The page's display duration (also called its advance timing): the maximum length of time, in seconds, that the page shall be displayed during presentations before the viewer application shall automatically advance to the next page.
    • $this->pagedim[$this->page]['trans']['S'] = transition style : Split, Blinds, Box, Wipe, Dissolve, Glitter, R, Fly, Push, Cover, Uncover, Fade
    • $this->pagedim[$this->page]['trans']['D'] = The duration of the transition effect, in seconds.
    • $this->pagedim[$this->page]['trans']['Dm'] = (Split and Blinds transition styles only) The dimension in which the specified transition effect shall occur: H = Horizontal, V = Vertical. Default value: H.
    • $this->pagedim[$this->page]['trans']['M'] = (Split, Box and Fly transition styles only) The direction of motion for the specified transition effect: I = Inward from the edges of the page, O = Outward from the center of the pageDefault value: I.
    • $this->pagedim[$this->page]['trans']['Di'] = (Wipe, Glitter, Fly, Cover, Uncover and Push transition styles only) The direction in which the specified transition effect shall moves, expressed in degrees counterclockwise starting from a left-to-right direction. If the value is a number, it shall be one of: 0 = Left to right, 90 = Bottom to top (Wipe only), 180 = Right to left (Wipe only), 270 = Top to bottom, 315 = Top-left to bottom-right (Glitter only). If the value is a name, it shall be None, which is relevant only for the Fly transition when the value of SS is not 1.0. Default value: 0.
    • $this->pagedim[$this->page]['trans']['SS'] = (Fly transition style only) The starting or ending scale at which the changes shall be drawn. If M specifies an inward transition, the scale of the changes drawn shall progress from SS to 1.0 over the course of the transition. If M specifies an outward transition, the scale of the changes drawn shall progress from 1.0 to SS over the course of the transition. Default: 1.0.
    • $this->pagedim[$this->page]['trans']['B'] = (Fly transition style only) If true, the area that shall be flown in is rectangular and opaque. Default: false.
  • $this->pagedim[$this->page]['MediaBox'] : the boundaries of the physical medium on which the page shall be displayed or printed
    • $this->pagedim[$this->page]['MediaBox']['llx'] = lower-left x coordinate in points
    • $this->pagedim[$this->page]['MediaBox']['lly'] = lower-left y coordinate in points
    • $this->pagedim[$this->page]['MediaBox']['urx'] = upper-right x coordinate in points
    • $this->pagedim[$this->page]['MediaBox']['ury'] = upper-right y coordinate in points
  • $this->pagedim[$this->page]['CropBox'] : the visible region of default user space
    • $this->pagedim[$this->page]['CropBox']['llx'] = lower-left x coordinate in points
    • $this->pagedim[$this->page]['CropBox']['lly'] = lower-left y coordinate in points
    • $this->pagedim[$this->page]['CropBox']['urx'] = upper-right x coordinate in points
    • $this->pagedim[$this->page]['CropBox']['ury'] = upper-right y coordinate in points
  • $this->pagedim[$this->page]['BleedBox'] : the region to which the contents of the page shall be clipped when output in a production environment
    • $this->pagedim[$this->page]['BleedBox']['llx'] = lower-left x coordinate in points
    • $this->pagedim[$this->page]['BleedBox']['lly'] = lower-left y coordinate in points
    • $this->pagedim[$this->page]['BleedBox']['urx'] = upper-right x coordinate in points
    • $this->pagedim[$this->page]['BleedBox']['ury'] = upper-right y coordinate in points
  • $this->pagedim[$this->page]['TrimBox'] : the intended dimensions of the finished page after trimming
    • $this->pagedim[$this->page]['TrimBox']['llx'] = lower-left x coordinate in points
    • $this->pagedim[$this->page]['TrimBox']['lly'] = lower-left y coordinate in points
    • $this->pagedim[$this->page]['TrimBox']['urx'] = upper-right x coordinate in points
    • $this->pagedim[$this->page]['TrimBox']['ury'] = upper-right y coordinate in points
  • $this->pagedim[$this->page]['ArtBox'] : the extent of the page's meaningful content
    • $this->pagedim[$this->page]['ArtBox']['llx'] = lower-left x coordinate in points
    • $this->pagedim[$this->page]['ArtBox']['lly'] = lower-left y coordinate in points
    • $this->pagedim[$this->page]['ArtBox']['urx'] = upper-right x coordinate in points
    • $this->pagedim[$this->page]['ArtBox']['ury'] = upper-right y coordinate in points
Parameters
int$pagenumpage number (empty = current page)
Returns
array of page dimensions.
Author
Nicola Asuni public
Since
4.5.027 (2009-03-16)

Definition at line 3088 of file tcpdf.php.

References $page.

{
if (empty($pagenum)) {
$pagenum = $this->page;
}
return $this->pagedim[$pagenum];
}
TCPDF::getPageGroupAlias ( )

Return the alias of the current page group If the current font is unicode type, the returned string is surrounded by additional curly braces.

(will be replaced by the total number of pages in this group).

Returns
alias of the current page group public
Since
3.0.000 (2008-03-27)

Definition at line 15345 of file tcpdf.php.

Referenced by Footer().

{
if ($this->isUnicodeFont()) {
return '{'.$this->currpagegroup.'}';
}
}

+ Here is the caller graph for this function:

TCPDF::getPageHeight (   $pagenum = '')

Returns the page height in units.

Parameters
int$pagenumpage number (empty = current page)
Returns
int page height.
Author
Nicola Asuni public
Since
1.5.2
See Also
getPageDimensions()

Definition at line 3120 of file tcpdf.php.

References $h.

{
if (empty($pagenum)) {
return $this->h;
}
return $this->pagedim[$pagenum]['h'];
}
TCPDF::getPageNumGroupAlias ( )

Return the alias for the page number on the current page group If the current font is unicode type, the returned string is surrounded by additional curly braces.

(will be replaced by the total number of pages in this group).

Returns
alias of the current page group public
Since
4.5.000 (2009-01-02)

Definition at line 15360 of file tcpdf.php.

Referenced by Footer().

{
if ($this->isUnicodeFont()) {
return '{'.str_replace('{nb', '{pnb', $this->currpagegroup).'}';
}
return str_replace('{nb', '{pnb', $this->currpagegroup);
}

+ Here is the caller graph for this function:

TCPDF::getPageRegions ( )

Return an array of no-write page regions.

Returns
array of no-write page regions
Author
Nicola Asuni public
Since
5.9.003 (2010-10-13)
See Also
setPageRegions(), addPageRegion()

Definition at line 23878 of file tcpdf.php.

{
}
TCPDF::getPageSizeFromFormat (   $format)

Get page dimensions from format name.

Parameters
mixed$formatThe format name. It can be:
  • ISO 216 A Series + 2 SIS 014711 extensions
  • A0 (841x1189 mm ; 33.11x46.81 in)
  • A1 (594x841 mm ; 23.39x33.11 in)
  • A2 (420x594 mm ; 16.54x23.39 in)
  • A3 (297x420 mm ; 11.69x16.54 in)
  • A4 (210x297 mm ; 8.27x11.69 in)
  • A5 (148x210 mm ; 5.83x8.27 in)
  • A6 (105x148 mm ; 4.13x5.83 in)
  • A7 (74x105 mm ; 2.91x4.13 in)
  • A8 (52x74 mm ; 2.05x2.91 in)
  • A9 (37x52 mm ; 1.46x2.05 in)
  • A10 (26x37 mm ; 1.02x1.46 in)
  • A11 (18x26 mm ; 0.71x1.02 in)
  • A12 (13x18 mm ; 0.51x0.71 in)
  • ISO 216 B Series + 2 SIS 014711 extensions
  • B0 (1000x1414 mm ; 39.37x55.67 in)
  • B1 (707x1000 mm ; 27.83x39.37 in)
  • B2 (500x707 mm ; 19.69x27.83 in)
  • B3 (353x500 mm ; 13.90x19.69 in)
  • B4 (250x353 mm ; 9.84x13.90 in)
  • B5 (176x250 mm ; 6.93x9.84 in)
  • B6 (125x176 mm ; 4.92x6.93 in)
  • B7 (88x125 mm ; 3.46x4.92 in)
  • B8 (62x88 mm ; 2.44x3.46 in)
  • B9 (44x62 mm ; 1.73x2.44 in)
  • B10 (31x44 mm ; 1.22x1.73 in)
  • B11 (22x31 mm ; 0.87x1.22 in)
  • B12 (15x22 mm ; 0.59x0.87 in)
  • ISO 216 C Series + 2 SIS 014711 extensions + 2 EXTENSION
  • C0 (917x1297 mm ; 36.10x51.06 in)
  • C1 (648x917 mm ; 25.51x36.10 in)
  • C2 (458x648 mm ; 18.03x25.51 in)
  • C3 (324x458 mm ; 12.76x18.03 in)
  • C4 (229x324 mm ; 9.02x12.76 in)
  • C5 (162x229 mm ; 6.38x9.02 in)
  • C6 (114x162 mm ; 4.49x6.38 in)
  • C7 (81x114 mm ; 3.19x4.49 in)
  • C8 (57x81 mm ; 2.24x3.19 in)
  • C9 (40x57 mm ; 1.57x2.24 in)
  • C10 (28x40 mm ; 1.10x1.57 in)
  • C11 (20x28 mm ; 0.79x1.10 in)
  • C12 (14x20 mm ; 0.55x0.79 in)
  • C76 (81x162 mm ; 3.19x6.38 in)
  • DL (110x220 mm ; 4.33x8.66 in)
  • SIS 014711 E Series
  • E0 (879x1241 mm ; 34.61x48.86 in)
  • E1 (620x879 mm ; 24.41x34.61 in)
  • E2 (440x620 mm ; 17.32x24.41 in)
  • E3 (310x440 mm ; 12.20x17.32 in)
  • E4 (220x310 mm ; 8.66x12.20 in)
  • E5 (155x220 mm ; 6.10x8.66 in)
  • E6 (110x155 mm ; 4.33x6.10 in)
  • E7 (78x110 mm ; 3.07x4.33 in)
  • E8 (55x78 mm ; 2.17x3.07 in)
  • E9 (39x55 mm ; 1.54x2.17 in)
  • E10 (27x39 mm ; 1.06x1.54 in)
  • E11 (19x27 mm ; 0.75x1.06 in)
  • E12 (13x19 mm ; 0.51x0.75 in)
  • SIS 014711 G Series
  • G0 (958x1354 mm ; 37.72x53.31 in)
  • G1 (677x958 mm ; 26.65x37.72 in)
  • G2 (479x677 mm ; 18.86x26.65 in)
  • G3 (338x479 mm ; 13.31x18.86 in)
  • G4 (239x338 mm ; 9.41x13.31 in)
  • G5 (169x239 mm ; 6.65x9.41 in)
  • G6 (119x169 mm ; 4.69x6.65 in)
  • G7 (84x119 mm ; 3.31x4.69 in)
  • G8 (59x84 mm ; 2.32x3.31 in)
  • G9 (42x59 mm ; 1.65x2.32 in)
  • G10 (29x42 mm ; 1.14x1.65 in)
  • G11 (21x29 mm ; 0.83x1.14 in)
  • G12 (14x21 mm ; 0.55x0.83 in)
  • ISO Press
  • RA0 (860x1220 mm ; 33.86x48.03 in)
  • RA1 (610x860 mm ; 24.02x33.86 in)
  • RA2 (430x610 mm ; 16.93x24.02 in)
  • RA3 (305x430 mm ; 12.01x16.93 in)
  • RA4 (215x305 mm ; 8.46x12.01 in)
  • SRA0 (900x1280 mm ; 35.43x50.39 in)
  • SRA1 (640x900 mm ; 25.20x35.43 in)
  • SRA2 (450x640 mm ; 17.72x25.20 in)
  • SRA3 (320x450 mm ; 12.60x17.72 in)
  • SRA4 (225x320 mm ; 8.86x12.60 in)
  • German DIN 476
  • 4A0 (1682x2378 mm ; 66.22x93.62 in)
  • 2A0 (1189x1682 mm ; 46.81x66.22 in)
  • Variations on the ISO Standard
  • A2_EXTRA (445x619 mm ; 17.52x24.37 in)
  • A3+ (329x483 mm ; 12.95x19.02 in)
  • A3_EXTRA (322x445 mm ; 12.68x17.52 in)
  • A3_SUPER (305x508 mm ; 12.01x20.00 in)
  • SUPER_A3 (305x487 mm ; 12.01x19.17 in)
  • A4_EXTRA (235x322 mm ; 9.25x12.68 in)
  • A4_SUPER (229x322 mm ; 9.02x12.68 in)
  • SUPER_A4 (227x356 mm ; 8.94x14.02 in)
  • A4_LONG (210x348 mm ; 8.27x13.70 in)
  • F4 (210x330 mm ; 8.27x12.99 in)
  • SO_B5_EXTRA (202x276 mm ; 7.95x10.87 in)
  • A5_EXTRA (173x235 mm ; 6.81x9.25 in)
  • ANSI Series
  • ANSI_E (864x1118 mm ; 34.00x44.00 in)
  • ANSI_D (559x864 mm ; 22.00x34.00 in)
  • ANSI_C (432x559 mm ; 17.00x22.00 in)
  • ANSI_B (279x432 mm ; 11.00x17.00 in)
  • ANSI_A (216x279 mm ; 8.50x11.00 in)
  • Traditional 'Loose' North American Paper Sizes
  • LEDGER, USLEDGER (432x279 mm ; 17.00x11.00 in)
  • TABLOID, USTABLOID, BIBLE, ORGANIZERK (279x432 mm ; 11.00x17.00 in)
  • LETTER, USLETTER, ORGANIZERM (216x279 mm ; 8.50x11.00 in)
  • LEGAL, USLEGAL (216x356 mm ; 8.50x14.00 in)
  • GLETTER, GOVERNMENTLETTER (203x267 mm ; 8.00x10.50 in)
  • JLEGAL, JUNIORLEGAL (203x127 mm ; 8.00x5.00 in)
  • Other North American Paper Sizes
  • QUADDEMY (889x1143 mm ; 35.00x45.00 in)
  • SUPER_B (330x483 mm ; 13.00x19.00 in)
  • QUARTO (229x279 mm ; 9.00x11.00 in)
  • FOLIO, GOVERNMENTLEGAL (216x330 mm ; 8.50x13.00 in)
  • EXECUTIVE, MONARCH (184x267 mm ; 7.25x10.50 in)
  • MEMO, STATEMENT, ORGANIZERL (140x216 mm ; 5.50x8.50 in)
  • FOOLSCAP (210x330 mm ; 8.27x13.00 in)
  • COMPACT (108x171 mm ; 4.25x6.75 in)
  • ORGANIZERJ (70x127 mm ; 2.75x5.00 in)
  • Canadian standard CAN 2-9.60M
  • P1 (560x860 mm ; 22.05x33.86 in)
  • P2 (430x560 mm ; 16.93x22.05 in)
  • P3 (280x430 mm ; 11.02x16.93 in)
  • P4 (215x280 mm ; 8.46x11.02 in)
  • P5 (140x215 mm ; 5.51x8.46 in)
  • P6 (107x140 mm ; 4.21x5.51 in)
  • North American Architectural Sizes
  • ARCH_E (914x1219 mm ; 36.00x48.00 in)
  • ARCH_E1 (762x1067 mm ; 30.00x42.00 in)
  • ARCH_D (610x914 mm ; 24.00x36.00 in)
  • ARCH_C, BROADSHEET (457x610 mm ; 18.00x24.00 in)
  • ARCH_B (305x457 mm ; 12.00x18.00 in)
  • ARCH_A (229x305 mm ; 9.00x12.00 in)
  • Announcement Envelopes
  • ANNENV_A2 (111x146 mm ; 4.37x5.75 in)
  • ANNENV_A6 (121x165 mm ; 4.75x6.50 in)
  • ANNENV_A7 (133x184 mm ; 5.25x7.25 in)
  • ANNENV_A8 (140x206 mm ; 5.50x8.12 in)
  • ANNENV_A10 (159x244 mm ; 6.25x9.62 in)
  • ANNENV_SLIM (98x225 mm ; 3.87x8.87 in)
  • Commercial Envelopes
  • COMMENV_N6_1/4 (89x152 mm ; 3.50x6.00 in)
  • COMMENV_N6_3/4 (92x165 mm ; 3.62x6.50 in)
  • COMMENV_N8 (98x191 mm ; 3.87x7.50 in)
  • COMMENV_N9 (98x225 mm ; 3.87x8.87 in)
  • COMMENV_N10 (105x241 mm ; 4.12x9.50 in)
  • COMMENV_N11 (114x263 mm ; 4.50x10.37 in)
  • COMMENV_N12 (121x279 mm ; 4.75x11.00 in)
  • COMMENV_N14 (127x292 mm ; 5.00x11.50 in)
  • Catalogue Envelopes
  • CATENV_N1 (152x229 mm ; 6.00x9.00 in)
  • CATENV_N1_3/4 (165x241 mm ; 6.50x9.50 in)
  • CATENV_N2 (165x254 mm ; 6.50x10.00 in)
  • CATENV_N3 (178x254 mm ; 7.00x10.00 in)
  • CATENV_N6 (191x267 mm ; 7.50x10.50 in)
  • CATENV_N7 (203x279 mm ; 8.00x11.00 in)
  • CATENV_N8 (210x286 mm ; 8.25x11.25 in)
  • CATENV_N9_1/2 (216x267 mm ; 8.50x10.50 in)
  • CATENV_N9_3/4 (222x286 mm ; 8.75x11.25 in)
  • CATENV_N10_1/2 (229x305 mm ; 9.00x12.00 in)
  • CATENV_N12_1/2 (241x318 mm ; 9.50x12.50 in)
  • CATENV_N13_1/2 (254x330 mm ; 10.00x13.00 in)
  • CATENV_N14_1/4 (286x311 mm ; 11.25x12.25 in)
  • CATENV_N14_1/2 (292x368 mm ; 11.50x14.50 in)
  • Japanese (JIS P 0138-61) Standard B-Series
  • JIS_B0 (1030x1456 mm ; 40.55x57.32 in)
  • JIS_B1 (728x1030 mm ; 28.66x40.55 in)
  • JIS_B2 (515x728 mm ; 20.28x28.66 in)
  • JIS_B3 (364x515 mm ; 14.33x20.28 in)
  • JIS_B4 (257x364 mm ; 10.12x14.33 in)
  • JIS_B5 (182x257 mm ; 7.17x10.12 in)
  • JIS_B6 (128x182 mm ; 5.04x7.17 in)
  • JIS_B7 (91x128 mm ; 3.58x5.04 in)
  • JIS_B8 (64x91 mm ; 2.52x3.58 in)
  • JIS_B9 (45x64 mm ; 1.77x2.52 in)
  • JIS_B10 (32x45 mm ; 1.26x1.77 in)
  • JIS_B11 (22x32 mm ; 0.87x1.26 in)
  • JIS_B12 (16x22 mm ; 0.63x0.87 in)
  • PA Series
  • PA0 (840x1120 mm ; 33.07x44.09 in)
  • PA1 (560x840 mm ; 22.05x33.07 in)
  • PA2 (420x560 mm ; 16.54x22.05 in)
  • PA3 (280x420 mm ; 11.02x16.54 in)
  • PA4 (210x280 mm ; 8.27x11.02 in)
  • PA5 (140x210 mm ; 5.51x8.27 in)
  • PA6 (105x140 mm ; 4.13x5.51 in)
  • PA7 (70x105 mm ; 2.76x4.13 in)
  • PA8 (52x70 mm ; 2.05x2.76 in)
  • PA9 (35x52 mm ; 1.38x2.05 in)
  • PA10 (26x35 mm ; 1.02x1.38 in)
  • Standard Photographic Print Sizes
  • PASSPORT_PHOTO (35x45 mm ; 1.38x1.77 in)
  • E (82x120 mm ; 3.25x4.72 in)
  • 3R, L (89x127 mm ; 3.50x5.00 in)
  • 4R, KG (102x152 mm ; 4.02x5.98 in)
  • 4D (120x152 mm ; 4.72x5.98 in)
  • 5R, 2L (127x178 mm ; 5.00x7.01 in)
  • 6R, 8P (152x203 mm ; 5.98x7.99 in)
  • 8R, 6P (203x254 mm ; 7.99x10.00 in)
  • S8R, 6PW (203x305 mm ; 7.99x12.01 in)
  • 10R, 4P (254x305 mm ; 10.00x12.01 in)
  • S10R, 4PW (254x381 mm ; 10.00x15.00 in)
  • 11R (279x356 mm ; 10.98x14.02 in)
  • S11R (279x432 mm ; 10.98x17.01 in)
  • 12R (305x381 mm ; 12.01x15.00 in)
  • S12R (305x456 mm ; 12.01x17.95 in)
  • Common Newspaper Sizes
  • NEWSPAPER_BROADSHEET (750x600 mm ; 29.53x23.62 in)
  • NEWSPAPER_BERLINER (470x315 mm ; 18.50x12.40 in)
  • NEWSPAPER_COMPACT, NEWSPAPER_TABLOID (430x280 mm ; 16.93x11.02 in)
  • Business Cards
  • CREDIT_CARD, BUSINESS_CARD, BUSINESS_CARD_ISO7810 (54x86 mm ; 2.13x3.37 in)
  • BUSINESS_CARD_ISO216 (52x74 mm ; 2.05x2.91 in)
  • BUSINESS_CARD_IT, BUSINESS_CARD_UK, BUSINESS_CARD_FR, BUSINESS_CARD_DE, BUSINESS_CARD_ES (55x85 mm ; 2.17x3.35 in)
  • BUSINESS_CARD_US, BUSINESS_CARD_CA (51x89 mm ; 2.01x3.50 in)
  • BUSINESS_CARD_JP (55x91 mm ; 2.17x3.58 in)
  • BUSINESS_CARD_HK (54x90 mm ; 2.13x3.54 in)
  • BUSINESS_CARD_AU, BUSINESS_CARD_DK, BUSINESS_CARD_SE (55x90 mm ; 2.17x3.54 in)
  • BUSINESS_CARD_RU, BUSINESS_CARD_CZ, BUSINESS_CARD_FI, BUSINESS_CARD_HU, BUSINESS_CARD_IL (50x90 mm ; 1.97x3.54 in)
  • Billboards
  • 4SHEET (1016x1524 mm ; 40.00x60.00 in)
  • 6SHEET (1200x1800 mm ; 47.24x70.87 in)
  • 12SHEET (3048x1524 mm ; 120.00x60.00 in)
  • 16SHEET (2032x3048 mm ; 80.00x120.00 in)
  • 32SHEET (4064x3048 mm ; 160.00x120.00 in)
  • 48SHEET (6096x3048 mm ; 240.00x120.00 in)
  • 64SHEET (8128x3048 mm ; 320.00x120.00 in)
  • 96SHEET (12192x3048 mm ; 480.00x120.00 in)
  • Old Imperial English (some are still used in USA)
  • EN_EMPEROR (1219x1829 mm ; 48.00x72.00 in)
  • EN_ANTIQUARIAN (787x1346 mm ; 31.00x53.00 in)
  • EN_GRAND_EAGLE (730x1067 mm ; 28.75x42.00 in)
  • EN_DOUBLE_ELEPHANT (679x1016 mm ; 26.75x40.00 in)
  • EN_ATLAS (660x864 mm ; 26.00x34.00 in)
  • EN_COLOMBIER (597x876 mm ; 23.50x34.50 in)
  • EN_ELEPHANT (584x711 mm ; 23.00x28.00 in)
  • EN_DOUBLE_DEMY (572x902 mm ; 22.50x35.50 in)
  • EN_IMPERIAL (559x762 mm ; 22.00x30.00 in)
  • EN_PRINCESS (546x711 mm ; 21.50x28.00 in)
  • EN_CARTRIDGE (533x660 mm ; 21.00x26.00 in)
  • EN_DOUBLE_LARGE_POST (533x838 mm ; 21.00x33.00 in)
  • EN_ROYAL (508x635 mm ; 20.00x25.00 in)
  • EN_SHEET, EN_HALF_POST (495x597 mm ; 19.50x23.50 in)
  • EN_SUPER_ROYAL (483x686 mm ; 19.00x27.00 in)
  • EN_DOUBLE_POST (483x775 mm ; 19.00x30.50 in)
  • EN_MEDIUM (445x584 mm ; 17.50x23.00 in)
  • EN_DEMY (445x572 mm ; 17.50x22.50 in)
  • EN_LARGE_POST (419x533 mm ; 16.50x21.00 in)
  • EN_COPY_DRAUGHT (406x508 mm ; 16.00x20.00 in)
  • EN_POST (394x489 mm ; 15.50x19.25 in)
  • EN_CROWN (381x508 mm ; 15.00x20.00 in)
  • EN_PINCHED_POST (375x470 mm ; 14.75x18.50 in)
  • EN_BRIEF (343x406 mm ; 13.50x16.00 in)
  • EN_FOOLSCAP (343x432 mm ; 13.50x17.00 in)
  • EN_SMALL_FOOLSCAP (337x419 mm ; 13.25x16.50 in)
  • EN_POTT (318x381 mm ; 12.50x15.00 in)
  • Old Imperial Belgian
  • BE_GRAND_AIGLE (700x1040 mm ; 27.56x40.94 in)
  • BE_COLOMBIER (620x850 mm ; 24.41x33.46 in)
  • BE_DOUBLE_CARRE (620x920 mm ; 24.41x36.22 in)
  • BE_ELEPHANT (616x770 mm ; 24.25x30.31 in)
  • BE_PETIT_AIGLE (600x840 mm ; 23.62x33.07 in)
  • BE_GRAND_JESUS (550x730 mm ; 21.65x28.74 in)
  • BE_JESUS (540x730 mm ; 21.26x28.74 in)
  • BE_RAISIN (500x650 mm ; 19.69x25.59 in)
  • BE_GRAND_MEDIAN (460x605 mm ; 18.11x23.82 in)
  • BE_DOUBLE_POSTE (435x565 mm ; 17.13x22.24 in)
  • BE_COQUILLE (430x560 mm ; 16.93x22.05 in)
  • BE_PETIT_MEDIAN (415x530 mm ; 16.34x20.87 in)
  • BE_RUCHE (360x460 mm ; 14.17x18.11 in)
  • BE_PROPATRIA (345x430 mm ; 13.58x16.93 in)
  • BE_LYS (317x397 mm ; 12.48x15.63 in)
  • BE_POT (307x384 mm ; 12.09x15.12 in)
  • BE_ROSETTE (270x347 mm ; 10.63x13.66 in)
  • Old Imperial French
  • FR_UNIVERS (1000x1300 mm ; 39.37x51.18 in)
  • FR_DOUBLE_COLOMBIER (900x1260 mm ; 35.43x49.61 in)
  • FR_GRANDE_MONDE (900x1260 mm ; 35.43x49.61 in)
  • FR_DOUBLE_SOLEIL (800x1200 mm ; 31.50x47.24 in)
  • FR_DOUBLE_JESUS (760x1120 mm ; 29.92x44.09 in)
  • FR_GRAND_AIGLE (750x1060 mm ; 29.53x41.73 in)
  • FR_PETIT_AIGLE (700x940 mm ; 27.56x37.01 in)
  • FR_DOUBLE_RAISIN (650x1000 mm ; 25.59x39.37 in)
  • FR_JOURNAL (650x940 mm ; 25.59x37.01 in)
  • FR_COLOMBIER_AFFICHE (630x900 mm ; 24.80x35.43 in)
  • FR_DOUBLE_CAVALIER (620x920 mm ; 24.41x36.22 in)
  • FR_CLOCHE (600x800 mm ; 23.62x31.50 in)
  • FR_SOLEIL (600x800 mm ; 23.62x31.50 in)
  • FR_DOUBLE_CARRE (560x900 mm ; 22.05x35.43 in)
  • FR_DOUBLE_COQUILLE (560x880 mm ; 22.05x34.65 in)
  • FR_JESUS (560x760 mm ; 22.05x29.92 in)
  • FR_RAISIN (500x650 mm ; 19.69x25.59 in)
  • FR_CAVALIER (460x620 mm ; 18.11x24.41 in)
  • FR_DOUBLE_COURONNE (460x720 mm ; 18.11x28.35 in)
  • FR_CARRE (450x560 mm ; 17.72x22.05 in)
  • FR_COQUILLE (440x560 mm ; 17.32x22.05 in)
  • FR_DOUBLE_TELLIERE (440x680 mm ; 17.32x26.77 in)
  • FR_DOUBLE_CLOCHE (400x600 mm ; 15.75x23.62 in)
  • FR_DOUBLE_POT (400x620 mm ; 15.75x24.41 in)
  • FR_ECU (400x520 mm ; 15.75x20.47 in)
  • FR_COURONNE (360x460 mm ; 14.17x18.11 in)
  • FR_TELLIERE (340x440 mm ; 13.39x17.32 in)
  • FR_POT (310x400 mm ; 12.20x15.75 in)
Returns
array containing page width and height in points public
Since
5.0.010 (2010-05-17)

Definition at line 2259 of file tcpdf.php.

Referenced by setPageFormat().

{
// Paper cordinates are calculated in this way: (inches * 72) where (1 inch = 25.4 mm)
switch (strtoupper($format)) {
// ISO 216 A Series + 2 SIS 014711 extensions
case 'A0' : {$pf = array( 2383.937, 3370.394); break;}
case 'A1' : {$pf = array( 1683.780, 2383.937); break;}
case 'A2' : {$pf = array( 1190.551, 1683.780); break;}
case 'A3' : {$pf = array( 841.890, 1190.551); break;}
case 'A4' : {$pf = array( 595.276, 841.890); break;}
case 'A5' : {$pf = array( 419.528, 595.276); break;}
case 'A6' : {$pf = array( 297.638, 419.528); break;}
case 'A7' : {$pf = array( 209.764, 297.638); break;}
case 'A8' : {$pf = array( 147.402, 209.764); break;}
case 'A9' : {$pf = array( 104.882, 147.402); break;}
case 'A10': {$pf = array( 73.701, 104.882); break;}
case 'A11': {$pf = array( 51.024, 73.701); break;}
case 'A12': {$pf = array( 36.850, 51.024); break;}
// ISO 216 B Series + 2 SIS 014711 extensions
case 'B0' : {$pf = array( 2834.646, 4008.189); break;}
case 'B1' : {$pf = array( 2004.094, 2834.646); break;}
case 'B2' : {$pf = array( 1417.323, 2004.094); break;}
case 'B3' : {$pf = array( 1000.630, 1417.323); break;}
case 'B4' : {$pf = array( 708.661, 1000.630); break;}
case 'B5' : {$pf = array( 498.898, 708.661); break;}
case 'B6' : {$pf = array( 354.331, 498.898); break;}
case 'B7' : {$pf = array( 249.449, 354.331); break;}
case 'B8' : {$pf = array( 175.748, 249.449); break;}
case 'B9' : {$pf = array( 124.724, 175.748); break;}
case 'B10': {$pf = array( 87.874, 124.724); break;}
case 'B11': {$pf = array( 62.362, 87.874); break;}
case 'B12': {$pf = array( 42.520, 62.362); break;}
// ISO 216 C Series + 2 SIS 014711 extensions + 2 EXTENSION
case 'C0' : {$pf = array( 2599.370, 3676.535); break;}
case 'C1' : {$pf = array( 1836.850, 2599.370); break;}
case 'C2' : {$pf = array( 1298.268, 1836.850); break;}
case 'C3' : {$pf = array( 918.425, 1298.268); break;}
case 'C4' : {$pf = array( 649.134, 918.425); break;}
case 'C5' : {$pf = array( 459.213, 649.134); break;}
case 'C6' : {$pf = array( 323.150, 459.213); break;}
case 'C7' : {$pf = array( 229.606, 323.150); break;}
case 'C8' : {$pf = array( 161.575, 229.606); break;}
case 'C9' : {$pf = array( 113.386, 161.575); break;}
case 'C10': {$pf = array( 79.370, 113.386); break;}
case 'C11': {$pf = array( 56.693, 79.370); break;}
case 'C12': {$pf = array( 39.685, 56.693); break;}
case 'C76': {$pf = array( 229.606, 459.213); break;}
case 'DL' : {$pf = array( 311.811, 623.622); break;}
// SIS 014711 E Series
case 'E0' : {$pf = array( 2491.654, 3517.795); break;}
case 'E1' : {$pf = array( 1757.480, 2491.654); break;}
case 'E2' : {$pf = array( 1247.244, 1757.480); break;}
case 'E3' : {$pf = array( 878.740, 1247.244); break;}
case 'E4' : {$pf = array( 623.622, 878.740); break;}
case 'E5' : {$pf = array( 439.370, 623.622); break;}
case 'E6' : {$pf = array( 311.811, 439.370); break;}
case 'E7' : {$pf = array( 221.102, 311.811); break;}
case 'E8' : {$pf = array( 155.906, 221.102); break;}
case 'E9' : {$pf = array( 110.551, 155.906); break;}
case 'E10': {$pf = array( 76.535, 110.551); break;}
case 'E11': {$pf = array( 53.858, 76.535); break;}
case 'E12': {$pf = array( 36.850, 53.858); break;}
// SIS 014711 G Series
case 'G0' : {$pf = array( 2715.591, 3838.110); break;}
case 'G1' : {$pf = array( 1919.055, 2715.591); break;}
case 'G2' : {$pf = array( 1357.795, 1919.055); break;}
case 'G3' : {$pf = array( 958.110, 1357.795); break;}
case 'G4' : {$pf = array( 677.480, 958.110); break;}
case 'G5' : {$pf = array( 479.055, 677.480); break;}
case 'G6' : {$pf = array( 337.323, 479.055); break;}
case 'G7' : {$pf = array( 238.110, 337.323); break;}
case 'G8' : {$pf = array( 167.244, 238.110); break;}
case 'G9' : {$pf = array( 119.055, 167.244); break;}
case 'G10': {$pf = array( 82.205, 119.055); break;}
case 'G11': {$pf = array( 59.528, 82.205); break;}
case 'G12': {$pf = array( 39.685, 59.528); break;}
// ISO Press
case 'RA0': {$pf = array( 2437.795, 3458.268); break;}
case 'RA1': {$pf = array( 1729.134, 2437.795); break;}
case 'RA2': {$pf = array( 1218.898, 1729.134); break;}
case 'RA3': {$pf = array( 864.567, 1218.898); break;}
case 'RA4': {$pf = array( 609.449, 864.567); break;}
case 'SRA0': {$pf = array( 2551.181, 3628.346); break;}
case 'SRA1': {$pf = array( 1814.173, 2551.181); break;}
case 'SRA2': {$pf = array( 1275.591, 1814.173); break;}
case 'SRA3': {$pf = array( 907.087, 1275.591); break;}
case 'SRA4': {$pf = array( 637.795, 907.087); break;}
// German DIN 476
case '4A0': {$pf = array( 4767.874, 6740.787); break;}
case '2A0': {$pf = array( 3370.394, 4767.874); break;}
// Variations on the ISO Standard
case 'A2_EXTRA' : {$pf = array( 1261.417, 1754.646); break;}
case 'A3+' : {$pf = array( 932.598, 1369.134); break;}
case 'A3_EXTRA' : {$pf = array( 912.756, 1261.417); break;}
case 'A3_SUPER' : {$pf = array( 864.567, 1440.000); break;}
case 'SUPER_A3' : {$pf = array( 864.567, 1380.472); break;}
case 'A4_EXTRA' : {$pf = array( 666.142, 912.756); break;}
case 'A4_SUPER' : {$pf = array( 649.134, 912.756); break;}
case 'SUPER_A4' : {$pf = array( 643.465, 1009.134); break;}
case 'A4_LONG' : {$pf = array( 595.276, 986.457); break;}
case 'F4' : {$pf = array( 595.276, 935.433); break;}
case 'SO_B5_EXTRA': {$pf = array( 572.598, 782.362); break;}
case 'A5_EXTRA' : {$pf = array( 490.394, 666.142); break;}
// ANSI Series
case 'ANSI_E': {$pf = array( 2448.000, 3168.000); break;}
case 'ANSI_D': {$pf = array( 1584.000, 2448.000); break;}
case 'ANSI_C': {$pf = array( 1224.000, 1584.000); break;}
case 'ANSI_B': {$pf = array( 792.000, 1224.000); break;}
case 'ANSI_A': {$pf = array( 612.000, 792.000); break;}
// Traditional 'Loose' North American Paper Sizes
case 'USLEDGER':
case 'LEDGER' : {$pf = array( 1224.000, 792.000); break;}
case 'ORGANIZERK':
case 'BIBLE':
case 'USTABLOID':
case 'TABLOID': {$pf = array( 792.000, 1224.000); break;}
case 'ORGANIZERM':
case 'USLETTER':
case 'LETTER' : {$pf = array( 612.000, 792.000); break;}
case 'USLEGAL':
case 'LEGAL' : {$pf = array( 612.000, 1008.000); break;}
case 'GOVERNMENTLETTER':
case 'GLETTER': {$pf = array( 576.000, 756.000); break;}
case 'JUNIORLEGAL':
case 'JLEGAL' : {$pf = array( 576.000, 360.000); break;}
// Other North American Paper Sizes
case 'QUADDEMY': {$pf = array( 2520.000, 3240.000); break;}
case 'SUPER_B': {$pf = array( 936.000, 1368.000); break;}
case 'QUARTO': {$pf = array( 648.000, 792.000); break;}
case 'GOVERNMENTLEGAL':
case 'FOLIO': {$pf = array( 612.000, 936.000); break;}
case 'MONARCH':
case 'EXECUTIVE': {$pf = array( 522.000, 756.000); break;}
case 'ORGANIZERL':
case 'STATEMENT':
case 'MEMO': {$pf = array( 396.000, 612.000); break;}
case 'FOOLSCAP': {$pf = array( 595.440, 936.000); break;}
case 'COMPACT': {$pf = array( 306.000, 486.000); break;}
case 'ORGANIZERJ': {$pf = array( 198.000, 360.000); break;}
// Canadian standard CAN 2-9.60M
case 'P1': {$pf = array( 1587.402, 2437.795); break;}
case 'P2': {$pf = array( 1218.898, 1587.402); break;}
case 'P3': {$pf = array( 793.701, 1218.898); break;}
case 'P4': {$pf = array( 609.449, 793.701); break;}
case 'P5': {$pf = array( 396.850, 609.449); break;}
case 'P6': {$pf = array( 303.307, 396.850); break;}
// North American Architectural Sizes
case 'ARCH_E' : {$pf = array( 2592.000, 3456.000); break;}
case 'ARCH_E1': {$pf = array( 2160.000, 3024.000); break;}
case 'ARCH_D' : {$pf = array( 1728.000, 2592.000); break;}
case 'BROADSHEET':
case 'ARCH_C' : {$pf = array( 1296.000, 1728.000); break;}
case 'ARCH_B' : {$pf = array( 864.000, 1296.000); break;}
case 'ARCH_A' : {$pf = array( 648.000, 864.000); break;}
// --- North American Envelope Sizes ---
// - Announcement Envelopes
case 'ANNENV_A2' : {$pf = array( 314.640, 414.000); break;}
case 'ANNENV_A6' : {$pf = array( 342.000, 468.000); break;}
case 'ANNENV_A7' : {$pf = array( 378.000, 522.000); break;}
case 'ANNENV_A8' : {$pf = array( 396.000, 584.640); break;}
case 'ANNENV_A10' : {$pf = array( 450.000, 692.640); break;}
case 'ANNENV_SLIM': {$pf = array( 278.640, 638.640); break;}
// - Commercial Envelopes
case 'COMMENV_N6_1/4': {$pf = array( 252.000, 432.000); break;}
case 'COMMENV_N6_3/4': {$pf = array( 260.640, 468.000); break;}
case 'COMMENV_N8' : {$pf = array( 278.640, 540.000); break;}
case 'COMMENV_N9' : {$pf = array( 278.640, 638.640); break;}
case 'COMMENV_N10' : {$pf = array( 296.640, 684.000); break;}
case 'COMMENV_N11' : {$pf = array( 324.000, 746.640); break;}
case 'COMMENV_N12' : {$pf = array( 342.000, 792.000); break;}
case 'COMMENV_N14' : {$pf = array( 360.000, 828.000); break;}
// - Catalogue Envelopes
case 'CATENV_N1' : {$pf = array( 432.000, 648.000); break;}
case 'CATENV_N1_3/4' : {$pf = array( 468.000, 684.000); break;}
case 'CATENV_N2' : {$pf = array( 468.000, 720.000); break;}
case 'CATENV_N3' : {$pf = array( 504.000, 720.000); break;}
case 'CATENV_N6' : {$pf = array( 540.000, 756.000); break;}
case 'CATENV_N7' : {$pf = array( 576.000, 792.000); break;}
case 'CATENV_N8' : {$pf = array( 594.000, 810.000); break;}
case 'CATENV_N9_1/2' : {$pf = array( 612.000, 756.000); break;}
case 'CATENV_N9_3/4' : {$pf = array( 630.000, 810.000); break;}
case 'CATENV_N10_1/2': {$pf = array( 648.000, 864.000); break;}
case 'CATENV_N12_1/2': {$pf = array( 684.000, 900.000); break;}
case 'CATENV_N13_1/2': {$pf = array( 720.000, 936.000); break;}
case 'CATENV_N14_1/4': {$pf = array( 810.000, 882.000); break;}
case 'CATENV_N14_1/2': {$pf = array( 828.000, 1044.000); break;}
// Japanese (JIS P 0138-61) Standard B-Series
case 'JIS_B0' : {$pf = array( 2919.685, 4127.244); break;}
case 'JIS_B1' : {$pf = array( 2063.622, 2919.685); break;}
case 'JIS_B2' : {$pf = array( 1459.843, 2063.622); break;}
case 'JIS_B3' : {$pf = array( 1031.811, 1459.843); break;}
case 'JIS_B4' : {$pf = array( 728.504, 1031.811); break;}
case 'JIS_B5' : {$pf = array( 515.906, 728.504); break;}
case 'JIS_B6' : {$pf = array( 362.835, 515.906); break;}
case 'JIS_B7' : {$pf = array( 257.953, 362.835); break;}
case 'JIS_B8' : {$pf = array( 181.417, 257.953); break;}
case 'JIS_B9' : {$pf = array( 127.559, 181.417); break;}
case 'JIS_B10': {$pf = array( 90.709, 127.559); break;}
case 'JIS_B11': {$pf = array( 62.362, 90.709); break;}
case 'JIS_B12': {$pf = array( 45.354, 62.362); break;}
// PA Series
case 'PA0' : {$pf = array( 2381.102, 3174.803,); break;}
case 'PA1' : {$pf = array( 1587.402, 2381.102); break;}
case 'PA2' : {$pf = array( 1190.551, 1587.402); break;}
case 'PA3' : {$pf = array( 793.701, 1190.551); break;}
case 'PA4' : {$pf = array( 595.276, 793.701); break;}
case 'PA5' : {$pf = array( 396.850, 595.276); break;}
case 'PA6' : {$pf = array( 297.638, 396.850); break;}
case 'PA7' : {$pf = array( 198.425, 297.638); break;}
case 'PA8' : {$pf = array( 147.402, 198.425); break;}
case 'PA9' : {$pf = array( 99.213, 147.402); break;}
case 'PA10': {$pf = array( 73.701, 99.213); break;}
// Standard Photographic Print Sizes
case 'PASSPORT_PHOTO': {$pf = array( 99.213, 127.559); break;}
case 'E' : {$pf = array( 233.858, 340.157); break;}
case 'L':
case '3R' : {$pf = array( 252.283, 360.000); break;}
case 'KG':
case '4R' : {$pf = array( 289.134, 430.866); break;}
case '4D' : {$pf = array( 340.157, 430.866); break;}
case '2L':
case '5R' : {$pf = array( 360.000, 504.567); break;}
case '8P':
case '6R' : {$pf = array( 430.866, 575.433); break;}
case '6P':
case '8R' : {$pf = array( 575.433, 720.000); break;}
case '6PW':
case 'S8R' : {$pf = array( 575.433, 864.567); break;}
case '4P':
case '10R' : {$pf = array( 720.000, 864.567); break;}
case '4PW':
case 'S10R': {$pf = array( 720.000, 1080.000); break;}
case '11R' : {$pf = array( 790.866, 1009.134); break;}
case 'S11R': {$pf = array( 790.866, 1224.567); break;}
case '12R' : {$pf = array( 864.567, 1080.000); break;}
case 'S12R': {$pf = array( 864.567, 1292.598); break;}
// Common Newspaper Sizes
case 'NEWSPAPER_BROADSHEET': {$pf = array( 2125.984, 1700.787); break;}
case 'NEWSPAPER_BERLINER' : {$pf = array( 1332.283, 892.913); break;}
case 'NEWSPAPER_TABLOID':
case 'NEWSPAPER_COMPACT' : {$pf = array( 1218.898, 793.701); break;}
// Business Cards
case 'CREDIT_CARD':
case 'BUSINESS_CARD':
case 'BUSINESS_CARD_ISO7810': {$pf = array( 153.014, 242.646); break;}
case 'BUSINESS_CARD_ISO216' : {$pf = array( 147.402, 209.764); break;}
case 'BUSINESS_CARD_IT':
case 'BUSINESS_CARD_UK':
case 'BUSINESS_CARD_FR':
case 'BUSINESS_CARD_DE':
case 'BUSINESS_CARD_ES' : {$pf = array( 155.906, 240.945); break;}
case 'BUSINESS_CARD_CA':
case 'BUSINESS_CARD_US' : {$pf = array( 144.567, 252.283); break;}
case 'BUSINESS_CARD_JP' : {$pf = array( 155.906, 257.953); break;}
case 'BUSINESS_CARD_HK' : {$pf = array( 153.071, 255.118); break;}
case 'BUSINESS_CARD_AU':
case 'BUSINESS_CARD_DK':
case 'BUSINESS_CARD_SE' : {$pf = array( 155.906, 255.118); break;}
case 'BUSINESS_CARD_RU':
case 'BUSINESS_CARD_CZ':
case 'BUSINESS_CARD_FI':
case 'BUSINESS_CARD_HU':
case 'BUSINESS_CARD_IL' : {$pf = array( 141.732, 255.118); break;}
// Billboards
case '4SHEET' : {$pf = array( 2880.000, 4320.000); break;}
case '6SHEET' : {$pf = array( 3401.575, 5102.362); break;}
case '12SHEET': {$pf = array( 8640.000, 4320.000); break;}
case '16SHEET': {$pf = array( 5760.000, 8640.000); break;}
case '32SHEET': {$pf = array(11520.000, 8640.000); break;}
case '48SHEET': {$pf = array(17280.000, 8640.000); break;}
case '64SHEET': {$pf = array(23040.000, 8640.000); break;}
case '96SHEET': {$pf = array(34560.000, 8640.000); break;}
// Old European Sizes
// - Old Imperial English Sizes
case 'EN_EMPEROR' : {$pf = array( 3456.000, 5184.000); break;}
case 'EN_ANTIQUARIAN' : {$pf = array( 2232.000, 3816.000); break;}
case 'EN_GRAND_EAGLE' : {$pf = array( 2070.000, 3024.000); break;}
case 'EN_DOUBLE_ELEPHANT' : {$pf = array( 1926.000, 2880.000); break;}
case 'EN_ATLAS' : {$pf = array( 1872.000, 2448.000); break;}
case 'EN_COLOMBIER' : {$pf = array( 1692.000, 2484.000); break;}
case 'EN_ELEPHANT' : {$pf = array( 1656.000, 2016.000); break;}
case 'EN_DOUBLE_DEMY' : {$pf = array( 1620.000, 2556.000); break;}
case 'EN_IMPERIAL' : {$pf = array( 1584.000, 2160.000); break;}
case 'EN_PRINCESS' : {$pf = array( 1548.000, 2016.000); break;}
case 'EN_CARTRIDGE' : {$pf = array( 1512.000, 1872.000); break;}
case 'EN_DOUBLE_LARGE_POST': {$pf = array( 1512.000, 2376.000); break;}
case 'EN_ROYAL' : {$pf = array( 1440.000, 1800.000); break;}
case 'EN_SHEET':
case 'EN_HALF_POST' : {$pf = array( 1404.000, 1692.000); break;}
case 'EN_SUPER_ROYAL' : {$pf = array( 1368.000, 1944.000); break;}
case 'EN_DOUBLE_POST' : {$pf = array( 1368.000, 2196.000); break;}
case 'EN_MEDIUM' : {$pf = array( 1260.000, 1656.000); break;}
case 'EN_DEMY' : {$pf = array( 1260.000, 1620.000); break;}
case 'EN_LARGE_POST' : {$pf = array( 1188.000, 1512.000); break;}
case 'EN_COPY_DRAUGHT' : {$pf = array( 1152.000, 1440.000); break;}
case 'EN_POST' : {$pf = array( 1116.000, 1386.000); break;}
case 'EN_CROWN' : {$pf = array( 1080.000, 1440.000); break;}
case 'EN_PINCHED_POST' : {$pf = array( 1062.000, 1332.000); break;}
case 'EN_BRIEF' : {$pf = array( 972.000, 1152.000); break;}
case 'EN_FOOLSCAP' : {$pf = array( 972.000, 1224.000); break;}
case 'EN_SMALL_FOOLSCAP' : {$pf = array( 954.000, 1188.000); break;}
case 'EN_POTT' : {$pf = array( 900.000, 1080.000); break;}
// - Old Imperial Belgian Sizes
case 'BE_GRAND_AIGLE' : {$pf = array( 1984.252, 2948.031); break;}
case 'BE_COLOMBIER' : {$pf = array( 1757.480, 2409.449); break;}
case 'BE_DOUBLE_CARRE': {$pf = array( 1757.480, 2607.874); break;}
case 'BE_ELEPHANT' : {$pf = array( 1746.142, 2182.677); break;}
case 'BE_PETIT_AIGLE' : {$pf = array( 1700.787, 2381.102); break;}
case 'BE_GRAND_JESUS' : {$pf = array( 1559.055, 2069.291); break;}
case 'BE_JESUS' : {$pf = array( 1530.709, 2069.291); break;}
case 'BE_RAISIN' : {$pf = array( 1417.323, 1842.520); break;}
case 'BE_GRAND_MEDIAN': {$pf = array( 1303.937, 1714.961); break;}
case 'BE_DOUBLE_POSTE': {$pf = array( 1233.071, 1601.575); break;}
case 'BE_COQUILLE' : {$pf = array( 1218.898, 1587.402); break;}
case 'BE_PETIT_MEDIAN': {$pf = array( 1176.378, 1502.362); break;}
case 'BE_RUCHE' : {$pf = array( 1020.472, 1303.937); break;}
case 'BE_PROPATRIA' : {$pf = array( 977.953, 1218.898); break;}
case 'BE_LYS' : {$pf = array( 898.583, 1125.354); break;}
case 'BE_POT' : {$pf = array( 870.236, 1088.504); break;}
case 'BE_ROSETTE' : {$pf = array( 765.354, 983.622); break;}
// - Old Imperial French Sizes
case 'FR_UNIVERS' : {$pf = array( 2834.646, 3685.039); break;}
case 'FR_DOUBLE_COLOMBIER' : {$pf = array( 2551.181, 3571.654); break;}
case 'FR_GRANDE_MONDE' : {$pf = array( 2551.181, 3571.654); break;}
case 'FR_DOUBLE_SOLEIL' : {$pf = array( 2267.717, 3401.575); break;}
case 'FR_DOUBLE_JESUS' : {$pf = array( 2154.331, 3174.803); break;}
case 'FR_GRAND_AIGLE' : {$pf = array( 2125.984, 3004.724); break;}
case 'FR_PETIT_AIGLE' : {$pf = array( 1984.252, 2664.567); break;}
case 'FR_DOUBLE_RAISIN' : {$pf = array( 1842.520, 2834.646); break;}
case 'FR_JOURNAL' : {$pf = array( 1842.520, 2664.567); break;}
case 'FR_COLOMBIER_AFFICHE': {$pf = array( 1785.827, 2551.181); break;}
case 'FR_DOUBLE_CAVALIER' : {$pf = array( 1757.480, 2607.874); break;}
case 'FR_CLOCHE' : {$pf = array( 1700.787, 2267.717); break;}
case 'FR_SOLEIL' : {$pf = array( 1700.787, 2267.717); break;}
case 'FR_DOUBLE_CARRE' : {$pf = array( 1587.402, 2551.181); break;}
case 'FR_DOUBLE_COQUILLE' : {$pf = array( 1587.402, 2494.488); break;}
case 'FR_JESUS' : {$pf = array( 1587.402, 2154.331); break;}
case 'FR_RAISIN' : {$pf = array( 1417.323, 1842.520); break;}
case 'FR_CAVALIER' : {$pf = array( 1303.937, 1757.480); break;}
case 'FR_DOUBLE_COURONNE' : {$pf = array( 1303.937, 2040.945); break;}
case 'FR_CARRE' : {$pf = array( 1275.591, 1587.402); break;}
case 'FR_COQUILLE' : {$pf = array( 1247.244, 1587.402); break;}
case 'FR_DOUBLE_TELLIERE' : {$pf = array( 1247.244, 1927.559); break;}
case 'FR_DOUBLE_CLOCHE' : {$pf = array( 1133.858, 1700.787); break;}
case 'FR_DOUBLE_POT' : {$pf = array( 1133.858, 1757.480); break;}
case 'FR_ECU' : {$pf = array( 1133.858, 1474.016); break;}
case 'FR_COURONNE' : {$pf = array( 1020.472, 1303.937); break;}
case 'FR_TELLIERE' : {$pf = array( 963.780, 1247.244); break;}
case 'FR_POT' : {$pf = array( 878.740, 1133.858); break;}
// DEFAULT ISO A4
default: {$pf = array( 595.276, 841.890); break;}
}
return $pf;
}

+ Here is the caller graph for this function:

TCPDF::getPageWidth (   $pagenum = '')

Returns the page width in units.

Parameters
int$pagenumpage number (empty = current page)
Returns
int page width.
Author
Nicola Asuni public
Since
1.5.2
See Also
getPageDimensions()

Definition at line 3104 of file tcpdf.php.

References $w.

Referenced by Footer().

{
if (empty($pagenum)) {
return $this->w;
}
return $this->pagedim[$pagenum]['w'];
}

+ Here is the caller graph for this function:

TCPDF::getPathPaintOperator (   $style,
  $default = 'S' 
)
protected

Get the Path-Painting Operators.

Parameters
string$styleStyle of rendering. Possible values are:
  • S or D: Stroke the path.
  • s or d: Close and stroke the path.
  • f or F: Fill the path, using the nonzero winding number rule to determine the region to fill.
  • f* or F*: Fill the path, using the even-odd rule to determine the region to fill.
  • B or FD or DF: Fill and then stroke the path, using the nonzero winding number rule to determine the region to fill.
  • B* or F*D or DF*: Fill and then stroke the path, using the even-odd rule to determine the region to fill.
  • b or fd or df: Close, fill, and then stroke the path, using the nonzero winding number rule to determine the region to fill.
  • b or f*d or df*: Close, fill, and then stroke the path, using the even-odd rule to determine the region to fill.
  • CNZ: Clipping mode using the even-odd rule to determine which regions lie inside the clipping path.
  • CEO: Clipping mode using the nonzero winding number rule to determine which regions lie inside the clipping path
  • n: End the path object without filling or stroking it.
string$defaultdefault style
boolean$modeif true enable rasterization, false otherwise.
Author
Nicola Asuni protected
Since
5.0.000 (2010-04-30)

Definition at line 23426 of file tcpdf.php.

{
$op = '';
switch($style) {
case 'S':
case 'D': {
$op = 'S';
break;
}
case 's':
case 'd': {
$op = 's';
break;
}
case 'f':
case 'F': {
$op = 'f';
break;
}
case 'f*':
case 'F*': {
$op = 'f*';
break;
}
case 'B':
case 'FD':
case 'DF': {
$op = 'B';
break;
}
case 'B*':
case 'F*D':
case 'DF*': {
$op = 'B*';
break;
}
case 'b':
case 'fd':
case 'df': {
$op = 'b';
break;
}
case 'b*':
case 'f*d':
case 'df*': {
$op = 'b*';
break;
}
case 'CNZ': {
$op = 'W n';
break;
}
case 'CEO': {
$op = 'W* n';
break;
}
case 'n': {
$op = 'n';
break;
}
default: {
if (!empty($default)) {
$op = $this->getPathPaintOperator($default, '');
} else {
$op = '';
}
}
}
return $op;
}
TCPDF::getPDFData ( )

Returns the PDF data.

public

Definition at line 11269 of file tcpdf.php.

{
if ($this->state < 3) {
$this->Close();
}
return $this->buffer;
}
TCPDF::getRandomSeed (   $seed = '')
protected

Returns a string containing random data to be used as a seed for encryption methods.

Parameters
string$seedstarting seed value
Returns
string containing random data
Author
Nicola Asuni
Since
5.9.006 (2010-10-19) protected

Definition at line 11423 of file tcpdf.php.

Referenced by __construct().

{
$seed .= microtime();
if (function_exists('openssl_random_pseudo_bytes')) {
$seed .= openssl_random_pseudo_bytes(512);
}
$seed .= uniqid('', true);
$seed .= rand();
$seed .= getmypid();
$seed .= __FILE__;
$seed .= $this->bufferlen;
if (isset($_SERVER['REMOTE_ADDR'])) {
$seed .= $_SERVER['REMOTE_ADDR'];
}
if (isset($_SERVER['HTTP_USER_AGENT'])) {
$seed .= $_SERVER['HTTP_USER_AGENT'];
}
if (isset($_SERVER['HTTP_ACCEPT'])) {
$seed .= $_SERVER['HTTP_ACCEPT'];
}
if (isset($_SERVER['HTTP_ACCEPT_ENCODING'])) {
$seed .= $_SERVER['HTTP_ACCEPT_ENCODING'];
}
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$seed .= $_SERVER['HTTP_ACCEPT_LANGUAGE'];
}
if (isset($_SERVER['HTTP_ACCEPT_CHARSET'])) {
$seed .= $_SERVER['HTTP_ACCEPT_CHARSET'];
}
$seed .= rand();
$seed .= uniqid('', true);
$seed .= microtime();
return $seed;
}

+ Here is the caller graph for this function:

TCPDF::getRawCharWidth (   $char)

Returns the length of the char in user unit for the current font.

Parameters
int$charThe char code whose length is to be returned
Returns
float char width
Author
Nicola Asuni public
Since
5.9.000 (2010-09-28)

Definition at line 4560 of file tcpdf.php.

References $cw, and $w.

Referenced by GetCharWidth().

{
if ($char == 173) {
// SHY character will not be printed
return (0);
}
$cw = &$this->CurrentFont['cw'];
if (isset($cw[$char])) {
$w = $cw[$char];
} elseif (isset($this->CurrentFont['dw'])) {
// default width
$w = $this->CurrentFont['dw'];
} elseif (isset($cw[32])) {
// default width
$w = $cw[32];
} else {
$w = 600;
}
return ($w * $this->FontSize / 1000);
}

+ Here is the caller graph for this function:

TCPDF::getRemainingWidth ( )
protected

Returns the remaining width between the current position and margins.

Returns
int Return the remaining width protected

Definition at line 6834 of file tcpdf.php.

References checkPageRegions().

Referenced by Write().

{
$this->checkPageRegions();
if ($this->rtl) {
return ($this->x - $this->lMargin);
} else {
return ($this->w - $this->rMargin - $this->x);
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::getRTL ( )

Return the RTL status.

Returns
boolean public
Since
4.0.012 (2008-07-24)

Definition at line 2981 of file tcpdf.php.

References $rtl.

Referenced by Footer(), and Header().

{
return $this->rtl;
}

+ Here is the caller graph for this function:

TCPDF::getScaleFactor ( )

Returns the scale factor (number of points in user unit).

Returns
int scale factor.
Author
Nicola Asuni public
Since
1.5.2

Definition at line 3150 of file tcpdf.php.

References $k.

Referenced by Footer(), and Header().

{
return $this->k;
}

+ Here is the caller graph for this function:

TCPDF::getSpaceString ( )
protected

Returns the string used to find spaces.

Returns
string protected
Author
Nicola Asuni
Since
4.8.024 (2010-01-15)

Definition at line 18630 of file tcpdf.php.

{
$spacestr = chr(32);
if ($this->isUnicodeFont()) {
$spacestr = chr(0).chr(32);
}
return $spacestr;
}
TCPDF::getStringHeight (   $w,
  $txt,
  $reseth = false,
  $autopadding = true,
  $cellpadding = '',
  $border = 0 
)

This method return the estimated needed height for print a simple text string in Multicell() method.

Generally, if you want to know the exact height for a block of content you can use the following alternative technique:

 // store current object
 $pdf->startTransaction();
 // store starting values
 $start_y = $pdf->GetY();
 $start_page = $pdf->getPage();
 // call your printing functions with your parameters
 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 $pdf->MultiCell($w=0, $h=0, $txt, $border=1, $align='L', $fill=false, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0);
 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 // get the new Y
 $end_y = $pdf->GetY();
 $end_page = $pdf->getPage();
 // calculate height
 $height = 0;
 if ($end_page == $start_page) {
        $height = $end_y - $start_y;
 } else {
        for ($page=$start_page; $page <= $end_page; ++$page) {
                $this->setPage($page);
                if ($page == $start_page) {
                        // first page
                        $height = $this->h - $start_y - $this->bMargin;
                } elseif ($page == $end_page) {
                        // last page
                        $height = $end_y - $this->tMargin;
                } else {
                        $height = $this->h - $this->tMargin - $this->bMargin;
                }
        }
 }
 // restore previous object
 $pdf = $pdf->rollbackTransaction();
Parameters
float$wWidth of cells. If 0, they extend up to the right margin of the page.
string$txtString for calculating his height
boolean$resethif true reset the last cell height (default false).
boolean$autopaddingif true, uses internal padding and automatically adjust it to account for line width (default true).
float$cellpaddingInternal cell padding, if empty uses default cell padding.
mixed$borderIndicates if borders must be drawn around the cell. The value can be a number:
  • 0: no border (default)
  • 1: frame
or a string containing some or all of the following characters (in any order):
  • L: left
  • T: top
  • R: right
  • B: bottom
or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
Returns
float Return the minimal height needed for multicell method for printing the $txt param.
Author
Nicola Asuni, Alexander Escalona Fernández public

Definition at line 6432 of file tcpdf.php.

References $cell_height_ratio, $cell_padding, $lasth, $w, adjustCellPadding(), and getNumLines().

Referenced by MultiCell().

{
// adjust internal padding
$prev_cell_padding = $this->cell_padding;
$prev_lasth = $this->lasth;
if (is_array($cellpadding)) {
$this->cell_padding = $cellpadding;
}
$this->adjustCellPadding($border);
$lines = $this->getNumLines($txt, $w, $reseth, $autopadding, $cellpadding, $border);
$height = $lines * ($this->FontSize * $this->cell_height_ratio);
if ($autopadding) {
// add top and bottom padding
$height += ($this->cell_padding['T'] + $this->cell_padding['B']);
}
$this->cell_padding = $prev_cell_padding;
$this->lasth = $prev_lasth;
return $height;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::GetStringWidth (   $s,
  $fontname = '',
  $fontstyle = '',
  $fontsize = 0,
  $getarray = false 
)

Returns the length of a string in user unit.

A font must be selected.

Parameters
string$sThe string whose length is to be computed
string$fontnameFamily font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained.
string$fontstyleFont style. Possible values are (case insensitive):
  • empty string: regular
  • B: bold
  • I: italic
  • U: underline
  • D: line-trough
  • O: overline
or any combination. The default value is regular.
float$fontsizeFont size in points. The default value is the current size.
boolean$getarrayif true returns an array of characters widths, if false returns the total length.
Returns
mixed int total string length or array of characted widths
Author
Nicola Asuni public
Since
1.2

Definition at line 4485 of file tcpdf.php.

References GetArrStringWidth(), utf8Bidi(), and UTF8StringToArray().

Referenced by getCellCode().

{
return $this->GetArrStringWidth($this->utf8Bidi($this->UTF8StringToArray($s), $s, $this->tmprtl), $fontname, $fontstyle, $fontsize, $getarray);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::getSVGTransformMatrix (   $attribute)
protected

Get the tranformation matrix from SVG transform attribute.

Parameters
stringtransformation
Returns
array of transformations
Author
Nicola Asuni
Since
5.0.000 (2010-05-02) protected

Definition at line 24325 of file tcpdf.php.

References $d, $data, $f, $x, and $y.

{
// identity matrix
$tm = array(1, 0, 0, 1, 0, 0);
$transform = array();
if (preg_match_all('/(matrix|translate|scale|rotate|skewX|skewY)[\s]*\(([^\)]+)\)/si', $attribute, $transform, PREG_SET_ORDER) > 0) {
foreach ($transform as $key => $data) {
if (!empty($data[2])) {
$a = 1;
$b = 0;
$c = 0;
$d = 1;
$e = 0;
$f = 0;
$regs = array();
switch ($data[1]) {
case 'matrix': {
if (preg_match('/([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si', $data[2], $regs)) {
$a = $regs[1];
$b = $regs[2];
$c = $regs[3];
$d = $regs[4];
$e = $regs[5];
$f = $regs[6];
}
break;
}
case 'translate': {
if (preg_match('/([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si', $data[2], $regs)) {
$e = $regs[1];
$f = $regs[2];
} elseif (preg_match('/([a-z0-9\-\.]+)/si', $data[2], $regs)) {
$e = $regs[1];
}
break;
}
case 'scale': {
if (preg_match('/([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si', $data[2], $regs)) {
$a = $regs[1];
$d = $regs[2];
} elseif (preg_match('/([a-z0-9\-\.]+)/si', $data[2], $regs)) {
$a = $regs[1];
$d = $a;
}
break;
}
case 'rotate': {
if (preg_match('/([0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si', $data[2], $regs)) {
$ang = deg2rad($regs[1]);
$x = $regs[2];
$y = $regs[3];
$a = cos($ang);
$b = sin($ang);
$c = -$b;
$d = $a;
$e = ($x * (1 - $a)) - ($y * $c);
$f = ($y * (1 - $d)) - ($x * $b);
} elseif (preg_match('/([0-9\-\.]+)/si', $data[2], $regs)) {
$ang = deg2rad($regs[1]);
$a = cos($ang);
$b = sin($ang);
$c = -$b;
$d = $a;
$e = 0;
$f = 0;
}
break;
}
case 'skewX': {
if (preg_match('/([0-9\-\.]+)/si', $data[2], $regs)) {
$c = tan(deg2rad($regs[1]));
}
break;
}
case 'skewY': {
if (preg_match('/([0-9\-\.]+)/si', $data[2], $regs)) {
$b = tan(deg2rad($regs[1]));
}
break;
}
}
$tm = $this->getTransformationMatrixProduct($tm, array($a, $b, $c, $d, $e, $f));
}
}
}
return $tm;
}
TCPDF::getTagStyleFromCSS (   $dom,
  $key,
  $css 
)
protected

Returns the styles that apply for the selected HTML tag.

Parameters
array$domarray of HTML tags and properties
int$keykey of the current HTML tag
array$cssarray of CSS properties
Returns
string containing CSS properties protected
Since
5.1.000 (2010-05-25)

Definition at line 17521 of file tcpdf.php.

{
$tagstyle = ''; // style to be returned
// get all styles that apply
foreach($css as $selector => $style) {
// remove specificity
$selector = substr($selector, strpos($selector, ' '));
// check if this selector apply to current tag
if ($this->isValidCSSSelectorForTag($dom, $key, $selector)) {
// apply style
$tagstyle .= ';'.$style;
}
}
if (isset($dom[$key]['attribute']['style'])) {
// attach inline style (latest properties have high priority)
$tagstyle .= ';'.$dom[$key]['attribute']['style'];
}
// remove multiple semicolons
$tagstyle = preg_replace('/[;]+/', ';', $tagstyle);
return $tagstyle;
}
TCPDF::getTransformationMatrixProduct (   $ta,
  $tb 
)
protected

Get the product of two SVG tranformation matrices.

Parameters
array$tafirst SVG tranformation matrix
array$tbsecond SVG tranformation matrix
Returns
transformation array
Author
Nicola Asuni
Since
5.0.000 (2010-05-02) protected

Definition at line 24421 of file tcpdf.php.

{
$tm = array();
$tm[0] = ($ta[0] * $tb[0]) + ($ta[2] * $tb[1]);
$tm[1] = ($ta[1] * $tb[0]) + ($ta[3] * $tb[1]);
$tm[2] = ($ta[0] * $tb[2]) + ($ta[2] * $tb[3]);
$tm[3] = ($ta[1] * $tb[2]) + ($ta[3] * $tb[3]);
$tm[4] = ($ta[0] * $tb[4]) + ($ta[2] * $tb[5]) + $ta[4];
$tm[5] = ($ta[1] * $tb[4]) + ($ta[3] * $tb[5]) + $ta[5];
return $tm;
}
TCPDF::getUserPermissionCode (   $permissions,
  $mode = 0 
)
protected

Return the premission code used on encryption (P value).

Parameters
Array$permissionsthe set of permissions (specify the ones you want to block).
int$modeencryption strength: 0 = RC4 40 bit; 1 = RC4 128 bit; 2 = AES 128 bit; 3 = AES 256 bit. protected
Since
5.0.005 (2010-05-12)
Author
Nicola Asuni

Definition at line 11939 of file tcpdf.php.

{
$options = array(
'owner' => 2, // bit 2 -- inverted logic: cleared by default
'print' => 4, // bit 3
'modify' => 8, // bit 4
'copy' => 16, // bit 5
'annot-forms' => 32, // bit 6
'fill-forms' => 256, // bit 9
'extract' => 512, // bit 10
'assemble' => 1024,// bit 11
'print-high' => 2048 // bit 12
);
$protection = 2147422012; // 32 bit: (01111111 11111111 00001111 00111100)
foreach ($permissions as $permission) {
if (!isset($options[$permission])) {
$this->Error('Incorrect permission: '.$permission);
}
if (($mode > 0) OR ($options[$permission] <= 32)) {
// set only valid permissions
if ($options[$permission] == 2) {
// the logic for bit 2 is inverted (cleared by default)
$protection += $options[$permission];
} else {
$protection -= $options[$permission];
}
}
}
return $protection;
}
TCPDF::getVectorsAngle (   $x1,
  $y1,
  $x2,
  $y2 
)
protected

Returns the angle in radiants between two vectors.

Parameters
int$x1X coordiante of first vector point
int$y1Y coordiante of first vector point
int$x2X coordiante of second vector point
int$y2Y coordiante of second vector point
Author
Nicola Asuni
Since
5.0.000 (2010-05-04) protected

Definition at line 25069 of file tcpdf.php.

{
$dprod = ($x1 * $x2) + ($y1 * $y2);
$dist1 = sqrt(($x1 * $x1) + ($y1 * $y1));
$dist2 = sqrt(($x2 * $x2) + ($y2 * $y2));
$angle = acos($dprod / ($dist1 * $dist2));
if (is_nan($angle)) {
$angle = M_PI;
}
if ((($x1 * $y2) - ($x2 * $y1)) < 0) {
$angle *= -1;
}
return $angle;
}
TCPDF::GetX ( )

Returns the relative X value of current position.

The value is relative to the left border for LTR languages and to the right border for RTL languages.

Returns
float public
Since
1.2
See Also
SetX(), GetY(), SetY()

Definition at line 7707 of file tcpdf.php.

References $x.

Referenced by MultiCell().

{
//Get x position
if ($this->rtl) {
return ($this->w - $this->x);
} else {
return $this->x;
}
}

+ Here is the caller graph for this function:

TCPDF::GetY ( )

Returns the ordinate of the current position.

Returns
float public
Since
1.0
See Also
SetY(), GetX(), SetX()

Definition at line 7734 of file tcpdf.php.

References $y.

Referenced by Footer(), Header(), and MultiCell().

{
return $this->y;
}

+ Here is the caller graph for this function:

TCPDF::Gradient (   $type,
  $coords,
  $stops,
  $background = array(),
  $antialias = false 
)

Output gradient.

Parameters
int$typetype of gradient (1 Function-based shading; 2 Axial shading; 3 Radial shading; 4 Free-form Gouraud-shaded triangle mesh; 5 Lattice-form Gouraud-shaded triangle mesh; 6 Coons patch mesh; 7 Tensor-product patch mesh). (Not all types are currently supported)
array$coordsarray of coordinates.
array$stopsarray gradient color components: color = array of GRAY, RGB or CMYK color components; offset = (0 to 1) represents a location along the gradient vector; exponent = exponent of the exponential interpolation function (default = 1).
array$backgroundAn array of colour components appropriate to the colour space, specifying a single background colour value.
boolean$antialiasA flag indicating whether to filter the shading function to prevent aliasing artifacts.
Author
Nicola Asuni
Since
3.1.000 (2008-06-09) public

Definition at line 15941 of file tcpdf.php.

References $type.

{
$n = count($this->gradients) + 1;
$this->gradients[$n] = array();
$this->gradients[$n]['type'] = $type;
$this->gradients[$n]['coords'] = $coords;
$this->gradients[$n]['antialias'] = $antialias;
$this->gradients[$n]['colors'] = array();
$this->gradients[$n]['transparency'] = false;
// color space
$numcolspace = count($stops[0]['color']);
$bcolor = array_values($background);
switch($numcolspace) {
case 4: { // CMYK
$this->gradients[$n]['colspace'] = 'DeviceCMYK';
if (!empty($background)) {
$this->gradients[$n]['background'] = sprintf('%.3F %.3F %.3F %.3F', $bcolor[0]/100, $bcolor[1]/100, $bcolor[2]/100, $bcolor[3]/100);
}
break;
}
case 3: { // RGB
$this->gradients[$n]['colspace'] = 'DeviceRGB';
if (!empty($background)) {
$this->gradients[$n]['background'] = sprintf('%.3F %.3F %.3F', $bcolor[0]/255, $bcolor[1]/255, $bcolor[2]/255);
}
break;
}
case 1: { // Gray scale
$this->gradients[$n]['colspace'] = 'DeviceGray';
if (!empty($background)) {
$this->gradients[$n]['background'] = sprintf('%.3F', $bcolor[0]/255);
}
break;
}
}
$num_stops = count($stops);
$last_stop_id = $num_stops - 1;
foreach ($stops as $key => $stop) {
$this->gradients[$n]['colors'][$key] = array();
// offset represents a location along the gradient vector
if (isset($stop['offset'])) {
$this->gradients[$n]['colors'][$key]['offset'] = $stop['offset'];
} else {
if ($key == 0) {
$this->gradients[$n]['colors'][$key]['offset'] = 0;
} elseif ($key == $last_stop_id) {
$this->gradients[$n]['colors'][$key]['offset'] = 1;
} else {
$offsetstep = (1 - $this->gradients[$n]['colors'][($key - 1)]['offset']) / ($num_stops - $key);
$this->gradients[$n]['colors'][$key]['offset'] = $this->gradients[$n]['colors'][($key - 1)]['offset'] + $offsetstep;
}
}
if (isset($stop['opacity'])) {
$this->gradients[$n]['colors'][$key]['opacity'] = $stop['opacity'];
if ($stop['opacity'] < 1) {
$this->gradients[$n]['transparency'] = true;
}
} else {
$this->gradients[$n]['colors'][$key]['opacity'] = 1;
}
// exponent for the exponential interpolation function
if (isset($stop['exponent'])) {
$this->gradients[$n]['colors'][$key]['exponent'] = $stop['exponent'];
} else {
$this->gradients[$n]['colors'][$key]['exponent'] = 1;
}
// set colors
$color = array_values($stop['color']);
switch($numcolspace) {
case 4: { // CMYK
$this->gradients[$n]['colors'][$key]['color'] = sprintf('%.3F %.3F %.3F %.3F', $color[0]/100, $color[1]/100, $color[2]/100, $color[3]/100);
break;
}
case 3: { // RGB
$this->gradients[$n]['colors'][$key]['color'] = sprintf('%.3F %.3F %.3F', $color[0]/255, $color[1]/255, $color[2]/255);
break;
}
case 1: { // Gray scale
$this->gradients[$n]['colors'][$key]['color'] = sprintf('%.3F', $color[0]/255);
break;
}
}
}
if ($this->gradients[$n]['transparency']) {
// paint luminosity gradient
$this->_out('/TGS'.$n.' gs');
}
//paint the gradient
$this->_out('/Sh'.$n.' sh');
//restore previous Graphic State
$this->_out('Q');
}
TCPDF::Header ( )

This method is used to render the page header.

It is automatically called by AddPage() and could be overwritten in your own inherited class. public

Definition at line 3969 of file tcpdf.php.

References Cell(), getCellHeightRatio(), getHeaderData(), getHeaderFont(), getImageRBY(), getOriginalMargins(), getRTL(), getScaleFactor(), GetY(), Image(), K_BLANK_IMAGE, K_PATH_IMAGES, MultiCell(), SetFont(), SetLineStyle(), SetTextColor(), SetX(), and SetY().

Referenced by setHeader().

{
$ormargins = $this->getOriginalMargins();
$headerfont = $this->getHeaderFont();
$headerdata = $this->getHeaderData();
if (($headerdata['logo']) AND ($headerdata['logo'] != K_BLANK_IMAGE)) {
$this->Image(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']);
$imgy = $this->getImageRBY();
} else {
$imgy = $this->GetY();
}
$cell_height = round(($this->getCellHeightRatio() * $headerfont[2]) / $this->getScaleFactor(), 2);
// set starting margin for text data cell
if ($this->getRTL()) {
$header_x = $ormargins['right'] + ($headerdata['logo_width'] * 1.1);
} else {
$header_x = $ormargins['left'] + ($headerdata['logo_width'] * 1.1);
}
$this->SetTextColor(0, 0, 0);
// header title
$this->SetFont($headerfont[0], 'B', $headerfont[2] + 1);
$this->SetX($header_x);
$this->Cell(0, $cell_height, $headerdata['title'], 0, 1, '', 0, '', 0);
// header string
$this->SetFont($headerfont[0], $headerfont[1], $headerfont[2]);
$this->SetX($header_x);
$this->MultiCell(0, $cell_height, $headerdata['string'], 0, '', 0, 1, '', '', true, 0, false);
// print an ending header line
$this->SetLineStyle(array('width' => 0.85 / $this->getScaleFactor(), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)));
$this->SetY((2.835 / $this->getScaleFactor()) + max($imgy, $this->GetY()));
if ($this->getRTL()) {
$this->SetX($ormargins['right']);
} else {
$this->SetX($ormargins['left']);
}
$this->Cell(0, 0, '', 'T', 0, 'C');
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::hyphenateText (   $text,
  $patterns,
  $dictionary = array(),
  $leftmin = 1,
  $rightmin = 2,
  $charmin = 1,
  $charmax = 8 
)

Returns text with soft hyphens.

Parameters
string$texttext to process
mixed$patternsArray of hypenation patterns or a TEX file containing hypenation patterns. TEX patterns can be downloaded from http://www.ctan.org/tex-archive/language/hyph-utf8/tex/generic/hyph-utf8/patterns/
array$dictionaryArray of words to be returned without applying the hyphenation algoritm.
int$leftminMinimum number of character to leave on the left of the word without applying the hyphens.
int$rightminMinimum number of character to leave on the right of the word without applying the hyphens.
int$charminMinimum word lenght to apply the hyphenation algoritm.
int$charmaxMaximum lenght of broken piece of word.
Returns
array text with soft hyphens
Author
Nicola Asuni
Since
4.9.012 (2010-04-12) public

Definition at line 23354 of file tcpdf.php.

{
$text = $this->unhtmlentities($text);
$word = array(); // last word
$txtarr = array(); // text to be returned
$intag = false; // true if we are inside an HTML tag
if (!is_array($patterns)) {
$patterns = $this->getHyphenPatternsFromTEX($patterns);
}
// get array of characters
$unichars = $this->UTF8StringToArray($text);
// for each char
foreach ($unichars as $char) {
if ((!$intag) AND $this->unicode->uni_type[$char] == 'L') {
// letter character
$word[] = $char;
} else {
// other type of character
if (!$this->empty_string($word)) {
// hypenate the word
$txtarr = array_merge($txtarr, $this->hyphenateWord($word, $patterns, $dictionary, $leftmin, $rightmin, $charmin, $charmax));
$word = array();
}
$txtarr[] = $char;
if (chr($char) == '<') {
// we are inside an HTML tag
$intag = true;
} elseif ($intag AND (chr($char) == '>')) {
// end of HTML tag
$intag = false;
}
}
}
if (!$this->empty_string($word)) {
// hypenate the word
$txtarr = array_merge($txtarr, $this->hyphenateWord($word, $patterns, $dictionary, $leftmin, $rightmin, $charmin, $charmax));
}
// convert char array to string and return
return $this->UTF8ArrSubString($txtarr);
}
TCPDF::hyphenateWord (   $word,
  $patterns,
  $dictionary = array(),
  $leftmin = 1,
  $rightmin = 2,
  $charmin = 1,
  $charmax = 8 
)
protected

Returns an array of chars containing soft hyphens.

Parameters
array$wordarray of chars
array$patternsArray of hypenation patterns.
array$dictionaryArray of words to be returned without applying the hyphenation algoritm.
int$leftminMinimum number of character to leave on the left of the word without applying the hyphens.
int$rightminMinimum number of character to leave on the right of the word without applying the hyphens.
int$charminMinimum word lenght to apply the hyphenation algoritm.
int$charmaxMaximum lenght of broken piece of word.
Returns
array text with soft hyphens
Author
Nicola Asuni
Since
4.9.012 (2010-04-12) protected

Definition at line 23245 of file tcpdf.php.

References $pos.

{
$hyphenword = array(); // hyphens positions
$numchars = count($word);
if ($numchars <= $charmin) {
return $word;
}
$word_string = $this->UTF8ArrSubString($word);
// some words will be returned as-is
$pattern = '/^([a-zA-Z0-9_\.\-]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/';
if (preg_match($pattern, $word_string) > 0) {
// email
return $word;
}
$pattern = '/(([a-zA-Z0-9\-]+\.)?)((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/';
if (preg_match($pattern, $word_string) > 0) {
// URL
return $word;
}
if (isset($dictionary[$word_string])) {
return $this->UTF8StringToArray($dictionary[$word_string]);
}
// suround word with '_' characters
$tmpword = array_merge(array(95), $word, array(95));
$tmpnumchars = $numchars + 2;
$maxpos = $tmpnumchars - $charmin;
for ($pos = 0; $pos < $maxpos; ++$pos) {
$imax = min(($tmpnumchars - $pos), $charmax);
for ($i = $charmin; $i <= $imax; ++$i) {
$subword = strtolower($this->UTF8ArrSubString($tmpword, $pos, $pos + $i));
if (isset($patterns[$subword])) {
$pattern = $this->UTF8StringToArray($patterns[$subword]);
$pattern_length = count($pattern);
$digits = 1;
for ($j = 0; $j < $pattern_length; ++$j) {
// check if $pattern[$j] is a number
if (($pattern[$j] >= 48) AND ($pattern[$j] <= 57)) {
if ($j == 0) {
$zero = $pos - 1;
} else {
$zero = $pos + $j - $digits;
}
if (!isset($hyphenword[$zero]) OR ($hyphenword[$zero] != $pattern[$j])) {
$hyphenword[$zero] = $this->unichr($pattern[$j]);
}
++$digits;
}
}
}
}
}
$inserted = 0;
$maxpos = $numchars - $rightmin;
for($i = $leftmin; $i <= $maxpos; ++$i) {
if(isset($hyphenword[$i]) AND (($hyphenword[$i] % 2) != 0)) {
// 173 = soft hyphen character
array_splice($word, $i + $inserted, 0, 173);
++$inserted;
}
}
return $word;
}
TCPDF::Image (   $file,
  $x = '',
  $y = '',
  $w = 0,
  $h = 0,
  $type = '',
  $link = '',
  $align = '',
  $resize = false,
  $dpi = 300,
  $palign = '',
  $ismask = false,
  $imgmask = false,
  $border = 0,
  $fitbox = false,
  $hidden = false,
  $fitonpage = false 
)

Puts an image in the page.

The upper-left corner must be given. The dimensions can be specified in different ways:

  • explicit width and height (expressed in user unit)
  • one explicit dimension, the other being calculated automatically in order to keep the original proportions
  • no explicit dimension, in which case the image is put at 72 dpi

Supported formats are JPEG and PNG images whitout GD library and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM; The format can be specified explicitly or inferred from the file extension.
It is possible to put a link on the image.
Remark: if an image is used several times, only one copy will be embedded in the file.

Parameters
string$fileName of the file containing the image.
float$xAbscissa of the upper-left corner (LTR) or upper-right corner (RTL).
float$yOrdinate of the upper-left corner (LTR) or upper-right corner (RTL).
float$wWidth of the image in the page. If not specified or equal to zero, it is automatically calculated.
float$hHeight of the image in the page. If not specified or equal to zero, it is automatically calculated.
string$typeImage format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension.
mixed$linkURL or identifier returned by AddLink().
string$alignIndicates the alignment of the pointer next to image insertion relative to image height. The value can be:
  • T: top-right for LTR or top-left for RTL
  • M: middle-right for LTR or middle-left for RTL
  • B: bottom-right for LTR or bottom-left for RTL
  • N: next line
mixed$resizeIf true resize (reduce) the image to fit $w and $h (requires GD or ImageMagick library); if false do not resize; if 2 force resize in all cases (upscaling and downscaling).
int$dpidot-per-inch resolution used on resize
string$palignAllows to center or align the image on the current line. Possible values are:
  • L : left align
  • C : center
  • R : right align
  • '' : empty string : left for LTR or right for RTL
boolean$ismasktrue if this image is a mask, false otherwise
mixed$imgmaskimage object returned by this function or false
mixed$borderIndicates if borders must be drawn around the cell. The value can be a number:
  • 0: no border (default)
  • 1: frame
or a string containing some or all of the following characters (in any order):
  • L: left
  • T: top
  • R: right
  • B: bottom
or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
boolean$fitboxIf true scale image dimensions proportionally to fit within the ($w, $h) box.
boolean$hiddenif true do not display the image.
boolean$fitonpageif true the image is resized to not exceed page dimensions.
Returns
image information public
Since
1.1

Definition at line 7041 of file tcpdf.php.

References $dpi, $file, $h, $img, $img_rb_x, $img_rb_y, $k, $lMargin, $numimages, $type, $w, $x, $xobjid, $y, _out(), _parsejpeg(), _setGDImageTransparency(), _toJPEG(), _toPNG(), Cell(), checkPageRegions(), Error(), fitBlock(), get_mqr(), getHTMLUnitToUnits(), getImageBuffer(), getImageFileType(), ImagePngAlpha(), K_PATH_CACHE, Link(), pixelsToUnits(), set_mqr(), setImageBuffer(), and SetY().

Referenced by Annotation(), and Header().

{
if ($x === '') {
}
if ($y === '') {
}
// check page for no-write regions and adapt page margins if necessary
$this->checkPageRegions($h, $x, $y);
$cached_file = false; // true when the file is cached
// get image dimensions
$imsize = @getimagesize($file);
if ($imsize === FALSE) {
// try to encode spaces on filename
$file = str_replace(' ', '%20', $file);
$imsize = @getimagesize($file);
if ($imsize === FALSE) {
if (function_exists('curl_init')) {
// try to get remote file data using cURL
$cs = curl_init(); // curl session
curl_setopt($cs, CURLOPT_URL, $file);
curl_setopt($cs, CURLOPT_BINARYTRANSFER, true);
curl_setopt($cs, CURLOPT_FAILONERROR, true);
curl_setopt($cs, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cs, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($cs, CURLOPT_TIMEOUT, 30);
$imgdata = curl_exec($cs);
curl_close($cs);
if($imgdata !== FALSE) {
// copy image to cache
$file = tempnam(K_PATH_CACHE, 'img_');
$fp = fopen($file, 'w');
fwrite($fp, $imgdata);
fclose($fp);
unset($imgdata);
$cached_file = true;
$imsize = @getimagesize($file);
if ($imsize === FALSE) {
unlink($file);
$cached_file = false;
}
}
} elseif (($w > 0) AND ($h > 0)) {
// get measures from specified data
$pw = $this->getHTMLUnitToUnits($w, 0, $this->pdfunit, true) * $this->imgscale * $this->k;
$ph = $this->getHTMLUnitToUnits($h, 0, $this->pdfunit, true) * $this->imgscale * $this->k;
$imsize = array($pw, $ph);
}
}
}
if ($imsize === FALSE) {
$this->Error('[Image] Unable to get image: '.$file);
}
// get original image width and height in pixels
list($pixw, $pixh) = $imsize;
// calculate image width and height on document
if (($w <= 0) AND ($h <= 0)) {
// convert image size to document unit
$w = $this->pixelsToUnits($pixw);
$h = $this->pixelsToUnits($pixh);
} elseif ($w <= 0) {
$w = $h * $pixw / $pixh;
} elseif ($h <= 0) {
$h = $w * $pixh / $pixw;
} elseif ($fitbox AND ($w > 0) AND ($h > 0)) {
// scale image dimensions proportionally to fit within the ($w, $h) box
if ((($w * $pixh) / ($h * $pixw)) < 1) {
$h = $w * $pixh / $pixw;
} else {
$w = $h * $pixw / $pixh;
}
}
// fit the image on available space
$this->fitBlock($w, $h, $x, $y, $fitonpage);
// calculate new minimum dimensions in pixels
$neww = round($w * $this->k * $dpi / $this->dpi);
$newh = round($h * $this->k * $dpi / $this->dpi);
// check if resize is necessary (resize is used only to reduce the image)
$newsize = ($neww * $newh);
$pixsize = ($pixw * $pixh);
if (intval($resize) == 2) {
$resize = true;
} elseif ($newsize >= $pixsize) {
$resize = false;
}
// check if image has been already added on document
$newimage = true;
if (in_array($file, $this->imagekeys)) {
$newimage = false;
// get existing image data
$info = $this->getImageBuffer($file);
// check if the newer image is larger
$oldsize = ($info['w'] * $info['h']);
if ((($oldsize < $newsize) AND ($resize)) OR (($oldsize < $pixsize) AND (!$resize))) {
$newimage = true;
}
}
if ($newimage) {
//First use of image, get info
$type = strtolower($type);
if ($type == '') {
$type = $this->getImageFileType($file, $imsize);
} elseif ($type == 'jpg') {
$type = 'jpeg';
}
$mqr = $this->get_mqr();
$this->set_mqr(false);
// Specific image handlers
$mtd = '_parse'.$type;
// GD image handler function
$gdfunction = 'imagecreatefrom'.$type;
$info = false;
if ((method_exists($this, $mtd)) AND (!($resize AND function_exists($gdfunction)))) {
// TCPDF image functions
$info = $this->$mtd($file);
if ($info == 'pngalpha') {
return $this->ImagePngAlpha($file, $x, $y, $pixw, $pixh, $w, $h, 'PNG', $link, $align, $resize, $dpi, $palign);
}
}
if (!$info) {
if (function_exists($gdfunction)) {
// GD library
$img = $gdfunction($file);
if ($resize) {
$imgr = imagecreatetruecolor($neww, $newh);
if (($type == 'gif') OR ($type == 'png')) {
$imgr = $this->_setGDImageTransparency($imgr, $img);
}
imagecopyresampled($imgr, $img, 0, 0, 0, 0, $neww, $newh, $pixw, $pixh);
if (($type == 'gif') OR ($type == 'png')) {
$info = $this->_toPNG($imgr);
} else {
$info = $this->_toJPEG($imgr);
}
} else {
if (($type == 'gif') OR ($type == 'png')) {
$info = $this->_toPNG($img);
} else {
$info = $this->_toJPEG($img);
}
}
} elseif (extension_loaded('imagick')) {
// ImageMagick library
$img = new Imagick();
if ($type == 'SVG') {
// get SVG file content
$svgimg = file_get_contents($file);
// get width and height
$regs = array();
if (preg_match('/<svg([^>]*)>/si', $svgimg, $regs)) {
$svgtag = $regs[1];
$tmp = array();
if (preg_match('/[\s]+width[\s]*=[\s]*"([^"]*)"/si', $svgtag, $tmp)) {
$ow = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false);
$owu = sprintf('%.3F', ($ow * $dpi / 72)).$this->pdfunit;
$svgtag = preg_replace('/[\s]+width[\s]*=[\s]*"[^"]*"/si', ' width="'.$owu.'"', $svgtag, 1);
} else {
$ow = $w;
}
$tmp = array();
if (preg_match('/[\s]+height[\s]*=[\s]*"([^"]*)"/si', $svgtag, $tmp)) {
$oh = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false);
$ohu = sprintf('%.3F', ($oh * $dpi / 72)).$this->pdfunit;
$svgtag = preg_replace('/[\s]+height[\s]*=[\s]*"[^"]*"/si', ' height="'.$ohu.'"', $svgtag, 1);
} else {
$oh = $h;
}
$tmp = array();
if (!preg_match('/[\s]+viewBox[\s]*=[\s]*"[\s]*([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]*"/si', $svgtag, $tmp)) {
$vbw = ($ow * $this->imgscale * $this->k);
$vbh = ($oh * $this->imgscale * $this->k);
$vbox = sprintf(' viewBox="0 0 %.3F %.3F" ', $vbw, $vbh);
$svgtag = $vbox.$svgtag;
}
$svgimg = preg_replace('/<svg([^>]*)>/si', '<svg'.$svgtag.'>', $svgimg, 1);
}
$img->readImageBlob($svgimg);
} else {
$img->readImage($file);
}
if ($resize) {
$img->resizeImage($neww, $newh, 10, 1, false);
}
$img->setCompressionQuality($this->jpeg_quality);
$img->setImageFormat('jpeg');
$tempname = tempnam(K_PATH_CACHE, 'jpg_');
$img->writeImage($tempname);
$info = $this->_parsejpeg($tempname);
unlink($tempname);
$img->destroy();
} else {
return;
}
}
if ($info === false) {
//If false, we cannot process image
return;
}
$this->set_mqr($mqr);
if ($ismask) {
// force grayscale
$info['cs'] = 'DeviceGray';
}
$info['i'] = $this->numimages;
if (!in_array($file, $this->imagekeys)) {
++$info['i'];
}
if ($imgmask !== false) {
$info['masked'] = $imgmask;
}
// add image to document
$this->setImageBuffer($file, $info);
}
if ($cached_file) {
// remove cached file
unlink($file);
}
// set alignment
$this->img_rb_y = $y + $h;
// set alignment
if ($this->rtl) {
if ($palign == 'L') {
$ximg = $this->lMargin;
} elseif ($palign == 'C') {
$ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
} elseif ($palign == 'R') {
$ximg = $this->w - $this->rMargin - $w;
} else {
$ximg = $x - $w;
}
$this->img_rb_x = $ximg;
} else {
if ($palign == 'L') {
$ximg = $this->lMargin;
} elseif ($palign == 'C') {
$ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
} elseif ($palign == 'R') {
$ximg = $this->w - $this->rMargin - $w;
} else {
$ximg = $x;
}
$this->img_rb_x = $ximg + $w;
}
if ($ismask OR $hidden) {
// image is not displayed
return $info['i'];
}
$xkimg = $ximg * $this->k;
$this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%u Do Q', ($w * $this->k), ($h * $this->k), $xkimg, (($this->h - ($y + $h)) * $this->k), $info['i']));
if (!empty($border)) {
$bx = $this->x;
$by = $this->y;
$this->x = $ximg;
if ($this->rtl) {
$this->x += $w;
}
$this->y = $y;
$this->Cell($w, $h, '', $border, 0, '', 0, '', 0, true);
$this->x = $bx;
$this->y = $by;
}
if ($link) {
$this->Link($ximg, $y, $w, $h, $link, 0);
}
// set pointer to align the next text/objects
switch($align) {
case 'T': {
$this->y = $y;
$this->x = $this->img_rb_x;
break;
}
case 'M': {
$this->y = $y + round($h/2);
$this->x = $this->img_rb_x;
break;
}
case 'B': {
$this->y = $this->img_rb_y;
$this->x = $this->img_rb_x;
break;
}
case 'N': {
$this->SetY($this->img_rb_y);
break;
}
default:{
break;
}
}
$this->endlinex = $this->img_rb_x;
if ($this->inxobj) {
// we are inside an XObject template
$this->xobjects[$this->xobjid]['images'][] = $info['i'];
}
return $info['i'];
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::ImageEps (   $file,
  $x = '',
  $y = '',
  $w = 0,
  $h = 0,
  $link = '',
  $useBoundingBox = true,
  $align = '',
  $palign = '',
  $border = 0,
  $fitonpage = false 
)

Embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files.

NOTE: EPS is not yet fully implemented, use the setRasterizeVectorImages() method to enable/disable rasterization of vector images using ImageMagick library. Only vector drawing is supported, not text or bitmap. Although the script was successfully tested with various AI format versions, best results are probably achieved with files that were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2).

Parameters
string$fileName of the file containing the image.
float$xAbscissa of the upper-left corner.
float$yOrdinate of the upper-left corner.
float$wWidth of the image in the page. If not specified or equal to zero, it is automatically calculated.
float$hHeight of the image in the page. If not specified or equal to zero, it is automatically calculated.
mixed$linkURL or identifier returned by AddLink().
booleanuseBoundingBox specifies whether to position the bounding box (true) or the complete canvas (false) at location (x,y). Default value is true.
string$alignIndicates the alignment of the pointer next to image insertion relative to image height. The value can be:
  • T: top-right for LTR or top-left for RTL
  • M: middle-right for LTR or middle-left for RTL
  • B: bottom-right for LTR or bottom-left for RTL
  • N: next line
string$palignAllows to center or align the image on the current line. Possible values are:
  • L : left align
  • C : center
  • R : right align
  • '' : empty string : left for LTR or right for RTL
mixed$borderIndicates if borders must be drawn around the cell. The value can be a number:
  • 0: no border (default)
  • 1: frame
or a string containing some or all of the following characters (in any order):
  • L: left
  • T: top
  • R: right
  • B: bottom
or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
boolean$fitonpageif true the image is resized to not exceed page dimensions.
Author
Valentin Schmidt, Nicola Asuni
Since
3.1.000 (2008-06-09) public

Definition at line 16289 of file tcpdf.php.

References $cmd, $data, $file, $x, and $y.

{
if ($this->rasterize_vector_images AND ($w > 0) AND ($h > 0)) {
// convert EPS to raster image using GD or ImageMagick libraries
return $this->Image($file, $x, $y, $w, $h, 'EPS', $link, $align, true, 300, $palign, false, false, $border, false, false, $fitonpage);
}
if ($x === '') {
}
if ($y === '') {
}
// check page for no-write regions and adapt page margins if necessary
$this->checkPageRegions($h, $x, $y);
$data = file_get_contents($file);
if ($data === false) {
$this->Error('EPS file not found: '.$file);
}
$regs = array();
// EPS/AI compatibility check (only checks files created by Adobe Illustrator!)
preg_match("/%%Creator:([^\r\n]+)/", $data, $regs); # find Creator
if (count($regs) > 1) {
$version_str = trim($regs[1]); # e.g. "Adobe Illustrator(R) 8.0"
if (strpos($version_str, 'Adobe Illustrator') !== false) {
$versexp = explode(' ', $version_str);
$version = (float)array_pop($versexp);
if ($version >= 9) {
$this->Error('This version of Adobe Illustrator file is not supported: '.$file);
}
}
}
// strip binary bytes in front of PS-header
$start = strpos($data, '%!PS-Adobe');
if ($start > 0) {
$data = substr($data, $start);
}
// find BoundingBox params
preg_match("/%%BoundingBox:([^\r\n]+)/", $data, $regs);
if (count($regs) > 1) {
list($x1, $y1, $x2, $y2) = explode(' ', trim($regs[1]));
} else {
$this->Error('No BoundingBox found in EPS file: '.$file);
}
$start = strpos($data, '%%EndSetup');
if ($start === false) {
$start = strpos($data, '%%EndProlog');
}
if ($start === false) {
$start = strpos($data, '%%BoundingBox');
}
$data = substr($data, $start);
$end = strpos($data, '%%PageTrailer');
if ($end===false) {
$end = strpos($data, 'showpage');
}
if ($end) {
$data = substr($data, 0, $end);
}
// calculate image width and height on document
if (($w <= 0) AND ($h <= 0)) {
$w = ($x2 - $x1) / $k;
$h = ($y2 - $y1) / $k;
} elseif ($w <= 0) {
$w = ($x2-$x1) / $k * ($h / (($y2 - $y1) / $k));
} elseif ($h <= 0) {
$h = ($y2 - $y1) / $k * ($w / (($x2 - $x1) / $k));
}
// fit the image on available space
$this->fitBlock($w, $h, $x, $y, $fitonpage);
if ($this->rasterize_vector_images) {
// convert EPS to raster image using GD or ImageMagick libraries
return $this->Image($file, $x, $y, $w, $h, 'EPS', $link, $align, true, 300, $palign, false, false, $border, false, false, $fitonpage);
}
// set scaling factors
$scale_x = $w / (($x2 - $x1) / $k);
$scale_y = $h / (($y2 - $y1) / $k);
// set alignment
$this->img_rb_y = $y + $h;
// set alignment
if ($this->rtl) {
if ($palign == 'L') {
$ximg = $this->lMargin;
} elseif ($palign == 'C') {
$ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
} elseif ($palign == 'R') {
$ximg = $this->w - $this->rMargin - $w;
} else {
$ximg = $x - $w;
}
$this->img_rb_x = $ximg;
} else {
if ($palign == 'L') {
$ximg = $this->lMargin;
} elseif ($palign == 'C') {
$ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
} elseif ($palign == 'R') {
$ximg = $this->w - $this->rMargin - $w;
} else {
$ximg = $x;
}
$this->img_rb_x = $ximg + $w;
}
if ($useBoundingBox) {
$dx = $ximg * $k - $x1;
$dy = $y * $k - $y1;
} else {
$dx = $ximg * $k;
$dy = $y * $k;
}
// save the current graphic state
$this->_out('q'.$this->epsmarker);
// translate
$this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', 1, 0, 0, 1, $dx, $dy + ($this->hPt - (2 * $y * $k) - ($y2 - $y1))));
// scale
if (isset($scale_x)) {
$this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $scale_x, 0, 0, $scale_y, $x1 * (1 - $scale_x), $y2 * (1 - $scale_y)));
}
// handle pc/unix/mac line endings
preg_match('/[\r\n]+/s', $data, $regs);
$lines = explode($regs[0], $data);
$u=0;
$cnt = count($lines);
for ($i=0; $i < $cnt; ++$i) {
$line = $lines[$i];
if (($line == '') OR ($line{0} == '%')) {
continue;
}
$len = strlen($line);
$chunks = explode(' ', $line);
$cmd = array_pop($chunks);
// RGB
if (($cmd == 'Xa') OR ($cmd == 'XA')) {
$b = array_pop($chunks);
$g = array_pop($chunks);
$r = array_pop($chunks);
$this->_out(''.$r.' '.$g.' '.$b.' '.($cmd=='Xa'?'rg':'RG')); //substr($line, 0, -2).'rg' -> in EPS (AI8): c m y k r g b rg!
continue;
}
switch ($cmd) {
case 'm':
case 'l':
case 'v':
case 'y':
case 'c':
case 'k':
case 'K':
case 'g':
case 'G':
case 's':
case 'S':
case 'J':
case 'j':
case 'w':
case 'M':
case 'd':
case 'n': {
$this->_out($line);
break;
}
case 'x': {// custom fill color
list($c,$m,$y,$k) = $chunks;
$this->_out(''.$c.' '.$m.' '.$y.' '.$k.' k');
break;
}
case 'X': { // custom stroke color
list($c,$m,$y,$k) = $chunks;
$this->_out(''.$c.' '.$m.' '.$y.' '.$k.' K');
break;
}
case 'Y':
case 'N':
case 'V':
case 'L':
case 'C': {
$line{$len-1} = strtolower($cmd);
$this->_out($line);
break;
}
case 'b':
case 'B': {
$this->_out($cmd . '*');
break;
}
case 'f':
case 'F': {
if ($u > 0) {
$isU = false;
$max = min($i+5, $cnt);
for ($j=$i+1; $j < $max; ++$j) {
$isU = ($isU OR (($lines[$j] == 'U') OR ($lines[$j] == '*U')));
}
if ($isU) {
$this->_out('f*');
}
} else {
$this->_out('f*');
}
break;
}
case '*u': {
++$u;
break;
}
case '*U': {
--$u;
break;
}
}
}
// restore previous graphic state
$this->_out($this->epsmarker.'Q');
if (!empty($border)) {
$bx = $this->x;
$by = $this->y;
$this->x = $ximg;
if ($this->rtl) {
$this->x += $w;
}
$this->y = $y;
$this->Cell($w, $h, '', $border, 0, '', 0, '', 0, true);
$this->x = $bx;
$this->y = $by;
}
if ($link) {
$this->Link($ximg, $y, $w, $h, $link, 0);
}
// set pointer to align the next text/objects
switch($align) {
case 'T':{
$this->y = $y;
$this->x = $this->img_rb_x;
break;
}
case 'M':{
$this->y = $y + round($h/2);
$this->x = $this->img_rb_x;
break;
}
case 'B':{
$this->y = $this->img_rb_y;
$this->x = $this->img_rb_x;
break;
}
case 'N':{
$this->SetY($this->img_rb_y);
break;
}
default:{
break;
}
}
$this->endlinex = $this->img_rb_x;
}
TCPDF::ImagePngAlpha (   $file,
  $x,
  $y,
  $wpx,
  $hpx,
  $w,
  $h,
  $type,
  $link,
  $align,
  $resize,
  $dpi,
  $palign 
)
protected

Extract info from a PNG image with alpha channel using the GD library.

Parameters
string$fileName of the file containing the image.
float$xAbscissa of the upper-left corner.
float$yOrdinate of the upper-left corner.
float$wpxOriginal width of the image in pixels.
float$hpxoriginal height of the image in pixels.
float$wWidth of the image in the page. If not specified or equal to zero, it is automatically calculated.
float$hHeight of the image in the page. If not specified or equal to zero, it is automatically calculated.
string$typeImage format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension.
mixed$linkURL or identifier returned by AddLink().
string$alignIndicates the alignment of the pointer next to image insertion relative to image height. The value can be:
  • T: top-right for LTR or top-left for RTL
  • M: middle-right for LTR or middle-left for RTL
  • B: bottom-right for LTR or bottom-left for RTL
  • N: next line
boolean$resizeIf true resize (reduce) the image to fit $w and $h (requires GD library).
int$dpidot-per-inch resolution used on resize
string$palignAllows to center or align the image on the current line. Possible values are:
  • L : left align
  • C : center
  • R : right align
  • '' : empty string : left for LTR or right for RTL
Author
Nicola Asuni protected
Since
4.3.007 (2008-12-04)
See Also
Image()

Definition at line 7598 of file tcpdf.php.

References $file, $img, $type, $x, $y, and K_PATH_CACHE.

Referenced by Image().

{
// create temp image file (without alpha channel)
$tempfile_plain = tempnam(K_PATH_CACHE, 'mskp_');
// create temp alpha file
$tempfile_alpha = tempnam(K_PATH_CACHE, 'mska_');
if (extension_loaded('imagick')) { // ImageMagick
// ImageMagick library
$img = new Imagick();
$img->readImage($file);
// clone image object
$imga = $img->clone();
// extract alpha channel
$img->separateImageChannel(imagick::CHANNEL_ALPHA | imagick::CHANNEL_OPACITY | imagick::CHANNEL_MATTE);
$img->negateImage(true);
$img->setImageFormat('png');
$img->writeImage($tempfile_alpha);
// remove alpha channel
$imga->separateImageChannel(imagick::CHANNEL_ALL & ~(imagick::CHANNEL_ALPHA | imagick::CHANNEL_OPACITY | imagick::CHANNEL_MATTE));
$imga->setImageFormat('png');
$imga->writeImage($tempfile_plain);
} else { // GD library
// generate images
$img = imagecreatefrompng($file);
$imgalpha = imagecreate($wpx, $hpx);
// generate gray scale palette (0 -> 255)
for ($c = 0; $c < 256; ++$c) {
ImageColorAllocate($imgalpha, $c, $c, $c);
}
// extract alpha channel
for ($xpx = 0; $xpx < $wpx; ++$xpx) {
for ($ypx = 0; $ypx < $hpx; ++$ypx) {
$color = imagecolorat($img, $xpx, $ypx);
$alpha = ($color >> 24); // shifts off the first 24 bits (where 8x3 are used for each color), and returns the remaining 7 allocated bits (commonly used for alpha)
$alpha = (((127 - $alpha) / 127) * 255); // GD alpha is only 7 bit (0 -> 127)
$alpha = $this->getGDgamma($alpha); // correct gamma
imagesetpixel($imgalpha, $xpx, $ypx, $alpha);
}
}
imagepng($imgalpha, $tempfile_alpha);
imagedestroy($imgalpha);
// extract image without alpha channel
$imgplain = imagecreatetruecolor($wpx, $hpx);
imagecopy($imgplain, $img, 0, 0, 0, 0, $wpx, $hpx);
imagepng($imgplain, $tempfile_plain);
imagedestroy($imgplain);
}
// embed mask image
$imgmask = $this->Image($tempfile_alpha, $x, $y, $w, $h, 'PNG', '', '', $resize, $dpi, '', true, false);
// embed image, masked with previously embedded mask
$this->Image($tempfile_plain, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, false, $imgmask);
// remove temp files
unlink($tempfile_alpha);
unlink($tempfile_plain);
}

+ Here is the caller graph for this function:

TCPDF::ImageSVG (   $file,
  $x = '',
  $y = '',
  $w = 0,
  $h = 0,
  $link = '',
  $align = '',
  $palign = '',
  $border = 0,
  $fitonpage = false 
)

Embedd a Scalable Vector Graphics (SVG) image.

NOTE: SVG standard is not yet fully implemented, use the setRasterizeVectorImages() method to enable/disable rasterization of vector images using ImageMagick library.

Parameters
string$fileName of the SVG file.
float$xAbscissa of the upper-left corner.
float$yOrdinate of the upper-left corner.
float$wWidth of the image in the page. If not specified or equal to zero, it is automatically calculated.
float$hHeight of the image in the page. If not specified or equal to zero, it is automatically calculated.
mixed$linkURL or identifier returned by AddLink().
string$alignIndicates the alignment of the pointer next to image insertion relative to image height. The value can be:
  • T: top-right for LTR or top-left for RTL
  • M: middle-right for LTR or middle-left for RTL
  • B: bottom-right for LTR or bottom-left for RTL
  • N: next line
If the alignment is an empty string, then the pointer will be restored on the starting SVG position.
string$palignAllows to center or align the image on the current line. Possible values are:
  • L : left align
  • C : center
  • R : right align
  • '' : empty string : left for LTR or right for RTL
mixed$borderIndicates if borders must be drawn around the cell. The value can be a number:
  • 0: no border (default)
  • 1: frame
or a string containing some or all of the following characters (in any order):
  • L: left
  • T: top
  • R: right
  • B: bottom
or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
boolean$fitonpageif true the image is resized to not exceed page dimensions.
Author
Nicola Asuni
Since
5.0.000 (2010-05-02) public

Definition at line 24035 of file tcpdf.php.

References $f, $file, $x, and $y.

{
if ($this->rasterize_vector_images AND ($w > 0) AND ($h > 0)) {
// convert SVG to raster image using GD or ImageMagick libraries
return $this->Image($file, $x, $y, $w, $h, 'SVG', $link, $align, true, 300, $palign, false, false, $border, false, false, false);
}
$this->svgdir = dirname($file);
$svgdata = file_get_contents($file);
if ($svgdata === false) {
$this->Error('SVG file not found: '.$file);
}
if ($x === '') {
}
if ($y === '') {
}
// check page for no-write regions and adapt page margins if necessary
$ox = 0;
$oy = 0;
$ow = $w;
$oh = $h;
$aspect_ratio_align = 'xMidYMid';
$aspect_ratio_ms = 'meet';
$regs = array();
// get original image width and height
preg_match('/<svg([^>]*)>/si', $svgdata, $regs);
if (isset($regs[1]) AND !empty($regs[1])) {
$tmp = array();
if (preg_match('/[\s]+x[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) {
$ox = $this->getHTMLUnitToUnits($tmp[1], 0, $this->svgunit, false);
}
$tmp = array();
if (preg_match('/[\s]+y[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) {
$oy = $this->getHTMLUnitToUnits($tmp[1], 0, $this->svgunit, false);
}
$tmp = array();
if (preg_match('/[\s]+width[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) {
$ow = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false);
}
$tmp = array();
if (preg_match('/[\s]+height[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) {
$oh = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false);
}
$tmp = array();
$view_box = array();
if (preg_match('/[\s]+viewBox[\s]*=[\s]*"[\s]*([0-9\.\-]+)[\s]+([0-9\.\-]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]*"/si', $regs[1], $tmp)) {
if (count($tmp) == 5) {
array_shift($tmp);
foreach ($tmp as $key => $val) {
$view_box[$key] = $this->getHTMLUnitToUnits($val, 0, $this->svgunit, false);
}
$ox = $view_box[0];
$oy = $view_box[1];
}
// get aspect ratio
$tmp = array();
if (preg_match('/[\s]+preserveAspectRatio[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) {
$aspect_ratio = preg_split('/[\s]+/si', $tmp[1]);
switch (count($aspect_ratio)) {
case 3: {
$aspect_ratio_align = $aspect_ratio[1];
$aspect_ratio_ms = $aspect_ratio[2];
break;
}
case 2: {
$aspect_ratio_align = $aspect_ratio[0];
$aspect_ratio_ms = $aspect_ratio[1];
break;
}
case 1: {
$aspect_ratio_align = $aspect_ratio[0];
$aspect_ratio_ms = 'meet';
break;
}
}
}
}
}
// calculate image width and height on document
if (($w <= 0) AND ($h <= 0)) {
// convert image size to document unit
$w = $ow;
$h = $oh;
} elseif ($w <= 0) {
$w = $h * $ow / $oh;
} elseif ($h <= 0) {
$h = $w * $oh / $ow;
}
// fit the image on available space
$this->fitBlock($w, $h, $x, $y, $fitonpage);
if ($this->rasterize_vector_images) {
// convert SVG to raster image using GD or ImageMagick libraries
return $this->Image($file, $x, $y, $w, $h, 'SVG', $link, $align, true, 300, $palign, false, false, $border, false, false, false);
}
// set alignment
$this->img_rb_y = $y + $h;
// set alignment
if ($this->rtl) {
if ($palign == 'L') {
$ximg = $this->lMargin;
} elseif ($palign == 'C') {
$ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
} elseif ($palign == 'R') {
$ximg = $this->w - $this->rMargin - $w;
} else {
$ximg = $x - $w;
}
$this->img_rb_x = $ximg;
} else {
if ($palign == 'L') {
$ximg = $this->lMargin;
} elseif ($palign == 'C') {
$ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
} elseif ($palign == 'R') {
$ximg = $this->w - $this->rMargin - $w;
} else {
$ximg = $x;
}
$this->img_rb_x = $ximg + $w;
}
// store current graphic vars
$gvars = $this->getGraphicVars();
// store SVG position and scale factors
$svgoffset_x = ($ximg - $ox) * $this->k;
$svgoffset_y = -($y - $oy) * $this->k;
if (isset($view_box[2]) AND ($view_box[2] > 0) AND ($view_box[3] > 0)) {
$ow = $view_box[2];
$oh = $view_box[3];
}
$svgscale_x = $w / $ow;
$svgscale_y = $h / $oh;
// scaling and alignment
if ($aspect_ratio_align != 'none') {
// store current scaling values
$svgscale_old_x = $svgscale_x;
$svgscale_old_y = $svgscale_y;
// force uniform scaling
if ($aspect_ratio_ms == 'slice') {
// the entire viewport is covered by the viewBox
if ($svgscale_x > $svgscale_y) {
$svgscale_y = $svgscale_x;
} elseif ($svgscale_x < $svgscale_y) {
$svgscale_x = $svgscale_y;
}
} else { // meet
// the entire viewBox is visible within the viewport
if ($svgscale_x < $svgscale_y) {
$svgscale_y = $svgscale_x;
} elseif ($svgscale_x > $svgscale_y) {
$svgscale_x = $svgscale_y;
}
}
// correct X alignment
switch (substr($aspect_ratio_align, 1, 3)) {
case 'Min': {
// do nothing
break;
}
case 'Max': {
$svgoffset_x += (($w * $this->k) - ($ow * $this->k * $svgscale_x));
break;
}
default:
case 'Mid': {
$svgoffset_x += ((($w * $this->k) - ($ow * $this->k * $svgscale_x)) / 2);
break;
}
}
// correct Y alignment
switch (substr($aspect_ratio_align, 5)) {
case 'Min': {
// do nothing
break;
}
case 'Max': {
$svgoffset_y -= (($h * $this->k) - ($oh * $this->k * $svgscale_y));
break;
}
default:
case 'Mid': {
$svgoffset_y -= ((($h * $this->k) - ($oh * $this->k * $svgscale_y)) / 2);
break;
}
}
}
// store current page break mode
$page_break_mode = $this->AutoPageBreak;
$page_break_margin = $this->getBreakMargin();
$this->SetCellPadding(0);
$this->SetAutoPageBreak(false);
// save the current graphic state
$this->_out('q'.$this->epsmarker);
// set initial clipping mask
$this->Rect($x, $y, $w, $h, 'CNZ', array(), array());
// scale and translate
$e = $ox * $this->k * (1 - $svgscale_x);
$f = ($this->h - $oy) * $this->k * (1 - $svgscale_y);
$this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $svgscale_x, 0, 0, $svgscale_y, $e + $svgoffset_x, $f + $svgoffset_y));
// creates a new XML parser to be used by the other XML functions
$this->parser = xml_parser_create('UTF-8');
// the following function allows to use parser inside object
xml_set_object($this->parser, $this);
// disable case-folding for this XML parser
xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
// sets the element handler functions for the XML parser
xml_set_element_handler($this->parser, 'startSVGElementHandler', 'endSVGElementHandler');
// sets the character data handler function for the XML parser
xml_set_character_data_handler($this->parser, 'segSVGContentHandler');
// start parsing an XML document
if(!xml_parse($this->parser, $svgdata)) {
$error_message = sprintf("SVG Error: %s at line %d", xml_error_string(xml_get_error_code($this->parser)), xml_get_current_line_number($this->parser));
$this->Error($error_message);
}
// free this XML parser
xml_parser_free($this->parser);
// restore previous graphic state
$this->_out($this->epsmarker.'Q');
// restore graphic vars
$this->setGraphicVars($gvars);
$this->lasth = $gvars['lasth'];
if (!empty($border)) {
$bx = $this->x;
$by = $this->y;
$this->x = $ximg;
if ($this->rtl) {
$this->x += $w;
}
$this->y = $y;
$this->Cell($w, $h, '', $border, 0, '', 0, '', 0, true);
$this->x = $bx;
$this->y = $by;
}
if ($link) {
$this->Link($ximg, $y, $w, $h, $link, 0);
}
// set pointer to align the next text/objects
switch($align) {
case 'T':{
$this->y = $y;
$this->x = $this->img_rb_x;
break;
}
case 'M':{
$this->y = $y + round($h/2);
$this->x = $this->img_rb_x;
break;
}
case 'B':{
$this->y = $this->img_rb_y;
$this->x = $this->img_rb_x;
break;
}
case 'N':{
$this->SetY($this->img_rb_y);
break;
}
default:{
// restore pointer to starting position
$this->x = $gvars['x'];
$this->y = $gvars['y'];
$this->page = $gvars['page'];
$this->current_column = $gvars['current_column'];
$this->tMargin = $gvars['tMargin'];
$this->bMargin = $gvars['bMargin'];
$this->w = $gvars['w'];
$this->h = $gvars['h'];
$this->wPt = $gvars['wPt'];
$this->hPt = $gvars['hPt'];
$this->fwPt = $gvars['fwPt'];
$this->fhPt = $gvars['fhPt'];
break;
}
}
$this->endlinex = $this->img_rb_x;
// restore page break
$this->SetAutoPageBreak($page_break_mode, $page_break_margin);
$this->cell_padding = $cell_padding;
}
TCPDF::IncludeJS (   $script)

Adds a javascript.

Parameters
string$scriptJavascript code public
Author
Johannes Güntert, Nicola Asuni
Since
2.1.002 (2008-02-12)

Definition at line 14027 of file tcpdf.php.

{
$this->javascript .= $script;
}
TCPDF::intToRoman (   $number)

Returns the Roman representation of an integer number.

Parameters
intnumber to convert
Returns
string roman representation of the specified number public
Since
4.4.004 (2008-12-10)

Definition at line 21692 of file tcpdf.php.

{
$roman = '';
while ($number >= 1000) {
$roman .= 'M';
$number -= 1000;
}
while ($number >= 900) {
$roman .= 'CM';
$number -= 900;
}
while ($number >= 500) {
$roman .= 'D';
$number -= 500;
}
while ($number >= 400) {
$roman .= 'CD';
$number -= 400;
}
while ($number >= 100) {
$roman .= 'C';
$number -= 100;
}
while ($number >= 90) {
$roman .= 'XC';
$number -= 90;
}
while ($number >= 50) {
$roman .= 'L';
$number -= 50;
}
while ($number >= 40) {
$roman .= 'XL';
$number -= 40;
}
while ($number >= 10) {
$roman .= 'X';
$number -= 10;
}
while ($number >= 9) {
$roman .= 'IX';
$number -= 9;
}
while ($number >= 5) {
$roman .= 'V';
$number -= 5;
}
while ($number >= 4) {
$roman .= 'IV';
$number -= 4;
}
while ($number >= 1) {
$roman .= 'I';
--$number;
}
return $roman;
}
TCPDF::isRTLTextDir ( )

Return the current temporary RTL status.

Returns
boolean public
Since
4.8.014 (2009-11-04)

Definition at line 3023 of file tcpdf.php.

Referenced by Write().

{
return ($this->rtl OR ($this->tmprtl == 'R'));
}

+ Here is the caller graph for this function:

TCPDF::isUnicodeFont ( )

Return true if the current font is unicode type.

Returns
true for unicode font, false otherwise.
Author
Nicola Asuni public
Since
5.8.002 (2010-08-14)

Definition at line 23566 of file tcpdf.php.

Referenced by getCellCode(), GetNumChars(), and Write().

{
return (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0'));
}

+ Here is the caller graph for this function:

TCPDF::isValidCSSSelectorForTag (   $dom,
  $key,
  $selector 
)
protected

Returns true if the CSS selector is valid for the selected HTML tag.

Parameters
array$domarray of HTML tags and properties
int$keykey of the current HTML tag
string$selectorCSS selector string
Returns
true if the selector is valid, false otherwise protected
Since
5.1.000 (2010-05-25)

Definition at line 17361 of file tcpdf.php.

References $attrib, and $valid.

{
$valid = false; // value to be returned
$tag = $dom[$key]['value'];
$class = array();
if (isset($dom[$key]['attribute']['class']) AND !empty($dom[$key]['attribute']['class'])) {
$class = explode(' ', strtolower($dom[$key]['attribute']['class']));
}
$id = '';
if (isset($dom[$key]['attribute']['id']) AND !empty($dom[$key]['attribute']['id'])) {
$id = strtolower($dom[$key]['attribute']['id']);
}
$selector = preg_replace('/([>\+\~\s]{1})([\.]{1})([^>\+\~\s]*)/si', '\\1*.\\3', $selector);
$matches = array();
if (preg_match_all('/([>\+\~\s]{1})([a-zA-Z0-9\*]+)([^>\+\~\s]*)/si', $selector, $matches, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE) > 0) {
$parentop = array_pop($matches[1]);
$operator = $parentop[0];
$offset = $parentop[1];
$lasttag = array_pop($matches[2]);
$lasttag = strtolower(trim($lasttag[0]));
if (($lasttag == '*') OR ($lasttag == $tag)) {
// the last element on selector is our tag or 'any tag'
$attrib = array_pop($matches[3]);
$attrib = strtolower(trim($attrib[0]));
if (!empty($attrib)) {
// check if matches class, id, attribute, pseudo-class or pseudo-element
switch ($attrib{0}) {
case '.': { // class
if (in_array(substr($attrib, 1), $class)) {
$valid = true;
}
break;
}
case '#': { // ID
if (substr($attrib, 1) == $id) {
$valid = true;
}
break;
}
case '[': { // attribute
$attrmatch = array();
if (preg_match('/\[([a-zA-Z0-9]*)[\s]*([\~\^\$\*\|\=]*)[\s]*["]?([^"\]]*)["]?\]/i', $attrib, $attrmatch) > 0) {
$att = strtolower($attrmatch[1]);
$val = $attrmatch[3];
if (isset($dom[$key]['attribute'][$att])) {
switch ($attrmatch[2]) {
case '=': {
if ($dom[$key]['attribute'][$att] == $val) {
$valid = true;
}
break;
}
case '~=': {
if (in_array($val, explode(' ', $dom[$key]['attribute'][$att]))) {
$valid = true;
}
break;
}
case '^=': {
if ($val == substr($dom[$key]['attribute'][$att], 0, strlen($val))) {
$valid = true;
}
break;
}
case '$=': {
if ($val == substr($dom[$key]['attribute'][$att], -strlen($val))) {
$valid = true;
}
break;
}
case '*=': {
if (strpos($dom[$key]['attribute'][$att], $val) !== false) {
$valid = true;
}
break;
}
case '|=': {
if ($dom[$key]['attribute'][$att] == $val) {
$valid = true;
} elseif (preg_match('/'.$val.'[\-]{1}/i', $dom[$key]['attribute'][$att]) > 0) {
$valid = true;
}
break;
}
default: {
$valid = true;
}
}
}
}
break;
}
case ':': { // pseudo-class or pseudo-element
if ($attrib{1} == ':') { // pseudo-element
// pseudo-elements are not supported!
// (::first-line, ::first-letter, ::before, ::after)
} else { // pseudo-class
// pseudo-classes are not supported!
// (:root, :nth-child(n), :nth-last-child(n), :nth-of-type(n), :nth-last-of-type(n), :first-child, :last-child, :first-of-type, :last-of-type, :only-child, :only-of-type, :empty, :link, :visited, :active, :hover, :focus, :target, :lang(fr), :enabled, :disabled, :checked)
}
break;
}
} // end of switch
} else {
$valid = true;
}
if ($valid AND ($offset > 0)) {
$valid = false;
// check remaining selector part
$selector = substr($selector, 0, $offset);
switch ($operator) {
case ' ': { // descendant of an element
while ($dom[$key]['parent'] > 0) {
if ($this->isValidCSSSelectorForTag($dom, $dom[$key]['parent'], $selector)) {
$valid = true;
break;
} else {
$key = $dom[$key]['parent'];
}
}
break;
}
case '>': { // child of an element
$valid = $this->isValidCSSSelectorForTag($dom, $dom[$key]['parent'], $selector);
break;
}
case '+': { // immediately preceded by an element
for ($i = ($key - 1); $i > $dom[$key]['parent']; --$i) {
if ($dom[$i]['tag'] AND $dom[$i]['opening']) {
$valid = $this->isValidCSSSelectorForTag($dom, $i, $selector);
break;
}
}
break;
}
case '~': { // preceded by an element
for ($i = ($key - 1); $i > $dom[$key]['parent']; --$i) {
if ($dom[$i]['tag'] AND $dom[$i]['opening']) {
if ($this->isValidCSSSelectorForTag($dom, $i, $selector)) {
break;
}
}
}
break;
}
}
}
}
}
return $valid;
}
TCPDF::lastPage (   $resetmargins = false)

Reset pointer to the last document page.

Parameters
boolean$resetmarginsif true reset left, right, top margins and Y position. public
Since
2.0.000 (2008-01-04)
See Also
setPage(), getPage(), getNumPages()

Definition at line 3678 of file tcpdf.php.

References getNumPages(), and setPage().

{
$this->setPage($this->getNumPages(), $resetmargins);
}

+ Here is the call graph for this function:

TCPDF::Line (   $x1,
  $y1,
  $x2,
  $y2,
  $style = array() 
)

Draws a line between two points.

Parameters
float$x1Abscissa of first point.
float$y1Ordinate of first point.
float$x2Abscissa of second point.
float$y2Ordinate of second point.
array$styleLine style. Array like for SetLineStyle. Default value: default line style (empty array). public
Since
1.0
See Also
SetLineWidth(), SetDrawColor(), SetLineStyle()

Definition at line 12656 of file tcpdf.php.

{
if (is_array($style)) {
$this->SetLineStyle($style);
}
$this->_outPoint($x1, $y1);
$this->_outLine($x2, $y2);
$this->_out('S');
}
TCPDF::LinearGradient (   $x,
  $y,
  $w,
  $h,
  $col1 = array(),
  $col2 = array(),
  $coords = array(0,0,1,0) 
)

Paints a linear colour gradient.

Parameters
float$xabscissa of the top left corner of the rectangle.
float$yordinate of the top left corner of the rectangle.
float$wwidth of the rectangle.
float$hheight of the rectangle.
array$col1first color (Grayscale, RGB or CMYK components).
array$col2second color (Grayscale, RGB or CMYK components).
array$coordsarray of the form (x1, y1, x2, y2) which defines the gradient vector (see linear_gradient_coords.jpg). The default value is from left to right (x1=0, y1=0, x2=1, y2=0).
Author
Andreas Würmser, Nicola Asuni
Since
3.1.000 (2008-06-09) public

Definition at line 15791 of file tcpdf.php.

References $x, and $y.

{
$this->Clip($x, $y, $w, $h);
$this->Gradient(2, $coords, array(array('color' => $col1, 'offset' => 0, 'exponent' => 1), array('color' => $col2, 'offset' => 1, 'exponent' => 1)), array(), false);
}
TCPDF::Link (   $x,
  $y,
  $w,
  $h,
  $link,
  $spaces = 0 
)

Puts a link on a rectangular area of the page.

Text or image links are generally put via Cell(), Write() or Image(), but this method can be useful for instance to define a clickable area inside an image.

Parameters
float$xAbscissa of the upper-left corner of the rectangle
float$yOrdinate of the upper-left corner of the rectangle
float$wWidth of the rectangle
float$hHeight of the rectangle
mixed$linkURL or identifier returned by AddLink()
int$spacesnumber of spaces on the text to link public
Since
1.5
See Also
AddLink(), Annotation(), Cell(), Write(), Image()

Definition at line 5014 of file tcpdf.php.

References $h, $w, $x, $y, and Annotation().

Referenced by getCellCode(), and Image().

{
$this->Annotation($x, $y, $w, $h, $link, array('Subtype'=>'Link'), $spaces);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::ListBox (   $name,
  $w,
  $h,
  $values,
  $prop = array(),
  $opt = array(),
  $x = '',
  $y = '',
  $js = false 
)

Creates a List-box field.

Parameters
string$namefield name
int$wwidth
int$hheight
array$valuesarray containing the list of values.
array$propjavascript field properties. Possible values are described on official Javascript for Acrobat API reference.
array$optannotation parameters. Possible values are described on official PDF32000_2008 reference.
float$xAbscissa of the upper-left corner of the rectangle
float$yOrdinate of the upper-left corner of the rectangle
boolean$jsif true put the field using JavaScript (requires Acrobat Writer to be rendered). public
Author
Nicola Asuni
Since
4.8.000 (2009-09-07)

Definition at line 14739 of file tcpdf.php.

References $name, $x, and $y.

{
if ($x === '') {
}
if ($y === '') {
}
// check page for no-write regions and adapt page margins if necessary
$this->checkPageRegions($h, $x, $y);
if ($js) {
$this->_addfield('listbox', $name, $x, $y, $w, $h, $prop);
$s = '';
foreach ($values as $value) {
$s .= "'".addslashes($value)."',";
}
$this->javascript .= 'f'.$name.'.setItems(['.substr($s, 0, -1)."]);\n";
return;
}
// get default style
$prop = array_merge($this->getFormDefaultProp(), $prop);
// get annotation data
$popt = $this->getAnnotOptFromJSProp($prop);
// set additional default values
$this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i'];
$fontstyle = sprintf('/F%d %.2F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor);
$popt['da'] = $fontstyle;
$popt['ap'] = array();
$popt['ap']['n'] = 'q BT '.$fontstyle.' ET Q';
// merge options
$opt = array_merge($popt, $opt);
// set remaining annotation data
$opt['Subtype'] = 'Widget';
$opt['ft'] = 'Ch';
$opt['t'] = $name;
$opt['opt'] = $values;
$this->Annotation($x, $y, $w, $h, $name, $opt, 0);
if ($this->rtl) {
$this->x -= $w;
} else {
$this->x += $w;
}
}
TCPDF::Ln (   $h = '',
  $cell = false 
)

Performs a line break.

The current abscissa goes back to the left margin and the ordinate increases by the amount passed in parameter.

Parameters
float$hThe height of the break. By default, the value equals the height of the last printed cell.
boolean$cellif true add the current left (or right o for RTL) padding to the X coordinate public
Since
1.0
See Also
Cell()

Definition at line 7672 of file tcpdf.php.

Referenced by Footer(), and setRTL().

{
if (($this->num_columns > 1) AND ($this->y == $this->columns[$this->current_column]['y']) AND isset($this->columns[$this->current_column]['x']) AND ($this->x == $this->columns[$this->current_column]['x'])) {
// revove vertical space from the top of the column
return;
}
if ($cell) {
if ($this->rtl) {
$cellpadding = $this->cell_padding['R'];
} else {
$cellpadding = $this->cell_padding['L'];
}
} else {
$cellpadding = 0;
}
if ($this->rtl) {
$this->x = $this->w - $this->rMargin - $cellpadding;
} else {
$this->x = $this->lMargin + $cellpadding;
}
if (is_string($h)) {
$this->y += $this->lasth;
} else {
$this->y += $h;
}
$this->newline = true;
}

+ Here is the caller graph for this function:

TCPDF::MirrorH (   $x = '')

Horizontal Mirroring.

Parameters
int$xabscissa of the point. Default is current x position public
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12253 of file tcpdf.php.

References $x.

{
$this->Scale(-100, 100, $x);
}
TCPDF::MirrorL (   $angle = 0,
  $x = '',
  $y = '' 
)

Reflection against a straight line through point (x, y) with the gradient angle (angle).

Parameters
float$anglegradient angle of the straight line. Default is 0 (horizontal line).
int$xabscissa of the point. Default is current x position
int$yordinate of the point. Default is current y position public
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12289 of file tcpdf.php.

References $x, and $y.

{
$this->Scale(-100, 100, $x, $y);
$this->Rotate(-2*($angle-90), $x, $y);
}
TCPDF::MirrorP (   $x = '',
  $y = '' 
)

Point reflection mirroring.

Parameters
int$xabscissa of the point. Default is current x position
int$yordinate of the point. Default is current y position public
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12276 of file tcpdf.php.

References $x, and $y.

{
$this->Scale(-100, -100, $x, $y);
}
TCPDF::MirrorV (   $y = '')

Verical Mirroring.

Parameters
int$yordinate of the point. Default is current y position public
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12264 of file tcpdf.php.

References $y.

{
$this->Scale(100, -100, '', $y);
}
TCPDF::movePage (   $frompage,
  $topage 
)

Move a page to a previous position.

Parameters
int$frompagenumber of the source page
int$topagenumber of the destination page (must be less than $frompage)
Returns
true in case of success, false in case of error. public
Since
4.5.000 (2009-01-02)

Definition at line 22292 of file tcpdf.php.

{
if (($frompage > $this->numpages) OR ($frompage <= $topage)) {
return false;
}
if ($frompage == $this->page) {
// close the page before moving it
$this->endPage();
}
// move all page-related states
$tmppage = $this->pages[$frompage];
$tmppagedim = $this->pagedim[$frompage];
$tmppagelen = $this->pagelen[$frompage];
$tmpintmrk = $this->intmrk[$frompage];
$tmpbordermrk = $this->bordermrk[$frompage];
$tmpcntmrk = $this->cntmrk[$frompage];
if (isset($this->footerpos[$frompage])) {
$tmpfooterpos = $this->footerpos[$frompage];
}
if (isset($this->footerlen[$frompage])) {
$tmpfooterlen = $this->footerlen[$frompage];
}
if (isset($this->transfmrk[$frompage])) {
$tmptransfmrk = $this->transfmrk[$frompage];
}
if (isset($this->PageAnnots[$frompage])) {
$tmpannots = $this->PageAnnots[$frompage];
}
if (isset($this->newpagegroup[$frompage])) {
$tmpnewpagegroup = $this->newpagegroup[$frompage];
}
for ($i = $frompage; $i > $topage; --$i) {
$j = $i - 1;
// shift pages down
$this->pages[$i] = $this->pages[$j];
$this->pagedim[$i] = $this->pagedim[$j];
$this->pagelen[$i] = $this->pagelen[$j];
$this->intmrk[$i] = $this->intmrk[$j];
$this->bordermrk[$i] = $this->bordermrk[$j];
$this->cntmrk[$i] = $this->cntmrk[$j];
if (isset($this->footerpos[$j])) {
$this->footerpos[$i] = $this->footerpos[$j];
} elseif (isset($this->footerpos[$i])) {
unset($this->footerpos[$i]);
}
if (isset($this->footerlen[$j])) {
$this->footerlen[$i] = $this->footerlen[$j];
} elseif (isset($this->footerlen[$i])) {
unset($this->footerlen[$i]);
}
if (isset($this->transfmrk[$j])) {
$this->transfmrk[$i] = $this->transfmrk[$j];
} elseif (isset($this->transfmrk[$i])) {
unset($this->transfmrk[$i]);
}
if (isset($this->PageAnnots[$j])) {
$this->PageAnnots[$i] = $this->PageAnnots[$j];
} elseif (isset($this->PageAnnots[$i])) {
unset($this->PageAnnots[$i]);
}
if (isset($this->newpagegroup[$j])) {
$this->newpagegroup[$i] = $this->newpagegroup[$j];
} elseif (isset($this->newpagegroup[$i])) {
unset($this->newpagegroup[$i]);
}
}
$this->pages[$topage] = $tmppage;
$this->pagedim[$topage] = $tmppagedim;
$this->pagelen[$topage] = $tmppagelen;
$this->intmrk[$topage] = $tmpintmrk;
$this->bordermrk[$topage] = $tmpbordermrk;
$this->cntmrk[$topage] = $tmpcntmrk;
if (isset($tmpfooterpos)) {
$this->footerpos[$topage] = $tmpfooterpos;
} elseif (isset($this->footerpos[$topage])) {
unset($this->footerpos[$topage]);
}
if (isset($tmpfooterlen)) {
$this->footerlen[$topage] = $tmpfooterlen;
} elseif (isset($this->footerlen[$topage])) {
unset($this->footerlen[$topage]);
}
if (isset($tmptransfmrk)) {
$this->transfmrk[$topage] = $tmptransfmrk;
} elseif (isset($this->transfmrk[$topage])) {
unset($this->transfmrk[$topage]);
}
if (isset($tmpannots)) {
$this->PageAnnots[$topage] = $tmpannots;
} elseif (isset($this->PageAnnots[$topage])) {
unset($this->PageAnnots[$topage]);
}
if (isset($tmpnewpagegroup)) {
$this->newpagegroup[$topage] = $tmpnewpagegroup;
} elseif (isset($this->newpagegroup[$topage])) {
unset($this->newpagegroup[$topage]);
}
// adjust outlines
$tmpoutlines = $this->outlines;
foreach ($tmpoutlines as $key => $outline) {
if (($outline['p'] >= $topage) AND ($outline['p'] < $frompage)) {
$this->outlines[$key]['p'] = $outline['p'] + 1;
} elseif ($outline['p'] == $frompage) {
$this->outlines[$key]['p'] = $topage;
}
}
// adjust links
$tmplinks = $this->links;
foreach ($tmplinks as $key => $link) {
if (($link[0] >= $topage) AND ($link[0] < $frompage)) {
$this->links[$key][0] = $link[0] + 1;
} elseif ($link[0] == $frompage) {
$this->links[$key][0] = $topage;
}
}
// adjust javascript
$tmpjavascript = $this->javascript;
global $jfrompage, $jtopage;
$jfrompage = $frompage;
$jtopage = $topage;
$this->javascript = preg_replace_callback('/this\.addField\(\'([^\']*)\',\'([^\']*)\',([0-9]+)/',
create_function('$matches', 'global $jfrompage, $jtopage;
$pagenum = intval($matches[3]) + 1;
if (($pagenum >= $jtopage) AND ($pagenum < $jfrompage)) {
$newpage = ($pagenum + 1);
} elseif ($pagenum == $jfrompage) {
$newpage = $jtopage;
} else {
$newpage = $pagenum;
}
--$newpage;
return "this.addField(\'".$matches[1]."\',\'".$matches[2]."\',".$newpage."";'), $tmpjavascript);
// return to last page
$this->lastPage(true);
return true;
}
TCPDF::MultiCell (   $w,
  $h,
  $txt,
  $border = 0,
  $align = 'J',
  $fill = false,
  $ln = 1,
  $x = '',
  $y = '',
  $reseth = true,
  $stretch = 0,
  $ishtml = false,
  $autopadding = true,
  $maxh = 0,
  $valign = 'T',
  $fitcell = false 
)

This method allows printing text with line breaks.

They can be automatic (as soon as the text reaches the right border of the cell) or explicit (via the
character). As many cells as necessary are output, one below the other.
Text can be aligned, centered or justified. The cell block can be framed and the background painted.

Parameters
float$wWidth of cells. If 0, they extend up to the right margin of the page.
float$hCell minimum height. The cell extends automatically if needed.
string$txtString to print
mixed$borderIndicates if borders must be drawn around the cell. The value can be a number:
  • 0: no border (default)
  • 1: frame
or a string containing some or all of the following characters (in any order):
  • L: left
  • T: top
  • R: right
  • B: bottom
or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
string$alignAllows to center or align the text. Possible values are:
  • L or empty string: left align
  • C: center
  • R: right align
  • J: justification (default value when $ishtml=false)
boolean$fillIndicates if the cell background must be painted (true) or transparent (false).
int$lnIndicates where the current position should go after the call. Possible values are:
  • 0: to the right
  • 1: to the beginning of the next line [DEFAULT]
  • 2: below
float$xx position in user units
float$yy position in user units
boolean$resethif true reset the last cell height (default true).
int$stretchfont stretch mode:
  • 0 = disabled
  • 1 = horizontal scaling only if text is larger than cell width
  • 2 = forced horizontal scaling to fit cell width
  • 3 = character spacing only if text is larger than cell width
  • 4 = forced character spacing to fit cell width
General font stretching and scaling values will be preserved when possible.
boolean$ishtmlset to true if $txt is HTML content (default = false).
boolean$autopaddingif true, uses internal padding and automatically adjust it to account for line width.
float$maxhmaximum height. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature. This feature works only when $ishtml=false.
string$valignVertical alignment of text (requires $maxh = $h > 0). Possible values are:
  • T: TOP
  • M: middle
  • B: bottom
. This feature works only when $ishtml=false.
boolean$fitcellif true attempt to fit all the text within the cell by reducing the font size.
Returns
int Return the number of cells or 1 for html mode. public
Since
1.3
See Also
SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), Cell(), Write(), SetAutoPageBreak()

Definition at line 5935 of file tcpdf.php.

References $bMargin, $cell_margin, $cell_padding, $current_column, $FontSizePt, $h, $lMargin, $num_columns, $page, $rMargin, $skip, $tMargin, $w, $x, $xobjid, $y, adjustCellPadding(), checkPageBreak(), checkPageRegions(), empty_string(), getBorderMode(), getCellCode(), getPageBuffer(), getStringHeight(), GetX(), GetY(), resetLastH(), selectColumn(), setCellMargins(), setContentMark(), SetFontSize(), SetLeftMargin(), setPage(), setPageBuffer(), SetRightMargin(), SetX(), SetY(), Write(), and writeHTML().

Referenced by Header().

{
$prev_cell_margin = $this->cell_margin;
$prev_cell_padding = $this->cell_padding;
// adjust internal padding
$this->adjustCellPadding($border);
$mc_padding = $this->cell_padding;
$mc_margin = $this->cell_margin;
$this->cell_padding['T'] = 0;
$this->cell_padding['B'] = 0;
$this->setCellMargins(0, 0, 0, 0);
if ($this->empty_string($this->lasth) OR $reseth) {
// reset row height
$this->resetLastH();
}
if (!$this->empty_string($y)) {
$this->SetY($y);
} else {
$y = $this->GetY();
}
$resth = 0;
if ((!$this->InFooter) AND (($y + $h + $mc_margin['T'] + $mc_margin['B']) > $this->PageBreakTrigger)) {
// spit cell in more pages/columns
$newh = $this->PageBreakTrigger - $y;
$resth = $h - $newh; // cell to be printed on the next page/column
$h = $newh;
}
// get current page number
$startpage = $this->page;
// get current column
$startcolumn = $this->current_column;
if (!$this->empty_string($x)) {
$this->SetX($x);
} else {
$x = $this->GetX();
}
// check page for no-write regions and adapt page margins if necessary
$this->checkPageRegions(0, $x, $y);
// apply margins
$oy = $y + $mc_margin['T'];
if ($this->rtl) {
$ox = $this->w - $x - $mc_margin['R'];
} else {
$ox = $x + $mc_margin['L'];
}
$this->x = $ox;
$this->y = $oy;
// set width
if ($this->empty_string($w) OR ($w <= 0)) {
if ($this->rtl) {
$w = $this->x - $this->lMargin - $mc_margin['L'];
} else {
$w = $this->w - $this->x - $this->rMargin - $mc_margin['R'];
}
}
// store original margin values
if ($this->rtl) {
$this->rMargin = $this->w - $this->x;
$this->lMargin = $this->x - $w;
} else {
$this->lMargin = $this->x;
$this->rMargin = $this->w - $this->x - $w;
}
if ($autopadding) {
// add top padding
$this->y += $mc_padding['T'];
}
if ($ishtml) { // ******* Write HTML text
$this->writeHTML($txt, true, 0, $reseth, true, $align);
$nl = 1;
} else { // ******* Write simple text
// vertical alignment
if ($maxh > 0) {
// get text height
$text_height = $this->getStringHeight($w, $txt, $reseth, $autopadding, $mc_padding, $border);
if ($fitcell) {
$prev_FontSizePt = $this->FontSizePt;
// try to reduce font size to fit text on cell (use a quick search algorithm)
$fmin = 1;
$prev_text_height = $text_height;
$maxit = 100; // max number of iterations
while ($maxit > 0) {
$fmid = (($fmax + $fmin) / 2);
$this->SetFontSize($fmid, false);
$this->resetLastH();
$text_height = $this->getStringHeight($w, $txt, $reseth, $autopadding, $mc_padding, $border);
if (($text_height == $maxh) OR (($text_height < $maxh) AND ($fmin >= ($fmax - 0.01)))) {
break;
} elseif ($text_height < $maxh) {
$fmin = $fmid;
} else {
$fmax = $fmid;
}
--$maxit;
}
$this->SetFontSize($this->FontSizePt);
}
if ($text_height < $maxh) {
if ($valign == 'M') {
// text vertically centered
$this->y += (($maxh - $text_height) / 2);
} elseif ($valign == 'B') {
// text vertically aligned on bottom
$this->y += ($maxh - $text_height);
}
}
}
$nl = $this->Write($this->lasth, $txt, '', 0, $align, true, $stretch, false, true, $maxh, 0, $mc_margin);
if ($fitcell) {
// restore font size
$this->SetFontSize($prev_FontSizePt);
}
}
if ($autopadding) {
// add bottom padding
$this->y += $mc_padding['B'];
}
// Get end-of-text Y position
$currentY = $this->y;
// get latest page number
$endpage = $this->page;
if ($resth > 0) {
$skip = ($endpage - $startpage);
$tmpresth = $resth;
while ($tmpresth > 0) {
if ($skip <= 0) {
// add a page (or trig AcceptPageBreak() for multicolumn mode)
$this->checkPageBreak($this->PageBreakTrigger + 1);
}
if ($this->num_columns > 1) {
$tmpresth -= ($this->h - $this->y - $this->bMargin);
} else {
$tmpresth -= ($this->h - $this->tMargin - $this->bMargin);
}
--$skip;
}
$currentY = $this->y;
$endpage = $this->page;
}
// get latest column
$endcolumn = $this->current_column;
if ($this->num_columns == 0) {
$this->num_columns = 1;
}
// get border modes
$border_start = $this->getBorderMode($border, $position='start');
$border_end = $this->getBorderMode($border, $position='end');
$border_middle = $this->getBorderMode($border, $position='middle');
// design borders around HTML cells.
for ($page = $startpage; $page <= $endpage; ++$page) { // for each page
$ccode = '';
$this->setPage($page);
if ($this->num_columns < 2) {
// single-column mode
$this->SetX($x);
$this->y = $this->tMargin;
}
// account for margin changes
if ($page > $startpage) {
if (($this->rtl) AND ($this->pagedim[$page]['orm'] != $this->pagedim[$startpage]['orm'])) {
$this->x -= ($this->pagedim[$page]['orm'] - $this->pagedim[$startpage]['orm']);
} elseif ((!$this->rtl) AND ($this->pagedim[$page]['olm'] != $this->pagedim[$startpage]['olm'])) {
$this->x += ($this->pagedim[$page]['olm'] - $this->pagedim[$startpage]['olm']);
}
}
if ($startpage == $endpage) {
// single page
for ($column = $startcolumn; $column <= $endcolumn; ++$column) { // for each column
$this->selectColumn($column);
if ($this->rtl) {
$this->x -= $mc_margin['R'];
} else {
$this->x += $mc_margin['L'];
}
if ($startcolumn == $endcolumn) { // single column
$cborder = $border;
$h = max($h, ($currentY - $oy));
$this->y = $oy;
} elseif ($column == $startcolumn) { // first column
$cborder = $border_start;
$this->y = $oy;
$h = $this->h - $this->y - $this->bMargin;
} elseif ($column == $endcolumn) { // end column
$cborder = $border_end;
$h = $currentY - $this->y;
if ($resth > $h) {
$h = $resth;
}
} else { // middle column
$cborder = $border_middle;
$h = $this->h - $this->y - $this->bMargin;
$resth -= $h;
}
$ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
} // end for each column
} elseif ($page == $startpage) { // first page
for ($column = $startcolumn; $column < $this->num_columns; ++$column) { // for each column
$this->selectColumn($column);
if ($this->rtl) {
$this->x -= $mc_margin['R'];
} else {
$this->x += $mc_margin['L'];
}
if ($column == $startcolumn) { // first column
$cborder = $border_start;
$this->y = $oy;
$h = $this->h - $this->y - $this->bMargin;
} else { // middle column
$cborder = $border_middle;
$h = $this->h - $this->y - $this->bMargin;
$resth -= $h;
}
$ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
} // end for each column
} elseif ($page == $endpage) { // last page
for ($column = 0; $column <= $endcolumn; ++$column) { // for each column
$this->selectColumn($column);
if ($this->rtl) {
$this->x -= $mc_margin['R'];
} else {
$this->x += $mc_margin['L'];
}
if ($column == $endcolumn) {
// end column
$cborder = $border_end;
$h = $currentY - $this->y;
if ($resth > $h) {
$h = $resth;
}
} else {
// middle column
$cborder = $border_middle;
$h = $this->h - $this->y - $this->bMargin;
$resth -= $h;
}
$ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
} // end for each column
} else { // middle page
for ($column = 0; $column < $this->num_columns; ++$column) { // for each column
$this->selectColumn($column);
if ($this->rtl) {
$this->x -= $mc_margin['R'];
} else {
$this->x += $mc_margin['L'];
}
$cborder = $border_middle;
$h = $this->h - $this->y - $this->bMargin;
$resth -= $h;
$ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
} // end for each column
}
if ($cborder OR $fill) {
// draw border and fill
if ($this->inxobj) {
// we are inside an XObject template
if (end($this->xobjects[$this->xobjid]['transfmrk']) !== false) {
$pagemarkkey = key($this->xobjects[$this->xobjid]['transfmrk']);
$pagemark = &$this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey];
} else {
$pagemark = &$this->xobjects[$this->xobjid]['intmrk'];
}
$pagebuff = $this->xobjects[$this->xobjid]['outdata'];
$pstart = substr($pagebuff, 0, $pagemark);
$pend = substr($pagebuff, $pagemark);
$this->xobjects[$this->xobjid]['outdata'] = $pstart.$ccode.$pend;
$pagemark += strlen($ccode);
} else {
if (end($this->transfmrk[$this->page]) !== false) {
$pagemarkkey = key($this->transfmrk[$this->page]);
$pagemark = &$this->transfmrk[$this->page][$pagemarkkey];
} elseif ($this->InFooter) {
$pagemark = &$this->footerpos[$this->page];
} else {
$pagemark = &$this->intmrk[$this->page];
}
$pagebuff = $this->getPageBuffer($this->page);
$pstart = substr($pagebuff, 0, $pagemark);
$pend = substr($pagebuff, $pagemark);
$this->setPageBuffer($this->page, $pstart.$ccode.$pend);
$pagemark += strlen($ccode);
}
}
} // end for each page
// Get end-of-cell Y position
$currentY = $this->GetY();
// restore original margin values
if ($ln > 0) {
//Go to the beginning of the next line
$this->SetY($currentY + $mc_margin['B']);
if ($ln == 2) {
$this->SetX($x + $w + $mc_margin['L'] + $mc_margin['R']);
}
} else {
// go left or right by case
$this->setPage($startpage);
$this->y = $y;
$this->SetX($x + $w + $mc_margin['L'] + $mc_margin['R']);
}
$this->setContentMark();
$this->cell_padding = $prev_cell_padding;
$this->cell_margin = $prev_cell_margin;
return $nl;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::objclone (   $object)

Creates a copy of a class object.

Parameters
object$objectclass object to be cloned
Returns
cloned object public
Since
4.5.029 (2009-03-19)

Definition at line 22987 of file tcpdf.php.

{
return @clone($object);
}
TCPDF::Open ( )

This method begins the generation of the PDF document.

It is not necessary to call it explicitly because AddPage() does it automatically. Note: no page is created by this method public

Since
1.0
See Also
AddPage(), Close()

Definition at line 3577 of file tcpdf.php.

Referenced by startPage().

{
//Begin document
$this->state = 1;
}

+ Here is the caller graph for this function:

TCPDF::openHTMLTagHandler ( $dom,
  $key,
  $cell 
)
protected

Process opening tags.

Parameters
array$domhtml dom array
int$keycurrent element id
boolean$cellif true add the default left (or right if RTL) padding to each new line (default false). protected

Definition at line 20121 of file tcpdf.php.

References $name, $type, $x, $y, K_PATH_MAIN, K_PATH_URL, and K_TCPDF_CALLS_IN_HTML.

{
$tag = $dom[$key];
$parent = $dom[($dom[$key]['parent'])];
$firsttag = ($key == 1);
// check for text direction attribute
if (isset($tag['dir'])) {
$this->setTempRTL($tag['dir']);
} else {
$this->tmprtl = false;
}
if ($tag['block']) {
$hbz = 0; // distance from y to line bottom
$hb = 0; // vertical space between block tags
// calculate vertical space for block tags
if (isset($this->tagvspaces[$tag['value']][0]['h']) AND ($this->tagvspaces[$tag['value']][0]['h'] >= 0)) {
$cur_h = $this->tagvspaces[$tag['value']][0]['h'];
} elseif (isset($tag['fontsize'])) {
$cur_h = ($tag['fontsize'] / $this->k) * $this->cell_height_ratio;
} else {
$cur_h = $this->FontSize * $this->cell_height_ratio;
}
if (isset($this->tagvspaces[$tag['value']][0]['n'])) {
$n = $this->tagvspaces[$tag['value']][0]['n'];
} elseif (preg_match('/[h][0-9]/', $tag['value']) > 0) {
$n = 0.6;
} else {
$n = 1;
}
$hb = ($n * $cur_h);
if (($this->htmlvspace <= 0) AND ($n > 0)) {
if (isset($parent['fontsize'])) {
$hbz = (($parent['fontsize'] / $this->k) * $this->cell_height_ratio);
} else {
$hbz = $this->FontSize * $this->cell_height_ratio;
}
}
}
// Opening tag
switch($tag['value']) {
case 'table': {
$cp = 0;
$cs = 0;
$dom[$key]['rowspans'] = array();
if (!isset($dom[$key]['attribute']['nested']) OR ($dom[$key]['attribute']['nested'] != 'true')) {
// set table header
if (!$this->empty_string($dom[$key]['thead'])) {
// set table header
$this->thead = $dom[$key]['thead'];
if (!isset($this->theadMargins) OR (empty($this->theadMargins))) {
$this->theadMargins = array();
$this->theadMargins['cell_padding'] = $this->cell_padding;
$this->theadMargins['lmargin'] = $this->lMargin;
$this->theadMargins['rmargin'] = $this->rMargin;
$this->theadMargins['page'] = $this->page;
}
}
}
// store current margins and page
$dom[$key]['old_cell_padding'] = $this->cell_padding;
if (isset($tag['attribute']['cellpadding'])) {
$pad = $this->getHTMLUnitToUnits($tag['attribute']['cellpadding'], 1, 'px');
$this->SetCellPadding($pad);
}
if (isset($tag['attribute']['cellspacing'])) {
$cs = $this->getHTMLUnitToUnits($tag['attribute']['cellspacing'], 1, 'px');
}
$prev_y = $this->y;
if ($this->checkPageBreak(((2 * $cp) + (2 * $cs) + $this->lasth), '', false) OR ($this->y < $prev_y)) {
$this->inthead = true;
// add a page (or trig AcceptPageBreak() for multicolumn mode)
$this->checkPageBreak($this->PageBreakTrigger + 1);
}
break;
}
case 'tr': {
// array of columns positions
$dom[$key]['cellpos'] = array();
break;
}
case 'hr': {
if ((isset($tag['height'])) AND ($tag['height'] != '')) {
$hrHeight = $this->getHTMLUnitToUnits($tag['height'], 1, 'px');
} else {
$hrHeight = $this->GetLineWidth();
}
$this->addHTMLVertSpace($hbz, ($hrHeight / 2), $cell, $firsttag);
$x = $this->GetX();
$y = $this->GetY();
$wtmp = $this->w - $this->lMargin - $this->rMargin;
if ($cell) {
$wtmp -= ($this->cell_padding['L'] + $this->cell_padding['R']);
}
if ((isset($tag['width'])) AND ($tag['width'] != '')) {
$hrWidth = $this->getHTMLUnitToUnits($tag['width'], $wtmp, 'px');
} else {
$hrWidth = $wtmp;
}
$prevlinewidth = $this->GetLineWidth();
$this->SetLineWidth($hrHeight);
$this->Line($x, $y, $x + $hrWidth, $y);
$this->SetLineWidth($prevlinewidth);
$this->addHTMLVertSpace(($hrHeight / 2), 0, $cell, !isset($dom[($key + 1)]));
break;
}
case 'a': {
if (array_key_exists('href', $tag['attribute'])) {
$this->HREF['url'] = $tag['attribute']['href'];
}
break;
}
case 'img': {
if (isset($tag['attribute']['src'])) {
// replace relative path with real server path
if (($tag['attribute']['src'][0] == '/') AND ($_SERVER['DOCUMENT_ROOT'] != '/')) {
$findroot = strpos($tag['attribute']['src'], $_SERVER['DOCUMENT_ROOT']);
if (($findroot === false) OR ($findroot > 1)) {
$tag['attribute']['src'] = $_SERVER['DOCUMENT_ROOT'].$tag['attribute']['src'];
}
}
$tag['attribute']['src'] = urldecode($tag['attribute']['src']);
$type = $this->getImageFileType($tag['attribute']['src']);
$testscrtype = @parse_url($tag['attribute']['src']);
if (!isset($testscrtype['query']) OR empty($testscrtype['query'])) {
// convert URL to server path
$tag['attribute']['src'] = str_replace(K_PATH_URL, K_PATH_MAIN, $tag['attribute']['src']);
}
if (!isset($tag['width'])) {
$tag['width'] = 0;
}
if (!isset($tag['height'])) {
$tag['height'] = 0;
}
//if (!isset($tag['attribute']['align'])) {
// the only alignment supported is "bottom"
// further development is required for other modes.
$tag['attribute']['align'] = 'bottom';
//}
switch($tag['attribute']['align']) {
case 'top': {
$align = 'T';
break;
}
case 'middle': {
$align = 'M';
break;
}
case 'bottom': {
$align = 'B';
break;
}
default: {
$align = 'B';
break;
}
}
$prevy = $this->y;
$xpos = $this->x;
// eliminate marker spaces
if (isset($dom[($key - 1)])) {
if (($dom[($key - 1)]['value'] == ' ') OR (isset($dom[($key - 1)]['trimmed_space']))) {
$xpos -= $this->GetStringWidth(chr(32));
} elseif ($this->rtl AND $dom[($key - 1)]['value'] == ' ') {
$xpos += (2 * $this->GetStringWidth(chr(32)));
}
}
$imglink = '';
if (isset($this->HREF['url']) AND !$this->empty_string($this->HREF['url'])) {
$imglink = $this->HREF['url'];
if ($imglink{0} == '#') {
// convert url to internal link
$lnkdata = explode(',', $imglink);
if (isset($lnkdata[0])) {
$page = intval(substr($lnkdata[0], 1));
if (empty($page) OR ($page <= 0)) {
}
if (isset($lnkdata[1]) AND (strlen($lnkdata[1]) > 0)) {
$lnky = floatval($lnkdata[1]);
} else {
$lnky = 0;
}
$imglink = $this->AddLink();
$this->SetLink($imglink, $lnky, $page);
}
}
}
$border = 0;
if (isset($tag['border']) AND !empty($tag['border'])) {
// currently only support 1 (frame) or a combination of 'LTRB'
$border = $tag['border'];
}
$iw = '';
if (isset($tag['width'])) {
$iw = $this->getHTMLUnitToUnits($tag['width'], 1, 'px', false);
}
$ih = '';
if (isset($tag['height'])) {
$ih = $this->getHTMLUnitToUnits($tag['height'], 1, 'px', false);
}
if (($type == 'eps') OR ($type == 'ai')) {
$this->ImageEps($tag['attribute']['src'], $xpos, $this->y, $iw, $ih, $imglink, true, $align, '', $border, true);
} elseif ($type == 'svg') {
$this->ImageSVG($tag['attribute']['src'], $xpos, $this->y, $iw, $ih, $imglink, $align, '', $border, true);
} else {
$this->Image($tag['attribute']['src'], $xpos, $this->y, $iw, $ih, '', $imglink, $align, false, 300, '', false, false, $border, false, false, true);
}
switch($align) {
case 'T': {
$this->y = $prevy;
break;
}
case 'M': {
$this->y = (($this->img_rb_y + $prevy - ($tag['fontsize'] / $this->k)) / 2) ;
break;
}
case 'B': {
$this->y = $this->img_rb_y - ($tag['fontsize'] / $this->k);
break;
}
}
}
break;
}
case 'dl': {
if ($this->listnum == 1) {
$this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag);
} else {
$this->addHTMLVertSpace(0, 0, $cell, $firsttag);
}
break;
}
case 'dt': {
$this->addHTMLVertSpace($hbz, 0, $cell, $firsttag);
break;
}
case 'dd': {
if ($this->rtl) {
$this->rMargin += $this->listindent;
} else {
$this->lMargin += $this->listindent;
}
$this->addHTMLVertSpace($hbz, 0, $cell, $firsttag);
break;
}
case 'ul':
case 'ol': {
if ($tag['value'] == 'ol') {
$this->listordered[$this->listnum] = true;
} else {
$this->listordered[$this->listnum] = false;
}
if (isset($tag['attribute']['start'])) {
$this->listcount[$this->listnum] = intval($tag['attribute']['start']) - 1;
} else {
$this->listcount[$this->listnum] = 0;
}
if ($this->rtl) {
$this->rMargin += $this->listindent;
$this->x -= $this->listindent;
} else {
$this->lMargin += $this->listindent;
$this->x += $this->listindent;
}
if ($this->listnum == 1) {
$this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag);
} else {
$this->addHTMLVertSpace(0, 0, $cell, $firsttag);
}
break;
}
case 'li': {
$this->addHTMLVertSpace($hbz, 0, $cell, $firsttag);
if ($this->listordered[$this->listnum]) {
// ordered item
if (isset($parent['attribute']['type']) AND !$this->empty_string($parent['attribute']['type'])) {
$this->lispacer = $parent['attribute']['type'];
} elseif (isset($parent['listtype']) AND !$this->empty_string($parent['listtype'])) {
$this->lispacer = $parent['listtype'];
} elseif (isset($this->lisymbol) AND !$this->empty_string($this->lisymbol)) {
$this->lispacer = $this->lisymbol;
} else {
$this->lispacer = '#';
}
++$this->listcount[$this->listnum];
if (isset($tag['attribute']['value'])) {
$this->listcount[$this->listnum] = intval($tag['attribute']['value']);
}
} else {
// unordered item
if (isset($parent['attribute']['type']) AND !$this->empty_string($parent['attribute']['type'])) {
$this->lispacer = $parent['attribute']['type'];
} elseif (isset($parent['listtype']) AND !$this->empty_string($parent['listtype'])) {
$this->lispacer = $parent['listtype'];
} elseif (isset($this->lisymbol) AND !$this->empty_string($this->lisymbol)) {
$this->lispacer = $this->lisymbol;
} else {
$this->lispacer = '!';
}
}
break;
}
case 'blockquote': {
if ($this->rtl) {
$this->rMargin += $this->listindent;
} else {
$this->lMargin += $this->listindent;
}
$this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag);
break;
}
case 'br': {
$this->addHTMLVertSpace($hbz, 0, $cell, $firsttag);
break;
}
case 'div': {
$this->addHTMLVertSpace($hbz, 0, $cell, $firsttag);
break;
}
case 'p': {
$this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag);
break;
}
case 'pre': {
$this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag);
$this->premode = true;
break;
}
case 'sup': {
$this->SetXY($this->GetX(), $this->GetY() - ((0.7 * $this->FontSizePt) / $this->k));
break;
}
case 'sub': {
$this->SetXY($this->GetX(), $this->GetY() + ((0.3 * $this->FontSizePt) / $this->k));
break;
}
case 'h1':
case 'h2':
case 'h3':
case 'h4':
case 'h5':
case 'h6': {
$this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag);
break;
}
// Form fields (since 4.8.000 - 2009-09-07)
case 'form': {
if (isset($tag['attribute']['action'])) {
$this->form_action = $tag['attribute']['action'];
} else {
$this->form_action = K_PATH_URL.$_SERVER['SCRIPT_NAME'];
}
if (isset($tag['attribute']['enctype'])) {
$this->form_enctype = $tag['attribute']['enctype'];
} else {
$this->form_enctype = 'application/x-www-form-urlencoded';
}
if (isset($tag['attribute']['method'])) {
$this->form_mode = $tag['attribute']['method'];
} else {
$this->form_mode = 'post';
}
break;
}
case 'input': {
if (isset($tag['attribute']['name']) AND !$this->empty_string($tag['attribute']['name'])) {
$name = $tag['attribute']['name'];
} else {
break;
}
$prop = array();
$opt = array();
if (isset($tag['attribute']['readonly']) AND !$this->empty_string($tag['attribute']['readonly'])) {
$prop['readonly'] = true;
}
if (isset($tag['attribute']['value']) AND !$this->empty_string($tag['attribute']['value'])) {
$value = $tag['attribute']['value'];
}
if (isset($tag['attribute']['maxlength']) AND !$this->empty_string($tag['attribute']['maxlength'])) {
$opt['maxlen'] = intval($tag['attribute']['value']);
}
$h = $this->FontSize * $this->cell_height_ratio;
if (isset($tag['attribute']['size']) AND !$this->empty_string($tag['attribute']['size'])) {
$w = intval($tag['attribute']['size']) * $this->GetStringWidth(chr(32)) * 2;
} else {
$w = $h;
}
if (isset($tag['attribute']['checked']) AND (($tag['attribute']['checked'] == 'checked') OR ($tag['attribute']['checked'] == 'true'))) {
$checked = true;
} else {
$checked = false;
}
switch ($tag['attribute']['type']) {
case 'text': {
if (isset($value)) {
$opt['v'] = $value;
}
$this->TextField($name, $w, $h, $prop, $opt, '', '', false);
break;
}
case 'password': {
if (isset($value)) {
$opt['v'] = $value;
}
$prop['password'] = 'true';
$this->TextField($name, $w, $h, $prop, $opt, '', '', false);
break;
}
case 'checkbox': {
$this->CheckBox($name, $w, $checked, $prop, $opt, $value, '', '', false);
break;
}
case 'radio': {
$this->RadioButton($name, $w, $prop, $opt, $value, $checked, '', '', false);
break;
}
case 'submit': {
$w = $this->GetStringWidth($value) * 1.5;
$h *= 1.6;
$prop = array('lineWidth'=>1, 'borderStyle'=>'beveled', 'fillColor'=>array(196, 196, 196), 'strokeColor'=>array(255, 255, 255));
$action = array();
$action['S'] = 'SubmitForm';
$action['F'] = $this->form_action;
if ($this->form_enctype != 'FDF') {
$action['Flags'] = array('ExportFormat');
}
if ($this->form_mode == 'get') {
$action['Flags'] = array('GetMethod');
}
$this->Button($name, $w, $h, $value, $action, $prop, $opt, '', '', false);
break;
}
case 'reset': {
$w = $this->GetStringWidth($value) * 1.5;
$h *= 1.6;
$prop = array('lineWidth'=>1, 'borderStyle'=>'beveled', 'fillColor'=>array(196, 196, 196), 'strokeColor'=>array(255, 255, 255));
$this->Button($name, $w, $h, $value, array('S'=>'ResetForm'), $prop, $opt, '', '', false);
break;
}
case 'file': {
$prop['fileSelect'] = 'true';
$this->TextField($name, $w, $h, $prop, $opt, '', '', false);
if (!isset($value)) {
$value = '*';
}
$w = $this->GetStringWidth($value) * 2;
$h *= 1.2;
$prop = array('lineWidth'=>1, 'borderStyle'=>'beveled', 'fillColor'=>array(196, 196, 196), 'strokeColor'=>array(255, 255, 255));
$jsaction = 'var f=this.getField(\''.$name.'\'); f.browseForFileToSubmit();';
$this->Button('FB_'.$name, $w, $h, $value, $jsaction, $prop, $opt, '', '', false);
break;
}
case 'hidden': {
if (isset($value)) {
$opt['v'] = $value;
}
$opt['f'] = array('invisible', 'hidden');
$this->TextField($name, 0, 0, $prop, $opt, '', '', false);
break;
}
case 'image': {
// THIS TYPE MUST BE FIXED
if (isset($tag['attribute']['src']) AND !$this->empty_string($tag['attribute']['src'])) {
$img = $tag['attribute']['src'];
} else {
break;
}
$value = 'img';
//$opt['mk'] = array('i'=>$img, 'tp'=>1, 'if'=>array('sw'=>'A', 's'=>'A', 'fb'=>false));
if (isset($tag['attribute']['onclick']) AND !empty($tag['attribute']['onclick'])) {
$jsaction = $tag['attribute']['onclick'];
} else {
$jsaction = '';
}
$this->Button($name, $w, $h, $value, $jsaction, $prop, $opt, '', '', false);
break;
}
case 'button': {
$w = $this->GetStringWidth($value) * 1.5;
$h *= 1.6;
$prop = array('lineWidth'=>1, 'borderStyle'=>'beveled', 'fillColor'=>array(196, 196, 196), 'strokeColor'=>array(255, 255, 255));
if (isset($tag['attribute']['onclick']) AND !empty($tag['attribute']['onclick'])) {
$jsaction = $tag['attribute']['onclick'];
} else {
$jsaction = '';
}
$this->Button($name, $w, $h, $value, $jsaction, $prop, $opt, '', '', false);
break;
}
}
break;
}
case 'textarea': {
$prop = array();
$opt = array();
if (isset($tag['attribute']['readonly']) AND !$this->empty_string($tag['attribute']['readonly'])) {
$prop['readonly'] = true;
}
if (isset($tag['attribute']['name']) AND !$this->empty_string($tag['attribute']['name'])) {
$name = $tag['attribute']['name'];
} else {
break;
}
if (isset($tag['attribute']['value']) AND !$this->empty_string($tag['attribute']['value'])) {
$opt['v'] = $tag['attribute']['value'];
}
if (isset($tag['attribute']['cols']) AND !$this->empty_string($tag['attribute']['cols'])) {
$w = intval($tag['attribute']['cols']) * $this->GetStringWidth(chr(32)) * 2;
} else {
$w = 40;
}
if (isset($tag['attribute']['rows']) AND !$this->empty_string($tag['attribute']['rows'])) {
$h = intval($tag['attribute']['rows']) * $this->FontSize * $this->cell_height_ratio;
} else {
$h = 10;
}
$prop['multiline'] = 'true';
$this->TextField($name, $w, $h, $prop, $opt, '', '', false);
break;
}
case 'select': {
$h = $this->FontSize * $this->cell_height_ratio;
if (isset($tag['attribute']['size']) AND !$this->empty_string($tag['attribute']['size'])) {
$h *= ($tag['attribute']['size'] + 1);
}
$prop = array();
$opt = array();
if (isset($tag['attribute']['name']) AND !$this->empty_string($tag['attribute']['name'])) {
$name = $tag['attribute']['name'];
} else {
break;
}
$w = 0;
if (isset($tag['attribute']['opt']) AND !$this->empty_string($tag['attribute']['opt'])) {
$options = explode('#!NwL!#', $tag['attribute']['opt']);
$values = array();
foreach ($options as $val) {
if (strpos($val, '#!TaB!#') !== false) {
$opts = explode('#!TaB!#', $val);
$values[] = $opts;
$w = max($w, $this->GetStringWidth($opts[1]));
} else {
$values[] = $val;
$w = max($w, $this->GetStringWidth($val));
}
}
} else {
break;
}
$w *= 2;
if (isset($tag['attribute']['multiple']) AND ($tag['attribute']['multiple']='multiple')) {
$prop['multipleSelection'] = 'true';
$this->ListBox($name, $w, $h, $values, $prop, $opt, '', '', false);
} else {
$this->ComboBox($name, $w, $h, $values, $prop, $opt, '', '', false);
}
break;
}
case 'tcpdf': {
if (defined('K_TCPDF_CALLS_IN_HTML') AND (K_TCPDF_CALLS_IN_HTML === true)) {
// Special tag used to call TCPDF methods
if (isset($tag['attribute']['method'])) {
$tcpdf_method = $tag['attribute']['method'];
if (method_exists($this, $tcpdf_method)) {
if (isset($tag['attribute']['params']) AND (!empty($tag['attribute']['params']))) {
$params = unserialize(urldecode($tag['attribute']['params']));
call_user_func_array(array($this, $tcpdf_method), $params);
} else {
$this->$tcpdf_method();
}
$this->newline = true;
}
}
}
break;
}
default: {
break;
}
}
// define tags that support borders and background colors
$bordertags = array('blockquote','br','dd','dl','div','dt','h1','h2','h3','h4','h5','h6','hr','li','ol','p','pre','ul','tcpdf','table');
if (in_array($tag['value'], $bordertags)) {
// set border
$dom[$key]['borderposition'] = $this->getBorderStartPosition();
}
if ($dom[$key]['self'] AND isset($dom[$key]['attribute']['pagebreakafter'])) {
$pba = $dom[$key]['attribute']['pagebreakafter'];
// check for pagebreak
if (($pba == 'true') OR ($pba == 'left') OR ($pba == 'right')) {
// add a page (or trig AcceptPageBreak() for multicolumn mode)
$this->checkPageBreak($this->PageBreakTrigger + 1);
}
if ((($pba == 'left') AND (((!$this->rtl) AND (($this->page % 2) == 0)) OR (($this->rtl) AND (($this->page % 2) != 0))))
OR (($pba == 'right') AND (((!$this->rtl) AND (($this->page % 2) != 0)) OR (($this->rtl) AND (($this->page % 2) == 0))))) {
// add a page (or trig AcceptPageBreak() for multicolumn mode)
$this->checkPageBreak($this->PageBreakTrigger + 1);
}
}
}
TCPDF::Output (   $name = 'doc.pdf',
  $dest = 'I' 
)

Send the document to a given destination: string, local file or browser.

In the last case, the plug-in may be used (if present) or a download ("Save as" dialog box) may be forced.
The method first calls Close() if necessary to terminate the document.

Parameters
string$nameThe name of the file when saved. Note that special characters are removed and blanks characters are replaced with the underscore character.
string$destDestination where to send the document. It can take one of the following values:
  • I: send the file inline to the browser (default). The plug-in is used if available. The name given by name is used when one selects the "Save as" option on the link generating the PDF.
  • D: send to the browser and force a file download with the name given by name.
  • F: save to a local server file with the name given by name.
  • S: return the document as a string. name is ignored.
  • FI: equivalent to F + I option
  • FD: equivalent to F + D option
public
Since
1.0
See Also
Close()

Definition at line 7826 of file tcpdf.php.

References $f, $name, and K_PATH_CACHE.

{
//Output PDF to some destination
//Finish document if necessary
if ($this->state < 3) {
$this->Close();
}
//Normalize parameters
if (is_bool($dest)) {
$dest = $dest ? 'D' : 'F';
}
$dest = strtoupper($dest);
if ($dest{0} != 'F') {
$name = preg_replace('/[\s]+/', '_', $name);
$name = preg_replace('/[^a-zA-Z0-9_\.-]/', '', $name);
}
if ($this->sign) {
// *** apply digital signature to the document ***
// get the document content
$pdfdoc = $this->getBuffer();
// remove last newline
$pdfdoc = substr($pdfdoc, 0, -1);
// Remove the original buffer
if (isset($this->diskcache) AND $this->diskcache) {
// remove buffer file from cache
unlink($this->buffer);
}
unset($this->buffer);
// remove filler space
$byterange_string_len = strlen($this->byterange_string);
// define the ByteRange
$byte_range = array();
$byte_range[0] = 0;
$byte_range[1] = strpos($pdfdoc, $this->byterange_string) + $byterange_string_len + 10;
$byte_range[2] = $byte_range[1] + $this->signature_max_length + 2;
$byte_range[3] = strlen($pdfdoc) - $byte_range[2];
$pdfdoc = substr($pdfdoc, 0, $byte_range[1]).substr($pdfdoc, $byte_range[2]);
// replace the ByteRange
$byterange = sprintf('/ByteRange[0 %u %u %u]', $byte_range[1], $byte_range[2], $byte_range[3]);
$byterange .= str_repeat(' ', ($byterange_string_len - strlen($byterange)));
$pdfdoc = str_replace($this->byterange_string, $byterange, $pdfdoc);
// write the document to a temporary folder
$tempdoc = tempnam(K_PATH_CACHE, 'tmppdf_');
$f = fopen($tempdoc, 'wb');
if (!$f) {
$this->Error('Unable to create temporary file: '.$tempdoc);
}
$pdfdoc_length = strlen($pdfdoc);
fwrite($f, $pdfdoc, $pdfdoc_length);
fclose($f);
// get digital signature via openssl library
$tempsign = tempnam(K_PATH_CACHE, 'tmpsig_');
if (empty($this->signature_data['extracerts'])) {
openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED);
} else {
openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED, $this->signature_data['extracerts']);
}
unlink($tempdoc);
// read signature
$signature = file_get_contents($tempsign);
unlink($tempsign);
// extract signature
$signature = substr($signature, $pdfdoc_length);
$signature = substr($signature, (strpos($signature, "%%EOF\n\n------") + 13));
$tmparr = explode("\n\n", $signature);
$signature = $tmparr[1];
unset($tmparr);
// decode signature
$signature = base64_decode(trim($signature));
// convert signature to hex
$signature = current(unpack('H*', $signature));
$signature = str_pad($signature, $this->signature_max_length, '0');
// Add signature to the document
$pdfdoc = substr($pdfdoc, 0, $byte_range[1]).'<'.$signature.'>'.substr($pdfdoc, $byte_range[1]);
$this->diskcache = false;
$this->buffer = &$pdfdoc;
$this->bufferlen = strlen($pdfdoc);
}
switch($dest) {
case 'I': {
// Send PDF to the standard output
if (ob_get_contents()) {
$this->Error('Some data has already been output, can\'t send PDF file');
}
if (php_sapi_name() != 'cli') {
//We send to a browser
header('Content-Type: application/pdf');
if (headers_sent()) {
$this->Error('Some data has already been output to browser, can\'t send PDF file');
}
header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Content-Length: '.$this->bufferlen);
header('Content-Disposition: inline; filename="'.basename($name).'";');
}
echo $this->getBuffer();
break;
}
case 'D': {
// Download PDF as file
if (ob_get_contents()) {
$this->Error('Some data has already been output, can\'t send PDF file');
}
header('Content-Description: File Transfer');
if (headers_sent()) {
$this->Error('Some data has already been output to browser, can\'t send PDF file');
}
header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
// force download dialog
header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream', false);
header('Content-Type: application/download', false);
header('Content-Type: application/pdf', false);
// use the Content-Disposition header to supply a recommended filename
header('Content-Disposition: attachment; filename="'.basename($name).'";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.$this->bufferlen);
echo $this->getBuffer();
break;
}
case 'F':
case 'FI':
case 'FD': {
// Save PDF to a local file
if ($this->diskcache) {
copy($this->buffer, $name);
} else {
$f = fopen($name, 'wb');
if (!$f) {
$this->Error('Unable to create output file: '.$name);
}
fwrite($f, $this->getBuffer(), $this->bufferlen);
fclose($f);
}
if ($dest == 'FI') {
// send headers to browser
header('Content-Type: application/pdf');
header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Content-Length: '.filesize($name));
header('Content-Disposition: inline; filename="'.basename($name).'";');
// send document to the browser
echo file_get_contents($name);
} elseif ($dest == 'FD') {
// send headers to browser
if (ob_get_contents()) {
$this->Error('Some data has already been output, can\'t send PDF file');
}
header('Content-Description: File Transfer');
if (headers_sent()) {
$this->Error('Some data has already been output to browser, can\'t send PDF file');
}
header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
// force download dialog
header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream', false);
header('Content-Type: application/download', false);
header('Content-Type: application/pdf', false);
// use the Content-Disposition header to supply a recommended filename
header('Content-Disposition: attachment; filename="'.basename($name).'";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($name));
// send document to the browser
echo file_get_contents($name);
}
break;
}
case 'S': {
// Returns PDF as a string
return $this->getBuffer();
}
default: {
$this->Error('Incorrect output destination: '.$dest);
}
}
return '';
}
TCPDF::PageNo ( )

Returns the current page number.

Returns
int page number public
Since
1.0
See Also
AliasNbPages(), getAliasNbPages()

Definition at line 4192 of file tcpdf.php.

References $page.

{
return $this->page;
}
TCPDF::PageNoFormatted ( )

Returns the current page number formatted as a string.

public

Since
4.2.005 (2008-11-06)
See Also
PaneNo(), formatPageNumber()

Definition at line 15396 of file tcpdf.php.

{
return $this->formatPageNumber($this->PageNo());
}
TCPDF::PieSector (   $xc,
  $yc,
  $r,
  $a,
  $b,
  $style = 'FD',
  $cw = true,
  $o = 90 
)

Draw the sector of a circle.

It can be used for instance to render pie charts.

Parameters
float$xcabscissa of the center.
float$ycordinate of the center.
float$rradius.
float$astart angle (in degrees).
float$bend angle (in degrees).
string$styleStyle of rendering. See the getPathPaintOperator() function for more information.
float$cw,:indicates whether to go clockwise (default: true).
float$o,:origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock). Default: 90.
Author
Maxime Delorme, Nicola Asuni
Since
3.1.000 (2008-06-09) public

Definition at line 16228 of file tcpdf.php.

References $cw.

{
$this->PieSectorXY($xc, $yc, $r, $r, $a, $b, $style, $cw, $o);
}
TCPDF::PieSectorXY (   $xc,
  $yc,
  $rx,
  $ry,
  $a,
  $b,
  $style = 'FD',
  $cw = false,
  $o = 0,
  $nc = 2 
)

Draw the sector of an ellipse.

It can be used for instance to render pie charts.

Parameters
float$xcabscissa of the center.
float$ycordinate of the center.
float$rxthe x-axis radius.
float$rythe y-axis radius.
float$astart angle (in degrees).
float$bend angle (in degrees).
string$styleStyle of rendering. See the getPathPaintOperator() function for more information.
float$cw,:indicates whether to go clockwise.
float$o,:origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock).
integer$ncNumber of curves used to draw a 90 degrees portion of arc.
Author
Maxime Delorme, Nicola Asuni
Since
3.1.000 (2008-06-09) public

Definition at line 16249 of file tcpdf.php.

References $cw, and $d.

{
if ($this->rtl) {
$xc = $this->w - $xc;
}
$op = $this->getPathPaintOperator($style);
if ($op == 'f') {
$line_style = array();
}
if ($cw) {
$d = $b;
$b = 360 - $a + $o;
$a = 360 - $d + $o;
} else {
$b += $o;
$a += $o;
}
$this->_outellipticalarc($xc, $yc, $rx, $ry, 0, $a, $b, true, $nc);
$this->_out($op);
}
TCPDF::pixelsToUnits (   $px)

Converts pixels to User's Units.

Parameters
int$pxpixels
Returns
float value in user's unit public
See Also
setImageScale(), getImageScale()

Definition at line 11398 of file tcpdf.php.

Referenced by Image().

{
return ($px / ($this->imgscale * $this->k));
}

+ Here is the caller graph for this function:

TCPDF::Polycurve (   $x0,
  $y0,
  $segments,
  $style = '',
  $line_style = array(),
  $fill_color = array() 
)

Draws a poly-Bezier curve.

Each Bezier curve segment is a tangent to the line between the control points at either end of the curve.

Parameters
float$x0Abscissa of start point.
float$y0Ordinate of start point.
float$segmentsAn array of bezier descriptions. Format: array(x1, y1, x2, y2, x3, y3).
string$styleStyle of rendering. See the getPathPaintOperator() function for more information.
array$line_styleLine style of curve. Array like for SetLineStyle. Default value: default line style (empty array).
array$fill_colorFill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). public
See Also
SetLineStyle()
Since
3.0008 (2008-05-12)

Definition at line 12766 of file tcpdf.php.

{
if (!(false === strpos($style, 'F')) AND isset($fill_color)) {
$this->SetFillColorArray($fill_color);
}
$op = $this->getPathPaintOperator($style);
if ($op == 'f') {
$line_style = array();
}
if ($line_style) {
$this->SetLineStyle($line_style);
}
$this->_outPoint($x0, $y0);
foreach ($segments as $segment) {
list($x1, $y1, $x2, $y2, $x3, $y3) = $segment;
$this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3);
}
$this->_out($op);
}
TCPDF::Polygon (   $p,
  $style = '',
  $line_style = array(),
  $fill_color = array(),
  $closed = true 
)

Draws a polygon.

Parameters
array$pPoints 0 to ($np - 1). Array with values (x0, y0, x1, y1,..., x(np-1), y(np - 1))
string$styleStyle of rendering. See the getPathPaintOperator() function for more information.
array$line_styleLine style of polygon. Array with keys among the following:
  • all: Line style of all lines. Array like for SetLineStyle.
  • 0 to ($np - 1): Line style of each line. Array like for SetLineStyle.
If a key is not present or is null, not draws the line. Default value is default line style (empty array).
array$fill_colorFill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array).
boolean$closedif true the polygon is closes, otherwise will remain open public
Since
2.1.000 (2008-01-08)

Definition at line 12971 of file tcpdf.php.

{
$nc = count($p); // number of coordinates
$np = $nc / 2; // number of points
if ($closed) {
// close polygon by adding the first 2 points at the end (one line)
for ($i = 0; $i < 4; ++$i) {
$p[$nc + $i] = $p[$i];
}
// copy style for the last added line
if (isset($line_style[0])) {
$line_style[$np] = $line_style[0];
}
$nc += 4;
}
if (!(false === strpos($style, 'F')) AND isset($fill_color)) {
$this->SetFillColorArray($fill_color);
}
$op = $this->getPathPaintOperator($style);
if ($op == 'f') {
$line_style = array();
}
$draw = true;
if ($line_style) {
if (isset($line_style['all'])) {
$this->SetLineStyle($line_style['all']);
} else {
$draw = false;
if ($op == 'B') {
// draw fill
$op = 'f';
$this->_outPoint($p[0], $p[1]);
for ($i = 2; $i < $nc; $i = $i + 2) {
$this->_outLine($p[$i], $p[$i + 1]);
}
$this->_out($op);
}
// draw outline
$this->_outPoint($p[0], $p[1]);
for ($i = 2; $i < $nc; $i = $i + 2) {
$line_num = ($i / 2) - 1;
if (isset($line_style[$line_num])) {
if ($line_style[$line_num] != 0) {
if (is_array($line_style[$line_num])) {
$this->_out('S');
$this->SetLineStyle($line_style[$line_num]);
$this->_outPoint($p[$i - 2], $p[$i - 1]);
$this->_outLine($p[$i], $p[$i + 1]);
$this->_out('S');
$this->_outPoint($p[$i], $p[$i + 1]);
} else {
$this->_outLine($p[$i], $p[$i + 1]);
}
}
} else {
$this->_outLine($p[$i], $p[$i + 1]);
}
}
$this->_out($op);
}
}
if ($draw) {
$this->_outPoint($p[0], $p[1]);
for ($i = 2; $i < $nc; $i = $i + 2) {
$this->_outLine($p[$i], $p[$i + 1]);
}
$this->_out($op);
}
}
TCPDF::PolyLine (   $p,
  $style = '',
  $line_style = array(),
  $fill_color = array() 
)

Draws a polygonal line.

Parameters
array$pPoints 0 to ($np - 1). Array with values (x0, y0, x1, y1,..., x(np-1), y(np - 1))
string$styleStyle of rendering. See the getPathPaintOperator() function for more information.
array$line_styleLine style of polygon. Array with keys among the following:
  • all: Line style of all lines. Array like for SetLineStyle.
  • 0 to ($np - 1): Line style of each line. Array like for SetLineStyle.
If a key is not present or is null, not draws the line. Default value is default line style (empty array).
array$fill_colorFill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array).
boolean$closedif true the polygon is closes, otherwise will remain open public
Since
4.8.003 (2009-09-15)

Definition at line 12952 of file tcpdf.php.

{
$this->Polygon($p, $style, $line_style, $fill_color, false);
}
TCPDF::printTemplate (   $id,
  $x = '',
  $y = '',
  $w = 0,
  $h = 0,
  $align = '',
  $palign = '',
  $fitonpage = false 
)

Print an XObject Template.

You can print an XObject Template inside the currently opened Template. An XObject Template is a PDF block that is a self-contained description of any sequence of graphics objects (including path objects, text objects, and sampled images). An XObject Template may be painted multiple times, either on several pages or at several locations on the same page and produces the same results each time, subject only to the graphics state at the time it is invoked.

Parameters
string$idThe ID of XObject Template to print.
int$xX position in user units (empty string = current x position)
int$yY position in user units (empty string = current y position)
int$wWidth in user units (zero = remaining page width)
int$hHeight in user units (zero = remaining page height)
string$alignIndicates the alignment of the pointer next to template insertion relative to template height. The value can be:
  • T: top-right for LTR or top-left for RTL
  • M: middle-right for LTR or middle-left for RTL
  • B: bottom-right for LTR or bottom-left for RTL
  • N: next line
string$palignAllows to center or align the template on the current line. Possible values are:
  • L : left align
  • C : center
  • R : right align
  • '' : empty string : left for LTR or right for RTL
boolean$fitonpageif true the template is resized to not exceed page dimensions.
Author
Nicola Asuni public
Since
5.8.017 (2010-08-24)
See Also
startTemplate(), endTemplate()

Definition at line 23709 of file tcpdf.php.

References $x, and $y.

{
if (!isset($this->xobjects[$id])) {
$this->Error('The XObject Template \''.$id.'\' doesn\'t exist!');
}
if ($this->inxobj) {
if ($id == $this->xobjid) {
// close current template
$this->endTemplate();
} else {
// use the template as resource for the template currently opened
$this->xobjects[$this->xobjid]['xobjects'][$id] = $this->xobjects[$id];
}
}
// set default values
if ($x === '') {
}
if ($y === '') {
}
// check page for no-write regions and adapt page margins if necessary
$this->checkPageRegions($h, $x, $y);
$ow = $this->xobjects[$id]['w'];
$oh = $this->xobjects[$id]['h'];
// calculate template width and height on document
if (($w <= 0) AND ($h <= 0)) {
$w = $ow;
$h = $oh;
} elseif ($w <= 0) {
$w = $h * $ow / $oh;
} elseif ($h <= 0) {
$h = $w * $oh / $ow;
}
// fit the template on available space
$this->fitBlock($w, $h, $x, $y, $fitonpage);
// set page alignment
$rb_y = $y + $h;
// set alignment
if ($this->rtl) {
if ($palign == 'L') {
} elseif ($palign == 'C') {
$xt = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
} elseif ($palign == 'R') {
$xt = $this->w - $this->rMargin - $w;
} else {
$xt = $x - $w;
}
$rb_x = $xt;
} else {
if ($palign == 'L') {
} elseif ($palign == 'C') {
$xt = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
} elseif ($palign == 'R') {
$xt = $this->w - $this->rMargin - $w;
} else {
$xt = $x;
}
$rb_x = $xt + $w;
}
// print XObject Template + Transformation matrix
$this->StartTransform();
// translate and scale
$sx = ($w / $this->xobjects[$id]['w']);
$sy = ($h / $this->xobjects[$id]['h']);
$tm = array();
$tm[0] = $sx;
$tm[1] = 0;
$tm[2] = 0;
$tm[3] = $sy;
$tm[4] = $xt * $this->k;
$tm[5] = ($this->h - $h - $y) * $this->k;
$this->Transform($tm);
// set object
$this->_out('/'.$id.' Do');
$this->StopTransform();
// add annotations
if (!empty($this->xobjects[$id]['annotations'])) {
foreach ($this->xobjects[$id]['annotations'] as $annot) {
// transform original coordinates
$coordlt = $this->getTransformationMatrixProduct($tm, array(1, 0, 0, 1, ($annot['x'] * $this->k), (-$annot['y'] * $this->k)));
$ax = ($coordlt[4] / $this->k);
$ay = ($this->h - $h - ($coordlt[5] / $this->k));
$coordrb = $this->getTransformationMatrixProduct($tm, array(1, 0, 0, 1, (($annot['x'] + $annot['w']) * $this->k), ((-$annot['y'] - $annot['h']) * $this->k)));
$aw = ($coordrb[4] / $this->k) - $ax;
$ah = ($this->h - $h - ($coordrb[5] / $this->k)) - $ay;
$this->Annotation($ax, $ay, $aw, $ah, $annot['text'], $annot['opt'], $annot['spaces']);
}
}
// set pointer to align the next text/objects
switch($align) {
case 'T': {
$this->y = $y;
$this->x = $rb_x;
break;
}
case 'M': {
$this->y = $y + round($h/2);
$this->x = $rb_x;
break;
}
case 'B': {
$this->y = $rb_y;
$this->x = $rb_x;
break;
}
case 'N': {
$this->SetY($rb_y);
break;
}
default:{
break;
}
}
}
TCPDF::putHtmlListBullet (   $listdepth,
  $listtype = '',
  $size = 10 
)
protected

Output an HTML list bullet or ordered item symbol.

Parameters
int$listdepthlist nesting level
string$listtypetype of list
float$sizecurrent font size protected
Since
4.4.004 (2008-12-10)

Definition at line 21757 of file tcpdf.php.

References $l, and $x.

{
$size /= $this->k;
$fill = '';
$color = $this->fgcolor;
$width = 0;
$textitem = '';
$tmpx = $this->x;
$lspace = $this->GetStringWidth(' ');
if ($listtype == '^') {
// special symbol used for avoid justification of rect bullet
$this->lispacer = '';
return;
} elseif ($listtype == '!') {
// set default list type for unordered list
$deftypes = array('disc', 'circle', 'square');
$listtype = $deftypes[($listdepth - 1) % 3];
} elseif ($listtype == '#') {
// set default list type for ordered list
$listtype = 'decimal';
}
switch ($listtype) {
// unordered types
case 'none': {
break;
}
case 'disc': {
$fill = 'F';
}
case 'circle': {
$fill .= 'D';
$r = $size / 6;
$lspace += (2 * $r);
if ($this->rtl) {
$this->x += $lspace;
} else {
$this->x -= $lspace;
}
$this->Circle(($this->x + $r), ($this->y + ($this->lasth / 2)), $r, 0, 360, $fill, array('color'=>$color), $color, 8);
break;
}
case 'square': {
$l = $size / 3;
$lspace += $l;
if ($this->rtl) {;
$this->x += $lspace;
} else {
$this->x -= $lspace;
}
$this->Rect($this->x, ($this->y + (($this->lasth - $l)/ 2)), $l, $l, 'F', array(), $color);
break;
}
// ordered types
// $this->listcount[$this->listnum];
// $textitem
case '1':
case 'decimal': {
$textitem = $this->listcount[$this->listnum];
break;
}
case 'decimal-leading-zero': {
$textitem = sprintf('%02d', $this->listcount[$this->listnum]);
break;
}
case 'i':
case 'lower-roman': {
$textitem = strtolower($this->intToRoman($this->listcount[$this->listnum]));
break;
}
case 'I':
case 'upper-roman': {
$textitem = $this->intToRoman($this->listcount[$this->listnum]);
break;
}
case 'a':
case 'lower-alpha':
case 'lower-latin': {
$textitem = chr(97 + $this->listcount[$this->listnum] - 1);
break;
}
case 'A':
case 'upper-alpha':
case 'upper-latin': {
$textitem = chr(65 + $this->listcount[$this->listnum] - 1);
break;
}
case 'lower-greek': {
$textitem = $this->unichr(945 + $this->listcount[$this->listnum] - 1);
break;
}
/*
// Types to be implemented (special handling)
case 'hebrew': {
break;
}
case 'armenian': {
break;
}
case 'georgian': {
break;
}
case 'cjk-ideographic': {
break;
}
case 'hiragana': {
break;
}
case 'katakana': {
break;
}
case 'hiragana-iroha': {
break;
}
case 'katakana-iroha': {
break;
}
*/
default: {
$textitem = $this->listcount[$this->listnum];
}
}
if (!$this->empty_string($textitem)) {
// print ordered item
if ($this->rtl) {
$textitem = '.'.$textitem;
} else {
$textitem = $textitem.'.';
}
$lspace += $this->GetStringWidth($textitem);
if ($this->rtl) {
$this->x += $lspace;
} else {
$this->x -= $lspace;
}
$this->Write($this->lasth, $textitem, '', false, '', false, 0, false);
}
$this->x = $tmpx;
$this->lispacer = '^';
}
TCPDF::RadialGradient (   $x,
  $y,
  $w,
  $h,
  $col1 = array(),
  $col2 = array(),
  $coords = array(0.5,0.5,0.5,0.5,1) 
)

Paints a radial colour gradient.

Parameters
float$xabscissa of the top left corner of the rectangle.
float$yordinate of the top left corner of the rectangle.
float$wwidth of the rectangle.
float$hheight of the rectangle.
array$col1first color (Grayscale, RGB or CMYK components).
array$col2second color (Grayscale, RGB or CMYK components).
array$coordsarray of the form (fx, fy, cx, cy, r) where (fx, fy) is the starting point of the gradient with color1, (cx, cy) is the center of the circle with color2, and r is the radius of the circle (see radial_gradient_coords.jpg). (fx, fy) should be inside the circle, otherwise some areas will not be defined.
Author
Andreas Würmser, Nicola Asuni
Since
3.1.000 (2008-06-09) public

Definition at line 15809 of file tcpdf.php.

References $x, and $y.

{
$this->Clip($x, $y, $w, $h);
$this->Gradient(3, $coords, array(array('color' => $col1, 'offset' => 0, 'exponent' => 1), array('color' => $col2, 'offset' => 1, 'exponent' => 1)), array(), false);
}
TCPDF::RadioButton (   $name,
  $w,
  $prop = array(),
  $opt = array(),
  $onvalue = 'On',
  $checked = false,
  $x = '',
  $y = '',
  $js = false 
)

Creates a RadioButton field.

Parameters
string$namefield name
int$wwidth
array$propjavascript field properties. Possible values are described on official Javascript for Acrobat API reference.
array$optannotation parameters. Possible values are described on official PDF32000_2008 reference.
string$onvaluevalue to be returned if selected.
boolean$checkeddefine the initial state.
float$xAbscissa of the upper-left corner of the rectangle
float$yOrdinate of the upper-left corner of the rectangle
boolean$jsif true put the field using JavaScript (requires Acrobat Writer to be rendered). public
Author
Nicola Asuni
Since
4.8.000 (2009-09-07)

Definition at line 14647 of file tcpdf.php.

References $name, $x, $y, and n.

{
if ($x === '') {
}
if ($y === '') {
}
// check page for no-write regions and adapt page margins if necessary
$this->checkPageRegions($w, $x, $y);
if ($js) {
$this->_addfield('radiobutton', $name, $x, $y, $w, $w, $prop);
return;
}
if ($this->empty_string($onvalue)) {
$onvalue = 'On';
}
if ($checked) {
$defval = $onvalue;
} else {
$defval = 'Off';
}
// set data for parent group
if (!isset($this->radiobutton_groups[$this->page])) {
$this->radiobutton_groups[$this->page] = array();
}
if (!isset($this->radiobutton_groups[$this->page][$name])) {
$this->radiobutton_groups[$this->page][$name] = array();
$this->radiobutton_groups[$this->page][$name]['n'] = $this->n;
$this->radio_groups[] = $this->n;
$kid = ($this->n + 2);
} else {
$kid = ($this->n + 1);
}
// save object ID to be added on Kids entry on parent object
$this->radiobutton_groups[$this->page][$name][] = array('kid' => $kid, 'def' => $defval);
// get default style
$prop = array_merge($this->getFormDefaultProp(), $prop);
$prop['NoToggleToOff'] = 'true';
$prop['Radio'] = 'true';
$prop['borderStyle'] = 'inset';
// get annotation data
$popt = $this->getAnnotOptFromJSProp($prop);
// set additional default values
$font = 'zapfdingbats';
$this->AddFont($font);
$tmpfont = $this->getFontBuffer($font);
$this->annotation_fonts[$tmpfont['fontkey']] = $tmpfont['i'];
$fontstyle = sprintf('/F%d %.2F Tf %s', $tmpfont['i'], $this->FontSizePt, $this->TextColor);
$popt['da'] = $fontstyle;
$popt['ap'] = array();
$popt['ap']['n'] = array();
$popt['ap']['n'][$onvalue] = 'q BT '.$fontstyle.' 0 0 Td (8) Tj ET Q';
$popt['ap']['n']['Off'] = 'q BT '.$fontstyle.' 0 0 Td (8) Tj ET Q';
if (!isset($popt['mk'])) {
$popt['mk'] = array();
}
$popt['mk']['ca'] = '(l)';
// merge options
$opt = array_merge($popt, $opt);
// set remaining annotation data
$opt['Subtype'] = 'Widget';
$opt['ft'] = 'Btn';
if ($checked) {
$opt['v'] = array('/'.$onvalue);
$opt['as'] = $onvalue;
} else {
$opt['as'] = 'Off';
}
$this->Annotation($x, $y, $w, $w, $name, $opt, 0);
if ($this->rtl) {
$this->x -= $w;
} else {
$this->x += $w;
}
}
TCPDF::readDiskCache (   $filename)
protected

Read data from a temporary file on filesystem.

Parameters
string$filefile name
Returns
mixed retrieved data protected
Since
4.5.000 (2008-12-31)

Definition at line 22065 of file tcpdf.php.

References $filename.

{
return file_get_contents($filename);
}
TCPDF::Rect (   $x,
  $y,
  $w,
  $h,
  $style = '',
  $border_style = array(),
  $fill_color = array() 
)

Draws a rectangle.

Parameters
float$xAbscissa of upper-left corner (or upper-right corner for RTL language).
float$yOrdinate of upper-left corner (or upper-right corner for RTL language).
float$wWidth.
float$hHeight.
string$styleStyle of rendering. See the getPathPaintOperator() function for more information.
array$border_styleBorder style of rectangle. Array with keys among the following:
  • all: Line style of all borders. Array like for SetLineStyle.
  • L, T, R, B or combinations: Line style of left, top, right or bottom border. Array like for SetLineStyle.
If a key is not present or is null, not draws the border. Default value: default line style (empty array).
array$border_styleBorder style of rectangle. Array like for SetLineStyle. Default value: default line style (empty array).
array$fill_colorFill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). public
Since
1.0
See Also
SetLineStyle()

Definition at line 12684 of file tcpdf.php.

References $x, and $y.

{
if (!(false === strpos($style, 'F')) AND !empty($fill_color)) {
$this->SetFillColorArray($fill_color);
}
$op = $this->getPathPaintOperator($style);
if ((!$border_style) OR (isset($border_style['all']))) {
if (isset($border_style['all']) AND $border_style['all']) {
$this->SetLineStyle($border_style['all']);
$border_style = array();
}
}
$this->_outRect($x, $y, $w, $h, $op);
if ($border_style) {
$border_style2 = array();
foreach ($border_style as $line => $value) {
$length = strlen($line);
for ($i = 0; $i < $length; ++$i) {
$border_style2[$line[$i]] = $value;
}
}
$border_style = $border_style2;
if (isset($border_style['L']) AND $border_style['L']) {
$this->Line($x, $y, $x, $y + $h, $border_style['L']);
}
if (isset($border_style['T']) AND $border_style['T']) {
$this->Line($x, $y, $x + $w, $y, $border_style['T']);
}
if (isset($border_style['R']) AND $border_style['R']) {
$this->Line($x + $w, $y, $x + $w, $y + $h, $border_style['R']);
}
if (isset($border_style['B']) AND $border_style['B']) {
$this->Line($x, $y + $h, $x + $w, $y + $h, $border_style['B']);
}
}
}
TCPDF::registrationMark (   $x,
  $y,
  $r,
  $double = false,
  $cola = array(0,0,0),
  $colb = array(255,255,255) 
)

Paints a registration mark.

Parameters
float$xabscissa of the registration mark center.
float$yordinate of the registration mark center.
float$rradius of the crop mark.
boolean$doubleif true print two concentric crop marks.
array$colacrop mark color (default black).
array$colbsecond crop mark color.
Author
Nicola Asuni
Since
4.9.000 (2010-03-26) public

Definition at line 15760 of file tcpdf.php.

References $x, and $y.

{
$line_style = array('width' => (0.5 / $this->k), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $cola);
$this->SetFillColorArray($cola);
$this->PieSector($x, $y, $r, 90, 180, 'F');
$this->PieSector($x, $y, $r, 270, 360, 'F');
$this->Circle($x, $y, $r, 0, 360, 'C', $line_style, array(), 8);
if ($double) {
$r2 = $r * 0.5;
$this->SetFillColorArray($colb);
$this->PieSector($x, $y, $r2, 90, 180, 'F');
$this->PieSector($x, $y, $r2, 270, 360, 'F');
$this->SetFillColorArray($cola);
$this->PieSector($x, $y, $r2, 0, 90, 'F');
$this->PieSector($x, $y, $r2, 180, 270, 'F');
$this->Circle($x, $y, $r2, 0, 360, 'C', $line_style, array(), 8);
}
}
TCPDF::RegularPolygon (   $x0,
  $y0,
  $r,
  $ns,
  $angle = 0,
  $draw_circle = false,
  $style = '',
  $line_style = array(),
  $fill_color = array(),
  $circle_style = '',
  $circle_outLine_style = array(),
  $circle_fill_color = array() 
)

Draws a regular polygon.

Parameters
float$x0Abscissa of center point.
float$y0Ordinate of center point.
float$r,:Radius of inscribed circle.
integer$nsNumber of sides.
float$angleAngle oriented (anti-clockwise). Default value: 0.
boolean$draw_circleDraw inscribed circle or not. Default value: false.
string$styleStyle of rendering. See the getPathPaintOperator() function for more information.
array$line_styleLine style of polygon sides. Array with keys among the following:
  • all: Line style of all sides. Array like for SetLineStyle.
  • 0 to ($ns - 1): Line style of each side. Array like for SetLineStyle.
If a key is not present or is null, not draws the side. Default value is default line style (empty array).
array$fill_colorFill color. Format: array(red, green, blue). Default value: default color (empty array).
string$circle_styleStyle of rendering of inscribed circle (if draws). Possible values are:
  • D or empty string: Draw (default).
  • F: Fill.
  • DF or FD: Draw and fill.
  • CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).
  • CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).
array$circle_outLine_styleLine style of inscribed circle (if draws). Array like for SetLineStyle. Default value: default line style (empty array).
array$circle_fill_colorFill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array). public
Since
2.1.000 (2008-01-08)

Definition at line 13069 of file tcpdf.php.

{
if (3 > $ns) {
$ns = 3;
}
if ($draw_circle) {
$this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color);
}
$p = array();
for ($i = 0; $i < $ns; ++$i) {
$a = $angle + ($i * 360 / $ns);
$a_rad = deg2rad((float) $a);
$p[] = $x0 + ($r * sin($a_rad));
$p[] = $y0 + ($r * cos($a_rad));
}
$this->Polygon($p, $style, $line_style, $fill_color);
}
TCPDF::removePageRegion (   $key)

Remove a single no-write region.

Parameters
int$keyregion key
Author
Nicola Asuni public
Since
5.9.003 (2010-10-13)
See Also
setPageRegions(), getPageRegions()

Definition at line 23932 of file tcpdf.php.

{
if (isset($this->page_regions[$key])) {
unset($this->page_regions[$key]);
}
}
TCPDF::removeSHY (   $txt = '')

Removes SHY characters from text.

Unicode Data:

  • Name : SOFT HYPHEN, commonly abbreviated as SHY
  • HTML Entity (decimal): &#173;
  • HTML Entity (hex): &#xad;
  • HTML Entity (named): &shy;
  • How to type in Microsoft Windows: [Alt +00AD] or [Alt 0173]
  • UTF-8 (hex): 0xC2 0xAD (c2ad)
  • UTF-8 character: chr(194).chr(173)
Parameters
string$txtinput string
Returns
string without SHY characters. public
Since
(4.5.019) 2009-02-28

Definition at line 5261 of file tcpdf.php.

Referenced by getCellCode().

{
$txt = preg_replace('/([\\xc2]{1}[\\xad]{1})/', '', $txt);
if (!$this->isunicode) {
$txt = preg_replace('/([\\xad]{1})/', '', $txt);
}
return $txt;
}

+ Here is the caller graph for this function:

TCPDF::replaceBuffer (   $data)
protected

Replace the buffer content.

Parameters
string$datadata protected
Since
5.5.000 (2010-06-22)

Definition at line 22093 of file tcpdf.php.

References $data.

{
$this->bufferlen = strlen($data);
if ($this->diskcache) {
if (!isset($this->buffer) OR $this->empty_string($this->buffer)) {
$this->buffer = $this->getObjFilename('buffer');
}
$this->writeDiskCache($this->buffer, $data, false);
} else {
$this->buffer = $data;
}
}
TCPDF::resetLastH ( )

Reset the last cell height.

public

Since
5.9.000 (2010-10-03)

Definition at line 3043 of file tcpdf.php.

References $cell_height_ratio.

Referenced by getNumLines(), and MultiCell().

{
$this->lasth = ($this->FontSize * $this->cell_height_ratio) + $this->cell_padding['T'] + $this->cell_padding['B'];
}

+ Here is the caller graph for this function:

TCPDF::revstrpos (   $haystack,
  $needle,
  $offset = 0 
)

Find position of last occurrence of a substring in a string.

Parameters
string$haystackThe string to search in.
string$needlesubstring to search.
int$offsetMay be specified to begin searching an arbitrary number of characters into the string.
Returns
Returns the position where the needle exists. Returns FALSE if the needle was not found. public
Since
4.8.038 (2010-03-13)

Definition at line 23011 of file tcpdf.php.

References $pos.

{
$length = strlen($haystack);
$offset = ($offset > 0)?($length - $offset):abs($offset);
$pos = strpos(strrev($haystack), strrev($needle), $offset);
return ($pos === false)?false:($length - $pos - strlen($needle));
}
TCPDF::rfread (   $handle,
  $length 
)
protected

Binary-safe and URL-safe file read.

Reads up to length bytes from the file pointer referenced by handle. Reading stops as soon as one of the following conditions is met: length bytes have been read; EOF (end of file) is reached.

Parameters
resource$handle
int$length
Returns
Returns the read string or FALSE in case of error.
Author
Nicola Asuni protected
Since
4.5.027 (2009-03-16)

Definition at line 7566 of file tcpdf.php.

References $data, $handle, and $rest.

Referenced by _parsepng().

{
$data = fread($handle, $length);
if ($data === false) {
return false;
}
$rest = $length - strlen($data);
if ($rest > 0) {
$data .= $this->rfread($handle, $rest);
}
return $data;
}

+ Here is the caller graph for this function:

TCPDF::rollbackTransaction (   $self = false)

This method allows to undo the latest transaction by returning the latest saved TCPDF object with startTransaction().

Parameters
boolean$selfif true restores current class object to previous state without the need of reassignment via the returned value.
Returns
TCPDF object. public
Since
4.5.029 (2009-03-19)

Definition at line 22958 of file tcpdf.php.

References $file, and $handle.

{
if (isset($this->objcopy)) {
if (isset($this->objcopy->diskcache) AND $this->objcopy->diskcache) {
// truncate files to previous values
foreach ($this->objcopy->cache_file_length as $file => $length) {
$file = substr($file, 1);
$handle = fopen($file, 'r+');
ftruncate($handle, $length);
}
}
$this->_destroy(true, true);
if ($self) {
$objvars = get_object_vars($this->objcopy);
foreach ($objvars as $key => $value) {
$this->$key = $value;
}
}
}
return $this;
}
TCPDF::Rotate (   $angle,
  $x = '',
  $y = '' 
)

Rotate object.

Parameters
float$angleangle in degrees for counter-clockwise rotation
int$xabscissa of the rotation center. Default is current x position
int$yordinate of the rotation center. Default is current y position public
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12346 of file tcpdf.php.

References $x, and $y.

{
if ($x === '') {
}
if ($y === '') {
}
$y = ($this->h - $y) * $this->k;
//calculate elements of transformation matrix
$tm = array();
$tm[0] = cos(deg2rad($angle));
$tm[1] = sin(deg2rad($angle));
$tm[2] = -$tm[1];
$tm[3] = $tm[0];
$tm[4] = $x + ($tm[1] * $y) - ($tm[0] * $x);
$tm[5] = $y - ($tm[0] * $y) - ($tm[1] * $x);
//rotate the coordinate system around ($x,$y)
$this->Transform($tm);
}
TCPDF::RoundedRect (   $x,
  $y,
  $w,
  $h,
  $r,
  $round_corner = '1111',
  $style = '',
  $border_style = array(),
  $fill_color = array() 
)

Draws a rounded rectangle.

Parameters
float$xAbscissa of upper-left corner.
float$yOrdinate of upper-left corner.
float$wWidth.
float$hHeight.
float$rthe radius of the circle used to round off the corners of the rectangle.
string$round_cornerDraws rounded corner or not. String with a 0 (not rounded i-corner) or 1 (rounded i-corner) in i-position. Positions are, in order and begin to 0: top left, top right, bottom right and bottom left. Default value: all rounded corner ("1111").
string$styleStyle of rendering. See the getPathPaintOperator() function for more information.
array$border_styleBorder style of rectangle. Array like for SetLineStyle. Default value: default line style (empty array).
array$fill_colorFill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). public
Since
2.1.000 (2008-01-08)

Definition at line 13159 of file tcpdf.php.

References $x, and $y.

{
$this->RoundedRectXY($x, $y, $w, $h, $r, $r, $round_corner, $style, $border_style, $fill_color);
}
TCPDF::RoundedRectXY (   $x,
  $y,
  $w,
  $h,
  $rx,
  $ry,
  $round_corner = '1111',
  $style = '',
  $border_style = array(),
  $fill_color = array() 
)

Draws a rounded rectangle.

Parameters
float$xAbscissa of upper-left corner.
float$yOrdinate of upper-left corner.
float$wWidth.
float$hHeight.
float$rxthe x-axis radius of the ellipse used to round off the corners of the rectangle.
float$rythe y-axis radius of the ellipse used to round off the corners of the rectangle.
string$round_cornerDraws rounded corner or not. String with a 0 (not rounded i-corner) or 1 (rounded i-corner) in i-position. Positions are, in order and begin to 0: top left, top right, bottom right and bottom left. Default value: all rounded corner ("1111").
string$styleStyle of rendering. See the getPathPaintOperator() function for more information.
array$border_styleBorder style of rectangle. Array like for SetLineStyle. Default value: default line style (empty array).
array$fill_colorFill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). public
Since
4.9.019 (2010-04-22)

Definition at line 13178 of file tcpdf.php.

References $x, and $y.

{
if (($round_corner == '0000') OR (($rx == $ry) AND ($rx == 0))) {
// Not rounded
$this->Rect($x, $y, $w, $h, $style, $border_style, $fill_color);
return;
}
// Rounded
if (!(false === strpos($style, 'F')) AND isset($fill_color)) {
$this->SetFillColorArray($fill_color);
}
$op = $this->getPathPaintOperator($style);
if ($op == 'f') {
$border_style = array();
}
if ($border_style) {
$this->SetLineStyle($border_style);
}
$MyArc = 4 / 3 * (sqrt(2) - 1);
$this->_outPoint($x + $rx, $y);
$xc = $x + $w - $rx;
$yc = $y + $ry;
$this->_outLine($xc, $y);
if ($round_corner[0]) {
$this->_outCurve($xc + ($rx * $MyArc), $yc - $ry, $xc + $rx, $yc - ($ry * $MyArc), $xc + $rx, $yc);
} else {
$this->_outLine($x + $w, $y);
}
$xc = $x + $w - $rx;
$yc = $y + $h - $ry;
$this->_outLine($x + $w, $yc);
if ($round_corner[1]) {
$this->_outCurve($xc + $rx, $yc + ($ry * $MyArc), $xc + ($rx * $MyArc), $yc + $ry, $xc, $yc + $ry);
} else {
$this->_outLine($x + $w, $y + $h);
}
$xc = $x + $rx;
$yc = $y + $h - $ry;
$this->_outLine($xc, $y + $h);
if ($round_corner[2]) {
$this->_outCurve($xc - ($rx * $MyArc), $yc + $ry, $xc - $rx, $yc + ($ry * $MyArc), $xc - $rx, $yc);
} else {
$this->_outLine($x, $y + $h);
}
$xc = $x + $rx;
$yc = $y + $ry;
$this->_outLine($x, $yc);
if ($round_corner[3]) {
$this->_outCurve($xc - $rx, $yc - ($ry * $MyArc), $xc - ($rx * $MyArc), $yc - $ry, $xc, $yc - $ry);
} else {
$this->_outLine($x, $y);
$this->_outLine($x + $rx, $y);
}
$this->_out($op);
}
TCPDF::Scale (   $s_x,
  $s_y,
  $x = '',
  $y = '' 
)

Vertical and horizontal non-proportional Scaling.

Parameters
float$s_xscaling factor for width as percent. 0 is not allowed.
float$s_yscaling factor for height as percent. 0 is not allowed.
int$xabscissa of the scaling center. Default is current x position
int$yordinate of the scaling center. Default is current y position public
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12220 of file tcpdf.php.

References $x, and $y.

{
if ($x === '') {
}
if ($y === '') {
}
if (($s_x == 0) OR ($s_y == 0)) {
$this->Error('Please do not use values equal to zero for scaling');
}
$y = ($this->h - $y) * $this->k;
//calculate elements of transformation matrix
$s_x /= 100;
$s_y /= 100;
$tm = array();
$tm[0] = $s_x;
$tm[1] = 0;
$tm[2] = 0;
$tm[3] = $s_y;
$tm[4] = $x * (1 - $s_x);
$tm[5] = $y * (1 - $s_y);
//scale the coordinate system
$this->Transform($tm);
}
TCPDF::ScaleX (   $s_x,
  $x = '',
  $y = '' 
)

Horizontal Scaling.

Parameters
float$s_xscaling factor for width as percent. 0 is not allowed.
int$xabscissa of the scaling center. Default is current x position
int$yordinate of the scaling center. Default is current y position public
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12180 of file tcpdf.php.

References $x, and $y.

{
$this->Scale($s_x, 100, $x, $y);
}
TCPDF::ScaleXY (   $s,
  $x = '',
  $y = '' 
)

Vertical and horizontal proportional Scaling.

Parameters
float$sscaling factor for width and height as percent. 0 is not allowed.
int$xabscissa of the scaling center. Default is current x position
int$yordinate of the scaling center. Default is current y position public
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12206 of file tcpdf.php.

References $x, and $y.

{
$this->Scale($s, $s, $x, $y);
}
TCPDF::ScaleY (   $s_y,
  $x = '',
  $y = '' 
)

Vertical Scaling.

Parameters
float$s_yscaling factor for height as percent. 0 is not allowed.
int$xabscissa of the scaling center. Default is current x position
int$yordinate of the scaling center. Default is current y position public
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12193 of file tcpdf.php.

References $x, and $y.

{
$this->Scale(100, $s_y, $x, $y);
}
TCPDF::segSVGContentHandler (   $parser,
  $data 
)
protected

Sets the character data handler function for the XML parser.

Parameters
resource$parserThe first parameter, parser, is a reference to the XML parser calling the handler.
string$dataThe second parameter, data, contains the character data as a string.
Author
Nicola Asuni
Since
5.0.000 (2010-05-02) protected

Definition at line 25619 of file tcpdf.php.

References $data.

{
$this->svgtext .= $data;
}
TCPDF::selectColumn (   $col = '')

Set position at a given column.

Parameters
int$colcolumn number (from 0 to getNumberOfColumns()-1); empty string = current column. public
Since
4.9.001 (2010-03-28)

Definition at line 23074 of file tcpdf.php.

References $x, and $y.

Referenced by AcceptPageBreak(), and MultiCell().

{
if (is_string($col)) {
} elseif($col >= $this->num_columns) {
$col = 0;
}
$xshift = 0;
$enable_thead = false;
if ($this->num_columns > 1) {
if ($col != $this->current_column) {
// move Y pointer at the top of the column
if ($this->column_start_page == $this->page) {
$this->y = $this->columns[$col]['y'];
} else {
$this->y = $this->tMargin;
}
// Avoid to write table headers more than once
if (($this->page > $this->maxselcol['page']) OR (($this->page == $this->maxselcol['page']) AND ($col > $this->maxselcol['column']))) {
$enable_thead = true;
$this->maxselcol['page'] = $this->page;
$this->maxselcol['column'] = $col;
}
}
$xshift = $this->colxshift;
// set X position of the current column by case
$listindent = ($this->listindentlevel * $this->listindent);
$colpos = ($col * ($this->columns[$col]['w'] + $this->columns[$col]['s']));
if ($this->rtl) {
$x = $this->w - $this->original_rMargin - $colpos;
$this->rMargin = ($this->w - $x + $listindent);
$this->lMargin = ($x - $this->columns[$col]['w']);
$this->x = $x - $listindent;
} else {
$x = $this->original_lMargin + $colpos;
$this->lMargin = ($x + $listindent);
$this->rMargin = ($this->w - $x - $this->columns[$col]['w']);
$this->x = $x + $listindent;
}
$this->columns[$col]['x'] = $x;
}
$this->current_column = $col;
// fix for HTML mode
$this->newline = true;
// print HTML table header (if any)
if ((!$this->empty_string($this->thead)) AND (!$this->inthead)) {
if ($enable_thead) {
// print table header
$this->writeHTML($this->thead, false, false, false, false, '');
$this->y += $xshift['s'];
// store end of header position
if (!isset($this->columns[$col]['th'])) {
$this->columns[$col]['th'] = array();
}
$this->columns[$col]['th']['\''.$this->page.'\''] = $this->y;
$this->lasth = 0;
} elseif (isset($this->columns[$col]['th']['\''.$this->page.'\''])) {
$this->y = $this->columns[$col]['th']['\''.$this->page.'\''];
}
}
// account for an html table cell over multiple columns
if ($this->rtl) {
$this->rMargin += $xshift['x'];
$this->x -= ($xshift['x'] + $xshift['p']);
} else {
$this->lMargin += $xshift['x'];
$this->x += $xshift['x'] + $xshift['p'];
}
}

+ Here is the caller graph for this function:

TCPDF::serializeTCPDFtagParameters (   $pararray)

Serialize an array of parameters to be used with TCPDF tag in HTML code.

Parameters
array$pararrayparameters array
Returns
sting containing serialized data public
Since
4.9.006 (2010-04-02)

Definition at line 23170 of file tcpdf.php.

{
return urlencode(serialize($pararray));
}
TCPDF::set_mqr (   $mqr)

Sets the current active configuration setting of magic_quotes_runtime (if the set_magic_quotes_runtime function exist)

Parameters
boolean$mqrFALSE for off, TRUE for on.
Since
4.6.025 (2009-08-17)

Definition at line 7343 of file tcpdf.php.

Referenced by Image().

{
if(!defined('PHP_VERSION_ID')) {
$version = PHP_VERSION;
define('PHP_VERSION_ID', (($version{0} * 10000) + ($version{2} * 100) + $version{4}));
}
if (PHP_VERSION_ID < 50300) {
@set_magic_quotes_runtime($mqr);
}
}

+ Here is the caller graph for this function:

TCPDF::setAlpha (   $alpha,
  $bm = 'Normal' 
)

Set alpha for stroking (CA) and non-stroking (ca) operations.

Parameters
float$alphareal value from 0 (transparent) to 1 (opaque)
string$bmblend mode, one of the following: Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity public
Since
3.0.000 (2008-03-27)

Definition at line 15509 of file tcpdf.php.

{
$gs = $this->addExtGState(array('ca' => $alpha, 'CA' => $alpha, 'BM' => '/'.$bm, 'AIS' => 'false'));
$this->setExtGState($gs);
}
TCPDF::SetAuthor (   $author)

Defines the author of the document.

Parameters
string$authorThe name of the author. public
Since
1.2
See Also
SetCreator(), SetKeywords(), SetSubject(), SetTitle()

Definition at line 3526 of file tcpdf.php.

References $author.

{
//Author of document
$this->author = $author;
}
TCPDF::SetAutoPageBreak (   $auto,
  $margin = 0 
)

Enables or disables the automatic page breaking mode.

When enabling, the second parameter is the distance from the bottom of the page that defines the triggering limit. By default, the mode is on and the margin is 2 cm.

Parameters
boolean$autoBoolean indicating if mode should be on or off.
float$marginDistance from the bottom of the page. public
Since
1.0
See Also
Cell(), MultiCell(), AcceptPageBreak()

Definition at line 3393 of file tcpdf.php.

Referenced by __construct(), Close(), setPage(), and setPageOrientation().

{
//Set auto page break mode and triggering margin
$this->AutoPageBreak = $auto;
$this->bMargin = $margin;
$this->PageBreakTrigger = $this->h - $margin;
}

+ Here is the caller graph for this function:

TCPDF::setBarcode (   $bc = '')

Set document barcode.

Parameters
string$bcbarcode public

Definition at line 16548 of file tcpdf.php.

{
$this->barcode = $bc;
}
TCPDF::SetBooklet (   $booklet = true,
  $inner = -1,
  $outer = -1 
)

Set the booklet mode for double-sided pages.

Parameters
boolean$booklettrue set the booklet mode on, false otherwise.
float$innerInner page margin.
float$outerOuter page margin. public
Since
4.2.000 (2008-10-29)

Definition at line 21527 of file tcpdf.php.

{
$this->booklet = $booklet;
if ($inner >= 0) {
$this->lMargin = $inner;
}
if ($outer >= 0) {
$this->rMargin = $outer;
}
}
TCPDF::setBuffer (   $data)
protected

Set buffer content (always append data).

Parameters
string$datadata protected
Since
4.5.000 (2009-01-02)

Definition at line 22075 of file tcpdf.php.

References $data.

{
$this->bufferlen += strlen($data);
if ($this->diskcache) {
if (!isset($this->buffer) OR $this->empty_string($this->buffer)) {
$this->buffer = $this->getObjFilename('buffer');
}
$this->writeDiskCache($this->buffer, $data, true);
} else {
$this->buffer .= $data;
}
}
TCPDF::setCellHeightRatio (   $h)

Set the height of the cell (line height) respect the font height.

Parameters
int$hcell proportion respect font height (typical value = 1.25). public
Since
3.0.014 (2008-06-04)

Definition at line 15543 of file tcpdf.php.

{
$this->cell_height_ratio = $h;
}
TCPDF::setCellMargins (   $left = '',
  $top = '',
  $right = '',
  $bottom = '' 
)

Set the internal Cell margins.

Parameters
float$leftleft margin
float$toptop margin
float$rightright margin
float$bottombottom margin public
Since
5.9.000 (2010-10-03)
See Also
getCellMargins()

Definition at line 3285 of file tcpdf.php.

Referenced by __construct(), and MultiCell().

{
if (($left !== '') AND ($left >= 0)) {
$this->cell_margin['L'] = $left;
}
if (($top !== '') AND ($top >= 0)) {
$this->cell_margin['T'] = $top;
}
if (($right !== '') AND ($right >= 0)) {
$this->cell_margin['R'] = $right;
}
if (($bottom !== '') AND ($bottom >= 0)) {
$this->cell_margin['B'] = $bottom;
}
}

+ Here is the caller graph for this function:

TCPDF::SetCellPadding (   $pad)

Set the same internal Cell padding for top, right, bottom, left-.

Parameters
float$padinternal padding. public
Since
2.1.000 (2008-01-09)
See Also
getCellPaddings(), setCellPaddings()

Definition at line 3230 of file tcpdf.php.

Referenced by setFooter(), setHeader(), and Write().

{
if ($pad >= 0) {
$this->cell_padding['L'] = $pad;
$this->cell_padding['T'] = $pad;
$this->cell_padding['R'] = $pad;
$this->cell_padding['B'] = $pad;
}
}

+ Here is the caller graph for this function:

TCPDF::setCellPaddings (   $left = '',
  $top = '',
  $right = '',
  $bottom = '' 
)

Set the internal Cell paddings.

Parameters
float$leftleft padding
float$toptop padding
float$rightright padding
float$bottombottom padding public
Since
5.9.000 (2010-10-03)
See Also
getCellPaddings(), SetCellPadding()

Definition at line 3249 of file tcpdf.php.

Referenced by __construct().

{
if (($left !== '') AND ($left >= 0)) {
$this->cell_padding['L'] = $left;
}
if (($top !== '') AND ($top >= 0)) {
$this->cell_padding['T'] = $top;
}
if (($right !== '') AND ($right >= 0)) {
$this->cell_padding['R'] = $right;
}
if (($bottom !== '') AND ($bottom >= 0)) {
$this->cell_padding['B'] = $bottom;
}
}

+ Here is the caller graph for this function:

TCPDF::setColumnsArray (   $columns)

Set columns array.

Each column is represented by and array with the following keys: (w = width, s = space between columns, y = column top position).

Parameters
array$columnspublic
Since
4.9.001 (2010-03-28)

Definition at line 23061 of file tcpdf.php.

{
$this->columns = $columns;
$this->num_columns = count($columns);
$this->current_column = 0;
$this->column_start_page = $this->page;
}
TCPDF::SetCompression (   $compress)

Activates or deactivates page compression.

When activated, the internal representation of each page is compressed, which leads to a compression ratio of about 2 for the resulting document. Compression is on by default. Note: the Zlib extension is required for this feature. If not present, compression will be turned off.

Parameters
boolean$compressBoolean indicating if compression must be enabled. public
Since
1.4

Definition at line 3486 of file tcpdf.php.

References $compress.

Referenced by __construct().

{
//Set page compression
if (function_exists('gzcompress')) {
$this->compress = $compress ? true : false;
} else {
$this->compress = false;
}
}

+ Here is the caller graph for this function:

TCPDF::setContentMark (   $page = 0)
protected

Set start-writing mark on selected page.

Borders and fills are always created after content and inserted on the position marked by this method.

Parameters
int$pagepage number (default is the current page) protected
Since
4.6.021 (2009-07-20)

Definition at line 3847 of file tcpdf.php.

References $page.

Referenced by MultiCell(), and setPageMark().

{
if ($page <= 0) {
}
if (isset($this->footerlen[$page])) {
$this->cntmrk[$page] = $this->pagelen[$page] - $this->footerlen[$page];
} else {
$this->cntmrk[$page] = $this->pagelen[$page];
}
}

+ Here is the caller graph for this function:

TCPDF::SetCreator (   $creator)

Defines the creator of the document.

This is typically the name of the application that generates the PDF.

Parameters
string$creatorThe name of the creator. public
Since
1.2
See Also
SetAuthor(), SetKeywords(), SetSubject(), SetTitle()

Definition at line 3550 of file tcpdf.php.

References $creator.

{
//Creator of document
$this->creator = $creator;
}
TCPDF::SetDefaultMonospacedFont (   $font)

Defines the default monospaced font.

Parameters
string$fontFont name. public
Since
4.5.025

Definition at line 4964 of file tcpdf.php.

{
$this->default_monospaced_font = $font;
}
TCPDF::setDefaultTableColumns (   $cols = 4)

Set the default number of columns in a row for HTML tables.

Parameters
int$colsnumber of columns public
Since
3.0.014 (2008-06-04)

Definition at line 15533 of file tcpdf.php.

{
$this->default_table_columns = intval($cols);
}
TCPDF::SetDisplayMode (   $zoom,
  $layout = 'SinglePage',
  $mode = 'UseNone' 
)

Defines the way the document is to be displayed by the viewer.

Parameters
mixed$zoomThe zoom to use. It can be one of the following string values or a number indicating the zooming factor to use.
  • fullpage: displays the entire page on screen
  • fullwidth: uses maximum width of window
  • real: uses real size (equivalent to 100% zoom)
  • default: uses viewer default mode
string$layoutThe page layout. Possible values are:
  • SinglePage Display one page at a time
  • OneColumn Display the pages in one column
  • TwoColumnLeft Display the pages in two columns, with odd-numbered pages on the left
  • TwoColumnRight Display the pages in two columns, with odd-numbered pages on the right
  • TwoPageLeft (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the left
  • TwoPageRight (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the right
string$modeA name object specifying how the document should be displayed when opened:
  • UseNone Neither document outline nor thumbnail images visible
  • UseOutlines Document outline visible
  • UseThumbs Thumbnail images visible
  • FullScreen Full-screen mode, with no menu bar, window controls, or any other window visible
  • UseOC (PDF 1.5) Optional content group panel visible
  • UseAttachments (PDF 1.6) Attachments panel visible
public
Since
1.2

Definition at line 3408 of file tcpdf.php.

References Error().

Referenced by __construct().

{
//Set display mode in viewer
if (($zoom == 'fullpage') OR ($zoom == 'fullwidth') OR ($zoom == 'real') OR ($zoom == 'default') OR (!is_string($zoom))) {
$this->ZoomMode = $zoom;
} else {
$this->Error('Incorrect zoom display mode: '.$zoom);
}
switch ($layout) {
case 'default':
case 'single':
case 'SinglePage': {
$this->LayoutMode = 'SinglePage';
break;
}
case 'continuous':
case 'OneColumn': {
$this->LayoutMode = 'OneColumn';
break;
}
case 'two':
case 'TwoColumnLeft': {
$this->LayoutMode = 'TwoColumnLeft';
break;
}
case 'TwoColumnRight': {
$this->LayoutMode = 'TwoColumnRight';
break;
}
case 'TwoPageLeft': {
$this->LayoutMode = 'TwoPageLeft';
break;
}
case 'TwoPageRight': {
$this->LayoutMode = 'TwoPageRight';
break;
}
default: {
$this->LayoutMode = 'SinglePage';
}
}
switch ($mode) {
case 'UseNone': {
$this->PageMode = 'UseNone';
break;
}
case 'UseOutlines': {
$this->PageMode = 'UseOutlines';
break;
}
case 'UseThumbs': {
$this->PageMode = 'UseThumbs';
break;
}
case 'FullScreen': {
$this->PageMode = 'FullScreen';
break;
}
case 'UseOC': {
$this->PageMode = 'UseOC';
break;
}
case '': {
$this->PageMode = 'UseAttachments';
break;
}
default: {
$this->PageMode = 'UseNone';
}
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::SetDrawColor (   $col1 = 0,
  $col2 = -1,
  $col3 = -1,
  $col4 = -1,
  $ret = false 
)

Defines the color used for all drawing operations (lines, rectangles and cell borders).

It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.

Parameters
int$col1Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255
int$col2Green color for RGB, or Magenta color for CMYK. Value between 0 and 255
int$col3Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255
int$col4Key (Black) color for CMYK. Value between 0 and 255
boolean$retif true do not send the command.
Returns
string the PDF command public
Since
1.3
See Also
SetDrawColorArray(), SetFillColor(), SetTextColor(), Line(), Rect(), Cell(), MultiCell()

Definition at line 4252 of file tcpdf.php.

References $DrawColor, $ret, and _out().

Referenced by SetDrawColorArray().

{
// set default values
if (!is_numeric($col1)) {
$col1 = 0;
}
if (!is_numeric($col2)) {
$col2 = -1;
}
if (!is_numeric($col3)) {
$col3 = -1;
}
if (!is_numeric($col4)) {
$col4 = -1;
}
//Set color for all stroking operations
if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) {
// Grey scale
$this->DrawColor = sprintf('%.3F G', $col1/255);
$this->strokecolor = array('G' => $col1);
} elseif ($col4 == -1) {
// RGB
$this->DrawColor = sprintf('%.3F %.3F %.3F RG', $col1/255, $col2/255, $col3/255);
$this->strokecolor = array('R' => $col1, 'G' => $col2, 'B' => $col3);
} else {
// CMYK
$this->DrawColor = sprintf('%.3F %.3F %.3F %.3F K', $col1/100, $col2/100, $col3/100, $col4/100);
$this->strokecolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4);
}
if ($this->page > 0) {
if (!$ret) {
$this->_out($this->DrawColor);
}
}
return '';
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::SetDrawColorArray (   $color,
  $ret = false 
)

Defines the color used for all drawing operations (lines, rectangles and cell borders).

It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.

Parameters
array$colorarray of colors
boolean$retif true do not send the command.
Returns
string the PDF command public
Since
3.1.000 (2008-06-11)
See Also
SetDrawColor()

Definition at line 4226 of file tcpdf.php.

References $k, $ret, and SetDrawColor().

{
if (is_array($color)) {
$color = array_values($color);
$r = isset($color[0]) ? $color[0] : -1;
$g = isset($color[1]) ? $color[1] : -1;
$b = isset($color[2]) ? $color[2] : -1;
$k = isset($color[3]) ? $color[3] : -1;
if ($r >= 0) {
return $this->SetDrawColor($r, $g, $b, $k, $ret);
}
}
return '';
}

+ Here is the call graph for this function:

TCPDF::SetDrawSpotColor (   $name,
  $tint = 100 
)

Defines the spot color used for all drawing operations (lines, rectangles and cell borders).

Parameters
string$namename of the spot color
int$tintthe intensity of the color (from 0 to 100 ; 100 = full intensity by default). public
Since
4.0.024 (2008-09-12)
See Also
AddSpotColor(), SetFillSpotColor(), SetTextSpotColor()

Definition at line 4297 of file tcpdf.php.

References $name, _out(), and Error().

{
if (!isset($this->spot_colors[$name])) {
$this->Error('Undefined spot color: '.$name);
}
$this->DrawColor = sprintf('/CS%d CS %.3F SCN', $this->spot_colors[$name]['i'], $tint/100);
if ($this->page > 0) {
$this->_out($this->DrawColor);
}
}

+ Here is the call graph for this function:

TCPDF::setEqualColumns (   $numcols = 0,
  $width = 0,
  $y = '' 
)

Set multiple columns of the same size.

Parameters
int$numcolsnumber of columns (set to zero to disable columns mode)
int$widthcolumn width
int$ycolumn starting Y position (leave empty for current Y position) public
Since
4.9.001 (2010-03-28)

Definition at line 23028 of file tcpdf.php.

References $space, and $y.

{
$this->columns = array();
if ($numcols < 2) {
$numcols = 0;
$this->columns = array();
} else {
// maximum column width
$maxwidth = ($this->w - $this->original_lMargin - $this->original_rMargin) / $numcols;
if (($width == 0) OR ($width > $maxwidth)) {
$width = $maxwidth;
}
if ($this->empty_string($y)) {
}
// space between columns
$space = (($this->w - $this->original_lMargin - $this->original_rMargin - ($numcols * $width)) / ($numcols - 1));
// fill the columns array (with, space, starting Y position)
for ($i = 0; $i < $numcols; ++$i) {
$this->columns[$i] = array('w' => $width, 's' => $space, 'y' => $y);
}
}
$this->num_columns = $numcols;
$this->current_column = 0;
$this->column_start_page = $this->page;
}
TCPDF::setExtGState (   $gs)
protected

Add an extgstate.

Parameters
array$gsextgstate protected
Since
3.0.000 (2008-03-27)

Definition at line 15475 of file tcpdf.php.

{
$this->_out(sprintf('/GS%d gs', $gs));
}
TCPDF::SetFillColor (   $col1 = 0,
  $col2 = -1,
  $col3 = -1,
  $col4 = -1 
)

Defines the color used for all filling operations (filled rectangles and cell backgrounds).

It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.

Parameters
int$col1Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255
int$col2Green color for RGB, or Magenta color for CMYK. Value between 0 and 255
int$col3Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255
int$col4Key (Black) color for CMYK. Value between 0 and 255 public
Since
1.3
See Also
SetFillColorArray(), SetDrawColor(), SetTextColor(), Rect(), Cell(), MultiCell()

Definition at line 4339 of file tcpdf.php.

References $TextColor, and _out().

Referenced by SetFillColorArray().

{
// set default values
if (!is_numeric($col1)) {
$col1 = 0;
}
if (!is_numeric($col2)) {
$col2 = -1;
}
if (!is_numeric($col3)) {
$col3 = -1;
}
if (!is_numeric($col4)) {
$col4 = -1;
}
//Set color for all filling operations
if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) {
// Grey scale
$this->FillColor = sprintf('%.3F g', $col1/255);
$this->bgcolor = array('G' => $col1);
} elseif ($col4 == -1) {
// RGB
$this->FillColor = sprintf('%.3F %.3F %.3F rg', $col1/255, $col2/255, $col3/255);
$this->bgcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3);
} else {
// CMYK
$this->FillColor = sprintf('%.3F %.3F %.3F %.3F k', $col1/100, $col2/100, $col3/100, $col4/100);
$this->bgcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4);
}
$this->ColorFlag = ($this->FillColor != $this->TextColor);
if ($this->page > 0) {
$this->_out($this->FillColor);
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::SetFillColorArray (   $color)

Defines the color used for all filling operations (filled rectangles and cell backgrounds).

It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.

Parameters
array$colorarray of colors public
Since
3.1.000 (2008-6-11)
See Also
SetFillColor()

Definition at line 4316 of file tcpdf.php.

References $k, and SetFillColor().

{
if (is_array($color)) {
$color = array_values($color);
$r = isset($color[0]) ? $color[0] : -1;
$g = isset($color[1]) ? $color[1] : -1;
$b = isset($color[2]) ? $color[2] : -1;
$k = isset($color[3]) ? $color[3] : -1;
if ($r >= 0) {
$this->SetFillColor($r, $g, $b, $k);
}
}
}

+ Here is the call graph for this function:

TCPDF::SetFillSpotColor (   $name,
  $tint = 100 
)

Defines the spot color used for all filling operations (filled rectangles and cell backgrounds).

Parameters
string$namename of the spot color
int$tintthe intensity of the color (from 0 to 100 ; 100 = full intensity by default). public
Since
4.0.024 (2008-09-12)
See Also
AddSpotColor(), SetDrawSpotColor(), SetTextSpotColor()

Definition at line 4381 of file tcpdf.php.

References $name, $TextColor, _out(), and Error().

{
if (!isset($this->spot_colors[$name])) {
$this->Error('Undefined spot color: '.$name);
}
$this->FillColor = sprintf('/CS%d cs %.3F scn', $this->spot_colors[$name]['i'], $tint/100);
$this->ColorFlag = ($this->FillColor != $this->TextColor);
if ($this->page > 0) {
$this->_out($this->FillColor);
}
}

+ Here is the call graph for this function:

TCPDF::SetFont (   $family,
  $style = '',
  $size = 0,
  $fontfile = '',
  $subset = 'default' 
)

Sets the font used to print character strings.

The font can be either a standard one or a font added via the AddFont() method. Standard fonts use Windows encoding cp1252 (Western Europe). The method can be called before the first page is created and the font is retained from page to page. If you just wish to change the current font size, it is simpler to call SetFontSize(). Note: for the standard fonts, the font metric files must be accessible. There are three possibilities for this:

  • They are in the current directory (the one where the running script lies)
  • They are in one of the directories defined by the include_path parameter
  • They are in the directory defined by the K_PATH_FONTS constant


Parameters
string$familyFamily font. It can be either a name defined by AddFont() or one of the standard Type1 families (case insensitive):
  • times (Times-Roman)
  • timesb (Times-Bold)
  • timesi (Times-Italic)
  • timesbi (Times-BoldItalic)
  • helvetica (Helvetica)
  • helveticab (Helvetica-Bold)
  • helveticai (Helvetica-Oblique)
  • helveticabi (Helvetica-BoldOblique)
  • courier (Courier)
  • courierb (Courier-Bold)
  • courieri (Courier-Oblique)
  • courierbi (Courier-BoldOblique)
  • symbol (Symbol)
  • zapfdingbats (ZapfDingbats)
It is also possible to pass an empty string. In that case, the current family is retained.
string$styleFont style. Possible values are (case insensitive):
  • empty string: regular
  • B: bold
  • I: italic
  • U: underline
  • D: line trough
  • O: overline
or any combination. The default value is regular. Bold and italic styles do not apply to Symbol and ZapfDingbats basic fonts or other fonts when not defined.
float$sizeFont size in points. The default value is the current size. If no size has been specified since the beginning of the document, the value taken is 12
string$fontfileThe font definition file. By default, the name is built from the family and style, in lower case with no spaces.
mixed$subsetif true embedd only a subset of the font (stores only the information related to the used characters); if false embedd full font; if 'default' uses the default value set using setFontSubsetting(). This option is valid only for TrueTypeUnicode fonts. If you want to enable users to change the document, set this parameter to false. If you subset the font, the person who receives your PDF would need to have your same font in order to make changes to your PDF. The file size of the PDF would also be smaller because you are embedding only part of a font.
Author
Nicola Asuni public
Since
1.0
See Also
AddFont(), SetFontSize()

Definition at line 4861 of file tcpdf.php.

References $FontSizePt, AddFont(), getFontBuffer(), and SetFontSize().

Referenced by __construct(), Close(), GetArrStringWidth(), Header(), setFooter(), and setHeader().

{
//Select a font; size given in points
if ($size == 0) {
}
// try to add font (if not already added)
$fontdata = $this->AddFont($family, $style, $fontfile, $subset);
$this->FontFamily = $fontdata['family'];
$this->FontStyle = $fontdata['style'];
$this->CurrentFont = $this->getFontBuffer($fontdata['fontkey']);
$this->SetFontSize($size);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::setFontBuffer (   $font,
  $data 
)
protected

Set font buffer content.

Parameters
string$fontfont key
array$datafont data protected
Since
4.5.000 (2009-01-02)

Definition at line 22229 of file tcpdf.php.

References $data, and n.

Referenced by AddFont().

{
if ($this->diskcache) {
if (!isset($this->fonts[$font])) {
$this->fonts[$font] = $this->getObjFilename('font');
}
$this->writeDiskCache($this->fonts[$font], serialize($data));
} else {
$this->fonts[$font] = $data;
}
if (!in_array($font, $this->fontkeys)) {
$this->fontkeys[] = $font;
// store object ID for current font
$this->font_obj_ids[$font] = $this->n;
$this->setFontSubBuffer($font, 'n', $this->n);
}
}

+ Here is the caller graph for this function:

TCPDF::SetFontSize (   $size,
  $out = true 
)

Defines the size of the current font.

Parameters
float$sizeThe size (in points)
boolean$outif true output the font size command, otherwise only set the font properties. public
Since
1.0
See Also
SetFont()

Definition at line 4882 of file tcpdf.php.

References $k, $out, and _out().

Referenced by MultiCell(), and SetFont().

{
// font size in points
$this->FontSizePt = $size;
// font size in user units
$this->FontSize = $size / $this->k;
// calculate some font metrics
if (isset($this->CurrentFont['desc']['FontBBox'])) {
$bbox = explode(' ', substr($this->CurrentFont['desc']['FontBBox'], 1, -1));
$font_height = ((intval($bbox[3]) - intval($bbox[1])) * $size / 1000);
} else {
$font_height = $size * 1.219;
}
if (isset($this->CurrentFont['desc']['Ascent']) AND ($this->CurrentFont['desc']['Ascent'] > 0)) {
$font_ascent = ($this->CurrentFont['desc']['Ascent'] * $size / 1000);
}
if (isset($this->CurrentFont['desc']['Descent']) AND ($this->CurrentFont['desc']['Descent'] <= 0)) {
$font_descent = (- $this->CurrentFont['desc']['Descent'] * $size / 1000);
}
if (!isset($font_ascent) AND !isset($font_descent)) {
// core font
$font_ascent = 0.76 * $font_height;
$font_descent = $font_height - $font_ascent;
} elseif (!isset($font_descent)) {
$font_descent = $font_height - $font_ascent;
} elseif (!isset($font_ascent)) {
$font_ascent = $font_height - $font_descent;
}
$this->FontAscent = $font_ascent / $this->k;
$this->FontDescent = $font_descent / $this->k;
if ($out AND ($this->page > 0) AND (isset($this->CurrentFont['i']))) {
$this->_out(sprintf('BT /F%d %.2F Tf ET', $this->CurrentFont['i'], $this->FontSizePt));
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::setFontSpacing (   $spacing = 0)

Set the amount to increase or decrease the space between characters in a text.

Parameters
float$spacingamount to increase or decrease the space between characters in a text (0 = default spacing)
Author
Nicola Asuni public
Since
5.9.000 (2010-09-29)

Definition at line 23855 of file tcpdf.php.

{
$this->font_spacing = $spacing;
}
TCPDF::setFontStretching (   $perc = 100)

Set the percentage of character stretching.

Parameters
int$percpercentage of stretching (100 = no stretching)
Author
Nicola Asuni public
Since
5.9.000 (2010-09-29)

Definition at line 23833 of file tcpdf.php.

{
$this->font_stretching = $perc;
}
TCPDF::setFontSubBuffer (   $font,
  $key,
  $data 
)
protected

Set font buffer content.

Parameters
string$fontfont key
string$keyfont sub-key
array$datafont data protected
Since
4.5.000 (2009-01-02)

Definition at line 22255 of file tcpdf.php.

References $data.

Referenced by AddFont().

{
if (!isset($this->fonts[$font])) {
$this->setFontBuffer($font, array());
}
if ($this->diskcache) {
$tmpfont = $this->getFontBuffer($font);
$tmpfont[$key] = $data;
$this->writeDiskCache($this->fonts[$font], serialize($tmpfont));
} else {
$this->fonts[$font][$key] = $data;
}
}

+ Here is the caller graph for this function:

TCPDF::setFontSubsetting (   $enable = true)

Enable or disable default option for font subsetting.

Parameters
boolean$enableif true enable font subsetting by default.
Author
Nicola Asuni public
Since
5.3.002 (2010-06-07)

Definition at line 23503 of file tcpdf.php.

{
$this->font_subsetting = $enable ? true : false;
}
TCPDF::setFooter ( )
protected

This method is used to render the page footer.

protected

Since
4.0.012 (2008-07-24)

Definition at line 4095 of file tcpdf.php.

References $footer_margin, $lasth, $original_lMargin, $original_rMargin, $page, $thead, $theadMargins, _out(), Footer(), getGraphicVars(), SetCellPadding(), SetFont(), setGraphicVars(), and SetXY().

Referenced by endPage().

{
//Page footer
// save current graphic settings
$gvars = $this->getGraphicVars();
// mark this point
$this->footerpos[$this->page] = $this->pagelen[$this->page];
$this->_out("\n");
if ($this->print_footer) {
$this->setGraphicVars($this->default_graphic_vars);
$this->current_column = 0;
$this->num_columns = 1;
$temp_thead = $this->thead;
$temp_theadMargins = $this->theadMargins;
$this->_out('q');
$this->rMargin = $this->original_rMargin;
$this->lMargin = $this->original_lMargin;
$this->SetCellPadding(0);
//set current position
$footer_y = $this->h - $this->footer_margin;
if ($this->rtl) {
$this->SetXY($this->original_rMargin, $footer_y);
} else {
$this->SetXY($this->original_lMargin, $footer_y);
}
$this->SetFont($this->footer_font[0], $this->footer_font[1], $this->footer_font[2]);
$this->Footer();
//restore position
if ($this->rtl) {
$this->SetXY($this->original_rMargin, $this->tMargin);
} else {
$this->SetXY($this->original_lMargin, $this->tMargin);
}
$this->_out('Q');
$this->lasth = $lasth;
$this->thead = $temp_thead;
$this->theadMargins = $temp_theadMargins;
}
// restore graphic settings
$this->setGraphicVars($gvars);
$this->current_column = $gvars['current_column'];
$this->num_columns = $gvars['num_columns'];
// calculate footer length
$this->footerlen[$this->page] = $this->pagelen[$this->page] - $this->footerpos[$this->page] + 1;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::setFooterFont (   $font)

Set footer font.

Parameters
array$fontfont public
Since
1.1

Definition at line 11236 of file tcpdf.php.

{
$this->footer_font = $font;
}
TCPDF::setFooterMargin (   $fm = 10)

Set footer margin.

(minimum distance between footer and bottom page margin)

Parameters
int$fmdistance in user units public

Definition at line 3915 of file tcpdf.php.

{
$this->footer_margin = $fm;
}
TCPDF::setFormDefaultProp (   $prop = array())

Set default properties for form fields.

Parameters
array$propjavascript field properties. Possible values are described on official Javascript for Acrobat API reference. public
Author
Nicola Asuni
Since
4.8.000 (2009-09-06)

Definition at line 14529 of file tcpdf.php.

{
$this->default_form_prop = $prop;
}
TCPDF::setGraphicVars (   $gvars,
  $extended = false 
)
protected

Set graphic variables.

Parameters
array$gvarsarray of graphic variablesto restore
boolean$extendedif true restore extended graphic variables protected
Since
4.2.010 (2008-11-14)

Definition at line 21962 of file tcpdf.php.

Referenced by Close(), setFooter(), setHeader(), and startPage().

{
$this->FontFamily = $gvars['FontFamily'];
$this->FontStyle = $gvars['FontStyle'];
$this->FontSizePt = $gvars['FontSizePt'];
$this->rMargin = $gvars['rMargin'];
$this->lMargin = $gvars['lMargin'];
$this->cell_padding = $gvars['cell_padding'];
$this->cell_margin = $gvars['cell_margin'];
$this->LineWidth = $gvars['LineWidth'];
$this->linestyleWidth = $gvars['linestyleWidth'];
$this->linestyleCap = $gvars['linestyleCap'];
$this->linestyleJoin = $gvars['linestyleJoin'];
$this->linestyleDash = $gvars['linestyleDash'];
$this->textrendermode = $gvars['textrendermode'];
$this->textstrokewidth = $gvars['textstrokewidth'];
$this->DrawColor = $gvars['DrawColor'];
$this->FillColor = $gvars['FillColor'];
$this->TextColor = $gvars['TextColor'];
$this->ColorFlag = $gvars['ColorFlag'];
$this->bgcolor = $gvars['bgcolor'];
$this->fgcolor = $gvars['fgcolor'];
$this->htmlvspace = $gvars['htmlvspace'];
$this->listindent = $gvars['listindent'];
$this->listindentlevel = $gvars['listindentlevel'];
$this->listnum = $gvars['listnum'];
$this->listordered = $gvars['listordered'];
$this->listcount = $gvars['listcount'];
$this->lispacer = $gvars['lispacer'];
$this->cell_height_ratio = $gvars['cell_height_ratio'];
$this->font_stretching = $gvars['font_stretching'];
$this->font_spacing = $gvars['font_spacing'];
if ($extended) {
// restore extended values
$this->lasth = $gvars['lasth'];
$this->tMargin = $gvars['tMargin'];
$this->bMargin = $gvars['bMargin'];
$this->AutoPageBreak = $gvars['AutoPageBreak'];
$this->PageBreakTrigger = $gvars['PageBreakTrigger'];
$this->x = $gvars['x'];
$this->y = $gvars['y'];
$this->w = $gvars['w'];
$this->h = $gvars['h'];
$this->wPt = $gvars['wPt'];
$this->hPt = $gvars['hPt'];
$this->fwPt = $gvars['fwPt'];
$this->fhPt = $gvars['fhPt'];
$this->page = $gvars['page'];
$this->current_column = $gvars['current_column'];
$this->num_columns = $gvars['num_columns'];
}
$this->_out(''.$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '.$this->FillColor.'');
if (!$this->empty_string($this->FontFamily)) {
$this->SetFont($this->FontFamily, $this->FontStyle, $this->FontSizePt);
}
}

+ Here is the caller graph for this function:

TCPDF::setHeader ( )
protected

This method is used to render the page header.

protected

Since
4.0.012 (2008-07-24)

Definition at line 4058 of file tcpdf.php.

References $lasth, $original_lMargin, $original_rMargin, $thead, $theadMargins, _out(), Header(), SetCellPadding(), SetFont(), setGraphicVars(), and SetXY().

Referenced by startPage().

{
if ($this->print_header) {
$this->setGraphicVars($this->default_graphic_vars);
$temp_thead = $this->thead;
$temp_theadMargins = $this->theadMargins;
$this->_out('q');
$this->rMargin = $this->original_rMargin;
$this->lMargin = $this->original_lMargin;
$this->SetCellPadding(0);
//set current position
if ($this->rtl) {
$this->SetXY($this->original_rMargin, $this->header_margin);
} else {
$this->SetXY($this->original_lMargin, $this->header_margin);
}
$this->SetFont($this->header_font[0], $this->header_font[1], $this->header_font[2]);
$this->Header();
//restore position
if ($this->rtl) {
$this->SetXY($this->original_rMargin, $this->tMargin);
} else {
$this->SetXY($this->original_lMargin, $this->tMargin);
}
$this->_out('Q');
$this->lasth = $lasth;
$this->thead = $temp_thead;
$this->theadMargins = $temp_theadMargins;
$this->newline = false;
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::setHeaderData (   $ln = '',
  $lw = 0,
  $ht = '',
  $hs = '' 
)

Set header data.

Parameters
string$lnheader image logo
string$lwheader image logo width in mm
string$htstring to print as title on document header
string$hsstring to print on document header public

Definition at line 3866 of file tcpdf.php.

{
$this->header_logo = $ln;
$this->header_logo_width = $lw;
$this->header_title = $ht;
$this->header_string = $hs;
}
TCPDF::setHeaderFont (   $font)

Set header font.

Parameters
array$fontfont public
Since
1.1

Definition at line 11216 of file tcpdf.php.

{
$this->header_font = $font;
}
TCPDF::setHeaderMargin (   $hm = 10)

Set header margin.

(minimum distance between header and top page margin)

Parameters
int$hmdistance in user units public

Definition at line 3895 of file tcpdf.php.

{
$this->header_margin = $hm;
}
TCPDF::setHtmlLinksStyle (   $color = array(0,0,255),
  $fontstyle = 'U' 
)

Set the color and font style for HTML links.

Parameters
array$colorRGB array of colors
string$fontstyleadditional font styles to add public
Since
4.4.003 (2008-12-09)

Definition at line 21598 of file tcpdf.php.

{
$this->htmlLinkColorArray = $color;
$this->htmlLinkFontStyle = $fontstyle;
}
TCPDF::setHtmlVSpace (   $tagvs)

Set the vertical spaces for HTML tags.

The array must have the following structure (example): $tagvs = array('h1' => array(0 => array('h' => '', 'n' => 2), 1 => array('h' => 1.3, 'n' => 1))); The first array level contains the tag names, the second level contains 0 for opening tags or 1 for closing tags, the third level contains the vertical space unit (h) and the number spaces to add (n). If the h parameter is not specified, default values are used.

Parameters
array$tagvsarray of tags and relative vertical spaces. public
Since
4.2.001 (2008-10-30)

Definition at line 21567 of file tcpdf.php.

{
$this->tagvspaces = $tagvs;
}
TCPDF::setImageBuffer (   $image,
  $data 
)
protected

Set image buffer content.

Parameters
string$imageimage key
array$dataimage data protected
Since
4.5.000 (2008-12-31)

Definition at line 22170 of file tcpdf.php.

References $data.

Referenced by Image().

{
if ($this->diskcache) {
if (!isset($this->images[$image])) {
$this->images[$image] = $this->getObjFilename('image'.$image);
}
$this->writeDiskCache($this->images[$image], serialize($data));
} else {
$this->images[$image] = $data;
}
if (!in_array($image, $this->imagekeys)) {
$this->imagekeys[] = $image;
}
}

+ Here is the caller graph for this function:

TCPDF::setImageScale (   $scale)

Set the adjusting factor to convert pixels to user units.

Parameters
float$scaleadjusting factor to convert pixels to user units.
Author
Nicola Asuni public
Since
1.5.2

Definition at line 3064 of file tcpdf.php.

{
$this->imgscale = $scale;
}
TCPDF::setImageSubBuffer (   $image,
  $key,
  $data 
)
protected

Set image buffer content for a specified sub-key.

Parameters
string$imageimage key
string$keyimage sub-key
array$dataimage data protected
Since
4.5.000 (2008-12-31)

Definition at line 22193 of file tcpdf.php.

References $data.

{
if (!isset($this->images[$image])) {
$this->setImageBuffer($image, array());
}
if ($this->diskcache) {
$tmpimg = $this->getImageBuffer($image);
$tmpimg[$key] = $data;
$this->writeDiskCache($this->images[$image], serialize($tmpimg));
} else {
$this->images[$image][$key] = $data;
}
}
TCPDF::setJPEGQuality (   $quality)

Set the default JPEG compression quality (1-100)

Parameters
int$qualityJPEG quality, integer between 1 and 100 public
Since
3.0.000 (2008-03-27)

Definition at line 15520 of file tcpdf.php.

{
if (($quality < 1) OR ($quality > 100)) {
$quality = 75;
}
$this->jpeg_quality = intval($quality);
}
TCPDF::SetKeywords (   $keywords)

Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'.

Parameters
string$keywordsThe list of keywords. public
Since
1.2
See Also
SetAuthor(), SetCreator(), SetSubject(), SetTitle()

Definition at line 3538 of file tcpdf.php.

References $keywords.

{
//Keywords of document
$this->keywords = $keywords;
}
TCPDF::setLanguageArray (   $language)

Set language array.

Parameters
array$languagepublic
Since
1.1

Definition at line 11256 of file tcpdf.php.

{
$this->l = $language;
if (isset($this->l['a_meta_dir'])) {
$this->rtl = $this->l['a_meta_dir']=='rtl' ? true : false;
} else {
$this->rtl = false;
}
}
TCPDF::setLastH (   $h)

Set the last cell height.

Parameters
float$hcell height.
Author
Nicola Asuni public
Since
1.53.0.TC034

Definition at line 3034 of file tcpdf.php.

References $h.

{
$this->lasth = $h;
}
TCPDF::SetLeftMargin (   $margin)

Defines the left margin.

The method can be called before creating the first page. If the current abscissa gets out of page, it is brought back to the margin.

Parameters
float$marginThe margin. public
Since
1.4
See Also
SetTopMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins()

Definition at line 3186 of file tcpdf.php.

Referenced by MultiCell().

{
//Set left margin
$this->lMargin = $margin;
if (($this->page > 0) AND ($this->x < $margin)) {
$this->x = $margin;
}
}

+ Here is the caller graph for this function:

TCPDF::SetLineStyle (   $style,
  $ret = false 
)

Set line style.

Parameters
array$styleLine style. Array with keys among the following:
  • width (float): Width of the line in user units.
  • cap (string): Type of cap to put on the line. Possible values are: butt, round, square. The difference between "square" and "butt" is that "square" projects a flat end past the end of the line.
  • join (string): Type of join. Possible values are: miter, round, bevel.
  • dash (mixed): Dash pattern. Is 0 (without dash) or string with series of length values, which are the lengths of the on and off dashes. For example: "2" represents 2 on, 2 off, 2 on, 2 off, ...; "2,1" is 2 on, 1 off, 2 on, 1 off, ...
  • phase (integer): Modifier on the dash pattern which is used to shift the point at which the pattern starts.
  • color (array): Draw color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K).
boolean$retif true do not send the command.
Returns
string the PDF command public
Since
2.1.000 (2008-01-08)

Definition at line 12506 of file tcpdf.php.

References $ret, and $tab.

Referenced by Footer(), getCellBorder(), and Header().

{
$s = ''; // string to be returned
if (!is_array($style)) {
return;
}
extract($style);
if (isset($width)) {
$this->LineWidth = $width;
$this->linestyleWidth = sprintf('%.2F w', ($width * $this->k));
$s .= $this->linestyleWidth.' ';
}
if (isset($cap)) {
$ca = array('butt' => 0, 'round'=> 1, 'square' => 2);
if (isset($ca[$cap])) {
$this->linestyleCap = $ca[$cap].' J';
$s .= $this->linestyleCap.' ';
}
}
if (isset($join)) {
$ja = array('miter' => 0, 'round' => 1, 'bevel' => 2);
if (isset($ja[$join])) {
$this->linestyleJoin = $ja[$join].' j';
$s .= $this->linestyleJoin.' ';
}
}
if (isset($dash)) {
$dash_string = '';
if ($dash) {
if (preg_match('/^.+,/', $dash) > 0) {
$tab = explode(',', $dash);
} else {
$tab = array($dash);
}
$dash_string = '';
foreach ($tab as $i => $v) {
if ($i) {
$dash_string .= ' ';
}
$dash_string .= sprintf('%.2F', $v);
}
}
if (!isset($phase) OR !$dash) {
$phase = 0;
}
$this->linestyleDash = sprintf('[%s] %.2F d', $dash_string, $phase);
$s .= $this->linestyleDash.' ';
}
if (isset($color)) {
$s .= $this->SetDrawColorArray($color, true).' ';
}
if (!$ret) {
$this->_out($s);
}
return $s;
}

+ Here is the caller graph for this function:

TCPDF::SetLineWidth (   $width)

Defines the line width.

By default, the value equals 0.2 mm. The method can be called before the first page is created and the value is retained from page to page.

Parameters
float$widthThe width. public
Since
1.0
See Also
Line(), Rect(), Cell(), MultiCell()

Definition at line 12463 of file tcpdf.php.

{
//Set line width
$this->LineWidth = $width;
$this->linestyleWidth = sprintf('%.2F w', ($width * $this->k));
if ($this->page > 0) {
$this->_out($this->linestyleWidth);
}
}
TCPDF::SetLink (   $link,
  $y = 0,
  $page = -1 
)

Defines the page and position a link points to.

Parameters
int$linkThe link identifier returned by AddLink()
float$yOrdinate of target position; -1 indicates the current position. The default value is 0 (top of page)
int$pageNumber of target page; -1 indicates the current page. This is the default value public
Since
1.5
See Also
AddLink()

Definition at line 4991 of file tcpdf.php.

References $page, and $y.

{
if ($y == -1) {
}
if ($page == -1) {
}
$this->links[$link] = array($page, $y);
}
TCPDF::setListIndentWidth (   $width)

Set custom width for list indentation.

Parameters
float$widthwidth of the indentation. Use negative value to disable it. public
Since
4.2.007 (2008-11-12)

Definition at line 21577 of file tcpdf.php.

{
return $this->customlistindent = floatval($width);
}
TCPDF::setLIsymbol (   $symbol = '!')

Set the default bullet to be used as LI bullet symbol.

Parameters
string$symbolcharacter or string to be used (legal values are: '' = automatic, '!' = auto bullet, '#' = auto numbering, 'disc', 'disc', 'circle', 'square', '1', 'decimal', 'decimal-leading-zero', 'i', 'lower-roman', 'I', 'upper-roman', 'a', 'lower-alpha', 'lower-latin', 'A', 'upper-alpha', 'upper-latin', 'lower-greek') public
Since
4.0.028 (2008-09-26)

Definition at line 21488 of file tcpdf.php.

{
$symbol = strtolower($symbol);
switch ($symbol) {
case '!' :
case '#' :
case 'disc' :
case 'circle' :
case 'square' :
case '1':
case 'decimal':
case 'decimal-leading-zero':
case 'i':
case 'lower-roman':
case 'I':
case 'upper-roman':
case 'a':
case 'lower-alpha':
case 'lower-latin':
case 'A':
case 'upper-alpha':
case 'upper-latin':
case 'lower-greek': {
$this->lisymbol = $symbol;
break;
}
default : {
$this->lisymbol = '';
}
}
}
TCPDF::SetMargins (   $left,
  $top,
  $right = -1,
  $keepmargins = false 
)

Defines the left, top and right margins.

Parameters
float$leftLeft margin.
float$topTop margin.
float$rightRight margin. Default value is the left one.
boolean$keepmarginsif true overwrites the default page margins public
Since
1.0
See Also
SetLeftMargin(), SetTopMargin(), SetRightMargin(), SetAutoPageBreak()

Definition at line 3164 of file tcpdf.php.

References $lMargin, and $rMargin.

Referenced by __construct().

{
//Set left, top and right margins
$this->lMargin = $left;
$this->tMargin = $top;
if ($right == -1) {
$right = $left;
}
$this->rMargin = $right;
if ($keepmargins) {
// overwrite original values
$this->original_lMargin = $this->lMargin;
$this->original_rMargin = $this->rMargin;
}
}

+ Here is the caller graph for this function:

TCPDF::setOpenCell (   $isopen)

Set the top/bottom cell sides to be open or closed when the cell cross the page.

Parameters
boolean$isopenif true keeps the top/bottom border open for the cell sides that cross the page. public
Since
4.2.010 (2008-11-14)

Definition at line 21587 of file tcpdf.php.

{
$this->opencell = $isopen;
}
TCPDF::setPage (   $pnum,
  $resetmargins = false 
)

Move pointer at the specified document page and update page dimensions.

Parameters
int$pnumpage number (1 ... numpages)
boolean$resetmarginsif true reset left, right, top margins and Y position. public
Since
2.1.000 (2008-01-07)
See Also
getPage(), lastpage(), getNumPages()

Definition at line 3631 of file tcpdf.php.

References $page, Error(), SetAutoPageBreak(), and SetY().

Referenced by lastPage(), MultiCell(), and startPage().

{
if (($pnum == $this->page) AND ($this->state == 2)) {
return;
}
if (($pnum > 0) AND ($pnum <= $this->numpages)) {
$this->state = 2;
// save current graphic settings
//$gvars = $this->getGraphicVars();
$oldpage = $this->page;
$this->page = $pnum;
$this->wPt = $this->pagedim[$this->page]['w'];
$this->hPt = $this->pagedim[$this->page]['h'];
$this->w = $this->pagedim[$this->page]['wk'];
$this->h = $this->pagedim[$this->page]['hk'];
$this->tMargin = $this->pagedim[$this->page]['tm'];
$this->bMargin = $this->pagedim[$this->page]['bm'];
$this->original_lMargin = $this->pagedim[$this->page]['olm'];
$this->original_rMargin = $this->pagedim[$this->page]['orm'];
$this->AutoPageBreak = $this->pagedim[$this->page]['pb'];
$this->CurOrientation = $this->pagedim[$this->page]['or'];
$this->SetAutoPageBreak($this->AutoPageBreak, $this->bMargin);
// restore graphic settings
//$this->setGraphicVars($gvars);
if ($resetmargins) {
$this->lMargin = $this->pagedim[$this->page]['olm'];
$this->rMargin = $this->pagedim[$this->page]['orm'];
$this->SetY($this->tMargin);
} else {
// account for booklet mode
if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) {
$deltam = $this->pagedim[$this->page]['olm'] - $this->pagedim[$this->page]['orm'];
$this->lMargin += $deltam;
$this->rMargin -= $deltam;
}
}
} else {
$this->Error('Wrong page number on setPage() function: '.$pnum);
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::setPageBoxes (   $page,
  $type,
  $llx,
  $lly,
  $urx,
  $ury,
  $points = false 
)

Set page boundaries.

Parameters
int$pagepage number
string$typevalid values are:
  • 'MediaBox' : the boundaries of the physical medium on which the page shall be displayed or printed;
  • 'CropBox' : the visible region of default user space;
  • 'BleedBox' : the region to which the contents of the page shall be clipped when output in a production environment;
  • 'TrimBox' : the intended dimensions of the finished page after trimming;
  • 'ArtBox' : the page's meaningful content (including potential white space).
float$llxlower-left x coordinate in user units
float$llylower-left y coordinate in user units
float$urxupper-right x coordinate in user units
float$uryupper-right y coordinate in user units
boolean$pointsif true uses user units as unit of measure, otherwise uses PDF points public
Since
5.0.010 (2010-05-17)

Definition at line 2786 of file tcpdf.php.

References $k, $page, $points, and $type.

Referenced by setPageFormat(), and setPageOrientation().

{
if (!isset($this->pagedim[$page])) {
// initialize array
$this->pagedim[$page] = array();
}
$pageboxes = array('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox');
if (!in_array($type, $pageboxes)) {
return;
}
if ($points) {
$k = 1;
} else {
}
$this->pagedim[$page][$type]['llx'] = ($llx * $k);
$this->pagedim[$page][$type]['lly'] = ($lly * $k);
$this->pagedim[$page][$type]['urx'] = ($urx * $k);
$this->pagedim[$page][$type]['ury'] = ($ury * $k);
}

+ Here is the caller graph for this function:

TCPDF::setPageBuffer (   $page,
  $data,
  $append = false 
)
protected

Set page buffer content.

Parameters
int$pagepage number
string$datapage data
boolean$appendif true append data, false replace. protected
Since
4.5.000 (2008-12-31)

Definition at line 22127 of file tcpdf.php.

References $data.

Referenced by MultiCell().

{
if ($this->diskcache) {
if (!isset($this->pages[$page])) {
$this->pages[$page] = $this->getObjFilename('page'.$page);
}
$this->writeDiskCache($this->pages[$page], $data, $append);
} else {
if ($append) {
$this->pages[$page] .= $data;
} else {
$this->pages[$page] = $data;
}
}
if ($append AND isset($this->pagelen[$page])) {
$this->pagelen[$page] += strlen($data);
} else {
$this->pagelen[$page] = strlen($data);
}
}

+ Here is the caller graph for this function:

TCPDF::setPageFormat (   $format,
  $orientation = 'P' 
)
protected

Change the format of the current page.

Parameters
mixed$formatThe format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() documentation or an array of two numners (width, height) or an array containing the following measures and options:
  • ['format'] = page format name (one of the above);
  • ['Rotate'] : The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90.
  • ['PZ'] : The page's preferred zoom (magnification) factor.
  • ['MediaBox'] : the boundaries of the physical medium on which the page shall be displayed or printed:
  • ['MediaBox']['llx'] : lower-left x coordinate in points
  • ['MediaBox']['lly'] : lower-left y coordinate in points
  • ['MediaBox']['urx'] : upper-right x coordinate in points
  • ['MediaBox']['ury'] : upper-right y coordinate in points
  • ['CropBox'] : the visible region of default user space:
  • ['CropBox']['llx'] : lower-left x coordinate in points
  • ['CropBox']['lly'] : lower-left y coordinate in points
  • ['CropBox']['urx'] : upper-right x coordinate in points
  • ['CropBox']['ury'] : upper-right y coordinate in points
  • ['BleedBox'] : the region to which the contents of the page shall be clipped when output in a production environment:
  • ['BleedBox']['llx'] : lower-left x coordinate in points
  • ['BleedBox']['lly'] : lower-left y coordinate in points
  • ['BleedBox']['urx'] : upper-right x coordinate in points
  • ['BleedBox']['ury'] : upper-right y coordinate in points
  • ['TrimBox'] : the intended dimensions of the finished page after trimming:
  • ['TrimBox']['llx'] : lower-left x coordinate in points
  • ['TrimBox']['lly'] : lower-left y coordinate in points
  • ['TrimBox']['urx'] : upper-right x coordinate in points
  • ['TrimBox']['ury'] : upper-right y coordinate in points
  • ['ArtBox'] : the extent of the page's meaningful content:
  • ['ArtBox']['llx'] : lower-left x coordinate in points
  • ['ArtBox']['lly'] : lower-left y coordinate in points
  • ['ArtBox']['urx'] : upper-right x coordinate in points
  • ['ArtBox']['ury'] : upper-right y coordinate in points
  • ['BoxColorInfo'] :specify the colours and other visual characteristics that should be used in displaying guidelines on the screen for each of the possible page boundaries other than the MediaBox:
  • ['BoxColorInfo'][BOXTYPE]['C'] : an array of three numbers in the range 0-255, representing the components in the DeviceRGB colour space.
  • ['BoxColorInfo'][BOXTYPE]['W'] : the guideline width in default user units
  • ['BoxColorInfo'][BOXTYPE]['S'] : the guideline style: S = Solid; D = Dashed
  • ['BoxColorInfo'][BOXTYPE]['D'] : dash array defining a pattern of dashes and gaps to be used in drawing dashed guidelines
  • ['trans'] : the style and duration of the visual transition to use when moving from another page to the given page during a presentation
  • ['trans']['Dur'] : The page's display duration (also called its advance timing): the maximum length of time, in seconds, that the page shall be displayed during presentations before the viewer application shall automatically advance to the next page.
  • ['trans']['S'] : transition style : Split, Blinds, Box, Wipe, Dissolve, Glitter, R, Fly, Push, Cover, Uncover, Fade
  • ['trans']['D'] : The duration of the transition effect, in seconds.
  • ['trans']['Dm'] : (Split and Blinds transition styles only) The dimension in which the specified transition effect shall occur: H = Horizontal, V = Vertical. Default value: H.
  • ['trans']['M'] : (Split, Box and Fly transition styles only) The direction of motion for the specified transition effect: I = Inward from the edges of the page, O = Outward from the center of the pageDefault value: I.
  • ['trans']['Di'] : (Wipe, Glitter, Fly, Cover, Uncover and Push transition styles only) The direction in which the specified transition effect shall moves, expressed in degrees counterclockwise starting from a left-to-right direction. If the value is a number, it shall be one of: 0 = Left to right, 90 = Bottom to top (Wipe only), 180 = Right to left (Wipe only), 270 = Top to bottom, 315 = Top-left to bottom-right (Glitter only). If the value is a name, it shall be None, which is relevant only for the Fly transition when the value of SS is not 1.0. Default value: 0.
  • ['trans']['SS'] : (Fly transition style only) The starting or ending scale at which the changes shall be drawn. If M specifies an inward transition, the scale of the changes drawn shall progress from SS to 1.0 over the course of the transition. If M specifies an outward transition, the scale of the changes drawn shall progress from 1.0 to SS over the course of the transition. Default: 1.0.
  • ['trans']['B'] : (Fly transition style only) If true, the area that shall be flown in is rectangular and opaque. Default: false.
string$orientationpage orientation. Possible values are (case insensitive):
  • P or Portrait (default)
  • L or Landscape
  • '' (empty string) for automatic orientation
protected
Since
3.0.015 (2008-06-06)
See Also
getPageSizeFromFormat()

Definition at line 2668 of file tcpdf.php.

References $page, getPageSizeFromFormat(), setPageBoxes(), and setPageOrientation().

Referenced by __construct().

{
if (!empty($format) AND isset($this->pagedim[$this->page])) {
// remove inherited values
unset($this->pagedim[$this->page]);
}
if (is_string($format)) {
// get page measures from format name
$pf = $this->getPageSizeFromFormat($format);
$this->fwPt = $pf[0];
$this->fhPt = $pf[1];
} else {
// the boundaries of the physical medium on which the page shall be displayed or printed
if (isset($format['MediaBox'])) {
$this->setPageBoxes($this->page, 'MediaBox', $format['MediaBox']['llx'], $format['MediaBox']['lly'], $format['MediaBox']['urx'], $format['MediaBox']['ury'], false);
$this->fwPt = (($format['MediaBox']['urx'] - $format['MediaBox']['llx']) * $this->k);
$this->fhPt = (($format['MediaBox']['ury'] - $format['MediaBox']['lly']) * $this->k);
} else {
if (isset($format[0]) AND is_numeric($format[0]) AND isset($format[1]) AND is_numeric($format[1])) {
$pf = array(($format[0] * $this->k), ($format[1] * $this->k));
} else {
if (!isset($format['format'])) {
// default value
$format['format'] = 'A4';
}
$pf = $this->getPageSizeFromFormat($format['format']);
}
$this->fwPt = $pf[0];
$this->fhPt = $pf[1];
$this->setPageBoxes($this->page, 'MediaBox', 0, 0, $this->fwPt, $this->fhPt, true);
}
// the visible region of default user space
if (isset($format['CropBox'])) {
$this->setPageBoxes($this->page, 'CropBox', $format['CropBox']['llx'], $format['CropBox']['lly'], $format['CropBox']['urx'], $format['CropBox']['ury'], false);
}
// the region to which the contents of the page shall be clipped when output in a production environment
if (isset($format['BleedBox'])) {
$this->setPageBoxes($this->page, 'BleedBox', $format['BleedBox']['llx'], $format['BleedBox']['lly'], $format['BleedBox']['urx'], $format['BleedBox']['ury'], false);
}
// the intended dimensions of the finished page after trimming
if (isset($format['TrimBox'])) {
$this->setPageBoxes($this->page, 'TrimBox', $format['TrimBox']['llx'], $format['TrimBox']['lly'], $format['TrimBox']['urx'], $format['TrimBox']['ury'], false);
}
// the page's meaningful content (including potential white space)
if (isset($format['ArtBox'])) {
$this->setPageBoxes($this->page, 'ArtBox', $format['ArtBox']['llx'], $format['ArtBox']['lly'], $format['ArtBox']['urx'], $format['ArtBox']['ury'], false);
}
// specify the colours and other visual characteristics that should be used in displaying guidelines on the screen for the various page boundaries
if (isset($format['BoxColorInfo'])) {
$this->pagedim[$this->page]['BoxColorInfo'] = $format['BoxColorInfo'];
}
if (isset($format['Rotate']) AND (($format['Rotate'] % 90) == 0)) {
// The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90.
$this->pagedim[$this->page]['Rotate'] = intval($format['Rotate']);
}
if (isset($format['PZ'])) {
// The page's preferred zoom (magnification) factor
$this->pagedim[$this->page]['PZ'] = floatval($format['PZ']);
}
if (isset($format['trans'])) {
// The style and duration of the visual transition to use when moving from another page to the given page during a presentation
if (isset($format['trans']['Dur'])) {
// The page's display duration
$this->pagedim[$this->page]['trans']['Dur'] = floatval($format['trans']['Dur']);
}
$stansition_styles = array('Split', 'Blinds', 'Box', 'Wipe', 'Dissolve', 'Glitter', 'R', 'Fly', 'Push', 'Cover', 'Uncover', 'Fade');
if (isset($format['trans']['S']) AND in_array($format['trans']['S'], $stansition_styles)) {
// The transition style that shall be used when moving to this page from another during a presentation
$this->pagedim[$this->page]['trans']['S'] = $format['trans']['S'];
$valid_effect = array('Split', 'Blinds');
$valid_vals = array('H', 'V');
if (isset($format['trans']['Dm']) AND in_array($format['trans']['S'], $valid_effect) AND in_array($format['trans']['Dm'], $valid_vals)) {
$this->pagedim[$this->page]['trans']['Dm'] = $format['trans']['Dm'];
}
$valid_effect = array('Split', 'Box', 'Fly');
$valid_vals = array('I', 'O');
if (isset($format['trans']['M']) AND in_array($format['trans']['S'], $valid_effect) AND in_array($format['trans']['M'], $valid_vals)) {
$this->pagedim[$this->page]['trans']['M'] = $format['trans']['M'];
}
$valid_effect = array('Wipe', 'Glitter', 'Fly', 'Cover', 'Uncover', 'Push');
if (isset($format['trans']['Di']) AND in_array($format['trans']['S'], $valid_effect)) {
if (((($format['trans']['Di'] == 90) OR ($format['trans']['Di'] == 180)) AND ($format['trans']['S'] == 'Wipe'))
OR (($format['trans']['Di'] == 315) AND ($format['trans']['S'] == 'Glitter'))
OR (($format['trans']['Di'] == 0) OR ($format['trans']['Di'] == 270))) {
$this->pagedim[$this->page]['trans']['Di'] = intval($format['trans']['Di']);
}
}
if (isset($format['trans']['SS']) AND ($format['trans']['S'] == 'Fly')) {
$this->pagedim[$this->page]['trans']['SS'] = floatval($format['trans']['SS']);
}
if (isset($format['trans']['B']) AND ($format['trans']['B'] === true) AND ($format['trans']['S'] == 'Fly')) {
$this->pagedim[$this->page]['trans']['B'] = 'true';
}
} else {
$this->pagedim[$this->page]['trans']['S'] = 'R';
}
if (isset($format['trans']['D'])) {
// The duration of the transition effect, in seconds
$this->pagedim[$this->page]['trans']['D'] = floatval($format['trans']['D']);
} else {
$this->pagedim[$this->page]['trans']['D'] = 1;
}
}
}
$this->setPageOrientation($orientation);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::setPageMark ( )

Set start-writing mark on current page stream used to put borders and fills.

Borders and fills are always created after content and inserted on the position marked by this method. This function must be called after calling Image() function for a background image. Background images must be always inserted before calling Multicell() or WriteHTMLCell() or WriteHTML() functions. public

Since
4.0.016 (2008-07-30)

Definition at line 3834 of file tcpdf.php.

References $page, and setContentMark().

Referenced by startPage().

{
$this->intmrk[$this->page] = $this->pagelen[$this->page];
$this->bordermrk[$this->page] = $this->intmrk[$this->page];
$this->setContentMark();
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::setPageOrientation (   $orientation,
  $autopagebreak = '',
  $bottommargin = '' 
)

Set page orientation.

Parameters
string$orientationpage orientation. Possible values are (case insensitive):
  • P or Portrait (default)
  • L or Landscape
  • '' (empty string) for automatic orientation
boolean$autopagebreakBoolean indicating if auto-page-break mode should be on or off.
float$bottommarginbottom margin of the page. public
Since
3.0.015 (2008-06-06)

Definition at line 2835 of file tcpdf.php.

References $AutoPageBreak, $bMargin, $CurOrientation, $fhPt, $fwPt, $h, $hPt, $k, $lMargin, $original_lMargin, $original_rMargin, $page, $rMargin, $tMargin, $w, $wPt, empty_string(), SetAutoPageBreak(), setPageBoxes(), and swapPageBoxCoordinates().

Referenced by setPageFormat(), and setPageUnit().

{
if (!isset($this->pagedim[$this->page]['MediaBox'])) {
// the boundaries of the physical medium on which the page shall be displayed or printed
$this->setPageBoxes($this->page, 'MediaBox', 0, 0, $this->fwPt, $this->fhPt, true);
}
if (!isset($this->pagedim[$this->page]['CropBox'])) {
// the visible region of default user space
$this->setPageBoxes($this->page, 'CropBox', $this->pagedim[$this->page]['MediaBox']['llx'], $this->pagedim[$this->page]['MediaBox']['lly'], $this->pagedim[$this->page]['MediaBox']['urx'], $this->pagedim[$this->page]['MediaBox']['ury'], true);
}
if (!isset($this->pagedim[$this->page]['BleedBox'])) {
// the region to which the contents of the page shall be clipped when output in a production environment
$this->setPageBoxes($this->page, 'BleedBox', $this->pagedim[$this->page]['CropBox']['llx'], $this->pagedim[$this->page]['CropBox']['lly'], $this->pagedim[$this->page]['CropBox']['urx'], $this->pagedim[$this->page]['CropBox']['ury'], true);
}
if (!isset($this->pagedim[$this->page]['TrimBox'])) {
// the intended dimensions of the finished page after trimming
$this->setPageBoxes($this->page, 'TrimBox', $this->pagedim[$this->page]['CropBox']['llx'], $this->pagedim[$this->page]['CropBox']['lly'], $this->pagedim[$this->page]['CropBox']['urx'], $this->pagedim[$this->page]['CropBox']['ury'], true);
}
if (!isset($this->pagedim[$this->page]['ArtBox'])) {
// the page's meaningful content (including potential white space)
$this->setPageBoxes($this->page, 'ArtBox', $this->pagedim[$this->page]['CropBox']['llx'], $this->pagedim[$this->page]['CropBox']['lly'], $this->pagedim[$this->page]['CropBox']['urx'], $this->pagedim[$this->page]['CropBox']['ury'], true);
}
if (!isset($this->pagedim[$this->page]['Rotate'])) {
// The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90.
$this->pagedim[$this->page]['Rotate'] = 0;
}
if (!isset($this->pagedim[$this->page]['PZ'])) {
// The page's preferred zoom (magnification) factor
$this->pagedim[$this->page]['PZ'] = 1;
}
if ($this->fwPt > $this->fhPt) {
// landscape
$default_orientation = 'L';
} else {
// portrait
$default_orientation = 'P';
}
$valid_orientations = array('P', 'L');
if (empty($orientation)) {
$orientation = $default_orientation;
} else {
$orientation = strtoupper($orientation{0});
}
if (in_array($orientation, $valid_orientations) AND ($orientation != $default_orientation)) {
$this->CurOrientation = $orientation;
$this->wPt = $this->fhPt;
$this->hPt = $this->fwPt;
} else {
$this->CurOrientation = $default_orientation;
$this->wPt = $this->fwPt;
$this->hPt = $this->fhPt;
}
if ((abs($this->pagedim[$this->page]['MediaBox']['urx'] - $this->hPt) < $this->feps) AND (abs($this->pagedim[$this->page]['MediaBox']['ury'] - $this->wPt) < $this->feps)){
// swap X and Y coordinates (change page orientation)
$this->swapPageBoxCoordinates($this->page);
}
$this->w = $this->wPt / $this->k;
$this->h = $this->hPt / $this->k;
if ($this->empty_string($autopagebreak)) {
if (isset($this->AutoPageBreak)) {
$autopagebreak = $this->AutoPageBreak;
} else {
$autopagebreak = true;
}
}
if ($this->empty_string($bottommargin)) {
if (isset($this->bMargin)) {
$bottommargin = $this->bMargin;
} else {
// default value = 2 cm
$bottommargin = 2 * 28.35 / $this->k;
}
}
$this->SetAutoPageBreak($autopagebreak, $bottommargin);
// store page dimensions
$this->pagedim[$this->page]['w'] = $this->wPt;
$this->pagedim[$this->page]['h'] = $this->hPt;
$this->pagedim[$this->page]['wk'] = $this->w;
$this->pagedim[$this->page]['hk'] = $this->h;
$this->pagedim[$this->page]['tm'] = $this->tMargin;
$this->pagedim[$this->page]['bm'] = $bottommargin;
$this->pagedim[$this->page]['lm'] = $this->lMargin;
$this->pagedim[$this->page]['rm'] = $this->rMargin;
$this->pagedim[$this->page]['pb'] = $autopagebreak;
$this->pagedim[$this->page]['or'] = $this->CurOrientation;
$this->pagedim[$this->page]['olm'] = $this->original_lMargin;
$this->pagedim[$this->page]['orm'] = $this->original_rMargin;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::setPageRegions (   $regions = array())

Set no-write regions on page.

A no-write region is a portion of the page with a rectangular or trapezium shape that will not be covered when writing text or html code. A region is always aligned on the left or right side of the page ad is defined using a vertical segment. You can set multiple regions for the same page.

Parameters
array$regionsarray of no-write regions. For each region you can define an array as follow: ('page' => page number or empy for current page, 'xt' => X top, 'yt' => Y top, 'xb' => X bottom, 'yb' => Y bottom, 'side' => page side 'L' = left or 'R' = right). Omit this parameter to remove all regions.
Author
Nicola Asuni public
Since
5.9.003 (2010-10-13)
See Also
addPageRegion(), getPageRegions()

Definition at line 23893 of file tcpdf.php.

References $data.

{
// empty current regions array
$this->page_regions = array();
// add regions
foreach ($regions as $data) {
$this->addPageRegion($data);
}
}
TCPDF::setPageUnit (   $unit)

Set the units of measure for the document.

Parameters
string$unitUser measure unit. Possible values are:
  • pt: point
  • mm: millimeter (default)
  • cm: centimeter
  • in: inch

A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit. public
Since
3.0.015 (2008-06-06)

Definition at line 1908 of file tcpdf.php.

References $dpi, Error(), and setPageOrientation().

Referenced by __construct().

{
$unit = strtolower($unit);
//Set scale factor
switch ($unit) {
// points
case 'px':
case 'pt': {
$this->k = 1;
break;
}
// millimeters
case 'mm': {
$this->k = $this->dpi / 25.4;
break;
}
// centimeters
case 'cm': {
$this->k = $this->dpi / 2.54;
break;
}
// inches
case 'in': {
$this->k = $this->dpi;
break;
}
// unsupported unit
default : {
$this->Error('Incorrect unit: '.$unit);
break;
}
}
$this->pdfunit = $unit;
if (isset($this->CurOrientation)) {
$this->setPageOrientation($this->CurOrientation);
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::setPDFVersion (   $version = '1.7')

Set the PDF version (check PDF reference for valid values).

Default value is 1.t public

Since
3.1.000 (2008-06-09)

Definition at line 15562 of file tcpdf.php.

{
$this->PDFVersion = $version;
}
TCPDF::setPrintFooter (   $val = true)

Set a flag to print page footer.

Parameters
boolean$valueset to true to print the page footer (default), false otherwise. public

Definition at line 3942 of file tcpdf.php.

{
$this->print_footer = $val;
}
TCPDF::setPrintHeader (   $val = true)

Set a flag to print page header.

Parameters
boolean$valset to true to print the page header (default), false otherwise. public

Definition at line 3933 of file tcpdf.php.

{
$this->print_header = $val;
}
TCPDF::SetProtection (   $permissions = array('print', 'modify', 'copy', 'annot-forms', 'fill-forms', 'extract', 'assemble', 'print-high'),
  $user_pass = '',
  $owner_pass = null,
  $mode = 0,
  $pubkeys = null 
)

Set document protection Remark: the protection against modification is for people who have the full Acrobat product.

If you don't set any password, the document will open as usual. If you set a user password, the PDF viewer will ask for it before displaying the document. The master password, if different from the user one, can be used to get full access. Note: protecting a document requires to encrypt it, which increases the processing time a lot. This can cause a PHP time-out in some cases, especially if the document contains images or fonts.

Parameters
Array$permissionsthe set of permissions (specify the ones you want to block):
  • print : Print the document;
  • modify : Modify the contents of the document by operations other than those controlled by 'fill-forms', 'extract' and 'assemble';
  • copy : Copy or otherwise extract text and graphics from the document;
  • annot-forms : Add or modify text annotations, fill in interactive form fields, and, if 'modify' is also set, create or modify interactive form fields (including signature fields);
  • fill-forms : Fill in existing interactive form fields (including signature fields), even if 'annot-forms' is not specified;
  • extract : Extract text and graphics (in support of accessibility to users with disabilities or for other purposes);
  • assemble : Assemble the document (insert, rotate, or delete pages and create bookmarks or thumbnail images), even if 'modify' is not set;
  • print-high : Print the document to a representation from which a faithful digital copy of the PDF content could be generated. When this is not set, printing is limited to a low-level representation of the appearance, possibly of degraded quality.
  • owner : (inverted logic - only for public-key) when set permits change of encryption and enables all other permissions.
String$user_passuser password. Empty by default.
String$owner_passowner password. If not specified, a random value is used.
int$modeencryption strength: 0 = RC4 40 bit; 1 = RC4 128 bit; 2 = AES 128 bit; 3 = AES 256 bit.
String$pubkeysarray of recipients containing public-key certificates ('c') and permissions ('p'). For example: array(array('c' => 'file://../tcpdf.crt', 'p' => array('print'))) public
Since
2.0.000 (2008-01-02)
Author
Nicola Asuni

Definition at line 11983 of file tcpdf.php.

{
$this->encryptdata['protection'] = $this->getUserPermissionCode($permissions, $mode);
if (($pubkeys !== null) AND (is_array($pubkeys))) {
// public-key mode
$this->encryptdata['pubkeys'] = $pubkeys;
if ($mode == 0) {
// public-Key Security requires at least 128 bit
$mode = 1;
}
if (!function_exists('openssl_pkcs7_encrypt')) {
$this->Error('Public-Key Security requires openssl library.');
}
// Set Public-Key filter (availabe are: Entrust.PPKEF, Adobe.PPKLite, Adobe.PubSec)
$this->encryptdata['pubkey'] = true;
$this->encryptdata['Filter'] = 'Adobe.PubSec';
$this->encryptdata['StmF'] = 'DefaultCryptFilter';
$this->encryptdata['StrF'] = 'DefaultCryptFilter';
} else {
// standard mode (password mode)
$this->encryptdata['pubkey'] = false;
$this->encryptdata['Filter'] = 'Standard';
$this->encryptdata['StmF'] = 'StdCF';
$this->encryptdata['StrF'] = 'StdCF';
}
if ($mode > 1) { // AES
if (!extension_loaded('mcrypt')) {
$this->Error('AES encryption requires mcrypt library (http://www.php.net/manual/en/mcrypt.requirements.php).');
}
if (mcrypt_get_cipher_name(MCRYPT_RIJNDAEL_128) === false) {
$this->Error('AES encryption requires MCRYPT_RIJNDAEL_128 cypher.');
}
if (($mode == 3) AND !function_exists('hash')) {
// the Hash extension requires no external libraries and is enabled by default as of PHP 5.1.2.
$this->Error('AES 256 encryption requires HASH Message Digest Framework (http://www.php.net/manual/en/book.hash.php).');
}
}
if ($owner_pass === null) {
$owner_pass = md5($this->getRandomSeed());
}
$this->encryptdata['user_password'] = $user_pass;
$this->encryptdata['owner_password'] = $owner_pass;
$this->encryptdata['mode'] = $mode;
switch ($mode) {
case 0: { // RC4 40 bit
$this->encryptdata['V'] = 1;
$this->encryptdata['Length'] = 40;
$this->encryptdata['CF']['CFM'] = 'V2';
break;
}
case 1: { // RC4 128 bit
$this->encryptdata['V'] = 2;
$this->encryptdata['Length'] = 128;
$this->encryptdata['CF']['CFM'] = 'V2';
if ($this->encryptdata['pubkey']) {
$this->encryptdata['SubFilter'] = 'adbe.pkcs7.s4';
$this->encryptdata['Recipients'] = array();
}
break;
}
case 2: { // AES 128 bit
$this->encryptdata['V'] = 4;
$this->encryptdata['Length'] = 128;
$this->encryptdata['CF']['CFM'] = 'AESV2';
$this->encryptdata['CF']['Length'] = 128;
if ($this->encryptdata['pubkey']) {
$this->encryptdata['SubFilter'] = 'adbe.pkcs7.s5';
$this->encryptdata['Recipients'] = array();
}
break;
}
case 3: { // AES 256 bit
$this->encryptdata['V'] = 5;
$this->encryptdata['Length'] = 256;
$this->encryptdata['CF']['CFM'] = 'AESV3';
$this->encryptdata['CF']['Length'] = 256;
if ($this->encryptdata['pubkey']) {
$this->encryptdata['SubFilter'] = 'adbe.pkcs7.s5';
$this->encryptdata['Recipients'] = array();
}
break;
}
}
$this->encrypted = true;
$this->encryptdata['fileid'] = $this->convertHexStringToString($this->file_id);
}
TCPDF::setRasterizeVectorImages (   $mode)

Enable/disable rasterization of vector images using ImageMagick library.

Parameters
boolean$modeif true enable rasterization, false otherwise. public
Since
5.0.000 (2010-04-27)

Definition at line 23400 of file tcpdf.php.

{
$this->rasterize_vector_images = $mode;
}
TCPDF::SetRightMargin (   $margin)

Defines the right margin.

The method can be called before creating the first page.

Parameters
float$marginThe margin. public
Since
1.5
See Also
SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins()

Definition at line 3216 of file tcpdf.php.

Referenced by MultiCell().

{
$this->rMargin = $margin;
if (($this->page > 0) AND ($this->x > ($this->w - $margin))) {
$this->x = $this->w - $margin;
}
}

+ Here is the caller graph for this function:

TCPDF::setRTL (   $enable,
  $resetx = true 
)

Enable or disable Right-To-Left language mode.

Parameters
Boolean$enableif true enable Right-To-Left language mode.
Boolean$resetxif true reset the X position on direction change. public
Since
2.0.000 (2008-01-03)

Definition at line 2965 of file tcpdf.php.

References Ln().

{
$enable = $enable ? true : false;
$resetx = ($resetx AND ($enable != $this->rtl));
$this->rtl = $enable;
$this->tmprtl = false;
if ($resetx) {
$this->Ln(0);
}
}

+ Here is the call graph for this function:

TCPDF::setSignature (   $signing_cert = '',
  $private_key = '',
  $private_key_password = '',
  $extracerts = '',
  $cert_type = 2,
  $info = array() 
)

Enable document signature (requires the OpenSSL Library).

The digital signature improve document authenticity and integrity and allows o enable extra features on Acrobat Reader. To create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt To export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12 To convert pfx certificate to pem: openssl pkcs12 -in tcpdf.pfx -out tcpdf.crt -nodes

Parameters
mixed$signing_certsigning certificate (string or filename prefixed with 'file://')
mixed$private_keyprivate key (string or filename prefixed with 'file://')
string$private_key_passwordpassword
string$extracertsspecifies the name of a file containing a bunch of extra certificates to include in the signature which can for example be used to help the recipient to verify the certificate that you used.
int$cert_typeThe access permissions granted for this document. Valid values shall be: 1 = No changes to the document shall be permitted; any change to the document shall invalidate the signature; 2 = Permitted changes shall be filling in forms, instantiating page templates, and signing; other changes shall invalidate the signature; 3 = Permitted changes shall be the same as for 2, as well as annotation creation, deletion, and modification; other changes shall invalidate the signature.
array$infoarray of option information: Name, Location, Reason, ContactInfo. public
Author
Nicola Asuni
Since
4.6.005 (2009-04-24)

Definition at line 15199 of file tcpdf.php.

{
// to create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt
// to export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12
// to convert pfx certificate to pem: openssl
// OpenSSL> pkcs12 -in <cert.pfx> -out <cert.crt> -nodes
$this->sign = true;
$this->sig_obj_id = $this->n; // signature widget
++$this->n; // signature object ($this->sig_obj_id + 1)
$this->signature_data = array();
if (strlen($signing_cert) == 0) {
$signing_cert = 'file://'.dirname(__FILE__).'/tcpdf.crt';
$private_key_password = 'tcpdfdemo';
}
if (strlen($private_key) == 0) {
$private_key = $signing_cert;
}
$this->signature_data['signcert'] = $signing_cert;
$this->signature_data['privkey'] = $private_key;
$this->signature_data['password'] = $private_key_password;
$this->signature_data['extracerts'] = $extracerts;
$this->signature_data['cert_type'] = $cert_type;
$this->signature_data['info'] = $info;
}
TCPDF::setSignatureAppearance (   $x = 0,
  $y = 0,
  $w = 0,
  $h = 0,
  $page = -1 
)

Set the digital signature appearance (a cliccable rectangle area to get signature properties)

Parameters
float$xAbscissa of the upper-left corner.
float$yOrdinate of the upper-left corner.
float$wWidth of the signature area.
float$hHeight of the signature area.
int$pageoption page number (if < 0 the current page is used). public
Author
Nicola Asuni
Since
5.3.011 (2010-06-17)

Definition at line 15235 of file tcpdf.php.

References $d, $x, and $y.

{
if (($page < 1) OR ($page > $this->numpages)) {
$this->signature_appearance['page'] = $this->page;
} else {
$this->signature_appearance['page'] = intval($page);
}
$a = $x * $this->k;
$b = $this->pagedim[($this->signature_appearance['page'])]['h'] - (($y + $h) * $this->k);
$c = $w * $this->k;
$d = $h * $this->k;
$this->signature_appearance['rect'] = sprintf('%.2F %.2F %.2F %.2F', $a, $b, $a+$c, $b+$d);
}
TCPDF::setSpacesRE (   $re = '/[^\S\xa0]/')

Set regular expression to detect withespaces or word separators.

The pattern delimiter must be the forward-slash character '/'. Some example patterns are:

Non-Unicode or missing PCRE unicode support: '/[^]/'
Unicode and PCRE unicode support: '/[^{Z}]/u'
Unicode and PCRE unicode support in Chinese mode: '/[^{Z}{Lo}]/u'
if PCRE unicode support is turned ON ( is the negate class of ):
        {Z} or {Separator}: any kind of Unicode whitespace or invisible separator.
        {Lo} or {Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants.
        {Lo} is needed for Chinese characters because are packed next to each other without spaces in between.
Parameters
string$reregular expression (leave empty for default). public
Since
4.6.016 (2009-06-15)

Definition at line 2940 of file tcpdf.php.

Referenced by __construct().

{
$this->re_spaces = $re;
$re_parts = explode('/', $re);
// get pattern parts
$this->re_space = array();
if (isset($re_parts[1]) AND !empty($re_parts[1])) {
$this->re_space['p'] = $re_parts[1];
} else {
$this->re_space['p'] = '[\s]';
}
// set pattern modifiers
if (isset($re_parts[2]) AND !empty($re_parts[2])) {
$this->re_space['m'] = $re_parts[2];
} else {
$this->re_space['m'] = '';
}
}

+ Here is the caller graph for this function:

TCPDF::SetSubject (   $subject)

Defines the subject of the document.

Parameters
string$subjectThe subject. public
Since
1.2
See Also
SetAuthor(), SetCreator(), SetKeywords(), SetTitle()

Definition at line 3514 of file tcpdf.php.

References $subject.

{
//Subject of document
$this->subject = $subject;
}
TCPDF::setSVGStyles (   $svgstyle,
  $prevsvgstyle,
  $x = 0,
  $y = 0,
  $w = 1,
  $h = 1,
  $clip_function = '',
  $clip_params = array() 
)
protected

Apply the requested SVG styles (*** TO BE COMPLETED ***)

Parameters
array$svgstylearray of SVG styles to apply
array$prevsvgstylearray of previous SVG style
int$xX origin of the bounding box
int$yY origin of the bounding box
int$wwidth of the bounding box
int$hheight of the bounding box
string$clip_functionclip function
array$clip_paramsarray of parameters for clipping function
Returns
object style
Author
Nicola Asuni
Since
5.0.000 (2010-05-02) protected

Definition at line 24478 of file tcpdf.php.

References $cw, $x, and $y.

{
$objstyle = '';
if(!isset($svgstyle['opacity'])) {
return $objstyle;
}
// clip-path
$regs = array();
if (preg_match('/url\([\s]*\#([^\)]*)\)/si', $svgstyle['clip-path'], $regs)) {
$clip_path = $this->svgclippaths[$regs[1]];
foreach ($clip_path as $cp) {
$this->startSVGElementHandler('clip-path', $cp['name'], $cp['attribs'], $cp['tm']);
}
}
// opacity
if ($svgstyle['opacity'] != 1) {
$this->SetAlpha($svgstyle['opacity']);
}
// color
$fill_color = $this->convertHTMLColorToDec($svgstyle['color']);
$this->SetFillColorArray($fill_color);
// text color
$text_color = $this->convertHTMLColorToDec($svgstyle['text-color']);
$this->SetTextColorArray($text_color);
// clip
if (preg_match('/rect\(([a-z0-9\-\.]*)[\s]*([a-z0-9\-\.]*)[\s]*([a-z0-9\-\.]*)[\s]*([a-z0-9\-\.]*)\)/si', $svgstyle['clip'], $regs)) {
$top = (isset($regs[1])?$this->getHTMLUnitToUnits($regs[1], 0, $this->svgunit, false):0);
$right = (isset($regs[2])?$this->getHTMLUnitToUnits($regs[2], 0, $this->svgunit, false):0);
$bottom = (isset($regs[3])?$this->getHTMLUnitToUnits($regs[3], 0, $this->svgunit, false):0);
$left = (isset($regs[4])?$this->getHTMLUnitToUnits($regs[4], 0, $this->svgunit, false):0);
$cx = $x + $left;
$cy = $y + $top;
$cw = $w - $left - $right;
$ch = $h - $top - $bottom;
if ($svgstyle['clip-rule'] == 'evenodd') {
$clip_rule = 'CNZ';
} else {
$clip_rule = 'CEO';
}
$this->Rect($cx, $cy, $cw, $ch, $clip_rule, array(), array());
}
// fill
$regs = array();
if (preg_match('/url\([\s]*\#([^\)]*)\)/si', $svgstyle['fill'], $regs)) {
// gradient
$gradient = $this->svggradients[$regs[1]];
if (isset($gradient['xref'])) {
// reference to another gradient definition
$newgradient = $this->svggradients[$gradient['xref']];
$newgradient['coords'] = $gradient['coords'];
$newgradient['mode'] = $gradient['mode'];
$newgradient['gradientUnits'] = $gradient['gradientUnits'];
if (isset($gradient['gradientTransform'])) {
$newgradient['gradientTransform'] = $gradient['gradientTransform'];
}
$gradient = $newgradient;
}
//save current Graphic State
$this->_out('q');
//set clipping area
if (!empty($clip_function) AND method_exists($this, $clip_function)) {
$bbox = call_user_func_array(array($this, $clip_function), $clip_params);
if (is_array($bbox) AND (count($bbox) == 4)) {
list($x, $y, $w, $h) = $bbox;
}
}
if ($gradient['mode'] == 'measure') {
if (isset($gradient['gradientTransform']) AND !empty($gradient['gradientTransform'])) {
$gtm = $gradient['gradientTransform'];
// apply transformation matrix
$xa = ($gtm[0] * $gradient['coords'][0]) + ($gtm[2] * $gradient['coords'][1]) + $gtm[4];
$ya = ($gtm[1] * $gradient['coords'][0]) + ($gtm[3] * $gradient['coords'][1]) + $gtm[5];
$xb = ($gtm[0] * $gradient['coords'][2]) + ($gtm[2] * $gradient['coords'][3]) + $gtm[4];
$yb = ($gtm[1] * $gradient['coords'][2]) + ($gtm[3] * $gradient['coords'][3]) + $gtm[5];
if (isset($gradient['coords'][4])) {
$gradient['coords'][4] = sqrt(pow(($gtm[0] * $gradient['coords'][4]), 2) + pow(($gtm[1] * $gradient['coords'][4]), 2));
}
$gradient['coords'][0] = $xa;
$gradient['coords'][1] = $ya;
$gradient['coords'][2] = $xb;
$gradient['coords'][3] = $yb;
}
// convert SVG coordinates to user units
$gradient['coords'][0] = $this->getHTMLUnitToUnits($gradient['coords'][0], 0, $this->svgunit, false);
$gradient['coords'][1] = $this->getHTMLUnitToUnits($gradient['coords'][1], 0, $this->svgunit, false);
$gradient['coords'][2] = $this->getHTMLUnitToUnits($gradient['coords'][2], 0, $this->svgunit, false);
$gradient['coords'][3] = $this->getHTMLUnitToUnits($gradient['coords'][3], 0, $this->svgunit, false);
if (isset($gradient['coords'][4])) {
$gradient['coords'][4] = $this->getHTMLUnitToUnits($gradient['coords'][4], 0, $this->svgunit, false);
}
// shift units
if ($gradient['gradientUnits'] == 'objectBoundingBox') {
// convert to SVG coordinate system
$gradient['coords'][0] += $x;
$gradient['coords'][1] += $y;
$gradient['coords'][2] += $x;
$gradient['coords'][3] += $y;
}
// calculate percentages
$gradient['coords'][0] = ($gradient['coords'][0] - $x) / $w;
$gradient['coords'][1] = ($gradient['coords'][1] - $y) / $h;
$gradient['coords'][2] = ($gradient['coords'][2] - $x) / $w;
$gradient['coords'][3] = ($gradient['coords'][3] - $y) / $h;
if (isset($gradient['coords'][4])) {
$gradient['coords'][4] /= $w;
}
// fix values
foreach($gradient['coords'] as $key => $val) {
if ($val < 0) {
$gradient['coords'][$key] = 0;
} elseif ($val > 1) {
$gradient['coords'][$key] = 1;
}
}
if (($gradient['type'] == 2) AND ($gradient['coords'][0] == $gradient['coords'][2]) AND ($gradient['coords'][1] == $gradient['coords'][3])) {
// single color (no shading)
$gradient['coords'][0] = 1;
$gradient['coords'][1] = 0;
$gradient['coords'][2] = 0.999;
$gradient['coords'][3] = 0;
}
}
// swap Y coordinates
$tmp = $gradient['coords'][1];
$gradient['coords'][1] = $gradient['coords'][3];
$gradient['coords'][3] = $tmp;
// set transformation map for gradient
if (($gradient['type'] == 3) AND ($gradient['mode'] == 'measure')) {
// gradient is always circular
$cy = $this->h - $y - ($gradient['coords'][1] * ($w + $h));
$this->_out(sprintf('%.3F 0 0 %.3F %.3F %.3F cm', $w*$this->k, $w*$this->k, $x*$this->k, $cy*$this->k));
} else {
$this->_out(sprintf('%.3F 0 0 %.3F %.3F %.3F cm', $w*$this->k, $h*$this->k, $x*$this->k, ($this->h-($y+$h))*$this->k));
}
if (count($gradient['stops']) > 1) {
$this->Gradient($gradient['type'], $gradient['coords'], $gradient['stops'], array(), false);
}
} elseif ($svgstyle['fill'] != 'none') {
$fill_color = $this->convertHTMLColorToDec($svgstyle['fill']);
if ($svgstyle['fill-opacity'] != 1) {
$this->SetAlpha($svgstyle['fill-opacity']);
}
$this->SetFillColorArray($fill_color);
if ($svgstyle['fill-rule'] == 'evenodd') {
$objstyle .= 'F*';
} else {
$objstyle .= 'F';
}
}
// stroke
if ($svgstyle['stroke'] != 'none') {
$stroke_style = array(
'color' => $this->convertHTMLColorToDec($svgstyle['stroke']),
'width' => $this->getHTMLUnitToUnits($svgstyle['stroke-width'], 0, $this->svgunit, false),
'cap' => $svgstyle['stroke-linecap'],
'join' => $svgstyle['stroke-linejoin']
);
if (isset($svgstyle['stroke-dasharray']) AND !empty($svgstyle['stroke-dasharray']) AND ($svgstyle['stroke-dasharray'] != 'none')) {
$stroke_style['dash'] = $svgstyle['stroke-dasharray'];
}
$this->SetLineStyle($stroke_style);
$objstyle .= 'D';
}
// font
$regs = array();
if (!empty($svgstyle['font'])) {
if (preg_match('/font-family[\s]*:[\s]*([^\;\"]*)/si', $svgstyle['font'], $regs)) {
$font_family = $this->getFontFamilyName($regs[1]);
} else {
$font_family = $svgstyle['font-family'];
}
if (preg_match('/font-size[\s]*:[\s]*([^\s\;\"]*)/si', $svgstyle['font'], $regs)) {
$font_size = trim($regs[1]);
} else {
$font_size = $svgstyle['font-size'];
}
if (preg_match('/font-style[\s]*:[\s]*([^\s\;\"]*)/si', $svgstyle['font'], $regs)) {
$font_style = trim($regs[1]);
} else {
$font_style = $svgstyle['font-style'];
}
if (preg_match('/font-weight[\s]*:[\s]*([^\s\;\"]*)/si', $svgstyle['font'], $regs)) {
$font_weight = trim($regs[1]);
} else {
$font_weight = $svgstyle['font-weight'];
}
if (preg_match('/font-stretch[\s]*:[\s]*([^\s\;\"]*)/si', $svgstyle['font'], $regs)) {
$font_stretch = trim($regs[1]);
} else {
$font_stretch = $svgstyle['font-stretch'];
}
if (preg_match('/letter-spacing[\s]*:[\s]*([^\s\;\"]*)/si', $svgstyle['font'], $regs)) {
$font_spacing = trim($regs[1]);
} else {
$font_spacing = $svgstyle['letter-spacing'];
}
} else {
$font_family = $this->getFontFamilyName($svgstyle['font-family']);
$font_size = $svgstyle['font-size'];
$font_style = $svgstyle['font-style'];
$font_weight = $svgstyle['font-weight'];
$font_stretch = $svgstyle['font-stretch'];
$font_spacing = $svgstyle['letter-spacing'];
}
$font_size = $this->getHTMLUnitToUnits($font_size, $prevsvgstyle['font-size'], $this->svgunit, false) * $this->k;
$font_stretch = $this->getCSSFontStretching($font_stretch, $svgstyle['font-stretch']);
$font_spacing = $this->getCSSFontSpacing($font_spacing, $svgstyle['letter-spacing']);
switch ($font_style) {
case 'italic': {
$font_style = 'I';
break;
}
case 'oblique': {
$font_style = 'I';
break;
}
default:
case 'normal': {
$font_style = '';
break;
}
}
switch ($font_weight) {
case 'bold':
case 'bolder': {
$font_style .= 'B';
break;
}
}
switch ($svgstyle['text-decoration']) {
case 'underline': {
$font_style .= 'U';
break;
}
case 'overline': {
$font_style .= 'O';
break;
}
case 'line-through': {
$font_style .= 'D';
break;
}
default:
case 'none': {
break;
}
}
$this->SetFont($font_family, $font_style, $font_size);
$this->setFontStretching($font_stretch);
return $objstyle;
}
TCPDF::setTableHeader ( )
protected

This method is used to render the table header on new page (if any).

protected

Since
4.5.030 (2009-03-25)

Definition at line 4146 of file tcpdf.php.

References $cell_padding, $lMargin, $page, $rMargin, $tMargin, $y, empty_string(), and writeHTML().

Referenced by startPage().

{
if ($this->num_columns > 1) {
// multi column mode
return;
}
if (isset($this->theadMargins['top'])) {
// restore the original top-margin
$this->tMargin = $this->theadMargins['top'];
$this->pagedim[$this->page]['tm'] = $this->tMargin;
$this->y = $this->tMargin;
}
if (!$this->empty_string($this->thead) AND (!$this->inthead)) {
// set margins
$prev_lMargin = $this->lMargin;
$prev_rMargin = $this->rMargin;
$prev_cell_padding = $this->cell_padding;
$this->lMargin = $this->theadMargins['lmargin'] + ($this->pagedim[$this->page]['olm'] - $this->pagedim[$this->theadMargins['page']]['olm']);
$this->rMargin = $this->theadMargins['rmargin'] + ($this->pagedim[$this->page]['orm'] - $this->pagedim[$this->theadMargins['page']]['orm']);
$this->cell_padding = $this->theadMargins['cell_padding'];
if ($this->rtl) {
$this->x = $this->w - $this->rMargin;
} else {
$this->x = $this->lMargin;
}
// print table header
$this->writeHTML($this->thead, false, false, false, false, '');
// set new top margin to skip the table headers
if (!isset($this->theadMargins['top'])) {
$this->theadMargins['top'] = $this->tMargin;
}
$this->tMargin = $this->y;
$this->pagedim[$this->page]['tm'] = $this->tMargin;
$this->lasth = 0;
$this->lMargin = $prev_lMargin;
$this->rMargin = $prev_rMargin;
$this->cell_padding = $prev_cell_padding;
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::setTempRTL (   $mode)

Force temporary RTL language direction.

Parameters
mixed$modecan be false, 'L' for LTR or 'R' for RTL public
Since
2.1.000 (2008-01-09)

Definition at line 2991 of file tcpdf.php.

{
$newmode = false;
switch (strtoupper($mode)) {
case 'LTR':
case 'L': {
if ($this->rtl) {
$newmode = 'L';
}
break;
}
case 'RTL':
case 'R': {
if (!$this->rtl) {
$newmode = 'R';
}
break;
}
case false:
default: {
$newmode = false;
break;
}
}
$this->tmprtl = $newmode;
}
TCPDF::SetTextColor (   $col1 = 0,
  $col2 = -1,
  $col3 = -1,
  $col4 = -1 
)

Defines the color used for text.

It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.

Parameters
int$col1Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255
int$col2Green color for RGB, or Magenta color for CMYK. Value between 0 and 255
int$col3Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255
int$col4Key (Black) color for CMYK. Value between 0 and 255 public
Since
1.3
See Also
SetTextColorArray(), SetDrawColor(), SetFillColor(), Text(), Cell(), MultiCell()

Definition at line 4423 of file tcpdf.php.

References $TextColor.

Referenced by Close(), Footer(), Header(), and SetTextColorArray().

{
// set default values
if (!is_numeric($col1)) {
$col1 = 0;
}
if (!is_numeric($col2)) {
$col2 = -1;
}
if (!is_numeric($col3)) {
$col3 = -1;
}
if (!is_numeric($col4)) {
$col4 = -1;
}
//Set color for text
if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) {
// Grey scale
$this->TextColor = sprintf('%.3F g', $col1/255);
$this->fgcolor = array('G' => $col1);
} elseif ($col4 == -1) {
// RGB
$this->TextColor = sprintf('%.3F %.3F %.3F rg', $col1/255, $col2/255, $col3/255);
$this->fgcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3);
} else {
// CMYK
$this->TextColor = sprintf('%.3F %.3F %.3F %.3F k', $col1/100, $col2/100, $col3/100, $col4/100);
$this->fgcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4);
}
$this->ColorFlag = ($this->FillColor != $this->TextColor);
}

+ Here is the caller graph for this function:

TCPDF::SetTextColorArray (   $color)

Defines the color used for text.

It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.

Parameters
array$colorarray of colors public
Since
3.1.000 (2008-6-11)
See Also
SetFillColor()

Definition at line 4400 of file tcpdf.php.

References $k, and SetTextColor().

{
if (is_array($color)) {
$color = array_values($color);
$r = isset($color[0]) ? $color[0] : -1;
$g = isset($color[1]) ? $color[1] : -1;
$b = isset($color[2]) ? $color[2] : -1;
$k = isset($color[3]) ? $color[3] : -1;
if ($r >= 0) {
$this->SetTextColor($r, $g, $b, $k);
}
}
}

+ Here is the call graph for this function:

TCPDF::setTextRenderingMode (   $stroke = 0,
  $fill = true,
  $clip = false 
)

Set Text rendering mode.

Parameters
int$strokeoutline size in user units (0 = disable).
boolean$fillif true fills the text (default).
boolean$clipif true activate clipping mode public
Since
4.9.008 (2009-04-02)

Definition at line 23182 of file tcpdf.php.

Referenced by Text().

{
// Ref.: PDF 32000-1:2008 - 9.3.6 Text Rendering Mode
// convert text rendering parameters
if ($stroke < 0) {
$stroke = 0;
}
if ($fill === true) {
if ($stroke > 0) {
if ($clip === true) {
// Fill, then stroke text and add to path for clipping
} else {
// Fill, then stroke text
}
$textstrokewidth = $stroke;
} else {
if ($clip === true) {
// Fill text and add to path for clipping
} else {
// Fill text
}
}
} else {
if ($stroke > 0) {
if ($clip === true) {
// Stroke text and add to path for clipping
} else {
// Stroke text
}
$textstrokewidth = $stroke;
} else {
if ($clip === true) {
// Add text to path for clipping
} else {
// Neither fill nor stroke text (invisible)
}
}
}
$this->textrendermode = $textrendermode;
$this->textstrokewidth = $stroke * $this->k;
}

+ Here is the caller graph for this function:

TCPDF::SetTextSpotColor (   $name,
  $tint = 100 
)

Defines the spot color used for text.

Parameters
string$namename of the spot color
int$tintthe intensity of the color (from 0 to 100 ; 100 = full intensity by default). public
Since
4.0.024 (2008-09-12)
See Also
AddSpotColor(), SetDrawSpotColor(), SetFillSpotColor()

Definition at line 4462 of file tcpdf.php.

References $name, $TextColor, _out(), and Error().

{
if (!isset($this->spot_colors[$name])) {
$this->Error('Undefined spot color: '.$name);
}
$this->TextColor = sprintf('/CS%d cs %.3F scn', $this->spot_colors[$name]['i'], $tint/100);
$this->ColorFlag = ($this->FillColor != $this->TextColor);
if ($this->page > 0) {
$this->_out($this->TextColor);
}
}

+ Here is the call graph for this function:

TCPDF::SetTitle (   $title)

Defines the title of the document.

Parameters
string$titleThe title. public
Since
1.2
See Also
SetAuthor(), SetCreator(), SetKeywords(), SetSubject()

Definition at line 3502 of file tcpdf.php.

References $title.

{
//Title of document
$this->title = $title;
}
TCPDF::SetTopMargin (   $margin)

Defines the top margin.

The method can be called before creating the first page.

Parameters
float$marginThe margin. public
Since
1.5
See Also
SetLeftMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins()

Definition at line 3201 of file tcpdf.php.

{
//Set top margin
$this->tMargin = $margin;
if (($this->page > 0) AND ($this->y < $margin)) {
$this->y = $margin;
}
}
TCPDF::setUserRights (   $enable = true,
  $document = '/FullSave',
  $annots = '/Create/Delete/Modify/Copy/Import/Export',
  $form = '/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate',
  $signature = '/Modify',
  $ef = '/Create/Delete/Modify/Import',
  $formex = '' 
)

Set User's Rights for PDF Reader WARNING: This is experimental and currently do not work.

Check the PDF Reference 8.7.1 Transform Methods, Table 8.105 Entries in the UR transform parameters dictionary

Parameters
boolean$enableif true enable user's rights on PDF reader
string$documentNames specifying additional document-wide usage rights for the document. The only defined value is "/FullSave", which permits a user to save the document along with modified form and/or annotation data.
string$annotsNames specifying additional annotation-related usage rights for the document. Valid names in PDF 1.5 and later are /Create/Delete/Modify/Copy/Import/Export, which permit the user to perform the named operation on annotations.
string$formNames specifying additional form-field-related usage rights for the document. Valid names are: /Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate
string$signatureNames specifying additional signature-related usage rights for the document. The only defined value is /Modify, which permits a user to apply a digital signature to an existing signature form field or clear a signed signature form field.
string$efNames specifying additional usage rights for named embedded files in the document. Valid names are /Create/Delete/Modify/Import, which permit the user to perform the named operation on named embedded files Names specifying additional embedded-files-related usage rights for the document.
string$formexNames specifying additional form-field-related usage rights. The only valid name is BarcodePlaintext, which permits text form field data to be encoded as a plaintext two-dimensional barcode. public
Author
Nicola Asuni
Since
2.9.000 (2008-03-26)

Definition at line 15163 of file tcpdf.php.

{
$this->ur['enabled'] = $enable;
$this->ur['document'] = $document;
$this->ur['annots'] = $annots;
$this->ur['form'] = $form;
$this->ur['signature'] = $signature;
$this->ur['ef'] = $ef;
$this->ur['formex'] = $formex;
if (!$this->sign) {
$this->setSignature('', '', '', '', 0, array());
}
}
TCPDF::setViewerPreferences (   $preferences)

Set the viewer preferences dictionary controlling the way the document is to be presented on the screen or in print.

(see Section 8.1 of PDF reference, "Viewer Preferences").

  • HideToolbar boolean (Optional) A flag specifying whether to hide the viewer application's tool bars when the document is active. Default value: false.
  • HideMenubar boolean (Optional) A flag specifying whether to hide the viewer application's menu bar when the document is active. Default value: false.
  • HideWindowUI boolean (Optional) A flag specifying whether to hide user interface elements in the document's window (such as scroll bars and navigation controls), leaving only the document's contents displayed. Default value: false.
  • FitWindow boolean (Optional) A flag specifying whether to resize the document's window to fit the size of the first displayed page. Default value: false.
  • CenterWindow boolean (Optional) A flag specifying whether to position the document's window in the center of the screen. Default value: false.
  • DisplayDocTitle boolean (Optional; PDF 1.4) A flag specifying whether the window's title bar should display the document title taken from the Title entry of the document information dictionary (see Section 10.2.1, "Document Information Dictionary"). If false, the title bar should instead display the name of the PDF file containing the document. Default value: false.
  • NonFullScreenPageMode name (Optional) The document's page mode, specifying how to display the document on exiting full-screen mode:
    • UseNone Neither document outline nor thumbnail images visible
    • UseOutlines Document outline visible
    • UseThumbs Thumbnail images visible
    • UseOC Optional content group panel visible
    This entry is meaningful only if the value of the PageMode entry in the catalog dictionary (see Section 3.6.1, "Document Catalog") is FullScreen; it is ignored otherwise. Default value: UseNone.
  • ViewArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be displayed when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:
    • MediaBox
    • CropBox (default)
    • BleedBox
    • TrimBox
    • ArtBox
  • ViewClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:
    • MediaBox
    • CropBox (default)
    • BleedBox
    • TrimBox
    • ArtBox
  • PrintArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be rendered when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:
    • MediaBox
    • CropBox (default)
    • BleedBox
    • TrimBox
    • ArtBox
  • PrintClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:
    • MediaBox
    • CropBox (default)
    • BleedBox
    • TrimBox
    • ArtBox
  • PrintScaling name (Optional; PDF 1.6) The page scaling option to be selected when a print dialog is displayed for this document. Valid values are:
    • None, which indicates that the print dialog should reflect no page scaling
    • AppDefault (default), which indicates that applications should use the current print scaling
  • Duplex name (Optional; PDF 1.7) The paper handling option to use when printing the file from the print dialog. The following values are valid:
    • Simplex - Print single-sided
    • DuplexFlipShortEdge - Duplex and flip on the short edge of the sheet
    • DuplexFlipLongEdge - Duplex and flip on the long edge of the sheet
    Default value: none
  • PickTrayByPDFSize boolean (Optional; PDF 1.7) A flag specifying whether the PDF page size is used to select the input paper tray. This setting influences only the preset values used to populate the print dialog presented by a PDF viewer application. If PickTrayByPDFSize is true, the check box in the print dialog associated with input paper tray is checked. Note: This setting has no effect on Mac OS systems, which do not provide the ability to pick the input tray by size.
  • PrintPageRange array (Optional; PDF 1.7) The page numbers used to initialize the print dialog box when the file is printed. The first page of the PDF file is denoted by 1. Each pair consists of the first and last pages in the sub-range. An odd number of integers causes this entry to be ignored. Negative numbers cause the entire array to be ignored. Default value: as defined by PDF viewer application
  • NumCopies integer (Optional; PDF 1.7) The number of copies to be printed when the print dialog is opened for this file. Supported values are the integers 2 through 5. Values outside this range are ignored. Default value: as defined by PDF viewer application, but typically 1
Parameters
array$preferencesarray of options.
Author
Nicola Asuni public
Since
3.1.000 (2008-06-09)

Definition at line 15575 of file tcpdf.php.

{
$this->viewer_preferences = $preferences;
}
TCPDF::setVisibility (   $v)

Set the visibility of the successive elements.

This can be useful, for instance, to put a background image or color that will show on screen but won't print.

Parameters
string$vvisibility mode. Legal values are: all, print, screen. public
Since
3.0.000 (2008-03-27)

Definition at line 15420 of file tcpdf.php.

Referenced by Close().

{
if ($this->openMarkedContent) {
// close existing open marked-content
$this->_out('EMC');
$this->openMarkedContent = false;
}
switch($v) {
case 'print': {
$this->_out('/OC /OC1 BDC');
$this->openMarkedContent = true;
break;
}
case 'screen': {
$this->_out('/OC /OC2 BDC');
$this->openMarkedContent = true;
break;
}
case 'all': {
$this->_out('');
break;
}
default: {
$this->Error('Incorrect visibility: '.$v);
break;
}
}
$this->visibility = $v;
}

+ Here is the caller graph for this function:

TCPDF::SetX (   $x,
  $rtloff = false 
)

Defines the abscissa of the current position.

If the passed value is negative, it is relative to the right of the page (or left if language is RTL).

Parameters
float$xThe value of the abscissa.
boolean$rtloffif true always uses the page top-left corner as origin of axis. public
Since
1.2
See Also
GetX(), GetY(), SetY(), SetXY()

Definition at line 7747 of file tcpdf.php.

References $x.

Referenced by Footer(), Header(), and MultiCell().

{
if (!$rtloff AND $this->rtl) {
if ($x >= 0) {
$this->x = $this->w - $x;
} else {
$this->x = abs($x);
}
} else {
if ($x >= 0) {
$this->x = $x;
} else {
$this->x = $this->w + $x;
}
}
if ($this->x < 0) {
$this->x = 0;
}
if ($this->x > $this->w) {
$this->x = $this->w;
}
}

+ Here is the caller graph for this function:

TCPDF::SetXY (   $x,
  $y,
  $rtloff = false 
)

Defines the abscissa and ordinate of the current position.

If the passed values are negative, they are relative respectively to the right and bottom of the page.

Parameters
float$xThe value of the abscissa.
float$yThe value of the ordinate.
boolean$rtloffif true always uses the page top-left corner as origin of axis. public
Since
1.2
See Also
SetX(), SetY()

Definition at line 7811 of file tcpdf.php.

References $x, and $y.

Referenced by setFooter(), setHeader(), and Text().

{
$this->SetY($y, false, $rtloff);
$this->SetX($x, $rtloff);
}

+ Here is the caller graph for this function:

TCPDF::SetY (   $y,
  $resetx = true,
  $rtloff = false 
)

Moves the current abscissa back to the left margin and sets the ordinate.

If the passed value is negative, it is relative to the bottom of the page.

Parameters
float$yThe value of the ordinate.
bool$resetxif true (default) reset the X position.
boolean$rtloffif true always uses the page top-left corner as origin of axis. public
Since
1.0
See Also
GetX(), GetY(), SetY(), SetXY()

Definition at line 7779 of file tcpdf.php.

References $y.

Referenced by Footer(), Header(), Image(), MultiCell(), setPage(), and startPage().

{
if ($resetx) {
//reset x
if (!$rtloff AND $this->rtl) {
$this->x = $this->w - $this->rMargin;
} else {
$this->x = $this->lMargin;
}
}
if ($y >= 0) {
$this->y = $y;
} else {
$this->y = $this->h + $y;
}
if ($this->y < 0) {
$this->y = 0;
}
if ($this->y > $this->h) {
$this->y = $this->h;
}
}

+ Here is the caller graph for this function:

TCPDF::Skew (   $angle_x,
  $angle_y,
  $x = '',
  $y = '' 
)

Skew.

Parameters
float$angle_xangle in degrees between -90 (skew to the left) and 90 (skew to the right)
float$angle_yangle in degrees between -90 (skew to the bottom) and 90 (skew to the top)
int$xabscissa of the skewing center. default is current x position
int$yordinate of the skewing center. default is current y position public
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12403 of file tcpdf.php.

References $x, and $y.

{
if ($x === '') {
}
if ($y === '') {
}
if (($angle_x <= -90) OR ($angle_x >= 90) OR ($angle_y <= -90) OR ($angle_y >= 90)) {
$this->Error('Please use values between -90 and +90 degrees for Skewing.');
}
$y = ($this->h - $y) * $this->k;
//calculate elements of transformation matrix
$tm = array();
$tm[0] = 1;
$tm[1] = tan(deg2rad($angle_y));
$tm[2] = tan(deg2rad($angle_x));
$tm[3] = 1;
$tm[4] = -$tm[2] * $y;
$tm[5] = -$tm[1] * $x;
//skew the coordinate system
$this->Transform($tm);
}
TCPDF::SkewX (   $angle_x,
  $x = '',
  $y = '' 
)

Skew horizontally.

Parameters
float$angle_xangle in degrees between -90 (skew to the left) and 90 (skew to the right)
int$xabscissa of the skewing center. default is current x position
int$yordinate of the skewing center. default is current y position public
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12376 of file tcpdf.php.

References $x, and $y.

{
$this->Skew($angle_x, 0, $x, $y);
}
TCPDF::SkewY (   $angle_y,
  $x = '',
  $y = '' 
)

Skew vertically.

Parameters
float$angle_yangle in degrees between -90 (skew to the bottom) and 90 (skew to the top)
int$xabscissa of the skewing center. default is current x position
int$yordinate of the skewing center. default is current y position public
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12389 of file tcpdf.php.

References $x, and $y.

{
$this->Skew(0, $angle_y, $x, $y);
}
TCPDF::StarPolygon (   $x0,
  $y0,
  $r,
  $nv,
  $ng,
  $angle = 0,
  $draw_circle = false,
  $style = '',
  $line_style = array(),
  $fill_color = array(),
  $circle_style = '',
  $circle_outLine_style = array(),
  $circle_fill_color = array() 
)

Draws a star polygon.

Parameters
float$x0Abscissa of center point.
float$y0Ordinate of center point.
float$rRadius of inscribed circle.
integer$nvNumber of vertices.
integer$ngNumber of gap (if ($ng % $nv = 1) then is a regular polygon).
float$angle,:Angle oriented (anti-clockwise). Default value: 0.
boolean$draw_circle,:Draw inscribed circle or not. Default value is false.
string$styleStyle of rendering. See the getPathPaintOperator() function for more information.
array$line_styleLine style of polygon sides. Array with keys among the following:
  • all: Line style of all sides. Array like for SetLineStyle.
  • 0 to (n - 1): Line style of each side. Array like for SetLineStyle.
If a key is not present or is null, not draws the side. Default value is default line style (empty array).
array$fill_colorFill color. Format: array(red, green, blue). Default value: default color (empty array).
string$circle_styleStyle of rendering of inscribed circle (if draws). Possible values are:
  • D or empty string: Draw (default).
  • F: Fill.
  • DF or FD: Draw and fill.
  • CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).
  • CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).
array$circle_outLine_styleLine style of inscribed circle (if draws). Array like for SetLineStyle. Default value: default line style (empty array).
array$circle_fill_colorFill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array). public
Since
2.1.000 (2008-01-08)

Definition at line 13117 of file tcpdf.php.

{
if ($nv < 2) {
$nv = 2;
}
if ($draw_circle) {
$this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color);
}
$p2 = array();
$visited = array();
for ($i = 0; $i < $nv; ++$i) {
$a = $angle + ($i * 360 / $nv);
$a_rad = deg2rad((float) $a);
$p2[] = $x0 + ($r * sin($a_rad));
$p2[] = $y0 + ($r * cos($a_rad));
$visited[] = false;
}
$p = array();
$i = 0;
do {
$p[] = $p2[$i * 2];
$p[] = $p2[($i * 2) + 1];
$visited[$i] = true;
$i += $ng;
$i %= $nv;
} while (!$visited[$i]);
$this->Polygon($p, $style, $line_style, $fill_color);
}
TCPDF::startPage (   $orientation = '',
  $format = '',
  $tocpage = false 
)

Starts a new page to the document.

The page must be closed using the endPage() function. The origin of the coordinate system is at the top-left corner and increasing ordinates go downwards.

Parameters
string$orientationpage orientation. Possible values are (case insensitive):
  • P or PORTRAIT (default)
  • L or LANDSCAPE
mixed$formatThe format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). public
Since
4.2.010 (2008-11-14)
See Also
AddPage(), endPage(), addTOCPage(), endTOCPage(), getPageSizeFromFormat(), setPageFormat()

Definition at line 3788 of file tcpdf.php.

References $numpages, $page, $tocpage, _beginpage(), getGraphicVars(), Open(), setGraphicVars(), setHeader(), setPage(), setPageMark(), setTableHeader(), SetY(), and swapMargins().

Referenced by AddPage().

{
if ($tocpage) {
$this->tocpage = true;
}
if ($this->numpages > $this->page) {
// this page has been already added
$this->setPage($this->page + 1);
$this->SetY($this->tMargin);
return;
}
// start a new page
if ($this->state == 0) {
$this->Open();
}
$this->swapMargins($this->booklet);
// save current graphic settings
$gvars = $this->getGraphicVars();
// start new page
$this->_beginpage($orientation, $format);
// mark page as open
$this->pageopen[$this->page] = true;
// restore graphic settings
$this->setGraphicVars($gvars);
// mark this point
$this->setPageMark();
// print page header
$this->setHeader();
// restore graphic settings
$this->setGraphicVars($gvars);
// mark this point
$this->setPageMark();
// print table header (if any)
$this->setTableHeader();
// set mark for empty page check
$this->emptypagemrk[$this->page]= $this->pagelen[$this->page];
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::startPageGroup (   $page = '')

Create a new page group.

NOTE: call this function before calling AddPage()

Parameters
int$pagestarting group page (leave empty for next page). public
Since
3.0.000 (2008-03-27)

Definition at line 15255 of file tcpdf.php.

{
if (empty($page)) {
$page = $this->page + 1;
}
$this->newpagegroup[$page] = true;
}
TCPDF::startSVGElementHandler (   $parser,
  $name,
  $attribs,
  $ctm = array() 
)
protected

Sets the opening SVG element handler function for the XML parser.

(*** TO BE COMPLETED ***)

Parameters
resource$parserThe first parameter, parser, is a reference to the XML parser calling the handler.
string$nameThe second parameter, name, contains the name of the element for which this handler is called. If case-folding is in effect for this parser, the element name will be in uppercase letters.
array$attribsThe third parameter, attribs, contains an associative array with the element's attributes (if any). The keys of this array are the attribute names, the values are the attribute values. Attribute names are case-folded on the same criteria as element names. Attribute values are not case-folded. The original order of the attributes can be retrieved by walking through attribs the normal way, using each(). The first key in the array was the first attribute, and so on.
array$ctmtranformation matrix for clipping mode (starting transformation matrix).
Author
Nicola Asuni
Since
5.0.000 (2010-05-02) protected

Definition at line 25093 of file tcpdf.php.

References $d, $img, $name, $points, $x, $y, K_PATH_MAIN, and K_PATH_URL.

{
// check if we are in clip mode
if ($this->svgclipmode) {
$this->svgclippaths[$this->svgclipid][] = array('name' => $name, 'attribs' => $attribs, 'tm' => $this->svgcliptm[$this->svgclipid]);
return;
}
if ($this->svgdefsmode AND !in_array($name, array('clipPath', 'linearGradient', 'radialGradient', 'stop'))) {
if (!isset($attribs['id'])) {
$attribs['id'] = 'DF_'.(count($this->svgdefs) + 1);
}
$this->svgdefs[$attribs['id']] = array('name' => $name, 'attribs' => $attribs);
return;
}
$clipping = false;
if ($parser == 'clip-path') {
// set clipping mode
$clipping = true;
}
// get styling properties
$prev_svgstyle = $this->svgstyles[(count($this->svgstyles) - 1)]; // previous style
$svgstyle = $this->svgstyles[0]; // set default style
if (isset($attribs['style']) AND !$this->empty_string($attribs['style'])) {
// fix style for regular expression
$attribs['style'] = ';'.$attribs['style'];
}
foreach ($prev_svgstyle as $key => $val) {
if (in_array($key, $this->svginheritprop)) {
// inherit previous value
$svgstyle[$key] = $val;
}
if (isset($attribs[$key]) AND !$this->empty_string($attribs[$key])) {
// specific attribute settings
if ($attribs[$key] == 'inherit') {
$svgstyle[$key] = $val;
} else {
$svgstyle[$key] = $attribs[$key];
}
} elseif (isset($attribs['style']) AND !$this->empty_string($attribs['style'])) {
// CSS style syntax
$attrval = array();
if (preg_match('/[;\"\s]{1}'.$key.'[\s]*:[\s]*([^;\"]*)/si', $attribs['style'], $attrval) AND isset($attrval[1])) {
if ($attrval[1] == 'inherit') {
$svgstyle[$key] = $val;
} else {
$svgstyle[$key] = $attrval[1];
}
}
}
}
// transformation matrix
if (!empty($ctm)) {
$tm = $ctm;
} else {
$tm = $this->svgstyles[(count($this->svgstyles) - 1)]['transfmatrix'];
}
if (isset($attribs['transform']) AND !empty($attribs['transform'])) {
$tm = $this->getTransformationMatrixProduct($tm, $this->getSVGTransformMatrix($attribs['transform']));
}
$svgstyle['transfmatrix'] = $tm;
$invisible = false;
if (($svgstyle['visibility'] == 'hidden') OR ($svgstyle['visibility'] == 'collapse') OR ($svgstyle['display'] == 'none')) {
// the current graphics element is invisible (nothing is painted)
$invisible = true;
}
// process tag
switch($name) {
case 'defs': {
$this->svgdefsmode = true;
break;
}
// clipPath
case 'clipPath': {
if ($invisible) {
break;
}
$this->svgclipmode = true;
if (!isset($attribs['id'])) {
$attribs['id'] = 'CP_'.(count($this->svgcliptm) + 1);
}
$this->svgclipid = $attribs['id'];
$this->svgclippaths[$this->svgclipid] = array();
$this->svgcliptm[$this->svgclipid] = $tm;
break;
}
case 'svg': {
// start of SVG object
break;
}
case 'g': {
// group together related graphics elements
array_push($this->svgstyles, $svgstyle);
$this->StartTransform();
$this->setSVGStyles($svgstyle, $prev_svgstyle);
break;
}
case 'linearGradient': {
if (!isset($attribs['id'])) {
$attribs['id'] = 'GR_'.(count($this->svggradients) + 1);
}
$this->svggradientid = $attribs['id'];
$this->svggradients[$this->svggradientid] = array();
$this->svggradients[$this->svggradientid]['type'] = 2;
$this->svggradients[$this->svggradientid]['stops'] = array();
if (isset($attribs['gradientUnits'])) {
$this->svggradients[$this->svggradientid]['gradientUnits'] = $attribs['gradientUnits'];
} else {
$this->svggradients[$this->svggradientid]['gradientUnits'] = 'objectBoundingBox';
}
//$attribs['spreadMethod']
$x1 = (isset($attribs['x1'])?$attribs['x1']:0);
$y1 = (isset($attribs['y1'])?$attribs['y1']:0);
$x2 = (isset($attribs['x2'])?$attribs['x2']:1);
$y2 = (isset($attribs['y2'])?$attribs['y2']:0);
if (isset($attribs['x1']) AND (substr($attribs['x1'], -1) != '%')) {
$this->svggradients[$this->svggradientid]['mode'] = 'measure';
} else {
$this->svggradients[$this->svggradientid]['mode'] = 'percentage';
}
if (isset($attribs['gradientTransform'])) {
$this->svggradients[$this->svggradientid]['gradientTransform'] = $this->getSVGTransformMatrix($attribs['gradientTransform']);
}
$this->svggradients[$this->svggradientid]['coords'] = array($x1, $y1, $x2, $y2);
if (isset($attribs['xlink:href']) AND !empty($attribs['xlink:href'])) {
// gradient is defined on another place
$this->svggradients[$this->svggradientid]['xref'] = substr($attribs['xlink:href'], 1);
}
break;
}
case 'radialGradient': {
if (!isset($attribs['id'])) {
$attribs['id'] = 'GR_'.(count($this->svggradients) + 1);
}
$this->svggradientid = $attribs['id'];
$this->svggradients[$this->svggradientid] = array();
$this->svggradients[$this->svggradientid]['type'] = 3;
$this->svggradients[$this->svggradientid]['stops'] = array();
if (isset($attribs['gradientUnits'])) {
$this->svggradients[$this->svggradientid]['gradientUnits'] = $attribs['gradientUnits'];
} else {
$this->svggradients[$this->svggradientid]['gradientUnits'] = 'objectBoundingBox';
}
//$attribs['spreadMethod']
$cx = (isset($attribs['cx'])?$attribs['cx']:0.5);
$cy = (isset($attribs['cy'])?$attribs['cy']:0.5);
$fx = (isset($attribs['fx'])?$attribs['fx']:$cx);
$fy = (isset($attribs['fy'])?$attribs['fy']:$cy);
$r = (isset($attribs['r'])?$attribs['r']:0.5);
if (isset($attribs['cx']) AND (substr($attribs['cx'], -1) != '%')) {
$this->svggradients[$this->svggradientid]['mode'] = 'measure';
} else {
$this->svggradients[$this->svggradientid]['mode'] = 'percentage';
}
if (isset($attribs['gradientTransform'])) {
$this->svggradients[$this->svggradientid]['gradientTransform'] = $this->getSVGTransformMatrix($attribs['gradientTransform']);
}
$this->svggradients[$this->svggradientid]['coords'] = array($cx, $cy, $fx, $fy, $r);
if (isset($attribs['xlink:href']) AND !empty($attribs['xlink:href'])) {
// gradient is defined on another place
$this->svggradients[$this->svggradientid]['xref'] = substr($attribs['xlink:href'], 1);
}
break;
}
case 'stop': {
// gradient stops
if (substr($attribs['offset'], -1) == '%') {
$offset = floatval(substr($attribs['offset'], -1)) / 100;
} else {
$offset = floatval($attribs['offset']);
if ($offset > 1) {
$offset /= 100;
}
}
$stop_color = isset($svgstyle['stop-color'])?$this->convertHTMLColorToDec($svgstyle['stop-color']):'black';
$opacity = isset($svgstyle['stop-opacity'])?$svgstyle['stop-opacity']:1;
$this->svggradients[$this->svggradientid]['stops'][] = array('offset' => $offset, 'color' => $stop_color, 'opacity' => $opacity);
break;
}
// paths
case 'path': {
if ($invisible) {
break;
}
$d = trim($attribs['d']);
if ($clipping) {
$this->SVGTransform($tm);
$this->SVGPath($d, 'CNZ');
} else {
$this->StartTransform();
$this->SVGTransform($tm);
$obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, 0, 0, 1, 1, 'SVGPath', array($d, 'CNZ'));
if (!empty($obstyle)) {
$this->SVGPath($d, $obstyle);
}
$this->StopTransform();
}
break;
}
// shapes
case 'rect': {
if ($invisible) {
break;
}
$x = (isset($attribs['x'])?$this->getHTMLUnitToUnits($attribs['x'], 0, $this->svgunit, false):0);
$y = (isset($attribs['y'])?$this->getHTMLUnitToUnits($attribs['y'], 0, $this->svgunit, false):0);
$w = (isset($attribs['width'])?$this->getHTMLUnitToUnits($attribs['width'], 0, $this->svgunit, false):0);
$h = (isset($attribs['height'])?$this->getHTMLUnitToUnits($attribs['height'], 0, $this->svgunit, false):0);
$rx = (isset($attribs['rx'])?$this->getHTMLUnitToUnits($attribs['rx'], 0, $this->svgunit, false):0);
$ry = (isset($attribs['ry'])?$this->getHTMLUnitToUnits($attribs['ry'], 0, $this->svgunit, false):$rx);
if ($clipping) {
$this->SVGTransform($tm);
$this->RoundedRectXY($x, $y, $w, $h, $rx, $ry, '1111', 'CNZ', array(), array());
} else {
$this->StartTransform();
$this->SVGTransform($tm);
$obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'RoundedRectXY', array($x, $y, $w, $h, $rx, $ry, '1111', 'CNZ'));
if (!empty($obstyle)) {
$this->RoundedRectXY($x, $y, $w, $h, $rx, $ry, '1111', $obstyle, array(), array());
}
$this->StopTransform();
}
break;
}
case 'circle': {
if ($invisible) {
break;
}
$cx = (isset($attribs['cx'])?$this->getHTMLUnitToUnits($attribs['cx'], 0, $this->svgunit, false):0);
$cy = (isset($attribs['cy'])?$this->getHTMLUnitToUnits($attribs['cy'], 0, $this->svgunit, false):0);
$r = (isset($attribs['r'])?$this->getHTMLUnitToUnits($attribs['r'], 0, $this->svgunit, false):0);
$x = $cx - $r;
$y = $cy - $r;
$w = 2 * $r;
$h = $w;
if ($clipping) {
$this->SVGTransform($tm);
$this->Circle($cx, $cy, $r, 0, 360, 'CNZ', array(), array(), 8);
} else {
$this->StartTransform();
$this->SVGTransform($tm);
$obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'Circle', array($cx, $cy, $r, 0, 360, 'CNZ'));
if (!empty($obstyle)) {
$this->Circle($cx, $cy, $r, 0, 360, $obstyle, array(), array(), 8);
}
$this->StopTransform();
}
break;
}
case 'ellipse': {
if ($invisible) {
break;
}
$cx = (isset($attribs['cx'])?$this->getHTMLUnitToUnits($attribs['cx'], 0, $this->svgunit, false):0);
$cy = (isset($attribs['cy'])?$this->getHTMLUnitToUnits($attribs['cy'], 0, $this->svgunit, false):0);
$rx = (isset($attribs['rx'])?$this->getHTMLUnitToUnits($attribs['rx'], 0, $this->svgunit, false):0);
$ry = (isset($attribs['ry'])?$this->getHTMLUnitToUnits($attribs['ry'], 0, $this->svgunit, false):0);
$x = $cx - $rx;
$y = $cy - $ry;
$w = 2 * $rx;
$h = 2 * $ry;
if ($clipping) {
$this->SVGTransform($tm);
$this->Ellipse($cx, $cy, $rx, $ry, 0, 0, 360, 'CNZ', array(), array(), 8);
} else {
$this->StartTransform();
$this->SVGTransform($tm);
$obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'Ellipse', array($cx, $cy, $rx, $ry, 0, 0, 360, 'CNZ'));
if (!empty($obstyle)) {
$this->Ellipse($cx, $cy, $rx, $ry, 0, 0, 360, $obstyle, array(), array(), 8);
}
$this->StopTransform();
}
break;
}
case 'line': {
if ($invisible) {
break;
}
$x1 = (isset($attribs['x1'])?$this->getHTMLUnitToUnits($attribs['x1'], 0, $this->svgunit, false):0);
$y1 = (isset($attribs['y1'])?$this->getHTMLUnitToUnits($attribs['y1'], 0, $this->svgunit, false):0);
$x2 = (isset($attribs['x2'])?$this->getHTMLUnitToUnits($attribs['x2'], 0, $this->svgunit, false):0);
$y2 = (isset($attribs['y2'])?$this->getHTMLUnitToUnits($attribs['y2'], 0, $this->svgunit, false):0);
$x = $x1;
$y = $y1;
$w = abs($x2 - $x1);
$h = abs($y2 - $y1);
if (!$clipping) {
$this->StartTransform();
$this->SVGTransform($tm);
$obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'Line', array($x1, $y1, $x2, $y2));
$this->Line($x1, $y1, $x2, $y2);
$this->StopTransform();
}
break;
}
case 'polyline':
case 'polygon': {
if ($invisible) {
break;
}
$points = (isset($attribs['points'])?$attribs['points']:'0 0');
$points = trim($points);
// note that point may use a complex syntax not covered here
$points = preg_split('/[\,\s]+/si', $points);
if (count($points) < 4) {
break;
}
$p = array();
$xmin = 2147483647;
$xmax = 0;
$ymin = 2147483647;
$ymax = 0;
foreach ($points as $key => $val) {
$p[$key] = $this->getHTMLUnitToUnits($val, 0, $this->svgunit, false);
if (($key % 2) == 0) {
// X coordinate
$xmin = min($xmin, $p[$key]);
$xmax = max($xmax, $p[$key]);
} else {
// Y coordinate
$ymin = min($ymin, $p[$key]);
$ymax = max($ymax, $p[$key]);
}
}
$x = $xmin;
$y = $ymin;
$w = ($xmax - $xmin);
$h = ($ymax - $ymin);
if ($name == 'polyline') {
$this->StartTransform();
$this->SVGTransform($tm);
$obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'PolyLine', array($p, 'CNZ'));
$this->PolyLine($p, 'D', array(), array());
$this->StopTransform();
} else { // polygon
if ($clipping) {
$this->SVGTransform($tm);
$this->Polygon($p, 'CNZ', array(), array(), true);
} else {
$this->StartTransform();
$this->SVGTransform($tm);
$obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'Polygon', array($p, 'CNZ'));
if (!empty($obstyle)) {
$this->Polygon($p, $obstyle, array(), array(), true);
}
$this->StopTransform();
}
}
break;
}
// image
case 'image': {
if ($invisible) {
break;
}
if (!isset($attribs['xlink:href']) OR empty($attribs['xlink:href'])) {
break;
}
$x = (isset($attribs['x'])?$this->getHTMLUnitToUnits($attribs['x'], 0, $this->svgunit, false):0);
$y = (isset($attribs['y'])?$this->getHTMLUnitToUnits($attribs['y'], 0, $this->svgunit, false):0);
$w = (isset($attribs['width'])?$this->getHTMLUnitToUnits($attribs['width'], 0, $this->svgunit, false):0);
$h = (isset($attribs['height'])?$this->getHTMLUnitToUnits($attribs['height'], 0, $this->svgunit, false):0);
$img = $attribs['xlink:href'];
if (!$clipping) {
$this->StartTransform();
$this->SVGTransform($tm);
$obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h);
// fix image path
if (!$this->empty_string($this->svgdir) AND (($img{0} == '.') OR (basename($img) == $img))) {
// replace relative path with full server path
$img = $this->svgdir.'/'.$img;
}
if (($img{0} == '/') AND ($_SERVER['DOCUMENT_ROOT'] != '/')) {
$findroot = strpos($img, $_SERVER['DOCUMENT_ROOT']);
if (($findroot === false) OR ($findroot > 1)) {
// replace relative path with full server path
$img = $_SERVER['DOCUMENT_ROOT'].$img;
}
}
$img = urldecode($img);
$testscrtype = @parse_url($img);
if (!isset($testscrtype['query']) OR empty($testscrtype['query'])) {
// convert URL to server path
$img = str_replace(K_PATH_URL, K_PATH_MAIN, $img);
}
$this->Image($img, $x, $y, $w, $h);
$this->StopTransform();
}
break;
}
// text
case 'text':
case 'tspan': {
$this->svgtextmode['invisible'] = $invisible;
if ($invisible) {
break;
}
array_push($this->svgstyles, $svgstyle);
// only basic support - advanced features must be implemented
$x = (isset($attribs['x'])?$this->getHTMLUnitToUnits($attribs['x'], 0, $this->svgunit, false):$this->x);
$y = (isset($attribs['y'])?$this->getHTMLUnitToUnits($attribs['y'], 0, $this->svgunit, false):$this->y);
$svgstyle['text-color'] = $svgstyle['fill'];
$this->svgtext = '';
if (isset($svgstyle['text-anchor'])) {
$this->svgtextmode['text-anchor'] = $svgstyle['text-anchor'];
} else {
$this->svgtextmode['text-anchor'] = 'start';
}
if (isset($svgstyle['direction'])) {
if ($svgstyle['direction'] == 'rtl') {
$this->svgtextmode['rtl'] = true;
} else {
$this->svgtextmode['rtl'] = false;
}
} else {
$this->svgtextmode['rtl'] = false;
}
if (isset($svgstyle['stroke']) AND ($svgstyle['stroke'] != 'none') AND isset($svgstyle['stroke-width']) AND ($svgstyle['stroke-width'] > 0)) {
$this->svgtextmode['stroke'] = $this->getHTMLUnitToUnits($svgstyle['stroke-width'], 0, $this->svgunit, false);
} else {
$this->svgtextmode['stroke'] = false;
}
$this->StartTransform();
$this->SVGTransform($tm);
$obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, 1, 1);
$this->x = $x;
$this->y = $y;
break;
}
// use
case 'use': {
if (isset($attribs['xlink:href'])) {
$use = $this->svgdefs[substr($attribs['xlink:href'], 1)];
if (isset($attribs['xlink:href'])) {
unset($attribs['xlink:href']);
}
if (isset($attribs['id'])) {
unset($attribs['id']);
}
$attribs = array_merge($use['attribs'], $attribs);
$this->startSVGElementHandler($parser, $use['name'], $use['attribs']);
}
break;
}
default: {
break;
}
} // end of switch
}
TCPDF::startTemplate (   $w = 0,
  $h = 0 
)

Start a new XObject Template.

An XObject Template is a PDF block that is a self-contained description of any sequence of graphics objects (including path objects, text objects, and sampled images). An XObject Template may be painted multiple times, either on several pages or at several locations on the same page and produces the same results each time, subject only to the graphics state at the time it is invoked. Note: X,Y coordinates will be reset to 0,0.

Parameters
int$wTemplate width in user units (empty string or zero = page width less margins)
int$hTemplate height in user units (empty string or zero = page height less margins)
Returns
int the XObject Template ID in case of success or false in case of error.
Author
Nicola Asuni public
Since
5.8.017 (2010-08-24)
See Also
endTemplate(), printTemplate()

Definition at line 23620 of file tcpdf.php.

References n.

{
if ($this->inxobj) {
// we are already inside an XObject template
return false;
}
$this->inxobj = true;
// XObject ID
$this->xobjid = 'XT'.$this->n;
// object ID
$this->xobjects[$this->xobjid] = array('n' => $this->n);
// store current graphic state
$this->xobjects[$this->xobjid]['gvars'] = $this->getGraphicVars();
// initialize data
$this->xobjects[$this->xobjid]['intmrk'] = 0;
$this->xobjects[$this->xobjid]['transfmrk'] = array();
$this->xobjects[$this->xobjid]['outdata'] = '';
$this->xobjects[$this->xobjid]['xobjects'] = array();
$this->xobjects[$this->xobjid]['images'] = array();
$this->xobjects[$this->xobjid]['fonts'] = array();
$this->xobjects[$this->xobjid]['annotations'] = array();
// set new environment
$this->num_columns = 1;
$this->current_column = 0;
$this->SetAutoPageBreak(false);
if (($w === '') OR ($w <= 0)) {
$w = $this->w - $this->lMargin - $this->rMargin;
}
if (($h === '') OR ($h <= 0)) {
$h = $this->h - $this->tMargin - $this->bMargin;
}
$this->xobjects[$this->xobjid]['x'] = 0;
$this->xobjects[$this->xobjid]['y'] = 0;
$this->xobjects[$this->xobjid]['w'] = $w;
$this->xobjects[$this->xobjid]['h'] = $h;
$this->w = $w;
$this->h = $h;
$this->wPt = $this->w * $this->k;
$this->hPt = $this->h * $this->k;
$this->fwPt = $this->wPt;
$this->fhPt = $this->hPt;
$this->x = 0;
$this->y = 0;
$this->lMargin = 0;
$this->rMargin = 0;
$this->tMargin = 0;
$this->bMargin = 0;
return $this->xobjid;
}
TCPDF::startTransaction ( )

Stores a copy of the current TCPDF object used for undo operation.

public

Since
4.5.029 (2009-03-19)

Definition at line 22927 of file tcpdf.php.

References $y.

{
if (isset($this->objcopy)) {
// remove previous copy
}
// record current page number and Y position
$this->start_transaction_page = $this->page;
$this->start_transaction_y = $this->y;
// clone current object
$this->objcopy = $this->objclone($this);
}
TCPDF::StartTransform ( )

Starts a 2D tranformation saving current graphic state.

This function must be called before scaling, mirroring, translation, rotation and skewing. Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior. public

Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12138 of file tcpdf.php.

{
$this->_out('q');
if ($this->inxobj) {
// we are inside an XObject template
$this->xobjects[$this->xobjid]['transfmrk'][] = strlen($this->xobjects[$this->xobjid]['outdata']);
} else {
$this->transfmrk[$this->page][] = $this->pagelen[$this->page];
}
$this->transfmatrix[$this->transfmatrix_key] = array();
}
TCPDF::StopTransform ( )

Stops a 2D tranformation restoring previous graphic state.

This function must be called after scaling, mirroring, translation, rotation and skewing. Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior. public

Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12158 of file tcpdf.php.

{
$this->_out('Q');
if (isset($this->transfmatrix[$this->transfmatrix_key])) {
array_pop($this->transfmatrix[$this->transfmatrix_key]);
}
if ($this->inxobj) {
// we are inside an XObject template
array_pop($this->xobjects[$this->xobjid]['transfmrk']);
} else {
array_pop($this->transfmrk[$this->page]);
}
}
TCPDF::stringLeftTrim (   $str,
  $replace = '' 
)

Left trim the input string.

Parameters
string$strstring to trim
string$replacestring that replace spaces.
Returns
left trimmed string
Author
Nicola Asuni public
Since
5.8.000 (2010-08-11)

Definition at line 23527 of file tcpdf.php.

{
return preg_replace('/^'.$this->re_space['p'].'+/'.$this->re_space['m'], $replace, $str);
}
TCPDF::stringRightTrim (   $str,
  $replace = '' 
)

Right trim the input string.

Parameters
string$strstring to trim
string$replacestring that replace spaces.
Returns
right trimmed string
Author
Nicola Asuni public
Since
5.8.000 (2010-08-11)

Definition at line 23540 of file tcpdf.php.

Referenced by Write().

{
return preg_replace('/'.$this->re_space['p'].'+$/'.$this->re_space['m'], $replace, $str);
}

+ Here is the caller graph for this function:

TCPDF::stringTrim (   $str,
  $replace = '' 
)

Trim the input string.

Parameters
string$strstring to trim
string$replacestring that replace spaces.
Returns
trimmed string
Author
Nicola Asuni public
Since
5.8.000 (2010-08-11)

Definition at line 23553 of file tcpdf.php.

{
$str = $this->stringLeftTrim($str, $replace);
$str = $this->stringRightTrim($str, $replace);
return $str;
}
TCPDF::SVGPath (   $d,
  $style = '' 
)
protected

Draws an SVG path.

Parameters
string$dattribute d of the path SVG element
string$styleStyle of rendering. Possible values are:
  • D or empty string: Draw (default).
  • F: Fill.
  • F*: Fill using the even-odd rule to determine which regions lie inside the clipping path.
  • DF or FD: Draw and fill.
  • DF* or FD*: Draw and fill using the even-odd rule to determine which regions lie inside the clipping path.
  • CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).
  • CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).
Returns
array of container box measures (x, y, w, h)
Author
Nicola Asuni
Since
5.0.000 (2010-05-02) protected

Definition at line 24749 of file tcpdf.php.

References $cmd, $d, $x, and $y.

{
// set fill/stroke style
$op = $this->getPathPaintOperator($style, '');
if (empty($op)) {
return;
}
$paths = array();
$d = str_replace('-', ' -', $d);
$d = str_replace('+', ' +', $d);
preg_match_all('/([a-zA-Z])[\s]*([^a-zA-Z\"]*)/si', $d, $paths, PREG_SET_ORDER);
$x = 0;
$y = 0;
$x1 = 0;
$y1 = 0;
$x2 = 0;
$y2 = 0;
$xmin = 2147483647;
$xmax = 0;
$ymin = 2147483647;
$ymax = 0;
$relcoord = false;
// draw curve pieces
foreach ($paths as $key => $val) {
// get curve type
$cmd = trim($val[1]);
if (strtolower($cmd) == $cmd) {
// use relative coordinated instead of absolute
$relcoord = true;
$xoffset = $x;
$yoffset = $y;
} else {
$relcoord = false;
$xoffset = 0;
$yoffset = 0;
}
$params = array();
if (isset($val[2])) {
// get curve parameters
$rawparams = preg_split('/([\,\s]+)/si', trim($val[2]));
$params = array();
foreach ($rawparams as $ck => $cp) {
$params[$ck] = $this->getHTMLUnitToUnits($cp, 0, $this->svgunit, false);
}
}
switch (strtoupper($cmd)) {
case 'M': { // moveto
foreach ($params as $ck => $cp) {
if (($ck % 2) == 0) {
$x = $cp + $xoffset;
} else {
$y = $cp + $yoffset;
if ($ck == 1) {
$this->_outPoint($x, $y);
} else {
$this->_outLine($x, $y);
}
$xmin = min($xmin, $x);
$ymin = min($ymin, $y);
$xmax = max($xmax, $x);
$ymax = max($ymax, $y);
if ($relcoord) {
$xoffset = $x;
$yoffset = $y;
}
}
}
break;
}
case 'L': { // lineto
foreach ($params as $ck => $cp) {
if (($ck % 2) == 0) {
$x = $cp + $xoffset;
} else {
$y = $cp + $yoffset;
$this->_outLine($x, $y);
$xmin = min($xmin, $x);
$ymin = min($ymin, $y);
$xmax = max($xmax, $x);
$ymax = max($ymax, $y);
if ($relcoord) {
$xoffset = $x;
$yoffset = $y;
}
}
}
break;
}
case 'H': { // horizontal lineto
foreach ($params as $ck => $cp) {
$x = $cp + $xoffset;
$this->_outLine($x, $y);
$xmin = min($xmin, $x);
$xmax = max($xmax, $x);
if ($relcoord) {
$xoffset = $x;
}
}
break;
}
case 'V': { // vertical lineto
foreach ($params as $ck => $cp) {
$y = $cp + $yoffset;
$this->_outLine($x, $y);
$ymin = min($ymin, $y);
$ymax = max($ymax, $y);
if ($relcoord) {
$yoffset = $y;
}
}
break;
}
case 'C': { // curveto
foreach ($params as $ck => $cp) {
$params[$ck] = $cp;
if ((($ck + 1) % 6) == 0) {
$x1 = $params[($ck - 5)] + $xoffset;
$y1 = $params[($ck - 4)] + $yoffset;
$x2 = $params[($ck - 3)] + $xoffset;
$y2 = $params[($ck - 2)] + $yoffset;
$x = $params[($ck - 1)] + $xoffset;
$y = $params[($ck)] + $yoffset;
$this->_outCurve($x1, $y1, $x2, $y2, $x, $y);
$xmin = min($xmin, $x, $x1, $x2);
$ymin = min($ymin, $y, $y1, $y2);
$xmax = max($xmax, $x, $x1, $x2);
$ymax = max($ymax, $y, $y1, $y2);
if ($relcoord) {
$xoffset = $x;
$yoffset = $y;
}
}
}
break;
}
case 'S': { // shorthand/smooth curveto
foreach ($params as $ck => $cp) {
$params[$ck] = $cp;
if ((($ck + 1) % 4) == 0) {
if (($key > 0) AND ((strtoupper($paths[($key - 1)][1]) == 'C') OR (strtoupper($paths[($key - 1)][1]) == 'S'))) {
$x1 = (2 * $x) - $x2;
$y1 = (2 * $y) - $y2;
} else {
$x1 = $x;
$y1 = $y;
}
$x2 = $params[($ck - 3)] + $xoffset;
$y2 = $params[($ck - 2)] + $yoffset;
$x = $params[($ck - 1)] + $xoffset;
$y = $params[($ck)] + $yoffset;
$this->_outCurve($x1, $y1, $x2, $y2, $x, $y);
$xmin = min($xmin, $x, $x1, $x2);
$ymin = min($ymin, $y, $y1, $y2);
$xmax = max($xmax, $x, $x1, $x2);
$ymax = max($ymax, $y, $y1, $y2);
if ($relcoord) {
$xoffset = $x;
$yoffset = $y;
}
}
}
break;
}
case 'Q': { // quadratic Bézier curveto
foreach ($params as $ck => $cp) {
$params[$ck] = $cp;
if ((($ck + 1) % 4) == 0) {
// convert quadratic points to cubic points
$x1 = $params[($ck - 3)] + $xoffset;
$y1 = $params[($ck - 2)] + $yoffset;
$xa = ($x + (2 * $x1)) / 3;
$ya = ($y + (2 * $y1)) / 3;
$x = $params[($ck - 1)] + $xoffset;
$y = $params[($ck)] + $yoffset;
$xb = ($x + (2 * $x1)) / 3;
$yb = ($y + (2 * $y1)) / 3;
$this->_outCurve($xa, $ya, $xb, $yb, $x, $y);
$xmin = min($xmin, $x, $xa, $xb);
$ymin = min($ymin, $y, $ya, $yb);
$xmax = max($xmax, $x, $xa, $xb);
$ymax = max($ymax, $y, $ya, $yb);
if ($relcoord) {
$xoffset = $x;
$yoffset = $y;
}
}
}
break;
}
case 'T': { // shorthand/smooth quadratic Bézier curveto
foreach ($params as $ck => $cp) {
$params[$ck] = $cp;
if (($ck % 2) != 0) {
if (($key > 0) AND ((strtoupper($paths[($key - 1)][1]) == 'Q') OR (strtoupper($paths[($key - 1)][1]) == 'T'))) {
$x1 = (2 * $x) - $x1;
$y1 = (2 * $y) - $y1;
} else {
$x1 = $x;
$y1 = $y;
}
// convert quadratic points to cubic points
$xa = ($x + (2 * $x1)) / 3;
$ya = ($y + (2 * $y1)) / 3;
$x = $params[($ck - 1)] + $xoffset;
$y = $params[($ck)] + $yoffset;
$xb = ($x + (2 * $x1)) / 3;
$yb = ($y + (2 * $y1)) / 3;
$this->_outCurve($xa, $ya, $xb, $yb, $x, $y);
$xmin = min($xmin, $x, $x1, $x2);
$ymin = min($ymin, $y, $y1, $y2);
$xmax = max($xmax, $x, $x1, $x2);
$ymax = max($ymax, $y, $y1, $y2);
if ($relcoord) {
$xoffset = $x;
$yoffset = $y;
}
}
}
break;
}
case 'A': { // elliptical arc
foreach ($params as $ck => $cp) {
$params[$ck] = $cp;
if ((($ck + 1) % 7) == 0) {
$x0 = $x;
$y0 = $y;
$rx = abs($params[($ck - 6)]);
$ry = abs($params[($ck - 5)]);
$ang = -$rawparams[($ck - 4)];
$angle = deg2rad($ang);
$fa = $rawparams[($ck - 3)]; // large-arc-flag
$fs = $rawparams[($ck - 2)]; // sweep-flag
$x = $params[($ck - 1)] + $xoffset;
$y = $params[$ck] + $yoffset;
$cos_ang = cos($angle);
$sin_ang = sin($angle);
$a = ($x0 - $x) / 2;
$b = ($y0 - $y) / 2;
$xa = ($a * $cos_ang) - ($b * $sin_ang);
$ya = ($a * $sin_ang) + ($b * $cos_ang);
$rx2 = $rx * $rx;
$ry2 = $ry * $ry;
$xa2 = $xa * $xa;
$ya2 = $ya * $ya;
$delta = ($xa2 / $rx2) + ($ya2 / $ry2);
if ($delta > 1) {
$rx *= sqrt($delta);
$ry *= sqrt($delta);
$rx2 = $rx * $rx;
$ry2 = $ry * $ry;
}
$numerator = (($rx2 * $ry2) - ($rx2 * $ya2) - ($ry2 * $xa2));
if ($numerator < 0) {
$root = 0;
} else {
$root = sqrt($numerator / (($rx2 * $ya2) + ($ry2 * $xa2)));
}
if ($fa == $fs) {
$root *= -1;
}
$cax = $root * (($rx * $ya) / $ry);
$cay = -$root * (($ry * $xa) / $rx);
// coordinates of ellipse center
$cx = ($cax * $cos_ang) - ($cay * $sin_ang) + (($x0 + $x) / 2);
$cy = ($cax * $sin_ang) + ($cay * $cos_ang) + (($y0 + $y) / 2);
// get angles
$angs = $this->getVectorsAngle(1, 0, (($xa - $cax) / $rx), (($cay - $ya) / $ry));
$dang = $this->getVectorsAngle((($xa - $cax) / $rx), (($ya - $cay) / $ry), ((-$xa - $cax) / $rx), ((-$ya - $cay) / $ry));
if (($fs == 0) AND ($dang > 0)) {
$dang -= (2 * M_PI);
} elseif (($fs == 1) AND ($dang < 0)) {
$dang += (2 * M_PI);
}
$angf = $angs - $dang;
if (($fs == 1) AND ($angs > $angf)) {
$tmp = $angs;
$angs = $angf;
$angf = $tmp;
}
$angs = rad2deg($angs);
$angf = rad2deg($angf);
$pie = false;
if ((isset($paths[($key + 1)][1])) AND (trim($paths[($key + 1)][1]) == 'z')) {
$pie = true;
}
$this->_outellipticalarc($cx, $cy, $rx, $ry, $ang, $angs, $angf, $pie, 2);
$this->_outPoint($x, $y);
$xmin = min($xmin, $x);
$ymin = min($ymin, $y);
$xmax = max($xmax, $x);
$ymax = max($ymax, $y);
if ($relcoord) {
$xoffset = $x;
$yoffset = $y;
}
}
}
break;
}
case 'Z': {
$this->_out('h');
break;
}
}
} // end foreach
if (!empty($op)) {
$this->_out($op);
}
return array($xmin, $ymin, ($xmax - $xmin), ($ymax - $ymin));
}
TCPDF::SVGTransform (   $tm)
protected

Apply SVG graphic transformation matrix.

Parameters
array$tmoriginal SVG transformation matrix protected
Since
5.0.000 (2010-05-02)

Definition at line 24459 of file tcpdf.php.

{
$this->Transform($this->convertSVGtMatrix($tm));
}
TCPDF::swapMargins (   $reverse = true)
protected

Swap the left and right margins.

Parameters
boolean$reverseif true swap left and right margins. protected
Since
4.2.000 (2008-10-29)

Definition at line 21543 of file tcpdf.php.

Referenced by startPage().

{
if ($reverse) {
// swap left and right margins
$this->original_lMargin = $this->original_rMargin;
$this->original_rMargin = $mtemp;
$deltam = $this->original_lMargin - $this->original_rMargin;
$this->lMargin += $deltam;
$this->rMargin -= $deltam;
}
}

+ Here is the caller graph for this function:

TCPDF::swapPageBoxCoordinates (   $page)
protected

Swap X and Y coordinates of page boxes (change page boxes orientation).

Parameters
int$pagepage number protected
Since
5.0.010 (2010-05-17)

Definition at line 2812 of file tcpdf.php.

References $page, and $type.

Referenced by setPageOrientation().

{
$pageboxes = array('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox');
foreach ($pageboxes as $type) {
// swap X and Y coordinates
if (isset($this->pagedim[$page][$type])) {
$tmp = $this->pagedim[$page][$type]['llx'];
$this->pagedim[$page][$type]['llx'] = $this->pagedim[$page][$type]['lly'];
$this->pagedim[$page][$type]['lly'] = $tmp;
$tmp = $this->pagedim[$page][$type]['urx'];
$this->pagedim[$page][$type]['urx'] = $this->pagedim[$page][$type]['ury'];
$this->pagedim[$page][$type]['ury'] = $tmp;
}
}
}

+ Here is the caller graph for this function:

TCPDF::Text (   $x,
  $y,
  $txt,
  $fstroke = false,
  $fclip = false,
  $ffill = true,
  $border = 0,
  $ln = 0,
  $align = '',
  $fill = false,
  $link = '',
  $stretch = 0,
  $ignore_min_height = false,
  $calign = 'T',
  $valign = 'M',
  $rtloff = false 
)

Prints a text cell at the specified position.

The origin is on the left of the first charcter, on the baseline. This method allows to place a string precisely on the page.

Parameters
float$xAbscissa of the cell origin
float$yOrdinate of the cell origin
string$txtString to print
int$fstrokeoutline size in user units (false = disable)
boolean$fclipif true activate clipping mode (you must call StartTransform() before this function and StopTransform() to stop the clipping tranformation).
boolean$ffillif true fills the text
mixed$borderIndicates if borders must be drawn around the cell. The value can be a number:
  • 0: no border (default)
  • 1: frame
or a string containing some or all of the following characters (in any order):
  • L: left
  • T: top
  • R: right
  • B: bottom
or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
int$lnIndicates where the current position should go after the call. Possible values are:
  • 0: to the right (or left for RTL languages)
  • 1: to the beginning of the next line
  • 2: below
Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
string$alignAllows to center or align the text. Possible values are:
  • L or empty string: left align (default value)
  • C: center
  • R: right align
  • J: justify
boolean$fillIndicates if the cell background must be painted (true) or transparent (false).
mixed$linkURL or identifier returned by AddLink().
int$stretchfont stretch mode:
  • 0 = disabled
  • 1 = horizontal scaling only if text is larger than cell width
  • 2 = forced horizontal scaling to fit cell width
  • 3 = character spacing only if text is larger than cell width
  • 4 = forced character spacing to fit cell width
General font stretching and scaling values will be preserved when possible.
boolean$ignore_min_heightif true ignore automatic minimum height value.
string$caligncell vertical alignment relative to the specified Y value. Possible values are:
  • T : cell top
  • A : font top
  • L : font baseline
  • D : font bottom
  • B : cell bottom
string$valigntext vertical alignment inside the cell. Possible values are:
  • T : top
  • C : center
  • B : bottom
boolean$rtloffif true uses the page top-left corner as origin of axis for $x and $y initial position. public
Since
1.0
See Also
Cell(), Write(), MultiCell(), WriteHTML(), WriteHTMLCell()

Definition at line 5161 of file tcpdf.php.

References $textrendermode, $textstrokewidth, $x, $y, Cell(), setTextRenderingMode(), and SetXY().

{
$this->setTextRenderingMode($fstroke, $ffill, $fclip);
$this->SetXY($x, $y, $rtloff);
$this->Cell(0, 0, $txt, $border, $ln, $align, $fill, $link, $stretch, $ignore_min_height, $calign, $valign);
// restore previous rendering mode
$this->textrendermode = $textrendermode;
$this->textstrokewidth = $textstrokewidth;
}

+ Here is the call graph for this function:

TCPDF::TextField (   $name,
  $w,
  $h,
  $prop = array(),
  $opt = array(),
  $x = '',
  $y = '',
  $js = false 
)

Creates a text field.

Parameters
string$namefield name
float$wWidth of the rectangle
float$hHeight of the rectangle
array$propjavascript field properties. Possible values are described on official Javascript for Acrobat API reference.
array$optannotation parameters. Possible values are described on official PDF32000_2008 reference.
float$xAbscissa of the upper-left corner of the rectangle
float$yOrdinate of the upper-left corner of the rectangle
boolean$jsif true put the field using JavaScript (requires Acrobat Writer to be rendered). public
Author
Nicola Asuni
Since
4.8.000 (2009-09-07)

Definition at line 14558 of file tcpdf.php.

References $name, $x, and $y.

{
if ($x === '') {
}
if ($y === '') {
}
// check page for no-write regions and adapt page margins if necessary
$this->checkPageRegions($h, $x, $y);
if ($js) {
$this->_addfield('text', $name, $x, $y, $w, $h, $prop);
return;
}
// get default style
$prop = array_merge($this->getFormDefaultProp(), $prop);
// get annotation data
$popt = $this->getAnnotOptFromJSProp($prop);
// set default appearance stream
$this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i'];
$fontstyle = sprintf('/F%d %.2F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor);
$popt['da'] = $fontstyle;
$popt['ap'] = array();
$popt['ap']['n'] = 'q BT '.$fontstyle.' ET Q';
// merge options
$opt = array_merge($popt, $opt);
// remove some conflicting options
unset($opt['bs']);
// set remaining annotation data
$opt['Subtype'] = 'Widget';
$opt['ft'] = 'Tx';
$opt['t'] = $name;
/*
Additional annotation's parameters (check _putannotsobj() method):
//$opt['f']
//$opt['ap']
//$opt['as']
//$opt['bs']
//$opt['be']
//$opt['c']
//$opt['border']
//$opt['h']
//$opt['mk']
//$opt['mk']['r']
//$opt['mk']['bc']
//$opt['mk']['bg']
//$opt['mk']['ca']
//$opt['mk']['rc']
//$opt['mk']['ac']
//$opt['mk']['i']
//$opt['mk']['ri']
//$opt['mk']['ix']
//$opt['mk']['if']
//$opt['mk']['if']['sw']
//$opt['mk']['if']['s']
//$opt['mk']['if']['a']
//$opt['mk']['if']['fb']
//$opt['mk']['tp']
//$opt['tu']
//$opt['tm']
//$opt['ff']
//$opt['v']
//$opt['dv']
//$opt['a']
//$opt['aa']
//$opt['q']
*/
$this->Annotation($x, $y, $w, $h, $name, $opt, 0);
if ($this->rtl) {
$this->x -= $w;
} else {
$this->x += $w;
}
}
TCPDF::Transform (   $tm)
protected

Apply graphic transformations.

Parameters
array$tmtransformation matrix protected
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12434 of file tcpdf.php.

{
$this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $tm[0], $tm[1], $tm[2], $tm[3], $tm[4], $tm[5]));
// add tranformation matrix
$this->transfmatrix[$this->transfmatrix_key][] = array('a' => $tm[0], 'b' => $tm[1], 'c' => $tm[2], 'd' => $tm[3], 'e' => $tm[4], 'f' => $tm[5]);
// update transformation mark
if ($this->inxobj) {
// we are inside an XObject template
if (end($this->xobjects[$this->xobjid]['transfmrk']) !== false) {
$key = key($this->xobjects[$this->xobjid]['transfmrk']);
$this->xobjects[$this->xobjid]['transfmrk'][$key] = strlen($this->xobjects[$this->xobjid]['outdata']);
}
} elseif (end($this->transfmrk[$this->page]) !== false) {
$key = key($this->transfmrk[$this->page]);
$this->transfmrk[$this->page][$key] = $this->pagelen[$this->page];
}
}
TCPDF::Translate (   $t_x,
  $t_y 
)

Translate graphic object horizontally and vertically.

Parameters
int$t_xmovement to the right
int$t_ymovement to the bottom public
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12324 of file tcpdf.php.

{
//calculate elements of transformation matrix
$tm = array();
$tm[0] = 1;
$tm[1] = 0;
$tm[2] = 0;
$tm[3] = 1;
$tm[4] = $t_x * $this->k;
$tm[5] = -$t_y * $this->k;
//translate the coordinate system
$this->Transform($tm);
}
TCPDF::TranslateX (   $t_x)

Translate graphic object horizontally.

Parameters
int$t_xmovement to the right (or left for RTL) public
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12301 of file tcpdf.php.

{
$this->Translate($t_x, 0);
}
TCPDF::TranslateY (   $t_y)

Translate graphic object vertically.

Parameters
int$t_ymovement to the bottom public
Since
2.1.000 (2008-01-07)
See Also
StartTransform(), StopTransform()

Definition at line 12312 of file tcpdf.php.

{
$this->Translate(0, $t_y);
}
TCPDF::unhtmlentities (   $text_to_convert)

Reverse function for htmlentities.

Convert entities in UTF-8.

Parameters
string$text_to_convertText to convert.
Returns
string converted text string public

Definition at line 11409 of file tcpdf.php.

{
return html_entity_decode($text_to_convert, ENT_QUOTES, $this->encoding);
}
TCPDF::UniArrSubString (   $uniarr,
  $start = '',
  $end = '' 
)

Extract a slice of the $uniarr array and return it as string.

Parameters
string$uniarrThe input array of characters.
int$startthe starting element of $strarr.
int$endfirst element that will not be returned.
Returns
Return part of a string public
Since
4.5.037 (2009-04-07)

Definition at line 6874 of file tcpdf.php.

Referenced by Write().

{
if (strlen($start) == 0) {
$start = 0;
}
if (strlen($end) == 0) {
$end = count($uniarr);
}
$string = '';
for ($i=$start; $i < $end; ++$i) {
$string .= $uniarr[$i];
}
return $string;
}

+ Here is the caller graph for this function:

TCPDF::unichr (   $c)

Returns the unicode caracter specified by UTF-8 value.

Parameters
int$cUTF-8 value
Returns
Returns the specified character.
Author
Miguel Perez, Nicola Asuni public
Since
2.3.000 (2008-03-05)

Definition at line 6907 of file tcpdf.php.

Referenced by getNumLines(), UTF8ArrSubString(), and Write().

{
if (!$this->isunicode) {
return chr($c);
} elseif ($c <= 0x7F) {
// one byte
return chr($c);
} elseif ($c <= 0x7FF) {
// two bytes
return chr(0xC0 | $c >> 6).chr(0x80 | $c & 0x3F);
} elseif ($c <= 0xFFFF) {
// three bytes
return chr(0xE0 | $c >> 12).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F);
} elseif ($c <= 0x10FFFF) {
// four bytes
return chr(0xF0 | $c >> 18).chr(0x80 | $c >> 12 & 0x3F).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F);
} else {
return '';
}
}

+ Here is the caller graph for this function:

TCPDF::UTF8ArrayToUniArray (   $ta)

Convert an array of UTF8 values to array of unicode characters.

Parameters
string$taThe input array of UTF8 values.
Returns
Return array of unicode characters public
Since
4.5.037 (2009-04-07)

Definition at line 6895 of file tcpdf.php.

Referenced by Write().

{
return array_map(array($this, 'unichr'), $ta);
}

+ Here is the caller graph for this function:

TCPDF::UTF8ArrSubString (   $strarr,
  $start = '',
  $end = '' 
)

Extract a slice of the $strarr array and return it as string.

Parameters
string$strarrThe input array of characters.
int$startthe starting element of $strarr.
int$endfirst element that will not be returned.
Returns
Return part of a string public

Definition at line 6851 of file tcpdf.php.

References unichr().

{
if (strlen($start) == 0) {
$start = 0;
}
if (strlen($end) == 0) {
$end = count($strarr);
}
$string = '';
for ($i=$start; $i < $end; ++$i) {
$string .= $this->unichr($strarr[$i]);
}
return $string;
}

+ Here is the call graph for this function:

TCPDF::UTF8ArrToLatin1 (   $unicode)
protected

Converts UTF-8 characters array to array of Latin1 characters

Parameters
array$unicodearray containing UTF-8 unicode values
Returns
array
Author
Nicola Asuni protected
Since
4.8.023 (2010-01-15)

Definition at line 11125 of file tcpdf.php.

Referenced by GetArrStringWidth().

{
if ((!$this->isunicode) OR $this->isUnicodeFont()) {
return $unicode;
}
$outarr = array(); // array to be returned
foreach ($unicode as $char) {
if ($char < 256) {
$outarr[] = $char;
} elseif (array_key_exists($char, $this->unicode->uni_utf8tolatin)) {
// map from UTF-8
$outarr[] = $this->unicode->uni_utf8tolatin[$char];
} elseif ($char == 0xFFFD) {
// skip
} else {
$outarr[] = 63; // '?' character
}
}
return $outarr;
}

+ Here is the caller graph for this function:

TCPDF::utf8Bidi (   $ta,
  $str = '',
  $forcertl = false 
)
protected

Reverse the RLT substrings using the Bidirectional Algorithm (http://unicode.org/reports/tr9/).

Parameters
array$taarray of characters composing the string.
string$strstring to process
bool$forcertlif 'R' forces RTL, if 'L' forces LTR
Returns
array of unicode chars
Author
Nicola Asuni protected
Since
2.4.000 (2008-03-06)

Definition at line 13339 of file tcpdf.php.

References $cw, $type, and $x.

Referenced by __construct(), getCellCode(), getNumLines(), GetStringWidth(), and Write().

{
// paragraph embedding level
$pel = 0;
// max level
$maxlevel = 0;
if ($this->empty_string($str)) {
// create string from array
$str = $this->UTF8ArrSubString($ta);
}
// check if string contains arabic text
if (preg_match($this->unicode->uni_RE_PATTERN_ARABIC, $str)) {
$arabic = true;
} else {
$arabic = false;
}
// check if string contains RTL text
if (!($forcertl OR $arabic OR preg_match($this->unicode->uni_RE_PATTERN_RTL, $str))) {
return $ta;
}
// get number of chars
$numchars = count($ta);
if ($forcertl == 'R') {
$pel = 1;
} elseif ($forcertl == 'L') {
$pel = 0;
} else {
// P2. In each paragraph, find the first character of type L, AL, or R.
// P3. If a character is found in P2 and it is of type AL or R, then set the paragraph embedding level to one; otherwise, set it to zero.
for ($i=0; $i < $numchars; ++$i) {
$type = $this->unicode->uni_type[$ta[$i]];
if ($type == 'L') {
$pel = 0;
break;
} elseif (($type == 'AL') OR ($type == 'R')) {
$pel = 1;
break;
}
}
}
// Current Embedding Level
$cel = $pel;
// directional override status
$dos = 'N';
$remember = array();
// start-of-level-run
$sor = $pel % 2 ? 'R' : 'L';
$eor = $sor;
// Array of characters data
$chardata = Array();
// X1. Begin by setting the current embedding level to the paragraph embedding level. Set the directional override status to neutral. Process each character iteratively, applying rules X2 through X9. Only embedding levels from 0 to 61 are valid in this phase.
// In the resolution of levels in rules I1 and I2, the maximum embedding level of 62 can be reached.
for ($i=0; $i < $numchars; ++$i) {
if ($ta[$i] == $this->unicode->uni_RLE) {
// X2. With each RLE, compute the least greater odd embedding level.
// a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to neutral.
// b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status.
$next_level = $cel + ($cel % 2) + 1;
if ($next_level < 62) {
$remember[] = array('num' => $this->unicode->uni_RLE, 'cel' => $cel, 'dos' => $dos);
$cel = $next_level;
$dos = 'N';
$sor = $eor;
$eor = $cel % 2 ? 'R' : 'L';
}
} elseif ($ta[$i] == $this->unicode->uni_LRE) {
// X3. With each LRE, compute the least greater even embedding level.
// a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to neutral.
// b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status.
$next_level = $cel + 2 - ($cel % 2);
if ( $next_level < 62 ) {
$remember[] = array('num' => $this->unicode->uni_LRE, 'cel' => $cel, 'dos' => $dos);
$cel = $next_level;
$dos = 'N';
$sor = $eor;
$eor = $cel % 2 ? 'R' : 'L';
}
} elseif ($ta[$i] == $this->unicode->uni_RLO) {
// X4. With each RLO, compute the least greater odd embedding level.
// a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to right-to-left.
// b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status.
$next_level = $cel + ($cel % 2) + 1;
if ($next_level < 62) {
$remember[] = array('num' => $this->unicode->uni_RLO, 'cel' => $cel, 'dos' => $dos);
$cel = $next_level;
$dos = 'R';
$sor = $eor;
$eor = $cel % 2 ? 'R' : 'L';
}
} elseif ($ta[$i] == $this->unicode->uni_LRO) {
// X5. With each LRO, compute the least greater even embedding level.
// a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to left-to-right.
// b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status.
$next_level = $cel + 2 - ($cel % 2);
if ( $next_level < 62 ) {
$remember[] = array('num' => $this->unicode->uni_LRO, 'cel' => $cel, 'dos' => $dos);
$cel = $next_level;
$dos = 'L';
$sor = $eor;
$eor = $cel % 2 ? 'R' : 'L';
}
} elseif ($ta[$i] == $this->unicode->uni_PDF) {
// X7. With each PDF, determine the matching embedding or override code. If there was a valid matching code, restore (pop) the last remembered (pushed) embedding level and directional override.
if (count($remember)) {
$last = count($remember ) - 1;
if (($remember[$last]['num'] == $this->unicode->uni_RLE) OR
($remember[$last]['num'] == $this->unicode->uni_LRE) OR
($remember[$last]['num'] == $this->unicode->uni_RLO) OR
($remember[$last]['num'] == $this->unicode->uni_LRO)) {
$match = array_pop($remember);
$cel = $match['cel'];
$dos = $match['dos'];
$sor = $eor;
$eor = ($cel > $match['cel'] ? $cel : $match['cel']) % 2 ? 'R' : 'L';
}
}
} elseif (($ta[$i] != $this->unicode->uni_RLE) AND
($ta[$i] != $this->unicode->uni_LRE) AND
($ta[$i] != $this->unicode->uni_RLO) AND
($ta[$i] != $this->unicode->uni_LRO) AND
($ta[$i] != $this->unicode->uni_PDF)) {
// X6. For all types besides RLE, LRE, RLO, LRO, and PDF:
// a. Set the level of the current character to the current embedding level.
// b. Whenever the directional override status is not neutral, reset the current character type to the directional override status.
if ($dos != 'N') {
$chardir = $dos;
} else {
if (isset($this->unicode->uni_type[$ta[$i]])) {
$chardir = $this->unicode->uni_type[$ta[$i]];
} else {
$chardir = 'L';
}
}
// stores string characters and other information
$chardata[] = array('char' => $ta[$i], 'level' => $cel, 'type' => $chardir, 'sor' => $sor, 'eor' => $eor);
}
} // end for each char
// X8. All explicit directional embeddings and overrides are completely terminated at the end of each paragraph. Paragraph separators are not included in the embedding.
// X9. Remove all RLE, LRE, RLO, LRO, PDF, and BN codes.
// X10. The remaining rules are applied to each run of characters at the same level. For each run, determine the start-of-level-run (sor) and end-of-level-run (eor) type, either L or R. This depends on the higher of the two levels on either side of the boundary (at the start or end of the paragraph, the level of the 'other' run is the base embedding level). If the higher level is odd, the type is R; otherwise, it is L.
// 3.3.3 Resolving Weak Types
// Weak types are now resolved one level run at a time. At level run boundaries where the type of the character on the other side of the boundary is required, the type assigned to sor or eor is used.
// Nonspacing marks are now resolved based on the previous characters.
$numchars = count($chardata);
// W1. Examine each nonspacing mark (NSM) in the level run, and change the type of the NSM to the type of the previous character. If the NSM is at the start of the level run, it will get the type of sor.
$prevlevel = -1; // track level changes
$levcount = 0; // counts consecutive chars at the same level
for ($i=0; $i < $numchars; ++$i) {
if ($chardata[$i]['type'] == 'NSM') {
if ($levcount) {
$chardata[$i]['type'] = $chardata[$i]['sor'];
} elseif ($i > 0) {
$chardata[$i]['type'] = $chardata[($i-1)]['type'];
}
}
if ($chardata[$i]['level'] != $prevlevel) {
$levcount = 0;
} else {
++$levcount;
}
$prevlevel = $chardata[$i]['level'];
}
// W2. Search backward from each instance of a European number until the first strong type (R, L, AL, or sor) is found. If an AL is found, change the type of the European number to Arabic number.
$prevlevel = -1;
$levcount = 0;
for ($i=0; $i < $numchars; ++$i) {
if ($chardata[$i]['char'] == 'EN') {
for ($j=$levcount; $j >= 0; $j--) {
if ($chardata[$j]['type'] == 'AL') {
$chardata[$i]['type'] = 'AN';
} elseif (($chardata[$j]['type'] == 'L') OR ($chardata[$j]['type'] == 'R')) {
break;
}
}
}
if ($chardata[$i]['level'] != $prevlevel) {
$levcount = 0;
} else {
++$levcount;
}
$prevlevel = $chardata[$i]['level'];
}
// W3. Change all ALs to R.
for ($i=0; $i < $numchars; ++$i) {
if ($chardata[$i]['type'] == 'AL') {
$chardata[$i]['type'] = 'R';
}
}
// W4. A single European separator between two European numbers changes to a European number. A single common separator between two numbers of the same type changes to that type.
$prevlevel = -1;
$levcount = 0;
for ($i=0; $i < $numchars; ++$i) {
if (($levcount > 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) {
if (($chardata[$i]['type'] == 'ES') AND ($chardata[($i-1)]['type'] == 'EN') AND ($chardata[($i+1)]['type'] == 'EN')) {
$chardata[$i]['type'] = 'EN';
} elseif (($chardata[$i]['type'] == 'CS') AND ($chardata[($i-1)]['type'] == 'EN') AND ($chardata[($i+1)]['type'] == 'EN')) {
$chardata[$i]['type'] = 'EN';
} elseif (($chardata[$i]['type'] == 'CS') AND ($chardata[($i-1)]['type'] == 'AN') AND ($chardata[($i+1)]['type'] == 'AN')) {
$chardata[$i]['type'] = 'AN';
}
}
if ($chardata[$i]['level'] != $prevlevel) {
$levcount = 0;
} else {
++$levcount;
}
$prevlevel = $chardata[$i]['level'];
}
// W5. A sequence of European terminators adjacent to European numbers changes to all European numbers.
$prevlevel = -1;
$levcount = 0;
for ($i=0; $i < $numchars; ++$i) {
if ($chardata[$i]['type'] == 'ET') {
if (($levcount > 0) AND ($chardata[($i-1)]['type'] == 'EN')) {
$chardata[$i]['type'] = 'EN';
} else {
$j = $i+1;
while (($j < $numchars) AND ($chardata[$j]['level'] == $prevlevel)) {
if ($chardata[$j]['type'] == 'EN') {
$chardata[$i]['type'] = 'EN';
break;
} elseif ($chardata[$j]['type'] != 'ET') {
break;
}
++$j;
}
}
}
if ($chardata[$i]['level'] != $prevlevel) {
$levcount = 0;
} else {
++$levcount;
}
$prevlevel = $chardata[$i]['level'];
}
// W6. Otherwise, separators and terminators change to Other Neutral.
$prevlevel = -1;
$levcount = 0;
for ($i=0; $i < $numchars; ++$i) {
if (($chardata[$i]['type'] == 'ET') OR ($chardata[$i]['type'] == 'ES') OR ($chardata[$i]['type'] == 'CS')) {
$chardata[$i]['type'] = 'ON';
}
if ($chardata[$i]['level'] != $prevlevel) {
$levcount = 0;
} else {
++$levcount;
}
$prevlevel = $chardata[$i]['level'];
}
//W7. Search backward from each instance of a European number until the first strong type (R, L, or sor) is found. If an L is found, then change the type of the European number to L.
$prevlevel = -1;
$levcount = 0;
for ($i=0; $i < $numchars; ++$i) {
if ($chardata[$i]['char'] == 'EN') {
for ($j=$levcount; $j >= 0; $j--) {
if ($chardata[$j]['type'] == 'L') {
$chardata[$i]['type'] = 'L';
} elseif ($chardata[$j]['type'] == 'R') {
break;
}
}
}
if ($chardata[$i]['level'] != $prevlevel) {
$levcount = 0;
} else {
++$levcount;
}
$prevlevel = $chardata[$i]['level'];
}
// N1. A sequence of neutrals takes the direction of the surrounding strong text if the text on both sides has the same direction. European and Arabic numbers act as if they were R in terms of their influence on neutrals. Start-of-level-run (sor) and end-of-level-run (eor) are used at level run boundaries.
$prevlevel = -1;
$levcount = 0;
for ($i=0; $i < $numchars; ++$i) {
if (($levcount > 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) {
if (($chardata[$i]['type'] == 'N') AND ($chardata[($i-1)]['type'] == 'L') AND ($chardata[($i+1)]['type'] == 'L')) {
$chardata[$i]['type'] = 'L';
} elseif (($chardata[$i]['type'] == 'N') AND
(($chardata[($i-1)]['type'] == 'R') OR ($chardata[($i-1)]['type'] == 'EN') OR ($chardata[($i-1)]['type'] == 'AN')) AND
(($chardata[($i+1)]['type'] == 'R') OR ($chardata[($i+1)]['type'] == 'EN') OR ($chardata[($i+1)]['type'] == 'AN'))) {
$chardata[$i]['type'] = 'R';
} elseif ($chardata[$i]['type'] == 'N') {
// N2. Any remaining neutrals take the embedding direction
$chardata[$i]['type'] = $chardata[$i]['sor'];
}
} elseif (($levcount == 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) {
// first char
if (($chardata[$i]['type'] == 'N') AND ($chardata[$i]['sor'] == 'L') AND ($chardata[($i+1)]['type'] == 'L')) {
$chardata[$i]['type'] = 'L';
} elseif (($chardata[$i]['type'] == 'N') AND
(($chardata[$i]['sor'] == 'R') OR ($chardata[$i]['sor'] == 'EN') OR ($chardata[$i]['sor'] == 'AN')) AND
(($chardata[($i+1)]['type'] == 'R') OR ($chardata[($i+1)]['type'] == 'EN') OR ($chardata[($i+1)]['type'] == 'AN'))) {
$chardata[$i]['type'] = 'R';
} elseif ($chardata[$i]['type'] == 'N') {
// N2. Any remaining neutrals take the embedding direction
$chardata[$i]['type'] = $chardata[$i]['sor'];
}
} elseif (($levcount > 0) AND ((($i+1) == $numchars) OR (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] != $prevlevel))) {
//last char
if (($chardata[$i]['type'] == 'N') AND ($chardata[($i-1)]['type'] == 'L') AND ($chardata[$i]['eor'] == 'L')) {
$chardata[$i]['type'] = 'L';
} elseif (($chardata[$i]['type'] == 'N') AND
(($chardata[($i-1)]['type'] == 'R') OR ($chardata[($i-1)]['type'] == 'EN') OR ($chardata[($i-1)]['type'] == 'AN')) AND
(($chardata[$i]['eor'] == 'R') OR ($chardata[$i]['eor'] == 'EN') OR ($chardata[$i]['eor'] == 'AN'))) {
$chardata[$i]['type'] = 'R';
} elseif ($chardata[$i]['type'] == 'N') {
// N2. Any remaining neutrals take the embedding direction
$chardata[$i]['type'] = $chardata[$i]['sor'];
}
} elseif ($chardata[$i]['type'] == 'N') {
// N2. Any remaining neutrals take the embedding direction
$chardata[$i]['type'] = $chardata[$i]['sor'];
}
if ($chardata[$i]['level'] != $prevlevel) {
$levcount = 0;
} else {
++$levcount;
}
$prevlevel = $chardata[$i]['level'];
}
// I1. For all characters with an even (left-to-right) embedding direction, those of type R go up one level and those of type AN or EN go up two levels.
// I2. For all characters with an odd (right-to-left) embedding direction, those of type L, EN or AN go up one level.
for ($i=0; $i < $numchars; ++$i) {
$odd = $chardata[$i]['level'] % 2;
if ($odd) {
if (($chardata[$i]['type'] == 'L') OR ($chardata[$i]['type'] == 'AN') OR ($chardata[$i]['type'] == 'EN')) {
$chardata[$i]['level'] += 1;
}
} else {
if ($chardata[$i]['type'] == 'R') {
$chardata[$i]['level'] += 1;
} elseif (($chardata[$i]['type'] == 'AN') OR ($chardata[$i]['type'] == 'EN')) {
$chardata[$i]['level'] += 2;
}
}
$maxlevel = max($chardata[$i]['level'],$maxlevel);
}
// L1. On each line, reset the embedding level of the following characters to the paragraph embedding level:
// 1. Segment separators,
// 2. Paragraph separators,
// 3. Any sequence of whitespace characters preceding a segment separator or paragraph separator, and
// 4. Any sequence of white space characters at the end of the line.
for ($i=0; $i < $numchars; ++$i) {
if (($chardata[$i]['type'] == 'B') OR ($chardata[$i]['type'] == 'S')) {
$chardata[$i]['level'] = $pel;
} elseif ($chardata[$i]['type'] == 'WS') {
$j = $i+1;
while ($j < $numchars) {
if ((($chardata[$j]['type'] == 'B') OR ($chardata[$j]['type'] == 'S')) OR
(($j == ($numchars-1)) AND ($chardata[$j]['type'] == 'WS'))) {
$chardata[$i]['level'] = $pel;
break;
} elseif ($chardata[$j]['type'] != 'WS') {
break;
}
++$j;
}
}
}
// Arabic Shaping
// Cursively connected scripts, such as Arabic or Syriac, require the selection of positional character shapes that depend on adjacent characters. Shaping is logically applied after the Bidirectional Algorithm is used and is limited to characters within the same directional run.
if ($arabic) {
$endedletter = array(1569,1570,1571,1572,1573,1575,1577,1583,1584,1585,1586,1608,1688);
$alfletter = array(1570,1571,1573,1575);
$chardata2 = $chardata;
$laaletter = false;
$charAL = array();
$x = 0;
for ($i=0; $i < $numchars; ++$i) {
if (($this->unicode->uni_type[$chardata[$i]['char']] == 'AL') OR ($chardata[$i]['char'] == 32) OR ($chardata[$i]['char'] == 8204)) {
$charAL[$x] = $chardata[$i];
$charAL[$x]['i'] = $i;
$chardata[$i]['x'] = $x;
++$x;
}
}
$numAL = $x;
for ($i=0; $i < $numchars; ++$i) {
$thischar = $chardata[$i];
if ($i > 0) {
$prevchar = $chardata[($i-1)];
} else {
$prevchar = false;
}
if (($i+1) < $numchars) {
$nextchar = $chardata[($i+1)];
} else {
$nextchar = false;
}
if ($this->unicode->uni_type[$thischar['char']] == 'AL') {
$x = $thischar['x'];
if ($x > 0) {
$prevchar = $charAL[($x-1)];
} else {
$prevchar = false;
}
if (($x+1) < $numAL) {
$nextchar = $charAL[($x+1)];
} else {
$nextchar = false;
}
// if laa letter
if (($prevchar !== false) AND ($prevchar['char'] == 1604) AND (in_array($thischar['char'], $alfletter))) {
$arabicarr = $this->unicode->uni_laa_array;
$laaletter = true;
if ($x > 1) {
$prevchar = $charAL[($x-2)];
} else {
$prevchar = false;
}
} else {
$arabicarr = $this->unicode->uni_arabicsubst;
$laaletter = false;
}
if (($prevchar !== false) AND ($nextchar !== false) AND
(($this->unicode->uni_type[$prevchar['char']] == 'AL') OR ($this->unicode->uni_type[$prevchar['char']] == 'NSM')) AND
(($this->unicode->uni_type[$nextchar['char']] == 'AL') OR ($this->unicode->uni_type[$nextchar['char']] == 'NSM')) AND
($prevchar['type'] == $thischar['type']) AND
($nextchar['type'] == $thischar['type']) AND
($nextchar['char'] != 1567)) {
if (in_array($prevchar['char'], $endedletter)) {
if (isset($arabicarr[$thischar['char']][2])) {
// initial
$chardata2[$i]['char'] = $arabicarr[$thischar['char']][2];
}
} else {
if (isset($arabicarr[$thischar['char']][3])) {
// medial
$chardata2[$i]['char'] = $arabicarr[$thischar['char']][3];
}
}
} elseif (($nextchar !== false) AND
(($this->unicode->uni_type[$nextchar['char']] == 'AL') OR ($this->unicode->uni_type[$nextchar['char']] == 'NSM')) AND
($nextchar['type'] == $thischar['type']) AND
($nextchar['char'] != 1567)) {
if (isset($arabicarr[$chardata[$i]['char']][2])) {
// initial
$chardata2[$i]['char'] = $arabicarr[$thischar['char']][2];
}
} elseif ((($prevchar !== false) AND
(($this->unicode->uni_type[$prevchar['char']] == 'AL') OR ($this->unicode->uni_type[$prevchar['char']] == 'NSM')) AND
($prevchar['type'] == $thischar['type'])) OR
(($nextchar !== false) AND ($nextchar['char'] == 1567))) {
// final
if (($i > 1) AND ($thischar['char'] == 1607) AND
($chardata[$i-1]['char'] == 1604) AND
($chardata[$i-2]['char'] == 1604)) {
//Allah Word
// mark characters to delete with false
$chardata2[$i-2]['char'] = false;
$chardata2[$i-1]['char'] = false;
$chardata2[$i]['char'] = 65010;
} else {
if (($prevchar !== false) AND in_array($prevchar['char'], $endedletter)) {
if (isset($arabicarr[$thischar['char']][0])) {
// isolated
$chardata2[$i]['char'] = $arabicarr[$thischar['char']][0];
}
} else {
if (isset($arabicarr[$thischar['char']][1])) {
// final
$chardata2[$i]['char'] = $arabicarr[$thischar['char']][1];
}
}
}
} elseif (isset($arabicarr[$thischar['char']][0])) {
// isolated
$chardata2[$i]['char'] = $arabicarr[$thischar['char']][0];
}
// if laa letter
if ($laaletter) {
// mark characters to delete with false
$chardata2[($charAL[($x-1)]['i'])]['char'] = false;
}
} // end if AL (Arabic Letter)
} // end for each char
/*
* Combining characters that can occur with Arabic Shadda (0651 HEX, 1617 DEC) are replaced.
* Putting the combining mark and shadda in the same glyph allows us to avoid the two marks overlapping each other in an illegible manner.
*/
$cw = &$this->CurrentFont['cw'];
for ($i = 0; $i < ($numchars-1); ++$i) {
if (($chardata2[$i]['char'] == 1617) AND (isset($this->unicode->uni_diacritics[($chardata2[$i+1]['char'])]))) {
// check if the subtitution font is defined on current font
if (isset($cw[($this->unicode->uni_diacritics[($chardata2[$i+1]['char'])])])) {
$chardata2[$i]['char'] = false;
$chardata2[$i+1]['char'] = $this->unicode->uni_diacritics[($chardata2[$i+1]['char'])];
}
}
}
// remove marked characters
foreach ($chardata2 as $key => $value) {
if ($value['char'] === false) {
unset($chardata2[$key]);
}
}
$chardata = array_values($chardata2);
$numchars = count($chardata);
unset($chardata2);
unset($arabicarr);
unset($laaletter);
unset($charAL);
}
// L2. From the highest level found in the text to the lowest odd level on each line, including intermediate levels not actually present in the text, reverse any contiguous sequence of characters that are at that level or higher.
for ($j=$maxlevel; $j > 0; $j--) {
$ordarray = Array();
$revarr = Array();
$onlevel = false;
for ($i=0; $i < $numchars; ++$i) {
if ($chardata[$i]['level'] >= $j) {
$onlevel = true;
if (isset($this->unicode->uni_mirror[$chardata[$i]['char']])) {
// L4. A character is depicted by a mirrored glyph if and only if (a) the resolved directionality of that character is R, and (b) the Bidi_Mirrored property value of that character is true.
$chardata[$i]['char'] = $this->unicode->uni_mirror[$chardata[$i]['char']];
}
$revarr[] = $chardata[$i];
} else {
if ($onlevel) {
$revarr = array_reverse($revarr);
$ordarray = array_merge($ordarray, $revarr);
$revarr = Array();
$onlevel = false;
}
$ordarray[] = $chardata[$i];
}
}
if ($onlevel) {
$revarr = array_reverse($revarr);
$ordarray = array_merge($ordarray, $revarr);
}
$chardata = $ordarray;
}
$ordarray = array();
for ($i=0; $i < $numchars; ++$i) {
$ordarray[] = $chardata[$i]['char'];
// store char values for subsetting
$this->CurrentFont['subsetchars'][$chardata[$i]['char']] = true;
}
// update font subsetchars
$this->setFontSubBuffer($this->CurrentFont['fontkey'], 'subsetchars', $this->CurrentFont['subsetchars']);
return $ordarray;
}

+ Here is the caller graph for this function:

TCPDF::utf8StrArrRev (   $arr,
  $str = '',
  $setbom = false,
  $forcertl = false 
)
protected

Reverse the RLT substrings array using the Bidirectional Algorithm (http://unicode.org/reports/tr9/).

Parameters
array$arrarray of unicode values.
string$strstring to manipulate (or empty value).
bool$setbomif true set the Byte Order Mark (BOM = 0xFEFF)
bool$forcertlif true forces RTL text direction
Returns
string protected
Author
Nicola Asuni
Since
4.9.000 (2010-03-27)

Definition at line 13325 of file tcpdf.php.

{
return $this->arrUTF8ToUTF16BE($this->utf8Bidi($arr, $str, $forcertl), $setbom);
}
TCPDF::UTF8StringToArray (   $str)
protected

Converts UTF-8 strings to codepoints array.


Invalid byte sequences will be replaced with 0xFFFD (replacement character)
Based on: http://www.faqs.org/rfcs/rfc3629.html

   Char. number range  |        UTF-8 octet sequence
      (hexadecimal)    |              (binary)
   --------------------+-----------------------------------------------
   0000 0000-0000 007F | 0xxxxxxx
   0000 0080-0000 07FF | 110xxxxx 10xxxxxx
   0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
   0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
   ---------------------------------------------------------------------
  ABFN notation:
  ---------------------------------------------------------------------
  UTF8-octets = *( UTF8-char )
  UTF8-char   = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4
  UTF8-1      = x00-7F
  UTF8-2      = xC2-DF UTF8-tail
  UTF8-3      = xE0 xA0-BF UTF8-tail / xE1-EC 2( UTF8-tail ) /
                xED x80-9F UTF8-tail / xEE-EF 2( UTF8-tail )
  UTF8-4      = xF0 x90-BF 2( UTF8-tail ) / xF1-F3 3( UTF8-tail ) /
                xF4 x80-8F 2( UTF8-tail )
  UTF8-tail   = x80-BF
  ---------------------------------------------------------------------
Parameters
string$strstring to process.
Returns
array containing codepoints (UTF-8 characters values) protected
Author
Nicola Asuni
Since
1.53.0.TC005 (2005-01-05)

Definition at line 10961 of file tcpdf.php.

Referenced by getCellCode(), GetNumChars(), getNumLines(), GetStringWidth(), and Write().

{
// build a unique string key
$strkey = md5($str);
if (isset($this->cache_UTF8StringToArray[$strkey])) {
// return cached value
$chrarray = $this->cache_UTF8StringToArray[$strkey]['s'];
if (!isset($this->cache_UTF8StringToArray[$strkey]['f'][$this->CurrentFont['fontkey']])) {
if ($this->isunicode) {
foreach ($chrarray as $chr) {
// store this char for font subsetting
$this->CurrentFont['subsetchars'][$chr] = true;
}
// update font subsetchars
$this->setFontSubBuffer($this->CurrentFont['fontkey'], 'subsetchars', $this->CurrentFont['subsetchars']);
}
$this->cache_UTF8StringToArray[$strkey]['f'][$this->CurrentFont['fontkey']] = true;
}
return $chrarray;
}
// check cache size
if ($this->cache_size_UTF8StringToArray >= $this->cache_maxsize_UTF8StringToArray) {
// remove first element
array_shift($this->cache_UTF8StringToArray);
}
// new cache array for selected string
$this->cache_UTF8StringToArray[$strkey] = array('s' => array(), 'f' => array());
if (!$this->isunicode) {
// split string into array of equivalent codes
$strarr = array();
$strlen = strlen($str);
for ($i=0; $i < $strlen; ++$i) {
$strarr[] = ord($str{$i});
}
// insert new value on cache
$this->cache_UTF8StringToArray[$strkey]['s'] = $strarr;
$this->cache_UTF8StringToArray[$strkey]['f'][$this->CurrentFont['fontkey']] = true;
return $strarr;
}
$unichar = -1; // last unicode char
$unicode = array(); // array containing unicode values
$bytes = array(); // array containing single character byte sequences
$numbytes = 1; // number of octetc needed to represent the UTF-8 character
$str .= ''; // force $str to be a string
$length = strlen($str);
for ($i = 0; $i < $length; ++$i) {
$char = ord($str{$i}); // get one string character at time
if (count($bytes) == 0) { // get starting octect
if ($char <= 0x7F) {
$unichar = $char; // use the character "as is" because is ASCII
$numbytes = 1;
} elseif (($char >> 0x05) == 0x06) { // 2 bytes character (0x06 = 110 BIN)
$bytes[] = ($char - 0xC0) << 0x06;
$numbytes = 2;
} elseif (($char >> 0x04) == 0x0E) { // 3 bytes character (0x0E = 1110 BIN)
$bytes[] = ($char - 0xE0) << 0x0C;
$numbytes = 3;
} elseif (($char >> 0x03) == 0x1E) { // 4 bytes character (0x1E = 11110 BIN)
$bytes[] = ($char - 0xF0) << 0x12;
$numbytes = 4;
} else {
// use replacement character for other invalid sequences
$unichar = 0xFFFD;
$bytes = array();
$numbytes = 1;
}
} elseif (($char >> 0x06) == 0x02) { // bytes 2, 3 and 4 must start with 0x02 = 10 BIN
$bytes[] = $char - 0x80;
if (count($bytes) == $numbytes) {
// compose UTF-8 bytes to a single unicode value
$char = $bytes[0];
for ($j = 1; $j < $numbytes; ++$j) {
$char += ($bytes[$j] << (($numbytes - $j - 1) * 0x06));
}
if ((($char >= 0xD800) AND ($char <= 0xDFFF)) OR ($char >= 0x10FFFF)) {
/* The definition of UTF-8 prohibits encoding character numbers between
U+D800 and U+DFFF, which are reserved for use with the UTF-16
encoding form (as surrogate pairs) and do not directly represent
characters. */
$unichar = 0xFFFD; // use replacement character
} else {
$unichar = $char; // add char to array
}
// reset data for next char
$bytes = array();
$numbytes = 1;
}
} else {
// use replacement character for other invalid sequences
$unichar = 0xFFFD;
$bytes = array();
$numbytes = 1;
}
if ($unichar >= 0) {
// insert unicode value into array
$unicode[] = $unichar;
// store this char for font subsetting
$this->CurrentFont['subsetchars'][$unichar] = true;
$unichar = -1;
}
}
// update font subsetchars
$this->setFontSubBuffer($this->CurrentFont['fontkey'], 'subsetchars', $this->CurrentFont['subsetchars']);
// insert new value on cache
$this->cache_UTF8StringToArray[$strkey]['s'] = $unicode;
$this->cache_UTF8StringToArray[$strkey]['f'][$this->CurrentFont['fontkey']] = true;
return $unicode;
}

+ Here is the caller graph for this function:

TCPDF::utf8StrRev (   $str,
  $setbom = false,
  $forcertl = false 
)
protected

Reverse the RLT substrings using the Bidirectional Algorithm (http://unicode.org/reports/tr9/).

Parameters
string$strstring to manipulate.
bool$setbomif true set the Byte Order Mark (BOM = 0xFEFF)
bool$forcertlif true forces RTL text direction
Returns
string protected
Author
Nicola Asuni
Since
2.1.000 (2008-01-08)

Definition at line 13310 of file tcpdf.php.

{
return $this->utf8StrArrRev($this->UTF8StringToArray($str), $str, $setbom, $forcertl);
}
TCPDF::UTF8ToLatin1 (   $str)
protected

Converts UTF-8 strings to Latin1 when using the standard 14 core fonts.


Parameters
string$strstring to process.
Returns
string
Author
Andrew Whitehead, Nicola Asuni protected
Since
3.2.000 (2008-06-23)

Definition at line 11096 of file tcpdf.php.

Referenced by getCellCode().

{
if (!$this->isunicode) {
return $str; // string is not in unicode
}
$outstr = ''; // string to be returned
$unicode = $this->UTF8StringToArray($str); // array containing UTF-8 unicode values
foreach ($unicode as $char) {
if ($char < 256) {
$outstr .= chr($char);
} elseif (array_key_exists($char, $this->unicode->uni_utf8tolatin)) {
// map from UTF-8
$outstr .= chr($this->unicode->uni_utf8tolatin[$char]);
} elseif ($char == 0xFFFD) {
// skip
} else {
$outstr .= '?';
}
}
return $outstr;
}

+ Here is the caller graph for this function:

TCPDF::UTF8ToUTF16BE (   $str,
  $setbom = true 
)
protected

Converts UTF-8 strings to UTF16-BE.


Parameters
string$strstring to process.
boolean$setbomif true set the Byte Order Mark (BOM = 0xFEFF)
Returns
string protected
Author
Nicola Asuni
Since
1.53.0.TC005 (2005-01-05) UTF8StringToArray(), arrUTF8ToUTF16BE()

Definition at line 11080 of file tcpdf.php.

{
if (!$this->isunicode) {
return $str; // string is not in unicode
}
$unicode = $this->UTF8StringToArray($str); // array containing UTF-8 unicode values
return $this->arrUTF8ToUTF16BE($unicode, $setbom);
}
TCPDF::Write (   $h,
  $txt,
  $link = '',
  $fill = false,
  $align = '',
  $ln = false,
  $stretch = 0,
  $firstline = false,
  $firstblock = false,
  $maxh = 0,
  $wadj = 0,
  $margin = '' 
)

This method prints text from the current position.


Parameters
float$hLine height
string$txtString to print
mixed$linkURL or identifier returned by AddLink()
boolean$fillIndicates if the cell background must be painted (true) or transparent (false).
string$alignAllows to center or align the text. Possible values are:
  • L or empty string: left align (default value)
  • C: center
  • R: right align
  • J: justify
boolean$lnif true set cursor at the bottom of the line, otherwise set cursor at the top of the line.
int$stretchfont stretch mode:
  • 0 = disabled
  • 1 = horizontal scaling only if text is larger than cell width
  • 2 = forced horizontal scaling to fit cell width
  • 3 = character spacing only if text is larger than cell width
  • 4 = forced character spacing to fit cell width
General font stretching and scaling values will be preserved when possible.
boolean$firstlineif true prints only the first line and return the remaining string.
boolean$firstblockif true the string is the starting of a line.
float$maxhmaximum height. The remaining unprinted text will be returned. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature.
float$wadjfirst line width will be reduced by this amount (used in HTML mode).
array$marginmargin array of the parent container
Returns
mixed Return the number of cells or the remaining string if $firstline = true. public
Since
1.5

Definition at line 6469 of file tcpdf.php.

References $cell_margin, $cell_padding, $h, $l, $lMargin, $page, $w, $x, AcceptPageBreak(), Cell(), checkPageRegions(), GetArrStringWidth(), GetCharWidth(), getRemainingWidth(), isRTLTextDir(), isUnicodeFont(), SetCellPadding(), stringRightTrim(), UniArrSubString(), unichr(), UTF8ArrayToUniArray(), utf8Bidi(), and UTF8StringToArray().

Referenced by MultiCell().

{
// check page for no-write regions and adapt page margins if necessary
if (strlen($txt) == 0) {
// fix empty text
$txt = ' ';
}
if ($margin === '') {
// set default margins
$margin = $this->cell_margin;
}
// remove carriage returns
$s = str_replace("\r", '', $txt);
// check if string contains arabic text
if (preg_match($this->unicode->uni_RE_PATTERN_ARABIC, $s)) {
$arabic = true;
} else {
$arabic = false;
}
// check if string contains RTL text
if ($arabic OR ($this->tmprtl == 'R') OR preg_match($this->unicode->uni_RE_PATTERN_RTL, $s)) {
$rtlmode = true;
} else {
$rtlmode = false;
}
// get a char width
$chrwidth = $this->GetCharWidth('.');
// get array of unicode values
$chars = $this->UTF8StringToArray($s);
// get array of chars
$uchars = $this->UTF8ArrayToUniArray($chars);
// get the number of characters
$nb = count($chars);
// replacement for SHY character (minus symbol)
$shy_replacement = 45;
$shy_replacement_char = $this->unichr($shy_replacement);
// widht for SHY replacement
$shy_replacement_width = $this->GetCharWidth($shy_replacement);
// max Y
$maxy = $this->y + $maxh - $h - $this->cell_padding['T'] - $this->cell_padding['B'];
// calculate remaining line width ($w)
if ($this->rtl) {
$w = $this->x - $this->lMargin;
} else {
$w = $this->w - $this->rMargin - $this->x;
}
// max column width
$wmax = $w - $wadj;
if (!$firstline) {
$wmax -= ($this->cell_padding['L'] + $this->cell_padding['R']);
}
if ((!$firstline) AND (($chrwidth > $wmax) OR ($this->GetCharWidth($chars[0]) > $wmax))) {
// a single character do not fit on column
return '';
}
// minimum row height
$row_height = max($h, $this->FontSize * $this->cell_height_ratio);
$start_page = $this->page;
$i = 0; // character position
$j = 0; // current starting position
$sep = -1; // position of the last blank space
$shy = false; // true if the last blank is a soft hypen (SHY)
$l = 0; // current string length
$nl = 0; //number of lines
$linebreak = false;
$pc = 0; // previous character
// for each character
while ($i < $nb) {
if (($maxh > 0) AND ($this->y >= $maxy) ) {
break;
}
//Get the current character
$c = $chars[$i];
if ($c == 10) { // 10 = "\n" = new line
//Explicit line break
if ($align == 'J') {
if ($this->rtl) {
$talign = 'R';
} else {
$talign = 'L';
}
} else {
$talign = $align;
}
$tmpstr = $this->UniArrSubString($uchars, $j, $i);
if ($firstline) {
$startx = $this->x;
$tmparr = array_slice($chars, $j, ($i - $j));
if ($rtlmode) {
$tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl);
}
$linew = $this->GetArrStringWidth($tmparr);
unset($tmparr);
if ($this->rtl) {
$this->endlinex = $startx - $linew;
} else {
$this->endlinex = $startx + $linew;
}
$w = $linew;
$tmpcellpadding = $this->cell_padding;
if ($maxh == 0) {
$this->SetCellPadding(0);
}
}
if ($firstblock AND $this->isRTLTextDir()) {
$tmpstr = $this->stringRightTrim($tmpstr);
}
// Skip newlines at the begining of a page or column
if (!empty($tmpstr) OR ($this->y < ($this->PageBreakTrigger - $row_height))) {
$this->Cell($w, $h, $tmpstr, 0, 1, $talign, $fill, $link, $stretch);
}
unset($tmpstr);
if ($firstline) {
$this->cell_padding = $tmpcellpadding;
return ($this->UniArrSubString($uchars, $i));
}
++$nl;
$j = $i + 1;
$l = 0;
$sep = -1;
$shy = false;
// account for margin changes
if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND (!$this->InFooter)) {
$this->AcceptPageBreak();
if ($this->rtl) {
$this->x -= $margin['R'];
} else {
$this->x += $margin['L'];
}
$this->lMargin += $margin['L'];
$this->rMargin += $margin['R'];
}
$w = $this->getRemainingWidth();
$wmax = $w - $this->cell_padding['L'] - $this->cell_padding['R'];
} else {
// 160 is the non-breaking space.
// 173 is SHY (Soft Hypen).
// \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator.
// \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants.
// \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between.
if (($c != 160) AND (($c == 173) OR preg_match($this->re_spaces, $this->unichr($c)))) {
// update last blank space position
$sep = $i;
// check if is a SHY
if ($c == 173) {
$shy = true;
if ($pc == 45) {
$tmp_shy_replacement_width = 0;
$tmp_shy_replacement_char = '';
} else {
$tmp_shy_replacement_width = $shy_replacement_width;
$tmp_shy_replacement_char = $shy_replacement_char;
}
} else {
$shy = false;
}
}
// update string length
if ($this->isUnicodeFont() AND ($arabic)) {
// with bidirectional algorithm some chars may be changed affecting the line length
// *** very slow ***
$l = $this->GetArrStringWidth($this->utf8Bidi(array_slice($chars, $j, ($i - $j)), '', $this->tmprtl));
} else {
$l += $this->GetCharWidth($c);
}
if (($l > $wmax) OR (($c == 173) AND (($l + $tmp_shy_replacement_width) > $wmax)) ) {
// we have reached the end of column
if ($sep == -1) {
// check if the line was already started
if (($this->rtl AND ($this->x <= ($this->w - $this->rMargin - $chrwidth)))
OR ((!$this->rtl) AND ($this->x >= ($this->lMargin + $chrwidth)))) {
// print a void cell and go to next line
$this->Cell($w, $h, '', 0, 1);
$linebreak = true;
if ($firstline) {
return ($this->UniArrSubString($uchars, $j));
}
} else {
// truncate the word because do not fit on column
$tmpstr = $this->UniArrSubString($uchars, $j, $i);
if ($firstline) {
$startx = $this->x;
$tmparr = array_slice($chars, $j, ($i - $j));
if ($rtlmode) {
$tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl);
}
$linew = $this->GetArrStringWidth($tmparr);
unset($tmparr);
if ($this->rtl) {
$this->endlinex = $startx - $linew;
} else {
$this->endlinex = $startx + $linew;
}
$w = $linew;
$tmpcellpadding = $this->cell_padding;
if ($maxh == 0) {
$this->SetCellPadding(0);
}
}
if ($firstblock AND $this->isRTLTextDir()) {
$tmpstr = $this->stringRightTrim($tmpstr);
}
$this->Cell($w, $h, $tmpstr, 0, 1, $align, $fill, $link, $stretch);
unset($tmpstr);
if ($firstline) {
$this->cell_padding = $tmpcellpadding;
return ($this->UniArrSubString($uchars, $i));
}
$j = $i;
--$i;
}
} else {
// word wrapping
if ($this->rtl AND (!$firstblock) AND ($sep < $i)) {
$endspace = 1;
} else {
$endspace = 0;
}
if ($shy) {
// add hypen (minus symbol) at the end of the line
$shy_width = $tmp_shy_replacement_width;
if ($this->rtl) {
$shy_char_left = $tmp_shy_replacement_char;
$shy_char_right = '';
} else {
$shy_char_left = '';
$shy_char_right = $tmp_shy_replacement_char;
}
} else {
$shy_width = 0;
$shy_char_left = '';
$shy_char_right = '';
}
$tmpstr = $this->UniArrSubString($uchars, $j, ($sep + $endspace));
if ($firstline) {
$startx = $this->x;
$tmparr = array_slice($chars, $j, (($sep + $endspace) - $j));
if ($rtlmode) {
$tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl);
}
$linew = $this->GetArrStringWidth($tmparr);
unset($tmparr);
if ($this->rtl) {
$this->endlinex = $startx - $linew - $shy_width;
} else {
$this->endlinex = $startx + $linew + $shy_width;
}
$w = $linew;
$tmpcellpadding = $this->cell_padding;
if ($maxh == 0) {
$this->SetCellPadding(0);
}
}
// print the line
if ($firstblock AND $this->isRTLTextDir()) {
$tmpstr = $this->stringRightTrim($tmpstr);
}
$this->Cell($w, $h, $shy_char_left.$tmpstr.$shy_char_right, 0, 1, $align, $fill, $link, $stretch);
unset($tmpstr);
if ($firstline) {
// return the remaining text
$this->cell_padding = $tmpcellpadding;
return ($this->UniArrSubString($uchars, ($sep + $endspace)));
}
$i = $sep;
$sep = -1;
$shy = false;
$j = ($i+1);
}
// account for margin changes
if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND (!$this->InFooter)) {
$this->AcceptPageBreak();
if ($this->rtl) {
$this->x -= $margin['R'];
} else {
$this->x += $margin['L'];
}
$this->lMargin += $margin['L'];
$this->rMargin += $margin['R'];
}
$w = $this->getRemainingWidth();
$wmax = $w - $this->cell_padding['L'] - $this->cell_padding['R'];
if ($linebreak) {
$linebreak = false;
} else {
++$nl;
$l = 0;
}
}
}
// save last character
$pc = $c;
++$i;
} // end while i < nb
// print last substring (if any)
if ($l > 0) {
switch ($align) {
case 'J':
case 'C': {
$w = $w;
break;
}
case 'L': {
if ($this->rtl) {
$w = $w;
} else {
$w = $l;
}
break;
}
case 'R': {
if ($this->rtl) {
$w = $l;
} else {
$w = $w;
}
break;
}
default: {
$w = $l;
break;
}
}
$tmpstr = $this->UniArrSubString($uchars, $j, $nb);
if ($firstline) {
$startx = $this->x;
$tmparr = array_slice($chars, $j, ($nb - $j));
if ($rtlmode) {
$tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl);
}
$linew = $this->GetArrStringWidth($tmparr);
unset($tmparr);
if ($this->rtl) {
$this->endlinex = $startx - $linew;
} else {
$this->endlinex = $startx + $linew;
}
$w = $linew;
$tmpcellpadding = $this->cell_padding;
if ($maxh == 0) {
$this->SetCellPadding(0);
}
}
if ($firstblock AND $this->isRTLTextDir()) {
$tmpstr = $this->stringRightTrim($tmpstr);
}
$this->Cell($w, $h, $tmpstr, 0, $ln, $align, $fill, $link, $stretch);
unset($tmpstr);
if ($firstline) {
$this->cell_padding = $tmpcellpadding;
return ($this->UniArrSubString($uchars, $nb));
}
++$nl;
}
if ($firstline) {
return '';
}
return $nl;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

TCPDF::write1DBarcode (   $code,
  $type,
  $x = '',
  $y = '',
  $w = '',
  $h = '',
  $xres = '',
  $style = '',
  $align = '' 
)

Print a Linear Barcode.

Parameters
string$codecode to print
string$typetype of barcode (see barcodes.php for supported formats).
int$xx position in user units (empty string = current x position)
int$yy position in user units (empty string = current y position)
int$wwidth in user units (empty string = remaining page width)
int$hheight in user units (empty string = remaining page height)
float$xreswidth of the smallest bar in user units (empty string = default value = 0.4mm)
array$stylearray of options:
  • boolean $style['border'] if true prints a border
  • int $style['padding'] padding to leave around the barcode in user units (set to 'auto' for automatic padding)
  • int $style['hpadding'] horizontal padding in user units (set to 'auto' for automatic padding)
  • int $style['vpadding'] vertical padding in user units (set to 'auto' for automatic padding)
  • array $style['fgcolor'] color array for bars and text
  • mixed $style['bgcolor'] color array for background (set to false for transparent)
  • boolean $style['text'] if true prints text below the barcode
  • string $style['label'] override default label
  • string $style['font'] font name for text
  • int $style['fontsize'] font size for text
  • int $style['stretchtext']: 0 = disabled; 1 = horizontal scaling only if necessary; 2 = forced horizontal scaling; 3 = character spacing only if necessary; 4 = forced character spacing.
  • string $style['position'] horizontal position of the containing barcode cell on the page: L = left margin; C = center; R = right margin.
  • string $style['align'] horizontal position of the barcode on the containing rectangle: L = left; C = center; R = right.
  • string $style['stretch'] if true stretch the barcode to best fit the available width, otherwise uses $xres resolution for a single bar.
  • string $style['fitwidth'] if true reduce the width to fit the barcode width + padding. When this option is enabled the 'stretch' option is automatically disabled.
  • string $style['cellfitalign'] this option works only when 'fitwidth' is true and 'position' is unset or empty. Set the horizontal position of the containing barcode cell inside the specified rectangle: L = left; C = center; R = right.
string$alignIndicates the alignment of the pointer next to barcode insertion relative to barcode height. The value can be:
  • T: top-right for LTR or top-left for RTL
  • M: middle-right for LTR or middle-left for RTL
  • B: bottom-right for LTR or bottom-left for RTL
  • N: next line
Author
Nicola Asuni
Since
3.1.000 (2008-06-09) public

Definition at line 16592 of file tcpdf.php.

References $type, $x, and $y.

Referenced by Footer().

{
if ($this->empty_string(trim($code))) {
return;
}
require_once(dirname(__FILE__).'/barcodes.php');
// save current graphic settings
$gvars = $this->getGraphicVars();
// create new barcode object
$barcodeobj = new TCPDFBarcode($code, $type);
$arrcode = $barcodeobj->getBarcodeArray();
if ($arrcode === false) {
$this->Error('Error in 1D barcode string');
}
// set default values
if (!isset($style['position'])) {
$style['position'] = '';
} elseif ($style['position'] == 'S') {
// keep this for backward compatibility
$style['position'] = '';
$style['stretch'] = true;
}
if (!isset($style['fitwidth'])) {
if (!isset($style['stretch'])) {
$style['fitwidth'] = true;
} else {
$style['fitwidth'] = false;
}
}
if ($style['fitwidth']) {
// disable stretch
$style['stretch'] = false;
}
if (!isset($style['stretch'])) {
if (($w === '') OR ($w <= 0)) {
$style['stretch'] = false;
} else {
$style['stretch'] = true;
}
}
if (!isset($style['fgcolor'])) {
$style['fgcolor'] = array(0,0,0); // default black
}
if (!isset($style['bgcolor'])) {
$style['bgcolor'] = false; // default transparent
}
if (!isset($style['border'])) {
$style['border'] = false;
}
$fontsize = 0;
if (!isset($style['text'])) {
$style['text'] = false;
}
if ($style['text'] AND isset($style['font'])) {
if (isset($style['fontsize'])) {
$fontsize = $style['fontsize'];
}
$this->SetFont($style['font'], '', $fontsize);
}
if (!isset($style['stretchtext'])) {
$style['stretchtext'] = 4;
}
if ($x === '') {
}
if ($y === '') {
}
// check page for no-write regions and adapt page margins if necessary
$this->checkPageRegions($h, $x, $y);
if (($w === '') OR ($w <= 0)) {
if ($this->rtl) {
} else {
$w = $this->w - $this->rMargin - $x;
}
}
// padding
if (!isset($style['padding'])) {
$padding = 0;
} elseif ($style['padding'] === 'auto') {
$padding = 10 * ($w / ($arrcode['maxw'] + 20));
} else {
$padding = floatval($style['padding']);
}
// horizontal padding
if (!isset($style['hpadding'])) {
$hpadding = $padding;
} elseif ($style['hpadding'] === 'auto') {
$hpadding = 10 * ($w / ($arrcode['maxw'] + 20));
} else {
$hpadding = floatval($style['hpadding']);
}
// vertical padding
if (!isset($style['vpadding'])) {
$vpadding = $padding;
} elseif ($style['vpadding'] === 'auto') {
$vpadding = ($hpadding / 2);
} else {
$vpadding = floatval($style['vpadding']);
}
// calculate xres (single bar width)
$max_xres = ($w - (2 * $hpadding)) / $arrcode['maxw'];
if ($style['stretch']) {
$xres = $max_xres;
} else {
if ($this->empty_string($xres)) {
$xres = (0.141 * $this->k); // default bar width = 0.4 mm
}
if ($xres > $max_xres) {
// correct xres to fit on $w
$xres = $max_xres;
}
if ((isset($style['padding']) AND ($style['padding'] === 'auto'))
OR (isset($style['hpadding']) AND ($style['hpadding'] === 'auto'))) {
$hpadding = 10 * $xres;
if (isset($style['vpadding']) AND ($style['vpadding'] === 'auto')) {
$vpadding = ($hpadding / 2);
}
}
}
if ($style['fitwidth']) {
$wold = $w;
$w = (($arrcode['maxw'] * $xres) + (2 * $hpadding));
if (isset($style['cellfitalign'])) {
switch ($style['cellfitalign']) {
case 'L': {
if ($this->rtl) {
$x -= ($wold - $w);
}
break;
}
case 'R': {
if (!$this->rtl) {
$x += ($wold - $w);
}
break;
}
case 'C': {
if ($this->rtl) {
$x -= (($wold - $w) / 2);
} else {
$x += (($wold - $w) / 2);
}
break;
}
default : {
break;
}
}
}
}
$text_height = ($this->cell_height_ratio * $fontsize / $this->k);
// height
if (($h === '') OR ($h <= 0)) {
// set default height
$h = (($arrcode['maxw'] * $xres) / 3) + (2 * $vpadding) + $text_height;
}
$barh = $h - $text_height - (2 * $vpadding);
if ($barh <=0) {
// try to reduce font or padding to fit barcode on available height
if ($text_height > $h) {
$fontsize = (($h * $this->k) / (4 * $this->cell_height_ratio));
$text_height = ($this->cell_height_ratio * $fontsize / $this->k);
$this->SetFont($style['font'], '', $fontsize);
}
if ($vpadding > 0) {
$vpadding = (($h - $text_height) / 4);
}
$barh = $h - $text_height - (2 * $vpadding);
}
// fit the barcode on available space
$this->fitBlock($w, $h, $x, $y, false);
// set alignment
$this->img_rb_y = $y + $h;
// set alignment
if ($this->rtl) {
if ($style['position'] == 'L') {
$xpos = $this->lMargin;
} elseif ($style['position'] == 'C') {
$xpos = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
} elseif ($style['position'] == 'R') {
$xpos = $this->w - $this->rMargin - $w;
} else {
$xpos = $x - $w;
}
$this->img_rb_x = $xpos;
} else {
if ($style['position'] == 'L') {
$xpos = $this->lMargin;
} elseif ($style['position'] == 'C') {
$xpos = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
} elseif ($style['position'] == 'R') {
$xpos = $this->w - $this->rMargin - $w;
} else {
$xpos = $x;
}
$this->img_rb_x = $xpos + $w;
}
$xpos_rect = $xpos;
if (!isset($style['align'])) {
$style['align'] = 'C';
}
switch ($style['align']) {
case 'L': {
$xpos = $xpos_rect + $hpadding;
break;
}
case 'R': {
$xpos = $xpos_rect + ($w - ($arrcode['maxw'] * $xres)) - $hpadding;
break;
}
case 'C':
default : {
$xpos = $xpos_rect + (($w - ($arrcode['maxw'] * $xres)) / 2);
break;
}
}
$xpos_text = $xpos;
// barcode is always printed in LTR direction
$tempRTL = $this->rtl;
$this->rtl = false;
// print background color
if ($style['bgcolor']) {
$this->Rect($xpos_rect, $y, $w, $h, $style['border'] ? 'DF' : 'F', '', $style['bgcolor']);
} elseif ($style['border']) {
$this->Rect($xpos_rect, $y, $w, $h, 'D');
}
// set foreground color
$this->SetDrawColorArray($style['fgcolor']);
$this->SetTextColorArray($style['fgcolor']);
// print bars
foreach ($arrcode['bcode'] as $k => $v) {
$bw = ($v['w'] * $xres);
if ($v['t']) {
// draw a vertical bar
$ypos = $y + $vpadding + ($v['p'] * $barh / $arrcode['maxh']);
$this->Rect($xpos, $ypos, $bw, ($v['h'] * $barh / $arrcode['maxh']), 'F', array(), $style['fgcolor']);
}
$xpos += $bw;
}
// print text
if ($style['text']) {
if (isset($style['label']) AND !$this->empty_string($style['label'])) {
$label = $style['label'];
} else {
$label = $code;
}
$txtwidth = ($arrcode['maxw'] * $xres);
if ($this->GetStringWidth($label) > $txtwidth) {
$style['stretchtext'] = 2;
}
// print text
$this->x = $xpos_text;
$this->y = $y + $vpadding + $barh;
$cellpadding = $this->cell_padding;
$this->SetCellPadding(0);
$this->Cell($txtwidth, '', $label, 0, 0, 'C', 0, '', $style['stretchtext'], false, 'T', 'T');
$this->cell_padding = $cellpadding;
}
// restore original direction
$this->rtl = $tempRTL;
// restore previous settings
$this->setGraphicVars($gvars);
// set pointer to align the next text/objects
switch($align) {
case 'T':{
$this->y = $y;
$this->x = $this->img_rb_x;
break;
}
case 'M':{
$this->y = $y + round($h / 2);
$this->x = $this->img_rb_x;
break;
}
case 'B':{
$this->y = $this->img_rb_y;
$this->x = $this->img_rb_x;
break;
}
case 'N':{
$this->SetY($this->img_rb_y);
break;
}
default:{
break;
}
}
$this->endlinex = $this->img_rb_x;
}

+ Here is the caller graph for this function:

TCPDF::write2DBarcode (   $code,
  $type,
  $x = '',
  $y = '',
  $w = '',
  $h = '',
  $style = '',
  $align = '',
  $distort = false 
)

Print 2D Barcode.

Parameters
string$codecode to print
string$typetype of barcode (see 2dbarcodes.php for supported formats).
int$xx position in user units
int$yy position in user units
int$wwidth in user units
int$hheight in user units
array$stylearray of options:
  • boolean $style['border'] if true prints a border around the barcode
  • int $style['padding'] padding to leave around the barcode in barcode units (set to 'auto' for automatic padding)
  • int $style['hpadding'] horizontal padding in barcode units (set to 'auto' for automatic padding)
  • int $style['vpadding'] vertical padding in barcode units (set to 'auto' for automatic padding)
  • int $style['module_width'] width of a single module in points
  • int $style['module_height'] height of a single module in points
  • array $style['fgcolor'] color array for bars and text
  • mixed $style['bgcolor'] color array for background or false for transparent
  • string $style['position'] barcode position on the page: L = left margin; C = center; R = right margin; S = stretch
  • $style['module_width'] width of a single module in points
  • $style['module_height'] height of a single module in points
string$alignIndicates the alignment of the pointer next to barcode insertion relative to barcode height. The value can be:
  • T: top-right for LTR or top-left for RTL
  • M: middle-right for LTR or middle-left for RTL
  • B: bottom-right for LTR or bottom-left for RTL
  • N: next line
boolean$distortif true distort the barcode to fit width and height, otherwise preserve aspect ratio
Author
Nicola Asuni
Since
4.5.037 (2009-04-07) public

Definition at line 16963 of file tcpdf.php.

References $cw, $type, $x, and $y.

{
if ($this->empty_string(trim($code))) {
return;
}
require_once(dirname(__FILE__).'/2dbarcodes.php');
// save current graphic settings
$gvars = $this->getGraphicVars();
// create new barcode object
$barcodeobj = new TCPDF2DBarcode($code, $type);
$arrcode = $barcodeobj->getBarcodeArray();
if (($arrcode === false) OR empty($arrcode)) {
$this->Error('Error in 2D barcode string');
}
// set default values
if (!isset($style['position'])) {
$style['position'] = '';
}
if (!isset($style['fgcolor'])) {
$style['fgcolor'] = array(0,0,0); // default black
}
if (!isset($style['bgcolor'])) {
$style['bgcolor'] = false; // default transparent
}
if (!isset($style['border'])) {
$style['border'] = false;
}
// padding
if (!isset($style['padding'])) {
$style['padding'] = 0;
} elseif ($style['padding'] === 'auto') {
$style['padding'] = 4;
}
if (!isset($style['hpadding'])) {
$style['hpadding'] = $style['padding'];
} elseif ($style['hpadding'] === 'auto') {
$style['hpadding'] = 4;
}
if (!isset($style['vpadding'])) {
$style['vpadding'] = $style['padding'];
} elseif ($style['vpadding'] === 'auto') {
$style['vpadding'] = 4;
}
// cell (module) dimension
if (!isset($style['module_width'])) {
$style['module_width'] = 1; // width of a single module in points
}
if (!isset($style['module_height'])) {
$style['module_height'] = 1; // height of a single module in points
}
if ($x === '') {
}
if ($y === '') {
}
// check page for no-write regions and adapt page margins if necessary
$this->checkPageRegions($h, $x, $y);
// number of barcode columns and rows
$rows = $arrcode['num_rows'];
$cols = $arrcode['num_cols'];
// module width and height
$mw = $style['module_width'];
$mh = $style['module_height'];
// get max dimensions
if ($this->rtl) {
$maxw = $x - $this->lMargin;
} else {
$maxw = $this->w - $this->rMargin - $x;
}
$maxh = ($this->h - $this->tMargin - $this->bMargin);
$ratioHW = ($rows * $mh) / ($cols * $mw);
$ratioWH = ($cols * $mw) / ($rows * $mh);
if (!$distort) {
if (($maxw * $ratioHW) > $maxh) {
$maxw = $maxh * $ratioWH;
}
if (($maxh * $ratioWH) > $maxw) {
$maxh = $maxw * $ratioHW;
}
}
// set maximum dimesions
if ($w > $maxw) {
$w = $maxw;
}
if ($h > $maxh) {
$h = $maxh;
}
$hpad = (2 * $style['hpadding']);
$vpad = (2 * $style['vpadding']);
// set dimensions
if ((($w === '') OR ($w <= 0)) AND (($h === '') OR ($h <= 0))) {
$w = ($cols + $hpad) * ($mw / $this->k);
$h = ($rows + $vpad) * ($mh / $this->k);
} elseif (($w === '') OR ($w <= 0)) {
$w = $h * $ratioWH;
} elseif (($h === '') OR ($h <= 0)) {
$h = $w * $ratioHW;
}
// barcode size (excluding padding)
$bw = ($w * $cols) / ($cols + $hpad);
$bh = ($h * $rows) / ($rows + $vpad);
// dimension of single barcode cell unit
$cw = $bw / $cols;
$ch = $bh / $rows;
if (!$distort) {
if (($cw / $ch) > ($mw / $mh)) {
// correct horizontal distortion
$cw = $ch * $mw / $mh;
$bw = $cw * $cols;
$style['hpadding'] = ($w - $bw) / (2 * $cw);
} else {
// correct vertical distortion
$ch = $cw * $mh / $mw;
$bh = $ch * $rows;
$style['vpadding'] = ($h - $bh) / (2 * $ch);
}
}
// fit the barcode on available space
$this->fitBlock($w, $h, $x, $y, false);
// set alignment
$this->img_rb_y = $y + $h;
// set alignment
if ($this->rtl) {
if ($style['position'] == 'L') {
$xpos = $this->lMargin;
} elseif ($style['position'] == 'C') {
$xpos = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
} elseif ($style['position'] == 'R') {
$xpos = $this->w - $this->rMargin - $w;
} else {
$xpos = $x - $w;
}
$this->img_rb_x = $xpos;
} else {
if ($style['position'] == 'L') {
$xpos = $this->lMargin;
} elseif ($style['position'] == 'C') {
$xpos = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
} elseif ($style['position'] == 'R') {
$xpos = $this->w - $this->rMargin - $w;
} else {
$xpos = $x;
}
$this->img_rb_x = $xpos + $w;
}
$xstart = $xpos + ($style['hpadding'] * $cw);
$ystart = $y + ($style['vpadding'] * $ch);
// barcode is always printed in LTR direction
$tempRTL = $this->rtl;
$this->rtl = false;
// print background color
if ($style['bgcolor']) {
$this->Rect($xpos, $y, $w, $h, $style['border'] ? 'DF' : 'F', '', $style['bgcolor']);
} elseif ($style['border']) {
$this->Rect($xpos, $y, $w, $h, 'D');
}
// set foreground color
$this->SetDrawColorArray($style['fgcolor']);
// print barcode cells
// for each row
for ($r = 0; $r < $rows; ++$r) {
$xr = $xstart;
// for each column
for ($c = 0; $c < $cols; ++$c) {
if ($arrcode['bcode'][$r][$c] == 1) {
// draw a single barcode cell
$this->Rect($xr, $ystart, $cw, $ch, 'F', array(), $style['fgcolor']);
}
$xr += $cw;
}
$ystart += $ch;
}
// restore original direction
$this->rtl = $tempRTL;
// restore previous settings
$this->setGraphicVars($gvars);
// set pointer to align the next text/objects
switch($align) {
case 'T':{
$this->y = $y;
$this->x = $this->img_rb_x;
break;
}
case 'M':{
$this->y = $y + round($h/2);
$this->x = $this->img_rb_x;
break;
}
case 'B':{
$this->y = $this->img_rb_y;
$this->x = $this->img_rb_x;
break;
}
case 'N':{
$this->SetY($this->img_rb_y);
break;
}
default:{
break;
}
}
$this->endlinex = $this->img_rb_x;
}
TCPDF::writeBarcode (   $x,
  $y,
  $w,
  $h,
  $type,
  $style,
  $font,
  $xres,
  $code 
)

This function is DEPRECATED, please use the new write1DBarcode() function.

Parameters
int$xx position in user units
int$yy position in user units
int$wwidth in user units
int$hheight position in user units
string$typetype of barcode
string$stylebarcode style
string$fontfont for text
int$xresx resolution
string$codecode to print
Deprecated:
deprecated since version 3.1.000 (2008-06-10) public
See Also
write1DBarcode()

Definition at line 16898 of file tcpdf.php.

References $type, $x, and $y.

{
// convert old settings for the new write1DBarcode() function.
$xres = 1 / $xres;
$newstyle = array(
'position' => '',
'align' => '',
'stretch' => false,
'fitwidth' => false,
'cellfitalign' => '',
'border' => false,
'padding' => 0,
'fgcolor' => array(0,0,0),
'bgcolor' => false,
'text' => true,
'font' => $font,
'fontsize' => 8,
'stretchtext' => 4
);
if ($style & 1) {
$newstyle['border'] = true;
}
if ($style & 2) {
$newstyle['bgcolor'] = false;
}
if ($style & 4) {
$newstyle['position'] = 'C';
} elseif ($style & 8) {
$newstyle['position'] = 'L';
} elseif ($style & 16) {
$newstyle['position'] = 'R';
}
if ($style & 128) {
$newstyle['text'] = true;
}
if ($style & 256) {
$newstyle['stretchtext'] = 4;
}
$this->write1DBarcode($code, $type, $x, $y, $w, $h, $xres, $newstyle, '');
}
TCPDF::writeDiskCache (   $filename,
  $data,
  $append = false 
)
protected

Writes data to a temporary file on filesystem.

Parameters
string$filefile name
mixed$datadata to write on file
boolean$appendif true append data, false replace. protected
Since
4.5.000 (2008-12-31)

Definition at line 22037 of file tcpdf.php.

References $data, $f, and $filename.

{
if ($append) {
$fmode = 'ab+';
} else {
$fmode = 'wb+';
}
$f = @fopen($filename, $fmode);
if (!$f) {
$this->Error('Unable to write cache file: '.$filename);
} else {
fwrite($f, $data);
fclose($f);
}
// update file length (needed for transactions)
if (!isset($this->cache_file_length['_'.$filename])) {
$this->cache_file_length['_'.$filename] = strlen($data);
} else {
$this->cache_file_length['_'.$filename] += strlen($data);
}
}
TCPDF::writeHTML (   $html,
  $ln = true,
  $fill = false,
  $reseth = false,
  $cell = false,
  $align = '' 
)

Allows to preserve some HTML formatting (limited support).


IMPORTANT: The HTML must be well formatted - try to clean-up it using an application like HTML-Tidy before submitting. Supported tags are: a, b, blockquote, br, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, img, li, ol, p, pre, small, span, strong, sub, sup, table, tcpdf, td, th, thead, tr, tt, u, ul

Parameters
string$htmltext to display
boolean$lnif true add a new line after text (default = true)
boolean$fillIndicates if the background must be painted (true) or transparent (false).
boolean$resethif true reset the last cell height (default false).
boolean$cellif true add the current left (or right for RTL) padding to each Write (default false).
string$alignAllows to center or align the text. Possible values are:
  • L : left align
  • C : center
  • R : right align
  • '' : empty string : left for LTR or right for RTL
public

Definition at line 18674 of file tcpdf.php.

References $x, and $y.

Referenced by MultiCell(), and setTableHeader().

{
$gvars = $this->getGraphicVars();
// store current values
$prev_cell_margin = $this->cell_margin;
$prev_cell_padding = $this->cell_padding;
$prevPage = $this->page;
$prevlMargin = $this->lMargin;
$prevrMargin = $this->rMargin;
$curfontname = $this->FontFamily;
$curfontstyle = $this->FontStyle;
$curfontsize = $this->FontSizePt;
$curfontascent = $this->getFontAscent($curfontname, $curfontstyle, $curfontsize);
$curfontdescent = $this->getFontDescent($curfontname, $curfontstyle, $curfontsize);
$curfontstretcing = $this->font_stretching;
$curfontkerning = $this->font_spacing;
$this->newline = true;
$newline = true;
$startlinepage = $this->page;
$minstartliney = $this->y;
$maxbottomliney = 0;
$startlinex = $this->x;
$startliney = $this->y;
$yshift = 0;
$loop = 0;
$curpos = 0;
$this_method_vars = array();
$undo = false;
$fontaligned = false;
$reverse_dir = false; // true when the text direction is reversed
$this->premode = false;
if ($this->inxobj) {
// we are inside an XObject template
$pask = count($this->xobjects[$this->xobjid]['annotations']);
} elseif (isset($this->PageAnnots[$this->page])) {
$pask = count($this->PageAnnots[$this->page]);
} else {
$pask = 0;
}
if ($this->inxobj) {
// we are inside an XObject template
$startlinepos = strlen($this->xobjects[$this->xobjid]['outdata']);
} elseif (!$this->InFooter) {
if (isset($this->footerlen[$this->page])) {
$this->footerpos[$this->page] = $this->pagelen[$this->page] - $this->footerlen[$this->page];
} else {
$this->footerpos[$this->page] = $this->pagelen[$this->page];
}
$startlinepos = $this->footerpos[$this->page];
} else {
// we are inside the footer
$startlinepos = $this->pagelen[$this->page];
}
$lalign = $align;
$plalign = $align;
if ($this->rtl) {
$w = $this->x - $this->lMargin;
} else {
$w = $this->w - $this->rMargin - $this->x;
}
$w -= ($this->cell_padding['L'] + $this->cell_padding['R']);
if ($cell) {
if ($this->rtl) {
$this->x -= $this->cell_padding['R'];
$this->lMargin += $this->cell_padding['R'];
} else {
$this->x += $this->cell_padding['L'];
$this->rMargin += $this->cell_padding['L'];
}
}
if ($this->customlistindent >= 0) {
$this->listindent = $this->customlistindent;
} else {
$this->listindent = $this->GetStringWidth('0000');
}
$this->listindentlevel = 0;
// save previous states
$prev_cell_height_ratio = $this->cell_height_ratio;
$prev_listnum = $this->listnum;
$prev_listordered = $this->listordered;
$prev_listcount = $this->listcount;
$prev_lispacer = $this->lispacer;
$this->listnum = 0;
$this->listordered = array();
$this->listcount = array();
$this->lispacer = '';
if (($this->empty_string($this->lasth)) OR ($reseth)) {
// reset row height
$this->resetLastH();
}
$dom = $this->getHtmlDomArray($html);
$maxel = count($dom);
$key = 0;
while ($key < $maxel) {
if ($dom[$key]['tag'] AND isset($dom[$key]['attribute']['pagebreak'])) {
// check for pagebreak
if (($dom[$key]['attribute']['pagebreak'] == 'true') OR ($dom[$key]['attribute']['pagebreak'] == 'left') OR ($dom[$key]['attribute']['pagebreak'] == 'right')) {
// add a page (or trig AcceptPageBreak() for multicolumn mode)
$this->checkPageBreak($this->PageBreakTrigger + 1);
}
if ((($dom[$key]['attribute']['pagebreak'] == 'left') AND (((!$this->rtl) AND (($this->page % 2) == 0)) OR (($this->rtl) AND (($this->page % 2) != 0))))
OR (($dom[$key]['attribute']['pagebreak'] == 'right') AND (((!$this->rtl) AND (($this->page % 2) != 0)) OR (($this->rtl) AND (($this->page % 2) == 0))))) {
// add a page (or trig AcceptPageBreak() for multicolumn mode)
$this->checkPageBreak($this->PageBreakTrigger + 1);
}
}
if ($dom[$key]['tag'] AND $dom[$key]['opening'] AND isset($dom[$key]['attribute']['nobr']) AND ($dom[$key]['attribute']['nobr'] == 'true')) {
if (isset($dom[($dom[$key]['parent'])]['attribute']['nobr']) AND ($dom[($dom[$key]['parent'])]['attribute']['nobr'] == 'true')) {
$dom[$key]['attribute']['nobr'] = false;
} else {
// store current object
$this->startTransaction();
// save this method vars
$this_method_vars['html'] = $html;
$this_method_vars['ln'] = $ln;
$this_method_vars['fill'] = $fill;
$this_method_vars['reseth'] = $reseth;
$this_method_vars['cell'] = $cell;
$this_method_vars['align'] = $align;
$this_method_vars['gvars'] = $gvars;
$this_method_vars['prevPage'] = $prevPage;
$this_method_vars['prev_cell_margin'] = $prev_cell_margin;
$this_method_vars['prev_cell_padding'] = $prev_cell_padding;
$this_method_vars['prevlMargin'] = $prevlMargin;
$this_method_vars['prevrMargin'] = $prevrMargin;
$this_method_vars['curfontname'] = $curfontname;
$this_method_vars['curfontstyle'] = $curfontstyle;
$this_method_vars['curfontsize'] = $curfontsize;
$this_method_vars['curfontascent'] = $curfontascent;
$this_method_vars['curfontdescent'] = $curfontdescent;
$this_method_vars['curfontstretcing'] = $curfontstretcing;
$this_method_vars['curfontkerning'] = $curfontkerning;
$this_method_vars['minstartliney'] = $minstartliney;
$this_method_vars['maxbottomliney'] = $maxbottomliney;
$this_method_vars['yshift'] = $yshift;
$this_method_vars['startlinepage'] = $startlinepage;
$this_method_vars['startlinepos'] = $startlinepos;
$this_method_vars['startlinex'] = $startlinex;
$this_method_vars['startliney'] = $startliney;
$this_method_vars['newline'] = $newline;
$this_method_vars['loop'] = $loop;
$this_method_vars['curpos'] = $curpos;
$this_method_vars['pask'] = $pask;
$this_method_vars['lalign'] = $lalign;
$this_method_vars['plalign'] = $plalign;
$this_method_vars['w'] = $w;
$this_method_vars['prev_cell_height_ratio'] = $prev_cell_height_ratio;
$this_method_vars['prev_listnum'] = $prev_listnum;
$this_method_vars['prev_listordered'] = $prev_listordered;
$this_method_vars['prev_listcount'] = $prev_listcount;
$this_method_vars['prev_lispacer'] = $prev_lispacer;
$this_method_vars['fontaligned'] = $fontaligned;
$this_method_vars['key'] = $key;
$this_method_vars['dom'] = $dom;
}
}
// print THEAD block
if (($dom[$key]['value'] == 'tr') AND isset($dom[$key]['thead']) AND $dom[$key]['thead']) {
if (isset($dom[$key]['parent']) AND isset($dom[$dom[$key]['parent']]['thead']) AND !$this->empty_string($dom[$dom[$key]['parent']]['thead'])) {
$this->inthead = true;
// print table header (thead)
$this->writeHTML($this->thead, false, false, false, false, '');
// check if we are on a new page or on a new column
if (($this->y < $this->start_transaction_y) OR ($this->checkPageBreak($this->lasth, '', false))) {
// we are on a new page or on a new column and the total object height is less than the available vertical space.
// restore previous object
$this->rollbackTransaction(true);
// restore previous values
foreach ($this_method_vars as $vkey => $vval) {
$$vkey = $vval;
}
// disable table header
$tmp_thead = $this->thead;
$this->thead = '';
// add a page (or trig AcceptPageBreak() for multicolumn mode)
$pre_y = $this->y;
if ((!$this->checkPageBreak($this->PageBreakTrigger + 1)) AND ($this->y < $pre_y)) {
// fix for multicolumn mode
$startliney = $this->y;
}
$this->start_transaction_page = $this->page;
$this->start_transaction_y = $this->y;
// restore table header
$this->thead = $tmp_thead;
// fix table border properties
if (isset($dom[$dom[$key]['parent']]['attribute']['cellspacing'])) {
$tmp_cellspacing = $this->getHTMLUnitToUnits($dom[$dom[$key]['parent']]['attribute']['cellspacing'], 1, 'px');
} else {
$tmp_cellspacing = 0;
}
$dom[$dom[$key]['parent']]['borderposition']['page'] = $this->page;
$dom[$dom[$key]['parent']]['borderposition']['column'] = $this->current_column;
$dom[$dom[$key]['parent']]['borderposition']['y'] = $this->y + $tmp_cellspacing;
$xoffset = ($this->x - $dom[$dom[$key]['parent']]['borderposition']['x']);
$dom[$dom[$key]['parent']]['borderposition']['x'] += $xoffset;
$dom[$dom[$key]['parent']]['borderposition']['xmax'] += $xoffset;
// print table header (thead)
$this->writeHTML($this->thead, false, false, false, false, '');
}
}
// move $key index forward to skip THEAD block
while ( ($key < $maxel) AND (!(
($dom[$key]['tag'] AND $dom[$key]['opening'] AND ($dom[$key]['value'] == 'tr') AND (!isset($dom[$key]['thead']) OR !$dom[$key]['thead']))
OR ($dom[$key]['tag'] AND (!$dom[$key]['opening']) AND ($dom[$key]['value'] == 'table'))) )) {
++$key;
}
}
if ($dom[$key]['tag'] OR ($key == 0)) {
if ((($dom[$key]['value'] == 'table') OR ($dom[$key]['value'] == 'tr')) AND (isset($dom[$key]['align']))) {
$dom[$key]['align'] = ($this->rtl) ? 'R' : 'L';
}
// vertically align image in line
if ((!$this->newline) AND ($dom[$key]['value'] == 'img') AND (isset($dom[$key]['height'])) AND ($dom[$key]['height'] > 0)) {
// get image height
$imgh = $this->getHTMLUnitToUnits($dom[$key]['height'], $this->lasth, 'px');
// check for automatic line break
$autolinebreak = false;
if (isset($dom[$key]['width']) AND ($dom[$key]['width'] > 0)) {
$imgw = $this->getHTMLUnitToUnits($dom[$key]['width'], 1, 'px', false);
if (($this->rtl AND (($this->x - $imgw) < ($this->lMargin + $this->cell_padding['L'])))
OR (!$this->rtl AND (($this->x + $imgw) > ($this->w - $this->rMargin - $this->cell_padding['R'])))) {
// add automatic line break
$autolinebreak = true;
$this->Ln('', $cell);
// go back to evaluate this line break
--$key;
}
}
if (!$autolinebreak) {
if (!$this->InFooter) {
$pre_y = $this->y;
// check for page break
if ((!$this->checkPageBreak($imgh)) AND ($this->y < $pre_y)) {
// fix for multicolumn mode
$startliney = $this->y;
}
}
if ($this->page > $startlinepage) {
// fix line splitted over two pages
if (isset($this->footerlen[$startlinepage])) {
$curpos = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage];
}
// line to be moved one page forward
$pagebuff = $this->getPageBuffer($startlinepage);
$linebeg = substr($pagebuff, $startlinepos, ($curpos - $startlinepos));
$tstart = substr($pagebuff, 0, $startlinepos);
$tend = substr($this->getPageBuffer($startlinepage), $curpos);
// remove line from previous page
$this->setPageBuffer($startlinepage, $tstart.''.$tend);
$pagebuff = $this->getPageBuffer($this->page);
$tstart = substr($pagebuff, 0, $this->cntmrk[$this->page]);
$tend = substr($pagebuff, $this->cntmrk[$this->page]);
// add line start to current page
$yshift = $minstartliney - $this->y;
if ($fontaligned) {
$yshift += ($curfontsize / $this->k);
}
$try = sprintf('1 0 0 1 0 %.3F cm', ($yshift * $this->k));
$this->setPageBuffer($this->page, $tstart."\nq\n".$try."\n".$linebeg."\nQ\n".$tend);
// shift the annotations and links
if (isset($this->PageAnnots[$this->page])) {
$next_pask = count($this->PageAnnots[$this->page]);
} else {
$next_pask = 0;
}
if (isset($this->PageAnnots[$startlinepage])) {
foreach ($this->PageAnnots[$startlinepage] as $pak => $pac) {
if ($pak >= $pask) {
$this->PageAnnots[$this->page][] = $pac;
unset($this->PageAnnots[$startlinepage][$pak]);
$npak = count($this->PageAnnots[$this->page]) - 1;
$this->PageAnnots[$this->page][$npak]['y'] -= $yshift;
}
}
}
$pask = $next_pask;
$startlinepos = $this->cntmrk[$this->page];
$startlinepage = $this->page;
$startliney = $this->y;
$this->newline = false;
}
$this->y += ((($curfontsize * $this->cell_height_ratio / $this->k) + $curfontascent - $curfontdescent) / 2) - $imgh;
$minstartliney = min($this->y, $minstartliney);
$maxbottomliney = ($startliney + ($this->FontSize * $this->cell_height_ratio));
}
} elseif (isset($dom[$key]['fontname']) OR isset($dom[$key]['fontstyle']) OR isset($dom[$key]['fontsize']) OR isset($dom[$key]['line-height'])) {
// account for different font size
$pfontname = $curfontname;
$pfontstyle = $curfontstyle;
$pfontsize = $curfontsize;
$fontname = isset($dom[$key]['fontname']) ? $dom[$key]['fontname'] : $curfontname;
$fontstyle = isset($dom[$key]['fontstyle']) ? $dom[$key]['fontstyle'] : $curfontstyle;
$fontsize = isset($dom[$key]['fontsize']) ? $dom[$key]['fontsize'] : $curfontsize;
$fontascent = $this->getFontAscent($fontname, $fontstyle, $fontsize);
$fontdescent = $this->getFontDescent($fontname, $fontstyle, $fontsize);
if (($fontname != $curfontname) OR ($fontstyle != $curfontstyle) OR ($fontsize != $curfontsize) OR ($this->cell_height_ratio != $dom[$key]['line-height'])) {
if ((!$this->newline) AND ($key < ($maxel - 1))
AND ((is_numeric($fontsize) AND ($fontsize >= 0) AND is_numeric($curfontsize) AND ($curfontsize >= 0) AND ($fontsize != $curfontsize))
OR ($this->cell_height_ratio != $dom[$key]['line-height']))) {
if ($this->page > $startlinepage) {
// fix lines splitted over two pages
if (isset($this->footerlen[$startlinepage])) {
$curpos = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage];
}
// line to be moved one page forward
$pagebuff = $this->getPageBuffer($startlinepage);
$linebeg = substr($pagebuff, $startlinepos, ($curpos - $startlinepos));
$tstart = substr($pagebuff, 0, $startlinepos);
$tend = substr($this->getPageBuffer($startlinepage), $curpos);
// remove line start from previous page
$this->setPageBuffer($startlinepage, $tstart.''.$tend);
$pagebuff = $this->getPageBuffer($this->page);
$tstart = substr($pagebuff, 0, $this->cntmrk[$this->page]);
$tend = substr($pagebuff, $this->cntmrk[$this->page]);
// add line start to current page
$yshift = $minstartliney - $this->y;
$try = sprintf('1 0 0 1 0 %.3F cm', ($yshift * $this->k));
$this->setPageBuffer($this->page, $tstart."\nq\n".$try."\n".$linebeg."\nQ\n".$tend);
// shift the annotations and links
if (isset($this->PageAnnots[$this->page])) {
$next_pask = count($this->PageAnnots[$this->page]);
} else {
$next_pask = 0;
}
if (isset($this->PageAnnots[$startlinepage])) {
foreach ($this->PageAnnots[$startlinepage] as $pak => $pac) {
if ($pak >= $pask) {
$this->PageAnnots[$this->page][] = $pac;
unset($this->PageAnnots[$startlinepage][$pak]);
$npak = count($this->PageAnnots[$this->page]) - 1;
$this->PageAnnots[$this->page][$npak]['y'] -= $yshift;
}
}
}
$pask = $next_pask;
$startlinepos = $this->cntmrk[$this->page];
$startlinepage = $this->page;
$startliney = $this->y;
}
if (!isset($dom[$key]['line-height'])) {
$dom[$key]['line-height'] = $this->cell_height_ratio;
}
if (!$dom[$key]['block']) {
$this->y += (((($curfontsize * $this->cell_height_ratio ) - ($fontsize * $dom[$key]['line-height'])) / $this->k) + $curfontascent - $fontascent - $curfontdescent + $fontdescent) / 2;
if (($dom[$key]['value'] != 'sup') AND ($dom[$key]['value'] != 'sub')) {
$minstartliney = min($this->y, $minstartliney);
$maxbottomliney = max(($this->y + (($fontsize * $this->cell_height_ratio) / $this->k)), $maxbottomliney);
}
}
$this->cell_height_ratio = $dom[$key]['line-height'];
$fontaligned = true;
}
$this->SetFont($fontname, $fontstyle, $fontsize);
// reset row height
$this->resetLastH();
$curfontname = $fontname;
$curfontstyle = $fontstyle;
$curfontsize = $fontsize;
$curfontascent = $fontascent;
$curfontdescent = $fontdescent;
}
}
// set text rendering mode
$textstroke = isset($dom[$key]['stroke']) ? $dom[$key]['stroke'] : $this->textstrokewidth;
$textfill = isset($dom[$key]['fill']) ? $dom[$key]['fill'] : (($this->textrendermode % 2) == 0);
$textclip = isset($dom[$key]['clip']) ? $dom[$key]['clip'] : ($this->textrendermode > 3);
$this->setTextRenderingMode($textstroke, $textfill, $textclip);
if (isset($dom[$key]['font-stretch']) AND ($dom[$key]['font-stretch'] !== false)) {
$this->setFontStretching($dom[$key]['font-stretch']);
}
if (isset($dom[$key]['letter-spacing']) AND ($dom[$key]['letter-spacing'] !== false)) {
$this->setFontSpacing($dom[$key]['letter-spacing']);
}
if (($plalign == 'J') AND $dom[$key]['block']) {
$plalign = '';
}
// get current position on page buffer
$curpos = $this->pagelen[$startlinepage];
if (isset($dom[$key]['bgcolor']) AND ($dom[$key]['bgcolor'] !== false)) {
$this->SetFillColorArray($dom[$key]['bgcolor']);
$wfill = true;
} else {
$wfill = $fill | false;
}
if (isset($dom[$key]['fgcolor']) AND ($dom[$key]['fgcolor'] !== false)) {
$this->SetTextColorArray($dom[$key]['fgcolor']);
}
if (isset($dom[$key]['strokecolor']) AND ($dom[$key]['strokecolor'] !== false)) {
$this->SetDrawColorArray($dom[$key]['strokecolor']);
}
if (isset($dom[$key]['align'])) {
$lalign = $dom[$key]['align'];
}
if ($this->empty_string($lalign)) {
$lalign = $align;
}
}
// align lines
if ($this->newline AND (strlen($dom[$key]['value']) > 0) AND ($dom[$key]['value'] != 'td') AND ($dom[$key]['value'] != 'th')) {
$newline = true;
$fontaligned = false;
// we are at the beginning of a new line
if (isset($startlinex)) {
$yshift = $minstartliney - $startliney;
if (($yshift > 0) OR ($this->page > $startlinepage)) {
$yshift = 0;
}
$t_x = 0;
// the last line must be shifted to be aligned as requested
$linew = abs($this->endlinex - $startlinex);
if ($this->inxobj) {
// we are inside an XObject template
$pstart = substr($this->xobjects[$this->xobjid]['outdata'], 0, $startlinepos);
if (isset($opentagpos)) {
$midpos = $opentagpos;
} else {
$midpos = 0;
}
if ($midpos > 0) {
$pmid = substr($this->xobjects[$this->xobjid]['outdata'], $startlinepos, ($midpos - $startlinepos));
$pend = substr($this->xobjects[$this->xobjid]['outdata'], $midpos);
} else {
$pmid = substr($this->xobjects[$this->xobjid]['outdata'], $startlinepos);
$pend = '';
}
} else {
$pstart = substr($this->getPageBuffer($startlinepage), 0, $startlinepos);
if (isset($opentagpos) AND isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)) {
$this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage];
$midpos = min($opentagpos, $this->footerpos[$startlinepage]);
} elseif (isset($opentagpos)) {
$midpos = $opentagpos;
} elseif (isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)) {
$this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage];
$midpos = $this->footerpos[$startlinepage];
} else {
$midpos = 0;
}
if ($midpos > 0) {
$pmid = substr($this->getPageBuffer($startlinepage), $startlinepos, ($midpos - $startlinepos));
$pend = substr($this->getPageBuffer($startlinepage), $midpos);
} else {
$pmid = substr($this->getPageBuffer($startlinepage), $startlinepos);
$pend = '';
}
}
if ((isset($plalign) AND ((($plalign == 'C') OR ($plalign == 'J') OR (($plalign == 'R') AND (!$this->rtl)) OR (($plalign == 'L') AND ($this->rtl)))))) {
// calculate shifting amount
$tw = $w;
if (($plalign == 'J') AND $this->isRTLTextDir() AND ($this->num_columns > 1)) {
$tw += $this->cell_padding['R'];
}
if ($this->lMargin != $prevlMargin) {
$tw += ($prevlMargin - $this->lMargin);
}
if ($this->rMargin != $prevrMargin) {
$tw += ($prevrMargin - $this->rMargin);
}
$one_space_width = $this->GetStringWidth(chr(32));
$no = 0; // number of spaces on a line contained on a single block
if ($this->isRTLTextDir()) { // RTL
// remove left space if exist
$pos1 = $this->revstrpos($pmid, '[(');
if ($pos1 > 0) {
$pos1 = intval($pos1);
if ($this->isUnicodeFont()) {
$pos2 = intval($this->revstrpos($pmid, '[('.chr(0).chr(32)));
$spacelen = 2;
} else {
$pos2 = intval($this->revstrpos($pmid, '[('.chr(32)));
$spacelen = 1;
}
if ($pos1 == $pos2) {
$pmid = substr($pmid, 0, ($pos1 + 2)).substr($pmid, ($pos1 + 2 + $spacelen));
if (substr($pmid, $pos1, 4) == '[()]') {
$linew -= $one_space_width;
} elseif ($pos1 == strpos($pmid, '[(')) {
$no = 1;
}
}
}
} else { // LTR
// remove right space if exist
$pos1 = $this->revstrpos($pmid, ')]');
if ($pos1 > 0) {
$pos1 = intval($pos1);
if ($this->isUnicodeFont()) {
$pos2 = intval($this->revstrpos($pmid, chr(0).chr(32).')]')) + 2;
$spacelen = 2;
} else {
$pos2 = intval($this->revstrpos($pmid, chr(32).')]')) + 1;
$spacelen = 1;
}
if ($pos1 == $pos2) {
$pmid = substr($pmid, 0, ($pos1 - $spacelen)).substr($pmid, $pos1);
$linew -= $one_space_width;
}
}
}
$mdiff = ($tw - $linew);
if ($plalign == 'C') {
if ($this->rtl) {
$t_x = -($mdiff / 2);
} else {
$t_x = ($mdiff / 2);
}
} elseif ($plalign == 'R') {
// right alignment on LTR document
$t_x = $mdiff;
} elseif ($plalign == 'L') {
// left alignment on RTL document
$t_x = -$mdiff;
} elseif (($plalign == 'J') AND ($plalign == $lalign)) {
// Justification
if ($this->isRTLTextDir()) {
// align text on the left
$t_x = -$mdiff;
}
$ns = 0; // number of spaces
$pmidtemp = $pmid;
// escape special characters
$pmidtemp = preg_replace('/[\\\][\(]/x', '\\#!#OP#!#', $pmidtemp);
$pmidtemp = preg_replace('/[\\\][\)]/x', '\\#!#CP#!#', $pmidtemp);
// search spaces
if (preg_match_all('/\[\(([^\)]*)\)\]/x', $pmidtemp, $lnstring, PREG_PATTERN_ORDER)) {
$spacestr = $this->getSpaceString();
$maxkk = count($lnstring[1]) - 1;
for ($kk=0; $kk <= $maxkk; ++$kk) {
// restore special characters
$lnstring[1][$kk] = str_replace('#!#OP#!#', '(', $lnstring[1][$kk]);
$lnstring[1][$kk] = str_replace('#!#CP#!#', ')', $lnstring[1][$kk]);
// store number of spaces on the strings
$lnstring[2][$kk] = substr_count($lnstring[1][$kk], $spacestr);
// count total spaces on line
$ns += $lnstring[2][$kk];
$lnstring[3][$kk] = $ns;
}
if ($ns == 0) {
$ns = 1;
}
// calculate additional space to add to each existing space
$spacewidth = ($mdiff / ($ns - $no)) * $this->k;
$spacewidthu = -1000 * ($mdiff + (($ns + $no) * $one_space_width)) / $ns / $this->FontSize;
if ($this->font_spacing != 0) {
// fixed spacing mode
$osw = -1000 * $this->font_spacing / $this->FontSize;
$spacewidthu += $osw;
}
$nsmax = $ns;
$ns = 0;
reset($lnstring);
$offset = 0;
$strcount = 0;
$prev_epsposbeg = 0;
$textpos = 0;
if ($this->isRTLTextDir()) {
$textpos = $this->wPt;
}
global $spacew;
while (preg_match('/([0-9\.\+\-]*)[\s](Td|cm|m|l|c|re)[\s]/x', $pmid, $strpiece, PREG_OFFSET_CAPTURE, $offset) == 1) {
// check if we are inside a string section '[( ... )]'
$stroffset = strpos($pmid, '[(', $offset);
if (($stroffset !== false) AND ($stroffset <= $strpiece[2][1])) {
// set offset to the end of string section
$offset = strpos($pmid, ')]', $stroffset);
while (($offset !== false) AND ($pmid{($offset - 1)} == '\\')) {
$offset = strpos($pmid, ')]', ($offset + 1));
}
if ($offset === false) {
$this->Error('HTML Justification: malformed PDF code.');
}
continue;
}
if ($this->isRTLTextDir()) {
$spacew = ($spacewidth * ($nsmax - $ns));
} else {
$spacew = ($spacewidth * $ns);
}
$offset = $strpiece[2][1] + strlen($strpiece[2][0]);
$epsposbeg = strpos($pmid, 'q'.$this->epsmarker, $offset);
$epsposend = strpos($pmid, $this->epsmarker.'Q', $offset) + strlen($this->epsmarker.'Q');
if ((($epsposbeg > 0) AND ($epsposend > 0) AND ($offset > $epsposbeg) AND ($offset < $epsposend))
OR (($epsposbeg === false) AND ($epsposend > 0) AND ($offset < $epsposend))) {
// shift EPS images
$trx = sprintf('1 0 0 1 %.3F 0 cm', $spacew);
$epsposbeg = strpos($pmid, 'q'.$this->epsmarker, ($prev_epsposbeg - 6));
$pmid_b = substr($pmid, 0, $epsposbeg);
$pmid_m = substr($pmid, $epsposbeg, ($epsposend - $epsposbeg));
$pmid_e = substr($pmid, $epsposend);
$pmid = $pmid_b."\nq\n".$trx."\n".$pmid_m."\nQ\n".$pmid_e;
$offset = $epsposend;
continue;
}
$prev_epsposbeg = $epsposbeg;
$currentxpos = 0;
// shift blocks of code
switch ($strpiece[2][0]) {
case 'Td':
case 'cm':
case 'm':
case 'l': {
// get current X position
preg_match('/([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s]('.$strpiece[2][0].')([\s]*)/x', $pmid, $xmatches);
$currentxpos = $xmatches[1];
$textpos = $currentxpos;
if (($strcount <= $maxkk) AND ($strpiece[2][0] == 'Td')) {
$ns = $lnstring[3][$strcount];
if ($this->isRTLTextDir()) {
$spacew = ($spacewidth * ($nsmax - $ns));
}
++$strcount;
}
// justify block
$pmid = preg_replace_callback('/([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s]('.$strpiece[2][0].')([\s]*)/x',
create_function('$matches', 'global $spacew;
$newx = sprintf("%.2F",(floatval($matches[1]) + $spacew));
return "".$newx." ".$matches[2]." x*#!#*x".$matches[3].$matches[4];'), $pmid, 1);
break;
}
case 're': {
// justify block
if (!$this->empty_string($this->lispacer)) {
$this->lispacer = '';
continue;
}
preg_match('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s](re)([\s]*)/x', $pmid, $xmatches);
$currentxpos = $xmatches[1];
global $x_diff, $w_diff;
$x_diff = 0;
$w_diff = 0;
if ($this->isRTLTextDir()) { // RTL
if ($currentxpos < $textpos) {
$x_diff = ($spacewidth * ($nsmax - $lnstring[3][$strcount]));
$w_diff = ($spacewidth * $lnstring[2][$strcount]);
} else {
if ($strcount > 0) {
$x_diff = ($spacewidth * ($nsmax - $lnstring[3][($strcount - 1)]));
$w_diff = ($spacewidth * $lnstring[2][($strcount - 1)]);
}
}
} else { // LTR
if ($currentxpos > $textpos) {
if ($strcount > 0) {
$x_diff = ($spacewidth * $lnstring[3][($strcount - 1)]);
}
$w_diff = ($spacewidth * $lnstring[2][$strcount]);
} else {
if ($strcount > 1) {
$x_diff = ($spacewidth * $lnstring[3][($strcount - 2)]);
}
if ($strcount > 0) {
$w_diff = ($spacewidth * $lnstring[2][($strcount - 1)]);
}
}
}
$pmid = preg_replace_callback('/('.$xmatches[1].')[\s]('.$xmatches[2].')[\s]('.$xmatches[3].')[\s]('.$strpiece[1][0].')[\s](re)([\s]*)/x',
create_function('$matches', 'global $x_diff, $w_diff;
$newx = sprintf("%.2F",(floatval($matches[1]) + $x_diff));
$neww = sprintf("%.2F",(floatval($matches[3]) + $w_diff));
return "".$newx." ".$matches[2]." ".$neww." ".$matches[4]." x*#!#*x".$matches[5].$matches[6];'), $pmid, 1);
break;
}
case 'c': {
// get current X position
preg_match('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s](c)([\s]*)/x', $pmid, $xmatches);
$currentxpos = $xmatches[1];
// justify block
$pmid = preg_replace_callback('/('.$xmatches[1].')[\s]('.$xmatches[2].')[\s]('.$xmatches[3].')[\s]('.$xmatches[4].')[\s]('.$xmatches[5].')[\s]('.$strpiece[1][0].')[\s](c)([\s]*)/x',
create_function('$matches', 'global $spacew;
$newx1 = sprintf("%.3F",(floatval($matches[1]) + $spacew));
$newx2 = sprintf("%.3F",(floatval($matches[3]) + $spacew));
$newx3 = sprintf("%.3F",(floatval($matches[5]) + $spacew));
return "".$newx1." ".$matches[2]." ".$newx2." ".$matches[4]." ".$newx3." ".$matches[6]." x*#!#*x".$matches[7].$matches[8];'), $pmid, 1);
break;
}
}
// shift the annotations and links
$cxpos = ($currentxpos / $this->k);
$lmpos = ($this->lMargin + $this->cell_padding['L'] + $this->feps);
if ($this->inxobj) {
// we are inside an XObject template
foreach ($this->xobjects[$this->xobjid]['annotations'] as $pak => $pac) {
if (($pac['y'] >= $minstartliney) AND (($pac['x'] * $this->k) >= ($currentxpos - $this->feps)) AND (($pac['x'] * $this->k) <= ($currentxpos + $this->feps))) {
if ($cxpos > $lmpos) {
$this->xobjects[$this->xobjid]['annotations'][$pak]['x'] += ($spacew / $this->k);
$this->xobjects[$this->xobjid]['annotations'][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k);
} else {
$this->xobjects[$this->xobjid]['annotations'][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k);
}
break;
}
}
} elseif (isset($this->PageAnnots[$this->page])) {
foreach ($this->PageAnnots[$this->page] as $pak => $pac) {
if (($pac['y'] >= $minstartliney) AND (($pac['x'] * $this->k) >= ($currentxpos - $this->feps)) AND (($pac['x'] * $this->k) <= ($currentxpos + $this->feps))) {
if ($cxpos > $lmpos) {
$this->PageAnnots[$this->page][$pak]['x'] += ($spacew / $this->k);
$this->PageAnnots[$this->page][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k);
} else {
$this->PageAnnots[$this->page][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k);
}
break;
}
}
}
} // end of while
// remove markers
$pmid = str_replace('x*#!#*x', '', $pmid);
if ($this->isUnicodeFont()) {
// multibyte characters
$spacew = $spacewidthu;
if ($this->font_stretching != 100) {
// word spacing is affected by stretching
$spacew /= ($this->font_stretching / 100);
}
$pmidtemp = $pmid;
// escape special characters
$pmidtemp = preg_replace('/[\\\][\(]/x', '\\#!#OP#!#', $pmidtemp);
$pmidtemp = preg_replace('/[\\\][\)]/x', '\\#!#CP#!#', $pmidtemp);
$pmid = preg_replace_callback("/\[\(([^\)]*)\)\]/x",
create_function('$matches', 'global $spacew;
$matches[1] = str_replace("#!#OP#!#", "(", $matches[1]);
$matches[1] = str_replace("#!#CP#!#", ")", $matches[1]);
return "[(".str_replace(chr(0).chr(32), ") ".sprintf("%.3F", $spacew)." (", $matches[1]).")]";'), $pmidtemp);
if ($this->inxobj) {
// we are inside an XObject template
$this->xobjects[$this->xobjid]['outdata'] = $pstart."\n".$pmid."\n".$pend;
} else {
$this->setPageBuffer($startlinepage, $pstart."\n".$pmid."\n".$pend);
}
$endlinepos = strlen($pstart."\n".$pmid."\n");
} else {
// non-unicode (single-byte characters)
if ($this->font_stretching != 100) {
// word spacing (Tw) is affected by stretching
$spacewidth /= ($this->font_stretching / 100);
}
$rs = sprintf('%.3F Tw', $spacewidth);
$pmid = preg_replace("/\[\(/x", $rs.' [(', $pmid);
if ($this->inxobj) {
// we are inside an XObject template
$this->xobjects[$this->xobjid]['outdata'] = $pstart."\n".$pmid."\nBT 0 Tw ET\n".$pend;
} else {
$this->setPageBuffer($startlinepage, $pstart."\n".$pmid."\nBT 0 Tw ET\n".$pend);
}
$endlinepos = strlen($pstart."\n".$pmid."\nBT 0 Tw ET\n");
}
}
} // end of J
} // end if $startlinex
if (($t_x != 0) OR ($yshift < 0)) {
// shift the line
$trx = sprintf('1 0 0 1 %.3F %.3F cm', ($t_x * $this->k), ($yshift * $this->k));
$pstart .= "\nq\n".$trx."\n".$pmid."\nQ\n";
$endlinepos = strlen($pstart);
if ($this->inxobj) {
// we are inside an XObject template
$this->xobjects[$this->xobjid]['outdata'] = $pstart.$pend;
foreach ($this->xobjects[$this->xobjid]['annotations'] as $pak => $pac) {
if ($pak >= $pask) {
$this->xobjects[$this->xobjid]['annotations'][$pak]['x'] += $t_x;
$this->xobjects[$this->xobjid]['annotations'][$pak]['y'] -= $yshift;
}
}
} else {
$this->setPageBuffer($startlinepage, $pstart.$pend);
// shift the annotations and links
if (isset($this->PageAnnots[$this->page])) {
foreach ($this->PageAnnots[$this->page] as $pak => $pac) {
if ($pak >= $pask) {
$this->PageAnnots[$this->page][$pak]['x'] += $t_x;
$this->PageAnnots[$this->page][$pak]['y'] -= $yshift;
}
}
}
}
$this->y -= $yshift;
}
}
$pbrk = $this->checkPageBreak($this->lasth);
$this->newline = false;
$startlinex = $this->x;
$startliney = $this->y;
if ($dom[$dom[$key]['parent']]['value'] == 'sup') {
$startliney -= ((0.3 * $this->FontSizePt) / $this->k);
} elseif ($dom[$dom[$key]['parent']]['value'] == 'sub') {
$startliney -= (($this->FontSizePt / 0.7) / $this->k);
} else {
$minstartliney = $startliney;
$maxbottomliney = ($this->y + (($fontsize * $this->cell_height_ratio) / $this->k));
}
$startlinepage = $this->page;
if (isset($endlinepos) AND (!$pbrk)) {
$startlinepos = $endlinepos;
} else {
if ($this->inxobj) {
// we are inside an XObject template
$startlinepos = strlen($this->xobjects[$this->xobjid]['outdata']);
} elseif (!$this->InFooter) {
if (isset($this->footerlen[$this->page])) {
$this->footerpos[$this->page] = $this->pagelen[$this->page] - $this->footerlen[$this->page];
} else {
$this->footerpos[$this->page] = $this->pagelen[$this->page];
}
$startlinepos = $this->footerpos[$this->page];
} else {
$startlinepos = $this->pagelen[$this->page];
}
}
unset($endlinepos);
$plalign = $lalign;
if (isset($this->PageAnnots[$this->page])) {
$pask = count($this->PageAnnots[$this->page]);
} else {
$pask = 0;
}
if (!($dom[$key]['tag'] AND !$dom[$key]['opening'] AND ($dom[$key]['value'] == 'table') AND ($this->emptypagemrk[$this->page] == $this->pagelen[$this->page]))) {
$this->SetFont($fontname, $fontstyle, $fontsize);
if ($wfill) {
$this->SetFillColorArray($this->bgcolor);
}
}
} // end newline
if (isset($opentagpos)) {
unset($opentagpos);
}
if ($dom[$key]['tag']) {
if ($dom[$key]['opening']) {
// get text indentation (if any)
if (isset($dom[$key]['text-indent']) AND $dom[$key]['block']) {
$this->textindent = $dom[$key]['text-indent'];
$this->newline = true;
}
// table
if ($dom[$key]['value'] == 'table') {
// available page width
if ($this->rtl) {
$wtmp = $this->x - $this->lMargin;
} else {
$wtmp = $this->w - $this->rMargin - $this->x;
}
if (isset($dom[$key]['attribute']['cellspacing'])) {
$cellspacing = $this->getHTMLUnitToUnits($dom[$key]['attribute']['cellspacing'], 1, 'px');
} else {
$cellspacing = 0;
}
// table width
if (isset($dom[$key]['width'])) {
$table_width = $this->getHTMLUnitToUnits($dom[$key]['width'], $wtmp, 'px');
} else {
$table_width = $wtmp;
}
$table_width -= (2 * $cellspacing);
if (!$this->inthead) {
$this->y += $cellspacing;
}
if ($this->rtl) {
$cellspacingx = -$cellspacing;
} else {
$cellspacingx = $cellspacing;
}
// total table width without cellspaces
$table_columns_width = ($table_width - ($cellspacing * ($dom[$key]['cols'] - 1)));
// minimum column width
$table_min_column_width = ($table_columns_width / $dom[$key]['cols']);
// array of custom column widths
$table_colwidths = array_fill(0, $dom[$key]['cols'], $table_min_column_width);
}
// table row
if ($dom[$key]['value'] == 'tr') {
// reset column counter
$colid = 0;
}
// table cell
if (($dom[$key]['value'] == 'td') OR ($dom[$key]['value'] == 'th')) {
$trid = $dom[$key]['parent'];
$table_el = $dom[$trid]['parent'];
if (!isset($dom[$table_el]['cols'])) {
$dom[$table_el]['cols'] = $dom[$trid]['cols'];
}
// store border info
$tdborder = 0;
if (isset($dom[$key]['border']) AND !empty($dom[$key]['border'])) {
$tdborder = $dom[$key]['border'];
}
$colspan = $dom[$key]['attribute']['colspan'];
$old_cell_padding = $this->cell_padding;
if (isset($dom[($dom[$trid]['parent'])]['attribute']['cellpadding'])) {
$current_cell_padding = $this->getHTMLUnitToUnits($dom[($dom[$trid]['parent'])]['attribute']['cellpadding'], 1, 'px');
} else {
$current_cell_padding = 0;
}
$this->SetCellPadding($current_cell_padding);
if (isset($dom[$key]['height'])) {
// minimum cell height
$cellh = $this->getHTMLUnitToUnits($dom[$key]['height'], 0, 'px');
} else {
$cellh = 0;
}
if (isset($dom[$key]['content'])) {
$cell_content = $dom[$key]['content'];
} else {
$cell_content = '&nbsp;';
}
$tagtype = $dom[$key]['value'];
$parentid = $key;
while (($key < $maxel) AND (!(($dom[$key]['tag']) AND (!$dom[$key]['opening']) AND ($dom[$key]['value'] == $tagtype) AND ($dom[$key]['parent'] == $parentid)))) {
// move $key index forward
++$key;
}
if (!isset($dom[$trid]['startpage'])) {
$dom[$trid]['startpage'] = $this->page;
} else {
$this->setPage($dom[$trid]['startpage']);
}
if (!isset($dom[$trid]['startcolumn'])) {
$dom[$trid]['startcolumn'] = $this->current_column;
} elseif ($this->current_column != $dom[$trid]['startcolumn']) {
$tmpx = $this->x;
$this->selectColumn($dom[$trid]['startcolumn']);
$this->x = $tmpx;
}
if (!isset($dom[$trid]['starty'])) {
$dom[$trid]['starty'] = $this->y;
} else {
$this->y = $dom[$trid]['starty'];
}
if (!isset($dom[$trid]['startx'])) {
$dom[$trid]['startx'] = $this->x;
$this->x += $cellspacingx;
} else {
$this->x += ($cellspacingx / 2);
}
if (isset($dom[$parentid]['attribute']['rowspan'])) {
$rowspan = intval($dom[$parentid]['attribute']['rowspan']);
} else {
$rowspan = 1;
}
// skip row-spanned cells started on the previous rows
if (isset($dom[$table_el]['rowspans'])) {
$rsk = 0;
$rskmax = count($dom[$table_el]['rowspans']);
while ($rsk < $rskmax) {
$trwsp = $dom[$table_el]['rowspans'][$rsk];
$rsstartx = $trwsp['startx'];
$rsendx = $trwsp['endx'];
// account for margin changes
if ($trwsp['startpage'] < $this->page) {
if (($this->rtl) AND ($this->pagedim[$this->page]['orm'] != $this->pagedim[$trwsp['startpage']]['orm'])) {
$dl = ($this->pagedim[$this->page]['orm'] - $this->pagedim[$trwsp['startpage']]['orm']);
$rsstartx -= $dl;
$rsendx -= $dl;
} elseif ((!$this->rtl) AND ($this->pagedim[$this->page]['olm'] != $this->pagedim[$trwsp['startpage']]['olm'])) {
$dl = ($this->pagedim[$this->page]['olm'] - $this->pagedim[$trwsp['startpage']]['olm']);
$rsstartx += $dl;
$rsendx += $dl;
}
}
if (($trwsp['rowspan'] > 0)
AND ($rsstartx > ($this->x - $cellspacing - $current_cell_padding - $this->feps))
AND ($rsstartx < ($this->x + $cellspacing + $current_cell_padding + $this->feps))
AND (($trwsp['starty'] < ($this->y - $this->feps)) OR ($trwsp['startpage'] < $this->page) OR ($trwsp['startcolumn'] < $this->current_column))) {
// set the starting X position of the current cell
$this->x = $rsendx + $cellspacingx;
// increment column indicator
$colid += $trwsp['colspan'];
if (($trwsp['rowspan'] == 1)
AND (isset($dom[$trid]['endy']))
AND (isset($dom[$trid]['endpage']))
AND (isset($dom[$trid]['endcolumn']))
AND ($trwsp['endpage'] == $dom[$trid]['endpage'])
AND ($trwsp['endcolumn'] == $dom[$trid]['endcolumn'])) {
// set ending Y position for row
$dom[$table_el]['rowspans'][$rsk]['endy'] = max($dom[$trid]['endy'], $trwsp['endy']);
$dom[$trid]['endy'] = $dom[$table_el]['rowspans'][$rsk]['endy'];
}
$rsk = 0;
} else {
++$rsk;
}
}
}
if (isset($dom[$parentid]['width'])) {
// user specified width
$cellw = $this->getHTMLUnitToUnits($dom[$parentid]['width'], $table_columns_width, 'px');
$tmpcw = ($cellw / $colspan);
for ($i = 0; $i < $colspan; ++$i) {
$table_colwidths[($colid + $i)] = $tmpcw;
}
} else {
// inherit column width
$cellw = 0;
for ($i = 0; $i < $colspan; ++$i) {
$cellw += $table_colwidths[($colid + $i)];
}
}
$cellw += (($colspan - 1) * $cellspacing);
// increment column indicator
$colid += $colspan;
// add rowspan information to table element
if ($rowspan > 1) {
$trsid = array_push($dom[$table_el]['rowspans'], array('trid' => $trid, 'rowspan' => $rowspan, 'mrowspan' => $rowspan, 'colspan' => $colspan, 'startpage' => $this->page, 'startcolumn' => $this->current_column, 'startx' => $this->x, 'starty' => $this->y));
}
$cellid = array_push($dom[$trid]['cellpos'], array('startx' => $this->x));
if ($rowspan > 1) {
$dom[$trid]['cellpos'][($cellid - 1)]['rowspanid'] = ($trsid - 1);
}
// push background colors
if (isset($dom[$parentid]['bgcolor']) AND ($dom[$parentid]['bgcolor'] !== false)) {
$dom[$trid]['cellpos'][($cellid - 1)]['bgcolor'] = $dom[$parentid]['bgcolor'];
}
// store border info
if (isset($tdborder) AND !empty($tdborder)) {
$dom[$trid]['cellpos'][($cellid - 1)]['border'] = $tdborder;
}
$prevLastH = $this->lasth;
// store some info for multicolumn mode
if ($this->rtl) {
$this->colxshift['x'] = $this->w - $this->x - $this->rMargin;
} else {
$this->colxshift['x'] = $this->x - $this->lMargin;
}
$this->colxshift['s'] = $cellspacing;
$this->colxshift['p'] = $current_cell_padding;
// ****** write the cell content ******
$this->MultiCell($cellw, $cellh, $cell_content, false, $lalign, false, 2, '', '', true, 0, true);
// restore some values
$this->colxshift = array('x' => 0, 's' => 0, 'p' => 0);
$this->lasth = $prevLastH;
$this->cell_padding = $old_cell_padding;
$dom[$trid]['cellpos'][($cellid - 1)]['endx'] = $this->x;
// update the end of row position
if ($rowspan <= 1) {
if (isset($dom[$trid]['endy'])) {
if (($this->page == $dom[$trid]['endpage']) AND ($this->current_column == $dom[$trid]['endcolumn'])) {
$dom[$trid]['endy'] = max($this->y, $dom[$trid]['endy']);
} elseif (($this->page > $dom[$trid]['endpage']) OR ($this->current_column > $dom[$trid]['endcolumn'])) {
$dom[$trid]['endy'] = $this->y;
}
} else {
$dom[$trid]['endy'] = $this->y;
}
if (isset($dom[$trid]['endpage'])) {
$dom[$trid]['endpage'] = max($this->page, $dom[$trid]['endpage']);
} else {
$dom[$trid]['endpage'] = $this->page;
}
if (isset($dom[$trid]['endcolumn'])) {
$dom[$trid]['endcolumn'] = max($this->current_column, $dom[$trid]['endcolumn']);
} else {
$dom[$trid]['endcolumn'] = $this->current_column;
}
} else {
// account for row-spanned cells
$dom[$table_el]['rowspans'][($trsid - 1)]['endx'] = $this->x;
$dom[$table_el]['rowspans'][($trsid - 1)]['endy'] = $this->y;
$dom[$table_el]['rowspans'][($trsid - 1)]['endpage'] = $this->page;
$dom[$table_el]['rowspans'][($trsid - 1)]['endcolumn'] = $this->current_column;
}
if (isset($dom[$table_el]['rowspans'])) {
// update endy and endpage on rowspanned cells
foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) {
if ($trwsp['rowspan'] > 0) {
if (isset($dom[$trid]['endpage'])) {
if (($trwsp['endpage'] == $dom[$trid]['endpage']) AND ($trwsp['endcolumn'] == $dom[$trid]['endcolumn'])) {
$dom[$table_el]['rowspans'][$k]['endy'] = max($dom[$trid]['endy'], $trwsp['endy']);
} elseif (($trwsp['endpage'] < $dom[$trid]['endpage']) OR ($trwsp['endcolumn'] < $dom[$trid]['endcolumn'])) {
$dom[$table_el]['rowspans'][$k]['endy'] = $dom[$trid]['endy'];
$dom[$table_el]['rowspans'][$k]['endpage'] = $dom[$trid]['endpage'];
$dom[$table_el]['rowspans'][$k]['endcolumn'] = $dom[$trid]['endcolumn'];
} else {
$dom[$trid]['endy'] = $this->pagedim[$dom[$trid]['endpage']]['hk'] - $this->pagedim[$dom[$trid]['endpage']]['bm'];
}
}
}
}
}
$this->x += ($cellspacingx / 2);
} else {
// opening tag (or self-closing tag)
if (!isset($opentagpos)) {
if ($this->inxobj) {
// we are inside an XObject template
$opentagpos = strlen($this->xobjects[$this->xobjid]['outdata']);
} elseif (!$this->InFooter) {
if (isset($this->footerlen[$this->page])) {
$this->footerpos[$this->page] = $this->pagelen[$this->page] - $this->footerlen[$this->page];
} else {
$this->footerpos[$this->page] = $this->pagelen[$this->page];
}
$opentagpos = $this->footerpos[$this->page];
}
}
$this->openHTMLTagHandler($dom, $key, $cell);
}
} else { // closing tag
$prev_numpages = $this->numpages;
$old_bordermrk = $this->bordermrk[$this->page];
$this->closeHTMLTagHandler($dom, $key, $cell, $maxbottomliney);
if ($this->bordermrk[$this->page] > $old_bordermrk) {
$startlinepos += ($this->bordermrk[$this->page] - $old_bordermrk);
}
if ($prev_numpages > $this->numpages) {
$startlinepage = $this->page;
}
}
} elseif (strlen($dom[$key]['value']) > 0) {
// print list-item
if (!$this->empty_string($this->lispacer) AND ($this->lispacer != '^')) {
$this->SetFont($pfontname, $pfontstyle, $pfontsize);
$this->resetLastH();
$minstartliney = $this->y;
$maxbottomliney = ($startliney + ($this->FontSize * $this->cell_height_ratio));
$this->putHtmlListBullet($this->listnum, $this->lispacer, $pfontsize);
$this->SetFont($curfontname, $curfontstyle, $curfontsize);
$this->resetLastH();
if (is_numeric($pfontsize) AND ($pfontsize > 0) AND is_numeric($curfontsize) AND ($curfontsize > 0) AND ($pfontsize != $curfontsize)) {
$pfontascent = $this->getFontAscent($pfontname, $pfontstyle, $pfontsize);
$pfontdescent = $this->getFontDescent($pfontname, $pfontstyle, $pfontsize);
$this->y += ((($pfontsize - $curfontsize) * $this->cell_height_ratio / $this->k) + $pfontascent - $curfontascent - $pfontdescent + $curfontdescent) / 2;
$minstartliney = min($this->y, $minstartliney);
$maxbottomliney = max(($this->y + (($pfontsize * $this->cell_height_ratio) / $this->k)), $maxbottomliney);
}
}
// text
$this->htmlvspace = 0;
if ((!$this->premode) AND $this->isRTLTextDir()) {
// reverse spaces order
$lsp = ''; // left spaces
$rsp = ''; // right spaces
if (preg_match('/^('.$this->re_space['p'].'+)/'.$this->re_space['m'], $dom[$key]['value'], $matches)) {
$lsp = $matches[1];
}
if (preg_match('/('.$this->re_space['p'].'+)$/'.$this->re_space['m'], $dom[$key]['value'], $matches)) {
$rsp = $matches[1];
}
$dom[$key]['value'] = $rsp.$this->stringTrim($dom[$key]['value']).$lsp;
}
if ($newline) {
if (!$this->premode) {
$prelen = strlen($dom[$key]['value']);
if ($this->isRTLTextDir()) {
// right trim except non-breaking space
$dom[$key]['value'] = $this->stringRightTrim($dom[$key]['value']);
} else {
// left trim except non-breaking space
$dom[$key]['value'] = $this->stringLeftTrim($dom[$key]['value']);
}
$postlen = strlen($dom[$key]['value']);
if (($postlen == 0) AND ($prelen > 0)) {
$dom[$key]['trimmed_space'] = true;
}
}
$newline = false;
$firstblock = true;
} else {
$firstblock = false;
// replace empty multiple spaces string with a single space
$dom[$key]['value'] = preg_replace('/^'.$this->re_space['p'].'+$/'.$this->re_space['m'], chr(32), $dom[$key]['value']);
}
$strrest = '';
if ($this->rtl) {
$this->x -= $this->textindent;
} else {
$this->x += $this->textindent;
}
if (!isset($dom[$key]['trimmed_space']) OR !$dom[$key]['trimmed_space']) {
if (!empty($this->HREF) AND (isset($this->HREF['url']))) {
// HTML <a> Link
$hrefcolor = '';
if (isset($dom[($dom[$key]['parent'])]['fgcolor']) AND ($dom[($dom[$key]['parent'])]['fgcolor'] !== false)) {
$hrefcolor = $dom[($dom[$key]['parent'])]['fgcolor'];
}
$hrefstyle = -1;
if (isset($dom[($dom[$key]['parent'])]['fontstyle']) AND ($dom[($dom[$key]['parent'])]['fontstyle'] !== false)) {
$hrefstyle = $dom[($dom[$key]['parent'])]['fontstyle'];
}
$strrest = $this->addHtmlLink($this->HREF['url'], $dom[$key]['value'], $wfill, true, $hrefcolor, $hrefstyle, true);
} else {
$wadj = 0; // space to leave for block continuity
$adjblks = 0; // number of blocks
// check the next text blocks for continuity
$nkey = ($key + 1);
$write_block = true;
$tmp_fontname = $this->FontFamily;
$tmp_fontstyle = $this->FontStyle;
$tmp_fontsize = $this->FontSizePt;
while ($write_block AND isset($dom[$nkey])) {
if ($dom[$nkey]['tag']) {
if ($dom[$nkey]['block']) {
// end of block
$write_block = false;
}
$tmp_fontname = isset($dom[$nkey]['fontname']) ? $dom[$nkey]['fontname'] : $this->FontFamily;
$tmp_fontstyle = isset($dom[$nkey]['fontstyle']) ? $dom[$nkey]['fontstyle'] : $this->FontStyle;
$tmp_fontsize = isset($dom[$nkey]['fontsize']) ? $dom[$nkey]['fontsize'] : $this->FontSizePt;
} else {
$nextstr = preg_split('/'.$this->re_space['p'].'+/'.$this->re_space['m'], $dom[$nkey]['value']);
if (isset($nextstr[0])) {
$wadj += $this->GetStringWidth($nextstr[0], $tmp_fontname, $tmp_fontstyle, $tmp_fontsize);
++$adjblks;
}
if (isset($nextstr[1])) {
$write_block = false;
}
}
++$nkey;
}
// check for reversed text direction
if (($wadj > 0) AND (($this->rtl AND ($this->tmprtl == 'L')) OR (!$this->rtl AND ($this->tmprtl == 'R')))) {
// LTR text on RTL direction or RTL text on LTR direction
$reverse_dir = true;
$this->rtl = !$this->rtl;
$revshift = ($this->GetStringWidth($dom[$key]['value']) + $wadj) + 0.000001; // add little quantity for rounding problems
if ($this->rtl) {
$this->x += $revshift;
} else {
$this->x -= $revshift;
}
$xws = $this->x;
}
// ****** write only until the end of the line and get the rest ******
$strrest = $this->Write($this->lasth, $dom[$key]['value'], '', $wfill, '', false, 0, true, $firstblock, 0, $wadj);
// restore default direction
if ($reverse_dir AND ($wadj == 0)) {
$this->x = $xws;
$this->rtl = !$this->rtl;
$reverse_dir = false;
}
}
}
$this->textindent = 0;
if (strlen($strrest) > 0) {
// store the remaining string on the previous $key position
$this->newline = true;
if ($strrest == $dom[$key]['value']) {
// used to avoid infinite loop
++$loop;
} else {
$loop = 0;
}
$dom[$key]['value'] = $strrest;
if ($cell) {
if ($this->rtl) {
$this->x -= $this->cell_padding['R'];
} else {
$this->x += $this->cell_padding['L'];
}
}
if ($loop < 3) {
--$key;
}
} else {
$loop = 0;
}
}
++$key;
if (isset($dom[$key]['tag']) AND $dom[$key]['tag'] AND (!isset($dom[$key]['opening']) OR !$dom[$key]['opening']) AND isset($dom[($dom[$key]['parent'])]['attribute']['nobr']) AND ($dom[($dom[$key]['parent'])]['attribute']['nobr'] == 'true')) {
// check if we are on a new page or on a new column
if ((!$undo) AND ($this->y < $this->start_transaction_y)) {
// we are on a new page or on a new column and the total object height is less than the available vertical space.
// restore previous object
$this->rollbackTransaction(true);
// restore previous values
foreach ($this_method_vars as $vkey => $vval) {
$$vkey = $vval;
}
// add a page (or trig AcceptPageBreak() for multicolumn mode)
$pre_y = $this->y;
if ((!$this->checkPageBreak($this->PageBreakTrigger + 1)) AND ($this->y < $pre_y)) {
$startliney = $this->y;
}
$undo = true; // avoid infinite loop
} else {
$undo = false;
}
}
} // end for each $key
// align the last line
if (isset($startlinex)) {
$yshift = $minstartliney - $startliney;
if (($yshift > 0) OR ($this->page > $startlinepage)) {
$yshift = 0;
}
$t_x = 0;
// the last line must be shifted to be aligned as requested
$linew = abs($this->endlinex - $startlinex);
if ($this->inxobj) {
// we are inside an XObject template
$pstart = substr($this->xobjects[$this->xobjid]['outdata'], 0, $startlinepos);
if (isset($opentagpos)) {
$midpos = $opentagpos;
} else {
$midpos = 0;
}
if ($midpos > 0) {
$pmid = substr($this->xobjects[$this->xobjid]['outdata'], $startlinepos, ($midpos - $startlinepos));
$pend = substr($this->xobjects[$this->xobjid]['outdata'], $midpos);
} else {
$pmid = substr($this->xobjects[$this->xobjid]['outdata'], $startlinepos);
$pend = '';
}
} else {
$pstart = substr($this->getPageBuffer($startlinepage), 0, $startlinepos);
if (isset($opentagpos) AND isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)) {
$this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage];
$midpos = min($opentagpos, $this->footerpos[$startlinepage]);
} elseif (isset($opentagpos)) {
$midpos = $opentagpos;
} elseif (isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)) {
$this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage];
$midpos = $this->footerpos[$startlinepage];
} else {
$midpos = 0;
}
if ($midpos > 0) {
$pmid = substr($this->getPageBuffer($startlinepage), $startlinepos, ($midpos - $startlinepos));
$pend = substr($this->getPageBuffer($startlinepage), $midpos);
} else {
$pmid = substr($this->getPageBuffer($startlinepage), $startlinepos);
$pend = '';
}
}
if ((isset($plalign) AND ((($plalign == 'C') OR (($plalign == 'R') AND (!$this->rtl)) OR (($plalign == 'L') AND ($this->rtl)))))) {
// calculate shifting amount
$tw = $w;
if ($this->lMargin != $prevlMargin) {
$tw += ($prevlMargin - $this->lMargin);
}
if ($this->rMargin != $prevrMargin) {
$tw += ($prevrMargin - $this->rMargin);
}
$one_space_width = $this->GetStringWidth(chr(32));
$no = 0; // number of spaces on a line contained on a single block
if ($this->isRTLTextDir()) { // RTL
// remove left space if exist
$pos1 = $this->revstrpos($pmid, '[(');
if ($pos1 > 0) {
$pos1 = intval($pos1);
if ($this->isUnicodeFont()) {
$pos2 = intval($this->revstrpos($pmid, '[('.chr(0).chr(32)));
$spacelen = 2;
} else {
$pos2 = intval($this->revstrpos($pmid, '[('.chr(32)));
$spacelen = 1;
}
if ($pos1 == $pos2) {
$pmid = substr($pmid, 0, ($pos1 + 2)).substr($pmid, ($pos1 + 2 + $spacelen));
if (substr($pmid, $pos1, 4) == '[()]') {
$linew -= $one_space_width;
} elseif ($pos1 == strpos($pmid, '[(')) {
$no = 1;
}
}
}
} else { // LTR
// remove right space if exist
$pos1 = $this->revstrpos($pmid, ')]');
if ($pos1 > 0) {
$pos1 = intval($pos1);
if ($this->isUnicodeFont()) {
$pos2 = intval($this->revstrpos($pmid, chr(0).chr(32).')]')) + 2;
$spacelen = 2;
} else {
$pos2 = intval($this->revstrpos($pmid, chr(32).')]')) + 1;
$spacelen = 1;
}
if ($pos1 == $pos2) {
$pmid = substr($pmid, 0, ($pos1 - $spacelen)).substr($pmid, $pos1);
$linew -= $one_space_width;
}
}
}
$mdiff = ($tw - $linew);
if ($plalign == 'C') {
if ($this->rtl) {
$t_x = -($mdiff / 2);
} else {
$t_x = ($mdiff / 2);
}
} elseif ($plalign == 'R') {
// right alignment on LTR document
$t_x = $mdiff;
} elseif ($plalign == 'L') {
// left alignment on RTL document
$t_x = -$mdiff;
}
} // end if startlinex
if (($t_x != 0) OR ($yshift < 0)) {
// shift the line
$trx = sprintf('1 0 0 1 %.3F %.3F cm', ($t_x * $this->k), ($yshift * $this->k));
$pstart .= "\nq\n".$trx."\n".$pmid."\nQ\n";
$endlinepos = strlen($pstart);
if ($this->inxobj) {
// we are inside an XObject template
$this->xobjects[$this->xobjid]['outdata'] = $pstart.$pend;
foreach ($this->xobjects[$this->xobjid]['annotations'] as $pak => $pac) {
if ($pak >= $pask) {
$this->xobjects[$this->xobjid]['annotations'][$pak]['x'] += $t_x;
$this->xobjects[$this->xobjid]['annotations'][$pak]['y'] -= $yshift;
}
}
} else {
$this->setPageBuffer($startlinepage, $pstart.$pend);
// shift the annotations and links
if (isset($this->PageAnnots[$this->page])) {
foreach ($this->PageAnnots[$this->page] as $pak => $pac) {
if ($pak >= $pask) {
$this->PageAnnots[$this->page][$pak]['x'] += $t_x;
$this->PageAnnots[$this->page][$pak]['y'] -= $yshift;
}
}
}
}
$this->y -= $yshift;
}
}
// restore previous values
$this->setGraphicVars($gvars);
if ($this->num_columns > 1) {
$this->selectColumn();
} elseif ($this->page > $prevPage) {
$this->lMargin = $this->pagedim[$this->page]['olm'];
$this->rMargin = $this->pagedim[$this->page]['orm'];
}
// restore previous list state
$this->cell_height_ratio = $prev_cell_height_ratio;
$this->listnum = $prev_listnum;
$this->listordered = $prev_listordered;
$this->listcount = $prev_listcount;
$this->lispacer = $prev_lispacer;
if ($ln AND (!($cell AND ($dom[$key-1]['value'] == 'table')))) {
$this->Ln($this->lasth);
if ($this->y < $maxbottomliney) {
$this->y = $maxbottomliney;
}
}
unset($dom);
}

+ Here is the caller graph for this function:

TCPDF::writeHTMLCell (   $w,
  $h,
  $x,
  $y,
  $html = '',
  $border = 0,
  $ln = 0,
  $fill = false,
  $reseth = true,
  $align = '',
  $autopadding = true 
)

Prints a cell (rectangular area) with optional borders, background color and html text string.

       The upper-left corner of the cell corresponds to the current position. After the call, the current position moves to the right or to the next line.<br />
       If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.
       @param float $w Cell width. If 0, the cell extends up to the right margin.
       @param float $h Cell minimum height. The cell extends automatically if needed.
       @param float $x upper-left corner X coordinate
       @param float $y upper-left corner Y coordinate
       @param string $html html text to print. Default value: empty string.
       @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
       @param int $ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL language)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul>

Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.

Parameters
boolean$fillIndicates if the cell background must be painted (true) or transparent (false).
boolean$resethif true reset the last cell height (default true).
string$alignAllows to center or align the text. Possible values are:
  • L : left align
  • C : center
  • R : right align
  • '' : empty string : left for LTR or right for RTL
boolean$autopaddingif true, uses internal padding and automatically adjust it to account for line width. public MultiCell()
See Also
Multicell(), writeHTML()

Definition at line 18658 of file tcpdf.php.

References $x, and $y.

{
return $this->MultiCell($w, $h, $html, $border, $align, $fill, $ln, $x, $y, $reseth, 0, true, $autopadding, 0);
}

Field Documentation

TCPDF::$AliasNbPages = '{nb}'
protected

Definition at line 509 of file tcpdf.php.

TCPDF::$AliasNumPage = '{pnb}'
protected

Definition at line 515 of file tcpdf.php.

TCPDF::$annotation_fonts = array()
protected

List of fonts used on form fields (fontname => fontkey).

protected

Since
4.8.001 (2009-09-09)

Definition at line 1384 of file tcpdf.php.

TCPDF::$author = ''
protected

Definition at line 491 of file tcpdf.php.

Referenced by SetAuthor().

TCPDF::$AutoPageBreak
protected

Definition at line 449 of file tcpdf.php.

Referenced by AcceptPageBreak(), and setPageOrientation().

TCPDF::$barcode = false
protected

Definition at line 612 of file tcpdf.php.

Referenced by Footer().

TCPDF::$bgcolor
protected

Definition at line 710 of file tcpdf.php.

TCPDF::$bMargin
protected

Definition at line 283 of file tcpdf.php.

Referenced by getBreakMargin(), MultiCell(), and setPageOrientation().

TCPDF::$booklet = false
protected

Booklet mode for double-sided pages protected.

Since
4.2.000 (2008-10-29)

Definition at line 1074 of file tcpdf.php.

TCPDF::$bordermrk = array()
protected

Array used to store positions inside the pages buffer.

keys are the page numbers protected

Since
5.7.000 (2010-08-03)

Definition at line 946 of file tcpdf.php.

TCPDF::$buffer
protected

Definition at line 187 of file tcpdf.php.

TCPDF::$bufferlen = 0
protected

Length of the buffer in bytes.

protected

Since
4.5.000 (2008-12-31)

Definition at line 1174 of file tcpdf.php.

TCPDF::$byterange_string = '/ByteRange[0 ********** ********** **********]'
protected

ByteRange placemark used during signature process.

protected

Since
4.6.028 (2009-08-25)

Definition at line 1321 of file tcpdf.php.

TCPDF::$cache_file_length = array()
protected

Array used to store the lengths of cache files protected.

Since
4.5.029 (2009-03-19)

Definition at line 1230 of file tcpdf.php.

TCPDF::$cache_maxsize_UTF8StringToArray = 8
protected

Maximum size of cache array used for UTF8StringToArray() method.

protected

Since
4.5.037 (2009-04-07)

Definition at line 1258 of file tcpdf.php.

TCPDF::$cache_size_UTF8StringToArray = 0
protected

Current size of cache array used for UTF8StringToArray() method.

protected

Since
4.5.037 (2009-04-07)

Definition at line 1265 of file tcpdf.php.

TCPDF::$cache_UTF8StringToArray = array()
protected

Cache array for UTF8StringToArray() method.

protected

Since
4.5.037 (2009-04-07)

Definition at line 1251 of file tcpdf.php.

TCPDF::$cell_height_ratio = K_CELL_HEIGHT_RATIO
protected

Default cell height ratio.

protected

Since
3.0.014 (2008-05-23)

Definition at line 909 of file tcpdf.php.

Referenced by Cell(), getCellCode(), getStringHeight(), and resetLastH().

TCPDF::$cell_margin = array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0)
protected

Definition at line 297 of file tcpdf.php.

Referenced by Cell(), getCellCode(), getCellMargins(), MultiCell(), and Write().

TCPDF::$cell_padding = array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0)
protected
TCPDF::$cntmrk = array()
protected

Array used to store content positions inside the pages buffer.

keys are the page numbers protected

Since
4.6.021 (2009-07-20)

Definition at line 962 of file tcpdf.php.

TCPDF::$ColorFlag
protected

Definition at line 443 of file tcpdf.php.

TCPDF::$column_start_page = 0
protected

Starting page for columns protected.

Since
4.9.001 (2010-03-28)

Definition at line 1454 of file tcpdf.php.

TCPDF::$columns = array()
protected

Array of column measures (width, space, starting Y position) protected.

Since
4.9.001 (2010-03-28)

Definition at line 1433 of file tcpdf.php.

TCPDF::$colxshift = array('x' => 0, 's' => 0, 'p' => 0)
protected

Array of: X difference between table cell x start and starting page margin, cellspacing, cellpadding protected.

Since
5.8.000 (2010-08-11)

Definition at line 1468 of file tcpdf.php.

TCPDF::$compress
protected

Definition at line 205 of file tcpdf.php.

Referenced by SetCompression().

TCPDF::$CoreFonts
protected

Definition at line 327 of file tcpdf.php.

TCPDF::$creator = ''
protected

Definition at line 503 of file tcpdf.php.

Referenced by SetCreator().

TCPDF::$CurOrientation
protected

Definition at line 211 of file tcpdf.php.

Referenced by setPageOrientation().

TCPDF::$current_column = 0
protected

Current column number protected.

Since
4.9.001 (2010-03-28)

Definition at line 1447 of file tcpdf.php.

Referenced by MultiCell().

TCPDF::$CurrentFont
protected

Definition at line 407 of file tcpdf.php.

TCPDF::$currpagegroup
protected

Contains the alias of the current page group protected.

Since
3.0.000 (2008-03-27)

Definition at line 867 of file tcpdf.php.

TCPDF::$customlistindent = -1
protected

Definition at line 1096 of file tcpdf.php.

TCPDF::$default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128))
protected

Deafult Javascript field properties.

Possible values are described on official Javascript for Acrobat API reference. Annotation options can be directly specified using the 'aopt' entry. protected

Since
4.8.000 (2009-09-07)

Definition at line 1349 of file tcpdf.php.

TCPDF::$default_graphic_vars = array()
protected

Definition at line 1523 of file tcpdf.php.

TCPDF::$default_monospaced_font = 'courier'
protected

Default monospaced font protected.

Since
4.5.025 (2009-03-10)

Definition at line 1216 of file tcpdf.php.

TCPDF::$default_table_columns = 4
protected

Definition at line 654 of file tcpdf.php.

TCPDF::$diffs = array()
protected

Definition at line 345 of file tcpdf.php.

TCPDF::$diskcache = false
protected

If true enables disk caching.

protected

Since
4.5.000 (2008-12-31)

Definition at line 1181 of file tcpdf.php.

Referenced by __construct().

TCPDF::$dpi = 72
protected

Dot Per Inch Document Resolution (do not change) protected.

Since
3.0.000 (2008-03-27)

Definition at line 846 of file tcpdf.php.

Referenced by Image(), and setPageUnit().

TCPDF::$DrawColor
protected

Definition at line 425 of file tcpdf.php.

Referenced by SetDrawColor().

TCPDF::$embeddedfiles = array()
protected

Definition at line 1110 of file tcpdf.php.

TCPDF::$emptypagemrk = array()
protected

Array used to store page positions to track empty pages.

keys are the page numbers protected

Since
5.8.007 (2010-08-18)

Definition at line 954 of file tcpdf.php.

TCPDF::$enc_padding = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A"
protected

Encryption padding protected.

Definition at line 786 of file tcpdf.php.

TCPDF::$encoding = 'UTF-8'
protected

Definition at line 729 of file tcpdf.php.

Referenced by __construct().

TCPDF::$encryptdata = array()
protected

Array containing encryption settings protected.

Since
5.0.005 (2010-05-11)

Definition at line 766 of file tcpdf.php.

TCPDF::$encrypted
protected

Indicates whether document is protected protected.

Since
2.0.000 (2008-01-02)

Definition at line 759 of file tcpdf.php.

TCPDF::$endlinex = 0
protected

End position of the latest inserted line protected.

Since
3.2.000 (2008-07-01)

Definition at line 990 of file tcpdf.php.

TCPDF::$epsmarker = 'x#!#EPS#!#x'
protected

String used to mark the beginning and end of EPS image blocks protected.

Since
4.1.000 (2008-10-18)

Definition at line 1053 of file tcpdf.php.

TCPDF::$extgstates
protected

Array of transparency objects and parameters.

protected

Since
3.0.000 (2008-03-27)

Definition at line 895 of file tcpdf.php.

TCPDF::$feps = 0.005
protected

Epsilon value used for float calculations protected.

Since
4.2.000 (2008-10-29)

Definition at line 1081 of file tcpdf.php.

TCPDF::$fgcolor
protected

Definition at line 674 of file tcpdf.php.

TCPDF::$fhPt
protected

Definition at line 235 of file tcpdf.php.

Referenced by setPageOrientation().

TCPDF::$file_id
protected

File ID (used on trailer) protected.

Since
5.0.005 (2010-05-12)

Definition at line 793 of file tcpdf.php.

TCPDF::$FillColor
protected

Definition at line 431 of file tcpdf.php.

TCPDF::$font_obj_ids = array()
protected

Store the font object IDs.

protected

Since
4.8.001 (2009-09-09)

Definition at line 1202 of file tcpdf.php.

TCPDF::$font_spacing = 0
protected

Definition at line 1558 of file tcpdf.php.

Referenced by getCellCode(), and GetCharWidth().

TCPDF::$font_stretching = 100
protected

Definition at line 1551 of file tcpdf.php.

Referenced by getCellCode().

TCPDF::$font_subsetting = true
protected

Definition at line 1516 of file tcpdf.php.

Referenced by AddFont().

TCPDF::$FontAscent
protected

Definition at line 382 of file tcpdf.php.

Referenced by getCellCode().

TCPDF::$FontDescent
protected

Definition at line 389 of file tcpdf.php.

Referenced by getCellCode().

TCPDF::$FontFamily
protected

Definition at line 369 of file tcpdf.php.

Referenced by AddFont(), and GetArrStringWidth().

TCPDF::$FontFiles = array()
protected

Definition at line 339 of file tcpdf.php.

TCPDF::$fontkeys = array()
protected

Store the font keys.

protected

Since
4.5.000 (2009-01-02)

Definition at line 1195 of file tcpdf.php.

TCPDF::$fontlist = array()
protected

Definition at line 668 of file tcpdf.php.

TCPDF::$fonts = array()
protected

Definition at line 333 of file tcpdf.php.

TCPDF::$FontSize
protected

Definition at line 419 of file tcpdf.php.

Referenced by getCellCode().

TCPDF::$FontSizePt
protected

Definition at line 413 of file tcpdf.php.

Referenced by GetArrStringWidth(), MultiCell(), and SetFont().

TCPDF::$FontStyle
protected

Definition at line 375 of file tcpdf.php.

Referenced by GetArrStringWidth().

TCPDF::$footer_font
protected

Definition at line 600 of file tcpdf.php.

TCPDF::$footer_margin
protected

Definition at line 574 of file tcpdf.php.

Referenced by getFooterMargin(), and setFooter().

TCPDF::$footerlen = array()
protected

Array used to store footer length of each page.

protected

Since
4.0.014 (2008-07-29)

Definition at line 976 of file tcpdf.php.

TCPDF::$footerpos = array()
protected

Array used to store footer positions of each page.

protected

Since
3.2.000 (2008-07-01)

Definition at line 969 of file tcpdf.php.

TCPDF::$form_action = ''
protected

Current form action (used during XHTML rendering) protected.

Since
4.8.000 (2009-09-07)

Definition at line 1363 of file tcpdf.php.

TCPDF::$form_enctype = 'application/x-www-form-urlencoded'
protected

Current form encryption type (used during XHTML rendering) protected.

Since
4.8.000 (2009-09-07)

Definition at line 1370 of file tcpdf.php.

TCPDF::$form_mode = 'post'
protected

Current method to submit forms.

protected

Since
4.8.000 (2009-09-07)

Definition at line 1377 of file tcpdf.php.

TCPDF::$form_obj_id = array()
protected

List of form annotations IDs protected.

Since
4.8.000 (2009-09-07)

Definition at line 1342 of file tcpdf.php.

TCPDF::$fwPt
protected

Definition at line 229 of file tcpdf.php.

Referenced by setPageOrientation().

TCPDF::$gradients = array()
protected

Array for storing gradient information.

protected

Since
3.1.000 (2008-06-09)

Definition at line 930 of file tcpdf.php.

TCPDF::$header_font
protected

Definition at line 594 of file tcpdf.php.

TCPDF::$header_logo = ''
protected

Definition at line 630 of file tcpdf.php.

Referenced by getHeaderData().

TCPDF::$header_logo_width = 30
protected

Definition at line 636 of file tcpdf.php.

Referenced by getHeaderData().

TCPDF::$header_margin
protected

Definition at line 568 of file tcpdf.php.

Referenced by getHeaderMargin().

TCPDF::$header_string = ''
protected

Definition at line 648 of file tcpdf.php.

Referenced by getHeaderData().

TCPDF::$header_title = ''
protected

Definition at line 642 of file tcpdf.php.

Referenced by getHeaderData().

TCPDF::$hPt
protected

Definition at line 247 of file tcpdf.php.

Referenced by setPageOrientation().

TCPDF::$HREF = array()
protected

Definition at line 662 of file tcpdf.php.

TCPDF::$htmlLinkColorArray = array(0, 0, 255)
protected

Default color for html links protected.

Since
4.4.003 (2008-12-09)

Definition at line 1132 of file tcpdf.php.

TCPDF::$htmlLinkFontStyle = 'U'
protected

Default font style to add to html links protected.

Since
4.4.003 (2008-12-09)

Definition at line 1139 of file tcpdf.php.

TCPDF::$htmlvspace = 0
protected

Count the latest inserted vertical spaces on HTML protected.

Since
4.0.021 (2008-08-24)

Definition at line 1032 of file tcpdf.php.

TCPDF::$imagekeys = array()
protected

Store the image keys.

protected

Since
4.5.000 (2008-12-31)

Definition at line 1167 of file tcpdf.php.

TCPDF::$images = array()
protected

Definition at line 351 of file tcpdf.php.

TCPDF::$img_rb_x
protected

Definition at line 523 of file tcpdf.php.

Referenced by getImageRBX(), and Image().

TCPDF::$img_rb_y
protected

Definition at line 531 of file tcpdf.php.

Referenced by getImageRBY(), and Image().

TCPDF::$imgscale = 1
protected

Definition at line 539 of file tcpdf.php.

Referenced by getImageScale().

TCPDF::$InFooter = false
protected

Definition at line 461 of file tcpdf.php.

TCPDF::$internal_encoding
protected

Definition at line 736 of file tcpdf.php.

TCPDF::$inthead = false
protected

True when we are printing the thead section on a new page protected.

Since
4.8.027 (2010-01-25)

Definition at line 1426 of file tcpdf.php.

TCPDF::$intmrk = array()
protected

Array used to store positions inside the pages buffer.

keys are the page numbers protected

Since
3.2.000 (2008-06-26)

Definition at line 938 of file tcpdf.php.

TCPDF::$inxobj = false
protected

Definition at line 1537 of file tcpdf.php.

TCPDF::$isunicode = false
protected

Definition at line 547 of file tcpdf.php.

TCPDF::$javascript = ''
protected

javascript code protected

Since
2.1.002 (2008-02-12)

Definition at line 818 of file tcpdf.php.

TCPDF::$jpeg_quality
protected

Set the default JPEG compression quality (1-100) protected.

Since
3.0.000 (2008-03-27)

Definition at line 902 of file tcpdf.php.

TCPDF::$js_objects = array()
protected

Javascript objects array protected.

Since
4.8.000 (2009-09-07)

Definition at line 1356 of file tcpdf.php.

TCPDF::$keywords = ''
protected

Definition at line 497 of file tcpdf.php.

Referenced by SetKeywords().

TCPDF::$l
protected

Definition at line 606 of file tcpdf.php.

Referenced by Write().

TCPDF::$last_enc_key
protected

last RC4 key encrypted (cached for optimisation) protected

Since
2.0.000 (2008-01-02)

Definition at line 773 of file tcpdf.php.

TCPDF::$last_enc_key_c
protected

last RC4 computed key protected

Since
2.0.000 (2008-01-02)

Definition at line 780 of file tcpdf.php.

TCPDF::$lasth
protected

Definition at line 315 of file tcpdf.php.

Referenced by getLastH(), getNumLines(), getStringHeight(), setFooter(), and setHeader().

TCPDF::$LayoutMode
protected

Definition at line 473 of file tcpdf.php.

TCPDF::$linestyleCap = '0 J'
protected

PDF string for last line width protected.

Since
4.0.006 (2008-07-16)

Definition at line 1004 of file tcpdf.php.

TCPDF::$linestyleDash = '[] 0 d'
protected

PDF string for last line width protected.

Since
4.0.006 (2008-07-16)

Definition at line 1018 of file tcpdf.php.

TCPDF::$linestyleJoin = '0 j'
protected

PDF string for last line width protected.

Since
4.0.006 (2008-07-16)

Definition at line 1011 of file tcpdf.php.

TCPDF::$linestyleWidth = ''
protected

PDF string for last line width protected.

Since
4.0.006 (2008-07-16)

Definition at line 997 of file tcpdf.php.

TCPDF::$linethrough
protected

line trough state protected

Since
2.8.000 (2008-03-19)

Definition at line 832 of file tcpdf.php.

TCPDF::$LineWidth
protected

Definition at line 321 of file tcpdf.php.

Referenced by adjustCellPadding(), and getCellBorder().

TCPDF::$links = array()
protected

Definition at line 363 of file tcpdf.php.

TCPDF::$lispacer = ''
protected

Definition at line 722 of file tcpdf.php.

TCPDF::$listcount = array()
protected

Definition at line 686 of file tcpdf.php.

TCPDF::$listindent = 0
protected

Definition at line 698 of file tcpdf.php.

TCPDF::$listindentlevel = 0
protected

Definition at line 704 of file tcpdf.php.

TCPDF::$listnum = 0
protected

Definition at line 692 of file tcpdf.php.

TCPDF::$listordered = array()
protected

Definition at line 680 of file tcpdf.php.

TCPDF::$lisymbol = ''
protected

Symbol used for HTML unordered list items protected.

Since
4.0.028 (2008-09-26)

Definition at line 1046 of file tcpdf.php.

TCPDF::$lMargin
protected
TCPDF::$maxselcol = array('page' => 0, 'column' => 0)
protected

Maximum page and column selected protected.

Since
5.8.000 (2010-08-11)

Definition at line 1461 of file tcpdf.php.

TCPDF::$n
protected

Definition at line 175 of file tcpdf.php.

Referenced by _parsepng(), AddLink(), and Annotation().

TCPDF::$n_js
protected

javascript counter protected

Since
2.1.002 (2008-02-12)

Definition at line 825 of file tcpdf.php.

TCPDF::$n_ocg_print
protected

Print visibility.

protected

Since
3.0.000 (2008-03-27)

Definition at line 881 of file tcpdf.php.

TCPDF::$n_ocg_view
protected

View visibility.

protected

Since
3.0.000 (2008-03-27)

Definition at line 888 of file tcpdf.php.

TCPDF::$newline = true
protected

True if a newline is created.

protected

Since
3.2.000 (2008-07-01)

Definition at line 983 of file tcpdf.php.

TCPDF::$newpagegroup = array()
protected

Array of page numbers were a new page group was started protected.

Since
3.0.000 (2008-03-27)

Definition at line 853 of file tcpdf.php.

TCPDF::$num_columns = 1
protected

Number of colums protected.

Since
4.9.001 (2010-03-28)

Definition at line 1440 of file tcpdf.php.

Referenced by MultiCell().

TCPDF::$numfonts = 0
protected

Counts the number of fonts.

protected

Since
4.5.000 (2009-01-02)

Definition at line 1188 of file tcpdf.php.

Referenced by AddFont().

TCPDF::$numimages = 0
protected

Counts the number of pages.

protected

Since
4.5.000 (2008-12-31)

Definition at line 1160 of file tcpdf.php.

Referenced by Image().

TCPDF::$numpages = 0
protected

Counts the number of pages.

protected

Since
4.5.000 (2008-12-31)

Definition at line 1146 of file tcpdf.php.

Referenced by getNumPages(), and startPage().

TCPDF::$objcopy
protected

Used to store a cloned copy of the current class object protected.

Since
4.5.029 (2009-03-19)

Definition at line 1223 of file tcpdf.php.

TCPDF::$offsets
protected

Definition at line 181 of file tcpdf.php.

TCPDF::$opencell = true
protected

Definition at line 1103 of file tcpdf.php.

TCPDF::$openMarkedContent = false
protected

True if marked-content sequence is open protected.

Since
4.0.013 (2008-07-28)

Definition at line 1025 of file tcpdf.php.

TCPDF::$original_lMargin
protected

Definition at line 581 of file tcpdf.php.

Referenced by setFooter(), setHeader(), and setPageOrientation().

TCPDF::$original_rMargin
protected

Definition at line 588 of file tcpdf.php.

Referenced by setFooter(), setHeader(), and setPageOrientation().

TCPDF::$OutlineRoot
protected

Outline root for bookmark protected.

Since
2.1.002 (2008-02-12)

Definition at line 809 of file tcpdf.php.

TCPDF::$outlines = array()
protected

Outlines for bookmark protected.

Since
2.1.002 (2008-02-12)

Definition at line 802 of file tcpdf.php.

TCPDF::$overline
protected

Definition at line 401 of file tcpdf.php.

TCPDF::$page_obj_id = array()
protected

ID of page objects protected.

Since
4.7.000 (2009-08-29)

Definition at line 1335 of file tcpdf.php.

TCPDF::$page_regions = array()
protected

Definition at line 1566 of file tcpdf.php.

TCPDF::$PageAnnots = array()
protected

Definition at line 357 of file tcpdf.php.

TCPDF::$PageBreakTrigger
protected

Definition at line 455 of file tcpdf.php.

Referenced by fitBlock().

TCPDF::$pagedim = array()
protected

Definition at line 217 of file tcpdf.php.

TCPDF::$pagegroups
protected

Contains the number of pages of the groups protected.

Since
3.0.000 (2008-03-27)

Definition at line 860 of file tcpdf.php.

TCPDF::$pagelen = array()
protected

Array containing page lengths in bytes.

protected

Since
4.5.000 (2008-12-31)

Definition at line 1153 of file tcpdf.php.

TCPDF::$PageMode
protected

A name object specifying how the document should be displayed when opened.

protected

Since
3.1.000 (2008-06-09)

Definition at line 923 of file tcpdf.php.

TCPDF::$pageopen = array()
protected

Store the fage status (true when opened, false when closed).

protected

Since
4.5.000 (2009-01-02)

Definition at line 1209 of file tcpdf.php.

TCPDF::$pages = array()
protected

Definition at line 193 of file tcpdf.php.

TCPDF::$pdfunit = 'mm'
protected

Definition at line 1496 of file tcpdf.php.

TCPDF::$PDFVersion = '1.7'
protected

Definition at line 562 of file tcpdf.php.

TCPDF::$premode = false
protected

Definition at line 1117 of file tcpdf.php.

TCPDF::$print_footer = true
protected

Definition at line 624 of file tcpdf.php.

TCPDF::$print_header = true
protected

Definition at line 618 of file tcpdf.php.

TCPDF::$radio_groups = array()
protected

List of radio group objects IDs protected.

Since
4.8.001 (2009-09-09)

Definition at line 1398 of file tcpdf.php.

TCPDF::$radiobutton_groups = array()
protected

List of radio buttons parent objects.

protected

Since
4.8.001 (2009-09-09)

Definition at line 1391 of file tcpdf.php.

TCPDF::$rasterize_vector_images = false
protected

Definition at line 1509 of file tcpdf.php.

TCPDF::$re_space = array('p' => '[^\S\xa0]', 'm' => '')
protected

Array of parts $re_spaces protected.

Since
5.5.011 (2010-07-09)

Definition at line 1307 of file tcpdf.php.

TCPDF::$re_spaces = '/[^\S\xa0]/'
protected

Regular expression used to find blank characters used for word-wrapping.

protected

Since
4.6.006 (2009-04-28)

Definition at line 1300 of file tcpdf.php.

TCPDF::$rMargin
protected
TCPDF::$rtl = false
protected

Definition at line 743 of file tcpdf.php.

Referenced by getRTL().

TCPDF::$sig_annot_ref = '***SIGANNREF*** 0 R'
protected

Placemark used during signature process.

protected

Since
4.6.028 (2009-08-25)

Definition at line 1328 of file tcpdf.php.

TCPDF::$sig_obj_id = 0
protected

Signature object ID protected.

Since
4.6.022 (2009-06-23)

Definition at line 1314 of file tcpdf.php.

TCPDF::$sign = false
protected

If true enables document signing protected.

Since
4.6.005 (2009-04-24)

Definition at line 1272 of file tcpdf.php.

TCPDF::$signature_appearance = array('page' => 1, 'rect' => '0 0 0 0')
protected

data for signature appearance protected

Since
5.3.011 (2010-06-16)

Definition at line 1293 of file tcpdf.php.

TCPDF::$signature_data = array()
protected

Signature data protected.

Since
4.6.005 (2009-04-24)

Definition at line 1279 of file tcpdf.php.

TCPDF::$signature_max_length = 11742
protected

Signature max length protected.

Since
4.6.005 (2009-04-24)

Definition at line 1286 of file tcpdf.php.

TCPDF::$spot_colors = array()
protected

Array of Spot colors protected.

Since
4.0.024 (2008-09-12)

Definition at line 1039 of file tcpdf.php.

TCPDF::$start_transaction_page = 0
protected

Store page number when startTransaction() is called.

protected

Since
4.8.006 (2009-09-23)

Definition at line 1412 of file tcpdf.php.

TCPDF::$start_transaction_y = 0
protected

Store Y position when startTransaction() is called.

protected

Since
4.9.001 (2010-03-28)

Definition at line 1419 of file tcpdf.php.

TCPDF::$state
protected

Definition at line 199 of file tcpdf.php.

TCPDF::$strokecolor
protected

Definition at line 1489 of file tcpdf.php.

TCPDF::$subject = ''
protected

Definition at line 485 of file tcpdf.php.

Referenced by SetSubject().

TCPDF::$svgclipid = 0
protected

Definition at line 1643 of file tcpdf.php.

TCPDF::$svgclipmode = false
protected

Definition at line 1622 of file tcpdf.php.

TCPDF::$svgclippaths = array()
protected

Definition at line 1629 of file tcpdf.php.

TCPDF::$svgcliptm = array()
protected

Definition at line 1636 of file tcpdf.php.

TCPDF::$svgdefs = array()
protected

Definition at line 1615 of file tcpdf.php.

TCPDF::$svgdefsmode = false
protected

Definition at line 1608 of file tcpdf.php.

TCPDF::$svgdir = ''
protected

Definition at line 1580 of file tcpdf.php.

TCPDF::$svggradientid = 0
protected

Definition at line 1601 of file tcpdf.php.

TCPDF::$svggradients = array()
protected

Definition at line 1594 of file tcpdf.php.

TCPDF::$svginheritprop = array('clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cursor', 'direction', 'fill', 'fill-opacity', 'fill-rule', 'font', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'image-rendering', 'kerning', 'letter-spacing', 'marker', 'marker-end', 'marker-mid', 'marker-start', 'pointer-events', 'shape-rendering', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-rendering', 'visibility', 'word-spacing', 'writing-mode')
protected

Definition at line 1664 of file tcpdf.php.

TCPDF::$svgstyles
protected

Definition at line 1671 of file tcpdf.php.

TCPDF::$svgtext = ''
protected

Definition at line 1650 of file tcpdf.php.

TCPDF::$svgtextmode = array()
protected

Definition at line 1657 of file tcpdf.php.

TCPDF::$svgunit = 'px'
protected

Definition at line 1587 of file tcpdf.php.

TCPDF::$tagvspaces = array()
protected

Array used for custom vertical spaces for HTML tags protected.

Since
4.2.001 (2008-10-30)

Definition at line 1088 of file tcpdf.php.

TCPDF::$tempfontsize = 10
protected

Definition at line 716 of file tcpdf.php.

TCPDF::$TextColor
protected

Definition at line 437 of file tcpdf.php.

Referenced by SetFillColor(), SetFillSpotColor(), SetTextColor(), and SetTextSpotColor().

TCPDF::$textindent = 0
protected

Text indentation value (used for text-indent CSS attribute) protected.

Since
4.8.006 (2009-09-23)

Definition at line 1405 of file tcpdf.php.

TCPDF::$textrendermode = 0
protected

Text rendering mode: 0 = Fill text; 1 = Stroke text; 2 = Fill, then stroke text; 3 = Neither fill nor stroke text (invisible); 4 = Fill text and add to path for clipping; 5 = Stroke text and add to path for clipping; 6 = Fill, then stroke text and add to path for clipping; 7 = Add text to path for clipping.

protected

Since
4.9.008 (2010-04-03)

Definition at line 1475 of file tcpdf.php.

Referenced by Text().

TCPDF::$textstrokewidth = 0
protected

Text stroke width in doc units protected.

Since
4.9.008 (2010-04-03)

Definition at line 1482 of file tcpdf.php.

Referenced by Text().

TCPDF::$thead = ''
protected

Table header content to be repeated on each new page protected.

Since
4.5.030 (2009-03-20)

Definition at line 1237 of file tcpdf.php.

Referenced by setFooter(), and setHeader().

TCPDF::$theadMargins = array()
protected

Margins used for table header.

protected

Since
4.5.030 (2009-03-20)

Definition at line 1244 of file tcpdf.php.

Referenced by setFooter(), and setHeader().

TCPDF::$title = ''
protected

Definition at line 479 of file tcpdf.php.

Referenced by SetTitle().

TCPDF::$tMargin
protected

Definition at line 271 of file tcpdf.php.

Referenced by checkPageBreak(), fitBlock(), MultiCell(), setPageOrientation(), and setTableHeader().

TCPDF::$tmprtl = false
protected

Definition at line 750 of file tcpdf.php.

TCPDF::$tocpage = false
protected

Definition at line 1502 of file tcpdf.php.

Referenced by AddPage(), endPage(), and startPage().

TCPDF::$transfmatrix = array()
protected

Array of transformation matrix protected.

Since
4.2.000 (2008-10-29)

Definition at line 1060 of file tcpdf.php.

TCPDF::$transfmatrix_key = 0
protected

Current key for transformation matrix protected.

Since
4.8.005 (2009-09-17)

Definition at line 1067 of file tcpdf.php.

TCPDF::$transfmrk = array()
protected

Array used to store positions of graphics transformation blocks inside the page buffer.

keys are the page numbers protected

Since
4.4.002 (2008-12-09)

Definition at line 1125 of file tcpdf.php.

TCPDF::$underline
protected

Definition at line 395 of file tcpdf.php.

TCPDF::$unicode
protected

Definition at line 555 of file tcpdf.php.

Referenced by __construct(), and getCellCode().

TCPDF::$ur = array()
protected

Array with additional document-wide usage rights for the document.

protected

Since
5.8.014 (2010-08-23)

Definition at line 839 of file tcpdf.php.

TCPDF::$viewer_preferences
protected

PDF viewer preferences.

protected

Since
3.1.000 (2008-06-09)

Definition at line 916 of file tcpdf.php.

TCPDF::$visibility = 'all'
protected

Restrict the rendering of some elements to screen or printout.

protected

Since
3.0.000 (2008-03-27)

Definition at line 874 of file tcpdf.php.

TCPDF::$webcolor = array()
protected

Definition at line 1573 of file tcpdf.php.

Referenced by __construct().

TCPDF::$wPt
protected

Definition at line 241 of file tcpdf.php.

Referenced by setPageOrientation().

TCPDF::$x
protected
TCPDF::$xobjects = array()
protected

Definition at line 1530 of file tcpdf.php.

TCPDF::$xobjid = ''
protected

Definition at line 1544 of file tcpdf.php.

Referenced by AddFont(), Annotation(), Image(), and MultiCell().

TCPDF::$ZoomMode
protected

Definition at line 467 of file tcpdf.php.


The documentation for this class was generated from the following file: