ezPdf - simplify calling default fonts

Author Message

Trent Reimer

Thursday 30 March 2006 2:10:22 pm

I found that the default fonts could be called from any directory on the server as simply as:

$pdf->selectFont('Helvetica.afm');

...by editing a few lines in "class.pdf.php". Notice that there is no need for a directory path before the font name.

Why? Many developers like to put libraries and components like ezPdf in PHP's "include_path" so they can be called from any directory or project without having to map directories exactly. This is also useful when transferring work from a test server to a live server. This was not an option with ezPdf since methods like "selectFont" require an absolute or relative path from the calling script.

It appears getting around it just requires using specifications like

dirname(__FILE__) . '/fonts/'

instead of

'./fonts/'

the latter of which would only work if the calling script was in the same directory as "class.ezpdf.php". Using the former also ensures the default font is loadable (from any script in any directory) if the user fails to assign one explicity.

Specifically I added the following to the beginning of "openFont()":

$pos=strrpos($font,'/');
  if ($pos===false){
  	if (file_exists('./'.$font)) {
    	$dir = './';
    	$name = $font;
    } else {
    	$dir = dirname(__FILE__).'/fonts/';
    	$name = $font;
    }
  } else {
  	$dir=substr($font,0,$pos+1);
    $name=substr($font,$pos+1);
  }

...and edited the following in "selectFont()":

$name = ($pos=strrpos($fontName,'/')) !== FALSE ? substr($fontName,$pos+1) : $fontName;
if (substr($name,-4)=='.afm'){
    $name=substr($name,0,strlen($name)-4);
}

...and the following in "setCurrentFont()":

if (strlen($this->currentBaseFont)==0){
    // then assume an initial font
    $this->selectFont(dirname(__FILE__).'/fonts/Helvetica.afm');
  }
  $cf = ($pos=strrpos($this->currentBaseFont,'/')) !== FALSE ? substr($this->currentBaseFont, $pos+1) : $this->currentBaseFont;
  if (strlen($this->currentTextState)
    && isset($this->fontFamilies[$cf])
      && isset($this->fontFamilies[$cf][$this->currentTextState])){
    // then we are in some state or another
    // and this font has a family, and the current setting exists within it
    // select the font, then return it
    $nf = ($pos=strrpos($this->currentBaseFont, '/')) !== FALSE ? substr($this->currentBaseFont,0,$pos+1).$this->fontFamilies[$cf][$this->currentTextState] : $this->fontFamilies[$cf][$this->currentTextState];

I hope that is helpful. Let me know if I have missed something there.

Powered by eZ Publish™ CMS Open Source Web Content Management. Copyright © 1999-2014 eZ Systems AS (except where otherwise noted). All rights reserved.

eZ debug

Timing: Jan 18 2025 10:53:36
Script start
Timing: Jan 18 2025 10:53:36
Module start 'layout'
Timing: Jan 18 2025 10:53:36
Module start 'content'
Timing: Jan 18 2025 10:53:36
Module end 'content'
Timing: Jan 18 2025 10:53:36
Script end

Main resources:

Total runtime0.5653 sec
Peak memory usage4,096.0000 KB
Database Queries46

Timing points:

CheckpointStart (sec)Duration (sec)Memory at start (KB)Memory used (KB)
Script start 0.00000.0060 588.0313152.6406
Module start 'layout' 0.00600.0018 740.671939.4609
Module start 'content' 0.00790.5561 780.1328414.6172
Module end 'content' 0.56400.0013 1,194.75008.1563
Script end 0.5653  1,202.9063 

Time accumulators:

 Accumulator Duration (sec) Duration (%) Count Average (sec)
Ini load
Load cache0.00340.6101160.0002
Check MTime0.00140.2513160.0001
Mysql Total
Database connection0.00080.133610.0008
Mysqli_queries0.525993.0286460.0114
Looping result0.00040.0695440.0000
Template Total0.533094.320.2665
Template load0.00200.346220.0010
Template processing0.531093.936720.2655
Template load and register function0.00020.028510.0002
states
state_id_array0.00110.201310.0011
state_identifier_array0.00080.147720.0004
Override
Cache load0.00160.2779190.0001
Sytem overhead
Fetch class attribute can translate value0.00060.097510.0006
Fetch class attribute name0.00110.198010.0011
XML
Image XML parsing0.00010.018710.0001
class_abstraction
Instantiating content class attribute0.00000.000910.0000
General
dbfile0.00140.2460100.0001
String conversion0.00000.001440.0000
Note: percentages do not add up to 100% because some accumulators overlap

Templates used to render the page:

UsageRequested templateTemplateTemplate loadedEditOverride
1node/view/full.tplfull/forum_topic.tplextension/sevenx/design/simple/override/templates/full/forum_topic.tplEdit templateOverride template
1content/datatype/view/ezxmltext.tpl<No override>extension/community_design/design/suncana/templates/content/datatype/view/ezxmltext.tplEdit templateOverride template
7content/datatype/view/ezxmltags/paragraph.tpl<No override>extension/ezwebin/design/ezwebin/templates/content/datatype/view/ezxmltags/paragraph.tplEdit templateOverride template
6content/datatype/view/ezxmltags/literal.tpl<No override>extension/community/design/standard/templates/content/datatype/view/ezxmltags/literal.tplEdit templateOverride template
1print_pagelayout.tpl<No override>extension/community/design/community/templates/print_pagelayout.tplEdit templateOverride template
 Number of times templates used: 16
 Number of unique templates used: 5

Time used to render debug report: 0.0001 secs