summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/pdfread.hxx18
-rw-r--r--sd/source/filter/pdf/sdpdffilter.cxx17
-rw-r--r--vcl/source/filter/ipdf/pdfread.cxx13
3 files changed, 15 insertions, 33 deletions
diff --git a/include/vcl/pdfread.hxx b/include/vcl/pdfread.hxx
index b56e8139447d..ba0eb1ca85be 100644
--- a/include/vcl/pdfread.hxx
+++ b/include/vcl/pdfread.hxx
@@ -14,19 +14,10 @@
#include <tools/gen.hxx>
#include <tools/stream.hxx>
-namespace com
-{
-namespace sun
-{
-namespace star
-{
-namespace uno
+namespace com::sun::star::uno
{
template <typename> class Sequence;
}
-}
-}
-}
class Bitmap;
class Graphic;
@@ -40,13 +31,10 @@ VCL_DLLPUBLIC size_t RenderPDFBitmaps(const void* pBuffer, int nSize, std::vecto
/// Imports a PDF stream into rGraphic as VectorGraphicData.
VCL_DLLPUBLIC bool ImportPDF(SvStream& rStream, Graphic& rGraphic);
-/// Import PDF as Graphic images (1 per page), all unloaded.
-/// Since Graphic is unloaded, we need to return the page size (in pixels) separately.
-/// Does not set rPdfData if no conversion is done.
+/// Import PDF as Graphic images (1 per page), but not loaded yet.
/// Returns the number of pages read.
VCL_DLLPUBLIC size_t ImportPDFUnloaded(const OUString& rURL,
- std::vector<std::pair<Graphic, Size>>& rGraphics,
- double fResolutionDPI = 96.);
+ std::vector<std::pair<Graphic, Size>>& rGraphics);
}
#endif // INCLUDED_VCL_SOURCE_FILTER_IPDF_PDFREAD_HXX
diff --git a/sd/source/filter/pdf/sdpdffilter.cxx b/sd/source/filter/pdf/sdpdffilter.cxx
index 22df932e7ee8..55d21f4057b8 100644
--- a/sd/source/filter/pdf/sdpdffilter.cxx
+++ b/sd/source/filter/pdf/sdpdffilter.cxx
@@ -41,11 +41,8 @@ bool SdPdfFilter::Import()
const OUString aFileName(
mrMedium.GetURLObject().GetMainURL(INetURLObject::DecodeMechanism::NONE));
- // Rendering resolution.
- const double dResolutionDPI = 96.0;
-
std::vector<std::pair<Graphic, Size>> aGraphics;
- if (vcl::ImportPDFUnloaded(aFileName, aGraphics, dResolutionDPI) == 0)
+ if (vcl::ImportPDFUnloaded(aFileName, aGraphics) == 0)
return false;
// Add as many pages as we need up-front.
@@ -58,26 +55,20 @@ bool SdPdfFilter::Import()
for (const std::pair<Graphic, Size>& aPair : aGraphics)
{
const Graphic& rGraphic = aPair.first;
- const Size& aSize = aPair.second;
+ const Size& aSizeHMM = aPair.second;
const sal_Int32 nPageNumber = rGraphic.getPageNumber();
assert(nPageNumber >= 0 && o3tl::make_unsigned(nPageNumber) < aGraphics.size());
// Create the page and insert the Graphic.
SdPage* pPage = mrDocument.GetSdPage(nPageNumber, PageKind::Standard);
- Size aGraphicSize(OutputDevice::LogicToLogic(aSize, rGraphic.GetPrefMapMode(),
- MapMode(MapUnit::Map100thMM)));
-
- // Resize to original size based on 72 dpi to preserve page size.
- aGraphicSize = Size(aGraphicSize.Width() * 72.0 / dResolutionDPI,
- aGraphicSize.Height() * 72.0 / dResolutionDPI);
// Make the page size match the rendered image.
- pPage->SetSize(aGraphicSize);
+ pPage->SetSize(aSizeHMM);
Point aPosition(0, 0);
SdrGrafObj* pSdrGrafObj = new SdrGrafObj(pPage->getSdrModelFromSdrPage(), rGraphic,
- tools::Rectangle(aPosition, aGraphicSize));
+ tools::Rectangle(aPosition, aSizeHMM));
pPage->InsertObject(pSdrGrafObj);
}
diff --git a/vcl/source/filter/ipdf/pdfread.cxx b/vcl/source/filter/ipdf/pdfread.cxx
index b85a79d86e4a..8a90b0ab93ca 100644
--- a/vcl/source/filter/ipdf/pdfread.cxx
+++ b/vcl/source/filter/ipdf/pdfread.cxx
@@ -234,8 +234,7 @@ bool ImportPDF(SvStream& rStream, Graphic& rGraphic)
return true;
}
-size_t ImportPDFUnloaded(const OUString& rURL, std::vector<std::pair<Graphic, Size>>& rGraphics,
- const double fResolutionDPI)
+size_t ImportPDFUnloaded(const OUString& rURL, std::vector<std::pair<Graphic, Size>>& rGraphics)
{
#if HAVE_FEATURE_PDFIUM
std::unique_ptr<SvStream> xStream(
@@ -279,9 +278,13 @@ size_t ImportPDFUnloaded(const OUString& rURL, std::vector<std::pair<Graphic, Si
if (FPDF_GetPageSizeByIndex(pPdfDocument, nPageIndex, &fPageWidth, &fPageHeight) == 0)
continue;
- // Returned unit is points, convert that to pixel.
- const size_t nPageWidth = pointToPixel(fPageWidth, fResolutionDPI);
- const size_t nPageHeight = pointToPixel(fPageHeight, fResolutionDPI);
+ // Returned unit is points, convert that to 100th mm (hmm).
+ // 1 pt = 20 twips, 1 twip = 1.7638888888888889 hmm
+ // TODO: use some conversion class for that
+ constexpr double pointToHMMconversionRatio = 20.0 * 1.7638888888888889;
+
+ long nPageWidth = fPageWidth * pointToHMMconversionRatio;
+ long nPageHeight = fPageHeight * pointToHMMconversionRatio;
auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>(
aPdfDataArray, OUString(), VectorGraphicDataType::Pdf, nPageIndex);