Я новичок в PDFLib, и я пытаюсь заставить что-то работать
Я получил следующую ситуацию:
Существует довольно чистый PDF с двумя текстовыми строками.
После этих двух текстовых строк я хочу разместить абзац текста. Дело в том, что длина этого текста является динамической, потому что это пользовательский ввод. Это может быть даже более 1 страницы текста, все в одном абзаце.
После этого абзаца я хочу продолжить добавление текстовых строк, как я делал перед абзацем. Это работает для меня, когда текст в абзаце помещается на первой странице. Если этого не произойдет, текст будет перетекать, и я не могу добавить больше страниц.
Поэтому мой вопрос в этом случае: «Как создать код, который будет динамически добавлять больше страниц при необходимости?» Я предполагаю, что остальная часть моего кода работает, и следующая текстовая строка, содержащая «ТЕСТ», фактически помещена после абзаца, но проблема в том, что это не видно, потому что текстовые потоки страницы …
Вот мой код (небольшая часть):
$L_i_pageWidth = 595;
$L_i_pageHeight = 842;
$L_i_pagecount = 0;
$tf = 0;
$y = 0;
$L_s_fontNormal = "fontname=din-bold-webfont embedding fontsize=12 " .
"encoding=unicode textformat=utf8";
$L_s_fontLarge = "fontname=din-bold-webfont embedding fontsize=18 " .
"encoding=unicode textformat=utf8";
$L_s_fontSmall = "fontname=din-bold-webfont embedding fontsize=10 " .
"encoding=unicode textformat=utf8";try {
$p = new PDFlib();
# This means we must check return values of load_font() etc.
$p->set_parameter("errorpolicy", "return");
$p->set_parameter("SearchPath", "./assets/pdf/input");
if ($p->begin_document("", "") == 0) {
throw new FrameworkException('Exception ' . get_class($e) . ' - ' . $e->getMessage(), 1001, $e);
}
/* Start the template */
/* Page 1 */
$p->begin_page_ext($L_i_pageWidth, $L_i_pageHeight, "");
$L_i_pagecount++;
$y = $L_i_pageHeight - 150;
$p->fit_textline("text", 75, $y, $L_s_fontNormal);
$p->fit_textline('This is a line of text', 220, $y, $L_s_fontNormal);
$y -= 15;
$text = 'sdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsf sdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsf sdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsf sdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsfsdsssds sddsdsdsf';
$tf = $p->create_textflow($text, $L_s_fontNormal);
if ($tf == 0)
{
throw new FrameworkException('Exception ' . get_class($e) . ' - ' . $e->getMessage(), 1001, $e);
}
$result = $p->fit_textflow($tf, 75, $y, ($L_i_pageWidth-75), ($y - 800), 'verticalalign=center');
// probleem: het loopt van de pagina af
// combineren twee voorbeelden werkt niet
$textx = $p->get_value("textx", 0);
$texty = $p->get_value("texty", 0);
// font
$fsize = 12;
$p->set_parameter("errorpolicy", "return");
$p->set_parameter("textformat", "utf8");
$font = $p->load_font("Helvetica-Bold", "unicode", "");
if ($font == 0)
print_r("Error: " . $p->get_errmsg());
$p->setfont($font, $fsize);
$p->set_text_pos(75, $y);
$p->show_xy("TEST", 75, $texty -= ($fsize*1.2));
$p->fit_textline("text", 75, $y, $L_s_fontNormal);
$p->fit_textline('This is a line of text', 220, $y, $L_s_fontNormal);
$y -= 15;$p->suspend_page("");
foreach(range(1, $L_i_pagecount) as $pagenumber)
{
$p->resume_page("pagenumber ".$pagenumber);
$p->end_page_ext("");
}$p->end_document("");
return $p->get_buffer();
}
catch (PDFlibException $e) {
echo '<pre>';print_r($e);
throw new FrameworkException('Exception ' . get_class($e) . ' - ' . $e->getMessage(), 1001, $e);
}
catch (Exception $e) {
throw new FrameworkException('Exception ' . get_class($e) . ' - ' . $e->getMessage(), 1001, $e);
}
Если требуется дополнительная информация, пожалуйста, дайте мне знать.
Заранее спасибо!
простой пример, демонстрирующий, как можно обрабатывать текстовый поток, охватывающий более одного экземпляра (страницу, столбцы и т. д.), доступен в пакете PDFlib, а также в поваренной книге PDFlib. => starter_textflow.php.
http://www.pdflib.com/pdflib-cookbook/text-output/starter-textflow/php-starter-textflow/
Хорошим примером для вашего случая является образец поваренной книги «Продолжайте записку после текста»http://www.pdflib.com/pdflib-cookbook/text-output/continue-note-after-text/php-continue-note-after-text/
Соответствующий фрагмент кода в вашем коде
$ result = $ p-> fit_textflow ($ tf, 75, $ y, ($ L_i_pageWidth-75), ($ y — 800), ‘verticalalign = center’);
Вы должны применить нижнюю левую координату и верхнюю правую координату
возможной области, где текст должен быть размещен. В вашем случае, я думаю, что только y-позиция в верхнем правом положении неверна. В позиции, когда вы вызываете fit_textflow () y = 677 и, таким образом, y-позиция ($ y-800) = -123. Это значение находится ниже нижней границы страницы, а текст будет отображаться ниже. Кроме того, я не уверен, что вы ожидаете получить «verticalalign = center». При использовании этого, текст помещается в центр данного окна соответствия.
Таким образом, для нижнего значения вы должны применить некоторое> 0, а для верхней позиции y применить вычисленный $ y.
После этого вызова fit_textflow () проверьте результат $. Если вы получаете
«_стопmsgstr «вы знаете, весь контент помещается в область fitbox. Если вы получаете»_boxfull«Вы знаете, что некоторое содержимое не размещено, и вам нужно еще раз вызвать fit_textflow (). Возможно, на следующей странице.
После того, как текст закончен, вы можете использовать
$ textendy = $ p-> info_textflow ($ tf, «textendy»);
получить конечную позицию размещенного текста. После этого вы можете использовать это для дальнейших расчетов для содержания ниже.
Вы пробовали pdf_show_boxed () или PDF_fit_textflow ()?
pdf_get_value ($ p, «текст», 0); даст вам позицию потока текста.