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

vb. net使用iText7为PDF的每一页添加页眉/页脚

东郭自珍
2023-03-14

我试图创建一个带有页眉和页脚的PDF。页眉和页脚都是图像。由于我的pdf创建了随机数量的页面,我需要自动将其添加到每一页。我知道我需要使用某种eventhandler。不幸的是,我找不到vb.net语言中的任何示例,我只能找到java/C#示例,我真的不擅长阅读/转换这些语言vb.net.我还不是编程专家。

谁能给我指一下正确的方向吗。

Edit4:删除的随机内容不再需要回答我的问题。

下面这段代码是我创建PDF本身的全部。

Imports System.IO

Imports MySql.Data.MySqlClient

Imports iText.Kernel

Imports iText.Kernel.Pdf

Imports iText.Kernel.Font

Imports iText.Kernel.Font.PdfFont

Imports iText.Kernel.Font.PdfFontFactory

Imports iText.IO.Image

Imports iText.IO.Image.ImageData

Imports iText.IO.Image.ImageDataFactory

Imports iText.Layout.Element.Image

Imports iText.Layout

Imports iText.Layout.Element

Imports iText.Layout.Element.Table


Imports iText.Kernel.Events.Event

Imports iText.Kernel.Events.PdfDocumentEvent

Imports iText.Kernel.Geom.PageSize

Imports iText.Kernel.Geom.Rectangle

Imports iText.Kernel.Pdf.PdfDocument


Imports iText.Kernel.Pdf.PdfNumber

Imports iText.Kernel.Pdf.PdfWriter

Imports iText.Kernel.Pdf.Canvas.PdfCanvas

Imports iText.Kernel.Pdf.Canvas.PdfCanvasConstants

Imports iText.Kernel.Pdf.Xobject.PdfFormXObject

Imports iText.Layout.Canvas

Imports iText.Layout.Document

Imports iText.Layout.Style

Imports iText.Layout.Layout.LayoutArea

Imports iText.Layout.Layout.LayoutContext

Imports iText.Layout.Layout.LayoutResult

Imports iText.Layout.Renderer.CellRenderer
Imports iText.Layout.Renderer.DrawContext
Imports iText.Layout.Renderer.TableRenderer
Imports iText.Signatures.PdfSignatureAppearance


Public Sub NewiText7PdfCreation()

'Dim dest As String = "\\test\verkoop\offerte v2\Offerte " & offertenummer2 & "-" & offertenummer & " " & TextBox2.Text & ".pdf"

Dim dest As String = "iText7Test.pdf"


Dim writer As PdfWriter = New PdfWriter(dest)
Dim pdf As PdfDocument = New PdfDocument(writer)
Dim doc As Document = New Document(pdf)

Dim font As PdfFont = PdfFontFactory.CreateFont("C:\Windows\Fonts\calibri.ttf")

'header

Dim headerlocation As String = "Resources\Offerte-NL.png"
Dim headerimage2 As Image = New Image(ImageDataFactory.Create(headerlocation))
doc.Add(headerimage2)


'klant gegevens

doc.Add(New Paragraph("Debiteur gegevens").SetFont(font))

Dim debnr As String = TextBox1.Text
Dim bn As String = TextBox2.Text
Dim adr As String = TextBox3.Text
Dim pcwp As String = TextBox4.Text
Dim cp As String = TextBox5.Text
Dim km As String = TextBox6.Text

Dim klanttable As New Table(2)

klanttable.SetMaxWidth(350)
klanttable.SetHorizontalAlignment(0)
klanttable.SetFont(font)
klanttable.SetFontSize(8)
klanttable.SetWidth(350)
klanttable.SetMinWidth(120)

klanttable.AddCell("Debiteur nr.: ")
klanttable.AddCell(debnr)
klanttable.AddCell("(Bedrijfs)naam:")
klanttable.AddCell(bn)
klanttable.AddCell("Adres:")
klanttable.AddCell(adr)
klanttable.AddCell("Postcode & woonplaats:")
klanttable.AddCell(pcwp)
klanttable.AddCell("Contactpersoon:")
klanttable.AddCell(cp)
klanttable.AddCell("Kenmerk:")
klanttable.AddCell(km)

Dim cell As New Cell

klanttable.SetMarginTop(10)
klanttable.SetMarginBottom(10)

doc.Add(klanttable)

doc.Close()

End Sub

编辑:

在iText网站上找到了一个不错的教程。

https://developers.itextpdf.com/content/itext-7-jump-start-tutorial-net/chapter-3-using-renderers-and-event-handlers

我只是不太明白如何将这段代码插入到我自己的代码中。我想我需要创建一个处理事件的新类。但是我需要如何调用这个事件。

我只是添加以下行到我的代码:

Implements IEventHandler

