更改PDF – 文本重新定位
有没有办法将现有pdf页面内的文本移动/移动 到其他位置 ?
就像在区域x = 100处有一些文本,y = 100,w = 100,h = 100并且我想将其移动到x = 50,y = 200,w = 100,h = 100。
我做了很多研究,似乎iTextSharp
无法做到这一点。 PDFSharp
声称它可以完成,但我找不到任何例子。
一种方法是制作我想要移动的文本的特定区域的位图,在该区域上绘制白色矩形并在新位置插入位图。 我不想使用这个解决方案,因为我使用超过1K页面的大型pdf文件,其中每个页面都必须被更改。
我发现的是,我需要找到一种方法来改变文本定位操作符(文本矩阵和文本状态参数),这并不是那么简单。
有人有什么想法吗?
我认为如果所有PDF文件都是来自同一个应用程序的简单(不复杂),就可以完成。
如果你需要这个例如一个用户可以上传文件的网站,那么最好忘记它:你永远不会得到一个能与任何PDF文件完美配合的解决方案。
PDFsharp可以提供帮助 – 但AFAIK PDFsharp只能满足您的需求的一半。 PDFsharp将为您提供组成PDF文件的块。 您必须解析块以查找绘图指令,检查位置并重新定位它们。
有些应用程序甚至不会绘制单词,因此可以用3个块(可能是“He”,“ll”和“o”)绘制一个简单的单词,如“Hello”。 你可能要注意这个; 如果所有文件都来自同一个应用程序,可能不会。
我认为这里显示的代码提取文本可能会有所帮助:
http://forum.pdfsharp.net/viewtopic.php?p=4010#p4010
要重新定位文本,您必须首先找到它 – 还需要许多额外的工作……
您可以使用Page.Contents.Elements.RemoveAt删除对象。(8)通过检查Page.Contents.Elements.Count来validation元素计数。
您可以获取每个元素的字符串值(进行一些字符串validation),您可以获取如下数据。
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; }
或者您可以在新位置绘制并创建只读文本表单
如果可以选择商业库而不是PDFSharp,您可以尝试使用Amyuni PDF Creator .Net或Amyuni PDF Creator ActiveX 。 方法IacDocument.GetObjectsInRectangle允许您检索指定矩形的所有“图形对象”,然后您可以为每个x
和/或y
坐标添加特定值以在页面上移动这些对象。 从文档:
IacDocument.GetObjectsInRectangle Method The GetObjectsInRectangle method gets all the objects that are in the specified rectangle.
通常的免责声明适用。