【问题标题】:How to create page break in Aspose.Html and repeat the header如何在 Aspose.Html 中创建分页符并重复标题
【发布时间】:2018-10-19 11:37:57
【问题描述】:

我正在使用 ASPOSE.HTML 从 HTML 创建 PDF。我正在关注这个例子HTML to PDF。我浏览了文档,但找不到有关如何检测分页符、在 PDF 中提供有意分页符并重复标题的示例。这是代码 -

using System.IO;
using System;

namespace Aspose.Html.Examples.CSharp.Conversion
{
public class HtmlToPdf
{
    public static void Run()
    {
        // ExStart:HtmlToPdf
        // The path to the documents directory.
        string dataDir = RunExamples.GetDataDir_Data();

        String InputHtml = dataDir + "input.html";
        using (FileStream fs = File.Create(InputHtml))
        using (StreamWriter sw = new StreamWriter(fs))
        {
            sw.Write(
                @"
        HTML PART is very long .so it is shared in jsfiddle.
    ");
        }

        // File name for resultant PDF file
        string Resultant_output = dataDir + "simple-any-page_out.pdf";
        // Create PdfRendering Options object
        Aspose.Html.Rendering.Pdf.PdfRenderingOptions pdf_options = new 
 Aspose.Html.Rendering.Pdf.PdfRenderingOptions();
        // The PageSetup also provides different properties i.e. FirstPage, 
 LastPage, LeftPage, RightPage and they are used to setup (PageSize, Margin) 
  for every page. 
        // In most cases, usage of setup any page is enough, but in some 
    complicated cases, you may need to fine tune page settings. It can be 
  done either by CSS styles or by using rendering options.
        // the size for drawing is in pixels
       // pdf_options.PageSetup.AnyPage = new Aspose.Html.Drawing.Page(new Aspose.Html.Drawing.Size(816, 1344));
        // Instantiate PdfDevice object while passing PdfRenderingOptions and resultant file path as arguments
        using (Aspose.Html.Rendering.Pdf.PdfDevice pdf_device = new Aspose.Html.Rendering.Pdf.PdfDevice(pdf_options, Resultant_output))
        // Create HtmlRenderer object
        using (Aspose.Html.Rendering.HtmlRenderer renderer = new Aspose.Html.Rendering.HtmlRenderer())
        // Create HtmlDocument instance while passing path of already created HTML file
        using (Aspose.Html.HTMLDocument html_document = new Aspose.Html.HTMLDocument(InputHtml))
        {
            // Render the output using HtmlRenderer
            renderer.Render(pdf_device, html_document);
        }
        // ExEnd:HtmlToPdf           
    }
}
}

这是 jsfiddle 链接 - HTML/CSS 用于 HTML 和 CSS。

这是 PDF 图片 - .

  • 如何通过计算现有的 HTML 部分在 PDF 中添加分页符,以便我可以添加有意的分页符。
  • 如何检测 PDF 中的分页符。
  • 如果内容进入下一页,如何在下一页重复 HEADER 部分。

正如我们在图片中看到的,HEADER 2 在第一页,但内容在第二页。

【问题讨论】:

  • 我们已经能够在我们的环境中重现该问题。因此,ID HTMLNET-1215 的工单已记录在我们的问题管理系统中以供进一步调查。我们将在调查票证后立即与您分享我们的调查结果。 PS:我与 Aspose 一起担任开发人员宣传员。

标签: c# html css pdf aspose


【解决方案1】:

我们想通知您,您不能直接计算现有 HTML 部分的大小,并且 API 不提供在呈现期间添加分页符的功能,因为这会导致重新计算完整的布局。但是,您可以使用 CSS 规则添加强制分页符:“page-break-before: always; page-break-after: always;”。要在第二个标题之前接收分页符,您应该将样式属性添加到下一个元素,如下所示:

<p style="page-break-before: always;">HEADER 2</p>

关于检测PDF文档中的分页符,如果您创建一个从PdfDevice派生的设备,您可以捕获分页符,如下所示:

class MyDevice : PdfDevice
{
    public MyDevice(PdfRenderingOptions options, string file) 
        : base(options, file)
    {
    }

    public override void BeginPage(SizeF size)
    {
        //This method is called at the beginning of new page.
        base.BeginPage(size);
    }
}

要使 HEADER 内容在表格内容之前的每个页面上重复,应将其放置在 thead 元素内:

<table>
<thead>
<tr>
<td>
This content is repeated.
</td>
</tr>
</thead>
<tbody>
<tr>
<td>
Table content.
</td>
</tr>
</tbody>
</table>

但只有当用户从 style.css 中删除“.pdf-body .chart-container .charts { display: inline-block;}”时它才会起作用,因为表格不支持在此类块内重复标题。此行为在 HTML 文档中描述并在 Firefox 浏览器中实现。此外,无法同时将一个表头附加到三个不同的表。

【讨论】:

  • 即使在删除 inline-block css 后,头部重复也不起作用。
  • 您能否通过将 ZIP 文件上传到 Google Drive、Dropbox 等来分享相关的源文件和生成的文件以及代码 sn-p,以便我们进一步调查以帮助您。
  • 将 HTML div 结构更改为 Table 结构后它工作了。
  • 感谢您的友好反馈。我们很高兴知道您的环境已经开始工作了。如果您需要任何进一步的帮助,请随时与我们联系。
猜你喜欢
  • 1970-01-01
  • 2015-03-07
  • 2016-03-04
  • 1970-01-01
  • 2013-02-02
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多