Forums / Suggestions / ezPdf - simplify calling default fonts

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.

eZ debug

Timing: Jan 15 2025 07:06:42
Script start
Timing: Jan 15 2025 07:06:42
Module start 'content'
Timing: Jan 15 2025 07:06:43
Module end 'content'
Timing: Jan 15 2025 07:06:43
Script end

Main resources:

Total runtime1.0933 sec
Peak memory usage6,144.0000 KB
Database Queries176

Timing points:

CheckpointStart (sec)Duration (sec)Memory at start (KB)Memory used (KB)
Script start 0.00000.0064 689.5703214.7891
Module start 'content' 0.00640.8587 904.35941,683.2109
Module end 'content' 0.86520.2280 2,587.5703634.0469
Script end 1.0931  3,221.6172 

Time accumulators:

 Accumulator Duration (sec) Duration (%) Count Average (sec)
Ini load
Load cache0.00710.6469210.0003
Check MTime0.00150.1354210.0001
Mysql Total
Database connection0.00080.070310.0008
Mysqli_queries1.000091.46661760.0057
Looping result0.00190.17391730.0000
Template Total1.062997.220.5315
Template load0.00440.402820.0022
Template processing1.058596.820020.5292
Template load and register function0.00180.164510.0018
states
state_id_array0.00090.082710.0009
state_identifier_array0.00140.124020.0007
Override
Cache load0.00380.3435190.0002
Sytem overhead
Fetch class attribute can translate value0.00160.144420.0008
Fetch class attribute name0.00180.161410.0018
XML
Image XML parsing0.00050.042120.0002
class_abstraction
Instantiating content class attribute0.00000.000610.0000
General
dbfile0.00090.0811150.0001
String conversion0.00000.000630.0000
Note: percentages do not add up to 100% because some accumulators overlap

CSS/JS files loaded with "ezjscPacker" during request:

CacheTypePacklevelSourceFiles
CSS0extension/community/design/community/stylesheets/ext/jquery.autocomplete.css
extension/community_design/design/suncana/stylesheets/scrollbars.css
extension/community_design/design/suncana/stylesheets/tabs.css
extension/community_design/design/suncana/stylesheets/roadmap.css
extension/community_design/design/suncana/stylesheets/content.css
extension/community_design/design/suncana/stylesheets/star-rating.css
extension/community_design/design/suncana/stylesheets/syntax_and_custom_tags.css
extension/community_design/design/suncana/stylesheets/buttons.css
extension/community_design/design/suncana/stylesheets/tweetbox.css
extension/community_design/design/suncana/stylesheets/jquery.fancybox-1.3.4.css
extension/bcsmoothgallery/design/standard/stylesheets/magnific-popup.css
extension/sevenx/design/simple/stylesheets/star_rating.css
extension/sevenx/design/simple/stylesheets/libs/fontawesome/css/all.min.css
extension/sevenx/design/simple/stylesheets/main.v02.css
extension/sevenx/design/simple/stylesheets/main.v02.res.css
JS0extension/ezjscore/design/standard/lib/yui/3.17.2/build/yui/yui-min.js
extension/ezjscore/design/standard/javascript/jquery-3.7.0.min.js
extension/community_design/design/suncana/javascript/jquery.ui.core.min.js
extension/community_design/design/suncana/javascript/jquery.ui.widget.min.js
extension/community_design/design/suncana/javascript/jquery.easing.1.3.js
extension/community_design/design/suncana/javascript/jquery.ui.tabs.js
extension/community_design/design/suncana/javascript/jquery.hoverIntent.min.js
extension/community_design/design/suncana/javascript/jquery.popmenu.js
extension/community_design/design/suncana/javascript/jScrollPane.js
extension/community_design/design/suncana/javascript/jquery.mousewheel.js
extension/community_design/design/suncana/javascript/jquery.cycle.all.js
extension/sevenx/design/simple/javascript/jquery.scrollTo.js
extension/community_design/design/suncana/javascript/jquery.cookie.js
extension/community_design/design/suncana/javascript/ezstarrating_jquery.js
extension/community_design/design/suncana/javascript/jquery.initboxes.js
extension/community_design/design/suncana/javascript/app.js
extension/community_design/design/suncana/javascript/twitterwidget.js
extension/community_design/design/suncana/javascript/community.js
extension/community_design/design/suncana/javascript/roadmap.js
extension/community_design/design/suncana/javascript/ez.js
extension/community_design/design/suncana/javascript/ezshareevents.js
extension/sevenx/design/simple/javascript/main.js

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
1pagelayout.tpl<No override>extension/sevenx/design/simple/templates/pagelayout.tplEdit templateOverride template
 Number of times templates used: 16
 Number of unique templates used: 5

Time used to render debug report: 0.0003 secs