CPDF_ImageObject* CPDF_StreamContentParser::AddImage(CPDF_Stream* pStream, CPDF_Image* pImage, FX_BOOL bInline) { if (!pStream && !pImage) { return NULL; } CFX_Matrix ImageMatrix; ImageMatrix.Copy(m_pCurStates->m_CTM); ImageMatrix.Concat(m_mtContentToUser); CPDF_ImageObject* pImageObj = new CPDF_ImageObject; if (pImage) { pImageObj->m_pImage = m_pDocument->GetPageData()->GetImage(pImage->GetStream()); } else if (pStream->GetObjNum()) { pImageObj->m_pImage = m_pDocument->LoadImageF(pStream); } else { pImageObj->m_pImage = new CPDF_Image(m_pDocument); pImageObj->m_pImage->LoadImageF(pStream, bInline); } SetGraphicStates(pImageObj, pImageObj->m_pImage->IsMask(), FALSE, FALSE); pImageObj->m_Matrix = ImageMatrix; pImageObj->CalcBoundingBox(); m_pObjectList->m_ObjectList.AddTail(pImageObj); return pImageObj; }
DLLEXPORT void STDCALL FPDFPage_InsertObject(FPDF_PAGE page, FPDF_PAGEOBJECT page_obj) { CPDF_Page* pPage = (CPDF_Page*)page; if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || !pPage->m_pFormDict->GetElement("Type")->GetDirect() || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page")) { return; } CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_obj; if(pPageObj == NULL) return; FX_POSITION LastPersition = pPage->GetLastObjectPosition(); pPage->InsertObject(LastPersition, pPageObj); switch(pPageObj->m_Type) { case FPDF_PAGEOBJ_PATH: { CPDF_PathObject* pPathObj = (CPDF_PathObject*)pPageObj; pPathObj->CalcBoundingBox(); break; } case FPDF_PAGEOBJ_TEXT: { // CPDF_PathObject* pPathObj = (CPDF_PathObject*)pPageObj; // pPathObj->CalcBoundingBox(); break; } case FPDF_PAGEOBJ_IMAGE: { CPDF_ImageObject* pImageObj = (CPDF_ImageObject*)pPageObj; pImageObj->CalcBoundingBox(); break; } case FPDF_PAGEOBJ_SHADING: { CPDF_ShadingObject* pShadingObj = (CPDF_ShadingObject*)pPageObj; pShadingObj->CalcBoundingBox(); break; } case FPDF_PAGEOBJ_FORM: { CPDF_FormObject* pFormObj = (CPDF_FormObject*)pPageObj; pFormObj->CalcBoundingBox(); break; } default: break; } // pPage->ParseContent(); //pPage->GenerateContent(); }
DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetMatrix (FPDF_PAGEOBJECT image_object, double a, double b, double c, double d, double e, double f) { if (!image_object) return FALSE; CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object; pImgObj->m_Matrix.a = (FX_FLOAT)a; pImgObj->m_Matrix.b = (FX_FLOAT)b; pImgObj->m_Matrix.c = (FX_FLOAT)c; pImgObj->m_Matrix.d = (FX_FLOAT)d; pImgObj->m_Matrix.e = (FX_FLOAT)e; pImgObj->m_Matrix.f = (FX_FLOAT)f; pImgObj->CalcBoundingBox(); return TRUE; }
DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetBitmap(FPDF_PAGE* pages,int nCount,FPDF_PAGEOBJECT image_object,FPDF_BITMAP bitmap) { if (!image_object || !bitmap) return FALSE; CFX_DIBitmap* pBmp = NULL; pBmp = (CFX_DIBitmap*)bitmap; CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object; pImgObj->m_GeneralState.GetModify(); for (int index=0;index<nCount;index++) { CPDF_Page* pPage = (CPDF_Page*)pages[index]; pImgObj->m_pImage->ResetCache(pPage,NULL); } pImgObj->m_pImage->SetImage(pBmp,FALSE); pImgObj->CalcBoundingBox(); return TRUE; }
DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetBitmap(FPDF_PAGE* pages, int nCount, FPDF_PAGEOBJECT image_object, FPDF_BITMAP bitmap) { if (!image_object || !bitmap || !pages) return false; CPDF_ImageObject* pImgObj = reinterpret_cast<CPDF_ImageObject*>(image_object); for (int index = 0; index < nCount; index++) { CPDF_Page* pPage = CPDFPageFromFPDFPage(pages[index]); if (pPage) pImgObj->GetImage()->ResetCache(pPage, nullptr); } pImgObj->GetImage()->SetImage(reinterpret_cast<CFX_DIBitmap*>(bitmap), false); pImgObj->CalcBoundingBox(); return true; }
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 FPDF_BOOL STDCALL FPDFImageObj_SetMatrix(FPDF_PAGEOBJECT image_object, double a, double b, double c, double d, double e, double f) { if (!image_object) return false; CPDF_ImageObject* pImgObj = reinterpret_cast<CPDF_ImageObject*>(image_object); pImgObj->m_Matrix.a = static_cast<FX_FLOAT>(a); pImgObj->m_Matrix.b = static_cast<FX_FLOAT>(b); pImgObj->m_Matrix.c = static_cast<FX_FLOAT>(c); pImgObj->m_Matrix.d = static_cast<FX_FLOAT>(d); pImgObj->m_Matrix.e = static_cast<FX_FLOAT>(e); pImgObj->m_Matrix.f = static_cast<FX_FLOAT>(f); pImgObj->CalcBoundingBox(); return true; }