Jump to content
August

generating PDF-Documents with images

Recommended Posts

Hi again, after trying pages2PDF, RockPDF and mpdf I'm not sure which of them I should use. Of course, there is also wirePDF.

I merged mpdf with rockPDF, add a footer and a page in Landscape and that works, like in the code-snippet below but be am I on the right way?

After that I tried a couple of times rendering an image. Nothing happend, the same with Pages2PDF too. I also copied an Image-URL within processwire and tried further getting an Image within the PDF-Document, but it still display only the red marked placeholder.

I simply would like create an PDF on click from some Pages including the Images.

Are there special requirements on Debian 10 with Apache and php 7.3 using Processwire 3.0.123.?
Is there a guide that I didn't found?
Is somebody out there who has a similar issue solved and would you be so kind to explain?

 

        $pdf = $modules->get('RockPdf');
        $mpdf = $pdf->mpdf;
#        $mpdf->showImageErrors = true;
        $pdf->set('SetHeader', 'header text');
        $mpdf->AddPage('L');
#        $mpdf->Image(urlencode('site/assets/files/1845/image-2.275x200.jpg'), 0, 0, 210, 297, 'jpg', '', true, false);
        $pdf->set('SetFooter', '
<table width="100%">
    <tr>
        <td width="33%">{DATE j.m.Y}</td>
        <td width="33%" align="center">{PAGENO}/{nbpg}</td>
        <td width="33%" style="text-align: right;">whatever</td>
    </tr>
</table>');
        $pdf->show(); // generate pdf

 

Share this post


Link to post
Share on other sites
$img = $pages->get(1)->images->first(); // adjust to your setup
$pdf = $modules->get('RockPdf');
$mpdf = $pdf->mpdf;
$mpdf->WriteHTML('Hello World ' . date('H:i:s'));
$mpdf->WriteHTML('<div>Showing image ' . $img->url . '</div>');
$mpdf->WriteHTML('<img src="' . $img->url . '">');
$pdf->save();

Does this work?

  • Like 1

Share this post


Link to post
Share on other sites

image.png.bbf7541df3ab82cfd0efb4d1414639e1.png

Hi bernhard,

unfortunately, no. Thank you.
The reason for this could be the URL path, the image is only accessible via the complete path (localhost).
This adress in the browser does not work:
"file:///www/home/in..."

 

 

Share this post


Link to post
Share on other sites
13 hours ago, August said:

After that I tried a couple of times rendering an image. Nothing happend, the same with Pages2PDF too. I also copied an Image-URL within processwire and tried further getting an Image within the PDF-Document, but it still display only the red marked placeholder.

I think you need to pass the full (absolute) filename to the mpdf->image() method, not a relative one and not(!) a URL.

$filename = "/absolute/filepath/to/the/image.jpg";

// or when using PWs pageimage
$filename = $image->filename;

// do a test in your script for debugging:
if(!is_readable($filename)) die('Missing file');

$mpdf->AddPage('L');
$mpdf->Image($filename, 0, 0, 210, 297, 'jpg', ...

 

  • Like 2

Share this post


Link to post
Share on other sites
4 hours ago, Jens Martsch - dotnetic said:

You need to use the disk path instead of the URL

I'm using ->url in several spots in my projects and it works. Maybe he messed up something else or maybe our setups are just different. The screenshot looks like he is already using a full disc path /var/www/... and not an url site/assets/...

@August Make sure the file exists on your server and then just try different paths/urls and see which one works for you. Start doing it manually without using pw variables and once you have one working example expand on that one.

  • Like 1

Share this post


Link to post
Share on other sites

Well, yeah, I am using path because of different reasons. Because my images are not available via URL (or only if logged in) as I use pagefileSecure in my config. So the process mPDF has no access to the images, and therefore I use the path.

  • Like 1

Share this post


Link to post
Share on other sites

Hey, lets pull it down to this:

serving the full filesystempath should work everytime, if the file is_readable(),

URL „may“ work most of the time, as the pdf-lib will expand it to the full filesystempath. 

In both scenarios finally the full filesystempath is needed to read, parse, import the imagefile into the pdf object. 

😉

  • Like 1

Share this post


Link to post
Share on other sites
2 hours ago, Jens Martsch - dotnetic said:

Well, yeah, I am using path because of different reasons. Because my images are not available via URL (or only if logged in) as I use pagefileSecure in my config. So the process mPDF has no access to the images, and therefore I use the path.

Nice to know, thx. I haven't been working with pdf for some time but I remember I've always had issues with the correct file paths... I think paths did somehow not work, but not sure. I think they didn't work in older versions of mpdf. There you had to define relative paths (not public urls) to a root path that was set in the module's config. Maybe things have changed to the good 🙂 

  • Like 1

Share this post


Link to post
Share on other sites

Hey Guys, thanks a lot for your replies. Back after work, I have just checked your answers and I'm closely suprised. It is the indication of the absolute path that the image outputs immediately. Bernhards snippet - an excerpt, I took again. Then I only changed one line as in the code-snippet below, that solved the problem. .

$mpdf->WriteHTML('<div>Showing image ' . $img->filename . '</div>');

image.png.916905d03e02045363fab265de0f4fbe.png As in the Screenshot beside, the seond Path(last line) is the right one.

Thank you bernhard, horst and jens - your all commitment is just great!

  • Like 4

Share this post


Link to post
Share on other sites

Hey Guys, I have one more question, in the hope of solving PDF creation problems.

How would you create a download/store -link for a PDF-File from Page using RockPDF/mpdf library on action (may like pages2pdf) ?

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By August
      Has anyone already successfully integrated mpdf QrCode Library? I am currently testing bernahrds solution RockPDF including mpdf. I think it would be optimal, but I have problems with some basic things. In this context, what does a proper implementation look like?

      Many thanks in advance
    • By Martin Wuehr
      Hello everybody,
      I'm hosting a Processwire Installation for a client. It runs on Processwire 2.5.3. Over the years everything was fine but now there is an issue with one Image-Field in one Template. Trying to upload an Image the Error "Not enough Memory to load/resize" occure. Other Image-Fields in all other Templates working without any issue. The Images I Tried to upload are very small (600px * 420px). The Images blongs to a News feed, and worked before.
      I read about the problem in the forum but I can't get this solved. I have no access to the php.ini to modify the memory_limit.
      I tried to update the Processwire Verion but failed. (Tried 2.7 /2.8 / 3.2) Got Always Internal Server Error and in the error Log: 
      Compile Error:     Cannot redeclare PageEditFieldPermissionConfig()….
      Has anybody any idea how I can get this solved?
      Thank you so much
      Martin
       
    • By Hardoman
      Hello community,
      we have a website running version 3.0.118. The owner would like to have a watermark merged to the images, that are being uploaded in the CKEditor as a requirement.
      Image upload besides the CKEditor within galleries and single images works as a charm already. We also use croppable image 3 there. (PIM2)
      To realize this requirement, I thought of using a hook in the admin area. So, I read a lot in our forums and tested this by adding a hook into the ready.php file.
      $this->addHookAfter('InputfieldFile::fileAdded',function(HookEvent$event){ wire('log')->save('test','Image upload works'); ... The log entry is being created correctly. But when I try to use the pim/watermark-function like in a template, he cannot find the watermark-image anymore. Furthermore, when I try to get the page-id, it does not seem to be accessible, because the application does not seem to know how to reference it, or I dont know the right way to do so…
      So my questions are:
       
      Is this the right attempt at all or will there be another, better workaround? It seems, I cannot access the page object (of the content page) within this scope or file but I would need it to save the processed image inside the right files/id folder Would it be better to place the hook into the admin-template? (or admin.php)
        Thanks for any hints in advance. 🙂
    • By toni
      Hi,
      I'm facing a strang problem. In my template I'm setting different sizes for srcset:
      $view->set('images', $page->picture); <img srcset="{$img->size(780,0)->url} 780w, {$img->size(1024,0)->url} 1024w, {$img->size(1440,0)->url} 1440w" src="{$img->url}" class="col__image"> All fine. However, the moment I reorder images in backend the different generated image sizes are broken.
      Does somebody has an idea what could cause it? 
      Version: ProcessWire 3.0.123 
       
      Thanks!
      Toni
    • By nabo
      Hello
      I'm working on a project that use PW as backend CMS. PW serves formatted data of each page but the engine simply generates json from pagearray.
      I would like to set one or more variations on images, so I think it would be useful if there were a field to set possible variations... even with overrides!
×
×
  • Create New...