diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index 3e54a560..c14847c8 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -4,18 +4,19 @@ Every asset PdfCraft includes, bundles or uses to build its published material, with its author, source and licence. The policy is in [AGENTS.md](AGENTS.md) §1. The machine-readable list, with SHA-256 hashes, is [ATTRIBUTION.toml](ATTRIBUTION.toml). Licence texts are kept beside the assets and summarised in [NOTICE](NOTICE). -## In this repository (258) +## In this repository (259) | Asset | Title | Author | Licence | Source | Used for | |---|---|---|---|---|---| | `crates/ui-egui/src/i18n/zh-hans.tsv` | Simplified Chinese interface translation catalog | PdfCraft contributors | MIT OR Apache-2.0 | Contributor-original: clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources | Simplified Chinese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs | | `crates/ui-egui/src/i18n/zh-hant.tsv` | Traditional Chinese (Taiwan) interface translation catalog | PdfCraft contributors | MIT OR Apache-2.0 | Contributor-original: clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources | Traditional Chinese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs | | `crates/ui-egui/src/i18n/cs.tsv` | Czech interface translation catalog | PdfCraft contributors | MIT OR Apache-2.0 | Contributor-original: clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources | Czech UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs | -| `crates/ui-egui/src/i18n/pt-br.tsv` | Brazilian Portuguese interface translation catalog | PdfCraft contributors | MIT OR Apache-2.0 | Contributor-original: clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources | Brazilian Portuguese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs | +| `crates/ui-egui/src/i18n/pt-br.tsv` | Brazilian Portuguese interface translation catalog | André Cardoso (andrecards), PdfCraft contributors | MIT OR Apache-2.0 | Clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources: the ~1,826-entry gist posted in issue #288 (https://gist.github.com/andrecards/ac388c25fba17312ce83207f8b7b467e), completed and reviewed by PdfCraft contributors | Brazilian Portuguese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs | | `crates/ui-egui/src/i18n/es.tsv` | Spanish interface translation catalog | PdfCraft contributors | MIT OR Apache-2.0 | Contributor-original: clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources | Spanish UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs | | `crates/ui-egui/src/i18n/fr.tsv` | French interface translation catalog | PdfCraft contributors | MIT OR Apache-2.0 | Contributor-original: clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources | French UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs | | `crates/ui-egui/src/i18n/de.tsv` | German interface translation catalog | PdfCraft contributors | MIT OR Apache-2.0 | Contributor-original: clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources | German UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs | | `crates/ui-egui/src/i18n/te.tsv` | Telugu interface translation catalog | PdfCraft contributors | MIT OR Apache-2.0 | Contributor-original: clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources | Telugu UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs | +| `crates/ui-egui/src/i18n/it.tsv` | Italian interface translation catalog | PdfCraft contributors | MIT OR Apache-2.0 | Contributor-original: clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources | Italian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs | | `crates/ui-egui/src/i18n/ru.tsv` | Russian interface translation catalog | PdfCraft contributors | MIT OR Apache-2.0 | Contributor-original: clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources | Russian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs | | `crates/ui-egui/src/i18n/hu.tsv` | Hungarian interface translation catalog | PdfCraft contributors | MIT OR Apache-2.0 | Contributor-original: clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources | Hungarian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs | | `crates/ui-egui/src/i18n/bg.tsv` | Bulgarian interface translation catalog | PdfCraft contributors | MIT OR Apache-2.0 | Contributor-original: clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources | Bulgarian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs | diff --git a/ATTRIBUTION.toml b/ATTRIBUTION.toml index f8b54487..3ed95af6 100644 --- a/ATTRIBUTION.toml +++ b/ATTRIBUTION.toml @@ -46,13 +46,13 @@ sha256 = "e336657e76e498264691f4c55af84ae69af803bae2564e26f87a2bbad31fdf8e" [[asset]] path = "crates/ui-egui/src/i18n/pt-br.tsv" title = "Brazilian Portuguese interface translation catalog" -author = "PdfCraft contributors" -source = "Contributor-original: clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources" +author = "André Cardoso (andrecards), PdfCraft contributors" +source = "Clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources: the ~1,826-entry gist posted in issue #288 (https://gist.github.com/andrecards/ac388c25fba17312ce83207f8b7b467e), completed and reviewed by PdfCraft contributors" licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Brazilian Portuguese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "ca56752387255e66e027eeb6efcac0434a6467997f63e6cfba629a27dd316c9a" +sha256 = "972ca1974635243d199fc6b3d2c77ab78ff5553674231f324bdbff9575035fd7" [[asset]] path = "crates/ui-egui/src/i18n/es.tsv" @@ -98,6 +98,17 @@ kind = "translation" usage = "Telugu UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" sha256 = "1d891722c4bb69968eb3fca2c479ba9cf0d68fd6b2f0f3a5975f154246bdde0e" +[[asset]] +path = "crates/ui-egui/src/i18n/it.tsv" +title = "Italian interface translation catalog" +author = "PdfCraft contributors" +source = "Contributor-original: clean-room translations of PdfCraft's English UI labels, no proprietary localisation resources" +licence = "MIT OR Apache-2.0" +licence_file = "LICENSE-MIT" +kind = "translation" +usage = "Italian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" +sha256 = "f0cdcfafe37d2be636ede1cef251fc5028ad233e020be8614727a676cc93283d" + [[asset]] path = "crates/ui-egui/src/i18n/ru.tsv" title = "Russian interface translation catalog" diff --git a/Cargo.lock b/Cargo.lock index 42e7df88..98406f96 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3543,7 +3543,7 @@ dependencies = [ [[package]] name = "pdfcraft" -version = "0.4.0" +version = "0.5.0" dependencies = [ "eframe", "egui", @@ -3560,7 +3560,7 @@ dependencies = [ [[package]] name = "pdfcraft-a11y" -version = "0.4.0" +version = "0.5.0" dependencies = [ "pdfcraft-content", "pdfcraft-cos", @@ -3570,7 +3570,7 @@ dependencies = [ [[package]] name = "pdfcraft-annot" -version = "0.4.0" +version = "0.5.0" dependencies = [ "hayro-syntax", "pdfcraft-cos", @@ -3581,7 +3581,7 @@ dependencies = [ [[package]] name = "pdfcraft-automation" -version = "0.4.0" +version = "0.5.0" dependencies = [ "base64 0.22.1", "image", @@ -3598,7 +3598,7 @@ dependencies = [ [[package]] name = "pdfcraft-cli" -version = "0.4.0" +version = "0.5.0" dependencies = [ "base64 0.22.1", "pdfcraft-automation", @@ -3612,18 +3612,18 @@ dependencies = [ [[package]] name = "pdfcraft-compare" -version = "0.4.0" +version = "0.5.0" [[package]] name = "pdfcraft-content" -version = "0.4.0" +version = "0.5.0" dependencies = [ "pdfcraft-cos", ] [[package]] name = "pdfcraft-cos" -version = "0.4.0" +version = "0.5.0" dependencies = [ "hayro-syntax", "pdfcraft-crypt", @@ -3635,7 +3635,7 @@ dependencies = [ [[package]] name = "pdfcraft-create" -version = "0.4.0" +version = "0.5.0" dependencies = [ "hayro-syntax", "image", @@ -3649,7 +3649,7 @@ dependencies = [ [[package]] name = "pdfcraft-crypt" -version = "0.4.0" +version = "0.5.0" dependencies = [ "aes", "md-5", @@ -3661,7 +3661,7 @@ dependencies = [ [[package]] name = "pdfcraft-edit" -version = "0.4.0" +version = "0.5.0" dependencies = [ "hayro-syntax", "pdfcraft-annot", @@ -3675,7 +3675,7 @@ dependencies = [ [[package]] name = "pdfcraft-engine" -version = "0.4.0" +version = "0.5.0" dependencies = [ "chrono", "icu_properties", @@ -3710,14 +3710,14 @@ dependencies = [ [[package]] name = "pdfcraft-export" -version = "0.4.0" +version = "0.5.0" dependencies = [ "flate2", ] [[package]] name = "pdfcraft-filters" -version = "0.4.0" +version = "0.5.0" dependencies = [ "flate2", "proptest", @@ -3727,7 +3727,7 @@ dependencies = [ [[package]] name = "pdfcraft-fonts" -version = "0.4.0" +version = "0.5.0" dependencies = [ "harfrust", "pdfcraft-cos", @@ -3736,7 +3736,7 @@ dependencies = [ [[package]] name = "pdfcraft-forms" -version = "0.4.0" +version = "0.5.0" dependencies = [ "hayro-syntax", "pdfcraft-content", @@ -3748,18 +3748,18 @@ dependencies = [ [[package]] name = "pdfcraft-geom" -version = "0.4.0" +version = "0.5.0" [[package]] name = "pdfcraft-js" -version = "0.4.0" +version = "0.5.0" dependencies = [ "boa_engine", ] [[package]] name = "pdfcraft-measure" -version = "0.4.0" +version = "0.5.0" dependencies = [ "pdfcraft-annot", "pdfcraft-content", @@ -3771,14 +3771,14 @@ dependencies = [ [[package]] name = "pdfcraft-model" -version = "0.4.0" +version = "0.5.0" dependencies = [ "pdfcraft-cos", ] [[package]] name = "pdfcraft-ocr" -version = "0.4.0" +version = "0.5.0" dependencies = [ "ocrs", "pdfcraft-fonts", @@ -3788,7 +3788,7 @@ dependencies = [ [[package]] name = "pdfcraft-optimize" -version = "0.4.0" +version = "0.5.0" dependencies = [ "image", "pdfcraft-annot", @@ -3801,7 +3801,7 @@ dependencies = [ [[package]] name = "pdfcraft-organize" -version = "0.4.0" +version = "0.5.0" dependencies = [ "hayro-syntax", "pdfcraft-content", @@ -3811,11 +3811,11 @@ dependencies = [ [[package]] name = "pdfcraft-platform" -version = "0.4.0" +version = "0.5.0" [[package]] name = "pdfcraft-preflight" -version = "0.4.0" +version = "0.5.0" dependencies = [ "pdfcraft-cos", "pdfcraft-model", @@ -3823,7 +3823,7 @@ dependencies = [ [[package]] name = "pdfcraft-print" -version = "0.4.0" +version = "0.5.0" dependencies = [ "pdfcraft-content", "pdfcraft-cos", @@ -3833,7 +3833,7 @@ dependencies = [ [[package]] name = "pdfcraft-redact" -version = "0.4.0" +version = "0.5.0" dependencies = [ "pdfcraft-annot", "pdfcraft-content", @@ -3847,7 +3847,7 @@ dependencies = [ [[package]] name = "pdfcraft-render" -version = "0.4.0" +version = "0.5.0" dependencies = [ "bytemuck", "flate2", @@ -3865,7 +3865,7 @@ dependencies = [ [[package]] name = "pdfcraft-sign" -version = "0.4.0" +version = "0.5.0" dependencies = [ "aes", "aws-lc-rs", @@ -3899,7 +3899,7 @@ dependencies = [ [[package]] name = "pdfcraft-ui-egui" -version = "0.4.0" +version = "0.5.0" dependencies = [ "arboard", "base64 0.22.1", @@ -3938,7 +3938,7 @@ dependencies = [ [[package]] name = "pdfcraft-web" -version = "0.4.0" +version = "0.5.0" dependencies = [ "eframe", "egui", @@ -3950,7 +3950,7 @@ dependencies = [ [[package]] name = "pdfcraft-xfa" -version = "0.4.0" +version = "0.5.0" dependencies = [ "base64 0.22.1", "image", @@ -3964,7 +3964,7 @@ dependencies = [ [[package]] name = "pdfcraft-xfdf" -version = "0.4.0" +version = "0.5.0" dependencies = [ "pdfcraft-annot", "pdfcraft-cos", diff --git a/Cargo.toml b/Cargo.toml index 6eb0f41b..75e4741c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ exclude = ["vendor"] default-members = ["crates/*", "apps/pdfcraft", "apps/pdfcraft-cli", "xtask"] [workspace.package] -version = "0.4.0" +version = "0.5.0" edition = "2024" license = "MIT OR Apache-2.0" rust-version = "1.90" @@ -13,36 +13,36 @@ repository = "https://github.com/storytold/pdfcraft" [workspace.dependencies] # internal -pdfcraft-geom = { path = "crates/geom", version = "0.4.0" } -pdfcraft-filters = { path = "crates/filters", version = "0.4.0" } -pdfcraft-cos = { path = "crates/cos", version = "0.4.0" } -pdfcraft-crypt = { path = "crates/crypt", version = "0.4.0" } -pdfcraft-organize = { path = "crates/organize", version = "0.4.0" } -pdfcraft-measure = { path = "crates/measure", version = "0.4.0" } -pdfcraft-annot = { path = "crates/annot", version = "0.4.0" } -pdfcraft-fonts = { path = "crates/fonts", version = "0.4.0" } -pdfcraft-model = { path = "crates/model", version = "0.4.0" } -pdfcraft-content = { path = "crates/content", version = "0.4.0" } -pdfcraft-redact = { path = "crates/redact", version = "0.4.0" } -pdfcraft-print = { path = "crates/print", version = "0.4.0" } -pdfcraft-xfdf = { path = "crates/xfdf", version = "0.4.0" } -pdfcraft-sign = { path = "crates/sign", version = "0.4.0" } -pdfcraft-optimize = { path = "crates/optimize", version = "0.4.0" } -pdfcraft-a11y = { path = "crates/a11y", version = "0.4.0" } -pdfcraft-ocr = { path = "crates/ocr", version = "0.4.0" } -pdfcraft-js = { path = "crates/js", version = "0.4.0" } -pdfcraft-compare = { path = "crates/compare", version = "0.4.0" } -pdfcraft-preflight = { path = "crates/preflight", version = "0.4.0" } -pdfcraft-export = { path = "crates/export", version = "0.4.0" } -pdfcraft-edit = { path = "crates/edit", version = "0.4.0" } -pdfcraft-create = { path = "crates/create", version = "0.4.0" } -pdfcraft-forms = { path = "crates/forms", version = "0.4.0" } -pdfcraft-xfa = { path = "crates/xfa", version = "0.4.0" } -pdfcraft-render = { path = "crates/render", version = "0.4.0" } -pdfcraft-engine = { path = "crates/engine", version = "0.4.0" } -pdfcraft-platform = { path = "crates/platform", version = "0.4.0" } -pdfcraft-ui-egui = { path = "crates/ui-egui", version = "0.4.0" } -pdfcraft-automation = { path = "crates/automation", version = "0.4.0", default-features = false } +pdfcraft-geom = { path = "crates/geom", version = "0.5.0" } +pdfcraft-filters = { path = "crates/filters", version = "0.5.0" } +pdfcraft-cos = { path = "crates/cos", version = "0.5.0" } +pdfcraft-crypt = { path = "crates/crypt", version = "0.5.0" } +pdfcraft-organize = { path = "crates/organize", version = "0.5.0" } +pdfcraft-measure = { path = "crates/measure", version = "0.5.0" } +pdfcraft-annot = { path = "crates/annot", version = "0.5.0" } +pdfcraft-fonts = { path = "crates/fonts", version = "0.5.0" } +pdfcraft-model = { path = "crates/model", version = "0.5.0" } +pdfcraft-content = { path = "crates/content", version = "0.5.0" } +pdfcraft-redact = { path = "crates/redact", version = "0.5.0" } +pdfcraft-print = { path = "crates/print", version = "0.5.0" } +pdfcraft-xfdf = { path = "crates/xfdf", version = "0.5.0" } +pdfcraft-sign = { path = "crates/sign", version = "0.5.0" } +pdfcraft-optimize = { path = "crates/optimize", version = "0.5.0" } +pdfcraft-a11y = { path = "crates/a11y", version = "0.5.0" } +pdfcraft-ocr = { path = "crates/ocr", version = "0.5.0" } +pdfcraft-js = { path = "crates/js", version = "0.5.0" } +pdfcraft-compare = { path = "crates/compare", version = "0.5.0" } +pdfcraft-preflight = { path = "crates/preflight", version = "0.5.0" } +pdfcraft-export = { path = "crates/export", version = "0.5.0" } +pdfcraft-edit = { path = "crates/edit", version = "0.5.0" } +pdfcraft-create = { path = "crates/create", version = "0.5.0" } +pdfcraft-forms = { path = "crates/forms", version = "0.5.0" } +pdfcraft-xfa = { path = "crates/xfa", version = "0.5.0" } +pdfcraft-render = { path = "crates/render", version = "0.5.0" } +pdfcraft-engine = { path = "crates/engine", version = "0.5.0" } +pdfcraft-platform = { path = "crates/platform", version = "0.5.0" } +pdfcraft-ui-egui = { path = "crates/ui-egui", version = "0.5.0" } +pdfcraft-automation = { path = "crates/automation", version = "0.5.0", default-features = false } # pdf hayro = "0.7.1" diff --git a/ROADMAP.md b/ROADMAP.md index fa63c935..796e2c0f 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -81,6 +81,7 @@ The gaps that matter most, in priority order. Agents: prefer these over adding P 5. **Pro workflows.** Signatures with timestamps and LTV (M9), OCR beyond Latin (M10), Office import/export (M10), preflight and PDF/A/X/UA (M11), XFA (M12). 6. **1.0 polish (M14).** Code-signed installers, localization (the catalog system is in place and French, German, Spanish, Japanese, Russian and both Chinese catalogs cover the UI; Czech and Brazilian Portuguese still cover menus only), keyboard-only operation, a full screen-reader audit. 6. **1.0 polish (M14).** Code-signed installers, localization (the catalog system is in place and French, Spanish, Japanese, Russian, Ukrainian and both Chinese catalogs cover the UI; Czech and Brazilian Portuguese still cover menus only), keyboard-only operation, a full screen-reader audit. +6. **1.0 polish (M14).** Code-signed installers, localization (the catalog system is in place and French, Spanish, Italian, Japanese, Russian and both Chinese catalogs cover the UI; Czech and Brazilian Portuguese still cover menus only), keyboard-only operation, a full screen-reader audit. Decided against for now (owner, 2026-10-05): self-installing updates and an update check at start. Help ▸ Check for updates is manual only. @@ -108,6 +109,7 @@ Hours are for a single agent (low–high). "Done" is the estimated fraction of t | M12 | Accessibility, compare, measure, search, XFA | 200–380 | 23% | 155–295 | Done: new `a11y` crate with the Accessibility Checker (all 32 rules, report, Fix/Skip/Explain, options dialog and results panel, agent tools). Done since: 2D distance, perimeter and area measurements with persistent viewport calibration, snapping, live information and CSV export. Missing: autotag, Tags/Order/Content panels, Reading Order tool, alt-text workflow, compare, geospatial/3D measurement, search index, XFA | | M13 | Automation (MCP, Action Wizard, CLI) + AI providers | 60–120 | 45% | 33–66 | Done: MCP resources (document info, text, page images); headless tool table (123 tools incl. signing, optimizing, initial view, links, stamps, data exchange, comment review, forms authoring and scripts, redaction, sanitize, print, add content), opt-in MCP server over stdio, CLI `run`/`tools` (closed stdout pipes exit cleanly), UI control channel with drag. Missing: Action Wizard, AI providers | | M14 | 1.0 polish: performance, localization, installers | 120–250 | 5% | 115–240 | Done: PhotoCraft's translation system (`i18n/`: TSV catalogs, `tl!`, command-id and plural entries, system-language detection, strict catalog tests); every dialog, panel and notice goes through `tl!`; Japanese, Traditional Chinese, Simplified Chinese, Russian, Bulgarian, German, Spanish, French, Hungarian and Ukrainian catalogs have ≈1,800–2,100 entries each; Simplified Chinese, French, German, Hungarian and Ukrainian coverage is checked against the UI source; Czech and Brazilian Portuguese for menus. French locales (`fr`, `fr_FR`, `fr_CA`) follow the French catalog; Ukrainian locales (`uk`, `uk_UA`) follow the Ukrainian one; its certificate and accessibility wording has a dictionary-checked follow-up. #307 (bounded large-PDF memory): share resource indexes and native parser metadata, inspect structure lazily, bound scan/full-save caches and raster storage, and reuse signature discovery safely. Three Linux trials retain full-save workflow RSS at 1.06 GiB (previously 3.69 GiB); rebased engine navigation uses 821 MiB (previously 997 MiB). With the RSS guard removed, the unmodified baseline was kernel OOM-killed in a 15 GiB container; rebased optimized inspection completed at 497.7 MiB in 1.78 s. Strict Clippy, 1,336 workspace tests and 30 WASM crate checks pass. The larger-host follow-up is closed. File-backed input, global memory budgets and Windows validation remain pending. Missing: more catalogs filled in, installers, performance budgets | +| M14 | 1.0 polish: performance, localization, installers | 120–250 | 5% | 115–240 | Done: PhotoCraft's translation system (`i18n/`: TSV catalogs, `tl!`, command-id and plural entries, system-language detection, strict catalog tests); every dialog, panel and notice goes through `tl!`; Japanese, Traditional Chinese, Simplified Chinese, Russian, Spanish, French and Italian catalogs have ≈1,800 entries each; Simplified Chinese and French coverage is checked against the UI source; Czech and Brazilian Portuguese for menus. French locales (`fr`, `fr_FR`, `fr_CA`) follow the French catalog; Italian locales (`it`, `it_IT`) the Italian one. Missing: more catalogs filled in, installers, performance budgets | | | **Total (original plan sizing)** | **2,085–3,840** | **≈ 35%** | **≈ 1,350–2,500 at the planned rate; ≈ 600–1,100 at the measured rate** | | **Overall progress: about 30–35% of the effort (51.0% of features shipped).** The viewer and the core are far ahead of the editing features, because the viewer was built first so progress could be seen; rendering itself is still borrowed from `hayro`. See [Honest assessment](#honest-assessment-2026-10-05). @@ -133,6 +135,7 @@ M0 → M1 → M2 → M3 → M4 must happen in order. After M4, M5–M12 can run - **2026-10-09 (M3, #171):** A browser startup `?file=` download opens in a background tab once the user has started working, so it cannot switch the active document or the next Save. Deliberate opens still activate their tab; Home, Combine files, workspace choices and another file's password prompt are preserved. Initial-view geometry is applied to the background document, and its script notices wait until its tab is selected. Synthetic shell tests cover the race, saving the local edit, tab switching, encrypted arrivals, errors and converted text. Milestone and overall effort estimates unchanged (about 30–35%). - **2026-10-09 (never-crash, #378):** On Windows the window is drawn on the GPU that drives the primary display, as on Linux: `EnumDisplayDevices` (through the safe `winsafe` crate) says which adapter shows each desktop display, and `pick_adapter` matches it to the wgpu adapters by PCI ids. Before, the low-power preference chose a Ryzen integrated GPU with no monitor on a desktop whose monitors hang off an NVIDIA card, and presenting across adapters took the AMD display driver down for two minutes. The log now names the GPU chosen. Synthetic tests for the Windows device-id parser and the primary-display rule; a live test on the running machine. Overall unchanged. +- **2026-10-09 (page preview resolution):** The page view draws whole pages at twice the screen density when that bitmap still fits, then filters it down, so type and fine lines keep more detail. Print preview, page thumbnails, alternate-text figures and the page behind a moving signature are rendered at the size they are shown instead of being stretched up from a small image. Milestone and effort estimates unchanged. - **2026-10-09 (M5, line endings):** Lines, connected lines and callouts draw all ten standard line-ending styles. `comment_add` accepts `endings`, and Comment properties can change them in one undo step. An unknown name is left undrawn, and a non-finite direction is rejected. Cloudy borders remain polygon-only, so `comment.line-endings` stays partial. Overall estimate unchanged (about 30–35%). - **2026-10-09 (M6, field rotation):** Regenerated form appearances honour `/MK /R` (0, 90, 180, 270). Filling or restyling a rotated field keeps the text, check mark and button caption turned, and Field Properties ▸ Position and `form_set_props` `rotation` set it, swapping width and height around the field's center when the axis changes. `form.appearance-regeneration` stays partial (Helvetica metrics are still approximate). Overall estimate unchanged (about 30–35%). - **2026-10-09 (M2, JPX sample normalization):** JPEG 2000 rescaling uses bounded integer arithmetic for supported 1–32-bit samples, including the 32-bit boundary that previously shifted past the integer width. Zero-sized rows are refused before scaling. Small contributor-original codestreams exercise decoding and rendering; endpoint and standard-depth regressions cover the same helper. Overall estimate unchanged (about 30–35%). diff --git a/contributors/contributors.json b/contributors/contributors.json index 0ff7a86c..dde9517d 100644 --- a/contributors/contributors.json +++ b/contributors/contributors.json @@ -2,62 +2,62 @@ "schema": 1, "repo": "storytold/pdfcraft", "branch": "main", - "head": "d3db99818f533a531dbcd469b2ac71ba35c0d3ec", - "head_date": "2026-10-07T20:03:57Z", - "commits": 252, + "head": "49c6e2ec5437a355da4e9dadd9cc2db3476b5cf8", + "head_date": "2026-10-10T00:56:13Z", + "commits": 493, "unattributed_commits": 0, "contributors": [ { "login": "echelon", "people_entry": true, "github_name": null, - "prs": 50, - "commits": 229, - "lines_added": 218049, - "lines_deleted": 10047, + "prs": 77, + "commits": 258, + "lines_added": 221771, + "lines_deleted": 11405, "binary_added": 81, "binary_deleted": 25, "first_commit": "2026-09-30T09:17:08Z", - "last_commit": "2026-10-07T20:03:57Z" + "last_commit": "2026-10-09T22:42:23Z" }, { "login": "storybored379", "people_entry": false, "github_name": null, - "prs": 8, - "commits": 8, - "lines_added": 350, - "lines_deleted": 33, + "prs": 10, + "commits": 10, + "lines_added": 1025, + "lines_deleted": 62, "binary_added": 0, "binary_deleted": 0, "first_commit": "2026-10-04T04:14:56Z", - "last_commit": "2026-10-05T20:36:08Z" + "last_commit": "2026-10-09T18:46:24Z" }, { "login": "justinjohn0306", "people_entry": false, "github_name": null, - "prs": 2, - "commits": 1, - "lines_added": 1059, - "lines_deleted": 92, + "prs": 3, + "commits": 2, + "lines_added": 2936, + "lines_deleted": 159, "binary_added": 1, "binary_deleted": 0, "first_commit": "2026-10-05T11:48:23Z", - "last_commit": "2026-10-05T11:48:23Z" + "last_commit": "2026-10-08T03:02:40Z" }, { "login": "midasdf", "people_entry": false, "github_name": null, - "prs": 1, - "commits": 1, - "lines_added": 174, - "lines_deleted": 16, + "prs": 8, + "commits": 8, + "lines_added": 1103, + "lines_deleted": 104, "binary_added": 0, "binary_deleted": 0, "first_commit": "2026-10-05T21:10:09Z", - "last_commit": "2026-10-05T21:10:09Z" + "last_commit": "2026-10-09T13:21:31Z" }, { "login": "bflatastic", @@ -71,6 +71,955 @@ "binary_deleted": 0, "first_commit": "2026-10-06T18:21:42Z", "last_commit": "2026-10-07T02:52:19Z" + }, + { + "login": "EthanSuquet", + "people_entry": false, + "github_name": null, + "prs": 2, + "commits": 2, + "lines_added": 167, + "lines_deleted": 32, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T01:12:27Z", + "last_commit": "2026-10-08T01:13:04Z" + }, + { + "login": "jcl-bit", + "people_entry": true, + "github_name": null, + "prs": 15, + "commits": 15, + "lines_added": 11099, + "lines_deleted": 348, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T01:12:32Z", + "last_commit": "2026-10-09T23:09:23Z" + }, + { + "login": "rutkk", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 24, + "lines_deleted": 1, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T01:12:45Z", + "last_commit": "2026-10-08T01:12:45Z" + }, + { + "login": "ShauryaSwarup", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 4, + "lines_deleted": 1, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T01:12:50Z", + "last_commit": "2026-10-08T01:12:50Z" + }, + { + "login": "cmoro-deusto", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 127, + "lines_deleted": 0, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T01:12:55Z", + "last_commit": "2026-10-08T01:12:55Z" + }, + { + "login": "Checkov23", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 80, + "lines_deleted": 14, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T01:12:59Z", + "last_commit": "2026-10-08T01:12:59Z" + }, + { + "login": "itsmunzir", + "people_entry": false, + "github_name": null, + "prs": 3, + "commits": 3, + "lines_added": 402, + "lines_deleted": 4, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T01:14:16Z", + "last_commit": "2026-10-08T07:42:27Z" + }, + { + "login": "ebastos", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 50, + "lines_deleted": 3, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T01:14:34Z", + "last_commit": "2026-10-08T01:14:34Z" + }, + { + "login": "Frumpy9", + "people_entry": false, + "github_name": null, + "prs": 2, + "commits": 2, + "lines_added": 831, + "lines_deleted": 32, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T01:14:41Z", + "last_commit": "2026-10-08T01:16:26Z" + }, + { + "login": "HEOJUNFO", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 54, + "lines_deleted": 5, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T01:16:17Z", + "last_commit": "2026-10-08T01:16:17Z" + }, + { + "login": "mjshfrvstj-sys", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 211, + "lines_deleted": 19, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T01:36:47Z", + "last_commit": "2026-10-08T01:36:47Z" + }, + { + "login": "AutoHenry", + "people_entry": true, + "github_name": null, + "prs": 8, + "commits": 8, + "lines_added": 2891, + "lines_deleted": 703, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T01:37:07Z", + "last_commit": "2026-10-09T17:20:47Z" + }, + { + "login": "DWAA1660", + "people_entry": false, + "github_name": null, + "prs": 4, + "commits": 4, + "lines_added": 1003, + "lines_deleted": 55, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T01:37:28Z", + "last_commit": "2026-10-08T16:49:25Z" + }, + { + "login": "pauliusiv123-rgb", + "people_entry": false, + "github_name": null, + "prs": 6, + "commits": 6, + "lines_added": 1452, + "lines_deleted": 75, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T01:37:39Z", + "last_commit": "2026-10-09T15:53:34Z" + }, + { + "login": "excited-raccoon", + "people_entry": false, + "github_name": null, + "prs": 3, + "commits": 3, + "lines_added": 2859, + "lines_deleted": 110, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T01:38:21Z", + "last_commit": "2026-10-08T04:38:57Z" + }, + { + "login": "leblanc-simon", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 877, + "lines_deleted": 163, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T02:14:50Z", + "last_commit": "2026-10-08T02:14:50Z" + }, + { + "login": "RicSchonfelder", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 179, + "lines_deleted": 969, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T02:15:26Z", + "last_commit": "2026-10-08T02:15:26Z" + }, + { + "login": "petrleocompel", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 182, + "lines_deleted": 6, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T02:15:39Z", + "last_commit": "2026-10-08T02:15:39Z" + }, + { + "login": "sakamoto824", + "people_entry": false, + "github_name": null, + "prs": 2, + "commits": 2, + "lines_added": 5721, + "lines_deleted": 1479, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T02:16:07Z", + "last_commit": "2026-10-08T02:16:34Z" + }, + { + "login": "shuiyue-cmyk", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 1812, + "lines_deleted": 22, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T02:17:00Z", + "last_commit": "2026-10-08T02:17:00Z" + }, + { + "login": "Mawfyy", + "people_entry": false, + "github_name": null, + "prs": 4, + "commits": 4, + "lines_added": 327, + "lines_deleted": 28, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T03:14:45Z", + "last_commit": "2026-10-08T20:46:22Z" + }, + { + "login": "ysrdevs", + "people_entry": false, + "github_name": null, + "prs": 4, + "commits": 4, + "lines_added": 14134, + "lines_deleted": 305, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T03:24:54Z", + "last_commit": "2026-10-09T18:46:07Z" + }, + { + "login": "CQMHV", + "people_entry": false, + "github_name": null, + "prs": 3, + "commits": 3, + "lines_added": 661, + "lines_deleted": 75, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T03:45:02Z", + "last_commit": "2026-10-08T17:40:30Z" + }, + { + "login": "neavo", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 56, + "lines_deleted": 5, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T05:19:07Z", + "last_commit": "2026-10-08T05:19:07Z" + }, + { + "login": "chiranjeevi-max", + "people_entry": true, + "github_name": null, + "prs": 5, + "commits": 5, + "lines_added": 3387, + "lines_deleted": 96, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T07:18:35Z", + "last_commit": "2026-10-08T21:11:51Z" + }, + { + "login": "wstock", + "people_entry": false, + "github_name": null, + "prs": 11, + "commits": 11, + "lines_added": 821, + "lines_deleted": 58, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T07:39:27Z", + "last_commit": "2026-10-08T14:20:04Z" + }, + { + "login": "switch87", + "people_entry": true, + "github_name": null, + "prs": 3, + "commits": 3, + "lines_added": 571, + "lines_deleted": 14, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T09:30:34Z", + "last_commit": "2026-10-08T11:03:03Z" + }, + { + "login": "viator1969", + "people_entry": true, + "github_name": null, + "prs": 2, + "commits": 2, + "lines_added": 1962, + "lines_deleted": 7, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T11:17:26Z", + "last_commit": "2026-10-08T12:27:20Z" + }, + { + "login": "h-a-n-a-s-h-i", + "people_entry": false, + "github_name": null, + "prs": 0, + "commits": 2, + "lines_added": 124, + "lines_deleted": 124, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T12:13:58Z", + "last_commit": "2026-10-08T14:01:50Z" + }, + { + "login": "cyfung1031", + "people_entry": true, + "github_name": null, + "prs": 21, + "commits": 21, + "lines_added": 66562, + "lines_deleted": 205, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T13:00:21Z", + "last_commit": "2026-10-09T18:12:43Z" + }, + { + "login": "XusBadia", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 268, + "lines_deleted": 2, + "binary_added": 2, + "binary_deleted": 0, + "first_commit": "2026-10-08T13:12:32Z", + "last_commit": "2026-10-08T13:12:32Z" + }, + { + "login": "samehelhawary", + "people_entry": false, + "github_name": null, + "prs": 4, + "commits": 4, + "lines_added": 1882, + "lines_deleted": 143, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T14:46:58Z", + "last_commit": "2026-10-09T18:24:45Z" + }, + { + "login": "iMhack87", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 2121, + "lines_deleted": 45, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T15:16:30Z", + "last_commit": "2026-10-08T15:16:30Z" + }, + { + "login": "EpsilonLLC", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 326, + "lines_deleted": 30, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T17:02:52Z", + "last_commit": "2026-10-08T17:02:52Z" + }, + { + "login": "sanyamsingh001", + "people_entry": false, + "github_name": null, + "prs": 6, + "commits": 6, + "lines_added": 1253, + "lines_deleted": 22, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T17:05:43Z", + "last_commit": "2026-10-09T18:45:32Z" + }, + { + "login": "Flowershangfromthebranches", + "people_entry": false, + "github_name": null, + "prs": 2, + "commits": 2, + "lines_added": 570, + "lines_deleted": 39, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T17:39:40Z", + "last_commit": "2026-10-09T18:45:49Z" + }, + { + "login": "mlkonrad", + "people_entry": true, + "github_name": null, + "prs": 2, + "commits": 2, + "lines_added": 3129, + "lines_deleted": 206, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T19:37:10Z", + "last_commit": "2026-10-08T22:46:34Z" + }, + { + "login": "Fazmin", + "people_entry": false, + "github_name": null, + "prs": 2, + "commits": 2, + "lines_added": 475, + "lines_deleted": 26, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T19:37:21Z", + "last_commit": "2026-10-08T20:04:03Z" + }, + { + "login": "remesis", + "people_entry": false, + "github_name": null, + "prs": 2, + "commits": 2, + "lines_added": 1654, + "lines_deleted": 122, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T20:36:26Z", + "last_commit": "2026-10-08T21:17:05Z" + }, + { + "login": "Oldrich333", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 553, + "lines_deleted": 8, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T20:55:25Z", + "last_commit": "2026-10-08T20:55:25Z" + }, + { + "login": "MarekSpodBiedry", + "people_entry": false, + "github_name": null, + "prs": 4, + "commits": 4, + "lines_added": 773, + "lines_deleted": 113, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T21:29:59Z", + "last_commit": "2026-10-09T13:14:55Z" + }, + { + "login": "MaksPV", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 2123, + "lines_deleted": 9, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T23:24:51Z", + "last_commit": "2026-10-08T23:24:51Z" + }, + { + "login": "amitabhthakur", + "people_entry": true, + "github_name": "Amitabh Thakur", + "prs": 1, + "commits": 1, + "lines_added": 835, + "lines_deleted": 17, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-08T23:59:24Z", + "last_commit": "2026-10-08T23:59:24Z" + }, + { + "login": "bunakalya", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 55, + "lines_deleted": 3, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T00:04:27Z", + "last_commit": "2026-10-09T00:04:27Z" + }, + { + "login": "SBaksa", + "people_entry": false, + "github_name": null, + "prs": 2, + "commits": 2, + "lines_added": 601, + "lines_deleted": 40, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T01:03:30Z", + "last_commit": "2026-10-09T22:22:07Z" + }, + { + "login": "aus10d", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 30, + "lines_deleted": 9, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T01:37:22Z", + "last_commit": "2026-10-09T01:37:22Z" + }, + { + "login": "Streetblock", + "people_entry": false, + "github_name": null, + "prs": 9, + "commits": 9, + "lines_added": 2547, + "lines_deleted": 451, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T13:13:46Z", + "last_commit": "2026-10-09T22:53:56Z" + }, + { + "login": "feraremag2680", + "people_entry": false, + "github_name": null, + "prs": 3, + "commits": 3, + "lines_added": 417, + "lines_deleted": 53, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T13:14:19Z", + "last_commit": "2026-10-09T22:37:24Z" + }, + { + "login": "Erige005", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 27, + "lines_deleted": 4, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T13:14:34Z", + "last_commit": "2026-10-09T13:14:34Z" + }, + { + "login": "chent11", + "people_entry": true, + "github_name": null, + "prs": 3, + "commits": 3, + "lines_added": 382, + "lines_deleted": 31, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T13:14:46Z", + "last_commit": "2026-10-09T16:59:33Z" + }, + { + "login": "kremit", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 138, + "lines_deleted": 30, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T13:15:13Z", + "last_commit": "2026-10-09T13:15:13Z" + }, + { + "login": "bulgariamitko", + "people_entry": false, + "github_name": null, + "prs": 4, + "commits": 4, + "lines_added": 2828, + "lines_deleted": 44, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T13:16:16Z", + "last_commit": "2026-10-09T18:27:02Z" + }, + { + "login": "fares111111122", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 690, + "lines_deleted": 15, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T13:22:50Z", + "last_commit": "2026-10-09T13:22:50Z" + }, + { + "login": "schiffer-soft", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 2188, + "lines_deleted": 15, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T13:26:15Z", + "last_commit": "2026-10-09T13:26:15Z" + }, + { + "login": "LloydNicholson", + "people_entry": false, + "github_name": null, + "prs": 4, + "commits": 4, + "lines_added": 646, + "lines_deleted": 66, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T16:19:10Z", + "last_commit": "2026-10-09T18:44:11Z" + }, + { + "login": "martinjohuber", + "people_entry": false, + "github_name": null, + "prs": 2, + "commits": 2, + "lines_added": 130, + "lines_deleted": 25, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T16:19:36Z", + "last_commit": "2026-10-09T16:23:15Z" + }, + { + "login": "bartalos86", + "people_entry": false, + "github_name": null, + "prs": 6, + "commits": 6, + "lines_added": 3873, + "lines_deleted": 176, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T16:28:06Z", + "last_commit": "2026-10-09T22:45:54Z" + }, + { + "login": "dmatviichuk", + "people_entry": false, + "github_name": null, + "prs": 2, + "commits": 2, + "lines_added": 2411, + "lines_deleted": 21, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T16:55:46Z", + "last_commit": "2026-10-09T22:38:18Z" + }, + { + "login": "philkwek", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 86, + "lines_deleted": 15, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T18:11:59Z", + "last_commit": "2026-10-09T18:11:59Z" + }, + { + "login": "codyvogt", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 201, + "lines_deleted": 39, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T18:24:18Z", + "last_commit": "2026-10-09T18:24:18Z" + }, + { + "login": "max1e6", + "people_entry": false, + "github_name": null, + "prs": 3, + "commits": 3, + "lines_added": 671, + "lines_deleted": 65, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T18:24:32Z", + "last_commit": "2026-10-10T00:29:26Z" + }, + { + "login": "kisst", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 1042, + "lines_deleted": 33, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T18:26:29Z", + "last_commit": "2026-10-09T18:26:29Z" + }, + { + "login": "skylartaylor", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 4355, + "lines_deleted": 472, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T18:38:01Z", + "last_commit": "2026-10-09T18:38:01Z" + }, + { + "login": "tanish2k09", + "people_entry": false, + "github_name": null, + "prs": 2, + "commits": 2, + "lines_added": 698, + "lines_deleted": 3, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T18:44:37Z", + "last_commit": "2026-10-09T18:46:42Z" + }, + { + "login": "thorstenhirsch", + "people_entry": false, + "github_name": null, + "prs": 4, + "commits": 4, + "lines_added": 2617, + "lines_deleted": 148, + "binary_added": 1, + "binary_deleted": 0, + "first_commit": "2026-10-09T22:40:12Z", + "last_commit": "2026-10-09T22:44:38Z" + }, + { + "login": "Byxis", + "people_entry": true, + "github_name": "Alexis", + "prs": 1, + "commits": 1, + "lines_added": 51, + "lines_deleted": 1, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T22:44:56Z", + "last_commit": "2026-10-09T22:44:56Z" + }, + { + "login": "haranishi", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 158, + "lines_deleted": 2, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T22:45:11Z", + "last_commit": "2026-10-09T22:45:11Z" + }, + { + "login": "Tevinhead", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 312, + "lines_deleted": 21, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T22:52:13Z", + "last_commit": "2026-10-09T22:52:13Z" + }, + { + "login": "rschuerer", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 163, + "lines_deleted": 43, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-09T23:10:06Z", + "last_commit": "2026-10-09T23:10:06Z" + }, + { + "login": "mrme2tiri-hash", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 40, + "lines_deleted": 1, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-10T00:29:12Z", + "last_commit": "2026-10-10T00:29:12Z" + }, + { + "login": "Dammy196", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 3, + "lines_deleted": 0, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-10T00:55:40Z", + "last_commit": "2026-10-10T00:55:40Z" + }, + { + "login": "w-valzelli", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 2181, + "lines_deleted": 9, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-10T00:55:59Z", + "last_commit": "2026-10-10T00:55:59Z" + }, + { + "login": "edurbs", + "people_entry": false, + "github_name": null, + "prs": 1, + "commits": 1, + "lines_added": 2114, + "lines_deleted": 5, + "binary_added": 0, + "binary_deleted": 0, + "first_commit": "2026-10-10T00:56:13Z", + "last_commit": "2026-10-10T00:56:13Z" } ], "models": [ @@ -79,9 +1028,54 @@ "company": "Anthropic", "model": "Claude Opus", "version": "5.5", - "commits": 239, - "lines_added": 158990, - "lines_deleted": 9809 + "commits": 392, + "lines_added": 299122, + "lines_deleted": 16822 + }, + { + "id": "openai/codex", + "company": "OpenAI", + "model": "Codex", + "version": "", + "commits": 43, + "lines_added": 20596, + "lines_deleted": 2467 + }, + { + "id": "anthropic/claude-fable/5.1", + "company": "Anthropic", + "model": "Claude Fable", + "version": "5.1", + "commits": 9, + "lines_added": 1028, + "lines_deleted": 112 + }, + { + "id": "anthropic/claude-opus/5", + "company": "Anthropic", + "model": "Claude Opus", + "version": "5", + "commits": 9, + "lines_added": 3783, + "lines_deleted": 197 + }, + { + "id": "anthropic/claude-sonnet/5.5", + "company": "Anthropic", + "model": "Claude Sonnet", + "version": "5.5", + "commits": 4, + "lines_added": 2839, + "lines_deleted": 135 + }, + { + "id": "anthropic/claude", + "company": "Anthropic", + "model": "Claude", + "version": "", + "commits": 2, + "lines_added": 489, + "lines_deleted": 23 }, { "id": "anthropic/claude-opus/4.8", @@ -93,13 +1087,40 @@ "lines_deleted": 3 }, { - "id": "openai/codex", - "company": "OpenAI", - "model": "Codex", + "id": "anthropic/claude-sonnet/5", + "company": "Anthropic", + "model": "Claude Sonnet", + "version": "5", + "commits": 1, + "lines_added": 55, + "lines_deleted": 3 + }, + { + "id": "anysphere/cursor", + "company": "Anysphere", + "model": "Cursor", "version": "", "commits": 1, - "lines_added": 13, - "lines_deleted": 1 + "lines_added": 2121, + "lines_deleted": 45 + }, + { + "id": "github/copilot", + "company": "GitHub", + "model": "Copilot", + "version": "", + "commits": 1, + "lines_added": 1478, + "lines_deleted": 105 + }, + { + "id": "openai/chatgpt", + "company": "OpenAI", + "model": "ChatGPT", + "version": "", + "commits": 1, + "lines_added": 272, + "lines_deleted": 16 }, { "id": "zhipu/glm", diff --git a/crates/engine/src/dates.rs b/crates/engine/src/dates.rs index fab1b5db..ebab3237 100644 --- a/crates/engine/src/dates.rs +++ b/crates/engine/src/dates.rs @@ -53,7 +53,7 @@ const ZH_DAYS: [&str; 7] = ["星期日", "星期一", "星期二", "星期三", /// The languages month and weekday names can be written in (Preferences ▸ Date format ▸ Language): /// the interface languages, in the same order and with the same names. -pub const DATE_LANGUAGES: [DateLanguage; 14] = [ +pub const DATE_LANGUAGES: [DateLanguage; 15] = [ DateLanguage { code: "en", name: "English", @@ -219,6 +219,15 @@ pub const DATE_LANGUAGES: [DateLanguage; 14] = [ days: ["неділя", "понеділок", "вівторок", "середа", "четвер", "пʼятниця", "субота"], days_short: ["нд", "пн", "вт", "ср", "чт", "пт", "сб"], }, + DateLanguage { + code: "it", + name: "Italiano", + months: ["gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre"], + months_with_day: None, + months_short: ["gen", "feb", "mar", "apr", "mag", "giu", "lug", "ago", "set", "ott", "nov", "dic"], + days: ["domenica", "lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato"], + days_short: ["dom", "lun", "mar", "mer", "gio", "ven", "sab"], + }, ]; /// The date language for `code` (any case), or `None` when there's none. @@ -527,7 +536,7 @@ mod tests { assert_eq!(s.today_text(None, None).as_deref(), Ok("terça-feira 14 novembro")); assert_eq!(s.today_text(Some("d mmmm"), Some("uk")).as_deref(), Ok("14 листопада"), "Ukrainian months after a day"); assert_eq!(s.today_text(Some("dddd d mmmm"), Some("de")).as_deref(), Ok("Dienstag 14 November")); - assert!(s.set_date_language(Some("it")).unwrap_err().contains("zh-hant"), "only the interface languages"); + assert!(s.set_date_language(Some("xx")).unwrap_err().contains("zh-hant"), "only the interface languages"); assert_eq!(s.date_language(), Some("pt-br"), "an unknown language keeps the previous one"); s.set_date_language(None).unwrap(); assert_eq!(s.date_language(), None); diff --git a/crates/sign/src/windows.rs b/crates/sign/src/windows.rs index fa3c5378..0e49823e 100644 --- a/crates/sign/src/windows.rs +++ b/crates/sign/src/windows.rs @@ -31,6 +31,8 @@ impl ExternalKey for WindowsKey { PublicKey::P384(_) => p384::ecdsa::Signature::from_slice(&raw) .map(|s| s.to_der().as_bytes().to_vec()) .map_err(|e| SignError::Crypto(format!("CNG returned an invalid P-384 signature: {e}"))), + // `identities` lists only RSA, P-256 and P-384 store keys; anything else can't sign here. + _ => Err(SignError::Unsupported("signing with this key type through the Windows certificate store".into())), } } } @@ -67,6 +69,7 @@ pub fn identities() -> Result, SignError> { PublicKey::Rsa { .. } => key.algorithm_group().is_ok_and(|a| a == AlgorithmGroup::Rsa), PublicKey::P256(_) => key.algorithm_group().is_ok_and(|a| a == AlgorithmGroup::Ecdsa) && key.bits().is_ok_and(|bits| bits == 256), PublicKey::P384(_) => key.algorithm_group().is_ok_and(|a| a == AlgorithmGroup::Ecdsa) && key.bits().is_ok_and(|bits| bits == 384), + _ => false, }; if !supported { continue; diff --git a/crates/ui-egui/src/a11y_ui.rs b/crates/ui-egui/src/a11y_ui.rs index 5a5a9c66..ef372a93 100644 --- a/crates/ui-egui/src/a11y_ui.rs +++ b/crates/ui-egui/src/a11y_ui.rs @@ -423,14 +423,15 @@ impl std::fmt::Debug for AltDraft { } } -/// Render a figure's area for the dialog (at most 360 × 220 px). +/// Render a figure's area for the dialog, at the preview pane's device resolution. fn figure_picture(ctx: &egui::Context, doc: &pdfcraft_engine::Document, f: &pdfcraft_engine::a11y::Figure) -> Option { let (page, b) = (f.page?, f.bbox?); let info = doc.info.pages.get(page)?; let (u, v) = (info.user_to_view(b[0] as f32, b[1] as f32), info.user_to_view(b[2] as f32, b[3] as f32)); let (x0, y0, x1, y1) = (u[0].min(v[0]), u[1].min(v[1]), u[0].max(v[0]), u[1].max(v[1])); let (w, h) = ((x1 - x0).max(1.0), (y1 - y0).max(1.0)); - let scale = (360.0 / w).min(220.0 / h).clamp(0.05, 8.0); + let ppp = ctx.pixels_per_point().max(1.0); + let scale = ((380.0 * ppp) / w).min((220.0 * ppp) / h).clamp(0.05, 32.0); let tile = pdfcraft_render::Tile { x: (x0 * scale).floor().max(0.0) as u32, y: (y0 * scale).floor().max(0.0) as u32, diff --git a/crates/ui-egui/src/canvas.rs b/crates/ui-egui/src/canvas.rs index 1b936a8c..2b61add7 100644 --- a/crates/ui-egui/src/canvas.rs +++ b/crates/ui-egui/src/canvas.rs @@ -30,10 +30,15 @@ const STALE_TAG: u64 = u64::MAX; /// Pages whose raster would exceed this many device pixels on a side are drawn in tiles. const TILE_THRESHOLD: f32 = 4096.0; const TILE: u32 = 1024; -/// Longest side of the low-resolution backdrop drawn under tiles. -const BASE_SIDE: f32 = 2048.0; -const THUMB_W: f32 = 132.0; -const THUMB_H: f32 = 176.0; +/// Longest side of the backdrop drawn under tiles, and of a live page preview (signature drag). +pub(crate) const BASE_SIDE: f32 = 2048.0; +/// Print-preview rasters (distinct from thumbnails and from organize-grid renders). +const PRINT_TAG: u64 = 1 << 60; +/// Thumbnail slot before density scaling. The pages panel draws at most 150 logical points and +/// the organize grid about 146; when the byte budget allows, density reaches the screen so those +/// images are sampled down instead of stretched. +const THUMB_W: f32 = 240.0; +const THUMB_H: f32 = 320.0; const THUMB_BYTES: usize = 24 * 1024 * 1024; const PAGE_BYTES: usize = 128 * 1024 * 1024; const TILE_BYTES: usize = 128 * 1024 * 1024; @@ -272,6 +277,8 @@ pub struct DocView { frame_visible: HashSet, /// Thumbnails that are out of date (still shown until their replacement arrives). stale_thumbs: HashSet, + /// Print dialog: the current sheet's pages at the preview pane's device resolution. + print_pages: HashMap, /// Sharp tiles of large pages: (page, scale tag, tile x, tile y) → texture. Tiles of an /// earlier zoom stay, drawn stretched, until those of the current one cover the page. tiles: HashMap<(usize, u64, u32, u32), TextureHandle>, @@ -468,6 +475,7 @@ impl DocView { frame_queue: Vec::new(), frame_visible: HashSet::new(), stale_thumbs: HashSet::new(), + print_pages: HashMap::new(), tiles: HashMap::new(), texts: HashMap::new(), text_failed: HashSet::new(), @@ -602,6 +610,9 @@ impl DocView { p.tag = STALE_TAG; } self.stale_thumbs.extend(self.thumbs.keys().copied()); + for slot in self.print_pages.values_mut() { + slot.0 = STALE_TAG; + } // Pages may have moved: a sharp render of another page would be worse than a soft one. self.grid_pages.clear(); self.tiles.clear(); @@ -626,6 +637,9 @@ impl DocView { if self.thumbs.contains_key(&page) { self.stale_thumbs.insert(page); } + if let Some(slot) = self.print_pages.get_mut(&page) { + slot.0 = STALE_TAG; + } self.tiles.retain(|(p, _, _, _), _| *p != page); self.texts.remove(&page); self.text_failed.remove(&page); @@ -659,11 +673,17 @@ impl DocView { (!quads.is_empty()).then_some((s.page, quads)) } - /// A page's thumbnail texture, when rendered (the print preview uses them). + /// A page's thumbnail texture, when rendered. pub(crate) fn thumb_id(&self, page: usize) -> Option { self.thumbs.get(&page).map(|t| t.tex.id()) } + /// The print preview's picture of `page`: the sheet raster when it has arrived, otherwise the + /// thumbnail. + pub(crate) fn page_preview(&self, page: usize) -> Option { + self.print_pages.get(&page).map(|(_, tex)| tex.id()).or_else(|| self.thumb_id(page)) + } + pub(crate) fn page_text(&self, page: usize) -> Option> { self.texts.get(&page).cloned() } @@ -1073,6 +1093,7 @@ impl DocView { self.tiles.clear(); self.thumbs.clear(); self.grid_pages.clear(); + self.print_pages.clear(); self.stale_thumbs.clear(); self.waiting_since.clear(); // Signature previews own a separate renderer and image/background textures. @@ -1124,6 +1145,13 @@ impl DocView { grid.push(*req); continue; } + // Print-preview rasters: a few sheets at the pane's size (the dialog bounds them). + if req.tag & PRINT_TAG != 0 { + if !self.errors.contains_key(&req.page) { + queue.push(*req); + } + continue; + } // On-screen work is always admitted (the viewport bounds it); the limits only // decide how much prefetch fits beside it. let visible = self.frame_visible.contains(&req.page); @@ -1255,6 +1283,9 @@ impl DocView { if let Some(t) = r.request.tile { let tex = ctx.load_texture(format!("tile-{:?}-{page}-{}-{}", self.id, t.x, t.y), img, TextureOptions::LINEAR); self.tiles.insert((page, r.request.tag, t.x / TILE, t.y / TILE), tex); + } else if r.request.tag & PRINT_TAG != 0 { + let tex = ctx.load_texture(format!("print-{:?}-{page}", self.id), img, TextureOptions::LINEAR); + self.print_pages.insert(page, (r.request.tag, tex)); } else if r.request.tag & GRID_TAG != 0 { let tex = ctx.load_texture(format!("grid-{:?}-{page}", self.id), img, TextureOptions::LINEAR); self.grid_pages.insert(page, (r.width, tex)); @@ -1277,8 +1308,9 @@ impl DocView { // An on-screen page or tile is always taken (the viewport bounds it): it may evict // off-screen rasters but never another on-screen one, and is never refused. let visible = req.tag & THUMB_TAG == 0 && self.frame_visible.contains(&req.page); - // Organize-grid renders are bounded by the cells in view (organize_grid). - if req.tag & GRID_TAG != 0 { + // Organize-grid renders are bounded by the cells in view (organize_grid). Print + // previews are the sheets around the one on screen. + if req.tag & (GRID_TAG | PRINT_TAG) != 0 { return true; } if let Some(t) = req.tile { @@ -1370,6 +1402,21 @@ impl DocView { // blurs every line and glyph (#260). self.zoom * PT * ppp } + + /// Queue sharp rasters for the print preview. Pages that leave the nearby sheets are dropped. + pub(crate) fn queue_print_previews(&mut self, pages: &[(usize, f32)]) { + self.print_pages.retain(|page, _| pages.iter().any(|(p, _)| p == page)); + for &(page, scale) in pages { + if self.errors.contains_key(&page) || !scale.is_finite() || scale <= 0.0 { + continue; + } + let tag = scale_tag(scale) | PRINT_TAG; + let fresh = self.print_pages.get(&page).is_some_and(|(have, _)| *have == tag); + if !fresh { + self.frame_queue.push(RenderRequest { page, kind: RequestKind::Pixels, tile: None, scale, tag }); + } + } + } } /// The request tag for a raster at `scale`: equal tags mean the same scale (to 1/65536). @@ -1651,6 +1698,10 @@ pub fn document_area(app: &mut PdfCraftApp, index: usize, ui: &mut egui::Ui) { ui.centered_and_justified(|ui| ui.label(tl!("This document has no pages."))); return; } + // The print dialog queues its own rasters later in the frame. Closing it drops them. + if app.dialog != Some(crate::Dialog::Print) { + app.views[index].print_pages.clear(); + } // The Prepare a form panel is open (or a field tool is picked): fields are edited, not filled. let preparing = app.is_preparing(); // Edit a PDF: added text and images can be selected, moved and edited. @@ -3863,6 +3914,18 @@ trailer << /Root 1 0 R >> v.single_page_wheel(egui::MouseWheelUnit::Line, dy, egui::TouchPhase::Move, at, true) } + #[test] + fn thumbnails_cover_the_panel_on_a_high_dpi_screen() { + // Pages panel slot is at most 150 logical points. At 2 px/pt a letter page's thumbnail + // must be at least that wide, so the panel samples it down instead of stretching it. + let info = thumbnail_info(1); + let mut v = DocView::new(DocId(1), &info, ViewDefaults::default()); + v.need_thumbnail(0, true); + let queue = v.prepare_render_queue(&info, 2.0); + let scale = queue.first().expect("one thumbnail").scale; + assert!(612.0 * scale >= 150.0 * 2.0, "{scale}"); + } + #[test] fn notches_turn_pages_and_stop_at_the_ends() { let mut v = view(3, PageLayout::Single); diff --git a/crates/ui-egui/src/comments.rs b/crates/ui-egui/src/comments.rs index bfe48b9a..1f195784 100644 --- a/crates/ui-egui/src/comments.rs +++ b/crates/ui-egui/src/comments.rs @@ -263,6 +263,11 @@ impl CommentPrefs { self.styles.iter().find(|(t, _)| *t == tool).map(|(_, s)| s.clone()).unwrap_or_default() } + /// Every tool with its current default style (the persisted settings read this). + pub fn styles(&self) -> impl Iterator { + self.styles.iter().map(|(t, s)| (*t, s)) + } + pub fn set_color(&mut self, tool: CommentTool, c: Rgb) { if let Some((_, s)) = self.styles.iter_mut().find(|(t, _)| *t == tool) { s.color = c; diff --git a/crates/ui-egui/src/dialogs.rs b/crates/ui-egui/src/dialogs.rs index 914bec30..e026e62c 100644 --- a/crates/ui-egui/src/dialogs.rs +++ b/crates/ui-egui/src/dialogs.rs @@ -774,10 +774,18 @@ pub fn show(app: &mut PdfCraftApp, ctx: &egui::Context) { let Some(doc) = app.session.get(id) else { return }; let sizes: Vec<(f64, f64)> = doc.info.pages.iter().map(|p| (p.width as f64, p.height as f64)).collect(); let labels: Vec = doc.info.pages.iter().map(|p| p.label.clone()).collect(); + let rasters = crate::print_ui::preview_rasters( + &app.print_draft, + &sizes, + &labels, + ui.ctx().pixels_per_point(), + ui.ctx().input(|i| i.max_texture_side) as f32, + ); let view = &mut app.views[i]; + view.queue_print_previews(&rasters); let (go, cancel) = crate::print_ui::body(ui, &mut app.print_draft, &t, &sizes, &labels, &mut |p| { view.need_thumbnail(p, true); - view.thumb_id(p) + view.page_preview(p) }); print_go = go; close = go || cancel; diff --git a/crates/ui-egui/src/i18n/it.tsv b/crates/ui-egui/src/i18n/it.tsv new file mode 100644 index 00000000..ff893547 --- /dev/null +++ b/crates/ui-egui/src/i18n/it.tsv @@ -0,0 +1,2124 @@ +# Italian (it) catalog. Columns, separated by a TAB: context source translation +# +# context empty a plain UI string; `source` is the English text in the code +# @id a command id (e.g. file.saveAs): wins over the English text for +# that menu item, so one id can read differently from its twin +# @plural `source` is "one|other" (English forms); the translation lists the +# language's forms separated by "|" (see `plural` in i18n/mod.rs) +# anything else a disambiguating context passed to `tr_ctx` +# escapes \n \t \\ inside a column. `{name}` placeholders must appear in both columns. +# lines starting with # and blank lines are ignored. +# +# Clean-room: every entry was written from the plain meaning of the English label using ordinary +# Italian computing vocabulary. No proprietary localisation resource, string table or product UI +# (Acrobat's included) was consulted or copied; add entries the same way. +# Product and technology names (PdfCraft, PDF, Acrobat JavaScript ...) stay in Latin letters; +# the trailing "…" of dialog commands is kept. + + Menu Menu + File File + Edit Modifica + Pages Pagine + View Visualizza + Help Aiuto + Preferences Preferenze + Preferences… Preferenze… + Interface language Lingua dell'interfaccia + Identity Identità + Name on new comments Nome sui nuovi commenti + Open… Apri… + Open Recent Apri recenti + Pin folder to Home… Fissa una cartella sulla Home… + Folders Cartelle + Pin a folder… Fissa una cartella… + Pin a folder to Home Fissa una cartella sulla Home + Pin a folder to list its newest PDFs here, such as where your scanner or a synced cloud drive saves them. Fissa una cartella per elencarne qui i PDF più recenti, ad esempio quella in cui salvano i file lo scanner o un servizio cloud sincronizzato. + Unpin Rimuovi + Unpin {folder} Rimuovi {folder} + Looking for PDFs… Cerco file PDF… + This folder isn't available right now. It may have moved, or its drive or cloud sync is offline. La cartella non è disponibile in questo momento. Potrebbe essere stata spostata, oppure il disco o il servizio cloud che la contiene non è in linea. + No PDFs in this folder yet Ancora nessun PDF in questa cartella + Show less Mostra meno + Show {n} more Mostra altri {n} + The newest {n} of {total} PDFs I {n} più recenti di {total} PDF + Pinned folders need the desktop app Le cartelle fissate necessitano dell'app desktop + Choose a folder on this computer to pin Scegli una cartella di questo computer da fissare + {folder} is already pinned to Home {folder} è già fissata sulla Home + You can pin up to {n} folders. Unpin one first. Puoi fissare fino a {n} cartelle. Rimuovine prima una. + Pinned {folder} to Home {folder} fissata sulla Home + No recent files Nessun file recente + New blank PDF Nuovo PDF vuoto + Create PDF from file… Crea PDF da file… + Create PDF from images… Crea PDF da immagini… + Create PDF from multiple files… Crea PDF da più file… + Create PDF from clipboard Crea PDF dagli appunti + Combine files… Combina file… + Save Salva + Save as… Salva con nome… + Close file Chiudi file + Close all Chiudi tutto + Revert Ripristina + Print… Stampa… + Document properties… Proprietà documento… + Undo Annulla + Redo Ripeti + Find… Trova… + Advanced search… Ricerca avanzata… + Copy pages Copia pagine + Cut pages Taglia pagine + Paste pages Incolla pagine + Fit visible Adatta al visibile + Marquee zoom Ingrandimento selettivo + Take a snapshot Acquisisci istantanea + Full screen mode Modalità schermo intero + Read mode Modalità lettura + Switch light / dark theme Alterna tema chiaro/scuro + Comments panel Pannello commenti + Form fields panel Pannello campi modulo + Clear form Svuota il modulo + Find tools and commands… Trova strumenti e comandi… + Zoom Ingrandimento + Actual size Dimensione reale + Zoom to page level Adatta alla pagina + Fit to width Adatta alla larghezza + Display theme Tema di visualizzazione + Side panels Pannelli laterali + Enable Acrobat JavaScript Abilita JavaScript di Acrobat + OK OK + Join our Discord Unisciti al nostro Discord + Close Chiudi + Next / previous match Risultato successivo/precedente + Copy selected text Copia testo selezionato + Double-click Doppio clic + Select a word Seleziona una parola + Clear selection / close find Deseleziona / chiudi ricerca + Zoom in / out (also pinch or ⌘-scroll) Aumenta/riduci ingrandimento (anche con pizzico o ⌘ + rotellina) + Rotate view Ruota vista + First / last page Prima/ultima pagina + Previous / next page Pagina precedente/successiva + Delete selected pages (Organize) Elimina le pagine selezionate (Organizza) + Select all pages (Organize) Seleziona tutte le pagine (Organizza) + Home Home + Open Apri + Open a PDF (⌘O) Apri un PDF (⌘O) + Dark gray theme Tema grigio scuro + Light theme Tema chiaro + All tools Tutti gli strumenti + Read Lettura + Convert Converti + E-Sign Firma elettronica + Print (⌘P) Stampa (⌘P) + Save (M4) Salva (M4) + Document properties (⌘D) Proprietà documento (⌘D) + Find tools and commands Trova strumenti e comandi + Fit to height Adatta all'altezza + Zoom in Aumenta ingrandimento + Zoom out Riduci ingrandimento + Rotate view clockwise Ruota vista in senso orario + Rotate view counterclockwise Ruota vista in senso antiorario + Page navigation Navigazione pagine + Previous view Vista precedente + Next view Vista successiva + Page display Visualizzazione pagina + Continuous scrolling Scorrimento continuo + Two-page view Visualizzazione doppia + Single page Pagina singola + Show cover page in two-page view Mostra la copertina in visualizzazione doppia + Use system setting Usa impostazioni di sistema + Light gray Grigio chiaro + Dark gray Grigio scuro + Comments Commenti + Bookmarks Segnalibri + Fields Campi + Layers Livelli + Attachments Allegati + Signatures Firme + Accessibility Checker Controllo accessibilità + Search Cerca + Compare Confronta + Page thumbnails Miniature pagine + Form fields Campi modulo + Zoom out (⌘−) Riduci ingrandimento (⌘−) + Zoom in (⌘+) Aumenta ingrandimento (⌘+) + Rotate view clockwise (⇧⌘+) Ruota vista in senso orario (⇧⌘+) + Toggle fit page / fit width Alterna adatta alla pagina / adatta alla larghezza + Next page Pagina successiva + Previous page Pagina precedente + Current page — type a page number or label (such as iv) and press Enter Pagina corrente: digita un numero o un'etichetta di pagina (ad esempio iv) e premi Invio + Welcome to PdfCraft Benvenuto in PdfCraft + An open-source PDF workbench — local, private, and scriptable. Un banco di lavoro PDF open source: locale, riservato e programmabile. + Join the ArtCraft community Unisciti alla community di ArtCraft + Get help, share feedback and follow development on Discord. Chiedi aiuto, condividi commenti e segui lo sviluppo su Discord. + Recommended tools Strumenti consigliati + Use now Usa ora + Open file Apri file + Recent Recenti + Files you open in PdfCraft appear here. Drop a PDF anywhere to open it. I file aperti in PdfCraft compaiono qui. Trascina un PDF in un punto qualsiasi per aprirlo. + Privacy Privacy + PdfCraft works offline. No telemetry, no account, and no cloud processing unless you add a provider. PdfCraft funziona offline. Nessuna telemetria, nessun account e nessuna elaborazione nel cloud, a meno che tu non aggiunga un fornitore. + Scripts run in a sandbox without file or network access. With JavaScript off, Acrobat's standard format, validate and calculate functions still work. Gli script vengono eseguiti in una sandbox senza accesso a file o rete. Con JavaScript disattivato, le funzioni standard di formato, convalida e calcolo di Acrobat continuano a funzionare. + Back to all tools Torna a tutti gli strumenti + Close panel Chiudi pannello + View less Mostra meno + View more Mostra altro + Available Disponibile + Ready Pronto + Search tools and commands… Cerca strumenti e comandi… + No matching tools Nessuno strumento corrispondente + Tool Strumento + Command Comando + Add a sticky note Aggiungi una nota adesiva + Add a text box Aggiungi una casella di testo + Highlight text Evidenzia testo + Underline text Sottolinea testo + Strikethrough text Barra testo + Squiggly underline text Sottolinea testo con linea ondulata + Draw freehand Disegna a mano libera + Draw a line Disegna una linea + Draw an arrow Disegna una freccia + Draw a rectangle Disegna un rettangolo + Draw an oval Disegna un ovale + Draw a polygon Disegna un poligono + Draw connected lines Disegna linee collegate + Draw a cloud Disegna una nuvola + Add a callout Aggiungi un richiamo + Insert text Inserisci testo + Replace text Sostituisci testo + Attach a file Allega un file + Erase drawings Cancella disegni + Flatten comments Appiattisci commenti + Import comments… Importa commenti… + Add a stamp Aggiungi un timbro + Export all comments to data file… Esporta tutti i commenti in un file di dati… + Hide all comments Nascondi tutti i commenti + Summarize comments Riepiloga commenti + Import form data… Importa dati modulo… + Export form data… Esporta dati modulo… + PDF/A… PDF/A… + Action Wizard… Procedura guidata azioni… + Prepare for distribution… Prepara per la distribuzione… + Optimize scanned documents… Ottimizza documenti acquisiti… + Compare files… Confronta file… + Detect form fields Rileva campi modulo + Merge data files into spreadsheet… Unisci file di dati in un foglio di calcolo… + Flatten form fields Appiattisci campi modulo + Prepare a form Prepara un modulo + Tab order: by rows Ordine di tabulazione: per righe + Tab order: by columns Ordine di tabulazione: per colonne + Tab order: by document structure Ordine di tabulazione: per struttura del documento + Add text Aggiungi testo + Edit text & images Modifica testo e immagini + Add or edit links Aggiungi o modifica collegamenti + Create links from URLs Crea collegamenti dagli URL + Remove all links Rimuovi tutti i collegamenti + Add Bates numbering… Aggiungi numerazione Bates… + Add image… Aggiungi immagine… + Redact text and images Oscura testo e immagini + Redact pages… Oscura pagine… + Find text and redact… Trova testo e oscura… + Redaction properties… Proprietà oscuramento… + Apply redactions… Applica oscuramenti… + Clear redaction marks Cancella segni di oscuramento + Remove hidden information… Rimuovi informazioni nascoste… + Sanitize document… Ripulisci documento… + Field properties… Proprietà campo… + Add a text field Aggiungi un campo di testo + Add a checkbox Aggiungi una casella di controllo + Add a radio button Aggiungi un pulsante di opzione + Add a drop-down list Aggiungi un elenco a discesa + Add a list box Aggiungi una casella di riepilogo + Add a button Aggiungi un pulsante + Add an image field Aggiungi un campo immagine + Add a date field Aggiungi un campo data + Add a digital signature field Aggiungi un campo firma digitale + Digitally sign Firma digitalmente + Certify (visible signature) Certifica (firma visibile) + Certify (invisible signature) Certifica (firma invisibile) + Validate all signatures Convalida tutte le firme + Signatures panel Pannello firme + Fill & Sign: add text Compila e firma: aggiungi testo + Fill & Sign: checkmark Compila e firma: segno di spunta + Fill & Sign: cross Compila e firma: croce + Fill & Sign: dot Compila e firma: punto + Fill & Sign: line Compila e firma: linea + Fill & Sign: date Compila e firma: data + Fill & Sign: sign Compila e firma: firma + Fill & Sign: initials Compila e firma: iniziali + Export to image… Esporta come immagine… + Reduce file size… Riduci dimensione file… + Optimize PDF… Ottimizza PDF… + Export to text… Esporta come testo… + Export to Word… Esporta in Word… + Export to HTML… Esporta in HTML… + Export to RTF… Esporta in RTF… + JavaScript console… Console JavaScript… + Document JavaScripts… JavaScript del documento… + Recognize text… Riconosci testo… + Recognize text in multiple files… Riconosci testo in più file… + Check for accessibility… Verifica accessibilità… + Open accessibility report Apri rapporto di accessibilità + Change reading options… Modifica opzioni di lettura… + Add alternate text… Aggiungi testo alternativo… + Export all images… Esporta tutte le immagini… + Add header & footer… Aggiungi intestazione e piè di pagina… + Update header & footer… Aggiorna intestazione e piè di pagina… + Remove header & footer Rimuovi intestazione e piè di pagina + Add watermark… Aggiungi filigrana… + Update watermark… Aggiorna filigrana… + Remove watermark Rimuovi filigrana + Add background… Aggiungi sfondo… + Update background… Aggiorna sfondo… + Remove background Rimuovi sfondo + Protect using password… Proteggi con password… + Remove security Rimuovi protezione + Security properties… Proprietà di sicurezza… + Organize pages Organizza pagine + New bookmark Nuovo segnalibro + Rotate pages clockwise Ruota pagine in senso orario + Rotate pages counterclockwise Ruota pagine in senso antiorario + Delete pages Elimina pagine + Insert blank page Inserisci pagina vuota + Rotate pages… Ruota pagine… + Duplicate pages Duplica pagine + Crop pages Ritaglia pagine + Set page boxes… Imposta riquadri pagina… + Insert pages from file… Inserisci pagine da file… + Replace pages… Sostituisci pagine… + Extract pages… Estrai pagine… + Split document… Dividi documento… + Number pages… Numera pagine… + Keyboard shortcuts Scorciatoie da tastiera + Join the ArtCraft Discord Unisciti al Discord di ArtCraft + PdfCraft web page Pagina web di PdfCraft + PdfCraft on GitHub PdfCraft su GitHub + ArtCraft website Sito web di ArtCraft + Check for updates… Verifica aggiornamenti… + About PdfCraft Informazioni su PdfCraft + Export a PDF Esporta un PDF + Export to Esporta in + Microsoft Word (.docx) Microsoft Word (.docx) + Spreadsheet (.xlsx) Foglio di calcolo (.xlsx) + Presentation (.pptx) Presentazione (.pptx) + Image (PNG) Immagine (PNG) + Export all images Esporta tutte le immagini + HTML web page Pagina web HTML + Rich Text Format (.rtf) Rich Text Format (.rtf) + Text (plain) Testo semplice + PostScript / EPS PostScript / EPS + Fill & Sign Compila e firma + Fill Compila + Checkmark Segno di spunta + Cross Croce + Dot Punto + Line Linea + Date Data + Signature Firma + Initials Iniziali + Edit a PDF Modifica un PDF + Modify page Modifica pagina + Rotate pages Ruota pagine + Insert pages Inserisci pagine + Extract pages Estrai pagine + Add content Aggiungi contenuto + Text Testo + Image Immagine + Header and footer Intestazione e piè di pagina + Watermark Filigrana + Link Collegamento + Bates numbering Numerazione Bates + Background Sfondo + Attach file Allega file + Create a PDF Crea un PDF + Create from Crea da + Single file File singolo + Multiple files Più file + Images Immagini + Clipboard Appunti + Blank page Pagina vuota + Combine files Combina file + Combine Combina + Add files to combine Aggiungi file da combinare + Page options Opzioni pagina + Page grid Griglia pagine + Rotate Ruota + Delete Elimina + Extract Estrai + Insert Inserisci + Replace Sostituisci + Split Dividi + More Altro + Set page boxes Imposta riquadri pagina + Page labels Etichette pagina + Page transitions Transizioni pagina + Add comments Aggiungi commenti + Markup Annotazioni testo + Sticky note Nota adesiva + Underline Sottolineato + Strikethrough Barrato + Squiggly underline Sottolineatura ondulata + Text box Casella di testo + Drawing Disegno + Rectangle Rettangolo + Oval Ovale + Arrow Freccia + Cloud Nuvola + Stamp Timbro + Review Revisione + Comment list Elenco commenti + Scan & OCR Scansione e OCR + Recognize text Riconosci testo + In this file In questo file + In multiple files In più file + Enhance scanned file Migliora file acquisito + Correct recognized text Correggi testo riconosciuto + Protect a PDF Proteggi un PDF + Protect Proteggi + Protect with password Proteggi con password + Remove hidden information Rimuovi informazioni nascoste + Advanced options Opzioni avanzate + Encrypt with certificate Cifra con certificato + Security properties Proprietà di sicurezza + Redact a PDF Oscura un PDF + Redact Oscura + Redact pages Oscura pagine + Find text and redact Trova testo e oscura + Set properties Imposta proprietà + Sanitize document Ripulisci documento + Compress a PDF Comprimi un PDF + Optimize Ottimizza + Reduce file size Riduci dimensione file + Advanced optimization Ottimizzazione avanzata + Audit space usage Analizza uso dello spazio + Field list Elenco campi + Field properties Proprietà campo + Tab order by rows Ordine di tabulazione per righe + Tab order by columns Ordine di tabulazione per colonne + Import data Importa dati + Export data Esporta dati + Add form components Aggiungi componenti modulo + Text field Campo di testo + Checkbox Casella di controllo + Radio button Pulsante di opzione + Drop-down list Elenco a discesa + List box Casella di riepilogo + Button Pulsante + Image field Campo immagine + Date field Campo data + Digital signature Firma digitale + Stamps Timbri + Stamp palette Tavolozza timbri + Use a certificate Usa un certificato + Certificates Certificati + Timestamp Marca temporale + Use print production Usa produzione di stampa + Print production Produzione di stampa + Output preview Anteprima output + Preflight Verifica preliminare + Convert colors Converti colori + Add printer marks Aggiungi segni di stampa + Fix hairlines Correggi linee sottilissime + Measure objects Misura oggetti + Measure Misura + Measuring tool Strumento di misura + Geospatial location Posizione geospaziale + Compare files Confronta file + Select files to compare Seleziona i file da confrontare + Use guided actions Usa azioni guidate + Actions list Elenco azioni + Action Wizard Procedura guidata azioni + Make accessible Rendi accessibile + Prepare for distribution Prepara per la distribuzione + Optimize scanned documents Ottimizza documenti acquisiti + Archive documents Archivia documenti + Prepare for accessibility Prepara per l'accessibilità + Accessibility Accessibilità + Automatically tag PDF Aggiungi tag al PDF automaticamente + Change reading options Modifica opzioni di lettura + Check for accessibility Verifica accessibilità + Add alternate text Aggiungi testo alternativo + Fix reading order Correggi ordine di lettura + Apply PDF standards Applica standard PDF + Standards Standard + Save as PDF/A Salva come PDF/A + Save as PDF/X Salva come PDF/X + Save as PDF/UA Salva come PDF/UA + Add search index Aggiungi indice di ricerca + Index Indice + Manage embedded index Gestisci indice incorporato + Use JavaScript Usa JavaScript + JavaScript JavaScript + Console Console + Document JavaScripts JavaScript del documento + Document actions Azioni documento + AI assistant Assistente IA + Bring your own model (off by default) Usa il tuo modello (disattivato per impostazione predefinita) + Summarize Riepiloga + Ask about this document Fai domande su questo documento + Translate Traduci + pages pagine + Planned Pianificato + Planned for milestone Pianificato per il traguardo + open to see what it will include apri per vedere cosa includerà + Optional: needs an AI provider you configure Facoltativo: richiede un fornitore IA configurato da te + Coming in milestone In arrivo nel traguardo + Items marked Ready work today. Le voci contrassegnate come Pronto funzionano già oggi. + Preview Anteprima + Edit fields Modifica campi + Try the form as people filling it in will see it Prova il modulo come lo vedrà chi lo compila + Redact all Oscura tutto + Clear all Cancella tutto + Rotate page Ruota pagina + Delete page Elimina pagina + Move page Sposta pagina + Move pages Sposta pagine + Duplicate page Duplica pagina + Replace page Sostituisci pagina + Replace pages Sostituisci pagine + Crop page Ritaglia pagina + Cancel Annulla + Don't save Non salvare + Apply Applica + Run Esegui + Clear Cancella + Sanitize Ripulisci + Mark all Contrassegna tutto + Save changes to “{name}” before closing? Salvare le modifiche a “{name}” prima di chiudere? + Your changes will be lost if you don't save them. Se non le salvi, le modifiche andranno perse. + Password required Password richiesta + “{name}” is protected. Enter a password to open it. “{name}” è protetto. Inserisci una password per aprirlo. + Password Password + Incorrect password. Try again. Password errata. Riprova. + Recognize Text Riconosci testo + Password protection will be applied when you save La protezione con password verrà applicata al salvataggio + Saved the print-ready PDF to {path} PDF pronto per la stampa salvato in {path} + Could not save: {e} Impossibile salvare: {e} + Earlier in tab order Prima nell'ordine di tabulazione + Later in tab order Dopo nell'ordine di tabulazione + From: Da: + To: A: + High Resolution Alta risoluzione + Print Stampa + Verify to see what the document needs. Esegui la verifica per vedere di cosa ha bisogno il documento. + Set Page Boxes Imposta riquadri pagina + Signature panel Pannello firme + {month} {day}, {y} {day} {month} {y} + The document's security settings don't allow filling in form fields Le impostazioni di sicurezza del documento non consentono di compilare i campi modulo + {name} is read-only {name} è di sola lettura + {name} has no action {name} non ha alcuna azione + Previous month Mese precedente + Next month Mese successivo + January gennaio + February febbraio + March marzo + April aprile + May maggio + June giugno + July luglio + August agosto + September settembre + October ottobre + November novembre + December dicembre + Done Fine + This certificate is in your list of trusted certificates. Questo certificato è nel tuo elenco di certificati attendibili. + This certificate is trusted through a certificate above it in the chain. Questo certificato è attendibile tramite un certificato superiore nella catena. + This certificate is not trusted. Signatures made with it show an unknown identity. Questo certificato non è attendibile. Le firme apposte con esso mostrano un'identità sconosciuta. + Add to Trusted Certificates Aggiungi ai certificati attendibili + Export… Esporta… + PDF Optimizer Ottimizzatore PDF + Discard Objects Elimina oggetti + Discard User Data Elimina dati utente + Clean Up Pulizia + Color Images Immagini a colori + Grayscale Images Immagini in scala di grigi + Bicubic downsampling to Sottocampionamento bicubico a + for images above per immagini oltre + Compression Compressione + ZIP ZIP + Retain existing Mantieni esistente + Minimum Minima + Low Bassa + High Alta + Maximum Massima + Each image is measured where pages draw it; an image is replaced only if the result is smaller. Ogni immagine viene misurata nel punto in cui le pagine la disegnano; un'immagine viene sostituita solo se il risultato è più piccolo. + Discard all links, actions and JavaScript Elimina tutti i collegamenti, le azioni e JavaScript + Discard alternate images Elimina immagini alternative + Discard embedded page thumbnails Elimina miniature di pagina incorporate + Discard document tags Elimina tag del documento + Discard embedded print settings Elimina impostazioni di stampa incorporate + Discard bookmarks Elimina segnalibri + Discard hidden layer content Elimina contenuto dei livelli nascosti + Discard all comments, forms and multimedia Elimina tutti i commenti, i moduli e i contenuti multimediali + Discard document information and metadata Elimina informazioni sul documento e metadati + Discard all object data (file attachments) Elimina tutti i dati oggetto (file allegati) + Discard private data of other applications Elimina dati privati di altre applicazioni + Discard hidden text Elimina testo nascosto + Use Flate to encode streams that are not encoded Usa Flate per codificare i flussi non codificati + Remove invalid links and bookmarks Rimuovi collegamenti e segnalibri non validi + Remove unreferenced named destinations Rimuovi destinazioni con nome non referenziate + Compress document structure (object streams) Comprimi struttura del documento (flussi di oggetti) + Remove unused objects and merge identical ones Rimuovi oggetti inutilizzati e unisci quelli identici + Audit space usage… Analizza uso dello spazio… + Space Audit Analisi dello spazio + Bytes Byte + Content Streams Flussi di contenuto + X Object Forms Form XObject + Structure Info Informazioni sulla struttura + Thumbnails Miniature + Named Destinations Destinazioni con nome + Color Spaces Spazi colore + Shadings Sfumature + Patterns (graphics objects) Pattern (oggetti grafici) + Extended Graphics States Stati grafici estesi + Embedded Files File incorporati + Document Overhead Overhead del documento + Total Totale + Text Field Properties Proprietà campo di testo + Check Box Properties Proprietà casella di controllo + Radio Button Properties Proprietà pulsante di opzione + Dropdown Properties Proprietà elenco a discesa + List Box Properties Proprietà casella di riepilogo + Button Properties Proprietà pulsante + Digital Signature Properties Proprietà firma digitale + Position Posizione + Options Opzioni + Validate Convalida + Calculate Calcolo + Actions Azioni + This field is locked. Unlock it to change its properties. Questo campo è bloccato. Sbloccalo per modificarne le proprietà. + Tooltip: Descrizione comando: + Common Properties Proprietà comuni + Read Only Sola lettura + Required Obbligatorio + Font Size: Dimensione carattere: + Auto Auto + Text Color: Colore testo: + Borders and Colors Bordi e colori + Border Color: Colore bordo: + Fill Color: Colore riempimento: + No color Nessun colore + Beveled Smussato + Left: Sinistra: + Bottom: Basso: + Width: Larghezza: + Height: Altezza: + Points from the page's bottom-left corner. Punti dall'angolo inferiore sinistro della pagina. + Alignment: Allineamento: + Default Value: Valore predefinito: + Multi-line Multiriga + Scroll long text Scorri testo lungo + Allow Rich Text Formatting Consenti formattazione RTF + Limit of Limite di + characters caratteri + Field is used for file selection Campo usato per la selezione di file + Check spelling Controllo ortografico + Comb of Pettine di + Export Value: {on} Valore di esportazione: {on} + Check box is checked by default Casella selezionata per impostazione predefinita + Button is checked by default Pulsante selezionato per impostazione predefinita + Buttons with the same name and value are selected in unison I pulsanti con stesso nome e valore vengono selezionati insieme + Item: Voce: + Item List Elenco voci + Up Su + Delete {o} Elimina {o} + Add the choices people pick from. Aggiungi le opzioni tra cui scegliere. + Default: Predefinito: + (none) (nessuno) + Sort items Ordina voci + Allow user to enter custom text Consenti all'utente di inserire testo personalizzato + Multiple selection Selezione multipla + Commit selected value immediately Conferma subito il valore selezionato + Number Numero + Percentage Percentuale + Time Ora + Special Speciale + Select format category: Seleziona categoria di formato: + The value is shown as typed. Il valore viene mostrato così come digitato. + Decimal places: Cifre decimali: + Separator style: Stile separatore: + Currency symbol: Simbolo di valuta: + Before the number Prima del numero + Negative number style: Stile numeri negativi: + Format: Formato: + Custom: Personalizzato: + Zip Code CAP (USA) + Zip Code + 4 CAP + 4 (USA) + Phone Number Numero di telefono + Social Security Number Numero di previdenza sociale (USA) + Arbitrary Mask Maschera arbitraria + Mask: Maschera: + 9 digit, A letter, O letter or digit, X any character 9 cifra, A lettera, O lettera o cifra, X qualsiasi carattere + Example: {sample} Esempio: {sample} + Field value is not validated Il valore del campo non viene convalidato + Field value is in range: Il valore del campo è compreso nell'intervallo: + Add an Action Aggiungi un'azione + Select Trigger: Seleziona attivazione: + Mouse Up Pulsante del mouse rilasciato + Mouse Down Pulsante del mouse premuto + Mouse Enter Ingresso del mouse + Mouse Exit Uscita del mouse + On Focus Acquisizione dello stato attivo + On Blur Perdita dello stato attivo + Select Action: Seleziona azione: + Open a web link Apri un collegamento web + Reset a form Reimposta un modulo + Execute a menu item Esegui una voce di menu + Show a field Mostra un campo + Hide a field Nascondi un campo + Submit a form Invia un modulo + Fields to reset (comma-separated; empty: all) Campi da reimpostare (separati da virgola; vuoto: tutti) + Print, NextPage, PrevPage, FirstPage or LastPage Print, NextPage, PrevPage, FirstPage o LastPage + Field names (comma-separated) Nomi dei campi (separati da virgola) + URL to submit to URL a cui inviare + Script: Script: + Value: Valore: + No actions Nessuna azione + Value is not calculated Il valore non viene calcolato + Value is the Il valore è + sum (+) la somma (+) + product (x) il prodotto (x) + average la media + minimum il minimo + maximum il massimo + of the following fields: dei seguenti campi: + Simplified field notation: Notazione semplificata dei campi: + Field names with + - * / and parentheses; put \\ before spaces in names. Nomi dei campi con + - * / e parentesi; anteponi \\ agli spazi nei nomi. + Format text Formatta testo + Bold Grassetto + Italic Corsivo + Align left Allinea a sinistra + Centre Centra + Align right Allinea a destra + Justify Giustifica + Standard fonts; text outside Windows-1252 isn't supported yet. Caratteri standard; il testo al di fuori di Windows-1252 non è ancora supportato. + Edit image Modifica immagine + Rotate counterclockwise Ruota in senso antiorario + Rotate clockwise Ruota in senso orario + Flip horizontal Capovolgi orizzontalmente + Flip vertical Capovolgi verticalmente + Replace image Sostituisci immagine + Crop (% trimmed from each side) Ritaglia (% rimossa da ogni lato) + Click on the page to add text; each click starts a new box, and ✓ finishes. Drag items to move them, drag a corner to resize, double-click text to edit it. Fai clic sulla pagina per aggiungere testo; ogni clic crea una nuova casella e ✓ termina. Trascina gli elementi per spostarli, trascina un angolo per ridimensionarli, fai doppio clic sul testo per modificarlo. + Choose an image Scegli un'immagine + Export to Image Esporta come immagine + Export to Text Esporta come testo + Export All Images Esporta tutte le immagini + Resolution Risoluzione + Format Formato + Quality Qualità + One {f} file per page, named after the document. Un file {f} per pagina, con il nome del documento. + Exclude images smaller than Escludi immagini più piccole di + No limit Nessun limite + Each image once, named after the document and page. JPEG images are saved unchanged; others as PNG. Ogni immagine una sola volta, con il nome del documento e della pagina. Le immagini JPEG vengono salvate invariate, le altre come PNG. + Plain text in reading order; pages are separated by form feeds. Testo semplice nell'ordine di lettura; le pagine sono separate da caratteri di avanzamento pagina. + Create {what} Crea {what} + initials iniziali + signature firma + Create Custom Stamp Crea timbro personalizzato + From {file} Da {file} + Category: Categoria: + e.g. My stamps es. I miei timbri + Name: Nome: + Custom Personalizzato + Delete stamp Elimina timbro + Create custom stamp… Crea timbro personalizzato… + From a PDF page or an image Da una pagina PDF o da un'immagine + Line spacing Interlinea + Character spacing Spaziatura caratteri + Horizontal scale Scala orizzontale + Rotate Clockwise Ruota in senso orario + Rotate Counterclockwise Ruota in senso antiorario + Flip Horizontal Capovolgi orizzontalmente + Flip Vertical Capovolgi verticalmente + Replace Image… Sostituisci immagine… + Save Image As… Salva immagine con nome… + Check for updates Verifica aggiornamenti + No check has run yet. Nessuna verifica eseguita finora. + Checking for a newer version… Ricerca di una versione più recente… + PdfCraft {v} is available. PdfCraft {v} è disponibile. + You have version {c}. Download the new version from its release page. Hai la versione {c}. Scarica la nuova versione dalla sua pagina di rilascio. + PdfCraft {c} is up to date. PdfCraft {c} è aggiornato. + Couldn't check for updates: {e} Impossibile verificare gli aggiornamenti: {e} + You have version {c}. All releases are listed at {page}. Hai la versione {c}. Tutte le versioni sono elencate su {page}. + Asks GitHub for the latest release. Nothing is downloaded or installed automatically. Chiede a GitHub qual è l'ultima versione. Nulla viene scaricato o installato automaticamente. + Download Scarica + Later Più tardi + none nessuno + Declared conformance: {shown} Conformità dichiarata: {shown} + Output intent: {list} Output intent: {list} + Conformance level: Livello di conformità: + No problems found: the document conforms to {level}. Nessun problema rilevato: il documento è conforme a {level}. + (page {p}) (pagina {p}) + · not fixable here · non correggibile qui + Verify Verifica + Box Riquadro + Units Unità + Set to zero Azzera + Current page ({n}) Pagina corrente ({n}) + Subset Sottoinsieme + Update Aggiorna + Add Aggiungi + {verb} Header and Footer {verb} intestazione e piè di pagina + {verb} Watermark {verb} filigrana + {verb} Background {verb} sfondo + Margins (in) Margini (in) + Left Header Text Testo intestazione a sinistra + Center Header Text Testo intestazione al centro + Right Header Text Testo intestazione a destra + Left Footer Text Testo piè di pagina a sinistra + Center Footer Text Testo piè di pagina al centro + Right Footer Text Testo piè di pagina a destra + Insert Page Number Inserisci numero di pagina + Insert Date Inserisci data + Start page number Numero di pagina iniziale + Source Origine + Fit to page Adatta alla pagina + Rotation Rotazione + Appear behind page Dietro la pagina + Appear on top of page Sopra la pagina + From colour Da colore + Page Range Options Opzioni intervallo di pagine + Preview: page {p} of {n} Anteprima: pagina {p} di {n} + Applies to 1 page Si applica a 1 pagina + Applies to {n} pages Si applica a {n} pagine + Replaces the existing one on those pages. Sostituisce quello esistente su queste pagine. + PDF or image PDF o immagine + No file chosen Nessun file scelto + Page number Numero di pagina + Scale relative to target page Scala relativa alla pagina di destinazione + Link Properties Proprietà collegamento + Create Link Crea collegamento + Link Appearance Aspetto collegamento + Link Type: Tipo di collegamento: + Visible Rectangle Rettangolo visibile + Invisible Rectangle Rettangolo invisibile + Highlight Style: Stile di evidenziazione: + Invert Inverti + Outline Contorno + Inset Incassato + Line Thickness: Spessore linea: + Thin Sottile + Thick Spesso + Line Style: Stile linea: + Solid Continua + Dashed Tratteggiata + Color: Colore: + Link Action Azione collegamento + Open a web page Apri una pagina web + Go to a page view Vai a una vista di pagina + Type the web address. Digita l'indirizzo web. + This document has no signatures. Questo documento non ha firme. + The Keychain's digital IDs couldn't be listed: {e} Impossibile elencare gli ID digitali del Portachiavi: {e} + Signed and saved to {path} Firmato e salvato in {path} + Couldn't open revision {n}: {e} Impossibile aprire la revisione {n}: {e} + Couldn't open the signed version: {e} Impossibile aprire la versione firmata: {e} + Sign with a Digital ID Firma con un ID digitale + Choose the digital ID that you want to use for signing: Scegli l'ID digitale da usare per firmare: + Keychain · Portachiavi · + Windows store · Archivio Windows · + Issued by: Rilasciato da: + , Expires: , Scadenza: + No digital IDs yet. Ancora nessun ID digitale. + Configure New Digital ID Configura nuovo ID digitale + Continue Continua + Configure a Digital ID for Signing Configura un ID digitale per la firma + Use a Digital ID from a file Usa un ID digitale da file + Create a new Digital ID (self-signed, saved to a password-protected file) Crea un nuovo ID digitale (autofirmato, salvato in un file protetto da password) + Name Nome + Organizational Unit Unità organizzativa + Organization Name Nome organizzazione + Email Address Indirizzo email + Country/Region Paese/area geografica + Key Algorithm Algoritmo della chiave + Confirm Password Conferma password + Valid for 5 years, for digital signatures. Self-signed IDs are usually not trusted by others. Valido 5 anni, per le firme digitali. Gli ID autofirmati di solito non sono considerati attendibili da altri. + File (.p12, .pfx) File (.p12, .pfx) + Digital ID ID digitale + Browse… Sfoglia… + {verb} as "{name}" {verb} come "{name}" + Certify Certifica + The signature will be invisible. La firma sarà invisibile. + Distinguished name Nome distinto + Labels Etichette + Permitted actions after certifying Azioni consentite dopo la certificazione + No changes allowed Nessuna modifica consentita + Annotations, form fill-in, and digital signatures Annotazioni, compilazione moduli e firme digitali + Form fill-in and digital signatures Compilazione moduli e firme digitali + The key is in the macOS Keychain, which may ask to allow PdfCraft to use it. La chiave si trova nel Portachiavi di macOS, che potrebbe chiedere di autorizzarne l'uso da parte di PdfCraft. + The key is in the Windows certificate store, which may ask to allow PdfCraft to use it. La chiave si trova nell'archivio certificati di Windows, che potrebbe chiedere di autorizzarne l'uso da parte di PdfCraft. + Digital ID password Password dell'ID digitale + Back Indietro + Validate all Convalida tutte + Sign this field… Firma questo campo… + Signature is valid: La firma è valida: + Signature validity is UNKNOWN: La validità della firma è SCONOSCIUTA: + Signature is INVALID: La firma NON È VALIDA: + Signature Details Dettagli firma + Reason Motivo + Signing time Ora della firma + Algorithm Algoritmo + Signer Firmatario + Issued by Rilasciato da + Valid Valido + Field Campo + Field: {field} on page {p} Campo: {field} a pagina {p} + Add to trusted certificates Aggiungi ai certificati attendibili + View signed version Visualizza versione firmata + Show certificate… Mostra certificato… + Export certificate… Esporta certificato… + Certificate Viewer Visualizzatore certificati + This dialog shows the details of a certificate and its chain. Questa finestra mostra i dettagli di un certificato e della sua catena. + Trust Attendibilità + Issued to Rilasciato a + Valid from Valido dal + Valid to Valido fino al + Intended usage Uso previsto + Any Qualsiasi + Version Versione + Serial number Numero di serie + Issuer Autorità emittente + Validity starts Inizio validità + Validity ends Fine validità + Public key Chiave pubblica + Key usage Utilizzo chiave + Not present Non presente + Self-signed Autofirmato + Edit Action Modifica azione + New Action Nuova azione + Action name: Nome azione: + Description: Descrizione: + Steps Passaggi + Add the steps this action runs, in order. Aggiungi in ordine i passaggi eseguiti da questa azione. + Add Step Aggiungi passaggio + An action with this name already exists. Esiste già un'azione con questo nome. + New Action… Nuova azione… + Edit… Modifica… + Add watermark Aggiungi filigrana + Add header Aggiungi intestazione + Add footer Aggiungi piè di pagina + Set document title Imposta titolo documento + Run a JavaScript Esegui un JavaScript + Prepare for Distribution Prepara per la distribuzione + Remove hidden information and flatten comments and form fields, so recipients see only the pages. Rimuove le informazioni nascoste e appiattisce commenti e campi modulo, così i destinatari vedono solo le pagine. + Optimize Scanned Documents Ottimizza documenti acquisiti + Make scans searchable, then make them smaller. Rende ricercabili le scansioni, poi ne riduce le dimensioni. + Add Page Numbers Aggiungi numeri di pagina + Number every page in the footer. Numera ogni pagina nel piè di pagina. + Mark as Confidential Contrassegna come riservato + A diagonal CONFIDENTIAL watermark on every page. Una filigrana diagonale RISERVATO su ogni pagina. + Sanitize Documents Ripulisci documenti + Remove hidden information, metadata, scripts and embedded content, and rewrite the files. Rimuove informazioni nascoste, metadati, script e contenuti incorporati, e riscrive i file. + Type text Digita testo + Text to insert Testo da inserire + Replacement text Testo sostitutivo + Edit text… Modifica testo… + Add a sticky note here Aggiungi qui una nota adesiva + {kind} Properties Proprietà {kind} + Appearance Aspetto + General Generale + Review History Cronologia revisione + This comment's appearance can't be changed yet. L'aspetto di questo commento non può ancora essere modificato. + Icon Icona + Thickness Spessore + Modified Modificato + No status has been set. Nessuno stato impostato. + Compare Files Confronta file + Old file: File precedente: + Open the older version first Apri prima la versione precedente + New file: File nuovo: + Text is compared word by word; the differences are shown on the new file. Il testo viene confrontato parola per parola; le differenze sono mostrate sul file nuovo. + Compare this file with an older version: Compare files… in All tools. Confronta questo file con una versione precedente: Confronta file… in Tutti gli strumenti. + No differences in the text. Nessuna differenza nel testo. + {n} {kind} {kind}: {n} + Inserted Inserito + Deleted Eliminato + Replaced Sostituito + Visual Visivo + Mark as comments Contrassegna come commenti + Report… Rapporto… + {kind} · page {p} {kind} · pagina {p} + Set Alternate Text Imposta testo alternativo + This document has no tagged figures. Questo documento non ha figure con tag. + on page {p} a pagina {p} + Figure {i} of {n}{page} Figura {i} di {n}{page} + No preview Nessuna anteprima + Alternate text Testo alternativo + Describe the figure Descrivi la figura + Decorative figure Figura decorativa + Previous figure Figura precedente + Next figure Figura successiva + Save & Close Salva e chiudi + Accessibility Checker Options Opzioni controllo accessibilità + Report Options Opzioni rapporto + Create accessibility report Crea rapporto di accessibilità + Page Range Intervallo di pagine + All pages in document Tutte le pagine del documento + Checking Options ({on} of 32 in all categories) Opzioni di controllo ({on} di 32 in tutte le categorie) + Show this dialog when the Checker starts Mostra questa finestra all'avvio del controllo + Select All Seleziona tutto + Clear All Deseleziona tutto + Start Checking Avvia controllo + This document hasn't been checked yet. Questo documento non è ancora stato controllato. + No issues found Nessun problema rilevato + 1 issue 1 problema + {n} issues {n} problemi + {label} (1 issue) {label} (1 problema) + {label} ({n} issues) {label} ({n} problemi) + Check again Controlla di nuovo + Report Rapporto + Show the accessibility report Mostra il rapporto di accessibilità + Collapse Comprimi + Expand Espandi + {rule} - {status} {rule} - {status} + Passed Superato + Failed Non superato + Needs manual check Richiede verifica manuale + Skipped Ignorato + Fix Correggi + Skip Rule Ignora regola + Explain Spiega + Check Again Controlla di nuovo + Show Report Mostra rapporto + Options… Opzioni… + Go to the page Vai alla pagina + Page Content Contenuto pagina + Forms Moduli + Alternate Text Testo alternativo + Tables Tabelle + Lists Elenchi + Headings Titoli + Accessibility permission flag Flag di autorizzazione all'accessibilità + Accessibility permission flag is set Il flag di autorizzazione all'accessibilità è impostato + Security settings must allow assistive technology to read the content ("Enable text access for screen reader devices"). Change the document's security to allow it. Le impostazioni di sicurezza devono consentire alle tecnologie assistive di leggere il contenuto ("Abilita l'accesso al testo per i lettori di schermo"). Modifica la protezione del documento per consentirlo. + Image-only PDF PDF di sole immagini + Document is not image-only PDF Il documento non è un PDF di sole immagini + Pages that are only pictures of text can't be read aloud or searched. Recognize text (OCR) to add a text layer. Le pagine che sono solo immagini di testo non possono essere lette ad alta voce né ricercate. Riconosci il testo (OCR) per aggiungere un livello di testo. + Document is tagged PDF Il documento è un PDF con tag + Tags give the document a logical structure that assistive technology follows. Tag the document (Automatically tag PDF). I tag danno al documento una struttura logica seguita dalle tecnologie assistive. Aggiungi i tag al documento (Aggiungi tag al PDF automaticamente). + Logical Reading Order Ordine di lettura logico + Document structure provides a logical reading order La struttura del documento fornisce un ordine di lettura logico + Check that the tags read in the order a sighted reader would. Use the Reading Order tool or the Tags panel to correct it. Verifica che i tag seguano l'ordine in cui leggerebbe un lettore vedente. Usa lo strumento Ordine di lettura o il pannello Tag per correggerlo. + Primary language Lingua principale + Text language is specified La lingua del testo è specificata + Screen readers choose their voice from the document's language. Set it in Document Properties > Advanced > Language. I lettori di schermo scelgono la voce in base alla lingua del documento. Impostala in Proprietà documento > Avanzate > Lingua. + Document title is showing in title bar Il titolo del documento è visibile nella barra del titolo + The window should show a meaningful title rather than the file name. Set a title and Initial View > Show: Document Title. La finestra dovrebbe mostrare un titolo significativo anziché il nome del file. Imposta un titolo e Vista iniziale > Mostra: Titolo documento. + Bookmarks are present in large documents Nei documenti lunghi sono presenti segnalibri + Documents of more than 20 pages need bookmarks for navigation. Add bookmarks for the main sections. I documenti di oltre 20 pagine richiedono segnalibri per la navigazione. Aggiungi segnalibri per le sezioni principali. + Color contrast Contrasto colore + Document has appropriate color contrast Il documento ha un contrasto colore adeguato + Text must contrast enough with its background for people with low vision. Check the colours by eye or with a contrast tool. Il testo deve contrastare a sufficienza con lo sfondo per le persone ipovedenti. Controlla i colori a occhio o con uno strumento di contrasto. + Tagged content Contenuto con tag + All page content is tagged Tutto il contenuto della pagina ha i tag + Everything on a page must be tagged or marked as an artifact (decoration, headers, footers). Tag the untagged content. Tutto ciò che si trova in una pagina deve avere un tag o essere contrassegnato come artefatto (decorazioni, intestazioni, piè di pagina). Aggiungi i tag al contenuto che ne è privo. + Tagged annotations Annotazioni con tag + All annotations are tagged Tutte le annotazioni hanno i tag + Comments, links and fields must be in the tag tree to be announced. Tag the annotations. Commenti, collegamenti e campi devono trovarsi nell'albero dei tag per essere annunciati. Aggiungi i tag alle annotazioni. + Tab order Ordine di tabulazione + Tab order is consistent with structure order L'ordine di tabulazione è coerente con l'ordine della struttura + Pages with links, comments or fields should tab in structure order. The fix sets each page's tab order to Use Document Structure. Le pagine con collegamenti, commenti o campi dovrebbero seguire l'ordine della struttura. La correzione imposta l'ordine di tabulazione di ogni pagina su Usa struttura del documento. + Character encoding Codifica dei caratteri + Reliable character encoding is provided È fornita una codifica dei caratteri affidabile + Fonts must map their characters to Unicode so text can be read and copied. Fix the fonts or recreate the PDF. I caratteri devono associare i propri glifi a Unicode perché il testo possa essere letto e copiato. Correggi i caratteri o ricrea il PDF. + Tagged multimedia Contenuti multimediali con tag + All multimedia objects are tagged Tutti gli oggetti multimediali hanno i tag + Video, sound and rich media must be tagged to be announced. Tag the multimedia annotations. Video, audio e rich media devono avere i tag per essere annunciati. Aggiungi i tag alle annotazioni multimediali. + Screen flicker Sfarfallio dello schermo + Page will not cause screen flicker La pagina non causa sfarfallio dello schermo + Animation that flashes can cause seizures. Check scripts and media for flicker. Le animazioni lampeggianti possono provocare crisi epilettiche. Controlla che script e contenuti multimediali non producano sfarfallio. + Scripts Script + No inaccessible scripts Nessuno script inaccessibile + Timed responses Risposte a tempo + Page does not require timed responses La pagina non richiede risposte a tempo + People may need more time to respond. Check that nothing has a time limit. Alcune persone possono avere bisogno di più tempo per rispondere. Verifica che nulla abbia un limite di tempo. + Navigation links Collegamenti di navigazione + Navigation links are not repetitive I collegamenti di navigazione non sono ripetitivi + Repeated navigation links should be skippable. Check links that appear on every page. I collegamenti di navigazione ripetuti dovrebbero poter essere saltati. Controlla i collegamenti presenti su ogni pagina. + Tagged form fields Campi modulo con tag + All form fields are tagged Tutti i campi modulo hanno i tag + Form fields must be in the tag tree (Form tags) to be announced. Tag the form fields. I campi modulo devono trovarsi nell'albero dei tag (tag Form) per essere annunciati. Aggiungi i tag ai campi modulo. + Field descriptions Descrizioni dei campi + All form fields have description Tutti i campi modulo hanno una descrizione + Each field needs a tooltip that says what to enter. Add one in Field Properties > General > Tooltip. Ogni campo richiede una descrizione comando che indichi cosa inserire. Aggiungila in Proprietà campo > Generale > Descrizione comando. + Figures alternate text Testo alternativo delle figure + Figures require alternate text Le figure richiedono un testo alternativo + Pictures need alternate text that describes them, or must be marked decorative. Add alternate text to each figure. Le immagini richiedono un testo alternativo che le descriva, oppure devono essere contrassegnate come decorative. Aggiungi il testo alternativo a ogni figura. + Nested alternate text Testo alternativo nidificato + Alternate text that will never be read Testo alternativo che non verrà mai letto + Alternate text inside an element that already has alternate text is never read. Remove the inner alternate text. Il testo alternativo all'interno di un elemento che ne ha già uno non viene mai letto. Rimuovi il testo alternativo interno. + Associated with content Associato al contenuto + Alternate text must be associated with some content Il testo alternativo deve essere associato a un contenuto + Alternate text on an element without page content is never reached. Remove it or attach the element to content. Il testo alternativo su un elemento privo di contenuto di pagina non viene mai raggiunto. Rimuovilo o associa l'elemento a un contenuto. + Hides annotation Nasconde l'annotazione + Alternate text should not hide annotation Il testo alternativo non deve nascondere l'annotazione + Alternate text on an element that contains a link or field hides that annotation from assistive technology. Move the alternate text. Il testo alternativo su un elemento che contiene un collegamento o un campo nasconde quell'annotazione alle tecnologie assistive. Sposta il testo alternativo. + Other elements alternate text Testo alternativo di altri elementi + Other elements that require alternate text Altri elementi che richiedono un testo alternativo + Formulas and similar non-text elements need alternate text. Add alternate text to them. Le formule e altri elementi non testuali simili richiedono un testo alternativo. Aggiungilo. + Rows Righe + TR must be a child of Table, THead, TBody, or TFoot TR deve essere figlio di Table, THead, TBody o TFoot + Table cells belong in a row. Fix the table's tags. Le celle di una tabella devono stare in una riga. Correggi i tag della tabella. + Headers Intestazioni + Tables should have headers Le tabelle dovrebbero avere intestazioni + Header cells (TH) tell listeners what each column or row holds. Mark the header cells. Le celle di intestazione (TH) indicano a chi ascolta cosa contiene ogni colonna o riga. Contrassegna le celle di intestazione. + Regularity Regolarità + Tables must contain the same number of columns in each row and rows in each column Le tabelle devono avere lo stesso numero di colonne in ogni riga e di righe in ogni colonna + Irregular tables confuse cell navigation. Give every row the same number of cells (counting spans). Le tabelle irregolari confondono la navigazione tra le celle. Dai a ogni riga lo stesso numero di celle (contando le celle unite). + Summary Riepilogo + Tables must have a summary Le tabelle devono avere un riepilogo + A summary describes the table's purpose and layout. Add a Summary attribute to each table. Il riepilogo descrive lo scopo e la struttura della tabella. Aggiungi un attributo Summary a ogni tabella. + List items Voci di elenco + LI must be a child of L LI deve essere figlio di L + List items belong in a list. Fix the list's tags. Le voci di elenco devono stare in un elenco. Correggi i tag dell'elenco. + Lbl and LBody Lbl e LBody + Lbl and LBody must be children of LI Lbl e LBody devono essere figli di LI + List labels and bodies belong in a list item. Fix the list's tags. Etichette e corpi dell'elenco devono stare in una voce di elenco. Correggi i tag dell'elenco. + Appropriate nesting Nidificazione appropriata + Heading levels shouldn't skip (an H1 followed by an H3). Retag the headings. I livelli dei titoli non dovrebbero saltare (un H1 seguito da un H3). Riassegna i tag ai titoli. + TH and TD TH e TD + TH and TD must be children of TR TH e TD devono essere figli di TR + Mark Page Range Contrassegna intervallo di pagine + Pages from Pagine da + Single word or phrase Singola parola o frase + Text to find Testo da trovare + Patterns Schemi + Phone Numbers Numeri di telefono + Email Addresses Indirizzi email + Credit Cards Carte di credito + Social Security Numbers Numeri di previdenza sociale (USA) + Dates Date + Text in images isn't found; recognise text (OCR) first. Il testo nelle immagini non viene trovato; esegui prima il riconoscimento del testo (OCR). + No matches. Nessuna corrispondenza. + {n} match(es) marked for redaction. Corrispondenze contrassegnate per l'oscuramento: {n}. + Redaction Tool Properties Proprietà strumento di oscuramento + Redacted area fill colour: Colore di riempimento dell'area oscurata: + Use overlay text Usa testo sovrapposto + Custom text: Testo personalizzato: + Font: Carattere: + Font size: Dimensione carattere: + Auto-size text to fit redaction region Adatta automaticamente il testo all'area oscurata + Font colour: Colore carattere: + Repeat overlay text Ripeti testo sovrapposto + Text alignment: Allineamento testo: + Center Centro + Apply redactions Applica oscuramenti + You are about to apply 1 redaction mark. Text, images and drawings under the marks, and comments and form fields that overlap them, are removed permanently. Stai per applicare 1 segno di oscuramento. Testo, immagini e disegni sotto il segno, e i commenti e i campi modulo che vi si sovrappongono, verranno rimossi definitivamente. + You are about to apply {n} redaction marks. Text, images and drawings under the marks, and comments and form fields that overlap them, are removed permanently. Stai per applicare {n} segni di oscuramento. Testo, immagini e disegni sotto i segni, e i commenti e i campi modulo che vi si sovrappongono, verranno rimossi definitivamente. + Save the document afterwards: saving rewrites the whole file so no trace of the removed content stays in it. Salva poi il documento: il salvataggio riscrive l'intero file, così non vi resta traccia del contenuto rimosso. + Select the items to remove from this document. Seleziona gli elementi da rimuovere da questo documento. + Metadata Metadati + File attachments File allegati + Comments and markups Commenti e annotazioni + Hidden text Testo nascosto + Hidden layers Livelli nascosti + Links, actions and JavaScripts Collegamenti, azioni e JavaScript + Private data of other applications Dati privati di altre applicazioni + None found Nessuno trovato + Form fields are flattened: their values stay visible. Saving rewrites the whole file. I campi modulo vengono appiattiti: i loro valori restano visibili. Il salvataggio riscrive l'intero file. + Remove Rimuovi + Sanitizing removes hidden information from the document: metadata, file attachments, comments, form fields (flattened), hidden text and layers, bookmarks, links, actions and scripts, and private application data. La pulizia rimuove le informazioni nascoste dal documento: metadati, file allegati, commenti, campi modulo (appiattiti), testo e livelli nascosti, segnalibri, collegamenti, azioni e script, e dati privati delle applicazioni. + Save the document afterwards; saving rewrites the whole file so nothing removed stays in it. Salva poi il documento; il salvataggio riscrive l'intero file, così non vi resta nulla di ciò che è stato rimosso. + Printer: Stampante: + Save as PDF Salva come PDF + {name} (default) {name} (predefinita) + Copies: Copie: + Collate Fascicola + Print in grayscale Stampa in scala di grigi + Two-sided: Fronte-retro: + Off Disattivato + Flip on long edge Rilegatura sul lato lungo + Flip on short edge Rilegatura sul lato corto + Paper: Carta: + Pages to Print Pagine da stampare + More options: Altre opzioni: + All pages in range Tutte le pagine dell'intervallo + Odd pages only Solo pagine dispari + Even pages only Solo pagine pari + Reverse pages Inverti ordine pagine + Page Sizing & Handling Dimensionamento e gestione pagine + Size Dimensione + Poster Poster + Multiple Multiple + Booklet Opuscolo + Fit Adatta + Shrink oversized pages Riduci pagine troppo grandi + Custom scale: Scala personalizzata: + Tile scale: Scala sezioni: + Overlap: Sovrapposizione: + Cut marks Segni di taglio + Pages per sheet: Pagine per foglio: + Page order: Ordine pagine: + Horizontal Orizzontale + Horizontal reversed Orizzontale invertito + Vertical Verticale + Vertical reversed Verticale invertito + Print page border Stampa bordo pagina + Auto-rotate pages Ruota pagine automaticamente + Booklet subset: Lati opuscolo: + Both sides Entrambi i lati + Front side only Solo fronte + Back side only Solo retro + Binding: Rilegatura: + Left Sinistra + Right Destra + Orientation: Orientamento: + Auto portrait/landscape Verticale/orizzontale automatico + Portrait Verticale + Landscape Orizzontale + Comments & Forms Commenti e moduli + Document Documento + Document and markups Documento e annotazioni + Document and stamps Documento e timbri + Form fields only Solo campi modulo + Previous sheet Foglio precedente + Next sheet Foglio successivo + No sheets Nessun foglio + Sheet {s} of {n} Foglio {s} di {n} + Removed 1 hidden item. Save to remove them from the file. Rimosso 1 elemento nascosto. Salva per eliminarlo dal file. + Removed {n} hidden items. Save to remove them from the file. Rimossi {n} elementi nascosti. Salva per eliminarli dal file. + Document sanitized. Save to finish: saving rewrites the whole file. Documento ripulito. Salva per completare: il salvataggio riscrive l'intero file. + Applied 1 redaction mark. Save to remove the content from the file. Applicato 1 segno di oscuramento. Salva per rimuovere il contenuto dal file. + Applied {n} redaction marks. Save to remove the content from the file. Applicati {n} segni di oscuramento. Salva per rimuovere il contenuto dal file. + JavaScript Console Console JavaScript + JavaScript is turned off (Preferences ▸ JavaScript). JavaScript è disattivato (Preferenze > JavaScript). + Output appears here. L'output compare qui. + Script Name: Nome script: + This document has no document-level scripts. Questo documento non ha script a livello di documento. + No form fields were detected Nessun campo modulo rilevato + Detected 1 form field Rilevato 1 campo modulo + Detected {n} form fields Rilevati {n} campi modulo + {field}: {e} {field}: {e} + Current page Pagina corrente + Selected pages Pagine selezionate + Document language Lingua del documento + Output Output + Searchable Image (Exact) Immagine ricercabile (esatta) + Adds invisible text over each word; the page image is not changed Aggiunge testo invisibile sopra ogni parola; l'immagine della pagina non viene modificata + Downsample to Sottocampiona a + Settings Impostazioni + Optional Facoltativo + Planned · {m} Pianificato · {m} + Planned for milestone {m} — open to see what it will include Pianificato per il traguardo {m}: apri per vedere cosa includerà + Coming in milestone {m}. Items marked Ready work today. In arrivo nel traguardo {m}. Le voci contrassegnate come Pronto funzionano già oggi. + 1 mark 1 segno + {n} marks {n} segni + Dynamic Dinamici + Sign Here Firma qui + Standard Business Commerciali standard + Choose a stamp, then click on the page to place it. Scegli un timbro, poi fai clic sulla pagina per posizionarlo. + Note Nota + Polyline Polilinea + Attachment Allegato + Callout Richiamo + Typewriter Macchina da scrivere + Checked Selezionato + Unchecked Non selezionato + Marked Contrassegnato + Locked Bloccato + Search comments Cerca nei commenti + Add a comment Aggiungi un commento + No comments yet. Ancora nessun commento. + Pick a tool in the quick bar, or type above. Scegli uno strumento nella barra rapida oppure scrivi qui sopra. + No comments match. Nessun commento corrispondente. + Unknown author Autore sconosciuto + No colour Nessun colore + Remove checkmark Rimuovi segno di spunta + Mark with checkmark Contrassegna con segno di spunta + Reply Rispondi + Add a reply Aggiungi una risposta + Post Pubblica + Page {label} Pagina {label} + {kind} — click to show it on the page {kind}: fai clic per mostrarlo sulla pagina + Set status Imposta stato + Copy text Copia testo + Properties… Proprietà… + Make Current Properties Default Imposta le proprietà correnti come predefinite + More options Altre opzioni + Sort by Ordina per + Author Autore + Type Tipo + Colour Colore + Show all comments Mostra tutti i commenti + Create PDF comment summary… Crea riepilogo commenti PDF… + Export all to data file… Esporta tutto in un file di dati… + Filter comments Filtra commenti + Status Stato + Accepted Accettato + Rejected Rifiutato + Cancelled Annullato + Completed Completato + Show all Mostra tutto + Yellow Giallo + Orange Arancione + Red Rosso + Pink Rosa + Purple Viola + Blue Blu + Light blue Azzurro + Green Verde + Gray Grigio + Black Nero + Bookmark options Opzioni segnalibri + Expand all bookmarks Espandi tutti i segnalibri + Expand top-level bookmarks Espandi segnalibri di primo livello + Collapse all bookmarks Comprimi tutti i segnalibri + New bookmark (⌘B) Nuovo segnalibro (⌘B) + This document has no bookmarks. Questo documento non ha segnalibri. + This document has no layers. Questo documento non ha livelli. + This document has no attachments. Questo documento non ha allegati. + Hide layer Nascondi livello + Show layer Mostra livello + Set layer visibility Imposta visibilità livello + on page {label} a pagina {label} + Save attachment… Salva allegato… + Open in a new tab Apri in una nuova scheda + This document has no pages. Questo documento non ha pagine. + Find text Trova testo + No matches Nessuna corrispondenza + Searching… {s}/{p} Ricerca in corso… {s}/{p} + {c} of {n}{more} {c} di {n}{more} + Previous (⇧⌘G) Precedente (⇧⌘G) + Next (⌘G) Successivo (⌘G) + Find options Opzioni di ricerca + Whole words only Solo parole intere + Case-sensitive Maiuscole/minuscole + Close (Esc) Chiudi (Esc) + Align Allinea + Top In alto + Bottom In basso + Center horizontally Centra orizzontalmente + Center vertically Centra verticalmente + Distribute Distribuisci + Horizontally Orizzontalmente + Vertically Verticalmente + Set Fields to Same Size Imposta campi alla stessa dimensione + Height Altezza + Width Larghezza + Both Entrambe + Duplicate… Duplica… + All pages Tutte le pagine + Odd pages Pagine dispari + Even pages Pagine pari + Landscape pages Pagine orizzontali + Portrait pages Pagine verticali + Move earlier Sposta prima + Move later Sposta dopo + Back to the document Torna al documento + Protect Using Password Proteggi con password + Requires user to enter a password for: Richiedi all'utente una password per: + Viewing Visualizzazione + Editing Modifica + Type Password Digita password + Re-type Password Ridigita password + Strength: {s} Complessità: {s} + Strong Forte + Medium Media + Weak Debole + Advanced Options {chevron} Opzioni avanzate {chevron} + Compatibility Compatibilità + Acrobat X and later (256-bit AES) Acrobat X e successivi (AES a 256 bit) + Acrobat 7.0 and later (128-bit AES) Acrobat 7.0 e successivi (AES a 128 bit) + Acrobat 5.0 and later (128-bit RC4) Acrobat 5.0 e successivi (RC4 a 128 bit) + Acrobat 3.0 and later (40-bit RC4) Acrobat 3.0 e successivi (RC4 a 40 bit) + Encrypt Cifra + All document contents Tutto il contenuto del documento + All document contents except metadata Tutto il contenuto del documento tranne i metadati + Printing allowed Stampa consentita + Low Resolution (150 dpi) Bassa risoluzione (150 dpi) + Changes allowed Modifiche consentite + Inserting, deleting, and rotating pages Inserimento, eliminazione e rotazione di pagine + Filling in form fields and signing existing signature fields Compilazione dei campi modulo e firma dei campi firma esistenti + Commenting, filling in form fields, and signing existing signature fields Commenti, compilazione dei campi modulo e firma dei campi firma esistenti + Any except extracting pages Tutte tranne l'estrazione di pagine + Enable copying of text, images, and other content Consenti la copia di testo, immagini e altri contenuti + Enable text access for screen reader devices for the visually impaired Abilita l'accesso al testo per i lettori di schermo per ipovedenti + Type a password. Digita una password. + The passwords don't match. Le password non corrispondono. + This compatibility level supports only plain ASCII passwords. Questo livello di compatibilità supporta solo password in ASCII semplice. + Anyone opening the document will need this password. It's applied when you save. Chiunque apra il documento avrà bisogno di questa password. Viene applicata al salvataggio. + The document opens without a password; this password is needed to change the restrictions. It's applied when you save. Il documento si apre senza password; questa password serve per modificare le restrizioni. Viene applicata al salvataggio. + Recover unsaved documents? Recuperare i documenti non salvati? + PdfCraft didn't shut down normally. These documents had changes that were autosaved: PdfCraft non è stato chiuso correttamente. Questi documenti avevano modifiche salvate automaticamente: + just now poco fa + {n} min ago {n} min fa + {n} h ago {n} h fa + · password-protected · protetto da password + Recover Recupera + Discard Scarta + Version {v} Versione {v} + A clean-room, open-source PDF application written in Rust. MIT OR Apache-2.0. Un'applicazione PDF clean-room e open source scritta in Rust. MIT OR Apache-2.0. + Part of Parte di + Summarize Options Opzioni di riepilogo + Choose a layout: Scegli un layout: + Comments only Solo commenti + Sort comments by: Ordina commenti per: + Create PDF Comment Summary Crea riepilogo commenti PDF + Revert to the previously saved version of “{name}”? Changes since then can't be undone afterwards. Ripristinare la versione salvata in precedenza di “{name}”? Le modifiche successive non potranno essere recuperate. + Number pages Numera pagine + Style Stile + None (prefix only) Nessuno (solo prefisso) + Prefix Prefisso + Start Inizio + Labels: {preview}. Later pages keep their labels. Etichette: {preview}. Le pagine successive mantengono le loro etichette. + Even and Odd Pages Pagine pari e dispari + Even Pages Only Solo pagine pari + Odd Pages Only Solo pagine dispari + Landscape and Portrait Pages Pagine orizzontali e verticali + Landscape Pages Pagine orizzontali + Portrait Pages Pagine verticali + Duplicate Field Duplica campo + Duplicate "{name}" onto: Duplica "{name}" su: + 1 page selected. 1 pagina selezionata. + {n} pages selected. {n} pagine selezionate. + Delete pages after extracting Elimina le pagine dopo l'estrazione + Extract pages as separate files Estrai le pagine come file separati + Rotate Pages Ruota pagine + Direction: Direzione: + Clockwise 90 degrees 90 gradi in senso orario + Counterclockwise 90 degrees 90 gradi in senso antiorario + 180 degrees 180 gradi + Pages: Pagine: + All Tutte + Selection Selezione + From Da + Rotate: Ruota: + Repairs Riparazioni + Repair log Registro riparazioni + Split document Dividi documento + Number of pages Numero di pagine + Pages per file Pagine per file + File size Dimensione file + At most Al massimo + Top-level bookmarks ({n}) Segnalibri di primo livello ({n}) + Before each selected page (select pages in Organize) Prima di ogni pagina selezionata (seleziona le pagine in Organizza) + Creates 1 file from {n} pages. Crea 1 file da {n} pagine. + Creates {f} files from {n} pages. Crea {f} file da {n} pagine. + Each file holds as many of the {n} pages as fit. Ogni file contiene quante più pagine possibile delle {n}. + Replace Pages Sostituisci pagine + Original: replace pages Originale: sostituisci le pagine + to a + to {n} a {n} + Replacement: pages of {name} Sostituzione: pagine di {name} + of {name} di {name} + Only the page content changes: links, comments, form fields and bookmarks on the original pages stay. Cambia solo il contenuto delle pagine: collegamenti, commenti, campi modulo e segnalibri delle pagine originali restano. + The replacement file doesn't have that many pages. Il file sostitutivo non ha così tante pagine. + Tagged PDF PDF con tag + Document Properties Proprietà documento + Description Descrizione + Initial View Vista iniziale + Security Sicurezza + Fonts Caratteri + Advanced Avanzate + Title Titolo + Subject Oggetto + Keywords Parole chiave + Application Applicazione + PDF producer Produttore PDF + Layout and Magnification Layout e ingrandimento + Navigation tab Scheda di navigazione + Page Only Solo pagina + Bookmarks Panel and Page Pannello segnalibri e pagina + Pages Panel and Page Pannello pagine e pagina + Attachments Panel and Page Pannello allegati e pagina + Layers Panel and Page Pannello livelli e pagina + Page layout Layout di pagina + Default Predefinito + Single Page Pagina singola + Single Page Continuous Pagina singola continua + Two-Up (Facing) Due pagine affiancate + Two-Up Continuous (Facing) Due pagine affiancate continue + Two-Up (Cover Page) Due pagine (copertina) + Two-Up Continuous (Cover Page) Due pagine continue (copertina) + Magnification Ingrandimento + Actual Size Dimensione reale + Fit Page Adatta alla pagina + Fit Width Adatta alla larghezza + Fit Height Adatta all'altezza + Fit Visible Adatta all'area visibile + Open to page Apri alla pagina + of {pages} di {pages} + Window Options Opzioni finestra + Resize window to initial page Ridimensiona la finestra alla pagina iniziale + Center window on screen Centra la finestra sullo schermo + Open in Full Screen mode Apri in modalità schermo intero + Show: Mostra: + File Name Nome file + Document Title Titolo documento + User Interface Options Opzioni interfaccia utente + Hide menu bar Nascondi barra dei menu + Hide toolbars Nascondi barre degli strumenti + Hide window controls Nascondi controlli della finestra + Security method Metodo di protezione + No security Nessuna protezione + Restrictions Restrizioni + None — everything is allowed Nessuna: tutto è consentito + Password security Protezione con password + Encryption Cifratura + Opened with Aperto con + — (protection is applied when you save) — (la protezione viene applicata al salvataggio) + Owner password (no restrictions apply) Password proprietario (nessuna restrizione applicata) + User password Password utente + Change settings… Modifica impostazioni… + Printing Stampa + Not allowed Non consentito + Allowed Consentito + High resolution Alta risoluzione + Low resolution Bassa risoluzione + Changing the document Modifica del documento + Document assembly Assemblaggio documento + Content copying Copia del contenuto + Content copying for accessibility Copia del contenuto per l'accessibilità + Commenting Commenti + Filling of form fields Compilazione dei campi modulo + No fonts are referenced by the pages. Le pagine non fanno riferimento ad alcun carattere. + PDF version Versione PDF + Location Posizione + Page size Dimensione pagina + Yes Sì + No No + Revisions Revisioni + View revision {n} Visualizza revisione {n} + Open the file as it was saved then Apri il file come era stato salvato allora + Binding Rilegatura + Left Edge Bordo sinistro + Right Edge Bordo destro + Language Lingua + Saved {place}: {before} → {after} ({pct}% smaller){detail} Salvato {place}: {before} → {after} ({pct}% in meno){detail} + Couldn't save the image: {e} Impossibile salvare l'immagine: {e} + Adding images arrives on the web with file pickers for images Sul web, l'aggiunta di immagini arriverà con i selettori di file per immagini + Replacing images on page {p} arrives on the web with image pickers ({i}) Sul web, la sostituzione di immagini a pagina {p} arriverà con i selettori di immagini ({i}) + {name}: choosing images arrives on the web with file pickers for images {name}: sul web, la scelta di immagini arriverà con i selettori di file per immagini + Replacing images arrives on the web with image file pickers Sul web, la sostituzione di immagini arriverà con i selettori di file immagine + Couldn't create a PDF: {e} Impossibile creare un PDF: {e} + The clipboard has no image or text Gli appunti non contengono immagini né testo + On the web, open or drop an image to convert it Sul web, apri o trascina un'immagine per convertirla + Couldn't optimize the file: {e} Impossibile ottimizzare il file: {e} + Couldn't write {path}: {e} Impossibile scrivere {path}: {e} + The form asks to be submitted to {u}; PdfCraft doesn't send form data. Save the document to keep your entries. Il modulo chiede di essere inviato a {u}; PdfCraft non invia dati dei moduli. Salva il documento per conservare i dati inseriti. + {s} actions run in the JavaScript engine (M6) Le azioni {s} vengono eseguite nel motore JavaScript (M6) + {name}: the {other} action isn't supported yet {name}: l'azione {other} non è ancora supportata + {name} submits the form to {url}; PdfCraft doesn't send form data. Save the document to keep your entries. {name} invia il modulo a {url}; PdfCraft non invia dati dei moduli. Salva il documento per conservare i dati inseriti. + Export stopped: {e} Esportazione interrotta: {e} + Exported 1 image Esportata 1 immagine + Exported {n} images Esportate {n} immagini + ({s} not exported: {first}) ({s} non esportate: {first}) + Exported the text of 1 page Esportato il testo di 1 pagina + Exported the text of {n} pages Esportato il testo di {n} pagine + {msg} to {dir} {msg} in {dir} + Exporting… {d} of {t} Esportazione… {d} di {t} + Choose a folder for the exported files Scegli una cartella per i file esportati + New {tool} comments will look like this one I nuovi commenti {tool} avranno questo aspetto + This document can't be checked: it couldn't be read for editing Impossibile controllare questo documento: non è stato possibile leggerlo per la modifica + The checker found no problems in this document. Il controllo non ha rilevato problemi in questo documento. + The checker found 1 problem which may prevent the document from being fully accessible. Il controllo ha rilevato 1 problema che potrebbe impedire al documento di essere pienamente accessibile. + The checker found {n} problems which may prevent the document from being fully accessible. Il controllo ha rilevato {n} problemi che potrebbero impedire al documento di essere pienamente accessibile. + The text is the same Il testo è identico + 1 difference found 1 differenza trovata + {n} differences found {n} differenze trovate + Added 1 comment Aggiunto 1 commento + Added {n} comments Aggiunti {n} commenti + Choose a folder for the results Scegli una cartella per i risultati + Files for {name} File per {name} + An action is already running Un'azione è già in esecuzione + Running action… file {d} of {t} Esecuzione azione… file {d} di {t} + No unlinked web addresses were found in the text Nel testo non sono stati trovati indirizzi web senza collegamento + Created 1 link Creato 1 collegamento + Created {n} links Creati {n} collegamenti + Text recognition is already running Il riconoscimento del testo è già in esecuzione + Optimizing… removing user data Ottimizzazione… rimozione dati utente + Optimizing… image {d} of {t} Ottimizzazione… immagine {d} di {t} + Optimizing… cleaning up Ottimizzazione… pulizia + Optimizing… merging identical objects Ottimizzazione… unione oggetti identici + Optimizing… writing the copy Ottimizzazione… scrittura della copia + Cancelling… Annullamento… + Optimization is already running L'ottimizzazione è già in esecuzione + Optimization cancelled Ottimizzazione annullata + Couldn't optimize the file Impossibile ottimizzare il file + Recognizing text… file {d} of {t} Riconoscimento testo… file {d} di {t} + Recognizing text… page {d} of {t} Riconoscimento testo… pagina {d} di {t} + Recognized 1 word Riconosciuta 1 parola + Recognized {n} words Riconosciute {n} parole + {words} on {pages} {words} in {pages} + ; 1 page already had text ; 1 pagina conteneva già testo + ; {n} pages already had text ; {n} pagine contenevano già testo + Recognized {w} words in 1 file Riconosciute {w} parole in 1 file + Recognized {w} words in {n} files Riconosciute {w} parole in {n} file + ; failed: {list} ; non riusciti: {list} + 1 file done 1 file completato + {n} files done {n} file completati + The selected area has been copied ({w} × {h} pixels) L'area selezionata è stata copiata ({w} × {h} pixel) + Couldn't take the snapshot: {e} Impossibile acquisire l'istantanea: {e} + Couldn't recover {name}: {e} Impossibile recuperare {name}: {e} + The document now conforms to {level}; save it to keep the changes Il documento ora è conforme a {level}; salvalo per mantenere le modifiche + Fixed what could be fixed; 1 problem remains Corretto il correggibile; rimane 1 problema + Fixed what could be fixed; {n} problems remain Corretto il correggibile; rimangono {n} problemi + Custom stamps arrive on the web with file pickers for images Sul web, i timbri personalizzati arriveranno con i selettori di file per immagini + {file} is too large for a stamp (at most {n} MB) {file} è troppo grande per un timbro (massimo {n} MB) + Sent to {printer} Inviato a {printer} + Sent to {printer}: {msg} Inviato a {printer}: {msg} + Choose a folder for the searchable files Scegli una cartella per i file ricercabili + Files are combined from top to bottom. Leave Pages empty to take every page. I file vengono combinati dall'alto verso il basso. Lascia vuoto Pagine per prendere tutte le pagine. + Unlock… Sblocca… + Select a password-protected file first Seleziona prima un file protetto da password + Enter the permissions password to allow combining Inserisci la password delle autorizzazioni per consentire la combinazione + Enter the password that opens it Inserisci la password che lo apre + Unlock {name} Sblocca {name} + Unlock {n} files Sblocca {n} file + The same password is tried on each file. La stessa password viene provata su ogni file. + Hide password Nascondi password + Show password Mostra password + Wrong password Password errata + The password is only used to read the file; it isn't saved. La password viene usata solo per leggere il file; non viene salvata. + Unlock Sblocca + Opened, but its security settings don't allow combining. Enter the permissions password. Aperto, ma le sue impostazioni di sicurezza non consentono la combinazione. Inserisci la password delle autorizzazioni. + Unlocked: the combined file won't be password-protected Sbloccato: il file combinato non sarà protetto da password + Unlocked {n} of {m} files Sbloccati {n} file su {m} + Drop PDFs or folders here, or choose them. Trascina qui PDF o cartelle, oppure sceglili. + Add folder… Aggiungi cartella… + Add folder and subfolders… Aggiungi cartella e sottocartelle… + More ways to add files Altri modi per aggiungere file + Every PDF in the folder Tutti i PDF nella cartella + Every PDF in the folder and the folders inside it Tutti i PDF nella cartella e nelle sue sottocartelle + Add folder Aggiungi cartella + Add folder and subfolders Aggiungi cartella e sottocartelle + No PDFs found in {folder} Nessun PDF trovato in {folder} + Added the first {n} PDFs in {folder} Aggiunti i primi {n} PDF di {folder} + Click to sort, drag to move the column. Drag its edge to resize it. Fai clic per ordinare, trascina per spostare la colonna. Trascinane il bordo per ridimensionarla. + Reset columns Reimposta colonne + Remove {n} files Rimuovi {n} file + {n} selected {n} selezionati + sorted ascending ordine crescente + sorted descending ordine decrescente + Protected: the combined file won't keep its security settings Protetto: il file combinato non manterrà le impostazioni di sicurezza + Add open documents Aggiungi documenti aperti + All open documents Tutti i documenti aperti + No documents are open Nessun documento aperto + Select a file first Seleziona prima un file + 1 file 1 file + {n} files {n} file + 1 file needs attention 1 file richiede attenzione + {n} files need attention {n} file richiedono attenzione + {name} can't be combined: {why} Impossibile combinare {name}: {why} + Check the pages of {name}: {why} Controlla le pagine di {name}: {why} + Add the PDFs to combine Aggiungi i PDF da combinare + File name Nome file + Warnings Avvisi + Drag to reorder Trascina per riordinare + {k} of {n} {k} di {n} + ? of {n} ? di {n} + Added more than once Aggiunto più volte + yesterday ieri + {n} days ago {n} giorni fa + No pages selected Nessuna pagina selezionata + Password-protected Protetto da password + Its security settings don't allow copying pages Le sue impostazioni di sicurezza non consentono di copiare le pagine + Can't be read: {e} Impossibile leggerlo: {e} + Includes unsaved changes Include modifiche non salvate + Pages of {name} to combine, e.g. 1-3, 6 Pagine di {name} da combinare, es. 1-3, 6 + Remove {name} Rimuovi {name} + Add files… Aggiungi file… + Add at least two files Aggiungi almeno due file + Couldn't add {name}: {e} Impossibile aggiungere {name}: {e} + Couldn't combine files: {e} Impossibile combinare i file: {e} + Export comments Esporta commenti + Export form data Esporta dati modulo + Comment and form data Dati di commenti e moduli + Export Esporta + Select data files to merge Seleziona i file di dati da unire + Form data and PDF forms Dati modulo e moduli PDF + Save the spreadsheet Salva il foglio di calcolo + Save the accessibility report Salva il rapporto di accessibilità + Save image Salva immagine + Export certificate Esporta certificato + Choose a folder for the extracted pages Scegli una cartella per le pagine estratte + Choose a folder for the split files Scegli una cartella per i file divisi + Couldn't use {name}: {e} Impossibile usare {name}: {e} + Couldn't extract pages: {e} Impossibile estrarre le pagine: {e} + Couldn't write {name}: {e} Impossibile scrivere {name}: {e} + Wrote 1 file to {dir} Scritto 1 file in {dir} + Wrote {n} files to {dir} Scritti {n} file in {dir} + No pages match those choices Nessuna pagina corrisponde a queste scelte + Couldn't split: {e} Impossibile dividere: {e} + Couldn't summarize comments: {e} Impossibile riepilogare i commenti: {e} + Couldn't open the result: {e} Impossibile aprire il risultato: {e} + Importing data arrives on the web with file pickers for data files Sul web, l'importazione dei dati arriverà con i selettori di file per i file di dati + Exported to {path} Esportato in {path} + Merging data files needs the desktop app L'unione dei file di dati richiede l'app desktop + Merged 1 file into {path} Unito 1 file in {path} + Merged {n} files into {path} Uniti {n} file in {path} + Combined {n} files Combinati {n} file + Extracted 1 page Estratta 1 pagina + Extracted {n} pages Estratte {n} pagine + Created a comment summary Creato un riepilogo dei commenti + Couldn't open {name}: {e} Impossibile aprire {name}: {e} + Couldn't read {name}: {e} Impossibile leggere {name}: {e} + Portable mode is off: {folder} can't be written ({error}). Settings are kept in your user folder instead. La modalità portatile è disattivata: impossibile scrivere in {folder} ({error}). Le impostazioni vengono invece conservate nella tua cartella utente. + Couldn't save: {e} Impossibile salvare: {e} + Downloading attachments on the web arrives with M3.10 ({n} bytes ready) Sul web, il download degli allegati arriverà con M3.10 ({n} byte pronti) + `{command}` {when} `{command}` {when} + ships in milestone {m} arriva nel traguardo {m} + needs an AI provider (off by default) richiede un fornitore IA (disattivato per impostazione predefinita) + is available è disponibile + is not available yet non è ancora disponibile + {label} failed: {e} Errore in {label}: {e} + Undid {label} Annullato: {label} + Redid {label} Ripetuto: {label} + A document needs at least one page: copy instead Un documento deve avere almeno una pagina: usa Copia + Cut {what} Tagliato: {what} + Copied {what} Copiato: {what} + 1 page 1 pagina + {n} pages {n} pagine + Copy or cut pages first Prima copia o taglia delle pagine + Couldn't save {name}: {e} Impossibile salvare {name}: {e} + Saved {name} {name} salvato + Saved, but reopening failed: {e} Salvato, ma la riapertura non è riuscita: {e} + Downloaded {name} {name} scaricato + Couldn't download {name}: {e} Impossibile scaricare {name}: {e} + Reverted to the last saved version Ripristinata l'ultima versione salvata + That didn't work: an internal error stopped it ({m}). Your documents are unchanged. Operazione non riuscita: un errore interno l'ha interrotta ({m}). I tuoi documenti non sono stati modificati. + Nothing to undo Niente da annullare + Nothing to redo Niente da ripetere + This document has no form fields you can fill in Questo documento non ha campi modulo compilabili + This document has no comments to flatten Questo documento non ha commenti da appiattire + This document has no form fields to flatten Questo documento non ha campi modulo da appiattire + There are no redaction marks (mark text, areas or pages first) Non ci sono segni di oscuramento (contrassegna prima testo, aree o pagine) + This document has no {kind} to change Questo documento non ha {kind} da modificare + header or footer intestazione o piè di pagina + watermark filigrana + background sfondo + This document isn't password-protected Questo documento non è protetto da password + Only the document's owner can change its security (open it with the permissions password) Solo il proprietario del documento può modificarne la protezione (aprilo con la password delle autorizzazioni) + The document's security settings don't allow this change Le impostazioni di sicurezza del documento non consentono questa modifica + Open a document first Apri prima un documento + Security will be removed when you save La protezione verrà rimossa al salvataggio + Click text or an image to edit it Fai clic su un testo o un'immagine per modificarlo + Drag a rectangle to create a link; double-click a link to edit it Trascina un rettangolo per creare un collegamento; fai doppio clic su un collegamento per modificarlo + There are no redaction marks to apply Non ci sono segni di oscuramento da applicare + Drag to draw the area where the signature should appear. Trascina per disegnare l'area in cui deve comparire la firma. + Couldn't fit the visible content: {e} Impossibile adattare il contenuto visibile: {e} + Drag a rectangle around the area to copy Trascina un rettangolo intorno all'area da copiare + Click on the page to add a {tool}, or drag to set its size {tool}: fai clic sulla pagina per aggiungerlo, oppure trascina per impostarne la dimensione + Drag a rectangle on a page to crop it; double-click a page for Set Page Boxes Trascina un rettangolo su una pagina per ritagliarla; fai doppio clic su una pagina per Imposta riquadri pagina + Keep tool selected: on Mantieni strumento selezionato: attivo + Keep tool selected Mantieni strumento selezionato + Opacity Opacità + Line thickness Spessore linea + What word or phrase would you like to search for? Quale parola o frase vuoi cercare? + Searching… {s} of {p} pages Ricerca in corso… {s} di {p} pagine + (searching… {s} of {p} pages) (ricerca in corso… {s} di {p} pagine) + 1 instance 1 occorrenza + {n} instances {n} occorrenze + Go to this result Vai a questo risultato + Highlight Evidenzia + Draw Disegna + Polygon Poligono + Connected lines Linee collegate + Eraser Gomma + Sign Firma + Certified by {by} Certificato da {by} + At least one signature is invalid. Almeno una firma non è valida. + Signed and all signatures are valid. Firmato e tutte le firme sono valide. + At least one signature has problems. Almeno una firma presenta problemi. + This document is secured. Some changes are restricted by its security settings. Questo documento è protetto. Alcune modifiche sono limitate dalle sue impostazioni di sicurezza. + This is a dynamic XFA form, which PdfCraft can't display yet. What you see is the file's placeholder page. Questo è un modulo XFA dinamico, che PdfCraft non è ancora in grado di visualizzare. Quella che vedi è la pagina segnaposto del file. + This form also contains XFA data, which PdfCraft doesn't read yet. You can fill its fields, but Acrobat may show the XFA values instead. Questo modulo contiene anche dati XFA, che PdfCraft non legge ancora. Puoi compilarne i campi, ma Acrobat potrebbe mostrare invece i valori XFA. + This document contains {n} interactive form fields. Questo documento contiene {n} campi modulo interattivi. + This file was damaged and has been repaired. Saving keeps the repaired version. Questo file era danneggiato ed è stato riparato. Il salvataggio mantiene la versione riparata. + Dismiss Ignora + Hide field highlights Nascondi evidenziazione campi + Highlight fields Evidenzia campi + Security settings Impostazioni di sicurezza + Details Dettagli + Select (V) Seleziona (V) + Hand (H) Mano (H) + Delete pages (Delete) Elimina pagine (Canc) + Insert a blank page after the selection Inserisci una pagina vuota dopo la selezione + Insert pages from a file… Inserisci pagine da un file… + Extract pages to a new document Estrai pagine in un nuovo documento + Split into files… Dividi in file… + Select pages Seleziona pagine + Cut Taglia + Copy Copia + Paste after Incolla dopo + Rename Rinomina + Set to current page ({n}) Imposta sulla pagina corrente ({n}) + Move up Sposta su + Move down Sposta giù + Indent Aumenta rientro + Outdent Riduci rientro + This document has no form fields. Questo documento non ha campi modulo. + Tab order: move a field with its arrows. Ordine di tabulazione: sposta un campo con le sue frecce. + Unplaced Non posizionato + Has JavaScript actions (run in M6) Ha azioni JavaScript (eseguite in M6) + Page Pagina + None Nessuno + Delete selected fields Elimina campi selezionati + Diagnostic details Dettagli diagnostici + The operation failed. L'operazione non è riuscita. + no such document documento inesistente + nothing to undo niente da annullare + nothing to redo niente da ripetere + this document is signed: rewriting it would invalidate its signatures (save it incrementally instead) questo documento è firmato: riscriverlo invaliderebbe le firme (salvalo invece in modo incrementale) + the document is protected by a password il documento è protetto da password + the password is incorrect la password non è corretta + the document has no page tree il documento non ha un albero delle pagine + a document must keep at least one page un documento deve conservare almeno una pagina + a bookmark cannot be moved inside itself un segnalibro non può essere spostato dentro se stesso + the title must not be empty il titolo non può essere vuoto + the document has no form fields il documento non ha campi modulo + there are no redaction marks to apply non ci sono segni di oscuramento da applicare + there are no pages to print non ci sono pagine da stampare + the document has no tags il documento non ha tag + {0}: {1} {0}: {1} + the image is empty l'immagine è vuota + this file isn't XFDF, FDF, XML or text form data questo file non contiene dati modulo XFDF, FDF, XML o di testo + nothing in the file matches this document nulla nel file corrisponde a questo documento + This page couldn't be displayed.\n{e} Impossibile visualizzare questa pagina.\n{e} + Go to page {p} Vai a pagina {p} + {s} action Azione {s} + Page {p} of {n} Pagina {p} di {n} + 1 page selected 1 pagina selezionata + {n} pages selected {n} pagine selezionate + {name} — unsaved changes {name}: modifiche non salvate + {kind} field Campo {kind} + Select a file for the stamp Seleziona un file per il timbro + JavaScript, e.g. getField("total").value JavaScript, es. getField("total").value + Font: Helvetica Carattere: Helvetica + e.g. en-US es. it-IT + Rendering: hayro (bootstrap) · UI: egui · Icons: Lucide (ISC) · Fonts: Inter, JetBrains Mono, Dancing Script (OFL) Rendering: hayro (bootstrap) · UI: egui · Icone: Lucide (ISC) · Caratteri: Inter, JetBrains Mono, Dancing Script (OFL) + CheckBox Casella di controllo + Radio Pulsante di opzione + PushButton Pulsante + Combo Casella combinata + List Elenco + Unknown Sconosciuto + The document has no XMP metadata Il documento non ha metadati XMP + The title in the metadata and the document information differ Il titolo nei metadati e nelle informazioni del documento non coincide + The document is encrypted Il documento è cifrato + Device colour is used, but there is no PDF/A output intent Viene usato un colore dipendente dal dispositivo, ma manca un output intent PDF/A + DeviceCMYK is used: it needs a CMYK output intent (not added automatically) Viene usato DeviceCMYK: richiede un output intent CMYK (non aggiunto automaticamente) + The document has additional actions (/AA) Il documento ha azioni aggiuntive (/AA) + The document has document-level JavaScript Il documento ha JavaScript a livello di documento + The form asks viewers to make appearances (NeedAppearances) Il modulo chiede ai visualizzatori di generare gli aspetti (NeedAppearances) + A form field has additional actions Un campo modulo ha azioni aggiuntive + A stream uses LZW compression Un flusso usa la compressione LZW + A stream refers to an external file Un flusso fa riferimento a un file esterno + An image asks to be interpolated Un'immagine richiede l'interpolazione + An image has alternates or OPI information Un'immagine ha alternative o informazioni OPI + PostScript XObjects aren't allowed Gli XObject PostScript non sono consentiti + Embedded files must be PDF/A files themselves (use PDF/A-3 for others) I file incorporati devono essere a loro volta file PDF/A (usa PDF/A-3 per gli altri) + An embedded file has no AFRelationship Un file incorporato non ha AFRelationship + Select Icon Seleziona icona + Choose images Scegli immagini + {dpi} pixels/inch {dpi} pixel/pollice + Type your {what}. Digita qui: {what}. + Draw your {what} below. Disegna qui sotto: {what}. + Your name Il tuo nome + Images and text (converted to PDF) Immagini e testo (convertiti in PDF) + Images and text Immagini e testo + Check Box Style: Stile casella di controllo: + Button Style: Stile pulsante: + Check Spunta + Circle Cerchio + Diamond Rombo + Square Quadrato + Star Stella + {month} {y} {month} {y} + Change {key} Modifica {key} + Insert pages from {name} Inserisci pagine da {name} + Fill in {name} Compila {name} + Set the image of {name} Imposta l'immagine di {name} + Edit script of {name} Modifica script di {name} + Import {name} Importa {name} + Add bookmark Aggiungi segnalibro + Rename bookmark Rinomina segnalibro + Delete bookmark Elimina segnalibro + Move bookmark Sposta segnalibro + Set bookmark destination Imposta destinazione segnalibro + Add stamp Aggiungi timbro + Delete comment Elimina commento + Edit comment Modifica commento + Erase Cancella + Lock comment Blocca commento + Unlock comment Sblocca commento + Move comment Sposta commento + Resize comment Ridimensiona commento + Change comment properties Modifica proprietà commento + Add field Aggiungi campo + Change field properties Modifica proprietà campo + Delete field Elimina campo + Duplicate field Duplica campo + Set tab order Imposta ordine di tabulazione + Change initial view Modifica vista iniziale + Set alternate text Imposta testo alternativo + Mark figure as decorative Contrassegna figura come decorativa + Run JavaScript Esegui JavaScript + Delete document JavaScript Elimina JavaScript del documento + Edit document JavaScript Modifica JavaScript del documento + Edit text Modifica testo + Move image Sposta immagine + Rotate image Ruota immagine + Flip image Capovolgi immagine + Delete image Elimina immagine + Add header & footer Aggiungi intestazione e piè di pagina + Update header & footer Aggiorna intestazione e piè di pagina + Update watermark Aggiorna filigrana + Add background Aggiungi sfondo + Update background Aggiorna sfondo + Add image Aggiungi immagine + Edit content Modifica contenuto + Delete content Elimina contenuto + Remove redaction marks Rimuovi segni di oscuramento + Add link Aggiungi collegamento + Change link properties Modifica proprietà collegamento + Delete link Elimina collegamento + Create link Crea collegamento + Flatten Appiattisci + Add sticky note Aggiungi nota adesiva + Add highlight Aggiungi evidenziazione + Add underline Aggiungi sottolineatura + Add strikethrough Aggiungi barrato + Add squiggly underline Aggiungi sottolineatura ondulata + Add rectangle Aggiungi rettangolo + Add oval Aggiungi ovale + Add arrow Aggiungi freccia + Add line Aggiungi linea + Add drawing Aggiungi disegno + Add text box Aggiungi casella di testo + Add checkmark Aggiungi segno di spunta + Add cross Aggiungi croce + Add dot Aggiungi punto + Add signature Aggiungi firma + Add redaction mark Aggiungi segno di oscuramento + Add cloud Aggiungi nuvola + Add polygon Aggiungi poligono + Add connected lines Aggiungi linee collegate + Add callout Aggiungi richiamo + Add inserted text Aggiungi testo inserito + Add file attachment Aggiungi file allegato + Set status Accepted Imposta stato Accettato + Set status Rejected Imposta stato Rifiutato + Set status Cancelled Imposta stato Annullato + Set status Completed Imposta stato Completato + Set status None Imposta stato Nessuno + Set status Unmarked Imposta stato Non contrassegnato + Save as PDF/A-1b Salva come PDF/A-1b + Save as PDF/A-2b Salva come PDF/A-2b + Save as PDF/A-3b Salva come PDF/A-3b + Fill & Sign: change signature Compila e firma: cambia firma + Fill & Sign: change initials Compila e firma: cambia iniziali + Fill & Sign: remove saved signature Compila e firma: rimuovi firma salvata + Fill & Sign: remove saved initials Compila e firma: rimuovi iniziali salvate + Change signature Cambia firma + Change initials Cambia iniziali + + Measure distance Misura distanza + Measure perimeter Misura perimetro + Measure area Misura area + Set measurement scale Imposta scala di misura + Measurement information Informazioni di misura + Measurement snapping Aggancio misure + Export measurements as CSV Esporta misure come CSV + Distance Distanza + Perimeter Perimetro + Area Area + Drawing scale Scala del disegno + Snapping Aggancio + Export measurements Esporta misure + Open a PDF to measure it. Apri un PDF per misurarlo. + Click vertices. Enter or double-click finishes a perimeter or area. Click the first point to close an area. Fai clic sui vertici. Invio o doppio clic termina un perimetro o un'area. Fai clic sul primo punto per chiudere un'area. + Shift constrains to 45 degrees. Backspace removes a vertex. Escape cancels. Maiusc vincola a 45 gradi. Backspace rimuove un vertice. Esc annulla. + Angle Angolo + Click the first point to begin. Fai clic sul primo punto per iniziare. + Snap to drawing Aggancia al disegno + Endpoints Estremi + Midpoints Punti medi + Intersections Intersezioni + Paths Tracciati + Sensitivity Sensibilità + Unit Unità + Decimals Decimali + Calibrate from two points Calibra da due punti + Entire page Pagina intera + Viewport rectangle in page points (x, y, width, height) Rettangolo della viewport in punti pagina (x, y, larghezza, altezza) + Viewport Viewport + Apply scale Applica scala + Saved measurements Misure salvate + Saved measurements. Misure salvate. + Endpoint Estremo + Midpoint Punto medio + Intersection Intersezione + Path Tracciato + This drawing exceeds the snapping limit; only the first paths are used. Questo disegno supera il limite di aggancio; vengono usati solo i primi tracciati. + Some page content couldn't be read; snapping uses the rest. Parte del contenuto della pagina non è leggibile; l'aggancio usa il resto. + Unsupported measurements Misure non supportate + Label Etichetta + {n} measurements use an unsupported format and are left out. {n} misure usano un formato non supportato e vengono escluse. + This area has too many overlapping paths; intersection snapping is limited. Quest'area ha troppi tracciati sovrapposti; l'aggancio alle intersezioni è limitato. + This measurement needs at least {n} points. Questa misura richiede almeno {n} punti. + Switch to two-page view first to show the cover page Passa prima alla visualizzazione doppia per mostrare la copertina + Page display: {layout} Visualizzazione pagina: {layout} + Fit to width scrolling Adatta alla larghezza con scorrimento + Fit one full page Adatta una pagina intera + Created a PDF from {n} files Creato un PDF da {n} file + PDF, images and text PDF, immagini e testo + Insert a file before page {label} Inserisci un file prima della pagina {label} + Insert a file at the end Inserisci un file alla fine + Save pages Salva pagine + Save these pages as one PDF Salva queste pagine come un unico PDF + No changes to save Nessuna modifica da salvare + Created a PDF from {n} files; left out: {names} Creato un PDF da {n} file; esclusi: {names} + Created a PDF from the first {n} files Creato un PDF dai primi {n} file + None of those files can be made into a PDF; use PDFs, images or .txt files Nessuno di questi file può essere convertito in PDF; usa PDF, immagini o file .txt + Choose a PNG or JPEG image (up to 4 MiB). Transparency is preserved. Scegli un'immagine PNG o JPEG (fino a 4 MiB). La trasparenza viene mantenuta. + Couldn't import the signature image: {e} Impossibile importare l'immagine della firma: {e} + Go to page… Vai alla pagina… + Change {what} Cambia {what} + Cut and stack Taglia e impila + Default workspace mode Modalità predefinita dell'area di lavoro + Documents and view Documenti e visualizzazione + Open email app Apri l'app di posta + Open link Apri collegamento + Open this web page? Aprire questa pagina web? + Scripts run in a sandbox without file or network access. A script that asks to open a web page needs your permission first. With JavaScript off, Acrobat's standard format, validate and calculate functions still work. Gli script vengono eseguiti in una sandbox senza accesso a file o rete. Uno script che chiede di aprire una pagina web ha prima bisogno della tua autorizzazione. Con JavaScript disattivato, le funzioni standard di formato, convalida e calcolo di Acrobat continuano a funzionare. + Sign yourself Firma tu stesso + Used when opening PDFs. An explicit launch or control mode takes precedence for the session. Usata all'apertura dei PDF. Una modalità di avvio o di controllo esplicita ha la precedenza per la sessione. + Write this email? Scrivere questa email? + {who} in this document wants to open this address in your browser: {who} in questo documento vuole aprire questo indirizzo nel browser: + {who} in this document wants to open your email app with this address: {who} in questo documento vuole aprire l'app di posta con questo indirizzo: + This web address mixes letters from different alphabets, a common way to imitate another site's name. Questo indirizzo web mescola lettere di alfabeti diversi, un modo comune per imitare il nome di un altro sito. + This web address uses letters from another alphabet, which can look like familiar ones. Questo indirizzo web usa lettere di un altro alfabeto, che possono sembrare simili a quelle familiari. + Create PDF from images Crea PDF da immagini + Selected image files: {count} File immagine selezionati: {count} + Use image resolution Usa la risoluzione dell'immagine + Use each image's embedded DPI; use 72 DPI when it is absent. Usa i DPI incorporati in ogni immagine; usa 72 DPI quando mancano. + Use 72 DPI (one point per pixel) Usa 72 DPI (un punto per pixel) + Use custom DPI Usa DPI personalizzati + DPI sets the printed page size without resampling the image. I DPI determinano la dimensione della pagina stampata senza ricampionare l'immagine. + Create Crea + Dynamic XFA form laid out from its template: {pages}, {fields}. Modulo XFA dinamico impaginato dal suo modello: {pages}, {fields}. + XFA form: its fields and its XFA data are kept in step, so other viewers show what you fill in. Modulo XFA: i suoi campi e i dati XFA restano allineati, così gli altri visualizzatori mostrano ciò che compili. + Default page display Visualizzazione pagina predefinita + Default zoom Ingrandimento predefinito + Used when a PDF doesn't ask for a layout or zoom. Continuous scrolling never snaps between pages. Usati quando un PDF non richiede un layout o un ingrandimento. Lo scorrimento continuo non si aggancia mai alle pagine. + Show Mostra + Sort Ordina + Reverse the order Inverti l'ordine + Grab bag Alla rinfusa + Table Tabella + Username Nome utente + Display name Nome visualizzato + Real name Nome reale + Name (A–Z) Nome (A–Z) + Merged PRs PR unite + PRs PR + Commits Commit + Lines added Righe aggiunte + +LOC +LOC + Lines deleted Righe eliminate + −LOC −LOC + Line delta Differenza righe + ΔLOC ΔLOC + Binary assets added Risorse binarie aggiunte + +Bin +Bin + Binary assets removed Risorse binarie rimosse + −Bin −Bin + First commit Primo commit + First Primo + Last commit Ultimo commit + Last Ultimo + No contributor data was built into this copy. Questa copia non include dati sui contributori. + No model credits were built into this copy. Questa copia non include riconoscimenti per i modelli. + {n} contributors · {c} commits {n} contributori · {c} commit + Company Azienda + Model Modello + % of all commits % di tutti i commit + Lines +/− Righe +/− + @{login}: {prs} PRs, {commits} commits, +{added} / −{deleted} lines (Δ {delta}), +{bin_added} / −{bin_deleted} binary assets, {first} – {last} @{login}: {prs} PR, {commits} commit, +{added} / −{deleted} righe (Δ {delta}), +{bin_added} / −{bin_deleted} risorse binarie, {first} – {last} +@plural {n} page|{n} pages {n} pagina|{n} pagine +@plural {n} field|{n} fields {n} campo|{n} campi + +# Labels added on main after this catalog was written (merged 2026-10-09) + A button Un pulsante + A link Un collegamento + A script Uno script + About Informazioni + Add {what} Aggiungi {what} + Align fields Allinea campi + Another file dialog is still open. Finish with it first. Un'altra finestra di selezione file è ancora aperta. Completala prima. + Basic constraints Vincoli di base + Butt Piatta + Change document properties Modifica le proprietà del documento + Clear Recent Files Cancella file recenti + Closed arrow Freccia chiusa + Contributors Collaboratori + Couldn't open the printer's preferences: {e} Impossibile aprire le preferenze della stampante: {e} + Couldn't show the file picker. Please try again. Impossibile mostrare la selezione file. Riprova. + Date format Formato data + Distribute fields Distribuisci campi + Files are combined in this order. Leave Pages empty to take every page. I file vengono uniti in quest'ordine. Lascia vuoto Pagine per prendere tutte le pagine. + Fill & Sign dates Date di Compila e firma + Flatten Fill & Sign when saving Appiattisci Compila e firma al salvataggio + H / Space (hold) H / Spazio (tieni premuto) + Home / End Home / Fine + Inserted text Testo inserito + Larger pages Pagine più grandi + Line ending Estremità della linea + Mark differences Contrassegna le differenze + Mark for redaction Contrassegna per l'oscuramento + Mark pages for redaction Contrassegna pagine per l'oscuramento + Match field sizes Uniforma dimensioni dei campi + Models Modelli + Only continue if you trust this document. An address can carry information from the document, such as what you typed into its form. Continua solo se ti fidi di questo documento. Un indirizzo può trasmettere informazioni del documento, come ciò che hai digitato nel modulo. + Open arrow Freccia aperta + Opens the printer driver's preferences. They are saved for every print from this computer; the copies, two-sided, grayscale and paper chosen here still apply. Apre le preferenze del driver della stampante. Vengono salvate per ogni stampa da questo computer; copie, fronte-retro, scala di grigi e carta scelti qui restano validi. + Pattern Schema + PdfCraft is drawing without a graphics processor, so it may be slow. Updating the graphics driver may help. PdfCraft sta disegnando senza un processore grafico, quindi potrebbe essere lento. Aggiornare il driver grafico può aiutare. + Place saved {what} Posiziona l'elemento salvato: {what} + Print single-sided. Keep the sheets in order, cut at the marks, then stack the piles left to right, top to bottom. Stampa solo fronte. Tieni i fogli in ordine, taglia sui segni, poi impila le pile da sinistra a destra, dall'alto in basso. + Printer properties Proprietà della stampante + Redo {action} Ripeti {action} + Remove from Recent Rimuovi dai recenti + Remove saved {what} Rimuovi l'elemento salvato: {what} + Remove {name} from Recent Rimuovi {name} dai recenti + Reopen the files that were open when PdfCraft last closed Riapri i file aperti alla chiusura precedente di PdfCraft + Reset page size Ripristina dimensione pagine + Reset to printer defaults Ripristina le impostazioni predefinite della stampante + Reverse closed arrow Freccia chiusa inversa + Reverse open arrow Freccia aperta inversa + Rotation: Rotazione: + Run form script Esegui script del modulo + SHA-1 digest Impronta SHA-1 + SHA-256 digest Impronta SHA-256 + Same as interface ({language}) Come l'interfaccia ({language}) + Scripted content must be usable with a keyboard and assistive technology. Check the document's scripts. Il contenuto con script deve essere utilizzabile con tastiera e tecnologie assistive. Controlla gli script del documento. + Scroll tabs left Scorri le schede a sinistra + Scroll tabs right Scorri le schede a destra + Slash Barra + Smaller pages Pagine più piccole + Squiggly Ondulata + Table rows belong directly in a table or its head, body or foot. Fix the table's tags. Le righe di tabella devono stare direttamente in una tabella o nella sua intestazione, corpo o piè. Correggi i tag della tabella. + Text recognition isn't installed: its model files are missing. Reinstall PdfCraft, or set PDFCRAFT_MODELS to the folder that holds them. Il riconoscimento del testo non è installato: mancano i file dei modelli. Reinstalla PdfCraft o imposta PDFCRAFT_MODELS sulla cartella che li contiene. + Text, marks and signatures become part of the page. Other comments stay editable. Testo, segni e firme diventano parte della pagina. Gli altri commenti restano modificabili. + That didn't work: an internal error stopped it ({m}). Non ha funzionato: un errore interno l'ha interrotto ({m}). + The Windows store's digital IDs couldn't be listed: {e} Impossibile elencare gli ID digitali dell'archivio di Windows: {e} + The document changed while you were choosing a file, so nothing was changed. Il documento è cambiato mentre sceglievi un file, quindi non è stato modificato nulla. + The document was closed before it could be saved. Il documento è stato chiuso prima che potesse essere salvato. + The pages were extracted but not deleted, because the document changed while you were choosing a folder. Le pagine sono state estratte ma non eliminate, perché il documento è cambiato mentre sceglievi una cartella. + The printer driver's own settings for this print: paper tray, paper type, finishing and more. Le impostazioni proprie del driver della stampante per questa stampa: vassoio, tipo di carta, finitura e altro. + The standard fonts can't draw “{c}” ({code}). Only Western European characters can be added as text for now. I font standard non possono disegnare «{c}» ({code}). Per ora si possono aggiungere come testo solo caratteri dell'Europa occidentale. + This printer offers no settings of its own. Questa stampante non offre impostazioni proprie. + Today: {date} Oggi: {date} + Undo {action} Annulla {action} + Use {what} Usa {what} + the text recognition models are not installed (reinstall PdfCraft, or set PDFCRAFT_MODELS to the folder that holds them) i modelli di riconoscimento del testo non sono installati (reinstalla PdfCraft o imposta PDFCRAFT_MODELS sulla cartella che li contiene) + yyyy or yy year · m or mm month · mmm or mmmm month name · d or dd day · ddd or dddd weekday. H, h, M, s and t are time letters and can't be used on their own: put {escape} before a letter to show it as is. yyyy o yy anno · m o mm mese · mmm o mmmm nome del mese · d o dd giorno · ddd o dddd giorno della settimana. H, h, M, s e t sono lettere dell'ora e non si possono usare da sole: metti {escape} prima di una lettera per mostrarla così com'è. + {chars} can't be written into the PDF yet: Fill & Sign text is Western European only. Pick a numeric format such as dd.mm.yyyy. {chars} non si può ancora scrivere nel PDF: il testo di Compila e firma è solo dell'Europa occidentale. Scegli un formato numerico come dd.mm.yyyy. + {who} in this document tried to open an address PdfCraft won't open: {e}. {who} in questo documento ha provato ad aprire un indirizzo che PdfCraft non apre: {e}. + {who} in this document tried to open an address PdfCraft won't open: {e}. Only web (http, https) and email (mailto) links open from documents. {who} in questo documento ha provato ad aprire un indirizzo che PdfCraft non apre: {e}. Dai documenti si aprono solo collegamenti web (http, https) ed e-mail (mailto). + Certificate authority Autorità di certificazione + End entity Entità finale +action wizard Start Avvia +certificate Subject Titolare +comment menu Edit Modifica +signature pad Type Digita diff --git a/crates/ui-egui/src/i18n/mod.rs b/crates/ui-egui/src/i18n/mod.rs index 5a05d3e3..5c3422ba 100644 --- a/crates/ui-egui/src/i18n/mod.rs +++ b/crates/ui-egui/src/i18n/mod.rs @@ -100,7 +100,7 @@ fn plural_ukrainian(n: u64) -> usize { } /// The registry. English first: it is the fallback and the source language. -pub static LANGUAGES: [LangInfo; 14] = [ +pub static LANGUAGES: [LangInfo; 15] = [ LangInfo { code: "en", name: "English", source: "", plural: plural_one_other, catalog: OnceLock::new() }, LangInfo { code: "ja", name: "日本語", source: include_str!("ja.tsv"), plural: plural_none, catalog: OnceLock::new() }, // Simplified Chinese; `zh`, `zh-CN`, `zh-SG` and `zh-Hans-*` locales resolve here (see `candidates`). @@ -127,6 +127,8 @@ pub static LANGUAGES: [LangInfo; 14] = [ LangInfo { code: "hu", name: "Magyar", source: include_str!("hu.tsv"), plural: plural_one_other, catalog: OnceLock::new() }, // Ukrainian; every `uk-*` locale (`uk-UA`, `uk_UA.UTF-8`) resolves here. LangInfo { code: "uk", name: "Українська", source: include_str!("uk.tsv"), plural: plural_ukrainian, catalog: OnceLock::new() }, + // Italian; every `it-*` locale (`it-IT`) resolves here. + LangInfo { code: "it", name: "Italiano", source: include_str!("it.tsv"), plural: plural_one_other, catalog: OnceLock::new() }, ]; impl LangInfo { @@ -719,6 +721,37 @@ mod tests { assert!(missing.is_empty(), "untranslated Japanese UI literals: {missing:#?}"); } + /// Italian translates every registered command and every All tools group, section and item. + #[test] + fn italian_covers_commands_and_catalogue() { + let it = Lang::from_code("it").expect("it registered"); + for command in pdfcraft_engine::commands::COMMANDS { + assert!(has(it, command.label), "missing command: {}", command.label); + if let Some(menu) = command.menu { + assert!(has(it, menu), "missing menu: {menu}"); + } + } + for group in pdfcraft_engine::catalog::TOOL_GROUPS { + assert!(has(it, group.label), "missing group: {}", group.label); + for section in group.sections { + assert!(has(it, section.title), "missing section: {}", section.title); + for item in section.items { + assert!(has(it, item.label), "missing item: {}", item.label); + } + } + } + } + + /// New tl!("literal") labels must not silently fall back to English in Italian. + #[test] + fn italian_covers_ui_literals() { + let it = Lang::from_code("it").expect("it registered"); + let literals = ui_literals(); + assert!(literals.len() > 900, "source scan found only {} literals", literals.len()); + let missing: Vec<_> = literals.iter().filter(|label| !has(it, label)).collect(); + assert!(missing.is_empty(), "untranslated Italian UI literals: {missing:#?}"); + } + /// With craft-fonts, every Japanese translation has glyphs: with all interface faces (desktop) /// and with BIZ UDPGothic Regular alone (the web build's only Japanese face). #[test] @@ -818,6 +851,78 @@ mod tests { assert_eq!(restored.language, "pt-br"); } + /// Brazilian Portuguese translates every registered command and every All tools group, section and item. + #[test] + fn brazilian_portuguese_covers_commands_and_catalogue() { + let pt = Lang::from_code("pt-br").expect("pt-br registered"); + for command in pdfcraft_engine::commands::COMMANDS { + assert!(has(pt, command.label), "missing command: {}", command.label); + if let Some(menu) = command.menu { + assert!(has(pt, menu), "missing menu: {menu}"); + } + } + for group in pdfcraft_engine::catalog::TOOL_GROUPS { + assert!(has(pt, group.label), "missing group: {}", group.label); + for section in group.sections { + assert!(has(pt, section.title), "missing section: {}", section.title); + for item in section.items { + assert!(has(pt, item.label), "missing item: {}", item.label); + } + } + } + } + + /// Check direct lookups and multiline literals as well as ordinary tl!("literal") calls, + /// following the complete-catalog check for Simplified Chinese. + #[test] + fn brazilian_portuguese_covers_ui_literals() { + let pt = Lang::from_code("pt-br").expect("pt-br registered"); + let mut stack = vec![std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("src")]; + let mut literals = std::collections::BTreeSet::new(); + while let Some(dir) = stack.pop() { + for entry in std::fs::read_dir(dir).expect("UI source directory") { + let path = entry.expect("UI source entry").path(); + if path.is_dir() { + if path.file_name().is_some_and(|name| name != "i18n") { + stack.push(path); + } + } else if path.extension().is_some_and(|ext| ext == "rs") { + let source = std::fs::read_to_string(path).expect("UI source file").replace("\r\n", "\n").replace("crate::i18n::t(", "tl!("); + let mut rest = source.split("#[cfg(test)]\nmod ").next().unwrap_or_default(); + while let Some((_, after)) = rest.split_once("tl!(") { + let after = after.trim_start(); + let Some(after) = after.strip_prefix('"') else { + rest = after; + continue; + }; + let mut escaped = false; + let end = after + .char_indices() + .find_map(|(i, c)| { + if c == '"' && !escaped { + return Some(i); + } + escaped = c == '\\' && !escaped; + None + }) + .expect("closed tl! literal"); + let (raw, tail) = after.split_at(end); + let closing = tail.strip_prefix('"').expect("closing quote").trim_start(); + let closing = closing.strip_prefix(',').unwrap_or(closing).trim_start(); + if closing.starts_with(')') { + let label: String = serde_json::from_str(&format!("\"{raw}\"")).expect("UI literal escapes"); + literals.insert(label); + } + rest = tail.strip_prefix('"').expect("closing quote"); + } + } + } + } + assert!(literals.len() > 900, "source scan found only {} literals", literals.len()); + let missing: Vec<_> = literals.iter().filter(|label| !has(pt, label)).collect(); + assert!(missing.is_empty(), "untranslated Brazilian Portuguese UI literals: {missing:#?}"); + } + #[test] fn spanish_is_registered() { let es = Lang::from_code("es").expect("es registered"); diff --git a/crates/ui-egui/src/i18n/pt-br.tsv b/crates/ui-egui/src/i18n/pt-br.tsv index 245f4a7d..bb047114 100644 --- a/crates/ui-egui/src/i18n/pt-br.tsv +++ b/crates/ui-egui/src/i18n/pt-br.tsv @@ -73,6 +73,1939 @@ PdfCraft is drawing without a graphics processor, so it may be slow. Updating the graphics driver may help. O PdfCraft está desenhando sem processador gráfico, por isso pode ficar lento. Atualizar o driver de vídeo pode ajudar. Go to page… Ir para a página… Reopen the files that were open when PdfCraft last closed Reabrir os arquivos que estavam abertos quando o PdfCraft foi fechado pela última vez + Open Abrir + Open file Abrir arquivo + Home Início + Fit to height Ajustar à altura + Zoom in Ampliar + Zoom out Reduzir + Rotate view clockwise Girar exibição no sentido horário + Rotate view counterclockwise Girar exibição no sentido anti-horário + Signatures panel Painel de assinaturas + Find tools and commands Localizar ferramentas e comandos + Cancel Cancelar + Close Fechar + Don't save Não salvar + Delete Excluir + Apply Aplicar + Run Executar + Sanitize Sanitizar + Mark all Marcar tudo + Save changes to “{name}” before closing? Salvar as alterações em “{name}” antes de fechar? + Your changes will be lost if you don't save them. Suas alterações serão perdidas se você não as salvar. + Password required Senha necessária + “{name}” is protected. Enter a password to open it. “{name}” está protegido. Digite uma senha para abri-lo. + Password Senha + Incorrect password. Try again. Senha incorreta. Tente novamente. + Export a PDF Exportar um PDF + Fill & Sign Preencher e assinar + Edit a PDF Editar um PDF + Create a PDF Criar um PDF + Combine files Combinar arquivos + Add comments Adicionar comentários + Scan & OCR Digitalizar e OCR + Protect a PDF Proteger um PDF + Redact a PDF Ocultar dados de um PDF + Compress a PDF Compactar um PDF + Add a stamp Adicionar um carimbo + Use a certificate Usar um certificado + Use print production Usar produção de impressão + Measure objects Medir objetos + Compare files Comparar arquivos + Use guided actions Usar ações guiadas + Prepare for accessibility Preparar para acessibilidade + Apply PDF standards Aplicar normas PDF + Add search index Adicionar índice de pesquisa + Use JavaScript Usar JavaScript + AI assistant Assistente de IA + Export to Exportar para + Fill Preencher + Modify page Modificar página + Add content Adicionar conteúdo + Create from Criar a partir de + Combine Combinar + Page options Opções de página + More Mais + Markup Marcação + Drawing Desenho + Review Revisão + Recognize text Reconhecer texto + Recognize Text Reconhecer texto + Delete selected fields Excluir campos selecionados + Password protection will be applied when you save A proteção por senha será aplicada ao salvar + Saved the print-ready PDF to {path} PDF pronto para impressão salvo em {path} + Could not save: {e} Não foi possível salvar: {e} + Earlier in tab order Mais acima na ordem de tabulação + Later in tab order Mais abaixo na ordem de tabulação + From: De: + To: Até: + High Resolution Alta resolução + Print Imprimir + Save as PDF/A Salvar como PDF/A + Verify to see what the document needs. Verifique para ver o que o documento precisa. + Set Page Boxes Definir limites da página + Signature panel Painel de assinaturas + {month} {day}, {y} {day} de {month} de {y} + The document's security settings don't allow filling in form fields As configurações de segurança do documento não permitem preencher campos de formulário + {name} is read-only {name} é somente leitura + {name} has no action {name} não possui ação + Previous month Mês anterior + Next month Próximo mês + January Janeiro + February Fevereiro + March Março + April Abril + May Maio + June Junho + July Julho + August Agosto + September Setembro + October Outubro + November Novembro + December Dezembro + Done Concluído + This certificate is in your list of trusted certificates. Este certificado está na sua lista de certificados confiáveis. + This certificate is trusted through a certificate above it in the chain. Este certificado é confiável por meio de um certificado acima dele na cadeia. + This certificate is not trusted. Signatures made with it show an unknown identity. Este certificado não é confiável. Assinaturas feitas com ele exibem uma identidade desconhecida. + Add to Trusted Certificates Adicionar aos certificados confiáveis + Export… Exportar… + PDF Optimizer Otimizador de PDF + Discard Objects Descartar objetos + Discard User Data Descartar dados do usuário + Clean Up Limpar + Color Images Imagens coloridas + Grayscale Images Imagens em escala de cinza + Bicubic downsampling to Redução bicúbica de amostragem para + for images above para imagens acima de + Compression Compactação + ZIP ZIP + Retain existing Manter existente + Minimum Mínimo + Low Baixo + High Alto + Maximum Máximo + Each image is measured where pages draw it; an image is replaced only if the result is smaller. Cada imagem é medida onde as páginas a desenham; uma imagem só é substituída se o resultado for menor. + Discard all links, actions and JavaScript Descartar todos os links, ações e JavaScript + Discard alternate images Descartar imagens alternativas + Discard embedded page thumbnails Descartar miniaturas de páginas incorporadas + Discard document tags Descartar marcas do documento + Discard embedded print settings Descartar configurações de impressão incorporadas + Discard bookmarks Descartar marcadores + Discard hidden layer content Descartar conteúdo de camadas ocultas + Discard all comments, forms and multimedia Descartar todos os comentários, formulários e multimídia + Discard document information and metadata Descartar informações e metadados do documento + Discard all object data (file attachments) Descartar todos os dados de objetos (anexos de arquivos) + Discard private data of other applications Descartar dados privados de outros aplicativos + Discard hidden text Descartar texto oculto + Use Flate to encode streams that are not encoded Usar Flate para codificar fluxos não codificados + Remove invalid links and bookmarks Remover links e marcadores inválidos + Remove unreferenced named destinations Remover destinos nomeados não referenciados + Compress document structure (object streams) Compactar estrutura do documento (fluxos de objetos) + Remove unused objects and merge identical ones Remover objetos não utilizados e mesclar os idênticos + Audit space usage… Auditar uso de espaço… + Space Audit Auditoria de espaço + Bytes Bytes + Content Streams Fluxos de conteúdo + X Object Forms Formulários XObject + Structure Info Informações da estrutura + Thumbnails Miniaturas + Named Destinations Destinos nomeados + Color Spaces Espaços de cores + Shadings Sombreamentos + Patterns (graphics objects) Padrões (objetos gráficos) + Extended Graphics States Estados gráficos estendidos + Embedded Files Arquivos incorporados + Document Overhead Sobrecarga do documento + Total Total + Text Field Properties Propriedades do campo de texto + Check Box Properties Propriedades da caixa de seleção + Radio Button Properties Propriedades do botão de opção + Dropdown Properties Propriedades do menu suspenso + List Box Properties Propriedades da caixa de listagem + Button Properties Propriedades do botão + Digital Signature Properties Propriedades da assinatura digital + Position Posição + Options Opções + Validate Validar + Calculate Calcular + Actions Ações + This field is locked. Unlock it to change its properties. Este campo está bloqueado. Desbloqueie-o para alterar suas propriedades. + Tooltip: Dica de ferramenta: + Common Properties Propriedades comuns + Read Only Somente leitura + Required Obrigatório + Font Size: Tamanho da fonte: + Text Color: Cor do texto: + Borders and Colors Bordas e cores + Border Color: Cor da borda: + Fill Color: Cor de preenchimento: + No color Sem cor + Beveled Chanfrado + Left: Esquerda: + Bottom: Inferior: + Width: Largura: + Height: Altura: + Points from the page's bottom-left corner. Pontos a partir do canto inferior esquerdo da página. + Alignment: Alinhamento: + Default Value: Valor padrão: + Multi-line Várias linhas + Scroll long text Rolar texto longo + Allow Rich Text Formatting Permitir formatação de rich text + Limit of Limite de + characters caracteres + Field is used for file selection O campo é usado para seleção de arquivo + Check spelling Verificar ortografia + Comb of Pente de + Export Value: {on} Valor de exportação: {on} + Check box is checked by default A caixa de seleção fica marcada por padrão + Button is checked by default O botão fica selecionado por padrão + Buttons with the same name and value are selected in unison Botões com o mesmo nome e valor são selecionados em conjunto + Item: Item: + Item List Lista de itens + Up Para cima + Delete {o} Excluir {o} + Add the choices people pick from. Adicione as opções para escolha dos usuários. + Default: Padrão: + (none) (nenhum) + Sort items Classificar itens + Allow user to enter custom text Permitir que o usuário insira texto personalizado + Multiple selection Seleção múltipla + Commit selected value immediately Confirmar valor selecionado imediatamente + Number Número + Percentage Porcentagem + Time Hora + Special Especial + Select format category: Selecione a categoria de formato: + The value is shown as typed. O valor é exibido como digitado. + Decimal places: Casas decimais: + Separator style: Estilo do separador: + Currency symbol: Símbolo da moeda: + Before the number Antes do número + Negative number style: Estilo de número negativo: + Format: Formato: + Custom: Personalizado: + Zip Code Código postal + Zip Code + 4 Código postal + 4 + Phone Number Número de telefone + Social Security Number Número de Seguro Social + Arbitrary Mask Máscara arbitrária + Mask: Máscara: + 9 digit, A letter, O letter or digit, X any character 9 dígito, A letra, O letra ou dígito, X qualquer caractere + Example: {sample} Exemplo: {sample} + Field value is not validated O valor do campo não é validado + Field value is in range: O valor do campo está no intervalo: + Add an Action Adicionar uma ação + Select Trigger: Selecionar acionador: + Mouse Up Botão do mouse liberado + Mouse Down Botão do mouse pressionado + Mouse Enter Cursor do mouse entra + Mouse Exit Cursor do mouse sai + On Focus Ao obter foco + On Blur Ao perder foco + Select Action: Selecionar ação: + Open a web link Abrir um link da web + Reset a form Redefinir um formulário + Execute a menu item Executar um item de menu + Show a field Exibir um campo + Hide a field Ocultar um campo + Submit a form Enviar um formulário + Fields to reset (comma-separated; empty: all) Campos a redefinir (separados por vírgula; vazio: todos) + Print, NextPage, PrevPage, FirstPage or LastPage Print, NextPage, PrevPage, FirstPage ou LastPage + Field names (comma-separated) Nomes dos campos (separados por vírgula) + URL to submit to URL para envio + Script: Script: + Value: Valor: + No actions Sem ações + Value is not calculated O valor não é calculado + Value is the O valor é + sum (+) soma (+) + product (x) produto (x) + average média + minimum mínimo + maximum máximo + of the following fields: dos seguintes campos: + Simplified field notation: Notação simplificada de campo: + Field names with + - * / and parentheses; put \\ before spaces in names. Nomes de campos com + - * / e parênteses; coloque \\ antes de espaços em nomes. + Format text Formatar texto + Bold Negrito + Italic Itálico + Align left Alinhar à esquerda + Centre Centralizar + Align right Alinhar à direita + Justify Justificar + Standard fonts; text outside Windows-1252 isn't supported yet. Fontes padrão; texto fora de Windows-1252 ainda não é suportado. + Edit image Editar imagem + Rotate counterclockwise Girar no sentido anti-horário + Rotate clockwise Girar no sentido horário + Flip horizontal Inverter horizontalmente + Flip vertical Inverter verticalmente + Replace image Substituir imagem + Crop (% trimmed from each side) Cortar (% aparado de cada lado) + Click on the page to add text; each click starts a new box, and ✓ finishes. Drag items to move them, drag a corner to resize, double-click text to edit it. Clique na página para adicionar texto; cada clique inicia uma nova caixa e ✓ conclui. Arraste itens para movê-los, arraste um canto para redimensionar, clique duas vezes no texto para editá-lo. + Choose an image Escolher uma imagem + Export to Image Exportar para imagem + Export to Text Exportar para texto + Export All Images Exportar todas as imagens + Resolution Resolução + Format Formato + Quality Qualidade + One {f} file per page, named after the document. Um arquivo {f} por página, nomeado de acordo com o documento. + Exclude images smaller than Excluir imagens menores que + No limit Sem limite + Each image once, named after the document and page. JPEG images are saved unchanged; others as PNG. Cada imagem uma vez, nomeada de acordo com o documento e a página. Imagens JPEG são salvas sem alterações; outras como PNG. + Plain text in reading order; pages are separated by form feeds. Texto sem formatação na ordem de leitura; páginas separadas por quebras de página. + Create {what} Criar {what} + initials iniciais + signature assinatura + Create Custom Stamp Criar carimbo personalizado + From {file} De {file} + Category: Categoria: + e.g. My stamps ex.: Meus carimbos + Name: Nome: + Custom Personalizado + Delete stamp Excluir carimbo + Create custom stamp… Criar carimbo personalizado… + From a PDF page or an image A partir de uma página de PDF ou de uma imagem + Line spacing Espaçamento entre linhas + Character spacing Espaçamento entre caracteres + Horizontal scale Escala horizontal + Rotate Clockwise Girar no sentido horário + Rotate Counterclockwise Girar no sentido anti-horário + Flip Horizontal Inverter horizontalmente + Flip Vertical Inverter verticalmente + Replace Image… Substituir imagem… + Save Image As… Salvar imagem como… + Check for updates Verificar atualizações + No check has run yet. Nenhuma verificação foi executada ainda. + Checking for a newer version… Verificando se há uma versão mais recente… + PdfCraft {v} is available. O PdfCraft {v} está disponível. + You have version {c}. Download the new version from its release page. Você tem a versão {c}. Baixe a nova versão na página de lançamentos. + PdfCraft {c} is up to date. O PdfCraft {c} está atualizado. + Couldn't check for updates: {e} Não foi possível verificar atualizações: {e} + You have version {c}. All releases are listed at {page}. Você tem a versão {c}. Todos os lançamentos estão listados em {page}. + Asks GitHub for the latest release. Nothing is downloaded or installed automatically. Consulta o GitHub para obter o lançamento mais recente. Nada é baixado ou instalado automaticamente. + Download Baixar + Later Mais tarde + none nenhum + Declared conformance: {shown} Conformidade declarada: {shown} + Output intent: {list} Intenção de saída: {list} + Conformance level: Nível de conformidade: + No problems found: the document conforms to {level}. Nenhum problema encontrado: o documento está em conformidade com {level}. + (page {p}) (página {p}) + · not fixable here · não corrigível aqui + Verify Verificar + Box Caixa + Units Unidades + Set to zero Definir como zero + Current page ({n}) Página atual ({n}) + Subset Subconjunto + Update Atualizar + Add Adicionar + {verb} Header and Footer {verb} cabeçalho e rodapé + {verb} Watermark {verb} marca-d'água + {verb} Background {verb} plano de fundo + Margins (in) Margens (pol) + Left Header Text Texto do cabeçalho à esquerda + Center Header Text Texto do cabeçalho centralizado + Right Header Text Texto do cabeçalho à direita + Left Footer Text Texto do rodapé à esquerda + Center Footer Text Texto do rodapé centralizado + Right Footer Text Texto do rodapé à direita + Insert Page Number Inserir número de página + Insert Date Inserir data + Start page number Número da página inicial + Source Origem + Fit to page Ajustar à página + Rotation Rotação + Appear behind page Exibir atrás da página + Appear on top of page Exibir sobre a página + From colour A partir da cor + Page Range Options Opções de intervalo de páginas + Preview: page {p} of {n} Pré-visualização: página {p} de {n} + Applies to 1 page Aplica-se a 1 página + Applies to {n} pages Aplica-se a {n} páginas + Replaces the existing one on those pages. Substitui o existente nessas páginas. + PDF or image PDF ou imagem + No file chosen Nenhum arquivo escolhido + Page number Número da página + Scale relative to target page Dimensionar em relação à página de destino + Link Properties Propriedades do link + Create Link Criar link + Link Appearance Aparência do link + Link Type: Tipo de link: + Visible Rectangle Retângulo visível + Invisible Rectangle Retângulo invisível + Highlight Style: Estilo de destaque: + Invert Inverter + Outline Contorno + Inset Rebaixo + Line Thickness: Espessura da linha: + Thin Fina + Thick Grossa + Line Style: Estilo da linha: + Solid Sólida + Dashed Tracejada + Color: Cor: + Link Action Ação do link + Open a web page Abrir uma página da web + Go to a page view Ir para uma exibição de página + Type the web address. Digite o endereço da web. + This document has no signatures. Este documento não possui assinaturas. + The Keychain's digital IDs couldn't be listed: {e} Não foi possível listar as IDs digitais do Chaveiro: {e} + Signed and saved to {path} Assinado e salvo em {path} + Couldn't open revision {n}: {e} Não foi possível abrir a revisão {n}: {e} + Couldn't open the signed version: {e} Não foi possível abrir a versão assinada: {e} + Sign with a Digital ID Assinar com uma ID digital + Choose the digital ID that you want to use for signing: Escolha a ID digital que deseja usar para assinar: + Keychain · Chaveiro · + Issued by: Emitido por: + , Expires: , Expira em: + No digital IDs yet. Nenhuma ID digital ainda. + Configure New Digital ID Configurar nova ID digital + Continue Continuar + Configure a Digital ID for Signing Configurar uma ID digital para assinatura + Use a Digital ID from a file Usar uma ID digital de um arquivo + Create a new Digital ID (self-signed, saved to a password-protected file) Criar uma nova ID digital (autoassinada, salva em arquivo protegido por senha) + Name Nome + Organizational Unit Unidade organizacional + Organization Name Nome da organização + Email Address Endereço de e-mail + Country/Region País/Região + Key Algorithm Algoritmo de chave + Confirm Password Confirmar senha + Valid for 5 years, for digital signatures. Self-signed IDs are usually not trusted by others. Válido por 5 anos, para assinaturas digitais. IDs autoassinadas geralmente não são confiáveis para terceiros. + File (.p12, .pfx) Arquivo (.p12, .pfx) + Digital ID ID digital + Browse… Procurar… + {verb} as "{name}" {verb} como "{name}" + Certify Certificar + The signature will be invisible. A assinatura será invisível. + Distinguished name Nome distinto + Labels Rótulos + Permitted actions after certifying Ações permitidas após a certificação + No changes allowed Nenhuma alteração permitida + Annotations, form fill-in, and digital signatures Anotações, preenchimento de formulário e assinaturas digitais + Form fill-in and digital signatures Preenchimento de formulário e assinaturas digitais + The key is in the macOS Keychain, which may ask to allow PdfCraft to use it. A chave está no Chaveiro do macOS, que pode solicitar permissão para o PdfCraft usá-la. + Digital ID password Senha da ID digital + Back Voltar + Validate all Validar tudo + Sign this field… Assinar este campo… + Signature is valid: A assinatura é válida: + Signature validity is UNKNOWN: A validade da assinatura é DESCONHECIDA: + Signature is INVALID: A assinatura é INVÁLIDA: + Signature Details Detalhes da assinatura + Reason Motivo + Signing time Hora da assinatura + Algorithm Algoritmo + Signer Signatário + Issued by Emitido por + Valid Válido + Field Campo + Field: {field} on page {p} Campo: {field} na página {p} + Add to trusted certificates Adicionar aos certificados confiáveis + View signed version Exibir versão assinada + Show certificate… Mostrar certificado… + Export certificate… Exportar certificado… + Certificate Viewer Visualizador de certificados + This dialog shows the details of a certificate and its chain. Esta caixa de diálogo mostra os detalhes de um certificado e sua cadeia. + Trust Confiança + Issued to Emitido para + Valid from Válido a partir de + Valid to Válido até + Intended usage Uso pretendido + Any Qualquer + Version Versão + Serial number Número de série + Issuer Emissor + Validity starts Início da validade + Validity ends Término da validade + Public key Chave pública + Key usage Uso da chave + Not present Não presente + Self-signed Autoassinado + Edit Action Editar ação + New Action Nova ação + Action name: Nome da ação: + Description: Descrição: + Steps Etapas + Add the steps this action runs, in order. Adicione as etapas que esta ação executa, em ordem. + Add Step Adicionar etapa + An action with this name already exists. Já existe uma ação com este nome. + New Action… Nova ação… + Edit… Editar… + Add watermark Adicionar marca-d'água + Add header Adicionar cabeçalho + Add footer Adicionar rodapé + Set document title Definir título do documento + Run a JavaScript Executar um JavaScript + Prepare for Distribution Preparar para distribuição + Remove hidden information and flatten comments and form fields, so recipients see only the pages. Remover informações ocultas e nivelar comentários e campos de formulário para que os destinatários vejam apenas as páginas. + Optimize Scanned Documents Otimizar documentos digitalizados + Make scans searchable, then make them smaller. Tornar digitalizações pesquisáveis e depois reduzir seu tamanho. + Add Page Numbers Adicionar números de página + Number every page in the footer. Numerar todas as páginas no rodapé. + Mark as Confidential Marcar como confidencial + A diagonal CONFIDENTIAL watermark on every page. Uma marca-d'água diagonal CONFIDENCIAL em todas as páginas. + Sanitize Documents Sanitizar documentos + Remove hidden information, metadata, scripts and embedded content, and rewrite the files. Remover informações ocultas, metadados, scripts e conteúdo incorporado, e regravar os arquivos. + Type text Digitar texto + Text to insert Texto a inserir + Replacement text Texto de substituição + Edit text… Editar texto… + Add a sticky note here Adicionar uma nota adesiva aqui + {kind} Properties Propriedades de {kind} + Appearance Aparência + General Geral + Review History Histórico de revisão + This comment's appearance can't be changed yet. A aparência deste comentário ainda não pode ser alterada. + Icon Ícone + Thickness Espessura + Modified Modificado + No status has been set. Nenhum status foi definido. + Compare Files Comparar arquivos + Old file: Arquivo antigo: + Open the older version first Abra a versão mais antiga primeiro + New file: Arquivo novo: + Text is compared word by word; the differences are shown on the new file. O texto é comparado palavra por palavra; as diferenças são exibidas no novo arquivo. + Compare this file with an older version: Compare files… in All tools. Compare este arquivo com uma versão mais antiga: Comparar arquivos… em Todas as ferramentas. + No differences in the text. Nenhuma diferença no texto. + {n} {kind} {n} {kind} + Inserted Inserido + Deleted Excluído + Replaced Substituído + Visual Visual + Mark as comments Marcar como comentários + Report… Relatório… + {kind} · page {p} {kind} · página {p} + Set Alternate Text Definir texto alternativo + This document has no tagged figures. Este documento não possui figuras marcadas. + on page {p} na página {p} + Figure {i} of {n}{page} Figura {i} de {n}{page} + No preview Sem pré-visualização + Alternate text Texto alternativo + Describe the figure Descreva a figura + Decorative figure Figura decorativa + Previous figure Figura anterior + Next figure Próxima figura + Save & Close Salvar e fechar + Accessibility Checker Options Opções do verificador de acessibilidade + Report Options Opções de relatório + Create accessibility report Criar relatório de acessibilidade + Page Range Intervalo de páginas + All pages in document Todas as páginas do documento + Checking Options ({on} of 32 in all categories) Opções de verificação ({on} de 32 em todas as categorias) + Show this dialog when the Checker starts Mostrar esta caixa de diálogo quando o Verificador iniciar + Select All Selecionar tudo + Clear All Limpar tudo + Start Checking Iniciar verificação + This document hasn't been checked yet. Este documento ainda não foi verificado. + No issues found Nenhum problema encontrado + 1 issue 1 problema + {n} issues {n} problemas + {label} (1 issue) {label} (1 problema) + {label} ({n} issues) {label} ({n} problemas) + Check again Verificar novamente + Report Relatório + Show the accessibility report Exibir o relatório de acessibilidade + Collapse Recolher + Expand Expandir + {rule} - {status} {rule} - {status} + Passed Aprovado + Failed Reprovado + Needs manual check Requer verificação manual + Skipped Ignorado + Fix Corrigir + Skip Rule Ignorar regra + Explain Explicar + Check Again Verificar novamente + Show Report Exibir relatório + Options… Opções… + Go to the page Ir para a página + Page Content Conteúdo da página + Forms Formulários + Alternate Text Texto alternativo + Tables Tabelas + Lists Listas + Headings Títulos + Accessibility permission flag Sinalizador de permissão de acessibilidade + Accessibility permission flag is set O sinalizador de permissão de acessibilidade está definido + Security settings must allow assistive technology to read the content ("Enable text access for screen reader devices"). Change the document's security to allow it. As configurações de segurança devem permitir que a tecnologia assistiva leia o conteúdo ("Ativar acesso a texto para dispositivos leitores de tela"). Altere a segurança do documento para permitir. + Image-only PDF PDF somente imagem + Document is not image-only PDF O documento não é um PDF somente imagem + Pages that are only pictures of text can't be read aloud or searched. Recognize text (OCR) to add a text layer. Páginas que são apenas imagens de texto não podem ser lidas em voz alta nem pesquisadas. Reconheça o texto (OCR) para adicionar uma camada de texto. + Document is tagged PDF O documento é um PDF marcado + Tags give the document a logical structure that assistive technology follows. Tag the document (Automatically tag PDF). As marcas dão ao documento uma estrutura lógica que a tecnologia assistiva segue. Marque o documento (Marcar PDF automaticamente). + Logical Reading Order Ordem lógica de leitura + Document structure provides a logical reading order A estrutura do documento fornece uma ordem lógica de leitura + Check that the tags read in the order a sighted reader would. Use the Reading Order tool or the Tags panel to correct it. Verifique se as marcas leem na ordem em que um leitor visual leria. Use a ferramenta Ordem de Leitura ou o painel Marcas para corrigir. + Primary language Idioma principal + Text language is specified O idioma do texto está especificado + Screen readers choose their voice from the document's language. Set it in Document Properties > Advanced > Language. Os leitores de tela escolhem sua voz a partir do idioma do documento. Defina-o em Propriedades do documento > Avançado > Idioma. + Document title is showing in title bar O título do documento é exibido na barra de título + The window should show a meaningful title rather than the file name. Set a title and Initial View > Show: Document Title. A janela deve mostrar um título significativo em vez do nome do arquivo. Defina um título e Exibição inicial > Mostrar: Título do documento. + Bookmarks are present in large documents Marcadores estão presentes em documentos grandes + Documents of more than 20 pages need bookmarks for navigation. Add bookmarks for the main sections. Documentos com mais de 20 páginas precisam de marcadores para navegação. Adicione marcadores para as seções principais. + Color contrast Contraste de cores + Document has appropriate color contrast O documento possui contraste de cores adequado + Text must contrast enough with its background for people with low vision. Check the colours by eye or with a contrast tool. O texto deve contrastar suficientemente com o fundo para pessoas com baixa visão. Verifique as cores visualmente ou com uma ferramenta de contraste. + Tagged content Conteúdo marcado + All page content is tagged Todo o conteúdo da página está marcado + Everything on a page must be tagged or marked as an artifact (decoration, headers, footers). Tag the untagged content. Tudo em uma página deve ser marcado ou definido como artefato (decorações, cabeçalhos, rodapés). Marque o conteúdo não marcado. + Tagged annotations Anotações marcadas + All annotations are tagged Todas as anotações estão marcadas + Comments, links and fields must be in the tag tree to be announced. Tag the annotations. Comentários, links e campos devem estar na árvore de marcas para serem anunciados. Marque as anotações. + Tab order Ordem de tabulação + Tab order is consistent with structure order A ordem de tabulação é consistente com a ordem da estrutura + Pages with links, comments or fields should tab in structure order. The fix sets each page's tab order to Use Document Structure. Páginas com links, comentários ou campos devem tabular na ordem da estrutura. A correção define a ordem de tabulação de cada página como Usar Estrutura do Documento. + Character encoding Codificação de caracteres + Reliable character encoding is provided Uma codificação de caracteres confiável é fornecida + Fonts must map their characters to Unicode so text can be read and copied. Fix the fonts or recreate the PDF. As fontes devem mapear seus caracteres para Unicode para que o texto possa ser lido e copiado. Corrija as fontes ou recrie o PDF. + Tagged multimedia Multimídia marcada + All multimedia objects are tagged Todos os objetos multimídia estão marcados + Video, sound and rich media must be tagged to be announced. Tag the multimedia annotations. Vídeo, som e rich media devem ser marcados para serem anunciados. Marque as anotações de multimídia. + Screen flicker Cintilação de tela + Page will not cause screen flicker A página não causará cintilação de tela + Animation that flashes can cause seizures. Check scripts and media for flicker. Animações que piscam podem causar convulsões. Verifique scripts e mídias quanto a cintilação. + Scripts Scripts + No inaccessible scripts Nenhum script inacessível + Timed responses Respostas cronometradas + Page does not require timed responses A página não requer respostas cronometradas + People may need more time to respond. Check that nothing has a time limit. Pessoas podem precisar de mais tempo para responder. Verifique se nada possui limite de tempo. + Navigation links Links de navegação + Navigation links are not repetitive Os links de navegação não são repetitivos + Repeated navigation links should be skippable. Check links that appear on every page. Links de navegação repetidos devem poder ser ignorados. Verifique links que aparecem em todas as páginas. + Tagged form fields Campos de formulário marcados + All form fields are tagged Todos os campos de formulário estão marcados + Form fields must be in the tag tree (Form tags) to be announced. Tag the form fields. Os campos de formulário devem estar na árvore de marcas (marcas Form) para serem anunciados. Marque os campos de formulário. + Field descriptions Descrições dos campos + All form fields have description Todos os campos de formulário têm descrição + Each field needs a tooltip that says what to enter. Add one in Field Properties > General > Tooltip. Cada campo precisa de uma dica informando o que inserir. Adicione uma em Propriedades do campo > Geral > Dica de ferramenta. + Figures alternate text Texto alternativo de figuras + Figures require alternate text Figuras requerem texto alternativo + Pictures need alternate text that describes them, or must be marked decorative. Add alternate text to each figure. Imagens precisam de texto alternativo que as descreva ou devem ser marcadas como decorativas. Adicione texto alternativo a cada figura. + Nested alternate text Texto alternativo aninhado + Alternate text that will never be read Texto alternativo que nunca será lido + Alternate text inside an element that already has alternate text is never read. Remove the inner alternate text. Texto alternativo dentro de um elemento que já possui texto alternativo nunca é lido. Remova o texto alternativo interno. + Associated with content Associado ao conteúdo + Alternate text must be associated with some content O texto alternativo deve estar associado a algum conteúdo + Alternate text on an element without page content is never reached. Remove it or attach the element to content. Texto alternativo em um elemento sem conteúdo de página nunca é alcançado. Remova-o ou anexe o elemento ao conteúdo. + Hides annotation Oculta anotação + Alternate text should not hide annotation O texto alternativo não deve ocultar a anotação + Alternate text on an element that contains a link or field hides that annotation from assistive technology. Move the alternate text. O texto alternativo em um elemento que contém um link ou campo oculta essa anotação da tecnologia assistiva. Mova o texto alternativo. + Other elements alternate text Texto alternativo de outros elementos + Other elements that require alternate text Outros elementos que requerem texto alternativo + Formulas and similar non-text elements need alternate text. Add alternate text to them. Fórmulas e elementos similares sem texto precisam de texto alternativo. Adicione texto alternativo a eles. + Rows Linhas + TR must be a child of Table, THead, TBody, or TFoot TR deve ser filho de Table, THead, TBody ou TFoot + Table cells belong in a row. Fix the table's tags. Células de tabela pertencem a uma linha. Corrija as marcas da tabela. + Headers Cabeçalhos + Tables should have headers Tabelas devem ter cabeçalhos + Header cells (TH) tell listeners what each column or row holds. Mark the header cells. Células de cabeçalho (TH) informam aos ouvintes o que cada coluna ou linha contém. Marque as células de cabeçalho. + Regularity Regularidade + Tables must contain the same number of columns in each row and rows in each column Tabelas devem conter o mesmo número de colunas em cada linha e linhas em cada coluna + Irregular tables confuse cell navigation. Give every row the same number of cells (counting spans). Tabelas irregulares confundem a navegação pelas células. Atribua a cada linha o mesmo número de células (contando mesclagens). + Summary Resumo + Tables must have a summary Tabelas devem ter um resumo + A summary describes the table's purpose and layout. Add a Summary attribute to each table. Um resumo descreve o propósito e o layout da tabela. Adicione um atributo Summary a cada tabela. + List items Itens de lista + LI must be a child of L LI deve ser filho de L + List items belong in a list. Fix the list's tags. Itens de lista pertencem a uma lista. Corrija as marcas da lista. + Lbl and LBody Lbl e LBody + Lbl and LBody must be children of LI Lbl e LBody devem ser filhos de LI + List labels and bodies belong in a list item. Fix the list's tags. Rótulos e corpos de lista pertencem a um item de lista. Corrija as marcas da lista. + Appropriate nesting Aninhamento apropriado + Heading levels shouldn't skip (an H1 followed by an H3). Retag the headings. Os níveis de título não devem pular (um H1 seguido por um H3). Remarque os títulos. + TH and TD TH e TD + TH and TD must be children of TR TH e TD devem ser filhos de TR + Mark Page Range Marcar intervalo de páginas + Pages from Páginas de + Single word or phrase Palavra ou frase única + Text to find Texto a localizar + Patterns Padrões + Phone Numbers Números de telefone + Email Addresses Endereços de e-mail + Credit Cards Cartões de crédito + Social Security Numbers Números de Seguro Social + Dates Datas + Text in images isn't found; recognise text (OCR) first. Texto em imagens não é encontrado; reconheça o texto (OCR) primeiro. + No matches. Nenhuma correspondência. + {n} match(es) marked for redaction. {n} correspondência(s) marcada(s) para ocultação. + Redaction Tool Properties Propriedades da ferramenta de ocultação + Redacted area fill colour: Cor de preenchimento da área ocultada: + Use overlay text Usar texto de sobreposição + Custom text: Texto personalizado: + Font: Fonte: + Font size: Tamanho da fonte: + Auto-size text to fit redaction region Ajustar tamanho do texto automaticamente à região de ocultação + Font colour: Cor da fonte: + Repeat overlay text Repetir texto de sobreposição + Text alignment: Alinhamento do texto: + Center Centralizar + Apply redactions Aplicar ocultações + You are about to apply 1 redaction mark. Text, images and drawings under the marks, and comments and form fields that overlap them, are removed permanently. Você está prestes a aplicar 1 marca de ocultação. Textos, imagens e desenhos sob as marcas, e comentários e campos de formulário sobrepostos a elas, são removidos permanentemente. + You are about to apply {n} redaction marks. Text, images and drawings under the marks, and comments and form fields that overlap them, are removed permanently. Você está prestes a aplicar {n} marcas de ocultação. Textos, imagens e desenhos sob as marcas, e comentários e campos de formulário sobrepostos a elas, são removidos permanentemente. + Save the document afterwards: saving rewrites the whole file so no trace of the removed content stays in it. Salve o documento em seguida: salvar regrava todo o arquivo para que nenhum vestígio do conteúdo removido permaneça nele. + Select the items to remove from this document. Selecione os itens a serem removidos deste documento. + Metadata Metadados + File attachments Anexos de arquivos + Comments and markups Comentários e marcações + Hidden text Texto oculto + Hidden layers Camadas ocultas + Links, actions and JavaScripts Links, ações e JavaScripts + Private data of other applications Dados privados de outros aplicativos + None found Nenhum encontrado + Form fields are flattened: their values stay visible. Saving rewrites the whole file. Os campos de formulário são nivelados: seus valores permanecem visíveis. Salvar regrava todo o arquivo. + Remove Remover + Sanitizing removes hidden information from the document: metadata, file attachments, comments, form fields (flattened), hidden text and layers, bookmarks, links, actions and scripts, and private application data. Sanitizar remove informações ocultas do documento: metadados, anexos de arquivos, comentários, campos de formulário (nivelados), texto e camadas ocultos, marcadores, links, ações e scripts, e dados privados de aplicativos. + Save the document afterwards; saving rewrites the whole file so nothing removed stays in it. Salve o documento em seguida; salvar regrava todo o arquivo para que nada removido permaneça nele. + Printer: Impressora: + Save as PDF Salvar como PDF + {name} (default) {name} (padrão) + Copies: Cópias: + Collate Agrupar + Print in grayscale Imprimir em escala de cinza + Two-sided: Frente e verso: + Off Desativado + Flip on long edge Virar na borda longa + Flip on short edge Virar na borda curta + Paper: Papel: + Pages to Print Páginas a imprimir + More options: Mais opções: + All pages in range Todas as páginas no intervalo + Odd pages only Apenas páginas ímpares + Even pages only Apenas páginas pares + Reverse pages Ordem inversa das páginas + Page Sizing & Handling Dimensionamento e manuseio de página + Size Tamanho + Poster Pôster + Multiple Múltiplas + Booklet Livreto + Fit Ajustar + Shrink oversized pages Reduzir páginas com tamanho excessivo + Custom scale: Escala personalizada: + Tile scale: Escala de ladrilho: + Overlap: Sobreposição: + Cut marks Marcas de corte + Pages per sheet: Páginas por folha: + Page order: Ordem das páginas: + Horizontal Horizontal + Horizontal reversed Horizontal invertida + Vertical Vertical + Vertical reversed Vertical invertida + Print page border Imprimir borda da página + Auto-rotate pages Girar páginas automaticamente + Booklet subset: Subconjunto do livreto: + Both sides Ambos os lados + Front side only Apenas frente + Back side only Apenas verso + Binding: Encadernação: + Left Esquerda + Right Direita + Orientation: Orientação: + Auto portrait/landscape Retrato/paisagem automático + Portrait Retrato + Landscape Paisagem + Comments & Forms Comentários e formulários + Document Documento + Document and markups Documento e marcações + Document and stamps Documento e carimbos + Form fields only Apenas campos de formulário + Previous sheet Folha anterior + Next sheet Próxima folha + No sheets Sem folhas + Sheet {s} of {n} Folha {s} de {n} + Removed 1 hidden item. Save to remove them from the file. 1 item oculto removido. Salve para removê-lo do arquivo. + Removed {n} hidden items. Save to remove them from the file. {n} itens ocultos removidos. Salve para removê-los do arquivo. + Document sanitized. Save to finish: saving rewrites the whole file. Documento sanitizado. Salve para concluir: salvar regrava todo o arquivo. + Applied 1 redaction mark. Save to remove the content from the file. 1 marca de ocultação aplicada. Salve para remover o conteúdo do arquivo. + Applied {n} redaction marks. Save to remove the content from the file. {n} marcas de ocultação aplicadas. Salve para remover o conteúdo do arquivo. + JavaScript Console Console JavaScript + JavaScript is turned off (Preferences ▸ JavaScript). O JavaScript está desativado (Preferências > JavaScript). + Output appears here. A saída aparece aqui. + Document JavaScripts JavaScripts do documento + Script Name: Nome do script: + This document has no document-level scripts. Este documento não possui scripts em nível de documento. + Scripts run in a sandbox without file or network access. With JavaScript off, Acrobat's standard format, validate and calculate functions still work. Os scripts são executados em um sandbox sem acesso a arquivos ou rede. Com o JavaScript desativado, as funções padrão de formatação, validação e cálculo do Acrobat ainda funcionam. + No form fields were detected Nenhum campo de formulário foi detectado + Detected 1 form field 1 campo de formulário detectado + Detected {n} form fields {n} campos de formulário detectados + {field}: {e} {field}: {e} + Page navigation Navegação na página + Previous view Exibição anterior + Next view Próxima exibição + Page display Exibição de página + Continuous scrolling Rolagem contínua + Two-page view Exibição de duas páginas + Single page Página única + Show cover page in two-page view Mostrar página de capa na exibição de duas páginas + Use system setting Usar configuração do sistema + Light gray Cinza-claro + Dark gray Cinza-escuro + Current page Página atual + Document language Idioma do documento + Output Saída + Searchable Image (Exact) Imagem pesquisável (Exata) + Adds invisible text over each word; the page image is not changed Adiciona texto invisível sobre cada palavra; a imagem da página não é alterada + Downsample to Reduzir amostragem para + Settings Configurações + Protect Proteger + Advanced options Opções avançadas + Redact Ocultar dados + Optimize Otimizar + Fields Campos + Add form components Adicionar componentes de formulário + Stamps Carimbos + Certificates Certificados + Print production Produção de impressão + Measure Medir + Compare Comparar + Actions list Lista de ações + Accessibility Acessibilidade + Standards Padrões + Index Índice + Bring your own model (off by default) Traga seu próprio modelo (desativado por padrão) + Single file Arquivo único + Multiple files Vários arquivos + Images Imagens + Clipboard Área de transferência + Blank page Página em branco + Add files to combine Adicionar arquivos para combinar + Page grid Grade da página + Rotate Girar + Insert Inserir + Replace Substituir + Split Dividir + Set page boxes Definir limites da página + Page labels Rótulos de página + Page transitions Transições de página + Sticky note Nota adesiva + Highlight text Realçar texto + Underline Sublinhado + Strikethrough Tachado + Squiggly underline Sublinhado ondulado + Text box Caixa de texto + Draw freehand Desenho livre + Rectangle Retângulo + Oval Oval + Line Linha + Arrow Seta + Cloud Nuvem + Stamp Carimbo + Comment list Lista de comentários + Flatten comments Nivelar comentários + In this file Neste arquivo + In multiple files Em vários arquivos + Enhance scanned file Aprimorar arquivo digitalizado + Correct recognized text Corrigir texto reconhecido + Protect with password Proteger com senha + Remove hidden information Remover informações ocultas + Encrypt with certificate Criptografar com certificado + Security properties Propriedades de segurança + Redact text and images Ocultar texto e imagens + Redact pages Ocultar páginas + Find text and redact Localizar texto e ocultar + Set properties Definir propriedades + Sanitize document Sanitizar documento + Reduce file size Reduzir tamanho do arquivo + Advanced optimization Otimização avançada + Audit space usage Auditar uso de espaço + Field list Lista de campos + Field properties Propriedades do campo + Tab order by rows Ordem de tabulação por linhas + Tab order by columns Ordem de tabulação por colunas + Flatten form fields Nivelar campos de formulário + Import data Importar dados + Export data Exportar dados + Text field Campo de texto + Checkbox Caixa de seleção + Radio button Botão de opção + Drop-down list Lista suspensa + List box Caixa de listagem + Button Botão + Image field Campo de imagem + Date field Campo de data + Digital signature Assinatura digital + Stamp palette Paleta de carimbos + Timestamp Carimbo de data/hora + Validate all signatures Validar todas as assinaturas + Certify (visible signature) Certificar (assinatura visível) + Certify (invisible signature) Certificar (assinatura invisível) + Output preview Pré-visualização de saída + Preflight Preflight + Convert colors Converter cores + Add printer marks Adicionar marcas de impressora + Fix hairlines Corrigir linhas finas + Measuring tool Ferramenta de medição + Geospatial location Localização geoespacial + Select files to compare Selecionar arquivos para comparar + Action Wizard Assistente de ações + Make accessible Tornar acessível + Prepare for distribution Preparar para distribuição + Optimize scanned documents Otimizar documentos digitalizados + Archive documents Arquivar documentos + Automatically tag PDF Marcar PDF automaticamente + Change reading options Alterar opções de leitura + Open accessibility report Abrir relatório de acessibilidade + Add alternate text Adicionar texto alternativo + Fix reading order Corrigir ordem de leitura + Manage embedded index Gerenciar índice incorporado + Console Console + Document actions Ações do documento + Summarize Resumir + Ask about this document Perguntar sobre este documento + Translate Traduzir + Optional Opcional + Ready Pronto + Available Disponível + Planned · {m} Planejado · {m} + Planned for milestone {m} — open to see what it will include Planejado para o marco {m} — abra para ver o que incluirá + Optional: needs an AI provider you configure Opcional: necessita de um provedor de IA configurado por você + Coming in milestone {m}. Items marked Ready work today. Previsto para o marco {m}. Itens marcados como Pronto já funcionam hoje. + 1 mark 1 marca + {n} marks {n} marcas + Back to all tools Voltar para todas as ferramentas + Close panel Fechar painel + View more Ver mais + View less Ver menos + Edit fields Editar campos + Preview Pré-visualizar + Try the form as people filling it in will see it Experimente o formulário como as pessoas que o preenchem verão + Dynamic Dinâmico + Sign Here Assine aqui + Standard Business Negócios padrão + Choose a stamp, then click on the page to place it. Escolha um carimbo e clique na página para posicioná-lo. + Redact all Ocultar tudo + Clear all Limpar tudo + Add text Adicionar texto + Checkmark Marca de seleção + Cross Cruz + Dot Ponto + Date Data + Signature Assinatura + Initials Iniciais + Rotate pages Girar páginas + Insert pages Inserir páginas + Extract pages Extrair páginas + Extract Extrair + Edit text & images Editar texto e imagens + Text Texto + Image Imagem + Header and footer Cabeçalho e rodapé + Watermark Marca-d'água + Link Link + Bates numbering Numeração Bates + Background Plano de fundo + Attach file Anexar arquivo + Export all images Exportar todas as imagens + Image (PNG) Imagem (PNG) + Text (plain) Texto (simples) + HTML web page Página da Web HTML + Rich Text Format (.rtf) Formato Rich Text (.rtf) + Comments Comentários + Bookmarks Marcadores + Page thumbnails Miniaturas de página + Form fields Campos de formulário + Layers Camadas + Attachments Anexos + Signatures Assinaturas + Accessibility Checker Verificador de acessibilidade + Zoom out (⌘−) Diminuir zoom (⌘−) + Zoom in (⌘+) Aumentar zoom (⌘+) + Rotate view clockwise (⇧⌘+) Girar visualização em sentido horário (⇧⌘+) + Toggle fit page / fit width Alternar ajustar à página / ajustar à largura + Next page Próxima página + Previous page Página anterior + Current page — type a page number or label (such as iv) and press Enter Página atual — digite o número da página ou rótulo (como iv) e pressione Enter + Open a PDF (⌘O) Abrir um PDF (⌘O) + Dark gray theme Tema cinza escuro + Light theme Tema claro + Print (⌘P) Imprimir (⌘P) + Save (M4) Salvar (M4) + Document properties (⌘D) Propriedades do documento (⌘D) + Action Wizard… Assistente de ações… + Add Bates numbering… Adicionar numeração Bates… + Add a button Adicionar um botão + Add a callout Adicionar uma chamada + Add a checkbox Adicionar uma caixa de seleção + Add a date field Adicionar um campo de data + Add a digital signature field Adicionar um campo de assinatura digital + Add a drop-down list Adicionar uma lista suspensa + Add a list box Adicionar uma caixa de listagem + Add a radio button Adicionar um botão de opção + Add a sticky note Adicionar uma nota adesiva + Add a text box Adicionar uma caixa de texto + Add a text field Adicionar um campo de texto + Add alternate text… Adicionar texto alternativo… + Add an image field Adicionar um campo de imagem + Add image… Adicionar imagem… + Add or edit links Adicionar ou editar links + Apply redactions… Aplicar ocultações… + Attach a file Anexar um arquivo + Change reading options… Alterar opções de leitura… + Check for accessibility Verificar acessibilidade + Clear redaction marks Limpar marcas de ocultação + Compare files… Comparar arquivos… + Create links from URLs Criar links a partir de URLs + Detect form fields Detectar campos de formulário + Draw a cloud Desenhar uma nuvem + Draw a line Desenhar uma linha + Draw a polygon Desenhar um polígono + Draw a rectangle Desenhar um retângulo + Draw an arrow Desenhar uma seta + Draw an oval Desenhar uma elipse + Draw connected lines Desenhar linhas conectadas + Erase drawings Apagar desenhos + Export all comments to data file… Exportar todos os comentários para arquivo de dados… + Export form data… Exportar dados de formulário… + Field properties… Propriedades do campo… + Fill & Sign: add text Preencher e assinar: adicionar texto + Fill & Sign: checkmark Preencher e assinar: marca de seleção + Fill & Sign: cross Preencher e assinar: cruz + Fill & Sign: date Preencher e assinar: data + Fill & Sign: dot Preencher e assinar: ponto + Fill & Sign: initials Preencher e assinar: rubrica + Fill & Sign: line Preencher e assinar: linha + Fill & Sign: sign Preencher e assinar: assinar + Find text and redact… Localizar texto e ocultar… + Hide all comments Ocultar todos os comentários + Import comments… Importar comentários… + Import form data… Importar dados de formulário… + Insert text Inserir texto + Merge data files into spreadsheet… Mesclar arquivos de dados em planilha… + Optimize scanned documents… Otimizar documentos digitalizados… + Prepare for distribution… Preparar para distribuição… + Recognize text in multiple files… Reconhecer texto em vários arquivos… + Redact pages… Ocultar páginas… + Redaction properties… Propriedades da ocultação… + Remove all links Remover todos os links + Remove background Remover plano de fundo + Remove header & footer Remover cabeçalho e rodapé + Remove hidden information… Remover informações ocultas… + Remove watermark Remover marca-d'água + Replace text Substituir texto + Sanitize document… Sanitizar documento… + Squiggly underline text Sublinhado ondulado no texto + Strikethrough text Texto tachado + Summarize comments Resumir comentários + Tab order: by columns Ordem de tabulação: por colunas + Tab order: by document structure Ordem de tabulação: por estrutura do documento + Tab order: by rows Ordem de tabulação: por linhas + Underline text Sublinhar texto + Update background… Atualizar plano de fundo… + Update header & footer… Atualizar cabeçalho e rodapé… + Update watermark… Atualizar marca-d'água… + Note Nota + Polyline Polilinha + Attachment Anexo + Callout Chamada + Typewriter Máquina de escrever + Checked Marcado + Unchecked Desmarcado + Marked Marcado + Locked Bloqueado + Search comments Pesquisar comentários + Add a comment Adicionar um comentário + No comments yet. Nenhum comentário ainda. + Pick a tool in the quick bar, or type above. Escolha uma ferramenta na barra rápida ou digite acima. + No comments match. Nenhum comentário corresponde. + Unknown author Autor desconhecido + No colour Sem cor + Remove checkmark Remover marca de seleção + Mark with checkmark Marcar com marca de seleção + Reply Responder + Add a reply Adicionar uma resposta + Post Publicar + Page {label} Página {label} + {kind} — click to show it on the page {kind} — clique para exibir na página + Set status Definir status + Copy text Copiar texto + Properties… Propriedades… + Make Current Properties Default Tornar as propriedades atuais padrão + More options Mais opções + Sort by Classificar por + Author Autor + Type Tipo + Colour Cor + Show all comments Mostrar todos os comentários + Create PDF comment summary… Criar resumo de comentários em PDF… + Export all to data file… Exportar tudo para arquivo de dados… + Filter comments Filtrar comentários + Status Status + Accepted Aceito + Rejected Rejeitado + Cancelled Cancelado + Completed Concluído + Show all Mostrar tudo + Yellow Amarelo + Orange Laranja + Red Vermelho + Pink Rosa + Purple Roxo + Blue Azul + Light blue Azul claro + Green Verde + Gray Cinza + Black Preto + Search Pesquisar + Bookmark options Opções de marcador + Expand all bookmarks Expandir todos os marcadores + Expand top-level bookmarks Expandir marcadores de nível superior + Collapse all bookmarks Recolher todos os marcadores + New bookmark (⌘B) Novo marcador (⌘B) + This document has no bookmarks. Este documento não tem marcadores. + This document has no layers. Este documento não tem camadas. + This document has no attachments. Este documento não tem anexos. + Hide layer Ocultar camada + Show layer Mostrar camada + on page {label} na página {label} + Save attachment… Salvar anexo… + Open in a new tab Abrir em uma nova aba + This document has no pages. Este documento não tem páginas. + Find text Localizar texto + No matches Nenhuma correspondência + Searching… {s}/{p} Pesquisando… {s}/{p} + {c} of {n}{more} {c} de {n}{more} + Previous (⇧⌘G) Anterior (⇧⌘G) + Next (⌘G) Próximo (⌘G) + Find options Opções de localização + Whole words only Apenas palavras inteiras + Case-sensitive Diferenciar maiúsculas de minúsculas + Close (Esc) Fechar (Esc) + Align Alinhar + Top Superior + Bottom Inferior + Center horizontally Centralizar horizontalmente + Center vertically Centralizar verticalmente + Distribute Distribuir + Horizontally Horizontalmente + Vertically Verticalmente + Set Fields to Same Size Definir campos com o mesmo tamanho + Height Altura + Width Largura + Both Ambos + Duplicate… Duplicar… + All pages Todas as páginas + Odd pages Páginas ímpares + Even pages Páginas pares + Landscape pages Páginas em paisagem + Portrait pages Páginas em retrato + Move earlier Mover para antes + Move later Mover para depois + Back to the document Voltar ao documento + Protect Using Password Proteger usando senha + Requires user to enter a password for: Exigir que o usuário insira uma senha para: + Viewing Visualização + Editing Edição + Type Password Digite a senha + Re-type Password Redigite a senha + Strength: {s} Força: {s} + Strong Forte + Medium Média + Weak Fraca + Advanced Options {chevron} Opções avançadas {chevron} + Compatibility Compatibilidade + Acrobat X and later (256-bit AES) Acrobat X e posterior (AES de 256 bits) + Acrobat 7.0 and later (128-bit AES) Acrobat 7.0 e posterior (AES de 128 bits) + Acrobat 5.0 and later (128-bit RC4) Acrobat 5.0 e posterior (RC4 de 128 bits) + Acrobat 3.0 and later (40-bit RC4) Acrobat 3.0 e posterior (RC4 de 40 bits) + Encrypt Criptografar + All document contents Todo o conteúdo do documento + All document contents except metadata Todo o conteúdo do documento, exceto metadados + Printing allowed Impressão permitida + Low Resolution (150 dpi) Baixa resolução (150 dpi) + Changes allowed Alterações permitidas + Inserting, deleting, and rotating pages Inserção, exclusão e rotação de páginas + Filling in form fields and signing existing signature fields Preenchimento de campos de formulário e assinatura de campos existentes + Commenting, filling in form fields, and signing existing signature fields Inclusão de comentários, preenchimento de campos de formulário e assinatura de campos existentes + Any except extracting pages Qualquer uma, exceto extrair páginas + Enable copying of text, images, and other content Habilitar cópia de texto, imagens e outros conteúdos + Enable text access for screen reader devices for the visually impaired Habilitar acesso a texto para dispositivos leitores de tela para deficientes visuais + Type a password. Digite uma senha. + The passwords don't match. As senhas não coincidem. + This compatibility level supports only plain ASCII passwords. Este nível de compatibilidade suporta apenas senhas em ASCII simples. + Anyone opening the document will need this password. It's applied when you save. Qualquer pessoa que abrir o documento precisará desta senha. Ela será aplicada ao salvar. + The document opens without a password; this password is needed to change the restrictions. It's applied when you save. O documento é aberto sem senha; esta senha é necessária para alterar as restrições. Ela será aplicada ao salvar. + Recover unsaved documents? Recuperar documentos não salvos? + PdfCraft didn't shut down normally. These documents had changes that were autosaved: O PdfCraft não foi encerrado normalmente. Estes documentos tiveram alterações salvas automaticamente: + just now agora mesmo + {n} min ago há {n} min + {n} h ago há {n} h + · password-protected · protegido por senha + Recover Recuperar + Discard Descartar + Next / previous match Correspondência seguinte / anterior + Copy selected text Copiar texto selecionado + Select a word Selecionar uma palavra + Clear selection / close find Limpar seleção / fechar localização + Zoom in / out (also pinch or ⌘-scroll) Aumentar / diminuir zoom (ou pinçar / ⌘-rolagem) + Rotate view Girar visualização + First / last page Primeira / última página + Previous / next page Página anterior / seguinte + Delete selected pages (Organize) Excluir páginas selecionadas (Organizar) + Select all pages (Organize) Selecionar todas as páginas (Organizar) + Version {v} Versão {v} + A clean-room, open-source PDF application written in Rust. MIT OR Apache-2.0. Um aplicativo PDF de código aberto e clean-room escrito em Rust. MIT OU Apache-2.0. + Part of Parte de + Summarize Options Opções de resumo + Choose a layout: Escolha um layout: + Comments only Somente comentários + Sort comments by: Classificar comentários por: + Create PDF Comment Summary Criar resumo de comentários do PDF + Revert to the previously saved version of “{name}”? Changes since then can't be undone afterwards. Reverter para a versão salva anteriormente de “{name}”? As alterações feitas desde então não poderão ser desfeitas depois. + Number pages Numerar páginas + Style Estilo + None (prefix only) Nenhum (apenas prefixo) + Prefix Prefixo + Start Início + Labels: {preview}. Later pages keep their labels. Rótulos: {preview}. As páginas posteriores mantêm seus rótulos. + Even and Odd Pages Páginas pares e ímpares + Even Pages Only Somente páginas pares + Odd Pages Only Somente páginas ímpares + Landscape and Portrait Pages Páginas em paisagem e retrato + Landscape Pages Páginas em paisagem + Portrait Pages Páginas em retrato + Duplicate Field Duplicar campo + Duplicate "{name}" onto: Duplicar "{name}" em: + 1 page selected. 1 página selecionada. + {n} pages selected. {n} páginas selecionadas. + Delete pages after extracting Excluir páginas após extrair + Extract pages as separate files Extrair páginas como arquivos separados + Rotate Pages Girar páginas + Direction: Direção: + Clockwise 90 degrees 90 graus no sentido horário + Counterclockwise 90 degrees 90 graus no sentido anti-horário + 180 degrees 180 graus + Pages: Páginas: + All Todas + Selection Seleção + From De + Rotate: Girar: + Repairs Reparos + Repair log Registro de reparos + Split document Dividir documento + Number of pages Número de páginas + Pages per file Páginas por arquivo + File size Tamanho do arquivo + At most No máximo + Top-level bookmarks ({n}) Marcadores de nível superior ({n}) + Before each selected page (select pages in Organize) Antes de cada página selecionada (selecione páginas em Organizar) + Creates 1 file from {n} pages. Cria 1 arquivo a partir de {n} páginas. + Creates {f} files from {n} pages. Cria {f} arquivos a partir de {n} páginas. + Each file holds as many of the {n} pages as fit. Cada arquivo conterá tantas das {n} páginas quantas couberem. + Replace Pages Substituir páginas + Original: replace pages Original: substituir páginas + to até + to {n} até {n} + Replacement: pages of {name} Substituição: páginas de {name} + of {name} de {name} + Only the page content changes: links, comments, form fields and bookmarks on the original pages stay. Apenas o conteúdo da página é alterado: links, comentários, campos de formulário e marcadores nas páginas originais são mantidos. + The replacement file doesn't have that many pages. O arquivo de substituição não tem tantas páginas. + Tagged PDF PDF com marcas + Document Properties Propriedades do documento + Description Descrição + Initial View Visualização inicial + Security Segurança + Fonts Fontes + Advanced Avançado + Title Título + Subject Assunto + Keywords Palavras-chave + Application Aplicativo + PDF producer Produtor do PDF + Layout and Magnification Layout e ampliação + Navigation tab Aba de navegação + Page Only Somente página + Bookmarks Panel and Page Painel de marcadores e página + Pages Panel and Page Painel de páginas e página + Attachments Panel and Page Painel de anexos e página + Layers Panel and Page Painel de camadas e página + Page layout Layout da página + Default Padrão + Single Page Página única + Single Page Continuous Página única contínua + Two-Up (Facing) Duas páginas (lado a lado) + Two-Up Continuous (Facing) Duas páginas contínuas (lado a lado) + Two-Up (Cover Page) Duas páginas (página de rosto) + Two-Up Continuous (Cover Page) Duas páginas contínuas (página de rosto) + Magnification Ampliação + Actual Size Tamanho real + Fit Page Ajustar à página + Fit Width Ajustar à largura + Fit Height Ajustar à altura + Fit Visible Ajustar à área visível + Open to page Abrir na página + of {pages} de {pages} + Window Options Opções de janela + Resize window to initial page Redimensionar janela para a página inicial + Center window on screen Centralizar janela na tela + Open in Full Screen mode Abrir em modo de tela inteira + Show: Mostrar: + File Name Nome do arquivo + Document Title Título do documento + User Interface Options Opções da interface do usuário + Hide menu bar Ocultar barra de menus + Hide toolbars Ocultar barras de ferramentas + Hide window controls Ocultar controles da janela + Security method Método de segurança + No security Nenhuma segurança + Restrictions Restrições + None — everything is allowed Nenhuma — tudo é permitido + Password security Segurança por senha + Encryption Criptografia + Opened with Aberto com + — (protection is applied when you save) — (a proteção é aplicada ao salvar) + Owner password (no restrictions apply) Senha do proprietário (nenhuma restrição se aplica) + User password Senha do usuário + Change settings… Alterar configurações… + Printing Impressão + Not allowed Não permitida + Allowed Permitida + High resolution Alta resolução + Low resolution Baixa resolução + Changing the document Alteração do documento + Document assembly Montagem de documento + Content copying Cópia de conteúdo + Content copying for accessibility Cópia de conteúdo para acessibilidade + Commenting Comentários + Filling of form fields Preenchimento de campos de formulário + No fonts are referenced by the pages. Nenhuma fonte é referenciada pelas páginas. + PDF version Versão do PDF + Location Local + Page size Tamanho da página + Yes Sim + No Não + Revisions Revisões + View revision {n} Exibir revisão {n} + Open the file as it was saved then Abrir o arquivo como foi salvo naquela ocasião + Binding Encadernação + Left Edge Borda esquerda + Right Edge Borda direita + Language Idioma + Saved {place}: {before} → {after} ({pct}% smaller){detail} Salvo {place}: {before} → {after} ({pct}% menor){detail} + Couldn't save the image: {e} Não foi possível salvar a imagem: {e} + Adding images arrives on the web with file pickers for images A adição de imagens chegará à Web com seletores de arquivo para imagens + Replacing images on page {p} arrives on the web with image pickers ({i}) A substituição de imagens na página {p} chegará à Web com seletores de imagem ({i}) + {name}: choosing images arrives on the web with file pickers for images {name}: a seleção de imagens chegará à Web com seletores de arquivo para imagens + Replacing images arrives on the web with image file pickers A substituição de imagens chegará à Web com seletores de arquivo de imagem + Couldn't create a PDF: {e} Não foi possível criar um PDF: {e} + The clipboard has no image or text A área de transferência não contém imagem nem texto + On the web, open or drop an image to convert it Na Web, abra ou solte uma imagem para convertê-la + Couldn't optimize the file: {e} Não foi possível otimizar o arquivo: {e} + Couldn't write {path}: {e} Não foi possível gravar {path}: {e} + The form asks to be submitted to {u}; PdfCraft doesn't send form data. Save the document to keep your entries. O formulário solicita envio para {u}; o PdfCraft não envia dados de formulário. Salve o documento para manter suas entradas. + {s} actions run in the JavaScript engine (M6) As ações {s} são executadas no mecanismo JavaScript (M6) + {name}: the {other} action isn't supported yet {name}: a ação {other} ainda não é suportada + {name} submits the form to {url}; PdfCraft doesn't send form data. Save the document to keep your entries. {name} envia o formulário para {url}; o PdfCraft não envia dados de formulário. Salve o documento para manter suas entradas. + Export stopped: {e} Exportação interrompida: {e} + Exported 1 image 1 imagem exportada + Exported {n} images {n} imagens exportadas + ({s} not exported: {first}) ({s} não exportado: {first}) + Exported the text of 1 page O texto de 1 página foi exportado + Exported the text of {n} pages O texto de {n} páginas foi exportado + {msg} to {dir} {msg} para {dir} + Exporting… {d} of {t} Exportando… {d} de {t} + Choose a folder for the exported files Escolha uma pasta para os arquivos exportados + New {tool} comments will look like this one Os novos comentários de {tool} serão semelhantes a este + This document can't be checked: it couldn't be read for editing Este documento não pode ser verificado: não foi possível lê-lo para edição + The checker found no problems in this document. O verificador não encontrou problemas neste documento. + The checker found 1 problem which may prevent the document from being fully accessible. O verificador encontrou 1 problema que pode impedir o documento de ser totalmente acessível. + The checker found {n} problems which may prevent the document from being fully accessible. O verificador encontrou {n} problemas que podem impedir o documento de ser totalmente acessível. + The text is the same O texto é o mesmo + 1 difference found 1 diferença encontrada + {n} differences found {n} diferenças encontradas + Added 1 comment 1 comentário adicionado + Added {n} comments {n} comentários adicionados + Choose a folder for the results Escolha uma pasta para os resultados + Files for {name} Arquivos para {name} + An action is already running Uma ação já está em execução + Running action… file {d} of {t} Executando ação… arquivo {d} de {t} + No unlinked web addresses were found in the text Nenhum endereço da Web sem link foi encontrado no texto + Created 1 link 1 link criado + Created {n} links {n} links criados + Text recognition is already running O reconhecimento de texto já está em execução + Recognizing text… file {d} of {t} Reconhecendo texto… arquivo {d} de {t} + Recognizing text… page {d} of {t} Reconhecendo texto… página {d} de {t} + Recognized 1 word 1 palavra reconhecida + Recognized {n} words {n} palavras reconhecidas + {words} on {pages} {words} em {pages} + ; 1 page already had text ; 1 página já continha texto + ; {n} pages already had text ; {n} páginas já continham texto + Recognized {w} words in 1 file {w} palavras reconhecidas em 1 arquivo + Recognized {w} words in {n} files {w} palavras reconhecidas em {n} arquivos + ; failed: {list} ; falharam: {list} + 1 file done 1 arquivo concluído + {n} files done {n} arquivos concluídos + The selected area has been copied ({w} × {h} pixels) A área selecionada foi copiada ({w} × {h} pixels) + Couldn't take the snapshot: {e} Não foi possível capturar o instantâneo: {e} + Couldn't recover {name}: {e} Não foi possível recuperar {name}: {e} + The document now conforms to {level}; save it to keep the changes O documento agora está em conformidade com {level}; salve para manter as alterações + Fixed what could be fixed; 1 problem remains Corrigido o que pôde ser corrigido; restou 1 problema + Fixed what could be fixed; {n} problems remain Corrigido o que pôde ser corrigido; restaram {n} problemas + Custom stamps arrive on the web with file pickers for images Carimbos personalizados chegarão à Web com seletores de arquivo para imagens + {file} is too large for a stamp (at most {n} MB) {file} é muito grande para um carimbo (no máximo {n} MB) + Sent to {printer} Enviado para {printer} + Sent to {printer}: {msg} Enviado para {printer}: {msg} + Choose a folder for the searchable files Escolha uma pasta para os arquivos pesquisáveis + Files are combined in this order. Leave Pages empty to take every page. Os arquivos são combinados nesta ordem. Deixe Páginas em branco para incluir todas as páginas. + Pages of {name} to combine, e.g. 1-3, 6 Páginas de {name} a combinar, ex.: 1-3, 6 + Remove {name} Remover {name} + Add files… Adicionar arquivos… + Add at least two files Adicione pelo menos dois arquivos + Couldn't add {name}: {e} Não foi possível adicionar {name}: {e} + Couldn't combine files: {e} Não foi possível combinar os arquivos: {e} + Export comments Exportar comentários + Export form data Exportar dados de formulário + Comment and form data Dados de comentário e formulário + Export Exportar + Select data files to merge Selecionar arquivos de dados para mesclar + Form data and PDF forms Dados de formulário e formulários PDF + Save the spreadsheet Salvar a planilha + Save the accessibility report Salvar o relatório de acessibilidade + Save image Salvar imagem + Export certificate Exportar certificado + Choose a folder for the extracted pages Escolha uma pasta para as páginas extraídas + Choose a folder for the split files Escolha uma pasta para os arquivos divididos + Couldn't use {name}: {e} Não foi possível usar {name}: {e} + Couldn't extract pages: {e} Não foi possível extrair páginas: {e} + Couldn't write {name}: {e} Não foi possível gravar {name}: {e} + Wrote 1 file to {dir} 1 arquivo gravado em {dir} + Wrote {n} files to {dir} {n} arquivos gravados em {dir} + No pages match those choices Nenhuma página corresponde a essas opções + Couldn't split: {e} Não foi possível dividir: {e} + Couldn't summarize comments: {e} Não foi possível resumir comentários: {e} + Couldn't open the result: {e} Não foi possível abrir o resultado: {e} + Importing data arrives on the web with file pickers for data files A importação de dados chegará à Web com seletores de arquivo para arquivos de dados + Exported to {path} Exportado para {path} + Merging data files needs the desktop app A mesclagem de arquivos de dados requer o aplicativo para desktop + Merged 1 file into {path} 1 arquivo mesclado em {path} + Merged {n} files into {path} {n} arquivos mesclados em {path} + Combined {n} files {n} arquivos combinados + Extracted 1 page 1 página extraída + Extracted {n} pages {n} páginas extraídas + Created a comment summary Resumo de comentários criado + Couldn't open {name}: {e} Não foi possível abrir {name}: {e} + Couldn't read {name}: {e} Não foi possível ler {name}: {e} + Couldn't save: {e} Não foi possível salvar: {e} + Downloading attachments on the web arrives with M3.10 ({n} bytes ready) O download de anexos na Web chegará no M3.10 ({n} bytes prontos) + `{command}` {when} `{command}` {when} + ships in milestone {m} será lançado no marco {m} + needs an AI provider (off by default) requer um provedor de IA (desativado por padrão) + is available está disponível + is not available yet ainda não está disponível + {label} failed: {e} {label} falhou: {e} + Undid {label} Desfeito: {label} + Redid {label} Refeito: {label} + A document needs at least one page: copy instead Um documento precisa de pelo menos uma página: copie em vez disso + Cut {what} Recortado: {what} + Copied {what} Copiado: {what} + 1 page 1 página + {n} pages {n} páginas + Copy or cut pages first Copie ou recorte as páginas primeiro + Couldn't save {name}: {e} Não foi possível salvar {name}: {e} + Saved {name} {name} salvo + Saved, but reopening failed: {e} Salvo, mas a reabertura falhou: {e} + Downloaded {name} {name} baixado + Couldn't download {name}: {e} Não foi possível baixar {name}: {e} + Reverted to the last saved version Revertido para a última versão salva + That didn't work: an internal error stopped it ({m}). Your documents are unchanged. Não funcionou: um erro interno interrompeu a operação ({m}). Seus documentos permaneceram inalterados. + Nothing to undo Nada a desfazer + Nothing to redo Nada a refazer + This document has no form fields you can fill in Este documento não tem campos de formulário preenchíveis + This document has no comments to flatten Este documento não tem comentários para nivelar + This document has no form fields to flatten Este documento não tem campos de formulário para nivelar + There are no redaction marks (mark text, areas or pages first) Não há marcas de ocultação (marque o texto, áreas ou páginas primeiro) + This document has no {kind} to change Este documento não tem {kind} para alterar + header or footer cabeçalho ou rodapé + watermark marca-d'água + background plano de fundo + This document isn't password-protected Este documento não está protegido por senha + Only the document's owner can change its security (open it with the permissions password) Somente o proprietário do documento pode alterar sua segurança (abra-o com a senha de permissões) + The document's security settings don't allow this change As configurações de segurança do documento não permitem esta alteração + Open a document first Abra um documento primeiro + Security will be removed when you save A segurança será removida ao salvar + Click text or an image to edit it Clique no texto ou em uma imagem para editá-lo + Drag a rectangle to create a link; double-click a link to edit it Arraste um retângulo para criar um link; clique duas vezes em um link para editá-lo + There are no redaction marks to apply Não há marcas de ocultação para aplicar + Drag to draw the area where the signature should appear. Arraste para desenhar a área onde a assinatura deve aparecer. + Couldn't fit the visible content: {e} Não foi possível ajustar o conteúdo visível: {e} + Drag a rectangle around the area to copy Arraste um retângulo ao redor da área para copiar + Click on the page to add a {tool}, or drag to set its size Clique na página para adicionar {tool} ou arraste para definir seu tamanho + Drag a rectangle on a page to crop it; double-click a page for Set Page Boxes Arraste um retângulo em uma página para recortá-la; dê um clique duplo em uma página para Definir limites da página + Keep tool selected: on Manter ferramenta selecionada: ativado + Keep tool selected Manter ferramenta selecionada + Opacity Opacidade + Line thickness Espessura da linha + What word or phrase would you like to search for? Qual palavra ou frase você gostaria de pesquisar? + Searching… {s} of {p} pages Pesquisando… {s} de {p} páginas + (searching… {s} of {p} pages) (pesquisando… {s} de {p} páginas) + 1 instance 1 ocorrência + {n} instances {n} ocorrências + Go to this result Ir para este resultado + Highlight Destaque + Draw Desenhar + Polygon Polígono + Connected lines Linhas conectadas + Eraser Borracha + Sign Assinar + Certified by {by} Certificado por {by} + At least one signature is invalid. Pelo menos uma assinatura é inválida. + Signed and all signatures are valid. Assinado e todas as assinaturas são válidas. + At least one signature has problems. Pelo menos uma assinatura apresenta problemas. + This document is secured. Some changes are restricted by its security settings. Este documento está protegido. Algumas alterações são restritas por suas configurações de segurança. + This is a dynamic XFA form, which PdfCraft can't display yet. What you see is the file's placeholder page. Este é um formulário XFA dinâmico, que o PdfCraft ainda não pode exibir. O que você vê é a página de espaço reservado do arquivo. + This form also contains XFA data, which PdfCraft doesn't read yet. You can fill its fields, but Acrobat may show the XFA values instead. Este formulário também contém dados XFA, que o PdfCraft ainda não lê. Você pode preencher seus campos, mas o Acrobat pode exibir os valores XFA em vez disso. + This document contains {n} interactive form fields. Este documento contém {n} campos de formulário interativos. + This file was damaged and has been repaired. Saving keeps the repaired version. Este arquivo estava danificado e foi reparado. Salvar manterá a versão reparada. + Dismiss Dispensar + Hide field highlights Ocultar realces de campo + Highlight fields Realçar campos + Security settings Configurações de segurança + Details Detalhes + Select (V) Selecionar (V) + Hand (H) Mão (H) + Delete pages (Delete) Excluir páginas (Delete) + Insert a blank page after the selection Inserir uma página em branco após a seleção + Insert pages from a file… Inserir páginas de um arquivo… + Extract pages to a new document Extrair páginas para um novo documento + Split into files… Dividir em arquivos… + Select pages Selecionar páginas + Cut Recortar + Copy Copiar + Paste after Colar depois + Rename Renomear + Set to current page ({n}) Definir como página atual ({n}) + Move up Mover para cima + Move down Mover para baixo + Indent Aumentar recuo + Outdent Diminuir recuo + This document has no form fields. Este documento não tem campos de formulário. + Tab order: move a field with its arrows. Ordem de tabulação: mova um campo com suas setas. + Unplaced Não posicionado + Has JavaScript actions (run in M6) Contém ações JavaScript (executadas no M6) + Page Página + None Nenhum + Tool Ferramenta + Command Comando + Search tools and commands… Pesquisar ferramentas e comandos… + No matching tools Nenhuma ferramenta correspondente + All tools Todas as ferramentas + Read Ler + Convert Converter + E-Sign Assinatura eletrônica + Welcome to PdfCraft Bem-vindo ao PdfCraft + An open-source PDF workbench — local, private, and scriptable. Uma bancada de trabalho de PDF de código aberto — local, privada e programável. + Recommended tools Ferramentas recomendadas + Use now Usar agora + Recent Recentes + Privacy Privacidade + Export to image… Exportar para imagem… + Reduce file size… Reduzir tamanho do arquivo… + Optimize PDF… Otimizar PDF… + Export to text… Exportar para texto… + Export to Word… Exportar para Word… + Export to HTML… Exportar para HTML… + Export to RTF… Exportar para RTF… + Export all images… Exportar todas as imagens… + Protect using password… Proteger usando senha… + Remove security Remover segurança + Security properties… Propriedades de segurança… + Organize pages Organizar páginas + New bookmark Novo marcador + Rotate pages clockwise Girar páginas em sentido horário + Rotate pages counterclockwise Girar páginas em sentido anti-horário + Delete pages Excluir páginas + Insert blank page Inserir página em branco + Rotate pages… Girar páginas… + Duplicate pages Duplicar páginas + Crop pages Recortar páginas + Set page boxes… Definir limites da página… + Insert pages from file… Inserir páginas de arquivo… + Replace pages… Substituir páginas… + Extract pages… Extrair páginas… + Split document… Dividir documento… + Number pages… Numerar páginas… + Keyboard shortcuts Atalhos de teclado + Join the ArtCraft Discord Entrar no Discord do ArtCraft + Join the ArtCraft community Entrar na comunidade ArtCraft + Get help, share feedback and follow development on Discord. Obtenha ajuda, compartilhe comentários e acompanhe o desenvolvimento no Discord. + Join our Discord Entrar em nosso Discord + PdfCraft web page Página da Web do PdfCraft + PdfCraft on GitHub PdfCraft no GitHub + ArtCraft website Site do ArtCraft + Check for updates… Verificar atualizações… + About PdfCraft Sobre o PdfCraft + JavaScript console… Console JavaScript… + Document JavaScripts… JavaScripts do documento… + Recognize text… Reconhecer texto… + Check for accessibility… Verificar acessibilidade… + Add header & footer… Adicionar cabeçalho e rodapé… + Add watermark… Adicionar marca-d'água… + Add background… Adicionar plano de fundo… + Prepare a form Preparar um formulário + Digitally sign Assinar digitalmente + Files you open in PdfCraft appear here. Drop a PDF anywhere to open it. Os arquivos abertos no PdfCraft aparecem aqui. Solte um PDF em qualquer lugar para abri-lo. + PdfCraft works offline. No telemetry, no account, and no cloud processing unless you add a provider. O PdfCraft funciona offline. Sem telemetria, sem conta e sem processamento em nuvem, a menos que você adicione um provedor. + Measure distance Medir distância + Measure perimeter Medir perímetro + Measure area Medir área + Set measurement scale Definir escala de medição + Measurement information Informações de medição + Measurement snapping Alinhamento inteligente de medição + Export measurements as CSV Exportar medições como CSV + Distance Distância + Perimeter Perímetro + Area Área + Drawing scale Escala de desenho + Snapping Alinhamento inteligente + Export measurements Exportar medições + Open a PDF to measure it. Abra um PDF para medi-lo. + Click vertices. Enter or double-click finishes a perimeter or area. Click the first point to close an area. Clique nos vértices. Enter ou clique duplo finaliza um perímetro ou área. Clique no primeiro ponto para fechar uma área. + Shift constrains to 45 degrees. Backspace removes a vertex. Escape cancels. Shift restringe a 45 graus. Backspace remove um vértice. Escape cancela. + Angle Ângulo + Click the first point to begin. Clique no primeiro ponto para começar. + Snap to drawing Ajustar ao desenho + Endpoints Pontos finais + Midpoints Pontos médios + Intersections Interseções + Paths Traçados + Sensitivity Sensibilidade + Unit Unidade + Decimals Casas decimais + Calibrate from two points Calibrar a partir de dois pontos + Entire page Página inteira + Viewport rectangle in page points (x, y, width, height) Retângulo da janela de visualização em pontos da página (x, y, largura, altura) + Viewport Janela de visualização + Apply scale Aplicar escala + Saved measurements Medições salvas + Saved measurements. Medições salvas. + Endpoint Ponto final + Midpoint Ponto médio + Intersection Interseção + Path Traçado + This drawing exceeds the snapping limit; only the first paths are used. Este desenho excede o limite de alinhamento inteligente; apenas os primeiros traçados são usados. + Some page content couldn't be read; snapping uses the rest. Parte do conteúdo da página não pôde ser lida; o alinhamento usará o restante. + Unsupported measurements Medições não suportadas + Label Rótulo + {n} measurements use an unsupported format and are left out. {n} medições usam um formato não suportado e foram omitidas. + This area has too many overlapping paths; intersection snapping is limited. Esta área possui muitos traçados sobrepostos; o alinhamento por interseção é limitado. + This measurement needs at least {n} points. Esta medição precisa de pelo menos {n} pontos. + {0}: {1} {0}: {1} + {dpi} pixels/inch {dpi} pixels/polegada + {kind} field campo {kind} + {month} {y} {month} de {y} + {n} pages selected {n} páginas selecionadas + {name} — unsaved changes {name} — alterações não salvas + {s} action ação {s} + 1 page selected 1 página selecionada + a bookmark cannot be moved inside itself um marcador não pode ser movido para dentro de si mesmo + a document must keep at least one page um documento deve manter pelo menos uma página + A form field has additional actions Um campo de formulário possui ações adicionais + A stream refers to an external file Um fluxo faz referência a um arquivo externo + A stream uses LZW compression Um fluxo usa compactação LZW + Add arrow Adicionar seta + Add background Adicionar plano de fundo + Add bookmark Adicionar marcador + Add callout Adicionar chamada + Add checkmark Adicionar marca de seleção + Add cloud Adicionar nuvem + Add connected lines Adicionar linhas conectadas + Add cross Adicionar cruz + Add dot Adicionar ponto + Add drawing Adicionar desenho + Add field Adicionar campo + Add file attachment Adicionar anexo de arquivo + Add header & footer Adicionar cabeçalho e rodapé + Add highlight Adicionar destaque + Add image Adicionar imagem + Add inserted text Adicionar texto inserido + Add line Adicionar linha + Add link Adicionar link + Add oval Adicionar elipse + Add polygon Adicionar polígono + Add rectangle Adicionar retângulo + Add redaction mark Adicionar marca de ocultação + Add signature Adicionar assinatura + Add squiggly underline Adicionar sublinhado ondulado + Add stamp Adicionar carimbo + Add sticky note Adicionar nota adesiva + Add strikethrough Adicionar tachado + Add text box Adicionar caixa de texto + Add underline Adicionar sublinhado + An embedded file has no AFRelationship Um arquivo incorporado não possui AFRelationship + An image asks to be interpolated Uma imagem solicita interpolação + An image has alternates or OPI information Uma imagem contém alternativas ou informações de OPI + Button Style: Estilo do botão: + Change {key} Alterar {key} + Change comment properties Alterar propriedades do comentário + Change field properties Alterar propriedades do campo + Change initial view Alterar visualização inicial + Change initials Alterar rubrica + Change link properties Alterar propriedades do link + Change signature Alterar assinatura + Check Marcar + Check Box Style: Estilo da caixa de seleção: + Choose images Escolher imagens + Circle Círculo + Combo Caixa de combinação + Coming in milestone Previsto para o marco + Crop page Recortar página + Delete bookmark Excluir marcador + Delete comment Excluir comentário + Delete content Excluir conteúdo + Delete document JavaScript Excluir JavaScript do documento + Delete field Excluir campo + Delete image Excluir imagem + Delete link Excluir link + Delete page Excluir página + Device colour is used, but there is no PDF/A output intent A cor do dispositivo foi usada, mas não há intenção de saída PDF/A + DeviceCMYK is used: it needs a CMYK output intent (not added automatically) O DeviceCMYK foi usado: ele necessita de uma intenção de saída CMYK (não adicionada automaticamente) + Diagnostic details Detalhes de diagnóstico + Diamond Losango + Double-click Clique duplo + Draw your {what} below. Desenhe seu(sua) {what} abaixo. + Duplicate page Duplicar página + e.g. en-US ex.: en-US + Edit comment Editar comentário + Edit content Editar conteúdo + Edit document JavaScript Editar JavaScript do documento + Edit script of {name} Editar script de {name} + Edit text Editar texto + Embedded files must be PDF/A files themselves (use PDF/A-3 for others) Os arquivos incorporados devem ser arquivos PDF/A por si mesmos (use PDF/A-3 para outros) + Erase Apagar + Fill & Sign: change initials Preencher e assinar: alterar rubrica + Fill & Sign: change signature Preencher e assinar: alterar assinatura + Fill & Sign: remove saved initials Preencher e assinar: remover rubrica salva + Fill & Sign: remove saved signature Preencher e assinar: remover assinatura salva + Fill in {name} Preencher {name} + Flatten Nivelar + Flip image Espelhar imagem + Font: Helvetica Fonte: Helvetica + Go to page {p} Ir para a página {p} + Images and text Imagens e texto + Images and text (converted to PDF) Imagens e texto (convertidos para PDF) + Import {name} Importar {name} + Insert pages from {name} Inserir páginas de {name} + Items marked Ready work today. Os itens marcados como Pronto já funcionam hoje. + JavaScript JavaScript + JavaScript, e.g. getField("total").value JavaScript, ex.: getField("total").value + List Lista + Lock comment Bloquear comentário + Mark figure as decorative Marcar figura como decorativa + Microsoft Word (.docx) Microsoft Word (.docx) + Move bookmark Mover marcador + Move comment Mover comentário + Move image Mover imagem + Move page Mover página + Move pages Mover páginas + no such document nenhum documento encontrado + nothing in the file matches this document nada no arquivo corresponde a este documento + open to see what it will include abra para ver o que será incluído + Page {p} of {n} Página {p} de {n} + PDF/A… PDF/A… + Planned Planejado + Planned for milestone Planejado para o marco + PostScript / EPS PostScript / EPS + PostScript XObjects aren't allowed PostScript XObjects não são permitidos + Presentation (.pptx) Apresentação (.pptx) + PushButton Botão de pressão + Radio Botão de opção + Remove redaction marks Remover marcas de ocultação + Rename bookmark Renomear marcador + Rendering: hayro (bootstrap) · UI: egui · Icons: Lucide (ISC) · Fonts: Inter, JetBrains Mono, Dancing Script (OFL) Renderização: hayro (bootstrap) · Interface: egui · Ícones: Lucide (ISC) · Fontes: Inter, JetBrains Mono, Dancing Script (OFL) + Replace page Substituir página + Resize comment Redimensionar comentário + Rotate image Girar imagem + Rotate page Girar página + Run JavaScript Executar JavaScript + Save as PDF/A-1b Salvar como PDF/A-1b + Save as PDF/A-2b Salvar como PDF/A-2b + Save as PDF/A-3b Salvar como PDF/A-3b + Save as PDF/UA Salvar como PDF/UA + Save as PDF/X Salvar como PDF/X + Select a file for the stamp Selecionar um arquivo para o carimbo + Select Icon Selecionar ícone + Set bookmark destination Definir destino do marcador + Set status Accepted Definir status como Aceito + Set status Cancelled Definir status como Cancelado + Set status Completed Definir status como Concluído + Set status None Definir status como Nenhum + Set status Rejected Definir status como Rejeitado + Set status Unmarked Definir status como Não marcado + Set tab order Definir ordem de tabulação + Set the image of {name} Definir a imagem de {name} + Spreadsheet (.xlsx) Planilha (.xlsx) + Square Quadrado + Star Estrela + The document has additional actions (/AA) O documento contém ações adicionais (/AA) + The document has document-level JavaScript O documento contém JavaScript no nível do documento + the document has no form fields o documento não tem campos de formulário + the document has no page tree o documento não tem árvore de páginas + the document has no tags o documento não tem tags + The document has no XMP metadata O documento não tem metadados XMP + The document is encrypted O documento está criptografado + the document is protected by a password o documento está protegido por senha + The form asks viewers to make appearances (NeedAppearances) O formulário solicita que os visualizadores gerem aparências (NeedAppearances) + the image is empty a imagem está vazia + The operation failed. A operação falhou. + the password is incorrect a senha está incorreta + The title in the metadata and the document information differ O título nos metadados e nas informações do documento são diferentes + the title must not be empty o título não deve estar vazio + there are no pages to print não há páginas para imprimir + this document is signed: rewriting it would invalidate its signatures (save it incrementally instead) este documento está assinado: regravá-lo invalidaria suas assinaturas (salve de forma incremental) + this file isn't XFDF, FDF, XML or text form data este arquivo não é XFDF, FDF, XML ou dados de formulário de texto + This page couldn't be displayed.\n{e} Não foi possível exibir esta página.\n{e} + Type your {what}. Digite seu(sua) {what}. + Unknown Desconhecido + Unlock comment Desbloquear comentário + Update background Atualizar plano de fundo + Update header & footer Atualizar cabeçalho e rodapé + Update watermark Atualizar marca-d'água + Your name Seu nome + Change {what} Alterar {what} + Cut and stack Cortar e empilhar + Default workspace mode Modo de espaço de trabalho padrão + Documents and view Documentos e visualização + Open email app Abrir aplicativo de e-mail + Open link Abrir link + Open this web page? Abrir esta página da Web? + Scripts run in a sandbox without file or network access. A script that asks to open a web page needs your permission first. With JavaScript off, Acrobat's standard format, validate and calculate functions still work. Os scripts são executados em uma sandbox sem acesso a arquivos ou à rede. Um script que solicitar a abertura de uma página da Web precisará da sua permissão primeiro. Com o JavaScript desativado, as funções padrão do Acrobat de formatação, validação e cálculo ainda funcionam. + Sign yourself Assinar você mesmo + Used when opening PDFs. An explicit launch or control mode takes precedence for the session. Usado ao abrir PDFs. Um modo explícito de inicialização ou controle terá precedência para a sessão. + Write this email? Redigir este e-mail? + {who} in this document wants to open this address in your browser: {who} neste documento deseja abrir este endereço em seu navegador: + {who} in this document wants to open your email app with this address: {who} neste documento deseja abrir seu aplicativo de e-mail com este endereço: + CheckBox Caixa de seleção + Create link Criar link + Duplicate field Duplicar campo + Replace pages Substituir páginas + Set alternate text Definir texto alternativo + nothing to redo nada para refazer + nothing to undo nada para desfazer + pages páginas + there are no redaction marks to apply não há marcas de ocultação para aplicar + Create PDF from images Criar PDF a partir de imagens + Selected image files: {count} Arquivos de imagem selecionados: {count} + Use image resolution Usar resolução da imagem + Use each image's embedded DPI; use 72 DPI when it is absent. Usar o DPI incorporado de cada imagem; usar 72 DPI quando estiver ausente. + Use 72 DPI (one point per pixel) Usar 72 DPI (um ponto por pixel) + Use custom DPI Usar DPI personalizado + DPI sets the printed page size without resampling the image. O DPI define o tamanho da página impressa sem reamostrar a imagem. + Create Criar + Dynamic XFA form laid out from its template: {pages}, {fields}. Formulário XFA dinâmico formatado a partir de seu modelo: {pages}, {fields}. + XFA form: its fields and its XFA data are kept in step, so other viewers show what you fill in. Formulário XFA: seus campos e seus dados XFA são mantidos sincronizados, para que outros leitores exibam o que você preencher. +@plural {n} page|{n} pages {n} página|{n} páginas +@plural {n} field|{n} fields {n} campo|{n} campos + Fit to width scrolling Ajustar à largura com rolagem + Fit one full page Ajustar uma página inteira + Default page display Exibição de página padrão + Default zoom Zoom padrão + Used when a PDF doesn't ask for a layout or zoom. Continuous scrolling never snaps between pages. Usado quando um PDF não pede um layout ou zoom. A rolagem contínua nunca salta entre páginas. + Page display: {layout} Exibição de página: {layout} + Switch to two-page view first to show the cover page Mude para a exibição de duas páginas primeiro para mostrar a página de capa + Save pages Salvar páginas + Save these pages as one PDF Salvar estas páginas como um PDF + No changes to save Não há alterações para salvar + Insert a file before page {label} Inserir um arquivo antes da página {label} + Insert a file at the end Inserir um arquivo no final + Set layer visibility Definir visibilidade das camadas + File name Nome do arquivo + Warnings Avisos + {k} of {n} {k} de {n} + ? of {n} ? de {n} + yesterday ontem + {n} days ago há {n} dias + {n} selected {n} selecionados + Remove {n} files Remover {n} arquivos + Select a file first Selecione um arquivo primeiro + 1 file 1 arquivo + {n} files {n} arquivos + 1 file needs attention 1 arquivo precisa de atenção + {n} files need attention {n} arquivos precisam de atenção + Add open documents Adicionar documentos abertos + All open documents Todos os documentos abertos + No documents are open Nenhum documento está aberto + Add the PDFs to combine Adicionar os PDFs para combinar + Drop PDFs or folders here, or choose them. Solte PDFs ou pastas aqui, ou escolha-os. + Add folder… Adicionar pasta… + More ways to add files Mais formas de adicionar arquivos + Add folder Adicionar pasta + Every PDF in the folder Todo PDF da pasta + Add folder and subfolders… Adicionar pasta e subpastas… + Every PDF in the folder and the folders inside it Todo PDF da pasta e das pastas dentro dela + Add folder and subfolders Adicionar pasta e subpastas + PDF, images and text PDF, imagens e texto + Files are combined from top to bottom. Leave Pages empty to take every page. Os arquivos são combinados de cima para baixo. Deixe Páginas em branco para incluir todas as páginas. + Drag to reorder Arraste para reordenar + Added more than once Adicionado mais de uma vez + Includes unsaved changes Inclui alterações não salvas + Click to sort, drag to move the column. Drag its edge to resize it. Clique para classificar, arraste para mover a coluna. Arraste a borda dela para redimensioná-la. + sorted ascending classificado em ordem crescente + sorted descending classificado em ordem decrescente + Reset columns Redefinir colunas + Show password Mostrar senha + Hide password Ocultar senha + Unlock… Desbloquear… + Select a password-protected file first Selecione primeiro um arquivo protegido por senha + Password-protected Protegido por senha + Opened, but its security settings don't allow combining. Enter the permissions password. Aberto, mas as configurações de segurança dele não permitem combinar. Digite a senha de permissões. + Its security settings don't allow copying pages As configurações de segurança dele não permitem copiar páginas + Can't be read: {e} Não é possível ler: {e} + Unlocked: the combined file won't be password-protected Desbloqueado: o arquivo combinado não será protegido por senha + Protected: the combined file won't keep its security settings Protegido: o arquivo combinado não manterá as configurações de segurança + Unlock {name} Desbloquear {name} + Unlock {n} files Desbloquear {n} arquivos + Enter the permissions password to allow combining Digite a senha de permissões para permitir a combinação + Enter the password that opens it Digite a senha que o abre + The same password is tried on each file. A mesma senha é tentada em cada arquivo. + The password is only used to read the file; it isn't saved. A senha é usada apenas para ler o arquivo; ela não é salva. + Unlock Desbloquear + Wrong password Senha incorreta + Check the pages of {name}: {why} Verifique as páginas de {name}: {why} + {name} can't be combined: {why} {name} não pode ser combinado: {why} + Selected pages Páginas selecionadas + No pages selected Nenhuma página selecionada + Created a PDF from {n} files; left out: {names} Criado um PDF de {n} arquivos; deixando de fora: {names} + Created a PDF from the first {n} files Criado um PDF dos primeiros {n} arquivos + Created a PDF from {n} files Criado um PDF de {n} arquivos + Folders Pastas + Pin a folder… Fixar uma pasta… + Pin a folder to list its newest PDFs here, such as where your scanner or a synced cloud drive saves them. Fixe uma pasta para listar aqui os PDFs mais recentes dela, como onde o seu scanner ou uma unidade de nuvem sincronizada os salva. + Unpin Desafixar + Unpin {folder} Desafixar {folder} + Pin a folder to Home Fixar uma pasta no Início + Looking for PDFs… Procurando PDFs… + This folder isn't available right now. It may have moved, or its drive or cloud sync is offline. Esta pasta não está disponível no momento. Ela pode ter sido movida, ou a unidade ou a sincronização de nuvem dela está desconectada. + No PDFs in this folder yet Ainda não há PDFs nesta pasta + Show less Mostrar menos + Show {n} more Mostrar mais {n} + The newest {n} of {total} PDFs Os {n} PDFs mais recentes de {total} + Cancelling… Cancelando… + Optimizing… removing user data Otimizando… removendo dados do usuário + Optimizing… image {d} of {t} Otimizando… imagem {d} de {t} + Optimizing… cleaning up Otimizando… limpando + Optimizing… merging identical objects Otimizando… mesclando objetos idênticos + Optimizing… writing the copy Otimizando… gravando a cópia + Print single-sided. Keep the sheets in order, cut at the marks, then stack the piles left to right, top to bottom. Imprima somente na frente. Mantenha as folhas em ordem, corte nas marcas e empilhe as pilhas da esquerda para a direita, de cima para baixo. + Windows store · Repositório do Windows · + The key is in the Windows certificate store, which may ask to allow PdfCraft to use it. A chave está no repositório de certificados do Windows, que pode solicitar permissão para o PdfCraft usá-la. + This web address mixes letters from different alphabets, a common way to imitate another site's name. Este endereço da web mistura letras de alfabetos diferentes, uma forma comum de imitar o nome de outro site. + This web address uses letters from another alphabet, which can look like familiar ones. Este endereço da web usa letras de outro alfabeto, que podem parecer familiares. + Only continue if you trust this document. An address can carry information from the document, such as what you typed into its form. Continue apenas se você confiar neste documento. Um endereço pode carregar informações do documento, como o que você digitou no formulário dele. + The standard fonts can't draw “{c}” ({code}). Only Western European characters can be added as text for now. As fontes padrão não conseguem desenhar “{c}” ({code}). Por enquanto, apenas caracteres da Europa Ocidental podem ser adicionados como texto. + Line ending Fim de linha + Show Mostrar + Sort Classificar + Reverse the order Inverter a ordem + Grab bag Miscelânea + Table Tabela + {n} contributors · {c} commits {n} contribuidores · {c} commits + No contributor data was built into this copy. Nenhum dado de contribuidores foi embutido nesta cópia. + No model credits were built into this copy. Nenhum crédito de modelos foi embutido nesta cópia. + @{login}: {prs} PRs, {commits} commits, +{added} / −{deleted} lines (Δ {delta}), +{bin_added} / −{bin_deleted} binary assets, {first} – {last} @{login}: {prs} PRs, {commits} commits, +{added} / −{deleted} linhas (Δ {delta}), +{bin_added} / −{bin_deleted} recursos binários, {first} – {last} +signature pad Type Digitar +certificate Subject Titular +action wizard Start Iniciar Open arrow Seta aberta Closed arrow Seta fechada Butt Topo reto @@ -81,3 +2014,103 @@ Slash Barra Scroll tabs left Rolar as abas para a esquerda Scroll tabs right Rolar as abas para a direita + +# Labels added on main while this catalog was being completed (merged 2026-10-09) + % of all commits % de todos os commits + +Bin +Bin + +LOC +LOC + A button Um botão + A link Um link + A script Um script + About Sobre + Add {what} Adicionar {what} + Added the first {n} PDFs in {folder} Adicionados os primeiros {n} PDFs de {folder} + Align fields Alinhar campos + Another file dialog is still open. Finish with it first. Outra janela de arquivos ainda está aberta. Conclua-a primeiro. + Basic constraints Restrições básicas + Binary assets added Arquivos binários adicionados + Binary assets removed Arquivos binários removidos + Certificate authority Autoridade certificadora + Change document properties Alterar as propriedades do documento + Choose a folder on this computer to pin Escolha uma pasta deste computador para fixar + Commits Commits + Company Empresa + Contributors Colaboradores + Couldn't open the printer's preferences: {e} Não foi possível abrir as preferências da impressora: {e} + Couldn't optimize the file Não foi possível otimizar o arquivo + Couldn't show the file picker. Please try again. Não foi possível mostrar o seletor de arquivos. Tente novamente. + Date format Formato de data + Display name Nome de exibição + Distribute fields Distribuir campos + End entity Entidade final + Fill & Sign dates Datas de Preencher e assinar + First Primeiro + First commit Primeiro commit + Flatten Fill & Sign when saving Nivelar Preencher e assinar ao salvar + H / Space (hold) H / Espaço (manter pressionado) + Home / End Home / End + Inserted text Texto inserido + Larger pages Páginas maiores + Last Último + Last commit Último commit + Line delta Saldo de linhas + Lines +/− Linhas +/− + Lines added Linhas adicionadas + Lines deleted Linhas removidas + Mark differences Marcar as diferenças + Mark for redaction Marcar para ocultar dados + Mark pages for redaction Marcar páginas para ocultar dados + Match field sizes Igualar o tamanho dos campos + Merged PRs PRs mesclados + Model Modelo + Models Modelos + Name (A–Z) Nome (A–Z) + No PDFs found in {folder} Nenhum PDF encontrado em {folder} + None of those files can be made into a PDF; use PDFs, images or .txt files Nenhum desses arquivos pode virar PDF; use PDFs, imagens ou arquivos .txt + Opens the printer driver's preferences. They are saved for every print from this computer; the copies, two-sided, grayscale and paper chosen here still apply. Abre as preferências do driver da impressora. Elas valem para toda impressão deste computador; as cópias, frente e verso, escala de cinza e papel escolhidos aqui continuam valendo. + Optimization cancelled Otimização cancelada + Optimization is already running A otimização já está em execução + PRs PRs + Pattern Padrão + Pinned folders need the desktop app As pastas fixadas precisam do aplicativo para desktop + Pinned {folder} to Home {folder} fixada no Início + Place saved {what} Posicionar item salvo: {what} + Printer properties Propriedades da impressora + Real name Nome real + Redo {action} Refazer {action} + Remove saved {what} Remover item salvo: {what} + Reset page size Redefinir o tamanho das páginas + Reset to printer defaults Restaurar os padrões da impressora + Run form script Executar script do formulário + SHA-1 digest Resumo SHA-1 + SHA-256 digest Resumo SHA-256 + Same as interface ({language}) Igual à interface ({language}) + Scripted content must be usable with a keyboard and assistive technology. Check the document's scripts. O conteúdo com scripts deve ser utilizável com teclado e tecnologia assistiva. Verifique os scripts do documento. + Smaller pages Páginas menores + Squiggly Ondulado + Table rows belong directly in a table or its head, body or foot. Fix the table's tags. As linhas de tabela devem ficar diretamente em uma tabela ou em seu cabeçalho, corpo ou rodapé. Corrija as tags da tabela. + Text recognition isn't installed: its model files are missing. Reinstall PdfCraft, or set PDFCRAFT_MODELS to the folder that holds them. O reconhecimento de texto não está instalado: faltam os arquivos dos modelos. Reinstale o PdfCraft ou defina PDFCRAFT_MODELS como a pasta que os contém. + Text, marks and signatures become part of the page. Other comments stay editable. Texto, marcas e assinaturas passam a fazer parte da página. Os demais comentários continuam editáveis. + That didn't work: an internal error stopped it ({m}). Não funcionou: um erro interno interrompeu a ação ({m}). + The Windows store's digital IDs couldn't be listed: {e} Não foi possível listar os IDs digitais do repositório do Windows: {e} + The document changed while you were choosing a file, so nothing was changed. O documento mudou enquanto você escolhia um arquivo, então nada foi alterado. + The document was closed before it could be saved. O documento foi fechado antes de poder ser salvo. + The pages were extracted but not deleted, because the document changed while you were choosing a folder. As páginas foram extraídas, mas não excluídas, porque o documento mudou enquanto você escolhia uma pasta. + The printer driver's own settings for this print: paper tray, paper type, finishing and more. As configurações próprias do driver da impressora para esta impressão: bandeja, tipo de papel, acabamento e mais. + This printer offers no settings of its own. Esta impressora não oferece configurações próprias. + Today: {date} Hoje: {date} + Undo {action} Desfazer {action} + Unlocked {n} of {m} files {n} de {m} arquivos desbloqueados + Use {what} Usar {what} + Username Nome de usuário + You can pin up to {n} folders. Unpin one first. Você pode fixar até {n} pastas. Desafixe uma primeiro. + the text recognition models are not installed (reinstall PdfCraft, or set PDFCRAFT_MODELS to the folder that holds them) os modelos de reconhecimento de texto não estão instalados (reinstale o PdfCraft ou defina PDFCRAFT_MODELS como a pasta que os contém) + yyyy or yy year · m or mm month · mmm or mmmm month name · d or dd day · ddd or dddd weekday. H, h, M, s and t are time letters and can't be used on their own: put {escape} before a letter to show it as is. yyyy ou yy ano · m ou mm mês · mmm ou mmmm nome do mês · d ou dd dia · ddd ou dddd dia da semana. H, h, M, s e t são letras de hora e não podem ser usadas sozinhas: coloque {escape} antes de uma letra para mostrá-la como está. + {chars} can't be written into the PDF yet: Fill & Sign text is Western European only. Pick a numeric format such as dd.mm.yyyy. {chars} ainda não pode ser escrito no PDF: o texto de Preencher e assinar aceita só caracteres da Europa ocidental. Escolha um formato numérico como dd.mm.yyyy. + {folder} is already pinned to Home {folder} já está fixada no Início + {who} in this document tried to open an address PdfCraft won't open: {e}. {who} neste documento tentou abrir um endereço que o PdfCraft não abre: {e}. + {who} in this document tried to open an address PdfCraft won't open: {e}. Only web (http, https) and email (mailto) links open from documents. {who} neste documento tentou abrir um endereço que o PdfCraft não abre: {e}. Só links da web (http, https) e de e-mail (mailto) abrem a partir de documentos. + ΔLOC ΔLOC + −Bin −Bin + −LOC −LOC +comment menu Edit Editar diff --git a/crates/ui-egui/src/lib.rs b/crates/ui-egui/src/lib.rs index 1e88c2a4..c75fa73f 100644 --- a/crates/ui-egui/src/lib.rs +++ b/crates/ui-egui/src/lib.rs @@ -101,6 +101,7 @@ pub(crate) fn date_text_for_pdf(session: &Session) -> Result { /// The longest author name kept (Preferences ▸ Identity, restored settings). pub(crate) const MAX_AUTHOR_CHARS: usize = 200; + pub mod portable; mod protect; mod recovery; @@ -624,6 +625,25 @@ impl Default for PdfCraftApp { } } +/// A restored colour: an `[r, g, b]` array of finite numbers, each clamped to 0–1 (restored +/// settings are untrusted). Anything else (a string, a wrong length, a null or a non-finite +/// number) is refused whole, so the caller keeps its default. +fn rgb_triple(v: &serde_json::Value) -> Option<[f64; 3]> { + let a = v.as_array()?; + if a.len() != 3 { + return None; + } + let mut out = [0.0f64; 3]; + for (slot, x) in out.iter_mut().zip(a.iter()) { + let n = x.as_f64()?; + if !n.is_finite() { + return None; + } + *slot = n.clamp(0.0, 1.0); + } + Some(out) +} + impl PdfCraftApp { pub fn new() -> Self { Self { @@ -1273,6 +1293,19 @@ impl PdfCraftApp { // Null follows the interface language. "date_language": self.session.date_language(), "author": self.comment_prefs.author, + // Per-tool comment defaults (colours, opacity, widths), so Make Current + // Properties Default survives a restart (#340). + "comment_styles": self + .comment_prefs + .styles() + .map(|(t, s)| serde_json::json!({ + "tool": t.command(), + "color": s.color, + "opacity": s.opacity, + "width": s.width, + "fill": s.fill, + })) + .collect::>(), // Drawn signatures keep their original form (older settings read the same). "signature": match &self.signature { Some(fill_sign::SavedSig::Drawn(s)) => Some(s), _ => None }, "signature_text": match &self.signature { Some(fill_sign::SavedSig::Typed(t)) => Some(t), _ => None }, @@ -1341,6 +1374,34 @@ impl PdfCraftApp { if let Some(author) = v["author"].as_str().map(str::trim).filter(|a| !a.is_empty()) { self.comment_prefs.author = author.chars().take(MAX_AUTHOR_CHARS).collect(); } + // Per-tool comment styles (#340): each field goes through its clamping setter, so a + // malformed or hostile entry is clamped or ignored rather than trusted. + if let Some(styles) = v["comment_styles"].as_array() { + for e in styles { + let Some(tool) = e["tool"].as_str().and_then(crate::comments::CommentTool::from_command) else { continue }; + if let Some(c) = rgb_triple(&e["color"]) { + self.comment_prefs.set_color(tool, c); + } + if let Some(o) = e["opacity"].as_f64() { + self.comment_prefs.set_opacity(tool, o); + } + if let Some(w) = e["width"].as_f64() { + self.comment_prefs.set_width(tool, w); + } + // `"fill": null` is a saved "no fill", which clears a tool's default fill; a + // missing or malformed fill keeps it. + let fill = match e.get("fill") { + Some(serde_json::Value::Null) => Some(None), + Some(v) => rgb_triple(v).map(Some), + None => None, + }; + if let Some(fill) = fill { + let mut s = self.comment_prefs.style(tool); + s.fill = fill; + self.comment_prefs.set_style(tool, s); + } + } + } if let Ok(s) = serde_json::from_value::>>(v["signature"].clone()) && s.iter().all(|st| st.iter().all(|p| p.iter().all(|x| x.is_finite()))) { diff --git a/crates/ui-egui/src/print_ui.rs b/crates/ui-egui/src/print_ui.rs index 1d6a3efd..f465a8f7 100644 --- a/crates/ui-egui/src/print_ui.rs +++ b/crates/ui-egui/src/print_ui.rs @@ -9,6 +9,12 @@ use pdfcraft_engine::print::{self, Binding, BookletSubset, Content, Layout, Orie use crate::theme::{self, Tokens}; use crate::{PdfCraftApp, widgets}; +/// The preview pane, and the paper inside it (12 pt inset on each side). +const PREVIEW_W: f32 = 320.0; +const PREVIEW_H: f32 = 380.0; +const PREVIEW_INSET: f32 = 12.0; +pub(crate) const PREVIEW_BOX: (f32, f32) = (PREVIEW_W - 2.0 * PREVIEW_INSET, PREVIEW_H - 2.0 * PREVIEW_INSET); + #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum Which { All, @@ -269,6 +275,60 @@ impl PdfCraftApp { } } +/// The longest side, in pixels, of one page's print-preview raster (also kept within the GPU's +/// `max_texture_side`): an Actual-size print of a large page would otherwise ask for a raster +/// bigger than a texture can be. +pub(crate) const PREVIEW_MAX_SIDE: f32 = 4096.0; +/// The most bytes of print-preview rasters kept at once. The current sheet comes first, then the +/// next and the previous one; a neighbour that doesn't fit isn't rendered ahead. +pub(crate) const PREVIEW_BYTES: f64 = 128.0 * 1024.0 * 1024.0; + +/// Pages on the current sheet and its neighbours, each with the device pixels per point that +/// fill the preview pane (so the picture is not a stretched thumbnail), nearest sheet first and +/// within [`PREVIEW_MAX_SIDE`] (and `max_side`, the GPU's texture limit) and [`PREVIEW_BYTES`]. +pub(crate) fn preview_rasters(d: &PrintDraft, sizes: &[(f64, f64)], labels: &[String], ppp: f32, max_side: f32) -> Vec<(usize, f32)> { + let Ok(settings) = d.settings(sizes.len(), labels) else { return Vec::new() }; + let Ok(sheets) = print::layout(sizes, &settings) else { return Vec::new() }; + if sheets.is_empty() { + return Vec::new(); + } + let ppp = if ppp.is_finite() { ppp.max(1.0) } else { 1.0 }; + let side = if max_side.is_finite() && max_side >= 1.0 { max_side.min(PREVIEW_MAX_SIDE) } else { PREVIEW_MAX_SIDE }; + let i = d.sheet.min(sheets.len() - 1); + // Nearest first: the sheet on screen, then the next one, then the previous one. + let order = [Some(i), i.checked_add(1).filter(|n| *n < sheets.len()), i.checked_sub(1)]; + let mut out: Vec<(usize, f32, f64)> = Vec::new(); + let mut bytes = 0.0f64; + for sheet in order.into_iter().flatten().filter_map(|s| sheets.get(s)) { + let (sw, sh) = (sheet.size.0 as f32, sheet.size.1 as f32); + if !(sw.is_finite() && sh.is_finite()) || sw < 1.0 || sh < 1.0 { + continue; + } + let k = (PREVIEW_BOX.0 / sw).min(PREVIEW_BOX.1 / sh); + for pl in &sheet.placed { + let [a, b, _, _, _, _] = pl.matrix.0; + let placed = (a.hypot(b) as f32) * k * ppp; + let Some(&(pw, ph)) = sizes.get(pl.page) else { continue }; + let long_pt = pw.max(ph) as f32; + if !placed.is_finite() || placed < 0.05 || !long_pt.is_finite() || long_pt < 1.0 { + continue; + } + let scale = placed.min(64.0).min(side / long_pt); + let cost = (pw * f64::from(scale)).ceil() * (ph * f64::from(scale)).ceil() * 4.0; + if let Some(slot) = out.iter_mut().find(|(page, _, _)| *page == pl.page) { + if scale > slot.1 && bytes - slot.2 + cost <= PREVIEW_BYTES { + bytes += cost - slot.2; + (slot.1, slot.2) = (scale, cost); + } + } else if out.len() < 48 && (out.is_empty() || bytes + cost <= PREVIEW_BYTES) { + bytes += cost; + out.push((pl.page, scale, cost)); + } + } + } + out.into_iter().map(|(page, scale, _)| (page, scale)).collect() +} + /// Properties… on CUPS: the driver's options for this print, grouped as the driver groups them. /// Only choices away from the printer's defaults are kept, and sent with the job. fn driver_options_panel(ui: &mut egui::Ui, d: &mut PrintDraft, t: &Tokens) { @@ -567,15 +627,15 @@ pub(crate) fn body( ui.add_space(12.0); // Preview. ui.vertical(|ui| { - ui.set_width(320.0); - let (area, _) = ui.allocate_exact_size(vec2(320.0, 380.0), egui::Sense::hover()); + ui.set_width(PREVIEW_W); + let (area, _) = ui.allocate_exact_size(vec2(PREVIEW_W, PREVIEW_H), egui::Sense::hover()); ui.painter().rect_filled(area, 6.0, t.hover); match (&settings, sheets.get(d.sheet)) { (Err(e), _) => { ui.put(area.shrink(16.0), egui::Label::new(egui::RichText::new(e).color(t.text_muted)).wrap()); } (Ok(_), Some(sheet)) => { - let k = ((area.width() - 24.0) / sheet.size.0 as f32).min((area.height() - 24.0) / sheet.size.1 as f32); + let k = (PREVIEW_BOX.0 / sheet.size.0 as f32).min(PREVIEW_BOX.1 / sheet.size.1 as f32); let paper = Rect::from_center_size(area.center(), vec2(sheet.size.0 as f32 * k, sheet.size.1 as f32 * k)); ui.painter().rect_filled(paper, 0.0, Color32::WHITE); ui.painter().rect_stroke(paper, 0.0, Stroke::new(1.0, t.border), egui::StrokeKind::Outside); @@ -668,3 +728,52 @@ pub(crate) fn body( }); (go, cancel) } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn print_preview_rasters_stay_within_the_texture_limit() { + // Actual size on a 14,400 pt (200 in) page would ask for a raster far past any texture. + let d = PrintDraft { size: SizeMode::Actual, ..PrintDraft::default() }; + let sizes = vec![(14_400.0, 14_400.0); 2]; + let labels = vec!["1".into(), "2".into()]; + for max_side in [2048.0, 8192.0, 16384.0, f32::NAN, 0.0] { + for (page, scale) in preview_rasters(&d, &sizes, &labels, 4.0, max_side) { + let long = 14_400.0 * scale; + let cap = if max_side.is_finite() && max_side >= 1.0 { max_side.min(PREVIEW_MAX_SIDE) } else { PREVIEW_MAX_SIDE }; + assert!(long <= cap + 1.0, "page {page} at {max_side}: {long} px"); + } + } + } + + #[test] + fn print_preview_rasters_keep_the_current_sheet_within_the_byte_budget() { + // Many large pages: the current sheet always gets its raster; neighbours only while the + // budget lasts, and the total stays within it. + let d = PrintDraft { sheet: 5, ..PrintDraft::default() }; + let sizes = vec![(2_000.0, 2_000.0); 12]; + let labels: Vec = (1..=12).map(|n| n.to_string()).collect(); + let rasters = preview_rasters(&d, &sizes, &labels, 4.0, 16384.0); + assert_eq!(rasters.first().map(|r| r.0), Some(5), "the sheet on screen comes first: {rasters:?}"); + let total: f64 = rasters.iter().map(|(_, s)| (2_000.0 * f64::from(*s)).ceil().powi(2) * 4.0).sum(); + assert!(total <= PREVIEW_BYTES || rasters.len() == 1, "{total} bytes for {rasters:?}"); + } + + #[test] + fn print_preview_is_sharper_than_a_thumbnail_on_a_high_dpi_screen() { + let d = PrintDraft::default(); + let sizes = vec![(612.0, 792.0); 3]; + let labels = vec!["1".into(), "2".into(), "3".into()]; + let rasters = preview_rasters(&d, &sizes, &labels, 2.0, 8192.0); + let scale = rasters.iter().find(|(page, _)| *page == 0).map(|(_, s)| *s).unwrap(); + // A 132 pt thumbnail at 2× is about 0.43 px/pt. The preview pane needs roughly twice that. + assert!(scale > 0.7, "letter page in the preview at 2 px/pt: {scale}"); + assert!(rasters.iter().any(|(page, _)| *page == 1), "the next sheet is ready"); + let mut later = d.clone(); + later.sheet = 2; + let rasters = preview_rasters(&later, &sizes, &labels, 2.0, 8192.0); + assert!(rasters.iter().any(|(page, _)| *page == 2)); + } +} diff --git a/crates/ui-egui/src/signature_drag.rs b/crates/ui-egui/src/signature_drag.rs index ad97d1b0..b65d6cc6 100644 --- a/crates/ui-egui/src/signature_drag.rs +++ b/crates/ui-egui/src/signature_drag.rs @@ -60,9 +60,10 @@ impl SignatureDrag { } } let (Some((_, page, _)), Some(layers)) = (self.key, self.layers.as_mut()) else { return }; - // The image stays sharp at every zoom; bound the extra background raster to 2048². + // The image stays sharp at every zoom. The background matches the page view up to one + // whole-page texture; past that the view tiles and this preview stays at that cap. let Some(p) = doc.info.pages.get(page) else { return }; - let scale = scale.min(2048.0 / p.width.max(p.height).max(1.0)); + let scale = scale.min(crate::canvas::BASE_SIDE / p.width.max(p.height).max(1.0)); let tag = (scale * 1000.0) as u64; if layers.tag != Some(tag) { layers.renderer.set_queue(vec![RenderRequest { page, scale, tag, ..Default::default() }]); diff --git a/crates/ui-egui/tests/comments.rs b/crates/ui-egui/tests/comments.rs index cc3b6e82..ff85148a 100644 --- a/crates/ui-egui/tests/comments.rs +++ b/crates/ui-egui/tests/comments.rs @@ -537,6 +537,13 @@ fn make_current_properties_default() { h.run_steps(3); let st = h.state().comment_prefs.style(pdfcraft_ui_egui::comments::CommentTool::Rectangle); assert_eq!((st.color, st.opacity, st.width), ([0.0, 0.47, 0.84], 0.5, 5.0)); + // The default survives a restart (#340): a fresh app reads the persisted settings and its + // next rectangle still takes the style. + let json = h.state().persist(); + let mut fresh = PdfCraftApp::new(); + fresh.restore(&json); + let st = fresh.comment_prefs.style(pdfcraft_ui_egui::comments::CommentTool::Rectangle); + assert_eq!((st.color, st.opacity, st.width), ([0.0, 0.47, 0.84], 0.5, 5.0), "the tool default persisted"); // The next rectangle takes it. h.state_mut().set_option("quick", "square").unwrap(); drag_pt(&mut h, (160.0, 100.0), (260.0, 40.0)); diff --git a/crates/ui-egui/tests/fonts.rs b/crates/ui-egui/tests/fonts.rs index d65b2b6c..bbb69d1a 100644 --- a/crates/ui-egui/tests/fonts.rs +++ b/crates/ui-egui/tests/fonts.rs @@ -162,7 +162,7 @@ fn ui_fonts_work_without_craft_fonts() { theme::install_fonts(&ctx); } -/// Latin- and Cyrillic-script catalogs (Czech, Brazilian Portuguese, German, Spanish, French, Russian, Bulgarian, Hungarian, Ukrainian) are drawn entirely by the app's own faces +/// Latin- and Cyrillic-script catalogs (Czech, Brazilian Portuguese, German, Spanish, French, Russian, Bulgarian, Hungarian, Ukrainian, Italian) are drawn entirely by the app's own faces /// (Inter, JetBrains Mono): no letter falls through to egui's defaults or a CJK fallback. (egui's /// `has_glyphs` can't answer this: with only the primary face it is also the replacement face.) #[test] @@ -179,6 +179,7 @@ fn primary_ui_fonts_cover_latin_and_cyrillic_catalogs() { ("bg", include_str!("../src/i18n/bg.tsv")), ("hu", include_str!("../src/i18n/hu.tsv")), ("uk", include_str!("../src/i18n/uk.tsv")), + ("it", include_str!("../src/i18n/it.tsv")), ] { let mut text = String::from("áčďéěíňóřšťúůýžÁČĎÉĚÍŇÓŘŠŤÚŮÝŽãõçâêôàÃÕÇÂÊÔÀñÑüÜäÄöÖőűß„“¿¡«»…ґҐєЄіІїЇ"); for line in catalog.lines().filter(|l| !l.starts_with('#')) { diff --git a/crates/ui-egui/tests/ui.rs b/crates/ui-egui/tests/ui.rs index ba0e3c91..760245bc 100644 --- a/crates/ui-egui/tests/ui.rs +++ b/crates/ui-egui/tests/ui.rs @@ -380,6 +380,52 @@ fn persistence_round_trips_and_tolerates_garbage() { assert_eq!(b.theme, pdfcraft_ui_egui::theme::ThemeKind::Dark); } +/// A tool's saved "no fill" (`"fill": null`) clears a fill it had as its default; a missing or +/// malformed fill keeps it (#340). +#[test] +fn a_saved_no_fill_clears_a_comment_tool_default_fill() { + use pdfcraft_ui_egui::comments::CommentTool; + let filled = |a: &mut PdfCraftApp| { + let mut s = a.comment_prefs.style(CommentTool::Rectangle); + s.fill = Some([0.2, 0.4, 0.6]); + a.comment_prefs.set_style(CommentTool::Rectangle, s); + }; + let mut a = PdfCraftApp::new(); + filled(&mut a); + a.restore(r#"{"comment_styles":[{"tool":"comment.square","fill":null}]}"#); + assert_eq!(a.comment_prefs.style(CommentTool::Rectangle).fill, None, "null clears the fill"); + let mut b = PdfCraftApp::new(); + filled(&mut b); + b.restore(r#"{"comment_styles":[{"tool":"comment.square","color":[0,0,1]},{"tool":"comment.square","fill":"red"}]}"#); + assert_eq!(b.comment_prefs.style(CommentTool::Rectangle).fill, Some([0.2, 0.4, 0.6]), "missing or malformed keeps it"); + // A round trip keeps a cleared fill cleared. + let mut c = PdfCraftApp::new(); + c.restore(&a.persist()); + assert_eq!(c.comment_prefs.style(CommentTool::Rectangle).fill, None); +} + +/// Persisted per-tool comment styles go through their clamping setters: hostile or malformed +/// values are clamped or ignored, never trusted (#340). +#[test] +fn comment_style_settings_clamp_and_refuse_hostile_values() { + use pdfcraft_ui_egui::comments::CommentTool; + let mut a = PdfCraftApp::new(); + a.restore( + r#"{"comment_styles":[ + {"tool":"comment.highlight","color":[2,-1,0.5],"opacity":99,"width":-4}, + {"tool":"comment.note","color":"yellow","opacity":"none"}, + {"tool":"comment.note","color":[0.1,null,0.3]}, + {"tool":"bogus.command","color":[0,0,0]} + ]}"#, + ); + // Out-of-range numbers are clamped into range. + let st = a.comment_prefs.style(CommentTool::Highlight); + assert_eq!((st.color, st.opacity, st.width), ([1.0, 0.0, 0.5], 1.0, 0.5)); + // A malformed colour is refused whole: the tool keeps its default. + let note = a.comment_prefs.style(CommentTool::Note); + assert_eq!(note.color, [1.0, 0.82, 0.0], "the default colour stays"); +} + #[test] fn zoom_keeps_the_point_under_the_cursor_still() { let mut h = harness(|app| { diff --git a/docs/localization.md b/docs/localization.md index e3e685a2..148ee875 100644 --- a/docs/localization.md +++ b/docs/localization.md @@ -1,8 +1,8 @@ # Interface language -Choose **Menu > Edit > Preferences…** (Command-comma on macOS, Ctrl-comma elsewhere) **> Interface language** and select **Auto**, **English**, **日本語**, **简体中文**, **繁體中文**, **Русский**, **Български**, **Čeština**, **Português (Brasil)**, **Deutsch**, **Español**, **Français**, **తెలుగు**, **Magyar** or **Українська**. The change applies immediately and persists between launches. Command ids, document contents and file names are unchanged. +Choose **Menu > Edit > Preferences…** (Command-comma on macOS, Ctrl-comma elsewhere) **> Interface language** and select **Auto**, **English**, **日本語**, **简体中文**, **繁體中文**, **Русский**, **Български**, **Čeština**, **Português (Brasil)**, **Deutsch**, **Español**, **Français**, **తెలుగు**, **Magyar**, **Українська** or **Italiano**. The change applies immediately and persists between launches. Command ids, document contents and file names are unchanged. -**Auto** (the default) follows the system language: `LC_ALL`, `LC_MESSAGES` or `LANG`, then the preferred-languages list on macOS. Any Portuguese locale (`pt_BR`, `pt_PT`) uses the Brazilian catalog, any French locale (`fr`, `fr_FR`, `fr_CA`, `fr_BE`) the French one, any German locale (`de`, `de_DE`, `de_AT`, `de_CH`) the German one, and Chinese locales for Taiwan, Hong Kong and Macau (`zh_TW`, `zh_HK`, `zh_MO`, `zh-Hant`) the Traditional Chinese one; other Chinese locales (`zh`, `zh_CN`, `zh_SG`, `zh-Hans`) the Simplified Chinese one. Telugu locales (`te`, `te_IN`) use the Telugu catalog, Bulgarian locales (`bg`, `bg_BG`) the Bulgarian one, and Hungarian locales (`hu`, `hu_HU`) the Hungarian one, and Ukrainian locales (`uk`, `uk_UA`) the Ukrainian one. A system language without a catalog shows English. On Windows, **Auto** uses the Windows display languages, in preference order, when no supported locale is selected by those environment variables. Neutral `C`/`POSIX` locale values (including `C.UTF-8`) inherited from a launcher do not override the Windows display language; explicitly named supported locales such as `fr_FR.UTF-8` still do. The query asks Windows directly (`GetUserPreferredUILanguages`, through the `sys-locale` crate) without starting a process, and is cached for the process. If detection fails or the display language has no catalog, PdfCraft shows English. +**Auto** (the default) follows the system language: `LC_ALL`, `LC_MESSAGES` or `LANG`, then the preferred-languages list on macOS. Any Portuguese locale (`pt_BR`, `pt_PT`) uses the Brazilian catalog, any French locale (`fr`, `fr_FR`, `fr_CA`, `fr_BE`) the French one, any German locale (`de`, `de_DE`, `de_AT`, `de_CH`) the German one, and Chinese locales for Taiwan, Hong Kong and Macau (`zh_TW`, `zh_HK`, `zh_MO`, `zh-Hant`) the Traditional Chinese one; other Chinese locales (`zh`, `zh_CN`, `zh_SG`, `zh-Hans`) the Simplified Chinese one. Telugu locales (`te`, `te_IN`) use the Telugu catalog, Bulgarian locales (`bg`, `bg_BG`) the Bulgarian one, and Hungarian locales (`hu`, `hu_HU`) the Hungarian one, and Ukrainian locales (`uk`, `uk_UA`) the Ukrainian one, and Italian locales (`it`, `it_IT`, `it_CH`) the Italian one. A system language without a catalog shows English. On Windows, **Auto** uses the Windows display languages, in preference order, when no supported locale is selected by those environment variables. Neutral `C`/`POSIX` locale values (including `C.UTF-8`) inherited from a launcher do not override the Windows display language; explicitly named supported locales such as `fr_FR.UTF-8` still do. The query asks Windows directly (`GetUserPreferredUILanguages`, through the `sys-locale` crate) without starting a process, and is cached for the process. If detection fails or the display language has no catalog, PdfCraft shows English. The control channel exposes the setting through `ui.set`: @@ -10,17 +10,21 @@ The control channel exposes the setting through `ui.set`: {"method":"ui.set","params":{"key":"language","value":"ja"}} ``` -The value is `auto` or a language code (`en`, `ja`, `zh-hans`, `zh-hant`, `ru`, `bg`, `cs`, `pt-br`, `de`, `es`, `fr`, `te`, `hu`, `uk`), in any case. `ui.state` reports `language` as written in the preferences (`auto`, `en`, `ja`, `zh-hans`, `zh-hant`, `ru`, `bg`, `cs`, `pt-br`, `de`, `es`, `fr`, `te`, `hu` or `uk`). Unknown values return an error without changing the current setting. Preferences saved before this setting existed follow the system language. +The value is `auto` or a language code (`en`, `ja`, `zh-hans`, `zh-hant`, `ru`, `bg`, `cs`, `pt-br`, `de`, `es`, `fr`, `te`, `hu`, `uk`, `it`), in any case. `ui.state` reports `language` as written in the preferences (`auto`, `en`, `ja`, `zh-hans`, `zh-hant`, `ru`, `bg`, `cs`, `pt-br`, `de`, `es`, `fr`, `te`, `hu`, `uk` or `it`). Unknown values return an error without changing the current setting. Preferences saved before this setting existed follow the system language. -Dialogs, panels, menus, notices and history labels go through the catalog (`tl!`). Japanese, Traditional Chinese, Simplified Chinese, Russian, Bulgarian, German, Spanish, French, Telugu, Hungarian and Ukrainian translate them (about 1,800 entries each); Czech and Brazilian Portuguese cover the menus so far. Untranslated labels use English. Error details that come from the engine or the operating system are shown as they are, inside a translated frame ("操作「…」に失敗しました: …"). The command palette matches the translated label, the English label and the command id. Vertical Japanese PDF rendering is an existing viewer feature; this change does not add vertical text editing. +Dialogs, panels, menus, notices and history labels go through the catalog (`tl!`). Japanese, Traditional Chinese, Simplified Chinese, Russian, Bulgarian, German, Spanish, French, Telugu, Hungarian, Ukrainian and Italian translate them (about 1,800 entries each); Czech and Brazilian Portuguese cover the menus so far. Untranslated labels use English. Error details that come from the engine or the operating system are shown as they are, inside a translated frame ("操作「…」に失敗しました: …"). The command palette matches the translated label, the English label and the command id. Vertical Japanese PDF rendering is an existing viewer feature; this change does not add vertical text editing. +Dialogs, panels, menus, notices and history labels go through the catalog (`tl!`). Japanese, Traditional Chinese, Simplified Chinese, Russian, Bulgarian, German, Spanish, French, Telugu, Hungarian, Ukrainian and Brazilian Portuguese translate them (about 1,800 entries each); Czech covers the menus so far. Untranslated labels use English. Error details that come from the engine or the operating system are shown as they are, inside a translated frame ("操作「…」に失敗しました: …"). The command palette matches the translated label, the English label and the command id. Vertical Japanese PDF rendering is an existing viewer feature; this change does not add vertical text editing. The Ukrainian catalog has 2,047 entries, written from the meaning of the English labels using Ukrainian computing vocabulary. Commands use infinitives; fixed-count messages use count-neutral wording. Plural-aware messages use the three [CLDR Ukrainian integer forms](https://www.unicode.org/cldr/charts/48/supplemental/language_plural_rules.html#uk): `1 сторінка`, `2 сторінки`, `5 сторінок`; 11–14 take the third form, while 21 and 22 return to the first and second. Calendar dates use genitive month names (`9 жовтня 2026`), while headings use standalone names (`Жовтень 2026`). Home recommendation cards grow to fit translated text; the toolbar search hint truncates before the shortcut, with the full label available on hover. +Japanese interface text uses BIZ UDPGothic from [craft-fonts](https://github.com/storytold/craft-fonts), an optional build input that every release includes (`CRAFT_FONTS_DIR`; see the README). A build made without it has no Japanese face, so Japanese labels show replacement boxes. Chinese is drawn with the same craft-fonts CJK faces (in Simplified Chinese the `Hans` faces come first, so a line never mixes faces with different baselines), so a character none of them has shows a replacement box (and every Chinese character does in a build without craft-fonts). Russian, Bulgarian, Czech, Brazilian Portuguese, German, Spanish, French, Hungarian and Italian need only the bundled Latin faces (tested in `tests/fonts.rs`). Hungarian uses the same one/other plural rule as English: 1 is singular, and every other count — including 0 — is the other form. After a numeral the noun stays singular (`1 oldal`, `2 oldal`). Telugu is drawn with a craft-fonts `Telu` face (Noto Sans Telugu, kept in the web build too), whose conjuncts egui shapes; a build without one shows Telugu labels as replacement boxes, and the release-pinned craft-fonts input has no Telugu face yet. +The Brazilian Portuguese catalog has 2,000 entries: the ~1,826-entry gist André Cardoso posted in [#288](https://github.com/storytold/pdfcraft/issues/288), the labels added since, and a review of the existing wording. Portuguese, like French, treats 0 and 1 as singular (`1 página`, `2 páginas`). + Japanese interface text uses BIZ UDPGothic from [craft-fonts](https://github.com/storytold/craft-fonts), an optional build input that every release includes (`CRAFT_FONTS_DIR`; see the README). A build made without it has no Japanese face, so Japanese labels show replacement boxes. Chinese is drawn with the same craft-fonts CJK faces (in Simplified Chinese the `Hans` faces come first, so a line never mixes faces with different baselines), so a character none of them has shows a replacement box (and every Chinese character does in a build without craft-fonts). Russian, Bulgarian, Czech, Brazilian Portuguese, German, Spanish, French and Hungarian need only the bundled Latin faces (tested in `tests/fonts.rs`). Hungarian uses the same one/other plural rule as English: 1 is singular, and every other count — including 0 — is the other form. After a numeral the noun stays singular (`1 oldal`, `2 oldal`). Telugu is drawn with a craft-fonts `Telu` face (Noto Sans Telugu, kept in the web build too), whose conjuncts egui shapes; a build without one shows Telugu labels as replacement boxes, and the release-pinned craft-fonts input has no Telugu face yet. There is no right-to-left interface language yet. File names and document titles in Arabic or Hebrew are drawn with a craft-fonts `Arab` face when the build input has one; on desktop, a character no embedded face has is drawn with one font already installed on the machine (`PDFCRAFT_SYSTEM_FONTS=0` turns this off). The tab strip, the recent-files list and Properties show such names in display order; other places (bookmarks, comments, search results) have the glyphs but may order mixed-direction text wrongly. -Japanese, Simplified Chinese, French and German coverage tests, following PhotoCraft's complete-catalog approach, check every registered command, All tools label and `tl!("literal")` in the UI source. Simplified Chinese also checks direct `i18n::t` calls and multiline literals, plus the About tabs, contributor name modes, sort options, table headers and model columns. Generated history labels, contributor summaries and diagnostics are tested with user-supplied names and error details. Catalog coverage does not guarantee glyph coverage: the release-pinned craft-fonts input currently has no `Hans` face, and the web build embeds only BIZ UDPGothic Regular. Chinese font delivery remains separate work, as discussed in [#112](https://github.com/storytold/pdfcraft/pull/112) and [#140](https://github.com/storytold/pdfcraft/pull/140). +Japanese, Simplified Chinese, French, German and Brazilian Portuguese coverage tests, following PhotoCraft's complete-catalog approach, check every registered command, All tools label and `tl!("literal")` in the UI source. Simplified Chinese also checks direct `i18n::t` calls and multiline literals, plus the About tabs, contributor name modes, sort options, table headers and model columns. Generated history labels, contributor summaries and diagnostics are tested with user-supplied names and error details. Catalog coverage does not guarantee glyph coverage: the release-pinned craft-fonts input currently has no `Hans` face, and the web build embeds only BIZ UDPGothic Regular. Chinese font delivery remains separate work, as discussed in [#112](https://github.com/storytold/pdfcraft/pull/112) and [#140](https://github.com/storytold/pdfcraft/pull/140). German labels keep nouns capitalized, including tool names inserted into notices. The certificate viewer uses the `certificate` context for `Subject` (the certificate holder), while document properties keep the plain translation (the topic). Search hints reserve room for the shortcut, and Home cards limit their title and description to the available rows; hovering shows the full text when it is shortened. diff --git a/parity/acrobat-features.toml b/parity/acrobat-features.toml index 2a172ae9..ae6477e7 100644 --- a/parity/acrobat-features.toml +++ b/parity/acrobat-features.toml @@ -3819,7 +3819,7 @@ status = "shipped" commands = ["comment.list"] tools = [] evidence = ["crates/ui-egui/tests/comments.rs::make_current_properties_default"] -notes = "colour, opacity and line width become the tool's defaults (canvas and Comments panel menus)" +notes = "colour, opacity and line width become the tool's defaults (canvas and Comments panel menus) and survive a restart: the per-tool styles are persisted with the settings and restored through their clamping setters (#340)" [[feature]] id = "comment.author-identity" @@ -9819,7 +9819,7 @@ status = "partial" commands = ["app.preferences"] tools = [] evidence = ["crates/ui-egui/src/i18n/mod.rs::windows_display_language_resolves_chinese_scripts", "crates/ui-egui/src/i18n/mod.rs::neutral_locale_does_not_override_display_language", "crates/ui-egui/src/i18n/mod.rs::windows_display_language_query_returns_a_locale_tag", "crates/ui-egui/src/i18n/mod.rs::language_persists_and_invalid_input_keeps_current_language", "crates/ui-egui/src/i18n/mod.rs::bundled_catalogs_are_consistent", "crates/ui-egui/src/i18n/mod.rs::japanese_covers_commands_and_catalogue", "crates/ui-egui/src/i18n/mod.rs::simplified_chinese_covers_commands_and_catalogue", "crates/ui-egui/src/i18n/mod.rs::simplified_chinese_covers_ui_literals", "crates/ui-egui/src/i18n/mod.rs::simplified_chinese_history_and_diagnostics_preserve_user_values", "crates/ui-egui/tests/control.rs::simplified_chinese_signature_prompts_and_errors_keep_document_state", "crates/ui-egui/tests/control.rs::language_switch_preserves_document_and_command_ids", "crates/ui-egui/tests/control.rs::japanese_controls_and_search_keep_command_ids", "crates/ui-egui/tests/control.rs::japanese_dialogs_errors_and_custom_action_names", "crates/ui-egui/src/i18n/mod.rs::french_is_registered", "crates/ui-egui/src/i18n/mod.rs::french_covers_commands_and_catalogue", "crates/ui-egui/src/i18n/mod.rs::french_covers_ui_literals", "crates/ui-egui/src/i18n/mod.rs::french_history_and_diagnostics_preserve_user_values", "crates/ui-egui/src/i18n/mod.rs::german_certificate_subject_has_a_distinct_context", "crates/ui-egui/src/widgets.rs::search_placeholder_never_overlaps_the_shortcut", "crates/ui-egui/src/home.rs::translated_card_description_leaves_room_for_the_action", "crates/ui-egui/tests/control.rs::german_preferences_and_search_keep_command_ids", "crates/ui-egui/src/i18n/mod.rs::telugu_covers_commands_and_catalogue", "crates/ui-egui/src/i18n/mod.rs::telugu_labels_have_glyphs", "crates/ui-egui/src/i18n/mod.rs::hungarian_is_registered", "crates/ui-egui/src/i18n/mod.rs::hungarian_covers_commands_and_catalogue", "crates/ui-egui/src/i18n/mod.rs::hungarian_covers_ui_literals", "crates/ui-egui/src/i18n/mod.rs::hungarian_history_and_diagnostics_preserve_user_values", "crates/ui-egui/src/i18n/mod.rs::ukrainian_is_registered_and_persists", "crates/ui-egui/src/i18n/mod.rs::ukrainian_integer_plurals_cover_teens_and_large_counts", "crates/ui-egui/src/i18n/mod.rs::ukrainian_calendar_uses_month_case_for_dates", "crates/ui-egui/src/i18n/mod.rs::ukrainian_catalog_does_not_leave_english_ui_text", "crates/ui-egui/src/i18n/mod.rs::ukrainian_covers_commands_and_catalogue", "crates/ui-egui/src/i18n/mod.rs::ukrainian_covers_ui_literals", "crates/ui-egui/src/i18n/mod.rs::ukrainian_history_and_diagnostics_preserve_user_values"] -notes = "Preferences switches Auto (system language)/English/Japanese/Simplified Chinese/Traditional Chinese/Czech/Brazilian Portuguese/German/Spanish/French/Telugu/Hungarian/Ukrainian and persists; ui.set language auto|en|ja|zh-hans|zh-hant|cs|pt-br|de|es|fr|te|hu|uk and ui.state expose it. TSV catalogs per language (same system as PhotoCraft); every dialog, panel and notice goes through tl!. Japanese, Traditional Chinese, Simplified Chinese, German, Spanish, French and Hungarian cover commands, dialogs, panels, shortcuts and history labels; Czech and Brazilian Portuguese the menus. French locales (fr, fr_FR, fr_CA, fr_BE) select the French catalog, German locales (de, de_DE, de_AT, de_CH) the German one, Hungarian locales (hu, hu_HU) the Hungarian one. German search hints reserve shortcut space, Home cards bound translated text, certificate Subject has its own context, and inserted tool names keep their capitalization. Engine/OS error details stay untranslated. Auto detects the Windows display language after explicitly named supported locale overrides; neutral C/POSIX launcher locales are skipped on Windows, with Chinese script/region mapping and English fallback. Missing: Czech and Brazilian Portuguese dialogs, Chinese and Telugu font delivery in releases, a full localization audit." +notes = "Preferences switches Auto (system language)/English/Japanese/Simplified Chinese/Traditional Chinese/Czech/Brazilian Portuguese/German/Spanish/French/Telugu/Hungarian/Ukrainian/Italian and persists; ui.set language auto|en|ja|zh-hans|zh-hant|cs|pt-br|de|es|fr|te|hu|uk|it and ui.state expose it. TSV catalogs per language (same system as PhotoCraft); every dialog, panel and notice goes through tl!. Japanese, Traditional Chinese, Simplified Chinese, German, Spanish, French and Hungarian cover commands, dialogs, panels, shortcuts and history labels; Czech and Brazilian Portuguese the menus. French locales (fr, fr_FR, fr_CA, fr_BE) select the French catalog, German locales (de, de_DE, de_AT, de_CH) the German one, Hungarian locales (hu, hu_HU) the Hungarian one. German search hints reserve shortcut space, Home cards bound translated text, certificate Subject has its own context, and inserted tool names keep their capitalization. Engine/OS error details stay untranslated. Auto detects the Windows display language after explicitly named supported locale overrides; neutral C/POSIX launcher locales are skipped on Windows, with Chinese script/region mapping and English fallback. Missing: Czech and Brazilian Portuguese dialogs, Chinese and Telugu font delivery in releases, a full localization audit." [[feature]] id = "misc.prefs-reading"