Compare commits

..

5 Commits

8 changed files with 117 additions and 6 deletions

View File

@ -101,7 +101,7 @@ const bool MSODRAWINGGROUP::saveContent(BinProcessor& proc)
else
freeSpace = MaxRecSize;
size_t chunkSize = std::min(freeSpace, dataSize - filePtr);
size_t chunkSize = (std::min)(freeSpace, dataSize - filePtr);
XLS::Continue continueRec;

View File

@ -2281,6 +2281,17 @@ HRESULT CPdfWriter::AddAnnotField(NSFonts::IApplicationFonts* pAppFonts, CAnnotF
pArray->Add(dRD3 + oCropBox.fLeft);
pArray->Add(oCropBox.fTop - dRD2);
pStampAnnot->SetAPStream(pAP);
PdfWriter::CAnnotAppearance* pmAP = dynamic_cast<PdfWriter::CAnnotAppearance*>(pAnnot->Get("AP"));
if (pmAP)
{
PdfWriter::CAnnotAppearanceObject* pAP2 = pmAP->GetNormal();
if (pAP2 != pAP)
{
pAP2->Add("BBox", pArray->Copy());
pStampAnnot->SetAPStream(pAP2);
}
}
}
pStampAnnot->SetRotate(nRotate);
@ -4390,7 +4401,7 @@ PdfWriter::CAnnotAppearanceObject* CPdfWriter::DrawAP(PdfWriter::CAnnotation* pA
NSOnlineOfficeBinToPdf::ConvertBufferToRenderer(pRender, nLenRender, pCorrector);
RELEASEOBJECT(pCorrector);
pAnnot->APFromFakePage();
pAnnot->APFromFakePage(pAP);
m_pPage = pCurPage;
m_pDocument->SetCurPage(pCurPage);

View File

@ -349,7 +349,7 @@ namespace PdfWriter
pNormal->Add("Resources", pResources);
return pNormal;
}
void CAnnotation::APFromFakePage()
void CAnnotation::APFromFakePage(CAnnotAppearanceObject* pN)
{
if (!m_pAppearance)
return;
@ -357,6 +357,12 @@ namespace PdfWriter
pNormal->AddBBox(GetRect().fLeft, GetRect().fBottom, GetRect().fRight, GetRect().fTop);
pNormal->AddMatrix(1, 0, 0, 1, -GetRect().fLeft, -GetRect().fBottom);
if (pN != pNormal)
{
pN->AddBBox(GetRect().fLeft, GetRect().fBottom, GetRect().fRight, GetRect().fTop);
pN->AddMatrix(1, 0, 0, 1, 0, 0);
}
}
void CAnnotation::RemoveAP()
{
@ -1301,6 +1307,18 @@ namespace PdfWriter
CStream* pStream = pNormal->GetStream();
pStream->WriteEscapeName(sExtGrStateName);
pStream->WriteStr(" gs\012");
CResourcesDict* pResources2 = new CResourcesDict(m_pXref, false, false);
pNormal = new CAnnotAppearanceObject(m_pXref, this, pResources2);
const char* sForm = pResources->GetXObjectName(pNormal);
CDictObject* pTransparencyGroup = new CDictObject();
pTransparencyGroup->Add("Type", "Group");
pTransparencyGroup->Add("S", "Transparency");
pNormal->Add("Group", pTransparencyGroup);
pStream->WriteEscapeName(sForm);
pStream->WriteStr(" Do\012");
}
}

View File

@ -195,7 +195,7 @@ namespace PdfWriter
void SetC(const std::vector<double>& arrC);
void RemoveAP();
void APFromFakePage();
void APFromFakePage(CAnnotAppearanceObject* pN);
virtual CAnnotAppearanceObject* StartAP(int nRotate);
TRect& GetRect() { return m_oRect; }
void SetXref(CXref* pXref) { m_pXref = pXref; }

View File

