From 9224b6e55d7089dc632ff61262045cf8ca06399d Mon Sep 17 00:00:00 2001 From: "Hani M. K" Date: Fri, 6 Dec 2019 21:40:20 +0300 Subject: [PATCH 1/3] updated iText to version 7.1.9 updated iText to version 7.1.9 --- itext-java-html-pdf/.classpath | 15 +++++++- itext-java-html-pdf/index.html | 4 +- itext-java-html-pdf/java.png | Bin 0 -> 9053 bytes itext-java-html-pdf/pdf.pdf | Bin 1712 -> 0 bytes itext-java-html-pdf/pom.xml | 18 +++++---- .../src/main/java/com/hmkcode/App.java | 36 +++++++++--------- 6 files changed, 45 insertions(+), 28 deletions(-) create mode 100644 itext-java-html-pdf/java.png delete mode 100644 itext-java-html-pdf/pdf.pdf diff --git a/itext-java-html-pdf/.classpath b/itext-java-html-pdf/.classpath index 33a301cc..8d216a15 100644 --- a/itext-java-html-pdf/.classpath +++ b/itext-java-html-pdf/.classpath @@ -3,6 +3,17 @@ - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/itext-java-html-pdf/index.html b/itext-java-html-pdf/index.html index db6616a9..054b0e51 100644 --- a/itext-java-html-pdf/index.html +++ b/itext-java-html-pdf/index.html @@ -7,8 +7,10 @@

HTML to PDF

- itext 5.4.2 converting HTML to PDF + itext 7.1.9 + converting HTML to PDF

