{"id":244462,"date":"2022-06-17T13:20:26","date_gmt":"2022-06-17T12:20:26","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=dotnet&#038;p=244462"},"modified":"2022-08-16T19:44:09","modified_gmt":"2022-08-16T18:44:09","slug":"oss-power-ups-questpdf-webinar-recording","status":"publish","type":"dotnet","link":"https:\/\/blog.jetbrains.com\/en\/dotnet\/2022\/06\/17\/oss-power-ups-questpdf-webinar-recording","title":{"rendered":"OSS Power-Ups: QuestPDF \u2013 Webinar Recording"},"content":{"rendered":"\n<p>The recording of our webinar, <strong>OSS Power-Ups: QuestPDF<\/strong>, with <a href=\"https:\/\/twitter.com\/MarcinZiabek\" target=\"_blank\" rel=\"noreferrer noopener\">Marcin Zi\u0105bek<\/a>, is now available. This was the <strong>ninth episode<\/strong> of our <a href=\"https:\/\/lp.jetbrains.com\/oss-powerups\/\" target=\"_blank\" rel=\"noreferrer noopener\">OSS Power-Ups<\/a> series, where we put a spotlight on open-source .NET projects. <a href=\"https:\/\/www.jetbrains.com\/community\/newsletters\/\" target=\"_blank\" rel=\"noreferrer noopener\">Subscribe to our community newsletter<\/a>&nbsp;to receive notifications about future webinars.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p><em>In the .NET ecosystem, generating PDF documents was challenging for many years. Most available libraries are paid or suffer from stability problems. Many of them also rely upon HTML-to-PDF conversion, whereas webpage technologies are inadequate for paging-related requirements. <a href=\"https:\/\/github.com\/QuestPDF\/QuestPDF\" target=\"_blank\" rel=\"noreferrer noopener\">QuestPDF<\/a> approaches the problem from a different angle. It offers many predictable building blocks that are optimized to create page-aware content. They can be composed together to build complex layouts &#8211; all of it done with type-safe and discoverable fluent API. Marcin Zi\u0105bek, the creator of this library, will present a typical development workflow in QuestPDF. Then, we will shortly discuss internal architecture, design decisions, and algorithms.<\/em><\/p>\n\n\n\n<p><em>Learn how easy it is to generate PDF documents with modern utilities!<\/em><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"OSS Power-Ups: QuestPDF\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/-iYvZvpLX0g?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<!--more-->\n\n\n\n<p><strong>Webinar agenda:<\/strong><\/p>\n\n\n\n<ul><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=0s\" target=\"_blank\" rel=\"noreferrer noopener\">0:00:00<\/a> &#8211; Intro<\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=280s\" target=\"_blank\" rel=\"noreferrer noopener\">0:04:40<\/a> &#8211; Meet Marcin<\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=930s\" target=\"_blank\" rel=\"noreferrer noopener\">0:15:30<\/a> &#8211; What is QuestPDF?<\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=1130s\" target=\"_blank\" rel=\"noreferrer noopener\">0:18:50<\/a> &#8211; Project Setup<\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=1185s\" target=\"_blank\" rel=\"noreferrer noopener\">0:19:45<\/a> &#8211; Creating Documents<\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=1437s\" target=\"_blank\" rel=\"noreferrer noopener\">0:23:57<\/a> &#8211; PDF Preview<\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=1460s\" target=\"_blank\" rel=\"noreferrer noopener\">0:24:20<\/a> &#8211; Creating Pages<\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=1990s\" target=\"_blank\" rel=\"noreferrer noopener\">0:33:10<\/a> &#8211; Enumerating and listing Data<\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=2405s\" target=\"_blank\" rel=\"noreferrer noopener\">0:40:05<\/a> &#8211; Debugging Areas (conditionally)<\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=2705s\" target=\"_blank\" rel=\"noreferrer noopener\">0:45:05<\/a> &#8211; Customizing Header and Footer<\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=3170s\" target=\"_blank\" rel=\"noreferrer noopener\">0:52:50<\/a> &#8211; Adding Images<\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=3475s\" target=\"_blank\" rel=\"noreferrer noopener\">0:57:55<\/a> &#8211; Using Placeholders for Prototyping<\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=3805s\" target=\"_blank\" rel=\"noreferrer noopener\">1:03:25<\/a> &#8211; Refactoring for better Organization and Reuse<\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=4404s\" target=\"_blank\" rel=\"noreferrer noopener\">1:13:24<\/a> &#8211; Creating Tables<\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=5500s\" target=\"_blank\" rel=\"noreferrer noopener\">1:31:40<\/a> &#8211; Questions &amp; Answers<\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=-iYvZvpLX0g&amp;t=6002s\" target=\"_blank\" rel=\"noreferrer noopener\">1:40:02<\/a> &#8211; Outro<\/li><\/ul>\n\n\n\n<p><strong>Resources:<\/strong><\/p>\n\n\n\n<ul><li><a href=\"https:\/\/www.questpdf.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">QuestPDF website<\/a><\/li><li><a href=\"https:\/\/github.com\/QuestPDF\/QuestPDF\" target=\"_blank\" rel=\"noreferrer noopener\">QuestPDF on GitHub<\/a><\/li><\/ul>\n\n\n\n<p>About the presenter:<\/p>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                                                            <div class=\"about-author__box-img\">\n                            <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/03\/2022-03-31_20-40-02.png\" alt=\"\" loading=\"lazy\">\n                        <\/div>\n                                        <div class=\"about-author__box-text\">\n                                                    <h4>Marcin Zi\u0105bek<\/h4>\n                                                <p>Marcin is a technology enthusiast loving software development since the age of 10. He is interested in the hardest programming challenges, development optimization, machine learning, and open-source movement. He&#8217;s trying to expand his knowledge in various programming-related areas, understand and properly apply patterns and practices, see the bigger picture and create new technologies which not only improve the software itself but also make users&#8217; experience better.<\/p>\n<p><a href=\"https:\/\/twitter.com\/MarcinZiabek\" target=\"_blank\" rel=\"noopener\">Follow Marcin on Twitter<\/a>.<\/p>\n                    <\/div>\n                            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":553,"featured_media":257586,"comment_status":"closed","ping_status":"closed","template":"","categories":[4992,1401,30],"tags":[103,6442,6183],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/dotnet\/244462"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/dotnet"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/types\/dotnet"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/users\/553"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/comments?post=244462"}],"version-history":[{"count":9,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/dotnet\/244462\/revisions"}],"predecessor-version":[{"id":273984,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/dotnet\/244462\/revisions\/273984"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media\/257586"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media?parent=244462"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/categories?post=244462"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/tags?post=244462"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/cross-post-tag?post=244462"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}