• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • PDF_begin_page()

    (PHP 4, PECL pdflib >= 1.0.0)

    Start new page[deprecated]

    说明

    PDF_begin_page(resource $pdfdoc,float $width,float $height): bool

    Adds a new page to the document.成功时返回TRUE,或者在失败时返回FALSE

    This function is deprecated since PDFlib version 6, use PDF_begin_page_ext() instead.

    I spent a lot of hours tweaking numbers in my PDF source, trying to nudge things the right way, and, invariably, really messing up big-time...
    Then one day I realized that all these numbers were supposed to be (INCHES * 72).
    Now my PDF code looks more like:
    <?php
    .
    .
    .
     pdf_begin_page($pdf, 8.5 * 72, 11 * 72);
    .
    . /* set up $helvetica as font */
    .
     pdf_set_font($pdf, $helvetica, 9);
     $leading = pdf_get_value($pdf, 'leading');
     pdf_show_boxed($pdf, 0.5 * 72, 0.5 * 72, 4.0 * 72, $leading, 'left', '');
    ?>
    0.0, 0.0 is at the bottom left.
    8.5 * 72, 11 * 72 is at the top right.
    Everything in between is in x.xx * 72 where x.xx is INCHES.
    Suddenly, I can visualize the PDF while I'm typing.
    Might work for you too.
    Sample linked from:
    http://l-i-e.com/resume.htm
    Try this...
    <?
    function mm2pt($val){
      return floatval($val * 2.835016835017);
      }
    $xpdf = pdf_new();
    pdf_open_file($xpdf);
    pdf_begin_page($xpdf, mm2pt(210), mm2pt(297));
    // ...
    ?>
    
    The DIN paper sizes below are rounded.
    Theese functions returns exact paper sizes:
    <?php
    function paperheight($papername) {
     $name=strtolower($papername);
     switch($name) {
     case "dl": return 11/2.54*72;
     case "m65": return paperheight("c6");
     case "ledger": case "tabloid": return 17*72;
     case "legal": return paperwidth("ledger");
     case "letter": return 11*72;
     default: return paperwidth($name)*sqrt(2);
     }
    }
    function paperwidth($papername) {
     $name=strtolower($papername);
     switch($name) {
     case "dl": return 22/2.54*72;
     case "m65": return paperwidth("c5");
     case "ledger": case "tabloid": return 14*72;
     case "legal": case "letter": return paperheight("ledger")>>1;
     default:
      $i=strpos("ebca",$name{0});
      $j=substr($name,1);
      if($i!=false && ($j>0 || $j==="0"))
       return 100/(pow(2,($i+$j*4-1)/8))/2.54*72;
      else
       die("Unkown paper format: $papername");
     }
    }
    $paper = "A4";
    $w = paperwidth($paper);
    $h = paperheight($paper);
    echo "$paper: $w ppt * $h ppt";
    ?>
    
    The problem is that A4 is *NOT* exactly 210mm*297mm.
    (Further more, the 2.835016835017 is incorrect. You convert from mm to pps by dividing by 25.4 and multiplying by 72. Hence the ratio is 2.83464566929133858267).
    The code that I posted in may produces correct sizes.
    (Except for the "m65" format, sorry. "m65" is the same as "dl", and should return the same values).