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

Side by Side Diff: fpdfsdk/fpdfppo.cpp

Issue 2453683011: Remove FX_BOOL from fpdfsdk. (Closed)
Patch Set: Regenerate patch after rebase. Created 4 years, 1 month 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>
11 #include <vector> 11 #include <vector>
12 12
13 #include "core/fpdfapi/parser/cpdf_array.h" 13 #include "core/fpdfapi/parser/cpdf_array.h"
14 #include "core/fpdfapi/parser/cpdf_document.h" 14 #include "core/fpdfapi/parser/cpdf_document.h"
15 #include "core/fpdfapi/parser/cpdf_name.h" 15 #include "core/fpdfapi/parser/cpdf_name.h"
16 #include "core/fpdfapi/parser/cpdf_number.h" 16 #include "core/fpdfapi/parser/cpdf_number.h"
17 #include "core/fpdfapi/parser/cpdf_reference.h" 17 #include "core/fpdfapi/parser/cpdf_reference.h"
18 #include "core/fpdfapi/parser/cpdf_stream.h" 18 #include "core/fpdfapi/parser/cpdf_stream.h"
19 #include "core/fpdfapi/parser/cpdf_string.h" 19 #include "core/fpdfapi/parser/cpdf_string.h"
20 #include "fpdfsdk/fsdk_define.h" 20 #include "fpdfsdk/fsdk_define.h"
21 #include "third_party/base/stl_util.h" 21 #include "third_party/base/stl_util.h"
22 22
23 class CPDF_PageOrganizer { 23 class CPDF_PageOrganizer {
24 public: 24 public:
25 using ObjectNumberMap = std::map<uint32_t, uint32_t>; 25 using ObjectNumberMap = std::map<uint32_t, uint32_t>;
26 CPDF_PageOrganizer(); 26 CPDF_PageOrganizer();
27 ~CPDF_PageOrganizer(); 27 ~CPDF_PageOrganizer();
28 28
29 FX_BOOL PDFDocInit(CPDF_Document* pDestPDFDoc, CPDF_Document* pSrcPDFDoc); 29 bool PDFDocInit(CPDF_Document* pDestPDFDoc, CPDF_Document* pSrcPDFDoc);
30 FX_BOOL ExportPage(CPDF_Document* pSrcPDFDoc, 30 bool ExportPage(CPDF_Document* pSrcPDFDoc,
31 std::vector<uint16_t>* pPageNums, 31 std::vector<uint16_t>* pPageNums,
32 CPDF_Document* pDestPDFDoc, 32 CPDF_Document* pDestPDFDoc,
33 int nIndex); 33 int nIndex);
34 CPDF_Object* PageDictGetInheritableTag(CPDF_Dictionary* pDict, 34 CPDF_Object* PageDictGetInheritableTag(CPDF_Dictionary* pDict,
35 const CFX_ByteString& bsSrctag); 35 const CFX_ByteString& bsSrctag);
36 FX_BOOL UpdateReference(CPDF_Object* pObj, 36 bool UpdateReference(CPDF_Object* pObj,
37 CPDF_Document* pDoc, 37 CPDF_Document* pDoc,
38 ObjectNumberMap* pObjNumberMap); 38 ObjectNumberMap* pObjNumberMap);
39 uint32_t GetNewObjId(CPDF_Document* pDoc, 39 uint32_t GetNewObjId(CPDF_Document* pDoc,
40 ObjectNumberMap* pObjNumberMap, 40 ObjectNumberMap* pObjNumberMap,
41 CPDF_Reference* pRef); 41 CPDF_Reference* pRef);
42 }; 42 };
43 43
44 CPDF_PageOrganizer::CPDF_PageOrganizer() {} 44 CPDF_PageOrganizer::CPDF_PageOrganizer() {}
45 45
46 CPDF_PageOrganizer::~CPDF_PageOrganizer() {} 46 CPDF_PageOrganizer::~CPDF_PageOrganizer() {}
47 47
48 FX_BOOL CPDF_PageOrganizer::PDFDocInit(CPDF_Document* pDestPDFDoc, 48 bool CPDF_PageOrganizer::PDFDocInit(CPDF_Document* pDestPDFDoc,
49 CPDF_Document* pSrcPDFDoc) { 49 CPDF_Document* pSrcPDFDoc) {
50 if (!pDestPDFDoc || !pSrcPDFDoc) 50 if (!pDestPDFDoc || !pSrcPDFDoc)
51 return FALSE; 51 return false;
52 52
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->SetFor("Producer", new CPDF_String(producerstr, FALSE)); 63 DInfoDict->SetFor("Producer", new CPDF_String(producerstr, false));
64 64
65 CFX_ByteString cbRootType = pNewRoot->GetStringFor("Type", ""); 65 CFX_ByteString cbRootType = pNewRoot->GetStringFor("Type", "");
66 if (cbRootType.IsEmpty()) 66 if (cbRootType.IsEmpty())
67 pNewRoot->SetFor("Type", new CPDF_Name("Catalog")); 67 pNewRoot->SetFor("Type", new CPDF_Name("Catalog"));
68 68
69 CPDF_Object* pElement = pNewRoot->GetObjectFor("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(pDestPDFDoc->GetByteStringPool()); 73 pNewPages = new CPDF_Dictionary(pDestPDFDoc->GetByteStringPool());
74 pNewRoot->SetReferenceFor("Pages", pDestPDFDoc, 74 pNewRoot->SetReferenceFor("Pages", pDestPDFDoc,
75 pDestPDFDoc->AddIndirectObject(pNewPages)); 75 pDestPDFDoc->AddIndirectObject(pNewPages));
76 } 76 }
77 77
78 CFX_ByteString cbPageType = pNewPages->GetStringFor("Type", ""); 78 CFX_ByteString cbPageType = pNewPages->GetStringFor("Type", "");
79 if (cbPageType == "") { 79 if (cbPageType == "") {
80 pNewPages->SetFor("Type", new CPDF_Name("Pages")); 80 pNewPages->SetFor("Type", new CPDF_Name("Pages"));
81 } 81 }
82 82
83 if (!pNewPages->GetArrayFor("Kids")) { 83 if (!pNewPages->GetArrayFor("Kids")) {
84 pNewPages->SetIntegerFor("Count", 0); 84 pNewPages->SetIntegerFor("Count", 0);
85 pNewPages->SetReferenceFor("Kids", pDestPDFDoc, 85 pNewPages->SetReferenceFor("Kids", pDestPDFDoc,
86 pDestPDFDoc->AddIndirectObject(new CPDF_Array)); 86 pDestPDFDoc->AddIndirectObject(new CPDF_Array));
87 } 87 }
88 88
89 return TRUE; 89 return true;
90 } 90 }
91 91
92 FX_BOOL CPDF_PageOrganizer::ExportPage(CPDF_Document* pSrcPDFDoc, 92 bool CPDF_PageOrganizer::ExportPage(CPDF_Document* pSrcPDFDoc,
93 std::vector<uint16_t>* pPageNums, 93 std::vector<uint16_t>* pPageNums,
94 CPDF_Document* pDestPDFDoc, 94 CPDF_Document* pDestPDFDoc,
95 int nIndex) { 95 int nIndex) {
96 int curpage = nIndex; 96 int curpage = nIndex;
97 std::unique_ptr<ObjectNumberMap> pObjNumberMap(new ObjectNumberMap); 97 std::unique_ptr<ObjectNumberMap> pObjNumberMap(new ObjectNumberMap);
98 int nSize = pdfium::CollectionSize<int>(*pPageNums); 98 int nSize = pdfium::CollectionSize<int>(*pPageNums);
99 for (int i = 0; i < nSize; ++i) { 99 for (int i = 0; i < nSize; ++i) {
100 CPDF_Dictionary* pCurPageDict = pDestPDFDoc->CreateNewPage(curpage); 100 CPDF_Dictionary* pCurPageDict = pDestPDFDoc->CreateNewPage(curpage);
101 CPDF_Dictionary* pSrcPageDict = pSrcPDFDoc->GetPage(pPageNums->at(i) - 1); 101 CPDF_Dictionary* pSrcPageDict = pSrcPDFDoc->GetPage(pPageNums->at(i) - 1);
102 if (!pSrcPageDict || !pCurPageDict) 102 if (!pSrcPageDict || !pCurPageDict)
103 return FALSE; 103 return false;
104 104
105 // Clone the page dictionary 105 // Clone the page dictionary
106 for (const auto& it : *pSrcPageDict) { 106 for (const auto& it : *pSrcPageDict) {
107 const CFX_ByteString& cbSrcKeyStr = it.first; 107 const CFX_ByteString& cbSrcKeyStr = it.first;
108 CPDF_Object* pObj = it.second; 108 CPDF_Object* pObj = it.second;
109 if (cbSrcKeyStr.Compare(("Type")) && cbSrcKeyStr.Compare(("Parent"))) { 109 if (cbSrcKeyStr.Compare(("Type")) && cbSrcKeyStr.Compare(("Parent"))) {
110 if (pCurPageDict->KeyExist(cbSrcKeyStr)) 110 if (pCurPageDict->KeyExist(cbSrcKeyStr))
111 pCurPageDict->RemoveFor(cbSrcKeyStr); 111 pCurPageDict->RemoveFor(cbSrcKeyStr);
112 pCurPageDict->SetFor(cbSrcKeyStr, pObj->Clone()); 112 pCurPageDict->SetFor(cbSrcKeyStr, pObj->Clone());
113 } 113 }
(...skipping 20 matching lines...) Expand all
134 pCurPageDict->SetFor("MediaBox", pArray); 134 pCurPageDict->SetFor("MediaBox", pArray);
135 } 135 }
136 } else { 136 } else {
137 pCurPageDict->SetFor("MediaBox", pInheritable->Clone()); 137 pCurPageDict->SetFor("MediaBox", pInheritable->Clone());
138 } 138 }
139 } 139 }
140 // 2 Resources //required 140 // 2 Resources //required
141 if (!pCurPageDict->KeyExist("Resources")) { 141 if (!pCurPageDict->KeyExist("Resources")) {
142 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Resources"); 142 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Resources");
143 if (!pInheritable) 143 if (!pInheritable)
144 return FALSE; 144 return false;
145 pCurPageDict->SetFor("Resources", pInheritable->Clone()); 145 pCurPageDict->SetFor("Resources", pInheritable->Clone());
146 } 146 }
147 // 3 CropBox //Optional 147 // 3 CropBox //Optional
148 if (!pCurPageDict->KeyExist("CropBox")) { 148 if (!pCurPageDict->KeyExist("CropBox")) {
149 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "CropBox"); 149 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "CropBox");
150 if (pInheritable) 150 if (pInheritable)
151 pCurPageDict->SetFor("CropBox", pInheritable->Clone()); 151 pCurPageDict->SetFor("CropBox", pInheritable->Clone());
152 } 152 }
153 // 4 Rotate //Optional 153 // 4 Rotate //Optional
154 if (!pCurPageDict->KeyExist("Rotate")) { 154 if (!pCurPageDict->KeyExist("Rotate")) {
155 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Rotate"); 155 pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Rotate");
156 if (pInheritable) 156 if (pInheritable)
157 pCurPageDict->SetFor("Rotate", pInheritable->Clone()); 157 pCurPageDict->SetFor("Rotate", pInheritable->Clone());
158 } 158 }
159 159
160 // Update the reference 160 // Update the reference
161 uint32_t dwOldPageObj = pSrcPageDict->GetObjNum(); 161 uint32_t dwOldPageObj = pSrcPageDict->GetObjNum();
162 uint32_t dwNewPageObj = pCurPageDict->GetObjNum(); 162 uint32_t dwNewPageObj = pCurPageDict->GetObjNum();
163 163
164 (*pObjNumberMap)[dwOldPageObj] = dwNewPageObj; 164 (*pObjNumberMap)[dwOldPageObj] = dwNewPageObj;
165 165
166 UpdateReference(pCurPageDict, pDestPDFDoc, pObjNumberMap.get()); 166 UpdateReference(pCurPageDict, pDestPDFDoc, pObjNumberMap.get());
167 ++curpage; 167 ++curpage;
168 } 168 }
169 169
170 return TRUE; 170 return true;
171 } 171 }
172 172
173 CPDF_Object* CPDF_PageOrganizer::PageDictGetInheritableTag( 173 CPDF_Object* CPDF_PageOrganizer::PageDictGetInheritableTag(
174 CPDF_Dictionary* pDict, 174 CPDF_Dictionary* pDict,
175 const CFX_ByteString& bsSrcTag) { 175 const CFX_ByteString& bsSrcTag) {
176 if (!pDict || bsSrcTag.IsEmpty()) 176 if (!pDict || bsSrcTag.IsEmpty())
177 return nullptr; 177 return nullptr;
178 if (!pDict->KeyExist("Parent") || !pDict->KeyExist("Type")) 178 if (!pDict->KeyExist("Parent") || !pDict->KeyExist("Type"))
179 return nullptr; 179 return nullptr;
180 180
(...skipping 14 matching lines...) Expand all
195 while (pp) { 195 while (pp) {
196 if (pp->KeyExist(bsSrcTag)) 196 if (pp->KeyExist(bsSrcTag))
197 return pp->GetObjectFor(bsSrcTag); 197 return pp->GetObjectFor(bsSrcTag);
198 if (!pp->KeyExist("Parent")) 198 if (!pp->KeyExist("Parent"))
199 break; 199 break;
200 pp = ToDictionary(pp->GetObjectFor("Parent")->GetDirect()); 200 pp = ToDictionary(pp->GetObjectFor("Parent")->GetDirect());
201 } 201 }
202 return nullptr; 202 return nullptr;
203 } 203 }
204 204
205 FX_BOOL CPDF_PageOrganizer::UpdateReference(CPDF_Object* pObj, 205 bool CPDF_PageOrganizer::UpdateReference(CPDF_Object* pObj,
206 CPDF_Document* pDoc, 206 CPDF_Document* pDoc,
207 ObjectNumberMap* pObjNumberMap) { 207 ObjectNumberMap* pObjNumberMap) {
208 switch (pObj->GetType()) { 208 switch (pObj->GetType()) {
209 case CPDF_Object::REFERENCE: { 209 case CPDF_Object::REFERENCE: {
210 CPDF_Reference* pReference = pObj->AsReference(); 210 CPDF_Reference* pReference = pObj->AsReference();
211 uint32_t newobjnum = GetNewObjId(pDoc, pObjNumberMap, pReference); 211 uint32_t newobjnum = GetNewObjId(pDoc, pObjNumberMap, pReference);
212 if (newobjnum == 0) 212 if (newobjnum == 0)
213 return FALSE; 213 return false;
214 pReference->SetRef(pDoc, newobjnum); 214 pReference->SetRef(pDoc, newobjnum);
215 break; 215 break;
216 } 216 }
217 case CPDF_Object::DICTIONARY: { 217 case CPDF_Object::DICTIONARY: {
218 CPDF_Dictionary* pDict = pObj->AsDictionary(); 218 CPDF_Dictionary* pDict = pObj->AsDictionary();
219 auto it = pDict->begin(); 219 auto it = pDict->begin();
220 while (it != pDict->end()) { 220 while (it != pDict->end()) {
221 const CFX_ByteString& key = it->first; 221 const CFX_ByteString& key = it->first;
222 CPDF_Object* pNextObj = it->second; 222 CPDF_Object* pNextObj = it->second;
223 ++it; 223 ++it;
224 if (key == "Parent" || key == "Prev" || key == "First") 224 if (key == "Parent" || key == "Prev" || key == "First")
225 continue; 225 continue;
226 if (!pNextObj) 226 if (!pNextObj)
227 return FALSE; 227 return false;
228 if (!UpdateReference(pNextObj, pDoc, pObjNumberMap)) 228 if (!UpdateReference(pNextObj, pDoc, pObjNumberMap))
229 pDict->RemoveFor(key); 229 pDict->RemoveFor(key);
230 } 230 }
231 break; 231 break;
232 } 232 }
233 case CPDF_Object::ARRAY: { 233 case CPDF_Object::ARRAY: {
234 CPDF_Array* pArray = pObj->AsArray(); 234 CPDF_Array* pArray = pObj->AsArray();
235 for (size_t i = 0; i < pArray->GetCount(); ++i) { 235 for (size_t i = 0; i < pArray->GetCount(); ++i) {
236 CPDF_Object* pNextObj = pArray->GetObjectAt(i); 236 CPDF_Object* pNextObj = pArray->GetObjectAt(i);
237 if (!pNextObj) 237 if (!pNextObj)
238 return FALSE; 238 return false;
239 if (!UpdateReference(pNextObj, pDoc, pObjNumberMap)) 239 if (!UpdateReference(pNextObj, pDoc, pObjNumberMap))
240 return FALSE; 240 return false;
241 } 241 }
242 break; 242 break;
243 } 243 }
244 case CPDF_Object::STREAM: { 244 case CPDF_Object::STREAM: {
245 CPDF_Stream* pStream = pObj->AsStream(); 245 CPDF_Stream* pStream = pObj->AsStream();
246 CPDF_Dictionary* pDict = pStream->GetDict(); 246 CPDF_Dictionary* pDict = pStream->GetDict();
247 if (pDict) { 247 if (pDict) {
248 if (!UpdateReference(pDict, pDoc, pObjNumberMap)) 248 if (!UpdateReference(pDict, pDoc, pObjNumberMap))
249 return FALSE; 249 return false;
250 } else { 250 } else {
251 return FALSE; 251 return false;
252 } 252 }
253 break; 253 break;
254 } 254 }
255 default: 255 default:
256 break; 256 break;
257 } 257 }
258 258
259 return TRUE; 259 return true;
260 } 260 }
261 261
262 uint32_t CPDF_PageOrganizer::GetNewObjId(CPDF_Document* pDoc, 262 uint32_t CPDF_PageOrganizer::GetNewObjId(CPDF_Document* pDoc,
263 ObjectNumberMap* pObjNumberMap, 263 ObjectNumberMap* pObjNumberMap,
264 CPDF_Reference* pRef) { 264 CPDF_Reference* pRef) {
265 if (!pRef) 265 if (!pRef)
266 return 0; 266 return 0;
267 267
268 uint32_t dwObjnum = pRef->GetRefObjNum(); 268 uint32_t dwObjnum = pRef->GetRefObjNum();
269 uint32_t dwNewObjNum = 0; 269 uint32_t dwNewObjNum = 0;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 305
306 FPDF_BOOL ParserPageRangeString(CFX_ByteString rangstring, 306 FPDF_BOOL ParserPageRangeString(CFX_ByteString rangstring,
307 std::vector<uint16_t>* pageArray, 307 std::vector<uint16_t>* pageArray,
308 int nCount) { 308 int nCount) {
309 if (rangstring.GetLength() != 0) { 309 if (rangstring.GetLength() != 0) {
310 rangstring.Remove(' '); 310 rangstring.Remove(' ');
311 int nLength = rangstring.GetLength(); 311 int nLength = rangstring.GetLength();
312 CFX_ByteString cbCompareString("0123456789-,"); 312 CFX_ByteString cbCompareString("0123456789-,");
313 for (int i = 0; i < nLength; ++i) { 313 for (int i = 0; i < nLength; ++i) {
314 if (cbCompareString.Find(rangstring[i]) == -1) 314 if (cbCompareString.Find(rangstring[i]) == -1)
315 return FALSE; 315 return false;
316 } 316 }
317 CFX_ByteString cbMidRange; 317 CFX_ByteString cbMidRange;
318 int nStringFrom = 0; 318 int nStringFrom = 0;
319 int nStringTo = 0; 319 int nStringTo = 0;
320 while (nStringTo < nLength) { 320 while (nStringTo < nLength) {
321 nStringTo = rangstring.Find(',', nStringFrom); 321 nStringTo = rangstring.Find(',', nStringFrom);
322 if (nStringTo == -1) 322 if (nStringTo == -1)
323 nStringTo = nLength; 323 nStringTo = nLength;
324 cbMidRange = rangstring.Mid(nStringFrom, nStringTo - nStringFrom); 324 cbMidRange = rangstring.Mid(nStringFrom, nStringTo - nStringFrom);
325 int nMid = cbMidRange.Find('-'); 325 int nMid = cbMidRange.Find('-');
326 if (nMid == -1) { 326 if (nMid == -1) {
327 long lPageNum = atol(cbMidRange.c_str()); 327 long lPageNum = atol(cbMidRange.c_str());
328 if (lPageNum <= 0 || lPageNum > nCount) 328 if (lPageNum <= 0 || lPageNum > nCount)
329 return FALSE; 329 return false;
330 pageArray->push_back((uint16_t)lPageNum); 330 pageArray->push_back((uint16_t)lPageNum);
331 } else { 331 } else {
332 int nStartPageNum = atol(cbMidRange.Mid(0, nMid).c_str()); 332 int nStartPageNum = atol(cbMidRange.Mid(0, nMid).c_str());
333 if (nStartPageNum == 0) 333 if (nStartPageNum == 0)
334 return FALSE; 334 return false;
335 335
336 ++nMid; 336 ++nMid;
337 int nEnd = cbMidRange.GetLength() - nMid; 337 int nEnd = cbMidRange.GetLength() - nMid;
338 if (nEnd == 0) 338 if (nEnd == 0)
339 return FALSE; 339 return false;
340 340
341 int nEndPageNum = atol(cbMidRange.Mid(nMid, nEnd).c_str()); 341 int nEndPageNum = atol(cbMidRange.Mid(nMid, nEnd).c_str());
342 if (nStartPageNum < 0 || nStartPageNum > nEndPageNum || 342 if (nStartPageNum < 0 || nStartPageNum > nEndPageNum ||
343 nEndPageNum > nCount) { 343 nEndPageNum > nCount) {
344 return FALSE; 344 return false;
345 } 345 }
346 for (int i = nStartPageNum; i <= nEndPageNum; ++i) { 346 for (int i = nStartPageNum; i <= nEndPageNum; ++i) {
347 pageArray->push_back(i); 347 pageArray->push_back(i);
348 } 348 }
349 } 349 }
350 nStringFrom = nStringTo + 1; 350 nStringFrom = nStringTo + 1;
351 } 351 }
352 } 352 }
353 return TRUE; 353 return true;
354 } 354 }
355 355
356 DLLEXPORT FPDF_BOOL STDCALL FPDF_ImportPages(FPDF_DOCUMENT dest_doc, 356 DLLEXPORT FPDF_BOOL STDCALL FPDF_ImportPages(FPDF_DOCUMENT dest_doc,
357 FPDF_DOCUMENT src_doc, 357 FPDF_DOCUMENT src_doc,
358 FPDF_BYTESTRING pagerange, 358 FPDF_BYTESTRING pagerange,
359 int index) { 359 int index) {
360 CPDF_Document* pDestDoc = CPDFDocumentFromFPDFDocument(dest_doc); 360 CPDF_Document* pDestDoc = CPDFDocumentFromFPDFDocument(dest_doc);
361 if (!dest_doc) 361 if (!dest_doc)
362 return FALSE; 362 return false;
363 363
364 CPDF_Document* pSrcDoc = CPDFDocumentFromFPDFDocument(src_doc); 364 CPDF_Document* pSrcDoc = CPDFDocumentFromFPDFDocument(src_doc);
365 if (!pSrcDoc) 365 if (!pSrcDoc)
366 return FALSE; 366 return false;
367 367
368 std::vector<uint16_t> pageArray; 368 std::vector<uint16_t> pageArray;
369 int nCount = pSrcDoc->GetPageCount(); 369 int nCount = pSrcDoc->GetPageCount();
370 if (pagerange) { 370 if (pagerange) {
371 if (!ParserPageRangeString(pagerange, &pageArray, nCount)) 371 if (!ParserPageRangeString(pagerange, &pageArray, nCount))
372 return FALSE; 372 return false;
373 } else { 373 } else {
374 for (int i = 1; i <= nCount; ++i) { 374 for (int i = 1; i <= nCount; ++i) {
375 pageArray.push_back(i); 375 pageArray.push_back(i);
376 } 376 }
377 } 377 }
378 378
379 CPDF_PageOrganizer pageOrg; 379 CPDF_PageOrganizer pageOrg;
380 pageOrg.PDFDocInit(pDestDoc, pSrcDoc); 380 pageOrg.PDFDocInit(pDestDoc, pSrcDoc);
381 return pageOrg.ExportPage(pSrcDoc, &pageArray, pDestDoc, index); 381 return pageOrg.ExportPage(pSrcDoc, &pageArray, pDestDoc, index);
382 } 382 }
383 383
384 DLLEXPORT FPDF_BOOL STDCALL FPDF_CopyViewerPreferences(FPDF_DOCUMENT dest_doc, 384 DLLEXPORT FPDF_BOOL STDCALL FPDF_CopyViewerPreferences(FPDF_DOCUMENT dest_doc,
385 FPDF_DOCUMENT src_doc) { 385 FPDF_DOCUMENT src_doc) {
386 CPDF_Document* pDstDoc = CPDFDocumentFromFPDFDocument(dest_doc); 386 CPDF_Document* pDstDoc = CPDFDocumentFromFPDFDocument(dest_doc);
387 if (!pDstDoc) 387 if (!pDstDoc)
388 return FALSE; 388 return false;
389 389
390 CPDF_Document* pSrcDoc = CPDFDocumentFromFPDFDocument(src_doc); 390 CPDF_Document* pSrcDoc = CPDFDocumentFromFPDFDocument(src_doc);
391 if (!pSrcDoc) 391 if (!pSrcDoc)
392 return FALSE; 392 return false;
393 393
394 CPDF_Dictionary* pSrcDict = pSrcDoc->GetRoot(); 394 CPDF_Dictionary* pSrcDict = pSrcDoc->GetRoot();
395 pSrcDict = pSrcDict->GetDictFor("ViewerPreferences"); 395 pSrcDict = pSrcDict->GetDictFor("ViewerPreferences");
396 if (!pSrcDict) 396 if (!pSrcDict)
397 return FALSE; 397 return false;
398 398
399 CPDF_Dictionary* pDstDict = pDstDoc->GetRoot(); 399 CPDF_Dictionary* pDstDict = pDstDoc->GetRoot();
400 if (!pDstDict) 400 if (!pDstDict)
401 return FALSE; 401 return false;
402 402
403 pDstDict->SetFor("ViewerPreferences", pSrcDict->CloneDirectObject()); 403 pDstDict->SetFor("ViewerPreferences", pSrcDict->CloneDirectObject());
404 return TRUE; 404 return true;
405 } 405 }
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