2010-01-19 205 views
3

我想問問是否可以使用xpdf庫來編輯PDF文件,如果是的話,怎麼辦?我想這是可能的,但我找不到任何教程,也沒有文件的xpdf,所以我真的不知道:(。我也打開使用另一個庫,如果其他任何支持pdf編輯。圖書館是,它必須是一個C++庫或至少ç一體,並擁有跨平臺(Windows和Linux)使用XPDF編輯PDF(或用別的東西)

我只需要例如PDF文件的基本編輯:

「這是一個pdf文檔中的文本」將被改爲「這是一個t ext in pdf「,以及不同的文字顏色。

感謝您的回覆!

回答

12

爲了讓您瞭解所涉及的範圍,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。問題是許多倍:

  1. 你必須把解壓出來的頁面和它的所有資源(非平凡)
  2. 你必須生成一個新的頁面,插入新的資源(您要添加一個新的字體),如果允許,嵌入字體
  3. 更改頁面的內容流以包含更改的內容。

而3是你會被掛掉的地方,因爲有無數的方法可以生成你描述的內容的頁面,甚至有一個體面的圖書館,你將有很難得到它們中的70%。讓我簡要描述爲什麼這聽起來很糟糕。有一些PDF生成程序(我在看你,troff),首先在頁面上放置所有純文本,然後放置所有斜體文本,然後放置所有粗體文本。我發誓,我沒有這樣做。有些程序想要精確地放置文本,所以如果你很幸運的話,他們會使用TJ操作符,用特定的字距排列文本。如果你不幸運的話(大多數情況下),他們會在頁面上的每個字形之前用一組移動來佈局文本。如果你的文本是以曲線或不尋常的方向(地圖,廣告)來展示的話?那麼有人爲了更大的區分大小寫或模擬小型大寫字母而巧妙地改變字體大小的情況呢?

這就是爲什麼當我爲Acrobat 1.0編寫查找文本工具時,花了兩個月的汗水來處理許多邊緣情況。這不是編輯文本 - 它只是試圖找到一個單詞或短語。

我不會爲你推薦一個庫 - 對不起 - 我給了xpdf一個簡要的介紹,目前還不清楚它是否具有PDF生成功能,或者它是否只是PDF的使用者。 PdfLib是一種商業產品,似乎是生成PDF,雖然目前尚不清楚它是否可以使用PDF,但您可以通過將它們粘合在一起來獲得雙方。

如果是我,我會使用我開發的工具,而且我仍然對這項任務有點害羞。我工作的公司Atalasoft正在使用我的圖書館從整個布料生成PDF並在非常有限的域(註釋,文檔元數據)中進行編輯。最難的部分是我們盡最大努力從客戶那裏隱藏PDF的複雜性。一般來說,我們的客戶希望us能夠理解規範而不是其他規則,但其他任務如此(編輯是另一種規則),在理解PDF規範的深度時很難做到。如果你開始進入PDF操作的圖書館世界,你應該從閱讀規範開始,特別是第8章(圖形)和第9章(文本),並且你會更好地理解你將要做的事情與圖書館。

+0

感謝您的咆哮。很多人只是不知道他們在問什麼。 – Lothar 2017-01-13 19:20:34

0

你看過Itext/ISHarp來編輯PDF文件嗎?

+0

以及我只是在尋找C++庫,Java或C#不是我的選擇。 – 2010-01-19 19:17:50

+1

itext無法修改頁面上的文本 – 2011-10-14 16:56:12

2

xpdf是一個只讀的PDF庫。它不能寫更多的PDF修改內容。

0

雖然不是傳統意義上的圖書館,但Pdfedit具有可編寫腳本的編輯功能。但它需要QT。 PodoFo可能最符合您的要求。還有PdfHummus

但請注意,如果您希望編輯PDF以外的工具生成的文本,那麼您可能會遇到一些問題。問題是 - 並且@plinth提到它 - 有很多方法可以生成看起來相似的文本,但是上下文彼此非常不同。