1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <algorithm> 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fpdfdoc/fpdf_doc.h" 10e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "doc_utils.h" 11e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 12e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstatic const int FPDFDOC_UTILS_MAXRECURSION = 32; 13e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString GetFullName(CPDF_Dictionary* pFieldDict) { 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString full_name; 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pLevel = pFieldDict; 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (pLevel) { 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString short_name = pLevel->GetUnicodeText("T"); 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (short_name != L"") { 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (full_name == L"") { 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann full_name = short_name; 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann full_name = short_name + L"." + full_name; 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pLevel = pLevel->GetDict("Parent"); 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return full_name; 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_DefaultAppearance::HasFont() { 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_csDA.IsEmpty()) { 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_SimpleParser syntax(m_csDA); 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return syntax.FindTagParam("Tf", 2); 36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_ByteString CPDF_DefaultAppearance::GetFontString() { 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csFont; 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_csDA.IsEmpty()) { 40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return csFont; 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_SimpleParser syntax(m_csDA); 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (syntax.FindTagParam("Tf", 2)) { 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csFont += (CFX_ByteString)syntax.GetWord(); 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csFont += " "; 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csFont += (CFX_ByteString)syntax.GetWord(); 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csFont += " "; 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csFont += (CFX_ByteString)syntax.GetWord(); 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return csFont; 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_DefaultAppearance::GetFont(CFX_ByteString& csFontNameTag, 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT& fFontSize) { 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csFontNameTag = ""; 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fFontSize = 0; 56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_csDA.IsEmpty()) { 57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_SimpleParser syntax(m_csDA); 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (syntax.FindTagParam("Tf", 2)) { 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csFontNameTag = (CFX_ByteString)syntax.GetWord(); 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csFontNameTag.Delete(0, 1); 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fFontSize = FX_atof((CFX_ByteString)syntax.GetWord()); 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csFontNameTag = PDF_NameDecode(csFontNameTag); 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_DefaultAppearance::HasColor(FX_BOOL bStrokingOperation) { 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_csDA.IsEmpty()) { 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_SimpleParser syntax(m_csDA); 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) { 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann syntax.SetPos(0); 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) { 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann syntax.SetPos(0); 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4); 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_ByteString CPDF_DefaultAppearance::GetColorString( 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bStrokingOperation) { 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csColor; 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_csDA.IsEmpty()) { 86e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return csColor; 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_SimpleParser syntax(m_csDA); 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) { 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += (CFX_ByteString)syntax.GetWord(); 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += " "; 92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += (CFX_ByteString)syntax.GetWord(); 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return csColor; 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann syntax.SetPos(0); 96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) { 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += (CFX_ByteString)syntax.GetWord(); 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += " "; 99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += (CFX_ByteString)syntax.GetWord(); 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += " "; 101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += (CFX_ByteString)syntax.GetWord(); 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += " "; 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += (CFX_ByteString)syntax.GetWord(); 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return csColor; 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann syntax.SetPos(0); 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) { 108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += (CFX_ByteString)syntax.GetWord(); 109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += " "; 110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += (CFX_ByteString)syntax.GetWord(); 111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += " "; 112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += (CFX_ByteString)syntax.GetWord(); 113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += " "; 114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += (CFX_ByteString)syntax.GetWord(); 115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += " "; 116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csColor += (CFX_ByteString)syntax.GetWord(); 117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return csColor; 119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_DefaultAppearance::GetColor(int& iColorType, 121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fc[4], 122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bStrokingOperation) { 123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iColorType = COLORTYPE_TRANSPARENT; 124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int c = 0; c < 4; c++) { 125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fc[c] = 0; 126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_csDA.IsEmpty()) { 128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_SimpleParser syntax(m_csDA); 131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) { 132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iColorType = COLORTYPE_GRAY; 133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fc[0] = FX_atof((CFX_ByteString)syntax.GetWord()); 134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann syntax.SetPos(0); 137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) { 138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iColorType = COLORTYPE_RGB; 139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fc[0] = FX_atof((CFX_ByteString)syntax.GetWord()); 140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fc[1] = FX_atof((CFX_ByteString)syntax.GetWord()); 141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fc[2] = FX_atof((CFX_ByteString)syntax.GetWord()); 142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann syntax.SetPos(0); 145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) { 146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iColorType = COLORTYPE_CMYK; 147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fc[0] = FX_atof((CFX_ByteString)syntax.GetWord()); 148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fc[1] = FX_atof((CFX_ByteString)syntax.GetWord()); 149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fc[2] = FX_atof((CFX_ByteString)syntax.GetWord()); 150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fc[3] = FX_atof((CFX_ByteString)syntax.GetWord()); 151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_DefaultAppearance::GetColor(FX_ARGB& color, 154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int& iColorType, 155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bStrokingOperation) { 156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann color = 0; 157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iColorType = COLORTYPE_TRANSPARENT; 158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_csDA.IsEmpty()) { 159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_SimpleParser syntax(m_csDA); 162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) { 163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iColorType = COLORTYPE_GRAY; 164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT g = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f; 165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann color = ArgbEncode(255, (int)g, (int)g, (int)g); 166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann syntax.SetPos(0); 169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) { 170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iColorType = COLORTYPE_RGB; 171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT r = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f; 172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT g = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f; 173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT b = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f; 174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann color = ArgbEncode(255, (int)r, (int)g, (int)b); 175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann syntax.SetPos(0); 178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) { 179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iColorType = COLORTYPE_CMYK; 180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT c = FX_atof((CFX_ByteString)syntax.GetWord()); 181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT m = FX_atof((CFX_ByteString)syntax.GetWord()); 182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT y = FX_atof((CFX_ByteString)syntax.GetWord()); 183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT k = FX_atof((CFX_ByteString)syntax.GetWord()); 184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT r = 1.0f - std::min(1.0f, c + k); 185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT g = 1.0f - std::min(1.0f, m + k); 186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT b = 1.0f - std::min(1.0f, y + k); 187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann color = ArgbEncode(255, (int)(r * 255 + 0.5f), (int)(g * 255 + 0.5f), 188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (int)(b * 255 + 0.5f)); 189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_DefaultAppearance::HasTextMatrix() { 192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_csDA.IsEmpty()) { 193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_SimpleParser syntax(m_csDA); 196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return syntax.FindTagParam("Tm", 6); 197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_ByteString CPDF_DefaultAppearance::GetTextMatrixString() { 199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csTM; 200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_csDA.IsEmpty()) { 201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return csTM; 202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_SimpleParser syntax(m_csDA); 204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (syntax.FindTagParam("Tm", 6)) { 205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < 6; i++) { 206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csTM += (CFX_ByteString)syntax.GetWord(); 207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csTM += " "; 208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csTM += (CFX_ByteString)syntax.GetWord(); 210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return csTM; 212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_Matrix CPDF_DefaultAppearance::GetTextMatrix() { 214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix tm; 215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_csDA.IsEmpty()) { 216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return tm; 217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_SimpleParser syntax(m_csDA); 219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (syntax.FindTagParam("Tm", 6)) { 220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT f[6]; 221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < 6; i++) { 222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann f[i] = FX_atof((CFX_ByteString)syntax.GetWord()); 223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tm.Set(f[0], f[1], f[2], f[3], f[4], f[5]); 225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return tm; 227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid InitInterFormDict(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument) { 229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pDocument) { 230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict) { 233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFormDict = new CPDF_Dictionary; 234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD dwObjNum = pDocument->AddIndirectObject(pFormDict); 235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pRoot = pDocument->GetRoot(); 236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pRoot->SetAtReference("AcroForm", pDocument, dwObjNum); 237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csDA; 239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict->KeyExist("DR")) { 240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Font* pFont = NULL; 241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csBaseName, csDefault; 242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t charSet = CPDF_InterForm::GetNativeCharSet(); 243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFont = CPDF_InterForm::AddStandardFont(pDocument, "Helvetica"); 244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pFont) { 245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddInterFormFont(pFormDict, pDocument, pFont, csBaseName); 246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csDefault = csBaseName; 247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (charSet != 0) { 249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet, NULL); 250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFont || csFontName != "Helvetica") { 251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFont = CPDF_InterForm::AddNativeFont(pDocument); 252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pFont) { 253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csBaseName = ""; 254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddInterFormFont(pFormDict, pDocument, pFont, csBaseName); 255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csDefault = csBaseName; 256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pFont) { 260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csDA = "/" + PDF_NameEncode(csDefault) + " 0 Tf"; 261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!csDA.IsEmpty()) { 264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csDA += " "; 265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csDA += "0 g"; 267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict->KeyExist("DA")) { 268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFormDict->SetAtString("DA", csDA); 269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_DWORD CountInterFormFonts(CPDF_Dictionary* pFormDict) { 272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict) { 273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); 276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pDR) { 277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pFonts = pDR->GetDict("Font"); 280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFonts) { 281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD dwCount = 0; 284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (const auto& it : *pFonts) { 285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = it.second; 286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPDF_Dictionary* pDirect = ToDictionary(pObj->GetDirect())) { 290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pDirect->GetString("Type") == "Font") { 291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann dwCount++; 292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return dwCount; 296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, 298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* pDocument, 299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD index, 300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString& csNameTag) { 301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict) { 302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return NULL; 303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); 305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pDR) { 306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return NULL; 307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pFonts = pDR->GetDict("Font"); 309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFonts) { 310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return NULL; 311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD dwCount = 0; 313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (const auto& it : *pFonts) { 314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteString& csKey = it.first; 315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = it.second; 316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); 320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pElement) 321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pElement->GetString("Type") != "Font") 323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (dwCount == index) { 325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csNameTag = csKey; 326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pDocument->LoadFont(pElement); 327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann dwCount++; 329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, 333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* pDocument, 334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csNameTag) { 335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csAlias = PDF_NameDecode(csNameTag); 336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict || csAlias.IsEmpty()) { 337e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return NULL; 338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); 340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pDR) { 341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pFonts = pDR->GetDict("Font"); 344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFonts) { 345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pElement = pFonts->GetDict(csAlias); 348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pElement) { 349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pElement->GetString("Type") == "Font") { 352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pDocument->LoadFont(pElement); 353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, 357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* pDocument, 358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csFontName, 359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString& csNameTag) { 360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict || csFontName.IsEmpty()) { 361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); 364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pDR) { 365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pFonts = pDR->GetDict("Font"); 368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFonts) { 369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (const auto& it : *pFonts) { 372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteString& csKey = it.first; 373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = it.second; 374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); 378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pElement) 379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pElement->GetString("Type") != "Font") 381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Font* pFind = pDocument->LoadFont(pElement); 384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFind) 385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csBaseFont; 388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csBaseFont = pFind->GetBaseFont(); 389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csBaseFont.Remove(' '); 390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csBaseFont == csFontName) { 391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csNameTag = csKey; 392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pFind; 393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict, 398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* pDocument, 399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t charSet, 400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString& csNameTag) { 401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict) { 402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); 405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pDR) { 406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pFonts = pDR->GetDict("Font"); 409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFonts) { 410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (const auto& it : *pFonts) { 413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteString& csKey = it.first; 414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = it.second; 415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); 419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pElement) 420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pElement->GetString("Type") != "Font") 422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Font* pFind = pDocument->LoadFont(pElement); 424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFind) { 425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_SubstFont* pSubst = (CFX_SubstFont*)pFind->GetSubstFont(); 428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pSubst) { 429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pSubst->m_Charset == (int)charSet) { 432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csNameTag = csKey; 433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pFind; 434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict, 439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* pDocument, 440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString& csNameTag) { 441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csNameTag = ""; 442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t charSet = CPDF_InterForm::GetNativeCharSet(); 443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_SubstFont* pSubst; 444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Font* pFont = GetDefaultInterFormFont(pFormDict, pDocument); 445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pFont) { 446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pSubst = (CFX_SubstFont*)pFont->GetSubstFont(); 447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pSubst && pSubst->m_Charset == (int)charSet) { 448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FindInterFormFont(pFormDict, pFont, csNameTag); 449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pFont; 450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return GetNativeInterFormFont(pFormDict, pDocument, charSet, csNameTag); 453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict, 455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CPDF_Font* pFont, 456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString& csNameTag) { 457ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict || !pFont) { 458e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); 461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pDR) { 462e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pFonts = pDR->GetDict("Font"); 465ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFonts) { 466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (const auto& it : *pFonts) { 469ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteString& csKey = it.first; 470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = it.second; 471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 474ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); 475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pElement) 476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pElement->GetString("Type") != "Font") { 478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pFont->GetFontDict() == pElement) { 481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csNameTag = csKey; 482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 483ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 486ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict, 488ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* pDocument, 489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csFontName, 490ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Font*& pFont, 491ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString& csNameTag) { 492ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict) { 493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 494ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); 496ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pDR) { 497ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 498ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 499ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pFonts = pDR->GetDict("Font"); 500ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFonts) { 501ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 502ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csFontName.GetLength() > 0) { 504ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csFontName.Remove(' '); 505ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (const auto& it : *pFonts) { 507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteString& csKey = it.first; 508ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = it.second; 509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 510ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 512ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); 513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pElement) 514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pElement->GetString("Type") != "Font") { 516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFont = pDocument->LoadFont(pElement); 519ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFont) { 520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 521ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csBaseFont; 523ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csBaseFont = pFont->GetBaseFont(); 524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csBaseFont.Remove(' '); 525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csBaseFont == csFontName) { 526ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csNameTag = csKey; 527ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 530ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 531ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 532ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid AddInterFormFont(CPDF_Dictionary*& pFormDict, 533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* pDocument, 534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CPDF_Font* pFont, 535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString& csNameTag) { 536ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFont) { 537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 539ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict) { 540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann InitInterFormDict(pFormDict, pDocument); 541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 542ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csTag; 543ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (FindInterFormFont(pFormDict, pFont, csTag)) { 544ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csNameTag = csTag; 545ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 546ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 547ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict) { 548ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann InitInterFormDict(pFormDict, pDocument); 549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 550ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); 551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pDR) { 552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pDR = new CPDF_Dictionary; 553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFormDict->SetAt("DR", pDR); 554ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 555ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pFonts = pDR->GetDict("Font"); 556ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFonts) { 557ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFonts = new CPDF_Dictionary; 558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pDR->SetAt("Font", pFonts); 559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csNameTag.IsEmpty()) { 561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csNameTag = pFont->GetBaseFont(); 562ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 563ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csNameTag.Remove(' '); 564ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csNameTag = 565ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_InterForm::GenerateNewResourceName(pDR, "Font", 4, csNameTag); 566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFonts->SetAtReference(csNameTag, pDocument, pFont->GetFontDict()); 567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict, 569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* pDocument, 570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t charSet, 571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString& csNameTag) { 572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict) { 573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann InitInterFormDict(pFormDict, pDocument); 574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csTemp; 576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Font* pFont = 577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann GetNativeInterFormFont(pFormDict, pDocument, charSet, csTemp); 578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pFont) { 579ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csNameTag = csTemp; 580e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pFont; 581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet); 583ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!csFontName.IsEmpty()) { 584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (FindInterFormFont(pFormDict, pDocument, csFontName, pFont, csNameTag)) { 585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pFont; 586ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 588ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFont = CPDF_InterForm::AddNativeFont(charSet, pDocument); 589ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pFont) { 590ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddInterFormFont(pFormDict, pDocument, pFont, csNameTag); 591ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 592ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pFont; 593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 594ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict, 595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* pDocument, 596ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString& csNameTag) { 597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t charSet = CPDF_InterForm::GetNativeCharSet(); 598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return AddNativeInterFormFont(pFormDict, pDocument, charSet, csNameTag); 599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 600ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid RemoveInterFormFont(CPDF_Dictionary* pFormDict, const CPDF_Font* pFont) { 601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict || !pFont) { 602ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 603ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csTag; 605ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!FindInterFormFont(pFormDict, pFont, csTag)) { 606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); 609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pFonts = pDR->GetDict("Font"); 610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFonts->RemoveAt(csTag); 611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid RemoveInterFormFont(CPDF_Dictionary* pFormDict, CFX_ByteString csNameTag) { 613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict || csNameTag.IsEmpty()) { 614ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 615ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 616ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); 617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pDR) { 618ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pFonts = pDR->GetDict("Font"); 621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFonts) { 622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFonts->RemoveAt(csNameTag); 625ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 626ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Font* GetDefaultInterFormFont(CPDF_Dictionary* pFormDict, 627ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* pDocument) { 628ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFormDict) { 629ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 630ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 631ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_DefaultAppearance cDA = pFormDict->GetString("DA"); 632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csFontNameTag; 633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fFontSize; 634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann cDA.GetFont(csFontNameTag, fFontSize); 635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return GetInterFormFont(pFormDict, pDocument, csFontNameTag); 636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 637ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_IconFit::ScaleMethod CPDF_IconFit::GetScaleMethod() { 638ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pDict) { 639e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return Always; 640ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 641ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csSW = m_pDict->GetString("SW", "A"); 642ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csSW == "B") { 643ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return Bigger; 644ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 645ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csSW == "S") { 646ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return Smaller; 647ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 648ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csSW == "N") { 649ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return Never; 650ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 651ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return Always; 652ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 653ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_IconFit::IsProportionalScale() { 654ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pDict) { 655ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 656ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 657ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pDict->GetString("S", "P") != "A"; 658ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 659ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_IconFit::GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom) { 660ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fLeft = fBottom = 0.5; 661ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pDict) { 662ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 663ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 664ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pA = m_pDict->GetArray("A"); 665ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pA) { 666ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD dwCount = pA->GetCount(); 667ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (dwCount > 0) { 668ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fLeft = pA->GetNumber(0); 669ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 670ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (dwCount > 1) { 671ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fBottom = pA->GetNumber(1); 672ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 673ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 674ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 675ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_IconFit::GetFittingBounds() { 676ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pDict) { 677ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 678ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 679ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pDict->GetBoolean("FB"); 680ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 681ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid SaveCheckedFieldStatus(CPDF_FormField* pField, 682ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteArray& statusArray) { 683ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iCount = pField->CountControls(); 684ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < iCount; i++) { 685ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FormControl* pControl = pField->GetControl(i); 686ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pControl) { 687ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 688ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 689ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann statusArray.Add(pControl->IsChecked() ? 1 : 0); 690ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 691ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 692ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, 693ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_CHAR* name, 694ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nLevel) { 695ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nLevel > FPDFDOC_UTILS_MAXRECURSION) { 696ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 697ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 698ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFieldDict) { 699ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 700ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 701ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pAttr = pFieldDict->GetElementValue(name); 702ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pAttr) { 703ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pAttr; 704ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 705ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pParent = pFieldDict->GetDict("Parent"); 706ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pParent) { 707ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 708ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 709ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FPDF_GetFieldAttr(pParent, name, nLevel + 1); 710e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 711