[API CHANGE] change XPdfDecomposer to use XBinaryDataContainer
Using BinaryDataContainer doesn't require to copy the data as it is compatible with what is used in Graphic, VectorGraphicData and GfxLink. Change-Id: I01589158ae6bf6ac407bde60f07952e3968e3970 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109597 Tested-by: Tomaž Vajngerl <quikee@gmail.com> Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
This commit is contained in:
committed by
Tomaž Vajngerl
parent
05aedcba66
commit
2d0cefae7a
@@ -17,11 +17,14 @@
|
||||
#include <vcl/pdfread.hxx>
|
||||
#include <vcl/svapp.hxx>
|
||||
#include <vcl/outdev.hxx>
|
||||
#include <vcl/BinaryDataContainer.hxx>
|
||||
#include <vcl/BinaryDataContainerTools.hxx>
|
||||
#include <toolkit/helper/vclunohelper.hxx>
|
||||
|
||||
#include <com/sun/star/graphic/XPdfDecomposer.hpp>
|
||||
#include <com/sun/star/lang/XServiceInfo.hpp>
|
||||
#include <com/sun/star/uno/XComponentContext.hpp>
|
||||
#include <com/sun/star/util/XBinaryDataContainer.hpp>
|
||||
|
||||
using namespace css;
|
||||
|
||||
@@ -38,7 +41,7 @@ public:
|
||||
|
||||
// XPdfDecomposer
|
||||
uno::Sequence<uno::Reference<graphic::XPrimitive2D>> SAL_CALL
|
||||
getDecomposition(const uno::Sequence<sal_Int8>& xPdfData,
|
||||
getDecomposition(const uno::Reference<util::XBinaryDataContainer>& xDataContainer,
|
||||
const uno::Sequence<beans::PropertyValue>& xDecompositionParameters) override;
|
||||
|
||||
// XServiceInfo
|
||||
@@ -49,8 +52,9 @@ public:
|
||||
|
||||
XPdfDecomposer::XPdfDecomposer(uno::Reference<uno::XComponentContext> const&) {}
|
||||
|
||||
uno::Sequence<uno::Reference<graphic::XPrimitive2D>> SAL_CALL XPdfDecomposer::getDecomposition(
|
||||
const uno::Sequence<sal_Int8>& xPdfData, const uno::Sequence<beans::PropertyValue>& xParameters)
|
||||
uno::Sequence<uno::Reference<graphic::XPrimitive2D>> SAL_CALL
|
||||
XPdfDecomposer::getDecomposition(const uno::Reference<util::XBinaryDataContainer>& xDataContainer,
|
||||
const uno::Sequence<beans::PropertyValue>& xParameters)
|
||||
{
|
||||
sal_Int32 nPageIndex = -1;
|
||||
|
||||
@@ -66,8 +70,10 @@ uno::Sequence<uno::Reference<graphic::XPrimitive2D>> SAL_CALL XPdfDecomposer::ge
|
||||
if (nPageIndex < 0)
|
||||
nPageIndex = 0;
|
||||
|
||||
BinaryDataContainer aDataContainer = vcl::convertUnoBinaryDataContainer(xDataContainer);
|
||||
|
||||
std::vector<BitmapEx> aBitmaps;
|
||||
int rv = vcl::RenderPDFBitmaps(xPdfData.getConstArray(), xPdfData.getLength(), aBitmaps,
|
||||
int rv = vcl::RenderPDFBitmaps(aDataContainer.getData(), aDataContainer.getSize(), aBitmaps,
|
||||
nPageIndex, 1);
|
||||
if (rv == 0)
|
||||
return {}; // happens if we do not have PDFium
|
||||
|
@@ -11,6 +11,7 @@
|
||||
#define __com_sun_star_graphic_XPdfDecomposer_idl__
|
||||
|
||||
#include <com/sun/star/uno/XInterface.idl>
|
||||
#include <com/sun/star/uno/util/XBinaryDataContainer.idl>
|
||||
|
||||
module com { module sun { module star { module graphic {
|
||||
|
||||
@@ -26,15 +27,15 @@ interface XPdfDecomposer : ::com::sun::star::uno::XInterface
|
||||
{
|
||||
/** Retrieve decomposed list - in this case a bitmap with the rendered PDF.
|
||||
|
||||
@param xPdfData
|
||||
The PDF data.
|
||||
@param xDataContainer
|
||||
The PDF data in a data container
|
||||
|
||||
@param xDecompositionParameters
|
||||
Parameters for decomposition. Parameters include:
|
||||
|
||||
sal_Int32 PageIndex - which page to use
|
||||
*/
|
||||
sequence<XPrimitive2D> getDecomposition([in] sequence<byte> xPdfData,
|
||||
sequence<XPrimitive2D> getDecomposition([in] com::sun::star::util::XBinaryDataContainer xDataContainer,
|
||||
[in] sequence<com::sun::star::beans::PropertyValue> xDecompositionParameters);
|
||||
};
|
||||
|
||||
|
@@ -29,6 +29,7 @@
|
||||
#include <com/sun/star/graphic/Primitive2DTools.hpp>
|
||||
#include <com/sun/star/rendering/XIntegerReadOnlyBitmap.hpp>
|
||||
#include <com/sun/star/util/XAccounting.hpp>
|
||||
#include <com/sun/star/util/XBinaryDataContainer.hpp>
|
||||
#include <basegfx/matrix/b2dhommatrixtools.hxx>
|
||||
#include <vcl/canvastools.hxx>
|
||||
#include <comphelper/seqstream.hxx>
|
||||
@@ -40,6 +41,7 @@
|
||||
#include <vcl/wmfexternal.hxx>
|
||||
#include <vcl/pdfread.hxx>
|
||||
#include <unotools/streamwrap.hxx>
|
||||
#include <graphic/UnoBinaryDataContainer.hxx>
|
||||
|
||||
using namespace ::com::sun::star;
|
||||
|
||||
@@ -249,10 +251,11 @@ void VectorGraphicData::ensureSequenceAndRange()
|
||||
uno::Sequence<beans::PropertyValue> aDecompositionParameters = comphelper::InitPropertySequence({
|
||||
{"PageIndex", uno::makeAny<sal_Int32>(mnPageIndex)},
|
||||
});
|
||||
// TODO: change xPdfDecomposer to use BinaryDataContainer directly
|
||||
css::uno::Sequence<sal_Int8> aDataSequence(maDataContainer.getSize());
|
||||
std::copy(maDataContainer.cbegin(), maDataContainer.cend(), aDataSequence.begin());
|
||||
auto xPrimitive2D = xPdfDecomposer->getDecomposition(aDataSequence, aDecompositionParameters);
|
||||
|
||||
auto* pUnoBinaryDataContainer = new UnoBinaryDataContainer(getBinaryDataContainer());
|
||||
uno::Reference<util::XBinaryDataContainer> xDataContainer = pUnoBinaryDataContainer;
|
||||
|
||||
auto xPrimitive2D = xPdfDecomposer->getDecomposition(xDataContainer, aDecompositionParameters);
|
||||
maSequence = comphelper::sequenceToContainer<std::deque<uno::Reference<graphic::XPrimitive2D>>>(xPrimitive2D);
|
||||
|
||||
break;
|
||||
|
Reference in New Issue
Block a user