Skip to content

GitLab

  • Menu
Projects Groups Snippets
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • T travelseller-catalog
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • public
  • travelseller-catalog
  • Milestones
  • PDF-Rendering of Product-Detail-Pages

Open
Milestone started on Jul 25, 2023

PDF-Rendering of Product-Detail-Pages

PDF-Rendering of Product-Detail-Pages

we need a PDF-Version for Product-Detail pages. A Product-Detail URL looks like desireisen.de/reise/2685755-ostseeurlaub-vom-feinsten---sant-royale-ruegen-resort. In order to render a PDF, a new Query-Param have to be implementened.

e.g.: desireisen.de/reise/2685755-ostseeurlaub-vom-feinsten---sant-royale-ruegen-resort?pdf=true

The query-param should be configureable in Catalog Reader-Settings. If the pdf-query-param is present, the ReaderWidget must render a PDF and return the resulting PDF-File as File-Download.

A common Reader-Template is not suitable for PDF-Printing (JavaScript and mobile-constraints), therefore we need a Reader-Template for the PDF-Version. Besides the existing reader_template, we need a "reader_pdf_template"-Selection.

Implementation:

  1. PDF-Render engine

add chrome-php/chrome to tscatalog

  1. migrate 2 new Database-Columns (text and varchar): "reader_pdf_template" (the Template for the PDF-Version) and "pdf_query_param" (whether the Reader-Widget should return a PDF-File instead of html)
  • create a new blank Migration: cd wp-content/plugins/travelsellercatalog && yii migrate/create 'add_Pdf_Rendering_Cols'
  • look here for examples
  • execute the migration: yii migrate
  • undo migration: yii migrate down 1
  1. in ReaderWidget, check query-params for existence of $pdf_query_param, if so:
  • render reader_pdf_template as html and pass it to chrome
  • stream PDF as Download to Browser (e.g.: return Yii::$app->response->sendFile($pdfFile,'myfile.pdf')->send())

A basic Implementation for a "renderPDF()" could be:

<?php
// app/widgets/shortcode/RenderReader.php

declare(strict_types=1);

namespace ts\catalog\widgets\shortcode;

use HeadlessChromium\BrowserFactory;
use SplFileInfo;
// ...


private function renderPDF(): SplFileInfo
{
	$browserFactory = new BrowserFactory('/usr/bin/chromium-browser');
   	// starts headless chrome
    $browser = $browserFactory->createBrowser();

    $outputFileName = tempnam('/tmp', 'tscatalog_pdf_');

    try {
        // creates a new page and navigate to an URL
        $page = $browser->createPage();
        $page->setHtml($html);
        $pdf = $page->pdf($options);
        file_put_contents($outputFileName, base64_decode($pdf->getBase64()));
    } finally {
        // bye
        $browser->close();
    }
    return new SplFileInfo($outputFilename);
}
Assign some issues to this milestone.
  • Issues 0
  • Merge requests 0
  • Participants 0
  • Labels 0
0% complete
0%
Start date
Jul 25, 2023
From
Jul 25 2023
Due date
No due date (905 days elapsed)
0
Issues 0 New issue
Open: 0 Closed: 0
0
Merge requests 0
Open: 0 Closed: 0 Merged: 0
0
Releases
None
Reference: oss/travelseller-catalog%"PDF-Rendering of Product-Detail-Pages"