From 4487183c83b17b6ad757f416190d7991bf8df57e Mon Sep 17 00:00:00 2001 From: "thibault.faure" Date: Mon, 22 May 2023 23:49:35 +0200 Subject: [PATCH] BAEL-5773 Code for the Replacing Variables in a Document Template with Java article --- apache-poi-2/pom.xml | 13 ++-- .../poi/replacevariables/DocTextReplacer.java | 38 ++++++++++ .../DocxNaiveTextReplacer.java | 63 +++++++++++++++++ .../replacevariables/DocxTextReplacer.java | 65 ++++++++++++++++++ .../src/main/resources/baeldung-copy.docx | Bin 0 -> 15602 bytes apache-poi-2/src/main/resources/baeldung.doc | Bin 0 -> 28672 bytes apache-poi-2/src/main/resources/baeldung.docx | Bin 0 -> 15598 bytes .../DocTextReplacerUnitTest.java | 31 +++++++++ .../DocxNaiveTextReplacerUnitTest.java | 31 +++++++++ .../DocxTestReplacerUnitTest.java | 31 +++++++++ 10 files changed, 268 insertions(+), 4 deletions(-) create mode 100644 apache-poi-2/src/main/java/com/baeldung/poi/replacevariables/DocTextReplacer.java create mode 100644 apache-poi-2/src/main/java/com/baeldung/poi/replacevariables/DocxNaiveTextReplacer.java create mode 100644 apache-poi-2/src/main/java/com/baeldung/poi/replacevariables/DocxTextReplacer.java create mode 100644 apache-poi-2/src/main/resources/baeldung-copy.docx create mode 100644 apache-poi-2/src/main/resources/baeldung.doc create mode 100644 apache-poi-2/src/main/resources/baeldung.docx create mode 100644 apache-poi-2/src/test/java/com/baeldung/poi/replacevariables/DocTextReplacerUnitTest.java create mode 100644 apache-poi-2/src/test/java/com/baeldung/poi/replacevariables/DocxNaiveTextReplacerUnitTest.java create mode 100644 apache-poi-2/src/test/java/com/baeldung/poi/replacevariables/DocxTestReplacerUnitTest.java diff --git a/apache-poi-2/pom.xml b/apache-poi-2/pom.xml index af959292fa..9a01a76d73 100644 --- a/apache-poi-2/pom.xml +++ b/apache-poi-2/pom.xml @@ -1,7 +1,7 @@ - + 4.0.0 apache-poi-2 0.0.1-SNAPSHOT @@ -19,10 +19,15 @@ poi-ooxml ${poi.version} + + org.apache.poi + poi-scratchpad + ${poi.version} + - 5.2.0 + 5.2.3 \ No newline at end of file diff --git a/apache-poi-2/src/main/java/com/baeldung/poi/replacevariables/DocTextReplacer.java b/apache-poi-2/src/main/java/com/baeldung/poi/replacevariables/DocTextReplacer.java new file mode 100644 index 0000000000..f661551ce9 --- /dev/null +++ b/apache-poi-2/src/main/java/com/baeldung/poi/replacevariables/DocTextReplacer.java @@ -0,0 +1,38 @@ +package com.baeldung.poi.replacevariables; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.hwpf.HWPFDocument; +import org.apache.poi.hwpf.usermodel.Range; +import org.apache.poi.poifs.filesystem.POIFSFileSystem; + +public class DocTextReplacer { + + public void replaceText() throws IOException { + String filePath = getClass().getClassLoader() + .getResource("baeldung.doc") + .getPath(); + try (InputStream inputStream = new FileInputStream(filePath); POIFSFileSystem fileSystem = new POIFSFileSystem(inputStream)) { + HWPFDocument doc = new HWPFDocument(fileSystem); + doc = replaceText(doc, "Baeldung", "Hello"); + saveFile(filePath, doc); + doc.close(); + } + } + + private HWPFDocument replaceText(HWPFDocument doc, String originalText, String updatedText) { + Range range = doc.getRange(); + range.replaceText(originalText, updatedText); + return doc; + } + + private void saveFile(String filePath, HWPFDocument doc) throws IOException { + try (FileOutputStream out = new FileOutputStream(filePath)) { + doc.write(out); + } + } + +} diff --git a/apache-poi-2/src/main/java/com/baeldung/poi/replacevariables/DocxNaiveTextReplacer.java b/apache-poi-2/src/main/java/com/baeldung/poi/replacevariables/DocxNaiveTextReplacer.java new file mode 100644 index 0000000000..34c2bc43e5 --- /dev/null +++ b/apache-poi-2/src/main/java/com/baeldung/poi/replacevariables/DocxNaiveTextReplacer.java @@ -0,0 +1,63 @@ +package com.baeldung.poi.replacevariables; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFParagraph; +import org.apache.poi.xwpf.usermodel.XWPFRun; +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; +import org.apache.poi.xwpf.usermodel.XWPFTableRow; + +public class DocxNaiveTextReplacer { + + public void replaceText() throws IOException { + String filePath = getClass().getClassLoader() + .getResource("baeldung-copy.docx") + .getPath(); + try (InputStream inputStream = new FileInputStream(filePath)) { + XWPFDocument doc = new XWPFDocument(inputStream); + doc = replaceText(doc, "Baeldung", "Hello"); + saveFile(filePath, doc); + doc.close(); + } + } + + private XWPFDocument replaceText(XWPFDocument doc, String originalText, String updatedText) { + replaceTextInParagraphs(doc.getParagraphs(), originalText, updatedText); + for (XWPFTable tbl : doc.getTables()) { + for (XWPFTableRow row : tbl.getRows()) { + for (XWPFTableCell cell : row.getTableCells()) { + replaceTextInParagraphs(cell.getParagraphs(), originalText, updatedText); + } + } + } + return doc; + } + + private void replaceTextInParagraphs(List paragraphs, String originalText, String updatedText) { + paragraphs.forEach(paragraph -> replaceTextInParagraph(paragraph, originalText, updatedText)); + } + + private void replaceTextInParagraph(XWPFParagraph paragraph, String originalText, String updatedText) { + List runs = paragraph.getRuns(); + for (XWPFRun run : runs) { + String text = run.getText(0); + if (text != null && text.contains(originalText)) { + String updatedRunText = text.replace(originalText, updatedText); + run.setText(updatedRunText, 0); + } + } + } + + private void saveFile(String filePath, XWPFDocument doc) throws IOException { + try (FileOutputStream out = new FileOutputStream(filePath)) { + doc.write(out); + } + } + +} diff --git a/apache-poi-2/src/main/java/com/baeldung/poi/replacevariables/DocxTextReplacer.java b/apache-poi-2/src/main/java/com/baeldung/poi/replacevariables/DocxTextReplacer.java new file mode 100644 index 0000000000..2d08d24a4e --- /dev/null +++ b/apache-poi-2/src/main/java/com/baeldung/poi/replacevariables/DocxTextReplacer.java @@ -0,0 +1,65 @@ +package com.baeldung.poi.replacevariables; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Objects; + +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFParagraph; +import org.apache.poi.xwpf.usermodel.XWPFRun; +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; +import org.apache.poi.xwpf.usermodel.XWPFTableRow; + +public class DocxTextReplacer { + + public void replaceText() throws IOException { + String filePath = getClass().getClassLoader() + .getResource("baeldung.docx") + .getPath(); + try (InputStream inputStream = new FileInputStream(filePath)) { + XWPFDocument doc = new XWPFDocument(inputStream); + doc = replaceText(doc, "Baeldung", "Hello"); + saveFile(filePath, doc); + doc.close(); + } + } + + private XWPFDocument replaceText(XWPFDocument doc, String originalText, String updatedText) { + replaceTextInParagraphs(doc.getParagraphs(), originalText, updatedText); + for (XWPFTable tbl : doc.getTables()) { + for (XWPFTableRow row : tbl.getRows()) { + for (XWPFTableCell cell : row.getTableCells()) { + replaceTextInParagraphs(cell.getParagraphs(), originalText, updatedText); + } + } + } + return doc; + } + + private void replaceTextInParagraphs(List paragraphs, String originalText, String updatedText) { + paragraphs.forEach(paragraph -> replaceTextInParagraph(paragraph, originalText, updatedText)); + } + + private void replaceTextInParagraph(XWPFParagraph paragraph, String originalText, String updatedText) { + String paragraphText = paragraph.getParagraphText(); + if (paragraphText.contains(originalText)) { + String updatedParagraphText = paragraphText.replace(originalText, updatedText); + while (paragraph.getRuns().size() > 0) { + paragraph.removeRun(0); + } + XWPFRun newRun = paragraph.createRun(); + newRun.setText(updatedParagraphText); + } + } + + private void saveFile(String filePath, XWPFDocument doc) throws IOException { + try (FileOutputStream out = new FileOutputStream(filePath)) { + doc.write(out); + } + } + +} diff --git a/apache-poi-2/src/main/resources/baeldung-copy.docx b/apache-poi-2/src/main/resources/baeldung-copy.docx new file mode 100644 index 0000000000000000000000000000000000000000..2cb76e8ffd0cf583f7d174821989c0e520f189f6 GIT binary patch literal 15602 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 literal 0 HcmV?d00001 diff --git a/apache-poi-2/src/main/resources/baeldung.doc b/apache-poi-2/src/main/resources/baeldung.doc new file mode 100644 index 0000000000000000000000000000000000000000..1b8474d65ba18a9e71ceba5bfe51eacf820e3ab6 GIT binary patch literal 28672 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 N33O|d(|?);{tt|O)Z+jE literal 0 HcmV?d00001 diff --git a/apache-poi-2/src/main/resources/baeldung.docx b/apache-poi-2/src/main/resources/baeldung.docx new file mode 100644 index 0000000000000000000000000000000000000000..f0de4e057bee61081609a50af4db03d279db83e7 GIT binary patch literal 15598 zcmeHu1y^0k()PjK-GfVThXf}$gy8P(a3DyKKyY_=cXxLU?(R--*N>SylF6O*{ekyx z)~?Eb-A-zrMV>kxFD0%xC2vponAvp75lKMU5M%CmJ9Sn;8SyzeCc3yiJ+-98py_ zFYhuG>EB7Co9vVP<4xtj?YSQ7qO(6tf#vsk)bUkY!fjLu6qel%xg47ebg{njHLZTf z3V=Hg_L9v$tyd5FTO@Wu9)4ma$f!QLmQr!h`2NU;#)`qggwquh>hJ?s%jvl2YVm%t zhLZrvADb9#jP9%%g|0+nds-%}0&m4~N!F^U3WBUPWHq=NXv7mzYPmZ10|g~bu40mq zWCVj*FD48ubI=zEZ`-#0>sgRr(lW1qghC0UUV@BqI+9rEJTKt&P+rJ{cXCxDKHTD# zI8cJCOrv#m+(7};g_$_U`tWfNWuUXA!LNW$?0qXc3SjDhiuAkBu0%51DtF~z}-;RcsS%!LFJbg5Je4UmrFJJ)Ke@xf}MR$njS1Vk9 zosV#@6IR>K&;rOn|C{{ZMEyTJJAWE_aip{)7!$JZiPsD9_m+2yG$a$tTEctM22UVD z%nzPPNRb7#FDq1m^iwr{ge=ax11v%_Ni77^Z~IuClshV^1S%$1;7g0v8k|*@yd(ri z#`Xx5ZPvh(?$7m}x=F>YB%Y8X2hrnb_C9nH=uPmbOZXriol75Pkq`9E>AraqB-kvZ zwPt)a;^)yVEGc+nHH?wJgM5o#YrQCN(K7pPNG9~XXEWAk-(iyOB_hNA$$VeEJ~_{` zd!{%vIp_}}V1yiMDOQ&^)h4R_;mBr0&MUj5OqA8{cLQ?+h>|#n5E9GIlZUUkEHCK; z>RyU>SuRSvqrz0%!2WHz)KXl@Cqn=L!8iZ_%IiCFw6-%~FtFBluzdZ<{q}WRQeCv# zWJh*m81rC!Y%K~RA7W=$or_$CG#R&#svWHsRyQM)ds9GmJnKj$$MIIiu#Z1zrvsG% zxMO35PpsYAYP7$H!;&g%$5P9iw24AN9D-WehVyb=f5(a!R?kl+NKJlgeeFUslM4=#T7Z6>TJ#5|J`1UdcUk7%7^Y0<5ME$J*Xc-fAxBP*5 zS$Uz#0}w7O5Rf9m$S*h(cz#J*z6LiD%|qc7ZrSsOVl6g<_aHJrDIHr;RbO!U`IUa; zFEr;L0m-Bh7E!DyQ0=UF81NGPlMuoDg(CeFUG=5*=gb?bOg*z*sVJru=mEM zH7DeCkhu#56PQ#StY3xp%vTKy^qzS$4G~Xsz4OU^W%mw>;|-8ILN?mI?$4Xc zy|*2`9QwwY4XAVyk)0sQ@gl#i}1cYxdr!--6FlN zhHKUv!vWpE%Y4;KQ#FIiq2igM06Vx0zS8v3V$rsu2=W+Q&GX1Y*X1rWMs(%Aq+#?9 zjyw!ua%${i!AU$fFt^+~=HUP^Gdkl4Qr~0#6NAmfQa0c;tv!g~h|B#)x#*3sVsdRz zzXN3;LJhGbW({4Ivcjhcyo*pP^PLiGDt8)rGPmJ z`+dHs9Ri?djGhW=f`>xlBupFR>&pq@99K%%@KAJG8Iix{1z3gK@1!Zr5yV&-y2vF{tM@23TO zt~l_3IK?AKF?CsjL?>7%`kdhCPYBg#o0q)Aev4i+Bt7wdr( zkvZ-iKy=V=$-1HQEQCTT!H^$>-}M)LRx3Er$Z6LE$=yzjw1Xl8=U~7q)GRsux z|AM2`2g~FcUjVyUgHI?Vo5x&k&ITo1I$M1ynb5}CvR`S=3Dhg`3Q)hk0fWyY&3W%b zQcqTG@jg3|N67hoyPp!{s?;|f7lqZMn3h`5m{SZ4DyItv`N3$qFp7sq?oh=f_0ZvW z+H#I->YZn05YYjpL1FLbxE})I-Mx|MW7F-cd6HMnm;m^+w z{m)PceBVh(dY-eg3{*NDTS9={Cp) z+oRhcR2L<(6VSvTd0p@S)ttmbuE>X8gJ>Lh008yR$iT?j+TP0A-Vpd(XfPEkZk@%5 z{`G`(*n@vbzRCcMtzba}=Srz2g=h^IP49HAjdV1=GNN#J2ANY=PY<#}y8kYnYnZ=v^5Bp$qk z@^q`k+6CX@t>LGG!}@%r>moo<{R$|4cw-GJ_GPcZEt(Iv2E4bB(1aHzyW}7Ob5cw> zSzU(I*=@oMci<#yW>TzWQ}`Y#*;eYx;5)ddL|Y)(8(G&a*W3>L!b_fEIfof3V^w_} z2|fyy>>6Cqv#fD%j5oBM2}INAwG}{tuAt}QagJQSm}f&1RvUH;^%hOQskousbfccw z5zQ5W5Lbsn%qK8VWA4!4L9%UW$2an(F3bhQePy6FWU4KtYsc+!56b3?il!!>Lf_lA zLJeZJwb3+<`PmUN$FcP~SHH}}BD;AlhEV$CqG>qlToiz4A(aa|tr>n|nZbhOw{*ah z;Vv&WlZnCT5?^d@1pBgPtk39Fid-Xje! zMPa(6R(ZgC#b`=gLF5P9JKW(YKDA)CSXlHmc&LCsC{=eceP@|Yb7m)b83*1VP5X{^ z!bb{aFHZ;Q6qmP>;Ae&BP=Ks7J39}Ayf7+%hg?)2%U2Fw$TO2rfE#>Scqyvj4=#+} z*3WyPaMEcb26!T+8IG2j2Ar^Wt00#-IEhrID#HU?t8e~|+Ggy&e z!WDl%5V+1MH%3m^8%FZD zD*Ce%^(%X*Kes<82^lACpri%5H_e8YC?DrO2?Ec>(tL=iXw$tDC1>sDt9Z|XoI6d7 zBM81Qr>t)tFuBe_T8*0@^I3kunjV!Hp4EG-{LFLG_vBh*-c;*^RHfi3nrbK-{af>%S_8O)$*&@%nF2Il6_TFf-dr>1p zHcl)ru2<3G6X|I}jqY*fNO~wbeSscSyy1nBeJE!4c=hT3y?s)9X&gWCy4N}I1^~eL z)9c%t7+M-K{4SY(bNolDl0kT)$gNQ4M7|9}F2j4e#cUH|=jOBQD>dK3TI9@gOHxh8 zmltXneRb08V8D~Zh2R^ukpU^vlJQi6RaN#aZaCy2CWT!8Ca(^0gK|Hx@QF zvI5sPp5nPhX=^k@#iD~z3}KGz;b@nF-lchb21$uS z39SG-58w>rwj$d;a&4d$VGQo(V()_aE{z=);Z2V;q#qh8U@bLNBa!nd6h&NvQh+JH zg()E%>NIorJDUs(v!<{`|jmz-KnOw8++yJ}eUKw?*koLm#`opwY1ZTEu^aTn&OY9cC>$GZ zmz(#qRRuP?i7J5T{3eRiA9+C1K1wznoEittJ!kbVH8;AbMg;;*ACdZcHxvZ$n5 z*?0F-@ChIq4i#)#`zB`Da-Gu|HBt4%diowdYStqC&~K-)uAMY(x;#$odii%&p!(Nt zVm-T`M{2qFr&Qj+#e;z>`qC|X`L91q2@_D#vDXbse-}z>$Y}m_*-hqb4pIH-;g+cE z+7otj8tEh5++=~{QG1jE_lE(4s#fYwOC>gtP5twIEH*dRk5+p1qO@aGi95x)cdN6k zA9nAGBe{wUMrd%F`bF~%DmOmxfvWNBjjL^R=JBEl?zd{lHovu>CtW)V^JC0^r)KgL zZi*=YY)JNmk@5Mk*qNC# zg;hDGEm_vSz4hiwZ0SZ$1lbCCLVr6?!F_vK{>DCnY1nd>cG3K8Y2K#kH(~lEDbxnW z;I;EPd|pHCI+i%x%V_FaQ&x4Nu34G@i!I2+c%EJC5shUiHd5BZdbHaC@L?y&d+$L7 ze_!!Ff`Ob2KC-Is_2F)0ndrHB6Hk4@ddIS;LdCnw{87Q`H8Tod9)$;L-lnB)Un;K* zI5BsSsxn48=+Z0drSK4|ILzUTorrGg?}m@u(SiG(Cn*}XGojd74l}Jctc?`cN0i2j zjytVJ5_}RiMp0X#x-&@aboe4oS%)-i4^%etXh`Ui<=XGAJ6`me5~erB)Od3+Q@tA& z<~XpcV(7f86O(&9tTC&#-I%Gqv4tfVs#Y5>Ak9=OJ0v1)mZyTe6|3%NG)`c35lc)Y5E{pBBP+Q3^UYg`t1NK+TOV0=LUupE=qzMfu0i=fng+x zm{>k4XNNL5v%6)Ng2RWagZ46|`<4YE#=zi>!n9HzZ=whL3Rmm0zPgp=z9PAYCI247 z+{3j>%$bwpqM8lI8$^(y_a;-mKU|t-scH_Fbq5Y_)N($L?Zw=Oq|XywgSAZ)^4h16 zB3w6KwVT7M<%qCBOK4?f?$s^i4T~oi-xH)%vECwJPsSH-CP9-TM6Rk6?K~ z8Xf=ZDtZm>r}z(OXm4+7W&HcfCtFDqxWSI@b|Uoxwz-Syp_8d12qXh64wXA-_AcoYoXj!ce1RDCHejZ{SQI)V|v zsv%vhBWtb!Jz&?3g`U$goP?_&fV;tSw?~GuYj;GeJUa?oUJjc6PRUfFvrb)Z?Rb>A z`^&W@wWQV&wb9_w9;`+e4rdgGX|`h4Y7wN4;RnPQhXAmWlGX8>729P}tnGxe)J;=C zQYX(GZ!BT+FZ`YNAzd7TyDio_C&z&zuzRh>N^z87ycEdIDE@Gd=S(4sGF=cmIf&GJ zxoBw)Vnix@&#he=(EV~T(|!t|c*@Ga2tka~*jQ9$>zv`-q)rc{K<+0vfhiB80PSGSzK(`(glCky_V!Y^w6Ij@CXA`O z^|)Uzw-!SLVaZVE*BaRg^75Iy2*L(r-oUnWs=?=Vt5=szqYZKda;(|&+frFsyu5~AWi7A4=5B*wcf}=iyu?hP^PoMTR9nI`W`<;VPRl-AJkm}ve zddx`8^q>aHV(DBNyQLoltPr}O$21#}bAUtkwO2ErC~Jps7gA$7f>m|gEz+s4cj9{i zsWkag^gL}DX`cksgctqIK{`OzfrAL48aq~R%tZwLe*6_E`! zzn4Ympp;GaATtMKF(x69sIHYk-M|=6>M-F5%XzTvZ#=-NevDgRbIY6xGWyov*0*-e zj#w#RPz!DKZ5p{!ENk9{+uPt%bt-~gr3JS-PB%{*UE-c|-ej$2NyeN=wV{Fkj#v74 zR;qvLb$<^~BEAO*ZwaMMlH_L9aaIpO_Q9dWcdP1a0d``vFuPKED8UlV%b$-O-f9Bbx2Q&QGTboqkcy{f+{D5Rh{LE7L@yOzlrdCPuAfq=2Cl@40rp?+HTBr=Vi@KQmyiZ2+HjH(nZ`92ZmoO)$r`j;FID|RZ0r8)>v?~^>KQp?fN$uZ$a_*`tk^$V_`eNnWP7$*d`Ww+_9a(c&?*ve8d28jjg?1^r&pa7kjeDcoi@3<>yIw7gBu{mueL1#e)= zL_2LGK!-ef&W2v5(k@jk}9JXna0F*SEyaN)z=s&-Z?cW(_ThqLl zv9qev8|JAk%0==`Et)*L^vymp#p=^+gHpuwoi3 z+)scfk8jH$glO|ZTag7arg{u19y@2G(z!8nw!EJ#1434 z63JnPOBi7;Ktb@i!!ak7EP@yqq~ zrq#z8r&2Am4;+F<&TMLiz>%V4W!A``m2uWcxL6w7uG6h-(V#a_IDjmcqy&G_Nxe*7 z>o8<;xtF`<$QZru-SK3e{zzl{KGWx@Tvu_@NHQ-hWEI&@(Oe?kl(}%+c@V?;xXk5U z0*2(++eH?bZ`k9uh_Qoq#Mjn~0t6xj(Z({}wZtOI0Rkxz^=q3=z2fDMrwK8eeG-D1 zL5hhJ{KX8qf>IT|vyiYXt*o-~XEC0g!3^-UX+F3lLU62dzL+NM@N{GK`?v6HR+vlPI<4^IGei|t;1k%jAQd#fh!u`Bxu_E3VEr-;E z;Vh0oeALQ(KnAJ_!Pb;26O)V@R=Kjd^Q%|OZkRcFZcU$p!W6HE#LbncPz*sVIK;ac zH6|*iWGZG0WTr&g=U`QDPKy+tq10lwW4s;IVczS7^j~AJ<9fS{Lvm5_g{xKHe8x%D z(kLf=nWZ1lBIW#uO@W}@Mr%quSlKt8{WdlCF@R#-f3k3md&Xkm$ z8aX&7*TOOeV}GjwyGxMe9Pe%2$LoD*5fxk?bpeglRrk>2JGs~dJDpAdgOlPJE%szG z%;PK)_k&|RqC4^jn`hKL6FzWmo@|{s+IF%m@%J#os6$e*Rd0a#8&4wIM#<>nuQ^JA zD-2-_1mWaJivlbHkZSVtji`P;5GA3&8z}1d_YCL~3O52eGp1d3Y!6YroAS$8gb-XT zmkx>r7hz@vMa5m~y$on-^=Fdc+tN%t{kI4<<#bE8-z?V!362aU1|zvV1g~~{xR(;K z?w$IuJbe4)wZ1Ex)`Jv#c8HWiLgERgmR2^yJ9h_Soqok&xIBY|$LWEyk&roimMve(r_N;2EAKch3)+{ARkk$!m1Gg#7(1 zmMs+jAaKgGy{ER<$L<`78*YYe0Cv6%U@R=2Xh*oWwBXYDDfWl?Y;8ipI{^{Lb$W6p z%~RG4pUwEC+Dxs~gGFZcrm{w+z3N@#>+<}}{Y>aYpgy_ z7=D&Ss~tQD?M$K$Me@Zf^0&evvf|JxBU6hN1*6kV>RY6nE!v9R9^jXp+u7%r%$bZe zOe5rt+^Aqdmbu@^D>%dNaGb#U5Mpaw<>oo1^4VuiTpPV68`aHU|IQrba)fcX{)b;c zpJmvmh$OFws3c|;Wh>#d_SW$P^RX>{velA*hjU*DcJkLHe}RO4(@+UX%-OFyz^$=H0>eS&Gt7MXpuayh4YWLAy+NhPPWORDG06}FSIakR;S|gt zBcxO?IeA5#q5Ry2?1@Pu{M(~c8K6Lh3_)16{6DG+t=TTIXsY{QFcu!5G2~pmVX6P4 z?k~u1MTz|OCCU77uRpYyWE2v?i9%y6Y%gX;~u`Gnok)MgC?#^+LBDr;q-=(HkTz3$h#^3v;%BUWB2)RY{`S=rM}?BMZ_S72N7tMXqzXm)t}jf?;3FFkN;{i6FaqIYrk#6&1}|0_~c#+ zsmQ!A9sbpUjZ8-q0Y6VkA&h36?G zA6lqVtAtLSM!i)00o155csKky3LXyKe7t4wXucHeX8mQVYQJSFKIP5A9Qr?pqD;r7 z8B!GM@|RdD?NyZ2{Ezr!K(^CzWkr98$i?Y;vx1?Y1SzEflN!#~6?ov`wOfjfoHHx&t_fxT(2Hf=lC*p;`;i@8h=>+33c8*U4lw(%xM^3UO2mRcDL+d1B&9Jy)Z+38r<7)BAKxq;OiRW4Ufc- z{C#R~woS>#a8jtI>3JfB$J!)#${ZJQy`D;}F&HE$Qc7xn9H(j=9TUb6L1>hXRcWU? z&bjWnduqKarFV)L6EuV+;JD}U@UlXDWMHx^;1f=&cAig(hnv}=C~US!^1rAo-5ei^ z-`30Czv8^$d;DI*nz&As8Lf0~MKbZ8-kAk|SY5YKa6D9yD`;ksZC`Hdhh^Y_n9`4Q zp8BQLrbZKplCelc7UrThN-R_tca?KF`g57#!QT5&JDZCbN2q&T87>W94heX$yfP=n zKy1aR10%CaNXtnG7v*ZgF$6yQ5qHEgiwl4A+lq1foK?_jXR4iT{&=#iqn#5v( zMSIT`Hul6|4{hqi@6+M;y_dsaW~;TWbk%luoJVxT#vHR)PEZt#GedL3Lapz)8(nS+ zFl>i{y4AES2X60&ktw!`2vd)=3tJAhTMHvmJF*U_sx%0=VK(ZS>7~nNZF!~W(YWJ8@zdCjsDBF&j~EGjLd67(EYU){m*rnqoJPsPdh)! zliKE;jL3k~n~qkYfu`I+bZRAC_&%*(okb}B{b^tFhRC3z-P;_URx)cH zFW+pGzKZzf{Cr~jetbsuo>7LBE`>1*;h2+R=YmL4LG1G-<> zgw@s&1LHnaFvHgZUrj#!&x~ZEsqb?4cBMXsQja9RkOLuQQGyENn0Z%Vlodj zyxqm6WtLWI9JlPRtIx2f7Am{TQct_c36^R#JQf{<<{S+{inbC4P2LM-pdDGDs>ZhF8f ziTq~sri5CIJ%bFzcTp};Q^1|q+A5X|WK?P(nl1Bl(?PDP~*OIV#%oY{{1k0d-Rhpy%&3GyeVVQS5A!p#+-3PtjUTeCYY zxJ`YJ18>1hHrXLaNVNw-HFM2*&LIeZ%S_>>Da9~M)G$52nw@cnlDn7DeE62eDtG3%B&f%OAG0duq7Xy93n$3robq4w#$*FG;mB(R%6Q%Hzb9X+}4Gzqh zxJI=8@a9mtuwI1h_A=k%l1KJfHN6v1iLOCnL6Zd+Y3^^yqdFvoD?@upWVCT@~6zx?2sE zmhc%ygY1m9=IfSt^#D>)LPMmO3|4$M{sr`alqmTIiK7C^B?*dxRosO~WWO=1q4bR< z<93=Xz6ha&b%IC#3iIgoO6WOZpZdgp(G5`B!-**RaK$t={YgXKe#y(6_ex-I`wc;Qu2*z52P}NNMYD zjPU#?QP)JW$E^G}H$p>N6f~03XB}zvZLbJKbcmsx*?D zYn@`+>1gk)uTJSs)Y)nu2fnc1PuIDr#&V3L**4W{A#ou(2T#10(qYF4Uv=-*$R6R4t9|CcQ>|6?i95P zU6k>~5}^sRy74ExQw6c+m(TGyYx~?b^sK(>nod}d##zK=aTvb?Lzsy<$gy6RjS*3y z#5O=g(`ksnT~@5U@9@k58riNNe_v7e%a`q?Wkf*hou;VJmz$`{YuQHc*ffsQVe5l(n+eohETO*Sr@E@VRqpVN= znsUgmgJiOMHP(SwV@3YiSaoe|e)D|)v(;BaeZ7+9em`W>OnQd&>9|CmjIgA(R2F5U zJxfmLOYM=g-uhguCGyi3_G|=!rBhSmnRkh*cuHv{1H6pFKaQBwq=ViIy`HeC)!HfB ze%hiK)k9T+*`%ev0PA(_86DL@OYRG2?F}Zg(AbfdaPLrwMyMr`DX=V%Zx{;{W}N!2 z7!&KXyY(fAy&@>HUhg(xj79;C4|=C%V}tZbS%GW*E~x2zO*~8}poD{j*yEUDSfODG z6i}yCq(>YFg>(>^zz*DyJRxbxqukZlO{#{mXFPp=baXGRDT8|0l z`n|&F7T3k$Mq8cDxBMuzRIA@)ptJyZLQYe)H{)1aZ~eKUSMi4tplju@HRPSNV9-$J zkU-35U3A4m5is^!dX%*ro2-!fB38GkHnsAM4t-~Bj?kA_} z0JOKZ{GX}*$4q}W)$qT$rQ1#BeU^zt
    ^Bv$yaj+@1cVig4QR>XqM?@H4zM=X_D z?mrt9P5Tj!;Uu4w6xcHBV|zx_9u8;pGCU9rFr5p;%fQd@hftn6O)sq~j*f(`2_g}G z@IGVX^<|8Wc5w!$d!!wtpc&+*6VzDtRLgOJDT$#(ppYGziyVwXQi?i5^7C-o=6b}M zS9KQO)xMd;c9y<^OADXKI5B&i&rPb8R+YG|oeTFSH<$Y!6kMLn)Vhqw*lhNJ8i#O0YRUa7K!gOZ|WFcKTsMhB?Z!)UpC z>oSbdxA-o}`t?=($BaNg>0ZO?e?M6H_gnkVuYWmaDJ%I;1^+zg^|OMC*ZBRXV_&}l ze?9W@H+1cl`1D@~V19-FlV<%l7yu}Gr3?Q5NY}q=`juh(x2}7{KQ#S=Z~H6$SDNDA z_^Vge;_p5AnY8#T{8y^i-|*Ad)z9znUx{D8s`xcg{Xkr2Y z{wv)475>jp{?Bj|)}P>i1OUIH|LKT-Mk90lgx3GdEz3$myqY%vfcX07`8q?Cxqd7C EKZ`JklK=n! literal 0 HcmV?d00001 diff --git a/apache-poi-2/src/test/java/com/baeldung/poi/replacevariables/DocTextReplacerUnitTest.java b/apache-poi-2/src/test/java/com/baeldung/poi/replacevariables/DocTextReplacerUnitTest.java new file mode 100644 index 0000000000..0c3d80a354 --- /dev/null +++ b/apache-poi-2/src/test/java/com/baeldung/poi/replacevariables/DocTextReplacerUnitTest.java @@ -0,0 +1,31 @@ +package com.baeldung.poi.replacevariables; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Arrays; + +import org.apache.poi.hwpf.HWPFDocument; +import org.apache.poi.hwpf.extractor.WordExtractor; +import org.junit.jupiter.api.Test; + +class DocTextReplacerUnitTest { + + @Test + void whenReplaceText_ThenTextReplaced() throws IOException { + new DocTextReplacer().replaceText(); + + String filePath = getClass().getClassLoader() + .getResource("baeldung.doc") + .getPath(); + try (FileInputStream fis = new FileInputStream(filePath); HWPFDocument document = new HWPFDocument(fis); WordExtractor extractor = new WordExtractor(document)) { + long occurrencesOfHello = Arrays.stream(extractor.getText() + .split("\\s+")) + .filter(s -> s.contains("Hello")) + .count(); + assertEquals(5, occurrencesOfHello); + } + } + +} diff --git a/apache-poi-2/src/test/java/com/baeldung/poi/replacevariables/DocxNaiveTextReplacerUnitTest.java b/apache-poi-2/src/test/java/com/baeldung/poi/replacevariables/DocxNaiveTextReplacerUnitTest.java new file mode 100644 index 0000000000..324e63eb51 --- /dev/null +++ b/apache-poi-2/src/test/java/com/baeldung/poi/replacevariables/DocxNaiveTextReplacerUnitTest.java @@ -0,0 +1,31 @@ +package com.baeldung.poi.replacevariables; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Arrays; + +import org.apache.poi.xwpf.extractor.XWPFWordExtractor; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.junit.jupiter.api.Test; + +class DocxNaiveTextReplacerUnitTest { + + @Test + void whenReplaceText_ThenTextReplaced() throws IOException { + new DocxNaiveTextReplacer().replaceText(); + + String filePath = getClass().getClassLoader() + .getResource("baeldung-copy.docx") + .getPath(); + try (FileInputStream fis = new FileInputStream(filePath); XWPFDocument document = new XWPFDocument(fis); XWPFWordExtractor extractor = new XWPFWordExtractor(document)) { + long occurrencesOfHello = Arrays.stream(extractor.getText() + .split("\\s+")) + .filter(s -> s.contains("Hello")) + .count(); + assertTrue(occurrencesOfHello < 5); + } + } + +} diff --git a/apache-poi-2/src/test/java/com/baeldung/poi/replacevariables/DocxTestReplacerUnitTest.java b/apache-poi-2/src/test/java/com/baeldung/poi/replacevariables/DocxTestReplacerUnitTest.java new file mode 100644 index 0000000000..d09f6b003d --- /dev/null +++ b/apache-poi-2/src/test/java/com/baeldung/poi/replacevariables/DocxTestReplacerUnitTest.java @@ -0,0 +1,31 @@ +package com.baeldung.poi.replacevariables; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Arrays; + +import org.apache.poi.xwpf.extractor.XWPFWordExtractor; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.junit.jupiter.api.Test; + +class DocxTestReplacerUnitTest { + + @Test + void whenReplaceText_ThenTextReplaced() throws IOException { + new DocxTextReplacer().replaceText(); + + String filePath = getClass().getClassLoader() + .getResource("baeldung.docx") + .getPath(); + try (FileInputStream fis = new FileInputStream(filePath); XWPFDocument document = new XWPFDocument(fis); XWPFWordExtractor extractor = new XWPFWordExtractor(document)) { + long occurrencesOfHello = Arrays.stream(extractor.getText() + .split("\\s+")) + .filter(s -> s.contains("Hello")) + .count(); + assertEquals(5, occurrencesOfHello); + } + } + +}