2012-08-31 59 views
1

考慮到與域PDF表單中已作規定的,我希望能夠把這樣的表單字段中的一個:如何在PDF表單域*中粗體顯示特定文本,然後使用iTextSharp將表單*變平?

羅德里戈,你是不是父親!

使用iTextSharp的,我可以做到這一點(雖然有點苦),使用富文本的值和傳遞代表與適當的粗體標記的內容的XML,作爲每this answer

但是,根據同樣的答案(以及我的第一手經驗),在完成此操作後,無法鎖定+平鋪表單(以防止進一步編輯)。不幸的是,在這種情況下,這也是必要的。

previously-mentioned answer的作者提到,這可能可以通過「[有Javascript],當它打開的表單強制Acrobat/Reader爲你建立外觀時重置字段值」。

你如何添加Javascript代碼到PDF(最好是通過iTextSharp的本身,雖然我們可能能夠做到這一點的文件本身在後端),使得當表單打開它執行迫使PDF閱讀器爲你建立外觀?

此外,這將允許我們不必說GenerateAppearances = false,因此,讓我們鎖定和扁平化的形式?

如果不是,是否還有其他的東西,除了iTextSharp,這將允許我們使表單字段中的某些單詞變成粗體,同時也鎖定和拼合表單,以防止我們完成後的編輯工作?

回答

1

正如我發現有一種方法來實現這一目標,雖然沒有通過任何特別優雅的手段(我知道)。

您這樣做的方式是使用iTextSharp至直接在現有表單字段上寫一個文本字段。

這裏的主要警告是,PDF不再成爲一種形式,基本上,所以如果你需要閱讀表單字段的內容,你會被打爛。另一方面,如果表單字段基本上被用作簡單指南來幫助告訴iTextSharp將文本放在pdf上的哪個位置(並且僅用於輸出),那麼這可能是正常的。

using (FileStream filestream = new FileStream(outputpath, FileMode.CreateNew, FileAccess.Write)) 
{ 
    var stamper = new PdfStamper(reader, filestream); 

    var acroFields = stamper.AcroFields; 

    string fieldName = "Field Name"; 
    var fieldPositions = acroFields.GetFieldPositions(fieldName); 

    var helveticaBold = FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 14); 
    var helveticaRegular = FontFactory.GetFont(FontFactory.HELVETICA, 14); 

    List<Chunk> chunks = new List<Chunk>(); 

    chunks.Add(new Chunk("Rodrigo, you are ", helveticaRegular)); 
    chunks.Add(new Chunk("NOT", helveticaBold)); 
    chunks.Add(new Chunk(" the father!", helveticaRegular)); 

    Phrase currentPhrase = new Phrase(); 

    foreach (Chunk chunk in chunks) 
    { 
     currentPhrase.Add(chunk); 
    } 

    foreach (var currentPosition in fieldPositions) 
    { 
     PdfContentByte currentCanvas = stamper.GetOverContent(currentPosition.page); 

     ColumnText currentColumnText = new ColumnText(currentCanvas); 

     currentColumnText.SetSimpleColumn(currentPhrase, currentPosition.position.Left, 
              currentPosition.position.Bottom, currentPosition.position.Right, 
              currentPosition.position.Top, 13, Element.ALIGN_LEFT); 
     currentColumnText.Go(); 
    } 

    stamper.FormFlattening = true; 
    stamper.Close(); 
} 
+0

檢查此其他方法:http://stackoverflow.com/q/15644655/114029 –

相關問題