diff options
author | merttumer <mert.tumer@collabora.com> | 2019-02-08 20:26:46 +0300 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2019-02-08 22:27:24 +0100 |
commit | 41a22ef27df7242ab074a3fd83720c739362263d (patch) | |
tree | 630dcfefe9b4d19509aaa6bf7c022747e2eb3df3 /filter | |
parent | 1a02ab0aeafeaa97f4a46fc77ac3ef9a68904f7a (diff) |
Added Tiled Watermark Feature for pdf export
Change-Id: I1f01e16e6958b0be4f82b13c2f3c5a91a8f05558
Signed-off-by: merttumer <mert.tumer@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/67551
Reviewed-by: Andras Timar <andras.timar@collabora.com>
Tested-by: Andras Timar <andras.timar@collabora.com>
Diffstat (limited to 'filter')
-rw-r--r-- | filter/source/pdf/pdfexport.cxx | 74 | ||||
-rw-r--r-- | filter/source/pdf/pdfexport.hxx | 2 |
2 files changed, 76 insertions, 0 deletions
diff --git a/filter/source/pdf/pdfexport.cxx b/filter/source/pdf/pdfexport.cxx index ca454bbd65f7..6c9e7b90320c 100644 --- a/filter/source/pdf/pdfexport.cxx +++ b/filter/source/pdf/pdfexport.cxx @@ -499,6 +499,8 @@ bool PDFExport::Export( const OUString& rFile, const Sequence< PropertyValue >& rFilterData[ nData ].Value >>= mbAddStream; else if ( rFilterData[ nData ].Name == "Watermark" ) rFilterData[ nData ].Value >>= msWatermark; + else if ( rFilterData[ nData ].Name == "TiledWatermark" ) + rFilterData[ nData ].Value >>= msTiledWatermark; // now all the security related properties... else if ( rFilterData[ nData ].Name == "EncryptFile" ) rFilterData[ nData ].Value >>= mbEncrypt; @@ -1038,7 +1040,13 @@ bool PDFExport::ImplExportPage( vcl::PDFWriter& rWriter, vcl::PDFExtOutDevData& rPDFExtOutDevData.ResetSyncData(); if (!msWatermark.isEmpty()) + { ImplWriteWatermark( rWriter, Size(aRangePDF.getWidth(), aRangePDF.getHeight()) ); + } + else if (!msTiledWatermark.isEmpty()) + { + ImplWriteTiledWatermark( rWriter, Size(aRangePDF.getWidth(), aRangePDF.getHeight()) ); + } return true; } @@ -1111,4 +1119,70 @@ void PDFExport::ImplWriteWatermark( vcl::PDFWriter& rWriter, const Size& rPageSi rWriter.Pop(); } +void PDFExport::ImplWriteTiledWatermark( vcl::PDFWriter& rWriter, const Size& rPageSize ) +{ + vcl::Font aFont( OUString( "Helvetica" ), Size( 0, 40 ) ); + aFont.SetItalic( ITALIC_NONE ); + aFont.SetWidthType( WIDTH_NORMAL ); + aFont.SetWeight( WEIGHT_BOLD ); + aFont.SetAlignment( ALIGN_BOTTOM ); + aFont.SetFontHeight(40); + + OutputDevice* pDev = rWriter.GetReferenceDevice(); + pDev->SetFont(aFont); + pDev->Push(); + pDev->SetFont(aFont); + pDev->SetMapMode( MapMode( MapUnit::MapPoint ) ); + int w = 0; + long nTextWidth = (rPageSize.Width()-60) / 4; + while((w = pDev->GetTextWidth(msTiledWatermark)) > nTextWidth) + { + if(w==0) + break; + + long nNewHeight = aFont.GetFontHeight() * nTextWidth / w; + aFont.SetFontHeight(nNewHeight); + pDev->SetFont( aFont ); + } + pDev->Pop(); + + rWriter.Push(); + rWriter.SetMapMode( MapMode( MapUnit::MapPoint ) ); + rWriter.SetFont(aFont); + rWriter.SetTextColor( Color(19,20,22) ); + Point aTextPoint; + tools::Rectangle aTextRect; + aTextPoint = Point(70,80); + + for( int i = 0; i < 3; i ++) + { + while(aTextPoint.getY()+pDev->GetTextHeight() <= rPageSize.Height()-40) + { + aTextRect = tools::Rectangle(Point(aTextPoint.getX(), aTextPoint.getY()-pDev->GetTextHeight()), Size(pDev->GetTextWidth(msTiledWatermark),pDev->GetTextHeight())); + + pDev->Push(); + rWriter.SetClipRegion(); + rWriter.BeginTransparencyGroup(); + rWriter.SetTextColor( Color(19,20,22) ); + rWriter.DrawText(aTextPoint, msTiledWatermark); + rWriter.EndTransparencyGroup( aTextRect, 50 ); + pDev->Pop(); + + pDev->Push(); + rWriter.SetClipRegion(); + rWriter.BeginTransparencyGroup(); + rWriter.SetTextColor( Color(236,235,233) ); + rWriter.DrawText(aTextPoint, msTiledWatermark); + rWriter.EndTransparencyGroup( aTextRect, 50 ); + pDev->Pop(); + + aTextPoint.Move(0,(rPageSize.Height()-40)/4); + } + aTextPoint=Point( aTextPoint.getX(), 80 ); + aTextPoint.Move( (rPageSize.Width()-120)/3, 0 ); + } + + rWriter.Pop(); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/filter/source/pdf/pdfexport.hxx b/filter/source/pdf/pdfexport.hxx index 4a371433263a..9d302900cdee 100644 --- a/filter/source/pdf/pdfexport.hxx +++ b/filter/source/pdf/pdfexport.hxx @@ -66,6 +66,7 @@ private: bool mbRemoveTransparencies; OUString msWatermark; + OUString msTiledWatermark; // these variable are here only to have a location in filter/pdf to set the default // to be used by the macro (when the FilterData are set by the macro itself) @@ -106,6 +107,7 @@ private: OUString msSignTSA; void ImplWriteWatermark( vcl::PDFWriter& rWriter, const Size& rPageSize ); + void ImplWriteTiledWatermark( vcl::PDFWriter& rWriter, const Size& rPageSize ); public: |