Index: fpdfsdk/fsdk_mgr.cpp |
diff --git a/fpdfsdk/fsdk_mgr.cpp b/fpdfsdk/fsdk_mgr.cpp |
index 835439394de0ad70f2f61b7d1bf0048635f2b318..c4c0384b44cf2fdc33006bd51612d362bf28b43d 100644 |
--- a/fpdfsdk/fsdk_mgr.cpp |
+++ b/fpdfsdk/fsdk_mgr.cpp |
@@ -34,11 +34,17 @@ |
#include <ctime> |
#endif |
+namespace { |
+ |
+// NOTE: |bsUTF16LE| must outlive the use of the result. Care must be taken |
+// since modifying the result would impact |bsUTF16LE|. |
FPDF_WIDESTRING AsFPDFWideString(CFX_ByteString* bsUTF16LE) { |
return reinterpret_cast<FPDF_WIDESTRING>( |
bsUTF16LE->GetBuffer(bsUTF16LE->GetLength())); |
} |
+} // namespace |
+ |
CPDFDoc_Environment::CPDFDoc_Environment(UnderlyingDocumentType* pDoc, |
FPDF_FORMFILLINFO* pFFinfo) |
: m_pInfo(pFFinfo), m_pSDKDoc(nullptr), m_pUnderlyingDoc(pDoc) { |
@@ -988,19 +994,26 @@ void CPDFSDK_PageView::UpdateView(CPDFSDK_Annot* pAnnot) { |
rcWindow.bottom); |
} |
-int CPDFSDK_PageView::GetPageIndex() { |
- if (m_page) { |
+int CPDFSDK_PageView::GetPageIndex() const { |
+ if (!m_page) |
+ return -1; |
+ |
#ifdef PDF_ENABLE_XFA |
- CPDF_Dictionary* pDic = m_page->GetPDFPage()->m_pFormDict; |
-#else // PDF_ENABLE_XFA |
- CPDF_Dictionary* pDic = m_page->m_pFormDict; |
-#endif // PDF_ENABLE_XFA |
- CPDF_Document* pDoc = m_pSDKDoc->GetPDFDocument(); |
- if (pDoc && pDic) { |
- return pDoc->GetPageIndex(pDic->GetObjNum()); |
+ int nDocType = m_page->GetDocument()->GetDocType(); |
+ switch (nDocType) { |
+ case DOCTYPE_DYNAMIC_XFA: { |
+ CXFA_FFPageView* pPageView = m_page->GetXFAPageView(); |
+ return pPageView ? pPageView->GetPageIndex() : -1; |
} |
+ case DOCTYPE_STATIC_XFA: |
+ case DOCTYPE_PDF: |
+ return GetPageIndexForStaticPDF(); |
+ default: |
+ return -1; |
} |
- return -1; |
+#else // PDF_ENABLE_XFA |
+ return GetPageIndexForStaticPDF(); |
+#endif // PDF_ENABLE_XFA |
} |
bool CPDFSDK_PageView::IsValidAnnot(const CPDF_Annot* p) const { |
@@ -1022,3 +1035,14 @@ CPDFSDK_Annot* CPDFSDK_PageView::GetFocusAnnot() { |
} |
return nullptr; |
} |
+ |
+int CPDFSDK_PageView::GetPageIndexForStaticPDF() const { |
+#ifdef PDF_ENABLE_XFA |
+ CPDF_Page* pPage = m_page->GetPDFPage(); |
+#else // PDF_ENABLE_XFA |
+ CPDF_Page* pPage = m_page; |
+#endif // PDF_ENABLE_XFA |
+ CPDF_Dictionary* pDict = pPage->m_pFormDict; |
+ CPDF_Document* pDoc = m_pSDKDoc->GetPDFDocument(); |
+ return (pDoc && pDict) ? pDoc->GetPageIndex(pDict->GetObjNum()) : -1; |
+} |