25#include <com/sun/star/embed/EmbeddedObjectCreator.hpp>
26#include <com/sun/star/embed/OOoEmbeddedObjectFactory.hpp>
27#include <com/sun/star/embed/XEmbeddedObject.hpp>
28#include <com/sun/star/embed/Aspects.hpp>
29#include <com/sun/star/frame/XModel.hpp>
30#include <com/sun/star/task/XInteractionHandler.hpp>
32#include <osl/diagnose.h>
33#include <rtl/ustrbuf.hxx>
36#include <com/sun/star/lang/XUnoTunnel.hpp>
76using namespace xml::sax;
87 sal_Int32 nHeight, sal_Int32 nWidth,
88 Size *pTwipSize =
nullptr )
90 if( nWidth > 0 && nHeight > 0 )
102 rItemSet.
Put( aAnchor );
106 pTwipSize->setWidth( nWidth );
107 pTwipSize->setHeight( nHeight);
113 const Size& aVisSize,
116 if( !(xObj.is() && nAspect != embed::Aspects::MSOLE_ICON) )
123 aSz.Width = aObjVisSize.
Width();
124 aSz.Height = aObjVisSize.
Height();
128 xObj->setVisualAreaSize( nAspect, aSz );
130 catch( uno::Exception& )
132 OSL_FAIL(
"Couldn't set visual area of the object!" );
137 const uno::Reference < XModel>& rModel,
138 SvXMLImport& rImport,
139 const uno::Reference<XPropertySet> & rInfoSet,
140 bool bInsertM,
bool bStylesOnlyM,
141 bool bBlockM,
bool bOrganizerM ) :
143 bBlockM, bOrganizerM ),
144 m_pRedlineHelper( nullptr )
146 uno::Reference<XPropertySet> xDocPropSet( rModel, UNO_QUERY );
148 bInsertM || bBlockM, xDocPropSet, rInfoSet );
166 SvXMLImport& rImport,
168 const uno::Reference< XFastAttributeList > & xAttrList )
176 SAL_WARN_IF(!pTextCursor,
"sw.uno",
"SwXTextCursor missing");
177 SwDoc *pDoc = pTextCursor ? pTextCursor->GetDoc() :
nullptr;
179 return pDoc && pDoc->
IsInHeaderFooter( pTextCursor->GetPaM()->GetPoint()->GetNode() );
191 OSL_ENSURE( pOLENd,
"Where is the OLE node" );
196 SvXMLImport& rImport,
197 const OUString& rHRef,
198 const OUString& rStyleName,
199 const OUString& rTableName,
200 sal_Int32 nWidth, sal_Int32 nHeight )
205 uno::Reference < XPropertySet > xPropSet;
207 sal_Int32
nPos = rHRef.indexOf(
':' );
211 OUString aObjName( rHRef.copy(
nPos+1) );
213 if( aObjName.isEmpty() )
216 OTextCursorHelper* pTextCursor =
dynamic_cast<OTextCursorHelper*
>(
GetCursor().get());
217 SAL_WARN_IF(!pTextCursor,
"sw.uno",
"SwXTextCursor missing");
221 Size aTwipSize( 0, 0 );
228 if( rHRef.startsWith(
"vnd.sun.star.ServiceName:") )
230 bool bInsert =
false;
232 for (
const auto& [sFilterService, rCLASSID] :
aServiceMap)
234 if (aObjName == sFilterService)
249 uno::Reference < embed::XEmbeddedObjectCreator >
xFactory = embed::EmbeddedObjectCreator::create( ::comphelper::getProcessComponentContext() );
253 uno::Reference < embed::XEmbeddedObject > xObj(
xFactory->createInstanceInitNew(
254 aClass, OUString(), xStorage,
"DummyName", aObjArgs), uno::UNO_QUERY );
264 *pTextCursor->GetPaM(),
273 catch ( uno::Exception& )
289 if ( aExistingName == aObjName )
291 OSL_FAIL(
"The document contains duplicate object references, means it is partially broken, please let developers know how this document was generated!" );
301 catch ( uno::Exception& )
303 OSL_FAIL(
"Couldn't create a copy of the object!" );
311 if (
aName.isEmpty() )
336 *pDoc, pFrameFormat);
340 SwXFrame::GetOrCreateSdrObject(*
static_cast<SwFlyFrameFormat*
>(pFrameFormat));
342 if( !rTableName.isEmpty() )
347 OSL_ENSURE( pOLENode,
"Where is the OLE node" );
349 OUStringBuffer
aBuffer( rTableName.getLength() );
350 bool bQuoted =
false;
351 bool bEscape =
false;
353 for( sal_Int32
i=0;
i < rTableName.getLength();
i++ )
355 bool bEndOfNameFound =
false;
367 bEndOfNameFound =
true;
393 bEndOfNameFound =
true;
408 if( bError || bEndOfNameFound )
413 OUString sTableName(
aBuffer.makeStringAndClear() );
418 sal_Int64 nDrawAspect = 0;
420 bool bHasSizeProps =
false;
421 if( !rStyleName.isEmpty() )
429 OSL_ENSURE( xImpPrMap.is(),
"Where is the import prop mapper?" );
433 xImpPrMap->getPropertySetMapper();
439 sal_Int32 nIdx = rProp.
mnIndex;
443 switch( rPropMapper->GetEntryContextId(nIdx) )
464 bHasSizeProps =
true;
472 bHasSizeProps =
true;
480 nDrawAspect = embed::Aspects::MSOLE_CONTENT;
494 uno::Reference < embed::XEmbeddedObject > xObj =
498 aVisArea.
GetSize(), MapUnit::Map100thMM );
505 SvXMLImport& rImport,
506 const OUString& rHRef,
509 sal_Int32 nWidth, sal_Int32 nHeight )
514 uno::Reference < XPropertySet > xPropSet;
516 OTextCursorHelper* pTextCursor =
dynamic_cast<OTextCursorHelper*
>(
GetCursor().get());
517 assert( pTextCursor &&
"SwXTextCursor missing" );
521 Size aTwipSize( 0, 0 );
528 bool bValidURL = !rHRef.isEmpty() &&
538 uno::Reference < embed::XEmbeddedObjectCreator >
xFactory =
539 embed::OOoEmbeddedObjectFactory::create(::comphelper::getProcessComponentContext());
546 uno::Reference< task::XInteractionHandler > xInteraction = pMedium->GetInteractionHandler();
547 if ( xInteraction.is() )
549 aMediaDescriptor.realloc( 2 );
550 auto pMediaDescriptor = aMediaDescriptor.getArray();
551 pMediaDescriptor[1].Name =
"InteractionHandler";
552 pMediaDescriptor[1].Value <<= xInteraction;
555 const auto nLen = aMediaDescriptor.getLength() + 1;
556 aMediaDescriptor.realloc(nLen);
557 auto pMediaDescriptor = aMediaDescriptor.getArray();
558 pMediaDescriptor[nLen - 1].Name =
"Referer";
559 pMediaDescriptor[nLen - 1].Value <<= pMedium->GetName();
562 uno::Reference < embed::XEmbeddedObject > xObj(
564 xStorage,
"DummyName", aMediaDescriptor, uno::Sequence< beans::PropertyValue >() ),
565 uno::UNO_QUERY_THROW );
570 *pTextCursor->GetPaM(),
577 *pDoc, pFrameFormat);
580 SwXFrame::GetOrCreateSdrObject(*
585 catch ( uno::Exception& )
595 const OUString &rName,
596 const OUString &rCode,
598 const OUString& rHRef,
599 sal_Int32 nWidth, sal_Int32 nHeight )
604 uno::Reference < XPropertySet > xPropSet;
605 OTextCursorHelper* pTextCursor =
dynamic_cast<OTextCursorHelper*
>(
GetCursor().get());
606 assert( pTextCursor &&
"SwXTextCursor missing" );
607 SwDoc *pDoc = pTextCursor->GetDoc();
615 if( !rHRef.isEmpty() )
616 sCodeBase =
GetXMLImport().GetAbsoluteReference( rHRef );
622 embed::Aspects::MSOLE_CONTENT,
623 Size( nWidth, nHeight ),
624 MapUnit::Map100thMM );
631 *pDoc, pFrameFormat);
635 SwXFrame::GetOrCreateSdrObject(*
static_cast<SwFlyFrameFormat*
>(pFrameFormat));
642 const OUString &rMimeType,
643 const OUString& rHRef,
644 sal_Int32 nWidth, sal_Int32 nHeight )
646 uno::Reference < XPropertySet > xPropSet;
647 OTextCursorHelper* pTextCursor =
dynamic_cast<OTextCursorHelper*
>(
GetCursor().get());
648 assert( pTextCursor &&
"SwXTextCursor missing" );
649 SwDoc *pDoc = pTextCursor->GetDoc();
659 bool bValidURL = !rHRef.isEmpty() &&
661 bool bValidMimeType = !rMimeType.isEmpty();
662 if( !bValidURL && !bValidMimeType )
670 uno::Reference < embed::XEmbeddedObjectCreator >
xFactory = embed::EmbeddedObjectCreator::create( ::comphelper::getProcessComponentContext() );
671 uno::Reference < embed::XEmbeddedObject > xObj(
xFactory->createInstanceInitNew(
672 aClass, OUString(), xStorage,
"DummyName",
673 uno::Sequence < beans::PropertyValue >() ), uno::UNO_QUERY );
677 embed::Aspects::MSOLE_CONTENT,
678 Size( nWidth, nHeight ),
679 MapUnit::Map100thMM );
683 uno::Reference < beans::XPropertySet > xSet( xObj->getComponent(), uno::UNO_QUERY );
687 xSet->setPropertyValue(
"PluginURL",
690 xSet->setPropertyValue(
"PluginMimeType",
696 *pTextCursor->GetPaM(),
700 *pDoc, pFrameFormat);
703 SwXFrame::GetOrCreateSdrObject(*
708 catch ( uno::Exception& )
715 const OUString& rName,
716 const OUString& rHRef,
717 const OUString& rStyleName,
718 sal_Int32 nWidth, sal_Int32 nHeight )
723 uno::Reference < XPropertySet > xPropSet;
724 OTextCursorHelper* pTextCursor =
dynamic_cast<OTextCursorHelper*
>(
GetCursor().get());
725 assert( pTextCursor &&
"SwXTextCursor missing" );
726 SwDoc *pDoc = pTextCursor->GetDoc();
732 bool bHasBorder =
false;
733 bool bIsBorderSet =
false;
736 if( !rStyleName.isEmpty() )
744 OSL_ENSURE( xImpPrMap.is(),
"Where is the import prop mapper?" );
748 xImpPrMap->getPropertySetMapper();
754 sal_Int32 nIdx = rProp.
mnIndex;
758 switch( rPropMapper->GetEntryContextId(nIdx) )
762 bool bYes = *o3tl::doAccess<bool>(rProp.
maValue);
763 eScrollMode = bYes ? ScrollingMode::Yes : ScrollingMode::No;
768 bHasBorder = *o3tl::doAccess<bool>(rProp.
maValue);
797 uno::Reference < embed::XEmbeddedObjectCreator >
xFactory = embed::EmbeddedObjectCreator::create( ::comphelper::getProcessComponentContext() );
798 uno::Reference < embed::XEmbeddedObject > xObj(
xFactory->createInstanceInitNew(
799 aClass, OUString(), xStorage,
"DummyName",
800 uno::Sequence < beans::PropertyValue >() ), uno::UNO_QUERY );
804 embed::Aspects::MSOLE_CONTENT,
805 Size( nWidth, nHeight ),
806 MapUnit::Map100thMM );
810 uno::Reference < beans::XPropertySet > xSet( xObj->getComponent(), uno::UNO_QUERY );
816 if (
INetURLObject(sHRef).GetProtocol() == INetProtocol::Macro)
819 xSet->setPropertyValue(
"FrameURL",
822 xSet->setPropertyValue(
"FrameName",
825 if ( eScrollMode == ScrollingMode::Auto )
826 xSet->setPropertyValue(
"FrameIsAutoScroll",
829 xSet->setPropertyValue(
"FrameIsScrollingMode",
830 Any( eScrollMode == ScrollingMode::Yes ) );
833 xSet->setPropertyValue(
"FrameIsBorder",
836 xSet->setPropertyValue(
"FrameIsAutoBorder",
839 xSet->setPropertyValue(
"FrameMarginWidth",
840 Any( sal_Int32( aMargin.
Width() ) ) );
842 xSet->setPropertyValue(
"FrameMarginHeight",
848 *pTextCursor->GetPaM(),
852 *pDoc, pFrameFormat);
856 SwXFrame::GetOrCreateSdrObject(*
861 catch ( uno::Exception& )
869 const uno::Reference < XPropertySet > &rPropSet,
870 std::map < const OUString, OUString > &rParamMap)
875 SwXFrame* pFrame =
dynamic_cast<SwXFrame*
>(rPropSet.get());
876 assert(pFrame &&
"SwXFrame missing");
883 uno::Reference < embed::XEmbeddedObject > xEmbObj( rOLEObj.
GetOleRef() );
887 uno::Reference < beans::XPropertySet > xSet( xEmbObj->getComponent(), uno::UNO_QUERY );
891 const sal_Int32
nCount = rParamMap.size();
892 uno::Sequence< beans::PropertyValue > aCommandSequence(
nCount );
894 std::transform(rParamMap.begin(), rParamMap.end(), aCommandSequence.getArray(),
895 [](
const auto& rParam)
897 return beans::PropertyValue( rParam.first,
899 uno::Any(rParam.second),
900 beans::PropertyState_DIRECT_VALUE);
904 OUString aParaName(
"AppletCommands");
907 xSet->setPropertyValue( aParaName,
Any( aCommandSequence ) );
909 catch ( uno::Exception& )
911 aParaName =
"PluginCommands";
914 xSet->setPropertyValue( aParaName,
Any( aCommandSequence ) );
916 catch ( uno::Exception& )
925 const OUString& rType,
927 const OUString& rAuthor,
928 const OUString& rComment,
929 const util::DateTime& rDateTime,
933 OSL_ENSURE(
nullptr !=
m_pRedlineHelper,
"helper should have been created in constructor");
940 uno::Reference<XTextCursor> & rOldCursor,
943 uno::Reference<XTextCursor> xRet;
956 bool bIsOutsideOfParagraph)
959 uno::Reference<XTextRange> xTextRange(
GetCursor()->getStart() );
961 bIsOutsideOfParagraph);
990 const Sequence<sal_Int8> & rKey )
constexpr OUStringLiteral XML_IMPORT_FILTER_CALC
constexpr OUStringLiteral XML_IMPORT_FILTER_DRAW
constexpr OUStringLiteral XML_IMPORT_FILTER_WRITER
constexpr OUStringLiteral XML_IMPORT_FILTER_CHART
constexpr OUStringLiteral XML_IMPORT_FILTER_IMPRESS
constexpr OUStringLiteral XML_IMPORT_FILTER_MATH
virtual SwFlyFrameFormat * InsertOLE(const SwPaM &rRg, const OUString &rObjName, sal_Int64 nAspect, const SfxItemSet *pFlyAttrSet, const SfxItemSet *pGrfAttrSet)=0
virtual SwFlyFrameFormat * InsertEmbObject(const SwPaM &rRg, const svt::EmbeddedObjectRef &xObj, SfxItemSet *pFlyAttrSet)=0
Insert OLE-objects.
virtual const SwDrawModel * GetDrawModel() const =0
Draw Model and id accessors.
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
bool SetURL(std::u16string_view rTheAbsURIRef, EncodeMechanism eMechanism=EncodeMechanism::WasEncoded, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8)
SAL_WARN_UNUSED_RESULT Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
comphelper::EmbeddedObjectContainer & GetEmbeddedObjectContainer() const
SfxMedium * GetMedium() const
css::uno::Reference< css::embed::XStorage > const & GetStorage()
constexpr tools::Long Height() const
void setWidth(tools::Long nWidth)
void setHeight(tools::Long nHeight)
constexpr tools::Long Width() const
css::uno::Sequence< sal_Int8 > GetByteSequence() const
XmlStyleFamily GetFamily() const
virtual rtl::Reference< SvXMLImportPropertyMapper > GetImportPropertyMapper(XmlStyleFamily nFamily) const
void CreateApplet(const OUString &rCode, const OUString &rName, bool bMayScript, const OUString &rCodeBase, std::u16string_view rBaseURL)
SfxItemSet & GetItemSet()
const css::uno::Reference< css::embed::XEmbeddedObject > & GetApplet() const
const SwGrfFormatColl * GetDfltGrfFormatColl() const
IDocumentContentOperations const & getIDocumentContentOperations() const
SfxObjectShell * GetPersist() const
const SwAttrPool & GetAttrPool() const
IDocumentDrawModelAccess const & getIDocumentDrawModelAccess() const
SwDocShell * GetDocShell()
bool IsInHeaderFooter(const SwNode &) const
Content, content of frame (header, footer, fly).
const SwNodeIndex * GetContentIdx() const
Marks a node in the document model.
const SwNodes & GetNodes() const
SwNodeOffset GetIndex() const
SwOLENode * GetOLENode()
Inline methods from Node.hxx.
const SwOLEObj & GetOLEObj() const
void SetChartTableName(const OUString &rNm)
void SetOLESizeInvalid(bool b)
svt::EmbeddedObjectRef & GetObject()
css::uno::Reference< css::embed::XEmbeddedObject > const & GetOleRef()
const OUString & GetCurrentPersistName() const
virtual css::uno::Reference< css::beans::XPropertySet > createAndInsertFloatingFrame(const OUString &rName, const OUString &rHRef, const OUString &rStyleName, sal_Int32 nWidth, sal_Int32 nHeight) override
virtual void RedlineSetCursor(const OUString &rId, bool bStart, bool bIsOutsideOfParagraph) override
ID used to RedlineAdd() call.
virtual void endAppletOrPlugin(const css::uno::Reference< css::beans::XPropertySet > &rPropSet, std::map< const OUString, OUString > &rParamMap) override
virtual void SetChangesProtectionKey(const css::uno::Sequence< sal_Int8 > &rKey) override
virtual void SetShowChanges(bool bShowChanges) override
XMLRedlineImportHelper * m_pRedlineHelper
virtual css::uno::Reference< css::beans::XPropertySet > createAndInsertOLEObject(SvXMLImport &rImport, const OUString &rHRef, const OUString &rStyleName, const OUString &rTableName, sal_Int32 nWidth, sal_Int32 nHeight) override
virtual bool IsInHeaderFooter() const override
virtual css::uno::Reference< css::beans::XPropertySet > createAndInsertApplet(const OUString &rName, const OUString &rCode, bool bMayScript, const OUString &rHRef, sal_Int32 nWidth, sal_Int32 nHeight) override
SwXMLTextImportHelper(const css::uno::Reference< css::frame::XModel > &rModel, SvXMLImport &rImport, const css::uno::Reference< css::beans::XPropertySet > &rInfoSet, bool bInsertM, bool bStylesOnlyM, bool bBlockM, bool bOrganizerM)
virtual SvXMLImportContext * CreateTableChildContext(SvXMLImport &rImport, sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override
virtual void RedlineAdd(const OUString &rType, const OUString &rId, const OUString &rAuthor, const OUString &rComment, const css::util::DateTime &rDateTime, bool bMergeLastPara) override
virtual css::uno::Reference< css::beans::XPropertySet > createAndInsertPlugin(const OUString &rMimeType, const OUString &rHRef, sal_Int32 nWidth, sal_Int32 nHeight) override
virtual void RedlineAdjustStartNodeCursor() override
virtual ~SwXMLTextImportHelper() override
virtual css::uno::Reference< css::beans::XPropertySet > createAndInsertOOoLink(SvXMLImport &rImport, const OUString &rHRef, const OUString &rStyleName, const OUString &rTableName, sal_Int32 nWidth, sal_Int32 nHeight) override
virtual void SetRecordChanges(bool bRecordChanges) override
virtual css::uno::Reference< css::text::XTextCursor > RedlineCreateText(css::uno::Reference< css::text::XTextCursor > &rOldCursor, const OUString &rId) override
merge last paragraph
static rtl::Reference< SwXTextEmbeddedObject > CreateXTextEmbeddedObject(SwDoc &rDoc, SwFrameFormat *pFrameFormat)
static MapUnit UnoEmbed2VCLMapUnit(sal_Int32 nUnoEmbedMapUnit)
const SvXMLStylesContext * GetStyles() const
const ::std::vector< XMLPropertyState > & GetProperties() const
void SetProtectionKey(const css::uno::Sequence< sal_Int8 > &rKey)
css::uno::Reference< css::text::XTextCursor > CreateRedlineTextSection(css::uno::Reference< css::text::XTextCursor > const &xOldCursor, const OUString &rId)
void SetCursor(const OUString &rId, bool bStart, css::uno::Reference< css::text::XTextRange > const &rRange, bool bIsOutsideOfParagraph)
void Add(std::u16string_view rType, const OUString &rId, const OUString &rAuthor, const OUString &rComment, const css::util::DateTime &rDateTime, bool bMergeLastParagraph)
void AdjustStartNodeCursor(const OUString &rId)
Adjust the start (end) position for a redline that begins in a start node.
void SetShowChanges(bool bShowChanges)
void SetRecordChanges(bool bRecordChanges)
css::uno::Reference< css::text::XTextCursor > & GetCursor()
SvI18NMap & GetRenameMap()
XMLPropStyleContext * FindAutoFrameStyle(const OUString &rName) const
SvXMLImport & GetXMLImport()
void ResetOpenRedlineId()
bool IsInsertMode() const
OUString const & GetOpenRedlineId() const
OUString CreateUniqueObjectName()
css::uno::Reference< css::embed::XEmbeddedObject > GetEmbeddedObject(const OUString &, OUString const *pBaseURL=nullptr)
static css::uno::Reference< css::embed::XStorage > GetTemporaryStorage(const css::uno::Reference< css::uno::XComponentContext > &rxContext=css::uno::Reference< css::uno::XComponentContext >())
#define SO3_SDRAW_CLASSID
#define SO3_PLUGIN_CLASSID
#define SO3_SIMPRESS_CLASSID
#define SO3_IFRAME_CLASSID
void SetViewAspect(sal_Int64 nAspect)
static bool TryRunningState(const css::uno::Reference< css::embed::XEmbeddedObject > &)
Reference< XSingleServiceFactory > xFactory
@ Fixed
Frame cannot be moved in Var-direction.
#define SAL_WARN_IF(condition, area, stream)
SVXCORE_DLLPUBLIC MSO_SPT Get(const OUString &)
SVL_DLLPUBLIC OUString SmartRel2Abs(INetURLObject const &rTheBaseURIRef, OUString const &rTheRelURIRef, Link< OUString *, bool > const &rMaybeFileHdl=Link< OUString *, bool >(), bool bCheckFileExists=true, bool bIgnoreFragment=false, INetURLObject::EncodeMechanism eEncodeMechanism=INetURLObject::EncodeMechanism::WasEncoded, INetURLObject::DecodeMechanism eDecodeMechanism=INetURLObject::DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8, FSysStyle eStyle=FSysStyle::Detect)
css::uno::Sequence< css::beans::PropertyValue > InitPropertySequence(::std::initializer_list< ::std::pair< OUString, css::uno::Any > > vInit)
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
constexpr auto toTwips(N number, Length from)
#define XML_TEXT_RENAME_TYPE_TABLE
#define CTF_FRAME_MARGIN_VERT
#define CTF_OLE_VIS_AREA_TOP
#define CTF_FRAME_DISPLAY_BORDER
#define CTF_OLE_DRAW_ASPECT
#define CTF_OLE_VIS_AREA_HEIGHT
#define CTF_OLE_VIS_AREA_WIDTH
#define CTF_FRAME_MARGIN_HORI
#define CTF_OLE_VIS_AREA_LEFT
#define CTF_FRAME_DISPLAY_SCROLLBAR
std::unique_ptr< char[]> aBuffer
static SwOLENode * lcl_GetOLENode(const SwFrameFormat *pFrameFormat)
const std::pair< OUString, SvGUID > aServiceMap[]
static void lcl_setObjectVisualArea(const uno::Reference< embed::XEmbeddedObject > &xObj, sal_Int64 nAspect, const Size &aVisSize, const MapUnit &aUnit)
static void lcl_putHeightAndWidth(SfxItemSet &rItemSet, sal_Int32 nHeight, sal_Int32 nWidth, Size *pTwipSize=nullptr)