Index: fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp |
diff --git a/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp b/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp |
index be83d3416ef3f6948afe06bf59ca9bd62e114d4f..57de222e1c420b4bacb154d8d3f94be597147d48 100644 |
--- a/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp |
+++ b/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp |
@@ -65,9 +65,8 @@ CPDFXFA_Document::~CPDFXFA_Document() { |
CXFA_FFApp* pApp = m_pApp->GetXFAApp(); |
if (pApp) { |
CXFA_FFDocHandler* pDocHandler = pApp->GetDocHandler(); |
- if (pDocHandler) { |
+ if (pDocHandler) |
CloseXFADoc(pDocHandler); |
- } |
} |
m_pXFADoc.reset(); |
} |
@@ -220,18 +219,9 @@ CPDFSDK_Document* CPDFXFA_Document::GetSDKDocument( |
return m_pSDKDoc.get(); |
} |
-void CPDFXFA_Document::FXRect2PDFRect(const CFX_RectF& fxRectF, |
- CFX_FloatRect& pdfRect) { |
- pdfRect.left = fxRectF.left; |
- pdfRect.top = fxRectF.bottom(); |
- pdfRect.right = fxRectF.right(); |
- pdfRect.bottom = fxRectF.top; |
-} |
- |
void CPDFXFA_Document::SetChangeMark(CXFA_FFDoc* hDoc) { |
- if (hDoc == m_pXFADoc.get() && m_pSDKDoc) { |
+ if (hDoc == m_pXFADoc.get() && m_pSDKDoc) |
m_pSDKDoc->SetChangeMark(); |
- } |
} |
void CPDFXFA_Document::InvalidateRect(CXFA_FFPageView* pPageView, |
@@ -243,9 +233,6 @@ void CPDFXFA_Document::InvalidateRect(CXFA_FFPageView* pPageView, |
if (m_iDocType != DOCTYPE_DYNAMIC_XFA) |
return; |
- CFX_FloatRect rcPage; |
- FXRect2PDFRect(rt, rcPage); |
- |
CPDFXFA_Page* pPage = GetPage(pPageView); |
if (!pPage) |
return; |
@@ -254,6 +241,7 @@ void CPDFXFA_Document::InvalidateRect(CXFA_FFPageView* pPageView, |
if (!pEnv) |
return; |
+ CFX_FloatRect rcPage = CFX_FloatRect::FromCFXRectF(rt); |
pEnv->FFI_Invalidate((FPDF_PAGE)pPage, rcPage.left, rcPage.bottom, |
rcPage.right, rcPage.top); |
} |
@@ -279,13 +267,11 @@ void CPDFXFA_Document::DisplayCaret(CXFA_FFWidget* hWidget, |
if (!pPage) |
return; |
- CFX_FloatRect rcCaret; |
- FXRect2PDFRect(*pRtAnchor, rcCaret); |
- |
CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
if (!pEnv) |
return; |
+ CFX_FloatRect rcCaret = CFX_FloatRect::FromCFXRectF(*pRtAnchor); |
pEnv->FFI_DisplayCaret((FPDF_PAGE)pPage, bVisible, rcCaret.left, rcCaret.top, |
rcCaret.right, rcCaret.bottom); |
} |
@@ -311,60 +297,49 @@ FX_BOOL CPDFXFA_Document::GetPopupPos(CXFA_FFWidget* hWidget, |
CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
if (!pEnv) |
return FALSE; |
+ |
FS_RECTF pageViewRect = {0.0f, 0.0f, 0.0f, 0.0f}; |
pEnv->FFI_GetPageViewRect(pPage, pageViewRect); |
- CFX_FloatRect rcAnchor; |
- rcAnchor.left = rtAnchor.left; |
- rcAnchor.top = rtAnchor.bottom(); |
- rcAnchor.right = rtAnchor.right(); |
- rcAnchor.bottom = rtAnchor.top; |
- |
- int t1, t2, t; |
- uint32_t dwPos; |
- FX_FLOAT fPoupHeight; |
+ int t1; |
+ int t2; |
+ CFX_FloatRect rcAnchor = CFX_FloatRect::FromCFXRectF(rtAnchor); |
switch (nRotate) { |
case 90: { |
t1 = (int)(pageViewRect.right - rcAnchor.right); |
t2 = (int)(rcAnchor.left - pageViewRect.left); |
- if (rcAnchor.bottom < pageViewRect.bottom) { |
+ if (rcAnchor.bottom < pageViewRect.bottom) |
rtPopup.left += rcAnchor.bottom - pageViewRect.bottom; |
- } |
- |
break; |
} |
- |
case 180: { |
t2 = (int)(pageViewRect.top - rcAnchor.top); |
t1 = (int)(rcAnchor.bottom - pageViewRect.bottom); |
- if (rcAnchor.left < pageViewRect.left) { |
+ if (rcAnchor.left < pageViewRect.left) |
rtPopup.left += rcAnchor.left - pageViewRect.left; |
- } |
break; |
} |
case 270: { |
t1 = (int)(rcAnchor.left - pageViewRect.left); |
t2 = (int)(pageViewRect.right - rcAnchor.right); |
- |
- if (rcAnchor.top > pageViewRect.top) { |
+ if (rcAnchor.top > pageViewRect.top) |
rtPopup.left -= rcAnchor.top - pageViewRect.top; |
- } |
break; |
} |
case 0: |
default: { |
t1 = (int)(pageViewRect.top - rcAnchor.top); |
t2 = (int)(rcAnchor.bottom - pageViewRect.bottom); |
- if (rcAnchor.right > pageViewRect.right) { |
+ if (rcAnchor.right > pageViewRect.right) |
rtPopup.left -= rcAnchor.right - pageViewRect.right; |
- } |
break; |
} |
} |
- if (t1 <= 0 && t2 <= 0) { |
+ int t; |
+ uint32_t dwPos; |
+ if (t1 <= 0 && t2 <= 0) |
return FALSE; |
- } |
if (t1 <= 0) { |
t = t2; |
dwPos = 1; |
@@ -378,23 +353,24 @@ FX_BOOL CPDFXFA_Document::GetPopupPos(CXFA_FFWidget* hWidget, |
t = t2; |
dwPos = 1; |
} |
- if (t < fMinPopup) { |
- fPoupHeight = fMinPopup; |
- } else if (t > fMaxPopup) { |
- fPoupHeight = fMaxPopup; |
- } else { |
- fPoupHeight = (FX_FLOAT)t; |
- } |
+ |
+ FX_FLOAT fPopupHeight; |
+ if (t < fMinPopup) |
+ fPopupHeight = fMinPopup; |
+ else if (t > fMaxPopup) |
+ fPopupHeight = fMaxPopup; |
+ else |
+ fPopupHeight = static_cast<FX_FLOAT>(t); |
switch (nRotate) { |
case 0: |
case 180: { |
if (dwPos == 0) { |
rtPopup.top = rtAnchor.height; |
- rtPopup.height = fPoupHeight; |
+ rtPopup.height = fPopupHeight; |
} else { |
- rtPopup.top = -fPoupHeight; |
- rtPopup.height = fPoupHeight; |
+ rtPopup.top = -fPopupHeight; |
+ rtPopup.height = fPopupHeight; |
} |
break; |
} |
@@ -402,10 +378,10 @@ FX_BOOL CPDFXFA_Document::GetPopupPos(CXFA_FFWidget* hWidget, |
case 270: { |
if (dwPos == 0) { |
rtPopup.top = rtAnchor.width; |
- rtPopup.height = fPoupHeight; |
+ rtPopup.height = fPopupHeight; |
} else { |
- rtPopup.top = -fPoupHeight; |
- rtPopup.height = fPoupHeight; |
+ rtPopup.top = -fPopupHeight; |
+ rtPopup.height = fPopupHeight; |
} |
break; |
} |
@@ -417,8 +393,7 @@ FX_BOOL CPDFXFA_Document::GetPopupPos(CXFA_FFWidget* hWidget, |
} |
FX_BOOL CPDFXFA_Document::PopupMenu(CXFA_FFWidget* hWidget, |
- CFX_PointF ptPopup, |
- const CFX_RectF* pRectExclude) { |
+ CFX_PointF ptPopup) { |
if (!hWidget) |
return FALSE; |
@@ -430,24 +405,25 @@ FX_BOOL CPDFXFA_Document::PopupMenu(CXFA_FFWidget* hWidget, |
if (!pPage) |
return FALSE; |
- int menuFlag = 0; |
+ CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
+ if (!pEnv) |
+ return FALSE; |
+ int menuFlag = 0; |
if (hWidget->CanUndo()) |
- menuFlag |= FXFA_MEMU_UNDO; |
+ menuFlag |= FXFA_MENU_UNDO; |
if (hWidget->CanRedo()) |
- menuFlag |= FXFA_MEMU_REDO; |
+ menuFlag |= FXFA_MENU_REDO; |
if (hWidget->CanPaste()) |
- menuFlag |= FXFA_MEMU_PASTE; |
+ menuFlag |= FXFA_MENU_PASTE; |
if (hWidget->CanCopy()) |
- menuFlag |= FXFA_MEMU_COPY; |
+ menuFlag |= FXFA_MENU_COPY; |
if (hWidget->CanCut()) |
- menuFlag |= FXFA_MEMU_CUT; |
+ menuFlag |= FXFA_MENU_CUT; |
if (hWidget->CanSelectAll()) |
- menuFlag |= FXFA_MEMU_SELECTALL; |
+ menuFlag |= FXFA_MENU_SELECTALL; |
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
- return pEnv && |
- pEnv->FFI_PopupMenu(pPage, hWidget, menuFlag, ptPopup, nullptr); |
+ return pEnv->FFI_PopupMenu(pPage, hWidget, menuFlag, ptPopup, nullptr); |
} |
void CPDFXFA_Document::PageViewEvent(CXFA_FFPageView* pPageView, |
@@ -456,32 +432,34 @@ void CPDFXFA_Document::PageViewEvent(CXFA_FFPageView* pPageView, |
if (!pEnv) |
return; |
- if (m_nLoadStatus != FXFA_LOADSTATUS_LOADING && |
- m_nLoadStatus != FXFA_LOADSTATUS_CLOSING && |
- XFA_PAGEVIEWEVENT_StopLayout == dwFlags) { |
- int nNewCount = GetPageCount(); |
- if (nNewCount == m_nPageCount) |
- return; |
+ if (m_nLoadStatus == FXFA_LOADSTATUS_LOADING || |
+ m_nLoadStatus == FXFA_LOADSTATUS_CLOSING || |
+ XFA_PAGEVIEWEVENT_StopLayout != dwFlags) |
+ return; |
- CXFA_FFDocView* pXFADocView = GetXFADocView(); |
- if (!pXFADocView) |
- return; |
- for (int iPageIter = 0; iPageIter < m_nPageCount; iPageIter++) { |
- CPDFXFA_Page* pPage = m_XFAPageList.GetAt(iPageIter); |
- if (!pPage) |
- continue; |
- m_pSDKDoc->RemovePageView(pPage); |
- CXFA_FFPageView* pXFAPageView = pXFADocView->GetPageView(iPageIter); |
- pPage->SetXFAPageView(pXFAPageView); |
- } |
+ int nNewCount = GetPageCount(); |
+ if (nNewCount == m_nPageCount) |
+ return; |
+ |
+ CXFA_FFDocView* pXFADocView = GetXFADocView(); |
+ if (!pXFADocView) |
+ return; |
- int flag = (nNewCount < m_nPageCount) ? FXFA_PAGEVIEWEVENT_POSTREMOVED |
- : FXFA_PAGEVIEWEVENT_POSTADDED; |
- int count = FXSYS_abs(nNewCount - m_nPageCount); |
- m_nPageCount = nNewCount; |
- m_XFAPageList.SetSize(nNewCount); |
- pEnv->FFI_PageEvent(count, flag); |
+ for (int iPageIter = 0; iPageIter < m_nPageCount; iPageIter++) { |
+ CPDFXFA_Page* pPage = m_XFAPageList.GetAt(iPageIter); |
+ if (!pPage) |
+ continue; |
+ |
+ m_pSDKDoc->RemovePageView(pPage); |
+ pPage->SetXFAPageView(pXFADocView->GetPageView(iPageIter)); |
} |
+ |
+ int flag = (nNewCount < m_nPageCount) ? FXFA_PAGEVIEWEVENT_POSTREMOVED |
+ : FXFA_PAGEVIEWEVENT_POSTADDED; |
+ int count = FXSYS_abs(nNewCount - m_nPageCount); |
+ m_nPageCount = nNewCount; |
+ m_XFAPageList.SetSize(nNewCount); |
+ pEnv->FFI_PageEvent(count, flag); |
} |
void CPDFXFA_Document::WidgetPostAdd(CXFA_FFWidget* hWidget, |
@@ -543,6 +521,7 @@ void CPDFXFA_Document::SetCurrentPage(CXFA_FFDoc* hDoc, int32_t iCurPage) { |
iCurPage >= m_pSDKDoc->GetPageCount()) { |
return; |
} |
+ |
CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
if (!pEnv) |
return; |
@@ -554,7 +533,6 @@ FX_BOOL CPDFXFA_Document::IsCalculationsEnabled(CXFA_FFDoc* hDoc) { |
return FALSE; |
if (m_pSDKDoc->GetInterForm()) |
return m_pSDKDoc->GetInterForm()->IsXfaCalculateEnabled(); |
- |
return FALSE; |
} |
@@ -606,14 +584,15 @@ void CPDFXFA_Document::ExportData(CXFA_FFDoc* hDoc, |
if (wsFilePath.IsEmpty()) { |
if (!pEnv->GetFormFillInfo() || !pEnv->GetFormFillInfo()->m_pJsPlatform) |
return; |
+ |
CFX_WideString filepath = pEnv->JS_fieldBrowse(); |
bs = filepath.UTF16LE_Encode(); |
} |
- int len = bs.GetLength() / sizeof(unsigned short); |
- FPDF_FILEHANDLER* pFileHandler = pEnv->FFI_OpenFile( |
- bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML, |
- (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)), "wb"); |
- bs.ReleaseBuffer(len * sizeof(unsigned short)); |
+ int len = bs.GetLength(); |
+ FPDF_FILEHANDLER* pFileHandler = |
+ pEnv->FFI_OpenFile(bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML, |
+ (FPDF_WIDESTRING)bs.GetBuffer(len), "wb"); |
+ bs.ReleaseBuffer(len); |
if (!pFileHandler) |
return; |
@@ -628,12 +607,15 @@ void CPDFXFA_Document::ExportData(CXFA_FFDoc* hDoc, |
} else if (fileType == FXFA_SAVEAS_XDP) { |
if (!m_pPDFDoc) |
return; |
+ |
CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); |
if (!pRoot) |
return; |
+ |
CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); |
if (!pAcroForm) |
return; |
+ |
CPDF_Array* pArray = ToArray(pAcroForm->GetObjectBy("XFA")); |
if (!pArray) |
return; |
@@ -646,32 +628,35 @@ void CPDFXFA_Document::ExportData(CXFA_FFDoc* hDoc, |
continue; |
if (!pPDFObj->IsReference()) |
continue; |
+ |
CPDF_Stream* pStream = ToStream(pPDFObj->GetDirect()); |
if (!pStream) |
continue; |
if (pPrePDFObj->GetString() == "form") { |
m_pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Form, &fileWrite, |
nullptr); |
- } else if (pPrePDFObj->GetString() == "datasets") { |
+ continue; |
+ } |
+ if (pPrePDFObj->GetString() == "datasets") { |
m_pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Datasets, &fileWrite, |
nullptr); |
- } else { |
- if (i == size - 1) { |
- CFX_WideString wPath = CFX_WideString::FromUTF16LE( |
- reinterpret_cast<const unsigned short*>(bs.c_str()), |
- bs.GetLength() / sizeof(unsigned short)); |
- CFX_ByteString bPath = wPath.UTF8Encode(); |
- const char* szFormat = |
- "\n<pdf href=\"%s\" xmlns=\"http://ns.adobe.com/xdp/pdf/\"/>"; |
- content.Format(szFormat, bPath.c_str()); |
- fileWrite.WriteBlock(content.c_str(), fileWrite.GetSize(), |
- content.GetLength()); |
- } |
- std::unique_ptr<CPDF_StreamAcc> pAcc(new CPDF_StreamAcc); |
- pAcc->LoadAllData(pStream); |
- fileWrite.WriteBlock(pAcc->GetData(), fileWrite.GetSize(), |
- pAcc->GetSize()); |
+ continue; |
} |
+ if (i == size - 1) { |
+ CFX_WideString wPath = CFX_WideString::FromUTF16LE( |
+ reinterpret_cast<const unsigned short*>(bs.c_str()), |
+ bs.GetLength() / sizeof(unsigned short)); |
+ CFX_ByteString bPath = wPath.UTF8Encode(); |
+ const char* szFormat = |
+ "\n<pdf href=\"%s\" xmlns=\"http://ns.adobe.com/xdp/pdf/\"/>"; |
+ content.Format(szFormat, bPath.c_str()); |
+ fileWrite.WriteBlock(content.c_str(), fileWrite.GetSize(), |
+ content.GetLength()); |
+ } |
+ std::unique_ptr<CPDF_StreamAcc> pAcc(new CPDF_StreamAcc); |
+ pAcc->LoadAllData(pStream); |
+ fileWrite.WriteBlock(pAcc->GetData(), fileWrite.GetSize(), |
+ pAcc->GetSize()); |
} |
} |
if (!fileWrite.Flush()) { |
@@ -702,7 +687,6 @@ FX_BOOL CPDFXFA_Document::IsValidationsEnabled(CXFA_FFDoc* hDoc) { |
return FALSE; |
if (m_pSDKDoc->GetInterForm()) |
return m_pSDKDoc->GetInterForm()->IsXfaValidationsEnabled(); |
- |
return TRUE; |
} |
@@ -729,6 +713,7 @@ void CPDFXFA_Document::SetFocusWidget(CXFA_FFDoc* hDoc, |
CPDFSDK_PageView* pPageView = m_pSDKDoc->GetPageView(i); |
if (!pPageView) |
continue; |
+ |
CPDFSDK_Annot* pAnnot = pPageView->GetAnnotByXFAWidget(hWidget); |
if (pAnnot) { |
m_pSDKDoc->SetFocusAnnot(pAnnot); |
@@ -759,29 +744,16 @@ void CPDFXFA_Document::Print(CXFA_FFDoc* hDoc, |
dwOptions & XFA_PRINTOPT_PrintAnnot); |
} |
-void CPDFXFA_Document::GetURL(CXFA_FFDoc* hDoc, CFX_WideString& wsDocURL) { |
- if (hDoc != m_pXFADoc.get()) |
- return; |
- |
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
- if (!pEnv) |
- return; |
- |
- pEnv->FFI_GetURL(this, wsDocURL); |
-} |
- |
FX_ARGB CPDFXFA_Document::GetHighlightColor(CXFA_FFDoc* hDoc) { |
- if (hDoc != m_pXFADoc.get()) |
+ if (hDoc != m_pXFADoc.get() || !m_pSDKDoc) |
return 0; |
- if (m_pSDKDoc) { |
- if (CPDFSDK_InterForm* pInterForm = m_pSDKDoc->GetInterForm()) { |
- FX_COLORREF color = pInterForm->GetHighlightColor(FPDF_FORMFIELD_XFA); |
- uint8_t alpha = pInterForm->GetHighlightAlpha(); |
- FX_ARGB argb = ArgbEncode((int)alpha, color); |
- return argb; |
- } |
- } |
- return 0; |
+ |
+ CPDFSDK_InterForm* pInterForm = m_pSDKDoc->GetInterForm(); |
+ if (!pInterForm) |
+ return 0; |
+ |
+ return ArgbEncode(pInterForm->GetHighlightAlpha(), |
+ pInterForm->GetHighlightColor(FPDF_FORMFIELD_XFA)); |
} |
FX_BOOL CPDFXFA_Document::NotifySubmit(FX_BOOL bPrevOrPost) { |
@@ -813,29 +785,31 @@ FX_BOOL CPDFXFA_Document::OnBeforeNotifySubmit() { |
} |
pWidgetAccIterator.reset(m_pXFADocView->CreateWidgetAccIterator()); |
- if (pWidgetAccIterator) { |
- CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext(); |
- pWidgetAcc = pWidgetAccIterator->MoveToNext(); |
- while (pWidgetAcc) { |
- int fRet = pWidgetAcc->ProcessValidate(-1); |
- if (fRet == XFA_EVENTERROR_Error) { |
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
- if (!pEnv) |
- return FALSE; |
- CFX_WideString ws; |
- ws.FromLocal(IDS_XFA_Validate_Input); |
- CFX_ByteString bs = ws.UTF16LE_Encode(); |
- int len = bs.GetLength() / sizeof(unsigned short); |
- pEnv->FFI_Alert( |
- (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)), |
- (FPDF_WIDESTRING)L"", 0, 1); |
- bs.ReleaseBuffer(len * sizeof(unsigned short)); |
+ if (!pWidgetAccIterator) |
+ return TRUE; |
+ |
+ CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext(); |
+ pWidgetAcc = pWidgetAccIterator->MoveToNext(); |
+ while (pWidgetAcc) { |
+ int fRet = pWidgetAcc->ProcessValidate(-1); |
+ if (fRet == XFA_EVENTERROR_Error) { |
+ CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
+ if (!pEnv) |
return FALSE; |
- } |
- pWidgetAcc = pWidgetAccIterator->MoveToNext(); |
+ |
+ CFX_WideString ws; |
+ ws.FromLocal(IDS_XFA_Validate_Input); |
+ CFX_ByteString bs = ws.UTF16LE_Encode(); |
+ int len = bs.GetLength(); |
+ pEnv->FFI_Alert((FPDF_WIDESTRING)bs.GetBuffer(len), (FPDF_WIDESTRING)L"", |
+ 0, 1); |
+ bs.ReleaseBuffer(len); |
+ return FALSE; |
} |
- m_pXFADocView->UpdateDocView(); |
+ pWidgetAcc = pWidgetAccIterator->MoveToNext(); |
} |
+ m_pXFADocView->UpdateDocView(); |
+ |
return TRUE; |
} |
@@ -868,8 +842,8 @@ void CPDFXFA_Document::OnAfterNotifySubmit() { |
FX_BOOL CPDFXFA_Document::SubmitData(CXFA_FFDoc* hDoc, CXFA_Submit submit) { |
if (!NotifySubmit(TRUE) || !m_pXFADocView) |
return FALSE; |
- m_pXFADocView->UpdateDocView(); |
+ m_pXFADocView->UpdateDocView(); |
FX_BOOL ret = SubmitDataInternal(hDoc, submit); |
NotifySubmit(FALSE); |
return ret; |
@@ -880,11 +854,12 @@ IFX_FileRead* CPDFXFA_Document::OpenLinkedFile(CXFA_FFDoc* hDoc, |
CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
if (!pEnv) |
return FALSE; |
+ |
CFX_ByteString bs = wsLink.UTF16LE_Encode(); |
- int len = bs.GetLength() / sizeof(unsigned short); |
- FPDF_FILEHANDLER* pFileHandler = pEnv->FFI_OpenFile( |
- 0, (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)), "rb"); |
- bs.ReleaseBuffer(len * sizeof(unsigned short)); |
+ int len = bs.GetLength(); |
+ FPDF_FILEHANDLER* pFileHandler = |
+ pEnv->FFI_OpenFile(0, (FPDF_WIDESTRING)bs.GetBuffer(len), "rb"); |
+ bs.ReleaseBuffer(len); |
if (!pFileHandler) |
return nullptr; |
@@ -904,7 +879,6 @@ FX_BOOL CPDFXFA_Document::ExportSubmitFile(FPDF_FILEHANDLER* pFileHandler, |
return FALSE; |
CFPDF_FileStream fileStream(pFileHandler); |
- |
if (fileType == FXFA_SAVEAS_XML) { |
const char kContent[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"; |
fileStream.WriteBlock(kContent, 0, strlen(kContent)); |
@@ -923,16 +897,19 @@ FX_BOOL CPDFXFA_Document::ExportSubmitFile(FPDF_FILEHANDLER* pFileHandler, |
fileStream.Flush(); |
return FALSE; |
} |
+ |
CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); |
if (!pRoot) { |
fileStream.Flush(); |
return FALSE; |
} |
+ |
CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); |
if (!pAcroForm) { |
fileStream.Flush(); |
return FALSE; |
} |
+ |
CPDF_Array* pArray = ToArray(pAcroForm->GetObjectBy("XFA")); |
if (!pArray) { |
fileStream.Flush(); |
@@ -947,6 +924,7 @@ FX_BOOL CPDFXFA_Document::ExportSubmitFile(FPDF_FILEHANDLER* pFileHandler, |
continue; |
if (!pPDFObj->IsReference()) |
continue; |
+ |
CPDF_Object* pDirectObj = pPDFObj->GetDirect(); |
if (!pDirectObj->IsStream()) |
continue; |
@@ -996,9 +974,10 @@ void CPDFXFA_Document::ToXFAContentFlags(CFX_WideString csSrcContent, |
flag |= FXFA_XFDF; |
if (csSrcContent.Find(L" form ", 0) != -1) |
flag |= FXFA_FORM; |
- if (flag == 0) |
+ if (flag == 0) { |
flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS | |
FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM; |
+ } |
} |
FX_BOOL CPDFXFA_Document::MailToInfo(CFX_WideString& csURL, |
@@ -1009,8 +988,9 @@ FX_BOOL CPDFXFA_Document::MailToInfo(CFX_WideString& csURL, |
CFX_WideString& csMsg) { |
CFX_WideString srcURL = csURL; |
srcURL.TrimLeft(); |
- if (0 != srcURL.Left(7).CompareNoCase(L"mailto:")) |
+ if (srcURL.Left(7).CompareNoCase(L"mailto:") != 0) |
return FALSE; |
+ |
int pos = srcURL.Find(L'?', 0); |
CFX_WideString tmp; |
if (pos == -1) { |
@@ -1019,14 +999,12 @@ FX_BOOL CPDFXFA_Document::MailToInfo(CFX_WideString& csURL, |
return FALSE; |
tmp = srcURL.Right(csURL.GetLength() - 7); |
- tmp.TrimLeft(); |
- tmp.TrimRight(); |
} else { |
tmp = srcURL.Left(pos); |
tmp = tmp.Right(tmp.GetLength() - 7); |
- tmp.TrimLeft(); |
- tmp.TrimRight(); |
} |
+ tmp.TrimLeft(); |
+ tmp.TrimRight(); |
csToAddress = tmp; |
@@ -1035,38 +1013,31 @@ FX_BOOL CPDFXFA_Document::MailToInfo(CFX_WideString& csURL, |
srcURL.TrimLeft(); |
srcURL.TrimRight(); |
pos = srcURL.Find(L'&', 0); |
- if (pos == -1) |
- tmp = srcURL; |
- else |
- tmp = srcURL.Left(pos); |
+ tmp = (pos == -1) ? srcURL : srcURL.Left(pos); |
tmp.TrimLeft(); |
tmp.TrimRight(); |
- if (tmp.GetLength() >= 3 && 0 == tmp.Left(3).CompareNoCase(L"cc=")) { |
+ if (tmp.GetLength() >= 3 && tmp.Left(3).CompareNoCase(L"cc=") == 0) { |
tmp = tmp.Right(tmp.GetLength() - 3); |
if (!csCCAddress.IsEmpty()) |
csCCAddress += L';'; |
csCCAddress += tmp; |
- |
} else if (tmp.GetLength() >= 4 && |
- 0 == tmp.Left(4).CompareNoCase(L"bcc=")) { |
+ tmp.Left(4).CompareNoCase(L"bcc=") == 0) { |
tmp = tmp.Right(tmp.GetLength() - 4); |
if (!csBCCAddress.IsEmpty()) |
csBCCAddress += L';'; |
csBCCAddress += tmp; |
} else if (tmp.GetLength() >= 8 && |
- 0 == tmp.Left(8).CompareNoCase(L"subject=")) { |
+ tmp.Left(8).CompareNoCase(L"subject=") == 0) { |
tmp = tmp.Right(tmp.GetLength() - 8); |
csSubject += tmp; |
} else if (tmp.GetLength() >= 5 && |
- 0 == tmp.Left(5).CompareNoCase(L"body=")) { |
+ tmp.Left(5).CompareNoCase(L"body=") == 0) { |
tmp = tmp.Right(tmp.GetLength() - 5); |
csMsg += tmp; |
} |
- if (pos == -1) |
- srcURL = L""; |
- else |
- srcURL = srcURL.Right(csURL.GetLength() - (pos + 1)); |
+ srcURL = (pos == -1) ? L"" : srcURL.Right(csURL.GetLength() - (pos + 1)); |
} |
csToAddress.Replace(L",", L";"); |
csCCAddress.Replace(L",", L";"); |
@@ -1079,6 +1050,7 @@ FX_BOOL CPDFXFA_Document::SubmitDataInternal(CXFA_FFDoc* hDoc, |
CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
if (!pEnv) |
return FALSE; |
+ |
CFX_WideStringC csURLC; |
submit.GetSubmitTarget(csURLC); |
CFX_WideString csURL(csURLC); |
@@ -1086,12 +1058,13 @@ FX_BOOL CPDFXFA_Document::SubmitDataInternal(CXFA_FFDoc* hDoc, |
CFX_WideString ws; |
ws.FromLocal("Submit cancelled."); |
CFX_ByteString bs = ws.UTF16LE_Encode(); |
- int len = bs.GetLength() / sizeof(unsigned short); |
- pEnv->FFI_Alert((FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)), |
- (FPDF_WIDESTRING)L"", 0, 4); |
- bs.ReleaseBuffer(len * sizeof(unsigned short)); |
+ int len = bs.GetLength(); |
+ pEnv->FFI_Alert((FPDF_WIDESTRING)bs.GetBuffer(len), (FPDF_WIDESTRING)L"", 0, |
+ 4); |
+ bs.ReleaseBuffer(len); |
return FALSE; |
} |
+ |
FPDF_BOOL bRet = TRUE; |
FPDF_FILEHANDLER* pFileHandler = nullptr; |
int fileFlag = -1; |
@@ -1109,6 +1082,7 @@ FX_BOOL CPDFXFA_Document::SubmitDataInternal(CXFA_FFDoc* hDoc, |
FPDF_DWORD flag = 0; |
if (submit.IsSubmitEmbedPDF()) |
flag |= FXFA_PDF; |
+ |
ToXFAContentFlags(csContent, flag); |
pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XDP, nullptr, "wb"); |
fileFlag = FXFA_SAVEAS_XDP; |
@@ -1132,7 +1106,7 @@ FX_BOOL CPDFXFA_Document::SubmitDataInternal(CXFA_FFDoc* hDoc, |
} |
if (!pFileHandler) |
return FALSE; |
- if (0 == csURL.Left(7).CompareNoCase(L"mailto:")) { |
+ if (csURL.Left(7).CompareNoCase(L"mailto:") == 0) { |
CFX_WideString csToAddress; |
CFX_WideString csCCAddress; |
CFX_WideString csBCCAddress; |
@@ -1142,6 +1116,7 @@ FX_BOOL CPDFXFA_Document::SubmitDataInternal(CXFA_FFDoc* hDoc, |
csMsg); |
if (!bRet) |
return FALSE; |
+ |
CFX_ByteString bsTo = CFX_WideString(csToAddress).UTF16LE_Encode(); |
CFX_ByteString bsCC = CFX_WideString(csCCAddress).UTF16LE_Encode(); |
CFX_ByteString bsBcc = CFX_WideString(csBCCAddress).UTF16LE_Encode(); |
@@ -1163,11 +1138,10 @@ FX_BOOL CPDFXFA_Document::SubmitDataInternal(CXFA_FFDoc* hDoc, |
// HTTP or FTP |
CFX_WideString ws; |
CFX_ByteString bs = csURL.UTF16LE_Encode(); |
- int len = bs.GetLength() / sizeof(unsigned short); |
- pEnv->FFI_UploadTo( |
- pFileHandler, fileFlag, |
- (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short))); |
- bs.ReleaseBuffer(len * sizeof(unsigned short)); |
+ int len = bs.GetLength(); |
+ pEnv->FFI_UploadTo(pFileHandler, fileFlag, |
+ (FPDF_WIDESTRING)bs.GetBuffer(len)); |
+ bs.ReleaseBuffer(len); |
} |
return bRet; |
} |
@@ -1183,22 +1157,7 @@ FX_BOOL CPDFXFA_Document::SetGlobalProperty(CXFA_FFDoc* hDoc, |
pValue); |
return FALSE; |
} |
-FX_BOOL CPDFXFA_Document::GetPDFScriptObject(CXFA_FFDoc* hDoc, |
- const CFX_ByteStringC& utf8Name, |
- CFXJSE_Value* pValue) { |
- if (hDoc != m_pXFADoc.get()) |
- return FALSE; |
- |
- if (!m_pSDKDoc || !m_pSDKDoc->GetEnv()->GetJSRuntime()) |
- return FALSE; |
- if (!m_pJSContext) { |
- m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc.get()); |
- m_pJSContext = m_pSDKDoc->GetEnv()->GetJSRuntime()->NewContext(); |
- } |
- |
- return m_pSDKDoc->GetEnv()->GetJSRuntime()->GetValueByName(utf8Name, pValue); |
-} |
FX_BOOL CPDFXFA_Document::GetGlobalProperty(CXFA_FFDoc* hDoc, |
const CFX_ByteStringC& szPropName, |
CFXJSE_Value* pValue) { |