[Libreoffice-commits] core.git: include/vcl sd/qa vcl/qa vcl/source

Tomaž Vajngerl (via logerrit) logerrit at kemper.freedesktop.org
Sun Sep 6 12:01:32 UTC 2020


 include/vcl/filter/PDFiumLibrary.hxx     |    3 +
 include/vcl/pdf/PDFAnnotationSubType.hxx |   49 ++++++++++++++++++++++++
 include/vcl/pdfread.hxx                  |    8 +++-
 sd/qa/unit/SdrPdfImportTest.cxx          |   12 ++++--
 vcl/qa/cppunit/PDFiumLibraryTest.cxx     |   18 ++++-----
 vcl/source/filter/ipdf/pdfread.cxx       |   61 +++++++++++++++++--------------
 vcl/source/pdf/PDFiumLibrary.cxx         |    5 ++
 7 files changed, 112 insertions(+), 44 deletions(-)

New commits:
commit 962f1bb95fc38cafe56ea2ba134ce19392102601
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Mon Aug 31 07:53:55 2020 +0200
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Sun Sep 6 14:00:47 2020 +0200

    store annotation subtype in PDFGraphicAnnotation, enum for subtype
    
    Change-Id: Ib804f497a6c8f609e4899f9ebcef4c1096f44ce0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102090
    Tested-by: Tomaž Vajngerl <quikee at gmail.com>
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/include/vcl/filter/PDFiumLibrary.hxx b/include/vcl/filter/PDFiumLibrary.hxx
index aee470cfd852..6386441b6f39 100644
--- a/include/vcl/filter/PDFiumLibrary.hxx
+++ b/include/vcl/filter/PDFiumLibrary.hxx
@@ -24,6 +24,7 @@
 #include <rtl/ustring.hxx>
 #include <tools/color.hxx>
 #include <vcl/checksum.hxx>
+#include <vcl/pdf/PDFAnnotationSubType.hxx>
 
 #include <fpdf_doc.h>
 
@@ -65,7 +66,7 @@ public:
     ~PDFiumAnnotation();
     FPDF_ANNOTATION getPointer() { return mpAnnotation; }
 
-    int getSubType();
+    PDFAnnotationSubType getSubType();
     basegfx::B2DRectangle getRectangle();
     bool hasKey(OString const& rKey);
     OUString getString(OString const& rKey);
