我使用下面的代码在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();
答案 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 ...