我正在为我的问题搜索解决方案。
我尝试使用itextsharp修改出现在pdf文档特定位置的文本。
有人可以帮忙吗?
SOLUTION:
我已经决定写这个:
public bool StampOnPDF(string _PathPDF, string _text, string _Total)
{
string _fileName = Path.GetFileName(_PathPDF);
string oldFile = _PathPDF;
string BackupPDF = _PathPDF.Replace(".pdf", "_old.pdf");
File.Copy(oldFile, BackupPDF);
iTextSharp.text.Rectangle Zone1 = new iTextSharp.text.Rectangle(495, 157, 540, 148);
iTextSharp.text.Rectangle Zone2 = new iTextSharp.text.Rectangle(495, 130, 540, 105);
using (PdfReader reader = new PdfReader(BackupPDF))
using (PdfStamper stamper = new PdfStamper(reader, new FileStream(oldFile, FileMode.Create)))
{
PdfContentByte pbover = stamper.GetOverContent(1);
Zone1.BackgroundColor = BaseColor.WHITE;
pbover.Rectangle(Zone1);
Zone2.BackgroundColor = BaseColor.WHITE;
pbover.Rectangle(Zone2);
// select the font properties
var normalFont = FontFactory.GetFont(FontFactory.HELVETICA, 12);
var boldFont = FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 12);
normalFont.Size = 8;
boldFont.Size = 8;
string text = _testo;
ColumnText.ShowTextAligned(pbover, Element.ALIGN_CENTER, new Phrase(text, normalFont), 300, 180, 0);
text = _Total;
ColumnText.ShowTextAligned(pbover, Element.ALIGN_CENTER, new Phrase(text, boldFont), 523, 115, 0);
ColumnText.ShowTextAligned(pbover, Element.ALIGN_CENTER, new Phrase(text, normalFont), 523, 150, 0);
}
return true;
}
答案 0 :(得分:3)
这个问题不是一个小问题。 为了理解原因,让我们看一段PDF文档。
[a, -28.7356, p, 27.2652, p, 27.2652, e, -27.2652, a, -28.7356, r, 64.6889, a, -28.7356, n, 27.2652, c, -38.7594, e, 444] TJ
/R10 10.44 Tf
68.16 0.24 Td
[", 17.1965, P, -18.7118, i, -9.35592, l, -9.35592, o, -17.2414, t, -9.35636, ", 17.1965, , 250] TJ
这段代码告诉观众渲染单词"外观"。 你在这里看到的是每个呈现的单个字母。 语法是<字距信息> <字母GT; TJ(=文本渲染指令)。
这应该让你知道用其他东西替换一段文字会有多难。 如果您将现有单词缩短,则需要再次移动所有其他字母。这个问题被称为" reflowing"文本。回流,不是可以通过pdf文档轻松完成的事情。要实现重排,您需要高级信息(例如哪些单词属于哪些段落)。这种信息水平通常不存在于pdf文档中。
正如@mkl指出的那样,如果您只想删除文本(可能用黑框覆盖它以表明它已被删除),iText肯定可以帮助您。
如果您想覆盖文字,那么(通常)不可能。如果您替换它的单词具有相同的字母并且您不太关心布局,则可以这样做。 (因为像" iText"这样的词可能不会占用与#34; Jazzy")相同的空间。