代码之家  ›  专栏  ›  技术社区  ›  X4V18

使用PDFLib绘制矩形

  •  0
  • X4V18  · 技术社区  · 11 年前

    我正在寻找一个在现有pdf文件中绘制矩形的解决方案。 我试图用函数rect(x,y,width,height)来实现这一点,但它不起作用。我收到一条错误消息,说“不能在'object'scope'中调用函数”,但我不知道如何正确。

    $searchpath = dirname(dirname(__FILE__)) . '/data';
    $pdfinput = "2972172dpi.pdf";
    $docoptlist = "requiredmode=minimum";
    
    try {
    $p = new PDFlib();
    $p->set_option("errorpolicy=return");
    
    # all strings are expected as utf8
    $p->set_option("stringformat=utf8");
    $p->set_option("SearchPath={{" . $searchpath . "}}");
    $doc = $p->open_pdi_document($pdfinput, $docoptlist);
    if ($doc == 0) {
        die("Error: " . $p->get_errmsg());
    }
    $pcosmode = $p->pcos_get_number($doc, "pcosmode");
    if ($pcosmode == 0) {
        printf("Minimum mode: no more information available<br/><br/>");
        $p->delete();
        exit(0);
    } else {
        $pages = $p->pcos_get_number($doc, "length:pages");
        printf($pages . " pages: <br/>");
        for ($page = 0; $page < $pages; $page++) {
            $param = "pages[" . $page . "]/";
            $widht = round($p->pcos_get_number($doc, $param . "width") / 2.8346456692913);
            $height = round($p->pcos_get_number($doc, $param . "height") / 2.83464566929134);
            printf("Page " . ($page + 1) . " : largeur= %d mm - hauteur= %d mm<br/>", $widht, $height);
            if ($widht == 210 && $height == 297) {
              $p->rect(8.503937007874, 8.503937007874, 578.2677165354, 824.8818897638);
              $p->stroke();
              echo 'Dessiné';
              } */
        }
    }
    $p->close_pdi_document($doc);
    } catch (PDFlibException $e) {
    die("PDFlib exception occurred in starter_pcos sample:<br/>" .
            "[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " .
            $e->get_errmsg() . "<br/>");
    } catch (Exception $e) {
    die($e);
    }
    
    2 回复  |  直到 11 年前
        1
  •  2
  •   Rainer    11 年前

    您忘记打开输出文档。使用PDFlib时,您总是创建一个新的输出PDF,因此使用$p->begin_document()是必需的。

    if ($p->begin_document($outfile, "") == 0)
        throw new Exception("Error: " . $p->get_errmsg());
    

    然后,您必须打开一个页面,从输入文档中放置页面,然后可以添加矩形。

    你可以在PDFlib食谱中找到一个非常相似的例子: http://www.pdflib.com/pdflib-cookbook/pdf-import/stamp-pages/php-stamp-pages/ 其中文本标记放置在页面上。在你的情况下,你应该放置矩形。

    我想,值得一提的是PDFlib教程第7.3章“使用PDI导入PDF页面”。

        2
  •  0
  •   Andreas buildpax    6 年前

    要呈现矩形,必须开始一页。

    你必须这样做: 首先,开始一个新页面。在新页面中重新调整PDF文件。 第三,在页面上呈现矩形。 最后关闭新的pdf。

    $p->begin_page(page_width, page_height);
    $p->fit_image(template, 0.0, 0.0, "");
    $p->rect(55,520,400,20);
    $p->end_page();