web-dev-qa-db-fra.com

HTML à PDF - saut de page avec PdfSharp et HtmlRenderer

J'essaie de convertir HTML en PDF en utilisant PdfSharp et HtmlRenderer. Cela fait partie du code:

private byte[] CreateHtmlContent()
{
    string htmlContent = File.ReadAllText(@"htmlExample.txt");

    using (MemoryStream ms = new MemoryStream())
    {
        PdfDocument pdfDocument = new PdfDocument();
        PdfDocument pdf = PdfGenerator.GeneratePdf(htmlContent, PdfSharp.PageSize.A4, 60);
        pdf.Save(ms);
        res = ms.ToArray();
    }
    return res;
}

Tout fonctionne bien sauf le saut de page. Sur certaines pages j'ai le résultat comme sur cette image

 HTML page break

Est-il possible de réparer ça? Le contenu HTML est un code HTML simple qui ne contient que des en-têtes et des paragraphes, sans autre balise. Je n'ai pas eu ce problème avec iTextSharp mais sur ce projet je dois utiliser PdfSharp et MigraDoc.

16
kiriz

J'ai eu un défi similaire et résolu comme j'ai trouvé cette demande de traction sur github: https://github.com/ArthurHub/HTML-Renderer/pull/41

Vous pouvez définir la propriété custom-css 

td { page-break-inside: avoid; }

sur tous les éléments ou sélecteurs que vous souhaitez (td, p, .my-class, etc.) pour contrôler le saut de page.

Vous pouvez utiliser la valeur "auto" si vous voulez que la bibliothèque contrôle votre saut de page sur certains éléments

td { page-break-inside: auto; }

Il existe également un exemple de saut de page dans le texte en cours.

14
user3231903

C'est un peu tard, mais j'ai rencontré le même problème. Le problème est la marge définie sur l'appel GeneratePdf. Enlevez-le et c'est bon.

    PdfDocument pdf = PdfGenerator.GeneratePdf(htmlContent, PdfSharp.PageSize.A4);
5
user94554

Ceci est également résolu en ajoutant une balise DIV appropriée si vous n'utilisez pas de tables.

foreach (DataRow row in group)
            {
                HTMLoutput += "<div style=\"page-break-inside: avoid\"> ";
                HTMLoutput += "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
                HTMLoutput += "</div>";
            }
0
Tuffknitz