2017-05-26 47 views
3

我試圖寫一個現有的PDF使用Java PDF印模,但由於某種原因有一個複選框在PDF文本似乎是繪製。爪哇PDF下面的郵票寫複選框(文本被複選框覆蓋)

用於閱讀PDF代碼:

PdfReader reader = new PdfReader(Testing.getImagePath() + "form.pdf"); 
File dir = new File(Testing.getResourcePath() + id + "/"); 
String destination = Testing.getResourcePath() + id + "form" + id + ".pdf"; 
File exist = new File(destination); 

dir.mkdirs(); 
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destination)); 
stamper.setFormFlattening(true); 
PdfContentByte over; 
over = stamper.getOverContent(1); 

代碼繪製文字:

over.beginText(); 
over.setFontAndSize(bf, 11); 
over.setTextMatrix(169, 322); 
over.showText("X"); 
over.endText(); 
+0

你從哪裏得到的? – Jan

+0

更新後的代碼。讓我知道是否需要添加任何其他代碼。 – King

+0

目前爲止看起來不錯。在複選框的位置放置一個X(只有它出現在下)聽起來很像你想選擇該複選框? – Jan

回答

1

第一關:

遍歷PDF中的FormFields,並找出有效的值來設置:

 AcroFields form = stamper.getAcroFields(); 
     for(Entry<String, Item> field : form.getFields().entrySet()) { 
      System.out.println(field.getKey() + ": " + field.getValue()); 
      String[] values = form.getAppearanceStates(field.getKey()); 
      StringJoiner sb = new StringJoiner(","); 
      for (String value : values) { 
       sb.add(value); 
      } 
      System.out.println("Possible Options: " + sb.toString()); 
     } 

現在你應該可以通過設置它的允許值來選擇複選框:

 form.setField("myCheckbox", "myYesValue"); 
+0

獲取錯誤 - 「此AcroFields實例是隻讀的。」 – King

+1

你從哪裏得到你的AcroFields?來自Stamper /作者或讀者(在這種情況下,它們將是隻讀的)。將編輯中的代碼分享給您的問題? – Jan

+0

是的,我使用不同的代碼來輸出PDF的ID,並從閱讀器而不是壓模讀取。得到它的工作,謝謝! – King