DLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPage_GetObject(FPDF_PAGE page, int index) { CPDF_Page* pPage = CPDFPageFromFPDFPage(page); if (!IsPageObject(pPage)) return nullptr; return pPage->GetPageObjectList()->GetPageObjectByIndex(index); }
DLLEXPORT void STDCALL FPDFPage_InsertObject(FPDF_PAGE page, FPDF_PAGEOBJECT page_obj) { CPDF_PageObject* pPageObj = reinterpret_cast<CPDF_PageObject*>(page_obj); if (!pPageObj) return; std::unique_ptr<CPDF_PageObject> pPageObjHolder(pPageObj); CPDF_Page* pPage = CPDFPageFromFPDFPage(page); if (!IsPageObject(pPage)) return; pPage->GetPageObjectList()->push_back(std::move(pPageObjHolder)); switch (pPageObj->GetType()) { case CPDF_PageObject::TEXT: { break; } case CPDF_PageObject::PATH: { CPDF_PathObject* pPathObj = pPageObj->AsPath(); pPathObj->CalcBoundingBox(); break; } case CPDF_PageObject::IMAGE: { CPDF_ImageObject* pImageObj = pPageObj->AsImage(); pImageObj->CalcBoundingBox(); break; } case CPDF_PageObject::SHADING: { CPDF_ShadingObject* pShadingObj = pPageObj->AsShading(); pShadingObj->CalcBoundingBox(); break; } case CPDF_PageObject::FORM: { CPDF_FormObject* pFormObj = pPageObj->AsForm(); pFormObj->CalcBoundingBox(); break; } default: { ASSERT(false); break; } } }
DLLEXPORT int STDCALL FPDFPage_CountObject(FPDF_PAGE page) { CPDF_Page* pPage = CPDFPageFromFPDFPage(page); if (!IsPageObject(pPage)) return -1; return pdfium::CollectionSize<int>(*pPage->GetPageObjectList()); }