2017-05-04 71 views
0

我正在构建一个使用iTextSharp编辑PDF文件的网络应用程序。ItextSharp MVC5 C# - 现有PDF文件前面的文本

当我尝试写入PDF时,文本被打印在现有内容后面,但是我需要将它打印在其上。

有人可以向我解释我怎样才能为我的文本设置深度属性?

这是我的代码

using (var reader = new PdfReader(oldFile)) 
{ 
    using (var fileStream = new FileStream(newFile, FileMode.Create, FileAccess.Write)) 
    { 
     var document = new Document(reader.GetPageSizeWithRotation(1)); 
     var writer = PdfWriter.GetInstance(document, fileStream); 

     document.Open(); 

     try 
     { 
      PdfContentByte cb = writer.DirectContent; 

      cb.BeginText(); 
      try 
      { 
       cb.SetFontAndSize(BaseFont.CreateFont(), 12); 
       cb.SetTextMatrix(10, 100); 
       cb.ShowText("Customer Name"); 
      } 
      finally 
      { 
       cb.EndText(); 
      } 

      PdfImportedPage page = writer.GetImportedPage(reader, 1); 
      cb.AddTemplate(page, 0, 0); 

     } 
     finally 
     { 
      document.Close(); 
      writer.Close(); 
      reader.Close(); 
     } 
    } 
} 

This how the pdf looks like, one word is behind the table

回答

0

能向我解释的人我怎么可以设置为我的文字的深度财产?

全文不具有明确的深度或z轴属性。因此,首先绘制的内容由后面的内容所覆盖。

所以,如果你想拥有在你添加的文本模板,你应该拉代码添加模板的代码之前添加文字:

PdfContentByte cb = writer.DirectContent; 

PdfImportedPage page = writer.GetImportedPage(reader, 1); 
cb.AddTemplate(page, 0, 0); 

cb.BeginText(); 
try 
{ 
    cb.SetFontAndSize(BaseFont.CreateFont(), 12); 
    cb.SetTextMatrix(10, 100); 
    cb.ShowText("Customer Name"); 
} 
finally 
{ 
    cb.EndText(); 
} 

或者您可以利用上午iTextSharp的特点:它实际创建了两个内容流,即直接内容和下面的内容,并将下面的内容放在直接内容之前。

因此,如果重新安排上面的代码不适合您,您可以将背景添加到底层内容而不是直接内容。

+1

哇!谢谢!!!这工作完美!非常感谢!!! :) –

相关问题