Jump to content

Recommended Posts

Hi, new version is here, as I promised. It's currently on the dev branch: https://github.com/uiii/ProcessWire-FieldtypePDF/tree/dev. The readme is updated so everything should be clear. It contains tests and they successfully passed for PW 2.4, 2.5. If you can try the module, I'd be glad to hear your opinions and suggestions.

  • Like 1

Share this post


Link to post
Share on other sites

Oh yeah, my hosting provider said they couldn't update GS to 9.x...

Thanks for the update - will check it out as soon as I can. :)

Share this post


Link to post
Share on other sites

I'm trying this (dev) on PW 2.6 and it works fine so far but I'm not sure why it's using Image field ... like it has the pdf file but showing an image that in PW 2.6 has a dialog for cropping etc. The file basename is a link that opens a modal where there's an error:

TemplateFile: Field file_pdf is not an instance of FieldtypeImage<pre>#0 /Applications/MAMP/htdocs/verbandsnet/wire/core/Modules.php(441): ProcessPageEditImageSelect->init() #1 /Applications/MAMP/htdocs/verbandsnet/wire/core/Modules.php(1012): Modules->initModule(Object(ProcessPageEditImageSelect), false) #2 /Applications/MAMP/htdocs/verbandsnet/wire/core/Modules.php(919): Modules->getModule('ProcessPageEdit...') #3 /Applications/MAMP/htdocs/verbandsnet/wire/core/ProcessController.php(135): Modules->get('ProcessPageEdit...') #4 /Applications/MAMP/htdocs/verbandsnet/wire/core/ProcessController.php(209): ProcessController->getProcess() #5 [internal function]: ProcessController->___execute() #6 /Applications/MAMP/htdocs/verbandsnet/wire/core/Wire.php(387): call_user_func_array(Array, Array) #7 /Applications/MAMP/htdocs/verbandsnet/wire/core/Wire.php(325): Wire->runHooks('execute', Array) #8 /Applications/MAMP/htdocs/verbandsnet/wire/core/admin.php(93): Wire->__call('execute', Array) #9 /Applications/MAMP/htdocs/verbandsnet/wire/core/admin.php(93): ProcessController->execute() #10 /Applications/MAMP/htdocs/verbandsnet/wire/modules/AdminTheme/AdminThemeDefault/controller.php(13): require('/Applications/M...') #11 /Applications/MAMP/htdocs/verbandsnet/site/templates/admin.php(15): require('/Applications/M...') #12 /Applications/MAMP/htdocs/verbandsnet/wire/core/TemplateFile.php(169): require('/Applications/M...') #13 [internal function]: TemplateFile->___render() #14 /Applications/MAMP/htdocs/verbandsnet/wire/core/Wire.php(387): call_user_func_array(Array, Array) #15 /Applications/MAMP/htdocs/verbandsnet/wire/core/Wire.php(325): Wire->runHooks('render', Array) #16 /Applications/MAMP/htdocs/verbandsnet/wire/modules/PageRender.module(385): Wire->__call('render', Array) #17 /Applications/MAMP/htdocs/verbandsnet/wire/modules/PageRender.module(385): TemplateFile->render() #18 [internal function]: PageRender->___renderPage(Object(HookEvent)) #19 /Applications/MAMP/htdocs/verbandsnet/wire/core/Wire.php(387): call_user_func_array(Array, Array) #20 /Applications/MAMP/htdocs/verbandsnet/wire/core/Wire.php(325): Wire->runHooks('renderPage', Array) #21 /Applications/MAMP/htdocs/verbandsnet/wire/core/Wire.php(409): Wire->__call('renderPage', Array) #22 /Applications/MAMP/htdocs/verbandsnet/wire/core/Wire.php(409): PageRender->renderPage(Object(HookEvent)) #23 /Applications/MAMP/htdocs/verbandsnet/wire/core/Wire.php(325): Wire->runHooks('render', Array) #24 /Applications/MAMP/htdocs/verbandsnet/wire/modules/Process/ProcessPageView.module(187): Wire->__call('render', Array) #25 /Applications/MAMP/htdocs/verbandsnet/wire/modules/Process/ProcessPageView.module(187): Page->render() #26 [internal function]: ProcessPageView->___execute(true) #27 /Applications/MAMP/htdocs/verbandsnet/wire/core/Wire.php(387): call_user_func_array(Array, Array) #28 /Applications/MAMP/htdocs/verbandsnet/wire/core/Wire.php(325): Wire->runHooks('execute', Array) #29 /Applications/MAMP/htdocs/verbandsnet/index.php(241): Wire->__call('execute', Array) #30 /Applications/MAMP/htdocs/verbandsnet/index.php(241): ProcessPageView->execute(true) #31 {main}</pre>