+ java-logo diff --git a/itext-java-html-pdf/java.png b/itext-java-html-pdf/java.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e3d02305b471cccf8c752da84d363fb9f1b478 GIT binary patch literal 9053 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 diff --git a/itext-java-html-pdf/pom.xml b/itext-java-html-pdf/pom.xml index d764eeb2..f7910a6b 100644 --- a/itext-java-html-pdf/pom.xml +++ b/itext-java-html-pdf/pom.xml @@ -12,18 +12,20 @@ UTF-8 + RELEASE - com.itextpdf - itextpdf - 5.4.2 - - - com.itextpdf.tool - xmlworker - 5.4.1 + com.itextpdf + itext7-core + 7.1.9 + pom + + + com.itextpdf + html2pdf + 2.1.6 diff --git a/itext-java-html-pdf/src/main/java/com/hmkcode/App.java b/itext-java-html-pdf/src/main/java/com/hmkcode/App.java index 0e6c9723..0be911e5 100644 --- a/itext-java-html-pdf/src/main/java/com/hmkcode/App.java +++ b/itext-java-html-pdf/src/main/java/com/hmkcode/App.java @@ -1,29 +1,31 @@ package com.hmkcode; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; -import com.itextpdf.text.Document; -import com.itextpdf.text.DocumentException; -import com.itextpdf.text.pdf.PdfWriter; -import com.itextpdf.tool.xml.XMLWorkerHelper; + +import com.itextpdf.html2pdf.HtmlConverter; public class App { - public static void main( String[] args ) throws DocumentException, IOException + public static final String HTML = "

Hello

" + + "

This was created using iText

" + + "hmkcode.com"; + + + public static void main( String[] args ) throws FileNotFoundException, IOException { - // step 1 - Document document = new Document(); - // step 2 - PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("pdf.pdf")); - // step 3 - document.open(); - // step 4 - XMLWorkerHelper.getInstance().parseXHtml(writer, document, - new FileInputStream("index.html")); - //step 5 - document.close(); - + + // String to PDF + HtmlConverter.convertToPdf(HTML, new FileOutputStream("string-to-pdf.pdf")); + + + // HTML file to PDF + HtmlConverter.convertToPdf(new FileInputStream("index.html"), + new FileOutputStream("index-to-pdf.pdf")); + + System.out.println( "PDF Created!" ); } } From dc0b1bcee3fa23428898b96fec7ee945ae040e16 Mon Sep 17 00:00:00 2001 From: "Hani M. K" Date: Sat, 25 Apr 2020 22:27:14 +0300 Subject: [PATCH 2/3] java jasper example java jasper example --- java-jasper/pom.xml | 36 +++++++++++ .../src/main/java/com/hmkcode/App.java | 61 +++++++++++++++++++ .../src/main/java/com/hmkcode/Country.java | 47 ++++++++++++++ java-jasper/src/main/resources/report.jrxml | 37 +++++++++++ 4 files changed, 181 insertions(+) create mode 100644 java-jasper/pom.xml create mode 100644 java-jasper/src/main/java/com/hmkcode/App.java create mode 100644 java-jasper/src/main/java/com/hmkcode/Country.java create mode 100644 java-jasper/src/main/resources/report.jrxml diff --git a/java-jasper/pom.xml b/java-jasper/pom.xml new file mode 100644 index 00000000..37666f32 --- /dev/null +++ b/java-jasper/pom.xml @@ -0,0 +1,36 @@ + + + + 4.0.0 + + com.hmkcode + java-jasper + 1.0-SNAPSHOT + + java-jasper + + http://www.example.com + + + UTF-8 + 1.7 + 1.7 + + + + + net.sf.jasperreports + jasperreports + 6.10.0 + + + + + org.springframework + spring-core + 5.2.3.RELEASE + + + + diff --git a/java-jasper/src/main/java/com/hmkcode/App.java b/java-jasper/src/main/java/com/hmkcode/App.java new file mode 100644 index 00000000..72853237 --- /dev/null +++ b/java-jasper/src/main/java/com/hmkcode/App.java @@ -0,0 +1,61 @@ +package com.hmkcode; + +import net.sf.jasperreports.engine.*; +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; +import org.springframework.util.ResourceUtils; + +import java.io.*; +import java.util.*; + +public class App +{ + // name and destination of output file e.g. "report.pdf" + private static String destFileName = "report.pdf"; + public static void main( String[] args ) throws FileNotFoundException, JRException { + + System.out.println( "generating jasper report..." ); + + // 1. compile template ".jrxml" file + JasperReport jasperReport = getJasperReport(); + + // 2. parameters "empty" + Map parameters = getParameters(); + + // 3. datasource "java object" + JRDataSource dataSource = getDataSource(); + + JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource); + JasperExportManager.exportReportToPdfFile(jasperPrint, destFileName); + + } + + private static JasperReport getJasperReport() throws FileNotFoundException, JRException { + File template = ResourceUtils.getFile("classpath:report.jrxml"); + return JasperCompileManager.compileReport(template.getAbsolutePath()); + } + private static Map getParameters(){ + Map parameters = new HashMap<>(); + parameters.put("createdBy", "hmkcode"); + return parameters; + } + + private static JRDataSource getDataSource(){ + + List countries = new LinkedList<>(); + + countries.add(new Country("IS", "Iceland", "https://i.pinimg.com/originals/72/b4/49/72b44927f220151547493e528a332173.png")); + countries.add(new Country("TR", "Turkey", "https://i.pinimg.com/originals/82/63/23/826323bba32e6e5a5996062c3a3c662f.png")); + countries.add(new Country("ZA", "South Africa", "https://i.pinimg.com/originals/f5/c7/8d/f5c78da001b46e26481c04fb93473454.png")); + countries.add(new Country("PL", "Poland", "https://i.pinimg.com/originals/7f/ae/21/7fae21c4854010b11127218ead743863.png")); + countries.add(new Country("CA", "Canada", "https://i.pinimg.com/originals/4d/d4/01/4dd401733ba25e6442fc8696e04e5846.png")); + + countries.add(new Country("PA", "Panama", "https://i.pinimg.com/originals/84/dc/e4/84dce49e52ebfb5b3814393069807e0a.png")); + countries.add(new Country("HR", "Croatia", "https://i.pinimg.com/originals/f5/8c/94/f58c94a2a2b3221328fc1e2b7acfa656.png")); + countries.add(new Country("JP", "Japan", "https://i.pinimg.com/originals/a5/d6/88/a5d688289cd6850016f14fe93b17da01.png")); + countries.add(new Country("DE", "Germany", "https://i.pinimg.com/originals/af/c9/b2/afc9b2592a9f1cf591e8a52256ae1e9f.png")); + countries.add(new Country("BR", "Brazil", "https://i.pinimg.com/originals/e4/03/c4/e403c4447a3bd8940459ae4f50856bed.png")); + + + return new JRBeanCollectionDataSource(countries); + } +} diff --git a/java-jasper/src/main/java/com/hmkcode/Country.java b/java-jasper/src/main/java/com/hmkcode/Country.java new file mode 100644 index 00000000..ecbc501d --- /dev/null +++ b/java-jasper/src/main/java/com/hmkcode/Country.java @@ -0,0 +1,47 @@ +package com.hmkcode; + +public class Country { + + private String code; + private String name; + private String url; + + public Country(String code, String name, String url) { + this.code = code; + this.name = name; + this.url = url; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + @Override + public String toString() { + return "Country{" + + "code='" + code + '\'' + + ", name='" + name + '\'' + + ", url='" + url + '\'' + + '}'; + } +} diff --git a/java-jasper/src/main/resources/report.jrxml b/java-jasper/src/main/resources/report.jrxml new file mode 100644 index 00000000..113a787a --- /dev/null +++ b/java-jasper/src/main/resources/report.jrxml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 6c5c149014c5686b3abb51c9f0e0c0165740d793 Mon Sep 17 00:00:00 2001 From: "Hani M. K" Date: Sun, 22 May 2022 18:15:52 +0300 Subject: [PATCH 3/3] java-spi java service provider interface --- java-spi/java-spi-api/pom.xml | 27 ++++++++++++ .../main/java/com/hmkcode/api/MyService.java | 6 +++ .../api/MyServiceProviderInterface.java | 6 +++ .../lib/java-spi-api-1.0-SNAPSHOT.jar | Bin 0 -> 2492 bytes .../lib/java-spi-impl1-1.0-SNAPSHOT.jar | Bin 0 -> 3328 bytes java-spi/java-spi-app/pom.xml | 40 ++++++++++++++++++ .../src/main/java/com/hmkcode/app/App.java | 9 ++++ .../java/com/hmkcode/app/MyServiceLoader.java | 31 ++++++++++++++ .../lib/java-spi-api-1.0-SNAPSHOT.jar | Bin 0 -> 2492 bytes java-spi/java-spi-impl1/pom.xml | 31 ++++++++++++++ .../java/com/hmkcode/impl/MyServiceImpl1.java | 12 ++++++ .../hmkcode/impl/MyServiceProviderImpl1.java | 13 ++++++ ...com.hmkcode.api.MyServiceProviderInterface | 1 + 13 files changed, 176 insertions(+) create mode 100644 java-spi/java-spi-api/pom.xml create mode 100644 java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyService.java create mode 100644 java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyServiceProviderInterface.java create mode 100644 java-spi/java-spi-app/lib/java-spi-api-1.0-SNAPSHOT.jar create mode 100644 java-spi/java-spi-app/lib/java-spi-impl1-1.0-SNAPSHOT.jar create mode 100644 java-spi/java-spi-app/pom.xml create mode 100644 java-spi/java-spi-app/src/main/java/com/hmkcode/app/App.java create mode 100644 java-spi/java-spi-app/src/main/java/com/hmkcode/app/MyServiceLoader.java create mode 100644 java-spi/java-spi-impl1/lib/java-spi-api-1.0-SNAPSHOT.jar create mode 100644 java-spi/java-spi-impl1/pom.xml create mode 100644 java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceImpl1.java create mode 100644 java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceProviderImpl1.java create mode 100644 java-spi/java-spi-impl1/src/main/resources/META-INF/services/com.hmkcode.api.MyServiceProviderInterface diff --git a/java-spi/java-spi-api/pom.xml b/java-spi/java-spi-api/pom.xml new file mode 100644 index 00000000..e7c1e87d --- /dev/null +++ b/java-spi/java-spi-api/pom.xml @@ -0,0 +1,27 @@ + + + + 4.0.0 + + com.hmkcode.api + java-spi-api + 1.0-SNAPSHOT + + java-spi-api + + http://www.example.com + + + UTF-8 + 1.7 + 1.7 + + + + + + + + + diff --git a/java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyService.java b/java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyService.java new file mode 100644 index 00000000..4928f453 --- /dev/null +++ b/java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyService.java @@ -0,0 +1,6 @@ +package com.hmkcode.api; + +public interface MyService { + + void doSomething(); +} diff --git a/java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyServiceProviderInterface.java b/java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyServiceProviderInterface.java new file mode 100644 index 00000000..8e166424 --- /dev/null +++ b/java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyServiceProviderInterface.java @@ -0,0 +1,6 @@ +package com.hmkcode.api; + +public interface MyServiceProviderInterface { + + MyService getService(); +} diff --git a/java-spi/java-spi-app/lib/java-spi-api-1.0-SNAPSHOT.jar b/java-spi/java-spi-app/lib/java-spi-api-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..23a1c6be1ad6136d8b3ee9fc32a69c57cddfaf5f GIT binary patch literal 2492 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 literal 0 HcmV?d00001 diff --git a/java-spi/java-spi-app/pom.xml b/java-spi/java-spi-app/pom.xml new file mode 100644 index 00000000..74906a4f --- /dev/null +++ b/java-spi/java-spi-app/pom.xml @@ -0,0 +1,40 @@ + + + + 4.0.0 + + com.hmkcode.app + java-spi-app + 1.0-SNAPSHOT + + java-spi-app + + http://www.example.com + + + UTF-8 + 1.7 + 1.7 + + + + + + com.hmkcode.api + java-spi-api + 1.0-SNAPSHOT + system + ${project.basedir}/lib/java-spi-api-1.0-SNAPSHOT.jar + + + com.hmkcode.impl + java-spi-impl1 + 1.0-SNAPSHOT + system + ${project.basedir}/lib/java-spi-impl1-1.0-SNAPSHOT.jar + + + + + diff --git a/java-spi/java-spi-app/src/main/java/com/hmkcode/app/App.java b/java-spi/java-spi-app/src/main/java/com/hmkcode/app/App.java new file mode 100644 index 00000000..8e46d684 --- /dev/null +++ b/java-spi/java-spi-app/src/main/java/com/hmkcode/app/App.java @@ -0,0 +1,9 @@ +package com.hmkcode.app; + +public class App +{ + public static void main( String[] args ) + { + MyServiceLoader.defaultProvider().getService().doSomething(); + } +} diff --git a/java-spi/java-spi-app/src/main/java/com/hmkcode/app/MyServiceLoader.java b/java-spi/java-spi-app/src/main/java/com/hmkcode/app/MyServiceLoader.java new file mode 100644 index 00000000..2efc5d74 --- /dev/null +++ b/java-spi/java-spi-app/src/main/java/com/hmkcode/app/MyServiceLoader.java @@ -0,0 +1,31 @@ +package com.hmkcode.app; + +import java.nio.file.ProviderNotFoundException; +import java.util.Iterator; +import java.util.ServiceLoader; + +import com.hmkcode.api.MyServiceProviderInterface; + + +public class MyServiceLoader { + + private static final String DEFAULT_PROVIDER = "com.hmkcode.impl.MyServiceProviderImpl1"; + + public static MyServiceProviderInterface defaultProvider() { + return provider(DEFAULT_PROVIDER); + } + + public static MyServiceProviderInterface provider(String providerName) { + ServiceLoader loader = ServiceLoader.load(MyServiceProviderInterface.class); + + Iterator it = loader.iterator(); + while (it.hasNext()) { + MyServiceProviderInterface provider = it.next(); + if (providerName.equals(provider.getClass().getName())) { + return provider; + } + } + throw new ProviderNotFoundException("provider " + providerName + " not found"); + } + +} diff --git a/java-spi/java-spi-impl1/lib/java-spi-api-1.0-SNAPSHOT.jar b/java-spi/java-spi-impl1/lib/java-spi-api-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..23a1c6be1ad6136d8b3ee9fc32a69c57cddfaf5f GIT binary patch literal 2492 zcmWIWW@h1H0D+^;TSLGMD8UJ&eO*Hwbv^yu^aG&EI2euqm1Rf-e98byHvq8+vNB&s zKTkK;;1E4ux6i(3PWyQ4>RsgZ*3~+9=KSU$gDb`lo)+nNojal9t?R_W{$xqm6fx}s zDiu5DbO#B02L+eR)mkee!!0z~I7qZc_;k=`k)E$QUwVM@UdF{<2R2DMSQ{xYY3_>C zyy;+l<|~gwR>e*Rn9CR#wxD@{1?aNm{9L%(F;(zDRb=F5C+DZ6BB?xpW|jb&%EW?9 zxN1n4h|Oc3)c{o055)3VRQpy2rxulECa3Bp=Oh*vTYt^JZpX&Pmdxf?#-`@RcJj%e zn7=)D-aPp;CFJjsCZF2-ryg8cwCT)~kTNzgH@3z#M>e_qopWSQN$vk7Ypy&Ia$|cp z<jE4b9#6jQh5{(aF|S- z+Q@q(DS>^G504By*dUI#2;`LL13LN?5F6lgd_YltS!POVk!M~>YEfDuF5j%h<(n%F zi~ejnGv$iX`8|`aEZTAexA)e4xgxYe&W$aS*H?ayTNJY>`}65ys>^q!K4TC){dk)X ze+s{}GP5$XF*An&)7!Mv1m=wrHyTxhnc3lf!%WlsK)=D$bZ%lRAYpi@{+Z0tflUWTD8rrg7_U*oUcUva+>GRuf$976wN#1|l zXaCH^$+fWyWh2zLN~w#h_zGw&EMD1F_-Rwsf$b+%r1{#I)7I3nKMXX`F!%F%f41Y& ztoIIrc{?;3GomjXt#MoLc}uM8)Wv%zn|EbOU5atNn>s7*!q=Q#JjZ4wublJT%fU!S zK}1Jc{NqZoJIB}mz0Lo3*^S+Mm)+q;;o;wN>EoKCFW&7~ z{>b#t3gLww^AdaH=3U!dt>U$g%i)sp`ic6CU$d>sS2XrcmJ>KOH#2+no7-{;=d*(u zITuRg?%Y?Xk)ZHLB4$geNA#qeZJSPYUXIp&u+M&y&OMIB^;y5H?xs1}D{F7qtKsvo z?c(Jtne(4-W2nD$J=l=lmg`dc>4OcY4!71HeZ9o~L7znn*9mo4p~S&(9T=O!fosKT zfw9;G#8za)WS8ng3aDT`wI^-$0L5As>8oyw5&<8pP+P!?;OXw1-EO zr*|#SnKeE>qIYVYx9~Q|FtY-)h;rPzFN^+MVmdE!8<;KkLJOI_z(OW&-H}C;&H!_v z(1Mt-q{u~ig^tVgA{OavU14EtfBss)c?a_w=M5EZ9JX(n&JD~~j7%cTxGM{w&wxOH z;jJTxhUXlFHtdxLNHGX3X;cT2aBWCc3Bm--A{ + + + 4.0.0 + + com.hmkcode.impl + java-spi-impl1 + 1.0-SNAPSHOT + + java-spi-impl1 + + http://www.example.com + + + UTF-8 + 1.7 + 1.7 + + + + + com.hmkcode.api + java-spi-api + 1.0-SNAPSHOT + system + ${project.basedir}/lib/java-spi-api-1.0-SNAPSHOT.jar + + + + diff --git a/java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceImpl1.java b/java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceImpl1.java new file mode 100644 index 00000000..24afcfa4 --- /dev/null +++ b/java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceImpl1.java @@ -0,0 +1,12 @@ +package com.hmkcode.impl; + +import com.hmkcode.api.MyService; + +public class MyServiceImpl1 implements MyService{ + + @Override + public void doSomething() { + System.out.println("MyServiceImpl1"); + + } +} diff --git a/java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceProviderImpl1.java b/java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceProviderImpl1.java new file mode 100644 index 00000000..252b7a3e --- /dev/null +++ b/java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceProviderImpl1.java @@ -0,0 +1,13 @@ +package com.hmkcode.impl; + +import com.hmkcode.api.MyService; +import com.hmkcode.api.MyServiceProviderInterface; + +public class MyServiceProviderImpl1 implements MyServiceProviderInterface { + + @Override + public MyService getService() { + return new MyServiceImpl1(); + } + +} diff --git a/java-spi/java-spi-impl1/src/main/resources/META-INF/services/com.hmkcode.api.MyServiceProviderInterface b/java-spi/java-spi-impl1/src/main/resources/META-INF/services/com.hmkcode.api.MyServiceProviderInterface new file mode 100644 index 00000000..008c8c11 --- /dev/null +++ b/java-spi/java-spi-impl1/src/main/resources/META-INF/services/com.hmkcode.api.MyServiceProviderInterface @@ -0,0 +1 @@ +com.hmkcode.impl.MyServiceProviderImpl1 \ No newline at end of file
Title