在自定义pdf Prestashop中隐藏页眉和页脚

时间:2018-08-17 11:16:17

标签: pdf-generation prestashop prestashop-1.7

我在Prestashop 1.7.4.1中制作了在模块中打印自定义pdf的方法。一切正常,但在每页上都打印带有商店徽标的页眉和带有电子发票信息的页脚。如何隐藏它们以使模板占据打印页面的所有尺寸?

我尝试将tcpdf示例中的pdf对象代码添加到我的pdf对象代码中,但似乎我在presta中不使用TCPDF:

$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);

这是我的课程:

class HTMLTemplateCustomPdf extends HTMLTemplate
{
    public $custom_model;

    public function __construct($custom_object, $smarty)
    {
        $this->custom_model = $custom_object;
        $this->smarty = $smarty;
    }

    /**
     * Returns the template's HTML content
     * @return string HTML content
     */
    public function getContent()
    {
        //here I get content

        return $this->smarty->fetch(_PS_MODULE_DIR_ . 'ps_first_module/views/templates/hook/pdf.tpl');
    }

    /**
     * Returns the template filename
     * @return string filename
     */
    public function getFilename()
    {
        return 'custom_pdf.pdf';
    }

    /**
     * Returns the template filename when using bulk rendering
     * @return string filename
     */
    public function getBulkFilename()
    {
        return 'custom_pdf.pdf';
    }

这是我创建pdf对象的地方:

if (Tools::isSubmit('print')) {
    if (Shop::getContext() != Shop::CONTEXT_GROUP && Shop::getContext() != Shop::CONTEXT_ALL) {
        require_once _PS_MODULE_DIR_ . 'ps_first_module/HTMLTemplateCustomPdf.php';
        $orientation = 'L';
        $pdf = new PDF($custom_object, 'CustomPdf', Context::getContext()->smarty, $orientation);
        $pdf->render();
    }
}

编辑: 这是我的PDFGenerator.php覆盖。我应该把它放在root / override / classes / pdf还是my_module / override / classes / pdf吗?

<?php
class PDFGenerator extends PDFGeneratorCore
{
    /**
     * @param bool $use_cache
     * @param string $orientation
     */
    public function __construct($use_cache = false, $orientation = 'L')
    {
        parent::__construct($orientation, 'mm', 'A4', true, 'UTF-8', $use_cache, false);
        $this->setRTL(Context::getContext()->language->is_rtl);
    }

    /**
     * Write a PDF page
     */
    public function writePage()
    {
        if(!$this->header){
       $this->SetHeaderMargin(0);
       }
       else{
           $this->SetHeaderMargin(5);
       }

       if(!$this->footer){
           $this->SetFooterMargin(0);
       }
       else{
           $this->SetFooterMargin(21);
       }

       $this->setMargins(10, 10, 10);
       $this->AddPage();
       $this->writeHTML($this->content, true, false, true, false, '');
    }
}

1 个答案:

答案 0 :(得分:1)

我在1.7.2版中尝试过,文件属性提到了Producer:TCPDF 6.2.12(http://www.tcpdf.org)。另外,函数render()中的Pdf类为:

onPress={() =>this.props.navigation.navigate('subscribed')}

因此,最好的方法是您的类HTMLTemplateCustomPdf包含函数getHeader()和getFooter()以返回false(或为空),否则它将使用HTMLTemplateCore中的函数。

在PDFGenerator的替代中,您可以执行以下操作:

$this->pdf_renderer->createHeader($template->getHeader());
$this->pdf_renderer->createFooter($template->getFooter());

如果需要,还可以在$ this-> setMargins(10,40,10);

中设置不同的边距。