| 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 "fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h" | 7 #include "fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h" |
| 8 | 8 |
| 9 #include "core/include/fpdfapi/fpdf_page.h" | 9 #include "core/include/fpdfapi/fpdf_page.h" |
| 10 #include "fpdfsdk/include/fsdk_baseannot.h" | 10 #include "fpdfsdk/include/fsdk_baseannot.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 AddFontToAnnotDict(m_pDefaultFont, m_sDefaultFontName); | 52 AddFontToAnnotDict(m_pDefaultFont, m_sDefaultFontName); |
| 53 } | 53 } |
| 54 } | 54 } |
| 55 | 55 |
| 56 if (nCharset != ANSI_CHARSET) | 56 if (nCharset != ANSI_CHARSET) |
| 57 CPWL_FontMap::Initialize(); | 57 CPWL_FontMap::Initialize(); |
| 58 } | 58 } |
| 59 | 59 |
| 60 void CBA_FontMap::SetDefaultFont(CPDF_Font* pFont, | 60 void CBA_FontMap::SetDefaultFont(CPDF_Font* pFont, |
| 61 const CFX_ByteString& sFontName) { | 61 const CFX_ByteString& sFontName) { |
| 62 ASSERT(pFont != NULL); | 62 ASSERT(pFont); |
| 63 | 63 |
| 64 if (m_pDefaultFont) | 64 if (m_pDefaultFont) |
| 65 return; | 65 return; |
| 66 | 66 |
| 67 m_pDefaultFont = pFont; | 67 m_pDefaultFont = pFont; |
| 68 m_sDefaultFontName = sFontName; | 68 m_sDefaultFontName = sFontName; |
| 69 | 69 |
| 70 int32_t nCharset = DEFAULT_CHARSET; | 70 int32_t nCharset = DEFAULT_CHARSET; |
| 71 if (const CFX_SubstFont* pSubstFont = m_pDefaultFont->GetSubstFont()) | 71 if (const CFX_SubstFont* pSubstFont = m_pDefaultFont->GetSubstFont()) |
| 72 nCharset = pSubstFont->m_Charset; | 72 nCharset = pSubstFont->m_Charset; |
| 73 AddFontData(m_pDefaultFont, m_sDefaultFontName, nCharset); | 73 AddFontData(m_pDefaultFont, m_sDefaultFontName, nCharset); |
| 74 } | 74 } |
| 75 | 75 |
| 76 CPDF_Font* CBA_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias, | 76 CPDF_Font* CBA_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias, |
| 77 int32_t nCharset) { | 77 int32_t nCharset) { |
| 78 ASSERT(m_pAnnotDict != NULL); | |
| 79 | |
| 80 if (m_pAnnotDict->GetStringBy("Subtype") == "Widget") { | 78 if (m_pAnnotDict->GetStringBy("Subtype") == "Widget") { |
| 81 CPDF_Document* pDocument = GetDocument(); | 79 CPDF_Document* pDocument = GetDocument(); |
| 82 ASSERT(pDocument != NULL); | |
| 83 | |
| 84 CPDF_Dictionary* pRootDict = pDocument->GetRoot(); | 80 CPDF_Dictionary* pRootDict = pDocument->GetRoot(); |
| 85 if (!pRootDict) | 81 if (!pRootDict) |
| 86 return NULL; | 82 return NULL; |
| 87 | 83 |
| 88 CPDF_Dictionary* pAcroFormDict = pRootDict->GetDictBy("AcroForm"); | 84 CPDF_Dictionary* pAcroFormDict = pRootDict->GetDictBy("AcroForm"); |
| 89 if (!pAcroFormDict) | 85 if (!pAcroFormDict) |
| 90 return NULL; | 86 return NULL; |
| 91 | 87 |
| 92 CPDF_Dictionary* pDRDict = pAcroFormDict->GetDictBy("DR"); | 88 CPDF_Dictionary* pDRDict = pAcroFormDict->GetDictBy("DR"); |
| 93 if (!pDRDict) | 89 if (!pDRDict) |
| 94 return NULL; | 90 return NULL; |
| 95 | 91 |
| 96 return FindResFontSameCharset(pDRDict, sFontAlias, nCharset); | 92 return FindResFontSameCharset(pDRDict, sFontAlias, nCharset); |
| 97 } | 93 } |
| 98 | 94 |
| 99 return NULL; | 95 return NULL; |
| 100 } | 96 } |
| 101 | 97 |
| 102 CPDF_Document* CBA_FontMap::GetDocument() { | 98 CPDF_Document* CBA_FontMap::GetDocument() { |
| 103 return m_pDocument; | 99 return m_pDocument; |
| 104 } | 100 } |
| 105 | 101 |
| 106 CPDF_Font* CBA_FontMap::FindResFontSameCharset(CPDF_Dictionary* pResDict, | 102 CPDF_Font* CBA_FontMap::FindResFontSameCharset(CPDF_Dictionary* pResDict, |
| 107 CFX_ByteString& sFontAlias, | 103 CFX_ByteString& sFontAlias, |
| 108 int32_t nCharset) { | 104 int32_t nCharset) { |
| 109 if (!pResDict) | 105 if (!pResDict) |
| 110 return NULL; | 106 return NULL; |
| 111 | 107 |
| 112 CPDF_Document* pDocument = GetDocument(); | |
| 113 ASSERT(pDocument != NULL); | |
| 114 | |
| 115 CPDF_Dictionary* pFonts = pResDict->GetDictBy("Font"); | 108 CPDF_Dictionary* pFonts = pResDict->GetDictBy("Font"); |
| 116 if (!pFonts) | 109 if (!pFonts) |
| 117 return NULL; | 110 return NULL; |
| 118 | 111 |
| 112 CPDF_Document* pDocument = GetDocument(); |
| 119 CPDF_Font* pFind = NULL; | 113 CPDF_Font* pFind = NULL; |
| 120 | |
| 121 for (const auto& it : *pFonts) { | 114 for (const auto& it : *pFonts) { |
| 122 const CFX_ByteString& csKey = it.first; | 115 const CFX_ByteString& csKey = it.first; |
| 123 CPDF_Object* pObj = it.second; | 116 CPDF_Object* pObj = it.second; |
| 124 if (!pObj) | 117 if (!pObj) |
| 125 continue; | 118 continue; |
| 126 | 119 |
| 127 CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); | 120 CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); |
| 128 if (!pElement) | 121 if (!pElement) |
| 129 continue; | 122 continue; |
| 130 if (pElement->GetStringBy("Type") != "Font") | 123 if (pElement->GetStringBy("Type") != "Font") |
| (...skipping 16 matching lines...) Expand all Loading... |
| 147 void CBA_FontMap::AddedFont(CPDF_Font* pFont, | 140 void CBA_FontMap::AddedFont(CPDF_Font* pFont, |
| 148 const CFX_ByteString& sFontAlias) { | 141 const CFX_ByteString& sFontAlias) { |
| 149 AddFontToAnnotDict(pFont, sFontAlias); | 142 AddFontToAnnotDict(pFont, sFontAlias); |
| 150 } | 143 } |
| 151 | 144 |
| 152 void CBA_FontMap::AddFontToAnnotDict(CPDF_Font* pFont, | 145 void CBA_FontMap::AddFontToAnnotDict(CPDF_Font* pFont, |
| 153 const CFX_ByteString& sAlias) { | 146 const CFX_ByteString& sAlias) { |
| 154 if (!pFont) | 147 if (!pFont) |
| 155 return; | 148 return; |
| 156 | 149 |
| 157 ASSERT(m_pAnnotDict != NULL); | |
| 158 ASSERT(m_pDocument != NULL); | |
| 159 | |
| 160 CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDictBy("AP"); | 150 CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDictBy("AP"); |
| 161 | 151 |
| 162 if (!pAPDict) { | 152 if (!pAPDict) { |
| 163 pAPDict = new CPDF_Dictionary; | 153 pAPDict = new CPDF_Dictionary; |
| 164 m_pAnnotDict->SetAt("AP", pAPDict); | 154 m_pAnnotDict->SetAt("AP", pAPDict); |
| 165 } | 155 } |
| 166 | 156 |
| 167 // to avoid checkbox and radiobutton | 157 // to avoid checkbox and radiobutton |
| 168 CPDF_Object* pObject = pAPDict->GetElement(m_sAPType); | 158 CPDF_Object* pObject = pAPDict->GetElement(m_sAPType); |
| 169 if (ToDictionary(pObject)) | 159 if (ToDictionary(pObject)) |
| (...skipping 28 matching lines...) Expand all Loading... |
| 198 pStreamResList->SetAtReference("Font", m_pDocument, objnum); | 188 pStreamResList->SetAtReference("Font", m_pDocument, objnum); |
| 199 } | 189 } |
| 200 if (!pStreamResFontList->KeyExist(sAlias)) | 190 if (!pStreamResFontList->KeyExist(sAlias)) |
| 201 pStreamResFontList->SetAtReference(sAlias, m_pDocument, | 191 pStreamResFontList->SetAtReference(sAlias, m_pDocument, |
| 202 pFont->GetFontDict()); | 192 pFont->GetFontDict()); |
| 203 } | 193 } |
| 204 } | 194 } |
| 205 } | 195 } |
| 206 | 196 |
| 207 CPDF_Font* CBA_FontMap::GetAnnotDefaultFont(CFX_ByteString& sAlias) { | 197 CPDF_Font* CBA_FontMap::GetAnnotDefaultFont(CFX_ByteString& sAlias) { |
| 208 ASSERT(m_pAnnotDict != NULL); | |
| 209 ASSERT(m_pDocument != NULL); | |
| 210 | |
| 211 CPDF_Dictionary* pAcroFormDict = NULL; | 198 CPDF_Dictionary* pAcroFormDict = NULL; |
| 212 | 199 |
| 213 FX_BOOL bWidget = (m_pAnnotDict->GetStringBy("Subtype") == "Widget"); | 200 FX_BOOL bWidget = (m_pAnnotDict->GetStringBy("Subtype") == "Widget"); |
| 214 | 201 |
| 215 if (bWidget) { | 202 if (bWidget) { |
| 216 if (CPDF_Dictionary* pRootDict = m_pDocument->GetRoot()) | 203 if (CPDF_Dictionary* pRootDict = m_pDocument->GetRoot()) |
| 217 pAcroFormDict = pRootDict->GetDictBy("AcroForm"); | 204 pAcroFormDict = pRootDict->GetDictBy("AcroForm"); |
| 218 } | 205 } |
| 219 | 206 |
| 220 CFX_ByteString sDA; | 207 CFX_ByteString sDA; |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 | 250 |
| 264 return pFontDict ? m_pDocument->LoadFont(pFontDict) : nullptr; | 251 return pFontDict ? m_pDocument->LoadFont(pFontDict) : nullptr; |
| 265 } | 252 } |
| 266 | 253 |
| 267 void CBA_FontMap::SetAPType(const CFX_ByteString& sAPType) { | 254 void CBA_FontMap::SetAPType(const CFX_ByteString& sAPType) { |
| 268 m_sAPType = sAPType; | 255 m_sAPType = sAPType; |
| 269 | 256 |
| 270 Reset(); | 257 Reset(); |
| 271 Initialize(); | 258 Initialize(); |
| 272 } | 259 } |
| OLD | NEW |