PDF Rechnung anpassen und editieren?

könnte man schon, aber dann verschiebt sich alles (wenn die Bilder größer als 5x5mm sein sollen)


$pdf->Image('images/image_demo.jpg', 15, 140, 75, 113, 'JPG', '', '', true, 150, '', false, false, 1, false, false, false);

https://tcpdf.org/docs/source_docs/classTCPDF/#a714c2bee7d6b39d4d6d304540c761352

da diese Frage schon öfter gestellt wurde hier eine kurze Anleitung.
Geändert wird in den älteren Versionen (ich mein bis 4.9) die Datei


 modules/oe/invoicepdf/myorder.php

aktuelle (4.10) ist es


 modules/oe/invoicepdf/models/invoicepdfoxorder.php

Geändert wird die


 protected function _setOrderArticlesToPdf()

Am Anfang wird aus optischen Gründen der Zeilenabstand geändert und die Position gespeichert (rot markiert)


            // starting a new page ...
            if ($iStartPos > 243) {
                $this->pdffooter($oPdf);
                $iStartPos = $this->pdfheaderplus($oPdf);
                $oPdf->setFont($oPdfBlock->getFont(), '', 10);
            } else {
                $iStartPos = $iStartPos + [B]5[/B];
            }
[B]// because text is formatted at base line picture shoul start at top of line
$iPicPos = $iStartPos - 4;
[/B]

Am Ende der function noch innerhalb der foreach-Schleife wird die Ausgabe des Bildes eingefügt


// product picture
if ( $oOrderArt->oxorderarticles__oxpic1 != '') {
  $myConfig = $this->getConfig();
  $sPicFile = $myConfig->getConfigParam( 'sShopDir' ) . 'out/pictures/master/product/1/' . $oOrderArt->oxorderarticles__oxpic1;
   if (file_exists($sPicFile)) {
     $oPdf->image($sPicFile, 45, $iPicPos, 12, 12);
     $iStartPos = $iPicPos + 12;
     }
  }

Aus der Rechnung die so aussah

wird dann

Natürlich liegt jetzt der Titel teileweise hinter dem Bild. Etwa in der Mitte der function wird geändert


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

in


      // product title
       $oPdf->setFont($oPdfBlock->getFont(), '', 10);
       [B]//[/B] $oPdf->text(45, $iStartPos, substr(strip_tags($this->_replaceExtendedChars($oOrderArt->oxorderarticles__oxtitle->getRawValue(), true)), 0, 58));
	[B]$oPdf->SetXY(58, $iStartPos - 4);
	$sText = strip_tags($this->_replaceExtendedChars($oOrderArt->oxorderarticles__oxtitle->getRawValue(), true));
         $oPdf->MultiCell(70, 8, $sText, 0, "L");
[/B]

jetzt sieht es so aus (mit Zeilenumbruch):

zuletzt nach bei Varianten den Zeilenabstabd auf 8 ändern


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

Danke patchwork.de für die sehr schöne Erklärung :), hat mich sehr gefreut da das ales noch Neuland für mich ist.

Ich arbeite mit 4.7.8 deshalb habe ich mich an den folgenden PHP-Code gehalten.

[B]Geändert wird in den älteren Versionen (ich mein bis 4.9) die Datei
PHP Code:
modules/oe/invoicepdf/myorder.php
[/B]

Leider habe ich den Ordner [B]/invoicepdf[/B] nicht in unserem Code gefunden, kann es vielleicht einen anderen Namen haben. :confused:

Über eine kurze Rückmeldung zu meiner Frage wäre ich dankbar.

Habe den Ordner doch gefunden, aber nicht unter /oe/, habe dadurch jetzt auch myorder.php geöffnet. Wo ändere ich jetzt genau diesen Code???

[QUOTE=SuperDicht;182254]
Geändert wird in den älteren Versionen (ich mein bis 4.9) die Datei
PHP Code:
modules/oe/invoicepdf/myorder.php

Leider habe ich den Ordner /invoicepdf nicht in unserem Code gefunden…[/QUOTE]
in der Version steht die Datei wohl in


 modules/invoicepdf/myorder.php 

Wo ändere ich jetzt genau diesen Code???

Wo? siehe Beitrag weiter oben …
Wie? zB. mit notepad++

