custom font fix
This commit is contained in:
parent
83936bf4c8
commit
4e2911f648
2 changed files with 90 additions and 14 deletions
|
@ -9,6 +9,7 @@ import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
@ -140,27 +141,96 @@ public class GeneralWebController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ResourceLoader resourceLoader;
|
private ResourceLoader resourceLoader;
|
||||||
|
|
||||||
private List<String> getFontNames() {
|
private List<FontResource> getFontNames() {
|
||||||
|
List<FontResource> fontNames = new ArrayList<>();
|
||||||
|
|
||||||
|
// Extract font names from classpath
|
||||||
|
fontNames.addAll(getFontNamesFromLocation("classpath:static/fonts/*.woff2"));
|
||||||
|
|
||||||
|
// Extract font names from external directory
|
||||||
|
fontNames.addAll(getFontNamesFromLocation("file:customFiles/static/fonts/*"));
|
||||||
|
|
||||||
|
return fontNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<FontResource> getFontNamesFromLocation(String locationPattern) {
|
||||||
try {
|
try {
|
||||||
Resource[] resources = ResourcePatternUtils.getResourcePatternResolver(resourceLoader)
|
Resource[] resources = ResourcePatternUtils.getResourcePatternResolver(resourceLoader)
|
||||||
.getResources("classpath:static/fonts/*.woff2");
|
.getResources(locationPattern);
|
||||||
|
|
||||||
return Arrays.stream(resources)
|
return Arrays.stream(resources)
|
||||||
.map(resource -> {
|
.map(resource -> {
|
||||||
try {
|
try {
|
||||||
String filename = resource.getFilename();
|
String filename = resource.getFilename();
|
||||||
return filename.substring(0, filename.length() - 6); // Remove .woff2 extension
|
if (filename != null) {
|
||||||
|
int lastDotIndex = filename.lastIndexOf('.');
|
||||||
|
if (lastDotIndex != -1) {
|
||||||
|
String name = filename.substring(0, lastDotIndex);
|
||||||
|
String extension = filename.substring(lastDotIndex + 1);
|
||||||
|
return new FontResource(name, extension);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException("Error processing filename", e);
|
throw new RuntimeException("Error processing filename", e);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.filter(Objects::nonNull)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException("Failed to read font directory", e);
|
throw new RuntimeException("Failed to read font directory from " + locationPattern, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getFormatFromExtension(String extension) {
|
||||||
|
switch (extension) {
|
||||||
|
case "ttf": return "truetype";
|
||||||
|
case "woff": return "woff";
|
||||||
|
case "woff2": return "woff2";
|
||||||
|
case "eot": return "embedded-opentype";
|
||||||
|
case "svg": return "svg";
|
||||||
|
default: return ""; // or throw an exception if an unexpected extension is encountered
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class FontResource {
|
||||||
|
private String name;
|
||||||
|
private String extension;
|
||||||
|
private String type;
|
||||||
|
public FontResource(String name, String extension) {
|
||||||
|
this.name = name;
|
||||||
|
this.extension = extension;
|
||||||
|
this.type = getFormatFromExtension(extension);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getExtension() {
|
||||||
|
return extension;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExtension(String extension) {
|
||||||
|
this.extension = extension;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@GetMapping("/crop")
|
@GetMapping("/crop")
|
||||||
@Hidden
|
@Hidden
|
||||||
|
|
|
@ -10,15 +10,16 @@
|
||||||
<th:block th:each="font : ${fonts}">
|
<th:block th:each="font : ${fonts}">
|
||||||
<style th:inline="text">
|
<style th:inline="text">
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: "[[${font}]]";
|
font-family: "[[${font.name}]]";
|
||||||
src: url('fonts/[[${font}]].woff2') format('woff2');
|
src: url('fonts/[[${font.name}]].[[${font.extension}]]') format('[[${font.type}]]');
|
||||||
}
|
}
|
||||||
|
|
||||||
#font-select option[value="[[${font}]]"] {
|
#font-select option[value="[[${font.name}]]"] {
|
||||||
font-family: "[[${font}]]", cursive;
|
font-family: "[[${font.name}]]", cursive;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</th:block>
|
</th:block>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
select#font-select, select#font-select option {
|
select#font-select, select#font-select option {
|
||||||
height: 60px; /* Adjust as needed */
|
height: 60px; /* Adjust as needed */
|
||||||
|
@ -181,9 +182,13 @@ select#font-select, select#font-select option {
|
||||||
<input type="text" class="form-control" id="sigText" name="sigText">
|
<input type="text" class="form-control" id="sigText" name="sigText">
|
||||||
<label th:text="#{font}"></label>
|
<label th:text="#{font}"></label>
|
||||||
<select class="form-control" name="font" id="font-select">
|
<select class="form-control" name="font" id="font-select">
|
||||||
<option th:each="font : ${fonts}" th:value="${font}" th:text="${font}" th:class="${font.toLowerCase()+'-font'}"></option>
|
<option th:each="font : ${fonts}"
|
||||||
|
th:value="${font.name}"
|
||||||
|
th:text="${font.name}"
|
||||||
|
th:class="${font.name.toLowerCase()+'-font'}">
|
||||||
|
</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<div class="margin-auto-parent">
|
<div class="margin-auto-parent">
|
||||||
<button id="save-text-signature" class="btn btn-outline-success mt-2 margin-center" onclick="addDraggableFromText()" th:text="#{sign.add}"></button>
|
<button id="save-text-signature" class="btn btn-outline-success mt-2 margin-center" onclick="addDraggableFromText()" th:text="#{sign.add}"></button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -231,14 +236,15 @@ select#font-select, select#font-select option {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
<th:block th:each="font : ${fonts}">
|
<th:block th:each="font : ${fonts}">
|
||||||
<style th:inline="text">
|
<style th:inline="text">
|
||||||
#font-select option[value="/*[[${font}]]*/"] {
|
#font-select option[value='/*[[${font.name}]]*/'] {
|
||||||
font-family: '/*[[${font}]]*/', cursive;
|
font-family: '/*[[${font.name}]]*/', cursive;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</th:block>
|
</th:block>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue