Logo
  • Products
    • SecOps Studio
  • Solutions
    • Pega Stack Shifter
  • Services
    • Pega Enablement
    • Pega Modernization
  • About
  • Contact
  • Blog
Code Vault

Generate PDF from Pega – Customize Styles

December 10, 2024 Code Vault Curators

This is the continuation of the previous blog article on PDF generation. In this blog article, we will see how to customize the CSS styling for the generated PDF.

The article was created using Pega 8.3 version! but the core concept remains the same! Use this blog article to learn the concepts and you can try the entire tutorial in the latest versions as well.

It is mandatory to visit my previous blog article, before continuing on this article.

Generate PDF from Pega – Using Pega APIs

Also, I recommend you to go through another post on updating the CSS styles.

What are the steps involved in Customizing PDF content?

Step 1: Add styling to your PDF section

In the Part 1 tutorial, we used a simple stacked layout for the PDF section. I am going to add a few more stylings to the same PDF section

For the dynamic layout, I added an inline grid double format and added a heading as Information.

Only for the customer field, Label – I added label format as SLA display, just to make it bleed red.

Let’s look at how the SLA display styling is defined using the Skin rule.

It uses a mixin – Status error.

More about UI skin – Mixins and formats in a separate article

UI Skin – Formats and Mixins in Pega

Status error uses the color code –  #A6020D

For once, run the section and see how it renders in pega

Perfect 😊

Let’s also use the developer tool, to note down some important CSS classes

Layout grid is of flex layout – .flex.layout-content-inline_grid_double

Also, check on the style overrides! Attributes in class .layout-content-inline_grid_double gets overridden by flex class .flex.layout-content-inline_grid_double

We will see about flex box in step 7

Step 2: Check if the same styling appears in PDF content

Run the case and generate the PDF file.

Open the PDF and see if all looks good!!

PDF looks very bad!!  The values are in White or transparent and Inline grid turned stacked!!

Good, let’s get our hands dirty 😊

Do all our application Skin styles are applied in the PDF?? Yes and No. some are applied!

For example – Customer ID is in red color and the same is applied in the PDF. But inline grid double format also was in skin rule, but the styling is not applied.

Let’s see what are the CSS files we sent to PD4ML library to generate the PDF?

Step 3: Verify the CSS files that we send to PD4ML library.

Start the tracer to capture the HTML stream parameter value content we sent in the 8th step of HTMLToPDF activity.

Copy paste the content in notepad

You will see some standard CSS files are added with the document and one interesting css file is

pzskinv2_demoap97fdc23f70bf0e88dea01438414412eda1143d3bc2c145269aa0a6dad0b0c025_full_13833772303

The CSS file starts with pz name (hmmm, reserved naming convention!!) and has the app name and some random UID..

You know who creates such files, it our own Pega engine 😊

So, what is the content of the CSS file.

Step 4: Verify the content of application skin specific CSS rule

We know that all the CSS files used will be loaded in our browser. Pega generates this CSS file based on the current application skin and loads it in the browser when you log in.

Let’s find the CSS file

Open any case, right click view source.

Click the application skin CSS rule.

It may not open directly, but copy the CSS URL and paste it in the browser and load, you will be prompted to save the CSS locally.

Don’t get shocked to see thousands of lines of CSS styling. Power of pega 😊

It generates the CSS class for all your skin styling.

My skin inherits from CSEndUser skin. For a particular label format Social handle label, I can also see the CSS class styling Pega generated in the CSS rule.

So, everything is included in the CSS rule and the same CSS rule is sent to PD4ML to generate PDF file.

Then the question comes why inline grid double is not working?!

Step 5: Try out compact styles to generate CSS.

In the last post, we saw the use of compact styling, where Pega strips all the heavy CSS files and uses a simple CSS rule to generate the PDF.

How to enable compact styling for PDF generation?

Step 5.1: Enable the DSS

Search for the DSS – UseCompactStylesForPDF and set it to true.

Step 5.2: Now execute the case and see how the PDF gets generated.

Wow! Inline grid double works perfect, but… the Customer ID label style is missing. In fact all your skin styles are stripped off and only the compact styles are applied. You see the text format and label format also look better!!

Step 5.3: Open the CompactStylesForPDF rule and see the styles defined for inline grid double layout.

What we did here is every field, label, layout and subsection included inside a inline grid double layout takes 50% width; and the main attribute is display: inline-block;

This makes two fields in a single row.

Rightly they call it as compact styles 😊

Step 6: Verify the difference between compact style and skin CSS style for inline grid double

In step 4, we already saved the Skin CSS in a notepad.

Search for the class  .layout-content-inline_grid_double

You see a lot of flex CSS styles were also included.

In step 1, we already saw attributes in class .layout-content-inline_grid_double gets overridden by flex class .flex.layout-content-inline_grid_double

We need to disable the flex box settings.

Step 7: Disable flexbox settings in the section rule

What is flexbox?

Pega introduced Flexbox in pega 7.2.1 to design flexible responsive user interface.

There is a very good knowledge article on Flexbox troubleshooting!!

