Converting Non Embedded font to Embedded font in Acrobat SDK using c++
Hi,
I Want to convert non embedded font to embedded font using Acrobat SDK.
I am using below code to do that. It was creating new font and it was not updating existing font.
PDDoc pdDoc = AVDocGetPDDoc(AVAppGetActiveDoc());
CosObj fontObj = PDFontGetCosObj(font);
PDEFont pdeFont = PDEFontCreateFromCosObj(&fontObj);
PDEFontAttrs attrs;
memset(&attrs, 0, sizeof(attrs));
PDEFontGetAttrs(pdeFont, &attrs, sizeof(attrs));
PDSysEncoding sysEnc = NULL;
if (attrs.type == ASAtomFromString("Type0"))
{
sysEnc = PDSysEncodingCreateFromCMapName(attrs.encoding);
}
else
{
//Collect the /Differences from the /BaseEncoding if present for a simple font.
//std::vector<const char*> differencesEncoding = CollectEncodingDifferencesIfPresent(fontEntry->fontCosObj);
//sysEnc = PDSysEncodingCreateFromBaseName(attrs.encoding, differencesEncoding.size() > 0 ? &(*differencesEncoding.begin()) : NULL);
}
PDSysFont pdSysFont = PDFindSysFontForPDEFont(pdeFont, kPDSysFontMatchNameAndCharSet);
// If the font is not found on the system, sysFont will be 0.
if (0 == pdSysFont)
{
//std::cout << "Could not find a pdSysFont " << std::endl;
return;
}
PDEFontSetSysFont(pdeFont, pdSysFont);
if (sysEnc)
PDEFontSetSysEncoding(pdeFont, sysEnc);
if (attrs.cantEmbed != 0)
{
//std::cout << "Font " << ASAtomGetString(attrs.name) << " cannot be embedded" << std::endl;
}
else
{
if (PDEFontIsMultiByte(pdeFont))
{
// Subset embed font
PDEFont pdeFont;
if (sysEnc)
pdeFont = PDEFontCreateFromSysFontAndEncoding(pdSysFont, sysEnc, attrs.name, kPDEFontCreateEmbedded | kPDEFontCreateSubset);
else
pdeFont = PDEFontCreateFromSysFont(pdSysFont, kPDEFontCreateEmbedded | kPDEFontCreateSubset);
PDEFontSubsetNow(pdeFont, PDDocGetCosDoc(pdDoc));
PDERelease((PDEObject)pdeFont);
}
else
{
// Fully embed font
PDEFont pdeFont = PDEFontCreateFromSysFont(pdSysFont, kPDEFontCreateEmbedded);
PDEFontEmbedNow(pdeFont, PDDocGetCosDoc(pdDoc));
PDERelease((PDEObject)pdeFont);
}
}
if (sysEnc)
PDERelease((PDEObject)sysEnc);
Please help me to solve this issue.
