Compare commits

..

2 Commits

Author SHA1 Message Date
f7922fcea8 . 2019-01-24 19:32:23 +03:00
84bd16951f Fix bug #39966
Fix the problem with embedding non-bolded fonts. Improve check whether the font is bold
2019-01-24 15:39:42 +03:00
7 changed files with 675 additions and 68 deletions

View File

@ -285,6 +285,22 @@ namespace OOX
L"",
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath");
const FileType ExternalLinkLibrary (L"", L"",
L"",
L"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlLibrary");
const FileType ExternalLinkPathMissing(L"", L"",
L"",
L"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing");
const FileType ExternalLinkPathStartup(L"", L"",
L"",
L"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlStartup");
const FileType ExternalLinkPathAlternateStartup(L"", L"",
L"",
L"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlAlternateStartup");
const FileType LegacyDiagramText (L"", L"legacyDiagramText.bin",
L"",
L"http://schemas.microsoft.com/office/2006/relationships/legacyDiagramText");

View File

@ -1076,7 +1076,13 @@ namespace OOX
et_x_Controls,
et_x_Control,
et_x_ControlPr,
et_x_OcxPr,
et_x_OcxPr,
et_x_QueryTable,
et_x_QueryTableField,
et_x_QueryTableFields,
et_x_QueryTableRefresh,
et_x_QueryTableDeletedFields,
et_x_QueryTableDeletedField,
et_x_TableParts,
et_x_TablePart,
et_x_Table,

View File

