Fix BE for empty border style

This commit is contained in:
Svetlana Kulikova
2023-09-29 11:14:14 +03:00
parent 6f03b59e70
commit e91c5eafce
4 changed files with 43 additions and 12 deletions

View File

@ -493,6 +493,7 @@
rec["noRotate"] = (rec["annotflag"] >> 4) & 1; // NoRotate
let bNoView = (rec["annotflag"] >> 5) & 1; // NoView
rec["locked"] = (rec["annotflag"] >> 7) & 1; // Locked
rec["ToggleNoView"] = (rec["annotflag"] >> 8) & 1; // ToggleNoView
rec["lockedC"] = (rec["annotflag"] >> 9) & 1; // LockedContents
// 0 - visible, 1 - hidden, 2 - noPrint, 3 - noView
rec["display"] = 0;
@ -531,7 +532,11 @@
rec["Contents"] = reader.readString();
// Эффекты границы - BE
if (flags & (1 << 2))
rec["borderCloudy"] = reader.readDouble();
{
rec["BE"] = {};
rec["BE"]["S"] = reader.readByte();
rec["BE"]["I"] = reader.readDouble();
}
// Специальный цвет аннотации - С
if (flags & (1 << 3))
{

View File

@ -417,9 +417,14 @@ void ReadAnnot(BYTE* pWidgets, int& i)
}
if (nFlags & (1 << 2))
{
std::string arrEffects[] = {"S", "C"};
nPathLength = READ_BYTE(pWidgets + i);
i += 1;
std::cout << "BE " << arrEffects[nPathLength] << " ";
nPathLength = READ_INT(pWidgets + i);
i += 4;
std::cout << "BE C " << (double)nPathLength / 100.0 << ", ";
std::cout << (double)nPathLength / 100.0 << ", ";
}
if (nFlags & (1 << 3))
{

View File

@ -1568,13 +1568,22 @@ CAnnot::CAnnot(PDFDoc* pdfDoc, AcroFormField* pField)
oObj.free();
// 3 - Эффекты границы - BE
Object oBorderBEI;
if (pField->fieldLookup("BE", &oObj)->isDict() && oObj.dictLookup("S", &oObj)->isName("C") && oObj.dictLookup("I", &oBorderBEI)->isNum())
if (pField->fieldLookup("BE", &oObj)->isDict())
{
Object oBorderBE;
m_unAFlags |= (1 << 2);
m_dBE = oBorderBEI.getNum();
m_pBE.first = 0;
if (oObj.dictLookup("S", &oBorderBE)->isName("C"))
m_pBE.first = 1;
oBorderBE.free();
m_pBE.second = 0;
if (oObj.dictLookup("I", &oBorderBE)->isNum())
m_pBE.second = oBorderBE.getNum();
oBorderBE.free();
}
oObj.free(); oObj.free(); oBorderBEI.free();
oObj.free();
// 4 - Специальный цвет для аннотации - C
if (pField->fieldLookup("C", &oObj)->isArray())
@ -1680,13 +1689,22 @@ CAnnot::CAnnot(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex)
oObj.free();
// 3 - Эффекты границы - BE
Object oBorderBEI;
if (oAnnot.dictLookup("BE", &oObj)->isDict() && oObj.dictLookup("S", &oObj2)->isName("C") && oObj.dictLookup("I", &oBorderBEI)->isNum())
if (oAnnot.dictLookup("BE", &oObj)->isDict())
{
Object oBorderBE;
m_unAFlags |= (1 << 2);
m_dBE = oBorderBEI.getNum();
m_pBE.first = 0;
if (oObj.dictLookup("S", &oBorderBE)->isName("C"))
m_pBE.first = 1;
oBorderBE.free();
m_pBE.second = 0;
if (oObj.dictLookup("I", &oBorderBE)->isNum())
m_pBE.second = oBorderBE.getNum();
oBorderBE.free();
}
oObj.free(); oObj2.free(); oBorderBEI.free();
oObj.free();
// 4 - Цвет - C
if (oAnnot.dictLookup("C", &oObj)->isArray())
@ -2156,7 +2174,10 @@ void CAnnot::ToWASM(NSWasm::CData& oRes)
if (m_unAFlags & (1 << 1))
oRes.WriteString(m_sContents);
if (m_unAFlags & (1 << 2))
oRes.AddDouble(m_dBE);
{
oRes.WriteBYTE(m_pBE.first);
oRes.AddDouble(m_pBE.second);
}
if (m_unAFlags & (1 << 3))
{
oRes.AddInt((unsigned int)m_arrC.size());

View File

@ -197,7 +197,7 @@ private:
unsigned int m_unRefNum; // Номер ссылки на объект
unsigned int m_unPage; // Страница
double m_pRect[4]; // Координаты
double m_dBE; // Эффекты границы
std::pair<BYTE, double> m_pBE; // Эффекты границы
std::string m_sContents; // Отображаемый текст
std::string m_sNM; // Уникальное имя
std::string m_sM; // Дата последнего изменения