2

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

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

  1. 我希望能够在输出文档中使用嵌入在源文档中的任何字体。
  2. 我需要枚举这些字体,以便它们可以包含在 UI 的字体列表中。

需要明确的是,我想重用这些字体,不仅将它们应用于导入的页面,而且提供以一种嵌入字体呈现新文本的选项。

任何指针将不胜感激。

4

3 回答 3

1

首先是字体和PDF。如果我没记错的话,当一种字体包含在 PDF 中时,可以包含所有字体,或者可以嵌入覆盖实际使用的字符面的字体子集。一些 PDF 的“压缩”工具可以从 pdf 文件中去除未使用的字体字形。(有人可以证实/反驳这一点吗?)

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

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

于 2009-07-22T22:11:49.833 回答
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。

于 2009-07-27T11:39:20.227 回答
0

我是最初的提问者,但我丢失了临时帐户,因此无法发表评论(如果可以,请管理员合并)。

只是为了澄清。

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

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

我在这个板上发现了另一个问题,询问有关从 pdf 文件中提取嵌入字体的问题,提问者被定为侵犯版权的活动,这是一个巨大的假设。

如何使用 Perl 从 PDF 文件中提取字体?

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

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

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

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

当我确定时,我会回复完整性,如果有人对此有任何反馈或知识,将不胜感激。

ps 某些编辑器会创建压缩的 pdf 文档并去除一些未使用的字体是正确的,但是我们很简单地要求不要使用执行此操作的编辑器,否则您将不得不重新嵌入字体。

于 2009-07-23T10:16:04.913 回答