如何使用asp.net在扫描的PDF中插入文本

时间:2016-08-31 08:33:52

标签: asp.net pdf itext

我使用下面的代码在PDF文件中添加文字。但是下面的代码不适用于扫描的PDF。如果您有任何想法,请帮助我。

string oldFile = "C:\\PDF\\Memo1.pdf";
string newFile = "C:\\PDF\\MemoNew1.pdf";
PdfReader reader = new PdfReader(oldFile);
Rectangle size = reader.GetPageSizeWithRotation(1);
Document document = new Document(size);
FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write);
PdfWriter writer = PdfWriter.GetInstance(document, fs);
document.Open();
PdfContentByte cb = writer.DirectContent;
BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
cb.SetColorFill(BaseColor.DARK_GRAY);
cb.SetFontAndSize(bf, 8);
cb.BeginText();
string text = "AAAAAAAAAAAAAA...";
cb.ShowTextAligned(1, text, 520, 640, 0);
cb.EndText();
cb.BeginText();
text = "ZZZZZZZZZZZZZZZZZZZZZ...";
cb.ShowTextAligned(2, text, 100, 200, 0);
cb.EndText();
PdfImportedPage page = writer.GetImportedPage(reader, 1);
cb.AddTemplate(page, 0, 0);
document.Close();
fs.Close();
writer.Close();
reader.Close();

1 个答案:

答案 0 :(得分:1)

OP的代码首先将写入添加到页面画布

BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
cb.SetColorFill(BaseColor.DARK_GRAY);
cb.SetFontAndSize(bf, 8);
cb.BeginText();
string text = "AAAAAAAAAAAAAA...";
cb.ShowTextAligned(1, text, 520, 640, 0);
cb.EndText();
cb.BeginText();
text = "ZZZZZZZZZZZZZZZZZZZZZ...";
cb.ShowTextAligned(2, text, 100, 200, 0);
cb.EndText();

然后在其上放置一个现有页面:

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

因此,导入页面的每个部分都包含不透明的内容,涵盖了下面写的内容。

如果页面包含使用文本命令绘制的文本,则只有实际文本是不透明的,"白色"它周围实际上是透明的。如果在OP的写作中放置了这样的页面,那么大部分内容仍然可见。

如果页面包含扫描,通常会有一个大的,页面大小的位图图像,其中" white"实际上是不透明的白色,不透明。如果在OP的写作中放置了这样的页面,那么所有的写作都是隐藏的。

有多种方法可以解决这个问题:

  • 最简单的一个:更改指令的顺序,首先添加页面,然后添加写作:

    PdfImportedPage page = writer.GetImportedPage(reader, 1);
    cb.AddTemplate(page, 0, 0);
    BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
    cb.SetColorFill(BaseColor.DARK_GRAY);
    cb.SetFontAndSize(bf, 8);
    cb.BeginText();
    string text = "AAAAAAAAAAAAAA...";
    cb.ShowTextAligned(1, text, 520, 640, 0);
    cb.EndText();
    cb.BeginText();
    text = "ZZZZZZZZZZZZZZZZZZZZZ...";
    cb.ShowTextAligned(2, text, 100, 200, 0);
    cb.EndText();
    
  • 没有那么复杂:首先将混合模式设置为变暗乘以,然后按任意顺序添加。这是使用 ExtGState

    完成的
    PdfGState gs1 = new PdfGState();
    gs1.BlendMode = new PdfName("Darken");
    cb.SetGState(gs1);
    ...
    ... add content in any order ...