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 "../../include/fpdfdoc/fpdf_doc.h" | 7 #include "../../include/fpdfdoc/fpdf_doc.h" |
8 #include "doc_utils.h" | 8 #include "doc_utils.h" |
9 | 9 |
10 static const int FPDFDOC_UTILS_MAXRECURSION = 32; | 10 static const int FPDFDOC_UTILS_MAXRECURSION = 32; |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 FX_POSITION pos = pFonts->GetStartPos(); | 291 FX_POSITION pos = pFonts->GetStartPos(); |
292 while (pos) { | 292 while (pos) { |
293 CPDF_Object* pObj = NULL; | 293 CPDF_Object* pObj = NULL; |
294 CFX_ByteString csKey; | 294 CFX_ByteString csKey; |
295 pObj = pFonts->GetNextElement(pos, csKey); | 295 pObj = pFonts->GetNextElement(pos, csKey); |
296 if (pObj == NULL) { | 296 if (pObj == NULL) { |
297 continue; | 297 continue; |
298 } | 298 } |
299 CPDF_Object* pDirect = pObj->GetDirect(); | 299 CPDF_Object* pDirect = pObj->GetDirect(); |
300 if (pDirect != NULL && pDirect->GetType() == PDFOBJ_DICTIONARY) { | 300 if (pDirect != NULL && pDirect->GetType() == PDFOBJ_DICTIONARY) { |
301 if (((CPDF_Dictionary*)pDirect)->GetString("Type") == "Font") { | 301 if (((CPDF_Dictionary*)pDirect)->GetStringAt("Type") == "Font") { |
302 dwCount ++; | 302 dwCount ++; |
303 } | 303 } |
304 } | 304 } |
305 } | 305 } |
306 return dwCount; | 306 return dwCount; |
307 } | 307 } |
308 CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument
, FX_DWORD index, CFX_ByteString& csNameTag) | 308 CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument
, FX_DWORD index, CFX_ByteString& csNameTag) |
309 { | 309 { |
310 if (pFormDict == NULL) { | 310 if (pFormDict == NULL) { |
311 return NULL; | 311 return NULL; |
(...skipping 13 matching lines...) Expand all Loading... |
325 CFX_ByteString csKey; | 325 CFX_ByteString csKey; |
326 pObj = pFonts->GetNextElement(pos, csKey); | 326 pObj = pFonts->GetNextElement(pos, csKey); |
327 if (pObj == NULL) { | 327 if (pObj == NULL) { |
328 continue; | 328 continue; |
329 } | 329 } |
330 CPDF_Object* pDirect = pObj->GetDirect(); | 330 CPDF_Object* pDirect = pObj->GetDirect(); |
331 if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) { | 331 if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) { |
332 continue; | 332 continue; |
333 } | 333 } |
334 CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect; | 334 CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect; |
335 if (pElement->GetString("Type") != "Font") { | 335 if (pElement->GetStringAt("Type") != "Font") { |
336 continue; | 336 continue; |
337 } | 337 } |
338 if (dwCount == index) { | 338 if (dwCount == index) { |
339 csNameTag = csKey; | 339 csNameTag = csKey; |
340 return pDocument->LoadFont(pElement); | 340 return pDocument->LoadFont(pElement); |
341 } | 341 } |
342 dwCount ++; | 342 dwCount ++; |
343 } | 343 } |
344 return NULL; | 344 return NULL; |
345 } | 345 } |
346 CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument
, CFX_ByteString csNameTag) | 346 CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument
, CFX_ByteString csNameTag) |
347 { | 347 { |
348 CFX_ByteString csAlias = PDF_NameDecode(csNameTag); | 348 CFX_ByteString csAlias = PDF_NameDecode(csNameTag); |
349 if (pFormDict == NULL || csAlias.IsEmpty()) { | 349 if (pFormDict == NULL || csAlias.IsEmpty()) { |
350 return NULL; | 350 return NULL; |
351 } | 351 } |
352 CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); | 352 CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); |
353 if (pDR == NULL) { | 353 if (pDR == NULL) { |
354 return NULL; | 354 return NULL; |
355 } | 355 } |
356 CPDF_Dictionary* pFonts = pDR->GetDict("Font"); | 356 CPDF_Dictionary* pFonts = pDR->GetDict("Font"); |
357 if (pFonts == NULL) { | 357 if (pFonts == NULL) { |
358 return NULL; | 358 return NULL; |
359 } | 359 } |
360 CPDF_Dictionary* pElement = pFonts->GetDict(csAlias); | 360 CPDF_Dictionary* pElement = pFonts->GetDict(csAlias); |
361 if (pElement == NULL) { | 361 if (pElement == NULL) { |
362 return NULL; | 362 return NULL; |
363 } | 363 } |
364 if (pElement->GetString("Type") == "Font") { | 364 if (pElement->GetStringAt("Type") == "Font") { |
365 return pDocument->LoadFont(pElement); | 365 return pDocument->LoadFont(pElement); |
366 } | 366 } |
367 return NULL; | 367 return NULL; |
368 } | 368 } |
369 CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument
, CFX_ByteString csFontName, CFX_ByteString& csNameTag) | 369 CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument
, CFX_ByteString csFontName, CFX_ByteString& csNameTag) |
370 { | 370 { |
371 if (pFormDict == NULL || csFontName.IsEmpty()) { | 371 if (pFormDict == NULL || csFontName.IsEmpty()) { |
372 return NULL; | 372 return NULL; |
373 } | 373 } |
374 CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); | 374 CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); |
(...skipping 10 matching lines...) Expand all Loading... |
385 CFX_ByteString csKey; | 385 CFX_ByteString csKey; |
386 pObj = pFonts->GetNextElement(pos, csKey); | 386 pObj = pFonts->GetNextElement(pos, csKey); |
387 if (pObj == NULL) { | 387 if (pObj == NULL) { |
388 continue; | 388 continue; |
389 } | 389 } |
390 CPDF_Object* pDirect = pObj->GetDirect(); | 390 CPDF_Object* pDirect = pObj->GetDirect(); |
391 if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) { | 391 if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) { |
392 continue; | 392 continue; |
393 } | 393 } |
394 CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect; | 394 CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect; |
395 if (pElement->GetString("Type") != "Font") { | 395 if (pElement->GetStringAt("Type") != "Font") { |
396 continue; | 396 continue; |
397 } | 397 } |
398 CPDF_Font* pFind = pDocument->LoadFont(pElement); | 398 CPDF_Font* pFind = pDocument->LoadFont(pElement); |
399 if (pFind == NULL) { | 399 if (pFind == NULL) { |
400 continue; | 400 continue; |
401 } | 401 } |
402 CFX_ByteString csBaseFont; | 402 CFX_ByteString csBaseFont; |
403 csBaseFont = pFind->GetBaseFont(); | 403 csBaseFont = pFind->GetBaseFont(); |
404 csBaseFont.Remove(' '); | 404 csBaseFont.Remove(' '); |
405 if (csBaseFont == csFontName) { | 405 if (csBaseFont == csFontName) { |
(...skipping 22 matching lines...) Expand all Loading... |
428 CFX_ByteString csKey; | 428 CFX_ByteString csKey; |
429 pObj = pFonts->GetNextElement(pos, csKey); | 429 pObj = pFonts->GetNextElement(pos, csKey); |
430 if (pObj == NULL) { | 430 if (pObj == NULL) { |
431 continue; | 431 continue; |
432 } | 432 } |
433 CPDF_Object* pDirect = pObj->GetDirect(); | 433 CPDF_Object* pDirect = pObj->GetDirect(); |
434 if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) { | 434 if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) { |
435 continue; | 435 continue; |
436 } | 436 } |
437 CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect; | 437 CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect; |
438 if (pElement->GetString("Type") != "Font") { | 438 if (pElement->GetStringAt("Type") != "Font") { |
439 continue; | 439 continue; |
440 } | 440 } |
441 CPDF_Font* pFind = pDocument->LoadFont(pElement); | 441 CPDF_Font* pFind = pDocument->LoadFont(pElement); |
442 if (pFind == NULL) { | 442 if (pFind == NULL) { |
443 continue; | 443 continue; |
444 } | 444 } |
445 CFX_SubstFont* pSubst = (CFX_SubstFont*)pFind->GetSubstFont(); | 445 CFX_SubstFont* pSubst = (CFX_SubstFont*)pFind->GetSubstFont(); |
446 if (pSubst == NULL) { | 446 if (pSubst == NULL) { |
447 continue; | 447 continue; |
448 } | 448 } |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
487 CFX_ByteString csKey; | 487 CFX_ByteString csKey; |
488 pObj = pFonts->GetNextElement(pos, csKey); | 488 pObj = pFonts->GetNextElement(pos, csKey); |
489 if (pObj == NULL) { | 489 if (pObj == NULL) { |
490 continue; | 490 continue; |
491 } | 491 } |
492 CPDF_Object* pDirect = pObj->GetDirect(); | 492 CPDF_Object* pDirect = pObj->GetDirect(); |
493 if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) { | 493 if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) { |
494 continue; | 494 continue; |
495 } | 495 } |
496 CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect; | 496 CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect; |
497 if (pElement->GetString("Type") != "Font") { | 497 if (pElement->GetStringAt("Type") != "Font") { |
498 continue; | 498 continue; |
499 } | 499 } |
500 if (pFont->GetFontDict() == pElement) { | 500 if (pFont->GetFontDict() == pElement) { |
501 csNameTag = csKey; | 501 csNameTag = csKey; |
502 return TRUE; | 502 return TRUE; |
503 } | 503 } |
504 } | 504 } |
505 return FALSE; | 505 return FALSE; |
506 } | 506 } |
507 FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument,
CFX_ByteString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag) | 507 FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument,
CFX_ByteString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag) |
(...skipping 18 matching lines...) Expand all Loading... |
526 CFX_ByteString csKey, csTmp; | 526 CFX_ByteString csKey, csTmp; |
527 pObj = pFonts->GetNextElement(pos, csKey); | 527 pObj = pFonts->GetNextElement(pos, csKey); |
528 if (pObj == NULL) { | 528 if (pObj == NULL) { |
529 continue; | 529 continue; |
530 } | 530 } |
531 CPDF_Object* pDirect = pObj->GetDirect(); | 531 CPDF_Object* pDirect = pObj->GetDirect(); |
532 if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) { | 532 if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) { |
533 continue; | 533 continue; |
534 } | 534 } |
535 CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect; | 535 CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect; |
536 if (pElement->GetString("Type") != "Font") { | 536 if (pElement->GetStringAt("Type") != "Font") { |
537 continue; | 537 continue; |
538 } | 538 } |
539 pFont = pDocument->LoadFont(pElement); | 539 pFont = pDocument->LoadFont(pElement); |
540 if (pFont == NULL) { | 540 if (pFont == NULL) { |
541 continue; | 541 continue; |
542 } | 542 } |
543 CFX_ByteString csBaseFont; | 543 CFX_ByteString csBaseFont; |
544 csBaseFont = pFont->GetBaseFont(); | 544 csBaseFont = pFont->GetBaseFont(); |
545 csBaseFont.Remove(' '); | 545 csBaseFont.Remove(' '); |
546 if (csBaseFont == csFontName) { | 546 if (csBaseFont == csFontName) { |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
640 if (pFonts == NULL) { | 640 if (pFonts == NULL) { |
641 return; | 641 return; |
642 } | 642 } |
643 pFonts->RemoveAt(csNameTag); | 643 pFonts->RemoveAt(csNameTag); |
644 } | 644 } |
645 CPDF_Font* GetDefaultInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pD
ocument) | 645 CPDF_Font* GetDefaultInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pD
ocument) |
646 { | 646 { |
647 if (pFormDict == NULL) { | 647 if (pFormDict == NULL) { |
648 return NULL; | 648 return NULL; |
649 } | 649 } |
650 CPDF_DefaultAppearance cDA = pFormDict->GetString("DA"); | 650 CPDF_DefaultAppearance cDA = pFormDict->GetStringAt("DA"); |
651 CFX_ByteString csFontNameTag; | 651 CFX_ByteString csFontNameTag; |
652 FX_FLOAT fFontSize; | 652 FX_FLOAT fFontSize; |
653 cDA.GetFont(csFontNameTag, fFontSize); | 653 cDA.GetFont(csFontNameTag, fFontSize); |
654 return GetInterFormFont(pFormDict, pDocument, csFontNameTag); | 654 return GetInterFormFont(pFormDict, pDocument, csFontNameTag); |
655 } | 655 } |
656 CPDF_IconFit::ScaleMethod CPDF_IconFit::GetScaleMethod() | 656 CPDF_IconFit::ScaleMethod CPDF_IconFit::GetScaleMethod() |
657 { | 657 { |
658 if (m_pDict == NULL) { | 658 if (m_pDict == NULL) { |
659 return Always; | 659 return Always; |
660 } | 660 } |
661 CFX_ByteString csSW = m_pDict->GetString("SW", "A"); | 661 CFX_ByteString csSW = m_pDict->GetStringAt("SW", "A"); |
662 if (csSW == "B") { | 662 if (csSW == "B") { |
663 return Bigger; | 663 return Bigger; |
664 } else if (csSW == "S") { | 664 } else if (csSW == "S") { |
665 return Smaller; | 665 return Smaller; |
666 } else if (csSW == "N") { | 666 } else if (csSW == "N") { |
667 return Never; | 667 return Never; |
668 } | 668 } |
669 return Always; | 669 return Always; |
670 } | 670 } |
671 FX_BOOL CPDF_IconFit::IsProportionalScale() | 671 FX_BOOL CPDF_IconFit::IsProportionalScale() |
672 { | 672 { |
673 if (m_pDict == NULL) { | 673 if (m_pDict == NULL) { |
674 return TRUE; | 674 return TRUE; |
675 } | 675 } |
676 return m_pDict->GetString("S", "P") != "A"; | 676 return m_pDict->GetStringAt("S", "P") != "A"; |
677 } | 677 } |
678 void CPDF_IconFit::GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom) | 678 void CPDF_IconFit::GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom) |
679 { | 679 { |
680 fLeft = fBottom = 0.5; | 680 fLeft = fBottom = 0.5; |
681 if (m_pDict == NULL) { | 681 if (m_pDict == NULL) { |
682 return; | 682 return; |
683 } | 683 } |
684 CPDF_Array* pA = m_pDict->GetArray("A"); | 684 CPDF_Array* pA = m_pDict->GetArray("A"); |
685 if (pA != NULL) { | 685 if (pA != NULL) { |
686 FX_DWORD dwCount = pA->GetCount(); | 686 FX_DWORD dwCount = pA->GetCount(); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
721 CPDF_Object* pAttr = pFieldDict->GetElementValue(name); | 721 CPDF_Object* pAttr = pFieldDict->GetElementValue(name); |
722 if (pAttr) { | 722 if (pAttr) { |
723 return pAttr; | 723 return pAttr; |
724 } | 724 } |
725 CPDF_Dictionary* pParent = pFieldDict->GetDict("Parent"); | 725 CPDF_Dictionary* pParent = pFieldDict->GetDict("Parent"); |
726 if (pParent == NULL) { | 726 if (pParent == NULL) { |
727 return NULL; | 727 return NULL; |
728 } | 728 } |
729 return FPDF_GetFieldAttr(pParent, name, nLevel + 1); | 729 return FPDF_GetFieldAttr(pParent, name, nLevel + 1); |
730 } | 730 } |
OLD | NEW |