2014-02-24 51 views
0

我有一個問題,iText和平面格式字段在PDF文件中。文本的不同位置通過平面PDF格式與iText

我提交了一個PDF格式的表單域,在Acrobat中創建了我的java方法。在一個網站上,我創建了一個表格來填寫pdf中的表單域。表單域被正確填充,但只要我將文檔弄平,文本就會移到一個不同的位置。最大的區別在於多行表單字段。那裏的文字在左上角的字段邊界。在Acrobat中,在拼合之前,文本的頂部有填充。

這裏是我的Java代碼來調用iText的方法:

PdfReader template = new PdfReader(templ); 
XfdfReader xfdfReader = new XfdfReader(xfdf); 
OutputStream outputStream = new FileOutputStream(output); 
PdfStamper stamper = new PdfStamper(template, outputStream, '\0'); 

AcroFields form = stamper.getAcroFields();            

Set<String> fields = form.getFields().keySet(); 

form.setFields(xfdfReader); 

stamper.setFreeTextFlattening(true);    
stamper.setFormFlattening(true);  
stamper.close(); 
template.close(); 

任何人有一個想法,爲什麼當我拼合PDF文本被感動?我怎樣才能避免這種情況?

我已經嘗試了iText的不同版本。從版本4.X到5.X.所有版本都會出現差異。

儘管我試圖移動iText的代碼中的表單域,但是隨後整個域都在移動,並且位置的差異更大並​​且不可預測。

在我的項目中,文本必須與Acrobat中的文字位置完全相同,所以我必須爲此錯誤行爲找到解決方法。我希望有人能幫助我。

感謝您的幫助提前。

+0

多年來,PDF文件中字段基線的位置已經發生變化。根據您使用的Acrobat版本,您甚至會看到差異。除非您知道確切的偏移量,否則沒有解決您的問題的方法。如果這樣做,則可以使用http://api.itextpdf.com/itext/com/itextpdf/text/pdf/AcroFields.html#setExtraMargin%28float,%20float%29在展平文檔時更改所有字段的偏移量。 –

+0

@BrunoLowagie謝謝你的提示!這是爲我找到解決方案的線索。如果您將其作爲答案發布,我會將其標記爲正確答案。 – mace

回答

0

多年來,PDF文件中字段基線的位置已經發生了變化。根據您使用的Acrobat版本,您甚至會看到差異。

除非您知道確切的偏移量,否則沒有解決您的問題的方法。如果這樣做,則可以使用setExtraMargin()方法在拼合文檔時更改所有字段的偏移量。

我們創建了此方法來處理具有與預期不同的基線的特定表單。對於不同的形式,您選擇哪些值可能會有所不同。