/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠLeft shift ĠOne Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġpdf script ._ native . text Ċ Ċ import Ġorg . apache . pdf box . pd model . P DD ocument Ċ import Ġorg . apache . pdf box . pd model . PD Page Ċ import Ġorg . apache . pdf box . pd model . PD Page Content Stream Ċ import Ġpdf script . stream . configurable . font . Font Provider Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . util . concurrent . atomic . Atomic Reference Ċ Ċ class ĠPdf Text Writer ( private Ġval Ġfont Provider : ĠFont Provider Ġ= ĠFont Provider ()) Ġ{ ĊĊĠĠĠ Ġfun Ġwrite ( list : ĠList < Pdf Text >): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ ĠP DD ocument (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpd Height Ġ= ĠAtomic Reference < Float >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurr Page Ġ= ĠAtomic Reference ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontents Ġ= ĠAtomic Reference < PD Page Content Stream >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Pointer Ġ= ĠAtomic Reference < Float >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Pointer Ġ= ĠAtomic Reference < Float >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( curr Page . get () Ġ< Ġe . page ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinit Ġpage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Ġ= ĠPD Page () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Page ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contents . get () Ġ!= Ġnull ) Ġcontents . get (). close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurr Page . set ( e . page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontents . set ( PD Page Content Stream ( it , Ġpage )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpd Height . set ( page . media Box . height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Pointer . set ( page . media Box . height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Pointer . set ( page . media Box . width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . text . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontents . get (). begin Text () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfont Ġ= Ġwhen Ġ( font Provider . has Font ( e . font . name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġe . font ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfont Provider . getFont (" hel vetica ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontents . get (). setFont ( font , Ġe . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontents . get (). new Line At Offset ( e . x 1 , Ġpd Height . get () Ġ- Ġe . y 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontents . get (). show Text ( this . font Provider . sanitize ( font , Ġe . text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontents . get (). end Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Pointer . set ( e . x 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Pointer . set ( e . y 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontents . get (). close () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . save ( bos ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġb os . toByteArray () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