【问题标题】:How to add an image in TCPDF如何在 TCPDF 中添加图像
【发布时间】:2016-09-11 06:09:39
【问题描述】:

我想在我的 Magento 商店中使用 TCPDF 在标题中添加图像。

我正在这样做:

$tcpdf = new TCPDF_TCPDF();
$img = file_get_contents(Mage::getBaseDir('media') . '/dhl/logo.jpg');

$PDF_HEADER_LOGO = $tcpdf->Image('@' . $img);//any image file. check correct path.
$PDF_HEADER_LOGO_WIDTH = "20";
$PDF_HEADER_TITLE = "This is my Title";
$PDF_HEADER_STRING = "This is Header Part";

$tcpdf->SetHeaderData($PDF_HEADER_LOGO, $PDF_HEADER_LOGO_WIDTH, $PDF_HEADER_TITLE, $PDF_HEADER_STRING);

$tcpdf->Output('report_per_route_'.time().'.pdf', 'I'); 

如果我想添加我的商店名称(左角)和徽标(右角),我必须遵循哪些步骤?

【问题讨论】:

    标签: image magento pdf tcpdf


    【解决方案1】:

    好的。首先,$PDF_HEADER_LOGO 应该是一个图像文件名,而不是图像数据——就像 Header() 函数的默认实现一样。然而,有一件重要的事情要记住,确切的位置取决于K_PATH_IMAGES 常量,它应该包含图像文件夹的路径。如果它在包含 TCPDF 库之前定义,则可以,如果不是,则 TCPDF 检查一些默认路径,并将第一个存在的用作图像目录。这些目录是:

    • ./examples/images/
    • ./images/
    • /usr/share/doc/php-tcpdf/examples/images/
    • /usr/share/doc/tcpdf/examples/images/
    • /usr/share/doc/php/tcpdf/examples/images/
    • /var/www/tcpdf/images/
    • /var/www/html/tcpdf/images/
    • /usr/local/apache2/htdocs/tcpdf/images/
    • K_PATH_MAIN(即 tcpdf 根文件夹)

    所以要么在之前定义常量,要么将文件放到上述目录之一,然后只将文件名作为第一个参数传递给SetHeaderData,它应该可以工作。

    要为 Footer 提供类似的东西,您需要扩展基本的 TCPDF_TCPDF 类并覆盖其 Footer 方法。

    例子:

    class MYPDF extends TCPDF_TCPDF {
    
        // Page footer
        public function Footer() {
            // Position at 15 mm from bottom
            $this->SetY(-15);
            // Set font
            $this->SetFont('helvetica', 'I', 8);
            // Page number
            $this->Cell(0, 10, 'COMPANY NAME', 0, false, 'C', 0, '', 0, false, 'T', 'M');
            $this->Image('/path/to/image.jpg', 500)
        }
    }
    

    您可能需要计算出准确的坐标。特别是在 Image 中,它取决于您的尺寸,您可以向 Image 函数添加另一个参数,即 y 坐标,以及另外两个参数 - 图像的宽度和高度。

    最重要的是,我建议您查看 TCPDF 页面上的优秀示例部分:

    http://www.tcpdf.org/examples.php

    【讨论】:

    • 你知道在 magento 中哪里扩展这个类吗?
    • 我推荐使用 lib,反正你可能会用它来做 TCPDF。在那里创建文件夹,并将您的扩展类放在某个文件中。其中还包括 TCPDF,因此一个库包含另一个库。然后在您使用的任何控制器/观察者/模型中的 createPdf(或任何)方法中,只需像这样包含/要求它:require(Mage::getBaseDir('lib') . '/mypdf/mypdf.php');
    • Deus Ex Machina。谢谢你!
    【解决方案2】:

    如果您尝试使用 WriteHTML() 生成 pdf,这里有个小技巧可以在不使用 image() 函数的情况下添加图像。

    只需使用 HTML <img> 如下,

    $image_path = 'path/to/image'; $print = '<p>some text here...</p>'; $print .= '<img src=" '. $image_path .' ">';

    您可以使用内联 CSS 来应用高度、宽度等。

    【讨论】:

      【解决方案3】:

      TCPPDF 在将图像作为 HTML 插入时很棘手。它实现了一些技巧来判断正在加载的内容:

      1. 插入带有src 属性的图像作为绝对路径 - must have star * 前缀:

        &lt;img src="*/var/www/my-image.png"&gt;

      2. 插入带有src 属性的图像作为相对路径 - 两个示例都被视为相对路径:

        &lt;img src="/var/www/my-image.png"&gt;

        &lt;img src="var/www/my-image.png"&gt;

      请注意,相对路径在 linux 和 windows 上的计算方式不同 - 在 windows 上正常运行的方法在 linux 上可能无法正常运行。这是由于将first character in a path string 视为正斜杠/ 导致的,它被视为Linux 根目录,并且将重新计算路径- 相对路径将附加到全局变量DOCUMENT_ROOT

      1. 正在加载base-64 encoded string - 在src 属性中必须有@ 前缀:

        &lt;img src="@iVBORw0KGgoAAggfd0000555...."&gt;

        &lt;img src="@'.base64_encode(file_get_contents($path)).'" width=50 height=35&gt;

      如果您想避免计算正确路径的问题,这是安全的选择,但会增加额外的 I/O 开销,因为 TCPDF 会尝试将提供的数据存储为临时图像文件,以确定图像的宽度和高度。

      【讨论】:

        猜你喜欢
        • 2022-01-13
        • 1970-01-01
        • 2014-03-04
        • 2015-07-05
        • 2017-01-11
        • 2020-04-19
        • 2013-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多