当前位置: 首页 > 知识库问答 >
问题:

使用iText7向页面添加标题

令狐增
2023-03-14

我需要添加一个HTML块作为使用iText7的所有页面的标题。标题包含一个图像徽标和一些文本。

在关闭文档对象之前,我现在有这样一个问题:

for (int i = 1; i <= n; i++)
{
    float x = pdf.GetPage(i).GetPageSize().GetWidth() / 2;  // 297.5f
    float yFooter = 20;

    if (headerBlock != null)
    {
        float yHeader = 600;// pdf.GetPage(i).GetPageSize().GetTop() - 20;

        // Header
        document.ShowTextAligned(headerBlock, 0, yHeader, page, TextAlignment.LEFT, VerticalAlignment.BOTTOM, 0);
    }

    // Footer
    Paragraph footerBlock = new Paragraph(String.Format("Página {0} de {1}", i, n));
    document.ShowTextAligned(footerBlock, x, yFooter, page, TextAlignment.CENTER, VerticalAlignment.MIDDLE, 0);
}

页脚工作正常,但页眉工作正常。

标题是这样加载的:

Paragraph headerBlock = String.IsNullOrWhiteSpace(header) ? null : CreateHtmlParagraph(header);

其中,CreateHtmlParagraph的定义如下:

private Paragraph CreateHtmlParagraph(string html)
{
    Paragraph p = new Paragraph();
    ConverterProperties properties = new ConverterProperties();
    properties.SetBaseUri(HttpContext.Current.Server.MapPath("/"));
    var elements = HtmlConverter.ConvertToElements(html, properties);

    foreach (IElement e in elements)
        p.Add((IBlockElement)e);

    return p;
}

当我使用文档添加标题时。添加方法,效果很好,但只适用于第一页。所有其他内容都遵循它。

当我尝试使用ShowTextAligned方法添加它时,所有页面中只呈现图像。

顺便问一下,有没有办法得到标题段落的实际高度?我想,一旦解决了标题定位,我就会有其他内容块会被标题重叠的问题。

共有1个答案

苏振国
2023-03-14

我相信你需要使用页面事件。这是有据可查的。创建一个实现IEventHandler的类,该类将处理特定事件。

为特定事件添加事件处理程序

pdf.AddEventHandler(PdfDocumentEvent.START_PAGE, new StartPageEventHandler());

StartPageEventHandler是您创建的一个类,用于实现IEEventHandler。对于页眉和页脚,您可能都需要采用这种方法。

有关更多信息,请参阅此链接

 类似资料:
  • 目前,我正在尝试添加一个水印,出现在我的pdf的每一页的背景使用iText7 pdfHtml,但我无法找到一个解决方案。例如,我希望文本“机密”出现在每一页的背景中。我尝试用css添加它,如下所示 我希望这对其他试图开始使用iText PDFHTML的人有所帮助!

  • 我想使用IText7将图像添加到现有PDF文件中的特定位置。 在使用iTextSharp的另一个项目中,代码非常简单: 但我找不到使用IText7执行此操作的正确方法。 我有PdfReader和PdfWriter,但在IText7中我可以在哪里找到PdfStamper? 或者可能有其他方法可以将图像添加到IText7中现有的PDF文件中? (我不能在当前项目中使用iTextSharp)

  • 我试图创建一个带有页眉和页脚的PDF。页眉和页脚都是图像。由于我的pdf创建了随机数量的页面,我需要自动将其添加到每一页。我知道我需要使用某种eventhandler。不幸的是,我找不到vb.net语言中的任何示例,我只能找到java/C#示例,我真的不擅长阅读/转换这些语言vb.net.我还不是编程专家。 谁能给我指一下正确的方向吗。 Edit4:删除的随机内容不再需要回答我的问题。 下面这段代

  • 我需要将一个使用iText5进行PDF签名验证/创建的Java程序移植到iText7。 旧代码显然不能按原样工作,因为iText的大部分内容都经过了重组。 我找到的所有关于如何做到这一点的例子和教程都是针对iText5的。(非常好的)白皮书也是如此。它们依赖于通过方法返回的列表,在该方法上执行所有与签名相关的操作。 在iText7中,不再具有该方法。 有人知道iText7的例子/文档吗?

  • 我可以使用iText7和C#ASP. NET创建一个pdf文件 这个pdf文件共包含9页。 我试图在代码中添加总页数和一条虚线 但我有两个问题 页数(9页中的1页,9页中的2页,9页中的3页...)只显示在PDF文件中的第8页和第9页中 虚线没有显示在第一页... 任何帮助都将不胜感激。。。非常感谢。 下面是我的代码

  • 页面窗格以缩略图显示仪表板中的所有页面。 添加一个新页面 在仪表板选项卡中,点击页面窗格上的“+”按钮。 将添加一个空白页到仪表板并已选择。 属性 页面的可用属性: 选项 描述 页面大小 自定义仪表板中页面的大小。 背景 设置页面的背景色。如果你选择“图像填充”,则可以选择图像文件和缩放比例选项。 不透明度 设置图像的不透明度。