Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php TCPDF加上;“返回目录”;页脚链接 处境_Php_Footer_Tcpdf_Tableofcontents - Fatal编程技术网

Php TCPDF加上;“返回目录”;页脚链接 处境

Php TCPDF加上;“返回目录”;页脚链接 处境,php,footer,tcpdf,tableofcontents,Php,Footer,Tcpdf,Tableofcontents,我正在尝试从提供的HTML代码动态生成PDF。我已经记下了内容格式,但我一直在努力让页脚正常工作。这是一个由三部分组成的页脚,包含作者姓名、页面名称和“返回目录”链接,但该链接不起作用 我试过的 我知道并已经尝试了它的解决方案,这是官方网站中发现的链接的一种变体,但没有成功。我尝试了解决方案和示例,该示例根据TCPDF\u STATIC::$alias\u num\u页面而不是实际页面声明了链接。两者都生成了一个没有任何功能的链接(当鼠标悬停在上面时,鼠标图标也不会改变,他们的示例文件也是如此)

我正在尝试从提供的HTML代码动态生成PDF。我已经记下了内容格式,但我一直在努力让页脚正常工作。这是一个由三部分组成的页脚,包含作者姓名、页面名称和“返回目录”链接,但该链接不起作用

我试过的
  • 我知道并已经尝试了它的解决方案,这是官方网站中发现的链接的一种变体,但没有成功。我尝试了解决方案和示例,该示例根据
    TCPDF\u STATIC::$alias\u num\u页面而不是实际页面声明了链接。两者都生成了一个没有任何功能的链接(当鼠标悬停在上面时,鼠标图标也不会改变,他们的示例文件也是如此)
  • 模拟
    TCPDF::addTOCPage()函数的链接创建。这导致了功能链接,但它们只指向被单击页面所在的页面顶部
  • 通过模拟
    TCPDF::addTOCPage()
    函数的链接创建,我意识到
    TCPDF::SetLink()
    函数对应于生成的页面,而不是
    TCPDF\u STATIC::$alias\u num\u page
    值(最终页码值)。因此,由于ToC是创建的最后一个页面,它的值应该匹配
    TCPDF\u STATIC::$alias\u tot\u pages
    。所以,我试着设置链接,但它只在ToC中起作用。所有其他页面都有没有功能或鼠标图标的链接
  • 我创建了一个新的类变量和两个用于设置和获取其值的函数,但这同样是毫无价值的,因为在生成ToC页面时设置了变量,并且在生成之前设置了页脚中的链接,使它们都使用默认值“1”
  • 代码 下面是我当前版本的
    MYPDF
    类,详细内容见项目符号4

    class MYPDF extends TCPDF {
        protected $tocPageNo = 1;
    
        public function getTocPageNo() {
            return $this->tocPageNo;
        }
    
        public function setTocPageNo($num) {
            $this->tocPageNo = is_int($num) ? $num : $this->tocPageNo;
            return;
        }
    
        public function Footer() {
            if($this->PageNo() !== 1) {
                $this->SetY(-15);
                $this->SetFont('Helvetica', 'I', 8);
                $margins = $this->getMargins();
                $width = ($this->getPageWidth() - $margins['left'] - $margins['right']) / 3;
                $this->MultiCell($width, 0, $GLOBALS['author'], 0, 'L', false, 0);
                $this->MultiCell($width, 0, 'Page ' . $this->getAliasNumPage() . '/' . $this->getAliasNbPages(), 0, 'C', false, 0);
                $link = $this->AddLink();
                $this->SetLink($link, 0, $this->getTocPageNo());
                $this->Write(0, 'Return to Table of Contents', $link, false, 'R');
            }
            return;
        }
    }
    

    注意:全局变量的使用仅用于基本测试。

    在页码之前添加
    *
    ,应该可以获得您想要的结果。在页码前加*字符将防止添加TOC页面时更改链接。这是应该进行的更改:

    /$this->SetLink($link,0,$this->getTocPageNo());
    $this->SetLink($link,0,'*'。$this->getTocPageNo());
    
    您可以在代码中阅读此方法的文档

    此外,更改页脚中的条件将阻止其在TOC页面上打印。在当前配置中,它将跳过第一个内容页。这就是变化:

    //如果($this->PageNo()!==1){
    如果(!$this->tocpage){
    
    以下是一个完整的示例:


    就是这样。所以在另一个线程中提出的解决方案让我有点困惑。它在链接的目的地定义了链接,如果实现的代码完全是过程性的,我想这没有错。我的不是,所以我认为这就是我的冲突所在。关于
    if
    语句,我认为我需要
    $this->PageNo()!==1
    条件,因为我还生成了一个标题表,但这些条件结合起来,使页脚不在两页上。谢谢您提供的信息。:)现在我需要解决这个表问题。