2014-02-12 2 views
0

Я ищу решение для рисования прямоугольника в существующем pdf-файле. Я пытаюсь сделать это с помощью функции rect (x, y, widht, height), но это не сработает. У меня есть сообщение об ошибке: «Функция не должна вызываться в области« объект »», но я не понимаю, насколько это правильно.Нарисуйте прямоугольник с помощью PDFLib

$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); 
} 

ответ

1

Вы забыли открыть выходной документ. При использовании 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 «Импорт страниц PDF с PDI».

0

Чтобы сделать прямой, необходимо, чтобы начать страницу.

Вам нужно сделать следующее: Сначала вы начинаете новую страницу. Вторым вам нужен файл pdf на новой странице. Третий визуализировать прямоугольник на странице. Наконец-то закройте новый pdf-файл.

...

$ p-> begin_page (ШИРИНА_СТРАНИЦЫ, page_height);

$ p-> fit_image (шаблон, 0.0, 0.0, "");

$ p-> rect (55,520,400,20);

$ p-> end_page();

...

Смежные вопросы