Ошибки Zend_pdf при открытии в браузере

У меня есть интересная проблема. Я пробовал с Zend_Pdf. Раньше работал вполне нормально. Но вот уже 2 дня не работает. После запуска моего действия я открываю или сохраняю вопрос браузера. Если я выбираю открыть, я получаю сообщение об ошибке «невозможно открыть, потому что файл поврежден:

Я удалил все вещи из своего действия контроллера и попытался использовать простую версию, но получаю ту же ошибку. Вот мое действие контроллера:

public function indexAction()
{
    $pdf = new Zend_Pdf();
    $pdf->properties['Title']='testtitle';
    //echo $pdf->properties['Title'] . "\n";
    $pdf->pages = array_reverse($pdf->pages);
    $style = new Zend_Pdf_Style();
    $style->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA), 36);
    $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
    $pdf->pages[1] = ($page = $pdf->newPage('A4'));
    $page=$pdf->pages[1];
    $page->setFont($font, 18);
    $page->drawText("testcaption", 100, 100);
    header("Content-Type: application/pdf");
    header("Content-Disposition: inline; filename=test.pdf");
    //header("Cache-Control: no-cache, must-revalidate");
    echo $pdf->render();
    // $fileName="./pdfs/test.pdf"; 
    // $pdf->save($fileName);   
}

Я удалил все, потому что думал, что мой код в конечном итоге не полностью действителен, но теперь у меня остался только тест. Я хочу отметить, что было обновление Firefox, поэтому я попытался с IE, но та же проблема. Может быть, есть принципиальная ошибка? Еще одно замечание, в данном случае я работаю только с экшеном контроллера, никакого вьюскрипта у меня нет. Нужен ли он мне, потому что контроллер создает PDF-файл? Если да, то что должно быть внутри? Кто-нибудь знает ответ или обходной путь?

новое явление: я изменил свой код (последние операторы) на:

$fileName="./pdfs/test.pdf";    
$pdf->save($fileName);  
echo $pdf->render();

Я получаю такое же сообщение в своем браузере. Теперь у меня есть копия на моем веб-сервере, если я открою этот файл двойным щелчком, он откроется без ошибок.

Я попытался выбрать «сохранить в» в своем браузере и выбрал какую-то папку за пределами моего веб-сервера. Этот файл я не могу открыть, теперь я совсем запутался.

Кто-нибудь может помочь?

Обновлять:

Я попробовал некоторые другие возможности. Очень интересно, что у меня есть 2 разных pdf-документа. Тот, который я сохраняю (методом сохранения) на моем сервере, открывается нормально, все в порядке. Если я форсирую для другого загрузку в своем браузере и открою документ из моей папки загрузки.

Я получаю документ, в котором есть мой html-макет, а также дата в формате pdf. На самом деле все начинается так:

<base href="/mosaik/public/" />

после этого идут мои области div, а в конце идут мои области pdf.

Это тот же эффект, но, пытаясь изменить свой код, я создал класс, который предоставляет pdf, и у меня есть представление, в котором я устанавливаю свой заголовок:

<?php
$response = Zend_Controller_Front::getInstance()->getResponse();
//$response = new Zend_Controller_Response_Http();
 $response->setHeader('Content-Disposition', 'attachment; fileName=schwesternliste.pdf');
$response->setHeader('Content-type', 'application/pdf');

 $pdf=new Application_Model_Pdf_Schwestern();
 $pdf->load();
 $pdf->fillData();
echo $pdf->render();

?>

Это должно быть что-то с заголовками, кто-нибудь знает решение?


person pia-sophie    schedule 13.08.2015    source источник


Ответы (1)


В связи с тем, что этот портал находится в сети с ок. 5 месяцев и раньше работало очень хорошо, я попробовал другой компьютер, который у меня есть и на котором я не использую автоматические обновления, и там он все еще работает. Интересный! Я немного попробовал, и, как я писал выше, у меня нет проблем с открытием сохраненного PDF-файла, у меня есть эти ошибки только в том случае, если я визуализирую его в своем браузере. Я сравнил оба файла с eclipse и понял, что тот, который вызывает ошибки, имеет в заголовке мою дырявую html-разметку, другой - чистый pdf.

Поскольку у меня есть одно и то же действие для 3 разных модулей, и мне нужно, чтобы оно работало, я придумал обходной путь, который, безусловно, не является лучшим решением, но у меня не было другой идеи.

Теперь действие контроллера сохраняет PDF-файл на сервере, и мое представление помещает в него некоторые заголовки и снова открывает его. Это прекрасно работает. Вот для всех, у кого такой же эффект, мой сценарий просмотра:

<?php
require_once 'Zend/Pdf.php';

header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename=schwesternliste.pdf');
header('Cache-Control: private, max-age=0, must-revalidate');
header('Pragma: public');
ini_set('zlib.output_compression','0');
echo file_get_contents("./pdfs/schwesternliste.pdf");

?>
<html>
<body>
person pia-sophie    schedule 01.09.2015