【发布时间】:2018-08-06 09:43:33
【问题描述】:
情况
我正在尝试从提供的 HTML 代码动态生成 PDF。我已经把内容格式化了,但我一直在努力让页脚正常工作。这是一个由 3 部分组成的页脚,其中包含作者姓名、页面名称和“返回 ToC”链接,但该链接不起作用。
我的尝试
- 我知道TCPDF How do you make a link to the Table of Contents (TOC)? 并且已经尝试过它的解决方案,这是官方example 045 中的链接的变体,但没有成功。我只尝试了解决方案和示例,该示例具有根据
TCPDF_STATIC::$alias_num_page而不是实际页面声明的链接。两者都生成了一个没有功能的链接(当鼠标悬停在上面时,甚至鼠标图标都没有改变,他们的示例文件也是如此)。 - 模仿
TCPDF::addTOCPage()函数的链接创建。这导致了有效的链接,但它们只指向被点击页面所在的页面顶部。 - 通过模仿
TCPDF::addTOCPage()函数的链接创建,我意识到TCPDF::SetLink()函数对应于生成的页面,而不是TCPDF_STATIC::$alias_num_page值(最终页码值)。因此,由于 ToC 是创建的最后一页,它的值应该与TCPDF_STATIC::$alias_tot_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;
}
}
注意:全局变量的使用仅用于基本测试。
【问题讨论】:
标签: php footer tcpdf tableofcontents