diff options
author | Jan-Marek Glogowski <glogow@fbihome.de> | 2017-10-26 16:05:54 +0200 |
---|---|---|
committer | Jan-Marek Glogowski <glogow@fbihome.de> | 2017-11-06 15:49:20 +0100 |
commit | 3a88795c1211c62277dc646e61c2ba8306febe37 (patch) | |
tree | ba44aef0c3dd0f8e1653759bd5cb86d1adae212a /tools | |
parent | a4b7c54ea83e354f3dae3165bd71989a796ed6bc (diff) |
tdf#108748 generate PDF preview on SwapIn
When including a PDF as an image, it's represented internally as
a Bitmap with additional PDF data. On SwapIn, LibreOffice just
imported the PDF data missing the PDF preview. The Graphic also
gad the wrong image type, which results in a busy loop on master,
with a strange / unhelpful STR_COMCORE_READERROR generated by
SwNoTextFrame::PaintPicture.
This is a workaround to generate the Bitmap on SwapIn, which
will really slow down LibreOffice when importing many PDFs.
I guess the job of generating the PDF previews should probably
be deferred to a thread or a low priority Scheduler task, just
like the general image loading is handled.
Change-Id: I8084e4533995ecddc5b03ef19cb0c6a2dbf60ebd
Reviewed-on: https://gerrit.libreoffice.org/43906
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/source/stream/stream.cxx | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/tools/source/stream/stream.cxx b/tools/source/stream/stream.cxx index 4f95afd2c1e8..4c363dc67484 100644 --- a/tools/source/stream/stream.cxx +++ b/tools/source/stream/stream.cxx @@ -1179,6 +1179,27 @@ SvStream& SvStream::WriteStream( SvStream& rStream ) return *this; } +sal_uInt64 SvStream::WriteStream( SvStream& rStream, sal_uInt64 nSize ) +{ + const sal_uInt32 cBufLen = 0x8000; + std::unique_ptr<char[]> pBuf( new char[ cBufLen ] ); + sal_uInt32 nCurBufLen = cBufLen; + sal_uInt32 nCount; + sal_uInt64 nWriteSize = nSize; + + do { + if ( nSize >= nCurBufLen ) + nWriteSize -= nCurBufLen; + else + nCurBufLen = nWriteSize; + nCount = rStream.ReadBytes( pBuf.get(), nCurBufLen ); + WriteBytes( pBuf.get(), nCount ); + } + while( nWriteSize && nCount == nCurBufLen ); + + return nSize - nWriteSize; +} + OUString SvStream::ReadUniOrByteString( rtl_TextEncoding eSrcCharSet ) { // read UTF-16 string directly from stream ? |