Search code examples
c#htmlpdfwkhtmltopdfnreco

Nreco pdf generator: issue with text-align: justify and word-break


I'm using Nreco PDF Generator. If I try to generate a PDF file using the following HTML, the text is out of margins.

<html>
<head>
<style> 
P {
     word-break: break-word;
     border: 1px solid black;
}
</style>
</head>
<body>

<P align=justify>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In lacinia lacus lorem, sit amet luctus elit commodo a. Etiam sagittis varius maximus. Donec quis finibus purus, quis pulvinar purus. Nunc vitae eros eget nibh vestibulum malesuada. Quisque elit lorem, tincidunt vel facilisis sed, sollicitudin vulputate nisi. Cras ut vestibulum justo. Pellentesque et metus iaculis, ullamcorper mauris at, finibus dui. Donec in odio et tellus eleifend vehicula at non felis. Aliquam hendrerit auctor lorem dapibus pellentesque. Phasellus neque nunc, congue sed ipsum sit amet, sagittis scelerisque diam. Sed et fermentum odio. Aliquam rhoncus elit mauris, et accumsan lectus viverra quis. Nullam venenatis diam id dolor cursus, eget porttitor mi fermentum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</P>
</body>
</html>

Using the form present here the result is the following: Issued pdf

I tried also to add overflow-wrap: break-word in the style but no way to resolve the issue.

The issue is caused by align=justify. Removing it makes the text stay within the border -- but then it's not justified as it should be.

How do I fix this?


Solution

  • Since NReco PdfGenerator is a wrapper for wkhtmltopdf tool your question is actually about its QtWebKit 4.8 engine. I know at least 2 ways how to deal with align=justify issue you described:

    1) add text-rendering: geometricPrecision; CSS rule:

    P {
         word-break: break-word;
         border: 1px solid black;
         text-rendering: geometricPrecision;
    }
    

    2) use custom font, something like:

    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700&amp;lang=en" />  
    <style>
    P {
         word-break: break-word;
         border: 1px solid black;
         font-family: 'Open Sans', serif;
    }
    </style>