Как создать разрыв страницы в Aspose.Html и повторить заголовок - PullRequest
0 голосов
/ 09 мая 2018

Я использую ASPOSE.HTML для создания PDF из HTML. Я следую этому примеру HTML в 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 - PDF.

  • Как добавить разрыв страницы внутри PDF-файла путем вычисления существующей части HTML, чтобы я мог добавить преднамеренные разрывы страниц.
  • Как обнаружить разрыв страницы внутри PDF.
  • Как повторить часть HEADER на следующей странице, если ее содержимое переходит на следующую страницу.

Как мы видим на изображении, заголовок 2 находится на 1-й странице, а содержимое - на 2-й странице.

1 Ответ

0 голосов
/ 15 мая 2018

Мы хотели бы сообщить вам, что вы не можете напрямую рассчитать размер существующей части HTML, и API не предоставляет функциональные возможности для добавления разрывов страниц во время рендеринга, поскольку это приведет к полному пересчету макета. Однако вы можете добавить принудительные разрывы страниц с помощью правил CSS: «page-break-before: всегда; page-break-after: всегда;». Чтобы получить разрыв страницы перед вторым заголовком, необходимо добавить атрибут стиля к следующему элементу, как показано ниже:

<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>

Но это будет работать, только если пользователь удалит ".pdf-body .chart-container .charts {display: inline-block;}" из style.css, потому что таблицы не поддерживают повторение заголовков внутри таких блоков. Это поведение описано в документации HTML и реализовано в браузере Firefox. Кроме того, невозможно одновременно прикрепить один заголовок к трем различным таблицам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...