【问题标题】:FPDF, FPDI - using fonts embedded in the source documentFPDF、FPDI - 使用源文档中嵌入的字体
【发布时间】:2009-07-22 19:22:51
【问题描述】:

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

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

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

明确地说,我想重用这些字体,不仅将它们应用到导入的页面,还提供以其中一种嵌入字体呈现新文本的选项。

任何指针将不胜感激。

【问题讨论】:

    标签: php fonts fpdf fpdi


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      只是为了澄清。

      由于 FPDI 网站上详述的兼容性问题,我们选择使用 FPDF 而不是 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 中,我想它们一定是,所以必须有一种合理的方式来重用它们。

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

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

      【讨论】:

        【解决方案3】:

        为了进一步澄清这一点,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。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-07
          相关资源
          最近更新 更多