【问题标题】:How can I omit Helvetica with TCPDF?如何使用 TCPDF 省略 Helvetica?
【发布时间】:2018-05-13 12:02:32
【问题描述】:

我正在使用 TCPDF 制作 PDF,并且正在尝试使文件尽可能小。我使用的字体是 Open Sans。我没有(至少是有意地)在 PDF 中的任何地方使用 Helvetica。当我在输出的 PDF 文件中使用 Adob​​e Reader 查看包含的字体时,Open Sans 和 Helvetica 都列出了。我注意到如果我AddFont()其他字体,输出的PDF会变大。

为了节省空间,我如何告诉 TCPDF 不要在文件中包含 Helvetica?

【问题讨论】:

    标签: php file pdf fonts tcpdf


    【解决方案1】:

    TCPDF 添加 Helvetica 字体有两个原因:

    1. 初始化时,TCPDF 类将默认字体设置为 Helvetica(在构造函数中),因此将此字体添加到文档的字体列表中。

    对于旧版本: 为了防止这种情况,您可以编辑文件config/tcpdf_config.php 并将常量PDF_FONT_NAME_MAIN 更改为您想要的默认字体名称(应该在第155 行左右)。请注意,您不能使用任何核心字体,因为它们永远不会被嵌入。

    对于较新的版本: 使用所需的默认字体名称​​before 定义PDF_FONT_NAME_MAIN,包括TCPDF 文件。示例:

    define('PDF_FONT_NAME_MAIN', 'freesans');
    include_once 'path/to/tcpdf.php';
    
    1. TCPPDF 在页面底部添加了一个隐形链接“Powered by www.tcpdf.org”。

    为了防止这种情况,您必须使用这样的覆盖类:

    class MyPdf extends TCPDF {
    
        public function __construct($orientation='P', $unit='mm', $format='A4', $unicode=true, $encoding='UTF-8', $diskcache=false, $pdfa=false) {
            // call parent constructor
            parent::__construct($orientation, $unit, $format, $unicode, $encoding, $diskcache, $pdfa);
            // disable the tcpdf link
            $this->setTcpdfLink(false);
        }
    
        /**
         * Allows to disable the invisible "Powered by www.tcpdf.org" link at the bottom of the page.
         * @param type $tcpdflink
         */
        public function setTcpdfLink($tcpdflink = true) {
            $this->tcpdflink = $tcpdflink ? true : false;
        }
    
    }
    

    【讨论】:

    • 为什么 '$this->tcpdflink = false' 在(子)类内部的某个地方不起作用?这对我来说似乎有点令人费解。
    • 因为TCPDF无论如何都会在构造函数中将默认字体添加到PDF文件中。因此,您需要在初始化任何 TCPDF 或派生类之前设置默认字体。
    • 好的,但我认为在重写的构造函数中添加 '$this->tcpdflink = false' 而不是为其添加特殊函数可能会更简单一些。好吧,也许只是您最终的良好编码实践的一个案例。很棒的发现,顺便说一句。没有记录,Nicola 尽最大努力从源头隐藏字符串。
    • 是的,你是对的。上述解决方案假定您不使用覆盖,因此可以“从外部”设置变量。
    • 感谢您的信息。这两个步骤还不够。更改PDF_FONT_NAME_MAIN 并更改构造函数后,我从“helvetica”查找/替换为“opensans”。这最终完全移除了 Helvetica。令人惊讶的是,这只为我节省了大约 500 个字节。
    【解决方案2】:

    Helvetica 字体是标准的 14 种核心 PDF 字体之一,因此在使用时不会嵌入到 PDF 中。如果您查看 TCPDF 字体目录,您会注意到 Helvetica 文件仅包含字体描述,不是字体的副本。因此它不应该显着增加文件大小。

    解决方案

    Helvetica 字体在 TCPDF 配置文件中设置为默认字体。从我的测试来看,这似乎导致它被设置为生成的 PDF 文件中的字体,即使它没有被使用。更改 TCPDF 配置文件中的默认字体应该可以防止这种情况发生。

    【讨论】:

      【解决方案3】:

      我必须面对同样的问题。我已经尝试过 JOR 解决方案。它是正确的,但它仍然在我的 pdf 中显示 Helvetica 字体系列。

      对于我的 pdf,我使用的是 SVG image.so 它显示 Helvetica 。在名为 $svgstyles 的 tcpdf.php 受保护属性中,SVG 字体系列为 Helvetica。

      【讨论】:

        【解决方案4】:

        只需在 tcpdf.php 中找到 $tcpdflink 并将该变量设为 false。这对我有用

        【讨论】:

          猜你喜欢
          • 2018-07-27
          • 2012-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-10
          • 2016-06-30
          • 2011-07-04
          相关资源
          最近更新 更多