首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用iText7向VB.net的每一页添加页眉/页脚

使用iText7向VB.net的每一页添加页眉/页脚
EN

Stack Overflow用户
提问于 2018-01-09 22:26:46
回答 1查看 1.7K关注 0票数 0

我正在尝试创建一个具有页眉和页脚的PDF。header和foot都是图像。因为我的pdf创建了一个随机数量的页面,所以我需要自动地将它添加到每个页面。我知道我需要用一些平坦的东西。不幸的是,我找不到vb.net语言中的任何示例,我只能找到vb.net /C#示例,而且我真的不擅长阅读/转换这些语言到java。我还不是编程方面的专家。

谁能给我指个正确的方向。

Edit4:删除了随机的东西,不再需要回答我的问题。

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

代码语言:javascript
运行
复制
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

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

我只需将以下代码添加到我的代码中:

代码语言:javascript
运行
复制
Implements IEventHandler

还有这艘新潜艇。

代码语言:javascript
运行
复制
  Public Sub HandleEvent([event] As [Event]) Implements IEventHandler.HandleEvent
    Throw New NotImplementedException()
End Sub

如何调整sub来处理page-start事件和page-end事件(如果它仍然是这样调用的话)

编辑:我只是导入了所有的东西,只是为了确保我得到了所有的东西。当一切正常时,我将删除所有未使用的内容。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-29 05:06:30

通过一些努力,我可以在vb.net中实现PAGE_END事件。这是为您编写的代码。

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

代码语言:javascript
运行
复制
*Dim HandlerRLA = New VariableHeaderEventHandlerRLA
PDFfile.AddEventHandler(PdfDocumentEvent.END_PAGE, HandlerRLA)*

(B)在End Class之后再加一级。您可以根据需要添加文本/段落。我使用图像作为页眉和页脚在特定的页面。

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48170331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档