單選按鈕,複選框和按鈕都實際上是同一類型的字段,但與設置不同的標誌。你可以看到國旗在PDF規格部分12.7.4.2.1表226
int ffRadio = 1 << 15; //Per spec, 16th bit is radio button
int ffPushbutton = 1 << 16; //17th bit is push button
對於要獲得與此相關的Widget
個給出Field
。通常這只是一個,但可以更多,所以你應該解釋這一點。
PdfDictionary w = f.Value.GetWidget(0);
鍵字段將具有設置爲/Btn
他們的字段類型(/Ft
),以便檢查該
if (!w.Contains(PdfName.FT) || !w.Get(PdfName.FT).Equals(PdfName.BTN)) {continue;/*Skipping non-buttons*/ }
對於當前Widget
獲得可選字段標誌(/Ff
)值或使用零,如果它不不存在。
int ff = (w.Contains(PdfName.FF) ? w.GetAsNumber(PdfName.FF).IntValue : 0);
然後,只需一些簡單的數學:
if ((ff & ffRadio) == ffRadio) {
//Is Radio
} else if (((ff & ffRadio) != ffRadio) && ((ff & ffPushbutton) != ffPushbutton)) {
//Is Checkbox
} else {
//Regular button
}
下面是一個完整的工作C#WinForm的2011應用定位iTextSharp的5.2.0,顯示了上述所有尋找一個文件名爲Test.pdf
生活費你的桌面。只需在條件中添加一些邏輯即可處理每種按鈕類型。
using System;
using System.IO;
using System.Windows.Forms;
using iTextSharp.text.pdf;
namespace WindowsFormsApplication3 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
var testFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.pdf");
PdfReader reader = new PdfReader(testFile);
var fields = reader.AcroFields;
int ffRadio = 1 << 15; //Per spec, 16th bit is radio button
int ffPushbutton = 1 << 16; //17th bit is push button
int ff;
//Loop through each field
foreach (var f in fields.Fields) {
//Get the widgets for the field (note, this could return more than 1, this should be checked)
PdfDictionary w = f.Value.GetWidget(0);
//See if it is a button-like object (/Ft == /Btn)
if (!w.Contains(PdfName.FT) || !w.Get(PdfName.FT).Equals(PdfName.BTN)) { continue;/*Skipping non-buttons*/ }
//Get the optional field flags, if they don't exist then just use zero
ff = (w.Contains(PdfName.FF) ? w.GetAsNumber(PdfName.FF).IntValue : 0);
if ((ff & ffRadio) == ffRadio) {
//Is Radio
} else if (((ff & ffRadio) != ffRadio) && ((ff & ffPushbutton) != ffPushbutton)) {
//Is Checkbox
} else {
//Regular button
}
}
this.Close();
}
}
}
感謝讓我試試它... –
它爲你工作? – Mike
sry ..需要chk on ...喲知道它是在一個月前發佈的... m busy wid sm其他工作...當然我會在我最早的時候確認喲...感謝你的努力夥伴:) –