filter/source/pdf/impdialog.cxx | 11 +++----- filter/source/pdf/impdialog.hxx | 6 ++-- filter/source/pdf/pdfexport.cxx | 14 ++++++++++ filter/source/pdf/pdfexport.hxx | 6 ++++ vcl/inc/vcl/pdfwriter.hxx | 6 ++++ vcl/source/gdi/pdfwriter_impl.cxx | 50 +++++++++++++++++++++++++++++--------- 6 files changed, 72 insertions(+), 21 deletions(-)
New commits: commit 7a2a0dc0327b130da93ab52151a1aa1da1d4ac34 Author: Gökçen Eraslan <gokcen.eras...@gmail.com> Date: Sun Jul 1 00:33:03 2012 +0300 Make PDF Signing GUI operative. Now, PDFWriterContext is used for signing information. GUI elements are recorded to PDFWriterContext and used during signing process. Sign PDF checkbox and Location/Contact Info/Reason boxes are all working now. Change-Id: I1d0cb53323707efa7e460431dd1519bcd34e8b29 diff --git a/filter/source/pdf/impdialog.cxx b/filter/source/pdf/impdialog.cxx index 6740143..1ca8a9a 100644 --- a/filter/source/pdf/impdialog.cxx +++ b/filter/source/pdf/impdialog.cxx @@ -127,10 +127,7 @@ ImpPDFTabDialog::ImpPDFTabDialog( Window* pParent, mbConvertOOoTargets( sal_False ), mbExportBmkToPDFDestination( sal_False ), - mbSignPDF( sal_False ), - msSignLocation ( ' ' ), - msSignContact( ' ' ), - msSignReason( ' ' ) + mbSignPDF( sal_False ) { FreeResource(); @@ -462,15 +459,15 @@ Sequence< PropertyValue > ImpPDFTabDialog::GetFilterData() } aRet[ nLength - nElementAdded ].Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "SignatureLocation" ) ); - aRet[ nLength - nElementAdded ].Value <<= OUString( msSignLocation ); + aRet[ nLength - nElementAdded ].Value <<= msSignLocation; nElementAdded--; aRet[ nLength - nElementAdded ].Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "SignatureReason" ) ); - aRet[ nLength - nElementAdded ].Value <<= OUString( msSignReason ); + aRet[ nLength - nElementAdded ].Value <<= msSignReason; nElementAdded--; aRet[ nLength - nElementAdded ].Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "SignatureContactInfo" ) ); - aRet[ nLength - nElementAdded ].Value <<= OUString( msSignContact ); + aRet[ nLength - nElementAdded ].Value <<= msSignContact; nElementAdded--; return aRet; diff --git a/filter/source/pdf/impdialog.hxx b/filter/source/pdf/impdialog.hxx index f227c14..b83343b 100644 --- a/filter/source/pdf/impdialog.hxx +++ b/filter/source/pdf/impdialog.hxx @@ -151,9 +151,9 @@ protected: sal_Bool mbExportBmkToPDFDestination; sal_Bool mbSignPDF; - String msSignLocation; - String msSignContact; - String msSignReason; + ::rtl::OUString msSignLocation; + ::rtl::OUString msSignContact; + ::rtl::OUString msSignReason; ::rtl::OUString maWatermarkText; diff --git a/filter/source/pdf/pdfexport.cxx b/filter/source/pdf/pdfexport.cxx index db93010..a137cee 100644 --- a/filter/source/pdf/pdfexport.cxx +++ b/filter/source/pdf/pdfexport.cxx @@ -554,6 +554,14 @@ sal_Bool PDFExport::Export( const OUString& rFile, const Sequence< PropertyValue rFilterData[ nData ].Value >>= mbExportHiddenSlides; else if ( rFilterData[ nData ].Name == "OpenBookmarkLevels" ) rFilterData[ nData ].Value >>= mnOpenBookmarkLevels; + else if ( rFilterData[ nData ].Name == "SignPDF" ) + rFilterData[ nData ].Value >>= mbSignPDF; + else if ( rFilterData[ nData ].Name == "SignatureLocation" ) + rFilterData[ nData ].Value >>= msSignLocation; + else if ( rFilterData[ nData ].Name == "SignatureReason" ) + rFilterData[ nData ].Value >>= msSignReason; + else if ( rFilterData[ nData ].Name == "SignatureContactInfo" ) + rFilterData[ nData ].Value >>= msSignContact; } aContext.URL = aURL.GetMainURL(INetURLObject::DECODE_TO_IURI); @@ -781,6 +789,12 @@ sal_Bool PDFExport::Export( const OUString& rFile, const Sequence< PropertyValue aContext.ForcePDFAction = sal_False; } } + + aContext.SignPDF = mbSignPDF; + aContext.SignLocation = msSignLocation; + aContext.SignContact = msSignContact; + aContext.SignReason = msSignReason; + // all context data set, time to create the printing device PDFWriter* pPDFWriter = new PDFWriter( aContext, xEnc ); OutputDevice* pOut = pPDFWriter->GetReferenceDevice(); diff --git a/filter/source/pdf/pdfexport.hxx b/filter/source/pdf/pdfexport.hxx index 3374d0a..baa996e 100644 --- a/filter/source/pdf/pdfexport.hxx +++ b/filter/source/pdf/pdfexport.hxx @@ -117,6 +117,12 @@ private: sal_Bool mbExportBmkToDest; sal_Bool ImplExportPage( ::vcl::PDFWriter& rWriter, ::vcl::PDFExtOutDevData& rPDFExtOutDevData, const GDIMetaFile& rMtf ); + + sal_Bool mbSignPDF; + OUString msSignLocation; + OUString msSignContact; + OUString msSignReason; + void ImplWriteWatermark( ::vcl::PDFWriter& rWriter, const Size& rPageSize ); public: diff --git a/vcl/inc/vcl/pdfwriter.hxx b/vcl/inc/vcl/pdfwriter.hxx index 8ffab09..535c2b3 100644 --- a/vcl/inc/vcl/pdfwriter.hxx +++ b/vcl/inc/vcl/pdfwriter.hxx @@ -629,6 +629,11 @@ The following structure describes the permissions used in PDF security PDFWriter::PDFEncryptionProperties Encryption; PDFWriter::PDFDocInfo DocumentInfo; + bool SignPDF; + rtl::OUString SignLocation; + rtl::OUString SignReason; + rtl::OUString SignContact; + com::sun::star::lang::Locale DocumentLocale; // defines the document default language sal_uInt32 DPIx, DPIy; // how to handle MapMode( MAP_PIXEL ) // 0 here specifies a default handling @@ -660,6 +665,7 @@ The following structure describes the permissions used in PDF security InitialPage( 1 ), OpenBookmarkLevels( -1 ), Encryption(), + SignPDF( false ), DPIx( 0 ), DPIy( 0 ), ColorMode( PDFWriter::DrawColor ) diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index f12f973..6438271 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -138,6 +138,11 @@ void doTestCode() aContext.DocumentInfo.Title = OUString( "PDF export test document" ); aContext.DocumentInfo.Producer = OUString( "VCL" ); + aContext.SignPDF = true; + aContext.SignLocation = OUString( "Burdur" ); + aContext.SignReason = OUString( "Some valid reason to sign" ); + aContext.SignContact = OUString( "sig...@example.com" ); + com::sun::star::uno::Reference< com::sun::star::beans::XMaterialHolder > xEnc; PDFWriter aWriter( aContext, xEnc ); aWriter.NewPage( 595, 842 ); @@ -524,11 +529,6 @@ void doTestCode() aWriter.EndStructureElement(); // close document - // sign the document - PDFWriter::SignatureWidget aSignature; - aSignature.Name = OUString("Signature1"); - aWriter.CreateControl( aSignature, 0); - aWriter.Emit(); } #endif @@ -6099,13 +6099,13 @@ bool PDFWriterImpl::emitSignature() OStringBuffer aContentFiller( MAX_SIGNATURE_CONTENT_LENGTH ); comphelper::string::padToLength(aContentFiller, MAX_SIGNATURE_CONTENT_LENGTH, '0'); aLine.append( aContentFiller.makeStringAndClear() ); - aLine.append( ">\n/Type/Sig/SubFilter/adbe.pkcs7.sha1/Location()" - "/Name "); + aLine.append( ">\n/Type/Sig/SubFilter/adbe.pkcs7.sha1"); if( m_aContext.DocumentInfo.Author.Len() ) + { + aLine.append( "/Name" ); appendUnicodeTextStringEncrypt( m_aContext.DocumentInfo.Author, m_nSignatureObject, aLine ); - else - aLine.append("()"); + } aLine.append( " /M "); appendLiteralStringEncrypt( m_aCreationDateString, m_nSignatureObject, aLine ); @@ -6124,8 +6124,28 @@ bool PDFWriterImpl::emitSignature() OStringBuffer aByteRangeFiller( 100 ); comphelper::string::padToLength(aByteRangeFiller, 100, ' '); aLine.append( aByteRangeFiller.makeStringAndClear() ); - aLine.append(" /Filter/Adobe.PPKMS/Reason()>>" - "\nendobj\n\n" ); + aLine.append(" /Filter/Adobe.PPKMS"); + + //emit reason, location and contactinfo + if ( !m_aContext.SignReason.isEmpty() ) + { + aLine.append("/Reason"); + appendUnicodeTextStringEncrypt( m_aContext.SignReason, m_nSignatureObject, aLine ); + } + + if ( !m_aContext.SignLocation.isEmpty() ) + { + aLine.append("/Location"); + appendUnicodeTextStringEncrypt( m_aContext.SignLocation, m_nSignatureObject, aLine ); + } + + if ( !m_aContext.SignContact.isEmpty() ) + { + aLine.append("/ContactInfo"); + appendUnicodeTextStringEncrypt( m_aContext.SignContact, m_nSignatureObject, aLine ); + } + + aLine.append(" >>\nendobj\n\n" ); if (!writeBuffer( aLine.getStr(), aLine.getLength() )) return false; @@ -6946,6 +6966,14 @@ bool PDFWriterImpl::emit() // needed for widget tab order sortWidgets(); + if( m_aContext.SignPDF ) + { + // sign the document + PDFWriter::SignatureWidget aSignature; + aSignature.Name = OUString("Signature1"); + createControl( aSignature, 0 ); + } + // emit additional streams CHECK_RETURN( emitAdditionalStreams() );
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits