Wanze

Module
Pages2Pdf

231 posts in this topic

Hi Wanze,

Sorry for the late reply but I have since uninstalled the module and have used a plain 'file' field to solve my problem.

Thank you,

Matt

Share this post


Link to post
Share on other sites

Whoops, Ultra-PEBDAC.

(I was asking about the font issue that adrian kindly resolved below, but my real issue was that I was uploading files to the wrong server - we are in the midst of switching hosts!)

Edited by creativejay
It's Monday.

Share this post


Link to post
Share on other sites
3 minutes ago, adrian said:

I just installed this on a site a couple of days ago and got the same error. I took the lazy approach of just adding all the fonts from the mpdf github repo:
https://github.com/mpdf/mpdf/tree/development/ttfonts

Thanks adrian! I've saved this folder for future installations to make it faster. I was certain it was a cache issue but my real issue was webhost related. I fixed it and it works like the charm I knew it would!

(I'm sure I'll be back as I customize these files, but hopefully I'll think through all my possible user-errors first!)

Share this post


Link to post
Share on other sites

Thanks for the great plugin!

I'm trying to put a piechart in a PDF page. I understand using Javascript is not supported in PDF but with Google Charts it's possible to create an image for print/PDF. So i thought maybe in my template i can first run the Javascript to render an image and use that image in de PDF. This unfortunately doen't work. Is there a way to run some javascript to render an element before the PDF is created?

Share this post


Link to post
Share on other sites

do you have some user input or are you creating the pdf completely on the server side (like cronjob)? if you have some user input you could create an image of the chart first (eg on button click) and then post this image to your php script and integrate it in your pdf

Share this post


Link to post
Share on other sites
1 hour ago, Timothy de Vos said:

Thanks for the great plugin!

I'm trying to put a piechart in a PDF page. I understand using Javascript is not supported in PDF but with Google Charts it's possible to create an image for print/PDF. So i thought maybe in my template i can first run the Javascript to render an image and use that image in de PDF. This unfortunately doen't work. Is there a way to run some javascript to render an element before the PDF is created?

You would need to store the piechart as image somewhere and use a regular HTML <img> tag to display it in the template of your PDF. Is it possible for Google Charts to store images on the file system? Though a server side app generating the piechart would probably be simpler in this case.

Share this post


Link to post
Share on other sites
18 hours ago, bernhard said:

do you have some user input or are you creating the pdf completely on the server side (like cronjob)? if you have some user input you could create an image of the chart first (eg on button click) and then post this image to your php script and integrate it in your pdf

I am able to create the image on a button click but how would I post it to the PDF template. I tried using $.post but when i try to var_dump the $POST in the PDF it returns an empty array.

Share this post


Link to post
Share on other sites
5 hours ago, Timothy de Vos said:

I am able to create the image on a button click but how would I post it to the PDF template. I tried using $.post but when i try to var_dump the $POST in the PDF it returns an empty array.

As mentioned in my post, as far as I know, you need to render your image in a regular <img> tag inside the PDF template. This means that you'd need to save the image before on the disk or use a base64 encoded string, though I don't know if the latter works in mpdf.

Share this post


Link to post
Share on other sites

Hi @Wanze

I am using the WirePDF module which works great! The only Problem I have is setting the path to a css fille inside the module settings. Somehow the css file didn't get load no matter which path I type in inside the "CSS File" textfield. 

At the moment my code to generate the pdfs looks like this (working):

$pdf = $modules->get('WirePDF');

if($urlpage->template->name == "jobs"){
	$template = wireRenderFile("partials/pdf_layouts/pdf_jobs_template.php", array(
								"urlpage" => $urlpage
							));
}else{
	$template = wireRenderFile("partials/pdf_layouts/pdf_doctors_template.php", array(
								"urlpage" => $urlpage
							));
}

$pdf->markupMain = $template;
$pdf->setTitle($urlpage->title);
$pdf->download($urlpage->title.".pdf", "D");

 

Share this post


Link to post
Share on other sites

ok i could make it to work when I remove this from the header of my css file:

@charset "UTF-8";
/* CSS Document */

And also changed the code to this:

$pdf = $modules->get('WirePDF');
$pdf->setTitle($urlpage->title);
$stylesheet = file_get_contents($config->paths->templates. "styles/pdf_styles.css"); // external css
$pdf->WriteHTML($stylesheet,1);
$pdf->WriteHTML($template,2);
$pdf->download($urlpage->title.".pdf", "D");

 

Share this post


Link to post
Share on other sites
On 6-12-2016 at 4:45 PM, Wanze said:

As mentioned in my post, as far as I know, you need to render your image in a regular <img> tag inside the PDF template. This means that you'd need to save the image before on the disk or use a base64 encoded string, though I don't know if the latter works in mpdf.

I got it to work! The problem was that I was using $.post in jQuery to sent the data to de PDF template. Since $.post doesn't actually goes to the page i added an extra event to load the page. But by doing this i emptied the $POST session... stupid. 

What i'm doing now is first creating a form and setting the img as value and then submitting the form.

        $("body").append($("<form></form>").attr({ "action": PDFurl, "method": "post", "id" : "postForm" })
            .append($('<input>').attr({ "type": "hidden", "name": "img", "value": imgChart.prop("outerHTML") }))
        ).find("#postForm").submit();

 

Share this post


Link to post
Share on other sites

I get this error when trying to output images on the pdf template:

mPDF error: IMAGE Error (URL/TO/IMAGE): Error parsing temporary file image object created with GD library to parse PNG image

I am only using your WirePDF Wrapper.

Greetings Nukro

Share this post


Link to post
Share on other sites

Hi Wanze,

Thank for your great mosule. I really love it. It works perfectly with English content. But when I write in Thai language, it display question sign like this ???????????? ????? ????.

I tried to follow this forum for a while and uploaded garuda.ttf font for thai language but it still not working.

Where did I miss, how to fix it , please help.

Share this post


Link to post
Share on other sites

A little help if someone has the same problem: images on develpment site were included, but not on live site.

There is no error or any hint, but only a red "x" as placeholder for the image. Try to convert to base64 string included the image to the PDF. For me it even reduced the filesize :D

$imagedata = file_get_contents( "../assets/img/logo-pdf-invoice.png"); // alternatively specify an URL, if PHP settings allow
$base64Img = "data:image/png;base64," . base64_encode($imagedata);

 

1 person likes this

Share this post


Link to post
Share on other sites

Hi @Wanze,

I am trying something like this but am getting into one error. What I am doing is:

$markupMain = wireRenderFile( 'partials/pdf_invoice', [ 'invoice' => $invoice ] );
$pdf->markupMain = $markupMain;

The error I get is this:

PHP Warning: is_file(): File name is longer than the maximum allowed path length on this platform (260): ...

I looked into the WirePDF.module file and found out, that a check on the markup is tested with if/else on this steps:

  1. $markup instanceof TemplateFile?
  2. is_file($markup)?
  3. is_string($markup)?

Of course my markup is a long HTML string, but check on the markup at point 2 comes up with the warning. PDF is generated, so no problem at this end. Maybe I can ignore this?

Oh, and is it possible to update to a newer version of mPDF, so there could be a better PHP 7 compatibility? I tried to just copy the newer version into the folder, but it was not working, so I wonder what to change on the files.

Share this post


Link to post
Share on other sites

@godmok

Thanks for the hint on this, I will update this check with a threshold on the string length.

Regarding a newer version of mPDF: Actually the dev brach of the module already contains mPDF 6.1.0, thanks to the work of @gingebaker

However, I didn't find time to test it out yet. I really want to support a more recent mPDF version in the master.

Cheers

 

 

Share this post


Link to post
Share on other sites

Is there an easy way to remove the space occupied by the header? It's probably me or my setup but I can't seem to remove the space.

Share this post


Link to post
Share on other sites

Hello @Wanze and everyone else,

i'm trying to get pages2pdf with @apeisas Padloper. They way I want to use it is:

 

$t = $this->modules->get("PadRender")->getPadTemplate("invoice.php"); # this simply returns a TemplateFile
$t->set("order", $order);
$pdf = $this->modules->get("WirePDF");
$pdf->pageOrientation = 'P';
$pdf->pageFormat = 'A4';
$pdf->markupMain = $t->render();
$pdf->save($this->config->paths->assets.'/pdf/'.$order->rechnungsnummer.'.pdf');

I'm having problems with the images in the template. Only a red "x" is displayed. I tried full httpUrl and even including the base64 data. No success.

Can anyone help out?

Thanks,

thomas

Share this post


Link to post
Share on other sites

@thomas

Can you show the code how you output the images in the PDF template? It should work fine to use $image->url.

Do you use pagefileSecure by any chance?

Cheers

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By abdus
      I dont know how they work internally, whether they depend on each other, but I'd love to be able to test and buy RepeaterMatrix or Multiplier or Table (or any other) module individually. Whole pack of ProFields modules seems awesome to have, and I would love to support and contribute to PW and this awesome community.
      Being able to buy one for ~$30 --instead of all for $130-- sounds much more affordable and this way I could buy the whole pack part by part in several months and wouldn't think twice. But $130 at once, I can't really justify it (and still havent been able to) just as easily with low (to none) disposable student income.  Or instead, having sales one - twice a year would be great as well, but this community is more than able to handle that.
      One advantage of this change would be allowing more people to buy -> support the development & community -> give feedback -> improve these products. This could also potentially pose a disadvantage where requests from people would increase the headache and time required to respond to all these requests.
      I'm sure there's a reason to why these modules are sold together, and I'd love to hear your side as well, @ryan, (and all other maintainers).
      Regards,
      Abdus.
    • By Richard Jedlička
      Tense    
      Tense (Test ENvironment Setup & Execution) is a command-line tool to easily run tests agains multiple versions of ProcessWire CMF.
      Are you building a module, or a template and you need to make sure it works in all supported ProcessWire versions? Then Tense is exactly what you need. Write the tests in any testing framework, tell Tense which ProcessWire versions you are interested in and it will do the rest for you.

      See example or see usage in a real project.
      How to use?
      1. Install it: 
      composer global require uiii/tense 2. Create tense.yml config:
      tense init 3. Run it:
      tense run  
      For detailed instructions see Github page: https://github.com/uiii/tense
       
      This is made possible thanks to the great wireshell tool by @justb3a, @marcus and others.
       
      What do you think about it? Do you find it useful? Do you have some idea? Did you find some bug? Tell me you opinion. Write it here or in the issue tracker.
    • By ukyo
      FieldtypeFontIconPicker
      v.0.1.6
      Fix FieldtypeFontIconPicker sanitizeValue() v.0.1.5
      Added uikit icon select support (required AdminThemeUikit), because uikit icons not working standalone. v.0.1.4 :
      Fix issue FontIconPicker inside repeater v.0.1.3 :
      FontAwesome updated to 4.7.0 v.0.1.2 :
      Little Corrections Some works about icon pickers inside repeater via ajax load v.0.1.1 :
      FontAwesome updated to 4.6.3 v.0.1.0 :
      Custom CSS file url support Added hook method ___beforeRender(), you can check hook example for usage Added multiple icons library use option Added Ionicons Library Now module using cdn for load icon fonts v.0.0.9 inside dev branch
      Added hook method ___beforeRender(), you can check hook example for usage Added multiple icons library use option Added Ionicons Library Now module using cdn for load icon fonts v.0.0.8
      FontAwesome 4.5 update, Improvements and Performance updates Important ! After update module check your input settings, because i changed input attribute names (This will only effect input options, like theme, category). Changed loading icon method from input:hidden to select>optgroup>option, added module js file for load and correct icon picker container many changes…. v.0.0.7
      FontAwesome updated to 4.4.0 v.0.0.6
      Missed... array compatibility for usage, from [$foo, $bar] to array($foo, $bar) v.0.0.5
      Fix for oldest pw versions (Assets file loding scripts moved to inputfieldfonticonpicker module) v.0.0.4
      Array compatibility for usage, from [$foo, $bar] to array($foo, $bar) v.0.0.3
      Small z-index problem solved v.0.0.2
      MarkupFontIconPicker added v.0.0.1
      Start Point Module allow you to use Fotn-Awesome icons easily. You can select icons directly from icon select list, also you can set settings for each InputfieldFontIconPicker.
       
      NOTE : Module store data without prefix, you need to add "prefix" when you want to show your icon on front-end, because some of front-end frameworks using font-awesome with different "prefix".

      Example :
      if($my-icon-field) echo "<i class='my-prefix-{$my-icon-field}' />"; Hook Before Render Example This example using /site/templates/admin.php file for hook
      wire()->addHook('InputfieldFontIconPicker::beforeRender', function($event) { if(!$event->return) return; // Get Input Name (For specified input hook, if you want apply all InputfieldFontIconPicker remove inputName check) $inputName = ""; if(isset($event->object->attributes['name'])) $inputName = $event->object->attributes['name']; // Get Input Name (For specified input hook, if you want apply all InputfieldFontIconPicker remove inputName check) if($inputName == 'icon_picker') { /** * Load your custom icons function file * Your array need to be same format with Icons/FontAwesome.php or Icons/Ionicons.php * Also you can pass directly an array */ wireIncludeFile('MyCustomIconFile'); // Set icons as $icons variable $icons = MyCustomIconsArray(); // Set your options $return = array( 'attributes' => array( 'category' => '', 'theme' => 'fip-grey', 'empty-icon' => 1, 'empty-icon-value' => '', 'icons-per-page' => 20, 'has-search' => 1 ), 'icons' => $icons ); // Return the event $event->return = $return; } $event->return; }); MarkupFontIconPicker Usage
      // MarkupFontIconPicker::render(YourIconField=string, Options=array) echo MarkupFontIconPicker::render($page->YourIconField, [ 'prefix' => 'uk-icon-', // Icon class prefix, if you have different prefix, default is : "fa fa-" 'tag' => 'span', // Icon tag default is : "i" 'class' => 'fa-lg', // If you have extra cutom classes, for example : icons sizes, Array or Sting value 'style' => 'your custom styles if you have' // Array or String Value ]); Module Using
      Font-Awesome v4.3 jQuery fontIconPicker v2.0.0 Screenshots - InputfieldFontIconPicker input settings

      InputfieldFontIconPicker Setting "Category Select"
       


      InputfieldFontIconPicker Setting "Theme Select"



      Screenshots - InputfieldFontIconPicker page edit views

      InputfieldFontIconPicker Search


      InputfieldFontIconPicker Categories


       
      For issues and other things here is MY Github Repo
    • By FIA2008
      I'm using this piece of code to add a table layout to my module configuration:
      $this ->wire('modules') ->get('MarkupAdminDataTable') Then I use this to add rows to my table:
      $this ->wire('modules') ->get('MarkupAdminDataTable') ->row($data) But when I try to add a field to my table, It's not rendered as a field, I only see the the classname of the input field instead of the field itself.
      Is it possible to render a field into a table row?
    • By FIA2008
      In my module's getModuleConfigInputfields method, I've added a field of type: InputfieldButton.
      I want this button have a different action than the usual submit button (which is still there) and the submit button to behave as it always does.
      For example; I want the InputfieldButton button to clear a few folders when it's clicked. Is this possible, if so, how can I achieve this?