Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: fpdfsdk/fpdfppo.cpp

Issue 2334323005: Rename dictionary set and get methods (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « fpdfsdk/fpdfformfill.cpp ('k') | fpdfsdk/fpdfsave.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_ppo.h" 7 #include "public/fpdf_ppo.h"
8 8
9 #include <map> 9 #include <map>
10 #include <memory> 10 #include <memory>
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 CPDF_Dictionary* pNewRoot = pDestPDFDoc->GetRoot(); 53 CPDF_Dictionary* pNewRoot = pDestPDFDoc->GetRoot();
54 if (!pNewRoot) 54 if (!pNewRoot)
55 return FALSE; 55 return FALSE;
56 56
57 CPDF_Dictionary* DInfoDict = pDestPDFDoc->GetInfo(); 57 CPDF_Dictionary* DInfoDict = pDestPDFDoc->GetInfo();
58 if (!DInfoDict) 58 if (!DInfoDict)
59 return FALSE; 59 return FALSE;
60 60
61 CFX_ByteString producerstr; 61 CFX_ByteString producerstr;
62 producerstr.Format("PDFium"); 62 producerstr.Format("PDFium");
63 DInfoDict->SetAt("Producer", new CPDF_String(producerstr, FALSE)); 63 DInfoDict->SetFor("Producer", new CPDF_String(producerstr, FALSE));
64 64
65 CFX_ByteString cbRootType = pNewRoot->GetStringBy("Type", ""); 65 CFX_ByteString cbRootType = pNewRoot->GetStringFor("Type", "");
66 if (cbRootType.IsEmpty()) 66 if (cbRootType.IsEmpty())
67 pNewRoot->SetAt("Type", new CPDF_Name("Catalog")); 67 pNewRoot->SetFor("Type", new CPDF_Name("Catalog"));
68 68
69 CPDF_Object* pElement = pNewRoot->GetObjectBy("Pages"); 69 CPDF_Object* pElement = pNewRoot->GetObjectFor("Pages");
70 CPDF_Dictionary* pNewPages = 70 CPDF_Dictionary* pNewPages =
71 pElement ? ToDictionary(pElement->GetDirect()) : nullptr; 71 pElement ? ToDictionary(pElement->GetDirect()) : nullptr;
72 if (!pNewPages) { 72 if (!pNewPages) {
73 pNewPages = new CPDF_Dictionary; 73 pNewPages = new CPDF_Dictionary;
74 uint32_t NewPagesON = pDestPDFDoc->AddIndirectObject(pNewPages); 74 uint32_t NewPagesON = pDestPDFDoc->AddIndirectObject(pNewPages);
75 pNewRoot->SetAt("Pages", new CPDF_Reference(pDestPDFDoc, NewPagesON)); 75 pNewRoot->SetFor("Pages", new CPDF_Reference(pDestPDFDoc, NewPagesON));
76 } 76 }
77 77
78 CFX_ByteString cbPageType = pNewPages->GetStringBy("Type", ""); 78 CFX_ByteString cbPageType = pNewPages->GetStringFor("Type", "");
79 if (cbPageType == "") { 79 if (cbPageType == "") {
80 pNewPages->SetAt("Type", new CPDF_Name("Pages")); 80 pNewPages->SetFor("Type", new CPDF_Name("Pages"));
81 } 81 }
82 82
83 CPDF_Array* pKeysArray = pNewPages->GetArrayBy("Kids"); 83 CPDF_Array* pKeysArray = pNewPages->GetArrayFor("Kids");
84 if (!pKeysArray) { 84 if (!pKeysArray) {
85 CPDF_Array* pNewKids = new CPDF_Array; 85 CPDF_Array* pNewKids = new CPDF_Array;
86 uint32_t Kidsobjnum = pDestPDFDoc->AddIndirectObject(pNewKids); 86 uint32_t Kidsobjnum = pDestPDFDoc->AddIndirectObject(pNewKids);
87 87
88 pNewPages->SetAt("Kids", new CPDF_Reference(pDestPDFDoc, Kidsobjnum)); 88 pNewPages->SetFor("Kids", new CPDF_Reference(pDestPDFDoc, Kidsobjnum));
89 pNewPages->SetAt("Count", new CPDF_Number(0)); 89 pNewPages->SetFor("Count", new CPDF_Number(0));
90 } 90 }
91 91
92 return TRUE; 92 return TRUE;
93 } 93 }
94 94
95 FX_BOOL CPDF_PageOrganizer::ExportPage(CPDF_Document* pSrcPDFDoc, 95 FX_BOOL CPDF_PageOrganizer::ExportPage(CPDF_Document* pSrcPDFDoc,
96 std::vector<uint16_t>* pPageNums, 96 std::vector<uint16_t>* pPageNums,
97 CPDF_Document* pDestPDFDoc, 97 CPDF_Document* pDestPDFDoc,
98 int nIndex) { 98 int nIndex) {
99 int curpage = nIndex; 99 int curpage = nIndex;
100 std::unique_ptr<ObjectNumberMap> pObjNumberMap(new ObjectNumberMap); 100 std::unique_ptr<ObjectNumberMap> pObjNumberMap(new ObjectNumberMap);
101 int nSize = pdfium::CollectionSize<int>(*pPageNums); 101 int nSize = pdfium::CollectionSize<int>(*pPageNums);
102 for (int i = 0; i < nSize; ++i) { 102 for (int i = 0; i < nSize; ++i) {
103 CPDF_Dictionary* pCurPageDict = pDestPDFDoc->CreateNewPage(curpage); 103 CPDF_Dictionary* pCurPageDict = pDestPDFDoc->CreateNewPage(curpage);
104 CPDF_Dictionary* pSrcPageDict = pSrcPDFDoc->GetPage(pPageNums->at(i) - 1); 104 CPDF_Dictionary* pSrcPageDict = pSrcPDFDoc->GetPage(pPageNums->at(i) - 1);
105 if (!pSrcPageDict || !pCurPageDict) 105 if (!pSrcPageDict || !pCurPageDict)
106 return FALSE; 106 return FALSE;
107 107
108 // Clone the page dictionary 108 // Clone the page dictionary
109 for (const auto& it : *pSrcPageDict) { 109 for (const auto& it : *pSrcPageDict) {
110 const CFX_ByteString& cbSrcKeyStr = it.first; 110 const CFX_ByteString& cbSrcKeyStr = it.first;
111 CPDF_Object* pObj = it.second; 111 CPDF_Object* pObj = it.second;
112 if (cbSrcKeyStr.Compare(("Type")) && cbSrcKeyStr.Compare(("Parent"))) { 112 if (cbSrcKeyStr.Compare(("Type")) && cbSrcKeyStr.Compare(("Parent"))) {
113 if (pCurPageDict->KeyExist(cbSrcKeyStr)) 113 if (pCurPageDict->KeyExist(cbSrcKeyStr))
114 pCurPageDict->RemoveAt(cbSrcKeyStr); 114 pCurPageDict->RemoveFor(cbSrcKeyStr);
115 pCurPageDict->SetAt(cbSrcKeyStr, pObj->Clone()); 115 pCurPageDict->SetFor(cbSrcKeyStr, pObj->Clone());
116 } 116 }
117 } 117 }
118 118
119 // inheritable item 119 // inheritable item
120 CPDF_Object* pInheritable = nullptr; 120 CPDF_Object* pInheritable = nullptr;
121 // 1 MediaBox //required 121 // 1 MediaBox //required
122 if (!pCurPageDict->KeyExist("MediaBox")) { 122 if (!pCurPageDict->KeyExist("MediaBox")) {
123 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "MediaBox"); 123 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "MediaBox");
124 if (!pInheritable) { 124 if (!pInheritable) {
125 // Search the "CropBox" from source page dictionary, 125 // Search the "CropBox" from source page dictionary,
126 // if not exists,we take the letter size. 126 // if not exists,we take the letter size.
127 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "CropBox"); 127 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "CropBox");
128 if (pInheritable) { 128 if (pInheritable) {
129 pCurPageDict->SetAt("MediaBox", pInheritable->Clone()); 129 pCurPageDict->SetFor("MediaBox", pInheritable->Clone());
130 } else { 130 } else {
131 // Make the default size to be letter size (8.5'x11') 131 // Make the default size to be letter size (8.5'x11')
132 CPDF_Array* pArray = new CPDF_Array; 132 CPDF_Array* pArray = new CPDF_Array;
133 pArray->AddNumber(0); 133 pArray->AddNumber(0);
134 pArray->AddNumber(0); 134 pArray->AddNumber(0);
135 pArray->AddNumber(612); 135 pArray->AddNumber(612);
136 pArray->AddNumber(792); 136 pArray->AddNumber(792);
137 pCurPageDict->SetAt("MediaBox", pArray); 137 pCurPageDict->SetFor("MediaBox", pArray);
138 } 138 }
139 } else { 139 } else {
140 pCurPageDict->SetAt("MediaBox", pInheritable->Clone()); 140 pCurPageDict->SetFor("MediaBox", pInheritable->Clone());
141 } 141 }
142 } 142 }
143 // 2 Resources //required 143 // 2 Resources //required
144 if (!pCurPageDict->KeyExist("Resources")) { 144 if (!pCurPageDict->KeyExist("Resources")) {
145 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Resources"); 145 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Resources");
146 if (!pInheritable) 146 if (!pInheritable)
147 return FALSE; 147 return FALSE;
148 pCurPageDict->SetAt("Resources", pInheritable->Clone()); 148 pCurPageDict->SetFor("Resources", pInheritable->Clone());
149 } 149 }
150 // 3 CropBox //Optional 150 // 3 CropBox //Optional
151 if (!pCurPageDict->KeyExist("CropBox")) { 151 if (!pCurPageDict->KeyExist("CropBox")) {
152 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "CropBox"); 152 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "CropBox");
153 if (pInheritable) 153 if (pInheritable)
154 pCurPageDict->SetAt("CropBox", pInheritable->Clone()); 154 pCurPageDict->SetFor("CropBox", pInheritable->Clone());
155 } 155 }
156 // 4 Rotate //Optional 156 // 4 Rotate //Optional
157 if (!pCurPageDict->KeyExist("Rotate")) { 157 if (!pCurPageDict->KeyExist("Rotate")) {
158 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Rotate"); 158 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Rotate");
159 if (pInheritable) 159 if (pInheritable)
160 pCurPageDict->SetAt("Rotate", pInheritable->Clone()); 160 pCurPageDict->SetFor("Rotate", pInheritable->Clone());
161 } 161 }
162 162
163 // Update the reference 163 // Update the reference
164 uint32_t dwOldPageObj = pSrcPageDict->GetObjNum(); 164 uint32_t dwOldPageObj = pSrcPageDict->GetObjNum();
165 uint32_t dwNewPageObj = pCurPageDict->GetObjNum(); 165 uint32_t dwNewPageObj = pCurPageDict->GetObjNum();
166 166
167 (*pObjNumberMap)[dwOldPageObj] = dwNewPageObj; 167 (*pObjNumberMap)[dwOldPageObj] = dwNewPageObj;
168 168
169 UpdateReference(pCurPageDict, pDestPDFDoc, pObjNumberMap.get()); 169 UpdateReference(pCurPageDict, pDestPDFDoc, pObjNumberMap.get());
170 ++curpage; 170 ++curpage;
171 } 171 }
172 172
173 return TRUE; 173 return TRUE;
174 } 174 }
175 175
176 CPDF_Object* CPDF_PageOrganizer::PageDictGetInheritableTag( 176 CPDF_Object* CPDF_PageOrganizer::PageDictGetInheritableTag(
177 CPDF_Dictionary* pDict, 177 CPDF_Dictionary* pDict,
178 const CFX_ByteString& bsSrcTag) { 178 const CFX_ByteString& bsSrcTag) {
179 if (!pDict || bsSrcTag.IsEmpty()) 179 if (!pDict || bsSrcTag.IsEmpty())
180 return nullptr; 180 return nullptr;
181 if (!pDict->KeyExist("Parent") || !pDict->KeyExist("Type")) 181 if (!pDict->KeyExist("Parent") || !pDict->KeyExist("Type"))
182 return nullptr; 182 return nullptr;
183 183
184 CPDF_Object* pType = pDict->GetObjectBy("Type")->GetDirect(); 184 CPDF_Object* pType = pDict->GetObjectFor("Type")->GetDirect();
185 if (!ToName(pType)) 185 if (!ToName(pType))
186 return nullptr; 186 return nullptr;
187 if (pType->GetString().Compare("Page")) 187 if (pType->GetString().Compare("Page"))
188 return nullptr; 188 return nullptr;
189 189
190 CPDF_Dictionary* pp = ToDictionary(pDict->GetObjectBy("Parent")->GetDirect()); 190 CPDF_Dictionary* pp =
191 ToDictionary(pDict->GetObjectFor("Parent")->GetDirect());
191 if (!pp) 192 if (!pp)
192 return nullptr; 193 return nullptr;
193 194
194 if (pDict->KeyExist(bsSrcTag)) 195 if (pDict->KeyExist(bsSrcTag))
195 return pDict->GetObjectBy(bsSrcTag); 196 return pDict->GetObjectFor(bsSrcTag);
196 197
197 while (pp) { 198 while (pp) {
198 if (pp->KeyExist(bsSrcTag)) 199 if (pp->KeyExist(bsSrcTag))
199 return pp->GetObjectBy(bsSrcTag); 200 return pp->GetObjectFor(bsSrcTag);
200 if (!pp->KeyExist("Parent")) 201 if (!pp->KeyExist("Parent"))
201 break; 202 break;
202 pp = ToDictionary(pp->GetObjectBy("Parent")->GetDirect()); 203 pp = ToDictionary(pp->GetObjectFor("Parent")->GetDirect());
203 } 204 }
204 return nullptr; 205 return nullptr;
205 } 206 }
206 207
207 FX_BOOL CPDF_PageOrganizer::UpdateReference(CPDF_Object* pObj, 208 FX_BOOL CPDF_PageOrganizer::UpdateReference(CPDF_Object* pObj,
208 CPDF_Document* pDoc, 209 CPDF_Document* pDoc,
209 ObjectNumberMap* pObjNumberMap) { 210 ObjectNumberMap* pObjNumberMap) {
210 switch (pObj->GetType()) { 211 switch (pObj->GetType()) {
211 case CPDF_Object::REFERENCE: { 212 case CPDF_Object::REFERENCE: {
212 CPDF_Reference* pReference = pObj->AsReference(); 213 CPDF_Reference* pReference = pObj->AsReference();
213 uint32_t newobjnum = GetNewObjId(pDoc, pObjNumberMap, pReference); 214 uint32_t newobjnum = GetNewObjId(pDoc, pObjNumberMap, pReference);
214 if (newobjnum == 0) 215 if (newobjnum == 0)
215 return FALSE; 216 return FALSE;
216 pReference->SetRef(pDoc, newobjnum); 217 pReference->SetRef(pDoc, newobjnum);
217 break; 218 break;
218 } 219 }
219 case CPDF_Object::DICTIONARY: { 220 case CPDF_Object::DICTIONARY: {
220 CPDF_Dictionary* pDict = pObj->AsDictionary(); 221 CPDF_Dictionary* pDict = pObj->AsDictionary();
221 auto it = pDict->begin(); 222 auto it = pDict->begin();
222 while (it != pDict->end()) { 223 while (it != pDict->end()) {
223 const CFX_ByteString& key = it->first; 224 const CFX_ByteString& key = it->first;
224 CPDF_Object* pNextObj = it->second; 225 CPDF_Object* pNextObj = it->second;
225 ++it; 226 ++it;
226 if (key == "Parent" || key == "Prev" || key == "First") 227 if (key == "Parent" || key == "Prev" || key == "First")
227 continue; 228 continue;
228 if (!pNextObj) 229 if (!pNextObj)
229 return FALSE; 230 return FALSE;
230 if (!UpdateReference(pNextObj, pDoc, pObjNumberMap)) 231 if (!UpdateReference(pNextObj, pDoc, pObjNumberMap))
231 pDict->RemoveAt(key); 232 pDict->RemoveFor(key);
232 } 233 }
233 break; 234 break;
234 } 235 }
235 case CPDF_Object::ARRAY: { 236 case CPDF_Object::ARRAY: {
236 CPDF_Array* pArray = pObj->AsArray(); 237 CPDF_Array* pArray = pObj->AsArray();
237 for (size_t i = 0; i < pArray->GetCount(); ++i) { 238 for (size_t i = 0; i < pArray->GetCount(); ++i) {
238 CPDF_Object* pNextObj = pArray->GetObjectAt(i); 239 CPDF_Object* pNextObj = pArray->GetObjectAt(i);
239 if (!pNextObj) 240 if (!pNextObj)
240 return FALSE; 241 return FALSE;
241 if (!UpdateReference(pNextObj, pDoc, pObjNumberMap)) 242 if (!UpdateReference(pNextObj, pDoc, pObjNumberMap))
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 CPDF_Object* pDirect = pRef->GetDirect(); 279 CPDF_Object* pDirect = pRef->GetDirect();
279 if (!pDirect) 280 if (!pDirect)
280 return 0; 281 return 0;
281 282
282 CPDF_Object* pClone = pDirect->Clone(); 283 CPDF_Object* pClone = pDirect->Clone();
283 if (!pClone) 284 if (!pClone)
284 return 0; 285 return 0;
285 286
286 if (CPDF_Dictionary* pDictClone = pClone->AsDictionary()) { 287 if (CPDF_Dictionary* pDictClone = pClone->AsDictionary()) {
287 if (pDictClone->KeyExist("Type")) { 288 if (pDictClone->KeyExist("Type")) {
288 CFX_ByteString strType = pDictClone->GetStringBy("Type"); 289 CFX_ByteString strType = pDictClone->GetStringFor("Type");
289 if (!FXSYS_stricmp(strType.c_str(), "Pages")) { 290 if (!FXSYS_stricmp(strType.c_str(), "Pages")) {
290 pDictClone->Release(); 291 pDictClone->Release();
291 return 4; 292 return 4;
292 } 293 }
293 if (!FXSYS_stricmp(strType.c_str(), "Page")) { 294 if (!FXSYS_stricmp(strType.c_str(), "Page")) {
294 pDictClone->Release(); 295 pDictClone->Release();
295 return 0; 296 return 0;
296 } 297 }
297 } 298 }
298 } 299 }
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 FPDF_DOCUMENT src_doc) { 388 FPDF_DOCUMENT src_doc) {
388 CPDF_Document* pDstDoc = CPDFDocumentFromFPDFDocument(dest_doc); 389 CPDF_Document* pDstDoc = CPDFDocumentFromFPDFDocument(dest_doc);
389 if (!pDstDoc) 390 if (!pDstDoc)
390 return FALSE; 391 return FALSE;
391 392
392 CPDF_Document* pSrcDoc = CPDFDocumentFromFPDFDocument(src_doc); 393 CPDF_Document* pSrcDoc = CPDFDocumentFromFPDFDocument(src_doc);
393 if (!pSrcDoc) 394 if (!pSrcDoc)
394 return FALSE; 395 return FALSE;
395 396
396 CPDF_Dictionary* pSrcDict = pSrcDoc->GetRoot(); 397 CPDF_Dictionary* pSrcDict = pSrcDoc->GetRoot();
397 pSrcDict = pSrcDict->GetDictBy("ViewerPreferences"); 398 pSrcDict = pSrcDict->GetDictFor("ViewerPreferences");
398 if (!pSrcDict) 399 if (!pSrcDict)
399 return FALSE; 400 return FALSE;
400 401
401 CPDF_Dictionary* pDstDict = pDstDoc->GetRoot(); 402 CPDF_Dictionary* pDstDict = pDstDoc->GetRoot();
402 if (!pDstDict) 403 if (!pDstDict)
403 return FALSE; 404 return FALSE;
404 405
405 pDstDict->SetAt("ViewerPreferences", pSrcDict->CloneDirectObject()); 406 pDstDict->SetFor("ViewerPreferences", pSrcDict->CloneDirectObject());
406 return TRUE; 407 return TRUE;
407 } 408 }
OLDNEW
« no previous file with comments | « fpdfsdk/fpdfformfill.cpp ('k') | fpdfsdk/fpdfsave.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698