23#include <rtl/ustring.hxx>
24#include <osl/diagnose.h>
31#include <com/sun/star/uno/Reference.h>
32#include <com/sun/star/container/XEnumeration.hpp>
33#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
34#include <com/sun/star/drawing/XShape.hpp>
35#include <com/sun/star/text/XText.hpp>
36#include <com/sun/star/text/XTextContent.hpp>
37#include <com/sun/star/text/XTextRange.hpp>
38#include <com/sun/star/svg/XSVGWriter.hpp>
42#include <unordered_map>
44namespace basegfx {
class BColorStops; }
51using namespace ::com::sun::star::svg;
54inline constexpr OUStringLiteral
SVG_DTD_STRING =
u"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">";
56#define SVGWRITER_WRITE_FILL 0x00000001
57#define SVGWRITER_WRITE_TEXT 0x00000002
58#define SVGWRITER_NO_SHAPE_COMMENTS 0x01000000
98 :
meFlags( aPartialState.meFlags )
99 ,
mupFont( std::move( aPartialState.mupFont ) )
103 aPartialState.mnRegionClipPathId = 0;
148 void AddColorAttr(
const OUString& pColorAttrName,
const OUString& pColorOpacityAttrName,
const Color& rColor );
246 sal_uInt32 nWriteFlags);
264 template<
typename MetaBitmapActionType >
274 OSL_FAIL(
"SVGTextWriter::setVirtualDevice: invalid virtual device." );
292 template<
typename SubType >
294 template<
typename SubType >
338 bool bApplyMapping =
true );
354 sal_uInt32 nWriteFlags,
355 const OUString& aElementId,
356 const Reference< css::drawing::XShape >* pXShape =
nullptr,
357 const GDIMetaFile* pTextEmbeddedBitmapMtf =
nullptr );
371 const Size& rSize100thmm,
373 sal_uInt32 nWriteFlags,
374 const OUString& aElementId =
"",
375 const Reference< css::drawing::XShape >* pXShape =
nullptr,
376 const GDIMetaFile* pTextEmbeddedBitmapMtf =
nullptr );
380 sal_uInt32 nWriteFlags,
const basegfx::BColorStops* pColorStops, OUString* pTextStyle =
nullptr);
385class SVGWriter :
public cppu::WeakImplHelper< XSVGWriter, XServiceInfo >
392 explicit SVGWriter(
const Sequence<Any>& args,
393 const Reference< XComponentContext >& rxCtx );
397 virtual void SAL_CALL
write(
const Reference<XDocumentHandler>& rxDocHandler,
398 const Sequence<sal_Int8>& rMtfSeq )
override;
sal_uInt64 BitmapChecksum
const MetaBitmapActionMap * mpEmbeddedBitmapsMap
sal_Int32 mnCurClipPathId
tools::Long ImplMap(sal_Int32 nVal) const
void ImplWritePattern(const tools::PolyPolygon &rPolyPoly, const Hatch *pHatch, const Gradient *pGradient, sal_uInt32 nWriteFlags)
void ImplCreateClipPathDef(const tools::PolyPolygon &rPolyPoly)
static Color ImplGetColorWithIntensity(const Color &rColor, sal_uInt16 nIntensity)
::std::unique_ptr< SvXMLElementExport > mpCurrentClipRegionElem
void ImplWriteBmp(const BitmapEx &rBmpEx, const Point &rPt, const Size &rSz, const Point &rSrcPt, const Size &rSrcSz, const css::uno::Reference< css::drawing::XShape > *pShape)
SVGTextWriter maTextWriter
void ImplWriteGradientLinear(const tools::PolyPolygon &rPolyPoly, const Gradient &rGradient, const basegfx::BColorStops *pColorStops)
void ImplWriteText(const Point &rPos, const OUString &rText, KernArraySpan pDXArray, tools::Long nWidth)
void ImplWriteActions(const GDIMetaFile &rMtf, sal_uInt32 nWriteFlags, const OUString &aElementId, const Reference< css::drawing::XShape > *pXShape=nullptr, const GDIMetaFile *pTextEmbeddedBitmapMtf=nullptr)
void ImplWriteShape(const SVGShapeDescriptor &rShape)
void ImplWriteGradientStop(const Color &rColor, double fOffset)
void ImplWriteLine(const Point &rPt1, const Point &rPt2, const Color *pLineColor=nullptr)
void ImplStartClipRegion(sal_Int32 nClipPathId)
void WriteMetaFile(const Point &rPos100thmm, const Size &rSize100thmm, const GDIMetaFile &rMtf, sal_uInt32 nWriteFlags, const OUString &aElementId="", const Reference< css::drawing::XShape > *pXShape=nullptr, const GDIMetaFile *pTextEmbeddedBitmapMtf=nullptr)
void ImplAddLineAttr(const LineInfo &rAttrs)
void SetEmbeddedBitmapRefs(const MetaBitmapActionMap *pEmbeddedBitmapsMap)
sal_Int32 mnCurGradientId
void ImplWriteGradientEx(const tools::PolyPolygon &rPolyPoly, const Gradient &rGradient, sal_uInt32 nWriteFlags, const basegfx::BColorStops *pColorStops)
SVGContextHandler maContextHandler
static OUString GetPathString(const tools::PolyPolygon &rPolyPoly, bool bLine)
void ImplWritePolyPolygon(const tools::PolyPolygon &rPolyPoly, bool bLineOnly, bool bApplyMapping=true)
::std::unique_ptr< SVGShapeDescriptor > mapCurShape
void ImplWriteRect(const tools::Rectangle &rRect, tools::Long nRadX=0, tools::Long nRadY=0)
void ImplWriteMask(GDIMetaFile &rMtf, const Point &rDestPt, const Size &rDestSize, const Gradient &rGradient, sal_uInt32 nWriteFlags, const basegfx::BColorStops *pColorStops)
SVGActionWriter(SVGExport &rExport, SVGFontExport &rFontExport)
void SetPreviewMode(bool bState=true)
void StartMask(const Point &rDestPt, const Size &rDestSize, const Gradient &rGradient, sal_uInt32 nWriteFlags, const basegfx::BColorStops *pColorStops, OUString *pTextStyle=nullptr)
VclPtr< VirtualDevice > mpVDev
void ImplWriteEllipse(const Point &rCenter, tools::Long nRadX, tools::Long nRadY)
bool mbIsPlaceholderShape
SVGAttributeWriter maAttributeWriter
static BitmapChecksum GetChecksum(const MetaAction *pAction)
vcl::Font ImplSetCorrectFontHeight() const
SVGState & mrCurrentState
void ImplWriteClipPath(const tools::PolyPolygon &rPolyPoly)
static void ImplGetColorStr(const Color &rColor, OUString &rColorStr)
SVGAttributeWriter(SVGExport &rExport, SVGFontExport &rFontExport, SVGState &rCurState)
void SetFontAttr(const vcl::Font &rFont)
void AddPaintAttr(const Color &rLineColor, const Color &rFillColor, const tools::Rectangle *pObjBoundRect=nullptr, const Gradient *pFillGradient=nullptr)
void AddGradientDef(const tools::Rectangle &rObjRect, const Gradient &rGradient, OUString &rGradientId)
SVGFontExport & mrFontExport
void AddColorAttr(const OUString &pColorAttrName, const OUString &pColorOpacityAttrName, const Color &rColor)
SVGState & mrCurrentState
std::unique_ptr< SvXMLElementExport > mpElemFont
static double ImplRound(double fVal)
::std::stack< PartialState > maStateStack
SVGState & getCurrentState()
void pushState(vcl::PushFlags eFlags)
vcl::PushFlags getPushFlags() const
bool mbIsPlaceholderShape
std::unique_ptr< SvXMLElementExport > mpTextShapeElem
void setVirtualDevice(VirtualDevice *pVDev, MapMode &rTargetMapMode)
void implWriteTextPortion(const Point &rPos, const OUString &rText, Color aTextColor)
sal_Int32 mnLeftTextPortionLength
Reference< XEnumeration > mrTextPortionEnumeration
bool implGetTextPositionFromBitmap(const MetaAction *pAction, Point &raPos, bool &rbEmpty)
std::unique_ptr< SvXMLElementExport > mpTextParagraphElem
bool mbIsTextShapeStarted
const OUString & implGetValidIDFromInterface(const Reference< XInterface > &rxIf)
sal_Int32 setTextPosition(const GDIMetaFile &rMtf, size_t &nCurAction, sal_uInt32 nWriteFlags)
setTextPosition Set the start position of the next line of text.
bool hasTextOpacity() const
std::unique_ptr< SvXMLElementExport > mpTextPositionElem
void setTextShape(const Reference< XText > &rxText, const GDIMetaFile *pTextEmbeddedBitmapMtf)
bool mbIsListLevelStyleImage
void startTextPosition(bool bExportX=true, bool bExportY=true)
Reference< XTextContent > mrCurrentTextParagraph
SVGTextWriter(SVGExport &rExport, SVGAttributeWriter &rAttributeWriter, SVGActionWriter &mrActionWriter)
sal_Int16 meNumberingType
Reference< XText > mrTextShape
bool implGetTextPosition(const MetaAction *pAction, Point &raPos, bool &bEmpty)
OUString msHyperlinkIdList
void implWriteBulletChars()
void writeBitmapPlaceholder(const MetaBitmapActionType *pAction)
bool isTextShapeStarted() const
const GDIMetaFile * mpTextEmbeddedBitmapMtf
void startTextParagraph()
void implSetCurrentFont()
void writeTextPortion(const Point &rPos, const OUString &rText)
MapMode * mpTargetMapMode
Reference< XTextRange > mrCurrentTextPortion
VclPtr< VirtualDevice > mpVDev
void implWriteEmbeddedBitmaps()
void implRegisterInterface(const Reference< XInterface > &rxIf)
void implMap(const Size &rSz, Size &rDstSz) const
SVGActionWriter & mrActionWriter
void createParagraphEnumeration()
SVGAttributeWriter & mrAttributeWriter
void setTextProperties(const GDIMetaFile &rMtf, size_t nCurAction)
std::unordered_map< OUString, BulletListItemInfo > maBulletListItemMap
void implExportHyperlinkIds()
Reference< XEnumeration > mrParagraphEnumeration
void addFontAttributes(bool bIsTextContainer)
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual sal_Bool SAL_CALL supportsService(const OUString &sServiceName) override
Sequence< css::beans::PropertyValue > maFilterData
SVGWriter(const Sequence< Any > &args, const Reference< XComponentContext > &rxCtx)
virtual OUString SAL_CALL getImplementationName() override
Reference< XComponentContext > mxContext
virtual ~SVGWriter() override
virtual void SAL_CALL write(const Reference< XDocumentHandler > &rxDocHandler, const Sequence< sal_Int8 > &rMtfSeq) override
::std::vector< double > DashArray
constexpr ::Color COL_TRANSPARENT(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
const vcl::Font & getFont(const vcl::Font &rDefaultFont) const
PartialState(PartialState &&aPartialState) noexcept
void setFont(const vcl::Font &rFont)
sal_Int32 mnRegionClipPathId
::std::optional< vcl::Font > mupFont
SvtGraphicStroke::DashArray maDashArray
::std::optional< Gradient > moShapeGradient
css::drawing::LineCap maLineCap
tools::PolyPolygon maShapePolyPoly
basegfx::B2DLineJoin maLineJoin
sal_Int32 nRegionClipPathId
std::unordered_map< BitmapChecksum, std::unique_ptr< GDIMetaFile > > MetaBitmapActionMap
std::unordered_map< BitmapChecksum, std::unique_ptr< GDIMetaFile > > MetaBitmapActionMap
constexpr OUStringLiteral SVG_DTD_STRING