【问题标题】:Alter PDF - Text repositioning更改 PDF - 文本重新定位
【发布时间】:2012-02-27 00:21:12
【问题描述】:

有什么方法可以移动/移动现有 pdf 页面内的文本到其他位置

就像在 x=100, y=100, w=100, h=100 区域有一些文本,我想将它移动到 x=50, y=200, w=100, h=100。

我做了很多研究,似乎iTextSharp 无法做到这一点。 PDFSharp 声称可以做到,但我找不到任何例子。

一种方法是制作我要移动的文本的特定区域的位图,在该区域上绘制白色矩形并在新位置插入位图。我不想使用此解决方案,因为我处理的大型 pdf 文件超过 1K 页,每个页面都必须更改。

我发现我需要找到一种方法来更改文本定位运算符(文本矩阵和文本状态参数),这并不简单。

有人有什么想法吗?

【问题讨论】:

  • 这是针对单个 pdf 的,还是您需要可以为任意 PDF 移动文本的东西?
  • 用户可以选择他想要移动的文本区域(矩形)。它适用于单个 pdf 及其所有页面。

标签: c# pdf itextsharp pdfsharp


【解决方案1】:

或者您可以在新位置绘制并创建一个只读文本表单

【讨论】:

    【解决方案2】:

    我认为,如果所有 PDF 文件都来自同一个应用程序的简单(不复杂)文件,则可以做到这一点。
    如果你需要这个,例如一个用户可以上传文件的网站,然后最好忘记它:你永远不会得到一个可以完美处理任何 PDF 文件的解决方案。

    PDFsharp 可以提供帮助 - 但 AFAIK PDFsharp 只能完成您需要的一半。 PDFsharp 将为您提供构成 PDF 文件的块。您必须解析块以找到绘图指令,检查位置并重新定位它们。
    有些应用程序甚至不绘制单词,因此可以将诸如“Hello”之类的简单单词绘制成 3 个块(可能是“He”、“ll”和“o”)。您可能需要注意这一点;如果所有文件都来自同一个应用程序,则可能不会。

    我认为此处显示的用于提取文本的代码可能会有所帮助:
    http://forum.pdfsharp.net/viewtopic.php?p=4010#p4010
    要重新定位文本,您必须首先找到它 - 还需要做很多额外的工作......

    【讨论】:

      【解决方案3】:

      您可以使用 Page.Contents.Elements.RemoveAt(8) 删除对象 通过检查 Page.Contents.Elements.Count 来验证元素计数。

      您可以获取每个元素的字符串值(进行一些字符串验证),您可以获取如下数据。

      public static string GetElementStream(PdfPage page, int elementIndex)
          {
              string strStreamValue;
              byte[] streamValue;
              strStreamValue = "";
      
              if (page.Contents.Elements.Count >= elementIndex)
              {
                  PdfDictionary.PdfStream stream = page.Contents.Elements.GetDictionary(elementIndex).Stream;
                  streamValue = stream.Value;
      
                  foreach (byte b in streamValue)
                  {
                      strStreamValue += (char)b;
                  }
              }
              return strStreamValue;
          }
      

      【讨论】:

        猜你喜欢
        • 2014-09-23
        • 1970-01-01
        • 2022-01-09
        • 2013-03-03
        • 1970-01-01
        • 2019-02-27
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        相关资源
        最近更新 更多