diff --git a/CHANGELOG.md b/CHANGELOG.md index 50cf422ee..7b7ce0965 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- [fj-doc-freemarker] handling of svg in html handler + ## [8.12.5] - 2025-03-24 ### Changed diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/model/DocImage.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/model/DocImage.java index 9462cd8cf..69f784b7c 100644 --- a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/model/DocImage.java +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/model/DocImage.java @@ -26,10 +26,12 @@ The Apache Software Foundation (http://www.apache.org/). package org.fugerit.java.doc.base.model; import java.util.Arrays; +import java.util.Base64; import java.util.Collection; import org.fugerit.java.core.function.SafeFunction; import org.fugerit.java.core.lang.helpers.StringUtils; +import org.fugerit.java.doc.base.helper.Base64Helper; import org.fugerit.java.doc.base.helper.SourceResolverHelper; import lombok.Getter; @@ -83,6 +85,10 @@ public String getResolvedBase64() { return res; } ); } + + public String getResolvedText() { + return SafeFunction.get( () -> new String( SourceResolverHelper.resolveImage( this ) ) ); + } public String getResolvedType() { return StringUtils.valueWithDefault( this.getType() , this.getUrl() ); diff --git a/fj-doc-base/src/main/resources/META-INF/native-image/org.fugerit.java/fj-doc-base/reflect-config.json b/fj-doc-base/src/main/resources/META-INF/native-image/org.fugerit.java/fj-doc-base/reflect-config.json index 53c8f70f7..69478d2e6 100644 --- a/fj-doc-base/src/main/resources/META-INF/native-image/org.fugerit.java/fj-doc-base/reflect-config.json +++ b/fj-doc-base/src/main/resources/META-INF/native-image/org.fugerit.java/fj-doc-base/reflect-config.json @@ -1140,6 +1140,9 @@ }, { "name" : "getResolvedBase64", "parameterTypes" : [ ] + }, { + "name" : "getResolvedText", + "parameterTypes" : [ ] }, { "name" : "getResolvedType", "parameterTypes" : [ ] diff --git a/fj-doc-base/src/test/java/test/org/fugerit/java/doc/base/model/TestDocImage.java b/fj-doc-base/src/test/java/test/org/fugerit/java/doc/base/model/TestDocImage.java index c116e166c..0981dbbec 100644 --- a/fj-doc-base/src/test/java/test/org/fugerit/java/doc/base/model/TestDocImage.java +++ b/fj-doc-base/src/test/java/test/org/fugerit/java/doc/base/model/TestDocImage.java @@ -19,6 +19,8 @@ void testElement1() { Assertions.assertFalse( image.isSvg() ); image.setType( DocImage.TYPE_SVG ); Assertions.assertTrue( image.isSvg() ); + image.setUrl( "cl://txt/test.txt" ); + Assertions.assertEquals( "test text", image.getResolvedText() ); log.info( "accepted types : {}", DocImage.getAcceptedImageTypes() ); } diff --git a/fj-doc-freemarker/src/main/resources/fj_doc_freemarker_config/template/macro/html_element.ftl b/fj-doc-freemarker/src/main/resources/fj_doc_freemarker_config/template/macro/html_element.ftl index 4b4fa13a3..49eb49d82 100644 --- a/fj-doc-freemarker/src/main/resources/fj_doc_freemarker_config/template/macro/html_element.ftl +++ b/fj-doc-freemarker/src/main/resources/fj_doc_freemarker_config/template/macro/html_element.ftl @@ -52,17 +52,21 @@ <#macro handleImage docImage> - <#if (docImage.scaling)??> - <#assign imageScaling="height='${docImage.scaling}%' width='${docImage.scaling}%'"/> + <#if docImage.svg> + ${docImage.resolvedText} <#else> - <#assign imageScaling=""/> - - <#if (docImage.align)??> - <#if docImage.align = 2> - <#assign imageAlign="style='display: block; margin-left: auto; margin-right: auto;'"/> + <#if (docImage.scaling)??> + <#assign imageScaling="height='${docImage.scaling}%' width='${docImage.scaling}%'"/> + <#else> + <#assign imageScaling=""/> + + <#if (docImage.align)??> + <#if docImage.align = 2> + <#assign imageAlign="style='display: block; margin-left: auto; margin-right: auto;'"/> + - - ${imageAlign!''} <#if (docImage.alt)??> alt="${docImage.alt}" ${imageScaling} src="data:image/png;base64, ${docImage.resolvedBase64}" /> + ${imageAlign!''} <#if (docImage.alt)??> alt="${docImage.alt}" ${imageScaling} src="data:image/png;base64, ${docImage.resolvedBase64}" /> + <#macro handleList docList> diff --git a/fj-doc-freemarker/src/test/java/test/org/fugerit/java/doc/freemarker/coverage/TestFreemarkerCoverage.java b/fj-doc-freemarker/src/test/java/test/org/fugerit/java/doc/freemarker/coverage/TestFreemarkerCoverage.java index d64796c58..05a36d3fb 100644 --- a/fj-doc-freemarker/src/test/java/test/org/fugerit/java/doc/freemarker/coverage/TestFreemarkerCoverage.java +++ b/fj-doc-freemarker/src/test/java/test/org/fugerit/java/doc/freemarker/coverage/TestFreemarkerCoverage.java @@ -81,6 +81,21 @@ void testAsciidoc() { Assertions.assertTrue( outputFile.exists() ); } + @Test + void testSample() { + String docId = "default_doc_sample"; + DocTypeHandler handler = FreeMarkerHtmlTypeHandler.HANDLER_UTF8; + String type = DocConfig.TYPE_HTML; + File outputFile = new File( "target/sample."+type ); + SafeFunction.apply( () -> { + try ( InputStreamReader reader = new InputStreamReader( ClassHelper.loadFromDefaultClassLoader( "coverage/xml/"+docId+".xml" ) ); + FileOutputStream fos = new FileOutputStream( outputFile ) ) { + handler.handle( DocInput.newInput( handler.getType() , reader ) , DocOutput.newOutput( fos ) ); + } + } ); + Assertions.assertTrue( outputFile.exists() ); + } + } @AllArgsConstructor diff --git a/fj-doc-freemarker/src/test/resources/coverage/xml/default_doc_sample.xml b/fj-doc-freemarker/src/test/resources/coverage/xml/default_doc_sample.xml new file mode 100644 index 000000000..aeec0339d --- /dev/null +++ b/fj-doc-freemarker/src/test/resources/coverage/xml/default_doc_sample.xml @@ -0,0 +1,88 @@ + + + + + + 10;10;10;30 + excel-table=print + + Basic example + fj doc venus sample source xml + fugerit79 + en + + true + /css/test.css + + excel-table + + header test + + + test + ${r"${currentPage}"} / ${r"${pageCount}"} + test + + + Test + + + + main title h1 + Test times roman + Courier + Symbol + Symbol + Test default font + Test logo SVG +
+ + + + Name + Surname + Title + + + + + + + + + + + + + + + + +
+ +
  • test 1
  • +
    + +
  • test 2
  • +
    + +
  • test 3
  • +
    + +
  • test 4
  • +
    + +
  • test 5
  • +
    + +
  • test 6
  • +
    + +
  • test 7
  • +
    + + +
    \ No newline at end of file diff --git a/fj-doc-freemarker/src/test/resources/image/logo.svg b/fj-doc-freemarker/src/test/resources/image/logo.svg new file mode 100644 index 000000000..5cf293c59 --- /dev/null +++ b/fj-doc-freemarker/src/test/resources/image/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file