https://support.pega.com/support-doc/troubleshooting-flex-based-layout-issues-internet-explorer-11

For PDF generation, all we need is some standard format. We don’t need flexible or responsive UI configuration.

Open the dynamic layout settings and in the presentation tab, configure the below settings

Use legacy layout, markup and CSS and set it to Pega 7.0

Now run the preview button on section rule and inspect the element using developer tools.

You will see the Flex div class and styling wiped off.

Still the display for the class is not inline-block!

Now only .layout-content-inline_grid_double holds the styling 😊

Now its time to apply styles.

Step 8: Create a custom style for PDF

Step 8.1: Create a new container format for PDF section.

The reason why I am creating a new format is to isolate the format for PDF layouts and apply PDF only to that new PDF container format. By doing this way, you can reuse the styles across PDF and maintain it effectively without impacting other CSS styles.

I saved as the default container format and adjusted few configurations like background color.

Step 8.2: Include the new container format in the PDF section layout settings.

Step 8.3: Get the CSS class for the new container

Run the preview and inspect using developer tools.

You see the CSS class for PDF container – .layout-outline-pdf_container, .layout-fieldset-pdf_container, .layout-noheader-pdf_container

Step 8.4: Create a new css file and include the style for the PDF container CSS class.

Just include display:inline-block attribute.

Step 8.5: Include the css stylesheet in the skin rule.

Step 9: Final testing step.

Run the case and check the generated PDF.

At least now inline grid double styling works well 😊

With this, it is evident that all the skin style contents (including the stylesheets) are bundled into a single CSS file and the same is sent to PD4ML library.

But… Hope Pega checks out other third-party tools as well for PDF generation! Sorry PD4ML!!

Now please continue to add the CSS styles in the stylesheet and beautify your PDF 😊

How to generate PDF with a click of a button?

Till now we saw how to create a PDF file and attach the file with the case. Let’s also see how to generate and view a PDF document on a button click.

You cannot use pxCreatePDF final activity, because it is the final activity and it always calls pyAttachAsPDF activity.

pyViewAsPDF is the ideal candidate, but you need to reuse a few steps in the pxCreatePDF activity.

Step 1: Create a wrapper activity to create PDF.

In the first step, just pass a few important parameters. I am going to use the same HTML stream as used in pxCreatePDF activity and set the section name as PDF section name.

Step 2: Include a button in the user portal and click open URL in the new window by running the activity in currentpage context.

Step 3: Now run the case, click the button and check the generated PDF.

We used the same section, the same styles for the PDF Container!!

We will end this article here!! I hope you have some starting point in customizing the PDF styles 😊

  • file-processing
Code Vault Curators

A technical team dedicated to empowering the Pega ecosystem with in-depth knowledge, guided by Premkumar Ganesan's vision.

Post navigation

Previous
Next

Pega Courses

Pega courses can be accessed at https://myknowacademy.com

Search through the blog

Tags

activity authentication background-processing case-management data-model declarative-processing email-processing file-processing pega-core-concepts pega-integration process reporting security system-administration user-interface validation

Categories

  • Code Vault

Recent posts

  • Service REST – Usage and Configurations in Pega
  • Queue processor – Usage and Configurations
  • Data Pages Usage & Configurations in Pega
  • Requestor types in Pega
  • Case Locking Mechanism in Pega

Related Articles

Code Vault

Service File Processing – tutorial

December 10, 2024 Code Vault Curators

This article is all about working out a tutorial on service file rules in Pega. It is a mandatory pre-requisite to go through my previous article on Service file configurations before continuing here. I have already explained the business requirements in my previous article. Business Requirement: External system sends us the input file with a […]

Code Vault

Service File Configurations in Pega

December 10, 2024 Code Vault Curators

It is recommended to visit the previous blog article on Parse delimited rule before proceeding further In the Parse delimited article, we learned how to parse the input data using delimited characters. Here is our own view on file processing in Pega We can say, this is the common architecture for file processing irrespective of […]

Code Vault

Content storage and content source using Azure storage repository

December 10, 2024 Code Vault Curators

In this blog artcile, we will see how we can store and manage the case attachments and pulse attachments in Azure blob storage container instead of the default Pega data storage. This tutorial was implemented using Pega personal edition 8.5, but the core concepts remain the same in higher versions as well It is recommended […]

Code Vault

Pega File processing Azure storage files

December 10, 2024 Code Vault Curators

In this article, we will see how Pega file listener can process the file uploaded into Azure storage repository. We already have a dedicated article on file listener processing. In this article, we will concentrate more on accessing the file location part. We know how a file listener works – The listener can easily access […]

About

MyKnowTech was born with a mission to bridge the gap between technical expertise and business needs. We are a boutique firm specializing in Pega solutions, delivering them with a personal touch. At the heart of our philosophy is a commitment to putting clients first.

Company
  • About
  • Leadership
  • Career
  • Contact
Resources
  • Blog
  • Services
  • Solutions
  • Insights

©  MyKnowTech B.V. All Rights Reserved.

  • Sitemap
  • Terms & Conditions
  • Privacy Policy