diff --git a/include/vcl/pdfwriter.hxx b/include/vcl/pdfwriter.hxx
index a375cc80e2c2..ed703cc68a95 100644
--- a/include/vcl/pdfwriter.hxx
+++ b/include/vcl/pdfwriter.hxx
@@ -195,7 +195,7 @@ public:
enum FormatType
{
- Text, Number, Time
+ Text, Number, Time, Date
};
enum ErrorCode
@@ -389,6 +389,7 @@ public:
sal_Int32 DecimalAccuracy;
bool PrependCurrencySymbol;
OUString TimeFormat;
+ OUString DateFormat;
EditWidget()
: AnyWidget( vcl::PDFWriter::Edit ),
diff --git a/toolkit/source/helper/formpdfexport.cxx b/toolkit/source/helper/formpdfexport.cxx
index def4f38d8a61..1c001cd9e5c5 100644
--- a/toolkit/source/helper/formpdfexport.cxx
+++ b/toolkit/source/helper/formpdfexport.cxx
@@ -555,6 +555,54 @@ namespace toolkitform
}
}
} break;
+ case FormComponentType::DATEFIELD:
+ {
+ pEditWidget->Format = vcl::PDFWriter::Date;
+
+ static constexpr OUStringLiteral FM_PROP_DATEFORMAT = u"DateFormat";
+ if ( xPSI->hasPropertyByName( FM_PROP_DATEFORMAT ) )
+ {
+ sal_Int32 nDateFormat = 0;
+ if( ! (xModelProps->getPropertyValue( FM_PROP_DATEFORMAT ) >>= nDateFormat) )
+ SAL_WARN("toolkit.helper", "describePDFControl: unable to get property " << FM_PROP_DATEFORMAT);
+
+ switch ( nDateFormat )
+ {
+ case 0:
+ case 1:
+ pEditWidget->DateFormat = "mm/dd/yy"; // Standard (short)
+ break;
+ case 2:
+ case 3:
+ pEditWidget->DateFormat = "mm/dd/yyyy"; // Standard (long)
+ break;
+ case 4:
+ pEditWidget->DateFormat = "dd/mm/yy"; // DD/MM/YY
+ break;
+ case 5:
+ pEditWidget->DateFormat = "mm/dd/yy"; // MM/DD/YY
+ break;
+ case 6:
+ pEditWidget->DateFormat = "yy/mm/dd"; // YY/MM/DD
+ break;
+ case 7:
+ pEditWidget->DateFormat = "dd/mm/yyyy"; // DD/MM/YYYY
+ break;
+ case 8:
+ pEditWidget->DateFormat = "mm/dd/yyyy"; // MM/DD/YYYY
+ break;
+ case 9:
+ pEditWidget->DateFormat = "yyyy/mm/dd"; // YYYY/MM/DD
+ break;
+ case 10:
+ pEditWidget->DateFormat = "yy-mm-dd"; // YY-MM-DD
+ break;
+ case 11:
+ pEditWidget->DateFormat = "yyyy-mm-dd"; // YYYY-MM-DD
+ break;
+ }
+ }
+ } break;
}
}
diff --git a/vcl/inc/pdf/pdfwriter_impl.hxx b/vcl/inc/pdf/pdfwriter_impl.hxx
index 4affbe40f24e..93889954476d 100644
--- a/vcl/inc/pdf/pdfwriter_impl.hxx
+++ b/vcl/inc/pdf/pdfwriter_impl.hxx
@@ -473,6 +473,7 @@ struct PDFWidget : public PDFAnnotation
sal_Int32 m_nDecimalAccuracy;
bool m_bPrependCurrencySymbol;
OUString m_aTimeFormat;
+ OUString m_aDateFormat;
bool m_bSubmit;
bool m_bSubmitGet;
sal_Int32 m_nDest;
diff --git a/vcl/qa/cppunit/pdfexport/data/tdf105972.fodt b/vcl/qa/cppunit/pdfexport/data/tdf105972.fodt
index dd8081eafde1..b9f1e29f5548 100644
--- a/vcl/qa/cppunit/pdfexport/data/tdf105972.fodt
+++ b/vcl/qa/cppunit/pdfexport/data/tdf105972.fodt
@@ -1,6 +1,6 @@
- 2022-05-17T10:53:27.0449158892022-05-18T10:38:21.488324901PT2M19S5LibreOfficeDev/7.4.0.0.alpha1$Linux_X86_64 LibreOffice_project/724710def53bf0a8948fcc3e83447a021aa20513
+ 2022-05-17T10:53:27.0449158892022-05-18T18:02:56.717773462PT3M6LibreOfficeDev/7.4.0.0.alpha1$Linux_X86_64 LibreOffice_project/9e37c70c5c7413aee31f13fcd154cae30153e8ae
@@ -9,7 +9,7 @@
-
+
@@ -82,13 +82,13 @@
-
-
+
+
-
+
-
+
@@ -110,6 +110,13 @@
+
+
+ -
+
+ -
+
+
@@ -142,6 +149,15 @@
+
+
+
+
+
+
+
+
+
@@ -151,9 +167,9 @@
-
+
-
+
\ No newline at end of file
diff --git a/vcl/qa/cppunit/pdfexport/pdfexport.cxx b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
index 6dc8f425ef67..9785bfe63732 100644
--- a/vcl/qa/cppunit/pdfexport/pdfexport.cxx
+++ b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
@@ -866,7 +866,7 @@ CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf105972)
auto pAnnots = dynamic_cast(aPages[0]->Lookup("Annots"));
CPPUNIT_ASSERT(pAnnots);
- CPPUNIT_ASSERT_EQUAL(static_cast(2), pAnnots->GetElements().size());
+ CPPUNIT_ASSERT_EQUAL(static_cast(3), pAnnots->GetElements().size());
sal_uInt32 nTextFieldCount = 0;
for (const auto& aElement : aDocument.GetElements())
@@ -898,7 +898,7 @@ CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf105972)
OString("AFNumber_Format\\(4, 0, 0, 0, \"\\\\u20ac\",true\\);"),
pJS->GetValue());
}
- else
+ else if (nTextFieldCount == 2)
{
CPPUNIT_ASSERT_EQUAL(OString("TimeField"), pT->GetValue());
@@ -907,6 +907,15 @@ CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf105972)
CPPUNIT_ASSERT_EQUAL(OString("AFTime_FormatEx\\(\"h:MM:sstt\"\\);"),
pJS->GetValue());
}
+ else
+ {
+ CPPUNIT_ASSERT_EQUAL(OString("DateField"), pT->GetValue());
+
+ auto pJS
+ = dynamic_cast(pF->LookupElement("JS"));
+ CPPUNIT_ASSERT_EQUAL(OString("AFDate_FormatEx\\(\"yy-mm-dd\"\\);"),
+ pJS->GetValue());
+ }
}
}
}
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index 7d5264af56ad..54f5a0416561 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -4435,6 +4435,19 @@ bool PDFWriterImpl::emitWidgetAnnotations()
aLine.append("/S/JavaScript>>\n");
aLine.append(">>\n");
}
+ else if ( rWidget.m_nFormat == PDFWriter::Date )
+ {
+ aLine.append("/AA<<\n");
+ aLine.append("/F<>\n");
+ aLine.append("/K<>\n");
+ aLine.append(">>\n");
+ }
}
if( rWidget.m_eType == PDFWriter::PushButton )
{
@@ -11029,6 +11042,7 @@ sal_Int32 PDFWriterImpl::createControl( const PDFWriter::AnyWidget& rControl, sa
rNewWidget.m_nDecimalAccuracy = rEdit.DecimalAccuracy;
rNewWidget.m_bPrependCurrencySymbol = rEdit.PrependCurrencySymbol;
rNewWidget.m_aTimeFormat = rEdit.TimeFormat;
+ rNewWidget.m_aDateFormat = rEdit.DateFormat;
rNewWidget.m_aValue = rEdit.Text;
createDefaultEditAppearance( rNewWidget, rEdit );