0

Hi
I can add watermark text on a .pdf document to an absolute position.
This time I want to add water text of small font size to cover all of the page including margins.
I know that I need relative positioning of text, fitting text to text lines depending on pagesize (A4 paper)
and some padding between textlines.
Can some one help with a suitable method?
Sample is attached
Thanks

    Private Sub btnCreate_Click(sender As System.Object, e As System.EventArgs) Handles btnCreate.Click
            Dim doc As New Document(iTextSharp.text.PageSize.A4, 20, 20, 20, 20)
            Dim wri As PdfWriter = PdfWriter.GetInstance(doc, New FileStream(Application.StartupPath + "\AttendanceSheet.pdf", FileMode.Create))
            doc.Open()
            Dim font11Bold As New iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.TIMES_ROMAN, 11.0F, iTextSharp.text.Font.BOLD, BaseColor.BLACK)
            Dim font11BoldU As New iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.TIMES_ROMAN, 11.0F, iTextSharp.text.Font.BOLD Or iTextSharp.text.Font.UNDERLINE, BaseColor.BLACK)
            Dim font10Bold As New iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.TIMES_ROMAN, 10.0F, iTextSharp.text.Font.BOLD, BaseColor.BLACK)
            Dim phrase As Phrase = Nothing
            Dim cell As PdfPCell = Nothing


            Dim pdfHeaderTable As New PdfPTable(3)
            pdfHeaderTable.WidthPercentage = 100

            pdfHeaderTable.HorizontalAlignment = 1
            Dim wid(2) As Single
            wid(0) = 100
            wid(1) = 100
            wid(2) = 100
            pdfHeaderTable.SetWidths(wid)

            Phrase = New Phrase()
            phrase.Add(New Chunk("blah Blah" & vbLf & "------------" & vbLf, font11Bold))
            cell = PhraseCell(Phrase, PdfPCell.ALIGN_CENTER)
            cell.NoWrap = False
            pdfHeaderTable.AddCell(cell)

            phrase = New Phrase()
            phrase.Add(New Chunk("blah Blah" & vbLf & "------------" & vbLf, font11Bold))
            cell = PhraseCell(phrase, PdfPCell.ALIGN_CENTER)
            cell.NoWrap = False
            pdfHeaderTable.AddCell(cell)

            phrase = New Phrase()
            phrase.Add(New Chunk("blah Blah" & vbLf & "------------" & vbLf, font11Bold))
            cell = PhraseCell(phrase, PdfPCell.ALIGN_CENTER)
            cell.NoWrap = False
            pdfHeaderTable.AddCell(cell)

            doc.Add(pdfHeaderTable)
            doc.Close()

            AddWatermark()

            Process.Start(Application.StartupPath + "\AttendanceSheet1.pdf")

        End Sub



          Public Sub AddWatermark()
                Dim bytes As Byte() = file.ReadAllBytes(Application.StartupPath + "\AttendanceSheet.pdf")
                'Dim blackFont As Font = FontFactory.GetFont("Arial", 12, Font.NORMAL, BaseColor.BLACK)
                Using stream As New MemoryStream()
                    Dim reader As New PdfReader(bytes)
                    Using stamper As New PdfStamper(reader, stream)
                        Dim pages As Integer = reader.NumberOfPages
                        For i As Integer = 1 To pages
                            '    ColumnText.ShowTextAligned(stamper.GetUnderContent(i), Element.ALIGN_RIGHT, New Phrase(i.ToString(), blackFont), 568.0F, 15.0F, 0)
                            'Next
                            Dim pageRectangle As iTextSharp.text.Rectangle = reader.GetPageSize(i)
                            Dim pdfData As PdfContentByte = stamper.GetUnderContent(i)

                            'Create Font and Size for the Watermark
                            pdfData.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 10)

                            'Set the Watermark, Get the Width of a Single Watermark element and finally Get the Height of the Font being used
                            Dim myWatermark As String = "Some Watermark"
                            Dim watermarkList As New List(Of String)
                            Dim singleWaterMarkWidth As Single = pdfData.GetEffectiveStringWidth(myWatermark, False)
                            Dim fontHeight As Single = 10
                            'Dim fontHeight As Single = New Font("HELVETICA", 10, FontStyle.Bold).Height

                            'Work out the Watermark for a Single Line on the Page based on the Page Width
                            Dim currentWaterMarkWidth As Single
                            While currentWaterMarkWidth + singleWaterMarkWidth < pageRectangle.Width
                                watermarkList.Add(myWatermark)
                                currentWaterMarkWidth = pdfData.GetEffectiveStringWidth(String.Join(" "c, watermarkList), False)
                            End While

                            'Fill the Page with Lines of Watermarks
                            Dim currentYPos As Single = pageRectangle.Height
                            While currentYPos > 0
                                pdfData.ShowTextAligned(iTextSharp.text.Element.ALIGN_CENTER, String.Join(" "c, watermarkList), pageRectangle.Width / 2, currentYPos, 0)
                                currentYPos -= fontHeight
                            End While
                        Next
                    End Using
                    bytes = stream.ToArray()
                End Using
                file.WriteAllBytes(Application.StartupPath + "\AttendanceSheet1.pdf", bytes)

            End Sub

        Public Function PhraseCell(phrase As Phrase, align As Integer) As PdfPCell
                Dim cell As New PdfPCell(phrase)
                cell.BorderColor = BaseColor.WHITE
                cell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE
                cell.HorizontalAlignment = align
                cell.PaddingBottom = 0.0F
                cell.PaddingTop = 0.0F
                Return cell
            End Function

Edited by gbhs

Attachments Capture.JPG 10.89 KB
2
Contributors
1
Reply
11
Views
11 Months
Discussion Span
Last Post by Michael Br
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.