5 Stimmen

PHPExcel: Wie kann ich ein Bild in die Kopfzeile der ersten Seite einfügen und es so vergrößern, dass es zum Inhalt passt?

Ich habe eine mit PHPExcel erstellte Excel-Datei, die eine Kopfzeile mit einem linksbündigen Logo und einem rechtsbündigen Datum und Benutzertext enthält. Für die erste Seite möchte ich eine ähnliche Kopfzeile (gleiches Logo und gleiches Datum und Benutzertext), aber mit einigen zusätzlichen Informationen (Titel und Parameter der Datei, die ein paar Zeilen später zentriert werden).

Das ist mein bisheriger Stand der Dinge:

<?php

    $sheet = $this->_spreadsheet->getActiveSheet(); //_spreadsheet is an instance of PHPExcel

    $logo = new PHPExcel_Worksheet_HeaderFooterDrawing();
    $logo->setName('Logo');
    $logo->setPath(DOCUMENT_ROOT . '/public/logo.jpg'); //Path is OK & tested under PHP
    $logo->setHeight(38); //If image is larger/smaller than that, image will be proportionally resized
    $sheet->getHeaderFooter()->addImage($logo, PHPExcel_Worksheet_HeaderFooter::IMAGE_HEADER_LEFT);

    $sheet->getHeaderFooter()->setOddHeader('&L&G&RExport date: ' . date('Y-m-d H:i:s') . "\n" . 'User: ' . $user->name);

    if ($grid->getTitle() != '') {
        $sheet->getHeaderFooter()->setDifferentFirst(true);

        $sheet->getHeaderFooter()->addImage($logo, PHPExcel_Worksheet_HeaderFooter::IMAGE_HEADER_LEFT);
        $sheet->getHeaderFooter()->setFirstHeader('&L&G&C&"-,Bold"' . "\n\n\n" . $grid->getTitle() . "\n" . $grid->getParameters() . '&RExport date: ' . date('Y-m-d H:i:s') . "\n" . 'User: ' . $user->name);
    }

?>

Für die "normale" Kopfzeile sind das Logo und der Text vorhanden, also ist alles in Ordnung. Für die Kopfzeile der ersten Seite habe ich 2 Probleme:

  1. Das Logo wird auf der Kopfzeile der ersten Seite nicht angezeigt (der Text ist jedoch in Ordnung).
  2. Da auf den zentrierten Titel ein Text folgt (dynamisch geladen mit getParameters ) Ich möchte, dass sich die Kopfzeile der ersten Seite an ihren Inhalt anpasst.

Wie kann ich das mit PHPExcel machen?

2voto

Farray Punkte 7994

Ich habe keine Antwort darauf, warum das Logo nicht in der Kopfzeile der ersten Seite angezeigt wird, aber um die Höhe an den Inhalt anzupassen, müssen Sie die Seitenränder manuell ändern.

Ich bin mir nicht sicher, wie man das am besten macht, ob man die Zeilenumbrüche zählt oder was. Aber sobald Sie wissen, wie viele Zeilen Sie haben, könnten Sie etwas tun wie:

$headerHeight = ( $imageHeight / 72 ) + ( $headerLineCount * $lineHeight );
$objPHPExcel->getActiveSheet()->getPageMargins()->setHeader( $margin );
$objPHPExcel->getActiveSheet()->getPageMargins()->setTop( $margin + $headerHeight );

** Die Klausel "$imageHeight / 72" ist nur eine Vermutung, wie die Bildschirmhöhe Ihres Bildes in Zoll umgerechnet werden kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X