Mit der Frage [B]Wo ändere ich jetzt genau diesen Code???[/B] hatte ich gemient, ob mir jemand sagen auf welcher Seite es sind ja halt [B]31 Seiten.[/B] insgesamt. Das ich das mit notepad öffne was ich auch.

einfach mal nach

_setOrderArticlesToPdf

suchen?! (Strg + F)

Hab [B]_setOrderArticlesToPdf [/B] gefunden, kommt aber mit dem Einfügen des geänderten Code nicht ganz klar. Besser gesagt ich weiss nicht genau wo ich diesen einstzen soll.

		else {
			$iStartPos = $iStartPos + 4;
		}  Soll hier der Test // because text is formetted.... eingefügt werden?
		// 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
			############################################################## Anpassung

Ja - in eine neue Zeile nach der geschweiften Klammer
Tipps:

  • immer wieder mal testen! Wenn dir Rechnung nicht geöffnet wird, ist irgendwo ein Syntaxfehler
  • um im PDF-Dokument zum testen etwas auszudrucken:

$oPdf->text(10,10, "dies nur zum Testen"); 

das wird oben links ausgedruckt …

Happy Coding :slight_smile:

Hilfe
Hab versucht die Änderungen für die Anzeige der Artikelbilder in die Rechnung ein zu kopiern.

Jetzt zeigt er mir aber den Bestelleingang nicht mehr an!! Hatte vom Originalcode kopie gemacht und diesen jetzt wieder eingesetzt, zeigt aber immer noch nichts an.

Was hab ich vergessen oder falsch gemacht, bitte bin etwas verwzeifelt.!!!

[QUOTE=SuperDicht;182296]
Was hab ich vergessen oder falsch gemacht, …
[/QUOTE]

schwer zu sagen - ; oder } oder ???

-> anrufen -> teamviewer oder die function hier posten

Hab´s geschafft der Bestelleingang ist wieder da, huch. Hatte zwei Klammerzeichen zu viel gesetzt:mad:

COMMUNITY EDITION 4.10.3

Hallo zusammen,

wenn ich im Shop eine Rechnung generiere, erstellt der die immer so:

Herr
Max Mustermann

Musterstraße 2
12345 Muster
Musterland

Weil der Kunde keine Firma hinterlegt hat, entsteht die Leerzeile. Kann ich das irgendwie einstellen, dass der automatisch eine Zeile nach oben rückt?

    protected function _setBillingAddressToPdf($oPdf)
    {
        $oLang = oxRegistry::getLang();
        $sSal = $this->oxorder__oxbillsal->value;
        try {
            $sSal = $oLang->translateString($this->oxorder__oxbillsal->value, $this->getSelectedLang());
        } catch (Exception $e) {
        }
        $oPdfBlock = new InvoicepdfBlock();
        $oPdf->setFont($oPdfBlock->getFont(), '', 10);
        $oPdf->text(15, 59, $sSal);
		$oPdf->text(15, 63, $this->oxorder__oxbillfname->getRawValue() . ' ' . $this->oxorder__oxbilllname->getRawValue());
        $oPdf->text(15, 67, $this->oxorder__oxbillcompany->getRawValue());
        $oPdf->text(15, 71, $this->oxorder__oxbillstreet->getRawValue() . ' ' . $this->oxorder__oxbillstreetnr->value);
        $oPdf->setFont($oPdfBlock->getFont(), 'B', 10);
        $oPdf->text(15, 75, $this->oxorder__oxbillzip->value . ' ' . $this->oxorder__oxbillcity->getRawValue());
        $oPdf->setFont($oPdfBlock->getFont(), '', 10);
        $oPdf->text(15, 79, $this->oxorder__oxbillcountry->getRawValue());
    }

Vielen Dank im Voraus.

wäre kompliziert, aber viel einfacher ist es, wenn du die Firma über der Anrede schreibst, wie es auch die Deutsche Post eigentlich vorschreibt.
also etwa so:
Musterfirma GmbH & Co. KG
Herr Mustermann
Musterstraße 2
12345 Muster
Musterland

und wenn es keine Firma gibt, ist die Zeile einfach leer, was dort nicht weiter auffällt.


