vcl/inc/pdf/XmpMetadata.hxx       |    1 +
 vcl/source/gdi/pdfwriter_impl.cxx |   32 +++++++++++++++++++++-----------
 vcl/source/pdf/XmpMetadata.cxx    |    8 +++++++-
 3 files changed, 29 insertions(+), 12 deletions(-)

New commits:
commit a45f72b8122d3bb4c0d5ac4252cf7e5a25d52291
Author:     Sarper Akdemir <sarper.akdemir.ext...@allotropia.de>
AuthorDate: Thu Aug 31 02:59:51 2023 +0300
Commit:     Sarper Akdemir <sarper.akdemir.ext...@allotropia.de>
CommitDate: Mon Sep 4 20:53:40 2023 +0200

    tdf#138792: PDF export: export metadata pdf:PDFVersion
    
    Adds export of pdf:PDFVersion metadata.
    
    Change-Id: Ic4c3eec3672839d0d125b64dfca6149912cd2458
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156329
    Tested-by: Jenkins
    Reviewed-by: Sarper Akdemir <sarper.akdemir.ext...@allotropia.de>

diff --git a/vcl/inc/pdf/XmpMetadata.hxx b/vcl/inc/pdf/XmpMetadata.hxx
index d94d6e690c3c..a144266497cf 100644
--- a/vcl/inc/pdf/XmpMetadata.hxx
+++ b/vcl/inc/pdf/XmpMetadata.hxx
@@ -27,6 +27,7 @@ public:
     OString msAuthor;
     OString msSubject;
     OString msProducer;
+    OString msPDFVersion;
     OString msKeywords;
     OString m_sCreatorTool;
     OString m_sCreateDate;
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx 
b/vcl/source/gdi/pdfwriter_impl.cxx
index def3d4ee3ba5..00b59830f048 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -623,6 +623,25 @@ void appendPdfTimeDate(OStringBuffer & rBuffer,
     }
 }
 
+const char* getPDFVersionStr(PDFWriter::PDFVersion ePDFVersion)
+{
+    switch (ePDFVersion)
+    {
+        case PDFWriter::PDFVersion::PDF_A_1:
+        case PDFWriter::PDFVersion::PDF_1_4:
+            return "1.4";
+        case PDFWriter::PDFVersion::PDF_1_5:
+            return "1.5";
+        case PDFWriter::PDFVersion::PDF_1_6:
+            return "1.6";
+        default:
+        case PDFWriter::PDFVersion::PDF_A_2:
+        case PDFWriter::PDFVersion::PDF_A_3:
+        case PDFWriter::PDFVersion::PDF_1_7:
+            return "1.7";
+    }
+}
+
 } // end namespace
 
 PDFPage::PDFPage( PDFWriterImpl* pWriter, double nPageWidth, double 
nPageHeight, PDFWriter::Orientation eOrientation )
@@ -1295,17 +1314,7 @@ PDFWriterImpl::PDFWriterImpl( const 
PDFWriter::PDFWriterContext& rContext,
     // write header
     OStringBuffer aBuffer( 20 );
     aBuffer.append( "%PDF-" );
-    switch( m_aContext.Version )
-    {
-        case PDFWriter::PDFVersion::PDF_A_1:
-        case PDFWriter::PDFVersion::PDF_1_4: aBuffer.append( "1.4" );break;
-        case PDFWriter::PDFVersion::PDF_1_5: aBuffer.append( "1.5" );break;
-        case PDFWriter::PDFVersion::PDF_1_6: aBuffer.append( "1.6" );break;
-        default:
-        case PDFWriter::PDFVersion::PDF_A_2:
-        case PDFWriter::PDFVersion::PDF_A_3:
-        case PDFWriter::PDFVersion::PDF_1_7: aBuffer.append( "1.7" );break;
-    }
+    aBuffer.append(getPDFVersionStr(m_aContext.Version));
     // append something binary as comment (suggested in PDF Reference)
     aBuffer.append( "\n%\303\244\303\274\303\266\303\237\n" );
     if( !writeBuffer( aBuffer ) )
@@ -5952,6 +5961,7 @@ sal_Int32 PDFWriterImpl::emitDocumentMetadata()
         lcl_assignMeta(m_aContext.DocumentInfo.Author, aMetadata.msAuthor);
         lcl_assignMeta(m_aContext.DocumentInfo.Subject, aMetadata.msSubject);
         lcl_assignMeta(m_aContext.DocumentInfo.Producer, aMetadata.msProducer);
+        aMetadata.msPDFVersion = getPDFVersionStr(m_aContext.Version);
         lcl_assignMeta(m_aContext.DocumentInfo.Keywords, aMetadata.msKeywords);
         lcl_assignMeta(m_aContext.DocumentInfo.Creator, 
aMetadata.m_sCreatorTool);
         aMetadata.m_sCreateDate = m_aCreationMetaDateString;
diff --git a/vcl/source/pdf/XmpMetadata.cxx b/vcl/source/pdf/XmpMetadata.cxx
index 7b0df42dbb92..6dae3b86ebc1 100644
--- a/vcl/source/pdf/XmpMetadata.cxx
+++ b/vcl/source/pdf/XmpMetadata.cxx
@@ -122,7 +122,7 @@ void XmpMetadata::write()
         }
 
         // PDF properties
-        if (!msProducer.isEmpty() || !msKeywords.isEmpty())
+        if (!msProducer.isEmpty() || !msKeywords.isEmpty() || 
!msPDFVersion.isEmpty())
         {
             aXmlWriter.startElement("rdf:Description");
             aXmlWriter.attribute("rdf:about", OString(""));
@@ -139,6 +139,12 @@ void XmpMetadata::write()
                 aXmlWriter.content(msKeywords);
                 aXmlWriter.endElement();
             }
+            if (!msPDFVersion.isEmpty())
+            {
+                aXmlWriter.startElement("pdf:PDFVersion");
+                aXmlWriter.content(msPDFVersion);
+                aXmlWriter.endElement();
+            }
             aXmlWriter.endElement();
         }
 

Reply via email to