1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved. 2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/foxitlib.h" 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_common.h" 9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffapp.h" 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffdoc.h" 11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffdocview.h" 12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffwidget.h" 13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffnotify.h" 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_fontmgr.h" 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_FFDoc::CXFA_FFDoc(CXFA_FFApp* pApp, IXFA_DocProvider* pDocProvider) 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : m_pDocProvider(pDocProvider), 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDocument(nullptr), 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pStream(nullptr), 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pApp(pApp), 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pNotify(nullptr), 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPDFDoc(nullptr), 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_dwDocType(XFA_DOCTYPE_Static), 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bOwnStream(TRUE) { 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_FFDoc::~CXFA_FFDoc() { 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CloseDoc(); 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_DWORD CXFA_FFDoc::GetDocType() { 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_dwDocType; 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CXFA_FFDoc::StartLoad() { 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pNotify = new CXFA_FFNotify(this); 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IXFA_DocParser* pDocParser = IXFA_DocParser::Create(m_pNotify); 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t iStatus = pDocParser->StartParse(m_pStream); 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDocument = pDocParser->GetDocument(); 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return iStatus; 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL XFA_GetPDFContentsFromPDFXML(IFDE_XMLNode* pPDFElement, 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t*& pByteBuffer, 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t& iBufferSize) { 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFDE_XMLElement* pDocumentElement = NULL; 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (IFDE_XMLNode* pXMLNode = 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pPDFElement->GetNodeItem(IFDE_XMLNode::FirstChild); 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pXMLNode; pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling)) { 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pXMLNode->GetType() == FDE_XMLNODE_Element) { 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString wsTagName; 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode; 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pXMLElement->GetTagName(wsTagName); 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (wsTagName.Equal(FX_WSTRC(L"document"))) { 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pDocumentElement = pXMLElement; 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pDocumentElement) { 56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFDE_XMLElement* pChunkElement = NULL; 59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (IFDE_XMLNode* pXMLNode = 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pDocumentElement->GetNodeItem(IFDE_XMLNode::FirstChild); 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pXMLNode; pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling)) { 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pXMLNode->GetType() == FDE_XMLNODE_Element) { 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString wsTagName; 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode; 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pXMLElement->GetTagName(wsTagName); 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (wsTagName.Equal(FX_WSTRC(L"chunk"))) { 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pChunkElement = pXMLElement; 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pChunkElement) { 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString wsPDFContent; 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pChunkElement->GetTextData(wsPDFContent); 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iBufferSize = FX_Base64DecodeW(wsPDFContent, wsPDFContent.GetLength(), NULL); 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pByteBuffer = FX_Alloc(uint8_t, iBufferSize + 1); 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pByteBuffer[iBufferSize] = '0'; // FIXME: I bet this is wrong. 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Base64DecodeW(wsPDFContent, wsPDFContent.GetLength(), pByteBuffer); 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid XFA_XPDPacket_MergeRootNode(CXFA_Node* pOriginRoot, CXFA_Node* pNewRoot) { 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pChildNode = pNewRoot->GetNodeItem(XFA_NODEITEM_FirstChild); 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (pChildNode) { 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pOriginChild = 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pOriginRoot->GetFirstChildByName(pChildNode->GetNameHash()); 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pOriginChild) { 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling); 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pNextSibling = 92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling); 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pNewRoot->RemoveChild(pChildNode); 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pOriginRoot->InsertChild(pChildNode); 95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pChildNode = pNextSibling; 96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pNextSibling = NULL; 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CXFA_FFDoc::DoLoad(IFX_Pause* pPause) { 101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t iStatus = m_pDocument->GetParser()->DoParse(pPause); 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iStatus == XFA_PARSESTATUS_Done && !m_pPDFDoc) { 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pPDFNode = (CXFA_Node*)m_pDocument->GetXFANode(XFA_HASHCODE_Pdf); 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pPDFNode) { 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return XFA_PARSESTATUS_SyntaxErr; 106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFDE_XMLNode* pPDFXML = pPDFNode->GetXMLMappingNode(); 108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pPDFXML->GetType() != FDE_XMLNODE_Element) { 109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return XFA_PARSESTATUS_SyntaxErr; 110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t iBufferSize = 0; 112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t* pByteBuffer = NULL; 113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFX_FileRead* pXFAReader = NULL; 114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (XFA_GetPDFContentsFromPDFXML(pPDFXML, pByteBuffer, iBufferSize)) { 115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pXFAReader = FX_CreateMemoryStream(pByteBuffer, iBufferSize, TRUE); 116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pXFAReader) { 117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pByteBuffer) { 118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Free(pByteBuffer); 119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pByteBuffer = NULL; 120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return XFA_PARSESTATUS_SyntaxErr; 122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString wsHref; 125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ((IFDE_XMLElement*)pPDFXML)->GetString(L"href", wsHref); 126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!wsHref.IsEmpty()) { 127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pXFAReader = GetDocProvider()->OpenLinkedFile(this, wsHref); 128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pXFAReader) { 131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return XFA_PARSESTATUS_SyntaxErr; 132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* pPDFDocument = 134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann GetDocProvider()->OpenPDF(this, pXFAReader, TRUE); 135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_assert(!m_pPDFDoc); 136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!OpenDoc(pPDFDocument)) { 137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return XFA_PARSESTATUS_SyntaxErr; 138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IXFA_Parser* pParser = IXFA_Parser::Create(m_pDocument, TRUE); 140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pParser) { 141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return XFA_PARSESTATUS_SyntaxErr; 142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pRootNode = NULL; 144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pParser->StartParse(m_pStream) == XFA_PARSESTATUS_Ready && 145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pParser->DoParse(NULL) == XFA_PARSESTATUS_Done) { 146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pRootNode = pParser->GetRootNode(); 147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pRootNode && m_pDocument->GetRoot()) { 149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_XPDPacket_MergeRootNode(m_pDocument->GetRoot(), pRootNode); 150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iStatus = XFA_PARSESTATUS_Done; 151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iStatus = XFA_PARSESTATUS_StatusErr; 153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pParser->Release(); 155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pParser = NULL; 156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return iStatus; 158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_FFDoc::StopLoad() { 160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pApp->GetXFAFontMgr()->LoadDocFonts(this); 161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_dwDocType = XFA_DOCTYPE_Static; 162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pConfig = (CXFA_Node*)m_pDocument->GetXFANode(XFA_HASHCODE_Config); 163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pConfig) { 164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pAcrobat = pConfig->GetFirstChildByClass(XFA_ELEMENT_Acrobat); 167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pAcrobat) { 168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pAcrobat7 = pAcrobat->GetFirstChildByClass(XFA_ELEMENT_Acrobat7); 171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pAcrobat7) { 172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pDynamicRender = 175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pAcrobat7->GetFirstChildByClass(XFA_ELEMENT_DynamicRender); 176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pDynamicRender) { 177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString wsType; 180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pDynamicRender->TryContent(wsType) && wsType == FX_WSTRC(L"required")) { 181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_dwDocType = XFA_DOCTYPE_Dynamic; 182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_DocView* CXFA_FFDoc::CreateDocView(FX_DWORD dwView) { 185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_FFDocView* pDocView = 186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (CXFA_FFDocView*)m_mapTypeToDocView.GetValueAt((void*)(uintptr_t)dwView); 187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pDocView) { 188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pDocView = new CXFA_FFDocView(this); 189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_mapTypeToDocView.SetAt((void*)(uintptr_t)dwView, pDocView); 190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pDocView; 192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_FFDocView* CXFA_FFDoc::GetDocView(IXFA_DocLayout* pLayout) { 194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_POSITION ps = m_mapTypeToDocView.GetStartPosition(); 195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (ps) { 196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void* pType; 197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_FFDocView* pDocView; 198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_mapTypeToDocView.GetNextAssoc(ps, pType, (void*&)pDocView); 199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pDocView->GetXFALayout() == pLayout) { 200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pDocView; 201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_FFDocView* CXFA_FFDoc::GetDocView() { 206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_POSITION ps = m_mapTypeToDocView.GetStartPosition(); 207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ps) { 208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void* pType; 209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_FFDocView* pDocView; 210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_mapTypeToDocView.GetNextAssoc(ps, pType, (void*&)pDocView); 211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pDocView; 212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFDoc::OpenDoc(IFX_FileRead* pStream, FX_BOOL bTakeOverFile) { 216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bOwnStream = bTakeOverFile; 217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pStream = pStream; 218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFDoc::OpenDoc(CPDF_Document* pPDFDoc) { 221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pPDFDoc == NULL) { 222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pRoot = pPDFDoc->GetRoot(); 225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pRoot == NULL) { 226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm"); 229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pAcroForm == NULL) { 230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pElementXFA = pAcroForm->GetElementValue("XFA"); 233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pElementXFA == NULL) { 234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t iObjType = pElementXFA->GetType(); 237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ArrayTemplate<CPDF_Stream*> xfaStreams; 238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iObjType == PDFOBJ_ARRAY) { 239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pXFAArray = (CPDF_Array*)pElementXFA; 240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD count = pXFAArray->GetCount() / 2; 241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (FX_DWORD i = 0; i < count; i++) { 242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Stream* pStream = pXFAArray->GetStream(i * 2 + 1); 243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pStream != NULL) { 244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann xfaStreams.Add(pStream); 245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (iObjType == PDFOBJ_STREAM) { 248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann xfaStreams.Add((CPDF_Stream*)pElementXFA); 249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (xfaStreams.GetSize() < 1) { 251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFX_FileRead* pFileRead = new CXFA_FileRead(xfaStreams); 254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPDFDoc = pPDFDoc; 255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pStream) { 256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pStream->Release(); 257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pStream = NULL; 258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pStream = pFileRead; 260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bOwnStream = TRUE; 261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFDoc::CloseDoc() { 264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_POSITION psClose = m_mapTypeToDocView.GetStartPosition(); 265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (psClose) { 266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void* pType; 267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_FFDocView* pDocView; 268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_mapTypeToDocView.GetNextAssoc(psClose, pType, (void*&)pDocView); 269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pDocView->RunDocClose(); 270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pDocument) { 272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDocument->ClearLayoutData(); 273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_POSITION ps = m_mapTypeToDocView.GetStartPosition(); 275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (ps) { 276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void* pType; 277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_FFDocView* pDocView; 278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_mapTypeToDocView.GetNextAssoc(ps, pType, (void*&)pDocView); 279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete pDocView; 280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_mapTypeToDocView.RemoveAll(); 282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pDocument) { 283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IXFA_Parser* pParser = m_pDocument->GetParser(); 284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pParser->Release(); 285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDocument = NULL; 286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pNotify) { 288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete m_pNotify; 289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pNotify = NULL; 290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pApp->GetXFAFontMgr()->ReleaseDocFonts(this); 292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_dwDocType != XFA_DOCTYPE_XDP && m_pStream && m_bOwnStream) { 293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pStream->Release(); 294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pStream = NULL; 295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ps = m_mapNamedImages.GetStartPosition(); 297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (ps) { 298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void* pName; 299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_IMAGEDIB_AND_DPI* pImage = NULL; 300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_mapNamedImages.GetNextAssoc(ps, pName, (void*&)pImage); 301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pImage) { 302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete pImage->pDibSource; 303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pImage->pDibSource = NULL; 304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Free(pImage); 305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pImage = NULL; 306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_mapNamedImages.RemoveAll(); 309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); 310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pNoteDriver->ClearEventTargets(FALSE); 311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_FFDoc::SetDocType(FX_DWORD dwType) { 314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_dwDocType = dwType; 315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Document* CXFA_FFDoc::GetPDFDoc() { 317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pPDFDoc; 318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define _FXLIB_NEW_VERSION_ 320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_DIBitmap* CXFA_FFDoc::GetPDFNamedImage(const CFX_WideStringC& wsName, 321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t& iImageXDpi, 322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t& iImageYDpi) { 323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pPDFDoc) { 324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD dwHash = 327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_HashCode_String_GetW(wsName.GetPtr(), wsName.GetLength(), FALSE); 328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_IMAGEDIB_AND_DPI* imageDIBDpi = NULL; 329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_mapNamedImages.Lookup((void*)(uintptr_t)dwHash, (void*&)imageDIBDpi)) { 330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iImageXDpi = imageDIBDpi->iImageXDpi; 331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iImageYDpi = imageDIBDpi->iImageYDpi; 332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (CFX_DIBitmap*)imageDIBDpi->pDibSource; 333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); 335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pRoot == NULL) { 336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pNames = pRoot->GetDict("Names"); 339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pNames) { 340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pXFAImages = pNames->GetDict("XFAImages"); 343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pXFAImages) { 344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_NameTree nametree(pXFAImages); 347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef _FXLIB_NEW_VERSION_ 348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString bsName = PDF_EncodeText(wsName.GetPtr(), wsName.GetLength()); 349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObject = nametree.LookupValue(bsName); 350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObject) { 351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t iCount = nametree.GetCount(); 352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t i = 0; i < iCount; i++) { 353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString bsTemp; 354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pTempObject = nametree.LookupValue(i, bsTemp); 355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bsTemp == bsName) { 356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObject = pTempObject; 357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#else 362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObject = nametree.LookupValue(wsName); 363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObject) { 364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t iCount = nametree.GetCount(); 365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t i = 0; i < iCount; i++) { 366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString wsTemp; 367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pTempObject = nametree.LookupValue(i, wsTemp); 368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (wsTemp == wsName) { 369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObject = pTempObject; 370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif 375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObject || pObject->GetType() != PDFOBJ_STREAM) { 376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!imageDIBDpi) { 379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann imageDIBDpi = FX_Alloc(FX_IMAGEDIB_AND_DPI, 1); 380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann imageDIBDpi->pDibSource = NULL; 381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann imageDIBDpi->iImageXDpi = 0; 382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann imageDIBDpi->iImageYDpi = 0; 383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StreamAcc streamAcc; 384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann streamAcc.LoadAllData((CPDF_Stream*)pObject); 385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFX_FileRead* pImageFileRead = FX_CreateMemoryStream( 386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (uint8_t*)streamAcc.GetData(), streamAcc.GetSize()); 387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann imageDIBDpi->pDibSource = XFA_LoadImageFromBuffer( 388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pImageFileRead, FXCODEC_IMAGE_UNKNOWN, iImageXDpi, iImageYDpi); 389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann imageDIBDpi->iImageXDpi = iImageXDpi; 390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann imageDIBDpi->iImageYDpi = iImageYDpi; 391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pImageFileRead->Release(); 392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_mapNamedImages.SetAt((void*)(uintptr_t)dwHash, imageDIBDpi); 394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (CFX_DIBitmap*)imageDIBDpi->pDibSource; 395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIFDE_XMLElement* CXFA_FFDoc::GetPackageData(const CFX_WideStringC& wsPackage) { 397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD packetHash = 398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_HashCode_String_GetW(wsPackage.GetPtr(), wsPackage.GetLength()); 399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Object* pObject = m_pDocument->GetXFANode(packetHash); 400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pNode = 401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (pObject && pObject->IsNode()) ? (CXFA_Node*)pObject : NULL; 402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pNode) { 403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFDE_XMLNode* pXMLNode = pNode->GetXMLMappingNode(); 406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element) 407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ? (IFDE_XMLElement*)pXMLNode 408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : NULL; 409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFDoc::SavePackage(const CFX_WideStringC& wsPackage, 411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFX_FileWrite* pFile, 412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IXFA_ChecksumContext* pCSContext) { 413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IXFA_PacketExport* pExport = IXFA_PacketExport::Create(m_pDocument); 414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pExport) { 415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD packetHash = 418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_HashCode_String_GetW(wsPackage.GetPtr(), wsPackage.GetLength()); 419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pNode = NULL; 420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (packetHash == XFA_HASHCODE_Xfa) { 421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pNode = m_pDocument->GetRoot(); 422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Object* pObject = m_pDocument->GetXFANode(packetHash); 424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pNode = (pObject && pObject->IsNode()) ? (CXFA_Node*)pObject : NULL; 425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bFlags = FALSE; 427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pNode) { 428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString bsChecksum; 429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pCSContext) { 430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCSContext->GetChecksum(bsChecksum); 431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bFlags = pExport->Export(pFile, pNode, 0, bsChecksum.GetLength() 433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ? (const FX_CHAR*)bsChecksum 434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : NULL); 435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bFlags = pExport->Export(pFile); 437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pExport->Release(); 439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return bFlags; 440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFDoc::ImportData(IFX_FileRead* pStream, FX_BOOL bXDP) { 442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bRet = FALSE; 443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IXFA_PacketImport* pImport = IXFA_PacketImport::Create(m_pDocument); 444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pImport) { 445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bRet = pImport->ImportData(pStream); 446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pImport->Release(); 447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return bRet; 449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 450