package Ġcom . ri kt ort sv . pic df . controller Ċ Ċ import Ġcom . ri kt ort sv . pic df . app . App Property Ċ import Ġcom . ri kt ort sv . pic df . app . PDF Writer Params Ċ import Ġcom . ri kt ort sv . pic df . app . PDF Writer Service Ċ import Ġcom . ri kt ort sv . pic df . core . Injector Ċ import Ġcom . ri kt ort sv . pic df . core . StringUtils Ċ import Ġcom . ri kt ort sv . pic df . domain . File Image Element Ċ import Ġcom . ri kt ort sv . pic df . domain . URL Image Element Ċ import Ġjavafx . f xml . FXML Ċ import Ġjavafx . f xml . FXML Loader Ċ import Ġjavafx . scene . Node Ċ import Ġjavafx . scene . control .* Ċ import Ġjavafx . scene . control . cell . CheckBox TableCell Ċ import Ġjavafx . scene . layout . Stack Pane Ċ import Ġjavafx . util . converter . Integer String Converter Ċ import Ġjavafx . scene . control . cell . PropertyValue Factory Ċ import Ġjavafx . scene . control . cell . TextField TableCell Ċ import Ġjavafx . scene . input . Transfer Mode Ċ import Ġjavafx . stage . FileChooser Ċ import Ġjavafx . stage . Stage Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . java fx . Java Fx Ċ import Ġjava . awt . Color Ċ import Ġjava . nio . file . Invalid Path Exception Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util .* Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min ĊĊ Ċ class ĠView Controller ( val Ġmain Window : ĠStage ): ĠStack Pane () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSAVE _ FILE _ FOLDER Ġ= Ġ" SAVE _ FILE _ FOLDER " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBACK GROUND _ COLOR Ġ= Ġ" BACKGROUND _ COLOR " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPDF _ WIDTH Ġ= Ġ" PDF _ WIDTH " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPDF _ HEIGHT Ġ= Ġ" PDF _ HEIGHT " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar ĠdisplayName Column : ĠTable Column < Element ViewModel , ĠString > ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġpath Column : ĠTable Column < Element ViewModel , ĠString > ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġdone Column : ĠTable Column < Element ViewModel , ĠBoolean > ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġresult Column : ĠTable Column < Element ViewModel , ĠString > ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġelements Table : ĠTable View < Element ViewModel > ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġup Button : ĠButton ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġdown Button : ĠButton ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġadd Button : ĠButton ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġremove Button : ĠButton ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġcolor Picker : ĠColor Picker ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġwidth Field : ĠTextField ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġheight Field : ĠTextField ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġpdf Size Menu Button : ĠMenu Button ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġclear Size MenuItem : ĠMenuItem ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġa 4 Vertical MenuItem : ĠMenuItem ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġa 4 Horizontal MenuItem : ĠMenuItem ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġsave Path Field : ĠTextField ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġbrowse Button : ĠButton ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġlaunch Button : ĠButton ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġlateinit Ġvar Ġprogress : ĠProgress Indicator ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġloader Ġ= ĠF XML Loader ( java Class . getResource ("/ f xml / Main . f xml ")) ĊĠĠĠĠĠĠĠ Ġloader . set Controller ( this ) ĊĠĠĠĠĠĠĠ Ġloader . set Root ( this ) ĊĠĠĠĠĠĠĠ Ġloader . load < Any >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontrols : ĠCollection < Node > ĊĊĠĠĠ Ġfun Ġinitialize () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ å¹ ħ ãĢģ é«ĺ ãģķ ãĤĴ æķ°åŃĹ åħ¥åĬĽ ãģ® ãģ¿ ãģ« ĊĠĠĠĠĠĠĠ Ġwidth Field . text Formatter Ġ= ĠText Formatter ( Integer String Converter (), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġheight Field . text Formatter Ġ= ĠText Formatter ( Integer String Converter (), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ// Ġ åīį åĽŀ å®Łè¡Į æĻĤ ãģ® ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĤĴ å¾ © åħĥ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( App Property . containsKey ( PDF _ WIDTH )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Field . text Ġ= ĠApp Property . getInt ( PDF _ WIDTH ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( App Property . containsKey ( PDF _ HEIGHT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Field . text Ġ= ĠApp Property . getInt ( PDF _ HEIGHT ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( App Property . containsKey ( BACKGROUND _ COLOR )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrgb Ġ= ĠApp Property . getInt ( BACKGROUND _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr : ĠInt Ġ= Ġrgb . shr ( 1 6 ). and ( 0 xff ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg : ĠInt Ġ= Ġrgb . shr ( 8 ). and ( 0 xff ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb : ĠInt Ġ= Ġrgb . shr ( 0 ). and ( 0 xff ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Picker . value Ġ= Ġjavafx . scene . paint . Color . rgb ( r , Ġg , Ġb ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġãĥ Ĩ ãĥ¼ãĥ ĸ ãĥ« åĪĹ ãģ® ãĥķãĤ© ãĥ¼ãĥ ŀ ãĥĥãĥĪ å®ļç¾© ĊĠĠĠĠĠĠĠ ĠdisplayName Column . cell Value Factory Ġ= ĠProperty Value Factory (" display ") ĊĠĠĠĠĠĠĠ Ġpath Column . cell Value Factory Ġ= ĠProperty Value Factory (" path ") ĊĠĠĠĠĠĠĠ Ġdone Column . cell Value Factory Ġ= ĠProperty Value Factory (" done ") ĊĠĠĠĠĠĠĠ Ġresult Column . cell Value Factory Ġ= ĠProperty Value Factory (" result ") ĊĠĠĠĠĠĠĠ ĠdisplayName Column . cell Factory Ġ= ĠTextField TableCell . for TableColumn () ĊĠĠĠĠĠĠĠ Ġpath Column . cell Factory Ġ= ĠTextField TableCell . for TableColumn () ĊĠĠĠĠĠĠĠ Ġdone Column . cell Factory Ġ= ĠCheckBox TableCell . for TableColumn ( done Column ) ĊĠĠĠĠĠĠĠ Ġresult Column . cell Factory Ġ= ĠTextField TableCell . for TableColumn () ĊĊĠĠĠĠĠĠĠ Ġ// ĠTable View ĊĠĠĠĠĠĠĠ Ġelements Table . selection Model . selection Mode Ġ= ĠSelection Mode . SINGLE ĊĊĠĠĠĠĠĠĠ Ġ// Ġä¸Ģ è¦§ æĵįä½ľ ãĥľ ãĤ¿ ãĥ³ ĊĠĠĠĠĠĠĠ Ġup Button . setOn Action Ġ{ Ġup Priority () Ġ} ĊĠĠĠĠĠĠĠ Ġdown Button . setOn Action Ġ{ Ġdown Priority () Ġ} ĊĠĠĠĠĠĠĠ Ġadd Button . setOn Action Ġ{ Ġadd Element () Ġ} ĊĠĠĠĠĠĠĠ Ġremove Button . setOn Action Ġ{ Ġremove Element () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ åĩºåĬĽ ãĤµ ãĤ¤ãĤº ĊĠĠĠĠĠĠĠ Ġclear Size MenuItem . setOn Action Ġ{ Ġclear PDF Size () Ġ} ĊĠĠĠĠĠĠĠ Ġa 4 Vertical MenuItem . setOn Action Ġ{ Ġset PDF Size A 4 Vertical () Ġ} ĊĠĠĠĠĠĠĠ Ġa 4 Horizontal MenuItem . setOn Action Ġ{ Ġset PDF Size A 4 Horizontal () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġæ © Ł èĥ½ ãĥľ ãĤ¿ ãĥ³ ĊĠĠĠĠĠĠĠ Ġbrowse Button . setOn Action Ġ{ Ġbrowse Save Path () Ġ} ĊĠĠĠĠĠĠĠ Ġlaunch Button . setOn Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠãĥķãĤ ¡ãĤ¤ãĥ« ãģ® ä¸Ģ è¦§ ãĤĴ ãĥī ãĥ© ãĥĥ ãĤ° ãĤ¢ ãĥ³ãĥī ãĥī ãĥŃ ãĥĥãĥĹ ãģĹãģŁ ãģ¨ ãģį ãģ® åĭķ ä½ľ ĊĠĠĠĠĠĠĠ Ġset On Drag Over Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Ġ= Ġe . drag board ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . gesture Source Ġ!= Ġthis Ġ&& Ġ( db . has Files () Ġ|| Ġdb . has String () Ġ|| Ġdb . has Url ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . accept Transfer Modes ( Transfer Mode . COPY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . consume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset On Drag Dropped Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Ġ= Ġe . drag board ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãĤ¯ãĥª ãĥĥãĥĹ ãĥľ ãĥ¼ãĥī ãģ® åĨħå®¹ ãģ« å¿ľ ãģĺ ãģ¦ åĪĨ å² Ĳ ãģĹãģ¦ Image Element ãģ« å¤ī æıĽ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelements Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . has Files () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . files . map Ġ{ Ġit . to Path () Ġ}. map Ġ{ ĠFile Image Element ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . has Url () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Paths Ġ= Ġdb . string . split ( System . line Separator ()). map NotNull Ġ{ ĠStringUtils . getAs Url ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file Paths . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Paths . map Ġ{ ĠURL Image Element ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaths Ġ= Ġdb . string . split ( System . line Separator ()). map NotNull Ġ{ ĠStringUtils . getAs Path ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaths . map Ġ{ ĠFile Image Element ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . has String () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Paths Ġ= Ġdb . string . split ( System . line Separator ()). map NotNull Ġ{ ĠStringUtils . getAs Path ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file Paths . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Paths . map Ġ{ ĠFile Image Element ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurls Ġ= Ġdb . string . split ( System . line Separator ()). map NotNull Ġ{ ĠStringUtils . getAs Url ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurls . map Ġ{ ĠURL Image Element ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Ġ{ ĠElement ViewModel ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ Ĩ ãĥ¼ãĥ ĸ ãĥ« ãģ« è¿½åĬł ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelements Table . items . addAll ( elements ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . is Drop Completed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . consume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset On Drag Done Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . consume () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontrols Ġ= ĠlistOf ( color Picker , Ġwidth Field , Ġheight Field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Button , Ġdown Button , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Button , Ġremove Button , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpdf Size Menu Button , Ġbrowse Button ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠInject or . presenter Ġ= ĠView Presenter ( this ) ĊĊĠĠĠĠĠĠĠ Ġmain Window . show ing Property (). addListener Ġ{ Ġo , Ġov , Ġnv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! nv ) Ġscope . cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogress . visible Property (). bind ( progress . in determinate Property (). not ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġup Priority () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġelements Table . selection Model . selectedIndex ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġ 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠ ĠCollections . swap ( elements Table . items , Ġindex , Ġmax ( 0 , Ġindex Ġ- Ġ 1 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdown Priority () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġelements Table . selection Model . selectedIndex ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġ 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠ ĠCollections . swap ( elements Table . items , Ġindex , Ġmin ( elements Table . items . size Ġ- Ġ 1 , Ġindex Ġ+ Ġ 1 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Element () Ġ{ ĊĠĠĠĠĠĠĠ ĠElement Register Controller ( main Window ). show Dialog ( elements Table . items ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Element () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġelements Table . selection Model . selected Item Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġelements Table . items . remove ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbrowse Save Path () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Chooser Ġ= ĠFile Chooser () ĊĠĠĠĠĠĠĠ Ġif Ġ( App Property . containsKey ( SAVE _ FILE _ FOLDER )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Chooser . initial Directory Ġ= ĠPaths . get ( App Property . getString ( SAVE _ FILE _ FOLDER )). to File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfile Chooser . title Ġ= Ġ" ãĥķãĤ¡ãĤ¤ãĥ« ãģ® ä¿ĿåŃĺ " ĊĠĠĠĠĠĠĠ Ġfile Chooser . extension Filters . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Chooser . Extension Filter (" PDF ãĥķãĤ¡ãĤ¤ãĥ« ", Ġ"*. pdf ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġselected File Ġ= Ġfile Chooser . show Save Dialog ( main Window ) ĊĠĠĠĠĠĠĠ Ġif Ġ( selected File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Path Field . text Ġ= Ġselected File . path ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Property . setValue ( SAVE _ FILE _ FOLDER , Ġselected File . absolute File . parent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear PDF Size () Ġ{ ĊĠĠĠĠĠĠĠ Ġwidth Field . clear () ĊĠĠĠĠĠĠĠ Ġheight Field . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset PDF Size A 4 Vertical () Ġ{ ĊĠĠĠĠĠĠĠ Ġwidth Field . text Ġ= ĠPDF Writer Service . A 4 _ VERTICAL _ WIDTH . toString () ĊĠĠĠĠĠĠĠ Ġheight Field . text Ġ= ĠPDF Writer Service . A 4 _ VERTICAL _ HEIGHT . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset PDF Size A 4 Horizontal () Ġ{ ĊĠĠĠĠĠĠĠ Ġwidth Field . text Ġ= ĠPDF Writer Service . A 4 _ VERTICAL _ HEIGHT . toString () ĊĠĠĠĠĠĠĠ Ġheight Field . text Ġ= ĠPDF Writer Service . A 4 _ VERTICAL _ WIDTH . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġscope Ġby Ġlazy Ġ{ ĠCor outine Scope ( Dispatch ers . Java Fx ) Ġ} ĊĠĠĠ Ġprivate Ġvar Ġtask : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġservice Ġby Ġlazy Ġ{ ĠPDF Writer Service () Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlaunch () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( save Path Field . text ?. length Ġ?: Ġ 0 Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Path Field . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsave Path Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPaths . get ( save Path Field . text ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvalid Path Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Path Field . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġelements Table . items . map Ġ{ Ġit . element Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġwidth Field . text . toDouble OrNull () Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġheight Field . text . toDouble OrNull () Ġ?: Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġpicked Color Ġ= Ġcolor Picker . value ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠColor ( pick ed Color . red . toFloat (), Ġpicked Color . green . toFloat (), Ġpicked Color . blue . toFloat ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ĊĠĠĠĠĠĠĠ ĠApp Property . setValue ( BACKGROUND _ COLOR , Ġcolor . rgb ) ĊĠĠĠĠĠĠĠ ĠApp Property . setValue ( PDF _ WIDTH , Ġwidth . toInt ()) ĊĠĠĠĠĠĠĠ ĠApp Property . setValue ( PDF _ HEIGHT , Ġheight . toInt ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ãĤ¯ãĥª ãĥ¼ãĥ³ ĊĠĠĠĠĠĠĠ Ġelements Table . items . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . result Property (). value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtask Ġ= Ġscope . launch ( Dispatch ers . Java Fx ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ ¿ ãĤ¹ãĤ¯ ãĥĳ ãĥ©ãĥ¡ãĥ¼ãĤ¿ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Params Ġ= ĠPDF Writer Params ( save Path , Ġwidth , Ġheight , Ġcolor , Ġitems ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUI å¤īæĽ´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontrols . forEach Ġ{ Ġit . is Disable Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Button . text Ġ= Ġ" ãĤŃ ãĥ£ ãĥ³ ãĤ» ãĥ« " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelements Table . columns . forEach Ġ{ Ġit . is Sortable Ġ= Ġfalse Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ ¿ ãĤ¹ãĤ¯ å®Łè¡Į ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . write ( task Params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠC ancellation Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanceled () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġtask ?. cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsucceeded () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUI å¤īæĽ´ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontrols . forEach Ġ{ Ġit . is Disable Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Button . text Ġ= Ġ" éĸĭå§ĭ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelements Table . items . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . done Property (). value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelements Table . columns . forEach Ġ{ Ġit . is Sortable Ġ= Ġfalse Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ ¿ ãĤ¹ãĤ¯ ãĤ¯ãĥª ãĤ¢ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcanceled () Ġ{ ĊĠĠĠĠĠĠĠ Ġsucceeded () ĊĠĠĠ Ġ} Ċ Ċ }