我正在尝试创建一个具有页眉和页脚的PDF。header和foot都是图像。因为我的pdf创建了一个随机数量的页面,所以我需要自动地将它添加到每个页面。我知道我需要用一些平坦的东西。不幸的是,我找不到vb.net语言中的任何示例,我只能找到vb.net /C#示例,而且我真的不擅长阅读/转换这些语言到java。我还不是编程方面的专家。
谁能给我指个正确的方向。
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网站上找到了一个很好的教程。
我只是不太明白如何将这段代码插入到我自己的代码中。我想我需要创建一个处理该事件的新类。但是我需要如何调用这个事件呢?
我只需将以下代码添加到我的代码中:
Implements IEventHandler
还有这艘新潜艇。
Public Sub HandleEvent([event] As [Event]) Implements IEventHandler.HandleEvent
Throw New NotImplementedException()
End Sub
如何调整sub来处理page-start事件和page-end事件(如果它仍然是这样调用的话)
编辑:我只是导入了所有的东西,只是为了确保我得到了所有的东西。当一切正常时,我将删除所有未使用的内容。
发布于 2021-10-29 05:06:30
通过一些努力,我可以在vb.net中实现PAGE_END事件。这是为您编写的代码。
(A)在主模块中创建pdf例程添加:
*Dim HandlerRLA = New VariableHeaderEventHandlerRLA
PDFfile.AddEventHandler(PdfDocumentEvent.END_PAGE, HandlerRLA)*
(B)在End Class之后再加一级。您可以根据需要添加文本/段落。我使用图像作为页眉和页脚在特定的页面。
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
https://stackoverflow.com/questions/48170331
复制相似问题