Pdf Rechnung - Abstand Artikel erhöhen

Guten Morgen Allerseits

ich habe gesucht, ich habe vieles gefunden, aber nicht das Richtige

der obige code (aus invoicepdfoxorder.php) , sofern ich das richtig interpretiere, ist die Ausgabe der bestellen Artikeln. (einmal für den LS auf line 473, einmal für die RG auf line 598) Was ich machen möchte (für Rechnung und Lieferschein) :

Der jetztige Abstand zwischen den Artikeln (s.unten, grün) ist mir zu wenig, den möchte ich [B]um einen punkt erhöhen… [/B]

(da dachte ich mir, ich mache mal [B]$isiteH[/B] = $siteH +1; und habe den code dannn anstelle von $siteH eingefügt mit einem resultat, aber nicht dem richtigen… . auch ein simples + 1 dahinterhängen (also $siteH + 1), ging nicht… aber es müsste doch eigentlich so funzen, oder bin ich komplett auf dem falschen Dampfer?.. php ist noch Neuland…Zwar bin ich nach ca 30 maligem durchlesen der oxorder, oxarticlesummary etc, nicht mehr das greenhorn, dass ich vorher war (total grün, ohne die geringste Ahnung von php), aber es ist noch vieles sehr undurchsichtig…

… zumindest hab ich schon vieles selbst erledigen könnnen, durch ausprobieren, lesen, etc… aber ich bin hier an einem punkt, wo try and error nicht mehr funktioniert…

Somit bin ich - schon wieder - auf den wertvollen Input der Community angewiesen…

und wenn ich schon am Fragen stellen bin, wieso hat es auf line 473 ein “TRUE” dahinter, beim anderen eine “false”…? das verwirrt mich ein wenig… aber geht schon wieder… :slight_smile:

vielen lieben Dank schonmal…
Cb

Change:

protected function _setOrderArticlesToPdf($oPdf, &$iStartPos, $blShowPrice = true)
    {
        if (!$this->_oArticles) {
            $this->_oArticles = $this->getOrderArticles(true);
        }

        $oCurr = $this->getCurrency();
        $oPdfBlock = new InvoicepdfBlock();
        // product list
        foreach ($this->_oArticles as $key => $oOrderArt) {

            // starting a new page ...
            if ($iStartPos > 243) {
                $this->pdffooter($oPdf);
                $iStartPos = $this->pdfheaderplus($oPdf);
                $oPdf->setFont($oPdfBlock->getFont(), '', 10);
            } else {
                $iStartPos = $iStartPos + 4;
            }

            // sold amount
            $oPdf->text(20 - $oPdf->getStringWidth($oOrderArt->oxorderarticles__oxamount->value), $iStartPos, $oOrderArt->oxorderarticles__oxamount->value);

            // product number
            $oPdf->setFont($oPdfBlock->getFont(), '', 8);
            $oPdf->text(28, $iStartPos, $oOrderArt->oxorderarticles__oxartnum->value);

            // product title
            $oPdf->setFont($oPdfBlock->getFont(), '', 10);
            $oPdf->text(45, $iStartPos, substr(strip_tags($this->_replaceExtendedChars($oOrderArt->oxorderarticles__oxtitle->getRawValue(), true)), 0, 58));

            if ($blShowPrice) {
                $oLang = oxRegistry::getLang();

                // product VAT percent
                $oPdf->text(140 - $oPdf->getStringWidth($oOrderArt->oxorderarticles__oxvat->value), $iStartPos, $oOrderArt->oxorderarticles__oxvat->value);

                // product price

                $dUnitPrice = ($this->isNettoMode()) ? $oOrderArt->oxorderarticles__oxnprice->value : $oOrderArt->oxorderarticles__oxbprice->value;
                $dTotalPrice = ($this->isNettoMode()) ? $oOrderArt->oxorderarticles__oxnetprice->value : $oOrderArt->oxorderarticles__oxbrutprice->value;

                $sText = $oLang->formatCurrency($dUnitPrice, $this->_oCur) . ' ' . $this->_oCur->name;
                $oPdf->text(163 - $oPdf->getStringWidth($sText), $iStartPos, $sText);

                // total product price
                $sText = $oLang->formatCurrency($dTotalPrice, $this->_oCur) . ' ' . $this->_oCur->name;
                $oPdf->text(195 - $oPdf->getStringWidth($sText), $iStartPos, $sText);

            }

            // additional variant info
            if ($oOrderArt->oxorderarticles__oxselvariant->value) {
                $iStartPos = $iStartPos + 4;
                $oPdf->text(45, $iStartPos, substr($oOrderArt->oxorderarticles__oxselvariant->value, 0, 58));
            }

        }
    }

to

protected function _setOrderArticlesToPdf($oPdf, &$iStartPos, $blShowPrice = true)
    {
        if (!$this->_oArticles) {
            $this->_oArticles = $this->getOrderArticles(true);
        }

        $oCurr = $this->getCurrency();
        $oPdfBlock = new InvoicepdfBlock();
        // product list
		[B]$cnt = 0;[/B]
        foreach ($this->_oArticles as $key => $oOrderArt) {

            // starting a new page ...
            if ($iStartPos > 243) {
                $this->pdffooter($oPdf);
                $iStartPos = $this->pdfheaderplus($oPdf);
                $oPdf->setFont($oPdfBlock->getFont(), '', 10);
            } else {
				[B]if($cnt == 0){ $iStartPos = $iStartPos + 4;}
				else{$iStartPos = $iStartPos + 8;} // change value[/B]
            }

            // sold amount
            $oPdf->text(20 - $oPdf->getStringWidth($oOrderArt->oxorderarticles__oxamount->value), $iStartPos, $oOrderArt->oxorderarticles__oxamount->value);

            // product number
            $oPdf->setFont($oPdfBlock->getFont(), '', 8);
            $oPdf->text(28, $iStartPos, $oOrderArt->oxorderarticles__oxartnum->value);

            // product title
            $oPdf->setFont($oPdfBlock->getFont(), '', 10);
            $oPdf->text(45, $iStartPos, substr(strip_tags($this->_replaceExtendedChars($oOrderArt->oxorderarticles__oxtitle->getRawValue(), true)), 0, 58));

            if ($blShowPrice) {
                $oLang = oxRegistry::getLang();

                // product VAT percent
                $oPdf->text(140 - $oPdf->getStringWidth($oOrderArt->oxorderarticles__oxvat->value), $iStartPos, $oOrderArt->oxorderarticles__oxvat->value);

                // product price

                $dUnitPrice = ($this->isNettoMode()) ? $oOrderArt->oxorderarticles__oxnprice->value : $oOrderArt->oxorderarticles__oxbprice->value;
                $dTotalPrice = ($this->isNettoMode()) ? $oOrderArt->oxorderarticles__oxnetprice->value : $oOrderArt->oxorderarticles__oxbrutprice->value;

                $sText = $oLang->formatCurrency($dUnitPrice, $this->_oCur) . ' ' . $this->_oCur->name;
                $oPdf->text(163 - $oPdf->getStringWidth($sText), $iStartPos, $sText);

                // total product price
                $sText = $oLang->formatCurrency($dTotalPrice, $this->_oCur) . ' ' . $this->_oCur->name;
                $oPdf->text(195 - $oPdf->getStringWidth($sText), $iStartPos, $sText);

            }

            // additional variant info
            if ($oOrderArt->oxorderarticles__oxselvariant->value) {
                $iStartPos = $iStartPos + 4;
                $oPdf->text(45, $iStartPos, substr($oOrderArt->oxorderarticles__oxselvariant->value, 0, 58));
            }
			[B]$cnt++;[/B]
        }
    }

Welche Version?

$this->_setOrderArticlesToPdf($oPdf, $siteH, true); ist der Aufruf einer Funktion in der gleichen Klasse (müßte weiter oben sein)
-> in dieser Funktion gibt es eine foreach - Schleife
-> in der Schleife steht $iStartPos = $iStartPos + 4;
-> ändere 4 -> 5

2.Frage:

  • wenn beim Aufrufen der Funktion true übergeben wird, werden Preise ausgegeben (für Rechnung)
  • false keine Preise (für Lieferschein)

Version 4.9.6…

SUUUUUUPER… !!! So einfach kanns manchmal sein… Vielen, vielen Dank…(hab mich für die patchwork lösung entschieden)… easy stuff first… )…

