2014-06-26 50 views
0

我正在使用pdfContentByte將內容添加到現有的PDF中。原來在Word中創建的現有PDF文檔有幾個複選框。在適當的時候,我需要在複選框上覆蓋一個'X'。我能做些什麼來使'X'覆蓋複選框。用下面的代碼將'X'放在複選框下。PdfContentByte不會覆蓋複選框

private static void AddField(float xpos, float ypos, string Text, PdfImportedPage page, PdfContentByte cb2, BaseFont f_cn2) 
{ 
    cb2.AddTemplate(page, 0, 0); 
    cb2.BeginText(); 
    cb2.SetFontAndSize(f_cn2, 10); 
    cb2.ShowTextAligned(Element.ALIGN_LEFT, Text, xpos, ypos, 0F); 
    //cb2.SetTextMatrix(xpos, ypos); //(xPos, yPos) 
    //cb2.ShowText(Text); 
    cb2.EndText(); 
} 
+0

在你的標題中,你的意思是_Override_或_Overwrite_? –

回答

1

如果您的複選框是表單域,那麼它使用小部件註釋進行可視化。小部件註釋是一種特定的註釋形式。註釋是交互式功能,不屬於頁面內容流的一部分。它們列在頁面字典的/Annots數組中,並且它們始終添加在頁面內容的頂部。

在您的代碼片段中,我看到一個誤導性名稱爲AddField()的方法。這個名字是誤導性的,因爲你不添加一個字段。您似乎正在將內容添加到內容流中。如果該內容流是頁面的內容流的一部分,則其預計爲正常該內容由小部件註釋覆蓋。

在我看來,你想「檢查」複選框。爲什麼你不填寫表格?假設複選框字段的名稱爲「CB」和價值「是」,那麼你會使用一個PdfStamper例如,創建一個AcroFields對象(例如form),然後做這樣的事情:

form.setField("cb", "Yes"); 

這應該「檢查」交互複選框字段。完整示例請參見FillDataSheet示例。

重要:您需要了解該領域的(它不會永遠是「CB」),你需要知道外觀狀態的複選框的(它不會永遠是「是」)。您應該閱讀chapter 6 of my book瞭解更多信息。