更改PDF-文本重新定位

本文关键字:定位 新定位 PDF- 文本 更改 | 更新日期: 2023-09-27 18:22:50

有没有办法将现有pdf页面中的文本移动到其他位置

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

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

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

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

有人有什么想法吗?

更改PDF-文本重新定位

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

PDFsharp可以帮助你,但AFAIK-PDFshark只做你需要的一半。PDFsharp将为您提供组成PDF文件的块。您必须分析块才能找到图形说明、检查位置并重新定位它们
有些应用程序甚至不画单词,所以像"Hello"这样的简单单词可以画成3个块(可能是"He"、"ll"answers"o")。你可能需要注意这一点;如果所有文件都来自同一个应用程序,则可能不会。

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

您可以使用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;
    }

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