2017-10-11 52 views
1

我需要加载pdf,添加文本并保存到新文件中。 有了这段代码看看工作,但我有一些图像下的图像中的文字,我看不到它。 我能做些什么?itextsharp中的图像文字

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

你先绘制文本,然后绘制导入的页面:

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而不是PdfWriterGetImportedPage。明确的PdfStamper类用于这些任务,并非常忠实地复制源文档中的所有内容。另一方面,您的方法会从原始PDF中删除所有交互和元数据内容。