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 );