@ -3105,6 +3105,14 @@ void RtfShapeReader::ShapePropertyReader::ShapePropertyValueReader::PopState( Rt
else if (L"borderLeftColor" == m_sPropName) m_oShape.m_nBorderLeftColor = nValue;
else if (L"borderBottomColor" == m_sPropName) m_oShape.m_nBorderBottomColor = nValue;
else if (L"borderRightColor" == m_sPropName) m_oShape.m_nBorderRightColor= nValue;
else if (L"fHorizRule" == m_sPropName) m_oShape.m_bHr = (nValue == 1);
else if (L"fStandardHR" == m_sPropName) m_oShape.m_bHrStd = (nValue == 1);
else if (L"alignHR" == m_sPropName) m_oShape.m_nHrAlign = nValue; // 0-left,1-center,2-right
else if (L"dxHeightHR" == m_sPropName) m_oShape.m_oPicture->m_nHeight = nValue;
else if (L"dxWidthHR" == m_sPropName) m_oShape.m_oPicture->m_nWidth = nValue;
else if (L"pctHR" == m_sPropName) m_oShape.m_nHrPct = nValue;
else if (L"fNoShadeHR" == m_sPropName) m_oShape.m_bHrNoShade = (nValue == 1);
else if ( L"cxstyle" == m_sPropName ) m_oShape.m_nConnectorStyle = nValue;
else if ( L"cxk" == m_sPropName ) m_oShape.m_nConnectionType = nValue;

View File

@ -240,6 +240,10 @@ void RtfShape::SetDefault()
DEFAULT_PROPERTY( m_nLineEndArrowLength )
DEFAULT_PROPERTY( m_nLineWidth )
DEFAULT_PROPERTY( m_nLineDashing )
DEFAULT_PROPERTY( m_nHrAlign )
DEFAULT_PROPERTY( m_nHrPct )
DEFAULT_PROPERTY( m_nHrHeight )
DEFAULT_PROPERTY( m_nHrWeight )
DEFAULT_PROPERTY( m_nGtextSize )
DEFAULT_PROPERTY( m_bGtext )
@ -258,6 +262,9 @@ void RtfShape::SetDefault()
m_bInGroup = false;
m_bIsGroup = false;
m_bIsOle = false;
m_bHr = false;
m_bHrNoShade = false;
m_bHrStd = false;
m_oCharProperty.SetDefault();
}
@ -344,13 +351,30 @@ std::wstring RtfShape::RenderToRtf(RenderParameter oRenderParameter)
sResult += L"}";
}
}
else if (m_bHr)
{
sResult+=L"{\\pict";
sResult+=L"{\\*\\picprop";
RENDER_RTF_INT( m_nID, sResult, L"shplid" );
if (m_nBottom != PROP_DEF)
{
sResult += L"{\\sp{\\sn dxHeightHR}{\\sv " + std::to_wstring(m_nBottom) + L"}}";
}
if (m_nRight != PROP_DEF)
{
sResult += L"{\\sp{\\sn dxWidthHR}{\\sv " + std::to_wstring(m_nRight) + L"}}";
}
sResult += RenderToRtfShapeProperty( oRenderParameter );
sResult += L"}";
sResult += L"}";
}
else
{
if (m_bBackground)
sResult += L"{\\*\\background";
sResult += L"{\\shp";
sResult += L"{\\*\\shpinst";
sResult += L"{\\shp";
sResult += L"{\\*\\shpinst";
if (!m_bInGroup)
{
@ -692,6 +716,12 @@ std::wstring RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter
RENDER_RTF_SHAPE_PROP(L"lineEndArrowLength", sResult, m_nLineEndArrowLength );
RENDER_RTF_SHAPE_PROP(L"lineWidth", sResult, m_nLineWidth );
RENDER_RTF_SHAPE_PROP(L"lineDashing", sResult, m_nLineDashing );
RENDER_RTF_SHAPE_PROP(L"alignHR", sResult, m_nHrAlign);
if (m_bHr)
sResult += L"{\\sp{\\sn fHorizRule}{\\sv 1}}";
if (m_bHrStd)
sResult += L"{\\sp{\\sn fStandardHR}{\\sv 1}}";
//pWrapPolygonVertices Points of the text wrap polygon.
if ( !m_aWrapPoints.empty())
@ -1256,6 +1286,29 @@ std::wstring RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
else
{
}
if (m_bHr)
{
sShapeStart += L" o:hr=\"t\"";
if (m_bHrStd)
sShapeStart += L" o:hrstd=\"t\"";
if (m_nHrAlign != PROP_DEF)
{
switch (m_nHrAlign)
{
case 0: sShapeStart += L" o:hralign=\"left\""; break;
case 1: sShapeStart += L" o:hralign=\"center\""; break;
case 2: sShapeStart += L" o:hralign=\"right\""; break;
}
}
if (m_bHrNoShade)
sShapeStart += L" o:hrnoshade=\"t\"";
if (m_nHrPct != PROP_DEF && m_nHrPct > 0)
sShapeStart += L" o:hrpct=\"" + std::to_wstring(m_nHrPct) + L"\"";
}
if (oRenderParameter.nType != RENDER_TO_OOX_PARAM_SHAPE_CHILD)
{

View File

@ -211,6 +211,13 @@ public:
int m_nLineEndArrowLength; //lineEndArrowLength End arrow length (for acceptable values see meaning for lineStartArrowLength).
int m_nLineWidth; //lineWidth Width of the line.
int m_nLineDashing;
bool m_bHr;
bool m_bHrStd;
int m_nHrAlign;
bool m_bHrNoShade;
int m_nHrPct;
int m_nHrHeight;
int m_nHrWeight;
//WordArt
std::wstring m_sGtextUNICODE;

View File

@ -1828,6 +1828,20 @@ bool OOXShapeReader::ParseVml(ReaderParameter oParam, RtfShapePtr& pOutput, bool
default: break;
}
}
if (m_vmlElement->m_oHr.IsInit())
pOutput->m_bHr = m_vmlElement->m_oHr.get();
if (m_vmlElement->m_oHrStd.IsInit())
pOutput->m_bHrStd = m_vmlElement->m_oHrStd.get();
if (m_vmlElement->m_oHrAlign.IsInit())
{
SimpleTypes::EHrAlign eVal = m_vmlElement->m_oHrAlign->GetValue();
switch (eVal)
{
case SimpleTypes::hralignLeft: pOutput->m_nHrAlign = 0; break;
case SimpleTypes::hralignCenter: pOutput->m_nHrAlign = 1; break;
case SimpleTypes::hralignRight: pOutput->m_nHrAlign = 2; break;
}
}
bool res = ParseVmlChild(oParam, pOutput);