summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2020-04-17 17:28:58 +0200
committerMiklos Vajna <vmiklos@collabora.com>2020-05-06 18:03:19 +0200
commite2e76c1f8cdfa844aa660c52870573e739d3710c (patch)
treedc876b40b41c928225cb2267e11f0916454a34b8 /vcl
parent6cba0e8728dd709c0170fd22fc9b251bdd4994f0 (diff)
Change default PDF version to 1.6 (released in 2004)
We already write markup which is newer than 1.5, but the PDF version was not changed. Fix the one violation I'm aware of. Printing is left unchanged, similar to how commit 99ac4ee05b039166eedfe361fb985682fd92dd13 (Change default PDF version to 1.5, 2018-04-24) updated the default last time. (cherry picked from commit 141e0449fdab89384564659191492b698e4b13d8) Conflicts: filter/source/pdf/pdfexport.cxx include/vcl/pdfwriter.hxx vcl/qa/cppunit/pdfexport/pdfexport.cxx Change-Id: I9598dc46fe7db428bd2eff98bebff8b3c873b4ff Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93503 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/qa/cppunit/pdfexport/pdfexport.cxx53
-rw-r--r--vcl/source/filter/ipdf/pdfread.cxx8
-rw-r--r--vcl/source/gdi/pdfwriter_impl.cxx14
3 files changed, 69 insertions, 6 deletions
diff --git a/vcl/qa/cppunit/pdfexport/pdfexport.cxx b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
index fbc1f9be4160..8186d3857ba3 100644
--- a/vcl/qa/cppunit/pdfexport/pdfexport.cxx
+++ b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
@@ -130,6 +130,8 @@ public:
void testTdf121962();
void testTdf121615();
void testLargePage();
+ void testVersion15();
+ void testDefaultVersion();
CPPUNIT_TEST_SUITE(PdfExportTest);
CPPUNIT_TEST(testTdf106059);
@@ -166,6 +168,8 @@ public:
CPPUNIT_TEST(testTdf121962);
CPPUNIT_TEST(testTdf121615);
CPPUNIT_TEST(testLargePage);
+ CPPUNIT_TEST(testVersion15);
+ CPPUNIT_TEST(testDefaultVersion);
CPPUNIT_TEST_SUITE_END();
};
@@ -1752,6 +1756,55 @@ void PdfExportTest::testLargePage()
CPPUNIT_ASSERT_DOUBLES_EQUAL(8503.94, fWidth, 0.01);
}
+void PdfExportTest::testDefaultVersion()
+{
+ // Create an empty document.
+ mxComponent = loadFromDesktop("private:factory/swriter");
+ CPPUNIT_ASSERT(mxComponent.is());
+
+ // Save as PDF.
+ uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
+ utl::MediaDescriptor aMediaDescriptor;
+ aMediaDescriptor["FilterName"] <<= OUString("writer_pdf_Export");
+ xStorable->storeToURL(maTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList());
+
+ // Parse the export result.
+ SvFileStream aFile(maTempFile.GetURL(), StreamMode::READ);
+ maMemory.WriteStream(aFile);
+ DocumentHolder pPdfDocument(
+ FPDF_LoadMemDocument(maMemory.GetData(), maMemory.GetSize(), /*password=*/nullptr));
+ CPPUNIT_ASSERT(pPdfDocument.get());
+ int nFileVersion = 0;
+ FPDF_GetFileVersion(pPdfDocument.get(), &nFileVersion);
+ CPPUNIT_ASSERT_EQUAL(16, nFileVersion);
+}
+
+void PdfExportTest::testVersion15()
+{
+ // Create an empty document.
+ mxComponent = loadFromDesktop("private:factory/swriter");
+ CPPUNIT_ASSERT(mxComponent.is());
+
+ // Save as PDF.
+ uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aFilterData(comphelper::InitPropertySequence(
+ { { "SelectPdfVersion", uno::makeAny(static_cast<sal_Int32>(15)) } }));
+ utl::MediaDescriptor aMediaDescriptor;
+ aMediaDescriptor["FilterName"] <<= OUString("writer_pdf_Export");
+ aMediaDescriptor["FilterData"] <<= aFilterData;
+ xStorable->storeToURL(maTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList());
+
+ // Parse the export result.
+ SvFileStream aFile(maTempFile.GetURL(), StreamMode::READ);
+ maMemory.WriteStream(aFile);
+ DocumentHolder pPdfDocument(
+ FPDF_LoadMemDocument(maMemory.GetData(), maMemory.GetSize(), /*password=*/nullptr));
+ CPPUNIT_ASSERT(pPdfDocument.get());
+ int nFileVersion = 0;
+ FPDF_GetFileVersion(pPdfDocument.get(), &nFileVersion);
+ CPPUNIT_ASSERT_EQUAL(15, nFileVersion);
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(PdfExportTest);
}
diff --git a/vcl/source/filter/ipdf/pdfread.cxx b/vcl/source/filter/ipdf/pdfread.cxx
index ebe6d0db0c03..f9104152fbe8 100644
--- a/vcl/source/filter/ipdf/pdfread.cxx
+++ b/vcl/source/filter/ipdf/pdfread.cxx
@@ -67,7 +67,7 @@ bool isCompatible(SvStream& rInStream, sal_uInt64 nPos, sal_uInt64 nSize)
sal_Int32 nMajor = OString(aFirstBytes[5]).toInt32();
sal_Int32 nMinor = OString(aFirstBytes[7]).toInt32();
- return !(nMajor > 1 || (nMajor == 1 && nMinor > 5));
+ return !(nMajor > 1 || (nMajor == 1 && nMinor > 6));
}
/// Takes care of transparently downgrading the version of the PDF stream in
@@ -82,7 +82,7 @@ bool getCompatibleStream(SvStream& rInStream, SvStream& rOutStream, sal_uInt64 n
rOutStream.WriteStream(rInStream, nSize);
else
{
- // Downconvert to PDF-1.5.
+ // Downconvert to PDF-1.6.
FPDF_LIBRARY_CONFIG aConfig;
aConfig.version = 2;
aConfig.m_pUserFontPaths = nullptr;
@@ -104,8 +104,8 @@ bool getCompatibleStream(SvStream& rInStream, SvStream& rOutStream, sal_uInt64 n
aWriter.version = 1;
aWriter.WriteBlock = &CompatibleWriterCallback;
- // 15 means PDF-1.5.
- if (!FPDF_SaveWithVersion(pPdfDocument, &aWriter, 0, 15))
+ // 16 means PDF-1.6.
+ if (!FPDF_SaveWithVersion(pPdfDocument, &aWriter, 0, 16))
return false;
FPDF_CloseDocument(pPdfDocument);
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index bf44533afcb2..60be24294217 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -1123,6 +1123,7 @@ PDFWriterImpl::PDFPage::PDFPage( PDFWriterImpl* pWriter, double nPageWidth, doub
m_pWriter( pWriter ),
m_nPageWidth( nPageWidth ),
m_nPageHeight( nPageHeight ),
+ m_nUserUnit( 1 ),
m_eOrientation( eOrientation ),
m_nPageObject( 0 ), // invalid object number
m_nStreamLengthObject( 0 ),
@@ -1132,7 +1133,16 @@ PDFWriterImpl::PDFPage::PDFPage( PDFWriterImpl* pWriter, double nPageWidth, doub
{
// object ref must be only ever updated in emit()
m_nPageObject = m_pWriter->createObject();
- m_nUserUnit = std::ceil(std::max(nPageWidth, nPageHeight) / 14400.0);
+
+ switch (m_pWriter->m_aContext.Version)
+ {
+ case PDFWriter::PDFVersion::PDF_1_6:
+ m_nUserUnit = std::ceil(std::max(nPageWidth, nPageHeight) / 14400.0);
+ break;
+ default:
+ // 1.2 -> 1.5
+ break;
+ }
}
PDFWriterImpl::PDFPage::~PDFPage()
@@ -1798,8 +1808,8 @@ double PDFWriterImpl::PDFPage::getHeight() const
case PDFWriter::PDFVersion::PDF_1_3: aBuffer.append( "1.3" );break;
case PDFWriter::PDFVersion::PDF_A_1:
case PDFWriter::PDFVersion::PDF_1_4: aBuffer.append( "1.4" );break;
- default:
case PDFWriter::PDFVersion::PDF_1_5: aBuffer.append( "1.5" );break;
+ default:
case PDFWriter::PDFVersion::PDF_1_6: aBuffer.append( "1.6" );break;
}
// append something binary as comment (suggested in PDF Reference)