mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-02-10 18:05:41 +08:00
Parent Opt with pair string
This commit is contained in:
@ -1104,6 +1104,17 @@ bool CWidgetsInfo::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, IMetafil
|
||||
for (int i = 0; i < n; ++i)
|
||||
pParent->arrV.push_back(pReader->ReadString());
|
||||
}
|
||||
if (nFlags & (1 << 6))
|
||||
{
|
||||
int n = pReader->ReadInt();
|
||||
pParent->arrOpt.reserve(n);
|
||||
for (int i = 0; i < n; ++i)
|
||||
{
|
||||
std::wstring s1 = pReader->ReadString();
|
||||
std::wstring s2 = pReader->ReadString();
|
||||
pParent->arrOpt.push_back(std::make_pair(s1, s2));
|
||||
}
|
||||
}
|
||||
if (nFlags & (1 << 7))
|
||||
pParent->nFieldFlag = pReader->ReadInt();
|
||||
m_arrParents.push_back(pParent);
|
||||
|
||||
@ -574,6 +574,7 @@ public:
|
||||
std::wstring sDV;
|
||||
std::vector<int> arrI;
|
||||
std::vector<std::wstring> arrV;
|
||||
std::vector< std::pair<std::wstring, std::wstring> > arrOpt;
|
||||
};
|
||||
|
||||
CWidgetsInfo();
|
||||
|
||||
@ -571,9 +571,16 @@ CFile.prototype["getInteractiveFormsInfo"] = function()
|
||||
if (flags & (1 << 6))
|
||||
{
|
||||
let n = reader.readInt();
|
||||
rec["Opt"] = [];
|
||||
rec["opt"] = [];
|
||||
for (let i = 0; i < n; ++i)
|
||||
rec["Opt"].push(reader.readString());
|
||||
{
|
||||
let opt1 = reader.readString();
|
||||
let opt2 = reader.readString();
|
||||
if (opt1 == "")
|
||||
rec["opt"].push(opt2);
|
||||
else
|
||||
rec["opt"].push([opt2, opt1]);
|
||||
}
|
||||
}
|
||||
if (flags & (1 << 7))
|
||||
{
|
||||
|
||||
@ -2716,6 +2716,31 @@ HRESULT CPdfWriter::EditWidgetParents(NSFonts::IApplicationFonts* pAppFonts, CWi
|
||||
}
|
||||
}
|
||||
}
|
||||
if (nFlags & (1 << 6))
|
||||
{
|
||||
PdfWriter::CArrayObject* pArray = new PdfWriter::CArrayObject();
|
||||
pParentObj->Add("Opt", pArray);
|
||||
|
||||
for (const std::pair<std::wstring, std::wstring>& PV : pParent->arrOpt)
|
||||
{
|
||||
if (PV.first.empty())
|
||||
{
|
||||
std::string sValue = U_TO_UTF8(PV.second);
|
||||
pArray->Add(new PdfWriter::CStringObject(sValue.c_str(), true));
|
||||
}
|
||||
else
|
||||
{
|
||||
PdfWriter::CArrayObject* pArray2 = new PdfWriter::CArrayObject();
|
||||
pArray->Add(pArray2);
|
||||
|
||||
std::string sValue = U_TO_UTF8(PV.first);
|
||||
pArray2->Add(new PdfWriter::CStringObject(sValue.c_str(), true));
|
||||
|
||||
sValue = U_TO_UTF8(PV.second);
|
||||
pArray2->Add(new PdfWriter::CStringObject(sValue.c_str(), true));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (nFlags & (1 << 7))
|
||||
pParentObj->Add("Ff", pParent->nFieldFlag);
|
||||
}
|
||||
|
||||
@ -2664,17 +2664,41 @@ void CAnnots::getParents(XRef* xref, Object* oFieldRef)
|
||||
for (int j = 0; j < nOptLength; ++j)
|
||||
{
|
||||
Object oOptJ;
|
||||
if (!oOpt.arrayGet(j, &oOptJ) || !oOptJ.isString())
|
||||
if (!oOpt.arrayGet(j, &oOptJ) || !(oOptJ.isString() || oOptJ.isArray()))
|
||||
{
|
||||
oOptJ.free();
|
||||
continue;
|
||||
}
|
||||
|
||||
TextString* s = new TextString(oOptJ.getString());
|
||||
pAnnotParent->arrOpt.push_back(NSStringExt::CConverter::GetUtf8FromUTF32(s->getUnicode(), s->getLength()));
|
||||
delete s;
|
||||
std::string sOpt1, sOpt2;
|
||||
if (oOptJ.isArray() && oOptJ.arrayGetLength() > 1)
|
||||
{
|
||||
Object oOptJ2;
|
||||
if (oOptJ.arrayGet(0, &oOptJ2)->isString())
|
||||
{
|
||||
TextString* s = new TextString(oOptJ2.getString());
|
||||
sOpt1 = NSStringExt::CConverter::GetUtf8FromUTF32(s->getUnicode(), s->getLength());
|
||||
delete s;
|
||||
}
|
||||
oOptJ2.free();
|
||||
if (oOptJ.arrayGet(1, &oOptJ2)->isString())
|
||||
{
|
||||
TextString* s = new TextString(oOptJ2.getString());
|
||||
sOpt2 = NSStringExt::CConverter::GetUtf8FromUTF32(s->getUnicode(), s->getLength());
|
||||
delete s;
|
||||
}
|
||||
oOptJ2.free();
|
||||
}
|
||||
else if (oOptJ.isString())
|
||||
{
|
||||
TextString* s = new TextString(oOptJ.getString());
|
||||
sOpt2 = NSStringExt::CConverter::GetUtf8FromUTF32(s->getUnicode(), s->getLength());
|
||||
delete s;
|
||||
}
|
||||
pAnnotParent->arrOpt.push_back(std::make_pair(sOpt1, sOpt2));
|
||||
oOptJ.free();
|
||||
}
|
||||
|
||||
if (!pAnnotParent->arrOpt.empty())
|
||||
pAnnotParent->unFlags |= (1 << 6);
|
||||
}
|
||||
@ -3644,9 +3668,12 @@ void CAnnots::CAnnotParent::ToWASM(NSWasm::CData& oRes)
|
||||
}
|
||||
if (unFlags & (1 << 6))
|
||||
{
|
||||
oRes.AddInt((unsigned int)arrOpt.size());
|
||||
oRes.AddInt(arrOpt.size());
|
||||
for (int i = 0; i < arrOpt.size(); ++i)
|
||||
oRes.WriteString(arrOpt[i]);
|
||||
{
|
||||
oRes.WriteString(arrOpt[i].first);
|
||||
oRes.WriteString(arrOpt[i].second);
|
||||
}
|
||||
}
|
||||
if (unFlags & (1 << 7))
|
||||
oRes.AddInt(unFieldFlag);
|
||||
|
||||
@ -615,7 +615,7 @@ private:
|
||||
unsigned int unRefNumParent; // Номер ссылки на объект родителя
|
||||
std::vector<int> arrI;
|
||||
std::vector<std::string> arrV;
|
||||
std::vector<std::string> arrOpt;
|
||||
std::vector< std::pair<std::string, std::string> > arrOpt;
|
||||
std::string sT;
|
||||
std::string sV;
|
||||
std::string sDV;
|
||||
|
||||
Reference in New Issue
Block a user