还有这艘新潜艇。

  Public Sub HandleEvent([event] As [Event]) Implements IEventHandler.HandleEvent
    Throw New NotImplementedException()
End Sub

如何调整sub以处理页面开始事件和页面结束事件(如果仍然这样称呼它)

编辑:我只是导入了所有的东西,以确保我得到了所有的东西。当一切正常时,我就把所有没用的东西都拿走。

共有1个答案

淳于煌
2023-03-14

通过一些努力,我可以在vb.net.实现PAGE_END事件。这是给你的代码。

(A) 在主模块中创建pdf例程添加:

*Dim HandlerRLA = New VariableHeaderEventHandlerRLA
PDFfile.AddEventHandler(PdfDocumentEvent.END_PAGE, HandlerRLA)*

(B) 在结束类之后添加其他类。您可以根据需要添加文本/段落。我使用图像作为特定页面的页眉和页脚。

Public Class VariableHeaderEventHandlerRLA
    Implements IEventHandler
    Dim header As String
    Dim doc As PdfDocument
    Public Sub TextFooterEventHandler(ByRef doc As PdfDocument)
        Me.doc = doc
    End Sub
    Public Sub HandleEvent([event2] As [Event]) Implements IEventHandler.HandleEvent
        Dim docEvent1 As PdfDocumentEvent = event2
        Dim canvas1 As PdfCanvas = New PdfCanvas(docEvent1.GetPage())
        Dim pageSize1 As iText.Kernel.Geom.Rectangle = docEvent1.GetPage().GetPageSize()
        'Dim canvas As Canvas = New Canvas(docEvent.GetPage(), New iText.Kernel.Geom.Rectangle(0, 0, pageSize.GetWidth(), pageSize.GetHeight))
        Dim PDoc1 As PdfDocument = docEvent1.GetDocument()
        Dim Page1 = docEvent1.GetPage()
        Dim PageNo1 As Integer = PDoc1.GetPageNumber(Page1)

        If PageNo1 > 1 Then
            Dim imageFile, BottomImage As String
            imageFile = "path to image folder\secondtop.bmp"
            Dim data3 = ImageDataFactory.Create(imageFile)

            BottomImage = "path to image folder\secondbottom2.bmp"
            Dim data4 = ImageDataFactory.Create(BottomImage)

            Dim Ratio = data3.GetHeight / data3.GetWidth
            Dim rect As iText.Kernel.Geom.Rectangle = New iText.Kernel.Geom.Rectangle(0, 784, 595, 595 * Ratio)

            With canvas1
                .AddImage(data3, 0, 784, 595, 0)
                '.AddImageFittedIntoRectangle(data3, rect, 0)

                Ratio = data4.GetHeight / data4.GetWidth
                rect = New iText.Kernel.Geom.Rectangle(0, 0, 595, 595 * Ratio)
                '.AddImageFittedIntoRectangle(data4, rect, 0)
                .AddImage(data4, 0, 0, 595, 0)
            End With
        End If
        'Throw New NotImplementedException()
    End Sub
End Class
 类似资料:
  • 我在运行时用一个模板文件在itext7.pdfhtml中构建一个PDF。我想在生成的PDF中的每一页都添加一个页脚,该PDF有两页,但出于某种原因,页脚只出现在第二页。

  • 我当前正试图添加一个链接到pdf文档的页脚页眉,但是库给出了以下错误System.IndexoutOfrangeException:“请求的页码0已超出范围。”当使用IText7库将链接添加到标头时。 我在IText7中找不到任何关于这个问题的在线代码示例,ITextSharp中的解决方案不再适用。 我的问题是我如何添加一个链接到一个外部网站到PDF的标题?当前的行为是库中的bug还是有意的? 包

  • 使用iTextSharp,您可以通过将事件附加到PDF来向PDF添加页眉/页脚,如本SO答案中所述:https://stackoverflow.com/a/19004392 我怎样才能用 iText 7 做同样的事情? 这个链接有Java代码示例,但看起来不像它使用的页面事件。

  • 我使用ColdFusion和iText来生成PDF文档,我希望能够在iText决定进行分页时“自动”向PDF添加页眉和页脚。我已经看到了如何在Java中实现这一点的示例,下面是实现这一点的基本方法: 然后,在开始编写PDF文档之前,您要像他的事件一样“注册”您的事件: (至少据我所知。)

  • 问题内容: 在我的pdf文件中,我需要有多个页眉和页脚。在页眉中,我希望标题标题位于左侧,而某些文本位于中心。 同样,在页脚中,我需要在左侧打印公司名称,在中心打印页码,并在右侧打印有关表格内容的一些信息。 我看过很多文章,但是我没有正确的想法来创建它,有人请帮助我提供一些示例代码片段。 问题答案: 页眉和页脚应使用“页面事件”添加。如果您需要一些示例,只需在官方网站上查找关键字header /