@ -89,35 +89,46 @@ namespace OOX
return smart_ptr<OOX::File>(new CWorksheet( pMain, oRootPath, oFileName, oRelation.rId().ToString() ));
else if ( oRelation.Type() == FileTypes::Table )
return smart_ptr<OOX::File>(new CTableFile( pMain, oRootPath, oFileName ));
else if ( oRelation.Type() == FileTypes::QueryTable )
return smart_ptr<OOX::File>(new CQueryTableFile( pMain, oRootPath, oFileName ));
else if ( oRelation.Type() == FileTypes::Comments )
return smart_ptr<OOX::File>(new CComments( pMain, oRootPath, oFileName ));
else if ( oRelation.Type() == FileTypes::WorkbookComments)
return smart_ptr<OOX::File>(new WorkbookComments( pMain, oRootPath, oFileName));
else if ( oRelation.Type() == FileTypes::ExternalLinks )
return smart_ptr<OOX::File>(new CExternalLink( pMain, oRootPath, oFileName ));
else if ( oRelation.Type() == OOX::FileTypes::Chart )
return smart_ptr<OOX::File>(new CChartSpace( pMain, oRootPath, oFileName ));
else if ( oRelation.Type() == OOX::FileTypes::ExternalLinkPath)
else if ( oRelation.Type() == OOX::FileTypes::ExternalLinkPath ||
oRelation.Type() == OOX::FileTypes::ExternalLinkPathMissing ||
oRelation.Type() == OOX::FileTypes::ExternalLinkPathStartup ||
oRelation.Type() == OOX::FileTypes::ExternalLinkPathAlternateStartup ||
oRelation.Type() == OOX::FileTypes::ExternalLinkLibrary)
{// https://msdn.microsoft.com/en-us/library/ff531845(v=office.12).aspx
return smart_ptr<OOX::File>(new ExternalLinkPath( pMain, oRelation.Target()));
else if ( oRelation.Type() == FileTypes::WorkbookComments)
return smart_ptr<OOX::File>(new WorkbookComments( pMain, oRootPath, oFileName));
//common
//else if ( oRelation.Type() == OOX::FileTypes::ChartDrawing)
// return smart_ptr<OOX::File>(new CChartDrawing( pMain, oRootPath, oFileName ));
//else if ( oRelation.Type() == OOX::FileTypes::VmlDrawing )
// return smart_ptr<OOX::File>(new CVmlDrawing( oRootPath, oFileName ));
//else if ( oRelation.Type() == OOX::FileTypes::Theme )
// return smart_ptr<OOX::File>(new PPTX::Theme( oFileName ));
//else if ( oRelation.Type() == OOX::FileTypes::Image )
// return smart_ptr<OOX::File>(new Image( oFileName ));
//else if ( oRelation.Type() == OOX::FileTypes::ThemeOverride )
// return smart_ptr<OOX::File>(new PPTX::Theme( oFileName ));
//else if ( oRelation.Type() == OOX::FileTypes::OleObject)
// return smart_ptr<OOX::File>(new OOX::OleObject( oFileName ));
//else if ( oRelation.Type() == OOX::FileTypes::Data)
// return smart_ptr<OOX::File>(new OOX::CDiagramData( oRootPath, oFileName ));
//else if ( oRelation.Type() == OOX::FileTypes::DiagDrawing)
// return smart_ptr<OOX::File>(new OOX::CDiagramDrawing( oRootPath, oFileName ));
//else if ( oRelation.Type() == OOX::FileTypes::MicrosoftOfficeUnknown) //ms package
// return smart_ptr<OOX::File>(new OOX::OleObject( oFileName, true ));
}
else if ( oRelation.Type() == OOX::FileTypes::OleObject)
{
if (oRelation.IsExternal())
{
return smart_ptr<OOX::File>(new OOX::OleObject( pMain, oRelationFilename ));
}
else
{
return smart_ptr<OOX::File>(new OOX::OleObject( pMain, oFileName ));
}
}
else if ( oRelation.Type() == OOX::FileTypes::Data)
return smart_ptr<OOX::File>(new OOX::CDiagramData( pMain, oRootPath, oFileName ));
else if ( oRelation.Type() == OOX::FileTypes::DiagDrawing)
return smart_ptr<OOX::File>(new OOX::CDiagramDrawing( pMain, oRootPath, oFileName ));
else if ( oRelation.Type() == OOX::FileTypes::MicrosoftOfficeUnknown) //ms package
return smart_ptr<OOX::File>(new OOX::OleObject( pMain, oFileName, true ));
else if ( oRelation.Type() == OOX::FileTypes::ActiveX_xml)
return smart_ptr<OOX::File>(new OOX::ActiveX_xml( pMain, oRootPath, oFileName ));
else if ( oRelation.Type() == OOX::FileTypes::ActiveX_bin)
return smart_ptr<OOX::File>(new OOX::ActiveX_bin( pMain, oFileName ));
return smart_ptr<OOX::File>( new UnknowTypeFile(pMain) );
}
@ -171,6 +182,8 @@ namespace OOX
return smart_ptr<OOX::File>(new CWorksheet( pMain, oRootPath, oFileName, pRelation->rId().ToString() ));
else if ( pRelation->Type() == FileTypes::Table )
return smart_ptr<OOX::File>(new CTableFile( pMain, oRootPath, oFileName ));
else if ( pRelation->Type() == FileTypes::QueryTable )
return smart_ptr<OOX::File>(new CQueryTableFile( pMain, oRootPath, oFileName ));
else if ( pRelation->Type() == OOX::FileTypes::VmlDrawing )
return smart_ptr<OOX::File>(new CVmlDrawing( pMain, oRootPath, oFileName ));
else if ( pRelation->Type() == OOX::FileTypes::ChartDrawing)
@ -181,8 +194,14 @@ namespace OOX
return smart_ptr<OOX::File>(new CChartSpace( pMain, oRootPath, oFileName ));
else if ( pRelation->Type() == FileTypes::ExternalLinks )
return smart_ptr<OOX::File>(new CExternalLink( pMain, oRootPath, oFileName ));
else if ( pRelation->Type() == OOX::FileTypes::ExternalLinkPath)
else if ( pRelation->Type() == OOX::FileTypes::ExternalLinkPath ||
pRelation->Type() == OOX::FileTypes::ExternalLinkPathMissing ||
pRelation->Type() == OOX::FileTypes::ExternalLinkPathStartup ||
pRelation->Type() == OOX::FileTypes::ExternalLinkPathAlternateStartup ||
pRelation->Type() == OOX::FileTypes::ExternalLinkLibrary )
{// https://msdn.microsoft.com/en-us/library/ff531845(v=office.12).aspx)
return smart_ptr<OOX::File>(new ExternalLinkPath( pMain, oRelationFilename ));
}
else if ( pRelation->Type() == OOX::FileTypes::OleObject)
{
if (pRelation->IsExternal())

View File

@ -82,6 +82,11 @@ namespace OOX
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table",
L"tables/table", true, true);
const FileType QueryTable (L"../queryTables", L"queryTable.xml",
L"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml",
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/queryTable",
L"queryTables/table", true, true);
const FileType Drawings (L"../drawings", L"drawing.xml",
L"application/vnd.openxmlformats-officedocument.drawing+xml",
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",

View File

@ -152,11 +152,11 @@ namespace OOX
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("name"), m_oName )
WritingElement_ReadAttributes_Read_if ( oReader, _T("showColumnStripes"), m_oShowColumnStripes )
WritingElement_ReadAttributes_Read_if ( oReader, _T("showFirstColumn"), m_oShowFirstColumn )
WritingElement_ReadAttributes_Read_if ( oReader, _T("showLastColumn"), m_oShowLastColumn )
WritingElement_ReadAttributes_Read_if ( oReader, _T("showRowStripes"), m_oShowRowStripes )
WritingElement_ReadAttributes_Read_if ( oReader, _T("name"), m_oName )
WritingElement_ReadAttributes_Read_if ( oReader, _T("showColumnStripes"), m_oShowColumnStripes )
WritingElement_ReadAttributes_Read_if ( oReader, _T("showFirstColumn"), m_oShowFirstColumn )
WritingElement_ReadAttributes_Read_if ( oReader, _T("showLastColumn"), m_oShowLastColumn )
WritingElement_ReadAttributes_Read_if ( oReader, _T("showRowStripes"), m_oShowRowStripes )
WritingElement_ReadAttributes_End( oReader )
}
@ -354,36 +354,36 @@ namespace OOX
}
virtual void toXML2(NSStringUtils::CStringBuilder& writer, int nIndex) const
{
if(m_oRef.IsInit() && m_oDisplayName.IsInit())
{
writer.WriteString(L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><table xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"");
WritingStringAttrInt(L"id", nIndex);
WritingStringAttrEncodeXmlString(L"name", m_oDisplayName.get());
WritingStringAttrEncodeXmlString(L"displayName", m_oDisplayName.get());
WritingStringAttrString(L"ref", m_oRef->ToString());
if(m_oHeaderRowCount.IsInit() && 0 == m_oHeaderRowCount->GetValue())
writer.WriteString(L" headerRowCount=\"0\"");
if(m_oTotalsRowCount.IsInit() && m_oTotalsRowCount->GetValue() > 0)
writer.WriteString(L" totalsRowCount=\"1\"");
else
writer.WriteString(L" totalsRowShown=\"0\"");
WritingStringNullableAttrInt(L"tableBorderDxfId", m_oTableBorderDxfId, m_oTableBorderDxfId->GetValue());
writer.WriteString(L">");
if(false == m_oRef.IsInit() || false == m_oDisplayName.IsInit()) return;
writer.WriteString(L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\
<table xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"");
WritingStringAttrInt(L"id", nIndex);
WritingStringAttrEncodeXmlString(L"name", m_oDisplayName.get());
WritingStringAttrEncodeXmlString(L"displayName", m_oDisplayName.get());
WritingStringAttrString(L"ref", m_oRef->ToString());
if(m_oHeaderRowCount.IsInit() && 0 == m_oHeaderRowCount->GetValue())
writer.WriteString(L" headerRowCount=\"0\"");
if(m_oTotalsRowCount.IsInit() && m_oTotalsRowCount->GetValue() > 0)
writer.WriteString(L" totalsRowCount=\"1\"");
else
writer.WriteString(L" totalsRowShown=\"0\"");
WritingStringNullableAttrInt(L"tableBorderDxfId", m_oTableBorderDxfId, m_oTableBorderDxfId->GetValue());
writer.WriteString(L">");
if(m_oAutoFilter.IsInit())
m_oAutoFilter->toXML(writer);
if(m_oSortState.IsInit())
m_oSortState->toXML(writer);
if(m_oTableColumns.IsInit())
m_oTableColumns->toXML(writer);
if(m_oTableStyleInfo.IsInit())
m_oTableStyleInfo->toXML(writer);
if(m_oExtLst.IsInit())
{
writer.WriteString(m_oExtLst->toXMLWithNS(_T("")));
}
writer.WriteString(L"</table>");
if(m_oAutoFilter.IsInit())
m_oAutoFilter->toXML(writer);
if(m_oSortState.IsInit())
m_oSortState->toXML(writer);
if(m_oTableColumns.IsInit())
m_oTableColumns->toXML(writer);
if(m_oTableStyleInfo.IsInit())
m_oTableStyleInfo->toXML(writer);
if(m_oExtLst.IsInit())
{
writer.WriteString(m_oExtLst->toXMLWithNS(_T("")));
}
writer.WriteString(L"</table>");
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
@ -418,14 +418,13 @@ namespace OOX
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
// Читаем атрибуты
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("ref"), m_oRef )
WritingElement_ReadAttributes_Read_if ( oReader, _T("headerRowCount"), m_oHeaderRowCount )
WritingElement_ReadAttributes_Read_if ( oReader, _T("totalsRowCount"), m_oTotalsRowCount )
WritingElement_ReadAttributes_Read_if ( oReader, _T("displayName"), m_oDisplayName )
WritingElement_ReadAttributes_Read_if ( oReader, _T("tableBorderDxfId"), m_oTableBorderDxfId )
WritingElement_ReadAttributes_Read_if ( oReader, _T("ref"), m_oRef )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("headerRowCount"), m_oHeaderRowCount )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("totalsRowCount"), m_oTotalsRowCount )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("displayName"), m_oDisplayName )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("tableBorderDxfId"), m_oTableBorderDxfId )
WritingElement_ReadAttributes_End( oReader )
}
@ -433,7 +432,7 @@ namespace OOX
nullable<SimpleTypes::CRelationshipId > m_oRef;
nullable<SimpleTypes::CUnsignedDecimalNumber<> > m_oHeaderRowCount;
nullable<SimpleTypes::CUnsignedDecimalNumber<> > m_oTotalsRowCount;
nullable<std::wstring > m_oDisplayName;
nullable<std::wstring > m_oDisplayName;
nullable<SimpleTypes::CUnsignedDecimalNumber<> > m_oTableBorderDxfId;
nullable<CAutofilter > m_oAutoFilter;
@ -582,8 +581,6 @@ namespace OOX
virtual ~CTableFile()
{
}
public:
virtual void read(const CPath& oPath)
{
//don't use this. use read(const CPath& oRootPath, const CPath& oFilePath)
@ -645,6 +642,564 @@ namespace OOX
{
}
};
//-------------------------------------------------------------------------------------------------
class CQueryTableField : public WritingElement
{
public:
WritingElement_AdditionConstructors(CQueryTableField)
CQueryTableField(){}
virtual ~CQueryTableField() {}
virtual void fromXML(XmlUtils::CXmlNode& node)
{
}
virtual std::wstring toXML() const
{
return L"";
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
{
writer.WriteString(L"<queryTableField");
WritingStringNullableAttrEncodeXmlString(L"name", m_oName, m_oName.get());
WritingStringNullableAttrInt(L"id", m_oId, m_oId->GetValue());
WritingStringNullableAttrInt(L"tableColumnId", m_oTableColumnId, m_oTableColumnId->GetValue());
if (m_oRowNumbers.IsInit()) WritingStringAttrString(L"rowNumbers", *m_oRowNumbers ? L"1" : L"0");
if (m_oFillFormulas.IsInit()) WritingStringAttrString(L"fillFormulas",*m_oFillFormulas ? L"1" : L"0");
if (m_oDataBound.IsInit()) WritingStringAttrString(L"dataBound", *m_oDataBound ? L"1" : L"0");
if (m_oClipped.IsInit()) WritingStringAttrString(L"clipped", *m_oClipped ? L"1" : L"0");
writer.WriteString(L"/>");
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
if ( oReader.IsEmptyNode() )
return;
int nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) )
{
std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName());
if (_T("extLst") == sName)
m_oExtLst = oReader;
}
}
virtual EElementType getType () const
{
return et_x_QueryTableField;
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("id"), m_oId )
WritingElement_ReadAttributes_Read_if ( oReader, _T("tableColumnId"), m_oTableColumnId )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("name"), m_oName )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("rowNumbers"), m_oRowNumbers )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("fillFormulas"), m_oFillFormulas )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("dataBound"), m_oDataBound )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("clipped"), m_oClipped )
WritingElement_ReadAttributes_End( oReader )
}
nullable<SimpleTypes::CUnsignedDecimalNumber<>> m_oId;
nullable<SimpleTypes::CUnsignedDecimalNumber<>> m_oTableColumnId;
nullable<std::wstring> m_oName;
nullable_bool m_oRowNumbers;
nullable_bool m_oFillFormulas;
nullable_bool m_oDataBound;
nullable_bool m_oClipped;
nullable<OOX::Drawing::COfficeArtExtensionList> m_oExtLst;
};
class CQueryTableFields : public WritingElementWithChilds<CQueryTableField>
{
public:
WritingElement_AdditionConstructors(CQueryTableFields)
CQueryTableFields(){}
virtual ~CQueryTableFields() {}
virtual void fromXML(XmlUtils::CXmlNode& node)
{
}
virtual std::wstring toXML() const
{
return _T("");
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
{
if(m_arrItems.empty()) return;
writer.WriteString(L"<queryTableFields");
WritingStringAttrInt(L"count", (int)m_arrItems.size());
writer.WriteString(L">");
for ( size_t i = 0; i < m_arrItems.size(); ++i)
{
if ( m_arrItems[i] )
{
m_arrItems[i]->toXML(writer);
}
}
writer.WriteString(L"</queryTableFields>");
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
if ( oReader.IsEmptyNode() )
return;
int nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) )
{
std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName());
if ( L"queryTableField" == sName )
m_arrItems.push_back(new CQueryTableField(oReader));
}
}
virtual EElementType getType () const
{
return et_x_QueryTableFields;
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("count"), m_oCount )
WritingElement_ReadAttributes_End( oReader )
}
nullable<SimpleTypes::CUnsignedDecimalNumber<> > m_oCount;
};
class CQueryTableDeletedField : public WritingElement
{
public:
WritingElement_AdditionConstructors(CQueryTableDeletedField)
CQueryTableDeletedField(){}
virtual ~CQueryTableDeletedField() {}
virtual void fromXML(XmlUtils::CXmlNode& node)
{
}
virtual std::wstring toXML() const
{
return L"";
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
{
writer.WriteString(L"<deletedField");
WritingStringNullableAttrEncodeXmlString(L"name", m_oName, m_oName.get());
writer.WriteString(L"/>");
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
}
virtual EElementType getType () const
{
return et_x_QueryTableDeletedField;
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("name"), m_oName )
WritingElement_ReadAttributes_End( oReader )
}
nullable<std::wstring> m_oName;
};
class CQueryTableDeletedFields : public WritingElementWithChilds<CQueryTableDeletedField>
{
public:
WritingElement_AdditionConstructors(CQueryTableDeletedFields)
CQueryTableDeletedFields(){}
virtual ~CQueryTableDeletedFields() {}
virtual void fromXML(XmlUtils::CXmlNode& node)
{
}
virtual std::wstring toXML() const
{
return _T("");
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
{
if(m_arrItems.empty()) return;
writer.WriteString(L"<queryTableDeletedFields");
WritingStringAttrInt(L"count", (int)m_arrItems.size());
writer.WriteString(L">");
for ( size_t i = 0; i < m_arrItems.size(); ++i)
{
if ( m_arrItems[i] )
{
m_arrItems[i]->toXML(writer);
}
}
writer.WriteString(L"</queryTableDeletedFields>");
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
if ( oReader.IsEmptyNode() )
return;
int nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) )
{
std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName());
if ( L"deletedField" == sName )
m_arrItems.push_back(new CQueryTableDeletedField(oReader));
}
}
virtual EElementType getType () const
{
return et_x_QueryTableFields;
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("count"), m_oCount )
WritingElement_ReadAttributes_End( oReader )
}
nullable<SimpleTypes::CUnsignedDecimalNumber<> > m_oCount;
};
class CQueryTableRefresh : public WritingElement
{
public:
WritingElement_AdditionConstructors(CQueryTableRefresh)
CQueryTableRefresh(){}
virtual ~CQueryTableRefresh() {}
virtual void fromXML(XmlUtils::CXmlNode& node)
{
}
virtual std::wstring toXML() const
{
return L"";
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
{
writer.WriteString(L"<queryTableRefresh");
WritingStringNullableAttrInt(L"nextId", m_oNextId, m_oNextId->GetValue());
WritingStringNullableAttrInt(L"unboundColumnsLeft", m_UnboundColumnsLeft, m_UnboundColumnsLeft->GetValue());
WritingStringNullableAttrInt(L"unboundColumnsRight", m_UnboundColumnsRight, m_UnboundColumnsRight->GetValue());
if (m_FieldIdWrapped.IsInit()) WritingStringAttrString(L"fieldIdWrapped", *m_FieldIdWrapped ? L"1" : L"0");
if (m_HeadersInLastRefresh.IsInit()) WritingStringAttrString(L"headersInLastRefresh", *m_HeadersInLastRefresh ? L"1" : L"0");
if (m_PreserveSortFilterLayout.IsInit())WritingStringAttrString(L"preserveSortFilterLayout", *m_PreserveSortFilterLayout ? L"1" : L"0");
if (m_oMinimumVersion.IsInit()) WritingStringAttrInt(L"minimumVersion", m_oMinimumVersion->GetValue());
writer.WriteString(L">");
if (m_oQueryTableFields.IsInit())
m_oQueryTableFields->toXML(writer);
if (m_oQueryTableDeletedFields.IsInit())
m_oQueryTableDeletedFields->toXML(writer);
if (m_oSortState.IsInit())
m_oSortState->toXML(writer);
writer.WriteString(L"</queryTableRefresh");
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
if ( oReader.IsEmptyNode() )
return;
int nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) )
{
std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName());
if (_T("queryTableFields") == sName)
m_oQueryTableFields = oReader;
else if (_T("queryTableDeletedFields") == sName)
m_oQueryTableDeletedFields = oReader;
else if (_T("sortState") == sName)
m_oSortState = oReader;
else if (_T("extLst") == sName)
m_oExtLst = oReader;
}
}
virtual EElementType getType () const
{
return et_x_QueryTableRefresh;
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("id"), m_oNextId )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("minimumVersion"), m_oMinimumVersion )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("fieldIdWrapped"), m_FieldIdWrapped )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("headersInLastRefresh"), m_HeadersInLastRefresh )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("preserveSortFilterLayout"), m_PreserveSortFilterLayout )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("unboundColumnsLeft"), m_UnboundColumnsLeft )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("unboundColumnsRight"), m_UnboundColumnsRight )
WritingElement_ReadAttributes_End( oReader )
}
nullable<SimpleTypes::CUnsignedDecimalNumber<>> m_oNextId;
nullable<SimpleTypes::CUnsignedDecimalNumber<>> m_oMinimumVersion;
nullable_bool m_FieldIdWrapped;
nullable_bool m_HeadersInLastRefresh;
nullable_bool m_PreserveSortFilterLayout;
nullable<SimpleTypes::CUnsignedDecimalNumber<>> m_UnboundColumnsLeft;
nullable<SimpleTypes::CUnsignedDecimalNumber<>> m_UnboundColumnsRight;
nullable<CQueryTableFields> m_oQueryTableFields;
nullable<CQueryTableDeletedFields> m_oQueryTableDeletedFields;
nullable<CSortState> m_oSortState;
nullable<OOX::Drawing::COfficeArtExtensionList> m_oExtLst;
};
class CQueryTable : public WritingElement
{
public:
WritingElement_AdditionConstructors(CQueryTable)
CQueryTable()
{
}
virtual ~CQueryTable()
{
}
virtual void fromXML(XmlUtils::CXmlNode& node)
{
}
virtual std::wstring toXML() const
{
return L"";
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
{
}
virtual void toXML2(NSStringUtils::CStringBuilder& writer, int nIndex) const
{
if(false == m_oName.IsInit()) return;
writer.WriteString(L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\
<queryTable \
xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" \
xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \
mc:Ignorable=\"xr16\" \
xmlns:xr16=\"http://schemas.microsoft.com/office/spreadsheetml/2017/revision16\"");
if (m_oAdjustColumnWidth.IsInit()) WritingStringAttrString(L"adjustColumnWidth", *m_oAdjustColumnWidth ? L"1" : L"0");
if (m_oApplyAlignmentFormats.IsInit()) WritingStringAttrString(L"applyAlignmentFormats", *m_oApplyAlignmentFormats ? L"1" : L"0");
if (m_oApplyBorderFormats.IsInit()) WritingStringAttrString(L"applyBorderFormats", *m_oApplyBorderFormats ? L"1" : L"0");
if (m_oApplyFontFormats.IsInit()) WritingStringAttrString(L"applyFontFormats", *m_oApplyFontFormats ? L"1" : L"0");
if (m_oApplyNumberFormats.IsInit()) WritingStringAttrString(L"applyNumberFormats", *m_oApplyNumberFormats ? L"1" : L"0");
if (m_oApplyPatternFormats.IsInit()) WritingStringAttrString(L"applyPatternFormats", *m_oApplyPatternFormats ? L"1" : L"0");
if (m_oApplyWidthHeightFormats.IsInit()) WritingStringAttrString(L"applyWidthHeightFormats", *m_oApplyWidthHeightFormats ? L"1" : L"0");
if (m_oBackgroundRefresh.IsInit()) WritingStringAttrString(L"backgroundRefresh", *m_oBackgroundRefresh ? L"1" : L"0");
WritingStringNullableAttrEncodeXmlString(L"name", m_oName, m_oName.get());
WritingStringNullableAttrInt(L"connectionId", m_oConnectionId, m_oConnectionId->GetValue());
WritingStringNullableAttrInt(L"autoFormatId", m_oAutoFormatId, m_oAutoFormatId->GetValue());
if (m_oDisableEdit.IsInit()) WritingStringAttrString(L"disableEdit", *m_oDisableEdit ? L"1" : L"0");
if (m_oDisableRefresh.IsInit()) WritingStringAttrString(L"disableRefresh", *m_oDisableRefresh ? L"1" : L"0");
if (m_oFillFormulas.IsInit()) WritingStringAttrString(L"fillFormulas", *m_oFillFormulas ? L"1" : L"0");
if (m_oFirstBackgroundRefresh.IsInit()) WritingStringAttrString(L"firstBackgroundRefresh", *m_oFirstBackgroundRefresh ? L"1" : L"0");
WritingStringNullableAttrEncodeXmlString(L"growShrinkType", m_oGrowShrinkType, m_oGrowShrinkType.get());
if (m_oHeaders.IsInit()) WritingStringAttrString(L"headers", *m_oHeaders ? L"1" : L"0");
if (m_oIntermediate.IsInit()) WritingStringAttrString(L"intermediate", *m_oIntermediate ? L"1" : L"0");
if (m_oPreserveFormatting.IsInit()) WritingStringAttrString(L"preserveFormatting", *m_oPreserveFormatting ? L"1" : L"0");
if (m_oRefreshOnLoad.IsInit()) WritingStringAttrString(L"refreshOnLoad", *m_oRefreshOnLoad ? L"1" : L"0");
if (m_oRemoveDataOnSave.IsInit()) WritingStringAttrString(L"removeDataOnSave", *m_oRemoveDataOnSave ? L"1" : L"0");
if (m_oRowNumbers.IsInit()) WritingStringAttrString(L"rowNumbers", *m_oRowNumbers ? L"1" : L"0");
writer.WriteString(L">");
if(m_oQueryTableRefresh.IsInit())
m_oQueryTableRefresh->toXML(writer);
if(m_oExtLst.IsInit())
{
writer.WriteString(m_oExtLst->toXMLWithNS(_T("")));
}
writer.WriteString(L"</queryTable>");
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
if ( oReader.IsEmptyNode() )
return;
int nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) )
{
std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName());
if ( _T("queryTableRefresh") == sName )
m_oQueryTableRefresh = oReader;
else if (_T("extLst") == sName)
m_oExtLst = oReader;
}
}
virtual EElementType getType () const
{
return et_x_QueryTable;
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, L"adjustColumnWidth", m_oAdjustColumnWidth )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"applyAlignmentFormats", m_oApplyAlignmentFormats )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"applyBorderFormats", m_oApplyBorderFormats )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"applyFontFormats", m_oApplyFontFormats )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"applyNumberFormats", m_oApplyNumberFormats )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"applyPatternFormats", m_oApplyPatternFormats )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"applyWidthHeightFormats", m_oApplyWidthHeightFormats )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"autoFormatId", m_oAutoFormatId )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"backgroundRefresh", m_oBackgroundRefresh )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"connectionId", m_oConnectionId )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"disableEdit", m_oDisableEdit )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"disableRefresh", m_oDisableRefresh )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"fillFormulas", m_oFillFormulas )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"firstBackgroundRefresh",m_oFirstBackgroundRefresh )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"growShrinkType", m_oGrowShrinkType )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"headers", m_oHeaders )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"intermediate", m_oIntermediate )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"name", m_oName )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"preserveFormatting", m_oPreserveFormatting )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"refreshOnLoad", m_oRefreshOnLoad )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"removeDataOnSave", m_oRemoveDataOnSave )
WritingElement_ReadAttributes_Read_else_if ( oReader, L"rowNumbers", m_oRowNumbers )
WritingElement_ReadAttributes_End( oReader )
}
nullable_bool m_oAdjustColumnWidth;
nullable_bool m_oApplyAlignmentFormats;
nullable_bool m_oApplyBorderFormats;
nullable_bool m_oApplyFontFormats;
nullable_bool m_oApplyNumberFormats;
nullable_bool m_oApplyPatternFormats;
nullable_bool m_oApplyWidthHeightFormats;
nullable_bool m_oBackgroundRefresh;
nullable<SimpleTypes::CUnsignedDecimalNumber<>> m_oAutoFormatId;
nullable<SimpleTypes::CUnsignedDecimalNumber<>> m_oConnectionId;
nullable_bool m_oDisableEdit;
nullable_bool m_oDisableRefresh;
nullable_bool m_oFillFormulas;
nullable_bool m_oFirstBackgroundRefresh;
nullable_string m_oGrowShrinkType;
nullable_bool m_oHeaders;
nullable_bool m_oIntermediate;
nullable_string m_oName;
nullable_bool m_oPreserveFormatting;
nullable_bool m_oRefreshOnLoad;
nullable_bool m_oRemoveDataOnSave;
nullable_bool m_oRowNumbers;
nullable<CQueryTableRefresh> m_oQueryTableRefresh;
nullable<OOX::Drawing::COfficeArtExtensionList> m_oExtLst;
};
class CQueryTableFile : public OOX::FileGlobalEnumerated, public OOX::IFileContainer
{
public:
CQueryTableFile(OOX::Document* pMain) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain)
{
m_bSpreadsheets = true;
}
CQueryTableFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain)
{
m_bSpreadsheets = true;
read( oRootPath, oPath );
}
virtual ~CQueryTableFile()
{
}
virtual void read(const CPath& oPath)
{
//don't use this. use read(const CPath& oRootPath, const CPath& oFilePath)
CPath oRootPath;
read(oRootPath, oPath);
}
virtual void read(const CPath& oRootPath, const CPath& oPath)
{
m_oReadPath = oPath;
IFileContainer::Read( oRootPath, oPath );
XmlUtils::CXmlLiteReader oReader;
if ( !oReader.FromFile( oPath.GetPath() ) )
return;
if ( !oReader.ReadNextNode() )
return;
m_oQueryTable = oReader;
}
virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const
{
if(false == m_oQueryTable.IsInit()) return;
NSStringUtils::CStringBuilder sXml;
int nGlobalNumber = OOX::FileGlobalEnumerated::GetGlobalNumber();
m_oQueryTable->toXML2(sXml, nGlobalNumber);
std::wstring sPath = oPath.GetPath();
NSFile::CFileBinary::SaveToFile(sPath, sXml.GetData());
oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() );
IFileContainer::Write( oPath, oDirectory, oContent );
}
virtual const OOX::FileType type() const
{
return OOX::Spreadsheet::FileTypes::QueryTable;
}
virtual const CPath DefaultDirectory() const
{
return type().DefaultDirectory();
}
virtual const CPath DefaultFileName() const
{
return type().DefaultFileName();
}
const CPath& GetReadPath()
{
return m_oReadPath;
}
nullable<CQueryTable> m_oQueryTable;
private:
CPath m_oReadPath;
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
}
};
} //Spreadsheet
} // namespace OOX

