Создание многоколоночных и многостраничных PDF-файлов с помощью FPDF

Я пытаюсь использовать модуль FPDF с Laravel (crabbly / fpdf-laravel)

Необходимо создать одностраничные документы с 3 столбцами. По сути, у меня есть список пар TERM: DESCRIPTION, которые мне нужно выводить одну за другой. Я борюсь с общей логикой, и я даже не уверен, правильно ли я делаю это, и мне интересно, есть ли лучшее решение для этого (кто знаком с FPDF)

  1. Получите список пар термин: описание ($ глоссарий)
  2. Разделите каждое описание на строки длиной менее 75 символов.
  3. Подсчитайте, сколько строк уже в столбце
  4. Добавить строки в coumn
  5. Переключить страницу / столбец, когда количество строк превышает определенную длину в 51 строку в столбце

Это код, который я придумал:

public function getCreatePDF($flascard_id) {
    $flashcard = Flashcard::where('user_id', auth()->id())->findOrFail($flascard_id);

    $glossary = Glossary::with('flashcarditem')
            ->whereHas('flashcarditem', function ($query) use ($flascard_id) {
                $query->where('flashcard_id', '=', $flascard_id);
            })
            ->get();

    $pdf = app('FPDF');
    $pdf->col = 0;
    $pdf->AcceptPageBreak(false);
    //My Loop Controls
    $column = 0; //Control which column to add data
    $columnLenght = 0; //monitor if we need to change the column
    $maxLinesPerColumn = 51;
    $wrapCharacters = 75; //do not exceed this char qty per line
    $collectedDescription = ""; //stack Description here

    $pdf->AddPage(['L', 'Letter']);
    $pdf->SetFont('Arial', 'B');
    $pdf->SetFontSize(18);
    $mid_x = 135; // the middle of the "PDF screen", fixed by now.        
    $pdf->Text($mid_x - ($pdf->GetStringWidth('TITLE') / 2), 102, 'TITLE');
    $pdf->AddPage(['L', 'Letter']);
    $pdf->SetFontSize(7);

    foreach ($glossary as $key => $g) {
        $chunks = explode("\n", wordwrap(strip_tags($g->description), $wrapCharacters));
        $actionCollect = 1;
        $collectedDescription = "";


        for ($i = 0; $i < count($chunks); $i++) {
            if ($columnLenght > $maxLinesPerColumn && $column == 2) {
                $column = 0;
                $columnLenght = 1;

                $pdf->AddPage(['L', 'Letter']);
                $pdf->Footer("d");
                $pdf->col = $column;
                $x = 10 + $column * 95;
                $pdf->SetLeftMargin($x);
                $pdf->SetX($x);
                $pdf->SetY(8);
                $actionCollect = 0;
            } else if ($columnLenght > $maxLinesPerColumn && $column < 2) {
                $columnLenght = 1;
                $column++;
                $pdf->col = $column;
                $x = 10 + $column * 95;
                $pdf->SetLeftMargin($x);
                $pdf->SetX($x);
                $pdf->SetY(8);
                $actionCollect = 0;
            } else {
                $columnLenght ++;
                $actionCollect = 1;
            }

            if ($i == 0) {
                $columnLenght ++;
                $pdf->SetFont('Arial', 'B');
                $term = html_entity_decode($g->term);
                $pdf->MultiCell(90, 3, $term, 'R');
                $pdf->Ln(0);
            }

            $collectedDescription.=strip_tags($chunks[$i]);

            if (count($chunks) - 1 && $i == 0) {

                $pdf->SetFont('Arial');
                $pdf->MultiCell(90, 3, $collectedDescription, 'R');
                $actionCollect = 0;
                $collectedDescription = "";
            } else {
                $pdf->SetFont('Arial');
                $pdf->MultiCell(90, 3, strip_tags($chunks[$i]), 'R');
                $actionCollect = 0;
                $collectedDescription = "";
            }
        }

        $pdf->Ln(1);
    }
}

Мое желаемое состояние

Создание многоколоночных и многостраничных PDF-файлов с помощью FPDF

И что производит ваш код, пожалуйста?

RiggsFolly 02.09.2018 16:59

Мой код вроде работает (скриншот); но он может не всегда переполняться правильно, если имеется слишком много терминов с коротким описанием (это разбивает страницу) или слишком мало терминов с длинным описанием (столбцы заполняются не полностью). Я надеялся, что есть встроенная функциональность FPDF, которая поможет мне упростить мои усилия.

Andrew 02.09.2018 17:25
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
448
0

Другие вопросы по теме