Пример #1
0
CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict,
                                  CPDF_Document* pDocument,
                                  uint8_t charSet,
                                  CFX_ByteString& csNameTag) {
  if (!pFormDict) {
    InitInterFormDict(pFormDict, pDocument);
  }
  CFX_ByteString csTemp;
  CPDF_Font* pFont =
      GetNativeInterFormFont(pFormDict, pDocument, charSet, csTemp);
  if (pFont) {
    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) {
    AddInterFormFont(pFormDict, pDocument, pFont, csNameTag);
  }
  return pFont;
}
void InitInterFormDict(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument)
{
    if (pDocument == NULL) {
        return;
    }
    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;
        FX_BYTE 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);
    }
}
Пример #3
0
void InitInterFormDict(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument) {
  if (!pDocument)
    return;

  if (!pFormDict) {
    pFormDict = new CPDF_Dictionary;
    uint32_t dwObjNum = pDocument->AddIndirectObject(pFormDict);
    CPDF_Dictionary* pRoot = pDocument->GetRoot();
    pRoot->SetAtReference("AcroForm", pDocument, dwObjNum);
  }
  CFX_ByteString csDA;
  if (!pFormDict->KeyExist("DR")) {
    CFX_ByteString csBaseName;
    CFX_ByteString csDefault;
    uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
    CPDF_Font* pFont = CPDF_InterForm::AddStandardFont(pDocument, "Helvetica");
    if (pFont) {
      AddInterFormFont(pFormDict, pDocument, pFont, csBaseName);
      csDefault = csBaseName;
    }
    if (charSet != FXFONT_ANSI_CHARSET) {
      CFX_ByteString csFontName =
          CPDF_InterForm::GetNativeFont(charSet, nullptr);
      if (!pFont || csFontName != "Helvetica") {
        pFont = CPDF_InterForm::AddNativeFont(pDocument);
        if (pFont) {
          csBaseName = "";
          AddInterFormFont(pFormDict, pDocument, pFont, csBaseName);
          csDefault = csBaseName;
        }
      }
    }
    if (pFont) {
      csDA = "/" + PDF_NameEncode(csDefault) + " 0 Tf";
    }
  }
  if (!csDA.IsEmpty()) {
    csDA += " ";
  }
  csDA += "0 g";
  if (!pFormDict->KeyExist("DA")) {
    pFormDict->SetAtString("DA", csDA);
  }
}
Пример #4
0
void CPDF_InterForm::AddFormFont(const CPDF_Font* pFont,
                                 CFX_ByteString& csNameTag) {
  AddInterFormFont(m_pFormDict, m_pDocument, pFont, csNameTag);
  m_bUpdated = TRUE;
}