3
votes

Séparation des sauts de page avec DinkToPdf

J'ai ce C # dans mon Program.cs:

    var page = "plain";

    var slnpath = $@"{Directory.GetCurrentDirectory()}\..\..\..\..";
    var htmlpath = $@"{slnpath}\HtmlTemplates\{page}.html";
    var pdfpath = $@"{slnpath}\PdfFiles\{page}.pdf";
    var dllpath = $@"{slnpath}\DinkNative64bit\libwkhtmltox.dll";

    var html = new StringBuilder(File.ReadAllText(htmlpath));

    var _converter = new SynchronizedConverter(new PdfTools());

    var context = new CustomAssemblyLoadContext().LoadUnmanagedLibrary(dllpath);

    var globalSettings = new GlobalSettings
    {
        ColorMode = ColorMode.Color,
        Orientation = Orientation.Portrait,
        PaperSize = PaperKind.A4,
        Margins = new MarginSettings { Top = 10 },
        DocumentTitle = "PDF Report",
        //Out = @"D:\PDFCreator\Employee_Report.pdf"  USE THIS PROPERTY TO SAVE PDF TO A PROVIDED LOCATION
    };

    var objectSettings = new ObjectSettings
    {
        PagesCount = true,
        HtmlContent = html.ToString(),
        //Page = "https://code-maze.com/", USE THIS PROPERTY TO GENERATE PDF CONTENT FROM AN HTML PAGE
        WebSettings = { DefaultEncoding = "utf-8" }, //, UserStyleSheet = Path.Combine(Directory.GetCurrentDirectory(), "assets", "styles.css") },
        HeaderSettings = { FontName = "Arial", FontSize = 9, Right = "Page [page] of [toPage]", Line = true },
        FooterSettings = { FontName = "Arial", FontSize = 9, Line = true, Center = "Report Footer" },

    };

    var pdf = new HtmlToPdfDocument()
    {
        GlobalSettings = globalSettings,
        Objects = { objectSettings }
    };

    //_converter.Convert(pdf); IF WE USE Out PROPERTY IN THE GlobalSettings CLASS, THIS IS ENOUGH FOR CONVERSION

    var file = _converter.Convert(pdf);

    File.WriteAllBytes(pdfpath, file);

Et j'ai ce fichier HTML que j'ai (trop gros pour être collé ici).

Le PDF généré est généralement correct, mais à la page 3, le saut de page n'est pas correct. Le contenu plus large se compare au contenu précédent - je suppose qu'il ne rentrera pas dans la page suivante.

Comment chaque DIV avec la classe de page peut-il commencer sur une nouvelle page?


0 commentaires

3 Réponses :


6
votes

Si vous souhaitez ajouter un saut de page après chaque page, ajoutez ceci dans votre classe de page:

page-break-after: always;


3 commentaires

Merci - mais ce n'est pas parfait, comme indiqué dans l'autre post. D'où ce post.


Essayez-vous de réaliser un saut de page défini après chaque cours de "page"? Si c'est le cas, essayez peut-être le saut de page après: toujours;


Incroyable! Cela fonctionne parfaitement! Merci :) Postez cela comme une réponse.



0
votes

J'ai utilisé "page-break-after: always;" à l'intérieur de div et a parfaitement fonctionné pour moi en utilisant DinkToPdf

 var sb = new StringBuilder();
 sb.AppendFormat("<div style='page-break-after: always;'></div>");


0 commentaires

0
votes

Pour ceux qui veulent éviter les sauts de page au milieu du tableau comme l'exemple ci-dessous: Saut de page au milieu du tableau

Utilisez simplement css page-break-inside avec une valeur à éviter :

table {
    page-break-inside: avoid;
}


0 commentaires