【问题标题】:Remove or Overwrite Text on PDF in a specific position删除或覆盖 PDF 上特定位置的文本
【发布时间】:2017-08-01 14:26:18
【问题描述】:

我正在为我的问题寻找解决方案。

我正在尝试使用 itextsharp 修改出现在 pdf 文档特定位置的文本。

有人可以帮忙吗?

解决方案:

我已经决定写这个了:

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;                                  
    }               

【问题讨论】:

  • 你试过什么?请与我们分享您的代码,我们将为您提供帮助:)
  • (A) 如何“删除特定位置的文本”---你看过PdfCleanUpProcessor,例如讨论过here(B) 如何覆盖特定位置的文本 --- 使用PdfCleanUpProcessor 清除该区域后,您现在可以绘制适合该区域的任何文本。 (C) 如何“修改出现在特定位置的文本” --- modify 一词可能暗示您希望周围的文本根据某些内容重排所需的格式。如果你真的希望,你很可能会失望。
  • 如果您想发布适合您的问题的解决方案,请不要将其编辑到问题中,而是将其作为答案。另一方面,如果您对那个“解决方案”还不满意,那么只要您指出您不满意哪些方面,就可以将其添加到问题中。话虽如此,您的解决方案确实有一个缺点:旧文本可能不再可见,但它仍然存在。因此,如果您从文档中复制和粘贴(尝试在页面上使用 CTRL-A CTRL-C 并在某些编辑器中使用 CTRL-V),旧文本将在那里!
  • 对于您提出的问题有更好的解决方案吗?

标签: pdf text itext pdf-generation


【解决方案1】:

这个问题不是一个小问题。 要了解原因,让我们看一段 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

这段代码告诉查看者渲染“外观”这个词。 您在这里看到的是正在呈现的每个单独的字母。 语法为 TJ(=文本渲染指令)。

这应该让您了解将一段文本替换为其他内容有多难。 如果您缩短现有单词,则需要再次移动所有其他字母。此问题称为“重排”文本。回流,不是用 pdf 文档可以轻松完成的事情。要实现重排,您需要高级信息(例如哪些单词属于哪些段落)。此级别的信息通常不会出现在 pdf 文档中。

正如@mkl 所指出的,如果您只是想删除文本(也许用黑框覆盖它以表明它已被删除)iText 肯定可以帮助您。

如果您想覆盖文本,这(通常)是不可能的。如果您要替换它的单词具有相同的字母并且您不太关心布局,则可以这样做。 (因为像“iText”这样的词可能不会占用与“Jazzy”相同的空间)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2020-12-28
    • 2019-10-16
    • 2013-06-18
    • 1970-01-01
    • 2018-09-07
    相关资源
    最近更新 更多