void CreateAndInitializeFormPDF() { EXPECT_TRUE(OpenDocument("text_form_multiple.pdf")); m_page = LoadPage(0); ASSERT_TRUE(m_page); m_pFormFillEnv = CPDFSDKFormFillEnvironmentFromFPDFFormHandle(form_handle()); CPDFSDK_AnnotIterator iter(m_pFormFillEnv->GetPageView(0), CPDF_Annot::Subtype::WIDGET); // Normal text field. m_pAnnot = iter.GetFirstAnnot(); ASSERT_TRUE(m_pAnnot); ASSERT_EQ(CPDF_Annot::Subtype::WIDGET, m_pAnnot->GetAnnotSubtype()); // Read-only text field. CPDFSDK_Annot* pAnnotReadOnly = iter.GetNextAnnot(m_pAnnot); // Pre-filled text field with char limit of 10. m_pAnnotCharLimit = iter.GetNextAnnot(pAnnotReadOnly); ASSERT_TRUE(m_pAnnotCharLimit); ASSERT_EQ(CPDF_Annot::Subtype::WIDGET, m_pAnnotCharLimit->GetAnnotSubtype()); CPDFSDK_Annot* pLastAnnot = iter.GetLastAnnot(); ASSERT_EQ(m_pAnnotCharLimit, pLastAnnot); }
TEST_F(FSDKBaseFormEmbeddertest, CBA_AnnotIterator) { EXPECT_TRUE(OpenDocument("annotiter.pdf")); FPDF_PAGE page0 = LoadPage(0); FPDF_PAGE page1 = LoadPage(1); FPDF_PAGE page2 = LoadPage(2); EXPECT_TRUE(page0); EXPECT_TRUE(page1); EXPECT_TRUE(page2); CFX_FloatRect LeftBottom(200, 200, 220, 220); CFX_FloatRect RightBottom(400, 201, 420, 221); CFX_FloatRect LeftTop(201, 400, 221, 420); CFX_FloatRect RightTop(401, 401, 421, 421); CPDFSDK_FormFillEnvironment* pFormFillEnv = static_cast<CPDFSDK_FormFillEnvironment*>(form_handle()); { // Page 0 specifies "row order". CBA_AnnotIterator iter(pFormFillEnv->GetPageView(0), CPDF_Annot::Subtype::WIDGET); CPDFSDK_Annot* pAnnot = iter.GetFirstAnnot(); CheckRect(pAnnot->GetRect(), RightTop); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftTop); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightBottom); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftBottom); pAnnot = iter.GetNextAnnot(pAnnot); EXPECT_EQ(iter.GetFirstAnnot(), pAnnot); pAnnot = iter.GetLastAnnot(); CheckRect(pAnnot->GetRect(), LeftBottom); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightBottom); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftTop); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightTop); pAnnot = iter.GetPrevAnnot(pAnnot); EXPECT_EQ(iter.GetLastAnnot(), pAnnot); } { // Page 1 specifies "column order" CBA_AnnotIterator iter(pFormFillEnv->GetPageView(1), CPDF_Annot::Subtype::WIDGET); CPDFSDK_Annot* pAnnot = iter.GetFirstAnnot(); CheckRect(pAnnot->GetRect(), RightTop); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightBottom); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftTop); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftBottom); pAnnot = iter.GetNextAnnot(pAnnot); EXPECT_EQ(iter.GetFirstAnnot(), pAnnot); pAnnot = iter.GetLastAnnot(); CheckRect(pAnnot->GetRect(), LeftBottom); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftTop); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightBottom); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightTop); pAnnot = iter.GetPrevAnnot(pAnnot); EXPECT_EQ(iter.GetLastAnnot(), pAnnot); } { // Page 2 specifies "struct order" CBA_AnnotIterator iter(pFormFillEnv->GetPageView(2), CPDF_Annot::Subtype::WIDGET); CPDFSDK_Annot* pAnnot = iter.GetFirstAnnot(); CheckRect(pAnnot->GetRect(), LeftBottom); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightTop); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftTop); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightBottom); pAnnot = iter.GetNextAnnot(pAnnot); EXPECT_EQ(iter.GetFirstAnnot(), pAnnot); pAnnot = iter.GetLastAnnot(); CheckRect(pAnnot->GetRect(), RightBottom); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftTop); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightTop); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftBottom); pAnnot = iter.GetPrevAnnot(pAnnot); EXPECT_EQ(iter.GetLastAnnot(), pAnnot); } UnloadPage(page2); UnloadPage(page1); UnloadPage(page0); }
TEST_F(FSDKBaseFormEmbeddertest, CBA_AnnotIterator) { EXPECT_TRUE(OpenDocument("annotiter.pdf")); EXPECT_TRUE(LoadPage(0)); EXPECT_TRUE(LoadPage(1)); EXPECT_TRUE(LoadPage(2)); CPDF_Rect LeftBottom(200, 200, 220, 220); CPDF_Rect RightBottom(400, 201, 420, 221); CPDF_Rect LeftTop(201, 400, 221, 420); CPDF_Rect RightTop(401, 401, 421, 421); CPDFSDK_Document* pSDKDoc = CPDFSDK_Document::FromFPDFFormHandle(form_handle()); { // Page 0 specifies "row order". CBA_AnnotIterator iter(pSDKDoc->GetPageView(0), "Widget", ""); CPDFSDK_Annot* pAnnot = iter.GetFirstAnnot(); CheckRect(pAnnot->GetRect(), RightTop); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftTop); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightBottom); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftBottom); pAnnot = iter.GetNextAnnot(pAnnot); EXPECT_EQ(iter.GetFirstAnnot(), pAnnot); pAnnot = iter.GetLastAnnot(); CheckRect(pAnnot->GetRect(), LeftBottom); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightBottom); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftTop); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightTop); pAnnot = iter.GetPrevAnnot(pAnnot); EXPECT_EQ(iter.GetLastAnnot(), pAnnot); } { // Page 1 specifies "column order" CBA_AnnotIterator iter(pSDKDoc->GetPageView(1), "Widget", ""); CPDFSDK_Annot* pAnnot = iter.GetFirstAnnot(); CheckRect(pAnnot->GetRect(), RightTop); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightBottom); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftTop); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftBottom); pAnnot = iter.GetNextAnnot(pAnnot); EXPECT_EQ(iter.GetFirstAnnot(), pAnnot); pAnnot = iter.GetLastAnnot(); CheckRect(pAnnot->GetRect(), LeftBottom); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftTop); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightBottom); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightTop); pAnnot = iter.GetPrevAnnot(pAnnot); EXPECT_EQ(iter.GetLastAnnot(), pAnnot); } { // Page 2 specifies "struct order" CBA_AnnotIterator iter(pSDKDoc->GetPageView(2), "Widget", ""); CPDFSDK_Annot* pAnnot = iter.GetFirstAnnot(); CheckRect(pAnnot->GetRect(), LeftBottom); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightTop); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftTop); pAnnot = iter.GetNextAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightBottom); pAnnot = iter.GetNextAnnot(pAnnot); EXPECT_EQ(iter.GetFirstAnnot(), pAnnot); pAnnot = iter.GetLastAnnot(); CheckRect(pAnnot->GetRect(), RightBottom); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftTop); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), RightTop); pAnnot = iter.GetPrevAnnot(pAnnot); CheckRect(pAnnot->GetRect(), LeftBottom); pAnnot = iter.GetPrevAnnot(pAnnot); EXPECT_EQ(iter.GetLastAnnot(), pAnnot); } }