Compare commits

...

7 Commits

Author SHA1 Message Date
Thomas BERNARD
47bd87fba9
Merge 84c778aa6c497ff1403ac2d65d1a4c965617ceb5 into de9e3edf5cd13c8baada353a655bfe78956fc71e 2025-04-15 11:21:42 +01:00
stirlingbot[bot]
de9e3edf5c
🌐 Sync Translations + Update README Progress Table (#3352)
### Description of Changes

This Pull Request was automatically generated to synchronize updates to
translation files and documentation. Below are the details of the
changes made:

#### **1. Synchronization of Translation Files**
- Updated translation files (`messages_*.properties`) to reflect changes
in the reference file `messages_en_GB.properties`.
- Ensured consistency and synchronization across all supported language
files.
- Highlighted any missing or incomplete translations.

#### **2. Update README.md**
- Generated the translation progress table in `README.md`.
- Added a summary of the current translation status for all supported
languages.
- Included up-to-date statistics on translation coverage.

#### **Why these changes are necessary**
- Keeps translation files aligned with the latest reference updates.
- Ensures the documentation reflects the current translation progress.

---

Auto-generated by [create-pull-request][1].

[1]: https://github.com/peter-evans/create-pull-request

Co-authored-by: stirlingbot[bot] <195170888+stirlingbot[bot]@users.noreply.github.com>
2025-04-15 10:45:00 +01:00
stirlingbot[bot]
1e0e942d93
Update 3rd Party Licenses (#3354)
Auto-generated by StirlingBot

Signed-off-by: stirlingbot[bot] <1113334+stirlingbot[bot]@users.noreply.github.com>
Co-authored-by: stirlingbot[bot] <195170888+stirlingbot[bot]@users.noreply.github.com>
2025-04-15 10:44:42 +01:00
Reece Browne
6da84338dc
Bug/498/signature slow firefox mobile (#3322)
# Description of Changes

Please provide a summary of the changes, including:

- What was changed
- Why the change was made
- Any challenges encountered

Closes #(498)

---

## Checklist

### General

- [ ] I have read the [Contribution
Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md)
- [ ] I have read the [Stirling-PDF Developer
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md)
(if applicable)
- [ ] I have read the [How to add new languages to
Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md)
(if applicable)
- [ ] I have performed a self-review of my own code
- [ ] My changes generate no new warnings

### Documentation

- [ ] I have updated relevant docs on [Stirling-PDF's doc
repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/)
(if functionality has heavily changed)
- [ ] I have read the section [Add New Translation
Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md#add-new-translation-tags)
(for new translation tags only)

### UI Changes (if applicable)

- [ ] Screenshots or videos demonstrating the UI changes are attached
(e.g., as comments or direct attachments in the PR)

### Testing (if applicable)

- [ ] I have tested my changes locally. Refer to the [Testing
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#6-testing)
for more details.

---------

Co-authored-by: Reece Browne <reece@stirling.pdf>
2025-04-15 10:44:21 +01:00
dependabot[bot]
1c27944329
Bump io.micrometer:micrometer-core from 1.14.5 to 1.14.6 (#3353)
Bumps
[io.micrometer:micrometer-core](https://github.com/micrometer-metrics/micrometer)
from 1.14.5 to 1.14.6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/micrometer-metrics/micrometer/releases">io.micrometer:micrometer-core's
releases</a>.</em></p>
<blockquote>
<h2>1.14.6</h2>
<h2>🐞 Bug Fixes</h2>
<ul>
<li>Gauge double registration warning for Kafka metrics <a
href="https://redirect.github.com/micrometer-metrics/micrometer/issues/5757">#5757</a></li>
<li>Log warning about &quot;function&quot; meter re-registration <a
href="https://redirect.github.com/micrometer-metrics/micrometer/pull/6070">#6070</a></li>
</ul>
<h2>❤️ Contributors</h2>
<p>Thank you to all the contributors who worked on this release:</p>
<p><a href="https://github.com/izeye"><code>@​izeye</code></a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="c3f3a80926"><code>c3f3a80</code></a>
Merge branch '1.13.x' into 1.14.x</li>
<li><a
href="fa523b1549"><code>fa523b1</code></a>
Bump io.micrometer:context-propagation from 1.1.2 to 1.1.3 (<a
href="https://redirect.github.com/micrometer-metrics/micrometer/issues/6115">#6115</a>)</li>
<li><a
href="d5f3d348ef"><code>d5f3d34</code></a>
Bump org.junit:junit-bom from 5.12.1 to 5.12.2 (<a
href="https://redirect.github.com/micrometer-metrics/micrometer/issues/6111">#6111</a>)</li>
<li><a
href="9ebcde1932"><code>9ebcde1</code></a>
Bump com.netflix.spectator:spectator-reg-atlas from 1.8.9 to 1.8.10 (<a
href="https://redirect.github.com/micrometer-metrics/micrometer/issues/6112">#6112</a>)</li>
<li><a
href="0ae9b47ecc"><code>0ae9b47</code></a>
Bump org.junit:junit-bom from 5.12.1 to 5.12.2 (<a
href="https://redirect.github.com/micrometer-metrics/micrometer/issues/6107">#6107</a>)</li>
<li><a
href="d0e70fc69d"><code>d0e70fc</code></a>
Merge branch '1.13.x' into 1.14.x</li>
<li><a
href="3b2270c885"><code>3b2270c</code></a>
Bump uk.org.webcompere:system-stubs-jupiter from 2.1.7 to 2.1.8 (<a
href="https://redirect.github.com/micrometer-metrics/micrometer/issues/6096">#6096</a>)</li>
<li><a
href="f62f2eeea6"><code>f62f2ee</code></a>
Bump uk.org.webcompere:system-stubs-jupiter from 2.1.7 to 2.1.8 (<a
href="https://redirect.github.com/micrometer-metrics/micrometer/issues/6094">#6094</a>)</li>
<li><a
href="53b9a3511a"><code>53b9a35</code></a>
Replace deprecated Project.task() (<a
href="https://redirect.github.com/micrometer-metrics/micrometer/issues/6092">#6092</a>)</li>
<li><a
href="0ebdd7d5bb"><code>0ebdd7d</code></a>
Bump com.netflix.spectator:spectator-reg-atlas from 1.8.8 to 1.8.9 (<a
href="https://redirect.github.com/micrometer-metrics/micrometer/issues/6091">#6091</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/micrometer-metrics/micrometer/compare/v1.14.5...v1.14.6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=io.micrometer:micrometer-core&package-manager=gradle&previous-version=1.14.5&new-version=1.14.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-15 10:34:29 +01:00
Thomas BERNARD
84c778aa6c
Update src/main/resources/messages_fr_FR.properties
Co-authored-by: Dylan Broussard <contact@deraw.dev>
2025-02-20 08:58:37 +01:00
Thomas Bernard
6ec8aea201
Fix French translation.
redact (black out) => Caviarder/Caviardage

thanks @ralmn
2025-02-19 16:11:15 +01:00
6 changed files with 45 additions and 43 deletions

View File

@ -134,7 +134,7 @@ Stirling-PDF currently supports 39 languages!
| Hungarian (Magyar) (hu_HU) | ![89%](https://geps.dev/progress/89) |
| Indonesian (Bahasa Indonesia) (id_ID) | ![81%](https://geps.dev/progress/81) |
| Irish (Gaeilge) (ga_IE) | ![92%](https://geps.dev/progress/92) |
| Italian (Italiano) (it_IT) | ![98%](https://geps.dev/progress/98) |
| Italian (Italiano) (it_IT) | ![99%](https://geps.dev/progress/99) |
| Japanese (日本語) (ja_JP) | ![89%](https://geps.dev/progress/89) |
| Korean (한국어) (ko_KR) | ![92%](https://geps.dev/progress/92) |
| Norwegian (Norsk) (no_NB) | ![86%](https://geps.dev/progress/86) |

View File

@ -516,7 +516,7 @@ dependencies {
implementation "org.bouncycastle:bcprov-jdk18on:$bouncycastleVersion"
implementation "org.bouncycastle:bcpkix-jdk18on:$bouncycastleVersion"
implementation "org.springframework.boot:spring-boot-starter-actuator:$springBootVersion"
implementation "io.micrometer:micrometer-core:1.14.5"
implementation "io.micrometer:micrometer-core:1.14.6"
implementation group: "com.google.zxing", name: "core", version: "3.5.3"
// https://mvnrepository.com/artifact/org.commonmark/commonmark
implementation "org.commonmark:commonmark:0.24.0"

View File

@ -515,13 +515,13 @@ home.showJS.title=Afficher le JavaScript
home.showJS.desc=Recherche et affiche tout JavaScript injecté dans un PDF.
showJS.tags=JS
home.autoRedact.title=Censure automatique
home.autoRedact.desc=Censurer automatiquement les informations sensibles d'un PDF.
autoRedact.tags=caviarder,rédiger,censurer,redact,auto
home.autoRedact.title=Caviardage automatique
home.autoRedact.desc=Caviardez automatiquement les informations sensibles d'un PDF.
autoRedact.tags=caviarder,redact,auto
home.redact.title=Censure manuelle
home.redact.desc=Censurer un PDF en fonction de texte sélectionné, formes dessinées et/ou des pages sélectionnées.
redact.tags=Redact,Hide,black out,black,marker,hidden,manual,caviarder,rédiger,censurer
home.redact.title=Caviardage manuel
home.redact.desc=Caviarder un PDF en fonction de texte sélectionné, formes dessinées et/ou des pages sélectionnées.
redact.tags=Caviarder,Redact,Hide,black out,black,marker,hidden,manual
home.tableExtraxt.title=PDF en CSV
home.tableExtraxt.desc=Extrait les tableaux d'un PDF et les transforme en CSV.
@ -621,31 +621,31 @@ autoRedact.convertPDFToImageLabel=Convertir un PDF en PDF-Image (utilisé pour s
autoRedact.submitButton=Caviarder
#redact
redact.title=Rédaction manuelle
redact.header=Rédaction manuelle
redact.submit=Rédiger
redact.textBasedRedaction=Rédaction en fonction de texte
redact.pageBasedRedaction=Rédaction en fonction de pages
redact.title=Caviardage manuel
redact.header=Caviardage manuel
redact.submit=Caviarder
redact.textBasedRedaction=Caviarder du texte
redact.pageBasedRedaction=Caviarder des pages
redact.convertPDFToImageLabel=Convertir en PDF-Image (pour supprimer le texte derrière le rectangle)
redact.pageRedactionNumbers.title=Pages
redact.pageRedactionNumbers.placeholder=(ex: 1,2,8 ou 4,7,12-16 ou 2n-1)
redact.redactionColor.title=Couleur
redact.export=Exporter
redact.upload=Téléverser
redact.boxRedaction=Dessiner le rectangle à rédiger
redact.boxRedaction=Tracer le rectangle à caviarder
redact.zoom=Zoom
redact.zoomIn=Zoom avant
redact.zoomOut=Zoom arrière
redact.nextPage=Page suivante
redact.previousPage=Page précédente
redact.toggleSidebar=Toggle Sidebar
redact.toggleSidebar=Montrer la barre latérale
redact.showThumbnails=Afficher les miniatures
redact.showDocumentOutline=Montrer les contours du document (double-click pour agrandir/réduire tous les éléments)
redact.showAttatchments=Montrer les éléments attachés
redact.showLayers=Montrer les calques (double-click pour réinitialiser tous les calques à l'état par défaut)
redact.colourPicker=Sélection de couleur
redact.findCurrentOutlineItem=Trouver l'élément de contour courrant
redact.applyChanges=Apply Changes
redact.applyChanges=Appliquer les changements
#showJS
showJS.title=Afficher le JavaScript

View File

@ -553,7 +553,7 @@
{
"moduleName": "io.micrometer:micrometer-core",
"moduleUrl": "https://github.com/micrometer-metrics/micrometer",
"moduleVersion": "1.14.5",
"moduleVersion": "1.14.6",
"moduleLicense": "The Apache Software License, Version 2.0",
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
},

View File

@ -26,7 +26,6 @@ window.addEventListener("keydown", (event) => {
function undoDraw() {
const data = signaturePad.toData();
if (data && data.length > 0) {
const removed = data.pop();
undoData.push(removed);
@ -35,7 +34,6 @@ function undoDraw() {
}
function redoDraw() {
if (undoData.length > 0) {
const data = signaturePad.toData();
data.push(undoData.pop());
@ -52,24 +50,18 @@ function addDraggableFromPad() {
}
function getCroppedCanvasDataUrl(canvas) {
let originalCtx = canvas.getContext('2d');
let originalCtx = canvas.getContext('2d', { willReadFrequently: true });
let originalWidth = canvas.width;
let originalHeight = canvas.height;
let imageData = originalCtx.getImageData(0, 0, originalWidth, originalHeight);
let minX = originalWidth + 1,
maxX = -1,
minY = originalHeight + 1,
maxY = -1,
x = 0,
y = 0,
currentPixelColorValueIndex;
let minX = originalWidth + 1, maxX = -1, minY = originalHeight + 1, maxY = -1;
for (y = 0; y < originalHeight; y++) {
for (x = 0; x < originalWidth; x++) {
currentPixelColorValueIndex = (y * originalWidth + x) * 4;
let currentPixelAlphaValue = imageData.data[currentPixelColorValueIndex + 3];
if (currentPixelAlphaValue > 0) {
for (let y = 0; y < originalHeight; y++) {
for (let x = 0; x < originalWidth; x++) {
let idx = (y * originalWidth + x) * 4;
let alpha = imageData.data[idx + 3];
if (alpha > 0) {
if (minX > x) minX = x;
if (maxX < x) maxX = x;
if (minY > y) minY = y;
@ -81,14 +73,14 @@ function getCroppedCanvasDataUrl(canvas) {
let croppedWidth = maxX - minX;
let croppedHeight = maxY - minY;
if (croppedWidth < 0 || croppedHeight < 0) return null;
let cuttedImageData = originalCtx.getImageData(minX, minY, croppedWidth, croppedHeight);
let cutImageData = originalCtx.getImageData(minX, minY, croppedWidth, croppedHeight);
let croppedCanvas = document.createElement('canvas'),
croppedCtx = croppedCanvas.getContext('2d');
let croppedCanvas = document.createElement('canvas');
let croppedCtx = croppedCanvas.getContext('2d');
croppedCanvas.width = croppedWidth;
croppedCanvas.height = croppedHeight;
croppedCtx.putImageData(cuttedImageData, 0, 0);
croppedCtx.putImageData(cutImageData, 0, 0);
return croppedCanvas.toDataURL();
}
@ -114,10 +106,20 @@ function resizeCanvas() {
signaturePad.clear();
}
new IntersectionObserver((entries, observer) => {
const debounce = (fn, delay = 100) => {
let timer;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => fn(...args), delay);
};
};
const debouncedResize = debounce(resizeCanvas, 200);
new IntersectionObserver((entries) => {
if (entries.some((entry) => entry.intersectionRatio > 0)) {
resizeCanvas();
debouncedResize();
}
}).observe(signaturePadCanvas);
new ResizeObserver(resizeCanvas).observe(signaturePadCanvas);
new ResizeObserver(debouncedResize).observe(signaturePadCanvas);

View File

@ -43,13 +43,13 @@
</div>
<script type="module" th:src="@{'/pdfjs-legacy/pdf.mjs'}"></script>
<div class="tab-group show-on-file-selected">
<div class="tab-container" th:title="#{sign.upload}" th:data-title="#{sign.upload}">
<div class="tab-container"th:data-title="#{sign.upload}">
<div
th:replace="~{fragments/common :: fileSelector(name='image-upload', disableMultipleFiles=false, multipleInputsForSingleRequest=true, accept='image/*', inputText=#{imgPrompt})}">
</div>
</div>
<div class="tab-container drawing-pad-container" th:title="#{sign.draw}" th:data-title="#{sign.draw}">
<div class="tab-container drawing-pad-container" th:data-title="#{sign.draw}">
<canvas id="drawing-pad-canvas"></canvas>
<br>
<button id="clear-signature" class="btn btn-outline-danger mt-2" onclick="signaturePad.clear()"
@ -62,7 +62,7 @@
onclick="redoDraw()"></button>
</div>
<div class="tab-container" th:title="#{sign.saved}" th:data-title="#{sign.saved}">
<div class="tab-container" th:data-title="#{sign.saved}">
<div class="saved-signatures-section" th:if="${not #lists.isEmpty(signatures)}">
<!-- Preview Modal -->
@ -134,7 +134,7 @@
</div>
</div>
<div class="tab-container" th:title="#{sign.text}" th:data-title="#{sign.text}">
<div class="tab-container" th:data-title="#{sign.text}">
<label class="form-check-label" for="sigText" th:text="#{text}"></label>
<textarea class="form-control" id="sigText" name="sigText" rows="3"></textarea>
<label th:text="#{font}"></label>