{"id":6822,"date":"2025-11-19T10:02:15","date_gmt":"2025-11-19T01:02:15","guid":{"rendered":"https:\/\/dandelions.co.jp\/blog\/?p=6822"},"modified":"2025-11-19T10:02:15","modified_gmt":"2025-11-19T01:02:15","slug":"engineer-blog-generating-pdfs-using-ultimate-pdf-in-outsystems","status":"publish","type":"post","link":"https:\/\/dandelions.co.jp\/blog\/blog\/2025\/11\/19\/engineer-blog-generating-pdfs-using-ultimate-pdf-in-outsystems\/","title":{"rendered":"Engineer Blog: Generating PDFs Using Ultimate PDF in OutSystems"},"content":{"rendered":"\n<p>As part of our engineer blog, we\u2019d like to share what we\u2019ve been learning day by day. <br>This time, it\u2019s Team 2, focusing on low-code development.<\/p>\n\n\n\n<p>This Time\u2019s Theme: &#8216;PDF Output Using Ultimate PDF<\/p>\n\n\n\n<p>This time, we\u2019ll show you how to export screen data within OutSystems as a PDF.<\/p>\n\n\n\n<p><strong>What is Ultimate PDF?<\/strong><\/p>\n\n\n\n<p>Ultimate PDF is one of the Forge components available in OutSystems. It allows you to export web pages (HTML + CSS) as PDFs. <br>For example, you can generate PDFs of formatted content like invoices, reports, business cards, and forms.<\/p>\n\n\n\n<p><strong>Installing Ultimate PDF<\/strong><\/p>\n\n\n\n<p>Launch Service Studio, search for &#8216;Ultimate PDF&#8217; via Browse Forge, and install it.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"1024\" height=\"510\" src=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-092349-1024x510-1.png\" alt=\"\" class=\"wp-image-6823\" srcset=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-092349-1024x510-1.png 1024w, https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-092349-1024x510-1-300x149.png 300w, https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-092349-1024x510-1-768x383.png 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/figure>\n\n\n\n<p><strong>Adding References to the Module<\/strong><\/p>\n\n\n\n<p>Open the module you want to use, go to Manage Dependencies (CTRL+Q), select the necessary elements from Ultimate PDF, and click the Apply button. <br>(This time, we selected PrintLayout, HideOnPrint, and PrintToPDF_Advanced.)<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"1024\" height=\"789\" src=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-103529-1024x789-1.png\" alt=\"\" class=\"wp-image-6824\" srcset=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-103529-1024x789-1.png 1024w, https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-103529-1024x789-1-300x231.png 300w, https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-103529-1024x789-1-768x592.png 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/figure>\n\n\n\n<p>Descriptions of each element are as follows.<\/p>\n\n\n\n<p>\u30fb<strong>PrintLayout<\/strong>: A layout template used to optimize screens for printing or PDF output.<br><br>\u30fb<strong>HideOnPrint<\/strong>: A CSS class (style setting) for screen design that, as the name suggests, hides specific elements during printing.<br><br>\u30fb<strong>PrintToPDF_Advanced<\/strong>: An advanced function that allows for more detailed settings when converting HTML screens (web pages) into PDFs.<\/p>\n\n\n\n<p><strong>Creating a Screen for Output<\/strong><\/p>\n\n\n\n<p>To create a screen for output, follow the same steps as when creating a regular Screen. Place &#8216;PrintLayout&#8217; on the screen and design the layout you want to export as a PDF.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"1024\" height=\"471\" src=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-094722-1024x471-1.png\" alt=\"\" class=\"wp-image-6826\" srcset=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-094722-1024x471-1.png 1024w, https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-094722-1024x471-1-300x138.png 300w, https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-094722-1024x471-1-768x353.png 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/figure>\n\n\n\n<p>For any text you don\u2019t want to appear in the PDF output, add &#8216;HideOnPrint&#8217; to the screen and place the text inside it.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"1024\" height=\"470\" src=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-095351-1024x470-1.png\" alt=\"\" class=\"wp-image-6827\" srcset=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-095351-1024x470-1.png 1024w, https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-095351-1024x470-1-300x138.png 300w, https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-095351-1024x470-1-768x353.png 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/figure>\n\n\n\n<p><strong>Creating a Server Action for PDF Output<\/strong><\/p>\n\n\n\n<p>This time, we\u2019ll place an output button on the screen we created earlier and set up a Server Action that triggers a download when the button is pressed.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"1024\" height=\"363\" src=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-100704-1024x363-1.png\" alt=\"\" class=\"wp-image-6828\" srcset=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-100704-1024x363-1.png 1024w, https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-100704-1024x363-1-300x106.png 300w, https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-100704-1024x363-1-768x272.png 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/figure>\n\n\n\n<p>The properties for each action are as follows<br>\u30fbPrintToPDF_Advanced: Under Action, set the URL of the screen you want to export (in this case, we\u2019re using the current screen\u2019s URL), the PDF page size, and the PDF margins.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"447\" height=\"430\" src=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-101154-1.png\" alt=\"\" class=\"wp-image-6829\" srcset=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-101154-1.png 447w, https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-101154-1-300x289.png 300w\" sizes=\"(max-width: 447px) 100vw, 447px\" \/><figcaption>\uff0aWe didn\u2019t use it this time, but in Environment, you can finely control HTML rendering methods, wait conditions, and CSS application settings.<\/figcaption><\/figure>\n\n\n\n<p>\u30fbDownload: Under Action, set the return value from PrintToPDF_Advanced and the name of the PDF.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"450\" height=\"235\" src=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-101216-1.png\" alt=\"\" class=\"wp-image-6830\" srcset=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-101216-1.png 450w, https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-09-101216-1-300x157.png 300w\" sizes=\"(max-width: 450px) 100vw, 450px\" \/><\/figure>\n\n\n\n<p><strong>Here is the PDF we actually generated.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"1024\" height=\"646\" src=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-13-203331-1024x646-1.png\" alt=\"\" class=\"wp-image-6831\" srcset=\"https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-13-203331-1024x646-1.png 1024w, https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-13-203331-1024x646-1-300x189.png 300w, https:\/\/dandelions.co.jp\/blog\/wp\/wp-content\/uploads\/2025\/11\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2025-11-13-203331-1024x646-1-768x485.png 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>\uff0aText that wasn\u2019t meant to be output has been removed.<\/figcaption><\/figure>\n\n\n\n<p><strong>Important Notes<\/strong><\/p>\n\n\n\n<p>\u30fbBe careful when choosing between Client Action and Server Action. Since PDF generation is generally handled on the server side, calling it from a Client Action by mistake may result in it not working properly.<\/p>\n\n\n\n<p>\u30fbAlways enclose the FileName in double quotation marks (&#8220;&#8221;).If not specified like \\&#8221;Test.pdf\\&#8221;, it will result in an error<\/p>\n\n\n\n<p>\u30fbScreens with a large amount of information are more likely to time out. If there are many tables or images, PDF generation may take longer.<\/p>\n\n\n\n<p><strong>Summary<\/strong><\/p>\n\n\n\n<p>In this article, we introduced how to generate PDF files from OutSystems using Ultimate PDF. <br>Since it can also output images and graphs, be sure to try it out in apps that generate reports or forms. <br>Team 2 will continue to share technical blogs using low-code tools like OutSystems, so stay tuned!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As part of our engineer blog, we\u2019d like to share what we\u2019ve been learning day by day. This time, it\u2019s Team 2,  &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/dandelions.co.jp\/blog\/blog\/2025\/11\/19\/engineer-blog-generating-pdfs-using-ultimate-pdf-in-outsystems\/\" class=\"more-link\"><span class=\"screen-reader-text\">&#8220;Engineer Blog: Generating PDFs Using Ultimate PDF in OutSystems&#8221; \u306e<\/span>\u7d9a\u304d\u3092\u8aad\u3080<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true},"categories":[8],"tags":[9],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/paR9rw-1M2","_links":{"self":[{"href":"https:\/\/dandelions.co.jp\/blog\/wp-json\/wp\/v2\/posts\/6822"}],"collection":[{"href":"https:\/\/dandelions.co.jp\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dandelions.co.jp\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dandelions.co.jp\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dandelions.co.jp\/blog\/wp-json\/wp\/v2\/comments?post=6822"}],"version-history":[{"count":1,"href":"https:\/\/dandelions.co.jp\/blog\/wp-json\/wp\/v2\/posts\/6822\/revisions"}],"predecessor-version":[{"id":6832,"href":"https:\/\/dandelions.co.jp\/blog\/wp-json\/wp\/v2\/posts\/6822\/revisions\/6832"}],"wp:attachment":[{"href":"https:\/\/dandelions.co.jp\/blog\/wp-json\/wp\/v2\/media?parent=6822"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dandelions.co.jp\/blog\/wp-json\/wp\/v2\/categories?post=6822"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dandelions.co.jp\/blog\/wp-json\/wp\/v2\/tags?post=6822"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}