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 "core/include/fpdfdoc/fpdf_doc.h" | 7 #include "core/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 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 FX_DWORD dwObjNum = pDocument->AddIndirectObject(pFormDict); | 235 FX_DWORD dwObjNum = pDocument->AddIndirectObject(pFormDict); |
236 CPDF_Dictionary* pRoot = pDocument->GetRoot(); | 236 CPDF_Dictionary* pRoot = pDocument->GetRoot(); |
237 pRoot->SetAtReference("AcroForm", pDocument, dwObjNum); | 237 pRoot->SetAtReference("AcroForm", pDocument, dwObjNum); |
238 } | 238 } |
239 CFX_ByteString csDA; | 239 CFX_ByteString csDA; |
240 if (!pFormDict->KeyExist("DR")) { | 240 if (!pFormDict->KeyExist("DR")) { |
241 CPDF_Font* pFont = NULL; | 241 CPDF_Font* pFont = NULL; |
242 CFX_ByteString csBaseName, csDefault; | 242 CFX_ByteString csBaseName, csDefault; |
243 uint8_t charSet = CPDF_InterForm::GetNativeCharSet(); | 243 uint8_t charSet = CPDF_InterForm::GetNativeCharSet(); |
244 pFont = CPDF_InterForm::AddStandardFont(pDocument, "Helvetica"); | 244 pFont = CPDF_InterForm::AddStandardFont(pDocument, "Helvetica"); |
245 if (pFont != NULL) { | 245 if (pFont) { |
246 AddInterFormFont(pFormDict, pDocument, pFont, csBaseName); | 246 AddInterFormFont(pFormDict, pDocument, pFont, csBaseName); |
247 csDefault = csBaseName; | 247 csDefault = csBaseName; |
248 } | 248 } |
249 if (charSet != 0) { | 249 if (charSet != 0) { |
250 CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet, NULL); | 250 CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet, NULL); |
251 if (pFont == NULL || csFontName != "Helvetica") { | 251 if (pFont == NULL || csFontName != "Helvetica") { |
252 pFont = CPDF_InterForm::AddNativeFont(pDocument); | 252 pFont = CPDF_InterForm::AddNativeFont(pDocument); |
253 if (pFont != NULL) { | 253 if (pFont) { |
254 csBaseName = ""; | 254 csBaseName = ""; |
255 AddInterFormFont(pFormDict, pDocument, pFont, csBaseName); | 255 AddInterFormFont(pFormDict, pDocument, pFont, csBaseName); |
256 csDefault = csBaseName; | 256 csDefault = csBaseName; |
257 } | 257 } |
258 } | 258 } |
259 } | 259 } |
260 if (pFont != NULL) { | 260 if (pFont) { |
261 csDA = "/" + PDF_NameEncode(csDefault) + " 0 Tf"; | 261 csDA = "/" + PDF_NameEncode(csDefault) + " 0 Tf"; |
262 } | 262 } |
263 } | 263 } |
264 if (!csDA.IsEmpty()) { | 264 if (!csDA.IsEmpty()) { |
265 csDA += " "; | 265 csDA += " "; |
266 } | 266 } |
267 csDA += "0 g"; | 267 csDA += "0 g"; |
268 if (!pFormDict->KeyExist("DA")) { | 268 if (!pFormDict->KeyExist("DA")) { |
269 pFormDict->SetAtString("DA", csDA); | 269 pFormDict->SetAtString("DA", csDA); |
270 } | 270 } |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 } | 445 } |
446 return NULL; | 446 return NULL; |
447 } | 447 } |
448 CPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict, | 448 CPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict, |
449 CPDF_Document* pDocument, | 449 CPDF_Document* pDocument, |
450 CFX_ByteString& csNameTag) { | 450 CFX_ByteString& csNameTag) { |
451 csNameTag = ""; | 451 csNameTag = ""; |
452 uint8_t charSet = CPDF_InterForm::GetNativeCharSet(); | 452 uint8_t charSet = CPDF_InterForm::GetNativeCharSet(); |
453 CFX_SubstFont* pSubst; | 453 CFX_SubstFont* pSubst; |
454 CPDF_Font* pFont = GetDefaultInterFormFont(pFormDict, pDocument); | 454 CPDF_Font* pFont = GetDefaultInterFormFont(pFormDict, pDocument); |
455 if (pFont != NULL) { | 455 if (pFont) { |
456 pSubst = (CFX_SubstFont*)pFont->GetSubstFont(); | 456 pSubst = (CFX_SubstFont*)pFont->GetSubstFont(); |
457 if (pSubst != NULL && pSubst->m_Charset == (int)charSet) { | 457 if (pSubst && pSubst->m_Charset == (int)charSet) { |
458 FindInterFormFont(pFormDict, pFont, csNameTag); | 458 FindInterFormFont(pFormDict, pFont, csNameTag); |
459 return pFont; | 459 return pFont; |
460 } | 460 } |
461 } | 461 } |
462 return GetNativeInterFormFont(pFormDict, pDocument, charSet, csNameTag); | 462 return GetNativeInterFormFont(pFormDict, pDocument, charSet, csNameTag); |
463 } | 463 } |
464 FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict, | 464 FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict, |
465 const CPDF_Font* pFont, | 465 const CPDF_Font* pFont, |
466 CFX_ByteString& csNameTag) { | 466 CFX_ByteString& csNameTag) { |
467 if (pFormDict == NULL || pFont == NULL) { | 467 if (pFormDict == NULL || pFont == NULL) { |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
585 CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict, | 585 CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict, |
586 CPDF_Document* pDocument, | 586 CPDF_Document* pDocument, |
587 uint8_t charSet, | 587 uint8_t charSet, |
588 CFX_ByteString& csNameTag) { | 588 CFX_ByteString& csNameTag) { |
589 if (pFormDict == NULL) { | 589 if (pFormDict == NULL) { |
590 InitInterFormDict(pFormDict, pDocument); | 590 InitInterFormDict(pFormDict, pDocument); |
591 } | 591 } |
592 CFX_ByteString csTemp; | 592 CFX_ByteString csTemp; |
593 CPDF_Font* pFont = | 593 CPDF_Font* pFont = |
594 GetNativeInterFormFont(pFormDict, pDocument, charSet, csTemp); | 594 GetNativeInterFormFont(pFormDict, pDocument, charSet, csTemp); |
595 if (pFont != NULL) { | 595 if (pFont) { |
596 csNameTag = csTemp; | 596 csNameTag = csTemp; |
597 return pFont; | 597 return pFont; |
598 } | 598 } |
599 CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet); | 599 CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet); |
600 if (!csFontName.IsEmpty()) { | 600 if (!csFontName.IsEmpty()) { |
601 if (FindInterFormFont(pFormDict, pDocument, csFontName, pFont, csNameTag)) { | 601 if (FindInterFormFont(pFormDict, pDocument, csFontName, pFont, csNameTag)) { |
602 return pFont; | 602 return pFont; |
603 } | 603 } |
604 } | 604 } |
605 pFont = CPDF_InterForm::AddNativeFont(charSet, pDocument); | 605 pFont = CPDF_InterForm::AddNativeFont(charSet, pDocument); |
606 if (pFont != NULL) { | 606 if (pFont) { |
607 AddInterFormFont(pFormDict, pDocument, pFont, csNameTag); | 607 AddInterFormFont(pFormDict, pDocument, pFont, csNameTag); |
608 } | 608 } |
609 return pFont; | 609 return pFont; |
610 } | 610 } |
611 CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict, | 611 CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict, |
612 CPDF_Document* pDocument, | 612 CPDF_Document* pDocument, |
613 CFX_ByteString& csNameTag) { | 613 CFX_ByteString& csNameTag) { |
614 uint8_t charSet = CPDF_InterForm::GetNativeCharSet(); | 614 uint8_t charSet = CPDF_InterForm::GetNativeCharSet(); |
615 return AddNativeInterFormFont(pFormDict, pDocument, charSet, csNameTag); | 615 return AddNativeInterFormFont(pFormDict, pDocument, charSet, csNameTag); |
616 } | 616 } |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
672 return TRUE; | 672 return TRUE; |
673 } | 673 } |
674 return m_pDict->GetString("S", "P") != "A"; | 674 return m_pDict->GetString("S", "P") != "A"; |
675 } | 675 } |
676 void CPDF_IconFit::GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom) { | 676 void CPDF_IconFit::GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom) { |
677 fLeft = fBottom = 0.5; | 677 fLeft = fBottom = 0.5; |
678 if (m_pDict == NULL) { | 678 if (m_pDict == NULL) { |
679 return; | 679 return; |
680 } | 680 } |
681 CPDF_Array* pA = m_pDict->GetArray("A"); | 681 CPDF_Array* pA = m_pDict->GetArray("A"); |
682 if (pA != NULL) { | 682 if (pA) { |
683 FX_DWORD dwCount = pA->GetCount(); | 683 FX_DWORD dwCount = pA->GetCount(); |
684 if (dwCount > 0) { | 684 if (dwCount > 0) { |
685 fLeft = pA->GetNumber(0); | 685 fLeft = pA->GetNumber(0); |
686 } | 686 } |
687 if (dwCount > 1) { | 687 if (dwCount > 1) { |
688 fBottom = pA->GetNumber(1); | 688 fBottom = pA->GetNumber(1); |
689 } | 689 } |
690 } | 690 } |
691 } | 691 } |
692 FX_BOOL CPDF_IconFit::GetFittingBounds() { | 692 FX_BOOL CPDF_IconFit::GetFittingBounds() { |
(...skipping 25 matching lines...) Expand all Loading... |
718 CPDF_Object* pAttr = pFieldDict->GetElementValue(name); | 718 CPDF_Object* pAttr = pFieldDict->GetElementValue(name); |
719 if (pAttr) { | 719 if (pAttr) { |
720 return pAttr; | 720 return pAttr; |
721 } | 721 } |
722 CPDF_Dictionary* pParent = pFieldDict->GetDict("Parent"); | 722 CPDF_Dictionary* pParent = pFieldDict->GetDict("Parent"); |
723 if (pParent == NULL) { | 723 if (pParent == NULL) { |
724 return NULL; | 724 return NULL; |
725 } | 725 } |
726 return FPDF_GetFieldAttr(pParent, name, nLevel + 1); | 726 return FPDF_GetFieldAttr(pParent, name, nLevel + 1); |
727 } | 727 } |
OLD | NEW |