When creating the PDF field I'm seeing configurations same like an image field, but it's not. I'm not sure this is the right direction of how this should work.

Share this post


Link to post
Share on other sites

Because I'm not able to download/open the PDF itself in the admin like I expect when clicking on the basename. Maybe I get it wrong, but it's not only about creating an image of a pdf but also having the pdf itself. So there maybe the best way is to introduce your own "renderItem()" method again instead of using the parent method.

Share this post


Link to post
Share on other sites

Hi, thanks for the reply. I haven't tried the PW 2.6 yet. The reason why I used image inputfield is to render the PDF thumbnails exactly the same way as images. But maybe you are right, I should have used my own render method. I'll check it out.

  • Like 1

Share this post


Link to post
Share on other sites

Not sure why this worked, but I had to modify the ImageMagick code in PagePDF.php a bit to get it working on GoDaddy shared hosting (I know, I know...):

$imagick = new Imagick($this->filename . "[0]");
$imagick->setResolution(300, 300);
$imagick->setOption('pdf:use-cropbox', 'true');
//$imagick->setColorspace(Imagick::COLORSPACE_RGB);
//$imagick->readimage($this->filename . "[0]");
$imagick->setImageFormat('png');
$imagick->scaleImage($width, $height);
$imagick->writeImage($filename);

I believe it has to do with GoDaddy running old versions of IM and GhostScript, but I'm not certain.

Share this post


Link to post
Share on other sites

Hi @evan,
yes, it's probably because of the old version of IM and GS. What was the problem exactly (error message, ...), can you post it here? I also find that setColorspace method is supported since IM version 6.5.7, so I should change the code to reflect that. What is the problem with readImage method? Will it work if you comment only setColorspace?

Share this post


Link to post
Share on other sites

It's been a while since I did this, but I think you will have problems with the change to loading the image at the start rather than using readImage. The problem is with setResolution - this needs to happen before the image is read. The image is rasterized as soon as it is read, so setting the resolution afterwards can result in a poorer quality image.

Share this post


Link to post
Share on other sites

The setColorspace() method doesn't exist on my server, as IM is too old (ImageMagick 6.5.4-7):

Error: 	Call to undefined method Imagick::setColorspace() (line 16 of /path/to/public_html/site/modules/FieldtypePDF/PagePDF.php)

When I use readFile(), I get the following error (not the real path, obviously):

- Postscript delegate failed `/path/to/file.pdf': No such file or directory @ pdf.c/ReadPDFImage/611

From what I read this is common if you're using a pre-9.x version of GhostScript (server has 8.70).

I haven't seen any visible quality issues with declaring the image with the Imagick object, but I also haven't been looking too carefully -- mostly glad to get it working at all.

Share this post


Link to post
Share on other sites

Hi, I've been doing some research and testing. But I don't find a way to get it properly working on older versions of ghostscript. But @evan's solution works, it produces low quality images and it's properties cannot be affected because the pdf is read on the Imagick object creating. The readImage method always throws the mentioned exception. Despite of this it is useful where you cannot update GS or IM (e.g. shared hosting). So I added it to the module as fallback mode. It can be turned on in the module's settings. See DEV branch.

Share this post


Link to post
Share on other sites

Any chance to update this module for 2.5+? Aka making the dev to the new master? 

Share this post


Link to post
Share on other sites

Hi, sorry I din't do that yet. I stucked, because I wanted to test it properly first. I wanted to make automated unit tests, but in processwire it isn't (maybe wasn't) so easy, I wanted to use wireshell to help with it, but somehow I moved my activity somewhere else. I can merge the branches, but I would like to have some feedback if it is working correctly or not. Did you try it? I've tried it in PW 2.5 and 2.6 and it looks it's working, but I'm not sure about PW 2.7+. If you can test it a give me feedback I would appreciate it. Thanks

Share this post


Link to post
Share on other sites

Hi Richard,

I've tried out this module on version 2.6 and it works nicely! 

I've tried installing it in version 3.0 and had to restore the database from backup: I got error messages and couldn't reach the PDF-field anymore. 

The information about compatibility is misleading: on the module page it says compatible with version 3.0, but later on it's stated <3.0.

Too bad I can't used it now, I liked it a lot!

Thanks.

Share this post


Link to post
Share on other sites

Hi lenoir,

There is a version compatible with 3.0, it is in devns branch, it is separated because i didn't find a way to have one codebase compatible with PW 2.x and 3.x (I can tell you more if you want).

What happend with your pdf files in 3.0? Why did you have to restore the database? Should I fix something?

Cheers,
Richard

  • Like 2

Share this post


Link to post
Share on other sites

Finally I've found out how to support PW 2.x and PW 3.x with one codebase. So here is a new version 1.1.2 compatible with PW 2.5+. I updated the tests as well, turned the script which runs tests against multiple versions of ProcessWire into standalone tool PW-Test.

  • Like 4

Share this post


Link to post
Share on other sites

@ICF Church Hi, I'm trying to solve your issue, but I can't reproduce the error. What version of PHP are you using? During module installation there is a step where the `use` statemenents in source files under FieldtypePDF folder are prefixed with `Processwire\' namespace if PW 3.x detected. Could you please examine what's wrong? Look into this method https://github.com/uiii/ProcessWire-FieldtypePDF/blob/d11ff962d520782fa25215f5ce606886773a5a44/FieldtypePDF.module#L232. Thanks

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 eelkenet
      Hi! I've created a small Inputfield module called InputfieldFloatRange which allows you to use an HTML5 <input type="range" ../> slider as an InputField. I needed something like this for a project where the client needs to be able to tweak this value more based on 'a feeling' than just entering a boring old number. Maybe more people can use this so I'm hereby releasing it into the wild.  
       
      What is it?
      The missing range slider Inputfield for Processwire. 
      What does it do?
      This module extends InputfieldFloat and allows you to use HTML5 range sliders for number fields in your templates.
      It includes a visible and editable value field, to override/tweak the value if required.  
      Features
      Min/max values Precision (number of decimals) Steps (Read more) Manual override of the selected value (will still adhere to the rules above) Usage
      Clone / zip repo Install FieldtypeFloatRange, this automatically installs the Inputfield Create new field of type `Float (range)` or convert an existing `Float`, `Integer` or `Text` field. To render the field's value simply echo `$page->field` Demo
      A field with Min=0, Max=1, Step=0.2, Precision=2

      Field with settings Min=0, Max=200, Step=0.25, Precision=2

       
      Todo
      Make the display-field's size configurable (will use the Input Size field setting)  Hopefully become redundant If it's usable for others I'll add it to the Modules list  
      Changelog
      v002
      - Fix issue where setting the step value to an empty value created problem with validation
      - Make the display-field optional 
      v001
      - Initial release
       
      Thanks!
       
       
    • By August
      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  
    • By Robin S
      Another little admin helper module...
      Template Field Widths
      Adds a "Field widths" field to Edit Template that allows you to quickly set the widths of inputfields in the template.

      Why?
      When setting up a new template or trying out different field layouts I find it a bit slow and tedious to have to open each field individually in a modal just to set the width. This module speeds up the process.
      Installation
      Install the Template Field Widths module.
      Config options
      You can set the default presentation of the "Field widths" field to collapsed or open. Field widths entered into the Template Field Widths inputfield are only applied if the Edit Template form is submitted with the Template Field Widths inputfield in an opened state. "Collapsed" is the recommended setting if you think you might also use core inputs for setting field widths in a template context. You can choose Name or Label as the primary identifier shown for the field. The unchosen alternative will become the title attribute shown on hover. You can choose to show the original field width next to the template context field width.  
      https://github.com/Toutouwai/TemplateFieldWidths
      https://modules.processwire.com/modules/template-field-widths/
    • By adrian
      Tracy Debugger for ProcessWire
      The ultimate “swiss army knife” debugging and development tool for the ProcessWire CMF/CMS

       
      Integrates and extends Nette's Tracy debugging tool and adds 35+ custom tools designed for effective ProcessWire debugging and lightning fast development
      The most comprehensive set of instructions and examples is available at: https://adrianbj.github.io/TracyDebugger
      Modules Directory: http://modules.processwire.com/modules/tracy-debugger/
      Github: https://github.com/adrianbj/TracyDebugger
      A big thanks to @tpr for introducing me to Tracy and for the idea for this module and for significant feedback, testing, and feature suggestions.
×
×
  • Create New...