View File

@ -1850,6 +1850,10 @@ bool CFontFile::IsBold()
if (!m_pFace)
return false;
TT_OS2* pOS2 = (TT_OS2*)FT_Get_Sfnt_Table(m_pFace, ft_sfnt_os2);
if (pOS2 && pOS2->version != 0xFFFF && pOS2->usWeightClass >= 800)
return true;
return ((m_pFace->style_flags & FT_STYLE_FLAG_BOLD) != 0) ? true : false;
}

View File

@ -383,14 +383,16 @@ void CPdfRenderer::CCommandManager::Flush()
oTextLine.Flush(pPage);
lTextColor = pText->GetColor();
TColor oColor = lTextColor;
pPage->SetFillColor(oColor.r, oColor.g, oColor.b);
pPage->SetFillColor(oColor.r, oColor.g, oColor.b);
pPage->SetStrokeColor(oColor.r, oColor.g, oColor.b);
}
if (nTextAlpha != pText->GetAlpha())
{
oTextLine.Flush(pPage);
nTextAlpha = pText->GetAlpha();
pPage->SetFillAlpha(nTextAlpha);
pPage->SetFillAlpha(nTextAlpha);
pPage->SetStrokeAlpha(nTextAlpha);
}
if (fabs(dTextSpace - pText->GetSpace()) > 0.001)