Skip to content

Commit 9202b20

Browse files
committed
Templater v6.0.0
API changes so CancellationToken can be passed into processing. Java API change to support try-with-resource pattern (close() instead of flush() method). Sync .NET and Java API (argument order changes in .NET - legacy API currently available with extension methods) Show how to use CancellationToken in the TemplaterServer by using timeout argument. Minimal Java version is now 8.
1 parent 6709e6c commit 9202b20

File tree

207 files changed

+399
-370
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

207 files changed

+399
-370
lines changed

Advanced/CsvStreaming/CsvStreaming.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
<Private>True</Private>
4141
</Reference>
4242
<Reference Include="NGS.Templater">
43-
<HintPath>..\..\packages\Templater.5.2.0\lib\Net40\NGS.Templater.dll</HintPath>
43+
<HintPath>..\..\packages\Templater.6.0.0\lib\Net40\NGS.Templater.dll</HintPath>
4444
<SpecificVersion>False</SpecificVersion>
4545
</Reference>
4646
<Reference Include="System" />

Advanced/CsvStreaming/packages.config

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
33
<package id="DotNetZip" version="1.13.0" targetFramework="net40-Client" />
4-
<package id="Templater" version="5.2.0" targetFramework="net40-Client" />
4+
<package id="Templater" version="6.0.0" targetFramework="net40-Client" />
55
</packages>

Advanced/CsvStreaming/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>hr.ngs.templater.example</groupId>
55
<artifactId>csv-streaming-example</artifactId>
66
<packaging>jar</packaging>
7-
<version>5.2.0</version>
7+
<version>6.0.0</version>
88
<name>CSV streaming</name>
99
<url>https://github.com/ngs-doo/TemplaterExamples</url>
1010

Advanced/CsvStreaming/src/Program.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public static void Main(string[] args)
107107
using (var zip = new ZipOutputStream("output.zip"))
108108
{
109109
zip.PutNextEntry("output.csv");
110-
using (var doc = config.Build().Open(File.OpenRead("template/input.csv"), zip, "csv"))
110+
using (var doc = config.Build().Open(File.OpenRead("template/input.csv"), "csv", zip))
111111
{
112112
//streaming processing assumes we have only a single collection, which means we first need to process all other tags
113113
doc.Process(new { filter = new { date = "All", user = "All" } });

Advanced/CsvStreaming/src/main/java/hr/ngs/templater/example/CsvStreamingExample.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public static void main(final String[] args) throws Exception {
145145
}
146146
//remove remaining rows
147147
doc.templater().resize(doc.templater().tags(), 0);
148-
doc.flush();
148+
doc.close();
149149
conn.close();
150150
zos.closeEntry();
151151
zos.close();

Advanced/DepartmentReport/DepartmentReport.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
</PropertyGroup>
3737
<ItemGroup>
3838
<Reference Include="NGS.Templater">
39-
<HintPath>..\..\packages\Templater.5.2.0\lib\Net40\NGS.Templater.dll</HintPath>
39+
<HintPath>..\..\packages\Templater.6.0.0\lib\Net40\NGS.Templater.dll</HintPath>
4040
</Reference>
4141
<Reference Include="System" />
4242
<Reference Include="System.Core" />
+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3-
<package id="Templater" version="5.2.0" targetFramework="net40-Client" />
3+
<package id="Templater" version="6.0.0" targetFramework="net40-Client" />
44
</packages>

Advanced/DepartmentReport/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>hr.ngs.templater.example</groupId>
55
<artifactId>department-report-example</artifactId>
66
<packaging>jar</packaging>
7-
<version>5.2.0</version>
7+
<version>6.0.0</version>
88
<name>DepartmentReportExample</name>
99
<url>https://github.com/ngs-doo/TemplaterExamples</url>
1010

Advanced/DepartmentReport/src/Program.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public static void Main(string[] args)
7171
.NavigateSeparator(':')
7272
.Include(SortExpression)
7373
.Build()
74-
.Open(fis, fos, "xlsx"))
74+
.Open(fis, "xlsx", fos))
7575
doc.Process(GetCompany());
7676

7777
Process.Start(new ProcessStartInfo("departments.xlsx") { UseShellExecute = true });

Advanced/DepartmentReport/src/main/java/hr/ngs/templater/example/DepartmentReportExample.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public static void main(final String[] args) throws Exception {
9898
.build()
9999
.open(templateStream, "xlsx", fos);
100100
tpl.process(getCompany());
101-
tpl.flush();
101+
tpl.close();
102102
fos.close();
103103
Desktop.getDesktop().open(tmp);
104104
}

Advanced/DoubleProcessing/DoubleProcessing.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
</PropertyGroup>
3838
<ItemGroup>
3939
<Reference Include="NGS.Templater">
40-
<HintPath>..\..\packages\Templater.5.2.0\lib\Net40\NGS.Templater.dll</HintPath>
40+
<HintPath>..\..\packages\Templater.6.0.0\lib\Net40\NGS.Templater.dll</HintPath>
4141
<Private>True</Private>
4242
</Reference>
4343
<Reference Include="System" />
+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3-
<package id="Templater" version="5.2.0" targetFramework="net40-Client" />
3+
<package id="Templater" version="6.0.0" targetFramework="net40-Client" />
44
</packages>

Advanced/DoubleProcessing/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>hr.ngs.templater.example</groupId>
55
<artifactId>double-processing-example</artifactId>
66
<packaging>jar</packaging>
7-
<version>5.2.0</version>
7+
<version>6.0.0</version>
88
<name>DoubleProcessingExample</name>
99
<url>https://github.com/ngs-doo/TemplaterExamples</url>
1010

Advanced/DoubleProcessing/src/main/java/hr/ngs/templater/example/DoubleProcessingExample.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public static void main(final String[] args) throws Exception {
5353
doc1.templater().resize(new String[] { t }, 0);//hide column from output
5454
}
5555
}
56-
doc1.flush();
56+
doc1.close();
5757

