Zend pdf,调整大小和放置pdftring到pdf

时间:2012-08-27 13:49:31

标签: php zend-framework pdf-generation zend-pdf

我在使用Zend PDF制作pdf方面取得了很好的进展。

我现在正在将Web服务集成到我正在构建的应用程序中。一切都进展顺利,但我现在正在努力渲染动态生成的pdf,其中包含通过Web服务返回的pdf标签。请考虑以下事项:

1。)调用打印pdf的操作。 2.)pdf将包含关于物品/货物的动态信息的n页(n个对象/项目)。 3.)n个货件中的每一个都包含一个货件编号,当作为参数传递给Web服务的特定方法时,返回pdfstring(我可以保存为pdf)。 4.)我必须调整大小并将每个标签添加到相应页面的底部。

到目前为止,我已经能够使用已保存的pdf,并设法加载从Web服务返回的pdfstring,并且" merge"它成为最终的PDF格式。这很好用。但我真的想做以下事情:

1。)启动一个新的pdf并添加所有其他内容。 2.)进行SOAP调用并提取返回的Pdf字符串。

我已经这样做了,现在我想:

3。)调整"标签" 4.)将其旋转90度 5.)将其添加到正在构建的pdf中。 (不与现有的pdf合并)。

所以,如果我:

$returnedFromWebServicePDF = Zend_Pdf::parse($pdfLabel, 1);

我可以自己保存它甚至合并它(通过克隆看here)但是想调整大小,旋转并将它添加到pdf im building。

有人可以引导我朝着正确的方向前进,因为我非常难过。如果有人可以简单地告诉我如何将其添加到动态文档中,那就足以作为这个问题的答案了。

提前致谢

修改

我迄今为止的努力毫无结果。我现在正在尝试更改应用程序进程的主要部分,以便在调用此操作之前已经存储了pdf。这意味着我可以将静态pdf合并为动态生成的pdf。将更新此问题。

1 个答案:

答案 0 :(得分:0)

为了澄清一下,您的目标是下载该服务创建的PDF,将其加载回Zend_PDF并对pdf中存在的内容进行更改。

Zend_PDF擅长向现有pdf添加内容,但无法更改页面上已有的内容。

它允许您在现有内容的基础上添加新图层。 如果您无法控制该服务,则可以使用填充了背景颜色的形状编辑您尝试更改的内容,并在该形状上添加新的文本块。

我们使用类似的东西制作个性化证书。

把它放在正确的位置很棘手。 我在pdf上使用网格覆盖来获得我对pdf的支持。

/**
 * Creates a grid overlay on a pdf. Useful for positioning text on a page.
 * @param integer intPage The page number to operate on.
 * @param integer intInterval. Lines on the page will be drawn at this interval. Value is in points.
 * @return boolean TRUE for success.
 */
public function addGridLines($intPage = 0, $intInterval = 25)
{
    $this->objPdf->pages[$intPage]->saveGS();
    $pageWidth = $this->objPdf->pages[$intPage]->getWidth();
    $pageHeight = $this->objPdf->pages[$intPage]->getHeight();
    $this->objPdf->pages[$intPage]->setStyle($this->arrStyles['defaultLine']);
    $this->objPdf->pages[$intPage]->setStyle($this->arrStyles['defaultText']);
    //draw lines across the page.
    for($a = 0; $a < $pageHeight; $a+= $intInterval){
        $x = 0;
        $y = $a;
        $this->objPdf->pages[$intPage]->drawLine($x, $y, $pageWidth, $y);
        $this->objPdf->pages[$intPage]->drawText($a, $x, $y);
    }
    //Draw lines up the page.
    for($a = 0; $a < $pageHeight; $a+= $intInterval){
        $x = $a;
        $y = 0;
        $this->objPdf->pages[$intPage]->drawLine($x, $y, $x, $pageHeight);
        $this->objPdf->pages[$intPage]->drawText($a, $x, $y);
    }
    $this->objPdf->pages[$intPage]->restoreGS();

    return TRUE;
}

这个方法是另一个使用pdf相关方法的对象,但是你明白了。 'objPdf'是我正在使用的Zend_PDF对象。