| Index: core/src/fpdfdoc/doc_utils.cpp
|
| diff --git a/core/src/fpdfdoc/doc_utils.cpp b/core/src/fpdfdoc/doc_utils.cpp
|
| index 96d2ccf689664dcea2d910c5d39f6a76110c5dc4..1ed0017078ee399a4cd03a347400ef237533d073 100644
|
| --- a/core/src/fpdfdoc/doc_utils.cpp
|
| +++ b/core/src/fpdfdoc/doc_utils.cpp
|
| @@ -9,724 +9,732 @@
|
|
|
| static const int FPDFDOC_UTILS_MAXRECURSION = 32;
|
|
|
| -CFX_WideString GetFullName(CPDF_Dictionary* pFieldDict)
|
| -{
|
| - CFX_WideString full_name;
|
| - CPDF_Dictionary* pLevel = pFieldDict;
|
| - while (pLevel) {
|
| - CFX_WideString short_name = pLevel->GetUnicodeText("T");
|
| - if (short_name != L"") {
|
| - if (full_name == L"") {
|
| - full_name = short_name;
|
| - } else {
|
| - full_name = short_name + L"." + full_name;
|
| - }
|
| - }
|
| - pLevel = pLevel->GetDict("Parent");
|
| - }
|
| - return full_name;
|
| -}
|
| -FX_BOOL CPDF_DefaultAppearance::HasFont()
|
| -{
|
| - if (m_csDA.IsEmpty()) {
|
| - return FALSE;
|
| - }
|
| - CPDF_SimpleParser syntax(m_csDA);
|
| - return syntax.FindTagParam("Tf", 2);
|
| +CFX_WideString GetFullName(CPDF_Dictionary* pFieldDict) {
|
| + CFX_WideString full_name;
|
| + CPDF_Dictionary* pLevel = pFieldDict;
|
| + while (pLevel) {
|
| + CFX_WideString short_name = pLevel->GetUnicodeText("T");
|
| + if (short_name != L"") {
|
| + if (full_name == L"") {
|
| + full_name = short_name;
|
| + } else {
|
| + full_name = short_name + L"." + full_name;
|
| + }
|
| + }
|
| + pLevel = pLevel->GetDict("Parent");
|
| + }
|
| + return full_name;
|
| +}
|
| +FX_BOOL CPDF_DefaultAppearance::HasFont() {
|
| + if (m_csDA.IsEmpty()) {
|
| + return FALSE;
|
| + }
|
| + CPDF_SimpleParser syntax(m_csDA);
|
| + return syntax.FindTagParam("Tf", 2);
|
| }
|
| -CFX_ByteString CPDF_DefaultAppearance::GetFontString()
|
| -{
|
| - CFX_ByteString csFont;
|
| - if (m_csDA.IsEmpty()) {
|
| - return csFont;
|
| - }
|
| - CPDF_SimpleParser syntax(m_csDA);
|
| - if (syntax.FindTagParam("Tf", 2)) {
|
| - csFont += (CFX_ByteString)syntax.GetWord();
|
| - csFont += " ";
|
| - csFont += (CFX_ByteString)syntax.GetWord();
|
| - csFont += " ";
|
| - csFont += (CFX_ByteString)syntax.GetWord();
|
| - }
|
| +CFX_ByteString CPDF_DefaultAppearance::GetFontString() {
|
| + CFX_ByteString csFont;
|
| + if (m_csDA.IsEmpty()) {
|
| return csFont;
|
| -}
|
| -void CPDF_DefaultAppearance::GetFont(CFX_ByteString& csFontNameTag, FX_FLOAT& fFontSize)
|
| -{
|
| - csFontNameTag = "";
|
| - fFontSize = 0;
|
| - if (m_csDA.IsEmpty()) {
|
| - return;
|
| - }
|
| - CPDF_SimpleParser syntax(m_csDA);
|
| - if (syntax.FindTagParam("Tf", 2)) {
|
| - csFontNameTag = (CFX_ByteString)syntax.GetWord();
|
| - csFontNameTag.Delete(0, 1);
|
| - fFontSize = FX_atof((CFX_ByteString)syntax.GetWord());
|
| - }
|
| - csFontNameTag = PDF_NameDecode(csFontNameTag);
|
| -}
|
| -FX_BOOL CPDF_DefaultAppearance::HasColor(FX_BOOL bStrokingOperation)
|
| -{
|
| - if (m_csDA.IsEmpty()) {
|
| - return FALSE;
|
| - }
|
| - CPDF_SimpleParser syntax(m_csDA);
|
| - if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
|
| - return TRUE;
|
| - }
|
| - syntax.SetPos(0);
|
| - if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
|
| - return TRUE;
|
| - }
|
| - syntax.SetPos(0);
|
| - return syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4);
|
| -}
|
| -CFX_ByteString CPDF_DefaultAppearance::GetColorString(FX_BOOL bStrokingOperation)
|
| -{
|
| - CFX_ByteString csColor;
|
| - if (m_csDA.IsEmpty()) {
|
| - return csColor;
|
| - }
|
| - CPDF_SimpleParser syntax(m_csDA);
|
| - if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
|
| - csColor += (CFX_ByteString)syntax.GetWord();
|
| - csColor += " ";
|
| - csColor += (CFX_ByteString)syntax.GetWord();
|
| - return csColor;
|
| - }
|
| - syntax.SetPos(0);
|
| - if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
|
| - csColor += (CFX_ByteString)syntax.GetWord();
|
| - csColor += " ";
|
| - csColor += (CFX_ByteString)syntax.GetWord();
|
| - csColor += " ";
|
| - csColor += (CFX_ByteString)syntax.GetWord();
|
| - csColor += " ";
|
| - csColor += (CFX_ByteString)syntax.GetWord();
|
| - return csColor;
|
| - }
|
| - syntax.SetPos(0);
|
| - if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) {
|
| - csColor += (CFX_ByteString)syntax.GetWord();
|
| - csColor += " ";
|
| - csColor += (CFX_ByteString)syntax.GetWord();
|
| - csColor += " ";
|
| - csColor += (CFX_ByteString)syntax.GetWord();
|
| - csColor += " ";
|
| - csColor += (CFX_ByteString)syntax.GetWord();
|
| - csColor += " ";
|
| - csColor += (CFX_ByteString)syntax.GetWord();
|
| - }
|
| + }
|
| + CPDF_SimpleParser syntax(m_csDA);
|
| + if (syntax.FindTagParam("Tf", 2)) {
|
| + csFont += (CFX_ByteString)syntax.GetWord();
|
| + csFont += " ";
|
| + csFont += (CFX_ByteString)syntax.GetWord();
|
| + csFont += " ";
|
| + csFont += (CFX_ByteString)syntax.GetWord();
|
| + }
|
| + return csFont;
|
| +}
|
| +void CPDF_DefaultAppearance::GetFont(CFX_ByteString& csFontNameTag,
|
| + FX_FLOAT& fFontSize) {
|
| + csFontNameTag = "";
|
| + fFontSize = 0;
|
| + if (m_csDA.IsEmpty()) {
|
| + return;
|
| + }
|
| + CPDF_SimpleParser syntax(m_csDA);
|
| + if (syntax.FindTagParam("Tf", 2)) {
|
| + csFontNameTag = (CFX_ByteString)syntax.GetWord();
|
| + csFontNameTag.Delete(0, 1);
|
| + fFontSize = FX_atof((CFX_ByteString)syntax.GetWord());
|
| + }
|
| + csFontNameTag = PDF_NameDecode(csFontNameTag);
|
| +}
|
| +FX_BOOL CPDF_DefaultAppearance::HasColor(FX_BOOL bStrokingOperation) {
|
| + if (m_csDA.IsEmpty()) {
|
| + return FALSE;
|
| + }
|
| + CPDF_SimpleParser syntax(m_csDA);
|
| + if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
|
| + return TRUE;
|
| + }
|
| + syntax.SetPos(0);
|
| + if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
|
| + return TRUE;
|
| + }
|
| + syntax.SetPos(0);
|
| + return syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4);
|
| +}
|
| +CFX_ByteString CPDF_DefaultAppearance::GetColorString(
|
| + FX_BOOL bStrokingOperation) {
|
| + CFX_ByteString csColor;
|
| + if (m_csDA.IsEmpty()) {
|
| + return csColor;
|
| + }
|
| + CPDF_SimpleParser syntax(m_csDA);
|
| + if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
|
| + csColor += (CFX_ByteString)syntax.GetWord();
|
| + csColor += " ";
|
| + csColor += (CFX_ByteString)syntax.GetWord();
|
| return csColor;
|
| + }
|
| + syntax.SetPos(0);
|
| + if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
|
| + csColor += (CFX_ByteString)syntax.GetWord();
|
| + csColor += " ";
|
| + csColor += (CFX_ByteString)syntax.GetWord();
|
| + csColor += " ";
|
| + csColor += (CFX_ByteString)syntax.GetWord();
|
| + csColor += " ";
|
| + csColor += (CFX_ByteString)syntax.GetWord();
|
| + return csColor;
|
| + }
|
| + syntax.SetPos(0);
|
| + if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) {
|
| + csColor += (CFX_ByteString)syntax.GetWord();
|
| + csColor += " ";
|
| + csColor += (CFX_ByteString)syntax.GetWord();
|
| + csColor += " ";
|
| + csColor += (CFX_ByteString)syntax.GetWord();
|
| + csColor += " ";
|
| + csColor += (CFX_ByteString)syntax.GetWord();
|
| + csColor += " ";
|
| + csColor += (CFX_ByteString)syntax.GetWord();
|
| + }
|
| + return csColor;
|
| +}
|
| +void CPDF_DefaultAppearance::GetColor(int& iColorType,
|
| + FX_FLOAT fc[4],
|
| + FX_BOOL bStrokingOperation) {
|
| + iColorType = COLORTYPE_TRANSPARENT;
|
| + for (int c = 0; c < 4; c++) {
|
| + fc[c] = 0;
|
| + }
|
| + if (m_csDA.IsEmpty()) {
|
| + return;
|
| + }
|
| + CPDF_SimpleParser syntax(m_csDA);
|
| + if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
|
| + iColorType = COLORTYPE_GRAY;
|
| + fc[0] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| + return;
|
| + }
|
| + syntax.SetPos(0);
|
| + if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
|
| + iColorType = COLORTYPE_RGB;
|
| + fc[0] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| + fc[1] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| + fc[2] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| + return;
|
| + }
|
| + syntax.SetPos(0);
|
| + if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) {
|
| + iColorType = COLORTYPE_CMYK;
|
| + fc[0] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| + fc[1] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| + fc[2] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| + fc[3] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| + }
|
| +}
|
| +void CPDF_DefaultAppearance::GetColor(FX_ARGB& color,
|
| + int& iColorType,
|
| + FX_BOOL bStrokingOperation) {
|
| + color = 0;
|
| + iColorType = COLORTYPE_TRANSPARENT;
|
| + if (m_csDA.IsEmpty()) {
|
| + return;
|
| + }
|
| + CPDF_SimpleParser syntax(m_csDA);
|
| + if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
|
| + iColorType = COLORTYPE_GRAY;
|
| + FX_FLOAT g = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
|
| + color = ArgbEncode(255, (int)g, (int)g, (int)g);
|
| + return;
|
| + }
|
| + syntax.SetPos(0);
|
| + if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
|
| + iColorType = COLORTYPE_RGB;
|
| + FX_FLOAT r = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
|
| + FX_FLOAT g = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
|
| + FX_FLOAT b = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
|
| + color = ArgbEncode(255, (int)r, (int)g, (int)b);
|
| + return;
|
| + }
|
| + syntax.SetPos(0);
|
| + if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) {
|
| + iColorType = COLORTYPE_CMYK;
|
| + FX_FLOAT c = FX_atof((CFX_ByteString)syntax.GetWord());
|
| + FX_FLOAT m = FX_atof((CFX_ByteString)syntax.GetWord());
|
| + FX_FLOAT y = FX_atof((CFX_ByteString)syntax.GetWord());
|
| + FX_FLOAT k = FX_atof((CFX_ByteString)syntax.GetWord());
|
| + FX_FLOAT r = 1.0f - FX_MIN(1.0f, c + k);
|
| + FX_FLOAT g = 1.0f - FX_MIN(1.0f, m + k);
|
| + FX_FLOAT b = 1.0f - FX_MIN(1.0f, y + k);
|
| + color = ArgbEncode(255, (int)(r * 255 + 0.5f), (int)(g * 255 + 0.5f),
|
| + (int)(b * 255 + 0.5f));
|
| + }
|
| +}
|
| +FX_BOOL CPDF_DefaultAppearance::HasTextMatrix() {
|
| + if (m_csDA.IsEmpty()) {
|
| + return FALSE;
|
| + }
|
| + CPDF_SimpleParser syntax(m_csDA);
|
| + return syntax.FindTagParam("Tm", 6);
|
| }
|
| -void CPDF_DefaultAppearance::GetColor(int& iColorType, FX_FLOAT fc[4], FX_BOOL bStrokingOperation)
|
| -{
|
| - iColorType = COLORTYPE_TRANSPARENT;
|
| - for (int c = 0; c < 4; c ++) {
|
| - fc[c] = 0;
|
| - }
|
| - if (m_csDA.IsEmpty()) {
|
| - return;
|
| - }
|
| - CPDF_SimpleParser syntax(m_csDA);
|
| - if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
|
| - iColorType = COLORTYPE_GRAY;
|
| - fc[0] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| - return;
|
| - }
|
| - syntax.SetPos(0);
|
| - if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
|
| - iColorType = COLORTYPE_RGB;
|
| - fc[0] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| - fc[1] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| - fc[2] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| - return;
|
| - }
|
| - syntax.SetPos(0);
|
| - if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) {
|
| - iColorType = COLORTYPE_CMYK;
|
| - fc[0] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| - fc[1] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| - fc[2] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| - fc[3] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| - }
|
| -}
|
| -void CPDF_DefaultAppearance::GetColor(FX_ARGB& color, int& iColorType, FX_BOOL bStrokingOperation)
|
| -{
|
| - color = 0;
|
| - iColorType = COLORTYPE_TRANSPARENT;
|
| - if (m_csDA.IsEmpty()) {
|
| - return;
|
| - }
|
| - CPDF_SimpleParser syntax(m_csDA);
|
| - if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
|
| - iColorType = COLORTYPE_GRAY;
|
| - FX_FLOAT g = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
|
| - color = ArgbEncode(255, (int)g, (int)g, (int)g);
|
| - return;
|
| - }
|
| - syntax.SetPos(0);
|
| - if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
|
| - iColorType = COLORTYPE_RGB;
|
| - FX_FLOAT r = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
|
| - FX_FLOAT g = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
|
| - FX_FLOAT b = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
|
| - color = ArgbEncode(255, (int)r, (int)g, (int)b);
|
| - return;
|
| - }
|
| - syntax.SetPos(0);
|
| - if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) {
|
| - iColorType = COLORTYPE_CMYK;
|
| - FX_FLOAT c = FX_atof((CFX_ByteString)syntax.GetWord());
|
| - FX_FLOAT m = FX_atof((CFX_ByteString)syntax.GetWord());
|
| - FX_FLOAT y = FX_atof((CFX_ByteString)syntax.GetWord());
|
| - FX_FLOAT k = FX_atof((CFX_ByteString)syntax.GetWord());
|
| - FX_FLOAT r = 1.0f - FX_MIN(1.0f, c + k);
|
| - FX_FLOAT g = 1.0f - FX_MIN(1.0f, m + k);
|
| - FX_FLOAT b = 1.0f - FX_MIN(1.0f, y + k);
|
| - color = ArgbEncode(255, (int)(r * 255 + 0.5f), (int)(g * 255 + 0.5f), (int)(b * 255 + 0.5f));
|
| - }
|
| -}
|
| -FX_BOOL CPDF_DefaultAppearance::HasTextMatrix()
|
| -{
|
| - if (m_csDA.IsEmpty()) {
|
| - return FALSE;
|
| - }
|
| - CPDF_SimpleParser syntax(m_csDA);
|
| - return syntax.FindTagParam("Tm", 6);
|
| -}
|
| -CFX_ByteString CPDF_DefaultAppearance::GetTextMatrixString()
|
| -{
|
| - CFX_ByteString csTM;
|
| - if (m_csDA.IsEmpty()) {
|
| - return csTM;
|
| - }
|
| - CPDF_SimpleParser syntax(m_csDA);
|
| - if (syntax.FindTagParam("Tm", 6)) {
|
| - for (int i = 0; i < 6; i ++) {
|
| - csTM += (CFX_ByteString)syntax.GetWord();
|
| - csTM += " ";
|
| - }
|
| - csTM += (CFX_ByteString)syntax.GetWord();
|
| - }
|
| +CFX_ByteString CPDF_DefaultAppearance::GetTextMatrixString() {
|
| + CFX_ByteString csTM;
|
| + if (m_csDA.IsEmpty()) {
|
| return csTM;
|
| -}
|
| -CFX_AffineMatrix CPDF_DefaultAppearance::GetTextMatrix()
|
| -{
|
| - CFX_AffineMatrix tm;
|
| - if (m_csDA.IsEmpty()) {
|
| - return tm;
|
| - }
|
| - CPDF_SimpleParser syntax(m_csDA);
|
| - if (syntax.FindTagParam("Tm", 6)) {
|
| - FX_FLOAT f[6];
|
| - for (int i = 0; i < 6; i ++) {
|
| - f[i] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| - }
|
| - tm.Set(f[0], f[1], f[2], f[3], f[4], f[5]);
|
| - }
|
| + }
|
| + CPDF_SimpleParser syntax(m_csDA);
|
| + if (syntax.FindTagParam("Tm", 6)) {
|
| + for (int i = 0; i < 6; i++) {
|
| + csTM += (CFX_ByteString)syntax.GetWord();
|
| + csTM += " ";
|
| + }
|
| + csTM += (CFX_ByteString)syntax.GetWord();
|
| + }
|
| + return csTM;
|
| +}
|
| +CFX_AffineMatrix CPDF_DefaultAppearance::GetTextMatrix() {
|
| + CFX_AffineMatrix tm;
|
| + if (m_csDA.IsEmpty()) {
|
| return tm;
|
| -}
|
| -void InitInterFormDict(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument)
|
| -{
|
| - if (pDocument == NULL) {
|
| - return;
|
| - }
|
| + }
|
| + CPDF_SimpleParser syntax(m_csDA);
|
| + if (syntax.FindTagParam("Tm", 6)) {
|
| + FX_FLOAT f[6];
|
| + for (int i = 0; i < 6; i++) {
|
| + f[i] = FX_atof((CFX_ByteString)syntax.GetWord());
|
| + }
|
| + tm.Set(f[0], f[1], f[2], f[3], f[4], f[5]);
|
| + }
|
| + return tm;
|
| +}
|
| +void InitInterFormDict(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument) {
|
| + if (pDocument == NULL) {
|
| + return;
|
| + }
|
| + if (pFormDict == NULL) {
|
| + pFormDict = CPDF_Dictionary::Create();
|
| if (pFormDict == NULL) {
|
| - pFormDict = CPDF_Dictionary::Create();
|
| - if (pFormDict == NULL) {
|
| - return;
|
| - }
|
| - FX_DWORD dwObjNum = pDocument->AddIndirectObject(pFormDict);
|
| - CPDF_Dictionary* pRoot = pDocument->GetRoot();
|
| - pRoot->SetAtReference("AcroForm", pDocument, dwObjNum);
|
| - }
|
| - CFX_ByteString csDA;
|
| - if (!pFormDict->KeyExist("DR")) {
|
| - CPDF_Font* pFont = NULL;
|
| - CFX_ByteString csBaseName, csDefault;
|
| - uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
|
| - pFont = CPDF_InterForm::AddStandardFont(pDocument, "Helvetica");
|
| - if (pFont != NULL) {
|
| - AddInterFormFont(pFormDict, pDocument, pFont, csBaseName);
|
| - csDefault = csBaseName;
|
| - }
|
| - if (charSet != 0) {
|
| - CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet, NULL);
|
| - if (pFont == NULL || csFontName != "Helvetica") {
|
| - pFont = CPDF_InterForm::AddNativeFont(pDocument);
|
| - if (pFont != NULL) {
|
| - csBaseName = "";
|
| - AddInterFormFont(pFormDict, pDocument, pFont, csBaseName);
|
| - csDefault = csBaseName;
|
| - }
|
| - }
|
| - }
|
| - if (pFont != NULL) {
|
| - csDA = "/" + PDF_NameEncode(csDefault) + " 0 Tf";
|
| - }
|
| - }
|
| - if (!csDA.IsEmpty()) {
|
| - csDA += " ";
|
| - }
|
| - csDA += "0 g";
|
| - if (!pFormDict->KeyExist("DA")) {
|
| - pFormDict->SetAtString("DA", csDA);
|
| - }
|
| -}
|
| -FX_DWORD CountInterFormFonts(CPDF_Dictionary* pFormDict)
|
| -{
|
| - if (pFormDict == NULL) {
|
| - return 0;
|
| - }
|
| - CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| - if (pDR == NULL) {
|
| - return 0;
|
| - }
|
| - CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| - if (pFonts == NULL) {
|
| - return 0;
|
| - }
|
| - FX_DWORD dwCount = 0;
|
| - FX_POSITION pos = pFonts->GetStartPos();
|
| - while (pos) {
|
| - CPDF_Object* pObj = NULL;
|
| - CFX_ByteString csKey;
|
| - pObj = pFonts->GetNextElement(pos, csKey);
|
| - if (pObj == NULL) {
|
| - continue;
|
| - }
|
| - CPDF_Object* pDirect = pObj->GetDirect();
|
| - if (pDirect != NULL && pDirect->GetType() == PDFOBJ_DICTIONARY) {
|
| - if (((CPDF_Dictionary*)pDirect)->GetString("Type") == "Font") {
|
| - dwCount ++;
|
| - }
|
| - }
|
| - }
|
| - return dwCount;
|
| -}
|
| -CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, FX_DWORD index, CFX_ByteString& csNameTag)
|
| -{
|
| - if (pFormDict == NULL) {
|
| - return NULL;
|
| + return;
|
| + }
|
| + FX_DWORD dwObjNum = pDocument->AddIndirectObject(pFormDict);
|
| + CPDF_Dictionary* pRoot = pDocument->GetRoot();
|
| + pRoot->SetAtReference("AcroForm", pDocument, dwObjNum);
|
| + }
|
| + CFX_ByteString csDA;
|
| + if (!pFormDict->KeyExist("DR")) {
|
| + CPDF_Font* pFont = NULL;
|
| + CFX_ByteString csBaseName, csDefault;
|
| + uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
|
| + pFont = CPDF_InterForm::AddStandardFont(pDocument, "Helvetica");
|
| + if (pFont != NULL) {
|
| + AddInterFormFont(pFormDict, pDocument, pFont, csBaseName);
|
| + csDefault = csBaseName;
|
| }
|
| - CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| - if (pDR == NULL) {
|
| - return NULL;
|
| - }
|
| - CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| - if (pFonts == NULL) {
|
| - return NULL;
|
| - }
|
| - FX_DWORD dwCount = 0;
|
| - FX_POSITION pos = pFonts->GetStartPos();
|
| - while (pos) {
|
| - CPDF_Object* pObj = NULL;
|
| - CFX_ByteString csKey;
|
| - pObj = pFonts->GetNextElement(pos, csKey);
|
| - if (pObj == NULL) {
|
| - continue;
|
| - }
|
| - CPDF_Object* pDirect = pObj->GetDirect();
|
| - if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
|
| - continue;
|
| - }
|
| - CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
|
| - if (pElement->GetString("Type") != "Font") {
|
| - continue;
|
| - }
|
| - if (dwCount == index) {
|
| - csNameTag = csKey;
|
| - return pDocument->LoadFont(pElement);
|
| + if (charSet != 0) {
|
| + CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet, NULL);
|
| + if (pFont == NULL || csFontName != "Helvetica") {
|
| + pFont = CPDF_InterForm::AddNativeFont(pDocument);
|
| + if (pFont != NULL) {
|
| + csBaseName = "";
|
| + AddInterFormFont(pFormDict, pDocument, pFont, csBaseName);
|
| + csDefault = csBaseName;
|
| }
|
| - dwCount ++;
|
| + }
|
| }
|
| + if (pFont != NULL) {
|
| + csDA = "/" + PDF_NameEncode(csDefault) + " 0 Tf";
|
| + }
|
| + }
|
| + if (!csDA.IsEmpty()) {
|
| + csDA += " ";
|
| + }
|
| + csDA += "0 g";
|
| + if (!pFormDict->KeyExist("DA")) {
|
| + pFormDict->SetAtString("DA", csDA);
|
| + }
|
| +}
|
| +FX_DWORD CountInterFormFonts(CPDF_Dictionary* pFormDict) {
|
| + if (pFormDict == NULL) {
|
| + return 0;
|
| + }
|
| + CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| + if (pDR == NULL) {
|
| + return 0;
|
| + }
|
| + CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| + if (pFonts == NULL) {
|
| + return 0;
|
| + }
|
| + FX_DWORD dwCount = 0;
|
| + FX_POSITION pos = pFonts->GetStartPos();
|
| + while (pos) {
|
| + CPDF_Object* pObj = NULL;
|
| + CFX_ByteString csKey;
|
| + pObj = pFonts->GetNextElement(pos, csKey);
|
| + if (pObj == NULL) {
|
| + continue;
|
| + }
|
| + CPDF_Object* pDirect = pObj->GetDirect();
|
| + if (pDirect != NULL && pDirect->GetType() == PDFOBJ_DICTIONARY) {
|
| + if (((CPDF_Dictionary*)pDirect)->GetString("Type") == "Font") {
|
| + dwCount++;
|
| + }
|
| + }
|
| + }
|
| + return dwCount;
|
| +}
|
| +CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict,
|
| + CPDF_Document* pDocument,
|
| + FX_DWORD index,
|
| + CFX_ByteString& csNameTag) {
|
| + if (pFormDict == NULL) {
|
| return NULL;
|
| -}
|
| -CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, CFX_ByteString csNameTag)
|
| -{
|
| - CFX_ByteString csAlias = PDF_NameDecode(csNameTag);
|
| - if (pFormDict == NULL || csAlias.IsEmpty()) {
|
| - return NULL;
|
| - }
|
| - CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| - if (pDR == NULL) {
|
| - return NULL;
|
| - }
|
| - CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| - if (pFonts == NULL) {
|
| - return NULL;
|
| - }
|
| - CPDF_Dictionary* pElement = pFonts->GetDict(csAlias);
|
| - if (pElement == NULL) {
|
| - return NULL;
|
| - }
|
| - if (pElement->GetString("Type") == "Font") {
|
| - return pDocument->LoadFont(pElement);
|
| - }
|
| + }
|
| + CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| + if (pDR == NULL) {
|
| return NULL;
|
| -}
|
| -CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, CFX_ByteString csFontName, CFX_ByteString& csNameTag)
|
| -{
|
| - if (pFormDict == NULL || csFontName.IsEmpty()) {
|
| - return NULL;
|
| - }
|
| - CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| - if (pDR == NULL) {
|
| - return NULL;
|
| - }
|
| - CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| - if (pFonts == NULL) {
|
| - return NULL;
|
| - }
|
| - FX_POSITION pos = pFonts->GetStartPos();
|
| - while (pos) {
|
| - CPDF_Object* pObj = NULL;
|
| - CFX_ByteString csKey;
|
| - pObj = pFonts->GetNextElement(pos, csKey);
|
| - if (pObj == NULL) {
|
| - continue;
|
| - }
|
| - CPDF_Object* pDirect = pObj->GetDirect();
|
| - if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
|
| - continue;
|
| - }
|
| - CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
|
| - if (pElement->GetString("Type") != "Font") {
|
| - continue;
|
| - }
|
| - CPDF_Font* pFind = pDocument->LoadFont(pElement);
|
| - if (pFind == NULL) {
|
| - continue;
|
| - }
|
| - CFX_ByteString csBaseFont;
|
| - csBaseFont = pFind->GetBaseFont();
|
| - csBaseFont.Remove(' ');
|
| - if (csBaseFont == csFontName) {
|
| - csNameTag = csKey;
|
| - return pFind;
|
| - }
|
| - }
|
| + }
|
| + CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| + if (pFonts == NULL) {
|
| return NULL;
|
| -}
|
| -CPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, uint8_t charSet, CFX_ByteString& csNameTag)
|
| -{
|
| - if (pFormDict == NULL) {
|
| - return NULL;
|
| - }
|
| - CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| - if (pDR == NULL) {
|
| - return NULL;
|
| - }
|
| - CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| - if (pFonts == NULL) {
|
| - return NULL;
|
| - }
|
| - FX_POSITION pos = pFonts->GetStartPos();
|
| - while (pos) {
|
| - CPDF_Object* pObj = NULL;
|
| - CFX_ByteString csKey;
|
| - pObj = pFonts->GetNextElement(pos, csKey);
|
| - if (pObj == NULL) {
|
| - continue;
|
| - }
|
| - CPDF_Object* pDirect = pObj->GetDirect();
|
| - if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
|
| - continue;
|
| - }
|
| - CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
|
| - if (pElement->GetString("Type") != "Font") {
|
| - continue;
|
| - }
|
| - CPDF_Font* pFind = pDocument->LoadFont(pElement);
|
| - if (pFind == NULL) {
|
| - continue;
|
| - }
|
| - CFX_SubstFont* pSubst = (CFX_SubstFont*)pFind->GetSubstFont();
|
| - if (pSubst == NULL) {
|
| - continue;
|
| - }
|
| - if (pSubst->m_Charset == (int)charSet) {
|
| - csNameTag = csKey;
|
| - return pFind;
|
| - }
|
| - }
|
| + }
|
| + FX_DWORD dwCount = 0;
|
| + FX_POSITION pos = pFonts->GetStartPos();
|
| + while (pos) {
|
| + CPDF_Object* pObj = NULL;
|
| + CFX_ByteString csKey;
|
| + pObj = pFonts->GetNextElement(pos, csKey);
|
| + if (pObj == NULL) {
|
| + continue;
|
| + }
|
| + CPDF_Object* pDirect = pObj->GetDirect();
|
| + if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
|
| + continue;
|
| + }
|
| + CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
|
| + if (pElement->GetString("Type") != "Font") {
|
| + continue;
|
| + }
|
| + if (dwCount == index) {
|
| + csNameTag = csKey;
|
| + return pDocument->LoadFont(pElement);
|
| + }
|
| + dwCount++;
|
| + }
|
| + return NULL;
|
| +}
|
| +CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict,
|
| + CPDF_Document* pDocument,
|
| + CFX_ByteString csNameTag) {
|
| + CFX_ByteString csAlias = PDF_NameDecode(csNameTag);
|
| + if (pFormDict == NULL || csAlias.IsEmpty()) {
|
| return NULL;
|
| -}
|
| -CPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, CFX_ByteString& csNameTag)
|
| -{
|
| - csNameTag = "";
|
| - uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
|
| - CFX_SubstFont* pSubst;
|
| - CPDF_Font* pFont = GetDefaultInterFormFont(pFormDict, pDocument);
|
| - if (pFont != NULL) {
|
| - pSubst = (CFX_SubstFont*)pFont->GetSubstFont();
|
| - if (pSubst != NULL && pSubst->m_Charset == (int)charSet) {
|
| - FindInterFormFont(pFormDict, pFont, csNameTag);
|
| - return pFont;
|
| - }
|
| - }
|
| - return GetNativeInterFormFont(pFormDict, pDocument, charSet, csNameTag);
|
| -}
|
| -FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict, const CPDF_Font* pFont, CFX_ByteString& csNameTag)
|
| -{
|
| - if (pFormDict == NULL || pFont == NULL) {
|
| - return FALSE;
|
| - }
|
| - CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| - if (pDR == NULL) {
|
| - return FALSE;
|
| - }
|
| - CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| - if (pFonts == NULL) {
|
| - return FALSE;
|
| - }
|
| - FX_POSITION pos = pFonts->GetStartPos();
|
| - while (pos) {
|
| - CPDF_Object* pObj = NULL;
|
| - CFX_ByteString csKey;
|
| - pObj = pFonts->GetNextElement(pos, csKey);
|
| - if (pObj == NULL) {
|
| - continue;
|
| - }
|
| - CPDF_Object* pDirect = pObj->GetDirect();
|
| - if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
|
| - continue;
|
| - }
|
| - CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
|
| - if (pElement->GetString("Type") != "Font") {
|
| - continue;
|
| - }
|
| - if (pFont->GetFontDict() == pElement) {
|
| - csNameTag = csKey;
|
| - return TRUE;
|
| - }
|
| - }
|
| + }
|
| + CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| + if (pDR == NULL) {
|
| + return NULL;
|
| + }
|
| + CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| + if (pFonts == NULL) {
|
| + return NULL;
|
| + }
|
| + CPDF_Dictionary* pElement = pFonts->GetDict(csAlias);
|
| + if (pElement == NULL) {
|
| + return NULL;
|
| + }
|
| + if (pElement->GetString("Type") == "Font") {
|
| + return pDocument->LoadFont(pElement);
|
| + }
|
| + return NULL;
|
| +}
|
| +CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict,
|
| + CPDF_Document* pDocument,
|
| + CFX_ByteString csFontName,
|
| + CFX_ByteString& csNameTag) {
|
| + if (pFormDict == NULL || csFontName.IsEmpty()) {
|
| + return NULL;
|
| + }
|
| + CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| + if (pDR == NULL) {
|
| + return NULL;
|
| + }
|
| + CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| + if (pFonts == NULL) {
|
| + return NULL;
|
| + }
|
| + FX_POSITION pos = pFonts->GetStartPos();
|
| + while (pos) {
|
| + CPDF_Object* pObj = NULL;
|
| + CFX_ByteString csKey;
|
| + pObj = pFonts->GetNextElement(pos, csKey);
|
| + if (pObj == NULL) {
|
| + continue;
|
| + }
|
| + CPDF_Object* pDirect = pObj->GetDirect();
|
| + if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
|
| + continue;
|
| + }
|
| + CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
|
| + if (pElement->GetString("Type") != "Font") {
|
| + continue;
|
| + }
|
| + CPDF_Font* pFind = pDocument->LoadFont(pElement);
|
| + if (pFind == NULL) {
|
| + continue;
|
| + }
|
| + CFX_ByteString csBaseFont;
|
| + csBaseFont = pFind->GetBaseFont();
|
| + csBaseFont.Remove(' ');
|
| + if (csBaseFont == csFontName) {
|
| + csNameTag = csKey;
|
| + return pFind;
|
| + }
|
| + }
|
| + return NULL;
|
| +}
|
| +CPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict,
|
| + CPDF_Document* pDocument,
|
| + uint8_t charSet,
|
| + CFX_ByteString& csNameTag) {
|
| + if (pFormDict == NULL) {
|
| + return NULL;
|
| + }
|
| + CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| + if (pDR == NULL) {
|
| + return NULL;
|
| + }
|
| + CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| + if (pFonts == NULL) {
|
| + return NULL;
|
| + }
|
| + FX_POSITION pos = pFonts->GetStartPos();
|
| + while (pos) {
|
| + CPDF_Object* pObj = NULL;
|
| + CFX_ByteString csKey;
|
| + pObj = pFonts->GetNextElement(pos, csKey);
|
| + if (pObj == NULL) {
|
| + continue;
|
| + }
|
| + CPDF_Object* pDirect = pObj->GetDirect();
|
| + if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
|
| + continue;
|
| + }
|
| + CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
|
| + if (pElement->GetString("Type") != "Font") {
|
| + continue;
|
| + }
|
| + CPDF_Font* pFind = pDocument->LoadFont(pElement);
|
| + if (pFind == NULL) {
|
| + continue;
|
| + }
|
| + CFX_SubstFont* pSubst = (CFX_SubstFont*)pFind->GetSubstFont();
|
| + if (pSubst == NULL) {
|
| + continue;
|
| + }
|
| + if (pSubst->m_Charset == (int)charSet) {
|
| + csNameTag = csKey;
|
| + return pFind;
|
| + }
|
| + }
|
| + return NULL;
|
| +}
|
| +CPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict,
|
| + CPDF_Document* pDocument,
|
| + CFX_ByteString& csNameTag) {
|
| + csNameTag = "";
|
| + uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
|
| + CFX_SubstFont* pSubst;
|
| + CPDF_Font* pFont = GetDefaultInterFormFont(pFormDict, pDocument);
|
| + if (pFont != NULL) {
|
| + pSubst = (CFX_SubstFont*)pFont->GetSubstFont();
|
| + if (pSubst != NULL && pSubst->m_Charset == (int)charSet) {
|
| + FindInterFormFont(pFormDict, pFont, csNameTag);
|
| + return pFont;
|
| + }
|
| + }
|
| + return GetNativeInterFormFont(pFormDict, pDocument, charSet, csNameTag);
|
| +}
|
| +FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict,
|
| + const CPDF_Font* pFont,
|
| + CFX_ByteString& csNameTag) {
|
| + if (pFormDict == NULL || pFont == NULL) {
|
| return FALSE;
|
| -}
|
| -FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, CFX_ByteString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag)
|
| -{
|
| - if (pFormDict == NULL) {
|
| - return FALSE;
|
| - }
|
| - CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| - if (pDR == NULL) {
|
| - return FALSE;
|
| - }
|
| - CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| - if (pFonts == NULL) {
|
| - return FALSE;
|
| - }
|
| - if (csFontName.GetLength() > 0) {
|
| - csFontName.Remove(' ');
|
| - }
|
| - FX_POSITION pos = pFonts->GetStartPos();
|
| - while (pos) {
|
| - CPDF_Object* pObj = NULL;
|
| - CFX_ByteString csKey, csTmp;
|
| - pObj = pFonts->GetNextElement(pos, csKey);
|
| - if (pObj == NULL) {
|
| - continue;
|
| - }
|
| - CPDF_Object* pDirect = pObj->GetDirect();
|
| - if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
|
| - continue;
|
| - }
|
| - CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
|
| - if (pElement->GetString("Type") != "Font") {
|
| - continue;
|
| - }
|
| - pFont = pDocument->LoadFont(pElement);
|
| - if (pFont == NULL) {
|
| - continue;
|
| - }
|
| - CFX_ByteString csBaseFont;
|
| - csBaseFont = pFont->GetBaseFont();
|
| - csBaseFont.Remove(' ');
|
| - if (csBaseFont == csFontName) {
|
| - csNameTag = csKey;
|
| - return TRUE;
|
| - }
|
| - }
|
| + }
|
| + CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| + if (pDR == NULL) {
|
| return FALSE;
|
| -}
|
| -void AddInterFormFont(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument, const CPDF_Font* pFont, CFX_ByteString& csNameTag)
|
| -{
|
| + }
|
| + CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| + if (pFonts == NULL) {
|
| + return FALSE;
|
| + }
|
| + FX_POSITION pos = pFonts->GetStartPos();
|
| + while (pos) {
|
| + CPDF_Object* pObj = NULL;
|
| + CFX_ByteString csKey;
|
| + pObj = pFonts->GetNextElement(pos, csKey);
|
| + if (pObj == NULL) {
|
| + continue;
|
| + }
|
| + CPDF_Object* pDirect = pObj->GetDirect();
|
| + if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
|
| + continue;
|
| + }
|
| + CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
|
| + if (pElement->GetString("Type") != "Font") {
|
| + continue;
|
| + }
|
| + if (pFont->GetFontDict() == pElement) {
|
| + csNameTag = csKey;
|
| + return TRUE;
|
| + }
|
| + }
|
| + return FALSE;
|
| +}
|
| +FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict,
|
| + CPDF_Document* pDocument,
|
| + CFX_ByteString csFontName,
|
| + CPDF_Font*& pFont,
|
| + CFX_ByteString& csNameTag) {
|
| + if (pFormDict == NULL) {
|
| + return FALSE;
|
| + }
|
| + CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| + if (pDR == NULL) {
|
| + return FALSE;
|
| + }
|
| + CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| + if (pFonts == NULL) {
|
| + return FALSE;
|
| + }
|
| + if (csFontName.GetLength() > 0) {
|
| + csFontName.Remove(' ');
|
| + }
|
| + FX_POSITION pos = pFonts->GetStartPos();
|
| + while (pos) {
|
| + CPDF_Object* pObj = NULL;
|
| + CFX_ByteString csKey, csTmp;
|
| + pObj = pFonts->GetNextElement(pos, csKey);
|
| + if (pObj == NULL) {
|
| + continue;
|
| + }
|
| + CPDF_Object* pDirect = pObj->GetDirect();
|
| + if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
|
| + continue;
|
| + }
|
| + CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
|
| + if (pElement->GetString("Type") != "Font") {
|
| + continue;
|
| + }
|
| + pFont = pDocument->LoadFont(pElement);
|
| if (pFont == NULL) {
|
| - return;
|
| - }
|
| - if (pFormDict == NULL) {
|
| - InitInterFormDict(pFormDict, pDocument);
|
| - }
|
| - CFX_ByteString csTag;
|
| - if (FindInterFormFont(pFormDict, pFont, csTag)) {
|
| - csNameTag = csTag;
|
| - return;
|
| - }
|
| - if (pFormDict == NULL) {
|
| - InitInterFormDict(pFormDict, pDocument);
|
| - }
|
| - CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| + continue;
|
| + }
|
| + CFX_ByteString csBaseFont;
|
| + csBaseFont = pFont->GetBaseFont();
|
| + csBaseFont.Remove(' ');
|
| + if (csBaseFont == csFontName) {
|
| + csNameTag = csKey;
|
| + return TRUE;
|
| + }
|
| + }
|
| + return FALSE;
|
| +}
|
| +void AddInterFormFont(CPDF_Dictionary*& pFormDict,
|
| + CPDF_Document* pDocument,
|
| + const CPDF_Font* pFont,
|
| + CFX_ByteString& csNameTag) {
|
| + if (pFont == NULL) {
|
| + return;
|
| + }
|
| + if (pFormDict == NULL) {
|
| + InitInterFormDict(pFormDict, pDocument);
|
| + }
|
| + CFX_ByteString csTag;
|
| + if (FindInterFormFont(pFormDict, pFont, csTag)) {
|
| + csNameTag = csTag;
|
| + return;
|
| + }
|
| + if (pFormDict == NULL) {
|
| + InitInterFormDict(pFormDict, pDocument);
|
| + }
|
| + CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| + if (pDR == NULL) {
|
| + pDR = CPDF_Dictionary::Create();
|
| if (pDR == NULL) {
|
| - pDR = CPDF_Dictionary::Create();
|
| - if (pDR == NULL) {
|
| - return;
|
| - }
|
| - pFormDict->SetAt("DR", pDR);
|
| - }
|
| - CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| - if (pFonts == NULL) {
|
| - pFonts = CPDF_Dictionary::Create();
|
| - pDR->SetAt("Font", pFonts);
|
| - }
|
| - if (csNameTag.IsEmpty()) {
|
| - csNameTag = pFont->GetBaseFont();
|
| - }
|
| - csNameTag.Remove(' ');
|
| - csNameTag = CPDF_InterForm::GenerateNewResourceName(pDR, "Font", 4, csNameTag);
|
| - pFonts->SetAtReference(csNameTag, pDocument, pFont->GetFontDict());
|
| -}
|
| -CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument, uint8_t charSet, CFX_ByteString& csNameTag)
|
| -{
|
| - if (pFormDict == NULL) {
|
| - InitInterFormDict(pFormDict, pDocument);
|
| - }
|
| - CFX_ByteString csTemp;
|
| - CPDF_Font* pFont = GetNativeInterFormFont(pFormDict, pDocument, charSet, csTemp);
|
| - if (pFont != NULL) {
|
| - csNameTag = csTemp;
|
| - return pFont;
|
| - }
|
| - CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet);
|
| - if (!csFontName.IsEmpty()) {
|
| - if (FindInterFormFont(pFormDict, pDocument, csFontName, pFont, csNameTag)) {
|
| - return pFont;
|
| - }
|
| - }
|
| - pFont = CPDF_InterForm::AddNativeFont(charSet, pDocument);
|
| - if (pFont != NULL) {
|
| - AddInterFormFont(pFormDict, pDocument, pFont, csNameTag);
|
| - }
|
| + return;
|
| + }
|
| + pFormDict->SetAt("DR", pDR);
|
| + }
|
| + CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| + if (pFonts == NULL) {
|
| + pFonts = CPDF_Dictionary::Create();
|
| + pDR->SetAt("Font", pFonts);
|
| + }
|
| + if (csNameTag.IsEmpty()) {
|
| + csNameTag = pFont->GetBaseFont();
|
| + }
|
| + csNameTag.Remove(' ');
|
| + csNameTag =
|
| + CPDF_InterForm::GenerateNewResourceName(pDR, "Font", 4, csNameTag);
|
| + pFonts->SetAtReference(csNameTag, pDocument, pFont->GetFontDict());
|
| +}
|
| +CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict,
|
| + CPDF_Document* pDocument,
|
| + uint8_t charSet,
|
| + CFX_ByteString& csNameTag) {
|
| + if (pFormDict == NULL) {
|
| + InitInterFormDict(pFormDict, pDocument);
|
| + }
|
| + CFX_ByteString csTemp;
|
| + CPDF_Font* pFont =
|
| + GetNativeInterFormFont(pFormDict, pDocument, charSet, csTemp);
|
| + if (pFont != NULL) {
|
| + csNameTag = csTemp;
|
| return pFont;
|
| -}
|
| -CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument, CFX_ByteString& csNameTag)
|
| -{
|
| - uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
|
| - return AddNativeInterFormFont(pFormDict, pDocument, charSet, csNameTag);
|
| -}
|
| -void RemoveInterFormFont(CPDF_Dictionary* pFormDict, const CPDF_Font* pFont)
|
| -{
|
| - if (pFormDict == NULL || pFont == NULL) {
|
| - return;
|
| - }
|
| - CFX_ByteString csTag;
|
| - if (!FindInterFormFont(pFormDict, pFont, csTag)) {
|
| - return;
|
| - }
|
| - CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| - CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| - pFonts->RemoveAt(csTag);
|
| -}
|
| -void RemoveInterFormFont(CPDF_Dictionary* pFormDict, CFX_ByteString csNameTag)
|
| -{
|
| - if (pFormDict == NULL || csNameTag.IsEmpty()) {
|
| - return;
|
| - }
|
| - CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| - if (pDR == NULL) {
|
| - return;
|
| - }
|
| - CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| - if (pFonts == NULL) {
|
| - return;
|
| - }
|
| - pFonts->RemoveAt(csNameTag);
|
| -}
|
| -CPDF_Font* GetDefaultInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument)
|
| -{
|
| - if (pFormDict == NULL) {
|
| - return NULL;
|
| - }
|
| - CPDF_DefaultAppearance cDA = pFormDict->GetString("DA");
|
| - CFX_ByteString csFontNameTag;
|
| - FX_FLOAT fFontSize;
|
| - cDA.GetFont(csFontNameTag, fFontSize);
|
| - return GetInterFormFont(pFormDict, pDocument, csFontNameTag);
|
| -}
|
| -CPDF_IconFit::ScaleMethod CPDF_IconFit::GetScaleMethod()
|
| -{
|
| - if (!m_pDict) {
|
| - return Always;
|
| - }
|
| - CFX_ByteString csSW = m_pDict->GetString("SW", "A");
|
| - if (csSW == "B") {
|
| - return Bigger;
|
| - }
|
| - if (csSW == "S") {
|
| - return Smaller;
|
| - }
|
| - if (csSW == "N") {
|
| - return Never;
|
| - }
|
| + }
|
| + CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet);
|
| + if (!csFontName.IsEmpty()) {
|
| + if (FindInterFormFont(pFormDict, pDocument, csFontName, pFont, csNameTag)) {
|
| + return pFont;
|
| + }
|
| + }
|
| + pFont = CPDF_InterForm::AddNativeFont(charSet, pDocument);
|
| + if (pFont != NULL) {
|
| + AddInterFormFont(pFormDict, pDocument, pFont, csNameTag);
|
| + }
|
| + return pFont;
|
| +}
|
| +CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict,
|
| + CPDF_Document* pDocument,
|
| + CFX_ByteString& csNameTag) {
|
| + uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
|
| + return AddNativeInterFormFont(pFormDict, pDocument, charSet, csNameTag);
|
| +}
|
| +void RemoveInterFormFont(CPDF_Dictionary* pFormDict, const CPDF_Font* pFont) {
|
| + if (pFormDict == NULL || pFont == NULL) {
|
| + return;
|
| + }
|
| + CFX_ByteString csTag;
|
| + if (!FindInterFormFont(pFormDict, pFont, csTag)) {
|
| + return;
|
| + }
|
| + CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| + CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| + pFonts->RemoveAt(csTag);
|
| +}
|
| +void RemoveInterFormFont(CPDF_Dictionary* pFormDict, CFX_ByteString csNameTag) {
|
| + if (pFormDict == NULL || csNameTag.IsEmpty()) {
|
| + return;
|
| + }
|
| + CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
|
| + if (pDR == NULL) {
|
| + return;
|
| + }
|
| + CPDF_Dictionary* pFonts = pDR->GetDict("Font");
|
| + if (pFonts == NULL) {
|
| + return;
|
| + }
|
| + pFonts->RemoveAt(csNameTag);
|
| +}
|
| +CPDF_Font* GetDefaultInterFormFont(CPDF_Dictionary* pFormDict,
|
| + CPDF_Document* pDocument) {
|
| + if (pFormDict == NULL) {
|
| + return NULL;
|
| + }
|
| + CPDF_DefaultAppearance cDA = pFormDict->GetString("DA");
|
| + CFX_ByteString csFontNameTag;
|
| + FX_FLOAT fFontSize;
|
| + cDA.GetFont(csFontNameTag, fFontSize);
|
| + return GetInterFormFont(pFormDict, pDocument, csFontNameTag);
|
| +}
|
| +CPDF_IconFit::ScaleMethod CPDF_IconFit::GetScaleMethod() {
|
| + if (!m_pDict) {
|
| return Always;
|
| -}
|
| -FX_BOOL CPDF_IconFit::IsProportionalScale()
|
| -{
|
| - if (m_pDict == NULL) {
|
| - return TRUE;
|
| - }
|
| - return m_pDict->GetString("S", "P") != "A";
|
| -}
|
| -void CPDF_IconFit::GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom)
|
| -{
|
| - fLeft = fBottom = 0.5;
|
| - if (m_pDict == NULL) {
|
| - return;
|
| - }
|
| - CPDF_Array* pA = m_pDict->GetArray("A");
|
| - if (pA != NULL) {
|
| - FX_DWORD dwCount = pA->GetCount();
|
| - if (dwCount > 0) {
|
| - fLeft = pA->GetNumber(0);
|
| - }
|
| - if (dwCount > 1) {
|
| - fBottom = pA->GetNumber(1);
|
| - }
|
| - }
|
| -}
|
| -FX_BOOL CPDF_IconFit::GetFittingBounds()
|
| -{
|
| - if (m_pDict == NULL) {
|
| - return FALSE;
|
| - }
|
| - return m_pDict->GetBoolean("FB");
|
| -}
|
| -void SaveCheckedFieldStatus(CPDF_FormField* pField, CFX_ByteArray& statusArray)
|
| -{
|
| - int iCount = pField->CountControls();
|
| - for (int i = 0; i < iCount; i ++) {
|
| - CPDF_FormControl* pControl = pField->GetControl(i);
|
| - if (pControl == NULL) {
|
| - continue;
|
| - }
|
| - statusArray.Add(pControl->IsChecked() ? 1 : 0);
|
| - }
|
| -}
|
| -CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name, int nLevel)
|
| -{
|
| - if (nLevel > FPDFDOC_UTILS_MAXRECURSION) {
|
| - return NULL;
|
| - }
|
| - if (pFieldDict == NULL) {
|
| - return NULL;
|
| - }
|
| - CPDF_Object* pAttr = pFieldDict->GetElementValue(name);
|
| - if (pAttr) {
|
| - return pAttr;
|
| - }
|
| - CPDF_Dictionary* pParent = pFieldDict->GetDict("Parent");
|
| - if (pParent == NULL) {
|
| - return NULL;
|
| - }
|
| - return FPDF_GetFieldAttr(pParent, name, nLevel + 1);
|
| + }
|
| + CFX_ByteString csSW = m_pDict->GetString("SW", "A");
|
| + if (csSW == "B") {
|
| + return Bigger;
|
| + }
|
| + if (csSW == "S") {
|
| + return Smaller;
|
| + }
|
| + if (csSW == "N") {
|
| + return Never;
|
| + }
|
| + return Always;
|
| +}
|
| +FX_BOOL CPDF_IconFit::IsProportionalScale() {
|
| + if (m_pDict == NULL) {
|
| + return TRUE;
|
| + }
|
| + return m_pDict->GetString("S", "P") != "A";
|
| +}
|
| +void CPDF_IconFit::GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom) {
|
| + fLeft = fBottom = 0.5;
|
| + if (m_pDict == NULL) {
|
| + return;
|
| + }
|
| + CPDF_Array* pA = m_pDict->GetArray("A");
|
| + if (pA != NULL) {
|
| + FX_DWORD dwCount = pA->GetCount();
|
| + if (dwCount > 0) {
|
| + fLeft = pA->GetNumber(0);
|
| + }
|
| + if (dwCount > 1) {
|
| + fBottom = pA->GetNumber(1);
|
| + }
|
| + }
|
| +}
|
| +FX_BOOL CPDF_IconFit::GetFittingBounds() {
|
| + if (m_pDict == NULL) {
|
| + return FALSE;
|
| + }
|
| + return m_pDict->GetBoolean("FB");
|
| +}
|
| +void SaveCheckedFieldStatus(CPDF_FormField* pField,
|
| + CFX_ByteArray& statusArray) {
|
| + int iCount = pField->CountControls();
|
| + for (int i = 0; i < iCount; i++) {
|
| + CPDF_FormControl* pControl = pField->GetControl(i);
|
| + if (pControl == NULL) {
|
| + continue;
|
| + }
|
| + statusArray.Add(pControl->IsChecked() ? 1 : 0);
|
| + }
|
| +}
|
| +CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict,
|
| + const FX_CHAR* name,
|
| + int nLevel) {
|
| + if (nLevel > FPDFDOC_UTILS_MAXRECURSION) {
|
| + return NULL;
|
| + }
|
| + if (pFieldDict == NULL) {
|
| + return NULL;
|
| + }
|
| + CPDF_Object* pAttr = pFieldDict->GetElementValue(name);
|
| + if (pAttr) {
|
| + return pAttr;
|
| + }
|
| + CPDF_Dictionary* pParent = pFieldDict->GetDict("Parent");
|
| + if (pParent == NULL) {
|
| + return NULL;
|
| + }
|
| + return FPDF_GetFieldAttr(pParent, name, nLevel + 1);
|
| }
|
|
|