Search code examples
itextitext7pdfhtml

itext7 + pdfHtml: how set portrait orientation and fit content on ConvertToPdf


I did a simple html to pdf conversion getting a landscape orientation. In the pdfHtml release notes I see that the default orientation should be portrait but I got a landscape.

I'm not able to find the option/parameter/setting to do it.

Probably it is in the ConverterProperties object hidden to my eyes :-(

Any suggestion?

Here is my very simple code

public byte[] HtmlToPdf(string html)
{
    using (Stream htmlSource = new MemoryStream(Encoding.UTF8.GetBytes(html)))
    using (MemoryStream pdfDest = new MemoryStream())
    {
        ConverterProperties converterProperties = new ConverterProperties();
        HtmlConverter.ConvertToPdf(htmlSource, pdfDest, converterProperties);

        return pdfDest.ToArray();
    }
}

EDIT after answers (I got the right orientation!):

Now I have to find a way to scale down the content in order to fit the content and have the right margins without cutting the image.

public static byte[] HtmlToPdf(string html)
{
    using (Stream htmlSource = new MemoryStream(Encoding.UTF8.GetBytes(html)))
    using (MemoryStream pdfDest = new MemoryStream())
    {
        PdfDocument pdfDocument = new PdfDocument(new PdfWriter(pdfDest));
        pdfDocument.SetDefaultPageSize(PageSize.A4.Rotate());
        ConverterProperties converterProperties = new ConverterProperties();
        HtmlConverter.ConvertToPdf(htmlSource, pdfDocument, converterProperties);

        return pdfDest.ToArray();
    }
}

HTML result:

enter image description here

PDF result:

enter image description here


Solution

  • I solved changing the library from itext7 to DinkToPdf. I found it very simple to use and enough to my needs.


    The MVC controller after changing the library to DinkToPdf

    public byte[] PdfCreatorController(IConverter converter)
        string html = await reader.ReadToEndAsync();
    
        var globalSettings = new GlobalSettings
        {
            ColorMode = ColorMode.Color,
            Orientation = Orientation.Portrait,
            PaperSize = PaperKind.A4,
            Margins = new MarginSettings { Top = 10 },
            DocumentTitle = "Report",    
            Out = string.Empty,
        };
    
        var objectSettings = new ObjectSettings
        {
            PagesCount = true,
            HtmlContent = html,
            WebSettings = { DefaultEncoding = "utf-8", UserStyleSheet = Path.Combine(Directory.GetCurrentDirectory(), "assets", "styles.css") },
        };
    
        var pdf = new HtmlToPdfDocument()
        {
            GlobalSettings = globalSettings,
            Objects = { objectSettings }
        };
    
        return = _converter.Convert(pdf);
    }
    

    PDF Result

    enter image description here