1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef FPDFSDK_SRC_JAVASCRIPT_DOCUMENT_H_ 8 #define FPDFSDK_SRC_JAVASCRIPT_DOCUMENT_H_ 9 10 #include <list> 11 #include <memory> 12 13 #include "JS_Define.h" 14 15 class PrintParamsObj : public CJS_EmbedObj { 16 public: 17 PrintParamsObj(CJS_Object* pJSObject); ~PrintParamsObj()18 ~PrintParamsObj() override {} 19 20 public: 21 FX_BOOL bUI; 22 int nStart; 23 int nEnd; 24 FX_BOOL bSilent; 25 FX_BOOL bShrinkToFit; 26 FX_BOOL bPrintAsImage; 27 FX_BOOL bReverse; 28 FX_BOOL bAnnotations; 29 }; 30 31 class CJS_PrintParamsObj : public CJS_Object { 32 public: CJS_PrintParamsObj(v8::Local<v8::Object> pObject)33 CJS_PrintParamsObj(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {} ~CJS_PrintParamsObj()34 ~CJS_PrintParamsObj() override {} 35 36 DECLARE_JS_CLASS(); 37 }; 38 39 class Icon; 40 class Field; 41 42 struct IconElement { IconElementIconElement43 IconElement(const CFX_WideString& name, Icon* stream) 44 : IconName(name), IconStream(stream) {} 45 46 CFX_WideString IconName; 47 Icon* IconStream; 48 }; 49 50 struct CJS_DelayData; 51 struct CJS_DelayAnnot; 52 struct CJS_AnnotObj; 53 54 class Document : public CJS_EmbedObj { 55 public: 56 Document(CJS_Object* pJSObject); 57 ~Document() override; 58 59 FX_BOOL ADBE(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 60 FX_BOOL author(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 61 FX_BOOL baseURL(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 62 FX_BOOL bookmarkRoot(IJS_Context* cc, 63 CJS_PropValue& vp, 64 CFX_WideString& sError); 65 FX_BOOL calculate(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 66 FX_BOOL Collab(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 67 FX_BOOL creationDate(IJS_Context* cc, 68 CJS_PropValue& vp, 69 CFX_WideString& sError); 70 FX_BOOL creator(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 71 FX_BOOL delay(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 72 FX_BOOL dirty(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 73 FX_BOOL documentFileName(IJS_Context* cc, 74 CJS_PropValue& vp, 75 CFX_WideString& sError); 76 FX_BOOL external(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 77 FX_BOOL filesize(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 78 FX_BOOL icons(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 79 FX_BOOL info(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 80 FX_BOOL keywords(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 81 FX_BOOL layout(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 82 FX_BOOL media(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 83 FX_BOOL modDate(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 84 FX_BOOL mouseX(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 85 FX_BOOL mouseY(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 86 FX_BOOL numFields(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 87 FX_BOOL numPages(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 88 FX_BOOL pageNum(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 89 FX_BOOL pageWindowRect(IJS_Context* cc, 90 CJS_PropValue& vp, 91 CFX_WideString& sError); 92 FX_BOOL path(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 93 FX_BOOL producer(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 94 FX_BOOL subject(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 95 FX_BOOL title(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 96 FX_BOOL zoom(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 97 FX_BOOL zoomType(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); 98 99 FX_BOOL addAnnot(IJS_Context* cc, 100 const std::vector<CJS_Value>& params, 101 CJS_Value& vRet, 102 CFX_WideString& sError); 103 FX_BOOL addField(IJS_Context* cc, 104 const std::vector<CJS_Value>& params, 105 CJS_Value& vRet, 106 CFX_WideString& sError); 107 FX_BOOL addLink(IJS_Context* cc, 108 const std::vector<CJS_Value>& params, 109 CJS_Value& vRet, 110 CFX_WideString& sError); 111 FX_BOOL addIcon(IJS_Context* cc, 112 const std::vector<CJS_Value>& params, 113 CJS_Value& vRet, 114 CFX_WideString& sError); 115 FX_BOOL calculateNow(IJS_Context* cc, 116 const std::vector<CJS_Value>& params, 117 CJS_Value& vRet, 118 CFX_WideString& sError); 119 FX_BOOL closeDoc(IJS_Context* cc, 120 const std::vector<CJS_Value>& params, 121 CJS_Value& vRet, 122 CFX_WideString& sError); 123 FX_BOOL createDataObject(IJS_Context* cc, 124 const std::vector<CJS_Value>& params, 125 CJS_Value& vRet, 126 CFX_WideString& sError); 127 FX_BOOL deletePages(IJS_Context* cc, 128 const std::vector<CJS_Value>& params, 129 CJS_Value& vRet, 130 CFX_WideString& sError); 131 FX_BOOL exportAsText(IJS_Context* cc, 132 const std::vector<CJS_Value>& params, 133 CJS_Value& vRet, 134 CFX_WideString& sError); 135 FX_BOOL exportAsFDF(IJS_Context* cc, 136 const std::vector<CJS_Value>& params, 137 CJS_Value& vRet, 138 CFX_WideString& sError); 139 FX_BOOL exportAsXFDF(IJS_Context* cc, 140 const std::vector<CJS_Value>& params, 141 CJS_Value& vRet, 142 CFX_WideString& sError); 143 FX_BOOL extractPages(IJS_Context* cc, 144 const std::vector<CJS_Value>& params, 145 CJS_Value& vRet, 146 CFX_WideString& sError); 147 FX_BOOL getAnnot(IJS_Context* cc, 148 const std::vector<CJS_Value>& params, 149 CJS_Value& vRet, 150 CFX_WideString& sError); 151 FX_BOOL getAnnots(IJS_Context* cc, 152 const std::vector<CJS_Value>& params, 153 CJS_Value& vRet, 154 CFX_WideString& sError); 155 FX_BOOL getAnnot3D(IJS_Context* cc, 156 const std::vector<CJS_Value>& params, 157 CJS_Value& vRet, 158 CFX_WideString& sError); 159 FX_BOOL getAnnots3D(IJS_Context* cc, 160 const std::vector<CJS_Value>& params, 161 CJS_Value& vRet, 162 CFX_WideString& sError); 163 FX_BOOL getField(IJS_Context* cc, 164 const std::vector<CJS_Value>& params, 165 CJS_Value& vRet, 166 CFX_WideString& sError); 167 FX_BOOL getIcon(IJS_Context* cc, 168 const std::vector<CJS_Value>& params, 169 CJS_Value& vRet, 170 CFX_WideString& sError); 171 FX_BOOL getLinks(IJS_Context* cc, 172 const std::vector<CJS_Value>& params, 173 CJS_Value& vRet, 174 CFX_WideString& sError); 175 FX_BOOL getNthFieldName(IJS_Context* cc, 176 const std::vector<CJS_Value>& params, 177 CJS_Value& vRet, 178 CFX_WideString& sError); 179 FX_BOOL getOCGs(IJS_Context* cc, 180 const std::vector<CJS_Value>& params, 181 CJS_Value& vRet, 182 CFX_WideString& sError); 183 FX_BOOL getPageBox(IJS_Context* cc, 184 const std::vector<CJS_Value>& params, 185 CJS_Value& vRet, 186 CFX_WideString& sError); 187 FX_BOOL getPageNthWord(IJS_Context* cc, 188 const std::vector<CJS_Value>& params, 189 CJS_Value& vRet, 190 CFX_WideString& sError); 191 FX_BOOL getPageNthWordQuads(IJS_Context* cc, 192 const std::vector<CJS_Value>& params, 193 CJS_Value& vRet, 194 CFX_WideString& sError); 195 FX_BOOL getPageNumWords(IJS_Context* cc, 196 const std::vector<CJS_Value>& params, 197 CJS_Value& vRet, 198 CFX_WideString& sError); 199 FX_BOOL getPrintParams(IJS_Context* cc, 200 const std::vector<CJS_Value>& params, 201 CJS_Value& vRet, 202 CFX_WideString& sError); 203 FX_BOOL getURL(IJS_Context* cc, 204 const std::vector<CJS_Value>& params, 205 CJS_Value& vRet, 206 CFX_WideString& sError); 207 FX_BOOL importAnFDF(IJS_Context* cc, 208 const std::vector<CJS_Value>& params, 209 CJS_Value& vRet, 210 CFX_WideString& sError); 211 FX_BOOL importAnXFDF(IJS_Context* cc, 212 const std::vector<CJS_Value>& params, 213 CJS_Value& vRet, 214 CFX_WideString& sError); 215 FX_BOOL importTextData(IJS_Context* cc, 216 const std::vector<CJS_Value>& params, 217 CJS_Value& vRet, 218 CFX_WideString& sError); 219 FX_BOOL insertPages(IJS_Context* cc, 220 const std::vector<CJS_Value>& params, 221 CJS_Value& vRet, 222 CFX_WideString& sError); 223 FX_BOOL mailForm(IJS_Context* cc, 224 const std::vector<CJS_Value>& params, 225 CJS_Value& vRet, 226 CFX_WideString& sError); 227 FX_BOOL print(IJS_Context* cc, 228 const std::vector<CJS_Value>& params, 229 CJS_Value& vRet, 230 CFX_WideString& sError); 231 FX_BOOL removeField(IJS_Context* cc, 232 const std::vector<CJS_Value>& params, 233 CJS_Value& vRet, 234 CFX_WideString& sError); 235 FX_BOOL replacePages(IJS_Context* cc, 236 const std::vector<CJS_Value>& params, 237 CJS_Value& vRet, 238 CFX_WideString& sError); 239 FX_BOOL resetForm(IJS_Context* cc, 240 const std::vector<CJS_Value>& params, 241 CJS_Value& vRet, 242 CFX_WideString& sError); 243 FX_BOOL saveAs(IJS_Context* cc, 244 const std::vector<CJS_Value>& params, 245 CJS_Value& vRet, 246 CFX_WideString& sError); 247 FX_BOOL submitForm(IJS_Context* cc, 248 const std::vector<CJS_Value>& params, 249 CJS_Value& vRet, 250 CFX_WideString& sError); 251 FX_BOOL mailDoc(IJS_Context* cc, 252 const std::vector<CJS_Value>& params, 253 CJS_Value& vRet, 254 CFX_WideString& sError); 255 FX_BOOL removeIcon(IJS_Context* cc, 256 const std::vector<CJS_Value>& params, 257 CJS_Value& vRet, 258 CFX_WideString& sError); 259 260 void AttachDoc(CPDFSDK_Document* pDoc); 261 CPDFSDK_Document* GetReaderDoc(); 262 void AddDelayData(CJS_DelayData* pData); 263 void DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex); SetIsolate(v8::Isolate * isolate)264 void SetIsolate(v8::Isolate* isolate) { m_isolate = isolate; } 265 CJS_Document* GetCJSDoc() const; 266 267 private: 268 bool IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect); 269 int CountWords(CPDF_TextObject* pTextObj); 270 CFX_WideString GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex); 271 272 v8::Isolate* m_isolate; 273 std::list<std::unique_ptr<IconElement>> m_IconList; 274 CPDFSDK_Document* m_pDocument; 275 CFX_WideString m_cwBaseURL; 276 bool m_bDelay; 277 CFX_ArrayTemplate<CJS_DelayData*> m_DelayData; 278 }; 279 280 class CJS_Document : public CJS_Object { 281 public: CJS_Document(v8::Local<v8::Object> pObject)282 explicit CJS_Document(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {} ~CJS_Document()283 ~CJS_Document() override {} 284 285 // CJS_Object 286 void InitInstance(IJS_Runtime* pIRuntime) override; 287 288 DECLARE_JS_CLASS(); 289 290 JS_STATIC_PROP(ADBE, Document); 291 JS_STATIC_PROP(author, Document); 292 JS_STATIC_PROP(baseURL, Document); 293 JS_STATIC_PROP(bookmarkRoot, Document); 294 JS_STATIC_PROP(calculate, Document); 295 JS_STATIC_PROP(Collab, Document); 296 JS_STATIC_PROP(creationDate, Document); 297 JS_STATIC_PROP(creator, Document); 298 JS_STATIC_PROP(delay, Document); 299 JS_STATIC_PROP(dirty, Document); 300 JS_STATIC_PROP(documentFileName, Document); 301 JS_STATIC_PROP(external, Document); 302 JS_STATIC_PROP(filesize, Document); 303 JS_STATIC_PROP(icons, Document); 304 JS_STATIC_PROP(info, Document); 305 JS_STATIC_PROP(keywords, Document); 306 JS_STATIC_PROP(layout, Document); 307 JS_STATIC_PROP(media, Document); 308 JS_STATIC_PROP(modDate, Document); 309 JS_STATIC_PROP(mouseX, Document); 310 JS_STATIC_PROP(mouseY, Document); 311 JS_STATIC_PROP(numFields, Document); 312 JS_STATIC_PROP(numPages, Document); 313 JS_STATIC_PROP(pageNum, Document); 314 JS_STATIC_PROP(pageWindowRect, Document); 315 JS_STATIC_PROP(path, Document); 316 JS_STATIC_PROP(producer, Document); 317 JS_STATIC_PROP(subject, Document); 318 JS_STATIC_PROP(title, Document); 319 JS_STATIC_PROP(zoom, Document); 320 JS_STATIC_PROP(zoomType, Document); 321 322 JS_STATIC_METHOD(addAnnot, Document); 323 JS_STATIC_METHOD(addField, Document); 324 JS_STATIC_METHOD(addLink, Document); 325 JS_STATIC_METHOD(addIcon, Document); 326 JS_STATIC_METHOD(calculateNow, Document); 327 JS_STATIC_METHOD(closeDoc, Document); 328 JS_STATIC_METHOD(createDataObject, Document); 329 JS_STATIC_METHOD(deletePages, Document); 330 JS_STATIC_METHOD(exportAsText, Document); 331 JS_STATIC_METHOD(exportAsFDF, Document); 332 JS_STATIC_METHOD(exportAsXFDF, Document); 333 JS_STATIC_METHOD(extractPages, Document); 334 JS_STATIC_METHOD(getAnnot, Document); 335 JS_STATIC_METHOD(getAnnots, Document); 336 JS_STATIC_METHOD(getAnnot3D, Document); 337 JS_STATIC_METHOD(getAnnots3D, Document); 338 JS_STATIC_METHOD(getField, Document); 339 JS_STATIC_METHOD(getIcon, Document); 340 JS_STATIC_METHOD(getLinks, Document); 341 JS_STATIC_METHOD(getNthFieldName, Document); 342 JS_STATIC_METHOD(getOCGs, Document); 343 JS_STATIC_METHOD(getPageBox, Document); 344 JS_STATIC_METHOD(getPageNthWord, Document); 345 JS_STATIC_METHOD(getPageNthWordQuads, Document); 346 JS_STATIC_METHOD(getPageNumWords, Document); 347 JS_STATIC_METHOD(getPrintParams, Document); 348 JS_STATIC_METHOD(getURL, Document); 349 JS_STATIC_METHOD(importAnFDF, Document); 350 JS_STATIC_METHOD(importAnXFDF, Document); 351 JS_STATIC_METHOD(importTextData, Document); 352 JS_STATIC_METHOD(insertPages, Document); 353 JS_STATIC_METHOD(mailForm, Document); 354 JS_STATIC_METHOD(print, Document); 355 JS_STATIC_METHOD(removeField, Document); 356 JS_STATIC_METHOD(replacePages, Document); 357 JS_STATIC_METHOD(removeIcon, Document); 358 JS_STATIC_METHOD(resetForm, Document); 359 JS_STATIC_METHOD(saveAs, Document); 360 JS_STATIC_METHOD(submitForm, Document); 361 JS_STATIC_METHOD(mailDoc, Document); 362 }; 363 364 #endif // FPDFSDK_SRC_JAVASCRIPT_DOCUMENT_H_ 365