2013-11-25 56 views
1

我有一個包含總計字段的交互式pdf表單,當用戶填寫其他字段時,這些字段會自動實現,並且它的工作非常好。但是當我用java編程使用iText進行填充時,正常的填充效果非常好,但具有自動計算的功能不起作用並顯示爲零。自動計算字段不能與iText一起工作

static String book = "myForm.pdf"; 
static String bookstamp = "myFormTest.pdf"; 
PdfReader reader = new PdfReader (book); 
PdfStamper stamper = new PdfStamper (reader, new FileOutputStream (String.format (bookstamp))); 
stamper.getAcroFields(); 
stamper.setField ("ca50", "15000"); 
stamper.getAcroFields() ; 
stamper.setField ("ca30", "150"); 
stamper.close(); 
+0

你有一些代碼? – kmas

+0

你可以編輯你的帖子。 ;) – kmas

回答

2

自動計算PDF中的字段值通過PDF中的Javascript進行。在某些事件發生的情況下(例如,某個字段的值發生了變化或者某個字段的焦點丟失了),執行該Javascript並將字段值設置爲新計算的值。

另一方面,iText不運行任何Javascript。在iText中,只有您明確更改的PDF部分纔會更改,不需要副作用。

因此,爲了在用iText編輯PDF文件後打開PDF時顯示適當的重新計算的字段,還應該在打開PDF時觸發字段的重新計算。

如果您提供PDF文件本身,您可以看到如何做到這一點。

PS:當文檔被加入

stamper.addJavaScript("this.calculateNow();"); 
reader.removeUsageRights(); 

開盤前

stamper.close(); 

不幸的是這將禁用文檔的閱讀器,使您可以觸發重新計算。

+0

好的,謝謝你,這是非常明確的和邏輯http://www.mfdgi.gov.dz/Serie%20G%20n50%20V1.1.pdf這裏是我正在處理的pdf的鏈接。 – user3032668

+0

雖然增加了一些JavaScript變通方法,但它會導致讀卡器啓用。在您的用例中需要Reader-Enabling嗎? – mkl

+0

非常感謝mkl:D它完美的工作,並且我不需要Reader-Enabling。 – user3032668