1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// #include "x:/pdf/fpdfapi5/include/fpdfapi.h" 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../include/fsdk_define.h" 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../include/fpdfedit.h" 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if _FX_OS_ == _FX_ANDROID_ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "time.h" 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <ctime> 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_DOCUMENT STDCALL FPDF_CreateNewDocument() 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Document* pDoc = FX_NEW CPDF_Document; 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!pDoc) 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pDoc->CreateNewDoc(); 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov time_t currentTime; 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString DateStr; 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( -1 != time( ¤tTime ) ) 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov tm * pTM = localtime( ¤tTime ); 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( pTM ) 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov DateStr.Format( "D:%04d%02d%02d%02d%02d%02d", pTM->tm_year+1900, pTM->tm_mon+1, 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pTM->tm_mday, pTM->tm_hour, pTM->tm_min, pTM->tm_sec ); 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* pInfoDict = NULL; 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pInfoDict = pDoc->GetInfo(); 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pInfoDict) 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pInfoDict->SetAt("CreationDate", new CPDF_String(DateStr)); 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FOXIT_CHROME_BUILD 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pInfoDict->SetAt("Creator",FX_NEW CPDF_String(L"Google")); 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pInfoDict->SetAt("Creator",FX_NEW CPDF_String(L"Foxit PDF SDK DLL 2.0 - Foxit Software")); 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pDoc; 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT void STDCALL FPDFPage_Delete(FPDF_DOCUMENT document, int page_index) 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Document* pDoc = (CPDF_Document*)document; 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pDoc == NULL) 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (page_index < 0 || page_index >= pDoc->GetPageCount()) 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pDoc->DeletePage(page_index); 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_PAGE STDCALL FPDFPage_New(FPDF_DOCUMENT document, int page_index, double width, double height) 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!document) 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// CPDF_Parser* pParser = (CPDF_Parser*)document; 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Document* pDoc = (CPDF_Document*)document; 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(page_index < 0) 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov page_index = 0; 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(pDoc->GetPageCount()<page_index) 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov page_index = pDoc->GetPageCount(); 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// if (page_index < 0 || page_index >= pDoc->GetPageCount()) 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// return NULL; 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* pPageDict = pDoc->CreateNewPage(page_index); 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(!pPageDict) 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Array* pMediaBoxArray = FX_NEW CPDF_Array; 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pMediaBoxArray->Add(FX_NEW CPDF_Number(0)); 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pMediaBoxArray->Add(FX_NEW CPDF_Number(0)); 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pMediaBoxArray->Add(FX_NEW CPDF_Number(FX_FLOAT(width))); 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pMediaBoxArray->Add(FX_NEW CPDF_Number(FX_FLOAT(height))); 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pPageDict->SetAt("MediaBox", pMediaBoxArray); 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pPageDict->SetAt("Rotate", FX_NEW CPDF_Number(0)); 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pPageDict->SetAt("Resources", FX_NEW CPDF_Dictionary); 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Page* pPage = FX_NEW CPDF_Page; 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pPage->Load(pDoc,pPageDict); 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pPage->ParseContent(); 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pPage; 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT int STDCALL FPDFPage_GetRotation(FPDF_PAGE page) 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Page* pPage = (CPDF_Page*)page; 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page")) 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return -1; 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* pDict = pPage->m_pFormDict; 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int rotate = 0; 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(pDict != NULL) 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(pDict->KeyExist("Rotate")) 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rotate = pDict->GetElement("Rotate")->GetDirect()->GetInteger() / 90; 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(pDict->KeyExist("Parent")) 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* pPages = (CPDF_Dictionary*)pDict->GetElement("Parent")->GetDirect(); 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov while(pPages) 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(pPages->KeyExist("Rotate")) 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rotate = pPages->GetElement("Rotate")->GetDirect()->GetInteger() / 90; 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else if(pPages->KeyExist("Parent")) 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pPages = (CPDF_Dictionary*)pPages->GetElement("Parent")->GetDirect(); 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else break; 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return -1; 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return rotate; 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT void STDCALL FPDFPage_InsertObject(FPDF_PAGE page, FPDF_PAGEOBJECT page_obj) 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Page* pPage = (CPDF_Page*)page; 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page")) 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_obj; 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(pPageObj == NULL) 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_POSITION LastPersition = pPage->GetLastObjectPosition(); 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pPage->InsertObject(LastPersition, pPageObj); 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch(pPageObj->m_Type) 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FPDF_PAGEOBJ_PATH: 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_PathObject* pPathObj = (CPDF_PathObject*)pPageObj; 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pPathObj->CalcBoundingBox(); 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FPDF_PAGEOBJ_TEXT: 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // CPDF_PathObject* pPathObj = (CPDF_PathObject*)pPageObj; 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // pPathObj->CalcBoundingBox(); 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FPDF_PAGEOBJ_IMAGE: 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_ImageObject* pImageObj = (CPDF_ImageObject*)pPageObj; 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pImageObj->CalcBoundingBox(); 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FPDF_PAGEOBJ_SHADING: 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_ShadingObject* pShadingObj = (CPDF_ShadingObject*)pPageObj; 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pShadingObj->CalcBoundingBox(); 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FPDF_PAGEOBJ_FORM: 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_FormObject* pFormObj = (CPDF_FormObject*)pPageObj; 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pFormObj->CalcBoundingBox(); 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov default: 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // pPage->ParseContent(); 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov //pPage->GenerateContent(); 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT int STDCALL FPDFPage_CountObject(FPDF_PAGE page) 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Page* pPage = (CPDF_Page*)page; 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page")) 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return -1; 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pPage->CountObjects(); 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// return 0; 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPage_GetObject(FPDF_PAGE page, int index) 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Page* pPage = (CPDF_Page*)page; 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page")) 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pPage->GetObjectByIndex(index); 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// return NULL; 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_BOOL STDCALL FPDFPage_HasTransparency(FPDF_PAGE page) 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(!page) return FALSE; 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Page* pPage = (CPDF_Page*)page; 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pPage->BackgroundAlphaNeeded(); 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_BOOL STDCALL FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT pageObject) 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(!pageObject) return FALSE; 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_PageObject* pPageObj = (CPDF_PageObject*)pageObject; 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CPDF_GeneralStateData* pGeneralState = pPageObj->m_GeneralState; 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int blend_type = pGeneralState ? pGeneralState->m_BlendType : FXDIB_BLEND_NORMAL; 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (blend_type != FXDIB_BLEND_NORMAL) return TRUE; 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* pSMaskDict = pGeneralState ? (CPDF_Dictionary*)pGeneralState->m_pSoftMask : NULL; 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(pSMaskDict) return TRUE; 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(pGeneralState && pGeneralState->m_FillAlpha != 1.0f) 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(pPageObj->m_Type == PDFPAGE_PATH) 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(pGeneralState && pGeneralState->m_StrokeAlpha != 1.0f) 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(pPageObj->m_Type == PDFPAGE_FORM) 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_FormObject* pFormObj = (CPDF_FormObject*)pPageObj; 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(pFormObj->m_pForm && (pFormObj->m_pForm->m_Transparency & PDFTRANS_ISOLATED)) 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(pFormObj->m_pForm && (!(pFormObj->m_pForm->m_Transparency & PDFTRANS_ISOLATED) && (pFormObj->m_pForm->m_Transparency & PDFTRANS_GROUP))) 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_BOOL STDCALL FPDFPage_GenerateContent(FPDF_PAGE page) 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Page* pPage = (CPDF_Page*)page; 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page")) 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_PageContentGenerate CG(pPage); 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CG.GenerateContent(); 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT void STDCALL FPDFPageObj_Transform(FPDF_PAGEOBJECT page_object, 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov double a, double b, double c, double d, double e, double f) 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_object; 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(pPageObj == NULL) 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//PDF_ImageObject* pImageObj = FX_NEW CPDF_ImageObject; 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_AffineMatrix matrix((FX_FLOAT)a,(FX_FLOAT)b,(FX_FLOAT)c,(FX_FLOAT)d,(FX_FLOAT)e,(FX_FLOAT)f); 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pPageObj->Transform(matrix); 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT void STDCALL FPDFPage_TransformAnnots(FPDF_PAGE page, 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov double a, double b, double c, double d, double e, double f) 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(page == NULL) 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Page* pPage = (CPDF_Page*)page; 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_AnnotList AnnotList(pPage); 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (int i=0; i<AnnotList.Count();i++) 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Annot* pAnnot = AnnotList.GetAt(i); 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // transformAnnots Rectangle 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rect; 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pAnnot->GetRect(rect); 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_AffineMatrix matrix((FX_FLOAT)a,(FX_FLOAT)b,(FX_FLOAT)c,(FX_FLOAT)d,(FX_FLOAT)e,(FX_FLOAT)f); 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rect.Transform(&matrix); 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Array *pRectArray = NULL; 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pRectArray = pAnnot->m_pAnnotDict->GetArray("Rect"); 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!pRectArray) pRectArray=CPDF_Array::Create(); 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pRectArray->SetAt(0,FX_NEW CPDF_Number(rect.left)); 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pRectArray->SetAt(1,FX_NEW CPDF_Number(rect.bottom)); 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pRectArray->SetAt(2,FX_NEW CPDF_Number(rect.right)); 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pRectArray->SetAt(3,FX_NEW CPDF_Number(rect.top)); 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pAnnot->m_pAnnotDict->SetAt("Rect",pRectArray); 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov //Transform AP's rectangle 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov //To Do 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 317