微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

两个表之间的 TCPDF Margin 或 Valign

如何解决两个表之间的 TCPDF Margin 或 Valign

我用 tcpdf 创建了一个 pdf 文件。在我的文件中,表格中显示了各种位置。数字总是不同的。

我希望此表之后的部分始终输出在同一位置(该部分应始终位于页面底部)。 所以我必须在那里添加一种动态占位符或为下部区域分配一个固定的开始位置。不幸的是,我不知道该怎么做,因为 tcpdf 没有提供太多信息。

这个占位符应该去的部分是在 foreach 循环之后。我在我的源代码中创建了一条评论

有人知道吗。

<?
 /* Autor: Felix Schneider  */
//Letzte Änderung: 18.02.2021

//Secure wird definiert.
define('SECURE',true);

//Bindet die Verbindungsdatei ein,damit eine Verbindung zur Datenbank aufgebaut werden kann.
require_once('../inc/connect.PHP');

//Bindet die allgemeine Funktktionsdatei ein.
require_once('../functions.PHP');

//Bindet die Konfigurationsdatei des Moduls ein.
require_once('config.PHP');
//Bindet die Datei mit den Funktionen des Moduls ein.
require_once('functions.PHP');

//Id des aktuellen Mietvertrags.
$id = 70;
 
//Sammelt die Daten zu der Vermietung.
$statement = $pdo->prepare("SELECT * FROM modul_vermietung_vermietungen WHERE id = :id");
$statement->execute(array(':id' => $id));
$abfrage_mietvertrag = $statement->fetch();
//Wandelt den Array um,damit Umlaute und Sonderzeichen richtig dargestellt werden.
$abfrage_mietvertrag = utf8_converter($abfrage_mietvertrag);
//Wandelt die Datums- und Zeitangaben in das richtige Format um.
$abfrage_mietvertrag['start_zeit'] = strtotime($abfrage_mietvertrag['start_zeit']);
$abfrage_mietvertrag['start_datum'] = date("d.m.Y",$abfrage_mietvertrag['start_zeit']);
$abfrage_mietvertrag['start_uhrzeit'] = date("H:i",$abfrage_mietvertrag['start_zeit']);
$abfrage_mietvertrag['ende_zeit'] = strtotime($abfrage_mietvertrag['ende_zeit']);
$abfrage_mietvertrag['ende_datum'] = date("d.m.Y",$abfrage_mietvertrag['ende_zeit']);
$abfrage_mietvertrag['ende_uhrzeit'] = date("H:i",$abfrage_mietvertrag['ende_zeit']);

//Sammelt die Daten zu der Vermietung.
$statement = $pdo->prepare("SELECT * FROM niederlassungen WHERE id = :id");
$statement->execute(array(':id' => $abfrage_mietvertrag['niederlassung']));
$abfrage_filiale = $statement->fetch();
//Wandelt den Array um,damit Umlaute und Sonderzeichen richtig dargestellt werden.
$abfrage_filiale = utf8_converter($abfrage_filiale);


//Fragt die Daten zu dem Mietgerät (ohne Zubehör) ab und speichert diese.
$statement = $pdo->prepare("SELECT * FROM modul_vermietung_objekte WHERE id = :id");
$statement->execute(array(':id' => $abfrage_mietvertrag['mietobjekt']));
$abfrage_mietgeraet = $statement->fetch();
//Wandelt den Array um,damit Umlaute und Sonderzeichen richtig dargestellt werden.
$abfrage_mietgeraet = utf8_converter($abfrage_mietgeraet);


 
 
$rechnungs_nummer = "743";
$rechnungs_datum = date("d.m.Y");
$lieferdatum = date("d.m.Y");
$pdfAuthor = "test";

$vermietung_logo = '<img src="logo-pdf.png" style="height: 70px;">';
$rechnungs_empfaenger = 'Max Musterman
Musterstraße 17
12345 Musterstadt';

//Auflistung eurer verschiedenen Posten im Format [Produktbezeichnung,Menge,Einzelpreis]
$rechnungs_posten = array(
 array("Produkt 1",1,42.50),array("Produkt 2",5,5.20),array("Produkt 3",3,10.00));
 
//Höhe eurer Umsatzsteuer. 0.19 für 19% Umsatzsteuer
$umsatzsteuer = 0.0; 
 
$pdfName = "Mietvertrag_".$id.".pdf";
 
 
//////////////////////////// Inhalt des PDFs als HTML-Code \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 
 
// Erstellung des HTML-Codes. Dieser HTML-Code definiert das Aussehen eures PDFs.
// tcpdf unterstützt recht viele HTML-Befehle. Die Nutzung von CSS ist allerdings
// stark eingeschränkt.

$html = '
<table cellpadding="0" cellspacing="0" style="width: 100%; ">
<tr>
<td>
<span style="font-size:6mm"><b>Mietvertrag ('.$abfrage_mietvertrag['id'].')</b></span>
</td>
<td style="text-align: right">'.$vermietung_logo.'</td>
</tr>
</table>
';

