summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/filter/PDFiumLibrary.hxx2
-rw-r--r--include/vcl/pdf/PDFAnnotationMarker.hxx2
-rw-r--r--vcl/qa/cppunit/PDFiumLibraryTest.cxx58
-rwxr-xr-xvcl/qa/cppunit/data/Annotations_Adobe_FreeText.pdfbin0 -> 251638 bytes
-rw-r--r--vcl/source/filter/ipdf/pdfread.cxx10
5 files changed, 72 insertions, 0 deletions
diff --git a/include/vcl/filter/PDFiumLibrary.hxx b/include/vcl/filter/PDFiumLibrary.hxx
index d90da7286020..e008a502be58 100644
--- a/include/vcl/filter/PDFiumLibrary.hxx
+++ b/include/vcl/filter/PDFiumLibrary.hxx
@@ -46,6 +46,8 @@ inline constexpr OString constDictionaryKeyContents = "Contents"_ostr;
inline constexpr OString constDictionaryKeyPopup = "Popup"_ostr;
inline constexpr OString constDictionaryKeyModificationDate = "M"_ostr;
inline constexpr OString constDictionaryKeyInteriorColor = "IC"_ostr;
+inline constexpr OString constDictionaryKey_DefaultStyle = "DS"_ostr;
+inline constexpr OString constDictionaryKey_RichContent = "RC"_ostr;
class PDFiumBitmap;
class PDFiumDocument;
diff --git a/include/vcl/pdf/PDFAnnotationMarker.hxx b/include/vcl/pdf/PDFAnnotationMarker.hxx
index d1217c65c3af..0c559a4cedae 100644
--- a/include/vcl/pdf/PDFAnnotationMarker.hxx
+++ b/include/vcl/pdf/PDFAnnotationMarker.hxx
@@ -37,6 +37,8 @@ struct VCL_DLLPUBLIC PDFAnnotationMarkerStamp : public PDFAnnotationMarker
/** Free text annotation marker - showing text of the annotation in the document */
struct VCL_DLLPUBLIC PDFAnnotationMarkerFreeText : public PDFAnnotationMarker
{
+ OUString maDefaultStyle;
+ OUString maRichContent;
};
struct VCL_DLLPUBLIC PDFAnnotationMarkerCircle : public PDFAnnotationMarker
diff --git a/vcl/qa/cppunit/PDFiumLibraryTest.cxx b/vcl/qa/cppunit/PDFiumLibraryTest.cxx
index d11c66bae323..df65a6450ca0 100644
--- a/vcl/qa/cppunit/PDFiumLibraryTest.cxx
+++ b/vcl/qa/cppunit/PDFiumLibraryTest.cxx
@@ -412,6 +412,64 @@ CPPUNIT_TEST_FIXTURE(PDFiumLibraryTest, testAnnotationsDifferentTypes)
}
}
+CPPUNIT_TEST_FIXTURE(PDFiumLibraryTest, testAnnotationsFreeText)
+{
+ OUString aURL = getFullUrl(u"Annotations_Adobe_FreeText.pdf");
+ SvFileStream aStream(aURL, StreamMode::READ);
+
+ std::vector<vcl::PDFGraphicResult> aResults;
+ CPPUNIT_ASSERT_EQUAL(size_t(1), vcl::ImportPDFUnloaded(aURL, aResults));
+
+ vcl::PDFGraphicResult& rResult = aResults[0];
+
+ Graphic aGraphic = rResult.GetGraphic();
+ aGraphic.makeAvailable();
+
+ OUString aDefaultStyle;
+ OUString aRichContent;
+
+ {
+ auto pVectorGraphicData = aGraphic.getVectorGraphicData();
+ CPPUNIT_ASSERT(pVectorGraphicData);
+ CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType());
+
+ auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer();
+
+ auto pPdfium = vcl::pdf::PDFiumLibrary::get();
+ auto pDocument
+ = pPdfium->openDocument(rDataContainer.getData(), rDataContainer.getSize(), OString());
+ CPPUNIT_ASSERT(pDocument);
+
+ CPPUNIT_ASSERT_EQUAL(1, pDocument->getPageCount());
+
+ auto pPage = pDocument->openPage(0);
+ CPPUNIT_ASSERT(pPage);
+
+ CPPUNIT_ASSERT_EQUAL(1, pPage->getAnnotationCount());
+
+ auto pAnnotation = pPage->getAnnotation(0);
+ CPPUNIT_ASSERT(pAnnotation);
+ CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::FreeText, pAnnotation->getSubType());
+
+ aDefaultStyle = pAnnotation->getString(vcl::pdf::constDictionaryKey_DefaultStyle);
+ CPPUNIT_ASSERT_EQUAL(false, aDefaultStyle.isEmpty());
+
+ aRichContent = pAnnotation->getString(vcl::pdf::constDictionaryKey_RichContent);
+ CPPUNIT_ASSERT_EQUAL(false, aRichContent.isEmpty());
+ }
+
+ auto const& rAnnotations = rResult.GetAnnotations();
+ CPPUNIT_ASSERT_EQUAL(size_t(1), rAnnotations.size());
+
+ CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::FreeText, rAnnotations[0].meSubType);
+
+ auto* pMarker
+ = static_cast<vcl::pdf::PDFAnnotationMarkerFreeText*>(rAnnotations[0].mpMarker.get());
+
+ CPPUNIT_ASSERT_EQUAL(aDefaultStyle, pMarker->maDefaultStyle);
+ CPPUNIT_ASSERT_EQUAL(aRichContent, pMarker->maRichContent);
+}
+
CPPUNIT_TEST_FIXTURE(PDFiumLibraryTest, testTools)
{
OUString sConverted = vcl::pdf::convertPdfDateToISO8601(u"D:20200612201322+02'00");
diff --git a/vcl/qa/cppunit/data/Annotations_Adobe_FreeText.pdf b/vcl/qa/cppunit/data/Annotations_Adobe_FreeText.pdf
new file mode 100755
index 000000000000..32cb3a6cbc31
--- /dev/null
+++ b/vcl/qa/cppunit/data/Annotations_Adobe_FreeText.pdf
Binary files differ
diff --git a/vcl/source/filter/ipdf/pdfread.cxx b/vcl/source/filter/ipdf/pdfread.cxx
index c7cf5794dffa..c60e8bb4a792 100644
--- a/vcl/source/filter/ipdf/pdfread.cxx
+++ b/vcl/source/filter/ipdf/pdfread.cxx
@@ -329,6 +329,16 @@ findAnnotations(const std::unique_ptr<vcl::pdf::PDFiumPage>& pPage, basegfx::B2D
{
auto pMarker = std::make_shared<vcl::pdf::PDFAnnotationMarkerFreeText>();
rPDFGraphicAnnotation.mpMarker = pMarker;
+ if (pAnnotation->hasKey(vcl::pdf::constDictionaryKey_DefaultStyle))
+ {
+ pMarker->maDefaultStyle
+ = pAnnotation->getString(vcl::pdf::constDictionaryKey_DefaultStyle);
+ }
+ if (pAnnotation->hasKey(vcl::pdf::constDictionaryKey_RichContent))
+ {
+ pMarker->maRichContent
+ = pAnnotation->getString(vcl::pdf::constDictionaryKey_RichContent);
+ }
}
else if (eSubtype == vcl::pdf::PDFAnnotationSubType::Stamp)
{