Und auch danke für die Erklärung zum true und false… wieder was gelernt… einen schönen Sonntag wünsch ich Euch allen… )

liebe Grüsse
Cb

Die Lösung ist eigentlich gleich, nur dass Du mit der Counterabfrage an der gleichen vertikalen Stelle beginnst und nicht beim ersten Artikel direkt weiter unten. Aber das ist nur was für die “Genaueren” :stuck_out_tongue:

genau… :)… die genaueren… das möchte ich gerne sein können werden dürfen… (deswegen heb ich mir den code für später auf… )… aber Hauptsache es funzt. … Danke, Rubber.

cheers
Cb

[QUOTE=rubbercut;185685] …
Aber das ist nur was für die “Genaueren” :p[/QUOTE]

noch einfacher ist es vor der foreach-Schleife folgende Zeile einzufügen (wenn der Zeilenabstand zB um 1mm vergrößert wurde):

$iStartPos = $iStartPos - 1;

jetzt nicht lachen… ist ja das newbie forum… )… ich habe eben dieses -1 bei jedem element der rechnung eingetragen (um diese eins “hochrutschen” zu lassen… ohne die line zu verschieben) und wusste aber, dass es auch sicher einfacher geht als es bei jedem einzelnen element zu machen… … zu fragen getraut hab ich mich nicht…

(ich werde die boardsuche und google verwenden bevor ich doofe fragen stelle… ^^)

aber ist es demnach richtig, dass die variable solange gilt, bis man diese ein paar zeilen weiter unten quasi neu definieren würde?..

Frage 1:
die var - 1 gem obigem Beispiel würde also in meiner Zuckergusswelt solange gelten bis ich z.B. $iStartPos = $iStartPos -4; eingeben würde?..

Frage 2:
um diese zu resetten würde man was machen müssen? $iStartPos = 0;?.. kaum, oder?..

danke Euch allen…
Schöne Grüsse
Cb

um es mal etwas detailierter zu beschreiben:

  • die Variable $iStartPos bestimmt wo auf dem Papier etwas gedruckt werden soll - von oben gemessen in mm
  • der Wert in der Variablen $iStartPos wird beim Aufruf der Function übergeben
  • innerhalb der foreach-Schleife wird im Standard der Wert für jede Zeile um 4mm erhöht
  • $iStartPos = $iStartPos + 4 -> erhöhe den Abstand für die nächste zeile um 4mm
  • wenn die Funktion _setOrderArticlesToPdf() fertig ist, gibt sie den Inhalt von $iStartPos wieder zurück damit weitere Ausgaben auf dem Papier darunter gedruckt werden
  • sieht man am & bei dem Funktions-Parameter
  • siehe http://php.net/manual/de/language.references.pass.php

Danke für die Erklärungen… Sehr nett von Dir, dies alles so detailliert/ verständlich/ noobgerecht aufzulisten… das hilft weiter. lieben gruss und einen guten Wochenstart… !

Cb