14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2016 PDFium Authors. All rights reserved. 24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file. 44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifndef CORE_FPDFDOC_CPDF_INTERFORM_H_ 84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define CORE_FPDFDOC_CPDF_INTERFORM_H_ 94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <map> 114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <memory> 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <vector> 134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/fpdf_parser_decode.h" 154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_defaultappearance.h" 164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_string.h" 174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_system.h" 18d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "core/fxcrt/unowned_ptr.h" 194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CFieldTree; 214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CFDF_Document; 224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_Document; 234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_Dictionary; 244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_Font; 254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_FormControl; 264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_FormField; 274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_Object; 284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_Page; 294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass IPDF_FormNotify; 304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict, 324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Document* pDocument, 33d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ByteString* csNameTag); 344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_InterForm { 364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann public: 374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann explicit CPDF_InterForm(CPDF_Document* pDocument); 384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ~CPDF_InterForm(); 394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann static void SetUpdateAP(bool bUpdateAP); 414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann static bool IsUpdateAPEnabled(); 42d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann static ByteString GenerateNewResourceName(const CPDF_Dictionary* pResDict, 43d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const char* csType, 44d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int iMinLen, 45d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const char* csPrefix); 464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann static CPDF_Font* AddStandardFont(CPDF_Document* pDocument, 47d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ByteString csFontName); 48d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann static ByteString GetNativeFont(uint8_t iCharSet, void* pLogFont); 494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann static uint8_t GetNativeCharSet(); 504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann static CPDF_Font* AddNativeFont(uint8_t iCharSet, CPDF_Document* pDocument); 514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann static CPDF_Font* AddNativeFont(CPDF_Document* pDocument); 524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 53d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann size_t CountFields(const WideString& csFieldName) const; 54d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CPDF_FormField* GetField(uint32_t index, const WideString& csFieldName) const; 554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormField* GetFieldByDict(CPDF_Dictionary* pFieldDict) const; 564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormControl* GetControlAtPoint(CPDF_Page* pPage, 5833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann const CFX_PointF& point, 594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int* z_order) const; 604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormControl* GetControlByDict(const CPDF_Dictionary* pWidgetDict) const; 614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool NeedConstructAP() const; 634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int CountFieldsInCalculationOrder(); 644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormField* GetFieldInCalculationOrder(int index); 654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int FindFieldInCalculationOrder(const CPDF_FormField* pField); 664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 67d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CPDF_Font* GetFormFont(ByteString csNameTag) const; 684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_DefaultAppearance GetDefaultAppearance() const; 694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int GetFormAlignment() const; 704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann bool CheckRequiredFields(const std::vector<CPDF_FormField*>* fields, 7233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann bool bIncludeOrExclude) const; 734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 74d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::unique_ptr<CFDF_Document> ExportToFDF(const WideString& pdf_path, 754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bSimpleFileSpec) const; 764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::unique_ptr<CFDF_Document> ExportToFDF( 78d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const WideString& pdf_path, 794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const std::vector<CPDF_FormField*>& fields, 804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bIncludeOrExclude, 814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bSimpleFileSpec) const; 824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool ResetForm(const std::vector<CPDF_FormField*>& fields, 844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bIncludeOrExclude, 854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bNotify); 864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool ResetForm(bool bNotify); 874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void SetFormNotify(IPDF_FormNotify* pNotify); 894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool HasXFAForm() const; 904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void FixPageFields(const CPDF_Page* pPage); 914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 92d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann IPDF_FormNotify* GetFormNotify() const { return m_pFormNotify.Get(); } 93d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CPDF_Document* GetDocument() const { return m_pDocument.Get(); } 94d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CPDF_Dictionary* GetFormDict() const { return m_pFormDict.Get(); } 954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 96d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann private: 974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void LoadField(CPDF_Dictionary* pFieldDict, int nLevel); 98d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void AddTerminalField(CPDF_Dictionary* pFieldDict); 994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormControl* AddControl(CPDF_FormField* pField, 1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pWidgetDict); 1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void FDF_ImportField(CPDF_Dictionary* pField, 102d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const WideString& parent_name, 1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bNotify = false, 1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int nLevel = 0); 1054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann static bool s_bUpdateAP; 1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 108d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann UnownedPtr<CPDF_Document> const m_pDocument; 109d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann UnownedPtr<CPDF_Dictionary> m_pFormDict; 1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::map<const CPDF_Dictionary*, std::unique_ptr<CPDF_FormControl>> 1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_ControlMap; 1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::unique_ptr<CFieldTree> m_pFieldTree; 113d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ByteString m_bsEncoding; 114d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann UnownedPtr<IPDF_FormNotify> m_pFormNotify; 1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}; 1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif // CORE_FPDFDOC_CPDF_INTERFORM_H_ 118