Skip to content

Вывод (HasOutput)

Сохранение в файл

Самый простой способ создать PDF — записать его непосредственно на диск:

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'Hello, World!')
    ->save('/path/to/output.pdf');

save(string $path) записывает отрендеренный PDF по указанному пути и возвращает static.

Вывод с контролем назначения

Для более тонкого контроля доставки используйте output() с enum-ом OutputDestination:

php
use Yeeefang\TcpdfNext\Core\Document;
use Yeeefang\TcpdfNext\Contracts\OutputDestination;

$pdf = Document::create()
    ->addPage()
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'Hello, World!');

// Отображение в браузере (инлайн)
$pdf->output('document.pdf', OutputDestination::Inline);

// Принудительная загрузка
$pdf->output('document.pdf', OutputDestination::Download);

// Сохранение в файл
$pdf->output('document.pdf', OutputDestination::File);

// Возврат как строка
$pdf->output('document.pdf', OutputDestination::String);

Enum OutputDestination

ЗначениеПоведениеHTTP-заголовки
InlineОтображение в браузереContent-Type: application/pdf, Content-Disposition: inline
DownloadДиалог принудительной загрузкиContent-Type: application/pdf, Content-Disposition: attachment
FileСохранение в файловую систему сервераНет
StringВозврат сырых PDF-байтНет

При использовании Inline или Download TCPDF-Next автоматически отправляет соответствующие заголовки Content-Type и Content-Disposition перед выводом PDF-контента.

Получение PDF как строки

Используйте toString() для получения сырых PDF-байт без записи на диск или отправки заголовков. Это полезно для email-вложений, API хранилищ или дальнейшей обработки:

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'Monthly Report');

$content = $pdf->toString();

// Запись на диск вручную
file_put_contents('/path/to/output.pdf', $content);

// Или использование для email-вложений
Mail::send([], [], function ($message) use ($content) {
    $message->attachData($content, 'report.pdf', ['mime' => 'application/pdf']);
});

Потоковый вывод для больших PDF

Для документов с тысячами страниц хранение всего PDF в памяти может быть затратным. PdfWriterChunked записывает PDF-контент инкрементально в поток:

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create();
$pdf->addPage()->setFont('Helvetica', '', 10);

for ($i = 0; $i < 5000; $i++) {
    $pdf->cell(0, 5, "Row {$i}: data content here", newLine: true);
}

// Потоковая запись происходит внутренне — save запускает порционную запись
$pdf->save('large-report.pdf');

Порционный писатель сбрасывает данные страниц по мере их финализации, избегая необходимости буферизировать весь документ перед записью. Это прозрачно для вызывающего кода — тот же API save() и output() работает независимо от размера документа.

Линеаризация (быстрый веб-просмотр)

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

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->setLinearization(true)
    ->addPage()
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'Optimized for web viewing')
    ->save('linearized.pdf');

Linearizer записывает потоки подсказок, которые сообщают PDF-просмотрщикам, как прогрессивно рендерить документ. Включайте это, когда PDF будут обслуживаться по HTTP и просматриваться в браузере.

Распространяется по лицензии LGPL-3.0-or-later.