FPDF,FPDI - 使用源文档中嵌入的字体

时间:2009-07-22 19:22:52

标签: php fonts fpdf fpdi

我正在使用FPDF / FPDI来构建PDF模板系统。一个PDF用作背景,并在其中定义了许多可编辑区域(存储在数据库中)。可编辑区域可以是图像,文本或两者,但这不是我的问题,只是一些背景。

某些背景(FPDI源PDF)PDF或“模板”包含嵌入字体,我希望能够实现两件事,并且想知道这是否可行。

  1. 我希望能够在输出文档中使用源文档中嵌入的任何字体。
  2. 我需要枚举这些字体,以便它们可以包含在UI的字体列表中。
  3. 要清楚我想重复使用这些字体,不只是将它们应用于导入的页面,而是提供以其中一种嵌入字体呈现新文本的选项。

    任何指针都会非常感激。

3 个答案:

答案 0 :(得分:1)

首先是字体和PDF。 如果我没记错的话,当字体被包含到PDF中时,可以包含所有字体,或者只是嵌入实际使用的字符面的字体的子集。一些PDF'压缩'工具可以从pdf文件中删除未使用的字体字形。 (有人可以确认/反驳这个吗?)

对于FPDF(它是我使用的库),我不认为它可以在'编辑'模式下打开PDF。它可以简单地打开PDF并将其用作背景 - 实际上是文档的图像。快速查看提供的脚本似乎没有显示将打开PDF文件的脚本(除了可以获取文档上的元信息的脚本)。

PDF库还有其他选项。我在下面的演示中看到的TCPDF的演示表明,TCPDF可能具有更多的内置功能FPDF。可能值得一看这个图书馆吗? http://suburbanchicagophp.org/archives/75

答案 1 :(得分:0)

我是原始问题提问者,但我丢失了我的临时账号,因此无法发表评论(如果可以的话,管理员请合并)。

只是澄清一下。

由于FPDI网站上详述的兼容性问题,我们选择使用FPDF over over TCPDF,因为FPDI是其中的核心组件,丢弃的FPDI不是一种选择。

我们使用FPDI从模板文档中提取页面,然后我们将文本和图像(在数据库中使用Web UI定义)放在每个页面的顶部,因此用法与FPDI允许的完全一样。

我在这个董事会上发现了另一个问题,询问是否从pdf文件中提取嵌入字体,提问者是因为侵犯版权的活动,这是一个很大的假设。

How can I extract fonts from a PDF file with Perl?

我们的模板将来自我们的设计师,我们希望在模板pdf中重新使用(而不是提取)字体。

所以这些是我们的字体,我们只是不希望这个pdf通过编辑的每台机器不仅要有嵌入的字体,还要选择和嵌入正确的字体。它导致了字体的双重甚至三重处理,并且可能有些猜测工作。

上述帖子中的一个回复是一个非常有用的方向,它是一个可以累积嵌入字体的Perl模块,这正是我需要在UI字体列表中显示嵌入字体。

现在我需要测试源(模板)pdf中嵌入的字体是否被传递到新的pdf,我认为它们必须是,所以必须有一种合理的方式来重用它们。

我确切地说,如果有人对此有任何反馈或了解,那么我会非常感谢您回复完整性。

P.S。一些编辑器会创建压缩的pdf文档并删除一些未使用的字体是正确的,但是对我们来说这是一个简单的请求,不要使用编辑器执行此操作,否则您将不得不重新嵌入字体。

答案 2 :(得分:0)

为了进一步说明这一点,Zend_PDF将允许这个确切的功能,枚举然后重用PDF中嵌入的字体,但它不适用于v1.4之后的PDF,v1.4 pdf但是Zend工作得非常好:

例如,Zend_PDF中可以使用以下内容,然后可以按名称重用字体:

public static function GetFontList($background)
{
     $pdf = Zend_Pdf::load($background);
     $fonts = array(); 
     // Get all document fonts
     $fontList = $pdf->extractFonts();

    foreach ($fontList as $font) 
    {
        $fontName = $font->getFontName(Zend_Pdf_Font::NAME_POSTSCRIPT, 'en', 'UTF-8');
        $fonts[] = $fontName;
    }

    return $fonts;
}

希望这会对某些人有所帮助,但是我需要比1.4更高的pdf版本,所以我想我想修改FPDI。