How to draw watermark text whose outline color is red and inner color is gray using iTextSharp

陌路散爱 提交于 2019-12-08 14:07:01

问题


How to draw watermark text whose outline color is red and inner color is gray using iTextSharp


回答1:


If you are using a watermark I'm assuming that you are talking about a PdfStamper. If so, once you've got a raw PdfContentByte using either GetOverContent() or GetUnderContent() there's just a couple of properties that you need to set.

  • PdfContentByte.SetLineWidth(single) - set the stroke thickness
  • PdfContentByte.SetColorFill(BaseColor.GRAY) - set the fill color. You can also use any of the other color methods such as SetRGBColorFill() or SetCMYKColorFill()
  • PdfContentByte.SetColorStroke(BaseColor.RED) - set the stroke color
  • PdfContentByte.SetTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL_STROKE) - flag that you want text to be draw with both a fill and a stroke

Below is a full working WinForms app targetting iTextSharp 5.1.1.0 that puts it all together. You should be able to move this to ASP.Net fairly easily as well as convert it to C# if needed.

Option Explicit On
Option Strict On

Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports System.IO

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ''//Our sample files
        Dim InputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.pdf")
        Dim OutputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test_W_Watermark.pdf")

        ''//Create our input file to watermark later, nothing special here
        Using FS As New FileStream(InputFile, FileMode.Create, FileAccess.Write, FileShare.Read)
            Using Doc As New Document(PageSize.LETTER)
                Using W = PdfWriter.GetInstance(Doc, FS)
                    Doc.Open()

                    Doc.Add(New Paragraph("This is a test"))

                    Doc.Close()
                End Using
            End Using
        End Using


        ''//Watermark the file that we create above

        ''//Bind a reader to our input file
        Dim R As New PdfReader(InputFile)
        ''//Create our output file stream
        Using FS As New FileStream(OutputFile, FileMode.Create, FileAccess.Write, FileShare.Read)
            ''//Bind a stamper to our output file stream
            Using stamper As New PdfStamper(R, FS)
                ''//Grab the raw content byte to draw with
                Dim cb = stamper.GetOverContent(1)

                ''//Flag that we are starting text commands
                cb.BeginText()

                ''//Set the stroke width
                cb.SetLineWidth(2)

                ''//Set the fill (inner) color for the font
                cb.SetColorFill(BaseColor.GRAY)

                ''//Set the stroke (outer) color for the font
                cb.SetColorStroke(BaseColor.RED)

                ''//Flag that when drawing text the system should use both a fill and a stroke
                cb.SetTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL_STROKE)

                ''//Set a font to draw with
                cb.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.EMBEDDED), 50)

                ''//Tell the system to start drawing at the center of the first page
                cb.SetTextMatrix(R.GetPageSize(1).Width / 2, R.GetPageSize(1).Height / 2)

                ''//Draw the actual text
                cb.ShowText("Hello")

                ''//Flag that we are done drawing text
                cb.EndText()
            End Using
        End Using
        Me.Close()
    End Sub
End Class


来源:https://stackoverflow.com/questions/7832671/how-to-draw-watermark-text-whose-outline-color-is-red-and-inner-color-is-gray-us

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!