PDFium:读取表单字段的值?

问题描述 投票:0回答:1

如何使用 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);
            }
    
        }

    }
}
forms text field pdfium
1个回答
0
投票

FPDFFormObj_*() 指的是一个 XObjectForm 页面对象,尽管它的名称包括“表单”,但它与嵌入到文档中的交互式表单(及其字段)完全分开。 (参见 PDF 参考手册 v1.6,第 8.6 节。)

您想要做的是迭代页面中的annotations并查找具有注释类型Widget或XFAWidget的注释。这些是表单字段,您可以使用标准的 FPDFAnnot_* 函数来检索内容值。

© www.soinside.com 2019 - 2024. All rights reserved.