如何使用 PDFium 解析表单,获取文本字段的值,按钮状态等? 我试过这段代码,但 FPDFTextObj_GetText 返回空字符串。
ScopedFPDFTextPage pTextPage (FPDFText_LoadPage(Page));
for (int i = 0;i < FPDFPage_CountObjects(Page); i++)
{
FPDF_PAGEOBJECT pageObj = FPDFPage_GetObject(Page, i);
auto pageObjType = FPDFPageObj_GetType(pageObj);
if (pageObjType == FPDF_PAGEOBJ_TEXT)
{
auto size = FPDFTextObj_GetText(pageObj, pTextPage.get(), nullptr, 0);
std::vector<FPDF_WCHAR> buffer = GetFPDFWideStringBuffer(size);
size = FPDFTextObj_GetText(pageObj, pTextPage.get(), buffer.data(), size);
}
else if (pageObjType == FPDF_PAGEOBJ_FORM)
{
for (int j = 0; j < FPDFFormObj_CountObjects(pageObj); j++)
{
auto formObj = FPDFFormObj_GetObject(pageObj, j);
auto formObjType = FPDFPageObj_GetType(formObj);
if (formObjType == FPDF_PAGEOBJ_TEXT)
{
auto size = FPDFTextObj_GetText(pageObj, pTextPage.get(), nullptr, 0);
std::vector<FPDF_WCHAR> buffer = GetFPDFWideStringBuffer(size);
size = FPDFTextObj_GetText(pageObj, pTextPage.get(), buffer.data(), size);
}
}
}
}
FPDFFormObj_*() 指的是一个 XObjectForm 页面对象,尽管它的名称包括“表单”,但它与嵌入到文档中的交互式表单(及其字段)完全分开。 (参见 PDF 参考手册 v1.6,第 8.6 节。)
您想要做的是迭代页面中的annotations并查找具有注释类型Widget或XFAWidget的注释。这些是表单字段,您可以使用标准的 FPDFAnnot_* 函数来检索内容值。