vcl/Library_vcl.mk | 1 + vcl/inc/pdf/PdfConfig.hxx | 18 ++++++++++++++++++ vcl/source/filter/ipdf/pdfread.cxx | 20 +++----------------- vcl/source/gdi/pdfwriter_impl.cxx | 10 +++++++--- vcl/source/pdf/PdfConfig.cxx | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 61 insertions(+), 20 deletions(-)
New commits: commit 825b08a9b5df984bf5091ec94fbfe78721c15a45 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Thu Aug 26 16:47:31 2021 +0900 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Sun Aug 29 08:59:13 2021 +0200 Take the PDF graphic rendering DPI into account when exporting Change-Id: I1d3465fc7357e6991161d5a96bcd70c53c55f244 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121072 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Andras Timar <andras.ti...@collabora.com> diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk index 082cc64dcef4..1916292b5c36 100644 --- a/vcl/Library_vcl.mk +++ b/vcl/Library_vcl.mk @@ -318,6 +318,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\ vcl/source/gdi/scrptrun \ vcl/source/gdi/CommonSalLayout \ vcl/source/gdi/TypeSerializer \ + vcl/source/pdf/PdfConfig \ vcl/source/pdf/PDFiumLibrary \ vcl/source/pdf/ExternalPDFStreams \ vcl/source/graphic/GraphicID \ diff --git a/vcl/inc/pdf/PdfConfig.hxx b/vcl/inc/pdf/PdfConfig.hxx new file mode 100644 index 000000000000..235fd008ea2b --- /dev/null +++ b/vcl/inc/pdf/PdfConfig.hxx @@ -0,0 +1,18 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + */ + +#pragma once + +namespace vcl::pdf +{ +double getDefaultPdfResolutionDpi(); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/filter/ipdf/pdfread.cxx b/vcl/source/filter/ipdf/pdfread.cxx index acc45bc4d9e4..ef8862c0d1a3 100644 --- a/vcl/source/filter/ipdf/pdfread.cxx +++ b/vcl/source/filter/ipdf/pdfread.cxx @@ -18,6 +18,7 @@ #include <fpdf_formfill.h> #endif +#include <pdf/PdfConfig.hxx> #include <vcl/graph.hxx> #include <bitmapwriteaccess.hxx> #include <unotools/ucbstreamhelper.hxx> @@ -147,27 +148,12 @@ VectorGraphicDataArray createVectorGraphicDataArray(SvStream& rStream) namespace vcl { -/// Get the default PDF rendering resolution in DPI. -static double getDefaultPdfResolutionDpi() -{ - // If an overriding default is set, use it. - const char* envar = ::getenv("PDFIMPORT_RESOLUTION_DPI"); - if (envar) - { - const double dpi = atof(envar); - if (dpi > 0) - return dpi; - } - - // Fallback to a sensible default. - return 96.; -} - size_t RenderPDFBitmaps(const void* pBuffer, int nSize, std::vector<Bitmap>& rBitmaps, const size_t nFirstPage, int nPages, const basegfx::B2DTuple* pSizeHint) { #if HAVE_FEATURE_PDFIUM - static const double fResolutionDPI = getDefaultPdfResolutionDpi(); + static const double fResolutionDPI = vcl::pdf::getDefaultPdfResolutionDpi(); + auto pPdfium = vcl::pdf::PDFiumLibrary::get(); // Load the buffer using pdfium. diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index 70038fa3fb2d..8b435678f93d 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -75,6 +75,7 @@ #include <bitmapwriteaccess.hxx> #include <impglyphitem.hxx> #include <pdf/objectcopier.hxx> +#include <pdf/PdfConfig.hxx> #include "pdfwriter_impl.hxx" @@ -8666,11 +8667,14 @@ void PDFWriterImpl::writeReferenceXObject(ReferenceXObjectEmit& rEmit) return; // Count /Matrix and /BBox. - // vcl::ImportPDF() works with 96 DPI so use the same values here, too. + // vcl::ImportPDF() uses getDefaultPdfResolutionDpi to set the desired + // rendering DPI so we have to take into account that here too. + static const double fResolutionDPI = vcl::pdf::getDefaultPdfResolutionDpi(); + sal_Int32 nOldDPIX = GetDPIX(); - SetDPIX(96); sal_Int32 nOldDPIY = GetDPIY(); - SetDPIY(96); + SetDPIX(fResolutionDPI); + SetDPIY(fResolutionDPI); Size aSize = PixelToLogic(rEmit.m_aPixelSize, MapMode(m_aMapMode.GetMapUnit())); SetDPIX(nOldDPIX); SetDPIY(nOldDPIY); diff --git a/vcl/source/pdf/PdfConfig.cxx b/vcl/source/pdf/PdfConfig.cxx new file mode 100644 index 000000000000..52859c7b1f6e --- /dev/null +++ b/vcl/source/pdf/PdfConfig.cxx @@ -0,0 +1,32 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + */ + +#include <cstdlib> + +namespace vcl::pdf +{ +/// Get the default PDF rendering resolution in DPI. +double getDefaultPdfResolutionDpi() +{ + // If an overriding default is set, use it. + const char* envar = ::getenv("PDFIMPORT_RESOLUTION_DPI"); + if (envar) + { + const double dpi = atof(envar); + if (dpi > 0) + return dpi; + } + + // Fallback to a sensible default. + return 96.; +} +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */