1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

PDF Membership letter / certificate [Paid] 1.0

Generate a PDF for members to prove their membership.

  1. CrispinP

    CrispinP Active Member

    CrispinP submitted a new resource:

    PDF Membership letter / certificate - Generate a PDF for members to prove their membership.

    Read more about this resource...
     
  2. radu81

    radu81 Member

    Nice idea, I know a forum that will surely be interested into this.
     
    CrispinP likes this.
  3. Mouth

    Mouth Well-Known Member

    Wow! This looks terrific, and an excellent resource.
    Any thoughts on creating, on a new last page, a sort of membership card? I'm thinking credit card size that the member can print and self-laminate, that puts the name, member number, and expiry date, against a background image provided by admin in ACP? They'd then leave this in their wallet/purse and whip out when needed.
     
    Kintaro likes this.
  4. CrispinP

    CrispinP Active Member

    urgh - you lot and you're bright ideas :)

    That should not be much to add. Watch this space.
     
    Mouth and radu81 like this.
  5. Sunka

    Sunka Well-Known Member

    @CrispinP, how to instal Dompdf on Centos 7 (Centmin)?
     
  6. CrispinP

    CrispinP Active Member

    It's included in the download . No need for you to do anything .
     
    Sunka likes this.
  7. Sunka

    Sunka Well-Known Member

    This error shows when using svg for Letterhead Image. Png image parsing OK.

    Code:
    Server Error Log
    Error Info
    Error: Call to undefined method Cpdf::quadTo() - library/Crispin/MembershipLetter/Includes/dompdf/lib/php-svg-lib/src/Svg/Surface/SurfaceCpdf.php:246
    Generated By: Sunka, 13 minutes ago
    Stack Trace
    #0 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/lib/php-svg-lib/src/Svg/Tag/Path.php(276): Svg\Surface\SurfaceCpdf->quadraticCurveTo(34.6, 27.15, 34.55, 27)
    #1 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/lib/php-svg-lib/src/Svg/Tag/AbstractTag.php(63): Svg\Tag\Path->start(Array)
    #2 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/lib/php-svg-lib/src/Svg/Document.php(352): Svg\Tag\AbstractTag->handle(Array)
    #3 [internal function]: Svg\Document->_tagStart(Resource id #27, 'path', Array)
    #4 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/lib/php-svg-lib/src/Svg/Document.php(223): xml_parse(Resource id #27, ' 19.2 26.7 18.7...', false)
    #5 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/lib/Cpdf.php(4571): Svg\Document->render(Object(Svg\Surface\SurfaceCpdf))
    #6 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Adapter/CPDF.php(697): Cpdf->addSvgFromFile('/home/nginx/dom...', 110.14, 727.6242519685, 375, 75)
    #7 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Renderer/Image.php(101): Dompdf\Adapter\CPDF->image('/home/nginx/dom...', 110.14, 39.265748031496, 375, 75, 'normal')
    #8 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Renderer.php(293): Dompdf\Renderer\Image->render(Object(Dompdf\FrameDecorator\Image))
    #9 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Renderer.php(127): Dompdf\Renderer->_render_frame('image', Object(Dompdf\FrameDecorator\Image))
    #10 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Renderer.php(194): Dompdf\Renderer->render(Object(Dompdf\FrameDecorator\Image))
    #11 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Renderer.php(194): Dompdf\Renderer->render(Object(Dompdf\FrameDecorator\Block))
    #12 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Renderer.php(194): Dompdf\Renderer->render(Object(Dompdf\FrameDecorator\TableCell))
    #13 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Renderer.php(194): Dompdf\Renderer->render(Object(Dompdf\FrameDecorator\TableRow))
    #14 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Renderer.php(194): Dompdf\Renderer->render(Object(Dompdf\FrameDecorator\TableRowGroup))
    #15 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Renderer.php(194): Dompdf\Renderer->render(Object(Dompdf\FrameDecorator\Table))
    #16 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Renderer.php(194): Dompdf\Renderer->render(Object(Dompdf\FrameDecorator\Block))
    #17 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Renderer.php(194): Dompdf\Renderer->render(Object(Dompdf\FrameDecorator\Block))
    #18 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/FrameReflower/Page.php(140): Dompdf\Renderer->render(Object(Dompdf\FrameDecorator\Block))
    #19 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/FrameDecorator/AbstractFrameDecorator.php(801): Dompdf\FrameReflower\Page->reflow(NULL)
    #20 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Dompdf.php(834): Dompdf\FrameDecorator\AbstractFrameDecorator->reflow()
    #21 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/ViewPublic/Letter.php(42): Dompdf\Dompdf->render()
    #22 /home/nginx/domains/pijanitvor.com/public/library/XenForo/ViewRenderer/Abstract.php(227): Crispin_MembershipLetter_ViewPublic_Letter->renderRaw()
    #23 /home/nginx/domains/pijanitvor.com/public/library/XenForo/ViewRenderer/Raw.php(53): XenForo_ViewRenderer_Abstract->renderViewObject('Crispin_Members...', 'Raw', Array, 'Crispin_Members...')
    #24 /home/nginx/domains/pijanitvor.com/public/library/XenForo/FrontController.php(606): XenForo_ViewRenderer_Raw->renderView('Crispin_Members...', Array, 'Crispin_Members...', NULL)
    #25 /home/nginx/domains/pijanitvor.com/public/library/XenForo/FrontController.php(158): XenForo_FrontController->renderView(Object(XenForo_ControllerResponse_View), Object(XenForo_ViewRenderer_Raw), Array)
    #26 /home/nginx/domains/pijanitvor.com/public/index.php(13): XenForo_FrontController->run()
    #27 {main}
    Request State
    array(3) {
      ["url"] => string(54) "https://www.pijanitvor.com/membershipletter?printpdf=1"
      ["_GET"] => array(2) {
        ["/membershipletter"] => string(0) ""
        ["printpdf"] => string(1) "1"
      }
      ["_POST"] => array(0) {
      }
    }
    

    This error shows up (I think) when address is ticked, but nothing is entered in field.

    Code:
    Server Error Log
    Error Info
    ErrorException: getimagesize(): Read error! - library/Crispin/MembershipLetter/Includes/dompdf/src/Helpers.php:519
    Generated By: Sunka, 18 minutes ago
    Stack Trace
    #0 [internal function]: XenForo_Application::handlePhpError(8, 'getimagesize():...', '/home/nginx/dom...', 519, Array)
    #1 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Helpers.php(519): getimagesize('/home/nginx/dom...')
    #2 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Image/Cache.php(127): Dompdf\Helpers::dompdf_getimagesize('/home/nginx/dom...', NULL)
    #3 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/FrameDecorator/Image.php(57): Dompdf\Image\Cache::resolve_url('/home/nginx/dom...', '', '', '', Object(Dompdf\Dompdf))
    #4 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Frame/Factory.php(213): Dompdf\FrameDecorator\Image->__construct(Object(Dompdf\Frame), Object(Dompdf\Dompdf))
    #5 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/Includes/dompdf/src/Dompdf.php(801): Dompdf\Frame\Factory::decorate_frame(Object(Dompdf\Frame), Object(Dompdf\Dompdf), Object(Dompdf\FrameDecorator\Page))
    #6 /home/nginx/domains/pijanitvor.com/public/library/Crispin/MembershipLetter/ViewPublic/Letter.php(42): Dompdf\Dompdf->render()
    #7 /home/nginx/domains/pijanitvor.com/public/library/XenForo/ViewRenderer/Abstract.php(227): Crispin_MembershipLetter_ViewPublic_Letter->renderRaw()
    #8 /home/nginx/domains/pijanitvor.com/public/library/XenForo/ViewRenderer/Raw.php(53): XenForo_ViewRenderer_Abstract->renderViewObject('Crispin_Members...', 'Raw', Array, 'Crispin_Members...')
    #9 /home/nginx/domains/pijanitvor.com/public/library/XenForo/FrontController.php(606): XenForo_ViewRenderer_Raw->renderView('Crispin_Members...', Array, 'Crispin_Members...', NULL)
    #10 /home/nginx/domains/pijanitvor.com/public/library/XenForo/FrontController.php(158): XenForo_FrontController->renderView(Object(XenForo_ControllerResponse_View), Object(XenForo_ViewRenderer_Raw), Array)
    #11 /home/nginx/domains/pijanitvor.com/public/index.php(13): XenForo_FrontController->run()
    #12 {main}
    Request State
    array(3) {
      ["url"] => string(54) "https://www.pijanitvor.com/membershipletter?printpdf=1"
      ["_GET"] => array(2) {
        ["/membershipletter"] => string(0) ""
        ["printpdf"] => string(1) "1"
      }
      ["_POST"] => array(0) {
      }
    }
    

    Looking promissing, but need much more estetic styling.
    All is generated by tables and there is too much spaces in document between sections.
    If some option is not checked to show up in document, than it just empty space there, and that is not looking very good.
    Letter title is not showing anywhere in letter.


    My suggestions:
    • Custom file name for pdf (when save pdf/letter to hard disk) - let we choose in acp what will be letter file name
    • Better phrases in letter so we can translate better. Or just empty fields (with html parsing) in ACP where we can write complete sections of letter.
    • Another image in footer of letter (like brand mark)
    • ...
     
  8. CrispinP

    CrispinP Active Member

    I'm going to guess that it's the pdf renderer which does not know how to use svg. Not much I can do about that at the moment. I'll take a look at what they support.

    I'll see if I can reproduce it.

    Can you show me a screen shot? I struggled to get it to look OK for me and was hoping it'll be ok.
    The renderer cannot do fancy css which is why I stuck with tables.

    Again, screen shot please. I'll see if I can recreate it. It should just leave out that row.

    Will look at adding that in.

    Everything is a xenforo phrase so you can translate it if you wanted to. I thought of adding an option to add your own HTML but think that might cause too much hassle with the renderer.

    Possible.


    A lumpy start - sorry. But let's see if we can fix it..
     
    Sunka likes this.
  9. Sunka

    Sunka Well-Known Member

    23-47-33.png



    Thanks


    My opinion is that with empty fields (with/without html parsing) in ACP where we can write complete sections of letter will be much better solution for both, you as developer and us as customers. Many problems could be solved that way. If user want to add custom text for some section of letter than he could write it, or just default text if he do not want custom own text.

    (y)

    P.S. I can edit templates to delete spaces, and other things, but that is not good solution
     
  10. CrispinP

    CrispinP Active Member

    All the text is phrases in XenForo. ACP / Appearance / Phrases - all phrases start with crispin_ml_
    That top one in particular is called crispin_ml_salutation

    Is that screenshot of the website or of the pdf?

    Something is odd with the address and username.
    Have you filled in your personal details in User Contact details? It should have shown an error if you've not. If you have, which have you filled in? I need to see why it's not trapping the missed fields.

    The big white space is to push the footer down a bit. It looks a bit too cramped otherwise.

    The footer at the bottom is made up of the various fields in ACP.
    They're meant to be listed one below the other. What ideas did you have? I can see if it can be included.


    As for the html - it might be worth a try. I'll see what it entails and how easily the pdf writer can cope with it.
    You're right though - that would allow infinite customisation.
     
  11. Sunka

    Sunka Well-Known Member

    website

    Nop, I did not, so errors show up because of this, but mandatory fields in personal user contant details is not something most of my users will fill. Maybe some solution to fill that just before creating pdf? Like step one - fill your real name and address, step 2 creating PDF, step 3 when PDF is created erase that data in user profile.

    Maybe one row - Sunka, Administrator at xxx.com, and below that email address, or just custom field in ACP so admin can create default

    That will be awesome than

    Custom fields in acp for sections of letter are solution for many problems
     
  12. CrispinP

    CrispinP Active Member

    The details are in the user contact details. Can you see them in there?
    upload_2016-10-25_11-56-27.png

    That's what it picks up.
    Admittedly, if yours are blank and it's not warning you that they're blank then there is a a problem.

    Put all that into one field in the ACP and the effect will be the same.
    It would be tough to cater for what you're after and what I am after (I want them in 4 rows)
    The labels should perhaps read Rows1-4 and it would be more agnostic.

    But then you cannot have them in different languages
     
  13. Sunka

    Sunka Well-Known Member

    I express my self wrong.
    I mean something like notices field in ACP


    1.png
     
  14. Sunka

    Sunka Well-Known Member

    One suggestion...
    Could you add some random code in footer of pdf, and some log for that in ACP so if user goesto some shop for discount earned by this certificate from forum that he is part of some usergroup, so owner can e-mail me that random code and I can check is this letter is generated on my website or just homemade by user
     

Share This Page