2

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

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

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

到目前为止,我已经能够使用已经保存的 pdf,并设法加载从 Web 服务返回的 pdfstring,并将其“合并”到最终的 pdf 中。这很好用。但我实际上想做以下事情:

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

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

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

所以如果我:

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

我可以自己保存它,甚至可以合并它(通过克隆,请参见此处),但想调整大小、旋转并将其添加到 pdf im 构建中。

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

提前致谢

编辑

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

4

1 回答 1

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 对象。

于 2014-01-31T15:41:26.170 回答