summaryrefslogtreecommitdiff
path: root/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fpdfsdk/fpdfxfa/cpdfxfa_page.cpp')
-rw-r--r--fpdfsdk/fpdfxfa/cpdfxfa_page.cpp56
1 files changed, 44 insertions, 12 deletions
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
index 9fe63f435f..da1c1e521a 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
@@ -18,25 +18,32 @@
#include "xfa/fxfa/cxfa_ffpageview.h"
CPDFXFA_Page::CPDFXFA_Page(CPDFXFA_Context* pContext, int page_index)
- : m_pXFAPageView(nullptr), m_pContext(pContext), m_iPageIndex(page_index) {
- CPDF_Document* pPDFDoc = m_pContext->GetPDFDoc();
- CPDF_Dictionary* pDict = nullptr;
- if (pPDFDoc && m_pContext->GetFormType() != FormType::kXFAFull)
- pDict = pPDFDoc->GetPageDictionary(m_iPageIndex);
- m_pPDFPage = pdfium::MakeUnique<CPDF_Page>(pPDFDoc, pDict, true);
- m_pPDFPage->SetPageExtension(this);
-}
+ : m_pXFAPageView(nullptr), m_pContext(pContext), m_iPageIndex(page_index) {}
CPDFXFA_Page::~CPDFXFA_Page() {}
-bool CPDFXFA_Page::LoadPage() {
- if (!m_pContext || m_iPageIndex < 0)
+bool CPDFXFA_Page::LoadPDFPage() {
+ if (!m_pContext)
return false;
- if (m_pContext->GetFormType() != FormType::kXFAFull) {
+ CPDF_Document* pPDFDoc = m_pContext->GetPDFDoc();
+ if (!pPDFDoc)
+ return false;
+
+ CPDF_Dictionary* pDict = pPDFDoc->GetPageDictionary(m_iPageIndex);
+ if (!pDict)
+ return false;
+
+ if (!m_pPDFPage || m_pPDFPage->GetFormDict() != pDict) {
+ m_pPDFPage = pdfium::MakeUnique<CPDF_Page>(pPDFDoc, pDict, true);
m_pPDFPage->ParseContent();
- return true;
}
+ return true;
+}
+
+bool CPDFXFA_Page::LoadXFAPageView() {
+ if (!m_pContext)
+ return false;
CXFA_FFDoc* pXFADoc = m_pContext->GetXFADoc();
if (!pXFADoc)
@@ -54,6 +61,31 @@ bool CPDFXFA_Page::LoadPage() {
return true;
}
+bool CPDFXFA_Page::LoadPage() {
+ if (!m_pContext || m_iPageIndex < 0)
+ return false;
+
+ switch (m_pContext->GetFormType()) {
+ case FormType::kNone:
+ case FormType::kAcroForm:
+ case FormType::kXFAForeground:
+ return LoadPDFPage();
+ case FormType::kXFAFull:
+ return LoadXFAPageView();
+ }
+ return false;
+}
+
+bool CPDFXFA_Page::LoadPDFPage(CPDF_Dictionary* pageDict) {
+ if (!m_pContext || m_iPageIndex < 0 || !pageDict)
+ return false;
+
+ m_pPDFPage =
+ pdfium::MakeUnique<CPDF_Page>(m_pContext->GetPDFDoc(), pageDict, true);
+ m_pPDFPage->ParseContent();
+ return true;
+}
+
CPDF_Document::Extension* CPDFXFA_Page::GetDocumentExtension() const {
return m_pContext.Get();
}