$html .= '
<table cellpadding="0" cellspacing="0" style="width: 100%; ">
<tr>
<td>
<b>Mieter</b><br>
'.$abfrage_mietvertrag['m_firma'].'<br>
'.$abfrage_mietvertrag['m_vorname'].' '.$abfrage_mietvertrag['m_name'].'<br>
'.$abfrage_mietvertrag['m_strasse'].'<br>
'.$abfrage_mietvertrag['m_plz'].' '.$abfrage_mietvertrag['m_ort'].'<br>
'.$abfrage_mietvertrag['m_telefon'].'<br>
'.$abfrage_mietvertrag['m_email'].'<br>
</td>
<td>
<b>Vermieter</b><br>
'.$abfrage_filiale['a_name'].'<br>
'.$abfrage_filiale['a_name_zusatz'].'<br>
'.$abfrage_filiale['a_strasse'].'<br>
'.$abfrage_filiale['a_plz'].' '.$abfrage_filiale['a_ort'].'<br>
</td>
</tr>
</table>
';

$html .= '
<table cellpadding="0" cellspacing="0" style="width: 100%; ">
<tr>
<td>Personalausweisnummer: '.$abfrage_mietvertrag['m_ausweisnummer'].'</td>
</tr>
</table>
';

//Details zum Mietzeitraum. Hier wird der Beginn und das Endes des Mietzeitraums ausgegeben.
$html .= '
<br><br>
<table cellpadding="0" cellspacing="0" style="width: 100%; ">
<tr>
<td style="font-weight: bold;">Mietzeitraum</td>
<td></td>
</tr>
<tr>
<td>Beginn: '.$abfrage_mietvertrag['start_datum'].'&nbsp;&nbsp;&nbsp;Uhrzeit: '.$abfrage_mietvertrag['start_uhrzeit'].'</td>
<td>Ende: '.$abfrage_mietvertrag['ende_datum'].'&nbsp;&nbsp;&nbsp;Uhrzeit: '.$abfrage_mietvertrag['ende_uhrzeit'].'</td>
</tr>
</table>
';
 
$html .= '
<br><br>
<table cellpadding="0" cellspacing="0" style="width: 100%; "><tr><td><b>Mietobjekt</b></td></tr></table>

<table cellpadding="0" cellspacing="0" style="width: 100%;" border="0">
<tr style="background-color: #cccccc; padding:5px;">
 <td style="padding:5px;"><b>Bezeichnung</b></td>
 <td><b>Artikelnummer</b></td>
 <td><b>Preis (pro Tag)</b></td>
 <td><b>Preis (Mietzeitraum)</b></td>
</tr>

<tr>
<td>'.$abfrage_mietgeraet['bezeichnung'].'</td>
<td>'.$abfrage_mietgeraet['artikelnummer'].'</td>
<td></td>
<td></td>
</tr>
';

