以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何给PDF文件添加水印  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=120690)

--  作者:5159518
--  发布时间:2018/6/21 23:01:00
--  [求助]如何给PDF文件添加水印
请教老师,我现在有一个表中有一个二进制列,用来存储pdf文件,现在想在这个PDF文件中添加三行水印,分别是:

订单已作废
作废日期:& 【作废日期】
操作人:& 【操作人】

请问老师,应该如何编写代码?

请老师做好代码注释,咱是小白,嘻嘻,还请老师指点

--  作者:有点甜
--  发布时间:2018/6/22 0:07:00
--  

mark pdf水印

 

Dim waterMarkName As String = "aaaaaabbbbcccc"
Dim reader As New iTextSharp.text.pdf.PdfReader("d:\\test.pdf")

Dim msWater As new io.FileStream("d:\\123.pdf", io.FileMode.Create)


Dim total  As Integer = reader.NumberOfPages
Dim pdfStamper As new iTextSharp.text.pdf.PdfStamper(Reader, msWater)

Dim psize = Reader.GetPageSize(1)
Dim width = psize.Width
Dim height = psize.Height
Dim gs As new iTextSharp.text.pdf.PdfGState
Dim basefont  As iTextSharp.text.pdf.BaseFont = iTextSharp.text.pdf.BaseFont.CreateFont("C:\\WINDOWS\\Fonts\\SIMYOU.TTF", iTextSharp.text.pdf.BaseFont.IDENTITY_H, iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED)
For i As Integer = 1 To total
   
    Dim waterContent = pdfStamper.GetOverContent(i)
    waterContent.SetGState(gs)
    waterContent.BeginText()
    waterContent.SetColorFill( iTextSharp.text.BaseColor.RED)
    waterContent.SetFontAndSize(basefont, 18)
    waterContent.SetTextMatrix(0, 0)
    waterContent.ShowTextAligned(iTextSharp.text.Element.ALIGN_CENTER, waterMarkName, width / 2, height / 2, 55)
    waterContent.EndText()
Next

pdfStamper.close
reader.Close()


--  作者:有点甜
--  发布时间:2018/6/22 0:12:00
--  

2楼的代码,你要先引用dll

 

下载信息  [文件大小:1.3 MB  下载次数:5]
图片点击可在新窗口打开查看点击浏览该文件:itextsharp.zip


--  作者:5159518
--  发布时间:2018/6/22 0:58:00
--  
谢谢老师,只是代码没有注释,一时半会看不明白,不知道要如何修改才能完全嵌入到我的代码里面
--  作者:5159518
--  发布时间:2018/6/22 1:00:00
--  
另外,我需要添加的是三行水印,应该如何修改?
--  作者:5159518
--  发布时间:2018/6/22 2:13:00
--  
Dim waterMarkName As String = "报价单已作废!" & vbcrlf & " 作废日期: " & dr("作废日期")  & vbcrlf & "操作人: " & dr("作废人")

这行代码究竟错在哪里呢?编译没有报错,可是执行完之后没有换行,究竟啥意思?

--  作者:有点甜
--  发布时间:2018/6/22 10:11:00
--  

参考代码

 

 

Dim waterMarkName As String = "aaaaaabbbbcccc" & chr(13) & "123456" & chr(13) & "11111"
Dim reader As New iTextSharp.text.pdf.PdfReader("d:\\test.pdf")

Dim msWater As new io.FileStream("d:\\123.pdf", io.FileMode.Create)

Dim total  As Integer = reader.NumberOfPages
Dim pdfStamper As new iTextSharp.text.pdf.PdfStamper(Reader, msWater)

Dim psize = Reader.GetPageSize(1)
Dim width = psize.Width
Dim height = psize.Height
Dim gs As new iTextSharp.text.pdf.PdfGState
Dim basefont  As iTextSharp.text.pdf.BaseFont = iTextSharp.text.pdf.BaseFont.CreateFont("C:\\WINDOWS\\Fonts\\SIMYOU.TTF", iTextSharp.text.pdf.BaseFont.IDENTITY_H, iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED)
For i As Integer = 1 To total
    Dim waterContent = pdfStamper.GetOverContent(i) \'GetUnderContent(i)
    waterContent.SetGState(gs)
    waterContent.BeginText()
    waterContent.SetColorFill( iTextSharp.text.BaseColor.RED)
    waterContent.SetFontAndSize(basefont, 18)
    waterContent.SetTextMatrix(0, 0)
    Dim ary = waterMarkName.split(chr(13))
    For j As Integer = 0 To ary.length-1
        Dim s As String = ary(j)
        s = s.PadRight(20)
        waterContent.ShowTextAligned(iTextSharp.text.Element.ALIGN_left, s, (width-50)/2+j*20, height / 2-30*j, 45)
    Next
    waterContent.EndText()
Next

pdfStamper.close
reader.Close()


--  作者:5159518
--  发布时间:2018/6/22 12:41:00
--  
谢谢老师,幸苦了