mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-19 23:02:34 +08:00
create IsNeedCMap and three types of getting CMap
This commit is contained in:
@ -77,10 +77,6 @@ CPdfReader::CPdfReader(NSFonts::IApplicationFonts* pAppFonts)
|
||||
globalParams->setupBaseFonts(NULL);
|
||||
#endif
|
||||
|
||||
#ifdef CMAP_USE_MEMORY
|
||||
((GlobalParamsAdaptor*)globalParams)->SetCMapMemory();
|
||||
#endif
|
||||
|
||||
m_eError = errNone;
|
||||
}
|
||||
CPdfReader::~CPdfReader()
|
||||
@ -101,11 +97,89 @@ CPdfReader::~CPdfReader()
|
||||
RELEASEOBJECT(globalParams);
|
||||
RELEASEINTERFACE(m_pFontManager);
|
||||
}
|
||||
void CPdfReader::SetCMapData(BYTE* pData, DWORD nSizeData)
|
||||
bool CPdfReader::IsNeedCMap()
|
||||
{
|
||||
#ifdef CMAP_USE_MEMORY
|
||||
((GlobalParamsAdaptor*)globalParams)->CMapDataFromMemory(pData, nSizeData);
|
||||
#endif
|
||||
std::vector<std::string> arrCMap = {"GB-EUC-H", "GB-EUC-V", "GB-H", "GB-V", "GBpc-EUC-H", "GBpc-EUC-V", "GBK-EUC-H",
|
||||
"GBK-EUC-V", "GBKp-EUC-H", "GBKp-EUC-V", "GBK2K-H", "GBK2K-V", "GBT-H", "GBT-V", "GBTpc-EUC-H", "GBTpc-EUC-V",
|
||||
"UniGB-UCS2-H", "UniGB-UCS2-V", "UniGB-UTF8-H", "UniGB-UTF8-V", "UniGB-UTF16-H", "UniGB-UTF16-V", "UniGB-UTF32-H",
|
||||
"UniGB-UTF32-V", "B5pc-H", "B5pc-V", "B5-H", "B5-V", "HKscs-B5-H", "HKscs-B5-V", "HKdla-B5-H", "HKdla-B5-V",
|
||||
"HKdlb-B5-H", "HKdlb-B5-V", "HKgccs-B5-H", "HKgccs-B5-V", "HKm314-B5-H", "HKm314-B5-V", "HKm471-B5-H",
|
||||
"HKm471-B5-V", "ETen-B5-H", "ETen-B5-V", "ETenms-B5-H", "ETenms-B5-V", "ETHK-B5-H", "ETHK-B5-V", "CNS-EUC-H",
|
||||
"CNS-EUC-V", "CNS1-H", "CNS1-V", "CNS2-H", "CNS2-V", "UniCNS-UCS2-H", "UniCNS-UCS2-V", "UniCNS-UTF8-H",
|
||||
"UniCNS-UTF8-V", "UniCNS-UTF16-H", "UniCNS-UTF16-V", "UniCNS-UTF32-H", "UniCNS-UTF32-V", "78-EUC-H", "78-EUC-V",
|
||||
"78-H", "78-V", "78-RKSJ-H", "78-RKSJ-V", "78ms-RKSJ-H", "78ms-RKSJ-V","83pv-RKSJ-H", "90ms-RKSJ-H", "90ms-RKSJ-V",
|
||||
"90msp-RKSJ-H", "90msp-RKSJ-V", "90pv-RKSJ-H", "90pv-RKSJ-V", "Add-H", "Add-V", "Add-RKSJ-H", "Add-RKSJ-V",
|
||||
"EUC-H", "EUC-V", "Ext-RKSJ-H", "Ext-RKSJ-V", "H", "V", "NWP-H", "NWP-V", "RKSJ-H", "RKSJ-V", "UniJIS-UCS2-H",
|
||||
"UniJIS-UCS2-V", "UniJIS-UCS2-HW-H", "UniJIS-UCS2-HW-V", "UniJIS-UTF8-H", "UniJIS-UTF8-V", "UniJIS-UTF16-H",
|
||||
"UniJIS-UTF16-V", "UniJIS-UTF32-H", "UniJIS-UTF32-V", "UniJIS2004-UTF8-H", "UniJIS2004-UTF8-V", "UniJIS2004-UTF16-H",
|
||||
"UniJIS2004-UTF16-V", "UniJIS2004-UTF32-H", "UniJIS2004-UTF32-V", "UniJISPro-UCS2-V", "UniJISPro-UCS2-HW-V",
|
||||
"UniJISPro-UTF8-V", "UniJISX0213-UTF32-H", "UniJISX0213-UTF32-V", "UniJISX02132004-UTF32-H", "UniJISX02132004-UTF32-V",
|
||||
"WP-Symbol", "Hankaku", "Hiragana", "Katakana", "Roman", "KSC-EUC-H", "KSC-EUC-V", "KSC-H", "KSC-V", "KSC-Johab-H",
|
||||
"KSC-Johab-V", "KSCms-UHC-H", "KSCms-UHC-V", "KSCms-UHC-HW-H", "KSCms-UHC-HW-V", "KSCpc-EUC-H", "KSCpc-EUC-V",
|
||||
"UniKS-UCS2-H", "UniKS-UCS2-V", "UniKS-UTF8-H", "UniKS-UTF8-V", "UniKS-UTF16-H", "UniKS-UTF16-V", "UniKS-UTF32-H",
|
||||
"UniKS-UTF32-V", "UniAKR-UTF8-H", "UniAKR-UTF16-H", "UniAKR-UTF32-H"};
|
||||
|
||||
if (!m_pPDFDocument || !m_pPDFDocument->getCatalog())
|
||||
return false;
|
||||
|
||||
XRef* xref = m_pPDFDocument->getXRef();
|
||||
if (!xref)
|
||||
return false;
|
||||
|
||||
int nPages = m_pPDFDocument->getNumPages();
|
||||
for (int i = 1; i <= nPages; ++i)
|
||||
{
|
||||
Page* pPage = m_pPDFDocument->getCatalog()->getPage(i);
|
||||
if (!pPage)
|
||||
continue;
|
||||
|
||||
Dict* pResourceDict = pPage->getResourceDict();
|
||||
if (!pResourceDict)
|
||||
continue;
|
||||
|
||||
Object objFontNF, objFont;
|
||||
if (!pResourceDict->lookupNF("Font", &objFontNF) || !objFontNF.fetch(xref, &objFont) || !objFont.isDict())
|
||||
{
|
||||
objFontNF.free();
|
||||
objFont.free();
|
||||
continue;
|
||||
}
|
||||
objFontNF.free();
|
||||
|
||||
for (int j = 0, nFontLength = objFont.dictGetLength(); j < nFontLength; ++j)
|
||||
{
|
||||
Object objFNF, objF, objEncoding;
|
||||
if (objFont.dictGetValNF(j, &objFNF) && objFNF.fetch(xref, &objF) && objF.isDict() && objF.dictLookup("Encoding", &objEncoding) && objEncoding.isName())
|
||||
{
|
||||
char* sName = objEncoding.getName();
|
||||
if (std::find(arrCMap.begin(), arrCMap.end(), sName) != arrCMap.end())
|
||||
{
|
||||
objFNF.free();
|
||||
objF.free();
|
||||
objEncoding.free();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
objFNF.free();
|
||||
objF.free();
|
||||
objEncoding.free();
|
||||
}
|
||||
objFont.free();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
void CPdfReader::SetCMapMemory(BYTE* pData, DWORD nSizeData)
|
||||
{
|
||||
((GlobalParamsAdaptor*)globalParams)->SetCMapMemory(pData, nSizeData);
|
||||
}
|
||||
void CPdfReader::SetCMapFolder(const std::wstring& sFolder)
|
||||
{
|
||||
((GlobalParamsAdaptor*)globalParams)->SetCMapFolder(sFolder);
|
||||
}
|
||||
void CPdfReader::SetCMapFile(const std::wstring& sFile)
|
||||
{
|
||||
((GlobalParamsAdaptor*)globalParams)->SetCMapFile(sFile);
|
||||
}
|
||||
bool CPdfReader::LoadFromFile(NSFonts::IApplicationFonts* pAppFonts, const std::wstring& wsSrcPath, const std::wstring& wsOwnerPassword, const std::wstring& wsUserPassword)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user