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