2

Zend PDF を使用した PDF の作成は順調に進んでいます。

現在、構築中のアプリケーションに Web サービスを統合しています。すべてが順調に進んでいますが、Web サービス経由で返される pdf ラベルを含む動的に生成された 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);

私はそれを単独で保存することも、マージすることもできます(クローン作成を介してhereを参照)が、サイズを変更し、回転させ、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 に答える