我需要加载pdf,添加文本并保存在新文件中。 使用此代码看起来工作,但我有一些图像文本在图像下,我无法看到它。 我能做什么 ?
Dim oldFile As String = Application.StartupPath & "\old.pdf"
Dim newFile As String = Application.StartupPath & "\new.pdf"
Dim reader As New PdfReader(oldFile)
Dim size As Rectangle = reader.GetPageSizeWithRotation(1)
Dim document As New Document(size)
Dim wNnumberOfPages As Integer = reader.NumberOfPages
Dim fs As New FileStream(newFile, FileMode.Create, FileAccess.Write)
Dim writer As PdfWriter = PdfWriter.GetInstance(document, fs)
document.Open()
Dim cb As PdfContentByte = writer.DirectContent
Dim bf As BaseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
Dim wPage As Integer
For wPage = 1 To wNnumberOfPages
Dim _text As String = "TEXT"
Dim Page As PdfImportedPage = writer.GetImportedPage(reader, wPage)
cb.BeginText()
cb.SetFontAndSize(bf, 10)
cb.ShowTextAligned(2, _text, 470, 760, 0)
cb.EndText()
cb.AddTemplate(Page, 0, 0)
document.NewPage()
Next
document.Close()
fs.Close()
writer.Close()
reader.Close()
答案 0 :(得分:2)
首先绘制文本,然后绘制导入的页面:
Dim Page As PdfImportedPage = writer.GetImportedPage(reader, wPage)
cb.BeginText()
cb.SetFontAndSize(bf, 10)
cb.ShowTextAligned(2, _text, 470, 760, 0)
cb.EndText()
cb.AddTemplate(Page, 0, 0)
因此,导入页面中文本位置的任何内容都将覆盖它。
如果您首先绘制导入的页面然后是文本,则您的文本将位于导入页面的内容之上:
Dim Page As PdfImportedPage = writer.GetImportedPage(reader, wPage)
cb.AddTemplate(Page, 0, 0)
cb.BeginText()
cb.SetFontAndSize(bf, 10)
cb.ShowTextAligned(2, _text, 470, 760, 0)
cb.EndText()
话虽如此,如果您只想在现有PDF的页面上标记某些内容,则应使用PdfStamper
代替PdfWriter
GetImportedPage
。 PdfStamper
类明确地用于此类任务,并非常忠实地复制源文档中的所有内容。另一方面,您的方法会丢弃原始PDF中的所有交互式和元数据内容。