From e7207f33f8024b59fc85abb1b4594b0fbab5361b Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Mon, 7 May 2018 20:26:46 +0000 Subject: Ensure that XFA Pages always have a corresponding PDF page The PDF page may be blank, un-numbered, or untracked by CPDF, but this provides a place for all XFA pages to "extend" from down the road. Change-Id: If1003be0f261154e61e9793ccba7e1f43cd73104 Reviewed-on: https://pdfium-review.googlesource.com/31771 Commit-Queue: Tom Sepez Reviewed-by: dsinclair --- fpdfsdk/fpdfxfa/cpdfxfa_page.cpp | 56 +++++++++------------------------------- 1 file changed, 12 insertions(+), 44 deletions(-) (limited to 'fpdfsdk/fpdfxfa/cpdfxfa_page.cpp') diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp index 809214dec6..f1d7aa9ad3 100644 --- a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp +++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp @@ -18,32 +18,25 @@ #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) {} + : 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->GetPage(m_iPageIndex); + m_pPDFPage = pdfium::MakeUnique(pPDFDoc, pDict, true); + m_pPDFPage->SetPageExtension(this); +} CPDFXFA_Page::~CPDFXFA_Page() {} -bool CPDFXFA_Page::LoadPDFPage() { - if (!m_pContext) - return false; - - CPDF_Document* pPDFDoc = m_pContext->GetPDFDoc(); - if (!pPDFDoc) - return false; - - CPDF_Dictionary* pDict = pPDFDoc->GetPage(m_iPageIndex); - if (!pDict) +bool CPDFXFA_Page::LoadPage() { + if (!m_pContext || m_iPageIndex < 0) return false; - if (!m_pPDFPage || m_pPDFPage->m_pFormDict != pDict) { - m_pPDFPage = pdfium::MakeUnique(pPDFDoc, pDict, true); + if (m_pContext->GetFormType() != FormType::kXFAFull) { m_pPDFPage->ParseContent(); + return true; } - return true; -} - -bool CPDFXFA_Page::LoadXFAPageView() { - if (!m_pContext) - return false; CXFA_FFDoc* pXFADoc = m_pContext->GetXFADoc(); if (!pXFADoc) @@ -61,31 +54,6 @@ bool CPDFXFA_Page::LoadXFAPageView() { 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(m_pContext->GetPDFDoc(), pageDict, true); - m_pPDFPage->ParseContent(); - return true; -} - CPDF_Document::Extension* CPDFXFA_Page::GetDocumentExtension() const { return m_pContext.Get(); } -- cgit v1.2.3