diff --git a/include/vcl/pdf/PDFAnnotationSubType.hxx b/include/vcl/pdf/PDFAnnotationSubType.hxx
new file mode 100644
index 000000000000..bee1d82cd399
--- /dev/null
+++ b/include/vcl/pdf/PDFAnnotationSubType.hxx
@@ -0,0 +1,49 @@
+/* -*- 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
+{
+enum class PDFAnnotationSubType
+{
+    Unknown = 0,
+    Text = 1,
+    Link = 2,
+    FreeText = 3,
+    Line = 4,
+    Square = 5,
+    Circle = 6,
+    Polygon = 7,
+    Polyline = 8,
+    Highlight = 9,
+    Underline = 10,
+    Squiggly = 11,
+    Strikeout = 12,
+    Stamp = 13,
+    Caret = 14,
+    Ink = 15,
+    Popup = 16,
+    FileAttachment = 17,
+    Sound = 18,
+    Movie = 19,
+    Widget = 20,
+    Screen = 21,
+    Printermark = 22,
+    Trapnet = 23,
+    Watermark = 24,
+    Threed = 25,
+    Richmedia = 26,
+    XFAWidget = 27
+};
+
+} // namespace vcl::pdf
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/vcl/pdfread.hxx b/include/vcl/pdfread.hxx
index 4b76d9360f2b..f60ae8ef243f 100644
--- a/include/vcl/pdfread.hxx
+++ b/include/vcl/pdfread.hxx
@@ -17,6 +17,8 @@
 #include <basegfx/range/b2drectangle.hxx>
 #include <com/sun/star/util/DateTime.hpp>
 
+#include <vcl/pdf/PDFAnnotationSubType.hxx>
+
 namespace com::sun::star::uno
 {
 template <typename> class Sequence;
@@ -37,9 +39,11 @@ struct PDFGraphicAnnotation
 {
     OUString maAuthor;
     OUString maText;
-    // In HMM
-    basegfx::B2DRectangle maRectangle;
+
+    basegfx::B2DRectangle maRectangle; // In HMM
     css::util::DateTime maDateTime;
+
+    pdf::PDFAnnotationSubType meSubType;
 };
 
 class PDFGraphicResult
diff --git a/sd/qa/unit/SdrPdfImportTest.cxx b/sd/qa/unit/SdrPdfImportTest.cxx
index 07f90ba26e24..50e7d233877d 100644
--- a/sd/qa/unit/SdrPdfImportTest.cxx
+++ b/sd/qa/unit/SdrPdfImportTest.cxx
@@ -209,10 +209,12 @@ CPPUNIT_TEST_FIXTURE(SdrPdfImportTest, testAnnotationsImportExport)
         CPPUNIT_ASSERT_EQUAL(2, pPDFPage->getAnnotationCount());
 
         auto pPDFAnnotation1 = pPDFPage->getAnnotation(0);
-        CPPUNIT_ASSERT_EQUAL(1, pPDFAnnotation1->getSubType()); // Text annotation
+        CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Text,
+                             pPDFAnnotation1->getSubType()); // Text annotation
 
         auto pPDFAnnotation2 = pPDFPage->getAnnotation(1);
-        CPPUNIT_ASSERT_EQUAL(16, pPDFAnnotation2->getSubType()); // Pop-up annotation
+        CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Popup,
+                             pPDFAnnotation2->getSubType()); // Pop-up annotation
     }
 
     { // save as PDF and check annotations
@@ -243,10 +245,12 @@ CPPUNIT_TEST_FIXTURE(SdrPdfImportTest, testAnnotationsImportExport)
         CPPUNIT_ASSERT_EQUAL(2, pPDFPage->getAnnotationCount());
 
         auto pPDFAnnotation1 = pPDFPage->getAnnotation(0);
-        CPPUNIT_ASSERT_EQUAL(1, pPDFAnnotation1->getSubType()); // Text annotation
+        CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Text,
+                             pPDFAnnotation1->getSubType()); // Text annotation
 
         auto pPDFAnnotation2 = pPDFPage->getAnnotation(1);
-        CPPUNIT_ASSERT_EQUAL(16, pPDFAnnotation2->getSubType()); // Pop-up annotation
+        CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Popup,
+                             pPDFAnnotation2->getSubType()); // Pop-up annotation
 
         // Load document again
         mxComponent = loadFromDesktop(aTempFile.GetURL());
diff --git a/vcl/qa/cppunit/PDFiumLibraryTest.cxx b/vcl/qa/cppunit/PDFiumLibraryTest.cxx
index 43d6b92bae27..7e60ab92ec2a 100644
--- a/vcl/qa/cppunit/PDFiumLibraryTest.cxx
+++ b/vcl/qa/cppunit/PDFiumLibraryTest.cxx
@@ -184,7 +184,7 @@ void PDFiumLibraryTest::testAnnotationsMadeInEvince()
     {
         auto pAnnotation = pPage->getAnnotation(0);
         CPPUNIT_ASSERT(pAnnotation);
-        CPPUNIT_ASSERT_EQUAL(1, pAnnotation->getSubType()); // FPDF_ANNOT_TEXT
+        CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Text, pAnnotation->getSubType());
 
         OUString aPopupString = pAnnotation->getString(vcl::pdf::constDictionaryKeyTitle);
         CPPUNIT_ASSERT_EQUAL(OUString("quikee"), aPopupString);
@@ -197,7 +197,7 @@ void PDFiumLibraryTest::testAnnotationsMadeInEvince()
         CPPUNIT_ASSERT(pPopupAnnotation);
 
         CPPUNIT_ASSERT_EQUAL(1, pPage->getAnnotationIndex(pPopupAnnotation));
-        CPPUNIT_ASSERT_EQUAL(16, pPopupAnnotation->getSubType());
+        CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Popup, pPopupAnnotation->getSubType());
 
         OUString sDateTimeString
             = pAnnotation->getString(vcl::pdf::constDictionaryKeyModificationDate);
@@ -207,7 +207,7 @@ void PDFiumLibraryTest::testAnnotationsMadeInEvince()
     {
         auto pAnnotation = pPage->getAnnotation(1);
         CPPUNIT_ASSERT(pAnnotation);
-        CPPUNIT_ASSERT_EQUAL(16, pAnnotation->getSubType()); // FPDF_ANNOT_POPUP
+        CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Popup, pAnnotation->getSubType());
     }
 }
 
@@ -241,7 +241,7 @@ void PDFiumLibraryTest::testAnnotationsMadeInAcrobat()
     {
         auto pAnnotation = pPage->getAnnotation(0);
         CPPUNIT_ASSERT(pAnnotation);
-        CPPUNIT_ASSERT_EQUAL(1, pAnnotation->getSubType()); // FPDF_ANNOT_TEXT
+        CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Text, pAnnotation->getSubType());
 
         OUString aPopupString = pAnnotation->getString(vcl::pdf::constDictionaryKeyTitle);
         CPPUNIT_ASSERT_EQUAL(OUString("quikee"), aPopupString);
@@ -254,19 +254,19 @@ void PDFiumLibraryTest::testAnnotationsMadeInAcrobat()
         CPPUNIT_ASSERT(pPopupAnnotation);
 
         CPPUNIT_ASSERT_EQUAL(1, pPage->getAnnotationIndex(pPopupAnnotation));
-        CPPUNIT_ASSERT_EQUAL(16, pPopupAnnotation->getSubType());
+        CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Popup, pPopupAnnotation->getSubType());
     }
 
     {
         auto pAnnotation = pPage->getAnnotation(1);
         CPPUNIT_ASSERT(pAnnotation);
-        CPPUNIT_ASSERT_EQUAL(16, pAnnotation->getSubType()); // FPDF_ANNOT_POPUP
+        CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Popup, pAnnotation->getSubType());
     }
 
     {
         auto pAnnotation = pPage->getAnnotation(2);
         CPPUNIT_ASSERT(pAnnotation);
-        CPPUNIT_ASSERT_EQUAL(1, pAnnotation->getSubType()); // FPDF_ANNOT_TEXT
+        CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Text, pAnnotation->getSubType());
 
         OUString aPopupString = pAnnotation->getString(vcl::pdf::constDictionaryKeyTitle);
         CPPUNIT_ASSERT_EQUAL(OUString("quikee"), aPopupString);
@@ -279,13 +279,13 @@ void PDFiumLibraryTest::testAnnotationsMadeInAcrobat()
         CPPUNIT_ASSERT(pPopupAnnotation);
 
         CPPUNIT_ASSERT_EQUAL(3, pPage->getAnnotationIndex(pPopupAnnotation));
-        CPPUNIT_ASSERT_EQUAL(16, pPopupAnnotation->getSubType());
+        CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Popup, pPopupAnnotation->getSubType());
     }
 
     {
         auto pAnnotation = pPage->getAnnotation(3);
         CPPUNIT_ASSERT(pAnnotation);
-        CPPUNIT_ASSERT_EQUAL(16, pAnnotation->getSubType()); // FPDF_ANNOT_POPUP
+        CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Popup, pAnnotation->getSubType());
     }
 }
 
diff --git a/vcl/source/filter/ipdf/pdfread.cxx b/vcl/source/filter/ipdf/pdfread.cxx
index 5282a012d423..01ab6d3625cd 100644
--- a/vcl/source/filter/ipdf/pdfread.cxx
+++ b/vcl/source/filter/ipdf/pdfread.cxx
@@ -286,36 +286,43 @@ size_t ImportPDFUnloaded(const OUString& rURL, std::vector<PDFGraphicResult>& rG
         for (int nAnnotation = 0; nAnnotation < pPage->getAnnotationCount(); nAnnotation++)
         {
             auto pAnnotation = pPage->getAnnotation(nAnnotation);
-            if (pAnnotation && pAnnotation->getSubType() == 1 /*FPDF_ANNOT_TEXT*/
-                && pAnnotation->hasKey(vcl::pdf::constDictionaryKeyPopup))
+            if (pAnnotation)
             {
-                OUString sAuthor = pAnnotation->getString(vcl::pdf::constDictionaryKeyTitle);
-                OUString sText = pAnnotation->getString(vcl::pdf::constDictionaryKeyContents);
-                auto pPopupAnnotation = pAnnotation->getLinked(vcl::pdf::constDictionaryKeyPopup);
-
-                basegfx::B2DRectangle rRectangle = pAnnotation->getRectangle();
-                basegfx::B2DRectangle rRectangleHMM(
-                    convertPointToMm100(rRectangle.getMinX()),
-                    convertPointToMm100(aPageSize.getY() - rRectangle.getMinY()),
-                    convertPointToMm100(rRectangle.getMaxX()),
-                    convertPointToMm100(aPageSize.getY() - rRectangle.getMaxY()));
-
-                OUString sDateTimeString
-                    = pAnnotation->getString(vcl::pdf::constDictionaryKeyModificationDate);
-                OUString sISO8601String = vcl::pdf::convertPdfDateToISO8601(sDateTimeString);
-
-                css::util::DateTime aDateTime;
-                if (!sISO8601String.isEmpty())
+                auto eSubtype = pAnnotation->getSubType();
+
+                if (eSubtype == vcl::pdf::PDFAnnotationSubType::Text
+                    && pAnnotation->hasKey(vcl::pdf::constDictionaryKeyPopup))
                 {
-                    utl::ISO8601parseDateTime(sISO8601String, aDateTime);
+                    OUString sAuthor = pAnnotation->getString(vcl::pdf::constDictionaryKeyTitle);
+                    OUString sText = pAnnotation->getString(vcl::pdf::constDictionaryKeyContents);
+                    auto pPopupAnnotation
+                        = pAnnotation->getLinked(vcl::pdf::constDictionaryKeyPopup);
+
+                    basegfx::B2DRectangle rRectangle = pAnnotation->getRectangle();
+                    basegfx::B2DRectangle rRectangleHMM(
+                        convertPointToMm100(rRectangle.getMinX()),
+                        convertPointToMm100(aPageSize.getY() - rRectangle.getMinY()),
+                        convertPointToMm100(rRectangle.getMaxX()),
+                        convertPointToMm100(aPageSize.getY() - rRectangle.getMaxY()));
+
+                    OUString sDateTimeString
+                        = pAnnotation->getString(vcl::pdf::constDictionaryKeyModificationDate);
+                    OUString sISO8601String = vcl::pdf::convertPdfDateToISO8601(sDateTimeString);
+
+                    css::util::DateTime aDateTime;
+                    if (!sISO8601String.isEmpty())
+                    {
+                        utl::ISO8601parseDateTime(sISO8601String, aDateTime);
+                    }
+
+                    PDFGraphicAnnotation aPDFGraphicAnnotation;
+                    aPDFGraphicAnnotation.maRectangle = rRectangleHMM;
+                    aPDFGraphicAnnotation.maAuthor = sAuthor;
+                    aPDFGraphicAnnotation.maText = sText;
+                    aPDFGraphicAnnotation.maDateTime = aDateTime;
+                    aPDFGraphicAnnotation.meSubType = eSubtype;
+                    aPDFGraphicAnnotations.push_back(aPDFGraphicAnnotation);
                 }
-
-                PDFGraphicAnnotation aPDFGraphicAnnotation;
-                aPDFGraphicAnnotation.maRectangle = rRectangleHMM;
-                aPDFGraphicAnnotation.maAuthor = sAuthor;
-                aPDFGraphicAnnotation.maText = sText;
-                aPDFGraphicAnnotation.maDateTime = aDateTime;
-                aPDFGraphicAnnotations.push_back(aPDFGraphicAnnotation);
             }
         }
 
diff --git a/vcl/source/pdf/PDFiumLibrary.cxx b/vcl/source/pdf/PDFiumLibrary.cxx
index bacb45097c1b..f8d5b79c8f6f 100644
--- a/vcl/source/pdf/PDFiumLibrary.cxx
+++ b/vcl/source/pdf/PDFiumLibrary.cxx
@@ -391,7 +391,10 @@ PDFiumAnnotation::~PDFiumAnnotation()
         FPDFPage_CloseAnnot(mpAnnotation);
 }
 
-int PDFiumAnnotation::getSubType() { return FPDFAnnot_GetSubtype(mpAnnotation); }
+PDFAnnotationSubType PDFiumAnnotation::getSubType()
+{
+    return PDFAnnotationSubType(FPDFAnnot_GetSubtype(mpAnnotation));
+}
 
 basegfx::B2DRectangle PDFiumAnnotation::getRectangle()
 {


More information about the Libreoffice-commits mailing list