TCPDF - Pagenumbers不完全正确对齐

时间:2011-03-30 10:48:24

标签: php tcpdf

我正在使用TCPDF生成pdf。

我的问题是Footer()方法的以下行:

$this->Cell(0, 10, 'Page '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 'T', false, 'R');

这是将pagenumber插入文档页脚的标准行,但输出中右边有一个litte空格。您可以在网站上的示例1中看到它:http://www.tcpdf.org/examples/example_001.pdf

如果我插入这样的普通文字:

$this->Cell(0, 10, 'Foobar', 'T', false, 'R');

文本完全对齐,没有任何问题。

我深入研究了源代码,它似乎与编码有关,但我并不是真的明白了......有人可以帮忙吗?

问候

9 个答案:

答案 0 :(得分:4)

我解决了这个问题:

$this->Cell(0, 0, $this->getAliasRightShift().$this->PageNo().'/'.$this->getAliasNbPages(), 1, 0, 'R');

如果您有超过99页,您将再次出现对齐问题!使用别的东西来生成学位论文的pdf! :)

答案 1 :(得分:2)

我已经解决了使用:

$txt='Page '.$this->PageNo().' of '.$this->getNumPages()

而不是:

$txt='Page '.$this->getAliasNumPage().' of '.$this->getAliasNbPages()

Isotypelab.org

上的意大利语翻译和更新

答案 2 :(得分:1)

不幸的是,TCPDF 对齐别名而不是替换的最终数字 别名。使用$ this-> AliasNbPages('{p}')和$ this-> AliasNumPAge('{n}')将无济于事。额外填充将保留在原位。

唯一的解决方案是使用页码而不是别名。

Original bug at SourceForge.net (TCPDF bug tracker)

答案 3 :(得分:1)

由于我的文档不超过10页,我有2个解决方案,请给它更宽的宽度(在我的情况下为260,因为我有PDF_PAGE_ORIENTATION ='L')并对齐'R':

$this->Cell(260, 6, 'Page '.$this->getAliasNumPage().' of '.$this->getAliasNbPages(), 0, 0, 'R', 0, '', 0, false, 'T', 'C');

或两个WIDTH = 0的单元格,对齐'C',第二个单元格有一些空格:

$this->Cell(0, 6, '', 0, 0, 'C', 0, '', 0, false, 'T', 'C');
$this->Cell(0, 6, 'Page '.$this->getAliasNumPage().' of '.$this->getAliasNbPages().'        ', 0, 0, 'C', 0, '', 0, false, 'T', 'C');

如果您的页面超过10页,请使用WIDTH和SPACES。

在我的情况下,这个对齐的页面编号在右边。

答案 4 :(得分:0)

我认为问题出在别名中。这些只是在插入时计算宽度的文本片段,而不是用数字替换它们的时间。

因此,为字符串(字面意思){np}/{nb}计算文本宽度。当它被替换为末尾的数字1/9小于此值时,23/109更大。

您可以使用反映setAliasNbPages()宽度的内容替换所使用的NbPages别名(the total number of pages?),以便估计将会有多少。而且我相信您可以直接使用当前页码而不使用别名,因此该别名的问题至少不会出现。

答案 5 :(得分:0)

getNumPages不会这样做。 如果你有3页,getNumPages()将产生1 / 1,2 / 2和3/3 getAliasNbPages()将产生1 / 3,2 / 3和3/3 所以问题仍然存在!

答案 6 :(得分:0)

您可以在生成后添加页码,而无需别名。 在$pdf->Output(...);

之前最后做
$numPages = $pdf->getNumPages();

for($int=1;$int < $numPages + 1; $int++)
{
    $pdf->setPage($int);
    $pdf->SetY(-15);
    $pdf->SetFont('helvetica', '', 9);
    $pdf->writeHTML('Page '.$int.'/'.$numPages,true,false,true,false,'R');
}

答案 7 :(得分:0)

TCPDF对齐别名而不是实际页码。要向右对齐,请不要使用别名:

$pageNumber = $this->getPage();
$this->Cell(0, 10, 'Page '.$pageNumber, 'T', false, 'R');

不幸的是,对于页面总数,您没有解决方案,因为在调用页脚代码时,尚未插入所有页面。

答案 8 :(得分:-3)

试试这个

$txt='Page '.$this->PageNo().' of '.$this->getNumPages()

为我工作