PHPExcel: Как вставить изображение в заголовок первой страницы и увеличить его, чтобы оно соответствовало содержанию? - PullRequest
5 голосов
/ 07 июня 2011

У меня есть файл Excel, созданный с помощью PHPExcel, в котором есть заголовок с выровненным по левому краю логотипом и выровненным по правому краю датой и текстом пользователя.Для первой страницы я хочу подобный заголовок (тот же логотип и та же дата и текст пользователя), но с некоторой дополнительной информацией (заголовок и параметры файла центрируются парами строк позже).

Это то, что я 'м до сих пор:

<?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);
    }

?>

Для "обычного" заголовка, логотип и текст все там, так что все в порядке.Для заголовка первой страницы у меня есть 2 проблемы:

  1. Логотип не отображается в заголовке первой страницы (но текст в порядке).
  2. Поскольку заголовок по центру будетзатем текст (динамически загружается с помощью getParameters ). Я хочу, чтобы заголовок первой страницы растягивался до его содержимого.

Как это сделать с помощью PHPExcel?

1 Ответ

2 голосов
/ 14 февраля 2012

У меня нет ответа на вопрос, почему логотип не отображается в заголовке первой страницы, но чтобы увеличить высоту, чтобы она соответствовала содержанию, которое вам нужно, чтобы вручную изменить поля страницы.

I 'Я не уверен, лучший способ сделать это, будь то подсчет символов новой строки или что.Но как только вы узнаете, сколько у вас строк, вы можете сделать что-то вроде:

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

** Предложение «$ imageHeight / 72» - это всего лишь предположение о том, как преобразовать высоту экрана вашего изображения.в дюймах

...