在itextsharp中的图像上的文本

时间:2017-10-11 09:02:26

标签: vb.net itext

我需要加载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()

1 个答案:

答案 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 GetImportedPagePdfStamper类明确地用于此类任务,并非常忠实地复制源文档中的所有内容。另一方面,您的方法会丢弃原始PDF中的所有交互式和元数据内容。