//
if(strpos($abfrage_mietvertrag['zubehoer_standard'],",")!==false){$zubehoer = explode(",$abfrage_mietvertrag['zubehoer_standard']);}else{$zubehoer[0] = $abfrage_mietvertrag['zubehoer_standard'];}

//
foreach($zubehoer AS $row) {
//Abfrage der Daten aus der Datenbank. Prüft dabei ob das Zubehör zu dem Gerät gehört.
$statement = $pdo->prepare("SELECT * FROM modul_vermietung_objekte WHERE id = :id AND typ = :typ");
$statement->execute(array(':id' => $row,':typ' => $gruppe_zubehoer_standard));
$abfrage_zubehoer = $statement->fetch();

//Wandelt den Array um,damit Umlaute und Sonderzeichen richtig dargestellt werden.
$abfrage_zubehoer = utf8_converter($abfrage_zubehoer);

$html .= '<tr>
<td>'.$abfrage_zubehoer['bezeichnung'].'</td>
<td>'.$abfrage_zubehoer['artikelnummer'].'</td> 
<td></td>   
<td></td>
</tr>';
}
$html .= '</table>';


$html .='<table cellpadding="0" cellspacing="0" style="width: 100%;" border="0">';
//
if(strpos($abfrage_mietvertrag['zubehoer_optional'],$abfrage_mietvertrag['zubehoer_optional']);}else{$zubehoer[0] = $abfrage_mietvertrag['zubehoer_optional'];}

//
foreach($zubehoer AS $row) {
//Abfrage der Daten aus der Datenbank. Prüft dabei ob das Zubehör zu dem Gerät gehört.
$statement = $pdo->prepare("SELECT * FROM modul_vermietung_objekte WHERE id = :id AND typ = :typ");
$statement->execute(array(':id' => $row,':typ' => $gruppe_zubehoer_optional));
$abfrage_zubehoer = $statement->fetch();

//Wandelt den Array um,damit Umlaute und Sonderzeichen richtig dargestellt werden.
$abfrage_zubehoer = utf8_converter($abfrage_zubehoer);

$html .= '<tr>
<td>'.$abfrage_zubehoer['bezeichnung'].'</td>
<td>'.$abfrage_zubehoer['artikelnummer'].'</td> 
<td></td>   
<td></td>
</tr>';
}
$html .="</table>";

//////////////////////////// Here must be a Placeholder \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

//----------------------------
//Bereich: Reinigungspauschale
//----------------------------
$html .= '
<br>
<table cellpadding="0" cellspacing="0" style="width: 100%;" border="0">
<tr><td><b>Reinigungspauschale</b></td></tr>
<tr><td>Wird das gerät in ungereinigtem Zustand zurückgebracht,fällt eine Reinigungspauschale in Höhe von XX € an.</td></tr>
</table>
';

//--------------------
//Bereich: Anmerkungen
//--------------------
$html .= '
<br><br>
<table cellpadding="0" cellspacing="0" style="width: 100%;" border="0">
<tr><td><b>Anmerkungen</b></td></tr>
<tr><td>';
if(!empty($abfrage_mietvertrag['m_bemerkung'])){$html .= ''.$abfrage_mietvertrag['m_bemerkung'].'';}else{$html .= 'Keine';};
$html .= '</td></tr>
</table>
';

//---------------------------------
//Bereich: Einverständnisserklärung
//---------------------------------
$html .= '
<br><br>
<table cellpadding="0" cellspacing="0" style="width: 100%;" border="0">
<tr><td>Für diesen Mietvertrag gelten unsere allgemeinen Mietbedingungen (s. zweite Seite). Der Mieter erklärt sich mit diesen einverstanden.</td></tr>
</table>
';
$html .= '
<br><br>
<table cellpadding="0" cellspacing="0" style="width: 100%;" border="0">
<tr>
 <td>'.$abfrage_filiale['a_ort'].',den ________________</td>
 <td>__________________<br><span style="font-size:3mm">Unterschrift Mieter</span></td>
 <td>__________________<br><span style="font-size:3mm">Unterschrift Vermieter</span></td>
</tr>
</table>
';

//-----------------
//Bereich: Rückgabe
//-----------------
$html .= '
<hr>&nbsp;<br>
<table cellpadding="0" cellspacing="0"  style="width: 70%;" border="0">
<tr><td><b>Rückgabe</b></td></tr>
</table>

<table cellpadding="0" cellspacing="0"  style="width: 70%;" border="0">
<tr>
 <td>Zustand:<br>Kaution:</td>
 <td>[&nbsp;&nbsp;] in Ordnung<br>[&nbsp;&nbsp;] ausgezahlt</td>
 <td>[&nbsp;&nbsp;] beschädigt<br>[&nbsp;&nbsp;] verrechnet</td>
 <td>[&nbsp;&nbsp;] verschmutzt<br></td>
</tr>
<tr>
</table>
';

$html .= '
<br>&nbsp;<br>&nbsp;<br>
<table cellpadding="0" cellspacing="0" style="width: 100%;" border="0">
<tr>
 <td>'.$abfrage_filiale['a_ort'].',den ___________________</td>
 <td>_______________________<br><span style="font-size:3mm">Unterschrift Mieter</span></td>
 <td>_______________________<br><span style="font-size:3mm">Unterschrift Vermieter</span></td>
</tr>
</table>
';
 
$html .= nl2br($rechnungs_footer);
 
 
 
//////////////////////////// Erzeugung eures PDF Dokuments \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 
// TCPDF Library laden
require_once('../inc/tcpdf/tcpdf.PHP');
 
// Erstellung des PDF Dokuments
$pdf = new TCPDF(PDF_PAGE_ORIENTATION,PDF_UNIT,PDF_PAGE_FORMAT,true,'UTF-8',false);
 
// Dokumenteninformationen
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor($pdfAuthor);
$pdf->SetTitle('Rechnung '.$rechnungs_nummer);
$pdf->SetSubject('Rechnung '.$rechnungs_nummer);
 
 
// Header und Footer informationen
//$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN,'',PDF_FONT_SIZE_MAIN));
//$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA,PDF_FONT_SIZE_DATA));
 
// remove default header/footer
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
 
 
// Auswahl des Font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// Auswahl der MArgins
//$pdf->SetMargins(PDF_MARGIN_LEFT,PDF_MARGIN_TOP,PDF_MARGIN_RIGHT);
$pdf->SetMargins(10,20,10,true);
//$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
//$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
 
//$pdf->SetY(0,true);

// Automatisches Autobreak der Seiten
$pdf->SetAutopageBreak(TRUE,PDF_MARGIN_BottOM);
 
// Image Scale 
$pdf->setimageScale(PDF_IMAGE_SCALE_RATIO);
 
// Schriftart
//$pdf->SetFont('dejavusans',10); <----ALT!
$pdf->SetFont("helvetica","",10);

// Neue Seite
$pdf->AddPage();
 
// Fügt den HTML Code in das PDF Dokument ein
$pdf->writeHTML($html,false,'');
 
//Ausgabe der PDF
 
//Variante 1: PDF direkt an den Benutzer senden:
$pdf->Output($pdfName,'I');
 
//Variante 2: PDF im Verzeichnis abspeichern:
//$pdf->Output(dirname(__FILE__).'/'.$pdfName,'F');
//echo 'PDF herunterladen: <a href="'.$pdfName.'">'.$pdfName.'</a>';
?>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。