PDFlib 错误字体句柄

PDFlib bad font handle

所以我目前正在用 PDFlib 编写 PHP 程序,在生成 PDF 时出现以下错误: “发生 PDFlib 异常:[1434] info_textline:选项 'font' 有错误的字体句柄 0”。

这里是发生错误的函数:

function createHeaderText(PDFlib $p, int $textStartLeft, int $fontMedium, int $fontRegular) {
    $y = 719;
    $x = $textStartLeft;

    $pageHeading = "Lorem ipsum dolor sit amet, consetetur sadipscing";
    $reference = "Referenzobjekt";

    $optlist = "font=" . $fontMedium .
        " fontsize=16" .
        " fillcolor=white" .
        " wordspacing=0";

    $infoHeight = $p->info_textline($pageHeading, 'objectheight', $optlist);
    $p->fit_textline($pageHeading, $x, $y,  $optlist);
    $y = $y - ($infoHeight + 11);

    $optlist = "font=" . $fontRegular .
        " fontsize=12" .
        " fillcolor=white" .
        " wordspacing=0";

    $infoHeight = $p->info_textline($pageHeading, 'objectheight', $optlist);
    $p->fit_textline($pageHeading, $x, $y, $optlist);
    return $y - ($infoHeight + 27.5);
}

这是我的字体句柄:

$fontMedium = $p->load_font('fonts/NotoSerif-Medium', 'unicode', 'embedding');
$fontRegular = $p->load_font('fonts/NotoSerif-Regular', 'unicode', 'embedding');
$fontItalic = $p->load_font('fonts/NotoSerif-Italic', 'unicode', 'embedding');

也许有人可以帮我解决这个问题,这对我有很大帮助。

您必须始终检查 load_font() 编辑的 return 字体句柄是否确实有效。在 PDFlib PHP 绑定中,您必须检查由 load_font() 编辑的字体句柄 return 是否为非零。如果为零,则发生错误,您必须通过调用 $p->get_errmsg() 来检索错误原因以找出问题所在。

显式检查句柄的另一种方法是像这样设置选项 errorpolicy=exception

$p->set_option("errorpolicy=exception");

那么会出现加载字体失败之类的错误导致异常

现在是问题的潜在根本原因:可能是 PHP 进程无法访问 fonts 目录,或者是因为 PHP 进程的当前工作目录不是存储 Noto 字体的 fonts 目录的父目录,或者因为权限问题。

无论如何,检查 load_font() 的 return 值并检索错误消息是解决问题的第一步。