FX_FLOAT GetMinMaxValue( CPDF_RectArray& array, FPDF_TYPE type, FPDF_VALUE value) { int nRects = array.GetSize(); FX_FLOAT fRet = 0.0f; if (nRects <= 0)return 0.0f; FX_FLOAT* pArray = new FX_FLOAT[nRects]; switch(value) { case LEFT: { for (int i = 0; i < nRects; i++) pArray[i] = CPDF_Rect(array.GetAt(i)).left; break; } case TOP: { for (int i = 0; i < nRects; i++) pArray[i] = CPDF_Rect(array.GetAt(i)).top; break; } case RIGHT: { for (int i = 0; i < nRects; i++) pArray[i] = CPDF_Rect(array.GetAt(i)).right; break; } case BOTTOM: { for (int i = 0; i < nRects; i++) pArray[i] = CPDF_Rect(array.GetAt(i)).bottom; break; } default: break; } fRet = pArray[0]; if (type == MAX) { for (int i = 1; i < nRects; i++) if (fRet <= pArray[i]) fRet = pArray[i]; } else { for (int i = 1; i < nRects; i++) if (fRet >= pArray[i]) fRet = pArray[i]; } delete[] pArray; return fRet; }
CPDF_Rect CFFL_FormFiller::GetPDFWindowRect() const { CPDF_Rect rectAnnot; m_pWidget->GetPDFAnnot()->GetRect(rectAnnot); FX_FLOAT fWidth = rectAnnot.right - rectAnnot.left; FX_FLOAT fHeight = rectAnnot.top - rectAnnot.bottom; if ((m_pWidget->GetRotate() / 90) & 0x01) return CPDF_Rect(0, 0, fHeight, fWidth); return CPDF_Rect(0, 0, fWidth, fHeight); }
CPDF_Rect GetCrossoutRect(const CPVT_Word& word) { return CPDF_Rect(word.ptWord.x, word.ptWord.y + (word.fAscent + word.fDescent) * 0.5f + word.fDescent * 0.25f, word.ptWord.x + word.fWidth, word.ptWord.y + (word.fAscent + word.fDescent) * 0.5f); }
CPDF_Rect CPWL_Caret::GetCaretRect() const { return CPDF_Rect(m_ptFoot.x, m_ptFoot.y, m_ptHead.x + m_fWidth, m_ptHead.y); }
FX_FLOAT CPWL_Note_Edit::GetItemHeight(FX_FLOAT fLimitWidth) { if (fLimitWidth > 0) { if (!m_bSizeChanged) return m_fOldItemHeight; m_bSizeChanged = FALSE; this->EnableNotify(FALSE); this->EnableRefresh(FALSE); m_pEdit->EnableNotify(FALSE); //CPDF_Rect rcOld = this->GetWindowRect(); this->Move(CPDF_Rect(0,0,fLimitWidth,0), TRUE, FALSE); FX_FLOAT fRet = this->GetContentRect().Height(); //this->Move(rcOld, TRUE, FALSE); m_pEdit->EnableNotify(TRUE); this->EnableNotify(TRUE); this->EnableRefresh(TRUE); return fRet; } return 0; }
CPDF_Rect CFFL_FormFiller::GetWindowRect(CPDFSDK_PageView* pPageView) { if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) { return pWnd->GetWindowRect(); } return CPDF_Rect(0, 0, 0, 0); }
void CPWL_ComboBox::CreateListBox(const PWL_CREATEPARAM& cp) { if (!m_pList) { m_pList = new CPWL_CBListBox; m_pList->AttachFFLData(m_pFormFiller); PWL_CREATEPARAM lcp = cp; lcp.pParentWnd = this; lcp.dwFlags = PWS_CHILD | PWS_BORDER | PWS_BACKGROUND | PLBS_HOVERSEL | PWS_VSCROLL; lcp.nBorderStyle = PBS_SOLID; lcp.dwBorderWidth = 1; lcp.eCursorType = FXCT_ARROW; lcp.rcRectWnd = CPDF_Rect(0, 0, 0, 0); if (cp.dwFlags & PWS_AUTOFONTSIZE) lcp.fFontSize = PWLCB_DEFAULTFONTSIZE; else lcp.fFontSize = cp.fFontSize; if (cp.sBorderColor.nColorType == COLORTYPE_TRANSPARENT) lcp.sBorderColor = PWL_DEFAULT_BLACKCOLOR; if (cp.sBackgroundColor.nColorType == COLORTYPE_TRANSPARENT) lcp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR; m_pList->Create(lcp); } }
CPDF_Rect CFX_ListCtrl::OutToIn(const CPDF_Rect & rect) const { CPDF_Point ptLeftBottom = OutToIn(CPDF_Point(rect.left,rect.bottom)); CPDF_Point ptRightTop = OutToIn(CPDF_Point(rect.right,rect.top)); return CPDF_Rect(ptLeftBottom.x,ptLeftBottom.y,ptRightTop.x,ptRightTop.y); }
CPDF_Rect CFFL_FormFiller::GetFocusBox(CPDFSDK_PageView* pPageView) { if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) { CPDF_Rect rcFocus = FFLtoWnd(pPageView, PWLtoFFL(pWnd->GetFocusRect())); CPDF_Rect rcPage = pPageView->GetPDFPage()->GetPageBBox(); if (rcPage.Contains(rcFocus)) return rcFocus; } return CPDF_Rect(0, 0, 0, 0); }
CPDF_Rect CFX_List::GetItemRect(int32_t nIndex) const { if (CFX_ListItem * pListItem = m_aListItems.GetAt(nIndex)) { CPDF_Rect rcItem = pListItem->GetRect(); rcItem.left = 0.0f; rcItem.right = GetPlateRect().Width(); return InnerToOuter(rcItem); } return CPDF_Rect(); }
CPDF_Rect CPDFSDK_BFAnnotHandler::GetViewBBox(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot) { CFX_ByteString sSubType = pAnnot->GetSubType(); if (sSubType == BFFT_SIGNATURE) { } else { if (m_pFormFiller) return m_pFormFiller->GetViewBBox(pPageView, pAnnot); } return CPDF_Rect(0, 0, 0, 0); }
void CPWL_EditCtrl::CreateEditCaret(const PWL_CREATEPARAM& cp) { if (!m_pEditCaret) { m_pEditCaret = new CPWL_Caret; m_pEditCaret->SetInvalidRect(GetClientRect()); PWL_CREATEPARAM ecp = cp; ecp.pParentWnd = this; ecp.dwFlags = PWS_CHILD | PWS_NOREFRESHCLIP; ecp.dwBorderWidth = 0; ecp.nBorderStyle = PBS_SOLID; ecp.rcRectWnd = CPDF_Rect(0, 0, 0, 0); m_pEditCaret->Create(ecp); } }
void CPWL_Edit::RePosChildWnd() { if (CPWL_ScrollBar* pVSB = GetVScrollBar()) { CPDF_Rect rcWindow = m_rcOldWindow; CPDF_Rect rcVScroll = CPDF_Rect(rcWindow.right, rcWindow.bottom, rcWindow.right + PWL_SCROLLBAR_WIDTH, rcWindow.top); pVSB->Move(rcVScroll, TRUE, FALSE); } if (m_pEditCaret && !HasFlag(PES_TEXTOVERFLOW)) m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect( GetClientRect(), 1.0f)); //+1 for caret beside border CPWL_EditCtrl::RePosChildWnd(); }
void CPWL_Edit::SetParamByFlag() { if (HasFlag(PES_RIGHT)) { m_pEdit->SetAlignmentH(2, FALSE); } else if (HasFlag(PES_MIDDLE)) { m_pEdit->SetAlignmentH(1, FALSE); } else { m_pEdit->SetAlignmentH(0, FALSE); } if (HasFlag(PES_BOTTOM)) { m_pEdit->SetAlignmentV(2, FALSE); } else if (HasFlag(PES_CENTER)) { m_pEdit->SetAlignmentV(1, FALSE); } else { m_pEdit->SetAlignmentV(0, FALSE); } if (HasFlag(PES_PASSWORD)) { m_pEdit->SetPasswordChar('*', FALSE); } m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE), FALSE); m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN), FALSE); m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE), FALSE); m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL), FALSE); m_pEdit->EnableUndo(HasFlag(PES_UNDO)); if (HasFlag(PES_TEXTOVERFLOW)) { SetClipRect(CPDF_Rect(0.0f, 0.0f, 0.0f, 0.0f)); m_pEdit->SetTextOverflow(TRUE, FALSE); } else { if (m_pEditCaret) { m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect( GetClientRect(), 1.0f)); //+1 for caret beside border } } if (HasFlag(PES_SPELLCHECK)) { m_pSpellCheck = GetCreationParam().pSpellCheck; } }
void CPWL_Note_Options::RePosChildWnd() { if (this->IsValid()) { ASSERT(m_pText != NULL); CPDF_Rect rcClient = GetClientRect(); if (rcClient.Width() > 15.0f) { rcClient.right -= 15.0f; m_pText->Move(rcClient, TRUE, FALSE); m_pText->SetVisible(TRUE); } else { m_pText->Move(CPDF_Rect(0,0,0,0), TRUE, FALSE); m_pText->SetVisible(FALSE); } } }
void CPWL_ComboBox::CreateEdit(const PWL_CREATEPARAM& cp) { if (!m_pEdit) { m_pEdit = new CPWL_CBEdit; m_pEdit->AttachFFLData(m_pFormFiller); PWL_CREATEPARAM ecp = cp; ecp.pParentWnd = this; ecp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PES_CENTER | PES_AUTOSCROLL | PES_UNDO; if (HasFlag(PWS_AUTOFONTSIZE)) ecp.dwFlags |= PWS_AUTOFONTSIZE; if (!HasFlag(PCBS_ALLOWCUSTOMTEXT)) ecp.dwFlags |= PWS_READONLY; ecp.rcRectWnd = CPDF_Rect(0, 0, 0, 0); ecp.dwBorderWidth = 0; ecp.nBorderStyle = PBS_SOLID; m_pEdit->Create(ecp); } }
CPDF_Rect CPWL_ComboBox::GetFocusRect() const { return CPDF_Rect(); }
void CFFL_FormFiller::SetWindowRect(CPDFSDK_PageView* pPageView, const CPDF_Rect& rcWindow) { if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) { pWnd->Move(CPDF_Rect(rcWindow), TRUE, FALSE); } }
CPDF_Rect GetUnderLineRect(const CPVT_Word& word) { return CPDF_Rect(word.ptWord.x, word.ptWord.y + word.fDescent * 0.5f, word.ptWord.x + word.fWidth, word.ptWord.y + word.fDescent * 0.25f); }
DLLEXPORT int STDCALL FPDFPage_Flatten( FPDF_PAGE page, int nFlag) { if (!page) { return FLATTEN_FAIL; } CPDF_Page * pPage = (CPDF_Page*)( page ); CPDF_Document * pDocument = pPage->m_pDocument; CPDF_Dictionary * pPageDict = pPage->m_pFormDict; if ( !pDocument || !pPageDict ) { return FLATTEN_FAIL; } CPDF_ObjectArray ObjectArray; CPDF_RectArray RectArray; int iRet = FLATTEN_FAIL; iRet = ParserAnnots( pDocument, pPageDict, &RectArray, &ObjectArray, nFlag); if (iRet == FLATTEN_NOTINGTODO) { return FLATTEN_NOTINGTODO; }else if (iRet == FLATTEN_FAIL) { return FLATTEN_FAIL; } CPDF_Rect rcOriginalCB; CPDF_Rect rcMerger = CalculateRect( &RectArray ); CPDF_Rect rcOriginalMB = pPageDict->GetRect("MediaBox"); if (pPageDict->KeyExist("CropBox")) rcOriginalMB = pPageDict->GetRect("CropBox"); if (rcOriginalMB.IsEmpty()) { rcOriginalMB = CPDF_Rect(0.0f, 0.0f, 612.0f, 792.0f); } rcMerger.left = rcMerger.left < rcOriginalMB.left? rcOriginalMB.left : rcMerger.left; rcMerger.right = rcMerger.right > rcOriginalMB.right? rcOriginalMB.right : rcMerger.right; rcMerger.top = rcMerger.top > rcOriginalMB.top? rcOriginalMB.top : rcMerger.top; rcMerger.bottom = rcMerger.bottom < rcOriginalMB.bottom? rcOriginalMB.bottom : rcMerger.bottom; if (pPageDict->KeyExist("ArtBox")) rcOriginalCB = pPageDict->GetRect("ArtBox"); else rcOriginalCB = rcOriginalMB; if (!rcOriginalMB.IsEmpty()) { CPDF_Array* pMediaBox = FX_NEW CPDF_Array(); pMediaBox->Add(FX_NEW CPDF_Number(rcOriginalMB.left)); pMediaBox->Add(FX_NEW CPDF_Number(rcOriginalMB.bottom)); pMediaBox->Add(FX_NEW CPDF_Number(rcOriginalMB.right)); pMediaBox->Add(FX_NEW CPDF_Number(rcOriginalMB.top)); pPageDict->SetAt("MediaBox",pMediaBox); } if (!rcOriginalCB.IsEmpty()) { CPDF_Array* pCropBox = FX_NEW CPDF_Array(); pCropBox->Add(FX_NEW CPDF_Number(rcOriginalCB.left)); pCropBox->Add(FX_NEW CPDF_Number(rcOriginalCB.bottom)); pCropBox->Add(FX_NEW CPDF_Number(rcOriginalCB.right)); pCropBox->Add(FX_NEW CPDF_Number(rcOriginalCB.top)); pPageDict->SetAt("ArtBox", pCropBox); } CPDF_Dictionary* pRes = NULL; pRes = pPageDict->GetDict("Resources"); if (!pRes) { pRes = FX_NEW CPDF_Dictionary; pPageDict->SetAt( "Resources", pRes ); } CPDF_Stream* pNewXObject = FX_NEW CPDF_Stream(NULL, 0, FX_NEW CPDF_Dictionary); FX_DWORD dwObjNum = pDocument->AddIndirectObject(pNewXObject); CPDF_Dictionary* pPageXObject = pRes->GetDict("XObject"); if (!pPageXObject) { pPageXObject = FX_NEW CPDF_Dictionary; pRes->SetAt("XObject", pPageXObject); } CFX_ByteString key = ""; int nStreams = ObjectArray.GetSize(); if (nStreams > 0) { for (int iKey = 0; /*iKey < 100*/; iKey++) { char sExtend[5] = {0}; FXSYS_itoa(iKey, sExtend, 10); key = CFX_ByteString("FFT") + CFX_ByteString(sExtend); if (!pPageXObject->KeyExist(key)) break; } } SetPageContents(key, pPageDict, pDocument); CPDF_Dictionary* pNewXORes = NULL; if (!key.IsEmpty()) { pPageXObject->SetAtReference(key, pDocument, dwObjNum); CPDF_Dictionary* pNewOXbjectDic = pNewXObject->GetDict(); pNewXORes = FX_NEW CPDF_Dictionary; pNewOXbjectDic->SetAt("Resources", pNewXORes); pNewOXbjectDic->SetAtName("Type", "XObject"); pNewOXbjectDic->SetAtName("Subtype", "Form"); pNewOXbjectDic->SetAtInteger("FormType", 1); pNewOXbjectDic->SetAtName("Name", "FRM"); CPDF_Rect rcBBox = pPageDict->GetRect("ArtBox"); pNewOXbjectDic->SetAtRect("BBox", rcBBox); } for (int i = 0; i < nStreams; i++) { CPDF_Dictionary* pAnnotDic = ObjectArray.GetAt(i); if (!pAnnotDic)continue; CPDF_Rect rcAnnot = pAnnotDic->GetRect("Rect"); rcAnnot.Normalize(); CFX_ByteString sAnnotState = pAnnotDic->GetString("AS"); CPDF_Dictionary* pAnnotAP = pAnnotDic->GetDict("AP"); if (!pAnnotAP)continue; CPDF_Stream* pAPStream = pAnnotAP->GetStream("N"); if (!pAPStream) { CPDF_Dictionary* pAPDic = pAnnotAP->GetDict("N"); if (!pAPDic)continue; if (!sAnnotState.IsEmpty()) { pAPStream = pAPDic->GetStream(sAnnotState); } else { FX_POSITION pos = pAPDic->GetStartPos(); if (pos) { CFX_ByteString sKey; CPDF_Object* pFirstObj = pAPDic->GetNextElement(pos, sKey); if (pFirstObj) { if (pFirstObj->GetType() == PDFOBJ_REFERENCE) pFirstObj = pFirstObj->GetDirect(); if (pFirstObj->GetType() != PDFOBJ_STREAM) continue; pAPStream = (CPDF_Stream*)pFirstObj; } } } } if (!pAPStream)continue; CPDF_Dictionary* pAPDic = pAPStream->GetDict(); CFX_AffineMatrix matrix = pAPDic->GetMatrix("Matrix"); CPDF_Rect rcStream; if (pAPDic->KeyExist("Rect")) rcStream = pAPDic->GetRect("Rect"); else if (pAPDic->KeyExist("BBox")) rcStream = pAPDic->GetRect("BBox"); if (rcStream.IsEmpty())continue; CPDF_Object* pObj = pAPStream; if (pObj) { CPDF_Dictionary* pObjDic = pObj->GetDict(); if (pObjDic) { pObjDic->SetAtName("Type", "XObject"); pObjDic->SetAtName("Subtype", "Form"); } } CPDF_Dictionary* pXObject = pNewXORes->GetDict("XObject"); if (!pXObject) { pXObject = FX_NEW CPDF_Dictionary; pNewXORes->SetAt("XObject", pXObject); } CFX_ByteString sFormName; sFormName.Format("F%d", i); FX_DWORD dwObjNum = pDocument->AddIndirectObject(pObj); pXObject->SetAtReference(sFormName, pDocument, dwObjNum); CPDF_StreamAcc acc; acc.LoadAllData(pNewXObject); FX_LPCBYTE pData = acc.GetData(); CFX_ByteString sStream(pData, acc.GetSize()); CFX_ByteString sTemp; if (matrix.IsIdentity()) { matrix.a = 1.0f; matrix.b = 0.0f; matrix.c = 0.0f; matrix.d = 1.0f; matrix.e = 0.0f; matrix.f = 0.0f; } CFX_AffineMatrix m = GetMatrix(rcAnnot, rcStream, matrix); sTemp.Format("q %f 0 0 %f %f %f cm /%s Do Q\n", m.a, m.d, m.e, m.f, sFormName.c_str()); sStream += sTemp; pNewXObject->SetData((FX_LPCBYTE)sStream, sStream.GetLength(), FALSE, FALSE); } pPageDict->RemoveAt( "Annots" ); ObjectArray.RemoveAll(); RectArray.RemoveAll(); return FLATTEN_SUCCESS; }
CPDF_Rect CPWL_Edit::GetFocusRect() const { return CPDF_Rect(); }