5858
//now let's prepare our complex object for standard processing
5959
Map<String, Object> complex = buildComplexObject(totalPeople);
@@ -64,7 +64,7 @@ public static void main(final String[] args) throws Exception {
6464
ITemplateDocument doc2 = factory.open(is, "xlsx", fos);
6565
doc2.process(complex);
6666
doc2.process(new HashMap<String, Object>() {{ put("starcraft", units); }});
67-
doc2.flush();
67+
doc2.close();
6868
fos.close();
6969

7070
Desktop.getDesktop().open(tmp);

Advanced/PowerQuery/PowerQuery.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
</PropertyGroup>
3737
<ItemGroup>
3838
<Reference Include="NGS.Templater">
39-
<HintPath>..\..\packages\Templater.5.2.0\lib\Net40\NGS.Templater.dll</HintPath>
39+
<HintPath>..\..\packages\Templater.6.0.0\lib\Net40\NGS.Templater.dll</HintPath>
4040
<Private>True</Private>
4141
</Reference>
4242
<Reference Include="System" />

Advanced/PowerQuery/packages.config

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3-
<package id="Templater" version="5.2.0" targetFramework="net40-Client" />
3+
<package id="Templater" version="6.0.0" targetFramework="net40-Client" />
44
</packages>

Advanced/PowerQuery/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>hr.ngs.templater.example</groupId>
55
<artifactId>power-query-example</artifactId>
66
<packaging>jar</packaging>
7-
<version>5.2.0</version>
7+
<version>6.0.0</version>
88
<name>PowerQueryExample</name>
99
<url>https://github.com/ngs-doo/TemplaterExamples</url>
1010

Advanced/PowerQuery/src/Program.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ public class Program
1616

1717
private static object ToIsoFormat(object value, string tag, string[] metadata)
1818
{
19-
//only apply iso format on CSV part of the processing
20-
if (!tag.StartsWith("csv.")) return value;
19+
//only apply iso format on CSV part of the processing (StartsWith using Ordinal is significantly faster)
20+
if (!tag.StartsWith("csv.", StringComparison.Ordinal)) return value;
2121
if (value is DateTime)
2222
{
2323
var dt = (DateTime)value;
@@ -101,11 +101,11 @@ public static void Main(string[] args)
101101
{
102102
var data = new InputData();
103103
data.csv = GenerateData(100000);
104-
data.sheet = GenerateData(25000);
104+
data.sheet = GenerateData(50000);
105105

106106
using (var fis = File.OpenRead("template/PowerQuery.xlsx"))
107107
using (var fos = File.OpenWrite("PowerQuery.xlsx"))
108-
using (var doc = Factory.Open(fis, fos, "xlsx"))
108+
using (var doc = Factory.Open(fis, "xlsx", fos))
109109
doc.Process(data);
110110

111111
Process.Start(new ProcessStartInfo("PowerQuery.xlsx") { UseShellExecute = true });

Advanced/PowerQuery/src/main/java/hr/ngs/templater/example/PowerQueryExample.java

+4-18
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,9 @@
1616
public class PowerQueryExample {
1717

1818
private static IDocumentFactory factory = Configuration.builder()
19-
.include(new LocalDateToDate())
2019
//Excel will complain about corrupted file unless Templater is initialized with a valid license
2120
.build("Customer email", "Customer license");
2221

23-
static class LocalDateToDate implements IDocumentFactoryBuilder.ILowLevelReplacer {
24-
25-
@Override
26-
public Object replace(Object value, String tag, String[] metadata) {
27-
//Templater does not understand java8 types so we can convert local date into legacy date
28-
if (value instanceof LocalDate) {
29-
return java.sql.Date.valueOf((LocalDate)value);
30-
}
31-
return value;
32-
}
33-
}
34-
3522
//class should be public Templater to reduce the overhead of reflection access
3623
public static class CsvData {
3724
public LocalDate date;
@@ -113,14 +100,13 @@ private static File fixStreamingZip(File file) throws IOException {
113100
public static void main(final String[] args) throws Exception {
114101
File tmp = File.createTempFile("power", ".xlsx");
115102
InputData data = new InputData();
116-
data.csv = generateData(100000);
117-
data.sheet = generateData(25000);
103+
data.csv = generateData(100_000);
104+
data.sheet = generateData(50_000);
118105

119106
try(InputStream is = PowerQueryExample.class.getResourceAsStream("/PowerQuery.xlsx");
120-
OutputStream os = Files.newOutputStream(tmp.toPath())) {
121-
ITemplateDocument tpl = factory.open(is, "xlsx", os);
107+
OutputStream os = Files.newOutputStream(tmp.toPath());
108+
ITemplateDocument tpl = factory.open(is, "xlsx", os)) {
122109
tpl.process(data);
123-
tpl.flush();
124110
}
125111

126112
File result = fixStreamingZip(tmp);

Advanced/SalesOrderMVP (.NET)/SalesOrderMVP.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
<Private>True</Private>
4949
</Reference>
5050
<Reference Include="NGS.Templater">
51-
<HintPath>..\..\packages\Templater.5.2.0\lib\Net40\NGS.Templater.dll</HintPath>
51+
<HintPath>..\..\packages\Templater.6.0.0\lib\Net40\NGS.Templater.dll</HintPath>
5252
<Private>True</Private>
5353
</Reference>
5454
<Reference Include="System" />
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
33
<package id="Fluent.Ribbon" version="3.6.1.236" targetFramework="net40-Client" />
4-
<package id="Templater" version="5.2.0" targetFramework="net40-Client" />
4+
<package id="Templater" version="6.0.0" targetFramework="net40-Client" />
55
</packages>

Advanced/SheetReport/SheetReport.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
<Private>True</Private>
4141
</Reference>
4242
<Reference Include="NGS.Templater">
43-
<HintPath>..\..\packages\Templater.5.2.0\lib\Net40\NGS.Templater.dll</HintPath>
43+
<HintPath>..\..\packages\Templater.6.0.0\lib\Net40\NGS.Templater.dll</HintPath>
4444
<Private>True</Private>
4545
</Reference>
4646
<Reference Include="System" />

Advanced/SheetReport/packages.config

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
33
<package id="SharpZipLib" version="0.86.0" targetFramework="net40-Client" />
4-
<package id="Templater" version="5.2.0" targetFramework="net40-Client" />
4+
<package id="Templater" version="6.0.0" targetFramework="net40-Client" />
55
</packages>

Advanced/SheetReport/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>hr.ngs.templater.example</groupId>
55
<artifactId>sheet-report-example</artifactId>
66
<packaging>jar</packaging>
7-
<version>5.2.0</version>
7+
<version>6.0.0</version>
88
<name>SheetReportExample</name>
99
<url>https://github.com/ngs-doo/TemplaterExamples</url>
1010

Advanced/SheetReport/src/main/java/hr/ngs/templater/example/SheetReportExample.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public static void main(final String[] args) throws Exception {
9898

9999
tpl.process(data);
100100

101-
tpl.flush();
101+
tpl.close();
102102
fos.close();
103103
Desktop.getDesktop().open(tmp);
104104
}

Advanced/TemplaterServer/Dockerfile

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
FROM ubuntu:18.10
1+
FROM ubuntu:20.04
22

33
RUN apt update && apt install openjdk-11-jre-headless libreoffice-common libreoffice-java-common libreoffice-writer libreoffice-calc wget -yq
44

5-
RUN wget -q https://github.com/ngs-doo/TemplaterExamples/releases/download/v4.0.0/templater-server.jar
5+
RUN wget -q https://github.com/ngs-doo/TemplaterExamples/releases/download/v6.0.0/templater-server.jar
66

77
COPY templater.lic .
88

Advanced/TemplaterServer/Readme.md

+4-3
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Once the docker has started, REST API can be consumed by calling:
3434

3535
with body for the actual document. PDF document will be returned as the response.
3636

37-
Alternatively [portable version of LibreOffice](https://www.libreoffice.org/download/portable-versions/) can be used instead of Docker.
37+
Alternatively, on Windows [portable version of LibreOffice](https://www.libreoffice.org/download/portable-versions/) can be used instead of Docker.
3838

3939
### REST server for other languages
4040

@@ -46,6 +46,8 @@ The workflow for using the server is:
4646
* PUT /document?template=file.ext - using JSON for request body will process the previously saved template with provided JSON. To create PDF `Accept: application/pdf` can be used
4747
* DELETE /document?template=file.ext - will remove previously saved template document
4848

49+
Templater supports cancellation pattern via token interface. This example uses timeout based implementation to limit the execution duration of the request.
50+
4951
### PDF conversion libraries for docx
5052

5153
Several libraries/applications are available for PDF output:
@@ -117,7 +119,7 @@ While :collapse will remove tags, processor will still continue trying to replac
117119
#### Dynamic resize
118120

119121
Dynamic resize works on Object[][] or List<List<Object>> types as long as dimensions are the same.
120-
In .NET special two dimensional type: Array[,] is also supported.
122+
In .NET special two-dimensional type: Array[,] is also supported.
121123

122124
When combined with **merge-nulls** and **span-nulls** multiple cells can be combined into one.
123125

@@ -163,7 +165,6 @@ Tags can be combined with static/dynamic pictures in each row/page.
163165
Row context can span multiple rows/columns.
164166
Since context can be nested, this allows for very complex document layouts.
165167
Text based watermark is supported.
166-
Currently it requires usage of :all metadata, since watermark is repeated multiple times in different document parts.
167168

168169
#### Scorecard
169170

Advanced/TemplaterServer/TemplaterServer.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2" />
2525
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
2626
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
27-
<PackageReference Include="Templater" Version="5.2.0" />
27+
<PackageReference Include="Templater" Version="6.0.0" />
2828
</ItemGroup>
2929

3030
<ItemGroup>

Advanced/TemplaterServer/pom.xml

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>hr.ngs.templater.example</groupId>
55
<artifactId>templater-server</artifactId>
66
<packaging>jar</packaging>
7-
<version>5.2.0</version>
7+
<version>6.0.0</version>
88
<name>TemplaterServer</name>
99
<url>https://github.com/ngs-doo/TemplaterExamples</url>
1010

@@ -20,7 +20,7 @@
2020
<repository>
2121
<id>AsposeJavaAPI</id>
2222
<name>Aspose Java API</name>
23-
<url>http://repository.aspose.com/repo</url>
23+
<url>https://artifact.aspose.com/repo/</url>
2424
</repository>
2525
</repositories>
2626
<dependencies>
@@ -37,13 +37,13 @@
3737
<dependency>
3838
<groupId>e-iceblue</groupId>
3939
<artifactId>spire.doc.free</artifactId>
40-
<version>2.7.3</version>
40+
<version>3.9.0</version>
4141
<scope>compile</scope>
4242
</dependency>
4343
<dependency>
4444
<groupId>com.aspose</groupId>
4545
<artifactId>aspose-words</artifactId>
46-
<version>19.12</version>
46+
<version>21.7</version>
4747
<classifier>jdk17</classifier>
4848
<scope>compile</scope>
4949
</dependency>

Advanced/TemplaterServer/src/SharedResource.cs

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class SharedResource
1313
internal readonly string[] TemplateFiles;
1414
internal readonly string TemplateHtml;
1515
internal readonly string DefaultHtml;
16+
internal readonly int Timeout = 30;
1617
internal readonly Dictionary<string, string> Jsons;
1718
internal readonly Dictionary<string, PdfConverter> PdfConverters = new Dictionary<string, PdfConverter>();
1819

@@ -25,6 +26,8 @@ public SharedResource(string[] args)
2526
{
2627
if (a.StartsWith("pdf="))
2728
pdf = a.Substring("pdf=".Length).Split(',');
29+
else if (a.StartsWith("timeout="))
30+
Timeout = int.Parse(a.Substring("timeout=".Length));
2831
}
2932

3033
foreach (var t in types)

0 commit comments

Comments
 (0)