package Ġde . de bu gle vel . pd ff orm fill er . pdf . pdf box Ċ Ċ import Ġde . de bu gle vel . pd ff orm fill er . pdf . Pdf Service Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . apache . pdf box . Loader Ċ import Ġorg . apache . pdf box . pd model . interactive . form . PD Field Ċ import Ġorg . apache . pdf box . pd model . interactive . form . PD Terminal Field Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . OutputStream Ċ Ċ /** Ċ Ġ* Ġ@ impl Note : ĠNot Ġa Ġ@ Singleton , Ġas Ġit Ġis Ġfact ored Ġby Ġ[ Pdf Service Factory ]. Ċ Ġ*/ Ċ class ĠPdf box Service ( ĊĠĠĠ Ġprivate Ġval Ġproperties : ĠPdf box Properties , Ċ ) Ġ: ĠPdf Service Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} ĊĊĠĠĠ Ġoverride Ġval Ġid Ġ= Ġ" pdf box " ĊĠĠĠ Ġoverride Ġval Ġenabled Ġ= Ġproperties . enabled ĊĊĠĠĠ Ġoverride Ġfun Ġmerge ( ĊĠĠĠĠĠĠĠ Ġtemplate Form : ĠInputStream , ĊĠĠĠĠĠĠĠ Ġvalues : ĠMap < String , ĠString >, ĊĠĠĠĠĠĠĠ Ġmerged Form : ĠOutputStream , ĊĠĠĠĠĠĠĠ Ġflatten : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Mer ging ĠPDF ..." Ġ} ĊĊĠĠĠĠĠĠĠ ĠLoader . load PDF ( template Form ). use Ġ{ Ġdocument Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . forEach Ġ{ Ġ( field , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpdf Field : ĠPD Field ? Ġ= Ġdocument . document Catalog . ac ro Form . getField ( field ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pdf Field Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpdf Field . setValue ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Not Ġsetting Ġfield Ġ'$ field ' ='$ value ', Ġas Ġfield Ġdoes Ġnot Ġexist ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flatten ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . document Catalog . ac ro Form . flatten () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . save ( merged Form ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Merged ĠPDF " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvalidate ( pdf : ĠInputStream ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Valid ating ĠPDF ..." Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠisValid Pdf Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoader . load PDF ( pdf ). use Ġ{ Ġdocument Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠisValid Ġ= Ġdocument . numberOf Pages Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Parsing ĠPDF Ġworked Ġwith Ġ${ document . numberOf Pages } Ġpages ; Ġassuming ĠPDF Ġis Ġvalid : Ġ$ isValid " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisValid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Parsing ĠPDF Ġfailed ; Ġassuming ĠPDF Ġis Ġnot Ġvalid : Ġ${ e . stack Trace }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Validated ĠPDF : Ġ$ isValid Pdf " Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠisValid Pdf ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Fields ( pdf Form : ĠInputStream ): ĠSet < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Getting Ġfields Ġin ĠPDF ..." Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfields Ġ= Ġget Field Values ( pdf Form ). keys ĊĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Got Ġfields Ġin ĠPDF : Ġ$ fields " Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfields ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Field Values ( filled Pdf Form : ĠInputStream ): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Getting Ġfield Ġvalues Ġin ĠPDF ..." Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfield Values Ġ= ĠLoader . load PDF ( filled Pdf Form ). use Ġ{ Ġdocument Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . document Catalog . ac ro Form . field Tree ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < PD Terminal Field >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. associate Ġ{ Ġfield Ġ-> Ġfield . fully QualifiedName Ġto Ġfield . value AsString Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Got Ġfield Ġvalues Ġin ĠPDF : Ġ$ field Values " Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfield Values ĊĠĠĠ Ġ} Ċ }