我想问一下,是否可以使用xpdf库编辑文件?如果可以,如何编辑?我想这是可能的,但是我找不到xpdf的任何教程和文档,所以我真的不知道:如果其他库支持pdf编辑,我也可以使用另一个库。我对这种库的唯一要求是它必须是一个C++库,或者至少是一个C库,并且必须是跨平台的(Windows和Linux)。
我只需要基本编辑一个pdf文件,例如:
“这是一个文本在一个pdf文档”将改为“这是一个文本在pdf”与不同的文本颜色,以及。
谢谢你的回复!
发布于 2010-01-20 15:54:49
为了让您了解您要进入的范围,PDF内容的“基本编辑”几乎总是不平凡的。
PDF中的页面内容由在页面上绘制的简短RPN程序表示。它在语义上类似于PostScript,但没有循环结构或函数定义(因此没有停止问题)。在一个理智的世界中,页面上的文本将由如下内容表示:
BT /F1 12 Tf 72 720 Td (this is a text in a pdf document) Tj ET当翻译成更熟悉的东西时,是这样的:
BeginText();
SetFont(F1, 12.0); // Font 1, 12.0 pt
TextMoveTo(72, 720);
ShowText("this is a text in a pdf document");
EndText();所以在这种情况下,你必须把它转换成这样的东西:
BeginText();
SetFont(F1, 12.0); // Font 1, 12.0 pt
TextMoveTo(72, 720);
ShowText("this is a ");
SetFont(F2, 12);
ShowText("text");
SetFont(F1, 12);
ShowText(" in a pdf document");
EndText();这将成为:
BT /F1 12 Tf 72 720 Td (this is a ) Tj /F2 12 Tf (text) Tj /F1 12 Tf
( in a pdf document) Tj ET相当于PDF格式。问题有很多方面:
第三种是你会被挂起的地方,因为有无数种方法可以生成一个有你描述的内容的页面,即使有一个像样的库,你也很难获得其中的70%。让我简单地描述一下为什么这件事像听起来那么糟糕。这里有PDF生成程序(我正在看你,特洛夫),它首先将所有纯文本放在页面上,然后放置所有斜体文本,然后是所有粗体文本。我发誓,这不是我编的。有些程序想要非常精确地放置文本,所以如果你幸运的话,他们会使用TJ操作符,它用特定的kerning来布局文本。如果你运气不好(这是大多数时候的情况),他们会在页面上的每一个字形之前用一组移动设置文本。如果你的文字被放置在一个曲线或一个不寻常的方向(地图,广告)上呢?如果有人巧妙地改变字体大小,以更好地区分大写和小写,或者模拟小盘,那该怎么办呢?
这就是为什么当我为Acrobat1.0编写时,我花了两个月的时间来处理同样多的边缘情况。这不是编辑文本-它只是试图找到一个词或短语。
我不会向你推荐一个库--对不起--我给了xpdf一个简短的浏览,还不清楚它是否具有PDF生成功能,或者它是否只是PDF的消费者。PdfLib是一种商业产品,它似乎是用来生成PDF的,虽然还不清楚它是否可以使用它,但是通过将它们粘合在一起,当然可以得到两者。
如果是我的话,我会使用我开发出来的工具,我仍然会对这个任务有些害羞。我的库正被我工作的阿塔拉索公司使用,用于从全布上生成PDF,并在非常有限的范围内进行编辑(注释、文档元数据)。最困难的部分是,我们尽最大努力向客户隐藏PDF的复杂性。一般来说,我们的客户希望us来代替他们理解规范,并使其他任务变得容易--但是这样的任务(编校是另一项任务),如果不理解PDF规范的深度,就很难做到。如果您开始进入PDF操作的库世界,您应该从阅读规范开始,特别是第8章(图形)和第9章(文本),这样您就可以更好地理解您与库的关系。
发布于 2011-10-14 16:56:55
xpdf是一个只读PDF库.它不能写PDF,更不用说修改内容了。
发布于 2010-01-19 17:21:50
你看过Itext/ISHarp来编辑PDF文件吗?
https://stackoverflow.com/questions/2094253
复制相似问题