2014-07-14 75 views
0

將內容填充到模板中,但是我想爲AcroField加下劃線。
我正在使用下面的代碼。 ClassCastException即將到來。下劃線爲java中的AcroFields(iTextSharp)

Font font = FontFactory.getFont("Courier-Bold", 16, Font.UNDERLINE, BaseColor.BLACK); 
fields.setFieldProperty(fieldName, ApplicationConstants.TEXT_FONT, font , null); 

請幫助任何人。
謝謝。

回答

2

請允許我將您的問題分解爲兩個不同的問題。

問題1:您正在創建一個Font對象,你在setFieldProperty()方法使用該對象。

這是錯誤的。 setFieldProperty()方法只接受BaseFont對象作爲字體。這解釋了ClassCastException:你不能投FontBaseFont

這是你將怎樣解決這個:

BaseFont bf = BaseFont.createFont(BaseFont.COURIER_BOLD, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED); 

fields.setFieldProperty(字段名,ApplicationConstants.TEXT_FONT,BF,NULL);

問題2:您想填寫一個正常的文本字段併爲添加的文本加下劃線。

如果您閱讀ISO-32000-1,您會發現這不受支持。

子問題a:「下劃線」不是字體的屬性(也不是顏色)。這是爲了您的方便而添加到iText的Font類中的東西(就像顏色一樣)。

子問題b: PDF規範沒有定義將文本強調爲文本字段的任何標誌。

如果它真的您的要求,強調文本添加到一個領域,你的選擇是:

  1. 獲取字段的位置,並添加使用ColumnText文本。這只是一個選項,如果它是可以接受的扁平化的形式。如果填寫的表單需要保持互動,請使用其他方法。
  2. 將該字段定義爲Rich Text字段。請參閱PDF參考以瞭解有關此類字段的更多信息。如果你選擇這個選項,你可能會自己做。您可以在StackOverflow上發佈另一個問題,但任何人都很難回答。
  3. 構建您自己的/DA。這不是因爲心臟不好。這將需要PDF和iText的良好洞察力。如果你沒有這種洞察力,任何人都可以在你的位置做這件事的機會非常小。另外:如果表單不平坦,只要有人點擊交互式字段,文本下方的行就會消失,因爲子問題b。 (換句話說:選項3大概是不是的一個好主意。)
+0

感謝布魯諾,增加了'ColumnText'。 –

2

這些更改我爲下劃線做了。我在AcroFields的地方添加了使用ColumnText的文字。這工作正常。

private void underlineText(String fieldName, String fieldValue, AcroFields fields, PdfStamper stamper) throws Exception 
{ 
    Rectangle targetPosition = fields.getFieldPositions(fieldName).get(0).position; 
    Font fontNormal = FontFactory.getFont("Courier-Bold", 8, Font.UNDERLINE, BaseColor.BLACK); 
    Anchor url = new Anchor(fieldValue.trim(), fontNormal); 
    ColumnText data = new ColumnText(stamper.getOverContent(1)); 
    data.setSimpleColumn(url, targetPosition.getLeft(), targetPosition.getBottom(), targetPosition.getRight(), targetPosition.getTop(), 0,0); 
    data.go(); 
}