protected function _setBillingAddressToPdf($oPdf)    {
$oLang = oxRegistry::getLang();
$sSal = $this->oxorder__oxbillsal->value;
try {
$sSal = $oLang->translateString($this->oxorder__oxbillsal->value, $this->getSelectedLang());
} catch (Exception $e) {
}

$oPdfBlock = new InvoicepdfBlock();
$oPdf->setFont($oPdfBlock->getFont(), '', 10);
$Y = 59;
$oPdf->text(15, $Y, $sSal);
$Y += 4;
$oPdf->text(15, $Y, $this->oxorder__oxbillfname->getRawValue() . ' ' . $this->oxorder__oxbilllname->getRawValue());

if ($this->oxorder__oxbillcompany->getRawValue() != '') {
$Y += 4;
        $oPdf->text(15, $Y, $this->oxorder__oxbillcompany->getRawValue());
}

$Y += 4;
$oPdf->text(15, $Y, $this->oxorder__oxbillstreet->getRawValue() . ' ' . $this->oxorder__oxbillstreetnr->value);
$oPdf->setFont($oPdfBlock->getFont(), 'B', 10);
$Y += 4;
$oPdf->text(15, $Y, $this->oxorder__oxbillzip->value . ' ' . $this->oxorder__oxbillcity->getRawValue());
$oPdf->setFont($oPdfBlock->getFont(), '', 10);
$Y += 4;
$oPdf->text(15, $Y, $this->oxorder__oxbillcountry->getRawValue());
} 


@vanilla thunder
Vielen Dank für den Tipp. Daran habe ich auch gedacht, aber der schiebt das nicht automatisch nach oben. Dann bleibt trotzdem eine Leerzeile.

@patchwork
Vielen Dank für deine Hilfe. Genau den Tipp habe ich gebraucht.

Ich habe das noch etwas angepasst. Jetzt steht die Firma oben.

	protected function _setBillingAddressToPdf($oPdf)    {
	$oLang = oxRegistry::getLang();
	$sSal = $this->oxorder__oxbillsal->value;
	try {
	$sSal = $oLang->translateString($this->oxorder__oxbillsal->value, $this->getSelectedLang());
	} catch (Exception $e) {
	}
	
	$oPdfBlock = new InvoicepdfBlock();
	$oPdf->setFont($oPdfBlock->getFont(), '', 10);
	$Y = 59;
	if ($this->oxorder__oxbillcompany->getRawValue() != '') {
	
			$oPdf->text(15, $Y, $this->oxorder__oxbillcompany->getRawValue());
	}
	$Y += 4;
	$oPdf->text(15, $Y, $sSal . ' ' . $this->oxorder__oxbillfname->getRawValue() . ' ' . $this->oxorder__oxbilllname->getRawValue());
	
	//$Y += 4;
	//$oPdf->text(15, $Y, $this->oxorder__oxbillfname->getRawValue() . ' ' . $this->oxorder__oxbilllname->getRawValue());
	
	//if ($this->oxorder__oxbillcompany->getRawValue() != '') {
	//$Y += 4;
	//        $oPdf->text(15, $Y, $this->oxorder__oxbillcompany->getRawValue());
	//}
	
	$Y += 4;
	$oPdf->text(15, $Y, $this->oxorder__oxbillstreet->getRawValue() . ' ' . $this->oxorder__oxbillstreetnr->value);
	$oPdf->setFont($oPdfBlock->getFont(), '', 10);
	$Y += 4;
	$oPdf->text(15, $Y, $this->oxorder__oxbillzip->value . ' ' . $this->oxorder__oxbillcity->getRawValue());
	$oPdf->setFont($oPdfBlock->getFont(), '', 10);
	$Y += 4;
	$oPdf->text(15, $Y, $this->oxorder__oxbillcountry->getRawValue());
	} 

Habt Ihr vielleicht noch einen Tipp:D für mich?

Wie ich die MwSt. komplett ausweisen kann?

Beispiel:

[U]Summe Artikel netto 100,00 €[/U]
[U]- Gutschein 50,00 €[/U]

  • Versandkosten netto 6,00
    [U]+ zzgl. MwSt.(von allem)[/U]
    Gesamtsumme (brutto)

Soweit ich weiß muss das in der invoicepdfarticlesummary.php geändert werden. Weiß aber nicht genau wo. :confused::confused::confused: