From b5d84db3c823d0b5d78826f23061422282141ab6 Mon Sep 17 00:00:00 2001 From: Reece Browne <74901996+reecebrowne@users.noreply.github.com> Date: Thu, 5 Jun 2025 11:12:39 +0100 Subject: [PATCH] Stirling 2.0 (#3645) # Description of Changes Please provide a summary of the changes, including: Vite fixes Indexxdb Closes #(issue_number) --- ## Checklist ### General - [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md) (if applicable) - [ ] I have performed a self-review of my own code - [ ] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#6-testing) for more details. --- .gitignore | 3 + frontend/.gitignore | 1 + .../dist/assets/browser-ponyfill-CwETHAJL.js | 2 - frontend/dist/assets/index-C7ZkpjP3.js | 99 - frontend/dist/assets/index-CEZrmp6h.css | 1 - frontend/dist/favicon.ico | Bin 3870 -> 0 bytes frontend/dist/index.html | 23 - frontend/dist/locales/ar-AR/translation.json | 1561 - frontend/dist/locales/az-AZ/translation.json | 1561 - frontend/dist/locales/bg-BG/translation.json | 1561 - frontend/dist/locales/ca-CA/translation.json | 1561 - frontend/dist/locales/cs-CZ/translation.json | 1561 - frontend/dist/locales/da-DK/translation.json | 1561 - frontend/dist/locales/de-DE/translation.json | 1561 - frontend/dist/locales/el-GR/translation.json | 1561 - frontend/dist/locales/en-GB/translation.json | 1620 - frontend/dist/locales/en-US/translation.json | 1561 - frontend/dist/locales/en/translation.json | 1 - frontend/dist/locales/es-ES/translation.json | 1561 - frontend/dist/locales/eu-ES/translation.json | 1561 - frontend/dist/locales/fa-IR/translation.json | 1561 - frontend/dist/locales/fr-FR/translation.json | 1561 - frontend/dist/locales/ga-IE/translation.json | 1561 - frontend/dist/locales/hi-IN/translation.json | 1561 - frontend/dist/locales/hr-HR/translation.json | 1561 - frontend/dist/locales/hu-HU/translation.json | 1561 - frontend/dist/locales/id-ID/translation.json | 1561 - frontend/dist/locales/it-IT/translation.json | 1561 - frontend/dist/locales/ja-JP/translation.json | 1561 - frontend/dist/locales/ko-KR/translation.json | 1561 - frontend/dist/locales/ml-ML/translation.json | 1561 - frontend/dist/locales/nl-NL/translation.json | 1561 - frontend/dist/locales/no-NB/translation.json | 1561 - frontend/dist/locales/pl-PL/translation.json | 1561 - frontend/dist/locales/pt-BR/translation.json | 1561 - frontend/dist/locales/pt-PT/translation.json | 1561 - frontend/dist/locales/ro-RO/translation.json | 1561 - frontend/dist/locales/ru-RU/translation.json | 1561 - frontend/dist/locales/sk-SK/translation.json | 1561 - frontend/dist/locales/sl-SI/translation.json | 1561 - .../dist/locales/sr-LATN-RS/translation.json | 1561 - frontend/dist/locales/sv-SE/translation.json | 1561 - frontend/dist/locales/th-TH/translation.json | 1561 - frontend/dist/locales/tr-TR/translation.json | 1561 - frontend/dist/locales/uk-UA/translation.json | 1561 - frontend/dist/locales/vi-VN/translation.json | 1561 - frontend/dist/locales/zh-BO/translation.json | 1561 - frontend/dist/locales/zh-CN/translation.json | 1561 - frontend/dist/locales/zh-TW/translation.json | 1561 - frontend/dist/logo192.png | Bin 5347 -> 0 bytes frontend/dist/logo512.png | Bin 9664 -> 0 bytes frontend/dist/manifest.json | 25 - frontend/dist/pdf.worker.js | 58353 ---------------- frontend/dist/robots.txt | 3 - .../public/locales/en-GB/translation.json | 8 +- .../src/components/FileCard.standalone.tsx | 136 + frontend/src/components/FileManager.tsx | 384 +- frontend/src/components/StorageStatsCard.tsx | 76 + frontend/src/components/Viewer.tsx | 277 +- frontend/src/hooks/useIndexedDBThumbnail.ts | 72 + frontend/src/pages/HomePage.tsx | 62 +- .../src/services/fileOperationsService.ts | 194 + frontend/src/services/fileStorage.ts | 576 + frontend/src/tools/Compress.tsx | 79 +- frontend/src/tools/Merge.tsx | 21 +- frontend/src/tools/Split.tsx | 30 +- frontend/src/types/file.ts | 19 + frontend/src/utils/fileUtils.ts | 124 + frontend/src/utils/storageUtils.ts | 71 + frontend/src/utils/thumbnailUtils.ts | 51 + frontend/src/vite.config.ts | 6 - frontend/tsconfig.json | 2 +- frontend/vite.config.ts | 15 + src/main/resources/messages_en_GB.properties | 6 + 74 files changed, 1958 insertions(+), 122822 deletions(-) delete mode 100644 frontend/dist/assets/browser-ponyfill-CwETHAJL.js delete mode 100644 frontend/dist/assets/index-C7ZkpjP3.js delete mode 100644 frontend/dist/assets/index-CEZrmp6h.css delete mode 100644 frontend/dist/favicon.ico delete mode 100644 frontend/dist/index.html delete mode 100644 frontend/dist/locales/ar-AR/translation.json delete mode 100644 frontend/dist/locales/az-AZ/translation.json delete mode 100644 frontend/dist/locales/bg-BG/translation.json delete mode 100644 frontend/dist/locales/ca-CA/translation.json delete mode 100644 frontend/dist/locales/cs-CZ/translation.json delete mode 100644 frontend/dist/locales/da-DK/translation.json delete mode 100644 frontend/dist/locales/de-DE/translation.json delete mode 100644 frontend/dist/locales/el-GR/translation.json delete mode 100644 frontend/dist/locales/en-GB/translation.json delete mode 100644 frontend/dist/locales/en-US/translation.json delete mode 100644 frontend/dist/locales/en/translation.json delete mode 100644 frontend/dist/locales/es-ES/translation.json delete mode 100644 frontend/dist/locales/eu-ES/translation.json delete mode 100644 frontend/dist/locales/fa-IR/translation.json delete mode 100644 frontend/dist/locales/fr-FR/translation.json delete mode 100644 frontend/dist/locales/ga-IE/translation.json delete mode 100644 frontend/dist/locales/hi-IN/translation.json delete mode 100644 frontend/dist/locales/hr-HR/translation.json delete mode 100644 frontend/dist/locales/hu-HU/translation.json delete mode 100644 frontend/dist/locales/id-ID/translation.json delete mode 100644 frontend/dist/locales/it-IT/translation.json delete mode 100644 frontend/dist/locales/ja-JP/translation.json delete mode 100644 frontend/dist/locales/ko-KR/translation.json delete mode 100644 frontend/dist/locales/ml-ML/translation.json delete mode 100644 frontend/dist/locales/nl-NL/translation.json delete mode 100644 frontend/dist/locales/no-NB/translation.json delete mode 100644 frontend/dist/locales/pl-PL/translation.json delete mode 100644 frontend/dist/locales/pt-BR/translation.json delete mode 100644 frontend/dist/locales/pt-PT/translation.json delete mode 100644 frontend/dist/locales/ro-RO/translation.json delete mode 100644 frontend/dist/locales/ru-RU/translation.json delete mode 100644 frontend/dist/locales/sk-SK/translation.json delete mode 100644 frontend/dist/locales/sl-SI/translation.json delete mode 100644 frontend/dist/locales/sr-LATN-RS/translation.json delete mode 100644 frontend/dist/locales/sv-SE/translation.json delete mode 100644 frontend/dist/locales/th-TH/translation.json delete mode 100644 frontend/dist/locales/tr-TR/translation.json delete mode 100644 frontend/dist/locales/uk-UA/translation.json delete mode 100644 frontend/dist/locales/vi-VN/translation.json delete mode 100644 frontend/dist/locales/zh-BO/translation.json delete mode 100644 frontend/dist/locales/zh-CN/translation.json delete mode 100644 frontend/dist/locales/zh-TW/translation.json delete mode 100644 frontend/dist/logo192.png delete mode 100644 frontend/dist/logo512.png delete mode 100644 frontend/dist/manifest.json delete mode 100644 frontend/dist/pdf.worker.js delete mode 100644 frontend/dist/robots.txt create mode 100644 frontend/src/components/FileCard.standalone.tsx create mode 100644 frontend/src/components/StorageStatsCard.tsx create mode 100644 frontend/src/hooks/useIndexedDBThumbnail.ts create mode 100644 frontend/src/services/fileOperationsService.ts create mode 100644 frontend/src/services/fileStorage.ts create mode 100644 frontend/src/types/file.ts create mode 100644 frontend/src/utils/fileUtils.ts create mode 100644 frontend/src/utils/storageUtils.ts create mode 100644 frontend/src/utils/thumbnailUtils.ts delete mode 100644 frontend/src/vite.config.ts create mode 100644 frontend/vite.config.ts diff --git a/.gitignore b/.gitignore index 90d48ccea..519c28f4a 100644 --- a/.gitignore +++ b/.gitignore @@ -189,6 +189,9 @@ id_ed25519.pub .pytest_cache .ipynb_checkpoints +# Claude.ai assistant files +CLAUDE.md + **/jcef-bundle/ # node_modules diff --git a/frontend/.gitignore b/frontend/.gitignore index 4d29575de..800f3a80c 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -10,6 +10,7 @@ # production /build +/dist # misc .DS_Store diff --git a/frontend/dist/assets/browser-ponyfill-CwETHAJL.js b/frontend/dist/assets/browser-ponyfill-CwETHAJL.js deleted file mode 100644 index b8ac68491..000000000 --- a/frontend/dist/assets/browser-ponyfill-CwETHAJL.js +++ /dev/null @@ -1,2 +0,0 @@ -import{c as R,g as z}from"./index-C7ZkpjP3.js";function $(w,d){for(var b=0;by[h]})}}}return Object.freeze(Object.defineProperty(w,Symbol.toStringTag,{value:"Module"}))}var A={exports:{}},U;function X(){return U||(U=1,function(w,d){var b=typeof globalThis<"u"&&globalThis||typeof self<"u"&&self||typeof R<"u"&&R,y=function(){function p(){this.fetch=!1,this.DOMException=b.DOMException}return p.prototype=b,new p}();(function(p){(function(u){var a=typeof p<"u"&&p||typeof self<"u"&&self||typeof a<"u"&&a,f={searchParams:"URLSearchParams"in a,iterable:"Symbol"in a&&"iterator"in Symbol,blob:"FileReader"in a&&"Blob"in a&&function(){try{return new Blob,!0}catch{return!1}}(),formData:"FormData"in a,arrayBuffer:"ArrayBuffer"in a};function S(e){return e&&DataView.prototype.isPrototypeOf(e)}if(f.arrayBuffer)var F=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],I=ArrayBuffer.isView||function(e){return e&&F.indexOf(Object.prototype.toString.call(e))>-1};function v(e){if(typeof e!="string"&&(e=String(e)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(e)||e==="")throw new TypeError('Invalid character in header field name: "'+e+'"');return e.toLowerCase()}function E(e){return typeof e!="string"&&(e=String(e)),e}function T(e){var t={next:function(){var r=e.shift();return{done:r===void 0,value:r}}};return f.iterable&&(t[Symbol.iterator]=function(){return t}),t}function s(e){this.map={},e instanceof s?e.forEach(function(t,r){this.append(r,t)},this):Array.isArray(e)?e.forEach(function(t){this.append(t[0],t[1])},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}s.prototype.append=function(e,t){e=v(e),t=E(t);var r=this.map[e];this.map[e]=r?r+", "+t:t},s.prototype.delete=function(e){delete this.map[v(e)]},s.prototype.get=function(e){return e=v(e),this.has(e)?this.map[e]:null},s.prototype.has=function(e){return this.map.hasOwnProperty(v(e))},s.prototype.set=function(e,t){this.map[v(e)]=E(t)},s.prototype.forEach=function(e,t){for(var r in this.map)this.map.hasOwnProperty(r)&&e.call(t,this.map[r],r,this)},s.prototype.keys=function(){var e=[];return this.forEach(function(t,r){e.push(r)}),T(e)},s.prototype.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),T(e)},s.prototype.entries=function(){var e=[];return this.forEach(function(t,r){e.push([r,t])}),T(e)},f.iterable&&(s.prototype[Symbol.iterator]=s.prototype.entries);function B(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function P(e){return new Promise(function(t,r){e.onload=function(){t(e.result)},e.onerror=function(){r(e.error)}})}function M(e){var t=new FileReader,r=P(t);return t.readAsArrayBuffer(e),r}function q(e){var t=new FileReader,r=P(t);return t.readAsText(e),r}function H(e){for(var t=new Uint8Array(e),r=new Array(t.length),n=0;n-1?t:e}function m(e,t){if(!(this instanceof m))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');t=t||{};var r=t.body;if(e instanceof m){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new s(e.headers)),this.method=e.method,this.mode=e.mode,this.signal=e.signal,!r&&e._bodyInit!=null&&(r=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||"same-origin",(t.headers||!this.headers)&&(this.headers=new s(t.headers)),this.method=C(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,(this.method==="GET"||this.method==="HEAD")&&r)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(r),(this.method==="GET"||this.method==="HEAD")&&(t.cache==="no-store"||t.cache==="no-cache")){var n=/([?&])_=[^&]*/;if(n.test(this.url))this.url=this.url.replace(n,"$1_="+new Date().getTime());else{var i=/\?/;this.url+=(i.test(this.url)?"&":"?")+"_="+new Date().getTime()}}}m.prototype.clone=function(){return new m(this,{body:this._bodyInit})};function k(e){var t=new FormData;return e.trim().split("&").forEach(function(r){if(r){var n=r.split("="),i=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(i),decodeURIComponent(o))}}),t}function N(e){var t=new s,r=e.replace(/\r?\n[\t ]+/g," ");return r.split("\r").map(function(n){return n.indexOf(` -`)===0?n.substr(1,n.length):n}).forEach(function(n){var i=n.split(":"),o=i.shift().trim();if(o){var _=i.join(":").trim();t.append(o,_)}}),t}x.call(m.prototype);function c(e,t){if(!(this instanceof c))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');t||(t={}),this.type="default",this.status=t.status===void 0?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText=t.statusText===void 0?"":""+t.statusText,this.headers=new s(t.headers),this.url=t.url||"",this._initBody(e)}x.call(c.prototype),c.prototype.clone=function(){return new c(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new s(this.headers),url:this.url})},c.error=function(){var e=new c(null,{status:0,statusText:""});return e.type="error",e};var G=[301,302,303,307,308];c.redirect=function(e,t){if(G.indexOf(t)===-1)throw new RangeError("Invalid status code");return new c(null,{status:t,headers:{location:e}})},u.DOMException=a.DOMException;try{new u.DOMException}catch{u.DOMException=function(t,r){this.message=t,this.name=r;var n=Error(t);this.stack=n.stack},u.DOMException.prototype=Object.create(Error.prototype),u.DOMException.prototype.constructor=u.DOMException}function O(e,t){return new Promise(function(r,n){var i=new m(e,t);if(i.signal&&i.signal.aborted)return n(new u.DOMException("Aborted","AbortError"));var o=new XMLHttpRequest;function _(){o.abort()}o.onload=function(){var l={status:o.status,statusText:o.statusText,headers:N(o.getAllResponseHeaders()||"")};l.url="responseURL"in o?o.responseURL:l.headers.get("X-Request-URL");var g="response"in o?o.response:o.responseText;setTimeout(function(){r(new c(g,l))},0)},o.onerror=function(){setTimeout(function(){n(new TypeError("Network request failed"))},0)},o.ontimeout=function(){setTimeout(function(){n(new TypeError("Network request failed"))},0)},o.onabort=function(){setTimeout(function(){n(new u.DOMException("Aborted","AbortError"))},0)};function V(l){try{return l===""&&a.location.href?a.location.href:l}catch{return l}}o.open(i.method,V(i.url),!0),i.credentials==="include"?o.withCredentials=!0:i.credentials==="omit"&&(o.withCredentials=!1),"responseType"in o&&(f.blob?o.responseType="blob":f.arrayBuffer&&i.headers.get("Content-Type")&&i.headers.get("Content-Type").indexOf("application/octet-stream")!==-1&&(o.responseType="arraybuffer")),t&&typeof t.headers=="object"&&!(t.headers instanceof s)?Object.getOwnPropertyNames(t.headers).forEach(function(l){o.setRequestHeader(l,E(t.headers[l]))}):i.headers.forEach(function(l,g){o.setRequestHeader(g,l)}),i.signal&&(i.signal.addEventListener("abort",_),o.onreadystatechange=function(){o.readyState===4&&i.signal.removeEventListener("abort",_)}),o.send(typeof i._bodyInit>"u"?null:i._bodyInit)})}return O.polyfill=!0,a.fetch||(a.fetch=O,a.Headers=s,a.Request=m,a.Response=c),u.Headers=s,u.Request=m,u.Response=c,u.fetch=O,u})({})})(y),y.fetch.ponyfill=!0,delete y.fetch.polyfill;var h=b.fetch?b:y;d=h.fetch,d.default=h.fetch,d.fetch=h.fetch,d.Headers=h.Headers,d.Request=h.Request,d.Response=h.Response,w.exports=d}(A,A.exports)),A.exports}var j=X();const J=z(j),Q=$({__proto__:null,default:J},[j]);export{Q as b}; diff --git a/frontend/dist/assets/index-C7ZkpjP3.js b/frontend/dist/assets/index-C7ZkpjP3.js deleted file mode 100644 index 9d14b8939..000000000 --- a/frontend/dist/assets/index-C7ZkpjP3.js +++ /dev/null @@ -1,99 +0,0 @@ -var sg=Object.defineProperty;var gp=e=>{throw TypeError(e)};var og=(e,t,i)=>t in e?sg(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var kt=(e,t,i)=>og(e,typeof t!="symbol"?t+"":t,i),Jl=(e,t,i)=>t.has(e)||gp("Cannot "+i);var N=(e,t,i)=>(Jl(e,t,"read from private field"),i?i.call(e):t.get(e)),Se=(e,t,i)=>t.has(e)?gp("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,i),Ce=(e,t,i,a)=>(Jl(e,t,"write to private field"),a?a.call(e,i):t.set(e,i),i),me=(e,t,i)=>(Jl(e,t,"access private method"),i);var fa=(e,t,i,a)=>({set _(o){Ce(e,t,o,i)},get _(){return N(e,t,a)}});function _mergeNamespaces(e,t){for(var i=0;ia[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))a(o);new MutationObserver(o=>{for(const l of o)if(l.type==="childList")for(const u of l.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&a(u)}).observe(document,{childList:!0,subtree:!0});function i(o){const l={};return o.integrity&&(l.integrity=o.integrity),o.referrerPolicy&&(l.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?l.credentials="include":o.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function a(o){if(o.ep)return;o.ep=!0;const l=i(o);fetch(o.href,l)}})();var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function getAugmentedNamespace(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var t=e.default;if(typeof t=="function"){var i=function a(){return this instanceof a?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};i.prototype=t.prototype}else i={};return Object.defineProperty(i,"__esModule",{value:!0}),Object.keys(e).forEach(function(a){var o=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(i,a,o.get?o:{enumerable:!0,get:function(){return e[a]}})}),i}var jsxRuntime={exports:{}},reactJsxRuntime_production={};/** - * @license React - * react-jsx-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var hasRequiredReactJsxRuntime_production;function requireReactJsxRuntime_production(){if(hasRequiredReactJsxRuntime_production)return reactJsxRuntime_production;hasRequiredReactJsxRuntime_production=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function i(a,o,l){var u=null;if(l!==void 0&&(u=""+l),o.key!==void 0&&(u=""+o.key),"key"in o){l={};for(var f in o)f!=="key"&&(l[f]=o[f])}else l=o;return o=l.ref,{$$typeof:e,type:a,key:u,ref:o!==void 0?o:null,props:l}}return reactJsxRuntime_production.Fragment=t,reactJsxRuntime_production.jsx=i,reactJsxRuntime_production.jsxs=i,reactJsxRuntime_production}var hasRequiredJsxRuntime;function requireJsxRuntime(){return hasRequiredJsxRuntime||(hasRequiredJsxRuntime=1,jsxRuntime.exports=requireReactJsxRuntime_production()),jsxRuntime.exports}var jsxRuntimeExports=requireJsxRuntime(),react={exports:{}},react_production={};/** - * @license React - * react.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var hasRequiredReact_production;function requireReact_production(){if(hasRequiredReact_production)return react_production;hasRequiredReact_production=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),o=Symbol.for("react.profiler"),l=Symbol.for("react.consumer"),u=Symbol.for("react.context"),f=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),g=Symbol.iterator;function b(F){return F===null||typeof F!="object"?null:(F=g&&F[g]||F["@@iterator"],typeof F=="function"?F:null)}var x={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},y=Object.assign,S={};function E(F,X,z){this.props=F,this.context=X,this.refs=S,this.updater=z||x}E.prototype.isReactComponent={},E.prototype.setState=function(F,X){if(typeof F!="object"&&typeof F!="function"&&F!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,F,X,"setState")},E.prototype.forceUpdate=function(F){this.updater.enqueueForceUpdate(this,F,"forceUpdate")};function w(){}w.prototype=E.prototype;function _(F,X,z){this.props=F,this.context=X,this.refs=S,this.updater=z||x}var O=_.prototype=new w;O.constructor=_,y(O,E.prototype),O.isPureReactComponent=!0;var k=Array.isArray,A={H:null,A:null,T:null,S:null,V:null},D=Object.prototype.hasOwnProperty;function R(F,X,z,L,$,V){return z=V.ref,{$$typeof:e,type:F,key:X,ref:z!==void 0?z:null,props:V}}function T(F,X){return R(F.type,X,void 0,void 0,void 0,F.props)}function j(F){return typeof F=="object"&&F!==null&&F.$$typeof===e}function P(F){var X={"=":"=0",":":"=2"};return"$"+F.replace(/[=:]/g,function(z){return X[z]})}var M=/\/+/g;function I(F,X){return typeof F=="object"&&F!==null&&F.key!=null?P(""+F.key):X.toString(36)}function G(){}function ne(F){switch(F.status){case"fulfilled":return F.value;case"rejected":throw F.reason;default:switch(typeof F.status=="string"?F.then(G,G):(F.status="pending",F.then(function(X){F.status==="pending"&&(F.status="fulfilled",F.value=X)},function(X){F.status==="pending"&&(F.status="rejected",F.reason=X)})),F.status){case"fulfilled":return F.value;case"rejected":throw F.reason}}throw F}function Q(F,X,z,L,$){var V=typeof F;(V==="undefined"||V==="boolean")&&(F=null);var K=!1;if(F===null)K=!0;else switch(V){case"bigint":case"string":case"number":K=!0;break;case"object":switch(F.$$typeof){case e:case t:K=!0;break;case m:return K=F._init,Q(K(F._payload),X,z,L,$)}}if(K)return $=$(F),K=L===""?"."+I(F,0):L,k($)?(z="",K!=null&&(z=K.replace(M,"$&/")+"/"),Q($,X,z,"",function(ce){return ce})):$!=null&&(j($)&&($=T($,z+($.key==null||F&&F.key===$.key?"":(""+$.key).replace(M,"$&/")+"/")+K)),X.push($)),1;K=0;var te=L===""?".":L+":";if(k(F))for(var J=0;J>>1,F=B[U];if(0>>1;Uo(L,Y))$o(V,L)?(B[U]=V,B[$]=Y,U=$):(B[U]=L,B[z]=Y,U=z);else if($o(V,Y))B[U]=V,B[$]=Y,U=$;else break e}}return H}function o(B,H){var Y=B.sortIndex-H.sortIndex;return Y!==0?Y:B.id-H.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var l=performance;e.unstable_now=function(){return l.now()}}else{var u=Date,f=u.now();e.unstable_now=function(){return u.now()-f}}var h=[],p=[],m=1,g=null,b=3,x=!1,y=!1,S=!1,E=!1,w=typeof setTimeout=="function"?setTimeout:null,_=typeof clearTimeout=="function"?clearTimeout:null,O=typeof setImmediate<"u"?setImmediate:null;function k(B){for(var H=i(p);H!==null;){if(H.callback===null)a(p);else if(H.startTime<=B)a(p),H.sortIndex=H.expirationTime,t(h,H);else break;H=i(p)}}function A(B){if(S=!1,k(B),!y)if(i(h)!==null)y=!0,D||(D=!0,I());else{var H=i(p);H!==null&&Q(A,H.startTime-B)}}var D=!1,R=-1,T=5,j=-1;function P(){return E?!0:!(e.unstable_now()-jB&&P());){var U=g.callback;if(typeof U=="function"){g.callback=null,b=g.priorityLevel;var F=U(g.expirationTime<=B);if(B=e.unstable_now(),typeof F=="function"){g.callback=F,k(B),H=!0;break t}g===i(h)&&a(h),k(B)}else a(h);g=i(h)}if(g!==null)H=!0;else{var X=i(p);X!==null&&Q(A,X.startTime-B),H=!1}}break e}finally{g=null,b=Y,x=!1}H=void 0}}finally{H?I():D=!1}}}var I;if(typeof O=="function")I=function(){O(M)};else if(typeof MessageChannel<"u"){var G=new MessageChannel,ne=G.port2;G.port1.onmessage=M,I=function(){ne.postMessage(null)}}else I=function(){w(M,0)};function Q(B,H){R=w(function(){B(e.unstable_now())},H)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(B){B.callback=null},e.unstable_forceFrameRate=function(B){0>B||125U?(B.sortIndex=Y,t(p,B),i(h)===null&&B===i(p)&&(S?(_(R),R=-1):S=!0,Q(A,Y-U))):(B.sortIndex=F,t(h,B),y||x||(y=!0,D||(D=!0,I()))),B},e.unstable_shouldYield=P,e.unstable_wrapCallback=function(B){var H=b;return function(){var Y=b;b=H;try{return B.apply(this,arguments)}finally{b=Y}}}}(scheduler_production)),scheduler_production}var hasRequiredScheduler;function requireScheduler(){return hasRequiredScheduler||(hasRequiredScheduler=1,scheduler.exports=requireScheduler_production()),scheduler.exports}var reactDom={exports:{}},reactDom_production={};/** - * @license React - * react-dom.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var hasRequiredReactDom_production;function requireReactDom_production(){if(hasRequiredReactDom_production)return reactDom_production;hasRequiredReactDom_production=1;var e=requireReact();function t(h){var p="https://react.dev/errors/"+h;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),reactDom.exports=requireReactDom_production(),reactDom.exports}/** - * @license React - * react-dom-client.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var hasRequiredReactDomClient_production;function requireReactDomClient_production(){if(hasRequiredReactDomClient_production)return reactDomClient_production;hasRequiredReactDomClient_production=1;var e=requireScheduler(),t=requireReact(),i=requireReactDom();function a(n){var s="https://react.dev/errors/"+n;if(1F||(n.current=U[F],U[F]=null,F--)}function L(n,s){F++,U[F]=n.current,n.current=s}var $=X(null),V=X(null),K=X(null),te=X(null);function J(n,s){switch(L(K,s),L(V,n),L($,null),s.nodeType){case 9:case 11:n=(n=s.documentElement)&&(n=n.namespaceURI)?Vf(n):0;break;default:if(n=s.tagName,s=s.namespaceURI)s=Vf(s),n=qf(s,n);else switch(n){case"svg":n=1;break;case"math":n=2;break;default:n=0}}z($),L($,n)}function ce(){z($),z(V),z(K)}function ue(n){n.memoizedState!==null&&L(te,n);var s=$.current,c=qf(s,n.type);s!==c&&(L(V,n),L($,c))}function we(n){V.current===n&&(z($),z(V)),te.current===n&&(z(te),oa._currentValue=Y)}var Ee=Object.prototype.hasOwnProperty,De=e.unstable_scheduleCallback,je=e.unstable_cancelCallback,Pe=e.unstable_shouldYield,ge=e.unstable_requestPaint,se=e.unstable_now,W=e.unstable_getCurrentPriorityLevel,ee=e.unstable_ImmediatePriority,de=e.unstable_UserBlockingPriority,pe=e.unstable_NormalPriority,ve=e.unstable_LowPriority,Te=e.unstable_IdlePriority,oe=e.log,ie=e.unstable_setDisableYieldValue,Fe=null,Le=null;function Ye(n){if(typeof oe=="function"&&ie(n),Le&&typeof Le.setStrictMode=="function")try{Le.setStrictMode(Fe,n)}catch{}}var qe=Math.clz32?Math.clz32:Je,it=Math.log,We=Math.LN2;function Je(n){return n>>>=0,n===0?32:31-(it(n)/We|0)|0}var ct=256,ot=4194304;function Oe(n){var s=n&42;if(s!==0)return s;switch(n&-n){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return n&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return n&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return n}}function ye(n,s,c){var d=n.pendingLanes;if(d===0)return 0;var v=0,C=n.suspendedLanes,q=n.pingedLanes;n=n.warmLanes;var Z=d&134217727;return Z!==0?(d=Z&~C,d!==0?v=Oe(d):(q&=Z,q!==0?v=Oe(q):c||(c=Z&~n,c!==0&&(v=Oe(c))))):(Z=d&~C,Z!==0?v=Oe(Z):q!==0?v=Oe(q):c||(c=d&~n,c!==0&&(v=Oe(c)))),v===0?0:s!==0&&s!==v&&(s&C)===0&&(C=v&-v,c=s&-s,C>=c||C===32&&(c&4194048)!==0)?s:v}function xe(n,s){return(n.pendingLanes&~(n.suspendedLanes&~n.pingedLanes)&s)===0}function Qe(n,s){switch(n){case 1:case 2:case 4:case 8:case 64:return s+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return s+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function pt(){var n=ct;return ct<<=1,(ct&4194048)===0&&(ct=256),n}function ht(){var n=ot;return ot<<=1,(ot&62914560)===0&&(ot=4194304),n}function le(n){for(var s=[],c=0;31>c;c++)s.push(n);return s}function Ne(n,s){n.pendingLanes|=s,s!==268435456&&(n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0)}function Ge(n,s,c,d,v,C){var q=n.pendingLanes;n.pendingLanes=c,n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0,n.expiredLanes&=c,n.entangledLanes&=c,n.errorRecoveryDisabledLanes&=c,n.shellSuspendCounter=0;var Z=n.entanglements,fe=n.expirationTimes,Me=n.hiddenUpdates;for(c=q&~c;0)":-1v||fe[d]!==Me[v]){var Ue=` -`+fe[d].replace(" at new "," at ");return n.displayName&&Ue.includes("")&&(Ue=Ue.replace("",n.displayName)),Ue}while(1<=d&&0<=v);break}}}finally{Ws=!1,Error.prepareStackTrace=c}return(c=n?n.displayName||n.name:"")?Lr(c):""}function Jp(n){switch(n.tag){case 26:case 27:case 5:return Lr(n.type);case 16:return Lr("Lazy");case 13:return Lr("Suspense");case 19:return Lr("SuspenseList");case 0:case 15:return Xs(n.type,!1);case 11:return Xs(n.type.render,!1);case 1:return Xs(n.type,!0);case 31:return Lr("Activity");default:return""}}function $c(n){try{var s="";do s+=Jp(n),n=n.return;while(n);return s}catch(c){return` -Error generating stack: `+c.message+` -`+c.stack}}function gn(n){switch(typeof n){case"bigint":case"boolean":case"number":case"string":case"undefined":return n;case"object":return n;default:return""}}function Fc(n){var s=n.type;return(n=n.nodeName)&&n.toLowerCase()==="input"&&(s==="checkbox"||s==="radio")}function eh(n){var s=Fc(n)?"checked":"value",c=Object.getOwnPropertyDescriptor(n.constructor.prototype,s),d=""+n[s];if(!n.hasOwnProperty(s)&&typeof c<"u"&&typeof c.get=="function"&&typeof c.set=="function"){var v=c.get,C=c.set;return Object.defineProperty(n,s,{configurable:!0,get:function(){return v.call(this)},set:function(q){d=""+q,C.call(this,q)}}),Object.defineProperty(n,s,{enumerable:c.enumerable}),{getValue:function(){return d},setValue:function(q){d=""+q},stopTracking:function(){n._valueTracker=null,delete n[s]}}}}function wa(n){n._valueTracker||(n._valueTracker=eh(n))}function Ic(n){if(!n)return!1;var s=n._valueTracker;if(!s)return!0;var c=s.getValue(),d="";return n&&(d=Fc(n)?n.checked?"true":"false":n.value),n=d,n!==c?(s.setValue(n),!0):!1}function Ca(n){if(n=n||(typeof document<"u"?document:void 0),typeof n>"u")return null;try{return n.activeElement||n.body}catch{return n.body}}var th=/[\n"\\]/g;function vn(n){return n.replace(th,function(s){return"\\"+s.charCodeAt(0).toString(16)+" "})}function Ys(n,s,c,d,v,C,q,Z){n.name="",q!=null&&typeof q!="function"&&typeof q!="symbol"&&typeof q!="boolean"?n.type=q:n.removeAttribute("type"),s!=null?q==="number"?(s===0&&n.value===""||n.value!=s)&&(n.value=""+gn(s)):n.value!==""+gn(s)&&(n.value=""+gn(s)):q!=="submit"&&q!=="reset"||n.removeAttribute("value"),s!=null?Ks(n,q,gn(s)):c!=null?Ks(n,q,gn(c)):d!=null&&n.removeAttribute("value"),v==null&&C!=null&&(n.defaultChecked=!!C),v!=null&&(n.checked=v&&typeof v!="function"&&typeof v!="symbol"),Z!=null&&typeof Z!="function"&&typeof Z!="symbol"&&typeof Z!="boolean"?n.name=""+gn(Z):n.removeAttribute("name")}function zc(n,s,c,d,v,C,q,Z){if(C!=null&&typeof C!="function"&&typeof C!="symbol"&&typeof C!="boolean"&&(n.type=C),s!=null||c!=null){if(!(C!=="submit"&&C!=="reset"||s!=null))return;c=c!=null?""+gn(c):"",s=s!=null?""+gn(s):c,Z||s===n.value||(n.value=s),n.defaultValue=s}d=d??v,d=typeof d!="function"&&typeof d!="symbol"&&!!d,n.checked=Z?n.checked:!!d,n.defaultChecked=!!d,q!=null&&typeof q!="function"&&typeof q!="symbol"&&typeof q!="boolean"&&(n.name=q)}function Ks(n,s,c){s==="number"&&Ca(n.ownerDocument)===n||n.defaultValue===""+c||(n.defaultValue=""+c)}function Nr(n,s,c,d){if(n=n.options,s){s={};for(var v=0;v"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),to=!1;if(Ln)try{var Si={};Object.defineProperty(Si,"passive",{get:function(){to=!0}}),window.addEventListener("test",Si,Si),window.removeEventListener("test",Si,Si)}catch{to=!1}var Kn=null,no=null,Ra=null;function Wc(){if(Ra)return Ra;var n,s=no,c=s.length,d,v="value"in Kn?Kn.value:Kn.textContent,C=v.length;for(n=0;n=Ci),Jc=" ",eu=!1;function tu(n,s){switch(n){case"keyup":return Ph.indexOf(s.keyCode)!==-1;case"keydown":return s.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function nu(n){return n=n.detail,typeof n=="object"&&"data"in n?n.data:null}var zr=!1;function Oh(n,s){switch(n){case"compositionend":return nu(s);case"keypress":return s.which!==32?null:(eu=!0,Jc);case"textInput":return n=s.data,n===Jc&&eu?null:n;default:return null}}function Dh(n,s){if(zr)return n==="compositionend"||!oo&&tu(n,s)?(n=Wc(),Ra=no=Kn=null,zr=!1,n):null;switch(n){case"paste":return null;case"keypress":if(!(s.ctrlKey||s.altKey||s.metaKey)||s.ctrlKey&&s.altKey){if(s.char&&1=s)return{node:c,offset:s-n};n=d}e:{for(;c;){if(c.nextSibling){c=c.nextSibling;break e}c=c.parentNode}c=void 0}c=uu(c)}}function fu(n,s){return n&&s?n===s?!0:n&&n.nodeType===3?!1:s&&s.nodeType===3?fu(n,s.parentNode):"contains"in n?n.contains(s):n.compareDocumentPosition?!!(n.compareDocumentPosition(s)&16):!1:!1}function pu(n){n=n!=null&&n.ownerDocument!=null&&n.ownerDocument.defaultView!=null?n.ownerDocument.defaultView:window;for(var s=Ca(n.document);s instanceof n.HTMLIFrameElement;){try{var c=typeof s.contentWindow.location.href=="string"}catch{c=!1}if(c)n=s.contentWindow;else break;s=Ca(n.document)}return s}function uo(n){var s=n&&n.nodeName&&n.nodeName.toLowerCase();return s&&(s==="input"&&(n.type==="text"||n.type==="search"||n.type==="tel"||n.type==="url"||n.type==="password")||s==="textarea"||n.contentEditable==="true")}var zh=Ln&&"documentMode"in document&&11>=document.documentMode,Br=null,fo=null,Ti=null,po=!1;function hu(n,s,c){var d=c.window===c?c.document:c.nodeType===9?c:c.ownerDocument;po||Br==null||Br!==Ca(d)||(d=Br,"selectionStart"in d&&uo(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Ti&&_i(Ti,d)||(Ti=d,d=vs(fo,"onSelect"),0>=q,v-=q,$n=1<<32-qe(s)+v|c<C?C:8;var q=B.T,Z={};B.T=Z,Zo(n,!1,s,c);try{var fe=v(),Me=B.S;if(Me!==null&&Me(Z,fe),fe!==null&&typeof fe=="object"&&typeof fe.then=="function"){var Ue=Yh(fe,d);Hi(n,s,Ue,pn(n))}else Hi(n,s,d,pn(n))}catch(Ve){Hi(n,s,{then:function(){},status:"rejected",reason:Ve},pn())}finally{H.p=C,B.T=q}}function tm(){}function Ko(n,s,c,d){if(n.tag!==5)throw Error(a(476));var v=md(n).queue;hd(n,v,s,Y,c===null?tm:function(){return gd(n),c(d)})}function md(n){var s=n.memoizedState;if(s!==null)return s;s={memoizedState:Y,baseState:Y,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Bn,lastRenderedState:Y},next:null};var c={};return s.next={memoizedState:c,baseState:c,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Bn,lastRenderedState:c},next:null},n.memoizedState=s,n=n.alternate,n!==null&&(n.memoizedState=s),s}function gd(n){var s=md(n).next.queue;Hi(n,s,{},pn())}function Qo(){return en(oa)}function vd(){return Vt().memoizedState}function yd(){return Vt().memoizedState}function nm(n){for(var s=n.return;s!==null;){switch(s.tag){case 24:case 3:var c=pn();n=Jn(c);var d=er(s,n,c);d!==null&&(hn(d,s,c),$i(d,s,c)),s={cache:_o()},n.payload=s;return}s=s.return}}function rm(n,s,c){var d=pn();c={lane:d,revertLane:0,action:c,hasEagerState:!1,eagerState:null,next:null},Ka(n)?xd(s,c):(c=vo(n,s,c,d),c!==null&&(hn(c,n,d),Sd(c,s,d)))}function bd(n,s,c){var d=pn();Hi(n,s,c,d)}function Hi(n,s,c,d){var v={lane:d,revertLane:0,action:c,hasEagerState:!1,eagerState:null,next:null};if(Ka(n))xd(s,v);else{var C=n.alternate;if(n.lanes===0&&(C===null||C.lanes===0)&&(C=s.lastRenderedReducer,C!==null))try{var q=s.lastRenderedState,Z=C(q,c);if(v.hasEagerState=!0,v.eagerState=Z,ln(Z,q))return Ma(n,s,v,0),Nt===null&&Da(),!1}catch{}finally{}if(c=vo(n,s,v,d),c!==null)return hn(c,n,d),Sd(c,s,d),!0}return!1}function Zo(n,s,c,d){if(d={lane:2,revertLane:kl(),action:d,hasEagerState:!1,eagerState:null,next:null},Ka(n)){if(s)throw Error(a(479))}else s=vo(n,c,d,2),s!==null&&hn(s,n,2)}function Ka(n){var s=n.alternate;return n===bt||s!==null&&s===bt}function xd(n,s){Qr=Va=!0;var c=n.pending;c===null?s.next=s:(s.next=c.next,c.next=s),n.pending=s}function Sd(n,s,c){if((c&4194048)!==0){var d=s.lanes;d&=n.pendingLanes,c|=d,s.lanes=c,at(n,c)}}var Qa={readContext:en,use:Ga,useCallback:Bt,useContext:Bt,useEffect:Bt,useImperativeHandle:Bt,useLayoutEffect:Bt,useInsertionEffect:Bt,useMemo:Bt,useReducer:Bt,useRef:Bt,useState:Bt,useDebugValue:Bt,useDeferredValue:Bt,useTransition:Bt,useSyncExternalStore:Bt,useId:Bt,useHostTransitionStatus:Bt,useFormState:Bt,useActionState:Bt,useOptimistic:Bt,useMemoCache:Bt,useCacheRefresh:Bt},Ed={readContext:en,use:Ga,useCallback:function(n,s){return an().memoizedState=[n,s===void 0?null:s],n},useContext:en,useEffect:ad,useImperativeHandle:function(n,s,c){c=c!=null?c.concat([n]):null,Ya(4194308,4,cd.bind(null,s,n),c)},useLayoutEffect:function(n,s){return Ya(4194308,4,n,s)},useInsertionEffect:function(n,s){Ya(4,2,n,s)},useMemo:function(n,s){var c=an();s=s===void 0?null:s;var d=n();if(Pr){Ye(!0);try{n()}finally{Ye(!1)}}return c.memoizedState=[d,s],d},useReducer:function(n,s,c){var d=an();if(c!==void 0){var v=c(s);if(Pr){Ye(!0);try{c(s)}finally{Ye(!1)}}}else v=s;return d.memoizedState=d.baseState=v,n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:n,lastRenderedState:v},d.queue=n,n=n.dispatch=rm.bind(null,bt,n),[d.memoizedState,n]},useRef:function(n){var s=an();return n={current:n},s.memoizedState=n},useState:function(n){n=Go(n);var s=n.queue,c=bd.bind(null,bt,s);return s.dispatch=c,[n.memoizedState,c]},useDebugValue:Xo,useDeferredValue:function(n,s){var c=an();return Yo(c,n,s)},useTransition:function(){var n=Go(!1);return n=hd.bind(null,bt,n.queue,!0,!1),an().memoizedState=n,[!1,n]},useSyncExternalStore:function(n,s,c){var d=bt,v=an();if(_t){if(c===void 0)throw Error(a(407));c=c()}else{if(c=s(),Nt===null)throw Error(a(349));(At&124)!==0||Hu(d,s,c)}v.memoizedState=c;var C={value:c,getSnapshot:s};return v.queue=C,ad(qu.bind(null,d,C,n),[n]),d.flags|=2048,Jr(9,Xa(),Vu.bind(null,d,C,c,s),null),c},useId:function(){var n=an(),s=Nt.identifierPrefix;if(_t){var c=Fn,d=$n;c=(d&~(1<<32-qe(d)-1)).toString(32)+c,s="«"+s+"R"+c,c=qa++,0gt?(Yt=dt,dt=null):Yt=dt.sibling;var Rt=$e(Ae,dt,ke[gt],He);if(Rt===null){dt===null&&(dt=Yt);break}n&&dt&&Rt.alternate===null&&s(Ae,dt),be=C(Rt,be,gt),St===null?lt=Rt:St.sibling=Rt,St=Rt,dt=Yt}if(gt===ke.length)return c(Ae,dt),_t&&wr(Ae,gt),lt;if(dt===null){for(;gtgt?(Yt=dt,dt=null):Yt=dt.sibling;var vr=$e(Ae,dt,Rt.value,He);if(vr===null){dt===null&&(dt=Yt);break}n&&dt&&vr.alternate===null&&s(Ae,dt),be=C(vr,be,gt),St===null?lt=vr:St.sibling=vr,St=vr,dt=Yt}if(Rt.done)return c(Ae,dt),_t&&wr(Ae,gt),lt;if(dt===null){for(;!Rt.done;gt++,Rt=ke.next())Rt=Ve(Ae,Rt.value,He),Rt!==null&&(be=C(Rt,be,gt),St===null?lt=Rt:St.sibling=Rt,St=Rt);return _t&&wr(Ae,gt),lt}for(dt=d(dt);!Rt.done;gt++,Rt=ke.next())Rt=ze(dt,Ae,gt,Rt.value,He),Rt!==null&&(n&&Rt.alternate!==null&&dt.delete(Rt.key===null?gt:Rt.key),be=C(Rt,be,gt),St===null?lt=Rt:St.sibling=Rt,St=Rt);return n&&dt.forEach(function(ag){return s(Ae,ag)}),_t&&wr(Ae,gt),lt}function Mt(Ae,be,ke,He){if(typeof ke=="object"&&ke!==null&&ke.type===y&&ke.key===null&&(ke=ke.props.children),typeof ke=="object"&&ke!==null){switch(ke.$$typeof){case b:e:{for(var lt=ke.key;be!==null;){if(be.key===lt){if(lt=ke.type,lt===y){if(be.tag===7){c(Ae,be.sibling),He=v(be,ke.props.children),He.return=Ae,Ae=He;break e}}else if(be.elementType===lt||typeof lt=="object"&<!==null&<.$$typeof===T&&Cd(lt)===be.type){c(Ae,be.sibling),He=v(be,ke.props),qi(He,ke),He.return=Ae,Ae=He;break e}c(Ae,be);break}else s(Ae,be);be=be.sibling}ke.type===y?(He=Sr(ke.props.children,Ae.mode,He,ke.key),He.return=Ae,Ae=He):(He=La(ke.type,ke.key,ke.props,null,Ae.mode,He),qi(He,ke),He.return=Ae,Ae=He)}return q(Ae);case x:e:{for(lt=ke.key;be!==null;){if(be.key===lt)if(be.tag===4&&be.stateNode.containerInfo===ke.containerInfo&&be.stateNode.implementation===ke.implementation){c(Ae,be.sibling),He=v(be,ke.children||[]),He.return=Ae,Ae=He;break e}else{c(Ae,be);break}else s(Ae,be);be=be.sibling}He=xo(ke,Ae.mode,He),He.return=Ae,Ae=He}return q(Ae);case T:return lt=ke._init,ke=lt(ke._payload),Mt(Ae,be,ke,He)}if(Q(ke))return vt(Ae,be,ke,He);if(I(ke)){if(lt=I(ke),typeof lt!="function")throw Error(a(150));return ke=lt.call(ke),mt(Ae,be,ke,He)}if(typeof ke.then=="function")return Mt(Ae,be,Za(ke),He);if(ke.$$typeof===O)return Mt(Ae,be,Ia(Ae,ke),He);Ja(Ae,ke)}return typeof ke=="string"&&ke!==""||typeof ke=="number"||typeof ke=="bigint"?(ke=""+ke,be!==null&&be.tag===6?(c(Ae,be.sibling),He=v(be,ke),He.return=Ae,Ae=He):(c(Ae,be),He=bo(ke,Ae.mode,He),He.return=Ae,Ae=He),q(Ae)):c(Ae,be)}return function(Ae,be,ke,He){try{Vi=0;var lt=Mt(Ae,be,ke,He);return ei=null,lt}catch(dt){if(dt===Li||dt===Ba)throw dt;var St=cn(29,dt,null,Ae.mode);return St.lanes=He,St.return=Ae,St}finally{}}}var ti=Ad(!0),Rd=Ad(!1),En=X(null),kn=null;function nr(n){var s=n.alternate;L(Gt,Gt.current&1),L(En,n),kn===null&&(s===null||Kr.current!==null||s.memoizedState!==null)&&(kn=n)}function _d(n){if(n.tag===22){if(L(Gt,Gt.current),L(En,n),kn===null){var s=n.alternate;s!==null&&s.memoizedState!==null&&(kn=n)}}else rr()}function rr(){L(Gt,Gt.current),L(En,En.current)}function Un(n){z(En),kn===n&&(kn=null),z(Gt)}var Gt=X(0);function ts(n){for(var s=n;s!==null;){if(s.tag===13){var c=s.memoizedState;if(c!==null&&(c=c.dehydrated,c===null||c.data==="$?"||Ul(c)))return s}else if(s.tag===19&&s.memoizedProps.revealOrder!==void 0){if((s.flags&128)!==0)return s}else if(s.child!==null){s.child.return=s,s=s.child;continue}if(s===n)break;for(;s.sibling===null;){if(s.return===null||s.return===n)return null;s=s.return}s.sibling.return=s.return,s=s.sibling}return null}function Jo(n,s,c,d){s=n.memoizedState,c=c(d,s),c=c==null?s:m({},s,c),n.memoizedState=c,n.lanes===0&&(n.updateQueue.baseState=c)}var el={enqueueSetState:function(n,s,c){n=n._reactInternals;var d=pn(),v=Jn(d);v.payload=s,c!=null&&(v.callback=c),s=er(n,v,d),s!==null&&(hn(s,n,d),$i(s,n,d))},enqueueReplaceState:function(n,s,c){n=n._reactInternals;var d=pn(),v=Jn(d);v.tag=1,v.payload=s,c!=null&&(v.callback=c),s=er(n,v,d),s!==null&&(hn(s,n,d),$i(s,n,d))},enqueueForceUpdate:function(n,s){n=n._reactInternals;var c=pn(),d=Jn(c);d.tag=2,s!=null&&(d.callback=s),s=er(n,d,c),s!==null&&(hn(s,n,c),$i(s,n,c))}};function Td(n,s,c,d,v,C,q){return n=n.stateNode,typeof n.shouldComponentUpdate=="function"?n.shouldComponentUpdate(d,C,q):s.prototype&&s.prototype.isPureReactComponent?!_i(c,d)||!_i(v,C):!0}function Pd(n,s,c,d){n=s.state,typeof s.componentWillReceiveProps=="function"&&s.componentWillReceiveProps(c,d),typeof s.UNSAFE_componentWillReceiveProps=="function"&&s.UNSAFE_componentWillReceiveProps(c,d),s.state!==n&&el.enqueueReplaceState(s,s.state,null)}function kr(n,s){var c=s;if("ref"in s){c={};for(var d in s)d!=="ref"&&(c[d]=s[d])}if(n=n.defaultProps){c===s&&(c=m({},c));for(var v in n)c[v]===void 0&&(c[v]=n[v])}return c}var ns=typeof reportError=="function"?reportError:function(n){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var s=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof n=="object"&&n!==null&&typeof n.message=="string"?String(n.message):String(n),error:n});if(!window.dispatchEvent(s))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",n);return}console.error(n)};function kd(n){ns(n)}function Od(n){console.error(n)}function Dd(n){ns(n)}function rs(n,s){try{var c=n.onUncaughtError;c(s.value,{componentStack:s.stack})}catch(d){setTimeout(function(){throw d})}}function Md(n,s,c){try{var d=n.onCaughtError;d(c.value,{componentStack:c.stack,errorBoundary:s.tag===1?s.stateNode:null})}catch(v){setTimeout(function(){throw v})}}function tl(n,s,c){return c=Jn(c),c.tag=3,c.payload={element:null},c.callback=function(){rs(n,s)},c}function jd(n){return n=Jn(n),n.tag=3,n}function Ld(n,s,c,d){var v=c.type.getDerivedStateFromError;if(typeof v=="function"){var C=d.value;n.payload=function(){return v(C)},n.callback=function(){Md(s,c,d)}}var q=c.stateNode;q!==null&&typeof q.componentDidCatch=="function"&&(n.callback=function(){Md(s,c,d),typeof v!="function"&&(cr===null?cr=new Set([this]):cr.add(this));var Z=d.stack;this.componentDidCatch(d.value,{componentStack:Z!==null?Z:""})})}function am(n,s,c,d,v){if(c.flags|=32768,d!==null&&typeof d=="object"&&typeof d.then=="function"){if(s=c.alternate,s!==null&&Di(s,c,v,!0),c=En.current,c!==null){switch(c.tag){case 13:return kn===null?Al():c.alternate===null&&zt===0&&(zt=3),c.flags&=-257,c.flags|=65536,c.lanes=v,d===ko?c.flags|=16384:(s=c.updateQueue,s===null?c.updateQueue=new Set([d]):s.add(d),_l(n,d,v)),!1;case 22:return c.flags|=65536,d===ko?c.flags|=16384:(s=c.updateQueue,s===null?(s={transitions:null,markerInstances:null,retryQueue:new Set([d])},c.updateQueue=s):(c=s.retryQueue,c===null?s.retryQueue=new Set([d]):c.add(d)),_l(n,d,v)),!1}throw Error(a(435,c.tag))}return _l(n,d,v),Al(),!1}if(_t)return s=En.current,s!==null?((s.flags&65536)===0&&(s.flags|=256),s.flags|=65536,s.lanes=v,d!==wo&&(n=Error(a(422),{cause:d}),Oi(yn(n,c)))):(d!==wo&&(s=Error(a(423),{cause:d}),Oi(yn(s,c))),n=n.current.alternate,n.flags|=65536,v&=-v,n.lanes|=v,d=yn(d,c),v=tl(n.stateNode,d,v),Mo(n,v),zt!==4&&(zt=2)),!1;var C=Error(a(520),{cause:d});if(C=yn(C,c),Zi===null?Zi=[C]:Zi.push(C),zt!==4&&(zt=2),s===null)return!0;d=yn(d,c),c=s;do{switch(c.tag){case 3:return c.flags|=65536,n=v&-v,c.lanes|=n,n=tl(c.stateNode,d,n),Mo(c,n),!1;case 1:if(s=c.type,C=c.stateNode,(c.flags&128)===0&&(typeof s.getDerivedStateFromError=="function"||C!==null&&typeof C.componentDidCatch=="function"&&(cr===null||!cr.has(C))))return c.flags|=65536,v&=-v,c.lanes|=v,v=jd(v),Ld(v,n,c,d),Mo(c,v),!1}c=c.return}while(c!==null);return!1}var Nd=Error(a(461)),Wt=!1;function Kt(n,s,c,d){s.child=n===null?Rd(s,null,c,d):ti(s,n.child,c,d)}function $d(n,s,c,d,v){c=c.render;var C=s.ref;if("ref"in d){var q={};for(var Z in d)Z!=="ref"&&(q[Z]=d[Z])}else q=d;return _r(s),d=Fo(n,s,c,q,C,v),Z=Io(),n!==null&&!Wt?(zo(n,s,v),Hn(n,s,v)):(_t&&Z&&So(s),s.flags|=1,Kt(n,s,d,v),s.child)}function Fd(n,s,c,d,v){if(n===null){var C=c.type;return typeof C=="function"&&!yo(C)&&C.defaultProps===void 0&&c.compare===null?(s.tag=15,s.type=C,Id(n,s,C,d,v)):(n=La(c.type,null,d,s,s.mode,v),n.ref=s.ref,n.return=s,s.child=n)}if(C=n.child,!cl(n,v)){var q=C.memoizedProps;if(c=c.compare,c=c!==null?c:_i,c(q,d)&&n.ref===s.ref)return Hn(n,s,v)}return s.flags|=1,n=Nn(C,d),n.ref=s.ref,n.return=s,s.child=n}function Id(n,s,c,d,v){if(n!==null){var C=n.memoizedProps;if(_i(C,d)&&n.ref===s.ref)if(Wt=!1,s.pendingProps=d=C,cl(n,v))(n.flags&131072)!==0&&(Wt=!0);else return s.lanes=n.lanes,Hn(n,s,v)}return nl(n,s,c,d,v)}function zd(n,s,c){var d=s.pendingProps,v=d.children,C=n!==null?n.memoizedState:null;if(d.mode==="hidden"){if((s.flags&128)!==0){if(d=C!==null?C.baseLanes|c:c,n!==null){for(v=s.child=n.child,C=0;v!==null;)C=C|v.lanes|v.childLanes,v=v.sibling;s.childLanes=C&~d}else s.childLanes=0,s.child=null;return Bd(n,s,d,c)}if((c&536870912)!==0)s.memoizedState={baseLanes:0,cachePool:null},n!==null&&za(s,C!==null?C.cachePool:null),C!==null?Iu(s,C):Lo(),_d(s);else return s.lanes=s.childLanes=536870912,Bd(n,s,C!==null?C.baseLanes|c:c,c)}else C!==null?(za(s,C.cachePool),Iu(s,C),rr(),s.memoizedState=null):(n!==null&&za(s,null),Lo(),rr());return Kt(n,s,v,c),s.child}function Bd(n,s,c,d){var v=Po();return v=v===null?null:{parent:qt._currentValue,pool:v},s.memoizedState={baseLanes:c,cachePool:v},n!==null&&za(s,null),Lo(),_d(s),n!==null&&Di(n,s,d,!0),null}function is(n,s){var c=s.ref;if(c===null)n!==null&&n.ref!==null&&(s.flags|=4194816);else{if(typeof c!="function"&&typeof c!="object")throw Error(a(284));(n===null||n.ref!==c)&&(s.flags|=4194816)}}function nl(n,s,c,d,v){return _r(s),c=Fo(n,s,c,d,void 0,v),d=Io(),n!==null&&!Wt?(zo(n,s,v),Hn(n,s,v)):(_t&&d&&So(s),s.flags|=1,Kt(n,s,c,v),s.child)}function Ud(n,s,c,d,v,C){return _r(s),s.updateQueue=null,c=Bu(s,d,c,v),zu(n),d=Io(),n!==null&&!Wt?(zo(n,s,C),Hn(n,s,C)):(_t&&d&&So(s),s.flags|=1,Kt(n,s,c,C),s.child)}function Hd(n,s,c,d,v){if(_r(s),s.stateNode===null){var C=qr,q=c.contextType;typeof q=="object"&&q!==null&&(C=en(q)),C=new c(d,C),s.memoizedState=C.state!==null&&C.state!==void 0?C.state:null,C.updater=el,s.stateNode=C,C._reactInternals=s,C=s.stateNode,C.props=d,C.state=s.memoizedState,C.refs={},Oo(s),q=c.contextType,C.context=typeof q=="object"&&q!==null?en(q):qr,C.state=s.memoizedState,q=c.getDerivedStateFromProps,typeof q=="function"&&(Jo(s,c,q,d),C.state=s.memoizedState),typeof c.getDerivedStateFromProps=="function"||typeof C.getSnapshotBeforeUpdate=="function"||typeof C.UNSAFE_componentWillMount!="function"&&typeof C.componentWillMount!="function"||(q=C.state,typeof C.componentWillMount=="function"&&C.componentWillMount(),typeof C.UNSAFE_componentWillMount=="function"&&C.UNSAFE_componentWillMount(),q!==C.state&&el.enqueueReplaceState(C,C.state,null),Ii(s,d,C,v),Fi(),C.state=s.memoizedState),typeof C.componentDidMount=="function"&&(s.flags|=4194308),d=!0}else if(n===null){C=s.stateNode;var Z=s.memoizedProps,fe=kr(c,Z);C.props=fe;var Me=C.context,Ue=c.contextType;q=qr,typeof Ue=="object"&&Ue!==null&&(q=en(Ue));var Ve=c.getDerivedStateFromProps;Ue=typeof Ve=="function"||typeof C.getSnapshotBeforeUpdate=="function",Z=s.pendingProps!==Z,Ue||typeof C.UNSAFE_componentWillReceiveProps!="function"&&typeof C.componentWillReceiveProps!="function"||(Z||Me!==q)&&Pd(s,C,d,q),Zn=!1;var $e=s.memoizedState;C.state=$e,Ii(s,d,C,v),Fi(),Me=s.memoizedState,Z||$e!==Me||Zn?(typeof Ve=="function"&&(Jo(s,c,Ve,d),Me=s.memoizedState),(fe=Zn||Td(s,c,fe,d,$e,Me,q))?(Ue||typeof C.UNSAFE_componentWillMount!="function"&&typeof C.componentWillMount!="function"||(typeof C.componentWillMount=="function"&&C.componentWillMount(),typeof C.UNSAFE_componentWillMount=="function"&&C.UNSAFE_componentWillMount()),typeof C.componentDidMount=="function"&&(s.flags|=4194308)):(typeof C.componentDidMount=="function"&&(s.flags|=4194308),s.memoizedProps=d,s.memoizedState=Me),C.props=d,C.state=Me,C.context=q,d=fe):(typeof C.componentDidMount=="function"&&(s.flags|=4194308),d=!1)}else{C=s.stateNode,Do(n,s),q=s.memoizedProps,Ue=kr(c,q),C.props=Ue,Ve=s.pendingProps,$e=C.context,Me=c.contextType,fe=qr,typeof Me=="object"&&Me!==null&&(fe=en(Me)),Z=c.getDerivedStateFromProps,(Me=typeof Z=="function"||typeof C.getSnapshotBeforeUpdate=="function")||typeof C.UNSAFE_componentWillReceiveProps!="function"&&typeof C.componentWillReceiveProps!="function"||(q!==Ve||$e!==fe)&&Pd(s,C,d,fe),Zn=!1,$e=s.memoizedState,C.state=$e,Ii(s,d,C,v),Fi();var ze=s.memoizedState;q!==Ve||$e!==ze||Zn||n!==null&&n.dependencies!==null&&Fa(n.dependencies)?(typeof Z=="function"&&(Jo(s,c,Z,d),ze=s.memoizedState),(Ue=Zn||Td(s,c,Ue,d,$e,ze,fe)||n!==null&&n.dependencies!==null&&Fa(n.dependencies))?(Me||typeof C.UNSAFE_componentWillUpdate!="function"&&typeof C.componentWillUpdate!="function"||(typeof C.componentWillUpdate=="function"&&C.componentWillUpdate(d,ze,fe),typeof C.UNSAFE_componentWillUpdate=="function"&&C.UNSAFE_componentWillUpdate(d,ze,fe)),typeof C.componentDidUpdate=="function"&&(s.flags|=4),typeof C.getSnapshotBeforeUpdate=="function"&&(s.flags|=1024)):(typeof C.componentDidUpdate!="function"||q===n.memoizedProps&&$e===n.memoizedState||(s.flags|=4),typeof C.getSnapshotBeforeUpdate!="function"||q===n.memoizedProps&&$e===n.memoizedState||(s.flags|=1024),s.memoizedProps=d,s.memoizedState=ze),C.props=d,C.state=ze,C.context=fe,d=Ue):(typeof C.componentDidUpdate!="function"||q===n.memoizedProps&&$e===n.memoizedState||(s.flags|=4),typeof C.getSnapshotBeforeUpdate!="function"||q===n.memoizedProps&&$e===n.memoizedState||(s.flags|=1024),d=!1)}return C=d,is(n,s),d=(s.flags&128)!==0,C||d?(C=s.stateNode,c=d&&typeof c.getDerivedStateFromError!="function"?null:C.render(),s.flags|=1,n!==null&&d?(s.child=ti(s,n.child,null,v),s.child=ti(s,null,c,v)):Kt(n,s,c,v),s.memoizedState=C.state,n=s.child):n=Hn(n,s,v),n}function Vd(n,s,c,d){return ki(),s.flags|=256,Kt(n,s,c,d),s.child}var rl={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function il(n){return{baseLanes:n,cachePool:Ou()}}function al(n,s,c){return n=n!==null?n.childLanes&~c:0,s&&(n|=wn),n}function qd(n,s,c){var d=s.pendingProps,v=!1,C=(s.flags&128)!==0,q;if((q=C)||(q=n!==null&&n.memoizedState===null?!1:(Gt.current&2)!==0),q&&(v=!0,s.flags&=-129),q=(s.flags&32)!==0,s.flags&=-33,n===null){if(_t){if(v?nr(s):rr(),_t){var Z=It,fe;if(fe=Z){e:{for(fe=Z,Z=Pn;fe.nodeType!==8;){if(!Z){Z=null;break e}if(fe=Tn(fe.nextSibling),fe===null){Z=null;break e}}Z=fe}Z!==null?(s.memoizedState={dehydrated:Z,treeContext:Er!==null?{id:$n,overflow:Fn}:null,retryLane:536870912,hydrationErrors:null},fe=cn(18,null,null,0),fe.stateNode=Z,fe.return=s,s.child=fe,nn=s,It=null,fe=!0):fe=!1}fe||Ar(s)}if(Z=s.memoizedState,Z!==null&&(Z=Z.dehydrated,Z!==null))return Ul(Z)?s.lanes=32:s.lanes=536870912,null;Un(s)}return Z=d.children,d=d.fallback,v?(rr(),v=s.mode,Z=as({mode:"hidden",children:Z},v),d=Sr(d,v,c,null),Z.return=s,d.return=s,Z.sibling=d,s.child=Z,v=s.child,v.memoizedState=il(c),v.childLanes=al(n,q,c),s.memoizedState=rl,d):(nr(s),sl(s,Z))}if(fe=n.memoizedState,fe!==null&&(Z=fe.dehydrated,Z!==null)){if(C)s.flags&256?(nr(s),s.flags&=-257,s=ol(n,s,c)):s.memoizedState!==null?(rr(),s.child=n.child,s.flags|=128,s=null):(rr(),v=d.fallback,Z=s.mode,d=as({mode:"visible",children:d.children},Z),v=Sr(v,Z,c,null),v.flags|=2,d.return=s,v.return=s,d.sibling=v,s.child=d,ti(s,n.child,null,c),d=s.child,d.memoizedState=il(c),d.childLanes=al(n,q,c),s.memoizedState=rl,s=v);else if(nr(s),Ul(Z)){if(q=Z.nextSibling&&Z.nextSibling.dataset,q)var Me=q.dgst;q=Me,d=Error(a(419)),d.stack="",d.digest=q,Oi({value:d,source:null,stack:null}),s=ol(n,s,c)}else if(Wt||Di(n,s,c,!1),q=(c&n.childLanes)!==0,Wt||q){if(q=Nt,q!==null&&(d=c&-c,d=(d&42)!==0?1:Ke(d),d=(d&(q.suspendedLanes|c))!==0?0:d,d!==0&&d!==fe.retryLane))throw fe.retryLane=d,Vr(n,d),hn(q,n,d),Nd;Z.data==="$?"||Al(),s=ol(n,s,c)}else Z.data==="$?"?(s.flags|=192,s.child=n.child,s=null):(n=fe.treeContext,It=Tn(Z.nextSibling),nn=s,_t=!0,Cr=null,Pn=!1,n!==null&&(xn[Sn++]=$n,xn[Sn++]=Fn,xn[Sn++]=Er,$n=n.id,Fn=n.overflow,Er=s),s=sl(s,d.children),s.flags|=4096);return s}return v?(rr(),v=d.fallback,Z=s.mode,fe=n.child,Me=fe.sibling,d=Nn(fe,{mode:"hidden",children:d.children}),d.subtreeFlags=fe.subtreeFlags&65011712,Me!==null?v=Nn(Me,v):(v=Sr(v,Z,c,null),v.flags|=2),v.return=s,d.return=s,d.sibling=v,s.child=d,d=v,v=s.child,Z=n.child.memoizedState,Z===null?Z=il(c):(fe=Z.cachePool,fe!==null?(Me=qt._currentValue,fe=fe.parent!==Me?{parent:Me,pool:Me}:fe):fe=Ou(),Z={baseLanes:Z.baseLanes|c,cachePool:fe}),v.memoizedState=Z,v.childLanes=al(n,q,c),s.memoizedState=rl,d):(nr(s),c=n.child,n=c.sibling,c=Nn(c,{mode:"visible",children:d.children}),c.return=s,c.sibling=null,n!==null&&(q=s.deletions,q===null?(s.deletions=[n],s.flags|=16):q.push(n)),s.child=c,s.memoizedState=null,c)}function sl(n,s){return s=as({mode:"visible",children:s},n.mode),s.return=n,n.child=s}function as(n,s){return n=cn(22,n,null,s),n.lanes=0,n.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},n}function ol(n,s,c){return ti(s,n.child,null,c),n=sl(s,s.pendingProps.children),n.flags|=2,s.memoizedState=null,n}function Gd(n,s,c){n.lanes|=s;var d=n.alternate;d!==null&&(d.lanes|=s),Ao(n.return,s,c)}function ll(n,s,c,d,v){var C=n.memoizedState;C===null?n.memoizedState={isBackwards:s,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:v}:(C.isBackwards=s,C.rendering=null,C.renderingStartTime=0,C.last=d,C.tail=c,C.tailMode=v)}function Wd(n,s,c){var d=s.pendingProps,v=d.revealOrder,C=d.tail;if(Kt(n,s,d.children,c),d=Gt.current,(d&2)!==0)d=d&1|2,s.flags|=128;else{if(n!==null&&(n.flags&128)!==0)e:for(n=s.child;n!==null;){if(n.tag===13)n.memoizedState!==null&&Gd(n,c,s);else if(n.tag===19)Gd(n,c,s);else if(n.child!==null){n.child.return=n,n=n.child;continue}if(n===s)break e;for(;n.sibling===null;){if(n.return===null||n.return===s)break e;n=n.return}n.sibling.return=n.return,n=n.sibling}d&=1}switch(L(Gt,d),v){case"forwards":for(c=s.child,v=null;c!==null;)n=c.alternate,n!==null&&ts(n)===null&&(v=c),c=c.sibling;c=v,c===null?(v=s.child,s.child=null):(v=c.sibling,c.sibling=null),ll(s,!1,v,c,C);break;case"backwards":for(c=null,v=s.child,s.child=null;v!==null;){if(n=v.alternate,n!==null&&ts(n)===null){s.child=v;break}n=v.sibling,v.sibling=c,c=v,v=n}ll(s,!0,c,null,C);break;case"together":ll(s,!1,null,null,void 0);break;default:s.memoizedState=null}return s.child}function Hn(n,s,c){if(n!==null&&(s.dependencies=n.dependencies),lr|=s.lanes,(c&s.childLanes)===0)if(n!==null){if(Di(n,s,c,!1),(c&s.childLanes)===0)return null}else return null;if(n!==null&&s.child!==n.child)throw Error(a(153));if(s.child!==null){for(n=s.child,c=Nn(n,n.pendingProps),s.child=c,c.return=s;n.sibling!==null;)n=n.sibling,c=c.sibling=Nn(n,n.pendingProps),c.return=s;c.sibling=null}return s.child}function cl(n,s){return(n.lanes&s)!==0?!0:(n=n.dependencies,!!(n!==null&&Fa(n)))}function sm(n,s,c){switch(s.tag){case 3:J(s,s.stateNode.containerInfo),Qn(s,qt,n.memoizedState.cache),ki();break;case 27:case 5:ue(s);break;case 4:J(s,s.stateNode.containerInfo);break;case 10:Qn(s,s.type,s.memoizedProps.value);break;case 13:var d=s.memoizedState;if(d!==null)return d.dehydrated!==null?(nr(s),s.flags|=128,null):(c&s.child.childLanes)!==0?qd(n,s,c):(nr(s),n=Hn(n,s,c),n!==null?n.sibling:null);nr(s);break;case 19:var v=(n.flags&128)!==0;if(d=(c&s.childLanes)!==0,d||(Di(n,s,c,!1),d=(c&s.childLanes)!==0),v){if(d)return Wd(n,s,c);s.flags|=128}if(v=s.memoizedState,v!==null&&(v.rendering=null,v.tail=null,v.lastEffect=null),L(Gt,Gt.current),d)break;return null;case 22:case 23:return s.lanes=0,zd(n,s,c);case 24:Qn(s,qt,n.memoizedState.cache)}return Hn(n,s,c)}function Xd(n,s,c){if(n!==null)if(n.memoizedProps!==s.pendingProps)Wt=!0;else{if(!cl(n,c)&&(s.flags&128)===0)return Wt=!1,sm(n,s,c);Wt=(n.flags&131072)!==0}else Wt=!1,_t&&(s.flags&1048576)!==0&&Cu(s,$a,s.index);switch(s.lanes=0,s.tag){case 16:e:{n=s.pendingProps;var d=s.elementType,v=d._init;if(d=v(d._payload),s.type=d,typeof d=="function")yo(d)?(n=kr(d,n),s.tag=1,s=Hd(null,s,d,n,c)):(s.tag=0,s=nl(null,s,d,n,c));else{if(d!=null){if(v=d.$$typeof,v===k){s.tag=11,s=$d(null,s,d,n,c);break e}else if(v===R){s.tag=14,s=Fd(null,s,d,n,c);break e}}throw s=ne(d)||d,Error(a(306,s,""))}}return s;case 0:return nl(n,s,s.type,s.pendingProps,c);case 1:return d=s.type,v=kr(d,s.pendingProps),Hd(n,s,d,v,c);case 3:e:{if(J(s,s.stateNode.containerInfo),n===null)throw Error(a(387));d=s.pendingProps;var C=s.memoizedState;v=C.element,Do(n,s),Ii(s,d,null,c);var q=s.memoizedState;if(d=q.cache,Qn(s,qt,d),d!==C.cache&&Ro(s,[qt],c,!0),Fi(),d=q.element,C.isDehydrated)if(C={element:d,isDehydrated:!1,cache:q.cache},s.updateQueue.baseState=C,s.memoizedState=C,s.flags&256){s=Vd(n,s,d,c);break e}else if(d!==v){v=yn(Error(a(424)),s),Oi(v),s=Vd(n,s,d,c);break e}else{switch(n=s.stateNode.containerInfo,n.nodeType){case 9:n=n.body;break;default:n=n.nodeName==="HTML"?n.ownerDocument.body:n}for(It=Tn(n.firstChild),nn=s,_t=!0,Cr=null,Pn=!0,c=Rd(s,null,d,c),s.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling}else{if(ki(),d===v){s=Hn(n,s,c);break e}Kt(n,s,d,c)}s=s.child}return s;case 26:return is(n,s),n===null?(c=Jf(s.type,null,s.pendingProps,null))?s.memoizedState=c:_t||(c=s.type,n=s.pendingProps,d=bs(K.current).createElement(c),d[_e]=s,d[Ie]=n,Zt(d,c,n),Et(d),s.stateNode=d):s.memoizedState=Jf(s.type,n.memoizedProps,s.pendingProps,n.memoizedState),null;case 27:return ue(s),n===null&&_t&&(d=s.stateNode=Kf(s.type,s.pendingProps,K.current),nn=s,Pn=!0,v=It,fr(s.type)?(Hl=v,It=Tn(d.firstChild)):It=v),Kt(n,s,s.pendingProps.children,c),is(n,s),n===null&&(s.flags|=4194304),s.child;case 5:return n===null&&_t&&((v=d=It)&&(d=jm(d,s.type,s.pendingProps,Pn),d!==null?(s.stateNode=d,nn=s,It=Tn(d.firstChild),Pn=!1,v=!0):v=!1),v||Ar(s)),ue(s),v=s.type,C=s.pendingProps,q=n!==null?n.memoizedProps:null,d=C.children,Il(v,C)?d=null:q!==null&&Il(v,q)&&(s.flags|=32),s.memoizedState!==null&&(v=Fo(n,s,Qh,null,null,c),oa._currentValue=v),is(n,s),Kt(n,s,d,c),s.child;case 6:return n===null&&_t&&((n=c=It)&&(c=Lm(c,s.pendingProps,Pn),c!==null?(s.stateNode=c,nn=s,It=null,n=!0):n=!1),n||Ar(s)),null;case 13:return qd(n,s,c);case 4:return J(s,s.stateNode.containerInfo),d=s.pendingProps,n===null?s.child=ti(s,null,d,c):Kt(n,s,d,c),s.child;case 11:return $d(n,s,s.type,s.pendingProps,c);case 7:return Kt(n,s,s.pendingProps,c),s.child;case 8:return Kt(n,s,s.pendingProps.children,c),s.child;case 12:return Kt(n,s,s.pendingProps.children,c),s.child;case 10:return d=s.pendingProps,Qn(s,s.type,d.value),Kt(n,s,d.children,c),s.child;case 9:return v=s.type._context,d=s.pendingProps.children,_r(s),v=en(v),d=d(v),s.flags|=1,Kt(n,s,d,c),s.child;case 14:return Fd(n,s,s.type,s.pendingProps,c);case 15:return Id(n,s,s.type,s.pendingProps,c);case 19:return Wd(n,s,c);case 31:return d=s.pendingProps,c=s.mode,d={mode:d.mode,children:d.children},n===null?(c=as(d,c),c.ref=s.ref,s.child=c,c.return=s,s=c):(c=Nn(n.child,d),c.ref=s.ref,s.child=c,c.return=s,s=c),s;case 22:return zd(n,s,c);case 24:return _r(s),d=en(qt),n===null?(v=Po(),v===null&&(v=Nt,C=_o(),v.pooledCache=C,C.refCount++,C!==null&&(v.pooledCacheLanes|=c),v=C),s.memoizedState={parent:d,cache:v},Oo(s),Qn(s,qt,v)):((n.lanes&c)!==0&&(Do(n,s),Ii(s,null,null,c),Fi()),v=n.memoizedState,C=s.memoizedState,v.parent!==d?(v={parent:d,cache:d},s.memoizedState=v,s.lanes===0&&(s.memoizedState=s.updateQueue.baseState=v),Qn(s,qt,d)):(d=C.cache,Qn(s,qt,d),d!==v.cache&&Ro(s,[qt],c,!0))),Kt(n,s,s.pendingProps.children,c),s.child;case 29:throw s.pendingProps}throw Error(a(156,s.tag))}function Vn(n){n.flags|=4}function Yd(n,s){if(s.type!=="stylesheet"||(s.state.loading&4)!==0)n.flags&=-16777217;else if(n.flags|=16777216,!ip(s)){if(s=En.current,s!==null&&((At&4194048)===At?kn!==null:(At&62914560)!==At&&(At&536870912)===0||s!==kn))throw Ni=ko,Du;n.flags|=8192}}function ss(n,s){s!==null&&(n.flags|=4),n.flags&16384&&(s=n.tag!==22?ht():536870912,n.lanes|=s,ai|=s)}function Gi(n,s){if(!_t)switch(n.tailMode){case"hidden":s=n.tail;for(var c=null;s!==null;)s.alternate!==null&&(c=s),s=s.sibling;c===null?n.tail=null:c.sibling=null;break;case"collapsed":c=n.tail;for(var d=null;c!==null;)c.alternate!==null&&(d=c),c=c.sibling;d===null?s||n.tail===null?n.tail=null:n.tail.sibling=null:d.sibling=null}}function Ft(n){var s=n.alternate!==null&&n.alternate.child===n.child,c=0,d=0;if(s)for(var v=n.child;v!==null;)c|=v.lanes|v.childLanes,d|=v.subtreeFlags&65011712,d|=v.flags&65011712,v.return=n,v=v.sibling;else for(v=n.child;v!==null;)c|=v.lanes|v.childLanes,d|=v.subtreeFlags,d|=v.flags,v.return=n,v=v.sibling;return n.subtreeFlags|=d,n.childLanes=c,s}function om(n,s,c){var d=s.pendingProps;switch(Eo(s),s.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Ft(s),null;case 1:return Ft(s),null;case 3:return c=s.stateNode,d=null,n!==null&&(d=n.memoizedState.cache),s.memoizedState.cache!==d&&(s.flags|=2048),zn(qt),ce(),c.pendingContext&&(c.context=c.pendingContext,c.pendingContext=null),(n===null||n.child===null)&&(Pi(s)?Vn(s):n===null||n.memoizedState.isDehydrated&&(s.flags&256)===0||(s.flags|=1024,_u())),Ft(s),null;case 26:return c=s.memoizedState,n===null?(Vn(s),c!==null?(Ft(s),Yd(s,c)):(Ft(s),s.flags&=-16777217)):c?c!==n.memoizedState?(Vn(s),Ft(s),Yd(s,c)):(Ft(s),s.flags&=-16777217):(n.memoizedProps!==d&&Vn(s),Ft(s),s.flags&=-16777217),null;case 27:we(s),c=K.current;var v=s.type;if(n!==null&&s.stateNode!=null)n.memoizedProps!==d&&Vn(s);else{if(!d){if(s.stateNode===null)throw Error(a(166));return Ft(s),null}n=$.current,Pi(s)?Au(s):(n=Kf(v,d,c),s.stateNode=n,Vn(s))}return Ft(s),null;case 5:if(we(s),c=s.type,n!==null&&s.stateNode!=null)n.memoizedProps!==d&&Vn(s);else{if(!d){if(s.stateNode===null)throw Error(a(166));return Ft(s),null}if(n=$.current,Pi(s))Au(s);else{switch(v=bs(K.current),n){case 1:n=v.createElementNS("http://www.w3.org/2000/svg",c);break;case 2:n=v.createElementNS("http://www.w3.org/1998/Math/MathML",c);break;default:switch(c){case"svg":n=v.createElementNS("http://www.w3.org/2000/svg",c);break;case"math":n=v.createElementNS("http://www.w3.org/1998/Math/MathML",c);break;case"script":n=v.createElement("div"),n.innerHTML=" - - - - -
- - diff --git a/frontend/dist/locales/ar-AR/translation.json b/frontend/dist/locales/ar-AR/translation.json deleted file mode 100644 index e6b5b13cb..000000000 --- a/frontend/dist/locales/ar-AR/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "rtl" - }, - "addPageNumbers": { - "fontSize": "حجم الخط", - "fontName": "اسم الخط", - "title": "إضافة أرقام الصفحات", - "header": "إضافة أرقام الصفحات", - "selectText": { - "1": "حدد ملف PDF:", - "2": "حجم الهامش", - "3": "الموقع", - "4": "الرقم الأولي", - "5": "الصفحات المراد ترقيمها", - "6": "نص مخصص" - }, - "customTextDesc": "نص مخصص", - "numberPagesDesc": "أي الصفحات المراد ترقيمها، الافتراضي 'الكل'، يقبل أيضًا 1-5 أو 2,5,9 إلخ", - "customNumberDesc": "الافتراضي هو {n}، يقبل أيضًا 'الصفحة {n} من {total}'، 'نص-{n}'، '{filename}-{n}", - "submit": "إضافة أرقام الصفحات" - }, - "pdfPrompt": "اختر PDF", - "multiPdfPrompt": "اختر ملفات PDF (2+)", - "multiPdfDropPrompt": "حدد (أو اسحب وأفلت) جميع ملفات PDF التي تحتاجها", - "imgPrompt": "اختر صورة", - "genericSubmit": "إرسال", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "تحذير: يمكن أن تستغرق هذه العملية ما يصل إلى دقيقة حسب حجم الملف", - "pageOrderPrompt": "ترتيب الصفحات (أدخل قائمة بأرقام الصفحات مفصولة بفواصل):", - "pageSelectionPrompt": "اختيار الصفحات المخصص (أدخل قائمة بأرقام الصفحات مفصولة بفواصل 1،5،6 أو دوال مثل 2n+1):", - "goToPage": "اذهب", - "true": "صحيح", - "false": "خطأ", - "unknown": "غير معروف", - "save": "حفظ", - "saveToBrowser": "حفظ في المتصفح", - "close": "إغلاق", - "filesSelected": "الملفات المحددة", - "noFavourites": "لم تتم إضافة أي مفضلات", - "downloadComplete": "إكتمل التحميل", - "bored": "الانتظار بالملل؟", - "alphabet": "الأبجدية", - "downloadPdf": "تنزيل PDF", - "text": "نص", - "font": "الخط", - "selectFillter": "- حدد -", - "pageNum": "رقم الصفحة", - "sizes": { - "small": "صغير", - "medium": "وسط", - "large": "كبير", - "x-large": "كبير جدا" - }, - "error": { - "pdfPassword": "ملف PDF محمي بكلمة مرور ولم يتم تقديم كلمة المرور أو كانت غير صحيحة", - "_value": "خطأ", - "sorry": "نأسف على المشكلة!", - "needHelp": "هل تحتاج إلى مساعدة / وجدت مشكلة؟", - "contactTip": "إذا كنت ما زلت تواجه صعوبة، لا تتردد في التواصل معنا للحصول على المساعدة. يمكنك إرسال تذكرة على صفحة GitHub الخاصة بنا أو الاتصال بنا عبر Discord:", - "404": { - "head": "404 - الصفحة غير موجودة | عذرًا، لقد تعثرنا في الكود!", - "1": "لا يمكننا العثور على الصفحة التي تبحث عنها.", - "2": "حدث خطأ ما" - }, - "github": "إرسال تذكرة على GitHub", - "showStack": "إظهار تتبع المكدس", - "copyStack": "نسخ تتبع المكدس", - "githubSubmit": "GitHub - إرسال تذكرة", - "discordSubmit": "Discord - إرسال منشور دعم" - }, - "delete": "حذف", - "username": "اسم المستخدم", - "password": "كلمة المرور", - "welcome": "مرحبا", - "property": "الخاصية", - "black": "أسود", - "white": "أبيض", - "red": "أحمر", - "green": "أخضر", - "blue": "أزرق", - "custom": "مخصص...", - "WorkInProgess": "العمل قيد التقدم، قد لا يعمل أو يحتوي على أخطاء، يرجى الإبلاغ عن أي مشاكل!", - "poweredBy": "مدعوم بواسطة", - "yes": "نعم", - "no": "لا", - "changedCredsMessage": "تم تغيير بيانات الاعتماد!", - "notAuthenticatedMessage": "المستخدم غير مصادق عليه.", - "userNotFoundMessage": "لم يتم العثور على المستخدم.", - "incorrectPasswordMessage": "كلمة المرور الحالية غير صحيحة.", - "usernameExistsMessage": "اسم المستخدم الجديد موجود بالفعل.", - "invalidUsernameMessage": "اسم المستخدم غير صالح، يمكن أن يحتوي فقط على أحرف وأرقام والرموز الخاصة التالية @._+- أو يجب أن يكون عنوان بريد إلكتروني صالح.", - "invalidPasswordMessage": "كلمة المرور يجب ألا تكون فارغة ويجب ألا تحتوي على مسافات في البداية أو النهاية.", - "confirmPasswordErrorMessage": "كلمة المرور الجديدة وتأكيد كلمة المرور الجديدة يجب أن تتطابقا.", - "deleteCurrentUserMessage": "لا يمكن حذف المستخدم المسجل حاليًا.", - "deleteUsernameExistsMessage": "اسم المستخدم غير موجود ولا يمكن حذفه.", - "downgradeCurrentUserMessage": "لا يمكن خفض دور المستخدم الحالي", - "disabledCurrentUserMessage": "لا يمكن تعطيل المستخدم الحالي", - "downgradeCurrentUserLongMessage": "لا يمكن تخفيض دور المستخدم الحالي. وبالتالي، لن يظهر المستخدم الحالي.", - "userAlreadyExistsOAuthMessage": "المستخدم موجود بالفعل كمستخدم OAuth2.", - "userAlreadyExistsWebMessage": "المستخدم موجود بالفعل كمستخدم ويب.", - "oops": "عذرًا!", - "help": "مساعدة", - "goHomepage": "الى الصفحة الرئيسية", - "joinDiscord": "انضم إلى خادم Discord الخاص بنا", - "seeDockerHub": "انظر Docker Hub", - "visitGithub": "زيارة مستودع Github", - "donate": "تبرع", - "color": "لون", - "sponsor": "راعٍ", - "info": "معلومات", - "pro": "محترف", - "page": "صفحة", - "pages": "صفحات", - "loading": "جارٍ التحميل...", - "addToDoc": "إضافة إلى المستند", - "reset": "إعداة ضبط", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "سياسة الخصوصية", - "terms": "شروط الاستخدام", - "accessibility": "إمكانية الوصول", - "cookie": "سياسة ملفات تعريف الارتباط", - "impressum": "بيان الهوية", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "قائمة خط الأنابيب (تجريبي)", - "uploadButton": "تحميل مخصص", - "configureButton": "تكوين", - "defaultOption": "مخصص", - "submitButton": "إرسال", - "help": "مساعدة خط الأنابيب", - "scanHelp": "مساعدة مسح المجلد", - "deletePrompt": "هل أنت متأكد أنك تريد حذف خط الأنابيب", - "tags": "أتمتة,تسلسل,مبرمج,معالجة دفعات", - "title": "خط الأنابيب" - }, - "pipelineOptions": { - "header": "تكوين خط الأنابيب", - "pipelineNameLabel": "اسم خط الأنابيب", - "saveSettings": "حفظ إعدادات العملية", - "pipelineNamePrompt": "أدخل اسم خط الأنابيب هنا", - "selectOperation": "اختر العملية", - "addOperationButton": "إضافة عملية", - "pipelineHeader": "خط الأنابيب:", - "saveButton": "تنزيل", - "validateButton": "تحقق" - }, - "enterpriseEdition": { - "button": "ترقية إلى محترف", - "warning": "هذه الخاصية متوفرة فقط للمستخدمين المحترفين.", - "yamlAdvert": "يدعم Stirling PDF Pro ملفات الإعدادات YAML وميزات SSO أخرى", - "ssoAdvert": "هل تبحث عن المزيد من ميزات إدارة المستخدمين؟ اطلع على Stirling PDF Pro" - }, - "analytics": { - "title": "هل تريد تحسين Stirling PDF؟", - "paragraph1": "Stirling PDF يحتوي على إحصائيات مختصة للمساعدة في تحسين المنتج. لا نتبع أي معلومات شخصية أو محتوى الملفات.", - "paragraph2": "يرجى مراعاة تفعيل الإحصائيات لمساعدتنا على نمو Stirling-PDF وتوفير فهم أفضل لمستخدمينا.", - "enable": "تفعيل الإحصائيات", - "disable": "تعطيل الإحصائيات", - "settings": "يمكنك تغيير إعدادات الإحصائيات في ملف config/settings.yml" - }, - "navbar": { - "favorite": "المفضلة", - "recent": "New and recently updated", - "darkmode": "الوضع الداكن", - "language": "اللغات", - "settings": "إعدادات", - "allTools": "أدوات", - "multiTool": "أدوات متعددة", - "search": "البحث", - "sections": { - "organize": "تنظيم", - "convertTo": "تحويل الى PDF", - "convertFrom": "تحويل من PDF", - "security": "التوقيع والأمان", - "advance": "متقدم", - "edit": "عرض وتعديل", - "popular": "المفضل" - } - }, - "settings": { - "title": "الإعدادات", - "update": "التحديث متاح", - "updateAvailable": "{0} هو الإصدار المثبت حاليًا. إصدار جديد ({1}) متاح.", - "appVersion": "إصدار التطبيق:", - "downloadOption": { - "title": "تحديد خيار التنزيل (للتنزيلات ذات الملف الواحد غير المضغوط):", - "1": "فتح في نفس النافذة", - "2": "فتح في نافذة جديدة", - "3": "تنزيل الملف" - }, - "zipThreshold": "ملفات مضغوطة عند تجاوز عدد الملفات التي تم تنزيلها", - "signOut": "تسجيل الخروج", - "accountSettings": "اعدادات الحساب", - "bored": { - "help": "تمكين لعبة البيضة المخفية" - }, - "cacheInputs": { - "name": "حفظ إدخالات النموذج", - "help": "تمكين لتخزين الإدخالات المستخدمة سابقًا للتشغيلات المستقبلية" - } - }, - "changeCreds": { - "title": "تغيير بيانات الاعتماد", - "header": "تحديث تفاصيل حسابك", - "changePassword": "أنت تستخدم بيانات تسجيل الدخول الافتراضية. يرجى إدخال كلمة مرور جديدة", - "newUsername": "اسم المستخدم الجديد", - "oldPassword": "كلمة المرور الحالية", - "newPassword": "كلمة المرور الجديدة", - "confirmNewPassword": "تأكيد كلمة المرور الجديدة", - "submit": "إرسال التغييرات" - }, - "account": { - "title": "إعدادات الحساب", - "accountSettings": "إعدادات الحساب", - "adminSettings": "إعدادات المسؤول - عرض وإضافة المستخدمين", - "userControlSettings": "إعدادات التحكم في المستخدم", - "changeUsername": "تغيير اسم المستخدم", - "newUsername": "اسم المستخدم الجديد", - "password": "كلمة مرور التأكيد", - "oldPassword": "كلمة المرور القديمة", - "newPassword": "كلمة المرور الجديدة", - "changePassword": "تغيير كلمة المرور", - "confirmNewPassword": "تأكيد كلمة المرور الجديدة", - "signOut": "تسجيل الخروج", - "yourApiKey": "مفتاح API الخاص بك", - "syncTitle": "مزامنة إعدادات المتصفح مع الحساب", - "settingsCompare": "مقارنة الإعدادات:", - "property": "الخاصية", - "webBrowserSettings": "إعداد متصفح الويب", - "syncToBrowser": "مزامنة الحساب -> المتصفح", - "syncToAccount": "مزامنة الحساب <- المتصفح" - }, - "adminUserSettings": { - "title": "إعدادات التحكم في المستخدم", - "header": "إعدادات التحكم في المستخدم للمسؤول", - "admin": "مسؤول", - "user": "مستخدم", - "addUser": "إضافة مستخدم جديد", - "deleteUser": "حذف المستخدم", - "confirmDeleteUser": "هل يجب حذف المستخدم؟", - "confirmChangeUserStatus": "هل يجب تعطيل/تمكين المستخدم؟", - "usernameInfo": "يمكن أن يحتوي اسم المستخدم فقط على أحرف وأرقام والرموز الخاصة التالية @._+- أو يجب أن يكون عنوان بريد إلكتروني صالح.", - "roles": "الأدوار", - "role": "الدور", - "actions": "الإجراءات", - "apiUser": "مستخدم API محدود", - "extraApiUser": "مستخدم API محدود إضافي", - "webOnlyUser": "مستخدم الويب فقط", - "demoUser": "مستخدم تجريبي (بدون إعدادات مخصصة)", - "internalApiUser": "مستخدم API داخلي", - "forceChange": "إجبار المستخدم على تغيير كلمة المرور عند تسجيل الدخول", - "submit": "حفظ المستخدم", - "changeUserRole": "تغيير دور المستخدم", - "authenticated": "تمت المصادقة", - "editOwnProfil": "تعديل الملف الشخصي الخاص", - "enabledUser": "مستخدم مفعل", - "disabledUser": "مستخدم معطل", - "activeUsers": "المستخدمين النشطين:", - "disabledUsers": "المستخدمين المعطلين:", - "totalUsers": "إجمالي المستخدمين:", - "lastRequest": "آخر طلب", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "استيراد/تصدير قاعدة البيانات", - "header": "استيراد/تصدير قاعدة البيانات", - "fileName": "اسم الملف", - "creationDate": "تاريخ الإنشاء", - "fileSize": "حجم الملف", - "deleteBackupFile": "حذف ملف النسخ الاحتياطي", - "importBackupFile": "استيراد ملف النسخ الاحتياطي", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "تنزيل ملف النسخ الاحتياطي", - "info_1": "عند استيراد البيانات، من الضروري ضمان الهيكل الصحيح. إذا كنت غير متأكد مما تفعله، اطلب المشورة والدعم من محترف. يمكن أن يؤدي الخطأ في الهيكل إلى حدوث أعطال في التطبيق، حتى عدم القدرة على تشغيل التطبيق بالكامل.", - "info_2": "لا يهم اسم الملف عند التحميل. سيتم إعادة تسميته بعد ذلك لاتباع التنسيق backup_user_yyyyMMddHHmm.sql، مما يضمن اتساق تسمية متناسق.", - "submit": "استيراد النسخة الاحتياطية", - "importIntoDatabaseSuccessed": "تم استيراد قاعدة البيانات بنجاح", - "backupCreated": "Database backup successful", - "fileNotFound": "لم يتم العثور على الملف", - "fileNullOrEmpty": "يجب ألا يكون الملف فارغًا أو خاليًا", - "failedImportFile": "فشل استيراد الملف", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "لقد انتهت جلستك. يرجى تحديث الصفحة والمحاولة مرة أخرى", - "refreshPage": "تحديث الصفحة" - }, - "home": { - "desc": "متجرك الشامل المستضاف محليًا لجميع احتياجات PDF الخاصة بك.", - "searchBar": "البحث عن الميزات...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "عرض وتعليق وإضافة نص أو صور" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "أداة متعددة PDF", - "desc": "دمج الصفحات وتدويرها وإعادة ترتيبها وإزالتها" - }, - "merge": { - "title": "دمج ملفات", - "desc": "دمج ملفات PDF متعددة في ملف واحد بسهولة." - }, - "split": { - "title": "تقسيم ملفات", - "desc": "تقسيم ملفات PDF إلى مستندات متعددة" - }, - "rotate": { - "title": "تدوير ملفات", - "desc": "قم بتدوير ملفات PDF الخاصة بك بسهولة." - }, - "imageToPdf": { - "title": "صورة إلى PDF", - "desc": "تحويل الصور (PNG ، JPEG ، GIF) إلى PDF." - }, - "pdfToImage": { - "title": "تحويل PDF إلى صورة", - "desc": "تحويل ملف PDF إلى صورة. (PNG ، JPEG ، GIF)" - }, - "pdfOrganiser": { - "title": "منظم", - "desc": "إزالة / إعادة ترتيب الصفحات بأي ترتيب" - }, - "addImage": { - "title": "إضافة صورة إلى ملف PDF", - "desc": "إضافة صورة إلى موقع معين في PDF (العمل قيد التقدم)" - }, - "watermark": { - "title": "إضافة علامة مائية", - "desc": "أضف علامة مائية مخصصة إلى مستند PDF الخاص بك." - }, - "permissions": { - "title": "تغيير الأذونات", - "desc": "قم بتغيير أذونات مستند PDF الخاص بك" - }, - "removePages": { - "title": "إزالة الصفحات", - "desc": "حذف الصفحات غير المرغوب فيها من مستند PDF الخاص بك." - }, - "addPassword": { - "title": "إضافة كلمة مرور", - "desc": "تشفير مستند PDF الخاص بك بكلمة مرور." - }, - "removePassword": { - "title": "إزالة كلمة المرور", - "desc": "إزالة الحماية بكلمة مرور من مستند PDF الخاص بك." - }, - "compressPdfs": { - "title": "ضغط ملفات", - "desc": "ضغط ملفات PDF لتقليل حجم الملف." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "تغيير البيانات الوصفية", - "desc": "تغيير / إزالة / إضافة بيانات أولية من مستند PDF" - }, - "fileToPDF": { - "title": "تحويل الملف إلى PDF", - "desc": "تحويل أي ملف تقريبا إلى PDF (DOCX وPNG وXLS وPPT وTXT والمزيد)" - }, - "ocr": { - "title": "تشغيل OCR على PDF و / أو مسح ضوئي", - "desc": "يقوم برنامج التنظيف بمسح واكتشاف النص من الصور داخل ملف PDF ويعيد إضافته كنص" - }, - "extractImages": { - "title": "استخراج الصور", - "desc": "يستخرج جميع الصور من ملف PDF ويحفظها في الرمز البريدي" - }, - "pdfToPDFA": { - "title": "تحويل ملفات PDF إلى PDF / A", - "desc": "تحويل PDF إلى PDF / A للتخزين طويل المدى" - }, - "PDFToWord": { - "title": "تحويل PDF إلى Word", - "desc": "تحويل PDF إلى تنسيقات Word (DOC و DOCX و ODT)" - }, - "PDFToPresentation": { - "title": "PDF للعرض التقديمي", - "desc": "تحويل PDF إلى تنسيقات عرض تقديمي (PPT و PPTX و ODP)" - }, - "PDFToText": { - "title": "تحويل PDF إلى نص / RTF", - "desc": "تحويل PDF إلى تنسيق نص أو RTF" - }, - "PDFToHTML": { - "title": "تحويل PDF إلى HTML", - "desc": "تحويل PDF إلى تنسيق HTML" - }, - "PDFToXML": { - "title": "تحويل PDF إلى XML", - "desc": "تحويل PDF إلى تنسيق XML" - }, - "ScannerImageSplit": { - "title": "كشف / انقسام الصور الممسوحة ضوئيًا", - "desc": "تقسيم عدة صور من داخل صورة / ملف PDF" - }, - "sign": { - "title": "توقيع", - "desc": "إضافة التوقيع إلى PDF عن طريق الرسم أو النص أو الصورة" - }, - "flatten": { - "title": "تسطيح", - "desc": "قم بإزالة كافة العناصر والنماذج التفاعلية من ملف PDF" - }, - "repair": { - "title": "إصلاح", - "desc": "يحاول إصلاح ملف PDF تالف / معطل" - }, - "removeBlanks": { - "title": "إزالة الصفحات الفارغة", - "desc": "يكتشف ويزيل الصفحات الفارغة من المستند" - }, - "removeAnnotations": { - "title": "إزالة التعليقات التوضيحية", - "desc": "يزيل جميع التعليقات/التعليقات التوضيحية من ملف PDF" - }, - "compare": { - "title": "مقارنة", - "desc": "يقارن ويظهر الاختلافات بين مستندين PDF" - }, - "certSign": { - "title": "التوقيع بالشهادة", - "desc": "يوقع ملف PDF بشهادة/مفتاح (PEM/P12)" - }, - "removeCertSign": { - "title": "إزالة توقيع الشهادة", - "desc": "إزالة توقيع الشهادة من ملف PDF" - }, - "pageLayout": { - "title": "تخطيط متعدد الصفحات", - "desc": "دمج صفحات متعددة من مستند PDF في صفحة واحدة" - }, - "scalePages": { - "title": "ضبط حجم/مقياس الصفحة", - "desc": "تغيير حجم/مقياس الصفحة و/أو محتواها." - }, - "pipeline": { - "title": "خط الأنابيب", - "desc": "تشغيل إجراءات متعددة على ملفات PDF عن طريق تحديد نصوص خط الأنابيب" - }, - "add-page-numbers": { - "title": "إضافة أرقام الصفحات", - "desc": "إضافة أرقام الصفحات في جميع أنحاء المستند في موقع محدد" - }, - "auto-rename": { - "title": "إعادة تسمية ملف PDF تلقائيًا", - "desc": "إعادة تسمية ملف PDF تلقائيًا بناءً على الرأس المكتشف" - }, - "adjust-contrast": { - "title": "ضبط الألوان/التباين", - "desc": "ضبط التباين والتشبع والسطوع لملف PDF" - }, - "crop": { - "title": "اقتصاص PDF", - "desc": "اقتصاص ملف PDF لتقليل حجمه (مع الحفاظ على النص!)" - }, - "autoSplitPDF": { - "title": "تقسيم الصفحات تلقائيًا", - "desc": "تقسيم PDF الممسوح ضوئيًا تلقائيًا باستخدام رمز QR لتقسيم الصفحات الممسوحة ضوئيًا فعليًا" - }, - "sanitizePdf": { - "title": "تنظيف", - "desc": "إزالة البرامج النصية والعناصر الأخرى من ملفات PDF" - }, - "URLToPDF": { - "title": "URL/موقع ويب إلى PDF", - "desc": "يحول أي عنوان URL للـ http(s) إلى PDF" - }, - "HTMLToPDF": { - "title": "HTML إلى PDF", - "desc": "يحول أي ملف HTML أو ملف مضغوط يحتوي" - }, - "MarkdownToPDF": { - "title": "Markdown إلى PDF", - "desc": "يحول أي ملف Markdown إلى PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "الحصول على جميع المعلومات عن PDF", - "desc": "يجمع أي وكل المعلومات الممكنة عن ملفات PDF" - }, - "extractPage": { - "title": "استخراج الصفحة (الصفحات)", - "desc": "يستخرج صفحات محددة من PDF" - }, - "PdfToSinglePage": { - "title": "PDF إلى صفحة واحدة كبيرة", - "desc": "يدمج جميع صفحات PDF في صفحة واحدة كبيرة" - }, - "showJS": { - "title": "إظهار جافا سكريبت", - "desc": "يبحث ويعرض أي جافا سكريبت مدرج في PDF" - }, - "autoRedact": { - "title": "حجب تلقائي", - "desc": "يحجب (يسود) النص في PDF تلقائيًا بناءً على النص المدخل" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF إلى CSV", - "desc": "يستخرج الجداول من PDF ويحولها إلى CSV" - }, - "autoSizeSplitPDF": { - "title": "تقسيم تلقائي حسب الحجم/العدد", - "desc": "تقسيم ملف PDF واحد إلى مستندات متعددة بناءً على الحجم أو عدد الصفحات أو عدد المستندات" - }, - "overlay-pdfs": { - "title": "تراكب ملفات PDF", - "desc": "يضع ملفات PDF فوق ملف PDF آخر" - }, - "split-by-sections": { - "title": "تقسيم PDF حسب الأقسام", - "desc": "تقسيم كل صفحة من PDF إلى أقسام أفقية وعمودية أصغر" - }, - "AddStampRequest": { - "title": "إضافة ختم إلى PDF", - "desc": "إضافة نص أو إضافة أختام الصور في مواقع محددة" - }, - "removeImagePdf": { - "title": "إزالة الصورة", - "desc": "إزالة الصورة من PDF لتقليل حجم الملف" - }, - "splitPdfByChapters": { - "title": "تجزئة المستندات PDF حسب الفصول", - "desc": "قسم مستند PDF إلى ملفات متعددة بناءً على هيكل فصوله." - }, - "validateSignature": { - "title": "Validate PDF Signature", - "desc": "Verify digital signatures and certificates in PDF documents" - }, - "replaceColorPdf": { - "title": "إستبدال و عكس الألوان", - "desc": "استبدال الألوان للنصوص والخلفيات في المستندات PDF وإلغاء تعكير اللون الكامل للمستند لتقليل حجم الملف" - } - }, - "viewPdf": { - "tags": "عرض,قراءة,تعليق,نص,صورة", - "title": "View/Edit PDF", - "header": "عرض PDF" - }, - "multiTool": { - "tags": "أداة متعددة,عملية متعددة,واجهة مستخدم,النقر والسحب,واجهة أمامية,جانب العميل", - "title": "أداة متعددة PDF", - "header": "أداة متعددة PDF", - "uploadPrompts": "اسم الملف", - "selectAll": "تحديد الكل", - "deselectAll": "إلغاء تحديد الكل", - "selectPages": "تحديد الصفحة", - "selectedPages": "الصفحات المحددة", - "page": "صفحة", - "deleteSelected": "حذف المحدد", - "downloadAll": "تصدير", - "downloadSelected": "تصدير المحدد", - "insertPageBreak": "إدراج فاصل صفحات", - "addFile": "إضافة ملف", - "rotateLeft": "تدوير إلى اليسار", - "rotateRight": "تدوير إلى اليمين", - "split": "تقسيم", - "moveLeft": "تحريك إلى اليسار", - "moveRight": "تحريك إلى اليمين", - "delete": "حذف", - "dragDropMessage": "الصفحات المحددة", - "undo": "تراجع", - "redo": "إعادة إجراء" - }, - "merge": { - "tags": "دمج,عمليات الصفحة,الخلفية,جانب الخادم", - "title": "دمج", - "header": "دمج ملفات PDF متعددة (2+)", - "sortByName": "الترتيب حسب الاسم", - "sortByDate": "الترتيب حسب التاريخ", - "removeCertSign": "إزالة التوقيع الرقمي في الملف المدمج؟", - "submit": "دمج" - }, - "split": { - "tags": "عمليات الصفحة,تقسيم,صفحات متعددة,قص,جانب الخادم", - "title": "تقسيم PDF", - "header": "تقسيم PDF", - "desc": { - "1": "الأرقام التي تحددها هي رقم الصفحة التي تريد تقسيمها", - "2": "على هذا النحو، سيؤدي تحديد 1،3،7-9 إلى تقسيم مستند من 10 صفحات إلى 6 PDFS منفصلة مع:", - "3": "المستند رقم 1: الصفحة 1", - "4": "المستند رقم 2: الصفحتان 2 و 3", - "5": "المستند رقم 3: الصفحة 4 و 5 و 6 و 7", - "6": "المستند رقم 4: الصفحة 8", - "7": "المستند رقم 5: الصفحة 9", - "8": "المستند رقم 6: الصفحة 10" - }, - "splitPages": "أدخل الصفحات المراد تقسيمها:", - "submit": "تقسيم" - }, - "rotate": { - "tags": "جانب الخادم", - "title": "تدوير PDF", - "header": "تدوير PDF", - "selectAngle": "حدد زاوية الدوران (بمضاعفات 90 درجة):", - "submit": "تدوير" - }, - "imageToPdf": { - "tags": "تحويل,صورة,jpg,صورة,صورة فوتوغرافية" - }, - "pdfToImage": { - "tags": "تحويل,صورة,jpg,صورة,صورة فوتوغرافية", - "title": "تحويل PDF إلى صورة", - "header": "تحويل PDF إلى صورة", - "selectText": "تنسيق الصورة", - "singleOrMultiple": "نوع نتيجة الصورة", - "single": "صورة واحدة كبيرة", - "multi": "صور متعددة", - "colorType": "نوع اللون", - "color": "اللون", - "grey": "تدرج الرمادي", - "blackwhite": "أبيض وأسود (قد يفقد البيانات!)", - "submit": "تحويل", - "info": "Python غير مثبت. مطلوب لتحويل WebP.", - "placeholder": "(مثال: 1,2,8 أو 4,7,12-16 أو 2n-1)" - }, - "pdfOrganiser": { - "tags": "مزدوج,زوجي,فردي,ترتيب,نقل", - "title": "منظم الصفحة", - "header": "منظم صفحات PDF", - "submit": "إعادة ترتيب الصفحات", - "mode": { - "_value": "الوضع", - "1": "ترتيب الصفحات المخصص", - "2": "ترتيب عكسي", - "3": "فرز مزدوج", - "4": "فرز الكتيب", - "5": "فرز كتيب الخياطة الجانبية", - "6": "تقسيم فردي-زوجي", - "7": "إزالة الأول", - "8": "إزالة الأخير", - "9": "إزالة", - "10": "دمج فردي-زوجي", - "11": "Duplicate all pages" - }, - "placeholder": "(مثال: 1,3,2 أو 4-8,2,10-12 أو 2n-1)" - }, - "addImage": { - "tags": "صورة,jpg,صورة,صورة فوتوغرافية", - "title": "إضافة صورة", - "header": "إضافة صورة إلى PDF", - "everyPage": "كل صفحة؟", - "upload": "إضافة صورة", - "submit": "إضافة صورة" - }, - "watermark": { - "tags": "نص,تكرار,تسمية,خاص,حقوق النشر,علامة تجارية,صورة,jpg,صورة,صورة فوتوغرافية", - "title": "إضافة علامة مائية", - "header": "إضافة علامة مائية", - "customColor": "لون نص مخصص", - "selectText": { - "1": "حدد PDF لإضافة العلامة المائية إليه:", - "2": "نص العلامة المائية:", - "3": "حجم الخط:", - "4": "دوران (0-360):", - "5": "المباعدة الأفقية (مسافة بين كل علامة مائية أفقيًا):", - "6": "المباعدة العمودية (مسافة بين كل علامة مائية عموديًا):", - "7": "الشفافية (0٪ - 100٪):", - "8": "نوع العلامة المائية:", - "9": "صورة العلامة المائية:", - "10": "تحويل PDF إلى صورة PDF" - }, - "submit": "إضافة علامة مائية", - "type": { - "1": "نص", - "2": "صورة" - } - }, - "permissions": { - "tags": "قراءة,كتابة,تحرير,طباعة", - "title": "تغيير الأذونات", - "header": "تغيير الأذونات", - "warning": "تحذير من أن تكون هذه الأذونات غير قابلة للتغيير، يوصى بتعيينها بكلمة مرور عبر صفحة إضافة كلمة المرور", - "selectText": { - "1": "حدد ملف PDF لتغيير الأذونات", - "2": "أذونات لتعيينها", - "3": "منع تجميع المستند", - "4": "منع استخراج المحتوى", - "5": "منع الاستخراج للوصول", - "6": "منع ملء النموذج", - "7": "منع التعديل", - "8": "منع تعديل التعليق التوضيحي", - "9": "منع الطباعة", - "10": "منع طباعة التنسيقات المختلفة" - }, - "submit": "تغيير" - }, - "removePages": { - "tags": "إزالة الصفحات,حذف الصفحات" - }, - "addPassword": { - "tags": "تأمين,أمان", - "title": "إضافة كلمة مرور", - "header": "إضافة كلمة مرور (تشفير)", - "selectText": { - "1": "حدد ملف PDF للتشفير", - "2": "كلمة المرور", - "3": "طول مفتاح التشفير", - "4": "القيم الأعلى تكون أقوى، لكن القيم الأقل لها توافق أفضل.", - "5": "أذونات للتعيين", - "6": "منع تجميع المستند", - "7": "منع استخراج المحتوى", - "8": "منع الاستخراج للوصول", - "9": "منع ملء النموذج", - "10": "منع التعديل", - "11": "منع تعديل التعليقات التوضيحية", - "12": "منع الطباعة", - "13": "منع طباعة تنسيقات مختلفة", - "14": "كلمة مرور المالك", - "15": "يقيد ما يمكن القيام به بالمستند بمجرد فتحه (غير مدعوم من قبل جميع القراء)", - "16": "يقيد فتح المستند نفسه" - }, - "submit": "تشفير" - }, - "removePassword": { - "tags": "تأمين,فك التشفير,أمان,إزالة كلمة المرور,حذف كلمة المرور", - "title": "إزالة كلمة المرور", - "header": "إزالة كلمة المرور (فك التشفير)", - "selectText": { - "1": "حدد PDF لفك التشفير", - "2": "كلمة المرور" - }, - "submit": "إزالة" - }, - "compressPdfs": { - "tags": "ضغط,صغير,ضئيل" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "عنوان,مؤلف,تاريخ,إنشاء,وقت,ناشر,منتج,إحصائيات", - "title": "العنوان:", - "header": "تغيير البيانات الوصفية", - "selectText": { - "1": "يرجى تعديل المتغيرات التي ترغب في تغييرها", - "2": "حذف كل البيانات الأولية", - "3": "إظهار البيانات الأولية المخصصة:", - "4": "بيانات وصفية أخرى:", - "5": "إضافة إدخال بيانات أولية مخصص" - }, - "author": "المؤلف:", - "creationDate": "تاريخ الإنشاء (yyyy/MM/dd HH:mm:ss):", - "creator": "المنشئ:", - "keywords": "الكلمات الرئيسية:", - "modDate": "تاريخ التعديل (yyyy/MM/dd HH:mm:ss):", - "producer": "المنتج:", - "subject": "الموضوع:", - "trapped": "محاصر:", - "submit": "تغيير" - }, - "fileToPDF": { - "tags": "تحويل,تنسيق,مستند,صورة,شريحة,نص,تحويل,مكتب,مستندات,وورد,إكسل,باوربوينت", - "title": "ملف إلى PDF", - "header": "تحويل أي ملف إلى PDF", - "credit": "تستخدم هذه الخدمة LibreOffice و Unoconv لتحويل الملفات.", - "supportedFileTypesInfo": "أنواع الملفات المدعومة", - "supportedFileTypes": "يجب أن تتضمن أنواع الملفات المدعومة ما يلي، ولكن للحصول على قائمة محدثة كاملة بالتنسيقات المدعومة، يرجى الرجوع إلى وثائق LibreOffice", - "submit": "تحويل إلى PDF" - }, - "ocr": { - "tags": "تعرف,نص,صورة,مسح,قراءة,تحديد,كشف,قابل للتحرير", - "title": "التعرف الضوئي على الحروف / تنظيف المسح الضوئي", - "header": "مسح المسح الضوئي / التعرف الضوئي على الحروف (OCR)", - "selectText": { - "1": "حدد اللغات التي سيتم اكتشافها داخل ملف PDF (اللغات المدرجة هي تلك التي تم اكتشافها حاليًا):", - "2": "إنتاج ملف نصي يحتوي على نص OCR بجانب ملف PDF الذي تم إعداده بواسطة OCR", - "3": "تصحيح الصفحات الممسوحة ضوئيًا بزاوية منحرفة عن طريق تدويرها مرة أخرى في مكانها", - "4": "تنظيف الصفحة بحيث من غير المحتمل أن يجد OCR نصًا في ضوضاء الخلفية. (لا يوجد تغيير في الإخراج)", - "5": "تنظيف الصفحة، بحيث من غير المحتمل أن يجد OCR نصًا في ضوضاء الخلفية، ويحافظ على التنظيف في الإخراج.", - "6": "تجاهل الصفحات التي تحتوي على نص تفاعلي، فقط صفحات OCR التي هي صور", - "7": "فرض التعرف الضوئي على الحروف، سيؤدي التعرف الضوئي على الحروف على كل صفحة إلى إزالة جميع عناصر النص الأصلي", - "8": "عادي (خطأ إذا كان PDF يحتوي على نص)", - "9": "إعدادات إضافية", - "10": "وضع التعرف الضوئي على الحروف", - "11": "إزالة الصور بعد التعرف الضوئي على الحروف (يزيل كل الصور، يكون مفيدًا فقط إذا كان جزءًا من خطوة التحويل)", - "12": "نوع العرض (متقدم)" - }, - "help": "يرجى قراءة هذه الوثائق حول كيفية استخدام هذا للغات أخرى و/أو الاستخدام ليس في Docker", - "credit": "تستخدم هذه الخدمة qpdf و Tesseract للتعرف الضوئي على الحروف.", - "submit": "معالجة PDF باستخدام OCR" - }, - "extractImages": { - "tags": "صورة,صورة فوتوغرافية,حفظ,أرشيف,ملف مضغوط,التقاط,انتزاع", - "title": "استخراج الصور", - "header": "استخراج الصور", - "selectText": "حدد تنسيق الصورة لتحويل الصور المستخرجة إليه", - "allowDuplicates": "حفظ الصور المكررة", - "submit": "استخراج" - }, - "pdfToPDFA": { - "tags": "أرشيف,طويل الأجل,معيار,تحويل,تخزين,حفظ", - "title": "PDF إلى PDF/A", - "header": "PDF إلى PDF/A", - "credit": "تستخدم هذه الخدمة libreoffice لتحويل PDF/A.", - "submit": "تحويل", - "tip": "لا يعمل حاليًا لمدخلات متعددة في وقت واحد", - "outputFormat": "تنسيق الإخراج", - "pdfWithDigitalSignature": "يحتوي PDF على توقيع رقمي. سيتم إزالة هذا في الخطوة التالية." - }, - "PDFToWord": { - "tags": "doc,docx,odt,وورد,تحويل,تنسيق,تحويل,مكتب,مايكروسوفت,ملف المستند", - "title": "تحويل PDF إلى Word", - "header": "تحويل PDF إلى Word", - "selectText": { - "1": "تنسيق ملف الإخراج" - }, - "credit": "تستخدم هذه الخدمة LibreOffice لتحويل الملفات.", - "submit": "تحويل" - }, - "PDFToPresentation": { - "tags": "شرائح,عرض,مكتب,مايكروسوفت", - "title": "PDF للعرض التقديمي", - "header": "PDF للعرض التقديمي", - "selectText": { - "1": "تنسيق ملف الإخراج" - }, - "credit": "تستخدم هذه الخدمة LibreOffice لتحويل الملف.", - "submit": "تحويل" - }, - "PDFToText": { - "tags": "تنسيق نص غني,تنسيق نص غني,تنسيق نص غني", - "title": "تحويل PDF إلى نص / RTF", - "header": "تحويل PDF إلى نص / RTF", - "selectText": { - "1": "تنسيق ملف الإخراج" - }, - "credit": "تستخدم هذه الخدمة LibreOffice لتحويل الملفات.", - "submit": "تحويل" - }, - "PDFToHTML": { - "tags": "محتوى الويب,متوافق مع المتصفح", - "title": "PDF إلى HTML", - "header": "PDF إلى HTML", - "credit": "تستخدم هذه الخدمة pdftohtml لتحويل الملفات.", - "submit": "تحويل" - }, - "PDFToXML": { - "tags": "استخراج البيانات,محتوى منظم,تشغيل بيني,تحويل,تحويل", - "title": "تحويل PDF إلى XML", - "header": "تحويل PDF إلى XML", - "credit": "تستخدم هذه الخدمة LibreOffice لتحويل الملفات.", - "submit": "تحويل" - }, - "ScannerImageSplit": { - "tags": "فصل,كشف تلقائي,مسح ضوئي,صور متعددة,تنظيم", - "selectText": { - "1": "عتبة الزاوية:", - "2": "تعيين الحد الأدنى للزاوية المطلقة المطلوبة لتدوير الصورة (الافتراضي: 10).", - "3": "التسامح:", - "4": "يحدد نطاق تباين اللون حول لون الخلفية المقدر (الافتراضي: 30).", - "5": "أدنى مساحة:", - "6": "تعيين الحد الأدنى لمنطقة الصورة (الافتراضي: 10000).", - "7": "الحد الأدنى لمنطقة المحيط:", - "8": "تعيين الحد الأدنى لمنطقة المحيط للصورة", - "9": "حجم الحدود:", - "10": "يضبط حجم الحدود المضافة والمزالة لمنع الحدود البيضاء في الإخراج (الافتراضي: 1)." - }, - "info": "Python غير مثبت. مطلوب للتشغيل." - }, - "sign": { - "tags": "تخويل,الأحرف الأولى,توقيع مرسوم,توقيع نصي,توقيع بالصورة", - "title": "توقيع", - "header": "توقيع ملفات PDF", - "upload": "تحميل الصورة", - "draw": "رسم التوقيع", - "text": "إدخال النص", - "clear": "مسح", - "add": "إضافة", - "saved": "توقيعات تم حفظها", - "save": "حفظ توقيع", - "personalSigs": "توقيعات شخصية", - "sharedSigs": "توقيعات مشتركة", - "noSavedSigs": "لم يتم العثور على توقيعات محفوظة", - "addToAll": "Add to all pages", - "delete": "Delete", - "first": "First page", - "last": "Last page", - "next": "Next page", - "previous": "Previous page", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "ثابت,إلغاء التنشيط,غير تفاعلي,تبسيط", - "title": "تسطيح", - "header": "تسطيح ملفات PDF", - "flattenOnlyForms": "تسطيح النماذج فقط", - "submit": "تسطيح" - }, - "repair": { - "tags": "إصلاح,استعادة,تصحيح,استرداد", - "title": "إصلاح", - "header": "إصلاح ملفات PDF", - "submit": "إصلاح" - }, - "removeBlanks": { - "tags": "تنظيف,تبسيط,بدون محتوى,تنظيم", - "title": "إزالة الفراغات", - "header": "إزالة الصفحات الفارغة", - "threshold": "العتبة:", - "thresholdDesc": "الحد الفاصل لتحديد مدى بياض البكسل الأبيض", - "whitePercent": "نسبة الأبيض (%):", - "whitePercentDesc": "النسبة المئوية للصفحة التي يجب أن تكون بيضاء لتتم إزالتها", - "submit": "إزالة الفراغات" - }, - "removeAnnotations": { - "tags": "تعليقات,تظليل,ملاحظات,علامات,إزالة", - "title": "إزالة التعليقات التوضيحية", - "header": "إزالة التعليقات التوضيحية", - "submit": "إزالة" - }, - "compare": { - "tags": "تمييز الاختلافات,مقارنة,تغييرات,تحليل", - "title": "مقارنة", - "header": "مقارنة ملفات PDF", - "highlightColor": { - "1": "لون التظليل 1:", - "2": "لون التظليل 2:" - }, - "document": { - "1": "المستند 1", - "2": "المستند 2" - }, - "submit": "مقارنة", - "complex": { - "message": "أو كلا المستندين المقدمين كبيران حجمًا، مما يؤدي إلى تقليل دقة المقارنة" - }, - "large": { - "file": { - "message": "أو كلا المستندين المقدمين كبيرة حجمهما للتعامل معهما" - } - }, - "no": { - "text": { - "message": "أحد أو كلي المستندات المرجوة للمقارنة لا يحتوي على محتوى نصي. يرجى اختيار مستندات تحتوي على نص لم يتم التعرف عليه." - } - } - }, - "certSign": { - "tags": "مصادقة,PEM,P12,رسمي,تشفير", - "title": "توقيع الشهادة", - "header": "قم بتوقيع ملف PDF بشهادتك (العمل قيد التقدم)", - "selectPDF": "حدد ملف PDF للتوقيع:", - "jksNote": "ملاحظة: إذا لم يكن نوع شهادتك مدرجًا أدناه، يرجى تحويلها إلى ملف مخزن مفاتيح جافا (.jks) باستخدام أداة سطر الأوامر keytool. ثم اختر خيار ملف .jks أدناه.", - "selectKey": "حدد ملف المفتاح الخاص (تنسيق PKCS # 8 ، يمكن أن يكون .pem أو .der):", - "selectCert": "حدد ملف الشهادة الخاص بك (تنسيق X.509 ، يمكن أن يكون .pem أو .der):", - "selectP12": "حدد ملف تخزين المفاتيح PKCS # 12 (.p12 أو .pfx) (اختياري ، إذا تم توفيره ، يجب أن يحتوي على مفتاحك الخاص وشهادتك):", - "selectJKS": "حدد ملف مخزن مفاتيح جافا الخاص بك (.jks أو .keystore):", - "certType": "نوع الشهادة", - "password": "أدخل كلمة مرور مخزن المفاتيح أو المفتاح الخاص (إن وجدت):", - "showSig": "إظهار التوقيع", - "reason": "السبب", - "location": "الموقع", - "name": "الاسم", - "showLogo": "عرض الشعار", - "submit": "توقيع PDF" - }, - "removeCertSign": { - "tags": "مصادقة,PEM,P12,رسمي,فك التشفير", - "title": "إزالة توقيع الشهادة", - "header": "إزالة الشهادة الرقمية من PDF", - "selectPDF": "حدد ملف PDF:", - "submit": "إزالة التوقيع" - }, - "pageLayout": { - "tags": "دمج,مركب,عرض واحد,تنظيم", - "title": "تخطيط متعدد الصفحات", - "header": "تخطيط متعدد الصفحات", - "pagesPerSheet": "الصفحات لكل ورقة:", - "addBorder": "إضافة حدود", - "submit": "إرسال" - }, - "scalePages": { - "tags": "تغيير الحجم,تعديل,الأبعاد,تكييف", - "title": "ضبط مقياس الصفحة", - "header": "ضبط مقياس الصفحة", - "pageSize": "حجم صفحة المستند.", - "keepPageSize": "الحجم الأصلي", - "scaleFactor": "مستوى التكبير (الاقتصاص) للصفحة.", - "submit": "إرسال" - }, - "add-page-numbers": { - "tags": "ترقيم,تسمية,تنظيم,فهرسة" - }, - "auto-rename": { - "tags": "كشف تلقائي,مبني على الرأس,تنظيم,إعادة تسمية", - "title": "إعادة تسمية تلقائية", - "header": "إعادة تسمية PDF تلقائيًا", - "submit": "إعادة تسمية تلقائية" - }, - "adjust-contrast": { - "tags": "تصحيح الألوان,ضبط,تعديل,تحسين" - }, - "crop": { - "tags": "تقليم,تقليص,تحرير,تشكيل", - "title": "اقتصاص", - "header": "اقتصاص PDF", - "submit": "إرسال" - }, - "autoSplitPDF": { - "tags": "مبني على QR,فصل,تقسيم المسح الضوئي,تنظيم", - "title": "تقسيم PDF تلقائيًا", - "header": "تقسيم PDF تلقائيًا", - "description": "اطبع وأدخل وامسح ضوئيًا وارفع، ودعنا نفصل مستنداتك تلقائيًا. لا حاجة للفرز اليدوي.", - "selectText": { - "1": "اطبع بعض أوراق الفاصل من أدناه (الأبيض والأسود جيد).", - "2": "امسح جميع مستنداتك دفعة واحدة عن طريق إدخال ورقة الفاصل بينها.", - "3": "ارفع ملف PDF الممسوح ضوئيًا الكبير الواحد ودع Stirling PDF يتولى الباقي.", - "4": "يتم اكتشاف صفحات الفاصل تلقائيًا وإزالتها، مما يضمن مستندًا نهائيًا نظيفًا." - }, - "formPrompt": "أرسل ملف PDF يحتوي على فواصل صفحات Stirling-PDF:", - "duplexMode": "وضع الطباعة على الوجهين (المسح الضوئي للوجه الأمامي والخلفي)", - "dividerDownload2": "تنزيل 'فاصل التقسيم التلقائي (مع التعليمات).pdf'", - "submit": "إرسال" - }, - "sanitizePdf": { - "tags": "تنظيف,تأمين,آمن,إزالة التهديدات" - }, - "URLToPDF": { - "tags": "التقاط الويب,حفظ الصفحة,تحويل الويب إلى مستند,أرشفة", - "title": "URL إلى PDF", - "header": "URL إلى PDF", - "submit": "تحويل", - "credit": "يستخدم WeasyPrint" - }, - "HTMLToPDF": { - "tags": "لغة الترميز,محتوى الويب,تحويل,تحويل", - "title": "HTML إلى PDF", - "header": "HTML إلى PDF", - "help": "يقبل ملفات HTML وملفات ZIP تحتوي على html/css/صور وما إلى ذلك المطلوبة", - "submit": "تحويل", - "credit": "يستخدم WeasyPrint", - "zoom": "مستوى التكبير لعرض الموقع.", - "pageWidth": "عرض الصفحة بالسنتيمتر. (فارغ للافتراضي)", - "pageHeight": "ارتفاع الصفحة بالسنتيمتر. (فارغ للافتراضي)", - "marginTop": "الهامش العلوي للصفحة بالمليمتر. (فارغ للافتراضي)", - "marginBottom": "الهامش السفلي للصفحة بالمليمتر. (فارغ للافتراضي)", - "marginLeft": "الهامش الأيسر للصفحة بالمليمتر. (فارغ للافتراضي)", - "marginRight": "الهامش الأيمن للصفحة بالمليمتر. (فارغ للافتراضي)", - "printBackground": "عرض خلفية المواقع.", - "defaultHeader": "تمكين الرأس الافتراضي (الاسم ورقم الصفحة)", - "cssMediaType": "تغيير نوع وسائط CSS للصفحة.", - "none": "بدون", - "print": "طباعة", - "screen": "شاشة" - }, - "MarkdownToPDF": { - "tags": "لغة الترميز,محتوى الويب,تحويل,تحويل", - "title": "Markdown إلى PDF", - "header": "Markdown إلى PDF", - "submit": "تحويل", - "help": "العمل قيد التقدم", - "credit": "يستخدم WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "معلومات,بيانات,إحصائيات,إحصاءات", - "title": "الحصول على معلومات عن PDF", - "header": "الحصول على معلومات عن PDF", - "submit": "الحصول على المعلومات", - "downloadJson": "تحميل JSON" - }, - "extractPage": { - "tags": "استخراج" - }, - "PdfToSinglePage": { - "tags": "صفحة واحدة" - }, - "showJS": { - "tags": "جافا سكريبت", - "title": "إظهار جافا سكريبت", - "header": "إظهار جافا سكريبت", - "downloadJS": "تنزيل جافا سكريبت", - "submit": "إظهار" - }, - "autoRedact": { - "tags": "حجب,إخفاء,تسويد,أسود,علامة,مخفي", - "title": "حجب تلقائي", - "header": "حجب تلقائي", - "colorLabel": "اللون", - "textsToRedactLabel": "النص المراد حجبه (مفصول بأسطر)", - "textsToRedactPlaceholder": "مثال: \\nسري \\nسري للغاية", - "useRegexLabel": "استخدام التعبيرات العادية", - "wholeWordSearchLabel": "بحث الكلمة الكاملة", - "customPaddingLabel": "حشو إضافي مخصص", - "convertPDFToImageLabel": "تحويل PDF إلى صورة PDF (يستخدم لإزالة النص خلف المربع)", - "submitButton": "إرسال" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,استخراج الجدول,استخراج,تحويل" - }, - "autoSizeSplitPDF": { - "tags": "pdf,تقسيم,مستند,تنظيم" - }, - "overlay-pdfs": { - "tags": "تراكب", - "header": "تراكب ملفات PDF", - "baseFile": { - "label": "اختر ملف PDF الأساسي" - }, - "overlayFiles": { - "label": "اختر ملفات PDF للتراكب" - }, - "mode": { - "label": "اختر وضع التراكب", - "sequential": "تراكب متسلسل", - "interleaved": "تراكب متداخل", - "fixedRepeat": "تراكب تكرار ثابت" - }, - "counts": { - "label": "عدد التراكبات (لوضع التكرار الثابت)", - "placeholder": "أدخل الأعداد مفصولة بفواصل (مثل 2,3,1)" - }, - "position": { - "label": "اختر موضع التراكب", - "foreground": "المقدمة", - "background": "الخلفية" - }, - "submit": "إرسال" - }, - "split-by-sections": { - "tags": "تقسيم القسم, تقسيم, تخصيص", - "title": "تقسيم PDF حسب الأقسام", - "header": "تقسيم PDF إلى أقسام", - "horizontal": { - "label": "التقسيمات الأفقية", - "placeholder": "أدخل عدد التقسيمات الأفقية" - }, - "vertical": { - "label": "التقسيمات العمودية", - "placeholder": "أدخل عدد التقسيمات العمودية" - }, - "submit": "تقسيم PDF", - "merge": "دمج في ملف PDF واحد" - }, - "AddStampRequest": { - "tags": "ختم, إضافة صورة, صورة وسط, علامة مائية, PDF, تضمين, تخصيص", - "header": "ختم PDF", - "title": "ختم PDF", - "stampType": "نوع الختم", - "stampText": "نص الختم", - "stampImage": "صورة الختم", - "alphabet": "الأبجدية", - "fontSize": "حجم الخط/الصورة", - "rotation": "دوران", - "opacity": "الشفافية", - "position": "الموقع", - "overrideX": "تجاوز الإحداثي X", - "overrideY": "تجاوز الإحداثي Y", - "customMargin": "هامش مخصص", - "customColor": "لون نص مخصص", - "submit": "إرسال" - }, - "removeImagePdf": { - "tags": "إزالة الصورة,عمليات الصفحة,الخلفية,جانب الخادم" - }, - "splitPdfByChapters": { - "tags": "تجزئة، فصول، علامات تبويب، تنظيم" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "Validate PDF Signatures", - "header": "Validate Digital Signatures", - "selectPDF": "Select signed PDF file", - "submit": "Validate Signatures", - "results": "Validation Results", - "status": { - "_value": "Status", - "valid": "Valid", - "invalid": "Invalid" - }, - "signer": "Signer", - "date": "Date", - "reason": "Reason", - "location": "Location", - "noSignatures": "No digital signatures found in this document", - "chain": { - "invalid": "Certificate chain validation failed - cannot verify signer's identity" - }, - "trust": { - "invalid": "Certificate not in trust store - source cannot be verified" - }, - "cert": { - "expired": "Certificate has expired", - "revoked": "Certificate has been revoked", - "info": "Certificate Details", - "issuer": "Issuer", - "subject": "Subject", - "serialNumber": "Serial Number", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "algorithm": "Algorithm", - "keySize": "Key Size", - "version": "Version", - "keyUsage": "Key Usage", - "selfSigned": "Self-Signed", - "bits": "bits" - }, - "signature": { - "info": "Signature Information", - "_value": "Signature", - "mathValid": "Signature is mathematically valid BUT:" - }, - "selectCustomCert": "Custom Certificate File X.509 (Optional)" - }, - "replace-color": { - "title": "إستبدال-عكس اللون", - "header": "استبدال-عكس لون PDF", - "selectText": { - "1": "خيارات استبدال أو عكس الألوان", - "2": "افتراضي(ألوان التباين العالي الافتراضية)", - "3": "خصيصة (ألوان شخصية)", - "4": "عكس كامل(عكس جميع الألوان)", - "5": "خيارات ألوان التباين العالي", - "6": "نص أبيض على خلفية سوداء", - "7": "نص أسود على خلفية بيضاء", - "8": "نص صفرة على خلفية سوداء", - "9": "نص أخضر على خلفية سوداء", - "10": "اختر لون النص", - "11": "اختر لون الخلفية" - }, - "submit": "استبدال" - }, - "replaceColorPdf": { - "tags": "استبدال اللون، عمليات الصفحة، الخلفية، جانب الخادم" - }, - "login": { - "title": "تسجيل الدخول", - "header": "تسجيل الدخول", - "signin": "تسجيل الدخول", - "rememberme": "تذكرني", - "invalid": "اسم المستخدم أو كلمة المرور غير صالحة.", - "locked": "تم قفل حسابك.", - "signinTitle": "الرجاء تسجيل الدخول", - "ssoSignIn": "تسجيل الدخول عبر تسجيل الدخول الأحادي", - "oAuth2AutoCreateDisabled": "تم تعطيل الإنشاء التلقائي لمستخدم OAuth2", - "oAuth2AdminBlockedUser": "تم حظر تسجيل أو تسجيل دخول المستخدمين غير المسجلين حاليًا. يرجى الاتصال بالمسؤول.", - "oauth2RequestNotFound": "لم يتم العثور على طلب التفويض", - "oauth2InvalidUserInfoResponse": "استجابة معلومات المستخدم غير صالحة", - "oauth2invalidRequest": "طلب غير صالح", - "oauth2AccessDenied": "تم رفض الوصول", - "oauth2InvalidTokenResponse": "استجابة الرمز المميز غير صالحة", - "oauth2InvalidIdToken": "رمز الهوية غير صالح", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "تم تعطيل المستخدم، تم حظر تسجيل الدخول حاليًا باستخدام اسم المستخدم هذا. يرجى الاتصال بالمسؤول.", - "alreadyLoggedIn": "لقد تسجل دخولًا إلى", - "alreadyLoggedIn2": "أجهزة أخرى. يرجى تسجيل الخروج من الأجهزة وحاول مرة أخرى.", - "toManySessions": "لديك عدة جلسات نشطة", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF إلى صفحة واحدة", - "header": "PDF إلى صفحة واحدة", - "submit": "تحويل إلى صفحة واحدة" - }, - "pageExtracter": { - "title": "استخراج الصفحات", - "header": "استخراج الصفحات", - "submit": "استخراج", - "placeholder": "(مثال: 1,2,8 أو 4,7,12-16 أو 2n-1)" - }, - "sanitizePDF": { - "title": "تنظيف PDF", - "header": "تنظيف ملف PDF", - "selectText": { - "1": "إزالة إجراءات جافا سكريبت", - "2": "إزالة الملفات المضمنة", - "3": "Remove XMP metadata", - "4": "إزالة الروابط", - "5": "إزالة الخطوط", - "6": "Remove Document Info Metadata" - }, - "submit": "تنظيف PDF" - }, - "adjustContrast": { - "title": "ضبط التباين", - "header": "ضبط التباين", - "contrast": "التباين:", - "brightness": "السطوع:", - "saturation": "التشبع:", - "download": "تنزيل" - }, - "compress": { - "title": "ضغط", - "header": "ضغط ملف PDF", - "credit": "تستخدم هذه الخدمة qpdf لضغط / تحسين PDF.", - "grayscale": { - "label": "تطبيق التدرج الرمادي للضغط" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "مستوى التحسين:", - "4": "الوضع التلقائي - يضبط الجودة تلقائيًا للحصول على ملف PDF بالحجم المحدد", - "5": "حجم PDF المتوقع (على سبيل المثال 25 ميجا بايت، 10.8 ميجا بايت، 25 كيلو بايت)" - }, - "submit": "ضغط" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "هذه الميزة متوفرة في صفحة الأدوات المتعددة لدينا. اطلع عليها للحصول على واجهة مستخدم محسّنة لكل صفحة وميزات إضافية!" - }, - "pageRemover": { - "title": "مزيل الصفحة", - "header": "مزيل صفحة PDF", - "pagesToDelete": "الصفحات المراد حذفها (أدخل قائمة بأرقام الصفحات مفصولة بفواصل):", - "submit": "حذف الصفحات", - "placeholder": "(مثال: 1,2,6 أو 1-10,15-30)" - }, - "imageToPDF": { - "title": "صورة إلى PDF", - "header": "صورة إلى PDF", - "submit": "تحويل", - "selectLabel": "خيارات ملاءمة الصورة", - "fillPage": "ملء الصفحة", - "fitDocumentToImage": "ملاءمة الصفحة للصورة", - "maintainAspectRatio": "الحفاظ على نسب الأبعاد", - "selectText": { - "2": "تدوير PDF تلقائيًا", - "3": "المنطق المتعدد للملفات (مفعل فقط إذا كنت تعمل مع صور متعددة)", - "4": "دمج في ملف PDF واحد", - "5": "تحويل إلى ملفات PDF منفصلة" - } - }, - "PDFToCSV": { - "title": "PDF إلى CSV", - "header": "PDF إلى CSV", - "prompt": "اختر الصفحة لاستخراج الجدول", - "submit": "تحويل" - }, - "split-by-size-or-count": { - "title": "تقسيم PDF حسب الحجم أو العدد", - "header": "تقسيم PDF حسب الحجم أو العدد", - "type": { - "label": "اختر نوع التقسيم", - "size": "حسب الحجم", - "pageCount": "حسب عدد الصفحات", - "docCount": "حسب عدد المستندات" - }, - "value": { - "label": "أدخل القيمة", - "placeholder": "أدخل الحجم (مثل 2MB أو 3KB) أو العدد (مثل 5)" - }, - "submit": "إرسال" - }, - "printFile": { - "title": "طباعة ملف", - "header": "طباعة ملف بالطابعة", - "selectText": { - "1": "تحديد ملف للطباعة", - "2": "ادخل اسم الطابعة" - }, - "submit": "طباعة" - }, - "licenses": { - "nav": "التراخيص", - "title": "تراخيص الطرف الثالث", - "header": "تراخيص الطرف الثالث", - "module": "الوحدة", - "version": "الإصدار", - "license": "الترخيص" - }, - "survey": { - "nav": "استطلاع", - "title": "استطلاع Stirling-PDF", - "description": "Stirling-PDF لا يحتوي على تتبع لذا نريد أن نسمع من مستخدمينا لتحسين Stirling-PDF!", - "changes": "تحديث Stirling-PDF منذ آخر استبيان! للحصول على المزيد من المعلومات الرجاء زيارة مقالتنا في المدونة هنا:", - "changes2": "مع هذه التحديثات، نستفيد من الدعم العملي والمنحة المالية", - "please": "يرجى النظر في المشاركة في استطلاعنا!", - "disabled": "(سيتم تعطيل النافذة المنبثقة للاستطلاع في التحديثات التالية ولكنها ستكون متاحة في أسفل الصفحة)", - "button": "المشاركة في الاستطلاع", - "dontShowAgain": "عدم الإظهار مرة أخرى", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "إزالة الصورة", - "header": "إزالة الصورة", - "removeImage": "إزالة الصورة", - "submit": "إزالة الصورة" - }, - "splitByChapters": { - "title": "تجزئة المستند حسب الفصول", - "header": "تجزئة المستند حسب الفصول", - "bookmarkLevel": "مستوى العلامات التذكارية", - "includeMetadata": "شامل البيانات المرفقة", - "allowDuplicates": "السماح بالتكرار", - "desc": { - "1": "هذه الأداة تقوم بتقسيم ملف PDF إلى عدة ملفات PDF استناداً إلى بنية فصوله", - "2": "مستوى الإشارة المرجعية: اختر مستوى الإشارات المرجعية التي تريد استخدامها للتقسيم (0 للمستوى الأعلى، 1 للمستوى الثاني، وما إلى ذلك)", - "3": "تمثيل البيانات الأصلية: إذا تم اختيارها، سترمز البيانات المرجعية الأصلية إلى كل PDF مجزأ.", - "4": "سماح بالتكرار: إذا تم اختياره، يسمح بوجود معاينات متعددة في الصفحة نفسها لخلق ملفات PDF منفصلة." - }, - "submit": "تقطيع ملف PDF" - }, - "fileChooser": { - "click": "انقر هنا", - "or": "أو", - "dragAndDrop": "قم بسحب الملفات وإفلاتها", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "قم بسحب المفات وإفلاتها هنا", - "extractPDF": "جاري الاستخراج..." - }, - "releases": { - "footer": "Releases", - "title": "Release Notes", - "header": "Release Notes", - "current": { - "version": "Current Release" - }, - "note": "Release notes are only available in English" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/az-AZ/translation.json b/frontend/dist/locales/az-AZ/translation.json deleted file mode 100644 index 28daecd5c..000000000 --- a/frontend/dist/locales/az-AZ/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Şrift Ölçüsü", - "fontName": "Şrift Adı", - "title": "Səhifə Nömrələri əlavə edin", - "header": "Səhifə Nömrələri əlavə edin", - "selectText": { - "1": "PDF faylını seçin:", - "2": "Margin Ölçüsü", - "3": "Mövqe", - "4": "Başlanğıc nömrəsi", - "5": "Səhifələrə nömrə əlavə edin", - "6": "Fərdi Mətn" - }, - "customTextDesc": "Fərdi Mətn", - "numberPagesDesc": "Hansı səhifələrin nömrələnəcəyini seçin, default 'all', və ya 1-5, 2,5,9 kimi yazılış qəbul olunur", - "customNumberDesc": "Defolt olaraq {n}, və ya 'Page {n} of {total}', 'Text-{n}', '{filename}-{n}", - "submit": "Səhifə Nömrələri əlavə edin" - }, - "pdfPrompt": "PDF(lər)i Seç", - "multiPdfPrompt": "PDFləri Seç (2+)", - "multiPdfDropPrompt": "Ehtiyacınız olan bütün PDFləri seçin (və ya sürükləyib buraxın)", - "imgPrompt": "Şəkil(lər)i Seç", - "genericSubmit": "Təsdiq Et", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Xəbərdarlıq: Bu proses fayl ölçüsündən asılı olaraq bir dəqiqəyə qədər vaxt ala bilər", - "pageOrderPrompt": "Xüsusi Səhifə Ardıcıllığı (Vergüllə ayrılmış səhifə nömrələri listini və ya 2n+1 tərzində Funksiyalar daxil edin) :", - "pageSelectionPrompt": "Xüsusi Səhifə Seçimi (1, 5, 6 tərzində vergüllə ayrılmış səhifə nömrələri listini və ya 2n+1 tərzində Funksiyalar daxil edin) :", - "goToPage": "Get", - "true": "Doğru", - "false": "Yanlış", - "unknown": "Bilinməyən", - "save": "Saxla", - "saveToBrowser": "Brauzerdə Saxla", - "close": "Bağla", - "filesSelected": "seçilmiş fayllar", - "noFavourites": "Sevimlilər əlavə edilmədi", - "downloadComplete": "Yükləmə Tamamlandı", - "bored": "Gözləməkdən Sıxıldınız?", - "alphabet": "Əlifba", - "downloadPdf": "PDF Yüklə", - "text": "Yazı", - "font": "Şrift", - "selectFillter": "-- Seç --", - "pageNum": "Səhifə nömrəsi", - "sizes": { - "small": "Kiçik", - "medium": "Orta", - "large": "Böyük", - "x-large": "Ekstra Böyük" - }, - "error": { - "pdfPassword": "PDF sənədi şifrlənmişdir və şifr təmin edilməmişdir və ya yanlışdır.", - "_value": "Xəta", - "sorry": "Problem üçün üzr istəyirik!", - "needHelp": "Kömək lazımdır / Problem tapdınız?", - "contactTip": "Əgər hələ də problem yaşayırsınızsa, kömək üçün bizə müraciət etməkdən çəkinməyin. GitHub səhifəmizdə bilet təqdim edə və ya Discord vasitəsilə bizimlə əlaqə saxlaya bilərsiniz:", - "404": { - "head": "404 - Səhifə tapılmadı | Ups, kodu səhv saldıq!", - "1": "Axtardığınız səhifəni tapa bilmirik.", - "2": "Xəta baş verdi" - }, - "github": "GitHub-da bilet təqdim edin", - "showStack": "Yığın İzini göstərin", - "copyStack": "Stack Trace-i kopyalayın", - "githubSubmit": "GitHub - Bilet təqdim edin", - "discordSubmit": "Discord - Dəstək postunu göndərin" - }, - "delete": "Sil", - "username": "İstifadəçi Adı", - "password": "Şifr", - "welcome": "Xoş gəldiniz", - "property": "Xüsusiyyət", - "black": "Qara", - "white": "Ağ", - "red": "Qırmızı", - "green": "Yaşıl", - "blue": "Mavi", - "custom": "Xüsusi...", - "WorkInProgess": "İş davam edir, İşləməyə bilər və ya xətalarla üzləşə bilərsiniz, Zəhmət olmasa problemləri bildirin!", - "poweredBy": "Təchiz edilmişdir", - "yes": "Bəli", - "no": "Xeyr", - "changedCredsMessage": "Etibarnamələr dəyişdirildi!", - "notAuthenticatedMessage": "İstifadəçinin kimliyi təsdiqlənməyib.", - "userNotFoundMessage": "İstifadəçi tapılmadı.", - "incorrectPasswordMessage": "Cari şifr yanlışdır.", - "usernameExistsMessage": "İstifadəçi adı mövcuddur.", - "invalidUsernameMessage": "Yanlış istifadəçi adı, istifadəçi adı sadəcə hərflərdən, rəqəmlərdən və @._+- xüsusi simvollarından ibarət ola bilər və ya düzgün email ünvanı olmalıdır.", - "invalidPasswordMessage": "Şifr boş olmamalıdır, başlanğıc və sonunda boşluqdan istifadə edilməməlidir.", - "confirmPasswordErrorMessage": "Yeni Şifr və Yeni Şifri Doğrula uyğun olmalıdır.", - "deleteCurrentUserMessage": "Hazırda daxil olmuş istifadəçini silmək mümkün deyil.", - "deleteUsernameExistsMessage": "İstifadəçi adı mövcud deyildir və silinə bilməz.", - "downgradeCurrentUserMessage": "Cari istifadəçinin rolunu aşağı salmaq mümkün deyil", - "disabledCurrentUserMessage": "Cari istifadəçi deaktivləşdirilə bilməz", - "downgradeCurrentUserLongMessage": "Cari istifadəçinin rolunu aşağı salmaq mümkün deyil. Deməli, cari istifadəçi göstərilməyəcək.", - "userAlreadyExistsOAuthMessage": "İstifadəçi OAuth2 istifadəçisi olaraq mövcuddur.", - "userAlreadyExistsWebMessage": "İstifadəçi veb istifadəçisi olaraq mövcuddur.", - "oops": "Oops!", - "help": "Yardım", - "goHomepage": "Ana səhifəyə get", - "joinDiscord": "Discord serverimizə qatıl", - "seeDockerHub": "Docker Hub-a bax", - "visitGithub": "Github Repository-ə Baş Çək", - "donate": "İanə Ver", - "color": "Rəng", - "sponsor": "Sponsor", - "info": "Məlumat", - "pro": "Pro", - "page": "Səhifə", - "pages": "Səhifələr", - "loading": "Yüklənir...", - "addToDoc": "Sənədə Əlavə Et", - "reset": "Sıfırla", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Məxfilik Siyasəti", - "terms": "Qaydalar və Şərtlər", - "accessibility": "Əlçatanlıq", - "cookie": "Kuki Siyasəti", - "impressum": "Təəssürat", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Pipeline Menyusu (Beta)", - "uploadButton": "Fərdi Yüklə", - "configureButton": "Konfiqurasiya Et", - "defaultOption": "Fərdi", - "submitButton": "Təsdiqlə", - "help": "Pipeline Köməyi", - "scanHelp": "Qovluq Skanlama Köməyi", - "deletePrompt": "Pipeline-ı silmək istədiyinizə əminsiniz?", - "tags": "avtomatlaşdır,ardıcıllıq,skriptlənmiş,kütləvi-proses", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Pipeline Konfiqurasiyası", - "pipelineNameLabel": "Pipeline Adı", - "saveSettings": "Əməliyyat Parametrlərini Saxla", - "pipelineNamePrompt": "Pipeline adını bura daxil et", - "selectOperation": "Əməliyyat seç", - "addOperationButton": "Əməliyyat əlavə et", - "pipelineHeader": "Pipeline:", - "saveButton": "Endir", - "validateButton": "Doğrula" - }, - "enterpriseEdition": { - "button": "Pro versiyaya keç", - "warning": "Bu xüsusiyyət yalnız pro istifadəçilər üçün əlçatandır.", - "yamlAdvert": "Stirling PDF Pro YAML konfiqurasiya fayllarını və digər SSO xüsusiyyətlərini dəstəkləyir.", - "ssoAdvert": "Daha çox istifadəçi-idarəetmə xüsusiyyətləri axtarırsınız? Stirling PDF Pro-nu nəzərdən keçirin" - }, - "analytics": { - "title": "Stirling PDF-i daha yaxşı etmək istəyirsinizmi?", - "paragraph1": "Stirling PDF bizə məhsulu inkişaf etdirməyə kömək etmək üçün analitikaya üstünlük verib. Biz heç bir şəxsi məlumatı və ya fayl məzmununu izləmirik.", - "paragraph2": "Zəhmət olmasa, Stringling-PDF-ə inkişaf etməkdə və istifadəçilərimizi daha yaxşı anlamaqda yardım etmək üçün analitikanı aktivləşdirməyi nəzərə alın.", - "enable": "Analitikanı aktivləşdir", - "disable": "Analitikanı deaktivləşdir", - "settings": "Analitikanın parametrlərini config/settings.yml faylından dəyişə bilərsiniz." - }, - "navbar": { - "favorite": "Sevimlilər", - "recent": "New and recently updated", - "darkmode": "Qaranlıq Tema", - "language": "Dillər", - "settings": "Parametrlər", - "allTools": "Alətlər", - "multiTool": "Multi-Alət", - "search": "Axtar", - "sections": { - "organize": "Təşkil et", - "convertTo": "PDF-ə Çevir", - "convertFrom": "PDF-dən Çevir", - "security": "İmza & Təhlükəsizlik", - "advance": "Qabaqcıl", - "edit": "Bax & Redaktə et", - "popular": "Populyar" - } - }, - "settings": { - "title": "Parametrlər", - "update": "Yeniləmə mövcuddur", - "updateAvailable": "{0} cari quraşdırılmış versiyadır. Yeni ({1}) versiyası mövcuddur.", - "appVersion": "Proqram Versiyası:", - "downloadOption": { - "title": "Yükləmə versiyasını seçin (Tək fayllı zip olmayan yükləmələr üçün):", - "1": "Eyni pəncərədə açın", - "2": "Yeni pəncərədə açın", - "3": "Faylı endirin" - }, - "zipThreshold": "Yüklənmiş faylların sayı artıq olduqda zip faylları", - "signOut": "Çıxın", - "accountSettings": "Hesab Parametrləri", - "bored": { - "help": "Easter egg oyununu aktivləşdirir" - }, - "cacheInputs": { - "name": "Formada daxil edilən bilgiləri yadda saxlayın", - "help": "Gələcək əməliyyatlar üçün əvvəllər istifadə edilmiş daxil edilmiş bilgiləri saxlamağa imkan verin" - } - }, - "changeCreds": { - "title": "Məlumatları dəyişdirin", - "header": "Hesab Məlumatlarınızı Yeniləyin", - "changePassword": "Siz standart giriş məlumatlarından istifadə edirsiniz. Zəhmət olmasa, yeni şifr daxil edin", - "newUsername": "Yeni İstifadəçi Adı", - "oldPassword": "Cari Şifr", - "newPassword": "Yeni Şifr", - "confirmNewPassword": "Yeni Şifri Təsdiqləyin", - "submit": "Dəyişiklikləri Təsdiqlə" - }, - "account": { - "title": "Hesab Parametrləri", - "accountSettings": "Hesab Parametrləri", - "adminSettings": "Admin Paramterləri - İstifadəçilər Əlavə Et və Onlara Bax", - "userControlSettings": "İstifadəçi İdarəetmə Parametrləri", - "changeUsername": "İstifadəçi Adını Dəyiş", - "newUsername": "Yeni İstifadəçi Adı", - "password": "Təsdiqləmə Şifri", - "oldPassword": "Keçmiş Şifr", - "newPassword": "Yeni Şifr", - "changePassword": "Şifri Dəyiş", - "confirmNewPassword": "Yeni Şifri Təsdiqlə", - "signOut": "Çıxış", - "yourApiKey": "Sizin API Açarınız", - "syncTitle": "Brauzer parametrlərini hesabla sinxronlaşdırın", - "settingsCompare": "Parametrlərin müqayisəsi:", - "property": "Xüsusiyyət", - "webBrowserSettings": "Veb Brauzer Parametrləri", - "syncToBrowser": "Hesabı Sinxronlaşdır -> Brauzer", - "syncToAccount": "Hesabı Sinxronlaşdır <- Brauzer" - }, - "adminUserSettings": { - "title": "İstifadəçi İdarəetmə Parametrləri", - "header": "Admin İstifadəçi Nəzarəti Parametrləri", - "admin": "Admin", - "user": "İstifadəçi", - "addUser": "Yeni İstifadəçi Əlavə Et", - "deleteUser": "İstifadəçi Sil", - "confirmDeleteUser": "İstifadəçi silinməlidirmi?", - "confirmChangeUserStatus": "İstifadəçi aktivləşdirilməli/deaktivləşdirilməlidirmi?", - "usernameInfo": "İstifadəçi adı sadəcə hərflərdən, rəqəmlərdən və @._+- xüsusi simvollarından ibarət ola bilər və ya düzgün email ünvanı olmalıdır.", - "roles": "Rollar", - "role": "Rol", - "actions": "Fəaliyyətlər", - "apiUser": "Məhdudlaşdırılmış API İstifadəçisi", - "extraApiUser": "Əlavə Məhdudlaşdırılmış API İstifadəçisi", - "webOnlyUser": "Yalnız Veb İstifadəçisi", - "demoUser": "Demo İstifadəçisi (Fərdi parametrlər yoxdur)", - "internalApiUser": "Daxili API İstifadəçisi", - "forceChange": "İstifadəçini giriş zamanı parolu dəyişməyə məcbur et", - "submit": "İstifadəçini Saxla", - "changeUserRole": "İstifadəçinin rolunu dəyişdir", - "authenticated": "Doğrulanmış", - "editOwnProfil": "Öz profilini redaktə et", - "enabledUser": "aktivləşdirilmiş istifadəçi", - "disabledUser": "deaktivləşdirilmiş istifadəçi", - "activeUsers": "Aktiv İstifadəçilər:", - "disabledUsers": "Deaktiv İstifadəçilər:", - "totalUsers": "Ümumi İstifadəçilər:", - "lastRequest": "Son sorğu", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Verilənlər bazasını Daxil/Xaric Et", - "header": "Verilənlər bazasını Daxil/Xaric Et", - "fileName": "Fayl Adı", - "creationDate": "Yaradılma tarixi", - "fileSize": "Fayl Ölçüsü", - "deleteBackupFile": "Yedək Faylını Sil", - "importBackupFile": "Yedək Faylını Daxil Et", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Yedək Faylını Yüklə", - "info_1": "Məlumatı daxil edərkən doğru strukturun mövcudluğundan əmin olmaq vacibdir. Əgər nə etdiyinizdən əmin deyilsinizsə, professional birindən məsləhət və yardım alın. Strukturdakı xəta proqramdakı nasazlıqlardan proqramı çalışdırma qabiliyyətinin tamamilə aradan qalxmasına qədər bir sıra problemlərə səbəb ola bilər.", - "info_2": "Faylın adı fayl yüklənərkən önəmli deyildir. Faylın adı sonradan sabit adlandırmanın varlığından əmin olmaq məqsədilə backup_user_yyyyMMddHHmm.sql tərzində formata dəyişdiriləcəkdir.", - "submit": "Yedəkləməni Daxil Et", - "importIntoDatabaseSuccessed": "Verilənlər bazasına daxil etmə uğurla nəticələndi", - "backupCreated": "Database backup successful", - "fileNotFound": "Fayl Tapılmadı", - "fileNullOrEmpty": "Fayl boş və ya \"null\" olmamalıdır", - "failedImportFile": "Faylı daxil etmək alınmadı", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "Sessiyanızın vaxtı bitdi. Səhifəni yeniləyin və yenidən cəhd edin.", - "refreshPage": "Səhifəni Yenilə" - }, - "home": { - "desc": "Bütün PDF ehtiyaclarınız üçün lokal-host edilən biraddımlıq həll.", - "searchBar": "Xüsusiyyətləri axtar...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Bax, sitat götür, mətn və ya şəkil əlavə et" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "PDF Multi-alət", - "desc": "Səhifələri Birləşdir, Çevir, Yenidən Sırala, Böl və Sil" - }, - "merge": { - "title": "Birləşdir", - "desc": "Bir neçə PDF-i asanlıqla bir PDF-də birləşdir." - }, - "split": { - "title": "Böl", - "desc": "PDF-ləri bir neçə sənədə böl" - }, - "rotate": { - "title": "Çevir", - "desc": "PDF-lərinizi asanlıqla çevirin." - }, - "imageToPdf": { - "title": "Şəkildən PDF-ə", - "desc": "Şəkli (PNG, JPEG, GIF) PDF-ə Çevir." - }, - "pdfToImage": { - "title": "PDF-dən Şəkilə", - "desc": "PDF-i Şəkilə Çevir. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Səhifələri Sırala", - "desc": "Səhifələri Sil/Sırasını Dəyiş" - }, - "addImage": { - "title": "Şəkil əlavə et", - "desc": "PDF-də təyin edilmiş yerə şəkil əlavə edir" - }, - "watermark": { - "title": "Watermark əlavə et", - "desc": "PDF sənədinə fərdi watermark əlavə et." - }, - "permissions": { - "title": "İcazəni Dəyiş", - "desc": "PDF Sənədinin icazələrini dəyiş" - }, - "removePages": { - "title": "Sil", - "desc": "PDF Sənədindən istəmədiyin şəkilləri sil." - }, - "addPassword": { - "title": "Şifr Əlavə Et", - "desc": "Sənədini şifr ilə kilidlə." - }, - "removePassword": { - "title": "Şifri Sil", - "desc": "PDF Sənədindən şifr qorumasını götür." - }, - "compressPdfs": { - "title": "Sıx", - "desc": "PDF fayllarını sıxaraq onların ölçüsünü azalt." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Metadatanı Dəyiş", - "desc": "PDF sənədindəki Metadatanı Dəyiş/Sil/Əlavə et" - }, - "fileToPDF": { - "title": "Faylı PDF-ə Çevir", - "desc": "Hardasa bütün faylları PDF-ə çevir (DOCX, PNG, XLS, PPT, TXT və daha çox)" - }, - "ocr": { - "title": "OCR / Skanları Təmizlə", - "desc": "Skanları təmizləyir və PDF-in içərisindəki şəkillərdəki yazını tapıb mətn olaraq əlavə edir." - }, - "extractImages": { - "title": "Şəkilləri Xaric Et", - "desc": "PDF-dəki şəkilləri xaric edib onları zip faylında saxlayır" - }, - "pdfToPDFA": { - "title": "PDF-dən PDF/A-a", - "desc": "PDF faylını uzunmüddətli saxlama üçün PDF/A-a çevir" - }, - "PDFToWord": { - "title": "PDF-dən Word-ə", - "desc": "PDF-i Word formatlarına çevir (DOC, DOCX və ODT)" - }, - "PDFToPresentation": { - "title": "PDF-dən Təqdimata", - "desc": "PDF-i Təqdimat formatlarına çevir (PPT, PPTX və ODP)" - }, - "PDFToText": { - "title": "PDF-də RTF-ə (Mətn)", - "desc": "PDF-i mətn və ya RTF formatına çevir" - }, - "PDFToHTML": { - "title": "PDF-dən HTML-ə", - "desc": "PDF-i HTML-ə çevir" - }, - "PDFToXML": { - "title": "PDF-dən XML-ə", - "desc": "PDF-i XML Formatına Çevir" - }, - "ScannerImageSplit": { - "title": "Skan Edilmiş Şəkilləri Detektə et/Ayır", - "desc": "Şəkil/PDF-dən çoxlu şəkilləri ayırır" - }, - "sign": { - "title": "İmzala", - "desc": "Mətn, şəkil və ya əllə çəkmə üsulu ilə PDF-ə imza əlavə edir" - }, - "flatten": { - "title": "Sadələşdir", - "desc": "Bütün interaktiv elementləri və anketləri PDF-dən sil" - }, - "repair": { - "title": "Bərpa Et", - "desc": "Pozulmuş PDF-i Bərpa Etməyə Çalışır" - }, - "removeBlanks": { - "title": "Boş Səhifələri Sil", - "desc": "Sənəddə boş səhifələri tapır və silir" - }, - "removeAnnotations": { - "title": "Sitatları Sil", - "desc": "PDF-dən bütün şərhləri və sitatları silir" - }, - "compare": { - "title": "Müqayisə Et", - "desc": "2 PDF Sənədini müqayisə edir və fərqləri göstərir" - }, - "certSign": { - "title": "Sertifikat İlə İmzala", - "desc": "PDF-i Sertifikat/Açar (PEM/P12) ilə imzalayır" - }, - "removeCertSign": { - "title": "Sertifikat İmzasını Sil", - "desc": "PDF-dən Sertifikat imzasını götür" - }, - "pageLayout": { - "title": "Çoxsəhifəli Tərtibat", - "desc": "PDF-in birdən çox səhifəsini bir səhifədə birləşdir" - }, - "scalePages": { - "title": "Səhifə ölçüsünü/Miqyasını Dəyiş", - "desc": "Səhifənin və/və ya onun məzmununun ölçüsünü və miqyasını dəyiş" - }, - "pipeline": { - "title": "Pipeline", - "desc": "Pipeline Skriptləri təyin edərək PDF-lər üzərində bir neçə prosesi eyni vaxtda reallaşdırın." - }, - "add-page-numbers": { - "title": "Səhifələri Nömrələ", - "desc": "Sənədin səhifələrinə təyin edilmiş yerdə nömrələr əlavə edin" - }, - "auto-rename": { - "title": "PDF Faylını Avtomatik Yenidən Adlandır", - "desc": "Tapılmış başlığa əsasən PDF faylının adını dəyişir" - }, - "adjust-contrast": { - "title": "Rəngləri/Kontrastı Tənzimlə", - "desc": "PDF-in kontrastını, parlaqlığını, rəng doyğunluğunu tənzimlə" - }, - "crop": { - "title": "PDF-i Kəs", - "desc": "Ölçüsünü azaltmaq üçün PDF-i kəs (mətni saxlayır!)" - }, - "autoSplitPDF": { - "title": "Səhifələri Avtomatik Ayır", - "desc": "Fiziki skan olunmuş səhifələri QR koda əsasən ayır" - }, - "sanitizePdf": { - "title": "Təmizlə", - "desc": "Skriptləri və digər elementləri PDF faylından sil" - }, - "URLToPDF": { - "title": "URL/Veb-Sayt-dan PDF-ə", - "desc": "Hər hansı http(s)URL-i PDF-ə çevirir" - }, - "HTMLToPDF": { - "title": "HTML-dən PDF-ə", - "desc": "Hər hansı HTML faylını və ya ZİP-i PDF-ə çevirir" - }, - "MarkdownToPDF": { - "title": "Markdown-dan PDF-ə", - "desc": "Hər hansı Markdown faylını PDF-ə çevirir" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "PDF-in Bütün Məlumatları", - "desc": "PDF barədə mümkün olan bütün məlumatları əldə edir" - }, - "extractPage": { - "title": "Səhifə(lər)i xaric et", - "desc": "Seçilmiş səhifələri PDF-dən xaric edərək əldə et" - }, - "PdfToSinglePage": { - "title": "PDF-dən 1 Böyük Səhifəyə", - "desc": "Bütün PDF səhifələrini bir böyük səhifəyə çevirir" - }, - "showJS": { - "title": "Javascript-i Göstər", - "desc": "PDF-in tərkibinə əlavə edilmiş JS-i axtarır və göstərir" - }, - "autoRedact": { - "title": "Avtomatik Gizlətmə", - "desc": "Daxil edilmiş data əsasında PDF-dəki müəyyən mətn hissəsini qara qutu ilə gizlədir" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF-dən CSV-ə", - "desc": "PDF-dən cədvəlləri CSV-ə çevirərək xaric edir" - }, - "autoSizeSplitPDF": { - "title": "Say/Ölçüyə Əsasən Avtomatik Ayır", - "desc": "PDF-i ölçüyə, səhifə sayına və ya sənəd sayına əsasən bir neçə PDF-ə ayır." - }, - "overlay-pdfs": { - "title": "Üst-Üstə Qoy", - "desc": "Bir PDF-i digərinin üstünə qoyur" - }, - "split-by-sections": { - "title": "PDF-i Hissələrə Əsasən Böl", - "desc": "PDF-in hər səhifəsini daha kiçik üfuqi və şaquli hissələrə böl" - }, - "AddStampRequest": { - "title": "PDF-i Möhürlə", - "desc": "Təyin edilmiş hissələrə mətn və ya şəkil möhürləri əlavə edin" - }, - "removeImagePdf": { - "title": "Şəkli Sil", - "desc": "Fayl ölçüsünü azaltmaq üçün PDF-dən şəkil sil" - }, - "splitPdfByChapters": { - "title": "PDF-i Fəsillərə Əsasən Böl", - "desc": "Fəsil strukturuna əsasən PDF-i bir neçə fayla böl." - }, - "validateSignature": { - "title": "Validate PDF Signature", - "desc": "Verify digital signatures and certificates in PDF documents" - }, - "replaceColorPdf": { - "title": "Qabaqcıl Rəng Seçimləri", - "desc": "Replace color for text and background in PDF and invert full color of pdf to reduce file size" - } - }, - "viewPdf": { - "tags": "bax,oxu,sitat götür,mətn,şəkil", - "title": "View/Edit PDF", - "header": "PDF-ə baxın" - }, - "multiTool": { - "tags": "Multi-alət,Çoxlu əməliyyat,UI,tut-sürüşdür,front end,istifadəçi-tərəf,interaktiv,qarşılıqlı,yerini dəyiş,sil,köçür,böl", - "title": "PDF Multi-Alət", - "header": "PDF Multi-Alət", - "uploadPrompts": "Fayl Adı", - "selectAll": "Hamısını Seç", - "deselectAll": "Hamısını Seçməni Ləğv Et", - "selectPages": "Səhifə Seçimi", - "selectedPages": "Seçilmiş Səhifələr", - "page": "Səhifə", - "deleteSelected": "Seçilmişi Sil", - "downloadAll": "İxrac Et", - "downloadSelected": "Seçilmişi İxrac Et", - "insertPageBreak": "Insert Page Break", - "addFile": "Add File", - "rotateLeft": "Rotate Left", - "rotateRight": "Rotate Right", - "split": "Split", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "Delete", - "dragDropMessage": "Seçilmiş Səhifə(lər)", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "birləşdir,Səhifə əməliyyatları,Back end,server-tərəf", - "title": "Birləşdirin", - "header": "Çoxsaylı PDF-ləri birləşdirin (2+)", - "sortByName": "Ada görə çeşidləyin", - "sortByDate": "Tarixə görə çeşidləyin", - "removeCertSign": "Birləşdirilmiş faylda rəqəmsal imza silinsin?", - "submit": "Birləşdirin" - }, - "split": { - "tags": "Səhifə əməliyyarları,böl,Çoxlu Səhifə,kəs,server-tərəf", - "title": "PDF-i Bölün", - "header": "PDF-i Bölün", - "desc": { - "1": "Seçdiyiniz Nömrələr Bölmək İstədiyiniz Səhifə Nömrəsidir", - "2": "Beləliklə, 1,3,7-9 Seçimi 10 Səhifəlik Sənədi 6 Ayrı PDF-ə Böləcək:", - "3": "Sənəd #1: Səhifə 1", - "4": "Sənəd #2: Səhifə 2 və 3", - "5": "Sənəd #3: Səhifə 4, 5, 6 və 7", - "6": "Sənəd #4: Səhifə 8", - "7": "Sənəd #5: Səhifə 9", - "8": "Sənəd #6: Səhifə 10" - }, - "splitPages": "Bölünəcək Səhifələri Daxil Edin:", - "submit": "Bölün" - }, - "rotate": { - "tags": "server-tərəf", - "title": "PDF fırladın", - "header": "PDF fırladın", - "selectAngle": "Fırlanma bucağını seçin (90 dərəcə ilə):", - "submit": "Fırladın" - }, - "imageToPdf": { - "tags": "çevirmə,şəkil,jpg,fotoşəkil,foto" - }, - "pdfToImage": { - "tags": "çevirmə,şəkil,jpg,fotoşəkil,foto", - "title": "PDF-i Şəklə", - "header": "PDF-i Şəklə", - "selectText": "Şəkil Formatı", - "singleOrMultiple": "Nəticə Şəkil Tipi", - "single": "Bütün Səhifələri birləşdirən Tək Böyük Şəkil", - "multi": "Çoxlu Şəkil, Səhifə Başına Bir Şəkil", - "colorType": "Rəng Tipi", - "color": "Rəng", - "grey": "Boz Tonlama", - "blackwhite": "Qara və Ağ (Data İtə Bilər)", - "submit": "Çevir", - "info": "Python Yüklü Deyil.WebP Çevirməsi Üçün Vacibdir", - "placeholder": "(məsələn, 1,2,8 və ya 4,7,12-16 və ya 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,tək,cüt,sırala,yerini dəyiş", - "title": "Səhifə Tənzimləyicisi", - "header": "PDF Səhifə Tənzimləyicisi", - "submit": "Səhifələri Yenidən Təşkil Edin", - "mode": { - "_value": "Rejim", - "1": "Fərdi Səhifə Düzülüşü", - "2": "Tərs Düzülüş", - "3": "İkitərəfli Çeşidləmə", - "4": "Kitabça Çeşidləmə", - "5": "Yan Tikiş Kitabçasının Çeşidlənməsi", - "6": "Tək-Cüt Bölünmə", - "7": "Birincini Sil", - "8": "Sonuncunu Sil", - "9": "Birinci və Sonuncunu Sil", - "10": "Tək-Cüt Birləşdirmə", - "11": "Duplicate all pages" - }, - "placeholder": "(məs., 1,3,2 və ya 4-8,2,10-12 və ya 2n-1)" - }, - "addImage": { - "tags": "şəkil,jpg,fotoşəkil,foto", - "title": "Şəkli Əlavə Et", - "header": "Şəkli PDF-ə Əlavə Et", - "everyPage": "Bütün Səhifələr?", - "upload": "Şəkli Əlavə Et", - "submit": "Şəkli Əlavə Et" - }, - "watermark": { - "tags": "Mətn,təkrarlanan,nişan,sahib olmaq,müəllif hüquqları,əmtəə nişanı,şəkil,jpg,fotoşəkil,foto", - "title": "Watermark Əlavə Et", - "header": "Watermark Əlavə Et", - "customColor": "Fərdi Mətn Rəngi", - "selectText": { - "1": "Watermark əlavə olunacaq PDF-i seç", - "2": "Watermark Mətni:", - "3": "Şrift Ölçüsü:", - "4": "Fırlatma (0-360):", - "5": "enBoşluq (Üfuqi olaraq watermark-lar arasındakı məsafə):", - "6": "uzunluqBoşluq (Şaquli olaraq watermark-lar arasındakı məsafə):", - "7": "Şəffaflıq (0% - 100%):", - "8": "Watermark Tipi:", - "9": "Watermark Şəkili:", - "10": "PDF-i PDF-Şəkil-ə çevir" - }, - "submit": "Watermark Əlavə Et", - "type": { - "1": "Mətn", - "2": "Şəkil" - } - }, - "permissions": { - "tags": "oxu,yaz,redaktə et,çap et", - "title": "İcazələri Dəyişdir", - "header": "İcazələri Dəyişdir", - "warning": "Bu İcazələrin Dəyişməz Olması İlə Bağlı Xəbərdarlıq Edərək, Onları Parol Əlavə Et Səhifəsi Vasitəsilə Parolla Təyin Etmək Tövsiyə Olunur.", - "selectText": { - "1": "İcazələri Dəyişdirmək Üçün PDF-i Seç", - "2": "Tənzimlənmiş İcazələr", - "3": "Sənədin Yığılmasının Qarşısını Al", - "4": "Məzmunun Çıxarılmasının Qarşısını Al", - "5": "Əlçatanlıq Üçün Çıxarılmasının Qarşısını Alın", - "6": "Formanın Doldurulmasının Qarşısını Alır", - "7": "Modifikasiyanın Qarşısını Al", - "8": "Annotasiyanın Dəyişdirilməsinin Qarşısını Almaq", - "9": "Çapın Qarşısını Al", - "10": "Fərqli Formatlarda Çapın Qarşısını Al" - }, - "submit": "Dəyiş" - }, - "removePages": { - "tags": "Səhifələri təmizlə,səhifələri sil" - }, - "addPassword": { - "tags": "təhlükəsiz,təhlükəsizlik", - "title": "Şifr Əlavə Et", - "header": "Şifr Əlavə Et (Şifrləmə)", - "selectText": { - "1": "Şifrlənəcək PDF-i seç", - "2": "İstifadəçi Şifri", - "3": "Şifrləmə Açarı Uzunluğu", - "4": "Böyük dəyərlər daha güclüdür, lakin kiçik dəyərlərin uyğunluğu yüksəkdir.", - "5": "Təyin olunacaq icazə (Sahib (Owner) Şifri ilə birgə istifadə olunması tövsiyə olunur.)", - "6": "Sənədin strukturunun dəyişilməsinin qarşısını al", - "7": "Məzmun xaric edilməsinin qarşısını al", - "8": "Əlçatanlıq üçün xaricetmənin qarşısını al", - "9": "Anketin doldurulmasının qarşısını al", - "10": "Modifikasiyanın qarşısını al", - "11": "Sitat modifikasiyasının qarşısını al", - "12": "Çap etmənin qarşısını al", - "13": "Müxtəlif formatların çap edilməsinin qarşısını al", - "14": "Sahib Şifri", - "15": "Sənəd açıldıqdan sonra onunla nə edilə biləcəyini limitləndir (Bütün oxuyucular dəstəkləmir)", - "16": "Sənədin özünün açılmağını limitləndirir" - }, - "submit": "Şifrlə" - }, - "removePassword": { - "tags": "təhlükəsiz,deşifr,təhlükəsizlik,kodu aç,kodu sil", - "title": "Şifri Sil", - "header": "Şifri Sil (Deşifr)", - "selectText": { - "1": "Deşifr Üçün PDF-i Seç", - "2": "Şifr" - }, - "submit": "Sil" - }, - "compressPdfs": { - "tags": "sıx,balaca,kiçik" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Başlıq,müəllif,tarix,yaradılış,zaman,yayımçı,istehsalçı,statistika", - "title": "Metadata-nı Dəyiş", - "header": "Metadata-nı Dəyiş", - "selectText": { - "1": "Dəyişmək istədiyiniz dəyişənləri redaktə edin", - "2": "Bütün Metadata-nı Sil", - "3": "Fərdi Metadatanı göstərin:", - "4": "Digər Metadata:", - "5": "Xüsusi Metadata girişi əlavə edin" - }, - "author": "Müəllif:", - "creationDate": "Yaradılma Tarixi (yyyy/MM/dd HH:mm:ss):", - "creator": "Yaradıcı:", - "keywords": "Açar Sözlər:", - "modDate": "Dəyişiklik Tarixi (yyyy/MM/dd HH:mm:ss):", - "producer": "İstehsalçı:", - "subject": "Mövzu:", - "trapped": "Tələ:", - "submit": "Dəyiş" - }, - "fileToPDF": { - "tags": "çevirmə,format,sənəd,şəkil,slayd,mətn,çevirmə,ofis,docs,word,excel,powerpoint", - "title": "Faylı PDF-ə", - "header": "Hər Hansı Bir Faylı PDF-ə Çevir", - "credit": "Bu Servis Fayl Çevirmək Üçün LibreOffice və Unoconv İşlədir", - "supportedFileTypesInfo": "Dəstəklənən Fayl Tipləri", - "supportedFileTypes": "Dəstəklənən Fayl Tipləri Aşagıdakıları Təşkil Etməlidir,ancaq Dəstəklənmiş Faylların Hamısının Yenilənmiş Siyahısı Üçün LibreOffice Sənədlərinə Baş Çəkin", - "submit": "PDF-ə Çevir" - }, - "ocr": { - "tags": "tanıma,mətn,şəkil,skan,oxu,tanı,təyin et,redaktəediləbilən", - "title": "OST (OCR) / Skan Təmizləmə", - "header": "Skanları Təmizlə / OST (Optik Simvol Tanınması)", - "selectText": { - "1": "PDF-də aşkar olunacaq dilləri seçin (Göstərilmiş dillər hazırda aşkar olunmuşlardır):", - "2": "OST-lənmiş PDF ilə yanaşı daxilində OST edilmiş mətn olan PDF yaradın", - "3": "Əyri skan olunmuş səhifələri yerinə fırladaraq düzəldin", - "4": "OST-in arxaplandakı artıq mətni aşkar etməsinin qarşısını almaq üçün səhifəni təmizləyin. (Çıxış dəyişmir)", - "5": "OST-in arxaplandakı artıq mətni aşkar etməsinin qarşısını almaq üçün səhifəni təmizləyin, təmizləməni çıxışa verilən faylda saxlayır.", - "6": "Üzərində interaktiv yazı olan səhifələri nəzərə almır, yalnız şəkil olan səhifələri OST edir.", - "7": "OST-ə məcbur et, bütün orijinal mətn elementlərini silərək hər səhifəni OST edir", - "8": "Normal (PDF-də mətn varsa, xəta verəcək)", - "9": "Əlavə Parametrlər", - "10": "OST (OCR) Rejimi", - "11": "OST-dən sonra şəkilləri sil (BÜTÜN şəkilləri silir, ancaq çevirmə prosesinin bir hissəsi olduqda işə yarayır)", - "12": "Render Tipi (Qabaqcıl)" - }, - "help": "Bunu digər dillər üçün necə istifadə etmək və/və ya docker-də istifadə etməmək üçün bu dokumentasiyanı oxuyun", - "credit": "Bu servis OST (OCR) üçün \"OCRmyPDF\" və \"Tesseract\" istifadə edir.", - "submit": "PDF-i OST ilə işlə" - }, - "extractImages": { - "tags": "şəkil,foto,saxla,arxiv,zip,çək,götür", - "title": "Şəkilləri çıxarın", - "header": "Şəkilləri çıxarın", - "selectText": "Çıxarılan şəkilləri çevirmək üçün şəkil formatını seçin", - "allowDuplicates": "Dublikat şəkilləri yadda saxlayın", - "submit": "Çıxarış" - }, - "pdfToPDFA": { - "tags": "arxiv,uzunmüddətli,standard,çevirmə,yaddaş,saxlama", - "title": "PDF-i PDF/A-ya", - "header": "PDF-i PDF/A-ya", - "credit": "Bu Servis PDF/A Çevirmək Üçün libreoffice İşlədir", - "submit": "Çevir", - "tip": "Hazırda Birdən Çox Giriş Üçün İşləmir", - "outputFormat": "Çıxış Formatı", - "pdfWithDigitalSignature": "PDF Rəqəmsal İmza Ehtiva Edir.Bu, növbəti addımda silinəcək." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,dəyişmə,format,çevirmə,ofis,microsoft,docfile", - "title": "PDF-i Word-ə", - "header": "PDF-i Word-ə", - "selectText": { - "1": "Çıxış Fayl Formatı" - }, - "credit": "Bu Servis Fayl Çevirmək Üçün LibreOffice İşlədir", - "submit": "Çevir" - }, - "PDFToPresentation": { - "tags": "slaydlar,şou,ofis,microsoft", - "title": "PDF-i Təqdimata", - "header": "PDF-i Təqdimata", - "selectText": { - "1": "Çıxış Fayl Formatı" - }, - "credit": "Bu Servis Fayl Çevirmək Üçün LibreOffice İşlədir", - "submit": "Çevir" - }, - "PDFToText": { - "tags": "richformat,richtextformat,zəngin mətn formatı", - "title": "PDF-i RTF (Mətn)-ə", - "header": "PDF-i RTF (Mətn)-ə", - "selectText": { - "1": "Çıxış Fayl Formatı" - }, - "credit": "Bu Servis Fayl Çevirmək Üçün LibreOffice İşlədir", - "submit": "Çevir" - }, - "PDFToHTML": { - "tags": "veb-məzmun,brauzerə uyğun", - "title": "PDF-i HTML-ə", - "header": "PDF-i HTML-ə", - "credit": "Bu Servis Fayl Çevirmək Üçün pdftohtml İşlədir", - "submit": "Çevir" - }, - "PDFToXML": { - "tags": "data-xaricetmə,strukturlu-məzmun,interop,çevirmə,dəyişmə", - "title": "PDF-i XML-ə", - "header": "PDF-i XML-ə", - "credit": "Bu Servis Fayl Çevirmək Üçün LibreOffice İşlədir", - "submit": "Çevir" - }, - "ScannerImageSplit": { - "tags": "ayır,avtodetektə,skan,çoxlu şəkil,nizamla", - "selectText": { - "1": "Bucaq Aşağı Limiti:", - "2": "Şəklin fırladılması üçün lazım olan minimal mütləq bucağı təyin edir (defolt: 10).", - "3": "Rəng Toleransı:", - "4": "Təxmin olunan arxaplan rənginin ətrafındakı rəng fərqliliyi intervalını təyin edir (defolt: 30).", - "5": "Minimal Sahə:", - "6": "Foto üçün minimal sahənin aşağı limitini təyin edir (defolt: 10000).", - "7": "Minimal Kontur Sahəsi:", - "8": "Fotonun kontur sahəsi üçün minimal aşağı limiti təyin edir", - "9": "Sərhəd Ölçüsü:", - "10": "Faylda ağ sərhədlərin olmasının qarşısını almaq üçün əlavə ediləcək sərhədin ölçüsünü təyin edir (defolt: 1)." - }, - "info": "Python yüklənməyib. İşə salmaq üçün Python lazımdır." - }, - "sign": { - "tags": "təsdiqlə,baş hərflər,çəkilmiş-imza,mətn-imza,şəkil-imza", - "title": "İmza", - "header": "PDF sənədlərini imzalayın", - "upload": "Şəkil Yüklə", - "draw": "İmza çəkmək", - "text": "Mətn daxil etmə", - "clear": "Təmizləmək", - "add": "Əlavə et", - "saved": "Saxlanan İmzalar", - "save": "İmzanı yadda Saxla", - "personalSigs": "Şəxsi İmzalar", - "sharedSigs": "Paylaşılan İmzalar", - "noSavedSigs": "Saxlanmış imza tapılmadı", - "addToAll": "Bütün səhiflərə əlavə et", - "delete": "Sil", - "first": "İlk səhifə", - "last": "Son səhifə", - "next": "Növbəti səhifə", - "previous": "Əvvəlki səhifə", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "statik,deaktiv,qeyri-interaktiv,streamline", - "title": "Düzləşdirin", - "header": "PDF-i düzləşdirin", - "flattenOnlyForms": "Yalnız formaları düzəldin", - "submit": "Düzləşdirin" - }, - "repair": { - "tags": "düzəlt,bərpa et,korreksiya et,geri qaytar", - "title": "Bərpa Et", - "header": "PDFləri Bərpa Et", - "submit": "Bərpa Et" - }, - "removeBlanks": { - "tags": "təmizləmə,streamline,qeyri-məzmun,nizamla", - "title": "Boş Səhifələri Sil", - "header": "Boş SƏhifələri Silir", - "threshold": "Minimal Piksel Bəyazlığı:", - "thresholdDesc": "Pikselin \"Ağ\" hesab olunması üçün minimal nə qədər bəyaz olmalı olduğunu təyin edin. 0 = Qara, 255 Ağappaq.", - "whitePercent": "Bəyaz Faizi (%):", - "whitePercentDesc": "Silinmək üçün səhifənin neçə faizi \"ağ\" piksellərdən təşkil olunmalıdır", - "submit": "Boş Səhifələri Sil" - }, - "removeAnnotations": { - "tags": "şərhlər,önə çıxanlar,qeydlər,işarələmə,sil", - "title": "Annotasiyaları silin", - "header": "Annotasiyaları silin", - "submit": "Sil" - }, - "compare": { - "tags": "fərqləndir,təzad yarat,dəyişikliklər,analiz", - "title": "Müqayisə Et", - "header": "PDF-ləri Müqayisə Et", - "highlightColor": { - "1": "Önə Çıxarma Rəngi 1:", - "2": "Önə Çıxarma Rəngi 2:" - }, - "document": { - "1": "Sənəd 1", - "2": "Sənəd 2" - }, - "submit": "Müqayisə Et", - "complex": { - "message": "Fayllardan biri və ya ikisi də böyük fayldır. Müqayisə effektivliyi azala bilər." - }, - "large": { - "file": { - "message": "Fayllardan biri və ya ikisi də işləmək üçün çox böyükdür." - } - }, - "no": { - "text": { - "message": "Fayllardan birində və ya ikisində də mətn məzmunu yoxdur. Zəhmət olmasa, müqayisə üçün mətn məzmunlu PDF seçin." - } - } - }, - "certSign": { - "tags": "Doğrula,PEM,P12,rəsmi,şifrlə", - "title": "Sertifikatla İmzala", - "header": "PDF-i Sertifikatınızla İmzalayın (İşlənilir)", - "selectPDF": "İmzalamaq üçün PDF Faylı seçin:", - "jksNote": "Note: Əgər sertifikatınızın tipi aşağıda göstərilməyibsə, zəhmət olmasa \"Keytool command line tool\" istifadə edərək onu \"Java Keystroke\" (.jks) faylına çevirin. Sonra, aşağıdan .jks faylını seçin.", - "selectKey": "Şəxsi Açar faylınızı seçin (PKCS#8 format, .pem və ya .der ola bilər):", - "selectCert": "Sertifikat faylınızı seçin (X.509 format, .pem və ya .der ola bilər):", - "selectP12": "PKCS#12 Keystore Faylınızı seçin (.p12 və ya .pfx) (İstəyə bağlı, əgər təmin olunarsa, şəxsi açar və sertifikatınızı ehtiva etməlidir):", - "selectJKS": "Java Keystore Faylınızı seçin (.jks və ya .keystore):", - "certType": "Sertifikat Tipi", - "password": "Keystore və ya Şəxsi Açar daxil edin (Əgər varsa):", - "showSig": "İmzanı Göstər", - "reason": "Səbəb", - "location": "Məkan", - "name": "Ad", - "showLogo": "Loqonu Göstər", - "submit": "PDF-i İmzala" - }, - "removeCertSign": { - "tags": "Doğrula,PEM,P12,rəsmi,deşifr", - "title": "Sertifikat İmzasını Sil", - "header": "Rəqəmsal sertifikatı PDF-dən çıxarın", - "selectPDF": "PDF faylı seçin:", - "submit": "İmzanı silin" - }, - "pageLayout": { - "tags": "birləşdir,sintez,tək-baxış,nizamla", - "title": "Çoxsəhifəli Tərtibat", - "header": "Çoxsəhifəli Tərtibat", - "pagesPerSheet": "Vərəqdəki Səhifə Sayı:", - "addBorder": "Çərçivə Əlavə Et", - "submit": "Təsdiq et" - }, - "scalePages": { - "tags": "ölçüsünü dəyiş,modifikasiya et,ölçülər,uyğunlaş", - "title": "Səhifə miqyasını tənzimləyin", - "header": "Səhifə miqyasını tənzimləyin", - "pageSize": "Sənədin bir səhifəsinin ölçüsü.", - "keepPageSize": "Orijinal Ölçü", - "scaleFactor": "Səhifənin böyütmə səviyyəsi (kəsmə).", - "submit": "Təsdiq edin" - }, - "add-page-numbers": { - "tags": "nömrələ,taq,səliqələ,indeks" - }, - "auto-rename": { - "tags": "avtodetektə,başlıq-əsaslı,səliqələ,yenidən adlandır", - "title": "Avtomatik Yenidən Adlandır", - "header": "Pdf-in Adını Avtomatik Yenidən Adlandır", - "submit": "Avtomatik Yenidən Adlandır" - }, - "adjust-contrast": { - "tags": "rəng-tənzimləmə,köklə,modifikasiya et,yaxşılaşdır" - }, - "crop": { - "tags": "kəs,kiçilt,redaktə et,forma", - "title": "Kəs", - "header": "Pdf-ləri Kəs", - "submit": "Təsdiq Et" - }, - "autoSplitPDF": { - "tags": "QR-əsaslı,ayrı,skan-seqment,nizamla", - "title": "PDF-i avtomatik bölmə", - "header": "PDF-i avtomatik bölmə", - "description": "Sənədlərinizi çap edin, daxil edin, skan edin, yükləyin və bizə icazə verin. Əl işinin çeşidlənməsinə ehtiyac yoxdur.", - "selectText": { - "1": "Aşağıdan bəzi ayırıcı vərəqləri çap edin (qara və ağ yaxşıdır).", - "2": "Aralarına ayırıcı vərəq daxil edərək bütün sənədlərinizi bir anda skan edin.", - "3": "Tək böyük skan edilmiş PDF faylını yükləyin və Stirling PDF-in qalanını idarə etməsinə icazə verin.", - "4": "Ayırıcı səhifələr avtomatik aşkarlanır və silinir, səliqəli yekun sənədə zəmanət verir." - }, - "formPrompt": "Stirling-PDF ə Səhifə bölücüləri olan PDF-i təqdim edin:", - "duplexMode": "Dupleks rejimi (Ön və arxa skanlama)", - "dividerDownload2": "'Auto Splitter Divider (with instructions).pdf'-ı yükləyin", - "submit": "Təsdiq edin" - }, - "sanitizePdf": { - "tags": "təmiz,təhlükəsiz,güvənli,sil" - }, - "URLToPDF": { - "tags": "veb,səhifəni-saxla,webdən-sənədə,arxiv", - "title": "URL-i PDF-ə", - "header": "URL-i PDF-ə", - "submit": "Çevir", - "credit": "WeasyPrint İstifadə Edir" - }, - "HTMLToPDF": { - "tags": "işarələmə,veb-məzmun,çevirmə,dəyişmə", - "title": "HTML-dən PDF-ə", - "header": "HTML-dən PDF-ə", - "help": "HTML fayllarını və tərkibində mütləq html/css/images və s. olan ZIP fayllarını qəbul edir", - "submit": "Çevir", - "credit": "WeasyPrint İstifadə Edir", - "zoom": "Vebsaytı göstərmək üçün yaxınlaşdırma dərəcəsi.", - "pageWidth": "Səhifənin eninin santimetrlərlə ölçüsü. (Standart üçün boş buraxın)", - "pageHeight": "Səhifənin hündürlüyünün santimetrlərlə ölçüsü. (Standart üçün boş buraxın)", - "marginTop": "Səhifənin yuxarı kənarının millimetrlə ölçüsü. (Standart üçün boş buraxın)", - "marginBottom": "Səhifənin alt kənarının millimetrlə ölçüsü. (Standart üçün boş buraxın)", - "marginLeft": "Səhifənin sol kənarının millimetrlə ölçüsü. (Standart üçün boş buraxın)", - "marginRight": "Səhifənin sağ kənarının millimetrlə ölçüsü. (Standart üçün boş buraxın)", - "printBackground": "Vebsaytların arxa fonunu renderlə.", - "defaultHeader": "Standart Başlığı Aktivləşdir (Ad və səhifə nömrəsi)", - "cssMediaType": "Səhifənin CSS media növünü dəyişdir.", - "none": "Heç biri", - "print": "Çap et", - "screen": "Ekran" - }, - "MarkdownToPDF": { - "tags": "işarələmə,web-məzmun,dəyişmə,çevirmə", - "title": "Markdown-dan PDF-ə", - "header": "Markdown-dan PDF-ə", - "submit": "Çevir", - "help": "İş davam edir", - "credit": "WeasyPrint İstifadə Edir" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "informasiy,data,məlumatlar,statistika", - "title": "PDF Barəsində Məlumat Əldə Et", - "header": "PDF Barəsində Məlumat Əldə Et", - "submit": "Məlumat Əldə Et", - "downloadJson": "JSON yüklə" - }, - "extractPage": { - "tags": "çıxar" - }, - "PdfToSinglePage": { - "tags": "tək səhifə" - }, - "showJS": { - "tags": "JS", - "title": "Javascripti Göstər", - "header": "Javascripti Göstər", - "downloadJS": "Javascripti Endir", - "submit": "Göstər" - }, - "autoRedact": { - "tags": "Qarala,gizlət,sil,qara,marker,gizli", - "title": "Avtomatik Gizlətmə", - "header": "Avtomatik Gizlətmə", - "colorLabel": "Rəng", - "textsToRedactLabel": "Gizlədiləcək Mətn (Yeni sətirlə ayrılmış)", - "textsToRedactPlaceholder": "e.g. \\nKonfidensial \\nTam-Məxfi", - "useRegexLabel": "Regex İstifadə Et", - "wholeWordSearchLabel": "Bütöv Söz Axtar", - "customPaddingLabel": "Fərdi Əlavə Başlıq", - "convertPDFToImageLabel": "PDF-i PDF-Şəkil-ə çevir (Qutunun arxasındakı yazını silmək üçün istifadə edilir)", - "submitButton": "Təsdiqlə" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,Cədvəl xaricetmə,xaric et,çevir" - }, - "autoSizeSplitPDF": { - "tags": "pdf,ayır,sənəd,nizamla" - }, - "overlay-pdfs": { - "tags": "üst-üstə", - "header": "Overlay PDF faylları", - "baseFile": { - "label": "Əsas PDF faylını seçin" - }, - "overlayFiles": { - "label": "Overlay PDF fayllarını seçin" - }, - "mode": { - "label": "Overlay Modu seçin", - "sequential": "Sequential Overlay", - "interleaved": "Interleaved Overlay", - "fixedRepeat": "Sabit Təkrar Yerləşdirmə" - }, - "counts": { - "label": "Overlay Sayları (Sabit Təkrar Rejimi üçün)", - "placeholder": "Sayları vergüllə ayrılmış şəkildə daxil edin (məsələn, 2,3,1)" - }, - "position": { - "label": "Overlay Position seçin", - "foreground": "Ön plan", - "background": "Arxa plan" - }, - "submit": "Təsdiq et" - }, - "split-by-sections": { - "tags": "Hissə Bölgüsü, Ayır, Fərdiləşdir", - "title": "PDF-i hissələrə bölün", - "header": "PDF-i hissələrə bölün", - "horizontal": { - "label": "Üfüqi bölmələr", - "placeholder": "Üfüqi bölmələrin sayını daxil edin" - }, - "vertical": { - "label": "Şaquli bölmələr", - "placeholder": "Şaquli bölmələrin sayını daxil edin" - }, - "submit": "Pdf-i bölmək", - "merge": "Bir PDF-ə birləşdirin" - }, - "AddStampRequest": { - "tags": "Möhür, Şəkil əlavə et, şəkli ortala, Watermark, PDF, Embed, Fərdiləşdir", - "header": "PDF-i Möhürlə", - "title": "PDF-i Möhürlə", - "stampType": "Möhür Tipi", - "stampText": "Möhür Yazısı", - "stampImage": "Möhür Fotosu", - "alphabet": "Əlifba", - "fontSize": "Font/Şəkil Ölçüsü", - "rotation": "İstiqamət", - "opacity": "Şəffaflıq", - "position": "Yerləşmə", - "overrideX": "X Koordinatının Üstünə Yaz", - "overrideY": "Y Koordinatının Üstünə Yaz", - "customMargin": "Fərdi Boşluq Ölçüsü", - "customColor": "Fərdi Mətn Rəngi", - "submit": "Təsdiqlə" - }, - "removeImagePdf": { - "tags": "Şəkil Sil,Səhifə Əməliyyatları,Back end,server-tərəf" - }, - "splitPdfByChapters": { - "tags": "böl,fəsillər,əlfəcinlər,nizamla" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "Validate PDF Signatures", - "header": "Validate Digital Signatures", - "selectPDF": "Select signed PDF file", - "submit": "Validate Signatures", - "results": "Validation Results", - "status": { - "_value": "Status", - "valid": "Valid", - "invalid": "Invalid" - }, - "signer": "Signer", - "date": "Date", - "reason": "Reason", - "location": "Location", - "noSignatures": "No digital signatures found in this document", - "chain": { - "invalid": "Certificate chain validation failed - cannot verify signer's identity" - }, - "trust": { - "invalid": "Certificate not in trust store - source cannot be verified" - }, - "cert": { - "expired": "Certificate has expired", - "revoked": "Certificate has been revoked", - "info": "Certificate Details", - "issuer": "Issuer", - "subject": "Subject", - "serialNumber": "Serial Number", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "algorithm": "Algorithm", - "keySize": "Key Size", - "version": "Version", - "keyUsage": "Key Usage", - "selfSigned": "Self-Signed", - "bits": "bits" - }, - "signature": { - "info": "Signature Information", - "_value": "Signature", - "mathValid": "Signature is mathematically valid BUT:" - }, - "selectCustomCert": "Custom Certificate File X.509 (Optional)" - }, - "replace-color": { - "title": "Qabaqcıl Rəng Seçimləri", - "header": "PDF-də Rəngləri Dəyiş-Tərsinə Çevir", - "selectText": { - "1": "Rəngi dəyişmə və tərsinə çevirmə seçimləri", - "2": "Defolt(Defolt yüksək kontrastlı rənglər)", - "3": "Fərdi(Fərdiləşdirilmiş rənglər)", - "4": "Bütöv Tərsinə Çevir(Bütün rəngləri tərsinə çevir)", - "5": "Yüksək kontrastlı rəng seçimləri", - "6": "Qara arxaplanda ağ mətn", - "7": "Ağ arxaplanda qara mətn", - "8": "Qara arxaplanda sarı mətn", - "9": "Qara arxaplanda yaşıl mətn", - "10": "Mətn rəngi seç", - "11": "Arxaplan rəngi seç" - }, - "submit": "Əvəzlə" - }, - "replaceColorPdf": { - "tags": "Rəngləri Dəyiş,Səhifə əməliyyatları,Back end,server-tərəf" - }, - "login": { - "title": "Daxil olun", - "header": "Daxil olun", - "signin": "Daxil olun", - "rememberme": "Məni xatırla", - "invalid": "Etibarsız istifadəçi adı və ya şifr.", - "locked": "Sizin hesabınız kilidlənmişdir.", - "signinTitle": "Zəhmət olmasa, daxil olun", - "ssoSignIn": "Single Sign-on vasitəsilə daxil olun", - "oAuth2AutoCreateDisabled": "OAUTH2 Auto-Create İstifadəçisi Deaktivləşdirilmişdir", - "oAuth2AdminBlockedUser": "Qeydiyyatdan keçməmiş istifadəçilərin qeydiyyatı və daxil olması hal-hazırda bloklanmışdır. Zəhmət olmasa, administratorla əlaqə saxlayın.", - "oauth2RequestNotFound": "Təsdiqlənmə sorğusu tapılmadı", - "oauth2InvalidUserInfoResponse": "Yanlış İstifadəçi Məlumatı Cavabı", - "oauth2invalidRequest": "Etibarsız Sorğu", - "oauth2AccessDenied": "Giriş rədd edildi", - "oauth2InvalidTokenResponse": "Etibarsız Token Cavabı", - "oauth2InvalidIdToken": "Etibarsız Id Token", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "İstifadəçi deaktivləşdirilmişdir, bu istifadəçi adı ilə giriş hal-hazırda bloklanmışdır. Zəhmət olmasa, administratorla əlaqə saxlayın.", - "alreadyLoggedIn": "Siz artıq daxil olmusunuz", - "alreadyLoggedIn2": "cihazlar. Zəhmət olmasa, cihazlardan çıxış edin və yenidən cəhd edin.", - "toManySessions": "Həddindən artıq aktiv sessiyanız var", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF-dən Tək Səhifəyə", - "header": "PDF-dən Tək Səhifəyə", - "submit": "Tək Səhifəyə Çevir" - }, - "pageExtracter": { - "title": "Səhifələri çıxar", - "header": "Səhifələri çıxar", - "submit": "Çıxar", - "placeholder": "(məsələn, 1,2,8 və ya 4,7,12-16 və ya 2n-1)" - }, - "sanitizePDF": { - "title": "PDF-i Təmizlə", - "header": "PDF Faylını Təmizlə", - "selectText": { - "1": "JavaScript Fəaliyyətlərini Sil", - "2": "Daxil Edilmiş Faylları Sil", - "3": "Remove XMP metadata", - "4": "Linkləri Sil", - "5": "Şriftləri Sil", - "6": "Remove Document Info Metadata" - }, - "submit": "PDF-i Təmizlə" - }, - "adjustContrast": { - "title": "Kontrastı tənzimləyin", - "header": "Kontrastı tənzimləyin", - "contrast": "Kontrast:", - "brightness": "Parlaqlıq:", - "saturation": "Doyma:", - "download": "Yüklə" - }, - "compress": { - "title": "Sıxışdır", - "header": "PDF-i Sıxışdır", - "credit": "Bu servis PDF sıxışdırılması/Optimizasiyası üçün Ghostscript istifadə edir.", - "grayscale": { - "label": "Sıxma üçün Boz Rəng Tətbiq Edin" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Optimizasiya səviyyəsi:", - "4": "Avto mod - PDF-in dəqiq ölçüsünü əldə etmək üçün keyfiyyəti avtomatik tənzimləyir", - "5": "Gözlənilən PDF Ölçüsü (məsələn, 25MB, 10.8MB, 25KB)" - }, - "submit": "Sıxışdır" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "Bu xüsusiyyət bizim multi-alət səhifəmizdə də mövcuddur. Əlavə xüsusiyyətlər və səhifə-səhifə interfeys üçün sınaqdan keçirin!" - }, - "pageRemover": { - "title": "Səhifə Silici", - "header": "PDF səhifə silici", - "pagesToDelete": "Silinəcək səhifələr (Səhifə nömrələrinin vergüllə ayrılmış siyahısını daxil edin):", - "submit": "Səhifələri Sil", - "placeholder": "(məsələn, 1,2,6 və ya 1-10,15-30)" - }, - "imageToPDF": { - "title": "Şəkli PDF-ə", - "header": "Şəkli PDF-ə", - "submit": "Çevir", - "selectLabel": "Şəkil Uyğunluğu Seçimləri", - "fillPage": "Səhifəni Doldur", - "fitDocumentToImage": "Şəklə Uyğun Səhifə", - "maintainAspectRatio": "Aspekt Nisbətlərini Qoruyun", - "selectText": { - "2": "PDF-i Avtomatik Fırlat", - "3": "Çoxsaylı Fayl Məntiqi (Yalnız Birdən Çox Şəkil İlə İşləyərkən Aktivdir)", - "4": "Tək Bir PDF-ə Birləşdir", - "5": "Ayrı PDF-lərə Çevirin" - } - }, - "PDFToCSV": { - "title": "PDF-i CSV-ə", - "header": "PDF-i CSV-ə", - "prompt": "Çıxartmaq Üçün Səhifə Seç", - "submit": "Çıxart" - }, - "split-by-size-or-count": { - "title": "PDF-i Ölçü və ya Sayına görə bölün", - "header": "PDF-i Ölçü və ya Sayına görə bölün", - "type": { - "label": "Bölmə növünü seçin", - "size": "Ölçüyə görə", - "pageCount": "Səhifə sayına görə", - "docCount": "Sənədlərin sayına görə" - }, - "value": { - "label": "Dəyəri daxil edin", - "placeholder": "Ölçü daxil edin (məsələn, 2MB və ya 3 KB) və ya sayın daxil edin (məsələn, 5)" - }, - "submit": "Təsdiq et" - }, - "printFile": { - "title": "Faylı çap edin", - "header": "Faylı printerdə çap edin", - "selectText": { - "1": "Çap etmək üçün Fayl seçin", - "2": "Printer adını daxil edin" - }, - "submit": "Çap et" - }, - "licenses": { - "nav": "Lisenziya", - "title": "3-cü Tərəf Lisenziyalar", - "header": "3-cü Tərəf Lisenziyalar", - "module": "Modul", - "version": "Versiya", - "license": "Lisenziya" - }, - "survey": { - "nav": "Sorğu", - "title": "Stirling-PDF sorğusu", - "description": "Stirling-PDF-də izləmə yoxdur, ona görə də Stirling-PDF-ni təkmilləşdirmək üçün istifadəçilərimizi eşitmək istəyirik!", - "changes": "Stirling-PDF son sorğudan bəri dəyişdi! Daha çox məlumat əldə etmək üçün lütfən, buradakı blog yazımızı yoxlayın:", - "changes2": "Bu dəyişikliklərlə biz ödənişli biznes dəstəyi və maliyyə alırıq", - "please": "Lütfən, Stirling-PDF-nin gələcəyi ilə bağlı məlumat əldə etmək üçün sorğumuzda iştirak edin!", - "disabled": "(Sorğu pop-up növbəti yeniləmələrdə deaktiv ediləcək, lakin səhifənin altında mövcuddur)", - "button": "Sorğuda iştirak edin", - "dontShowAgain": "Bir daha göstərmə", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Şəkli silin", - "header": "Şəkli silin", - "removeImage": "Şəkli silin", - "submit": "Şəkli silin" - }, - "splitByChapters": { - "title": "PDF-i hissələrə bölün", - "header": "PDF-i hissələrə bölün", - "bookmarkLevel": "Bookmark Səviyyəsi", - "includeMetadata": "Metadata daxil edin", - "allowDuplicates": "Dublikatlara icazə verin", - "desc": { - "1": "Bu alət fəsil strukturuna əsasən bir PDF faylını çoxlu PDF-lərə bölür.", - "2": "Bookmark Səviyyəsi: Bölmə üçün istifadə ediləcək Bookmark səviyyəsini seçin (üst səviyyə üçün 0, ikinci səviyyə üçün 1 və s.).", - "3": "Metadatanı daxil edin: Əgər yoxlanılıbsa, orijinal PDF-in metadatası hər bir bölünmüş PDF-ə daxil ediləcək.", - "4": "Allow Duplicates: Dublikatlara icazə verin: Əgər işarələnərsə, eyni səhifədə birdən çox bookmarka ayrı-ayrı PDF sənədləri yaratmağa icazə verin." - }, - "submit": "PDF-i Ayır" - }, - "fileChooser": { - "click": "Click", - "or": "or", - "dragAndDrop": "Drag & Drop", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "Drag & Drop file(s) here", - "extractPDF": "Extracting..." - }, - "releases": { - "footer": "Buraxılışlar", - "title": "Buraxılış Qeydləri", - "header": "Buraxılış Qeydləri", - "current": { - "version": "Hazırki Buraxılış" - }, - "note": "Buraxılış Qeydləri yalnız ingiliscə mövcuddur" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/bg-BG/translation.json b/frontend/dist/locales/bg-BG/translation.json deleted file mode 100644 index 17f6a0639..000000000 --- a/frontend/dist/locales/bg-BG/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Размер на шрифт", - "fontName": "Име на шрифт", - "title": "Добавяне на номера на страници", - "header": "Добавяне на номера на страници", - "selectText": { - "1": "Изберете PDF файл:", - "2": "Размер на полето", - "3": "Позиция", - "4": "Начален номер", - "5": "Страници към номер", - "6": "Персонализиран текст" - }, - "customTextDesc": "Персонализиран текст", - "numberPagesDesc": "Кои страници да номерирате, по подразбиране 'всички', също приема 1-5 или 2,5,9 и т.н.", - "customNumberDesc": "По подразбиране е {n}, също приема 'Страница {n} от {total}', 'Текст-{n}', '{filename}-{n}", - "submit": "Добавяне на номера на страници" - }, - "pdfPrompt": "Изберете PDF(и)", - "multiPdfPrompt": "Изберете PDF (2+)", - "multiPdfDropPrompt": "Изберете (или плъзнете и пуснете) всички PDF файлове, от които се нуждаете", - "imgPrompt": "Изберете изображение(я)", - "genericSubmit": "Подайте", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Предупреждение: Този процес може да отнеме до минута в зависимост от размера на файла", - "pageOrderPrompt": "Персонализиран ред на страниците (Въведете разделен със запетаи списък с номера на страници или функции като 2n+1):", - "pageSelectionPrompt": "Персонализиран избор на страница (Въведете списък с номера на страници 1,5,6, разделени със запетая, или функции като 2n+1) :", - "goToPage": "Давай", - "true": "Вярно", - "false": "Невярно", - "unknown": "Непознат", - "save": "Съхранете", - "saveToBrowser": "Съхраняване в браузъра", - "close": "Затворете", - "filesSelected": "избрани файлове", - "noFavourites": "Няма добавени любими", - "downloadComplete": "Свалянето завършено", - "bored": "Отекчени сте да чакате?", - "alphabet": "Азбука", - "downloadPdf": "Изтеглете PDF", - "text": "Текст", - "font": "Шрифт", - "selectFillter": "-- Изберете --", - "pageNum": "Брой страница", - "sizes": { - "small": "Малък", - "medium": "Среден", - "large": "Голям", - "x-large": "X-Голям" - }, - "error": { - "pdfPassword": "PDF документът е с парола и или паролата не е предоставена, или е неправилна", - "_value": "Грешка", - "sorry": "Извинете за проблема!", - "needHelp": "Нуждаете се от помощ / Открихте проблем?", - "contactTip": "Ако все още имате проблеми, не се колебайте да се свържете с нас за помощ. Можете да изпратите запитване на нашата страница в GitHub или да се свържете с нас чрез Discord:", - "404": { - "head": "404 - Страницата не е намерена | Опа! Спънахме се в кода!", - "1": "Изглежда не можем да намерим страницата, която търсите.", - "2": "Нещо се обърка" - }, - "github": "Изпратете запитване в GitHub", - "showStack": "Покажи проследяване на стека", - "copyStack": "Копиране на проследяване на стека", - "githubSubmit": "GitHub - Изпратете запитване", - "discordSubmit": "Discord - Изпратете запитване за поддръжка" - }, - "delete": "Изтрий", - "username": "Потребителско име", - "password": "Парола", - "welcome": "Добре дошли", - "property": "Свойство", - "black": "Черно", - "white": "Бяло", - "red": "Червено", - "green": "Зелено", - "blue": "Синьо", - "custom": "Персонализиране...", - "WorkInProgess": "Работата е в ход, може да не работи или да има грешки, моля, докладвайте за проблеми!", - "poweredBy": "Задвижван чрез", - "yes": "Да", - "no": "Не", - "changedCredsMessage": "Идентификационните данни са променени!", - "notAuthenticatedMessage": "Потребителят не е автентикиран.", - "userNotFoundMessage": "Потребителят не е намерен", - "incorrectPasswordMessage": "Текущата парола е неправилна.", - "usernameExistsMessage": "Новият потребител вече съществува.", - "invalidUsernameMessage": "Невалидно потребителско име, потребителското име може да съдържа само букви, цифри и следните специални знаци @._+- или трябва да е валиден имейл адрес.", - "invalidPasswordMessage": "Паролата не трябва да е празна и не трябва да има интервали в началото или в края.", - "confirmPasswordErrorMessage": "Нова парола и Потвърждаване на новата парола трябва да съвпадат.", - "deleteCurrentUserMessage": "Не може да се изтрие вписания в момента потребител.", - "deleteUsernameExistsMessage": "Потребителското име не съществува и не може да бъде изтрито.", - "downgradeCurrentUserMessage": "Не може да се понижи ролята на текущия потребител", - "disabledCurrentUserMessage": "Текущият потребител не може да бъде деактивиран", - "downgradeCurrentUserLongMessage": "Не може да се понижи ролята на текущия потребител. Следователно текущият потребител няма да бъде показан.", - "userAlreadyExistsOAuthMessage": "Потребителят вече съществува като OAuth2 потребител.", - "userAlreadyExistsWebMessage": "Потребителят вече съществува като уеб-потребител.", - "oops": "Опаа!", - "help": "Помощ", - "goHomepage": "Отидете на началната страница", - "joinDiscord": "Присъединете се към нашия Discord сървър", - "seeDockerHub": "Погледнете Docker Hub", - "visitGithub": "Посетете Github Repository", - "donate": "Направете дарение", - "color": "Цвят", - "sponsor": "Спонсор", - "info": "Информация", - "pro": "Pro", - "page": "Страница", - "pages": "Страници", - "loading": "Зареждане на...", - "addToDoc": "Добавяне към документ", - "reset": "Нулиране", - "apply": "Приложи", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Политика за поверителност", - "terms": "Правила и условия", - "accessibility": "Достъпност", - "cookie": "Политика за бисквитки", - "impressum": "Отпечатък", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Pipeline Меню (Бета)", - "uploadButton": "Качване на персонализиран", - "configureButton": "Настройка", - "defaultOption": "Персонализиран", - "submitButton": "Подайте", - "help": "Pipeline Помощ", - "scanHelp": "Помощ за сканиране на папки", - "deletePrompt": "Сигурни ли сте, че искате да изтриете pipeline", - "tags": "автоматизиране,последователност,чрез скриптове,пакетен процес", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Pipeline Конфигурация", - "pipelineNameLabel": "Pipeline име", - "saveSettings": "Запазете настройките за работа", - "pipelineNamePrompt": "Въведете името на pipeline тук", - "selectOperation": "Избор на операция", - "addOperationButton": "Добавяне на операция", - "pipelineHeader": "Pipeline:", - "saveButton": "Изтегли", - "validateButton": "Валидирай" - }, - "enterpriseEdition": { - "button": "Направете надстройка до Pro версията", - "warning": "Тази функция е достъпна само за потребители на Pro версията.", - "yamlAdvert": "Stirling PDF Pro поддържа YAML конфигурационни файлове и други SSO функции.", - "ssoAdvert": "Търсите повече функции за управление на потребителите? Погледнете за Stirling PDF Pro" - }, - "analytics": { - "title": "Искате ли да подобрите Stirling PDF?", - "paragraph1": "Stirling PDF включва анализи, за да ни помогне да подобрим продукта. Ние не проследяваме лична информация или съдържание на файлове.", - "paragraph2": "Моля, обмислете възможността за анализ, за ​​да помогнете на Stirling-PDF да расте и да ни позволи да разберем по-добре нашите потребители.", - "enable": "Активиране на анализа", - "disable": "Деактивиране на анализа", - "settings": "Можете да промените настройките за анализ във config/settings.yml файла" - }, - "navbar": { - "favorite": "Любими", - "recent": "Нови и наскоро актуализирани", - "darkmode": "Тъмна тема", - "language": "Езици", - "settings": "Настройки", - "allTools": "Инструменти", - "multiTool": "Мулти инструменти", - "search": "Търсене", - "sections": { - "organize": "Организирайте", - "convertTo": "Преобразуване в PDF", - "convertFrom": "Преобразуване от PDF", - "security": "Подписване и сигурност", - "advance": "Разширено", - "edit": "Преглед и редактиране", - "popular": "Популярни" - } - }, - "settings": { - "title": "Настройки", - "update": "Налична актуализация", - "updateAvailable": "{0} е текущата инсталирана версия. Налична е нова версия ({1}).", - "appVersion": "Версия на приложението:", - "downloadOption": { - "title": "Изберете опция за изтегляне (за изтегляния на един файл без да е архивиран):", - "1": "Отваряне в същия прозорец", - "2": "Отваряне в нов прозорец", - "3": "Изтегли файл" - }, - "zipThreshold": "Архивирайте файловете, когато броят на изтеглените файлове надвишава", - "signOut": "Изход", - "accountSettings": "Настройки на акаунта", - "bored": { - "help": "Активира игра с великденски яйца" - }, - "cacheInputs": { - "name": "Запазете въведените формуляри", - "help": "Активирайте за съхраняване на предишни използвани въведени данни за бъдещи изпълнения" - } - }, - "changeCreds": { - "title": "Промяна на идентификационните данни", - "header": "Актуализирайте данните за акаунта си", - "changePassword": "Използвате идентификационни данни за вход по подразбиране. Моля, въведете нова парола", - "newUsername": "Ново потребителско име", - "oldPassword": "Текуща парола", - "newPassword": "Нова парола", - "confirmNewPassword": "Подтвърдете новата парола", - "submit": "Изпращане на промените" - }, - "account": { - "title": "Настройки на акаунта", - "accountSettings": "Настройки на акаунта", - "adminSettings": "Настройки на администратора - Преглед и добавяне на потребители", - "userControlSettings": "Настройки за потребителски контрол", - "changeUsername": "Промени потребител", - "newUsername": "Ново потребителско име", - "password": "Парола за потвърждение", - "oldPassword": "Стара парола", - "newPassword": "Нова парола", - "changePassword": "Промени паролата", - "confirmNewPassword": "Потвърдете новата парола", - "signOut": "Изход", - "yourApiKey": "Вашият API ключ", - "syncTitle": "Синхронизиране на настройките на браузъра с акаунта", - "settingsCompare": "Сравняване на настройките:", - "property": "Свойство", - "webBrowserSettings": "Уеб-браузър настройки", - "syncToBrowser": "Синхронизиране на акаунт -> Браузър", - "syncToAccount": "Синхронизиране на акаунт <- Браузър" - }, - "adminUserSettings": { - "title": "Настройки за потребителски контрол", - "header": "Настройки за администраторски потребителски контрол", - "admin": "Администратор", - "user": "Потребител", - "addUser": "Добавяне на нов потребител", - "deleteUser": "Изтриване на потребител", - "confirmDeleteUser": "Трябва ли потребителят да бъде изтрит?", - "confirmChangeUserStatus": "Трябва ли потребителят да бъде деактивиран/активиран?", - "usernameInfo": "Потребителското име може да съдържа само букви, цифри и следните специални символи @._+- или трябва да е валиден имейл адрес.", - "roles": "Роли", - "role": "Роля", - "actions": "Действия", - "apiUser": "Ограничен API потребител", - "extraApiUser": "Допълнителен ограничен API потребител", - "webOnlyUser": "Само за уеб-потребител", - "demoUser": "Демо потребител (без персонализирани настройки)", - "internalApiUser": "Вътрешен API потребител", - "forceChange": "Принудете потребителя да промени потребителското име/парола при влизане", - "submit": "Съхранете потребителя", - "changeUserRole": "Промяна на ролята на потребителя", - "authenticated": "Удостоверен", - "editOwnProfil": "Редактиране на собствен профил", - "enabledUser": "активиран потребител", - "disabledUser": "деактивиран потребител", - "activeUsers": "Активни потребители:", - "disabledUsers": "Деактивирани потребители:", - "totalUsers": "Общо потребители:", - "lastRequest": "Последна заявка", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Импорт/Експорт на база данни", - "header": "Импорт/Експорт на база данни", - "fileName": "Име на файл", - "creationDate": "Дата на създаване", - "fileSize": "Размер на файла", - "deleteBackupFile": "Изтриване на архивен файл", - "importBackupFile": "Импортиране на архивен файл", - "createBackupFile": "Създаване на файл с резервно копие", - "downloadBackupFile": "Изтеглете архивен файл", - "info_1": "Когато импортирате данни, е от решаващо значение да осигурите правилната структура. Ако не сте сигурни в това, което правите, потърсете съвет и подкрепа от професионалист. Грешка в структурата може да причини неизправност на приложението, включително пълна невъзможност за стартиране на приложението.", - "info_2": "Името на файла няма значение при качване. След това ще бъде преименуван, за да следва формата backup_user_yyyyMMddHHmm.sql, осигурявайки последователна конвенция за именуване.", - "submit": "Импортиране на резервно копие", - "importIntoDatabaseSuccessed": "Импортирането в базата данни бе успешно", - "backupCreated": "Успешно архивиране на базата данни", - "fileNotFound": "Файлът не е намерен", - "fileNullOrEmpty": "Файлът не трябва да е нулев или празен", - "failedImportFile": "Неуспешно импортиране на файл", - "notSupported": "Тази функция не е налична за вашата връзка с база данни." - }, - "session": { - "expired": "Вашата сесия е изтекла. Моля, опреснете страницата и опитайте отново.", - "refreshPage": "Презареждане на страницата" - }, - "home": { - "desc": "Вашето локално хоствано обслужване на едно място за всички ваши PDF нужди.", - "searchBar": "Търсене на функции...", - "viewPdf": { - "title": "Преглед/Редактиране PDF", - "desc": "Преглеждайте, коментирайте, добавяйте текст или изображения" - }, - "setFavorites": "Задаване на предпочитани", - "hideFavorites": "Скриване на предпочитани", - "showFavorites": "Покажи предпочитани", - "legacyHomepage": "Стара начална страница", - "newHomePage": "Опитайте новата ни начална страница!", - "alphabetical": "По азбучен ред", - "globalPopularity": "Световна популярност", - "sortBy": "Сортиране по:", - "multiTool": { - "title": "PDF Мулти инструмент", - "desc": "Обединяване, завъртане, пренареждане и премахване на страници" - }, - "merge": { - "title": "Обединяване", - "desc": "Лесно обединете множество PDF файлове в един." - }, - "split": { - "title": "Разделяне", - "desc": "Разделяне на PDF файлове на множество документи" - }, - "rotate": { - "title": "Завъртане", - "desc": "Лесно завъртете вашите PDF файлове." - }, - "imageToPdf": { - "title": "Изображение към PDF", - "desc": "Преобразуване на изображение (PNG, JPEG, GIF) към PDF." - }, - "pdfToImage": { - "title": "PDF към изображение", - "desc": "Преобразуване на PDF към изображение. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Организиране", - "desc": "Премахване/пренареждане на страници към произволен ред" - }, - "addImage": { - "title": "Добавяне на изображение", - "desc": "Добавя изображение към зададено място към PDF файла" - }, - "watermark": { - "title": "Добавяне на воден знак", - "desc": "Добавете персонализиран воден знак към вашия PDF документ." - }, - "permissions": { - "title": "Промяна на правата", - "desc": "Променете правата на вашия PDF документ" - }, - "removePages": { - "title": "Премахване", - "desc": "Изтрийте нежеланите страници от вашия PDF документ." - }, - "addPassword": { - "title": "Добавете парола", - "desc": "Шифровайте вашия PDF документ с парола." - }, - "removePassword": { - "title": "Премахване на парола", - "desc": "Премахнете защитата с парола от вашия PDF документ." - }, - "compressPdfs": { - "title": "Компресиране", - "desc": "Компресирайте PDF файлове, за да намалите размера на файла." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Промяна на метаданни", - "desc": "Промяна/Премахване/Добавяне на метаданни от PDF документ" - }, - "fileToPDF": { - "title": "Преобразуване на файл към PDF", - "desc": "Преобразуване почти всеки файл към PDF (DOCX, PNG, XLS, PPT, TXT и други)" - }, - "ocr": { - "title": "OCR / Почистващи сканирания", - "desc": "Почиства, сканира и открива текст от изображения в PDF и го добавя отново като текст." - }, - "extractImages": { - "title": "Извличане на изображения", - "desc": "Извлича всички изображения от PDF и ги записва към архив" - }, - "pdfToPDFA": { - "title": "PDF към PDF/A", - "desc": "Конвертирайте PDF към PDF/A за дългосрочно съхранение" - }, - "PDFToWord": { - "title": "PDF към Word", - "desc": "Преобразуване на PDF към Word формати (DOC, DOCX и ODT)" - }, - "PDFToPresentation": { - "title": "PDF към презентация", - "desc": "Преобразуване на PDF във формати за презентация (PPT, PPTX и ODP)" - }, - "PDFToText": { - "title": "PDF към RTF (Текст)", - "desc": "Преобразуване PDF към Text или RTF формат" - }, - "PDFToHTML": { - "title": "PDF към HTML", - "desc": "Преобразуване PDF към HTML формат" - }, - "PDFToXML": { - "title": "PDF към XML", - "desc": "Преобразуване на PDF към XML формат" - }, - "ScannerImageSplit": { - "title": "Откриване/Разделяне на сканирани снимки", - "desc": "Разделя множество снимки от една снимка/PDF" - }, - "sign": { - "title": "Подпишете", - "desc": "Добавя подпис към PDF чрез рисунка, текст или изображение" - }, - "flatten": { - "title": "Изравняване", - "desc": "Премахнете всички интерактивни елементи и формуляри от PDF" - }, - "repair": { - "title": "Поправи", - "desc": "Опитва се да поправи повреден PDF" - }, - "removeBlanks": { - "title": "Премахване на празни страници", - "desc": "Открива и премахва празни страници от документ" - }, - "removeAnnotations": { - "title": "Премахване на анотации", - "desc": "Премахва всички коментари/анотации от PDF" - }, - "compare": { - "title": "Сравнете", - "desc": "Сравнява и показва разликите между 2 PDF документа" - }, - "certSign": { - "title": "Подпишете със сертификат", - "desc": "Подписва PDF със сертификат/ключ (PEM/P12)" - }, - "removeCertSign": { - "title": "Премахване на знака за сертификат", - "desc": "Премахване на подпис на сертификат от PDF" - }, - "pageLayout": { - "title": "Оформление с няколко страници", - "desc": "Слейте няколко страници от PDF документ в една страница" - }, - "scalePages": { - "title": "Коригирайте размера/мащаба на страницата", - "desc": "Промяна на размера/мащаба на страница и/или нейното съдържание." - }, - "pipeline": { - "title": "Pipeline (Разширено)", - "desc": "Изпълнявайте множество действия върху PDF файлове чрез дефиниране на конвейерни скриптове" - }, - "add-page-numbers": { - "title": "Добавяне на номера на страници", - "desc": "Добавете номера на страници в документ на определено място" - }, - "auto-rename": { - "title": "Автоматично преименуване на PDF файл", - "desc": "Автоматично преименува PDF файл въз основа на откритата му заглавка" - }, - "adjust-contrast": { - "title": "Коригиране на цветове/контраст", - "desc": "Коригиране на контраста, наситеността и яркостта на PDF" - }, - "crop": { - "title": "Изрязване на PDF", - "desc": "Изрежете PDF, за да намалите размера му (поддържа текст!)" - }, - "autoSplitPDF": { - "title": "Автоматично разделяне на страници", - "desc": "Автоматично разделяне на сканиран PDF файл с QR код за разделяне на физически сканирани страници" - }, - "sanitizePdf": { - "title": "Обеззаразяване", - "desc": "Премахване на скриптове и други елементи от PDF файлове" - }, - "URLToPDF": { - "title": "URL/уеб-сайт към PDF", - "desc": "Преобразува всеки http(s) URL към PDF" - }, - "HTMLToPDF": { - "title": "HTML към PDF", - "desc": "Преобразува всеки HTML файл или архив към PDF" - }, - "MarkdownToPDF": { - "title": "Markdown към PDF", - "desc": "Преобразува всеки Markdown файл към PDF" - }, - "PDFToMarkdown": { - "title": "PDF към Markdown", - "desc": "Преобразува всеки PDF файл в Markdown" - }, - "getPdfInfo": { - "title": "Вземете ЦЯЛАТА информация от PDF", - "desc": "Взима всяка възможна информация от PDF файлове" - }, - "extractPage": { - "title": "Извличане на страница(и)", - "desc": "Извлича избрани страници от PDF" - }, - "PdfToSinglePage": { - "title": "PDF към една голяма страница", - "desc": "Обединява всички PDF страници в една голяма страница" - }, - "showJS": { - "title": "Показване на Javascript", - "desc": "Търси и показва всеки JS, инжектиран в PDF" - }, - "autoRedact": { - "title": "Автоматично редактиране", - "desc": "Автоматично редактира (зачернява) текст в PDF въз основа на въведен текст" - }, - "redact": { - "title": "Ръчно редактиране", - "desc": "Редактиране на PDF файл въз основа на избран текст, нарисувани форми и/или избрана страница(и)" - }, - "tableExtraxt": { - "title": "PDF към CSV", - "desc": "Извлича таблици от PDF, като ги конвертира в CSV" - }, - "autoSizeSplitPDF": { - "title": "Автоматично разделяне по размер/брой", - "desc": "Разделете един PDF на множество документи въз основа на размер, брой страници или брой документи" - }, - "overlay-pdfs": { - "title": "Наслагване PDF-и", - "desc": "Наслагва PDF файлове върху друг PDF" - }, - "split-by-sections": { - "title": "Разделяне на PDF по секции", - "desc": "Разделете всяка страница от PDF на по-малки хоризонтални и вертикални секции" - }, - "AddStampRequest": { - "title": "Добавяне на печат към PDF", - "desc": "Добавете текст или добавете печати с изображения на определени места" - }, - "removeImagePdf": { - "title": "Премахване на изображение", - "desc": "Премахнете изображението от PDF, за да намалите размера на файла" - }, - "splitPdfByChapters": { - "title": "Разделете PDF по глави", - "desc": "Разделете PDF на множество файлове въз основа на неговата структура на глави." - }, - "validateSignature": { - "title": "Валидиране на PDF подпис", - "desc": "Проверка на цифрови подписи и сертификати в PDF документи" - }, - "replaceColorPdf": { - "title": "Замяна и обръщане на цвят", - "desc": "Заменете цвета на текста и фона в PDF и обърнете пълния цвят на PDF, за да намалите размера на файла" - } - }, - "viewPdf": { - "tags": "преглед,четене,анотиране,текст,изображение", - "title": "Преглед/Редактиране на PDF", - "header": "Преглед на PDF" - }, - "multiTool": { - "tags": "Мултиинструмент,Мулти операции,UI,плъзгане с щракване,потребителска част,страна на клиента,интерактивен,неразрешим,преместване", - "title": "PDF Мулти инструмент", - "header": "PDF Мулти инструмент", - "uploadPrompts": "Име на файл", - "selectAll": "Изберете всички", - "deselectAll": "Отмяна на избора на всички", - "selectPages": "Избор на страница", - "selectedPages": "Избрани страници", - "page": "Страница", - "deleteSelected": "Изтриване на избраното", - "downloadAll": "Експорт", - "downloadSelected": "Избрано за експортиране", - "insertPageBreak": "Вмъкване на прекъсване на страница", - "addFile": "Добавяне на файл", - "rotateLeft": "Завъртете наляво", - "rotateRight": "Завъртете надясно", - "split": "Разделяне", - "moveLeft": "Преместване наляво", - "moveRight": "Преместване надясно", - "delete": "Изтрий", - "dragDropMessage": "Избран(и) страница(/и)", - "undo": "Отмяна на", - "redo": "Повтори" - }, - "merge": { - "tags": "сливане,операции на страници,администраторска зона,от страна на сървъра", - "title": "Обединяване", - "header": "Обединяване на множество PDF файлове (2+)", - "sortByName": "Сортиране по име", - "sortByDate": "Сортиране по дата", - "removeCertSign": "Премахване на цифровия подпис в обединения файл?", - "submit": "Обединяване" - }, - "split": { - "tags": "Операции на страницата,разделяне,Множество страници,изрязване,сървърна страна", - "title": "Разделяне на PDF", - "header": "Разделяне на PDF", - "desc": { - "1": "Числата, които избирате, са номера на страницата, на която искате да направите разделяне", - "2": "Така че избирането на 1,3,7-9 ще раздели документ от 10 страници на 6 отделни PDF файла с:", - "3": "Документ #1: Страница 1", - "4": "Документ #2: Страница 2 и 3", - "5": "Документ #3: Страница 4, 5, 6 и 7", - "6": "Документ #4: Страница 8", - "7": "Документ #5: Страница 9", - "8": "Документ #6: Страница 10" - }, - "splitPages": "Въведете страници за разделяне:", - "submit": "Разделяне" - }, - "rotate": { - "tags": "от страната на сървъра", - "title": "Завъртане на PDF", - "header": "Завъртане на PDF", - "selectAngle": "Изберете ъгъл на въртене (кратно на 90 градуса):", - "submit": "Завъртане" - }, - "imageToPdf": { - "tags": "преобразуване,img,jpg,изображение,снимка" - }, - "pdfToImage": { - "tags": "преобразуване,img,jpg,изображение,снимка", - "title": "PDF към Изображение", - "header": "PDF към Изображение", - "selectText": "Формат на изображението", - "singleOrMultiple": "Тип резултат от страница към изображение", - "single": "Единично голямо изображение комбиниране на всички страници", - "multi": "Множество изображения, по едно изображение на страница", - "colorType": "Тип цвят", - "color": "Цвят", - "grey": "Скала на сивото", - "blackwhite": "Черно и бяло (може да загубите данни!)", - "submit": "Преобразуване", - "info": "Python не е инсталиран. Изисква се за конвертиране на WebP.", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "pdfOrganiser": { - "tags": "дуплекс,четно,нечетно,сортиране,преместване", - "title": "Организатор на страници", - "header": "Организатор на PDF страници", - "submit": "Пренареждане на страниците", - "mode": { - "_value": "Режим", - "1": "Персонализиран ред на страниците", - "2": "Обърнат ред", - "3": "Двустранно сортиране", - "4": "Сортиране на брошури", - "5": "Сортиране на брошури със страничен шев", - "6": "Четно-нечетно разделяне", - "7": "Премахни първо", - "8": "Премахване на последния", - "9": "Премахване на първия и последния", - "10": "Обединяване на четно и нечетно", - "11": "Дублиране на всички страници" - }, - "placeholder": "(напр. 1,3,2 или 4-8,2,10-12 или 2n-1)" - }, - "addImage": { - "tags": "img,jpg,изображение,снимка", - "title": "Добавяне на изображение", - "header": "Добавяне на изображение към PDF", - "everyPage": "Всяка страница?", - "upload": "Добавяне на изображение", - "submit": "Добавяне на изображение" - }, - "watermark": { - "tags": "Текст,повтарящ се,етикет,собствено,авторско право,търговска марка,img,jpg,изображение,снимка", - "title": "Добавяне на воден знак", - "header": "Добавяне на воден знак", - "customColor": "Персонализиран цвят на текста", - "selectText": { - "1": "Изберете PDF, към който да добавите воден знак:", - "2": "Текст на воден знак:", - "3": "Размер на шрифта:", - "4": "Завъртане (0-360):", - "5": "ширинаSpacer (Разстояние между всеки воден знак хоризонтално):", - "6": "дължинаSpacer (Разстояние между всеки воден знак вертикално):", - "7": "Непрозрачност (0% - 100%):", - "8": "Тип воден знак:", - "9": "Изображение за воден знак:", - "10": "Конвертирайте PDF в PDF-изображение" - }, - "submit": "Добавяне на воден знак", - "type": { - "1": "Текст", - "2": "Изображение" - } - }, - "permissions": { - "tags": "четене,писане,редактиране,печат", - "title": "Промяна на правата", - "header": "Промени правата", - "warning": "Предупреждение, че тези разрешения са непроменими, препоръчва се да ги зададете с парола чрез страницата за добавяне на парола", - "selectText": { - "1": "Изберете PDF, за да промените правата", - "2": "Разрешения за задаване", - "3": "Предотвратяване на сглобяването на документ", - "4": "Предотвратете извличането на съдържание", - "5": "Предотвратете извличането за достъпност", - "6": "Предотвратяване на попълване на формуляр", - "7": "Предотвратяване на модификация", - "8": "Предотвратяване на модификация на анотация", - "9": "Предотвратявам на отпечатването", - "10": "Предотвратете отпечатването на различни формати" - }, - "submit": "Промени" - }, - "removePages": { - "tags": "Премахване на страници,изтриване на страници" - }, - "addPassword": { - "tags": "сигурен,сигурност", - "title": "Добавяне на парола", - "header": "Добавяне на парола (Шифроване)", - "selectText": { - "1": "Изберете PDF, който да шифровате", - "2": "Потребителска парола", - "3": "Предотвратяване на сглобяването на документ", - "4": "По-високите стойности са по-силни, но по-ниските стойности имат по-добра съвместимост.", - "5": "Разрешения за задаване (препоръчва се да се използва заедно с паролата на собственика)", - "6": "Предотвратяване на сглобяването на документ", - "7": "Предотвратете извличането на съдържание", - "8": "Предотвратете извличането за достъпност", - "9": "Предотвратяване на попълване на формуляр", - "10": "Предотвратяване на промени", - "11": "Предотвратяване на промени на анотация", - "12": "Предотвратяване на печат", - "13": "Предотвратете отпечатването в различни формати", - "14": "Парола на собственика", - "15": "Ограничава какво може да се прави с документа, след като бъде отворен (не се поддържа от всички четци)", - "16": "Ограничава отварянето на самия документ" - }, - "submit": "Шифроване" - }, - "removePassword": { - "tags": "сигурно,декриптиране,сигурност,отмяна на парола,изтриване на парола", - "title": "Премахване на паролата", - "header": "Премахване на паролата (Декриптиране)", - "selectText": { - "1": "Изберете PDF за Декриптиране", - "2": "Парола" - }, - "submit": "Премахване" - }, - "compressPdfs": { - "tags": "мачкам,малък,мъничък" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Заглавие,автор,дата,създаване,час,издател,продуцент,статистика", - "title": "Заглавие:", - "header": "Промени метаданните", - "selectText": { - "1": "Моля, редактирайте променливите, които искате да промените", - "2": "Изтрий всички метаданни", - "3": "Покажи персонализирани метаданни:", - "4": "Други метаданни:", - "5": "Добавяне на персонализиране метаданни" - }, - "author": "Автор:", - "creationDate": "Дата на създаване (гггг/ММ/дд ЧЧ:мм:сс):", - "creator": "Създател:", - "keywords": "Ключови думи:", - "modDate": "Дата на промяна (гггг/ММ/дд ЧЧ:мм:сс):", - "producer": "Продуцент:", - "subject": "Тема:", - "trapped": "В капан:", - "submit": "Промени" - }, - "fileToPDF": { - "tags": "трансформация,формат,документ,изображение,слайд,текст,преобразуване,офис,документи,word,excel,powerpoint", - "title": "Файл към PDF", - "header": "Конвертирайте всеки файл към PDF", - "credit": "Тази услуга използва LibreOffice и Unoconv за преобразуване на файлове.", - "supportedFileTypesInfo": "Поддържание файлови типове", - "supportedFileTypes": "Поддържаните типове файлове трябва да включват по-долу, но за пълен актуализиран списък на поддържаните формати, моля, вижте документацията на LibreOffice", - "submit": "Преобразуване към PDF" - }, - "ocr": { - "tags": "разпознаване,текст,изображение,сканиране,четене,идентифициране,откриване,редактиране", - "title": "OCR / Почистване на сканиране", - "header": "Почистващи сканирания / OCR (оптично разпознаване на знаци)", - "selectText": { - "1": "Изберете езици, които да бъдат открити в рамките на PDF (изброените са откритите към момента):", - "2": "Създаване на текстов файл, съдържащ OCR текст заедно с OCR PDF", - "3": "Правилните страници бяха сканирани под изкривен ъгъл чрез завъртането им обратно на мястото им", - "4": "Чиста страница, така че е по-малко вероятно OCR да намери текст във фонов шум. (Без промяна на изхода)", - "5": "Чиста страница, така че е по-малко вероятно OCR да намери текст във фонов шум, поддържа почистване към изхода.", - "6": "Игнорира страници, които имат интерактивен текст, само OCR страници, които са изображения", - "7": "Принудително OCR, ще премахва чрез OCR на всяка страница всички оригинални текстови елементи", - "8": "Нормално (Ще има грешка, ако PDF съдържа текст)", - "9": "Допълнителни настройки", - "10": "OCR режим", - "11": "Премахване на изображения след OCR (Премахва ВСИЧКИ изображения, полезно само ако е част от стъпката на преобразуване)", - "12": "Тип изобразяване (Разширен)" - }, - "help": "Моля, прочетете тази документация за това как да използвате това за други езици и/или да не използвате в docker", - "credit": "Тази услуга използва qpdf и Tesseract за OCR.", - "submit": "Обработка на PDF чрез OCR" - }, - "extractImages": { - "tags": "изображение,снимка,запазване,архивиране,архив,заснемане,грабване", - "title": "Извличане на изображения", - "header": "Извличане на изображения", - "selectText": "Изберете формат на изображението, в който да преобразувате извлечените изображения", - "allowDuplicates": "Запазване на дублирани изображения", - "submit": "Извличане" - }, - "pdfToPDFA": { - "tags": "архив,дълготраен,стандартен,преобразуване,съхранение,консервиране", - "title": "PDF към PDF/A", - "header": "PDF към PDF/A", - "credit": "Тази услуга използва libreoffice за PDF/A преобразуване.", - "submit": "Преобразуване", - "tip": "В момента не работи за няколко входа наведнъж", - "outputFormat": "Изходен формат", - "pdfWithDigitalSignature": "PDF файлът съдържа цифров подпис. Това ще бъде премахнато в следващата стъпка." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,трансформация,формат,преобразуване,офис,microsoft,docfile", - "title": "PDF към Word", - "header": "PDF към Word", - "selectText": { - "1": "Изходен файлов формат" - }, - "credit": "Тази услуга използва LibreOffice за преобразуване на файлове.", - "submit": "Преобразуване" - }, - "PDFToPresentation": { - "tags": "слайдове,покажи,офис,microsoft", - "title": "PDF към Презентация", - "header": "PDF към Презентация", - "selectText": { - "1": "Изходен файлов формат" - }, - "credit": "Тази услуга използва LibreOffice за преобразуване на файлове.", - "submit": "Преобразуване" - }, - "PDFToText": { - "tags": "richformat,richtextformat,богат текстов формат", - "title": "PDF към RTF (Текст)", - "header": "PDF към RTF (Текст)", - "selectText": { - "1": "Изходен файлов формат" - }, - "credit": "Тази услуга използва LibreOffice за преобразуване на файлове.", - "submit": "Преобразуване" - }, - "PDFToHTML": { - "tags": "уеб-съдържание,удобен за браузър", - "title": "PDF към HTML", - "header": "PDF към HTML", - "credit": "Тази услуга използва pdftohtml за преобразуване на файлове.", - "submit": "Преобразуване" - }, - "PDFToXML": { - "tags": "извличане на данни,структурирано съдържание,взаимодействие,трансформация,преобразуване", - "title": "PDF към XML", - "header": "PDF към XML", - "credit": "Тази услуга използва LibreOffice за преобразуване на файлове.", - "submit": "Преобразуване" - }, - "ScannerImageSplit": { - "tags": "разделяне,автоматично откриване,сканиране,много снимки,организиране", - "selectText": { - "1": "Праг на ъгъла:", - "2": "Задава минималния абсолютен ъгъл, необходим за завъртане на изображението (по подразбиране: 10).", - "3": "Толеранс:", - "4": "Определя обхвата на цветовата вариация около предполагаемия фонов цвят (по подразбиране: 30).", - "5": "Минимална площ:", - "6": "Задава минималния праг на площ за изображение (по подразбиране: 10000).", - "7": "Минимална контурна площ:", - "8": "Задава минималния праг на контурната площ за изображение", - "9": "Размер на рамката:", - "10": "Задава размера на добавената и премахната граница, за да предотврати бели граници към изхода (по подразбиране: 1)." - }, - "info": "Python не е инсталиран. Изисква се да се изпълнява." - }, - "sign": { - "tags": "упълномощаване,инициали,нарисуван-подпис,текстов-знак,изображение-подпис", - "title": "Подпишете", - "header": "Подпишете PDF-и", - "upload": "Качи изображение", - "draw": "Начертайте подпис", - "text": "Въвеждане на текст", - "clear": "Изчисти", - "add": "Добави", - "saved": "Съхранени подписи", - "save": "Запазване на подпис", - "personalSigs": "Лични подписи", - "sharedSigs": "Споделени подписи", - "noSavedSigs": "Не са намерени запазени подписи", - "addToAll": "Дибави към всички страници", - "delete": "Изтрий", - "first": "Първа страница", - "last": "Последна страница", - "next": "Следваща страница", - "previous": "Предишна стараница", - "maintainRatio": "Превключване за поддържане на съотношението на страните", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "статичен,деактивиран,неинтерактивен,рационализиран", - "title": "Изравнете", - "header": "Изравнете PDF-и", - "flattenOnlyForms": "Изравнете само форми", - "submit": "Изравнете" - }, - "repair": { - "tags": "поправка,възстановяване,корекция,възстановяване", - "title": "Поправи", - "header": "Поправи PDF-и", - "submit": "Поправи" - }, - "removeBlanks": { - "tags": "почистване,рационализиране,без съдържание,организиране", - "title": "Премахване на празни места", - "header": "Премахване на празни страници", - "threshold": "Праг на белота на пикселите:", - "thresholdDesc": "Праг за определяне колко бял трябва да бъде един бял пиксел, за да бъде класифициран като 'бял'. 0 = черно, 255 чисто бяло.", - "whitePercent": "Процент бяло (%):", - "whitePercentDesc": "Процент от страницата, която трябва да бъде в 'бели' пиксели, които да бъдат премахнати", - "submit": "Премахване на празни места" - }, - "removeAnnotations": { - "tags": "коментари, маркиране, бележки, маркиране, премахване", - "title": "Премахване на анотации", - "header": "Премахване на анотации", - "submit": "Премахване" - }, - "compare": { - "tags": "разграничаване,контраст,промени,анализ", - "title": "Сравнявай", - "header": "Сравнявай PDF-и", - "highlightColor": { - "1": "Цвят на маркирането 1:", - "2": "Цвят на маркирането 2:" - }, - "document": { - "1": "Документ 1", - "2": "Документ 2" - }, - "submit": "Сравнявай", - "complex": { - "message": "Един или и двата предоставени документа са големи файлове, точността на сравнението може да бъде намалена." - }, - "large": { - "file": { - "message": "Един или и двата предоставени документа са твърде големи за обработка" - } - }, - "no": { - "text": { - "message": "Един или и двата избрани PDF файла нямат текстово съдържание. Моля, изберете PDF файлове с текст за сравнение." - } - } - }, - "certSign": { - "tags": "удостоверяване,PEM,P12,официален,шифроване", - "title": "Подписване със сертификат", - "header": "Подпишете PDF с вашия сертификат (В процес на работа)", - "selectPDF": "Изберете PDF файл за подписване:", - "jksNote": "Забележка: Ако вашият тип сертификат не е в списъка по-долу, моля, конвертирайте го във файл на Java Keystore (.jks) с помощта на инструмента за команден ред keytool. След това изберете опцията за .jks файл по-долу.", - "selectKey": "Изберете вашия файл с личен ключ (формат PKCS#8, може да бъде .pem или .der):", - "selectCert": "Изберете вашия файл със сертификат (формат X.509, може да бъде .pem или .der):", - "selectP12": "Изберете вашия PKCS#12 Keystore файл (.p12 или .pfx) (По избор, ако е предоставен, трябва да съдържа вашия личен ключ и сертификат):", - "selectJKS": "Изберете Вашия Java Keystore Файл (.jks или .keystore):", - "certType": "Тип сертификат", - "password": "Въведете вашата парола за Keystore за ключове или частен ключ (ако има):", - "showSig": "Показване на подпис", - "reason": "Причина", - "location": "Местоположение", - "name": "Име", - "showLogo": "Покажи лого", - "submit": "Подпишете PDF" - }, - "removeCertSign": { - "tags": "удостоверяване,PEM,P12,официален,декриптиране", - "title": "Премахване на подписа на сертификата", - "header": "Премахнете цифровия сертификат от PDF", - "selectPDF": "Изберете PDF файл:", - "submit": "Премахване на подпис" - }, - "pageLayout": { - "tags": "сливане,комбиниран,единичен изглед,организиране", - "title": "Многостранично оформление", - "header": "Оформление на няколко страници", - "pagesPerSheet": "Страници на лист:", - "addBorder": "Добавяне на граници", - "submit": "Подайте" - }, - "scalePages": { - "tags": "преоразмеряване,промяна,размер,адаптиране", - "title": "Коригиране на мащаба на страницата", - "header": "Коригиране на мащаба на страницата", - "pageSize": "Размер на страница от документа.", - "keepPageSize": "Оригинален размер", - "scaleFactor": "Ниво на мащабиране (изрязване) на страница.", - "submit": "Подайте" - }, - "add-page-numbers": { - "tags": "страничен, етикетиране, организиране, индексиране" - }, - "auto-rename": { - "tags": "автоматично откриване,базирано на заглавка,организиране,преетикетиране", - "title": "Автоматично преименуване", - "header": "Автоматично преименуване на PDF", - "submit": "Автоматично преименуване" - }, - "adjust-contrast": { - "tags": "корекция на цвета,настройте,модифицирайте,подобрете" - }, - "crop": { - "tags": "изрязване,свиване,редактиране,оформяне", - "title": "Изрязване", - "header": "Изрязване на PDF", - "submit": "Подайте" - }, - "autoSplitPDF": { - "tags": "QR-базиран,отделен,сканиране-сегмент,организиране", - "title": "Автоматично разделяне на PDF", - "header": "Автоматично разделяне на PDF", - "description": "Печатайте, вмъквайте, сканирайте, качвайте и ни позволете да разделим автоматично вашите документи. Не е необходимо ръчно сортиране.", - "selectText": { - "1": "Отпечатайте някои разделителни листове отдолу (Черно-бялото е добре).", - "2": "Сканирайте всичките си документи наведнъж, като поставите разделителния лист между тях.", - "3": "Качете единствения голям сканиран PDF файл и оставете Stirling PDF да се справи с останалото.", - "4": "Разделителните страници се откриват и премахват автоматично, което гарантира чист краен документ." - }, - "formPrompt": "Изпратете PDF, съдържащ разделители на страници на Stirling-PDF:", - "duplexMode": "Дуплексен режим (сканиране отпред и отзад)", - "dividerDownload2": "Изтеглете 'Автоматичен сплитер разделител (с инструкции).pdf'", - "submit": "Подайте" - }, - "sanitizePdf": { - "tags": "чисти,сигурни,безопасни,премахване-заплахи" - }, - "URLToPDF": { - "tags": "уеб-заснемане,запазване на страница,уеб към документ,архив", - "title": "URL към PDF", - "header": "URL към PDF", - "submit": "Преобразуване", - "credit": "Използва WeasyPrint" - }, - "HTMLToPDF": { - "tags": "маркиране,уеб-съдържание,трансформация,преобразуване", - "title": "HTML към PDF", - "header": "HTML към PDF", - "help": "Приемане на HTML файлове и ZIP файлове, съдържащи html/css/изображения и т.н.", - "submit": "Преобразуване", - "credit": "Използва WeasyPrint", - "zoom": "Ниво на мащабиране за показване на уебсайта.", - "pageWidth": "Ширина на страницата в сантиметри. (Празно по подразбиране)", - "pageHeight": "Височина на страницата в сантиметри. (Празно по подразбиране)", - "marginTop": "Горно поле на страницата в милиметри. (Празно по подразбиране)", - "marginBottom": "Долно поле на страницата в милиметри. (Празно по подразбиране)", - "marginLeft": "Ляво поле на страницата в милиметри. (Празно по подразбиране)", - "marginRight": "Дясно поле на страницата в милиметри. (Празно по подразбиране)", - "printBackground": "Изобразете фона на уебсайтове.", - "defaultHeader": "Активиране на горния колонтитул по подразбиране (име и номер на страница)", - "cssMediaType": "Променете CSS медийния тип на страницата.", - "none": "Няма", - "print": "Печат", - "screen": "Екран" - }, - "MarkdownToPDF": { - "tags": "маркиране,уеб-съдържание,трансформация,преобразуване", - "title": "Markdown към PDF", - "header": "Markdown към PDF", - "submit": "Преобразуване", - "help": "Работата е в ход", - "credit": "Използва WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "маркиране, уеб-съдържание, трансформация, конвертиране, MD", - "title": "PDF към Markdown", - "header": "PDF към Markdown", - "submit": "Преобразуване" - }, - "getPdfInfo": { - "tags": "информация,данни,статистики,статистика", - "title": "Вземете информация за PDF", - "header": "Вземете информация за PDF", - "submit": "Вземете информация", - "downloadJson": "Изтеглете JSON" - }, - "extractPage": { - "tags": "извличане" - }, - "PdfToSinglePage": { - "tags": "единична страница" - }, - "showJS": { - "tags": "JS", - "title": "Покажи Javascript", - "header": "Покажи Javascript", - "downloadJS": "Изтегли Javascript", - "submit": "Покажи" - }, - "autoRedact": { - "tags": "Редактиране,Скриване,затъмняване,черен,маркер,скрит", - "title": "Автоматично редактиране", - "header": "Автоматично редактиране", - "colorLabel": "Цвят", - "textsToRedactLabel": "Текст за редактиране (разделен с редове)", - "textsToRedactPlaceholder": "например: \\nПоверително \\nСтрого секретно", - "useRegexLabel": "Използване на Regex", - "wholeWordSearchLabel": "Търсене на цялата дума", - "customPaddingLabel": "Персонализирана допълнителна подложка", - "convertPDFToImageLabel": "Преобразуване на PDF към PDF-изображение (използва се за премахване на текст зад полето)", - "submitButton": "Изпращане" - }, - "redact": { - "tags": "Редактиране, скриване, затъмнение, черно, маркер, скрито, ръчно", - "title": "Ръчно редактиране", - "header": "Ръчно редактиране", - "submit": "Редактиране", - "textBasedRedaction": "Редактиране на базата на текст", - "pageBasedRedaction": "Редактиране на базата на страници", - "convertPDFToImageLabel": "Конвертиране на PDF в PDF-изображение (използва се за премахване на текста зад полето)", - "pageRedactionNumbers": { - "title": "Страници", - "placeholder": "(напр. 1,2,8 или 4,7,12-16 или 2n-1)" - }, - "redactionColor": { - "title": "Цвят на редактиране" - }, - "export": "Експорт", - "upload": "Качване", - "boxRedaction": "Редактиране на рисунката в квадратчето", - "zoom": "Увеличаване", - "zoomIn": "Увеличаване на мащаба", - "zoomOut": "Намаляване на мащаба", - "nextPage": "Следваща страница", - "previousPage": "Предишна страница", - "toggleSidebar": "Превключване на страничната лента", - "showThumbnails": "Показване на миниатюри", - "showDocumentOutline": "Показване на контура на документа (кликнете два пъти, за да разгънете/свиете всички елементи)", - "showAttatchments": "Показване на прикачени файлове", - "showLayers": "Показване на слоеве (щракнете два пъти, за да върнете всички слоеве в състояние по подразбиране)", - "colourPicker": "Избор на цвят", - "findCurrentOutlineItem": "Намиране на текущия елемент от контура", - "applyChanges": "Прилагане на промените" - }, - "tableExtraxt": { - "tags": "CSV,извличане на таблица,извличане,конвертиране" - }, - "autoSizeSplitPDF": { - "tags": "pdf,разделяне,документ,организация" - }, - "overlay-pdfs": { - "tags": "Наслагване", - "header": "Наслагване на PDF файлове", - "baseFile": { - "label": "Изберете Основен PDF файл" - }, - "overlayFiles": { - "label": "Изберете наслагване на PDF файлове" - }, - "mode": { - "label": "Изберете режим на наслагване", - "sequential": "Последователно наслагване", - "interleaved": "Преплетено наслагване", - "fixedRepeat": "Фиксирано наслагване при повторение" - }, - "counts": { - "label": "Брой наслагвания (за режим на фиксирано повторение)", - "placeholder": "Въведете броя, разделени със запетая (напр. 2,3,1)" - }, - "position": { - "label": "Изберете позиция на наслагване", - "foreground": "Преден план", - "background": "Фон" - }, - "submit": "Изпращане" - }, - "split-by-sections": { - "tags": "Разделяне на секция,Разделяне,Персонализиране", - "title": "Разделяне на PDF по секции", - "header": "Разделяне на PDF на секции", - "horizontal": { - "label": "Хоризонтални разделения", - "placeholder": "Въведете брой хоризонтални деления" - }, - "vertical": { - "label": "Вертикални разделения", - "placeholder": "Въведете брой вертикални деления" - }, - "submit": "Разделяне на PDF", - "merge": "Сливане в един PDF" - }, - "AddStampRequest": { - "tags": "Печат,добавяне на изображение,централно изображение,воден знак,PDF,вграждане,персонализиране", - "header": "Поставяне на печат на PDF", - "title": "Поставяне на печат на PDF", - "stampType": "Тип печат", - "stampText": "Поставяне на текст", - "stampImage": "Изображение с печат", - "alphabet": "Азбука", - "fontSize": "Размер на шрифта/изображението", - "rotation": "Ротация", - "opacity": "Непрозрачност", - "position": "Позиция", - "overrideX": "Замяна на X координата", - "overrideY": "Замяна на Y координата", - "customMargin": "Персонализиран марж", - "customColor": "Персонализиран цвят на текста", - "submit": "Изпращане" - }, - "removeImagePdf": { - "tags": "Премахване на изображение, операции на страници, админ страна, страна на сървъра" - }, - "splitPdfByChapters": { - "tags": "разделяне, глави, отметки, организиране" - }, - "validateSignature": { - "tags": "подпис,проверка,валидиране,pdf,сертификат,цифров подпис,валидиране на подпис,валидиране на сертификат", - "title": "Удостоверяване на PDF подписи", - "header": "Потвърждаване на цифрови подписи", - "selectPDF": "Изберете подписания PDF файл", - "submit": "Потвърждаване на подписите", - "results": "Резултати от валидирането", - "status": { - "_value": "Статус", - "valid": "Валиден", - "invalid": "Невалиден" - }, - "signer": "Подписващ", - "date": "Дата", - "reason": "Причина", - "location": "Местоположение", - "noSignatures": "В този документ не са открити цифрови подписи", - "chain": { - "invalid": "Удостоверяването на веригата на сертификата е неуспешно - не може да се провери самоличността на подписващия" - }, - "trust": { - "invalid": "Сертификатът не е в хранилището за доверие - източникът не може да бъде проверен" - }, - "cert": { - "expired": "Сертификатът е изтекъл", - "revoked": "Сертификатът е отменен", - "info": "Подробности за сертификата", - "issuer": "Издател", - "subject": "Тема", - "serialNumber": "Сериен номер", - "validFrom": "Валиден от", - "validUntil": "Валиден до", - "algorithm": "Алгоритъм", - "keySize": "Размер на ключ", - "version": "Версия", - "keyUsage": "Предназначение на ключа за използване", - "selfSigned": "Самостоятелно подписан", - "bits": "битове" - }, - "signature": { - "info": "Информация за подписа", - "_value": "Подпис", - "mathValid": "Подписът е математически валиден, НО:" - }, - "selectCustomCert": "Файл със сертификат X.509 по поръчка (по избор)" - }, - "replace-color": { - "title": "Замени-инвертиране-на-цвят", - "header": "Замяна-инвертиране на цвят PDF", - "selectText": { - "1": "Опции за замяна или инвертиране на цвят", - "2": "По подразбиране (цветове с висок контраст по подразбиране)", - "3": "По избор (персонализирани цветове)", - "4": "Пълно инвертиране (Инвертиране на всички цветове)", - "5": "Цветови опции с висок контраст", - "6": "Бял текст на черен фон", - "7": "Черен текст на бял фон", - "8": "Жълт текст на черен фон", - "9": "Зелен текст на черен фон", - "10": "Изберете цвят на текста", - "11": "Изберете цвят на фона" - }, - "submit": "Замени" - }, - "replaceColorPdf": { - "tags": "Замяна на цвят, операции на страници, заден край, страна на сървъра" - }, - "login": { - "title": "Вход", - "header": "Вход", - "signin": "Впишете се", - "rememberme": "Запомни ме", - "invalid": "Невалидно потребителско име или парола.", - "locked": "Вашият акаунт е заключен.", - "signinTitle": "Моля впишете се", - "ssoSignIn": "Влизане чрез еднократно влизане", - "oAuth2AutoCreateDisabled": "OAUTH2 Автоматично създаване на потребител е деактивирано", - "oAuth2AdminBlockedUser": "Регистрацията или влизането на нерегистрирани потребители в момента е блокирано. Моля, свържете се с администратора.", - "oauth2RequestNotFound": "Заявката за оторизация не е намерена", - "oauth2InvalidUserInfoResponse": "Невалидна информация за потребителя", - "oauth2invalidRequest": "Невалидна заявка", - "oauth2AccessDenied": "Отказан достъп", - "oauth2InvalidTokenResponse": "Невалиден отговор на токена", - "oauth2InvalidIdToken": "Невалиден токен за идентификатор", - "relyingPartyRegistrationNotFound": "Не е открита регистрация на доверяваща се страна", - "userIsDisabled": "Потребителят е деактивиран, влизането в момента е блокирано с това потребителско име. Моля, свържете се с администратора.", - "alreadyLoggedIn": "Вече сте влезли в", - "alreadyLoggedIn2": "устройства. Моля, излезте от устройствата и опитайте отново.", - "toManySessions": "Имате твърде много активни сесии", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF към единична страница", - "header": "PDF към единична страница", - "submit": "Преобразуване към единична страница" - }, - "pageExtracter": { - "title": "Извличане на страници", - "header": "Извличане на страници", - "submit": "Извличане", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "sanitizePDF": { - "title": "Дезинфектирай PDF", - "header": "Дезинфектира PDF файл", - "selectText": { - "1": "Премахва JavaScript действия", - "2": "Премахва вградени файлове", - "3": "Remove XMP metadata", - "4": "Премахва линкове", - "5": "Премахва шрифтове", - "6": "Remove Document Info Metadata" - }, - "submit": "Дезинфектирай PDF" - }, - "adjustContrast": { - "title": "Настройка на контраста", - "header": "Коригиране на контраста", - "contrast": "Контраст:", - "brightness": "Яркост:", - "saturation": "Наситеност:", - "download": "Изтегли" - }, - "compress": { - "title": "Компресиране", - "header": "Компресиране на PDF", - "credit": "Тази услуга използва qpdf за PDF компресиране/оптимизиране.", - "grayscale": { - "label": "Приложи сива скала за компресиране" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Ниво на оптимизация:", - "4": "Автоматичен режим - Автоматично настройва качеството, за да получи PDF с точен размер", - "5": "Очакван PDF размер (напр. 25МБ, 10.8МБ, 25КБ)" - }, - "submit": "Компресиране" - }, - "decrypt": { - "passwordPrompt": "Този файл е защитен с парола. Моля, въведете паролата:", - "cancelled": "Операцията за PDF е отменена: {0}", - "noPassword": "Не е предоставена парола за шифрирания PDF: {0}", - "invalidPassword": "Моля, опитайте отново с правилната парола.", - "invalidPasswordHeader": "Неправилна парола или неподдържано криптиране за PDF: {0}", - "unexpectedError": "Възникна грешка при обработката на файла. Моля, опитайте отново.", - "serverError": "Грешка в работата на сървъра повреме на дешифриране: {0}", - "success": "Файлът е успешно дешифриран." - }, - "multiTool-advert": { - "message": "Тази функция е налична и в нашата страница с множество инструменти. Проверете го за подобрен потребителски интерфейс страница по страница и допълнителни функции!" - }, - "pageRemover": { - "title": "Премахване на страници", - "header": "Премахване на PDF страници", - "pagesToDelete": "Страници за изтриване (Въведете списък с номера на страници, разделени със запетая) :", - "submit": "Изтриване на страници", - "placeholder": "(e.g. 1,2,6 or 1-10,15-30)" - }, - "imageToPDF": { - "title": "Изображение към PDF", - "header": "Изображение към PDF", - "submit": "Преобразуване", - "selectLabel": "Опции за прилягане на изображението", - "fillPage": "Попълване на страница", - "fitDocumentToImage": "Побиране на страницата в изображението", - "maintainAspectRatio": "Поддържане на пропорции", - "selectText": { - "2": "Автоматично завъртане на PDF", - "3": "Файлова логика с много (Активирано само ако работите с множество изображения)", - "4": "Сливане към един PDF", - "5": "Преобразуване към отделни PDF файлове" - } - }, - "PDFToCSV": { - "title": "PDF към CSV", - "header": "PDF към CSV", - "prompt": "Изберете страница за извличане на таблица", - "submit": "Преобразуване" - }, - "split-by-size-or-count": { - "title": "Разделяне на PDF по размер или брой", - "header": "Разделяне на PDF по размер или брой", - "type": { - "label": "Изберете тип разделяне", - "size": "По размер", - "pageCount": "По брой страници", - "docCount": "По брой документи" - }, - "value": { - "label": "Въведете стойност", - "placeholder": "Въведете размер (напр. 2МБ или 3КБ) или брой (напр. 5)" - }, - "submit": "Изпращане" - }, - "printFile": { - "title": "Печат на файл", - "header": "Печат на файл на принтер", - "selectText": { - "1": "Изберете файл за печат", - "2": "Въведете име на принтер" - }, - "submit": "Печат" - }, - "licenses": { - "nav": "Лицензи", - "title": "Лицензи на трети страни", - "header": "Лицензи на трети страни", - "module": "Модул", - "version": "Версия", - "license": "Лиценз" - }, - "survey": { - "nav": "Анкета", - "title": "Stirling-PDF Анкета", - "description": "Stirling-PDF няма проследяване, така че искаме да чуем мнението на нашите потребители за подобряване на Stirling-PDF!", - "changes": "Stirling-PDF се промени от последното проучване! За да научите повече, моля, проверете публикацията в нашия блог тук:", - "changes2": "С тези промени получаваме платена бизнес подкрепа и финансиране", - "please": "Моля, помислете дали да не участвате в нашата анкета!", - "disabled": "(Изскачащият прозорец с анкетата ще бъде деактивиран при следващите актуализации, но ще бъде наличен в долната част на страницата)", - "button": "Участвайте в анкетата", - "dontShowAgain": "Не показвай повече", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Премахване на изображението", - "header": "Премахване на изображението", - "removeImage": "Премахване на изображението", - "submit": "Премахване на изображението" - }, - "splitByChapters": { - "title": "Разделете PDF по глави", - "header": "Разделете PDF по глави", - "bookmarkLevel": "Ниво на отметка", - "includeMetadata": "Включете метаданни", - "allowDuplicates": "Разрешаване на дубликати", - "desc": { - "1": "Този инструмент разделя PDF файл на множество PDF файлове въз основа на неговата структура на глави.", - "2": "Ниво на отметка: Изберете нивото на отметките, които да използвате за разделяне (0 за най-високо ниво, 1 за второ ниво и т.н.).", - "3": "Включване на метаданни: Ако е отметнато, метаданните на оригиналния PDF ще бъдат включени във всеки разделен PDF.", - "4": "Разрешаване на дубликати: Ако е отметнато, позволява множество отметки на една и съща страница за създаване на отделни PDF файлове." - }, - "submit": "Разделяне на PDF" - }, - "fileChooser": { - "click": "Щракнете", - "or": "или", - "dragAndDrop": "Влачете и пуснете", - "dragAndDropPDF": "Влачете и пуснете PDF файл", - "dragAndDropImage": "Влачете и пуснете изображение", - "hoveredDragAndDrop": "Влачете и пуснете файл(ове) тук", - "extractPDF": "Извличане..." - }, - "releases": { - "footer": "Версии", - "title": "Бележки към версиите", - "header": "Бележки към версиите", - "current": { - "version": "Текуща версия" - }, - "note": "Бележките към изданието са налични само на английски език" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/ca-CA/translation.json b/frontend/dist/locales/ca-CA/translation.json deleted file mode 100644 index da8236b95..000000000 --- a/frontend/dist/locales/ca-CA/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Mida del tipus de lletra", - "fontName": "Nom del tipus de lletra", - "title": "Afegir Números de Pàgina", - "header": "Afegir Números de Pàgina", - "selectText": { - "1": "Selecciona PDF:", - "2": "Mida del Marge", - "3": "Posició", - "4": "Número Inicial", - "5": "Pàgines a Enumerar", - "6": "Text Personalitzat" - }, - "customTextDesc": "Text Personalitzat", - "numberPagesDesc": "Pàgines a enumerar, per defecte 'totes', accepta 1-5 o 2,5,9, etc.", - "customNumberDesc": "Per defecte {n}, accepta 'Pàgina {n} de {total}', 'Text-{n}', '{filename}-{n}'", - "submit": "Afegir Números de Pàgina" - }, - "pdfPrompt": "Selecciona PDF(s)", - "multiPdfPrompt": "Selecciona PDFs (2+)", - "multiPdfDropPrompt": "Selecciona (o arrossega) els documents PDF", - "imgPrompt": "Selecciona Imatge(s)", - "genericSubmit": "Envia", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Alerta: Aquest procés pot tardar 1 minut depenent de la mida de l'arxiu", - "pageOrderPrompt": "Ordre de Pàgines (Llista separada per comes) :", - "pageSelectionPrompt": "Selecció de pàgines personalitzada (Introdueix una llista separada per comes de números de pàgina, 1,5,6 o funcions com 2n+1):", - "goToPage": "Anar", - "true": "Verdader", - "false": "Fals", - "unknown": "Desconegut", - "save": "Desa", - "saveToBrowser": "Desa al navegador", - "close": "Tanca", - "filesSelected": "fitxers seleccionats", - "noFavourites": "No s'ha afegit cap favorit", - "downloadComplete": "Descarrega completa", - "bored": "Avorrit esperant?", - "alphabet": "Alfabet", - "downloadPdf": "Descarregueu PDF", - "text": "Text", - "font": "Tipus de lletra", - "selectFillter": "-- Selecciona --", - "pageNum": "Número de pàgina", - "sizes": { - "small": "Petit", - "medium": "Mitjà", - "large": "Llarg", - "x-large": "X-Large" - }, - "error": { - "pdfPassword": "El PDF està protegit o bé el password és incorrecte", - "_value": "Error", - "sorry": "Ho sentim pel problema!", - "needHelp": "Necessites ajuda / Has trobat un problema?", - "contactTip": "Si encara tens problemes, no dubtis a contactar-nos per a ajuda. Pots enviar una sol·licitud a la nostra pàgina de GitHub o contactar-nos a través de Discord:", - "404": { - "head": "404 - Pàgina No Trovada | Ooops, hem fet un error en el codi!", - "1": "Semblem no poder trobar la pàgina que estàs buscant.", - "2": "Alguna cosa ha anat malament" - }, - "github": "Envia una sol·licitud a GitHub", - "showStack": "Mostra la Pila d'Errors", - "copyStack": "Copia la Pila d'Errors", - "githubSubmit": "GitHub - Envia una sol·licitud", - "discordSubmit": "Discord - Envia una sol·licitud d'ajuda" - }, - "delete": "Esborra", - "username": "Usuari", - "password": "Contrasenya", - "welcome": "Benvingut", - "property": "Propietat", - "black": "Negre", - "white": "Blanc", - "red": "Vermell", - "green": "Verd", - "blue": "Blau", - "custom": "Personalitzat...", - "WorkInProgess": "En desenvolupament, pot no funcionar o contenir errors. Si us plau, informa de qualsevol problema!", - "poweredBy": "Impulsat per", - "yes": "Si", - "no": "No", - "changedCredsMessage": "Credencials canviades!", - "notAuthenticatedMessage": "Usuari no autenticat.", - "userNotFoundMessage": "Usuari no trobat.", - "incorrectPasswordMessage": "La contrasenya actual és incorrecta.", - "usernameExistsMessage": "El nou nom d’usuari ja existeix.", - "invalidUsernameMessage": "Nom d’usuari no vàlid, només pot contenir lletres, números i els següents caràcters especials @._+- o ha de ser una adreça de correu electrònic vàlida.", - "invalidPasswordMessage": "La contrasenya no pot estar buida ni tenir espais al principi o al final.", - "confirmPasswordErrorMessage": "La contrasenya no pot estar buida ni tenir espais al principi o al final.", - "deleteCurrentUserMessage": "No es pot eliminar l’usuari actualment connectat.", - "deleteUsernameExistsMessage": "El nom d’usuari no existeix i no es pot eliminar.", - "downgradeCurrentUserMessage": "No es pot reduir la funció de l'usuari actual", - "disabledCurrentUserMessage": "L’usuari actual no pot ser deshabilitat", - "downgradeCurrentUserLongMessage": "No es pot baixar la funció de l'usuari actual. Per tant, no es mostrarà l'usuari actual.", - "userAlreadyExistsOAuthMessage": "L’usuari ja existeix com a usuari OAuth2.", - "userAlreadyExistsWebMessage": "L’usuari ja existeix com a usuari web.", - "oops": "Oops!", - "help": "Ajuda", - "goHomepage": "Vés a la pàgina principal", - "joinDiscord": "Uneix-te al nostre servidor de Discord", - "seeDockerHub": "Veure Docker Hub", - "visitGithub": "Visita el repositori de GitHub", - "donate": "Fes una donació", - "color": "Color", - "sponsor": "Patrocinador", - "info": "Informació", - "pro": "Pro", - "page": "Pàgina", - "pages": "Pàgines", - "loading": "Carregant...", - "addToDoc": "Afegeix al document", - "reset": "Reset", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Política de Privacitat", - "terms": "Termes i condicions", - "accessibility": "Accessibilitat", - "cookie": "Política de galetes", - "impressum": "Avís Legal", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Menú de Processos (Beta)", - "uploadButton": "Càrrega personalitzada", - "configureButton": "Configura", - "defaultOption": "Personalitzat", - "submitButton": "Envia-ho", - "help": "Ajuda de Processos", - "scanHelp": "Ajuda per a l’Escaneig de Carpetes", - "deletePrompt": "Estàs segur que vols eliminar els processos?", - "tags": "automatitzar,seqüència,scriptat,procés per lots", - "title": "Procés" - }, - "pipelineOptions": { - "header": "Configuració del Procés", - "pipelineNameLabel": "Nom del Procés", - "saveSettings": "Desa la configuració de l'operació", - "pipelineNamePrompt": "Introdueix el nom del procés aquí", - "selectOperation": "Selecciona Operació", - "addOperationButton": "Afegeix operació", - "pipelineHeader": "Procés:", - "saveButton": "Descarrega", - "validateButton": "Valida" - }, - "enterpriseEdition": { - "button": "Actualitza a Pro", - "warning": "Aquesta funció només està disponible per a usuaris Pro.", - "yamlAdvert": "Stirling PDF Pro admet fitxers de configuració YAML i altres funcions d'SSO.", - "ssoAdvert": "Busques més funcions de gestió d'usuaris? Consulta Stirling PDF Pro" - }, - "analytics": { - "title": "Vols ajudar a millorar Stirling PDF?", - "paragraph1": "Stirling PDF té analítiques opcionals per ajudar-nos a millorar el producte. No recopilem cap informació personal ni el contingut dels fitxers.", - "paragraph2": "Si us plau, considera habilitar les analítiques per ajudar Stirling PDF a créixer i permetre'ns entendre millor els nostres usuaris.", - "enable": "Habilita analítiques", - "disable": "Desactiva analítiques", - "settings": "Pots canviar la configuració de les analítiques al fitxer config/settings.yml" - }, - "navbar": { - "favorite": "Favorits", - "recent": "Nou i recentment actualitzat", - "darkmode": "Mode Fosc", - "language": "Idiomes", - "settings": "Opcions", - "allTools": "Eines", - "multiTool": "Multi Tool", - "search": "Search", - "sections": { - "organize": "Organitzar", - "convertTo": "Convertir a PDF", - "convertFrom": "Convertir des de PDF", - "security": "Signatura i Seguretat", - "advance": "Avançat", - "edit": "Visualitzar i Editar", - "popular": "Popular" - } - }, - "settings": { - "title": "Opcions", - "update": "Actualització Disponible", - "updateAvailable": "La versió actual instal·lada és {0}. Una nova versió ({1}) està disponible.", - "appVersion": "Versió de l'App:", - "downloadOption": { - "title": "Trieu l'opció de descàrrega (per a descàrregues d'un sol fitxer no comprimit):", - "1": "Obre en la mateixa finestra", - "2": "Obre en una finestra nova", - "3": "Descarrega fitxer" - }, - "zipThreshold": "Comprimiu els fitxers quan el nombre de fitxers baixats superi", - "signOut": "Sortir", - "accountSettings": "Configuració del Compte", - "bored": { - "help": "Activa un joc ocult" - }, - "cacheInputs": { - "name": "Desa els valors del formulari", - "help": "Habilita per guardar els valors utilitzats prèviament per a futures execucions" - } - }, - "changeCreds": { - "title": "Canvia les Credencials", - "header": "Actualitza les Dades del Compte", - "changePassword": "Estàs utilitzant les credencials d'inici de sessió per defecte. Si us plau, introdueix una nova contrasenya", - "newUsername": "Nou Nom d'Usuari", - "oldPassword": "Contrasenya Actual", - "newPassword": "Nova Contrasenya", - "confirmNewPassword": "Confirma la Nova Contrasenya", - "submit": "Envia els Canvis" - }, - "account": { - "title": "Opcions del compte", - "accountSettings": "Opcions del compte", - "adminSettings": "Opcions d'Administrador - Veure i afegir usuaris", - "userControlSettings": "Opcions de Control d'Usuari", - "changeUsername": "Canvia el nom d'usuari", - "newUsername": "Nom d'usuari nou", - "password": "Confirma contrasenya", - "oldPassword": "Contrasenya Antiga", - "newPassword": "Nova Contrasenya", - "changePassword": "Canvia la contrasenya", - "confirmNewPassword": "Confirma la Nova Contrasenya", - "signOut": "Sortir", - "yourApiKey": "Clau API", - "syncTitle": "Sincronitza les opcions del navegador amb el compte", - "settingsCompare": "Comparador d'Opcions:", - "property": "Propietat:", - "webBrowserSettings": "Opcions del Navegador", - "syncToBrowser": "Sincronitza Compte -> Navegador", - "syncToAccount": "Sincronitza Compte <- Navegador" - }, - "adminUserSettings": { - "title": "Opcions de Control d'Usuari", - "header": "Opcions de Control d'Usuari Admin", - "admin": "Admin", - "user": "Usuari", - "addUser": "Afegir Usuari", - "deleteUser": "Elimina Usuari", - "confirmDeleteUser": "Vols eliminar aquest usuari?", - "confirmChangeUserStatus": "Vols deshabilitar/habilitar aquest usuari?", - "usernameInfo": "El nom d'usuari només pot contenir lletres, números i els següents caràcters especials: @._+- o ha de ser una adreça de correu electrònic vàlida.", - "roles": "Rols", - "role": "Rol", - "actions": "Accions", - "apiUser": "Usuari amb API limitada", - "extraApiUser": "Usuari Addicional amb API limitada", - "webOnlyUser": "Usuari només WEB", - "demoUser": "Usuari de Demo (Sense configuracions personalitzades)", - "internalApiUser": "Usuari d'API Interna", - "forceChange": "Força l'usuari a canviar la contrasenya en iniciar sessió", - "submit": "Desa Usuari", - "changeUserRole": "Canvia el rol de l'usuari", - "authenticated": "Autenticat", - "editOwnProfil": "Edita el propi perfil", - "enabledUser": "usuari habilitat", - "disabledUser": "usuari deshabilitat", - "activeUsers": "Usuaris Actius:", - "disabledUsers": "Usuaris Deshabilitats:", - "totalUsers": "Total d'Usuaris:", - "lastRequest": "Darrera Sol·licitud", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Importació/Exportació de Base de Dades", - "header": "Importació/Exportació de Base de Dades", - "fileName": "Nom del Fitxer", - "creationDate": "Data de Creació", - "fileSize": "Mida del Fitxer", - "deleteBackupFile": "Elimina el Fitxer de Còpia de Seguretat", - "importBackupFile": "Importa el Fitxer de Còpia de Seguretat", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Descarrega el Fitxer de Còpia de Seguretat", - "info_1": "Quan importis dades, és crucial assegurar-se que l'estructura sigui correcta. Si no estàs segur del que fas, busca l'assessorament d'un professional. Un error en l'estructura pot causar malfuncionaments de l'aplicació, fins i tot impossibilitar-ne l'execució.", - "info_2": "El nom del fitxer no importa quan es puja. Es renombrarà després per seguir el format backup_user_yyyyMMddHHmm.sql, assegurant una convenció de nomenclatura consistent.", - "submit": "Importa la Còpia de Seguretat", - "importIntoDatabaseSuccessed": "Importació a la base de dades completada amb èxit", - "backupCreated": "Database backup successful", - "fileNotFound": "Fitxer no trobat", - "fileNullOrEmpty": "El fitxer no ha de ser nul o buit", - "failedImportFile": "Error en la importació del fitxer", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "La teva sessió ha expirat. Si us plau, actualitza la pàgina i torna a intentar-ho.", - "refreshPage": "Actualitza la pàgina" - }, - "home": { - "desc": "L'eina allotjada localment per a necessitats de PDF.", - "searchBar": "Cerca funcions...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Visualitza, anota, afegeix text o imatges" - }, - "setFavorites": "Configura els favorits", - "hideFavorites": "Amaga els favorits", - "showFavorites": "Mostra els favorits", - "legacyHomepage": "Pàgina d'inici antiga", - "newHomePage": "Prova la nostra nova pàgina d'inici!", - "alphabetical": "Alfabètic", - "globalPopularity": "Popularitat global", - "sortBy": "Ordena per:", - "multiTool": { - "title": "Eina Multifunció de PDF", - "desc": "Fusiona, Rota, Reorganitza i Esborra pàgines" - }, - "merge": { - "title": "Fusiona", - "desc": "Fusiona fàcilment pàgines en una sola." - }, - "split": { - "title": "Divideix", - "desc": "Divideix PDFs en múltiples documents" - }, - "rotate": { - "title": "Rota", - "desc": "Rota els PDFs." - }, - "imageToPdf": { - "title": "Imatge a PDF", - "desc": "Converteix imatge (PNG, JPEG, GIF) a PDF." - }, - "pdfToImage": { - "title": "PDF a Imatge", - "desc": "Converteix PDF a imatge (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Organitza", - "desc": "Elimina/reorganitza pàgines en qualsevol ordre" - }, - "addImage": { - "title": "Afegir imatge a PDF", - "desc": "Afegeix una imatge en un PDF (en progrés)" - }, - "watermark": { - "title": "Afegir Marca d'aigua", - "desc": "Afegir una marca d'aigua personalitzada en un PDF" - }, - "permissions": { - "title": "Canvia permisos", - "desc": "Canvia els permisos del document PDF" - }, - "removePages": { - "title": "Elimina", - "desc": "Elimina pàgines del document PDF." - }, - "addPassword": { - "title": "Afegir Contrasenya", - "desc": "Xifra el document PDF amb contrasenya." - }, - "removePassword": { - "title": "Elimina Contrasenya", - "desc": "Elimina la contrasenya del document PDF." - }, - "compressPdfs": { - "title": "Comprimeix", - "desc": "Comprimeix PDFs per reduir-ne la mida." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Canvia Metadades", - "desc": "Canvia/Treu/Afegeix metadades al document PDF." - }, - "fileToPDF": { - "title": "Converteix arxiu a PDF", - "desc": "Converteix qualsevol arxiu a PDF (DOCX, PNG, XLS, PPT, TXT i més)" - }, - "ocr": { - "title": "Executa OCR i neteja escaneigs", - "desc": "Neteja escanejats i detecta text d'imatges dins d'un PDF, tornant-lo a afegir com a text." - }, - "extractImages": { - "title": "Extreu Imatges", - "desc": "Extreu les imatges del PDF i desa-les en un arxiu zip" - }, - "pdfToPDFA": { - "title": "PDF a PDF/A", - "desc": "Converteix PDF a PDF/A per a l'emmagatzematge a llarg termini." - }, - "PDFToWord": { - "title": "PDF a Word", - "desc": "Converteix PDF a formats de Word (DOC, DOCX i ODT)" - }, - "PDFToPresentation": { - "title": "PDF a Presentació", - "desc": "Converteix PDF a formats de presentació (PPT, PPTX i ODP)" - }, - "PDFToText": { - "title": "PDF a Text/RTF", - "desc": "Converteix PDF a text o format RTF" - }, - "PDFToHTML": { - "title": "PDF a HTML", - "desc": "Converteix PDF a format HTML" - }, - "PDFToXML": { - "title": "PDF a XML", - "desc": "Converteix PDF a format XML" - }, - "ScannerImageSplit": { - "title": "Detecta/Divideix fotos escanejades", - "desc": "Divideix múltiples fotos dins del PDF/foto" - }, - "sign": { - "title": "Signa", - "desc": "Afegeix signatura al PDF mitjançant dibuix, text o imatge" - }, - "flatten": { - "title": "Aplanar", - "desc": "Elimina tots els elements i formularis interactius d'un PDF" - }, - "repair": { - "title": "Reparar", - "desc": "Intenta reparar un PDF danyat o trencat" - }, - "removeBlanks": { - "title": "Elimina les pàgines en blanc", - "desc": "Detecta i elimina les pàgines en blanc d'un document" - }, - "removeAnnotations": { - "title": "Elimina Anotacions", - "desc": "Elimina tots els comentaris/anotacions d'un PDF" - }, - "compare": { - "title": "Compara", - "desc": "Compara i mostra les diferències entre 2 documents PDF" - }, - "certSign": { - "title": "Signa amb Certificat", - "desc": "Signa un PDF amb Certificat/Clau (PEM/P12)" - }, - "removeCertSign": { - "title": "Elimina Signatura de Certificat", - "desc": "Elimina la signatura de certificat d'un PDF" - }, - "pageLayout": { - "title": "Disposició Multi-Pàgina", - "desc": "Fusiona diverses pàgines d'un document PDF en una sola pàgina" - }, - "scalePages": { - "title": "Ajusta la mida/escala de la pàgina", - "desc": "Canvia la mida/escala de la pàgina i/o del seu contingut." - }, - "pipeline": { - "title": "Procés", - "desc": "Executa múltiples accions en PDFs definint scripts de procés" - }, - "add-page-numbers": { - "title": "Afegir Números de Pàgina", - "desc": "Afegir números de pàgina en una localització" - }, - "auto-rename": { - "title": "Canvia Automàticament el Nom del Fitxer PDF", - "desc": "Canvia automàticament el nom d'un fitxer PDF en funció de la capçalera detectada" - }, - "adjust-contrast": { - "title": "Ajusta Colors/Contrast", - "desc": "Ajusta colors/contrast, saturació i brillantor" - }, - "crop": { - "title": "Talla PDF", - "desc": "Talla PDF per reduir la mida (manté el text!)" - }, - "autoSplitPDF": { - "title": "Divisió Automàtica de Pàgines", - "desc": "Divideix automàticament un PDF escanejat amb un codi QR de separació de pàgines escanejades" - }, - "sanitizePdf": { - "title": "Neteja", - "desc": "Elimina scripts i altres elements dels fitxers PDF" - }, - "URLToPDF": { - "title": "URL/Lloc Web a PDF", - "desc": "Converteix qualsevol URL http(s) a PDF" - }, - "HTMLToPDF": { - "title": "HTML a PDF", - "desc": "Converteix qualsevol fitxer HTML o arxiu comprimit a PDF" - }, - "MarkdownToPDF": { - "title": "Markdown a PDF", - "desc": "Converteix qualsevol fitxer Markdown a PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Obteniu Tota la Informació sobre el PDF", - "desc": "Recupera tota la informació possible sobre els PDFs" - }, - "extractPage": { - "title": "Extreu pàgina(es)", - "desc": "Extreu pàgines seleccionades d'un PDF" - }, - "PdfToSinglePage": { - "title": "PDF a Una Sola Pàgina Gran", - "desc": "Fusiona totes les pàgines d'un PDF en una sola pàgina gran" - }, - "showJS": { - "title": "Mostra Javascript", - "desc": "Cerca i mostra qualsevol JS injectat en un PDF" - }, - "autoRedact": { - "title": "Redacció Automàtica", - "desc": "Redacta automàticament (enfosqueix) text en un PDF basat en el text introduït" - }, - "redact": { - "title": "Redacció manual", - "desc": "Redacta un PDF segons el text seleccionat, les formes dibuixades i/o les pàgines seleccionades" - }, - "tableExtraxt": { - "title": "PDF a CSV", - "desc": "Extreu taules d'un PDF convertint-les a CSV" - }, - "autoSizeSplitPDF": { - "title": "Divisió Automàtica per Mida/Quantitat", - "desc": "Divideix un únic PDF en múltiples documents basant-se en la mida, el nombre de pàgines o el nombre de documents" - }, - "overlay-pdfs": { - "title": "Superposar PDFs", - "desc": "Superposa PDFs sobre un altre PDF" - }, - "split-by-sections": { - "title": "Divideix PDF per Seccions", - "desc": "Divideix cada pàgina d'un PDF en seccions horitzontals i verticals més petites" - }, - "AddStampRequest": { - "title": "Afegeix segell al PDF", - "desc": "Afegeix segells de text o imatge en ubicacions establertes" - }, - "removeImagePdf": { - "title": "Elimina imatge", - "desc": "Elimina imatges d'un PDF per reduir la mida del fitxer" - }, - "splitPdfByChapters": { - "title": "Divideix PDF per Capítols", - "desc": "Divideix un PDF en múltiples fitxers segons la seva estructura de capítols." - }, - "validateSignature": { - "title": "Validar Signatura PDF", - "desc": "Verifica les signatures digitals i els certificats en documents PDF" - }, - "replaceColorPdf": { - "title": "Reemplaça i Inverteix Color", - "desc": "Reemplaça el color del text i el fons en un PDF i inverteix tot el color del PDF per reduir la mida del fitxer" - } - }, - "viewPdf": { - "tags": "veure,llegir,anotar,text,imatge", - "title": "View/Edit PDF", - "header": "Visualitza PDF" - }, - "multiTool": { - "tags": "Eina Multifunció,operacions múltiples,UI,clic i arrossega,costat frontal,client", - "title": "Eina multifunció de PDF", - "header": "Eina multifunció de PDF", - "uploadPrompts": "Nom del fitxer", - "selectAll": "Selecciona-ho tot", - "deselectAll": "Desselecciona-ho tot", - "selectPages": "Selecció de pàgines", - "selectedPages": "Pàgines seleccionades", - "page": "Pàgina", - "deleteSelected": "Suprimeix seleccionades", - "downloadAll": "Exporta", - "downloadSelected": "Exporta seleccionades", - "insertPageBreak": "Insereix un salt de pàgina", - "addFile": "Afegeix fitxer", - "rotateLeft": "Gira a l'esquerra", - "rotateRight": "Gira a la dreta", - "split": "Divideix", - "moveLeft": "Mou a l'esquerra", - "moveRight": "Mou a la dreta", - "delete": "Suprimeix", - "dragDropMessage": "Pàgina(es) seleccionada(es)", - "undo": "Desfés", - "redo": "Refés" - }, - "merge": { - "tags": "fusió,operacions de pàgina,backend,servidor", - "title": "Fusiona", - "header": "Fusiona múltiples PDFs (2+)", - "sortByName": "Ordena per nom", - "sortByDate": "Ordena per data", - "removeCertSign": "Eliminar la signatura digital en el fitxer fusionat?", - "submit": "Fusiona" - }, - "split": { - "tags": "operacions de pàgina,divideix,Multi-Pàgina,talla,servidor", - "title": "Divideix PDF", - "header": "Divideix PDF", - "desc": { - "1": "Els números seleccionats indiquen les pàgines on vols realitzar la divisió", - "2": "Per exemple, seleccionant 1,3,7-9 dividiries un document de 10 pàgines en 6 PDFs separats amb:", - "3": "Document #1: Pàgina 1", - "4": "Document #2: Pàgina 2 i 3", - "5": "Document #3: Pàgina 4, 5, 6 i 7", - "6": "Document #4: Pàgina 8", - "7": "Document #5: Pàgina 9", - "8": "Document #6: Pàgina 10" - }, - "splitPages": "Introdueix les pàgines per dividir-les:", - "submit": "Divideix" - }, - "rotate": { - "tags": "servidor", - "title": "Rota PDF", - "header": "Rota PDF", - "selectAngle": "Selecciona l'angle de gir (en múltiples de 90 graus):", - "submit": "Rota" - }, - "imageToPdf": { - "tags": "conversió,img,jpg,imatge,foto" - }, - "pdfToImage": { - "tags": "conversió,img,jpg,imatge,foto", - "title": "PDF a Imatge", - "header": "PDF a Imatge", - "selectText": "Format d'Imatge", - "singleOrMultiple": "Tipus d'Imatge Resultant", - "single": "Única Imatge Gran", - "multi": "Múltiples Imatges", - "colorType": "Tipus de Color", - "color": "Color", - "grey": "Escala de Grisos", - "blackwhite": "Blanc i Negre (Pot perdre dades!)", - "submit": "Converteix", - "info": "Python no està instal·lat. És necessari per a la conversió a WebP.", - "placeholder": "(p. ex. 1,2,8 o 4,7,12-16 o 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,parells,senars,ordenar,moure", - "title": "Organitzador de Pàgines", - "header": "Organitzador de Pàgines PDF", - "submit": "Reorganitza Pàgines", - "mode": { - "_value": "Mode", - "1": "Ordre Personalitzat de Pàgines", - "2": "Ordre Invertit", - "3": "Classificació Dúplex", - "4": "Classificació en Llibret", - "5": "Classificació en Llibret de Puntada Lateral", - "6": "Divisió Parells-Senars", - "7": "Eliminar Primer", - "8": "Eliminar Últim", - "9": "Eliminar Primer i Últim", - "10": "Fusionar Parells-Senars", - "11": "Duplicate all pages" - }, - "placeholder": "(p. ex. 1,3,2 o 4-8,2,10-12 o 2n-1)" - }, - "addImage": { - "tags": "img,jpg,imatge,foto", - "title": "Afegir Imatge", - "header": "Afegir Imatge a PDF (en construcció)", - "everyPage": "Totes les pàgines?", - "upload": "Afegir Imatge", - "submit": "Afegir Imatge" - }, - "watermark": { - "tags": "text,repetició,etiqueta,propia,copyright,marca registrada,img,jpg,imatge,foto", - "title": "Afegir Marca d'Aigua", - "header": "Afegir Marca d'Aigua", - "customColor": "Color de Text Personalitzat", - "selectText": { - "1": "Selecciona el PDF per afegir la Marca d'Aigua:", - "2": "Text de la Marca d'Aigua", - "3": "Mida de la Font:", - "4": "Rotació (0-360):", - "5": "Separació d'amplada (Espai horitzontal entre cada Marca d'Aigua):", - "6": "Separació d'alçada (Espai vertical entre cada Marca d'Aigua):", - "7": "Opacitat (0% - 100%):", - "8": "Tipus de Marca d'Aigua:", - "9": "Imatge de la Marca d'Aigua:", - "10": "Converteix PDF a PDF-Image" - }, - "submit": "Afegir Marca d'Aigua", - "type": { - "1": "Text", - "2": "Imatge" - } - }, - "permissions": { - "tags": "lectura,escriptura,editar,imprimir", - "title": "Canviar Permissos", - "header": "Canviar Permissos", - "warning": "Advertència: per fer que aquests permisos siguin inalterables, es recomana establir-los amb una contrasenya a través de la pàgina d'afegir contrasenya", - "selectText": { - "1": "Selecciona el PDF per Canviar Permissos", - "2": "Permissos a canviar", - "3": "Evita el muntatge del document", - "4": "Evita l'extracció de contingut", - "5": "Evita l'extracció de contingut per accessibilitat", - "6": "Evita emplenar formularis", - "7": "Evita modificacions", - "8": "Evita modificacions d'annotacions", - "9": "Evita impressió", - "10": "Evita impressió en diferents formats" - }, - "submit": "Canviar Permissos" - }, - "removePages": { - "tags": "eliminar pàgines,suprimir pàgines" - }, - "addPassword": { - "tags": "segur,seguretat", - "title": "Afegir Contrasenya", - "header": "Afegir contrasenya (Encriptat)", - "selectText": { - "1": "PDF a encriptar", - "2": "Contrasenya", - "3": "Longitud de la clau de xifratge", - "4": "Valors més alts són més forts, però els valors més baixos tenen una millor compatibilitat.", - "5": "Permissos a Establir", - "6": "Evita el muntatge del document", - "7": "Evita l'extracció de contingut", - "8": "Evita l'extracció per accessibilitat", - "9": "Evita emplenar formularis", - "10": "Evita modificacions", - "11": "Evita modificacions d'annotacions", - "12": "Evita impressió", - "13": "Evita impressió en diferents formats", - "14": "Contrasenya d'Administrador", - "15": "Restringeix el que es pot fer amb el document un cop obert (No compatible amb tots els lectors)", - "16": "Restringeix l'obertura del document" - }, - "submit": "Encripta" - }, - "removePassword": { - "tags": "segur,desencripta,seguretat,eliminar contrasenya,suprimir contrasenya", - "title": "Eliminar Contrasenya", - "header": "Eliminar Contrasenya (Desxifrar)", - "selectText": { - "1": "Selecciona el PDF a Desxifrar", - "2": "Contrasenya" - }, - "submit": "Eliminar Contrasenya" - }, - "compressPdfs": { - "tags": "estrènyer,petit,minúscul" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Títol,autor,data,creació,hora,editor,productor,estadístiques", - "title": "Títol:", - "header": "Canvia Metadades", - "selectText": { - "1": "Edita les variables a canviar", - "2": "Neteja totes les metadades", - "3": "Mostra Metadades Personalitzades:", - "4": "Altres Metadades:", - "5": "Afegir entrada personalitzada" - }, - "author": "Autor:", - "creationDate": "Data de Creació (yyyy/MM/dd HH:mm:ss):", - "creator": "Creador:", - "keywords": "Paraules clau:", - "modDate": "Data de Modificació (yyyy/MM/dd HH:mm:ss):", - "producer": "Productor:", - "subject": "Assumpte:", - "trapped": "Atrapat:", - "submit": "Canvia" - }, - "fileToPDF": { - "tags": "transformació,format,document,imatge,diapositiva,text,conversió,oficina,docs,word,excel,powerpoint", - "title": "Arxiu a PDF", - "header": "Converteix arxiu a PDF", - "credit": "Utilitza LibreOffice i Unoconv per a la conversió.", - "supportedFileTypesInfo": "Tipus de fitxers admesos", - "supportedFileTypes": "Els tipus de fitxers admesos haurien d'incloure els següents, però per obtenir una llista completa actualitzada dels formats compatibles, consulteu la documentació de LibreOffice", - "submit": "Converteix a PDF" - }, - "ocr": { - "tags": "reconeixement,text,imatge,escaneig,lectura,identificació,detecció,editable", - "title": "OCR / Neteja Escanejats", - "header": "Neteja Escanejats / OCR (Reconeixement Òptic de Caràcters)", - "selectText": { - "1": "Selecciona els idiomes que s'han de detectar dins del PDF (els que s'indiquen són els detectats):", - "2": "Genera un fitxer de text que contingui el text OCR juntament amb el PDF editat per OCR", - "3": "Corregeix pàgines escanejades amb un angle esbiaixat girant-les a la seva posició correcta", - "4": "Neteja la pàgina, de manera que és menys probable que l'OCR trobi soroll de text de fons. (Sense canvis en la sortida)", - "5": "Neteja la pàgina, de manera que és menys probable que l'OCR trobi text en el soroll de fons, mantenint la neteja en la sortida.", - "6": "Ignora les pàgines que tenen text interactiu, només les pàgines OCR que són imatges", - "7": "Força OCR, l'OCR de cada pàgina elimina tots els elements de text originals", - "8": "Normal (error si el PDF conté text)", - "9": "Opcions Addicionals", - "10": "Mode OCR", - "11": "Elimina Imatges després de l'OCR (Elimina TOTES les imatges, útil si forma part d'un procés de conversió)", - "12": "Tipus de Renderització (Avançat)" - }, - "help": "Llegeix aquesta documentació sobre com utilitzar-la per a altres idiomes i/o no utilitzar-la a Docker", - "credit": "Aquest servei fa servir qpdf i Tesseract per a OCR.", - "submit": "Processa PDF amb OCR" - }, - "extractImages": { - "tags": "imatge,foto,desa,arxiva,zip,captura,agafa", - "title": "Extreu Imatges", - "header": "Extreu Imatges", - "selectText": "Selecciona el format d'imatge al qual convertir les imatges extretes", - "allowDuplicates": "Desa imatges duplicades", - "submit": "Extreu" - }, - "pdfToPDFA": { - "tags": "arxiu,llarg termini,estàndard,conversió,emmagatzematge,preservació", - "title": "PDF a PDF/A", - "header": "PDF a PDF/A", - "credit": "Utilitza libreoffice per a la conversió a PDF/A", - "submit": "Converteix", - "tip": "Actualment no funciona per a múltiples entrades al mateix temps", - "outputFormat": "Format de sortida", - "pdfWithDigitalSignature": "El PDF conté una signatura digital. Aquesta serà eliminada en el següent pas." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformació,format,conversió,oficina,microsoft,fitxer doc", - "title": "PDF a Word", - "header": "PDF a Word", - "selectText": { - "1": "Format d'Arxiu de Sortida" - }, - "credit": "Utilitza LibreOffice per a la conversió d'Arxius.", - "submit": "Converteix" - }, - "PDFToPresentation": { - "tags": "diapositives,presentació,oficina,microsoft", - "title": "PDF a Presentació", - "header": "PDF a Presentació", - "selectText": { - "1": "Format d'Arxiu de Sortida" - }, - "credit": "Utilitza LibreOffice per a la conversió d'Arxius.", - "submit": "Converteix" - }, - "PDFToText": { - "tags": "format ric,format de text ric,format de text enriquit", - "title": "PDF a Text/RTF", - "header": "PDF a Text/RTF", - "selectText": { - "1": "Format d'Arxiu de Sortida" - }, - "credit": "Utilitza LibreOffice per a la conversió d'Arxius.", - "submit": "Converteix" - }, - "PDFToHTML": { - "tags": "contingut web,compatible amb navegadors", - "title": "PDF a HTML", - "header": "PDF a HTML", - "credit": "Utilitza pdftohtml per a la conversió d'Arxius.", - "submit": "Converteix" - }, - "PDFToXML": { - "tags": "extracció de dades,contingut estructurat,interop,transformació,convertir", - "title": "PDF a XML", - "header": "PDF a XML", - "credit": "Utilitza LibreOffice per a la conversió d'Arxius.", - "submit": "Converteix" - }, - "ScannerImageSplit": { - "tags": "separa,detecció automàtica,escaneigs,multifoto,organitzar", - "selectText": { - "1": "Llindar d'angle:", - "2": "Estableix l'angle mínim absolut necessari perquè la imatge es giri (per defecte: 10).", - "3": "Tolerància:", - "4": "Determina l'interval de variació de color al voltant del color de fons estimat (per defecte: 30).", - "5": "Àrea Mínima:", - "6": "Estableix el llindar d'àrea mínima per a una foto (per defecte: 10000).", - "7": "Àrea de contorn mínima:", - "8": "Estableix el llindar mínim de l'àrea de contorn per a una foto", - "9": "Mida de Vora:", - "10": "Estableix la mida de la vora afegida i eliminada per evitar vores blanques a la sortida (per defecte: 1)." - }, - "info": "Python no està instal·lat. És necessari per executar-ho." - }, - "sign": { - "tags": "autoritza,inicis,signatura dibuixada,signatura de text,signatura amb imatge", - "title": "Signa", - "header": "Signa els PDF", - "upload": "Penja la imatge", - "draw": "Dibuixa la signatura", - "text": "Entrada de text", - "clear": "Esborra", - "add": "Afegeix", - "saved": "Signatures Desades", - "save": "Desa Signatura", - "personalSigs": "Signatures Personals", - "sharedSigs": "Signatures Compartides", - "noSavedSigs": "No s'han trobat signatures desades", - "addToAll": "Add to all pages", - "delete": "Delete", - "first": "First page", - "last": "Last page", - "next": "Next page", - "previous": "Previous page", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "estàtic,desactivar,no interactiu,simplifica", - "title": "Aplanar", - "header": "Aplana els PDF", - "flattenOnlyForms": "Aplana només els formularis", - "submit": "Aplanar" - }, - "repair": { - "tags": "repara,restaura,correcció,recupera", - "title": "Reparar", - "header": "Repara els PDF", - "submit": "Reparar" - }, - "removeBlanks": { - "tags": "neteja,simplifica,sense contingut,organitza", - "title": "Elimina els espais en blanc", - "header": "Elimina les pàgines en blanc", - "threshold": "Llindar:", - "thresholdDesc": "Llindar per determinar el nivell de blanc que ha de tenir un píxel per considerar-lo blanc", - "whitePercent": "Percentatge de blanc (%):", - "whitePercentDesc": "Percentatge de la pàgina que ha de ser blanca per eliminar-la", - "submit": "Elimina els espais en blanc" - }, - "removeAnnotations": { - "tags": "comentaris,ressalta,notes,marcatge,elimina", - "title": "Elimina Anotacions", - "header": "Elimina Anotacions", - "submit": "Elimina" - }, - "compare": { - "tags": "diferencia,contrasta,canvis,anàlisi", - "title": "Comparar", - "header": "Compara PDF", - "highlightColor": { - "1": "Color de Ressaltat 1:", - "2": "Color de Ressaltat 2:" - }, - "document": { - "1": "Document 1", - "2": "Document 2" - }, - "submit": "Comparar", - "complex": { - "message": "Un o tots dos documents proporcionats són fitxers grans; la precisió de la comparació pot veure's reduïda." - }, - "large": { - "file": { - "message": "Un o tots dos documents proporcionats són massa grans per ser processats." - } - }, - "no": { - "text": { - "message": "Un o tots dos dels PDFs seleccionats no tenen contingut de text. Si us plau, trieu PDFs amb text per a la comparació." - } - } - }, - "certSign": { - "tags": "autentica,PEM,P12,oficial,encripta", - "title": "Signatura amb Certificat", - "header": "Signa un PDF amb el teu certificat (Treball en curs)", - "selectPDF": "Seleccioneu un fitxer PDF per signar:", - "jksNote": "Nota: Si el vostre tipus de certificat no es troba a la llista, convertiu-lo a un fitxer de Java Keystore (.jks) utilitzant l'eina de línia de comandes keytool. A continuació, trieu l'opció de fitxer .jks més avall.", - "selectKey": "Seleccioneu el vostre fitxer de clau privada (format PKCS#8, podria ser .pem o .der):", - "selectCert": "Seleccioneu el vostre fitxer de certificat (format X.509, podria ser .pem o .der):", - "selectP12": "Seleccioneu el vostre fitxer de magatzem de claus PKCS#12 (.p12 o .pfx) (Opcional, si es proporciona, hauria de contenir la vostra clau privada i certificat):", - "selectJKS": "Seleccioneu el vostre fitxer de Java Keystore (.jks o .keystore):", - "certType": "Tipus de certificat", - "password": "Introduïu la contrasenya del vostre magatzem de claus o clau privada (si n'hi ha):", - "showSig": "Mostra la signatura", - "reason": "Motiu", - "location": "Ubicació", - "name": "Nom", - "showLogo": "Mostra el logotip", - "submit": "Signa PDF" - }, - "removeCertSign": { - "tags": "autentica,PEM,P12,oficial,desencripta", - "title": "Elimina la Signatura del Certificat", - "header": "Elimina el certificat digital del PDF", - "selectPDF": "Seleccioneu un fitxer PDF:", - "submit": "Elimina Signatura" - }, - "pageLayout": { - "tags": "fusió,composició,vista única,organitzar", - "title": "Disposició de Múltiples Pàgines", - "header": "Disposició de Múltiples Pàgines", - "pagesPerSheet": "Pàgines per full:", - "addBorder": "Afegeix Marcs", - "submit": "Envia" - }, - "scalePages": { - "tags": "redimensionar,modificar,dimensió,adaptar", - "title": "Ajusta l'escala de la pàgina", - "header": "Ajusta l'escala de la pàgina", - "pageSize": "Mida d'una pàgina del document.", - "keepPageSize": "Mida Original", - "scaleFactor": "Nivell de zoom (retall) d'una pàgina.", - "submit": "Envia" - }, - "add-page-numbers": { - "tags": "pàgina,etiqueta,organitza,indexa" - }, - "auto-rename": { - "tags": "autodetect,basat en capçalera,organitzar,reetiquetar", - "title": "Canvi de Nom Automàtic", - "header": "Canvi de Nom Automàtic de PDF", - "submit": "Canvi de Nom Automàtic" - }, - "adjust-contrast": { - "tags": "correcció de color,ajustar,modificar,millorar" - }, - "crop": { - "tags": "retallar,reduir,editar,donar forma", - "title": "Talla", - "header": "Talla PDF", - "submit": "Envia" - }, - "autoSplitPDF": { - "tags": "basat en QR,separar,segmentació d'escaneig,organitzar", - "title": "Divisió Automàtica de PDF", - "header": "Divisió Automàtica de PDF", - "description": "Imprimeix, insereix, escaneja, puja i deixa que el sistema separi automàticament els teus documents. No cal ordenar manualment.", - "selectText": { - "1": "Imprimeix algunes fulles divisòries de les opcions següents (en blanc i negre està bé).", - "2": "Escaneja tots els teus documents alhora inserint una fulla divisòria entre cada document.", - "3": "Puja el fitxer PDF escanejat gran i deixa que Stirling PDF faci la resta.", - "4": "Les pàgines divisòries es detecten i eliminen automàticament, garantint un document final ordenat." - }, - "formPrompt": "Envia un PDF que contingui les pàgines divisòries de Stirling-PDF:", - "duplexMode": "Mode Dúplex (Escaneig de davant i darrere)", - "dividerDownload2": "Descarrega 'Divisor Automàtic (amb instruccions).pdf'", - "submit": "Envia" - }, - "sanitizePdf": { - "tags": "netejar,segur,sense riscos,eliminar amenaces" - }, - "URLToPDF": { - "tags": "captura web,desa pàgina,web a document,arxiu", - "title": "URL a PDF", - "header": "URL a PDF", - "submit": "Converteix", - "credit": "Utilitza WeasyPrint" - }, - "HTMLToPDF": { - "tags": "marcatge,contingut web,transformació,convertir", - "title": "HTML a PDF", - "header": "HTML a PDF", - "help": "Accepta fitxers HTML i arxius ZIP que contenen html/css/imatges, etc. necessaris", - "submit": "Converteix", - "credit": "Utilitza WeasyPrint", - "zoom": "Nivell de zoom per mostrar el lloc web.", - "pageWidth": "Amplada de la pàgina en centímetres. (En blanc per defecte)", - "pageHeight": "Alçada de la pàgina en centímetres. (En blanc per defecte)", - "marginTop": "Margen superior de la pàgina en mil·límetres. (En blanc per defecte)", - "marginBottom": "Marge inferior de la pàgina en mil·límetres. (En blanc per defecte)", - "marginLeft": "Marge esquerre de la pàgina en mil·límetres. (En blanc per defecte)", - "marginRight": "Marge dret de la pàgina en mil·límetres. (En blanc per defecte)", - "printBackground": "Renderitza el fons dels llocs web.", - "defaultHeader": "Habilita la Capçalera per Defecte (Nom i número de pàgina)", - "cssMediaType": "Canvia el tipus de mitjà CSS de la pàgina.", - "none": "Cap", - "print": "Imprimir", - "screen": "Pantalla" - }, - "MarkdownToPDF": { - "tags": "marcatge,contingut web,transformació,convertir", - "title": "Markdown To PDF", - "header": "Markdown To PDF", - "submit": "Converteix", - "help": "Treball en curs", - "credit": "Utilitza WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "marcatge,contingut web,transformació,convertir,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "informació,dades,estadístiques,estadístiques", - "title": "Obteniu Informació del PDF", - "header": "Obteniu Informació del PDF", - "submit": "Obteniu Informació", - "downloadJson": "Descarrega JSON" - }, - "extractPage": { - "tags": "extreure" - }, - "PdfToSinglePage": { - "tags": "pàgina única" - }, - "showJS": { - "tags": "JS", - "title": "Mostra Javascript", - "header": "Mostra Javascript", - "downloadJS": "Descarrega Javascript", - "submit": "Mostra" - }, - "autoRedact": { - "tags": "Redactar,Amagar,ressaltar en negre,negre,marcador,ocult", - "title": "Redacció Automàtica", - "header": "Redacció Automàtica", - "colorLabel": "Color", - "textsToRedactLabel": "Text a Redactar (separat per línies)", - "textsToRedactPlaceholder": "p. ex. \\nConfidencial \\nMolt Secret", - "useRegexLabel": "Utilitza Regex", - "wholeWordSearchLabel": "Cerca de Paraula Completa", - "customPaddingLabel": "Espai Extra Personalitzat", - "convertPDFToImageLabel": "Converteix PDF a Imatge PDF (S'utilitza per eliminar text darrere del quadre)", - "submitButton": "Envia" - }, - "redact": { - "tags": "Redactar,Amagar,ressaltar en negre,negre,marcador,ocult,manual", - "title": "Redacció manual", - "header": "Redacció manual", - "submit": "Redacta", - "textBasedRedaction": "Redacció basada en text", - "pageBasedRedaction": "Redacció basada en pàgines", - "convertPDFToImageLabel": "Converteix PDF a PDF-imatge (utilitzat per eliminar text darrere del quadre)", - "pageRedactionNumbers": { - "title": "Pàgines", - "placeholder": "(p. ex. 1,2,8 o 4,7,12-16 o 2n-1)" - }, - "redactionColor": { - "title": "Color de redacció" - }, - "export": "Exporta", - "upload": "Puja", - "boxRedaction": "Redacció amb dibuix de quadre", - "zoom": "Zoom", - "zoomIn": "Apropa", - "zoomOut": "Allunya", - "nextPage": "Pàgina següent", - "previousPage": "Pàgina anterior", - "toggleSidebar": "Commuta la barra lateral", - "showThumbnails": "Mostra miniatures", - "showDocumentOutline": "Mostra l'esquema del document (doble clic per expandir/contraure tots els elements)", - "showAttatchments": "Mostra els adjunts", - "showLayers": "Mostra les capes (doble clic per restablir totes les capes a l'estat per defecte)", - "colourPicker": "Selector de colors", - "findCurrentOutlineItem": "Troba l'element actual de l'esquema", - "applyChanges": "Aplica els canvis" - }, - "tableExtraxt": { - "tags": "CSV,Extracció de taules,extreure,convertir" - }, - "autoSizeSplitPDF": { - "tags": "pdf,dividir,document,organització" - }, - "overlay-pdfs": { - "tags": "Superposició", - "header": "Superposar Fitxers PDF", - "baseFile": { - "label": "Selecciona el Fitxer PDF Base" - }, - "overlayFiles": { - "label": "Selecciona els Fitxers PDF a Superposar" - }, - "mode": { - "label": "Selecciona el Mode de Superposició", - "sequential": "Superposició Seqüencial", - "interleaved": "Superposició Intercalada", - "fixedRepeat": "Superposició de Repte Fix" - }, - "counts": { - "label": "Nombre de Superposicions (per al Mode de Repte Fix)", - "placeholder": "Introdueix els nombres separats per comes (p. ex., 2,3,1)" - }, - "position": { - "label": "Selecciona la Posició de la Superposició", - "foreground": "Primer pla", - "background": "Fons" - }, - "submit": "Envia" - }, - "split-by-sections": { - "tags": "Divisió per seccions,Divideix,Personalitza", - "title": "Divideix PDF per Seccions", - "header": "Divideix el PDF en Seccions", - "horizontal": { - "label": "Divisions Horitzontals", - "placeholder": "Introdueix el nombre de divisions horitzontals" - }, - "vertical": { - "label": "Divisions Verticals", - "placeholder": "Introdueix el nombre de divisions verticals" - }, - "submit": "Divideix PDF", - "merge": "Fusiona en un sol PDF" - }, - "AddStampRequest": { - "tags": "Segell, Afegeix imatge, Centra imatge, Marca d'aigua, PDF, Insereix, Personalitza", - "header": "Segella PDF", - "title": "Segella PDF", - "stampType": "Tipus de Segell", - "stampText": "Text del Segell", - "stampImage": "Imatge del Segell", - "alphabet": "Alfabet", - "fontSize": "Mida de la Font/Imatge", - "rotation": "Rotació", - "opacity": "Opacitat", - "position": "Posició", - "overrideX": "Modifica la Coordenada X", - "overrideY": "Modifica la Coordenada Y", - "customMargin": "Marge Personalitzat", - "customColor": "Color de Text Personalitzat", - "submit": "Envia" - }, - "removeImagePdf": { - "tags": "Elimina imatge,Operacions de pàgina,Back-end,Servidor" - }, - "splitPdfByChapters": { - "tags": "dividir,capítols,marcadors,organitza" - }, - "validateSignature": { - "tags": "signatura,verifica,valida,pdf,certificat,signatura digital,Validar signatura,Validar certificat", - "title": "Validar Signatures PDF", - "header": "Validar Signatures Digitals", - "selectPDF": "Selecciona fitxer PDF signat", - "submit": "Validar Signatures", - "results": "Resultats de Validació", - "status": { - "_value": "Estat", - "valid": "Vàlid", - "invalid": "Invàlid" - }, - "signer": "Signant", - "date": "Data", - "reason": "Motiu", - "location": "Ubicació", - "noSignatures": "No s'han trobat signatures digitals en aquest document", - "chain": { - "invalid": "La validació de la cadena de certificats ha fallat - no es pot verificar la identitat del signant" - }, - "trust": { - "invalid": "El certificat no es troba en el magatzem de confiança - no es pot verificar la font" - }, - "cert": { - "expired": "El certificat ha expirat", - "revoked": "El certificat ha estat revocat", - "info": "Detalls del Certificat", - "issuer": "Emissor", - "subject": "Assumpte", - "serialNumber": "Número de sèrie", - "validFrom": "Vàlid des de", - "validUntil": "Vàlid fins a", - "algorithm": "Algorisme", - "keySize": "Mida de la clau", - "version": "Versió", - "keyUsage": "Ús de la clau", - "selfSigned": "Autofirmat", - "bits": "bits" - }, - "signature": { - "info": "Informació de la Signatura", - "_value": "Signatura", - "mathValid": "La signatura és matemàticament vàlida, PERÒ:" - }, - "selectCustomCert": "Fitxer de Certificat Personalitzat X.509 (Opcional)" - }, - "replace-color": { - "title": "Reemplaça-Inverteix-Color", - "header": "Reemplaça-Inverteix Color en PDF", - "selectText": { - "1": "Opcions per Reemplaçar o Invertir color", - "2": "Per defecte (Colors d'alt contrast per defecte)", - "3": "Personalitzat (Colors personalitzats)", - "4": "Inversió completa (Inverteix tots els colors)", - "5": "Opcions de color d'alt contrast", - "6": "Text blanc sobre fons negre", - "7": "Text negre sobre fons blanc", - "8": "Text groc sobre fons negre", - "9": "Text verd sobre fons negre", - "10": "Tria el color del text", - "11": "Tria el color del fons" - }, - "submit": "Reemplaça" - }, - "replaceColorPdf": { - "tags": "Reemplaça Color,Operacions de pàgina,Back end,Costat servidor" - }, - "login": { - "title": "Accedir", - "header": "Accedir", - "signin": "Accedir", - "rememberme": "Recordar", - "invalid": "Nom d'usuari/contrasenya no vàlid", - "locked": "Compte bloquejat", - "signinTitle": "Autenticat", - "ssoSignIn": "Inicia sessió mitjançant inici de sessió únic", - "oAuth2AutoCreateDisabled": "La creació automàtica d'usuaris OAUTH2 està desactivada", - "oAuth2AdminBlockedUser": "El registre o inici de sessió d'usuaris no registrats està actualment bloquejat. Si us plau, contacta amb l'administrador.", - "oauth2RequestNotFound": "Sol·licitud d'autorització no trobada", - "oauth2InvalidUserInfoResponse": "Resposta d'informació d'usuari no vàlida", - "oauth2invalidRequest": "Sol·licitud no vàlida", - "oauth2AccessDenied": "Accés denegat", - "oauth2InvalidTokenResponse": "Resposta de token no vàlida", - "oauth2InvalidIdToken": "ID Token no vàlid", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "L'usuari està desactivat, l'inici de sessió està actualment bloquejat amb aquest nom d'usuari. Si us plau, contacta amb l'administrador.", - "alreadyLoggedIn": "Ja has iniciat sessió a", - "alreadyLoggedIn2": "dispositius. Si us plau, tanca la sessió en els dispositius i torna-ho a intentar.", - "toManySessions": "Tens massa sessions actives", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF a Pàgina Única", - "header": "PDF a Pàgina Única", - "submit": "Converteix a Pàgina Única" - }, - "pageExtracter": { - "title": "Extreu Pàgines", - "header": "Extreu Pàgines", - "submit": "Extreu", - "placeholder": "(p. ex. 1,2,8 o 4,7,12-16 o 2n-1)" - }, - "sanitizePDF": { - "title": "Neteja PDF", - "header": "Neteja un fitxer PDF", - "selectText": { - "1": "Elimina accions JavaScript", - "2": "Elimina fitxers incrustats", - "3": "Remove XMP metadata", - "4": "Elimina enllaços", - "5": "Elimina fonts", - "6": "Remove Document Info Metadata" - }, - "submit": "Neteja PDF" - }, - "adjustContrast": { - "title": "Ajusta el Contrast", - "header": "Ajusta el Contrast", - "contrast": "Contrast:", - "brightness": "Brillantor:", - "saturation": "Saturació:", - "download": "Descarrega" - }, - "compress": { - "title": "Comprimir", - "header": "Comprimir PDF", - "credit": "Aquest servei utilitza qpdf per a la compressió/optimització de PDF.", - "grayscale": { - "label": "Aplicar escala de grisos per a la compressió" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Nivell d'optimització:", - "4": "Mode automàtic: ajusta automàticament la qualitat perquè el PDF tingui la mida exacta", - "5": "Mida esperada del PDF (p. ex. 25 MB, 10,8 MB, 25 KB)" - }, - "submit": "Comprimir" - }, - "decrypt": { - "passwordPrompt": "Aquest fitxer està protegit amb contrasenya. Si us plau, introdueix la contrasenya:", - "cancelled": "Operació cancel·lada per al PDF: {0}", - "noPassword": "No s'ha proporcionat cap contrasenya per al PDF xifrat: {0}", - "invalidPassword": "Si us plau, torna-ho a intentar amb la contrasenya correcta.", - "invalidPasswordHeader": "Contrasenya incorrecta o xifratge no compatible per al PDF: {0}", - "unexpectedError": "S'ha produït un error en processar el fitxer. Si us plau, torna-ho a intentar.", - "serverError": "Error del servidor en desxifrar: {0}", - "success": "Fitxer desxifrat correctament." - }, - "multiTool-advert": { - "message": "Aquesta funcionalitat també està disponible a la nostra pàgina d'eines múltiples. Fes-hi una ullada per obtenir una interfície millorada per pàgina i funcions addicionals!" - }, - "pageRemover": { - "title": "Eliminació de Pàgines", - "header": "Eliminació de Pàgines PDF", - "pagesToDelete": "Pàgines a eliminar (Números de pàgines):", - "submit": "Esborra Pàgines", - "placeholder": "(p. ex. 1,2,6 o 1-10,15-30)" - }, - "imageToPDF": { - "title": "Imatge a PDF", - "header": "Imatge a PDF", - "submit": "Converteix", - "selectLabel": "Opcions d'Ajust de la Imatge", - "fillPage": "Omple la Pàgina", - "fitDocumentToImage": "Ajusta la Pàgina a la Imatge", - "maintainAspectRatio": "Manté la Proporció de la Imatge", - "selectText": { - "2": "Rota automàticament el PDF", - "3": "Lògica de diversos fitxers (només està activada si es treballa amb diverses imatges)", - "4": "Combina en un únic PDF", - "5": "Converteix per separar els PDFs" - } - }, - "PDFToCSV": { - "title": "PDF a CSV", - "header": "PDF a CSV", - "prompt": "Selecciona la pàgina per extreure la taula", - "submit": "Extreu" - }, - "split-by-size-or-count": { - "title": "Divideix PDF per Mida o Nombre", - "header": "Divideix PDF per Mida o Nombre", - "type": { - "label": "Selecciona el Tipus de Divisió", - "size": "Per Mida", - "pageCount": "Per Nombre de Pàgines", - "docCount": "Per Nombre de Documents" - }, - "value": { - "label": "Introdueix el Valor", - "placeholder": "Introdueix la mida (p. ex., 2MB o 3KB) o el nombre (p. ex., 5)" - }, - "submit": "Envia" - }, - "printFile": { - "title": "Imprimir Fitxer", - "header": "Imprimir Fitxer a la Impresora", - "selectText": { - "1": "Selecciona el Fitxer per Imprimir", - "2": "Introdueix el Nom de la Impresora" - }, - "submit": "Imprimir" - }, - "licenses": { - "nav": "Llicències", - "title": "Llicències de Tercers", - "header": "Llicències de Tercers", - "module": "Mòdul", - "version": "Versió", - "license": "Llicència" - }, - "survey": { - "nav": "Enquesta", - "title": "Enquesta Stirling-PDF", - "description": "Stirling-PDF no fa seguiment, així que volem escoltar els nostres usuaris per millorar Stirling-PDF!", - "changes": "Stirling-PDF ha canviat des de l'última enquesta! Per saber-ne més, consulta la nostra publicació al blog aquí:", - "changes2": "Amb aquests canvis, estem rebent suport empresarial i finançament", - "please": "Si us plau, considera fer la nostra enquesta!", - "disabled": "(El popup de l'enquesta es desactivarà en les següents actualitzacions, però estarà disponible al peu de la pàgina)", - "button": "Fes l'Enquesta", - "dontShowAgain": "No mostrar més", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Eliminar imatge", - "header": "Eliminar imatge", - "removeImage": "Eliminar imatge", - "submit": "Eliminar imatge" - }, - "splitByChapters": { - "title": "Divideix PDF per Capítols", - "header": "Divideix PDF per Capítols", - "bookmarkLevel": "Nivell de Marcadors", - "includeMetadata": "Incloure Metadades", - "allowDuplicates": "Permetre Duplicats", - "desc": { - "1": "Aquesta eina divideix un fitxer PDF en diversos PDFs segons l'estructura dels seus capítols.", - "2": "Nivell de Marcadors: Tria el nivell de marcadors que s'utilitzarà per dividir (0 per al nivell superior, 1 per al segon nivell, etc.).", - "3": "Incloure Metadades: Si està marcat, les metadades del PDF original s'inclouran en cada PDF dividit.", - "4": "Permetre Duplicats: Si està marcat, permet diversos marcadors a la mateixa pàgina per crear PDFs separats." - }, - "submit": "Divideix PDF" - }, - "fileChooser": { - "click": "Clica", - "or": "o", - "dragAndDrop": "Arrossega i deixa anar", - "dragAndDropPDF": "Arrossega i deixa anar un fitxer PDF", - "dragAndDropImage": "Arrossega i deixa anar un fitxer d'imatge", - "hoveredDragAndDrop": "Arrossega i deixa anar fitxer(s) aquí", - "extractPDF": "Extracting..." - }, - "releases": { - "footer": "Llançaments", - "title": "Notes de Llançament", - "header": "Notes de Llançament", - "current": { - "version": "Llançament Actual" - }, - "note": "Les notes de llançament només estan disponibles en anglès" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/cs-CZ/translation.json b/frontend/dist/locales/cs-CZ/translation.json deleted file mode 100644 index 799b422e6..000000000 --- a/frontend/dist/locales/cs-CZ/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Velikost písma", - "fontName": "Název písma", - "title": "Přidat čísla stránek", - "header": "Přidat čísla stránek", - "selectText": { - "1": "Vyberte PDF soubor:", - "2": "Velikost okraje", - "3": "Pozice", - "4": "Počáteční číslo", - "5": "Stránky k číslování", - "6": "Vlastní text" - }, - "customTextDesc": "Vlastní text", - "numberPagesDesc": "Které stránky číslovat, výchozí je 'všechny', také přijímá 1-5 nebo 2,5,9 atd.", - "customNumberDesc": "Výchozí je {n}, také přijímá 'Stránka {n} z {total}', 'Text-{n}', '{filename}-{n}'", - "submit": "Přidat čísla stránek" - }, - "pdfPrompt": "Vyberte PDF soubor(y)", - "multiPdfPrompt": "Vyberte PDF soubory (2+)", - "multiPdfDropPrompt": "Vyberte (nebo přetáhněte) všechny požadované PDF soubory", - "imgPrompt": "Vyberte obrázek(y)", - "genericSubmit": "Odeslat", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Upozornění: Tento proces může trvat až minutu v závislosti na velikosti souboru", - "pageOrderPrompt": "Vlastní pořadí stránek (Zadejte seznam čísel stránek oddělených čárkou nebo funkci jako např. 2n+1):", - "pageSelectionPrompt": "Vlastní výběr stránek (Zadejte seznam čísel stránek oddělených čárkou jako 1,5,6 nebo funkci jako např. 2n+1):", - "goToPage": "Přejít", - "true": "Ano", - "false": "Ne", - "unknown": "Neznámý", - "save": "Uložit", - "saveToBrowser": "Uložit do prohlížeče", - "close": "Zavřít", - "filesSelected": "vybraných souborů", - "noFavourites": "Žádné oblíbené položky nebyly přidány", - "downloadComplete": "Stahování dokončeno", - "bored": "Nudíte se při čekání?", - "alphabet": "Abeceda", - "downloadPdf": "Stáhnout PDF", - "text": "Text", - "font": "Písmo", - "selectFillter": "-- Vybrat --", - "pageNum": "Číslo stránky", - "sizes": { - "small": "Malé", - "medium": "Střední", - "large": "Velké", - "x-large": "Extra velké" - }, - "error": { - "pdfPassword": "PDF dokument je chráněn heslem a buď heslo nebylo zadáno, nebo bylo nesprávné", - "_value": "Chyba", - "sorry": "Omlouváme se za problém!", - "needHelp": "Potřebujete pomoc / Našli jste problém?", - "contactTip": "Pokud stále máte potíže, neváhejte nás kontaktovat. Můžete podat ticket na našem GitHubu nebo nás kontaktovat přes Discord:", - "404": { - "head": "404 - Stránka nenalezena | Ups, zakopli jsme v kódu!", - "1": "Nemůžeme najít stránku, kterou hledáte.", - "2": "Něco se pokazilo" - }, - "github": "Podat ticket na GitHubu", - "showStack": "Zobrazit trasování zásobníku", - "copyStack": "Kopírovat trasování zásobníku", - "githubSubmit": "GitHub - Podat ticket", - "discordSubmit": "Discord - Podat příspěvek podpory" - }, - "delete": "Smazat", - "username": "Uživatelské jméno", - "password": "Heslo", - "welcome": "Vítejte", - "property": "Vlastnost", - "black": "Černá", - "white": "Bílá", - "red": "Červená", - "green": "Zelená", - "blue": "Modrá", - "custom": "Vlastní...", - "WorkInProgess": "Práce probíhá, nemusí fungovat nebo může obsahovat chyby. Prosím, nahlaste případné problémy!", - "poweredBy": "Využívá", - "yes": "Ano", - "no": "Ne", - "changedCredsMessage": "Přihlašovací údaje byly změněny!", - "notAuthenticatedMessage": "Uživatel není přihlášen.", - "userNotFoundMessage": "Uživatel nebyl nalezen.", - "incorrectPasswordMessage": "Současné heslo není správné.", - "usernameExistsMessage": "Nové uživatelské jméno již existuje.", - "invalidUsernameMessage": "Neplatné uživatelské jméno, může obsahovat pouze písmena, číslice a následující speciální znaky @._+- nebo musí být platná e-mailová adresa.", - "invalidPasswordMessage": "Heslo nesmí být prázdné a nesmí obsahovat mezery na začátku nebo konci.", - "confirmPasswordErrorMessage": "Nové heslo a potvrzení nového hesla se musí shodovat.", - "deleteCurrentUserMessage": "Nelze smazat právě přihlášeného uživatele.", - "deleteUsernameExistsMessage": "Uživatelské jméno neexistuje a nelze ho smazat.", - "downgradeCurrentUserMessage": "Nelze snížit roli současného uživatele", - "disabledCurrentUserMessage": "Současný uživatel nemůže být deaktivován", - "downgradeCurrentUserLongMessage": "Nelze snížit roli současného uživatele. Proto současný uživatel nebude zobrazen.", - "userAlreadyExistsOAuthMessage": "Uživatel již existuje jako OAuth2 uživatel.", - "userAlreadyExistsWebMessage": "Uživatel již existuje jako webový uživatel.", - "oops": "Jejda!", - "help": "Nápověda", - "goHomepage": "Přejít na domovskou stránku", - "joinDiscord": "Připojte se k našemu Discord serveru", - "seeDockerHub": "Prohlédněte si Docker Hub", - "visitGithub": "Navštivte Github repozitář", - "donate": "Přispějte", - "color": "Barva", - "sponsor": "Sponzor", - "info": "Informace", - "pro": "Pro", - "page": "Stránka", - "pages": "Stránky", - "loading": "Načítání...", - "addToDoc": "Přidat do dokumentu", - "reset": "Obnovit", - "apply": "Použít", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Zásady ochrany osobních údajů", - "terms": "Podmínky použití", - "accessibility": "Přístupnost", - "cookie": "Zásady používání cookies", - "impressum": "Tiráž", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Menu Pipeline (Beta)", - "uploadButton": "Nahrát vlastní", - "configureButton": "Konfigurovat", - "defaultOption": "Vlastní", - "submitButton": "Odeslat", - "help": "Nápověda k pipeline", - "scanHelp": "Nápověda ke skenování složek", - "deletePrompt": "Opravdu chcete smazat tento pipeline?", - "tags": "automatizovat,sekvence,skriptované,dávkové-zpracování", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Konfigurace pipeline", - "pipelineNameLabel": "Název pipeline", - "saveSettings": "Uložit nastavení operace", - "pipelineNamePrompt": "Zde zadejte název pipeline", - "selectOperation": "Vybrat operaci", - "addOperationButton": "Přidat operaci", - "pipelineHeader": "Pipeline:", - "saveButton": "Stáhnout", - "validateButton": "Ověřit" - }, - "enterpriseEdition": { - "button": "Upgradovat na Pro", - "warning": "Tato funkce je dostupná pouze pro uživatele Pro.", - "yamlAdvert": "Stirling PDF Pro podporuje konfigurační soubory YAML a další funkce SSO.", - "ssoAdvert": "Hledáte více funkcí pro správu uživatelů? Podívejte se na Stirling PDF Pro" - }, - "analytics": { - "title": "Chcete pomoci vylepšit Stirling PDF?", - "paragraph1": "Stirling PDF nabízí volitelnou analytiku, která nám pomáhá zlepšovat produkt. Nesledujeme žádné osobní údaje ani obsah souborů.", - "paragraph2": "Zvažte prosím povolení analytiky, abyste pomohli růstu Stirling-PDF a umožnili nám lépe porozumět našim uživatelům.", - "enable": "Povolit analytiku", - "disable": "Zakázat analytiku", - "settings": "Nastavení analytiky můžete změnit v souboru config/settings.yml" - }, - "navbar": { - "favorite": "Oblíbené", - "recent": "New and recently updated", - "darkmode": "Tmavý režim", - "language": "Jazyky", - "settings": "Nastavení", - "allTools": "Nástroje", - "multiTool": "Více nástrojů", - "search": "Hledat", - "sections": { - "organize": "Uspořádat", - "convertTo": "Převést do PDF", - "convertFrom": "Převést z PDF", - "security": "Podpis a zabezpečení", - "advance": "Pokročilé", - "edit": "Zobrazit a upravit", - "popular": "Oblíbené" - } - }, - "settings": { - "title": "Nastavení", - "update": "K dispozici je aktualizace", - "updateAvailable": "{0} je aktuálně nainstalovaná verze. Je k dispozici nová verze ({1}).", - "appVersion": "Verze aplikace:", - "downloadOption": { - "title": "Vyberte možnost stahování (Pro stahování jednoho souboru bez zipu):", - "1": "Otevřít ve stejném okně", - "2": "Otevřít v novém okně", - "3": "Stáhnout soubor" - }, - "zipThreshold": "Zazipovat soubory, když počet stahovaných souborů přesáhne", - "signOut": "Odhlásit se", - "accountSettings": "Nastavení účtu", - "bored": { - "help": "Povolí velikonoční vajíčko hry" - }, - "cacheInputs": { - "name": "Ukládat vstupy formulářů", - "help": "Povolí ukládání dříve použitých vstupů pro budoucí použití" - } - }, - "changeCreds": { - "title": "Změnit přihlašovací údaje", - "header": "Aktualizovat údaje vašeho účtu", - "changePassword": "Používáte výchozí přihlašovací údaje. Zadejte prosím nové heslo", - "newUsername": "Nové uživatelské jméno", - "oldPassword": "Současné heslo", - "newPassword": "Nové heslo", - "confirmNewPassword": "Potvrdit nové heslo", - "submit": "Potvrdit změny" - }, - "account": { - "title": "Nastavení účtu", - "accountSettings": "Nastavení účtu", - "adminSettings": "Nastavení správce - Zobrazit a přidat uživatele", - "userControlSettings": "Nastavení ovládání uživatelů", - "changeUsername": "Změnit uživatelské jméno", - "newUsername": "Nové uživatelské jméno", - "password": "Potvrzovací heslo", - "oldPassword": "Staré heslo", - "newPassword": "Nové heslo", - "changePassword": "Změnit heslo", - "confirmNewPassword": "Potvrdit nové heslo", - "signOut": "Odhlásit se", - "yourApiKey": "Váš API klíč", - "syncTitle": "Synchronizovat nastavení prohlížeče s účtem", - "settingsCompare": "Porovnání nastavení:", - "property": "Vlastnost", - "webBrowserSettings": "Nastavení webového prohlížeče", - "syncToBrowser": "Synchronizovat účet -> prohlížeč", - "syncToAccount": "Synchronizovat účet <- prohlížeč" - }, - "adminUserSettings": { - "title": "Nastavení správy uživatelů", - "header": "Nastavení správy uživatelů", - "admin": "Správce", - "user": "Uživatel", - "addUser": "Přidat nového uživatele", - "deleteUser": "Smazat uživatele", - "confirmDeleteUser": "Má být uživatel smazán?", - "confirmChangeUserStatus": "Má být uživatel deaktivován/aktivován?", - "usernameInfo": "Uživatelské jméno může obsahovat pouze písmena, číslice a následující speciální znaky @._+- nebo musí být platná e-mailová adresa.", - "roles": "Role", - "role": "Role", - "actions": "Akce", - "apiUser": "Omezený API uživatel", - "extraApiUser": "Další omezený API uživatel", - "webOnlyUser": "Pouze webový uživatel", - "demoUser": "Demo uživatel (Bez vlastních nastavení)", - "internalApiUser": "Interní API uživatel", - "forceChange": "Vynutit změnu hesla při přihlášení", - "submit": "Uložit uživatele", - "changeUserRole": "Změnit roli uživatele", - "authenticated": "Ověřen", - "editOwnProfil": "Upravit vlastní profil", - "enabledUser": "aktivovaný uživatel", - "disabledUser": "deaktivovaný uživatel", - "activeUsers": "Aktivní uživatelé:", - "disabledUsers": "Deaktivovaní uživatelé:", - "totalUsers": "Celkem uživatelů:", - "lastRequest": "Poslední požadavek", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Import/Export databáze", - "header": "Import/Export databáze", - "fileName": "Název souboru", - "creationDate": "Datum vytvoření", - "fileSize": "Velikost souboru", - "deleteBackupFile": "Smazat záložní soubor", - "importBackupFile": "Importovat záložní soubor", - "createBackupFile": "Vytvořit záložní soubor", - "downloadBackupFile": "Stáhnout záložní soubor", - "info_1": "Při importu dat je zásadní zajistit správnou strukturu. Pokud si nejste jisti, co děláte, vyhledejte odbornou radu a podporu. Chyba ve struktuře může způsobit poruchy aplikace, až po úplnou nefunkčnost aplikace.", - "info_2": "Název souboru při nahrávání není důležitý. Bude následně přejmenován podle formátu backup_user_yyyyMMddHHmm.sql, což zajišťuje konzistentní konvenci pojmenování.", - "submit": "Importovat zálohu", - "importIntoDatabaseSuccessed": "Import do databáze byl úspěšný", - "backupCreated": "Záloha databáze byla úspěšná", - "fileNotFound": "Soubor nebyl nalezen", - "fileNullOrEmpty": "Soubor nesmí být prázdný", - "failedImportFile": "Import souboru selhal", - "notSupported": "Tato funkce není pro vaše připojení k databázi k dispozici." - }, - "session": { - "expired": "Vaše relace vypršela. Obnovte prosím stránku a zkuste to znovu.", - "refreshPage": "Obnovit stránku" - }, - "home": { - "desc": "Vaše lokálně hostované řešení pro všechny vaše potřeby PDF.", - "searchBar": "Hledat funkce...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Zobrazit, anotovat, přidat text nebo obrázky" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "PDF Multi nástroj", - "desc": "Sloučit, otočit, přeuspořádat, rozdělit a odstranit stránky" - }, - "merge": { - "title": "Sloučit", - "desc": "Snadno sloučit více PDF do jednoho." - }, - "split": { - "title": "Rozdělit", - "desc": "Rozdělit PDF do více dokumentů" - }, - "rotate": { - "title": "Otočit", - "desc": "Snadno otočit vaše PDF." - }, - "imageToPdf": { - "title": "Obrázek na PDF", - "desc": "Převést obrázek (PNG, JPEG, GIF) na PDF." - }, - "pdfToImage": { - "title": "PDF na obrázek", - "desc": "Převést PDF na obrázek. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Uspořádat", - "desc": "Odstranit/přeuspořádat stránky v libovolném pořadí" - }, - "addImage": { - "title": "Přidat obrázek", - "desc": "Přidá obrázek na určené místo v PDF" - }, - "watermark": { - "title": "Přidat vodoznak", - "desc": "Přidat vlastní vodoznak do vašeho PDF dokumentu." - }, - "permissions": { - "title": "Změnit oprávnění", - "desc": "Změnit oprávnění vašeho PDF dokumentu" - }, - "removePages": { - "title": "Odstranit", - "desc": "Smazat nežádoucí stránky z vašeho PDF dokumentu." - }, - "addPassword": { - "title": "Přidat heslo", - "desc": "Zašifrovat váš PDF dokument heslem." - }, - "removePassword": { - "title": "Odstranit heslo", - "desc": "Odstranit ochranu heslem z vašeho PDF dokumentu." - }, - "compressPdfs": { - "title": "Komprimovat", - "desc": "Komprimovat PDF pro zmenšení jejich velikosti." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Změnit metadata", - "desc": "Změnit/odstranit/přidat metadata z PDF dokumentu" - }, - "fileToPDF": { - "title": "Převést soubor na PDF", - "desc": "Převést téměř jakýkoliv soubor na PDF (DOCX, PNG, XLS, PPT, TXT a další)" - }, - "ocr": { - "title": "OCR / Vyčištění skenů", - "desc": "Vyčistí skeny a detekuje text z obrázků v PDF a znovu ho přidá jako text." - }, - "extractImages": { - "title": "Extrahovat obrázky", - "desc": "Extrahuje všechny obrázky z PDF a uloží je do zipu" - }, - "pdfToPDFA": { - "title": "PDF na PDF/A", - "desc": "Převést PDF na PDF/A pro dlouhodobé uchovávání" - }, - "PDFToWord": { - "title": "PDF na Word", - "desc": "Převést PDF na formáty Word (DOC, DOCX a ODT)" - }, - "PDFToPresentation": { - "title": "PDF na prezentaci", - "desc": "Převést PDF na formáty prezentací (PPT, PPTX a ODP)" - }, - "PDFToText": { - "title": "PDF na RTF (Text)", - "desc": "Převést PDF na textový nebo RTF formát" - }, - "PDFToHTML": { - "title": "PDF na HTML", - "desc": "Převést PDF na HTML formát" - }, - "PDFToXML": { - "title": "PDF na XML", - "desc": "Převést PDF na XML formát" - }, - "ScannerImageSplit": { - "title": "Detekovat/Rozdělit naskenované fotografie", - "desc": "Rozdělí více fotografií z jedné fotografie/PDF" - }, - "sign": { - "title": "Podepsat", - "desc": "Přidá podpis do PDF kreslením, textem nebo obrázkem" - }, - "flatten": { - "title": "Zploštit", - "desc": "Odstranit všechny interaktivní prvky a formuláře z PDF" - }, - "repair": { - "title": "Opravit", - "desc": "Pokusí se opravit poškozený/rozbitý PDF" - }, - "removeBlanks": { - "title": "Odstranit prázdné stránky", - "desc": "Detekuje a odstraní prázdné stránky z dokumentu" - }, - "removeAnnotations": { - "title": "Odstranit poznámky", - "desc": "Odstraní všechny komentáře/poznámky z PDF" - }, - "compare": { - "title": "Porovnat", - "desc": "Porovná a zobrazí rozdíly mezi 2 PDF dokumenty" - }, - "certSign": { - "title": "Podepsat certifikátem", - "desc": "Podepíše PDF certifikátem/klíčem (PEM/P12)" - }, - "removeCertSign": { - "title": "Odstranit podpis certifikátu", - "desc": "Odstranit podpis certifikátu z PDF" - }, - "pageLayout": { - "title": "Rozvržení více stránek", - "desc": "Sloučit více stránek PDF dokumentu do jedné stránky" - }, - "scalePages": { - "title": "Upravit velikost/měřítko stránky", - "desc": "Změnit velikost/měřítko stránky a/nebo jejího obsahu." - }, - "pipeline": { - "title": "Pipeline", - "desc": "Spustit více akcí na PDF definováním pipeline skriptů" - }, - "add-page-numbers": { - "title": "Přidat čísla stránek", - "desc": "Přidat čísla stránek v celém dokumentu na určeném místě" - }, - "auto-rename": { - "title": "Automaticky přejmenovat PDF soubor", - "desc": "Automaticky přejmenuje PDF soubor podle detekované hlavičky" - }, - "adjust-contrast": { - "title": "Upravit barvy/kontrast", - "desc": "Upravit kontrast, sytost a jas PDF" - }, - "crop": { - "title": "Oříznout PDF", - "desc": "Oříznout PDF pro zmenšení jeho velikosti (zachová text!)" - }, - "autoSplitPDF": { - "title": "Automaticky rozdělit stránky", - "desc": "Automaticky rozdělit naskenované PDF s fyzickým QR kódem pro rozdělení stránek" - }, - "sanitizePdf": { - "title": "Sanitizovat", - "desc": "Odstranit skripty a další prvky z PDF souborů" - }, - "URLToPDF": { - "title": "URL/Web na PDF", - "desc": "Převádí libovolnou http(s) URL na PDF" - }, - "HTMLToPDF": { - "title": "HTML na PDF", - "desc": "Převádí libovolný HTML soubor nebo zip na PDF" - }, - "MarkdownToPDF": { - "title": "Markdown na PDF", - "desc": "Převádí libovolný Markdown soubor na PDF" - }, - "PDFToMarkdown": { - "title": "PDF na Markdown", - "desc": "Převádí libovolné PDF na Markdown" - }, - "getPdfInfo": { - "title": "Získat VŠECHNY informace o PDF", - "desc": "Získá všechny možné informace o PDF" - }, - "extractPage": { - "title": "Extrahovat stránky", - "desc": "Extrahuje vybrané stránky z PDF" - }, - "PdfToSinglePage": { - "title": "Jedna velká stránka", - "desc": "Sloučí všechny stránky PDF do jedné velké stránky" - }, - "showJS": { - "title": "Zobrazit Javascript", - "desc": "Vyhledá a zobrazí jakýkoliv JS vložený do PDF" - }, - "autoRedact": { - "title": "Automatické začernění", - "desc": "Automaticky začerní text v PDF na základě vstupního textu" - }, - "redact": { - "title": "Ruční začernění", - "desc": "Začerní PDF na základě vybraného textu, nakreslených tvarů a/nebo vybraných stránek" - }, - "tableExtraxt": { - "title": "PDF na CSV", - "desc": "Extrahuje tabulky z PDF a převádí je na CSV" - }, - "autoSizeSplitPDF": { - "title": "Automaticky rozdělit podle velikosti/počtu", - "desc": "Rozdělí jeden PDF na více dokumentů podle velikosti, počtu stránek nebo počtu dokumentů" - }, - "overlay-pdfs": { - "title": "Překrýt PDF", - "desc": "Překryje PDF nad jiným PDF" - }, - "split-by-sections": { - "title": "Rozdělit PDF podle sekcí", - "desc": "Rozdělí každou stránku PDF na menší horizontální a vertikální sekce" - }, - "AddStampRequest": { - "title": "Přidat razítko do PDF", - "desc": "Přidá textová nebo obrázkové razítka na určená místa" - }, - "removeImagePdf": { - "title": "Odstranit obrázek", - "desc": "Odstranit obrázek z PDF pro zmenšení velikosti souboru" - }, - "splitPdfByChapters": { - "title": "Rozdělit PDF podle kapitol", - "desc": "Rozdělí PDF do více souborů podle jeho struktury kapitol." - }, - "validateSignature": { - "title": "Ověřit podpis PDF", - "desc": "Ověřit digitální podpisy a certifikáty v PDF dokumentech" - }, - "replaceColorPdf": { - "title": "Nahrazení a inverze barev", - "desc": "Úprava barev textu a pozadí v PDF nebo jejich inverze ke snížení velikosti souboru" - } - }, - "viewPdf": { - "tags": "zobrazit,číst,anotovat,text,obrázek", - "title": "View/Edit PDF", - "header": "Zobrazit PDF" - }, - "multiTool": { - "tags": "Multi nástroj,Více operací,UI,kliknutí a přetažení,přední strana,klientská strana,interaktivní,pohyb,smazat,přesunout,rozdělit", - "title": "PDF Multi nástroj", - "header": "PDF Multi nástroj", - "uploadPrompts": "Název souboru", - "selectAll": "Vybrat vše", - "deselectAll": "Zrušit výběr všeho", - "selectPages": "Vybrat stránku", - "selectedPages": "Vybrané stránky", - "page": "Stránka", - "deleteSelected": "Smazat vybrané", - "downloadAll": "Exportovat", - "downloadSelected": "Exportovat vybrané", - "insertPageBreak": "Vložit zalomení stránky", - "addFile": "Přidat soubor", - "rotateLeft": "Otočit doleva", - "rotateRight": "Otočit doprava", - "split": "Rozdělit", - "moveLeft": "Přesunout doleva", - "moveRight": "Přesunout doprava", - "delete": "Smazat", - "dragDropMessage": "Vybraná/é stránka/y", - "undo": "Zpět", - "redo": "Znovu" - }, - "merge": { - "tags": "sloučit,Operace se stránkami,Zadní strana,serverová strana", - "title": "Sloučit", - "header": "Sloučit více PDF (2+)", - "sortByName": "Seřadit podle názvu", - "sortByDate": "Seřadit podle data", - "removeCertSign": "Odstranit digitální podpis v sloučeném souboru?", - "submit": "Sloučit" - }, - "split": { - "tags": "Operace se stránkami,rozdělit,Více stránek,vyjmout,serverová strana", - "title": "Rozdělit PDF", - "header": "Rozdělit PDF", - "desc": { - "1": "Čísla, která vyberete, jsou čísla stránek, na kterých chcete provést rozdělení", - "2": "Tak například výběr 1,3,7-9 by rozdělil 10stránkový dokument na 6 samostatných PDF s:", - "3": "Dokument #1: Stránka 1", - "4": "Dokument #2: Stránky 2 a 3", - "5": "Dokument #3: Stránky 4, 5, 6 a 7", - "6": "Dokument #4: Stránka 8", - "7": "Dokument #5: Stránka 9", - "8": "Dokument #6: Stránka 10" - }, - "splitPages": "Zadejte stránky pro rozdělení:", - "submit": "Rozdělit" - }, - "rotate": { - "tags": "serverová strana", - "title": "Otočit PDF", - "header": "Otočit PDF", - "selectAngle": "Vyberte úhel otočení (v násobcích 90 stupňů):", - "submit": "Otočit" - }, - "imageToPdf": { - "tags": "převod,img,jpg,obrázek,fotka" - }, - "pdfToImage": { - "tags": "převod,img,jpg,obrázek,fotka", - "title": "PDF na obrázek", - "header": "PDF na obrázek", - "selectText": "Formát obrázku", - "singleOrMultiple": "Typ výsledku obrázku", - "single": "Jeden velký obrázek", - "multi": "Více obrázků", - "colorType": "Typ barev", - "color": "Barevný", - "grey": "Stupně šedi", - "blackwhite": "Černobílý (Může dojít ke ztrátě dat!)", - "submit": "Převést", - "info": "Python není nainstalován. Vyžadován pro konverzi do WebP.", - "placeholder": "(např. 1,2,8 nebo 4,7,12-16 nebo 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,sudý,lichý,seřadit,přesunout", - "title": "Organizátor stránek", - "header": "Organizátor stránek PDF", - "submit": "Přeuspořádat stránky", - "mode": { - "_value": "Režim", - "1": "Vlastní pořadí stránek", - "2": "Obrácené pořadí", - "3": "Duplexní řazení", - "4": "Řazení do brožury", - "5": "Řazení do boční brožury", - "6": "Rozdělení sudé-liché", - "7": "Odstranit první", - "8": "Odstranit poslední", - "9": "Odstranit první a poslední", - "10": "Sloučení sudé-liché", - "11": "Duplicate all pages" - }, - "placeholder": "(např. 1,3,2 nebo 4-8,2,10-12 nebo 2n-1)" - }, - "addImage": { - "tags": "img,jpg,obrázek,fotka", - "title": "Přidat obrázek", - "header": "Přidat obrázek do PDF", - "everyPage": "Každá stránka?", - "upload": "Přidat obrázek", - "submit": "Přidat obrázek" - }, - "watermark": { - "tags": "Text,opakující se,popisek,vlastní,copyright,ochranná známka,img,jpg,obrázek,fotka", - "title": "Přidat vodoznak", - "header": "Přidat vodoznak", - "customColor": "Vlastní barva textu", - "selectText": { - "1": "Vyberte PDF pro přidání vodoznaku:", - "2": "Text vodoznaku:", - "3": "Velikost písma:", - "4": "Otočení (0-360):", - "5": "Horizontální mezera (Mezera mezi vodoznaky horizontálně):", - "6": "Vertikální mezera (Mezera mezi vodoznaky vertikálně):", - "7": "Průhlednost (0% - 100%):", - "8": "Typ vodoznaku:", - "9": "Obrázek vodoznaku:", - "10": "Převést PDF na PDF-obrázek" - }, - "submit": "Přidat vodoznak", - "type": { - "1": "Text", - "2": "Obrázek" - } - }, - "permissions": { - "tags": "číst,psát,upravit,tisknout", - "title": "Změnit oprávnění", - "header": "Změnit oprávnění", - "warning": "Upozornění: Pro nezměnitelnost těchto oprávnění je doporučeno nastavit je s heslem přes stránku přidání hesla", - "selectText": { - "1": "Vyberte PDF ke změně oprávnění", - "2": "Oprávnění k nastavení", - "3": "Zabránit sestavení dokumentu", - "4": "Zabránit extrakci obsahu", - "5": "Zabránit extrakci pro přístupnost", - "6": "Zabránit vyplňování formulářů", - "7": "Zabránit úpravám", - "8": "Zabránit úpravám poznámek", - "9": "Zabránit tisku", - "10": "Zabránit tisku v různých formátech" - }, - "submit": "Změnit" - }, - "removePages": { - "tags": "Odstranit stránky,smazat stránky" - }, - "addPassword": { - "tags": "zabezpečit,bezpečnost", - "title": "Přidat heslo", - "header": "Přidat heslo (Zašifrovat)", - "selectText": { - "1": "Vyberte PDF k zašifrování", - "2": "Uživatelské heslo", - "3": "Délka šifrovacího klíče", - "4": "Vyšší hodnoty jsou silnější, ale nižší hodnoty mají lepší kompatibilitu.", - "5": "Oprávnění k nastavení (Doporučeno používat společně s heslem vlastníka)", - "6": "Zabránit sestavení dokumentu", - "7": "Zabránit extrakci obsahu", - "8": "Zabránit extrakci pro přístupnost", - "9": "Zabránit vyplňování formulářů", - "10": "Zabránit úpravám", - "11": "Zabránit úpravám poznámek", - "12": "Zabránit tisku", - "13": "Zabránit tisku v různých formátech", - "14": "Heslo vlastníka", - "15": "Omezuje, co lze s dokumentem dělat po jeho otevření (Není podporováno všemi čtečkami)", - "16": "Omezuje samotné otevření dokumentu" - }, - "submit": "Zašifrovat" - }, - "removePassword": { - "tags": "zabezpečit,dešifrovat,bezpečnost,odstranit heslo,smazat heslo", - "title": "Odstranit heslo", - "header": "Odstranit heslo (Dešifrovat)", - "selectText": { - "1": "Vyberte PDF k dešifrování", - "2": "Heslo" - }, - "submit": "Odstranit" - }, - "compressPdfs": { - "tags": "stlačit,malý,drobný" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Název,autor,datum,vytvoření,čas,vydavatel,producent,statistiky", - "title": "Změnit metadata", - "header": "Změnit metadata", - "selectText": { - "1": "Upravte proměnné, které chcete změnit", - "2": "Smazat všechna metadata", - "3": "Zobrazit vlastní metadata:", - "4": "Ostatní metadata:", - "5": "Přidat vlastní položku metadat" - }, - "author": "Autor:", - "creationDate": "Datum vytvoření (rrrr/MM/dd HH:mm:ss):", - "creator": "Tvůrce:", - "keywords": "Klíčová slova:", - "modDate": "Datum úpravy (rrrr/MM/dd HH:mm:ss):", - "producer": "Producent:", - "subject": "Předmět:", - "trapped": "Zachyceno:", - "submit": "Změnit" - }, - "fileToPDF": { - "tags": "transformace,formát,dokument,obrázek,prezentace,text,převod,office,docs,word,excel,powerpoint", - "title": "Soubor na PDF", - "header": "Převést libovolný soubor na PDF", - "credit": "Tato služba používá LibreOffice a Unoconv pro konverzi souborů.", - "supportedFileTypesInfo": "Podporované typy souborů", - "supportedFileTypes": "Podporované typy souborů by měly zahrnovat níže uvedené, pro úplný aktualizovaný seznam podporovaných formátů však prosím nahlédněte do dokumentace LibreOffice", - "submit": "Převést na PDF" - }, - "ocr": { - "tags": "rozpoznání,text,obrázek,sken,číst,identifikovat,detekce,upravitelný", - "title": "OCR / Čištění skenů", - "header": "Čištění skenů / OCR (Optické rozpoznávání znaků)", - "selectText": { - "1": "Vyberte jazyky, které mají být detekovány v PDF (Uvedené jsou aktuálně detekované):", - "2": "Vytvořit textový soubor obsahující OCR text spolu s OCR PDF", - "3": "Opravit stránky, které byly naskenovány pod úhlem, jejich otočením zpět na místo", - "4": "Vyčistit stránku, aby bylo méně pravděpodobné, že OCR najde text v šumu pozadí. (Žádná změna výstupu)", - "5": "Vyčistit stránku, aby bylo méně pravděpodobné, že OCR najde text v šumu pozadí, zachová čistý výstup.", - "6": "Ignorovat stránky, které mají interaktivní text, provést OCR pouze na stránkách, které jsou obrázky", - "7": "Vynutit OCR, provede OCR na každé stránce a odstraní všechny původní textové prvky", - "8": "Normální (Vyvolá chybu, pokud PDF obsahuje text)", - "9": "Další nastavení", - "10": "Režim OCR", - "11": "Odstranit obrázky po OCR (Odstraní VŠECHNY obrázky, užitečné pouze jako součást kroku konverze)", - "12": "Typ vykreslení (Pokročilé)" - }, - "help": "Přečtěte si prosím tuto dokumentaci o použití pro jiné jazyky a/nebo použití mimo Docker", - "credit": "Tato služba používá qpdf a Tesseract pro OCR.", - "submit": "Zpracovat PDF pomocí OCR" - }, - "extractImages": { - "tags": "obrázek,fotka,uložit,archiv,zip,zachytit,získat", - "title": "Extrahovat obrázky", - "header": "Extrahovat obrázky", - "selectText": "Vyberte formát obrázku pro převod extrahovaných obrázků", - "allowDuplicates": "Uložit duplicitní obrázky", - "submit": "Extrahovat" - }, - "pdfToPDFA": { - "tags": "archiv,dlouhodobý,standard,převod,úložiště,uchování", - "title": "PDF na PDF/A", - "header": "PDF na PDF/A", - "credit": "Tato služba používá libreoffice pro konverzi do PDF/A", - "submit": "Převést", - "tip": "Momentálně nefunguje pro více vstupů najednou", - "outputFormat": "Výstupní formát", - "pdfWithDigitalSignature": "PDF obsahuje digitální podpis, který bude v dalším kroku odstraněn." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformace,formát,převod,office,microsoft,docfile", - "title": "PDF na Word", - "header": "PDF na Word", - "selectText": { - "1": "Formát výstupního souboru" - }, - "credit": "Tato služba používá LibreOffice pro konverzi souborů.", - "submit": "Převést" - }, - "PDFToPresentation": { - "tags": "snímky,prezentace,office,microsoft", - "title": "PDF na prezentaci", - "header": "PDF na prezentaci", - "selectText": { - "1": "Formát výstupního souboru" - }, - "credit": "Tato služba používá LibreOffice pro konverzi souborů.", - "submit": "Převést" - }, - "PDFToText": { - "tags": "formát bohatého textu,formát rtf,formát bohatého textu", - "title": "PDF na RTF (Text)", - "header": "PDF na RTF (Text)", - "selectText": { - "1": "Formát výstupního souboru" - }, - "credit": "Tato služba používá LibreOffice pro konverzi souborů.", - "submit": "Převést" - }, - "PDFToHTML": { - "tags": "webový obsah,přívětivý pro prohlížeč", - "title": "PDF na HTML", - "header": "PDF na HTML", - "credit": "Tato služba používá pdftohtml pro konverzi souborů.", - "submit": "Převést" - }, - "PDFToXML": { - "tags": "extrakce-dat,strukturovaný-obsah,interoperabilita,transformace,převod", - "title": "PDF na XML", - "header": "PDF na XML", - "credit": "Tato služba používá LibreOffice pro konverzi souborů.", - "submit": "Převést" - }, - "ScannerImageSplit": { - "tags": "oddělit,auto-detekce,skeny,více-fotek,uspořádat", - "selectText": { - "1": "Prahová hodnota úhlu:", - "2": "Nastaví minimální absolutní úhel požadovaný pro otočení obrázku (výchozí: 10).", - "3": "Tolerance:", - "4": "Určuje rozsah barevné variace kolem odhadované barvy pozadí (výchozí: 30).", - "5": "Minimální plocha:", - "6": "Nastaví minimální prahovou hodnotu plochy pro fotografii (výchozí: 10000).", - "7": "Minimální plocha obrysu:", - "8": "Nastaví minimální prahovou hodnotu plochy obrysu pro fotografii", - "9": "Velikost okraje:", - "10": "Nastaví velikost okraje přidaného a odebraného k zabránění bílých okrajů ve výstupu (výchozí: 1)." - }, - "info": "Python není nainstalován. Je vyžadován pro spuštění." - }, - "sign": { - "tags": "autorizovat,iniciály,kreslený-podpis,textový-podpis,obrázkový-podpis", - "title": "Podepsat", - "header": "Podepsat PDF", - "upload": "Nahrát obrázek", - "draw": "Nakreslit podpis", - "text": "Textový vstup", - "clear": "Vymazat", - "add": "Přidat", - "saved": "Uložené podpisy", - "save": "Uložit podpis", - "personalSigs": "Osobní podpisy", - "sharedSigs": "Sdílené podpisy", - "noSavedSigs": "Nebyly nalezeny žádné uložené podpisy", - "addToAll": "Přidat na všechny stránky", - "delete": "Smazat", - "first": "První stránka", - "last": "Poslední stránka", - "next": "Další stránka", - "previous": "Předchozí stránka", - "maintainRatio": "Přepnout zachování poměru stran", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "statický,deaktivovat,neinteraktivní,zjednodušit", - "title": "Zploštit", - "header": "Zploštit PDF", - "flattenOnlyForms": "Zploštit pouze formuláře", - "submit": "Zploštit" - }, - "repair": { - "tags": "opravit,obnovit,korekce,obnovit", - "title": "Opravit", - "header": "Opravit PDF", - "submit": "Opravit" - }, - "removeBlanks": { - "tags": "vyčistit,zjednodušit,bez-obsahu,uspořádat", - "title": "Odstranit prázdné stránky", - "header": "Odstranit prázdné stránky", - "threshold": "Práh bělosti pixelů:", - "thresholdDesc": "Práh pro určení, jak bílý musí pixel být, aby byl klasifikován jako 'bílý'. 0 = černá, 255 čistě bílá.", - "whitePercent": "Procento bílé (%):", - "whitePercentDesc": "Procento stránky, které musí být 'bílé' pixely, aby byla odstraněna", - "submit": "Odstranit prázdné" - }, - "removeAnnotations": { - "tags": "komentáře,zvýraznění,poznámky,značky,odstranit", - "title": "Odstranit poznámky", - "header": "Odstranit poznámky", - "submit": "Odstranit" - }, - "compare": { - "tags": "rozlišit,kontrast,změny,analýza", - "title": "Porovnat", - "header": "Porovnat PDF", - "highlightColor": { - "1": "Zvýrazňovací barva 1:", - "2": "Zvýrazňovací barva 2:" - }, - "document": { - "1": "Dokument 1", - "2": "Dokument 2" - }, - "submit": "Porovnat", - "complex": { - "message": "Jeden nebo oba poskytnuté dokumenty jsou velké soubory, přesnost porovnání může být snížena" - }, - "large": { - "file": { - "message": "Jeden nebo oba poskytnuté dokumenty jsou příliš velké na zpracování" - } - }, - "no": { - "text": { - "message": "Jeden nebo oba vybrané PDF soubory neobsahují textový obsah. Prosím vyberte PDF soubory s textem pro porovnání." - } - } - }, - "certSign": { - "tags": "ověřit,PEM,P12,oficiální,šifrovat", - "title": "Podepisování certifikátem", - "header": "Podepsat PDF certifikátem (Práce probíhá)", - "selectPDF": "Vyberte PDF soubor k podepsání:", - "jksNote": "Poznámka: Pokud typ vašeho certifikátu není uveden níže, převeďte jej prosím na Java Keystore (.jks) soubor pomocí nástroje keytool příkazové řádky. Poté vyberte možnost .jks níže.", - "selectKey": "Vyberte soubor s vaším privátním klíčem (formát PKCS#8, může být .pem nebo .der):", - "selectCert": "Vyberte soubor s vaším certifikátem (formát X.509, může být .pem nebo .der):", - "selectP12": "Vyberte soubor s vaším PKCS#12 úložištěm klíčů (.p12 nebo .pfx) (Volitelné, pokud je uvedeno, mělo by obsahovat váš privátní klíč a certifikát):", - "selectJKS": "Vyberte soubor s vaším Java úložištěm klíčů (.jks nebo .keystore):", - "certType": "Typ certifikátu", - "password": "Zadejte heslo k vašemu úložišti klíčů nebo privátnímu klíči (pokud existuje):", - "showSig": "Zobrazit podpis", - "reason": "Důvod", - "location": "Umístění", - "name": "Jméno", - "showLogo": "Zobrazit logo", - "submit": "Podepsat PDF" - }, - "removeCertSign": { - "tags": "ověřit,PEM,P12,oficiální,dešifrovat", - "title": "Odstranit podpis certifikátu", - "header": "Odstranit digitální certifikát z PDF", - "selectPDF": "Vyberte PDF soubor:", - "submit": "Odstranit podpis" - }, - "pageLayout": { - "tags": "sloučit,kompozitní,jedno-zobrazení,uspořádat", - "title": "Rozvržení více stránek", - "header": "Rozvržení více stránek", - "pagesPerSheet": "Stránek na list:", - "addBorder": "Přidat okraje", - "submit": "Odeslat" - }, - "scalePages": { - "tags": "změnit velikost,upravit,rozměr,přizpůsobit", - "title": "Upravit měřítko stránky", - "header": "Upravit měřítko stránky", - "pageSize": "Velikost stránky dokumentu.", - "keepPageSize": "Původní velikost", - "scaleFactor": "Úroveň přiblížení (oříznutí) stránky.", - "submit": "Odeslat" - }, - "add-page-numbers": { - "tags": "číslování,popisek,uspořádat,rejstřík" - }, - "auto-rename": { - "tags": "auto-detekce,podle-hlavičky,uspořádat,přejmenovat", - "title": "Automatické přejmenování", - "header": "Automatické přejmenování PDF", - "submit": "Automaticky přejmenovat" - }, - "adjust-contrast": { - "tags": "korekce-barev,ladit,upravit,vylepšit" - }, - "crop": { - "tags": "oříznout,zmenšit,upravit,tvar", - "title": "Oříznout", - "header": "Oříznout PDF", - "submit": "Odeslat" - }, - "autoSplitPDF": { - "tags": "QR-kód,oddělit,sken-segment,uspořádat", - "title": "Automatické rozdělení PDF", - "header": "Automatické rozdělení PDF", - "description": "Vytiskněte, vložte, naskenujte, nahrajte a nechte nás automaticky oddělit vaše dokumenty. Není potřeba žádné ruční třídění.", - "selectText": { - "1": "Vytiskněte některé oddělovací listy z níže uvedených (černobílé je v pořádku).", - "2": "Naskenujte všechny své dokumenty najednou vložením oddělovacího listu mezi ně.", - "3": "Nahrajte jediný velký naskenovaný PDF soubor a nechte Stirling PDF udělat zbytek.", - "4": "Oddělovací stránky jsou automaticky detekovány a odstraněny, což zaručuje čistý finální dokument." - }, - "formPrompt": "Odeslat PDF obsahující Stirling-PDF oddělovače stránek:", - "duplexMode": "Duplexní režim (skenování přední a zadní strany)", - "dividerDownload2": "Stáhnout 'Automatický oddělovač (s instrukcemi).pdf'", - "submit": "Odeslat" - }, - "sanitizePdf": { - "tags": "vyčistit,zabezpečit,bezpečný,odstranit-hrozby" - }, - "URLToPDF": { - "tags": "zachytit-web,uložit-stránku,web-na-dok,archivovat", - "title": "URL na PDF", - "header": "URL na PDF", - "submit": "Převést", - "credit": "Využívá WeasyPrint" - }, - "HTMLToPDF": { - "tags": "značkování,webový-obsah,transformace,převod", - "title": "HTML na PDF", - "header": "HTML na PDF", - "help": "Přijímá HTML soubory a ZIP soubory obsahující html/css/obrázky atd.", - "submit": "Převést", - "credit": "Využívá WeasyPrint", - "zoom": "Úroveň přiblížení pro zobrazení webové stránky.", - "pageWidth": "Šířka stránky v centimetrech. (Prázdné pro výchozí)", - "pageHeight": "Výška stránky v centimetrech. (Prázdné pro výchozí)", - "marginTop": "Horní okraj stránky v milimetrech. (Prázdné pro výchozí)", - "marginBottom": "Dolní okraj stránky v milimetrech. (Prázdné pro výchozí)", - "marginLeft": "Levý okraj stránky v milimetrech. (Prázdné pro výchozí)", - "marginRight": "Pravý okraj stránky v milimetrech. (Prázdné pro výchozí)", - "printBackground": "Vykreslit pozadí webových stránek.", - "defaultHeader": "Povolit výchozí záhlaví (název a číslo stránky)", - "cssMediaType": "Změnit typ CSS média stránky.", - "none": "Žádný", - "print": "Tisk", - "screen": "Obrazovka" - }, - "MarkdownToPDF": { - "tags": "značkování,webový-obsah,transformace,převod,md", - "title": "Markdown na PDF", - "header": "Markdown na PDF", - "submit": "Převést", - "help": "Práce probíhá", - "credit": "Využívá WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "značkování,webový-obsah,transformace,převod,md", - "title": "PDF na Markdown", - "header": "PDF na Markdown", - "submit": "Převést" - }, - "getPdfInfo": { - "tags": "informace,data,statistiky,statistiky", - "title": "Získat informace o PDF", - "header": "Získat informace o PDF", - "submit": "Získat informace", - "downloadJson": "Stáhnout JSON" - }, - "extractPage": { - "tags": "extrahovat" - }, - "PdfToSinglePage": { - "tags": "jedna stránka" - }, - "showJS": { - "tags": "JS", - "title": "Zobrazit Javascript", - "header": "Zobrazit Javascript", - "downloadJS": "Stáhnout Javascript", - "submit": "Zobrazit" - }, - "autoRedact": { - "tags": "Začernit,Skrýt,začernit,černá,značka,skrytý", - "title": "Automatické začernění", - "header": "Automatické začernění", - "colorLabel": "Barva", - "textsToRedactLabel": "Text k začernění (oddělený řádky)", - "textsToRedactPlaceholder": "např. \\nDůvěrné \\nPřísně tajné", - "useRegexLabel": "Použít regulární výraz", - "wholeWordSearchLabel": "Hledat celá slova", - "customPaddingLabel": "Vlastní dodatečné odsazení", - "convertPDFToImageLabel": "Převést PDF na PDF-obrázek (Používá se k odstranění textu za rámečkem)", - "submitButton": "Odeslat" - }, - "redact": { - "tags": "Začernit,Skrýt,začernit,černá,značka,skrytý,ruční", - "title": "Ruční začernění", - "header": "Ruční začernění", - "submit": "Začernit", - "textBasedRedaction": "Začernění založené na textu", - "pageBasedRedaction": "Začernění založené na stránkách", - "convertPDFToImageLabel": "Převést PDF na PDF-obrázek (Používá se k odstranění textu za rámečkem)", - "pageRedactionNumbers": { - "title": "Stránky", - "placeholder": "(např. 1,2,8 nebo 4,7,12-16 nebo 2n-1)" - }, - "redactionColor": { - "title": "Barva začernění" - }, - "export": "Exportovat", - "upload": "Nahrát", - "boxRedaction": "Začernění kreslením rámečku", - "zoom": "Přiblížení", - "zoomIn": "Přiblížit", - "zoomOut": "Oddálit", - "nextPage": "Další stránka", - "previousPage": "Předchozí stránka", - "toggleSidebar": "Přepnout postranní panel", - "showThumbnails": "Zobrazit miniatury", - "showDocumentOutline": "Zobrazit osnovu dokumentu (dvojklik pro rozbalení/sbalení všech položek)", - "showAttatchments": "Zobrazit přílohy", - "showLayers": "Zobrazit vrstvy (dvojklik pro obnovení všech vrstev do výchozího stavu)", - "colourPicker": "Výběr barvy", - "findCurrentOutlineItem": "Najít aktuální položku osnovy", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,Extrakce tabulek,extrahovat,převést" - }, - "autoSizeSplitPDF": { - "tags": "pdf,rozdělit,dokument,organizace" - }, - "overlay-pdfs": { - "tags": "Překrýt", - "header": "Překrýt PDF soubory", - "baseFile": { - "label": "Vyberte základní PDF soubor" - }, - "overlayFiles": { - "label": "Vyberte PDF soubory pro překrytí" - }, - "mode": { - "label": "Vyberte režim překrytí", - "sequential": "Sekvenční překrytí", - "interleaved": "Prokládané překrytí", - "fixedRepeat": "Pevné opakované překrytí" - }, - "counts": { - "label": "Počty překrytí (pro režim pevného opakování)", - "placeholder": "Zadejte počty oddělené čárkami (např. 2,3,1)" - }, - "position": { - "label": "Vyberte pozici překrytí", - "foreground": "Popředí", - "background": "Pozadí" - }, - "submit": "Odeslat" - }, - "split-by-sections": { - "tags": "Sekční dělení,Rozdělit,Přizpůsobit", - "title": "Rozdělit PDF podle sekcí", - "header": "Rozdělit PDF do sekcí", - "horizontal": { - "label": "Horizontální dělení", - "placeholder": "Zadejte počet horizontálních dělení" - }, - "vertical": { - "label": "Vertikální dělení", - "placeholder": "Zadejte počet vertikálních dělení" - }, - "submit": "Rozdělit PDF", - "merge": "Sloučit do jednoho PDF" - }, - "AddStampRequest": { - "tags": "Razítko,Přidat obrázek,centrovat obrázek,Vodoznak,PDF,Vložit,Přizpůsobit", - "header": "Razítko PDF", - "title": "Razítko PDF", - "stampType": "Typ razítka", - "stampText": "Text razítka", - "stampImage": "Obrázek razítka", - "alphabet": "Abeceda", - "fontSize": "Velikost písma/obrázku", - "rotation": "Otočení", - "opacity": "Průhlednost", - "position": "Pozice", - "overrideX": "Přepsat souřadnici X", - "overrideY": "Přepsat souřadnici Y", - "customMargin": "Vlastní okraj", - "customColor": "Vlastní barva textu", - "submit": "Odeslat" - }, - "removeImagePdf": { - "tags": "Odstranit obrázek,Operace stránek,zadní strana,serverová strana" - }, - "splitPdfByChapters": { - "tags": "rozdělit,kapitoly,záložky,uspořádat" - }, - "validateSignature": { - "tags": "podpis,ověřit,validovat,pdf,certifikát,digitální podpis,Ověřit podpis,Ověřit certifikát", - "title": "Ověřit podpisy PDF", - "header": "Ověřit digitální podpisy", - "selectPDF": "Vyberte podepsaný PDF soubor", - "submit": "Ověřit podpisy", - "results": "Výsledky ověření", - "status": { - "_value": "Stav", - "valid": "Platný", - "invalid": "Neplatný" - }, - "signer": "Podepisující", - "date": "Datum", - "reason": "Důvod", - "location": "Umístění", - "noSignatures": "V tomto dokumentu nebyly nalezeny žádné digitální podpisy", - "chain": { - "invalid": "Ověření řetězce certifikátů selhalo - nelze ověřit identitu podepisujícího" - }, - "trust": { - "invalid": "Certifikát není v úložišti důvěryhodných certifikátů - zdroj nelze ověřit" - }, - "cert": { - "expired": "Certifikát vypršel", - "revoked": "Certifikát byl zrušen", - "info": "Detaily certifikátu", - "issuer": "Vydavatel", - "subject": "Předmět", - "serialNumber": "Sériové číslo", - "validFrom": "Platný od", - "validUntil": "Platný do", - "algorithm": "Algoritmus", - "keySize": "Velikost klíče", - "version": "Verze", - "keyUsage": "Použití klíče", - "selfSigned": "Podepsaný sám sebou", - "bits": "bitů" - }, - "signature": { - "info": "Informace o podpisu", - "_value": "Podpis", - "mathValid": "Podpis je matematicky platný, ALE:" - }, - "selectCustomCert": "Vlastní certifikát X.509 (Volitelné)" - }, - "replace-color": { - "title": "Nahradit a invertovat barvy", - "header": "Nahradit a invertovat barvy v PDF", - "selectText": { - "1": "Možnosti nahrazení nebo inverze barev", - "2": "Výchozí (přednastavené kontrastní barvy)", - "3": "Vlastní (uživatelsky definované barvy)", - "4": "Úplná inverze (invertovat všechny barvy)", - "5": "Možnosti vysokého kontrastu", - "6": "Bílý text na černém pozadí", - "7": "Černý text na bílém pozadí", - "8": "Žlutý text na černém pozadí", - "9": "Zelený text na černém pozadí", - "10": "Vybrat barvu textu", - "11": "Vybrat barvu pozadí" - }, - "submit": "Nahradit" - }, - "replaceColorPdf": { - "tags": "nahrazení barev,úprava stránek,zpracování,serverová část" - }, - "login": { - "title": "Přihlášení", - "header": "Přihlášení", - "signin": "Přihlásit se", - "rememberme": "Zapamatovat si mě", - "invalid": "Neplatné uživatelské jméno nebo heslo.", - "locked": "Váš účet byl uzamčen.", - "signinTitle": "Prosím přihlaste se", - "ssoSignIn": "Přihlásit se přes Single Sign-on", - "oAuth2AutoCreateDisabled": "Automatické vytváření OAUTH2 uživatelů je zakázáno", - "oAuth2AdminBlockedUser": "Registrace nebo přihlášení neregistrovaných uživatelů je momentálně blokováno. Kontaktujte prosím správce.", - "oauth2RequestNotFound": "Požadavek na autorizaci nebyl nalezen", - "oauth2InvalidUserInfoResponse": "Neplatná odpověď s informacemi o uživateli", - "oauth2invalidRequest": "Neplatný požadavek", - "oauth2AccessDenied": "Přístup odepřen", - "oauth2InvalidTokenResponse": "Neplatná odpověď tokenu", - "oauth2InvalidIdToken": "Neplatný Id Token", - "relyingPartyRegistrationNotFound": "Nebyla nalezena žádná registrace spoléhající se strany", - "userIsDisabled": "Uživatel je deaktivován, přihlášení je momentálně pro toto uživatelské jméno blokováno. Kontaktujte prosím správce.", - "alreadyLoggedIn": "Již jste přihlášeni na", - "alreadyLoggedIn2": "zařízeních. Odhlaste se prosím z těchto zařízení a zkuste to znovu.", - "toManySessions": "Máte příliš mnoho aktivních relací", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF na jednu stránku", - "header": "PDF na jednu stránku", - "submit": "Převést na jednu stránku" - }, - "pageExtracter": { - "title": "Extrahovat stránky", - "header": "Extrahovat stránky", - "submit": "Extrahovat", - "placeholder": "(např. 1,2,8 nebo 4,7,12-16 nebo 2n-1)" - }, - "sanitizePDF": { - "title": "Sanitizovat PDF", - "header": "Sanitizovat PDF soubor", - "selectText": { - "1": "Odstranit JavaScript akce", - "2": "Odstranit vložené soubory", - "3": "Remove XMP metadata", - "4": "Odstranit odkazy", - "5": "Odstranit písma", - "6": "Remove Document Info Metadata" - }, - "submit": "Sanitizovat PDF" - }, - "adjustContrast": { - "title": "Upravit kontrast", - "header": "Upravit kontrast", - "contrast": "Kontrast:", - "brightness": "Jas:", - "saturation": "Sytost:", - "download": "Stáhnout" - }, - "compress": { - "title": "Komprimovat", - "header": "Komprimovat PDF", - "credit": "Tato služba používá qpdf pro kompresi/optimalizaci PDF.", - "grayscale": { - "label": "Použít stupnici šedi pro kompresi" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Úroveň optimalizace:", - "4": "Automatický režim - Automaticky upravuje kvalitu pro dosažení přesné velikosti PDF", - "5": "Očekávaná velikost PDF (např. 25MB, 10.8MB, 25KB)" - }, - "submit": "Komprimovat" - }, - "decrypt": { - "passwordPrompt": "Tento soubor je chráněn heslem. Zadejte prosím heslo:", - "cancelled": "Operace byla zrušena pro PDF: {0}", - "noPassword": "Nebylo zadáno heslo pro zašifrované PDF: {0}", - "invalidPassword": "Zkuste to prosím znovu se správným heslem.", - "invalidPasswordHeader": "Nesprávné heslo nebo nepodporované šifrování pro PDF: {0}", - "unexpectedError": "Při zpracování souboru došlo k chybě. Zkuste to prosím znovu.", - "serverError": "Chyba serveru při dešifrování: {0}", - "success": "Soubor byl úspěšně dešifrován." - }, - "multiTool-advert": { - "message": "Tato funkce je také k dispozici na naší stránce multi-nástroje. Podívejte se na ni pro vylepšené rozhraní pro práci se stránkami a další funkce!" - }, - "pageRemover": { - "title": "Odstranění stránek", - "header": "Odstranění stránek z PDF", - "pagesToDelete": "Stránky k odstranění (Zadejte seznam čísel stránek oddělených čárkami):", - "submit": "Smazat stránky", - "placeholder": "(např. 1,2,6 nebo 1-10,15-30)" - }, - "imageToPDF": { - "title": "Obrázek na PDF", - "header": "Obrázek na PDF", - "submit": "Převést", - "selectLabel": "Možnosti přizpůsobení obrázku", - "fillPage": "Vyplnit stránku", - "fitDocumentToImage": "Přizpůsobit stránku obrázku", - "maintainAspectRatio": "Zachovat poměr stran", - "selectText": { - "2": "Automaticky otočit PDF", - "3": "Logika pro více souborů (Povoleno pouze při práci s více obrázky)", - "4": "Sloučit do jednoho PDF", - "5": "Převést na samostatné PDF" - } - }, - "PDFToCSV": { - "title": "PDF na CSV", - "header": "PDF na CSV", - "prompt": "Vyberte stránku pro extrakci tabulky", - "submit": "Extrahovat" - }, - "split-by-size-or-count": { - "title": "Rozdělit PDF podle velikosti nebo počtu", - "header": "Rozdělit PDF podle velikosti nebo počtu", - "type": { - "label": "Vyberte typ rozdělení", - "size": "Podle velikosti", - "pageCount": "Podle počtu stránek", - "docCount": "Podle počtu dokumentů" - }, - "value": { - "label": "Zadejte hodnotu", - "placeholder": "Zadejte velikost (např. 2MB nebo 3KB) nebo počet (např. 5)" - }, - "submit": "Odeslat" - }, - "printFile": { - "title": "Tisk souboru", - "header": "Tisk souboru na tiskárně", - "selectText": { - "1": "Vyberte soubor k tisku", - "2": "Zadejte název tiskárny" - }, - "submit": "Tisknout" - }, - "licenses": { - "nav": "Licence", - "title": "Licence třetích stran", - "header": "Licence třetích stran", - "module": "Modul", - "version": "Verze", - "license": "Licence" - }, - "survey": { - "nav": "Průzkum", - "title": "Průzkum Stirling-PDF", - "description": "Stirling-PDF nemá sledování, proto chceme slyšet od našich uživatelů, abychom mohli Stirling-PDF vylepšit!", - "changes": "Stirling-PDF se od posledního průzkumu změnil! Pro více informací se podívejte na náš blogový příspěvek zde:", - "changes2": "S těmito změnami získáváme placenou obchodní podporu a financování", - "please": "Zvažte prosím účast v našem průzkumu!", - "disabled": "(Vyskakovací okno průzkumu bude v následujících aktualizacích zakázáno, ale zůstane dostupné v zápatí stránky)", - "button": "Zúčastnit se průzkumu", - "dontShowAgain": "Již nezobrazovat", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Odstranit obrázek", - "header": "Odstranit obrázek", - "removeImage": "Odstranit obrázek", - "submit": "Odstranit obrázek" - }, - "splitByChapters": { - "title": "Rozdělit PDF podle kapitol", - "header": "Rozdělit PDF podle kapitol", - "bookmarkLevel": "Úroveň záložek", - "includeMetadata": "Zahrnout metadata", - "allowDuplicates": "Povolit duplicity", - "desc": { - "1": "Tento nástroj rozdělí PDF soubor na více PDF podle struktury kapitol.", - "2": "Úroveň záložek: Vyberte úroveň záložek pro rozdělení (0 pro nejvyšší úroveň, 1 pro druhou úroveň atd.).", - "3": "Zahrnout metadata: Pokud je zaškrtnuto, metadata původního PDF budou zahrnuta v každém rozděleném PDF.", - "4": "Povolit duplicity: Pokud je zaškrtnuto, umožňuje vytvoření samostatných PDF z více záložek na stejné stránce." - }, - "submit": "Rozdělit PDF" - }, - "fileChooser": { - "click": "Kliknout", - "or": "nebo", - "dragAndDrop": "Přetáhnout", - "dragAndDropPDF": "Přetáhnout PDF soubor", - "dragAndDropImage": "Přetáhnout obrázek", - "hoveredDragAndDrop": "Přetáhněte soubor(y) sem", - "extractPDF": "Extrahování..." - }, - "releases": { - "footer": "Vydání", - "title": "Poznámky k vydání", - "header": "Poznámky k vydání", - "current": { - "version": "Aktuální vydání" - }, - "note": "Poznámky k vydání jsou dostupné pouze v angličtině" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/da-DK/translation.json b/frontend/dist/locales/da-DK/translation.json deleted file mode 100644 index 668a3f56f..000000000 --- a/frontend/dist/locales/da-DK/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Skriftstørrelse", - "fontName": "Skriftnavn", - "title": "Tilføj Sidenumre", - "header": "Tilføj Sidenumre", - "selectText": { - "1": "Vælg PDF-fil:", - "2": "Marginstørrelse", - "3": "Plassering", - "4": "Startnummer", - "5": "Sider at nummerere", - "6": "Brugerdefineret Tekst" - }, - "customTextDesc": "Brugerdefineret Tekst", - "numberPagesDesc": "Hvilke sider der skal nummereres, standard 'alle', accepterer også 1-5 eller 2,5,9 osv.", - "customNumberDesc": "Standard er {n}, accepterer også 'Side {n} af {total}', 'Tekst-{n}', '{filnavn}-{n}", - "submit": "Tilføj Sidenumre" - }, - "pdfPrompt": "Vælg PDF-fil(er)", - "multiPdfPrompt": "Vælg PDF-filerne (2+)", - "multiPdfDropPrompt": "Vælg (eller drag & drop) alle PDF-filerne du skal bruge", - "imgPrompt": "Vælg Billede(r)", - "genericSubmit": "Indsend", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Advarsel: Denne proces kan tage op til et helt minut, alt efter størrelsen på filen", - "pageOrderPrompt": "Brugerdefineret siderækkefølge (Indtast en kommasepareret liste af sidenumre eller funktioner som 2n+1) :", - "pageSelectionPrompt": "Brugerdefineret sidevalg (Indtast en kommasepareret liste af sidenumre 1,5,6 eller funktioner som 2n+1) :", - "goToPage": "Gå", - "true": "Sandt", - "false": "Falsk", - "unknown": "Ukendt", - "save": "Gem", - "saveToBrowser": "Gem til browser", - "close": "Luk", - "filesSelected": "Filer valgt", - "noFavourites": "Ingen favoritter tilføjet", - "downloadComplete": "Download fuldført", - "bored": "Træt af at vente?", - "alphabet": "Alfabet", - "downloadPdf": "Download PDF", - "text": "Tekst", - "font": "Skrifttype", - "selectFillter": "-- Vælg --", - "pageNum": "Sidenummer", - "sizes": { - "small": "Lille", - "medium": "Mellem", - "large": "Stor", - "x-large": "X-Stor" - }, - "error": { - "pdfPassword": "PDF-dokumentet er beskyttet med adgangskode, og enten blev adgangskoden ikke angivet eller var forkert", - "_value": "Fejl", - "sorry": "Beklager fejlen!", - "needHelp": "Brug for hjælp / Fundet et problem?", - "contactTip": "Hvis du stadig har problemer, skal du endelig tage kontakt til os, for at få hjælp. Du kan oprette en ticket på vores Github-side eller tage kontakt til os via Discord:", - "404": { - "head": "404 - Siden ikke fundet | Ups, vi er viklet helt ind i kode!", - "1": "Vi kan ikke finde siden du leder efter.", - "2": "Noget gik galt" - }, - "github": "Indsend en ticket på GitHub", - "showStack": "Vis Stack Trace", - "copyStack": "Kopier Stack Trace", - "githubSubmit": "GitHub - Indsend en ticket", - "discordSubmit": "Discord - Indsend Support post" - }, - "delete": "Slet", - "username": "Brugernavn", - "password": "Adgangskode", - "welcome": "Velkommen", - "property": "Egenskab", - "black": "Sort", - "white": "Hvid", - "red": "Rød", - "green": "Grøn", - "blue": "Blå", - "custom": "Brugerdefineret...", - "WorkInProgess": "Arbejde i gang, Kan muligvis ikke virke eller have fejl, Rapportér venligst eventuelle problemer!", - "poweredBy": "Drevet af", - "yes": "Ja", - "no": "Nej", - "changedCredsMessage": "Legitimationsoplysninger ændret!", - "notAuthenticatedMessage": "Bruger ikke autoriseret.", - "userNotFoundMessage": "Bruger ikke fundet.", - "incorrectPasswordMessage": "Nuværende adgangskode er forkert.", - "usernameExistsMessage": "Nyt brugernavn findes allerede.", - "invalidUsernameMessage": "Ugyldigt brugernavn, brugernavn må kun indeholde bogstaver, tal og følgende specialtegn @._+- eller skal være en gyldig e-mailadresse.", - "invalidPasswordMessage": "Adgangskoden må ikke være tom og må ikke have mellemrum i begyndelsen eller slutningen.", - "confirmPasswordErrorMessage": "Ny adgangskode og Bekræft ny adgangskode skal matche.", - "deleteCurrentUserMessage": "Kan ikke slette den aktuelt indloggede bruger.", - "deleteUsernameExistsMessage": "Brugernavnet eksisterer ikke og kan ikke slettes.", - "downgradeCurrentUserMessage": "Kan ikke nedgradere den aktuelle brugers rolle", - "disabledCurrentUserMessage": "Den aktuelle bruger kan ikke deaktiveres", - "downgradeCurrentUserLongMessage": "Kan ikke nedgradere den aktuelle brugers rolle. Derfor vil den aktuelle bruger ikke blive vist.", - "userAlreadyExistsOAuthMessage": "Brugeren eksisterer allerede som en OAuth2-bruger.", - "userAlreadyExistsWebMessage": "Brugeren eksisterer allerede som en webbruger.", - "oops": "Ups!", - "help": "Hjælp", - "goHomepage": "Gå til hovedsiden", - "joinDiscord": "Deltag i vores Discord-server", - "seeDockerHub": "Se Docker Hub", - "visitGithub": "Besøg Github Repository", - "donate": "Donér", - "color": "Farve", - "sponsor": "Sponsorer", - "info": "Info", - "pro": "Pro", - "page": "Sidenummer", - "pages": "Sideantal", - "loading": "Laster...", - "addToDoc": "Tilføj til Dokument", - "reset": "Reset", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Privacy Policy", - "terms": "Vilkår og betingelser", - "accessibility": "Adgangsnævnteglen", - "cookie": "Cokiebelejring", - "impressum": "Angivelse af ansvar", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Pipeline Menu (Beta)", - "uploadButton": "Upload Brugerdefineret", - "configureButton": "Konfigurér", - "defaultOption": "Brugerdefineret", - "submitButton": "Indsend", - "help": "Pipeline Hjælp", - "scanHelp": "Mappe Scanning Hjælp", - "deletePrompt": "Er du sikker på, at du vil slette pipeline", - "tags": "automatisér,sekvens,scriptet,batch-proces", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Pipeline Konfiguration", - "pipelineNameLabel": "Pipeline Navn", - "saveSettings": "Gem Operationsindstillinger", - "pipelineNamePrompt": "Indtast pipeline navn her", - "selectOperation": "Vælg Operation", - "addOperationButton": "Tilføj operation", - "pipelineHeader": "Pipeline:", - "saveButton": "Download", - "validateButton": "Validér" - }, - "enterpriseEdition": { - "button": "Opgrader til Pro", - "warning": "Denne funktion er kun tilgængelig for Pro-brugere.", - "yamlAdvert": "Stirling PDF Pro understøtter YAML-konfigurationsfiler og andre SSO-funktioner.", - "ssoAdvert": "søger du flere funktioner til brugerstyring? Prøv Stirling PDF Pro" - }, - "analytics": { - "title": "Vil du gøre Stirling PDF bedre?", - "paragraph1": "Stirling PDF har indsat analytics for at hjælpe os med at forbedre produktet. Vi følger ikke nogen personoplysninger eller filinhold.", - "paragraph2": "Bevægelsesmæssigt aktiver du analytics for at hjælpe Stirling-PDF med at vokse og til atstå os bedre at forstå vores brugere.", - "enable": "Aktivér analytics", - "disable": "Deaktiver analytics", - "settings": "Du kan ændre analytics-indstillingerne i config/settings.yml-filen" - }, - "navbar": { - "favorite": "Favoritter", - "recent": "New and recently updated", - "darkmode": "Mørk Tilstand", - "language": "Sprog", - "settings": "Indstillinger", - "allTools": "Værktøjer", - "multiTool": "Multi Værktøjer", - "search": "Search", - "sections": { - "organize": "Organisér", - "convertTo": "Konvertér til PDF", - "convertFrom": "Konvertér fra PDF", - "security": "Signér & Sikkerhed", - "advance": "Avanceret", - "edit": "Vis & Redigér", - "popular": "Populære" - } - }, - "settings": { - "title": "Indstillinger", - "update": "Opdatering tilgængelig", - "updateAvailable": "{0} er den aktuelt installerede version. En ny version ({1}) er tilgængelig.", - "appVersion": "App Version:", - "downloadOption": { - "title": "Vælg download mulighed (For enkelt fil ikke-zip downloads):", - "1": "Åbn i samme vindue", - "2": "Åbn i nyt vindue", - "3": "Download fil" - }, - "zipThreshold": "Zip filer når antallet af downloadede filer overstiger", - "signOut": "Log ud", - "accountSettings": "Kontoindstillinger", - "bored": { - "help": "Aktiverer påskeæg spil" - }, - "cacheInputs": { - "name": "Gem formularinput", - "help": "Aktivér for at gemme tidligere anvendte input til fremtidige kørsler" - } - }, - "changeCreds": { - "title": "Skift Legitimationsoplysninger", - "header": "Opdater Dine Kontooplysninger", - "changePassword": "Du bruger standard loginoplysninger. Indtast venligst en ny adgangskode", - "newUsername": "Nyt Brugernavn", - "oldPassword": "Nuværende Adgangskode", - "newPassword": "Ny Adgangskode", - "confirmNewPassword": "Bekræft Ny Adgangskode", - "submit": "Indsend Ændringer" - }, - "account": { - "title": "Kontoindstillinger", - "accountSettings": "Kontoindstillinger", - "adminSettings": "Administratorindstillinger - Se og Tilføj Brugere", - "userControlSettings": "Brugerkontrolindstillinger", - "changeUsername": "Skift Brugernavn", - "newUsername": "Nyt Brugernavn", - "password": "Bekræftelsesadgangskode", - "oldPassword": "Gammel adgangskode", - "newPassword": "Ny Adgangskode", - "changePassword": "Skift Adgangskode", - "confirmNewPassword": "Bekræft Ny Adgangskode", - "signOut": "Log ud", - "yourApiKey": "Din API-nøgle", - "syncTitle": "Synkroniser browserindstillinger med Konto", - "settingsCompare": "Indstillinger Sammenligning:", - "property": "Egenskab", - "webBrowserSettings": "Webbrowser Indstilling", - "syncToBrowser": "Synkroniser Konto -> Browser", - "syncToAccount": "Synkroniser Konto <- Browser" - }, - "adminUserSettings": { - "title": "Brugerkontrolindstillinger", - "header": "Admin Brugerkontrolindstillinger", - "admin": "Administrer", - "user": "Bruger", - "addUser": "Tilføj Ny Bruger", - "deleteUser": "Slet Bruger", - "confirmDeleteUser": "Skal brugeren slettes?", - "confirmChangeUserStatus": "Skal brugeren deaktiveres/aktiveres?", - "usernameInfo": "Brugernavn må kun indeholde bogstaver, tal og følgende specialtegn @._+- eller skal være en gyldig e-mailadresse.", - "roles": "Roller", - "role": "Rolle", - "actions": "Handlinger", - "apiUser": "Begrænset API-bruger", - "extraApiUser": "Yderligere Begrænset API-bruger", - "webOnlyUser": "Kun Web-bruger", - "demoUser": "Demo-bruger (Ingen brugerdefinerede indstillinger)", - "internalApiUser": "Intern API-bruger", - "forceChange": "Tving bruger til at ændre adgangskode ved login", - "submit": "Gem Bruger", - "changeUserRole": "Ændre Brugerens Rolle", - "authenticated": "Autentificeret", - "editOwnProfil": "Rediger egen profil", - "enabledUser": "aktiveret bruger", - "disabledUser": "deaktiveret bruger", - "activeUsers": "Aktive Brugere:", - "disabledUsers": "Deaktiverede Brugere:", - "totalUsers": "Samlet Antal Brugere:", - "lastRequest": "Seneste Anmodning", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Database Import/Eksport", - "header": "Database Import/Eksport", - "fileName": "Filnavn", - "creationDate": "Oprettelsesdato", - "fileSize": "Filstørrelse", - "deleteBackupFile": "Slet Backup-fil", - "importBackupFile": "Importér Backup-fil", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Download Backup-fil", - "info_1": "Ved import af data er det afgørende at sikre den korrekte struktur. Hvis du er usikker på, hvad du gør, søg råd og støtte fra en professionel. En fejl i strukturen kan forårsage applikationsfejl, op til og med fuldstændig manglende evne til at køre applikationen.", - "info_2": "Filnavnet er ligegyldigt ved upload. Det vil blive omdøbt bagefter for at følge formatet backup_user_yyyyMMddHHmm.sql, hvilket sikrer en konsistent navngivningskonvention.", - "submit": "Importér Backup", - "importIntoDatabaseSuccessed": "Import i database lykkedes", - "backupCreated": "Database backup successful", - "fileNotFound": "Fil ikke fundet", - "fileNullOrEmpty": "Fil må ikke være null eller tom", - "failedImportFile": "Kunne ikke importere fil", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "Din sesions tid har udløbet. Genlad siden og prøv igen.", - "refreshPage": "Refresh Page" - }, - "home": { - "desc": "Dit lokalt hostede one-stop-shop for alle dine PDF-behov.", - "searchBar": "Søg efter funktioner...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Se, annotér, tilføj tekst eller billeder" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "PDF Multi Værktøj", - "desc": "Flet, Rotér, Omarrangér og Fjern sider" - }, - "merge": { - "title": "Flet", - "desc": "Flet nemt flere PDF'er til én." - }, - "split": { - "title": "Opdel", - "desc": "Opdel PDF'er i flere dokumenter" - }, - "rotate": { - "title": "Rotér", - "desc": "Rotér nemt dine PDF'er." - }, - "imageToPdf": { - "title": "Billede til PDF", - "desc": "Konvertér et billede (PNG, JPEG, GIF) til PDF." - }, - "pdfToImage": { - "title": "PDF til Billede", - "desc": "Konvertér en PDF til et billede. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Organisér", - "desc": "Fjern/Omarrangér sider i vilkårlig rækkefølge" - }, - "addImage": { - "title": "Tilføj billede", - "desc": "Tilføjer et billede på en bestemt placering på PDF'en" - }, - "watermark": { - "title": "Tilføj Vandmærke", - "desc": "Tilføj et brugerdefineret vandmærke til dit PDF-dokument." - }, - "permissions": { - "title": "Ændre Tilladelser", - "desc": "Ændre tilladelserne for dit PDF-dokument" - }, - "removePages": { - "title": "Fjern", - "desc": "Slet uønskede sider fra dit PDF-dokument." - }, - "addPassword": { - "title": "Tilføj Adgangskode", - "desc": "Kryptér dit PDF-dokument med en adgangskode." - }, - "removePassword": { - "title": "Fjern Adgangskode", - "desc": "Fjern adgangskodebeskyttelse fra dit PDF-dokument." - }, - "compressPdfs": { - "title": "Komprimer", - "desc": "Komprimer PDF'er for at reducere deres filstørrelse." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Ændre Metadata", - "desc": "Ændre/Fjern/Tilføj metadata fra et PDF-dokument" - }, - "fileToPDF": { - "title": "Konvertér fil til PDF", - "desc": "Konvertér næsten enhver fil til PDF (DOCX, PNG, XLS, PPT, TXT og mere)" - }, - "ocr": { - "title": "OCR / Oprydning af scanninger", - "desc": "Oprydning af scanninger og genkender tekst fra billeder i en PDF og tilføjer den igen som tekst." - }, - "extractImages": { - "title": "Udtræk Billeder", - "desc": "Udtrækker alle billeder fra en PDF og gemmer dem som zip" - }, - "pdfToPDFA": { - "title": "PDF til PDF/A", - "desc": "Konvertér PDF til PDF/A for langtidsopbevaring" - }, - "PDFToWord": { - "title": "PDF til Word", - "desc": "Konvertér PDF til Word-formater (DOC, DOCX og ODT)" - }, - "PDFToPresentation": { - "title": "PDF til Præsentation", - "desc": "Konvertér PDF til Præsentationsformater (PPT, PPTX og ODP)" - }, - "PDFToText": { - "title": "PDF til RTF (Tekst)", - "desc": "Konvertér PDF til Tekst eller RTF-format" - }, - "PDFToHTML": { - "title": "PDF til HTML", - "desc": "Konvertér PDF til HTML-format" - }, - "PDFToXML": { - "title": "PDF til XML", - "desc": "Konvertér PDF til XML-format" - }, - "ScannerImageSplit": { - "title": "Detektér/Opdel Scannede fotosb", - "desc": "Opdeler flere fotos fra et enkelt foto/PDF" - }, - "sign": { - "title": "Underskriv", - "desc": "Tilføjer underskrift til PDF ved tegning, tekst eller billede" - }, - "flatten": { - "title": "Udjævn", - "desc": "Fjern alle interaktive elementer og formularer fra en PDF" - }, - "repair": { - "title": "Reparér", - "desc": "Forsøger at reparere en korrupt/ødelagt PDF" - }, - "removeBlanks": { - "title": "Fjern Tomme sider", - "desc": "Detekterer og fjerner tomme sider fra et dokument" - }, - "removeAnnotations": { - "title": "Fjern Anmærkninger", - "desc": "Fjerner alle kommentarer/anmærkninger fra en PDF" - }, - "compare": { - "title": "Sammenlign", - "desc": "Sammenligner og viser forskellene mellem 2 PDF-dokumenter" - }, - "certSign": { - "title": "Underskriv med Certifikat", - "desc": "Underskriver en PDF med et Certifikat/Nøgle (PEM/P12)" - }, - "removeCertSign": { - "title": "Fjern Certifikatunderskrift", - "desc": "Fjern certifikatunderskrift fra PDF" - }, - "pageLayout": { - "title": "Multi-Side Layout", - "desc": "Flet flere sider af et PDF-dokument til en enkelt side" - }, - "scalePages": { - "title": "Justér sidestørrelse/skala", - "desc": "Ændre størrelsen/skalaen af en side og/eller dens indhold." - }, - "pipeline": { - "title": "Pipeline (Avanceret)", - "desc": "Kør flere handlinger på PDF'er ved at definere pipeline-scripts" - }, - "add-page-numbers": { - "title": "Tilføj Sidenumre", - "desc": "Tilføj Sidenumre gennem hele dokumentet på et bestemt sted" - }, - "auto-rename": { - "title": "Auto Omdøb PDF-fil", - "desc": "Auto omdøber en PDF-fil baseret på dens detekterede overskrift" - }, - "adjust-contrast": { - "title": "Justér Farver/Kontrast", - "desc": "Justér Kontrast, Mætning og Lysstyrke af en PDF" - }, - "crop": { - "title": "Beskær PDF", - "desc": "Beskær en PDF for at reducere dens størrelse (bevarer tekst!)" - }, - "autoSplitPDF": { - "title": "Auto Opdel Sider", - "desc": "Auto Opdel Scannede PDF'er med fysisk scannet side-splitter QR-kode" - }, - "sanitizePdf": { - "title": "Rens", - "desc": "Fjern scripts og andre elementer fra PDF-filer" - }, - "URLToPDF": { - "title": "URL/Hjemmeside Til PDF", - "desc": "Konverterer enhver http(s)URL til PDF" - }, - "HTMLToPDF": { - "title": "HTML til PDF", - "desc": "Konverterer enhver HTML-fil eller zip til PDF" - }, - "MarkdownToPDF": { - "title": "Markdown til PDF", - "desc": "Konverterer enhver Markdown-fil til PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Få ALLE Oplysninger om PDF", - "desc": "Henter alle mulige oplysninger om PDF'er" - }, - "extractPage": { - "title": "Udtræk side(r)", - "desc": "Udtrækker udvalgte sider fra PDF" - }, - "PdfToSinglePage": { - "title": "PDF til Enkelt Stor Side", - "desc": "Fletter alle PDF-sider til én stor enkelt side" - }, - "showJS": { - "title": "Vis Javascript", - "desc": "Søger og viser eventuelt JS indsprøjtet i en PDF" - }, - "autoRedact": { - "title": "Auto Rediger", - "desc": "Auto Redigerer (Sværter) tekst i en PDF baseret på input tekst" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF til CSV", - "desc": "Udtrækker Tabeller fra en PDF og konverterer dem til CSV" - }, - "autoSizeSplitPDF": { - "title": "Auto Opdel efter Størrelse/Antal", - "desc": "Opdel en enkelt PDF i flere dokumenter baseret på størrelse, sideantal eller dokumentantal" - }, - "overlay-pdfs": { - "title": "Overlejr PDF'er", - "desc": "Overlejrer PDF'er oven på en anden PDF" - }, - "split-by-sections": { - "title": "Opdel PDF efter Sektioner", - "desc": "Opdel hver side af en PDF i mindre horisontale og vertikale sektioner" - }, - "AddStampRequest": { - "title": "Tilføj Stempel til PDF", - "desc": "Tilføj tekst eller tilføj billedstempel på bestemte placeringer" - }, - "removeImagePdf": { - "title": "Fjern billede", - "desc": "Fjern billede fra PDF for at reducere filstørrelse" - }, - "splitPdfByChapters": { - "title": "Partitioner PDF efter kapitler", - "desc": "Partitioner en PDF i flere filer baseret på dens kapitelstruktur." - }, - "validateSignature": { - "title": "Validate PDF Signature", - "desc": "Verify digital signatures and certificates in PDF documents" - }, - "replaceColorPdf": { - "title": "Replace and Invert Color", - "desc": "Erstatt farve for tekst og baggrund i en PDF og omgivende farve til fuld farve af PDF for at redusere filstørrelsen." - } - }, - "viewPdf": { - "tags": "se,læs,annotér,tekst,billede", - "title": "View/Edit PDF", - "header": "Se PDF" - }, - "multiTool": { - "tags": "Multi Værktøj,Multi operation,UI,klik træk,front end,klient side,interaktiv,interagerbar,flyt", - "title": "PDF Multi Værktøj", - "header": "PDF Multi Værktøj", - "uploadPrompts": "Filnavn", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "selectPages": "Page Select", - "selectedPages": "Selected Pages", - "page": "Page", - "deleteSelected": "Delete Selected", - "downloadAll": "Export", - "downloadSelected": "Export Selected", - "insertPageBreak": "Insert Page Break", - "addFile": "Add File", - "rotateLeft": "Rotate Left", - "rotateRight": "Rotate Right", - "split": "Split", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "Delete", - "dragDropMessage": "Page(s) Selected", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "flet,Sideoperationer,Back end,server side", - "title": "Flet", - "header": "Flet flere PDF'er (2+)", - "sortByName": "Sortér efter navn", - "sortByDate": "Sortér efter dato", - "removeCertSign": "Fjern digital signatur i den flettede fil?", - "submit": "Flet" - }, - "split": { - "tags": "Sideoperationer,opdel,Multi Side,klip,server side", - "title": "Opdel PDF", - "header": "Opdel PDF", - "desc": { - "1": "De tal, du vælger, er det sidenummer, du ønsker at foretage en opdeling på", - "2": "Som sådan ville valg af 1,3,7-9 opdele et 10-siders dokument i 6 separate PDF'er med:", - "3": "Dokument #1: Side 1", - "4": "Dokument #2: Side 2 og 3", - "5": "Dokument #3: Side 4, 5, 6 og 7", - "6": "Dokument #4: Side 8", - "7": "Dokument #5: Side 9", - "8": "Dokument #6: Side 10" - }, - "splitPages": "Indtast sider at opdele på:", - "submit": "Opdel" - }, - "rotate": { - "tags": "server side", - "title": "Rotér PDF", - "header": "Rotér PDF", - "selectAngle": "Vælg rotationsvinkel (i multipla af 90 grader):", - "submit": "Rotér" - }, - "imageToPdf": { - "tags": "konvertering,img,jpg,billede,foto" - }, - "pdfToImage": { - "tags": "konvertering,img,jpg,billede,foto", - "title": "PDF til Billede", - "header": "PDF til Billede", - "selectText": "Billedformat", - "singleOrMultiple": "Side til Billede resultattype", - "single": "Enkelt Stort Billede Kombinerer alle sider", - "multi": "Flere Billeder, et billede pr. side", - "colorType": "Farvetype", - "color": "Farve", - "grey": "Gråtone", - "blackwhite": "Sort og Hvid (Kan miste data!)", - "submit": "Konvertér", - "info": "Python er ikke installeret. Påkrævet for WebP-konvertering.", - "placeholder": "(f.eks. 1,2,8 eller 4,7,12-16 eller 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,lige,ulige,sortér,flyt", - "title": "Side Organisator", - "header": "PDF Side Organisator", - "submit": "Omarrangér Sider", - "mode": { - "_value": "Tilstand", - "1": "Brugerdefineret Siderækkefølge", - "2": "Omvendt Rækkefølge", - "3": "Duplex Sortering", - "4": "Hæfte Sortering", - "5": "Sidehæftet Hæfte Sortering", - "6": "Ulige-Lige Opdeling", - "7": "Fjern Første", - "8": "Fjern Sidste", - "9": "Fjern Første og Sidste", - "10": "Ulige-Lige Sammenføjning", - "11": "Duplicate all pages" - }, - "placeholder": "(f.eks. 1,3,2 eller 4-8,2,10-12 eller 2n-1)" - }, - "addImage": { - "tags": "img,jpg,billede,foto", - "title": "Tilføj Billede", - "header": "Tilføj billede til PDF", - "everyPage": "Hver Side?", - "upload": "Tilføj billede", - "submit": "Tilføj billede" - }, - "watermark": { - "tags": "Tekst,gentagne,etiket,egen,ophavsret,varemærke,img,jpg,billede,foto", - "title": "Tilføj Vandmærke", - "header": "Tilføj Vandmærke", - "customColor": "Brugerdefineret Tekstfarve", - "selectText": { - "1": "Vælg PDF til at tilføje vandmærke:", - "2": "Vandmærketekst:", - "3": "Skriftstørrelse:", - "4": "Vendt Side (0-360):", - "5": "breddeAfstand (Afstand mellem hvert vandmærke vandret):", - "6": "højdeAfstand (Afstand mellem hvert vandmærke lodret):", - "7": "Gennemsigtighed (0% - 100%):", - "8": "Vandmærketype:", - "9": "Vandmærkebillede:", - "10": "Konvertér PDF til PDF-Billede" - }, - "submit": "Tilføj Vandmærke", - "type": { - "1": "Tekst", - "2": "Billede" - } - }, - "permissions": { - "tags": "læs,skriv,redigér,print", - "title": "Ændre Tilladelser", - "header": "Ændre Tilladelser", - "warning": "Advarsel for at gøre disse tilladelser uændrede anbefales det at indstille dem med en adgangskode via tilføj-adgangskode siden", - "selectText": { - "1": "Vælg PDF for at ændre tilladelser", - "2": "Tilladelser at indstille", - "3": "Forhindre samling af dokument", - "4": "Forhindre indholdsudtrækning", - "5": "Forhindre udtrækning for tilgængelighed", - "6": "Forhindre udfyldning af formular", - "7": "Forhindre ændring", - "8": "Forhindre anmærkningsændring", - "9": "Forhindre udskrivning", - "10": "Forhindre udskrivning af forskellige formater" - }, - "submit": "Ændre" - }, - "removePages": { - "tags": "Fjern sider,slet sider" - }, - "addPassword": { - "tags": "sikker,sikkerhed", - "title": "Tilføj Adgangskode", - "header": "Tilføj adgangskode (Kryptér)", - "selectText": { - "1": "Vælg PDF til kryptering", - "2": "Brugeradgangskode", - "3": "Krypteringsnøglelængde", - "4": "Højere værdier er stærkere, men lavere værdier har bedre kompatibilitet.", - "5": "Tilladelser at indstille (Anbefales at bruges sammen med Ejer adgangskode)", - "6": "Forhindre samling af dokument", - "7": "Forhindre indholdsudtrækning", - "8": "Forhindre udtrækning for tilgængelighed", - "9": "Forhindre udfyldning af formular", - "10": "Forhindre ændring", - "11": "Forhindre anmærkningsændring", - "12": "Forhindre udskrivning", - "13": "Forhindre udskrivning af forskellige formater", - "14": "Ejer Adgangskode", - "15": "Begrænser hvad der kan gøres med dokumentet, når det er åbnet (Understøttes ikke af alle læsere)", - "16": "Begrænser åbningen af selve dokumentet" - }, - "submit": "Kryptér" - }, - "removePassword": { - "tags": "sikker,Dekryptér,sikkerhed,fjern adgangskode,slet adgangskode", - "title": "Fjern adgangskode", - "header": "Fjern adgangskode (Dekryptér)", - "selectText": { - "1": "Vælg PDF til Dekryptering", - "2": "Adgangskode" - }, - "submit": "Fjern" - }, - "compressPdfs": { - "tags": "klem,lille,tiny" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Titel,forfatter,dato,oprettelse,tid,udgiver,producent,statistik", - "title": "Ændre Metadata", - "header": "Ændre Metadata", - "selectText": { - "1": "Rediger venligst de variabler, du ønsker at ændre", - "2": "Slet al metadata", - "3": "Vis Brugerdefineret Metadata:", - "4": "Anden Metadata:", - "5": "Tilføj Brugerdefineret Metadata Post" - }, - "author": "Forfatter:", - "creationDate": "Oprettelsesdato (åååå/MM/dd TT:mm:ss):", - "creator": "Skaber:", - "keywords": "Nøgleord:", - "modDate": "Ændringsdato (åååå/MM/dd TT:mm:ss):", - "producer": "Producent:", - "subject": "Emne:", - "trapped": "Fanget:", - "submit": "Ændre" - }, - "fileToPDF": { - "tags": "transformation,format,dokument,billede,dias,tekst,konvertering,kontor,docs,word,excel,powerpoint", - "title": "Fil til PDF", - "header": "Konvertér enhver fil til PDF", - "credit": "Denne tjeneste bruger LibreOffice og Unoconv til filkonvertering.", - "supportedFileTypesInfo": "Understøttede Filtyper", - "supportedFileTypes": "Understøttede filtyper bør inkludere nedenstående, men for en fuld opdateret liste over understøttede formater, se venligst LibreOffice-dokumentationen", - "submit": "Konvertér til PDF" - }, - "ocr": { - "tags": "genkendelse,tekst,billede,scan,læs,identificér,detektion,redigerbar", - "title": "OCR / Scan Oprydning", - "header": "Oprydning af Scanninger / OCR (Optisk Karaktergenkendelse)", - "selectText": { - "1": "Vælg sprog, der skal detekteres i PDF'en (De angivne er dem, der i øjeblikket er registreret):", - "2": "Producér tekstfil indeholdende OCR-tekst sammen med den OCR'ede PDF", - "3": "Korrigér sider, der blev scannet i en skæv vinkel ved at rotere dem tilbage på plads", - "4": "Rens siden, så det er mindre sandsynligt, at OCR finder tekst i baggrundsstøj. (Ingen ændring i output)", - "5": "Rens siden, så det er mindre sandsynligt, at OCR finder tekst i baggrundsstøj, bevarer oprydning i output.", - "6": "Ignorerer sider, der har interaktiv tekst på dem, OCR'er kun sider, der er billeder", - "7": "Tving OCR, vil OCR'e hver side og fjerne alle originale tekstelementer", - "8": "Normal (Vil give fejl, hvis PDF'en indeholder tekst)", - "9": "Yderligere Indstillinger", - "10": "OCR-tilstand", - "11": "Fjern billeder efter OCR (Fjerner ALLE billeder, kun nyttigt hvis det er en del af konverteringstrinnet)", - "12": "Renderingstype (Avanceret)" - }, - "help": "Læs venligst denne dokumentation om, hvordan man bruger dette til andre sprog og/eller brug uden for docker", - "credit": "Denne tjeneste bruger qpdf og Tesseract til OCR.", - "submit": "Behandl PDF med OCR" - }, - "extractImages": { - "tags": "billede,foto,gem,arkiv,zip,fang,grib", - "title": "Udtræk Billeder", - "header": "Udtræk Billeder", - "selectText": "Vælg billedformat til at konvertere udtrukne billeder til", - "allowDuplicates": "Gem duplikerede billeder", - "submit": "Udtræk" - }, - "pdfToPDFA": { - "tags": "arkiv,langtids,standard,konvertering,opbevaring,bevaring", - "title": "PDF Til PDF/A", - "header": "PDF Til PDF/A", - "credit": "Denne tjeneste bruger libreoffice til PDF/A-konvertering", - "submit": "Konvertér", - "tip": "Fungerer i øjeblikket ikke for flere input på én gang", - "outputFormat": "Outputformat", - "pdfWithDigitalSignature": "PDF'en indeholder en digital signatur. Dette vil blive fjernet i næste trin." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformation,format,konvertering,kontor,microsoft,docfil", - "title": "PDF til Word", - "header": "PDF til Word", - "selectText": { - "1": "Output filformat" - }, - "credit": "Denne tjeneste bruger LibreOffice til filkonvertering.", - "submit": "Konvertér" - }, - "PDFToPresentation": { - "tags": "dias,show,kontor,microsoft", - "title": "PDF til Præsentation", - "header": "PDF til Præsentation", - "selectText": { - "1": "Output filformat" - }, - "credit": "Denne tjeneste bruger LibreOffice til filkonvertering.", - "submit": "Konvertér" - }, - "PDFToText": { - "tags": "richtextformat,rich text format", - "title": "PDF til RTF (Tekst)", - "header": "PDF til RTF (Tekst)", - "selectText": { - "1": "Output filformat" - }, - "credit": "Denne tjeneste bruger LibreOffice til filkonvertering.", - "submit": "Konvertér" - }, - "PDFToHTML": { - "tags": "webindhold,browservenlig", - "title": "PDF til HTML", - "header": "PDF til HTML", - "credit": "Denne tjeneste bruger pdftohtml til filkonvertering.", - "submit": "Konvertér" - }, - "PDFToXML": { - "tags": "dataudtræk,struktureret-indhold,interop,transformation,konvertér", - "title": "PDF til XML", - "header": "PDF til XML", - "credit": "Denne tjeneste bruger LibreOffice til filkonvertering.", - "submit": "Konvertér" - }, - "ScannerImageSplit": { - "tags": "adskil,auto-detektér,scanninger,multi-foto,organisér", - "selectText": { - "1": "Vinkeltærskel:", - "2": "Indstiller den minimale absolutte vinkel, der kræves for at billedet roteres (standard: 10).", - "3": "Tolerancen:", - "4": "Bestemmer området for farvevariation omkring den estimerede baggrundsfarve (standard: 30).", - "5": "Minimum Areal:", - "6": "Indstiller den minimale arealtærskel for et foto (standard: 10000).", - "7": "Minimum Kontur Areal:", - "8": "Indstiller den minimale kontur arealtærskel for et foto", - "9": "Kantstørrelse:", - "10": "Indstiller størrelsen på kanten, der tilføjes og fjernes for at forhindre hvide kanter i outputtet (standard: 1)." - }, - "info": "Python er ikke installeret. Det er nødvendigt for at køre." - }, - "sign": { - "tags": "autorisér,initialer,tegnet-underskrift,tekst-underskrift,billede-underskrift", - "title": "Underskriv", - "header": "Underskriv PDF'er", - "upload": "Upload Billede", - "draw": "Tegn Underskrift", - "text": "Tekstinput", - "clear": "Ryd", - "add": "Tilføj", - "saved": "Gemte Signaturer", - "save": "Gem Signatur", - "personalSigs": "Personlige Signaturer", - "sharedSigs": "Delte Signaturer", - "noSavedSigs": "Ingen Gemte Signaturer Fundet", - "addToAll": "Add to all pages", - "delete": "Delete", - "first": "First page", - "last": "Last page", - "next": "Next page", - "previous": "Previous page", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "statisk,deaktivér,ikke-interaktiv,strømlinje", - "title": "Udjævn", - "header": "Udjævn PDF", - "flattenOnlyForms": "Udjævn kun formularer", - "submit": "Udjævn" - }, - "repair": { - "tags": "fix,gendan,korrektion,genvind", - "title": "Reparér", - "header": "Reparér PDF'er", - "submit": "Reparér" - }, - "removeBlanks": { - "tags": "oprydning,strømlinje,ikke-indhold,organisér", - "title": "Fjern Tomme Sider", - "header": "Fjern Tomme Sider", - "threshold": "Pixel Hvidhedstærskel:", - "thresholdDesc": "Tærskel for at bestemme, hvor hvid en hvid pixel skal være for at blive klassificeret som 'Hvid'. 0 = Sort, 255 ren hvid.", - "whitePercent": "Hvid Procent (%):", - "whitePercentDesc": "Procent af siden, der skal være 'hvide' pixels for at blive fjernet", - "submit": "Fjern Tomme Sider" - }, - "removeAnnotations": { - "tags": "kommentarer,fremhæv,noter,markup,fjern", - "title": "Fjern Anmærkninger", - "header": "Fjern Anmærkninger", - "submit": "Fjern" - }, - "compare": { - "tags": "differentier,kontrast,ændringer,analyse", - "title": "Sammenlign", - "header": "Sammenlign PDF'er", - "highlightColor": { - "1": "Fremhævningsfarve 1:", - "2": "Fremhævningsfarve 2:" - }, - "document": { - "1": "Dokument 1", - "2": "Dokument 2" - }, - "submit": "Sammenlign", - "complex": { - "message": "Et eller begge af de angivne dokumenter er store filer, præcisionen ved sammenligningen kan geminse." - }, - "large": { - "file": { - "message": "Et eller Begge af de Angivne Dokumenter Er For Store At Behandle" - } - }, - "no": { - "text": { - "message": "Et eller Begge Af de Vælgede PDFs Har Ingen Tekstindhold. Vælg Vores PDFs Med Tekst for Sammenligning." - } - } - }, - "certSign": { - "tags": "autentificér,PEM,P12,officiel,kryptér", - "title": "Certifikat Underskrivning", - "header": "Underskriv en PDF med dit certifikat (Arbejde i gang)", - "selectPDF": "Vælg en PDF-fil til underskrivning:", - "jksNote": "Bemærk: Hvis din certifikattype ikke er angivet nedenfor, skal du konvertere det til en Java Keystore (.jks) fil ved hjælp af keytool kommandolinjeværktøjet. Vælg derefter .jks fil muligheden nedenfor.", - "selectKey": "Vælg Din Private Nøglefil (PKCS#8 format, kan være .pem eller .der):", - "selectCert": "Vælg Din Certifikatfil (X.509 format, kan være .pem eller .der):", - "selectP12": "Vælg Din PKCS#12 Keystore Fil (.p12 eller .pfx) (Valgfrit, Hvis angivet, skal den indeholde din private nøgle og certifikat):", - "selectJKS": "Vælg Din Java Keystore Fil (.jks eller .keystore):", - "certType": "Certifikattype", - "password": "Indtast Din Keystore eller Private Nøgle Adgangskode (Hvis nogen):", - "showSig": "Vis Underskrift", - "reason": "Årsag", - "location": "Placering", - "name": "Navn", - "showLogo": "Vis Logo", - "submit": "Underskriv PDF" - }, - "removeCertSign": { - "tags": "autentificér,PEM,P12,officiel,dekryptér", - "title": "Fjern Certifikat Underskrift", - "header": "Fjern det digitale certifikat fra PDF'en", - "selectPDF": "Vælg en PDF-fil:", - "submit": "Fjern Underskrift" - }, - "pageLayout": { - "tags": "flet,sammensæt,enkelt-visning,organisér", - "title": "Multi-Side Layout", - "header": "Multi-Side Layout", - "pagesPerSheet": "Sider pr. ark:", - "addBorder": "Tilføj Kanter", - "submit": "Indsend" - }, - "scalePages": { - "tags": "ændre størrelse,modificér,dimension,tilpas", - "title": "Justér sidestørrelse", - "header": "Justér sidestørrelse", - "pageSize": "Størrelse på en side i dokumentet.", - "keepPageSize": "Original Size", - "scaleFactor": "Zoom-niveau (beskæring) af en side.", - "submit": "Indsend" - }, - "add-page-numbers": { - "tags": "nummerér,etiket,organisér,indeks" - }, - "auto-rename": { - "tags": "auto-detektér,overskrift-baseret,organisér,omdøb", - "title": "Auto Omdøb", - "header": "Auto Omdøb PDF", - "submit": "Auto Omdøb" - }, - "adjust-contrast": { - "tags": "farvekorrektion,juster,modificér,forbedre" - }, - "crop": { - "tags": "trim,formindsk,redigér,form", - "title": "Beskær", - "header": "Beskær PDF", - "submit": "Indsend" - }, - "autoSplitPDF": { - "tags": "QR-baseret,adskil,scan-segment,organisér", - "title": "Auto Opdel PDF", - "header": "Auto Opdel PDF", - "description": "Udskriv, Indsæt, Scan, upload, og lad os auto-adskille dine dokumenter. Intet manuelt arbejde med sortering nødvendigt.", - "selectText": { - "1": "Udskriv nogle skilleark fra nedenfor (Sort og hvid er fint).", - "2": "Scan alle dine dokumenter på én gang ved at indsætte skillearket mellem dem.", - "3": "Upload den enkelte store scannede PDF-fil og lad Stirling PDF håndtere resten.", - "4": "Skillesider detekteres automatisk og fjernes, hvilket garanterer et pænt endeligt dokument." - }, - "formPrompt": "Indsend PDF indeholdende Stirling-PDF Sideopdelere:", - "duplexMode": "Duplex-tilstand (For- og bagside scanning)", - "dividerDownload2": "Download 'Auto Splitter Divider (med instruktioner).pdf'", - "submit": "Indsend" - }, - "sanitizePdf": { - "tags": "rens,sikker,sikker,fjern-trusler" - }, - "URLToPDF": { - "tags": "web-fangst,gem-side,web-til-dok,arkivér", - "title": "URL Til PDF", - "header": "URL Til PDF", - "submit": "Konvertér", - "credit": "Bruger WeasyPrint" - }, - "HTMLToPDF": { - "tags": "markup,webindhold,transformation,konvertér", - "title": "HTML Til PDF", - "header": "HTML Til PDF", - "help": "Accepterer HTML-filer og ZIP'er indeholdende html/css/billeder osv. der kræves", - "submit": "Konvertér", - "credit": "Bruger WeasyPrint", - "zoom": "Zoom-niveau for visning af hjemmesiden.", - "pageWidth": "Bredde af siden i centimeter. (Tom for standard)", - "pageHeight": "Højde af siden i centimeter. (Tom for standard)", - "marginTop": "Top margin af siden i millimeter. (Tom for standard)", - "marginBottom": "Bund margin af siden i millimeter. (Tom for standard)", - "marginLeft": "Venstre margin af siden i millimeter. (Tom for standard)", - "marginRight": "Højre margin af siden i millimeter. (Tom for standard)", - "printBackground": "Render baggrunden af hjemmesider.", - "defaultHeader": "Aktivér Standard Header (Navn og sidenummerAS", - "cssMediaType": "Ændre CSS-medietypen for siden.", - "none": "Ingen", - "print": "Skriv ud", - "screen": "Skærm" - }, - "MarkdownToPDF": { - "tags": "markup,webindhold,transformation,konvertér", - "title": "Markdown Til PDF", - "header": "Markdown Til PDF", - "submit": "Konvertér", - "help": "Arbejde i gang", - "credit": "Bruger WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "information,data,statistik,statistikker", - "title": "Få Info om PDF", - "header": "Få Info om PDF", - "submit": "Få Info", - "downloadJson": "Download JSON" - }, - "extractPage": { - "tags": "udtræk" - }, - "PdfToSinglePage": { - "tags": "enkelt side" - }, - "showJS": { - "tags": "JS", - "title": "Vis Javascript", - "header": "Vis Javascript", - "downloadJS": "Last ned Javascript", - "submit": "Vis" - }, - "autoRedact": { - "tags": "Rediger,Skjul,sværte,sort,markør,skjult", - "title": "Auto Rediger", - "header": "Auto Rediger", - "colorLabel": "Farve", - "textsToRedactLabel": "Tekst der skal redigeres (linje-adskilt)", - "textsToRedactPlaceholder": "f.eks. \\nFortroligt \\nTop-Hemmelig", - "useRegexLabel": "Brug Regex", - "wholeWordSearchLabel": "Hele Ord Søgning", - "customPaddingLabel": "Brugerdefineret Ekstra Polstring", - "convertPDFToImageLabel": "Konvertér PDF til PDF-Billede (Bruges til at fjerne tekst bag boksen)", - "submitButton": "Indsend" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,Tabeludtrækning,udtræk,konvertér" - }, - "autoSizeSplitPDF": { - "tags": "pdf,opdel,dokument,organisation" - }, - "overlay-pdfs": { - "tags": "Overlejr", - "header": "Overlejr PDF-filer", - "baseFile": { - "label": "Vælg Base PDF-fil" - }, - "overlayFiles": { - "label": "Vælg Overlejrings PDF-filer" - }, - "mode": { - "label": "Vælg Overlejringstilstand", - "sequential": "Sekventiel Overlejring", - "interleaved": "Flettet Overlejring", - "fixedRepeat": "Fast Gentaget Overlejring" - }, - "counts": { - "label": "Antal overlejringer (for Fast Gentaget tilstand)", - "placeholder": "Indtast kommaseparerede tællinger (f.eks. 2,3,1)" - }, - "position": { - "label": "Vælg overlejringsposition", - "foreground": "Forgrund", - "background": "Baggrund" - }, - "submit": "Indsend" - }, - "split-by-sections": { - "tags": "Sektionsopdeling, Opdel, Tilpas", - "title": "Del PDF i Sektioner", - "header": "Del PDF ind i Sektioner", - "horizontal": { - "label": "Horisontal Deling", - "placeholder": "Indtast antal horisontale delinger" - }, - "vertical": { - "label": "Vertikal Deling", - "placeholder": "Indtast antal af vertikale delinger" - }, - "submit": "Del PDF", - "merge": "Slå sammen til én PDF" - }, - "AddStampRequest": { - "tags": "Stempel, Tilføj billede, centrer billede, Vandmærke, PDF, Indlejr, Tilpas", - "header": "Stempel PDF", - "title": "Stempel PDF", - "stampType": "Stempeltype", - "stampText": "Stempeltekst", - "stampImage": "Stempelbillede", - "alphabet": "Alfabet", - "fontSize": "Skrift/Billedstørrelse", - "rotation": "Vendelse", - "opacity": "Gennemsigtighed", - "position": "Plassering", - "overrideX": "Tilsidesæt X-koordinat", - "overrideY": "Tilsidesæt Y-koordinat", - "customMargin": "Brugerdefineret Margin", - "customColor": "Brugerdefineret Tekstfarve", - "submit": "Indsend" - }, - "removeImagePdf": { - "tags": "Fjern Billede,Sideoperationer,Back end,server side" - }, - "splitPdfByChapters": { - "tags": "partitionering,kapitler,merker,organisering" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "Validate PDF Signatures", - "header": "Validate Digital Signatures", - "selectPDF": "Select signed PDF file", - "submit": "Validate Signatures", - "results": "Validation Results", - "status": { - "_value": "Status", - "valid": "Valid", - "invalid": "Invalid" - }, - "signer": "Signer", - "date": "Date", - "reason": "Reason", - "location": "Location", - "noSignatures": "No digital signatures found in this document", - "chain": { - "invalid": "Certificate chain validation failed - cannot verify signer's identity" - }, - "trust": { - "invalid": "Certificate not in trust store - source cannot be verified" - }, - "cert": { - "expired": "Certificate has expired", - "revoked": "Certificate has been revoked", - "info": "Certificate Details", - "issuer": "Issuer", - "subject": "Subject", - "serialNumber": "Serial Number", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "algorithm": "Algorithm", - "keySize": "Key Size", - "version": "Version", - "keyUsage": "Key Usage", - "selfSigned": "Self-Signed", - "bits": "bits" - }, - "signature": { - "info": "Signature Information", - "_value": "Signature", - "mathValid": "Signature is mathematically valid BUT:" - }, - "selectCustomCert": "Custom Certificate File X.509 (Optional)" - }, - "replace-color": { - "title": "Replace-Invert-Color", - "header": "Erstat-omgivende Farve PDF", - "selectText": { - "1": "Erstatt eller omgivende Farvemuligheder", - "2": "Standard (høj kontrastfarver)", - "3": "Brugerdefineret (anpassede farver)", - "4": "Inverter alle farver", - "5": "Høj kontrastfarveindstillinger", - "6": "Hvid tekst på sort baggrund", - "7": "Sort tekst på hvid baggrund", - "8": "Gul tekst på sort baggrund", - "9": "Grøn tekst på sort baggrund", - "10": "Vælg tekstfarve", - "11": "Vælg baggrundsfarve" - }, - "submit": "Erstat" - }, - "replaceColorPdf": { - "tags": "Erstat Farve,Side operationer,Behandling,server side" - }, - "login": { - "title": "Log ind", - "header": "Log ind", - "signin": "Log ind", - "rememberme": "Husk mig", - "invalid": "Ugyldigt brugernavn eller adgangskode.", - "locked": "Din konto er blevet låst.", - "signinTitle": "Log venligst ind", - "ssoSignIn": "Log ind via Single Sign-on", - "oAuth2AutoCreateDisabled": "OAUTH2 Auto-Opret Bruger Deaktiveret", - "oAuth2AdminBlockedUser": "Registrering eller login af ikke-registrerede brugere er i øjeblikket blokeret. Kontakt venligst administratoren.", - "oauth2RequestNotFound": "Autorisationsanmodning ikke fundet", - "oauth2InvalidUserInfoResponse": "Ugyldigt Brugerinfo Svar", - "oauth2invalidRequest": "Ugyldig Anmodning", - "oauth2AccessDenied": "Adgang Nægtet", - "oauth2InvalidTokenResponse": "Ugyldigt Token Svar", - "oauth2InvalidIdToken": "Ugyldigt Id Token", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "Bruger er deaktiveret, login er i øjeblikket blokeret med dette brugernavn. Kontakt venligst administratoren.", - "alreadyLoggedIn": "Du er allerede logget ind på", - "alreadyLoggedIn2": "enheder. Log ud af disse enheder og prøv igen.", - "toManySessions": "Du har for mange aktive sessoner", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF Til Enkelt Side", - "header": "PDF Til Enkelt Side", - "submit": "Konvertér Til Enkelt Side" - }, - "pageExtracter": { - "title": "Udtræk Sider", - "header": "Udtræk Sider", - "submit": "Udtræk", - "placeholder": "(f.eks. 1,2,8 eller 4,7,12-16 eller 2n-1)" - }, - "sanitizePDF": { - "title": "Rens PDF", - "header": "Rens en PDF-fil", - "selectText": { - "1": "Fjern JavaScript-handlinger", - "2": "Fjern indlejrede filer", - "3": "Remove XMP metadata", - "4": "Fjern links", - "5": "Fjern skrifttyper", - "6": "Remove Document Info Metadata" - }, - "submit": "Rens PDF" - }, - "adjustContrast": { - "title": "Justér Kontrast", - "header": "Justér Kontrast", - "contrast": "Kontrast:", - "brightness": "Lysstyrke:", - "saturation": "Mætning:", - "download": "Download" - }, - "compress": { - "title": "Komprimer", - "header": "Komprimer PDF", - "credit": "Denne tjeneste bruger qpdf til PDF Komprimering/Optimering.", - "grayscale": { - "label": "Anvend gråskala til komprimering" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Optimeringsniveau:", - "4": "Auto tilstand - Justerer automatisk kvaliteten for at få PDF'en til en præcis størrelse", - "5": "Forventet PDF-størrelse (f.eks. 25MB, 10.8MB, 25KB)" - }, - "submit": "Komprimer" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "This feature is also available in our multi-tool page. Check it out for enhanced page-by-page UI and additional features!" - }, - "pageRemover": { - "title": "Side Fjerner", - "header": "PDF Side fjerner", - "pagesToDelete": "Sider der skal slettes (Indtast en kommasepareret liste af sidenumre) :", - "submit": "Slet Sider", - "placeholder": "(f.eks. 1,2,6 eller 1-10,15-30)" - }, - "imageToPDF": { - "title": "Billede til PDF", - "header": "Billede til PDF", - "submit": "Konvertér", - "selectLabel": "Billedtilpasningsindstillinger", - "fillPage": "Udfyld Side", - "fitDocumentToImage": "Tilpas Side til Billede", - "maintainAspectRatio": "Bevar Aspektforhold", - "selectText": { - "2": "Auto rotér PDF", - "3": "Multi-fil logik (Kun aktiveret ved arbejde med flere billeder)", - "4": "Flet til enkelt PDF", - "5": "Konvertér til separate PDF'er" - } - }, - "PDFToCSV": { - "title": "PDF til CSV", - "header": "PDF til CSV", - "prompt": "Vælg side til at udtrække tabel", - "submit": "Udtræk" - }, - "split-by-size-or-count": { - "title": "Opdel PDF efter Størrelse eller Antal", - "header": "Opdel PDF efter Størrelse eller Antal", - "type": { - "label": "Vælg Opdelingstype", - "size": "Efter Størrelse", - "pageCount": "Efter Sideantal", - "docCount": "Efter Dokumentantal" - }, - "value": { - "label": "Indtast Værdi", - "placeholder": "Indtast størrelse (f.eks. 2MB eller 3KB) eller antal (f.eks. 5)" - }, - "submit": "Indsend" - }, - "printFile": { - "title": "Udskriv Fil", - "header": "Udskriv Fil til Printer", - "selectText": { - "1": "Vælg Fil som skal Udskrives", - "2": "Indtast printernavn" - }, - "submit": "Udskriv" - }, - "licenses": { - "nav": "Licenser", - "title": "Trejdepartslicenser", - "header": "Trejdepartslicenser", - "module": "Modul", - "version": "Version", - "license": "License" - }, - "survey": { - "nav": "Undersøgelse", - "title": "Stirling-PDF Undersøgelse", - "description": "Stirling-PDF har ingen sporing, så vi vil gerne høre fra vores brugere for at forbedre Stirling-PDF!", - "changes": "Stirling-PDF Har Endtes Sidst Ganger du Foresatte En Kig! For At Lære Mere, Se Vores Blog Indlæg Her:", - "changes2": "Med Disse Endringer Er Vi Kommet I Betalende Forretningsstøtte og Finansiering", - "please": "Overvej venligst at deltage i vores undersøgelse!", - "disabled": "(Undersøgelsespop-up vil blive deaktiveret i følgende opdateringer, men vil være tilgængelig i bunden af siden)", - "button": "Tag Undersøgelsen", - "dontShowAgain": "Vis ikke igen", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Fjern billede", - "header": "Fjern billede", - "removeImage": "Fjern billede", - "submit": "Fjern" - }, - "splitByChapters": { - "title": "Del PDF ved Kapitler", - "header": "Splitter PDF efter kapitel", - "bookmarkLevel": "Bogmærke niveau", - "includeMetadata": "Inkluder metadata", - "allowDuplicates": "Tillad duplikater", - "desc": { - "1": "Denne værktøj splitter en PDF-fil op i flere PDF'er baseret på dens kapitelstruktur.", - "2": "Bogmærke niveau: Vælg nivået af bogmærker, der skal bruges til at splittere (0 for hovedniveau, 1 for anden niveau osv.).", - "3": "Inkluder metadata: Hvis markeret, vil den originale PDF's metadata inkluderes i hver splitterdels PDF.", - "4": "Tillad duplikater: Hvis markeret, tillader det flere bogmærker på samme side til at oprette separate PDF'er." - }, - "submit": "Splitter PDF" - }, - "fileChooser": { - "click": "Click", - "or": "or", - "dragAndDrop": "Drag & Drop", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "Drag & Drop file(s) here", - "extractPDF": "Extracting..." - }, - "releases": { - "footer": "Releases", - "title": "Release Notes", - "header": "Release Notes", - "current": { - "version": "Current Release" - }, - "note": "Release notes are only available in English" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/de-DE/translation.json b/frontend/dist/locales/de-DE/translation.json deleted file mode 100644 index c5127bd14..000000000 --- a/frontend/dist/locales/de-DE/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Schriftgröße", - "fontName": "Schriftart", - "title": "Seitenzahlen hinzufügen", - "header": "Seitenzahlen hinzufügen", - "selectText": { - "1": "PDF-Datei auswählen:", - "2": "Margin Größe", - "3": "Position", - "4": "Startnummer", - "5": "Seiten zu nummerieren", - "6": "Benutzerdefinierter Text" - }, - "customTextDesc": "Benutzerdefinierter Text", - "numberPagesDesc": "Welche Seiten nummeriert werden sollen, Standardeinstellung 'alle' ('all'), akzeptiert auch 1-5 oder 2,5,9 usw.", - "customNumberDesc": "Standardmäßig {n}, akzeptiert auch 'Seite {n} von {total}', 'Text-{n}', '{filename}-{n}'", - "submit": "Seitenzahlen hinzufügen" - }, - "pdfPrompt": "PDF(s) auswählen", - "multiPdfPrompt": "PDFs auswählen(2+)", - "multiPdfDropPrompt": "Wählen Sie alle gewünschten PDFs aus (oder ziehen Sie sie per Drag & Drop hierhin)", - "imgPrompt": "Wählen Sie ein Bild", - "genericSubmit": "Absenden", - "uploadLimit": "Maximale Dateigröße:", - "uploadLimitExceededSingular": "ist zu groß. Die maximal zulässige Größe ist", - "uploadLimitExceededPlural": "sind zu groß. Die maximal zulässige Größe ist", - "processTimeWarning": "Achtung: Abhängig von der Dateigröße kann dieser Prozess bis zu einer Minute dauern", - "pageOrderPrompt": "Seitenreihenfolge (Geben Sie eine durch Komma getrennte Liste von Seitenzahlen ein):", - "pageSelectionPrompt": "Benutzerdefinierte Seitenauswahl (Geben Sie eine durch Kommas getrennte Liste von Seitenzahlen 1,5,6 oder Funktionen wie 2n+1 ein):", - "goToPage": "Los", - "true": "Wahr", - "false": "Falsch", - "unknown": "Unbekannt", - "save": "Speichern", - "saveToBrowser": "Im Browser speichern", - "close": "Schließen", - "filesSelected": "Dateien ausgewählt", - "noFavourites": "Keine Favoriten hinzugefügt", - "downloadComplete": "Download abgeschlossen", - "bored": "Langeweile beim Warten?", - "alphabet": "Alphabet", - "downloadPdf": "PDF herunterladen", - "text": "Text", - "font": "Schriftart", - "selectFillter": "-- Auswählen --", - "pageNum": "Seitenzahl", - "sizes": { - "small": "Klein", - "medium": "Mittel", - "large": "Groß", - "x-large": "Extra Groß" - }, - "error": { - "pdfPassword": "Das PDF-Dokument ist passwortgeschützt und das Passwort wurde entweder nicht angegeben oder war falsch", - "_value": "Fehler", - "sorry": "Entschuldigung für das Problem!", - "needHelp": "Brauchst du Hilfe / Ein Problem gefunden?", - "contactTip": "Wenn du weiterhin Probleme hast, zögere nicht, uns um Hilfe zu bitten. Du kannst ein Ticket auf unserer GitHub-Seite einreichen oder uns über Discord kontaktieren:", - "404": { - "head": "404 - Seite nicht gefunden | Ups, wir sind im Code gestolpert!", - "1": "Wir können die gesuchte Seite nicht finden.", - "2": "Etwas ist schiefgelaufen" - }, - "github": "Ein Ticket auf GitHub einreichen", - "showStack": "Stack-Trace anzeigen", - "copyStack": "Stack-Trace kopieren", - "githubSubmit": "GitHub - Ein Ticket einreichen", - "discordSubmit": "Discord - Unterstützungsbeitrag einreichen" - }, - "delete": "Löschen", - "username": "Benutzername", - "password": "Passwort", - "welcome": "Willkommen", - "property": "Eigenschaft", - "black": "Schwarz", - "white": "Weiß", - "red": "Rot", - "green": "Grün", - "blue": "Blau", - "custom": "benutzerdefiniert...", - "WorkInProgess": "In Arbeit, funktioniert möglicherweise nicht oder ist fehlerhaft. Bitte melden Sie alle Probleme!", - "poweredBy": "Unterstützt von", - "yes": "Ja", - "no": "Nein", - "changedCredsMessage": "Anmeldedaten geändert!", - "notAuthenticatedMessage": "Benutzer nicht authentifiziert.", - "userNotFoundMessage": "Benutzer nicht gefunden.", - "incorrectPasswordMessage": "Das Passwort ist falsch.", - "usernameExistsMessage": "Neuer Benutzername existiert bereits.", - "invalidUsernameMessage": "Ungültiger Benutzername. Der Benutzername darf nur Buchstaben, Zahlen und die folgenden Sonderzeichen @._+- enthalten oder muss eine gültige E-Mail-Adresse sein.", - "invalidPasswordMessage": "Das Passwort darf nicht leer sein und kein Leerzeichen am Anfang und Ende haben.", - "confirmPasswordErrorMessage": "„Neues Passwort“ und „Neues Passwort bestätigen“ müssen übereinstimmen.", - "deleteCurrentUserMessage": "Der aktuell angemeldete Benutzer kann nicht gelöscht werden.", - "deleteUsernameExistsMessage": "Der Benutzername existiert nicht und kann nicht gelöscht werden.", - "downgradeCurrentUserMessage": "Die Rolle des aktuellen Benutzers kann nicht herabgestuft werden", - "disabledCurrentUserMessage": "Der aktuelle Benutzer kann nicht deaktiviert werden", - "downgradeCurrentUserLongMessage": "Die Rolle des aktuellen Benutzers kann nicht herabgestuft werden. Daher wird der aktuelle Benutzer nicht angezeigt.", - "userAlreadyExistsOAuthMessage": "Der Benutzer ist bereits als OAuth2-Benutzer vorhanden.", - "userAlreadyExistsWebMessage": "Der Benutzer ist bereits als Webbenutzer vorhanden.", - "oops": "Hoppla!", - "help": "Hilfe", - "goHomepage": "Zur Startseite gehen", - "joinDiscord": "Unserem Discord-Server beitreten", - "seeDockerHub": "Docker Hub ansehen", - "visitGithub": "GitHub-Repository besuchen", - "donate": "Spenden", - "color": "Farbe", - "sponsor": "Sponsor", - "info": "Informationen", - "pro": "Pro", - "page": "Seite", - "pages": "Seiten", - "loading": "Laden...", - "addToDoc": "In Dokument hinzufügen", - "reset": "Zurücksetzen", - "apply": "Anwenden", - "noFileSelected": "Keine Datei ausgewählt. Bitte laden Sie eine hoch.", - "legal": { - "privacy": "Datenschutz", - "terms": "AGB", - "accessibility": "Barrierefreiheit", - "cookie": "Cookie-Richtlinie", - "impressum": "Impressum", - "showCookieBanner": "Cookie Einstellungen" - }, - "pipeline": { - "header": "Pipeline-Menü (Beta)", - "uploadButton": "Benutzerdefinierter Upload", - "configureButton": "Konfigurieren", - "defaultOption": "Benutzerdefiniert", - "submitButton": "Ausführen", - "help": "Hilfe für Pipeline", - "scanHelp": "Hilfe zum Ordnerscan", - "deletePrompt": "Möchten Sie die Pipeline wirklich löschen?", - "tags": "automatisieren,sequenzieren,skriptgesteuert,batch prozess", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Pipeline-Konfiguration", - "pipelineNameLabel": "Pipeline-Name", - "saveSettings": "Operations-Einstellungen speichern", - "pipelineNamePrompt": "Geben Sie hier den Namen der Pipeline ein", - "selectOperation": "Vorgang auswählen", - "addOperationButton": "Vorgang hinzufügen", - "pipelineHeader": "Pipeline:", - "saveButton": "Herunterladen", - "validateButton": "Validieren" - }, - "enterpriseEdition": { - "button": "Auf Pro-Version umsteigen", - "warning": "Diese Funktion ist nur für Pro-Nutzer verfügbar.", - "yamlAdvert": "Stirling-PDF Pro unterstützt YAML Konfigurationsdateien, SSO und weitere Funktionen.", - "ssoAdvert": "Suchen Sie weitere Funktionen in der Benutzerverwaltung? Steigen Sie auf die Pro-Version um" - }, - "analytics": { - "title": "Möchten Sie Stirling-PDF verbessern?", - "paragraph1": "Stirling-PDF verfügt über Opt-in-Analytics, die uns helfen, das Produkt zu verbessern. Wir zeichnen keine persönlichen Informationen oder Dateiinhalte auf.", - "paragraph2": "Bitte erwägen Sie die Analytics zu aktivieren, um Stirling-PDF beim Wachsen zu helfen und um unsere User besser zu verstehen.", - "enable": "Analytics aktivieren", - "disable": "Analytics deaktivieren", - "settings": "Sie können die Einstellungen für die Analytics in der config/settings.yml Datei bearbeiten" - }, - "navbar": { - "favorite": "Favoriten", - "recent": "Neu und kürzlich aktualisiert", - "darkmode": "Dunkler Modus", - "language": "Sprachen", - "settings": "Einstellungen", - "allTools": "Werkzeuge", - "multiTool": "Multitools", - "search": "Suche", - "sections": { - "organize": "Organisieren", - "convertTo": "In PDF konvertieren", - "convertFrom": "Konvertieren von PDF", - "security": "Signieren und Sicherheit", - "advance": "Erweiterte Funktionen", - "edit": "Anzeigen und Bearbeiten", - "popular": "Beliebt" - } - }, - "settings": { - "title": "Einstellungen", - "update": "Update verfügbar", - "updateAvailable": "{0} ist die aktuelle installierte Version. Eine neue Version ({1}) ist verfügbar.", - "appVersion": "App-Version:", - "downloadOption": { - "title": "Download-Option wählen (für einzelne Dateien, die keine Zip-Downloads sind):", - "1": "Im selben Fenster öffnen", - "2": "In neuem Fenster öffnen", - "3": "Datei herunterladen" - }, - "zipThreshold": "Dateien komprimieren, wenn die Anzahl der heruntergeladenen Dateien überschritten wird", - "signOut": "Abmelden", - "accountSettings": "Kontoeinstellungen", - "bored": { - "help": "Aktiviert das Easter-Egg-Spiel" - }, - "cacheInputs": { - "name": "Formulareingaben speichern", - "help": "Aktivieren, um zuvor verwendete Eingaben für zukünftige Durchläufe zu speichern" - } - }, - "changeCreds": { - "title": "Anmeldeinformationen ändern", - "header": "Aktualisieren Sie Ihre Kontodaten", - "changePassword": "Sie verwenden die Standard-Zugangsdaten. Bitte geben Sie ein neues Passwort ein.", - "newUsername": "Neuer Benutzername", - "oldPassword": "Aktuelles Passwort", - "newPassword": "Neues Passwort", - "confirmNewPassword": "Neues Passwort bestätigen", - "submit": "Änderung speichern" - }, - "account": { - "title": "Kontoeinstellungen", - "accountSettings": "Kontoeinstellungen", - "adminSettings": "Admin Einstellungen - Benutzer anzeigen und hinzufügen", - "userControlSettings": "Benutzerkontrolle", - "changeUsername": "Benutzername ändern", - "newUsername": "Neuer Benutzername", - "password": "Bestätigungspasswort", - "oldPassword": "Altes Passwort", - "newPassword": "Neues Passwort", - "changePassword": "Passwort ändern", - "confirmNewPassword": "Neues Passwort bestätigen", - "signOut": "Abmelden", - "yourApiKey": "Dein API-Schlüssel", - "syncTitle": "Browsereinstellungen mit Konto synchronisieren", - "settingsCompare": "Einstellungen vergleichen:", - "property": "Eigenschaft", - "webBrowserSettings": "Webbrowser-Einstellung", - "syncToBrowser": "Synchronisiere Konto -> Browser", - "syncToAccount": "Synchronisiere Konto <- Browser" - }, - "adminUserSettings": { - "title": "Benutzerkontrolle", - "header": "Administrator-Benutzerkontrolle", - "admin": "Administrator", - "user": "Benutzer", - "addUser": "Neuen Benutzer hinzufügen", - "deleteUser": "Benutzer löschen", - "confirmDeleteUser": "Soll der Benutzer gelöscht werden?", - "confirmChangeUserStatus": "Soll der Benutzer deaktiviert/aktiviert werden?", - "usernameInfo": "Der Benutzername darf nur Buchstaben, Zahlen und die folgenden Sonderzeichen @._+- enthalten oder muss eine gültige E-Mail-Adresse sein.", - "roles": "Rollen", - "role": "Rolle", - "actions": "Aktions", - "apiUser": "Eingeschränkter API-Benutzer", - "extraApiUser": "Zusätzlicher eingeschränkter API-Benutzer", - "webOnlyUser": "Nur Web-Benutzer", - "demoUser": "Demo-Benutzer (Keine benutzerdefinierten Einstellungen)", - "internalApiUser": "Interner API-Benutzer", - "forceChange": "Benutzer dazu zwingen, Benutzernamen/Passwort bei der Anmeldung zu ändern", - "submit": "Benutzer speichern", - "changeUserRole": "Benutzerrolle ändern", - "authenticated": "Authentifiziert", - "editOwnProfil": "Eigenes Profil bearbeiten", - "enabledUser": "aktivierter Benutzer", - "disabledUser": "deaktivierter Benutzer", - "activeUsers": "Aktive Benutzer:", - "disabledUsers": "Deaktivierte Benutzer:", - "totalUsers": "Gesamtzahl der Benutzer:", - "lastRequest": "Letzte Anfrage", - "usage": "Statistiken" - }, - "endpointStatistics": { - "title": "Endpunktstatistik", - "header": "Endpunktstatistik", - "top10": "Top 10", - "top20": "Top 20", - "all": "Alle", - "refresh": "Aktualisieren", - "includeHomepage": "Startseite ('/') einschließen", - "includeLoginPage": "Anmeldeseite einschließen ('/login')", - "totalEndpoints": "Gesamtendpunkte", - "totalVisits": "Gesamtbesuche", - "showing": "Zeigen", - "selectedVisits": "Ausgewählte Besuche", - "endpoint": "Endpunkt", - "visits": "Besuche", - "percentage": "Prozentsatz", - "loading": "Laden...", - "failedToLoad": "Endpunktdaten nicht geladen, bitte aktualisieren Sie die Seite.", - "home": "Startseite", - "login": "Anmeldeseite", - "top": "Spitze", - "numberOfVisits": "Anzahl der Besuche", - "visitsTooltip": "Besuche: {0} ({1}% des Gesamten)", - "retry": "Wiederholen" - }, - "database": { - "title": "Datenbank Import/Export", - "header": "Datenbank Import/Export", - "fileName": "Dateiname", - "creationDate": "Erstellungsdatum", - "fileSize": "Dateigröße", - "deleteBackupFile": "Sicherungsdatei löschen", - "importBackupFile": "Sicherungsdatei importieren", - "createBackupFile": "Sicherungsdatei erstellen", - "downloadBackupFile": "Sicherungsdatei herunterladen", - "info_1": "Beim Importieren der Daten ist es von größter Bedeutung, die korrekte Struktur zu gewährleisten. Wenn Sie nicht sicher sind, was Sie tun, suchen Sie Rat und Unterstützung von einem Fachmann. Ein Fehler in der Struktur kann zu Fehlfunktionen der Anwendung führen, bis hin zur vollständigen Nicht-Lauffähigkeit der Anwendung.", - "info_2": "Der Dateiname spielt beim Hochladen keine Rolle. Dieser wird nachträglich in das Format backup_user_yyyyMMddHHmm.sql geändert, um eine einheitliche Benennung zu gewährleisten.", - "submit": "Sicherungsdatei importieren", - "importIntoDatabaseSuccessed": "Import in die Datenbank erfolgreich", - "backupCreated": "Datenbanksicherung erfolgreich", - "fileNotFound": "Datei nicht gefunden", - "fileNullOrEmpty": "Datei darf nicht null oder leer sein", - "failedImportFile": "Dateiimport fehlgeschlagen", - "notSupported": "Diese Funktion ist für deine Datenbankverbindung nicht verfügbar." - }, - "session": { - "expired": "Ihre Sitzung ist abgelaufen. Bitte laden Sie die Seite neu und versuchen Sie es erneut.", - "refreshPage": "Seite aktualisieren" - }, - "home": { - "desc": "Ihr lokal gehosteter One-Stop-Shop für alle Ihre PDF-Anforderungen.", - "searchBar": "Suche nach Funktionen...", - "viewPdf": { - "title": "PDF anzeigen/bearbeiten", - "desc": "Anzeigen, Kommentieren, Text oder Bilder hinzufügen" - }, - "setFavorites": "Favoriten festlegen", - "hideFavorites": "Favoriten ausblenden", - "showFavorites": "Favoriten anzeigen", - "legacyHomepage": "Alte Homepage", - "newHomePage": "Probieren Sie unsere neue Homepage aus!", - "alphabetical": "Alphabetisch", - "globalPopularity": "Beliebtheit", - "sortBy": "Sortieren nach:", - "multiTool": { - "title": "PDF-Multitool", - "desc": "Seiten zusammenführen, drehen, neu anordnen und entfernen" - }, - "merge": { - "title": "Zusammenführen", - "desc": "Mehrere PDF-Dateien zu einer einzigen zusammenführen" - }, - "split": { - "title": "Aufteilen", - "desc": "PDFs in mehrere Dokumente aufteilen" - }, - "rotate": { - "title": "Drehen", - "desc": "Drehen Sie Ihre PDFs ganz einfach" - }, - "imageToPdf": { - "title": "Bild zu PDF", - "desc": "Konvertieren Sie ein Bild (PNG, JPEG, GIF) in ein PDF" - }, - "pdfToImage": { - "title": "PDF zu Bild", - "desc": "Konvertieren Sie ein PDF in ein Bild (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Organisieren", - "desc": "Seiten entfernen und Seitenreihenfolge ändern" - }, - "addImage": { - "title": "Bild einfügen", - "desc": "Fügt ein Bild an eine bestimmte Stelle im PDF ein (in Arbeit)" - }, - "watermark": { - "title": "Wasserzeichen hinzufügen", - "desc": "Fügen Sie ein eigenes Wasserzeichen zu Ihrem PDF hinzu" - }, - "permissions": { - "title": "Berechtigungen ändern", - "desc": "Die Berechtigungen für Ihr PDF-Dokument verändern" - }, - "removePages": { - "title": "Entfernen", - "desc": "Ungewollte Seiten aus dem PDF entfernen" - }, - "addPassword": { - "title": "Passwort hinzufügen", - "desc": "Das PDF mit einem Passwort verschlüsseln" - }, - "removePassword": { - "title": "Passwort entfernen", - "desc": "Den Passwortschutz eines PDFs entfernen" - }, - "compressPdfs": { - "title": "Komprimieren", - "desc": "PDF komprimieren um die Dateigröße zu reduzieren" - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Metadaten ändern", - "desc": "Ändern/Entfernen/Hinzufügen von Metadaten aus einem PDF-Dokument" - }, - "fileToPDF": { - "title": "Datei in PDF konvertieren", - "desc": "Konvertieren Sie nahezu jede Datei in PDF (DOCX, PNG, XLS, PPT, TXT und mehr)" - }, - "ocr": { - "title": "Führe OCR/Cleanup-Scans aus", - "desc": "Cleanup scannt und erkennt Text aus Bildern in einer PDF-Datei und fügt ihn erneut als Text hinzu" - }, - "extractImages": { - "title": "Bilder extrahieren", - "desc": "Extrahiert alle Bilder aus einer PDF-Datei und speichert sie als Zip-Archiv" - }, - "pdfToPDFA": { - "title": "PDF zu PDF/A konvertieren", - "desc": "PDF zu PDF/A für Langzeitarchivierung konvertieren" - }, - "PDFToWord": { - "title": "PDF zu Word", - "desc": "PDF in Word-Formate konvertieren (DOC, DOCX und ODT)" - }, - "PDFToPresentation": { - "title": "PDF zu Präsentation", - "desc": "PDF in Präsentationsformate konvertieren (PPT, PPTX und ODP)" - }, - "PDFToText": { - "title": "PDF in Text/RTF", - "desc": "PDF in Text- oder RTF-Format konvertieren" - }, - "PDFToHTML": { - "title": "PDF in HTML", - "desc": "PDF in HTML-Format konvertieren" - }, - "PDFToXML": { - "title": "PDF in XML", - "desc": "PDF in XML-Format konvertieren" - }, - "ScannerImageSplit": { - "title": "Gescannte Fotos erkennen/aufteilen", - "desc": "Teilt mehrere Fotos innerhalb eines Fotos/PDF" - }, - "sign": { - "title": "Signieren", - "desc": "Fügt PDF-Signaturen durch Zeichnung, Text oder Bild hinzu" - }, - "flatten": { - "title": "Abflachen", - "desc": "Alle interaktiven Elemente und Formulare aus einem PDF entfernen" - }, - "repair": { - "title": "Reparatur", - "desc": "Versucht, ein beschädigtes/kaputtes PDF zu reparieren" - }, - "removeBlanks": { - "title": "Leere Seiten entfernen", - "desc": "Erkennt und entfernt leere Seiten aus einem Dokument" - }, - "removeAnnotations": { - "title": "Anmerkungen entfernen", - "desc": "Entfernt alle Kommentare/Anmerkungen aus einem PDF" - }, - "compare": { - "title": "Vergleichen", - "desc": "Vergleicht und zeigt die Unterschiede zwischen zwei PDF-Dokumenten an" - }, - "certSign": { - "title": "Mit Zertifikat signieren", - "desc": "Ein PDF mit einem Zertifikat/Schlüssel (PEM/P12) signieren" - }, - "removeCertSign": { - "title": "Zertifikatsignatur entfernen", - "desc": "Zertifikatsignatur aus PDF entfernen" - }, - "pageLayout": { - "title": "Mehrseitiges Layout", - "desc": "Mehrere Seiten eines PDF zu einer Seite zusammenführen" - }, - "scalePages": { - "title": "Seitengröße/Skalierung anpassen", - "desc": "Größe/Skalierung der Seite und/oder des Inhalts ändern" - }, - "pipeline": { - "title": "Pipeline", - "desc": "Mehrere Aktionen auf ein PDF anwenden, definiert durch ein Pipeline Skript" - }, - "add-page-numbers": { - "title": "Seitenzahlen hinzufügen", - "desc": "Hinzufügen von Seitenzahlen an einer bestimmten Stelle" - }, - "auto-rename": { - "title": "PDF automatisch umbenennen", - "desc": "PDF-Datei anhand von erkannten Kopfzeilen umbenennen" - }, - "adjust-contrast": { - "title": "Farben/Kontrast anpassen", - "desc": "Kontrast, Sättigung und Helligkeit einer PDF anpassen" - }, - "crop": { - "title": "PDF zuschneiden", - "desc": "PDF zuschneiden um die Größe zu verändern (Text bleibt erhalten!)" - }, - "autoSplitPDF": { - "title": "PDF automatisch teilen", - "desc": "Physisch gescannte PDF anhand von Splitter-Seiten und QR-Codes aufteilen" - }, - "sanitizePdf": { - "title": "PDF Bereinigen", - "desc": "Entfernen von Skripten und anderen Elementen aus PDF-Dateien" - }, - "URLToPDF": { - "title": "URL/Website zu PDF", - "desc": "Konvertiert jede http(s)URL zu PDF" - }, - "HTMLToPDF": { - "title": "HTML zu PDF", - "desc": "Konvertiert jede HTML-Datei oder Zip-Archiv zu PDF" - }, - "MarkdownToPDF": { - "title": "Markdown zu PDF", - "desc": "Konvertiert jede Markdown-Datei zu PDF" - }, - "PDFToMarkdown": { - "title": "PDF zu Markdown", - "desc": "Konvertiert jedes PDF in Markdown" - }, - "getPdfInfo": { - "title": "Alle Informationen anzeigen", - "desc": "Erfasst alle möglichen Informationen in einer PDF" - }, - "extractPage": { - "title": "Seite(n) extrahieren", - "desc": "Extrahiert ausgewählte Seiten aus einer PDF" - }, - "PdfToSinglePage": { - "title": "PDF zu einer Seite zusammenfassen", - "desc": "Fügt alle PDF-Seiten zu einer einzigen großen Seite zusammen" - }, - "showJS": { - "title": "Javascript anzeigen", - "desc": "Alle Javascript Funktionen in einer PDF anzeigen" - }, - "autoRedact": { - "title": "Automatisch zensieren/schwärzen", - "desc": "Automatisches Zensieren (Schwärzen) von Text in einer PDF-Datei basierend auf dem eingegebenen Text" - }, - "redact": { - "title": "Manuell zensieren/schwärzen", - "desc": "Zensiere (Schwärze) eine PDF-Datei durch Auswählen von Text, gezeichneten Formen und/oder ausgewählten Seite(n)" - }, - "tableExtraxt": { - "title": "Tabelle extrahieren", - "desc": "Tabelle aus PDF in CSV extrahieren" - }, - "autoSizeSplitPDF": { - "title": "Teilen nach Größe/Anzahl", - "desc": "Teilen Sie ein einzelnes PDF basierend auf Größe, Seitenanzahl oder Dokumentanzahl in mehrere Dokumente auf" - }, - "overlay-pdfs": { - "title": "PDF mit Overlay versehen", - "desc": "Überlagert eine PDF über eine andere PDF" - }, - "split-by-sections": { - "title": "PDF in Abschnitte teilen", - "desc": "Teilen Sie jede Seite einer PDF-Datei in kleinere horizontale und vertikale Abschnitte auf" - }, - "AddStampRequest": { - "title": "Stempel zu PDF hinzufügen", - "desc": "Fügen Sie an festgelegten Stellen Text oder Bildstempel hinzu" - }, - "removeImagePdf": { - "title": "Bild entfernen", - "desc": "Bild aus PDF entfernen, um die Dateigröße zu verringern" - }, - "splitPdfByChapters": { - "title": "PDF-Datei nach Kapiteln aufteilen", - "desc": "Aufteilung einer PDF-Datei in mehrere Dateien auf Basis der Kapitelstruktur." - }, - "validateSignature": { - "title": "PDF-Signatur überprüfen", - "desc": "Digitale Signaturen und Zertifikate in PDF-Dokumenten überprüfen" - }, - "replaceColorPdf": { - "title": "Farbe ersetzen und invertieren", - "desc": "Ersetzen Sie die Farbe des Texts und Hintergrund der PDF-Datei und invertieren Sie die komplette Farbe der PDF-Datei, um die Dateigröße zu reduzieren" - } - }, - "viewPdf": { - "tags": "anzeigen,lesen,kommentieren,text,bild", - "title": "PDF anzeigen/bearbeiten", - "header": "PDF anzeigen" - }, - "multiTool": { - "tags": "Multi Tool,Multi operation,UI,click drag,front end,client side", - "title": "PDF-Multitool", - "header": "PDF-Multitool", - "uploadPrompts": "Dateiname", - "selectAll": "Alle auswählen", - "deselectAll": "Auswahl aufheben", - "selectPages": "Seiten auswählen", - "selectedPages": "Ausgewählte Seiten", - "page": "Seite", - "deleteSelected": "Auswahl löschen", - "downloadAll": "Downloaden", - "downloadSelected": "Auswahl downloaden", - "insertPageBreak": "Seitenumbruch einfügen", - "addFile": "Datei hinzufügen", - "rotateLeft": "Nach links drehen", - "rotateRight": "Nach rechts drehen", - "split": "Teilen", - "moveLeft": "Nach links verschieben", - "moveRight": "Nach rechts verschieben", - "delete": "Löschen", - "dragDropMessage": "Ausgewählte Seite(n)", - "undo": "Rückgängig machen", - "redo": "Wiederherstellen" - }, - "merge": { - "tags": "zusammenführen,seitenvorgänge,back end,serverseitig", - "title": "Zusammenführen", - "header": "Mehrere PDFs zusammenführen (2+)", - "sortByName": "Nach Namen sortieren", - "sortByDate": "Nach Datum sortieren", - "removeCertSign": "Digitale Signatur in der zusammengeführten Datei entfernen?", - "submit": "Zusammenführen" - }, - "split": { - "tags": "seitenoperationen,teilen,mehrseitig,ausschneiden,serverseitig", - "title": "PDF aufteilen", - "header": "PDF aufteilen", - "desc": { - "1": "Die Nummern, die Sie auswählen, sind die Seitenzahlen, an denen Sie aufteilen möchten.", - "2": "So würde die Auswahl von 1,3,7-9 ein 10-seitiges Dokument in 6 separate PDFs aufteilen, mit:", - "3": "Dokument #1: Seite 1", - "4": "Dokument #2: Seite 2 und 3", - "5": "Dokument #3: Seite 4, 5, 6 und 7", - "6": "Dokument #4: Seite 8", - "7": "Dokument #5: Seite 9", - "8": "Dokument #6: Seite 10" - }, - "splitPages": "Geben Sie die Seiten an, an denen aufgeteilt werden soll:", - "submit": "Aufteilen" - }, - "rotate": { - "tags": "serverseitig", - "title": "PDF drehen", - "header": "PDF drehen", - "selectAngle": "Wählen Sie den Winkel (in Vielfachen von 90 Grad):", - "submit": "Herunterladen" - }, - "imageToPdf": { - "tags": "konvertierung,img,jpg,bild,foto" - }, - "pdfToImage": { - "tags": "konvertierung,img,jpg,bild,foto", - "title": "PDF zu Bild", - "header": "PDF zu Bild", - "selectText": "Bildformat", - "singleOrMultiple": "Bildergebnistyp", - "single": "Einzelnes großes Bild", - "multi": "Mehrere Bilder", - "colorType": "Farbtyp", - "color": "Farbe", - "grey": "Graustufen", - "blackwhite": "Schwarzweiß (Datenverlust möglich!)", - "submit": "Umwandeln", - "info": "Python ist nicht installiert. Erforderlich für die WebP-Konvertierung.", - "placeholder": "(z.B. 1,2,8 oder 4,7,12-16 oder 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,gerade,ungerade,sortieren,verschieben", - "title": "Seiten anordnen", - "header": "PDF Seitenorganisation", - "submit": "Seiten anordnen", - "mode": { - "_value": "Modus", - "1": "Benutzerdefinierte Seitenreihenfolge", - "2": "Umgekehrte Reihenfolge", - "3": "Duplex-Sortierung", - "4": "Heftsortierung", - "5": "Seitenheftungs-Heftsortierung", - "6": "Ungerade-Gerade-Teilung", - "7": "Erste entfernen", - "8": "Letzte entfernen", - "9": "Erste und letzte entfernen", - "10": "Ungerade-Gerade-Zusammenführung", - "11": "Alle Seiten duplizieren" - }, - "placeholder": "(z.B. 1,3,2 oder 4-8,2,10-12 oder 2n-1)" - }, - "addImage": { - "tags": "img,jpg,bild,foto", - "title": "Bild hinzufügen", - "header": "Ein Bild einfügen", - "everyPage": "In jede Seite einfügen?", - "upload": "Bild hinzufügen", - "submit": "Bild hinzufügen" - }, - "watermark": { - "tags": "text,wiederholend,beschriftung,besitzen,urheberrecht,marke,img,jpg,bild,foto", - "title": "Wasserzeichen hinzufügen", - "header": "Wasserzeichen hinzufügen", - "customColor": "Benutzerdefinierte Textfarbe", - "selectText": { - "1": "PDF auswählen, dem ein Wasserzeichen hinzugefügt werden soll:", - "2": "Wasserzeichen Text:", - "3": "Schriftgröße:", - "4": "Drehung (0-360):", - "5": "breiteSpacer (horizontaler Abstand zwischen den einzelnen Wasserzeichen):", - "6": "höheSpacer (vertikaler Abstand zwischen den einzelnen Wasserzeichen):", - "7": "Deckkraft (0% - 100 %):", - "8": "Wasserzeichen Typ:", - "9": "Wasserzeichen-Bild:", - "10": "PDF in PDF-Bild konvertieren" - }, - "submit": "Wasserzeichen hinzufügen", - "type": { - "1": "Text", - "2": "Bild" - } - }, - "permissions": { - "tags": "lesen,schreiben,bearbeiten,drucken", - "title": "Berechtigungen ändern", - "header": "Berechtigungen ändern", - "warning": "Achtung: Damit diese Berechtigungen nicht geändert werden können, wird empfohlen, sie über die \"Passwort hinzufügen\"-Seite mit einem Passwort zu versehen", - "selectText": { - "1": "Das zu ändernde PDF auswählen", - "2": "Zu setzende Berechtigungen", - "3": "Das zusammensetzen des PDFs verhindern", - "4": "Inhaltsextrahierung verhindern", - "5": "Inhaltsextrahierung zur Barrierefreiheit verhindern", - "6": "Ausfüllen des Formulars verhindern", - "7": "Modifizierung verhindern", - "8": "Ändern von Kommentaren verhindern", - "9": "Drucken verhindern", - "10": "Drucken verschiedener Formate verhindern" - }, - "submit": "Ändern" - }, - "removePages": { - "tags": "seiten entfernen,seiten löschen" - }, - "addPassword": { - "tags": "sicher,sicherheit", - "title": "Passwort hinzufügen", - "header": "Passwort hinzufügen (Verschlüsseln)", - "selectText": { - "1": "Das zu verschlüsselnde PDF auswählen", - "2": "Passwort", - "3": "Länge des Schlüssels", - "4": "Größere Werte sind stärker, aber niedrigere Werte sind besser kompatibel.", - "5": "Zu setzende Berechtigungen", - "6": "Das zusammensetzen des PDFs verhindern", - "7": "Inhaltsextrahierung verhindern", - "8": "Inhaltsextrahierung zur Barrierefreiheit verhindern", - "9": "Ausfüllen des Formulars verhindern", - "10": "Modifizierung verhindern", - "11": "Ändern von Kommentaren verhindern", - "12": "Drucken verhindern", - "13": "Drucken verschiedener Formate verhindern", - "14": "Passwort des Besitzers", - "15": "Schränkt ein, was mit dem Dokument gemacht werden kann, sobald es geöffnet ist (wird nicht von allen Leseprogrammen unterstützt)", - "16": "Schränkt das Öffnen des Dokuments selbst ein" - }, - "submit": "Verschlüsseln" - }, - "removePassword": { - "tags": "sichern,entschlüsseln,sicherheit,passwort aufheben,passwort löschen", - "title": "Passwort entfernen", - "header": "Passwort entfernen (Entschlüsseln)", - "selectText": { - "1": "Das zu entschlüsselnde PDF auswählen", - "2": "Passwort" - }, - "submit": "Entfernen" - }, - "compressPdfs": { - "tags": "komprimieren,verkleinern,minimieren" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "titel,autor,datum,erstellung,uhrzeit,herausgeber,produzent,statistiken", - "title": "Titel:", - "header": "Metadaten ändern", - "selectText": { - "1": "Bitte bearbeiten Sie die Variablen, die Sie ändern möchten", - "2": "Alle Metadaten löschen", - "3": "Benutzerdefinierte Metadaten anzeigen:", - "4": "Andere Metadaten:", - "5": "Benutzerdefinierten Metadateneintrag hinzufügen" - }, - "author": "Autor:", - "creationDate": "Erstellungsdatum (JJJJ/MM/TT HH:mm:ss):", - "creator": "Ersteller:", - "keywords": "Schlüsselwörter:", - "modDate": "Änderungsdatum (JJJJ/MM/TT HH:mm:ss):", - "producer": "Produzent:", - "subject": "Betreff:", - "trapped": "Gefangen:", - "submit": "Ändern" - }, - "fileToPDF": { - "tags": "transformation,format,dokument,bild,folie,text,konvertierung,büro,dokumente,word,excel,powerpoint", - "title": "Datei in PDF", - "header": "Beliebige Dateien in PDF konvertieren", - "credit": "Dieser Dienst verwendet LibreOffice und Unoconv für die Dateikonvertierung.", - "supportedFileTypesInfo": "Unterstützte Dateitypen", - "supportedFileTypes": "Unterstützte Dateitypen sollten die folgenden enthalten, eine vollständige aktualisierte Liste der unterstützten Formate finden Sie jedoch in der LibreOffice-Dokumentation", - "submit": "In PDF konvertieren" - }, - "ocr": { - "tags": "erkennung,text,bild,scannen,lesen,identifizieren,erkennung,bearbeitbar", - "title": "OCR / Scan-Bereinigung", - "header": "Scans bereinigen / OCR (Optical Character Recognition)", - "selectText": { - "1": "Sprachen auswählen, die im PDF erkannt werden sollen (die aufgelisteten sind die aktuell erkannten):", - "2": "Textdatei erzeugen, die OCR-Text neben dem OCR-bearbeiteten PDF enthält", - "3": "Korrekte Seiten wurden in einem schiefen Winkel gescannt, indem sie wieder an ihren Platz gedreht wurden", - "4": "Seite säubern, daher ist es weniger wahrscheinlich, dass OCR Text im Hintergrundrauschen findet. (Keine Ausgangsänderung)", - "5": "Seite säubern, sodass es weniger wahrscheinlich ist, dass OCR Text im Hintergrundrauschen findet, Bereinigung der Ausgabe wird beibehalten.", - "6": "Ignoriert Seiten mit interaktivem Text, nur OCR-Seiten, die Bilder sind", - "7": "OCR erzwingen, OCR wird jede Seite entfernen und alle ursprünglichen Textelemente entfernen", - "8": "Normal (Fehler, wenn PDF Text enthält)", - "9": "Zusätzliche Einstellungen", - "10": "OCR-Modus", - "11": "Bilder nach OCR entfernen (Entfernt ALLE Bilder, nur sinnvoll, wenn Teil des Konvertierungsschritts)", - "12": "Rendertyp (Erweitert)" - }, - "help": "Bitte lesen Sie diese Dokumentation, um zu erfahren, wie Sie dies für andere Sprachen verwenden und/oder nicht in Docker verwenden können", - "credit": "Dieser Dienst verwendet qpdf und Tesseract für OCR.", - "submit": "PDF mit OCR verarbeiten" - }, - "extractImages": { - "tags": "bild,foto,speichern,archivieren,zippen,erfassen,greifen", - "title": "Bilder extrahieren", - "header": "Bilder extrahieren", - "selectText": "Wählen Sie das Bildformat aus, in das extrahierte Bilder konvertiert werden sollen", - "allowDuplicates": "Doppelte Bilder speichern", - "submit": "Extrahieren" - }, - "pdfToPDFA": { - "tags": "archiv,langfristig,standard,konvertierung,speicherung,aufbewahrung", - "title": "PDF zu PDF/A", - "header": "PDF zu PDF/A", - "credit": "Dieser Dienst verwendet libreoffice für die PDF/A-Konvertierung", - "submit": "Konvertieren", - "tip": "Dieser Dienst kann nur einzelne Eingangsdateien verarbeiten.", - "outputFormat": "Ausgabeformat", - "pdfWithDigitalSignature": "Das PDF enthält eine digitale Signatur. Sie wird im nächsten Schritt entfernt." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformation,format,konvertierung,office,microsoft,docfile", - "title": "PDF zu Word", - "header": "PDF zu Word", - "selectText": { - "1": "Ausgabedateiformat" - }, - "credit": "Dieser Dienst verwendet LibreOffice für die Dateikonvertierung.", - "submit": "Konvertieren" - }, - "PDFToPresentation": { - "tags": "folien,show,büro,microsoft", - "title": "PDF zu Präsentation", - "header": "PDF zu Präsentation", - "selectText": { - "1": "Ausgabedateiformat" - }, - "credit": "Dieser Dienst verwendet LibreOffice für die Dateikonvertierung.", - "submit": "Konvertieren" - }, - "PDFToText": { - "tags": "richformat,richtextformat,rich text format", - "title": "PDF in Text/RTF", - "header": "PDF in Text/RTF", - "selectText": { - "1": "Ausgabedateiformat" - }, - "credit": "Dieser Dienst verwendet LibreOffice für die Dateikonvertierung.", - "submit": "Konvertieren" - }, - "PDFToHTML": { - "tags": "webinhalte,browserfreundlich", - "title": "PDF zu HTML", - "header": "PDF zu HTML", - "credit": "Dieser Dienst verwendet pdftohtml für die Dateikonvertierung.", - "submit": "Konvertieren" - }, - "PDFToXML": { - "tags": "datenextraktion,strukturierter inhalt,interop,transformation,konvertierung", - "title": "PDF zu XML", - "header": "PDF zu XML", - "credit": "Dieser Dienst verwendet LibreOffice für die Dateikonvertierung.", - "submit": "Konvertieren" - }, - "ScannerImageSplit": { - "tags": "separat,automatische erkennung,scans,mehrere fotos,organisieren", - "selectText": { - "1": "Winkelschwelle:", - "2": "Legt den minimalen absoluten Winkel fest, der erforderlich ist, damit das Bild gedreht werden kann (Standard: 10).", - "3": "Toleranz:", - "4": "Bestimmt den Bereich der Farbvariation um die geschätzte Hintergrundfarbe herum (Standard: 30).", - "5": "Mindestbereich:", - "6": "Legt den minimalen Bereichsschwellenwert für ein Foto fest (Standard: 10000).", - "7": "Minimaler Konturbereich:", - "8": "Legt den minimalen Konturbereichsschwellenwert für ein Foto fest", - "9": "Randgröße:", - "10": "Legt die Größe des hinzugefügten und entfernten Randes fest, um weiße Ränder in der Ausgabe zu verhindern (Standard: 1)." - }, - "info": "Python ist nicht installiert. Es ist zum Ausführen erforderlich." - }, - "sign": { - "tags": "autorisieren,initialen,gezeichnete signatur,textzeichen,bildsignatur", - "title": "Signieren", - "header": "PDFs signieren", - "upload": "Bild hochladen", - "draw": "Signatur zeichnen", - "text": "Texteingabe", - "clear": "Leeren", - "add": "Signieren", - "saved": "Gespeicherte Signaturen", - "save": "Signature speichern", - "personalSigs": "Persönliche Signaturen", - "sharedSigs": "Geteilte Signaturen", - "noSavedSigs": "Es wurden keine gespeicherten Signaturen gefunden", - "addToAll": "Zu allen Seiten hinzufügen", - "delete": "Löschen", - "first": "Erste Seite", - "last": "Letzte Seite", - "next": "Nächste Seite", - "previous": "Vorherige Seite", - "maintainRatio": "Seitenverhältnis beibehalten ein-/ausschalten", - "undo": "Rückgängig", - "redo": "Wiederherstellen" - }, - "flatten": { - "tags": "statisch,deaktivieren,nicht interaktiv,optimieren", - "title": "Abflachen", - "header": "PDFs reduzieren", - "flattenOnlyForms": "Nur Formulare abflachen", - "submit": "Abflachen" - }, - "repair": { - "tags": "reparieren,wiederherstellen,korrigieren,wiederherstellen", - "title": "Reparieren", - "header": "PDFs reparieren", - "submit": "Reparieren" - }, - "removeBlanks": { - "tags": "aufräumen,rationalisieren,nicht inhaltsreich,organisieren", - "title": "Leere Seiten entfernen", - "header": "Leere Seiten entfernen", - "threshold": "Schwellenwert:", - "thresholdDesc": "Schwellenwert zur Bestimmung, wie weiß ein weißer Pixel sein muss", - "whitePercent": "Weißprozentsatz (%):", - "whitePercentDesc": "Prozentsatz der Seite, die weiß sein muss, um entfernt zu werden", - "submit": "Leere Seiten entfernen" - }, - "removeAnnotations": { - "tags": "kommentare,hervorheben,notizen,markieren,entfernen", - "title": "Kommentare entfernen", - "header": "Kommentare entfernen", - "submit": "Entfernen" - }, - "compare": { - "tags": "differenzieren,kontrastieren,verändern,analysieren", - "title": "Vergleichen", - "header": "PDFs vergleichen", - "highlightColor": { - "1": "Highlight-Farbe 1:", - "2": "Highlight-Farbe 2:" - }, - "document": { - "1": "Dokument 1", - "2": "Dokument 2" - }, - "submit": "Vergleichen", - "complex": { - "message": "Eines oder beide Dokumente sind sehr groß, dadurch kann die Genauigkeit des Vergleichs kann beeinträchtigt werden." - }, - "large": { - "file": { - "message": "Eines oder beide Dokumente sind zu groß, um verarbeitet zu werden" - } - }, - "no": { - "text": { - "message": "Ein oder beide ausgewählten PDFs enthalten keine Textinhalt. Wählen Sie bitte PDFs mit Text für die Vergleichsanalyse." - } - } - }, - "certSign": { - "tags": "authentifizieren,pem,p12,offiziell,verschlüsseln", - "title": "Zertifikatsignierung", - "header": "Signieren Sie ein PDF mit Ihrem Zertifikat (in Arbeit)", - "selectPDF": "Wählen Sie eine PDF-Datei zum Signieren aus:", - "jksNote": "Hinweis: Wenn Ihr Zertifikatstyp unten nicht aufgeführt ist, konvertieren Sie ihn bitte mit dem Befehlszeilentool keytool in eine Java Keystore-Datei (.jks). Wählen Sie dann unten die Option „.jks-Datei“ aus.", - "selectKey": "Wählen Sie Ihre private Schlüsseldatei aus (PKCS#8-Format, könnte .pem oder .der sein):", - "selectCert": "Wählen Sie Ihre Zertifikatsdatei aus (X.509-Format, könnte .pem oder .der sein):", - "selectP12": "Wählen Sie Ihre PKCS#12-Keystore-Datei (.p12 oder .pfx) aus (optional, falls angegeben, sollte sie Ihren privaten Schlüssel und Ihr Zertifikat enthalten):", - "selectJKS": "Wählen Sie Ihre Java Keystore-Datei (.jks oder .keystore):", - "certType": "Zertifikattyp", - "password": "Geben Sie Ihr Keystore- oder Private-Key-Passwort ein (falls vorhanden):", - "showSig": "Signatur anzeigen", - "reason": "Grund", - "location": "Standort", - "name": "Name", - "showLogo": "Logo anzeigen", - "submit": "PDF signieren" - }, - "removeCertSign": { - "tags": "authentifizieren,PEM,P12,offiziell,entschlüsseln", - "title": "Zertifikatsignatur entfernen", - "header": "Digitales Zertifikat aus dem PDF entfernen", - "selectPDF": "PDF-Datei auswählen:", - "submit": "Signatur entfernen" - }, - "pageLayout": { - "tags": "zusammenführen,zusammensetzen,einzelansicht,organisieren", - "title": "Mehrseitiges Layout", - "header": "Mehrseitiges Layout", - "pagesPerSheet": "Seiten pro Blatt:", - "addBorder": "Ränder hinzufügen", - "submit": "Abschicken" - }, - "scalePages": { - "tags": "größe ändern,ändern,dimensionieren,anpassen", - "title": "Seitengröße anpassen", - "header": "Seitengröße anpassen", - "pageSize": "Format der Seiten des Dokuments", - "keepPageSize": "Originalgröße beibehalten", - "scaleFactor": "Zoomstufe (Ausschnitt) einer Seite", - "submit": "Abschicken" - }, - "add-page-numbers": { - "tags": "paginieren,beschriften,organisieren,indizieren" - }, - "auto-rename": { - "tags": "automatisch erkennen,header basiert,organisieren,neu kennzeichnen", - "title": "PDF automatisch umbenennen", - "header": "PDF automatisch umbenennen", - "submit": "Automatisch umbenennen" - }, - "adjust-contrast": { - "tags": "farbkorrektur,abstimmung,änderung,verbesserung" - }, - "crop": { - "tags": "trimmen,verkleinern,bearbeiten,formen", - "title": "Zuschneiden", - "header": "PDF zuschneiden", - "submit": "Abschicken" - }, - "autoSplitPDF": { - "tags": "qr basiert,trennen,segment scannen,organisieren", - "title": "PDF automatisch teilen", - "header": "PDF automatisch teilen", - "description": "Drucken Sie, fügen Sie ein, scannen Sie, laden Sie hoch und lassen Sie uns Ihre Dokumente automatisch trennen. Kein manuelles Sortieren erforderlich.", - "selectText": { - "1": "Drucken Sie einige Trennblätter aus (schwarz/weiß ist ausreichend).", - "2": "Scannen Sie alle Dokumente auf einmal, indem Sie das Trennblatt zwischen die Dokumente einlegen.", - "3": "Laden Sie die einzelne große gescannte PDF-Datei hoch und überlassen Sie Stirling-PDF den Rest.", - "4": "Trennseiten werden automatisch erkannt und entfernt, so dass ein sauberes Enddokument garantiert ist." - }, - "formPrompt": "PDF mit Stirling-PDF Seitentrennern hochladen:", - "duplexMode": "Duplex-Modus (Scannen von Vorder- und Rückseite)", - "dividerDownload2": "Download 'Auto Splitter Divider (mit Anleitung).pdf'", - "submit": "Aufteilen" - }, - "sanitizePdf": { - "tags": "sauber,sicher,sicher,bedrohungen entfernen" - }, - "URLToPDF": { - "tags": "web capture,seite speichern,web to doc,archiv", - "title": "URL zu PDF", - "header": "URL zu PDF", - "submit": "Konvertieren", - "credit": "Verwendet WeasyPrint" - }, - "HTMLToPDF": { - "tags": "markup,webinhalt,transformation,konvertierung", - "title": "HTML zu PDF", - "header": "HTML zu PDF", - "help": "Akzeptiert HTML-Dateien und ZIPs mit html/css/images etc.", - "submit": "Konvertieren", - "credit": "Verwendet WeasyPrint", - "zoom": "Zoomstufe zur Darstellung der Website", - "pageWidth": "Breite der Seite in Zentimetern (Leer auf Standard)", - "pageHeight": "Höhe der Seite in Zentimetern (Leer auf Standard)", - "marginTop": "Oberer Rand der Seite in Millimetern (Leer auf Standard)", - "marginBottom": "Unterer Rand der Seite in Millimetern (Leer auf Standard)", - "marginLeft": "Linker Rand der Seite in Millimetern (Leer auf Standard)", - "marginRight": "Linker Rand der Seite in Millimetern (Leer auf Standard)", - "printBackground": "Den Hintergrund der Website rendern", - "defaultHeader": "Standardkopfzeile aktivieren (Name und Seitenzahl)", - "cssMediaType": "CSS-Medientyp der Seite ändern", - "none": "Keine", - "print": "Drucken", - "screen": "Bildschirm" - }, - "MarkdownToPDF": { - "tags": "markup,web-content,transformation,konvertieren", - "title": "Markdown zu PDF", - "header": "Markdown zu PDF", - "submit": "Konvertieren", - "help": "In Arbeit", - "credit": "Verwendet WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web inhalt,transformation,konvertieren,md", - "title": "PDF zu Markdown", - "header": "PDF zu Markdown", - "submit": "Konvertieren" - }, - "getPdfInfo": { - "tags": "infomation,daten,statistik", - "title": "Alle Informationen anzeigen", - "header": "Alle Informationen anzeigen", - "submit": "Informationen anzeigen", - "downloadJson": "Als JSON herunterladen" - }, - "extractPage": { - "tags": "extrahieren,seite" - }, - "PdfToSinglePage": { - "tags": "einzelseite,zusammenfassen" - }, - "showJS": { - "tags": "js,javascript", - "title": "Javascript anzeigen", - "header": "Javascript anzeigen", - "downloadJS": "Javascript herunterladen", - "submit": "Anzeigen" - }, - "autoRedact": { - "tags": "zensieren,schwärzen", - "title": "Automatisch zensieren/schwärzen", - "header": "Automatisch zensieren/schwärzen", - "colorLabel": "Farbe", - "textsToRedactLabel": "Zu zensierender Text (einer pro Zeile)", - "textsToRedactPlaceholder": "z.B. \\nVertraulich \\nStreng geheim", - "useRegexLabel": "Regex verwenden", - "wholeWordSearchLabel": "Ganzes Wort suchen", - "customPaddingLabel": "Zensierten Bereich vergrößern", - "convertPDFToImageLabel": "PDF in PDF-Bild konvertieren (zum Entfernen von Text hinter dem Kasten)", - "submitButton": "Zensieren" - }, - "redact": { - "tags": "zensieren,schwärzen,verstecken,verdunkeln,schwarz,markieren,verbergen,manuell", - "title": "Manuelles Zensieren (Schwärzen)", - "header": "Manuelles Zensieren (Schwärzen)", - "submit": "Zensieren", - "textBasedRedaction": "Textbasiertes Zensieren", - "pageBasedRedaction": "Seitenweises Zensieren", - "convertPDFToImageLabel": "Konvertiere PDF zu einem Bild (Zum Entfernen von Text hinter der Box verwenden)", - "pageRedactionNumbers": { - "title": "Seiten", - "placeholder": "(z.B. 1,2,8 oder 4,7,12-16 oder 2n-1)" - }, - "redactionColor": { - "title": "Zensurfarbe" - }, - "export": "Exportieren", - "upload": "Hochladen", - "boxRedaction": "Rechteck zeichnen zum zensieren", - "zoom": "Zoom", - "zoomIn": "Vergrößern", - "zoomOut": "Verkleinern", - "nextPage": "Nächste Seite", - "previousPage": "Vorherige Seite", - "toggleSidebar": "Seitenleiste umschalten", - "showThumbnails": "Vorschau anzeigen", - "showDocumentOutline": "Dokumentübersicht anzeigen (Doppelklick zum Auf/Einklappen aller Elemente)", - "showAttatchments": "Zeige Anhänge", - "showLayers": "Ebenen anzeigen (Doppelklick, um alle Ebenen auf den Standardzustand zurückzusetzen)", - "colourPicker": "Farbauswahl", - "findCurrentOutlineItem": "Aktuell gewähltes Element finden", - "applyChanges": "Änderungen übernehmen" - }, - "tableExtraxt": { - "tags": "CSV,tabelle,extrahieren" - }, - "autoSizeSplitPDF": { - "tags": "pdf,teilen,dokument,organisation" - }, - "overlay-pdfs": { - "tags": "overlay,überlagern", - "header": "PDF mit Overlay versehen", - "baseFile": { - "label": "Basis-PDF-Datei auswählen" - }, - "overlayFiles": { - "label": "Overlay-PDF-Datei auswählen" - }, - "mode": { - "label": "Overlay-Modus auswählen", - "sequential": "Sequentielles Overlay", - "interleaved": "Verschachteltes Overlay", - "fixedRepeat": "Feste-Wiederholung Overlay" - }, - "counts": { - "label": "Overlay Anzahl (für Feste-Wiederholung)", - "placeholder": "Komma-separierte Anzahl eingeben (z.B.: 2,3,1)" - }, - "position": { - "label": "Overlay Position auswählen", - "foreground": "Vordergrund", - "background": "Hintergrund" - }, - "submit": "Erstellen" - }, - "split-by-sections": { - "tags": "abschnitte,teilen,bearbeiten", - "title": "PDF in Abschnitte teilen", - "header": "PDF in Abschnitte teilen", - "horizontal": { - "label": "Horizontale Teiler", - "placeholder": "Anzahl horizontaler Teiler eingeben" - }, - "vertical": { - "label": "Vertikale Teiler", - "placeholder": "Anzahl vertikaler Teiler eingeben" - }, - "submit": "PDF teilen", - "merge": "In eine PDF zusammenfügen" - }, - "AddStampRequest": { - "tags": "stempeln,bild hinzufügen,bild zentrieren,wasserzeichen,pdf,einbetten,anpassen", - "header": "PDF Stempel", - "title": "PDF Stempel", - "stampType": "Stempeltyp", - "stampText": "Stempeltext", - "stampImage": "Stampelbild", - "alphabet": "Alphabet", - "fontSize": "Schriftart/Bildgröße", - "rotation": "Drehung", - "opacity": "Deckkraft", - "position": "Position", - "overrideX": "X-Koordinate überschreiben", - "overrideY": "Y-Koordinate überschreiben", - "customMargin": "Benutzerdefinierter Rand", - "customColor": "Benutzerdefinierte Textfarbe", - "submit": "Abschicken" - }, - "removeImagePdf": { - "tags": "bild entfernen,seitenoperationen,back end,server side" - }, - "splitPdfByChapters": { - "tags": "aufteilen,kapitel,lesezeichen,organisieren" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,digitale signatur,signatur validieren,überprüfen,Zertifikat,cert", - "title": "PDF-Signaturen überprüfen", - "header": "Digitale Signaturen überprüfen", - "selectPDF": "Signierte PDF-Datei auswählen", - "submit": "Signaturen überprüfen", - "results": "Gültigkeitsprüfungsergebnisse", - "status": { - "_value": "Status", - "valid": "Gültig", - "invalid": "Ungültig" - }, - "signer": "Unterzeichner", - "date": "Datum", - "reason": "Grund", - "location": "Ort", - "noSignatures": "Keine digitalen Signaturen in diesem Dokument gefunden", - "chain": { - "invalid": "Zertifikatskettenprüfung fehlgeschlagen - kann die Identität des Unterzeichners nicht verifizieren" - }, - "trust": { - "invalid": "Zertifikat nicht im Truststore - Quelle kann nicht verifiziert werden" - }, - "cert": { - "expired": "Zertifikat ist abgelaufen", - "revoked": "Zertifikat wurde widerrufen", - "info": "Zertifikat Details", - "issuer": "Aussteller", - "subject": "Betreff", - "serialNumber": "Seriennummer", - "validFrom": "Gültig von", - "validUntil": "Gültig bis", - "algorithm": "Algorithmus", - "keySize": "Schlüsselgröße", - "version": "Version", - "keyUsage": "Schlüsselverwendung", - "selfSigned": "Selbstsigniert", - "bits": "bits" - }, - "signature": { - "info": "Signaturinformationen", - "_value": "Signatur", - "mathValid": "Signatur ist mathematisch gültig ABER:" - }, - "selectCustomCert": "Benutzerdefinierte Zertifikatsdatei X.509 (Optional)" - }, - "replace-color": { - "title": "Farbe Ersetzen-Invertieren", - "header": "Farb-PDF Ersetzen-Invertieren", - "selectText": { - "1": "Ersetzen oder Invertieren von Farboptionen", - "2": "Standard(Standardfarben mit hohem Kontrast)", - "3": "Benutzerdefiniert(Benutzerdefinierte Farben)", - "4": "Vollinvertierung(Invertierung aller Farben)", - "5": "Farboptionen mit hohem Kontrast", - "6": "Weißer Text auf schwarzem Hintergrund", - "7": "Schwarzer Text auf weißem Hintergrund", - "8": "Gelber Text auf schwarzem Hintergrund", - "9": "Grüner Text auf schwarzem Hintergrund", - "10": "Textfarbe auswählen", - "11": "Hintergrundfarbe auswählen" - }, - "submit": "Ersetzen" - }, - "replaceColorPdf": { - "tags": "Farbe ersetzen,Seiteneinstellungen,Backend,Serverseite" - }, - "login": { - "title": "Anmelden", - "header": "Anmelden", - "signin": "Anmelden", - "rememberme": "Angemeldet bleiben", - "invalid": "Benutzername oder Passwort ungültig.", - "locked": "Ihr Konto wurde gesperrt.", - "signinTitle": "Bitte melden Sie sich an.", - "ssoSignIn": "Anmeldung per Single Sign-On", - "oAuth2AutoCreateDisabled": "OAUTH2 Benutzer automatisch erstellen deaktiviert", - "oAuth2AdminBlockedUser": "Die Registrierung bzw. das anmelden von nicht registrierten Benutzern ist derzeit gesperrt. Bitte wenden Sie sich an den Administrator.", - "oauth2RequestNotFound": "Autorisierungsanfrage nicht gefunden", - "oauth2InvalidUserInfoResponse": "Ungültige Benutzerinformationsantwort", - "oauth2invalidRequest": "ungültige Anfrage", - "oauth2AccessDenied": "Zugriff abgelehnt", - "oauth2InvalidTokenResponse": "Ungültige Token-Antwort", - "oauth2InvalidIdToken": "Ungültiges ID-Token", - "relyingPartyRegistrationNotFound": "Keine Relying-Party-Registrierung gefunden", - "userIsDisabled": "Benutzer ist deaktiviert, die Anmeldung ist mit diesem Benutzernamen derzeit gesperrt. Bitte wenden Sie sich an den Administrator.", - "alreadyLoggedIn": "Sie sind bereits an", - "alreadyLoggedIn2": "Geräten angemeldet. Bitte melden Sie sich dort ab und versuchen es dann erneut.", - "toManySessions": "Sie haben zu viele aktive Sitzungen", - "logoutMessage": "Sie wurden erfolgreich abgemeldet." - }, - "pdfToSinglePage": { - "title": "PDF zu einer Seite zusammenfassen", - "header": "PDF zu einer Seite zusammenfassen", - "submit": "Zusammenfassen" - }, - "pageExtracter": { - "title": "Seiten extrahieren", - "header": "Seiten extrahieren", - "submit": "Extrahieren", - "placeholder": "(z.B. 1,2,8 oder 4,7,12-16 oder 2n-1)" - }, - "sanitizePDF": { - "title": "PDF Bereinigen", - "header": "PDF Bereinigen", - "selectText": { - "1": "Javascript-Aktionen entfernen", - "2": "Eingebettete Dateien entfernen", - "3": "XMP-Metadaten entfernen", - "4": "Links entfernen", - "5": "Schriftarten entfernen", - "6": "Dokumenten-Metadaten entfernen" - }, - "submit": "Bereinigen" - }, - "adjustContrast": { - "title": "Kontrast anpassen", - "header": "Farben/Kontrast anpassen", - "contrast": "Kontrast:", - "brightness": "Helligkeit:", - "saturation": "Sättigung:", - "download": "Herunterladen" - }, - "compress": { - "title": "Komprimieren", - "header": "PDF komprimieren", - "credit": "Dieser Dienst verwendet qpdf für die PDF-Komprimierung/-Optimierung.", - "grayscale": { - "label": "Graustufen für Komprimierung anwenden" - }, - "selectText": { - "1": { - "_value": "Kompressionseinstellungen", - "1": "1-3 PDF-Komprimierung,
4-6 Leichte Bildkomprimierung,
7-9 Intensive Bildkomprimierung verringert die Bildqualität dramatisch" - }, - "2": "Optimierungsstufe:", - "4": "Automatischer Modus – Passt die Qualität automatisch an, um das PDF auf die exakte Größe zu bringen", - "5": "Erwartete PDF-Größe (z.B. 25 MB, 10,8 MB, 25 KB)" - }, - "submit": "Komprimieren" - }, - "decrypt": { - "passwordPrompt": "Diese Datei ist passwortgeschützt. Bitte geben Sie das Passwort ein:", - "cancelled": "Vorgang für PDF abgebrochen: {0}", - "noPassword": "Kein Passwort für verschlüsseltes PDF angegeben: {0}", - "invalidPassword": "Bitte versuchen Sie es erneut mit dem richtigen Passwort.", - "invalidPasswordHeader": "Falsches Passwort oder nicht unterstützte Verschlüsselung für PDF: {0}", - "unexpectedError": "Bei der Verarbeitung der Datei ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", - "serverError": "Serverfehler beim Entschlüsseln: {0}", - "success": "Datei erfolgreich entschlüsselt." - }, - "multiTool-advert": { - "message": "Diese Funktion ist auch auf unserer PDF-Multitool-Seite verfügbar. Probieren Sie sie aus, denn sie bietet eine verbesserte Benutzeroberfläche und zusätzliche Funktionen!" - }, - "pageRemover": { - "title": "Seiten entfernen", - "header": "PDF Seiten entfernen", - "pagesToDelete": "Seiten zu entfernen (geben Sie eine Kommagetrennte Liste der Seitenzahlen an):", - "submit": "Seiten löschen", - "placeholder": "(z.B. 1,2,6 oder 1-10,15-30)" - }, - "imageToPDF": { - "title": "Bild zu PDF", - "header": "Bild zu PDF", - "submit": "Umwandeln", - "selectLabel": "Bild anpassen", - "fillPage": "Seite füllen", - "fitDocumentToImage": "Seite an Bild anpassen", - "maintainAspectRatio": "Seitenverhältnisse beibehalten", - "selectText": { - "2": "PDF automatisch drehen", - "3": "Mehrere Dateien verarbeiten (nur aktiv, wenn Sie mit mehreren Bildern arbeiten)", - "4": "In ein einziges PDF zusammenführen", - "5": "In separate PDFs konvertieren" - } - }, - "PDFToCSV": { - "title": "PDF zu CSV", - "header": "PDF zu CSV", - "prompt": "Seite mit der zu extrahierenden Tabelle wählen", - "submit": "Extrahieren" - }, - "split-by-size-or-count": { - "title": "PDF nach Größe oder Anzahl teilen", - "header": "PDF nach Größe oder Anzahl teilen", - "type": { - "label": "Teil-Modus wählen", - "size": "Nach Größe", - "pageCount": "Nach Anzahl Seiten", - "docCount": "Nach Anzahl Dokumenten" - }, - "value": { - "label": "Wert eingeben", - "placeholder": "Größe eingeben (z.B.: 2MB oder 3KB) oder Anzahl (z.B.: 5)" - }, - "submit": "Erstellen" - }, - "printFile": { - "title": "Datei drucken", - "header": "Datei an Drucker senden", - "selectText": { - "1": "Wähle die auszudruckende Datei", - "2": "Druckernamen eingeben" - }, - "submit": "Drucken" - }, - "licenses": { - "nav": "Lizenzen", - "title": "Lizenzen von Drittanbietern", - "header": "Lizenzen von Drittanbietern", - "module": "Modul", - "version": "Version", - "license": "Lizenz" - }, - "survey": { - "nav": "Umfrage", - "title": "Stirling-PDF-Umfrage", - "description": "Stirling-PDF hat kein Tracking, daher möchten wir von unseren Benutzern hören, wie wir Stirling-PDF verbessern können!", - "changes": "Stirling-PDF hat sich seit der letzten Umfrage verändert! Mehr Informationen finden Sie bitte in unserem Blog-Beitrag hier:", - "changes2": "Mit diesen Änderungen erhalten wir beauftragte Geschäftsunterstützung und Finanzierung", - "please": "Bitte nehmen Sie an unserer Umfrage teil!", - "disabled": "(Das Umfrage-Popup wird in folgenden Updates deaktiviert, ist aber am Fuß der Seite verfügbar.)", - "button": "Umfrage durchführen", - "dontShowAgain": "Nicht mehr anzeigen", - "meeting": { - "1": "Wenn Sie Stirling PDF bei der Arbeit verwenden, würden wir gerne mit Ihnen sprechen. Wir bieten technische Supportsitzungen im Austausch für eine 15-minütige Benutzereinführungssitzung an.", - "2": "Ihr Vorteil:", - "3": "Sie erhalten Hilfe bei der Bereitstellung, Integration oder Fehlerbehebung", - "4": "Sie können direktes Feedback zu Leistung, Randfällen und Funktionslücken geben", - "5": "Sie helfen Stirling PDF für den Einsatz in Unternehmen zu verbessern", - "6": "Bei Interesse können Sie direkt einen Termin bei unserem Team buchen. (Nur englischsprachig)", - "7": "Ich freue mich darauf, mich mit Ihren Anwendungsfällen zu befassen und Stirling PDF noch besser zu machen!", - "notInterested": "Sie sind kein Unternehmen und/oder an einem Treffen interessiert?", - "button": "Besprechung buchen" - } - }, - "removeImage": { - "title": "Bild entfernen", - "header": "Bild entfernen", - "removeImage": "Bild entfernen", - "submit": "Bild entfernen" - }, - "splitByChapters": { - "title": "PDF nach Kapiteln aufteilen", - "header": "PDF nach Kapiteln aufteilen", - "bookmarkLevel": "Lesezeichenebene", - "includeMetadata": "Metadaten einschließen", - "allowDuplicates": "Duplikate erlauben", - "desc": { - "1": "Dieses Werkzeug teilt eine PDF-Datei auf der Grundlage ihrer Kapitelstruktur in mehrere PDF-Dateien auf.", - "2": "Lesezeichenebene: Wählen Sie die Ebene der Lesezeichen, die für die Aufteilung verwendet werden soll (0 für die erste Ebene, 1 für die zweite Ebene usw.).", - "3": "Metadaten einschließen: Wenn diese Option aktiviert ist, werden die Metadaten der ursprünglichen PDF-Datei in jede aufgeteilte PDF-Datei übernommen.", - "4": "Duplikate erlauben: Wenn diese Option aktiviert ist, können mehrere Lesezeichen auf derselben Seite separate PDF Dateien erstellen." - }, - "submit": "PDF teilen" - }, - "fileChooser": { - "click": "Klicken", - "or": "oder", - "dragAndDrop": "Drag & Drop", - "dragAndDropPDF": "Drag & Drop PDF-Datei", - "dragAndDropImage": "Drag & Drop Bilddatei", - "hoveredDragAndDrop": "Datei(en) hierhin Ziehen & Fallenlassen", - "extractPDF": "Extrahiere..." - }, - "releases": { - "footer": "Veröffentlichungen", - "title": "Versionshinweise", - "header": "Versionshinweise", - "current": { - "version": "Aktuelle Version" - }, - "note": "Versionshinweise sind nur auf Englisch verfügbar" - }, - "cookieBanner": { - "popUp": { - "title": "Wie wir Cookies verwenden", - "description": { - "1": "Wir verwenden Cookies und andere Technologien, damit Stirling PDF für Sie besser funktioniert. Dies hilft uns dabei, unsere Tools zu verbessern und weiterhin Funktionen zu entwickeln, die Ihnen gefallen werden.", - "2": "Wenn Sie dies nicht möchten, klicken Sie auf „Nein, Danke“. Dadurch werden nur die unbedingt erforderlichen Cookies aktiviert, die für einen reibungslosen Ablauf erforderlich sind." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "Nein Danke", - "showPreferencesBtn": "Einstellungen verwalten" - }, - "preferencesModal": { - "title": "Einwilligungszentrum", - "acceptAllBtn": "Akzeptiere alle", - "acceptNecessaryBtn": "Alle ablehnen", - "savePreferencesBtn": "Einstellungen speichern", - "closeIconLabel": "Anzeige schließen", - "serviceCounterLabel": "Service | Dienstleistungen", - "subtitle": "Cookie-Nutzung", - "description": { - "1": "Stirling PDF verwendet Cookies und ähnliche Technologien, um Ihr Erlebnis zu verbessern und den Einsatz unserer Tools zu verstehen. Dies hilft uns, die Leistung zu verbessern, die für Sie wichtigen Funktionen zu entwickeln und unseren Nutzern kontinuierlichen Support zu bieten.", - "2": "Stirling PDF kann und wird niemals den Inhalt der von Ihnen verwendeten Dokumente verfolgen oder darauf zugreifen.", - "3": "Ihre Privatsphäre und Ihr Vertrauen stehen bei uns im Mittelpunkt." - }, - "necessary": { - "title": { - "1": "Streng notwendige Cookies", - "2": "Immer aktiviert" - }, - "description": "Diese Cookies sind für das ordnungsgemäße Funktionieren der Website unerlässlich. Sie ermöglichen grundlegende Funktionen wie das Festlegen Ihrer Datenschutzeinstellungen, das Anmelden und das Ausfüllen von Formularen. Daher können sie nicht deaktiviert werden." - }, - "analytics": { - "title": "Analyse", - "description": "Diese Cookies helfen uns zu verstehen, wie unsere Tools genutzt werden, damit wir uns darauf konzentrieren können, die Funktionen zu entwickeln, die unserer Community am meisten am Herzen liegen. Seien Sie beruhigt – Stirling PDF kann und wird niemals den Inhalt der Dokumente verfolgen, mit denen Sie arbeiten." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/el-GR/translation.json b/frontend/dist/locales/el-GR/translation.json deleted file mode 100644 index e4a7d1954..000000000 --- a/frontend/dist/locales/el-GR/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Μέγεθος γραμματοσειράς", - "fontName": "Όνομα γραμματοσειράς", - "title": "Προσθήκη αριθμών σελίδων", - "header": "Προσθήκη αριθμών σελίδων", - "selectText": { - "1": "Επιλέξτε αρχείο PDF:", - "2": "Μέγεθος περιθωρίου", - "3": "Θέση", - "4": "Αριθμός έναρξης", - "5": "Σελίδες προς αρίθμηση", - "6": "Προσαρμοσμένο κείμενο" - }, - "customTextDesc": "Προσαρμοσμένο κείμενο", - "numberPagesDesc": "Ποιες σελίδες να αριθμηθούν, προεπιλογή 'all', δέχεται επίσης 1-5 ή 2,5,9 κλπ", - "customNumberDesc": "Προεπιλογή σε {n}, δέχεται επίσης 'Σελίδα {n} από {total}', 'Κείμενο-{n}', '{filename}-{n}", - "submit": "Προσθήκη αριθμών σελίδων" - }, - "pdfPrompt": "Επιλέξτε PDF(s)", - "multiPdfPrompt": "Επιλέξτε PDFs (2+)", - "multiPdfDropPrompt": "Επιλέξτε (ή σύρετε & αφήστε) όλα τα PDF που χρειάζεστε", - "imgPrompt": "Επιλέξτε εικόνα(ες)", - "genericSubmit": "Υποβολή", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Προειδοποίηση: Αυτή η διαδικασία μπορεί να διαρκέσει έως ένα λεπτό ανάλογα με το μέγεθος του αρχείου", - "pageOrderPrompt": "Προσαρμοσμένη σειρά σελίδων (Εισάγετε μια λίστα αριθμών σελίδων χωρισμένη με κόμματα ή συναρτήσεις όπως 2n+1):", - "pageSelectionPrompt": "Προσαρμοσμένη επιλογή σελίδων (Εισάγετε μια λίστα αριθμών σελίδων χωρισμένη με κόμματα 1,5,6 ή συναρτήσεις όπως 2n+1):", - "goToPage": "Μετάβαση", - "true": "Αληθές", - "false": "Ψευδές", - "unknown": "Άγνωστο", - "save": "Αποθήκευση", - "saveToBrowser": "Αποθήκευση στον περιηγητή", - "close": "Κλείσιμο", - "filesSelected": "αρχεία επιλεγμένα", - "noFavourites": "Δεν έχουν προστεθεί αγαπημένα", - "downloadComplete": "Η λήψη ολοκληρώθηκε", - "bored": "Βαριέστε την αναμονή;", - "alphabet": "Αλφάβητο", - "downloadPdf": "Λήψη PDF", - "text": "Κείμενο", - "font": "Γραμματοσειρά", - "selectFillter": "-- Επιλέξτε --", - "pageNum": "Αριθμός σελίδας", - "sizes": { - "small": "Μικρό", - "medium": "Μεσαίο", - "large": "Μεγάλο", - "x-large": "Πολύ μεγάλο" - }, - "error": { - "pdfPassword": "Το PDF έχει προστασία κωδικού και είτε δεν δόθηκε κωδικός ή ήταν λανθασμένος", - "_value": "Σφάλμα", - "sorry": "Συγγνώμη για το πρόβλημα!", - "needHelp": "Χρειάζεστε βοήθεια / Βρήκατε πρόβλημα;", - "contactTip": "Εάν εξακολουθείτε να αντιμετωπίζετε προβλήματα, μη διστάσετε να επικοινωνήσετε μαζί μας για βοήθεια. Μπορείτε να υποβάλετε ένα ticket στη σελίδα μας στο GitHub ή να επικοινωνήσετε μαζί μας μέσω Discord:", - "404": { - "head": "404 - Η σελίδα δεν βρέθηκε | Ωχ, σκοντάψαμε στον κώδικα!", - "1": "Δεν μπορούμε να βρούμε τη σελίδα που ψάχνετε.", - "2": "Κάτι πήγε στραβά" - }, - "github": "Υποβολή ticket στο GitHub", - "showStack": "Εμφάνιση ίχνους στοίβας", - "copyStack": "Αντιγραφή ίχνους στοίβας", - "githubSubmit": "GitHub - Υποβολή ticket", - "discordSubmit": "Discord - Υποβολή αιτήματος υποστήριξης" - }, - "delete": "Διαγραφή", - "username": "Όνομα χρήστη", - "password": "Κωδικός", - "welcome": "Καλώς ήρθατε", - "property": "Ιδιότητα", - "black": "Μαύρο", - "white": "Λευκό", - "red": "Κόκκινο", - "green": "Πράσινο", - "blue": "Μπλε", - "custom": "Προσαρμογή...", - "WorkInProgess": "Εργασία σε εξέλιξη, μπορεί να μην λειτουργεί ή να έχει σφάλματα, παρακαλώ αναφέρετε τυχόν προβλήματα!", - "poweredBy": "Με την υποστήριξη του", - "yes": "Ναι", - "no": "Όχι", - "changedCredsMessage": "Τα διαπιστευτήρια άλλαξαν!", - "notAuthenticatedMessage": "Ο χρήστης δεν έχει πιστοποιηθεί.", - "userNotFoundMessage": "Ο χρήστης δεν βρέθηκε.", - "incorrectPasswordMessage": "Ο τρέχων κωδικός είναι λανθασμένος.", - "usernameExistsMessage": "Το νέο όνομα χρήστη υπάρχει ήδη.", - "invalidUsernameMessage": "Μη έγκυρο όνομα χρήστη, το όνομα χρήστη μπορεί να περιέχει μόνο γράμματα, αριθμούς και τους ειδικούς χαρακτήρες @._+- ή πρέπει να είναι έγκυρη διεύθυνση email.", - "invalidPasswordMessage": "Ο κωδικός δεν μπορεί να είναι κενός και δεν μπορεί να έχει κενά στην αρχή ή στο τέλος.", - "confirmPasswordErrorMessage": "Ο νέος κωδικός και η επιβεβαίωση νέου κωδικού πρέπει να ταιριάζουν.", - "deleteCurrentUserMessage": "Δεν είναι δυνατή η διαγραφή του τρέχοντος συνδεδεμένου χρήστη.", - "deleteUsernameExistsMessage": "Το όνομα χρήστη δεν υπάρχει και δεν μπορεί να διαγραφεί.", - "downgradeCurrentUserMessage": "Δεν είναι δυνατή η υποβάθμιση του ρόλου του τρέχοντος χρήστη", - "disabledCurrentUserMessage": "Ο τρέχων χρήστης δεν μπορεί να απενεργοποιηθεί", - "downgradeCurrentUserLongMessage": "Δεν είναι δυνατή η υποβάθμιση του ρόλου του τρέχοντος χρήστη. Επομένως, ο τρέχων χρήστης δεν θα εμφανίζεται.", - "userAlreadyExistsOAuthMessage": "Ο χρήστης υπάρχει ήδη ως χρήστης OAuth2.", - "userAlreadyExistsWebMessage": "Ο χρήστης υπάρχει ήδη ως χρήστης web.", - "oops": "Ωχ!", - "help": "Βοήθεια", - "goHomepage": "Μετάβαση στην αρχική σελίδα", - "joinDiscord": "Συμμετοχή στον Discord server μας", - "seeDockerHub": "Δείτε το Docker Hub", - "visitGithub": "Επισκεφθείτε το αποθετήριο GitHub", - "donate": "Δωρεά", - "color": "Χρώμα", - "sponsor": "Χορηγός", - "info": "Πληροφορίες", - "pro": "Pro", - "page": "Σελίδα", - "pages": "Σελίδες", - "loading": "Φόρτωση...", - "addToDoc": "Προσθήκη στο έγγραφο", - "reset": "Επαναφορά", - "apply": "Εφαρμογή", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Πολιτική απορρήτου", - "terms": "Όροι και προϋποθέσεις", - "accessibility": "Προσβασιμότητα", - "cookie": "Πολιτική cookies", - "impressum": "Ταυτότητα", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Μενού Pipeline (Beta)", - "uploadButton": "Μεταφόρτωση προσαρμοσμένου", - "configureButton": "Διαμόρφωση", - "defaultOption": "Προσαρμογή", - "submitButton": "Υποβολή", - "help": "Βοήθεια Pipeline", - "scanHelp": "Βοήθεια σάρωσης φακέλων", - "deletePrompt": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το pipeline;", - "tags": "αυτοματοποίηση,ακολουθία,προγραμματισμένο,επεξεργασία-παρτίδας", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Διαμόρφωση Pipeline", - "pipelineNameLabel": "Όνομα Pipeline", - "saveSettings": "Αποθήκευση ρυθμίσεων λειτουργίας", - "pipelineNamePrompt": "Εισάγετε όνομα pipeline εδώ", - "selectOperation": "Επιλογή λειτουργίας", - "addOperationButton": "Προσθήκη λειτουργίας", - "pipelineHeader": "Pipeline:", - "saveButton": "Λήψη", - "validateButton": "Επικύρωση" - }, - "enterpriseEdition": { - "button": "Αναβάθμιση σε Pro", - "warning": "Αυτή η λειτουργία είναι διαθέσιμη μόνο για χρήστες Pro.", - "yamlAdvert": "Το Stirling PDF Pro υποστηρίζει αρχεία ρυθμίσεων YAML και άλλες λειτουργίες SSO.", - "ssoAdvert": "Ψάχνετε για περισσότερες λειτουργίες διαχείρισης χρηστών; Δείτε το Stirling PDF Pro" - }, - "analytics": { - "title": "Θέλετε να κάνετε το Stirling PDF καλύτερο;", - "paragraph1": "Το Stirling PDF διαθέτει προαιρετικά analytics για να μας βοηθήσει να βελτιώσουμε το προϊόν. Δεν παρακολουθούμε προσωπικές πληροφορίες ή περιεχόμενο αρχείων.", - "paragraph2": "Παρακαλούμε σκεφτείτε να ενεργοποιήσετε τα analytics για να βοηθήσετε το Stirling-PDF να αναπτυχθεί και να μας επιτρέψετε να κατανοήσουμε καλύτερα τους χρήστες μας.", - "enable": "Ενεργοποίηση analytics", - "disable": "Απενεργοποίηση analytics", - "settings": "Μπορείτε να αλλάξετε τις ρυθμίσεις για τα analytics στο αρχείο config/settings.yml" - }, - "navbar": { - "favorite": "Αγαπημένα", - "recent": "New and recently updated", - "darkmode": "Σκοτεινή λειτουργία", - "language": "Γλώσσες", - "settings": "Ρυθμίσεις", - "allTools": "Εργαλεία", - "multiTool": "Πολλαπλά εργαλεία", - "search": "Αναζήτηση", - "sections": { - "organize": "Οργάνωση", - "convertTo": "Μετατροπή σε PDF", - "convertFrom": "Μετατροπή από PDF", - "security": "Υπογραφή & Ασφάλεια", - "advance": "Προχωρημένα", - "edit": "Προβολή & Επεξεργασία", - "popular": "Δημοφιλή" - } - }, - "settings": { - "title": "Ρυθμίσεις", - "update": "Διαθέσιμη ενημέρωση", - "updateAvailable": "{0} είναι η τρέχουσα εγκατεστημένη έκδοση. Μια νέα έκδοση ({1}) είναι διαθέσιμη.", - "appVersion": "Έκδοση εφαρμογής:", - "downloadOption": { - "title": "Επιλογή λήψης (Για μεμονωμένη λήψη αρχείων χωρίς συμπίεση):", - "1": "Άνοιγμα στο ίδιο παράθυρο", - "2": "Άνοιγμα σε νέο παράθυρο", - "3": "Λήψη αρχείου" - }, - "zipThreshold": "Συμπίεση αρχείων όταν ο αριθμός των ληφθέντων αρχείων υπερβαίνει", - "signOut": "Αποσύνδεση", - "accountSettings": "Ρυθμίσεις λογαριασμού", - "bored": { - "help": "Ενεργοποίηση παιχνιδιού easter egg" - }, - "cacheInputs": { - "name": "Αποθήκευση εισόδων φόρμας", - "help": "Ενεργοποίηση για αποθήκευση προηγούμενων εισόδων για μελλοντική χρήση" - } - }, - "changeCreds": { - "title": "Αλλαγή διαπιστευτηρίων", - "header": "Ενημέρωση στοιχείων λογαριασμού", - "changePassword": "Χρησιμοποιείτε προεπιλεγμένα διαπιστευτήρια σύνδεσης. Παρακαλώ εισάγετε νέο κωδικό", - "newUsername": "Νέο όνομα χρήστη", - "oldPassword": "Τρέχων κωδικός", - "newPassword": "Νέος κωδικός", - "confirmNewPassword": "Επιβεβαίωση νέου κωδικού", - "submit": "Υποβολή αλλαγών" - }, - "account": { - "title": "Ρυθμίσεις λογαριασμού", - "accountSettings": "Ρυθμίσεις λογαριασμού", - "adminSettings": "Ρυθμίσεις διαχειριστή - Προβολή και προσθήκη χρηστών", - "userControlSettings": "Ρυθμίσεις ελέγχου χρηστών", - "changeUsername": "Αλλαγή ονόματος χρήστη", - "newUsername": "Νέο όνομα χρήστη", - "password": "Κωδικός επιβεβαίωσης", - "oldPassword": "Παλιός κωδικός", - "newPassword": "Νέος κωδικός", - "changePassword": "Αλλαγή κωδικού", - "confirmNewPassword": "Επιβεβαίωση νέου κωδικού", - "signOut": "Αποσύνδεση", - "yourApiKey": "Το κλειδί API σας", - "syncTitle": "Συγχρονισμός ρυθμίσεων περιηγητή με λογαριασμό", - "settingsCompare": "Σύγκριση ρυθμίσεων:", - "property": "Ιδιότητα", - "webBrowserSettings": "Ρύθμιση περιηγητή", - "syncToBrowser": "Συγχρονισμός λογαριασμού -> περιηγητή", - "syncToAccount": "Συγχρονισμός λογαριασμού <- περιηγητή" - }, - "adminUserSettings": { - "title": "Ρυθμίσεις ελέγχου χρήστη", - "header": "Ρυθμίσεις ελέγχου διαχειριστή χρήστη", - "admin": "Διαχειριστής", - "user": "Χρήστης", - "addUser": "Προσθήκη νέου χρήστη", - "deleteUser": "Διαγραφή χρήστη", - "confirmDeleteUser": "Θέλετε να διαγραφεί ο χρήστης;", - "confirmChangeUserStatus": "Θέλετε να απενεργοποιηθεί/ενεργοποιηθεί ο χρήστης;", - "usernameInfo": "Το όνομα χρήστη μπορεί να περιέχει μόνο γράμματα, αριθμούς και τους ειδικούς χαρακτήρες @._+- ή πρέπει να είναι έγκυρη διεύθυνση email.", - "roles": "Ρόλοι", - "role": "Ρόλος", - "actions": "Ενέργειες", - "apiUser": "Περιορισμένος χρήστης API", - "extraApiUser": "Επιπλέον περιορισμένος χρήστης API", - "webOnlyUser": "Χρήστης μόνο web", - "demoUser": "Δοκιμαστικός χρήστης (Χωρίς προσαρμοσμένες ρυθμίσεις)", - "internalApiUser": "Εσωτερικός χρήστης API", - "forceChange": "Υποχρεωτική αλλαγή κωδικού κατά τη σύνδεση", - "submit": "Αποθήκευση χρήστη", - "changeUserRole": "Αλλαγή ρόλου χρήστη", - "authenticated": "Πιστοποιημένος", - "editOwnProfil": "Επεξεργασία προσωπικού προφίλ", - "enabledUser": "ενεργοποιημένος χρήστης", - "disabledUser": "απενεργοποιημένος χρήστης", - "activeUsers": "Ενεργοί χρήστες:", - "disabledUsers": "Απενεργοποιημένοι χρήστες:", - "totalUsers": "Συνολικοί χρήστες:", - "lastRequest": "Τελευταίο αίτημα", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Εισαγωγή/Εξαγωγή βάσης δεδομένων", - "header": "Εισαγωγή/Εξαγωγή βάσης δεδομένων", - "fileName": "Όνομα αρχείου", - "creationDate": "Ημερομηνία δημιουργίας", - "fileSize": "Μέγεθος αρχείου", - "deleteBackupFile": "Διαγραφή αρχείου αντιγράφου ασφαλείας", - "importBackupFile": "Εισαγωγή αρχείου αντιγράφου ασφαλείας", - "createBackupFile": "Δημιουργία αρχείου αντιγράφου ασφαλείας", - "downloadBackupFile": "Λήψη αρχείου αντιγράφου ασφαλείας", - "info_1": "Κατά την εισαγωγή δεδομένων, είναι σημαντικό να διασφαλιστεί η σωστή δομή. Εάν δεν είστε σίγουροι για το τι κάνετε, ζητήστε συμβουλές και υποστήριξη από έναν επαγγελματία. Ένα σφάλμα στη δομή μπορεί να προκαλέσει δυσλειτουργίες εφαρμογής, έως και πλήρη αδυναμία εκτέλεσης της εφαρμογής.", - "info_2": "Το όνομα αρχείου δεν έχει σημασία κατά τη μεταφόρτωση. Θα μετονομαστεί αργότερα ακολουθώντας τη μορφή backup_user_yyyyMMddHHmm.sql, διασφαλίζοντας μια συνεπή σύμβαση ονομασίας.", - "submit": "Εισαγωγή αντιγράφου ασφαλείας", - "importIntoDatabaseSuccessed": "Επιτυχής εισαγωγή στη βάση δεδομένων", - "backupCreated": "Επιτυχής δημιουργία αντιγράφου ασφαλείας βάσης δεδομένων", - "fileNotFound": "Το αρχείο δεν βρέθηκε", - "fileNullOrEmpty": "Το αρχείο δεν πρέπει να είναι κενό", - "failedImportFile": "Αποτυχία εισαγωγής αρχείου", - "notSupported": "Αυτή η λειτουργία δεν είναι διαθέσιμη για τη σύνδεση της βάσης δεδομένων σας." - }, - "session": { - "expired": "Η συνεδρία σας έληξε. Παρακαλώ ανανεώστε τη σελίδα και προσπαθήστε ξανά.", - "refreshPage": "Ανανέωση σελίδας" - }, - "home": { - "desc": "Ο τοπικά φιλοξενούμενος προορισμός σας για όλες τις ανάγκες σας σε PDF.", - "searchBar": "Αναζήτηση λειτουργιών...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Προβολή, σχολιασμός, προσθήκη κειμένου ή εικόνων" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "Πολυεργαλείο PDF", - "desc": "Συγχώνευση, Περιστροφή, Αναδιάταξη, Διαχωρισμός και Αφαίρεση σελίδων" - }, - "merge": { - "title": "Συγχώνευση", - "desc": "Εύκολη συγχώνευση πολλών PDF σε ένα." - }, - "split": { - "title": "Διαχωρισμός", - "desc": "Διαχωρισμός PDF σε πολλαπλά έγγραφα" - }, - "rotate": { - "title": "Περιστροφή", - "desc": "Εύκολη περιστροφή των PDF σας." - }, - "imageToPdf": { - "title": "Εικόνα σε PDF", - "desc": "Μετατροπή εικόνας (PNG, JPEG, GIF) σε PDF." - }, - "pdfToImage": { - "title": "PDF σε εικόνα", - "desc": "Μετατροπή PDF σε εικόνα. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Οργάνωση", - "desc": "Αφαίρεση/Αναδιάταξη σελίδων σε οποιαδήποτε σειρά" - }, - "addImage": { - "title": "Προσθήκη εικόνας", - "desc": "Προσθήκη εικόνας σε συγκεκριμένη θέση στο PDF" - }, - "watermark": { - "title": "Προσθήκη υδατογραφήματος", - "desc": "Προσθήκη προσαρμοσμένου υδατογραφήματος στο έγγραφο PDF." - }, - "permissions": { - "title": "Αλλαγή δικαιωμάτων", - "desc": "Αλλαγή των δικαιωμάτων του εγγράφου PDF" - }, - "removePages": { - "title": "Αφαίρεση", - "desc": "Διαγραφή ανεπιθύμητων σελίδων από το έγγραφο PDF." - }, - "addPassword": { - "title": "Προσθήκη κωδικού", - "desc": "Κρυπτογράφηση του εγγράφου PDF με κωδικό." - }, - "removePassword": { - "title": "Αφαίρεση κωδικού", - "desc": "Αφαίρεση προστασίας κωδικού από το έγγραφο PDF." - }, - "compressPdfs": { - "title": "Συμπίεση", - "desc": "Συμπίεση PDF για μείωση του μεγέθους αρχείου." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Αλλαγή μεταδεδομένων", - "desc": "Αλλαγή/Αφαίρεση/Προσθήκη μεταδεδομένων από ένα έγγραφο PDF" - }, - "fileToPDF": { - "title": "Μετατροπή αρχείου σε PDF", - "desc": "Μετατροπή σχεδόν οποιουδήποτε αρχείου σε PDF (DOCX, PNG, XLS, PPT, TXT και άλλα)" - }, - "ocr": { - "title": "OCR / Καθαρισμός σαρώσεων", - "desc": "Καθαρισμός σαρώσεων και ανίχνευση κειμένου από εικόνες μέσα σε PDF και επαναπροσθήκη ως κείμενο." - }, - "extractImages": { - "title": "Εξαγωγή εικόνων", - "desc": "Εξαγωγή όλων των εικόνων από PDF και αποθήκευση σε zip" - }, - "pdfToPDFA": { - "title": "PDF σε PDF/A", - "desc": "Μετατροπή PDF σε PDF/A για μακροχρόνια αποθήκευση" - }, - "PDFToWord": { - "title": "PDF σε Word", - "desc": "Μετατροπή PDF σε μορφές Word (DOC, DOCX και ODT)" - }, - "PDFToPresentation": { - "title": "PDF σε Παρουσίαση", - "desc": "Μετατροπή PDF σε μορφές παρουσίασης (PPT, PPTX και ODP)" - }, - "PDFToText": { - "title": "PDF σε RTF (Κείμενο)", - "desc": "Μετατροπή PDF σε μορφή κειμένου ή RTF" - }, - "PDFToHTML": { - "title": "PDF σε HTML", - "desc": "Μετατροπή PDF σε μορφή HTML" - }, - "PDFToXML": { - "title": "PDF σε XML", - "desc": "Μετατροπή PDF σε μορφή XML" - }, - "ScannerImageSplit": { - "title": "Ανίχνευση/Διαχωρισμός σαρωμένων φωτογραφιών", - "desc": "Διαχωρισμός πολλαπλών φωτογραφιών από μια φωτογραφία/PDF" - }, - "sign": { - "title": "Υπογραφή", - "desc": "Προσθήκη υπογραφής σε PDF με σχεδίαση, κείμενο ή εικόνα" - }, - "flatten": { - "title": "Ισοπέδωση", - "desc": "Αφαίρεση όλων των διαδραστικών στοιχείων και φορμών από ένα PDF" - }, - "repair": { - "title": "Επιδιόρθωση", - "desc": "Προσπάθεια επιδιόρθωσης κατεστραμμένου/χαλασμένου PDF" - }, - "removeBlanks": { - "title": "Αφαίρεση κενών σελίδων", - "desc": "Ανίχνευση και αφαίρεση κενών σελίδων από ένα έγγραφο" - }, - "removeAnnotations": { - "title": "Αφαίρεση σχολίων", - "desc": "Αφαίρεση όλων των σχολίων/επισημάνσεων από ένα PDF" - }, - "compare": { - "title": "Σύγκριση", - "desc": "Σύγκριση και εμφάνιση διαφορών μεταξύ 2 εγγράφων PDF" - }, - "certSign": { - "title": "Υπογραφή με πιστοποιητικό", - "desc": "Υπογραφή PDF με πιστοποιητικό/κλειδί (PEM/P12)" - }, - "removeCertSign": { - "title": "Αφαίρεση υπογραφής πιστοποιητικού", - "desc": "Αφαίρεση υπογραφής πιστοποιητικού από PDF" - }, - "pageLayout": { - "title": "Διάταξη πολλαπλών σελίδων", - "desc": "Συγχώνευση πολλαπλών σελίδων ενός εγγράφου PDF σε μία σελίδα" - }, - "scalePages": { - "title": "Προσαρμογή μεγέθους/κλίμακας σελίδας", - "desc": "Αλλαγή του μεγέθους/κλίμακας μιας σελίδας και/ή του περιεχομένου της." - }, - "pipeline": { - "title": "Pipeline", - "desc": "Εκτέλεση πολλαπλών ενεργειών σε PDF ορίζοντας scripts pipeline" - }, - "add-page-numbers": { - "title": "Προσθήκη αριθμών σελίδων", - "desc": "Προσθήκη αριθμών σελίδων σε όλο το έγγραφο σε συγκεκριμένη θέση" - }, - "auto-rename": { - "title": "Αυτόματη μετονομασία αρχείου PDF", - "desc": "Αυτόματη μετονομασία ενός PDF με βάση την ανιχνευμένη κεφαλίδα" - }, - "adjust-contrast": { - "title": "Προσαρμογή χρωμάτων/αντίθεσης", - "desc": "Προσαρμογή αντίθεσης, κορεσμού και φωτεινότητας ενός PDF" - }, - "crop": { - "title": "Περικοπή PDF", - "desc": "Περικοπή PDF για μείωση του μεγέθους του (διατηρεί το κείμενο!)" - }, - "autoSplitPDF": { - "title": "Αυτόματος διαχωρισμός σελίδων", - "desc": "Αυτόματος διαχωρισμός σαρωμένου PDF με φυσικό σαρωμένο διαχωριστή σελίδων QR Code" - }, - "sanitizePdf": { - "title": "Εξυγίανση", - "desc": "Αφαίρεση scripts και άλλων στοιχείων από αρχεία PDF" - }, - "URLToPDF": { - "title": "URL/Ιστοσελίδα σε PDF", - "desc": "Μετατρέπει οποιοδήποτε http(s)URL σε PDF" - }, - "HTMLToPDF": { - "title": "HTML σε PDF", - "desc": "Μετατρέπει οποιοδήποτε αρχείο HTML ή zip σε PDF" - }, - "MarkdownToPDF": { - "title": "Markdown σε PDF", - "desc": "Μετατρέπει οποιοδήποτε αρχείο Markdown σε PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Λήψη ΟΛΩΝ των πληροφοριών του PDF", - "desc": "Λήψη όλων των δυνατών πληροφοριών για τα PDF" - }, - "extractPage": { - "title": "Εξαγωγή σελίδας(ων)", - "desc": "Εξαγωγή επιλεγμένων σελίδων από PDF" - }, - "PdfToSinglePage": { - "title": "Ενιαία μεγάλη σελίδα", - "desc": "Συγχώνευση όλων των σελίδων PDF σε μία μεγάλη σελίδα" - }, - "showJS": { - "title": "Εμφάνιση Javascript", - "desc": "Αναζήτηση και εμφάνιση οποιουδήποτε JS ενσωματωμένου σε PDF" - }, - "autoRedact": { - "title": "Αυτόματη απόκρυψη", - "desc": "Αυτόματη απόκρυψη (μαύρισμα) κειμένου σε PDF βάσει εισαγόμενου κειμένου" - }, - "redact": { - "title": "Χειροκίνητη απόκρυψη", - "desc": "Απόκρυψη σε PDF βάσει επιλεγμένου κειμένου, σχεδιασμένων σχημάτων και/ή επιλεγμένων σελίδων" - }, - "tableExtraxt": { - "title": "PDF σε CSV", - "desc": "Εξαγωγή πινάκων από PDF και μετατροπή σε CSV" - }, - "autoSizeSplitPDF": { - "title": "Αυτόματος διαχωρισμός ανά μέγεθος/πλήθος", - "desc": "Διαχωρισμός ενός PDF σε πολλαπλά έγγραφα βάσει μεγέθους, αριθμού σελίδων ή αριθμού εγγράφων" - }, - "overlay-pdfs": { - "title": "Επικάλυψη PDF", - "desc": "Επικάλυψη PDF πάνω σε άλλο PDF" - }, - "split-by-sections": { - "title": "Διαχωρισμός PDF ανά ενότητες", - "desc": "Διαίρεση κάθε σελίδας ενός PDF σε μικρότερες οριζόντιες και κάθετες ενότητες" - }, - "AddStampRequest": { - "title": "Προσθήκη σφραγίδας σε PDF", - "desc": "Προσθήκη κειμένου ή εικόνων σφραγίδας σε καθορισμένες θέσεις" - }, - "removeImagePdf": { - "title": "Αφαίρεση εικόνας", - "desc": "Αφαίρεση εικόνας από PDF για μείωση μεγέθους αρχείου" - }, - "splitPdfByChapters": { - "title": "Διαχωρισμός PDF ανά κεφάλαια", - "desc": "Διαχωρισμός ενός PDF σε πολλαπλά αρχεία βάσει της δομής κεφαλαίων." - }, - "validateSignature": { - "title": "Επικύρωση υπογραφής PDF", - "desc": "Επαλήθευση ψηφιακών υπογραφών και πιστοποιητικών σε έγγραφα PDF" - }, - "replaceColorPdf": { - "title": "Αντικατάσταση και αναστροφή χρώματος", - "desc": "Αντικατάσταση χρώματος για κείμενο και φόντο σε PDF και αναστροφή πλήρους χρώματος για μείωση μεγέθους αρχείου" - } - }, - "viewPdf": { - "tags": "προβολή,ανάγνωση,σχολιασμός,κείμενο,εικόνα", - "title": "View/Edit PDF", - "header": "Προβολή PDF" - }, - "multiTool": { - "tags": "Πολυεργαλείο,Πολλαπλές λειτουργίες,UI,κλικ και σύρσιμο,frontend,πλευρά πελάτη,διαδραστικό,διαχειρίσιμο,μετακίνηση,διαγραφή,μετανάστευση,διαίρεση", - "title": "Πολυεργαλείο PDF", - "header": "Πολυεργαλείο PDF", - "uploadPrompts": "Όνομα αρχείου", - "selectAll": "Επιλογή όλων", - "deselectAll": "Αποεπιλογή όλων", - "selectPages": "Επιλογή σελίδας", - "selectedPages": "Επιλεγμένες σελίδες", - "page": "Σελίδα", - "deleteSelected": "Διαγραφή επιλεγμένων", - "downloadAll": "Εξαγωγή", - "downloadSelected": "Εξαγωγή επιλεγμένων", - "insertPageBreak": "Εισαγωγή αλλαγής σελίδας", - "addFile": "Προσθήκη αρχείου", - "rotateLeft": "Περιστροφή αριστερά", - "rotateRight": "Περιστροφή δεξιά", - "split": "Διαχωρισμός", - "moveLeft": "Μετακίνηση αριστερά", - "moveRight": "Μετακίνηση δεξιά", - "delete": "Διαγραφή", - "dragDropMessage": "Επιλεγμένη(ες) σελίδα(ες)", - "undo": "Αναίρεση", - "redo": "Επανάληψη" - }, - "merge": { - "tags": "συγχώνευση,λειτουργίες σελίδων,backend,πλευρά διακομιστή", - "title": "Συγχώνευση", - "header": "Συγχώνευση πολλαπλών PDF (2+)", - "sortByName": "Ταξινόμηση κατά όνομα", - "sortByDate": "Ταξινόμηση κατά ημερομηνία", - "removeCertSign": "Αφαίρεση ψηφιακής υπογραφής στο συγχωνευμένο αρχείο;", - "submit": "Συγχώνευση" - }, - "split": { - "tags": "λειτουργίες σελίδων,διαίρεση,πολλαπλές σελίδες,κοπή,πλευρά διακομιστή", - "title": "Διαχωρισμός PDF", - "header": "Διαχωρισμός PDF", - "desc": { - "1": "Οι αριθμοί που επιλέγετε είναι ο αριθμός σελίδας στην οποία θέλετε να κάνετε διαχωρισμό", - "2": "Έτσι, επιλέγοντας 1,3,7-9 θα διαχωρίσει ένα έγγραφο 10 σελίδων σε 6 ξεχωριστά PDF με:", - "3": "Έγγραφο #1: Σελίδα 1", - "4": "Έγγραφο #2: Σελίδα 2 και 3", - "5": "Έγγραφο #3: Σελίδα 4, 5, 6 και 7", - "6": "Έγγραφο #4: Σελίδα 8", - "7": "Έγγραφο #5: Σελίδα 9", - "8": "Έγγραφο #6: Σελίδα 10" - }, - "splitPages": "Εισάγετε σελίδες για διαχωρισμό:", - "submit": "Διαχωρισμός" - }, - "rotate": { - "tags": "πλευρά διακομιστή", - "title": "Περιστροφή PDF", - "header": "Περιστροφή PDF", - "selectAngle": "Επιλέξτε γωνία περιστροφής (σε πολλαπλάσια των 90 μοιρών):", - "submit": "Περιστροφή" - }, - "imageToPdf": { - "tags": "μετατροπή,εικόνα,jpg,φωτογραφία" - }, - "pdfToImage": { - "tags": "μετατροπή,εικόνα,jpg,φωτογραφία", - "title": "PDF σε εικόνα", - "header": "PDF σε εικόνα", - "selectText": "Μορφή εικόνας", - "singleOrMultiple": "Τύπος αποτελέσματος εικόνας", - "single": "Μία μεγάλη εικόνα", - "multi": "Πολλαπλές εικόνες", - "colorType": "Τύπος χρώματος", - "color": "Έγχρωμο", - "grey": "Κλίμακα του γκρι", - "blackwhite": "Ασπρόμαυρο (Μπορεί να χαθούν δεδομένα!)", - "submit": "Μετατροπή", - "info": "Η Python δεν είναι εγκατεστημένη. Απαιτείται για μετατροπή WebP.", - "placeholder": "(π.χ. 1,2,8 ή 4,7,12-16 ή 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,ζυγός,μονός,ταξινόμηση,μετακίνηση", - "title": "Οργάνωση σελίδων", - "header": "Οργάνωση σελίδων PDF", - "submit": "Αναδιάταξη σελίδων", - "mode": { - "_value": "Λειτουργία", - "1": "Προσαρμοσμένη σειρά σελίδων", - "2": "Αντίστροφη σειρά", - "3": "Ταξινόμηση διπλής όψης", - "4": "Ταξινόμηση φυλλαδίου", - "5": "Ταξινόμηση φυλλαδίου πλευρικής συρραφής", - "6": "Διαχωρισμός μονών-ζυγών", - "7": "Αφαίρεση πρώτης", - "8": "Αφαίρεση τελευταίας", - "9": "Αφαίρεση πρώτης και τελευταίας", - "10": "Συγχώνευση μονών-ζυγών", - "11": "Duplicate all pages" - }, - "placeholder": "(π.χ. 1,3,2 ή 4-8,2,10-12 ή 2n-1)" - }, - "addImage": { - "tags": "εικόνα,jpg,φωτογραφία", - "title": "Προσθήκη εικόνας", - "header": "Προσθήκη εικόνας σε PDF", - "everyPage": "Κάθε σελίδα;", - "upload": "Προσθήκη εικόνας", - "submit": "Προσθήκη εικόνας" - }, - "watermark": { - "tags": "κείμενο,επαναλαμβανόμενο,ετικέτα,ιδιοκτησία,πνευματικά δικαιώματα,εμπορικό σήμα,εικόνα,jpg,φωτογραφία", - "title": "Προσθήκη υδατογραφήματος", - "header": "Προσθήκη υδατογραφήματος", - "customColor": "Προσαρμοσμένο χρώμα κειμένου", - "selectText": { - "1": "Επιλέξτε PDF για προσθήκη υδατογραφήματος:", - "2": "Κείμενο υδατογραφήματος:", - "3": "Μέγεθος γραμματοσειράς:", - "4": "Περιστροφή (0-360):", - "5": "Οριζόντιο διάστημα (Κενό μεταξύ κάθε υδατογραφήματος οριζόντια):", - "6": "Κάθετο διάστημα (Κενό μεταξύ κάθε υδατογραφήματος κάθετα):", - "7": "Διαφάνεια (0% - 100%):", - "8": "Τύπος υδατογραφήματος:", - "9": "Εικόνα υδατογραφήματος:", - "10": "Μετατροπή PDF σε PDF-Εικόνα" - }, - "submit": "Προσθήκη υδατογραφήματος", - "type": { - "1": "Κείμενο", - "2": "Εικόνα" - } - }, - "permissions": { - "tags": "ανάγνωση,εγγραφή,επεξεργασία,εκτύπωση", - "title": "Αλλαγή δικαιωμάτων", - "header": "Αλλαγή δικαιωμάτων", - "warning": "Προειδοποίηση: για να καταστούν αυτά τα δικαιώματα αμετάβλητα, συνιστάται να τα ορίσετε με κωδικό πρόσβασης μέσω της σελίδας προσθήκης κωδικού", - "selectText": { - "1": "Επιλέξτε PDF για αλλαγή δικαιωμάτων", - "2": "Δικαιώματα προς ορισμό", - "3": "Αποτροπή συναρμολόγησης εγγράφου", - "4": "Αποτροπή εξαγωγής περιεχομένου", - "5": "Αποτροπή εξαγωγής για προσβασιμότητα", - "6": "Αποτροπή συμπλήρωσης φόρμας", - "7": "Αποτροπή τροποποίησης", - "8": "Αποτροπή τροποποίησης σχολιασμών", - "9": "Αποτροπή εκτύπωσης", - "10": "Αποτροπή εκτύπωσης σε διαφορετικές μορφές" - }, - "submit": "Αλλαγή" - }, - "removePages": { - "tags": "αφαίρεση σελίδων,διαγραφή σελίδων" - }, - "addPassword": { - "tags": "ασφάλεια,ασφάλεια", - "title": "Προσθήκη κωδικού", - "header": "Προσθήκη κωδικού (Κρυπτογράφηση)", - "selectText": { - "1": "Επιλέξτε PDF για κρυπτογράφηση", - "2": "Κωδικός χρήστη", - "3": "Μήκος κλειδιού κρυπτογράφησης", - "4": "Οι υψηλότερες τιμές είναι ισχυρότερες, αλλά οι χαμηλότερες τιμές έχουν καλύτερη συμβατότητα.", - "5": "Δικαιώματα προς ορισμό (Συνιστάται να χρησιμοποιείται μαζί με κωδικό ιδιοκτήτη)", - "6": "Αποτροπή συναρμολόγησης εγγράφου", - "7": "Αποτροπή εξαγωγής περιεχομένου", - "8": "Αποτροπή εξαγωγής για προσβασιμότητα", - "9": "Αποτροπή συμπλήρωσης φόρμας", - "10": "Αποτροπή τροποποίησης", - "11": "Αποτροπή τροποποίησης σχολιασμών", - "12": "Αποτροπή εκτύπωσης", - "13": "Αποτροπή εκτύπωσης σε διαφορετικές μορφές", - "14": "Κωδικός ιδιοκτήτη", - "15": "Περιορίζει τι μπορεί να γίνει με το έγγραφο μετά το άνοιγμά του (Δεν υποστηρίζεται από όλα τα προγράμματα ανάγνωσης)", - "16": "Περιορίζει το άνοιγμα του ίδιου του εγγράφου" - }, - "submit": "Κρυπτογράφηση" - }, - "removePassword": { - "tags": "ασφάλεια,αποκρυπτογράφηση,ασφάλεια,αφαίρεση κωδικού,διαγραφή κωδικού", - "title": "Αφαίρεση κωδικού", - "header": "Αφαίρεση κωδικού (Αποκρυπτογράφηση)", - "selectText": { - "1": "Επιλέξτε PDF για αποκρυπτογράφηση", - "2": "Κωδικός" - }, - "submit": "Αφαίρεση" - }, - "compressPdfs": { - "tags": "συμπίεση,μικρό,μικροσκοπικό" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "τίτλος,συγγραφέας,ημερομηνία,δημιουργία,χρόνος,εκδότης,παραγωγός,στατιστικά", - "title": "Τίτλος:", - "header": "Αλλαγή μεταδεδομένων", - "selectText": { - "1": "Παρακαλώ επεξεργαστείτε τις μεταβλητές που επιθυμείτε να αλλάξετε", - "2": "Διαγραφή όλων των μεταδεδομένων", - "3": "Εμφάνιση προσαρμοσμένων μεταδεδομένων:", - "4": "Άλλα μεταδεδομένα:", - "5": "Προσθήκη προσαρμοσμένης καταχώρησης μεταδεδομένων" - }, - "author": "Συγγραφέας:", - "creationDate": "Ημερομηνία δημιουργίας (yyyy/MM/dd HH:mm:ss):", - "creator": "Δημιουργός:", - "keywords": "Λέξεις-κλειδιά:", - "modDate": "Ημερομηνία τροποποίησης (yyyy/MM/dd HH:mm:ss):", - "producer": "Παραγωγός:", - "subject": "Θέμα:", - "trapped": "Παγιδευμένο:", - "submit": "Αλλαγή" - }, - "fileToPDF": { - "tags": "μετατροπή,μορφή,έγγραφο,εικόνα,παρουσίαση,κείμενο,μετατροπή,γραφείο,έγγραφα,word,excel,powerpoint", - "title": "Αρχείο σε PDF", - "header": "Μετατροπή οποιουδήποτε αρχείου σε PDF", - "credit": "Αυτή η υπηρεσία χρησιμοποιεί LibreOffice και Unoconv για μετατροπή αρχείων.", - "supportedFileTypesInfo": "Υποστηριζόμενοι τύποι αρχείων", - "supportedFileTypes": "Οι υποστηριζόμενοι τύποι αρχείων θα πρέπει να περιλαμβάνουν τα παρακάτω, ωστόσο για μια πλήρη ενημερωμένη λίστα υποστηριζόμενων μορφών, ανατρέξτε στην τεκμηρίωση του LibreOffice", - "submit": "Μετατροπή σε PDF" - }, - "ocr": { - "tags": "αναγνώριση,κείμενο,εικόνα,σάρωση,ανάγνωση,αναγνώριση,ανίχνευση,επεξεργάσιμο", - "title": "OCR / Καθαρισμός σαρώσεων", - "header": "Καθαρισμός σαρώσεων / OCR (Οπτική αναγνώριση χαρακτήρων)", - "selectText": { - "1": "Επιλέξτε γλώσσες που θα ανιχνευθούν μέσα στο PDF (Αυτές που εμφανίζονται είναι αυτές που ανιχνεύονται αυτή τη στιγμή):", - "2": "Δημιουργία αρχείου κειμένου που περιέχει το κείμενο OCR μαζί με το PDF που έχει υποστεί OCR", - "3": "Διόρθωση σελίδων που σαρώθηκαν με κλίση περιστρέφοντάς τες πίσω στη θέση τους", - "4": "Καθαρισμός σελίδας ώστε να είναι λιγότερο πιθανό το OCR να βρει κείμενο στο θόρυβο φόντου. (Καμία αλλαγή στην έξοδο)", - "5": "Καθαρισμός σελίδας ώστε να είναι λιγότερο πιθανό το OCR να βρει κείμενο στο θόρυβο φόντου, διατηρεί τον καθαρισμό στην έξοδο.", - "6": "Αγνοεί σελίδες που έχουν διαδραστικό κείμενο, εκτελεί OCR μόνο σε σελίδες που είναι εικόνες", - "7": "Εξαναγκασμός OCR, θα εκτελέσει OCR σε κάθε σελίδα αφαιρώντας όλα τα αρχικά στοιχεία κειμένου", - "8": "Κανονικό (Θα εμφανίσει σφάλμα εάν το PDF περιέχει κείμενο)", - "9": "Πρόσθετες ρυθμίσεις", - "10": "Λειτουργία OCR", - "11": "Αφαίρεση εικόνων μετά το OCR (Αφαιρεί ΟΛΕΣ τις εικόνες, χρήσιμο μόνο εάν είναι μέρος βήματος μετατροπής)", - "12": "Τύπος απόδοσης (Για προχωρημένους)" - }, - "help": "Παρακαλώ διαβάστε αυτή την τεκμηρίωση για το πώς να το χρησιμοποιήσετε για άλλες γλώσσες ή/και χρήση εκτός docker", - "credit": "Αυτή η υπηρεσία χρησιμοποιεί qpdf και Tesseract για OCR.", - "submit": "Επεξεργασία PDF με OCR" - }, - "extractImages": { - "tags": "εικόνα,φωτογραφία,αποθήκευση,αρχείο,zip,σύλληψη,λήψη", - "title": "Εξαγωγή εικόνων", - "header": "Εξαγωγή εικόνων", - "selectText": "Επιλέξτε μορφή εικόνας για μετατροπή των εξαγόμενων εικόνων", - "allowDuplicates": "Αποθήκευση διπλότυπων εικόνων", - "submit": "Εξαγωγή" - }, - "pdfToPDFA": { - "tags": "αρχείο,μακροχρόνιο,πρότυπο,μετατροπή,αποθήκευση,διατήρηση", - "title": "PDF σε PDF/A", - "header": "PDF σε PDF/A", - "credit": "Αυτή η υπηρεσία χρησιμοποιεί libreoffice για μετατροπή PDF/A", - "submit": "Μετατροπή", - "tip": "Προς το παρόν δεν λειτουργεί για πολλαπλές εισόδους ταυτόχρονα", - "outputFormat": "Μορφή εξόδου", - "pdfWithDigitalSignature": "Το PDF περιέχει ψηφιακή υπογραφή. Αυτή θα αφαιρεθεί στο επόμενο βήμα." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,μετατροπή,μορφή,μετατροπή,γραφείο,microsoft,docfile", - "title": "PDF σε Word", - "header": "PDF σε Word", - "selectText": { - "1": "Μορφή αρχείου εξόδου" - }, - "credit": "Αυτή η υπηρεσία χρησιμοποιεί το LibreOffice για μετατροπή αρχείων.", - "submit": "Μετατροπή" - }, - "PDFToPresentation": { - "tags": "διαφάνειες,παρουσίαση,γραφείο,microsoft", - "title": "PDF σε παρουσίαση", - "header": "PDF σε παρουσίαση", - "selectText": { - "1": "Μορφή αρχείου εξόδου" - }, - "credit": "Αυτή η υπηρεσία χρησιμοποιεί το LibreOffice για μετατροπή αρχείων.", - "submit": "Μετατροπή" - }, - "PDFToText": { - "tags": "μορφή εμπλουτισμένου κειμένου,μορφή rtf,εμπλουτισμένο κείμενο", - "title": "PDF σε RTF (κείμενο)", - "header": "PDF σε RTF (κείμενο)", - "selectText": { - "1": "Μορφή αρχείου εξόδου" - }, - "credit": "Αυτή η υπηρεσία χρησιμοποιεί το LibreOffice για μετατροπή αρχείων.", - "submit": "Μετατροπή" - }, - "PDFToHTML": { - "tags": "περιεχόμενο web,φιλικό προς τον browser", - "title": "PDF σε HTML", - "header": "PDF σε HTML", - "credit": "Αυτή η υπηρεσία χρησιμοποιεί το pdftohtml για μετατροπή αρχείων.", - "submit": "Μετατροπή" - }, - "PDFToXML": { - "tags": "εξαγωγή-δεδομένων,δομημένο-περιεχόμενο,διαλειτουργικότητα,μετατροπή", - "title": "PDF σε XML", - "header": "PDF σε XML", - "credit": "Αυτή η υπηρεσία χρησιμοποιεί το LibreOffice για μετατροπή αρχείων.", - "submit": "Μετατροπή" - }, - "ScannerImageSplit": { - "tags": "διαχωρισμός,αυτόματη-ανίχνευση,σαρώσεις,πολλαπλές-φωτογραφίες,οργάνωση", - "selectText": { - "1": "Όριο γωνίας:", - "2": "Ορίζει την ελάχιστη απόλυτη γωνία που απαιτείται για την περιστροφή της εικόνας (προεπιλογή: 10).", - "3": "Ανοχή:", - "4": "Καθορίζει το εύρος της χρωματικής διακύμανσης γύρω από το εκτιμώμενο χρώμα φόντου (προεπιλογή: 30).", - "5": "Ελάχιστη περιοχή:", - "6": "Ορίζει το ελάχιστο όριο περιοχής για μια φωτογραφία (προεπιλογή: 10000).", - "7": "Ελάχιστη περιοχή περιγράμματος:", - "8": "Ορίζει το ελάχιστο όριο περιοχής περιγράμματος για μια φωτογραφία", - "9": "Μέγεθος περιγράμματος:", - "10": "Ορίζει το μέγεθος του περιγράμματος που προστίθεται και αφαιρείται για την αποφυγή λευκών περιγραμμάτων στο αποτέλεσμα (προεπιλογή: 1)." - }, - "info": "Η Python δεν είναι εγκατεστημένη. Απαιτείται για εκτέλεση." - }, - "sign": { - "tags": "εξουσιοδότηση,αρχικά,σχεδιασμένη-υπογραφή,υπογραφή-κειμένου,υπογραφή-εικόνας", - "title": "Υπογραφή", - "header": "Υπογραφή PDF", - "upload": "Μεταφόρτωση εικόνας", - "draw": "Σχεδίαση υπογραφής", - "text": "Εισαγωγή κειμένου", - "clear": "Καθαρισμός", - "add": "Προσθήκη", - "saved": "Αποθηκευμένες υπογραφές", - "save": "Αποθήκευση υπογραφής", - "personalSigs": "Προσωπικές υπογραφές", - "sharedSigs": "Κοινόχρηστες υπογραφές", - "noSavedSigs": "Δεν βρέθηκαν αποθηκευμένες υπογραφές", - "addToAll": "Προσθήκη σε όλες τις σελίδες", - "delete": "Διαγραφή", - "first": "Πρώτη σελίδα", - "last": "Τελευταία σελίδα", - "next": "Επόμενη σελίδα", - "previous": "Προηγούμενη σελίδα", - "maintainRatio": "Εναλλαγή διατήρησης αναλογίας διαστάσεων", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "στατικό,απενεργοποίηση,μη-διαδραστικό,απλοποίηση", - "title": "Ισοπέδωση", - "header": "Ισοπέδωση PDF", - "flattenOnlyForms": "Ισοπέδωση μόνο φορμών", - "submit": "Ισοπέδωση" - }, - "repair": { - "tags": "επιδιόρθωση,αποκατάσταση,διόρθωση,ανάκτηση", - "title": "Επιδιόρθωση", - "header": "Επιδιόρθωση PDF", - "submit": "Επιδιόρθωση" - }, - "removeBlanks": { - "tags": "καθαρισμός,απλοποίηση,χωρίς-περιεχόμενο,οργάνωση", - "title": "Αφαίρεση κενών σελίδων", - "header": "Αφαίρεση κενών σελίδων", - "threshold": "Όριο λευκότητας εικονοστοιχείων:", - "thresholdDesc": "Όριο για τον προσδιορισμό πόσο λευκό πρέπει να είναι ένα εικονοστοιχείο για να θεωρηθεί 'Λευκό'. 0 = Μαύρο, 255 καθαρό λευκό.", - "whitePercent": "Ποσοστό λευκού (%):", - "whitePercentDesc": "Ποσοστό της σελίδας που πρέπει να είναι 'λευκά' εικονοστοιχεία για να αφαιρεθεί", - "submit": "Αφαίρεση κενών σελίδων" - }, - "removeAnnotations": { - "tags": "σχόλια,επισήμανση,σημειώσεις,επισημάνσεις,αφαίρεση", - "title": "Αφαίρεση σχολίων", - "header": "Αφαίρεση σχολίων", - "submit": "Αφαίρεση" - }, - "compare": { - "tags": "διαφοροποίηση,αντιπαραβολή,αλλαγές,ανάλυση", - "title": "Σύγκριση", - "header": "Σύγκριση PDF", - "highlightColor": { - "1": "Χρώμα επισήμανσης 1:", - "2": "Χρώμα επισήμανσης 2:" - }, - "document": { - "1": "Έγγραφο 1", - "2": "Έγγραφο 2" - }, - "submit": "Σύγκριση", - "complex": { - "message": "Ένα ή και τα δύο παρεχόμενα έγγραφα είναι μεγάλα αρχεία, η ακρίβεια της σύγκρισης μπορεί να μειωθεί" - }, - "large": { - "file": { - "message": "Ένα ή και τα δύο παρεχόμενα έγγραφα είναι πολύ μεγάλα για επεξεργασία" - } - }, - "no": { - "text": { - "message": "Ένα ή και τα δύο επιλεγμένα PDF δεν έχουν περιεχόμενο κειμένου. Παρακαλώ επιλέξτε PDF με κείμενο για σύγκριση." - } - } - }, - "certSign": { - "tags": "πιστοποίηση,PEM,P12,επίσημο,κρυπτογράφηση", - "title": "Υπογραφή με πιστοποιητικό", - "header": "Υπογραφή PDF με το πιστοποιητικό σας (Σε εξέλιξη)", - "selectPDF": "Επιλέξτε αρχείο PDF για υπογραφή:", - "jksNote": "Σημείωση: Εάν ο τύπος του πιστοποιητικού σας δεν αναφέρεται παρακάτω, παρακαλώ μετατρέψτε το σε αρχείο Java Keystore (.jks) χρησιμοποιώντας το εργαλείο γραμμής εντολών keytool. Στη συνέχεια, επιλέξτε την επιλογή αρχείου .jks παρακάτω.", - "selectKey": "Επιλέξτε το αρχείο ιδιωτικού κλειδιού σας (μορφή PKCS#8, μπορεί να είναι .pem ή .der):", - "selectCert": "Επιλέξτε το αρχείο πιστοποιητικού σας (μορφή X.509, μπορεί να είναι .pem ή .der):", - "selectP12": "Επιλέξτε το αρχείο PKCS#12 Keystore (.p12 ή .pfx) (Προαιρετικό, εάν παρέχεται, θα πρέπει να περιέχει το ιδιωτικό κλειδί και το πιστοποιητικό σας):", - "selectJKS": "Επιλέξτε το αρχείο Java Keystore (.jks ή .keystore):", - "certType": "Τύπος πιστοποιητικού", - "password": "Εισάγετε τον κωδικό πρόσβασης του Keystore ή του ιδιωτικού κλειδιού (εάν υπάρχει):", - "showSig": "Εμφάνιση υπογραφής", - "reason": "Αιτία", - "location": "Τοποθεσία", - "name": "Όνομα", - "showLogo": "Εμφάνιση λογότυπου", - "submit": "Υπογραφή PDF" - }, - "removeCertSign": { - "tags": "πιστοποίηση,PEM,P12,επίσημο,αποκρυπτογράφηση", - "title": "Αφαίρεση υπογραφής πιστοποιητικού", - "header": "Αφαίρεση της ψηφιακής υπογραφής από το PDF", - "selectPDF": "Επιλέξτε ένα αρχείο PDF:", - "submit": "Αφαίρεση υπογραφής" - }, - "pageLayout": { - "tags": "συγχώνευση,σύνθεση,ενιαία-προβολή,οργάνωση", - "title": "Διάταξη πολλαπλών σελίδων", - "header": "Διάταξη πολλαπλών σελίδων", - "pagesPerSheet": "Σελίδες ανά φύλλο:", - "addBorder": "Προσθήκη περιγραμμάτων", - "submit": "Υποβολή" - }, - "scalePages": { - "tags": "αλλαγή μεγέθους,τροποποίηση,διάσταση,προσαρμογή", - "title": "Προσαρμογή κλίμακας σελίδας", - "header": "Προσαρμογή κλίμακας σελίδας", - "pageSize": "Μέγεθος σελίδας του εγγράφου.", - "keepPageSize": "Αρχικό μέγεθος", - "scaleFactor": "Επίπεδο ζουμ (περικοπή) σελίδας.", - "submit": "Υποβολή" - }, - "add-page-numbers": { - "tags": "αρίθμηση,ετικέτα,οργάνωση,ευρετήριο" - }, - "auto-rename": { - "tags": "αυτόματη-ανίχνευση,βάσει-κεφαλίδας,οργάνωση,επανετικέτα", - "title": "Αυτόματη μετονομασία", - "header": "Αυτόματη μετονομασία PDF", - "submit": "Αυτόματη μετονομασία" - }, - "adjust-contrast": { - "tags": "διόρθωση-χρωμάτων,συντονισμός,τροποποίηση,βελτίωση" - }, - "crop": { - "tags": "περικοπή,συρρίκνωση,επεξεργασία,σχήμα", - "title": "Περικοπή", - "header": "Περικοπή PDF", - "submit": "Υποβολή" - }, - "autoSplitPDF": { - "tags": "QR-based,διαχωρισμός,σάρωση-τμήματος,οργάνωση", - "title": "Αυτόματος διαχωρισμός PDF", - "header": "Αυτόματος διαχωρισμός PDF", - "description": "Εκτυπώστε, εισάγετε, σαρώστε, μεταφορτώστε και αφήστε μας να διαχωρίσουμε αυτόματα τα έγγραφά σας. Δεν απαιτείται χειροκίνητη ταξινόμηση.", - "selectText": { - "1": "Εκτυπώστε μερικά φύλλα διαχωρισμού από παρακάτω (Αρκεί και ασπρόμαυρη εκτύπωση).", - "2": "Σαρώστε όλα τα έγγραφά σας ταυτόχρονα τοποθετώντας το φύλλο διαχωρισμού ανάμεσά τους.", - "3": "Μεταφορτώστε το ενιαίο μεγάλο σαρωμένο αρχείο PDF και αφήστε το Stirling PDF να χειριστεί τα υπόλοιπα.", - "4": "Οι σελίδες διαχωρισμού ανιχνεύονται και αφαιρούνται αυτόματα, εξασφαλίζοντας ένα καθαρό τελικό έγγραφο." - }, - "formPrompt": "Υποβολή PDF που περιέχει διαχωριστές σελίδων Stirling-PDF:", - "duplexMode": "Λειτουργία διπλής όψης (Σάρωση μπρος και πίσω)", - "dividerDownload2": "Λήψη 'Αυτόματος διαχωριστής (με οδηγίες).pdf'", - "submit": "Υποβολή" - }, - "sanitizePdf": { - "tags": "καθαρισμός,ασφάλεια,ασφαλές,αφαίρεση-απειλών" - }, - "URLToPDF": { - "tags": "λήψη-ιστοσελίδας,αποθήκευση-σελίδας,web-σε-έγγραφο,αρχειοθέτηση", - "title": "URL σε PDF", - "header": "URL σε PDF", - "submit": "Μετατροπή", - "credit": "Χρησιμοποιεί το WeasyPrint" - }, - "HTMLToPDF": { - "tags": "markup,περιεχόμενο-web,μετατροπή,μετατροπή", - "title": "HTML σε PDF", - "header": "HTML σε PDF", - "help": "Δέχεται αρχεία HTML και ZIP που περιέχουν html/css/εικόνες κλπ που απαιτούνται", - "submit": "Μετατροπή", - "credit": "Χρησιμοποιεί το WeasyPrint", - "zoom": "Επίπεδο ζουμ για την εμφάνιση της ιστοσελίδας.", - "pageWidth": "Πλάτος σελίδας σε εκατοστά. (Κενό για προεπιλογή)", - "pageHeight": "Ύψος σελίδας σε εκατοστά. (Κενό για προεπιλογή)", - "marginTop": "Πάνω περιθώριο σελίδας σε χιλιοστά. (Κενό για προεπιλογή)", - "marginBottom": "Κάτω περιθώριο σελίδας σε χιλιοστά. (Κενό για προεπιλογή)", - "marginLeft": "Αριστερό περιθώριο σελίδας σε χιλιοστά. (Κενό για προεπιλογή)", - "marginRight": "Δεξί περιθώριο σελίδας σε χιλιοστά. (Κενό για προεπιλογή)", - "printBackground": "Απόδοση φόντου ιστοσελίδων.", - "defaultHeader": "Ενεργοποίηση προεπιλεγμένης κεφαλίδας (Όνομα και αριθμός σελίδας)", - "cssMediaType": "Αλλαγή του τύπου μέσου CSS της σελίδας.", - "none": "Κανένα", - "print": "Εκτύπωση", - "screen": "Οθόνη" - }, - "MarkdownToPDF": { - "tags": "markup,περιεχόμενο-web,μετατροπή,μετατροπή", - "title": "Markdown σε PDF", - "header": "Markdown σε PDF", - "submit": "Μετατροπή", - "help": "Εργασία σε εξέλιξη", - "credit": "Χρησιμοποιεί το WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "πληροφορίες,δεδομένα,στατιστικά,στατιστική", - "title": "Λήψη πληροφοριών PDF", - "header": "Λήψη πληροφοριών PDF", - "submit": "Λήψη πληροφοριών", - "downloadJson": "Λήψη JSON" - }, - "extractPage": { - "tags": "εξαγωγή" - }, - "PdfToSinglePage": { - "tags": "ενιαία σελίδα" - }, - "showJS": { - "tags": "JS", - "title": "Εμφάνιση Javascript", - "header": "Εμφάνιση Javascript", - "downloadJS": "Λήψη Javascript", - "submit": "Εμφάνιση" - }, - "autoRedact": { - "tags": "απόκρυψη,κρύψιμο,μαύρισμα,μαύρο,μαρκαδόρος,κρυμμένο", - "title": "Αυτόματη απόκρυψη", - "header": "Αυτόματη απόκρυψη", - "colorLabel": "Χρώμα", - "textsToRedactLabel": "Κείμενο προς απόκρυψη (διαχωρισμένο ανά γραμμή)", - "textsToRedactPlaceholder": "π.χ. \\nΕμπιστευτικό \\nΆκρως απόρρητο", - "useRegexLabel": "Χρήση Regex", - "wholeWordSearchLabel": "Αναζήτηση ολόκληρης λέξης", - "customPaddingLabel": "Προσαρμοσμένο επιπλέον περιθώριο", - "convertPDFToImageLabel": "Μετατροπή PDF σε PDF-Εικόνα (Χρησιμοποιείται για την αφαίρεση κειμένου πίσω από το πλαίσιο)", - "submitButton": "Υποβολή" - }, - "redact": { - "tags": "απόκρυψη,κρύψιμο,μαύρισμα,μαύρο,μαρκαδόρος,κρυμμένο,χειροκίνητο", - "title": "Χειροκίνητη απόκρυψη", - "header": "Χειροκίνητη απόκρυψη", - "submit": "Απόκρυψη", - "textBasedRedaction": "Απόκρυψη βάσει κειμένου", - "pageBasedRedaction": "Απόκρυψη βάσει σελίδας", - "convertPDFToImageLabel": "Μετατροπή PDF σε PDF-Εικόνα (Χρησιμοποιείται για την αφαίρεση κειμένου πίσω από το πλαίσιο)", - "pageRedactionNumbers": { - "title": "Σελίδες", - "placeholder": "(π.χ. 1,2,8 ή 4,7,12-16 ή 2n-1)" - }, - "redactionColor": { - "title": "Χρώμα απόκρυψης" - }, - "export": "Εξαγωγή", - "upload": "Μεταφόρτωση", - "boxRedaction": "Σχεδίαση πλαισίου απόκρυψης", - "zoom": "Ζουμ", - "zoomIn": "Μεγέθυνση", - "zoomOut": "Σμίκρυνση", - "nextPage": "Επόμενη σελίδα", - "previousPage": "Προηγούμενη σελίδα", - "toggleSidebar": "Εναλλαγή πλευρικής μπάρας", - "showThumbnails": "Εμφάνιση μικρογραφιών", - "showDocumentOutline": "Εμφάνιση περιγράμματος εγγράφου (διπλό κλικ για ανάπτυξη/σύμπτυξη όλων των στοιχείων)", - "showAttatchments": "Εμφάνιση συνημμένων", - "showLayers": "Εμφάνιση επιπέδων (διπλό κλικ για επαναφορά όλων των επιπέδων στην προεπιλεγμένη κατάσταση)", - "colourPicker": "Επιλογέας χρώματος", - "findCurrentOutlineItem": "Εύρεση τρέχοντος στοιχείου περιγράμματος", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,εξαγωγή πίνακα,εξαγωγή,μετατροπή" - }, - "autoSizeSplitPDF": { - "tags": "pdf,διαχωρισμός,έγγραφο,οργάνωση" - }, - "overlay-pdfs": { - "tags": "επικάλυψη", - "header": "Επικάλυψη αρχείων PDF", - "baseFile": { - "label": "Επιλέξτε βασικό αρχείο PDF" - }, - "overlayFiles": { - "label": "Επιλέξτε αρχεία PDF επικάλυψης" - }, - "mode": { - "label": "Επιλέξτε λειτουργία επικάλυψης", - "sequential": "Διαδοχική επικάλυψη", - "interleaved": "Εναλλασσόμενη επικάλυψη", - "fixedRepeat": "Σταθερή επαναλαμβανόμενη επικάλυψη" - }, - "counts": { - "label": "Πλήθος επικαλύψεων (για λειτουργία σταθερής επανάληψης)", - "placeholder": "Εισάγετε πλήθη διαχωρισμένα με κόμμα (π.χ. 2,3,1)" - }, - "position": { - "label": "Επιλέξτε θέση επικάλυψης", - "foreground": "Προσκήνιο", - "background": "Φόντο" - }, - "submit": "Υποβολή" - }, - "split-by-sections": { - "tags": "διαχωρισμός ενοτήτων,διαίρεση,προσαρμογή", - "title": "Διαχωρισμός PDF ανά ενότητες", - "header": "Διαχωρισμός PDF σε ενότητες", - "horizontal": { - "label": "Οριζόντιες διαιρέσεις", - "placeholder": "Εισάγετε αριθμό οριζόντιων διαιρέσεων" - }, - "vertical": { - "label": "Κάθετες διαιρέσεις", - "placeholder": "Εισάγετε αριθμό κάθετων διαιρέσεων" - }, - "submit": "Διαχωρισμός PDF", - "merge": "Συγχώνευση σε ένα PDF" - }, - "AddStampRequest": { - "tags": "σφραγίδα,προσθήκη εικόνας,κεντράρισμα εικόνας,υδατογράφημα,PDF,ενσωμάτωση,προσαρμογή", - "header": "Σφράγισμα PDF", - "title": "Σφράγισμα PDF", - "stampType": "Τύπος σφραγίδας", - "stampText": "Κείμενο σφραγίδας", - "stampImage": "Εικόνα σφραγίδας", - "alphabet": "Αλφάβητο", - "fontSize": "Μέγεθος γραμματοσειράς/εικόνας", - "rotation": "Περιστροφή", - "opacity": "Διαφάνεια", - "position": "Θέση", - "overrideX": "Παράκαμψη συντεταγμένης X", - "overrideY": "Παράκαμψη συντεταγμένης Y", - "customMargin": "Προσαρμοσμένο περιθώριο", - "customColor": "Προσαρμοσμένο χρώμα κειμένου", - "submit": "Υποβολή" - }, - "removeImagePdf": { - "tags": "αφαίρεση εικόνας,λειτουργίες σελίδας,backend,server side" - }, - "splitPdfByChapters": { - "tags": "διαχωρισμός,κεφάλαια,σελιδοδείκτες,οργάνωση" - }, - "validateSignature": { - "tags": "υπογραφή,επαλήθευση,επικύρωση,pdf,πιστοποιητικό,ψηφιακή υπογραφή,επικύρωση υπογραφής,επικύρωση πιστοποιητικού", - "title": "Επικύρωση υπογραφών PDF", - "header": "Επικύρωση ψηφιακών υπογραφών", - "selectPDF": "Επιλέξτε υπογεγραμμένο αρχείο PDF", - "submit": "Επικύρωση υπογραφών", - "results": "Αποτελέσματα επικύρωσης", - "status": { - "_value": "Κατάσταση", - "valid": "Έγκυρη", - "invalid": "Μη έγκυρη" - }, - "signer": "Υπογράφων", - "date": "Ημερομηνία", - "reason": "Αιτία", - "location": "Τοποθεσία", - "noSignatures": "Δεν βρέθηκαν ψηφιακές υπογραφές σε αυτό το έγγραφο", - "chain": { - "invalid": "Η επικύρωση αλυσίδας πιστοποιητικών απέτυχε - δεν είναι δυνατή η επαλήθευση της ταυτότητας του υπογράφοντος" - }, - "trust": { - "invalid": "Το πιστοποιητικό δεν βρίσκεται στο αποθετήριο εμπιστοσύνης - δεν είναι δυνατή η επαλήθευση της πηγής" - }, - "cert": { - "expired": "Το πιστοποιητικό έχει λήξει", - "revoked": "Το πιστοποιητικό έχει ανακληθεί", - "info": "Λεπτομέρειες πιστοποιητικού", - "issuer": "Εκδότης", - "subject": "Θέμα", - "serialNumber": "Σειριακός αριθμός", - "validFrom": "Έγκυρο από", - "validUntil": "Έγκυρο έως", - "algorithm": "Αλγόριθμος", - "keySize": "Μέγεθος κλειδιού", - "version": "Έκδοση", - "keyUsage": "Χρήση κλειδιού", - "selfSigned": "Αυτο-υπογεγραμμένο", - "bits": "bits" - }, - "signature": { - "info": "Πληροφορίες υπογραφής", - "_value": "Υπογραφή", - "mathValid": "Η υπογραφή είναι μαθηματικά έγκυρη ΑΛΛΑ:" - }, - "selectCustomCert": "Προσαρμοσμένο αρχείο πιστοποιητικού X.509 (Προαιρετικό)" - }, - "replace-color": { - "title": "Αντικατάσταση-Αναστροφή χρώματος", - "header": "Αντικατάσταση-Αναστροφή χρώματος PDF", - "selectText": { - "1": "Επιλογές αντικατάστασης ή αναστροφής χρώματος", - "2": "Προεπιλογή (Προεπιλεγμένα χρώματα υψηλής αντίθεσης)", - "3": "Προσαρμογή (Προσαρμοσμένα χρώματα)", - "4": "Πλήρης αναστροφή (Αναστροφή όλων των χρωμάτων)", - "5": "Επιλογές χρωμάτων υψηλής αντίθεσης", - "6": "Λευκό κείμενο σε μαύρο φόντο", - "7": "Μαύρο κείμενο σε λευκό φόντο", - "8": "Κίτρινο κείμενο σε μαύρο φόντο", - "9": "Πράσινο κείμενο σε μαύρο φόντο", - "10": "Επιλογή χρώματος κειμένου", - "11": "Επιλογή χρώματος φόντου" - }, - "submit": "Αντικατάσταση" - }, - "replaceColorPdf": { - "tags": "αντικατάσταση χρώματος,λειτουργίες σελίδας,backend,server side" - }, - "login": { - "title": "Σύνδεση", - "header": "Σύνδεση", - "signin": "Σύνδεση", - "rememberme": "Να με θυμάσαι", - "invalid": "Μη έγκυρο όνομα χρήστη ή κωδικός.", - "locked": "Ο λογαριασμός σας έχει κλειδωθεί.", - "signinTitle": "Παρακαλώ συνδεθείτε", - "ssoSignIn": "Σύνδεση μέσω Single Sign-on", - "oAuth2AutoCreateDisabled": "Η αυτόματη δημιουργία χρήστη OAUTH2 είναι απενεργοποιημένη", - "oAuth2AdminBlockedUser": "Η εγγραφή ή σύνδεση μη εγγεγραμμένων χρηστών είναι προς το παρόν αποκλεισμένη. Παρακαλώ επικοινωνήστε με τον διαχειριστή.", - "oauth2RequestNotFound": "Το αίτημα εξουσιοδότησης δεν βρέθηκε", - "oauth2InvalidUserInfoResponse": "Μη έγκυρη απόκριση πληροφοριών χρήστη", - "oauth2invalidRequest": "Μη έγκυρο αίτημα", - "oauth2AccessDenied": "Άρνηση πρόσβασης", - "oauth2InvalidTokenResponse": "Μη έγκυρη απόκριση διακριτικού", - "oauth2InvalidIdToken": "Μη έγκυρο διακριτικό ταυτότητας", - "relyingPartyRegistrationNotFound": "Δεν βρέθηκε εγγραφή αξιόπιστου μέρους", - "userIsDisabled": "Ο χρήστης είναι απενεργοποιημένος, η σύνδεση είναι προς το παρόν αποκλεισμένη με αυτό το όνομα χρήστη. Παρακαλώ επικοινωνήστε με τον διαχειριστή.", - "alreadyLoggedIn": "Είστε ήδη συνδεδεμένοι σε", - "alreadyLoggedIn2": "συσκευές. Παρακαλώ αποσυνδεθείτε από τις συσκευές και προσπαθήστε ξανά.", - "toManySessions": "Έχετε πάρα πολλές ενεργές συνεδρίες", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF σε μία σελίδα", - "header": "PDF σε μία σελίδα", - "submit": "Μετατροπή σε μία σελίδα" - }, - "pageExtracter": { - "title": "Εξαγωγή σελίδων", - "header": "Εξαγωγή σελίδων", - "submit": "Εξαγωγή", - "placeholder": "(π.χ. 1,2,8 ή 4,7,12-16 ή 2n-1)" - }, - "sanitizePDF": { - "title": "Εξυγίανση PDF", - "header": "Εξυγίανση αρχείου PDF", - "selectText": { - "1": "Αφαίρεση ενεργειών JavaScript", - "2": "Αφαίρεση ενσωματωμένων αρχείων", - "3": "Remove XMP metadata", - "4": "Αφαίρεση συνδέσμων", - "5": "Αφαίρεση γραμματοσειρών", - "6": "Remove Document Info Metadata" - }, - "submit": "Εξυγίανση PDF" - }, - "adjustContrast": { - "title": "Προσαρμογή αντίθεσης", - "header": "Προσαρμογή αντίθεσης", - "contrast": "Αντίθεση:", - "brightness": "Φωτεινότητα:", - "saturation": "Κορεσμός:", - "download": "Λήψη" - }, - "compress": { - "title": "Συμπίεση", - "header": "Συμπίεση PDF", - "credit": "Αυτή η υπηρεσία χρησιμοποιεί qpdf για συμπίεση/βελτιστοποίηση PDF.", - "grayscale": { - "label": "Εφαρμογή κλίμακας του γκρι για συμπίεση" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Επίπεδο βελτιστοποίησης:", - "4": "Αυτόματη λειτουργία - Αυτόματη προσαρμογή ποιότητας για επίτευξη ακριβούς μεγέθους PDF", - "5": "Αναμενόμενο μέγεθος PDF (π.χ. 25MB, 10.8MB, 25KB)" - }, - "submit": "Συμπίεση" - }, - "decrypt": { - "passwordPrompt": "Αυτό το αρχείο προστατεύεται με κωδικό πρόσβασης. Παρακαλώ εισάγετε τον κωδικό:", - "cancelled": "Η λειτουργία ακυρώθηκε για το PDF: {0}", - "noPassword": "Δεν δόθηκε κωδικός πρόσβασης για το κρυπτογραφημένο PDF: {0}", - "invalidPassword": "Παρακαλώ προσπαθήστε ξανά με τον σωστό κωδικό πρόσβασης.", - "invalidPasswordHeader": "Λανθασμένος κωδικός πρόσβασης ή μη υποστηριζόμενη κρυπτογράφηση για το PDF: {0}", - "unexpectedError": "Υπήρξε σφάλμα κατά την επεξεργασία του αρχείου. Παρακαλώ προσπαθήστε ξανά.", - "serverError": "Σφάλμα διακομιστή κατά την αποκρυπτογράφηση: {0}", - "success": "Το αρχείο αποκρυπτογραφήθηκε με επιτυχία." - }, - "multiTool-advert": { - "message": "Αυτή η λειτουργία είναι επίσης διαθέσιμη στη σελίδα πολυεργαλείου μας. Δείτε την για βελτιωμένο περιβάλλον χρήστη σελίδα-προς-σελίδα και επιπλέον λειτουργίες!" - }, - "pageRemover": { - "title": "Αφαίρεση σελίδας", - "header": "Αφαίρεση σελίδων PDF", - "pagesToDelete": "Σελίδες προς διαγραφή (Εισάγετε μια λίστα αριθμών σελίδων χωρισμένη με κόμματα):", - "submit": "Διαγραφή σελίδων", - "placeholder": "(π.χ. 1,2,6 ή 1-10,15-30)" - }, - "imageToPDF": { - "title": "Εικόνα σε PDF", - "header": "Εικόνα σε PDF", - "submit": "Μετατροπή", - "selectLabel": "Επιλογές προσαρμογής εικόνας", - "fillPage": "Γέμισμα σελίδας", - "fitDocumentToImage": "Προσαρμογή σελίδας στην εικόνα", - "maintainAspectRatio": "Διατήρηση αναλογιών", - "selectText": { - "2": "Αυτόματη περιστροφή PDF", - "3": "Λογική πολλαπλών αρχείων (Ενεργοποιείται μόνο όταν εργάζεστε με πολλαπλές εικόνες)", - "4": "Συγχώνευση σε ένα PDF", - "5": "Μετατροπή σε ξεχωριστά PDF" - } - }, - "PDFToCSV": { - "title": "PDF σε CSV", - "header": "PDF σε CSV", - "prompt": "Επιλέξτε σελίδα για εξαγωγή πίνακα", - "submit": "Εξαγωγή" - }, - "split-by-size-or-count": { - "title": "Διαχωρισμός PDF ανά μέγεθος ή πλήθος", - "header": "Διαχωρισμός PDF ανά μέγεθος ή πλήθος", - "type": { - "label": "Επιλέξτε τύπο διαχωρισμού", - "size": "Ανά μέγεθος", - "pageCount": "Ανά πλήθος σελίδων", - "docCount": "Ανά πλήθος εγγράφων" - }, - "value": { - "label": "Εισάγετε τιμή", - "placeholder": "Εισάγετε μέγεθος (π.χ. 2MB ή 3KB) ή πλήθος (π.χ. 5)" - }, - "submit": "Υποβολή" - }, - "printFile": { - "title": "Εκτύπωση αρχείου", - "header": "Εκτύπωση αρχείου σε εκτυπωτή", - "selectText": { - "1": "Επιλέξτε αρχείο προς εκτύπωση", - "2": "Εισάγετε όνομα εκτυπωτή" - }, - "submit": "Εκτύπωση" - }, - "licenses": { - "nav": "Άδειες", - "title": "Άδειες τρίτων", - "header": "Άδειες τρίτων", - "module": "Ενότητα", - "version": "Έκδοση", - "license": "Άδεια" - }, - "survey": { - "nav": "Έρευνα", - "title": "Έρευνα Stirling-PDF", - "description": "Το Stirling-PDF δεν έχει παρακολούθηση, οπότε θέλουμε να ακούσουμε από τους χρήστες μας για να βελτιώσουμε το Stirling-PDF!", - "changes": "Το Stirling-PDF έχει αλλάξει από την τελευταία έρευνα! Για να μάθετε περισσότερα, παρακαλώ ελέγξτε το blog post μας εδώ:", - "changes2": "Με αυτές τις αλλαγές λαμβάνουμε επαγγελματική υποστήριξη και χρηματοδότηση", - "please": "Παρακαλούμε σκεφτείτε να συμμετάσχετε στην έρευνά μας!", - "disabled": "(Το αναδυόμενο παράθυρο έρευνας θα απενεργοποιηθεί στις επόμενες ενημερώσεις αλλά θα είναι διαθέσιμο στο υποσέλιδο της σελίδας)", - "button": "Συμμετοχή στην έρευνα", - "dontShowAgain": "Να μην εμφανιστεί ξανά", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Αφαίρεση εικόνας", - "header": "Αφαίρεση εικόνας", - "removeImage": "Αφαίρεση εικόνας", - "submit": "Αφαίρεση εικόνας" - }, - "splitByChapters": { - "title": "Διαχωρισμός PDF ανά κεφάλαια", - "header": "Διαχωρισμός PDF ανά κεφάλαια", - "bookmarkLevel": "Επίπεδο σελιδοδείκτη", - "includeMetadata": "Συμπερίληψη μεταδεδομένων", - "allowDuplicates": "Επιτρέπονται διπλότυπα", - "desc": { - "1": "Αυτό το εργαλείο διαχωρίζει ένα αρχείο PDF σε πολλαπλά PDF βάσει της δομής κεφαλαίων του.", - "2": "Επίπεδο σελιδοδείκτη: Επιλέξτε το επίπεδο σελιδοδεικτών για χρήση στο διαχωρισμό (0 για ανώτατο επίπεδο, 1 για δεύτερο επίπεδο, κλπ.).", - "3": "Συμπερίληψη μεταδεδομένων: Εάν επιλεγεί, τα μεταδεδομένα του αρχικού PDF θα συμπεριληφθούν σε κάθε διαχωρισμένο PDF.", - "4": "Επιτρέπονται διπλότυπα: Εάν επιλεγεί, επιτρέπει πολλαπλούς σελιδοδείκτες στην ίδια σελίδα να δημιουργήσουν ξεχωριστά PDF." - }, - "submit": "Διαχωρισμός PDF" - }, - "fileChooser": { - "click": "Κλικ", - "or": "ή", - "dragAndDrop": "Σύρετε & αφήστε", - "dragAndDropPDF": "Σύρετε & αφήστε αρχείο PDF", - "dragAndDropImage": "Σύρετε & αφήστε αρχείο εικόνας", - "hoveredDragAndDrop": "Σύρετε & αφήστε αρχείο(α) εδώ", - "extractPDF": "Εξαγωγή..." - }, - "releases": { - "footer": "Εκδόσεις", - "title": "Σημειώσεις έκδοσης", - "header": "Σημειώσεις έκδοσης", - "current": { - "version": "Τρέχουσα έκδοση" - }, - "note": "Οι σημειώσεις έκδοσης είναι διαθέσιμες μόνο στα Αγγλικά" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/en-GB/translation.json b/frontend/dist/locales/en-GB/translation.json deleted file mode 100644 index 570c2e697..000000000 --- a/frontend/dist/locales/en-GB/translation.json +++ /dev/null @@ -1,1620 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Font Size", - "fontName": "Font Name", - "title": "Add Page Numbers", - "header": "Add Page Numbers", - "selectText": { - "1": "Select PDF file:", - "2": "Margin Size", - "3": "Position", - "4": "Starting Number", - "5": "Pages to Number", - "6": "Custom Text" - }, - "customTextDesc": "Custom Text", - "numberPagesDesc": "Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc", - "customNumberDesc": "Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n}", - "submit": "Add Page Numbers" - }, - "pdfPrompt": "Select PDF(s)", - "multiPdfPrompt": "Select PDFs (2+)", - "multiPdfDropPrompt": "Select (or drag & drop) all PDFs you require", - "imgPrompt": "Select Image(s)", - "genericSubmit": "Submit", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Warning: This process can take up to a minute depending on file-size", - "pageOrderPrompt": "Custom Page Order (Enter a comma-separated list of page numbers or Functions like 2n+1) :", - "pageSelectionPrompt": "Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :", - "goToPage": "Go", - "true": "True", - "false": "False", - "unknown": "Unknown", - "save": "Save", - "saveToBrowser": "Save to Browser", - "close": "Close", - "filesSelected": "files selected", - "noFavourites": "No favourites added", - "downloadComplete": "Download Complete", - "bored": "Bored Waiting?", - "alphabet": "Alphabet", - "downloadPdf": "Download PDF", - "text": "Text", - "font": "Font", - "selectFillter": "-- Select --", - "pageNum": "Page Number", - "sizes": { - "small": "Small", - "medium": "Medium", - "large": "Large", - "x-large": "X-Large" - }, - "error": { - "pdfPassword": "The PDF Document is passworded and either the password was not provided or was incorrect", - "_value": "Error", - "sorry": "Sorry for the issue!", - "needHelp": "Need help / Found an issue?", - "contactTip": "If you're still having trouble, don't hesitate to reach out to us for help. You can submit a ticket on our GitHub page or contact us through Discord:", - "404": { - "head": "404 - Page Not Found | Oops, we tripped in the code!", - "1": "We can't seem to find the page you're looking for.", - "2": "Something went wrong" - }, - "github": "Submit a ticket on GitHub", - "showStack": "Show Stack Trace", - "copyStack": "Copy Stack Trace", - "githubSubmit": "GitHub - Submit a ticket", - "discordSubmit": "Discord - Submit Support post" - }, - "delete": "Delete", - "username": "Username", - "password": "Password", - "welcome": "Welcome", - "property": "Property", - "black": "Black", - "white": "White", - "red": "Red", - "green": "Green", - "blue": "Blue", - "custom": "Custom...", - "WorkInProgess": "Work in progress, May not work or be buggy, Please report any problems!", - "poweredBy": "Powered by", - "yes": "Yes", - "no": "No", - "changedCredsMessage": "Credentials changed!", - "notAuthenticatedMessage": "User not authenticated.", - "userNotFoundMessage": "User not found.", - "incorrectPasswordMessage": "Current password is incorrect.", - "usernameExistsMessage": "New Username already exists.", - "invalidUsernameMessage": "Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.", - "invalidPasswordMessage": "The password must not be empty and must not have spaces at the beginning or end.", - "confirmPasswordErrorMessage": "New Password and Confirm New Password must match.", - "deleteCurrentUserMessage": "Cannot delete currently logged in user.", - "deleteUsernameExistsMessage": "The username does not exist and cannot be deleted.", - "downgradeCurrentUserMessage": "Cannot downgrade current user's role", - "disabledCurrentUserMessage": "The current user cannot be disabled", - "downgradeCurrentUserLongMessage": "Cannot downgrade current user's role. Hence, current user will not be shown.", - "userAlreadyExistsOAuthMessage": "The user already exists as an OAuth2 user.", - "userAlreadyExistsWebMessage": "The user already exists as an web user.", - "oops": "Oops!", - "help": "Help", - "goHomepage": "Go to Homepage", - "joinDiscord": "Join our Discord server", - "seeDockerHub": "See Docker Hub", - "visitGithub": "Visit Github Repository", - "donate": "Donate", - "color": "Colour", - "sponsor": "Sponsor", - "info": "Info", - "pro": "Pro", - "page": "Page", - "pages": "Pages", - "loading": "Loading...", - "addToDoc": "Add to Document", - "reset": "Reset", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Privacy Policy", - "terms": "Terms and Conditions", - "accessibility": "Accessibility", - "cookie": "Cookie Policy", - "impressum": "Impressum", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Pipeline Menu (Beta)", - "uploadButton": "Upload Custom", - "configureButton": "Configure", - "defaultOption": "Custom", - "submitButton": "Submit", - "help": "Pipeline Help", - "scanHelp": "Folder Scanning Help", - "deletePrompt": "Are you sure you want to delete pipeline", - "tags": "automate,sequence,scripted,batch-process", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Pipeline Configuration", - "pipelineNameLabel": "Pipeline Name", - "saveSettings": "Save Operation Settings", - "pipelineNamePrompt": "Enter pipeline name here", - "selectOperation": "Select Operation", - "addOperationButton": "Add operation", - "pipelineHeader": "Pipeline:", - "saveButton": "Download", - "validateButton": "Validate" - }, - "enterpriseEdition": { - "button": "Upgrade to Pro", - "warning": "This feature is only available to Pro users.", - "yamlAdvert": "Stirling PDF Pro supports YAML configuration files and other SSO features.", - "ssoAdvert": "Looking for more user management features? Check out Stirling PDF Pro" - }, - "analytics": { - "title": "Do you want make Stirling PDF better?", - "paragraph1": "Stirling PDF has opt in analytics to help us improve the product. We do not track any personal information or file contents.", - "paragraph2": "Please consider enabling analytics to help Stirling-PDF grow and to allow us to understand our users better.", - "enable": "Enable analytics", - "disable": "Disable analytics", - "settings": "You can change the settings for analytics in the config/settings.yml file" - }, - "navbar": { - "favorite": "Favorites", - "recent": "New and recently updated", - "darkmode": "Dark Mode", - "language": "Languages", - "settings": "Settings", - "allTools": "Tools", - "multiTool": "Multi Tool", - "search": "Search", - "sections": { - "organize": "Organize", - "convertTo": "Convert to PDF", - "convertFrom": "Convert from PDF", - "security": "Sign & Security", - "advance": "Advanced", - "edit": "View & Edit", - "popular": "Popular" - } - }, - "settings": { - "title": "Settings", - "update": "Update available", - "updateAvailable": "{0} is the current installed version. A new version ({1}) is available.", - "appVersion": "App Version:", - "downloadOption": { - "title": "Choose download option (For single file non zip downloads):", - "1": "Open in same window", - "2": "Open in new window", - "3": "Download file" - }, - "zipThreshold": "Zip files when the number of downloaded files exceeds", - "signOut": "Sign Out", - "accountSettings": "Account Settings", - "bored": { - "help": "Enables easter egg game" - }, - "cacheInputs": { - "name": "Save form inputs", - "help": "Enable to store previously used inputs for future runs" - } - }, - "changeCreds": { - "title": "Change Credentials", - "header": "Update Your Account Details", - "changePassword": "You are using default login credentials. Please enter a new password", - "newUsername": "New Username", - "oldPassword": "Current Password", - "newPassword": "New Password", - "confirmNewPassword": "Confirm New Password", - "submit": "Submit Changes" - }, - "account": { - "title": "Account Settings", - "accountSettings": "Account Settings", - "adminSettings": "Admin Settings - View and Add Users", - "userControlSettings": "User Control Settings", - "changeUsername": "Change Username", - "newUsername": "New Username", - "password": "Confirmation Password", - "oldPassword": "Old password", - "newPassword": "New Password", - "changePassword": "Change Password", - "confirmNewPassword": "Confirm New Password", - "signOut": "Sign Out", - "yourApiKey": "Your API Key", - "syncTitle": "Sync browser settings with Account", - "settingsCompare": "Settings Comparison:", - "property": "Property", - "webBrowserSettings": "Web Browser Setting", - "syncToBrowser": "Sync Account -> Browser", - "syncToAccount": "Sync Account <- Browser" - }, - "adminUserSettings": { - "title": "User Control Settings", - "header": "Admin User Control Settings", - "admin": "Admin", - "user": "User", - "addUser": "Add New User", - "deleteUser": "Delete User", - "confirmDeleteUser": "Should the user be deleted?", - "confirmChangeUserStatus": "Should the user be disabled/enabled?", - "usernameInfo": "Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.", - "roles": "Roles", - "role": "Role", - "actions": "Actions", - "apiUser": "Limited API User", - "extraApiUser": "Additional Limited API User", - "webOnlyUser": "Web Only User", - "demoUser": "Demo User (No custom settings)", - "internalApiUser": "Internal API User", - "forceChange": "Force user to change password on login", - "submit": "Save User", - "changeUserRole": "Change User's Role", - "authenticated": "Authenticated", - "editOwnProfil": "Edit own profile", - "enabledUser": "enabled user", - "disabledUser": "disabled user", - "activeUsers": "Active Users:", - "disabledUsers": "Disabled Users:", - "totalUsers": "Total Users:", - "lastRequest": "Last Request", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Database Import/Export", - "header": "Database Import/Export", - "fileName": "File Name", - "creationDate": "Creation Date", - "fileSize": "File Size", - "deleteBackupFile": "Delete Backup File", - "importBackupFile": "Import Backup File", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Download Backup File", - "info_1": "When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.", - "info_2": "The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.", - "submit": "Import Backup", - "importIntoDatabaseSuccessed": "Import into database successed", - "backupCreated": "Database backup successful", - "fileNotFound": "File not found", - "fileNullOrEmpty": "File must not be null or empty", - "failedImportFile": "Failed to import file", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "Your session has expired. Please refresh the page and try again.", - "refreshPage": "Refresh Page" - }, - "home": { - "desc": "Your locally hosted one-stop-shop for all your PDF needs.", - "searchBar": "Search for features...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "View, annotate, draw, add text or images" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "PDF Multi Tool", - "desc": "Merge, Rotate, Rearrange, Split, and Remove pages" - }, - "merge": { - "title": "Merge", - "desc": "Easily merge multiple PDFs into one." - }, - "split": { - "title": "Split", - "desc": "Split PDFs into multiple documents" - }, - "rotate": { - "title": "Rotate", - "desc": "Easily rotate your PDFs." - }, - "imageToPdf": { - "title": "Image to PDF", - "desc": "Convert a image (PNG, JPEG, GIF) to PDF." - }, - "pdfToImage": { - "title": "PDF to Image", - "desc": "Convert a PDF to a image. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Organise", - "desc": "Remove/Rearrange pages in any order" - }, - "addImage": { - "title": "Add image", - "desc": "Adds a image onto a set location on the PDF" - }, - "watermark": { - "title": "Add Watermark", - "desc": "Add a custom watermark to your PDF document." - }, - "permissions": { - "title": "Change Permissions", - "desc": "Change the permissions of your PDF document" - }, - "removePages": { - "title": "Remove", - "desc": "Delete unwanted pages from your PDF document." - }, - "addPassword": { - "title": "Add Password", - "desc": "Encrypt your PDF document with a password." - }, - "removePassword": { - "title": "Remove Password", - "desc": "Remove password protection from your PDF document." - }, - "compressPdfs": { - "title": "Compress", - "desc": "Compress PDFs to reduce their file size." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Change Metadata", - "desc": "Change/Remove/Add metadata from a PDF document" - }, - "fileToPDF": { - "title": "Convert file to PDF", - "desc": "Convert nearly any file to PDF (DOCX, PNG, XLS, PPT, TXT and more)" - }, - "ocr": { - "title": "OCR / Cleanup scans", - "desc": "Cleanup scans and detects text from images within a PDF and re-adds it as text." - }, - "extractImages": { - "title": "Extract Images", - "desc": "Extracts all images from a PDF and saves them to zip" - }, - "pdfToPDFA": { - "title": "PDF to PDF/A", - "desc": "Convert PDF to PDF/A for long-term storage" - }, - "PDFToWord": { - "title": "PDF to Word", - "desc": "Convert PDF to Word formats (DOC, DOCX and ODT)" - }, - "PDFToPresentation": { - "title": "PDF to Presentation", - "desc": "Convert PDF to Presentation formats (PPT, PPTX and ODP)" - }, - "PDFToText": { - "title": "PDF to RTF (Text)", - "desc": "Convert PDF to Text or RTF format" - }, - "PDFToHTML": { - "title": "PDF to HTML", - "desc": "Convert PDF to HTML format" - }, - "PDFToXML": { - "title": "PDF to XML", - "desc": "Convert PDF to XML format" - }, - "ScannerImageSplit": { - "title": "Detect/Split Scanned photos", - "desc": "Splits multiple photos from within a photo/PDF" - }, - "sign": { - "title": "Sign", - "desc": "Adds signature to PDF by drawing, text or image" - }, - "flatten": { - "title": "Flatten", - "desc": "Remove all interactive elements and forms from a PDF" - }, - "repair": { - "title": "Repair", - "desc": "Tries to repair a corrupt/broken PDF" - }, - "removeBlanks": { - "title": "Remove Blank pages", - "desc": "Detects and removes blank pages from a document" - }, - "removeAnnotations": { - "title": "Remove Annotations", - "desc": "Removes all comments/annotations from a PDF" - }, - "compare": { - "title": "Compare", - "desc": "Compares and shows the differences between 2 PDF Documents" - }, - "certSign": { - "title": "Sign with Certificate", - "desc": "Signs a PDF with a Certificate/Key (PEM/P12)" - }, - "removeCertSign": { - "title": "Remove Certificate Sign", - "desc": "Remove certificate signature from PDF" - }, - "pageLayout": { - "title": "Multi-Page Layout", - "desc": "Merge multiple pages of a PDF document into a single page" - }, - "scalePages": { - "title": "Adjust page size/scale", - "desc": "Change the size/scale of a page and/or its contents." - }, - "pipeline": { - "title": "Pipeline", - "desc": "Run multiple actions on PDFs by defining pipeline scripts" - }, - "add-page-numbers": { - "title": "Add Page Numbers", - "desc": "Add Page numbers throughout a document in a set location" - }, - "auto-rename": { - "title": "Auto Rename PDF File", - "desc": "Auto renames a PDF file based on its detected header" - }, - "adjust-contrast": { - "title": "Adjust Colours/Contrast", - "desc": "Adjust Contrast, Saturation and Brightness of a PDF" - }, - "crop": { - "title": "Crop PDF", - "desc": "Crop a PDF to reduce its size (maintains text!)" - }, - "autoSplitPDF": { - "title": "Auto Split Pages", - "desc": "Auto Split Scanned PDF with physical scanned page splitter QR Code" - }, - "sanitizePdf": { - "title": "Sanitize", - "desc": "Remove scripts and other elements from PDF files" - }, - "URLToPDF": { - "title": "URL/Website To PDF", - "desc": "Converts any http(s)URL to PDF" - }, - "HTMLToPDF": { - "title": "HTML to PDF", - "desc": "Converts any HTML file or zip to PDF" - }, - "MarkdownToPDF": { - "title": "Markdown to PDF", - "desc": "Converts any Markdown file to PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Get ALL Info on PDF", - "desc": "Grabs any and all information possible on PDFs" - }, - "extractPage": { - "title": "Extract page(s)", - "desc": "Extracts select pages from PDF" - }, - "PdfToSinglePage": { - "title": "PDF to Single Large Page", - "desc": "Merges all PDF pages into one large single page" - }, - "showJS": { - "title": "Show Javascript", - "desc": "Searches and displays any JS injected into a PDF" - }, - "autoRedact": { - "title": "Auto Redact", - "desc": "Auto Redacts(Blacks out) text in a PDF based on input text" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF to CSV", - "desc": "Extracts Tables from a PDF converting it to CSV" - }, - "autoSizeSplitPDF": { - "title": "Auto Split by Size/Count", - "desc": "Split a single PDF into multiple documents based on size, page count, or document count" - }, - "overlay-pdfs": { - "title": "Overlay PDFs", - "desc": "Overlays PDFs on-top of another PDF" - }, - "split-by-sections": { - "title": "Split PDF by Sections", - "desc": "Divide each page of a PDF into smaller horizontal and vertical sections" - }, - "AddStampRequest": { - "title": "Add Stamp to PDF", - "desc": "Add text or add image stamps at set locations" - }, - "removeImagePdf": { - "title": "Remove image", - "desc": "Remove image from PDF to reduce file size" - }, - "splitPdfByChapters": { - "title": "Split PDF by Chapters", - "desc": "Split a PDF into multiple files based on its chapter structure." - }, - "validateSignature": { - "title": "Validate PDF Signature", - "desc": "Verify digital signatures and certificates in PDF documents" - }, - "replaceColorPdf": { - "title": "Advanced Colour options", - "desc": "Replace colour for text and background in PDF and invert full colour of pdf to reduce file size" - } - }, - "viewPdf": { - "tags": "view,read,annotate,text,image,highlight,edit", - "title": "View/Edit PDF", - "header": "View PDF" - }, - "multiTool": { - "tags": "Multi Tool,Multi operation,UI,click drag,front end,client side,interactive,intractable,move,delete,migrate,divide", - "title": "PDF Multi Tool", - "header": "PDF Multi Tool", - "uploadPrompts": "File Name", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "selectPages": "Page Select", - "selectedPages": "Selected Pages", - "page": "Page", - "deleteSelected": "Delete Selected", - "downloadAll": "Export", - "downloadSelected": "Export Selected", - "insertPageBreak": "Insert Page Break", - "addFile": "Add File", - "rotateLeft": "Rotate Left", - "rotateRight": "Rotate Right", - "split": "Split", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "Delete", - "dragDropMessage": "Page(s) Selected", - "undo": "Undo (CTRL + Z)", - "redo": "Redo (CTRL + Y)" - }, - "merge": { - "tags": "merge,Page operations,Back end,server side", - "title": "Merge", - "header": "Merge multiple PDFs (2+)", - "sortByName": "Sort by name", - "sortByDate": "Sort by date", - "removeCertSign": "Remove digital signature in the merged file?", - "submit": "Merge" - }, - "split": { - "tags": "Page operations,divide,Multi Page,cut,server side", - "title": "Split PDF", - "header": "Split PDF", - "desc": { - "1": "The numbers you select are the page number you wish to do a split on", - "2": "As such selecting 1,3,7-9 would split a 10 page document into 6 separate PDFS with:", - "3": "Document #1: Page 1", - "4": "Document #2: Page 2 and 3", - "5": "Document #3: Page 4, 5, 6 and 7", - "6": "Document #4: Page 8", - "7": "Document #5: Page 9", - "8": "Document #6: Page 10" - }, - "splitPages": "Enter pages to split on:", - "submit": "Split" - }, - "rotate": { - "tags": "server side", - "title": "Rotate PDF", - "header": "Rotate PDF", - "selectAngle": "Select rotation angle (in multiples of 90 degrees):", - "submit": "Rotate" - }, - "imageToPdf": { - "tags": "conversion,img,jpg,picture,photo" - }, - "pdfToImage": { - "tags": "conversion,img,jpg,picture,photo", - "title": "PDF to Image", - "header": "PDF to Image", - "selectText": "Image Format", - "singleOrMultiple": "Page to Image result type", - "single": "Single Big Image Combing all pages", - "multi": "Multiple Images, one image per page", - "colorType": "Colour type", - "color": "Colour", - "grey": "Greyscale", - "blackwhite": "Black and White (May lose data!)", - "submit": "Convert", - "info": "Python is not installed. Required for WebP conversion.", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,even,odd,sort,move", - "title": "Page Organiser", - "header": "PDF Page Organiser", - "submit": "Rearrange Pages", - "mode": { - "_value": "Mode", - "1": "Custom Page Order", - "2": "Reverse Order", - "3": "Duplex Sort", - "4": "Booklet Sort", - "5": "Side Stitch Booklet Sort", - "6": "Odd-Even Split", - "7": "Remove First", - "8": "Remove Last", - "9": "Remove First and Last", - "10": "Odd-Even Merge", - "11": "Duplicate all pages" - }, - "placeholder": "(e.g. 1,3,2 or 4-8,2,10-12 or 2n-1)" - }, - "addImage": { - "tags": "img,jpg,picture,photo", - "title": "Add Image", - "header": "Add image to PDF", - "everyPage": "Every Page?", - "upload": "Add image", - "submit": "Add image" - }, - "watermark": { - "tags": "Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo", - "title": "Add Watermark", - "header": "Add Watermark", - "customColor": "Custom Text Colour", - "selectText": { - "1": "Select PDF to add watermark to:", - "2": "Watermark Text:", - "3": "Font Size:", - "4": "Rotation (0-360):", - "5": "Width Spacer (Space between each watermark horizontally):", - "6": "Height Spacer (Space between each watermark vertically):", - "7": "Opacity (0% - 100%):", - "8": "Watermark Type:", - "9": "Watermark Image:", - "10": "Convert PDF to PDF-Image" - }, - "submit": "Add Watermark", - "type": { - "1": "Text", - "2": "Image" - } - }, - "permissions": { - "tags": "read,write,edit,print", - "title": "Change Permissions", - "header": "Change Permissions", - "warning": "Warning to have these permissions be unchangeable it is recommended to set them with a password via the add-password page", - "selectText": { - "1": "Select PDF to change permissions", - "2": "Permissions to set", - "3": "Prevent assembly of document", - "4": "Prevent content extraction", - "5": "Prevent extraction for accessibility", - "6": "Prevent filling in form", - "7": "Prevent modification", - "8": "Prevent annotation modification", - "9": "Prevent printing", - "10": "Prevent printing different formats" - }, - "submit": "Change" - }, - "removePages": { - "tags": "Remove pages,delete pages" - }, - "addPassword": { - "tags": "secure,security", - "title": "Add Password", - "header": "Add password (Encrypt)", - "selectText": { - "1": "Select PDF to encrypt", - "2": "User Password", - "3": "Encryption Key Length", - "4": "Higher values are stronger, but lower values have better compatibility.", - "5": "Permissions to set (Recommended to be used along with Owner password)", - "6": "Prevent assembly of document", - "7": "Prevent content extraction", - "8": "Prevent extraction for accessibility", - "9": "Prevent filling in form", - "10": "Prevent modification", - "11": "Prevent annotation modification", - "12": "Prevent printing", - "13": "Prevent printing different formats", - "14": "Owner Password", - "15": "Restricts what can be done with the document once it is opened (Not supported by all readers)", - "16": "Restricts the opening of the document itself" - }, - "submit": "Encrypt" - }, - "removePassword": { - "tags": "secure,Decrypt,security,unpassword,delete password", - "title": "Remove password", - "header": "Remove password (Decrypt)", - "selectText": { - "1": "Select PDF to Decrypt", - "2": "Password" - }, - "submit": "Remove" - }, - "compressPdfs": { - "tags": "squish,small,tiny" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Title,author,date,creation,time,publisher,producer,stats", - "title": "Change Metadata", - "header": "Change Metadata", - "selectText": { - "1": "Please edit the variables you wish to change", - "2": "Delete all metadata", - "3": "Show Custom Metadata:", - "4": "Other Metadata:", - "5": "Add Custom Metadata Entry" - }, - "author": "Author:", - "creationDate": "Creation Date (yyyy/MM/dd HH:mm:ss):", - "creator": "Creator:", - "keywords": "Keywords:", - "modDate": "Modification Date (yyyy/MM/dd HH:mm:ss):", - "producer": "Producer:", - "subject": "Subject:", - "trapped": "Trapped:", - "submit": "Change" - }, - "fileToPDF": { - "tags": "transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint", - "title": "File to PDF", - "header": "Convert any file to PDF", - "credit": "This service uses LibreOffice and Unoconv for file conversion.", - "supportedFileTypesInfo": "Supported File types", - "supportedFileTypes": "Supported file types should include the below however for a full updated list of supported formats, please refer to the LibreOffice documentation", - "submit": "Convert to PDF" - }, - "ocr": { - "tags": "recognition,text,image,scan,read,identify,detection,editable", - "title": "OCR / Scan Cleanup", - "header": "Cleanup Scans / OCR (Optical Character Recognition)", - "selectText": { - "1": "Select languages that are to be detected within the PDF (Ones listed are the ones currently detected):", - "2": "Produce text file containing OCR text alongside the OCR'ed PDF", - "3": "Correct pages were scanned at a skewed angle by rotating them back into place", - "4": "Clean page so its less likely that OCR will find text in background noise. (No output change)", - "5": "Clean page so its less likely that OCR will find text in background noise, maintains cleanup in output.", - "6": "Ignores pages that have interactive text on them, only OCRs pages that are images", - "7": "Force OCR, will OCR Every page removing all original text elements", - "8": "Normal (Will error if PDF contains text)", - "9": "Additional Settings", - "10": "OCR Mode", - "11": "Remove images after OCR (Removes ALL images, only useful if part of conversion step)", - "12": "Render Type (Advanced)" - }, - "help": "Please read this documentation on how to use this for other languages and/or use not in docker", - "credit": "This service uses qpdf and Tesseract for OCR.", - "submit": "Process PDF with OCR" - }, - "extractImages": { - "tags": "picture,photo,save,archive,zip,capture,grab", - "title": "Extract Images", - "header": "Extract Images", - "selectText": "Select image format to convert extracted images to", - "allowDuplicates": "Save duplicate images", - "submit": "Extract" - }, - "pdfToPDFA": { - "tags": "archive,long-term,standard,conversion,storage,preservation", - "title": "PDF To PDF/A", - "header": "PDF To PDF/A", - "credit": "This service uses libreoffice for PDF/A conversion", - "submit": "Convert", - "tip": "Currently does not work for multiple inputs at once", - "outputFormat": "Output format", - "pdfWithDigitalSignature": "The PDF contains a digital signature. This will be removed in the next step." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile", - "title": "PDF to Word", - "header": "PDF to Word", - "selectText": { - "1": "Output file format" - }, - "credit": "This service uses LibreOffice for file conversion.", - "submit": "Convert" - }, - "PDFToPresentation": { - "tags": "slides,show,office,microsoft", - "title": "PDF to Presentation", - "header": "PDF to Presentation", - "selectText": { - "1": "Output file format" - }, - "credit": "This service uses LibreOffice for file conversion.", - "submit": "Convert" - }, - "PDFToText": { - "tags": "richformat,richtextformat,rich text format", - "title": "PDF to RTF (Text)", - "header": "PDF to RTF (Text)", - "selectText": { - "1": "Output file format" - }, - "credit": "This service uses LibreOffice for file conversion.", - "submit": "Convert" - }, - "PDFToHTML": { - "tags": "web content,browser friendly", - "title": "PDF to HTML", - "header": "PDF to HTML", - "credit": "This service uses pdftohtml for file conversion.", - "submit": "Convert" - }, - "PDFToXML": { - "tags": "data-extraction,structured-content,interop,transformation,convert", - "title": "PDF to XML", - "header": "PDF to XML", - "credit": "This service uses LibreOffice for file conversion.", - "submit": "Convert" - }, - "ScannerImageSplit": { - "tags": "separate,auto-detect,scans,multi-photo,organize", - "selectText": { - "1": "Angle Threshold:", - "2": "Sets the minimum absolute angle required for the image to be rotated (default: 10).", - "3": "Tolerance:", - "4": "Determines the range of colour variation around the estimated background colour (default: 30).", - "5": "Minimum Area:", - "6": "Sets the minimum area threshold for a photo (default: 10000).", - "7": "Minimum Contour Area:", - "8": "Sets the minimum contour area threshold for a photo", - "9": "Border Size:", - "10": "Sets the size of the border added and removed to prevent white borders in the output (default: 1)." - }, - "info": "Python is not installed. It is required to run." - }, - "sign": { - "tags": "authorize,initials,drawn-signature,text-sign,image-signature", - "title": "Sign", - "header": "Sign PDFs", - "upload": "Upload Image", - "draw": "Draw Signature", - "text": "Text Input", - "clear": "Clear", - "add": "Add", - "saved": "Saved Signatures", - "save": "Save Signature", - "personalSigs": "Personal Signatures", - "sharedSigs": "Shared Signatures", - "noSavedSigs": "No saved signatures found", - "addToAll": "Add to all pages", - "delete": "Delete", - "first": "First page", - "last": "Last page", - "next": "Next page", - "previous": "Previous page", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "static,deactivate,non-interactive,streamline", - "title": "Flatten", - "header": "Flatten PDF", - "flattenOnlyForms": "Flatten only forms", - "submit": "Flatten" - }, - "repair": { - "tags": "fix,restore,correction,recover", - "title": "Repair", - "header": "Repair PDFs", - "submit": "Repair" - }, - "removeBlanks": { - "tags": "cleanup,streamline,non-content,organize", - "title": "Remove Blanks", - "header": "Remove Blank Pages", - "threshold": "Pixel Whiteness Threshold:", - "thresholdDesc": "Threshold for determining how white a white pixel must be to be classed as 'White'. 0 = Black, 255 pure white.", - "whitePercent": "White Percent (%):", - "whitePercentDesc": "Percent of page that must be 'white' pixels to be removed", - "submit": "Remove Blanks" - }, - "removeAnnotations": { - "tags": "comments,highlight,notes,markup,remove", - "title": "Remove Annotations", - "header": "Remove Annotations", - "submit": "Remove" - }, - "compare": { - "tags": "differentiate,contrast,changes,analysis", - "title": "Compare", - "header": "Compare PDFs", - "highlightColor": { - "1": "Highlight Colour 1:", - "2": "Highlight Colour 2:" - }, - "document": { - "1": "Document 1", - "2": "Document 2" - }, - "submit": "Compare", - "complex": { - "message": "One or both of the provided documents are large files, accuracy of comparison may be reduced" - }, - "large": { - "file": { - "message": "One or Both of the provided documents are too large to process" - } - }, - "no": { - "text": { - "message": "One or both of the selected PDFs have no text content. Please choose PDFs with text for comparison." - } - } - }, - "certSign": { - "tags": "authenticate,PEM,P12,official,encrypt", - "title": "Certificate Signing", - "header": "Sign a PDF with your certificate (Work in progress)", - "selectPDF": "Select a PDF File for Signing:", - "jksNote": "Note: If your certificate type is not listed below, please convert it to a Java Keystore (.jks) file using the keytool command line tool. Then, choose the .jks file option below.", - "selectKey": "Select Your Private Key File (PKCS#8 format, could be .pem or .der):", - "selectCert": "Select Your Certificate File (X.509 format, could be .pem or .der):", - "selectP12": "Select Your PKCS#12 Keystore File (.p12 or .pfx) (Optional, If provided, it should contain your private key and certificate):", - "selectJKS": "Select Your Java Keystore File (.jks or .keystore):", - "certType": "Certificate Type", - "password": "Enter Your Keystore or Private Key Password (If Any):", - "showSig": "Show Signature", - "reason": "Reason", - "location": "Location", - "name": "Name", - "showLogo": "Show Logo", - "submit": "Sign PDF" - }, - "removeCertSign": { - "tags": "authenticate,PEM,P12,official,decrypt", - "title": "Remove Certificate Signature", - "header": "Remove the digital certificate from the PDF", - "selectPDF": "Select a PDF file:", - "submit": "Remove Signature" - }, - "pageLayout": { - "tags": "merge,composite,single-view,organize", - "title": "Multi Page Layout", - "header": "Multi Page Layout", - "pagesPerSheet": "Pages per sheet:", - "addBorder": "Add Borders", - "submit": "Submit" - }, - "scalePages": { - "tags": "resize,modify,dimension,adapt", - "title": "Adjust page-scale", - "header": "Adjust page-scale", - "pageSize": "Size of a page of the document.", - "keepPageSize": "Original Size", - "scaleFactor": "Zoom level (crop) of a page.", - "submit": "Submit" - }, - "add-page-numbers": { - "tags": "paginate,label,organize,index" - }, - "auto-rename": { - "tags": "auto-detect,header-based,organize,relabel", - "title": "Auto Rename", - "header": "Auto Rename PDF", - "submit": "Auto Rename" - }, - "adjust-contrast": { - "tags": "color-correction,tune,modify,enhance,colour-correction" - }, - "crop": { - "tags": "trim,shrink,edit,shape", - "title": "Crop", - "header": "Crop PDF", - "submit": "Submit" - }, - "autoSplitPDF": { - "tags": "QR-based,separate,scan-segment,organize", - "title": "Auto Split PDF", - "header": "Auto Split PDF", - "description": "Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.", - "selectText": { - "1": "Print out some divider sheets from below (Black and white is fine).", - "2": "Scan all your documents at once by inserting the divider sheet between them.", - "3": "Upload the single large scanned PDF file and let Stirling PDF handle the rest.", - "4": "Divider pages are automatically detected and removed, guaranteeing a neat final document." - }, - "formPrompt": "Submit PDF containing Stirling-PDF Page dividers:", - "duplexMode": "Duplex Mode (Front and back scanning)", - "dividerDownload2": "Download 'Auto Splitter Divider (with instructions).pdf'", - "submit": "Submit" - }, - "sanitizePdf": { - "tags": "clean,secure,safe,remove-threats" - }, - "URLToPDF": { - "tags": "web-capture,save-page,web-to-doc,archive", - "title": "URL To PDF", - "header": "URL To PDF", - "submit": "Convert", - "credit": "Uses WeasyPrint" - }, - "HTMLToPDF": { - "tags": "markup,web-content,transformation,convert", - "title": "HTML To PDF", - "header": "HTML To PDF", - "help": "Accepts HTML files and ZIPs containing html/css/images etc required", - "submit": "Convert", - "credit": "Uses WeasyPrint", - "zoom": "Zoom level for displaying the website.", - "pageWidth": "Width of the page in centimeters. (Blank to default)", - "pageHeight": "Height of the page in centimeters. (Blank to default)", - "marginTop": "Top margin of the page in millimeters. (Blank to default)", - "marginBottom": "Bottom margin of the page in millimeters. (Blank to default)", - "marginLeft": "Left margin of the page in millimeters. (Blank to default)", - "marginRight": "Right margin of the page in millimeters. (Blank to default)", - "printBackground": "Render the background of websites.", - "defaultHeader": "Enable Default Header (Name and page number)", - "cssMediaType": "Change the CSS media type of the page.", - "none": "None", - "print": "Print", - "screen": "Screen" - }, - "MarkdownToPDF": { - "tags": "markup,web-content,transformation,convert,md", - "title": "Markdown To PDF", - "header": "Markdown To PDF", - "submit": "Convert", - "help": "Work in progress", - "credit": "Uses WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "infomation,data,stats,statistics", - "title": "Get Info on PDF", - "header": "Get Info on PDF", - "submit": "Get Info", - "downloadJson": "Download JSON" - }, - "extractPage": { - "tags": "extract" - }, - "PdfToSinglePage": { - "tags": "single page" - }, - "showJS": { - "tags": "JS", - "title": "Show Javascript", - "header": "Show Javascript", - "downloadJS": "Download Javascript", - "submit": "Show" - }, - "autoRedact": { - "tags": "Redact,Hide,black out,black,marker,hidden", - "title": "Auto Redact", - "header": "Auto Redact", - "colorLabel": "Colour", - "textsToRedactLabel": "Text to Redact (line-separated)", - "textsToRedactPlaceholder": "e.g. \\nConfidential \\nTop-Secret", - "useRegexLabel": "Use Regex", - "wholeWordSearchLabel": "Whole Word Search", - "customPaddingLabel": "Custom Extra Padding", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "submitButton": "Submit" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,Table Extraction,extract,convert" - }, - "autoSizeSplitPDF": { - "tags": "pdf,split,document,organization" - }, - "overlay-pdfs": { - "tags": "Overlay", - "header": "Overlay PDF Files", - "baseFile": { - "label": "Select Base PDF File" - }, - "overlayFiles": { - "label": "Select Overlay PDF Files" - }, - "mode": { - "label": "Select Overlay Mode", - "sequential": "Sequential Overlay", - "interleaved": "Interleaved Overlay", - "fixedRepeat": "Fixed Repeat Overlay" - }, - "counts": { - "label": "Overlay Counts (for Fixed Repeat Mode)", - "placeholder": "Enter comma-separated counts (e.g., 2,3,1)" - }, - "position": { - "label": "Select Overlay Position", - "foreground": "Foreground", - "background": "Background" - }, - "submit": "Submit" - }, - "split-by-sections": { - "tags": "Section Split, Divide, Customize,Customise", - "title": "Split PDF by Sections", - "header": "Split PDF into Sections", - "horizontal": { - "label": "Horizontal Divisions", - "placeholder": "Enter number of horizontal divisions" - }, - "vertical": { - "label": "Vertical Divisions", - "placeholder": "Enter number of vertical divisions" - }, - "submit": "Split PDF", - "merge": "Merge Into One PDF" - }, - "AddStampRequest": { - "tags": "Stamp, Add image, center image, Watermark, PDF, Embed, Customize,Customise", - "header": "Stamp PDF", - "title": "Stamp PDF", - "stampType": "Stamp Type", - "stampText": "Stamp Text", - "stampImage": "Stamp Image", - "alphabet": "Alphabet", - "fontSize": "Font/Image Size", - "rotation": "Rotation", - "opacity": "Opacity", - "position": "Position", - "overrideX": "Override X Coordinate", - "overrideY": "Override Y Coordinate", - "customMargin": "Custom Margin", - "customColor": "Custom Text Colour", - "submit": "Submit" - }, - "removeImagePdf": { - "tags": "Remove Image,Page operations,Back end,server side" - }, - "splitPdfByChapters": { - "tags": "split,chapters,bookmarks,organize" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "Validate PDF Signatures", - "header": "Validate Digital Signatures", - "selectPDF": "Select signed PDF file", - "submit": "Validate Signatures", - "results": "Validation Results", - "status": { - "_value": "Status", - "valid": "Valid", - "invalid": "Invalid" - }, - "signer": "Signer", - "date": "Date", - "reason": "Reason", - "location": "Location", - "noSignatures": "No digital signatures found in this document", - "chain": { - "invalid": "Certificate chain validation failed - cannot verify signer's identity" - }, - "trust": { - "invalid": "Certificate not in trust store - source cannot be verified" - }, - "cert": { - "expired": "Certificate has expired", - "revoked": "Certificate has been revoked", - "info": "Certificate Details", - "issuer": "Issuer", - "subject": "Subject", - "serialNumber": "Serial Number", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "algorithm": "Algorithm", - "keySize": "Key Size", - "version": "Version", - "keyUsage": "Key Usage", - "selfSigned": "Self-Signed", - "bits": "bits" - }, - "signature": { - "info": "Signature Information", - "_value": "Signature", - "mathValid": "Signature is mathematically valid BUT:" - }, - "selectCustomCert": "Custom Certificate File X.509 (Optional)" - }, - "replace-color": { - "title": "Advanced Colour options", - "header": "Replace-Invert Colour PDF", - "selectText": { - "1": "Replace or Invert colour Options", - "2": "Default(Default high contrast colours)", - "3": "Custom(Customised colours)", - "4": "Full-Invert(Invert all colours)", - "5": "High contrast colour options", - "6": "white text on black background", - "7": "Black text on white background", - "8": "Yellow text on black background", - "9": "Green text on black background", - "10": "Choose text Colour", - "11": "Choose background Colour" - }, - "submit": "Replace" - }, - "replaceColorPdf": { - "tags": "Replace Colour,Page operations,Back end,server side" - }, - "login": { - "title": "Sign in", - "header": "Sign in", - "signin": "Sign in", - "rememberme": "Remember me", - "invalid": "Invalid username or password.", - "locked": "Your account has been locked.", - "signinTitle": "Please sign in", - "ssoSignIn": "Login via Single Sign-on", - "oAuth2AutoCreateDisabled": "OAUTH2 Auto-Create User Disabled", - "oAuth2AdminBlockedUser": "Registration or logging in of non-registered users is currently blocked. Please contact the administrator.", - "oauth2RequestNotFound": "Authorization request not found", - "oauth2InvalidUserInfoResponse": "Invalid User Info Response", - "oauth2invalidRequest": "Invalid Request", - "oauth2AccessDenied": "Access Denied", - "oauth2InvalidTokenResponse": "Invalid Token Response", - "oauth2InvalidIdToken": "Invalid Id Token", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "User is deactivated, login is currently blocked with this username. Please contact the administrator.", - "alreadyLoggedIn": "You are already logged in to", - "alreadyLoggedIn2": "devices. Please log out of the devices and try again.", - "toManySessions": "You have too many active sessions", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF To Single Page", - "header": "PDF To Single Page", - "submit": "Convert To Single Page" - }, - "pageExtracter": { - "title": "Extract Pages", - "header": "Extract Pages", - "submit": "Extract", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "sanitizePDF": { - "title": "Sanitize PDF", - "header": "Sanitize a PDF file", - "selectText": { - "1": "Remove JavaScript actions", - "2": "Remove embedded files", - "3": "Remove XMP metadata", - "4": "Remove links", - "5": "Remove fonts", - "6": "Remove Document Info Metadata" - }, - "submit": "Sanitize PDF" - }, - "adjustContrast": { - "title": "Adjust Contrast", - "header": "Adjust Contrast", - "contrast": "Contrast:", - "brightness": "Brightness:", - "saturation": "Saturation:", - "download": "Download" - }, - "compress": { - "title": "Compress", - "header": "Compress PDF", - "credit": "This service uses qpdf for PDF Compress/Optimisation.", - "grayscale": { - "label": "Apply Grayscale for Compression" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Optimisation level:", - "4": "Auto mode - Auto adjusts quality to get PDF to exact size", - "5": "Expected PDF Size (e.g. 25MB, 10.8MB, 25KB)" - }, - "submit": "Compress" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "This feature is also available in our multi-tool page. Check it out for enhanced page-by-page UI and additional features!" - }, - "pageRemover": { - "title": "Page Remover", - "header": "PDF Page remover", - "pagesToDelete": "Pages to delete (Enter a comma-separated list of page numbers) :", - "submit": "Delete Pages", - "placeholder": "(e.g. 1,2,6 or 1-10,15-30)" - }, - "imageToPDF": { - "title": "Image to PDF", - "header": "Image to PDF", - "submit": "Convert", - "selectLabel": "Image Fit Options", - "fillPage": "Fill Page", - "fitDocumentToImage": "Fit Page to Image", - "maintainAspectRatio": "Maintain Aspect Ratios", - "selectText": { - "2": "Auto rotate PDF", - "3": "Multi file logic (Only enabled if working with multiple images)", - "4": "Merge into single PDF", - "5": "Convert to separate PDFs" - } - }, - "PDFToCSV": { - "title": "PDF to CSV", - "header": "PDF to CSV", - "prompt": "Choose page to extract table", - "submit": "Extract" - }, - "split-by-size-or-count": { - "title": "Split PDF by Size or Count", - "header": "Split PDF by Size or Count", - "type": { - "label": "Select Split Type", - "size": "By Size", - "pageCount": "By Page Count", - "docCount": "By Document Count" - }, - "value": { - "label": "Enter Value", - "placeholder": "Enter size (e.g., 2MB or 3KB) or count (e.g., 5)" - }, - "submit": "Submit" - }, - "printFile": { - "title": "Print File", - "header": "Print File to Printer", - "selectText": { - "1": "Select File to Print", - "2": "Enter Printer Name" - }, - "submit": "Print" - }, - "licenses": { - "nav": "Licences", - "title": "3rd Party Licences", - "header": "3rd Party Licences", - "module": "Module", - "version": "Version", - "license": "Licence" - }, - "survey": { - "nav": "Survey", - "title": "Stirling-PDF Survey", - "description": "Stirling-PDF has no tracking so we want to hear from our users to improve Stirling-PDF!", - "changes": "Stirling-PDF has changed since the last survey! To find out more please check our blog post here:", - "changes2": "With these changes we are getting paid business support and funding", - "please": "Please consider taking our survey to have input on the future of Stirling-PDF!", - "disabled": "(Survey popup will be disabled in following updates but available at foot of page)", - "button": "Take Survey", - "dontShowAgain": "Don't show again", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Remove image", - "header": "Remove image", - "removeImage": "Remove image", - "submit": "Remove image" - }, - "splitByChapters": { - "title": "Split PDF by Chapters", - "header": "Split PDF by Chapters", - "bookmarkLevel": "Bookmark Level", - "includeMetadata": "Include Metadata", - "allowDuplicates": "Allow Duplicates", - "desc": { - "1": "This tool splits a PDF file into multiple PDFs based on its chapter structure.", - "2": "Bookmark Level: Choose the level of bookmarks to use for splitting (0 for top-level, 1 for second-level, etc.).", - "3": "Include Metadata: If checked, the original PDF's metadata will be included in each split PDF.", - "4": "Allow Duplicates: If checked, allows multiple bookmarks on the same page to create separate PDFs." - }, - "submit": "Split PDF" - }, - "fileChooser": { - "click": "Click", - "or": "or", - "dragAndDrop": "Drag & Drop", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "Drag & Drop file(s) here", - "extractPDF": "Extracting..." - }, - "releases": { - "footer": "Releases", - "title": "Release Notes", - "header": "Release Notes", - "current": { - "version": "Current Release" - }, - "note": "Release notes are only available in English" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - }, - "removeMetadata": { - "submit": "Remove Metadata" - }, - "sidebar": { - "toggle": "Toggle Sidebar" - }, - "theme": { - "toggle": "Toggle Theme" - }, - "view": { - "viewer": "Viewer", - "pageEditor": "Page Editor", - "fileManager": "File Manager" - }, - "fileManager": { - "dragDrop": "Drag & Drop files here", - "clickToUpload": "Click to upload files", - "selectedFiles": "Selected Files", - "clearAll": "Clear All" - }, - "pageEditor": { - "title": "Page Editor", - "save": "Save Changes", - "noPdfLoaded": "No PDF loaded. Please upload a PDF to edit.", - "rotatedLeft": "Rotated left:", - "rotatedRight": "Rotated right:", - "deleted": "Deleted:", - "movedLeft": "Moved left:", - "movedRight": "Moved right:", - "splitAt": "Split at:", - "insertedPageBreak": "Inserted page break at:", - "addFileNotImplemented": "Add file not implemented in demo", - "closePdf": "Close PDF", - "reset": "Reset Changes", - "zoomIn": "Zoom In", - "zoomOut": "Zoom Out", - "fitToWidth": "Fit to Width", - "actualSize": "Actual Size" - }, - "viewer": { - "noPdfLoaded": "No PDF loaded. Click to upload a PDF.", - "choosePdf": "Choose PDF", - "noPagesToDisplay": "No pages to display.", - "singlePageView": "Single Page View", - "dualPageView": "Dual Page View", - "hideSidebars": "Hide Sidebars", - "showSidebars": "Show Sidebars", - "zoomOut": "Zoom out", - "zoomIn": "Zoom in", - "previousPage": "Previous Page", - "nextPage": "Next Page", - "pageNavigation": "Page Navigation", - "currentPage": "Current Page", - "totalPages": "Total Pages" - }, - "toolPicker": { - "searchPlaceholder": "Search tools...", - "noToolsFound": "No tools found" - } -} \ No newline at end of file diff --git a/frontend/dist/locales/en-US/translation.json b/frontend/dist/locales/en-US/translation.json deleted file mode 100644 index e73175694..000000000 --- a/frontend/dist/locales/en-US/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Font Size", - "fontName": "Font Name", - "title": "Add Page Numbers", - "header": "Add Page Numbers", - "selectText": { - "1": "Select PDF file:", - "2": "Margin Size", - "3": "Position", - "4": "Starting Number", - "5": "Pages to Number", - "6": "Custom Text" - }, - "customTextDesc": "Custom Text", - "numberPagesDesc": "Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc", - "customNumberDesc": "Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n}", - "submit": "Add Page Numbers" - }, - "pdfPrompt": "Select PDF(s)", - "multiPdfPrompt": "Select PDFs (2+)", - "multiPdfDropPrompt": "Select (or drag & drop) all PDFs you require", - "imgPrompt": "Select Image(s)", - "genericSubmit": "Submit", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Warning: This process can take up to a minute depending on file-size", - "pageOrderPrompt": "Custom Page Order (Enter a comma-separated list of page numbers or Functions like 2n+1) :", - "pageSelectionPrompt": "Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :", - "goToPage": "Go", - "true": "True", - "false": "False", - "unknown": "Unknown", - "save": "Save", - "saveToBrowser": "Save to Browser", - "close": "Close", - "filesSelected": "files selected", - "noFavourites": "No favorites added", - "downloadComplete": "Download Complete", - "bored": "Bored Waiting?", - "alphabet": "Alphabet", - "downloadPdf": "Download PDF", - "text": "Text", - "font": "Font", - "selectFillter": "-- Select --", - "pageNum": "Page Number", - "sizes": { - "small": "Small", - "medium": "Medium", - "large": "Large", - "x-large": "X-Large" - }, - "error": { - "pdfPassword": "The PDF Document is passworded and either the password was not provided or was incorrect", - "_value": "Error", - "sorry": "Sorry for the issue!", - "needHelp": "Need help / Found an issue?", - "contactTip": "If you're still having trouble, don't hesitate to reach out to us for help. You can submit a ticket on our GitHub page or contact us through Discord:", - "404": { - "head": "404 - Page Not Found | Oops, we tripped in the code!", - "1": "We can't seem to find the page you're looking for.", - "2": "Something went wrong" - }, - "github": "Submit a ticket on GitHub", - "showStack": "Show Stack Trace", - "copyStack": "Copy Stack Trace", - "githubSubmit": "GitHub - Submit a ticket", - "discordSubmit": "Discord - Submit Support post" - }, - "delete": "Delete", - "username": "Username", - "password": "Password", - "welcome": "Welcome", - "property": "Property", - "black": "Black", - "white": "White", - "red": "Red", - "green": "Green", - "blue": "Blue", - "custom": "Custom...", - "WorkInProgess": "Work in progress, May not work or be buggy, Please report any problems!", - "poweredBy": "Powered by", - "yes": "Yes", - "no": "No", - "changedCredsMessage": "Credentials changed!", - "notAuthenticatedMessage": "User not authenticated.", - "userNotFoundMessage": "User not found.", - "incorrectPasswordMessage": "Current password is incorrect.", - "usernameExistsMessage": "New Username already exists.", - "invalidUsernameMessage": "Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.", - "invalidPasswordMessage": "The password must not be empty and must not have spaces at the beginning or end.", - "confirmPasswordErrorMessage": "New Password and Confirm New Password must match.", - "deleteCurrentUserMessage": "Cannot delete currently logged in user.", - "deleteUsernameExistsMessage": "The username does not exist and cannot be deleted.", - "downgradeCurrentUserMessage": "Cannot downgrade current user's role", - "disabledCurrentUserMessage": "The current user cannot be disabled", - "downgradeCurrentUserLongMessage": "Cannot downgrade current user's role. Hence, current user will not be shown.", - "userAlreadyExistsOAuthMessage": "The user already exists as an OAuth2 user.", - "userAlreadyExistsWebMessage": "The user already exists as an web user.", - "oops": "Oops!", - "help": "Help", - "goHomepage": "Go to Homepage", - "joinDiscord": "Join our Discord server", - "seeDockerHub": "See Docker Hub", - "visitGithub": "Visit Github Repository", - "donate": "Donate", - "color": "Color", - "sponsor": "Sponsor", - "info": "Info", - "pro": "Pro", - "page": "Page", - "pages": "Pages", - "loading": "Loading...", - "addToDoc": "Add to Document", - "reset": "Reset", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Privacy Policy", - "terms": "Terms and Conditions", - "accessibility": "Accessibility", - "cookie": "Cookie Policy", - "impressum": "Impressum", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Pipeline Menu (Beta)", - "uploadButton": "Upload Custom", - "configureButton": "Configure", - "defaultOption": "Custom", - "submitButton": "Submit", - "help": "Pipeline Help", - "scanHelp": "Folder Scanning Help", - "deletePrompt": "Are you sure you want to delete pipeline", - "tags": "automate,sequence,scripted,batch-process", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Pipeline Configuration", - "pipelineNameLabel": "Pipeline Name", - "saveSettings": "Save Operation Settings", - "pipelineNamePrompt": "Enter pipeline name here", - "selectOperation": "Select Operation", - "addOperationButton": "Add operation", - "pipelineHeader": "Pipeline:", - "saveButton": "Download", - "validateButton": "Validate" - }, - "enterpriseEdition": { - "button": "Upgrade to Pro", - "warning": "This feature is only available to Pro users.", - "yamlAdvert": "Stirling PDF Pro supports YAML configuration files and other SSO features.", - "ssoAdvert": "Looking for more user management features? Check out Stirling PDF Pro" - }, - "analytics": { - "title": "Do you want make Stirling PDF better?", - "paragraph1": "Stirling PDF has opt in analytics to help us improve the product. We do not track any personal information or file contents.", - "paragraph2": "Please consider enabling analytics to help Stirling-PDF grow and to allow us to understand our users better.", - "enable": "Enable analytics", - "disable": "Disable analytics", - "settings": "You can change the settings for analytics in the config/settings.yml file" - }, - "navbar": { - "favorite": "Favorites", - "recent": "New and recently updated", - "darkmode": "Dark Mode", - "language": "Languages", - "settings": "Settings", - "allTools": "Tools", - "multiTool": "Multi Tool", - "search": "Search", - "sections": { - "organize": "Organize", - "convertTo": "Convert to PDF", - "convertFrom": "Convert from PDF", - "security": "Sign & Security", - "advance": "Advanced", - "edit": "View & Edit", - "popular": "Popular" - } - }, - "settings": { - "title": "Settings", - "update": "Update available", - "updateAvailable": "{0} is the current installed version. A new version ({1}) is available.", - "appVersion": "App Version:", - "downloadOption": { - "title": "Choose download option (For single file non zip downloads):", - "1": "Open in same window", - "2": "Open in new window", - "3": "Download file" - }, - "zipThreshold": "Zip files when the number of downloaded files exceeds", - "signOut": "Sign Out", - "accountSettings": "Account Settings", - "bored": { - "help": "Enables easter egg game" - }, - "cacheInputs": { - "name": "Save form inputs", - "help": "Enable to store previously used inputs for future runs" - } - }, - "changeCreds": { - "title": "Change Credentials", - "header": "Update Your Account Details", - "changePassword": "You are using default login credentials. Please enter a new password", - "newUsername": "New Username", - "oldPassword": "Current Password", - "newPassword": "New Password", - "confirmNewPassword": "Confirm New Password", - "submit": "Submit Changes" - }, - "account": { - "title": "Account Settings", - "accountSettings": "Account Settings", - "adminSettings": "Admin Settings - View and Add Users", - "userControlSettings": "User Control Settings", - "changeUsername": "Change Username", - "newUsername": "New Username", - "password": "Confirmation Password", - "oldPassword": "Old password", - "newPassword": "New Password", - "changePassword": "Change Password", - "confirmNewPassword": "Confirm New Password", - "signOut": "Sign Out", - "yourApiKey": "Your API Key", - "syncTitle": "Sync browser settings with Account", - "settingsCompare": "Settings Comparison:", - "property": "Property", - "webBrowserSettings": "Web Browser Setting", - "syncToBrowser": "Sync Account -> Browser", - "syncToAccount": "Sync Account <- Browser" - }, - "adminUserSettings": { - "title": "User Control Settings", - "header": "Admin User Control Settings", - "admin": "Admin", - "user": "User", - "addUser": "Add New User", - "deleteUser": "Delete User", - "confirmDeleteUser": "Should the user be deleted?", - "confirmChangeUserStatus": "Should the user be disabled/enabled?", - "usernameInfo": "Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.", - "roles": "Roles", - "role": "Role", - "actions": "Actions", - "apiUser": "Limited API User", - "extraApiUser": "Additional Limited API User", - "webOnlyUser": "Web Only User", - "demoUser": "Demo User (No custom settings)", - "internalApiUser": "Internal API User", - "forceChange": "Force user to change password on login", - "submit": "Save User", - "changeUserRole": "Change User's Role", - "authenticated": "Authenticated", - "editOwnProfil": "Edit own profile", - "enabledUser": "enabled user", - "disabledUser": "disabled user", - "activeUsers": "Active Users:", - "disabledUsers": "Disabled Users:", - "totalUsers": "Total Users:", - "lastRequest": "Last Request", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Database Import/Export", - "header": "Database Import/Export", - "fileName": "File Name", - "creationDate": "Creation Date", - "fileSize": "File Size", - "deleteBackupFile": "Delete Backup File", - "importBackupFile": "Import Backup File", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Download Backup File", - "info_1": "When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.", - "info_2": "The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.", - "submit": "Import Backup", - "importIntoDatabaseSuccessed": "Import into database successed", - "backupCreated": "Database backup successful", - "fileNotFound": "File not Found", - "fileNullOrEmpty": "File must not be null or empty", - "failedImportFile": "Failed Import File", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "Your session has expired. Please refresh the page and try again.", - "refreshPage": "Refresh Page" - }, - "home": { - "desc": "Your locally hosted one-stop-shop for all your PDF needs.", - "searchBar": "Search for features...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "View, annotate, draw, add text or images" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "PDF Multi Tool", - "desc": "Merge, Rotate, Rearrange, Split, and Remove pages" - }, - "merge": { - "title": "Merge", - "desc": "Easily merge multiple PDFs into one." - }, - "split": { - "title": "Split", - "desc": "Split PDFs into multiple documents" - }, - "rotate": { - "title": "Rotate", - "desc": "Easily rotate your PDFs." - }, - "imageToPdf": { - "title": "Image to PDF", - "desc": "Convert a image (PNG, JPEG, GIF) to PDF." - }, - "pdfToImage": { - "title": "PDF to Image", - "desc": "Convert a PDF to a image. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Organize", - "desc": "Remove/Rearrange pages in any order" - }, - "addImage": { - "title": "Add image", - "desc": "Adds a image onto a set location on the PDF" - }, - "watermark": { - "title": "Add Watermark", - "desc": "Add a custom watermark to your PDF document." - }, - "permissions": { - "title": "Change Permissions", - "desc": "Change the permissions of your PDF document" - }, - "removePages": { - "title": "Remove", - "desc": "Delete unwanted pages from your PDF document." - }, - "addPassword": { - "title": "Add Password", - "desc": "Encrypt your PDF document with a password." - }, - "removePassword": { - "title": "Remove Password", - "desc": "Remove password protection from your PDF document." - }, - "compressPdfs": { - "title": "Compress", - "desc": "Compress PDFs to reduce their file size." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Change Metadata", - "desc": "Change/Remove/Add metadata from a PDF document" - }, - "fileToPDF": { - "title": "Convert file to PDF", - "desc": "Convert nearly any file to PDF (DOCX, PNG, XLS, PPT, TXT and more)" - }, - "ocr": { - "title": "OCR / Cleanup scans", - "desc": "Cleanup scans and detects text from images within a PDF and re-adds it as text." - }, - "extractImages": { - "title": "Extract Images", - "desc": "Extracts all images from a PDF and saves them to zip" - }, - "pdfToPDFA": { - "title": "PDF to PDF/A", - "desc": "Convert PDF to PDF/A for long-term storage" - }, - "PDFToWord": { - "title": "PDF to Word", - "desc": "Convert PDF to Word formats (DOC, DOCX and ODT)" - }, - "PDFToPresentation": { - "title": "PDF to Presentation", - "desc": "Convert PDF to Presentation formats (PPT, PPTX and ODP)" - }, - "PDFToText": { - "title": "PDF to RTF (Text)", - "desc": "Convert PDF to Text or RTF format" - }, - "PDFToHTML": { - "title": "PDF to HTML", - "desc": "Convert PDF to HTML format" - }, - "PDFToXML": { - "title": "PDF to XML", - "desc": "Convert PDF to XML format" - }, - "ScannerImageSplit": { - "title": "Detect/Split Scanned photos", - "desc": "Splits multiple photos from within a photo/PDF" - }, - "sign": { - "title": "Sign", - "desc": "Adds signature to PDF by drawing, text or image" - }, - "flatten": { - "title": "Flatten", - "desc": "Remove all interactive elements and forms from a PDF" - }, - "repair": { - "title": "Repair", - "desc": "Tries to repair a corrupt/broken PDF" - }, - "removeBlanks": { - "title": "Remove Blank pages", - "desc": "Detects and removes blank pages from a document" - }, - "removeAnnotations": { - "title": "Remove Annotations", - "desc": "Removes all comments/annotations from a PDF" - }, - "compare": { - "title": "Compare", - "desc": "Compares and shows the differences between 2 PDF Documents" - }, - "certSign": { - "title": "Sign with Certificate", - "desc": "Signs a PDF with a Certificate/Key (PEM/P12)" - }, - "removeCertSign": { - "title": "Remove Certificate Sign", - "desc": "Remove certificate signature from PDF" - }, - "pageLayout": { - "title": "Multi-Page Layout", - "desc": "Merge multiple pages of a PDF document into a single page" - }, - "scalePages": { - "title": "Adjust page size/scale", - "desc": "Change the size/scale of a page and/or its contents." - }, - "pipeline": { - "title": "Pipeline", - "desc": "Run multiple actions on PDFs by defining pipeline scripts" - }, - "add-page-numbers": { - "title": "Add Page Numbers", - "desc": "Add Page numbers throughout a document in a set location" - }, - "auto-rename": { - "title": "Auto Rename PDF File", - "desc": "Auto renames a PDF file based on its detected header" - }, - "adjust-contrast": { - "title": "Adjust Colors/Contrast", - "desc": "Adjust Contrast, Saturation and Brightness of a PDF" - }, - "crop": { - "title": "Crop PDF", - "desc": "Crop a PDF to reduce its size (maintains text!)" - }, - "autoSplitPDF": { - "title": "Auto Split Pages", - "desc": "Auto Split Scanned PDF with physical scanned page splitter QR Code" - }, - "sanitizePdf": { - "title": "Sanitize", - "desc": "Remove scripts and other elements from PDF files" - }, - "URLToPDF": { - "title": "URL/Website To PDF", - "desc": "Converts any http(s)URL to PDF" - }, - "HTMLToPDF": { - "title": "HTML to PDF", - "desc": "Converts any HTML file or zip to PDF" - }, - "MarkdownToPDF": { - "title": "Markdown to PDF", - "desc": "Converts any Markdown file to PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Get ALL Info on PDF", - "desc": "Grabs any and all information possible on PDFs" - }, - "extractPage": { - "title": "Extract page(s)", - "desc": "Extracts select pages from PDF" - }, - "PdfToSinglePage": { - "title": "Single Large Page", - "desc": "Merges all PDF pages into one large single page" - }, - "showJS": { - "title": "Show Javascript", - "desc": "Searches and displays any JS injected into a PDF" - }, - "autoRedact": { - "title": "Auto Redact", - "desc": "Auto Redacts(Blacks out) text in a PDF based on input text" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF to CSV", - "desc": "Extracts Tables from a PDF converting it to CSV" - }, - "autoSizeSplitPDF": { - "title": "Auto Split by Size/Count", - "desc": "Split a single PDF into multiple documents based on size, page count, or document count" - }, - "overlay-pdfs": { - "title": "Overlay PDFs", - "desc": "Overlays PDFs on-top of another PDF" - }, - "split-by-sections": { - "title": "Split PDF by Sections", - "desc": "Divide each page of a PDF into smaller horizontal and vertical sections" - }, - "AddStampRequest": { - "title": "Add Stamp to PDF", - "desc": "Add text or add image stamps at set locations" - }, - "removeImagePdf": { - "title": "Remove image", - "desc": "Remove image from PDF to reduce file size" - }, - "splitPdfByChapters": { - "title": "Split PDF by Chapters", - "desc": "Split a PDF into multiple files based on its chapter structure." - }, - "validateSignature": { - "title": "Validate PDF Signature", - "desc": "Verify digital signatures and certificates in PDF documents" - }, - "replaceColorPdf": { - "title": "Replace and Invert Color", - "desc": "Replace color for text and background in PDF and invert full color of pdf to reduce file size" - } - }, - "viewPdf": { - "tags": "view,read,annotate,text,image,highlight,edit", - "title": "View/Edit PDF", - "header": "View PDF" - }, - "multiTool": { - "tags": "Multi Tool,Multi operation,UI,click drag,front end,client side,interactive,intractable,move,delete,migrate,divide", - "title": "PDF Multi Tool", - "header": "PDF Multi Tool", - "uploadPrompts": "File Name", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "selectPages": "Page Select", - "selectedPages": "Selected Pages", - "page": "Page", - "deleteSelected": "Delete Selected", - "downloadAll": "Export", - "downloadSelected": "Export Selected", - "insertPageBreak": "Insert Page Break", - "addFile": "Add File", - "rotateLeft": "Rotate Left", - "rotateRight": "Rotate Right", - "split": "Split", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "Delete", - "dragDropMessage": "Page(s) Selected", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "merge,Page operations,Back end,server side", - "title": "Merge", - "header": "Merge multiple PDFs (2+)", - "sortByName": "Sort by name", - "sortByDate": "Sort by date", - "removeCertSign": "Remove digital signature in the merged file?", - "submit": "Merge" - }, - "split": { - "tags": "Page operations,divide,Multi Page,cut,server side", - "title": "Split PDF", - "header": "Split PDF", - "desc": { - "1": "The numbers you select are the page number you wish to do a split on", - "2": "As such selecting 1,3,7-9 would split a 10 page document into 6 separate PDFS with:", - "3": "Document #1: Page 1", - "4": "Document #2: Page 2 and 3", - "5": "Document #3: Page 4, 5, 6, 7", - "6": "Document #4: Page 8", - "7": "Document #5: Page 9", - "8": "Document #6: Page 10" - }, - "splitPages": "Enter pages to split on:", - "submit": "Split" - }, - "rotate": { - "tags": "server side", - "title": "Rotate PDF", - "header": "Rotate PDF", - "selectAngle": "Select rotation angle (in multiples of 90 degrees):", - "submit": "Rotate" - }, - "imageToPdf": { - "tags": "conversion,img,jpg,picture,photo" - }, - "pdfToImage": { - "tags": "conversion,img,jpg,picture,photo", - "title": "PDF to Image", - "header": "PDF to Image", - "selectText": "Image Format", - "singleOrMultiple": "Image result type", - "single": "Single Big Image", - "multi": "Multiple Images", - "colorType": "Color type", - "color": "Color", - "grey": "Grayscale", - "blackwhite": "Black and White (May lose data!)", - "submit": "Convert", - "info": "Python is not installed. Required for WebP conversion.", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,even,odd,sort,move", - "title": "Page Organizer", - "header": "PDF Page Organizer", - "submit": "Rearrange Pages", - "mode": { - "_value": "Mode", - "1": "Custom Page Order", - "2": "Reverse Order", - "3": "Duplex Sort", - "4": "Booklet Sort", - "5": "Side Stitch Booklet Sort", - "6": "Odd-Even Split", - "7": "Remove First", - "8": "Remove Last", - "9": "Remove First and Last", - "10": "Odd-Even Merge", - "11": "Duplicate all pages" - }, - "placeholder": "(e.g. 1,3,2 or 4-8,2,10-12 or 2n-1)" - }, - "addImage": { - "tags": "img,jpg,picture,photo", - "title": "Add Image", - "header": "Add image to PDF", - "everyPage": "Every Page?", - "upload": "Add image", - "submit": "Add image" - }, - "watermark": { - "tags": "Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo", - "title": "Add Watermark", - "header": "Add Watermark", - "customColor": "Custom Text Color", - "selectText": { - "1": "Select PDF to add watermark to:", - "2": "Watermark Text:", - "3": "Font Size:", - "4": "Rotation (0-360):", - "5": "Width Spacer (Space between each watermark horizontally):", - "6": "Height Spacer (Space between each watermark vertically):", - "7": "Opacity (0% - 100%):", - "8": "Watermark Type:", - "9": "Watermark Image:", - "10": "Convert PDF to PDF-Image" - }, - "submit": "Add Watermark", - "type": { - "1": "Text", - "2": "Image" - } - }, - "permissions": { - "tags": "read,write,edit,print", - "title": "Change Permissions", - "header": "Change Permissions", - "warning": "Warning to have these permissions be unchangeable it is recommended to set them with a password via the add-password page", - "selectText": { - "1": "Select PDF to change permissions", - "2": "Permissions to set", - "3": "Prevent assembly of document", - "4": "Prevent content extraction", - "5": "Prevent extraction for accessibility", - "6": "Prevent filling in form", - "7": "Prevent modification", - "8": "Prevent annotation modification", - "9": "Prevent printing", - "10": "Prevent printing different formats" - }, - "submit": "Change" - }, - "removePages": { - "tags": "Remove pages,delete pages" - }, - "addPassword": { - "tags": "secure,security", - "title": "Add Password", - "header": "Add password (Encrypt)", - "selectText": { - "1": "Select PDF to encrypt", - "2": "User Password", - "3": "Encryption Key Length", - "4": "Higher values are stronger, but lower values have better compatibility.", - "5": "Permissions to set (Recommended to be used along with Owner password)", - "6": "Prevent assembly of document", - "7": "Prevent content extraction", - "8": "Prevent extraction for accessibility", - "9": "Prevent filling in form", - "10": "Prevent modification", - "11": "Prevent annotation modification", - "12": "Prevent printing", - "13": "Prevent printing different formats", - "14": "Owner Password", - "15": "Restricts what can be done with the document once it is opened (Not supported by all readers)", - "16": "Restricts the opening of the document itself" - }, - "submit": "Encrypt" - }, - "removePassword": { - "tags": "secure,Decrypt,security,unpassword,delete password", - "title": "Remove password", - "header": "Remove password (Decrypt)", - "selectText": { - "1": "Select PDF to Decrypt", - "2": "Password" - }, - "submit": "Remove" - }, - "compressPdfs": { - "tags": "squish,small,tiny" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Title,author,date,creation,time,publisher,producer,stats", - "title": "Title:", - "header": "Change Metadata", - "selectText": { - "1": "Please edit the variables you wish to change", - "2": "Delete all metadata", - "3": "Show Custom Metadata:", - "4": "Other Metadata:", - "5": "Add Custom Metadata Entry" - }, - "author": "Author:", - "creationDate": "Creation Date (yyyy/MM/dd HH:mm:ss):", - "creator": "Creator:", - "keywords": "Keywords:", - "modDate": "Modification Date (yyyy/MM/dd HH:mm:ss):", - "producer": "Producer:", - "subject": "Subject:", - "trapped": "Trapped:", - "submit": "Change" - }, - "fileToPDF": { - "tags": "transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint", - "title": "File to PDF", - "header": "Convert any file to PDF", - "credit": "This service uses LibreOffice and Unoconv for file conversion.", - "supportedFileTypesInfo": "Supported File types", - "supportedFileTypes": "Supported file types should include the below however for a full updated list of supported formats, please refer to the LibreOffice documentation", - "submit": "Convert to PDF" - }, - "ocr": { - "tags": "recognition,text,image,scan,read,identify,detection,editable", - "title": "OCR / Scan Cleanup", - "header": "Cleanup Scans / OCR (Optical Character Recognition)", - "selectText": { - "1": "Select languages that are to be detected within the PDF (Ones listed are the ones currently detected):", - "2": "Produce text file containing OCR text alongside the OCR'ed PDF", - "3": "Correct pages were scanned at a skewed angle by rotating them back into place", - "4": "Clean page so its less likely that OCR will find text in background noise. (No output change)", - "5": "Clean page so its less likely that OCR will find text in background noise, maintains cleanup in output.", - "6": "Ignores pages that have interactive text on them, only OCRs pages that are images", - "7": "Force OCR, will OCR Every page removing all original text elements", - "8": "Normal (Will error if PDF contains text)", - "9": "Additional Settings", - "10": "OCR Mode", - "11": "Remove images after OCR (Removes ALL images, only useful if part of conversion step)", - "12": "Render Type (Advanced)" - }, - "help": "Please read this documentation on how to use this for other languages and/or use not in docker", - "credit": "This service uses qpdf and Tesseract for OCR.", - "submit": "Process PDF with OCR" - }, - "extractImages": { - "tags": "picture,photo,save,archive,zip,capture,grab", - "title": "Extract Images", - "header": "Extract Images", - "selectText": "Select image format to convert extracted images to", - "allowDuplicates": "Save duplicate images", - "submit": "Extract" - }, - "pdfToPDFA": { - "tags": "archive,long-term,standard,conversion,storage,preservation", - "title": "PDF To PDF/A", - "header": "PDF To PDF/A", - "credit": "This service uses libreoffice for PDF/A conversion", - "submit": "Convert", - "tip": "Currently does not work for multiple inputs at once", - "outputFormat": "Output format", - "pdfWithDigitalSignature": "The PDF contains a digital signature. This will be removed in the next step." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile", - "title": "PDF to Word", - "header": "PDF to Word", - "selectText": { - "1": "Output file format" - }, - "credit": "This service uses LibreOffice for file conversion.", - "submit": "Convert" - }, - "PDFToPresentation": { - "tags": "slides,show,office,microsoft", - "title": "PDF to Presentation", - "header": "PDF to Presentation", - "selectText": { - "1": "Output file format" - }, - "credit": "This service uses LibreOffice for file conversion.", - "submit": "Convert" - }, - "PDFToText": { - "tags": "richformat,richtextformat,rich text format", - "title": "PDF to RTF (Text)", - "header": "PDF to RTF (Text)", - "selectText": { - "1": "Output file format" - }, - "credit": "This service uses LibreOffice for file conversion.", - "submit": "Convert" - }, - "PDFToHTML": { - "tags": "web content,browser friendly", - "title": "PDF to HTML", - "header": "PDF to HTML", - "credit": "This service uses pdftohtml for file conversion.", - "submit": "Convert" - }, - "PDFToXML": { - "tags": "data-extraction,structured-content,interop,transformation,convert", - "title": "PDF to XML", - "header": "PDF to XML", - "credit": "This service uses LibreOffice for file conversion.", - "submit": "Convert" - }, - "ScannerImageSplit": { - "tags": "separate,auto-detect,scans,multi-photo,organize", - "selectText": { - "1": "Angle Threshold:", - "2": "Sets the minimum absolute angle required for the image to be rotated (default: 10).", - "3": "Tolerance:", - "4": "Determines the range of color variation around the estimated background color (default: 30).", - "5": "Minimum Area:", - "6": "Sets the minimum area threshold for a photo (default: 10000).", - "7": "Minimum Contour Area:", - "8": "Sets the minimum contour area threshold for a photo", - "9": "Border Size:", - "10": "Sets the size of the border added and removed to prevent white borders in the output (default: 1)." - }, - "info": "Python is not installed. It is required to run." - }, - "sign": { - "tags": "authorize,initials,drawn-signature,text-sign,image-signature", - "title": "Sign", - "header": "Sign PDFs", - "upload": "Upload Image", - "draw": "Draw Signature", - "text": "Text Input", - "clear": "Clear", - "add": "Add", - "saved": "Saved Signatures", - "save": "Save Signature", - "personalSigs": "Personal Signatures", - "sharedSigs": "Shared Signatures", - "noSavedSigs": "No saved signatures found", - "addToAll": "Add to all pages", - "delete": "Delete", - "first": "First page", - "last": "Last page", - "next": "Next page", - "previous": "Previous page", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "static,deactivate,non-interactive,streamline", - "title": "Flatten", - "header": "Flatten PDFs", - "flattenOnlyForms": "Flatten only forms", - "submit": "Flatten" - }, - "repair": { - "tags": "fix,restore,correction,recover", - "title": "Repair", - "header": "Repair PDFs", - "submit": "Repair" - }, - "removeBlanks": { - "tags": "cleanup,streamline,non-content,organize", - "title": "Remove Blanks", - "header": "Remove Blank Pages", - "threshold": "Pixel Whiteness Threshold:", - "thresholdDesc": "Threshold for determining how white a white pixel must be to be classed as 'White'. 0 = Black, 255 pure white.", - "whitePercent": "White Percent (%):", - "whitePercentDesc": "Percent of page that must be 'white' pixels to be removed", - "submit": "Remove Blanks" - }, - "removeAnnotations": { - "tags": "comments,highlight,notes,markup,remove", - "title": "Remove Annotations", - "header": "Remove Annotations", - "submit": "Remove" - }, - "compare": { - "tags": "differentiate,contrast,changes,analysis", - "title": "Compare", - "header": "Compare PDFs", - "highlightColor": { - "1": "Highlight Color 1:", - "2": "Highlight Color 2:" - }, - "document": { - "1": "Document 1", - "2": "Document 2" - }, - "submit": "Compare", - "complex": { - "message": "One or both of the provided documents are large files, accuracy of comparison may be reduced" - }, - "large": { - "file": { - "message": "One or Both of the provided documents are too large to process" - } - }, - "no": { - "text": { - "message": "One or both of the selected PDFs have no text content. Please choose PDFs with text for comparison." - } - } - }, - "certSign": { - "tags": "authenticate,PEM,P12,official,encrypt", - "title": "Certificate Signing", - "header": "Sign a PDF with your certificate (Work in progress)", - "selectPDF": "Select a PDF File for Signing:", - "jksNote": "Note: If your certificate type is not listed below, please convert it to a Java Keystore (.jks) file using the keytool command line tool. Then, choose the .jks file option below.", - "selectKey": "Select Your Private Key File (PKCS#8 format, could be .pem or .der):", - "selectCert": "Select Your Certificate File (X.509 format, could be .pem or .der):", - "selectP12": "Select Your PKCS#12 Keystore File (.p12 or .pfx) (Optional, If provided, it should contain your private key and certificate):", - "selectJKS": "Select Your Java Keystore File (.jks or .keystore):", - "certType": "Certificate Type", - "password": "Enter Your Keystore or Private Key Password (If Any):", - "showSig": "Show Signature", - "reason": "Reason", - "location": "Location", - "name": "Name", - "showLogo": "Show Logo", - "submit": "Sign PDF" - }, - "removeCertSign": { - "tags": "authenticate,PEM,P12,official,decrypt", - "title": "Remove Certificate Signature", - "header": "Remove the digital certificate from the PDF", - "selectPDF": "Select a PDF file:", - "submit": "Remove Signature" - }, - "pageLayout": { - "tags": "merge,composite,single-view,organize", - "title": "Multi Page Layout", - "header": "Multi Page Layout", - "pagesPerSheet": "Pages per sheet:", - "addBorder": "Add Borders", - "submit": "Submit" - }, - "scalePages": { - "tags": "resize,modify,dimension,adapt", - "title": "Adjust page-scale", - "header": "Adjust page-scale", - "pageSize": "Size of a page of the document.", - "keepPageSize": "Original Size", - "scaleFactor": "Zoom level (crop) of a page.", - "submit": "Submit" - }, - "add-page-numbers": { - "tags": "paginate,label,organize,index" - }, - "auto-rename": { - "tags": "auto-detect,header-based,organize,relabel", - "title": "Auto Rename", - "header": "Auto Rename PDF", - "submit": "Auto Rename" - }, - "adjust-contrast": { - "tags": "color-correction,tune,modify,enhance" - }, - "crop": { - "tags": "trim,shrink,edit,shape", - "title": "Crop", - "header": "Crop PDF", - "submit": "Submit" - }, - "autoSplitPDF": { - "tags": "QR-based,separate,scan-segment,organize", - "title": "Auto Split PDF", - "header": "Auto Split PDF", - "description": "Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.", - "selectText": { - "1": "Print out some divider sheets from below (Black and white is fine).", - "2": "Scan all your documents at once by inserting the divider sheet between them.", - "3": "Upload the single large scanned PDF file and let Stirling PDF handle the rest.", - "4": "Divider pages are automatically detected and removed, guaranteeing a neat final document." - }, - "formPrompt": "Submit PDF containing Stirling-PDF Page dividers:", - "duplexMode": "Duplex Mode (Front and back scanning)", - "dividerDownload2": "Download 'Auto Splitter Divider (with instructions).pdf'", - "submit": "Submit" - }, - "sanitizePdf": { - "tags": "clean,secure,safe,remove-threats" - }, - "URLToPDF": { - "tags": "web-capture,save-page,web-to-doc,archive", - "title": "URL To PDF", - "header": "URL To PDF", - "submit": "Convert", - "credit": "Uses WeasyPrint" - }, - "HTMLToPDF": { - "tags": "markup,web-content,transformation,convert", - "title": "HTML To PDF", - "header": "HTML To PDF", - "help": "Accepts HTML files and ZIPs containing html/css/images etc required", - "submit": "Convert", - "credit": "Uses WeasyPrint", - "zoom": "Zoom level for displaying the website.", - "pageWidth": "Width of the page in centimeters. (Blank to default)", - "pageHeight": "Height of the page in centimeters. (Blank to default)", - "marginTop": "Top margin of the page in millimeters. (Blank to default)", - "marginBottom": "Bottom margin of the page in millimeters. (Blank to default)", - "marginLeft": "Left margin of the page in millimeters. (Blank to default)", - "marginRight": "Right margin of the page in millimeters. (Blank to default)", - "printBackground": "Render the background of websites.", - "defaultHeader": "Enable Default Header (Name and page number)", - "cssMediaType": "Change the CSS media type of the page.", - "none": "None", - "print": "Print", - "screen": "Screen" - }, - "MarkdownToPDF": { - "tags": "markup,web-content,transformation,convert,md", - "title": "Markdown To PDF", - "header": "Markdown To PDF", - "submit": "Convert", - "help": "Work in progress", - "credit": "Uses WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "infomation,data,stats,statistics", - "title": "Get Info on PDF", - "header": "Get Info on PDF", - "submit": "Get Info", - "downloadJson": "Download JSON" - }, - "extractPage": { - "tags": "extract" - }, - "PdfToSinglePage": { - "tags": "single page" - }, - "showJS": { - "tags": "JS", - "title": "Show Javascript", - "header": "Show Javascript", - "downloadJS": "Download Javascript", - "submit": "Show" - }, - "autoRedact": { - "tags": "Redact,Hide,black out,black,marker,hidden", - "title": "Auto Redact", - "header": "Auto Redact", - "colorLabel": "Color", - "textsToRedactLabel": "Text to Redact (line-separated)", - "textsToRedactPlaceholder": "e.g. \\nConfidential \\nTop-Secret", - "useRegexLabel": "Use Regex", - "wholeWordSearchLabel": "Whole Word Search", - "customPaddingLabel": "Custom Extra Padding", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "submitButton": "Submit" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,Table Extraction,extract,convert" - }, - "autoSizeSplitPDF": { - "tags": "pdf,split,document,organization" - }, - "overlay-pdfs": { - "tags": "Overlay", - "header": "Overlay PDF Files", - "baseFile": { - "label": "Select Base PDF File" - }, - "overlayFiles": { - "label": "Select Overlay PDF Files" - }, - "mode": { - "label": "Select Overlay Mode", - "sequential": "Sequential Overlay", - "interleaved": "Interleaved Overlay", - "fixedRepeat": "Fixed Repeat Overlay" - }, - "counts": { - "label": "Overlay Counts (for Fixed Repeat Mode)", - "placeholder": "Enter comma-separated counts (e.g., 2,3,1)" - }, - "position": { - "label": "Select Overlay Position", - "foreground": "Foreground", - "background": "Background" - }, - "submit": "Submit" - }, - "split-by-sections": { - "tags": "Section Split, Divide, Customize", - "title": "Split PDF by Sections", - "header": "Split PDF into Sections", - "horizontal": { - "label": "Horizontal Divisions", - "placeholder": "Enter number of horizontal divisions" - }, - "vertical": { - "label": "Vertical Divisions", - "placeholder": "Enter number of vertical divisions" - }, - "submit": "Split PDF", - "merge": "Merge Into One PDF" - }, - "AddStampRequest": { - "tags": "Stamp, Add image, center image, Watermark, PDF, Embed, Customize", - "header": "Stamp PDF", - "title": "Stamp PDF", - "stampType": "Stamp Type", - "stampText": "Stamp Text", - "stampImage": "Stamp Image", - "alphabet": "Alphabet", - "fontSize": "Font/Image Size", - "rotation": "Rotation", - "opacity": "Opacity", - "position": "Position", - "overrideX": "Override X Coordinate", - "overrideY": "Override Y Coordinate", - "customMargin": "Custom Margin", - "customColor": "Custom Text Color", - "submit": "Submit" - }, - "removeImagePdf": { - "tags": "Remove Image,Page operations,Back end,server side" - }, - "splitPdfByChapters": { - "tags": "split,chapters,bookmarks,organize" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "Validate PDF Signatures", - "header": "Validate Digital Signatures", - "selectPDF": "Select signed PDF file", - "submit": "Validate Signatures", - "results": "Validation Results", - "status": { - "_value": "Status", - "valid": "Valid", - "invalid": "Invalid" - }, - "signer": "Signer", - "date": "Date", - "reason": "Reason", - "location": "Location", - "noSignatures": "No digital signatures found in this document", - "chain": { - "invalid": "Certificate chain validation failed - cannot verify signer's identity" - }, - "trust": { - "invalid": "Certificate not in trust store - source cannot be verified" - }, - "cert": { - "expired": "Certificate has expired", - "revoked": "Certificate has been revoked", - "info": "Certificate Details", - "issuer": "Issuer", - "subject": "Subject", - "serialNumber": "Serial Number", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "algorithm": "Algorithm", - "keySize": "Key Size", - "version": "Version", - "keyUsage": "Key Usage", - "selfSigned": "Self-Signed", - "bits": "bits" - }, - "signature": { - "info": "Signature Information", - "_value": "Signature", - "mathValid": "Signature is mathematically valid BUT:" - }, - "selectCustomCert": "Custom Certificate File X.509 (Optional)" - }, - "replace-color": { - "title": "Replace-Invert-Color", - "header": "Replace-Invert Color PDF", - "selectText": { - "1": "Replace or Invert color Options", - "2": "Default(Default high contrast colors)", - "3": "Custom(Customized colors)", - "4": "Full-Invert(Invert all colors)", - "5": "High contrast color options", - "6": "white text on black background", - "7": "Black text on white background", - "8": "Yellow text on black background", - "9": "Green text on black background", - "10": "Choose text Color", - "11": "Choose background Color" - }, - "submit": "Replace" - }, - "replaceColorPdf": { - "tags": "Replace Color,Page operations,Back end,server side" - }, - "login": { - "title": "Sign in", - "header": "Sign in", - "signin": "Sign in", - "rememberme": "Remember me", - "invalid": "Invalid username or password.", - "locked": "Your account has been locked.", - "signinTitle": "Please sign in", - "ssoSignIn": "Login via Single Sign-on", - "oAuth2AutoCreateDisabled": "OAUTH2 Auto-Create User Disabled", - "oAuth2AdminBlockedUser": "Registration or logging in of non-registered users is currently blocked. Please contact the administrator.", - "oauth2RequestNotFound": "Authorization request not found", - "oauth2InvalidUserInfoResponse": "Invalid User Info Response", - "oauth2invalidRequest": "Invalid Request", - "oauth2AccessDenied": "Access Denied", - "oauth2InvalidTokenResponse": "Invalid Token Response", - "oauth2InvalidIdToken": "Invalid Id Token", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "User is deactivated, login is currently blocked with this username. Please contact the administrator.", - "alreadyLoggedIn": "You are already logged in to", - "alreadyLoggedIn2": "devices. Please log out of the devices and try again.", - "toManySessions": "You have too many active sessions", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF To Single Page", - "header": "PDF To Single Page", - "submit": "Convert To Single Page" - }, - "pageExtracter": { - "title": "Extract Pages", - "header": "Extract Pages", - "submit": "Extract", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "sanitizePDF": { - "title": "Sanitize PDF", - "header": "Sanitize a PDF file", - "selectText": { - "1": "Remove JavaScript actions", - "2": "Remove embedded files", - "3": "Remove XMP metadata", - "4": "Remove links", - "5": "Remove fonts", - "6": "Remove Document Info Metadata" - }, - "submit": "Sanitize PDF" - }, - "adjustContrast": { - "title": "Adjust Contrast", - "header": "Adjust Contrast", - "contrast": "Contrast:", - "brightness": "Brightness:", - "saturation": "Saturation:", - "download": "Download" - }, - "compress": { - "title": "Compress", - "header": "Compress PDF", - "credit": "This service uses qpdf for PDF Compress/Optimisation.", - "grayscale": { - "label": "Apply Grayscale for Compression" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Optimization level:", - "4": "Auto mode - Auto adjusts quality to get PDF to exact size", - "5": "Expected PDF Size (e.g. 25MB, 10.8MB, 25KB)" - }, - "submit": "Compress" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "This feature is also available in our multi-tool page. Check it out for enhanced page-by-page UI and additional features!" - }, - "pageRemover": { - "title": "Page Remover", - "header": "PDF Page remover", - "pagesToDelete": "Pages to delete (Enter a comma-separated list of page numbers) :", - "submit": "Delete Pages", - "placeholder": "(e.g. 1,2,6 or 1-10,15-30)" - }, - "imageToPDF": { - "title": "Image to PDF", - "header": "Image to PDF", - "submit": "Convert", - "selectLabel": "Image Fit Options", - "fillPage": "Fill Page", - "fitDocumentToImage": "Fit Page to Image", - "maintainAspectRatio": "Maintain Aspect Ratios", - "selectText": { - "2": "Auto rotate PDF", - "3": "Multi file logic (Only enabled if working with multiple images)", - "4": "Merge into single PDF", - "5": "Convert to separate PDFs" - } - }, - "PDFToCSV": { - "title": "PDF to CSV", - "header": "PDF to CSV", - "prompt": "Choose page to extract table", - "submit": "Extract" - }, - "split-by-size-or-count": { - "title": "Split PDF by Size or Count", - "header": "Split PDF by Size or Count", - "type": { - "label": "Select Split Type", - "size": "By Size", - "pageCount": "By Page Count", - "docCount": "By Document Count" - }, - "value": { - "label": "Enter Value", - "placeholder": "Enter size (e.g., 2MB or 3KB) or count (e.g., 5)" - }, - "submit": "Submit" - }, - "printFile": { - "title": "Print File", - "header": "Print File to Printer", - "selectText": { - "1": "Select File to Print", - "2": "Enter Printer Name" - }, - "submit": "Print" - }, - "licenses": { - "nav": "Licenses", - "title": "3rd Party Licenses", - "header": "3rd Party Licenses", - "module": "Module", - "version": "Version", - "license": "License" - }, - "survey": { - "nav": "Survey", - "title": "Stirling-PDF Survey", - "description": "Stirling-PDF has no tracking so we want to hear from our users to improve Stirling-PDF!", - "changes": "Stirling-PDF has changed since the last survey! To find out more please check our blog post here:", - "changes2": "With these changes we are getting paid business support and funding", - "please": "Please consider taking our survey!", - "disabled": "(Survey popup will be disabled in following updates but available at foot of page)", - "button": "Take Survey", - "dontShowAgain": "Don't show again", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Remove image", - "header": "Remove image", - "removeImage": "Remove image", - "submit": "Remove image" - }, - "splitByChapters": { - "title": "Split PDF by Chapters", - "header": "Split PDF by Chapters", - "bookmarkLevel": "Bookmark Level", - "includeMetadata": "Include Metadata", - "allowDuplicates": "Allow Duplicates", - "desc": { - "1": "This tool splits a PDF file into multiple PDFs based on its chapter structure.", - "2": "Bookmark Level: Choose the level of bookmarks to use for splitting (0 for top-level, 1 for second-level, etc.).", - "3": "Include Metadata: If checked, the original PDF's metadata will be included in each split PDF.", - "4": "Allow Duplicates: If checked, allows multiple bookmarks on the same page to create separate PDFs." - }, - "submit": "Split PDF" - }, - "fileChooser": { - "click": "Click", - "or": "or", - "dragAndDrop": "Drag & Drop", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "Drag & Drop file(s) here", - "extractPDF": "Extracting..." - }, - "releases": { - "footer": "Releases", - "title": "Release Notes", - "header": "Release Notes", - "current": { - "version": "Current Release" - }, - "note": "Release notes are only available in English" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/en/translation.json b/frontend/dist/locales/en/translation.json deleted file mode 100644 index 9e26dfeeb..000000000 --- a/frontend/dist/locales/en/translation.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/frontend/dist/locales/es-ES/translation.json b/frontend/dist/locales/es-ES/translation.json deleted file mode 100644 index ba16c683d..000000000 --- a/frontend/dist/locales/es-ES/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Tamaño de Letra", - "fontName": "Nombre de Letra", - "title": "Añadir Números de Página", - "header": "Añadir Números de Página", - "selectText": { - "1": "Seleccionar archivo PDF:", - "2": "Tamaño del margen", - "3": "Posición", - "4": "Número de inicio", - "5": "Páginas a numerar", - "6": "Texto personalizado" - }, - "customTextDesc": "Texto personalizado", - "numberPagesDesc": "Qué páginas numerar, por defecto 'todas', también acepta 1-5 o 2,5,9 etc", - "customNumberDesc": "Por defecto a {n}, también acepta 'Página {n} de {total}', 'Texto-{n}', '{filename}-{n}", - "submit": "Añadir Números de Página" - }, - "pdfPrompt": "Seleccionar PDF(s)", - "multiPdfPrompt": "Seleccionar PDFs (2+)", - "multiPdfDropPrompt": "Seleccione (o arrastre y suelte) todos los PDFs que quiera", - "imgPrompt": "Seleccionar Imagen(es)", - "genericSubmit": "Enviar", - "uploadLimit": "Tamaño máximo de archivo:", - "uploadLimitExceededSingular": "es demasiado grande. El tamaño máximo permitido es", - "uploadLimitExceededPlural": "son demasiado grandes. El tamaño máximo permitido es", - "processTimeWarning": "Advertencia: este proceso puede tardar hasta un minuto dependiendo del tamaño del archivo", - "pageOrderPrompt": "Orden de páginas (Introduzca una lista de números de página separados por coma):", - "pageSelectionPrompt": "Selección de página personalizada (Introduzca una lista de números de página separados por comas 1,5,6 o funciones como 2n+1):", - "goToPage": "Ir a", - "true": "Verdadero", - "false": "Falso", - "unknown": "Desconocido", - "save": "Guardar", - "saveToBrowser": "Guardar en el navegador", - "close": "Cerrar", - "filesSelected": "archivos seleccionados", - "noFavourites": "No se agregaron favoritos", - "downloadComplete": "Descarga finalizada", - "bored": "¿Cansado de esperar?", - "alphabet": "Alfabeto", - "downloadPdf": "Descargar PDF", - "text": "Texto", - "font": "Fuente", - "selectFillter": "-- Seleccionar --", - "pageNum": "Número de página", - "sizes": { - "small": "Pequeño", - "medium": "Mediano", - "large": "Grande", - "x-large": "Extra grande" - }, - "error": { - "pdfPassword": "El documento PDF está protegido con contraseña y no se ha proporcionado o es incorrecta", - "_value": "Error", - "sorry": "¡Perdón por el fallo!", - "needHelp": "¿Necesita ayuda / Encontró un fallo?", - "contactTip": "Si sigue experimentando errores, no dude en contactarnos para solicitar soporte. Puede enviarnos un ticket en la página de GitHub o contactarnos mediante Discord:", - "404": { - "head": "404 - Página no encontrada | Ups, ¡algo salió mal!", - "1": "Parece que no podemos encontrar la página que está buscando.", - "2": "Algo salió mal" - }, - "github": "Envíe un ticket en GitHub", - "showStack": "Mostrar seguimiento de pila", - "copyStack": "Mostrar seguimiento de pila", - "githubSubmit": "GitHub - Enviar un ticket", - "discordSubmit": "Discord - Enviar mensaje de soporte" - }, - "delete": "Borrar", - "username": "Nombre de usuario", - "password": "Contraseña", - "welcome": "Bienvenido", - "property": "Propietario", - "black": "Negro", - "white": "Blanco", - "red": "Rojo", - "green": "Verde", - "blue": "Azul", - "custom": "Personalizado...", - "WorkInProgess": "Tarea en progreso, puede no funcionar o ralentizarse; ¡por favor, informe de cualquier problema!", - "poweredBy": "Desarrollado por", - "yes": "Sí", - "no": "No", - "changedCredsMessage": "¡Se cambiaron las credenciales!", - "notAuthenticatedMessage": "Usuario no autentificado.", - "userNotFoundMessage": "Usuario no encontrado.", - "incorrectPasswordMessage": "La contraseña actual no es correcta.", - "usernameExistsMessage": "El nuevo nombre de usuario está en uso.", - "invalidUsernameMessage": "Nombre de usuario no válido, el nombre de usuario solo puede contener letras, números y los siguientes caracteres especiales @._+- o debe ser una dirección de correo electrónico válida.", - "invalidPasswordMessage": "La contraseña no puede dejarse en blanco y no puede empezar ni terminar con espacios.", - "confirmPasswordErrorMessage": "Deben coincidir Nueva Contraseña y Confirmar Nueva Contraseña.", - "deleteCurrentUserMessage": "No puede eliminar el usuario que tiene la sesión actualmente en uso.", - "deleteUsernameExistsMessage": "El usuario no existe y no puede eliminarse.", - "downgradeCurrentUserMessage": "No se puede degradar el rol del usuario actual", - "disabledCurrentUserMessage": "El usuario actual no se puede deshabilitar", - "downgradeCurrentUserLongMessage": "No se puede degradar el rol del usuario actual. Por lo tanto, el usuario actual no se mostrará.", - "userAlreadyExistsOAuthMessage": "La usuario ya existe como usuario de OAuth2.", - "userAlreadyExistsWebMessage": "El usuario ya existe como usuario web.", - "oops": "¡Ups!", - "help": "Ayuda", - "goHomepage": "Ir a la página principal", - "joinDiscord": "Únase a nuestro servidor Discord", - "seeDockerHub": "Ver Docker Hub", - "visitGithub": "Visitar Repositorio de Github", - "donate": "Donar", - "color": "Color", - "sponsor": "Patrocinador", - "info": "Información", - "pro": "Pro", - "page": "Página", - "pages": "Páginas", - "loading": "Cargando...", - "addToDoc": "Agregar al Documento", - "reset": "Restablecer", - "apply": "Aplicar", - "noFileSelected": "No ha seleccionado ningún archivo. Por favor, cargue uno.", - "legal": { - "privacy": "Política de Privacidad", - "terms": "Términos y Condiciones", - "accessibility": "Accesibilidad", - "cookie": "Política de Cookies", - "impressum": "Impresión", - "showCookieBanner": "Preferencias de cookies" - }, - "pipeline": { - "header": "Menú de automatización (Alfa)", - "uploadButton": "Cargar personalización", - "configureButton": "Configurar", - "defaultOption": "Personalizar", - "submitButton": "Enviar", - "help": "Ayuda de automatización", - "scanHelp": "Ayuda de escaneado de carpetas", - "deletePrompt": "¿Seguro que quiere eliminar la automatización?", - "tags": "automatizar,secuencia,con script,proceso por lotes", - "title": "Automatización" - }, - "pipelineOptions": { - "header": "Configuración de la automatización", - "pipelineNameLabel": "Nombre de la automatización", - "saveSettings": "Guardar configuración de la automatización", - "pipelineNamePrompt": "Introduzca aquí el nombre de la automatización", - "selectOperation": "Seleccione la operación", - "addOperationButton": "Añadir operación", - "pipelineHeader": "Automatización:", - "saveButton": "Descargar", - "validateButton": "Validar" - }, - "enterpriseEdition": { - "button": "Actualiza a Pro", - "warning": "Esta característica está únicamente disponible para usuarios Pro.", - "yamlAdvert": "Stirling PDF Pro soporta configuración de ficheros YAML y otras características SSO.", - "ssoAdvert": "¿Busca más funciones de administración de usuarios? Consulte Stirling PDF Pro" - }, - "analytics": { - "title": "¿Quieres mejorar Stirling PDF?", - "paragraph1": "Stirling PDF ha optado por analíticas para ayudarnos a mejorar el producto. No rastreamos ninguna información personal ni contenido de archivos.", - "paragraph2": "Considere habilitar analíticas para ayudar a Stirling-PDF a crecer y permitirnos comprender mejor a nuestros usuarios.", - "enable": "Habilitar analíticas", - "disable": "Deshabilitar analíticas", - "settings": "Puede cambiar la configuración de analíticas en el archivo config/settings.yml" - }, - "navbar": { - "favorite": "Favoritos", - "recent": "Nuevo y recientemente actualizado", - "darkmode": "Modo oscuro", - "language": "Idiomas", - "settings": "Configuración", - "allTools": "Herramientas", - "multiTool": "Multi-herramientas", - "search": "Buscar", - "sections": { - "organize": "Organizar", - "convertTo": "Convertir a PDF", - "convertFrom": "Convertir desde PDF", - "security": "Señalización y seguridad", - "advance": "Avanzado", - "edit": "Ver y Editar", - "popular": "Populares" - } - }, - "settings": { - "title": "Configuración", - "update": "Actualización disponible", - "updateAvailable": "{0} es la versión instalada. Hay disponible una versión nueva ({1}).", - "appVersion": "Versión de la aplicación:", - "downloadOption": { - "title": "Elegir la opción de descarga (para descargas de un solo archivo sin ZIP):", - "1": "Abrir en la misma ventana", - "2": "Abrir en una nueva ventana", - "3": "Descargar el archivo" - }, - "zipThreshold": "Archivos ZIP cuando excede el número de archivos descargados", - "signOut": "Desconectar", - "accountSettings": "Configuración de la cuenta", - "bored": { - "help": "Habilita el juego del huevo de pascua" - }, - "cacheInputs": { - "name": "Guardar entradas del formulario", - "help": "Habilitar guardar entradas previamente utilizadas para futuras acciones" - } - }, - "changeCreds": { - "title": "Cambiar Credenciales", - "header": "Actualice los detalles de su cuenta", - "changePassword": "Está usando las credenciales de inicio de sesión por defecto. Por favor, introduzca una contraseña nueva", - "newUsername": "Nuevo usuario", - "oldPassword": "Contraseña actual", - "newPassword": "Nueva contraseña", - "confirmNewPassword": "Confirme la nueva contraseña", - "submit": "Enviar cambios" - }, - "account": { - "title": "Configuración de la cuenta", - "accountSettings": "Configuración de la cuenta", - "adminSettings": "Configuración de Administrador - Ver y Añadir Usuarios", - "userControlSettings": "Configuración de control de usuario", - "changeUsername": "Cambiar nombre de usuario", - "newUsername": "nuevo nombre de usuario", - "password": "Confirmar contraseña", - "oldPassword": "Contraseña anterior", - "newPassword": "Nueva Contraseña", - "changePassword": "Cambiar Contraseña", - "confirmNewPassword": "Confirmar Nueva Contraseña", - "signOut": "Cerrar sesión", - "yourApiKey": "Su clave API", - "syncTitle": "Sincronizar la configuración del navegador con la cuenta", - "settingsCompare": "Comparación de configuraciones:", - "property": "Propiedad", - "webBrowserSettings": "Configuración del navegador", - "syncToBrowser": "Sincronizar cuenta -> Navegador", - "syncToAccount": "Sincronizar cuenta <- Navegador" - }, - "adminUserSettings": { - "title": "Configuración de control de usuario", - "header": "Configuración de control de usuario administrador", - "admin": "Administrador", - "user": "Usuario", - "addUser": "Añadir Nuevo Usuario", - "deleteUser": "Eliminar Usuario", - "confirmDeleteUser": "¿Se debe eliminar al usuario?", - "confirmChangeUserStatus": "¿Se debe habilitar/deshabilitar el usuario?", - "usernameInfo": "El nombre de usuario solo puede contener letras, números y los siguientes caracteres especiales @._+- o debe ser una dirección de correo electrónico válida.", - "roles": "Roles", - "role": "Rol", - "actions": "Acciones", - "apiUser": "Usuario limitado de API", - "extraApiUser": "Otro usuario limitado de API", - "webOnlyUser": "Usuario solo web", - "demoUser": "Usuario Demo (Sin ajustes personalizados)", - "internalApiUser": "Usuario interno de API", - "forceChange": "Forzar usuario a cambiar usuario/contraseña en el acceso", - "submit": "Guardar Usuario", - "changeUserRole": "Cambiar rol de usuario", - "authenticated": "Autenticado", - "editOwnProfil": "Editar el perfil actual", - "enabledUser": "usuario habilitado", - "disabledUser": "usuario deshabilitado", - "activeUsers": "Usuarios Activos:", - "disabledUsers": "Usuarios deshabilitados:", - "totalUsers": "Usuarios totales:", - "lastRequest": "Última petición", - "usage": "Ver uso" - }, - "endpointStatistics": { - "title": "Estadísticas de funciones", - "header": "Estadísticas de funciones", - "top10": "Top 10", - "top20": "Top 20", - "all": "Todas", - "refresh": "Refrescar", - "includeHomepage": "Incluir página de inicio ('/')", - "includeLoginPage": "Incluir página de inicio de sesión ('/login')", - "totalEndpoints": "Funciones totales", - "totalVisits": "Visitas totales", - "showing": "Mostrando", - "selectedVisits": "Visitas seleccionadas", - "endpoint": "Funciones", - "visits": "Visitas", - "percentage": "Porcentaje", - "loading": "Cargando...", - "failedToLoad": "Falló la carga de los datos de funciones. Por favor, recargue para volver a intentarlo.", - "home": "Inicio", - "login": "Inicio de sesión", - "top": "Lo más usado", - "numberOfVisits": "Número de visitas", - "visitsTooltip": "Visitas: {0} ({1}% del total)", - "retry": "Reintentar" - }, - "database": { - "title": "Base de Datos Importar/Exportar", - "header": "Base de Datos Importar/Exportar", - "fileName": "Nombre de Archivo", - "creationDate": "Fecha de creación", - "fileSize": "Tamaño de archivo", - "deleteBackupFile": "Eliminar archivo de copia de seguridad", - "importBackupFile": "Importar archivo de copia de seguridad", - "createBackupFile": "Crear archivo de copia de seguridad", - "downloadBackupFile": "Descargar archivo de copia de seguridad", - "info_1": "Al importar datos, es fundamental garantizar la estructura correcta. Si no está seguro de lo que está haciendo, busque consejo y apoyo de un profesional. Un error en la estructura puede causar un mal funcionamiento de la aplicación, incluyendo la imposibilidad total de ejecutar la aplicación.", - "info_2": "El nombre del archivo no importa al cargarlo. Posteriormente se le cambiará el nombre para que siga el formato backup_user_yyyyMMddHHmm.sql, lo que garantiza una convención de nomenclatura coherente.", - "submit": "Importar Copia de Seguridad", - "importIntoDatabaseSuccessed": "La importación a la base de datos ha sido exitosa", - "backupCreated": "Respaldo de la Base de Datos exitoso", - "fileNotFound": "Archivo no encontrado", - "fileNullOrEmpty": "El archivo no puede ser nulo o vacío.", - "failedImportFile": "Archivo de importación fallido", - "notSupported": "Esta función no esta disponible para su conexión de Base de Datos" - }, - "session": { - "expired": "Su sesión ha caducado. Actualice la página e inténtelo de nuevo.", - "refreshPage": "Refrescar Página" - }, - "home": { - "desc": "Su ventanilla única autohospedada para todas sus necesidades PDF", - "searchBar": "Buscar características...", - "viewPdf": { - "title": "Ver/Editar PDF", - "desc": "Ver, anotar, añadir texto o imágenes" - }, - "setFavorites": "Agregar Favoritos", - "hideFavorites": "Ocultar Favoritos", - "showFavorites": "Mostrar Favoritos", - "legacyHomepage": "Página de inicio anterior", - "newHomePage": "¡Prueba nuestra nueva página de inicio!", - "alphabetical": "Alfabético", - "globalPopularity": "Las más populares", - "sortBy": "Ordenado por:", - "multiTool": { - "title": "Multi-herramienta PDF", - "desc": "Combinar, rotar, reorganizar y eliminar páginas" - }, - "merge": { - "title": "Unir", - "desc": "Unir fácilmente múltiples PDFs en uno" - }, - "split": { - "title": "Dividir", - "desc": "Dividir PDFs en múltiples documentos" - }, - "rotate": { - "title": "Rotar", - "desc": "Rotar fácilmente sus PDFs" - }, - "imageToPdf": { - "title": "Imagen a PDF", - "desc": "Convertir una imagen (PNG, JPEG, GIF) a PDF" - }, - "pdfToImage": { - "title": "PDF a Imagen", - "desc": "Convertir un PDF a una imagen (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Organizador", - "desc": "Eliminar/Reorganizar páginas en cualquier orden" - }, - "addImage": { - "title": "Agregar imagen al PDF", - "desc": "Agregar una imagen en el PDF en una ubicación establecida (en desarrollo)" - }, - "watermark": { - "title": "Añadir marca de agua", - "desc": "Añadir una marca de agua predefinida al documento PDF" - }, - "permissions": { - "title": "Cambiar permisos", - "desc": "Cambiar los permisos del documento PDF" - }, - "removePages": { - "title": "Eliminar", - "desc": "Eliminar páginas no deseadas del documento PDF" - }, - "addPassword": { - "title": "Añadir contraseña", - "desc": "Encriptar el documento PDF con una contraseña" - }, - "removePassword": { - "title": "Eliminar contraseña", - "desc": "Eliminar la contraseña del documento PDF" - }, - "compressPdfs": { - "title": "Comprimir", - "desc": "Comprimir PDFs para reducir el tamaño del archivo" - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Cambiar metadatos", - "desc": "Cambiar/Eliminar/Añadir metadatos al documento PDF" - }, - "fileToPDF": { - "title": "Convertir archivo a PDF", - "desc": "Convertir casi cualquier archivo a PDF (DOCX, PNG, XLS, PPT, TXT y más)" - }, - "ocr": { - "title": "Ejecutar OCR en PDF y/o tareas de limpieza", - "desc": "Tareas de limpieza y detectar texto en imágenes dentro de un PDF y volver a incrustarlo como texto" - }, - "extractImages": { - "title": "Extraer imágenes", - "desc": "Extraer todas las imágenes de un PDF y guardarlas en ZIP" - }, - "pdfToPDFA": { - "title": "Convertir PDF a PDF/A", - "desc": "Convertir PDF a PDF/A para almacenamiento a largo plazo" - }, - "PDFToWord": { - "title": "PDF a Word", - "desc": "Convertir formatos PDF a Word (DOC, DOCX y ODT)" - }, - "PDFToPresentation": { - "title": "PDF a presentación", - "desc": "Convertir PDF a formatos de presentación (PPT, PPTX y ODP)" - }, - "PDFToText": { - "title": "PDF a TXT o RTF", - "desc": "Convertir PDF a formato TXT o RTF" - }, - "PDFToHTML": { - "title": "PDF a HTML", - "desc": "Convertir PDF a formato HTML" - }, - "PDFToXML": { - "title": "PDF a XML", - "desc": "Convertir PDF a formato XML" - }, - "ScannerImageSplit": { - "title": "Detectar/Dividir fotos escaneadas", - "desc": "Dividir varias fotos dentro de una foto/PDF" - }, - "sign": { - "title": "Firmar", - "desc": "Añadir firma a PDF mediante dibujo, texto o imagen" - }, - "flatten": { - "title": "Aplanar", - "desc": "Eliminar todos los elementos y formularios interactivos de un PDF" - }, - "repair": { - "title": "Reparar", - "desc": "Intentar reparar un PDF corrupto/roto" - }, - "removeBlanks": { - "title": "Eliminar páginas en blanco", - "desc": "Detectar y eliminar páginas en blanco de un documento" - }, - "removeAnnotations": { - "title": "Eliminar Anotaciones", - "desc": "Eliminar todos los comentarios/anotaciones de un PDF" - }, - "compare": { - "title": "Comparar", - "desc": "Comparar y mostrar las diferencias entre 2 documentos PDF" - }, - "certSign": { - "title": "Firmar con certificado", - "desc": "Firmar un PDF con un Certificado/Clave (PEM/P12)" - }, - "removeCertSign": { - "title": "Quitar signo de certificado", - "desc": "Eliminar firma de certificado de PDF" - }, - "pageLayout": { - "title": "Diseño de varias páginas", - "desc": "Unir varias páginas de un documento PDF en una sola página" - }, - "scalePages": { - "title": "Escalar/ajustar tamaño de página", - "desc": "Escalar/cambiar el tamaño de una pagina y/o su contenido" - }, - "pipeline": { - "title": "Automatización", - "desc": "Ejecutar varias tareas a PDFs definiendo una secuencia de comandos" - }, - "add-page-numbers": { - "title": "Añadir números de página", - "desc": "Añadir números de página en un documento en una ubicación concreta" - }, - "auto-rename": { - "title": "Renombrar archivo PDF automáticamente", - "desc": "Renombrar automáticamente un archivo PDF según el encabezamiento detectado" - }, - "adjust-contrast": { - "title": "Ajustar Color/Contraste", - "desc": "Ajustar Contraste, Saturación y Brillo de un PDF" - }, - "crop": { - "title": "Recortar PDF", - "desc": "Recortar un PDF para reducir su tamaño (¡conservando el texto!)" - }, - "autoSplitPDF": { - "title": "Auto Dividir Páginas", - "desc": "Auto Dividir PDF escaneado con código QR divsor de página escaneada físicamente" - }, - "sanitizePdf": { - "title": "Desinfectar", - "desc": "Eliminar scripts y otros elementos de los archivos PDF" - }, - "URLToPDF": { - "title": "URL/Página web a PDF", - "desc": "Convierte cualquier dirección http(s) a PDF" - }, - "HTMLToPDF": { - "title": "HTML a PDF", - "desc": "Convierte cualquier archivo HTML o ZIP a PDF" - }, - "MarkdownToPDF": { - "title": "Markdown a PDF", - "desc": "Convierte cualquier archivo Markdown a PDF" - }, - "PDFToMarkdown": { - "title": "PDF a Markdown", - "desc": "Convierte cualquier PDF a Markdown" - }, - "getPdfInfo": { - "title": "Obtener toda la información en PDF", - "desc": "Obtiene toda la información posible de archivos PDF" - }, - "extractPage": { - "title": "Extraer página(s)", - "desc": "Extraer las páginas seleccionadas del PDF" - }, - "PdfToSinglePage": { - "title": "PDF a una sola página", - "desc": "Unir todas las páginas del PDF en una sola página" - }, - "showJS": { - "title": "Mostrar Javascript", - "desc": "Busca y muestra cualquier JS contenido en un PDF" - }, - "autoRedact": { - "title": "Auto Redactar", - "desc": "Redactar automáticamente (ocultar) texto en un PDF según el texto introducido" - }, - "redact": { - "title": "Redacción Manual", - "desc": "Redacta un PDF basado en el texto seleccionado, dibuja formas y/o página(s) selecionada(s)" - }, - "tableExtraxt": { - "title": "PDF a CSV", - "desc": "Extraer Tablas de un PDF convirtiéndolas a CSV" - }, - "autoSizeSplitPDF": { - "title": "Auto dividir por tamaño/conteo", - "desc": "Divide un solo PDF en múltiples documentos según su tamaño, número de páginas, o número de documento" - }, - "overlay-pdfs": { - "title": "Superponer PDFs", - "desc": "Superponer PDFs encima de otro PDF" - }, - "split-by-sections": { - "title": "Dividir PDF por Secciones", - "desc": "Dividir cada página de un PDF en secciones verticales y horizontales más pequeñas" - }, - "AddStampRequest": { - "title": "Añadir Sello a PDF", - "desc": "Añadir texto o sello de imagen en ubicaciones específicas" - }, - "removeImagePdf": { - "title": "Eliminar imagen", - "desc": "Eliminar imagen del PDF> para reducir el tamaño de archivo" - }, - "splitPdfByChapters": { - "title": "Dividir PDF por capítulos", - "desc": "Divida un PDF en varios archivos según su estructura de capítulos." - }, - "validateSignature": { - "title": "Validar firma del PDF", - "desc": "Verifica firmas digitales y certificados en los documentos PDF" - }, - "replaceColorPdf": { - "title": "Reemplazar e Invertir Color", - "desc": "Reemplaza el color del texto y el fondo en el PDF e invierte el color completo del PDF para reducir el tamaño del archivo" - } - }, - "viewPdf": { - "tags": "ver,leer,anotar,texto,imagen", - "title": "Ver/Editar PDF", - "header": "Ver PDF" - }, - "multiTool": { - "tags": "Multi-herramienta,Multi-operación,Interfaz de usuario,Arrastrar con un click,front end,lado del cliente", - "title": "Multi-herramienta PDF", - "header": "Multi-herramienta PDF", - "uploadPrompts": "Nombre del archivo", - "selectAll": "Seleccionar Todo", - "deselectAll": "Deseleccionar Todo", - "selectPages": "Seleccionar página(s)", - "selectedPages": "Página(s) Selecccionada(s)", - "page": "Página", - "deleteSelected": "Borrar selecionado(s)", - "downloadAll": "Exportar", - "downloadSelected": "Exportar selecionado(s)", - "insertPageBreak": "Insertar salto página", - "addFile": "Agregar Archivo", - "rotateLeft": "Rotar a la izquierda", - "rotateRight": "Rotar a la derecha", - "split": "Dividir", - "moveLeft": "Mover a la izquierda", - "moveRight": "Mover a la derecha", - "delete": "Borrar", - "dragDropMessage": "Página(s) Selecccionada(s)", - "undo": "Deshacer", - "redo": "Rehacer" - }, - "merge": { - "tags": "Unir,Operaciones de página,Back end,Backend", - "title": "Unir", - "header": "Unir múltiples PDFs (2+)", - "sortByName": "Ordenar por nombre", - "sortByDate": "Ordenar por fecha", - "removeCertSign": "¿Eliminar la firma digital en el archivo unido?", - "submit": "Unir" - }, - "split": { - "tags": "Operaciones de página,dividir,Multi-página,cortar,Backend", - "title": "Dividir PDF", - "header": "Dividir PDF", - "desc": { - "1": "Los números que seleccione son el número de página en el que desea hacer una división", - "2": "Como tal, seleccionar 1,3,7-9 dividiría un documento de 10 páginas en 6 archivos PDF separados con:", - "3": "Documento #1: Página 1", - "4": "Documento #2: Páginas 2 y 3", - "5": "Documento #3: Páginas 4, 5, 6 y 7", - "6": "Documento #4: Página 8", - "7": "Documento #5: Página 9", - "8": "Documento #6: Página 10" - }, - "splitPages": "Introducir las páginas para dividir:", - "submit": "Dividir" - }, - "rotate": { - "tags": "Backend", - "title": "Rotar PDF", - "header": "Rotar PDF", - "selectAngle": "Seleccionar ángulo de rotación (en múltiplos de 90 grados):", - "submit": "Rotar" - }, - "imageToPdf": { - "tags": "conversión,img,jpg,imagen,fotografía" - }, - "pdfToImage": { - "tags": "conversión,img,jpg,imagen,fotografía", - "title": "PDF a Imagen", - "header": "PDF a Imagen", - "selectText": "Formato de Imagen", - "singleOrMultiple": "Tipo resultante de imagen", - "single": "Una única imagen grande", - "multi": "Múltiples imágenes", - "colorType": "Tipo de color", - "color": "Color", - "grey": "Escala de grises", - "blackwhite": "Blanco y Negro (¡Puede perder datos!)", - "submit": "Convertir", - "info": "Python no está instalado. Se requiere para la conversión WebP.", - "placeholder": "(por ejemplo 1,2,8 o 4,7,12-16 o 2n-1)" - }, - "pdfOrganiser": { - "tags": "doble cara,pares,impares,ordenar,mover", - "title": "Organizador de páginas", - "header": "Organizador de páginas PDF", - "submit": "Organizar páginas", - "mode": { - "_value": "Modo", - "1": "Orden de páginas personalizado", - "2": "Orden inverso", - "3": "Ordenar dúplex", - "4": "Ordenar folleto", - "5": "Orden de folleto de encuadernado lateral", - "6": "División par-impar", - "7": "Quitar primera", - "8": "Quitar última", - "9": "Quitar primera y última", - "10": "Unir impar-par", - "11": "Duplicar todas las páginas" - }, - "placeholder": "(por ejemplo, 1,3,2 o 4-8,2,10-12 o 2n-1)" - }, - "addImage": { - "tags": "img,jpg,imagen,fotografía", - "title": "Añadir imagen", - "header": "Añadir imagen de PDF", - "everyPage": "¿Todas las páginas?", - "upload": "Añadir imagen", - "submit": "Enviar imagen" - }, - "watermark": { - "tags": "Texto,repetir,etiquetar,propietario,copyright,marca comercial,img,jpg,imagen,fotografía", - "title": "Añadir marca de agua", - "header": "Añadir marca de agua", - "customColor": "Personalizar color de texto", - "selectText": { - "1": "Seleccionar PDF para añadir marca de agua:", - "2": "Texto de la marca de agua:", - "3": "Tamaño de la Fuente:", - "4": "Rotación (0-360):", - "5": "Ancho (Espacio entre cada marca de agua horizontalmente):", - "6": "Alto (Espacio entre cada marca de agua verticalmente):", - "7": "Opacidad (0% - 100%):", - "8": "Tipo de marca de agua:", - "9": "Imagen de marca de agua:", - "10": "Convertir PDF a imagen PDF" - }, - "submit": "Añadir marca de agua", - "type": { - "1": "Texto", - "2": "Imagen" - } - }, - "permissions": { - "tags": "leer,escribir,editar,imprimir", - "title": "Cambiar permisos", - "header": "Cambiar permisos", - "warning": "Advertencia: para que estos permisos no se puedan cambiar, se recomienda configurarlos con una contraseña a través de la página de cambio de contraseña", - "selectText": { - "1": "Seleccionar PDF para cambiar los permisos", - "2": "Permisos a establecer", - "3": "Impedir el ensamblaje del documento", - "4": "Impedir la extracción de contenido", - "5": "Impedir la extracción para la accesibilidad", - "6": "Impedir rellenar formulario", - "7": "Impedir modificación", - "8": "Impedir modificación de anotaciones", - "9": "Impedir imprimir", - "10": "Impedir imprimir diferentes formatos" - }, - "submit": "Cambiar" - }, - "removePages": { - "tags": "Borrar páginas,eliminar páginas" - }, - "addPassword": { - "tags": "seguro,seguridad", - "title": "Añadir contraseña", - "header": "Añadir contraseña (encriptar)", - "selectText": { - "1": "Seleccionar PDF para encriptar", - "2": "Contraseña", - "3": "Longitud de la clave de cifrado", - "4": "Valores altos son más fuertes, pero valores bajos tienen mejor compatibilidad", - "5": "Permisos para establecer", - "6": "Impedir el ensamblaje del documento", - "7": "Impedir la extracción de contenido", - "8": "Impedir la extracción para la accesibilidad", - "9": "Impedir rellenar formulario", - "10": "Impedir modificación", - "11": "Impedir modificación de anotaciones", - "12": "Impedir imprimir", - "13": "Impedir imprimir diferentes formatos", - "14": "Contraseña", - "15": "Restringir qué se puede hacer con el documento una vez abierto (no soportado por todos los lectores)", - "16": "Restringir la apertura del propio documento" - }, - "submit": "Encriptar" - }, - "removePassword": { - "tags": "seguro,Desencriptar,seguridad,quitar contraseña,eliminar contraseña", - "title": "Eliminar contraseña", - "header": "Eliminar contraseña (desencriptar)", - "selectText": { - "1": "Seleccionar PDF para desencriptar", - "2": "Contraseña" - }, - "submit": "Eliminar" - }, - "compressPdfs": { - "tags": "aplastar,pequeño,diminuto" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "título,autor,fecha,creación,hora,editorial,productor,estadísticas", - "title": "Título:", - "header": "Cambiar metadatos", - "selectText": { - "1": "Editar las variables que desea cambiar", - "2": "Eliminar todos los metadatos", - "3": "Mostrar metadatos personalizados:", - "4": "Otros Metadatos:", - "5": "Agregar entrada de metadatos personalizados" - }, - "author": "Autor:", - "creationDate": "Fecha de creación (aaaa/MM/dd HH:mm:ss):", - "creator": "Creador:", - "keywords": "Palabras clave:", - "modDate": "Fecha de modificación (aaaa/MM/dd HH:mm:ss):", - "producer": "Productor:", - "subject": "Asunto:", - "trapped": "Capturado:", - "submit": "Cambiar" - }, - "fileToPDF": { - "tags": "transformación,formato,documento,imagen,diapositiva,texto,conversión,office,docs,word,excel,powerpoint", - "title": "Archivo a PDF", - "header": "Convertir cualquier archivo a PDF", - "credit": "Este servicio usa LibreOffice y Unoconv para la conversión de archivos", - "supportedFileTypesInfo": "Tipos de archivos admitidos", - "supportedFileTypes": "Los tipos de archivo soportados deben incluir los indicados a continuación; sin embargo, para una completa y acutualizada lista de formatos soportados, por favor consulte la documentación de LibreOffice", - "submit": "Convertir a PDF" - }, - "ocr": { - "tags": "reconocimiento,texto,imagen,escanear,leer,identificar,detección,editable", - "title": "OCR / Escaneo de limpieza", - "header": "Escaneos de limpieza / OCR (Reconocimiento óptico de caracteres)", - "selectText": { - "1": "Seleccionar los idiomas que se detectarán en el PDF (Los enumerados son los detectados actualmente):", - "2": "Producir un archivo de texto que contenga texto OCR junto con el PDF editado con OCR", - "3": "Corregir las páginas que se escanearon en un ángulo torcido girándolas nuevamente a su lugar", - "4": "Limpiar la página para que sea menos probable que el OCR encuentre texto en el ruido de fondo (Sin cambio de salida)", - "5": "Limpiar la página para que sea menos probable que el OCR encuentre texto en el ruido de fondo, mantiene la limpieza en la salida.", - "6": "Ignorar las páginas que tienen texto interactivo, solo las páginas OCR que son imágenes", - "7": "Forzar OCR, OCR eliminará en cada página todo el texto original", - "8": "Normal (se producirá un error si el PDF contiene texto)", - "9": "Ajustes adicionales", - "10": "Modo OCR", - "11": "Eliminar imágenes después de OCR (Elimina TODAS las imágenes, solo es útil si es parte del paso de conversión)", - "12": "Tipo de procesamiento (avanzado)" - }, - "help": "Lea esta documentación sobre cómo usar esto para otros idiomas y/o no usarlo en Docker", - "credit": "Este servicio utiliza qpdf y Tesseract para OCR", - "submit": "Procesar PDF con OCR" - }, - "extractImages": { - "tags": "imagen,fotografía,guardar,archivo,zip,capturar,coger", - "title": "Extraer imágenes", - "header": "Extraer imágenes", - "selectText": "Seleccionar el formato de imagen para convertir las imágenes extraídas", - "allowDuplicates": "Guardar imágenes duplicadas", - "submit": "Extraer" - }, - "pdfToPDFA": { - "tags": "archivo,largo plazo,estándar,conversión,almacenamiento,conservación", - "title": "PDF a PDF/A", - "header": "PDF a PDF/A", - "credit": "Este servicio usa libreoffice para la conversión a PDF/A", - "submit": "Convertir", - "tip": "Actualmente no funciona para múltiples entrada a la vez", - "outputFormat": "Formato de salida", - "pdfWithDigitalSignature": "El PDF contiene una firma digital. Ésta se eliminará en el siguiente paso." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformación,formato,conversión,office,microsoft,archivo del documento", - "title": "PDF a Word", - "header": "PDF a Word", - "selectText": { - "1": "Formato de archivo de salida" - }, - "credit": "Este servicio utiliza LibreOffice para la conversión de archivos", - "submit": "Convertir" - }, - "PDFToPresentation": { - "tags": "diapositivas,mostrar,office,microsoft", - "title": "PDF a presentación", - "header": "PDF a presentación", - "selectText": { - "1": "Formato de archivo de salida" - }, - "credit": "Este servicio utiliza LibreOffice para la conversión de archivos", - "submit": "Convertir" - }, - "PDFToText": { - "tags": "formato enriquecido,formato de texto enriquecido,formato de texto enriquecido", - "title": "PDF a TXT/RTF", - "header": "PDF a TXT/RTF", - "selectText": { - "1": "Formato de archivo de salida" - }, - "credit": "Este servicio utiliza LibreOffice para la conversión de archivos", - "submit": "Convertir" - }, - "PDFToHTML": { - "tags": "contenido web,amigable para navegador", - "title": "PDF a HTML", - "header": "PDF a HTML", - "credit": "Este servicio utiliza pdftohtml para la conversión de archivos", - "submit": "Convertir" - }, - "PDFToXML": { - "tags": "extracción de datos,contenido estructurado,interopersabilidad,transformación,convertir", - "title": "PDF a XML", - "header": "PDF a XML", - "credit": "Este servicio utiliza LibreOffice para la conversión de archivos", - "submit": "Convertir" - }, - "ScannerImageSplit": { - "tags": "separar,auto-detectar,escaneos,multi-foto,organizar", - "selectText": { - "1": "Umbral de ángulo:", - "2": "Establecer el ángulo absoluto mínimo requerido para rotar la imagen (predeterminado: 10).", - "3": "Tolerancia:", - "4": "Determinar el rango de variación de color alrededor del color de fondo estimado (predeterminado: 30).", - "5": "Área mínima:", - "6": "Establecer el umbral mínimo de área para una foto (predeterminado: 10000).", - "7": "Área mínima de contorno:", - "8": "Establecer el umbral mínimo del área de contorno para una foto", - "9": "Tamaño del borde:", - "10": "Establece el tamaño del borde agregado y eliminado para evitar bordes blancos en la salida (predeterminado: 1)." - }, - "info": "Python no está instalado. Se requiere para funcionar." - }, - "sign": { - "tags": "autorizar,iniciales,firma manuscrita,texto de firma,imagen de firma", - "title": "Firmar", - "header": "Firmar archivos PDF", - "upload": "Subir imagen", - "draw": "Dibujar firma", - "text": "Entrada de texto", - "clear": "Borrar", - "add": "Agregar", - "saved": "firmas guardadas", - "save": "Guardar Firma", - "personalSigs": "Firmas Personales", - "sharedSigs": "Firmas compartidas", - "noSavedSigs": "No se encontraron firmas guardadas", - "addToAll": "Agregar a todas las páginas", - "delete": "Eliminar", - "first": "Primera página", - "last": "Última página", - "next": "Siguiente página", - "previous": "Página anterior", - "maintainRatio": "Activar/desactivar la relación de aspecto", - "undo": "Deshacer", - "redo": "Rehacer" - }, - "flatten": { - "tags": "estática,desactivar,no interactiva,etiqueta dinámica", - "title": "Aplanar", - "header": "Acoplar archivos PDF", - "flattenOnlyForms": "Aplanar sólo formularios", - "submit": "Aplanar" - }, - "repair": { - "tags": "reparar,restaurar,corregir,recuperar", - "title": "Reparar", - "header": "Reparar archivos PDF", - "submit": "Reparar" - }, - "removeBlanks": { - "tags": "limpieza,dinámica,sin contenido,organizar", - "title": "Eliminar espacios en blanco", - "header": "Eliminar páginas en blanco", - "threshold": "Umbral:", - "thresholdDesc": "Umbral para determinar cuán blanco debe ser un píxel blanco", - "whitePercent": "Porcentaje de blanco (%):", - "whitePercentDesc": "Porcentaje de página que debe ser blanca para ser eliminada", - "submit": "Eliminar espacios en blanco" - }, - "removeAnnotations": { - "tags": "comentarios,subrayar,notas,margen,eliminar", - "title": "Eliminar anotaciones", - "header": "Eliminar anotaciones", - "submit": "Eliminar" - }, - "compare": { - "tags": "diferenciar,contrastar,cambios,análisis", - "title": "Comparar", - "header": "Comparar archivos PDF", - "highlightColor": { - "1": "Color resaltado 1:", - "2": "Color resaltado 2:" - }, - "document": { - "1": "Documento 1", - "2": "Documento 2" - }, - "submit": "Comparar", - "complex": { - "message": "Uno o ambos de los documentos proporcionados son archivos grandes; la precisión de la comparación puede disminuir." - }, - "large": { - "file": { - "message": "Uno o ambos de los documentos proporcionados son demasiado grandes para procesarse." - } - }, - "no": { - "text": { - "message": "Uno o ambos de los PDF seleccionados no contienen contenido de texto. Por favor, elija PDFs con texto para la comparación." - } - } - }, - "certSign": { - "tags": "autentificar,PEM,P12,oficial,encriptar", - "title": "Firma con certificado", - "header": "Firmar un PDF con su certificado (en desarrollo)", - "selectPDF": "Seleccione un archivo PDF para firmar:", - "jksNote": "Nota: si el tipo de certificado no está enla lista de abajo, por favor conviértalo a un archivo almacén de claves de Java Java KeyStore (.jks) utilizando la herramienta línea de comandos. Posteriormente, seleccione en el listado de abajo la opción archivo .jks.", - "selectKey": "Seleccione su archivo de clave privada (formato PKCS#8, podría ser .pem o .der):", - "selectCert": "Seleccione su archivo de certificado (formato X.509, podría ser .pem o .der):", - "selectP12": "Seleccione su archivo de almacén de claves PKCS#12 (.p12 o .pfx) (Opcional, si se proporciona, debe contener su clave privada y certificado):", - "selectJKS": "Seleccione su archivo de almacén de claves Java KeyStore (.jks or .keystore):", - "certType": "Tipo de certificado", - "password": "Introduzca su almacén de claves o contraseña de clave privada (si corresponde):", - "showSig": "Mostrar firma", - "reason": "Razón", - "location": "Ubicación", - "name": "Nombre", - "showLogo": "Mostrar Logotipo", - "submit": "Firmar PDF" - }, - "removeCertSign": { - "tags": "autenticar,PEM,P12,oficial,desencriptar", - "title": "Eliminar firma del certificado", - "header": "Quitar el certificado digital del PDF", - "selectPDF": "Seleccione un archivo PDF:", - "submit": "Eliminar firma" - }, - "pageLayout": { - "tags": "unir,compuesto,vista única,organizar", - "title": "Diseño de varias páginas", - "header": "Diseño de varias páginas", - "pagesPerSheet": "Páginas por hoja:", - "addBorder": "Añadir bordes", - "submit": "Entregar" - }, - "scalePages": { - "tags": "cambiar tamaño,modificar,dimensionar,adaptar", - "title": "Ajustar escala de la página", - "header": "Adjustar escala de la página", - "pageSize": "Tamaño de la página del documento", - "keepPageSize": "Tamaño Original", - "scaleFactor": "Nivel de zoom (recorte) de la página", - "submit": "Entregar" - }, - "add-page-numbers": { - "tags": "paginar,etiquetar,organizar,indexar" - }, - "auto-rename": { - "tags": "auto-detectar,basado en el encabezamiento,organizar,re-etiquetar", - "title": "Renombrar automáticamente", - "header": "Renombrar PDF automáticamente", - "submit": "Renombrar automáticamente" - }, - "adjust-contrast": { - "tags": "corrección de color,sintonizar color,modificar,mejorar" - }, - "crop": { - "tags": "recortar,contraer,editar,forma", - "title": "Recortar", - "header": "Recortar PDF", - "submit": "Entregar" - }, - "autoSplitPDF": { - "tags": "Marcado por QR,separar,segmento de escaneo,organizar", - "title": "Dividir PDF automáticamente", - "header": "Dividir PDF automáticamente", - "description": "Imprimir, Insertar, Escanear, cargar, y déjenos sepsrar automáticamente sus documentos. No se necesita clasificación manual.", - "selectText": { - "1": "Imprimir algunas hojas divisorias desde la parte inferior (Blanco y negro está bien).", - "2": "Escanee todos sus documentos a la vez insertando la hoja divisoria entre ellos.", - "3": "Cargue un único archivo PDF escaneado de gran tamaño y deje que Stirling PDF se encargue del resto.", - "4": "Las páginas divisorias son automáticamente detectadas y eliminadas, garantizando un buen documento final." - }, - "formPrompt": "Entregar PDF conteniendo divisores de página de Stirling-PDF:", - "duplexMode": "Modo Dúplex (Escaneado de ambas caras)", - "dividerDownload2": "Descargar 'Divisor automático (con instrucciones).pdf'", - "submit": "Entregar" - }, - "sanitizePdf": { - "tags": "limpiar,asegurar,seguro,quitar amenazas" - }, - "URLToPDF": { - "tags": "captura web,guardar página,web a documento,archivo", - "title": "URL a PDF", - "header": "URL a PDF", - "submit": "Convertir", - "credit": "Utiliza WeasyPrint" - }, - "HTMLToPDF": { - "tags": "margen,contenido web,transformación,convertir", - "title": "HTML a PDF", - "header": "HTML a PDF", - "help": "Acepta archivos HTML y ZIPs conteniendo los html/css/imágenes, etc, requeridas", - "submit": "Convertir", - "credit": "Utiliza WeasyPrint", - "zoom": "Nivel de zoom para mostrar la página web.", - "pageWidth": "Ancho de la página en centímetros. (Dejar en blanco por defecto)", - "pageHeight": "Alto de la página en centímetros. (Dejar en blanco por defecto)", - "marginTop": "Margen superior de la página en milímetros. (Dejar en blanco por defecto)", - "marginBottom": "Margen inferior de la página en milímetros. (Dejar en blanco por defecto)", - "marginLeft": "Margen izquierdo de la página en milímetros. (Dejar en blanco por defecto)", - "marginRight": "Margen derecho de la página en milímetros. (Dejar en blanco por defecto)", - "printBackground": "Renderizar el fondo de las páginas web.", - "defaultHeader": "Habilitar encabezado predeterminado (Nombre y número de página)", - "cssMediaType": "Cambiar el tipo de medio CSS de la página.", - "none": "Ninguno", - "print": "Imprimir", - "screen": "Pantalla" - }, - "MarkdownToPDF": { - "tags": "margen,contenido web,transformación,convertir", - "title": "Markdown a PDF", - "header": "Markdown a PDF", - "submit": "Convertir", - "help": "Tarea en proceso", - "credit": "Usa WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,contenido web,transformación,convertir,md", - "title": "PDF a Markdown", - "header": "PDF a Markdown", - "submit": "Convertir" - }, - "getPdfInfo": { - "tags": "información,datos,estadísticas,estadísticas", - "title": "Obtener Información del PDF", - "header": "Obtener Información del PDF", - "submit": "Obtener Información", - "downloadJson": "Descargar JSON" - }, - "extractPage": { - "tags": "extraer" - }, - "PdfToSinglePage": { - "tags": "página única" - }, - "showJS": { - "tags": "JS", - "title": "Mostrar Javascript", - "header": "Mostrar Javascript", - "downloadJS": "Descargar Javascript", - "submit": "Mostrar" - }, - "autoRedact": { - "tags": "Redactar,Ocultar,ocultar,negro,subrayador,oculto", - "title": "Auto Censurar Texto", - "header": "Auto Censurar Texto", - "colorLabel": "Color", - "textsToRedactLabel": "Texto para Censurar (separado por líneas)", - "textsToRedactPlaceholder": "por ej. \\nConfidencial \\nAlto-Secreto", - "useRegexLabel": "Usar Regex", - "wholeWordSearchLabel": "Búsqueda por palabra completa", - "customPaddingLabel": "Espaciado adicional personalizado", - "convertPDFToImageLabel": "Convertir PDF a imagen PDF (Utilizado para eliminar el texto detrás del cajetín de censura)", - "submitButton": "Enviar" - }, - "redact": { - "tags": "Redactar,Ocultar,oscurece,negro,marcador,oculto,manual", - "title": "Censurar texto Manualmente", - "header": "Censurar texto Manualmente", - "submit": "Enviar", - "textBasedRedaction": "Censura basada en texto", - "pageBasedRedaction": "Censura basada en la página", - "convertPDFToImageLabel": "Convertir PDF a PDF-Imagen (Utilizado para eliminar el texto detrás del cajetín de censura)", - "pageRedactionNumbers": { - "title": "Páginas", - "placeholder": "(por ejemplo 1,2,8 o 4,7,12-16 o 2n-1)" - }, - "redactionColor": { - "title": "Color del cajetín" - }, - "export": "Exportar", - "upload": "Cargar", - "boxRedaction": "Dibujar cajetín de censura", - "zoom": "Zoom", - "zoomIn": "Acercar", - "zoomOut": "Alejar", - "nextPage": "Página siguiente", - "previousPage": "Pagina anterior", - "toggleSidebar": "Activar/desactivar barra lateral", - "showThumbnails": "Mostrar Miniaturas", - "showDocumentOutline": "Mostrar esquema del documento (doble clic para expandir/contraer elementos)", - "showAttatchments": "Mostrar Adjuntos", - "showLayers": "Mostrar Capas (doble clic para restablecer las capas a su estado inicial)", - "colourPicker": "Selector de color", - "findCurrentOutlineItem": "Resaltar el marcador", - "applyChanges": "Aplicar cambios" - }, - "tableExtraxt": { - "tags": "CSV,Extraer tabla,extraer,convertir" - }, - "autoSizeSplitPDF": { - "tags": "pdf,dividir,documento,organización" - }, - "overlay-pdfs": { - "tags": "Superponer", - "header": "Superponer archivos PDF", - "baseFile": { - "label": "Seleccione archivo PDF de base" - }, - "overlayFiles": { - "label": "Seleccione archivos PDF a superponer" - }, - "mode": { - "label": "Seleccione modo de superposición", - "sequential": "Superposición Sequencial", - "interleaved": "Superposición Intercalada", - "fixedRepeat": "Superposición de repetición fija" - }, - "counts": { - "label": "Recuento de superposición (para Modo de Repetición Fija)", - "placeholder": "Introduzca recuento separado por comas (p.ej., 2,3,1)" - }, - "position": { - "label": "Seleccione Posición de Superposición", - "foreground": "Arriba", - "background": "Fondo" - }, - "submit": "Enviar" - }, - "split-by-sections": { - "tags": "Dividir sección, Dividir, Personalizar", - "title": "Dividir PDF por Secciones", - "header": "Dividir PDF por Secciones", - "horizontal": { - "label": "Divisiones Horizontales", - "placeholder": "Introduzca el número de divisiones horizontales" - }, - "vertical": { - "label": "Divisiones Verticales", - "placeholder": "Introduzca el número de divisiones verticales" - }, - "submit": "Dividir PDF", - "merge": "Unir en Un PDF" - }, - "AddStampRequest": { - "tags": "Sello, Añadir imagen, centrar imagen, Marca de agua, PDF, Incrustar, Personalizar", - "header": "Sellar PDF", - "title": "Sellar PDF", - "stampType": "Tipo de sello", - "stampText": "Texto del sello", - "stampImage": "Imagen de sello", - "alphabet": "Alfabeto", - "fontSize": "Tamaño de fuente/imagen", - "rotation": "Rotación", - "opacity": "Opacidad", - "position": "Posición", - "overrideX": "Forzar coordenada X", - "overrideY": "Forzar coordenada Y", - "customMargin": "Personalizar margen", - "customColor": "Personalizar color de texto", - "submit": "Enviar" - }, - "removeImagePdf": { - "tags": "Eliminar imagen,Operaciones de página,Back end,Backend" - }, - "splitPdfByChapters": { - "tags": "dividir,capítulos,marcadores,organizar" - }, - "validateSignature": { - "tags": "firma,verificar,validar,pdf,certificado,firma digital,validar firma,validar certificado", - "title": "Validar firmas del PDF", - "header": "Validar firmas del PDF", - "selectPDF": "Seleccione el archivo PDF firmado", - "submit": "Validar firmas", - "results": "Resultados de la validación", - "status": { - "_value": "Estado de la validación", - "valid": "Válido", - "invalid": "Inválido" - }, - "signer": "Firmante", - "date": "Fecha", - "reason": "Motivo", - "location": "Ubicación", - "noSignatures": "No se encontraron firmas digiales en este documento", - "chain": { - "invalid": "Error en la validación de la cadena de certificados: no se puede verificar la identidad del firmante" - }, - "trust": { - "invalid": "El certificado no se encuentra en los almacenes de confianza: no se puede verificar la fuente" - }, - "cert": { - "expired": "Certificado expiredo", - "revoked": "Certificado fue revocado", - "info": "Detalles Certificado", - "issuer": "Emisor", - "subject": "Asunto", - "serialNumber": "Número de Serie", - "validFrom": "Válido desde", - "validUntil": "Válido hasta", - "algorithm": "Algoritmo", - "keySize": "Tamaño de la clave", - "version": "Versión", - "keyUsage": "Uso de la clave", - "selfSigned": "Autofirmado", - "bits": "bits" - }, - "signature": { - "info": "Información de la firma", - "_value": "Firma", - "mathValid": "La firma es matemáticamente válida aunque:" - }, - "selectCustomCert": "Archivo de certificado personalizado X.509 (opcional)" - }, - "replace-color": { - "title": "Reemplazar-Invertir-Color", - "header": "Reemplazar-Invertir Color en PDF", - "selectText": { - "1": "Opciones para Reemplazar o Invertir color", - "2": "Predeterminado (Colores de alto contraste predeterminados)", - "3": "Personalizado (Colores personalizados)", - "4": "Invertir Completo (Invertir todos los colores)", - "5": "Opciones de color de alto contraste", - "6": "Texto blanco sobre fondo negro", - "7": "Texto negro sobre fondo blanco", - "8": "Texto amarillo sobre fondo negro", - "9": "Texto verde sobre fondo negro", - "10": "Elegir Color de Texto", - "11": "Elegir Color de Fondo" - }, - "submit": "Reemplazar" - }, - "replaceColorPdf": { - "tags": "Reemplazar Color,Operaciones de Página,Back end,Backend" - }, - "login": { - "title": "Iniciar sesión", - "header": "Iniciar sesión", - "signin": "Iniciar sesión", - "rememberme": "Recordarme", - "invalid": "Nombre de usuario o contraseña erróneos.", - "locked": "Su cuenta se ha bloqueado.", - "signinTitle": "Por favor, inicie sesión", - "ssoSignIn": "Iniciar sesión a través del inicio de sesión único", - "oAuth2AutoCreateDisabled": "Usuario de creación automática de OAUTH2 DESACTIVADO", - "oAuth2AdminBlockedUser": "El registro o inicio de sesión de usuarios no registrados está actualmente bloqueado. Por favor, póngase en contacto con el administrador.", - "oauth2RequestNotFound": "Solicitud de autorización no encontrada", - "oauth2InvalidUserInfoResponse": "Respuesta de información de usuario no válida", - "oauth2invalidRequest": "Solicitud no válida", - "oauth2AccessDenied": "Acceso denegado", - "oauth2InvalidTokenResponse": "Respuesta de token no válida", - "oauth2InvalidIdToken": "Token de identificación no válido", - "relyingPartyRegistrationNotFound": "No hay registro de terceros confiables", - "userIsDisabled": "El usuario está desactivado, actualmente el acceso está bloqueado para ese nombre de usuario. Por favor, póngase en contacto con el administrador.", - "alreadyLoggedIn": "Ya ha iniciado sesión en", - "alreadyLoggedIn2": "dispositivos. Cierre sesión en los dispositivos y vuelva a intentarlo.", - "toManySessions": "Tiene demasiadas sesiones activas", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF a página única", - "header": "PDF a página única", - "submit": "Convertir a página única" - }, - "pageExtracter": { - "title": "Extraer Páginas", - "header": "Extraer Páginas", - "submit": "Extraer", - "placeholder": "(por ejemplo, 1,2,8 o 4,7,12-16 o 2n-1)" - }, - "sanitizePDF": { - "title": "Limpiar archivo PDF", - "header": "Limpiar un archivo PDF", - "selectText": { - "1": "Eliminar código JavaScript", - "2": "Eliminar archivos incrustados", - "3": "Eliminar metadatos XMP", - "4": "Eliminar enlaces", - "5": "Eliminar fuentes", - "6": "Eliminar metadatos asociados al documento" - }, - "submit": "Limpiar PDF" - }, - "adjustContrast": { - "title": "Ajustar Contraste", - "header": "Ajustar Contraste", - "contrast": "Contraste:", - "brightness": "Brillo:", - "saturation": "Saturación:", - "download": "Descargar" - }, - "compress": { - "title": "Comprimir", - "header": "Comprimir PDF", - "credit": "Este servicio utiliza qpdf para compresión/optimización de PDF", - "grayscale": { - "label": "Aplicar escala de grises para compresión" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 compresión PDF,
4-6 compresión de imagen suave,
7-9 compresión de imágenes intensa reducirá drásticamente la calidad de imagen" - }, - "2": "Nivel de optimización:", - "4": "Modo automático: ajusta automáticamente la calidad para que el PDF tenga el tamaño exacto", - "5": "Tamaño esperado del PDF (por ejemplo, 25 MB, 10.8 MB, 25 KB)" - }, - "submit": "Comprimir" - }, - "decrypt": { - "passwordPrompt": "Este archivo está protegido con contraseña. Introdúzca la contraseña:", - "cancelled": "Operación cancelada para el PDF: {0}", - "noPassword": "No se proporcionó contraseña para PDF cifrado: {0}", - "invalidPassword": "Por favor, inténtelo de nuevo con la contraseña correcta.", - "invalidPasswordHeader": "Contraseña incorrecta o cifrado no compatible para PDF: {0}", - "unexpectedError": "Se produjo un error al procesar el archivo. Inténtalo nuevamente.", - "serverError": "Error del servidor al descifrar: {0}", - "success": "Archivo descifrado exitosamente." - }, - "multiTool-advert": { - "message": "Esta función también está disponible en nuestra página de herramientas múltiples. ¡Échale un vistazo para ver una interfaz de usuario página por página mejorada y funciones adicionales!" - }, - "pageRemover": { - "title": "Eliminador de páginas", - "header": "Eliminador de páginas PDF", - "pagesToDelete": "Páginas a eliminar (introducir una lista de números de página separados por coma):", - "submit": "Eliminar Páginas", - "placeholder": "(por ejemplo 1,2,6 o 1-10,15-30)" - }, - "imageToPDF": { - "title": "Imagen a PDF", - "header": "Imagen a PDF", - "submit": "Convertir", - "selectLabel": "Opciones de ajuste de imagen", - "fillPage": "Ocupar toda la página", - "fitDocumentToImage": "Ajustar página a imagen", - "maintainAspectRatio": "Mantener relación de aspecto", - "selectText": { - "2": "Rotación automática del PDF", - "3": "Lógica de archivos múltiples (únicamente activado si funciona con multiples imágenes)", - "4": "Unir en un único archivo PDF", - "5": "Convertir a PDFs separados" - } - }, - "PDFToCSV": { - "title": "PDF a CSV", - "header": "PDF a CSV", - "prompt": "Elija una página para extraer la tabla", - "submit": "Extraer" - }, - "split-by-size-or-count": { - "title": "Dividir PDF por tamaño o cantidad", - "header": "Dividir PDF por tamaño o número", - "type": { - "label": "Seleccionar tipo de división", - "size": "Por tamaño", - "pageCount": "Por número de páginas", - "docCount": "por recuento de documentos" - }, - "value": { - "label": "Introduzca valor", - "placeholder": "Introduzca tamaño (p.ej., 2MB o 3KB) or recuento (p.ej., 5)" - }, - "submit": "Enviar" - }, - "printFile": { - "title": "Imprimir archivo", - "header": "Imprimir archivo en la impresora", - "selectText": { - "1": "Seleccionar archivo para imprimir", - "2": "Introducir nombre de la impresora" - }, - "submit": "Imprimir" - }, - "licenses": { - "nav": "Licencias", - "title": "Licencias de terceros", - "header": "Licencias de terceros", - "module": "Módulo", - "version": "Versión", - "license": "Licencia" - }, - "survey": { - "nav": "Encuesta", - "title": "Encuesta Stirling-PDF", - "description": "Stirling-PDF no tiene seguimiento, por lo que queremos escuchar a nuestros usuarios para mejorar Stirling-PDF.", - "changes": "¡Stirling-PDF ha cambiado desde la última encuesta! Para obtener más información, revise nuestro artículo de blog aquí:", - "changes2": "Con estos cambios estamos obteniendo apoyo y financiamiento empresarial", - "please": "¡Considere realizar nuestra encuesta!", - "disabled": "(La ventana emergente de la encuesta se desactivará en las siguientes actualizaciones, pero estará disponible al pie de la página.)", - "button": "Realizar encuesta", - "dontShowAgain": "No volver a mostrar", - "meeting": { - "1": "Si está utilizando Stirling-PDF en el trabajo, nos encantaría hablar con usted. Ofrecemos sesiones de soporte técnico a cambio de una sesión de descubrimiento de usuario de 15 minutos.", - "2": "Es una oportunidad para:", - "3": "Obtenga ayuda con la implementación, integraciones o solución de problemas", - "4": "Brinde comentarios directos sobre el rendimiento, casos extremos y carencia de funciones", - "5": "Ayúdenos a mejorar Stirling-PDF para su uso en entornos empresariales reales", - "6": "Si está interesado, puede agendar una reunión con nuestro equipo directamente. (Sólo en inglés)", - "7": "¡Esperamos conocer sus casos de uso y mejorar aún más Stirling-PDF!", - "notInterested": "¿No es una empresa o no está interesado en una reunión?", - "button": "Reservar reunión" - } - }, - "removeImage": { - "title": "Eliminar imagen", - "header": "Eliminar imagen", - "removeImage": "Eliminar imagen", - "submit": "Eliminar imagen" - }, - "splitByChapters": { - "title": "Dividir PDF por Capítulos", - "header": "Dividir PDF por Capítulos", - "bookmarkLevel": "Nivel de Marcador", - "includeMetadata": "Incluir Metadatos", - "allowDuplicates": "Permitir Duplicados", - "desc": { - "1": "Esta herramienta divide un archivo PDF en múltiples archivos PDF según su estructura de capítulos.", - "2": "Nivel de Marcador: Elige el nivel de marcadores para dividir (0 para el nivel superior, 1 para el segundo nivel, etc.).", - "3": "Incluir Metadatos: Si está seleccionado, los metadatos del PDF original se incluirán en cada PDF dividido.", - "4": "Permitir Duplicados: Si está seleccionado, permite que múltiples marcadores en la misma página creen archivos PDF separados." - }, - "submit": "Dividir PDF" - }, - "fileChooser": { - "click": "Click", - "or": "o", - "dragAndDrop": "Arrastrar & Soltar", - "dragAndDropPDF": "Arrastrar & Soltar archivo PDF", - "dragAndDropImage": "Arrastrar & Soltar archivo de Imagen", - "hoveredDragAndDrop": "Arrastrar & Soltar archivos(s) aquí", - "extractPDF": "Extrayendo..." - }, - "releases": { - "footer": "Versiones", - "title": "Notas de la versión", - "header": "Notas de la versión", - "current": { - "version": "versión Actual" - }, - "note": "Las notas de la versión solo están disponibles en Inglés" - }, - "cookieBanner": { - "popUp": { - "title": "Cómo usamos las cookies", - "description": { - "1": "Usamos cookies y otras tecnologías para optimizar el funcionamiento de Stirling PDF, lo que contribuye a mejorar nuestras herramientas y a seguir desarrollando funciones que serán de su interés.", - "2": "Si prefiere no hacerlo, al hacer clic en 'No gracias' se activarán únicamente las cookies esenciales necesarias para que todo funcione correctamente." - }, - "acceptAllBtn": "De acuerdo", - "acceptNecessaryBtn": "No, gracias", - "showPreferencesBtn": "Gestionar preferencias" - }, - "preferencesModal": { - "title": "Centro de Preferencias de Consentimiento", - "acceptAllBtn": "Aceptar todo", - "acceptNecessaryBtn": "Rechazar todo", - "savePreferencesBtn": "Guardar preferencias", - "closeIconLabel": "Cerrar diálogo", - "serviceCounterLabel": "Servicio|Servicios", - "subtitle": "Uso de cookies", - "description": { - "1": "Stirling PDF utiliza cookies y tecnologías similares para mejorar su experiencia y entender cómo se usan nuestras herramientas. Esto nos ayuda a mejorar el rendimiento, desarrollar las funciones que le interesan y proporcionar soporte continuo a nuestros usuarios.", - "2": "Stirling PDF no puede—y nunca podrá—rastrear ni acceder al contenido de los documentos que utiliza.", - "3": "Su privacidad y confianza son el núcleo de lo que hacemos." - }, - "necessary": { - "title": { - "1": "Cookies estrictsamente necesarias", - "2": "Siempre activado" - }, - "description": "Estas cookies son esenciales para que el sitio web funcione correctamente. Permiten funciones básicas como configurar sus preferencias de privacidad, iniciar sesión y completar formularios, por lo que no se pueden desactivar." - }, - "analytics": { - "title": "Análisis", - "description": "Estas cookies nos ayudan a entender cómo se están utilizando nuestras herramientas, para que podamos centrarnos en desarrollar las funciones que nuestra comunidad valora más. Tenga la seguridad de que Stirling PDF no puede y nunca podrá rastrear el contenido de los documentos con los que trabaja." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/eu-ES/translation.json b/frontend/dist/locales/eu-ES/translation.json deleted file mode 100644 index 19ffcd85b..000000000 --- a/frontend/dist/locales/eu-ES/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Font Size", - "fontName": "Font Name", - "title": "Gehitu orrialde-zenbakiak", - "header": "Gehitu orrialde-zenbakiak", - "selectText": { - "1": "Aukeratu PDF fitxategia:", - "2": "Marjinaren tamaina", - "3": "Posizioa", - "4": "Hasiera-zenbakia", - "5": "Orrialde kopurua", - "6": "Testu pertsonalizatua" - }, - "customTextDesc": "Testu pertsonalizatua", - "numberPagesDesc": "Zein orri numeratu, lehenetsita 'denak', 1-5 edo 2,5,9 etab onartzen ditu", - "customNumberDesc": "Lehenetsoa {n}-ra, '{n} orria {total}-tik', 'Text-{n}', '{filename}-{n}' ere onartzen du", - "submit": "Gehitu orrialde-zenbakiak" - }, - "pdfPrompt": "Hautatu PDFa(k)", - "multiPdfPrompt": "Hautatu PDFak (2+)", - "multiPdfDropPrompt": "Hautatu (edo arrastatu eta jaregin) nahi dituzun PDFak", - "imgPrompt": "Hautatu Irudia(k)", - "genericSubmit": "Bidali", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Oharra: prozesu honetarako minutu bat ere beharko da fitxategiaren tamaiaren arabera", - "pageOrderPrompt": "Orrialdeen ordena (sartu komaz bereizitako orrialde-zenbakien zerrenda)", - "pageSelectionPrompt": "Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :", - "goToPage": "Joan", - "true": "Egiazkoa", - "false": "Faltsua", - "unknown": "Ezezaguna", - "save": "Gorde", - "saveToBrowser": "Save to Browser", - "close": "Itxi", - "filesSelected": "Hautatutako fitxategiak", - "noFavourites": "Ez dira gogokoak gehitu", - "downloadComplete": "Download Complete", - "bored": "Itxaroten aspertuta?", - "alphabet": "Alfabetoa", - "downloadPdf": "PDFa deskargatu", - "text": "Testua", - "font": "Letra-tipoa", - "selectFillter": "-- Aukeratu filtroa --", - "pageNum": "Orrialde-zenbakia", - "sizes": { - "small": "Txikia", - "medium": "Erdikoa", - "large": "Handia", - "x-large": "Oso handia" - }, - "error": { - "pdfPassword": "PDF dokumentua pasahitzarekin babestuta dago eta pasahitza ez da sartu edo okerra da", - "_value": "Error", - "sorry": "Sorry for the issue!", - "needHelp": "Need help / Found an issue?", - "contactTip": "If you're still having trouble, don't hesitate to reach out to us for help. You can submit a ticket on our GitHub page or contact us through Discord:", - "404": { - "head": "404 - Page Not Found | Oops, we tripped in the code!", - "1": "We can't seem to find the page you're looking for.", - "2": "Something went wrong" - }, - "github": "Submit a ticket on GitHub", - "showStack": "Show Stack Trace", - "copyStack": "Copy Stack Trace", - "githubSubmit": "GitHub - Submit a ticket", - "discordSubmit": "Discord - Submit Support post" - }, - "delete": "ezabatu", - "username": "Erabiltzaile izena", - "password": "Pasahitza", - "welcome": "Ongi etorria", - "property": "Propietate", - "black": "Beltza", - "white": "Txuria", - "red": "Gorria", - "green": "Berdea", - "blue": "Urdina", - "custom": "Pertsonalizatu...", - "WorkInProgess": "Work in progress, May not work or be buggy, Please report any problems!", - "poweredBy": "Powered by", - "yes": "Yes", - "no": "No", - "changedCredsMessage": "Credentials changed!", - "notAuthenticatedMessage": "User not authenticated.", - "userNotFoundMessage": "User not found.", - "incorrectPasswordMessage": "Current password is incorrect.", - "usernameExistsMessage": "New Username already exists.", - "invalidUsernameMessage": "Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.", - "invalidPasswordMessage": "The password must not be empty and must not have spaces at the beginning or end.", - "confirmPasswordErrorMessage": "New Password and Confirm New Password must match.", - "deleteCurrentUserMessage": "Cannot delete currently logged in user.", - "deleteUsernameExistsMessage": "The username does not exist and cannot be deleted.", - "downgradeCurrentUserMessage": "Ezin da uneko erabiltzailearen rola jaitsi", - "disabledCurrentUserMessage": "The current user cannot be disabled", - "downgradeCurrentUserLongMessage": "Ezin da uneko erabiltzailearen rola jaitsi. Beraz, oraingo erabiltzailea ez da erakutsiko.", - "userAlreadyExistsOAuthMessage": "The user already exists as an OAuth2 user.", - "userAlreadyExistsWebMessage": "The user already exists as an web user.", - "oops": "Oops!", - "help": "Help", - "goHomepage": "Go to Homepage", - "joinDiscord": "Join our Discord server", - "seeDockerHub": "See Docker Hub", - "visitGithub": "Visit Github Repository", - "donate": "Donate", - "color": "Color", - "sponsor": "Sponsor", - "info": "Info", - "pro": "Pro", - "page": "Page", - "pages": "Pages", - "loading": "Loading...", - "addToDoc": "Add to Document", - "reset": "Reset", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Privacy Policy", - "terms": "Terms and Conditions", - "accessibility": "Accessibility", - "cookie": "Cookie Policy", - "impressum": "Impressum", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Pipeline Menu (Beta)", - "uploadButton": "Upload Custom", - "configureButton": "Configure", - "defaultOption": "Custom", - "submitButton": "Submit", - "help": "Pipeline Help", - "scanHelp": "Folder Scanning Help", - "deletePrompt": "Are you sure you want to delete pipeline", - "tags": "automate,sequence,scripted,batch-process", - "title": "Hodia" - }, - "pipelineOptions": { - "header": "Pipeline Configuration", - "pipelineNameLabel": "Pipeline Name", - "saveSettings": "Save Operation Settings", - "pipelineNamePrompt": "Enter pipeline name here", - "selectOperation": "Select Operation", - "addOperationButton": "Add operation", - "pipelineHeader": "Pipeline:", - "saveButton": "Download", - "validateButton": "Validate" - }, - "enterpriseEdition": { - "button": "Upgrade to Pro", - "warning": "This feature is only available to Pro users.", - "yamlAdvert": "Stirling PDF Pro supports YAML configuration files and other SSO features.", - "ssoAdvert": "Looking for more user management features? Check out Stirling PDF Pro" - }, - "analytics": { - "title": "Do you want make Stirling PDF better?", - "paragraph1": "Stirling PDF has opt in analytics to help us improve the product. We do not track any personal information or file contents.", - "paragraph2": "Please consider enabling analytics to help Stirling-PDF grow and to allow us to understand our users better.", - "enable": "Enable analytics", - "disable": "Disable analytics", - "settings": "You can change the settings for analytics in the config/settings.yml file" - }, - "navbar": { - "favorite": "Favorites", - "recent": "New and recently updated", - "darkmode": "Modu iluna", - "language": "Languages", - "settings": "Ezarpenak", - "allTools": "Tools", - "multiTool": "Multi Tools", - "search": "Search", - "sections": { - "organize": "Organize", - "convertTo": "Convert to PDF", - "convertFrom": "Convert from PDF", - "security": "Sign & Security", - "advance": "Advanced", - "edit": "View & Edit", - "popular": "Popular" - } - }, - "settings": { - "title": "Ezarpenak", - "update": "Eguneratze eskuragarria", - "updateAvailable": "{0} is the current installed version. A new version ({1}) is available.", - "appVersion": "Aplikazioaren bertsioa:", - "downloadOption": { - "title": "Hautatu deskargatzeko aukera (fitxategi bakarra deskargatzeko ZIP gabe):", - "1": "Ireki leiho berean", - "2": "Ireki leiho berrian", - "3": "Deskargatu fitxategia" - }, - "zipThreshold": "ZIP fitxategiak deskargatutako fitxategi kopurua gainditzen denean", - "signOut": "Saioa itxi", - "accountSettings": "Kontuaren ezarpenak", - "bored": { - "help": "Enables easter egg game" - }, - "cacheInputs": { - "name": "Save form inputs", - "help": "Enable to store previously used inputs for future runs" - } - }, - "changeCreds": { - "title": "Change Credentials", - "header": "Update Your Account Details", - "changePassword": "You are using default login credentials. Please enter a new password", - "newUsername": "New Username", - "oldPassword": "Current Password", - "newPassword": "New Password", - "confirmNewPassword": "Confirm New Password", - "submit": "Submit Changes" - }, - "account": { - "title": "Kontuaren ezarpenak", - "accountSettings": "Kontuaren ezarpenak", - "adminSettings": "Admin ezarpenak - Ikusi eta gehitu Erabiltzaileak", - "userControlSettings": "Erabiltzaile ezarpen kontrolak", - "changeUsername": "Aldatu erabiltzaile izena", - "newUsername": "Erabiltzaile izen berria", - "password": "Konfirmatu pasahitza", - "oldPassword": "Pasahitz zaharra", - "newPassword": "Pasahitz berria", - "changePassword": "Aldatu pasahitza", - "confirmNewPassword": "Konfirmatu pasahitz berria", - "signOut": "Saioa itxi", - "yourApiKey": "Zure API Key", - "syncTitle": "Sinkronizatu nabigatzailearen ezarpenak zure kontuarekin", - "settingsCompare": "Ezarpenen konparaketa:", - "property": "Propietatea", - "webBrowserSettings": "Web nabigatzailearen ezarpenak", - "syncToBrowser": "Sync Kontua -> Nabigatzailea", - "syncToAccount": "Sync Kontua <- Nabigatzailea" - }, - "adminUserSettings": { - "title": "Erabiltzailearen Ezarpenen Kontrolak", - "header": "Admin Erabiltzailearen Ezarpenen Kontrolak", - "admin": "Admin", - "user": "Erabiltzaile", - "addUser": "Erabiltzaile berria", - "deleteUser": "Delete User", - "confirmDeleteUser": "Should the user be deleted?", - "confirmChangeUserStatus": "Should the user be disabled/enabled?", - "usernameInfo": "Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.", - "roles": "Rolak", - "role": "Rol", - "actions": "Ekintzak", - "apiUser": "APIren erabiltzaile mugatua", - "extraApiUser": "Additional Limited API User", - "webOnlyUser": "Web-erabiltzailea bakarrik", - "demoUser": "Demo User (No custom settings)", - "internalApiUser": "Internal API User", - "forceChange": "Force user to change password on login", - "submit": "Gorde Erabiltzailea", - "changeUserRole": "Erabiltzailearen rola aldatu", - "authenticated": "Authenticated", - "editOwnProfil": "Edit own profile", - "enabledUser": "enabled user", - "disabledUser": "disabled user", - "activeUsers": "Active Users:", - "disabledUsers": "Disabled Users:", - "totalUsers": "Total Users:", - "lastRequest": "Last Request", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Database Import/Export", - "header": "Database Import/Export", - "fileName": "File Name", - "creationDate": "Creation Date", - "fileSize": "File Size", - "deleteBackupFile": "Delete Backup File", - "importBackupFile": "Import Backup File", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Download Backup File", - "info_1": "When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.", - "info_2": "The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.", - "submit": "Import Backup", - "importIntoDatabaseSuccessed": "Import into database successed", - "backupCreated": "Database backup successful", - "fileNotFound": "File not Found", - "fileNullOrEmpty": "File must not be null or empty", - "failedImportFile": "Failed Import File", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "Your session has expired. Please refresh the page and try again.", - "refreshPage": "Refresh Page" - }, - "home": { - "desc": "Zure leihatila bakarra autoostatatua zure PDF behar guztietarako", - "searchBar": "Search for features...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "View, annotate, add text or images" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "Erabilera anitzeko tresna PDF", - "desc": "Orriak konbinatu, biratu, berrantolatu eta ezabatu" - }, - "merge": { - "title": "Elkartu", - "desc": "Elkartu zenbait PDF dokumentu bakar batean modu errazean" - }, - "split": { - "title": "Zatitu", - "desc": "Zatitu PDFak zenbait dokumentutan" - }, - "rotate": { - "title": "Biratu", - "desc": "Biratu PDFak modu errazean" - }, - "imageToPdf": { - "title": "Irudia PDF bihurtu", - "desc": "Irudi bat(PNG, JPEG, GIF)PDF bihurtu" - }, - "pdfToImage": { - "title": "PDFa irudi bihurtu", - "desc": "PDF bat irudi (PNG, JPEG, GIF) bihurtu" - }, - "pdfOrganiser": { - "title": "Antolatzailea", - "desc": "Ezabatu/Berrantolatu orrialdeak edozein ordenatan" - }, - "addImage": { - "title": "Gehitu irudia PDFari", - "desc": "Gehitu irudi bat PDFan ezarritako kokaleku batean (lanean)" - }, - "watermark": { - "title": "Gehitu ur-marka", - "desc": "Gehitu aurrez zehaztutako ur-marka bat PFD dokumentuari" - }, - "permissions": { - "title": "Aldatu baimenak", - "desc": "Aldatu PDF dokumentuaren baimenak" - }, - "removePages": { - "title": "Ezabatu", - "desc": "Ezabatu nahi ez dituzun orrialdeak PDF dokumentutik" - }, - "addPassword": { - "title": "Gehitu pasahitza", - "desc": "Enkriptatu PDF dokumentua pasahitz batekin" - }, - "removePassword": { - "title": "Ezabatu pasahitza", - "desc": "Ezabatu pasahitza PDF dokumentutik" - }, - "compressPdfs": { - "title": "Konprimatu", - "desc": "Konprimatu PDFak fitxategiaren tamaina murrizteko" - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Aldatu metadatuak", - "desc": "Aldatu/Ezabatu/Gehitu metadatuak PDF dokumentuari" - }, - "fileToPDF": { - "title": "Fitxategia PDF bihurtu", - "desc": "PDF bihurtu ia edozein fitxategi (DOCX, PNG, XLS, PPT, TXT eta gehiago)" - }, - "ocr": { - "title": "OCR exekutatu PDFan eta/edo garbiketa-eskaneatzeak", - "desc": "Garbiketa-eskaneatzeak eta irudi-testuak detektatu PDF baten barruan eta berriz ere gehitu testu gisa" - }, - "extractImages": { - "title": "Atera irudiak", - "desc": "Atera irudi guztiak PDF batetik eta ZIPen gorde" - }, - "pdfToPDFA": { - "title": "PDFa PDF/A bihurtu", - "desc": "PDFa PDF/A bihurtu luzaro biltegiratzeko" - }, - "PDFToWord": { - "title": "PDFa Word Bihurtu", - "desc": "PDF formatuak Word bihurtu (DOC, DOCX y ODT)" - }, - "PDFToPresentation": { - "title": "PDFa aurkezpen bihurtu", - "desc": "PDFa aurkezpen formatu bihurtu (PPT, PPTX y ODP)" - }, - "PDFToText": { - "title": "PDFa TXT edo RTF bihurtu", - "desc": "PDFa TXT edo RTF formatu bihurtu" - }, - "PDFToHTML": { - "title": "PDFa HTML bihurtu", - "desc": "PDFa HTML formatu bihurtu" - }, - "PDFToXML": { - "title": "PDFa XML bihurtu", - "desc": "PDFa XML formatu bihurtu" - }, - "ScannerImageSplit": { - "title": "Detektatu/Zatitu argazki eskaneatuak", - "desc": "Hainbat argazki zatitu argazki/PDF baten barruan" - }, - "sign": { - "title": "Sinatu", - "desc": "Gehitu sinadura PDFari marrazki, testu edo irudi bidez" - }, - "flatten": { - "title": "Lautu", - "desc": "PDF batetik elementu eta inprimaki interaktibo guztiak ezabatu" - }, - "repair": { - "title": "Konpondu", - "desc": "Saiatu PDF hondatu/kaltetu bat konpontzen" - }, - "removeBlanks": { - "title": "Ezabatu orrialde zuriak", - "desc": "Detektatu orrialde zuriak eta dokumentutik ezabatu" - }, - "removeAnnotations": { - "title": "Remove Annotations", - "desc": "Removes all comments/annotations from a PDF" - }, - "compare": { - "title": "Konparatu", - "desc": "Konparatu eta erakutsi 2 PDF dokumenturen aldeak" - }, - "certSign": { - "title": "Sinatu ziurtagiriarekin", - "desc": "Sinatu PDF bat Ziurtagiri/Gako batekin (PEM/P12)" - }, - "removeCertSign": { - "title": "Remove Certificate Sign", - "desc": "Remove certificate signature from PDF" - }, - "pageLayout": { - "title": "Zenbait orrialderen diseinua", - "desc": "Elkartu orri bakar batean PDF dokumentu baten zenbait orrialde" - }, - "scalePages": { - "title": "Eskalatu/Doitu orrialdearen tamaina", - "desc": "Eskalatu/Aldatu orrialde baten tamaina eta/edo edukia" - }, - "pipeline": { - "title": "Hodia (Aurreratua)", - "desc": "Egin hainbat ekintza PDFn, hodi-script-ak definituz" - }, - "add-page-numbers": { - "title": "Gehitu orrialde-zenbakiak", - "desc": "Gehitu orrialde-zenbakiak dokumentu batean, kokapen jakin batean" - }, - "auto-rename": { - "title": "Auto Aldatu PDF fitxategiaren izena", - "desc": "Automatikoki izena ematen dio detektatutako goiburuan oinarritutako PDF fitxategi bati" - }, - "adjust-contrast": { - "title": "Koloreak/kontrastea doitu", - "desc": "PDF baten kontrastea, saturazioa eta distira doitzea" - }, - "crop": { - "title": "Moztu PDF", - "desc": "Egin klik PDFn tamaina txikitzeko (textua mantentzen du!)" - }, - "autoSplitPDF": { - "title": "Orriak automatikoki banandu", - "desc": "Auto Split Scanned PDF with physical scanned page splitter QR Code" - }, - "sanitizePdf": { - "title": "Desinfektatu", - "desc": "Ezabatu script-ak eta PDF fitxategietako beste elementu batzuk" - }, - "URLToPDF": { - "title": "URL/Website PDF pdf bihurtu", - "desc": "Bihurtu edozein URL PDF fitxategian" - }, - "HTMLToPDF": { - "title": "HTML PDF-ra", - "desc": "Bihurtu edozein HTML edo zip fitxategi PDFra" - }, - "MarkdownToPDF": { - "title": "Markdown PDF-ra", - "desc": "Bihurtu Markdown fitxategi guztiak PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Lortu informazio guztia PDF-tik", - "desc": "Eskuratu PDF fitxategiko Informazio guztia" - }, - "extractPage": { - "title": "Orria(k) atera", - "desc": "Aukeratutako orriak PDF fitxategitik atera" - }, - "PdfToSinglePage": { - "title": "PDF fitxategia, orrialde handi bakar batera", - "desc": "PDF orri guztiak orri handi bakar batean konbinatzen ditu" - }, - "showJS": { - "title": "Javascript erakutsi", - "desc": "Bilatu eta erakutsi PDF batean injektatutako edozein JS" - }, - "autoRedact": { - "title": "Auto Idatzi", - "desc": "Auto Idatzi testua pdf fitxategian sarrerako testuan oinarritua" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF to CSV", - "desc": "Extracts Tables from a PDF converting it to CSV" - }, - "autoSizeSplitPDF": { - "title": "Auto Split by Size/Count", - "desc": "Split a single PDF into multiple documents based on size, page count, or document count" - }, - "overlay-pdfs": { - "title": "Overlay PDFs", - "desc": "Overlays PDFs on-top of another PDF" - }, - "split-by-sections": { - "title": "Split PDF by Sections", - "desc": "Divide each page of a PDF into smaller horizontal and vertical sections" - }, - "AddStampRequest": { - "title": "Add Stamp to PDF", - "desc": "Add text or add image stamps at set locations" - }, - "removeImagePdf": { - "title": "Remove image", - "desc": "Remove image from PDF to reduce file size" - }, - "splitPdfByChapters": { - "title": "Split PDF by Chapters", - "desc": "Split a PDF into multiple files based on its chapter structure." - }, - "validateSignature": { - "title": "Validate PDF Signature", - "desc": "Verify digital signatures and certificates in PDF documents" - }, - "replaceColorPdf": { - "title": "Replace and Invert Color", - "desc": "Replace color for text and background in PDF and invert full color of pdf to reduce file size" - } - }, - "viewPdf": { - "tags": "view,read,annotate,text,image", - "title": "View/Edit PDF", - "header": "View PDF" - }, - "multiTool": { - "tags": "Multi Tool,Multi operation,UI,click drag,front end,client side", - "title": "PDF erabilera anitzeko tresna", - "header": "PDF erabilera anitzeko tresna", - "uploadPrompts": "File Name", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "selectPages": "Page Select", - "selectedPages": "Selected Pages", - "page": "Page", - "deleteSelected": "Delete Selected", - "downloadAll": "Export", - "downloadSelected": "Export Selected", - "insertPageBreak": "Insert Page Break", - "addFile": "Add File", - "rotateLeft": "Rotate Left", - "rotateRight": "Rotate Right", - "split": "Split", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "Delete", - "dragDropMessage": "Page(s) Selected", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "merge,Page operations,Back end,server side", - "title": "Elkartu", - "header": "Elkartu zenbait PDF (2+)", - "sortByName": "Sort by nameOrdenatu izenaren arabera", - "sortByDate": "Ordenatu dataren arabera", - "removeCertSign": "Remove digital signature in the merged file?", - "submit": "Elkartu" - }, - "split": { - "tags": "Page operations,divide,Multi Page,cut,server side", - "title": "Zatitu PDFa", - "header": "Zatitu PDFa", - "desc": { - "1": "Hautatzen dituzun zenbakiak zatiketa egin nahi duzun orrialde-zenbakiak dira", - "2": "Beraz, 1,3,7-9 hautatzean 10 orrialdeko dokumentua zatituko luke 6 PDF fitxategi bereizituetan", - "3": "#1 Dokumentua: 1. orrialdea", - "4": "#2 Dokumentua: 2. eta 3. orrialdeak", - "5": "#3 Dokumentua: 4., 5., 6. eta 7. orrialdeak", - "6": "#4 Dokumentua: 8. orrialdea", - "7": "#5 Dokumentua: 9. orrialdea", - "8": "#6 Dokumentua: 10. orrialdeak" - }, - "splitPages": "Sartu orrialdeak zatitzeko:", - "submit": "Zatitu" - }, - "rotate": { - "tags": "server side", - "title": "Biratu PDFa", - "header": "Biratu PDFa", - "selectAngle": "Hautatu errotazio-angelua (90 graduko multiploetan):", - "submit": "Biratu" - }, - "imageToPdf": { - "tags": "conversion,img,jpg,picture,photo" - }, - "pdfToImage": { - "tags": "conversion,img,jpg,picture,photo", - "title": "PDFa irudi bihurtu", - "header": "PDFa irudi bihurtu", - "selectText": "Irudi-formatua", - "singleOrMultiple": "Ondoriozko irudi-mota", - "single": "Irudi handi bakarra", - "multi": "Zenbait irudi", - "colorType": "Kolore-mota", - "color": "Kolorea", - "grey": "Gris-eskala", - "blackwhite": "Zuria eta Beltza (Datuak galdu ditzake!)", - "submit": "Bihurtu", - "info": "Python is not installed. Required for WebP conversion.", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,even,odd,sort,move", - "title": "Orrialdeen antolatzailea", - "header": "PDF orrialdeen antolatzailea", - "submit": "Antolatu orrialdeak", - "mode": { - "_value": "Mode", - "1": "Custom Page Order", - "2": "Reverse Order", - "3": "Duplex Sort", - "4": "Booklet Sort", - "5": "Side Stitch Booklet Sort", - "6": "Odd-Even Split", - "7": "Remove First", - "8": "Remove Last", - "9": "Remove First and Last", - "10": "Odd-Even Merge", - "11": "Duplicate all pages" - }, - "placeholder": "(e.g. 1,3,2 or 4-8,2,10-12 or 2n-1)" - }, - "addImage": { - "tags": "img,jpg,picture,photo", - "title": "Gehitu irudia", - "header": "Gehitu PDF-irudia", - "everyPage": "Orrialde guztiak?", - "upload": "Gehitu irudia", - "submit": "Gehitu irudia" - }, - "watermark": { - "tags": "Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo", - "title": "Gehitu ur-marka", - "header": "Gehitu ur-marka", - "customColor": "Custom Text Color", - "selectText": { - "1": "Hautatu PDFa ur-marka gehitzeko:", - "2": "Ur-markaren testua:", - "3": "Letra-tipoaren tamaina:", - "4": "Errotazioa (0-360):", - "5": "Zabalera (ur-marka bakoitzaren arteko espazioa horizontalean):", - "6": "Altuera (ur-marka bakoitzaren arteko espazioa bertikalean):", - "7": "Opakutasuna (0% - 100%):", - "8": "Watermark Type:", - "9": "Watermark Image:", - "10": "Convert PDF to PDF-Image" - }, - "submit": "Gehitu ur-marka", - "type": { - "1": "Text", - "2": "Image" - } - }, - "permissions": { - "tags": "read,write,edit,print", - "title": "Aldatu baimenak", - "header": "Aldatu baimenak", - "warning": "Oharra: baimen hauek aldatzea ezinezkoa izan dadin, gomendatzen da pasahitz batekin konfiguratzea pasahitza aldatzeko orriaren bitartez", - "selectText": { - "1": "Hautatu PDFa baimenak aldatzeko", - "2": "Baimenak, ezarri beharrekoak", - "3": "Galarazi dokumentuaren mihiztaketa", - "4": "Galarazi edukia ateratzea", - "5": "Galarazi ateratzea irisgarritasunerako", - "6": "Galarazi inprimakia betetzea", - "7": "Galarazi aldaketak egitea", - "8": "Galarazi oharrak aldatzea", - "9": "Galarazi inprimatzea", - "10": "Galarazi zenbait formatu inprimatzea" - }, - "submit": "Aldatu" - }, - "removePages": { - "tags": "Remove pages,delete pages" - }, - "addPassword": { - "tags": "secure,security", - "title": "Gehitu pasahitza", - "header": "Gehitu pasahitza (enkriptatu)", - "selectText": { - "1": "Hautatu PDFa enkriptatzeko", - "2": "Pasahitza", - "3": "Gakoaren luzera", - "4": "Balio altuak sendoagoak dira, baina balio baxuek bateragarritasun hobea dute", - "5": "Ezartzeko baimenak", - "6": "Galarazi dokumentuaren mihiztaketa", - "7": "Galarazi edukia ateratzea", - "8": "Galarazi ateratzea irisgarritasunerako", - "9": "Galarazi inprimakia betetzea", - "10": "Galarazi aldaketak egitea", - "11": "Galarazi oharrak aldatzea", - "12": "Galarazi inprimatzea", - "13": "Galarazi zenbait formatu inprimatzea", - "14": "Pasahitza", - "15": "Mugatu zer egin daitekeen dokumentuarekin behin zabalduta (Irakurle guztiek onartu gabe)", - "16": "Mugatu dokumentu bera zabaltzeko aukera" - }, - "submit": "Enkriptatu" - }, - "removePassword": { - "tags": "secure,Decrypt,security,unpassword,delete password", - "title": "Ezabatu pasahitza", - "header": "Ezabatu pasahitza (desenkriptatu)", - "selectText": { - "1": "Hautatu PDFa desenkriptatzeko", - "2": "Pasahitza" - }, - "submit": "Ezabatu" - }, - "compressPdfs": { - "tags": "squish,small,tiny" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Title,author,date,creation,time,publisher,producer,stats", - "title": "Izenburua:", - "header": "Aldatu metadatuak", - "selectText": { - "1": "Editatu aldatu nahi dituzun aldagaiak", - "2": "Ezabatu metadatu guztiak", - "3": "Erakutsi metadatu pertsonalizatuak:", - "4": "Beste metadatu batzuk:", - "5": "Gehitu metadatu pertsonalizatuen sarrera" - }, - "author": "Egilea:", - "creationDate": "Sortze-data (aaaa/MM/dd HH:mm:ss):", - "creator": "Sortzailea:", - "keywords": "Gako-hitzak:", - "modDate": "Aldatze-data (aaaa/MM/dd HH:mm:ss):", - "producer": "Ekoizlea:", - "subject": "Gaia:", - "trapped": "Trapped:", - "submit": "Aldatu" - }, - "fileToPDF": { - "tags": "transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint", - "title": "Fitxategia PDF bihurtu", - "header": "Edozein fitxategi PDF bihurtu", - "credit": "Zerbitzu honek LibreOffice eta Unoconv erabiltzen ditu fitxategiak bihurtzeko", - "supportedFileTypesInfo": "Supported File types", - "supportedFileTypes": "Jasandako fitxategi-motek behekoak barne hartu behar dituzte; hala ere, jasandako formatuen zerrenda osoa eta eguneratua izateko, kontsultatu, mesedez, LibreOffice-en dokumentazioa", - "submit": "PDF bihurtu" - }, - "ocr": { - "tags": "recognition,text,image,scan,read,identify,detection,editable", - "title": "OCR / Garbiketa-eskaneatzea", - "header": "Garbiketa-eskaneatzea / OCR (Karaktere-ezagutze optikoa)", - "selectText": { - "1": "Hautatu PDFan detektatuko diren hizkuntzak (zerrendatutakoak gaur egun detektatzen dituenak dira):", - "2": "Sortu OCR testua duen testu-fitxategi bat OCR-ren bidez editatutako PDFarekin batera", - "3": "Zuzendu angelu okertu batean eskaneatu ziren orrialdeak berriro beren lekura biratuta", - "4": "Garbitu orrialdea OCRk hondoko zaratan testua aurkitzeko probabilitate txikiagoa izan dezan (Irteeran aldatu gabe)", - "5": "Garbitu orrialdea OCRk hondoko zaratan testua aurkitzeko probabilitate txikiagoa izan dezan, irteeran garbi mantentzen du.", - "6": "Alde batera utzi testu interaktiboa duten orrialdeak, bakarrik irudi diren OCR orrialdeak", - "7": "OCR behartu, OCRk orrialde bakoitzean jatorrizko testu guztia ezabatuko du", - "8": "Normala (Errorea gertatuko da PDFak testua baldin badu)", - "9": "Ezarpen gehigarriak", - "10": "OCR modua", - "11": "Irudiak ezabatu OCR-ren ondoren (Irudi GUZTIAK ezabatzen ditu, bakarrik da erabilgarri bihurketa urratsaren parte baldin bada)", - "12": "Prozesaketa-mota (aurreratua)" - }, - "help": "Irakurri honen erabilerari buruzko dokumentazioa beste hizkuntza batzuetarako eta/edo ez erabili Docker-en", - "credit": "Zerbitzu honek qpdf eta OCR-rako Tesseract erabiltzen ditu", - "submit": "PDF prozesatu OCR-rekin" - }, - "extractImages": { - "tags": "picture,photo,save,archive,zip,capture,grab", - "title": "Atera irudiak", - "header": "Atera irudiak", - "selectText": "Hautatu irudi-formatua ateratako irudiak bihurtzeko", - "allowDuplicates": "Save duplicate images", - "submit": "Atera" - }, - "pdfToPDFA": { - "tags": "archive,long-term,standard,conversion,storage,preservation", - "title": "PDFa PDF/A bihurtu", - "header": "PDFa PDF/A bihurtu", - "credit": "Zerbitzu honek libreoffice erabiltzen du PDFak PDF/A bihurtzeko", - "submit": "Bihurtu", - "tip": "Currently does not work for multiple inputs at once", - "outputFormat": "Output format", - "pdfWithDigitalSignature": "The PDF contains a digital signature. This will be removed in the next step." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile", - "title": "PDFa Word bihurtu", - "header": "PDFa Word bihurtu", - "selectText": { - "1": "Irteerako fitxategiaren formatua" - }, - "credit": "Zerbitzu honek LibreOffice erabiltzen du fitxategiak bihurtzeko", - "submit": "Bihurtu" - }, - "PDFToPresentation": { - "tags": "slides,show,office,microsoft", - "title": "PDFa aurkezpen bihurtu", - "header": "PDFa aurkezpen bihurtu", - "selectText": { - "1": "Irteerako fitxategiaren formatua" - }, - "credit": "Zerbitzu honek LibreOffice erabiltzen du fitxategiak bihurtzeko", - "submit": "Bihurtu" - }, - "PDFToText": { - "tags": "richformat,richtextformat,rich text format", - "title": "PDFa TXT/RTF bihurtu", - "header": "PDFa TXT/RTF bihurtu", - "selectText": { - "1": "Irteerako fitxategiaren formatua" - }, - "credit": "Zerbitzu honek LibreOffice erabiltzen du fitxategiak bihurtzeko", - "submit": "Bihurtu" - }, - "PDFToHTML": { - "tags": "web content,browser friendly", - "title": "PDFa HTML bihurtu", - "header": "PDFa HTML bihurtu", - "credit": "Zerbitzu honek pdftohtml erabiltzen du fitxategiak bihurtzeko", - "submit": "Bihurtu" - }, - "PDFToXML": { - "tags": "data-extraction,structured-content,interop,transformation,convert", - "title": "PDFa XML bihurtu", - "header": "PDFa XML bihurtu", - "credit": "Zerbitzu honek LibreOffice erabiltzen du fitxategiak bihurtzeko", - "submit": "Bihurtu" - }, - "ScannerImageSplit": { - "tags": "separate,auto-detect,scans,multi-photo,organize", - "selectText": { - "1": "Angeluaren gutxieneko balioa:", - "2": "Ezarri eskatutako gutxieneko angelu absolutua irudia biratzeko (lehenetsia: 10).", - "3": "Tolerantzia:", - "4": "Ezarri kalkulatutako atzeko kolorearen inguruko kolorearen aldakuntza tartea (lehenetsia: 30).", - "5": "Gutxieneko area:", - "6": "Ezarri arearen gutxieneko balioa argazki batentzat (lehenetsia: 10000).", - "7": "Inguruko area gutxienekoa:", - "8": "Ezarri inguruko arearen gutxieneko balioa argazki batentzat", - "9": "Ertzaren tamaina:", - "10": "Ezarri gehitutako eta ezabatutako ertzaren tamaina irteeran ertz zuriak saihesteko (lehenetsia: 1)." - }, - "info": "Python is not installed. It is required to run." - }, - "sign": { - "tags": "authorize,initials,drawn-signature,text-sign,image-signature", - "title": "Sinatu", - "header": "Sinatu PDF fitxategiak", - "upload": "Igo irudia", - "draw": "Marraztu sinadura", - "text": "Testua sartzea", - "clear": "Garbitu", - "add": "Gehitu", - "saved": "Saved Signatures", - "save": "Save Signature", - "personalSigs": "Personal Signatures", - "sharedSigs": "Shared Signatures", - "noSavedSigs": "No saved signatures found", - "addToAll": "Add to all pages", - "delete": "Delete", - "first": "First page", - "last": "Last page", - "next": "Next page", - "previous": "Previous page", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "static,deactivate,non-interactive,streamline", - "title": "Lautu", - "header": "Akoplatu PDF fitxategiak", - "flattenOnlyForms": "Flatten only forms", - "submit": "Lautu" - }, - "repair": { - "tags": "fix,restore,correction,recover", - "title": "Konpondu", - "header": "Konpondu PDF fitxategiak", - "submit": "Konpondu" - }, - "removeBlanks": { - "tags": "cleanup,streamline,non-content,organize", - "title": "Ezabatu zuriuneak", - "header": "Ezabatu orrialde zuriak", - "threshold": "Gutxieneko balioa:", - "thresholdDesc": "Pixel bat zeinen zuri izan behar den ezartzeko gutxieneko balioa", - "whitePercent": "Zuriaren protzentajea (%):", - "whitePercentDesc": "Zuria izan behar den orriaren ehunekoa ezabatua izan dadin", - "submit": "Ezabatu zuriuneak" - }, - "removeAnnotations": { - "tags": "comments,highlight,notes,markup,remove", - "title": "Remove Annotations", - "header": "Remove Annotations", - "submit": "Remove" - }, - "compare": { - "tags": "differentiate,contrast,changes,analysis", - "title": "Konparatu", - "header": "Konparatu PDF fitxategiak", - "highlightColor": { - "1": "Highlight Color 1:", - "2": "Highlight Color 2:" - }, - "document": { - "1": "1. dokumentua", - "2": "2. dokumentua" - }, - "submit": "Konparatu", - "complex": { - "message": "One or both of the provided documents are large files, accuracy of comparison may be reduced" - }, - "large": { - "file": { - "message": "One or Both of the provided documents are too large to process" - } - }, - "no": { - "text": { - "message": "One or both of the selected PDFs have no text content. Please choose PDFs with text for comparison." - } - } - }, - "certSign": { - "tags": "authenticate,PEM,P12,official,encrypt", - "title": "Ziurtagiriaren sinadura", - "header": "Sinatu PDF bat haren ziurtagiriarekin (lanean)", - "selectPDF": "Hautatu PDF fitxategi bat sinatzeko:", - "jksNote": "Note: If your certificate type is not listed below, please convert it to a Java Keystore (.jks) file using the keytool command line tool. Then, choose the .jks file option below.", - "selectKey": "Hautatu gako pribatuko fitxategia (PKCS#8 formatua, .pem edo .der izan liteke):", - "selectCert": "Hautatu ziurtagiridun fitxategia (X.509 formatua, .pem edo .der izan liteke):", - "selectP12": "Hautatu gakoak gordetzeko fitxategia PKCS#12 (.p12 o .pfx) (Aukerakoa, ematen bada, gako pribatua eta ziurtagiria izan beharko ditu):", - "selectJKS": "Select Your Java Keystore File (.jks or .keystore):", - "certType": "Ziurtagiri-mota", - "password": "Sartu zure gakoen biltegia edo gako pribatuko pasahitza (hala badagokio):", - "showSig": "Erakutsi sinadura", - "reason": "Arrazoia", - "location": "Kokalekua", - "name": "Izena", - "showLogo": "Show Logo", - "submit": "Sinatu PDFa" - }, - "removeCertSign": { - "tags": "authenticate,PEM,P12,official,decrypt", - "title": "Remove Certificate Signature", - "header": "Remove the digital certificate from the PDF", - "selectPDF": "Select a PDF file:", - "submit": "Remove Signature" - }, - "pageLayout": { - "tags": "merge,composite,single-view,organize", - "title": "Hainbat orrialderen diseinua", - "header": "Hainbat orrialderen diseinua", - "pagesPerSheet": "Orrialdeak orriko:", - "addBorder": "Add Borders", - "submit": "Entregatu" - }, - "scalePages": { - "tags": "resize,modify,dimension,adapt", - "title": "Doitu orrialdearen eskala", - "header": "Doitu orrialdearen eskala", - "pageSize": "Dokumentuaren orrialdearen tamaina", - "keepPageSize": "Original Size", - "scaleFactor": "Orriaren zoom maila (moztea)", - "submit": "Entregatu" - }, - "add-page-numbers": { - "tags": "paginate,label,organize,index" - }, - "auto-rename": { - "tags": "auto-detect,header-based,organize,relabel", - "title": "Aldatu izena", - "header": "PDF Aldatu izena", - "submit": "Aldatu izena" - }, - "adjust-contrast": { - "tags": "color-correction,tune,modify,enhance" - }, - "crop": { - "tags": "trim,shrink,edit,shape", - "title": "Moztu", - "header": "Moztu PDF", - "submit": "Bidali" - }, - "autoSplitPDF": { - "tags": "QR-based,separate,scan-segment,organize", - "title": "Auto Zatitu PDFa", - "header": "Auto Zatitu PDFa", - "description": "Inprimatu, txertatu, eskaneatu, igo eta utzi guri automatikoki bereizten zure dokumentuak. Ez da laneko eskuzko hautaketarik behar.", - "selectText": { - "1": "Inprimatu beheko zatitze-orri batzuk (beltza eta zuria ondo dago).", - "2": "Eskaneatu dokumentu guztiak batera, eta sartu banalerroa haien artean.", - "3": "Igo eskaneatutako PDF artxibo handia, eta utzi Stirling PDFri gainerakoak maneiatzen.", - "4": "Orrialde zatitzaileak automatikoki detektatu eta kentzen dira, eta azken dokumentu ordenatua bermatzen da." - }, - "formPrompt": "Submit PDF containing Stirling-PDF Page dividers:", - "duplexMode": "Duplex Mode (Front and back scanning)Duplex modua (aurreko eta atzeko azterketa)", - "dividerDownload2": "Deskargatu 'Auto Splitter Divider (with instructions).pdf'", - "submit": "Bidali" - }, - "sanitizePdf": { - "tags": "clean,secure,safe,remove-threats" - }, - "URLToPDF": { - "tags": "web-capture,save-page,web-to-doc,archive", - "title": "URL bat PDF-ra", - "header": "URL bat PDF-ra", - "submit": "Bihurty", - "credit": "WeasyPrint darabil" - }, - "HTMLToPDF": { - "tags": "markup,web-content,transformation,convert", - "title": "HTML bat PDF-ra", - "header": "HTML bat PDF-ra", - "help": "Html/css/images etab dituen HTML eta Zip fitxategiak onartzen ditu", - "submit": "Bihurtu", - "credit": "WeasyPrint darabil", - "zoom": "Zoom level for displaying the website.", - "pageWidth": "Width of the page in centimeters. (Blank to default)", - "pageHeight": "Height of the page in centimeters. (Blank to default)", - "marginTop": "Top margin of the page in millimeters. (Blank to default)", - "marginBottom": "Bottom margin of the page in millimeters. (Blank to default)", - "marginLeft": "Left margin of the page in millimeters. (Blank to default)", - "marginRight": "Right margin of the page in millimeters. (Blank to default)", - "printBackground": "Render the background of websites.", - "defaultHeader": "Enable Default Header (Name and page number)", - "cssMediaType": "Change the CSS media type of the page.", - "none": "None", - "print": "Print", - "screen": "Screen" - }, - "MarkdownToPDF": { - "tags": "markup,web-content,transformation,convert", - "title": "Markdown PDFra", - "header": "Markdown PDFra", - "submit": "Bihurtu", - "help": "Lanean", - "credit": "WeasyPrint darabil" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "infomation,data,stats,statistics", - "title": "Lortu informazioa PDFn", - "header": "Lortu informazioa PDFn", - "submit": "Lortu informazioa", - "downloadJson": "Deskargatu JSON" - }, - "extractPage": { - "tags": "extract" - }, - "PdfToSinglePage": { - "tags": "single page" - }, - "showJS": { - "tags": "JS", - "title": "Javascript erakutsi", - "header": "Javascript erakutsi", - "downloadJS": "Javascript deskargatu", - "submit": "Erakutsi" - }, - "autoRedact": { - "tags": "Redact,Hide,black out,black,marker,hidden", - "title": "Auto Idatzi", - "header": "Auto Idatzi", - "colorLabel": "Kolorea", - "textsToRedactLabel": "Idazteko testua (lerro bidez bereizia)", - "textsToRedactPlaceholder": "adib. \\nKonfidentziala \\nTop-Secret", - "useRegexLabel": "Regex erabili", - "wholeWordSearchLabel": "Hitz osoen bilaketa", - "customPaddingLabel": "Custom Extra Padding", - "convertPDFToImageLabel": "Bihurtu PDF fitxategi bat PDF-Irudi-ra (kaxaren atzean testua ezabatzeko erabilia)", - "submitButton": "Bidali" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,Table Extraction,extract,convert" - }, - "autoSizeSplitPDF": { - "tags": "pdf,split,document,organization" - }, - "overlay-pdfs": { - "tags": "Overlay", - "header": "Overlay PDF Files", - "baseFile": { - "label": "Select Base PDF File" - }, - "overlayFiles": { - "label": "Select Overlay PDF Files" - }, - "mode": { - "label": "Select Overlay Mode", - "sequential": "Sequential Overlay", - "interleaved": "Interleaved Overlay", - "fixedRepeat": "Fixed Repeat Overlay" - }, - "counts": { - "label": "Overlay Counts (for Fixed Repeat Mode)", - "placeholder": "Enter comma-separated counts (e.g., 2,3,1)" - }, - "position": { - "label": "Select Overlay Position", - "foreground": "Foreground", - "background": "Background" - }, - "submit": "Submit" - }, - "split-by-sections": { - "tags": "Section Split, Divide, Customize", - "title": "Split PDF by Sections", - "header": "Split PDF into Sections", - "horizontal": { - "label": "Horizontal Divisions", - "placeholder": "Enter number of horizontal divisions" - }, - "vertical": { - "label": "Vertical Divisions", - "placeholder": "Enter number of vertical divisions" - }, - "submit": "Split PDF", - "merge": "Merge Into One PDF" - }, - "AddStampRequest": { - "tags": "Stamp, Add image, center image, Watermark, PDF, Embed, Customize", - "header": "Stamp PDF", - "title": "Stamp PDF", - "stampType": "Stamp Type", - "stampText": "Stamp Text", - "stampImage": "Stamp Image", - "alphabet": "Alphabet", - "fontSize": "Font/Image Size", - "rotation": "Rotation", - "opacity": "Opacity", - "position": "Position", - "overrideX": "Override X Coordinate", - "overrideY": "Override Y Coordinate", - "customMargin": "Custom Margin", - "customColor": "Custom Text Color", - "submit": "Submit" - }, - "removeImagePdf": { - "tags": "Remove Image,Page operations,Back end,server side" - }, - "splitPdfByChapters": { - "tags": "split,chapters,bookmarks,organize" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "Validate PDF Signatures", - "header": "Validate Digital Signatures", - "selectPDF": "Select signed PDF file", - "submit": "Validate Signatures", - "results": "Validation Results", - "status": { - "_value": "Status", - "valid": "Valid", - "invalid": "Invalid" - }, - "signer": "Signer", - "date": "Date", - "reason": "Reason", - "location": "Location", - "noSignatures": "No digital signatures found in this document", - "chain": { - "invalid": "Certificate chain validation failed - cannot verify signer's identity" - }, - "trust": { - "invalid": "Certificate not in trust store - source cannot be verified" - }, - "cert": { - "expired": "Certificate has expired", - "revoked": "Certificate has been revoked", - "info": "Certificate Details", - "issuer": "Issuer", - "subject": "Subject", - "serialNumber": "Serial Number", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "algorithm": "Algorithm", - "keySize": "Key Size", - "version": "Version", - "keyUsage": "Key Usage", - "selfSigned": "Self-Signed", - "bits": "bits" - }, - "signature": { - "info": "Signature Information", - "_value": "Signature", - "mathValid": "Signature is mathematically valid BUT:" - }, - "selectCustomCert": "Custom Certificate File X.509 (Optional)" - }, - "replace-color": { - "title": "Replace-Invert-Color", - "header": "Replace-Invert Color PDF", - "selectText": { - "1": "Replace or Invert color Options", - "2": "Default(Default high contrast colors)", - "3": "Custom(Customized colors)", - "4": "Full-Invert(Invert all colors)", - "5": "High contrast color options", - "6": "white text on black background", - "7": "Black text on white background", - "8": "Yellow text on black background", - "9": "Green text on black background", - "10": "Choose text Color", - "11": "Choose background Color" - }, - "submit": "Replace" - }, - "replaceColorPdf": { - "tags": "Replace Color,Page operations,Back end,server side" - }, - "login": { - "title": "Saioa hasi", - "header": "Saioa hasi", - "signin": "Saioa hasi", - "rememberme": "Oroitu nazazu", - "invalid": "Okerreko erabiltzaile izena edo pasahitza.", - "locked": "Zure kontua blokeatu egin da.", - "signinTitle": "Mesedez, hasi saioa", - "ssoSignIn": "Hasi saioa Saioa hasteko modu bakarraren bidez", - "oAuth2AutoCreateDisabled": "OAUTH2 Sortu automatikoki erabiltzailea desgaituta dago", - "oAuth2AdminBlockedUser": "Registration or logging in of non-registered users is currently blocked. Please contact the administrator.", - "oauth2RequestNotFound": "Authorization request not found", - "oauth2InvalidUserInfoResponse": "Invalid User Info Response", - "oauth2invalidRequest": "Invalid Request", - "oauth2AccessDenied": "Access Denied", - "oauth2InvalidTokenResponse": "Invalid Token Response", - "oauth2InvalidIdToken": "Invalid Id Token", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "User is deactivated, login is currently blocked with this username. Please contact the administrator.", - "alreadyLoggedIn": "You are already logged in to", - "alreadyLoggedIn2": "devices. Please log out of the devices and try again.", - "toManySessions": "You have too many active sessions", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF Orrialde bakarrera", - "header": "PDF Orrialde bakarrera", - "submit": "Orrialde bakarrera bihurtu" - }, - "pageExtracter": { - "title": "Atera orriak", - "header": "Atera orriak", - "submit": "Atera", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "sanitizePDF": { - "title": "PDF-a desinfektatu", - "header": "PDF fitxategi bat desinfektatu", - "selectText": { - "1": "Ezabatu JavaScript akzioak", - "2": "Ezabatu embedded fitxategiak", - "3": "Remove XMP metadata", - "4": "Ezabatu esketak", - "5": "Ezabatu iturri letrak", - "6": "Remove Document Info Metadata" - }, - "submit": "Desinfektatu PDF" - }, - "adjustContrast": { - "title": "Doitu kontrastea", - "header": "Doitu kontrastea", - "contrast": "Kontrastea:", - "brightness": "Distira:", - "saturation": "Asetasuna:", - "download": "Distira" - }, - "compress": { - "title": "Konprimatu", - "header": "PDFa konprimatu", - "credit": "Zerbitzu honek qpdf erabiltzen du PDFak komprimatzeko/optimizatzeko", - "grayscale": { - "label": "Aplikatu grisezko eskala konpresiorako" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Optimizazio maila:", - "4": "Automatikoa: automatikoki egokitzen du kalitatea PDFak tamaina doi-doia izan dezan", - "5": "PDFaren espero den tamaina (adibidez, 25 MB, 10.8 MB, 25 KB)" - }, - "submit": "Konprimatu" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "This feature is also available in our multi-tool page. Check it out for enhanced page-by-page UI and additional features!" - }, - "pageRemover": { - "title": "Orrialdeen ezabatzailea", - "header": "PDF orrialdeen ezabatzailea", - "pagesToDelete": "Ezabatu beharreko orrialdeak (sartu komaz bereizitako orrialde-zenbakien zerrenda):", - "submit": "Ezabatu orrialdeak", - "placeholder": "(e.g. 1,2,6 or 1-10,15-30)" - }, - "imageToPDF": { - "title": "Irudia PDF bihurtu", - "header": "Irudia PDF bihurtu", - "submit": "Bihurtu", - "selectLabel": "Image Fit Options", - "fillPage": "Fill Page", - "fitDocumentToImage": "Fit Page to Image", - "maintainAspectRatio": "Maintain Aspect Ratios", - "selectText": { - "2": "PDFaren errotazio automatikoa", - "3": "Fitxategi askoren logika (gaituta bakarrik zenbait irudirekin ari denean)", - "4": "Elkartu PDF bakar batean", - "5": "Bihurtu eta PDF bereizituak sortu" - } - }, - "PDFToCSV": { - "title": "PDF a CSV", - "header": "PDF a CSV", - "prompt": "Choose page to extract table", - "submit": "Extracto" - }, - "split-by-size-or-count": { - "title": "Split PDF by Size or Count", - "header": "Split PDF by Size or Count", - "type": { - "label": "Select Split Type", - "size": "By Size", - "pageCount": "By Page Count", - "docCount": "By Document Count" - }, - "value": { - "label": "Enter Value", - "placeholder": "Enter size (e.g., 2MB or 3KB) or count (e.g., 5)" - }, - "submit": "Submit" - }, - "printFile": { - "title": "Print File", - "header": "Print File to Printer", - "selectText": { - "1": "Select File to Print", - "2": "Enter Printer Name" - }, - "submit": "Print" - }, - "licenses": { - "nav": "Licenses", - "title": "3rd Party Licenses", - "header": "3rd Party Licenses", - "module": "Module", - "version": "Version", - "license": "License" - }, - "survey": { - "nav": "Survey", - "title": "Stirling-PDF Survey", - "description": "Stirling-PDF has no tracking so we want to hear from our users to improve Stirling-PDF!", - "changes": "Stirling-PDF has changed since the last survey! To find out more please check our blog post here:", - "changes2": "With these changes we are getting paid business support and funding", - "please": "Please consider taking our survey!", - "disabled": "(Survey popup will be disabled in following updates but available at foot of page)", - "button": "Take Survey", - "dontShowAgain": "Don't show again", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Remove image", - "header": "Remove image", - "removeImage": "Remove image", - "submit": "Remove image" - }, - "splitByChapters": { - "title": "Split PDF by Chapters", - "header": "Split PDF by Chapters", - "bookmarkLevel": "Bookmark Level", - "includeMetadata": "Include Metadata", - "allowDuplicates": "Allow Duplicates", - "desc": { - "1": "This tool splits a PDF file into multiple PDFs based on its chapter structure.", - "2": "Bookmark Level: Choose the level of bookmarks to use for splitting (0 for top-level, 1 for second-level, etc.).", - "3": "Include Metadata: If checked, the original PDF's metadata will be included in each split PDF.", - "4": "Allow Duplicates: If checked, allows multiple bookmarks on the same page to create separate PDFs." - }, - "submit": "Split PDF" - }, - "fileChooser": { - "click": "Click", - "or": "or", - "dragAndDrop": "Drag & Drop", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "Drag & Drop file(s) here", - "extractPDF": "Extracting..." - }, - "releases": { - "footer": "Releases", - "title": "Release Notes", - "header": "Release Notes", - "current": { - "version": "Current Release" - }, - "note": "Release notes are only available in English" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/fa-IR/translation.json b/frontend/dist/locales/fa-IR/translation.json deleted file mode 100644 index d0af02fe2..000000000 --- a/frontend/dist/locales/fa-IR/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "rtl" - }, - "addPageNumbers": { - "fontSize": "اندازه فونت", - "fontName": "نام فونت", - "title": "افزودن شماره صفحات", - "header": "افزودن شماره صفحات", - "selectText": { - "1": "انتخاب فایل PDF:", - "2": "اندازه حاشیه", - "3": "موقعیت", - "4": "شماره شروع", - "5": "صفحات برای شماره‌گذاری", - "6": "متن سفارشی" - }, - "customTextDesc": "متن سفارشی", - "numberPagesDesc": "کدام صفحات شماره‌گذاری شوند، پیش‌فرض 'همه'، همچنین می‌توانید 1-5 یا 2,5,9 را وارد کنید.", - "customNumberDesc": "به‌طور پیش‌فرض {n}، همچنین می‌توانید 'صفحه {n} از {total}'، 'متن-{n}'، '{filename}-{n}' را وارد کنید.", - "submit": "اضافه کردن شماره صفحات" - }, - "pdfPrompt": "انتخاب فایل(های) PDF", - "multiPdfPrompt": "انتخاب فایل‌های PDF (دو یا بیشتر)", - "multiPdfDropPrompt": "انتخاب (یا کشیدن و رها کردن) تمام فایل‌های PDF مورد نیاز", - "imgPrompt": "انتخاب تصویر(ها)", - "genericSubmit": "ارسال", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "هشدار: این فرآیند ممکن است بسته به اندازه فایل تا یک دقیقه طول بکشد", - "pageOrderPrompt": "ترتیب صفحات سفارشی (یک لیست از شماره صفحات به صورت جدا شده با کاما وارد کنید یا از توابعی مانند 2n+1 استفاده کنید):", - "pageSelectionPrompt": "انتخاب صفحات سفارشی (یک لیست از شماره صفحات به صورت جدا شده با کاما وارد کنید مانند 1,5,6 یا از توابعی مانند 2n+1 استفاده کنید):", - "goToPage": "برو", - "true": "درست", - "false": "غلط", - "unknown": "نامعلوم", - "save": "ذخیره", - "saveToBrowser": "ذخیره در مرورگر", - "close": "بستن", - "filesSelected": "فایل‌ها انتخاب شدند", - "noFavourites": "هیچ مورد دلخواهی اضافه نشده است", - "downloadComplete": "دانلود کامل شد", - "bored": "منتظر ماندن خسته‌کننده است؟", - "alphabet": "حروف الفبا", - "downloadPdf": "دانلود PDF", - "text": "متن", - "font": "فونت", - "selectFillter": "-- انتخاب کنید --", - "pageNum": "شماره صفحه", - "sizes": { - "small": "کوچک", - "medium": "متوسط", - "large": "بزرگ", - "x-large": "خیلی بزرگ" - }, - "error": { - "pdfPassword": "سند PDF دارای رمز عبور است و یا رمز عبور وارد نشده یا نادرست است", - "_value": "خطا", - "sorry": "متأسفیم برای مشکل موجود!", - "needHelp": "نیاز به کمک / یافتن مشکلی؟", - "contactTip": "اگر هنوز مشکلی دارید، دریغ نکنید که با ما تماس بگیرید. می‌توانید یک تیکت در صفحه GitHub ما ارسال کنید یا از طریق Discord با ما تماس بگیرید:", - "404": { - "head": "۴۰۴ - صفحه پیدا نشد | اوه، در کد لغزیدیم!", - "1": "به نظر نمی‌رسد بتوانیم صفحه‌ای را که دنبالش هستید پیدا کنیم.", - "2": "مشکلی پیش آمده است" - }, - "github": "ارسال تیکت در GitHub", - "showStack": "نمایش Trace Stack", - "copyStack": "کپی Trace Stack", - "githubSubmit": "GitHub - ارسال تیکت", - "discordSubmit": "Discord - ارسال پست پشتیبانی" - }, - "delete": "حذف", - "username": "نام کاربری", - "password": "رمز عبور", - "welcome": "خوش آمدید", - "property": "ویژگی", - "black": "سیاه", - "white": "سفید", - "red": "قرمز", - "green": "سبز", - "blue": "آبی", - "custom": "سفارشی...", - "WorkInProgess": "کار در حال پیشرفت است، ممکن است کار نکند یا دارای اشکال باشد، لطفاً هر مشکلی را گزارش دهید!", - "poweredBy": "قدرت گرفته از", - "yes": "بله", - "no": "خیر", - "changedCredsMessage": "مشخصات تغییر یافت!", - "notAuthenticatedMessage": "کاربر تأیید نشده است.", - "userNotFoundMessage": "کاربر یافت نشد.", - "incorrectPasswordMessage": "رمز عبور فعلی نادرست است.", - "usernameExistsMessage": "نام کاربری جدید قبلاً وجود دارد.", - "invalidUsernameMessage": "نام کاربری نامعتبر است، نام کاربری فقط می‌تواند شامل حروف، اعداد و کاراکترهای خاص @._+- باشد یا باید یک آدرس ایمیل معتبر باشد.", - "invalidPasswordMessage": "رمز عبور نباید خالی باشد و نباید در ابتدا یا انتها فاصله داشته باشد.", - "confirmPasswordErrorMessage": "رمز عبور جدید و تأیید رمز عبور جدید باید یکسان باشند.", - "deleteCurrentUserMessage": "نمی‌توان کاربر فعلی را حذف کرد.", - "deleteUsernameExistsMessage": "نام کاربری وجود ندارد و نمی‌توان آن را حذف کرد.", - "downgradeCurrentUserMessage": "نمی‌توان نقش کاربر فعلی را کاهش داد", - "disabledCurrentUserMessage": "کاربر فعلی نمی‌تواند غیرفعال شود", - "downgradeCurrentUserLongMessage": "نمی‌توان نقش کاربر فعلی را کاهش داد. بنابراین، کاربر فعلی نشان داده نخواهد شد.", - "userAlreadyExistsOAuthMessage": "این کاربر قبلاً به عنوان یک کاربر OAuth2 وجود دارد.", - "userAlreadyExistsWebMessage": "این کاربر قبلاً به عنوان یک کاربر وب وجود دارد.", - "oops": "اوپس!", - "help": "راهنما", - "goHomepage": "رفتن به صفحه اصلی", - "joinDiscord": "به سرور دیسکورد ما بپیوندید", - "seeDockerHub": "مشاهده Docker Hub", - "visitGithub": "مشاهده مخزن گیت‌هاب", - "donate": "اهدا کنید", - "color": "رنگ", - "sponsor": "حمایت مالی", - "info": "اطلاعات", - "pro": "نسخه حرفه‌ای", - "page": "صفحه", - "pages": "صفحات", - "loading": "در حال بارگذاری...", - "addToDoc": "اضافه کردن به سند", - "reset": "تنظیم مجدد", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "سیاست حفظ حریم خصوصی", - "terms": "شرایط و ضوابط", - "accessibility": "دسترسی", - "cookie": "سیاست کوکی‌ها", - "impressum": "توضیحات قانونی", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "منوی پایپلاین (نسخه بتا)", - "uploadButton": "آپلود سفارشی", - "configureButton": "پیکربندی", - "defaultOption": "سفارشی", - "submitButton": "ارسال", - "help": "راهنمای پایپلاین", - "scanHelp": "راهنمای اسکن پوشه", - "deletePrompt": "آیا مطمئن هستید که می‌خواهید پایپلاین را حذف کنید؟", - "tags": "اتوماسیون،ترتیب،اسکریپت‌شده،پردازش دسته‌ای", - "title": "خط لوله" - }, - "pipelineOptions": { - "header": "پیکربندی پایپلاین", - "pipelineNameLabel": "نام پایپلاین", - "saveSettings": "ذخیره تنظیمات عملیات", - "pipelineNamePrompt": "نام پایپلاین را اینجا وارد کنید", - "selectOperation": "عملیات را انتخاب کنید", - "addOperationButton": "اضافه کردن عملیات", - "pipelineHeader": "پایپلاین:", - "saveButton": "دانلود", - "validateButton": "اعتبارسنجی" - }, - "enterpriseEdition": { - "button": "ارتقا به نسخه حرفه‌ای", - "warning": "این ویژگی فقط برای کاربران حرفه‌ای در دسترس است.", - "yamlAdvert": "Stirling PDF Pro از فایل‌های پیکربندی YAML و دیگر ویژگی‌های SSO پشتیبانی می‌کند.", - "ssoAdvert": "به دنبال ویژگی‌های بیشتر برای مدیریت کاربران هستید؟ Stirling PDF Pro را بررسی کنید" - }, - "analytics": { - "title": "آیا می‌خواهید Stirling PDF را بهتر کنید؟", - "paragraph1": "Stirling PDF از تحلیل‌های اختیاری استفاده می‌کند تا به ما در بهبود محصول کمک کند. ما هیچ اطلاعات شخصی یا محتوای فایل را ردیابی نمی‌کنیم.", - "paragraph2": "لطفاً در نظر بگیرید که تحلیل‌ها را فعال کنید تا به رشد Stirling PDF کمک کرده و ما را در درک بهتر کاربران یاری کنید.", - "enable": "فعال کردن تحلیل‌ها", - "disable": "غیرفعال کردن تحلیل‌ها", - "settings": "می‌توانید تنظیمات مربوط به تحلیل‌ها را در فایل config/settings.yml تغییر دهید" - }, - "navbar": { - "favorite": "علاقه‌مندی‌ها", - "recent": "New and recently updated", - "darkmode": "حالت تاریک", - "language": "زبان‌ها", - "settings": "تنظیمات", - "allTools": "ابزارها", - "multiTool": "چند ابزار", - "search": "جستجو", - "sections": { - "organize": "سازماندهی", - "convertTo": "تبدیل به PDF", - "convertFrom": "تبدیل از PDF", - "security": "امضا و امنیت", - "advance": "پیشرفته", - "edit": "مشاهده و ویرایش", - "popular": "محبوب" - } - }, - "settings": { - "title": "تنظیمات", - "update": "به‌روزرسانی موجود است", - "updateAvailable": "{0} نسخه نصب شده فعلی است. یک نسخه جدید ({1}) موجود است.", - "appVersion": "نسخه برنامه:", - "downloadOption": { - "title": "گزینه دانلود را انتخاب کنید (برای دانلود یک فایل غیر فشرده):", - "1": "باز کردن در همان پنجره", - "2": "باز کردن در پنجره جدید", - "3": "دانلود فایل" - }, - "zipThreshold": "فشرده کردن فایل‌ها وقتی تعداد فایل‌های دانلود شده بیشتر شود از", - "signOut": "خروج", - "accountSettings": "تنظیمات حساب کاربری", - "bored": { - "help": "فعال کردن بازی مخفی" - }, - "cacheInputs": { - "name": "ذخیره ورودی‌های فرم", - "help": "فعال کردن برای ذخیره ورودی‌های قبلی برای اجرای بعدی" - } - }, - "changeCreds": { - "title": "تغییر مشخصات", - "header": "به‌روزرسانی جزئیات حساب کاربری", - "changePassword": "شما از مشخصات پیش‌فرض ورود استفاده می‌کنید. لطفاً یک رمز عبور جدید وارد کنید", - "newUsername": "نام کاربری جدید", - "oldPassword": "رمز عبور فعلی", - "newPassword": "رمز عبور جدید", - "confirmNewPassword": "تأیید رمز عبور جدید", - "submit": "ثبت تغییرات" - }, - "account": { - "title": "تنظیمات حساب", - "accountSettings": "تنظیمات حساب", - "adminSettings": "تنظیمات ادمین - مشاهده و اضافه کردن کاربران", - "userControlSettings": "تنظیمات کنترل کاربران", - "changeUsername": "تغییر نام کاربری", - "newUsername": "نام کاربری جدید", - "password": "رمز عبور تأییدیه", - "oldPassword": "رمز عبور قدیمی", - "newPassword": "رمز عبور جدید", - "changePassword": "تغییر رمز عبور", - "confirmNewPassword": "تأیید رمز عبور جدید", - "signOut": "خروج", - "yourApiKey": "کلید API شما", - "syncTitle": "همگام‌سازی تنظیمات مرورگر با حساب", - "settingsCompare": "مقایسه تنظیمات:", - "property": "ویژگی", - "webBrowserSettings": "تنظیمات مرورگر وب", - "syncToBrowser": "همگام‌سازی حساب -> مرورگر", - "syncToAccount": "همگام‌سازی حساب <- مرورگر" - }, - "adminUserSettings": { - "title": "تنظیمات کنترل کاربران", - "header": "تنظیمات کنترل کاربران توسط ادمین", - "admin": "ادمین", - "user": "کاربر", - "addUser": "اضافه کردن کاربر جدید", - "deleteUser": "حذف کاربر", - "confirmDeleteUser": "آیا باید کاربر حذف شود؟", - "confirmChangeUserStatus": "آیا باید وضعیت کاربر غیرفعال/فعال شود؟", - "usernameInfo": "نام کاربری فقط می‌تواند شامل حروف، اعداد و کاراکترهای خاص @._+- باشد یا باید یک آدرس ایمیل معتبر باشد.", - "roles": "نقش‌ها", - "role": "نقش", - "actions": "اقدامات", - "apiUser": "کاربر محدود API", - "extraApiUser": "کاربر محدود اضافی API", - "webOnlyUser": "فقط کاربر وب", - "demoUser": "کاربر دمو (بدون تنظیمات سفارشی)", - "internalApiUser": "کاربر داخلی API", - "forceChange": "مجبور کردن کاربر به تغییر رمز عبور هنگام ورود", - "submit": "ذخیره کاربر", - "changeUserRole": "تغییر نقش کاربر", - "authenticated": "احراز هویت شده", - "editOwnProfil": "ویرایش نمایه خود", - "enabledUser": "کاربر فعال", - "disabledUser": "کاربر غیرفعال", - "activeUsers": "کاربران فعال:", - "disabledUsers": "کاربران غیرفعال:", - "totalUsers": "کل کاربران:", - "lastRequest": "آخرین درخواست", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "وارد کردن/صادر کردن پایگاه داده", - "header": "وارد کردن/صادر کردن پایگاه داده", - "fileName": "نام فایل", - "creationDate": "تاریخ ایجاد", - "fileSize": "اندازه فایل", - "deleteBackupFile": "حذف فایل پشتیبان", - "importBackupFile": "وارد کردن فایل پشتیبان", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "دانلود فایل پشتیبان", - "info_1": "هنگام وارد کردن داده‌ها، اطمینان از ساختار صحیح ضروری است. اگر مطمئن نیستید چه کاری انجام می‌دهید، از یک متخصص مشاوره و پشتیبانی دریافت کنید. خطا در ساختار می‌تواند باعث اختلالات برنامه شود، حتی تا حدی که برنامه به طور کامل قادر به اجرا نباشد.", - "info_2": "نام فایل هنگام آپلود مهم نیست. پس از آن برای پیروی از قالب backup_user_yyyyMMddHHmm.sql تغییر نام داده می‌شود تا یک قرارداد نام‌گذاری ثابت را تضمین کند.", - "submit": "وارد کردن پشتیبان", - "importIntoDatabaseSuccessed": "وارد کردن در پایگاه داده موفقیت‌آمیز بود", - "backupCreated": "Database backup successful", - "fileNotFound": "فایل پیدا نشد", - "fileNullOrEmpty": "فایل نباید خالی یا تهی باشد", - "failedImportFile": "وارد کردن فایل ناموفق بود", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "نشست شما به پایان رسیده است. لطفاً صفحه را تازه‌سازی کرده و دوباره تلاش کنید.", - "refreshPage": "تازه‌سازی صفحه" - }, - "home": { - "desc": "مغازه‌ همه‌کاره میزبانی‌شده به صورت محلی برای تمام نیازهای PDF شما.", - "searchBar": "جستجو برای ویژگی‌ها...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "مشاهده، حاشیه‌نویسی، افزودن متن یا تصاویر" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "ابزار چندگانه PDF", - "desc": "ترکیب، چرخش، بازآرایی، تقسیم و حذف صفحات" - }, - "merge": { - "title": "ترکیب", - "desc": "ترکیب آسان چندین فایل PDF در یک فایل." - }, - "split": { - "title": "تقسیم", - "desc": "تقسیم فایل‌های PDF به اسناد چندگانه" - }, - "rotate": { - "title": "چرخش", - "desc": "چرخش آسان فایل‌های PDF." - }, - "imageToPdf": { - "title": "تصویر به PDF", - "desc": "تبدیل یک تصویر (PNG، JPEG، GIF) به PDF." - }, - "pdfToImage": { - "title": "PDF به تصویر", - "desc": "تبدیل یک فایل PDF به یک تصویر. (PNG، JPEG، GIF)" - }, - "pdfOrganiser": { - "title": "سازماندهی", - "desc": "حذف/بازآرایی صفحات به ترتیب دلخواه" - }, - "addImage": { - "title": "افزودن تصویر", - "desc": "افزودن یک تصویر به یک مکان مشخص در PDF" - }, - "watermark": { - "title": "افزودن واترمارک", - "desc": "افزودن یک واترمارک سفارشی به سند PDF." - }, - "permissions": { - "title": "تغییر مجوزها", - "desc": "تغییر مجوزهای سند PDF شما" - }, - "removePages": { - "title": "حذف", - "desc": "حذف صفحات ناخواسته از سند PDF شما." - }, - "addPassword": { - "title": "افزودن رمز عبور", - "desc": "رمزگذاری سند PDF شما با رمز عبور." - }, - "removePassword": { - "title": "حذف رمز عبور", - "desc": "حذف حفاظت رمز عبور از سند PDF شما." - }, - "compressPdfs": { - "title": "فشرده‌سازی", - "desc": "فشرده‌سازی فایل‌های PDF برای کاهش اندازه آن‌ها." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "تغییر متاداده", - "desc": "تغییر/حذف/افزودن متاداده به یک سند PDF" - }, - "fileToPDF": { - "title": "تبدیل فایل به PDF", - "desc": "تبدیل تقریباً هر فایل به PDF (DOCX، PNG، XLS، PPT، TXT و بیشتر)" - }, - "ocr": { - "title": "OCR / پاکسازی اسکن‌ها", - "desc": "پاکسازی اسکن‌ها و تشخیص متن از تصاویر درون یک فایل PDF و بازافزودن آن به عنوان متن." - }, - "extractImages": { - "title": "استخراج تصاویر", - "desc": "استخراج تمام تصاویر از یک PDF و ذخیره آن‌ها به صورت فایل زیپ" - }, - "pdfToPDFA": { - "title": "PDF به PDF/A", - "desc": "تبدیل PDF به PDF/A برای ذخیره‌سازی بلندمدت" - }, - "PDFToWord": { - "title": "PDF به ورد", - "desc": "تبدیل PDF به فرمت‌های ورد (DOC، DOCX و ODT)" - }, - "PDFToPresentation": { - "title": "PDF به ارائه", - "desc": "تبدیل PDF به فرمت‌های ارائه (PPT، PPTX و ODP)" - }, - "PDFToText": { - "title": "PDF به RTF (متن)", - "desc": "تبدیل PDF به فرمت متن یا RTF" - }, - "PDFToHTML": { - "title": "PDF به HTML", - "desc": "تبدیل PDF به فرمت HTML" - }, - "PDFToXML": { - "title": "PDF به XML", - "desc": "تبدیل PDF به فرمت XML" - }, - "ScannerImageSplit": { - "title": "تشخیص/تقسیم تصاویر اسکن‌شده", - "desc": "تقسیم چندین تصویر از درون یک تصویر/PDF" - }, - "sign": { - "title": "امضا", - "desc": "افزودن امضا به PDF با کشیدن، متن یا تصویر" - }, - "flatten": { - "title": "تسطیح", - "desc": "حذف تمام عناصر تعاملی و فرم‌ها از یک PDF" - }, - "repair": { - "title": "ترمیم", - "desc": "تلاش برای ترمیم یک PDF خراب/شکسته" - }, - "removeBlanks": { - "title": "حذف صفحات خالی", - "desc": "تشخیص و حذف صفحات خالی از یک سند" - }, - "removeAnnotations": { - "title": "حذف حاشیه‌نویسی‌ها", - "desc": "حذف تمام نظرات/حاشیه‌نویسی‌ها از یک PDF" - }, - "compare": { - "title": "مقایسه", - "desc": "مقایسه و نمایش تفاوت‌ها بین 2 سند PDF" - }, - "certSign": { - "title": "امضا با گواهینامه", - "desc": "امضای یک PDF با گواهینامه/کلید (PEM/P12)" - }, - "removeCertSign": { - "title": "حذف امضای گواهینامه", - "desc": "حذف امضای گواهینامه از PDF" - }, - "pageLayout": { - "title": "طرح‌بندی چند صفحه‌ای", - "desc": "ادغام چندین صفحه یک سند PDF در یک صفحه واحد" - }, - "scalePages": { - "title": "تنظیم اندازه/مقیاس صفحه", - "desc": "تغییر اندازه/مقیاس یک صفحه و/یا محتوای آن." - }, - "pipeline": { - "title": "خط لوله", - "desc": "اجرای چندین عملیات بر روی PDFها با تعریف اسکریپت‌های خط لوله" - }, - "add-page-numbers": { - "title": "افزودن شماره صفحات", - "desc": "افزودن شماره صفحات به تمام سند در یک مکان مشخص" - }, - "auto-rename": { - "title": "تغییر نام خودکار فایل PDF", - "desc": "تغییر نام خودکار یک فایل PDF بر اساس سربرگ تشخیص داده‌شده آن" - }, - "adjust-contrast": { - "title": "تنظیم رنگ‌ها/کنتراست", - "desc": "تنظیم کنتراست، اشباع و روشنایی یک PDF" - }, - "crop": { - "title": "برش PDF", - "desc": "برش یک PDF برای کاهش اندازه آن (متن را حفظ می‌کند!)" - }, - "autoSplitPDF": { - "title": "تقسیم خودکار صفحات", - "desc": "تقسیم خودکار فایل اسکن‌شده PDF با استفاده از کد QR تقسیم‌کننده فیزیکی" - }, - "sanitizePdf": { - "title": "پاکسازی", - "desc": "حذف اسکریپت‌ها و سایر عناصر از فایل‌های PDF" - }, - "URLToPDF": { - "title": "URL/وب‌سایت به PDF", - "desc": "تبدیل هر http(s)URL به PDF" - }, - "HTMLToPDF": { - "title": "HTML به PDF", - "desc": "تبدیل هر فایل HTML یا زیپ به PDF" - }, - "MarkdownToPDF": { - "title": "مارک‌داون به PDF", - "desc": "تبدیل هر فایل مارک‌داون به PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "دریافت تمام اطلاعات در مورد PDF", - "desc": "گرفتن هر اطلاعات ممکن در مورد PDF" - }, - "extractPage": { - "title": "استخراج صفحه(ها)", - "desc": "استخراج صفحات انتخابی از PDF" - }, - "PdfToSinglePage": { - "title": "صفحه بزرگ واحد", - "desc": "ادغام تمام صفحات PDF در یک صفحه بزرگ واحد" - }, - "showJS": { - "title": "نمایش جاوااسکریپت", - "desc": "جستجو و نمایش هر جاوااسکریپت تزریق شده به PDF" - }, - "autoRedact": { - "title": "سانسور خودکار", - "desc": "متن‌های مشخص شده در PDF را به‌طور خودکار سانسور (سیاه) می‌کند" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF به CSV", - "desc": "جداول را از PDF استخراج کرده و به CSV تبدیل می‌کند" - }, - "autoSizeSplitPDF": { - "title": "تقسیم خودکار بر اساس اندازه/تعداد", - "desc": "تقسیم یک PDF به چند سند بر اساس اندازه، تعداد صفحات، یا تعداد اسناد" - }, - "overlay-pdfs": { - "title": "هم‌پوشانی PDF‌ها", - "desc": "PDF‌ها را بر روی PDF دیگری هم‌پوشانی می‌کند" - }, - "split-by-sections": { - "title": "تقسیم PDF بر اساس بخش‌ها", - "desc": "هر صفحه از PDF را به بخش‌های افقی و عمودی کوچک‌تر تقسیم می‌کند" - }, - "AddStampRequest": { - "title": "افزودن مهر به PDF", - "desc": "افزودن مهر متنی یا تصویری در مکان‌های مشخص" - }, - "removeImagePdf": { - "title": "حذف تصویر", - "desc": "حذف تصاویر از PDF برای کاهش حجم فایل" - }, - "splitPdfByChapters": { - "title": "تقسیم PDF بر اساس فصل‌ها", - "desc": "تقسیم PDF به چند فایل بر اساس ساختار فصل‌ها" - }, - "validateSignature": { - "title": "اعتبارسنجی امضای PDF", - "desc": "تأیید امضاها و گواهی‌های دیجیتال در اسناد PDF" - }, - "replaceColorPdf": { - "title": "جایگزینی و معکوس کردن رنگ", - "desc": "جایگزینی رنگ متن و پس‌زمینه در PDF و معکوس کردن کل رنگ‌ها برای کاهش حجم فایل" - } - }, - "viewPdf": { - "tags": "مشاهده،خواندن،حاشیه‌نویسی،متن،تصویر", - "title": "View/Edit PDF", - "header": "مشاهده PDF" - }, - "multiTool": { - "tags": "ابزار چندگانه،عملیات چندگانه،واسط کاربری،کلیک و کشیدن،فرانت‌اند،کاربردی،قابل تعامل،جابجایی،حذف،تقسیم", - "title": "ابزار چندگانه PDF", - "header": "ابزار چندگانه PDF", - "uploadPrompts": "نام فایل", - "selectAll": "انتخاب همه", - "deselectAll": "لغو انتخاب همه", - "selectPages": "انتخاب صفحه", - "selectedPages": "صفحات انتخاب شده", - "page": "صفحه", - "deleteSelected": "حذف انتخاب شده‌ها", - "downloadAll": "صادر کردن", - "downloadSelected": "صادر کردن انتخاب شده‌ها", - "insertPageBreak": "درج شکست صفحه", - "addFile": "افزودن فایل", - "rotateLeft": "چرخاندن به چپ", - "rotateRight": "چرخاندن به راست", - "split": "تقسیم", - "moveLeft": "جابجایی به چپ", - "moveRight": "جابجایی به راست", - "delete": "حذف", - "dragDropMessage": "صفحه(ها) انتخاب شده‌اند", - "undo": "واگرد", - "redo": "بازگرداندن" - }, - "merge": { - "tags": "ترکیب،عملیات صفحات،بک‌اند،سمت سرور", - "title": "ادغام", - "header": "ادغام چندین PDF (۲+)", - "sortByName": "مرتب‌سازی بر اساس نام", - "sortByDate": "مرتب‌سازی بر اساس تاریخ", - "removeCertSign": "حذف امضای دیجیتال در فایل ادغام‌شده؟", - "submit": "ادغام" - }, - "split": { - "tags": "عملیات صفحات،تقسیم،چند صفحه،برش،سمت سرور", - "title": "تقسیم PDF", - "header": "تقسیم PDF", - "desc": { - "1": "اعدادی که انتخاب می‌کنید شماره صفحه‌هایی هستند که می‌خواهید بر روی آنها تقسیم انجام دهید", - "2": "بنابراین انتخاب ۱,۳,۷-۹ یک سند ۱۰ صفحه‌ای را به ۶ PDF جداگانه تقسیم می‌کند با:", - "3": "سند #1: صفحه ۱", - "4": "سند #2: صفحه ۲ و ۳", - "5": "سند #3: صفحه ۴، ۵، ۶، ۷", - "6": "سند #4: صفحه ۸", - "7": "سند #5: صفحه ۹", - "8": "سند #6: صفحه ۱۰" - }, - "splitPages": "صفحات برای تقسیم را وارد کنید:", - "submit": "تقسیم" - }, - "rotate": { - "tags": "سمت سرور", - "title": "چرخش PDF", - "header": "چرخش PDF", - "selectAngle": "زاویه چرخش را انتخاب کنید (به مضرب‌های ۹۰ درجه):", - "submit": "چرخش" - }, - "imageToPdf": { - "tags": "تبدیل،عکس،jpg،تصویر،عکس" - }, - "pdfToImage": { - "tags": "تبدیل،عکس،jpg،تصویر،عکس", - "title": "PDF به تصویر", - "header": "PDF به تصویر", - "selectText": "فرمت تصویر", - "singleOrMultiple": "نوع نتیجه تصویر", - "single": "یک تصویر بزرگ", - "multi": "چندین تصویر", - "colorType": "نوع رنگ", - "color": "رنگ", - "grey": "خاکستری", - "blackwhite": "سیاه و سفید (ممکن است اطلاعات از دست برود!)", - "submit": "تبدیل", - "info": "پایتون نصب نشده است. برای تبدیل WebP لازم است.", - "placeholder": "(مثال: 1,2,8 یا 4,7,12-16 یا 2n-1)" - }, - "pdfOrganiser": { - "tags": "دوطرفه،زوج،فرد،مرتب‌سازی،جابجایی", - "title": "سازماندهی صفحات", - "header": "سازماندهی صفحات PDF", - "submit": "بازآرایی صفحات", - "mode": { - "_value": "حالت", - "1": "ترتیب سفارشی صفحات", - "2": "ترتیب معکوس", - "3": "مرتب‌سازی دوطرفه", - "4": "مرتب‌سازی کتابچه‌ای", - "5": "مرتب‌سازی کتابچه‌ای سیدی استیچ", - "6": "جداسازی فرد و زوج", - "7": "حذف اولین", - "8": "حذف آخرین", - "9": "حذف اول و آخر", - "10": "ادغام فرد-زوج", - "11": "Duplicate all pages" - }, - "placeholder": "(مثال: ۱,۳,۲ یا ۴-۸,۲,۱۰-۱۲ یا 2n-1)" - }, - "addImage": { - "tags": "تصویر،jpg،عکس", - "title": "افزودن تصویر", - "header": "افزودن تصویر به PDF", - "everyPage": "هر صفحه؟", - "upload": "افزودن تصویر", - "submit": "افزودن تصویر" - }, - "watermark": { - "tags": "متن،تکراری،برچسب،خود،کپی‌رایت،علامت تجاری،تصویر،jpg،عکس", - "title": "افزودن واترمارک", - "header": "افزودن واترمارک", - "customColor": "رنگ متن سفارشی", - "selectText": { - "1": "PDFی که می‌خواهید به آن واترمارک اضافه کنید را انتخاب کنید:", - "2": "متن واترمارک:", - "3": "اندازه فونت:", - "4": "چرخش (۰-۳۶۰):", - "5": "فاصله عرضی (فاصله بین هر واترمارک به صورت افقی):", - "6": "فاصله ارتفاعی (فاصله بین هر واترمارک به صورت عمودی):", - "7": "شفافیت (۰٪ - ۱۰۰٪):", - "8": "نوع واترمارک:", - "9": "تصویر واترمارک:", - "10": "تبدیل PDF به PDF-Image" - }, - "submit": "افزودن واترمارک", - "type": { - "1": "متن", - "2": "تصویر" - } - }, - "permissions": { - "tags": "خواندن،نوشتن،ویرایش،چاپ", - "title": "تغییر مجوزها", - "header": "تغییر مجوزها", - "warning": "برای اینکه این مجوزها غیرقابل تغییر باشند، توصیه می‌شود آنها را با گذرواژه از طریق صفحه افزودن گذرواژه تنظیم کنید", - "selectText": { - "1": "PDFی را برای تغییر مجوزها انتخاب کنید", - "2": "مجوزهایی که باید تنظیم شوند", - "3": "جلوگیری از مونتاژ سند", - "4": "جلوگیری از استخراج محتوا", - "5": "جلوگیری از استخراج برای دسترسی‌پذیری", - "6": "جلوگیری از پرکردن فرم", - "7": "جلوگیری از اصلاح", - "8": "جلوگیری از اصلاح حاشیه‌نویسی", - "9": "جلوگیری از چاپ", - "10": "جلوگیری از چاپ فرمت‌های مختلف" - }, - "submit": "تغییر" - }, - "removePages": { - "tags": "حذف صفحات،پاک کردن صفحات" - }, - "addPassword": { - "tags": "امن،امنیت", - "title": "افزودن گذرواژه", - "header": "افزودن گذرواژه (رمزنگاری)", - "selectText": { - "1": "انتخاب PDF برای رمزنگاری", - "2": "گذرواژه کاربر", - "3": "طول کلید رمزنگاری", - "4": "مقادیر بالاتر قوی‌ترند، اما مقادیر پایین‌تر بهتر سازگارند.", - "5": "مجوزهایی که باید تنظیم شوند (توصیه می‌شود همراه با گذرواژه مالک استفاده شود)", - "6": "جلوگیری از مونتاژ سند", - "7": "جلوگیری از استخراج محتوا", - "8": "جلوگیری از استخراج برای دسترسی‌پذیری", - "9": "جلوگیری از پرکردن فرم", - "10": "جلوگیری از اصلاح", - "11": "جلوگیری از اصلاح حاشیه‌نویسی", - "12": "جلوگیری از چاپ", - "13": "جلوگیری از چاپ فرمت‌های مختلف", - "14": "گذرواژه مالک", - "15": "محدودیت‌هایی که می‌توان بر روی سند اعمال کرد هنگامی که باز است (پشتیبانی‌شده توسط همه خوانندگان نیست)", - "16": "محدودیت‌های باز شدن خود سند" - }, - "submit": "رمزنگاری" - }, - "removePassword": { - "tags": "امن،رمزگشایی،امنیت،حذف رمز عبور", - "title": "حذف گذرواژه", - "header": "حذف گذرواژه (رمزگشایی)", - "selectText": { - "1": "PDFی را برای رمزگشایی انتخاب کنید", - "2": "گذرواژه" - }, - "submit": "حذف" - }, - "compressPdfs": { - "tags": "فشرده،کوچک،ریز" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "عنوان،نویسنده،تاریخ،ایجاد،زمان،ناشر،تولیدکننده،آمار", - "title": "عنوان:", - "header": "تغییر متاداده‌ها", - "selectText": { - "1": "لطفاً متغیرهایی که مایل به تغییر آنها هستید را ویرایش کنید", - "2": "حذف همه متاداده‌ها", - "3": "نمایش متاداده سفارشی:", - "4": "سایر متاداده‌ها:", - "5": "افزودن ورودی متاداده سفارشی" - }, - "author": "نویسنده:", - "creationDate": "تاریخ ایجاد (yyyy/MM/dd HH:mm:ss):", - "creator": "خالق:", - "keywords": "کلمات کلیدی:", - "modDate": "تاریخ اصلاح (yyyy/MM/dd HH:mm:ss):", - "producer": "تولید کننده:", - "subject": "موضوع:", - "trapped": "گیر افتاده:", - "submit": "تغییر" - }, - "fileToPDF": { - "tags": "تبدیل،فرمت،سند،تصویر،اسلاید،متن،تبدیل،دفتر،اسناد،ورد،اکسل،پاورپوینت", - "title": "فایل به PDF", - "header": "تبدیل هر فایل به PDF", - "credit": "این سرویس از LibreOffice و Unoconv برای تبدیل فایل استفاده می‌کند.", - "supportedFileTypesInfo": "فرمت‌های فایل پشتیبانی شده", - "supportedFileTypes": "فرمت‌های فایل پشتیبانی شده باید شامل موارد زیر باشند اما برای فهرست کامل و بروزرسانی شده فرمت‌های پشتیبانی شده، لطفاً به مستندات LibreOffice مراجعه کنید", - "submit": "تبدیل به PDF" - }, - "ocr": { - "tags": "تشخیص،متن،تصویر،اسکن،خواندن،شناسایی،آشکارسازی،قابل ویرایش", - "title": "OCR / مرتب‌سازی اسکن‌ها", - "header": "مرتب‌سازی اسکن‌ها / OCR (بازشناسی نویسه نوری)", - "selectText": { - "1": "زبان‌هایی را که باید در PDF شناسایی شوند انتخاب کنید (موارد فهرست شده زبان‌هایی هستند که در حال حاضر شناسایی شده‌اند):", - "2": "تولید فایل متنی شامل OCR همراه با PDF OCR شده", - "3": "صفحات اسکن شده با زاویه کج را با چرخاندن به مکان درست اصلاح کنید", - "4": "صفحه را تمیز کنید تا کمتر احتمال پیدا کردن متن توسط OCR در نویز پس‌زمینه باشد. (بدون تغییر در خروجی)", - "5": "صفحه را تمیز کنید تا کمتر احتمال پیدا کردن متن توسط OCR در نویز پس‌زمینه باشد، تمیز کردن در خروجی حفظ می‌شود.", - "6": "صفحاتی که دارای متن تعاملی هستند را نادیده گرفته و فقط صفحاتی را که تصاویر هستند OCR کند", - "7": "اجبار OCR، تمامی صفحات را OCR کرده و تمام عناصر متن اصلی را حذف می‌کند", - "8": "عادی (در صورتی که PDF حاوی متن باشد خطا خواهد داد)", - "9": "تنظیمات اضافی", - "10": "حالت OCR", - "11": "حذف تصاویر بعد از OCR (تمامی تصاویر را حذف می‌کند، فقط در صورت مفید بودن بخشی از گام تبدیل)", - "12": "نوع رندر (پیشرفته)" - }, - "help": "لطفاً این مستندات را بخوانید تا نحوه استفاده از این سرویس برای زبان‌های دیگر و/یا استفاده از آن که در داخل داکر نیست را بدانید", - "credit": "این سرویس از qpdf و Tesseract برای OCR استفاده می‌کند.", - "submit": "پردازش PDF با OCR" - }, - "extractImages": { - "tags": "عکس،عکس،ذخیره،آرشیو،زیپ،گرفتن،برداشتن", - "title": "استخراج تصاویر", - "header": "استخراج تصاویر", - "selectText": "فرمت تصویری را که تصاویر استخراج شده به آن تبدیل شوند انتخاب کنید", - "allowDuplicates": "ذخیره تصاویر تکراری", - "submit": "استخراج" - }, - "pdfToPDFA": { - "tags": "آرشیو،ذخیره‌سازی بلندمدت،استاندارد،تبدیل،ذخیره‌سازی،حفظ", - "title": "PDF به PDF/A", - "header": "PDF به PDF/A", - "credit": "این سرویس از libreoffice برای تبدیل PDF/A استفاده می‌کند", - "submit": "تبدیل", - "tip": "در حال حاضر برای چندین ورودی به طور همزمان کار نمی‌کند", - "outputFormat": "فرمت خروجی", - "pdfWithDigitalSignature": "PDF حاوی یک امضای دیجیتال است. این در مرحله بعد حذف خواهد شد." - }, - "PDFToWord": { - "tags": "doc،docx،odt،ورد،تبدیل،فرمت،تبدیل،دفتر،مایکروسافت،فایل ورد", - "title": "PDF به ورد", - "header": "PDF به ورد", - "selectText": { - "1": "فرمت فایل خروجی" - }, - "credit": "این سرویس از LibreOffice برای تبدیل فایل استفاده می‌کند.", - "submit": "تبدیل" - }, - "PDFToPresentation": { - "tags": "اسلایدها،ارائه،دفتر،مایکروسافت", - "title": "PDF به ارائه", - "header": "PDF به ارائه", - "selectText": { - "1": "فرمت فایل خروجی" - }, - "credit": "این سرویس از LibreOffice برای تبدیل فایل استفاده می‌کند.", - "submit": "تبدیل" - }, - "PDFToText": { - "tags": "فرمت غنی،فرمت متن غنی", - "title": "PDF به RTF (متن)", - "header": "PDF به RTF (متن)", - "selectText": { - "1": "فرمت فایل خروجی" - }, - "credit": "این سرویس از LibreOffice برای تبدیل فایل استفاده می‌کند.", - "submit": "تبدیل" - }, - "PDFToHTML": { - "tags": "محتوای وب،سازگار با مرورگر", - "title": "PDF به HTML", - "header": "PDF به HTML", - "credit": "این سرویس از pdftohtml برای تبدیل فایل استفاده می‌کند.", - "submit": "تبدیل" - }, - "PDFToXML": { - "tags": "استخراج داده،محتوای ساختاریافته،تداخل،تبدیل", - "title": "PDF به XML", - "header": "PDF به XML", - "credit": "این سرویس از LibreOffice برای تبدیل فایل استفاده می‌کند.", - "submit": "تبدیل" - }, - "ScannerImageSplit": { - "tags": "تفکیک،تشخیص خودکار،اسکن‌ها،چند تصویر،سازماندهی", - "selectText": { - "1": "آستانه زاویه:", - "2": "حداقل زاویه مطلق مورد نیاز برای چرخاندن تصویر را تنظیم می‌کند (پیش‌فرض: ۱۰).", - "3": "تحمل‌پذیری:", - "4": "دامنه تغییر رنگ در اطراف رنگ پس‌زمینه تخمین‌زده‌شده را تعیین می‌کند (پیش‌فرض: ۳۰).", - "5": "حداقل ناحیه:", - "6": "آستانه حداقل ناحیه برای یک عکس را تنظیم می‌کند (پیش‌فرض: ۱۰۰۰۰).", - "7": "حداقل ناحیه کانتور:", - "8": "آستانه حداقل ناحیه کانتور برای یک عکس را تنظیم می‌کند", - "9": "اندازه حاشیه:", - "10": "اندازه حاشیه اضافه‌شده و حذف‌شده برای جلوگیری از حاشیه‌های سفید در خروجی را تنظیم می‌کند (پیش‌فرض: ۱)." - }, - "info": "پایتون نصب نشده است. برای اجرا نیاز است." - }, - "sign": { - "tags": "تایید،حروف ابتدایی،امضای کشیده،امضای متنی،امضای تصویری", - "title": "امضا", - "header": "امضای PDFها", - "upload": "بارگذاری تصویر", - "draw": "کشیدن امضا", - "text": "ورودی متن", - "clear": "پاک کردن", - "add": "اضافه کردن", - "saved": "امضاهای ذخیره‌شده", - "save": "ذخیره امضا", - "personalSigs": "امضاهای شخصی", - "sharedSigs": "امضاهای به اشتراک گذاشته‌شده", - "noSavedSigs": "هیچ امضای ذخیره‌شده‌ای یافت نشد", - "addToAll": "اضافه کردن به همه صفحات", - "delete": "حذف", - "first": "صفحه اول", - "last": "صفحه آخر", - "next": "صفحه بعدی", - "previous": "صفحه قبلی", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "ایستا،غیرفعال،غیرتعاملی،بهینه‌سازی", - "title": "یکپارچه‌سازی", - "header": "یکپارچه‌سازی PDFها", - "flattenOnlyForms": "فقط فرم‌ها را یکپارچه کن", - "submit": "یکپارچه‌سازی" - }, - "repair": { - "tags": "ترمیم،بازیابی،اصلاح،بازیابی", - "title": "تعمیر", - "header": "تعمیر PDFها", - "submit": "تعمیر" - }, - "removeBlanks": { - "tags": "پاکسازی،بهینه‌سازی،بدون محتوا،سازماندهی", - "title": "حذف صفحات خالی", - "header": "حذف صفحات خالی", - "threshold": "آستانه سفیدی پیکسل:", - "thresholdDesc": "آستانه‌ای که تعیین می‌کند پیکسل چقدر باید سفید باشد تا به عنوان 'سفید' شناخته شود. 0 = سیاه، 255 کاملاً سفید.", - "whitePercent": "درصد سفیدی (%):", - "whitePercentDesc": "درصد صفحه‌ای که باید پیکسل‌های 'سفید' باشد برای حذف", - "submit": "حذف صفحات خالی" - }, - "removeAnnotations": { - "tags": "نظرات،هایلایت،یادداشت‌ها،نشانه‌گذاری،حذف", - "title": "حذف توضیحات", - "header": "حذف توضیحات", - "submit": "حذف" - }, - "compare": { - "tags": "تفاوت‌گذاری،کنتراست،تغییرات،تحلیل", - "title": "مقایسه", - "header": "مقایسه PDFها", - "highlightColor": { - "1": "رنگ برجسته ۱:", - "2": "رنگ برجسته ۲:" - }, - "document": { - "1": "سند ۱", - "2": "سند ۲" - }, - "submit": "مقایسه", - "complex": { - "message": "یکی یا هر دو از اسناد ارائه شده فایل‌های بزرگی هستند، دقت مقایسه ممکن است کاهش یابد" - }, - "large": { - "file": { - "message": "یکی یا هر دو از اسناد ارائه شده برای پردازش بسیار بزرگ هستند" - } - }, - "no": { - "text": { - "message": "یکی یا هر دو از PDFهای انتخاب شده محتوای متنی ندارند. لطفاً PDFهایی با متن برای مقایسه انتخاب کنید." - } - } - }, - "certSign": { - "tags": "تایید،PEM،P12،رسمی،رمزگذاری", - "title": "امضای گواهی", - "header": "امضا کردن PDF با گواهی خود (در حال پیشرفت)", - "selectPDF": "انتخاب فایل PDF برای امضا:", - "jksNote": "یادداشت: اگر نوع گواهی شما در زیر ذکر نشده است، لطفاً آن را به یک فایل Java Keystore (.jks) با استفاده از ابزار خط فرمان keytool تبدیل کنید. سپس، گزینه فایل .jks را در زیر انتخاب کنید.", - "selectKey": "فایل کلید خصوصی خود را انتخاب کنید (فرمت PKCS#8، می‌تواند .pem یا .der باشد):", - "selectCert": "فایل گواهی خود را انتخاب کنید (فرمت X.509، می‌تواند .pem یا .der باشد):", - "selectP12": "فایل Keystore PKCS#12 خود را انتخاب کنید (.p12 یا .pfx) (اختیاری، در صورت ارائه، باید شامل کلید خصوصی و گواهی شما باشد):", - "selectJKS": "فایل Java Keystore خود را انتخاب کنید (.jks یا .keystore):", - "certType": "نوع گواهی", - "password": "رمز عبور Keystore یا کلید خصوصی خود را وارد کنید (در صورت وجود):", - "showSig": "نمایش امضا", - "reason": "دلیل", - "location": "موقعیت", - "name": "نام", - "showLogo": "نمایش لوگو", - "submit": "امضا کردن PDF" - }, - "removeCertSign": { - "tags": "تایید،PEM،P12،رسمی،رمزگشایی", - "title": "حذف امضای گواهی", - "header": "حذف گواهی دیجیتال از PDF", - "selectPDF": "یک فایل PDF را انتخاب کنید:", - "submit": "حذف امضا" - }, - "pageLayout": { - "tags": "ادغام،ترکیب،نمای واحد،سازماندهی", - "title": "طرح‌بندی چند صفحه‌ای", - "header": "طرح‌بندی چند صفحه‌ای", - "pagesPerSheet": "صفحات در هر شیت:", - "addBorder": "اضافه کردن مرزها", - "submit": "ارسال" - }, - "scalePages": { - "tags": "تغییر اندازه،ویرایش،ابعاد،سازگاری", - "title": "تنظیم مقیاس صفحه", - "header": "تنظیم مقیاس صفحه", - "pageSize": "اندازه صفحه سند.", - "keepPageSize": "اندازه اصلی", - "scaleFactor": "سطح زوم (برش) یک صفحه.", - "submit": "ارسال" - }, - "add-page-numbers": { - "tags": "شماره‌گذاری،برچسب‌گذاری،سازماندهی،فهرست" - }, - "auto-rename": { - "tags": "تشخیص خودکار،بر اساس سربرگ،سازماندهی،تغییر نام", - "title": "تغییر نام خودکار", - "header": "تغییر نام خودکار PDF", - "submit": "تغییر نام خودکار" - }, - "adjust-contrast": { - "tags": "تصحیح رنگ،تنظیم،ویرایش،بهبود" - }, - "crop": { - "tags": "برش،کاهش اندازه،ویرایش،شکل‌دهی", - "title": "برش دادن", - "header": "برش PDF", - "submit": "ارسال" - }, - "autoSplitPDF": { - "tags": "بر اساس QR،جداسازی،تقسیم اسکن‌شده،سازماندهی", - "title": "جدا سازی خودکار PDF", - "header": "جدا سازی خودکار PDF", - "description": "چاپ، درج، اسکن، بارگذاری و بگذارید اسناد شما به صورت خودکار جدا شوند. نیازی به مرتب‌سازی دستی نیست.", - "selectText": { - "1": "از زیر برگه‌های موقت پرینت کنید (سیاه و سفید کافی است).", - "2": "همه مدارک خود را با قرار دادن برگه‌های موقت بین آنها یکجا اسکن کنید.", - "3": "فایل PDF بزرگ اسکن شده را بارگذاری کنید و بگذارید Stirling PDF بقیه کار را انجام دهد.", - "4": "صفحات جداکننده به طور خودکار تشخیص داده و حذف می‌شوند، تضمین‌کننده یک سند نهایی منظم." - }, - "formPrompt": "PDF حاوی جداکننده‌های Stirling-PDF را ارسال کنید:", - "duplexMode": "حالت دوبلکس (اسکن جلو و عقب)", - "dividerDownload2": "دانلود 'Auto Splitter Divider (with instructions).pdf'", - "submit": "ارسال" - }, - "sanitizePdf": { - "tags": "پاکسازی،امن،ایمن،حذف تهدیدها" - }, - "URLToPDF": { - "tags": "ذخیره صفحه وب،تبدیل وب به سند،آرشیو", - "title": "URL به PDF", - "header": "URL به PDF", - "submit": "تبدیل", - "credit": "از WeasyPrint استفاده می‌کند" - }, - "HTMLToPDF": { - "tags": "مارک‌آپ،محتوای وب،تبدیل،تغییر", - "title": "HTML به PDF", - "header": "HTML به PDF", - "help": "پذیرش فایل‌های HTML و ZIP شامل html/css/تصاویر و غیره", - "submit": "تبدیل", - "credit": "از WeasyPrint استفاده می‌کند", - "zoom": "سطح بزرگنمایی برای نمایش وب‌سایت.", - "pageWidth": "عرض صفحه به سانتی‌متر. (خالی برای پیش‌فرض)", - "pageHeight": "ارتفاع صفحه به سانتی‌متر. (خالی برای پیش‌فرض)", - "marginTop": "حاشیه بالا به میلی‌متر. (خالی برای پیش‌فرض)", - "marginBottom": "حاشیه پایین به میلی‌متر. (خالی برای پیش‌فرض)", - "marginLeft": "حاشیه چپ به میلی‌متر. (خالی برای پیش‌فرض)", - "marginRight": "حاشیه راست به میلی‌متر. (خالی برای پیش‌فرض)", - "printBackground": "نمایش پس‌زمینه وب‌سایت‌ها.", - "defaultHeader": "فعال کردن هدر پیش‌فرض (نام و شماره صفحه)", - "cssMediaType": "تغییر نوع رسانه CSS صفحه.", - "none": "هیچ‌کدام", - "print": "چاپ", - "screen": "نمایشگر" - }, - "MarkdownToPDF": { - "tags": "مارک‌آپ،محتوای وب،تبدیل،تغییر", - "title": "Markdown به PDF", - "header": "Markdown به PDF", - "submit": "تبدیل", - "help": "در حال پیشرفت", - "credit": "از WeasyPrint استفاده می‌کند" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "اطلاعات،داده،آمار،آمارها", - "title": "اطلاعات PDF را دریافت کنید", - "header": "اطلاعات PDF را دریافت کنید", - "submit": "دریافت اطلاعات", - "downloadJson": "دانلود JSON" - }, - "extractPage": { - "tags": "استخراج" - }, - "PdfToSinglePage": { - "tags": "صفحه واحد" - }, - "showJS": { - "tags": "جاوااسکریپت", - "title": "نمایش جاوااسکریپت", - "header": "نمایش جاوااسکریپت", - "downloadJS": "دانلود جاوااسکریپت", - "submit": "نمایش" - }, - "autoRedact": { - "tags": "سانسور، مخفی کردن، سیاه کردن، پنهان", - "title": "سانسور خودکار", - "header": "سانسور خودکار", - "colorLabel": "رنگ", - "textsToRedactLabel": "متن برای سانسور (هر خط جداگانه)", - "textsToRedactPlaceholder": "مثال: \\nمحرمانه \\nفوق‌سری", - "useRegexLabel": "استفاده از Regex", - "wholeWordSearchLabel": "جستجوی کلمه کامل", - "customPaddingLabel": "افزودن فاصله اضافی", - "convertPDFToImageLabel": "تبدیل PDF به PDF-تصویر (برای حذف متن پشت جعبه استفاده می‌شود)", - "submitButton": "ارسال" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV، استخراج جدول، استخراج، تبدیل" - }, - "autoSizeSplitPDF": { - "tags": "PDF، تقسیم، سند، سازماندهی" - }, - "overlay-pdfs": { - "tags": "هم‌پوشانی", - "header": "ترکیب فایل‌های PDF", - "baseFile": { - "label": "انتخاب فایل پایه PDF" - }, - "overlayFiles": { - "label": "انتخاب فایل‌های ترکیبی PDF" - }, - "mode": { - "label": "انتخاب حالت ترکیب", - "sequential": "ترکیب ترتیبی", - "interleaved": "ترکیب درهم", - "fixedRepeat": "ترکیب با تکرار ثابت" - }, - "counts": { - "label": "تعداد تکرارهای ترکیب (برای حالت تکرار ثابت)", - "placeholder": "مقادیر تعداد را با کاما جدا کنید (مثلاً ۲,۳,۱)" - }, - "position": { - "label": "انتخاب موقعیت ترکیب", - "foreground": "پیش‌زمینه", - "background": "پس‌زمینه" - }, - "submit": "ارسال" - }, - "split-by-sections": { - "tags": "تقسیم بخش، سفارشی‌سازی", - "title": "تقسیم PDF به بخش‌ها", - "header": "تقسیم PDF به بخش‌ها", - "horizontal": { - "label": "تقسیمات افقی", - "placeholder": "تعداد تقسیمات افقی را وارد کنید" - }, - "vertical": { - "label": "تقسیمات عمودی", - "placeholder": "تعداد تقسیمات عمودی را وارد کنید" - }, - "submit": "تقسیم PDF", - "merge": "ادغام به یک PDF" - }, - "AddStampRequest": { - "tags": "مهر، افزودن تصویر، واترمارک، PDF، سفارشی‌سازی", - "header": "مهر زدن به PDF", - "title": "مهر زدن به PDF", - "stampType": "نوع مهر", - "stampText": "متن مهر", - "stampImage": "تصویر مهر", - "alphabet": "الفبا", - "fontSize": "اندازه فونت/تصویر", - "rotation": "چرخش", - "opacity": "شفافیت", - "position": "موقعیت", - "overrideX": "تغییر مختصات X", - "overrideY": "تغییر مختصات Y", - "customMargin": "حاشیه سفارشی", - "customColor": "رنگ متن سفارشی", - "submit": "ارسال" - }, - "removeImagePdf": { - "tags": "حذف تصویر، عملیات صفحه، سرور" - }, - "splitPdfByChapters": { - "tags": "تقسیم، فصل‌ها، نشانه‌گذاری، سازماندهی" - }, - "validateSignature": { - "tags": "امضا، تأیید، اعتبارسنجی، PDF، گواهی‌نامه، امضای دیجیتال", - "title": "اعتبارسنجی امضاهای PDF", - "header": "اعتبارسنجی امضای دیجیتال", - "selectPDF": "فایل PDF امضاشده را انتخاب کنید", - "submit": "اعتبارسنجی امضاها", - "results": "نتایج اعتبارسنجی", - "status": { - "_value": "وضعیت", - "valid": "معتبر", - "invalid": "نامعتبر" - }, - "signer": "امضاکننده", - "date": "تاریخ", - "reason": "دلیل", - "location": "مکان", - "noSignatures": "هیچ امضای دیجیتالی در این سند یافت نشد", - "chain": { - "invalid": "اعتبارسنجی زنجیره گواهی ناموفق بود - هویت امضاکننده قابل تأیید نیست" - }, - "trust": { - "invalid": "گواهی در مخزن اعتماد نیست - منبع قابل تأیید نیست" - }, - "cert": { - "expired": "گواهی منقضی شده است", - "revoked": "گواهی لغو شده است", - "info": "جزئیات گواهی", - "issuer": "صادرکننده", - "subject": "موضوع", - "serialNumber": "شماره سریال", - "validFrom": "معتبر از", - "validUntil": "معتبر تا", - "algorithm": "الگوریتم", - "keySize": "اندازه کلید", - "version": "نسخه", - "keyUsage": "کاربرد کلید", - "selfSigned": "با امضای خود", - "bits": "بیت‌ها" - }, - "signature": { - "info": "اطلاعات امضا", - "_value": "امضا", - "mathValid": "امضا از لحاظ ریاضی معتبر است اما:" - }, - "selectCustomCert": "فایل گواهی سفارشی X.509 (اختیاری)" - }, - "replace-color": { - "title": "جایگزینی/معکوس کردن رنگ", - "header": "جایگزینی/معکوس کردن رنگ PDF", - "selectText": { - "1": "گزینه‌های جایگزینی یا معکوس کردن رنگ", - "2": "پیش‌فرض (رنگ‌های پیش‌فرض با کنتراست بالا)", - "3": "سفارشی (رنگ‌های سفارشی‌سازی شده)", - "4": "معکوس کامل (معکوس کردن تمام رنگ‌ها)", - "5": "گزینه‌های رنگ با کنتراست بالا", - "6": "متن سفید روی پس‌زمینه سیاه", - "7": "متن سیاه روی پس‌زمینه سفید", - "8": "متن زرد روی پس‌زمینه سیاه", - "9": "متن سبز روی پس‌زمینه سیاه", - "10": "انتخاب رنگ متن", - "11": "انتخاب رنگ پس‌زمینه" - }, - "submit": "جایگزینی" - }, - "replaceColorPdf": { - "tags": "جایگزینی رنگ، عملیات صفحه، سرور" - }, - "login": { - "title": "ورود", - "header": "ورود", - "signin": "ورود", - "rememberme": "مرا به خاطر بسپار", - "invalid": "نام کاربری یا رمز عبور اشتباه است.", - "locked": "حساب شما قفل شده است.", - "signinTitle": "لطفاً وارد شوید", - "ssoSignIn": "ورود از طریق Single Sign-on", - "oAuth2AutoCreateDisabled": "ایجاد خودکار کاربر با OAUTH2 غیرفعال است", - "oAuth2AdminBlockedUser": "ثبت‌نام یا ورود کاربران ثبت‌نشده در حال حاضر مسدود است. لطفاً با مدیر تماس بگیرید.", - "oauth2RequestNotFound": "درخواست احراز هویت پیدا نشد", - "oauth2InvalidUserInfoResponse": "پاسخ اطلاعات کاربری نامعتبر است", - "oauth2invalidRequest": "درخواست نامعتبر", - "oauth2AccessDenied": "دسترسی ممنوع", - "oauth2InvalidTokenResponse": "پاسخ توکن نامعتبر است", - "oauth2InvalidIdToken": "توکن شناسه نامعتبر است", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "کاربر غیرفعال شده است، ورود با این نام کاربری در حال حاضر مسدود است. لطفاً با مدیر تماس بگیرید.", - "alreadyLoggedIn": "شما قبلاً وارد شده‌اید در", - "alreadyLoggedIn2": "دستگاه‌ها. لطفاً از دستگاه‌ها خارج شده و دوباره تلاش کنید.", - "toManySessions": "شما تعداد زیادی نشست فعال دارید.", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF به یک صفحه", - "header": "PDF به یک صفحه", - "submit": "تبدیل به یک صفحه" - }, - "pageExtracter": { - "title": "استخراج صفحات", - "header": "استخراج صفحات", - "submit": "استخراج", - "placeholder": "(مثال: 1,2,8 یا 4,7,12-16 یا 2n-1)" - }, - "sanitizePDF": { - "title": "پاکسازی PDF", - "header": "پاکسازی یک فایل PDF", - "selectText": { - "1": "حذف عملیات جاوااسکریپت", - "2": "حذف فایل‌های جاسازی شده", - "3": "Remove XMP metadata", - "4": "حذف لینک‌ها", - "5": "حذف فونت‌ها", - "6": "Remove Document Info Metadata" - }, - "submit": "پاکسازی PDF" - }, - "adjustContrast": { - "title": "تنظیم کنتراست", - "header": "تنظیم کنتراست", - "contrast": "کنتراست:", - "brightness": "روشنایی:", - "saturation": "اشباع:", - "download": "دانلود" - }, - "compress": { - "title": "فشرده‌سازی", - "header": "فشرده‌سازی PDF", - "credit": "این سرویس از qpdf برای فشرده‌سازی / بهینه‌سازی PDF استفاده می‌کند.", - "grayscale": { - "label": "اعمال مقیاس خاکستری برای فشرده‌سازی" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "سطح بهینه‌سازی:", - "4": "حالت خودکار - کیفیت را به طور خودکار تنظیم می‌کند تا PDF به اندازه دقیق برسد", - "5": "اندازه PDF مورد انتظار (مثلاً ۲۵MB، ۱۰.۸MB، ۲۵KB)" - }, - "submit": "فشرده‌سازی" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "این ویژگی همچنین در صفحه ابزار چندگانه ما موجود است. برای رابط کاربری صفحه به صفحه پیشرفته و ویژگی‌های اضافی بررسی کنید!" - }, - "pageRemover": { - "title": "حذف صفحات", - "header": "حذف صفحات PDF", - "pagesToDelete": "صفحات برای حذف (یک لیست از اعداد صفحه جدا شده با کاما وارد کنید):", - "submit": "حذف صفحات", - "placeholder": "(مثال: ۱,۲,۶ یا ۱-۱۰,۱۵-۳۰)" - }, - "imageToPDF": { - "title": "تبدیل تصویر به PDF", - "header": "تبدیل تصویر به PDF", - "submit": "تبدیل", - "selectLabel": "گزینه‌های تناسب تصویر", - "fillPage": "پر کردن صفحه", - "fitDocumentToImage": "تناسب صفحه با تصویر", - "maintainAspectRatio": "حفظ نسبت‌های ابعاد", - "selectText": { - "2": "چرخش خودکار PDF", - "3": "منطق چند فایل (فقط در صورت کار با چندین تصویر فعال است)", - "4": "ادغام در یک PDF واحد", - "5": "تبدیل به PDF های جداگانه" - } - }, - "PDFToCSV": { - "title": "PDF به CSV", - "header": "PDF به CSV", - "prompt": "صفحه‌ای که می‌خواهید جدول استخراج شود را انتخاب کنید", - "submit": "استخراج" - }, - "split-by-size-or-count": { - "title": "تقسیم PDF بر اساس اندازه یا تعداد", - "header": "تقسیم PDF بر اساس اندازه یا تعداد", - "type": { - "label": "انتخاب نوع تقسیم", - "size": "بر اساس اندازه", - "pageCount": "بر اساس تعداد صفحات", - "docCount": "بر اساس تعداد اسناد" - }, - "value": { - "label": "وارد کردن مقدار", - "placeholder": "اندازه را وارد کنید (مثلاً ۲MB یا ۳KB) یا تعداد (مثلاً ۵)" - }, - "submit": "ارسال" - }, - "printFile": { - "title": "چاپ فایل", - "header": "چاپ فایل به چاپگر", - "selectText": { - "1": "انتخاب فایل برای چاپ", - "2": "نام چاپگر را وارد کنید" - }, - "submit": "چاپ" - }, - "licenses": { - "nav": "مجوزها", - "title": "مجوزهای شخص ثالث", - "header": "مجوزهای شخص ثالث", - "module": "ماژول", - "version": "نسخه", - "license": "مجوز" - }, - "survey": { - "nav": "نظرسنجی", - "title": "نظرسنجی Stirling-PDF", - "description": "Stirling-PDF هیچ ردیابی ندارد، بنابراین ما می‌خواهیم از کاربران خود بشنویم تا Stirling-PDF را بهبود دهیم!", - "changes": "Stirling-PDF از زمان آخرین نظرسنجی تغییر کرده است! برای کسب اطلاعات بیشتر لطفاً پست وبلاگ ما را اینجا بررسی کنید:", - "changes2": "با این تغییرات، ما حمایت و تأمین مالی تجاری دریافت می‌کنیم", - "please": "لطفاً در نظر بگیرید که در نظرسنجی ما شرکت کنید!", - "disabled": "(پنجره نظرسنجی در بروزرسانی‌های آینده غیرفعال خواهد شد اما در پایین صفحه در دسترس خواهد بود)", - "button": "شرکت در نظرسنجی", - "dontShowAgain": "دیگر نشان نده", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "حذف تصویر", - "header": "حذف تصویر", - "removeImage": "حذف تصویر", - "submit": "حذف تصویر" - }, - "splitByChapters": { - "title": "تقسیم PDF بر اساس فصل‌ها", - "header": "تقسیم PDF بر اساس فصل‌ها", - "bookmarkLevel": "سطح نشانک", - "includeMetadata": "شامل متادیتا", - "allowDuplicates": "اجازه‌ی تکرار", - "desc": { - "1": "این ابزار یک فایل PDF را بر اساس ساختار فصل‌اش به چندین فایل PDF تقسیم می‌کند.", - "2": "سطح نشانک: سطح نشانک‌ها را برای استفاده در تقسیم انتخاب کنید (0 برای سطح بالا، 1 برای سطح دوم و غیره).", - "3": "شامل متادیتا: اگر انتخاب شده، متادیتای فایل PDF اصلی در هر فایل تقسیم‌شده گنجانده خواهد شد.", - "4": "اجازه‌ی تکرار: اگر انتخاب شده باشد، اجازه می‌دهد نشانک‌های متعدد در یک صفحه، فایل‌های PDF جداگانه ایجاد کنند." - }, - "submit": "تقسیم PDF" - }, - "fileChooser": { - "click": "کلیک کنید", - "or": "یا", - "dragAndDrop": "بکشید و رها کنید", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "فایل(های) خود را اینجا بکشید و رها کنید", - "extractPDF": "در حال استخراج..." - }, - "releases": { - "footer": "نسخه‌ها", - "title": "یادداشت‌های نسخه", - "header": "یادداشت‌های نسخه", - "current": { - "version": "نسخه فعلی" - }, - "note": "یادداشت‌های نسخه فقط به زبان انگلیسی موجود است" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/fr-FR/translation.json b/frontend/dist/locales/fr-FR/translation.json deleted file mode 100644 index 6d88493ca..000000000 --- a/frontend/dist/locales/fr-FR/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Taille de Police", - "fontName": "Nom de la Police", - "title": "Ajouter des numéros de page", - "header": "Ajouter des numéros de page", - "selectText": { - "1": "Sélectionnez le fichier PDF", - "2": "Taille de la marge", - "3": "Position", - "4": "Numéro de départ", - "5": "Pages à numéroter", - "6": "Texte personnalisé" - }, - "customTextDesc": "Texte personnalisé", - "numberPagesDesc": "Quelles pages numéroter, par défaut 'all' (toutes les pages), accepte également 1-5 ou 2,5,9, etc.", - "customNumberDesc": "La valeur par défaut est '{n}', accepte également 'Page {n} sur {total}', 'Texte-{n}', '{filename}-{n}'", - "submit": "Ajouter les numéros de page" - }, - "pdfPrompt": "Sélectionnez le(s) PDF", - "multiPdfPrompt": "Sélectionnez les PDF", - "multiPdfDropPrompt": "Sélectionnez (ou glissez-déposez) tous les PDF dont vous avez besoin", - "imgPrompt": "Choisir une image", - "genericSubmit": "Envoyer", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Attention, ce processus peut prendre jusqu'à une minute en fonction de la taille du fichier.", - "pageOrderPrompt": "Ordre des pages (entrez une liste de numéros de page séparés par des virgules ou des fonctions telles que 2n+1) :", - "pageSelectionPrompt": "Sélection des pages (entrez une liste de numéros de page séparés par des virgules ou des fonctions telles que 2n+1) :", - "goToPage": "Aller", - "true": "Vrai", - "false": "Faux", - "unknown": "Inconnu", - "save": "Enregistrer", - "saveToBrowser": "Enregistrer dans le navigateur", - "close": "Fermer", - "filesSelected": "fichiers sélectionnés", - "noFavourites": "Aucun favori ajouté", - "downloadComplete": "Téléchargement terminé", - "bored": "Marre d'attendre ?", - "alphabet": "Alphabet", - "downloadPdf": "Télécharger le PDF", - "text": "Texte", - "font": "Police", - "selectFillter": "-- Sélectionnez --", - "pageNum": "Numéro de page", - "sizes": { - "small": "Petit", - "medium": "Moyen", - "large": "Grand", - "x-large": "Très grand" - }, - "error": { - "pdfPassword": "Le document PDF est protégé par un mot de passe qui n'a pas été fourni ou était incorrect", - "_value": "Erreur", - "sorry": "Désolé pour ce problème !", - "needHelp": "Besoin d'aide / Vous avez trouvé un problème ?", - "contactTip": "Si vous avez encore des problèmes, n'hésitez pas à nous contacter pour obtenir de l'aide. Vous pouvez soumettre un ticket sur notre page GitHub ou nous contacter via Discord :", - "404": { - "head": "404 - Page non trouvée | oups on s'est foiré !", - "1": "Nous ne parvenons pas à trouver la page que vous recherchez.", - "2": "Quelque chose n'a pas fonctionné" - }, - "github": "Créer un ticket sur GitHub", - "showStack": "Afficher la Stack Trace", - "copyStack": "Copier la Stack Trace", - "githubSubmit": "GitHub - Créer un ticket", - "discordSubmit": "Discord - Poster un message de demande d'assistance" - }, - "delete": "Supprimer", - "username": "Nom d'utilisateur", - "password": "Mot de passe", - "welcome": "Bienvenue", - "property": "Propriété", - "black": "Noir", - "white": "Blanc", - "red": "Rouge", - "green": "Vert", - "blue": "Bleu", - "custom": "Personnalisé…", - "WorkInProgess": "En cours de développement, merci de nous remonter les problèmes que vous pourriez constater!", - "poweredBy": "Propulsé par", - "yes": "Oui", - "no": "Non", - "changedCredsMessage": "Les identifiants ont été mis à jour !", - "notAuthenticatedMessage": "Utilisateur non authentifié.", - "userNotFoundMessage": "Utilisateur non trouvé.", - "incorrectPasswordMessage": "Le mot de passe actuel est incorrect.", - "usernameExistsMessage": "Le nouveau nom d'utilisateur existe déjà.", - "invalidUsernameMessage": "Nom d'utilisateur invalide, le nom d'utilisateur ne peut contenir que des lettres, des chiffres et les caractères spéciaux suivants @._+- ou doit être une adresse e-mail valide.", - "invalidPasswordMessage": "Le mot de passe ne peut pas être vide et ne doit pas contenir d'espaces au début ou à la fin.", - "confirmPasswordErrorMessage": "Le nouveau mot de passe et sa confirmation doivent être identiques.", - "deleteCurrentUserMessage": "Impossible de supprimer l'utilisateur actuellement connecté.", - "deleteUsernameExistsMessage": "Le nom d'utilisateur n'existe pas et ne peut pas être supprimé.", - "downgradeCurrentUserMessage": "Impossible de rétrograder le rôle de l'utilisateur actuel.", - "disabledCurrentUserMessage": "L'utilisateur actuel ne peut pas être désactivé", - "downgradeCurrentUserLongMessage": "Impossible de rétrograder le rôle de l'utilisateur actuel. Par conséquent, l'utilisateur actuel ne sera pas affiché.", - "userAlreadyExistsOAuthMessage": "L'utilisateur existe déjà en tant qu'utilisateur OAuth2.", - "userAlreadyExistsWebMessage": "L'utilisateur existe déjà en tant qu'utilisateur Web.", - "oops": "Oups !", - "help": "Aide", - "goHomepage": "Aller à la page d'accueil", - "joinDiscord": "Rejoignez notre serveur Discord", - "seeDockerHub": "Consulter le Docker Hub", - "visitGithub": "Visiter le dépôt Github", - "donate": "Faire un don", - "color": "Couleur", - "sponsor": "Sponsoriser", - "info": "Informations", - "pro": "Pro", - "page": "Page", - "pages": "Pages", - "loading": "Chargement...", - "addToDoc": "Ajouter au Document", - "reset": "Réinitialiser", - "apply": "Appliquer", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Politique de Confidentialité", - "terms": "Conditions Générales", - "accessibility": "Accessibilité", - "cookie": "Politique des Cookies", - "impressum": "Mentions Légales", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Menu Pipeline (Beta)", - "uploadButton": "Charger une personnalisation", - "configureButton": "Configurer", - "defaultOption": "Personnaliser", - "submitButton": "Soumettre", - "help": "Aide Pipeline", - "scanHelp": "Aide analyse de dossier", - "deletePrompt": "Êtes-vous sûr de vouloir supprimer le pipeline ?", - "tags": "automatiser,séquencer,automate,sequence,scripted,batch-process", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Configuration du pipeline", - "pipelineNameLabel": "Nom du pipeline", - "saveSettings": "Sauvegarder la configuration", - "pipelineNamePrompt": "Entrez ici le nom du pipeline", - "selectOperation": "Sélectionner une opération", - "addOperationButton": "Ajouter une opération", - "pipelineHeader": "Pipeline :", - "saveButton": "Télécharger", - "validateButton": "Valider" - }, - "enterpriseEdition": { - "button": "Passer à Pro", - "warning": "Cette fonctionnalité est uniquement disponible pour les utilisateurs Pro.", - "yamlAdvert": "Stirling PDF Pro prend en charge les fichiers de configuration YAML et d'autres fonctionnalités SSO.", - "ssoAdvert": "Vous cherchez plus de fonctionnalités de gestion des utilisateurs ? Découvrez Stirling PDF Pro" - }, - "analytics": { - "title": "Souhaitez-vous améliorer Stirling PDF ?", - "paragraph1": "Stirling PDF utilise des analyses volontaires pour nous aider à améliorer le produit. Nous ne suivons aucune information personnelle ni le contenu des fichiers.", - "paragraph2": "Veuillez envisager d'activer les analyses pour aider Stirling-PDF à se développer et pour nous permettre de mieux comprendre nos utilisateurs.", - "enable": "Activer les analyses", - "disable": "Désactiver les analyses", - "settings": "Vous pouvez modifier les paramètres des analyses dans le fichier config/settings.yml" - }, - "navbar": { - "favorite": "Favoris", - "recent": "Nouveau et mise à jour", - "darkmode": "Mode sombre", - "language": "Langues", - "settings": "Paramètres", - "allTools": "Outils", - "multiTool": "Outils Multiples", - "search": "Rechercher", - "sections": { - "organize": "Organisation", - "convertTo": "Convertir en PDF", - "convertFrom": "Convertir depuis PDF", - "security": "Signature et sécurité", - "advance": "Mode avancé", - "edit": "Voir et modifier", - "popular": "Populaire" - } - }, - "settings": { - "title": "Paramètres", - "update": "Mise à jour disponible", - "updateAvailable": "{0} est la version actuellement installée. Une nouvelle version ({1}) est disponible.", - "appVersion": "Version de l'application :", - "downloadOption": { - "title": "Choisissez l'option de téléchargement (pour les téléchargements à fichier unique non ZIP) :", - "1": "Ouvrir dans la même fenêtre", - "2": "Ouvrir dans une nouvelle fenêtre", - "3": "Télécharger le fichier" - }, - "zipThreshold": "Compresser les fichiers en ZIP lorsque le nombre de fichiers téléchargés dépasse", - "signOut": "Déconnexion", - "accountSettings": "Paramètres du compte", - "bored": { - "help": "Activer les jeux cachés" - }, - "cacheInputs": { - "name": "Sauvegarder les entrées du formulaire", - "help": "Permet de stocker les entrées précédemment utilisées pour les exécutions futures" - } - }, - "changeCreds": { - "title": "Modifiez vos identifiants", - "header": "Mettez à jour vos identifiants de connexion", - "changePassword": "Vous utilisez les identifiants de connexion par défaut. Veuillez saisir un nouveau mot de passe", - "newUsername": "Nouveau nom d'utilisateur", - "oldPassword": "Mot de passe actuel", - "newPassword": "Nouveau mot de passe", - "confirmNewPassword": "Confirmer le nouveau mot de passe", - "submit": "Soumettre les modifications" - }, - "account": { - "title": "Paramètres du compte", - "accountSettings": "Paramètres du compte", - "adminSettings": "Paramètres d'administration – Voir et ajouter des utilisateurs", - "userControlSettings": "Contrôle des paramètres des utilisateurs", - "changeUsername": "Modifier le nom d'utilisateur", - "newUsername": "Nouveau nom d'utilisateur", - "password": "Mot de passe de confirmation", - "oldPassword": "Ancien mot de passe", - "newPassword": "Nouveau mot de passe", - "changePassword": "Modifier le mot de passe", - "confirmNewPassword": "Confirmer votre nouveau mot de passe", - "signOut": "Déconnexion", - "yourApiKey": "Votre clé API", - "syncTitle": "Synchroniser les paramètres du navigateur avec le compte", - "settingsCompare": "Comparaison des paramètres", - "property": "Propriété", - "webBrowserSettings": "Paramètres du navigateur", - "syncToBrowser": "Synchroniser : Compte → Navigateur", - "syncToAccount": "Synchroniser : Compte ← Navigateur" - }, - "adminUserSettings": { - "title": "Administration des paramètres des utilisateurs", - "header": "Administration des paramètres des utilisateurs", - "admin": "Administateur", - "user": "Utilisateur", - "addUser": "Ajouter un utilisateur", - "deleteUser": "Supprimer l'utilisateur", - "confirmDeleteUser": "Voulez vous vraiment supprimer l'utilisateur ?", - "confirmChangeUserStatus": "Voulez vous vraiment déactiver/réactiver l'utilisateur ?", - "usernameInfo": "Le nom d'utilisateur ne peut contenir que des lettres, des chiffres et les caractères spéciaux suivants @._+- ou doit être une adresse e-mail valide.", - "roles": "Rôles", - "role": "Rôle", - "actions": "Actions", - "apiUser": "Utilisateur API limité", - "extraApiUser": "Utilisateur limité supplémentaire de l'API", - "webOnlyUser": "Utilisateur Web uniquement", - "demoUser": "Demo User (Paramètres par défaut)", - "internalApiUser": "Utilisateur de l'API interne", - "forceChange": "Forcer l'utilisateur à changer son nom d'utilisateur/mot de passe lors de la connexion", - "submit": "Ajouter", - "changeUserRole": "Changer le rôle de l'utilisateur", - "authenticated": "Authentifié", - "editOwnProfil": "Éditer son propre profil", - "enabledUser": "Utilisateur activé", - "disabledUser": "Utilisateur désactivé", - "activeUsers": "Utilisateurs actifs :", - "disabledUsers": "Utilisateurs désactivés :", - "totalUsers": "Utilisateurs au total :", - "lastRequest": "Dernière requête", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Import/Export de la Base de Données", - "header": "Import/Export de la Base de Données", - "fileName": "Nom du Fichier", - "creationDate": "Date de Création", - "fileSize": "Taille du Fichier", - "deleteBackupFile": "Supprimer le fichier de sauvegarde", - "importBackupFile": "Importer le fichier de sauvegarde", - "createBackupFile": "Créer un fichier de sauvegarde", - "downloadBackupFile": "Télécharger le fichier de sauvegarde", - "info_1": "Lors de l'importation des données, il est crucial de garantir la structure correcte. Si vous n'êtes pas sûr de ce que vous faites, sollicitez un avis et un soutien d'un professionnel. Une erreur dans la structure peut entraîner des dysfonctionnements de l'application, allant jusqu'à l'incapacité totale d'exécuter l'application.", - "info_2": "Le nom du fichier ne fait pas de différence lors de l'upload. Il sera renommé ultérieurement selon le format backup_user_yyyyMMddHHmm.sql, assurant ainsi une convention de nommage cohérente.", - "submit": "Importer la sauvegarde", - "importIntoDatabaseSuccessed": "Importation dans la base de données réussie", - "backupCreated": "Sauvegarde de la base de donnée réussie", - "fileNotFound": "Fichier introuvable", - "fileNullOrEmpty": "Fichier ne peut pas être null ou vide", - "failedImportFile": "Échec de l'imporation du fichier", - "notSupported": "Cette fonctionnalité n'est pas supportée avec votre base de donnée" - }, - "session": { - "expired": "Votre session a expiré. Veuillez recharger la page et réessayer.", - "refreshPage": "Rafraichir la page" - }, - "home": { - "desc": "Votre application Web hébergée localement pour répondre à tous vos besoins PDF.", - "searchBar": "Rechercher des fonctionnalités...", - "viewPdf": { - "title": "Visionner/Modifier des PDF", - "desc": "Visionner, annoter, ajouter du texte ou des images." - }, - "setFavorites": "Ajouter des favoris", - "hideFavorites": "Cacher les favoris", - "showFavorites": "Montrer les favoris", - "legacyHomepage": "Ancienne Homepage", - "newHomePage": "Essayez notre nouvelle Homepage !", - "alphabetical": "Alphabétique", - "globalPopularity": "Popularité globale", - "sortBy": "Trier par :", - "multiTool": { - "title": "Outil multifonction PDF", - "desc": "Fusionnez, faites pivoter, réorganisez et supprimez des pages." - }, - "merge": { - "title": "Fusionner", - "desc": "Fusionnez facilement plusieurs PDF en un seul." - }, - "split": { - "title": "Diviser", - "desc": "Divisez un PDF en plusieurs documents." - }, - "rotate": { - "title": "Pivoter", - "desc": "Faites pivoter facilement vos PDF." - }, - "imageToPdf": { - "title": "Image en PDF", - "desc": "Convertissez une image (PNG, JPEG, GIF) en PDF." - }, - "pdfToImage": { - "title": "PDF en image", - "desc": "Convertissez un PDF en image (PNG, JPEG, GIF)." - }, - "pdfOrganiser": { - "title": "Organiser", - "desc": "Supprimez ou réorganisez les pages dans n'importe quel ordre." - }, - "addImage": { - "title": "Ajouter une image", - "desc": "Ajoutez une image à un emplacement défini sur un PDF." - }, - "watermark": { - "title": "Ajouter un filigrane", - "desc": "Ajoutez un filigrane personnalisé à votre PDF." - }, - "permissions": { - "title": "Modifier les permissions", - "desc": "Modifiez les permissions de votre PDF." - }, - "removePages": { - "title": "Supprimer", - "desc": "Supprimez les pages inutiles de votre PDF." - }, - "addPassword": { - "title": "Ajouter un mot de passe", - "desc": "Chiffrez votre PDF avec un mot de passe." - }, - "removePassword": { - "title": "Supprimer le mot de passe", - "desc": "Supprimez la protection par mot de passe de votre PDF." - }, - "compressPdfs": { - "title": "Compresser", - "desc": "Compressez les PDF pour réduire leur tailles." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Modifier les métadonnées", - "desc": "Modifiez, supprimez ou ajoutez des métadonnées à un PDF." - }, - "fileToPDF": { - "title": "Fichier en PDF", - "desc": "Convertissez presque n'importe quel fichier en PDF (DOCX, PNG, XLS, PPT, TXT, etc.)." - }, - "ocr": { - "title": "OCR / Nettoyage des numérisations", - "desc": "Utilisez l'OCR pour analyser et détecter le texte des images d'un PDF et le rajouter en tant que tel." - }, - "extractImages": { - "title": "Extraire les images", - "desc": "Extrayez toutes les images d'un PDF et enregistrez-les dans un ZIP." - }, - "pdfToPDFA": { - "title": "PDF en PDF/A", - "desc": "Convertir un PDF en PDF/A pour un stockage à long terme." - }, - "PDFToWord": { - "title": "PDF en Word", - "desc": "Convertissez un PDF en Word (DOC, DOCX et ODT)." - }, - "PDFToPresentation": { - "title": "PDF en formats de présentation", - "desc": "Convertissez un PDF en format de présentation (PPT, PPTX et ODP)." - }, - "PDFToText": { - "title": "PDF en RTF (texte)", - "desc": "Convertissez un PDF au format RTF (texte)." - }, - "PDFToHTML": { - "title": "PDF en HTML", - "desc": "Convertissez un PDF au format HTML." - }, - "PDFToXML": { - "title": "PDF en XML", - "desc": "Convertissez un PDF au format XML." - }, - "ScannerImageSplit": { - "title": "Diviser les photos numérisées", - "desc": "Divisez plusieurs photos à partir d'une photo ou d'un PDF." - }, - "sign": { - "title": "Signer", - "desc": "Ajoutez une signature au PDF avec un dessin, du texte ou une image." - }, - "flatten": { - "title": "Rendre inerte", - "desc": "Supprimez tous les éléments et formulaires interactifs d'un PDF." - }, - "repair": { - "title": "Réparer", - "desc": "Essayez de réparer un PDF corrompu ou cassé." - }, - "removeBlanks": { - "title": "Supprimer les pages vierges", - "desc": "Détectez et supprimez les pages vierges d'un PDF." - }, - "removeAnnotations": { - "title": "Supprimer les annotations", - "desc": "Supprimer tous les commentaires/annotations d'un PDF." - }, - "compare": { - "title": "Comparer", - "desc": "Comparez et visualisez les différences entre deux PDF." - }, - "certSign": { - "title": "Signer avec un certificat", - "desc": "Signez un PDF avec un certificat ou une clé (PEM/P12)." - }, - "removeCertSign": { - "title": "Supprimer la signature par certificat", - "desc": "Supprimez la signature par certificat d'un PDF" - }, - "pageLayout": { - "title": "Fusionner des pages", - "desc": "Fusionnez plusieurs pages d'un PDF en une seule." - }, - "scalePages": { - "title": "Ajuster l'échelle ou la taille", - "desc": "Modifiez la taille ou l'échelle d'une page et/ou de son contenu." - }, - "pipeline": { - "title": "Pipeline", - "desc": "Exécutez plusieurs actions sur les PDF en définissant des scripts de pipeline." - }, - "add-page-numbers": { - "title": "Ajouter des numéros de page", - "desc": "Ajoutez des numéros de page dans un PDF à un emplacement défini." - }, - "auto-rename": { - "title": "Renommer automatiquement", - "desc": "Renommez automatiquement un fichier PDF en fonction de son en-tête détecté." - }, - "adjust-contrast": { - "title": "Ajuster les couleurs", - "desc": "Ajustez le contraste, la saturation et la luminosité d'un PDF." - }, - "crop": { - "title": "Redimensionner", - "desc": "Redimensionnez un PDF pour réduire sa taille (en conservant le texte !)." - }, - "autoSplitPDF": { - "title": "Séparer automatiquement les pages", - "desc": "Séparez automatiquement le PDF numérisé avec le code QR du diviseur de page numérisé." - }, - "sanitizePdf": { - "title": "Assainir", - "desc": "Supprimez les scripts et autres éléments des PDF." - }, - "URLToPDF": { - "title": "URL en PDF", - "desc": "Convertissez n'importe quelle URL http(s) en PDF." - }, - "HTMLToPDF": { - "title": "HTML en PDF", - "desc": "Convertissez n'importe quel fichier HTML ou ZIP en PDF." - }, - "MarkdownToPDF": { - "title": "Markdown en PDF", - "desc": "Convertissez n'importe quel fichier Markdown en PDF." - }, - "PDFToMarkdown": { - "title": "PDF en Markdown", - "desc": "Convertissez n'importe quel fichier PDF en Markdown." - }, - "getPdfInfo": { - "title": "Récupérer les informations", - "desc": "Récupérez toutes les informations possibles sur un PDF." - }, - "extractPage": { - "title": "Extraire des pages", - "desc": "Extrayez certaines pages du PDF." - }, - "PdfToSinglePage": { - "title": "Fusionner en une seule page", - "desc": "Fusionnez toutes les pages PDF en une seule grande page." - }, - "showJS": { - "title": "Afficher le JavaScript", - "desc": "Recherche et affiche tout JavaScript injecté dans un PDF." - }, - "autoRedact": { - "title": "Caviardage automatique", - "desc": "Caviardez automatiquement les informations sensibles d'un PDF." - }, - "redact": { - "title": "Caviardage manuel", - "desc": "Caviarder un PDF en fonction de texte sélectionné, formes dessinées et/ou des pages sélectionnées." - }, - "tableExtraxt": { - "title": "PDF en CSV", - "desc": "Extrait les tableaux d'un PDF et les transforme en CSV." - }, - "autoSizeSplitPDF": { - "title": "Séparer automatiquement par taille/nombre", - "desc": "Séparer un PDF unique en plusieurs documents en fonction de la taille, du nombre de pages ou du nombre de documents." - }, - "overlay-pdfs": { - "title": "Incrustation de PDF", - "desc": "Incrustation d'un PDF sur un autre PDF." - }, - "split-by-sections": { - "title": "Séparer un PDF en sections", - "desc": "Diviser chaque page d'un PDF en sections horizontales/verticales plus petites." - }, - "AddStampRequest": { - "title": "Ajouter un tampon sur un PDF", - "desc": "Ajouter un texte ou l'image d'un tampon à un emplacement défini." - }, - "removeImagePdf": { - "title": "Supprimer les images", - "desc": "Supprimez les images d'un PDF pour réduire sa taille" - }, - "splitPdfByChapters": { - "title": "Séparer un PDF par chapitres", - "desc": "Séparez un PDF en fichiers multiples en fonction de sa structure par chapitres." - }, - "validateSignature": { - "title": "Valider la signature du fichier PDF", - "desc": "Vérifier les signatures numériques et les certificats des documents PDF" - }, - "replaceColorPdf": { - "title": "Remplacer et Inverser Couleur", - "desc": "Remplacer la couleur pour le texte et l'arrière-plan dans le PDF et inverser la couleur complète du PDF pour réduire la taille du fichier" - } - }, - "viewPdf": { - "tags": "visualiser,lire,annoter,texte,image", - "title": "View/Edit PDF", - "header": "Visualiser un PDF" - }, - "multiTool": { - "tags": "outil multifonction,opération multifonction,interface utilisateur,glisser déposer,front-end,client side,interactif,intransigeant,déplacer,multi tool", - "title": "Outil multifonction PDF", - "header": "Outil multifonction PDF", - "uploadPrompts": "Nom du fichier", - "selectAll": "Tout sélectionner", - "deselectAll": "Tout déselectionner", - "selectPages": "Sélection des pages", - "selectedPages": "Pages sélectionnées", - "page": "Page", - "deleteSelected": "Supprimer la sélection", - "downloadAll": "Exporter", - "downloadSelected": "Exporter la sélection", - "insertPageBreak": "Insérer un saut de page", - "addFile": "Ajouter un fichier", - "rotateLeft": "Rotation vers la gauche", - "rotateRight": "Rotation vers la droite", - "split": "Diviser", - "moveLeft": "Déplacer vers la gauche", - "moveRight": "Déplacer vers la droite", - "delete": "Supprimer", - "dragDropMessage": "Page(s) sélectionnées", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "fusionner,opérations sur les pages,backend,server side,merge", - "title": "Fusionner", - "header": "Fusionner plusieurs PDF", - "sortByName": "Trier par nom", - "sortByDate": "Trier par date", - "removeCertSign": "Supprimer la signature numérique dans le fichier fusionné ?", - "submit": "Fusionner" - }, - "split": { - "tags": "opérations sur les pages,diviser,plusieurs pages,cut,server side,divide", - "title": "Diviser", - "header": "Diviser", - "desc": { - "1": "Les numéros que vous sélectionnez sont le numéro de page sur lequel vous souhaitez faire une division", - "2": "Ainsi, la sélection de 1,3,7-9 diviserait un document de 10 pages en 6 PDF distincts avec :", - "3": "Document #1: Page 1", - "4": "Document #2: Page 2 et 3", - "5": "Document #3: Page 4, 5, 6 et 7", - "6": "Document #4: Page 8", - "7": "Document #5: Page 9", - "8": "Document #6: Page 10" - }, - "splitPages": "Pages sur lesquelles diviser", - "submit": "Diviser" - }, - "rotate": { - "tags": "pivoter,server side,rotate", - "title": "Pivoter", - "header": "Pivoter", - "selectAngle": "Angle de rotation (par multiples de 90 degrés)", - "submit": "Pivoter" - }, - "imageToPdf": { - "tags": "pdf,conversion,img,jpg,image,photo" - }, - "pdfToImage": { - "tags": "conversion,img,jpg,image,photo", - "title": "PDF en Image", - "header": "PDF en Image", - "selectText": "Format d'image", - "singleOrMultiple": "Type de résultat", - "single": "Une seule grande image", - "multi": "Plusieurs images", - "colorType": "Type d'impression", - "color": "Couleur", - "grey": "Niveaux de gris", - "blackwhite": "Noir et blanc (peut engendrer une perte de données !)", - "submit": "Convertir", - "info": "Python n’est pas installé. Nécessaire pour la conversion WebP.", - "placeholder": "(par exemple : 1,2,8 ou 4,7,12-16 ou 2n-1)" - }, - "pdfOrganiser": { - "tags": "organiser,recto-verso,duplex,even,odd,sort,move", - "title": "Organiser", - "header": "Organiser les pages", - "submit": "Organiser", - "mode": { - "_value": "Mode", - "1": "Ordre des pages personnalisé", - "2": "Ordre inverse", - "3": "Tri recto verso", - "4": "Tri des livrets", - "5": "Tri de livrets à points latéraux", - "6": "Partage impair-pair", - "7": "Supprimer le premier", - "8": "Supprimer le dernier", - "9": "Supprimer le premier et le dernier", - "10": "Méger Impair-Pair", - "11": "Duplicate all pages" - }, - "placeholder": "(par exemple 1,3,2 ou 4-8,2,10-12 ou 2n-1)" - }, - "addImage": { - "tags": "img,jpg,image,photo", - "title": "Ajouter une image", - "header": "Ajouter une image", - "everyPage": "Toutes les pages ?", - "upload": "Télécharger une image", - "submit": "Ajouter une image" - }, - "watermark": { - "tags": "texte,filigrane,label,propriété,droit d'auteur,marque déposée,img,jpg,image,photo,copyright,trademark", - "title": "Ajouter un filigrane", - "header": "Ajouter un filigrane", - "customColor": "Couleur de texte personnalisée", - "selectText": { - "1": "PDF auquel ajouter un filigrane", - "2": "Texte du filigrane", - "3": "Taille de police", - "4": "Rotation (de 0 à 360 degrés)", - "5": "Width Spacer (espace entre chaque filigrane horizontalement)", - "6": "Height Spacer (espace entre chaque filigrane verticalement)", - "7": "Opacité (de 0% à 100%)", - "8": "Type de filigrane", - "9": "Image du filigrane", - "10": "Convertir le PDF en PDF-Image" - }, - "submit": "Ajouter un filigrane", - "type": { - "1": "Texte", - "2": "Image" - } - }, - "permissions": { - "tags": "permissions,lire,écrire,modifier,imprimer,read,write,edit,print", - "title": "Modifier les permissions", - "header": "Modifier les permissions", - "warning": "Attention, pour que ces permissions soient immuables il est recommandé de les paramétrer avec un mot de passe via la page Ajouter un mot de passe.", - "selectText": { - "1": "Sélectionnez le PDF", - "2": "Permissions à définir", - "3": "Empêcher l'assemblage du document", - "4": "Empêcher l'extraction de contenu", - "5": "Empêcher l'extraction pour l'accessibilité", - "6": "Empêcher de remplir les formulaires", - "7": "Empêcher la modification", - "8": "Empêcher la modification des annotations", - "9": "Empêcher l'impression", - "10": "Empêcher l'impression des différents formats" - }, - "submit": "Modifier" - }, - "removePages": { - "tags": "supprimer,remove,delete" - }, - "addPassword": { - "tags": "ajouter,sécurité,mot de passe,secure,security", - "title": "Ajouter un mot de passe", - "header": "Ajouter un mot de passe", - "selectText": { - "1": "PDF à chiffrer", - "2": "Mot de passe de l'utilisateur", - "3": "Longueur de la clé de chiffrement", - "4": "Les valeurs plus élevées sont plus fortes, mais les valeurs plus faibles ont une meilleure compatibilité.", - "5": "Autorisations à définir (utilisation recommandée avec le mot de passe du propriétaire)", - "6": "Empêcher l'assemblage du document", - "7": "Empêcher l'extraction de contenu", - "8": "Empêcher l'extraction pour l'accessibilité", - "9": "Empêcher de remplir les formulaires", - "10": "Empêcher la modification", - "11": "Empêcher la modification des annotations", - "12": "Empêcher l'impression", - "13": "Empêcher l'impression des différents formats", - "14": "Mot de passe du propriétaire", - "15": "Restreint ce qui peut être fait avec le document une fois qu'il est ouvert (non pris en charge par tous les lecteurs).", - "16": "Restreint l'ouverture du document lui-même." - }, - "submit": "Chiffrer" - }, - "removePassword": { - "tags": "supprimer,sécurité,mot de passe,secure,decrypt,security,unpassword,delete password", - "title": "Supprimer le mot de passe", - "header": "Supprimer le mot de passe", - "selectText": { - "1": "Sélectionnez le PDF", - "2": "Mot de passe" - }, - "submit": "Supprimer" - }, - "compressPdfs": { - "tags": "compresser,réduire,taille,squish,small,tiny" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "métadonnées,titre,auteur,date,création,heure,éditeur,statistiques,title,author,date,creation,time,publisher,producer,stats,metadata", - "title": "Titre", - "header": "Modifier les métadonnées", - "selectText": { - "1": "Veuillez modifier les variables que vous souhaitez modifier.", - "2": "Supprimer toutes les métadonnées", - "3": "Afficher des métadonnées personnalisées", - "4": "Autres métadonnées", - "5": "Ajouter une entrée de métadonnées personnalisée" - }, - "author": "Auteur", - "creationDate": "Date de création (yyyy/MM/dd HH:mm:ss)", - "creator": "Créateur", - "keywords": "Mots clés", - "modDate": "Date de modification (yyyy/MM/dd HH:mm:ss)", - "producer": "Producteur", - "subject": "Sujet", - "trapped": "Recouvrement (technique d'impression)", - "submit": "Modifier" - }, - "fileToPDF": { - "tags": "convertion,transformation,format,document,image,slide,texte,conversion,office,docs,word,excel,powerpoint", - "title": "Fichier en PDF", - "header": "Convertir un fichier en PDF", - "credit": "Ce service utilise LibreOffice et Unoconv pour la conversion de fichiers.", - "supportedFileTypesInfo": "Types de fichiers pris en charge", - "supportedFileTypes": "Les types de fichiers pris en charge doivent inclure les éléments ci-dessous, mais pour une liste complète et mise à jour des formats pris en charge, veuillez vous reporter à la documentation de LibreOffice.", - "submit": "Convertir" - }, - "ocr": { - "tags": "ocr,reconnaissance,texte,image,numérisation,scan,read,identify,detection,editable", - "title": "OCR / Nettoyage des numérisations", - "header": "OCR (Reconnaissance optique de caractères) / Nettoyage des numérisations", - "selectText": { - "1": "Langues à détecter dans le PDF (celles listées sont celles actuellement détectées)", - "2": "Produire un fichier texte contenant le texte détecté à côté du PDF", - "3": "Corriger les pages qui ont été numérisées à un angle oblique en les remettant en place", - "4": "Nettoyer la page afin qu'il soit moins probable que l'OCR trouve du texte dans le bruit de fond, sans modifier la sortie", - "5": "Nettoyer la page afin qu'il soit moins probable que l'OCR trouve du texte dans le bruit de fond, en modifiant la sortie", - "6": "Ignorer les pages contenant du texte interactif, n'analyser que les pages qui sont des images", - "7": "Forcer l'OCR, analyser chaque page et supprimer tous les éléments de texte d'origine", - "8": "Normal (génère une erreur si le PDF contient du texte)", - "9": "Paramètres additionnels", - "10": "Mode OCR", - "11": "Supprimer les images après l'OCR (Supprime TOUTES les images, utile uniquement si elles font partie de l'étape de conversion)", - "12": "Type de rendu (avancé)" - }, - "help": "Veuillez lire cette documentation pour savoir comment utiliser l'OCR pour d'autres langues ou une utilisation hors Docker :", - "credit": "Ce service utilise qpdf et Tesseract pour l'OCR.", - "submit": "Traiter" - }, - "extractImages": { - "tags": "image,photo,save,archive,zip,capture,grab", - "title": "Extraire les images", - "header": "Extraire les images", - "selectText": "Format d'image dans lequel convertir les images extraites", - "allowDuplicates": "Enregistrer les images dupliquées", - "submit": "Extraire" - }, - "pdfToPDFA": { - "tags": "convertion,archive,long-term,standard,conversion,storage,préservation,preservation", - "title": "PDF en PDF/A", - "header": "PDF en PDF/A", - "credit": "Ce service utilise libreoffice pour la conversion en PDF/A.", - "submit": "Convertir", - "tip": "Ne fonctionne actuellement pas pour plusieurs entrées à la fois", - "outputFormat": "Format de sortie", - "pdfWithDigitalSignature": "Le PDF contient une signature numérique. Elle sera supprimée dans l'étape suivante." - }, - "PDFToWord": { - "tags": "doc, docx, odt, word, transformation, format, conversion, office, microsoft, docfile", - "title": "PDF en Word", - "header": "PDF en Word", - "selectText": { - "1": "Format du fichier de sortie" - }, - "credit": "Ce service utilise LibreOffice pour la conversion de fichiers.", - "submit": "Convertir" - }, - "PDFToPresentation": { - "tags": "présentation,slides,show,office,microsoft", - "title": "PDF en formats de présentation", - "header": "PDF en formats de présentation", - "selectText": { - "1": "Format du fichier de sortie" - }, - "credit": "Ce service utilise LibreOffice pour la conversion de fichiers.", - "submit": "Convertir" - }, - "PDFToText": { - "tags": "format riche, format de texte riche, format de texte enrichi", - "title": "PDF en RTF (texte)", - "header": "PDF en RTF (texte)", - "selectText": { - "1": "Format du fichier de sortie" - }, - "credit": "Ce service utilise LibreOffice pour la conversion de fichiers.", - "submit": "Convertir" - }, - "PDFToHTML": { - "tags": "html,web content,browser friendly", - "title": "PDF en HTML", - "header": "PDF en HTML", - "credit": "Ce service utilise pdftohtml pour la conversion de fichiers.", - "submit": "Convertir" - }, - "PDFToXML": { - "tags": "xml,extraction de données,contenu structuré,interopérabilité,data-extraction,structured-content,interop,transformation,convert", - "title": "PDF en XML", - "header": "PDF en XML", - "credit": "Ce service utilise LibreOffice pour la conversion de fichiers.", - "submit": "Convertir" - }, - "ScannerImageSplit": { - "tags": "diviser,détecter automatiquement,numériser,separate,auto-detect,scans,multi-photo,organize", - "selectText": { - "1": "Seuil de rotation", - "2": "Définit l'angle absolu minimum requis pour la rotation de l'image (par défaut : 10).", - "3": "Tolérance", - "4": "Détermine la plage de variation de couleur autour de la couleur d'arrière-plan estimée (par défaut : 20).", - "5": "Surface minimale", - "6": "Définit la surface minimale pour une photo (par défaut : 8 000).", - "7": "Surface de contour minimale", - "8": "Définit la surface de contour minimale pour une photo (par défaut : 500).", - "9": "Taille de la bordure", - "10": "Définit la taille de la bordure ajoutée et supprimée pour éviter les bordures blanches dans la sortie (par défaut : 1)." - }, - "info": "Python n'est pas installé. Il est nécessaire pour le fonctionnement." - }, - "sign": { - "tags": "signer,authorize,initials,drawn-signature,text-sign,image-signature", - "title": "Signer", - "header": "Signer", - "upload": "Télécharger une image", - "draw": "Dessiner une signature", - "text": "Saisir de texte", - "clear": "Effacer", - "add": "Ajouter", - "saved": "Sceaux enregistrées", - "save": "Enregistrer le sceau", - "personalSigs": "Sceaux personnels", - "sharedSigs": "Sceaux partagés", - "noSavedSigs": "Aucun sceau enregistré trouvé", - "addToAll": "Ajouter à toutes les pages", - "delete": "Supprimer", - "first": "Première page", - "last": "Dernière page", - "next": "Page suivante", - "previous": "Page précédente", - "maintainRatio": "Conserver les proportions", - "undo": "Défaire", - "redo": "Refaire" - }, - "flatten": { - "tags": "inerte,static,deactivate,non-interactive,streamline", - "title": "Rendre inerte", - "header": "Rendre inerte", - "flattenOnlyForms": "Aplatir uniquement les formulaires", - "submit": "Rendre inerte" - }, - "repair": { - "tags": "réparer,restaurer,corriger,récupérer,fix,restore,correction,recover", - "title": "Réparer", - "header": "Réparer", - "submit": "Réparer" - }, - "removeBlanks": { - "tags": "pages vierges,supprimer,nettoyer,cleanup,streamline,non-content,organize", - "title": "Supprimer les pages vierges", - "header": "Supprimer les pages vierges", - "threshold": "Seuil de blancheur des pixels", - "thresholdDesc": "Seuil pour déterminer à quel point un pixel blanc doit être blanc pour être classé comme « blanc » (0 = noir, 255 = blanc pur).", - "whitePercent": "Pourcentage de blanc", - "whitePercentDesc": "Pourcentage de la page qui doit contenir des pixels « blancs » à supprimer.", - "submit": "Supprimer les pages vierges" - }, - "removeAnnotations": { - "tags": "commentaires,supprimer,annotations,highlight,notes,markup,remove", - "title": "Supprimer les annotations", - "header": "Supprimer les annotations", - "submit": "Supprimer" - }, - "compare": { - "tags": "comparer,analyser,differentiate,contrast,changes,analysis", - "title": "Comparer", - "header": "Comparer", - "highlightColor": { - "1": "Couleur de mise en évidence 1 :", - "2": "Couleur de mise en évidence 2 :" - }, - "document": { - "1": "Document 1", - "2": "Document 2" - }, - "submit": "Comparer", - "complex": { - "message": "Un ou les deux documents fournis sont des fichiers volumineux, l'exactitude de la comparaison peut être réduite" - }, - "large": { - "file": { - "message": "Un ou les deux documents fournis sont trop volumineux pour être traités" - } - }, - "no": { - "text": { - "message": "L'un ou les deux documents PDF sélectionnés ne contiennent aucun contenu textuel. Veuillez choisir des documents PDF avec du texte pour la comparaison." - } - } - }, - "certSign": { - "tags": "signer,chiffrer,certificat,authenticate,PEM,P12,official,encrypt", - "title": "Signer avec un certificat", - "header": "Signer avec un certificat (Travail en cours)", - "selectPDF": "PDF à signer", - "jksNote": "Note: Si votre type de certificat n'est pas listé ci-dessous, merci de le convertir en fichier Java Keystore (.jks) en utilisant l'outil en ligne de commande keytool. Puis choisissez l'option Fichier .jks ci-dessous.", - "selectKey": "Fichier de clé privée (format PKCS#8, peut être .pem ou .der)", - "selectCert": "Fichier de certificat (format X.509, peut être .pem ou .der)", - "selectP12": "Fichier keystore de clés PKCS#12 (.p12 ou .pfx) (facultatif, s'il n'est fourni, il doit contenir votre clé privée et votre certificat)", - "selectJKS": "Sélectionner votre fichier Java Keystore File (.jks or .keystore):", - "certType": "Type de certificat", - "password": "Mot de passe keystore ou clé privée le cas échéant", - "showSig": "Afficher la signature", - "reason": "Raison", - "location": "Emplacement", - "name": "Nom", - "showLogo": "Afficher le logo", - "submit": "Signer" - }, - "removeCertSign": { - "tags": "signer,chiffrer,certificat,authenticate,PEM,P12,official,decrypt", - "title": "Supprimer la Signature de Certificat", - "header": "Supprimer le certificat numérique du PDF", - "selectPDF": "Sélectionnez un fichier PDF :", - "submit": "Supprimer la Signature" - }, - "pageLayout": { - "tags": "fusionner,merge,composite,single-view,organize", - "title": "Fusionner des pages", - "header": "Fusionner des pages", - "pagesPerSheet": "Pages par feuille", - "addBorder": "Ajouter des bordures", - "submit": "Fusionner" - }, - "scalePages": { - "tags": "ajuster,redimensionner,resize,modify,dimension,adapt", - "title": "Ajuster la taille ou l'échelle", - "header": "Ajuster la taille ou l'échelle", - "pageSize": "Taille d'une page du document", - "keepPageSize": "Taille d'origine", - "scaleFactor": "Niveau de zoom (recadrage) d'une page", - "submit": "Ajuster" - }, - "add-page-numbers": { - "tags": "paginer,numéros,étiqueter,paginate,label,organize,index" - }, - "auto-rename": { - "tags": "renommer,détection automatique,réétiqueter,auto-detect,header-based,organize,relabel", - "title": "Renommer automatiquement", - "header": "Renommer automatiquement", - "submit": "Renommer automatiquement" - }, - "adjust-contrast": { - "tags": "ajuster,couleurs,amélioration,color-correction,tune,modify,enhance" - }, - "crop": { - "tags": "redimensionner,trim,shrink,edit,shape", - "title": "Redimensionner", - "header": "Redimensionner", - "submit": "Envoyer" - }, - "autoSplitPDF": { - "tags": "séparer,QR-based,separate,scan-segment,organize", - "title": "Séparer automatiquement les pages", - "header": "Séparer automatiquement les pages", - "description": "Imprimez, insérez, numérisez, téléchargez et laissez-nous séparer automatiquement vos documents. Aucun travail de tri manuel nécessaire.", - "selectText": { - "1": "Imprimez des feuilles de séparation ci-dessous (le mode noir et blanc convient).", - "2": "Numérisez tous vos documents en une seule fois en insérant les feuilles intercalaires entre eux.", - "3": "Téléchargez le fichier PDF numérisé et laissez Stirling PDF s'occuper du reste.", - "4": "Les feuilles de séparation sont automatiquement détectées et supprimées, garantissant un document final soigné." - }, - "formPrompt": "PDF contenant des feuilles de séparation de Stirling PDF :", - "duplexMode": "Mode recto-verso", - "dividerDownload2": "Auto Splitter Divider (with instructions).pdf", - "submit": "Séparer" - }, - "sanitizePdf": { - "tags": "assainir,sécurisé,clean,secure,safe,remove-threats" - }, - "URLToPDF": { - "tags": "pdf,contenu Web,save-page,web-to-doc,archive", - "title": "URL en PDF", - "header": "URL en PDF", - "submit": "Convertir", - "credit": "Utilise WeasyPrint." - }, - "HTMLToPDF": { - "tags": "html,markup,contenu Web,transformation,convert", - "title": "HTML en PDF", - "header": "HTML en PDF", - "help": "Accepte les fichiers HTML et les ZIP contenant du HTML, du CSS, des images, etc. (requis).", - "submit": "Convertir", - "credit": "Utilise WeasyPrint.", - "zoom": "Niveau de zoom pour l'affichage du site web.", - "pageWidth": "Largeur de la page en centimètres. (Vide par défaut)", - "pageHeight": "Hauteur de la page en centimètres. (Vide par défaut)", - "marginTop": "Marge supérieure de la page en millimètres. (Vide par défaut)", - "marginBottom": "Marge inférieure de la page en millimètres. (Vide par défaut)", - "marginLeft": "Marge gauche de la page en millimètres. (Vide par défaut)", - "marginRight": "Marge droite de la page en millimètres. (Vide par défaut)", - "printBackground": "Restituer l'image de fond des sites web.", - "defaultHeader": "Activer l'entête par défaut (Nom et numéro de page)", - "cssMediaType": "Modifier le type de média CSS de la page.", - "none": "Aucun", - "print": "Imprimer", - "screen": "Écran" - }, - "MarkdownToPDF": { - "tags": "markdown,markup,contenu Web,transformation,convert", - "title": "Markdown en PDF", - "header": "Markdown en PDF", - "submit": "Convertir", - "help": "(Travail en cours).", - "credit": "Utilise WeasyPrint." - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "récupérer,infomation,data,stats,statistics", - "title": "Récupérer les informations", - "header": "Récupérer les informations", - "submit": "Récupérer les informations", - "downloadJson": "Télécharger le JSON" - }, - "extractPage": { - "tags": "extraire,extract" - }, - "PdfToSinglePage": { - "tags": "fusionner,merge,une seule page,single page" - }, - "showJS": { - "tags": "JS", - "title": "Afficher le JavaScript", - "header": "Afficher le JavaScript", - "downloadJS": "Télécharger le JavaScript", - "submit": "Afficher" - }, - "autoRedact": { - "tags": "caviarder,redact,auto,Masquer,noircir,noir,marqueur,caché,rédiger,censurer", - "title": "Caviarder automatiquement", - "header": "Caviarder automatiquement", - "colorLabel": "Couleur", - "textsToRedactLabel": "Texte à caviarder (séparé par des lignes)", - "textsToRedactPlaceholder": "ex. \\nConfidentiel \\nTop secret", - "useRegexLabel": "Utiliser une Regex", - "wholeWordSearchLabel": "Recherche de mots entiers", - "customPaddingLabel": "Marge intérieure supplémentaire", - "convertPDFToImageLabel": "Convertir un PDF en PDF-Image (utilisé pour supprimer le texte en arrière-plan)", - "submitButton": "Caviarder" - }, - "redact": { - "tags": "Caviarder,Redact,Masquer,noircir,noir,marqueur,caché,rédiger,censurer", - "title": "Caviardage manuel", - "header": "Caviardage manuel", - "submit": "Caviarder", - "textBasedRedaction": "Caviarder du texte", - "pageBasedRedaction": "Caviarder des pages", - "convertPDFToImageLabel": "Convertir en PDF-Image (pour supprimer le texte derrière le rectangle)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(ex: 1,2,8 ou 4,7,12-16 ou 2n-1)" - }, - "redactionColor": { - "title": "Couleur" - }, - "export": "Exporter", - "upload": "Téléverser", - "boxRedaction": "Tracer le rectangle à caviarder", - "zoom": "Zoom", - "zoomIn": "Zoom avant", - "zoomOut": "Zoom arrière", - "nextPage": "Page suivante", - "previousPage": "Page précédente", - "toggleSidebar": "Montrer la barre latérale", - "showThumbnails": "Afficher les miniatures", - "showDocumentOutline": "Montrer les contours du document (double-click pour agrandir/réduire tous les éléments)", - "showAttatchments": "Montrer les éléments attachés", - "showLayers": "Montrer les calques (double-click pour réinitialiser tous les calques à l'état par défaut)", - "colourPicker": "Sélection de couleur", - "findCurrentOutlineItem": "Trouver l'élément de contour courrant", - "applyChanges": "Appliquer les changements" - }, - "tableExtraxt": { - "tags": "CSV, Extraction de table, extraction, conversion" - }, - "autoSizeSplitPDF": { - "tags": "pdf, découpage, document, organisation" - }, - "overlay-pdfs": { - "tags": "Overlay,incrustation", - "header": "Incrustation de PDF", - "baseFile": { - "label": "Sélectionner le fichier PDF de base" - }, - "overlayFiles": { - "label": "Sélectionner les fichiers PDF à superposer" - }, - "mode": { - "label": "Sélectionner le mode d'incrustation", - "sequential": "Superposition séquentielle", - "interleaved": "Superposition entrelacée", - "fixedRepeat": "Superposition à répétition fixe" - }, - "counts": { - "label": "Nombre de superpositions (pour le mode de répétition fixe)", - "placeholder": "Compteurs (séparés par des virgules, exemple : 2,3,1)" - }, - "position": { - "label": "Définir la position de l'incrustation", - "foreground": "Premier plan", - "background": "Arrière-plan" - }, - "submit": "Soumettre" - }, - "split-by-sections": { - "tags": "Sections,Diviser,Section Split, Divide, Customize", - "title": "Diviser le PDF en sections", - "header": "Diviser le PDF en sections", - "horizontal": { - "label": "Divisions horizontales", - "placeholder": "Saisir le nombre de divisions horizontales" - }, - "vertical": { - "label": "Divisions verticales", - "placeholder": "Entrer le nombre de divisions verticales" - }, - "submit": "Diviser le PDF", - "merge": "Fusionner en un seul PDF" - }, - "AddStampRequest": { - "tags": "Tampon,Ajouter,Stamp,Add image,center image,Watermark,PDF,Embed,Customize", - "header": "Tampon PDF", - "title": "Tampon PDF", - "stampType": "Type de tampon", - "stampText": "Tampon texte", - "stampImage": "Tampon image", - "alphabet": "Alphabet", - "fontSize": "Taille de fonte/image", - "rotation": "Rotation", - "opacity": "Opacité", - "position": "Position", - "overrideX": "Définir coordonnées X", - "overrideY": "Définir coordonnées Y", - "customMargin": "Marge personnalisée", - "customColor": "Couleur de texte personnalisée", - "submit": "Soumettre" - }, - "removeImagePdf": { - "tags": "Images,Remove Image,Page operations,Back end,server side" - }, - "splitPdfByChapters": { - "tags": "séparer,chapitres,split,chapters,bookmarks,organize" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "Valider les signatures PDF", - "header": "Valider les signatures numériques", - "selectPDF": "Sélectionnez un fichier PDF signé", - "submit": "Valider les signatures", - "results": "Résultats de la validation", - "status": { - "_value": "Statut", - "valid": "Valide", - "invalid": "Invalide" - }, - "signer": "Signataire", - "date": "Date", - "reason": "Raison", - "location": "Localisation", - "noSignatures": "Aucune signature numérique trouvée dans ce document", - "chain": { - "invalid": "La validation de la chaîne de certificats a échoué - impossible de vérifier l'identité du signataire" - }, - "trust": { - "invalid": "Le certificat n'est pas dans le magasin de confiance - la source ne peut pas être vérifiée" - }, - "cert": { - "expired": "Le certificat a expiré", - "revoked": "Le certificat a été révoqué", - "info": "Détails du certificat", - "issuer": "Émetteur", - "subject": "Sujet", - "serialNumber": "Numéro de série", - "validFrom": "Valide à partir du", - "validUntil": "Valide jusqu'au", - "algorithm": "Algorithme", - "keySize": "Taille de la clé", - "version": "Version", - "keyUsage": "Usage de la clé", - "selfSigned": "Auto-signé", - "bits": "bits" - }, - "signature": { - "info": "Informations sur la signature", - "_value": "Signature", - "mathValid": "La signature est mathématiquement valide MAIS :" - }, - "selectCustomCert": "Fichier de certificat personnalisé X.509 (Optionnel)" - }, - "replace-color": { - "title": "Remplacer-Inverser-Couleur", - "header": "Remplacer-Inverser Couleur PDF", - "selectText": { - "1": "Options de Remplacement ou d'Inversion de Couleur", - "2": "Par défaut (Couleurs à fort contraste par défaut)", - "3": "Personnalisé (Couleurs personnalisées)", - "4": "Inversion complète (Inverser toutes les couleurs)", - "5": "Options de couleur à fort contraste", - "6": "Texte blanc sur fond noir", - "7": "Texte noir sur fond blanc", - "8": "Texte jaune sur fond noir", - "9": "Texte vert sur fond noir", - "10": "Choisir la couleur du texte", - "11": "Choisir la couleur de l'arrière-plan" - }, - "submit": "Remplacer" - }, - "replaceColorPdf": { - "tags": "Remplacer Couleur,Opérations de Page,Back-end,Côté serveur" - }, - "login": { - "title": "Connexion", - "header": "Connexion", - "signin": "Connexion", - "rememberme": "Se souvenir de moi", - "invalid": "Nom d'utilisateur ou mot de passe invalide.", - "locked": "Votre compte a été verrouillé.", - "signinTitle": "Veuillez vous connecter", - "ssoSignIn": "Se connecter via l'authentification unique", - "oAuth2AutoCreateDisabled": "OAUTH2 Création automatique d'utilisateur désactivée", - "oAuth2AdminBlockedUser": "La création ou l'authentification d'utilisateurs non enregistrés est actuellement bloquée. Veuillez contacter l'administrateur.", - "oauth2RequestNotFound": "Demande d'autorisation introuvable", - "oauth2InvalidUserInfoResponse": "Réponse contenant les informations de l'utilisateur est invalide", - "oauth2invalidRequest": "Requête invalide", - "oauth2AccessDenied": "Accès refusé", - "oauth2InvalidTokenResponse": "Réponse contenant le jeton est invalide", - "oauth2InvalidIdToken": "Jeton d'identification invalide", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "L'utilisateur est désactivé, la connexion est actuellement bloquée avec ce nom d'utilisateur. Veuillez contacter l'administrateur.", - "alreadyLoggedIn": "Vous êtes déjà connecté sur", - "alreadyLoggedIn2": "appareils. Veuillez vous déconnecter des appareils et réessayer.", - "toManySessions": "Vous avez trop de sessions actives.", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "Fusionner les pages", - "header": "Fusionner les pages", - "submit": "Convertir en une seule page" - }, - "pageExtracter": { - "title": "Extraire des pages", - "header": "Extraire des pages", - "submit": "Extraire", - "placeholder": "(par exemple : 1,2,8 ou 4,7,12-16 ou 2n-1)" - }, - "sanitizePDF": { - "title": "Assainir", - "header": "Assainir", - "selectText": { - "1": "Supprimer les actions JavaScript", - "2": "Supprimer les fichiers intégrés", - "3": "Remove XMP metadata", - "4": "Supprimer les liens", - "5": "Supprimer les polices", - "6": "Remove Document Info Metadata" - }, - "submit": "Assainir" - }, - "adjustContrast": { - "title": "Ajuster les couleurs", - "header": "Ajuster les couleurs", - "contrast": "Contraste", - "brightness": "Luminosité", - "saturation": "Saturation", - "download": "Télécharger" - }, - "compress": { - "title": "Compresser un PDF", - "header": "Compresser un PDF (lorsque c'est possible!)", - "credit": "Ce service utilise qpdf pour la compression et l'optimisation des PDF.", - "grayscale": { - "label": "Appliquer l'échelle de gris pour la compression" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Niveau d'optimisation", - "4": "Mode automatique – ajuste automatiquement la qualité pour obtenir le PDF à la taille exacte", - "5": "Taille PDF attendue (par exemple, 25 MB, 10,8 MB, 25 KB)" - }, - "submit": "Compresser" - }, - "decrypt": { - "passwordPrompt": "Ce fichier est protégé par un mot de passe. Veuillez saisir le mot de passe :", - "cancelled": "Operation annulée pour le PDF: {0}", - "noPassword": "Pas de mot de passe fourni pour le PDF chiffré : {0}", - "invalidPassword": "Veuillez réessayer avec le bon mot de passe", - "invalidPasswordHeader": "Mauvais mot de passe ou chiffrement non supporté pour le PDF : {0}", - "unexpectedError": "Une erreur est survenue lors de traitement du fichier. Veuillez essayer de nouveau.", - "serverError": "Erreur du serveur lors du déchiffrement : {0}", - "success": "Fichier déchiffré avec succès." - }, - "multiTool-advert": { - "message": "Cette fonctionnalité est aussi disponible dans la page de l'outil multifonction. Allez-y pour une interface page par page améliorée et des fonctionnalités additionnelles !" - }, - "pageRemover": { - "title": "Supprimer des pages", - "header": "Supprimer des pages", - "pagesToDelete": "Pages à supprimer (entrez une liste de numéros de pages séparés par des virgules) :", - "submit": "Supprimer les pages", - "placeholder": "(par exemple 1,2,6 ou 1-10,15-30)" - }, - "imageToPDF": { - "title": "Image en PDF", - "header": "Image en PDF", - "submit": "Convertir", - "selectLabel": "Options d'ajustement de l'image", - "fillPage": "Remplir la page", - "fitDocumentToImage": "Ajuster la page à l'image", - "maintainAspectRatio": "Maintenir les proportions", - "selectText": { - "2": "Rotation automatique du PDF", - "3": "Logique multi-fichiers (uniquement activée si vous travaillez avec plusieurs images)", - "4": "Fusionner en un seul PDF", - "5": "Convertir en PDF séparés" - } - }, - "PDFToCSV": { - "title": "PDF en CSV", - "header": "PDF en CSV", - "prompt": "Choisir la page pour en extraire le tableau", - "submit": "Extrait" - }, - "split-by-size-or-count": { - "title": "Séparer le PDF par taille ou par nombre", - "header": "Séparer le PDF par taille ou par nombre", - "type": { - "label": "Sélectionner le type de division", - "size": "Par taille", - "pageCount": "Par nombre de pages", - "docCount": "Par nombre de documents" - }, - "value": { - "label": "Entrer la valeur", - "placeholder": "Saisir la taille (par exemple, 2MB ou 3KB) ou le nombre (par exemple, 5)" - }, - "submit": "Séparer" - }, - "printFile": { - "title": "Imprimer le fichier", - "header": "Imprimer le fichier sur l'imprimante", - "selectText": { - "1": "Sélectionner le fichier à imprimer", - "2": "Entrez le nom de l'imprimante" - }, - "submit": "Imprimer" - }, - "licenses": { - "nav": "Licences", - "title": "Licences tierces", - "header": "Licences tierces", - "module": "Module", - "version": "Version", - "license": "Licence" - }, - "survey": { - "nav": "Enquête", - "title": "Enquête Stirling-PDF", - "description": "Stirling-PDF n'a pas de suivi, donc nous voulons entendre nos utilisateurs pour améliorer Stirling-PDF !", - "changes": "Stirling-PDF a changé depuis la dernière enquête ! Pour en savoir plus, veuillez consulter notre article de blog ici :", - "changes2": "Avec ces changements, nous obtenons un soutien commercial rémunéré et un financement", - "please": "Veuillez envisager de répondre à notre enquête !", - "disabled": "(La fenêtre contextuelle de l'enquête sera désactivée dans les mises à jour suivantes mais sera disponible en bas de page)", - "button": "Répondre à l'enquête", - "dontShowAgain": "Ne plus afficher", - "meeting": { - "1": "Si vous utilisez Stirling PDF au travail, nous aimerions en discuter avec vous. Nous offrons des sessions de support technique en échante d'une discussion de 15 minutes pour découvrir nos utilisateurs.", - "2": "C'est l'occasion de :", - "3": "Obtenir de l'aide pour le déploiement, l'intégration ou résoudre des problèmes", - "4": "Fournir un retour direct sur les performances, les cas limites, les fonctionnalités demandées", - "5": "Nous aider à adapter Stirling PDF aux usages réels en entreprise", - "6": "Si vous êtes intéressé, prenez rendez-vous avec notre équipe (en anglias uniquement)", - "7": "Nous avons hâte de découvrir vos cas d'usage et d'améliorer encore Stirling PDF !", - "notInterested": "Bous n'êtes pas une entreprise et/ou n'êtes pas intéressé par une discussion ?", - "button": "Prendre rendez-vous" - } - }, - "removeImage": { - "title": "Supprimer l'image", - "header": "Supprimer l'image", - "removeImage": "Supprimer l'image", - "submit": "Supprimer l'image" - }, - "splitByChapters": { - "title": "Diviser un PDF par Chapitres", - "header": "Diviser un PDF par Chapitres", - "bookmarkLevel": "Niveau de Signet", - "includeMetadata": "Inclure les Métadonnées", - "allowDuplicates": "Autoriser les Doublons", - "desc": { - "1": "Cet outil divise un fichier PDF en plusieurs PDF en fonction de sa structure de chapitres.", - "2": "Niveau de Signet : Choisissez le niveau de signets à utiliser pour la division (0 pour le niveau supérieur, 1 pour le deuxième niveau, etc...).", - "3": "Inclure les Métadonnées : Si coché, les métadonnées du PDF original seront incluses dans chaque PDF divisé.", - "4": "Autoriser les Doublons : Si coché, permet à plusieurs signets sur la même page de créer des PDF séparés." - }, - "submit": "Diviser le PDF" - }, - "fileChooser": { - "click": "Cliquez", - "or": "ou", - "dragAndDrop": "Glisser & Déposer", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "Glisser & Déposer le(s) fichier(s) ici", - "extractPDF": "Extraction en cours..." - }, - "releases": { - "footer": "Versions", - "title": "Notes de version", - "header": "Notes de version", - "current": { - "version": "Version actuelle" - }, - "note": "Les notes de version sont uniquement disponibles en anglais" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/ga-IE/translation.json b/frontend/dist/locales/ga-IE/translation.json deleted file mode 100644 index 917cd9bea..000000000 --- a/frontend/dist/locales/ga-IE/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Méid an Chló", - "fontName": "Ainm Cló", - "title": "Cuir Uimhreacha Leathanaigh leis", - "header": "Cuir Uimhreacha Leathanaigh leis", - "selectText": { - "1": "Roghnaigh comhad PDF:", - "2": "Méid Imeall", - "3": "Post", - "4": "Uimhir Tosaigh", - "5": "Leathanaigh go hUimhir", - "6": "Téacs Saincheaptha" - }, - "customTextDesc": "Téacs Saincheaptha", - "numberPagesDesc": "Cé na leathanaigh le huimhriú, réamhshocraithe 'gach duine', a ghlacann freisin 1-5 nó 2,5,9 etc", - "customNumberDesc": "Réamhshocrú go {n}, glacann sé freisin le 'Leathanach {n} de {total}', 'Text-{n}', '{filename}-{n}", - "submit": "Cuir Uimhreacha Leathanaigh leis" - }, - "pdfPrompt": "Roghnaigh PDF(anna)", - "multiPdfPrompt": "Roghnaigh PDFs (2+)", - "multiPdfDropPrompt": "Roghnaigh (nó tarraing & scaoil) gach PDF atá uait", - "imgPrompt": "Roghnaigh Íomhá(í)", - "genericSubmit": "Cuir isteach", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Rabhadh: Féadfaidh an próiseas seo suas le nóiméad a ghlacadh ag brath ar mhéid an chomhaid", - "pageOrderPrompt": "Ordú Leathanach Saincheaptha (Iontráil liosta uimhreacha leathanaigh nó Feidhmeanna ar nós 2n+1 le camóga deighilte):", - "pageSelectionPrompt": "Roghnú Leathanach Saincheaptha (Iontráil liosta leathanach scartha le camóg d'uimhreacha 1,5,6 nó Feidhmeanna ar nós 2n+1):", - "goToPage": "Téigh", - "true": "Fíor", - "false": "Bréagach", - "unknown": "Anaithnid", - "save": "Sábháil", - "saveToBrowser": "Sábháil go Brabhsálaí", - "close": "Dún", - "filesSelected": "comhaid roghnaithe", - "noFavourites": "Níor cuireadh aon cheanáin leis", - "downloadComplete": "Íosluchtaigh Críochnaithe", - "bored": "Leamh Ag Feitheamh?", - "alphabet": "Aibítir", - "downloadPdf": "Íoslódáil PDF", - "text": "Téacs", - "font": "Cló", - "selectFillter": "-- Roghnaigh --", - "pageNum": "Uimhir an Leathanaigh", - "sizes": { - "small": "Beaga", - "medium": "Mheán", - "large": "Mór", - "x-large": "X-Mór" - }, - "error": { - "pdfPassword": "Tá pasfhocal ar an Doiciméad PDF agus níor soláthraíodh an pasfhocal nó bhí sé mícheart", - "_value": "Earráid", - "sorry": "Gabh mo leithscéal as an gceist!", - "needHelp": "Cabhair uait / Ar aimsíodh fadhb?", - "contactTip": "Má tá trioblóid agat fós, ná bíodh leisce ort teagmháil a dhéanamh linn le haghaidh cabhrach. Is féidir leat ticéad a chur isteach ar ár leathanach GitHub nó déan teagmháil linn trí Discord:", - "404": { - "head": "404 - Leathanach Gan Aimsiú | Úps, thuislíomar sa chód!", - "1": "Is cosúil nach féidir linn teacht ar an leathanach atá uait.", - "2": "Chuaigh rud eigin mícheart" - }, - "github": "Cuir ticéad isteach ar GitHub", - "showStack": "Taispeáin Stack Trace", - "copyStack": "Cóipeáil Stack Trace", - "githubSubmit": "GitHub - Cuir ticéad isteach", - "discordSubmit": "Discord - Cuir post Tacaíochta" - }, - "delete": "Scrios", - "username": "Ainm úsáideora", - "password": "Pasfhocal", - "welcome": "Fáilte", - "property": "Maoin", - "black": "Dubh", - "white": "Bán", - "red": "Dearg", - "green": "Glas", - "blue": "Gorm", - "custom": "Saincheaptha...", - "WorkInProgess": "Obair idir lámha, B’fhéidir nach n-oibreoidh sí nó nach mbeidh bugaí ann, Tuairiscigh aon fhadhbanna le do thoil!", - "poweredBy": "Cumhachtaithe ag", - "yes": "Tá", - "no": "Níl", - "changedCredsMessage": "Dintiúir athraithe!", - "notAuthenticatedMessage": "Úsáideoir gan fíordheimhniú.", - "userNotFoundMessage": "Úsáideoir gan aimsiú.", - "incorrectPasswordMessage": "Tá an pasfhocal reatha mícheart.", - "usernameExistsMessage": "Tá Ainm Úsáideora Nua ann cheana féin.", - "invalidUsernameMessage": "Ainm úsáideora neamhbhailí, ní féidir ach litreacha, uimhreacha agus na carachtair speisialta seo a leanas @._+- a bheith san ainm úsáideora nó ní mór gur seoladh ríomhphoist bailí é.", - "invalidPasswordMessage": "Níor cheart go mbeadh an pasfhocal folamh agus níor cheart go mbeadh spásanna ag an tús nó ag an deireadh.", - "confirmPasswordErrorMessage": "Ní mór Pasfhocal Nua agus Deimhnigh Pasfhocal Nua a bheith ag teacht leis.", - "deleteCurrentUserMessage": "Ní féidir an t-úsáideoir atá logáilte isteach faoi láthair a scriosadh.", - "deleteUsernameExistsMessage": "Níl an t-ainm úsáideora ann agus ní féidir é a scriosadh.", - "downgradeCurrentUserMessage": "Ní féidir ról an úsáideora reatha a íosghrádú", - "disabledCurrentUserMessage": "Ní féidir an t-úsáideoir reatha a dhíchumasú", - "downgradeCurrentUserLongMessage": "Ní féidir ról an úsáideora reatha a íosghrádú. Mar sin, ní thaispeánfar an t-úsáideoir reatha.", - "userAlreadyExistsOAuthMessage": "Tá an t-úsáideoir ann cheana mar úsáideoir OAuth2.", - "userAlreadyExistsWebMessage": "Tá an t-úsáideoir ann cheana féin mar úsáideoir gréasáin.", - "oops": "Úps!", - "help": "Cabhrú", - "goHomepage": "Téigh go Leathanach Baile", - "joinDiscord": "Cláraigh lenár bhfreastalaí Discord", - "seeDockerHub": "Féach Docker Hub", - "visitGithub": "Tabhair cuairt ar Github Stór", - "donate": "Síntiúis", - "color": "Dath", - "sponsor": "Urraitheoir", - "info": "Eolas", - "pro": "Pro", - "page": "Leathanach", - "pages": "Leathanaigh", - "loading": "Á lódáil...", - "addToDoc": "Cuir le Doiciméad", - "reset": "Athshocraigh", - "apply": "Cuir i bhFeidhm", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Polasaí Príobháideachta", - "terms": "Téarmaí agus Coinníollacha", - "accessibility": "Inrochtaineacht", - "cookie": "Polasaí Fianán", - "impressum": "Impressum", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Roghchlár Píblíne (Beta)", - "uploadButton": "Uaslódáil Saincheaptha", - "configureButton": "Cumraigh", - "defaultOption": "Saincheaptha", - "submitButton": "Cuir isteach", - "help": "Cabhair Píblíne", - "scanHelp": "Cabhair Scanadh Fillteán", - "deletePrompt": "An bhfuil tú cinnte gur mhaith leat píblíne a scriosadh", - "tags": "uathoibriú, seicheamh, scriptithe, baisc-phróiseas", - "title": "Píblíne" - }, - "pipelineOptions": { - "header": "Cumraíocht Píblíne", - "pipelineNameLabel": "Ainm Píblíne", - "saveSettings": "Sábháil Socruithe Oibriúcháin", - "pipelineNamePrompt": "Cuir isteach ainm na píblíne anseo", - "selectOperation": "Roghnaigh Oibríocht", - "addOperationButton": "Cuir oibríocht leis", - "pipelineHeader": "Píblíne:", - "saveButton": "Íosluchtaigh", - "validateButton": "Bailíochtaigh" - }, - "enterpriseEdition": { - "button": "Uasghrádú go Pro", - "warning": "Níl an ghné seo ar fáil ach d'úsáideoirí Pro.", - "yamlAdvert": "Tacaíonn Stirling PDF Pro le comhaid cumraíochta YAML agus gnéithe SSO eile.", - "ssoAdvert": "Tá tuilleadh gnéithe bainistíochta úsáideoirí á lorg? Seiceáil Stirling PDF Pro" - }, - "analytics": { - "title": "An bhfuil fonn ort PDF Stirling a fheabhsú?", - "paragraph1": "Tá rogha an diúltaithe ag PDF Stirling chun cabhrú linn an táirge a fheabhsú. Ní rianaimid aon fhaisnéis phearsanta nó ábhar comhaid.", - "paragraph2": "Smaoinigh le do thoil ar anailísíocht a chumasú chun cabhrú le Stirling-PDF fás agus chun ligean dúinn ár n-úsáideoirí a thuiscint níos fearr.", - "enable": "Cumasaigh anailísíocht", - "disable": "Díchumasaigh anailísíocht", - "settings": "Is féidir leat na socruithe don anailísíocht a athrú sa chomhad config/settings.yml" - }, - "navbar": { - "favorite": "Ceanáin", - "recent": "New and recently updated", - "darkmode": "Mód Dorcha", - "language": "Teangacha", - "settings": "Socruithe", - "allTools": "Uirlisí", - "multiTool": "Uirlisí Il", - "search": "Cuardach", - "sections": { - "organize": "Eagraigh", - "convertTo": "Tiontaigh go PDF", - "convertFrom": "Tiontaigh ó PDF", - "security": "Comhartha & Slándáil", - "advance": "Casta", - "edit": "Féach ar & Cuir in Eagar", - "popular": "Coitianta" - } - }, - "settings": { - "title": "Socruithe", - "update": "Nuashonrú ar fáil", - "updateAvailable": "Is é {0} an leagan suiteáilte reatha. Tá leagan nua ({1}) ar fáil.", - "appVersion": "Leagan Aipe:", - "downloadOption": { - "title": "Roghnaigh rogha íoslódála (Le haghaidh íoslódálacha comhad amháin seachas zip):", - "1": "Oscail sa bhfuinneog chéanna", - "2": "Oscail i bhfuinneog nua", - "3": "Íoslódáil an comhad" - }, - "zipThreshold": "Comhaid zip nuair a sháraíonn líon na gcomhad íoslódála", - "signOut": "Logáil Amach", - "accountSettings": "Socruithe cuntas", - "bored": { - "help": "Cumasaíonn sé cluiche uibheacha Cásca" - }, - "cacheInputs": { - "name": "Sábháil ionchuir fhoirm", - "help": "Cumasaigh ionchuir a úsáideadh roimhe seo a stóráil le haghaidh ritheanna amach anseo" - } - }, - "changeCreds": { - "title": "Athraigh Dintiúir", - "header": "Nuashonraigh Sonraí do Chuntais", - "changePassword": "Tá dintiúir réamhshocraithe logáil isteach á úsáid agat. Cuir isteach pasfhocal nua le do thoil", - "newUsername": "Ainm Úsáideora Nua", - "oldPassword": "Pasfhocal reatha", - "newPassword": "Focal Faire Nua", - "confirmNewPassword": "Deimhnigh Pasfhocal Nua", - "submit": "Cuir Athruithe isteach" - }, - "account": { - "title": "Socruithe cuntas", - "accountSettings": "Socruithe cuntas", - "adminSettings": "Socruithe Riaracháin - Féach ar agus Cuir Úsáideoirí Leis", - "userControlSettings": "Socruithe Rialaithe Úsáideora", - "changeUsername": "Athraigh Ainm Úsáideora", - "newUsername": "Ainm Úsáideora Nua", - "password": "Pasfhocal Deimhnithe", - "oldPassword": "Sean Pasfhocal", - "newPassword": "Focal Faire Nua", - "changePassword": "Athraigh do phasfhocal", - "confirmNewPassword": "Deimhnigh Pasfhocal Nua", - "signOut": "Logáil Amach", - "yourApiKey": "D'Eochair API", - "syncTitle": "Sioncronaigh socruithe brabhsálaí leis an gCuntas", - "settingsCompare": "Comparáid Socruithe:", - "property": "Maoin", - "webBrowserSettings": "Socrú Brabhsálaí Gréasáin", - "syncToBrowser": "Cuntas Sync -> Brabhsálaí", - "syncToAccount": "Cuntas Sioncronaigh <- Brabhsálaí" - }, - "adminUserSettings": { - "title": "Socruithe Rialaithe Úsáideora", - "header": "Socruithe Rialaithe Úsáideoir Riaracháin", - "admin": "Riarachán", - "user": "Úsáideoir", - "addUser": "Cuir Úsáideoir Nua leis", - "deleteUser": "Scrios Úsáideoir", - "confirmDeleteUser": "Ar cheart an t-úsáideoir a scriosadh?", - "confirmChangeUserStatus": "Ar cheart an t-úsáideoir a dhíchumasú/a chumasú?", - "usernameInfo": "Ní féidir ach litreacha, uimhreacha agus na carachtair speisialta seo a leanas @._+- a bheith san ainm úsáideora nó ní mór gur seoladh ríomhphoist bailí é.", - "roles": "Róil", - "role": "Ról", - "actions": "Gníomhartha", - "apiUser": "Úsáideoir API Teoranta", - "extraApiUser": "Úsáideoir API Teoranta breise", - "webOnlyUser": "Úsáideoir Gréasáin Amháin", - "demoUser": "Úsáideoir Taispeána (Gan socruithe saincheaptha)", - "internalApiUser": "Úsáideoir API Inmheánach", - "forceChange": "Cuir iallach ar an úsáideoir pasfhocal a athrú ar logáil isteach", - "submit": "Sábháil Úsáideoir", - "changeUserRole": "Athraigh Ról an Úsáideora", - "authenticated": "Fíordheimhnithe", - "editOwnProfil": "Cuir a phróifíl féin in eagar", - "enabledUser": "úsáideoir cumasaithe", - "disabledUser": "úsáideoir faoi mhíchumas", - "activeUsers": "Úsáideoirí Gníomhacha:", - "disabledUsers": "Úsáideoirí faoi mhíchumas:", - "totalUsers": "Úsáideoirí Iomlán:", - "lastRequest": "Iarratas Deiridh", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Iompórtáil/Easpórtáil Bunachar Sonraí", - "header": "Iompórtáil/Easpórtáil Bunachar Sonraí", - "fileName": "Ainm comhaid", - "creationDate": "Dáta Cruthaithe", - "fileSize": "Méid an Chomhaid", - "deleteBackupFile": "Scrios Comhad Cúltaca", - "importBackupFile": "Iompórtáil Comhad Cúltaca", - "createBackupFile": "Cruthaigh Comhad Cúltaca", - "downloadBackupFile": "Íoslódáil an comhad cúltaca", - "info_1": "Agus sonraí á n-allmhairiú, tá sé ríthábhachtach an struchtúr ceart a chinntiú. Mura bhfuil tú cinnte faoina bhfuil ar siúl agat, iarr comhairle agus tacaíocht ó ghairmí. Féadfaidh earráid sa struchtúr a bheith ina chúis le mífheidhmeanna iarratais, suas go dtí agus lena n-áirítear an neamhábaltacht iomlán an t-iarratas a rith.", - "info_2": "Ní hionann ainm an chomhaid agus é á uaslódáil. Déanfar é a athainmniú ina dhiaidh sin chun an fhormáid backup_user_yyyyMMddHHmm.sql a leanúint, ag cinntiú go bhfuil coinbhinsiún ainmniúcháin comhsheasmhach ann.", - "submit": "Iompórtáil Cúltaca", - "importIntoDatabaseSuccessed": "D'éirigh leis an allmhairiú isteach sa bhunachar sonraí", - "backupCreated": "D'éirigh le cúltaca bunachar sonraí", - "fileNotFound": "Comhad gan aimsiú", - "fileNullOrEmpty": "Níor cheart go mbeadh an comhad ar neamhní nó folamh", - "failedImportFile": "Theip ar iompórtáil an chomhaid", - "notSupported": "Níl an fheidhm seo ar fáil do nasc bunachar sonraí." - }, - "session": { - "expired": "Tá do sheisiún imithe in éag. Athnuaigh an leathanach agus bain triail eile as.", - "refreshPage": "Athnuaigh an Leathanach" - }, - "home": { - "desc": "Do shiopa ilfhreastail arna óstáil go háitiúil do do riachtanais PDF go léir.", - "searchBar": "Cuardaigh gnéithe...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Féach ar, nótáil, cuir téacs nó íomhánna leis" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "Il-uirlis PDF", - "desc": "Cumaisc, Rothlaigh, Atheagraigh, agus Bain leathanaigh" - }, - "merge": { - "title": "Cumaisc", - "desc": "Go héasca chumasadh go leor PDFanna isteach i gceann amháin." - }, - "split": { - "title": "Scoilt", - "desc": "Scoilt comhaid PDF isteach i ndoiciméid iolracha" - }, - "rotate": { - "title": "Rothlaigh", - "desc": "Rothlaigh do PDFanna go héasca." - }, - "imageToPdf": { - "title": "Íomhá go PDF", - "desc": "Tiontaigh íomhá (PNG, JPEG, GIF) go PDF." - }, - "pdfToImage": { - "title": "PDF go íomhá", - "desc": "Tiontaigh PDF a íomhá. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Eagraigh", - "desc": "Bain/Atheagraigh na leathanaigh in ord ar bith" - }, - "addImage": { - "title": "Cuir íomhá leis", - "desc": "Cuireann sé íomhá ar shuíomh socraithe ar an PDF" - }, - "watermark": { - "title": "Cuir Uisce leis", - "desc": "Cuir comhartha uisce saincheaptha le do dhoiciméad PDF." - }, - "permissions": { - "title": "Athrú Ceadanna", - "desc": "Athraigh ceadanna do dhoiciméad PDF" - }, - "removePages": { - "title": "Bain", - "desc": "Scrios leathanaigh nach dteastaíonn ó do dhoiciméad PDF." - }, - "addPassword": { - "title": "Cuir Pasfhocal leis", - "desc": "Criptigh do dhoiciméad PDF le focal faire." - }, - "removePassword": { - "title": "Bain Pasfhocal", - "desc": "Bain cosaint phasfhocal ó do dhoiciméad PDF." - }, - "compressPdfs": { - "title": "Comhbhrúigh", - "desc": "Comhbhrúigh PDFanna chun a méid comhaid a laghdú." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Athraigh Meiteashonraí", - "desc": "Athraigh/Bain/Cuir meiteashonraí ó dhoiciméad PDF" - }, - "fileToPDF": { - "title": "Comhad a thiontú go PDF", - "desc": "Tiontaigh beagnach aon chomhad go PDF (DOCX, PNG, XLS, PPT, TXT agus go leor eile)" - }, - "ocr": { - "title": "OCR / Scananna glanta", - "desc": "Scanann glantachán agus aimsíonn sé téacs ó íomhánna laistigh de PDF agus cuireann sé isteach arís é mar théacs." - }, - "extractImages": { - "title": "Sliocht Íomhánna", - "desc": "Sliochtann sé gach íomhá ó PDF agus sábhálann sé iad a zip" - }, - "pdfToPDFA": { - "title": "PDF go PDF/A", - "desc": "Tiontaigh PDF go PDF/A le haghaidh stórála fadtéarmach" - }, - "PDFToWord": { - "title": "PDF a thiontú go Word", - "desc": "Tiontaigh PDF go formáidí Word (DOC, DOCX agus ODT)" - }, - "PDFToPresentation": { - "title": "PDF a chur i láthair", - "desc": "Tiontaigh PDF go formáidí Léirithe (PPT, PPTX agus ODP)" - }, - "PDFToText": { - "title": "PDF go RTF (Téacs)", - "desc": "Tiontaigh PDF go Téacs nó formáid RTF" - }, - "PDFToHTML": { - "title": "PDF go HTML", - "desc": "Tiontaigh HTML i bhformáid PDF" - }, - "PDFToXML": { - "title": "PDF go XML", - "desc": "Tiontaigh PDF i bhformáid XML" - }, - "ScannerImageSplit": { - "title": "Braith / Scoilt grianghraif Scanta", - "desc": "Scoilteann sé grianghraif iolracha ó laistigh de ghrianghraf/PDF" - }, - "sign": { - "title": "Comhartha", - "desc": "Cuireann síniú le PDF trí líníocht, téacs nó íomhá" - }, - "flatten": { - "title": "Comhcheangail", - "desc": "Bain gach eilimint agus foirm idirghníomhach as PDF" - }, - "repair": { - "title": "Deisiúchán", - "desc": "Déanann sé iarracht PDF truaillithe/briste a dheisiú" - }, - "removeBlanks": { - "title": "Bain leathanaigh Bhána", - "desc": "Aimsíonn agus baintear leathanaigh bhána de dhoiciméad" - }, - "removeAnnotations": { - "title": "Bain Anótálacha", - "desc": "Baintear gach trácht/nóta de PDF" - }, - "compare": { - "title": "Déan comparáid idir", - "desc": "Déanann sé na difríochtaí idir 2 Dhoiciméad PDF a chur i gcomparáid agus a thaispeáint" - }, - "certSign": { - "title": "Sínigh le Deimhniú", - "desc": "Síníonn sé PDF le Deimhniú/Eochair (PEM/P12)" - }, - "removeCertSign": { - "title": "Bain Comhartha Teastais", - "desc": "Bain síniú teastas ó PDF" - }, - "pageLayout": { - "title": "Leagan Amach Illeathanaigh", - "desc": "Cumaisc leathanaigh iolracha de dhoiciméad PDF isteach i leathanach amháin" - }, - "scalePages": { - "title": "Coigeartaigh méid/scála an leathanaigh", - "desc": "Athraigh méid/scála leathanaigh agus/nó a bhfuil ann." - }, - "pipeline": { - "title": "Píblíne (Ardleibhéal)", - "desc": "Rith gníomhartha iolracha ar PDFanna trí scripteanna píblíne a shainiú" - }, - "add-page-numbers": { - "title": "Cuir Uimhreacha Leathanaigh leis", - "desc": "Cuir uimhreacha Leathanach leis an doiciméad i suíomh socraithe" - }, - "auto-rename": { - "title": "Comhad PDF a athainmniú go huathoibríoch", - "desc": "Athainmníonn Auto comhad PDF bunaithe ar a cheanntásc braite" - }, - "adjust-contrast": { - "title": "Coigeartaigh Dathanna/Codarsnacht", - "desc": "Coigeartaigh Codarsnacht, Sáithiú agus Gile PDF" - }, - "crop": { - "title": "PDF a ghearradh", - "desc": "Bearr PDF chun a mhéid a laghdú (coimeádann an téacs!)" - }, - "autoSplitPDF": { - "title": "Leathanaigh Scoilte Uathoibríoch", - "desc": "Auto Scoilt PDF Scanta le Cód QR scoilteoir leathanach scanadh fisiciúil" - }, - "sanitizePdf": { - "title": "Sláintíocht", - "desc": "Bain scripteanna agus gnéithe eile ó chomhaid PDF" - }, - "URLToPDF": { - "title": "URL/Láithreán Gréasáin go PDF", - "desc": "Tiontaíonn aon http(s) URL go PDF" - }, - "HTMLToPDF": { - "title": "HTML go PDF", - "desc": "Tiontaíonn aon chomhad HTML nó zip go PDF" - }, - "MarkdownToPDF": { - "title": "Marcáil síos go PDF", - "desc": "Tiontaíonn aon chomhad Markdown go PDF" - }, - "PDFToMarkdown": { - "title": "PDF chuig Markdown", - "desc": "Tiontaíonn PDF ar bith go Markdown" - }, - "getPdfInfo": { - "title": "Faigh GACH Eolas ar PDF", - "desc": "Grab aon fhaisnéis agus is féidir ar PDFs" - }, - "extractPage": { - "title": "Sliocht leathanach(eacha)", - "desc": "Sleachta roghnaigh leathanaigh ó PDF" - }, - "PdfToSinglePage": { - "title": "PDF go leathanach mór amháin", - "desc": "Cumasc gach leathanach PDF isteach i leathanach mór amháin" - }, - "showJS": { - "title": "Taispeáin Javascript", - "desc": "Déanann sé cuardach agus taispeáint ar aon JS a instealladh isteach i PDF" - }, - "autoRedact": { - "title": "Auto Redact", - "desc": "Auto Redacts (Blacks out) téacs i PDF bunaithe ar an téacs ionchuir" - }, - "redact": { - "title": "Athchóiriú de Láimh", - "desc": "Réiteann sé PDF bunaithe ar théacs roghnaithe, cruthanna tarraingthe agus/nó leathanaigh roghnaithe" - }, - "tableExtraxt": { - "title": "Ó CSV go PDF", - "desc": "Sleachta Táblaí ó PDF agus é a thiontú go CSV" - }, - "autoSizeSplitPDF": { - "title": "Auto Scoilte de réir Méid/Comhaireamh", - "desc": "Scoilt PDF amháin i ndoiciméid iolracha bunaithe ar mhéid, líon na leathanach, nó comhaireamh doiciméad" - }, - "overlay-pdfs": { - "title": "Forleagan PDF", - "desc": "Forleagain PDF ar bharr PDF eile" - }, - "split-by-sections": { - "title": "Scoilt PDF de réir ailt", - "desc": "Roinn gach leathanach de PDF i gcodanna cothrománacha agus ingearacha níos lú" - }, - "AddStampRequest": { - "title": "Cuir Stampa go PDF", - "desc": "Cuir téacs leis nó cuir stampaí íomhá leis ag láithreacha socraithe" - }, - "removeImagePdf": { - "title": "Bain íomhá", - "desc": "Bain íomhá de PDF chun méid comhaid a laghdú" - }, - "splitPdfByChapters": { - "title": "Scoil PDF ar Chaibidlí", - "desc": "Scoilt PDF ina chomhaid iolracha bunaithe ar a struchtúr caibidle." - }, - "validateSignature": { - "title": "Bailíochtaigh Síniú PDF", - "desc": "Fíoraigh sínithe digiteacha agus teastais i gcáipéisí PDF" - }, - "replaceColorPdf": { - "title": "Athchuir agus Inbhéartaigh Dath", - "desc": "Athchuir dath an téacs agus an chúlra i bhformáid PDF agus inbhéartaigh dath iomlán pdf chun méid comhaid a laghdú" - } - }, - "viewPdf": { - "tags": "amharc, léamh, anótáil, téacs, íomhá", - "title": "View/Edit PDF", - "header": "Féach PDF" - }, - "multiTool": { - "tags": "Il-Uirlis, Iloibríocht, Chomhéadain, cliceáil tarraing, ceann tosaigh, taobh an chliaint, idirghníomhach, intractable, bog", - "title": "Il-uirlis PDF", - "header": "Il-uirlis PDF", - "uploadPrompts": "Ainm comhaid", - "selectAll": "Roghnaigh Uile", - "deselectAll": "Díroghnaigh Uile", - "selectPages": "Roghnaigh Leathanach", - "selectedPages": "Leathanaigh Roghnaithe", - "page": "Leathanach", - "deleteSelected": "Scrios Roghnaithe", - "downloadAll": "Easpórtáil", - "downloadSelected": "Easpórtáil Roghnaithe", - "insertPageBreak": "Ionsáigh Sos Leathanaigh", - "addFile": "Cuir Comhad Leis", - "rotateLeft": "Rothlaigh ar Chlé", - "rotateRight": "Rothlaigh ar Dheis", - "split": "Scoil", - "moveLeft": "Bog ar Chlé", - "moveRight": "Bog ar Dheis", - "delete": "Scrios", - "dragDropMessage": "Leathanach(leathanaigh) roghnaithe", - "undo": "Cealaigh", - "redo": "Athdhéan" - }, - "merge": { - "tags": "chumasadh,Oibríochtaí Leathanaigh,Cúl-deireadh,taobh freastalaí", - "title": "Cumaisc", - "header": "Cumaisc PDFanna iolracha (2+)", - "sortByName": "Sórtáil de réir ainm", - "sortByDate": "Sórtáil de réir dáta", - "removeCertSign": "Bain síniú digiteach sa chomhad cumaiscthe?", - "submit": "Cumaisc" - }, - "split": { - "tags": "Oibríochtaí leathanach, roinnt, Leathanach Il, gearrtha, taobh freastalaí", - "title": "Scoilt PDF", - "header": "Scoilt PDF", - "desc": { - "1": "Is iad na huimhreacha a roghnaíonn tú an uimhir leathanaigh ar mian leat scoilt a dhéanamh air", - "2": "Dá bhrí sin, dá roghnófaí 1,3,7-9, roinnfí doiciméad 10 leathanach ina 6 PDF ar leith le:", - "3": "Doiciméad #1: Leathanach 1", - "4": "Doiciméad #2: Leathanach 2 agus 3", - "5": "Doiciméad #3: Leathanach 4, 5, 6 agus 7", - "6": "Doiciméad #4: Leathanach 8", - "7": "Doiciméad #5: Leathanach 9", - "8": "Doiciméad #6: Leathanach 10" - }, - "splitPages": "Iontráil leathanaigh le scoilt ar:", - "submit": "Scoilt" - }, - "rotate": { - "tags": "taobh freastalaí", - "title": "Rothlaigh PDF", - "header": "Rothlaigh PDF", - "selectAngle": "Roghnaigh uillinn rothlaithe (i iolraí de 90 céim):", - "submit": "Rothlaigh" - }, - "imageToPdf": { - "tags": "comhshó, img, jpg, pictiúr, grianghraf" - }, - "pdfToImage": { - "tags": "comhshó, img, jpg, pictiúr, grianghraf", - "title": "PDF go íomhá", - "header": "PDF go íomhá", - "selectText": "Formáid Íomhá", - "singleOrMultiple": "Cineál toraidh Leathanach go hÍomhá", - "single": "Mhór Aonair a Chomhcheanglaíonn gach leathanach", - "multi": "Ilíomhánna, íomhá amháin in aghaidh an leathanaigh", - "colorType": "Cineál dath", - "color": "Dath", - "grey": "Scála Liath", - "blackwhite": "Dubh agus Bán (D’fhéadfadh sonraí a chailleadh!)", - "submit": "Tiontaigh", - "info": "Níl Python suiteáilte. Ag teastáil le haghaidh comhshó WebP.", - "placeholder": "(m.sh. 1,2,8 nó 4,7,12-16 nó 2n-1)" - }, - "pdfOrganiser": { - "tags": "déphléacsacha, cothrom, corr, sórtáil, bogadh", - "title": "Eagraigh Leathanach", - "header": "Eagraí leathanach PDF", - "submit": "Athshocrú Leathanaigh", - "mode": { - "_value": "Mód", - "1": "Ordú Leathanach Saincheaptha", - "2": "Ordú Droim ar Ais", - "3": "Sórtáil Duplex", - "4": "Sórtáil Leabhrán", - "5": "Sórtáil Leabhrán Stitch Taobh", - "6": "Scoilt Corr-Fiú", - "7": "Bain Ar dtús", - "8": "Bain Last", - "9": "Bain An Chéad agus an Deireadh", - "10": "Corr-Fiú Cumaisc", - "11": "Duplicate all pages" - }, - "placeholder": "(m.sh. 1,3,2 nó 4-8,2,10-12 nó 2n-1)" - }, - "addImage": { - "tags": "img, jpg, pictiúr, grianghraf", - "title": "Cuir Íomhá leis", - "header": "Cuir íomhá i bhformáid PDF", - "everyPage": "Gach Leathanach?", - "upload": "Cuir íomhá leis", - "submit": "Cuir íomhá leis" - }, - "watermark": { - "tags": "Téacs, athrá, lipéad, úinéireacht, cóipcheart, trádmharc, img, jpg, pictiúr, grianghraf", - "title": "Cuir Uisce leis", - "header": "Cuir Uisce leis", - "customColor": "Dath Téacs Saincheaptha", - "selectText": { - "1": "Roghnaigh PDF chun comhartha uisce a chur leis:", - "2": "Téacs Comhartha Uisce:", - "3": "Méid cló:", - "4": "Rothlú (0-360):", - "5": "Spásaire Leithead (Spás idir gach comhartha uisce go cothrománach):", - "6": "Spásaire Airde (Spás idir gach comhartha uisce go hingearach):", - "7": "Teimhneacht (0% - 100%):", - "8": "Cineál Comhartha Uisce:", - "9": "Íomhá Comhartha Uisce:", - "10": "Tiontaigh PDF go PDF-Íomhá" - }, - "submit": "Cuir Uisce leis", - "type": { - "1": "Téacs", - "2": "Íomha" - } - }, - "permissions": { - "tags": "léamh, scríobh, cuir in eagar, priontáil", - "title": "Athrú Ceadanna", - "header": "Athrú Ceadanna", - "warning": "Má thugtar rabhadh nach féidir na ceadanna seo a athrú, moltar pasfhocal a shocrú dóibh trí leathanach an bhreiseáin phasfhocal", - "selectText": { - "1": "Roghnaigh PDF chun ceadanna a athrú", - "2": "Ceadanna a shocrú", - "3": "Cosc a chur le chéile doiciméad", - "4": "Cosc a chur ar eastóscadh ábhar", - "5": "Cosc a chur ar eastóscadh le haghaidh inrochtaineachta", - "6": "Cosc ar fhoirm a líonadh", - "7": "Cosc a chur ar mhodhnú", - "8": "Cosc a chur ar mhodhnú anótála", - "9": "Cosc a chur ar phriontáil", - "10": "Cosc a chur ar phriontáil bhformáidí éagsúla" - }, - "submit": "Athrú" - }, - "removePages": { - "tags": "Bain leathanaigh, scrios leathanaigh" - }, - "addPassword": { - "tags": "slán, slándáil", - "title": "Cuir Pasfhocal leis", - "header": "Cuir pasfhocal leis (Criptigh)", - "selectText": { - "1": "Roghnaigh PDF le criptiú", - "2": "Pasfhocal Úsáideora", - "3": "Fad Eochracha Criptithe", - "4": "Tá luachanna níos airde níos láidre, ach tá comhoiriúnacht níos fearr ag luachanna níos ísle.", - "5": "Ceadanna le socrú (Moltar iad a úsáid in éineacht le pasfhocal an Úinéara)", - "6": "Cosc a chur le chéile doiciméad", - "7": "Cosc a chur ar eastóscadh ábhar", - "8": "Cosc a chur ar eastóscadh le haghaidh inrochtaineachta", - "9": "Cosc ar fhoirm a líonadh", - "10": "Cosc a chur ar mhodhnú", - "11": "Cosc a chur ar mhodhnú anótála", - "12": "Cosc a chur ar phriontáil", - "13": "Cosc a chur ar phriontáil bhformáidí éagsúla", - "14": "Pasfhocal Úinéir", - "15": "Cuireann sé srian lenar féidir a dhéanamh leis an doiciméad nuair a osclaítear é (Ní thacaíonn gach léitheoir leis)", - "16": "Cuireann sé srian le hoscailt an doiciméid féin" - }, - "submit": "Criptigh" - }, - "removePassword": { - "tags": "slán, Díchriptiú, slándáil, Unpassword, scrios pasfhocal", - "title": "Bain pasfhocal", - "header": "Bain pasfhocal (Díchriptigh)", - "selectText": { - "1": "Roghnaigh PDF le Díchriptiú", - "2": "Pasfhocal" - }, - "submit": "Bain" - }, - "compressPdfs": { - "tags": "squish, beag, beag bídeach" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Teideal,údar, dáta, cruthú, am, foilsitheoir, léiritheoir, staitisticí", - "title": "Athraigh Meiteashonraí", - "header": "Athraigh Meiteashonraí", - "selectText": { - "1": "Cuir na hathróga is mian leat a athrú in eagar", - "2": "Scrios na meiteashonraí go léir", - "3": "Taispeáin Meiteashonraí Saincheaptha:", - "4": "Meiteashonraí Eile:", - "5": "Cuir Iontráil Meiteashonraí Saincheaptha leis" - }, - "author": "Údar:", - "creationDate": "Dáta Cruthaithe (bbbb/MM/ll HH:mm:ss):", - "creator": "Cruthaitheoir:", - "keywords": "Eochairfhocail:", - "modDate": "Dáta Mionathraithe (bbbb/MM/ll HH:mm:ss):", - "producer": "léiritheoir:", - "subject": "Ábhar:", - "trapped": "Gafa:", - "submit": "Athrú" - }, - "fileToPDF": { - "tags": "claochlú, formáid, doiciméad, pictiúr, sleamhnán, téacs, comhshó, oifig, docs, focal, excel, powerpoint", - "title": "Comhad go PDF", - "header": "Tiontaigh aon chomhad go PDF", - "credit": "Úsáideann an tseirbhís seo LibreOffice agus Unoconv chun comhaid a thiontú.", - "supportedFileTypesInfo": "Cineálacha Comhaid Tacaithe", - "supportedFileTypes": "Ba cheart go n-áireofaí na cineálacha comhaid a dtacaítear leo thíos, áfach, le haghaidh liosta nuashonraithe iomlán de na formáidí a dtacaítear leo, féach le do thoil ar dhoiciméadú LibreOffice", - "submit": "Tiontaigh go PDF" - }, - "ocr": { - "tags": "aithint, téacs, íomhá, scanadh, léamh, a aithint, a bhrath, in eagar", - "title": "OCR / Glanta Scan", - "header": "Scananna Glanta / OCR (Aithint Optúil Carachtair)", - "selectText": { - "1": "Roghnaigh teangacha atá le brath laistigh den PDF (Is iad na cinn a liostaítear na cinn a aimsítear faoi láthair):", - "2": "Comhad téacs a tháirgeadh ina bhfuil téacs OCR taobh leis an PDF a cuireadh le OCR", - "3": "Scanadh leathanaigh chearta ag uillinn sceabhach trína rothlú ar ais ina n-áit", - "4": "Glan an leathanach ionas gur lú an seans go bhfaighidh OCR téacs i torann cúlra. (Gan athrú aschuir)", - "5": "Glan an leathanach ionas gur lú an seans go bhfaighidh OCR téacs le torann cúlra, go gcoimeádann sé glantachán san aschur.", - "6": "Déanann sé neamhaird ar leathanaigh a bhfuil téacs idirghníomhach orthu, agus ar leathanaigh OCR amháin ar íomhánna iad", - "7": "Fórsa OCR, bainfidh OCR Gach leathanach ag baint na buneilimintí téacs uile", - "8": "Gnáth (Tharla earráid má tá téacs sa PDF)", - "9": "Socruithe Breise", - "10": "Mód OCR", - "11": "Bain íomhánna tar éis OCR (Bain GACH íomhá, ní úsáideach ach amháin má tá siad mar chuid den chéim tiontaithe)", - "12": "Cineál Rindreála (Ardleibhéal)" - }, - "help": "Léigh le do thoil an doiciméadú seo ar conas é seo a úsáid do theangacha eile agus/nó úsáid nach bhfuil i ndugairí", - "credit": "Úsáideann an tseirbhís seo qpdf agus Tesseract le haghaidh OCR.", - "submit": "Próiseáil PDF le OCR" - }, - "extractImages": { - "tags": "pictiúr, grianghraf, shábháil, cartlann, zip, gabháil, grab", - "title": "Sliocht Íomhánna", - "header": "Sliocht Íomhánna", - "selectText": "Roghnaigh formáid íomhá chun íomhánna bainte a thiontú go", - "allowDuplicates": "Sábháil íomhánna dúblacha", - "submit": "Sliocht" - }, - "pdfToPDFA": { - "tags": "cartlann, fadtéarmach, caighdeánach, comhshó, stóráil, caomhnú", - "title": "PDF Go PDF/A", - "header": "PDF Go PDF/A", - "credit": "Úsáideann an tseirbhís seo libreoffice chun PDF/A a thiontú", - "submit": "Tiontaigh", - "tip": "Faoi láthair ní oibríonn sé le haghaidh ionchuir iolracha ag an am céanna", - "outputFormat": "Formáid aschuir", - "pdfWithDigitalSignature": "Tá síniú digiteach ar an PDF. Bainfear é seo sa chéad chéim eile." - }, - "PDFToWord": { - "tags": "doc, docx, odt, focal, claochlú, formáid, comhshó, oifig, microsoft, docfile", - "title": "PDF a thiontú go word", - "header": "PDF a thiontú go word", - "selectText": { - "1": "Formáid comhaid aschuir" - }, - "credit": "Úsáideann an tseirbhís seo LibreOffice chun comhaid a thiontú.", - "submit": "Tiontaigh" - }, - "PDFToPresentation": { - "tags": "sleamhnáin, seó, oifig, microsoft", - "title": "PDF a chur i láthair", - "header": "PDF a chur i láthair", - "selectText": { - "1": "Formáid comhaid aschuir" - }, - "credit": "Úsáideann an tseirbhís seo LibreOffice chun comhaid a thiontú.", - "submit": "Tiontaigh" - }, - "PDFToText": { - "tags": "richformat, richtextformat, formáid téacs saibhir", - "title": "PDF go RTF (Téacs)", - "header": "PDF go RTF (Téacs)", - "selectText": { - "1": "Formáid comhaid aschuir" - }, - "credit": "Úsáideann an tseirbhís seo LibreOffice chun comhaid a thiontú.", - "submit": "Tiontaigh" - }, - "PDFToHTML": { - "tags": "ábhar gréasáin, cairdiúil don bhrabhsálaí", - "title": "Ó HTML go PDF", - "header": "Ó HTML go PDF", - "credit": "Úsáideann an tseirbhís seo PDF go html chun comhaid a thiontú.", - "submit": "Tiontaigh" - }, - "PDFToXML": { - "tags": "asbhaint sonraí, ábhar struchtúrtha, idirghabhála, claochlú, thiontú", - "title": "Ó XML go PDF", - "header": "Ó XML go PDF", - "credit": "Úsáideann an tseirbhís seo LibreOffice chun comhaid a thiontú.", - "submit": "Tiontaigh" - }, - "ScannerImageSplit": { - "tags": "ar leithligh, a bhrath go huathoibríoch, scanadh, il-grianghraf, eagrú", - "selectText": { - "1": "Tairseach Uillinn:", - "2": "Socraíonn sé an uillinn iomlán íosta a theastaíonn chun an íomhá a rothlú (réamhshocraithe: 10).", - "3": "Caoinfhulaingt:", - "4": "Cinneann an raon éagsúlachta dath timpeall an dath cúlra measta (réamhshocraithe: 30).", - "5": "Achar Íosta:", - "6": "Socraíonn sé an tairseach achair íosta le haghaidh grianghraf (réamhshocraithe: 10000).", - "7": "Íos-Limistéar Comhrianta:", - "8": "Socraíonn sé an tairseach íosta achar comhrianta le haghaidh grianghraf", - "9": "Méid na Teorann:", - "10": "Socraíonn sé méid na teorann a chuirtear leis agus a bhaintear chun teorainneacha bán a chosc san aschur (réamhshocraithe: 1)." - }, - "info": "Níl Python suiteáilte. Tá sé ag teastáil a rith." - }, - "sign": { - "tags": "údarú, tosaigh, síniú tarraingthe, comhartha téacs, íomhá-shíniú", - "title": "Comhartha", - "header": "Sínigh comhaid PDF", - "upload": "Uaslódáil Íomhá", - "draw": "Tarraing Síniú", - "text": "Ionchur Téacs", - "clear": "Glan", - "add": "Cuir", - "saved": "Sínithe Sínithe", - "save": "Sábháil an Síniú", - "personalSigs": "Sínithe Pearsanta", - "sharedSigs": "Sínithe Roinnte", - "noSavedSigs": "Níor aimsíodh aon síniú sábháilte", - "addToAll": "Cuir le gach leathanach", - "delete": "Scrios", - "first": "An chéad leathanach", - "last": "An leathanach deiridh", - "next": "An chéad leathanach eile", - "previous": "Leathanach roimhe seo", - "maintainRatio": "Scoránaigh, coinnigh an cóimheas gné", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "statach, díghníomhachtú, neamh-idirghníomhach, sruthlíniú", - "title": "Flatten", - "header": "PDF cothromú", - "flattenOnlyForms": "Flatten foirmeacha amháin", - "submit": "Flatten" - }, - "repair": { - "tags": "deisiú, athchóiriú, ceartú, aisghabháil", - "title": "Deisiúchán", - "header": "PDF a dheisiú", - "submit": "Deisiúchán" - }, - "removeBlanks": { - "tags": "glanta, sruthlíniú, neamhábhar, eagrú", - "title": "Bain Bearnaí", - "header": "Bain Leathanaigh Bhána", - "threshold": "Tairseach Bánachta picteilíní:", - "thresholdDesc": "An tairseach chun a chinneadh cé chomh bán is gá picteilín bán a bheith le rangú mar 'Bán'. 0", - "whitePercent": "Céatadán Bán (%):", - "whitePercentDesc": "Céatadán an leathanaigh a chaithfidh picteilíní 'bán' a bheith ann lena bhaint", - "submit": "Bain Bearnaí" - }, - "removeAnnotations": { - "tags": "tuairimí, aibhsiú, nótaí, marcáil, bain", - "title": "Bain Anótálacha", - "header": "Bain Anótálacha", - "submit": "Bain" - }, - "compare": { - "tags": "idirdhealú, codarsnacht, athruithe, anailís", - "title": "Déan comparáid idir", - "header": "Déan comparáid idir comhaid PDF", - "highlightColor": { - "1": "Dath Aibhsithe 1:", - "2": "Dath Aibhsithe 2:" - }, - "document": { - "1": "Doiciméad 1", - "2": "Doiciméad 2" - }, - "submit": "Déan comparáid idir", - "complex": { - "message": "Is comhaid mhóra ceann amháin nó an dá cheann de na doiciméid a soláthraíodh, d'fhéadfaí cruinneas na comparáide a laghdú" - }, - "large": { - "file": { - "message": "Tá ceann amháin de na doiciméid nó an dá cheann rómhór le próiseáil" - } - }, - "no": { - "text": { - "message": "Níl aon ábhar téacs i gceann amháin nó sa dá cheann de na PDF roghnaithe. Roghnaigh PDF le do thoil le téacs chun comparáid a dhéanamh." - } - } - }, - "certSign": { - "tags": "fíordheimhnigh, PEM, P12, oifigiúil, criptigh", - "title": "Síniú Teastais", - "header": "Sínigh PDF le do theastas (Obair ar siúl)", - "selectPDF": "Roghnaigh Comhad PDF le síniú:", - "jksNote": "Nóta: Mura bhfuil do chineál teastais liostaithe thíos, le do thoil é a thiontú go comhad Java Keystore (.jks) ag baint úsáide as an uirlis líne ordaithe keytool. Ansin, roghnaigh an rogha comhad .jks thíos.", - "selectKey": "Roghnaigh Do Chomhad Eochracha Príobháidí (Formáid PKCS#8, b'fhéidir .pem nó .der):", - "selectCert": "Roghnaigh Do Chomhad Teastais (formáid X.509, d'fhéadfadh sé a bheith .pem nó .der):", - "selectP12": "Roghnaigh Do Chomhad Siopa Eochracha PKCS#12 (.p12 nó .pfx) (Roghnach, Má chuirtear ar fáil é, ba cheart go mbeadh d'eochair phríobháideach agus teastas ann):", - "selectJKS": "Roghnaigh Do Chomhad Keystore Java (.jks nó .keystore):", - "certType": "Cineál Teastais", - "password": "Cuir isteach do Phasfhocal Stórais Eochracha nó Eochracha Príobháidí (más ann dó):", - "showSig": "Taispeáin Síniú", - "reason": "Cúis", - "location": "Suíomh", - "name": "Ainm", - "showLogo": "Taispeáin Lógó", - "submit": "Sínigh PDF" - }, - "removeCertSign": { - "tags": "fíordheimhnigh, PEM, P12, oifigiúil, dhíchriptiú", - "title": "Bain Síniú Teastais", - "header": "Bain an deimhniú digiteach ó PDF", - "selectPDF": "Roghnaigh comhad PDF:", - "submit": "Bain Síniú" - }, - "pageLayout": { - "tags": "chumasc, ilchodach, aon-amharc, a eagrú", - "title": "Leagan Amach Illeathanaigh", - "header": "Leagan Amach Illeathanaigh", - "pagesPerSheet": "Leathanaigh in aghaidh na bileoige:", - "addBorder": "Cuir Teorainneacha leis", - "submit": "Cuir isteach" - }, - "scalePages": { - "tags": "athraigh, modhnaigh, toise, cuir in oiriúint", - "title": "Coigeartaigh scála an leathanaigh", - "header": "Coigeartaigh scála an leathanaigh", - "pageSize": "Méid leathanach den doiciméad.", - "keepPageSize": "Méid Bunaidh", - "scaleFactor": "Leibhéal súmáil (barr) de leathanach.", - "submit": "Cuir isteach" - }, - "add-page-numbers": { - "tags": "leathanach, lipéad, eagraigh, innéacs" - }, - "auto-rename": { - "tags": "auto-bhrath, ceanntásc-bhunaithe, a eagrú, a athlipéadú", - "title": "Athainmnigh Uathainm", - "header": "Auto Athainmnigh PDF", - "submit": "Athainmnigh Uathainm" - }, - "adjust-contrast": { - "tags": "dath-cheartú, tune, a mhodhnú, a fheabhsú" - }, - "crop": { - "tags": "Baile Átha Troim, Laghdaigh, Cuir in eagar, Cruth", - "title": "Barraí", - "header": "PDF a ghearradh", - "submit": "Cuir isteach" - }, - "autoSplitPDF": { - "tags": "QR-bhunaithe, ar leith, scanadh-deighleog, eagrú", - "title": "Auto Scoilt PDF", - "header": "Auto Scoilt PDF", - "description": "Priontáil, Ionsáigh, Scan, uaslódáil, agus lig dúinn do dhoiciméid a scaradh go huathoibríoch. Níl gá le sórtáil obair láimhe.", - "selectText": { - "1": "Priontáil roinnt bileoga roinnteoirí thíos (tá dubh agus bán go breá).", - "2": "Scan do dhoiciméid go léir ag an am céanna tríd an leathán roinnteora a chur isteach eatarthu.", - "3": "Uaslódáil an comhad PDF mór scanta amháin agus lig do Stirling PDF an chuid eile a láimhseáil.", - "4": "Déantar leathanaigh roinnteoirí a bhrath agus a bhaint go huathoibríoch, rud a ráthaíonn doiciméad deiridh néata." - }, - "formPrompt": "Cuir PDF isteach ina bhfuil roinnteoirí Leathanaigh Stirling-PDF:", - "duplexMode": "Mód Duplex (scanadh tosaigh agus cúil)", - "dividerDownload2": "Íoslódáil 'Auto Splitter Divider (le treoracha).pdf'", - "submit": "Cuir isteach" - }, - "sanitizePdf": { - "tags": "glan, slán, sábháilte, bain bagairtí" - }, - "URLToPDF": { - "tags": "gréasán a ghabháil, a shábháil-leathanach, gréasán-go-doc, cartlann", - "title": "URL go PDF", - "header": "URL go PDF", - "submit": "Tiontaigh", - "credit": "Úsáideann WeasyPrint" - }, - "HTMLToPDF": { - "tags": "marcáil, ábhar gréasáin, claochlú, tiontú", - "title": "HTML go PDF", - "header": "HTML go PDF", - "help": "Glacann sé le comhaid HTML agus ZIPs ina bhfuil html/css/íomhánna srl riachtanach", - "submit": "Tiontaigh", - "credit": "Úsáideann WeasyPrint", - "zoom": "Leibhéal súmáil chun an suíomh Gréasáin a thaispeáint.", - "pageWidth": "Leithead an leathanaigh i ceintiméadar. (Bán go réamhshocrú)", - "pageHeight": "Airde an leathanaigh i ceintiméadar. (Bán go réamhshocrú)", - "marginTop": "Imeall barr an leathanaigh i milliméadair. (Bán go réamhshocrú)", - "marginBottom": "Imeall bun an leathanaigh i milliméadair. (Bán go réamhshocrú)", - "marginLeft": "Imeall clé an leathanaigh i milliméadair. (Bán go réamhshocrú)", - "marginRight": "Imeall ceart an leathanaigh i milliméadair. (Bán go réamhshocrú)", - "printBackground": "Íosluchtaigh cúlra do láithreáin ghréasáin.", - "defaultHeader": "Cumasaigh Ceanntásc Réamhshocraithe (Ainm agus uimhir an leathanaigh)", - "cssMediaType": "Athraigh cineál meáin CSS an leathanaigh.", - "none": "Dada", - "print": "Priontáil", - "screen": "Scáileán" - }, - "MarkdownToPDF": { - "tags": "marcáil, ábhar gréasáin, claochlú, tiontú", - "title": "Marcáil síos go PDF", - "header": "Marcáil síos go PDF", - "submit": "Tiontaigh", - "help": "Obair idir lámha", - "credit": "Úsáideann WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "marcáil, ábhar Gréasáin, claochlú, tiontú, md", - "title": "PDF Chuig Marcáil", - "header": "PDF Go Marcáil", - "submit": "Tiontaigh" - }, - "getPdfInfo": { - "tags": "faisnéis, sonraí, staitisticí, staitisticí", - "title": "Faigh eolas ar PDF", - "header": "Faigh eolas ar PDF", - "submit": "Faigh Eolas", - "downloadJson": "Íosluchtaigh ceol JSON" - }, - "extractPage": { - "tags": "sliocht" - }, - "PdfToSinglePage": { - "tags": "leathanach amháin" - }, - "showJS": { - "tags": "JS", - "title": "Taispeáin Javascript", - "header": "Taispeáin Javascript", - "downloadJS": "Íosluchtaigh Javascript", - "submit": "Taispeáin" - }, - "autoRedact": { - "tags": "Dearg, Folaigh, dubh amach, dubh, marcóir, i bhfolach", - "title": "Auto Redact", - "header": "Auto Redact", - "colorLabel": "Dath", - "textsToRedactLabel": "Téacs go Deighilt (línescartha)", - "textsToRedactPlaceholder": "e.g. \\nRúnda \\nTrí-rúnda", - "useRegexLabel": "Bain úsáid as Regex", - "wholeWordSearchLabel": "Cuardach Focal Iomlán", - "customPaddingLabel": "Stuáil Breise Saincheaptha", - "convertPDFToImageLabel": "Tiontaigh PDF go PDF-Image (Úsáidte chun téacs a bhaint taobh thiar den bhosca)", - "submitButton": "Cuir isteach" - }, - "redact": { - "tags": "Réiteach, Folaigh, dubh amach, dubh, marcóir, i bhfolach, lámhleabhar", - "title": "Athchóiriú de Láimh", - "header": "Athchóiriú de Láimh", - "submit": "Réiteach", - "textBasedRedaction": "Athrú Téacsbhunaithe", - "pageBasedRedaction": "Athrú bunaithe ar Leathanaigh", - "convertPDFToImageLabel": "Tiontaigh PDF go PDF-Image (Úsáidte chun téacs a bhaint taobh thiar den bhosca)", - "pageRedactionNumbers": { - "title": "Leathanaigh", - "placeholder": "(m.sh. 1,2,8 nó 4,7,12-16 nó 2n-1)" - }, - "redactionColor": { - "title": "Dath Athbhreithnithe" - }, - "export": "Easpórtáil", - "upload": "Uaslódáil", - "boxRedaction": "dearadh tarraingthe an bhosca", - "zoom": "Súmáil", - "zoomIn": "Súmáil isteach", - "zoomOut": "Súmáil amach", - "nextPage": "An Chéad Leathanach Eile", - "previousPage": "Leathanach Roimhe Seo", - "toggleSidebar": "Scoránaigh an Barra Taoibh", - "showThumbnails": "Taispeáin Mionsamhlacha", - "showDocumentOutline": "Taispeáin Imlíne an Doiciméid (cliceáil faoi dhó chun gach mír a leathnú/laghdú)", - "showAttatchments": "Taispeáin Ceangaltáin", - "showLayers": "Taispeáin Sraitheanna (cliceáil faoi dhó chun gach sraith a athshocrú go dtí an staid réamhshocraithe)", - "colourPicker": "Roghnóir Dathanna", - "findCurrentOutlineItem": "Faigh imlíne reatha", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV, Eastóscadh Tábla, sliocht, tiontú" - }, - "autoSizeSplitPDF": { - "tags": "pdf, scoilt, doiciméad, eagraíocht" - }, - "overlay-pdfs": { - "tags": "Forleagan", - "header": "Forleagan comhaid PDF", - "baseFile": { - "label": "Roghnaigh Bonn Comhad PDF" - }, - "overlayFiles": { - "label": "Roghnaigh Forleagan Comhaid PDF" - }, - "mode": { - "label": "Roghnaigh Mód Forleagan", - "sequential": "Forleagan Seicheamhach", - "interleaved": "Forleagan Interleaved", - "fixedRepeat": "Forleagan Athdhéanta Seasta" - }, - "counts": { - "label": "Áireamh Forleagan (do Mhód Athdhéanta Seasta)", - "placeholder": "Cuir isteach comhairimh scartha le camóga (m.sh., 2,3,1)" - }, - "position": { - "label": "Roghnaigh Post Forleagan", - "foreground": "Tulra", - "background": "Cúlra" - }, - "submit": "Cuir isteach" - }, - "split-by-sections": { - "tags": "Roinn Scoilt, Roinn, Saincheap", - "title": "Scoilt PDF de réir ailt", - "header": "Scoilt PDF i gcodanna", - "horizontal": { - "label": "Rannáin Chothrománacha", - "placeholder": "Cuir isteach líon na rannán cothrománach" - }, - "vertical": { - "label": "Rannáin Ingearach", - "placeholder": "Cuir isteach líon na rannáin ingearacha" - }, - "submit": "Scoilt PDF", - "merge": "Chumasadh i gceann PDF" - }, - "AddStampRequest": { - "tags": "Stampa, Cuir íomhá, íomhá lár, Uisce, PDF, Leabú, Saincheap", - "header": "Stampa PDF", - "title": "Stampa PDF", - "stampType": "Cineál Stampa", - "stampText": "Téacs Stampa", - "stampImage": "Íomhá Stampa", - "alphabet": "Aibítir", - "fontSize": "Cló/Méid na hÍomhá", - "rotation": "Rothlú", - "opacity": "Teimhneacht", - "position": "Post", - "overrideX": "Sáraigh X Comhordanáid", - "overrideY": "Sáraigh Y Comhordanáid", - "customMargin": "Imeall an Chustaim", - "customColor": "Dath Téacs Saincheaptha", - "submit": "Cuir isteach" - }, - "removeImagePdf": { - "tags": "Bain Íomhá, Oibríochtaí Leathanaigh, Cúl, taobh an fhreastalaí" - }, - "splitPdfByChapters": { - "tags": "scoilt, caibidlí, leabharmharcanna, eagraigh" - }, - "validateSignature": { - "tags": "síniú, fíoraigh, deimhnigh, pdf, teastas, síniú digiteach, Síniú Bailíochtaigh, Bailíochtaigh teastas", - "title": "Bailíochtaigh Sínithe PDF", - "header": "Bailíochtaigh Sínithe Digiteacha", - "selectPDF": "Roghnaigh comhad PDF sínithe", - "submit": "Bailíochtaigh Sínithe", - "results": "Torthaí Bailíochtaithe", - "status": { - "_value": "Stádas", - "valid": "Bailí", - "invalid": "Neamhbhailí" - }, - "signer": "Sínitheoir", - "date": "Dáta", - "reason": "Cúis", - "location": "Suíomh", - "noSignatures": "Níor aimsíodh síniú digiteach ar bith sa doiciméad seo", - "chain": { - "invalid": "Theip ar bhailíochtú slabhra an teastais - ní féidir aitheantas an tsínitheora a fhíorú" - }, - "trust": { - "invalid": "Níl an teastas sa stór muiníne - ní féidir an fhoinse a fhíorú" - }, - "cert": { - "expired": "Tá an teastas imithe in éag", - "revoked": "Tá an teastas cúlghairthe", - "info": "Sonraí an Teastais", - "issuer": "Eisitheoir", - "subject": "Ábhar", - "serialNumber": "Sraithuimhir", - "validFrom": "Bailí Ó", - "validUntil": "Bailí Go dtí", - "algorithm": "Algartam", - "keySize": "Méid na hEochrach", - "version": "Leagan", - "keyUsage": "Úsáid Eochrach", - "selfSigned": "Féin-Sínithe", - "bits": "giotáin" - }, - "signature": { - "info": "Eolas Sínithe", - "_value": "Síniú", - "mathValid": "Tá an síniú bailí go matamaiticiúil ACH:" - }, - "selectCustomCert": "Comhad Teastais Saincheaptha X.509 (Roghnach)" - }, - "replace-color": { - "title": "Athchuir-Inbhéartaigh-Dath", - "header": "Athchuir-Inbhéartaigh Dath PDF", - "selectText": { - "1": "Athchuir nó Inbhéartaigh Roghanna datha", - "2": "Réamhshocrú(Réamhshocrú dathanna ardchodarsnachta)", - "3": "Saincheaptha(dathanna saincheaptha)", - "4": "Iompaithe Lán(Inbhéartaigh gach dath)", - "5": "Roghanna dathanna ardchodarsnachta", - "6": "téacs bán ar chúlra dubh", - "7": "Téacs dubh ar chúlra bán", - "8": "Téacs buí ar chúlra dubh", - "9": "Téacs glas ar chúlra dubh", - "10": "Roghnaigh Dath an téacs", - "11": "Roghnaigh Dath an Chúlra" - }, - "submit": "Ionadaigh" - }, - "replaceColorPdf": { - "tags": "Athchuir Dath,Oibríochtaí Leathanaigh,Cúl,taobh an fhreastalaí" - }, - "login": { - "title": "Sínigh isteach", - "header": "Sínigh isteach", - "signin": "Sínigh isteach", - "rememberme": "Cuimhnigh orm", - "invalid": "Ainm úsáideora nó pasfhocal neamhbhailí.", - "locked": "Tá do chuntas glasáilte.", - "signinTitle": "Sínigh isteach le do thoil", - "ssoSignIn": "Logáil isteach trí Chlárú Aonair", - "oAuth2AutoCreateDisabled": "OAUTH2 Uath-Chruthaigh Úsáideoir faoi Mhíchumas", - "oAuth2AdminBlockedUser": "Tá bac faoi láthair ar chlárú nó logáil isteach úsáideoirí neamhchláraithe. Déan teagmháil leis an riarthóir le do thoil.", - "oauth2RequestNotFound": "Níor aimsíodh iarratas údaraithe", - "oauth2InvalidUserInfoResponse": "Freagra Neamhbhailí Faisnéise Úsáideora", - "oauth2invalidRequest": "Iarratas Neamhbhailí", - "oauth2AccessDenied": "Rochtain Diúltaithe", - "oauth2InvalidTokenResponse": "Freagra Comhartha Neamhbhailí", - "oauth2InvalidIdToken": "Comhartha Aitheantais Neamhbhailí", - "relyingPartyRegistrationNotFound": "Níor aimsíodh clárú páirtí spleách", - "userIsDisabled": "Úsáideoir díghníomhachtaithe, tá bac ar logáil isteach leis an ainm úsáideora seo faoi láthair. Déan teagmháil leis an riarthóir le do thoil.", - "alreadyLoggedIn": "Tá tú logáilte isteach cheana", - "alreadyLoggedIn2": "gléasanna. Logáil amach as na gléasanna agus bain triail eile as.", - "toManySessions": "Tá an iomarca seisiún gníomhach agat", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF go leathanach amháin", - "header": "PDF go leathanach amháin", - "submit": "Tiontaigh go Leathanach Aonair" - }, - "pageExtracter": { - "title": "Leathanaigh Sliocht", - "header": "Leathanaigh Sliocht", - "submit": "Sliocht", - "placeholder": "(m.sh. 1,2,8 nó 4,7,12-16 nó 2n-1)" - }, - "sanitizePDF": { - "title": "PDF sláintíocht", - "header": "Glanadh comhad PDF", - "selectText": { - "1": "Bain gníomhartha JavaScript", - "2": "Bain comhaid leabaithe", - "3": "Remove XMP metadata", - "4": "Bain naisc", - "5": "Bain clónna", - "6": "Remove Document Info Metadata" - }, - "submit": "PDF sláintíocht" - }, - "adjustContrast": { - "title": "Coigeartaigh Codarsnacht", - "header": "Coigeartaigh Codarsnacht", - "contrast": "Codarsnacht:", - "brightness": "Gile:", - "saturation": "Sáithiú:", - "download": "Íosluchtaigh" - }, - "compress": { - "title": "Comhbhrúigh", - "header": "Comhbhrúigh PDF", - "credit": "Úsáideann an tseirbhís seo qpdf le haghaidh Comhbhrú/Optimization PDF.", - "grayscale": { - "label": "Cuir Scála Liath i bhFeidhm le Comhbhrú" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Leibhéal optamaithe:", - "4": "Mód uathoibríoch - Coigeartaíonn Auto cáilíocht chun PDF a fháil go dtí an méid cruinn", - "5": "Méid PDF a bhfuiltear ag súil leis (m.sh. 25MB, 10.8MB, 25KB)" - }, - "submit": "Comhbhrúigh" - }, - "decrypt": { - "passwordPrompt": "Tá an comhad seo cosanta ag pasfhocal. Cuir isteach an pasfhocal le do thoil:", - "cancelled": "Cealaíodh an oibríocht le haghaidh PDF: {0}", - "noPassword": "Níor soláthraíodh focal faire don PDF criptithe: {0}", - "invalidPassword": "Déan iarracht eile leis an bhfocal faire ceart.", - "invalidPasswordHeader": "Focal faire mícheart nó criptiúchán PDF nach dtacaítear leis: {0}", - "unexpectedError": "Tharla earráid agus an comhad á phróiseáil. Bain triail eile as.", - "serverError": "Earráid fhreastalaí agus é díchriptiú: {0}", - "success": "D'éirigh le díchriptiú an chomhaid." - }, - "multiTool-advert": { - "message": "Tá an ghné seo ar fáil inár leathanach il-uirlisí freisin. Seiceáil é le haghaidh Chomhéadain leathanach ar leathanach feabhsaithe agus gnéithe breise!" - }, - "pageRemover": { - "title": "Bainteoir Leathanach", - "header": "PDF leathanach remover", - "pagesToDelete": "Leathanaigh le scriosadh (Cuir isteach liosta uimhreacha leathanaigh atá deighilte le camóga): :", - "submit": "Scrios Leathanaigh", - "placeholder": "(m.sh. 1,2,6 nó 1-10,15-30)" - }, - "imageToPDF": { - "title": "Íomhá go PDF", - "header": "Íomhá go PDF", - "submit": "Tiontaigh", - "selectLabel": "Roghanna Oiriúnú Íomhá", - "fillPage": "Líon Leathanach", - "fitDocumentToImage": "Fit Leathanach don Íomhá", - "maintainAspectRatio": "Cóimheasa Gnéis a chothabháil", - "selectText": { - "2": "PDF rothlú uathoibríoch", - "3": "Loighic ilchomhad (cumasaithe ach amháin má oibríonn tú le híomhánna iolracha)", - "4": "Chumasadh go PDF amháin", - "5": "Tiontaigh go PDF ar leith" - } - }, - "PDFToCSV": { - "title": "Ó CSV go PDF", - "header": "Ó CSV go PDF", - "prompt": "Roghnaigh leathanach chun tábla a bhaint as", - "submit": "Sliocht" - }, - "split-by-size-or-count": { - "title": "Scoilt PDF de réir Méid nó Comhairimh", - "header": "Scoilt PDF de réir Méid nó Comhairimh", - "type": { - "label": "Roghnaigh Cineál Scoilt", - "size": "De réir Méid", - "pageCount": "De réir Comhaireamh Leathanaigh", - "docCount": "De réir Líon na nDoiciméad" - }, - "value": { - "label": "Cuir isteach Luach", - "placeholder": "Cuir isteach méid (m.sh., 2MB nó 3KB) nó comhaireamh (m.sh., 5)" - }, - "submit": "Cuir isteach" - }, - "printFile": { - "title": "Priontáil Comhad", - "header": "Priontáil an Comhad go Printéir", - "selectText": { - "1": "Roghnaigh Comhad le Priontáil", - "2": "Cuir isteach Ainm an Phrintéara" - }, - "submit": "Priontáil" - }, - "licenses": { - "nav": "Ceadúnais", - "title": "Ceadúnais 3ú Páirtí", - "header": "Ceadúnais 3ú Páirtí", - "module": "Modúl", - "version": "Leagan", - "license": "Ceadúnas" - }, - "survey": { - "nav": "Suirbhé", - "title": "Suirbhé Stirling-PDF", - "description": "Níl aon rian ar Stirling-PDF agus mar sin ba mhaith linn cloisteáil ónár n-úsáideoirí chun feabhas a chur ar Stirling-PDF!", - "changes": "Tá Stirling-PDF athraithe ón suirbhé deireanach! Le tuilleadh a fháil amach féach ar ár mblagphost anseo:", - "changes2": "De bharr na n-athruithe seo táimid ag fáil tacaíochta gnó agus maoiniú íoctha", - "please": "Smaoinigh ar ár suirbhé a dhéanamh le do thoil!", - "disabled": "(Díchumasófar aníos an tsuirbhé sna nuashonruithe seo a leanas ach beidh siad ar fáil ag bun an leathanaigh)", - "button": "Tóg Suirbhé", - "dontShowAgain": "Ná taispeáin arís", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Bain íomhá", - "header": "Bain íomhá", - "removeImage": "Bain íomhá", - "submit": "Bain íomhá" - }, - "splitByChapters": { - "title": "Scoil PDF de réir Caibidlí", - "header": "Scoil PDF de réir Caibidlí", - "bookmarkLevel": "Leibhéal Leabharmharc", - "includeMetadata": "Cuir meiteashonraí san áireamh", - "allowDuplicates": "Ceadaigh do Dhúblaigh", - "desc": { - "1": "Scann an uirlis seo comhad PDF ina PDFanna iolracha bunaithe ar a struchtúr caibidle.", - "2": "Leibhéal Leabharmharc: Roghnaigh leibhéal na leabharmharcanna le húsáid don scoilteadh (0 don bharrleibhéal, 1 don dara leibhéal, etc.).", - "3": "Cuir Meiteashonraí san áireamh: Má dhéantar iad a sheiceáil, cuirfear meiteashonraí an PDF bhunaidh san áireamh i ngach PDF scoilte.", - "4": "Ceadaigh do Dhúblaigh: Má dhéantar iad a sheiceáil, ceadaítear go leor leabharmharcanna ar an leathanach céanna chun PDFanna ar leith a chruthú." - }, - "submit": "Scoil PDF" - }, - "fileChooser": { - "click": "Cliceáil", - "or": "nó", - "dragAndDrop": "Tarraing & Scaoil", - "dragAndDropPDF": "Tarraing & Scaoil comhad PDF", - "dragAndDropImage": "Tarraing & Scaoil comhad Íomhá", - "hoveredDragAndDrop": "Tarraing agus scaoil comhad(í) anseo", - "extractPDF": "Ag Aistriú..." - }, - "releases": { - "footer": "Eisiúintí", - "title": "Nótaí Eisiúna", - "header": "Nótaí Eisiúna", - "current": { - "version": "Eisiúna Reatha" - }, - "note": "Tá nótaí eisiúna ar fáil i mBéarla amháin" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/hi-IN/translation.json b/frontend/dist/locales/hi-IN/translation.json deleted file mode 100644 index 5b0a2d68b..000000000 --- a/frontend/dist/locales/hi-IN/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "फ़ॉन्ट आकार", - "fontName": "फ़ॉन्ट नाम", - "title": "पृष्ठ संख्या जोड़ें", - "header": "पृष्ठ संख्या जोड़ें", - "selectText": { - "1": "PDF फ़ाइल चुनें:", - "2": "मार्जिन आकार", - "3": "स्थिति", - "4": "प्रारंभिक संख्या", - "5": "संख्यांकित करने के लिए पृष्ठ", - "6": "कस्टम टेक्स्ट" - }, - "customTextDesc": "कस्टम टेक्स्ट", - "numberPagesDesc": "कौन से पृष्ठ संख्यांकित करने हैं, डिफ़ॉल्ट 'सभी', 1-5 या 2,5,9 आदि भी स्वीकार करता है", - "customNumberDesc": "डिफ़ॉल्ट {n}, 'पृष्ठ {n} कुल {total}', 'टेक्स्ट-{n}', '{filename}-{n}' भी स्वीकार करता है", - "submit": "पृष्ठ संख्या जोड़ें" - }, - "pdfPrompt": "पीडीएफ फ़ाइल(ें) चुनें", - "multiPdfPrompt": "पीडीएफ फ़ाइलें चुनें (2+)", - "multiPdfDropPrompt": "आवश्यक सभी पीडीएफ फ़ाइलों को चुनें (या खींच कर छोड़ें)", - "imgPrompt": "छवि(यां) चुनें", - "genericSubmit": "जमा करें", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "चेतावनी: फ़ाइल के आकार के आधार पर यह प्रक्रिया एक मिनट तक ले सकती है", - "pageOrderPrompt": "कस्टम पृष्ठ क्रम (पृष्ठ संख्याओं की अल्पविराम से अलग सूची या 2n+1 जैसे फ़ंक्शन दर्ज करें):", - "pageSelectionPrompt": "कस्टम पृष्ठ चयन (पृष्ठ संख्याओं 1,5,6 या 2n+1 जैसे फ़ंक्शन की अल्पविराम से अलग सूची दर्ज करें):", - "goToPage": "जाएं", - "true": "हाँ", - "false": "नहीं", - "unknown": "अज्ञात", - "save": "सहेजें", - "saveToBrowser": "ब्राउज़र में सहेजें", - "close": "बंद करें", - "filesSelected": "फ़ाइलें चयनित", - "noFavourites": "कोई पसंदीदा नहीं जोड़ा गया", - "downloadComplete": "डाउनलोड पूर्ण", - "bored": "इंतज़ार करते हुए बोर हो रहे हैं?", - "alphabet": "वर्णमाला", - "downloadPdf": "पीडीएफ डाउनलोड करें", - "text": "टेक्स्ट", - "font": "फ़ॉन्ट", - "selectFillter": "-- चुनें --", - "pageNum": "पृष्ठ संख्या", - "sizes": { - "small": "छोटा", - "medium": "मध्यम", - "large": "बड़ा", - "x-large": "बहुत बड़ा" - }, - "error": { - "pdfPassword": "पीडीएफ दस्तावेज़ पासवर्ड से सुरक्षित है और या तो पासवर्ड नहीं दिया गया था या गलत था", - "_value": "त्रुटि", - "sorry": "समस्या के लिए खेद है!", - "needHelp": "मदद चाहिए / कोई समस्या मिली?", - "contactTip": "यदि आप अभी भी समस्याओं का सामना कर रहे हैं, तो मदद के लिए हमसे संपर्क करने में संकोच न करें। आप हमारे GitHub पृष्ठ पर टिकट जमा कर सकते हैं या Discord के माध्यम से हमसे संपर्क कर सकते हैं:", - "404": { - "head": "404 - पृष्ठ नहीं मिला | उफ़, हम कोड में ठोकर खा गए!", - "1": "हम वह पृष्ठ नहीं ढूंढ पा रहे हैं जिसे आप खोज रहे हैं।", - "2": "कुछ गलत हो गया" - }, - "github": "GitHub पर टिकट जमा करें", - "showStack": "स्टैक ट्रेस दिखाएं", - "copyStack": "स्टैक ट्रेस कॉपी करें", - "githubSubmit": "GitHub - समस्या टिकट जमा करें", - "discordSubmit": "Discord - सहायता अनुरोध जमा करें" - }, - "delete": "हटाएं", - "username": "उपयोगकर्ता नाम", - "password": "पासवर्ड", - "welcome": "स्वागत है", - "property": "संपत्ति", - "black": "काला", - "white": "सफेद", - "red": "लाल", - "green": "हरा", - "blue": "नीला", - "custom": "कस्टम...", - "WorkInProgess": "कार्य प्रगति पर है, काम नहीं कर सकता है या बग हो सकते हैं, कृपया किसी भी समस्या की रिपोर्ट करें!", - "poweredBy": "द्वारा संचालित", - "yes": "हाँ", - "no": "नहीं", - "changedCredsMessage": "क्रेडेंशियल्स बदल दिए गए!", - "notAuthenticatedMessage": "उपयोगकर्ता प्रमाणित नहीं है।", - "userNotFoundMessage": "उपयोगकर्ता नहीं मिला।", - "incorrectPasswordMessage": "वर्तमान पासवर्ड गलत है।", - "usernameExistsMessage": "नया उपयोगकर्ता नाम पहले से मौजूद है।", - "invalidUsernameMessage": "अमान्य उपयोगकर्ता नाम, उपयोगकर्ता नाम में केवल अक्षर, संख्याएं और निम्नलिखित विशेष वर्ण @._+- हो सकते हैं या एक वैध ईमेल पता होना चाहिए।", - "invalidPasswordMessage": "पासवर्ड खाली नहीं हो सकता है और शुरुआत या अंत में स्पेस नहीं हो सकते।", - "confirmPasswordErrorMessage": "नया पासवर्ड और पुष्टि नया पासवर्ड मेल खाने चाहिए।", - "deleteCurrentUserMessage": "वर्तमान लॉग इन उपयोगकर्ता को हटा नहीं सकते।", - "deleteUsernameExistsMessage": "उपयोगकर्ता नाम मौजूद नहीं है और इसे हटाया नहीं जा सकता।", - "downgradeCurrentUserMessage": "वर्तमान उपयोगकर्ता की भूमिका को डाउनग्रेड नहीं किया जा सकता", - "disabledCurrentUserMessage": "वर्तमान उपयोगकर्ता को अक्षम नहीं किया जा सकता", - "downgradeCurrentUserLongMessage": "वर्तमान उपयोगकर्ता की भूमिका को डाउनग्रेड नहीं किया जा सकता। इसलिए, वर्तमान उपयोगकर्ता नहीं दिखाया जाएगा।", - "userAlreadyExistsOAuthMessage": "उपयोगकर्ता पहले से ही OAuth2 उपयोगकर्ता के रूप में मौजूद है।", - "userAlreadyExistsWebMessage": "उपयोगकर्ता पहले से ही वेब उपयोगकर्ता के रूप में मौजूद है।", - "oops": "उफ़!", - "help": "सहायता", - "goHomepage": "मुख्य पृष्ठ पर जाएं", - "joinDiscord": "हमारे Discord सर्वर में शामिल हों", - "seeDockerHub": "Docker Hub देखें", - "visitGithub": "GitHub रिपॉजिटरी पर जाएं", - "donate": "दान करें", - "color": "रंग", - "sponsor": "प्रायोजक", - "info": "जानकारी", - "pro": "प्रो", - "page": "पृष्ठ", - "pages": "पृष्ठ", - "loading": "लोड हो रहा है...", - "addToDoc": "दस्तावेज़ में जोड़ें", - "reset": "रीसेट", - "apply": "लागू करें", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "गोपनीयता नीति", - "terms": "नियम और शर्तें", - "accessibility": "सुलभता", - "cookie": "कुकी नीति", - "impressum": "इम्प्रेसम", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "पाइपलाइन मेनू (बीटा)", - "uploadButton": "कस्टम अपलोड करें", - "configureButton": "कॉन्फ़िगर करें", - "defaultOption": "कस्टम", - "submitButton": "जमा करें", - "help": "पाइपलाइन सहायता", - "scanHelp": "फ़ोल्डर स्कैनिंग सहायता", - "deletePrompt": "क्या आप वाकई पाइपलाइन को हटाना चाहते हैं?", - "tags": "स्वचालित,क्रम,स्क्रिप्टेड,बैच-प्रोसेस", - "title": "पाइपलाइन" - }, - "pipelineOptions": { - "header": "पाइपलाइन कॉन्फ़िगरेशन", - "pipelineNameLabel": "पाइपलाइन नाम", - "saveSettings": "ऑपरेशन सेटिंग्स सहेजें", - "pipelineNamePrompt": "यहाँ पाइपलाइन नाम दर्ज करें", - "selectOperation": "ऑपरेशन चुनें", - "addOperationButton": "ऑपरेशन जोड़ें", - "pipelineHeader": "पाइपलाइन:", - "saveButton": "डाउनलोड करें", - "validateButton": "मान्य करें" - }, - "enterpriseEdition": { - "button": "प्रो में अपग्रेड करें", - "warning": "यह सुविधा केवल प्रो उपयोगकर्ताओं के लिए उपलब्ध है।", - "yamlAdvert": "Stirling PDF प्रो YAML कॉन्फ़िगरेशन फ़ाइलों और अन्य SSO सुविधाओं का समर्थन करता है।", - "ssoAdvert": "और अधिक उपयोगकर्ता प्रबंधन सुविधाओं की तलाश में? Stirling PDF प्रो जांचें" - }, - "analytics": { - "title": "क्या आप Stirling PDF को बेहतर बनाना चाहते हैं?", - "paragraph1": "Stirling PDF में उत्पाद को बेहतर बनाने में मदद करने के लिए विकल्प विश्लेषण है। हम किसी भी व्यक्तिगत जानकारी या फ़ाइल सामग्री को ट्रैक नहीं करते हैं।", - "paragraph2": "कृपया Stirling-PDF को बढ़ने में मदद करने और हमें अपने उपयोगकर्ताओं को बेहतर समझने के लिए विश्लेषण सक्षम करने पर विचार करें।", - "enable": "विश्लेषण सक्षम करें", - "disable": "विश्लेषण अक्षम करें", - "settings": "आप config/settings.yml फ़ाइल में विश्लेषण के लिए सेटिंग्स बदल सकते हैं" - }, - "navbar": { - "favorite": "पसंदीदा", - "recent": "New and recently updated", - "darkmode": "डार्क मोड", - "language": "भाषाएं", - "settings": "सेटिंग्स", - "allTools": "उपकरण", - "multiTool": "मल्टी टूल", - "search": "खोजें", - "sections": { - "organize": "व्यवस्थित करें", - "convertTo": "PDF में परिवर्तित करें", - "convertFrom": "PDF से परिवर्तित करें", - "security": "हस्ताक्षर और सुरक्षा", - "advance": "उन्नत", - "edit": "देखें और संपादित करें", - "popular": "लोकप्रिय" - } - }, - "settings": { - "title": "सेटिंग्स", - "update": "अपडेट उपलब्ध है", - "updateAvailable": "{0} वर्तमान स्थापित संस्करण है। एक नया संस्करण ({1}) उपलब्ध है।", - "appVersion": "ऐप संस्करण:", - "downloadOption": { - "title": "डाउनलोड विकल्प चुनें (एकल फ़ाइल गैर-ज़िप डाउनलोड के लिए):", - "1": "उसी विंडो में खोलें", - "2": "नई विंडो में खोलें", - "3": "फ़ाइल डाउनलोड करें" - }, - "zipThreshold": "डाउनलोड की गई फ़ाइलों की संख्या इससे अधिक होने पर ज़िप करें", - "signOut": "साइन आउट", - "accountSettings": "खाता सेटिंग्स", - "bored": { - "help": "ईस्टर एग गेम सक्षम करता है" - }, - "cacheInputs": { - "name": "फ़ॉर्म इनपुट सहेजें", - "help": "भविष्य के उपयोग के लिए पहले से उपयोग किए गए इनपुट को स्टोर करने के लिए सक्षम करें" - } - }, - "changeCreds": { - "title": "क्रेडेंशियल्स बदलें", - "header": "अपना खाता विवरण अपडेट करें", - "changePassword": "आप डिफ़ॉल्ट लॉगिन क्रेडेंशियल्स का उपयोग कर रहे हैं। कृपया एक नया पासवर्ड दर्ज करें", - "newUsername": "नया उपयोगकर्ता नाम", - "oldPassword": "वर्तमान पासवर्ड", - "newPassword": "नया पासवर्ड", - "confirmNewPassword": "नए पासवर्ड की पुष्टि करें", - "submit": "परिवर्तन जमा करें" - }, - "account": { - "title": "खाता सेटिंग्स", - "accountSettings": "खाता सेटिंग्स", - "adminSettings": "व्यवस्थापक सेटिंग्स - उपयोगकर्ताओं को देखें और जोड़ें", - "userControlSettings": "उपयोगकर्ता नियंत्रण सेटिंग्स", - "changeUsername": "उपयोगकर्ता नाम बदलें", - "newUsername": "नया उपयोगकर्ता नाम", - "password": "पुष्टिकरण पासवर्ड", - "oldPassword": "पुराना पासवर्ड", - "newPassword": "नया पासवर्ड", - "changePassword": "पासवर्ड बदलें", - "confirmNewPassword": "नए पासवर्ड की पुष्टि करें", - "signOut": "साइन आउट", - "yourApiKey": "आपकी API कुंजी", - "syncTitle": "खाते के साथ ब्राउज़र सेटिंग्स सिंक करें", - "settingsCompare": "सेटिंग्स तुलना:", - "property": "संपत्ति", - "webBrowserSettings": "वेब ब्राउज़र सेटिंग", - "syncToBrowser": "सिंक खाता -> ब्राउज़र", - "syncToAccount": "सिंक खाता <- ब्राउज़र" - }, - "adminUserSettings": { - "title": "उपयोगकर्ता नियंत्रण सेटिंग्स", - "header": "व्यवस्थापक उपयोगकर्ता नियंत्रण सेटिंग्स", - "admin": "व्यवस्थापक", - "user": "उपयोगकर्ता", - "addUser": "नया उपयोगकर्ता जोड़ें", - "deleteUser": "उपयोगकर्ता हटाएं", - "confirmDeleteUser": "क्या उपयोगकर्ता को हटा दिया जाए?", - "confirmChangeUserStatus": "क्या उपयोगकर्ता को अक्षम/सक्षम किया जाए?", - "usernameInfo": "उपयोगकर्ता नाम में केवल अक्षर, संख्याएं और निम्नलिखित विशेष वर्ण @._+- हो सकते हैं या एक वैध ईमेल पता होना चाहिए।", - "roles": "भूमिकाएं", - "role": "भूमिका", - "actions": "कार्रवाइयां", - "apiUser": "सीमित API उपयोगकर्ता", - "extraApiUser": "अतिरिक्त सीमित API उपयोगकर्ता", - "webOnlyUser": "केवल वेब उपयोगकर्ता", - "demoUser": "डेमो उपयोगकर्ता (कोई कस्टम सेटिंग्स नहीं)", - "internalApiUser": "आंतरिक API उपयोगकर्ता", - "forceChange": "लॉगिन पर उपयोगकर्ता को पासवर्ड बदलने के लिए मजबूर करें", - "submit": "उपयोगकर्ता सहेजें", - "changeUserRole": "उपयोगकर्ता की भूमिका बदलें", - "authenticated": "प्रमाणित", - "editOwnProfil": "अपनी प्रोफ़ाइल संपादित करें", - "enabledUser": "सक्षम उपयोगकर्ता", - "disabledUser": "अक्षम उपयोगकर्ता", - "activeUsers": "सक्रिय उपयोगकर्ता:", - "disabledUsers": "अक्षम उपयोगकर्ता:", - "totalUsers": "कुल उपयोगकर्ता:", - "lastRequest": "अंतिम अनुरोध", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "डेटाबेस आयात/निर्यात", - "header": "डेटाबेस आयात/निर्यात", - "fileName": "फ़ाइल नाम", - "creationDate": "निर्माण तिथि", - "fileSize": "फ़ाइल आकार", - "deleteBackupFile": "बैकअप फ़ाइल हटाएं", - "importBackupFile": "बैकअप फ़ाइल आयात करें", - "createBackupFile": "बैकअप फ़ाइल बनाएं", - "downloadBackupFile": "बैकअप फ़ाइल डाउनलोड करें", - "info_1": "डेटा आयात करते समय, सही संरचना सुनिश्चित करना महत्वपूर्ण है। यदि आप अनिश्चित हैं कि आप क्या कर रहे हैं, तो किसी पेशेवर से सलाह और समर्थन लें। संरचना में त्रुटि एप्लिकेशन खराबी का कारण बन सकती है, यहां तक कि एप्लिकेशन को चलाने की पूर्ण अक्षमता भी हो सकती है।", - "info_2": "अपलोड करते समय फ़ाइल नाम मायने नहीं रखता। इसे बाद में backup_user_yyyyMMddHHmm.sql प्रारूप का पालन करने के लिए पुनर्नामित किया जाएगा, जो एक सुसंगत नामकरण सम्मेलन सुनिश्चित करता है।", - "submit": "बैकअप आयात करें", - "importIntoDatabaseSuccessed": "डेटाबेस में आयात सफल", - "backupCreated": "डेटाबेस बैकअप सफल", - "fileNotFound": "फ़ाइल नहीं मिली", - "fileNullOrEmpty": "फ़ाइल खाली या शून्य नहीं हो सकती", - "failedImportFile": "फ़ाइल आयात विफल", - "notSupported": "यह फ़ंक्शन आपके डेटाबेस कनेक्शन के लिए उपलब्ध नहीं है।" - }, - "session": { - "expired": "आपका सत्र समाप्त हो गया है। कृपया पृष्ठ को रिफ्रेश करें और पुन: प्रयास करें।", - "refreshPage": "पृष्ठ रिफ्रेश करें" - }, - "home": { - "desc": "आपकी सभी PDF आवश्यकताओं के लिए आपका स्थानीय रूप से होस्ट किया गया एक-स्टॉप-शॉप।", - "searchBar": "सुविधाएं खोजें...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "देखें, टिप्पणी करें, टेक्स्ट या छवियां जोड़ें" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "PDF मल्टी टूल", - "desc": "मर्ज करें, घुमाएं, पुनर्व्यवस्थित करें और पृष्ठ हटाएं" - }, - "merge": { - "title": "मर्ज", - "desc": "कई PDF को आसानी से एक में मर्ज करें।" - }, - "split": { - "title": "विभाजित", - "desc": "PDF को कई दस्तावेजों में विभाजित करें" - }, - "rotate": { - "title": "घुमाएं", - "desc": "अपनी PDF को आसानी से घुमाएं।" - }, - "imageToPdf": { - "title": "छवि से PDF", - "desc": "छवि (PNG, JPEG, GIF) को PDF में बदलें।" - }, - "pdfToImage": { - "title": "PDF से छवि", - "desc": "PDF को छवि में बदलें। (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "व्यवस्थित करें", - "desc": "किसी भी क्रम में पृष्ठ निकालें/पुनर्व्यवस्थित करें" - }, - "addImage": { - "title": "छवि जोड़ें", - "desc": "PDF पर एक निर्धारित स्थान पर छवि जोड़ें" - }, - "watermark": { - "title": "वॉटरमार्क जोड़ें", - "desc": "अपने PDF दस्तावेज में कस्टम वॉटरमार्क जोड़ें।" - }, - "permissions": { - "title": "अनुमतियां बदलें", - "desc": "अपने PDF दस्तावेज की अनुमतियां बदलें" - }, - "removePages": { - "title": "निकालें", - "desc": "अपने PDF दस्तावेज से अवांछित पृष्ठ हटाएं।" - }, - "addPassword": { - "title": "पासवर्ड जोड़ें", - "desc": "पासवर्ड के साथ अपने PDF दस्तावेज को एन्क्रिप्ट करें।" - }, - "removePassword": { - "title": "पासवर्ड हटाएं", - "desc": "अपने PDF दस्तावेज से पासवर्ड सुरक्षा हटाएं।" - }, - "compressPdfs": { - "title": "कम्प्रेस", - "desc": "PDF को कम्प्रेस करें ताकि उनका फ़ाइल आकार कम हो जाए।" - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "मेटाडेटा बदलें", - "desc": "PDF दस्तावेज से मेटाडेटा बदलें/हटाएं/जोड़ें" - }, - "fileToPDF": { - "title": "फ़ाइल को PDF में बदलें", - "desc": "लगभग किसी भी फ़ाइल को PDF में बदलें (DOCX, PNG, XLS, PPT, TXT और अधिक)" - }, - "ocr": { - "title": "OCR / स्कैन साफ करें", - "desc": "स्कैन को साफ करें और PDF के अंदर छवियों से टेक्स्ट का पता लगाएं और उसे टेक्स्ट के रूप में फिर से जोड़ें।" - }, - "extractImages": { - "title": "छवियां निकालें", - "desc": "PDF से सभी छवियों को निकालें और उन्हें ज़िप में सहेजें" - }, - "pdfToPDFA": { - "title": "PDF से PDF/A", - "desc": "लंबी अवधि के भंडारण के लिए PDF को PDF/A में बदलें" - }, - "PDFToWord": { - "title": "PDF से Word", - "desc": "PDF को Word प्रारूपों में बदलें (DOC, DOCX और ODT)" - }, - "PDFToPresentation": { - "title": "PDF से प्रस्तुति", - "desc": "PDF को प्रस्तुति प्रारूपों में बदलें (PPT, PPTX और ODP)" - }, - "PDFToText": { - "title": "PDF से RTF (टेक्स्ट)", - "desc": "PDF को टेक्स्ट या RTF प्रारूप में बदलें" - }, - "PDFToHTML": { - "title": "PDF से HTML", - "desc": "PDF को HTML प्रारूप में बदलें" - }, - "PDFToXML": { - "title": "PDF से XML", - "desc": "PDF को XML प्रारूप में बदलें" - }, - "ScannerImageSplit": { - "title": "स्कैन की गई फोटो का पता लगाएं/विभाजित करें", - "desc": "फोटो/PDF के अंदर से कई फोटो को विभाजित करें" - }, - "sign": { - "title": "हस्ताक्षर करें", - "desc": "चित्र बनाकर, टेक्स्ट या छवि द्वारा PDF में हस्ताक्षर जोड़ें" - }, - "flatten": { - "title": "समतल करें", - "desc": "PDF से सभी इंटरैक्टिव तत्वों और फॉर्म को हटाएं" - }, - "repair": { - "title": "मरम्मत करें", - "desc": "खराब/टूटी हुई PDF को ठीक करने का प्रयास करें" - }, - "removeBlanks": { - "title": "खाली पृष्ठ हटाएं", - "desc": "दस्तावेज़ से खाली पृष्ठों का पता लगाएं और हटाएं" - }, - "removeAnnotations": { - "title": "टिप्पणियां हटाएं", - "desc": "PDF से सभी टिप्पणियां/एनोटेशन हटाएं" - }, - "compare": { - "title": "तुलना करें", - "desc": "2 PDF दस्तावेजों के बीच अंतर की तुलना करें और दिखाएं" - }, - "certSign": { - "title": "प्रमाणपत्र से हस्ताक्षर करें", - "desc": "प्रमाणपत्र/कुंजी (PEM/P12) से PDF पर हस्ताक्षर करें" - }, - "removeCertSign": { - "title": "प्रमाणपत्र हस्ताक्षर हटाएं", - "desc": "PDF से प्रमाणपत्र हस्ताक्षर हटाएं" - }, - "pageLayout": { - "title": "मल्टी-पेज लेआउट", - "desc": "PDF दस्तावेज के कई पृष्ठों को एक पृष्ठ में मर्ज करें" - }, - "scalePages": { - "title": "पृष्ठ आकार/स्केल समायोजित करें", - "desc": "पृष्ठ और/या उसकी सामग्री का आकार/स्केल बदलें।" - }, - "pipeline": { - "title": "पाइपलाइन", - "desc": "पाइपलाइन स्क्रिप्ट परिभाषित करके PDF पर कई कार्य करें" - }, - "add-page-numbers": { - "title": "पृष्ठ संख्या जोड़ें", - "desc": "दस्तावेज़ में एक निर्धारित स्थान पर पृष्ठ संख्या जोड़ें" - }, - "auto-rename": { - "title": "स्वतः PDF फ़ाइल का नाम बदलें", - "desc": "पाए गए हेडर के आधार पर PDF फ़ाइल का नाम स्वचालित रूप से बदलें" - }, - "adjust-contrast": { - "title": "रंग/कंट्रास्ट समायोजित करें", - "desc": "PDF का कंट्रास्ट, संतृप्ति और चमक समायोजित करें" - }, - "crop": { - "title": "PDF क्रॉप करें", - "desc": "आकार कम करने के लिए PDF को क्रॉप करें (टेक्स्ट बनाए रखें!)" - }, - "autoSplitPDF": { - "title": "स्वतः पृष्ठ विभाजित करें", - "desc": "भौतिक स्कैन किए गए पृष्ठ विभाजक QR कोड के साथ स्कैन की गई PDF को स्वतः विभाजित करें" - }, - "sanitizePdf": { - "title": "सैनिटाइज़", - "desc": "PDF फ़ाइलों से स्क्रिप्ट और अन्य तत्वों को हटाएं" - }, - "URLToPDF": { - "title": "URL/वेबसाइट से PDF", - "desc": "किसी भी http(s) URL को PDF में बदलें" - }, - "HTMLToPDF": { - "title": "HTML से PDF", - "desc": "किसी भी HTML फ़ाइल या zip को PDF में बदलें" - }, - "MarkdownToPDF": { - "title": "Markdown से PDF", - "desc": "किसी भी Markdown फ़ाइल को PDF में बदलें" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "PDF की सभी जानकारी प्राप्त करें", - "desc": "PDF से संभव सभी जानकारी प्राप्त करें" - }, - "extractPage": { - "title": "पृष्ठ निकालें", - "desc": "PDF से चयनित पृष्ठों को निकालें" - }, - "PdfToSinglePage": { - "title": "एक बड़ा पृष्ठ", - "desc": "सभी PDF पृष्ठों को एक बड़े एकल पृष्ठ में मर्ज करें" - }, - "showJS": { - "title": "जावास्क्रिप्ट दिखाएं", - "desc": "PDF में इंजेक्ट किए गए किसी भी जावास्क्रिप्ट को खोजें और दिखाएं" - }, - "autoRedact": { - "title": "स्वतः गोपनीयकरण", - "desc": "इनपुट टेक्स्ट के आधार पर PDF में टेक्स्ट को स्वतः गोपनीयकृत करें (काला करें)" - }, - "redact": { - "title": "मैनुअल गोपनीयकरण", - "desc": "चयनित टेक्स्ट, बनाई गई आकृतियों और/या चयनित पृष्ठों के आधार पर PDF को गोपनीयकृत करें" - }, - "tableExtraxt": { - "title": "PDF से CSV", - "desc": "PDF से तालिकाओं को निकालकर CSV में बदलें" - }, - "autoSizeSplitPDF": { - "title": "आकार/संख्या के आधार पर स्वतः विभाजित करें", - "desc": "एक PDF को आकार, पृष्ठ संख्या, या दस्तावेज़ संख्या के आधार पर कई दस्तावेज़ों में विभाजित करें" - }, - "overlay-pdfs": { - "title": "PDF ओवरले करें", - "desc": "PDF को दूसरी PDF के ऊपर ओवरले करें" - }, - "split-by-sections": { - "title": "खंडों द्वारा PDF विभाजित करें", - "desc": "PDF के प्रत्येक पृष्ठ को छोटे क्षैतिज और ऊर्ध्वाधर खंडों में विभाजित करें" - }, - "AddStampRequest": { - "title": "PDF में स्टैम्प जोड़ें", - "desc": "निर्धारित स्थानों पर टेक्स्ट या छवि स्टैम्प जोड़ें" - }, - "removeImagePdf": { - "title": "छवि हटाएं", - "desc": "फ़ाइल आकार कम करने के लिए PDF से छवि हटाएं" - }, - "splitPdfByChapters": { - "title": "अध्यायों द्वारा PDF विभाजित करें", - "desc": "PDF को उसकी अध्याय संरचना के आधार पर कई फ़ाइलों में विभाजित करें।" - }, - "validateSignature": { - "title": "PDF हस्ताक्षर सत्यापित करें", - "desc": "PDF दस्तावेजों में डिजिटल हस्ताक्षर और प्रमाणपत्रों को सत्यापित करें" - }, - "replaceColorPdf": { - "title": "रंग बदलें और उल्टा करें", - "desc": "PDF में टेक्स्ट और पृष्ठभूमि के लिए रंग बदलें और फ़ाइल आकार कम करने के लिए पूर्ण रंग को उल्टा करें" - } - }, - "viewPdf": { - "tags": "देखें,पढ़ें,टिप्पणी,टेक्स्ट,छवि", - "title": "View/Edit PDF", - "header": "PDF देखें" - }, - "multiTool": { - "tags": "मल्टी टूल,मल्टी ऑपरेशन,UI,क्लिक ड्रैग,फ्रंट एंड,क्लाइंट साइड,इंटरैक्टिव,इंटरैक्टेबल,मूव,डिलीट,माइग्रेट,डिवाइड", - "title": "PDF मल्टी टूल", - "header": "PDF मल्टी टूल", - "uploadPrompts": "फ़ाइल नाम", - "selectAll": "सभी चुनें", - "deselectAll": "सभी अचयनित करें", - "selectPages": "पृष्ठ चयन", - "selectedPages": "चयनित पृष्ठ", - "page": "पृष्ठ", - "deleteSelected": "चयनित हटाएं", - "downloadAll": "निर्यात करें", - "downloadSelected": "चयनित निर्यात करें", - "insertPageBreak": "पृष्ठ विराम डालें", - "addFile": "फ़ाइल जोड़ें", - "rotateLeft": "बाएं घुमाएं", - "rotateRight": "दाएं घुमाएं", - "split": "विभाजित करें", - "moveLeft": "बाएं ले जाएं", - "moveRight": "दाएं ले जाएं", - "delete": "हटाएं", - "dragDropMessage": "पृष्ठ चयनित", - "undo": "पूर्ववत करें", - "redo": "पुनः करें" - }, - "merge": { - "tags": "मर्ज,पेज ऑपरेशन्स,बैक एंड,सर्वर साइड", - "title": "मर्ज करें", - "header": "कई PDF मर्ज करें (2+)", - "sortByName": "नाम से क्रमबद्ध करें", - "sortByDate": "तिथि से क्रमबद्ध करें", - "removeCertSign": "मर्ज की गई फ़ाइल में डिजिटल हस्ताक्षर हटाएं?", - "submit": "मर्ज करें" - }, - "split": { - "tags": "पेज ऑपरेशन्स,डिवाइड,मल्टी पेज,कट,सर्वर साइड", - "title": "PDF विभाजित करें", - "header": "PDF विभाजित करें", - "desc": { - "1": "आपके द्वारा चुने गए नंबर वे पृष्ठ संख्याएं हैं जहां आप विभाजन करना चाहते हैं", - "2": "इसलिए 1,3,7-9 का चयन करने से 10 पृष्ठों वाले दस्तावेज़ को 6 अलग-अलग PDF में विभाजित कर देगा:", - "3": "दस्तावेज़ #1: पृष्ठ 1", - "4": "दस्तावेज़ #2: पृष्ठ 2 और 3", - "5": "दस्तावेज़ #3: पृष्ठ 4, 5, 6, 7", - "6": "दस्तावेज़ #4: पृष्ठ 8", - "7": "दस्तावेज़ #5: पृष्ठ 9", - "8": "दस्तावेज़ #6: पृष्ठ 10" - }, - "splitPages": "विभाजन करने के लिए पृष्ठ दर्ज करें:", - "submit": "विभाजित करें" - }, - "rotate": { - "tags": "सर्वर साइड", - "title": "PDF घुमाएं", - "header": "PDF घुमाएं", - "selectAngle": "घुमाने का कोण चुनें (90 डिग्री के गुणकों में):", - "submit": "घुमाएं" - }, - "imageToPdf": { - "tags": "रूपांतरण,img,jpg,चित्र,फोटो" - }, - "pdfToImage": { - "tags": "रूपांतरण,img,jpg,चित्र,फोटो", - "title": "PDF से छवि", - "header": "PDF से छवि", - "selectText": "छवि प्रारूप", - "singleOrMultiple": "पृष्ठ से छवि परिणाम प्रकार", - "single": "एकल बड़ी छवि", - "multi": "कई छवियां", - "colorType": "रंग प्रकार", - "color": "रंग", - "grey": "ग्रेस्केल", - "blackwhite": "काला और सफेद (डेटा खो सकता है!)", - "submit": "बदलें", - "info": "Python स्थापित नहीं है। WebP रूपांतरण के लिए आवश्यक है।", - "placeholder": "(जैसे 1,2,8 या 4,7,12-16 या 2n-1)" - }, - "pdfOrganiser": { - "tags": "डुप्लेक्स,सम,विषम,क्रमबद्ध करें,मूव", - "title": "पृष्ठ व्यवस्थापक", - "header": "PDF पृष्ठ व्यवस्थापक", - "submit": "पृष्ठ पुनर्व्यवस्थित करें", - "mode": { - "_value": "मोड", - "1": "कस्टम पृष्ठ क्रम", - "2": "उल्टा क्रम", - "3": "डुप्लेक्स क्रमबद्धन", - "4": "पुस्तिका क्रमबद्धन", - "5": "साइड स्टिच पुस्तिका क्रमबद्धन", - "6": "विषम-सम विभाजन", - "7": "प्रथम हटाएं", - "8": "अंतिम हटाएं", - "9": "प्रथम और अंतिम हटाएं", - "10": "विषम-सम मर्ज", - "11": "Duplicate all pages" - }, - "placeholder": "(जैसे 1,3,2 या 4-8,2,10-12 या 2n-1)" - }, - "addImage": { - "tags": "img,jpg,चित्र,फोटो", - "title": "छवि जोड़ें", - "header": "PDF में छवि जोड़ें", - "everyPage": "हर पृष्ठ?", - "upload": "छवि जोड़ें", - "submit": "छवि जोड़ें" - }, - "watermark": { - "tags": "टेक्स्ट,दोहराव,लेबल,स्वयं,कॉपीराइट,ट्रेडमार्क,img,jpg,चित्र,फोटो", - "title": "वॉटरमार्क जोड़ें", - "header": "वॉटरमार्क जोड़ें", - "customColor": "कस्टम टेक्स्ट रंग", - "selectText": { - "1": "वॉटरमार्क जोड़ने के लिए PDF चुनें:", - "2": "वॉटरमार्क टेक्स्ट:", - "3": "फ़ॉन्ट आकार:", - "4": "घुमाव (0-360):", - "5": "चौड़ाई स्पेसर (प्रत्येक वॉटरमार्क के बीच क्षैतिज अंतर):", - "6": "ऊंचाई स्पेसर (प्रत्येक वॉटरमार्क के बीच ऊर्ध्वाधर अंतर):", - "7": "अपारदर्शिता (0% - 100%):", - "8": "वॉटरमार्क प्रकार:", - "9": "वॉटरमार्क छवि:", - "10": "PDF को PDF-छवि में बदलें" - }, - "submit": "वॉटरमार्क जोड़ें", - "type": { - "1": "टेक्स्ट", - "2": "छवि" - } - }, - "permissions": { - "tags": "पढ़ें,लिखें,संपादित करें,प्रिंट", - "title": "अनुमतियां बदलें", - "header": "अनुमतियां बदलें", - "warning": "चेतावनी: इन अनुमतियों को अपरिवर्तनीय बनाने के लिए, इन्हें पासवर्ड जोड़ने वाले पृष्ठ के माध्यम से पासवर्ड के साथ सेट करने की सिफारिश की जाती है", - "selectText": { - "1": "अनुमतियां बदलने के लिए PDF चुनें", - "2": "सेट करने के लिए अनुमतियां", - "3": "दस्तावेज़ असेंबली को रोकें", - "4": "सामग्री निष्कर्षण को रोकें", - "5": "पहुंच योग्यता के लिए निष्कर्षण को रोकें", - "6": "फॉर्म भरने को रोकें", - "7": "संशोधन को रोकें", - "8": "टिप्पणी संशोधन को रोकें", - "9": "प्रिंटिंग को रोकें", - "10": "विभिन्न प्रारूपों में प्रिंटिंग को रोकें" - }, - "submit": "बदलें" - }, - "removePages": { - "tags": "पृष्ठ निकालें,पृष्ठ हटाएं" - }, - "addPassword": { - "tags": "सुरक्षित,सुरक्षा", - "title": "पासवर्ड जोड़ें", - "header": "पासवर्ड जोड़ें (एन्क्रिप्ट)", - "selectText": { - "1": "एन्क्रिप्ट करने के लिए PDF चुनें", - "2": "उपयोगकर्ता पासवर्ड", - "3": "एन्क्रिप्शन कुंजी लंबाई", - "4": "उच्च मान अधिक मजबूत हैं, लेकिन निम्न मान बेहतर संगतता रखते हैं।", - "5": "सेट करने के लिए अनुमतियां (स्वामी पासवर्ड के साथ उपयोग करने की सिफारिश की जाती है)", - "6": "दस्तावेज़ असेंबली को रोकें", - "7": "सामग्री निष्कर्षण को रोकें", - "8": "पहुंच योग्यता के लिए निष्कर्षण को रोकें", - "9": "फॉर्म भरने को रोकें", - "10": "संशोधन को रोकें", - "11": "टिप्पणी संशोधन को रोकें", - "12": "प्रिंटिंग को रोकें", - "13": "विभिन्न प्रारूपों में प्रिंटिंग को रोकें", - "14": "स्वामी पासवर्ड", - "15": "एक बार खुलने के बाद दस्तावेज़ के साथ क्या किया जा सकता है को प्रतिबंधित करता है (सभी पाठकों द्वारा समर्थित नहीं)", - "16": "दस्तावेज़ को खोलने को प्रतिबंधित करता है" - }, - "submit": "एन्क्रिप्ट करें" - }, - "removePassword": { - "tags": "सुरक्षित,डिक्रिप्ट,सुरक्षा,अनपासवर्ड,पासवर्ड हटाएं", - "title": "पासवर्ड हटाएं", - "header": "पासवर्ड हटाएं (डिक्रिप्ट)", - "selectText": { - "1": "डिक्रिप्ट करने के लिए PDF चुनें", - "2": "पासवर्ड" - }, - "submit": "हटाएं" - }, - "compressPdfs": { - "tags": "कम्प्रेस,छोटा,छोटा" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "शीर्षक,लेखक,तिथि,निर्माण,समय,प्रकाशक,निर्माता,आंकड़े", - "title": "शीर्षक:", - "header": "मेटाडेटा बदलें", - "selectText": { - "1": "कृपया वे चर संपादित करें जिन्हें आप बदलना चाहते हैं", - "2": "सभी मेटाडेटा हटाएं", - "3": "कस्टम मेटाडेटा दिखाएं:", - "4": "अन्य मेटाडेटा:", - "5": "कस्टम मेटाडेटा प्रविष्टि जोड़ें" - }, - "author": "लेखक:", - "creationDate": "निर्माण तिथि (yyyy/MM/dd HH:mm:ss):", - "creator": "निर्माता:", - "keywords": "कीवर्ड्स:", - "modDate": "संशोधन तिथि (yyyy/MM/dd HH:mm:ss):", - "producer": "प्रोड्यूसर:", - "subject": "विषय:", - "trapped": "ट्रैप्ड:", - "submit": "बदलें" - }, - "fileToPDF": { - "tags": "रूपांतरण,प्रारूप,दस्तावेज,चित्र,स्लाइड,टेक्स्ट,रूपांतरण,कार्यालय,डॉक्स,वर्ड,एक्सेल,पावरपॉइंट", - "title": "फ़ाइल से PDF", - "header": "किसी भी फ़ाइल को PDF में बदलें", - "credit": "यह सेवा फ़ाइल रूपांतरण के लिए LibreOffice और Unoconv का उपयोग करती है।", - "supportedFileTypesInfo": "समर्थित फ़ाइल प्रकार", - "supportedFileTypes": "समर्थित फ़ाइल प्रकारों में निम्नलिखित शामिल होने चाहिए, हालांकि समर्थित प्रारूपों की पूर्ण अद्यतन सूची के लिए कृपया LibreOffice दस्तावेज़ीकरण देखें", - "submit": "PDF में बदलें" - }, - "ocr": { - "tags": "पहचान,टेक्स्ट,छवि,स्कैन,पढ़ें,पहचानें,पहचान,संपादन योग्य", - "title": "OCR / स्कैन साफ करें", - "header": "स्कैन साफ करें / OCR (ऑप्टिकल कैरेक्टर रिकग्निशन)", - "selectText": { - "1": "PDF में पता लगाए जाने वाली भाषाएं चुनें (जो वर्तमान में पता लगाई गई हैं उन्हें सूचीबद्ध किया गया है):", - "2": "OCR किए गए PDF के साथ OCR टेक्स्ट युक्त टेक्स्ट फ़ाइल बनाएं", - "3": "टेढ़े कोण पर स्कैन किए गए पृष्ठों को उन्हें वापस स्थान पर घुमाकर सही करें", - "4": "पृष्ठ को साफ करें ताकि OCR पृष्ठभूमि शोर में टेक्स्ट ढूंढने की संभावना कम हो। (कोई आउटपुट परिवर्तन नहीं)", - "5": "पृष्ठ को साफ करें ताकि OCR पृष्ठभूमि शोर में टेक्स्ट ढूंढने की संभावना कम हो, आउटपुट में सफाई बनाए रखें।", - "6": "इंटरैक्टिव टेक्स्ट वाले पृष्ठों को छोड़ दें, केवल छवि वाले पृष्ठों पर OCR करें", - "7": "बल OCR, प्रत्येक पृष्ठ पर OCR करेगा सभी मूल टेक्स्ट तत्वों को हटा देगा", - "8": "सामान्य (यदि PDF में टेक्स्ट है तो त्रुटि होगी)", - "9": "अतिरिक्त सेटिंग्स", - "10": "OCR मोड", - "11": "OCR के बाद छवियां हटाएं (सभी छवियां हटाएं, केवल रूपांतरण चरण का हिस्सा होने पर उपयोगी)", - "12": "रेंडर प्रकार (उन्नत)" - }, - "help": "कृपया अन्य भाषाओं के लिए उपयोग और/या डॉकर में उपयोग न करने के बारे में यह दस्तावेज़ीकरण पढ़ें", - "credit": "यह सेवा OCR के लिए qpdf और Tesseract का उपयोग करती है।", - "submit": "OCR के साथ PDF प्रोसेस करें" - }, - "extractImages": { - "tags": "चित्र,फोटो,सहेजें,संग्रह,ज़िप,कैप्चर,ग्रैब", - "title": "छवियां निकालें", - "header": "छवियां निकालें", - "selectText": "निकाली गई छवियों को बदलने के लिए छवि प्रारूप चुनें", - "allowDuplicates": "डुप्लिकेट छवियां सहेजें", - "submit": "निकालें" - }, - "pdfToPDFA": { - "tags": "संग्रह,लंबी अवधि,मानक,रूपांतरण,भंडारण,संरक्षण", - "title": "PDF से PDF/A", - "header": "PDF से PDF/A", - "credit": "यह सेवा PDF/A रूपांतरण के लिए libreoffice का उपयोग करती है", - "submit": "बदलें", - "tip": "वर्तमान में एक बार में कई इनपुट के लिए काम नहीं करता", - "outputFormat": "आउटपुट प्रारूप", - "pdfWithDigitalSignature": "PDF में एक डिजिटल हस्ताक्षर है। यह अगले चरण में हटा दिया जाएगा।" - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,रूपांतरण,प्रारूप,रूपांतरण,कार्यालय,माइक्रोसॉफ्ट,docfile", - "title": "PDF से Word", - "header": "PDF से Word", - "selectText": { - "1": "आउटपुट फ़ाइल प्रारूप" - }, - "credit": "यह सेवा फ़ाइल रूपांतरण के लिए LibreOffice का उपयोग करती है।", - "submit": "बदलें" - }, - "PDFToPresentation": { - "tags": "स्लाइड्स,शो,कार्यालय,माइक्रोसॉफ्ट", - "title": "PDF से प्रस्तुति", - "header": "PDF से प्रस्तुति", - "selectText": { - "1": "आउटपुट फ़ाइल प्रारूप" - }, - "credit": "यह सेवा फ़ाइल रूपांतरण के लिए LibreOffice का उपयोग करती है।", - "submit": "बदलें" - }, - "PDFToText": { - "tags": "रिच फॉर्मेट,रिच टेक्स्ट फॉर्मेट,रिच टेक्स्ट फॉर्मेट", - "title": "PDF से RTF (टेक्स्ट)", - "header": "PDF से RTF (टेक्स्ट)", - "selectText": { - "1": "आउटपुट फ़ाइल प्रारूप" - }, - "credit": "यह सेवा फ़ाइल रूपांतरण के लिए LibreOffice का उपयोग करती है।", - "submit": "बदलें" - }, - "PDFToHTML": { - "tags": "वेब सामग्री,ब्राउज़र अनुकूल", - "title": "PDF से HTML", - "header": "PDF से HTML", - "credit": "यह सेवा फ़ाइल रूपांतरण के लिए pdftohtml का उपयोग करती है।", - "submit": "बदलें" - }, - "PDFToXML": { - "tags": "डेटा-निष्कर्षण,संरचित-सामग्री,अंतर-संचालन,रूपांतरण,बदलें", - "title": "PDF से XML", - "header": "PDF से XML", - "credit": "यह सेवा फ़ाइल रूपांतरण के लिए LibreOffice का उपयोग करती है।", - "submit": "बदलें" - }, - "ScannerImageSplit": { - "tags": "अलग करें,स्वत:-पहचान,स्कैन-खंड,व्यवस्थित करें", - "selectText": { - "1": "कोण सीमा:", - "2": "छवि को घुमाने के लिए आवश्यक न्यूनतम सापेक्ष कोण निर्धारित करता है (डिफ़ॉल्ट: 10)।", - "3": "टॉलरेंस:", - "4": "अनुमानित पृष्ठभूमि रंग के आसपास रंग विविधता की सीमा निर्धारित करता है (डिफ़ॉल्ट: 30)।", - "5": "न्यूनतम क्षेत्र:", - "6": "एक फोटो के लिए न्यूनतम क्षेत्र सीमा निर्धारित करता है (डिफ़ॉल्ट: 10000)।", - "7": "न्यूनतम कंटूर क्षेत्र:", - "8": "एक फोटो के लिए न्यूनतम कंटूर क्षेत्र सीमा निर्धारित करता है", - "9": "बॉर्डर आकार:", - "10": "आउटपुट में श्वेत बॉर्डर को रोकने के लिए जोड़े और हटाए गए बॉर्डर का आकार निर्धारित करता है (डिफ़ॉल्ट: 1)।" - }, - "info": "Python स्थापित नहीं है। चलाने के लिए आवश्यक है।" - }, - "sign": { - "tags": "अधिकृत,आद्याक्षर,चित्रित-हस्ताक्षर,टेक्स्ट-हस्ताक्षर,छवि-हस्ताक्षर", - "title": "हस्ताक्षर", - "header": "PDF पर हस्ताक्षर करें", - "upload": "छवि अपलोड करें", - "draw": "हस्ताक्षर बनाएं", - "text": "टेक्स्ट इनपुट", - "clear": "साफ़ करें", - "add": "जोड़ें", - "saved": "सहेजे गए हस्ताक्षर", - "save": "हस्ताक्षर सहेजें", - "personalSigs": "व्यक्तिगत हस्ताक्षर", - "sharedSigs": "साझा किए गए हस्ताक्षर", - "noSavedSigs": "कोई सहेजा गया हस्ताक्षर नहीं मिला", - "addToAll": "सभी पृष्ठों में जोड़ें", - "delete": "हटाएं", - "first": "पहला पृष्ठ", - "last": "अंतिम पृष्ठ", - "next": "अगला पृष्ठ", - "previous": "पिछला पृष्ठ", - "maintainRatio": "आनुपातिक अनुपात बनाए रखें टॉगल करें", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "स्थिर,निष्क्रिय,गैर-इंटरैक्टिव,सरलीकृत", - "title": "समतल करें", - "header": "PDF समतल करें", - "flattenOnlyForms": "केवल फ़ॉर्म समतल करें", - "submit": "समतल करें" - }, - "repair": { - "tags": "ठीक करें,पुनर्स्थापित करें,सुधार,पुनर्प्राप्त करें", - "title": "मरम्मत", - "header": "PDF मरम्मत", - "submit": "मरम्मत" - }, - "removeBlanks": { - "tags": "साफ करें,सरलीकृत करें,गैर-सामग्री,व्यवस्थित करें", - "title": "खाली पृष्ठ हटाएं", - "header": "खाली पृष्ठ हटाएं", - "threshold": "पिक्सेल श्वेतता सीमा:", - "thresholdDesc": "एक श्वेत पिक्सेल को 'श्वेत' वर्गीकृत करने के लिए कितना श्वेत होना चाहिए यह निर्धारित करने के लिए सीमा। 0 = काला, 255 पूर्ण श्वेत।", - "whitePercent": "श्वेत प्रतिशत (%):", - "whitePercentDesc": "हटाए जाने के लिए पृष्ठ का कितना प्रतिशत 'श्वेत' पिक्सेल होना चाहिए", - "submit": "खाली हटाएं" - }, - "removeAnnotations": { - "tags": "टिप्पणियां,हाइलाइट,नोट्स,मार्कअप,हटाएं", - "title": "टिप्पणियां हटाएं", - "header": "टिप्पणियां हटाएं", - "submit": "हटाएं" - }, - "compare": { - "tags": "अंतर,तुलना,परिवर्तन,विश्लेषण", - "title": "तुलना करें", - "header": "PDF तुलना करें", - "highlightColor": { - "1": "हाइलाइट रंग 1:", - "2": "हाइलाइट रंग 2:" - }, - "document": { - "1": "दस्तावेज़ 1", - "2": "दस्तावेज़ 2" - }, - "submit": "तुलना करें", - "complex": { - "message": "प्रदान किए गए दस्तावेजों में से एक या दोनों बड़े फ़ाइल हैं, तुलना की सटीकता कम हो सकती है" - }, - "large": { - "file": { - "message": "प्रदान किए गए दस्तावेजों में से एक या दोनों प्रक्रिया करने के लिए बहुत बड़े हैं" - } - }, - "no": { - "text": { - "message": "चयनित PDF में से एक या दोनों में कोई टेक्स्ट सामग्री नहीं है। कृपया तुलना के लिए टेक्स्ट वाले PDF चुनें।" - } - } - }, - "certSign": { - "tags": "प्रमाणीकरण,PEM,P12,आधिकारिक,एन्क्रिप्ट", - "title": "प्रमाणपत्र हस्ताक्षर", - "header": "प्रमाणपत्र से हस्ताक्षर करें (कार्य प्रगति पर है)", - "selectPDF": "हस्ताक्षर के लिए PDF फ़ाइल चुनें:", - "jksNote": "नोट: यदि आपके प्रमाणपत्र का प्रकार नीचे सूचीबद्ध नहीं है, तो कृपया keytool कमांड लाइन टूल का उपयोग करके इसे Java Keystore (.jks) फ़ाइल में बदलें। फिर नीचे .jks फ़ाइल विकल्प चुनें।", - "selectKey": "अपनी निजी कुंजी फ़ाइल चुनें (PKCS#8 प्रारूप, .pem या .der हो सकती है):", - "selectCert": "अपना प्रमाणपत्र फ़ाइल चुनें (X.509 प्रारूप, .pem या .der हो सकती है):", - "selectP12": "अपनी PKCS#12 कीस्टोर फ़ाइल चुनें (.p12 या .pfx) (वैकल्पिक, यदि प्रदान की गई है, तो इसमें आपकी निजी कुंजी और प्रमाणपत्र होना चाहिए):", - "selectJKS": "अपनी Java Keystore फ़ाइल (.jks या .keystore) चुनें:", - "certType": "प्रमाणपत्र प्रकार", - "password": "अपनी कीस्टोर या निजी कुंजी पासवर्ड दर्ज करें (यदि कोई हो):", - "showSig": "हस्ताक्षर दिखाएं", - "reason": "कारण", - "location": "स्थान", - "name": "नाम", - "showLogo": "लोगो दिखाएं", - "submit": "PDF पर हस्ताक्षर करें" - }, - "removeCertSign": { - "tags": "प्रमाणीकरण,PEM,P12,आधिकारिक,डिक्रिप्ट", - "title": "प्रमाणपत्र हस्ताक्षर हटाएं", - "header": "PDF से डिजिटल प्रमाणपत्र हटाएं", - "selectPDF": "PDF फ़ाइल चुनें:", - "submit": "हस्ताक्षर हटाएं" - }, - "pageLayout": { - "tags": "मर्ज,संयोजित,एकल-दृश्य,व्यवस्थित", - "title": "मल्टी पेज लेआउट", - "header": "मल्टी पेज लेआउट", - "pagesPerSheet": "प्रति शीट पृष्ठ:", - "addBorder": "बॉर्डर जोड़ें", - "submit": "जमा करें" - }, - "scalePages": { - "tags": "आकार बदलें,संशोधित करें,आयाम,अनुकूल करें", - "title": "पृष्ठ-स्केल समायोजित करें", - "header": "पृष्ठ-स्केल समायोजित करें", - "pageSize": "दस्तावेज़ के एक पृष्ठ का आकार।", - "keepPageSize": "मूल आकार", - "scaleFactor": "एक पृष्ठ का ज़ूम स्तर (क्रॉप)।", - "submit": "जमा करें" - }, - "add-page-numbers": { - "tags": "पृष्ठांकन,लेबल,व्यवस्थित,अनुक्रमणिका" - }, - "auto-rename": { - "tags": "स्वतः-पहचान,हेडर-आधारित,व्यवस्थित,पुनर्नामांकन", - "title": "स्वतः नाम बदलें", - "header": "स्वतः PDF नाम बदलें", - "submit": "स्वतः नाम बदलें" - }, - "adjust-contrast": { - "tags": "रंग-सुधार,ट्यून,संशोधित,बढ़ाएं" - }, - "crop": { - "tags": "ट्रिम,सिकोड़ें,संपादित करें,आकार", - "title": "क्रॉप करें", - "header": "PDF क्रॉप करें", - "submit": "जमा करें" - }, - "autoSplitPDF": { - "tags": "QR-आधारित,अलग करें,स्कैन-खंड,व्यवस्थित करें", - "title": "स्वतः PDF विभाजित करें", - "header": "स्वतः PDF विभाजित करें", - "description": "प्रिंट करें, डालें, स्कैन करें, अपलोड करें, और हमें आपके दस्तावेजों को स्वचालित रूप से अलग करने दें। कोई मैनुअल क्रमबद्ध करने की आवश्यकता नहीं।", - "selectText": { - "1": "नीचे से कुछ विभाजक शीट्स प्रिंट करें (श्याम और श्वेत ठीक है)।", - "2": "अपने सभी दस्तावेजों को एक साथ स्कैन करें, उनके बीच विभाजक शीट डालें।", - "3": "एक बड़ी स्कैन की गई PDF फ़ाइल अपलोड करें और Stirling PDF को बाकी काम करने दें।", - "4": "विभाजक पृष्ठ स्वचालित रूप से पहचाने जाते हैं और हटा दिए जाते हैं, एक साफ अंतिम दस्तावेज़ सुनिश्चित करते हैं।" - }, - "formPrompt": "Stirling-PDF पृष्ठ विभाजक वाली PDF जमा करें:", - "duplexMode": "डुप्लेक्स मोड (सामने और पीछे स्कैनिंग)", - "dividerDownload2": "'स्वतः विभाजक (निर्देशों के साथ).pdf' डाउनलोड करें", - "submit": "जमा करें" - }, - "sanitizePdf": { - "tags": "साफ,सुरक्षित,सुरक्षा,खतरे-हटाएं" - }, - "URLToPDF": { - "tags": "वेब-कैप्चर,पेज-सहेजें,वेब-से-दस्तावेज़,संग्रह", - "title": "URL से PDF", - "header": "URL से PDF", - "submit": "बदलें", - "credit": "WeasyPrint का उपयोग करता है" - }, - "HTMLToPDF": { - "tags": "मार्कअप,वेब-सामग्री,रूपांतरण,बदलें", - "title": "HTML से PDF", - "header": "HTML से PDF", - "help": "HTML फ़ाइलें और आवश्यक html/css/images आदि वाले ZIP स्वीकार करता है", - "submit": "बदलें", - "credit": "WeasyPrint का उपयोग करता है", - "zoom": "वेबसाइट प्रदर्शन के लिए ज़ूम स्तर।", - "pageWidth": "पृष्ठ की चौड़ाई सेंटीमीटर में। (डिफ़ॉल्ट के लिए खाली)", - "pageHeight": "पृष्ठ की ऊंचाई सेंटीमीटर में। (डिफ़ॉल्ट के लिए खाली)", - "marginTop": "पृष्ठ का शीर्ष मार्जिन मिलीमीटर में। (डिफ़ॉल्ट के लिए खाली)", - "marginBottom": "पृष्ठ का निचला मार्जिन मिलीमीटर में। (डिफ़ॉल्ट के लिए खाली)", - "marginLeft": "पृष्ठ का बायां मार्जिन मिलीमीटर में। (डिफ़ॉल्ट के लिए खाली)", - "marginRight": "पृष्ठ का दायां मार्जिन मिलीमीटर में। (डिफ़ॉल्ट के लिए खाली)", - "printBackground": "वेबसाइट की पृष्ठभूमि रेंडर करें।", - "defaultHeader": "डिफ़ॉल्ट हेडर सक्षम करें (नाम और पृष्ठ संख्या)", - "cssMediaType": "पृष्ठ का CSS मीडिया प्रकार बदलें।", - "none": "कोई नहीं", - "print": "प्रिंट", - "screen": "स्क्रीन" - }, - "MarkdownToPDF": { - "tags": "मार्कअप,वेब-सामग्री,रूपांतरण,बदलें", - "title": "Markdown से PDF", - "header": "Markdown से PDF", - "submit": "बदलें", - "help": "कार्य प्रगति पर है", - "credit": "WeasyPrint का उपयोग करता है" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "जानकारी,डेटा,आँकड़े,सांख्यिकी", - "title": "PDF की जानकारी प्राप्त करें", - "header": "PDF की जानकारी प्राप्त करें", - "submit": "जानकारी प्राप्त करें", - "downloadJson": "JSON डाउनलोड करें" - }, - "extractPage": { - "tags": "निकालें" - }, - "PdfToSinglePage": { - "tags": "एकल पृष्ठ" - }, - "showJS": { - "tags": "JS", - "title": "जावास्क्रिप्ट दिखाएं", - "header": "जावास्क्रिप्ट दिखाएं", - "downloadJS": "जावास्क्रिप्ट डाउनलोड करें", - "submit": "दिखाएं" - }, - "autoRedact": { - "tags": "गोपनीयकरण,छिपाएं,काला करें,काला,मार्कर,छिपा हुआ", - "title": "स्वतः गोपनीयकरण", - "header": "स्वतः गोपनीयकरण", - "colorLabel": "रंग", - "textsToRedactLabel": "गोपनीयकृत करने के लिए टेक्स्ट (लाइन-अलग)", - "textsToRedactPlaceholder": "उदाहरण \\nगोपनीय \\nटॉप-सीक्रेट", - "useRegexLabel": "रेगेक्स का उपयोग करें", - "wholeWordSearchLabel": "पूर्ण शब्द खोज", - "customPaddingLabel": "कस्टम अतिरिक्त पैडिंग", - "convertPDFToImageLabel": "PDF को PDF-छवि में बदलें (बॉक्स के पीछे के टेक्स्ट को हटाने के लिए उपयोग किया जाता है)", - "submitButton": "जमा करें" - }, - "redact": { - "tags": "गोपनीयकरण,छिपाएं,काला करें,काला,मार्कर,छिपा हुआ,मैनुअल", - "title": "मैनुअल गोपनीयकरण", - "header": "मैनुअल गोपनीयकरण", - "submit": "गोपनीयकृत करें", - "textBasedRedaction": "टेक्स्ट आधारित गोपनीयकरण", - "pageBasedRedaction": "पृष्ठ-आधारित गोपनीयकरण", - "convertPDFToImageLabel": "PDF को PDF-छवि में बदलें (बॉक्स के पीछे का टेक्स्ट हटाने के लिए उपयोग किया जाता है)", - "pageRedactionNumbers": { - "title": "पृष्ठ", - "placeholder": "(उदाहरण 1,2,8 या 4,7,12-16 या 2n-1)" - }, - "redactionColor": { - "title": "गोपनीयकरण रंग" - }, - "export": "निर्यात करें", - "upload": "अपलोड करें", - "boxRedaction": "बॉक्स ड्रॉ गोपनीयकरण", - "zoom": "ज़ूम", - "zoomIn": "ज़ूम इन करें", - "zoomOut": "ज़ूम आउट करें", - "nextPage": "अगला पृष्ठ", - "previousPage": "पिछला पृष्ठ", - "toggleSidebar": "साइडबार टॉगल करें", - "showThumbnails": "थंबनेल दिखाएं", - "showDocumentOutline": "दस्तावेज़ आउटलाइन दिखाएं (सभी आइटम विस्तृत/संक्षिप्त करने के लिए डबल-क्लिक करें)", - "showAttatchments": "अटैचमेंट दिखाएं", - "showLayers": "लेयर्स दिखाएं (सभी लेयर्स को डिफ़ॉल्ट स्थिति में रीसेट करने के लिए डबल-क्लिक करें)", - "colourPicker": "रंग चयनकर्ता", - "findCurrentOutlineItem": "वर्तमान आउटलाइन आइटम खोजें", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,तालिका निष्कर्षण,निकालें,बदलें" - }, - "autoSizeSplitPDF": { - "tags": "pdf,विभाजन,दस्तावेज़,व्यवस्था" - }, - "overlay-pdfs": { - "tags": "ओवरले", - "header": "PDF फ़ाइलें ओवरले करें", - "baseFile": { - "label": "बेस PDF फ़ाइल चुनें" - }, - "overlayFiles": { - "label": "ओवरले PDF फ़ाइलें चुनें" - }, - "mode": { - "label": "ओवरले मोड चुनें", - "sequential": "क्रमिक ओवरले", - "interleaved": "इंटरलीव्ड ओवरले", - "fixedRepeat": "निश्चित दोहराव ओवरले" - }, - "counts": { - "label": "ओवरले गिनती (निश्चित दोहराव मोड के लिए)", - "placeholder": "अल्पविराम से अलग गिनती दर्ज करें (जैसे 2,3,1)" - }, - "position": { - "label": "ओवरले स्थिति चुनें", - "foreground": "अग्रभूमि", - "background": "पृष्ठभूमि" - }, - "submit": "जमा करें" - }, - "split-by-sections": { - "tags": "खंड विभाजन, विभाजित करें, अनुकूलित", - "title": "खंडों द्वारा PDF विभाजित करें", - "header": "PDF को खंडों में विभाजित करें", - "horizontal": { - "label": "क्षैतिज विभाजन", - "placeholder": "क्षैतिज विभाजनों की संख्या दर्ज करें" - }, - "vertical": { - "label": "ऊर्ध्वाधर विभाजन", - "placeholder": "ऊर्ध्वाधर विभाजनों की संख्या दर्ज करें" - }, - "submit": "PDF विभाजित करें", - "merge": "एक PDF में मर्ज करें" - }, - "AddStampRequest": { - "tags": "स्टैम्प, छवि जोड़ें, केंद्र छवि, वॉटरमार्क, PDF, एम्बेड, अनुकूलित", - "header": "PDF स्टैम्प करें", - "title": "PDF स्टैम्प करें", - "stampType": "स्टैम्प प्रकार", - "stampText": "स्टैम्प टेक्स्ट", - "stampImage": "स्टैम्प छवि", - "alphabet": "वर्णमाला", - "fontSize": "फ़ॉन्ट/छवि आकार", - "rotation": "घुमाव", - "opacity": "अपारदर्शिता", - "position": "स्थिति", - "overrideX": "X निर्देशांक ओवरराइड करें", - "overrideY": "Y निर्देशांक ओवरराइड करें", - "customMargin": "कस्टम मार्जिन", - "customColor": "कस्टम टेक्स्ट रंग", - "submit": "जमा करें" - }, - "removeImagePdf": { - "tags": "छवि हटाएं,पृष्ठ कार्य,बैक एंड,सर्वर साइड" - }, - "splitPdfByChapters": { - "tags": "विभाजन,अध्याय,बुकमार्क,व्यवस्थित करें" - }, - "validateSignature": { - "tags": "हस्ताक्षर,सत्यापित,मान्य,pdf,प्रमाणपत्र,डिजिटल हस्ताक्षर,हस्ताक्षर सत्यापित करें,प्रमाणपत्र सत्यापित करें", - "title": "PDF हस्ताक्षर सत्यापित करें", - "header": "डिजिटल हस्ताक्षर सत्यापित करें", - "selectPDF": "हस्ताक्षरित PDF फ़ाइल चुनें", - "submit": "हस्ताक्षर सत्यापित करें", - "results": "सत्यापन परिणाम", - "status": { - "_value": "स्थिति", - "valid": "मान्य", - "invalid": "अमान्य" - }, - "signer": "हस्ताक्षरकर्ता", - "date": "तिथि", - "reason": "कारण", - "location": "स्थान", - "noSignatures": "इस दस्तावेज़ में कोई डिजिटल हस्ताक्षर नहीं मिला", - "chain": { - "invalid": "प्रमाणपत्र श्रृंखला सत्यापन विफल - हस्ताक्षरकर्ता की पहचान सत्यापित नहीं कर सकते" - }, - "trust": { - "invalid": "प्रमाणपत्र ट्रस्ट स्टोर में नहीं है - स्रोत सत्यापित नहीं किया जा सकता" - }, - "cert": { - "expired": "प्रमाणपत्र समाप्त हो गया है", - "revoked": "प्रमाणपत्र रद्द कर दिया गया है", - "info": "प्रमाणपत्र विवरण", - "issuer": "जारीकर्ता", - "subject": "विषय", - "serialNumber": "क्रम संख्या", - "validFrom": "से मान्य", - "validUntil": "तक मान्य", - "algorithm": "एल्गोरिथ्म", - "keySize": "कुंजी आकार", - "version": "संस्करण", - "keyUsage": "कुंजी उपयोग", - "selfSigned": "स्व-हस्ताक्षरित", - "bits": "बिट्स" - }, - "signature": { - "info": "हस्ताक्षर जानकारी", - "_value": "हस्ताक्षर", - "mathValid": "हस्ताक्षर गणितीय रूप से मान्य है लेकिन:" - }, - "selectCustomCert": "कस्टम प्रमाणपत्र फ़ाइल X.509 (वैकल्पिक)" - }, - "replace-color": { - "title": "रंग बदलें-उल्टा करें", - "header": "रंग बदलें-उल्टा करें PDF", - "selectText": { - "1": "रंग बदलें या उल्टा करें विकल्प", - "2": "डिफ़ॉल्ट (डिफ़ॉल्ट उच्च कंट्रास्ट रंग)", - "3": "कस्टम (अनुकूलित रंग)", - "4": "पूर्ण-उल्टा (सभी रंगों को उल्टा करें)", - "5": "उच्च कंट्रास्ट रंग विकल्प", - "6": "काली पृष्ठभूमि पर सफेद टेक्स्ट", - "7": "सफेद पृष्ठभूमि पर काला टेक्स्ट", - "8": "काली पृष्ठभूमि पर पीला टेक्स्ट", - "9": "काली पृष्ठभूमि पर हरा टेक्स्ट", - "10": "टेक्स्ट रंग चुनें", - "11": "पृष्ठभूमि रंग चुनें" - }, - "submit": "बदलें" - }, - "replaceColorPdf": { - "tags": "रंग बदलें,पृष्ठ कार्य,बैक एंड,सर्वर साइड" - }, - "login": { - "title": "साइन इन करें", - "header": "साइन इन करें", - "signin": "साइन इन करें", - "rememberme": "मुझे याद रखें", - "invalid": "अमान्य उपयोगकर्ता नाम या पासवर्ड।", - "locked": "आपका खाता लॉक कर दिया गया है।", - "signinTitle": "कृपया साइन इन करें", - "ssoSignIn": "सिंगल साइन-ऑन के माध्यम से लॉगिन करें", - "oAuth2AutoCreateDisabled": "OAUTH2 स्वतः उपयोगकर्ता निर्माण अक्षम है", - "oAuth2AdminBlockedUser": "गैर-पंजीकृत उपयोगकर्ताओं का पंजीकरण या लॉगिन वर्तमान में अवरुद्ध है। कृपया व्यवस्थापक से संपर्क करें।", - "oauth2RequestNotFound": "प्राधिकरण अनुरोध नहीं मिला", - "oauth2InvalidUserInfoResponse": "अमान्य उपयोगकर्ता जानकारी प्रतिक्रिया", - "oauth2invalidRequest": "अमान्य अनुरोध", - "oauth2AccessDenied": "पहुंच अस्वीकृत", - "oauth2InvalidTokenResponse": "अमान्य टोकन प्रतिक्रिया", - "oauth2InvalidIdToken": "अमान्य Id टोकन", - "relyingPartyRegistrationNotFound": "कोई निर्भर पार्टी पंजीकरण नहीं मिला", - "userIsDisabled": "उपयोगकर्ता निष्क्रिय है, वर्तमान में इस उपयोगकर्ता नाम से लॉगिन अवरुद्ध है। कृपया व्यवस्थापक से संपर्क करें।", - "alreadyLoggedIn": "आप पहले से ही", - "alreadyLoggedIn2": "उपकरणों में लॉग इन हैं। कृपया उपकरणों से लॉग आउट करें और पुनः प्रयास करें।", - "toManySessions": "आपके बहुत सारे सक्रिय सत्र हैं", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF को एकल पृष्ठ में", - "header": "PDF को एकल पृष्ठ में", - "submit": "एकल पृष्ठ में बदलें" - }, - "pageExtracter": { - "title": "पृष्ठ निकालें", - "header": "पृष्ठ निकालें", - "submit": "निकालें", - "placeholder": "(उदाहरण 1,2,8 या 4,7,12-16 या 2n-1)" - }, - "sanitizePDF": { - "title": "PDF सैनिटाइज़ करें", - "header": "PDF फ़ाइल सैनिटाइज़ करें", - "selectText": { - "1": "जावास्क्रिप्ट क्रियाएं हटाएं", - "2": "एम्बेडेड फ़ाइलें हटाएं", - "3": "Remove XMP metadata", - "4": "लिंक हटाएं", - "5": "फ़ॉन्ट्स हटाएं", - "6": "Remove Document Info Metadata" - }, - "submit": "PDF सैनिटाइज़ करें" - }, - "adjustContrast": { - "title": "कंट्रास्ट समायोजित करें", - "header": "कंट्रास्ट समायोजित करें", - "contrast": "कंट्रास्ट:", - "brightness": "चमक:", - "saturation": "संतृप्ति:", - "download": "डाउनलोड करें" - }, - "compress": { - "title": "कम्प्रेस", - "header": "PDF कम्प्रेस करें", - "credit": "यह सेवा PDF कम्प्रेस/अनुकूलन के लिए qpdf का उपयोग करती है।", - "grayscale": { - "label": "संपीड़न के लिए ग्रेस्केल लागू करें" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "अनुकूलन स्तर:", - "4": "स्वतः मोड - PDF को सटीक आकार प्राप्त करने के लिए गुणवत्ता को स्वतः समायोजित करता है", - "5": "अपेक्षित PDF आकार (जैसे 25MB, 10.8MB, 25KB)" - }, - "submit": "कम्प्रेस करें" - }, - "decrypt": { - "passwordPrompt": "यह फ़ाइल पासवर्ड से सुरक्षित है। कृपया पासवर्ड दर्ज करें:", - "cancelled": "PDF के लिए कार्रवाई रद्द की गई: {0}", - "noPassword": "एन्क्रिप्टेड PDF के लिए कोई पासवर्ड नहीं दिया गया: {0}", - "invalidPassword": "कृपया सही पासवर्ड के साथ पुनः प्रयास करें।", - "invalidPasswordHeader": "गलत पासवर्ड या असमर्थित एन्क्रिप्शन PDF के लिए: {0}", - "unexpectedError": "फ़ाइल प्रोसेस करने में त्रुटि हुई। कृपया पुनः प्रयास करें।", - "serverError": "डिक्रिप्ट करते समय सर्वर त्रुटि: {0}", - "success": "फ़ाइल सफलतापूर्वक डिक्रिप्ट की गई।" - }, - "multiTool-advert": { - "message": "यह सुविधा हमारे मल्टी-टूल पृष्ठ में भी उपलब्ध है। बेहतर पृष्ठ-दर-पृष्ठ UI और अतिरिक्त सुविधाओं के लिए इसे देखें!" - }, - "pageRemover": { - "title": "पृष्ठ हटाने वाला", - "header": "PDF पृष्ठ हटाने वाला", - "pagesToDelete": "हटाने के लिए पृष्ठ (पृष्ठ संख्याओं की अल्पविराम से अलग सूची दर्ज करें):", - "submit": "पृष्ठ हटाएं", - "placeholder": "(जैसे 1,2,6 या 1-10,15-30)" - }, - "imageToPDF": { - "title": "छवि से PDF", - "header": "छवि से PDF", - "submit": "बदलें", - "selectLabel": "छवि फिट विकल्प", - "fillPage": "पृष्ठ भरें", - "fitDocumentToImage": "छवि के अनुसार पृष्ठ फिट करें", - "maintainAspectRatio": "आनुपातिक अनुपात बनाए रखें", - "selectText": { - "2": "PDF स्वतः घुमाएं", - "3": "बहु फ़ाइल तर्क (केवल कई छवियों के साथ काम करते समय सक्षम)", - "4": "एकल PDF में मर्ज करें", - "5": "अलग-अलग PDF में बदलें" - } - }, - "PDFToCSV": { - "title": "PDF से CSV", - "header": "PDF से CSV", - "prompt": "तालिका निकालने के लिए पृष्ठ चुनें", - "submit": "निकालें" - }, - "split-by-size-or-count": { - "title": "आकार या गिनती द्वारा PDF विभाजित करें", - "header": "आकार या गिनती द्वारा PDF विभाजित करें", - "type": { - "label": "विभाजन प्रकार चुनें", - "size": "आकार द्वारा", - "pageCount": "पृष्ठ गिनती द्वारा", - "docCount": "दस्तावेज़ गिनती द्वारा" - }, - "value": { - "label": "मान दर्ज करें", - "placeholder": "आकार (जैसे 2MB या 3KB) या गिनती (जैसे 5) दर्ज करें" - }, - "submit": "जमा करें" - }, - "printFile": { - "title": "फ़ाइल प्रिंट करें", - "header": "प्रिंटर पर फ़ाइल प्रिंट करें", - "selectText": { - "1": "प्रिंट करने के लिए फ़ाइल चुनें", - "2": "प्रिंटर नाम दर्ज करें" - }, - "submit": "प्रिंट करें" - }, - "licenses": { - "nav": "लाइसेंस", - "title": "तृतीय-पक्ष लाइसेंस", - "header": "तृतीय-पक्ष लाइसेंस", - "module": "मॉड्यूल", - "version": "संस्करण", - "license": "लाइसेंस" - }, - "survey": { - "nav": "सर्वेक्षण", - "title": "Stirling-PDF सर्वेक्षण", - "description": "Stirling PDF में कोई ट्रैकिंग नहीं है इसलिए हम Stirling-PDF को बेहतर बनाने के लिए अपने उपयोगकर्ताओं से सुनना चाहते हैं!", - "changes": "पिछले सर्वेक्षण के बाद से Stirling-PDF बदल गया है! अधिक जानने के लिए कृपया हमारी ब्लॉग पोस्ट यहाँ देखें:", - "changes2": "इन परिवर्तनों के साथ हम भुगतान किए गए व्यावसायिक समर्थन और वित्त पोषण प्राप्त कर रहे हैं", - "please": "कृपया हमारे सर्वेक्षण में भाग लें!", - "disabled": "(सर्वेक्षण पॉपअप आगामी अपडेट में अक्षम कर दिया जाएगा लेकिन पृष्ठ के पाद में उपलब्ध रहेगा)", - "button": "सर्वेक्षण में भाग लें", - "dontShowAgain": "फिर मत दिखाना", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "छवियां हटाएं", - "header": "छवियां हटाएं", - "removeImage": "छवियां हटाएं", - "submit": "छवियां हटाएं" - }, - "splitByChapters": { - "title": "अध्यायों द्वारा PDF विभाजित करें", - "header": "अध्यायों द्वारा PDF विभाजित करें", - "bookmarkLevel": "बुकमार्क स्तर", - "includeMetadata": "मेटाडेटा शामिल करें", - "allowDuplicates": "डुप्लिकेट की अनुमति दें", - "desc": { - "1": "यह टूल PDF फ़ाइल को उसकी अध्याय संरचना के आधार पर कई PDF में विभाजित करता है।", - "2": "बुकमार्क स्तर: विभाजन के लिए बुकमार्क का स्तर चुनें (शीर्ष स्तर के लिए 0, दूसरे स्तर के लिए 1, इत्यादि)।", - "3": "मेटाडेटा शामिल करें: यदि चयनित है, तो मूल PDF का मेटाडेटा प्रत्येक विभाजित PDF में शामिल किया जाएगा।", - "4": "डुप्लिकेट की अनुमति दें: यदि चयनित है, तो एक ही पृष्ठ पर कई बुकमार्क को अलग PDF बनाने की अनुमति देता है।" - }, - "submit": "PDF विभाजित करें" - }, - "fileChooser": { - "click": "क्लिक करें", - "or": "या", - "dragAndDrop": "खींचें और छोड़ें", - "dragAndDropPDF": "PDF फ़ाइल खींचें और छोड़ें", - "dragAndDropImage": "छवि फ़ाइल खींचें और छोड़ें", - "hoveredDragAndDrop": "फ़ाइल(ें) यहाँ खींचें और छोड़ें", - "extractPDF": "निकालना..." - }, - "releases": { - "footer": "रिलीज़", - "title": "रिलीज़ नोट्स", - "header": "रिलीज़ नोट्स", - "current": { - "version": "वर्तमान रिलीज़" - }, - "note": "रिलीज़ नोट्स केवल अंग्रेजी में उपलब्ध हैं" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/hr-HR/translation.json b/frontend/dist/locales/hr-HR/translation.json deleted file mode 100644 index d5bb80545..000000000 --- a/frontend/dist/locales/hr-HR/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Veličina pisma", - "fontName": "Ime pisma", - "title": "Dodavanje brojeva stranica", - "header": "Dodavanje brojeva stranica", - "selectText": { - "1": "Odaberi PDF datoteku:", - "2": "Veličina margine", - "3": "Položaj", - "4": "Početni broj", - "5": "Brojanje stranica", - "6": "Prilagođeni tekst" - }, - "customTextDesc": "Prilagođeni tekst", - "numberPagesDesc": "Koje stranice numerirati, zadano je 'sve', također prihvaća 1-5 ili 2,5,9 itd.", - "customNumberDesc": "Zadano je {n}, također prihvaća 'Stranica {n} od {total}', 'Tekst-{n}', '{ime datoteke}-{n}'", - "submit": "Dodaj brojeve stranica" - }, - "pdfPrompt": "Odaberi PDF(ove)", - "multiPdfPrompt": "Odaberi PDF-ove (2+)", - "multiPdfDropPrompt": "Odaberi (ili povuci i ispusti) sve potrebne PDF-ove", - "imgPrompt": "Odaberi sliku (slike)", - "genericSubmit": "Pošalji", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Upozorenje: Ovaj proces može trajati i do minutu, u zavisnosti od veličine dokumenta", - "pageOrderPrompt": "Prilagođeni redoslijed stranica (unesi listu brojeva stranica ili funkcija, kao što su 2n+1, razdvojene zarezima) :", - "pageSelectionPrompt": "Prilagođeni odabir stranica (unesi listu brojeva stranica ili funkcija, kao što su 2n+1, razdvojene zarezima) :", - "goToPage": "Idi na stranicu", - "true": "Točno", - "false": "Netočno", - "unknown": "Nepoznato", - "save": "Spremi", - "saveToBrowser": "spremi u Preglednik", - "close": "Zatvori", - "filesSelected": "odabrane datoteke", - "noFavourites": "Nema dodanih favorita", - "downloadComplete": "Preuzimanje završeno", - "bored": "Dosađujete se čekajući?", - "alphabet": "Abeceda", - "downloadPdf": "Preuzmi PDF", - "text": "Tekst", - "font": "Pismo", - "selectFillter": "-- Odaberi --", - "pageNum": "Broj stranice", - "sizes": { - "small": "Malo", - "medium": "Srednje", - "large": "Veliko", - "x-large": "Jako veliko" - }, - "error": { - "pdfPassword": "PDF dokument je šifriran i zaporka nije dana ili je netočna", - "_value": "Greška", - "sorry": "Oprostite zbog problema!", - "needHelp": "Trebate pomoć / Pronašli ste problem?", - "contactTip": "Ako i dalje imate problema, ne ustručavajte se obratiti nam se za pomoć. Tiket možete poslati na našoj GitHub stranici ili nas kontaktirati putem Discorda:", - "404": { - "head": "404 - Stranica nije pronađena | Ups, spotaknuli smo se u kodu!", - "1": "Čini se da ne možemo pronaći stranicu koju tražite.", - "2": "Nešto je pošlo po zlu" - }, - "github": "Pošaljite ticket na GitHub", - "showStack": "Prikaži Stack Trace", - "copyStack": "Kopiraj Stack Trace", - "githubSubmit": "GitHub - Pošaljite ticket", - "discordSubmit": "Discord - Pošalji objavu podrške" - }, - "delete": "Izbriši", - "username": "Korisničko ime", - "password": "Zaporka", - "welcome": "Dobrodošli", - "property": "Svojstvo", - "black": "Crno", - "white": "Bijelo", - "red": "Crveno", - "green": "Zeleno", - "blue": "Plavo", - "custom": "Prilagođeno...", - "WorkInProgess": "Radovi u tijeku, u slučaju grešaka molimo prijavite probleme!", - "poweredBy": "Pokreće", - "yes": "Da", - "no": "Ne", - "changedCredsMessage": "Podaci za prijavu uspješno promijenjeni!", - "notAuthenticatedMessage": "Korisnik nije autentificiran.", - "userNotFoundMessage": "Korisnik nije pronađen.", - "incorrectPasswordMessage": "Kriva zaporka.", - "usernameExistsMessage": "Korisničko ime već postoji", - "invalidUsernameMessage": "Nevažeće korisničko ime, korisničko ime može sadržavati samo slova, brojke i sljedeće posebne znakove @._+- ili mora biti važeća adresa e-pošte.", - "invalidPasswordMessage": "Lozinka ne smije biti prazna i ne smije počinjati ni završavati sa razmakom.", - "confirmPasswordErrorMessage": "Nova lozinka i potvrda nove lozinke moraju biti identične.", - "deleteCurrentUserMessage": "Nije moguće izbrisati trenutno prijavljenog korisnika.", - "deleteUsernameExistsMessage": "Korisničko ime ne postoji i ne može se izbrisati.", - "downgradeCurrentUserMessage": "Nije moguće vratiti unazad ulogu trenutnog korisnika", - "disabledCurrentUserMessage": "Trenutni korisnik ne može biti onemogućen", - "downgradeCurrentUserLongMessage": "Nije moguće vratiti unazad ulogu trenutnog korisnika. Dakle, trenutni korisnik neće biti prikazan.", - "userAlreadyExistsOAuthMessage": "Korisnik već postoji kao OAuth2 korisnik.", - "userAlreadyExistsWebMessage": "Korisnik već postoji kao web korisnik.", - "oops": "Ups!", - "help": "Pomoć", - "goHomepage": "Idi na početnu stranicu", - "joinDiscord": "Pridruži se našem Discord serveru", - "seeDockerHub": "Vidi Docker Hub", - "visitGithub": "Posjeti Github Repository", - "donate": "Doniraj", - "color": "Boja", - "sponsor": "Sponzor", - "info": "Informacije", - "pro": "Pro", - "page": "Stranica", - "pages": "Stranice", - "loading": "Učitavanje...", - "addToDoc": "Dodaj u dokument", - "reset": "Reset", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Politika privatnosti", - "terms": "Uspe sodržine", - "accessibility": "Dostupnost", - "cookie": "Politika kolačića", - "impressum": "Vedro ishoda", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Pipeline Meni (Beta)", - "uploadButton": "Prenesi prilagođeno", - "configureButton": "Konfigurirati", - "defaultOption": "Prilagođeno", - "submitButton": "Pošalji", - "help": "Pipeline Pomoć", - "scanHelp": "Pomoć za skeniranje mapa", - "deletePrompt": "Jeste li sigurni da želite obrisati pipeline?", - "tags": "automatizacija,sekvenciranje,skriptirano,batch-process", - "title": "Tok rada" - }, - "pipelineOptions": { - "header": "Pipeline Konfiguracija", - "pipelineNameLabel": "Pipeline Ime", - "saveSettings": "Spremi Postavke", - "pipelineNamePrompt": "Unesite naziv pipeline-a ovdje", - "selectOperation": "Odaberite Operaciju", - "addOperationButton": "Dodajte operaciju", - "pipelineHeader": "Pipeline:", - "saveButton": "Preuzmi datoteku", - "validateButton": "Potvrdi" - }, - "enterpriseEdition": { - "button": "Ažurirajte na Pro", - "warning": "Ova funkcija je dostupna samo pro korisnicima.", - "yamlAdvert": "Stirling PDF Pro podrzava konfiguiracione datoteke u formati YAML i druga osobine SSO.", - "ssoAdvert": "Tražite još funkcija za upravljanje korisnicima? Razmotrite Stirling PDF Pro" - }, - "analytics": { - "title": "Želite li da stvarate Stirling PDF bolji?", - "paragraph1": "Stirling PDF ima uključene analitike koje nam pomažu da proizvod poboljšamo. Niste pratili nikakva osobna informacija ni sadržaj datoteka.", - "paragraph2": "Razmotrite omogućivanje analitičkih podataka kako biste stvorili Stirling-PDF veće i da bismo bolje razumeli naših korisnika.", - "enable": "Omogući analitike", - "disable": "Onemogući analitike", - "settings": "Možete promijeniti postavke za analitike u datoteci config/settings.yml" - }, - "navbar": { - "favorite": "Favoriti", - "recent": "New and recently updated", - "darkmode": "Tamni Način Rada", - "language": "Jezici", - "settings": "Postavke", - "allTools": "Alati", - "multiTool": "Multi Tools (Alati)", - "search": "Search", - "sections": { - "organize": "Organizirati", - "convertTo": "Pretvori u PDF", - "convertFrom": "Pretvori iz PDF", - "security": "Potpis & sigurnost", - "advance": "Napredno", - "edit": "Pregled & Uređivanje", - "popular": "Popularno" - } - }, - "settings": { - "title": "Postavke", - "update": "Dostupno ažuriranje", - "updateAvailable": "{0} je trenutno instalirana verzija. Dostupna je nova verzija ({1}).", - "appVersion": "Verzija aplikacije:", - "downloadOption": { - "title": "Odaberite opciju preuzimanja (Za preuzimanje pojedinačnih datoteka bez zip formata):", - "1": "Otvori u istom prozoru", - "2": "Otvori u novom prozoru", - "3": "Preuzmi datoteku" - }, - "zipThreshold": "Spremi .zip datoteku kada broj preuzetih datoteka pređe", - "signOut": "Odjava", - "accountSettings": "Postavke računa", - "bored": { - "help": "Omogućuje \"easter egg\" igru" - }, - "cacheInputs": { - "name": "Spremi unose obrazaca", - "help": "omogućiti pohranjivanje prethodno korištenih ulaza za buduća izvođenja" - } - }, - "changeCreds": { - "title": "Promijeni pristupne podatke", - "header": "Ažurirajte korisničke podatke", - "changePassword": "Koristite zadanu lozinku za prijavu. Unesite novu lozinku", - "newUsername": "Novo korisničko ime", - "oldPassword": "Trenutna zaporka", - "newPassword": "Nova zaporka", - "confirmNewPassword": "Potvrdite novu lozinku", - "submit": "Potvrdi" - }, - "account": { - "title": "Postavke računa", - "accountSettings": "Postavke računa", - "adminSettings": "Admin Postavka - Pregled i dodavanje korisnika", - "userControlSettings": "Postavke kontrole korisnika", - "changeUsername": "Promijeni korisničko ime", - "newUsername": "Novo korisničko ime", - "password": "Potvrda lozinke", - "oldPassword": "Stara zaporka", - "newPassword": "Nova zaporka", - "changePassword": "Promijeni lozinku", - "confirmNewPassword": "Potvrdi novu lozinku", - "signOut": "Odjava", - "yourApiKey": "Tvoj API ključ", - "syncTitle": "Sinkronizirajte postavke preglednika s računom", - "settingsCompare": "Usporedba postavki:", - "property": "Svojstvo", - "webBrowserSettings": "Postavka web-preglednika", - "syncToBrowser": "Sinkronizacija Račun -> Preglednik", - "syncToAccount": "Sinkronizacija Račun <- Preglednik" - }, - "adminUserSettings": { - "title": "Postavka kontrole korisnika", - "header": "Postavka kontrole korisnika za administratora", - "admin": "Administrator", - "user": "Korisnik", - "addUser": "Dodaj novog korisnika", - "deleteUser": "Obriši korisnika", - "confirmDeleteUser": "Treba li obračunati ovaj korisnika?", - "confirmChangeUserStatus": "Treba li isključiti/uključiti ovog korisnika?", - "usernameInfo": "Korisničko ime može sadržavati samo slova, brojke i sljedeće posebne znakove @._+- ili mora biti važeća adresa e-pošte.", - "roles": "Uloge", - "role": "Uloga", - "actions": "Akcije", - "apiUser": "Korisnik s ograničenim API pristupom", - "extraApiUser": "Dodatni korisnik s ograničenim API pristupom", - "webOnlyUser": "Web Korisnik", - "demoUser": "Demo korisnik (Bez prilagođenih Postavki)", - "internalApiUser": "Interni API Korisnik", - "forceChange": "Prisiliti korisnika da promijeni lozinku prilikom prijave", - "submit": "Spremi korisnika", - "changeUserRole": "Promijenite korisničku ulogu", - "authenticated": "Autentificirano", - "editOwnProfil": "Uredi vlastit profil", - "enabledUser": "Omotljiv korisnik", - "disabledUser": "Onemogućen korisnik", - "activeUsers": "Aktivni korisnici:", - "disabledUsers": "Isključeni korisnici:", - "totalUsers": "Ukupan broj korisnika:", - "lastRequest": "Zadnji zahtjev", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Database Import/Export", - "header": "Database Import/Export", - "fileName": "Ime datoteke", - "creationDate": "Datum stvaranja", - "fileSize": "Veličina datoteke", - "deleteBackupFile": "Obriši zadao sažeto datoteke", - "importBackupFile": "Uvezi sažeto datoteku", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Preuzmi sažeto datoteku", - "info_1": "Kada uvažavate podatke, je ključno sigurno imati ispravan struktur. Ako niste sigurni šta uradite, tražite savjet i podršku od professionala. Greška u strukturi može uzrokovati greške u aplikaciji, do i uključujući potpunu nevjerojatnost funkcionalnosti aplikacije.", - "info_2": "Ime datoteke nije relevantno prijevezi. Buduće bit će ponovno oznaceno za određeni format backup_user_yyyyMMddHHmm.sql, čime se osigurava konzistentna nazivnica.", - "submit": "Uvezi sažeto", - "importIntoDatabaseSuccessed": "Uvez u bazu podataka uspio", - "backupCreated": "Database backup successful", - "fileNotFound": "File not Found", - "fileNullOrEmpty": "Datoteka ne smije biti null ili prazna", - "failedImportFile": "Failed Import File", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "Vaš sesija je istekla. Molim vas da osvježite stranicu i pokušate ponovno.", - "refreshPage": "Refresh Page" - }, - "home": { - "desc": "Sve na jednom mjestu za sve vaše PDF potrebe.", - "searchBar": "Pretraži funkcije...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Pregledaj, komentiraj, dodaj tekst ili slike" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "PDF Višestruki alat", - "desc": "Spajanje, rotiranje, preuređivanje i uklanjanje stranica" - }, - "merge": { - "title": "Spajanje", - "desc": "Jednostavno spojite više PDF-ova u jedan." - }, - "split": { - "title": "Razdvajanje", - "desc": "Razdvojite PDF-ove u više dokumenata" - }, - "rotate": { - "title": "Rotacija", - "desc": "Jednostavno rotirajte vaše PDF-ove." - }, - "imageToPdf": { - "title": "Slika u PDF", - "desc": "Pretvorite sliku (PNG, JPEG, GIF) u PDF." - }, - "pdfToImage": { - "title": "PDF u Sliku", - "desc": "Pretvorite PDF u sliku. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Organiziranje", - "desc": "Uklonite/preuredite stranice bilo kojim redoslijedom" - }, - "addImage": { - "title": "Dodaj sliku", - "desc": "Dodaje sliku na zadano mjesto u PDF-u" - }, - "watermark": { - "title": "Dodaj vodeni žig", - "desc": "DDodajte prilagođeni vodeni žig svom PDF dokumentu." - }, - "permissions": { - "title": "Promjena dopuštenja", - "desc": "Promijenite dopuštenja svog PDF dokumenta" - }, - "removePages": { - "title": "Ukloniti", - "desc": "Izbrišite neželjene stranice iz svog PDF dokumenta." - }, - "addPassword": { - "title": "Dodaj lozinku", - "desc": "Šifrirajte svoj PDF dokument lozinkom.." - }, - "removePassword": { - "title": "Ukloni lozinku", - "desc": "Uklonite zaštitu lozinkom sa svog PDF dokumenta.." - }, - "compressPdfs": { - "title": "Komprimiraj", - "desc": "Komprimirajte PDF-ove kako biste smanjili njihovu veličinu." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Promjena metapodataka", - "desc": "Promjeni/Ukloni/Dodaj metapodatke iz PDF dokumenta" - }, - "fileToPDF": { - "title": "Pretvori datoteku u PDF", - "desc": "Pretvorite gotovo sve datoteke u PDF (DOCX, PNG, XLS, PPT, TXT i više)" - }, - "ocr": { - "title": "OCR / Čišćenje skeniranih dokumenata", - "desc": "Čišćenje skenira i otkriva tekst sa slika unutar PDF-a i ponovno ga dodaje kao tekst." - }, - "extractImages": { - "title": "Ekstrakt slika", - "desc": "Izdvaja sve slike iz PDF-a i sprema ih u zip format" - }, - "pdfToPDFA": { - "title": "PDF u PDF/A", - "desc": "Pretvorite PDF u PDF/A za dugoročnu pohranu" - }, - "PDFToWord": { - "title": "PDF u Word", - "desc": "Pretvorite PDF u Word formate (DOC, DOCX i ODT)" - }, - "PDFToPresentation": { - "title": "PDF u Prezentaciju", - "desc": "Pretvorite PDF u formate za prezentaciju (PPT, PPTX i ODP)" - }, - "PDFToText": { - "title": "PDF u RTF (Tekst)", - "desc": "Pretvorite PDF u tekst ili RTF format" - }, - "PDFToHTML": { - "title": "PDF u HTML", - "desc": "Pretvorite PDF u HTML format" - }, - "PDFToXML": { - "title": "PDF u XML", - "desc": "Pretvorite PDF u XML format" - }, - "ScannerImageSplit": { - "title": "Otkrij/razdvoji skenirane fotografije", - "desc": "Razdvaja više fotografija iz fotografije/PDF-a" - }, - "sign": { - "title": "Potpisati", - "desc": "Dodaje potpis u PDF crtežom, tekstom ili slikom" - }, - "flatten": { - "title": "Ravnanje (Flatten)", - "desc": "Uklonite sve interaktivne elemente i obrasce iz PDF-a" - }, - "repair": { - "title": "Popravi", - "desc": "Pokušava popraviti oštećeni/pokvareni PDF" - }, - "removeBlanks": { - "title": "Ukloni prazne stranice", - "desc": "Otkriva i uklanja prazne stranice iz dokumenta" - }, - "removeAnnotations": { - "title": "Ukloni komentare", - "desc": "Uklanja sve komentare/anotacije iz PDF-a" - }, - "compare": { - "title": "Uporedi", - "desc": "Uspoređuje i pokazuje razlike između 2 PDF dokumenta" - }, - "certSign": { - "title": "Potpišite s certifikatom", - "desc": "Potpisuje PDF s certifikatom/ključem (PEM/P12)" - }, - "removeCertSign": { - "title": "Ukloni potpis sertifikata", - "desc": "Uklonite potpis sertifikata iz PDF-a" - }, - "pageLayout": { - "title": "Izgled s više stranica", - "desc": "Spojite više stranica PDF dokumenta u jednu stranicu" - }, - "scalePages": { - "title": "Prilagodite veličinu/razmjer stranice", - "desc": "Promijenite veličinu/razmjer stranice i/ili njezin sadržaj." - }, - "pipeline": { - "title": "Pipeline", - "desc": "Izvršite više radnji na PDF-ovima definiranjem skripti u pipeline-u" - }, - "add-page-numbers": { - "title": "Dodaj brojeve stranica", - "desc": "Dodajte brojeve stranica kroz dokument na određeno mjesto" - }, - "auto-rename": { - "title": "Automatsko preimenovanje PDF datoteka", - "desc": "Automatski preimenuje PDF datoteku na temelju otkrivenog zaglavlja" - }, - "adjust-contrast": { - "title": "Podesi boje/kontrast", - "desc": "Podesite kontrast, zasićenost i svjetlinu PDF-a" - }, - "crop": { - "title": "Izrežite PDF", - "desc": "Izrežite PDF kako biste smanjili njegovu veličinu (zadržava tekst!)" - }, - "autoSplitPDF": { - "title": "Automatsko dijeljenje stranica", - "desc": "Automatsko dijeljenje skeniranog PDF-a s fizičkim QR kodom za dijeljenje stranica" - }, - "sanitizePdf": { - "title": "Dezinficirati (Sanitize)", - "desc": "Uklonite skripte i druge elemente iz PDF datoteka" - }, - "URLToPDF": { - "title": "URL/Webstranica u PDF", - "desc": "Pretvara bilo koji http(s)URL u PDF" - }, - "HTMLToPDF": { - "title": "HTML u PDF", - "desc": "Pretvara bilo koji HTML datoteku ili zip u PDF" - }, - "MarkdownToPDF": { - "title": "Markdown u PDF", - "desc": "Pretvara bilo koju Markdown datoteku u PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Dohvati SVE informacije o PDF-u", - "desc": "Dohvaća sve moguće informacije o PDF-ovima" - }, - "extractPage": { - "title": "Izdvoji stranicu(e)", - "desc": "Izdvaja odabrane stranice iz PDF-a" - }, - "PdfToSinglePage": { - "title": "PDF u Jednu Veliku Stranicu", - "desc": "Spaja sve PDF stranice u jednu veliku stranicu" - }, - "showJS": { - "title": "Prikaži JavaScript", - "desc": "Pretražuje i prikazuje bilo koji JavaScript umetnut u PDF" - }, - "autoRedact": { - "title": "Automatsko uređivanje", - "desc": "Automatski redigira (zacrni) tekst u PDF-u na temelju unosa teksta" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF u CSV", - "desc": "Izdvaja tablice iz PDF-a pretvarajući ga u CSV" - }, - "autoSizeSplitPDF": { - "title": "Automatska podjela po veličini/broju", - "desc": "Podijelite jedan PDF na više dokumenata na temelju veličine, broja stranica ili broja dokumenata" - }, - "overlay-pdfs": { - "title": "Preklapanje PDF-ova", - "desc": "Preklapa PDF-ove na drugi PDF" - }, - "split-by-sections": { - "title": "Podijeli PDF po odjeljcima", - "desc": "Svaku stranicu PDF-a podijelite na manje vodoravne i okomite dijelove" - }, - "AddStampRequest": { - "title": "Dodaj pečat u PDF", - "desc": "Dodajte tekst ili dodajte slikovne oznake na postavljenim mjestima" - }, - "removeImagePdf": { - "title": "Ukloni sliku", - "desc": "Ukloni sliku iz PDF-a kako bi se smanjio veličina datoteke" - }, - "splitPdfByChapters": { - "title": "Podijeli PDF prema glavama", - "desc": "Podijeli PDF na više datoteka prema njegovom strukturnom obliku glava." - }, - "validateSignature": { - "title": "Validate PDF Signature", - "desc": "Verify digital signatures and certificates in PDF documents" - }, - "replaceColorPdf": { - "title": "Replace and Invert Color", - "desc": "Zamenite boju teksta i pozadine u PDF-u te inverzirajte cijeli PDF kako bi se smanjila veličina datoteke." - } - }, - "viewPdf": { - "tags": "pregled,čitanje,komentiranje,tekst,slika", - "title": "View/Edit PDF", - "header": "Pogledaj PDF" - }, - "multiTool": { - "tags": "Višestruki alat, više operacija, korisničko sučelje, povlačenje klikom, prednji kraj, strana klijenta, interaktivno, nepopravljivo, pomicanje", - "title": "PDF Višenamjenski alat", - "header": "PDF Višenamjenski alat", - "uploadPrompts": "Naziv datoteke", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "selectPages": "Page Select", - "selectedPages": "Selected Pages", - "page": "Page", - "deleteSelected": "Delete Selected", - "downloadAll": "Export", - "downloadSelected": "Export Selected", - "insertPageBreak": "Insert Page Break", - "addFile": "Add File", - "rotateLeft": "Rotate Left", - "rotateRight": "Rotate Right", - "split": "Split", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "Delete", - "dragDropMessage": "Page(s) Selected", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "spajanje,Operacije sa stranicama,Backend,poslužiteljska strana", - "title": "Spajanje", - "header": "Spajanje više PDF-ova (2+)", - "sortByName": "Poredaj po imenu", - "sortByDate": "Poredaj po datumu", - "removeCertSign": "Ukloniti digitalni potpis u kombiniranom datoteku?", - "submit": "Spajanje" - }, - "split": { - "tags": "Operacije stranice, dijeljenje, više stranica, rezanje,poslužiteljska strana", - "title": "Razdvajanje PDF-a", - "header": "Razdvajanje PDF-a", - "desc": { - "1": "Brojevi koje odaberete su brojevi stranica na kojima želite napraviti podjelu", - "2": "s takvim odabirom 1,3,7-9 bi se dokument od 10 stranica podijelio u 6 zasebnih PDF-ova sa:", - "3": "Dokument #1: Stranica 1", - "4": "Dokument #2: Stranice 2 i 3", - "5": "Dokument #3: Stranice 4, 5, 6 i 7", - "6": "Dokument #4: Stranica 8", - "7": "Dokument #5: Stranica 9", - "8": "Dokument #6: Stranice 10" - }, - "splitPages": "Unesite stranice za razdvajanje:", - "submit": "Razdvoji" - }, - "rotate": { - "tags": "poslužiteljska strana", - "title": "Zakreni PDF", - "header": "Zakreni PDF", - "selectAngle": "Odaberite kut rotacije (u umnošcima od 90 stupnjeva):", - "submit": "Zakreni" - }, - "imageToPdf": { - "tags": "konverzija,pretvaranje,img,jpg,slika,foto" - }, - "pdfToImage": { - "tags": "konverzija,img,jpg,slika,foto", - "title": "PDF u sliku", - "header": "PDF u sliku", - "selectText": "Format slike", - "singleOrMultiple": "Vrsta rezultata Stranica u sliku", - "single": "Jedna velika slika koja sadrži sve stranice", - "multi": "Više slika, jedna slika po stranici", - "colorType": "Tip boje", - "color": "Boja", - "grey": "Sivi tonovi", - "blackwhite": "Crno-bijelo (mogu se izgubiti podaci!)", - "submit": "Pretvori", - "info": "Python nije instaliran. Treba je za konverziju na WebP.", - "placeholder": "(t.j. 1,2,8 ili 4,7,12-16 ili 2n-1)" - }, - "pdfOrganiser": { - "tags": "dvostrana,parne,neparni,prikupljanje,prebacivanje", - "title": "Organizator stranica", - "header": "Organizator stranica u PDF-u", - "submit": "preuredite stranice", - "mode": { - "_value": "Način rada", - "1": "Prilagođeni redoslijed stranica", - "2": "Obrnuti redoslijed", - "3": "Duplex sortiranje", - "4": "Booklet sortiranje", - "5": "Knjižica s bočnim ubodom", - "6": "Par-Nepar Podjela", - "7": "Ukloni Prvu", - "8": "Ukloni Zadnju", - "9": "Ukloni Prvu i Zadnju", - "10": "Neparno-parna kombinacija", - "11": "Duplicate all pages" - }, - "placeholder": "(npr. 1,3,2 ili 4-8,2,10-12 ili 2n-1)" - }, - "addImage": { - "tags": "img,jpg,slika,foto", - "title": "Dodaj sliku", - "header": "Dodaj sliku u PDF", - "everyPage": "Na svakoj stranici?", - "upload": "Dodaj sliku", - "submit": "Dodaj sliku" - }, - "watermark": { - "tags": "Tekst,ponavljanje,etiketa,vlastiti,autorsko pravo,zaštita, img,jpg,slika,foto", - "title": "Dodaj vodeni žig", - "header": "Dodaj vodeni žig", - "customColor": "Prilagođena boja teksta", - "selectText": { - "1": "Izaberite PDF za dodavanje vodenog žiga:", - "2": "Tekst vodenog žiga:", - "3": "Veličina fonta:", - "4": "Rotacija (0-360):", - "5": "Širina razmaka (Razmak između svakog vodenog žiga vodoravno):", - "6": "Visina razmaka (Razmak između svakog vodenog žiga okomito):", - "7": "Neprozirnost (0% - 100%):", - "8": "Vrsta vodenog žiga:", - "9": "Slika vodenog žiga:", - "10": "Konvertiraj PDF u PDF-Sliku" - }, - "submit": "Dodaj vodeni žig", - "type": { - "1": "Tekst", - "2": "Slika" - } - }, - "permissions": { - "tags": "čitanje,pisanje,izmjena,print", - "title": "Promjena dopuštenja", - "header": "Promjena dopuštenja", - "warning": "Upozorenje: da ove dozvole budu nepromjenjive, preporuča se da ih postavite lozinkom putem stranice za dodavanje lozinke", - "selectText": { - "1": "Odaberite PDF za promjenu dopuštenja", - "2": "Dopuštenja za postavljanje", - "3": "Spriječiti sastavljanje dokumenta", - "4": "Spriječiti izdvajanje sadržaja", - "5": "Spriječite izvlačenje radi pristupačnosti", - "6": "Spriječiti ispunjavanje obrasca", - "7": "Spriječiti izmjene", - "8": "Spriječi modificiranje napomena", - "9": "Spriječiti ispis", - "10": "Spriječite ispis različitih formata" - }, - "submit": "Promijeniti" - }, - "removePages": { - "tags": "Ukloni stranice,izbriši stranice" - }, - "addPassword": { - "tags": "sigurno, sigurnost", - "title": "Dodajte zaporku", - "header": "Dodajte zaporku (kriptiraj)", - "selectText": { - "1": "Odaberite PDF za šifriranje", - "2": "Korisnička Zaporka", - "3": "Dužina ključa šifriranja", - "4": "Više vrijednosti su jače, ali niže vrijednosti imaju bolju kompatibilnost.", - "5": "Dopuštenja za postavljanje (preporučuje se korištenje uz vlasničku lozinku)", - "6": "Spriječiti sastavljanje dokumenta", - "7": "Spriječite izdvajanje sadržaja", - "8": "Spriječite izvlačenje radi pristupačnosti", - "9": "Spriječiti ispunjavanje obrasca", - "10": "Spriječiti izmjene", - "11": "Spriječi modificiranje napomena", - "12": "Spriječiti ispis", - "13": "Spriječite ispis različitih formata", - "14": "Zaporka vlasnika", - "15": "Ograničava što se može učiniti s dokumentom nakon što se otvori (ne podržavaju svi čitači)", - "16": "Ograničava otvaranje samog dokumenta" - }, - "submit": "Šifriraj" - }, - "removePassword": { - "tags": "sigurno, dešifriranje, sigurnost, poništi lozinku, izbriši lozinku", - "title": "Ukloni zaporku", - "header": "Ukloni zaporku (dekriptiraj)", - "selectText": { - "1": "Odaberite PDF za dekriptiranje", - "2": "Zaporka" - }, - "submit": "Ukloniti" - }, - "compressPdfs": { - "tags": "squish, mali, maleni" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Naslov,autor,datum,kreacije,vrijeme,izdavač,proizvođač,statistike", - "title": "Promjena metapodataka", - "header": "Promjena metapodataka", - "selectText": { - "1": "Uredite varijable koje želite promijeniti", - "2": "Izbriši sve metapodatke", - "3": "Prikaži prilagođene metapodatke:", - "4": "Ostali metapodaci:", - "5": "Dodaj prilagođeni unos metapodataka" - }, - "author": "Autor:", - "creationDate": "Datum stvaranja (gggg/MM/dd HH:mm:ss):", - "creator": "Kreator:", - "keywords": "Ključne riječi:", - "modDate": "Datum izmjene (gggg/MM/dd HH:mm:ss):", - "producer": "Proizvođač:", - "subject": "Predmet:", - "trapped": "Zarobljen:", - "submit": "Promijeniti" - }, - "fileToPDF": { - "tags": "transformacija,format,dokument,slika,slajd,tekst,konverzija,office,docs,word,excel,powerpoint", - "title": "datoteku u PDF", - "header": "Pretvori bilo koji datoteku u PDF", - "credit": "Ova usluga koristi LibreOffice i Unoconv za pretvaranje datoteka.", - "supportedFileTypesInfo": "Podržane vrste datoteka", - "supportedFileTypes": "Podržane vrste datoteka trebale bi uključivati dolje, no za potpuni ažurirani popis podržanih formata pogledajte dokumentaciju LibreOfficea", - "submit": "Pretvori u PDF" - }, - "ocr": { - "tags": "prepoznavanje,tekst,slika,sken,čitanje,identifikacija,detektiranje,uređivanje", - "title": "OCR / čišćenje skeniranja", - "header": "Čišćenje skeniranja / OCR (optičko prepoznavanje znakova)", - "selectText": { - "1": "Odaberite jezike koji će se otkriti unutar PDF-a (navedeni su oni koji su trenutno otkriveni):", - "2": "Izradite tekstualnu datoteku koja sadrži OCR tekst uz OCR-ovani PDF", - "3": "Ispravne stranice su skenirane pod nagnutim kutom rotiranjem na mjesto", - "4": "Očistite stranicu tako da je manja vjerojatnost da će OCR pronaći tekst u pozadinskoj buci. (Bez promjene izlaza)", - "5": "Očisti stranicu tako da je manja vjerojatnost da će OCR pronaći tekst u pozadinskoj buci, održava čišćenje u izlazu.", - "6": "Ignorira stranice koje na sebi imaju interaktivni tekst, samo OCR stranice koje su slike", - "7": "Prinudni OCR, OCR će za svaku stranicu ukloniti sve izvorne elemente teksta", - "8": "Normalno (Bit će pogreška ako PDF sadrži tekst)", - "9": "Dodatne postavke", - "10": "OCR način", - "11": "Ukloni slike nakon OCR-a (Uklanja SVE slike, korisno samo ako je dio koraka konverzije)", - "12": "Vrsta iscrtavanja (napredno)" - }, - "help": "Pročitajte ovu dokumentaciju o tome kako ovo koristiti za druge jezike i/ili koristiti ne u dockeru", - "credit": "Ova usluga koristi qpdf i Tesseract za OCR.", - "submit": "Obradi PDF sa OCR-om" - }, - "extractImages": { - "tags": "slika, fotografija, spremanje, arhiva, zip, snimanje, zgrabi", - "title": "Ekstrakt slika", - "header": "Ekstrakt slika", - "selectText": "Odaberite format slike za pretvaranje izdvojenih slika", - "allowDuplicates": "Sačuvaj duplikate slike", - "submit": "Izdvajanje" - }, - "pdfToPDFA": { - "tags": "arhiva,dugoročno,standardno,konverzija,čuvanje,čuvanje", - "title": "PDF u PDF/A", - "header": "PDF u PDF/A", - "credit": "Ova usluga koristi libreoffice za PDF/A pretvorbu", - "submit": "Pretvoriti", - "tip": "Trenutno ne radi za više unosa odjednom", - "outputFormat": "Izlazni format", - "pdfWithDigitalSignature": "PDF sadrži digitalni potpis. U sledećem koraku će biti uklonjen." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformacija,format,konverzija,office,microsoft,docfile", - "title": "PDF u Word", - "header": "PDF u Word", - "selectText": { - "1": "Format izlazne datoteke" - }, - "credit": "Ova usluga koristi LibreOffice za konverziju datoteka.", - "submit": "Pretvoriti" - }, - "PDFToPresentation": { - "tags": "slajdovi,prikaz,office,microsoft", - "title": "PDF u Prezentaciju", - "header": "PDF u Prezentaciju", - "selectText": { - "1": "Format izlazne datoteke" - }, - "credit": "Ova usluga koristi LibreOffice za konverziju datoteka.", - "submit": "Pretvoriti" - }, - "PDFToText": { - "tags": "bojaformata,tjedentextformat,sadržanotekstformat", - "title": "PDF u RTF (Tekst)", - "header": "PDF u RTF (Tekst)", - "selectText": { - "1": "Format izlazne datoteke" - }, - "credit": "Ova usluga koristi LibreOffice za konverziju datoteka.", - "submit": "Pretvoriti" - }, - "PDFToHTML": { - "tags": "web sadržaj,prijateljski za pretraživače", - "title": "PDF u HTML", - "header": "PDF u HTML", - "credit": "Ova usluga koristi pdftohtml za konverziju datoteka.", - "submit": "Pretvoriti" - }, - "PDFToXML": { - "tags": "izdvajanje-podataka,strukturirani-sadržaj,interop,transformacija,konvertiranje", - "title": "PDF u XML", - "header": "PDF u XML", - "credit": "Ova usluga koristi LibreOffice za konverziju datoteka.", - "submit": "Pretvoriti" - }, - "ScannerImageSplit": { - "tags": "razdvoji,auto-detekcija,skeniranja,višestruke fotografije,organizacija", - "selectText": { - "1": "Kutni prag:", - "2": "Postavlja minimalni apsolutni kut potreban za rotiranje slike (zadano: 10).", - "3": "Tolerancija:", - "4": "Određuje raspon varijacije boje oko procijenjene boje pozadine (zadano: 30).", - "5": "Minimalna površina:", - "6": "Postavlja minimalni prag površine za fotografiju (zadano: 10000).", - "7": "Minimalna konturna površina:", - "8": "Postavlja minimalni prag površine konture za fotografiju", - "9": "Veličina obruba:", - "10": "Postavlja veličinu obruba koji se dodaje i uklanja kako bi se spriječili bijeli obrubi u ispisu (zadano: 1)." - }, - "info": "Python nije instaliran. Treba je za izvršenje." - }, - "sign": { - "tags": "autorizacija,inicijali,crtani-potpis,tekstualni-potpis,slikovni-potpis", - "title": "Potpišite", - "header": "Potpišite PDF-ove", - "upload": "Učitaj sliku", - "draw": "Nacrtaj potpis", - "text": "Tekstualni unos", - "clear": "Obriši", - "add": "Dodaj", - "saved": "Sacuvane potpisne oznake", - "save": "Sačuvaj potpisnu oznaku", - "personalSigs": "Osobni potpisi", - "sharedSigs": "Dijeljeni potpisi", - "noSavedSigs": "Nema sacuvanih potpisa pronađenih", - "addToAll": "Add to all pages", - "delete": "Delete", - "first": "First page", - "last": "Last page", - "next": "Next page", - "previous": "Previous page", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "statično,deaktivirati,neinteraktivno,usmjeriti", - "title": "Izravnati", - "header": "Izravnati pdf", - "flattenOnlyForms": "Izravnati samo obrasce", - "submit": "Izravnati" - }, - "repair": { - "tags": "popravi,vrati,korekcija,obnovi", - "title": "Popravi", - "header": "Popravi PDF datoteku", - "submit": "Popravi" - }, - "removeBlanks": { - "tags": "čišćenje,usmjeriti,ne-sadržaj,organizacija", - "title": "Uklonite prazne stranice", - "header": "Uklonite prazne stranice", - "threshold": "Prag bjeline piksela:", - "thresholdDesc": "Prag za određivanje koliko bijeli piksel mora biti bijel da bi bio klasificiran kao 'bijeli'. 0 = crno, 255 čisto bijelo.", - "whitePercent": "Postotak bijele boje (%):", - "whitePercentDesc": "Postotak stranice koji mora biti \"bijeli\" piksel da bi se uklonio", - "submit": "Uklonite prazne stranice" - }, - "removeAnnotations": { - "tags": "komentari,isticanje,bilješke,oznake,ukloni", - "title": "Ukloni komentare", - "header": "Ukloni komentare", - "submit": "Ukloni" - }, - "compare": { - "tags": "razlikovati,kontrast,izmjene,analiza", - "title": "Uporedite", - "header": "Usporedite PDF-ove", - "highlightColor": { - "1": "Boja osvetljenja 1:", - "2": "Boja osvetljenja 2:" - }, - "document": { - "1": "Dokument 1", - "2": "Dokument 2" - }, - "submit": "Uporedi", - "complex": { - "message": "Jedan ili oba unesena dokumenta su veliki datoteke, to može smanjiti preciznost usporedbi" - }, - "large": { - "file": { - "message": "Jedan ili oba unesena dokumenta su prevelike za obradu" - } - }, - "no": { - "text": { - "message": "Jedan ili oba odabrana PDF-a nema tekst. Odaberite PDF-ove s tekstom za usporedbu." - } - } - }, - "certSign": { - "tags": "autentifikacija,PEM,P12,zvanično,šifriranje", - "title": "Potpisivanje Certifikatom", - "header": "Potpišite PDF svojim certifikatom (Rad u tijeku)", - "selectPDF": "Odaberite PDF datoteku za potpisivanje:", - "jksNote": "Napomena: Ako vrsta vašeg certifikata nije navedena u nastavku, pretvorite ga u datoteku Java Keystore (.jks) pomoću alata naredbenog retka keytool. Zatim odaberite opciju .jks datoteke u nastavku.", - "selectKey": "Odaberite svoju datoteku privatnog ključa (format PKCS#8, može biti .pem ili .der):", - "selectCert": "Odaberite svoju datoteku certifikata (format X.509, može biti .pem ili .der):", - "selectP12": "Odaberite svoju PKCS#12 datoteku pohrane ključeva (.p12 ili .pfx) (neobavezno, ako je dostupna, trebala bi sadržavati vaš privatni ključ i certifikat):", - "selectJKS": "Odaberite datoteku Java Keystore (.jks ili .keystore):", - "certType": "Tip certifikata", - "password": "Unesite svoju lozinku za skladište ključeva ili privatni ključ (ako postoji):", - "showSig": "Prikaži potpis", - "reason": "Razlog", - "location": "Mjesto", - "name": "Ime", - "showLogo": "Prikaži logo", - "submit": "Potpiši PDF" - }, - "removeCertSign": { - "tags": "autentičiranje,PEM,P12,djelomičan dešifriranje", - "title": "Ukloni digitalno potpisano dokazilo", - "header": "Uklonite digitalni potpis iz PDF-a", - "selectPDF": "Odaberite datoteku PDF:", - "submit": "Ukloni potpisi" - }, - "pageLayout": { - "tags": "spajanje,kompozitni,pojedinačan-prikaz,organizacija", - "title": "Izgled s više stranica", - "header": "Izgled s više stranica", - "pagesPerSheet": "Broj stranica po listu:", - "addBorder": "Dodajte granice dokumenta", - "submit": "Potvrdi" - }, - "scalePages": { - "tags": "izmjena,modifikacija,dimenzija,adaptacija", - "title": "Podesite veličinu stranice", - "header": "Podesite veličinu stranice", - "pageSize": "Veličina stranice dokumenta.", - "keepPageSize": "Originalna veličina", - "scaleFactor": "Razina zumiranja (obrezivanje) stranice.", - "submit": "Potvrdi" - }, - "add-page-numbers": { - "tags": "paginirati, označiti, organizirati, indeksirati" - }, - "auto-rename": { - "tags": "auto-detekcija,zaglavlje-bazirano,organizacija,preimenovanje", - "title": "Automatski preimenuj", - "header": "Automatski preimenuj PDF", - "submit": "Automatski preimenuj" - }, - "adjust-contrast": { - "tags": "korekcija boje, ugađanje, modificiranje, poboljšanje" - }, - "crop": { - "tags": "obrezivanje, smanjivanje, uređivanje, oblikovanje", - "title": "Izreži", - "header": "Izreži sliku", - "submit": "Potvrdi" - }, - "autoSplitPDF": { - "tags": "QR-bazirano,razdvoji,segment-skeniranja,organizacija", - "title": "Automatsko dijeljenje PDF-a", - "header": "Automatsko dijeljenje PDF-a", - "description": "Ispišite, umetnite, skenirajte, učitajte i dopustite nam da automatski odvojimo vaše dokumente. Nije potrebno ručno sortiranje.", - "selectText": { - "1": "Ispišite nekoliko razdjelnih listova odozdo (crno-bijelo je u redu).", - "2": "Skenirajte sve dokumente odjednom umetanjem razdjelnog lista između njih.", - "3": "Prenesite jednu veliku skeniranu PDF datoteku i pustite našem PDF-u da se pobrine za ostalo.", - "4": "Razdjelne stranice automatski se otkrivaju i uklanjaju, jamčeći uredan konačni dokument." - }, - "formPrompt": "Pošaljite PDF koji sadrži naše razdjelnike stranica:", - "duplexMode": "Obostrani način rada (skeniranje s prednje i stražnje strane)", - "dividerDownload2": "Preuzmite 'Auto Splitter Divider (s uputama).pdf'", - "submit": "Potvrdi" - }, - "sanitizePdf": { - "tags": "čisto, sigurno, sigurno, uklanjanje prijetnji" - }, - "URLToPDF": { - "tags": "uhvati-web,sačuvaj-stranicu,web-u-doc,arhiva", - "title": "URL u PDF", - "header": "URL u PDF", - "submit": "Pretvori", - "credit": "Koristi WeasyPrint" - }, - "HTMLToPDF": { - "tags": "oznake,web-sadržaj,transformacija,konvertiranje", - "title": "HTML u PDF", - "header": "HTML u PDF", - "help": "Prihvaća HTML datoteke i ZIP-ove koji sadrže html/css/slike itd. potrebno", - "submit": "Pretvori", - "credit": "Koristi WeasyPrint", - "zoom": "Razina zumiranja za prikaz web stranice.", - "pageWidth": "Širina stranice u centimetrima. (Prazno u Zadano)", - "pageHeight": "Visina stranice u centimetrima. (Prazno u Zadano)", - "marginTop": "Gornja margina stranice u milimetrima. (Prazno u Zadano)", - "marginBottom": "Donja margina stranice u milimetrima. (Prazno u Zadano)", - "marginLeft": "Lijeva margina stranice u milimetrima. (Prazno u Zadano)", - "marginRight": "Desna margina stranice u milimetrima. (Prazno u Zadano)", - "printBackground": "Prikaz pozadine web stranica.", - "defaultHeader": "Omogući zadano zaglavlje (Ime i broj stranice)", - "cssMediaType": "Promijenite vrstu CSS medija stranice.", - "none": "Nijedan", - "print": "Ispis", - "screen": "Zaslon" - }, - "MarkdownToPDF": { - "tags": "oznake,web-sadržaj,transformacija,konvertiranje", - "title": "Markdown u PDF", - "header": "Markdown u PDF", - "submit": "Pretvori", - "help": "Rad u toku", - "credit": "Koristi WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "informacije,podaci,statistike", - "title": "Informacije o PDF-u", - "header": "Informacije o PDF-u", - "submit": "Informacije", - "downloadJson": "Preuzmite JSON" - }, - "extractPage": { - "tags": "izdvajanje" - }, - "PdfToSinglePage": { - "tags": "jedna-stranica" - }, - "showJS": { - "tags": "JS", - "title": "Prikaži Javascript", - "header": "Prikaži Javascript", - "downloadJS": "Preuzmite Javascript", - "submit": "Prikaži" - }, - "autoRedact": { - "tags": "Cenzura,Sakrij,prekrivanje,crna,marker,skriveno", - "title": "Automatsko uređivanje", - "header": "Automatsko uređivanje", - "colorLabel": "Boja", - "textsToRedactLabel": "Tekst za uređivanje (razdvojen linijama)", - "textsToRedactPlaceholder": "npr. \\nPovjerljivo \\nStrogo čuvana tajna", - "useRegexLabel": "Koristi Regex", - "wholeWordSearchLabel": "Pretraživanje cijelih riječi", - "customPaddingLabel": "Dodatni prazan prostor", - "convertPDFToImageLabel": "Pretvorite PDF u PDF-sliku (koristi se za uklanjanje teksta iza okvira)", - "submitButton": "Potvrdi" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,Izdvajanje tabela,izdvajanje,pretvaranje" - }, - "autoSizeSplitPDF": { - "tags": "pdf,podjela,dokumenti,organizacija" - }, - "overlay-pdfs": { - "tags": "Preklapanje", - "header": "Prekrivanje PDF datoteka", - "baseFile": { - "label": "Odaberite Osnovnu PDF datoteka" - }, - "overlayFiles": { - "label": "Izaberite PDF datoteke za prekrivanje" - }, - "mode": { - "label": "Odaberite način preklapanja", - "sequential": "Sekvencijalno preklapanje", - "interleaved": "Isprepleteni sloj", - "fixedRepeat": "Popravljeni sloj ponavljanja" - }, - "counts": { - "label": "Brojevi preklapanja (za način fiksnog ponavljanja)", - "placeholder": "Unesite brojeve odvojene zarezima (npr. 2,3,1)" - }, - "position": { - "label": "Odaberite položaj preklapanja", - "foreground": "Prednji plan", - "background": "Pozadina" - }, - "submit": "Potvrditi" - }, - "split-by-sections": { - "tags": "Dijeljenje odjeljaka,Dijeljenje,Postavke", - "title": "Podijeli PDF po odjeljcima", - "header": "Podijeli PDF u odjeljke", - "horizontal": { - "label": "Vodoravne podjele", - "placeholder": "Unesite broj vodoravnih podjela" - }, - "vertical": { - "label": "Okomite podjele", - "placeholder": "Unesite broj okomitih podjela" - }, - "submit": "Razdvojiti PDF", - "merge": "Spoji u jedan PDF" - }, - "AddStampRequest": { - "tags": "Pečat, dodavanje slike, središnja slika, vodeni žig, PDF, ugradnja, prilagodba", - "header": "Pečat PDF", - "title": "Pečat PDF", - "stampType": "Pečat Tip", - "stampText": "Pečat Tekst", - "stampImage": "Pečat Slika", - "alphabet": "Abeceda", - "fontSize": "Veličina fonta/slike", - "rotation": "Rotacija", - "opacity": "Neprozirnost", - "position": "Položaj", - "overrideX": "Poništi X koordinatu", - "overrideY": "Poništi Y koordinatu", - "customMargin": "Prilagođena margina", - "customColor": "Prilagođena boja teksta", - "submit": "Pošalji" - }, - "removeImagePdf": { - "tags": "Ukloni sliku, Rad sa stranicama, Back end, server strana" - }, - "splitPdfByChapters": { - "tags": "podjela, glave, markere, organizacija" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "Validate PDF Signatures", - "header": "Validate Digital Signatures", - "selectPDF": "Select signed PDF file", - "submit": "Validate Signatures", - "results": "Validation Results", - "status": { - "_value": "Status", - "valid": "Valid", - "invalid": "Invalid" - }, - "signer": "Signer", - "date": "Date", - "reason": "Reason", - "location": "Location", - "noSignatures": "No digital signatures found in this document", - "chain": { - "invalid": "Certificate chain validation failed - cannot verify signer's identity" - }, - "trust": { - "invalid": "Certificate not in trust store - source cannot be verified" - }, - "cert": { - "expired": "Certificate has expired", - "revoked": "Certificate has been revoked", - "info": "Certificate Details", - "issuer": "Issuer", - "subject": "Subject", - "serialNumber": "Serial Number", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "algorithm": "Algorithm", - "keySize": "Key Size", - "version": "Version", - "keyUsage": "Key Usage", - "selfSigned": "Self-Signed", - "bits": "bits" - }, - "signature": { - "info": "Signature Information", - "_value": "Signature", - "mathValid": "Signature is mathematically valid BUT:" - }, - "selectCustomCert": "Custom Certificate File X.509 (Optional)" - }, - "replace-color": { - "title": "Replace-Invert-Color", - "header": "Zameni-inverziranje boja u PDF-u", - "selectText": { - "1": "Optije za zamenu ili inverziranje boja", - "2": "Standardno (standarske visoko kontrastne boje)", - "3": "Napčno (prilagođene boje)", - "4": "Cijelo-inverzirajte (inverzirajte sve boje)", - "5": "Optije visoko kontrastne boje", - "6": "Crna tekst na bijelu pozadini", - "7": "Bijeli tekst na crvenoj pozadini", - "8": "Žutni tekst na crnoj pozadini", - "9": "Zeleni tekst na crnoj pozadini", - "10": "Izaberite boju teksta", - "11": "Izaberite pozadinu boju" - }, - "submit": "Zamijeni" - }, - "replaceColorPdf": { - "tags": "Zameni boju, Rad sa stranicama, Back end, server strana" - }, - "login": { - "title": "Prijavite se", - "header": "Prijavite se", - "signin": "Prijavite se", - "rememberme": "Zapamti me", - "invalid": "Neispravno korisničko ime ili zaporka.", - "locked": "Vaš račun je zaključan.", - "signinTitle": "Molimo vas da se prijavite", - "ssoSignIn": "Prijavite se putem jedinstvene prijave", - "oAuth2AutoCreateDisabled": "OAUTH2 automatsko kreiranje korisnika je onemogućeno", - "oAuth2AdminBlockedUser": "Registracija ili prijava nekadreguiranih korisnika trenutno su blokirane. Molimo Vas da kontaktirate administratora.", - "oauth2RequestNotFound": "Zahtjev za autorizaciju nije pronađen", - "oauth2InvalidUserInfoResponse": "Nevažeće informacije o korisniku", - "oauth2invalidRequest": "Neispravan zahtjev", - "oauth2AccessDenied": "Pristup odbijen", - "oauth2InvalidTokenResponse": "Nevažeći odgovor tokena", - "oauth2InvalidIdToken": "Nevažeći ID token", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "Korisnik je deaktiviran, prijava sa ovim korisničkim imenom je trenutno zakazana. Molimo Vas da kontaktirate administratorske osobe.", - "alreadyLoggedIn": "Već ste se prijavili na", - "alreadyLoggedIn2": "ure. Odjavite se s ure i pokušajte ponovo.", - "toManySessions": "Imate preko mrežne sesije aktivnih", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF u Jednu Stranicu", - "header": "PDF u Jednu Stranicu", - "submit": "Pretvori u Jednu Stranicu" - }, - "pageExtracter": { - "title": "Izdvojiti stranice", - "header": "Izdvojiti stranice", - "submit": "Izdvoji", - "placeholder": "(t.j. 1,2,8 ili 4,7,12-16 ili 2n-1)" - }, - "sanitizePDF": { - "title": "Sanirajte PDF", - "header": "Sanirajte PDF datoteku", - "selectText": { - "1": "Ukloni JavaScript akcije", - "2": "Ukloni ugrađene datoteke", - "3": "Remove XMP metadata", - "4": "Ukloni poveznice", - "5": "Uklonite fontove", - "6": "Remove Document Info Metadata" - }, - "submit": "Sanirajte PDF" - }, - "adjustContrast": { - "title": "Podesite kontrast", - "header": "Podesite kontrast", - "contrast": "Kontrast:", - "brightness": "Osvjetljenje:", - "saturation": "Zasićenje:", - "download": "Preuzmi" - }, - "compress": { - "title": "Komprimirajte", - "header": "Komprimirajte PDF", - "credit": "Ova usluga koristi qpdf za komprimiranje / optimizaciju PDF-a.", - "grayscale": { - "label": "Primijeni sivinu za kompresiju" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Nivo optimizacije:", - "4": "Automatski način - Automatski prilagođava kvalitetu kako bi PDF dobio točnu veličinu", - "5": "Očekivana veličina PDF-a (npr. 25 MB, 10,8 MB, 25 KB)" - }, - "submit": "Kompresiraj" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "This feature is also available in our multi-tool page. Check it out for enhanced page-by-page UI and additional features!" - }, - "pageRemover": { - "title": "Uklanjanje stranica", - "header": "Uklanjanje stranica iz PDF-a", - "pagesToDelete": "Stranice za brisanje (Unesite listu brojeva stranica odvojenih zarezima) :", - "submit": "Obriši stranice", - "placeholder": "(npr. 1,2,6 ili 1-10,15-30)" - }, - "imageToPDF": { - "title": "Slika u PDF", - "header": "Slika u PDF", - "submit": "Pretvori", - "selectLabel": "Opcije prilagodbe slike", - "fillPage": "Ispuni stranicu", - "fitDocumentToImage": "Prilagodi stranicu slici", - "maintainAspectRatio": "Sačuvaj omjere slike", - "selectText": { - "2": "Automatsko zaktretanje PDF-a", - "3": "Logika više datoteka (omogućeno samo ako radite s više slika)", - "4": "Spojite u jedan PDF", - "5": "Pretvori u zasebne PDF-ove" - } - }, - "PDFToCSV": { - "title": "PDF u CSV", - "header": "PDF u CSV", - "prompt": "Odaberite stranicu za izdvajanje tablice", - "submit": "Izvuci" - }, - "split-by-size-or-count": { - "title": "Podijeli PDF prema veličini ili broju", - "header": "Podijeli PDF prema veličini ili broju", - "type": { - "label": "Odaberite vrstu dijeljenja", - "size": "Po veličini", - "pageCount": "Po broju stranica", - "docCount": "Po broju dokumenata" - }, - "value": { - "label": "Unesite vrijednost", - "placeholder": "Unesite veličinu (npr. 2MB ili 3KB) ili broj (npr. 5)" - }, - "submit": "Potvrdite" - }, - "printFile": { - "title": "Ispis datoteke", - "header": "Ispis datoteke na pisač", - "selectText": { - "1": "Odaberite Datoteku za ispis", - "2": "Unesite naziv pisača" - }, - "submit": "Ispis" - }, - "licenses": { - "nav": "Licence", - "title": "Licence treće strane", - "header": "Licence treće strane", - "module": "Modul", - "version": "Verzija", - "license": "Licenca" - }, - "survey": { - "nav": "Upitnica", - "title": "Stirling-PDF Upitnica", - "description": "Stirling-PDF nema praćenje pa želimo svesnost korisnika da bi poboljšali Stirling-PDF!", - "changes": "Stirling-PDF je promenjen od poslednje upitnice! Za više informacija, proverite naš blog ovdje:", - "changes2": "S ovim promenama dobivamo platnu podršku i financiranje poslovnim aktivnostima", - "please": "Please consider taking our survey!", - "disabled": "(Upitnica popup će biti onemogućena u sljedećim ažuracanjima aliće se nalaziti na dnu stranice)", - "button": "Izvrsi upitnicu", - "dontShowAgain": "Ne prikazujući ponovo", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Ukloni sliku", - "header": "Ukloni sliku", - "removeImage": "Ukloni sliku", - "submit": "Izbriši sliku" - }, - "splitByChapters": { - "title": "Podijeli PDF naoglazdene glave", - "header": "Podijeli PDF naoglazdene glave", - "bookmarkLevel": "Nivo oznaka", - "includeMetadata": "Uključi metapodatke", - "allowDuplicates": "Dopuštaj duplikate", - "desc": { - "1": "Ova alatka podijeli PDF datoteku u više PDFa na teme njene strukture glava.", - "2": "Nivo oznaka: Odaberite nivo oznaka koji će se koristiti za podjelu (0 za prvi nivo, 1 za drugi nivo itd.).", - "3": "Uključi metapodatke: Ako je pokušano, metapodaci iz originalne PDF datoteke će biti uključeni u svaku podijeljenu PDF datoteku.", - "4": "Dopuštaj duplikate: Ako je ova opcija zaštićena, dozvoljava se da se na istoj strani mogu stvoriti posebne PDF datoteke s više oznaka." - }, - "submit": "Podijeli PDF" - }, - "fileChooser": { - "click": "Click", - "or": "or", - "dragAndDrop": "Drag & Drop", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "Drag & Drop file(s) here", - "extractPDF": "Extracting..." - }, - "releases": { - "footer": "Releases", - "title": "Release Notes", - "header": "Release Notes", - "current": { - "version": "Current Release" - }, - "note": "Release notes are only available in English" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/hu-HU/translation.json b/frontend/dist/locales/hu-HU/translation.json deleted file mode 100644 index 886811a76..000000000 --- a/frontend/dist/locales/hu-HU/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Betűméret", - "fontName": "Betűtípus", - "title": "Oldalszámozás hozzáadása", - "header": "Oldalszámozás hozzáadása", - "selectText": { - "1": "PDF fájl kiválasztása:", - "2": "Margó mérete", - "3": "Pozíció", - "4": "Kezdő szám", - "5": "Számozandó oldalak", - "6": "Egyedi szöveg" - }, - "customTextDesc": "Egyedi szöveg", - "numberPagesDesc": "Mely oldalakat számozzuk, alapértelmezett 'mind', elfogad 1-5 vagy 2,5,9 formátumot is", - "customNumberDesc": "Alapértelmezett {n}, elfogad 'Oldal {n} / {total}', 'Szöveg-{n}', '{filename}-{n}' formátumot", - "submit": "Oldalszámozás hozzáadása" - }, - "pdfPrompt": "PDF-fájl kiválasztása", - "multiPdfPrompt": "PDF-fájlok kiválasztása (2+)", - "multiPdfDropPrompt": "Válassza ki (vagy húzza ide) az összes szükséges PDF-fájlt", - "imgPrompt": "Kép kiválasztása", - "genericSubmit": "Küldés", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "túl nagy. A maximálisan megengedett méret", - "uploadLimitExceededPlural": "túl nagyok. A maximálisan megengedett méretek", - "processTimeWarning": "Figyelmeztetés: A folyamat akár egy percig is eltarthat a fájlmérettől függően", - "pageOrderPrompt": "Egyedi oldalsorrend (Adja meg az oldalszámokat vesszővel elválasztva vagy használjon függvényeket, pl. 2n+1):", - "pageSelectionPrompt": "Egyedi oldalválasztás (Adja meg az oldalszámokat vesszővel elválasztva, pl. 1,5,6 vagy használjon függvényeket, pl. 2n+1):", - "goToPage": "Ugrás", - "true": "Igen", - "false": "Nem", - "unknown": "Ismeretlen", - "save": "Mentés", - "saveToBrowser": "Mentés böngészőbe", - "close": "Bezárás", - "filesSelected": "fájl kiválasztva", - "noFavourites": "Nincsenek kedvencek", - "downloadComplete": "Letöltés befejezve", - "bored": "Unatkozik várakozás közben?", - "alphabet": "ABC", - "downloadPdf": "PDF letöltése", - "text": "Szöveg", - "font": "Betűtípus", - "selectFillter": "-- Válasszon --", - "pageNum": "Oldalszám", - "sizes": { - "small": "Kicsi", - "medium": "Közepes", - "large": "Nagy", - "x-large": "Extra nagy" - }, - "error": { - "pdfPassword": "A PDF-dokumentum jelszóval védett, és vagy nem adott meg jelszót, vagy helytelen jelszót adott meg", - "_value": "Hiba", - "sorry": "Sajnáljuk a kellemetlenséget!", - "needHelp": "Segítségre van szüksége / Hibát talált?", - "contactTip": "Ha továbbra is problémákba ütközik, ne habozzon segítséget kérni. Bejelenthet hibát GitHub oldalunkon vagy felkereshet minket Discordon:", - "404": { - "head": "404 - Az oldal nem található | Hoppá, eltévedtünk a kódban!", - "1": "A keresett oldal nem található.", - "2": "Valami hiba történt" - }, - "github": "Hiba bejelentése GitHubon", - "showStack": "Stacktrace megjelenítése", - "copyStack": "Stacktrace másolása", - "githubSubmit": "GitHub - Hiba bejelentése", - "discordSubmit": "Discord - Támogatási poszt létrehozása" - }, - "delete": "Törlés", - "username": "Felhasználónév", - "password": "Jelszó", - "welcome": "Üdvözöljük", - "property": "Tulajdonság", - "black": "Fekete", - "white": "Fehér", - "red": "Piros", - "green": "Zöld", - "blue": "Kék", - "custom": "Egyéni...", - "WorkInProgess": "Fejlesztés alatt álló funkció, hibák előfordulhatnak. Kérjük, jelezze a problémákat!", - "poweredBy": "Üzemelteti:", - "yes": "Igen", - "no": "Nem", - "changedCredsMessage": "A hitelesítési adatok megváltoztak!", - "notAuthenticatedMessage": "A felhasználó nincs hitelesítve.", - "userNotFoundMessage": "A felhasználó nem található.", - "incorrectPasswordMessage": "A jelenlegi jelszó helytelen.", - "usernameExistsMessage": "Ez a felhasználónév már létezik.", - "invalidUsernameMessage": "Érvénytelen felhasználónév. A felhasználónév csak betűket, számokat és a következő speciális karaktereket tartalmazhatja: @._+- vagy érvényes e-mail címnek kell lennie.", - "invalidPasswordMessage": "A jelszó nem lehet üres, és nem tartalmazhat szóközt az elején vagy végén.", - "confirmPasswordErrorMessage": "Az új jelszó és a jelszó megerősítése nem egyezik.", - "deleteCurrentUserMessage": "A jelenleg bejelentkezett felhasználó nem törölhető.", - "deleteUsernameExistsMessage": "A felhasználónév nem létezik, ezért nem törölhető.", - "downgradeCurrentUserMessage": "A jelenlegi felhasználó jogosultsági szintje nem csökkenthető", - "disabledCurrentUserMessage": "A jelenlegi felhasználó nem tiltható le", - "downgradeCurrentUserLongMessage": "A jelenlegi felhasználó jogosultsági szintje nem csökkenthető. Ezért a jelenlegi felhasználó nem jelenik meg.", - "userAlreadyExistsOAuthMessage": "A felhasználó már létezik OAuth2 felhasználóként.", - "userAlreadyExistsWebMessage": "A felhasználó már létezik webes felhasználóként.", - "oops": "Hoppá!", - "help": "Súgó", - "goHomepage": "Kezdőlap", - "joinDiscord": "Csatlakozzon Discord szerverünkhöz", - "seeDockerHub": "Docker Hub megtekintése", - "visitGithub": "GitHub tároló megtekintése", - "donate": "Támogatás", - "color": "Szín", - "sponsor": "Támogató", - "info": "Információ", - "pro": "Pro", - "page": "Oldal", - "pages": "Oldal", - "loading": "Betöltés...", - "addToDoc": "Hozzáadás a dokumentumhoz", - "reset": "Visszaállítás", - "apply": "Alkalmaz", - "noFileSelected": "Nincs fájl kiválasztva. Kérjük, töltsön fel egyet.", - "legal": { - "privacy": "Adatvédelmi irányelvek", - "terms": "Felhasználási feltételek", - "accessibility": "Akadálymentesítési nyilatkozat", - "cookie": "Süti szabályzat", - "impressum": "Impresszum", - "showCookieBanner": "Süti beállítások" - }, - "pipeline": { - "header": "Pipeline menü (Béta)", - "uploadButton": "Egyéni feltöltés", - "configureButton": "Beállítás", - "defaultOption": "Egyéni", - "submitButton": "Küldés", - "help": "Pipeline súgó", - "scanHelp": "Mappafigyelés súgó", - "deletePrompt": "Biztosan törli a pipeline-t?", - "tags": "automatizálás,szekvencia,szkriptelt,kötegelt feldolgozás", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Pipeline beállítások", - "pipelineNameLabel": "Pipeline neve", - "saveSettings": "Műveleti beállítások mentése", - "pipelineNamePrompt": "Adja meg a pipeline nevét", - "selectOperation": "Művelet kiválasztása", - "addOperationButton": "Művelet hozzáadása", - "pipelineHeader": "Pipeline:", - "saveButton": "Letöltés", - "validateButton": "Ellenőrzés" - }, - "enterpriseEdition": { - "button": "Váltás Pro verzióra", - "warning": "Ez a funkció csak Pro felhasználók számára érhető el.", - "yamlAdvert": "A Stirling PDF Pro támogatja a YAML konfigurációs fájlokat és egyéb SSO funkciókat.", - "ssoAdvert": "Több felhasználókezelési funkcióra van szüksége? Tekintse meg a Stirling PDF Pro verzióját!" - }, - "analytics": { - "title": "Szeretne hozzájárulni a Stirling PDF fejlesztéséhez?", - "paragraph1": "A Stirling PDF opcionális analitikai adatgyűjtést kínál a termék fejlesztésének támogatásához. Nem gyűjtünk személyes információkat vagy fájltartalmakat.", - "paragraph2": "Kérjük, fontolja meg az analitika engedélyezését, hogy segítse a Stirling-PDF növekedését és jobban megérthessük felhasználóink igényeit.", - "enable": "Analitika engedélyezése", - "disable": "Analitika letiltása", - "settings": "Az analitikai beállításokat a config/settings.yml fájlban módosíthatja" - }, - "navbar": { - "favorite": "Kedvencek", - "recent": "New and recently updated", - "darkmode": "Sötét mód", - "language": "Nyelvek", - "settings": "Beállítások", - "allTools": "Eszközök", - "multiTool": "Többfunkciós eszköz", - "search": "Keresés", - "sections": { - "organize": "Rendszerezés", - "convertTo": "Konvertálás PDF-be", - "convertFrom": "Konvertálás PDF-ből", - "security": "Aláírás és biztonság", - "advance": "Haladó", - "edit": "Megtekintés és szerkesztés", - "popular": "Népszerű" - } - }, - "settings": { - "title": "Beállítások", - "update": "Frissítés elérhető", - "updateAvailable": "A jelenlegi telepített verzió: {0}. Új verzió ({1}) érhető el.", - "appVersion": "Alkalmazás verziója:", - "downloadOption": { - "title": "Letöltési beállítás (egyetlen fájl, nem tömörített letöltések esetén):", - "1": "Megnyitás ugyanabban az ablakban", - "2": "Megnyitás új ablakban", - "3": "Fájl letöltése" - }, - "zipThreshold": "Fájlok tömörítése, ha a letöltött fájlok száma meghaladja:", - "signOut": "Kijelentkezés", - "accountSettings": "Fiókbeállítások", - "bored": { - "help": "Easter egg játék engedélyezése" - }, - "cacheInputs": { - "name": "Űrlapmezők mentése", - "help": "Engedélyezése esetén menti a korábban használt értékeket a későbbi használathoz" - } - }, - "changeCreds": { - "title": "Hitelesítési adatok módosítása", - "header": "Fiókadatok frissítése", - "changePassword": "Az alapértelmezett bejelentkezési adatokat használja. Kérjük, adjon meg új jelszót", - "newUsername": "Új felhasználónév", - "oldPassword": "Jelenlegi jelszó", - "newPassword": "Új jelszó", - "confirmNewPassword": "Új jelszó megerősítése", - "submit": "Változtatások mentése" - }, - "account": { - "title": "Fiókbeállítások", - "accountSettings": "Fiókbeállítások", - "adminSettings": "Rendszergazdai beállítások - Felhasználók kezelése", - "userControlSettings": "Felhasználói jogosultságok", - "changeUsername": "Felhasználónév módosítása", - "newUsername": "Új felhasználónév", - "password": "Jelszó megerősítése", - "oldPassword": "Régi jelszó", - "newPassword": "Új jelszó", - "changePassword": "Jelszó módosítása", - "confirmNewPassword": "Új jelszó megerősítése", - "signOut": "Kijelentkezés", - "yourApiKey": "Az Ön API kulcsa", - "syncTitle": "Böngészőbeállítások szinkronizálása a fiókkal", - "settingsCompare": "Beállítások összehasonlítása:", - "property": "Tulajdonság", - "webBrowserSettings": "Böngészőbeállítások", - "syncToBrowser": "Szinkronizálás: Fiók -> Böngésző", - "syncToAccount": "Szinkronizálás: Böngésző -> Fiók" - }, - "adminUserSettings": { - "title": "Felhasználókezelés", - "header": "Rendszergazdai felhasználókezelés", - "admin": "Rendszergazda", - "user": "Felhasználó", - "addUser": "Új felhasználó", - "deleteUser": "Felhasználó törlése", - "confirmDeleteUser": "Biztosan törli a felhasználót?", - "confirmChangeUserStatus": "Biztosan módosítja a felhasználó állapotát?", - "usernameInfo": "A felhasználónév csak betűket, számokat és a következő speciális karaktereket tartalmazhatja: @._+- vagy érvényes e-mail címnek kell lennie.", - "roles": "Szerepkörök", - "role": "Szerepkör", - "actions": "Műveletek", - "apiUser": "Korlátozott API felhasználó", - "extraApiUser": "További korlátozott API felhasználó", - "webOnlyUser": "Csak webes felhasználó", - "demoUser": "Demo felhasználó (egyedi beállítások nélkül)", - "internalApiUser": "Belső API felhasználó", - "forceChange": "Jelszóváltoztatás kikényszerítése bejelentkezéskor", - "submit": "Felhasználó mentése", - "changeUserRole": "Felhasználói szerepkör módosítása", - "authenticated": "Hitelesített", - "editOwnProfil": "Saját profil szerkesztése", - "enabledUser": "Aktív felhasználó", - "disabledUser": "Letiltott felhasználó", - "activeUsers": "Aktív felhasználók:", - "disabledUsers": "Letiltott felhasználók:", - "totalUsers": "Összes felhasználó:", - "lastRequest": "Utolsó kérés", - "usage": "Használat megtekintése" - }, - "endpointStatistics": { - "title": "Végpont Statisztika", - "header": "Végpont Statisztika", - "top10": "Top 10", - "top20": "Top 20", - "all": "Összes", - "refresh": "Frissítés", - "includeHomepage": "Tartalmazza a honlapot ('/')", - "includeLoginPage": "Tartalmazza a bejelentkezési oldat ('/login')", - "totalEndpoints": "Összes végpont", - "totalVisits": "Összes megtekintés", - "showing": "Mutatás", - "selectedVisits": "Kiválasztott megtekintések", - "endpoint": "Végpont", - "visits": "Megtekintések", - "percentage": "Százalék", - "loading": "Betöltés...", - "failedToLoad": "Nem sikerült betölteni a végpont adatokat. Próbálja meg frissíteni.", - "home": "Kezdőlap", - "login": "Bejelentkezés", - "top": "Legnépszerűbb", - "numberOfVisits": "Megtekintések száma", - "visitsTooltip": "Megtekintések: {0} ({1}% az összes megtekintésből)", - "retry": "Újrapróbálás" - }, - "database": { - "title": "Adatbázis importálás/exportálás", - "header": "Adatbázis importálás/exportálás", - "fileName": "Fájlnév", - "creationDate": "Létrehozás dátuma", - "fileSize": "Fájlméret", - "deleteBackupFile": "Biztonsági mentés törlése", - "importBackupFile": "Biztonsági mentés importálása", - "createBackupFile": "Biztonsági mentés létrehozása", - "downloadBackupFile": "Biztonsági mentés letöltése", - "info_1": "Az adatok importálásakor kritikus fontosságú a helyes struktúra biztosítása. Ha nem biztos a dolgában, kérjen szakértői segítséget. A helytelen struktúra alkalmazáshibákat okozhat, akár az alkalmazás teljes működésképtelenségét is eredményezheti.", - "info_2": "A fájl neve feltöltéskor nem lényeges. Később átnevezésre kerül az egységes backup_user_yyyyMMddHHmm.sql formátumra.", - "submit": "Biztonsági mentés importálása", - "importIntoDatabaseSuccessed": "Az adatbázis importálása sikeres", - "backupCreated": "Adatbázis biztonsági mentése sikeres", - "fileNotFound": "A fájl nem található", - "fileNullOrEmpty": "A fájl nem lehet üres", - "failedImportFile": "A fájl importálása sikertelen", - "notSupported": "Ez a funkció nem érhető el az adatbázis-kapcsolatához." - }, - "session": { - "expired": "A munkamenet lejárt. Kérjük, frissítse az oldalt és próbálja újra.", - "refreshPage": "Oldal frissítése" - }, - "home": { - "desc": "Az Ön helyi PDF-szükségleteinek teljes körű megoldása.", - "searchBar": "Funkciók keresése...", - "viewPdf": { - "title": "PDF Megtekintése/Szerkesztése", - "desc": "Megtekintés, jegyzetelés, szöveg vagy képek hozzáadása" - }, - "setFavorites": "Kedvencek beállítása", - "hideFavorites": "Kedvencek elrejtése", - "showFavorites": "Kedvencek megjelenítése", - "legacyHomepage": "Régi kezdőlap", - "newHomePage": "Próbálja ki új kezdőlapunkat!", - "alphabetical": "ABC sorrend", - "globalPopularity": "Teljes népszerűség", - "sortBy": "Rendezés:", - "multiTool": { - "title": "PDF többfunkciós eszköz", - "desc": "Egyesítés, forgatás, átrendezés és oldalak eltávolítása" - }, - "merge": { - "title": "Egyesítés", - "desc": "PDF-ek egyszerű egyesítése." - }, - "split": { - "title": "Felosztás", - "desc": "PDF-ek felosztása több dokumentumra" - }, - "rotate": { - "title": "Forgatás", - "desc": "PDF-ek egyszerű forgatása." - }, - "imageToPdf": { - "title": "Kép PDF-be", - "desc": "Kép (PNG, JPEG, GIF) konvertálása PDF-fé." - }, - "pdfToImage": { - "title": "PDF képpé", - "desc": "PDF konvertálása képpé (PNG, JPEG, GIF)." - }, - "pdfOrganiser": { - "title": "Rendszerezés", - "desc": "Oldalak eltávolítása/átrendezése tetszőleges sorrendben" - }, - "addImage": { - "title": "Kép hozzáadása", - "desc": "Kép hozzáadása a PDF megadott helyére" - }, - "watermark": { - "title": "Vízjel hozzáadása", - "desc": "Egyedi vízjel hozzáadása PDF dokumentumhoz" - }, - "permissions": { - "title": "Jogosultságok módosítása", - "desc": "PDF dokumentum jogosultságainak módosítása" - }, - "removePages": { - "title": "Eltávolítás", - "desc": "Felesleges oldalak törlése a PDF dokumentumból." - }, - "addPassword": { - "title": "Jelszó hozzáadása", - "desc": "PDF dokumentum jelszavas védelme" - }, - "removePassword": { - "title": "Jelszó eltávolítása", - "desc": "Jelszavas védelem eltávolítása a PDF dokumentumból" - }, - "compressPdfs": { - "title": "Tömörítés", - "desc": "PDF-ek tömörítése a fájlméret csökkentése érdekében" - }, - "unlockPDFForms": { - "title": "PDF űrlapok feloldása", - "desc": "PDF dokumentumban lévő űrlapmezők írásvédettségének eltávolítása." - }, - "changeMetadata": { - "title": "Metaadatok módosítása", - "desc": "PDF dokumentum metaadatainak módosítása/törlése/hozzáadása" - }, - "fileToPDF": { - "title": "Fájl konvertálása PDF-be", - "desc": "Szinte bármilyen fájl konvertálása PDF-be (DOCX, PNG, XLS, PPT, TXT és egyebek)" - }, - "ocr": { - "title": "OCR / Szkennelt dokumentumok tisztítása", - "desc": "Szkennelt dokumentumok tisztítása és szövegfelismerés képekből, majd visszaadása szerkeszthető szövegként" - }, - "extractImages": { - "title": "Képek kinyerése", - "desc": "Minden kép kinyerése a PDF-ből és mentése ZIP fájlba" - }, - "pdfToPDFA": { - "title": "PDF konvertálása PDF/A formátumba", - "desc": "PDF konvertálása PDF/A formátumba hosszú távú tároláshoz" - }, - "PDFToWord": { - "title": "PDF konvertálása Word formátumba", - "desc": "PDF konvertálása Word formátumokba (DOC, DOCX és ODT)" - }, - "PDFToPresentation": { - "title": "PDF konvertálása prezentációvá", - "desc": "PDF konvertálása prezentációs formátumokba (PPT, PPTX és ODP)" - }, - "PDFToText": { - "title": "PDF konvertálása RTF szöveggé", - "desc": "PDF konvertálása szöveg vagy RTF formátumba" - }, - "PDFToHTML": { - "title": "PDF konvertálása HTML-be", - "desc": "PDF konvertálása HTML formátumba" - }, - "PDFToXML": { - "title": "PDF konvertálása XML-be", - "desc": "PDF konvertálása XML formátumba" - }, - "ScannerImageSplit": { - "title": "Szkennelt képek felismerése/szétválasztása", - "desc": "Több fotó szétválasztása egy képből/PDF-ből" - }, - "sign": { - "title": "Aláírás", - "desc": "Aláírás hozzáadása PDF-hez rajzolással, szöveggel vagy képpel" - }, - "flatten": { - "title": "Lapítás", - "desc": "Minden interaktív elem és űrlap eltávolítása a PDF-ből" - }, - "repair": { - "title": "Javítás", - "desc": "Sérült/hibás PDF javítása" - }, - "removeBlanks": { - "title": "Üres oldalak eltávolítása", - "desc": "Üres oldalak felismerése és eltávolítása a dokumentumból" - }, - "removeAnnotations": { - "title": "Megjegyzések eltávolítása", - "desc": "Minden megjegyzés/annotáció eltávolítása a PDF-ből" - }, - "compare": { - "title": "Összehasonlítás", - "desc": "Két PDF dokumentum összehasonlítása és különbségek megjelenítése" - }, - "certSign": { - "title": "Tanúsítvánnyal aláírás", - "desc": "PDF aláírása tanúsítvánnyal/kulccsal (PEM/P12)" - }, - "removeCertSign": { - "title": "Tanúsítványos aláírás eltávolítása", - "desc": "Tanúsítványos aláírás eltávolítása PDF-ből" - }, - "pageLayout": { - "title": "Többoldalas elrendezés", - "desc": "PDF dokumentum több oldalának egyesítése egyetlen oldalra" - }, - "scalePages": { - "title": "Oldalméret/méretarány beállítása", - "desc": "Oldal és/vagy tartalom méretének/méretarányának módosítása" - }, - "pipeline": { - "title": "Pipeline", - "desc": "Több művelet végrehajtása PDF-eken pipeline szkriptek definiálásával" - }, - "add-page-numbers": { - "title": "Oldalszámozás hozzáadása", - "desc": "Oldalszámok hozzáadása a dokumentumhoz meghatározott helyen" - }, - "auto-rename": { - "title": "PDF automatikus átnevezése", - "desc": "PDF fájl automatikus átnevezése a felismert fejléc alapján" - }, - "adjust-contrast": { - "title": "Színek/kontraszt beállítása", - "desc": "PDF kontraszt, telítettség és fényerő beállítása" - }, - "crop": { - "title": "PDF vágása", - "desc": "PDF vágása a méret csökkentése érdekében (a szöveg megmarad!)" - }, - "autoSplitPDF": { - "title": "Automatikus oldalfelosztás", - "desc": "Szkennelt PDF automatikus felosztása QR-kód alapú oldalelválasztóval" - }, - "sanitizePdf": { - "title": "Tisztítás", - "desc": "Szkriptek és egyéb elemek eltávolítása PDF fájlokból" - }, - "URLToPDF": { - "title": "URL/Weboldal PDF-be", - "desc": "Bármely http(s) URL konvertálása PDF-be" - }, - "HTMLToPDF": { - "title": "HTML konvertálása PDF-be", - "desc": "HTML fájl vagy ZIP konvertálása PDF-be" - }, - "MarkdownToPDF": { - "title": "Markdown konvertálása PDF-be", - "desc": "Markdown fájl konvertálása PDF-be" - }, - "PDFToMarkdown": { - "title": "PDF konvertálása Markdown-ba", - "desc": "Akármilyen PDF konvertálása Markdown-ba" - }, - "getPdfInfo": { - "title": "PDF összes információjának lekérése", - "desc": "Minden elérhető információ lekérése PDF-ekről" - }, - "extractPage": { - "title": "Oldalak kinyerése", - "desc": "Kiválasztott oldalak kinyerése PDF-ből" - }, - "PdfToSinglePage": { - "title": "Egyoldalas nagy PDF", - "desc": "Minden PDF oldal egyesítése egyetlen nagy oldalba" - }, - "showJS": { - "title": "JavaScript megjelenítése", - "desc": "PDF-be injektált JavaScript kód keresése és megjelenítése" - }, - "autoRedact": { - "title": "Automatikus kitakarás", - "desc": "Szöveg automatikus kitakarása (feketével) PDF-ben megadott szöveg alapján" - }, - "redact": { - "title": "Kézi kitakarás", - "desc": "PDF kitakarása kiválasztott szöveg, rajzolt alakzatok és/vagy kiválasztott oldalak alapján" - }, - "tableExtraxt": { - "title": "PDF konvertálása CSV-be", - "desc": "Táblázatok kinyerése PDF-ből és konvertálása CSV formátumba" - }, - "autoSizeSplitPDF": { - "title": "Automatikus felosztás méret/darabszám szerint", - "desc": "Egyetlen PDF felosztása több dokumentumra méret, oldalszám vagy dokumentumszám alapján" - }, - "overlay-pdfs": { - "title": "PDF-ek egymásra helyezése", - "desc": "PDF-ek egymásra helyezése egy másik PDF-en" - }, - "split-by-sections": { - "title": "PDF felosztása szakaszokra", - "desc": "PDF oldalainak felosztása kisebb vízszintes és függőleges szakaszokra" - }, - "AddStampRequest": { - "title": "Pecsét hozzáadása PDF-hez", - "desc": "Szöveges vagy képes pecsét hozzáadása megadott helyekre" - }, - "removeImagePdf": { - "title": "Képek eltávolítása", - "desc": "Képek eltávolítása PDF-ből a fájlméret csökkentése érdekében" - }, - "splitPdfByChapters": { - "title": "PDF felosztása fejezetek szerint", - "desc": "PDF felosztása több fájlra a fejezetstruktúra alapján" - }, - "validateSignature": { - "title": "PDF aláírás ellenőrzése", - "desc": "Digitális aláírások és tanúsítványok ellenőrzése PDF dokumentumokban" - }, - "replaceColorPdf": { - "title": "Színek cseréje és invertálása", - "desc": "PDF szöveg és háttérszíneinek cseréje és teljes színinvertálás a fájlméret csökkentése érdekében" - } - }, - "viewPdf": { - "tags": "megtekintés,olvasás,jegyzetelés,szöveg,kép", - "title": "PDF megtekintése/szerkesztése", - "header": "PDF megtekintése" - }, - "multiTool": { - "tags": "Többfunkciós eszköz,Több művelet,UI,húzd és ejtsd,frontend,kliens oldali,interaktív,kezelhető,mozgatás", - "title": "PDF többfunkciós eszköz", - "header": "PDF többfunkciós eszköz", - "uploadPrompts": "Fájlnév", - "selectAll": "Összes kijelölése", - "deselectAll": "Kijelölés megszüntetése", - "selectPages": "Oldal kiválasztása", - "selectedPages": "Kiválasztott oldalak", - "page": "Oldal", - "deleteSelected": "Kijelöltek törlése", - "downloadAll": "Exportálás", - "downloadSelected": "Kijelöltek exportálása", - "insertPageBreak": "Oldaltörés beszúrása", - "addFile": "Fájl hozzáadása", - "rotateLeft": "Forgatás balra", - "rotateRight": "Forgatás jobbra", - "split": "Felosztás", - "moveLeft": "Mozgatás balra", - "moveRight": "Mozgatás jobbra", - "delete": "Törlés", - "dragDropMessage": "Oldal(ak) kiválasztva", - "undo": "Visszavonás", - "redo": "Újra" - }, - "merge": { - "tags": "egyesítés,Oldalműveletek,Backend,szerver oldali", - "title": "Egyesítés", - "header": "Több PDF egyesítése (2+)", - "sortByName": "Rendezés név szerint", - "sortByDate": "Rendezés dátum szerint", - "removeCertSign": "Digitális aláírás eltávolítása az egyesített fájlban?", - "submit": "Egyesítés" - }, - "split": { - "tags": "Oldalműveletek,felosztás,Több oldal,vágás,szerver oldali", - "title": "PDF felosztása", - "header": "PDF felosztása", - "desc": { - "1": "A kiválasztott számok a felosztási pontokat jelölik", - "2": "Például az 1,3,7-9 kiválasztása egy 10 oldalas dokumentumot 6 külön PDF-re oszt:", - "3": "1. dokumentum: 1. oldal", - "4": "2. dokumentum: 2-3. oldal", - "5": "3. dokumentum: 4-7. oldal", - "6": "4. dokumentum: 8. oldal", - "7": "5. dokumentum: 9. oldal", - "8": "6. dokumentum: 10. oldal" - }, - "splitPages": "Adja meg a felosztási pontokat:", - "submit": "Felosztás" - }, - "rotate": { - "tags": "szerver oldali", - "title": "PDF forgatása", - "header": "PDF forgatása", - "selectAngle": "Válassza ki a forgatási szöget (90 fok többszörösei):", - "submit": "Forgatás" - }, - "imageToPdf": { - "tags": "konverzió,kép,jpg,fotó,fénykép" - }, - "pdfToImage": { - "tags": "konverzió,kép,jpg,fotó,fénykép", - "title": "PDF képpé alakítása", - "header": "PDF képpé alakítása", - "selectText": "Képformátum", - "singleOrMultiple": "Kimeneti típus", - "single": "Egyetlen nagy kép", - "multi": "Több kép, oldalanként egy", - "colorType": "Színtípus", - "color": "Színes", - "grey": "Szürkeárnyalatos", - "blackwhite": "Fekete-fehér (adatvesztéssel járhat!)", - "submit": "Konvertálás", - "info": "Python nincs telepítve. WebP konverzióhoz szükséges.", - "placeholder": "(pl. 1,2,8 vagy 4,7,12-16 vagy 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,páros,páratlan,rendezés,mozgatás", - "title": "Oldalszervező", - "header": "PDF oldalszervező", - "submit": "Oldalak átrendezése", - "mode": { - "_value": "Mód", - "1": "Egyedi oldalsorrend", - "2": "Fordított sorrend", - "3": "Duplex rendezés", - "4": "Füzet rendezés", - "5": "Oldalról fűzött füzet rendezés", - "6": "Páros-páratlan szétválasztás", - "7": "Első oldal eltávolítása", - "8": "Utolsó oldal eltávolítása", - "9": "Első és utolsó oldal eltávolítása", - "10": "Páros-páratlan egyesítés", - "11": "Minden oldal megkettőzése" - }, - "placeholder": "(pl. 1,3,2 vagy 4-8,2,10-12 vagy 2n-1)" - }, - "addImage": { - "tags": "kép,jpg,fotó,fénykép", - "title": "Kép hozzáadása", - "header": "Kép hozzáadása PDF-hez", - "everyPage": "Minden oldalra?", - "upload": "Kép hozzáadása", - "submit": "Kép hozzáadása" - }, - "watermark": { - "tags": "Szöveg,ismétlődő,címke,egyedi,szerzői jog,védjegy,kép,jpg,fotó,fénykép", - "title": "Vízjel hozzáadása", - "header": "Vízjel hozzáadása", - "customColor": "Egyedi szövegszín", - "selectText": { - "1": "Válassza ki a PDF-et a vízjel hozzáadásához:", - "2": "Vízjel szövege:", - "3": "Betűméret:", - "4": "Forgatás (0-360):", - "5": "Vízszintes térköz (Vízjelek közötti vízszintes távolság):", - "6": "Függőleges térköz (Vízjelek közötti függőleges távolság):", - "7": "Átlátszóság (0% - 100%):", - "8": "Vízjel típusa:", - "9": "Vízjel képe:", - "10": "PDF konvertálása PDF-képpé" - }, - "submit": "Vízjel hozzáadása", - "type": { - "1": "Szöveg", - "2": "Kép" - } - }, - "permissions": { - "tags": "olvasás,írás,szerkesztés,nyomtatás", - "title": "Jogosultságok módosítása", - "header": "Jogosultságok módosítása", - "warning": "Figyelem: A jogosultságok véglegesítéséhez ajánlott jelszavas védelmet beállítani a jelszó hozzáadása funkción keresztül", - "selectText": { - "1": "Válassza ki a módosítandó PDF-et", - "2": "Beállítandó jogosultságok", - "3": "Dokumentum egyesítésének megakadályozása", - "4": "Tartalom kinyerésének megakadályozása", - "5": "Akadálymentesítési célú kinyerés megakadályozása", - "6": "Űrlapkitöltés megakadályozása", - "7": "Módosítás megakadályozása", - "8": "Megjegyzések módosításának megakadályozása", - "9": "Nyomtatás megakadályozása", - "10": "Különböző formátumú nyomtatás megakadályozása" - }, - "submit": "Módosítás" - }, - "removePages": { - "tags": "Oldalak eltávolítása,oldalak törlése" - }, - "addPassword": { - "tags": "biztonság,védelem", - "title": "Jelszó hozzáadása", - "header": "Jelszó hozzáadása (Titkosítás)", - "selectText": { - "1": "Válassza ki a titkosítandó PDF-et", - "2": "Felhasználói jelszó", - "3": "Titkosítási kulcs hossza", - "4": "A magasabb értékek erősebbek, de az alacsonyabb értékek jobb kompatibilitást biztosítanak.", - "5": "Beállítandó jogosultságok (Tulajdonosi jelszóval ajánlott használni)", - "6": "Dokumentum egyesítésének megakadályozása", - "7": "Tartalom kinyerésének megakadályozása", - "8": "Akadálymentesítési célú kinyerés megakadályozása", - "9": "Űrlapkitöltés megakadályozása", - "10": "Módosítás megakadályozása", - "11": "Megjegyzések módosításának megakadályozása", - "12": "Nyomtatás megakadályozása", - "13": "Különböző formátumú nyomtatás megakadályozása", - "14": "Tulajdonos jelszó", - "15": "Korlátozza, hogy mi végezhető el a dokumentum megnyitása után (Nem minden olvasó támogatja)", - "16": "Korlátozza a dokumentum megnyithatságát" - }, - "submit": "Titkosítás" - }, - "removePassword": { - "tags": "biztonság,feloldás,védelem,jelszó törlése", - "title": "Jelszó eltávolítása", - "header": "Jelszó eltávolítása (Visszafejtés)", - "selectText": { - "1": "Válassza ki a visszafejtendő PDF-et", - "2": "Jelszó" - }, - "submit": "Eltávolítás" - }, - "compressPdfs": { - "tags": "tömörítés,kicsi,kompakt" - }, - "unlockPDFForms": { - "tags": "eltávolítás,törlés,űrlap,mező,írásvédett", - "title": "Írásvédettség eltávolítása az űrlapmezőkről", - "header": "PDF űrlapok feloldása", - "submit": "Eltávolítás" - }, - "changeMetadata": { - "tags": "Cím,szerző,dátum,létrehozás,idő,kiadó,készítő,statisztika", - "title": "Cím:", - "header": "Metaadatok módosítása", - "selectText": { - "1": "Módosítsa a kívánt mezőket", - "2": "Minden metaadat törlése", - "3": "Egyéni metaadatok megjelenítése:", - "4": "Egyéb metaadatok:", - "5": "Egyéni metaadat hozzáadása" - }, - "author": "Szerző:", - "creationDate": "Létrehozás dátuma (yyyy/MM/dd HH:mm:ss):", - "creator": "Létrehozó:", - "keywords": "Kulcsszavak:", - "modDate": "Módosítás dátuma (yyyy/MM/dd HH:mm:ss):", - "producer": "Készítő:", - "subject": "Tárgy:", - "trapped": "Beleértve:", - "submit": "Módosítás" - }, - "fileToPDF": { - "tags": "átalakítás,formátum,dokumentum,kép,prezentáció,szöveg,konvertálás,iroda,dokumentumok,word,excel,powerpoint", - "title": "Fájl konvertálása PDF-be", - "header": "Bármilyen fájl konvertálása PDF-be", - "credit": "Ez a szolgáltatás a LibreOffice és Unoconv használatával működik.", - "supportedFileTypesInfo": "Támogatott fájltípusok", - "supportedFileTypes": "A támogatott fájltípusok között szerepelnek az alábbiak, de a teljes, naprakész listáért tekintse meg a LibreOffice dokumentációját", - "submit": "Konvertálás PDF-be" - }, - "ocr": { - "tags": "felismerés,szöveg,kép,szkennelés,olvasás,azonosítás,észlelés,szerkeszthető", - "title": "OCR / Szkennelés tisztítása", - "header": "Szkennelés tisztítása / OCR (Optikai karakterfelismerés)", - "selectText": { - "1": "Válassza ki a PDF-ben felismerendő nyelveket (a felsoroltak jelenleg felismerhetők):", - "2": "OCR szöveget tartalmazó szövegfájl létrehozása az OCR-ezett PDF mellett", - "3": "Ferdén szkennelt oldalak kijavítása és visszaforgatása", - "4": "Oldal tisztítása, hogy az OCR kevésbé találjon szöveget a háttérzajban. (Nincs kimeneti változás)", - "5": "Oldal tisztítása, hogy az OCR kevésbé találjon szöveget a háttérzajban, a tisztítás megmarad a kimenetben.", - "6": "Interaktív szöveget tartalmazó oldalak kihagyása, csak képoldalak OCR-ezése", - "7": "OCR kényszerítése, minden oldal OCR-ezése az eredeti szövegelemek eltávolításával", - "8": "Normál (Hiba, ha a PDF szöveget tartalmaz)", - "9": "További beállítások", - "10": "OCR mód", - "11": "Képek eltávolítása OCR után (MINDEN kép eltávolítása, csak konverziós lépésként hasznos)", - "12": "Renderelési típus (Haladó)" - }, - "help": "Kérjük, olvassa el ezt a dokumentációt más nyelvek használatáról és/vagy nem Docker környezetben való használatról", - "credit": "Ez a szolgáltatás a qpdf és Tesseract OCR használatával működik.", - "submit": "PDF feldolgozása OCR-rel" - }, - "extractImages": { - "tags": "kép,fotó,mentés,archívum,tömörítés,kinyerés,gyűjtés", - "title": "Képek kinyerése", - "header": "Képek kinyerése", - "selectText": "Válassza ki a kinyert képek konvertálási formátumát", - "allowDuplicates": "Ismétlődő képek mentése", - "submit": "Kinyerés" - }, - "pdfToPDFA": { - "tags": "archívum,hosszú távú,szabvány,konvertálás,tárolás,megőrzés", - "title": "PDF konvertálása PDF/A formátumba", - "header": "PDF konvertálása PDF/A formátumba", - "credit": "Ez a szolgáltatás a libreoffice használatával végzi a PDF/A konverziót", - "submit": "Konvertálás", - "tip": "Jelenleg nem támogatja a több fájl egyidejű feldolgozását", - "outputFormat": "Kimeneti formátum", - "pdfWithDigitalSignature": "A PDF digitális aláírást tartalmaz. Ez a következő lépésben eltávolításra kerül." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,átalakítás,formátum,konvertálás,iroda,microsoft,docfile", - "title": "PDF konvertálása Word formátumba", - "header": "PDF konvertálása Word formátumba", - "selectText": { - "1": "Kimeneti fájlformátum" - }, - "credit": "Ez a szolgáltatás a LibreOffice használatával végzi a konverziót.", - "submit": "Konvertálás" - }, - "PDFToPresentation": { - "tags": "dia,bemutató,iroda,microsoft", - "title": "PDF konvertálása prezentációvá", - "header": "PDF konvertálása prezentációvá", - "selectText": { - "1": "Kimeneti fájlformátum" - }, - "credit": "Ez a szolgáltatás a LibreOffice használatával végzi a konverziót.", - "submit": "Konvertálás" - }, - "PDFToText": { - "tags": "formázott szöveg,rtf,szövegformátum", - "title": "PDF konvertálása RTF (szöveg) formátumba", - "header": "PDF konvertálása RTF (szöveg) formátumba", - "selectText": { - "1": "Kimeneti fájlformátum" - }, - "credit": "Ez a szolgáltatás a LibreOffice használatával végzi a konverziót.", - "submit": "Konvertálás" - }, - "PDFToHTML": { - "tags": "webtartalom,böngészőbarát", - "title": "PDF konvertálása HTML-be", - "header": "PDF konvertálása HTML-be", - "credit": "Ez a szolgáltatás a pdftohtml használatával végzi a konverziót.", - "submit": "Konvertálás" - }, - "PDFToXML": { - "tags": "adatkinyerés,strukturált tartalom,interoperabilitás,konvertálás", - "title": "PDF konvertálása XML-be", - "header": "PDF konvertálása XML-be", - "credit": "Ez a szolgáltatás a LibreOffice használatával végzi a konverziót.", - "submit": "Konvertálás" - }, - "ScannerImageSplit": { - "tags": "szétválasztás,automatikus felismerés,szkennelés,több fotó,rendszerezés", - "selectText": { - "1": "Szög küszöbérték:", - "2": "A kép forgatásához szükséges minimális abszolút szög beállítása (alapértelmezett: 10).", - "3": "Tolerancia:", - "4": "A becsült háttérszín körüli színváltozási tartomány meghatározása (alapértelmezett: 30).", - "5": "Minimális terület:", - "6": "A fotó minimális területének küszöbértéke (alapértelmezett: 10000).", - "7": "Minimális kontúr terület:", - "8": "A fotó minimális kontúr területének küszöbértéke", - "9": "Keret mérete:", - "10": "A hozzáadott és eltávolított keret méretének beállítása a fehér keretek elkerülése érdekében (alapértelmezett: 1)." - }, - "info": "Python nincs telepítve. A futtatáshoz szükséges." - }, - "sign": { - "tags": "hitelesítés,rövidítés,rajzolt aláírás,szöveges aláírás,képes aláírás", - "title": "Aláírás", - "header": "PDF-ek aláírása", - "upload": "Kép feltöltése", - "draw": "Aláírás rajzolása", - "text": "Szöveg bevitele", - "clear": "Törlés", - "add": "Hozzáadás", - "saved": "Mentett aláírások", - "save": "Aláírás mentése", - "personalSigs": "Személyes aláírások", - "sharedSigs": "Megosztott aláírások", - "noSavedSigs": "Nincsenek mentett aláírások", - "addToAll": "Hozzáadás minden oldalhoz", - "delete": "Törlés", - "first": "Első oldal", - "last": "Utolsó oldal", - "next": "Következő oldal", - "previous": "Előző oldal", - "maintainRatio": "Képarány fenntartása váltása", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "statikus,deaktiválás,nem interaktív,egyszerűsítés", - "title": "Lapítás", - "header": "PDF-ek lapítása", - "flattenOnlyForms": "Csak űrlapok lapítása", - "submit": "Lapítás" - }, - "repair": { - "tags": "javítás,helyreállítás,korrekció,visszaállítás", - "title": "Javítás", - "header": "PDF-ek javítása", - "submit": "Javítás" - }, - "removeBlanks": { - "tags": "tisztítás,egyszerűsítés,tartalommentes,rendszerezés", - "title": "Üres oldalak eltávolítása", - "header": "Üres oldalak eltávolítása", - "threshold": "Pixel fehérség küszöbértéke:", - "thresholdDesc": "Küszöbérték annak meghatározásához, hogy egy fehér pixel mennyire legyen fehér. 0 = fekete, 255 = tiszta fehér.", - "whitePercent": "Fehér százalék (%):", - "whitePercentDesc": "Az oldal hány százalékának kell 'fehér' pixelnek lennie az eltávolításhoz", - "submit": "Üres oldalak eltávolítása" - }, - "removeAnnotations": { - "tags": "megjegyzések,kiemelés,jegyzetek,jelölések,eltávolítás", - "title": "Megjegyzések eltávolítása", - "header": "Megjegyzések eltávolítása", - "submit": "Eltávolítás" - }, - "compare": { - "tags": "különbség,kontraszt,változások,elemzés", - "title": "Összehasonlítás", - "header": "PDF-ek összehasonlítása", - "highlightColor": { - "1": "Kiemelő szín 1:", - "2": "Kiemelő szín 2:" - }, - "document": { - "1": "1. dokumentum", - "2": "2. dokumentum" - }, - "submit": "Összehasonlítás", - "complex": { - "message": "Az egyik vagy mindkét dokumentum nagy méretű, az összehasonlítás pontossága csökkenhet" - }, - "large": { - "file": { - "message": "Az egyik vagy mindkét dokumentum túl nagy a feldolgozáshoz" - } - }, - "no": { - "text": { - "message": "Az egyik vagy mindkét PDF nem tartalmaz szöveget. Kérjük, válasszon szöveget tartalmazó PDF-eket az összehasonlításhoz." - } - } - }, - "certSign": { - "tags": "hitelesítés,PEM,P12,hivatalos,titkosítás", - "title": "Tanúsítvánnyal aláírás", - "header": "PDF aláírása tanúsítvánnyal (fejlesztés alatt)", - "selectPDF": "Válasszon aláírandó PDF fájlt:", - "jksNote": "Megjegyzés: Ha a tanúsítványtípusa nem szerepel a listában, konvertálja Java Keystore (.jks) formátumba a keytool parancssorral. Ezután válassza a .jks fájl opciót.", - "selectKey": "Válassza ki a privát kulcs fájlt (PKCS#8 formátum, .pem vagy .der):", - "selectCert": "Válassza ki a tanúsítvány fájlt (X.509 formátum, .pem vagy .der):", - "selectP12": "Válassza ki a PKCS#12 kulcstár fájlt (.p12 vagy .pfx) (Opcionális, ha megadja, tartalmaznia kell a privát kulcsot és tanúsítványt):", - "selectJKS": "Válassza ki a Java Keystore fájlt (.jks vagy .keystore):", - "certType": "Tanúsítvány típusa", - "password": "Adja meg a kulcstár vagy privát kulcs jelszavát (ha van):", - "showSig": "Aláírás megjelenítése", - "reason": "Ok", - "location": "Hely", - "name": "Név", - "showLogo": "Logó megjelenítése", - "submit": "PDF aláírása" - }, - "removeCertSign": { - "tags": "hitelesítés,PEM,P12,hivatalos,visszafejtés", - "title": "Tanúsítványos aláírás eltávolítása", - "header": "Digitális tanúsítvány eltávolítása a PDF-ből", - "selectPDF": "PDF fájl kiválasztása:", - "submit": "Aláírás eltávolítása" - }, - "pageLayout": { - "tags": "egyesítés,kompozit,egyoldalas nézet,rendszerezés", - "title": "Többoldalas elrendezés", - "header": "Többoldalas elrendezés", - "pagesPerSheet": "Oldalak laponként:", - "addBorder": "Keret hozzáadása", - "submit": "Küldés" - }, - "scalePages": { - "tags": "átméretezés,módosítás,dimenzió,igazítás", - "title": "Oldalméret beállítása", - "header": "Oldalméret beállítása", - "pageSize": "A dokumentum oldalmérete.", - "keepPageSize": "Eredeti méret", - "scaleFactor": "Oldal nagyítási szintje (vágás).", - "submit": "Küldés" - }, - "add-page-numbers": { - "tags": "számozás,címke,rendszerezés,index" - }, - "auto-rename": { - "tags": "automatikus felismerés,fejléc alapú,rendszerezés,újracímkézés", - "title": "Automatikus átnevezés", - "header": "PDF automatikus átnevezése", - "submit": "Automatikus átnevezés" - }, - "adjust-contrast": { - "tags": "színkorrekció,hangolás,módosítás,javítás" - }, - "crop": { - "tags": "vágás,kicsinyítés,szerkesztés,forma", - "title": "Vágás", - "header": "PDF vágása", - "submit": "Küldés" - }, - "autoSplitPDF": { - "tags": "QR-alapú,szétválasztás,szkennelt szekció,rendszerezés", - "title": "Automatikus PDF felosztás", - "header": "Automatikus PDF felosztás", - "description": "Nyomtasson, illesszen be, szkenneljen, töltsön fel, és hagyja, hogy a dokumentumok automatikusan szétváljanak. Nincs szükség kézi rendezésre.", - "selectText": { - "1": "Nyomtasson elválasztólapokat alább (fekete-fehér is megfelel).", - "2": "Szkennelje be az összes dokumentumot egyszerre, az elválasztólapokat közéjük helyezve.", - "3": "Töltse fel az egyetlen nagy szkennelt PDF fájlt, és hagyja, hogy a Stirling PDF elvégezze a többit.", - "4": "Az elválasztólapokat automatikusan felismeri és eltávolítja, garantálva a rendezett végeredményt." - }, - "formPrompt": "Töltse fel a Stirling-PDF oldalelválasztókat tartalmazó PDF-et:", - "duplexMode": "Duplex mód (Elő- és hátoldali szkennelés)", - "dividerDownload2": "'Automatikus elválasztó (utasításokkal).pdf' letöltése", - "submit": "Küldés" - }, - "sanitizePdf": { - "tags": "tisztítás,biztonság,védelem,veszélyek eltávolítása" - }, - "URLToPDF": { - "tags": "webmentés,oldal mentése,web-dokumentum,archiválás", - "title": "URL konvertálása PDF-be", - "header": "URL konvertálása PDF-be", - "submit": "Konvertálás", - "credit": "WeasyPrint használatával" - }, - "HTMLToPDF": { - "tags": "jelölőnyelv,webtartalom,átalakítás,konvertálás", - "title": "HTML konvertálása PDF-be", - "header": "HTML konvertálása PDF-be", - "help": "HTML fájlokat és szükséges html/css/képeket tartalmazó ZIP-eket fogad el", - "submit": "Konvertálás", - "credit": "WeasyPrint használatával", - "zoom": "Weboldal megjelenítési nagyítása.", - "pageWidth": "Oldalszélesség centiméterben. (Üresen hagyva alapértelmezett)", - "pageHeight": "Oldalmagasság centiméterben. (Üresen hagyva alapértelmezett)", - "marginTop": "Felső margó milliméterben. (Üresen hagyva alapértelmezett)", - "marginBottom": "Alsó margó milliméterben. (Üresen hagyva alapértelmezett)", - "marginLeft": "Bal margó milliméterben. (Üresen hagyva alapértelmezett)", - "marginRight": "Jobb margó milliméterben. (Üresen hagyva alapértelmezett)", - "printBackground": "Weboldalak hátterének renderelése.", - "defaultHeader": "Alapértelmezett fejléc engedélyezése (Név és oldalszám)", - "cssMediaType": "Oldal CSS médiatípusának módosítása.", - "none": "Nincs", - "print": "Nyomtatás", - "screen": "Képernyő" - }, - "MarkdownToPDF": { - "tags": "jelölőnyelv,webtartalom,átalakítás,konvertálás", - "title": "Markdown konvertálása PDF-be", - "header": "Markdown konvertálása PDF-be", - "submit": "Konvertálás", - "help": "Fejlesztés alatt", - "credit": "WeasyPrint használatával" - }, - "PDFToMarkdown": { - "tags": "markup,webtartalom,átalakítás,konvertálás,md", - "title": "PDF fájl konvertálása Markdown fájlba", - "header": "PDF fájl konvertálása Markdown fájlba", - "submit": "Konvertálás" - }, - "getPdfInfo": { - "tags": "információ,adat,statisztika,részletek", - "title": "PDF információk lekérése", - "header": "PDF információk lekérése", - "submit": "Információk lekérése", - "downloadJson": "JSON letöltése" - }, - "extractPage": { - "tags": "kinyerés" - }, - "PdfToSinglePage": { - "tags": "egyoldalas" - }, - "showJS": { - "tags": "JS", - "title": "JavaScript megjelenítése", - "header": "JavaScript megjelenítése", - "downloadJS": "JavaScript letöltése", - "submit": "Megjelenítés" - }, - "autoRedact": { - "tags": "Kitakarás,Elrejtés,fekete kitakarás,fekete,jelölő,rejtett", - "title": "Automatikus kitakarás", - "header": "Automatikus kitakarás", - "colorLabel": "Szín", - "textsToRedactLabel": "Kitakarandó szövegek (soronként)", - "textsToRedactPlaceholder": "például \\nBizalmas \\nSzigorúan titkos", - "useRegexLabel": "Reguláris kifejezés használata", - "wholeWordSearchLabel": "Teljes szó keresése", - "customPaddingLabel": "Egyedi extra kitöltés", - "convertPDFToImageLabel": "PDF konvertálása PDF-képpé (a doboz mögötti szöveg eltávolításához)", - "submitButton": "Küldés" - }, - "redact": { - "tags": "Kitakarás,Elrejtés,fekete kitakarás,fekete,jelölő,rejtett,kézi", - "title": "Kézi kitakarás", - "header": "Kézi kitakarás", - "submit": "Kitakarás", - "textBasedRedaction": "Szöveg alapú kitakarás", - "pageBasedRedaction": "Oldal alapú kitakarás", - "convertPDFToImageLabel": "PDF konvertálása képpé (a doboz mögötti szöveg eltávolításához)", - "pageRedactionNumbers": { - "title": "Oldalszámok", - "placeholder": "(például 1,2,8 vagy 4,7,12-16 vagy 2n-1)" - }, - "redactionColor": { - "title": "Kitakarás színe" - }, - "export": "Exportálás", - "upload": "Feltöltés", - "boxRedaction": "Kiválasztott doboz kitakarása", - "zoom": "Nagyítás/kicsinyítés", - "zoomIn": "Nagyítás", - "zoomOut": "Kicsinyítés", - "nextPage": "Következő oldal", - "previousPage": "Előző oldal", - "toggleSidebar": "Oldalsáv megjelenítése/elrejtése", - "showThumbnails": "Előnézet megjelenítése", - "showDocumentOutline": "Dokumentumvázlat megjelenítése (dupla kattintás a kibővítéshez/összecsukáshoz)", - "showAttatchments": "Mellékletek megjelenítése", - "showLayers": "Rétegek megjelenítése (dupla kattintás az összes réteg alaphelyzetbe állításához)", - "colourPicker": "Színválasztó", - "findCurrentOutlineItem": "Keresés a jelenlegi vázlatban", - "applyChanges": "Változtatások mentése" - }, - "tableExtraxt": { - "tags": "CSV,Táblázat kinyerése,kinyerés,konvertálás" - }, - "autoSizeSplitPDF": { - "tags": "pdf,felosztás,dokumentum,rendszerezés" - }, - "overlay-pdfs": { - "tags": "Átfedés", - "header": "PDF-ek egymásra helyezése", - "baseFile": { - "label": "Válassza ki az alap PDF fájlt" - }, - "overlayFiles": { - "label": "Válassza ki a ráhelyezendő PDF fájlokat" - }, - "mode": { - "label": "Válassza ki az egymásra helyezés módját", - "sequential": "Szekvenciális egymásra helyezés", - "interleaved": "Váltakozó egymásra helyezés", - "fixedRepeat": "Rögzített ismétlődő egymásra helyezés" - }, - "counts": { - "label": "Ismétlések száma (rögzített ismétlődő módhoz)", - "placeholder": "Adja meg a vesszővel elválasztott számokat (pl. 2,3,1)" - }, - "position": { - "label": "Válassza ki az egymásra helyezés pozícióját", - "foreground": "Előtér", - "background": "Háttér" - }, - "submit": "Küldés" - }, - "split-by-sections": { - "tags": "Szakaszos felosztás,Felosztás,Testreszabás", - "title": "PDF felosztása szakaszokra", - "header": "PDF felosztása szakaszokra", - "horizontal": { - "label": "Vízszintes felosztások", - "placeholder": "Adja meg a vízszintes felosztások számát" - }, - "vertical": { - "label": "Függőleges felosztások", - "placeholder": "Adja meg a függőleges felosztások számát" - }, - "submit": "PDF felosztása", - "merge": "Egyesítés egy PDF-be" - }, - "AddStampRequest": { - "tags": "Pecsét,Kép hozzáadása,középre igazítás,Vízjel,PDF,Beágyazás,Testreszabás", - "header": "PDF pecsételése", - "title": "PDF pecsételése", - "stampType": "Pecsét típusa", - "stampText": "Pecsét szövege", - "stampImage": "Pecsét képe", - "alphabet": "Ábécé", - "fontSize": "Betű/Kép mérete", - "rotation": "Forgatás", - "opacity": "Átlátszóság", - "position": "Pozíció", - "overrideX": "X koordináta felülírása", - "overrideY": "Y koordináta felülírása", - "customMargin": "Egyedi margó", - "customColor": "Egyedi szövegszín", - "submit": "Küldés" - }, - "removeImagePdf": { - "tags": "Képek eltávolítása,Oldalműveletek,Backend,szerver oldali" - }, - "splitPdfByChapters": { - "tags": "felosztás,fejezetek,könyvjelzők,rendszerezés" - }, - "validateSignature": { - "tags": "aláírás,ellenőrzés,validálás,pdf,tanúsítvány,digitális aláírás,Aláírás ellenőrzése,Tanúsítvány ellenőrzése", - "title": "PDF aláírások ellenőrzése", - "header": "Digitális aláírások ellenőrzése", - "selectPDF": "Válassza ki az aláírt PDF fájlt", - "submit": "Aláírások ellenőrzése", - "results": "Ellenőrzés eredménye", - "status": { - "_value": "Állapot", - "valid": "Érvényes", - "invalid": "Érvénytelen" - }, - "signer": "Aláíró", - "date": "Dátum", - "reason": "Ok", - "location": "Hely", - "noSignatures": "A dokumentumban nem található digitális aláírás", - "chain": { - "invalid": "Tanúsítványlánc ellenőrzése sikertelen - az aláíró személyazonossága nem ellenőrizhető" - }, - "trust": { - "invalid": "A tanúsítvány nincs a megbízható tárolóban - a forrás nem ellenőrizhető" - }, - "cert": { - "expired": "A tanúsítvány lejárt", - "revoked": "A tanúsítvány visszavonásra került", - "info": "Tanúsítvány részletei", - "issuer": "Kibocsátó", - "subject": "Alany", - "serialNumber": "Sorozatszám", - "validFrom": "Érvényesség kezdete", - "validUntil": "Érvényesség vége", - "algorithm": "Algoritmus", - "keySize": "Kulcsméret", - "version": "Verzió", - "keyUsage": "Kulcshasználat", - "selfSigned": "Önaláírt", - "bits": "bit" - }, - "signature": { - "info": "Aláírás információ", - "_value": "Aláírás", - "mathValid": "Az aláírás matematikailag érvényes, DE:" - }, - "selectCustomCert": "Egyéni X.509 tanúsítványfájl (Opcionális)" - }, - "replace-color": { - "title": "Színcsere-Invertálás", - "header": "PDF színek cseréje-invertálása", - "selectText": { - "1": "Színcsere vagy -invertálás beállításai", - "2": "Alapértelmezett (Alapértelmezett kontrasztos színek)", - "3": "Egyéni (Egyéni színek)", - "4": "Teljes invertálás (Minden szín invertálása)", - "5": "Magas kontrasztú színbeállítások", - "6": "fehér szöveg fekete háttéren", - "7": "fekete szöveg fehér háttéren", - "8": "sárga szöveg fekete háttéren", - "9": "zöld szöveg fekete háttéren", - "10": "Szövegszín kiválasztása", - "11": "Háttérszín kiválasztása" - }, - "submit": "Csere" - }, - "replaceColorPdf": { - "tags": "Színcsere,Oldalműveletek,Backend,szerver oldali" - }, - "login": { - "title": "Bejelentkezés", - "header": "Bejelentkezés", - "signin": "Bejelentkezés", - "rememberme": "Emlékezzen rám", - "invalid": "Érvénytelen felhasználónév vagy jelszó.", - "locked": "A fiókja zárolva van.", - "signinTitle": "Kérjük, jelentkezzen be", - "ssoSignIn": "Bejelentkezés egyszeri bejelentkezéssel", - "oAuth2AutoCreateDisabled": "OAuth2 automatikus felhasználólétrehozás letiltva", - "oAuth2AdminBlockedUser": "A nem regisztrált felhasználók regisztrációja vagy bejelentkezése jelenleg le van tiltva. Kérjük, forduljon a rendszergazdához.", - "oauth2RequestNotFound": "A hitelesítési kérés nem található", - "oauth2InvalidUserInfoResponse": "Érvénytelen felhasználói információ válasz", - "oauth2invalidRequest": "Érvénytelen kérés", - "oauth2AccessDenied": "Hozzáférés megtagadva", - "oauth2InvalidTokenResponse": "Érvénytelen token válasz", - "oauth2InvalidIdToken": "Érvénytelen azonosító token", - "relyingPartyRegistrationNotFound": "Kliens regisztráció nem található", - "userIsDisabled": "A felhasználó letiltva, a bejelentkezés jelenleg nem lehetséges ezzel a felhasználónévvel. Kérjük, forduljon a rendszergazdához.", - "alreadyLoggedIn": "Már be van jelentkezve", - "alreadyLoggedIn2": "eszközön. Kérjük, jelentkezzen ki az eszközökről és próbálja újra.", - "toManySessions": "Túl sok aktív munkamenet", - "logoutMessage": "Sikeresen kijelentkezett." - }, - "pdfToSinglePage": { - "title": "PDF egyoldalassá alakítása", - "header": "PDF egyoldalassá alakítása", - "submit": "Konvertálás egyoldalassá" - }, - "pageExtracter": { - "title": "Oldalak kinyerése", - "header": "Oldalak kinyerése", - "submit": "Kinyerés", - "placeholder": "(pl. 1,2,8 vagy 4,7,12-16 vagy 2n-1)" - }, - "sanitizePDF": { - "title": "PDF tisztítása", - "header": "PDF fájl tisztítása", - "selectText": { - "1": "JavaScript műveletek eltávolítása", - "2": "Beágyazott fájlok eltávolítása", - "3": "XMP metaadatok eltávolítása", - "4": "Hivatkozások eltávolítása", - "5": "Betűtípusok eltávolítása", - "6": "Dokumentum metainformációk eltávolítása" - }, - "submit": "PDF tisztítása" - }, - "adjustContrast": { - "title": "Kontraszt beállítása", - "header": "Kontraszt beállítása", - "contrast": "Kontraszt:", - "brightness": "Fényerő:", - "saturation": "Telítettség:", - "download": "Letöltés" - }, - "compress": { - "title": "Tömörítés", - "header": "PDF tömörítése", - "credit": "Ez a szolgáltatás a qpdf használatával végzi a PDF tömörítését/optimalizálását.", - "grayscale": { - "label": "Szürkeárnyalatok alkalmazása tömörítéshez" - }, - "selectText": { - "1": { - "_value": "Tömörítési beállítások", - "1": "1-3 PDF tömörítés,
4-6 enyhe kép tömörítés,
7-9 intenzív kép tömörítés Jelentősen csökkenti a kép minőségét" - }, - "2": "Optimalizálási szint:", - "4": "Automatikus mód - Automatikusan állítja a minőséget a megadott PDF méret eléréséhez", - "5": "Kívánt PDF méret (pl. 25MB, 10.8MB, 25KB)" - }, - "submit": "Tömörítés" - }, - "decrypt": { - "passwordPrompt": "Ez a fájl jelszóval védett. Kérjük, adja meg a jelszót:", - "cancelled": "Művelet megszakítva a PDF-nél: {0}", - "noPassword": "Nincs megadva jelszó a titkosított PDF-hez: {0}", - "invalidPassword": "Kérjük, próbálja újra a helyes jelszóval.", - "invalidPasswordHeader": "Helytelen jelszó vagy nem támogatott titkosítás a PDF-nél: {0}", - "unexpectedError": "Hiba történt a fájl feldolgozása során. Kérjük, próbálja újra.", - "serverError": "Szerveroldali hiba a visszafejtés során: {0}", - "success": "A fájl visszafejtése sikeres." - }, - "multiTool-advert": { - "message": "Ez a funkció elérhető a többfunkciós eszköz oldalon is. Nézze meg a fejlett oldalankénti felületet és további funkciókat!" - }, - "pageRemover": { - "title": "Oldaleltávolító", - "header": "PDF oldaleltávolító", - "pagesToDelete": "Törlendő oldalak (adja meg az oldalszámok vesszővel elválasztott listáját):", - "submit": "Oldalak törlése", - "placeholder": "(pl. 1,2,6 vagy 1-10,15-30)" - }, - "imageToPDF": { - "title": "Kép PDF-be", - "header": "Kép PDF-be", - "submit": "Konvertálás", - "selectLabel": "Kép illesztési beállítások", - "fillPage": "Oldal kitöltése", - "fitDocumentToImage": "Oldal igazítása a képhez", - "maintainAspectRatio": "Képarány megtartása", - "selectText": { - "2": "PDF automatikus forgatása", - "3": "Több fájl kezelése (csak több kép esetén engedélyezett)", - "4": "Egyesítés egy PDF-be", - "5": "Konvertálás külön PDF-ekbe" - } - }, - "PDFToCSV": { - "title": "PDF konvertálása CSV-be", - "header": "PDF konvertálása CSV-be", - "prompt": "Válassza ki az oldalt a táblázat kinyeréséhez", - "submit": "Kinyerés" - }, - "split-by-size-or-count": { - "title": "PDF felosztása méret vagy darabszám szerint", - "header": "PDF felosztása méret vagy darabszám szerint", - "type": { - "label": "Válassza ki a felosztás típusát", - "size": "Méret szerint", - "pageCount": "Oldalszám szerint", - "docCount": "Dokumentumszám szerint" - }, - "value": { - "label": "Adja meg az értéket", - "placeholder": "Adja meg a méretet (pl. 2MB vagy 3KB) vagy a számot (pl. 5)" - }, - "submit": "Küldés" - }, - "printFile": { - "title": "Fájl nyomtatása", - "header": "Fájl nyomtatása nyomtatóra", - "selectText": { - "1": "Válassza ki a nyomtatandó fájlt", - "2": "Adja meg a nyomtató nevét" - }, - "submit": "Nyomtatás" - }, - "licenses": { - "nav": "Licencek", - "title": "Külső licencek", - "header": "Külső licencek", - "module": "Modul", - "version": "Verzió", - "license": "Licenc" - }, - "survey": { - "nav": "Kérdőív", - "title": "Stirling-PDF kérdőív", - "description": "A Stirling PDF nem végez követést, ezért szeretnénk hallani felhasználóinktól, hogy javíthassunk a terméken!", - "changes": "A Stirling PDF változott az utolsó felmérés óta! További információért tekintse meg blogbejegyzésünket:", - "changes2": "Ezekkel a változtatásokkal üzleti támogatást és finanszírozást kapunk", - "please": "Kérjük, vegyen részt felmérésünkben!", - "disabled": "(A kérdőív felugró ablaka a következő frissítésekben letiltásra kerül, de továbbra is elérhető lesz a lap alján)", - "button": "Kérdőív kitöltése", - "dontShowAgain": "Ne jelenjen meg újra", - "meeting": { - "1": "Ha a Stirling PDF-t munkahelyén használja, szívesen beszélgetnénk Önnel. 15 perces felhasználói felfedező konzultációért cserébe technikai támogatási üléseket kínálunk.", - "2": "Ez egy lehetőség arra, hogy:", - "3": "Segítséget kapjon a telepítéshez, integrációkhoz vagy hibaelhárításhoz", - "4": "Adjon közvetlen visszajelzést a teljesítményről, határesetekről és hiányzó funkciókról", - "5": "Segítsen nekünk finomítani a Stirling PDF-et a valós vállalati használatra", - "6": "Amennyiben érdekli, közvetlenül foglalhat időpontot csapatunkkal. (Csak angol nyelven)", - "7": "Várjuk, hogy megismerhessük az Ön felhasználási eseteit és még jobbá tehessük a Stirling PDF-et!", - "notInterested": "Nem üzleti felhasználó és/vagy nem érdekli a konzultáció", - "button": "Konzultáció foglalása" - } - }, - "removeImage": { - "title": "Kép eltávolítása", - "header": "Kép eltávolítása", - "removeImage": "Kép eltávolítása", - "submit": "Kép eltávolítása" - }, - "splitByChapters": { - "title": "PDF felosztása fejezetek szerint", - "header": "PDF felosztása fejezetek szerint", - "bookmarkLevel": "Könyvjelzőszint", - "includeMetadata": "Metaadatok megtartása", - "allowDuplicates": "Duplikátumok engedélyezése", - "desc": { - "1": "Ez az eszköz fejezetstruktúra alapján osztja fel a PDF-et több fájlra.", - "2": "Könyvjelzőszint: Válassza ki a felosztáshoz használt könyvjelzőszintet (0 a legfelső szint, 1 a második szint, stb.).", - "3": "Metaadatok megtartása: Ha be van jelölve, az eredeti PDF metaadatai megmaradnak minden létrehozott PDF-ben.", - "4": "Duplikátumok engedélyezése: Ha be van jelölve, lehetővé teszi több különálló PDF létrehozását ugyanazon az oldalon lévő több könyvjelzőből." - }, - "submit": "PDF felosztása" - }, - "fileChooser": { - "click": "Kattintson", - "or": "vagy", - "dragAndDrop": "Húzza ide", - "dragAndDropPDF": "Húzza ide a PDF fájlt", - "dragAndDropImage": "Húzza ide a képfájlt", - "hoveredDragAndDrop": "Húzza ide a fájl(oka)t", - "extractPDF": "Kinyerés..." - }, - "releases": { - "footer": "Kiadási jegyzék", - "title": "Kiadási jegyzetek", - "header": "Kiadási jegyzetek", - "current": { - "version": "Jelenlegi kiadás" - }, - "note": "A kiadási jegyzetek csak angol nyelven érhetők el" - }, - "cookieBanner": { - "popUp": { - "title": "Hogy használjuk a sütiket", - "description": { - "1": "Sütiket és egyéb technológiákat használunk, hogy a Stirling PDF jobban működjön az Ön számára, segítve minket abban, hogy javítsuk eszközeinket és olyan funkciókat fejlesszünk, amelyeket szeretni fog", - "2": "Ha inkább nem szeretné, a 'Nem, köszönöm' gombra kattintva csak azok az alapvető sütik lesznek engedélyezve, amelyek a zavartalan működéshez szükségesek." - }, - "acceptAllBtn": "Elfogadom", - "acceptNecessaryBtn": "Nem, köszönöm", - "showPreferencesBtn": "Preferenciák kezelése" - }, - "preferencesModal": { - "title": "Beleegyezési preferenciák központja", - "acceptAllBtn": "Minden süti elfogadása", - "acceptNecessaryBtn": "Csak a szükséges sütik elfogadása", - "savePreferencesBtn": "Preferenciák mentése", - "closeIconLabel": "Bezárás", - "serviceCounterLabel": "Szolgáltatás|Szolgáltatások", - "subtitle": "Süti használat", - "description": { - "1": "A Stirling PDF sütiket és hasonló technológiákat használ az Ön élményének javítása, valamint eszközeink használatának megértése érdekében. Ez segít nekünk abban, hogy javítsuk a teljesítményt, fejlesszük az Ön számára fontos funkciókat, és folyamatos támogatást nyújtsunk felhasználóinknak.", - "2": "A Stirling PDF nem képes-és soha nem is fog-nyomon követni vagy hozzáférni az Ön által használt dokumentumok tartalmához.", - "3": "Az Ön bizalma és adatainak védelme a tevékenységünk középpontjában áll." - }, - "necessary": { - "title": { - "1": "Szükséges sütik", - "2": "Mindig aktív" - }, - "description": "Ezek a sütik elengedhetetlenek a weboldal megfelelő működéséhez. Olyan alapvető funkciókat tesznek lehetővé, mint az adatvédelmi beállítások megadása, a bejelentkezés és az űrlapok kitöltése-ezért nem kapcsolhatók ki." - }, - "analytics": { - "title": "Adatelemzések", - "description": "Ezek a sütik segítenek megérteni, hogyan használják eszközeinket, így a közösségünk által leginkább értékelt funkciókra összpontosíthatunk. Nyugodt lehet-a Stirling PDF nem képes és soha nem is fog nyomon követni az Ön által használt dokumentumok tartalmát." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/id-ID/translation.json b/frontend/dist/locales/id-ID/translation.json deleted file mode 100644 index 9690a6b2d..000000000 --- a/frontend/dist/locales/id-ID/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Ukuran Fonta", - "fontName": "Nama Fonta", - "title": "Tambahkan Nomor Halaman", - "header": "Tambahkan Nomor Halaman", - "selectText": { - "1": "Pilih berkas PDF:", - "2": "Ukuran Margin", - "3": "Posisi", - "4": "Nomor Awal", - "5": "Halaman ke Nomor", - "6": "Teks Khusus" - }, - "customTextDesc": "Teks Khusus", - "numberPagesDesc": "Halaman mana yang akan diberi nomor, default 'semua', juga menerima 1-5 atau 2,5,9, dll.", - "customNumberDesc": "Default untuk {n}, juga menerima 'Halaman {n} dari {total}', 'Teks-{n}', '{nama berkas}-{n}'", - "submit": "Tambahkan Nomor Halaman" - }, - "pdfPrompt": "Pilih PDF", - "multiPdfPrompt": "Pilih PDF (2+)", - "multiPdfDropPrompt": "Pilih (atau seret & letakkan)) semua PDF yang Anda butuhkan", - "imgPrompt": "Pilih Gambar", - "genericSubmit": "Kirim", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Peringatan: Proses ini dapat memakan waktu hingga satu menit, tergantung pada ukuran berkas", - "pageOrderPrompt": "Urutan Halaman Khusus (Masukkan daftar nomor halaman yang dipisahkan dengan koma atau Fungsi seperti 2n + 1) :", - "pageSelectionPrompt": "Pemilihan Halaman Kustom (Masukkan daftar nomor halaman dipisahkan dengan koma 1,5,6 atau Fungsi seperti 2n+1) :", - "goToPage": "Ke", - "true": "Benar", - "false": "Salah", - "unknown": "Tidak diketahui", - "save": "Simpan", - "saveToBrowser": "Simpan ke Peramban", - "close": "Tutup", - "filesSelected": "berkas dipilih", - "noFavourites": "Tidak ada favorit yang ditambahkan", - "downloadComplete": "Unduhan Lengkap", - "bored": "Bosan Menunggu?", - "alphabet": "Abjad", - "downloadPdf": "Unduh PDF", - "text": "Teks", - "font": "Jenis huruf", - "selectFillter": "-- Pilih --", - "pageNum": "Nomor Halaman", - "sizes": { - "small": "Kecil", - "medium": "Sedang", - "large": "Besar", - "x-large": "Sangat Besar" - }, - "error": { - "pdfPassword": "Dokumen PDF disandikan dan kata sandi tidak diberikan atau kata sandi salah", - "_value": "Kesalahan", - "sorry": "Maaf atas masalah ini!", - "needHelp": "Butuh bantuan / Menemukan masalah?", - "contactTip": "Jika Anda masih mengalami kesulitan, jangan ragu untuk menghubungi kami untuk bantuan. Anda dapat mengirim tiket di halaman GitHub kami atau menghubungi kami melalui Discord:", - "404": { - "head": "404 - Halaman Tidak Ditemukan | Ups, kami tersandung dalam kode!", - "1": "Kami tidak dapat menemukan halaman yang Anda cari.", - "2": "Terjadi kesalahan" - }, - "github": "Kirim tiket di GitHub", - "showStack": "Tampilkan Stack Trace", - "copyStack": "Salin Stack Trace", - "githubSubmit": "GitHub - Kirim tiket", - "discordSubmit": "Discord - Kirim pos dukungan" - }, - "delete": "Hapus", - "username": "Nama pengguna", - "password": "Kata sandi", - "welcome": "Selamat Datang", - "property": "Properti", - "black": "Hitam", - "white": "Putih", - "red": "Merah", - "green": "Hijau", - "blue": "Biru", - "custom": "Kustom...", - "WorkInProgess": "Pekerjaan sedang diproses, Mungkin tidak berfungsi atau terdapat kutu, Silakan laporkan masalah apa pun!", - "poweredBy": "Ditenagai oleh", - "yes": "Ya", - "no": "Tidak", - "changedCredsMessage": "Kredensial berubah!!", - "notAuthenticatedMessage": "Pengguna tidak ter-autentikasi.", - "userNotFoundMessage": "Pengguna tidak ditemukan.", - "incorrectPasswordMessage": "Kata sandi saat ini salah.", - "usernameExistsMessage": "Nama pengguna baru sudah ada.", - "invalidUsernameMessage": "Nama pengguna tidak valid, nama pengguna hanya boleh mengandung huruf, angka, dan karakter khusus berikut @._+- atau harus berupa alamat email yang valid.", - "invalidPasswordMessage": "Kata sandi tidak boleh kosong dan tidak boleh memiliki spasi di awal atau akhir.", - "confirmPasswordErrorMessage": "Kata Sandi Baru dan Konfirmasi Kata Sandi Baru harus sama.", - "deleteCurrentUserMessage": "Pengguna yang sedang masuk tidak dapat dihapus.", - "deleteUsernameExistsMessage": "Nama pengguna tidak ada dan tidak dapat dihapus.", - "downgradeCurrentUserMessage": "Tidak dapat menurunkan peran pengguna saat ini", - "disabledCurrentUserMessage": "Pengguna saat ini tidak dapat dinonaktifkan", - "downgradeCurrentUserLongMessage": "Tidak dapat menurunkan peran pengguna saat ini. Oleh karena itu, pengguna saat ini tidak akan ditampilkan.", - "userAlreadyExistsOAuthMessage": "Pengguna sudah ada sebagai pengguna OAuth2.", - "userAlreadyExistsWebMessage": "Pengguna sudah ada sebagai pengguna web.", - "oops": "Ups!", - "help": "Bantuan", - "goHomepage": "Kembali ke Beranda", - "joinDiscord": "Bergabung dengan server Discord kami", - "seeDockerHub": "Lihat Docker Hub", - "visitGithub": "Kunjungi Repositori Github", - "donate": "Donasi", - "color": "Warna", - "sponsor": "Pembantu", - "info": "Informasi", - "pro": "Pro", - "page": "Halaman", - "pages": "Halaman-halaman", - "loading": "Mengambil data...", - "addToDoc": "Tambahkan ke Dokumen", - "reset": "Reset", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Kebijakan Privasi", - "terms": "Syarat dan Ketentuan", - "accessibility": "Aksesibilitas", - "cookie": "Kebijakan Kuki", - "impressum": "Impresum", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Menu Pipeline (Beta)", - "uploadButton": "Unggah Kustom", - "configureButton": "Konfigurasi", - "defaultOption": "Kustom", - "submitButton": "Kirim", - "help": "Bantuan Pipeline", - "scanHelp": "Bantuan Pemindaian Folder", - "deletePrompt": "Apakah Anda yakin ingin menghapus pipeline", - "tags": "mengotomatiskan, mengurutkan, menulis, proses batch", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Konfigurasi Pipeline", - "pipelineNameLabel": "Nama Pipeline", - "saveSettings": "Simpan Pengaturan Operasi", - "pipelineNamePrompt": "Masukkan nama pipeline di sini", - "selectOperation": "Pilih Operasi", - "addOperationButton": "Tambah operasi", - "pipelineHeader": "Pipeline:", - "saveButton": "Unduh", - "validateButton": "Validasi" - }, - "enterpriseEdition": { - "button": "Upgrade ke Pro", - "warning": "Fitur ini hanya tersedia untuk pengguna Pro.", - "yamlAdvert": "Stirling PDF Pro mendukung berkas konfigurasi YAML dan fitur SSO lainnya.", - "ssoAdvert": "Mencari lebih banyak fitur manajemen pengguna? Lihat Stirling PDF Pro" - }, - "analytics": { - "title": "Apakah Anda ingin membuat Stirling PDF lebih baik?", - "paragraph1": "Stirling PDF memiliki analitik yang dapat diaktifkan untuk membantu kami meningkatkan produk. Kami tidak melacak informasi pribadi atau konten berkas.", - "paragraph2": "Silakan pertimbangkan untuk mengaktifkan analitik agar Stirling PDF dapat berkembang dan untuk memungkinkan kami memahami pengguna kami dengan lebih baik.", - "enable": "Aktifkan analitik", - "disable": "Nonaktifkan analitik", - "settings": "Anda dapat mengubah pengaturan untuk analitik di berkas config/settings.yml" - }, - "navbar": { - "favorite": "Favorit", - "recent": "New and recently updated", - "darkmode": "Mode Gelap", - "language": "Bahasa", - "settings": "Pengaturan", - "allTools": "Alat", - "multiTool": "Alat Multi", - "search": "Search", - "sections": { - "organize": "Atur", - "convertTo": "Konversi ke PDF", - "convertFrom": "Konversi dari PDF", - "security": "Tanda Tangan & Keamanan", - "advance": "Langkah Lanjut", - "edit": "Melihat & Mengedit", - "popular": "Populer" - } - }, - "settings": { - "title": "Pengaturan", - "update": "Pembaruan tersedia", - "updateAvailable": "{0} adalah versi yang terpasang saat ini. Versi baru ({1}) tersedia.", - "appVersion": "Versi Aplikasi:", - "downloadOption": { - "title": "Pilih opsi unduhan (Untuk unduhan berkas tunggal non zip):", - "1": "Buka di jendela yang sama", - "2": "Buka di jendela baru", - "3": "Unduh berkas" - }, - "zipThreshold": "Berkas zip ketika jumlah berkas yang diunduh melebihi", - "signOut": "Keluar", - "accountSettings": "Pengaturan Akun", - "bored": { - "help": "Mengaktifkan permainan telur paskah" - }, - "cacheInputs": { - "name": "Simpan input formulir", - "help": "Aktifkan untuk menyimpan input yang pernah digunakan untuk menjalankan di masa depan" - } - }, - "changeCreds": { - "title": "Ubah Kredensial", - "header": "Perbarui Detail Akun Anda", - "changePassword": "Anda menggunakan kredensial login default. Silakan masukkan kata sandi baru", - "newUsername": "Nama Pengguna Baru", - "oldPassword": "Kata Sandi Saat Ini", - "newPassword": "Kata Sandi Baru", - "confirmNewPassword": "Konfirmasi Kata Sandi Baru", - "submit": "Kirim Perubahan" - }, - "account": { - "title": "Pengaturan Akun", - "accountSettings": "Pengaturan Akun", - "adminSettings": "Pengaturan Admin - Melihat dan Menambahkan Pengguna", - "userControlSettings": "Pengaturan Kontrol Pengguna", - "changeUsername": "Ubah Nama Pengguna", - "newUsername": "Nama pengguna baru", - "password": "Konfirmasi Kata sandi", - "oldPassword": "Kata sandi lama", - "newPassword": "Kata Sandi Baru", - "changePassword": "Ubah Kata Sandi", - "confirmNewPassword": "Konfirmasi Kata Sandi Baru", - "signOut": "Keluar", - "yourApiKey": "API Key Anda", - "syncTitle": "Menyinkronkan pengaturan browser dengan Akun", - "settingsCompare": "Perbandingan Pengaturan:", - "property": "Properti", - "webBrowserSettings": "Pengaturan Peramban Web", - "syncToBrowser": "Sinkronisasi Akun -> Browser", - "syncToAccount": "Sinkronisasi Akun <- Browser" - }, - "adminUserSettings": { - "title": "Pengaturan Kontrol Pengguna", - "header": "Pengaturan Kontrol Admin", - "admin": "Administrator", - "user": "Pengguna", - "addUser": "Tambahkan Pengguna Baru", - "deleteUser": "Hapus Pengguna", - "confirmDeleteUser": "Haruskah pengguna dihapus?", - "confirmChangeUserStatus": "Haruskah pengguna dinonaktifkan/diaktifkan?", - "usernameInfo": "Nama pengguna hanya boleh mengandung huruf, angka, dan karakter khusus berikut @._+- atau harus berupa alamat email yang valid.", - "roles": "Peran", - "role": "Peran", - "actions": "Tindakan", - "apiUser": "Pengguna API Terbatas", - "extraApiUser": "Pengguna API Terbatas Tambahan", - "webOnlyUser": "Pengguna Khusus Web", - "demoUser": "Pengguna Demo (Tanpa pengaturan kustom)", - "internalApiUser": "Pengguna API Internal", - "forceChange": "Memaksa pengguna untuk mengubah nama pengguna/kata sandi saat masuk", - "submit": "Simpan Pengguna", - "changeUserRole": "Ubah Peran Pengguna", - "authenticated": "Terautentikasi", - "editOwnProfil": "Edit profil sendiri", - "enabledUser": "Pengguna diaktifkan", - "disabledUser": "Pengguna dinonaktifkan", - "activeUsers": "Pengguna Aktif:", - "disabledUsers": "Pengguna Dinonaktifkan:", - "totalUsers": "Total Pengguna:", - "lastRequest": "Permintaan Terakhir", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Impor/Ekspor Database", - "header": "Impor/Ekspor Database", - "fileName": "Nama Berkas", - "creationDate": "Tanggal Pembuatan", - "fileSize": "Ukuran Berkas", - "deleteBackupFile": "Hapus Berkas Cadangan", - "importBackupFile": "Impor Berkas Cadangan", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Unduh Berkas Cadangan", - "info_1": "Ketika mengimpor data, sangat penting untuk memastikan struktur yang benar. Jika Anda tidak yakin dengan apa yang Anda lakukan, cari nasihat dan dukungan dari seorang profesional. Kesalahan dalam struktur dapat menyebabkan malfungsi aplikasi, bahkan hingga tidak dapat menjalankan aplikasi sama sekali.", - "info_2": "Nama berkas tidak menjadi masalah saat mengunggah. Nama berkas akan diubah setelahnya mengikuti format backup_user_yyyyMMddHHmm.sql, memastikan konsistensi dalam penamaan.", - "submit": "Impor Cadangan", - "importIntoDatabaseSuccessed": "Impor ke database berhasil", - "backupCreated": "Database backup successful", - "fileNotFound": "Berkas tidak Ditemukan", - "fileNullOrEmpty": "Berkas tidak boleh null atau kosong", - "failedImportFile": "Impor Berkas Gagal", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "Sesi Anda telah kedaluwarsa. Silakan muat ulang halaman dan coba lagi.", - "refreshPage": "Refresh Page" - }, - "home": { - "desc": "Semua kebutuhan PDF Anda, langsung dari komputer lokal Anda.", - "searchBar": "Mencari fitur...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Melihat, membuat anotasi, menambahkan teks atau gambar" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "Alat Multi PDF", - "desc": "Menggabungkan, Memutar, Mengatur Ulang, dan Menghapus halaman" - }, - "merge": { - "title": "Menggabungkan", - "desc": "Gabungkan beberapa PDF dengan mudah menjadi satu." - }, - "split": { - "title": "Membagi", - "desc": "Membagi PDF menjadi beberapa dokumen" - }, - "rotate": { - "title": "Putar", - "desc": "Memutar PDF Anda dengan mudah." - }, - "imageToPdf": { - "title": "Gambar ke PDF", - "desc": "Mengonversi gambar (PNG, JPEG, GIF) ke PDF." - }, - "pdfToImage": { - "title": "PDF ke Gambar", - "desc": "Mengonversi PDF ke gambar. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Mengatur", - "desc": "Menghapus/Mengatur ulang halaman dalam urutan apa pun" - }, - "addImage": { - "title": "Tambahkan gambar", - "desc": "Menambahkan gambar ke lokasi yang ditentukan pada PDF" - }, - "watermark": { - "title": "Tambahkan watermark", - "desc": "Menambahkan watermark khusus ke dokumen PDF Anda." - }, - "permissions": { - "title": "Izin Perubahan", - "desc": "Mengubah izin dokumen PDF Anda" - }, - "removePages": { - "title": "Menghapus", - "desc": "Menghapus halaman yang tidak diinginkan dari dokumen PDF Anda." - }, - "addPassword": { - "title": "Tambahkan Kata Sandi", - "desc": "Enkripsi dokumen PDF Anda dengan kata sandi." - }, - "removePassword": { - "title": "Hapus Kata Sandi", - "desc": "Menghapus perlindungan kata sandi dari dokumen PDF Anda." - }, - "compressPdfs": { - "title": "Kompres", - "desc": "Kompres PDF untuk mengurangi ukuran berkas." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Ubah Metadata", - "desc": "Mengubah/Menghapus/Menambahkan metadata dari dokumen PDF" - }, - "fileToPDF": { - "title": "Mengonversi berkas ke PDF", - "desc": "Mengonversi hampir semua berkas ke PDF (DOCX, PNG, XLS, PPT, TXT dan lain-lain)" - }, - "ocr": { - "title": "Pemindaian/Pembersihan OCR", - "desc": "Memindai dan mendeteksi teks dari gambar di dalam PDF dan menambahkannya kembali sebagai teks." - }, - "extractImages": { - "title": "Ekstrak Gambar", - "desc": "Mengekstrak semua gambar dari PDF dan menyimpannya ke zip" - }, - "pdfToPDFA": { - "title": "PDF ke PDF/A", - "desc": "Konversi PDF ke PDF/A untuk penyimpanan jangka panjang" - }, - "PDFToWord": { - "title": "PDF ke Word", - "desc": "Mengonversi format PDF ke Word (DOC, DOCX, dan ODT)" - }, - "PDFToPresentation": { - "title": "PDF ke Presentasi", - "desc": "Mengonversi PDF ke format Presentasi (PPT, PPTX, dan ODP)" - }, - "PDFToText": { - "title": "PDF ke RTF (Teks)", - "desc": "Konversi PDF ke format Teks atau RTF" - }, - "PDFToHTML": { - "title": "PDF ke HTML", - "desc": "Mengonversi PDF ke format HTML" - }, - "PDFToXML": { - "title": "PDF ke XML", - "desc": "Mengonversi PDF ke format XML" - }, - "ScannerImageSplit": { - "title": "Mendeteksi/Memisahkan foto yang dipindai", - "desc": "Memisahkan beberapa foto dari dalam sebuah foto/PDF" - }, - "sign": { - "title": "Tanda Tangan", - "desc": "Menambahkan tanda tangan ke PDF dengan gambar, teks, atau gambar" - }, - "flatten": { - "title": "Meratakan", - "desc": "Menghapus semua elemen dan formulir interaktif dari PDF" - }, - "repair": { - "title": "Perbaikan", - "desc": "Melakukan perbaikan PDF yang rusak/rusak" - }, - "removeBlanks": { - "title": "Menghapus halaman kosong", - "desc": "Mendeteksi dan menghapus halaman kosong dari dokumen" - }, - "removeAnnotations": { - "title": "Menghapus Anotasi", - "desc": "Menghapus semua komentar/anotasi dari PDF" - }, - "compare": { - "title": "Bandingkan", - "desc": "Membandingkan dan menunjukkan perbedaan antara 2 Dokumen PDF" - }, - "certSign": { - "title": "Tanda tangani dengan Sertifikat", - "desc": "Menandatangani PDF dengan Certificate/Key (PEM/P12)" - }, - "removeCertSign": { - "title": "Hapus Tanda Tangan Sertifikat", - "desc": "Hapus tanda tangan sertifikat dari PDF" - }, - "pageLayout": { - "title": "Tata Letak Multi-Halaman", - "desc": "Menggabungkan beberapa halaman dokumen PDF menjadi satu halaman" - }, - "scalePages": { - "title": "Menyesuaikan ukuran/skala halaman", - "desc": "Mengubah ukuran/skala halaman dan/atau isinya." - }, - "pipeline": { - "title": "Pipeline", - "desc": "Menjalankan beberapa tindakan pada PDF dengan mendefinisikan skrip pipeline" - }, - "add-page-numbers": { - "title": "Tambahkan Nomor Halaman", - "desc": "Menambahkan nomor Halaman di seluruh dokumen di lokasi yang ditetapkan" - }, - "auto-rename": { - "title": "Ubah Nama Berkas PDF Secara Otomatis", - "desc": "Mengganti nama berkas PDF secara otomatis berdasarkan tajuk yang terdeteksi" - }, - "adjust-contrast": { - "title": "Menyesuaikan Warna/Kontras", - "desc": "Sesuaikan Kontras, Saturasi, dan Kecerahan PDF" - }, - "crop": { - "title": "Pangkas PDF", - "desc": "Pangkas PDF untuk memperkecil ukurannya (mempertahankan teks!)" - }, - "autoSplitPDF": { - "title": "Membagi Halaman Secara Otomatis", - "desc": "Membagi PDF yang dipindai secara otomatis dengan Kode QR pembagi halaman yang dipindai secara fisik" - }, - "sanitizePdf": { - "title": "Sanitasi", - "desc": "Menghapus skrip dan elemen lain dari file PDF" - }, - "URLToPDF": { - "title": "URL/Situs Web ke PDF", - "desc": "Mengonversi URL http apa pun ke PDF" - }, - "HTMLToPDF": { - "title": "HTML ke PDF", - "desc": "Mengonversi berkas HTML atau zip ke PDF" - }, - "MarkdownToPDF": { - "title": "Penurunan harga ke PDF", - "desc": "Mengonversi berkas Markdown apa pun ke PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Dapatkan Semua Info tentang PDF", - "desc": "Mengambil setiap dan semua informasi yang mungkin ada pada PDF" - }, - "extractPage": { - "title": "Ekstrak halaman", - "desc": "Mengekstrak halaman tertentu dari PDF" - }, - "PdfToSinglePage": { - "title": "PDF ke Satu Halaman Besar", - "desc": "Menggabungkan semua halaman PDF menjadi satu halaman besar" - }, - "showJS": { - "title": "Tampilkan Javascript", - "desc": "Mencari dan menampilkan JS apa pun yang disuntikkan ke dalam PDF" - }, - "autoRedact": { - "title": "Redaksional Otomatis", - "desc": "Menyunting Otomatis (Menghitamkan) teks dalam PDF berdasarkan teks masukan" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF ke CSV", - "desc": "Mengekstrak Tabel dari PDF yang mengonversinya menjadi CSV" - }, - "autoSizeSplitPDF": { - "title": "Pemisahan Otomatis berdasarkan Ukuran/Hitungan", - "desc": "Membagi satu PDF menjadi beberapa dokumen berdasarkan ukuran, jumlah halaman, atau jumlah dokumen" - }, - "overlay-pdfs": { - "title": "Tumpuk PDF", - "desc": "Menumpuk PDF di atas PDF lain" - }, - "split-by-sections": { - "title": "Membagi PDF berdasarkan Bagian", - "desc": "Membagi setiap halaman PDF menjadi beberapa bagian horizontal dan vertikal yang lebih kecil" - }, - "AddStampRequest": { - "title": "Tambahkan Tanda Tangan ke PDF", - "desc": "Tambahkan teks atau gambar tanda tangan di lokasi yang ditentukan" - }, - "removeImagePdf": { - "title": "Hapus Gambar", - "desc": "Hapus gambar dari PDF untuk mengurangi ukuran file" - }, - "splitPdfByChapters": { - "title": "Pisahkan PDF berdasarkan Bab", - "desc": "Memisahkan PDF menjadi beberapa file berdasarkan struktur babnya." - }, - "validateSignature": { - "title": "Validate PDF Signature", - "desc": "Verify digital signatures and certificates in PDF documents" - }, - "replaceColorPdf": { - "title": "Ganti dan Inversi Warna", - "desc": "Ganti warna untuk teks dan latar belakang dalam PDF dan inversi seluruh warna PDF untuk mengurangi ukuran file" - } - }, - "viewPdf": { - "tags": "melihat,membaca,membuat anotasi,teks,gambar", - "title": "View/Edit PDF", - "header": "Lihat PDF" - }, - "multiTool": { - "tags": "Alat multi,Operasi multi,UI,klik seret,front end,sisi klien,interaktif,sulit diatur,pindah", - "title": "Alat Multi PDF", - "header": "Alat Multi PDF", - "uploadPrompts": "Nama Berkas", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "selectPages": "Page Select", - "selectedPages": "Selected Pages", - "page": "Page", - "deleteSelected": "Delete Selected", - "downloadAll": "Export", - "downloadSelected": "Export Selected", - "insertPageBreak": "Insert Page Break", - "addFile": "Add File", - "rotateLeft": "Rotate Left", - "rotateRight": "Rotate Right", - "split": "Split", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "Delete", - "dragDropMessage": "Page(s) Selected", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "menggabungkan,Pengoperasian halaman,Back end,sisi server", - "title": "Gabungkan", - "header": "Gabungkan beberapa PDFs (2+)", - "sortByName": "Sortir berdasarkan nama", - "sortByDate": "Sortir berdasrkan tanggal", - "removeCertSign": "Hapus tanda tangan digital dalam file yang dicampur?", - "submit": "Gabungkan" - }, - "split": { - "tags": "Pengoperasian halaman,membagi,Multi Halaman,memotong,sisi server", - "title": "Membagi PDF", - "header": "Membagi PDF", - "desc": { - "1": "Angka yang Anda pilih adalah nomor halaman yang ingin Anda pisahkan", - "2": "Dengan demikian, memilih 1,3,7-9 akan membagi dokumen 10 halaman menjadi 6 PDF terpisah:", - "3": "Dokumen #1: Halaman 1", - "4": "Dokumen #2: Halaman 2 dan 3", - "5": "Dokumen #3: Halaman 4, 5, 6 dan 7", - "6": "Dokumen #4: Halaman 8", - "7": "Dokumen #5: Halaman 9", - "8": "Dokumen #6: Halaman 10" - }, - "splitPages": "Masukkan halaman yang akan dipisah:", - "submit": "Pisahkan" - }, - "rotate": { - "tags": "sisi server", - "title": "Rotasi PDF", - "header": "Rotasi PDF", - "selectAngle": "Pilih sudut rotasi (dalam kelipatan 90 derajat):", - "submit": "Rotasi" - }, - "imageToPdf": { - "tags": "konversi,img,jpg,gambar,foto" - }, - "pdfToImage": { - "tags": "konversi,img,jpg,gambar,foto", - "title": "PDF ke Gambar", - "header": "PDF ke Gambar", - "selectText": "Format Gambar", - "singleOrMultiple": "Tipe hasil halaman ke gambar", - "single": "Gambar Besar Tunggal Menggabungkan semua halaman", - "multi": "Beberapa Gambar, satu gambar per halaman", - "colorType": "Tipe warna", - "color": "Warna", - "grey": "Skala abu-abu", - "blackwhite": "Black and White (Bisa kehilangan data!)", - "submit": "Konversi", - "info": "Python tidak terinstal. Diperlukan untuk konversi WebP.", - "placeholder": "(misalnya 1,2,8 atau 4,7,12-16 atau 2n-1)" - }, - "pdfOrganiser": { - "tags": "dupleks,genap,ganjil,sortir,pindah", - "title": "Pengaturan Halaman", - "header": "Pengaturan Halaman PDF", - "submit": "Susun ulang halaman", - "mode": { - "_value": "Mode", - "1": "Urutan Halaman Kustom", - "2": "Urutan Terbalik", - "3": "Sortir Duplex", - "4": "Sortir Buku", - "5": "Sortir Buku Jahitan Samping", - "6": "Pemisahan Genap-Ganjil", - "7": "Hapus Pertama", - "8": "Hapus Terakhir", - "9": "Hapus Pertama dan Terakhir", - "10": "Penggabungan Genap-Ganjil", - "11": "Duplicate all pages" - }, - "placeholder": "(misalnya 1,3,2 atau 4-8,2,10-12 atau 2n-1)" - }, - "addImage": { - "tags": "img,jpg,gambar,foto", - "title": "Tambahkan Gambar", - "header": "Tambahkan Gambar ke PDF", - "everyPage": "Setiap Halaman?", - "upload": "Tambahkan Gambar", - "submit": "Tambahkan Gambar" - }, - "watermark": { - "tags": "Teks,berulang,label,sendiri,hak cipta,watermark,img,jpg,picture,photo", - "title": "Tambahkan Watermark", - "header": "Tambahkan Watermark", - "customColor": "Warna Teks Kustom", - "selectText": { - "1": "Pilih PDF untuk menambahkan watermark:", - "2": "Text Watermark:", - "3": "Ukuran Huruf:", - "4": "Rotasi (0-360):", - "5": "Width Spacer (Spasi diantara setiap watermark horisontal):", - "6": "Height Spacer (Spasi diantara setiap watermark vertikal):", - "7": "Kejernihan (0% - 100%):", - "8": "Tipe Watermark:", - "9": "Gambar Watermark:", - "10": "Konversi PDF ke PDF-Image" - }, - "submit": "Tambahkan Watermark", - "type": { - "1": "Teks", - "2": "Gambar" - } - }, - "permissions": { - "tags": "baca,tulis,sunting,cetak", - "title": "Ganti Perizinan", - "header": "Ganti Perizinan", - "warning": "Peringatan untuk menyetel izin yang tidak dapat diubah, disarankan untuk menyetel izin dengan kata sandi melalui halaman tambah kata sandi", - "selectText": { - "1": "Pilih PDF untuk mengubah izin", - "2": "Perizinan untuk diubah", - "3": "Pencegahan untuk penyusunan dokumen", - "4": "Pencegahan untuk ekstraksi konten", - "5": "Pencegahan ekstraksi untuk aksesibilitas", - "6": "Pencegahan untuk mengisi formulir", - "7": "Pencegahan untuk pengubahan", - "8": "Pencegahan untuk perubahan anotasi", - "9": "Pencegahan untuk mencetak", - "10": "Pencegahan untuk mencetak format yang berbeda" - }, - "submit": "Ganti" - }, - "removePages": { - "tags": "Menghapus halaman,menghapus halaman" - }, - "addPassword": { - "tags": "aman,Keamanan", - "title": "Tambahkan kata sandi", - "header": "Tambahkan kata sandi (Enkrip)", - "selectText": { - "1": "Pilih PDF untuk enkripsi", - "2": "Kata sandi Pengguna", - "3": "Panjang kunci enkripsi", - "4": "Nilai yang lebih tinggi lebih kuat, tetapi nilai yang lebih rendah memiliki kompatibilitas yang lebih baik.", - "5": "Perizinan untuk diubah (Disarankan untuk digunakan bersama dengan kata sandi Pemilik)", - "6": "Pencegahan untuk penyusunan dokumen", - "7": "Pencegahan untuk ekstraksi konten", - "8": "Pencegahan ekstraksi untuk aksesibilitas", - "9": "Pencegahan untuk mengisi formulir", - "10": "Pencegahan untuk pengubahan", - "11": "Pencegahan untuk perubahan anotasi", - "12": "Pencegahan untuk mencetak", - "13": "Pencegahan untuk mencetak format yang berbeda", - "14": "Kata sandi Pemilik", - "15": "Membatasi apa yang dapat dilakukan dengan dokumen setelah dibuka (Tidak didukung oleh semua pembaca)", - "16": "Membatasi pembukaan dokumen itu sendiri" - }, - "submit": "Enkripsi" - }, - "removePassword": { - "tags": "aman,Dekripsi,keamanan,buka kata sandi,hapus kata sandi", - "title": "Hapus kata sandi", - "header": "Hapus kata sandi (Dekrip)", - "selectText": { - "1": "Pilih PDF yang akan di Dekrip", - "2": "Kata Sandi" - }, - "submit": "Hapus" - }, - "compressPdfs": { - "tags": "remas, kecil, mini" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Judul,penulis,tanggal,pembuatan,waktu,penerbit,produser,statistik", - "title": "Judul:", - "header": "Ganti Metadata", - "selectText": { - "1": "Silakan edit variabel yang ingin Anda ubah", - "2": "Hapus semua metadata", - "3": "Tampilkan Metadata Khusus:", - "4": "Metadata Lain-lain:", - "5": "Tambahkan Metadata Khusus" - }, - "author": "Penulis:", - "creationDate": "Tanggal Dibuat (yyyy/MM/dd HH:mm:ss):", - "creator": "Pencipta:", - "keywords": "Kata kunci:", - "modDate": "Tangal Diperbarui (yyyy/MM/dd HH:mm:ss):", - "producer": "Produser:", - "subject": "Subjek:", - "trapped": "Terperangkap:", - "submit": "Ganti" - }, - "fileToPDF": { - "tags": "transformasi,format,dokumen,gambar,slide,text,konversi,office,docs,word,excel,powerpoint", - "title": "Berkas ke PDF", - "header": "Mengonversi berkas apa pun ke PDF", - "credit": "Layanan ini menggunakan LibreOffice dan Unoconv untuk konversi berkas.", - "supportedFileTypesInfo": "Jenis File Dukungan", - "supportedFileTypes": "Jenis berkas yang didukung harus mencakup yang di bawah ini, namun untuk daftar lengkap format yang didukung, silakan lihat dokumentasi LibreOffice", - "submit": "Konversi ke PDF" - }, - "ocr": { - "tags": "rekognisi,teks,gambar,pindai,baca,identifikasi,deteksi,dapat diedit", - "title": "OCR / Pembersihan Pindaian", - "header": "Pemindaian Pembersihan / OCR (Pengenalan Karakter Optik)", - "selectText": { - "1": "Pilih bahasa yang akan dideteksi di dalam PDF (Bahasa yang terdaftar adalah bahasa yang saat ini terdeteksi):", - "2": "Menghasilkan berkas teks yang berisi teks OCR di samping PDF yang di-OCR", - "3": "Halaman yang benar dipindai pada sudut miring dengan memutarnya kembali ke tempatnya", - "4": "Halaman yang bersih sehingga kecil kemungkinan OCR akan menemukan teks dalam kebisingan latar belakang. (Tidak ada perubahan output)", - "5": "Bersihkan halaman sehingga kecil kemungkinan OCR akan menemukan teks dalam kebisingan latar belakang, mempertahankan pembersihan pada keluaran.", - "6": "Mengabaikan halaman yang memiliki teks interaktif, hanya halaman OCR yang berupa gambar", - "7": "Memaksa OCR, akan meng-OCR setiap halaman dengan menghapus semua elemen teks asli", - "8": "Normal (Akan terjadi kesalahan jika PDF berisi teks)", - "9": "Pengaturan Tambahan", - "10": "Mode OCR", - "11": "Hapus gambar setelah OCR (Menghapus Semua gambar, hanya berguna jika merupakan bagian dari langkah konversi)", - "12": "Jenis Render (Lanjutan)" - }, - "help": "Silakan baca dokumentasi ini tentang cara menggunakan ini untuk bahasa lain dan/atau penggunaan yang tidak ada di docker", - "credit": "Layanan ini menggunakan qpdf dan Tesseract untuk OCR.", - "submit": "Memproses PDF dengan OCR" - }, - "extractImages": { - "tags": "gambar, foto, simpan, arsip, zip, tangkap, ambil", - "title": "Ekstrak Gambar", - "header": "Mengekstrak Gambar", - "selectText": "Pilih format gambar yang akan dikonversi", - "allowDuplicates": "Simpan Gambar Duplikat", - "submit": "Ekstrak" - }, - "pdfToPDFA": { - "tags": "arsip, jangka panjang, standar, konversi, penyimpanan, pelestarian", - "title": "PDF Ke PDF/A", - "header": "PDF ke PDF/A", - "credit": "Layanan ini menggunakan libreoffice untuk konversi PDF/A.", - "submit": "Konversi", - "tip": "Saat ini tidak dapat digunakan untuk beberapa input sekaligus", - "outputFormat": "Format keluaran", - "pdfWithDigitalSignature": "PDF ini mengandung tanda tangan digital. Ini akan dihapus pada langkah berikutnya." - }, - "PDFToWord": { - "tags": "doc, docx, odt, kata, transformasi, format, konversi, kantor, microsoft, docfile", - "title": "PDF ke Word", - "header": "PDF ke Word", - "selectText": { - "1": "Hasil format berkas" - }, - "credit": "Layanan ini menggunakan LibreOffice untuk konversi berkas.", - "submit": "Konversi" - }, - "PDFToPresentation": { - "tags": "slide, pertunjukan, kantor, microsoft", - "title": "PDF Ke Presentation", - "header": "PDF ke Presentation", - "selectText": { - "1": "Hasil format berkas" - }, - "credit": "Layanan ini menggunakan LibreOffice untuk konversi berkas.", - "submit": "Konversi" - }, - "PDFToText": { - "tags": "format kaya, format teks kaya, format teks kaya", - "title": "PDF ke RTF (Text)", - "header": "PDF ke RTF (Text)", - "selectText": { - "1": "Hasil format berkas" - }, - "credit": "Layanan ini menggunakan LibreOffice untuk konversi berkas.", - "submit": "Konversi" - }, - "PDFToHTML": { - "tags": "konten web, ramah browser", - "title": "PDF ke HTML", - "header": "PDF ke HTML", - "credit": "Layanan ini menggunakan pdftohtml untuk konversi berkas.", - "submit": "Konversi" - }, - "PDFToXML": { - "tags": "ekstraksi data, konten terstruktur, interop, transformasi, konversi", - "title": "PDF ke XML", - "header": "PDF ke XML", - "credit": "Layanan ini menggunakan LibreOffice untuk konversi berkas.", - "submit": "Konversi" - }, - "ScannerImageSplit": { - "tags": "pisahkan, deteksi otomatis, pindai, multi-foto, atur", - "selectText": { - "1": "Ambang Batas Sudut:", - "2": "Menetapkan sudut absolut minimum yang diperlukan agar gambar dapat diputar (default: 10).", - "3": "Toleransi:", - "4": "Menentukan kisaran variasi warna di sekitar perkiraan warna latar belakang (default: 30).", - "5": "Area Minimum:", - "6": "Menetapkan ambang batas area minimum untuk foto (default: 10000).", - "7": "Area Kontur Minimum:", - "8": "Menetapkan ambang batas area kontur minimum untuk foto", - "9": "Ukuran Batas:", - "10": "Menetapkan ukuran batas yang ditambahkan dan dihapus untuk mencegah batas putih pada output (default: 1)." - }, - "info": "Python tidak terinstal. Ini diperlukan untuk menjalankan." - }, - "sign": { - "tags": "mengesahkan, inisial, tanda tangan yang digambar, tanda tangan teks, tanda tangan gambar", - "title": "Tanda", - "header": "Tandatangani PDF", - "upload": "Unggah Gambar", - "draw": "Gambar Tanda Tangan", - "text": "Masukan Teks", - "clear": "Hapus", - "add": "Tambah", - "saved": "Tanda Tangan Disimpan", - "save": "Simpan Tanda Tangan", - "personalSigs": "Tanda Tangan Pribadi", - "sharedSigs": "Tanda Tangan Berbagi", - "noSavedSigs": "Tidak ditemukan tanda tangan yang disimpan", - "addToAll": "Add to all pages", - "delete": "Delete", - "first": "First page", - "last": "Last page", - "next": "Next page", - "previous": "Previous page", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "statis, nonaktif, non-interaktif, ramping", - "title": "Ratakan", - "header": "Ratakan PDF", - "flattenOnlyForms": "Ratakan hanya formulir", - "submit": "Ratakan" - }, - "repair": { - "tags": "perbaiki, pulihkan, koreksi, pulihkan", - "title": "Perbaiki", - "header": "Perbaiki PDF", - "submit": "Perbaiki" - }, - "removeBlanks": { - "tags": "membersihkan, merampingkan, non-konten, mengatur", - "title": "Hapus yang Kosong", - "header": "Hapus Halaman Kosong", - "threshold": "Ambang Batas Keputihan Piksel:", - "thresholdDesc": "Ambang batas untuk menentukan seberapa putih piksel putih yang harus diklasifikasikan sebagai 'Putih'. 0=Hitam, 255 putih murni.", - "whitePercent": "Persen Putih (%):", - "whitePercentDesc": "Persentase halaman yang harus berupa piksel 'putih' yang akan dihapus", - "submit": "Hapus Kosong" - }, - "removeAnnotations": { - "tags": "komentar, sorot, catatan, markup, hapus", - "title": "Hapus Anotasi", - "header": "Hapus Anotasi", - "submit": "Hapus" - }, - "compare": { - "tags": "membedakan, kontras, perubahan, analisis", - "title": "Bandingkan", - "header": "Bandingkan PDF", - "highlightColor": { - "1": "Warna Sorotan 1:", - "2": "Warna Sorotan 2:" - }, - "document": { - "1": "Dokumen 1", - "2": "Dokumen 2" - }, - "submit": "Bandingkan", - "complex": { - "message": "Satu atau kedua dokumen yang disediakan adalah file besar, keakuratan perbandingan mungkin berkurang" - }, - "large": { - "file": { - "message": "Satu atau Kedua dokumen yang disediakan terlalu besar untuk diproses" - } - }, - "no": { - "text": { - "message": "Satu atau kedua PDF yang dipilih tidak memiliki konten teks. Pilih PDF dengan teks untuk perbandingan." - } - } - }, - "certSign": { - "tags": "mengotentikasi, PEM, P12, resmi, mengenkripsi", - "title": "Penandatanganan Sertifikat", - "header": "Menandatangani PDF dengan sertifikat Anda (Sedang dalam proses)", - "selectPDF": "Pilih Berkas PDF untuk Penandatanganan:", - "jksNote": "Catatan: Jika tipe sertifikat Anda tidak terdaftar di bawah, silakan konversi ke file Java Keystore (.jks) menggunakan alat baris perintah keytool. Kemudian, pilih opsi file .jks di bawah.", - "selectKey": "Pilih Berkas Kunci Pribadi Anda (format PKCS # 8, bisa .pem atau .der):", - "selectCert": "Pilih Berkas Sertifikat Anda (format X.509, bisa .pem atau .der):", - "selectP12": "Pilih Berkas Keystore PKCS #12 Anda (.p12 atau .pfx) (Opsional, Jika disediakan, berkas tersebut harus berisi kunci pribadi dan sertifikat Anda):", - "selectJKS": "Pilih Berkas Java Keystore File (.jks atau .keystore):", - "certType": "Jenis Sertifikat", - "password": "Masukkan Kata Sandi Kunci atau Kunci Pribadi Anda (Jika Ada):", - "showSig": "Tampilkan Tanda Tangan", - "reason": "Alasan", - "location": "Lokasi", - "name": "Nama", - "showLogo": "Tampilkan Logo", - "submit": "Tanda tangani PDF" - }, - "removeCertSign": { - "tags": "otentikasi, PEM, P12, resmi, dekripsi", - "title": "Hapus Tanda Tangan Sertifikat", - "header": "Hapus sertifikat digital dari PDF", - "selectPDF": "Pilih file PDF:", - "submit": "Hapus Tanda Tangan" - }, - "pageLayout": { - "tags": "menggabungkan, komposit, tampilan tunggal, mengatur", - "title": "Tata Letak Multi Halaman", - "header": "Tata Letak Multi Halaman", - "pagesPerSheet": "Halaman per lembar:", - "addBorder": "Menambahkan Batas", - "submit": "Kirim" - }, - "scalePages": { - "tags": "mengubah ukuran, memodifikasi, dimensi, mengadaptasi", - "title": "Sesuaikan skala halaman", - "header": "Sesuaikan skala halaman", - "pageSize": "Ukuran halaman dokumen.", - "keepPageSize": "Ukuran Asli", - "scaleFactor": "Tingkat zoom (potong) halaman.", - "submit": "Kirim" - }, - "add-page-numbers": { - "tags": "beri halaman, beri label, atur, indeks" - }, - "auto-rename": { - "tags": "deteksi otomatis, berbasis tajuk, atur, beri label ulang", - "title": "Ganti Nama Otomatis", - "header": "Ganti Nama PDF Otomatis", - "submit": "Ganti Nama Otomatis" - }, - "adjust-contrast": { - "tags": "koreksi warna, menyetel, memodifikasi, meningkatkan" - }, - "crop": { - "tags": "memangkas, mengecilkan, mengedit, membentuk", - "title": "Pangkas", - "header": "Pangkas PDF", - "submit": "Kirim" - }, - "autoSplitPDF": { - "tags": "Berbasis QR, pisahkan, pindai segmen, atur", - "title": "PDF Pisah Otomatis", - "header": "Pisahkan PDF secara otomatis", - "description": "Cetak, Sisipkan, Pindai, unggah, dan biarkan kami memisahkan dokumen Anda secara otomatis. Tidak perlu menyortir secara manual.", - "selectText": { - "1": "Cetak beberapa lembar pembatas dari bawah (Hitam putih tidak masalah).", - "2": "Pindai semua dokumen Anda sekaligus dengan memasukkan lembar pembatas di antaranya.", - "3": "Unggah satu berkas PDF besar yang dipindai dan biarkan Stirling PDF menangani sisanya.", - "4": "Halaman pembatas secara otomatis terdeteksi dan dihapus, menjamin dokumen akhir yang rapi." - }, - "formPrompt": "Kirimkan PDF yang berisi pembagi Halaman Stirling-PDF:", - "duplexMode": "Mode Dupleks (Pemindaian depan dan belakang)", - "dividerDownload2": "Unduh 'Pembagi Pembagi Otomatis (dengan instruksi).pdf'", - "submit": "Kirim" - }, - "sanitizePdf": { - "tags": "bersih, terlindungi, aman, menghilangkan ancaman" - }, - "URLToPDF": { - "tags": "tangkap web, simpan halaman, web-ke-dok, arsip", - "title": "URL ke PDF", - "header": "URL Ke PDF", - "submit": "Konversi", - "credit": "Menggunakan WeasyPrint" - }, - "HTMLToPDF": { - "tags": "markup, konten web, transformasi, konversi", - "title": "HTML Ke PDF", - "header": "HTML Ke PDF", - "help": "Menerima berkas HTML dan ZIP yang berisi html / css / gambar, dll yang diperlukan", - "submit": "Konversi", - "credit": "Menggunakan WeasyPrint", - "zoom": "Tingkat perbersan untuk menampilkan situs web.", - "pageWidth": "Lebar halaman dalam sentimeter. (Kosong untuk default)", - "pageHeight": "Tinggi halaman dalam sentimeter. (Kosong untuk default)", - "marginTop": "Margin atas halaman dalam milimeter. (Kosong untuk default)", - "marginBottom": "Margin bawah halaman dalam milimeter. (Kosong untuk default)", - "marginLeft": "Margin kiri halaman dalam milimeter. (Kosong untuk default)", - "marginRight": "Margin kanan halaman dalam milimeter. (Kosong untuk default)", - "printBackground": "Render latar belakang situs web.", - "defaultHeader": "Aktifkan Header Default (Nama dan nomor halaman)", - "cssMediaType": "Ubah jenis media CSS halaman.", - "none": "Tidak ada", - "print": "Cetak", - "screen": "Layar" - }, - "MarkdownToPDF": { - "tags": "markup, konten web, transformasi, konversi", - "title": "Markdown ke PDF", - "header": "Markdown Ke PDF", - "submit": "Konversi", - "help": "Pekerjaan sedang berlangsung", - "credit": "Menggunakan WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "informasi, data, statistik, statistik", - "title": "Dapatkan Info tentang PDF", - "header": "Dapatkan Info tentang PDF", - "submit": "Dapatkan Info", - "downloadJson": "Unduh JSON" - }, - "extractPage": { - "tags": "ekstrak" - }, - "PdfToSinglePage": { - "tags": "halaman tunggal" - }, - "showJS": { - "tags": "JS", - "title": "Tampilkan Javascript", - "header": "Tampilkan Javascript", - "downloadJS": "Unduh Javascript", - "submit": "Tampilkan" - }, - "autoRedact": { - "tags": "Hapus, Sembunyikan, padamkan, hitam, hitam, penanda, tersembunyi", - "title": "Redaksional Otomatis", - "header": "Redaksional Otomatis", - "colorLabel": "Warna", - "textsToRedactLabel": "Teks untuk Disunting (dipisahkan baris)", - "textsToRedactPlaceholder": "misalnya \\nRahasia \\nRahasia Tertinggi", - "useRegexLabel": "Gunakan Regex", - "wholeWordSearchLabel": "Pencarian Seluruh Kata", - "customPaddingLabel": "Padding Ekstra Kustom", - "convertPDFToImageLabel": "Konversi PDF ke PDF-Gambar (Digunakan untuk menghapus teks di belakang kotak)", - "submitButton": "Kirim" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV, Ekstraksi Tabel, ekstrak, konversi" - }, - "autoSizeSplitPDF": { - "tags": "pdf, membagi, dokumen, organisasi" - }, - "overlay-pdfs": { - "tags": "Overlays", - "header": "Hamparan berkas PDF", - "baseFile": { - "label": "Pilih basis berkas PDF" - }, - "overlayFiles": { - "label": "Pilih hamparan berkas PDF" - }, - "mode": { - "label": "Pilih Mode Hamparan", - "sequential": "Hamparan Sequential", - "interleaved": "Hamparan Interleaved", - "fixedRepeat": "Hamparan Fixed Repeat" - }, - "counts": { - "label": "Jumlah Overlay (Untuk hamparan fixed repeat)", - "placeholder": "Masukkan hitungan yang dipisahkan oleh koma (e.g., 2,3,1)" - }, - "position": { - "label": "Pilih posisi hamparan", - "foreground": "Latar depan", - "background": "Latar belakang" - }, - "submit": "Kirim" - }, - "split-by-sections": { - "tags": "Membagi Bagian, Membagi, Menyesuaikan", - "title": "Pisahkan PDF berdasarkan bagian", - "header": "Pisahkan PDF menjadi beberapa bagian", - "horizontal": { - "label": "Pembagian Horizontal", - "placeholder": "Input angka untuk pembagian horizontal" - }, - "vertical": { - "label": "Pembagian Vertikal", - "placeholder": "Input angka untuk pembagian vertikal" - }, - "submit": "Pisahkan PDF", - "merge": "Gabung Menjadi Berkas PDF Tunggal" - }, - "AddStampRequest": { - "tags": "Tanda tangan, tambahkan gambar, posisikan gambar di tengah, air tinta, PDF, embedding, customisasi", - "header": "Stampel PDF", - "title": "Stampel PDF", - "stampType": "Jenis Stampel", - "stampText": "Teks Stampel", - "stampImage": "Gambar Stampel", - "alphabet": "Alfabet", - "fontSize": "Ukuran Font/Gambar", - "rotation": "Rotasi", - "opacity": "Transparansi", - "position": "Posisi", - "overrideX": "Timpa Koordinat X", - "overrideY": "Timpa Koordinat Y", - "customMargin": "Margin Kustom", - "customColor": "Warna Teks Kustom", - "submit": "Kirim" - }, - "removeImagePdf": { - "tags": "Hapus Gambar,Operasi Halaman,Backend,server side" - }, - "splitPdfByChapters": { - "tags": "pemisahan,bab,bookmark,atur" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "Validate PDF Signatures", - "header": "Validate Digital Signatures", - "selectPDF": "Select signed PDF file", - "submit": "Validate Signatures", - "results": "Validation Results", - "status": { - "_value": "Status", - "valid": "Valid", - "invalid": "Invalid" - }, - "signer": "Signer", - "date": "Date", - "reason": "Reason", - "location": "Location", - "noSignatures": "No digital signatures found in this document", - "chain": { - "invalid": "Certificate chain validation failed - cannot verify signer's identity" - }, - "trust": { - "invalid": "Certificate not in trust store - source cannot be verified" - }, - "cert": { - "expired": "Certificate has expired", - "revoked": "Certificate has been revoked", - "info": "Certificate Details", - "issuer": "Issuer", - "subject": "Subject", - "serialNumber": "Serial Number", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "algorithm": "Algorithm", - "keySize": "Key Size", - "version": "Version", - "keyUsage": "Key Usage", - "selfSigned": "Self-Signed", - "bits": "bits" - }, - "signature": { - "info": "Signature Information", - "_value": "Signature", - "mathValid": "Signature is mathematically valid BUT:" - }, - "selectCustomCert": "Custom Certificate File X.509 (Optional)" - }, - "replace-color": { - "title": "Ganti-Inversi-Warna", - "header": "Ganti-Inversi Warna PDF", - "selectText": { - "1": "Opsi Ganti atau Inversi warna", - "2": "Default(Warna kontras tinggi default)", - "3": "Kustom(Warna yang disesuaikan)", - "4": "Full-Inversi(Inversi semua warna)", - "5": "Opsi warna kontras tinggi", - "6": "teks putih di latar belakang hitam", - "7": "teks hitam di latar belakang putih", - "8": "teks kuning di latar belakang hitam", - "9": "teks hijau di latar belakang hitam", - "10": "Pilih warna teks", - "11": "Pilih warna latar belakang" - }, - "submit": "Ganti" - }, - "replaceColorPdf": { - "tags": "Ganti Warna,Operasi Halaman,Backend,server side" - }, - "login": { - "title": "Masuk", - "header": "Masuk", - "signin": "Masuk", - "rememberme": "Ingat saya", - "invalid": "Nama pengguna atau kata sandi tidak valid.", - "locked": "Akun Anda telah dikunci.", - "signinTitle": "Silakan masuk", - "ssoSignIn": "Masuk melalui Single Sign - on", - "oAuth2AutoCreateDisabled": "OAUTH2 Buat Otomatis Pengguna Dinonaktifkan", - "oAuth2AdminBlockedUser": "Registrasi atau login pengguna yang tidak terdaftar saat ini diblokir. Silakan hubungi administrator.", - "oauth2RequestNotFound": "Permintaan otorisasi tidak ditemukan", - "oauth2InvalidUserInfoResponse": "Respons Info Pengguna Tidak Valid", - "oauth2invalidRequest": "Permintaan Tidak Valid", - "oauth2AccessDenied": "Akses Ditolak", - "oauth2InvalidTokenResponse": "Respons Token Tidak Valid", - "oauth2InvalidIdToken": "Token ID Tidak Valid", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "Pengguna dinonaktifkan, login saat ini diblokir dengan nama pengguna ini. Silakan hubungi administrator.", - "alreadyLoggedIn": "Anda sudah login ke", - "alreadyLoggedIn2": "perangkat. Silakan keluar dari perangkat dan coba lagi.", - "toManySessions": "Anda memiliki terlalu banyak sesi aktif", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF Ke Halaman Tunggal", - "header": "PDF Ke Halaman Tunggal", - "submit": "Konversi ke Halaman Tunggal" - }, - "pageExtracter": { - "title": "Ekstrak Halaman", - "header": "Ekstrak Halaman", - "submit": "Ekstrak", - "placeholder": "(misalnya 1,2,8 atau 4,7,12-16 atau 2n-1)" - }, - "sanitizePDF": { - "title": "Bersihkan PDF", - "header": "Membersihkan berkas PDF", - "selectText": { - "1": "Hapus tindakan JavaScript", - "2": "Hapus berkas yang disematkan", - "3": "Remove XMP metadata", - "4": "Hapus tautan", - "5": "Hapus font", - "6": "Remove Document Info Metadata" - }, - "submit": "Membersihkan PDF" - }, - "adjustContrast": { - "title": "Sesuaikan Kontras", - "header": "Sesuaikan Kontras", - "contrast": "Kontras:", - "brightness": "Kecerahan:", - "saturation": "Saturasi:", - "download": "Unduh" - }, - "compress": { - "title": "Kompres", - "header": "Kompres PDF", - "credit": "Layanan ini menggunakan qpdf untuk Kompresi/Optimalisasi PDF.", - "grayscale": { - "label": "Terapkan Skala Abu-Abu untuk Kompresi" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Tingkat Optimalisasi:", - "4": "Mode Otomatis - Menyesuaikan kualitas secara otomatis untuk mendapatkan PDF dengan ukuran yang tepat", - "5": "Ukuran PDF yang diharapkan (mis. 25MB, 10,8MB, 25KB)" - }, - "submit": "Kompres" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "This feature is also available in our multi-tool page. Check it out for enhanced page-by-page UI and additional features!" - }, - "pageRemover": { - "title": "Penghapus Halaman", - "header": "Penghapus Halaman PDF", - "pagesToDelete": "Halaman yang akan dihapus (Masukkan daftar nomor halaman yang dipisahkan dengan koma) :", - "submit": "Hapus Halaman", - "placeholder": "(misalnya 1,2,6 atau 1-10,15-30)" - }, - "imageToPDF": { - "title": "Gambar ke PDF", - "header": "Gambar ke PDF", - "submit": "Konversi", - "selectLabel": "Opsi Kesesuaian Gambar", - "fillPage": "Isi Halaman", - "fitDocumentToImage": "Isi Dokumen dengan Gambar", - "maintainAspectRatio": "Pertahankan aspek rasio", - "selectText": { - "2": "Putar PDF secara otomatis", - "3": "Logika multi berkas (Hanya diaktifkan jika bekerja dengan banyak gambar)", - "4": "Gabungkan menjadi satu PDF", - "5": "Mengonversi ke PDF yang terpisah" - } - }, - "PDFToCSV": { - "title": "PDF ke CSV", - "header": "PDF ke CSV", - "prompt": "Pilih halaman untuk mengambil tabel", - "submit": "Ektraksi" - }, - "split-by-size-or-count": { - "title": "Pisahkan PDF berdasarkan ukuran atau jumlah", - "header": "Pisahkan PDF berdasarkan ukuran atau jumlah", - "type": { - "label": "Pilih Tipe Split", - "size": "Berdasarkan Ukuran", - "pageCount": "Berdasarkan Jumlah Halaman", - "docCount": "Berdasarkan Jumlah Dokumen" - }, - "value": { - "label": "Masukkan Jumlah", - "placeholder": "Masukkan ukuran (e.g., 2MB or 3KB) atau hitungan (e.g., 5)" - }, - "submit": "Kirim" - }, - "printFile": { - "title": "Cetak File", - "header": "Cetak File ke Printer", - "selectText": { - "1": "Pilih File untuk Dicetak", - "2": "Masukkan Nama Printer" - }, - "submit": "Cetak" - }, - "licenses": { - "nav": "Lisensi", - "title": "Lisensi Pihak Ketiga", - "header": "Lisensi Pihak Ketiga", - "module": "Modul", - "version": "Versi", - "license": "Lisensi" - }, - "survey": { - "nav": "Survei", - "title": "Survei Stirling-PDF", - "description": "Stirling-PDF tidak memiliki pelacakan, jadi kami ingin mendengar dari pengguna kami untuk meningkatkan Stirling-PDF!", - "changes": "Stirling-PDF telah berubah sejak survei terakhir! Untuk mengetahui lebih lanjut, silakan periksa posting blog kami di sini:", - "changes2": "Dengan perubahan ini, kami mendapatkan dukungan bisnis yang dibayar dan pendanaan", - "please": "Silakan pertimbangkan untuk mengikuti survei kami!", - "disabled": "(Popup survei akan dinonaktifkan dalam pembaruan berikutnya tetapi tersedia di bagian bawah halaman)", - "button": "Ikuti Survei", - "dontShowAgain": "Jangan tampilkan lagi", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Hapus gambar", - "header": "Hapus gambar", - "removeImage": "Hapus gambar", - "submit": "Hapus gambar" - }, - "splitByChapters": { - "title": "Pecah PDF berdasarkan Bab", - "header": "Pecah PDF berdasarkan Bab", - "bookmarkLevel": "Tingkatan Markah", - "includeMetadata": "Termasuk Metadata", - "allowDuplicates": "Izinkan Duplikat", - "desc": { - "1": "Alat ini membagi file PDF menjadi beberapa PDF berdasarkan struktur babnya.", - "2": "Tingkatan Markah: Pilih tingkatan markah yang digunakan untuk membagi (0 untuk tingkat atas, 1 untuk tingkat kedua, dll.).", - "3": "Termasuk Metadata: Jika dicentang, metadata asli PDF akan disertakan dalam setiap PDF yang dibagi.", - "4": "Izinkan Duplikat: Jika dicentang, mengizinkan beberapa markah pada halaman yang sama untuk membuat PDF terpisah." - }, - "submit": "Pecah PDF" - }, - "fileChooser": { - "click": "Click", - "or": "or", - "dragAndDrop": "Drag & Drop", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "Drag & Drop file(s) here", - "extractPDF": "Extracting..." - }, - "releases": { - "footer": "Releases", - "title": "Release Notes", - "header": "Release Notes", - "current": { - "version": "Current Release" - }, - "note": "Release notes are only available in English" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/it-IT/translation.json b/frontend/dist/locales/it-IT/translation.json deleted file mode 100644 index c61e49e13..000000000 --- a/frontend/dist/locales/it-IT/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Dimensione del font", - "fontName": "Nome del font", - "title": "Aggiungi numeri di pagina", - "header": "Aggiungi numeri di pagina", - "selectText": { - "1": "Seleziona il file PDF:", - "2": "Dimensione margine", - "3": "Posizione", - "4": "Numero di partenza", - "5": "Pagine da numerare", - "6": "Testo personalizzato" - }, - "customTextDesc": "Testo personalizzato", - "numberPagesDesc": "Quali pagine numerare, impostazione predefinita \"tutte\", accetta anche 1-5 o 2,5,9 ecc", - "customNumberDesc": "Il valore predefinito è {n}, accetta anche 'Pagina {n} di {total}', 'Testo-{n}', '{filename}-{n}", - "submit": "Aggiungi numeri di pagina" - }, - "pdfPrompt": "Scegli PDF", - "multiPdfPrompt": "Scegli 2 o più PDF", - "multiPdfDropPrompt": "Scegli (o trascina e rilascia) uno o più PDF", - "imgPrompt": "Scegli immagine/i", - "genericSubmit": "Invia", - "uploadLimit": "Dimensione massima del file:", - "uploadLimitExceededSingular": "è troppo grande. La dimensione massima consentita è", - "uploadLimitExceededPlural": "sono troppo grandi. La dimensione massima consentita è", - "processTimeWarning": "Nota: Questo processo potrebbe richiedere fino a un minuto in base alla dimensione dei file", - "pageOrderPrompt": "Ordine delle pagine (inserisci una lista di numeri separati da virgola):", - "pageSelectionPrompt": "Selezione pagina personalizzata (inserisci un elenco separato da virgole di numeri di pagina 1,5,6 o funzioni come 2n+1) :", - "goToPage": "Vai", - "true": "Vero", - "false": "Falso", - "unknown": "Sconosciuto", - "save": "Salva", - "saveToBrowser": "Salva nel browser", - "close": "Chiudi", - "filesSelected": "file selezionati", - "noFavourites": "Nessun preferito", - "downloadComplete": "Download completo", - "bored": "Stanco di aspettare?", - "alphabet": "Alfabeto", - "downloadPdf": "Scarica PDF", - "text": "Testo", - "font": "Font", - "selectFillter": "-- Seleziona --", - "pageNum": "Numero pagina", - "sizes": { - "small": "Piccolo", - "medium": "Medio", - "large": "Grande", - "x-large": "Extra-Large" - }, - "error": { - "pdfPassword": "Il documento PDF è protetto da password e la password non è stata fornita oppure non era corretta", - "_value": "Errore", - "sorry": "Ci scusiamo per il problema!", - "needHelp": "Hai bisogno di aiuto / trovato un problema?", - "contactTip": "Se i problemi persistono, non esitare a contattarci per chiedere aiuto. Puoi aprire un ticket sulla nostra pagina GitHub o contattarci tramite Discord:", - "404": { - "head": "404 - Pagina non trovata | Spiacenti, siamo inciampati nel codice!", - "1": "Non riusciamo a trovare la pagina che stai cercando.", - "2": "Qualcosa è andato storto" - }, - "github": "Apri un ticket su GitHub", - "showStack": "Mostra traccia dello stack", - "copyStack": "Copia traccia dello stack", - "githubSubmit": "GitHub: apri un ticket", - "discordSubmit": "Discord: invia post di supporto" - }, - "delete": "Elimina", - "username": "Nome utente", - "password": "Password", - "welcome": "Benvenuto", - "property": "Proprietà", - "black": "Nero", - "white": "Bianco", - "red": "Rosso", - "green": "Verde", - "blue": "Blu", - "custom": "Personalizzato", - "WorkInProgess": "Lavori in corso, potrebbe non funzionare o essere difettoso, segnalare eventuali problemi!", - "poweredBy": "Alimentato da", - "yes": "Si", - "no": "No", - "changedCredsMessage": "Credenziali modificate!", - "notAuthenticatedMessage": "Utente non autenticato.", - "userNotFoundMessage": "Utente non trovato.", - "incorrectPasswordMessage": "La password attuale non è corretta.", - "usernameExistsMessage": "Il nuovo nome utente esiste già.", - "invalidUsernameMessage": "Nome utente non valido, il nome utente può contenere solo lettere, numeri e i seguenti caratteri speciali @._+- o deve essere un indirizzo email valido.", - "invalidPasswordMessage": "La password non deve essere vuota e non deve contenere spazi all'inizio o alla fine.", - "confirmPasswordErrorMessage": "La nuova password e la conferma della nuova password devono corrispondere.", - "deleteCurrentUserMessage": "Impossibile eliminare l'utente attualmente connesso.", - "deleteUsernameExistsMessage": "Il nome utente non esiste e non può essere eliminato.", - "downgradeCurrentUserMessage": "Impossibile declassare il ruolo dell'utente corrente", - "disabledCurrentUserMessage": "L'utente corrente non può essere disabilitato", - "downgradeCurrentUserLongMessage": "Impossibile declassare il ruolo dell'utente corrente. Pertanto, l'utente corrente non verrà visualizzato.", - "userAlreadyExistsOAuthMessage": "L'utente esiste già come utente OAuth2.", - "userAlreadyExistsWebMessage": "L'utente esiste già come utente web.", - "oops": "Oops!", - "help": "Aiuto", - "goHomepage": "Vai alla Homepage", - "joinDiscord": "Unisciti al nostro server Discord", - "seeDockerHub": "Vedi DockerHub", - "visitGithub": "Visita il repository Github", - "donate": "Donazione", - "color": "Colore", - "sponsor": "Sponsor", - "info": "Info", - "pro": "Pro", - "page": "Pagina", - "pages": "Pagine", - "loading": "Caricamento...", - "addToDoc": "Aggiungi al documento", - "reset": "Resetta", - "apply": "Applica", - "noFileSelected": "Nessun file selezionato. Caricane uno.", - "legal": { - "privacy": "Informativa sulla privacy", - "terms": "Termini e Condizioni", - "accessibility": "Accessibilità", - "cookie": "Informativa sui cookie", - "impressum": "Informazioni legali", - "showCookieBanner": "Preferenze sui cookie" - }, - "pipeline": { - "header": "Menù pipeline (Beta)", - "uploadButton": "Caricamento personalizzato", - "configureButton": "Configura", - "defaultOption": "Personalizzato", - "submitButton": "Invia", - "help": "Aiuto sulla pipeline", - "scanHelp": "Aiuto per la scansione delle cartelle", - "deletePrompt": "Sei sicuro di voler eliminare la pipeline?", - "tags": "automatizzare,sequenziare,scriptare,elaborare in batch", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Configurazione Pipeline", - "pipelineNameLabel": "Nome della Pipeline", - "saveSettings": "Salva Impostazioni", - "pipelineNamePrompt": "Inserisci qui il nome della pipeline", - "selectOperation": "Seleziona operazione", - "addOperationButton": "Aggiungi operazione", - "pipelineHeader": "Pipeline:", - "saveButton": "Salva", - "validateButton": "Convalidare" - }, - "enterpriseEdition": { - "button": "Aggiorna alla versione Pro", - "warning": "Questa funzionalità è disponibile solo per gli utenti Pro.", - "yamlAdvert": "Stirling PDF Pro supporta i file di configurazione YAML e altre funzionalità SSO.", - "ssoAdvert": "Cerchi altre funzionalità di gestione degli utenti? Dai un'occhiata a Stirling PDF Pro" - }, - "analytics": { - "title": "Vuoi migliorare Stirling PDF?", - "paragraph1": "Stirling PDF ha opt-in analytics per aiutarci a migliorare il prodotto. Non tracciamo alcuna informazione personale o contenuto di file.", - "paragraph2": "Si prega di prendere in considerazione l'attivazione dell'analytics per aiutare Stirling-PDF a crescere e consentirci di comprendere meglio i nostri utenti.", - "enable": "Abilita analytics", - "disable": "Disabilita analytics", - "settings": "È possibile modificare le impostazioni per analitycs nel file config/settings.yml" - }, - "navbar": { - "favorite": "Preferiti", - "recent": "Nuovo e aggiornato di recente", - "darkmode": "Modalità Scura", - "language": "Lingue", - "settings": "Impostazioni", - "allTools": "Strumenti", - "multiTool": "Strumenti multipli", - "search": "Cerca", - "sections": { - "organize": "Organizza", - "convertTo": "Converti in PDF", - "convertFrom": "Converti da PDF", - "security": "Firma & Sicurezza", - "advance": "Avanzate", - "edit": "Visualizza & Modifica", - "popular": "Popolare" - } - }, - "settings": { - "title": "Impostazioni", - "update": "Aggiornamento disponibile", - "updateAvailable": "{0} è la versione attualmente installata. Una nuova versione ({1}) è disponibile.", - "appVersion": "Versione App:", - "downloadOption": { - "title": "Scegli opzione di download (Per file singoli non compressi):", - "1": "Apri in questa finestra", - "2": "Apri in una nuova finestra", - "3": "Scarica file" - }, - "zipThreshold": "Comprimi file in .zip quando il numero di download supera", - "signOut": "Logout", - "accountSettings": "Impostazioni Account", - "bored": { - "help": "Abilita easter egg game" - }, - "cacheInputs": { - "name": "Salva gli input del modulo", - "help": "Abilitare per memorizzare gli input utilizzati in precedenza per esecuzioni future" - } - }, - "changeCreds": { - "title": "Cambia credenziali", - "header": "Aggiorna i dettagli del tuo account", - "changePassword": "Stai utilizzando le credenziali di accesso predefinite. Inserisci una nuova password", - "newUsername": "Nuovo nome utente", - "oldPassword": "Password attuale", - "newPassword": "Nuova Password", - "confirmNewPassword": "Conferma nuova Password", - "submit": "Invia modifiche" - }, - "account": { - "title": "Impostazioni Account", - "accountSettings": "Impostazioni Account", - "adminSettings": "Impostazioni Admin - Aggiungi e Vedi Utenti", - "userControlSettings": "Impostazioni Utente", - "changeUsername": "Cambia nome utente", - "newUsername": "Nuovo nome utente", - "password": "Conferma Password", - "oldPassword": "Vecchia Password", - "newPassword": "Nuova Password", - "changePassword": "Cambia Password", - "confirmNewPassword": "Conferma Nuova Password", - "signOut": "Logout", - "yourApiKey": "La tua API Key", - "syncTitle": "Sincronizza le impostazioni del browser con l'account", - "settingsCompare": "Confronto delle impostazioni:", - "property": "Proprietà", - "webBrowserSettings": "Impostazione del browser web", - "syncToBrowser": "Sincronizza account -> Browser", - "syncToAccount": "Sincronizza account <- Browser" - }, - "adminUserSettings": { - "title": "Impostazioni di controllo utente", - "header": "Impostazioni di controllo utente amministratore", - "admin": "Amministratore", - "user": "Utente", - "addUser": "Aggiungi un nuovo Utente", - "deleteUser": "Elimina utente", - "confirmDeleteUser": "L'utente deve essere eliminato?", - "confirmChangeUserStatus": "L'utente dovrebbe essere disabilitato/abilitato?", - "usernameInfo": "Il nome utente può contenere solo lettere, numeri e i seguenti caratteri speciali @._+- oppure deve essere un indirizzo email valido.", - "roles": "Ruoli", - "role": "Ruolo", - "actions": "Azioni", - "apiUser": "Utente API limitato", - "extraApiUser": "API utente limitato aggiuntivo", - "webOnlyUser": "Utente solo Web", - "demoUser": "Utente demo (nessuna impostazione personalizzata)", - "internalApiUser": "API utente interna", - "forceChange": "Forza l'utente a cambiare nome utente/password all'accesso", - "submit": "Salva utente", - "changeUserRole": "Cambia il ruolo dell'utente", - "authenticated": "Autenticato", - "editOwnProfil": "Modifica il tuo profilo", - "enabledUser": "utente abilitato", - "disabledUser": "utente disabilitato", - "activeUsers": "Utenti attivi:", - "disabledUsers": "Utenti disabili:", - "totalUsers": "Utenti totali:", - "lastRequest": "Ultima richiesta", - "usage": "Visualizza utilizzo" - }, - "endpointStatistics": { - "title": "Statistiche degli endpoint", - "header": "Statistiche degli endpoint", - "top10": "I migliori 10", - "top20": "I migliori 20", - "all": "Tutto", - "refresh": "Aggiorna", - "includeHomepage": "Includi homepage ('/')", - "includeLoginPage": "Includi pagina di login ('/login')", - "totalEndpoints": "Endpoint totali", - "totalVisits": "Visite totali", - "showing": "Mostrare", - "selectedVisits": "Visite selezionate", - "endpoint": "Endpoint", - "visits": "Visite", - "percentage": "Percentuale", - "loading": "Caricamento...", - "failedToLoad": "Impossibile caricare i dati dell'endpoint. Prova ad aggiornare.", - "home": "Home", - "login": "Login", - "top": "Migliore", - "numberOfVisits": "Numero di visite", - "visitsTooltip": "Visite: {0} ({1}% del totale)", - "retry": "Riprovare" - }, - "database": { - "title": "Importazione/Esportazione database", - "header": "Importazione/esportazione database", - "fileName": "Nome file", - "creationDate": "Data di creazione", - "fileSize": "Dimensione", - "deleteBackupFile": "Elimina file di backup", - "importBackupFile": "Importa file di backup", - "createBackupFile": "Crea file di backup", - "downloadBackupFile": "Scarica il file di backup", - "info_1": "Quando si importano i dati, è fondamentale garantire la struttura corretta. Se non sei sicuro di quello che stai facendo, chiedi consiglio e supporto a un professionista. Un errore nella struttura può causare malfunzionamenti dell'applicazione, fino alla completa impossibilità di eseguire l'applicazione.", - "info_2": "Il nome del file non ha importanza durante il caricamento. Verrà rinominato in seguito per seguire il formato backup_user__yyyyMMddHHmm.sql,garantendo una convenzione di denominazione coerente.", - "submit": "Importa Backup", - "importIntoDatabaseSuccessed": "L'importazione nel database è avvenuta con successo", - "backupCreated": "Backup del database riuscito", - "fileNotFound": "File non trovato", - "fileNullOrEmpty": "Il file non deve essere nullo o vuoto", - "failedImportFile": "Importazione file non riuscita", - "notSupported": "Questa funzione non è disponibile per la connessione al database." - }, - "session": { - "expired": "La tua sessione è scaduta. Aggiorna la pagina e riprova.", - "refreshPage": "Aggiorna pagina" - }, - "home": { - "desc": "La tua pagina auto-gestita per modificare qualsiasi PDF.", - "searchBar": "Cerca funzionalità...", - "viewPdf": { - "title": "Visualizza/Modifica PDF", - "desc": "Visualizza, annota, aggiungi testo o immagini" - }, - "setFavorites": "Imposta preferiti", - "hideFavorites": "Nascondi i preferiti", - "showFavorites": "Mostra preferiti", - "legacyHomepage": "Vecchia homepage", - "newHomePage": "Prova la nostra nuova homepage!", - "alphabetical": "Alfabetico", - "globalPopularity": "Popolarità", - "sortBy": "Ordinamento:", - "multiTool": { - "title": "Multifunzione PDF", - "desc": "Unisci, Ruota, Riordina, e Rimuovi pagine" - }, - "merge": { - "title": "Unisci", - "desc": "Unisci facilmente più PDF in uno." - }, - "split": { - "title": "Dividi", - "desc": "Dividi un singolo PDF in più documenti." - }, - "rotate": { - "title": "Ruota", - "desc": "Ruota un PDF." - }, - "imageToPdf": { - "title": "Da immagine a PDF", - "desc": "Converti un'immagine (PNG, JPEG, GIF) in PDF." - }, - "pdfToImage": { - "title": "Da PDF a immagine", - "desc": "Converti un PDF in un'immagine. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Organizza", - "desc": "Rimuovi/Riordina le pagine in qualsiasi ordine." - }, - "addImage": { - "title": "Aggiungi Immagine", - "desc": "Aggiungi un'immagine in un punto specifico del PDF (Lavori in corso)" - }, - "watermark": { - "title": "Aggiungi Filigrana", - "desc": "Aggiungi una filigrana al tuo PDF." - }, - "permissions": { - "title": "Cambia Permessi", - "desc": "Cambia i permessi del tuo PDF." - }, - "removePages": { - "title": "Rimuovi", - "desc": "Elimina alcune pagine dal PDF." - }, - "addPassword": { - "title": "Aggiungi Password", - "desc": "Crittografa il tuo PDF con una password." - }, - "removePassword": { - "title": "Rimuovi Password", - "desc": "Rimuovi la password dal tuo PDF." - }, - "compressPdfs": { - "title": "Comprimi", - "desc": "Comprimi PDF per ridurne le dimensioni." - }, - "unlockPDFForms": { - "title": "Sblocca moduli PDF", - "desc": "Rimuovi la proprietà di sola lettura dei campi del modulo in un documento PDF." - }, - "changeMetadata": { - "title": "Modifica Proprietà", - "desc": "Modifica/Aggiungi/Rimuovi le proprietà di un documento PDF." - }, - "fileToPDF": { - "title": "Converti file in PDF", - "desc": "Converti quasi ogni file in PDF (DOCX, PNG, XLS, PPT, TXT e altro)" - }, - "ocr": { - "title": "OCR / Pulisci scansioni", - "desc": "Pulisci scansioni ed estrai testo da immagini, convertendo le immagini in testo puro." - }, - "extractImages": { - "title": "Estrai immagini", - "desc": "Estrai tutte le immagini da un PDF e salvale come zip." - }, - "pdfToPDFA": { - "title": "Converti in PDF/A", - "desc": "Converti un PDF nel formato PDF/A per archiviazione a lungo termine." - }, - "PDFToWord": { - "title": "Da PDF a Word", - "desc": "Converti un PDF nei formati Word (DOC, DOCX e ODT)" - }, - "PDFToPresentation": { - "title": "Da PDF a presentazioni", - "desc": "Converti un PDF in presentazioni (PPT, PPTX and ODP)" - }, - "PDFToText": { - "title": "Da PDF a testo/RTF", - "desc": "Converti un PDF in testo o RTF." - }, - "PDFToHTML": { - "title": "Da PDF ad HTML", - "desc": "Converti un PDF in HTML." - }, - "PDFToXML": { - "title": "Da PDF a XML", - "desc": "Converti un PDF in XML." - }, - "ScannerImageSplit": { - "title": "Trova/Dividi foto scansionate", - "desc": "Estrai più foto da una singola foto o PDF." - }, - "sign": { - "title": "Firma", - "desc": "Aggiungi una firma al PDF da disegno, testo o immagine." - }, - "flatten": { - "title": "Appiattisci", - "desc": "Rimuovi tutti gli elementi interattivi e moduli da un PDF." - }, - "repair": { - "title": "Ripara", - "desc": "Prova a riparare un PDF corrotto." - }, - "removeBlanks": { - "title": "Rimuovi pagine vuote", - "desc": "Trova e rimuovi pagine vuote da un PDF." - }, - "removeAnnotations": { - "title": "Rimuovi annotazioni", - "desc": "Rimuove tutti i commenti/annotazioni da un PDF" - }, - "compare": { - "title": "Compara", - "desc": "Vedi e compara le differenze tra due PDF." - }, - "certSign": { - "title": "Firma con certificato", - "desc": "Firma un PDF con un certificato/chiave (PEM/P12)" - }, - "removeCertSign": { - "title": "Rimuovere firma dal certificato", - "desc": "Rimuovi la firma del certificato dal PDF" - }, - "pageLayout": { - "title": "Layout multipagina", - "desc": "Unisci più pagine di un documento PDF in un'unica pagina" - }, - "scalePages": { - "title": "Regola le dimensioni/scala della pagina", - "desc": "Modificare le dimensioni/scala della pagina e/o dei suoi contenuti." - }, - "pipeline": { - "title": "Pipeline", - "desc": "Esegui più azioni sui PDF definendo script di pipeline" - }, - "add-page-numbers": { - "title": "Aggiungi numeri di pagina", - "desc": "Aggiungi numeri di pagina in tutto un documento in una posizione prestabilita" - }, - "auto-rename": { - "title": "Rinomina automaticamente il file PDF", - "desc": "Rinomina automaticamente un file PDF in base all'intestazione rilevata" - }, - "adjust-contrast": { - "title": "Regola colori/contrasto", - "desc": "Regola contrasto, saturazione e luminosità di un PDF" - }, - "crop": { - "title": "Ritaglia PDF", - "desc": "Ritaglia un PDF per ridurne le dimensioni (mantiene il testo!)" - }, - "autoSplitPDF": { - "title": "Pagine divise automaticamente", - "desc": "Dividi automaticamente il PDF scansionato con il codice QR dello divisore di pagina fisico scansionato" - }, - "sanitizePdf": { - "title": "Pulire", - "desc": "Rimuovi script e altri elementi dai file PDF" - }, - "URLToPDF": { - "title": "URL/sito Web in PDF", - "desc": "Converte qualsiasi URL http(s) in PDF" - }, - "HTMLToPDF": { - "title": "Da HTML a PDF", - "desc": "Converte qualsiasi file HTML o zip in PDF" - }, - "MarkdownToPDF": { - "title": "Markdown in PDF", - "desc": "Converte qualsiasi file Markdown in PDF" - }, - "PDFToMarkdown": { - "title": "PDF in Markdown", - "desc": "Converte qualsiasi PDF in Markdown" - }, - "getPdfInfo": { - "title": "Ottieni TUTTE le informazioni in PDF", - "desc": "Raccogli tutte le informazioni possibili sui PDF" - }, - "extractPage": { - "title": "Estrai pagina/e", - "desc": "Estrae le pagine selezionate dal PDF" - }, - "PdfToSinglePage": { - "title": "PDF in un'unica pagina di grandi dimensioni", - "desc": "Unisce tutte le pagine PDF in un'unica grande pagina" - }, - "showJS": { - "title": "Mostra Javascript", - "desc": "Cerca e visualizza qualsiasi JS inserito in un PDF" - }, - "autoRedact": { - "title": "Redazione automatica", - "desc": "Redige automaticamente (oscura) il testo in un PDF in base al testo immesso" - }, - "redact": { - "title": "Redazione manuale", - "desc": "Redige un PDF in base al testo selezionato, alle forme disegnate e/o alle pagina selezionata(e)" - }, - "tableExtraxt": { - "title": "Da PDF a CSV", - "desc": "Estrae tabelle da un PDF convertendolo in CSV" - }, - "autoSizeSplitPDF": { - "title": "Divisione automatica per dimensione/numero", - "desc": "Dividi un singolo PDF in più documenti in base alle dimensioni, al numero di pagine o al numero di documenti" - }, - "overlay-pdfs": { - "title": "Sovrapposizione di PDF", - "desc": "Sovrappone i PDF sopra un altro PDF" - }, - "split-by-sections": { - "title": "Dividi PDF per sezioni", - "desc": "Dividi ciascuna pagina di un PDF in sezioni orizzontali e verticali più piccole" - }, - "AddStampRequest": { - "title": "Aggiungi timbro al PDF", - "desc": "Aggiungi testo o aggiungi timbri immagine nelle posizioni prestabilite" - }, - "removeImagePdf": { - "title": "Rimuovi immagine", - "desc": "Rimuovi le immagini dal PDF per ridurre la dimensione del file" - }, - "splitPdfByChapters": { - "title": "Dividi PDF per capitoli", - "desc": "Dividi un PDF in più file in base alla struttura dei capitoli." - }, - "validateSignature": { - "title": "Convalida la firma PDF", - "desc": "Verificare le firme digitali e i certificati nei documenti PDF" - }, - "replaceColorPdf": { - "title": "Sostituisci e inverti il colore", - "desc": "Sostituisci il colore del testo e dello sfondo nel PDF e inverti il ​​colore completo del PDF per ridurre le dimensioni del file" - } - }, - "viewPdf": { - "tags": "visualizzare,leggere,annotare,testo,immagine", - "title": "Visualizza/Modifica PDF", - "header": "Visualizza PDF" - }, - "multiTool": { - "tags": "Strumento multiplo,operazione multipla,interfaccia utente,trascinamento clic,front-end,lato client", - "title": "Multifunzione PDF", - "header": "Multifunzione PDF", - "uploadPrompts": "Nome file", - "selectAll": "Seleziona tutto", - "deselectAll": "Deseleziona tutto", - "selectPages": "Seleziona pagina", - "selectedPages": "Seleziona pagine", - "page": "Pagina", - "deleteSelected": "Elimina selezionata", - "downloadAll": "Esporta", - "downloadSelected": "Esporta selezionata", - "insertPageBreak": "Inserisci interruzione di pagina", - "addFile": "Aggiungi file", - "rotateLeft": "Ruota a sinistra", - "rotateRight": "Ruota a destra", - "split": "Dividi", - "moveLeft": "Sposta a sinistra", - "moveRight": "Sposta a destra", - "delete": "Elimina", - "dragDropMessage": "Pagina(e) selezionata(e)", - "undo": "Annulla", - "redo": "Rifai" - }, - "merge": { - "tags": "unione,operazioni sulla pagina,back-end,lato server", - "title": "Unisci", - "header": "Unisci 2 o più PDF", - "sortByName": "Ordina per nome", - "sortByDate": "Ordina per data", - "removeCertSign": "Rimuovere la firma digitale nel file unito?", - "submit": "Unisci" - }, - "split": { - "tags": "Operazioni sulla pagina,divisione,multi pagina,taglio,lato server", - "title": "Dividi PDF", - "header": "Dividi PDF", - "desc": { - "1": "I numeri che scegli sono le pagine a cui desideri dividere il documento", - "2": "Per esempio inserendo 1,3,7-9 separeresti un documento di 10 pagine in 6 diversi PDF con:", - "3": "Documento #1: Pagina 1", - "4": "Documento #2: Pagine 2 e 3", - "5": "Documento #3: Pagine 4, 5, 6 e 7", - "6": "Documento #4: Pagina 8", - "7": "Documento #5: Pagina 9", - "8": "Documento #6: Pagine 10" - }, - "splitPages": "Inserisci pagine a cui dividere:", - "submit": "Dividi" - }, - "rotate": { - "tags": "lato server", - "title": "Ruota PDF", - "header": "Ruota PDF", - "selectAngle": "Scegli angolo di rotazione (in multipli di 90 gradi):", - "submit": "Ruota" - }, - "imageToPdf": { - "tags": "conversione,img,jpg,immagine,foto" - }, - "pdfToImage": { - "tags": "conversione,img,jpg,immagine,foto", - "title": "PDF a immagine", - "header": "PDF a immagine", - "selectText": "Formato immagini", - "singleOrMultiple": "Tipo di immagine", - "single": "Unica immagine larga", - "multi": "Più immagini", - "colorType": "Tipo di colore", - "color": "A colori", - "grey": "Scala di grigi", - "blackwhite": "Bianco e Nero (potresti perdere dettagli!)", - "submit": "Converti", - "info": "Python non è installato.È richiesto per la conversione WebP.", - "placeholder": "(es. 1,2,8 o 4,7,12-16 o 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,pari,dispari,ordinamento,spostamento", - "title": "Organizza pagine", - "header": "Organizza le pagine di un PDF", - "submit": "Riordina pagine", - "mode": { - "_value": "Modalità", - "1": "Ordine delle pagine personalizzato", - "2": "Ordine inverso", - "3": "Ordinamento fronte-retro", - "4": "Ordinamento a libretto", - "5": "Ordinamento libretto con cucitura laterale", - "6": "Divisione pari-dispari", - "7": "Rimuovi prima", - "8": "Rimuovi ultima", - "9": "Rimuovi la prima e l'ultima", - "10": "Unione pari-dispari", - "11": "Duplica tutte le pagine" - }, - "placeholder": "(ad es. 1,3,2 o 4-8,2,10-12 o 2n-1)" - }, - "addImage": { - "tags": "img,jpg,immagine,foto", - "title": "Aggiungi Immagine", - "header": "Aggiungi un'immagine ad un PDF", - "everyPage": "Ogni pagina?", - "upload": "Aggiungi immagine", - "submit": "Aggiungi immagine" - }, - "watermark": { - "tags": "Testo,ripetizione,etichetta,proprio,copyright,marchio,img,jpg,immagine,foto", - "title": "Aggiungi Filigrana", - "header": "Aggiungi filigrana", - "customColor": "Colore testo personalizzato", - "selectText": { - "1": "Seleziona PDF a cui aggiungere la filigrana:", - "2": "Testo:", - "3": "Dimensione carattere:", - "4": "Rotazione (0-360):", - "5": "spazio orizzontale (tra ogni filigrana):", - "6": "spazio verticale (tra ogni filigrana):", - "7": "Opacità (0% - 100%):", - "8": "Tipo di filigrana:", - "9": "Immagine filigrana:", - "10": "Converti PDF in PDF-Immagine" - }, - "submit": "Aggiungi Filigrana", - "type": { - "1": "Testo", - "2": "Immagine" - } - }, - "permissions": { - "tags": "leggere,scrivere,modificare,stampare", - "title": "Cambia Permessi", - "header": "Cambia permessi", - "warning": "Attenzione: per avere questi permessi non modificabili è raccomandabile impostarli attraverso una password", - "selectText": { - "1": "Seleziona PDF a cui cambiare permessi", - "2": "Permessi da impostare", - "3": "Previeni assemblaggio del documento", - "4": "Previeni estrazione del contenuto", - "5": "Previeni estrazione per accessibilità", - "6": "Previeni compilazione dei moduli", - "7": "Previeni modifiche", - "8": "Previeni annotazioni", - "9": "Previeni stampa", - "10": "Previeni stampa in diversi formati" - }, - "submit": "Cambia Permessi" - }, - "removePages": { - "tags": "Rimuovere pagine,eliminare pagine" - }, - "addPassword": { - "tags": "sicuro,sicurezza", - "title": "Aggiungi Password", - "header": "Aggiungi password (crittografa)", - "selectText": { - "1": "Seleziona PDF da crittografare", - "2": "Password", - "3": "Lunghezza chiave", - "4": "Valori più grandi sono più sicuri, ma valori più piccoli offrono una compatibilità maggiore.", - "5": "Permessi", - "6": "Previeni assemblaggio del documento", - "7": "Previeni estrazione del contenuto", - "8": "Previeni estrazione per accessibilità", - "9": "Previeni compilazione dei moduli", - "10": "Previeni modifiche", - "11": "Previeni annotazioni", - "12": "Previeni stampa", - "13": "Previeni stampa in diversi formati", - "14": "Password del proprietario", - "15": "Limita le operazioni eseguibili con il documento una volta aperto (non supportato da tutti i lettori)", - "16": "Limita l'apertura del documento stesso" - }, - "submit": "Crittografa" - }, - "removePassword": { - "tags": "Decriptare,proteggere,rimuovere la password,eliminare la password", - "title": "Rimuovi Password", - "header": "Rimuovi password (de-crittografa)", - "selectText": { - "1": "Seleziona PDF da decrittare", - "2": "Password" - }, - "submit": "Rimuovi Password" - }, - "compressPdfs": { - "tags": "comprimere,piccolo,minuscolo" - }, - "unlockPDFForms": { - "tags": "rimuovi,elimina,modulo,campo,sola lettura", - "title": "Rimuovi la sola lettura dai campi del modulo", - "header": "Sbloccare i moduli PDF", - "submit": "Rimuovi" - }, - "changeMetadata": { - "tags": "Titolo,autore,data,creazione,ora,editore,produttore,statistiche", - "title": "Titolo:", - "header": "Cambia Proprietà", - "selectText": { - "1": "Imposta i dati che vuoi cambiare", - "2": "Cancella tutte le proprietà", - "3": "Visualizza proprietà personalizzate:", - "4": "Altre proprietà:", - "5": "Aggiungi proprietà personalizzata:" - }, - "author": "Autore:", - "creationDate": "Data di creazione (yyyy/MM/dd HH:mm:ss):", - "creator": "Creatore:", - "keywords": "Parole chiave:", - "modDate": "Data di modifica (yyyy/MM/dd HH:mm:ss):", - "producer": "Produttore:", - "subject": "Oggetto:", - "trapped": "Recuperato:", - "submit": "Cambia proprietà" - }, - "fileToPDF": { - "tags": "trasformazione,formato,documento,immagine,diapositiva,testo,conversione,ufficio,documenti,parola,excel,powerpoint", - "title": "Converti file in PDF", - "header": "Converti qualsiasi file in PDF", - "credit": "Questo servizio utilizza LibreOffice e Unoconv per la conversione dei file.", - "supportedFileTypesInfo": "Tipi di file supportati", - "supportedFileTypes": "I formati file supportati dovrebbero includere quelli sottostanti. Tuttavia, per una lista aggiornata controlla la documentazione di LibreOffice", - "submit": "Converti in PDF" - }, - "ocr": { - "tags": "riconoscimento,testo,immagine,scansione,lettura,identificazione,rilevamento,modificabile", - "title": "OCR / Pulisci scansioni", - "header": "Pulisci scansioni / OCR (riconoscimento testo)", - "selectText": { - "1": "Scegli lingue da usare per il riconoscimento testo (L'elenco contiene quelle attualmente disponibili):", - "2": "Crea file di testo contenente il testo estratto oltre al PDF originale", - "3": "Sistema le pagine che sono state scansionate storte ruotandole in posizione corretta.", - "4": "Pulisci il foglio in modo da evitare errori nella lettura. (non cambia il risultato)", - "5": "Pulisci il foglio in modo da evitare errori nella lettura. (cambia il risultato)", - "6": "Ignora pagine che contengono testo interattivo, scansiona solo pagine che contengono immagini", - "7": "Forza scansione, scansiona ogni pagina rimuovendo gli elementi originali", - "8": "Normale (Darà errore se il PDF contiene testo)", - "9": "Impostazioni extra", - "10": "Modalità OCR", - "11": "Rimuovi immagini dopo la scansione (Rimuove TUTTE le immagini, utile solo come parte del processo di conversione)", - "12": "Modalità di rendering (avanzato)" - }, - "help": "Per favore leggi la documentazione su come usare il programma per altri linguaggi e/o uso non in Docker", - "credit": "Questo servizio utilizza Qpdf e Tesseract per l'OCR.", - "submit": "Scansiona testo nel PDF con OCR" - }, - "extractImages": { - "tags": "immagine,foto,salva,archivio,zip,catturare,prendere", - "title": "Estrai immagini", - "header": "Estrai immagini", - "selectText": "Seleziona il formato in cui salvare le immagini estratte", - "allowDuplicates": "Salva le immagini duplicate", - "submit": "Estrai" - }, - "pdfToPDFA": { - "tags": "archivio,a lungo termine,standard,conversione,archiviazione,conservazione", - "title": "Da PDF a PDF/A", - "header": "Da PDF a PDF/A", - "credit": "Questo servizio utilizza libreoffice per la conversione in PDF/A.", - "submit": "Converti", - "tip": "Attualmente non funziona per più input contemporaneamente", - "outputFormat": "Formato di output", - "pdfWithDigitalSignature": "Il PDF contiene una firma digitale. Questo verrà rimosso nel passaggio successivo." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,trasformazione,formato,conversione,office,microsoft,filedoc", - "title": "Da PDF a Word", - "header": "Da PDF a Word", - "selectText": { - "1": "Formato file di output" - }, - "credit": "Questo servizio utilizza LibreOffice per la conversione.", - "submit": "Converti" - }, - "PDFToPresentation": { - "tags": "diapositive,mostra,office,microsoft", - "title": "Da PDF a presentazione", - "header": "Da PDF a presentazione", - "selectText": { - "1": "Formato file di output" - }, - "credit": "Questo servizio utilizza LibreOffice per la conversione.", - "submit": "Converti" - }, - "PDFToText": { - "tags": "Microsoft Rich Format,formato Rich Text,formato Rich Text", - "title": "Da PDF a testo/RTF", - "header": "Da PDF a testo/RTF", - "selectText": { - "1": "Formato file di output" - }, - "credit": "Questo servizio utilizza LibreOffice per la conversione.", - "submit": "Converti" - }, - "PDFToHTML": { - "tags": "contenuto web,facile da usare per il browser", - "title": "Da PDF a HTML", - "header": "Da PDF a HTML", - "credit": "Questo servizio utilizza pdftohtml per la conversione.", - "submit": "Converti" - }, - "PDFToXML": { - "tags": "estrazione dati,contenuto strutturato,interoperabilità,trasformazione,conversione", - "title": "Da PDF a XML", - "header": "Da PDF a XML", - "credit": "Questo servizio utilizza LibreOffice per la conversione.", - "submit": "Converti" - }, - "ScannerImageSplit": { - "tags": "separa,rileva automaticamente,scansiona,multi-foto,organizza", - "selectText": { - "1": "Soglia angolo:", - "2": "Imposta il minimo angolo richiesto perché l'immagine venga ruotata (default: 10).", - "3": "Tolleranza:", - "4": "Imposta lo spettro di colori attorno al colore di sfondo stimato (default: 30).", - "5": "Area minima:", - "6": "Imposta l'area minima di una foto (default: 10000).", - "7": "Area di contorno minima:", - "8": "Imposta l'area minima del contorno di una foto", - "9": "Spessore bordo:", - "10": "Imposta lo spessore del bordo aggiunto o rimosso per prevenire bordi bianchi nel risultato (predefinito: 1)." - }, - "info": "Python non è installato. È necessario per l'esecuzione." - }, - "sign": { - "tags": "autorizza,iniziali,firma-tracciata,firma-testo,firma-immagine", - "title": "Firma", - "header": "Firma PDF", - "upload": "Carica immagine", - "draw": "Disegna Firma", - "text": "Testo", - "clear": "Cancella", - "add": "Aggiungi", - "saved": "Firme salvate", - "save": "Firma salvata", - "personalSigs": "Firme personali", - "sharedSigs": "Firme condivise", - "noSavedSigs": "Nessuna firma salvata trovata", - "addToAll": "Aggiungi a tutte le pagine", - "delete": "Elimina", - "first": "Prima pagina", - "last": "Ultima pagina", - "next": "Prossima pagina", - "previous": "Pagina precedente", - "maintainRatio": "Attiva il mantenimento delle proporzioni", - "undo": "Annulla", - "redo": "Rifare" - }, - "flatten": { - "tags": "statico,disattivato,non interattivo,ottimizzato", - "title": "Appiattire", - "header": "Appiattisci PDF", - "flattenOnlyForms": "Appiattisci solo i moduli", - "submit": "Appiattisci" - }, - "repair": { - "tags": "aggiustare,ripristinare,correggere,recuperare", - "title": "Ripara", - "header": "Ripara PDF", - "submit": "Ripara" - }, - "removeBlanks": { - "tags": "pulire,semplificare,non contenere contenuti,organizzare", - "title": "Rimuovi spazi vuoti", - "header": "Rimuovi pagine vuote", - "threshold": "Soglia:", - "thresholdDesc": "Soglia che determina un pixel 'bianco'", - "whitePercent": "Percentuale di bianco (%):", - "whitePercentDesc": "Percentuale della pagina che deve essere bianca per venire rimossa", - "submit": "Rimuovi" - }, - "removeAnnotations": { - "tags": "commenti,evidenziazioni,note,markup,rimozione", - "title": "Rimuovi Annotazioni", - "header": "Rimuovi Annotazioni", - "submit": "Rimuovi" - }, - "compare": { - "tags": "differenziare,contrastare,cambiare,analisi", - "title": "Compara", - "header": "Compara PDF", - "highlightColor": { - "1": "Evidenzia colore 1:", - "2": "Evidenzia colore 2:" - }, - "document": { - "1": "Documento 1", - "2": "Documento 2" - }, - "submit": "Compara", - "complex": { - "message": "Uno o entrambi i documenti forniti sono file di grandi dimensioni, l'accuratezza del confronto potrebbe risultare ridotta" - }, - "large": { - "file": { - "message": "Uno o entrambi i documenti forniti sono troppo grandi per essere elaborati" - } - }, - "no": { - "text": { - "message": "Uno o entrambi i PDF selezionati non hanno contenuto di testo. Si prega di scegliere PDF con testo per il confronto." - } - } - }, - "certSign": { - "tags": "autenticare,PEM,P12,ufficiale,crittografare", - "title": "Firma del certificato", - "header": "Firma un PDF con il tuo certificato (Lavoro in corso)", - "selectPDF": "Seleziona un file PDF per la firma:", - "jksNote": "Nota: se il tipo di certificato non è elencato di seguito, convertilo in un file Java Keystore (.jks) utilizzando lo strumento da riga di comando keytool. Quindi, scegli l'opzione del file .jks di seguito.", - "selectKey": "Seleziona il file della tua chiave privata (formato PKCS#8, potrebbe essere .pem o .der):", - "selectCert": "Seleziona il tuo file di certificato (formato X.509, potrebbe essere .pem o .der):", - "selectP12": "Selezionare il file keystore PKCS#12 (.p12 o .pfx) (facoltativo, se fornito, dovrebbe contenere la chiave privata e il certificato):", - "selectJKS": "Seleziona il tuo file Java Keystore (.jks o .keystore):", - "certType": "Tipo di certificato", - "password": "Inserisci la tua password dell'archivio chiavi o della chiave privata (se presente):", - "showSig": "Mostra firma", - "reason": "Motivo", - "location": "Posizione", - "name": "Nome", - "showLogo": "Mostra Logo", - "submit": "Firma PDF" - }, - "removeCertSign": { - "tags": "autenticare,PEM,P12,ufficiale,decifrare", - "title": "Rimuovi certificato della firma", - "header": "Rimuovere il certificato digitale dal PDF", - "selectPDF": "Seleziona un file PDF:", - "submit": "Rimuovi firma" - }, - "pageLayout": { - "tags": "unire,comporre,visualizzazione singola,organizzare", - "title": "Layout multipagina", - "header": "Layout multipagina", - "pagesPerSheet": "Pagine per foglio:", - "addBorder": "Aggiungi bordi", - "submit": "Invia" - }, - "scalePages": { - "tags": "ridimensionare,modificare,dimensionare,adattare", - "title": "Regola la scala della pagina", - "header": "Regola la scala della pagina", - "pageSize": "Dimensione di una pagina del documento.", - "keepPageSize": "Dimensione originale", - "scaleFactor": "Livello di zoom (ritaglio) di una pagina.", - "submit": "Invia" - }, - "add-page-numbers": { - "tags": "impaginare,etichettare,organizzare,indicizzare" - }, - "auto-rename": { - "tags": "rilevamento automatico,basato su intestazione,organizzazione,rietichettatura", - "title": "Rinomina automatica", - "header": "Rinomina automatica PDF", - "submit": "Rinomina automatica" - }, - "adjust-contrast": { - "tags": "correzione del colore,messa a punto,modifica,miglioramento" - }, - "crop": { - "tags": "tagliare,ridurre,modificare,modellare", - "title": "Ritaglia", - "header": "Ritaglia PDF", - "submit": "Invia" - }, - "autoSplitPDF": { - "tags": "Basato su QR,separato,scansiona segmenti,organizza", - "title": "PDF diviso automaticamente", - "header": "PDF diviso automaticamente", - "description": "Stampa, inserisci, scansiona, carica e lasciaci separare automaticamente i tuoi documenti. Non è necessario alcuno smistamento manuale.", - "selectText": { - "1": "Stampa alcuni fogli divisori dal basso (il bianco e nero va bene).", - "2": "Scansiona tutti i tuoi documenti contemporaneamente inserendo il foglio divisorio tra di loro.", - "3": "Carica il singolo file PDF scansionato di grandi dimensioni e lascia che Stirling PDF gestisca il resto.", - "4": "Le pagine divisorie vengono rilevate e rimosse automaticamente, garantendo un documento finale ordinato." - }, - "formPrompt": "Invia PDF contenente divisori di pagina Stirling-PDF:", - "duplexMode": "Modalità duplex (scansione fronte e retro)", - "dividerDownload2": "Scarica 'Divisore automatico (con istruzioni).pdf'", - "submit": "Invia" - }, - "sanitizePdf": { - "tags": "pulire,proteggere,rimuovere le minacce" - }, - "URLToPDF": { - "tags": "acquisizione web,salvataggio pagina,web-to-doc,archivio", - "title": "URL a PDF", - "header": "URL a PDF", - "submit": "Converti", - "credit": "Utilizza WeasyPrint" - }, - "HTMLToPDF": { - "tags": "markup,contenuto web,trasformazione,conversione", - "title": "HTML a PDF", - "header": "HTML a PDF", - "help": "Accetta file HTML e ZIP contenenti html/css/immagini ecc. richiesti", - "submit": "Converti", - "credit": "Utilizza WeasyPrint", - "zoom": "Livello di zoom per la visualizzazione del sito web.", - "pageWidth": "Larghezza della pagina in centimetri. (Vuoto per impostazione predefinita)", - "pageHeight": "Altezza della pagina in centimetri. (Vuoto per impostazione predefinita)", - "marginTop": "Margine superiore della pagina in millimetri. (Vuoto per impostazione predefinita)", - "marginBottom": "Margine inferiore della pagina in millimetri. (Vuoto per impostazione predefinita)", - "marginLeft": "Margine sinistro della pagina in millimetri. (Vuoto per impostazione predefinita)", - "marginRight": "Margine destro della pagina in millimetri. (Vuoto per impostazione predefinita)", - "printBackground": "Rendering dello sfondo dei siti Web.", - "defaultHeader": "Abilita intestazione predefinita (nome e numero di pagina)", - "cssMediaType": "Cambia il tipo di supporto CSS della pagina.", - "none": "Nessuno", - "print": "Stampa", - "screen": "Schermo" - }, - "MarkdownToPDF": { - "tags": "markup,contenuto web,trasformazione,conversione", - "title": "Markdown in PDF", - "header": "Markdown in PDF", - "submit": "Converti", - "help": "Conversione in corso", - "credit": "Utilizza WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,contenuto-web,trasformazione,convertire,md", - "title": "PDF in Markdown", - "header": "PDF in Markdown", - "submit": "Converti" - }, - "getPdfInfo": { - "tags": "informazioni,dati,stati,statistiche", - "title": "Ottieni informazioni in PDF", - "header": "Ottieni informazioni in PDF", - "submit": "Ottieni informazioni", - "downloadJson": "Scarica JSON" - }, - "extractPage": { - "tags": "estrarre" - }, - "PdfToSinglePage": { - "tags": "pagina singola" - }, - "showJS": { - "tags": "JS", - "title": "Mostra Javascript", - "header": "Mostra Javascript", - "downloadJS": "Scarica Javascript", - "submit": "Mostra" - }, - "autoRedact": { - "tags": "Redigere,nascondere,oscurare,nero,pennarello,nascosto", - "title": "Redazione automatica", - "header": "Redazione automatica", - "colorLabel": "Colore", - "textsToRedactLabel": "Testo da oscurare (separato da righe)", - "textsToRedactPlaceholder": "per esempio. \\nConfidenziale \\nTop-Secret", - "useRegexLabel": "Usa Regex", - "wholeWordSearchLabel": "Ricerca di parole intere", - "customPaddingLabel": "Padding extra personalizzato", - "convertPDFToImageLabel": "Converti PDF in immagine PDF (utilizzato per rimuovere il testo dietro la casella)", - "submitButton": "Invia" - }, - "redact": { - "tags": "Redigere,nascondere,oscurare,nero,pennarello,nascosto,manuale", - "title": "Redazione manuale", - "header": "Redazione manuale", - "submit": "Redazione", - "textBasedRedaction": "Redazione basata sul testo", - "pageBasedRedaction": "Redazione basata sulla pagina", - "convertPDFToImageLabel": "Converti PDF in immagine PDF (utilizzato per rimuovere il testo dietro la casella)", - "pageRedactionNumbers": { - "title": "Pagine", - "placeholder": "(es. 1,2,8 o 4,7,12-16 o 2n-1)" - }, - "redactionColor": { - "title": "Colore di redazione" - }, - "export": "Esporta", - "upload": "Caricamento", - "boxRedaction": "Redazione del disegno della casella", - "zoom": "Zoom", - "zoomIn": "Ingrandisci", - "zoomOut": "Rimpicciolisci", - "nextPage": "Pagina successiva", - "previousPage": "Pagina precedente", - "toggleSidebar": "Attiva barra laterale", - "showThumbnails": "Mostra miniature", - "showDocumentOutline": "Mostra struttura documento (fare doppio clic per espandere/comprimere tutti gli elementi)", - "showAttatchments": "Mostra allegati", - "showLayers": "Mostra livelli (fare doppio clic per ripristinare tutti i livelli allo stato predefinito)", - "colourPicker": "Selettore colore", - "findCurrentOutlineItem": "Trova l'elemento di contorno corrente", - "applyChanges": "Applica modifiche" - }, - "tableExtraxt": { - "tags": "CSV,Estrazione tabella,estrai,converti" - }, - "autoSizeSplitPDF": { - "tags": "pdf,diviso,documento,organizzazione" - }, - "overlay-pdfs": { - "tags": "Sovrapponi", - "header": "Invia file PDF in sovrapposizione", - "baseFile": { - "label": "Seleziona File PDF di base" - }, - "overlayFiles": { - "label": "Seleziona sovrapposizione file PDF" - }, - "mode": { - "label": "Seleziona la modalità di sovrapposizione", - "sequential": "Sovrapposizione sequenziale", - "interleaved": "Sovrapposizione interfogliata", - "fixedRepeat": "Risolto il problema con la ripetizione della sovrapposizione" - }, - "counts": { - "label": "Numeri sovrapposti (per la modalità di ripetizione fissa)", - "placeholder": "Inserisci i numeri separati da virgole (ad esempio, 2,3,1)" - }, - "position": { - "label": "Seleziona posizione di sovrapposizione", - "foreground": "Primo piano", - "background": "Sfondo" - }, - "submit": "Sovrapponi" - }, - "split-by-sections": { - "tags": "Dividi sezione,dividi,personalizza", - "title": "Dividi PDF per sezioni", - "header": "Dividi il PDF in sezioni", - "horizontal": { - "label": "Divisioni orizzontali", - "placeholder": "Inserire il numero di divisioni orizzontali" - }, - "vertical": { - "label": "Divisioni verticali", - "placeholder": "Inserire il numero di divisioni verticali" - }, - "submit": "Dividi PDF", - "merge": "Unisci in un unico PDF" - }, - "AddStampRequest": { - "tags": "Timbro,Aggiungi immagine,Centra immagine,Filigrana,PDF,Incorpora,Personalizza", - "header": "Timbro PDF", - "title": "Timbro PDF", - "stampType": "Tipo di timbro", - "stampText": "Testo del timbro", - "stampImage": "Immagine del timbro", - "alphabet": "Alfabeto", - "fontSize": "Dimensione carattere/immagine", - "rotation": "Rotazione", - "opacity": "Opacità", - "position": "Posizione", - "overrideX": "Sostituisci la coordinata X", - "overrideY": "Sostituisci la coordinata Y", - "customMargin": "Margine personalizzato", - "customColor": "Colore testo personalizzato", - "submit": "Invia" - }, - "removeImagePdf": { - "tags": "Rimuovi immagine,operazioni sulla pagina,back-end,lato server" - }, - "splitPdfByChapters": { - "tags": "dividi,capitoli,segnalibri,organizza" - }, - "validateSignature": { - "tags": "firma,verifica,convalida,pdf,certificato,firma digitale,convalida firma,convalida certificato", - "title": "Validare le firme PDF", - "header": "Convalidare le firme digitali", - "selectPDF": "Seleziona il file PDF firmato", - "submit": "Convalida firme", - "results": "Risultati di convalida", - "status": { - "_value": "Stato", - "valid": "Valida", - "invalid": "Invalida" - }, - "signer": "Firmatario", - "date": "Data", - "reason": "Ragione", - "location": "Posizione", - "noSignatures": "Nessuna firma digitale trovata in questo documento", - "chain": { - "invalid": "Convalida della catena di certificati non riuscita: impossibile verificare l'identità del firmatario" - }, - "trust": { - "invalid": "Certificato non presente nell'archivio attendibile: la fonte non può essere verificata" - }, - "cert": { - "expired": "Il certificato è scaduto", - "revoked": "Il certificato è stato revocato", - "info": "Dettagli del certificato", - "issuer": "Emittente", - "subject": "Soggetto", - "serialNumber": "Numero di serie", - "validFrom": "Valido da", - "validUntil": "Valido fino a", - "algorithm": "Algoritmo", - "keySize": "Dimensione chiave", - "version": "Versione", - "keyUsage": "Utilizzo della chiave", - "selfSigned": "Autofirmato", - "bits": "bit" - }, - "signature": { - "info": "Informazioni sulla firma", - "_value": "Firma", - "mathValid": "La firma è matematicamente valida MA:" - }, - "selectCustomCert": "File di certificato personalizzato X.509 (opzionale)" - }, - "replace-color": { - "title": "Sostituisci-Inverti-Colore", - "header": "Sostituisci-Inverti colore PDF", - "selectText": { - "1": "Sostituisci o inverti le opzioni del colore", - "2": "Predefinito (colori ad alto contrasto predefiniti)", - "3": "Personalizzato (colori personalizzati)", - "4": "Inversione completa (inverte tutti i colori)", - "5": "Opzioni di colore ad alto contrasto", - "6": "testo bianco su sfondo nero", - "7": "Testo nero su sfondo bianco", - "8": "Testo giallo su sfondo nero", - "9": "Testo verde su sfondo nero", - "10": "Scegli il colore del testo", - "11": "Scegli il colore di sfondo" - }, - "submit": "Sostituisci" - }, - "replaceColorPdf": { - "tags": "Sostituisci colore, Operazioni di pagina, Back-end, lato server" - }, - "login": { - "title": "Accedi", - "header": "Accedi", - "signin": "Accedi", - "rememberme": "Ricordami", - "invalid": "Nome utente o password errati.", - "locked": "Il tuo account è stato bloccato.", - "signinTitle": "Per favore accedi", - "ssoSignIn": "Accedi tramite Single Sign-on", - "oAuth2AutoCreateDisabled": "Creazione automatica utente OAUTH2 DISABILITATA", - "oAuth2AdminBlockedUser": "La registrazione o l'accesso degli utenti non registrati è attualmente bloccata. Si prega di contattare l'amministratore.", - "oauth2RequestNotFound": "Richiesta di autorizzazione non trovata", - "oauth2InvalidUserInfoResponse": "Risposta relativa alle informazioni utente non valida", - "oauth2invalidRequest": "Richiesta non valida", - "oauth2AccessDenied": "Accesso negato", - "oauth2InvalidTokenResponse": "Risposta token non valida", - "oauth2InvalidIdToken": "Id Token non valido", - "relyingPartyRegistrationNotFound": "Nessuna registrazione di parte affidabile trovata", - "userIsDisabled": "L'utente è disattivato, l'accesso è attualmente bloccato con questo nome utente. Si prega di contattare l'amministratore.", - "alreadyLoggedIn": "Hai già effettuato l'accesso a", - "alreadyLoggedIn2": "dispositivi. Esci dai dispositivi e riprova.", - "toManySessions": "Hai troppe sessioni attive", - "logoutMessage": "Sei stato disconnesso." - }, - "pdfToSinglePage": { - "title": "PDF a pagina singola", - "header": "PDF a pagina singola", - "submit": "Converti in pagina singola" - }, - "pageExtracter": { - "title": "Estrai pagine", - "header": "Estrai pagine", - "submit": "Estrai", - "placeholder": "(es. 1,2,8 o 4,7,12-16 o 2n-1)" - }, - "sanitizePDF": { - "title": "Pulire PDF", - "header": "Pulisci un file PDF", - "selectText": { - "1": "Rimuovi le azioni JavaScript", - "2": "Rimuovi i file incorporati", - "3": "Rimuovi i metadati XMP", - "4": "Rimuovi collegamenti", - "5": "Rimuovi i font", - "6": "Rimuovi metadati delle informazioni del documento" - }, - "submit": "Pulisci PDF" - }, - "adjustContrast": { - "title": "Regola il contrasto", - "header": "Regola il contrasto", - "contrast": "Contrasto:", - "brightness": "Luminosità:", - "saturation": "Saturazione:", - "download": "Download" - }, - "compress": { - "title": "Comprimi", - "header": "Comprimi PDF", - "credit": "Questo servizio utilizza qpdf per la compressione/ottimizzazione dei PDF.", - "grayscale": { - "label": "Applica scala di grigio per la compressione" - }, - "selectText": { - "1": { - "_value": "Impostazioni di compressione", - "1": "1-3 Compressione PDF,
4-6 Compressione immagine leggera,
7-9 Compressione immagine intensa Ridurrà drasticamente la qualità dell'immagine" - }, - "2": "Livello di ottimizzazione:", - "4": "Modalità automatica - Regola automaticamente la qualità per ottenere le dimensioni esatte del PDF", - "5": "Dimensioni PDF previste (ad es. 25 MB, 10,8 MB, 25 KB)" - }, - "submit": "Comprimi" - }, - "decrypt": { - "passwordPrompt": "Questo file è protetto da password. Inserisci la password:", - "cancelled": "Operazione annullata per il PDF: {0}", - "noPassword": "Nessuna password fornita per il PDF crittografato: {0}", - "invalidPassword": "Riprova con la password corretta.", - "invalidPasswordHeader": "Password errata o crittografia non supportata per il PDF: {0}", - "unexpectedError": "Si è verificato un errore durante l'elaborazione del file. Riprova..", - "serverError": "Errore del server durante la decrittazione: {0}", - "success": "File decrittografato con successo." - }, - "multiTool-advert": { - "message": "Questa funzione è disponibile anche nella nostra pagina multi-strumento. Scoprila per un'interfaccia utente pagina per pagina migliorata e funzionalità aggiuntive!" - }, - "pageRemover": { - "title": "Rimuovi pagine", - "header": "Rimuovi pagine da un PDF", - "pagesToDelete": "Pagine da eliminare (inserisci una lista di numeri separati da virgola):", - "submit": "Rimuovi pagine", - "placeholder": "(es. 1,2,6 o 1-10,15-30)" - }, - "imageToPDF": { - "title": "Immagine a PDF", - "header": "Immagine a PDF", - "submit": "Converti", - "selectLabel": "Opzioni di adattamento immagine", - "fillPage": "Riempi la pagina", - "fitDocumentToImage": "Adatta la pagina all'immagine", - "maintainAspectRatio": "Mantieni le proporzioni", - "selectText": { - "2": "Ruota automaticamente PDF", - "3": "Logica multi-file (funziona solo se ci sono più immagini)", - "4": "Unisci in un unico PDF", - "5": "Converti in PDF separati" - } - }, - "PDFToCSV": { - "title": "Da PDF a CSV", - "header": "Da PDF a CSV", - "prompt": "Scegli la pagina per estrarre la tabella", - "submit": "Estrai" - }, - "split-by-size-or-count": { - "title": "Dividi il PDF per dimensione o numero", - "header": "Dividi il PDF per dimensione o numero", - "type": { - "label": "Seleziona il tipo di divisione", - "size": "Per dimensione", - "pageCount": "Per numero di pagine", - "docCount": "Per numero di documento" - }, - "value": { - "label": "Inserire il valore", - "placeholder": "Inserisci la dimensione (ad esempio, 2 MB o 3 KB) o il numero (ad esempio, 5)" - }, - "submit": "Separa" - }, - "printFile": { - "title": "Stampa file", - "header": "Stampa file su stampante", - "selectText": { - "1": "Seleziona file da stampare", - "2": "Inserire il nome della stampante" - }, - "submit": "Stampare" - }, - "licenses": { - "nav": "Licenze", - "title": "Licenze di terze parti", - "header": "Licenze di terze parti", - "module": "Modulo", - "version": "Versione", - "license": "Licenza" - }, - "survey": { - "nav": "Sondaggio", - "title": "Sondaggio Stirling-PDF", - "description": "Stirling-PDF non fa tracciamento, quindi vogliamo sentire i nostri utenti per migliorare Stirling-PDF!", - "changes": "Stirling-PDF è cambiato dall'ultimo sondaggio! Per saperne di più, consulta il nostro blog qui:", - "changes2": "Con questi cambiamenti stiamo ricevendo supporto aziendale e finanziamenti retribuiti", - "please": "Ti invitiamo a prendere in considerazione la possibilità di partecipare al nostro sondaggio!", - "disabled": "(Il popup del sondaggio verrà disabilitato nei prossimi aggiornamenti ma sarà disponibile a piè di pagina)", - "button": "Partecipa al sondaggio", - "dontShowAgain": "Non mostrare più", - "meeting": { - "1": "Se utilizzi Stirling PDF al lavoro, saremo lieti di parlare con te. Offriamo sessioni di supporto tecnico in cambio di una sessione di individuazione dell'utente di 15 minuti.", - "2": "Questa è un'opportunità per:", - "3": "Ottenere assistenza per la distribuzione, le integrazioni o la risoluzione dei problemi", - "4": "Fornire feedback diretto su prestazioni, casi limite e lacune nelle funzionalità", - "5": "Aiutaci a perfezionare Stirling PDF per un utilizzo aziendale nel mondo reale", - "6": "Se sei interessato, puoi prenotare un appuntamento direttamente con il nostro team. (Solo in inglese)", - "7": "Non vediamo l'ora di approfondire i tuoi casi d'uso e di migliorare ulteriormente Stirling PDF!", - "notInterested": "Non sei un'azienda e/o sei interessato a un incontro?", - "button": "Prenota un incontro" - } - }, - "removeImage": { - "title": "Rimuovere immagine", - "header": "Rimuovi immagine", - "removeImage": "Rimuovi immagine", - "submit": "Rimuovi immagine" - }, - "splitByChapters": { - "title": "Dividere PDF per capitoli", - "header": "Dividi PDF per capitoli", - "bookmarkLevel": "Livello segnalibro", - "includeMetadata": "Includi Metadati", - "allowDuplicates": "Consenti duplicati", - "desc": { - "1": "Questo strumento divide un file PDF in più PDF in base alla struttura dei capitoli.", - "2": "Livello segnalibro: seleziona il livello dei segnalibri da utilizzare per la suddivisione (0 per il livello superiore, 1 per il secondo livello, ecc.).", - "3": "Includi metadati: se selezionato, i metadati del PDF originale verranno inclusi in ogni PDF diviso.", - "4": "Consenti duplicati: se selezionata, consente più segnalibri sulla stessa pagina per creare PDF separati." - }, - "submit": "Dividi PDF" - }, - "fileChooser": { - "click": "Clicca", - "or": "o", - "dragAndDrop": "Trascina & Rilascia", - "dragAndDropPDF": "Trascina & rilascia il file PDF", - "dragAndDropImage": "Trascina & rilascia il file immagine", - "hoveredDragAndDrop": "Trascina & rilascia i file qui", - "extractPDF": "Estraendo..." - }, - "releases": { - "footer": "Rilasci", - "title": "Note di rilascio", - "header": "Note di rilascio", - "current": { - "version": "Rilascio corrente" - }, - "note": "Le note di rilascio sono disponibili solo in inglese" - }, - "cookieBanner": { - "popUp": { - "title": "Come utilizziamo i cookie", - "description": { - "1": "Utilizziamo cookie e altre tecnologie per migliorare l'esperienza utente di Stirling PDF, aiutandoci a perfezionare i nostri strumenti e a continuare a sviluppare funzionalità che amerai.", - "2": "Se preferisci non farlo, cliccando su \"No grazie\" verranno abilitati solo i cookie essenziali, necessari per il corretto funzionamento del sito." - }, - "acceptAllBtn": "Acconsento", - "acceptNecessaryBtn": "No grazie", - "showPreferencesBtn": "Gestisci preferenze" - }, - "preferencesModal": { - "title": "Gestore delle preferenze per il consenso", - "acceptAllBtn": "Accetta tutto", - "acceptNecessaryBtn": "Rifiuta tutto", - "savePreferencesBtn": "Salva preferenze", - "closeIconLabel": "Chiusura modale", - "serviceCounterLabel": "Servizio|Servizi", - "subtitle": "Utilizzo dei cookie", - "description": { - "1": "Stirling PDF utilizza cookie e tecnologie simili per migliorare la tua esperienza e comprendere come vengono utilizzati i nostri strumenti. Questo ci aiuta a migliorare le prestazioni, a sviluppare le funzionalità che ti interessano e a fornire supporto continuo ai nostri utenti.", - "2": "Stirling PDF non può e non potrà mai tracciare o accedere al contenuto dei documenti che utilizzi.", - "3": "La tua privacy e la tua fiducia sono al centro del nostro operato." - }, - "necessary": { - "title": { - "1": "Cookie strettamente necessari", - "2": "Sempre abilitati" - }, - "description": "Questi cookie sono essenziali per il corretto funzionamento del sito web. Abilitano funzionalità fondamentali come l'impostazione delle preferenze sulla privacy, l'accesso e la compilazione di moduli, motivo per cui non possono essere disattivati." - }, - "analytics": { - "title": "Analytics", - "description": "Questi cookie ci aiutano a capire come vengono utilizzati i nostri strumenti, così possiamo concentrarci sullo sviluppo delle funzionalità che la nostra community apprezza di più. Non preoccuparti: Stirling PDF non può e non traccerà mai il contenuto dei documenti con cui lavori." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/ja-JP/translation.json b/frontend/dist/locales/ja-JP/translation.json deleted file mode 100644 index 76b1bb87b..000000000 --- a/frontend/dist/locales/ja-JP/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "フォントサイズ", - "fontName": "フォント名", - "title": "ページ番号の追加", - "header": "ページ番号の追加", - "selectText": { - "1": "PDFファイルを選択:", - "2": "余白サイズ", - "3": "位置", - "4": "開始番号", - "5": "番号をつけるページ", - "6": "カスタムテキスト" - }, - "customTextDesc": "カスタムテキスト", - "numberPagesDesc": "番号をつけるページ、デフォルトは'all'、 1-5 や 2,5,9 など", - "customNumberDesc": "デフォルトは{n}、'{n} / {total} ページ'、'テキスト-{n}'、'{filename}-{n}など'", - "submit": "ページ番号の追加" - }, - "pdfPrompt": "PDFを選択", - "multiPdfPrompt": "PDFを選択 (2つ以上)", - "multiPdfDropPrompt": "PDFを選択 (又はドラッグ&ドロップ)", - "imgPrompt": "画像を選択", - "genericSubmit": "送信", - "uploadLimit": "最大ファイルサイズ:", - "uploadLimitExceededSingular": "のサイズが大きすぎます。許可された最大サイズは", - "uploadLimitExceededPlural": "のサイズが大きすぎます。許可された最大サイズは", - "processTimeWarning": "警告:この処理はファイルサイズによって1分程度かかることがあります", - "pageOrderPrompt": "ページ順序 (ページ番号をカンマ区切り又は2n+1のような関数で入力):", - "pageSelectionPrompt": "カスタムページ選択(ページ番号1、5、6または2n + 1などの関数のコンマ区切りリストを入力します):", - "goToPage": "移動", - "true": "真", - "false": "偽", - "unknown": "不明", - "save": "保存", - "saveToBrowser": "ブラウザへ保存", - "close": "閉じる", - "filesSelected": "選択されたファイル", - "noFavourites": "お気に入りはありません", - "downloadComplete": "ダウンロード完了", - "bored": "待ち時間が退屈", - "alphabet": "アルファベット", - "downloadPdf": "PDFをダウンロード", - "text": "テキスト", - "font": "フォント", - "selectFillter": "-- 選択 --", - "pageNum": "ページ番号", - "sizes": { - "small": "小", - "medium": "中", - "large": "大", - "x-large": "特大" - }, - "error": { - "pdfPassword": "PDFにパスワードが設定されてますが、パスワードが入力されてないか間違ってます。", - "_value": "エラー", - "sorry": "問題が発生したことをお詫び申し上げます!", - "needHelp": "助けが必要/問題が見つかりましたか?", - "contactTip": "まだ問題が解決していない場合は、お手数ですが、GitHubページでチケットを提出するか、Discordで私たちに連絡してください:", - "404": { - "head": "404 - ページが見つかりません | おっと、コードでつまずきました!", - "1": "あなたが探しているページが見つかりません。", - "2": "何か問題が発生しました" - }, - "github": "GitHubでチケットを提出", - "showStack": "スタックトレースを表示", - "copyStack": "スタックトレースをコピー", - "githubSubmit": "GitHub - チケットを提出", - "discordSubmit": "Discord - サポート投稿を提出" - }, - "delete": "削除", - "username": "ユーザー名", - "password": "パスワード", - "welcome": "ようこそ", - "property": "プロパティ", - "black": "黒", - "white": "白", - "red": "赤", - "green": "緑", - "blue": "青", - "custom": "カスタム...", - "WorkInProgess": "作業中です。動作しないまたはバグがある可能性があります。問題があれば報告してください!", - "poweredBy": "Powered by", - "yes": "はい", - "no": "いいえ", - "changedCredsMessage": "資格情報が変更されました!", - "notAuthenticatedMessage": "ユーザーが認証されていません。", - "userNotFoundMessage": "ユーザーが見つかりません。", - "incorrectPasswordMessage": "現在のパスワードが正しくありません。", - "usernameExistsMessage": "新しいユーザー名はすでに存在します。", - "invalidUsernameMessage": "ユーザー名が無効です。ユーザー名には文字、数字、およびそれに続く特殊文字 @._+- のみを含めることができます。または、有効な電子メール アドレスである必要があります。", - "invalidPasswordMessage": "パスワードは空にすることはできません。また、先頭・末尾にスペースを含めることもできません。", - "confirmPasswordErrorMessage": "新しいパスワードと新しいパスワードの確認は一致する必要があります。", - "deleteCurrentUserMessage": "現在ログインしているユーザーは削除できません。", - "deleteUsernameExistsMessage": "そのユーザー名は存在しないため削除できません。", - "downgradeCurrentUserMessage": "現在のユーザーの役割をダウングレードできません", - "disabledCurrentUserMessage": "現在のユーザーを無効にすることはできません", - "downgradeCurrentUserLongMessage": "現在のユーザーの役割をダウングレードできません。したがって、現在のユーザーは表示されません。", - "userAlreadyExistsOAuthMessage": "ユーザーは既にOAuth2ユーザーとして存在します。", - "userAlreadyExistsWebMessage": "ユーザーは既にWebユーザーとして存在します。", - "oops": "おっと!", - "help": "ヘルプ", - "goHomepage": "ホームページへ移動", - "joinDiscord": "Discordサーバーに参加する", - "seeDockerHub": "Docker Hubを見る", - "visitGithub": "Githubリポジトリを訪問する", - "donate": "寄付する", - "color": "色", - "sponsor": "スポンサー", - "info": "情報", - "pro": "Pro", - "page": "ページ", - "pages": "ページ", - "loading": "読込中...", - "addToDoc": "ドキュメントに追加", - "reset": "リセット", - "apply": "適用", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "プライバシーポリシー", - "terms": "利用規約", - "accessibility": "アクセシビリティ", - "cookie": "Cookieポリシー", - "impressum": "著作権利者情報", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "パイプラインメニュー (Beta)", - "uploadButton": "カスタムのアップロード", - "configureButton": "設定", - "defaultOption": "カスタム", - "submitButton": "送信", - "help": "パイプラインのヘルプ", - "scanHelp": "フォルダ スキャンのヘルプ", - "deletePrompt": "パイプラインを削除してもよろしいですか", - "tags": "automate,sequence,scripted,batch-process", - "title": "パイプライン" - }, - "pipelineOptions": { - "header": "パイプライン設定", - "pipelineNameLabel": "パイプライン名", - "saveSettings": "動作設定の保存", - "pipelineNamePrompt": "ここにパイプライン名を入力", - "selectOperation": "動作の選択", - "addOperationButton": "動作の追加", - "pipelineHeader": "パイプライン:", - "saveButton": "ダウンロード", - "validateButton": "検証" - }, - "enterpriseEdition": { - "button": "Proにアップグレード", - "warning": "この機能はProユーザーのみが利用できます。", - "yamlAdvert": "Stirling PDF Proは、YAML構成ファイルやその他のSSO機能をサポートしています。", - "ssoAdvert": "より多くのユーザー管理機能をお探しですか? Stirling PDF Proをご覧ください" - }, - "analytics": { - "title": "Stirling PDFをもっと良くしたいですか?", - "paragraph1": "Stirling PDFでは、製品の改善に役立つ分析機能をオプトインしています。個人情報やファイルの内容を追跡することはありません。", - "paragraph2": "Stirling-PDFの成長を支援しユーザーをより深く理解できるように分析を有効にすることを検討してください。", - "enable": "分析を有効にする", - "disable": "分析を無効にする", - "settings": "config/settings.ymlファイルでアナリティクスの設定を変更できます。" - }, - "navbar": { - "favorite": "お気に入り", - "recent": "新着・最新の更新", - "darkmode": "ダークモード", - "language": "言語", - "settings": "設定", - "allTools": "ツール", - "multiTool": "マルチツール", - "search": "検索", - "sections": { - "organize": "整理", - "convertTo": "PDFへ変換", - "convertFrom": "PDFから変換", - "security": "署名とセキュリティ", - "advance": "アドバンスド", - "edit": "閲覧と編集", - "popular": "人気" - } - }, - "settings": { - "title": "設定", - "update": "利用可能なアップデート", - "updateAvailable": "バージョン {0} がインストールされています。 新しいバージョン ({1}) が利用可能です。", - "appVersion": "Appバージョン:", - "downloadOption": { - "title": "ダウンロードオプション (zip以外の単一ファイル):", - "1": "同じウィンドウで開く", - "2": "新しいウィンドウで開く", - "3": "ファイルをダウンロード" - }, - "zipThreshold": "このファイル数を超えたときにファイルを圧縮する", - "signOut": "サインアウト", - "accountSettings": "アカウント設定", - "bored": { - "help": "イースターエッグゲームを有効にする" - }, - "cacheInputs": { - "name": "フォームの入力を保存する", - "help": "以前使用した入力を保存し、次回から使用できるようにする。" - } - }, - "changeCreds": { - "title": "資格情報の変更", - "header": "アカウントの詳細を更新する", - "changePassword": "デフォルトのログイン認証情報を使用しています。新しいパスワードを入力してください", - "newUsername": "新しいユーザー名", - "oldPassword": "現在のパスワード", - "newPassword": "新しいパスワード", - "confirmNewPassword": "新しいパスワードの確認", - "submit": "変更を送信" - }, - "account": { - "title": "アカウント設定", - "accountSettings": "アカウント設定", - "adminSettings": "管理者設定 - ユーザーの表示と追加", - "userControlSettings": "ユーザー制御設定", - "changeUsername": "ユーザー名を変更", - "newUsername": "新しいユーザーネーム", - "password": "確認用パスワード", - "oldPassword": "旧パスワード", - "newPassword": "新パスワード", - "changePassword": "パスワードの変更", - "confirmNewPassword": "新パスワードの確認", - "signOut": "サインアウト", - "yourApiKey": "あなたのAPIキー", - "syncTitle": "ブラウザ設定をアカウントと同期する", - "settingsCompare": "設定比較:", - "property": "プロパティ", - "webBrowserSettings": "Webブラウザ設定", - "syncToBrowser": "アカウントの同期 -> ブラウザ", - "syncToAccount": "アカウントの同期 <- ブラウザ" - }, - "adminUserSettings": { - "title": "ユーザー制御設定", - "header": "管理者ユーザー制御設定", - "admin": "管理者", - "user": "ユーザー", - "addUser": "新しいユーザを追加", - "deleteUser": "ユーザの削除", - "confirmDeleteUser": "ユーザを本当に削除しますか?", - "confirmChangeUserStatus": "ユーザーを無効/有効にする必要がありますか?", - "usernameInfo": "ユーザー名には、文字、数字、および次の特殊文字 @._+- のみを含めることができます。または、有効な電子メール アドレスである必要があります。", - "roles": "役割", - "role": "役割", - "actions": "アクション", - "apiUser": "限定されたAPIユーザー", - "extraApiUser": "追加の制限付きAPIユーザー", - "webOnlyUser": "ウェブ専用ユーザー", - "demoUser": "デモユーザー (カスタム設定なし)", - "internalApiUser": "内部APIユーザー", - "forceChange": "ログイン時にユーザー名/パスワードを強制的に変更する", - "submit": "ユーザーの保存", - "changeUserRole": "ユーザーの役割を変更する", - "authenticated": "認証済", - "editOwnProfil": "プロフィールの編集", - "enabledUser": "有効なユーザー", - "disabledUser": "無効なユーザー", - "activeUsers": "アクティブユーザー:", - "disabledUsers": "無効なユーザー:", - "totalUsers": "ユーザー合計:", - "lastRequest": "最後のリクエスト", - "usage": "使用状況を表示" - }, - "endpointStatistics": { - "title": "エンドポイント統計", - "header": "エンドポイント統計", - "top10": "トップ10", - "top20": "トップ20", - "all": "すべて", - "refresh": "更新", - "includeHomepage": "ホームページを含める ('/')", - "includeLoginPage": "ログインページを含める ('/login')", - "totalEndpoints": "エンドポイント合計", - "totalVisits": "総訪問数", - "showing": "表示", - "selectedVisits": "選択された訪問先", - "endpoint": "エンドポイント", - "visits": "訪問", - "percentage": "比率", - "loading": "読込中...", - "failedToLoad": "エンドポイントデータのロードに失敗しました。更新してみてください。", - "home": "ホーム", - "login": "ログイン", - "top": "トップ", - "numberOfVisits": "訪問回数", - "visitsTooltip": "訪問数: {0} (合計の{1}%)", - "retry": "再試行" - }, - "database": { - "title": "データベースのインポート/エクスポート", - "header": "データベースのインポート/エクスポート", - "fileName": "ファイル名", - "creationDate": "作成日", - "fileSize": "ファイルサイズ", - "deleteBackupFile": "バックアップファイルの削除", - "importBackupFile": "バックアップファイルをインポート", - "createBackupFile": "バックアップファイルの作成", - "downloadBackupFile": "バックアップファイルをダウンロード", - "info_1": "データをインポートする際には、正しい構造を確保することが極めて重要です。不明な点がある場合は、専門家のアドバイスやサポートを受けてください。構造上のエラーは、アプリケーションの誤動作を引き起こす可能性があります。", - "info_2": "ファイル名はアップロード時には関係ありません。アップロード後にbackup_user_yyyyMMddHHmm.sqlという形式にリネームされ、一貫した命名規則が保証されます。", - "submit": "バックアップをインポート", - "importIntoDatabaseSuccessed": "データベースへのインポートに成功", - "backupCreated": "データベースのバックアップに成功しました", - "fileNotFound": "ファイルが見つかりません", - "fileNullOrEmpty": "ファイルはnullまたは空であってはなりません", - "failedImportFile": "ファイルのインポートに失敗", - "notSupported": "この機能はデータベース接続では使用できません。" - }, - "session": { - "expired": "セッションが期限切れです。ページを更新してもう一度お試しください。", - "refreshPage": "ページを更新" - }, - "home": { - "desc": "PDFのあらゆるニーズに対応するローカルホスティングされた総合窓口です。", - "searchBar": "機能検索...", - "viewPdf": { - "title": "PDFの表示/編集", - "desc": "表示、注釈、テキストや画像の追加" - }, - "setFavorites": "お気に入りを設定", - "hideFavorites": "お気に入りを隠す", - "showFavorites": "お気に入りを表示", - "legacyHomepage": "旧ホームページ", - "newHomePage": "新しいホームページを試してください!", - "alphabetical": "アルファベット順", - "globalPopularity": "グローバル人気", - "sortBy": "ソート順:", - "multiTool": { - "title": "PDFマルチツール", - "desc": "ページの結合、回転、並べ替え、削除します。" - }, - "merge": { - "title": "結合", - "desc": "複数のPDFを1つに結合します。" - }, - "split": { - "title": "分割", - "desc": "PDFを複数のドキュメントに分割します。" - }, - "rotate": { - "title": "回転", - "desc": "PDFを回転します。" - }, - "imageToPdf": { - "title": "画像をPDFに変換", - "desc": "画像 (PNG, JPEG, GIF) をPDFに変換します。" - }, - "pdfToImage": { - "title": "PDFを画像に変換", - "desc": "PDFを画像 (PNG, JPEG, GIF) に変換します。" - }, - "pdfOrganiser": { - "title": "整理", - "desc": "ページの削除/並べ替えします。" - }, - "addImage": { - "title": "画像の追加", - "desc": "PDF上の任意の場所に画像を追加します。" - }, - "watermark": { - "title": "透かしの追加", - "desc": "PDFに独自の透かしを追加します。" - }, - "permissions": { - "title": "権限の変更", - "desc": "PDFの権限を変更します。" - }, - "removePages": { - "title": "削除", - "desc": "PDFから不要なページを削除します。" - }, - "addPassword": { - "title": "パスワードの追加", - "desc": "PDFをパスワードで暗号化します。" - }, - "removePassword": { - "title": "パスワードの削除", - "desc": "PDFからパスワードの削除します。" - }, - "compressPdfs": { - "title": "圧縮", - "desc": "PDFを圧縮してファイルサイズを小さくします。" - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "メタデータの変更", - "desc": "PDFのメタデータを変更/削除/追加します。" - }, - "fileToPDF": { - "title": "ファイルをPDFに変換", - "desc": "ほぼすべてのファイルをPDFに変換します。 (DOCX, PNG, XLS, PPT, TXTなど)" - }, - "ocr": { - "title": "OCR / クリーンアップ", - "desc": "クリーンアップはPDF内の画像からテキストを検出してテキストとして再追加します。" - }, - "extractImages": { - "title": "画像の抽出", - "desc": "PDFからすべての画像を抽出してzipで保存します。" - }, - "pdfToPDFA": { - "title": "PDFをPDF/Aに変換", - "desc": "長期保存のためにPDFをPDF/Aに変換。" - }, - "PDFToWord": { - "title": "PDFをWordに変換", - "desc": "PDFをWord形式に変換します。 (DOC, DOCX および ODT)" - }, - "PDFToPresentation": { - "title": "PDFをプレゼンテーションに変換", - "desc": "PDFをプレゼンテーション形式に変換します。 (PPT, PPTX および ODP)" - }, - "PDFToText": { - "title": "PDFをText/RTFに変換", - "desc": "PDFをTextまたはRTF形式に変換します。" - }, - "PDFToHTML": { - "title": "PDFをHTMLに変換", - "desc": "PDFをHTML形式に変換します。" - }, - "PDFToXML": { - "title": "PDFをXMLに変換", - "desc": "PDFをXML形式に変換します。" - }, - "ScannerImageSplit": { - "title": "スキャンされた画像の検出/分割", - "desc": "1枚の画像/PDFから複数の写真を分割します。" - }, - "sign": { - "title": "署名", - "desc": "手書き、テキストまたは画像によってPDFに署名を追加します。" - }, - "flatten": { - "title": "平坦化", - "desc": "PDFからインタラクティブな要素とフォームをすべて削除します。" - }, - "repair": { - "title": "修復", - "desc": "破損したPDFの修復を試みます。" - }, - "removeBlanks": { - "title": "空白ページの削除", - "desc": "ドキュメントから空白ページを検出して削除します。" - }, - "removeAnnotations": { - "title": "注釈の削除", - "desc": "PDFからすべてのコメント・注釈を削除します。" - }, - "compare": { - "title": "比較", - "desc": "2つのPDFを比較して表示します。" - }, - "certSign": { - "title": "証明書による署名", - "desc": "証明書/キーを使用してPDFに署名します。 (PEM/P12)" - }, - "removeCertSign": { - "title": "証明書の署名を削除する", - "desc": "PDFから証明書署名を削除する" - }, - "pageLayout": { - "title": "マルチページレイアウト", - "desc": "PDFの複数のページを1ページに結合します。" - }, - "scalePages": { - "title": "ページの縮尺の調整", - "desc": "ページやコンテンツの縮尺を変更します。" - }, - "pipeline": { - "title": "パイプライン", - "desc": "パイプラインスクリプトを定義してPDF上で複数のアクションを実行します。" - }, - "add-page-numbers": { - "title": "ページ番号の追加", - "desc": "ドキュメント全体の設定された場所にページ番号を追加します。" - }, - "auto-rename": { - "title": "PDFファイル名の自動変更", - "desc": "検出されたヘッダーに基づいてPDFファイルの名前を自動的に変更します。" - }, - "adjust-contrast": { - "title": "色/コントラストの調整", - "desc": "PDFのコントラスト、彩度、明るさを調整します。" - }, - "crop": { - "title": "PDFのトリミング", - "desc": "PDFをトリミングしてサイズを縮小します (テキストは維持します!)。" - }, - "autoSplitPDF": { - "title": "ページの自動分割", - "desc": "ページ分割用QRコードを使用したスキャンしたPDFを自動分割します。" - }, - "sanitizePdf": { - "title": "サニタイズ", - "desc": "PDFファイルからスクリプトやその他の要素を削除します。" - }, - "URLToPDF": { - "title": "URL/WebサイトをPDFに変換", - "desc": "あらゆるhttp(s)URLをPDFに変換します。" - }, - "HTMLToPDF": { - "title": "HTMLをPDFに変換", - "desc": "HTMLファイルまたはzipをPDFに変換します。" - }, - "MarkdownToPDF": { - "title": "MarkdownをPDFに変換", - "desc": "あらゆるMarkdownファイルをPDFに変換します。" - }, - "PDFToMarkdown": { - "title": "PDFをMarkdownに変換", - "desc": "あらゆるPDFをMarkdownに変換します。" - }, - "getPdfInfo": { - "title": "PDFのすべての情報を入手", - "desc": "PDFのあらゆる情報を取得します。" - }, - "extractPage": { - "title": "ページの抽出", - "desc": "PDFから選択したページを抽出します。" - }, - "PdfToSinglePage": { - "title": "PDFを単一の大きなページに変換", - "desc": "PDFのすべてのページを1つの大きな単一ページに結合します" - }, - "showJS": { - "title": "JavaScriptを表示", - "desc": "PDFに挿入されたJavaScriptを検索して表示します。" - }, - "autoRedact": { - "title": "自動墨消し", - "desc": "入力したテキストに基づいてPDF内のテキストを自動で墨消し(黒塗り)ます。" - }, - "redact": { - "title": "手動墨消し", - "desc": "選択したテキスト、描画した図形、選択したページに基づいてPDFを墨消します。" - }, - "tableExtraxt": { - "title": "PDFをCSVに変換", - "desc": "PDFから表を抽出しCSVに変換します。" - }, - "autoSizeSplitPDF": { - "title": "サイズ・数による自動分割", - "desc": "サイズ・ページ数またはドキュメント数に基づいて、1つのPDFを複数のドキュメントに分割します。" - }, - "overlay-pdfs": { - "title": "PDFのオーバーレイ", - "desc": "PDFの上に別のPDFを重ねます。" - }, - "split-by-sections": { - "title": "PDFをセクションで分割", - "desc": "PDFの各ページを縦横に分割します。" - }, - "AddStampRequest": { - "title": "PDFにスタンプを追加", - "desc": "設定した位置にテキストや画像のスタンプを追加できます" - }, - "removeImagePdf": { - "title": "画像の削除", - "desc": "PDFから画像を削除してファイルサイズを小さくします" - }, - "splitPdfByChapters": { - "title": "PDFをチャプターごとに分割", - "desc": "チャプターの構造に基づいてPDFを複数のファイルに分割します" - }, - "validateSignature": { - "title": "PDF署名の検証", - "desc": "PDF文書のデジタル署名と証明書を検証します" - }, - "replaceColorPdf": { - "title": "色の置換と反転", - "desc": "PDF内のテキストと背景の色を置き換え、PDFのフルカラーを反転してファイルサイズを縮小します。" - } - }, - "viewPdf": { - "tags": "view,read,annotate,text,image", - "title": "PDFの表示/編集", - "header": "PDFを表示" - }, - "multiTool": { - "tags": "Multi Tool,Multi operation,UI,click drag,front end,client side,interactive,intractable,move,delete,migrate,divide", - "title": "PDFマルチツール", - "header": "PDFマルチツール", - "uploadPrompts": "ファイル名", - "selectAll": "すべて選択", - "deselectAll": "選択を解除", - "selectPages": "ページ選択", - "selectedPages": "選択したページ", - "page": "ページ", - "deleteSelected": "選択項目を削除", - "downloadAll": "エクスポート", - "downloadSelected": "選択項目をエクスポート", - "insertPageBreak": "改ページを挿入", - "addFile": "ファイルを追加", - "rotateLeft": "左回転", - "rotateRight": "右回転", - "split": "分割", - "moveLeft": "左に移動", - "moveRight": "右に移動", - "delete": "削除", - "dragDropMessage": "選択されたページ", - "undo": "元に戻す", - "redo": "やり直す" - }, - "merge": { - "tags": "merge,Page operations,Back end,server side", - "title": "結合", - "header": "複数のPDFを結合 (2ファイル以上)", - "sortByName": "名前で並べ替え", - "sortByDate": "日付で並べ替え", - "removeCertSign": "結合されたファイル内のデジタル署名を削除しますか?", - "submit": "結合" - }, - "split": { - "tags": "Page operations,divide,Multi Page,cut,server side", - "title": "PDFの分割", - "header": "PDFの分割", - "desc": { - "1": "選択する番号は分割するページ番号です。", - "2": "したがって、1,3,7-9を選択すると、10ページのドキュメントが以下のように6つのPDFに分割されることになります。", - "3": "ドキュメント #1: ページ 1", - "4": "ドキュメント #2: ページ 2, 3", - "5": "ドキュメント #3: ページ 4, 5, 6, 7", - "6": "ドキュメント #4: ページ 8", - "7": "ドキュメント #5: ページ 9", - "8": "ドキュメント #6: ページ 10" - }, - "splitPages": "分割するページ番号を入力:", - "submit": "分割" - }, - "rotate": { - "tags": "server side", - "title": "PDFの回転", - "header": "PDFの回転", - "selectAngle": "回転角度を選択 (90度の倍数):", - "submit": "回転" - }, - "imageToPdf": { - "tags": "conversion,img,jpg,picture,photo" - }, - "pdfToImage": { - "tags": "conversion,img,jpg,picture,photo", - "title": "PDFを画像に変換", - "header": "PDFを画像に変換", - "selectText": "画像の形式", - "singleOrMultiple": "画像出力タイプ", - "single": "単一の大きな画像", - "multi": "複数の画像", - "colorType": "カラーモード", - "color": "カラー", - "grey": "グレースケール", - "blackwhite": "白黒 (データが失われる可能性があります!)", - "submit": "変換", - "info": "Pythonがインストールされていません。WebPの変換に必要です。", - "placeholder": "(例:1,2,8、4,7,12-16、2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,even,odd,sort,move", - "title": "整理", - "header": "PDFページの整理", - "submit": "ページの整理", - "mode": { - "_value": "モード", - "1": "カスタムページ順序", - "2": "逆順", - "3": "デュプレックスソート", - "4": "小冊子ソート", - "5": "サイドステッチ小冊子ソート", - "6": "奇数-偶数分割", - "7": "最初に削除", - "8": "最後を削除", - "9": "最初と最後を削除", - "10": "奇数-偶数の結合", - "11": "すべてのページを複製" - }, - "placeholder": "(例:1,3,2または4-8,2,10-12または2n-1)" - }, - "addImage": { - "tags": "img,jpg,picture,photo", - "title": "画像の追加", - "header": "PDFに画像を追加", - "everyPage": "全ページ?", - "upload": "画像の追加", - "submit": "画像の追加" - }, - "watermark": { - "tags": "Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo", - "title": "透かしの追加", - "header": "透かしの追加", - "customColor": "文字色のカスタム", - "selectText": { - "1": "透かしを追加するPDFを選択:", - "2": "透かしのテキスト:", - "3": "文字サイズ:", - "4": "回転 (0-360):", - "5": "幅スペース (各透かし間の水平方向のスペース):", - "6": "高さスペース (各透かし間の垂直方向のスペース):", - "7": "不透明度 (0% - 100%):", - "8": "透かしの種類:", - "9": "透かしの画像:", - "10": "PDFをPDFイメージに変換する" - }, - "submit": "透かしを追加", - "type": { - "1": "テキスト", - "2": "画像" - } - }, - "permissions": { - "tags": "read,write,edit,print", - "title": "権限の変更", - "header": "権限の変更", - "warning": "警告、これらの権限を変更できないようにするため、パスワードの追加ページでパスワードを設定することを推奨します。", - "selectText": { - "1": "権限を変更するPDFを選択", - "2": "権限の設定", - "3": "ドキュメントの組立を禁止", - "4": "コンテンツの抽出を禁止", - "5": "アクセシビリティのための抽出を禁止", - "6": "フォームへの入力を禁止", - "7": "変更を禁止", - "8": "注釈の変更を禁止", - "9": "印刷を禁止", - "10": "異なる形式の印刷を禁止" - }, - "submit": "変更" - }, - "removePages": { - "tags": "Remove pages,delete pages" - }, - "addPassword": { - "tags": "secure,security", - "title": "パスワードの追加", - "header": "パスワードの追加 (暗号化)", - "selectText": { - "1": "暗号化するPDFを選択", - "2": "ユーザーパスワード", - "3": "暗号化キーの長さ", - "4": "値が大きいほど強力ですが、値が小さいほど互換性が高くなります。", - "5": "権限の設定 (所有者パスワードとの併用をおすすめします)", - "6": "ドキュメントの組立を禁止", - "7": "コンテンツの抽出を禁止", - "8": "アクセシビリティのための抽出を禁止", - "9": "フォームへの入力を禁止", - "10": "変更を禁止", - "11": "注釈の変更を禁止", - "12": "印刷を禁止", - "13": "異なる形式の印刷を禁止", - "14": "所有者パスワード", - "15": "ドキュメントを開いた後に実行できる操作を制限します (すべてのリーダーでサポートされているわけではありません)", - "16": "ドキュメントを開くことを制限します" - }, - "submit": "暗号化" - }, - "removePassword": { - "tags": "secure,Decrypt,security,unpassword,delete password", - "title": "パスワードの削除", - "header": "パスワードの削除 (復号化)", - "selectText": { - "1": "復号化するPDFを選択", - "2": "パスワード" - }, - "submit": "削除" - }, - "compressPdfs": { - "tags": "squish,small,tiny" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Title,author,date,creation,time,publisher,producer,stats", - "title": "タイトル:", - "header": "メタデータの変更", - "selectText": { - "1": "変更したい変数を編集してください", - "2": "すべてのメタデータを削除", - "3": "カスタムメタデータを表示", - "4": "その他のメタデータ:", - "5": "カスタムメタデータの追加" - }, - "author": "著者:", - "creationDate": "作成日 (yyyy/MM/dd HH:mm:ss):", - "creator": "作成者:", - "keywords": "キーワード:", - "modDate": "変更日 (yyyy/MM/dd HH:mm:ss):", - "producer": "プロデューサー:", - "subject": "主題:", - "trapped": "トラッピング:", - "submit": "変更" - }, - "fileToPDF": { - "tags": "transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint", - "title": "ファイルをPDFに変換", - "header": "あらゆるファイルをPDFに変換", - "credit": "本サービスはファイル変換にLibreOfficeとUnoconvを使用しています。", - "supportedFileTypesInfo": "サポートされるファイル形式", - "supportedFileTypes": "サポートされるファイル形式には以下が含まれますが、完全な更新リストについてはLibreOfficeのドキュメントを参照してください。", - "submit": "PDFを変換" - }, - "ocr": { - "tags": "recognition,text,image,scan,read,identify,detection,editable", - "title": "OCR / クリーンアップ", - "header": "クリーンアップ / OCR (光学式文字認識)", - "selectText": { - "1": "PDF内で検出される言語を選択 (リストされているものは現在検出されているものです):", - "2": "OCR処理されたPDFと一緒に、OCRしたテキストを含むテキストファイルを作成する", - "3": "斜めにスキャンされたページを回転させて修正する", - "4": "ページをきれいにして背景ノイズの中からテキストを検出しにくくする。(出力は変わりません)", - "5": "ページをきれいにして背景ノイズの中からテキストを検出しにくくし、出力はクリーンアップを維持する。", - "6": "インタラクティブなテキストを含むページを無視し、画像ページのみをOCRする", - "7": "強制OCR、全てのページで元のテキスト要素を全て削除してOCRする", - "8": "ノーマル (PDFにテキストが含まれている場合はエラーになります。)", - "9": "追加設定", - "10": "OCRモード", - "11": "OCR後に画像を削除する (すべての画像を削除します。変換ステップの一部である場合にのみ有効です)。", - "12": "レンダリングタイプ (高度)" - }, - "help": "他の言語でこれを使用する方法やDocker以外で使用する方法についてはこのドキュメントをお読みください。", - "credit": "本サービスにはOCRにqpdfとTesseractを使用しています。", - "submit": "OCRでPDFを処理する" - }, - "extractImages": { - "tags": "picture,photo,save,archive,zip,capture,grab", - "title": "画像の抽出", - "header": "画像の抽出", - "selectText": "抽出した画像のフォーマットを選択", - "allowDuplicates": "重複した画像を保存する", - "submit": "抽出" - }, - "pdfToPDFA": { - "tags": "archive,long-term,standard,conversion,storage,preservation", - "title": "PDFをPDF/Aに変換", - "header": "PDFをPDF/Aに変換", - "credit": "本サービスはPDF/Aの変換にlibreofficeを使用しています。", - "submit": "変換", - "tip": "現在、一度に複数の入力に対して機能しません", - "outputFormat": "出力形式", - "pdfWithDigitalSignature": "PDFにはデジタル署名が含まれています。これは次の手順で削除されます。" - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile", - "title": "PDFをWordに変換", - "header": "PDFをWordに変換", - "selectText": { - "1": "出力ファイル形式" - }, - "credit": "本サービスはファイル変換にLibreOfficeを使用しています。", - "submit": "変換" - }, - "PDFToPresentation": { - "tags": "slides,show,office,microsoft", - "title": "PDFをプレゼンテーションに変換", - "header": "PDFをプレゼンテーションに変換", - "selectText": { - "1": "出力ファイル形式" - }, - "credit": "本サービスはファイル変換にLibreOfficeを使用しています。", - "submit": "変換" - }, - "PDFToText": { - "tags": "richformat,richtextformat,rich text format", - "title": "PDFをText/RTFに変換", - "header": "PDFをText/RTFに変換", - "selectText": { - "1": "出力ファイル形式" - }, - "credit": "本サービスはファイル変換にLibreOfficeを使用しています。", - "submit": "変換" - }, - "PDFToHTML": { - "tags": "web content,browser friendly", - "title": "PDFをHTMLに変換", - "header": "PDFをHTMLに変換", - "credit": "本サービスはファイル変換にpdftohtmlを使用しています。", - "submit": "変換" - }, - "PDFToXML": { - "tags": "data-extraction,structured-content,interop,transformation,convert", - "title": "PDFをXMLに変換", - "header": "PDFをXMLに変換", - "credit": "本サービスはファイル変換にLibreOfficeを使用しています。", - "submit": "変換" - }, - "ScannerImageSplit": { - "tags": "separate,auto-detect,scans,multi-photo,organize", - "selectText": { - "1": "角度のしきい値:", - "2": "画像を回転させるために必要な絶対角度の最小値を設定 (初期値:10)。", - "3": "許容範囲:", - "4": "推定された背景色周辺のカラーバリエーションの範囲を決定 (初期値:30)。", - "5": "最小面積:", - "6": "画像の最小面積のしきい値を設定 (初期値:10000)。", - "7": "最小輪郭面積:", - "8": "画像の最小の輪郭面積のしきい値を設定。", - "9": "境界線サイズ:", - "10": "出力に白い縁取りが出ないように追加・削除される境界線の大きさを設定 (初期値:1)。" - }, - "info": "Pythonがインストールされていません。実行する必要があります。" - }, - "sign": { - "tags": "authorize,initials,drawn-signature,text-sign,image-signature", - "title": "署名", - "header": "PDFに署名", - "upload": "画像をアップロード", - "draw": "署名を書く", - "text": "テキスト入力", - "clear": "クリア", - "add": "追加", - "saved": "保存された署名", - "save": "署名を保存", - "personalSigs": "個人署名", - "sharedSigs": "共有署名", - "noSavedSigs": "保存された署名が見つかりません", - "addToAll": "すべてのページに追加", - "delete": "削除", - "first": "最初のページ", - "last": "最後のページ", - "next": "次のページ", - "previous": "前のページ", - "maintainRatio": "アスペクト比を維持を切替え", - "undo": "元に戻す", - "redo": "やり直す" - }, - "flatten": { - "tags": "static,deactivate,non-interactive,streamline", - "title": "平坦化", - "header": "PDFを平坦化する", - "flattenOnlyForms": "フォームのみを平坦にする", - "submit": "平坦化" - }, - "repair": { - "tags": "fix,restore,correction,recover", - "title": "修復", - "header": "PDFを修復", - "submit": "修復" - }, - "removeBlanks": { - "tags": "cleanup,streamline,non-content,organize", - "title": "空白の削除", - "header": "空白ページの削除", - "threshold": "しきい値 :", - "thresholdDesc": "白色ピクセルの白さを決めるためのしきい値", - "whitePercent": "白比率", - "whitePercentDesc": "削除するページの白の割合", - "submit": "空白ページの削除" - }, - "removeAnnotations": { - "tags": "comments,highlight,notes,markup,remove", - "title": "注釈の削除", - "header": "注釈の削除", - "submit": "削除" - }, - "compare": { - "tags": "differentiate,contrast,changes,analysis", - "title": "比較", - "header": "PDFの比較", - "highlightColor": { - "1": "ハイライトカラー 1:", - "2": "ハイライトカラー 2:" - }, - "document": { - "1": "ドキュメント 1", - "2": "ドキュメント 2" - }, - "submit": "比較", - "complex": { - "message": "提供された文書の一方または両方が大きなファイルであるため、比較の精度が低下する可能性があります。" - }, - "large": { - "file": { - "message": "提供された文書の1つまたは両方が大きすぎて処理できません" - } - }, - "no": { - "text": { - "message": "選択したPDFの1つまたは両方にテキストコンテンツがありません。比較するには、テキストを含むPDFを選択してください。" - } - } - }, - "certSign": { - "tags": "authenticate,PEM,P12,official,encrypt", - "title": "証明書による署名", - "header": "証明書を使用してPDFに署名します。 (制作中)", - "selectPDF": "署名するPDFファイルを選択:", - "jksNote": "注: 証明書のタイプが以下にリストされていない場合は、keytoolコマンドラインツールを使用して証明書をJavaキーストア(.jks)ファイルに変換してください。次に以下の.jksファイル オプションを選択します。", - "selectKey": "秘密キーファイルを選択 (PKCS#8形式、.pemまたは.der) :", - "selectCert": "証明書ファイルを選択 (X.509形式、.pemまたは.der) :", - "selectP12": "PKCS#12キーストアファイルを選択 (.p12または.pfx) (オプション。指定する場合は秘密キーと証明書が含まれている必要があります。):", - "selectJKS": "Javaキーストアファイルを選択 (.jks or .keystore):", - "certType": "証明書の種類", - "password": "キーストアまたは秘密キーのパスワードを入力 (ある場合) :", - "showSig": "署名を表示", - "reason": "理由", - "location": "場所", - "name": "名前", - "showLogo": "ロゴを表示", - "submit": "PDFに署名" - }, - "removeCertSign": { - "tags": "authenticate,PEM,P12,official,decrypt", - "title": "証明書署名の削除", - "header": "PDFから電子証明書を削除する", - "selectPDF": "PDFファイルの選択:", - "submit": "署名の削除" - }, - "pageLayout": { - "tags": "merge,composite,single-view,organize", - "title": "マルチページレイアウト", - "header": "マルチページレイアウト", - "pagesPerSheet": "1枚あたりのページ数:", - "addBorder": "境界線を追加", - "submit": "送信" - }, - "scalePages": { - "tags": "resize,modify,dimension,adapt", - "title": "ページの縮尺の調整", - "header": "ページの縮尺の調整", - "pageSize": "1ページのサイズ", - "keepPageSize": "元のサイズ", - "scaleFactor": "1ページの拡大レベル (トリミング)。", - "submit": "送信" - }, - "add-page-numbers": { - "tags": "paginate,label,organize,index" - }, - "auto-rename": { - "tags": "auto-detect,header-based,organize,relabel", - "title": "ファイル名の自動変更", - "header": "PDF名の自動変更", - "submit": "自動リネーム" - }, - "adjust-contrast": { - "tags": "color-correction,tune,modify,enhance" - }, - "crop": { - "tags": "trim,shrink,edit,shape", - "title": "切り抜き", - "header": "PDFのトリミング", - "submit": "送信" - }, - "autoSplitPDF": { - "tags": "QR-based,separate,scan-segment,organize", - "title": "PDFの自動分割", - "header": "PDFの自動分割", - "description": "印刷、挿入、スキャン、アップロード、およびドキュメントを自動分離します。手動での仕分けの必要ありません。", - "selectText": { - "1": "下から仕切り用紙を印刷します(白黒で問題ありません)。", - "2": "原稿の間に仕切り用紙を挿入し、すべての原稿をまとめてスキャンします。", - "3": "スキャンしたPDFファイルをアップロードしStirling PDFに任せます。", - "4": "仕切りページは自動的に検出、削除されるので、最終的な文書はきれいに仕上がります。" - }, - "formPrompt": "Stirling-PDF仕切り用紙を含むPDFを送信:", - "duplexMode": "両面モード (表裏スキャン)", - "dividerDownload2": "ダウンロード '自動仕切り用紙 (手順書付き).pdf'", - "submit": "送信" - }, - "sanitizePdf": { - "tags": "clean,secure,safe,remove-threats" - }, - "URLToPDF": { - "tags": "web-capture,save-page,web-to-doc,archive", - "title": "URLをPDFに変換", - "header": "URLをPDFに変換", - "submit": "変換", - "credit": "WeasyPrintを使用" - }, - "HTMLToPDF": { - "tags": "markup,web-content,transformation,convert", - "title": "HTMLをPDFに変換", - "header": "HTMLをPDFに変換", - "help": "HTMLファイルと必要なhtml/css/画像などを含むZIPを受け入れます", - "submit": "変換", - "credit": "WeasyPrintを使用", - "zoom": "Webサイトを表示するためのズームレベル。", - "pageWidth": "ページ幅 (cm)。 (デフォルトでは空白)", - "pageHeight": "ページ高さ (cm)。 (デフォルトでは空白)", - "marginTop": "ページ上の余白 (mm)。 (デフォルトでは空白)", - "marginBottom": "ページ下の余白 (mm)。 (デフォルトでは空白)", - "marginLeft": "ページ左の余白 (mm)。 (デフォルトでは空白)", - "marginRight": "ページ右の余白 (mm)。 (デフォルトでは空白)", - "printBackground": "Webサイトの背景をレンダリングします。", - "defaultHeader": "デフォルトのヘッダー (名前とページ番号) を有効にする", - "cssMediaType": "ページのCSSメディアタイプを変更します。", - "none": "なし", - "print": "印刷", - "screen": "画面" - }, - "MarkdownToPDF": { - "tags": "markup,web-content,transformation,convert", - "title": "MarkdownをPDFに変換", - "header": "MarkdownをPDFに変換", - "submit": "変換", - "help": "処理中", - "credit": "WeasyPrintを使用" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDFをMarkdownに変換", - "header": "PDFをMarkdownに変換", - "submit": "変換" - }, - "getPdfInfo": { - "tags": "infomation,data,stats,statistics", - "title": "PDFの情報を入手", - "header": "PDFの情報を入手", - "submit": "情報を入手", - "downloadJson": "JSONでダウンロード" - }, - "extractPage": { - "tags": "extract" - }, - "PdfToSinglePage": { - "tags": "single page" - }, - "showJS": { - "tags": "JS", - "title": "Javascriptを表示", - "header": "Javascriptを表示", - "downloadJS": "Javascriptをダウンロード", - "submit": "表示" - }, - "autoRedact": { - "tags": "Redact,Hide,black out,black,marker,hidden", - "title": "自動墨消し", - "header": "自動墨消し", - "colorLabel": "カラー", - "textsToRedactLabel": "編集するテキスト(行区切り)", - "textsToRedactPlaceholder": "例: \\n機密 \\n極秘", - "useRegexLabel": "正規表現を使用する", - "wholeWordSearchLabel": "単語単位の検索", - "customPaddingLabel": "追加の余白", - "convertPDFToImageLabel": "PDFをPDF画像に変換 (墨消しの後ろのテキストを削除するために使用)", - "submitButton": "送信" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "手動墨消し", - "header": "手動墨消し", - "submit": "編集", - "textBasedRedaction": "テキストベースの墨消し", - "pageBasedRedaction": "ページベースの墨消し", - "convertPDFToImageLabel": "PDFをPDF画像に変換します (ボックスの背後のテキストを削除するために使用します)", - "pageRedactionNumbers": { - "title": "ページ", - "placeholder": "(例:1,2,8、4,7,12-16、2n-1)" - }, - "redactionColor": { - "title": "編集色" - }, - "export": "出力", - "upload": "アップロード", - "boxRedaction": "ボックス描画の墨消し", - "zoom": "ズーム", - "zoomIn": "拡大", - "zoomOut": "縮小", - "nextPage": "次のページ", - "previousPage": "前のページ", - "toggleSidebar": "サイドバーを切替え", - "showThumbnails": "サムネイルを表示", - "showDocumentOutline": "ドキュメントのアウトラインを表示 (ダブルクリックするとすべての項目を展開/折りたたむことができます)", - "showAttatchments": "添付ファイルを表示", - "showLayers": "レイヤーを表示(ダブルクリックするとすべてのレイヤーがデフォルトの状態にリセットされます)", - "colourPicker": "カラー選択", - "findCurrentOutlineItem": "現在のアウトライン項目を検索", - "applyChanges": "変更を適用" - }, - "tableExtraxt": { - "tags": "CSV,Table Extraction,extract,convert" - }, - "autoSizeSplitPDF": { - "tags": "pdf,split,document,organization" - }, - "overlay-pdfs": { - "tags": "Overlay", - "header": "PDFのオーバーレイ", - "baseFile": { - "label": "ベースのPDFを選択" - }, - "overlayFiles": { - "label": "重ねるPDFを選択" - }, - "mode": { - "label": "オーバーレイモードの選択", - "sequential": "シーケンシャル・オーバーレイ", - "interleaved": "インターリーブ・オーバーレイ", - "fixedRepeat": "固定リピート・オーバーレイ" - }, - "counts": { - "label": "オーバーレイ回数 (固定リピートモード用)", - "placeholder": "カンマ区切りでカウントを入力 (例:2,3,1)" - }, - "position": { - "label": "重ね位置の選択", - "foreground": "前面", - "background": "背面" - }, - "submit": "重ねる" - }, - "split-by-sections": { - "tags": "Section Split, Divide, Customize,Customise", - "title": "セクションごとにPDFを分割する", - "header": "PDFをセクションに分割", - "horizontal": { - "label": "水平方向", - "placeholder": "水平方向の分割数を選択" - }, - "vertical": { - "label": "垂直方向", - "placeholder": "垂直方向の分割数を選択" - }, - "submit": "分割", - "merge": "1 つの PDF に結合するかどうか" - }, - "AddStampRequest": { - "tags": "Stamp, Add image, center image, Watermark, PDF, Embed, Customize,Customise", - "header": "PDFにスタンプを押す", - "title": "PDFにスタンプを押す", - "stampType": "スタンプの種類", - "stampText": "スタンプする文章", - "stampImage": "スタンプする画像", - "alphabet": "文字", - "fontSize": "フォント/画像 サイズ", - "rotation": "回転", - "opacity": "不透明度", - "position": "位置", - "overrideX": "X座標のオーバーライド", - "overrideY": "Y座標のオーバーライド", - "customMargin": "余白のカスタム", - "customColor": "文字色のカスタム", - "submit": "送信" - }, - "removeImagePdf": { - "tags": "Remove Image,Page operations,Back end,server side" - }, - "splitPdfByChapters": { - "tags": "split,chapters,bookmarks,organize" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "PDF署名の検証", - "header": "デジタル署名の検証", - "selectPDF": "署名済みPDFファイルを選択", - "submit": "署名の検証", - "results": "検証結果", - "status": { - "_value": "状態", - "valid": "有効", - "invalid": "無効" - }, - "signer": "署名者", - "date": "日付", - "reason": "理由", - "location": "場所", - "noSignatures": "この文書にはデジタル署名が見つかりません", - "chain": { - "invalid": "証明書チェーンの検証に失敗しました - 署名者の身元を確認できません" - }, - "trust": { - "invalid": "証明書が信頼ストアにありません - ソースを検証できません" - }, - "cert": { - "expired": "証明書の有効期限が切れています", - "revoked": "証明書は取り消されました", - "info": "証明書の詳細", - "issuer": "発行者", - "subject": "主題", - "serialNumber": "シリアルナンバー", - "validFrom": "有効開始日", - "validUntil": "有効期限", - "algorithm": "アルゴリズム", - "keySize": "キーサイズ", - "version": "バージョン", - "keyUsage": "キーの使用法", - "selfSigned": "自己署名", - "bits": "ビット" - }, - "signature": { - "info": "署名情報", - "_value": "署名", - "mathValid": "署名は数学的には有効ですが:" - }, - "selectCustomCert": "カスタム証明書ファイル X.509 (オプション)" - }, - "replace-color": { - "title": "色の置換・反転", - "header": "PDFの色の置換・反転", - "selectText": { - "1": "色の置換または反転オプション", - "2": "デフォルト(デフォルトの高コントラスト色)", - "3": "カスタム(カスタマイズされた色)", - "4": "フル反転(すべての色を反転)", - "5": "高コントラストカラーオプション", - "6": "黒背景に白文字", - "7": "白背景に黒文字", - "8": "黒背景に黄色文字", - "9": "黒背景に緑文字", - "10": "テキストの色を選択", - "11": "背景色を選択" - }, - "submit": "置換" - }, - "replaceColorPdf": { - "tags": "色の置き換え、ページ操作、バックエンド、サーバー側" - }, - "login": { - "title": "サインイン", - "header": "サインイン", - "signin": "サインイン", - "rememberme": "サインイン状態を記憶する", - "invalid": "ユーザー名かパスワードが無効です。", - "locked": "あなたのアカウントはロックされています。", - "signinTitle": "サインインしてください", - "ssoSignIn": "シングルサインオンでログイン", - "oAuth2AutoCreateDisabled": "OAuth 2自動作成ユーザーが無効", - "oAuth2AdminBlockedUser": "現在、未登録ユーザーの登録またはログインはブロックされています。管理者にお問い合わせください。", - "oauth2RequestNotFound": "認証リクエストが見つかりません", - "oauth2InvalidUserInfoResponse": "無効なユーザー情報の応答", - "oauth2invalidRequest": "無効なリクエスト", - "oauth2AccessDenied": "アクセス拒否", - "oauth2InvalidTokenResponse": "無効なトークン応答", - "oauth2InvalidIdToken": "無効なIDトークン", - "relyingPartyRegistrationNotFound": "リライングパーティーの登録が見つかりません", - "userIsDisabled": "ユーザーは非アクティブ化されており、現在このユーザー名でのログインはブロックされています。管理者に連絡してください。", - "alreadyLoggedIn": "すでにログインしています", - "alreadyLoggedIn2": "デバイスからログアウトしてもう一度お試しください。", - "toManySessions": "アクティブなセッションが多すぎます", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDFを単一ページに変換", - "header": "PDFを単一ページに変換", - "submit": "単一ページに変換" - }, - "pageExtracter": { - "title": "ページの抽出", - "header": "ページの抽出", - "submit": "抽出", - "placeholder": "(例:1,2,8、4,7,12-16、2n-1)" - }, - "sanitizePDF": { - "title": "PDFをサニタイズ", - "header": "PDFファイルをサニタイズ", - "selectText": { - "1": "JavaScriptアクションを削除", - "2": "埋め込みファイルを削除", - "3": "XMPメタデータを削除", - "4": "リンクを削除", - "5": "フォントを削除", - "6": "ドキュメント情報のメタデータを削除" - }, - "submit": "PDFをサニタイズする" - }, - "adjustContrast": { - "title": "コントラストの調整", - "header": "コントラストの調整", - "contrast": "コントラスト:", - "brightness": "明度:", - "saturation": "彩度:", - "download": "ダウンロード" - }, - "compress": { - "title": "圧縮", - "header": "PDFを圧縮", - "credit": "本サービスはPDFの圧縮/最適化にqpdfを使用しています。", - "grayscale": { - "label": "圧縮にグレースケールを適用する" - }, - "selectText": { - "1": { - "_value": "圧縮設定", - "1": "1-3 PDF圧縮、
4-6 弱い画像圧縮、
7-9 強い画像圧縮により画質が大幅に低下します" - }, - "2": "品質レベル:", - "4": "自動モード - PDFを正確なサイズにするために品質を自動調整する。", - "5": "PDFサイズ (例:25MB, 10.8MB, 25KB)" - }, - "submit": "圧縮" - }, - "decrypt": { - "passwordPrompt": "このファイルはパスワードで保護されています。パスワードを入力してください:", - "cancelled": "PDFの操作がキャンセルされました: {0}", - "noPassword": "暗号化されたPDFにパスワードが指定されていません: {0}", - "invalidPassword": "正しいパスワードでもう一度お試しください。", - "invalidPasswordHeader": "PDFのパスワードが正しくないか、暗号化がサポートされていません: {0}", - "unexpectedError": "ファイルの処理中にエラーが発生しました。もう一度お試しください。", - "serverError": "復号化中にサーバーエラーが発生しました: {0}", - "success": "ファイルの暗号化が正常に完了しました。" - }, - "multiTool-advert": { - "message": "この機能は、マルチツールでもご利用いただけます。強化されたページごとのUIと追加機能についてはこちらをご覧ください。" - }, - "pageRemover": { - "title": "ページ削除", - "header": "PDFページ削除", - "pagesToDelete": "削除するページ (ページ番号のカンマ区切りリストを入力してください):", - "submit": "ページ削除", - "placeholder": "(例:1,2,6または1-10,15-30)" - }, - "imageToPDF": { - "title": "画像をPDFに変換", - "header": "画像をPDFに変換", - "submit": "変換", - "selectLabel": "画像フィットオプション", - "fillPage": "フルページ", - "fitDocumentToImage": "ページを画像に合わせる", - "maintainAspectRatio": "アスペクト比を維持する", - "selectText": { - "2": "PDFの自動回転", - "3": "マルチファイルの処理 (複数の画像を操作する場合に有効になります)", - "4": "1つのPDFに結合", - "5": "個別のPDFに変換" - } - }, - "PDFToCSV": { - "title": "PDFをCSVに変換", - "header": "PDFをCSVに変換", - "prompt": "表を抽出するページを選択", - "submit": "変換" - }, - "split-by-size-or-count": { - "title": "サイズまたは数で分割", - "header": "サイズまたは数で分割", - "type": { - "label": "分割タイプの選択", - "size": "サイズ", - "pageCount": "ページ数", - "docCount": "ドキュメント数" - }, - "value": { - "label": "値の入力", - "placeholder": "サイズ (例:2MB または 3KB) または数値 (例:5) を入力" - }, - "submit": "分割" - }, - "printFile": { - "title": "ファイルの印刷", - "header": "ファイルをプリンタで印刷", - "selectText": { - "1": "印刷するファイルを選択", - "2": "プリンタ名を入力" - }, - "submit": "プリント" - }, - "licenses": { - "nav": "ライセンス", - "title": "サードパーティライセンス", - "header": "サードパーティライセンス", - "module": "モジュール", - "version": "バージョン", - "license": "ライセンス" - }, - "survey": { - "nav": "アンケート", - "title": "Stirling-PDFのアンケート", - "description": "Stirling-PDFには追跡機能がないため、Stirling-PDFをより良くするために皆様の意見を聞かせてください!", - "changes": "Stirling-PDFは前回の調査から変更されました。詳細についてはこちらのブログ投稿をご覧ください。", - "changes2": "これらの変更により私たちは有償のビジネスサポートと資金援助を受けています", - "please": "アンケートにご協力ください!", - "disabled": "(アンケートのポップアップは、次の更新では無効になりますが、ページの下部に表示されます。)", - "button": "アンケートに答える", - "dontShowAgain": "再び表示しない", - "meeting": { - "1": "職場でStirling PDFをご利用の場合はぜひご連絡ください。15分間のユーザー ディスカバリーセッションと引き換えにテクニカルサポートセッションをご提供しています。", - "2": "これはチャンスです:", - "3": "展開、統合、またはトラブルシューティングに関するヘルプを取得します", - "4": "パフォーマンス、エッジケース、機能のギャップに関する直接的なフィードバックを提供する", - "5": "Stirling PDFを企業で実際に使用できるように改良にご協力ください", - "6": "興味がありましたら、弊社のチームに直接ご予約ください。(英語のみ)", - "7": "皆さんのユースケースを掘り下げてStirling PDFをさらに改善することを楽しみにしています。", - "notInterested": "ビジネスではない、または会議に興味がありませんか?", - "button": "ブックミーティング" - } - }, - "removeImage": { - "title": "画像の削除", - "header": "画像の削除", - "removeImage": "画像の削除", - "submit": "画像を削除" - }, - "splitByChapters": { - "title": "PDFをチャプターごとに分割", - "header": "PDFをチャプターごとに分割", - "bookmarkLevel": "ブックマークレベル", - "includeMetadata": "メタデータを含める", - "allowDuplicates": "重複を許可する", - "desc": { - "1": "このツールは、チャプター構造に基づいてPDFファイルを複数のPDFに分割します。", - "2": "ブックマークレベル:分割に使用するブックマークのレベルを選択します(最上位レベルの場合は0、第2レベルの場合は1など)。", - "3": "メタデータを含める:チェックすると、元のPDFのメタデータが各分割PDFに含まれます。", - "4": "重複を許可:チェックすると同じページ上の複数のブックマークから個別のPDFを作成できます。" - }, - "submit": "PDFを分割" - }, - "fileChooser": { - "click": "クリック", - "or": "または", - "dragAndDrop": "ドラッグ&ドロップ", - "dragAndDropPDF": "PDFファイルをドラッグ&ドロップ", - "dragAndDropImage": "画像ファイルをドラッグ&ドロップ", - "hoveredDragAndDrop": "ファイルをここにドラッグ&ドロップ", - "extractPDF": "抽出中..." - }, - "releases": { - "footer": "リリース", - "title": "リリースノート", - "header": "リリースノート", - "current": { - "version": "現在のリリース" - }, - "note": "リリースノートは英語でのみで提供されています" - }, - "cookieBanner": { - "popUp": { - "title": "クッキーの使用方法", - "description": { - "1": "私たちはStirling PDFをより快適にご利用いただけるようCookieやその他のテクノロジーを使用しています。これによりツールの改善やお気に入りの機能の構築を継続できます。", - "2": "希望しない場合は「いいえ」をクリックすると、スムーズに動作するために必要なCookieのみが有効になります。" - }, - "acceptAllBtn": "Ok", - "acceptNecessaryBtn": "いいえ", - "showPreferencesBtn": "設定の管理" - }, - "preferencesModal": { - "title": "同意管理センター", - "acceptAllBtn": "すべて受け入れる", - "acceptNecessaryBtn": "すべて拒否する", - "savePreferencesBtn": "環境設定の保存", - "closeIconLabel": "モーダルを閉じる", - "serviceCounterLabel": "サービス", - "subtitle": "Cookieの使用", - "description": { - "1": "Stirling PDFはお客様の体験の向上、ツールの利用状況を把握するためにCookieなどのテクノロジーを使用しています。これによりパフォーマンスの向上、お客様が求める機能の開発、そしてユーザーへの継続的なサポートの提供が可能になります。", - "2": "Stirling PDFはユーザーが使用するドキュメントの内容を追跡したりアクセスしたりすることはできません。", - "3": "お客様のプライバシーと信頼は当社の活動の中核です。" - }, - "necessary": { - "title": { - "1": "厳密に必要なCookie", - "2": "常に有効" - }, - "description": "これらのCookieはウェブサイトが正常に機能するために不可欠です。プライバシー設定、ログイン、フォームへの入力といったコア機能を有効にするため、無効にすることはできません。" - }, - "analytics": { - "title": "分析", - "description": "これらのCookieはツールがどのように使用されているかを把握するのに役立ちます。これによりコミュニティが最も重視する機能の開発に集中することができます。ご安心ください。Stirling PDFはお客様が操作するドキュメントの内容を追跡することは決してありません。" - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/ko-KR/translation.json b/frontend/dist/locales/ko-KR/translation.json deleted file mode 100644 index 0552d717f..000000000 --- a/frontend/dist/locales/ko-KR/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "글꼴 크기", - "fontName": "글꼴 이름", - "title": "페이지 번호 추가", - "header": "페이지 번호 추가", - "selectText": { - "1": "PDF 파일 선택:", - "2": "여백 크기", - "3": "위치", - "4": "시작 번호", - "5": "번호를 매길 페이지", - "6": "사용자 지정 텍스트" - }, - "customTextDesc": "사용자 지정 텍스트", - "numberPagesDesc": "번호를 매길 페이지, 기본값 'all', 1-5 또는 2,5,9 등도 가능", - "customNumberDesc": "기본값은 {n}, '페이지 {n} / {total}', '텍스트-{n}', '{filename}-{n}' 등도 가능", - "submit": "페이지 번호 추가" - }, - "pdfPrompt": "PDF 선택", - "multiPdfPrompt": "PDF 선택 (2개 이상)", - "multiPdfDropPrompt": "필요한 모든 PDF를 선택(또는 끌어다 놓기)하세요", - "imgPrompt": "이미지 선택", - "genericSubmit": "제출", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "경고: 이 과정은 파일 크기에 따라 최대 1분이 소요될 수 있습니다", - "pageOrderPrompt": "사용자 지정 페이지 순서 (쉼표로 구분된 페이지 번호 목록 또는 2n+1과 같은 함수 입력):", - "pageSelectionPrompt": "사용자 지정 페이지 선택 (페이지 번호 1,5,6 또는 2n+1과 같은 함수를 쉼표로 구분하여 목록 입력):", - "goToPage": "이동", - "true": "참", - "false": "거짓", - "unknown": "알 수 없음", - "save": "저장", - "saveToBrowser": "브라우저에 저장", - "close": "닫기", - "filesSelected": "개의 파일이 선택됨", - "noFavourites": "즐겨찾기가 추가되지 않았습니다", - "downloadComplete": "다운로드 완료", - "bored": "기다리는 것이 지루하신가요?", - "alphabet": "알파벳", - "downloadPdf": "PDF 다운로드", - "text": "텍스트", - "font": "글꼴", - "selectFillter": "-- 선택 --", - "pageNum": "페이지 번호", - "sizes": { - "small": "작게", - "medium": "중간", - "large": "크게", - "x-large": "매우 크게" - }, - "error": { - "pdfPassword": "PDF 문서가 비밀번호로 보호되어 있으며, 비밀번호가 제공되지 않았거나 올바르지 않습니다", - "_value": "오류", - "sorry": "문제가 발생해 죄송합니다!", - "needHelp": "도움이 필요하신가요 / 문제를 발견하셨나요?", - "contactTip": "여전히 문제가 있다면 주저하지 마시고 도움을 요청하세요. GitHub 페이지에서 티켓을 제출하거나 Discord를 통해 연락하실 수 있습니다:", - "404": { - "head": "404 - 페이지를 찾을 수 없습니다 | 이런, 코드에서 길을 잃었네요!", - "1": "찾으시는 페이지를 찾을 수 없습니다.", - "2": "문제가 발생했습니다" - }, - "github": "GitHub에서 티켓 제출", - "showStack": "스택 추적 표시", - "copyStack": "스택 추적 복사", - "githubSubmit": "GitHub - 티켓 제출", - "discordSubmit": "Discord - 지원 게시물 작성" - }, - "delete": "삭제", - "username": "사용자 이름", - "password": "비밀번호", - "welcome": "환영합니다", - "property": "속성", - "black": "검정", - "white": "흰색", - "red": "빨강", - "green": "초록", - "blue": "파랑", - "custom": "사용자 지정...", - "WorkInProgess": "작업 진행 중, 작동하지 않거나 버그가 있을 수 있습니다. 문제가 있으면 신고해 주세요!", - "poweredBy": "제공", - "yes": "예", - "no": "아니오", - "changedCredsMessage": "자격 증명이 변경되었습니다!", - "notAuthenticatedMessage": "사용자가 인증되지 않았습니다.", - "userNotFoundMessage": "사용자를 찾을 수 없습니다.", - "incorrectPasswordMessage": "현재 비밀번호가 올바르지 않습니다.", - "usernameExistsMessage": "새 사용자 이름이 이미 존재합니다.", - "invalidUsernameMessage": "잘못된 사용자 이름입니다. 사용자 이름은 문자, 숫자 및 @._+- 특수문자만 포함하거나 유효한 이메일 주소여야 합니다.", - "invalidPasswordMessage": "비밀번호는 비어 있으면 안 되며 시작과 끝에 공백이 있으면 안 됩니다.", - "confirmPasswordErrorMessage": "새 비밀번호와 새 비밀번호 확인이 일치해야 합니다.", - "deleteCurrentUserMessage": "현재 로그인된 사용자를 삭제할 수 없습니다.", - "deleteUsernameExistsMessage": "존재하지 않는 사용자 이름은 삭제할 수 없습니다.", - "downgradeCurrentUserMessage": "현재 사용자의 역할을 강등할 수 없습니다", - "disabledCurrentUserMessage": "현재 사용자를 비활성화할 수 없습니다", - "downgradeCurrentUserLongMessage": "현재 사용자의 역할을 강등할 수 없습니다. 따라서 현재 사용자는 표시되지 않습니다.", - "userAlreadyExistsOAuthMessage": "해당 사용자는 이미 OAuth2 사용자로 존재합니다.", - "userAlreadyExistsWebMessage": "해당 사용자는 이미 웹 사용자로 존재합니다.", - "oops": "이런!", - "help": "도움말", - "goHomepage": "홈페이지로 이동", - "joinDiscord": "Discord 서버 가입하기", - "seeDockerHub": "Docker Hub 보기", - "visitGithub": "Github 저장소 방문", - "donate": "기부하기", - "color": "색상", - "sponsor": "후원", - "info": "정보", - "pro": "프로", - "page": "페이지", - "pages": "페이지", - "loading": "로딩 중...", - "addToDoc": "문서에 추가", - "reset": "초기화", - "apply": "적용", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "개인정보 처리방침", - "terms": "이용약관", - "accessibility": "접근성", - "cookie": "쿠키 정책", - "impressum": "법적 고지", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "파이프라인 메뉴 (베타)", - "uploadButton": "사용자 지정 업로드", - "configureButton": "구성", - "defaultOption": "사용자 지정", - "submitButton": "제출", - "help": "파이프라인 도움말", - "scanHelp": "폴더 스캔 도움말", - "deletePrompt": "파이프라인을 삭제하시겠습니까?", - "tags": "자동화,순서,스크립트,일괄-처리", - "title": "파이프라인" - }, - "pipelineOptions": { - "header": "파이프라인 구성", - "pipelineNameLabel": "파이프라인 이름", - "saveSettings": "작업 설정 저장", - "pipelineNamePrompt": "여기에 파이프라인 이름 입력", - "selectOperation": "작업 선택", - "addOperationButton": "작업 추가", - "pipelineHeader": "파이프라인:", - "saveButton": "다운로드", - "validateButton": "검증" - }, - "enterpriseEdition": { - "button": "프로 버전으로 업그레이드", - "warning": "이 기능은 프로 사용자만 이용할 수 있습니다.", - "yamlAdvert": "Stirling PDF 프로는 YAML 구성 파일과 기타 SSO 기능을 지원합니다.", - "ssoAdvert": "더 많은 사용자 관리 기능을 찾고 계신가요? Stirling PDF Pro를 확인해보세요" - }, - "analytics": { - "title": "Stirling PDF를 더 좋게 만들고 싶으신가요?", - "paragraph1": "Stirling PDF는 제품 개선을 위한 선택적 분석 기능이 있습니다. 개인정보나 파일 내용은 추적하지 않습니다.", - "paragraph2": "Stirling-PDF의 성장을 돕고 사용자를 더 잘 이해할 수 있도록 분석 기능 활성화를 고려해주세요.", - "enable": "분석 활성화", - "disable": "분석 비활성화", - "settings": "config/settings.yml 파일에서 분석 설정을 변경할 수 있습니다" - }, - "navbar": { - "favorite": "즐겨찾기", - "recent": "New and recently updated", - "darkmode": "다크 모드", - "language": "언어", - "settings": "설정", - "allTools": "도구", - "multiTool": "멀티 도구", - "search": "검색", - "sections": { - "organize": "구성", - "convertTo": "PDF로 변환", - "convertFrom": "PDF에서 변환", - "security": "서명 & 보안", - "advance": "고급", - "edit": "보기 & 편집", - "popular": "인기" - } - }, - "settings": { - "title": "설정", - "update": "업데이트 가능", - "updateAvailable": "{0}은(는) 현재 설치된 버전입니다. 새 버전({1})이 사용 가능합니다.", - "appVersion": "앱 버전:", - "downloadOption": { - "title": "다운로드 옵션 선택 (단일 파일 비압축 다운로드용):", - "1": "같은 창에서 열기", - "2": "새 창에서 열기", - "3": "파일 다운로드" - }, - "zipThreshold": "다운로드 파일 수가 다음을 초과할 때 ZIP으로 압축", - "signOut": "로그아웃", - "accountSettings": "계정 설정", - "bored": { - "help": "이스터에그 게임 활성화" - }, - "cacheInputs": { - "name": "입력 양식 저장", - "help": "다음 실행을 위해 이전에 사용한 입력을 저장하도록 활성화" - } - }, - "changeCreds": { - "title": "자격 증명 변경", - "header": "계정 정보 업데이트", - "changePassword": "기본 로그인 자격 증명을 사용 중입니다. 새 비밀번호를 입력하세요", - "newUsername": "새 사용자 이름", - "oldPassword": "현재 비밀번호", - "newPassword": "새 비밀번호", - "confirmNewPassword": "새 비밀번호 확인", - "submit": "변경 사항 제출" - }, - "account": { - "title": "계정 설정", - "accountSettings": "계정 설정", - "adminSettings": "관리자 설정 - 사용자 보기 및 추가", - "userControlSettings": "사용자 제어 설정", - "changeUsername": "사용자 이름 변경", - "newUsername": "새 사용자 이름", - "password": "확인 비밀번호", - "oldPassword": "이전 비밀번호", - "newPassword": "새 비밀번호", - "changePassword": "비밀번호 변경", - "confirmNewPassword": "새 비밀번호 확인", - "signOut": "로그아웃", - "yourApiKey": "API 키", - "syncTitle": "브라우저 설정을 계정과 동기화", - "settingsCompare": "설정 비교:", - "property": "속성", - "webBrowserSettings": "웹 브라우저 설정", - "syncToBrowser": "동기화 계정 -> 브라우저", - "syncToAccount": "동기화 계정 <- 브라우저" - }, - "adminUserSettings": { - "title": "사용자 제어 설정", - "header": "관리자 사용자 제어 설정", - "admin": "관리자", - "user": "사용자", - "addUser": "새 사용자 추가", - "deleteUser": "사용자 삭제", - "confirmDeleteUser": "사용자를 삭제하시겠습니까?", - "confirmChangeUserStatus": "사용자를 비활성화/활성화하시겠습니까?", - "usernameInfo": "사용자 이름은 문자, 숫자 및 @._+- 특수문자만 포함하거나 유효한 이메일 주소여야 합니다.", - "roles": "역할", - "role": "역할", - "actions": "작업", - "apiUser": "제한된 API 사용자", - "extraApiUser": "추가 제한된 API 사용자", - "webOnlyUser": "웹 전용 사용자", - "demoUser": "데모 사용자 (사용자 지정 설정 없음)", - "internalApiUser": "내부 API 사용자", - "forceChange": "로그인 시 사용자 비밀번호 변경 강제", - "submit": "사용자 저장", - "changeUserRole": "사용자 역할 변경", - "authenticated": "인증됨", - "editOwnProfil": "자신의 프로필 편집", - "enabledUser": "활성화된 사용자", - "disabledUser": "비활성화된 사용자", - "activeUsers": "활성 사용자:", - "disabledUsers": "비활성화된 사용자:", - "totalUsers": "전체 사용자:", - "lastRequest": "마지막 요청", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "데이터베이스 가져오기/내보내기", - "header": "데이터베이스 가져오기/내보내기", - "fileName": "파일 이름", - "creationDate": "생성 날짜", - "fileSize": "파일 크기", - "deleteBackupFile": "백업 파일 삭제", - "importBackupFile": "백업 파일 가져오기", - "createBackupFile": "백업 파일 생성", - "downloadBackupFile": "백업 파일 다운로드", - "info_1": "데이터를 가져올 때는 올바른 구조가 중요합니다. 무엇을 하고 있는지 확실하지 않다면 전문가의 조언과 지원을 받으세요. 구조에 오류가 있으면 애플리케이션 오작동이나 완전한 실행 불능까지 발생할 수 있습니다.", - "info_2": "업로드할 때 파일 이름은 중요하지 않습니다. 일관된 이름 지정 규칙을 위해 backup_user_yyyyMMddHHmm.sql 형식으로 이름이 변경됩니다.", - "submit": "백업 가져오기", - "importIntoDatabaseSuccessed": "데이터베이스로 가져오기 성공", - "backupCreated": "데이터베이스 백업 성공", - "fileNotFound": "파일을 찾을 수 없음", - "fileNullOrEmpty": "파일은 null이거나 비어 있으면 안 됩니다", - "failedImportFile": "파일 가져오기 실패", - "notSupported": "이 기능은 현재 데이터베이스 연결에서 사용할 수 없습니다." - }, - "session": { - "expired": "세션이 만료되었습니다. 페이지를 새로 고침하고 다시 시도하세요.", - "refreshPage": "페이지 새로 고침" - }, - "home": { - "desc": "PDF 관련 모든 작업을 위한 로컬 호스팅 원스톱 솔루션입니다.", - "searchBar": "기능 검색...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "보기, 주석 달기, 텍스트 또는 이미지 추가" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "PDF 멀티 도구", - "desc": "병합, 회전, 재배치, 분할 및 페이지 제거" - }, - "merge": { - "title": "병합", - "desc": "여러 PDF를 하나로 쉽게 병합합니다." - }, - "split": { - "title": "분할", - "desc": "PDF를 여러 문서로 분할" - }, - "rotate": { - "title": "회전", - "desc": "PDF를 쉽게 회전합니다." - }, - "imageToPdf": { - "title": "이미지를 PDF로", - "desc": "이미지(PNG, JPEG, GIF)를 PDF로 변환합니다." - }, - "pdfToImage": { - "title": "PDF를 이미지로", - "desc": "PDF를 이미지로 변환합니다. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "정리", - "desc": "원하는 순서로 페이지 제거/재배치" - }, - "addImage": { - "title": "이미지 추가", - "desc": "PDF의 지정된 위치에 이미지 추가" - }, - "watermark": { - "title": "워터마크 추가", - "desc": "PDF 문서에 사용자 지정 워터마크를 추가합니다." - }, - "permissions": { - "title": "권한 변경", - "desc": "PDF 문서의 권한을 변경합니다" - }, - "removePages": { - "title": "제거", - "desc": "PDF 문서에서 원하지 않는 페이지를 삭제합니다." - }, - "addPassword": { - "title": "비밀번호 추가", - "desc": "PDF 문서를 비밀번호로 암호화합니다." - }, - "removePassword": { - "title": "비밀번호 제거", - "desc": "PDF 문서에서 비밀번호 보호를 제거합니다." - }, - "compressPdfs": { - "title": "압축", - "desc": "PDF를 압축하여 파일 크기를 줄입니다." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "메타데이터 변경", - "desc": "PDF 문서에서 메타데이터 변경/제거/추가" - }, - "fileToPDF": { - "title": "파일을 PDF로 변환", - "desc": "거의 모든 파일을 PDF로 변환합니다(DOCX, PNG, XLS, PPT, TXT 등)" - }, - "ocr": { - "title": "OCR / 스캔 정리", - "desc": "스캔을 정리하고 PDF 내 이미지에서 텍스트를 감지하여 다시 텍스트로 추가합니다." - }, - "extractImages": { - "title": "이미지 추출", - "desc": "PDF에서 모든 이미지를 추출하여 zip으로 저장" - }, - "pdfToPDFA": { - "title": "PDF를 PDF/A로", - "desc": "장기 보관을 위해 PDF를 PDF/A로 변환" - }, - "PDFToWord": { - "title": "PDF를 Word로", - "desc": "PDF를 Word 형식으로 변환 (DOC, DOCX 및 ODT)" - }, - "PDFToPresentation": { - "title": "PDF를 프레젠테이션으로", - "desc": "PDF를 프레젠테이션 형식으로 변환 (PPT, PPTX 및 ODP)" - }, - "PDFToText": { - "title": "PDF를 RTF(텍스트)로", - "desc": "PDF를 텍스트 또는 RTF 형식으로 변환" - }, - "PDFToHTML": { - "title": "PDF를 HTML로", - "desc": "PDF를 HTML 형식으로 변환" - }, - "PDFToXML": { - "title": "PDF를 XML로", - "desc": "PDF를 XML 형식으로 변환" - }, - "ScannerImageSplit": { - "title": "스캔한 사진 감지/분할", - "desc": "사진/PDF 내의 여러 사진을 분할합니다" - }, - "sign": { - "title": "서명", - "desc": "그리기, 텍스트 또는 이미지로 PDF에 서명 추가" - }, - "flatten": { - "title": "평면화", - "desc": "PDF에서 모든 대화형 요소와 양식 제거" - }, - "repair": { - "title": "복구", - "desc": "손상/깨진 PDF를 복구 시도" - }, - "removeBlanks": { - "title": "빈 페이지 제거", - "desc": "문서에서 빈 페이지를 감지하고 제거합니다" - }, - "removeAnnotations": { - "title": "주석 제거", - "desc": "PDF에서 모든 주석/메모를 제거합니다" - }, - "compare": { - "title": "비교", - "desc": "2개의 PDF 문서를 비교하고 차이점을 보여줍니다" - }, - "certSign": { - "title": "인증서로 서명", - "desc": "인증서/키(PEM/P12)로 PDF에 서명" - }, - "removeCertSign": { - "title": "인증서 서명 제거", - "desc": "PDF에서 인증서 서명 제거" - }, - "pageLayout": { - "title": "다중 페이지 레이아웃", - "desc": "PDF 문서의 여러 페이지를 하나의 페이지로 병합" - }, - "scalePages": { - "title": "페이지 크기/배율 조정", - "desc": "페이지 및 내용의 크기/배율을 변경합니다." - }, - "pipeline": { - "title": "파이프라인", - "desc": "파이프라인 스크립트를 정의하여 PDF에서 여러 작업 실행" - }, - "add-page-numbers": { - "title": "페이지 번호 추가", - "desc": "문서 전체에 지정된 위치에 페이지 번호 추가" - }, - "auto-rename": { - "title": "PDF 파일 자동 이름 변경", - "desc": "감지된 헤더를 기반으로 PDF 파일 이름 자동 변경" - }, - "adjust-contrast": { - "title": "색상/대비 조정", - "desc": "PDF의 대비, 채도 및 밝기 조정" - }, - "crop": { - "title": "PDF 자르기", - "desc": "PDF를 잘라서 크기 줄이기(텍스트 유지!)" - }, - "autoSplitPDF": { - "title": "자동 페이지 분할", - "desc": "물리적 스캔 페이지 분할기 QR 코드가 있는 스캔된 PDF 자동 분할" - }, - "sanitizePdf": { - "title": "정리", - "desc": "PDF 파일에서 스크립트 및 기타 요소 제거" - }, - "URLToPDF": { - "title": "URL/웹사이트를 PDF로", - "desc": "http(s) URL을 PDF로 변환" - }, - "HTMLToPDF": { - "title": "HTML을 PDF로", - "desc": "HTML 파일이나 zip을 PDF로 변환" - }, - "MarkdownToPDF": { - "title": "Markdown을 PDF로", - "desc": "Markdown 파일을 PDF로 변환" - }, - "PDFToMarkdown": { - "title": "PDF를 Markdown으로", - "desc": "PDF를 Markdown으로 변환" - }, - "getPdfInfo": { - "title": "PDF 모든 정보 가져오기", - "desc": "PDF에서 가능한 모든 정보 가져오기" - }, - "extractPage": { - "title": "페이지 추출", - "desc": "PDF에서 선택한 페이지 추출" - }, - "PdfToSinglePage": { - "title": "단일 큰 페이지", - "desc": "모든 PDF 페이지를 하나의 큰 단일 페이지로 병합" - }, - "showJS": { - "title": "JavaScript 보기", - "desc": "PDF에 삽입된 JavaScript 검색 및 표시" - }, - "autoRedact": { - "title": "자동 검열", - "desc": "입력 텍스트를 기반으로 PDF의 텍스트 자동 검열(가림)" - }, - "redact": { - "title": "수동 검열", - "desc": "선택한 텍스트, 그린 도형 및/또는 선택한 페이지를 기반으로 PDF 검열" - }, - "tableExtraxt": { - "title": "PDF를 CSV로", - "desc": "PDF에서 표를 추출하여 CSV로 변환" - }, - "autoSizeSplitPDF": { - "title": "크기/개수별 자동 분할", - "desc": "단일 PDF를 크기, 페이지 수 또는 문서 수를 기준으로 여러 문서로 분할" - }, - "overlay-pdfs": { - "title": "PDF 오버레이", - "desc": "PDF를 다른 PDF 위에 오버레이" - }, - "split-by-sections": { - "title": "섹션별 PDF 분할", - "desc": "PDF의 각 페이지를 더 작은 가로 및 세로 섹션으로 분할" - }, - "AddStampRequest": { - "title": "PDF에 스탬프 추가", - "desc": "지정된 위치에 텍스트 또는 이미지 스탬프 추가" - }, - "removeImagePdf": { - "title": "이미지 제거", - "desc": "파일 크기를 줄이기 위해 PDF에서 이미지 제거" - }, - "splitPdfByChapters": { - "title": "챕터별 PDF 분할", - "desc": "PDF를 챕터 구조에 따라 여러 파일로 분할합니다." - }, - "validateSignature": { - "title": "PDF 서명 검증", - "desc": "PDF 문서의 디지털 서명과 인증서 검증" - }, - "replaceColorPdf": { - "title": "색상 교체 및 반전", - "desc": "PDF에서 텍스트와 배경의 색상을 교체하고 파일 크기를 줄이기 위해 전체 PDF 색상을 반전" - } - }, - "viewPdf": { - "tags": "보기,읽기,주석,텍스트,이미지", - "title": "View/Edit PDF", - "header": "PDF 보기" - }, - "multiTool": { - "tags": "멀티 도구,다중 작업,UI,클릭 드래그,프론트엔드,클라이언트 사이드,대화형,상호작용,이동,삭제,마이그레이션,분할", - "title": "PDF 멀티 도구", - "header": "PDF 멀티 도구", - "uploadPrompts": "파일 이름", - "selectAll": "모두 선택", - "deselectAll": "모두 선택 해제", - "selectPages": "페이지 선택", - "selectedPages": "선택된 페이지", - "page": "페이지", - "deleteSelected": "선택 항목 삭제", - "downloadAll": "내보내기", - "downloadSelected": "선택 항목 내보내기", - "insertPageBreak": "페이지 나누기 삽입", - "addFile": "파일 추가", - "rotateLeft": "왼쪽으로 회전", - "rotateRight": "오른쪽으로 회전", - "split": "분할", - "moveLeft": "왼쪽으로 이동", - "moveRight": "오른쪽으로 이동", - "delete": "삭제", - "dragDropMessage": "페이지 선택됨", - "undo": "실행 취소", - "redo": "다시 실행" - }, - "merge": { - "tags": "병합,페이지 작업,백엔드,서버 사이드", - "title": "병합", - "header": "여러 PDF 병합 (2개 이상)", - "sortByName": "이름으로 정렬", - "sortByDate": "날짜로 정렬", - "removeCertSign": "병합된 파일에서 디지털 서명을 제거하시겠습니까?", - "submit": "병합" - }, - "split": { - "tags": "페이지 작업,나누기,멀티 페이지,자르기,서버 사이드", - "title": "PDF 분할", - "header": "PDF 분할", - "desc": { - "1": "선택한 숫자는 분할하려는 페이지 번호입니다", - "2": "예를 들어 1,3,7-9를 선택하면 10페이지 문서가 다음과 같이 6개의 별도 PDF로 분할됩니다:", - "3": "문서 #1: 1페이지", - "4": "문서 #2: 2-3페이지", - "5": "문서 #3: 4-7페이지", - "6": "문서 #4: 8페이지", - "7": "문서 #5: 9페이지", - "8": "문서 #6: 10페이지" - }, - "splitPages": "분할할 페이지 입력:", - "submit": "분할" - }, - "rotate": { - "tags": "서버 사이드", - "title": "PDF 회전", - "header": "PDF 회전", - "selectAngle": "회전 각도 선택 (90도 단위):", - "submit": "회전" - }, - "imageToPdf": { - "tags": "변환,이미지,jpg,사진" - }, - "pdfToImage": { - "tags": "변환,이미지,jpg,사진", - "title": "PDF를 이미지로", - "header": "PDF를 이미지로", - "selectText": "이미지 형식", - "singleOrMultiple": "이미지 결과 유형", - "single": "단일 큰 이미지", - "multi": "여러 이미지", - "colorType": "색상 유형", - "color": "컬러", - "grey": "그레이스케일", - "blackwhite": "흑백 (데이터 손실 가능성 있음!)", - "submit": "변환", - "info": "WebP 변환에는 Python이 필요합니다. Python이 설치되지 않았습니다.", - "placeholder": "(예: 1,2,8 또는 4,7,12-16 또는 2n-1)" - }, - "pdfOrganiser": { - "tags": "양면,짝수,홀수,정렬,이동", - "title": "페이지 정리", - "header": "PDF 페이지 정리", - "submit": "페이지 재배치", - "mode": { - "_value": "모드", - "1": "사용자 지정 페이지 순서", - "2": "역순", - "3": "양면 정렬", - "4": "소책자 정렬", - "5": "측면 스티치 소책자 정렬", - "6": "홀수-짝수 분할", - "7": "첫 페이지 제거", - "8": "마지막 페이지 제거", - "9": "첫 페이지와 마지막 페이지 제거", - "10": "홀수-짝수 병합", - "11": "Duplicate all pages" - }, - "placeholder": "(예: 1,3,2 또는 4-8,2,10-12 또는 2n-1)" - }, - "addImage": { - "tags": "이미지,jpg,사진", - "title": "이미지 추가", - "header": "PDF에 이미지 추가", - "everyPage": "모든 페이지?", - "upload": "이미지 추가", - "submit": "이미지 추가" - }, - "watermark": { - "tags": "텍스트,반복,레이블,소유,저작권,상표,이미지,jpg,사진", - "title": "워터마크 추가", - "header": "워터마크 추가", - "customColor": "사용자 지정 텍스트 색상", - "selectText": { - "1": "워터마크를 추가할 PDF 선택:", - "2": "워터마크 텍스트:", - "3": "글꼴 크기:", - "4": "회전 (0-360):", - "5": "가로 간격 (각 워터마크 사이의 가로 간격):", - "6": "세로 간격 (각 워터마크 사이의 세로 간격):", - "7": "불투명도 (0% - 100%):", - "8": "워터마크 유형:", - "9": "워터마크 이미지:", - "10": "PDF를 PDF-이미지로 변환" - }, - "submit": "워터마크 추가", - "type": { - "1": "텍스트", - "2": "이미지" - } - }, - "permissions": { - "tags": "읽기,쓰기,편집,인쇄", - "title": "권한 변경", - "header": "권한 변경", - "warning": "이러한 권한을 변경할 수 없게 하려면 비밀번호 추가 페이지에서 비밀번호와 함께 설정하는 것이 좋습니다", - "selectText": { - "1": "권한을 변경할 PDF 선택", - "2": "설정할 권한", - "3": "문서 조립 방지", - "4": "콘텐츠 추출 방지", - "5": "접근성을 위한 추출 방지", - "6": "양식 작성 방지", - "7": "수정 방지", - "8": "주석 수정 방지", - "9": "인쇄 방지", - "10": "다른 형식으로 인쇄 방지" - }, - "submit": "변경" - }, - "removePages": { - "tags": "페이지 제거,페이지 삭제" - }, - "addPassword": { - "tags": "보안,보안", - "title": "비밀번호 추가", - "header": "비밀번호 추가 (암호화)", - "selectText": { - "1": "암호화할 PDF 선택", - "2": "사용자 비밀번호", - "3": "암호화 키 길이", - "4": "높은 값이 더 강력하지만 낮은 값이 더 나은 호환성을 제공합니다.", - "5": "설정할 권한 (소유자 비밀번호와 함께 사용 권장)", - "6": "문서 조립 방지", - "7": "콘텐츠 추출 방지", - "8": "접근성을 위한 추출 방지", - "9": "양식 작성 방지", - "10": "수정 방지", - "11": "주석 수정 방지", - "12": "인쇄 방지", - "13": "다른 형식으로 인쇄 방지", - "14": "소유자 비밀번호", - "15": "문서가 열린 후 수행할 수 있는 작업 제한 (모든 리더에서 지원되지 않음)", - "16": "문서 자체 열기 제한" - }, - "submit": "암호화" - }, - "removePassword": { - "tags": "보안,암호 해제,보안,비밀번호 해제,비밀번호 삭제", - "title": "비밀번호 제거", - "header": "비밀번호 제거 (복호화)", - "selectText": { - "1": "복호화할 PDF 선택", - "2": "비밀번호" - }, - "submit": "제거" - }, - "compressPdfs": { - "tags": "압축,작게,매우 작게" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "제목,저자,날짜,생성,시간,출판사,제작자,통계", - "title": "제목:", - "header": "메타데이터 변경", - "selectText": { - "1": "변경하려는 변수를 편집하세요", - "2": "모든 메타데이터 삭제", - "3": "사용자 지정 메타데이터 표시:", - "4": "기타 메타데이터:", - "5": "사용자 지정 메타데이터 항목 추가" - }, - "author": "저자:", - "creationDate": "생성 날짜 (yyyy/MM/dd HH:mm:ss):", - "creator": "작성자:", - "keywords": "키워드:", - "modDate": "수정 날짜 (yyyy/MM/dd HH:mm:ss):", - "producer": "제작자:", - "subject": "제목:", - "trapped": "트랩:", - "submit": "변경" - }, - "fileToPDF": { - "tags": "변환,형식,문서,사진,슬라이드,텍스트,변환,오피스,문서,워드,엑셀,파워포인트", - "title": "파일을 PDF로", - "header": "모든 파일을 PDF로 변환", - "credit": "이 서비스는 파일 변환을 위해 LibreOffice와 Unoconv를 사용합니다.", - "supportedFileTypesInfo": "지원되는 파일 형식", - "supportedFileTypes": "지원되는 파일 형식은 아래와 같지만 전체 업데이트된 지원 형식 목록은 LibreOffice 문서를 참조하세요", - "submit": "PDF로 변환" - }, - "ocr": { - "tags": "인식,텍스트,이미지,스캔,읽기,식별,감지,편집 가능", - "title": "OCR / 스캔 정리", - "header": "스캔 정리 / OCR (광학 문자 인식)", - "selectText": { - "1": "PDF에서 감지할 언어 선택 (현재 감지된 언어가 나열됨):", - "2": "OCR된 PDF와 함께 OCR 텍스트가 포함된 텍스트 파일 생성", - "3": "기울어진 각도로 스캔된 페이지를 올바른 위치로 회전", - "4": "OCR이 배경 노이즈에서 텍스트를 찾을 가능성을 줄이도록 페이지 정리 (출력 변경 없음)", - "5": "OCR이 배경 노이즈에서 텍스트를 찾을 가능성을 줄이도록 페이지 정리, 출력에서 정리 유지", - "6": "대화형 텍스트가 있는 페이지는 무시하고 이미지 페이지만 OCR", - "7": "강제 OCR, 모든 원본 텍스트 요소를 제거하고 모든 페이지를 OCR", - "8": "일반 (PDF에 텍스트가 있으면 오류 발생)", - "9": "추가 설정", - "10": "OCR 모드", - "11": "OCR 후 이미지 제거 (모든 이미지 제거, 변환 단계의 일부인 경우에만 유용)", - "12": "렌더링 유형 (고급)" - }, - "help": "다른 언어 사용 방법 및/또는 Docker에서 사용하지 않는 방법에 대한 문서를 읽어보세요", - "credit": "이 서비스는 OCR을 위해 qpdf와 Tesseract를 사용합니다.", - "submit": "OCR로 PDF 처리" - }, - "extractImages": { - "tags": "사진,저장,아카이브,zip,캡처,가져오기", - "title": "이미지 추출", - "header": "이미지 추출", - "selectText": "추출된 이미지를 변환할 이미지 형식 선택", - "allowDuplicates": "중복 이미지 저장", - "submit": "추출" - }, - "pdfToPDFA": { - "tags": "아카이브,장기,표준,변환,저장,보존", - "title": "PDF를 PDF/A로", - "header": "PDF를 PDF/A로", - "credit": "이 서비스는 PDF/A 변환을 위해 libreoffice를 사용합니다", - "submit": "변환", - "tip": "현재 여러 입력을 한 번에 처리할 수 없습니다", - "outputFormat": "출력 형식", - "pdfWithDigitalSignature": "PDF에 디지털 서명이 포함되어 있습니다. 다음 단계에서 제거됩니다." - }, - "PDFToWord": { - "tags": "doc,docx,odt,워드,변환,형식,변환,오피스,마이크로소프트,docfile", - "title": "PDF를 Word로", - "header": "PDF를 Word로", - "selectText": { - "1": "출력 파일 형식" - }, - "credit": "이 서비스는 파일 변환을 위해 LibreOffice를 사용합니다.", - "submit": "변환" - }, - "PDFToPresentation": { - "tags": "슬라이드,쇼,오피스,마이크로소프트", - "title": "PDF를 프레젠테이션으로", - "header": "PDF를 프레젠테이션으로", - "selectText": { - "1": "출력 파일 형식" - }, - "credit": "이 서비스는 파일 변환을 위해 LibreOffice를 사용합니다.", - "submit": "변환" - }, - "PDFToText": { - "tags": "서식있는형식,서식있는텍스트형식,서식있는 텍스트 형식", - "title": "PDF를 RTF(텍스트)로", - "header": "PDF를 RTF(텍스트)로", - "selectText": { - "1": "출력 파일 형식" - }, - "credit": "이 서비스는 파일 변환을 위해 LibreOffice를 사용합니다.", - "submit": "변환" - }, - "PDFToHTML": { - "tags": "웹 콘텐츠,브라우저 친화적", - "title": "PDF를 HTML로", - "header": "PDF를 HTML로", - "credit": "이 서비스는 파일 변환을 위해 pdftohtml을 사용합니다.", - "submit": "변환" - }, - "PDFToXML": { - "tags": "데이터-추출,구조화-콘텐츠,상호운용성,변환,변환", - "title": "PDF를 XML로", - "header": "PDF를 XML로", - "credit": "이 서비스는 파일 변환을 위해 LibreOffice를 사용합니다.", - "submit": "변환" - }, - "ScannerImageSplit": { - "tags": "분리,자동-감지,스캔,다중-사진,정리", - "selectText": { - "1": "각도 임계값:", - "2": "이미지 회전에 필요한 최소 절대 각도를 설정합니다(기본값: 10).", - "3": "허용 오차:", - "4": "예상 배경색 주변의 색상 변화 범위를 결정합니다(기본값: 30).", - "5": "최소 영역:", - "6": "사진의 최소 영역 임계값을 설정합니다(기본값: 10000).", - "7": "최소 윤곽 영역:", - "8": "사진의 최소 윤곽선 영역 임계값을 설정합니다", - "9": "테두리 크기:", - "10": "출력에서 흰색 테두리를 방지하기 위해 추가 및 제거되는 테두리의 크기를 설정합니다(기본값: 1)." - }, - "info": "Python이 설치되어 있지 않습니다. 실행하는 데 필요합니다." - }, - "sign": { - "tags": "승인,이니셜,그린-서명,텍스트-서명,이미지-서명", - "title": "서명", - "header": "PDF 서명", - "upload": "이미지 업로드", - "draw": "서명 그리기", - "text": "텍스트 입력", - "clear": "지우기", - "add": "추가", - "saved": "저장된 서명", - "save": "서명 저장", - "personalSigs": "개인 서명", - "sharedSigs": "공유 서명", - "noSavedSigs": "저장된 서명이 없습니다", - "addToAll": "모든 페이지에 추가", - "delete": "삭제", - "first": "첫 페이지", - "last": "마지막 페이지", - "next": "다음 페이지", - "previous": "이전 페이지", - "maintainRatio": "종횡비 유지 토글", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "정적,비활성화,비대화형,간소화", - "title": "평면화", - "header": "PDF 평면화", - "flattenOnlyForms": "양식만 평면화", - "submit": "평면화" - }, - "repair": { - "tags": "수정,복원,교정,복구", - "title": "복구", - "header": "PDF 복구", - "submit": "복구" - }, - "removeBlanks": { - "tags": "정리,간소화,비콘텐츠,정리", - "title": "빈 페이지 제거", - "header": "빈 페이지 제거", - "threshold": "픽셀 흰색도 임계값:", - "thresholdDesc": "흰색 픽셀이 얼마나 흰색이어야 '흰색'으로 분류될지 결정하는 임계값. 0 = 검정, 255 순수 흰색.", - "whitePercent": "흰색 비율 (%):", - "whitePercentDesc": "제거되기 위해 필요한 '흰색' 픽셀의 페이지 비율", - "submit": "빈 페이지 제거" - }, - "removeAnnotations": { - "tags": "댓글,하이라이트,노트,마크업,제거", - "title": "주석 제거", - "header": "주석 제거", - "submit": "제거" - }, - "compare": { - "tags": "차이,대조,변경,분석", - "title": "비교", - "header": "PDF 비교", - "highlightColor": { - "1": "하이라이트 색상 1:", - "2": "하이라이트 색상 2:" - }, - "document": { - "1": "문서 1", - "2": "문서 2" - }, - "submit": "비교", - "complex": { - "message": "제공된 문서 중 하나 이상이 큰 파일이므로 비교의 정확도가 떨어질 수 있습니다" - }, - "large": { - "file": { - "message": "제공된 문서 중 하나 이상이 처리하기에 너무 큽니다" - } - }, - "no": { - "text": { - "message": "선택한 PDF 중 하나 이상에 텍스트 내용이 없습니다. 비교를 위해 텍스트가 있는 PDF를 선택하세요." - } - } - }, - "certSign": { - "tags": "인증,PEM,P12,공식,암호화", - "title": "인증서 서명", - "header": "인증서로 PDF 서명 (개발 중)", - "selectPDF": "서명할 PDF 파일 선택:", - "jksNote": "참고: 인증서 유형이 아래에 나열되지 않은 경우 keytool 명령줄 도구를 사용하여 Java 키스토어(.jks) 파일로 변환한 다음 아래의 .jks 파일 옵션을 선택하세요.", - "selectKey": "개인 키 파일 선택 (PKCS#8 형식, .pem 또는 .der):", - "selectCert": "인증서 파일 선택 (X.509 형식, .pem 또는 .der):", - "selectP12": "PKCS#12 키스토어 파일 선택 (.p12 또는 .pfx) (선택 사항, 제공하는 경우 개인 키와 인증서 포함):", - "selectJKS": "Java 키스토어 파일 선택 (.jks 또는 .keystore):", - "certType": "인증서 유형", - "password": "키스토어 또는 개인 키 비밀번호 입력 (있는 경우):", - "showSig": "서명 표시", - "reason": "사유", - "location": "위치", - "name": "이름", - "showLogo": "로고 표시", - "submit": "PDF 서명" - }, - "removeCertSign": { - "tags": "인증,PEM,P12,공식,복호화", - "title": "인증서 서명 제거", - "header": "PDF에서 디지털 서명 제거", - "selectPDF": "PDF 파일 선택:", - "submit": "서명 제거" - }, - "pageLayout": { - "tags": "병합,합성,단일-보기,정리", - "title": "다중 페이지 레이아웃", - "header": "다중 페이지 레이아웃", - "pagesPerSheet": "시트당 페이지 수:", - "addBorder": "테두리 추가", - "submit": "제출" - }, - "scalePages": { - "tags": "크기조정,수정,치수,조정", - "title": "페이지 크기 조정", - "header": "페이지 크기 조정", - "pageSize": "문서 페이지의 크기입니다.", - "keepPageSize": "원본 크기", - "scaleFactor": "페이지의 확대/축소 레벨(잘라내기).", - "submit": "제출" - }, - "add-page-numbers": { - "tags": "페이지매김,레이블,정리,색인" - }, - "auto-rename": { - "tags": "자동-감지,헤더-기반,정리,재레이블링", - "title": "자동 이름 변경", - "header": "PDF 자동 이름 변경", - "submit": "자동 이름 변경" - }, - "adjust-contrast": { - "tags": "색상-보정,조정,수정,향상" - }, - "crop": { - "tags": "트림,축소,편집,모양", - "title": "자르기", - "header": "PDF 자르기", - "submit": "제출" - }, - "autoSplitPDF": { - "tags": "QR-기반,분리,스캔-세그먼트,정리", - "title": "자동 PDF 분할", - "header": "자동 PDF 분할", - "description": "인쇄하고, 삽입하고, 스캔하고, 업로드하면 나머지는 자동으로 처리됩니다. 수동 정렬 작업이 필요 없습니다.", - "selectText": { - "1": "아래에서 구분자 시트를 인쇄하세요 (흑백도 괜찮습니다).", - "2": "문서 사이에 구분자 시트를 넣고 한 번에 모든 문서를 스캔하세요.", - "3": "스캔한 단일 PDF 파일을 업로드하고 나머지는 Stirling PDF가 처리합니다.", - "4": "구분자 페이지는 자동으로 감지되고 제거되어 깔끔한 최종 문서를 보장합니다." - }, - "formPrompt": "Stirling-PDF 페이지 구분자가 포함된 PDF 제출:", - "duplexMode": "양면 모드 (앞뒷면 스캔)", - "dividerDownload2": "'자동 분할 구분자 (설명 포함)' PDF 다운로드", - "submit": "제출" - }, - "sanitizePdf": { - "tags": "청소,보안,안전,위협-제거" - }, - "URLToPDF": { - "tags": "웹-캡처,페이지-저장,웹-문서,아카이브", - "title": "URL을 PDF로", - "header": "URL을 PDF로", - "submit": "변환", - "credit": "WeasyPrint 사용" - }, - "HTMLToPDF": { - "tags": "마크업,웹-콘텐츠,변환,변환", - "title": "HTML을 PDF로", - "header": "HTML을 PDF로", - "help": "HTML 파일과 html/css/이미지 등이 포함된 ZIP을 허용합니다", - "submit": "변환", - "credit": "WeasyPrint 사용", - "zoom": "웹사이트 표시를 위한 확대/축소 레벨입니다.", - "pageWidth": "페이지 너비 - 센티미터 단위 (기본값은 비워두기)", - "pageHeight": "페이지 높이 - 센티미터 단위 (기본값은 비워두기)", - "marginTop": "페이지 상단 여백 - 밀리미터 단위 (기본값은 비워두기)", - "marginBottom": "페이지 하단 여백 - 밀리미터 단위 (기본값은 비워두기)", - "marginLeft": "페이지 왼쪽 여백 - 밀리미터 단위 (기본값은 비워두기)", - "marginRight": "페이지 오른쪽 여백 - 밀리미터 단위 (기본값은 비워두기)", - "printBackground": "웹사이트의 배경을 렌더링합니다.", - "defaultHeader": "기본 헤더 활성화 (이름 및 페이지 번호)", - "cssMediaType": "페이지의 CSS 미디어 유형을 변경합니다.", - "none": "없음", - "print": "인쇄", - "screen": "화면" - }, - "MarkdownToPDF": { - "tags": "마크업,웹-콘텐츠,변환,변환,md", - "title": "Markdown을 PDF로", - "header": "Markdown을 PDF로", - "submit": "변환", - "help": "작업 진행 중", - "credit": "WeasyPrint 사용" - }, - "PDFToMarkdown": { - "tags": "마크업,웹-콘텐츠,변환,변환,md", - "title": "PDF를 Markdown으로", - "header": "PDF를 Markdown으로", - "submit": "변환" - }, - "getPdfInfo": { - "tags": "정보,데이터,통계,통계", - "title": "PDF 정보 가져오기", - "header": "PDF 정보 가져오기", - "submit": "정보 가져오기", - "downloadJson": "JSON 다운로드" - }, - "extractPage": { - "tags": "추출" - }, - "PdfToSinglePage": { - "tags": "단일 페이지" - }, - "showJS": { - "tags": "JS", - "title": "JavaScript 보기", - "header": "JavaScript 보기", - "downloadJS": "JavaScript 다운로드", - "submit": "보기" - }, - "autoRedact": { - "tags": "검열,숨김,검게-가림,검은색,마커,숨김", - "title": "자동 검열", - "header": "자동 검열", - "colorLabel": "색상", - "textsToRedactLabel": "검열할 텍스트 (줄 단위로 구분)", - "textsToRedactPlaceholder": "예: \\n기밀 \\n최고 기밀", - "useRegexLabel": "정규식 사용", - "wholeWordSearchLabel": "전체 단어 검색", - "customPaddingLabel": "사용자 지정 여백", - "convertPDFToImageLabel": "PDF를 PDF-Image로 변환 (박스 뒤의 텍스트 제거에 사용)", - "submitButton": "제출" - }, - "redact": { - "tags": "검열,숨김,검게-가림,검은색,마커,숨김,수동", - "title": "수동 검열", - "header": "수동 검열", - "submit": "검열", - "textBasedRedaction": "텍스트 기반 검열", - "pageBasedRedaction": "페이지 기반 검열", - "convertPDFToImageLabel": "PDF를 PDF-이미지로 변환 (박스 뒤의 텍스트 제거에 사용)", - "pageRedactionNumbers": { - "title": "페이지", - "placeholder": "(예: 1,2,8 또는 4,7,12-16 또는 2n-1)" - }, - "redactionColor": { - "title": "검열 색상" - }, - "export": "내보내기", - "upload": "업로드", - "boxRedaction": "박스 그리기 검열", - "zoom": "확대/축소", - "zoomIn": "확대", - "zoomOut": "축소", - "nextPage": "다음 페이지", - "previousPage": "이전 페이지", - "toggleSidebar": "사이드바 토글", - "showThumbnails": "썸네일 보기", - "showDocumentOutline": "문서 개요 보기 (더블클릭하여 모든 항목 확장/축소)", - "showAttatchments": "첨부 파일 보기", - "showLayers": "레이어 보기 (더블클릭하여 모든 레이어를 기본 상태로 재설정)", - "colourPicker": "색상 선택기", - "findCurrentOutlineItem": "현재 개요 항목 찾기", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,테이블-추출,추출,변환" - }, - "autoSizeSplitPDF": { - "tags": "pdf,분할,문서,정리" - }, - "overlay-pdfs": { - "tags": "오버레이", - "header": "PDF 파일 오버레이", - "baseFile": { - "label": "기본 PDF 파일 선택" - }, - "overlayFiles": { - "label": "오버레이 PDF 파일 선택" - }, - "mode": { - "label": "오버레이 모드 선택", - "sequential": "순차 오버레이", - "interleaved": "인터리브 오버레이", - "fixedRepeat": "고정 반복 오버레이" - }, - "counts": { - "label": "오버레이 횟수 (고정 반복 모드용)", - "placeholder": "쉼표로 구분된 횟수 입력 (예: 2,3,1)" - }, - "position": { - "label": "오버레이 위치 선택", - "foreground": "전경", - "background": "배경" - }, - "submit": "제출" - }, - "split-by-sections": { - "tags": "섹션 분할,나누기,사용자 지정", - "title": "섹션별 PDF 분할", - "header": "PDF를 섹션으로 분할", - "horizontal": { - "label": "수평 분할", - "placeholder": "수평 분할 수 입력" - }, - "vertical": { - "label": "수직 분할", - "placeholder": "수직 분할 수 입력" - }, - "submit": "PDF 분할", - "merge": "하나의 PDF로 병합" - }, - "AddStampRequest": { - "tags": "스탬프,이미지 추가,중앙 이미지,워터마크,PDF,삽입,사용자 지정", - "header": "PDF 스탬프", - "title": "PDF 스탬프", - "stampType": "스탬프 유형", - "stampText": "스탬프 텍스트", - "stampImage": "스탬프 이미지", - "alphabet": "알파벳", - "fontSize": "글꼴/이미지 크기", - "rotation": "회전", - "opacity": "불투명도", - "position": "위치", - "overrideX": "X 좌표 재정의", - "overrideY": "Y 좌표 재정의", - "customMargin": "사용자 지정 여백", - "customColor": "사용자 지정 텍스트 색상", - "submit": "제출" - }, - "removeImagePdf": { - "tags": "이미지 제거,페이지 작업,백엔드,서버 사이드" - }, - "splitPdfByChapters": { - "tags": "분할,챕터,북마크,정리" - }, - "validateSignature": { - "tags": "서명,확인,검증,pdf,인증서,디지털 서명,서명 검증,인증서 검증", - "title": "PDF 서명 검증", - "header": "디지털 서명 검증", - "selectPDF": "서명된 PDF 파일 선택", - "submit": "서명 검증", - "results": "검증 결과", - "status": { - "_value": "상태", - "valid": "유효함", - "invalid": "유효하지 않음" - }, - "signer": "서명자", - "date": "날짜", - "reason": "사유", - "location": "위치", - "noSignatures": "이 문서에서 디지털 서명을 찾을 수 없습니다", - "chain": { - "invalid": "인증서 체인 검증 실패 - 서명자의 신원을 확인할 수 없음" - }, - "trust": { - "invalid": "인증서가 신뢰 저장소에 없음 - 출처를 확인할 수 없음" - }, - "cert": { - "expired": "인증서가 만료됨", - "revoked": "인증서가 취소됨", - "info": "인증서 세부 정보", - "issuer": "발급자", - "subject": "주체", - "serialNumber": "일련번호", - "validFrom": "유효 기간 시작", - "validUntil": "유효 기간 종료", - "algorithm": "알고리즘", - "keySize": "키 크기", - "version": "버전", - "keyUsage": "키 용도", - "selfSigned": "자체 서명", - "bits": "비트" - }, - "signature": { - "info": "서명 정보", - "_value": "서명", - "mathValid": "서명이 수학적으로는 유효하지만:" - }, - "selectCustomCert": "사용자 지정 인증서 파일 X.509 (선택사항)" - }, - "replace-color": { - "title": "색상 교체-반전", - "header": "PDF 색상 교체-반전", - "selectText": { - "1": "색상 교체 또는 반전 옵션", - "2": "기본값(기본 고대비 색상)", - "3": "사용자 지정(사용자 지정 색상)", - "4": "전체 반전(모든 색상 반전)", - "5": "고대비 색상 옵션", - "6": "검정 배경에 흰색 텍스트", - "7": "흰색 배경에 검정 텍스트", - "8": "검정 배경에 노란색 텍스트", - "9": "검정 배경에 초록색 텍스트", - "10": "텍스트 색상 선택", - "11": "배경 색상 선택" - }, - "submit": "교체" - }, - "replaceColorPdf": { - "tags": "색상 교체,페이지 작업,백엔드,서버 사이드" - }, - "login": { - "title": "로그인", - "header": "로그인", - "signin": "로그인", - "rememberme": "로그인 유지", - "invalid": "사용자 이름 또는 비밀번호가 잘못되었습니다.", - "locked": "계정이 잠겼습니다.", - "signinTitle": "로그인해 주세요", - "ssoSignIn": "단일 로그인으로 로그인", - "oAuth2AutoCreateDisabled": "OAuth2 사용자 자동 생성이 비활성화되었습니다", - "oAuth2AdminBlockedUser": "현재 미등록 사용자의 등록 또는 로그인이 차단되어 있습니다. 관리자에게 문의하세요.", - "oauth2RequestNotFound": "인증 요청을 찾을 수 없습니다", - "oauth2InvalidUserInfoResponse": "잘못된 사용자 정보 응답", - "oauth2invalidRequest": "잘못된 요청", - "oauth2AccessDenied": "접근 거부됨", - "oauth2InvalidTokenResponse": "잘못된 토큰 응답", - "oauth2InvalidIdToken": "잘못된 ID 토큰", - "relyingPartyRegistrationNotFound": "신뢰 당사자 등록을 찾을 수 없습니다", - "userIsDisabled": "사용자가 비활성화되어 있어 현재 이 사용자 이름으로 로그인할 수 없습니다. 관리자에게 문의하세요.", - "alreadyLoggedIn": "이미 다음에 로그인되어 있습니다", - "alreadyLoggedIn2": "개의 기기. 해당 기기에서 로그아웃한 후 다시 시도하세요.", - "toManySessions": "활성 세션이 너무 많습니다", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "단일 페이지로 변환", - "header": "단일 페이지로 변환", - "submit": "단일 페이지로 변환" - }, - "pageExtracter": { - "title": "페이지 추출", - "header": "페이지 추출", - "submit": "추출", - "placeholder": "(예: 1,2,8 또는 4,7,12-16 또는 2n-1)" - }, - "sanitizePDF": { - "title": "PDF 정리", - "header": "PDF 파일 정리", - "selectText": { - "1": "JavaScript 작업 제거", - "2": "임베디드 파일 제거", - "3": "Remove XMP metadata", - "4": "링크 제거", - "5": "글꼴 제거", - "6": "Remove Document Info Metadata" - }, - "submit": "PDF 정리" - }, - "adjustContrast": { - "title": "대비 조정", - "header": "대비 조정", - "contrast": "대비:", - "brightness": "밝기:", - "saturation": "채도:", - "download": "다운로드" - }, - "compress": { - "title": "압축", - "header": "PDF 압축", - "credit": "이 서비스는 PDF 압축/최적화를 위해 qpdf를 사용합니다.", - "grayscale": { - "label": "압축을 위해 그레이스케일 적용" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "최적화 레벨:", - "4": "자동 모드 - PDF를 정확한 크기로 만들기 위해 품질 자동 조정", - "5": "예상 PDF 크기 (예: 25MB, 10.8MB, 25KB)" - }, - "submit": "압축" - }, - "decrypt": { - "passwordPrompt": "이 파일은 비밀번호로 보호되어 있습니다. 비밀번호를 입력하세요:", - "cancelled": "PDF 작업이 취소되었습니다: {0}", - "noPassword": "암호화된 PDF의 비밀번호가 제공되지 않았습니다: {0}", - "invalidPassword": "올바른 비밀번호로 다시 시도하세요.", - "invalidPasswordHeader": "잘못된 비밀번호 또는 지원되지 않는 암호화입니다. PDF: {0}", - "unexpectedError": "파일 처리 중 오류가 발생했습니다. 다시 시도하세요.", - "serverError": "복호화 중 서버 오류 발생: {0}", - "success": "파일이 성공적으로 복호화되었습니다." - }, - "multiTool-advert": { - "message": "이 기능은 멀티 도구 페이지에서도 사용할 수 있습니다. 향상된 페이지별 UI와 추가 기능을 확인해보세요!" - }, - "pageRemover": { - "title": "페이지 제거기", - "header": "PDF 페이지 제거기", - "pagesToDelete": "삭제할 페이지 (쉼표로 구분된 페이지 번호 목록 입력) :", - "submit": "페이지 삭제", - "placeholder": "(예: 1,2,6 또는 1-10,15-30)" - }, - "imageToPDF": { - "title": "이미지를 PDF로", - "header": "이미지를 PDF로", - "submit": "변환", - "selectLabel": "이미지 맞춤 옵션", - "fillPage": "페이지 채우기", - "fitDocumentToImage": "이미지에 맞게 페이지 조정", - "maintainAspectRatio": "종횡비 유지", - "selectText": { - "2": "PDF 자동 회전", - "3": "다중 파일 로직 (여러 이미지 작업 시에만 활성화)", - "4": "단일 PDF로 병합", - "5": "별도의 PDF로 변환" - } - }, - "PDFToCSV": { - "title": "PDF를 CSV로", - "header": "PDF를 CSV로", - "prompt": "표를 추출할 페이지 선택", - "submit": "추출" - }, - "split-by-size-or-count": { - "title": "크기 또는 개수로 PDF 분할", - "header": "크기 또는 개수로 PDF 분할", - "type": { - "label": "분할 유형 선택", - "size": "크기별", - "pageCount": "페이지 수별", - "docCount": "문서 수별" - }, - "value": { - "label": "값 입력", - "placeholder": "크기(예: 2MB 또는 3KB) 또는 개수(예: 5) 입력" - }, - "submit": "제출" - }, - "printFile": { - "title": "파일 인쇄", - "header": "프린터로 파일 인쇄", - "selectText": { - "1": "인쇄할 파일 선택", - "2": "프린터 이름 입력" - }, - "submit": "인쇄" - }, - "licenses": { - "nav": "라이선스", - "title": "제3자 라이선스", - "header": "제3자 라이선스", - "module": "모듈", - "version": "버전", - "license": "라이선스" - }, - "survey": { - "nav": "설문조사", - "title": "Stirling-PDF 설문조사", - "description": "Stirling-PDF는 추적 기능이 없어서 사용자의 의견을 듣고 Stirling-PDF를 개선하고자 합니다!", - "changes": "마지막 설문조사 이후 Stirling-PDF가 변경되었습니다! 자세한 내용은 여기에서 블로그 포스트를 확인하세요:", - "changes2": "이러한 변경으로 유료 비즈니스 지원과 자금을 받고 있습니다", - "please": "설문조사에 참여해 주세요!", - "disabled": "(설문조사 팝업은 다음 업데이트에서 비활성화되지만 페이지 하단에서 계속 사용할 수 있습니다)", - "button": "설문조사 참여", - "dontShowAgain": "다시 표시하지 않음", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "이미지 제거", - "header": "이미지 제거", - "removeImage": "이미지 제거", - "submit": "이미지 제거" - }, - "splitByChapters": { - "title": "챕터별 PDF 분할", - "header": "챕터별 PDF 분할", - "bookmarkLevel": "북마크 레벨", - "includeMetadata": "메타데이터 포함", - "allowDuplicates": "중복 허용", - "desc": { - "1": "이 도구는 PDF 파일을 챕터 구조를 기반으로 여러 PDF로 분할합니다.", - "2": "북마크 레벨: 분할에 사용할 북마크 레벨을 선택하세요 (0은 최상위 레벨, 1은 두 번째 레벨 등).", - "3": "메타데이터 포함: 체크하면 원본 PDF의 메타데이터가 각 분할된 PDF에 포함됩니다.", - "4": "중복 허용: 체크하면 동일한 페이지의 여러 북마크가 별도의 PDF를 생성할 수 있습니다." - }, - "submit": "PDF 분할" - }, - "fileChooser": { - "click": "클릭", - "or": "또는", - "dragAndDrop": "드래그 앤 드롭", - "dragAndDropPDF": "PDF 파일을 드래그 앤 드롭", - "dragAndDropImage": "이미지 파일을 드래그 앤 드롭", - "hoveredDragAndDrop": "여기에 파일을 드래그 앤 드롭하세요", - "extractPDF": "추출 중..." - }, - "releases": { - "footer": "릴리스", - "title": "릴리스 노트", - "header": "릴리스 노트", - "current": { - "version": "현재 릴리스" - }, - "note": "릴리스 노트는 영어로만 제공됩니다" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/ml-ML/translation.json b/frontend/dist/locales/ml-ML/translation.json deleted file mode 100644 index 79ca47b00..000000000 --- a/frontend/dist/locales/ml-ML/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "അക്ഷര വലുപ്പം", - "fontName": "അക്ഷരത്തിന്റെ പേര്", - "title": "പേജ് നമ്പറുകൾ ചേർക്കുക", - "header": "പേജ് നമ്പറുകൾ ചേർക്കുക", - "selectText": { - "1": "PDF ഫയൽ തിരഞ്ഞെടുക്കുക:", - "2": "മാർജിൻ വലുപ്പം", - "3": "സ്ഥാനം", - "4": "ആരംഭിക്കുന്ന നമ്പർ", - "5": "നമ്പർ ചെയ്യേണ്ട പേജുകൾ", - "6": "ഇഷ്ടാനുസൃത ടെക്സ്റ്റ്" - }, - "customTextDesc": "ഇഷ്ടാനുസൃത ടെക്സ്റ്റ്", - "numberPagesDesc": "ഏത് പേജുകളാണ് നമ്പർ ചെയ്യേണ്ടത്, സ്ഥിരസ്ഥിതി 'എല്ലാം', 1-5 അല്ലെങ്കിൽ 2,5,9 തുടങ്ങിയവയും സ്വീകരിക്കുന്നു", - "customNumberDesc": "സ്ഥിരസ്ഥിതിയായി {n}, 'പേജ് {n} / {total}', 'ടെക്സ്റ്റ്-{n}', '{filename}-{n}' എന്നിവയും സ്വീകരിക്കുന്നു", - "submit": "പേജ് നമ്പറുകൾ ചേർക്കുക" - }, - "pdfPrompt": "PDF(കൾ) തിരഞ്ഞെടുക്കുക", - "multiPdfPrompt": "PDF-കൾ തിരഞ്ഞെടുക്കുക (2+)", - "multiPdfDropPrompt": "നിങ്ങൾക്ക് ആവശ്യമുള്ള എല്ലാ PDF-കളും തിരഞ്ഞെടുക്കുക (അല്ലെങ്കിൽ വലിച്ചിടുക)", - "imgPrompt": "ചിത്രം(ങ്ങൾ) തിരഞ്ഞെടുക്കുക", - "genericSubmit": "സമർപ്പിക്കുക", - "uploadLimit": "പരമാവധി ഫയൽ വലുപ്പം:", - "uploadLimitExceededSingular": "വളരെ വലുതാണ്. അനുവദനീയമായ പരമാവധി വലുപ്പം", - "uploadLimitExceededPlural": "വളരെ വലുതാണ്. അനുവദനീയമായ പരമാവധി വലുപ്പം", - "processTimeWarning": "മുന്നറിയിപ്പ്: ഫയൽ വലുപ്പത്തിനനുസരിച്ച് ഈ പ്രക്രിയ ഒരു മിനിറ്റ് വരെ എടുത്തേക്കാം", - "pageOrderPrompt": "ഇഷ്ടാനുസൃത പേജ് ക്രമം (പേജ് നമ്പറുകളുടെ കോമയാൽ വേർതിരിച്ച ലിസ്റ്റ് അല്ലെങ്കിൽ 2n+1 പോലുള്ള ഫംഗ്ഷനുകൾ നൽകുക) :", - "pageSelectionPrompt": "ഇഷ്ടാനുസൃത പേജ് തിരഞ്ഞെടുക്കൽ (പേജ് നമ്പറുകളുടെ കോമയാൽ വേർതിരിച്ച ലിസ്റ്റ് 1,5,6 അല്ലെങ്കിൽ 2n+1 പോലുള്ള ഫംഗ്ഷനുകൾ നൽകുക) :", - "goToPage": "പോകുക", - "true": "ശരി", - "false": "തെറ്റ്", - "unknown": "അജ്ഞാതം", - "save": "സേവ് ചെയ്യുക", - "saveToBrowser": "ബ്രൗസറിൽ സേവ് ചെയ്യുക", - "close": "അടയ്ക്കുക", - "filesSelected": "ഫയലുകൾ തിരഞ്ഞെടുത്തു", - "noFavourites": "പ്രിയപ്പെട്ടവ ചേർത്തിട്ടില്ല", - "downloadComplete": "ഡൗൺലോഡ് പൂർത്തിയായി", - "bored": "കാത്തിരുന്ന് മുഷിഞ്ഞോ?", - "alphabet": "അക്ഷരമാല", - "downloadPdf": "PDF ഡൗൺലോഡ് ചെയ്യുക", - "text": "ടെക്സ്റ്റ്", - "font": "അക്ഷരം", - "selectFillter": "-- തിരഞ്ഞെടുക്കുക --", - "pageNum": "പേജ് നമ്പർ", - "sizes": { - "small": "ചെറുത്", - "medium": "ഇടത്തരം", - "large": "വലുത്", - "x-large": "കൂടുതൽ വലുത്" - }, - "error": { - "pdfPassword": "PDF ഡോക്യുമെന്റ് പാസ്‌വേഡ് ഉപയോഗിച്ച് സംരക്ഷിച്ചിരിക്കുന്നു, പാസ്‌വേഡ് നൽകിയിട്ടില്ല അല്ലെങ്കിൽ തെറ്റായിരുന്നു", - "_value": "പിശക്", - "sorry": "പ്രശ്നത്തിന് ക്ഷമിക്കുക!", - "needHelp": "സഹായം വേണോ / ഒരു പ്രശ്നം കണ്ടെത്തിയോ?", - "contactTip": "നിങ്ങൾക്ക് ഇപ്പോഴും പ്രശ്‌നമുണ്ടെങ്കിൽ, സഹായത്തിനായി ഞങ്ങളെ ബന്ധപ്പെടാൻ മടിക്കരുത്. ഞങ്ങളുടെ GitHub പേജിൽ നിങ്ങൾക്ക് ഒരു ടിക്കറ്റ് സമർപ്പിക്കാം അല്ലെങ്കിൽ Discord വഴി ഞങ്ങളെ ബന്ധപ്പെടാം:", - "404": { - "head": "404 - പേജ് കണ്ടെത്തിയില്ല | അയ്യോ, ഞങ്ങൾ കോഡിൽ തട്ടി വീണു!", - "1": "നിങ്ങൾ തിരയുന്ന പേജ് ഞങ്ങൾക്ക് കണ്ടെത്താൻ കഴിയുന്നില്ല.", - "2": "എന്തോ കുഴപ്പം സംഭവിച്ചു" - }, - "github": "GitHub-ൽ ഒരു ടിക്കറ്റ് സമർപ്പിക്കുക", - "showStack": "സ്റ്റാക്ക് ട്രേസ് കാണിക്കുക", - "copyStack": "സ്റ്റാക്ക് ട്രേസ് പകർത്തുക", - "githubSubmit": "GitHub - ഒരു ടിക്കറ്റ് സമർപ്പിക്കുക", - "discordSubmit": "Discord - പിന്തുണാ പോസ്റ്റ് സമർപ്പിക്കുക" - }, - "delete": "മായ്ക്കുക", - "username": "ഉപയോക്തൃനാമം", - "password": "പാസ്‌വേഡ്", - "welcome": "സ്വാഗതം", - "property": "പ്രോപ്പർട്ടി", - "black": "കറുപ്പ്", - "white": "വെള്ള", - "red": "ചുവപ്പ്", - "green": "പച്ച", - "blue": "നീല", - "custom": "ഇഷ്ടാനുസൃതം...", - "WorkInProgess": "നിർമ്മാണത്തിലിരിക്കുന്നു, ശരിയായി പ്രവർത്തിച്ചേക്കില്ല അല്ലെങ്കിൽ ബഗ്ഗുകൾ ഉണ്ടാകാം, ദയവായി പ്രശ്നങ്ങൾ അറിയിക്കുക!", - "poweredBy": "സഹായത്തോടെ", - "yes": "അതെ", - "no": "ഇല്ല", - "changedCredsMessage": "വിവരങ്ങൾ മാറ്റി!", - "notAuthenticatedMessage": "ഉപയോക്താവിനെ സ്ഥിരീകരിച്ചിട്ടില്ല.", - "userNotFoundMessage": "ഉപയോക്താവിനെ കണ്ടെത്തിയില്ല.", - "incorrectPasswordMessage": "നിലവിലെ പാസ്‌വേഡ് തെറ്റാണ്.", - "usernameExistsMessage": "പുതിയ ഉപയോക്തൃനാമം ഇതിനകം നിലവിലുണ്ട്.", - "invalidUsernameMessage": "അസാധുവായ ഉപയോക്തൃനാമം, ഉപയോക്തൃനാമത്തിൽ അക്ഷരങ്ങൾ, അക്കങ്ങൾ, താഴെ പറയുന്ന പ്രത്യേക പ്രതീകങ്ങൾ @._+- എന്നിവ മാത്രമേ ഉണ്ടാകാവൂ അല്ലെങ്കിൽ സാധുവായ ഒരു ഇമെയിൽ വിലാസം ആയിരിക്കണം.", - "invalidPasswordMessage": "പാസ്‌വേഡ് ശൂന്യമായിരിക്കരുത്, തുടക്കത്തിലോ അവസാനത്തിലോ സ്പേസുകൾ ഉണ്ടാകരുത്.", - "confirmPasswordErrorMessage": "പുതിയ പാസ്‌വേഡും പുതിയ പാസ്‌വേഡ് സ്ഥിരീകരണവും പൊരുത്തപ്പെടണം.", - "deleteCurrentUserMessage": "നിലവിൽ ലോഗിൻ ചെയ്തിട്ടുള്ള ഉപയോക്താവിനെ ഇല്ലാതാക്കാൻ കഴിയില്ല.", - "deleteUsernameExistsMessage": "ഉപയോക്തൃനാമം നിലവിലില്ല, ഇല്ലാതാക്കാൻ കഴിയില്ല.", - "downgradeCurrentUserMessage": "നിലവിലെ ഉപയോക്താവിന്റെ റോൾ താഴ്ത്താൻ കഴിയില്ല", - "disabledCurrentUserMessage": "നിലവിലെ ഉപയോക്താവിനെ പ്രവർത്തനരഹിതമാക്കാൻ കഴിയില്ല", - "downgradeCurrentUserLongMessage": "നിലവിലെ ഉപയോക്താവിന്റെ റോൾ താഴ്ത്താൻ കഴിയില്ല. അതിനാൽ, നിലവിലെ ഉപയോക്താവിനെ കാണിക്കില്ല.", - "userAlreadyExistsOAuthMessage": "ഈ ഉപയോക്താവ് ഇതിനകം ഒരു OAuth2 ഉപയോക്താവായി നിലവിലുണ്ട്.", - "userAlreadyExistsWebMessage": "ഈ ഉപയോക്താവ് ഇതിനകം ഒരു വെബ് ഉപയോക്താവായി നിലവിലുണ്ട്.", - "oops": "അയ്യോ!", - "help": "സഹായം", - "goHomepage": "ഹോംപേജിലേക്ക് പോകുക", - "joinDiscord": "ഞങ്ങളുടെ ഡിസ്കോർഡ് സെർവറിൽ ചേരുക", - "seeDockerHub": "ഡോക്കർ ഹബ് കാണുക", - "visitGithub": "ഗിറ്റ്ഹബ് റിപ്പോസിറ്ററി സന്ദർശിക്കുക", - "donate": "സംഭാവന ചെയ്യുക", - "color": "നിറം", - "sponsor": "സ്പോൺസർ ചെയ്യുക", - "info": "വിവരം", - "pro": "പ്രോ", - "page": "പേജ്", - "pages": "പേജുകൾ", - "loading": "ലോഡ് ചെയ്യുന്നു...", - "addToDoc": "പ്രമാണത്തിലേക്ക് ചേർക്കുക", - "reset": "പുനഃസജ്ജമാക്കുക", - "apply": "പ്രയോഗിക്കുക", - "noFileSelected": "ഫയലൊന്നും തിരഞ്ഞെടുത്തിട്ടില്ല. ദയവായി ഒരെണ്ണം അപ്‌ലോഡ് ചെയ്യുക.", - "legal": { - "privacy": "സ്വകാര്യതാ നയം", - "terms": "നിബന്ധനകളും വ്യവസ്ഥകളും", - "accessibility": "ലഭ്യത", - "cookie": "കുക്കി നയം", - "impressum": "ഇംപ്രെസ്സം", - "showCookieBanner": "കുക്കി മുൻഗണനകൾ" - }, - "pipeline": { - "header": "പൈപ്പ്ലൈൻ മെനു (ബീറ്റ)", - "uploadButton": "ഇഷ്ടാനുസൃതം അപ്‌ലോഡ് ചെയ്യുക", - "configureButton": "ക്രമീകരിക്കുക", - "defaultOption": "ഇഷ്ടാനുസൃതം", - "submitButton": "സമർപ്പിക്കുക", - "help": "പൈപ്പ്ലൈൻ സഹായം", - "scanHelp": "ഫോൾഡർ സ്കാനിംഗ് സഹായം", - "deletePrompt": "പൈപ്പ്ലൈൻ ഇല്ലാതാക്കാൻ നിങ്ങൾക്ക് ഉറപ്പാണോ", - "tags": "ഓട്ടോമേറ്റ് ചെയ്യുക,ക്രമീകരിക്കുക,സ്ക്രിപ്റ്റ് ചെയ്ത,ബാച്ച്-പ്രോസസ്സ്", - "title": "പൈപ്പ്ലൈൻ" - }, - "pipelineOptions": { - "header": "പൈപ്പ്ലൈൻ കോൺഫിഗറേഷൻ", - "pipelineNameLabel": "പൈപ്പ്ലൈൻ പേര്", - "saveSettings": "പ്രവർത്തന ക്രമീകരണങ്ങൾ സംരക്ഷിക്കുക", - "pipelineNamePrompt": "പൈപ്പ്ലൈൻ പേര് ഇവിടെ നൽകുക", - "selectOperation": "പ്രവർത്തനം തിരഞ്ഞെടുക്കുക", - "addOperationButton": "പ്രവർത്തനം ചേർക്കുക", - "pipelineHeader": "പൈപ്പ്ലൈൻ:", - "saveButton": "ഡൗൺലോഡ് ചെയ്യുക", - "validateButton": "സ്ഥിരീകരിക്കുക" - }, - "enterpriseEdition": { - "button": "പ്രോയിലേക്ക് അപ്‌ഗ്രേഡ് ചെയ്യുക", - "warning": "ഈ ഫീച്ചർ പ്രോ ഉപയോക്താക്കൾക്ക് മാത്രമേ ലഭ്യമാകൂ.", - "yamlAdvert": "സ്റ്റെർലിംഗ് PDF പ്രോ YAML കോൺഫിഗറേഷൻ ഫയലുകളെയും മറ്റ് SSO സവിശേഷതകളെയും പിന്തുണയ്ക്കുന്നു.", - "ssoAdvert": "കൂടുതൽ ഉപയോക്തൃ മാനേജുമെന്റ് സവിശേഷതകൾക്കായി തിരയുകയാണോ? സ്റ്റെർലിംഗ് PDF പ്രോ പരിശോധിക്കുക" - }, - "analytics": { - "title": "സ്റ്റെർലിംഗ് PDF മികച്ചതാക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?", - "paragraph1": "ഉൽപ്പന്നം മെച്ചപ്പെടുത്താൻ ഞങ്ങളെ സഹായിക്കുന്നതിന് സ്റ്റെർലിംഗ് PDF-ൽ ഓപ്റ്റ്-ഇൻ അനലിറ്റിക്സ് ഉണ്ട്. ഞങ്ങൾ വ്യക്തിഗത വിവരങ്ങളോ ഫയൽ ഉള്ളടക്കങ്ങളോ ട്രാക്ക് ചെയ്യുന്നില്ല.", - "paragraph2": "സ്റ്റെർലിംഗ്-PDF വളരാനും ഞങ്ങളുടെ ഉപയോക്താക്കളെ നന്നായി മനസ്സിലാക്കാനും അനലിറ്റിക്സ് പ്രവർത്തനക്ഷമമാക്കുന്നത് പരിഗണിക്കുക.", - "enable": "അനലിറ്റിക്സ് പ്രവർത്തനക്ഷമമാക്കുക", - "disable": "അനലിറ്റിക്സ് പ്രവർത്തനരഹിതമാക്കുക", - "settings": "config/settings.yml ഫയലിൽ നിങ്ങൾക്ക് അനലിറ്റിക്സിനായുള്ള ക്രമീകരണങ്ങൾ മാറ്റാൻ കഴിയും" - }, - "navbar": { - "favorite": "പ്രിയപ്പെട്ടവ", - "recent": "പുതിയതും അടുത്തിടെ അപ്‌ഡേറ്റ് ചെയ്തതും", - "darkmode": "ഡാർക്ക് മോഡ്", - "language": "ഭാഷകൾ", - "settings": "ക്രമീകരണങ്ങൾ", - "allTools": "ഉപകരണങ്ങൾ", - "multiTool": "മൾട്ടി ടൂൾ", - "search": "തിരയുക", - "sections": { - "organize": "ക്രമീകരിക്കുക", - "convertTo": "PDF-ലേക്ക് മാറ്റുക", - "convertFrom": "PDF-ൽ നിന്ന് മാറ്റുക", - "security": "ഒപ്പും സുരക്ഷയും", - "advance": "വിപുലമായത്", - "edit": "കാണുക & തിരുത്തുക", - "popular": "ജനപ്രിയം" - } - }, - "settings": { - "title": "ക്രമീകരണങ്ങൾ", - "update": "അപ്‌ഡേറ്റ് ലഭ്യമാണ്", - "updateAvailable": "{0} നിലവിൽ ഇൻസ്റ്റാൾ ചെയ്ത പതിപ്പാണ്. ഒരു പുതിയ പതിപ്പ് ({1}) ലഭ്യമാണ്.", - "appVersion": "ആപ്പ് പതിപ്പ്:", - "downloadOption": { - "title": "ഡൗൺലോഡ് ഓപ്ഷൻ തിരഞ്ഞെടുക്കുക (സിംഗിൾ ഫയൽ നോൺ-സിപ്പ് ഡൗൺലോഡുകൾക്ക്):", - "1": "ഒരേ വിൻഡോയിൽ തുറക്കുക", - "2": "പുതിയ വിൻഡോയിൽ തുറക്കുക", - "3": "ഫയൽ ഡൗൺലോഡ് ചെയ്യുക" - }, - "zipThreshold": "ഡൗൺലോഡ് ചെയ്ത ഫയലുകളുടെ എണ്ണം കവിയുമ്പോൾ ഫയലുകൾ സിപ്പ് ചെയ്യുക", - "signOut": "സൈൻ ഔട്ട് ചെയ്യുക", - "accountSettings": "അക്കൗണ്ട് ക്രമീകരണങ്ങൾ", - "bored": { - "help": "ഈസ്റ്റർ എഗ് ഗെയിം പ്രവർത്തനക്ഷമമാക്കുന്നു" - }, - "cacheInputs": { - "name": "ഫോം ഇൻപുട്ടുകൾ സംരക്ഷിക്കുക", - "help": "ഭാവിയിലെ ഉപയോഗത്തിനായി മുമ്പ് ഉപയോഗിച്ച ഇൻപുട്ടുകൾ സംഭരിക്കാൻ പ്രവർത്തനക്ഷമമാക്കുക" - } - }, - "changeCreds": { - "title": "വിവരങ്ങൾ മാറ്റുക", - "header": "നിങ്ങളുടെ അക്കൗണ്ട് വിവരങ്ങൾ അപ്‌ഡേറ്റ് ചെയ്യുക", - "changePassword": "നിങ്ങൾ സ്ഥിര ലോഗിൻ വിവരങ്ങളാണ് ഉപയോഗിക്കുന്നത്. ദയവായി ഒരു പുതിയ പാസ്‌വേഡ് നൽകുക", - "newUsername": "പുതിയ ഉപയോക്തൃനാമം", - "oldPassword": "നിലവിലെ പാസ്‌വേഡ്", - "newPassword": "പുതിയ പാസ്‌വേഡ്", - "confirmNewPassword": "പുതിയ പാസ്‌വേഡ് സ്ഥിരീകരിക്കുക", - "submit": "മാറ്റങ്ങൾ സമർപ്പിക്കുക" - }, - "account": { - "title": "അക്കൗണ്ട് ക്രമീകരണങ്ങൾ", - "accountSettings": "അക്കൗണ്ട് ക്രമീകരണങ്ങൾ", - "adminSettings": "അഡ്മിൻ ക്രമീകരണങ്ങൾ - ഉപയോക്താക്കളെ കാണുക, ചേർക്കുക", - "userControlSettings": "ഉപയോക്തൃ നിയന്ത്രണ ക്രമീകരണങ്ങൾ", - "changeUsername": "ഉപയോക്തൃനാമം മാറ്റുക", - "newUsername": "പുതിയ ഉപയോക്തൃനാമം", - "password": "സ്ഥിരീകരണ പാസ്‌വേഡ്", - "oldPassword": "പഴയ പാസ്‌വേഡ്", - "newPassword": "പുതിയ പാസ്‌വേഡ്", - "changePassword": "പാസ്‌വേഡ് മാറ്റുക", - "confirmNewPassword": "പുതിയ പാസ്‌വേഡ് സ്ഥിരീകരിക്കുക", - "signOut": "സൈൻ ഔട്ട് ചെയ്യുക", - "yourApiKey": "നിങ്ങളുടെ API കീ", - "syncTitle": "ബ്രൗസർ ക്രമീകരണങ്ങൾ അക്കൗണ്ടുമായി സമന്വയിപ്പിക്കുക", - "settingsCompare": "ക്രമീകരണ താരതമ്യം:", - "property": "പ്രോപ്പർട്ടി", - "webBrowserSettings": "വെബ് ബ്രൗസർ ക്രമീകരണം", - "syncToBrowser": "അക്കൗണ്ട് സമന്വയിപ്പിക്കുക -> ബ്രൗസർ", - "syncToAccount": "അക്കൗണ്ട് സമന്വയിപ്പിക്കുക <- ബ്രൗസർ" - }, - "adminUserSettings": { - "title": "ഉപയോക്തൃ നിയന്ത്രണ ക്രമീകരണങ്ങൾ", - "header": "അഡ്മിൻ ഉപയോക്തൃ നിയന്ത്രണ ക്രമീകരണങ്ങൾ", - "admin": "അഡ്മിൻ", - "user": "ഉപയോക്താവ്", - "addUser": "പുതിയ ഉപയോക്താവിനെ ചേർക്കുക", - "deleteUser": "ഉപയോക്താവിനെ ഇല്ലാതാക്കുക", - "confirmDeleteUser": "ഉപയോക്താവിനെ ഇല്ലാതാക്കണോ?", - "confirmChangeUserStatus": "ഉപയോക്താവിനെ പ്രവർത്തനരഹിതമാക്കുകയോ/പ്രവർത്തനക്ഷമമാക്കുകയോ ചെയ്യണോ?", - "usernameInfo": "ഉപയോക്തൃനാമത്തിൽ അക്ഷരങ്ങൾ, അക്കങ്ങൾ, താഴെ പറയുന്ന പ്രത്യേക പ്രതീകങ്ങൾ @._+- എന്നിവ മാത്രമേ ഉണ്ടാകാവൂ അല്ലെങ്കിൽ സാധുവായ ഒരു ഇമെയിൽ വിലാസം ആയിരിക്കണം.", - "roles": "റോളുകൾ", - "role": "റോൾ", - "actions": "പ്രവർത്തനങ്ങൾ", - "apiUser": "പരിമിതമായ API ഉപയോക്താവ്", - "extraApiUser": "അധിക പരിമിതമായ API ഉപയോക്താവ്", - "webOnlyUser": "വെബ് മാത്രം ഉപയോക്താവ്", - "demoUser": "ഡെമോ ഉപയോക്താവ് (ഇഷ്ടാനുസൃത ക്രമീകരണങ്ങളില്ല)", - "internalApiUser": "ആന്തരിക API ഉപയോക്താവ്", - "forceChange": "ലോഗിൻ ചെയ്യുമ്പോൾ പാസ്‌വേഡ് മാറ്റാൻ ഉപയോക്താവിനെ നിർബന്ധിക്കുക", - "submit": "ഉപയോക്താവിനെ സംരക്ഷിക്കുക", - "changeUserRole": "ഉപയോക്താവിന്റെ റോൾ മാറ്റുക", - "authenticated": "സ്ഥിരീകരിച്ചു", - "editOwnProfil": "സ്വന്തം പ്രൊഫൈൽ തിരുത്തുക", - "enabledUser": "പ്രവർത്തനക്ഷമമാക്കിയ ഉപയോക്താവ്", - "disabledUser": "പ്രവർത്തനരഹിതമാക്കിയ ഉപയോക്താവ്", - "activeUsers": "സജീവ ഉപയോക്താക്കൾ:", - "disabledUsers": "പ്രവർത്തനരഹിതമാക്കിയ ഉപയോക്താക്കൾ:", - "totalUsers": "ആകെ ഉപയോക്താക്കൾ:", - "lastRequest": "അവസാന അഭ്യർത്ഥന", - "usage": "ഉപയോഗം കാണുക" - }, - "endpointStatistics": { - "title": "എൻഡ്‌പോയിന്റ് സ്ഥിതിവിവരക്കണക്കുകൾ", - "header": "എൻഡ്‌പോയിന്റ് സ്ഥിതിവിവരക്കണക്കുകൾ", - "top10": "മികച്ച 10", - "top20": "മികച്ച 20", - "all": "എല്ലാം", - "refresh": "പുതുക്കുക", - "includeHomepage": "ഹോംപേജ് ഉൾപ്പെടുത്തുക ('/')", - "includeLoginPage": "ലോഗിൻ പേജ് ഉൾപ്പെടുത്തുക ('/login')", - "totalEndpoints": "ആകെ എൻഡ്‌പോയിന്റുകൾ", - "totalVisits": "ആകെ സന്ദർശനങ്ങൾ", - "showing": "കാണിക്കുന്നു", - "selectedVisits": "തിരഞ്ഞെടുത്ത സന്ദർശനങ്ങൾ", - "endpoint": "എൻഡ്‌പോയിന്റ്", - "visits": "സന്ദർശനങ്ങൾ", - "percentage": "ശതമാനം", - "loading": "ലോഡ് ചെയ്യുന്നു...", - "failedToLoad": "എൻഡ്‌പോയിന്റ് ഡാറ്റ ലോഡ് ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു. ദയവായി പുതുക്കാൻ ശ്രമിക്കുക.", - "home": "ഹോം", - "login": "ലോഗിൻ", - "top": "മികച്ച", - "numberOfVisits": "സന്ദർശനങ്ങളുടെ എണ്ണം", - "visitsTooltip": "സന്ദർശനങ്ങൾ: {0} (ആകെയുള്ളതിന്റെ {1}%)", - "retry": "വീണ്ടും ശ്രമിക്കുക" - }, - "database": { - "title": "ഡാറ്റാബേസ് ഇറക്കുമതി/കയറ്റുമതി", - "header": "ഡാറ്റാബേസ് ഇറക്കുമതി/കയറ്റുമതി", - "fileName": "ഫയലിന്റെ പേര്", - "creationDate": "സൃഷ്ടിച്ച തീയതി", - "fileSize": "ഫയൽ വലുപ്പം", - "deleteBackupFile": "ബാക്കപ്പ് ഫയൽ ഇല്ലാതാക്കുക", - "importBackupFile": "ബാക്കപ്പ് ഫയൽ ഇറക്കുമതി ചെയ്യുക", - "createBackupFile": "ബാക്കപ്പ് ഫയൽ സൃഷ്ടിക്കുക", - "downloadBackupFile": "ബാക്കപ്പ് ഫയൽ ഡൗൺലോഡ് ചെയ്യുക", - "info_1": "ഡാറ്റ ഇറക്കുമതി ചെയ്യുമ്പോൾ, ശരിയായ ഘടന ഉറപ്പാക്കേണ്ടത് പ്രധാനമാണ്. നിങ്ങൾ എന്താണ് ചെയ്യുന്നതെന്ന് നിങ്ങൾക്ക് ഉറപ്പില്ലെങ്കിൽ, ഒരു പ്രൊഫഷണലിൽ നിന്ന് ഉപദേശവും പിന്തുണയും തേടുക. ഘടനയിലെ ഒരു പിശക് ആപ്ലിക്കേഷൻ തകരാറുകൾക്ക് കാരണമാകും, ആപ്ലിക്കേഷൻ പ്രവർത്തിപ്പിക്കാൻ കഴിയാത്ത അവസ്ഥ വരെ.", - "info_2": "അപ്‌ലോഡ് ചെയ്യുമ്പോൾ ഫയലിന്റെ പേര് പ്രശ്നമല്ല. സ്ഥിരമായ നാമകരണ കൺവെൻഷൻ ഉറപ്പാക്കുന്നതിന്, backup_user_yyyyMMddHHmm.sql എന്ന ഫോർമാറ്റ് പിന്തുടരാൻ ഇത് പിന്നീട് പുനർനാമകരണം ചെയ്യപ്പെടും.", - "submit": "ബാക്കപ്പ് ഇറക്കുമതി ചെയ്യുക", - "importIntoDatabaseSuccessed": "ഡാറ്റാബേസിലേക്കുള്ള ഇറക്കുമതി വിജയിച്ചു", - "backupCreated": "ഡാറ്റാബേസ് ബാക്കപ്പ് വിജയകരം", - "fileNotFound": "ഫയൽ കണ്ടെത്തിയില്ല", - "fileNullOrEmpty": "ഫയൽ ശൂന്യമായിരിക്കരുത്", - "failedImportFile": "ഇറക്കുമതി ഫയൽ പരാജയപ്പെട്ടു", - "notSupported": "നിങ്ങളുടെ ഡാറ്റാബേസ് കണക്ഷനായി ഈ പ്രവർത്തനം ലഭ്യമല്ല." - }, - "session": { - "expired": "നിങ്ങളുടെ സെഷൻ കാലഹരണപ്പെട്ടു. ദയവായി പേജ് പുതുക്കി വീണ്ടും ശ്രമിക്കുക.", - "refreshPage": "പേജ് പുതുക്കുക" - }, - "home": { - "desc": "നിങ്ങളുടെ എല്ലാ PDF ആവശ്യങ്ങൾക്കുമുള്ള നിങ്ങളുടെ പ്രാദേശികമായി ഹോസ്റ്റ് ചെയ്ത ഏകജാലക ഷോപ്പ്.", - "searchBar": "സവിശേഷതകൾക്കായി തിരയുക...", - "viewPdf": { - "title": "PDF കാണുക/തിരുത്തുക", - "desc": "കാണുക, വ്യാഖ്യാനിക്കുക, വരയ്ക്കുക, ടെക്സ്റ്റ് അല്ലെങ്കിൽ ചിത്രങ്ങൾ ചേർക്കുക" - }, - "setFavorites": "പ്രിയപ്പെട്ടവ സജ്ജമാക്കുക", - "hideFavorites": "പ്രിയപ്പെട്ടവ മറയ്ക്കുക", - "showFavorites": "പ്രിയപ്പെട്ടവ കാണിക്കുക", - "legacyHomepage": "പഴയ ഹോംപേജ്", - "newHomePage": "ഞങ്ങളുടെ പുതിയ ഹോംപേജ് പരീക്ഷിക്കുക!", - "alphabetical": "അക്ഷരമാലാക്രമത്തിൽ", - "globalPopularity": "ആഗോള ജനപ്രീതി", - "sortBy": "ഇതനുസരിച്ച് അടുക്കുക:", - "multiTool": { - "title": "PDF മൾട്ടി ടൂൾ", - "desc": "പേജുകൾ ലയിപ്പിക്കുക, തിരിക്കുക, പുനഃക്രമീകരിക്കുക, വിഭജിക്കുക, നീക്കം ചെയ്യുക" - }, - "merge": { - "title": "ലയിപ്പിക്കുക", - "desc": "ഒന്നിലധികം PDF-കൾ എളുപ്പത്തിൽ ഒന്നിലേക്ക് ലയിപ്പിക്കുക." - }, - "split": { - "title": "വിഭജിക്കുക", - "desc": "PDF-കൾ ഒന്നിലധികം പ്രമാണങ്ങളായി വിഭജിക്കുക" - }, - "rotate": { - "title": "തിരിക്കുക", - "desc": "നിങ്ങളുടെ PDF-കൾ എളുപ്പത്തിൽ തിരിക്കുക." - }, - "imageToPdf": { - "title": "ചിത്രം PDF-ലേക്ക്", - "desc": "ഒരു ചിത്രം (PNG, JPEG, GIF) PDF-ലേക്ക് മാറ്റുക." - }, - "pdfToImage": { - "title": "PDF ചിത്രത്തിലേക്ക്", - "desc": "ഒരു PDF ചിത്രത്തിലേക്ക് മാറ്റുക. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "ക്രമീകരിക്കുക", - "desc": "ഏത് ക്രമത്തിലും പേജുകൾ നീക്കം ചെയ്യുക/പുനഃക്രമീകരിക്കുക" - }, - "addImage": { - "title": "ചിത്രം ചേർക്കുക", - "desc": "PDF-ൽ ഒരു നിശ്ചിത സ്ഥാനത്ത് ഒരു ചിത്രം ചേർക്കുന്നു" - }, - "watermark": { - "title": "വാട്ടർമാർക്ക് ചേർക്കുക", - "desc": "നിങ്ങളുടെ PDF പ്രമാണത്തിലേക്ക് ഒരു ഇഷ്ടാനുസൃത വാട്ടർമാർക്ക് ചേർക്കുക." - }, - "permissions": { - "title": "അനുമതികൾ മാറ്റുക", - "desc": "നിങ്ങളുടെ PDF പ്രമാണത്തിന്റെ അനുമതികൾ മാറ്റുക" - }, - "removePages": { - "title": "നീക്കം ചെയ്യുക", - "desc": "നിങ്ങളുടെ PDF പ്രമാണത്തിൽ നിന്ന് ആവശ്യമില്ലാത്ത പേജുകൾ ഇല്ലാതാക്കുക." - }, - "addPassword": { - "title": "പാസ്‌വേഡ് ചേർക്കുക", - "desc": "നിങ്ങളുടെ PDF പ്രമാണം ഒരു പാസ്‌വേഡ് ഉപയോഗിച്ച് എൻക്രിപ്റ്റ് ചെയ്യുക." - }, - "removePassword": { - "title": "പാസ്‌വേഡ് നീക്കം ചെയ്യുക", - "desc": "നിങ്ങളുടെ PDF പ്രമാണത്തിൽ നിന്ന് പാസ്‌വേഡ് സംരക്ഷണം നീക്കം ചെയ്യുക." - }, - "compressPdfs": { - "title": "കംപ്രസ് ചെയ്യുക", - "desc": "ഫയൽ വലുപ്പം കുറയ്ക്കുന്നതിന് PDF-കൾ കംപ്രസ് ചെയ്യുക." - }, - "unlockPDFForms": { - "title": "PDF ഫോമുകൾ അൺലോക്ക് ചെയ്യുക", - "desc": "ഒരു PDF പ്രമാണത്തിലെ ഫോം ഫീൽഡുകളുടെ റീഡ്-ഒൺലി പ്രോപ്പർട്ടി നീക്കം ചെയ്യുക." - }, - "changeMetadata": { - "title": "മെറ്റാഡാറ്റ മാറ്റുക", - "desc": "ഒരു PDF പ്രമാണത്തിൽ നിന്ന് മെറ്റാഡാറ്റ മാറ്റുക/നീക്കം ചെയ്യുക/ചേർക്കുക" - }, - "fileToPDF": { - "title": "ഫയൽ PDF-ലേക്ക് മാറ്റുക", - "desc": "ഏകദേശം ഏത് ഫയലും PDF-ലേക്ക് മാറ്റുക (DOCX, PNG, XLS, PPT, TXT എന്നിവയും അതിൽ കൂടുതലും)" - }, - "ocr": { - "title": "OCR / സ്കാനുകൾ വൃത്തിയാക്കുക", - "desc": "സ്കാനുകൾ വൃത്തിയാക്കുകയും ഒരു PDF-നുള്ളിലെ ചിത്രങ്ങളിൽ നിന്ന് ടെക്സ്റ്റ് കണ്ടെത്തുകയും അത് ടെക്സ്റ്റായി വീണ്ടും ചേർക്കുകയും ചെയ്യുന്നു." - }, - "extractImages": { - "title": "ചിത്രങ്ങൾ വേർതിരിച്ചെടുക്കുക", - "desc": "ഒരു PDF-ൽ നിന്ന് എല്ലാ ചിത്രങ്ങളും വേർതിരിച്ചെടുത്ത് സിപ്പിലേക്ക് സംരക്ഷിക്കുന്നു" - }, - "pdfToPDFA": { - "title": "PDF PDF/A-ലേക്ക്", - "desc": "ദീർഘകാല സംഭരണത്തിനായി PDF PDF/A-ലേക്ക് മാറ്റുക" - }, - "PDFToWord": { - "title": "PDF വേഡിലേക്ക്", - "desc": "PDF വേഡ് ഫോർമാറ്റുകളിലേക്ക് (DOC, DOCX, ODT) മാറ്റുക" - }, - "PDFToPresentation": { - "title": "PDF പ്രസന്റേഷനിലേക്ക്", - "desc": "PDF പ്രസന്റേഷൻ ഫോർമാറ്റുകളിലേക്ക് (PPT, PPTX, ODP) മാറ്റുക" - }, - "PDFToText": { - "title": "PDF RTF-ലേക്ക് (ടെക്സ്റ്റ്)", - "desc": "PDF ടെക്സ്റ്റ് അല്ലെങ്കിൽ RTF ഫോർമാറ്റിലേക്ക് മാറ്റുക" - }, - "PDFToHTML": { - "title": "PDF HTML-ലേക്ക്", - "desc": "PDF HTML ഫോർമാറ്റിലേക്ക് മാറ്റുക" - }, - "PDFToXML": { - "title": "PDF XML-ലേക്ക്", - "desc": "PDF XML ഫോർമാറ്റിലേക്ക് മാറ്റുക" - }, - "ScannerImageSplit": { - "title": "സ്കാൻ ചെയ്ത ഫോട്ടോകൾ കണ്ടെത്തുക/വിഭജിക്കുക", - "desc": "ഒരു ഫോട്ടോ/PDF-നുള്ളിൽ നിന്ന് ഒന്നിലധികം ഫോട്ടോകൾ വിഭജിക്കുന്നു" - }, - "sign": { - "title": "ഒപ്പിടുക", - "desc": "വരച്ചോ, ടെക്സ്റ്റ് ഉപയോഗിച്ചോ, ചിത്രം ഉപയോഗിച്ചോ PDF-ൽ ഒപ്പ് ചേർക്കുന്നു" - }, - "flatten": { - "title": "പരത്തുക", - "desc": "ഒരു PDF-ൽ നിന്ന് എല്ലാ ഇന്ററാക്ടീവ് ഘടകങ്ങളും ഫോമുകളും നീക്കം ചെയ്യുക" - }, - "repair": { - "title": "നന്നാക്കുക", - "desc": "കേടായ/തകർന്ന PDF നന്നാക്കാൻ ശ്രമിക്കുന്നു" - }, - "removeBlanks": { - "title": "ശൂന്യമായ പേജുകൾ നീക്കം ചെയ്യുക", - "desc": "ഒരു പ്രമാണത്തിൽ നിന്ന് ശൂന്യമായ പേജുകൾ കണ്ടെത്തുകയും നീക്കം ചെയ്യുകയും ചെയ്യുന്നു" - }, - "removeAnnotations": { - "title": "വ്യാഖ്യാനങ്ങൾ നീക്കം ചെയ്യുക", - "desc": "ഒരു PDF-ൽ നിന്ന് എല്ലാ അഭിപ്രായങ്ങളും/വ്യാഖ്യാനങ്ങളും നീക്കം ചെയ്യുന്നു" - }, - "compare": { - "title": "താരതമ്യം ചെയ്യുക", - "desc": "2 PDF പ്രമാണങ്ങൾ തമ്മിലുള്ള വ്യത്യാസങ്ങൾ താരതമ്യം ചെയ്യുകയും കാണിക്കുകയും ചെയ്യുന്നു" - }, - "certSign": { - "title": "സർട്ടിഫിക്കറ്റ് ഉപയോഗിച്ച് ഒപ്പിടുക", - "desc": "ഒരു സർട്ടിഫിക്കറ്റ്/കീ (PEM/P12) ഉപയോഗിച്ച് ഒരു PDF ഒപ്പിടുന്നു" - }, - "removeCertSign": { - "title": "സർട്ടിഫിക്കറ്റ് ഒപ്പ് നീക്കം ചെയ്യുക", - "desc": "PDF-ൽ നിന്ന് സർട്ടിഫിക്കറ്റ് ഒപ്പ് നീക്കം ചെയ്യുക" - }, - "pageLayout": { - "title": "മൾട്ടി-പേജ് ലേഔട്ട്", - "desc": "ഒരു PDF പ്രമാണത്തിന്റെ ഒന്നിലധികം പേജുകൾ ഒരൊറ്റ പേജിലേക്ക് ലയിപ്പിക്കുക" - }, - "scalePages": { - "title": "പേജ് വലുപ്പം/സ്കെയിൽ ക്രമീകരിക്കുക", - "desc": "ഒരു പേജിന്റെയും/അല്ലെങ്കിൽ അതിന്റെ ഉള്ളടക്കങ്ങളുടെയും വലുപ്പം/സ്കെയിൽ മാറ്റുക." - }, - "pipeline": { - "title": "പൈപ്പ്ലൈൻ", - "desc": "പൈപ്പ്ലൈൻ സ്ക്രിപ്റ്റുകൾ നിർവചിച്ചുകൊണ്ട് PDF-കളിൽ ഒന്നിലധികം പ്രവർത്തനങ്ങൾ നടത്തുക" - }, - "add-page-numbers": { - "title": "പേജ് നമ്പറുകൾ ചേർക്കുക", - "desc": "ഒരു പ്രമാണത്തിലുടനീളം ഒരു നിശ്ചിത സ്ഥാനത്ത് പേജ് നമ്പറുകൾ ചേർക്കുക" - }, - "auto-rename": { - "title": "PDF ഫയൽ സ്വയം പുനർനാമകരണം ചെയ്യുക", - "desc": "കണ്ടെത്തിയ തലക്കെട്ടിനെ അടിസ്ഥാനമാക്കി ഒരു PDF ഫയൽ സ്വയം പുനർനാമകരണം ചെയ്യുന്നു" - }, - "adjust-contrast": { - "title": "നിറങ്ങൾ/കോൺട്രാസ്റ്റ് ക്രമീകരിക്കുക", - "desc": "ഒരു PDF-ന്റെ കോൺട്രാസ്റ്റ്, സാച്ചുറേഷൻ, തെളിച്ചം എന്നിവ ക്രമീകരിക്കുക" - }, - "crop": { - "title": "PDF ക്രോപ്പ് ചെയ്യുക", - "desc": "വലുപ്പം കുറയ്ക്കാൻ ഒരു PDF ക്രോപ്പ് ചെയ്യുക (ടെക്സ്റ്റ് നിലനിർത്തുന്നു!)" - }, - "autoSplitPDF": { - "title": "പേജുകൾ സ്വയം വിഭജിക്കുക", - "desc": "ഭൗതികമായി സ്കാൻ ചെയ്ത പേജ് സ്പ്ലിറ്റർ QR കോഡ് ഉപയോഗിച്ച് സ്കാൻ ചെയ്ത PDF സ്വയം വിഭജിക്കുക" - }, - "sanitizePdf": { - "title": "ശുദ്ധീകരിക്കുക", - "desc": "PDF ഫയലുകളിൽ നിന്ന് സ്ക്രിപ്റ്റുകളും മറ്റ് ഘടകങ്ങളും നീക്കം ചെയ്യുക" - }, - "URLToPDF": { - "title": "URL/വെബ്സൈറ്റ് PDF-ലേക്ക്", - "desc": "ഏത് http(s)URL-നെയും PDF-ലേക്ക് മാറ്റുന്നു" - }, - "HTMLToPDF": { - "title": "HTML PDF-ലേക്ക്", - "desc": "ഏത് HTML ഫയലിനെയും അല്ലെങ്കിൽ സിപ്പിനെയും PDF-ലേക്ക് മാറ്റുന്നു" - }, - "MarkdownToPDF": { - "title": "മാർക്ക്ഡൗൺ PDF-ലേക്ക്", - "desc": "ഏത് മാർക്ക്ഡൗൺ ഫയലിനെയും PDF-ലേക്ക് മാറ്റുന്നു" - }, - "PDFToMarkdown": { - "title": "PDF മാർക്ക്ഡൗണിലേക്ക്", - "desc": "ഏത് PDF-നെയും മാർക്ക്ഡൗണിലേക്ക് മാറ്റുന്നു" - }, - "getPdfInfo": { - "title": "PDF-നെക്കുറിച്ചുള്ള എല്ലാ വിവരങ്ങളും നേടുക", - "desc": "PDF-കളെക്കുറിച്ചുള്ള സാധ്യമായ എല്ലാ വിവരങ്ങളും നേടുന്നു" - }, - "extractPage": { - "title": "പേജ്(കൾ) വേർതിരിച്ചെടുക്കുക", - "desc": "PDF-ൽ നിന്ന് തിരഞ്ഞെടുത്ത പേജുകൾ വേർതിരിച്ചെടുക്കുന്നു" - }, - "PdfToSinglePage": { - "title": "ഒരൊറ്റ വലിയ പേജ്", - "desc": "എല്ലാ PDF പേജുകളും ഒരൊറ്റ വലിയ പേജിലേക്ക് ലയിപ്പിക്കുന്നു" - }, - "showJS": { - "title": "ജാവാസ്ക്രിപ്റ്റ് കാണിക്കുക", - "desc": "ഒരു PDF-ൽ കുത്തിവച്ച ഏതെങ്കിലും JS തിരയുകയും പ്രദർശിപ്പിക്കുകയും ചെയ്യുന്നു" - }, - "autoRedact": { - "title": "സ്വയം റെഡാക്റ്റ് ചെയ്യുക", - "desc": "ഇൻപുട്ട് ടെക്സ്റ്റിനെ അടിസ്ഥാനമാക്കി ഒരു PDF-ലെ ടെക്സ്റ്റ് സ്വയം റെഡാക്റ്റ് (കറുപ്പിക്കുന്നു) ചെയ്യുന്നു" - }, - "redact": { - "title": "സ്വയം റെഡാക്ഷൻ", - "desc": "തിരഞ്ഞെടുത്ത ടെക്സ്റ്റ്, വരച്ച രൂപങ്ങൾ കൂടാതെ/അല്ലെങ്കിൽ തിരഞ്ഞെടുത്ത പേജ്(കൾ) അടിസ്ഥാനമാക്കി ഒരു PDF റെഡാക്റ്റ് ചെയ്യുന്നു" - }, - "tableExtraxt": { - "title": "PDF CSV-ലേക്ക്", - "desc": "ഒരു PDF-ൽ നിന്ന് പട്ടികകൾ വേർതിരിച്ചെടുത്ത് CSV-ലേക്ക് മാറ്റുന്നു" - }, - "autoSizeSplitPDF": { - "title": "വലുപ്പം/എണ്ണം അനുസരിച്ച് സ്വയം വിഭജിക്കുക", - "desc": "വലുപ്പം, പേജ് എണ്ണം, അല്ലെങ്കിൽ പ്രമാണങ്ങളുടെ എണ്ണം എന്നിവ അടിസ്ഥാനമാക്കി ഒരൊറ്റ PDF ഒന്നിലധികം പ്രമാണങ്ങളായി വിഭജിക്കുക" - }, - "overlay-pdfs": { - "title": "PDF-കൾ ഓവർലേ ചെയ്യുക", - "desc": "മറ്റൊരു PDF-ന് മുകളിൽ PDF-കൾ ഓവർലേ ചെയ്യുന്നു" - }, - "split-by-sections": { - "title": "വിഭാഗങ്ങൾ അനുസരിച്ച് PDF വിഭജിക്കുക", - "desc": "ഒരു PDF-ന്റെ ഓരോ പേജും ചെറിയ തിരശ്ചീനവും ലംബവുമായ വിഭാഗങ്ങളായി വിഭജിക്കുക" - }, - "AddStampRequest": { - "title": "PDF-ൽ സ്റ്റാമ്പ് ചേർക്കുക", - "desc": "നിശ്ചിത സ്ഥാനങ്ങളിൽ ടെക്സ്റ്റ് അല്ലെങ്കിൽ ഇമേജ് സ്റ്റാമ്പുകൾ ചേർക്കുക" - }, - "removeImagePdf": { - "title": "ചിത്രം നീക്കം ചെയ്യുക", - "desc": "ഫയൽ വലുപ്പം കുറയ്ക്കാൻ PDF-ൽ നിന്ന് ചിത്രം നീക്കം ചെയ്യുക" - }, - "splitPdfByChapters": { - "title": "അധ്യായങ്ങൾ അനുസരിച്ച് PDF വിഭജിക്കുക", - "desc": "അതിന്റെ അധ്യായ ഘടനയെ അടിസ്ഥാനമാക്കി ഒരു PDF ഒന്നിലധികം ഫയലുകളായി വിഭജിക്കുക." - }, - "validateSignature": { - "title": "PDF ഒപ്പ് സാധൂകരിക്കുക", - "desc": "PDF പ്രമാണങ്ങളിലെ ഡിജിറ്റൽ ഒപ്പുകളും സർട്ടിഫിക്കറ്റുകളും പരിശോധിക്കുക" - }, - "replaceColorPdf": { - "title": "നിറം മാറ്റുകയും വിപരീതമാക്കുകയും ചെയ്യുക", - "desc": "PDF-ലെ ടെക്സ്റ്റിനും പശ്ചാത്തലത്തിനും നിറം മാറ്റുകയും ഫയൽ വലുപ്പം കുറയ്ക്കുന്നതിന് PDF-ന്റെ മുഴുവൻ നിറവും വിപരീതമാക്കുകയും ചെയ്യുക" - } - }, - "viewPdf": { - "tags": "കാണുക,വായിക്കുക,വ്യാഖ്യാനിക്കുക,ടെക്സ്റ്റ്,ചിത്രം,ഹൈലൈറ്റ്,തിരുത്തുക", - "title": "PDF കാണുക/തിരുത്തുക", - "header": "PDF കാണുക" - }, - "multiTool": { - "tags": "മൾട്ടി ടൂൾ,മൾട്ടി ഓപ്പറേഷൻ,യുഐ,ക്ലിക്ക് ഡ്രാഗ്,ഫ്രണ്ട് എൻഡ്,ക്ലയിന്റ് സൈഡ്,ഇന്ററാക്ടീവ്,അനങ്ങാത്ത,നീക്കുക,ഇല്ലാതാക്കുക,കൈമാറുക,വിഭജിക്കുക", - "title": "PDF മൾട്ടി ടൂൾ", - "header": "PDF മൾട്ടി ടൂൾ", - "uploadPrompts": "ഫയലിന്റെ പേര്", - "selectAll": "എല്ലാം തിരഞ്ഞെടുക്കുക", - "deselectAll": "എല്ലാം തിരഞ്ഞെടുക്കാതിരിക്കുക", - "selectPages": "പേജ് തിരഞ്ഞെടുക്കുക", - "selectedPages": "തിരഞ്ഞെടുത്ത പേജുകൾ", - "page": "പേജ്", - "deleteSelected": "തിരഞ്ഞെടുത്തവ ഇല്ലാതാക്കുക", - "downloadAll": "കയറ്റുമതി ചെയ്യുക", - "downloadSelected": "തിരഞ്ഞെടുത്തവ കയറ്റുമതി ചെയ്യുക", - "insertPageBreak": "പേജ് ബ്രേക്ക് ചേർക്കുക", - "addFile": "ഫയൽ ചേർക്കുക", - "rotateLeft": "ഇടത്തേക്ക് തിരിക്കുക", - "rotateRight": "വലത്തേക്ക് തിരിക്കുക", - "split": "വിഭജിക്കുക", - "moveLeft": "ഇടത്തേക്ക് നീക്കുക", - "moveRight": "വലത്തേക്ക് നീക്കുക", - "delete": "മായ്ക്കുക", - "dragDropMessage": "പേജ്(കൾ) തിരഞ്ഞെടുത്തു", - "undo": "പഴയപടി ആക്കുക", - "redo": "വീണ്ടും ചെയ്യുക" - }, - "merge": { - "tags": "ലയിപ്പിക്കുക,പേജ് പ്രവർത്തനങ്ങൾ,ബാക്ക് എൻഡ്,സെർവർ സൈഡ്", - "title": "ലയിപ്പിക്കുക", - "header": "ഒന്നിലധികം PDF-കൾ ലയിപ്പിക്കുക (2+)", - "sortByName": "പേര് അനുസരിച്ച് അടുക്കുക", - "sortByDate": "തീയതി അനുസരിച്ച് അടുക്കുക", - "removeCertSign": "ലയിപ്പിച്ച ഫയലിലെ ഡിജിറ്റൽ ഒപ്പ് നീക്കം ചെയ്യണോ?", - "submit": "ലയിപ്പിക്കുക" - }, - "split": { - "tags": "പേജ് പ്രവർത്തനങ്ങൾ,വിഭജിക്കുക,മൾട്ടി പേജ്,മുറിക്കുക,സെർവർ സൈഡ്", - "title": "PDF വിഭജിക്കുക", - "header": "PDF വിഭജിക്കുക", - "desc": { - "1": "നിങ്ങൾ തിരഞ്ഞെടുക്കുന്ന നമ്പറുകൾ വിഭജിക്കാൻ ആഗ്രഹിക്കുന്ന പേജ് നമ്പറാണ്", - "2": "അതുപോലെ 1,3,7-9 തിരഞ്ഞെടുക്കുന്നത് 10 പേജുള്ള ഒരു പ്രമാണത്തെ 6 വ്യത്യസ്ത PDF-കളായി വിഭജിക്കും:", - "3": "പ്രമാണം #1: പേജ് 1", - "4": "പ്രമാണം #2: പേജ് 2, 3", - "5": "പ്രമാണം #3: പേജ് 4, 5, 6, 7", - "6": "പ്രമാണം #4: പേജ് 8", - "7": "പ്രമാണം #5: പേജ് 9", - "8": "പ്രമാണം #6: പേജ് 10" - }, - "splitPages": "വിഭജിക്കേണ്ട പേജുകൾ നൽകുക:", - "submit": "വിഭജിക്കുക" - }, - "rotate": { - "tags": "സെർവർ സൈഡ്", - "title": "PDF തിരിക്കുക", - "header": "PDF തിരിക്കുക", - "selectAngle": "തിരിക്കേണ്ട കോൺ തിരഞ്ഞെടുക്കുക (90 ഡിഗ്രിയുടെ ഗുണിതങ്ങളിൽ):", - "submit": "തിരിക്കുക" - }, - "imageToPdf": { - "tags": "പരിവർത്തനം,img,jpg,ചിത്രം,ഫോട്ടോ" - }, - "pdfToImage": { - "tags": "പരിവർത്തനം,img,jpg,ചിത്രം,ഫോട്ടോ", - "title": "PDF ചിത്രത്തിലേക്ക്", - "header": "PDF ചിത്രത്തിലേക്ക്", - "selectText": "ചിത്ര ഫോർമാറ്റ്", - "singleOrMultiple": "ചിത്ര ഫല തരം", - "single": "ഒരൊറ്റ വലിയ ചിത്രം", - "multi": "ഒന്നിലധികം ചിത്രങ്ങൾ", - "colorType": "നിറ തരം", - "color": "നിറം", - "grey": "ഗ്രേസ്‌കെയിൽ", - "blackwhite": "കറുപ്പും വെളുപ്പും (ഡാറ്റ നഷ്ടപ്പെട്ടേക്കാം!)", - "submit": "പരിവർത്തനം ചെയ്യുക", - "info": "പൈത്തൺ ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല. WebP പരിവർത്തനത്തിന് ആവശ്യമാണ്.", - "placeholder": "(ഉദാ. 1,2,8 അല്ലെങ്കിൽ 4,7,12-16 അല്ലെങ്കിൽ 2n-1)" - }, - "pdfOrganiser": { - "tags": "ഡ്യൂപ്ലെക്സ്,ഇരട്ട,ഒറ്റ,അടുക്കുക,നീക്കുക", - "title": "പേജ് ഓർഗനൈസർ", - "header": "PDF പേജ് ഓർഗനൈസർ", - "submit": "പേജുകൾ പുനഃക്രമീകരിക്കുക", - "mode": { - "_value": "മോഡ്", - "1": "ഇഷ്ടാനുസൃത പേജ് ക്രമം", - "2": "വിപരീത ക്രമം", - "3": "ഡ്യൂപ്ലെക്സ് അടുക്കൽ", - "4": "ലഘുലേഖ അടുക്കൽ", - "5": "സൈഡ് സ്റ്റിച്ച് ലഘുലേഖ അടുക്കൽ", - "6": "ഒറ്റ-ഇരട്ട വിഭജനം", - "7": "ആദ്യത്തേത് നീക്കം ചെയ്യുക", - "8": "അവസാനത്തേത് നീക്കം ചെയ്യുക", - "9": "ആദ്യത്തേതും അവസാനത്തേതും നീക്കം ചെയ്യുക", - "10": "ഒറ്റ-ഇരട്ട ലയനം", - "11": "എല്ലാ പേജുകളും തനിപ്പകർപ്പാക്കുക" - }, - "placeholder": "(ഉദാ. 1,3,2 അല്ലെങ്കിൽ 4-8,2,10-12 അല്ലെങ്കിൽ 2n-1)" - }, - "addImage": { - "tags": "img,jpg,ചിത്രം,ഫോട്ടോ", - "title": "ചിത്രം ചേർക്കുക", - "header": "PDF-ലേക്ക് ചിത്രം ചേർക്കുക", - "everyPage": "എല്ലാ പേജിലും?", - "upload": "ചിത്രം ചേർക്കുക", - "submit": "ചിത്രം ചേർക്കുക" - }, - "watermark": { - "tags": "ടെക്സ്റ്റ്,ആവർത്തിക്കുന്ന,ലേബൽ,സ്വന്തം,പകർപ്പവകാശം,വ്യാപാരമുദ്ര,img,jpg,ചിത്രം,ഫോട്ടോ", - "title": "വാട്ടർമാർക്ക് ചേർക്കുക", - "header": "വാട്ടർമാർക്ക് ചേർക്കുക", - "customColor": "ഇഷ്ടാനുസൃത ടെക്സ്റ്റ് നിറം", - "selectText": { - "1": "വാട്ടർമാർക്ക് ചേർക്കേണ്ട PDF തിരഞ്ഞെടുക്കുക:", - "2": "വാട്ടർമാർക്ക് ടെക്സ്റ്റ്:", - "3": "അക്ഷര വലുപ്പം:", - "4": "തിരിക്കൽ (0-360):", - "5": "വീതി സ്പേസർ (ഓരോ വാട്ടർമാർക്കിനും ഇടയിലുള്ള തിരശ്ചീനമായ സ്ഥലം):", - "6": "ഉയരം സ്പേസർ (ഓരോ വാട്ടർമാർക്കിനും ഇടയിലുള്ള ലംബമായ സ്ഥലം):", - "7": "അതാര്യത (0% - 100%):", - "8": "വാട്ടർമാർക്ക് തരം:", - "9": "വാട്ടർമാർക്ക് ചിത്രം:", - "10": "PDF-നെ PDF-ചിത്രത്തിലേക്ക് മാറ്റുക" - }, - "submit": "വാട്ടർമാർക്ക് ചേർക്കുക", - "type": { - "1": "ടെക്സ്റ്റ്", - "2": "ചിത്രം" - } - }, - "permissions": { - "tags": "വായിക്കുക,എഴുതുക,തിരുത്തുക,അച്ചടിക്കുക", - "title": "അനുമതികൾ മാറ്റുക", - "header": "അനുമതികൾ മാറ്റുക", - "warning": "മുന്നറിയിപ്പ്: ഈ അനുമതികൾ മാറ്റാൻ കഴിയാത്തതാക്കാൻ, പാസ്‌വേഡ് ചേർക്കുക പേജ് വഴി ഒരു പാസ്‌വേഡ് ഉപയോഗിച്ച് അവ സജ്ജമാക്കാൻ ശുപാർശ ചെയ്യുന്നു", - "selectText": { - "1": "അനുമതികൾ മാറ്റേണ്ട PDF തിരഞ്ഞെടുക്കുക", - "2": "സജ്ജമാക്കേണ്ട അനുമതികൾ", - "3": "പ്രമാണം കൂട്ടിച്ചേർക്കുന്നത് തടയുക", - "4": "ഉള്ളടക്കം വേർതിരിച്ചെടുക്കുന്നത് തടയുക", - "5": "ലഭ്യതയ്ക്കായി വേർതിരിച്ചെടുക്കുന്നത് തടയുക", - "6": "ഫോം പൂരിപ്പിക്കുന്നത് തടയുക", - "7": "പരിഷ്ക്കരണം തടയുക", - "8": "വ്യാഖ്യാന പരിഷ്ക്കരണം തടയുക", - "9": "അച്ചടി തടയുക", - "10": "വ്യത്യസ്ത ഫോർമാറ്റുകളിൽ അച്ചടിക്കുന്നത് തടയുക" - }, - "submit": "മാറ്റുക" - }, - "removePages": { - "tags": "പേജുകൾ നീക്കം ചെയ്യുക,പേജുകൾ ഇല്ലാതാക്കുക" - }, - "addPassword": { - "tags": "സുരക്ഷിതം,സുരക്ഷ", - "title": "പാസ്‌വേഡ് ചേർക്കുക", - "header": "പാസ്‌വേഡ് ചേർക്കുക (എൻക്രിപ്റ്റ് ചെയ്യുക)", - "selectText": { - "1": "എൻക്രിപ്റ്റ് ചെയ്യേണ്ട PDF തിരഞ്ഞെടുക്കുക", - "2": "ഉപയോക്തൃ പാസ്‌വേഡ്", - "3": "എൻക്രിപ്ഷൻ കീ ദൈർഘ്യം", - "4": "ഉയർന്ന മൂല്യങ്ങൾ കൂടുതൽ ശക്തമാണ്, എന്നാൽ താഴ്ന്ന മൂല്യങ്ങൾക്ക് മികച്ച അനുയോജ്യതയുണ്ട്.", - "5": "സജ്ജമാക്കേണ്ട അനുമതികൾ (ഉടമയുടെ പാസ്‌വേഡിനൊപ്പം ഉപയോഗിക്കാൻ ശുപാർശ ചെയ്യുന്നു)", - "6": "പ്രമാണം കൂട്ടിച്ചേർക്കുന്നത് തടയുക", - "7": "ഉള്ളടക്കം വേർതിരിച്ചെടുക്കുന്നത് തടയുക", - "8": "ലഭ്യതയ്ക്കായി വേർതിരിച്ചെടുക്കുന്നത് തടയുക", - "9": "ഫോം പൂരിപ്പിക്കുന്നത് തടയുക", - "10": "പരിഷ്ക്കരണം തടയുക", - "11": "വ്യാഖ്യാന പരിഷ്ക്കരണം തടയുക", - "12": "അച്ചടി തടയുക", - "13": "വ്യത്യസ്ത ഫോർമാറ്റുകളിൽ അച്ചടിക്കുന്നത് തടയുക", - "14": "ഉടമയുടെ പാസ്‌വേഡ്", - "15": "പ്രമാണം തുറന്നുകഴിഞ്ഞാൽ എന്തുചെയ്യാൻ കഴിയുമെന്നത് നിയന്ത്രിക്കുന്നു (എല്ലാ റീഡറുകളും പിന്തുണയ്ക്കുന്നില്ല)", - "16": "പ്രമാണം തന്നെ തുറക്കുന്നത് നിയന്ത്രിക്കുന്നു" - }, - "submit": "എൻക്രിപ്റ്റ് ചെയ്യുക" - }, - "removePassword": { - "tags": "സുരക്ഷിതം,ഡീക്രിപ്റ്റ്,സുരക്ഷ,പാസ്‌വേഡ് ഇല്ലാതാക്കുക,പാസ്‌വേഡ് നീക്കം ചെയ്യുക", - "title": "പാസ്‌വേഡ് നീക്കം ചെയ്യുക", - "header": "പാസ്‌വേഡ് നീക്കം ചെയ്യുക (ഡീക്രിപ്റ്റ് ചെയ്യുക)", - "selectText": { - "1": "ഡീക്രിപ്റ്റ് ചെയ്യേണ്ട PDF തിരഞ്ഞെടുക്കുക", - "2": "പാസ്‌വേഡ്" - }, - "submit": "നീക്കം ചെയ്യുക" - }, - "compressPdfs": { - "tags": "ചുരുക്കുക,ചെറുത്,വളരെ ചെറുത്" - }, - "unlockPDFForms": { - "tags": "നീക്കം ചെയ്യുക,ഇല്ലാതാക്കുക,ഫോം,ഫീൽഡ്,റീഡ്-ഒൺലി", - "title": "ഫോം ഫീൽഡുകളിൽ നിന്ന് റീഡ്-ഒൺലി നീക്കം ചെയ്യുക", - "header": "PDF ഫോമുകൾ അൺലോക്ക് ചെയ്യുക", - "submit": "നീക്കം ചെയ്യുക" - }, - "changeMetadata": { - "tags": "തലക്കെട്ട്,രചയിതാവ്,തീയതി,സൃഷ്ടി,സമയം,പ്രസാധകൻ,നിർമ്മാതാവ്,സ്ഥിതിവിവരക്കണക്കുകൾ", - "title": "തലക്കെട്ട്:", - "header": "മെറ്റാഡാറ്റ മാറ്റുക", - "selectText": { - "1": "ദയവായി നിങ്ങൾ മാറ്റാൻ ആഗ്രഹിക്കുന്ന വേരിയബിളുകൾ തിരുത്തുക", - "2": "എല്ലാ മെറ്റാഡാറ്റയും ഇല്ലാതാക്കുക", - "3": "ഇഷ്ടാനുസൃത മെറ്റാഡാറ്റ കാണിക്കുക:", - "4": "മറ്റ് മെറ്റാഡാറ്റ:", - "5": "ഇഷ്ടാനുസൃത മെറ്റാഡാറ്റ എൻട്രി ചേർക്കുക" - }, - "author": "രചയിതാവ്:", - "creationDate": "സൃഷ്ടിച്ച തീയതി (yyyy/MM/dd HH:mm:ss):", - "creator": "സ്രഷ്ടാവ്:", - "keywords": "കീവേഡുകൾ:", - "modDate": "പരിഷ്ക്കരിച്ച തീയതി (yyyy/MM/dd HH:mm:ss):", - "producer": "നിർമ്മാതാവ്:", - "subject": "വിഷയം:", - "trapped": "ട്രാപ്പ്ഡ്:", - "submit": "മാറ്റുക" - }, - "fileToPDF": { - "tags": "രൂപാന്തരം,ഫോർമാറ്റ്,പ്രമാണം,ചിത്രം,സ്ലൈഡ്,ടെക്സ്റ്റ്,പരിവർത്തനം,ഓഫീസ്,ഡോക്സ്,വേഡ്,എക്സൽ,പവർപോയിന്റ്", - "title": "ഫയൽ PDF-ലേക്ക്", - "header": "ഏത് ഫയലും PDF-ലേക്ക് മാറ്റുക", - "credit": "ഈ സേവനം ഫയൽ പരിവർത്തനത്തിനായി LibreOffice, Unoconv എന്നിവ ഉപയോഗിക്കുന്നു.", - "supportedFileTypesInfo": "പിന്തുണയ്ക്കുന്ന ഫയൽ തരങ്ങൾ", - "supportedFileTypes": "പിന്തുണയ്ക്കുന്ന ഫയൽ തരങ്ങളിൽ താഴെ പറയുന്നവ ഉൾപ്പെടുത്തണം, എന്നിരുന്നാലും പിന്തുണയ്ക്കുന്ന ഫോർമാറ്റുകളുടെ പൂർണ്ണമായ അപ്‌ഡേറ്റ് ചെയ്ത ലിസ്റ്റിനായി, ദയവായി LibreOffice ഡോക്യുമെന്റേഷൻ പരിശോധിക്കുക", - "submit": "PDF-ലേക്ക് മാറ്റുക" - }, - "ocr": { - "tags": "തിരിച്ചറിയൽ,ടെക്സ്റ്റ്,ചിത്രം,സ്കാൻ,വായിക്കുക,തിരിച്ചറിയുക,കണ്ടെത്തൽ,തിരുത്താവുന്നത്", - "title": "OCR / സ്കാൻ വൃത്തിയാക്കൽ", - "header": "സ്കാനുകൾ വൃത്തിയാക്കുക / OCR (ഒപ്റ്റിക്കൽ ക്യാരക്ടർ റെക്കഗ്നിഷൻ)", - "selectText": { - "1": "PDF-നുള്ളിൽ കണ്ടെത്തേണ്ട ഭാഷകൾ തിരഞ്ഞെടുക്കുക (ലിസ്റ്റ് ചെയ്തിട്ടുള്ളവ നിലവിൽ കണ്ടെത്തിയവയാണ്):", - "2": "OCR ചെയ്ത PDF-നോടൊപ്പം OCR ടെക്സ്റ്റ് അടങ്ങിയ ടെക്സ്റ്റ് ഫയൽ നിർമ്മിക്കുക", - "3": "ചരിഞ്ഞ കോണിൽ സ്കാൻ ചെയ്ത പേജുകൾ തിരികെ സ്ഥാനത്തേക്ക് തിരിച്ച് ശരിയാക്കുക", - "4": "പേജ് വൃത്തിയാക്കുക, അതുവഴി OCR പശ്ചാത്തല ശബ്ദത്തിൽ ടെക്സ്റ്റ് കണ്ടെത്താനുള്ള സാധ്യത കുറവാണ്. (ഔട്ട്‌പുട്ടിൽ മാറ്റമില്ല)", - "5": "പേജ് വൃത്തിയാക്കുക, അതുവഴി OCR പശ്ചാത്തല ശബ്ദത്തിൽ ടെക്സ്റ്റ് കണ്ടെത്താനുള്ള സാധ്യത കുറവാണ്, ഔട്ട്‌പുട്ടിൽ വൃത്തിയാക്കൽ നിലനിർത്തുന്നു.", - "6": "ഇന്ററാക്ടീവ് ടെക്സ്റ്റ് ഉള്ള പേജുകൾ അവഗണിക്കുന്നു, ചിത്രങ്ങളായ പേജുകൾ മാത്രം OCR ചെയ്യുന്നു", - "7": "OCR നിർബന്ധിക്കുക, എല്ലാ യഥാർത്ഥ ടെക്സ്റ്റ് ഘടകങ്ങളും നീക്കം ചെയ്തുകൊണ്ട് എല്ലാ പേജുകളും OCR ചെയ്യും", - "8": "സാധാരണ (PDF-ൽ ടെക്സ്റ്റ് ഉണ്ടെങ്കിൽ പിശക് സംഭവിക്കും)", - "9": "അധിക ക്രമീകരണങ്ങൾ", - "10": "OCR മോഡ്", - "11": "OCR-ന് ശേഷം ചിത്രങ്ങൾ നീക്കം ചെയ്യുക (എല്ലാ ചിത്രങ്ങളും നീക്കംചെയ്യുന്നു, പരിവർത്തന ഘട്ടത്തിന്റെ ഭാഗമാണെങ്കിൽ മാത്രം ഉപയോഗപ്രദം)", - "12": "റെൻഡർ തരം (വിപുലമായത്)" - }, - "help": "മറ്റ് ഭാഷകൾക്കായി ഇത് എങ്ങനെ ഉപയോഗിക്കാമെന്നും കൂടാതെ/അല്ലെങ്കിൽ ഡോക്കറിൽ ഉപയോഗിക്കാതിരിക്കുന്നതിനെക്കുറിച്ചും ഈ ഡോക്യുമെന്റേഷൻ വായിക്കുക", - "credit": "ഈ സേവനം OCR-നായി qpdf, Tesseract എന്നിവ ഉപയോഗിക്കുന്നു.", - "submit": "OCR ഉപയോഗിച്ച് PDF പ്രോസസ്സ് ചെയ്യുക" - }, - "extractImages": { - "tags": "ചിത്രം,ഫോട്ടോ,സംരക്ഷിക്കുക,ആർക്കൈവ്,സിപ്പ്,പിടിച്ചെടുക്കുക,നേടുക", - "title": "ചിത്രങ്ങൾ വേർതിരിച്ചെടുക്കുക", - "header": "ചിത്രങ്ങൾ വേർതിരിച്ചെടുക്കുക", - "selectText": "വേർതിരിച്ചെടുത്ത ചിത്രങ്ങൾ പരിവർത്തനം ചെയ്യേണ്ട ഇമേജ് ഫോർമാറ്റ് തിരഞ്ഞെടുക്കുക", - "allowDuplicates": "തനിപ്പകർപ്പ് ചിത്രങ്ങൾ സംരക്ഷിക്കുക", - "submit": "വേർതിരിച്ചെടുക്കുക" - }, - "pdfToPDFA": { - "tags": "ആർക്കൈവ്,ദീർഘകാല,മാനദണ്ഡം,പരിവർത്തനം,സംഭരണം,സംരക്ഷണം", - "title": "PDF PDF/A-ലേക്ക്", - "header": "PDF PDF/A-ലേക്ക്", - "credit": "ഈ സേവനം PDF/A പരിവർത്തനത്തിനായി libreoffice ഉപയോഗിക്കുന്നു", - "submit": "പരിവർത്തനം ചെയ്യുക", - "tip": "നിലവിൽ ഒരേസമയം ഒന്നിലധികം ഇൻപുട്ടുകൾക്കായി പ്രവർത്തിക്കുന്നില്ല", - "outputFormat": "ഔട്ട്‌പുട്ട് ഫോർമാറ്റ്", - "pdfWithDigitalSignature": "PDF-ൽ ഒരു ഡിജിറ്റൽ ഒപ്പ് അടങ്ങിയിരിക്കുന്നു. അടുത്ത ഘട്ടത്തിൽ ഇത് നീക്കം ചെയ്യപ്പെടും." - }, - "PDFToWord": { - "tags": "doc,docx,odt,വേഡ്,രൂപാന്തരം,ഫോർമാറ്റ്,പരിവർത്തനം,ഓഫീസ്,മൈക്രോസോഫ്റ്റ്,ഡോക്ഫയൽ", - "title": "PDF വേഡിലേക്ക്", - "header": "PDF വേഡിലേക്ക്", - "selectText": { - "1": "ഔട്ട്‌പുട്ട് ഫയൽ ഫോർമാറ്റ്" - }, - "credit": "ഈ സേവനം ഫയൽ പരിവർത്തനത്തിനായി LibreOffice ഉപയോഗിക്കുന്നു.", - "submit": "പരിവർത്തനം ചെയ്യുക" - }, - "PDFToPresentation": { - "tags": "സ്ലൈഡുകൾ,ഷോ,ഓഫീസ്,മൈക്രോസോഫ്റ്റ്", - "title": "PDF പ്രസന്റേഷനിലേക്ക്", - "header": "PDF പ്രസന്റേഷനിലേക്ക്", - "selectText": { - "1": "ഔട്ട്‌പുട്ട് ഫയൽ ഫോർമാറ്റ്" - }, - "credit": "ഈ സേവനം ഫയൽ പരിവർത്തനത്തിനായി LibreOffice ഉപയോഗിക്കുന്നു.", - "submit": "പരിവർത്തനം ചെയ്യുക" - }, - "PDFToText": { - "tags": "റിച്ച്ഫോർമാറ്റ്,റിച്ച്‌ടെക്സ്റ്റ്ഫോർമാറ്റ്,റിച്ച് ടെക്സ്റ്റ് ഫോർമാറ്റ്", - "title": "PDF RTF-ലേക്ക് (ടെക്സ്റ്റ്)", - "header": "PDF RTF-ലേക്ക് (ടെക്സ്റ്റ്)", - "selectText": { - "1": "ഔട്ട്‌പുട്ട് ഫയൽ ഫോർമാറ്റ്" - }, - "credit": "ഈ സേവനം ഫയൽ പരിവർത്തനത്തിനായി LibreOffice ഉപയോഗിക്കുന്നു.", - "submit": "പരിവർത്തനം ചെയ്യുക" - }, - "PDFToHTML": { - "tags": "വെബ് ഉള്ളടക്കം,ബ്രൗസർ സൗഹൃദം", - "title": "PDF HTML-ലേക്ക്", - "header": "PDF HTML-ലേക്ക്", - "credit": "ഈ സേവനം ഫയൽ പരിവർത്തനത്തിനായി pdftohtml ഉപയോഗിക്കുന്നു.", - "submit": "പരിവർത്തനം ചെയ്യുക" - }, - "PDFToXML": { - "tags": "ഡാറ്റ-എക്സ്ട്രാക്ഷൻ,ഘടനയുള്ള-ഉള്ളടക്കം,ഇന്ററോപ്പ്,രൂപാന്തരം,പരിവർത്തനം ചെയ്യുക", - "title": "PDF XML-ലേക്ക്", - "header": "PDF XML-ലേക്ക്", - "credit": "ഈ സേവനം ഫയൽ പരിവർത്തനത്തിനായി LibreOffice ഉപയോഗിക്കുന്നു.", - "submit": "പരിവർത്തനം ചെയ്യുക" - }, - "ScannerImageSplit": { - "tags": "വേർതിരിക്കുക,സ്വയം-കണ്ടെത്തുക,സ്കാനുകൾ,മൾട്ടി-ഫോട്ടോ,ക്രമീകരിക്കുക", - "selectText": { - "1": "കോൺ പരിധി:", - "2": "ചിത്രം തിരിക്കുന്നതിന് ആവശ്യമായ ഏറ്റവും കുറഞ്ഞ കേവല കോൺ സജ്ജമാക്കുന്നു (സ്ഥിരസ്ഥിതി: 10).", - "3": "സഹിഷ്ണുത:", - "4": "കണക്കാക്കിയ പശ്ചാത്തല നിറത്തിന് ചുറ്റുമുള്ള വർണ്ണ വ്യതിയാനത്തിന്റെ പരിധി നിർണ്ണയിക്കുന്നു (സ്ഥിരസ്ഥിതി: 30).", - "5": "കുറഞ്ഞ വിസ്തീർണ്ണം:", - "6": "ഒരു ഫോട്ടോയ്ക്കുള്ള കുറഞ്ഞ വിസ്തീർണ്ണ പരിധി സജ്ജമാക്കുന്നു (സ്ഥിരസ്ഥിതി: 10000).", - "7": "കുറഞ്ഞ കോണ്ടൂർ വിസ്തീർണ്ണം:", - "8": "ഒരു ഫോട്ടോയ്ക്കുള്ള കുറഞ്ഞ കോണ്ടൂർ വിസ്തീർണ്ണ പരിധി സജ്ജമാക്കുന്നു", - "9": "അതിർത്തി വലുപ്പം:", - "10": "ഔട്ട്‌പുട്ടിൽ വെളുത്ത അതിരുകൾ ഉണ്ടാകുന്നത് തടയാൻ ചേർത്തതും നീക്കം ചെയ്തതുമായ അതിർത്തിയുടെ വലുപ്പം സജ്ജമാക്കുന്നു (സ്ഥിരസ്ഥിതി: 1)." - }, - "info": "പൈത്തൺ ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല. ഇത് പ്രവർത്തിപ്പിക്കാൻ ആവശ്യമാണ്." - }, - "sign": { - "tags": "അംഗീകരിക്കുക,ആദ്യാക്ഷരങ്ങൾ,വരച്ച-ഒപ്പ്,ടെക്സ്റ്റ്-ഒപ്പ്,ചിത്ര-ഒപ്പ്", - "title": "ഒപ്പിടുക", - "header": "PDF-കൾ ഒപ്പിടുക", - "upload": "ചിത്രം അപ്‌ലോഡ് ചെയ്യുക", - "draw": "ഒപ്പ് വരയ്ക്കുക", - "text": "ടെക്സ്റ്റ് ഇൻപുട്ട്", - "clear": "മായ്ക്കുക", - "add": "ചേർക്കുക", - "saved": "സംരക്ഷിച്ച ഒപ്പുകൾ", - "save": "ഒപ്പ് സംരക്ഷിക്കുക", - "personalSigs": "വ്യക്തിഗത ഒപ്പുകൾ", - "sharedSigs": "പങ്കിട്ട ഒപ്പുകൾ", - "noSavedSigs": "സംരക്ഷിച്ച ഒപ്പുകളൊന്നും കണ്ടെത്തിയില്ല", - "addToAll": "എല്ലാ പേജുകളിലേക്കും ചേർക്കുക", - "delete": "മായ്ക്കുക", - "first": "ആദ്യ പേജ്", - "last": "അവസാന പേജ്", - "next": "അടുത്ത പേജ്", - "previous": "മുമ്പത്തെ പേജ്", - "maintainRatio": "വീക്ഷണാനുപാതം നിലനിർത്തുക ടോഗിൾ ചെയ്യുക", - "undo": "പഴയപടി ആക്കുക", - "redo": "വീണ്ടും ചെയ്യുക" - }, - "flatten": { - "tags": "സ്ഥിരം,പ്രവർത്തനരഹിതമാക്കുക,നോൺ-ഇന്ററാക്ടീവ്,ലഘൂകരിക്കുക", - "title": "പരത്തുക", - "header": "PDF-കൾ പരത്തുക", - "flattenOnlyForms": "ഫോമുകൾ മാത്രം പരത്തുക", - "submit": "പരത്തുക" - }, - "repair": { - "tags": "പരിഹരിക്കുക,പുനഃസ്ഥാപിക്കുക,തിരുത്തൽ,വീണ്ടെടുക്കുക", - "title": "നന്നാക്കുക", - "header": "PDF-കൾ നന്നാക്കുക", - "submit": "നന്നാക്കുക" - }, - "removeBlanks": { - "tags": "വൃത്തിയാക്കൽ,ലഘൂകരിക്കുക,ഉള്ളടക്കമില്ലാത്ത,ക്രമീകരിക്കുക", - "title": "ശൂന്യമായവ നീക്കം ചെയ്യുക", - "header": "ശൂന്യമായ പേജുകൾ നീക്കം ചെയ്യുക", - "threshold": "പിക്സൽ വെളുപ്പ് പരിധി:", - "thresholdDesc": "'വെള്ള' എന്ന് തരംതിരിക്കാൻ ഒരു വെളുത്ത പിക്സൽ എത്ര വെളുത്തതായിരിക്കണം എന്ന് നിർണ്ണയിക്കുന്നതിനുള്ള പരിധി. 0 = കറുപ്പ്, 255 ശുദ്ധമായ വെളുപ്പ്.", - "whitePercent": "വെളുപ്പ് ശതമാനം (%):", - "whitePercentDesc": "നീക്കം ചെയ്യേണ്ട 'വെളുത്ത' പിക്സലുകൾ അടങ്ങിയ പേജിന്റെ ശതമാനം", - "submit": "ശൂന്യമായവ നീക്കം ചെയ്യുക" - }, - "removeAnnotations": { - "tags": "അഭിപ്രായങ്ങൾ,ഹൈലൈറ്റ്,കുറിപ്പുകൾ,മാർക്ക്അപ്പ്,നീക്കം ചെയ്യുക", - "title": "വ്യാഖ്യാനങ്ങൾ നീക്കം ചെയ്യുക", - "header": "വ്യാഖ്യാനങ്ങൾ നീക്കം ചെയ്യുക", - "submit": "നീക്കം ചെയ്യുക" - }, - "compare": { - "tags": "വേർതിരിക്കുക,വ്യത്യാസം,മാറ്റങ്ങൾ,വിശകലനം", - "title": "താരതമ്യം ചെയ്യുക", - "header": "PDF-കൾ താരതമ്യം ചെയ്യുക", - "highlightColor": { - "1": "ഹൈലൈറ്റ് നിറം 1:", - "2": "ഹൈലൈറ്റ് നിറം 2:" - }, - "document": { - "1": "പ്രമാണം 1", - "2": "പ്രമാണം 2" - }, - "submit": "താരതമ്യം ചെയ്യുക", - "complex": { - "message": "നൽകിയിട്ടുള്ള ഒന്നോ രണ്ടോ പ്രമാണങ്ങൾ വലിയ ഫയലുകളാണ്, താരതമ്യത്തിന്റെ കൃത്യത കുറഞ്ഞേക്കാം" - }, - "large": { - "file": { - "message": "നൽകിയിട്ടുള്ള ഒന്നോ രണ്ടോ പ്രമാണങ്ങൾ പ്രോസസ്സ് ചെയ്യാൻ കഴിയാത്തത്ര വലുതാണ്" - } - }, - "no": { - "text": { - "message": "തിരഞ്ഞെടുത്ത ഒന്നോ രണ്ടോ PDF-കളിൽ ടെക്സ്റ്റ് ഉള്ളടക്കമില്ല. താരതമ്യത്തിനായി ടെക്സ്റ്റ് ഉള്ള PDF-കൾ തിരഞ്ഞെടുക്കുക." - } - } - }, - "certSign": { - "tags": "സ്ഥിരീകരിക്കുക,PEM,P12,ഔദ്യോഗികം,എൻക്രിപ്റ്റ് ചെയ്യുക", - "title": "സർട്ടിഫിക്കറ്റ് ഒപ്പിടൽ", - "header": "നിങ്ങളുടെ സർട്ടിഫിക്കറ്റ് ഉപയോഗിച്ച് ഒരു PDF ഒപ്പിടുക (നിർമ്മാണത്തിലിരിക്കുന്നു)", - "selectPDF": "ഒപ്പിടുന്നതിനായി ഒരു PDF ഫയൽ തിരഞ്ഞെടുക്കുക:", - "jksNote": "ശ്രദ്ധിക്കുക: നിങ്ങളുടെ സർട്ടിഫിക്കറ്റ് തരം താഴെ ലിസ്റ്റ് ചെയ്തിട്ടില്ലെങ്കിൽ, ദയവായി കീടൂൾ കമാൻഡ് ലൈൻ ടൂൾ ഉപയോഗിച്ച് അതിനെ ഒരു ജാവ കീസ്റ്റോർ (.jks) ഫയലിലേക്ക് മാറ്റുക. തുടർന്ന്, താഴെയുള്ള .jks ഫയൽ ഓപ്ഷൻ തിരഞ്ഞെടുക്കുക.", - "selectKey": "നിങ്ങളുടെ സ്വകാര്യ കീ ഫയൽ തിരഞ്ഞെടുക്കുക (PKCS#8 ഫോർമാറ്റ്, .pem അല്ലെങ്കിൽ .der ആകാം):", - "selectCert": "നിങ്ങളുടെ സർട്ടിഫിക്കറ്റ് ഫയൽ തിരഞ്ഞെടുക്കുക (X.509 ഫോർമാറ്റ്, .pem അല്ലെങ്കിൽ .der ആകാം):", - "selectP12": "നിങ്ങളുടെ PKCS#12 കീസ്റ്റോർ ഫയൽ (.p12 അല്ലെങ്കിൽ .pfx) തിരഞ്ഞെടുക്കുക (ഓപ്ഷണൽ, നൽകിയിട്ടുണ്ടെങ്കിൽ, അതിൽ നിങ്ങളുടെ സ്വകാര്യ കീയും സർട്ടിഫിക്കറ്റും അടങ്ങിയിരിക്കണം):", - "selectJKS": "നിങ്ങളുടെ ജാവ കീസ്റ്റോർ ഫയൽ (.jks അല്ലെങ്കിൽ .keystore) തിരഞ്ഞെടുക്കുക:", - "certType": "സർട്ടിഫിക്കറ്റ് തരം", - "password": "നിങ്ങളുടെ കീസ്റ്റോർ അല്ലെങ്കിൽ സ്വകാര്യ കീ പാസ്‌വേഡ് നൽകുക (ഉണ്ടെങ്കിൽ):", - "showSig": "ഒപ്പ് കാണിക്കുക", - "reason": "കാരണം", - "location": "സ്ഥലം", - "name": "പേര്", - "showLogo": "ലോഗോ കാണിക്കുക", - "submit": "PDF ഒപ്പിടുക" - }, - "removeCertSign": { - "tags": "സ്ഥിരീകരിക്കുക,PEM,P12,ഔദ്യോഗികം,ഡീക്രിപ്റ്റ് ചെയ്യുക", - "title": "സർട്ടിഫിക്കറ്റ് ഒപ്പ് നീക്കം ചെയ്യുക", - "header": "PDF-ൽ നിന്ന് ഡിജിറ്റൽ സർട്ടിഫിക്കറ്റ് നീക്കം ചെയ്യുക", - "selectPDF": "ഒരു PDF ഫയൽ തിരഞ്ഞെടുക്കുക:", - "submit": "ഒപ്പ് നീക്കം ചെയ്യുക" - }, - "pageLayout": { - "tags": "ലയിപ്പിക്കുക,സംയോജിപ്പിക്കുക,ഒറ്റ-കാഴ്ച,ക്രമീകരിക്കുക", - "title": "മൾട്ടി പേജ് ലേഔട്ട്", - "header": "മൾട്ടി പേജ് ലേഔട്ട്", - "pagesPerSheet": "ഓരോ ഷീറ്റിലെയും പേജുകൾ:", - "addBorder": "അതിരുകൾ ചേർക്കുക", - "submit": "സമർപ്പിക്കുക" - }, - "scalePages": { - "tags": "വലുപ്പം മാറ്റുക,പരിഷ്ക്കരിക്കുക,അളവ്,അനുയോജ്യമാക്കുക", - "title": "പേജ്-സ്കെയിൽ ക്രമീകരിക്കുക", - "header": "പേജ്-സ്കെയിൽ ക്രമീകരിക്കുക", - "pageSize": "പ്രമാണത്തിലെ ഒരു പേജിന്റെ വലുപ്പം.", - "keepPageSize": "യഥാർത്ഥ വലുപ്പം", - "scaleFactor": "ഒരു പേജിന്റെ സൂം നില (ക്രോപ്പ്).", - "submit": "സമർപ്പിക്കുക" - }, - "add-page-numbers": { - "tags": "പേജ് നമ്പർ നൽകുക,ലേബൽ,ക്രമീകരിക്കുക,സൂചിക" - }, - "auto-rename": { - "tags": "സ്വയം-കണ്ടെത്തുക,തലക്കെട്ട്-അടിസ്ഥാനമാക്കിയുള്ള,ക്രമീകരിക്കുക,പുനർലേബൽ ചെയ്യുക", - "title": "സ്വയം പുനർനാമകരണം ചെയ്യുക", - "header": "PDF സ്വയം പുനർനാമകരണം ചെയ്യുക", - "submit": "സ്വയം പുനർനാമകരണം ചെയ്യുക" - }, - "adjust-contrast": { - "tags": "നിറം-തിരുത്തൽ,ട്യൂൺ ചെയ്യുക,പരിഷ്ക്കരിക്കുക,മെച്ചപ്പെടുത്തുക" - }, - "crop": { - "tags": "മുറിക്കുക,ചുരുക്കുക,തിരുത്തുക,രൂപം", - "title": "ക്രോപ്പ് ചെയ്യുക", - "header": "PDF ക്രോപ്പ് ചെയ്യുക", - "submit": "സമർപ്പിക്കുക" - }, - "autoSplitPDF": { - "tags": "QR-അടിസ്ഥാനമാക്കിയുള്ള,വേർതിരിക്കുക,സ്കാൻ-സെഗ്മെന്റ്,ക്രമീകരിക്കുക", - "title": "PDF സ്വയം വിഭജിക്കുക", - "header": "PDF സ്വയം വിഭജിക്കുക", - "description": "അച്ചടിക്കുക, തിരുകുക, സ്കാൻ ചെയ്യുക, അപ്‌ലോഡ് ചെയ്യുക, നിങ്ങളുടെ പ്രമാണങ്ങൾ ഞങ്ങൾ സ്വയം വേർതിരിക്കട്ടെ. സ്വയം അടുക്കേണ്ട ആവശ്യമില്ല.", - "selectText": { - "1": "താഴെ നിന്ന് കുറച്ച് വിഭജന ഷീറ്റുകൾ അച്ചടിക്കുക (കറുപ്പും വെളുപ്പും മതി).", - "2": "അവയ്ക്കിടയിൽ വിഭജന ഷീറ്റ് തിരുകി നിങ്ങളുടെ എല്ലാ പ്രമാണങ്ങളും ഒരേസമയം സ്കാൻ ചെയ്യുക.", - "3": "ഒരൊറ്റ വലിയ സ്കാൻ ചെയ്ത PDF ഫയൽ അപ്‌ലോഡ് ചെയ്യുക, ബാക്കിയുള്ളവ സ്റ്റെർലിംഗ് PDF കൈകാര്യം ചെയ്യട്ടെ.", - "4": "വിഭജന പേജുകൾ സ്വയം കണ്ടെത്തുകയും നീക്കം ചെയ്യുകയും ചെയ്യുന്നു, ഇത് വൃത്തിയുള്ള അന്തിമ പ്രമാണം ഉറപ്പാക്കുന്നു." - }, - "formPrompt": "സ്റ്റെർലിംഗ്-PDF പേജ് വിഭജനങ്ങൾ അടങ്ങിയ PDF സമർപ്പിക്കുക:", - "duplexMode": "ഡ്യൂപ്ലെക്സ് മോഡ് (മുന്നിലും പിന്നിലും സ്കാനിംഗ്)", - "dividerDownload2": "'ഓട്ടോ സ്പ്ലിറ്റർ ഡിവൈഡർ (നിർദ്ദേശങ്ങളോടുകൂടി).pdf' ഡൗൺലോഡ് ചെയ്യുക", - "submit": "സമർപ്പിക്കുക" - }, - "sanitizePdf": { - "tags": "വൃത്തിയാക്കുക,സുരക്ഷിതമാക്കുക,സുരക്ഷിതം,ഭീഷണികൾ-നീക്കം ചെയ്യുക" - }, - "URLToPDF": { - "tags": "വെബ്-ക്യാപ്ചർ,പേജ്-സംരക്ഷിക്കുക,വെബ്-ടു-ഡോക്,ആർക്കൈവ്", - "title": "URL PDF-ലേക്ക്", - "header": "URL PDF-ലേക്ക്", - "submit": "പരിവർത്തനം ചെയ്യുക", - "credit": "WeasyPrint ഉപയോഗിക്കുന്നു" - }, - "HTMLToPDF": { - "tags": "മാർക്ക്അപ്പ്,വെബ്-ഉള്ളടക്കം,രൂപാന്തരം,പരിവർത്തനം ചെയ്യുക", - "title": "HTML PDF-ലേക്ക്", - "header": "HTML PDF-ലേക്ക്", - "help": "HTML ഫയലുകളും html/css/ചിത്രങ്ങൾ തുടങ്ങിയവ അടങ്ങിയ ZIP-കളും സ്വീകരിക്കുന്നു", - "submit": "പരിവർത്തനം ചെയ്യുക", - "credit": "WeasyPrint ഉപയോഗിക്കുന്നു", - "zoom": "വെബ്സൈറ്റ് പ്രദർശിപ്പിക്കുന്നതിനുള്ള സൂം നില.", - "pageWidth": "പേജിന്റെ വീതി സെന്റീമീറ്ററിൽ. (സ്ഥിരസ്ഥിതിക്കായി ശൂന്യമാക്കുക)", - "pageHeight": "പേജിന്റെ ഉയരം സെന്റീമീറ്ററിൽ. (സ്ഥിരസ്ഥിതിക്കായി ശൂന്യമാക്കുക)", - "marginTop": "പേജിന്റെ മുകളിലെ മാർജിൻ മില്ലിമീറ്ററിൽ. (സ്ഥിരസ്ഥിതിക്കായി ശൂന്യമാക്കുക)", - "marginBottom": "പേജിന്റെ താഴത്തെ മാർജിൻ മില്ലിമീറ്ററിൽ. (സ്ഥിരസ്ഥിതിക്കായി ശൂന്യമാക്കുക)", - "marginLeft": "പേജിന്റെ ഇടത് മാർജിൻ മില്ലിമീറ്ററിൽ. (സ്ഥിരസ്ഥിതിക്കായി ശൂന്യമാക്കുക)", - "marginRight": "പേജിന്റെ വലത് മാർജിൻ മില്ലിമീറ്ററിൽ. (സ്ഥിരസ്ഥിതിക്കായി ശൂന്യമാക്കുക)", - "printBackground": "വെബ്സൈറ്റുകളുടെ പശ്ചാത്തലം റെൻഡർ ചെയ്യുക.", - "defaultHeader": "സ്ഥിരസ്ഥിതി തലക്കെട്ട് പ്രവർത്തനക്ഷമമാക്കുക (പേരും പേജ് നമ്പറും)", - "cssMediaType": "പേജിന്റെ CSS മീഡിയ തരം മാറ്റുക.", - "none": "ഒന്നുമില്ല", - "print": "അച്ചടിക്കുക", - "screen": "സ്ക്രീൻ" - }, - "MarkdownToPDF": { - "tags": "മാർക്ക്അപ്പ്,വെബ്-ഉള്ളടക്കം,രൂപാന്തരം,പരിവർത്തനം ചെയ്യുക,md", - "title": "മാർക്ക്ഡൗൺ PDF-ലേക്ക്", - "header": "മാർക്ക്ഡൗൺ PDF-ലേക്ക്", - "submit": "പരിവർത്തനം ചെയ്യുക", - "help": "നിർമ്മാണത്തിലിരിക്കുന്നു", - "credit": "WeasyPrint ഉപയോഗിക്കുന്നു" - }, - "PDFToMarkdown": { - "tags": "മാർക്ക്അപ്പ്,വെബ്-ഉള്ളടക്കം,രൂപാന്തരം,പരിവർത്തനം ചെയ്യുക,md", - "title": "PDF മാർക്ക്ഡൗണിലേക്ക്", - "header": "PDF മാർക്ക്ഡൗണിലേക്ക്", - "submit": "പരിവർത്തനം ചെയ്യുക" - }, - "getPdfInfo": { - "tags": "വിവരം,ഡാറ്റ,സ്ഥിതിവിവരക്കണക്കുകൾ,സ്ഥിതിവിവരക്കണക്കുകൾ", - "title": "PDF-നെക്കുറിച്ചുള്ള വിവരങ്ങൾ നേടുക", - "header": "PDF-നെക്കുറിച്ചുള്ള വിവരങ്ങൾ നേടുക", - "submit": "വിവരങ്ങൾ നേടുക", - "downloadJson": "JSON ഡൗൺലോഡ് ചെയ്യുക" - }, - "extractPage": { - "tags": "വേർതിരിച്ചെടുക്കുക" - }, - "PdfToSinglePage": { - "tags": "ഒറ്റ പേജ്" - }, - "showJS": { - "tags": "JS", - "title": "ജാവാസ്ക്രിപ്റ്റ് കാണിക്കുക", - "header": "ജാവാസ്ക്രിപ്റ്റ് കാണിക്കുക", - "downloadJS": "ജാവാസ്ക്രിപ്റ്റ് ഡൗൺലോഡ് ചെയ്യുക", - "submit": "കാണിക്കുക" - }, - "autoRedact": { - "tags": "റെഡാക്റ്റ്,മറയ്ക്കുക,കറുപ്പിക്കുക,കറുപ്പ്,മാർക്കർ,മറഞ്ഞിരിക്കുന്ന", - "title": "സ്വയം റെഡാക്റ്റ് ചെയ്യുക", - "header": "സ്വയം റെഡാക്റ്റ് ചെയ്യുക", - "colorLabel": "നിറം", - "textsToRedactLabel": "റെഡാക്റ്റ് ചെയ്യേണ്ട ടെക്സ്റ്റ് (വരികളാൽ വേർതിരിച്ചത്)", - "textsToRedactPlaceholder": "ഉദാ. \\nരഹസ്യം \\nഅതീവ-രഹസ്യം", - "useRegexLabel": "റെഗുലർ എക്സ്പ്രഷൻ ഉപയോഗിക്കുക", - "wholeWordSearchLabel": "മുഴുവൻ വാക്ക് തിരയൽ", - "customPaddingLabel": "ഇഷ്ടാനുസൃത അധിക പാഡിംഗ്", - "convertPDFToImageLabel": "PDF-നെ PDF-ചിത്രത്തിലേക്ക് മാറ്റുക (ബോക്സിന് പിന്നിലെ ടെക്സ്റ്റ് നീക്കം ചെയ്യാൻ ഉപയോഗിക്കുന്നു)", - "submitButton": "സമർപ്പിക്കുക" - }, - "redact": { - "tags": "റെഡാക്റ്റ്,മറയ്ക്കുക,കറുപ്പിക്കുക,കറുപ്പ്,മാർക്കർ,മറഞ്ഞിരിക്കുന്ന,സ്വയം", - "title": "സ്വയം റെഡാക്ഷൻ", - "header": "സ്വയം റെഡാക്ഷൻ", - "submit": "റെഡാക്റ്റ് ചെയ്യുക", - "textBasedRedaction": "ടെക്സ്റ്റ് അടിസ്ഥാനമാക്കിയുള്ള റെഡാക്ഷൻ", - "pageBasedRedaction": "പേജ് അടിസ്ഥാനമാക്കിയുള്ള റെഡാക്ഷൻ", - "convertPDFToImageLabel": "PDF-നെ PDF-ചിത്രത്തിലേക്ക് മാറ്റുക (ബോക്സിന് പിന്നിലെ ടെക്സ്റ്റ് നീക്കം ചെയ്യാൻ ഉപയോഗിക്കുന്നു)", - "pageRedactionNumbers": { - "title": "പേജുകൾ", - "placeholder": "(ഉദാ. 1,2,8 അല്ലെങ്കിൽ 4,7,12-16 അല്ലെങ്കിൽ 2n-1)" - }, - "redactionColor": { - "title": "റെഡാക്ഷൻ നിറം" - }, - "export": "കയറ്റുമതി ചെയ്യുക", - "upload": "അപ്‌ലോഡ് ചെയ്യുക", - "boxRedaction": "ബോക്സ് വരച്ച് റെഡാക്ഷൻ", - "zoom": "സൂം", - "zoomIn": "സൂം ഇൻ", - "zoomOut": "സൂം ഔട്ട്", - "nextPage": "അടുത്ത പേജ്", - "previousPage": "മുമ്പത്തെ പേജ്", - "toggleSidebar": "സൈഡ്‌ബാർ ടോഗിൾ ചെയ്യുക", - "showThumbnails": "ലഘുചിത്രങ്ങൾ കാണിക്കുക", - "showDocumentOutline": "പ്രമാണ രൂപരേഖ കാണിക്കുക (എല്ലാ ഇനങ്ങളും വികസിപ്പിക്കാനും/ചുരുക്കാനും ഇരട്ട-ക്ലിക്ക് ചെയ്യുക)", - "showAttatchments": "അറ്റാച്ച്‌മെന്റുകൾ കാണിക്കുക", - "showLayers": "പാളികൾ കാണിക്കുക (എല്ലാ പാളികളും സ്ഥിരസ്ഥിതിയിലേക്ക് പുനഃസജ്ജമാക്കാൻ ഇരട്ട-ക്ലിക്ക് ചെയ്യുക)", - "colourPicker": "നിറം തിരഞ്ഞെടുക്കാനുള്ള ഉപകരണം", - "findCurrentOutlineItem": "നിലവിലെ രൂപരേഖാ ഇനം കണ്ടെത്തുക", - "applyChanges": "മാറ്റങ്ങൾ പ്രയോഗിക്കുക" - }, - "tableExtraxt": { - "tags": "CSV,പട്ടിക വേർതിരിച്ചെടുക്കൽ,വേർതിരിച്ചെടുക്കുക,പരിവർത്തനം ചെയ്യുക" - }, - "autoSizeSplitPDF": { - "tags": "pdf,വിഭജിക്കുക,പ്രമാണം,സംഘടന" - }, - "overlay-pdfs": { - "tags": "ഓവർലേ", - "header": "PDF ഫയലുകൾ ഓവർലേ ചെയ്യുക", - "baseFile": { - "label": "അടിസ്ഥാന PDF ഫയൽ തിരഞ്ഞെടുക്കുക" - }, - "overlayFiles": { - "label": "ഓവർലേ PDF ഫയലുകൾ തിരഞ്ഞെടുക്കുക" - }, - "mode": { - "label": "ഓവർലേ മോഡ് തിരഞ്ഞെടുക്കുക", - "sequential": "ക്രമീകൃത ഓവർലേ", - "interleaved": "ഇടകലർന്ന ഓവർലേ", - "fixedRepeat": "നിശ്ചിത ആവർത്തന ഓവർലേ" - }, - "counts": { - "label": "ഓവർലേ എണ്ണം (നിശ്ചിത ആവർത്തന മോഡിനായി)", - "placeholder": "കോമയാൽ വേർതിരിച്ച എണ്ണം നൽകുക (ഉദാ., 2,3,1)" - }, - "position": { - "label": "ഓവർലേ സ്ഥാനം തിരഞ്ഞെടുക്കുക", - "foreground": "മുൻഭാഗം", - "background": "പശ്ചാത്തലം" - }, - "submit": "സമർപ്പിക്കുക" - }, - "split-by-sections": { - "tags": "വിഭാഗം വിഭജനം, വിഭജിക്കുക, ഇഷ്ടാനുസൃതമാക്കുക", - "title": "വിഭാഗങ്ങൾ അനുസരിച്ച് PDF വിഭജിക്കുക", - "header": "PDF വിഭാഗങ്ങളായി വിഭജിക്കുക", - "horizontal": { - "label": "തിരശ്ചീന വിഭജനങ്ങൾ", - "placeholder": "തിരശ്ചീന വിഭജനങ്ങളുടെ എണ്ണം നൽകുക" - }, - "vertical": { - "label": "ലംബ വിഭജനങ്ങൾ", - "placeholder": "ലംബ വിഭജനങ്ങളുടെ എണ്ണം നൽകുക" - }, - "submit": "PDF വിഭജിക്കുക", - "merge": "ഒരൊറ്റ PDF-ലേക്ക് ലയിപ്പിക്കുക" - }, - "AddStampRequest": { - "tags": "സ്റ്റാമ്പ്, ചിത്രം ചേർക്കുക, ചിത്രം മധ്യത്തിലാക്കുക, വാട്ടർമാർക്ക്, PDF, ഉൾപ്പെടുത്തുക, ഇഷ്ടാനുസൃതമാക്കുക", - "header": "PDF സ്റ്റാമ്പ് ചെയ്യുക", - "title": "PDF സ്റ്റാമ്പ് ചെയ്യുക", - "stampType": "സ്റ്റാമ്പ് തരം", - "stampText": "സ്റ്റാമ്പ് ടെക്സ്റ്റ്", - "stampImage": "സ്റ്റാമ്പ് ചിത്രം", - "alphabet": "അക്ഷരമാല", - "fontSize": "അക്ഷര/ചിത്ര വലുപ്പം", - "rotation": "തിരിക്കൽ", - "opacity": "അതാര്യത", - "position": "സ്ഥാനം", - "overrideX": "X കോർഡിനേറ്റ് മാറ്റിയെഴുതുക", - "overrideY": "Y കോർഡിനേറ്റ് മാറ്റിയെഴുതുക", - "customMargin": "ഇഷ്ടാനുസൃത മാർജിൻ", - "customColor": "ഇഷ്ടാനുസൃത ടെക്സ്റ്റ് നിറം", - "submit": "സമർപ്പിക്കുക" - }, - "removeImagePdf": { - "tags": "ചിത്രം നീക്കം ചെയ്യുക,പേജ് പ്രവർത്തനങ്ങൾ,ബാക്ക് എൻഡ്,സെർവർ സൈഡ്" - }, - "splitPdfByChapters": { - "tags": "വിഭജിക്കുക,അധ്യായങ്ങൾ,ബുക്ക്മാർക്കുകൾ,ക്രമീകരിക്കുക" - }, - "validateSignature": { - "tags": "ഒപ്പ്,പരിശോധിക്കുക,സാധൂകരിക്കുക,pdf,സർട്ടിഫിക്കറ്റ്,ഡിജിറ്റൽ ഒപ്പ്,ഒപ്പ് സാധൂകരിക്കുക,സർട്ടിഫിക്കറ്റ് സാധൂകരിക്കുക", - "title": "PDF ഒപ്പുകൾ സാധൂകരിക്കുക", - "header": "ഡിജിറ്റൽ ഒപ്പുകൾ സാധൂകരിക്കുക", - "selectPDF": "ഒപ്പിട്ട PDF ഫയൽ തിരഞ്ഞെടുക്കുക", - "submit": "ഒപ്പുകൾ സാധൂകരിക്കുക", - "results": "സാധൂകരണ ഫലങ്ങൾ", - "status": { - "_value": "സ്ഥിതി", - "valid": "സാധുവാണ്", - "invalid": "അസാധുവാണ്" - }, - "signer": "ഒപ്പിട്ടയാൾ", - "date": "തീയതി", - "reason": "കാരണം", - "location": "സ്ഥലം", - "noSignatures": "ഈ പ്രമാണത്തിൽ ഡിജിറ്റൽ ഒപ്പുകളൊന്നും കണ്ടെത്തിയില്ല", - "chain": { - "invalid": "സർട്ടിഫിക്കറ്റ് ശൃംഖല സാധൂകരണം പരാജയപ്പെട്ടു - ഒപ്പിട്ടയാളുടെ ഐഡന്റിറ്റി പരിശോധിക്കാൻ കഴിയില്ല" - }, - "trust": { - "invalid": "സർട്ടിഫിക്കറ്റ് ട്രസ്റ്റ് സ്റ്റോറിൽ ഇല്ല - ഉറവിടം പരിശോധിക്കാൻ കഴിയില്ല" - }, - "cert": { - "expired": "സർട്ടിഫിക്കറ്റ് കാലഹരണപ്പെട്ടു", - "revoked": "സർട്ടിഫിക്കറ്റ് റദ്ദാക്കിയിരിക്കുന്നു", - "info": "സർട്ടിഫിക്കറ്റ് വിശദാംശങ്ങൾ", - "issuer": "നൽകിയയാൾ", - "subject": "വിഷയം", - "serialNumber": "സീരിയൽ നമ്പർ", - "validFrom": "മുതൽ സാധുവാണ്", - "validUntil": "വരെ സാധുവാണ്", - "algorithm": "അൽഗോരിതം", - "keySize": "കീ വലുപ്പം", - "version": "പതിപ്പ്", - "keyUsage": "കീ ഉപയോഗം", - "selfSigned": "സ്വയം ഒപ്പിട്ടത്", - "bits": "ബിറ്റുകൾ" - }, - "signature": { - "info": "ഒപ്പ് വിവരങ്ങൾ", - "_value": "ഒപ്പ്", - "mathValid": "ഒപ്പ് ഗണിതശാസ്ത്രപരമായി സാധുവാണ് പക്ഷേ:" - }, - "selectCustomCert": "ഇഷ്ടാനുസൃത സർട്ടിഫിക്കറ്റ് ഫയൽ X.509 (ഓപ്ഷണൽ)" - }, - "replace-color": { - "title": "നിറം-മാറ്റുക-വിപരീതമാക്കുക", - "header": "PDF-ലെ നിറം മാറ്റുക-വിപരീതമാക്കുക", - "selectText": { - "1": "നിറം മാറ്റുന്നതിനോ വിപരീതമാക്കുന്നതിനോ ഉള്ള ഓപ്ഷനുകൾ", - "2": "സ്ഥിരസ്ഥിതി (സ്ഥിരസ്ഥിതി ഉയർന്ന കോൺട്രാസ്റ്റ് നിറങ്ങൾ)", - "3": "ഇഷ്ടാനുസൃതം (ഇഷ്ടാനുസൃതമാക്കിയ നിറങ്ങൾ)", - "4": "പൂർണ്ണ-വിപരീതം (എല്ലാ നിറങ്ങളും വിപരീതമാക്കുക)", - "5": "ഉയർന്ന കോൺട്രാസ്റ്റ് വർണ്ണ ഓപ്ഷനുകൾ", - "6": "കറുത്ത പശ്ചാത്തലത്തിൽ വെളുത്ത ടെക്സ്റ്റ്", - "7": "വെളുത്ത പശ്ചാത്തലത്തിൽ കറുത്ത ടെക്സ്റ്റ്", - "8": "കറുത്ത പശ്ചാത്തലത്തിൽ മഞ്ഞ ടെക്സ്റ്റ്", - "9": "കറുത്ത പശ്ചാത്തലത്തിൽ പച്ച ടെക്സ്റ്റ്", - "10": "ടെക്സ്റ്റ് നിറം തിരഞ്ഞെടുക്കുക", - "11": "പശ്ചാത്തല നിറം തിരഞ്ഞെടുക്കുക" - }, - "submit": "മാറ്റുക" - }, - "replaceColorPdf": { - "tags": "നിറം മാറ്റുക,പേജ് പ്രവർത്തനങ്ങൾ,ബാക്ക് എൻഡ്,സെർവർ സൈഡ്" - }, - "login": { - "title": "സൈൻ ഇൻ ചെയ്യുക", - "header": "സൈൻ ഇൻ ചെയ്യുക", - "signin": "സൈൻ ഇൻ ചെയ്യുക", - "rememberme": "എന്നെ ഓർക്കുക", - "invalid": "അസാധുവായ ഉപയോക്തൃനാമം അല്ലെങ്കിൽ പാസ്‌വേഡ്.", - "locked": "നിങ്ങളുടെ അക്കൗണ്ട് ലോക്ക് ചെയ്തിരിക്കുന്നു.", - "signinTitle": "ദയവായി സൈൻ ഇൻ ചെയ്യുക", - "ssoSignIn": "സിംഗിൾ സൈൻ-ഓൺ വഴി ലോഗിൻ ചെയ്യുക", - "oAuth2AutoCreateDisabled": "OAUTH2 ഓട്ടോ-ക്രിയേറ്റ് യൂസർ പ്രവർത്തനരഹിതമാക്കി", - "oAuth2AdminBlockedUser": "രജിസ്റ്റർ ചെയ്യാത്ത ഉപയോക്താക്കളുടെ രജിസ്ട്രേഷനോ ലോഗിൻ ചെയ്യുന്നതോ നിലവിൽ തടഞ്ഞിരിക്കുന്നു. ദയവായി അഡ്മിനിസ്ട്രേറ്ററുമായി ബന്ധപ്പെടുക.", - "oauth2RequestNotFound": "അംഗീകാര അഭ്യർത്ഥന കണ്ടെത്തിയില്ല", - "oauth2InvalidUserInfoResponse": "അസാധുവായ ഉപയോക്തൃ വിവര പ്രതികരണം", - "oauth2invalidRequest": "അസാധുവായ അഭ്യർത്ഥന", - "oauth2AccessDenied": "പ്രവേശനം നിഷേധിച്ചു", - "oauth2InvalidTokenResponse": "അസാധുവായ ടോക്കൺ പ്രതികരണം", - "oauth2InvalidIdToken": "അസാധുവായ ഐഡി ടോക്കൺ", - "relyingPartyRegistrationNotFound": "റിലയിംഗ് പാർട്ടി രജിസ്ട്രേഷൻ കണ്ടെത്തിയില്ല", - "userIsDisabled": "ഉപയോക്താവ് പ്രവർത്തനരഹിതമാക്കി, ഈ ഉപയോക്തൃനാമം ഉപയോഗിച്ചുള്ള ലോഗിൻ നിലവിൽ തടഞ്ഞിരിക്കുന്നു. ദയവായി അഡ്മിനിസ്ട്രേറ്ററുമായി ബന്ധപ്പെടുക.", - "alreadyLoggedIn": "നിങ്ങൾ ഇതിനകം ലോഗിൻ ചെയ്തിട്ടുണ്ട്", - "alreadyLoggedIn2": "ഉപകരണങ്ങളിൽ. ദയവായി ഉപകരണങ്ങളിൽ നിന്ന് ലോഗ് ഔട്ട് ചെയ്ത് വീണ്ടും ശ്രമിക്കുക.", - "toManySessions": "നിങ്ങൾക്ക് വളരെയധികം സജീവ സെഷനുകൾ ഉണ്ട്", - "logoutMessage": "നിങ്ങൾ ലോഗ് ഔട്ട് ചെയ്തു." - }, - "pdfToSinglePage": { - "title": "PDF ഒരൊറ്റ പേജിലേക്ക്", - "header": "PDF ഒരൊറ്റ പേജിലേക്ക്", - "submit": "ഒരൊറ്റ പേജിലേക്ക് മാറ്റുക" - }, - "pageExtracter": { - "title": "പേജുകൾ വേർതിരിച്ചെടുക്കുക", - "header": "പേജുകൾ വേർതിരിച്ചെടുക്കുക", - "submit": "വേർതിരിച്ചെടുക്കുക", - "placeholder": "(ഉദാ. 1,2,8 അല്ലെങ്കിൽ 4,7,12-16 അല്ലെങ്കിൽ 2n-1)" - }, - "sanitizePDF": { - "title": "PDF ശുദ്ധീകരിക്കുക", - "header": "ഒരു PDF ഫയൽ ശുദ്ധീകരിക്കുക", - "selectText": { - "1": "ജാവാസ്ക്രിപ്റ്റ് പ്രവർത്തനങ്ങൾ നീക്കം ചെയ്യുക", - "2": "ഉൾച്ചേർത്ത ഫയലുകൾ നീക്കം ചെയ്യുക", - "3": "XMP മെറ്റാഡാറ്റ നീക്കം ചെയ്യുക", - "4": "ലിങ്കുകൾ നീക്കം ചെയ്യുക", - "5": "അക്ഷരങ്ങൾ നീക്കം ചെയ്യുക", - "6": "പ്രമാണ വിവര മെറ്റാഡാറ്റ നീക്കം ചെയ്യുക" - }, - "submit": "PDF ശുദ്ധീകരിക്കുക" - }, - "adjustContrast": { - "title": "കോൺട്രാസ്റ്റ് ക്രമീകരിക്കുക", - "header": "കോൺട്രാസ്റ്റ് ക്രമീകരിക്കുക", - "contrast": "കോൺട്രാസ്റ്റ്:", - "brightness": "തെളിച്ചം:", - "saturation": "സാച്ചുറേഷൻ:", - "download": "ഡൗൺലോഡ് ചെയ്യുക" - }, - "compress": { - "title": "കംപ്രസ് ചെയ്യുക", - "header": "PDF കംപ്രസ് ചെയ്യുക", - "credit": "ഈ സേവനം PDF കംപ്രസ്/ഒപ്റ്റിമൈസേഷനായി qpdf ഉപയോഗിക്കുന്നു.", - "grayscale": { - "label": "കംപ്രഷനായി ഗ്രേസ്‌കെയിൽ പ്രയോഗിക്കുക" - }, - "selectText": { - "1": { - "_value": "കംപ്രഷൻ ക്രമീകരണങ്ങൾ", - "1": "1-3 PDF കംപ്രഷൻ,
4-6 ലൈറ്റ് ഇമേജ് കംപ്രഷൻ,
7-9 തീവ്രമായ ഇമേജ് കംപ്രഷൻ ചിത്രത്തിന്റെ ഗുണനിലവാരം ഗണ്യമായി കുറയ്ക്കും" - }, - "2": "ഒപ്റ്റിമൈസേഷൻ നില:", - "4": "ഓട്ടോ മോഡ് - PDF കൃത്യമായ വലുപ്പത്തിൽ ലഭിക്കുന്നതിന് ഗുണനിലവാരം സ്വയം ക്രമീകരിക്കുന്നു", - "5": "പ്രതീക്ഷിക്കുന്ന PDF വലുപ്പം (ഉദാ. 25MB, 10.8MB, 25KB)" - }, - "submit": "കംപ്രസ് ചെയ്യുക" - }, - "decrypt": { - "passwordPrompt": "ഈ ഫയൽ പാസ്‌വേഡ് ഉപയോഗിച്ച് സംരക്ഷിച്ചിരിക്കുന്നു. ദയവായി പാസ്‌വേഡ് നൽകുക:", - "cancelled": "PDF-നായുള്ള പ്രവർത്തനം റദ്ദാക്കി: {0}", - "noPassword": "എൻക്രിപ്റ്റ് ചെയ്ത PDF-നായി പാസ്‌വേഡ് നൽകിയിട്ടില്ല: {0}", - "invalidPassword": "ദയവായി ശരിയായ പാസ്‌വേഡ് ഉപയോഗിച്ച് വീണ്ടും ശ്രമിക്കുക.", - "invalidPasswordHeader": "PDF-നായി തെറ്റായ പാസ്‌വേഡ് അല്ലെങ്കിൽ പിന്തുണയ്ക്കാത്ത എൻക്രിപ്ഷൻ: {0}", - "unexpectedError": "ഫയൽ പ്രോസസ്സ് ചെയ്യുന്നതിൽ ഒരു പിശക് സംഭവിച്ചു. ദയവായി വീണ്ടും ശ്രമിക്കുക.", - "serverError": "ഡീക്രിപ്റ്റ് ചെയ്യുമ്പോൾ സെർവർ പിശക്: {0}", - "success": "ഫയൽ വിജയകരമായി ഡീക്രിപ്റ്റ് ചെയ്തു." - }, - "multiTool-advert": { - "message": "ഈ സവിശേഷത ഞങ്ങളുടെ മൾട്ടി-ടൂൾ പേജിലും ലഭ്യമാണ്. മെച്ചപ്പെടുത്തിയ പേജ്-ബൈ-പേജ് യുഐയ്ക്കും അധിക സവിശേഷതകൾക്കുമായി ഇത് പരിശോധിക്കുക!" - }, - "pageRemover": { - "title": "പേജ് നീക്കംചെയ്യൽ ഉപകരണം", - "header": "PDF പേജ് നീക്കംചെയ്യൽ ഉപകരണം", - "pagesToDelete": "ഇല്ലാതാക്കേണ്ട പേജുകൾ (പേജ് നമ്പറുകളുടെ കോമയാൽ വേർതിരിച്ച ലിസ്റ്റ് നൽകുക) :", - "submit": "പേജുകൾ ഇല്ലാതാക്കുക", - "placeholder": "(ഉദാ. 1,2,6 അല്ലെങ്കിൽ 1-10,15-30)" - }, - "imageToPDF": { - "title": "ചിത്രം PDF-ലേക്ക്", - "header": "ചിത്രം PDF-ലേക്ക്", - "submit": "പരിവർത്തനം ചെയ്യുക", - "selectLabel": "ചിത്രം ഫിറ്റ് ഓപ്ഷനുകൾ", - "fillPage": "പേജ് നിറയ്ക്കുക", - "fitDocumentToImage": "പേജ് ചിത്രത്തിലേക്ക് ഫിറ്റ് ചെയ്യുക", - "maintainAspectRatio": "വീക്ഷണാനുപാതം നിലനിർത്തുക", - "selectText": { - "2": "PDF സ്വയം തിരിക്കുക", - "3": "മൾട്ടി ഫയൽ ലോജിക് (ഒന്നിലധികം ചിത്രങ്ങളുമായി പ്രവർത്തിക്കുമ്പോൾ മാത്രം പ്രവർത്തനക്ഷമമാകും)", - "4": "ഒരൊറ്റ PDF-ലേക്ക് ലയിപ്പിക്കുക", - "5": "വേറിട്ട PDF-കളിലേക്ക് മാറ്റുക" - } - }, - "PDFToCSV": { - "title": "PDF CSV-ലേക്ക്", - "header": "PDF CSV-ലേക്ക്", - "prompt": "പട്ടിക വേർതിരിച്ചെടുക്കാൻ പേജ് തിരഞ്ഞെടുക്കുക", - "submit": "വേർതിരിച്ചെടുക്കുക" - }, - "split-by-size-or-count": { - "title": "വലുപ്പം അല്ലെങ്കിൽ എണ്ണം അനുസരിച്ച് PDF വിഭജിക്കുക", - "header": "വലുപ്പം അല്ലെങ്കിൽ എണ്ണം അനുസരിച്ച് PDF വിഭജിക്കുക", - "type": { - "label": "വിഭജന തരം തിരഞ്ഞെടുക്കുക", - "size": "വലുപ്പം അനുസരിച്ച്", - "pageCount": "പേജ് എണ്ണം അനുസരിച്ച്", - "docCount": "പ്രമാണങ്ങളുടെ എണ്ണം അനുസരിച്ച്" - }, - "value": { - "label": "മൂല്യം നൽകുക", - "placeholder": "വലുപ്പം (ഉദാ., 2MB അല്ലെങ്കിൽ 3KB) അല്ലെങ്കിൽ എണ്ണം (ഉദാ., 5) നൽകുക" - }, - "submit": "സമർപ്പിക്കുക" - }, - "printFile": { - "title": "ഫയൽ അച്ചടിക്കുക", - "header": "പ്രിന്ററിലേക്ക് ഫയൽ അച്ചടിക്കുക", - "selectText": { - "1": "അച്ചടിക്കേണ്ട ഫയൽ തിരഞ്ഞെടുക്കുക", - "2": "പ്രിന്റർ പേര് നൽകുക" - }, - "submit": "അച്ചടിക്കുക" - }, - "licenses": { - "nav": "ലൈസൻസുകൾ", - "title": "മൂന്നാം കക്ഷി ലൈസൻസുകൾ", - "header": "മൂന്നാം കക്ഷി ലൈസൻസുകൾ", - "module": "ഘടകം", - "version": "പതിപ്പ്", - "license": "ലൈസൻസ്" - }, - "survey": { - "nav": "സർവേ", - "title": "സ്റ്റെർലിംഗ്-PDF സർവേ", - "description": "സ്റ്റെർലിംഗ്-PDF-ന് ട്രാക്കിംഗ് ഇല്ല, അതിനാൽ സ്റ്റെർലിംഗ്-PDF മെച്ചപ്പെടുത്തുന്നതിന് ഞങ്ങളുടെ ഉപയോക്താക്കളിൽ നിന്ന് കേൾക്കാൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നു!", - "changes": "അവസാന സർവേയ്ക്ക് ശേഷം സ്റ്റെർലിംഗ്-PDF മാറിയിരിക്കുന്നു! കൂടുതൽ വിവരങ്ങൾക്കായി ദയവായി ഞങ്ങളുടെ ബ്ലോഗ് പോസ്റ്റ് ഇവിടെ പരിശോധിക്കുക:", - "changes2": "ഈ മാറ്റങ്ങളോടെ ഞങ്ങൾക്ക് പണമടച്ചുള്ള ബിസിനസ് പിന്തുണയും ഫണ്ടിംഗും ലഭിക്കുന്നു", - "please": "ദയവായി ഞങ്ങളുടെ സർവേ എടുക്കുന്നത് പരിഗണിക്കുക!", - "disabled": "(സർവേ പോപ്പ്അപ്പ് തുടർന്നുള്ള അപ്‌ഡേറ്റുകളിൽ പ്രവർത്തനരഹിതമാക്കും, എന്നാൽ പേജിന്റെ താഴെ ലഭ്യമാകും)", - "button": "സർവേ എടുക്കുക", - "dontShowAgain": "വീണ്ടും കാണിക്കരുത്", - "meeting": { - "1": "നിങ്ങൾ ജോലിസ്ഥലത്ത് സ്റ്റെർലിംഗ് PDF ഉപയോഗിക്കുകയാണെങ്കിൽ, നിങ്ങളുമായി സംസാരിക്കാൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നു. 15 മിനിറ്റ് ഉപയോക്തൃ കണ്ടെത്തൽ സെഷന് പകരമായി ഞങ്ങൾ സാങ്കേതിക പിന്തുണാ സെഷനുകൾ വാഗ്ദാനം ചെയ്യുന്നു.", - "2": "ഇതൊരു അവസരമാണ്:", - "3": "വിന്യാസം, സംയോജനം, അല്ലെങ്കിൽ ട്രബിൾഷൂട്ടിംഗ് എന്നിവയിൽ സഹായം നേടുക", - "4": "പ്രകടനം, എഡ്ജ് കേസുകൾ, ഫീച്ചർ വിടവുകൾ എന്നിവയെക്കുറിച്ച് നേരിട്ടുള്ള ഫീഡ്‌ബാക്ക് നൽകുക", - "5": "യഥാർത്ഥ ലോക എന്റർപ്രൈസ് ഉപയോഗത്തിനായി സ്റ്റെർലിംഗ് PDF പരിഷ്കരിക്കാൻ ഞങ്ങളെ സഹായിക്കുക", - "6": "നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടെങ്കിൽ, ഞങ്ങളുടെ ടീമുമായി നേരിട്ട് സമയം ബുക്ക് ചെയ്യാം. (ഇംഗ്ലീഷ് സംസാരിക്കുന്നവർ മാത്രം)", - "7": "നിങ്ങളുടെ ഉപയോഗ കേസുകളിലേക്ക് ആഴത്തിൽ ഇറങ്ങിച്ചെല്ലാനും സ്റ്റെർലിംഗ് PDF കൂടുതൽ മികച്ചതാക്കാനും ഞങ്ങൾ ആകാംക്ഷയോടെ കാത്തിരിക്കുന്നു!", - "notInterested": "ഒരു ബിസിനസ്സ് അല്ല കൂടാതെ/അല്ലെങ്കിൽ ഒരു മീറ്റിംഗിൽ താൽപ്പര്യമില്ലേ?", - "button": "മീറ്റിംഗ് ബുക്ക് ചെയ്യുക" - } - }, - "removeImage": { - "title": "ചിത്രം നീക്കം ചെയ്യുക", - "header": "ചിത്രം നീക്കം ചെയ്യുക", - "removeImage": "ചിത്രം നീക്കം ചെയ്യുക", - "submit": "ചിത്രം നീക്കം ചെയ്യുക" - }, - "splitByChapters": { - "title": "അധ്യായങ്ങൾ അനുസരിച്ച് PDF വിഭജിക്കുക", - "header": "അധ്യായങ്ങൾ അനുസരിച്ച് PDF വിഭജിക്കുക", - "bookmarkLevel": "ബുക്ക്മാർക്ക് നില", - "includeMetadata": "മെറ്റാഡാറ്റ ഉൾപ്പെടുത്തുക", - "allowDuplicates": "തനിപ്പകർപ്പുകൾ അനുവദിക്കുക", - "desc": { - "1": "ഈ ഉപകരണം ഒരു PDF ഫയലിനെ അതിന്റെ അധ്യായ ഘടനയെ അടിസ്ഥാനമാക്കി ഒന്നിലധികം PDF-കളായി വിഭജിക്കുന്നു.", - "2": "ബുക്ക്മാർക്ക് നില: വിഭജനത്തിനായി ഉപയോഗിക്കേണ്ട ബുക്ക്മാർക്കുകളുടെ നില തിരഞ്ഞെടുക്കുക (ഉന്നത നിലയ്ക്ക് 0, രണ്ടാം നിലയ്ക്ക് 1, മുതലായവ).", - "3": "മെറ്റാഡാറ്റ ഉൾപ്പെടുത്തുക: ചെക്ക് ചെയ്താൽ, യഥാർത്ഥ PDF-ന്റെ മെറ്റാഡാറ്റ ഓരോ വിഭജിച്ച PDF-ലും ഉൾപ്പെടുത്തും.", - "4": "തനിപ്പകർപ്പുകൾ അനുവദിക്കുക: ചെക്ക് ചെയ്താൽ, ഒരേ പേജിലെ ഒന്നിലധികം ബുക്ക്മാർക്കുകൾക്ക് പ്രത്യേക PDF-കൾ സൃഷ്ടിക്കാൻ അനുവദിക്കുന്നു." - }, - "submit": "PDF വിഭജിക്കുക" - }, - "fileChooser": { - "click": "ക്ലിക്ക് ചെയ്യുക", - "or": "അല്ലെങ്കിൽ", - "dragAndDrop": "വലിച്ചിടുക", - "dragAndDropPDF": "PDF ഫയൽ വലിച്ചിടുക", - "dragAndDropImage": "ചിത്ര ഫയൽ വലിച്ചിടുക", - "hoveredDragAndDrop": "ഫയൽ(കൾ) ഇവിടെ വലിച്ചിടുക", - "extractPDF": "വേർതിരിച്ചെടുക്കുന്നു..." - }, - "releases": { - "footer": "റിലീസുകൾ", - "title": "റിലീസ് കുറിപ്പുകൾ", - "header": "റിലീസ് കുറിപ്പുകൾ", - "current": { - "version": "നിലവിലെ റിലീസ്" - }, - "note": "റിലീസ് കുറിപ്പുകൾ ഇംഗ്ലീഷിൽ മാത്രമേ ലഭ്യമാകൂ" - }, - "cookieBanner": { - "popUp": { - "title": "ഞങ്ങൾ കുക്കികൾ എങ്ങനെ ഉപയോഗിക്കുന്നു", - "description": { - "1": "സ്റ്റെർലിംഗ് PDF നിങ്ങൾക്ക് മികച്ച രീതിയിൽ പ്രവർത്തിക്കാൻ ഞങ്ങൾ കുക്കികളും മറ്റ് സാങ്കേതികവിദ്യകളും ഉപയോഗിക്കുന്നു—ഞങ്ങളുടെ ടൂളുകൾ മെച്ചപ്പെടുത്താനും നിങ്ങൾ ഇഷ്ടപ്പെടുന്ന ഫീച്ചറുകൾ നിർമ്മിക്കുന്നത് തുടരാനും ഇത് ഞങ്ങളെ സഹായിക്കുന്നു.", - "2": "നിങ്ങൾക്ക് താൽപ്പര്യമില്ലെങ്കിൽ, 'വേണ്ട നന്ദി' ക്ലിക്ക് ചെയ്യുന്നത് കാര്യങ്ങൾ സുഗമമായി പ്രവർത്തിക്കാൻ ആവശ്യമായ അവശ്യ കുക്കികൾ മാത്രം പ്രവർത്തനക്ഷമമാക്കും." - }, - "acceptAllBtn": "ശരി", - "acceptNecessaryBtn": "വേണ്ട നന്ദി", - "showPreferencesBtn": "മുൻഗണനകൾ കൈകാര്യം ചെയ്യുക" - }, - "preferencesModal": { - "title": "സമ്മത മുൻഗണനാ കേന്ദ്രം", - "acceptAllBtn": "എല്ലാം സ്വീകരിക്കുക", - "acceptNecessaryBtn": "എല്ലാം നിരസിക്കുക", - "savePreferencesBtn": "മുൻഗണനകൾ സംരക്ഷിക്കുക", - "closeIconLabel": "മോഡൽ അടയ്ക്കുക", - "serviceCounterLabel": "സേവനം|സേവനങ്ങൾ", - "subtitle": "കുക്കി ഉപയോഗം", - "description": { - "1": "നിങ്ങളുടെ അനുഭവം മെച്ചപ്പെടുത്തുന്നതിനും ഞങ്ങളുടെ ടൂളുകൾ എങ്ങനെ ഉപയോഗിക്കുന്നുവെന്ന് മനസ്സിലാക്കുന്നതിനും സ്റ്റെർലിംഗ് PDF കുക്കികളും സമാന സാങ്കേതികവിദ്യകളും ഉപയോഗിക്കുന്നു. പ്രകടനം മെച്ചപ്പെടുത്താനും നിങ്ങൾ വിലമതിക്കുന്ന ഫീച്ചറുകൾ വികസിപ്പിക്കാനും ഞങ്ങളുടെ ഉപയോക്താക്കൾക്ക് തുടർന്നും പിന്തുണ നൽകാനും ഇത് ഞങ്ങളെ സഹായിക്കുന്നു.", - "2": "സ്റ്റെർലിംഗ് PDF-ന് നിങ്ങൾ ഉപയോഗിക്കുന്ന പ്രമാണങ്ങളുടെ ഉള്ളടക്കം ട്രാക്ക് ചെയ്യാനോ ആക്‌സസ് ചെയ്യാനോ കഴിയില്ല—ഒരിക്കലും കഴിയില്ല.", - "3": "നിങ്ങളുടെ സ്വകാര്യതയും വിശ്വാസവുമാണ് ഞങ്ങൾ ചെയ്യുന്നതിന്റെ കാതൽ." - }, - "necessary": { - "title": { - "1": "കർശനമായി ആവശ്യമായ കുക്കികൾ", - "2": "എപ്പോഴും പ്രവർത്തനക്ഷമം" - }, - "description": "വെബ്സൈറ്റ് ശരിയായി പ്രവർത്തിക്കാൻ ഈ കുക്കികൾ അത്യാവശ്യമാണ്. നിങ്ങളുടെ സ്വകാര്യതാ മുൻഗണനകൾ സജ്ജമാക്കുക, ലോഗിൻ ചെയ്യുക, ഫോമുകൾ പൂരിപ്പിക്കുക തുടങ്ങിയ പ്രധാന സവിശേഷതകൾ അവ പ്രവർത്തനക്ഷമമാക്കുന്നു—അതുകൊണ്ടാണ് അവ ഓഫാക്കാൻ കഴിയാത്തത്." - }, - "analytics": { - "title": "അനലിറ്റിക്സ്", - "description": "ഞങ്ങളുടെ ടൂളുകൾ എങ്ങനെ ഉപയോഗിക്കുന്നുവെന്ന് മനസ്സിലാക്കാൻ ഈ കുക്കികൾ ഞങ്ങളെ സഹായിക്കുന്നു, അതിനാൽ ഞങ്ങളുടെ കമ്മ്യൂണിറ്റി ഏറ്റവും കൂടുതൽ വിലമതിക്കുന്ന ഫീച്ചറുകൾ നിർമ്മിക്കുന്നതിൽ ഞങ്ങൾക്ക് ശ്രദ്ധ കേന്ദ്രീകരിക്കാൻ കഴിയും. ഉറപ്പാക്കുക—സ്റ്റെർലിംഗ് PDF-ന് നിങ്ങൾ പ്രവർത്തിക്കുന്ന പ്രമാണങ്ങളുടെ ഉള്ളടക്കം ട്രാക്ക് ചെയ്യാൻ കഴിയില്ല, ഒരിക്കലും കഴിയില്ല." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/nl-NL/translation.json b/frontend/dist/locales/nl-NL/translation.json deleted file mode 100644 index 7f82e8529..000000000 --- a/frontend/dist/locales/nl-NL/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Lettertypegrootte", - "fontName": "Lettertypenaam", - "title": "Paginanummers toevoegen", - "header": "Paginanummers toevoegen", - "selectText": { - "1": "Selecteer PDF-bestand:", - "2": "Margegrootte", - "3": "Positie", - "4": "Startnummer", - "5": "Pagina's om te nummeren", - "6": "Aangepaste tekst" - }, - "customTextDesc": "Aangepaste tekst", - "numberPagesDesc": "Welke pagina's genummerd moeten worden, standaard 'all', accepteert ook 1-5 of 2,5,9 etc", - "customNumberDesc": "Standaard {n}, accepteert ook 'Pagina {n} van {total}', 'Tekst-{n}', '{filename}-{n}", - "submit": "Paginanummers toevoegen" - }, - "pdfPrompt": "Selecteer PDF('s)", - "multiPdfPrompt": "Selecteer PDF's (2+)", - "multiPdfDropPrompt": "Selecteer (of sleep & zet neer) alle PDF's die je nodig hebt", - "imgPrompt": "Selecteer afbeelding(en)", - "genericSubmit": "Indienen", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Waarschuwing: Dit proces kan tot een minuut duren afhankelijk van de bestandsgrootte", - "pageOrderPrompt": "Aangepaste pagina volgorde (Voer een komma-gescheiden lijst van paginanummers of functies in, zoals 2n+1) :", - "pageSelectionPrompt": "Aangepaste pagina selectie (Voer een komma-gescheiden lijst van paginanummer 1,5,6 of functies zoals 2n+1 in) :", - "goToPage": "Ga", - "true": "Waar", - "false": "Onwaar", - "unknown": "Onbekend", - "save": "Opslaan", - "saveToBrowser": "Opslaan in browser", - "close": "Sluiten", - "filesSelected": "Bestanden geselecteerd", - "noFavourites": "Geen favorieten toegevoegd", - "downloadComplete": "Download klaar", - "bored": "Verveeld met wachten?", - "alphabet": "Alfabet", - "downloadPdf": "PDF downloaden", - "text": "Tekst", - "font": "Lettertype", - "selectFillter": "-- Selecteer --", - "pageNum": "Paginanummer", - "sizes": { - "small": "Klein", - "medium": "Gemiddeld", - "large": "Groot", - "x-large": "Extra groot" - }, - "error": { - "pdfPassword": "Het PDF document is beveiligd met een wachtwoord en het wachtwoord is niet ingevoerd of is onjuist", - "_value": "Fout", - "sorry": "Excuses voor het probleem!", - "needHelp": "Hulp nodig / probleem gevonden?", - "contactTip": "Als je nog steeds problemen hebt, schroom niet om contact met ons op te nemen voor hulp. Je kan een ticket op onze Github pagina indienen of ons via Discord bereiken:", - "404": { - "head": "404 - Pagina niet gevonden | Oeps, we struikelden over de code!", - "1": "We kunnen de pagina die je zoek niet vinden.", - "2": "Er ging iets mis." - }, - "github": "Dien een ticket op Github in.", - "showStack": "Geeft tracering weer", - "copyStack": "Kopieer tracering", - "githubSubmit": "GitHub - Dien een ticket in", - "discordSubmit": "Discord - Maak een support post" - }, - "delete": "Verwijderen", - "username": "Gebruikersnaam", - "password": "Wachtwoord", - "welcome": "Welkom", - "property": "Eigenschap", - "black": "Zwart", - "white": "Wit", - "red": "Rood", - "green": "Groen", - "blue": "Blauw", - "custom": "Aangepast...", - "WorkInProgess": "Werk in uitvoering. Werkt mogelijk niet of bevat fouten. Meld eventuele problemen!", - "poweredBy": "Mogelijk gemaakt door", - "yes": "Ja", - "no": "Nee", - "changedCredsMessage": "Inloggegevens gewijzigd!", - "notAuthenticatedMessage": "Gebruiker niet ingelogd.", - "userNotFoundMessage": "Gebruiker niet gevonden.", - "incorrectPasswordMessage": "Huidige wachtwoord is onjuist.", - "usernameExistsMessage": "Nieuwe gebruikersnaam bestaat al.", - "invalidUsernameMessage": "Ongeldige gebruikersnaam, gebruikersnaam kan alleen letters, nummers en de volgende speciale tekens @._+- bevatten of moet een geldig emailadres zijn.", - "invalidPasswordMessage": "Het wachtwoord mag geen spaties ten beginne of einde bevatten en mag niet leeg zijn.", - "confirmPasswordErrorMessage": "Nieuw wachtwoord en bevestig wachtwoord moeten overeenkomen.", - "deleteCurrentUserMessage": "Kan niet een momenteel ingelogde gebruiker verwijderen.", - "deleteUsernameExistsMessage": "De gebruikersnaam bestaat niet en kan niet verwijderd worden.", - "downgradeCurrentUserMessage": "Kan de rol van de huidige gebruiker niet downgraden", - "disabledCurrentUserMessage": "De huidige gebruiker kan niet worden uitgeschakeld", - "downgradeCurrentUserLongMessage": "Kan de rol van de huidige gebruiker niet downgraden. Huidige gebruiker wordt dus niet weergegeven.", - "userAlreadyExistsOAuthMessage": "De gebruiker bestaat al als een OAuth2 gebruiker.", - "userAlreadyExistsWebMessage": "De gebruiker bestaat al als een web gebruiker.", - "oops": "Oeps!", - "help": "Hulp", - "goHomepage": "Ga naar de startpagina", - "joinDiscord": "Word lid van onze Discord server", - "seeDockerHub": "Zie Docker Hub", - "visitGithub": "Ga naar de Github Repository", - "donate": "Doneer", - "color": "Kleur", - "sponsor": "Sponsor", - "info": "Informatie", - "pro": "Pro", - "page": "Pagina", - "pages": "Pagen", - "loading": "Laden...", - "addToDoc": "Toevoegen aan document", - "reset": "Reset", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Privacybeleid", - "terms": "Voorwaarden van gebruik", - "accessibility": "Toegankelijkheid", - "cookie": "Cookiesbeleid", - "impressum": "Imprint", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Pijplijn menu (Beta)", - "uploadButton": "Aangepast uploaden", - "configureButton": "Configureren", - "defaultOption": "Aangepast", - "submitButton": "Opslaan", - "help": "Pijplijn help", - "scanHelp": "Map scannen help", - "deletePrompt": "Weet je zeker dat je deze pijplijn wil verwijderen?", - "tags": "automatiseren,volgorde,gescrript,batch-verwerking", - "title": "Pijplijn" - }, - "pipelineOptions": { - "header": "Pijplijn configuratie", - "pipelineNameLabel": "Pijplijn naam", - "saveSettings": "Instellingen voor bewerking opslaan", - "pipelineNamePrompt": "Voer hier de naam van de pijplijn in", - "selectOperation": "Selecteer bewerking", - "addOperationButton": "Bewerking toevoegen", - "pipelineHeader": "Pijplijn:", - "saveButton": "Downloaden", - "validateButton": "Valideren" - }, - "enterpriseEdition": { - "button": "Upgrade to Pro", - "warning": "This feature is only available to Pro users.", - "yamlAdvert": "Stirling PDF Pro supports YAML configuration files and other SSO features.", - "ssoAdvert": "Looking for more user management features? Check out Stirling PDF Pro" - }, - "analytics": { - "title": "Do you want make Stirling PDF better?", - "paragraph1": "Stirling PDF has opt in analytics to help us improve the product. We do not track any personal information or file contents.", - "paragraph2": "Please consider enabling analytics to help Stirling-PDF grow and to allow us to understand our users better.", - "enable": "Enable analytics", - "disable": "Disable analytics", - "settings": "You can change the settings for analytics in the config/settings.yml file" - }, - "navbar": { - "favorite": "Favorieten", - "recent": "New and recently updated", - "darkmode": "Donkere modus", - "language": "Talen", - "settings": "Instellingen", - "allTools": "Tools", - "multiTool": "Multitools", - "search": "Search", - "sections": { - "organize": "Organizeren", - "convertTo": "Converteren naar PDF", - "convertFrom": "Converteren van PDF", - "security": "Ondertekenen & beveiliging", - "advance": "Geavanceerd", - "edit": "Bekijken & wijzigen", - "popular": "Popular" - } - }, - "settings": { - "title": "Instellingen", - "update": "Update beschikbaar", - "updateAvailable": "{0} is de huidig geïnstalleerde versie. Een nieuwe versie ({1}) is beschikbaar.", - "appVersion": "App versie:", - "downloadOption": { - "title": "Kies download optie (Voor enkelvoudige bestanddownloads zonder zip):", - "1": "Open in hetzelfde venster", - "2": "Open in nieuw venster", - "3": "Download bestand" - }, - "zipThreshold": "Bestanden zippen wanneer het aantal gedownloade bestanden meer is dan", - "signOut": "Uitloggen", - "accountSettings": "Account instellingen", - "bored": { - "help": "Schakelt geheim spelletje in" - }, - "cacheInputs": { - "name": "Sla invoer in formulieren op", - "help": "Schakel in om eerdere invoeren op te slaan voor toekomstige uitvoeren" - } - }, - "changeCreds": { - "title": "Inloggegevens wijzigen", - "header": "Werk je accountgegevens bij", - "changePassword": "Je gebruikt de standaard inloggegevens. Voer alstublieft een nieuw wachtwoord in", - "newUsername": "Nieuwe gebruikersnaam", - "oldPassword": "Huidige wachtwoord", - "newPassword": "Nieuw wachtwoord", - "confirmNewPassword": "Bevestig nieuw wachtwoord", - "submit": "Wijzigingen opslaan" - }, - "account": { - "title": "Account instellingen", - "accountSettings": "Account instellingen", - "adminSettings": "Beheerdersinstellingen - Gebruikers bekijken en toevoegen", - "userControlSettings": "Gebruikerscontrole instellingen", - "changeUsername": "Wijzig gebruikersnaam", - "newUsername": "Nieuwe gebruikersnaam", - "password": "Bevestigingswachtwoord", - "oldPassword": "Oud wachtwoord", - "newPassword": "Nieuw wachtwoord", - "changePassword": "Wijzig wachtwoord", - "confirmNewPassword": "Bevestig nieuw wachtwoord", - "signOut": "Uitloggen", - "yourApiKey": "Jouw API sleutel", - "syncTitle": "Synchroniseer browserinstellingen met account", - "settingsCompare": "Instellingen vergelijking:", - "property": "Eigenschap", - "webBrowserSettings": "Webbrowser instelling", - "syncToBrowser": "Synchroniseer account -> browser", - "syncToAccount": "Synchroniseer account <- browser" - }, - "adminUserSettings": { - "title": "Gebruikersbeheer", - "header": "Beheer gebruikers", - "admin": "Beheerder", - "user": "Gebruiker", - "addUser": "Voeg nieuwe gebruiker toe", - "deleteUser": "Verwijder gebruiker", - "confirmDeleteUser": "Moet deze gebruiker verwijderd worden?", - "confirmChangeUserStatus": "Should the user be disabled/enabled?", - "usernameInfo": "Gebruikersnaam kan alleen letters, nummers en de volgende speciale tekens @._+- bevatten of moet een geldig emailadres zijn.", - "roles": "Rollen", - "role": "Rol", - "actions": "Acties", - "apiUser": "Beperkte API gebruiker", - "extraApiUser": "Extra beperkte API gebruiker", - "webOnlyUser": "Alleen web gebruiker", - "demoUser": "Demogebruiker (geen aangepaste instellingen)", - "internalApiUser": "Interne API gebruiker", - "forceChange": "Forceer gebruiker om gebruikersnaam/wachtwoord te wijzigen bij inloggen", - "submit": "Gebruiker opslaan", - "changeUserRole": "De rol van de gebruiker wijzigen", - "authenticated": "Geauthenticeerd", - "editOwnProfil": "Edit own profile", - "enabledUser": "enabled user", - "disabledUser": "disabled user", - "activeUsers": "Active Users:", - "disabledUsers": "Disabled Users:", - "totalUsers": "Total Users:", - "lastRequest": "Laatste aanvraag", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Database Importeer/Exporteer", - "header": "Database Importeer/Exporteer", - "fileName": "Bestandsnaam", - "creationDate": "Creatiedatum", - "fileSize": "Bestandsgrootte", - "deleteBackupFile": "Backupbestand verwijderen", - "importBackupFile": "Backupbestand importeren", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Backupbestand downloaden", - "info_1": "Bij het importeren van gegevens is het cruciaal om de juiste structuur te zorgen voor. Als je niet zeker bent van wat je doet, raadpleeg dan advies en ondersteuning bij een professionele. Een fout in de structuur kan leiden tot toepassingsfouten, waarmee wellicht zelfs de volledige uitvoerbaarheid van de toepassing belemmerd wordt.", - "info_2": "De bestandsnaam maakt geen verschil bij het uploaden. Hij zal later worden herbewoond om de indeling backup_user_yyyyMMddHHmm.sql te volgen, waardoor een consistente bestandsnaamconventie waarborgd wordt.", - "submit": "Backup importeren", - "importIntoDatabaseSuccessed": "Importeer naar database succesvol", - "backupCreated": "Database backup successful", - "fileNotFound": "File not Found", - "fileNullOrEmpty": "Bestand mag niet null of leeg zijn", - "failedImportFile": "Failed Import File", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "Je sessie is verlopen. Voer de pagina opnieuw in en probeer het opnieuw.", - "refreshPage": "Refresh Page" - }, - "home": { - "desc": "Jouw lokaal gehoste one-stop-shop voor al je PDF-behoeften.", - "searchBar": "Zoek naar functies...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Bekijk, annoteer, voeg tekst of afbeeldingen toe" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "PDF multitool", - "desc": "Pagina's samenvoegen, draaien, herschikken en verwijderen" - }, - "merge": { - "title": "Samenvoegen", - "desc": "Voeg eenvoudig meerdere PDF's samen tot één." - }, - "split": { - "title": "Splitsen", - "desc": "Splits PDF's in meerdere documenten" - }, - "rotate": { - "title": "Roteren", - "desc": "Roteer eenvoudig je PDF's." - }, - "imageToPdf": { - "title": "Afbeelding naar PDF", - "desc": "Converteer een afbeelding (PNG, JPEG, GIF) naar PDF." - }, - "pdfToImage": { - "title": "PDF naar Afbeelding", - "desc": "Converteer een PDF naar een afbeelding. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Organiseren", - "desc": "Verwijder/herschik pagina's in een volgorde naar keus" - }, - "addImage": { - "title": "Afbeelding toevoegen", - "desc": "Voegt een afbeelding toe op een specifieke locatie in de PDF" - }, - "watermark": { - "title": "Watermerk toevoegen", - "desc": "Voeg een aangepast watermerk toe aan je PDF-document." - }, - "permissions": { - "title": "Permissies wijzigen", - "desc": "Wijzig de permissies van je PDF-document" - }, - "removePages": { - "title": "Verwijderen", - "desc": "Verwijder ongewenste pagina's uit je PDF-document." - }, - "addPassword": { - "title": "Wachtwoord toevoegen", - "desc": "Versleutel je PDF-document met een wachtwoord." - }, - "removePassword": { - "title": "Wachtwoord verwijderen", - "desc": "Verwijder wachtwoordbeveiliging van je PDF-document." - }, - "compressPdfs": { - "title": "Comprimeren", - "desc": "Comprimeer PDF's om hun bestandsgrootte te verkleinen." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Metadata wijzigen", - "desc": "Wijzig/verwijder/voeg metadata toe van een PDF-document" - }, - "fileToPDF": { - "title": "Bestand naar PDF converteren", - "desc": "Converteer bijna ieder bestand naar PDF (DOCX, PNG, XLS, PPT, TXT en meer)" - }, - "ocr": { - "title": "OCR / Scans opruimen", - "desc": "Ruim scans op, detecteert tekst van afbeeldingen in een PDF en voegt deze opnieuw toe als tekst." - }, - "extractImages": { - "title": "Afbeeldingen extraheren", - "desc": "Extraheert alle afbeeldingen uit een PDF en slaat ze op in een zip" - }, - "pdfToPDFA": { - "title": "PDF naar PDF/A", - "desc": "Converteer PDF naar PDF/A voor langdurige opslag" - }, - "PDFToWord": { - "title": "PDF naar Word", - "desc": "Converteer PDF naar Word-formaten (DOC, DOCX en ODT)" - }, - "PDFToPresentation": { - "title": "PDF naar Presentatie", - "desc": "Converteer PDF naar Presentatie formaten (PPT, PPTX en ODP)" - }, - "PDFToText": { - "title": "PDF naar RTF (Tekst)", - "desc": "Converteer PDF naar Tekst of RTF formaat" - }, - "PDFToHTML": { - "title": "PDF naar HTML", - "desc": "Converteer PDF naar HTML formaat" - }, - "PDFToXML": { - "title": "PDF naar XML", - "desc": "Converteer PDF naar XML formaat" - }, - "ScannerImageSplit": { - "title": "Detecteer/Split gescande foto's", - "desc": "Splits meerdere foto's van binnen een foto/PDF" - }, - "sign": { - "title": "Ondertekenen", - "desc": "Voegt handtekening toe aan PDF via tekenen, tekst of afbeelding" - }, - "flatten": { - "title": "Platdrukken", - "desc": "Verwijder alle interactieve elementen en formulieren uit een PDF" - }, - "repair": { - "title": "Repareren", - "desc": "Probeert een corrupt/beschadigd PDF te herstellen" - }, - "removeBlanks": { - "title": "Verwijder lege pagina's", - "desc": "Detecteert en verwijdert lege pagina's uit een document" - }, - "removeAnnotations": { - "title": "Annotaties verwijderen", - "desc": "Verwijdert alle opmerkingen/annotaties uit een PDF" - }, - "compare": { - "title": "Vergelijken", - "desc": "Vergelijkt en toont de verschillen tussen twee PDF-documenten" - }, - "certSign": { - "title": "Ondertekenen met certificaat", - "desc": "Ondertekent een PDF met een certificaat/sleutel (PEM/P12)" - }, - "removeCertSign": { - "title": "Verwijder certificaat", - "desc": "Verwijder certificaat van PDF" - }, - "pageLayout": { - "title": "Multi-pagina indeling", - "desc": "Voeg meerdere pagina's van een PDF-document samen op één pagina" - }, - "scalePages": { - "title": "Aanpassen paginaformaat/schaal", - "desc": "Wijzig de grootte/schaal van een pagina en/of de inhoud ervan." - }, - "pipeline": { - "title": "Pijplijn", - "desc": "Voer meerdere acties uit op PDF's door pipelinescripts te definiëren" - }, - "add-page-numbers": { - "title": "Paginanummers toevoegen", - "desc": "Voeg paginanummers toe binnen het volledige document op een vastgestelde locatie" - }, - "auto-rename": { - "title": "Automatisch hernoemen PDF-bestand", - "desc": "Hernoemt automatisch een PDF-bestand op basis van de gedetecteerde header" - }, - "adjust-contrast": { - "title": "Kleuren/contrast aanpassen", - "desc": "Pas contrast, verzadiging en helderheid van een PDF aan" - }, - "crop": { - "title": "PDF bijsnijden", - "desc": "Snijd een PDF bij om de grootte te verkleinen (behoudt tekst!)" - }, - "autoSplitPDF": { - "title": "Automatisch splitsen pagina's", - "desc": "Automatisch splitsen van gescande PDF met fysieke gescande paginasplitter QR-code" - }, - "sanitizePdf": { - "title": "Opschonen", - "desc": "Verwijder scripts en andere elementen uit PDF-bestanden" - }, - "URLToPDF": { - "title": "URL/website naar PDF", - "desc": "Zet http(s)URL om naar PDF" - }, - "HTMLToPDF": { - "title": "HTML naar PDF", - "desc": "Zet HTML-bestand of zip om naar PDF" - }, - "MarkdownToPDF": { - "title": "Markdown naar PDF", - "desc": "Zet Markdown-bestand om naar PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Haal ALLE informatie op over PDF", - "desc": "Haalt alle mogelijke informatie op van PDF's" - }, - "extractPage": { - "title": "Pagina('s) extraheren", - "desc": "Extraheert geselecteerde pagina's uit PDF" - }, - "PdfToSinglePage": { - "title": "PDF naar één grote pagina", - "desc": "Voegt alle PDF-pagina's samen tot één grote pagina" - }, - "showJS": { - "title": "Toon Javascript", - "desc": "Zoekt en toont ieder script dat in een PDF is geïnjecteerd" - }, - "autoRedact": { - "title": "Automatisch censureren", - "desc": "Automatisch censureren (onherkenbaar maken) van tekst in een PDF op basis van ingevoerde tekst" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF naar CSV", - "desc": "Haalt tabellen uit een PDF en converteert ze naar CSV" - }, - "autoSizeSplitPDF": { - "title": "Automatisch splitsen op grootte/aantal", - "desc": "Splits een enkele PDF in meerdere documenten op basis van grootte, aantal pagina's of aantal documenten" - }, - "overlay-pdfs": { - "title": "PDF's overlappen", - "desc": "Plaatst PDF's over een andere PDF heen" - }, - "split-by-sections": { - "title": "PDF in secties splitsen", - "desc": "Verdeel elke pagina van een PDF in kleinere horizontale en verticale secties" - }, - "AddStampRequest": { - "title": "Stempel toevoegen aan PDF", - "desc": "Voeg tekst of afbeeldingsstempels toe op vaste locaties" - }, - "removeImagePdf": { - "title": "Afbeelding verwijderen", - "desc": "Afbeeldingen uit PDF verwijderen om het bestandsgrootte te verminderen" - }, - "splitPdfByChapters": { - "title": "PDF op hoofdstukken splitsen", - "desc": "Splits een PDF op basis van zijn hoofdstukstructuur in meerdere bestanden." - }, - "validateSignature": { - "title": "Validate PDF Signature", - "desc": "Verify digital signatures and certificates in PDF documents" - }, - "replaceColorPdf": { - "title": "Replace and Invert Color", - "desc": "Vervang de kleur van tekst en achtergrond in een PDF en omverkeer de volledige kleur van het document om bestandsgrootte te verkleinen." - } - }, - "viewPdf": { - "tags": "bekijken,lezen,annoteren,tekst,afbeelding", - "title": "View/Edit PDF", - "header": "PDF bekijken" - }, - "multiTool": { - "tags": "Multitool,meerdere bewerkingen,UI,klik sleep,voorkant,clientzijde,interactief,beweegbaar,verplaats", - "title": "PDF Multitool", - "header": "PDF Multitool", - "uploadPrompts": "Bestandsnaam", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "selectPages": "Page Select", - "selectedPages": "Selected Pages", - "page": "Page", - "deleteSelected": "Delete Selected", - "downloadAll": "Export", - "downloadSelected": "Export Selected", - "insertPageBreak": "Insert Page Break", - "addFile": "Add File", - "rotateLeft": "Rotate Left", - "rotateRight": "Rotate Right", - "split": "Split", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "Delete", - "dragDropMessage": "Page(s) Selected", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "samenvoegen,pagina bewerkingen,serverzijde", - "title": "Samenvoegen", - "header": "Meerdere PDF's samenvoegen (2+)", - "sortByName": "Sorteer op naam", - "sortByDate": "Sorteer op datum", - "removeCertSign": "Verwijder digitale handtekening in het samengevoegde bestand?", - "submit": "Samenvoegen" - }, - "split": { - "tags": "Pagina bewerkingen,verdelen,meerdere pagina's,knippen,serverzijde", - "title": "PDF splitsen", - "header": "PDF splitsen", - "desc": { - "1": "De nummers die je kiest zijn de paginanummers waarop je een splitsing wilt uitvoeren", - "2": "Als zodanig selecteren van 1,3,7-9 zou een 10 pagina's tellend document splitsen in 6 aparte PDF's met:", - "3": "Document #1: Pagina 1", - "4": "Document #2: Pagina 2 en 3", - "5": "Document #3: Pagina 4, 5, 6 en 7", - "6": "Document #4: Pagina 8", - "7": "Document #5: Pagina 9", - "8": "Document #6: Pagina 10" - }, - "splitPages": "Voer pagina's in om op te splitsen:", - "submit": "Splitsen" - }, - "rotate": { - "tags": "serverzijde", - "title": "PDF roteren", - "header": "PDF roteren", - "selectAngle": "Selecteer rotatiehoek (in veelvouden van 90 graden):", - "submit": "Roteren" - }, - "imageToPdf": { - "tags": "conversie,img,jpg,foto" - }, - "pdfToImage": { - "tags": "conversie,img,jpg,foto", - "title": "PDF naar afbeelding", - "header": "PDF naar afbeelding", - "selectText": "Afbeeldingsformaat", - "singleOrMultiple": "Resultaattype van pagina naar afbeelding", - "single": "Eén grote afbeelding die alle pagina's combineert", - "multi": "Meerdere afbeeldingen, één afbeelding per pagina", - "colorType": "Kleurtype", - "color": "Kleur", - "grey": "Grijstinten", - "blackwhite": "Zwart en wit (kan data verliezen!)", - "submit": "Omzetten", - "info": "Python is niet geïnstalleerd. Vereist voor WebP-conversie.", - "placeholder": "(bijv. 1,2,8 of 4,7,12-16 of 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,even oneven,sorteren,verplaatsen", - "title": "Pagina organisator", - "header": "PDF pagina organisator", - "submit": "Pagina's herschikken", - "mode": { - "_value": "Modus", - "1": "Aangepaste paginavolgorde", - "2": "Omgekeerde volgorde", - "3": "Duplex sorteren", - "4": "Boekje sorteren", - "5": "Zijsteek boekje sorteren", - "6": "Oneven-even splitsen", - "7": "Eerste verwijderen", - "8": "Laatste verwijderen", - "9": "Eerste en laaste verwijderen", - "10": "Oneven-even samenvoeken", - "11": "Duplicate all pages" - }, - "placeholder": "(bijv. 1,3,2 of 4-8,2,10-12 of 2n-1)" - }, - "addImage": { - "tags": "img,jpg,foto", - "title": "Afbeelding toevoegen", - "header": "Afbeelding aan PDF toevoegen", - "everyPage": "Elke pagina?", - "upload": "Afbeelding toevoegen", - "submit": "Afbeelding toevoegen" - }, - "watermark": { - "tags": "Tekst,herhalend,label,eigen,copyright,handelsmerk,img,jpg,foto", - "title": "Watermerk toevoegen", - "header": "Watermerk toevoegen", - "customColor": "Aangepaste tekstkleur", - "selectText": { - "1": "Selecteer PDF om watermerk toe te voegen:", - "2": "Watermerk tekst:", - "3": "Tekengrootte:", - "4": "Rotatie (0-360):", - "5": "breedteSpacer (Ruimte tussen elk watermerk horizontaal):", - "6": "hoogteSpacer (Ruimte tussen elk watermerk verticaal):", - "7": "Transparantie (0% - 100%):", - "8": "Type watermerk:", - "9": "Watermerk afbeelding:", - "10": "PDF omzetten naar PDF-Afbeelding" - }, - "submit": "Watermerk toevoegen", - "type": { - "1": "Tekst", - "2": "Afbeelding" - } - }, - "permissions": { - "tags": "lezen,schrijven,bewerken,printen", - "title": "Rechten wijzigen", - "header": "Rechten wijzigen", - "warning": "Let op: om deze rechten onveranderlijk te maken, wordt aanbevolen om ze met een wachtwoord in te stellen via de add-password pagina.", - "selectText": { - "1": "Selecteer PDF om rechten te wijzigen", - "2": "In te stellen rechten", - "3": "Voorkom samenvoegen van document", - "4": "Voorkom inhoudsextractie", - "5": "Voorkom extractie voor toegankelijkheid", - "6": "Voorkom invullen van formulier", - "7": "Voorkom wijziging", - "8": "Voorkom annotatie wijziging", - "9": "Voorkom afdrukken", - "10": "Voorkom afdrukken in verschillende formaten" - }, - "submit": "Wijzigen" - }, - "removePages": { - "tags": "Pagina's verwijderen" - }, - "addPassword": { - "tags": "veilig,beveiliging", - "title": "Wachtwoord toevoegen", - "header": "Wachtwoord toevoegen (Versleutelen)", - "selectText": { - "1": "Selecteer PDF om te versleutelen", - "2": "Gebruikerswachtwoord", - "3": "Versleutelingssleutellengte", - "4": "Hogere waarden zijn sterker, maar lagere waarden hebben een betere compatibiliteit.", - "5": "In te stellen rechten (Aanbevolen om te gebruiken samen met eigenaarswachtwoord)", - "6": "Voorkomen van documentassemblage", - "7": "Voorkomen van inhoudsextractie", - "8": "Voorkomen van extractie voor toegankelijkheid", - "9": "Voorkomen van invullen van formulier", - "10": "Voorkomen van wijziging", - "11": "Voorkomen van annotatiewijziging", - "12": "Voorkomen van afdrukken", - "13": "Voorkomen van afdrukken in verschillende formaten", - "14": "Eigenaarswachtwoord", - "15": "Beperkt wat gedaan kan worden met het document nadat het is geopend (Niet ondersteund door alle lezers)", - "16": "Beperkt het openen van het document zelf" - }, - "submit": "Versleutelen" - }, - "removePassword": { - "tags": "veilig,ontsleutelen,beveiliging,wachtwoord verwijderen", - "title": "Wachtwoord verwijderen", - "header": "Wachtwoord verwijderen (Decrypteren)", - "selectText": { - "1": "Selecteer PDF om te decrypteren", - "2": "Wachtwoord" - }, - "submit": "Verwijderen" - }, - "compressPdfs": { - "tags": "comprimeren,klein" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Titel,auteur,datum,creatie,tijd,uitgever,producent,statistieken", - "title": "Titel:", - "header": "Metadata wijzigen", - "selectText": { - "1": "Pas de variabelen aan die je wilt wijzigen", - "2": "Verwijder alle metadata", - "3": "Toon aangepaste metadata:", - "4": "Overige metadata:", - "5": "Voeg aangepaste metadata-invoer toe" - }, - "author": "Auteur:", - "creationDate": "Aanmaakdatum (yyyy/MM/dd HH:mm:ss):", - "creator": "Maker:", - "keywords": "Trefwoorden:", - "modDate": "Wijzigingsdatum (yyyy/MM/dd HH:mm:ss):", - "producer": "Producent:", - "subject": "Onderwerp:", - "trapped": "Vastgezet:", - "submit": "Wijzigen" - }, - "fileToPDF": { - "tags": "transformatie,formaat,document,foto,slide,tekst,conversie,kantoor,docs,word,excel,powerpoint", - "title": "Bestand naar PDF", - "header": "Zet elk bestand om naar PDF", - "credit": "Deze service gebruikt LibreOffice en Unoconv voor bestandsconversie.", - "supportedFileTypesInfo": "Gestandaardiseerde Bestandstypen", - "supportedFileTypes": "Ondersteunde bestandstypen zijn hieronder opgenomen, maar raadpleeg voor een volledige lijst met ondersteunde formaten de LibreOffice-documentatie", - "submit": "Omzetten naar PDF" - }, - "ocr": { - "tags": "herkenning,tekst,afbeelding,scan,lezen,identificeren,detectie,bewerkbaar", - "title": "OCR / Scan opruimen", - "header": "Scans opruimen / OCR (Optical Character Recognition)", - "selectText": { - "1": "Selecteer talen die binnen de PDF gedetecteerd moeten worden (De vermelde zijn de momenteel gedetecteerde):", - "2": "Produceer tekstbestand met OCR-tekst naast de OCR'd PDF", - "3": "Corrigeer pagina's die onder een scheve hoek zijn gescand door ze terug te draaien", - "4": "Maak de pagina schoon, zodat het minder waarschijnlijk is dat OCR tekst in achtergrondruis vindt. (Geen uitvoerverandering)", - "5": "Maak de pagina schoon zodat OCR waarschijnlijk geen tekst in achtergrondruis vindt, behoudt opruiming in uitvoer.", - "6": "Negeert pagina's met interactieve tekst, OCR's alleen pagina's die afbeeldingen zijn", - "7": "Forceer OCR, zal elke pagina OCR'en en alle originele tekstelementen verwijderen", - "8": "Normaal (Zal een fout geven als de PDF tekst bevat)", - "9": "Aanvullende instellingen", - "10": "OCR-modus", - "11": "Verwijder afbeeldingen na OCR (Verwijdert ALLE afbeeldingen, alleen nuttig als onderdeel van conversiestap)", - "12": "Weergave Type (Geavanceerd)" - }, - "help": "Lees deze documentatie over hoe dit te gebruiken voor andere talen en/of gebruik buiten docker", - "credit": "Deze dienst maakt gebruik van qpdf en Tesseract voor OCR.", - "submit": "Verwerk PDF met OCR" - }, - "extractImages": { - "tags": "foto,opslaan,archief,zip,vastleggen,plukken", - "title": "Afbeeldingen extraheren", - "header": "Afbeeldingen extraheren", - "selectText": "Selecteer het beeldformaat voor geëxtraheerde afbeeldingen", - "allowDuplicates": "Dubbele afbeeldingen opslaan", - "submit": "Extraheer" - }, - "pdfToPDFA": { - "tags": "archief,langdurig,standaard,conversie,opslag,bewaring", - "title": "PDF naar PDF/A", - "header": "PDF naar PDF/A", - "credit": "Deze service gebruikt libreoffice voor PDF/A-conversie", - "submit": "Converteren", - "tip": "Werkt momenteel niet voor meerdere inputs tegelijkertijd.", - "outputFormat": "Uitvoerindeling", - "pdfWithDigitalSignature": "Dit PDF bestand bevat een digitale handtekening. Deze wordt in de volgende stap verwijderd." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformatie,formaat,conversie,kantoor,microsoft,docfile", - "title": "PDF naar Word", - "header": "PDF naar Word", - "selectText": { - "1": "Uitvoerbestandsformaat" - }, - "credit": "Deze service gebruikt LibreOffice voor bestandsconversie.", - "submit": "Converteren" - }, - "PDFToPresentation": { - "tags": "slides,show,kantoor,microsoft", - "title": "PDF naar Presentatie", - "header": "PDF naar Presentatie", - "selectText": { - "1": "Uitvoerbestandsformaat" - }, - "credit": "Deze service gebruikt LibreOffice voor bestandsconversie.", - "submit": "Converteren" - }, - "PDFToText": { - "tags": "rijkformaat", - "title": "PDF naar RTF (Tekst)", - "header": "PDF naar RTF (Tekst)", - "selectText": { - "1": "Uitvoerbestandsformaat" - }, - "credit": "Deze service gebruikt LibreOffice voor bestandsconversie.", - "submit": "Converteren" - }, - "PDFToHTML": { - "tags": "webinhoud,browser vriendelijk", - "title": "PDF naar HTML", - "header": "PDF naar HTML", - "credit": "Deze service gebruikt pdftohtml voor bestandsconversie.", - "submit": "Converteren" - }, - "PDFToXML": { - "tags": "data-extractie,gestructureerd,code", - "title": "PDF naar XML", - "header": "PDF naar XML", - "credit": "Deze service gebruikt LibreOffice voor bestandsconversie.", - "submit": "Converteren" - }, - "ScannerImageSplit": { - "tags": "scheiden,auto-detecteren,scans,meer-foto,organiseren", - "selectText": { - "1": "Hoek drempel:", - "2": "Stelt de minimale absolute hoek in die nodig is om de afbeelding te roteren (standaard: 10).", - "3": "Tolerantie:", - "4": "Bepaalt het bereik van kleurvariatie rond de geschatte achtergrondkleur (standaard: 30).", - "5": "Minimum oppervlakte:", - "6": "Stelt de minimale oppervlakte drempel in voor een foto (standaard: 10000).", - "7": "Minimum contour oppervlakte:", - "8": "Stelt de minimale contour oppervlakte drempel in voor een foto", - "9": "Randgrootte:", - "10": "Stelt de grootte van de toegevoegde en verwijderde rand in om witte randen in de uitvoer te voorkomen (standaard: 1)." - }, - "info": "Python is niet geïnstalleerd. Het wordt vereist om te worden uitgevoerd." - }, - "sign": { - "tags": "autoriseren,initialen,getekende-handtekening,tekst-handtekening,afbeelding-handtekening", - "title": "Ondertekenen", - "header": "PDF's ondertekenen", - "upload": "Upload afbeelding", - "draw": "Handtekening tekenen", - "text": "Tekstinvoer", - "clear": "Wissen", - "add": "Toevoegen", - "saved": "Gesleutelde handtekeningen opgeslagen", - "save": "Opslaan Signatuur", - "personalSigs": "Persoonlijke Signatuuren", - "sharedSigs": "Gedeelde Signatuuren", - "noSavedSigs": "Geen opgeslagen signatuuren gevonden", - "addToAll": "Add to all pages", - "delete": "Delete", - "first": "First page", - "last": "Last page", - "next": "Next page", - "previous": "Previous page", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "statisch,deactiveren,niet-interactief,stroomlijnen", - "title": "Afvlakken", - "header": "PDF's afvlakken", - "flattenOnlyForms": "Alleen formulieren afvlakken", - "submit": "Afvlakken" - }, - "repair": { - "tags": "repareren,herstellen,correctie,terughalen", - "title": "Repareren", - "header": "PDF's repareren", - "submit": "Repareren" - }, - "removeBlanks": { - "tags": "opruimen,stroomlijnen,geen-inhoud,organiseren", - "title": "Verwijder blanco's", - "header": "Verwijder lege pagina's", - "threshold": "Pixel witheid drempel:", - "thresholdDesc": "Drempel voor het bepalen hoe wit een witte pixel moet zijn om als 'Wit' te worden geclassificeerd. 0 = Zwart, 255 zuiver wit.", - "whitePercent": "Wit percentage (%):", - "whitePercentDesc": "Percentage van de pagina dat 'witte' pixels moet zijn om verwijderd te worden", - "submit": "Blanco's verwijderen" - }, - "removeAnnotations": { - "tags": "opmerkingen,highlight,notities,opmaak,verwijderen", - "title": "Verwijder annotaties", - "header": "Verwijder annotaties", - "submit": "Verwijderen" - }, - "compare": { - "tags": "onderscheiden,contrasteren,veranderingen,analyse", - "title": "Vergelijken", - "header": "PDF's vergelijken", - "highlightColor": { - "1": "Hervormingskleur 1:", - "2": "Hervormingskleur 2:" - }, - "document": { - "1": "Document 1", - "2": "Document 2" - }, - "submit": "Vergelijken", - "complex": { - "message": "Eén of beide van de bijgewerkte documenten zijn grote bestanden, het vergelijken kan mogelijk minder nauwkeurig zijn." - }, - "large": { - "file": { - "message": "Eén of beiden van de bijgewerkte documenten zijn te groot om verwerkt te worden." - } - }, - "no": { - "text": { - "message": "Een of beide geselecteerde PDF-bestanden bevatten geen tekstinhoud. Kies a.u.b. PDF-bestanden met tekst voor vergelijking." - } - } - }, - "certSign": { - "tags": "authenticeren,PEM,P12,officieel,versleutelen", - "title": "Certificaat ondertekening", - "header": "Onderteken een PDF met je certificaat (in ontwikkeling)", - "selectPDF": "Selecteer een PDF-bestand voor ondertekening:", - "jksNote": "Let op: als het certificaattype hieronder niet staat, converteer het dan naar een Java Keystore (.jks) bestand met de keytool command line tool. Kies vervolgens de .jks bestandsoptie.", - "selectKey": "Selecteer je privésleutelbestand (PKCS#8 formaat, kan .pem of .der zijn):", - "selectCert": "Selecteer je certificaatbestand (X.509 formaat, kan .pem of .der zijn):", - "selectP12": "Selecteer je PKCS#12 Sleutelopslagbestand (.p12 of .pfx) (Optioneel, indien verstrekt, moet het je privésleutel en certificaat bevatten):", - "selectJKS": "Selecteer je Java Keystore bestand (.jks of .keystore):", - "certType": "Certificaattype", - "password": "Voer je sleutelopslag of privésleutel wachtwoord in (indien van toepassing):", - "showSig": "Toon handtekening", - "reason": "Reden", - "location": "Locatie", - "name": "Naam", - "showLogo": "Logotype tonen", - "submit": "PDF ondertekenen" - }, - "removeCertSign": { - "tags": "authenticeren,PEM,P12,officieel,ontsleutelen", - "title": "Verwijder certificaat", - "header": "Verwijder het digitale certificaat van de PDF", - "selectPDF": "Selecteer een PDF bestand:", - "submit": "Verwijder certificaat" - }, - "pageLayout": { - "tags": "samenvoegen,composiet,enkel-zicht,organiseren", - "title": "Meerdere pagina indeling", - "header": "Meerdere pagina indeling", - "pagesPerSheet": "Pagina's per vel:", - "addBorder": "Randen toevoegen", - "submit": "Indienen" - }, - "scalePages": { - "tags": "resize,aanpassen,dimensie,aanpassen", - "title": "Pagina-schaal aanpassen", - "header": "Pagina-schaal aanpassen", - "pageSize": "Grootte van een pagina van het document.", - "keepPageSize": "Oorspronkelijke grootte behouden", - "scaleFactor": "Zoomniveau (uitsnede) van een pagina.", - "submit": "Indienen" - }, - "add-page-numbers": { - "tags": "pagineren,labelen,organiseren,indexeren" - }, - "auto-rename": { - "tags": "auto-detecteren,op-header-gebaseerd,organiseren,herlabelen", - "title": "Automatisch hernoemen", - "header": "PDF automatisch hernoemen", - "submit": "Automatisch hernoemen" - }, - "adjust-contrast": { - "tags": "kleur-correctie,afstemmen,aanpassen,verbeteren" - }, - "crop": { - "tags": "trimmen,verkleinen,bewerken,vorm", - "title": "Bijwerken", - "header": "PDF bijsnijden", - "submit": "Indienen" - }, - "autoSplitPDF": { - "tags": "QR-gebaseerd,scheiden,scan-segment,organiseren", - "title": "PDF automatisch splitsen", - "header": "PDF automatisch splitsen", - "description": "Print, Voeg in, Scan, upload, en laat ons je documenten automatisch scheiden. Geen handmatig sorteerwerk nodig.", - "selectText": { - "1": "Print enkele scheidingsbladen van hieronder (Zwart-wit is prima).", - "2": "Scan al je documenten tegelijk door het scheidingsblad ertussen te plaatsen.", - "3": "Upload het enkele grote gescande PDF-bestand en laat Stirling PDF de rest afhandelen.", - "4": "Scheidingspagina's worden automatisch gedetecteerd en verwijderd, wat een net einddocument garandeert." - }, - "formPrompt": "Dien PDF in met Stirling-PDF Pagina-scheiders:", - "duplexMode": "Duplex Modus (voor- en achterkant scannen)", - "dividerDownload2": "Download 'Auto Splitter Divider (with instructions).pdf'", - "submit": "Indienen" - }, - "sanitizePdf": { - "tags": "schoonmaken,veilig,veilig,bedreigingen verwijderen" - }, - "URLToPDF": { - "tags": "web-capture,pagina opslaan,web-naar-doc,archief", - "title": "URL naar PDF", - "header": "URL naar PDF", - "submit": "Converteren", - "credit": "Gebruikt WeasyPrint" - }, - "HTMLToPDF": { - "tags": "markup,web-inhoud,transformatie,omzetten", - "title": "HTML naar PDF", - "header": "HTML naar PDF", - "help": "Accepteert HTML-bestanden en ZIP's die html/css/afbeeldingen etc. bevatten", - "submit": "Converteren", - "credit": "Gebruikt WeasyPrint", - "zoom": "Zoomniveau voor weergave van de website.", - "pageWidth": "Breedte van de pagina in centimeters. (leeg voor standaard)", - "pageHeight": "Hoogte van de pagina in centimeters. (leeg voor standaard)", - "marginTop": "Marge bovenaan de pagina in millimeters. (leeg voor standaard)", - "marginBottom": "Marge onderaan de pagina in millimeters. (leeg voor standaard)", - "marginLeft": "Marge links van de pagina in millimeters. (leeg voor standaard)", - "marginRight": "Marge rechts van de pagina in millimeters. (leeg voor standaard)", - "printBackground": "De achtergrond van websites weergeven.", - "defaultHeader": "Standaard koptekst weergeven (naam en paginanummer)", - "cssMediaType": "Wijzig het CSS-mediatype van de pagina.", - "none": "Geen", - "print": "Printen", - "screen": "Scherm" - }, - "MarkdownToPDF": { - "tags": "markup,web-inhoud,transformatie,omzetten", - "title": "Markdown naar PDF", - "header": "Markdown naar PDF", - "submit": "Converteren", - "help": "In ontwikkeling", - "credit": "Gebruikt WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "informatie,data,statistieken", - "title": "Informatie over PDF ophalen", - "header": "Informatie over PDF ophalen", - "submit": "Haal informatie op", - "downloadJson": "JSON downloaden" - }, - "extractPage": { - "tags": "extraheren" - }, - "PdfToSinglePage": { - "tags": "één pagina" - }, - "showJS": { - "tags": "JS", - "title": "Toon Javascript", - "header": "Toon Javascript", - "downloadJS": "Javascript downloaden", - "submit": "Toon" - }, - "autoRedact": { - "tags": "Verzwakken, Verbergen, Uitroepen, Gekleurd, Verborgen", - "title": "Automatisch censureren", - "header": "Automatisch censureren", - "colorLabel": "Kleur", - "textsToRedactLabel": "Tekst om te censureren (gescheiden door regels)", - "textsToRedactPlaceholder": "bijv.\\Vertrouwelijk \\nTopgeheim", - "useRegexLabel": "Gebruik regex", - "wholeWordSearchLabel": "Zoeken op hele woorden", - "customPaddingLabel": "Aangepaste extra ruimtevulling", - "convertPDFToImageLabel": "Converteer PDF naar PDF-afbeelding (wordt gebruikt om tekst achter het vak te verwijderen)", - "submitButton": "Indienen" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,tabel extractie,extractie,converteren" - }, - "autoSizeSplitPDF": { - "tags": "pdf,splitsen,document,organiseren" - }, - "overlay-pdfs": { - "tags": "Overlappen", - "header": "PDF bestanden overlappen", - "baseFile": { - "label": "Selecteer basis PDF-bestand" - }, - "overlayFiles": { - "label": "Selecteer overlappende PDF-bestanden" - }, - "mode": { - "label": "Selecteer overlappingsmodus", - "sequential": "Sequentieel overlappen", - "interleaved": "Geïnterlinieerd overlappen", - "fixedRepeat": "Overlappen met vaste herhaling" - }, - "counts": { - "label": "Aantal keren overlappen (voor vaste herhalings modus)", - "placeholder": "Voer door komma's gescheiden aantallen in (bijv., 2,3,1)" - }, - "position": { - "label": "Selecteer overlappingspositie", - "foreground": "Voorgrond", - "background": "Achtergrond" - }, - "submit": "Indienen" - }, - "split-by-sections": { - "tags": "Sectie splitsen, Verdelen, Aanpassen", - "title": "PDF in secties splitsen", - "header": "PDF in secties splitsen", - "horizontal": { - "label": "Horizontale secties", - "placeholder": "Voer het aantal horizontale secties in" - }, - "vertical": { - "label": "Verticale secties", - "placeholder": "Voer het aantal verticale secties in" - }, - "submit": "PDF splitsen", - "merge": "Samenvoegen in één PDF" - }, - "AddStampRequest": { - "tags": "Stempel, Afbeelding toevoegen, afbeelding centreren, watermerk, PDF, Insluiten, Aanpassen", - "header": "Stempel PDF", - "title": "Stempel PDF", - "stampType": "Soort stempel", - "stampText": "Stempel tekst", - "stampImage": "Stempel afbeelding", - "alphabet": "Alfabet", - "fontSize": "Tekst/afbeelding grootte", - "rotation": "Rotatie", - "opacity": "Transparantie", - "position": "Positie", - "overrideX": "X coördinaat overschrijven", - "overrideY": "Y coördinaat overschrijven", - "customMargin": "Aangepaste marge", - "customColor": "Aangepaste tekstkleur", - "submit": "Indienen" - }, - "removeImagePdf": { - "tags": "Afbeelding verwijderen, Paginabewerkingen, Achterkant, Serverkant" - }, - "splitPdfByChapters": { - "tags": "splitsen, hoofdstukken, bookmarks, organiseren" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "Validate PDF Signatures", - "header": "Validate Digital Signatures", - "selectPDF": "Select signed PDF file", - "submit": "Validate Signatures", - "results": "Validation Results", - "status": { - "_value": "Status", - "valid": "Valid", - "invalid": "Invalid" - }, - "signer": "Signer", - "date": "Date", - "reason": "Reason", - "location": "Location", - "noSignatures": "No digital signatures found in this document", - "chain": { - "invalid": "Certificate chain validation failed - cannot verify signer's identity" - }, - "trust": { - "invalid": "Certificate not in trust store - source cannot be verified" - }, - "cert": { - "expired": "Certificate has expired", - "revoked": "Certificate has been revoked", - "info": "Certificate Details", - "issuer": "Issuer", - "subject": "Subject", - "serialNumber": "Serial Number", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "algorithm": "Algorithm", - "keySize": "Key Size", - "version": "Version", - "keyUsage": "Key Usage", - "selfSigned": "Self-Signed", - "bits": "bits" - }, - "signature": { - "info": "Signature Information", - "_value": "Signature", - "mathValid": "Signature is mathematically valid BUT:" - }, - "selectCustomCert": "Custom Certificate File X.509 (Optional)" - }, - "replace-color": { - "title": "Replace-Invert-Color", - "header": "Kleur-instellingen voor PDF's", - "selectText": { - "1": "Vervang of invertere kleure opties", - "2": "Standaard (hoog contrast kleuren)", - "3": "Aangepast (aangepaste kleuren)", - "4": "Volledig inverteren (alle kleuren omverkeren)", - "5": "Opties voor hoog contrast", - "6": "wit tekst op een zwart grondvlak", - "7": "zwarte tekst op wit grondvlak", - "8": "gele tekst op een zwart grondvlak", - "9": "groene tekst op een zwart grondvlak", - "10": "Kies de tekstkleur", - "11": "Kies het achtergrondkleur" - }, - "submit": "Vervang" - }, - "replaceColorPdf": { - "tags": "Kleur vervangen, pagina-acties, achterkant, serverzijde" - }, - "login": { - "title": "Inloggen", - "header": "Inloggen", - "signin": "Inloggen", - "rememberme": "Onthoud mij", - "invalid": "Ongeldige gebruikersnaam of wachtwoord.", - "locked": "Je account is geblokkeerd.", - "signinTitle": "Gelieve in te loggen", - "ssoSignIn": "Inloggen via Single Sign-on", - "oAuth2AutoCreateDisabled": "OAUTH2 Automatisch aanmaken gebruiker uitgeschakeld", - "oAuth2AdminBlockedUser": "Registratie of inloggen van niet-registreerde gebruikers is helaas momenteel geblokkeerd. Neem contact op met de beheerder.", - "oauth2RequestNotFound": "Autorisatieverzoek niet gevonden", - "oauth2InvalidUserInfoResponse": "Ongeldige reactie op gebruikersinfo", - "oauth2invalidRequest": "Ongeldig verzoek", - "oauth2AccessDenied": "Toegang geweigerd", - "oauth2InvalidTokenResponse": "Ongeldige tokenreactie", - "oauth2InvalidIdToken": "Ongeldige ID token", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "De gebruiker is gedesactiveerd, inloggen is momenteel geblokkeerd voor deze gebruikersnaam. Neem contact op met de beheerder.", - "alreadyLoggedIn": "U zit reeds ingelogd bij", - "alreadyLoggedIn2": "apparaten. U moet u a.u.b. uitloggen van de apparaten en opnieuw proberen.", - "toManySessions": "U heeft te veel actieve sessies", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF naar enkele pagina", - "header": "PDF naar enkele pagina", - "submit": "Converteren naar enkele pagina" - }, - "pageExtracter": { - "title": "Pagina's extraheren", - "header": "Pagina's extraheren", - "submit": "Extraheren", - "placeholder": "(bijv. 1,2,8 of 4,7,12-16 of 2n-1)" - }, - "sanitizePDF": { - "title": "PDF opschonen", - "header": "Een PDF-bestand opschonen", - "selectText": { - "1": "Verwijder Javascript-acties", - "2": "Verwijder ingebedde bestanden", - "3": "Remove XMP metadata", - "4": "Verwijder links", - "5": "Verwijder lettertypen", - "6": "Remove Document Info Metadata" - }, - "submit": "PDF opschonen" - }, - "adjustContrast": { - "title": "Contrast aanpassen", - "header": "Contrast aanpassen", - "contrast": "Kehrbrechting:", - "brightness": "Helderheid:", - "saturation": "Verzadiging:", - "download": "Downloaden" - }, - "compress": { - "title": "Comprimeren", - "header": "PDF comprimeren", - "credit": "Deze functie gebruikt qpdf voor PDF Compressie/Optimalisatie.", - "grayscale": { - "label": "Grijsschaal toepassen voor compressie" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Optimalisatieniveau:", - "4": "Automatische modus - Past kwaliteit automatisch aan om PDF naar exacte grootte te krijgen", - "5": "Verwachte PDF-grootte (bijv. 25MB, 10.8MB, 25KB)" - }, - "submit": "Comprimeren" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "This feature is also available in our multi-tool page. Check it out for enhanced page-by-page UI and additional features!" - }, - "pageRemover": { - "title": "Pagina verwijderaar", - "header": "PDF pagina verwijderaar", - "pagesToDelete": "Te verwijderen pagina's (Voer een door komma's gescheiden lijst met paginanummers in):", - "submit": "Pagina's verwijderen", - "placeholder": "(bijv. 1,2,6 of 1-10,15-30)" - }, - "imageToPDF": { - "title": "Afbeelding naar PDF", - "header": "Afbeelding naar PDF", - "submit": "Omzetten", - "selectLabel": "Opties voor afbeelding passend maken", - "fillPage": "Pagina vullen", - "fitDocumentToImage": "Pagina passend maken voor afbeelding", - "maintainAspectRatio": "Beeldverhoudingen behouden", - "selectText": { - "2": "PDF automatisch draaien", - "3": "Meervoudige bestandslogica (Alleen ingeschakeld bij werken met meerdere afbeeldingen)", - "4": "Voeg samen in één PDF", - "5": "Zet om naar afzonderlijke PDF's" - } - }, - "PDFToCSV": { - "title": "PDF naar CSV", - "header": "PDF naar CSV", - "prompt": "Kies pagina om tabel te extraheren", - "submit": "Extraheren" - }, - "split-by-size-or-count": { - "title": "PDF splitsen op grootte of aantal", - "header": "PDF splitsen op grootte of aantal", - "type": { - "label": "Selecteer splits type", - "size": "Op grootte", - "pageCount": "Op pagina aantal", - "docCount": "Op document aantal" - }, - "value": { - "label": "Voer waarde in", - "placeholder": "Voer grootte (bijv., 2MB of 3KB) of aantal (bijv., 5)" - }, - "submit": "Indienen" - }, - "printFile": { - "title": "Print bestand", - "header": "Print bestand naar printer", - "selectText": { - "1": "Selecteer bestand om te printen", - "2": "Voer printernaam in" - }, - "submit": "Druk af" - }, - "licenses": { - "nav": "Licenties", - "title": "Licenties van derden", - "header": "Licenties van derden", - "module": "Module", - "version": "Versie", - "license": "Licentie" - }, - "survey": { - "nav": "Enquête", - "title": "Stirling-PDF Enquête", - "description": "Stirling-PDF heeft geen tracking, dus we willen van onze gebruikers horen om Stirling-PDF te verbeteren.", - "changes": "Stirling-PDF is sinds de laatste enquête veranderd! Zie hier onze blogpost voor meer informatie:", - "changes2": "Met deze veranderingen krijgen we betaalde bedrijfsondersteuning en financiering", - "please": "Overweeg alstublieft om onze enquête in te vullen!", - "disabled": "(Enquête popup wordt in een toekomstige update weggehaald, maar is beschikbaar aan de onderkant van de pagina.)", - "button": "Vul enquête in.", - "dontShowAgain": "Niet weer tonen", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Afbeelding verwijderen", - "header": "Afbeelding verwijderen", - "removeImage": "Afbeelding verwijderen", - "submit": "Verwijder afbeelding" - }, - "splitByChapters": { - "title": "PDF splits op hoofdstukken", - "header": "PDF splitsen per hoofdstuk", - "bookmarkLevel": "Boekmarkeer niveau", - "includeMetadata": "Metadata inclusief", - "allowDuplicates": "Dubbele items toestaan", - "desc": { - "1": "Dit hulpmiddel splits een PDF-bestand op in meerdere PDF's gebaseerd op zijn hoofdstukstructuur.", - "2": "Boekmarkeer niveau: Kies het boekmarkeer niveau om te gebruiken voor delen (0 voor topniveau, 1 voor tweedelvou, etc.).", - "3": "Metadata inclusief: Als gecijfeld, de originele PDF's metadata wordt ingevoegd in elk gesplitst PDF-bestand.", - "4": "Dubbele items toestaan: Als gecijfeld, zorgen multiple boekmarkeersymboolen op dezelfde pagina voor het maken van aparte PDF-bestanden." - }, - "submit": "PDF splitsen" - }, - "fileChooser": { - "click": "Click", - "or": "or", - "dragAndDrop": "Drag & Drop", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "Drag & Drop file(s) here", - "extractPDF": "Extracting..." - }, - "releases": { - "footer": "Releases", - "title": "Release Notes", - "header": "Release Notes", - "current": { - "version": "Current Release" - }, - "note": "Release notes are only available in English" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/no-NB/translation.json b/frontend/dist/locales/no-NB/translation.json deleted file mode 100644 index d50fed454..000000000 --- a/frontend/dist/locales/no-NB/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Skriftstørrelse", - "fontName": "Skrifttype", - "title": "Legg til Sidetall", - "header": "Legg til Sidetall", - "selectText": { - "1": "Velg PDF-fil:", - "2": "Marginstørrelse", - "3": "Posisjon", - "4": "Startnummer", - "5": "Sider å nummerere", - "6": "Tilpasset Tekst" - }, - "customTextDesc": "Tilpasset Tekst", - "numberPagesDesc": "Hvilke sider som skal nummereres, standard 'alle', aksepterer også 1-5 eller 2,5,9 osv.", - "customNumberDesc": "Standard til {n}, aksepterer også 'Side {n} av {total}', 'Tekst-{n}', '{filnavn}-{n}", - "submit": "Legg til Sidetall" - }, - "pdfPrompt": "Velg PDF(er)", - "multiPdfPrompt": "Velg PDF-filer (2+)", - "multiPdfDropPrompt": "Velg (eller dra og slipp) alle PDF-ene du trenger", - "imgPrompt": "Velg Bilde(r)", - "genericSubmit": "Send inn", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Denne prosessen kan ta opptil ett minutt avhengig av filstørrelse", - "pageOrderPrompt": "Tilpasset side rekkefølge (Skriv inn en kommaseparert liste over sidetall eller funksjoner som 2n+1):", - "pageSelectionPrompt": "Tilpasset Sidevalg (Skriv inn en kommaseparert liste over sidetall 1,5,6 eller Funksjoner som 2n+1):", - "goToPage": "Gå", - "true": "Sann", - "false": "Usann", - "unknown": "Ukjent", - "save": "Lagre", - "saveToBrowser": "Lagre til Nettleser", - "close": "Lukk", - "filesSelected": "filer valgt", - "noFavourites": "Ingen favoritter lagt til", - "downloadComplete": "Nedlasting Fullført", - "bored": "Lei av å vente?", - "alphabet": "Alfabet", - "downloadPdf": "Last ned PDF", - "text": "Tekst", - "font": "Skrifttype", - "selectFillter": "-- Velg --", - "pageNum": "Sidenummer", - "sizes": { - "small": "Liten", - "medium": "Middels", - "large": "Stor", - "x-large": "Ekstra Stor" - }, - "error": { - "pdfPassword": "PDF-dokumentet er passordbeskyttet og enten ble passordet ikke oppgitt eller var feil", - "_value": "Feil", - "sorry": "Beklager for problemet!", - "needHelp": "Trenger du hjelp / Har du funnet et problem?", - "contactTip": "Hvis du fortsatt har problemer, ikke nøl med å kontakte oss for hjelp. Du kan sende inn en billett på vår GitHub-side eller kontakte oss via Discord:", - "404": { - "head": "404 - Side ikke funnet | Oops, vi falt i koden!", - "1": "Vi kan ikke finne siden du leter etter.", - "2": "Noe gikk galt" - }, - "github": "Send inn en billett på GitHub", - "showStack": "Vis stakksporing", - "copyStack": "Kopier stakksporing", - "githubSubmit": "GitHub - Send inn en billett", - "discordSubmit": "Discord - Send inn støtteinnlegg" - }, - "delete": "Slett", - "username": "Brukernavn", - "password": "Passord", - "welcome": "Velkommen", - "property": "Egenskap", - "black": "Svart", - "white": "Hvit", - "red": "Rød", - "green": "Grønn", - "blue": "Blå", - "custom": "Tilpasset...", - "WorkInProgess": "Arbeid pågår, Kan være feil eller buggy, Vennligst rapporter eventuelle problemer!", - "poweredBy": "Drevet av", - "yes": "Ja", - "no": "Nei", - "changedCredsMessage": "Legitimasjon endret!", - "notAuthenticatedMessage": "Bruker ikke autentisert.", - "userNotFoundMessage": "Bruker ikke funnet.", - "incorrectPasswordMessage": "Nåværende passord er feil.", - "usernameExistsMessage": "Det nye brukernavnet eksisterer allerede.", - "invalidUsernameMessage": "Ugyldig brukernavn, brukernavnet kan bare inneholde bokstaver, tall og følgende spesialtegn @._+- eller må være en gyldig e-postadresse.", - "invalidPasswordMessage": "Passordet kan ikke være tomt og må ikke ha mellomrom i begynnelsen eller slutten.", - "confirmPasswordErrorMessage": "Nytt passord og Bekreft nytt passord må være like.", - "deleteCurrentUserMessage": "Kan ikke slette den innloggede brukeren.", - "deleteUsernameExistsMessage": "Brukernavnet eksisterer ikke og kan ikke slettes.", - "downgradeCurrentUserMessage": "Kan ikke nedgradere den innloggede brukerens rolle.", - "disabledCurrentUserMessage": "Den pålogga brukeren kan ikke deaktiveres.", - "downgradeCurrentUserLongMessage": "Kan ikke nedgradere den innloggede brukerens rolle. Derfor vil ikke den innloggede brukeren bli vist.", - "userAlreadyExistsOAuthMessage": "Brukeren eksisterer allerede som en OAuth2-bruker.", - "userAlreadyExistsWebMessage": "Brukeren eksisterer allerede som en web-bruker.", - "oops": "Oops!", - "help": "Hjelp", - "goHomepage": "Gå til Hjemmeside", - "joinDiscord": "Bli med på vår Discord-server", - "seeDockerHub": "Se Docker Hub", - "visitGithub": "Besøk Github Repository", - "donate": "Doner", - "color": "Farge", - "sponsor": "Sponsor", - "info": "Info", - "pro": "Pro", - "page": "Side", - "pages": "Sider", - "loading": "Laster...", - "addToDoc": "Legg til i dokument", - "reset": "Reset", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Personvernerklæring", - "terms": "Vilkår og betingelser", - "accessibility": "Tilgjengelighet", - "cookie": "Informasjonskapsler", - "impressum": "Juridisk informasjon", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Pipeline-meny (Beta)", - "uploadButton": "Last opp tilpasset", - "configureButton": "Konfigurer", - "defaultOption": "Tilpasset", - "submitButton": "Send inn", - "help": "Pipeline hjelp", - "scanHelp": "Mappe skanning hjelp", - "deletePrompt": "Er du sikker på at du vil slette denne pipelinen?", - "tags": "automatisere,sekvens,skriptet,batch-prosess", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Pipeline konfigurasjon", - "pipelineNameLabel": "Pipeline navn", - "saveSettings": "Lagre operasjonsinnstillinger", - "pipelineNamePrompt": "Skriv inn pipeline-navn her", - "selectOperation": "Velg operasjon", - "addOperationButton": "Legg til operasjon", - "pipelineHeader": "Pipeline:", - "saveButton": "Last ned", - "validateButton": "Valider" - }, - "enterpriseEdition": { - "button": "Oppgrader til Pro", - "warning": "Denne funksjonen er kun tilgjengelig for Pro-brukere.", - "yamlAdvert": "Stirling PDF Pro støtter YAML-konfigurasjons filer og andre SSO funksjoner.", - "ssoAdvert": "Søker du etter flere administrerings funksjoner? Sjekk ut Stirling PDF Pro" - }, - "analytics": { - "title": "Vill du gjøre Stirling PDF bedre?", - "paragraph1": "Stirling PDF har valgfri analyse for å hjelpe oss med å forbedre produktet. Vi sporer ikke personlig informasjon eller filinnhold.", - "paragraph2": "Vennligst vurder å aktivere analyse for å hjelpe Stirling-PDF å vokse og for å la oss forstå brukerne våre bedre.", - "enable": "Aktiver analyse", - "disable": "Deaktiver analyse", - "settings": "Du kan endre innstillingene for analyse i config/settings.yml filen" - }, - "navbar": { - "favorite": "Favoritter", - "recent": "New and recently updated", - "darkmode": "Mørk Modus", - "language": "Språk", - "settings": "Innstillinger", - "allTools": "Verktøy", - "multiTool": "Multi Verktøy", - "search": "Søk", - "sections": { - "organize": "Organisere", - "convertTo": "Konverter til PDF", - "convertFrom": "Konverter fra PDF", - "security": "Signer & Sikkerhet", - "advance": "Avansert", - "edit": "Vis & Rediger", - "popular": "Populært" - } - }, - "settings": { - "title": "Innstillinger", - "update": "Oppdatering tilgjengelig", - "updateAvailable": "{0} er den nåværende installerte versjonen. En ny versjon ({1}) er tilgjengelig.", - "appVersion": "App Versjon:", - "downloadOption": { - "title": "Velg nedlastingsalternativ (For enkeltfil ikke-zip nedlastinger):", - "1": "Åpne i samme vindu", - "2": "Åpne i nytt vindu", - "3": "Last ned fil" - }, - "zipThreshold": "Zip filer når antall nedlastede filer overstiger", - "signOut": "Logg ut", - "accountSettings": "Kontoinnstillinger", - "bored": { - "help": "Aktiverer påskeegg-spill" - }, - "cacheInputs": { - "name": "Lagre skjemainput", - "help": "Aktiver for å lagre tidligere brukte input for fremtidige kjøringer" - } - }, - "changeCreds": { - "title": "Endre Legitimasjon", - "header": "Oppdater Konto Detaljer", - "changePassword": "Du bruker standard påloggingsdetaljer. Vennligst skriv inn et nytt passord", - "newUsername": "Nytt Brukernavn", - "oldPassword": "Nåværende Passord", - "newPassword": "Nytt Passord", - "confirmNewPassword": "Bekreft Nytt Passord", - "submit": "Send Endringer" - }, - "account": { - "title": "Kontoinnstillinger", - "accountSettings": "Kontoinnstillinger", - "adminSettings": "Admin Innstillinger - Vis og Legg til Brukere", - "userControlSettings": "Brukerkontroll Innstillinger", - "changeUsername": "Endre Brukernavn", - "newUsername": "Nytt Brukernavn", - "password": "Bekreftelsespassord", - "oldPassword": "Gammelt Passord", - "newPassword": "Nytt Passord", - "changePassword": "Endre Passord", - "confirmNewPassword": "Bekreft Nytt Passord", - "signOut": "Logg ut", - "yourApiKey": "Din API-nøkkel", - "syncTitle": "Synkroniser nettleserinnstillinger med Konto", - "settingsCompare": "Innstillingsammenligning:", - "property": "Egenskap", - "webBrowserSettings": "Nettleserinnstilling", - "syncToBrowser": "Synk Konto -> Nettleser", - "syncToAccount": "Synk Konto <- Nettleser" - }, - "adminUserSettings": { - "title": "Brukerkontroll Innstillinger", - "header": "Admin Brukerkontroll Innstillinger", - "admin": "Admin", - "user": "Bruker", - "addUser": "Legg til Ny Bruker", - "deleteUser": "Slett Bruker", - "confirmDeleteUser": "Skal brukeren slettes?", - "confirmChangeUserStatus": "Skal brukeren deaktiveres/aktiveres?", - "usernameInfo": "Brukernavn kan bare inneholde bokstaver, tall og følgende spesialtegn @._+- eller må være en gyldig e-postadresse.", - "roles": "Roller", - "role": "Rolle", - "actions": "Handlinger", - "apiUser": "Begrenset API Bruker", - "extraApiUser": "Ekstra Begrenset API Bruker", - "webOnlyUser": "Kun Web Bruker", - "demoUser": "Demo Bruker (Ingen tilpassede innstillinger)", - "internalApiUser": "Intern API Bruker", - "forceChange": "Tving bruker til å endre passord ved innlogging", - "submit": "Lagre Bruker", - "changeUserRole": "Endre Brukerens Rolle", - "authenticated": "Autentisert", - "editOwnProfil": "Rediger din profil", - "enabledUser": "aktivert bruker", - "disabledUser": "deaktivert bruker", - "activeUsers": "Aktive brukere:", - "disabledUsers": "Deaktiverte brukere:", - "totalUsers": "Totalt antall brukere:", - "lastRequest": "Siste spørring", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Database Import/Eksport", - "header": "Database Import/Eksport", - "fileName": "Fil navn", - "creationDate": "Opprettelsesdato", - "fileSize": "Filstørrelse", - "deleteBackupFile": "Slett sikkerhetskopifil", - "importBackupFile": "Importer sikkerhetskopifil", - "createBackupFile": "Lag sikkerhetskopifil", - "downloadBackupFile": "Last ned sikkerhetskopifil", - "info_1": "Når du importerer data, er det avgjørende å sikre riktig struktur. Hvis du er usikker på hva du gjør, bør du søke råd og støtte fra en profesjonell. En feil i strukturen kan føre til applikasjonsfeil, inkludert fullstendig manglende evne til å kjøre applikasjonen.", - "info_2": "Filnavnet spiller ingen rolle ved opplasting. Det vil bli omdøpt etterpå for å følge formatet backup_user_yyyyMMddHHmm.sql, for å sikre en konsekvent navnekonvensjon.", - "submit": "Importer sikkerhetskopi", - "importIntoDatabaseSuccessed": "Import til database vellykket", - "backupCreated": "Sikkerhetskopiering opprettet", - "fileNotFound": "Fil ikke funnet", - "fileNullOrEmpty": "Fil må ikke være tom eller null", - "failedImportFile": "Import av fil mislyktes", - "notSupported": "Denne funksjonen er ikke tilgjengelig for din databasetilkobling." - }, - "session": { - "expired": "Økten din har utløpt. Vennligst oppdater siden og prøv igjen.", - "refreshPage": "Oppdater Side" - }, - "home": { - "desc": "Din lokale one-stop-shop for alle dine PDF-behov.", - "searchBar": "Søk etter funksjoner...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Vis, annoter, legg til tekst eller bilder" - }, - "setFavorites": "Angi Favoritter", - "hideFavorites": "Skjul Favoritter", - "showFavorites": "Vis Favoritter", - "legacyHomepage": "Gammel hjemmeside", - "newHomePage": "Prøv vår nye hjemmeside!", - "alphabetical": "Alfabetisk", - "globalPopularity": "Global Popularitet", - "sortBy": "Sorter etter:", - "multiTool": { - "title": "PDF Multi Verktøy", - "desc": "Slå sammen, roter, omorganiser og fjern sider" - }, - "merge": { - "title": "Slå sammen", - "desc": "Slå enkelt sammen flere PDF-er til én." - }, - "split": { - "title": "Del opp", - "desc": "Del PDF-er i flere dokumenter" - }, - "rotate": { - "title": "Roter", - "desc": "Roter enkelt dine PDF-er." - }, - "imageToPdf": { - "title": "Bilde til PDF", - "desc": "Konverter et bilde (PNG, JPEG, GIF) til PDF." - }, - "pdfToImage": { - "title": "PDF til Bilde", - "desc": "Konverter en PDF til et bilde. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Organiser", - "desc": "Fjern/omorganiser sider i hvilken som helst rekkefølge" - }, - "addImage": { - "title": "Legg til bilde", - "desc": "Legger til et bilde på en angitt plassering i PDF-en" - }, - "watermark": { - "title": "Legg til Vannmerke", - "desc": "Legg til et tilpasset vannmerke i din PDF-dokument." - }, - "permissions": { - "title": "Endre Tillatelser", - "desc": "Endre tillatelsene til din PDF-dokument" - }, - "removePages": { - "title": "Fjern", - "desc": "Slett uønskede sider fra din PDF-dokument." - }, - "addPassword": { - "title": "Legg til Passord", - "desc": "Krypter din PDF-dokument med et passord." - }, - "removePassword": { - "title": "Fjern Passord", - "desc": "Fjern passordbeskyttelse fra din PDF-dokument." - }, - "compressPdfs": { - "title": "Komprimer", - "desc": "Komprimer PDF-er for å redusere filstørrelsen." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Endre Metadata", - "desc": "Endre/fjern/legg til metadata fra en PDF-dokument" - }, - "fileToPDF": { - "title": "Konverter fil til PDF", - "desc": "Konverter nesten hvilken som helst fil til PDF (DOCX, PNG, XLS, PPT, TXT og mer)" - }, - "ocr": { - "title": "OCR / Rydd opp skanninger", - "desc": "Rydd opp skanninger og oppdag tekst fra bilder i en PDF og legg den til som tekst." - }, - "extractImages": { - "title": "Ekstraher Bilder", - "desc": "Ekstraherer alle bilder fra en PDF og lagrer dem som zip" - }, - "pdfToPDFA": { - "title": "PDF til PDF/A", - "desc": "Konverter PDF til PDF/A for langtidslagring" - }, - "PDFToWord": { - "title": "PDF til Word", - "desc": "Konverter PDF til Word formater (DOC, DOCX og ODT)" - }, - "PDFToPresentation": { - "title": "PDF til Presentasjon", - "desc": "Konverter PDF til presentasjonsformater (PPT, PPTX og ODP)" - }, - "PDFToText": { - "title": "PDF til RTF (Tekst)", - "desc": "Konverter PDF til tekst eller RTF-format" - }, - "PDFToHTML": { - "title": "PDF til HTML", - "desc": "Konverter PDF til HTML-format" - }, - "PDFToXML": { - "title": "PDF til XML", - "desc": "Konverter PDF til XML-format" - }, - "ScannerImageSplit": { - "title": "Oppdag/Del Skannede bilder", - "desc": "Deler flere bilder fra et bilde/PDF" - }, - "sign": { - "title": "Signer", - "desc": "Legger til signatur i PDF ved tegning, tekst eller bilde" - }, - "flatten": { - "title": "Gjøre flat", - "desc": "Fjern alle interaktive elementer og skjemaer fra en PDF" - }, - "repair": { - "title": "Reparer", - "desc": "Forsøker å reparere en korrupt/ødelagt PDF" - }, - "removeBlanks": { - "title": "Fjern Tomme sider", - "desc": "Oppdager og fjerner tomme sider fra et dokument" - }, - "removeAnnotations": { - "title": "Fjern Anmerkninger", - "desc": "Fjerner alle kommentarer/anmerkninger fra en PDF" - }, - "compare": { - "title": "Sammenlign", - "desc": "Sammenligner og viser forskjellene mellom to PDF-dokumenter" - }, - "certSign": { - "title": "Signer med Sertifikat", - "desc": "Signer en PDF med et sertifikat/nøkkel (PEM/P12)" - }, - "removeCertSign": { - "title": "Fjern Sertifikatsignering", - "desc": "Fjern sertifikatsignatur fra PDF" - }, - "pageLayout": { - "title": "Flersidig Layout", - "desc": "Slå sammen flere sider av en PDF-dokument til en enkelt side" - }, - "scalePages": { - "title": "Juster sidestørrelse/skala", - "desc": "Endre størrelsen/skalaen til en side og/eller dens innhold." - }, - "pipeline": { - "title": "Pipeline (Avansert)", - "desc": "Utfør flere handlinger på PDF-er ved å definere pipelineskripter" - }, - "add-page-numbers": { - "title": "Legg til Sidetall", - "desc": "Legg til sidetall gjennom et dokument på en angitt plassering" - }, - "auto-rename": { - "title": "Auto Omdøp PDF Fil", - "desc": "Omdøper automatisk en PDF-fil basert på dens oppdagede overskrift" - }, - "adjust-contrast": { - "title": "Juster Farger/Kontrast", - "desc": "Juster kontrast, metning og lysstyrke i en PDF" - }, - "crop": { - "title": "Beskjære PDF", - "desc": "Beskjære en PDF for å redusere størrelsen (beholder tekst!)" - }, - "autoSplitPDF": { - "title": "Auto Del Sider", - "desc": "Auto Del Skannet PDF med fysisk skannet sidesplitter QR-kode" - }, - "sanitizePdf": { - "title": "Sanitiser", - "desc": "Fjern skript og andre elementer fra PDF-filer" - }, - "URLToPDF": { - "title": "URL/Nettsted Til PDF", - "desc": "Konverter hvilken som helst http(s)URL til PDF" - }, - "HTMLToPDF": { - "title": "HTML til PDF", - "desc": "Konverter hvilken som helst HTML-fil eller zip til PDF" - }, - "MarkdownToPDF": { - "title": "Markdown til PDF", - "desc": "Konverter hvilken som helst Markdown-fil til PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Få ALL informasjon om PDF", - "desc": "Fanger opp all tilgjengelig informasjon om PDF-er" - }, - "extractPage": { - "title": "Ekstraher side(r)", - "desc": "Ekstraher valgte sider fra PDF" - }, - "PdfToSinglePage": { - "title": "PDF til Enkelt Stor Side", - "desc": "Slår sammen alle PDF-sider til en stor enkeltside" - }, - "showJS": { - "title": "Vis Javascript", - "desc": "Søker og viser eventuelle JS injisert i en PDF" - }, - "autoRedact": { - "title": "Automatisk Sensurering", - "desc": "Automatisk sensurering (sverter ut) tekst i en PDF basert på inntastet tekst" - }, - "redact": { - "title": "Manuell Sensurering", - "desc": "Sensurerer en PDF basert på valgt tekst, tegnede former og/eller valgte side(r)" - }, - "tableExtraxt": { - "title": "PDF til CSV", - "desc": "Ekstraherer tabeller fra en PDF og konverterer dem til CSV" - }, - "autoSizeSplitPDF": { - "title": "Auto Del etter Størrelse/Antall", - "desc": "Del en enkelt PDF i flere dokumenter basert på størrelse, antall sider eller dokumenter" - }, - "overlay-pdfs": { - "title": "Overlay PDF-er", - "desc": "Legger PDF-er over hverandre" - }, - "split-by-sections": { - "title": "Del PDF etter Seksjoner", - "desc": "Del hver side av en PDF i mindre horisontale og vertikale seksjoner" - }, - "AddStampRequest": { - "title": "Legg til Stempel i PDF", - "desc": "Legg til tekst eller bilde stempler på angitte steder" - }, - "removeImagePdf": { - "title": "Fjern bilde", - "desc": "Fjern bilde fra PDF for å redusere filstørrelsen" - }, - "splitPdfByChapters": { - "title": "Split PDF by Chapters", - "desc": "Split a PDF into multiple files based on its chapter structure." - }, - "validateSignature": { - "title": "Valider PDF-signatur", - "desc": "Verifiser digitale signaturer og sertifikater i PDF-dokumenter" - }, - "replaceColorPdf": { - "title": "Erstatt og Inverter Farge", - "desc": "Erstatt farge for tekst og bakgrunn i PDF og inverter full farge av pdf for å redusere filstørrelsen" - } - }, - "viewPdf": { - "tags": "vis,les,annoter,tekst,bilde", - "title": "View/Edit PDF", - "header": "Vis PDF" - }, - "multiTool": { - "tags": "Multi Verktøy,Multi operasjon,UI,klikk dra,frontend,klientside,interaktiv,bevegelig", - "title": "PDF-multiverktøy", - "header": "PDF-multiverktøy", - "uploadPrompts": "Filnavn", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "selectPages": "Page Select", - "selectedPages": "Selected Pages", - "page": "Page", - "deleteSelected": "Delete Selected", - "downloadAll": "Export", - "downloadSelected": "Export Selected", - "insertPageBreak": "Insert Page Break", - "addFile": "Add File", - "rotateLeft": "Rotate Left", - "rotateRight": "Rotate Right", - "split": "Split", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "Delete", - "dragDropMessage": "Page(s) Selected", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "sammenslåing,sideoperasjoner,backend,serverside", - "title": "Slå sammen", - "header": "Slå sammen flere PDF-er (2+)", - "sortByName": "Sorter etter navn", - "sortByDate": "Sorter etter dato", - "removeCertSign": "Fjern digital signatur i den sammenslåtte filen?", - "submit": "Slå sammen" - }, - "split": { - "tags": "sideoperasjoner,del,flersidig,kutt,serverside", - "title": "Del PDF", - "header": "Del PDF", - "desc": { - "1": "De tallene du velger er sidenummeret du ønsker å dele på", - "2": "Således vil valg av 1,3,7-9 dele et 10-siders dokument inn i 6 separate PDF-er med:", - "3": "Dokument #1: Side 1", - "4": "Dokument #2: Side 2 og 3", - "5": "Dokument #3: Side 4, 5, 6 og 7", - "6": "Dokument #4: Side 8", - "7": "Dokument #5: Side 9", - "8": "Dokument #6: Side 10" - }, - "splitPages": "Skriv inn sidene som skal deles på:", - "submit": "Del" - }, - "rotate": { - "tags": "serverside", - "title": "Roter PDF", - "header": "Roter PDF", - "selectAngle": "Velg rotasjonsvinkel (i multipler av 90 grader):", - "submit": "Roter" - }, - "imageToPdf": { - "tags": "konvertering,bilde,jpg,foto" - }, - "pdfToImage": { - "tags": "konvertering,bilde,jpg,foto", - "title": "PDF til bilde", - "header": "PDF til bilde", - "selectText": "Bildeformat", - "singleOrMultiple": "Resultattype for side til bilde", - "single": "Enkelt stort bilde som kombinerer alle sider", - "multi": "Flere bilder, ett bilde per side", - "colorType": "Farge type", - "color": "Farge", - "grey": "Gråtone", - "blackwhite": "Svart-hvitt (kan miste data!)", - "submit": "Konverter", - "info": "Python is not installed. Required for WebP conversion.", - "placeholder": "(f.eks. 1,2,8 eller 4,7,12-16 eller 2n-1)" - }, - "pdfOrganiser": { - "tags": "dupleks,par,single,sorter,flytt", - "title": "Sideorganisering", - "header": "PDF-sideorganisering", - "submit": "Omorganiser sider", - "mode": { - "_value": "Modus", - "1": "Egendefinert sideorden", - "2": "Omvendt rekkefølge", - "3": "Dupleks sortering", - "4": "Brosjyresortering", - "5": "Sidesøm brosjyresortering", - "6": "Oddetall-jevntall splitt", - "7": "Fjern først", - "8": "Fjern sist", - "9": "Fjern først og sist", - "10": "Partall-Oddetall Sammenslåing", - "11": "Duplicate all pages" - }, - "placeholder": "(f.eks. 1,3,2 eller 4-8,2,10-12 eller 2n-1)" - }, - "addImage": { - "tags": "bilde,jpg,foto", - "title": "Legg til bilde", - "header": "Legg til bilde i PDF", - "everyPage": "På hver side?", - "upload": "Legg til bilde", - "submit": "Legg til bilde" - }, - "watermark": { - "tags": "tekst,gjentakende,etikett,egen,opphavsrett,varemerke,bilde,jpg,foto", - "title": "Legg til vannmerke", - "header": "Legg til vannmerke", - "customColor": "Tilpasset Tekstfarge", - "selectText": { - "1": "Velg PDF-fil å legge til vannmerke på:", - "2": "Vannmerketekst:", - "3": "Skriftstørrelse:", - "4": "Rotasjon (0-360):", - "5": "Breddeavstand (Avstand mellom hvert vannmerke horisontalt):", - "6": "Høydeavstand (Avstand mellom hvert vannmerke vertikalt):", - "7": "Opasitet (0% - 100%):", - "8": "Vannmerketype:", - "9": "Vannmerkebilde:", - "10": "Konverter PDF til PDF-Bilde" - }, - "submit": "Legg til vannmerke", - "type": { - "1": "Tekst", - "2": "Bilde" - } - }, - "permissions": { - "tags": "les,skriv,rediger,skriv ut", - "title": "Endre tillatelser", - "header": "Endre tillatelser", - "warning": "Advarsel: For at disse tillatelsene skal være ugjenkallelige, anbefales det å angi dem med et passord via siden for å legge til passord", - "selectText": { - "1": "Velg PDF for å endre tillatelser", - "2": "Tillatelser å sette", - "3": "Forhindre sammenstilling av dokumentet", - "4": "Forhindre innholdsekstraksjon", - "5": "Forhindre ekstraksjon for tilgjengelighet", - "6": "Forhindre utfylling av skjema", - "7": "Forhindre modifisering", - "8": "Forhindre annotasjonsmodifisering", - "9": "Forhindre utskrift", - "10": "Forhindre utskrift i ulike formater" - }, - "submit": "Endre" - }, - "removePages": { - "tags": "fjern sider,slett sider" - }, - "addPassword": { - "tags": "sikker,trygghet", - "title": "Legg til passord", - "header": "Legg til passord (Krypter)", - "selectText": { - "1": "Velg PDF-fil for kryptering", - "2": "Brukerpassord", - "3": "Krypteringsnøkkellengde", - "4": "Høyere verdier er sterkere, men lavere verdier har bedre kompatibilitet.", - "5": "Tillatelser å sette (Anbefales å brukes sammen med eierpassord)", - "6": "Forhindre sammenstilling av dokumentet", - "7": "Forhindre innholdsekstraksjon", - "8": "Forhindre ekstraksjon for tilgjengelighet", - "9": "Forhindre utfylling av skjema", - "10": "Forhindre modifisering", - "11": "Forhindre annotasjonsmodifisering", - "12": "Forhindre utskrift", - "13": "Forhindre utskrift i ulike formater", - "14": "Eierpassord", - "15": "Begrenser hva som kan gjøres med dokumentet når det er åpnet (Støttes ikke av alle leserprogrammer)", - "16": "Begrenser åpningen av dokumentet selv" - }, - "submit": "Krypter" - }, - "removePassword": { - "tags": "sikker,dekrypter,trygghet,upassord,slett passord", - "title": "Fjern passord", - "header": "Fjern passord (Dekrypter)", - "selectText": { - "1": "Velg PDF for å dekryptere", - "2": "Passord" - }, - "submit": "Fjern" - }, - "compressPdfs": { - "tags": "komprimer,liten,tiny" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "title,forfatter,dato,opprettelse,tidsstempel,utgiver,produsent,statistikk", - "title": "Endre metadata", - "header": "Endre metadata", - "selectText": { - "1": "Vennligst rediger variablene du ønsker å endre", - "2": "Slett all metadata", - "3": "Vis tilpasset metadata:", - "4": "Annen metadata:", - "5": "Legg til tilpasset metadataoppføring" - }, - "author": "Forfatter:", - "creationDate": "Opprettelsesdato (åååå/MM/dd HH:mm:ss):", - "creator": "Oppretter:", - "keywords": "Nøkkelord:", - "modDate": "Endringsdato (åååå/MM/dd HH:mm:ss):", - "producer": "Produsent:", - "subject": "Emne:", - "trapped": "Fanget:", - "submit": "Endre" - }, - "fileToPDF": { - "tags": "transformasjon,format,dokument,bilde,slide,tekst,konvertering,office,dokumenter,word,excel,powerpoint", - "title": "Fil til PDF", - "header": "Konverter hvilken som helst fil til PDF", - "credit": "Denne tjenesten bruker LibreOffice og Unoconv for filkonvertering.", - "supportedFileTypesInfo": "Støttede filtyper", - "supportedFileTypes": "Støttede filtyper bør inkludere følgende, men for en fullstendig oppdatert liste over støttede formater, vennligst se LibreOffice-dokumentasjonen", - "submit": "Konverter til PDF" - }, - "ocr": { - "tags": "gjenkjenning,tekst,bilde,skann,les,identifisere,deteksjon,redigerbar", - "title": "OCR / Rens av skanning", - "header": "Rens av skanning / OCR (Optisk tegngjenkjenning)", - "selectText": { - "1": "Velg språk som skal oppdages innenfor PDF-en (De oppførte er de som for øyeblikket er oppdaget):", - "2": "Produser tekstfil som inneholder OCR-tekst sammen med OCR-ert PDF", - "3": "Korriger sider som ble skannet med skjev vinkel ved å rotere dem tilbake på plass", - "4": "Rens siden slik at det er mindre sannsynlig at OCR vil finne tekst i bakgrunnsstøy. (Ingen utdataendring)", - "5": "Rens siden slik at det er mindre sannsynlig at OCR vil finne tekst i bakgrunnsstøy, opprettholder rensing i utdataen.", - "6": "Ignorer sider som har interaktiv tekst på dem, OCR kun sider som er bilder", - "7": "Tving OCR, vil OCR hver side og fjerne alle originale tekstelementer", - "8": "Normal (Vil gi feil hvis PDF inneholder tekst)", - "9": "Tilleggsinnstillinger", - "10": "OCR-modus", - "11": "Fjern bilder etter OCR (Fjerner ALLE bilder, kun nyttig hvis det er en del av konverteringsprosessen)", - "12": "Renderingstype (Avansert)" - }, - "help": "Vennligst les denne dokumentasjonen for hvordan du bruker dette for andre språk og/eller bruk utenfor Docker.", - "credit": "Denne tjenesten bruker qpdf og Tesseract for OCR.", - "submit": "Behandle PDF med OCR" - }, - "extractImages": { - "tags": "bilde,foto,lagre,arkiv,zip,fangst,hent", - "title": "Hent ut bilder", - "header": "Hent ut bilder", - "selectText": "Velg bildeformat for å konvertere de hentede bildene til", - "allowDuplicates": "Save duplicate images", - "submit": "Hent ut" - }, - "pdfToPDFA": { - "tags": "arkiv,langtidslagring,standard,konvertering,lagring,bevaring", - "title": "PDF til PDF/A", - "header": "PDF til PDF/A", - "credit": "Denne tjenesten bruker libreoffice for PDF/A-konvertering", - "submit": "Konverter", - "tip": "Fungere for øyeblikket ikke for flere innganger samtidig", - "outputFormat": "Utdataformat", - "pdfWithDigitalSignature": "PDFen inneholder en digital signatur. Denne vil bli fjernet i neste steg." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformasjon,format,konvertering,office,microsoft,dokumentfil", - "title": "PDF til Word", - "header": "PDF til Word", - "selectText": { - "1": "Utdatafilformat" - }, - "credit": "Denne tjenesten bruker LibreOffice for filkonvertering.", - "submit": "Konverter" - }, - "PDFToPresentation": { - "tags": "slides,visning,office,microsoft", - "title": "PDF til Presentasjon", - "header": "PDF til Presentasjon", - "selectText": { - "1": "Utdatafilformat" - }, - "credit": "Denne tjenesten bruker LibreOffice for filkonvertering.", - "submit": "Konverter" - }, - "PDFToText": { - "tags": "rikformat,riktekstformat,rik tekst format", - "title": "PDF til RTF (Tekst)", - "header": "PDF til RTF (Tekst)", - "selectText": { - "1": "Utdatafilformat" - }, - "credit": "Denne tjenesten bruker LibreOffice for filkonvertering.", - "submit": "Konverter" - }, - "PDFToHTML": { - "tags": "web-innhold,nettleservennlig", - "title": "PDF til HTML", - "header": "PDF til HTML", - "credit": "Denne tjenesten bruker pdftohtml for filkonvertering.", - "submit": "Konverter" - }, - "PDFToXML": { - "tags": "datauttrekk,strukturert innhold,interop,transformasjon,konverter", - "title": "PDF til XML", - "header": "PDF til XML", - "credit": "Denne tjenesten bruker LibreOffice for filkonvertering.", - "submit": "Konverter" - }, - "ScannerImageSplit": { - "tags": "separere,auto-oppdag,skanninger,flere bilder,organisere", - "selectText": { - "1": "Vinkelgrense:", - "2": "Angir den minimale absolutte vinkelen som kreves for at bildet skal roteres (standard: 10).", - "3": "Toleranse:", - "4": "Bestemmer området for fargevariasjon rundt estimert bakgrunnsfarge (standard: 30).", - "5": "Minimumsområde:", - "6": "Angir minimumsområde terskel for et bilde (standard: 10000).", - "7": "Minimumskonturområde:", - "8": "Angir minimumskonturområde terskel for et bilde", - "9": "Kantstørrelse:", - "10": "Angir størrelsen på kanten som legges til og fjernes for å forhindre hvite kanter i utdataen (standard: 1)." - }, - "info": "Python er ikke installert. Det er påkrevd for å kjøre." - }, - "sign": { - "tags": "autorisere,initialer,tegnet signatur,tekst signatur,bildesignatur", - "title": "Signer", - "header": "Signer PDF-er", - "upload": "Last opp bilde", - "draw": "Tegn signatur", - "text": "Tekstinput", - "clear": "Slett", - "add": "Legg til", - "saved": "Lagrede signaturer", - "save": "Lagre signatur", - "personalSigs": "Personlige signaturer", - "sharedSigs": "Delte signaturer", - "noSavedSigs": "Ingen lagrede signaturer funnet", - "addToAll": "Legg til på alle sider", - "delete": "Slett", - "first": "Første side", - "last": "Siste side", - "next": "Neste side", - "previous": "Forrige side", - "maintainRatio": "Bytt behold sideforhold", - "undo": "Angre", - "redo": "Gjør om" - }, - "flatten": { - "tags": "statisk,deaktiver,ikke-interaktiv,strømlinjeformet", - "title": "Utjevning", - "header": "Utjevning av PDf", - "flattenOnlyForms": "Utjevning av kun skjemaer", - "submit": "Utjevn" - }, - "repair": { - "tags": "fiks,gjenopprett,korreksjon,gjenoppretting", - "title": "Reparer", - "header": "Reparer PDF-er", - "submit": "Reparer" - }, - "removeBlanks": { - "tags": "rydde opp,strømlinjeformet,ingen-innhold,organisere", - "title": "Fjern Blank Sider", - "header": "Fjern Blank Sider", - "threshold": "Pixel Hvithetsgrense:", - "thresholdDesc": "Grense for å bestemme hvor hvit en hvit piksel må være for å klassifiseres som 'Hvit'. 0 = Svart, 255 = Ren hvit.", - "whitePercent": "Hvit Prosent (%):", - "whitePercentDesc": "Prosent av siden som må være 'hvite' piksler for å fjernes", - "submit": "Fjern Blank Sider" - }, - "removeAnnotations": { - "tags": "kommentarer,utheving,notater,markering,fjern", - "title": "Fjern Anmerkninger", - "header": "Fjern Anmerkninger", - "submit": "Fjern" - }, - "compare": { - "tags": "differensiere,kontrast,endringer,analyse", - "title": "Sammenlign", - "header": "Sammenlign PDF-er", - "highlightColor": { - "1": "Uthevingsfarge 1:", - "2": "Uthevingsfarge 2:" - }, - "document": { - "1": "Dokument 1", - "2": "Dokument 2" - }, - "submit": "Sammenlign", - "complex": { - "message": "Ett eller begge av de angitte dokumentene er store filer, nøyaktigheten av sammenligningen kan bli redusert" - }, - "large": { - "file": { - "message": "Ett eller begge av de angitte dokumentene er for store til å behandle" - } - }, - "no": { - "text": { - "message": "En eller begge av de valgte PDF-ene har ingen tekstinnhold. Vennligst velg PDF-er med tekst for sammenligning." - } - } - }, - "certSign": { - "tags": "autentisere,PEM,P12,offisiell,krypter", - "title": "Sertifikatsignering", - "header": "Signer en PDF med sertifikatet ditt (Arbeid pågår)", - "selectPDF": "Velg en PDF-fil for signering:", - "jksNote": "Merk: Hvis sertifikattypen din ikke er oppført nedenfor, vennligst konverter den til en Java-keystore (.jks) fil ved å bruke kommandolinjeverktøyet keytool. Deretter velger du .jks-fil-alternativet nedenfor.", - "selectKey": "Velg din private nøkkelfil (PKCS#8-format, kan være .pem eller .der):", - "selectCert": "Velg din sertifikatfil (X.509-format, kan være .pem eller .der):", - "selectP12": "Velg din PKCS#12-keystore-fil (.p12 eller .pfx) (Valgfritt, hvis angitt, bør den inneholde din private nøkkel og sertifikat):", - "selectJKS": "Velg din Java-keystore-fil (.jks eller .keystore):", - "certType": "Sertifikattype", - "password": "Skriv inn passordet for keystore eller privat nøkkel (hvis noen):", - "showSig": "Vis signatur", - "reason": "Årsak", - "location": "Sted", - "name": "Navn", - "showLogo": "Show Logo", - "submit": "Signer PDF" - }, - "removeCertSign": { - "tags": "autentisere,PEM,P12,offisiell,dechiffrere", - "title": "Fjern Sertifikatsignatur", - "header": "Fjern det digitale sertifikatet fra PDF-en", - "selectPDF": "Velg en PDF-fil:", - "submit": "Fjern Signatur" - }, - "pageLayout": { - "tags": "slå sammen,kompositt,enkel-visning,organisere", - "title": "Flersideoppsett", - "header": "Flersideoppsett", - "pagesPerSheet": "Sider per ark:", - "addBorder": "Legg til rammer", - "submit": "Send inn" - }, - "scalePages": { - "tags": "endre størrelse,modifisere,dimensjon,tilpasse", - "title": "Juster side-skala", - "header": "Juster side-skala", - "pageSize": "Størrelse på et ark i dokumentet.", - "keepPageSize": "Original Size", - "scaleFactor": "Zoom-nivå (beskjær) for en side.", - "submit": "Send inn" - }, - "add-page-numbers": { - "tags": "paginere,etikett,organisere,indeks" - }, - "auto-rename": { - "tags": "auto-oppdag,overskrift-basert,organisere,omdøp", - "title": "Auto Navngi", - "header": "Auto Navngi PDF", - "submit": "Auto Navngi" - }, - "adjust-contrast": { - "tags": "fargekorrigering,tilpasse,modifisere,forbedre" - }, - "crop": { - "tags": "trim,redusere,redigere,form", - "title": "Beskjær", - "header": "Beskjær PDF", - "submit": "Send inn" - }, - "autoSplitPDF": { - "tags": "QR-basert,separere,skann-segment,organisere", - "title": "Automatisk Del PDF", - "header": "Automatisk Del PDF", - "description": "Skriv ut, Sett inn, Skann, last opp, og la oss automatisk separere dokumentene dine. Ingen manuell sortering nødvendig.", - "selectText": { - "1": "Skriv ut noen delingssider fra alternativene nedenfor (Svart-hvitt er greit).", - "2": "Skann alle dokumentene samtidig ved å sette inn delingssiden mellom dem.", - "3": "Last opp den enkelte store skannede PDF-filen og la Stirling PDF håndtere resten.", - "4": "Delingssidene blir automatisk oppdaget og fjernet, og garanterer et pent endelig dokument." - }, - "formPrompt": "Send inn PDF som inneholder Stirling-PDF-sideskillere:", - "duplexMode": "Dupleksmodus (Front- og bakskanning)", - "dividerDownload2": "Last ned 'Auto Splitter Divider (med instruksjoner).pdf'", - "submit": "Send inn" - }, - "sanitizePdf": { - "tags": "rydde opp,sikker,trygg,fjern trusler" - }, - "URLToPDF": { - "tags": "web-fangst,lagre side,web-til-dokument,arkiv", - "title": "URL Til PDF", - "header": "URL Til PDF", - "submit": "Konverter", - "credit": "Bruker WeasyPrint" - }, - "HTMLToPDF": { - "tags": "markup,web-innhold,transformasjon,konverter", - "title": "HTML Til PDF", - "header": "HTML Til PDF", - "help": "Godtar HTML-filer og ZIP-filer som inneholder html/css/bilder etc. som er nødvendige", - "submit": "Konverter", - "credit": "Bruker WeasyPrint", - "zoom": "Zoomnivå for visning av nettsiden.", - "pageWidth": "Bredde på siden i centimeter. (Blank for standard)", - "pageHeight": "Høyde på siden i centimeter. (Blank for standard)", - "marginTop": "Øvre margin på siden i millimeter. (Blank for standard)", - "marginBottom": "Nedre margin på siden i millimeter. (Blank for standard)", - "marginLeft": "Venstre margin på siden i millimeter. (Blank for standard)", - "marginRight": "Høyre margin på siden i millimeter. (Blank for standard)", - "printBackground": "Vis bakgrunnen til nettsider.", - "defaultHeader": "Aktiver standardtopp (Navn og sidenummer)", - "cssMediaType": "Endre CSS-mediatypen til siden.", - "none": "Ingen", - "print": "Utskrift", - "screen": "Skjerm" - }, - "MarkdownToPDF": { - "tags": "markup,web-innhold,transformasjon,konverter", - "title": "Markdown Til PDF", - "header": "Markdown Til PDF", - "submit": "Konverter", - "help": "Arbeid pågår", - "credit": "Bruker WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "informasjon,data,statistikk", - "title": "Få Info om PDF", - "header": "Få Info om PDF", - "submit": "Få Info", - "downloadJson": "Last ned JSON" - }, - "extractPage": { - "tags": "ekstrahere" - }, - "PdfToSinglePage": { - "tags": "enkelside" - }, - "showJS": { - "tags": "JS", - "title": "Vis Javascript", - "header": "Vis Javascript", - "downloadJS": "Last ned Javascript", - "submit": "Vis" - }, - "autoRedact": { - "tags": "Sensurere,Skjule,sverte ut,svart,markør,skjult", - "title": "Automatisk Sensurering", - "header": "Automatisk Sensurering", - "colorLabel": "Farge", - "textsToRedactLabel": "Tekst som skal sensureres (linje-separert)", - "textsToRedactPlaceholder": "f.eks. \\nKonfidensiell \\nTopp-hemmelig", - "useRegexLabel": "Bruk Regex", - "wholeWordSearchLabel": "Hele ordsøk", - "customPaddingLabel": "Tilpasset ekstra polstring", - "convertPDFToImageLabel": "Konverter PDF til PDF-bilde (Brukes for å fjerne tekst bak boksen)", - "submitButton": "Send inn" - }, - "redact": { - "tags": "Sensurere,Skjule,sverte ut,svart,markør,skjult,manuell", - "title": "Manuell Sensurering", - "header": "Manuell Sensurering", - "submit": "Sensurer", - "textBasedRedaction": "Tekstbasert sensurering", - "pageBasedRedaction": "Sidebasert sensurering", - "convertPDFToImageLabel": "Konverter PDF til PDF-bilde (Brukes for å fjerne tekst bak boksen)", - "pageRedactionNumbers": { - "title": "Sider", - "placeholder": "(f.eks. 1,2,8 eller 4,7,12-16 eller 2n-1)" - }, - "redactionColor": { - "title": "Sensureringsfarge" - }, - "export": "Eksporter", - "upload": "Last opp", - "boxRedaction": "Tegn sensureringsboks", - "zoom": "Zoom", - "zoomIn": "Zoom inn", - "zoomOut": "Zoom ut", - "nextPage": "Neste side", - "previousPage": "Forrige side", - "toggleSidebar": "Vis/skjul sidepanel", - "showThumbnails": "Vis miniatyrbilder", - "showDocumentOutline": "Vis dokumentstruktur (dobbeltklikk for å utvide/skjule alle elementer)", - "showAttatchments": "Vis vedlegg", - "showLayers": "Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand)", - "colourPicker": "Fargevelger", - "findCurrentOutlineItem": "Finn gjeldende punkt i strukturen", - "applyChanges": "Bruk endringer" - }, - "tableExtraxt": { - "tags": "CSV,tabelluttrekk,ekstrahere,konvertere" - }, - "autoSizeSplitPDF": { - "tags": "pdf,del,dokument,organisering" - }, - "overlay-pdfs": { - "tags": "overlay", - "header": "Overlegg PDF-filer", - "baseFile": { - "label": "Velg grunnleggende PDF-fil" - }, - "overlayFiles": { - "label": "Velg overlegg PDF-filer" - }, - "mode": { - "label": "Velg overleggmodus", - "sequential": "Sekvensiell overlegg", - "interleaved": "Interleaved overlegg", - "fixedRepeat": "Fast gjentakende overlegg" - }, - "counts": { - "label": "Antall overlegg (for fast gjentakende modus)", - "placeholder": "Skriv inn komma-separerte tellinger (f.eks. 2,3,1)" - }, - "position": { - "label": "Velg overleggposisjon", - "foreground": "Forgrunn", - "background": "Bakgrunn" - }, - "submit": "Send inn" - }, - "split-by-sections": { - "tags": "seksjonsdeling,del,tilpass", - "title": "Del PDF etter seksjoner", - "header": "Del PDF inn i seksjoner", - "horizontal": { - "label": "Horisontale delinger", - "placeholder": "Skriv inn antall horisontale delinger" - }, - "vertical": { - "label": "Vertikale delinger", - "placeholder": "Skriv inn antall vertikale delinger" - }, - "submit": "Del PDF", - "merge": "Slå sammen til én PDF" - }, - "AddStampRequest": { - "tags": "stempel,legg til bilde,senter bilde,vannmerke,PDF,embed,tilpass", - "header": "Stemple PDF", - "title": "Stemple PDF", - "stampType": "Stempeltype", - "stampText": "Stempele tekst", - "stampImage": "Stemplebilde", - "alphabet": "Alfabet", - "fontSize": "Font/Bilde Størrelse", - "rotation": "Rotasjon", - "opacity": "Gjennomsiktighet", - "position": "Posisjon", - "overrideX": "Overskriv X-koordinat", - "overrideY": "Overskriv Y-koordinat", - "customMargin": "Tilpasset Margin", - "customColor": "Tilpasset Tekstfarge", - "submit": "Send inn" - }, - "removeImagePdf": { - "tags": "Fjern Bilde,Sideoperasjoner,Backend,serverside" - }, - "splitPdfByChapters": { - "tags": "split,chapters,bookmarks,organize" - }, - "validateSignature": { - "tags": "signatur,verifiser,valider,pdf,sertifikat,digital signatur,Valider signatur,Valider sertifikat", - "title": "Valider PDF-signaturer", - "header": "Valider Digitale Signaturer", - "selectPDF": "Velg signert PDF-fil", - "submit": "Valider Signaturer", - "results": "Valideringsresultater", - "status": { - "_value": "Status", - "valid": "Gyldig", - "invalid": "Ugyldig" - }, - "signer": "Signatar", - "date": "Dato", - "reason": "Årsak", - "location": "Sted", - "noSignatures": "Ingen digitale signaturer funnet i dette dokumentet", - "chain": { - "invalid": "Validering av sertifikatkjede feilet - kan ikke verifisere signatarens identitet" - }, - "trust": { - "invalid": "Sertifikatet er ikke i tillitslager - kilden kan ikke verifiseres" - }, - "cert": { - "expired": "Sertifikatet har utløpt", - "revoked": "Sertifikatet har blitt tilbakekalt", - "info": "Sertifikatdetaljer", - "issuer": "Utsteder", - "subject": "Emne", - "serialNumber": "Serienummer", - "validFrom": "Gyldig Fra", - "validUntil": "Gyldig Til", - "algorithm": "Algoritme", - "keySize": "Nøkkelstørrelse", - "version": "Versjon", - "keyUsage": "Nøkkelbruk", - "selfSigned": "Selv-signert", - "bits": "bits" - }, - "signature": { - "info": "Signaturinformasjon", - "_value": "Signatur", - "mathValid": "Signaturen er matematisk gyldig MEN:" - }, - "selectCustomCert": "Tilpasset Sertifikatfil X.509 (Valgfritt)" - }, - "replace-color": { - "title": "Erstatt-Inverter-Farge", - "header": "Erstatt-Inverter Farge PDF", - "selectText": { - "1": "Erstatt eller Inverter farge alternativer", - "2": "Standard(Standard høy kontrast farger)", - "3": "Tilpasset(Tilpassede farger)", - "4": "Full-Invertering(Inverter alle farger)", - "5": "Høy kontrast fargealternativer", - "6": "hvit tekst på svart bakgrunn", - "7": "Svart tekst på hvit bakgrunn", - "8": "Gul tekst på svart bakgrunn", - "9": "Grønn tekst på svart bakgrunn", - "10": "Velg tekstfarge", - "11": "Velg bakgrunnsfarge" - }, - "submit": "Erstatt" - }, - "replaceColorPdf": { - "tags": "Erstatt Farge,Sideoperasjoner,Backend,serverside" - }, - "login": { - "title": "Logg inn", - "header": "Logg inn", - "signin": "Logg inn", - "rememberme": "Husk meg", - "invalid": "Ugyldig brukernavn eller passord.", - "locked": "Kontoen din har blitt låst.", - "signinTitle": "Vennligst logg inn", - "ssoSignIn": "Logg inn via Enkel Pålogging", - "oAuth2AutoCreateDisabled": "OAUTH2 Auto-Opretting av bruker deaktivert", - "oAuth2AdminBlockedUser": "Registrering eller pålogging for ikke-registrerte brukere er for øyeblikket blokkert. Vennligst kontakt administrator", - "oauth2RequestNotFound": "Autentiseringsforespørsel ikke funnet", - "oauth2InvalidUserInfoResponse": "Ugyldig brukerinforespons", - "oauth2invalidRequest": "Ugyldig forespørsel", - "oauth2AccessDenied": "Tilgang nektet", - "oauth2InvalidTokenResponse": "Ugyldig tokenrespons", - "oauth2InvalidIdToken": "Ugyldig Id Token", - "relyingPartyRegistrationNotFound": "Ingen konfigurasjon funnet for Relying Party\"", - "userIsDisabled": "Bruker er deaktivert, innlogging er for øyeblikket blokkert med dette brukernavnet. Vennligst kontakt administrator", - "alreadyLoggedIn": "Du er allerede innlogget på", - "alreadyLoggedIn2": "enheter. Logg ut og forsøk igjen", - "toManySessions": "Du har for mange aktive økter", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF Til Enkelt Side", - "header": "PDF Til Enkelt Side", - "submit": "Konverter til Enkelt Side" - }, - "pageExtracter": { - "title": "Trekk ut Sider", - "header": "Trekk ut Sider", - "submit": "Trekk ut", - "placeholder": "(f.eks. 1,2,8 eller 4,7,12-16 eller 2n-1)" - }, - "sanitizePDF": { - "title": "Rensker PDF", - "header": "Rensker en PDF fil", - "selectText": { - "1": "Fjern JavaScript-handlinger", - "2": "Fjern innebygde filer", - "3": "Remove XMP metadata", - "4": "Fjern lenker", - "5": "Fjern skrifter", - "6": "Remove Document Info Metadata" - }, - "submit": "Rensk PDF" - }, - "adjustContrast": { - "title": "Juster Kontrast", - "header": "Juster Kontrast", - "contrast": "Kontrast:", - "brightness": "Lysstyrke:", - "saturation": "Metning:", - "download": "Last ned" - }, - "compress": { - "title": "Komprimer", - "header": "Komprimer PDF", - "credit": "Denne tjenesten bruker qpdf for PDF-komprimering/optimisering.", - "grayscale": { - "label": "Bruk gråskala for komprimering" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Optimeringsnivå:", - "4": "Automatisk modus - Justerer automatisk kvaliteten for å få PDF til nøyaktig størrelse", - "5": "Forventet PDF-størrelse (f.eks. 25MB, 10.8MB, 25KB)" - }, - "submit": "Komprimer" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "This feature is also available in our multi-tool page. Check it out for enhanced page-by-page UI and additional features!" - }, - "pageRemover": { - "title": "Sletting av sider", - "header": "PDF-sidefjerner", - "pagesToDelete": "Sider som skal slettes (Skriv inn en kommaseparert liste over sidenumre):", - "submit": "Slett sider", - "placeholder": "(f.eks. 1,2,6 eller 1-10,15-30)" - }, - "imageToPDF": { - "title": "Bilde til PDF", - "header": "Bilde til PDF", - "submit": "Konverter", - "selectLabel": "Bildejusteringsalternativer", - "fillPage": "Fyll side", - "fitDocumentToImage": "Pass side til bilde", - "maintainAspectRatio": "Behold sideforhold", - "selectText": { - "2": "Automatisk rotasjon av PDF", - "3": "Flere fillogikk (Bare aktivert ved arbeid med flere bilder)", - "4": "Slå sammen til en enkelt PDF", - "5": "Konverter til separate PDF-filer" - } - }, - "PDFToCSV": { - "title": "PDF til CSV", - "header": "PDF til CSV", - "prompt": "Velg side for å trekke ut tabell", - "submit": "Trekke ut" - }, - "split-by-size-or-count": { - "title": "Del PDF etter størrelse eller antall", - "header": "Del PDF etter størrelse eller antall", - "type": { - "label": "Velg delingstype", - "size": "Etter størrelse", - "pageCount": "Etter sidetall", - "docCount": "Etter antall dokumenter" - }, - "value": { - "label": "Skriv inn verdi", - "placeholder": "Skriv inn størrelse (f.eks. 2 MB eller 3 KB) eller antall (f.eks. 5)" - }, - "submit": "Send inn" - }, - "printFile": { - "title": "Skriv ut fil", - "header": "Skriv ut fil til skriver", - "selectText": { - "1": "Velg fil som skal skrives ut", - "2": "Skriv inn skrivernavn" - }, - "submit": "Skriv ut" - }, - "licenses": { - "nav": "Lisenser", - "title": "Tredjeparts lisenser", - "header": "Tredjeparts lisenser", - "module": "Modul", - "version": "Versjon", - "license": "Lisens" - }, - "survey": { - "nav": "Survey", - "title": "Stirling-PDF Survey", - "description": "Stirling-PDF has no tracking so we want to hear from our users to improve Stirling-PDF!", - "changes": "Stirling-PDF has changed since the last survey! To find out more please check our blog post here:", - "changes2": "With these changes we are getting paid business support and funding", - "please": "Please consider taking our survey!", - "disabled": "(Survey popup will be disabled in following updates but available at foot of page)", - "button": "Take Survey", - "dontShowAgain": "Don't show again", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Remove image", - "header": "Remove image", - "removeImage": "Remove image", - "submit": "Remove image" - }, - "splitByChapters": { - "title": "Split PDF by Chapters", - "header": "Split PDF by Chapters", - "bookmarkLevel": "Bookmark Level", - "includeMetadata": "Include Metadata", - "allowDuplicates": "Allow Duplicates", - "desc": { - "1": "This tool splits a PDF file into multiple PDFs based on its chapter structure.", - "2": "Bookmark Level: Choose the level of bookmarks to use for splitting (0 for top-level, 1 for second-level, etc.).", - "3": "Include Metadata: If checked, the original PDF's metadata will be included in each split PDF.", - "4": "Allow Duplicates: If checked, allows multiple bookmarks on the same page to create separate PDFs." - }, - "submit": "Split PDF" - }, - "fileChooser": { - "click": "Click", - "or": "or", - "dragAndDrop": "Drag & Drop", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "Drag & Drop file(s) here", - "extractPDF": "Extracting..." - }, - "releases": { - "footer": "Versjoner", - "title": "Versjonsnotater", - "header": "Versjonsnotater", - "current": { - "version": "Gjeldende Versjon" - }, - "note": "Versjonsnotater er kun tilgjengelige på engelsk" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/pl-PL/translation.json b/frontend/dist/locales/pl-PL/translation.json deleted file mode 100644 index 86eff3348..000000000 --- a/frontend/dist/locales/pl-PL/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Rozmiar Czcionki", - "fontName": "Nazwa Czcionki", - "title": "Dodaj numerację stron", - "header": "Dodaj numerację stron", - "selectText": { - "1": "Wskaż plik PDF:", - "2": "Rozmiar marginesu", - "3": "Pozycja", - "4": "Numer początkowy", - "5": "Ilość stron do ponumerowania", - "6": "Tekst własny" - }, - "customTextDesc": "Tekst własny", - "numberPagesDesc": "Strony do numeracji, wszystkie (all), 1-5, 2, 5, 9", - "customNumberDesc": "Domyślnie do {n}, również akceptuje 'Strona {n} z {total},Teskt-{n},'{filename}-{n}", - "submit": "Dodaj numerację stron" - }, - "pdfPrompt": "Wybierz PDF", - "multiPdfPrompt": "Wybierz PDF (2+)", - "multiPdfDropPrompt": "Wybierz (lub przeciągnij i puść) wszystkie dokumenty PDF", - "imgPrompt": "Wybierz obraz(y)", - "genericSubmit": "Wyślij", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Ostrzeżenie: Ten proces może potrwać do minuty, w zależności od rozmiaru pliku", - "pageOrderPrompt": "Kolejność stron (wprowadź listę numerów stron oddzielonych przecinkami) :", - "pageSelectionPrompt": "Niestandardowy wybór strony (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :", - "goToPage": "Idź", - "true": "Tak", - "false": "Nie", - "unknown": "Nieznany", - "save": "Zapisz", - "saveToBrowser": "Zapisz w przeglądarce", - "close": "Zamknij", - "filesSelected": "wybrane pliki", - "noFavourites": "Nie dodano ulubionych", - "downloadComplete": "Pobieranie zakończone", - "bored": "Znudzony czekaniem?", - "alphabet": "Alfabet", - "downloadPdf": "Pobierz PDF", - "text": "Tekst", - "font": "Czcionka", - "selectFillter": "-- Wybierz --", - "pageNum": "Numer strony", - "sizes": { - "small": "mniejszy", - "medium": "średni", - "large": "duży", - "x-large": "bardzo duży" - }, - "error": { - "pdfPassword": "Dokument PDF jest zabezpieczony hasłem, musisz podać prawidłowe hasło.", - "_value": "błąd", - "sorry": "Przykro nam z powodu problemu!", - "needHelp": "Potrzebujesz pomocy/znalazłem usterkę?", - "contactTip": "Jeśli ciągle masz problem, skontakuj się z nami. Wyślij zgłoszenia na naszej stronie GitHub albo za pomocą Discorda:", - "404": { - "head": "404 - Strona nieodnaleziona | Oho, popsuliśmy kod !", - "1": "Nie ma czegoś takiego!", - "2": "Coś się nie udało!" - }, - "github": "Zgłoś problem na GitHub", - "showStack": "Pokaż Stack Trace", - "copyStack": "Kopiuj Stack Trace", - "githubSubmit": "GitHub - wyślij zgłoszenie", - "discordSubmit": "Discord - wyślij posta z prośbą o pomoc" - }, - "delete": "usuń", - "username": "nazwa użytkownika", - "password": "hasło", - "welcome": "Witaj", - "property": "własność", - "black": "czarny", - "white": "biały", - "red": "czerwony", - "green": "zielony", - "blue": "niebieski", - "custom": "Własny...", - "WorkInProgess": "Praca w toku, proszę zgłaszać błędy!", - "poweredBy": "Zasilany", - "yes": "tak", - "no": "nie", - "changedCredsMessage": "Dane logowanie zostały zmienione.", - "notAuthenticatedMessage": "Użytkownik nie jest zalogowany.", - "userNotFoundMessage": "Brak użytkownika.", - "incorrectPasswordMessage": "Nieprawidłowe hasło.", - "usernameExistsMessage": "Taki uzytkownik już istnieje.", - "invalidUsernameMessage": "Niewłaściwa nazwa użytkownika - musi zawierać litery, cyfry i @._+- LUB być adresem email.", - "invalidPasswordMessage": "Hasło nie może być puste i nie może zawierać spacji na początku ani na końcu.", - "confirmPasswordErrorMessage": "Wpisz poprawnie hasło w OBA pola.", - "deleteCurrentUserMessage": "Nie można usunąć zalogowanego użytkownika", - "deleteUsernameExistsMessage": "Nie można usunąć zalogowanego użytkownika", - "downgradeCurrentUserMessage": "Nie można obniżyć roli bieżącego użytkownika", - "disabledCurrentUserMessage": "Nie można wyłączyć bieżącego użytkownika", - "downgradeCurrentUserLongMessage": "Nie można obniżyć roli bieżącego użytkownika. W związku z tym bieżący użytkownik nie zostanie wyświetlony.", - "userAlreadyExistsOAuthMessage": "Takie konto użytkownika istnieje - stworzone za pomocą OAuth2.", - "userAlreadyExistsWebMessage": "Takie konto użytkownika istnieje - stworzone za pomocą przeglądarki.", - "oops": "Ups!", - "help": "Pomoc", - "goHomepage": "Idź do strony domowej", - "joinDiscord": "Zapraszamy na DISCORD!", - "seeDockerHub": "Docker Hub", - "visitGithub": "Odwiedź repozytorium GitHub", - "donate": "Podaruj", - "color": "kolor", - "sponsor": "sponsor", - "info": "informacje", - "pro": "Pro", - "page": "Strona", - "pages": "Strony", - "loading": "Ładowanie...", - "addToDoc": "Dodaj do dokumentu", - "reset": "Resetuj", - "apply": "Zastosuj", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Polityka Prywatności", - "terms": "Zasady i Postanowienia", - "accessibility": "Dostępność", - "cookie": "Polityka plików cookie", - "impressum": "Impresja", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Automatyzacja - menu (Beta)", - "uploadButton": "Wrzuć pliki", - "configureButton": "Konfiguracja", - "defaultOption": "Własny", - "submitButton": "Wyślij", - "help": "Pomoc automatyzacji", - "scanHelp": "Pomoc obserwowania folderu", - "deletePrompt": "Na pewno chcesz skasować automatyzacje", - "tags": "automatyzacja, sekwencja, skrypt, przetwarzanie wsadowe", - "title": "Automatyzacja" - }, - "pipelineOptions": { - "header": "Konfiguracja automatyzacji", - "pipelineNameLabel": "Nazwa automatyzacji", - "saveSettings": "Zapisz ustawienia operacji", - "pipelineNamePrompt": "Podaj nazwę automatyzacji", - "selectOperation": "Wybierz operację", - "addOperationButton": "Dodaj operację", - "pipelineHeader": "Automatyzacja", - "saveButton": "Pobierz", - "validateButton": "Waliduj" - }, - "enterpriseEdition": { - "button": "Uaktualnij do wersji Pro", - "warning": "Ta funkcja jest dostępna tylko dla użytkowników Pro.", - "yamlAdvert": "Stirling PDF Pro obsługuje pliki konfiguracyjne YAML i inne funkcje SSO.", - "ssoAdvert": "Szukasz więcej funkcji zarządzania użytkownikami? Sprawdź Stirling PDF Pro" - }, - "analytics": { - "title": "Czy chcesz ulepszyć Stirling PDF?", - "paragraph1": "Stirling PDF ma opcję analizy, która pomaga nam udoskonalać produkt. Nie śledzimy żadnych danych osobowych ani zawartości plików.", - "paragraph2": "Rozważ włączenie funkcji analitycznych, które pomogą w rozwoju Stirling-PDF i pozwolą nam lepiej zrozumieć naszych użytkowników.", - "enable": "Włącz analitykę", - "disable": "Wyłącz analitykę", - "settings": "Możesz zmienić ustawienia analityki w pliku config/settings.yml" - }, - "navbar": { - "favorite": "Ulubione", - "recent": "Nowe i ostatnio zaktualizowane", - "darkmode": "Tryb nocny", - "language": "Języki", - "settings": "Ustawienia", - "allTools": "Narzędzia", - "multiTool": "Narzędzie Wielofunkcyjne", - "search": "Szukaj", - "sections": { - "organize": "Organizuj", - "convertTo": "Przetwórz na PDF", - "convertFrom": "Przetwórz z PDF", - "security": "Podpis i bezpieczeństwo", - "advance": "Zaawansowane", - "edit": "Podgląd i edycja", - "popular": "Popularne" - } - }, - "settings": { - "title": "Ustawienia", - "update": "Dostępna aktualizacja", - "updateAvailable": "Wersja {0} jest obecenia zainstalowana, dostępna jest nowa wersja ({1}).", - "appVersion": "Wersja aplikacji:", - "downloadOption": { - "title": "Wybierz opcję pobierania (w przypadku pobierania pojedynczych plików innych niż ZIP):", - "1": "Otwórz w tym samym oknie", - "2": "Otwórz w nowym oknie", - "3": "Pobierz plik" - }, - "zipThreshold": "Spakuj pliki, gdy liczba pobranych plików przekroczy", - "signOut": "Wyloguj", - "accountSettings": "Ustawienia konta", - "bored": { - "help": "Włącz easter-egg" - }, - "cacheInputs": { - "name": "Zapisz dane formularzy", - "help": "Włącz aby zapisać dane dla przyszłych automatyzacji" - } - }, - "changeCreds": { - "title": "Zmień dane logowania", - "header": "Zmień dane konta", - "changePassword": "Musisz zmienić domyślne dane logowania", - "newUsername": "Nowa nazwa użytkownika", - "oldPassword": "Obecne hasło", - "newPassword": "Nowe hasło", - "confirmNewPassword": "Potwierdź obecne hasło", - "submit": "Zapisz zmiany" - }, - "account": { - "title": "Ustawienia konta", - "accountSettings": "Ustawienia konta", - "adminSettings": "Admin - kontrola kont", - "userControlSettings": "Kontrola praw użytkownika", - "changeUsername": "Zmień nazwę użytkownika", - "newUsername": "Nowa nazwa użytkownika", - "password": "Potwierdź hasło", - "oldPassword": "Poprzednie hasło", - "newPassword": "Nowe hasło", - "changePassword": "Zmień hasło", - "confirmNewPassword": "Potwierdź nowe hasło", - "signOut": "Wyloguj", - "yourApiKey": "Twój klucz API", - "syncTitle": "Zapisz ustawienia konta w przeglądarce", - "settingsCompare": "Porównania uprawnień", - "property": "Własność", - "webBrowserSettings": "Ustawienia przeglądarki", - "syncToBrowser": "Zapisz dane konta w przeglądarce", - "syncToAccount": "Wczytaj dane konta z przeglądarki" - }, - "adminUserSettings": { - "title": "Ustawienia konta użytkownika", - "header": "Ustawienia praw administratora", - "admin": "Administrator", - "user": "Użytkownik", - "addUser": "Dodaj nowego użytkownika", - "deleteUser": "Usuń użytkownika", - "confirmDeleteUser": "Czy na pewno usunąć użytkownika?", - "confirmChangeUserStatus": "Czy użytkownik powinien zostać wyłączony/włączony?", - "usernameInfo": "Niewłaściwa nazwa użytkownika - musi zawierać litery, cyfry i @._+- LUB być adresem email.", - "roles": "Role", - "role": "Rola", - "actions": "Akcje", - "apiUser": "Ograniczony Użytkownik API", - "extraApiUser": "Dodatkowy ograniczony Użytkownik API", - "webOnlyUser": "Użytkownik tylko WEB", - "demoUser": "Użytkownik DEMO", - "internalApiUser": "Wewnętrzny użytkownik API", - "forceChange": "Wymuś zmianę hasło po zalogowaniu", - "submit": "Zapisz użytkownika", - "changeUserRole": "Zmień rolę użytkownika", - "authenticated": "Zalogowany", - "editOwnProfil": "Edytuj własny profil", - "enabledUser": "włączony użytkownik", - "disabledUser": "wyłączony użytkownik", - "activeUsers": "Aktywni Użytkownicy:", - "disabledUsers": "Wyłączeni Użytkownicy:", - "totalUsers": "Łączna Liczba Użytkowników:", - "lastRequest": "Ostatnie Zgłoszenie", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Statystyki Punktów Końcowych", - "header": "Statystyki Punktów Końcowych", - "top10": "Top 10", - "top20": "Top 20", - "all": "Wszystkie", - "refresh": "Odśwież", - "includeHomepage": "Uwzględnij stronę główną ('/')", - "includeLoginPage": "Uwzględnij stronę logowania ('/login')", - "totalEndpoints": "Łączna liczba punktów końcowych", - "totalVisits": "Łączna liczba wizyt", - "showing": "Pokazuje", - "selectedVisits": "Wybrane wizyty", - "endpoint": "Punkt końcowy", - "visits": "Wizyty", - "percentage": "Procent", - "loading": "Ładowanie...", - "failedToLoad": "Nie udało się załadować danych punktów końcowych. Spróbuj odświeżyć.", - "home": "Strona główna", - "login": "Logowanie", - "top": "Top", - "numberOfVisits": "Liczba wizyt", - "visitsTooltip": "Wizyty: {0} ({1}% całości)", - "retry": "Spróbuj ponownie" - }, - "database": { - "title": "Import/Eksport bazy danych", - "header": "Import/Eksport bazy danych", - "fileName": "Nazwa pliku", - "creationDate": "Data utworzenia", - "fileSize": "Rozmiar pliku", - "deleteBackupFile": "Usuń plik kopii zapasowej", - "importBackupFile": "Importuj plik kopii zapasowej", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Pobierz plik kopii zapasowej", - "info_1": "Podczas importowania danych, ważne jest, aby upewnić się, że struktura jest poprawna. Jeśli nie jesteś pewien, co robisz, skontaktuj się z profesjonalistą. Błąd w strukturze może spowodować awarie aplikacji, aż do całkowitej niemożności jej uruchomienia.", - "info_2": "Nazwa pliku nie ma znaczenia podczas przesyłania. Zostanie on później przemianowany, aby przestrzegać formatu backup_user_yyyyMMddHHmm.sql, zapewniając spójną konwencję nazewnictwa.", - "submit": "Importuj kopię zapasową", - "importIntoDatabaseSuccessed": "Import do bazy danych zakończony sukcesem", - "backupCreated": "Kopia zapasowa bazy danych została utworzona pomyślnie", - "fileNotFound": "Plik nie znaleziony", - "fileNullOrEmpty": "Plik nie może być pusty", - "failedImportFile": "Nie udało się zaimportować pliku", - "notSupported": "Ta funkcja nie jest dostępna dla Twojego połączenia z bazą danych" - }, - "session": { - "expired": "Twoja sesja wygasła. Odśwież stronę i spróbuj ponownie.", - "refreshPage": "Odśwież stronę" - }, - "home": { - "desc": "Twoja lokalna aplikacja do kompleksowej obsługi Twoich potrzeb związanych z dokumentami PDF.", - "searchBar": "Szukaj opcji ...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Wyświetl, adnotuj, dodaj tekst lub obrazy" - }, - "setFavorites": "Ustaw ulubione", - "hideFavorites": "Ukryj ulubione", - "showFavorites": "Pokaż ulubione", - "legacyHomepage": "Stara strona główna", - "newHomePage": "Wypróbuj naszą nową stronę główną!", - "alphabetical": "Alfabetycznie", - "globalPopularity": "Globalna popularność", - "sortBy": "Sortuj według:", - "multiTool": { - "title": "Wielofunkcyjne Narzędzie PDF", - "desc": "Łącz, dziel, obracaj, zmieniaj kolejność i usuwaj strony" - }, - "merge": { - "title": "Połącz", - "desc": "Łatwe łączenie wielu dokumentów PDF w jeden." - }, - "split": { - "title": "Podziel", - "desc": "Podziel dokument PDF na wiele dokumentów" - }, - "rotate": { - "title": "Obróć", - "desc": "Łatwo obracaj dokumenty PDF." - }, - "imageToPdf": { - "title": "Obraz na PDF", - "desc": "Konwertuj obraz (PNG, JPEG, GIF) do dokumentu PDF." - }, - "pdfToImage": { - "title": "PDF na Obraz", - "desc": "Konwertuj plik PDF na obraz (PNG, JPEG, GIF)." - }, - "pdfOrganiser": { - "title": "Uporządkuj", - "desc": "Usuń/Zmień kolejność stron w dowolnej kolejności" - }, - "addImage": { - "title": "Dodaj obraz", - "desc": "Dodaje obraz w wybranym miejscu w dokumencie PDF" - }, - "watermark": { - "title": "Dodaj znak wodny", - "desc": "Dodaj niestandardowy znak wodny do dokumentu PDF." - }, - "permissions": { - "title": "Zmień uprawnienia", - "desc": "Zmień uprawnienia dokumentu PDF" - }, - "removePages": { - "title": "Usuń", - "desc": "Usuń niechciane strony z dokumentu PDF." - }, - "addPassword": { - "title": "Dodaj hasło", - "desc": "Zaszyfruj dokument PDF za pomocą hasła." - }, - "removePassword": { - "title": "Usuń hasło", - "desc": "Usuń ochronę hasłem z dokumentu PDF." - }, - "compressPdfs": { - "title": "Kompresuj", - "desc": "Kompresuj dokumenty PDF, aby zmniejszyć ich rozmiar." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Zmień metadane", - "desc": "Zmień/Usuń/Dodaj metadane w dokumencie PDF" - }, - "fileToPDF": { - "title": "Konwertuj plik do PDF", - "desc": "Konwertuj dowolny plik do dokumentu PDF (DOCX, PNG, XLS, PPT, TXT i więcej)" - }, - "ocr": { - "title": "OCR / Zamiana na tekst", - "desc": "OCR skanuje i wykrywa tekst z obrazów w dokumencie PDF i zamienia go na tekst." - }, - "extractImages": { - "title": "Wyodrębnij obrazy", - "desc": "Wyodrębnia wszystkie obrazy z dokumentu PDF i zapisuje je w wybranym formacie" - }, - "pdfToPDFA": { - "title": "PDF na PDF/A", - "desc": "Konwertuj dokument PDF na PDF/A w celu długoterminowego przechowywania" - }, - "PDFToWord": { - "title": "PDF na Word", - "desc": "Konwertuj dokument PDF na formaty Word (DOC, DOCX i ODT)" - }, - "PDFToPresentation": { - "title": "PDF na Prezentację", - "desc": "Konwertuj dokument PDF na formaty prezentacji (PPT, PPTX i ODP)" - }, - "PDFToText": { - "title": "PDF na Tekst/RTF", - "desc": "Konwertuj dokument PDF na tekst lub format RTF" - }, - "PDFToHTML": { - "title": "PDF na HTML", - "desc": "Konwertuj dokument PDF na format HTML" - }, - "PDFToXML": { - "title": "PDF na XML", - "desc": "Konwertuj dokument PDF na format XML" - }, - "ScannerImageSplit": { - "title": "Wykryj/Podziel zeskanowane zdjęcia", - "desc": "Podziel na wiele zdjęć z jednego zdjęcia/PDF" - }, - "sign": { - "title": "Podpis", - "desc": "Dodaje podpis do dokumentu PDF za pomocą rysunku, tekstu lub obrazu" - }, - "flatten": { - "title": "Spłaszcz", - "desc": "Usuń wszystkie interaktywne elementy i formularze z dokumentu PDF" - }, - "repair": { - "title": "Napraw", - "desc": "Spróbuj naprawić uszkodzony dokument PDF" - }, - "removeBlanks": { - "title": "Usuń puste strony", - "desc": "Wykrywa i usuwa puste strony z dokumentu PDF" - }, - "removeAnnotations": { - "title": "Usuń notatki/przypisy", - "desc": "Usuwa wszystkie notatki i przypisy z dokumentu PDF" - }, - "compare": { - "title": "Porównaj", - "desc": "Porównuje i pokazuje różnice między dwoma dokumentami PDF" - }, - "certSign": { - "title": "Podpisz certyfikatem", - "desc": "Podpisz dokument PDF za pomocą certyfikatu/klucza prywatnego (PEM/P12)" - }, - "removeCertSign": { - "title": "Usuń podpis certyfikatem", - "desc": "Usuń podpis certyfikatem z dokumentu PDF" - }, - "pageLayout": { - "title": "Układ wielu stron", - "desc": "Scal wiele stron dokumentu PDF w jedną stronę" - }, - "scalePages": { - "title": "Dopasuj rozmiar stron", - "desc": "Dopasuj rozmiar stron wybranego dokumentu PDF" - }, - "pipeline": { - "title": "Automatyzacja", - "desc": "Wykonaj wiele akcji na dokumentach PDF, tworząc automatyzację" - }, - "add-page-numbers": { - "title": "Dodaj numery stron", - "desc": "Dodaj numery strony w dokumencie PDF w podanej lokalizacji" - }, - "auto-rename": { - "title": "Automatycznie zmień nazwę PDF", - "desc": "Automatycznie zmień nazwę PDF bazując na nagłówku" - }, - "adjust-contrast": { - "title": "Zmień kolor/nasycenie/jasność", - "desc": "Zmień kolor/nasycenie/jasność w dokumencie PDF" - }, - "crop": { - "title": "Przytnij PDF", - "desc": "Przytnij dokument PDF w celu zmniejszenia rozmiaru" - }, - "autoSplitPDF": { - "title": "Automatycznie podziel strony", - "desc": "Automatycznie podziel dokument na strony" - }, - "sanitizePdf": { - "title": "Dezynfekcja", - "desc": "Usuń skrypt i inne elementy z dokumentu PDF" - }, - "URLToPDF": { - "title": "Strona WWW do PDFa", - "desc": "Zapisuje podany adres WWW do PDFa" - }, - "HTMLToPDF": { - "title": "HTML do PDF", - "desc": "Zapisuje podany plik HTML/ZIP do PDF" - }, - "MarkdownToPDF": { - "title": "Markdown do PDF", - "desc": "Zapisuje dokument Markdown do PDF" - }, - "PDFToMarkdown": { - "title": "PDF do Markdown", - "desc": "Konwertuje dowolny plik PDF na Markdown" - }, - "getPdfInfo": { - "title": "Pobierz informacje o pliku PDF", - "desc": "Pobiera wszelkie informacje o pliku PDF" - }, - "extractPage": { - "title": "Wyciągnij stronę z PDF", - "desc": "Wyciąga stronę z dokumentu PDF" - }, - "PdfToSinglePage": { - "title": "PDF do jednej strony", - "desc": "Łączy wszystkie strony PDFa w jedną wielką stronę PDF" - }, - "showJS": { - "title": "Pokaż kod JavaScript", - "desc": "Znajduje i pokazuje załączony kod JS w dokumencie PDF" - }, - "autoRedact": { - "title": "Zaciemnij", - "desc": "Zaciemnia dokument PDF bazując na podanej wartości" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF do CSV", - "desc": "Konwertuje tabele z PDF do pliku CSV" - }, - "autoSizeSplitPDF": { - "title": "Podziel (Rozmiar/Ilość stron)", - "desc": "Rozdziela dokument PDF na wiele dokumentów bazując na podanym rozmiarze, ilości stron bądź ilości dokumentów" - }, - "overlay-pdfs": { - "title": "Nałóż PDFa", - "desc": "Nakłada dokumenty PDF na siebie" - }, - "split-by-sections": { - "title": "Podziel PDF na sekcje", - "desc": "Podziel strony PDF w mniejsze sekcje" - }, - "AddStampRequest": { - "title": "Dodaj pieczęć", - "desc": "Dodaj pieczęć tekstową/obrazową w wyznaczonej lokalizacji dokumentu" - }, - "removeImagePdf": { - "title": "Usuń obraz", - "desc": "Usuń obraz z pliku PDF, aby zmniejszyć rozmiar pliku" - }, - "splitPdfByChapters": { - "title": "Podziel PDF według rozdziałów", - "desc": "Podział pliku PDF na wiele plików na podstawie struktury rozdziałów." - }, - "validateSignature": { - "title": "Sprawdź poprawność podpisu PDF", - "desc": "Weryfikuj podpisy cyfrowe i certyfikaty w dokumentach PDF" - }, - "replaceColorPdf": { - "title": "Zastąp i Odwróć Kolor", - "desc": "Zastąp kolor tekstu i tła w pliku PDF i odwróć pełen kolor pliku PDF, aby zmniejszyć rozmiar pliku" - } - }, - "viewPdf": { - "tags": "wyświetl,czytaj,adnotuj,tekst,obraz", - "title": "Przeglądaj/Edytuj PDF", - "header": "Podejrzyj PDF" - }, - "multiTool": { - "tags": "Wielofunkcyjne narzędzie, obsługa wielu operacji, interfejs użytkownika, przeciąganie kliknięć, front-end, strona klienta", - "title": "Narzędzie Wielofunkcyjne PDF", - "header": "Narzędzie Wielofunkcyjne PDF", - "uploadPrompts": "Nazwa pliku", - "selectAll": "Zaznacz wszystko", - "deselectAll": "Odznacz wszystko", - "selectPages": "Wybór stron", - "selectedPages": "Wybrane strony", - "page": "Strona", - "deleteSelected": "Usuń zaznaczone", - "downloadAll": "Eksportuj", - "downloadSelected": "Eksportuj zaznaczone", - "insertPageBreak": "Wstaw podział strony", - "addFile": "Dodaj plik", - "rotateLeft": "Obróć w lewo", - "rotateRight": "Obróć w prawo", - "split": "Podziel", - "moveLeft": "Przesuń w lewo", - "moveRight": "Przesuń w prawo", - "delete": "Usuń", - "dragDropMessage": "Wybrana(e) strona(y)", - "undo": "Cofnij", - "redo": "Ponów" - }, - "merge": { - "tags": "scalanie, operacje na stronach, back-end, po stronie serwera", - "title": "Połącz", - "header": "Połącz wiele dokumentów PDF (2+)", - "sortByName": "Sortuj po nazwie", - "sortByDate": "Sortuj po dacie", - "removeCertSign": "Usuń podpis cyfrowy w scalonym pliku?", - "submit": "Połącz" - }, - "split": { - "tags": "Operacje na stronach, dzielenie, wiele stron, cięcie, po stronie serwera", - "title": "Podziel dokument PDF", - "header": "Podziel dokument PDF", - "desc": { - "1": "Wybrane numery to numery stron, na których chcesz dokonać podziału", - "2": "Np. taki wybór 1,3,7-9 podzieliłby 10-stronicowy dokument na 6 oddzielnych plików PDF z:", - "3": "Dokument #1: Strona 1", - "4": "Dokument #2: Strona 2 i 3", - "5": "Dokument #3: Strona 4, 5, 6 i 7", - "6": "Dokument #4: Strona 8", - "7": "Dokument #5: Strona 9", - "8": "Dokument #6: Strona 10" - }, - "splitPages": "Wprowadź strony do podziału na:", - "submit": "Podziel" - }, - "rotate": { - "tags": "strona serwera", - "title": "Obróć dokument PDF", - "header": "Obróć dokument PDF", - "selectAngle": "Wybierz kąt obrotu (domyślnie 90 stopni):", - "submit": "Obróć" - }, - "imageToPdf": { - "tags": "konwersja,img,jpg,obraz,zdjęcie" - }, - "pdfToImage": { - "tags": "konwersja,img,jpg,obraz,zdjęcie", - "title": "PDF na Obraz", - "header": "PDF na Obraz", - "selectText": "Format obrazu", - "singleOrMultiple": "Typ pliku obrazu", - "single": "Pojedynczy duży obraz", - "multi": "Wiele obrazów", - "colorType": "Rodzaj koloru", - "color": "Kolor", - "grey": "Odcień szarości", - "blackwhite": "Czarno-biały (może spowodować utratę danych!)", - "submit": "Konwertuj", - "info": "Python nie został zainstalowany. Jest wymagany do konwersji WebP.", - "placeholder": "(przykład 1,2,8 lub 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,parzyste,nieparzyste,sortuj,przenieś", - "title": "Kolejność stron", - "header": "Kolejność stron PDF", - "submit": "Zmień kolejność stron", - "mode": { - "_value": "Tryb", - "1": "Własna kolejność stron", - "2": "Odwrotny", - "3": "Dwustronny", - "4": "Książki", - "5": "Spiętej książki", - "6": "Rozdziel parzyste-nieparzyste", - "7": "Usuń pierwszą", - "8": "Usuń ostatnią", - "9": "Usuń pierwszą i ostatnią", - "10": "Połącz parzyste i nieparzyste", - "11": "Zduplikuj wszystkie strony" - }, - "placeholder": "(przykład 1,3,2 lub 4-8,2,10-12 lub 2n-1)" - }, - "addImage": { - "tags": "img,jpg,obraz,zdjęcie", - "title": "Dodaj obraz", - "header": "Dodaj obraz do PDF", - "everyPage": "Każda strona?", - "upload": "Dodaj obraz", - "submit": "Dodaj obraz" - }, - "watermark": { - "tags": "Tekst,powtarzanie,etykieta,własne,prawa autorskie,znak wodny,img,jpg,obraz,zdjęcie", - "title": "Dodaj znak wodny", - "header": "Dodaj znak wodny", - "customColor": "Własny kolor tekstu", - "selectText": { - "1": "Wybierz dokument PDF, do którego chcesz dodać znak wodny:", - "2": "Treść znaku wodnego:", - "3": "Rozmiar czcionki:", - "4": "Obrót (0-360):", - "5": "Odstęp w poziomie (odstęp między każdym znakiem wodnym w poziomie):", - "6": "Odstęp w pionie (odstęp między każdym znakiem wodnym w pionie):", - "7": "Nieprzezroczystość (0% - 100%):", - "8": "Typ znaku wodnego:", - "9": "Obraz znaku wodnego:", - "10": "Konwertuj PDF do PDF-Image" - }, - "submit": "Dodaj znak wodny", - "type": { - "1": "Tekst", - "2": "Obraz" - } - }, - "permissions": { - "tags": "odczyt,zapis,edycja,drukowanie", - "title": "Zmień uprawnienia", - "header": "Zmień uprawnienia", - "warning": "Ostrzeżenie, aby te uprawnienia były zablokowane, zaleca się ustawienie hasła na stronie dodawania hasła", - "selectText": { - "1": "Wybierz dokument PDF, aby zmienić uprawnienia", - "2": "Uprawnienia do zmian", - "3": "Zablokuj zmiany w dokumencie", - "4": "Zablokuj zmiany w treści", - "5": "Zablokuj zmiany w celu ułatwienia dostępu", - "6": "Zablokuj wypełnianie formularzy", - "7": "Zablokuj modyfikacje", - "8": "Zablokuj modyfikacje adnotacji", - "9": "Zablokuj drukowanie", - "10": "Zablokuj drukowanie różnych formatów" - }, - "submit": "Zmień" - }, - "removePages": { - "tags": "Usuń strony,usuwaj strony" - }, - "addPassword": { - "tags": "bezpieczeństwo,ochrona", - "title": "Dodaj hasło", - "header": "Dodaj hasło (zaszyfruj)", - "selectText": { - "1": "Wybierz plik PDF do zaszyfrowania", - "2": "Hasło", - "3": "Długość klucza szyfrowania", - "4": "Wyższe wartości są silniejsze, ale niższe wartości zapewniają lepszą kompatybilność.", - "5": "Uprawnienia do zmian", - "6": "Zablokuj zmiany w dokumencie", - "7": "Zablokuj zmiany w treści", - "8": "Zablokuj zmiany w celu ułatwienia dostępu", - "9": "Zablokuj wypełnianie formularzy", - "10": "Zablokuj modyfikacje", - "11": "Zablokuj modyfikacje adnotacji", - "12": "Zablokuj drukowanie", - "13": "Zablokuj drukowanie różnych formatów", - "14": "Hasło właściciela", - "15": "Ogranicza akcje, które można wykonać na dokumencie, kiedy jest otwarty (nie wspierany przez wszystkie przeglądarki)", - "16": "Ogranicza otwarcie dokumentu" - }, - "submit": "Zablokuj" - }, - "removePassword": { - "tags": "zabezpieczenie,odszyfrowanie,bezpieczeństwo,odhasłowanie,usunięcie hasła", - "title": "Usuń hasło", - "header": "Usuń hasło (odszyfruj)", - "selectText": { - "1": "Wybierz dokument PDF do odszyfrowania", - "2": "Hasło" - }, - "submit": "Usuń" - }, - "compressPdfs": { - "tags": "zgniatać,mały,malutki" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Tytuł,autor,data,utworzenie,czas,wydawca,producent,statystyki", - "title": "Tytuł:", - "header": "Zmień metadane", - "selectText": { - "1": "Edytuj zmienne, które chcesz zmienić", - "2": "Usuń wszystkie metadane", - "3": "Pokaż niestandardowe metadane:", - "4": "Inne metadane:", - "5": "Dodaj niestandardowy wpis w metadanych" - }, - "author": "Autor:", - "creationDate": "Data utworzenia (yyyy/MM/dd HH:mm:ss):", - "creator": "Twórca:", - "keywords": "Słowa kluczowe:", - "modDate": "Data modyfikacji (yyyy/MM/dd HH:mm:ss):", - "producer": "Producent:", - "subject": "Temat:", - "trapped": "Zablokowany:", - "submit": "Zmień" - }, - "fileToPDF": { - "tags": "transformacja,format,dokument,obraz,slajd,tekst,konwersja,office,dokumenty,word,excel,powerpoint", - "title": "Plik na PDF", - "header": "Konwertuj dowolny plik na dokument PDF", - "credit": "Ta usługa używa LibreOffice i Unoconv do konwersji plików.", - "supportedFileTypesInfo": "Obsługiwane typy plików", - "supportedFileTypes": "Obsługiwane typy plików powinny być zgodne z poniższymi, jednak pełną zaktualizowaną listę obsługiwanych formatów można znaleźć w dokumentacji LibreOffice", - "submit": "Konwertuj na PDF" - }, - "ocr": { - "tags": "rozpoznawanie, tekst, obraz, skanowanie, odczyt, identyfikacja, wykrywanie, edytowalność", - "title": "OCR / Zamiana na tekst", - "header": "OCR / Zamiana na tekst (optyczne rozpoznawanie znaków)", - "selectText": { - "1": "Wybierz języki, które mają zostać wykryte w dokumencie PDF (te z listy to języki, które są obecnie wykrywane):", - "2": "Utwórz plik tekstowy zawierający tekst OCR oraz dokument PDF z OCR", - "3": "Prawidłowe strony zostały zeskanowane pod przekrzywionym kątem przez obrócenie ich z powrotem na miejsce", - "4": "Wyczyść stronę, więc jest mniej prawdopodobne że OCR znajdzie tekst w obrazie tła. (Brak zmiany wyjścia)", - "5": "Wyczyść stronę, więc jest mniej prawdopodobne że OCR znajdzie tekst w obrazie tła, utrzymuje porządek na wyjściu.", - "6": "Ignoruje strony zawierające interaktywny tekst, tylko strony OCR, które są obrazami", - "7": "Wymuś OCR, każda strona usunie wszystkie oryginalne elementy tekstowe", - "8": "Normalny (wystąpi błąd, jeśli plik PDF zawiera tekst)", - "9": "Dodatkowe ustawienia", - "10": "Tryb OCR", - "11": "Usuń obrazy po OCR (usuwa wszystkie obrazy, przydatne tylko, jeśli jest częścią etapu konwersji)", - "12": "Typ renderowania (zaawansowany)" - }, - "help": "Przeczytaj tę dokumentację, aby dowiedzieć się, jak używać tego w innych językach i/lub nie używać docker", - "credit": "Ta usługa używa qpdf i Tesseract do OCR.", - "submit": "Przetwarzaj PDF za pomocą OCR" - }, - "extractImages": { - "tags": "obraz, zdjęcie, zapisz, archiwum, zip, przechwyć, złap", - "title": "Wyodrębnij obrazy", - "header": "Wyodrębnij obrazy", - "selectText": "Wybierz format obrazu, na który chcesz przekonwertować wyodrębniony obraz.", - "allowDuplicates": "Zapisz zduplikowane obrazy", - "submit": "Wyodrębnij" - }, - "pdfToPDFA": { - "tags": "archiwum, długoterminowe, standardowe, konwersja, przechowywanie, konserwacja", - "title": "PDF na PDF/A", - "header": "PDF na PDF/A", - "credit": "Ta usługa używa libreoffice do konwersji PDF/A", - "submit": "Konwertuj", - "tip": "Tylko jeden plik na raz", - "outputFormat": "Format wyjściowy:", - "pdfWithDigitalSignature": "Dokument zawiera podpis cyfrowy, nie zostanie on wczytany." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word, przekształcenie, transformacja, konwersja, office, microsoft, plik doc", - "title": "PDF na Word", - "header": "PDF na Word", - "selectText": { - "1": "Format pliku wyjściowego" - }, - "credit": "Ta usługa używa LibreOffice do konwersji plików.", - "submit": "Konwertuj" - }, - "PDFToPresentation": { - "tags": "slajdy, pokaz, office, microsoft", - "title": "PDF na Prezentację", - "header": "PDF na Prezentację", - "selectText": { - "1": "Format pliku wyjściowego" - }, - "credit": "Ta usługa używa LibreOffice do konwersji plików.", - "submit": "Konwertuj" - }, - "PDFToText": { - "tags": "format tekstu sformatowanego,rtf format", - "title": "PDF na Tekst/RTF", - "header": "PDF na Tekst/RTF", - "selectText": { - "1": "Format pliku wyjściowego" - }, - "credit": "Ta usługa używa LibreOffice do konwersji plików.", - "submit": "Konwertuj" - }, - "PDFToHTML": { - "tags": "zawartość internetowa, przyjazne dla przeglądarek", - "title": "PDF na HTML", - "header": "PDF na HTML", - "credit": "Ta usługa używa pdftohtml do konwersji plików.", - "submit": "Konwertuj" - }, - "PDFToXML": { - "tags": "ekstrakcja danych, zawartość strukturalna, współdziałanie, transformacja, konwertowanie", - "title": "PDF na XML", - "header": "PDF na XML", - "credit": "Ta usługa używa LibreOffice do konwersji plików.", - "submit": "Konwertuj" - }, - "ScannerImageSplit": { - "tags": "oddzielne, automatyczne wykrywanie, skanowanie, wiele zdjęć, porządkowanie", - "selectText": { - "1": "Próg kąta:", - "2": "Ustawia minimalny kąt bezwzględny wymagany do obrócenia obrazu (domyślnie: 10).", - "3": "Tolerancja:", - "4": "Określa zakres zmienności kolorów wokół szacowanego koloru tła (domyślnie: 30).", - "5": "Minimalna powierzchnia:", - "6": "Ustawia próg minimalnego obszaru dla zdjęcia (domyślnie: 10000).", - "7": "Minimalny obszar konturu:", - "8": "Ustawia próg minimalnego obszaru konturu dla zdjęcia", - "9": "Rozmiar obramowania:", - "10": "Ustawia rozmiar dodawanego i usuwanego obramowania, aby uniknąć białych obramowań na wyjściu (domyślnie: 1)." - }, - "info": "Python nie został zainstalowany. Jest on wymagany do uruchomienia." - }, - "sign": { - "tags": "autoryzacja, inicjały, podpis odręczny, podpis tekstowy, podpis graficzny", - "title": "Podpis", - "header": "Dodaj podpis do dokumentu PDF", - "upload": "Wczytaj opbraz", - "draw": "Narysuj podpis", - "text": "Wprowadź tekst", - "clear": "Wyczyść", - "add": "Dodaj", - "saved": "Zapisane podpisy", - "save": "Zapisany podpis", - "personalSigs": "Podpisy osobiste", - "sharedSigs": "Podpisy współdzielone", - "noSavedSigs": "Nie znaleziono zapisanych podpisów", - "addToAll": "Dodaj do wszystkich stron", - "delete": "Usuń", - "first": "Pierwsza strona", - "last": "Ostatnia strona", - "next": "Następna strona", - "previous": "Poprzednia strona", - "maintainRatio": "Przełącz zachowanie proporcji", - "undo": "Cofnij", - "redo": "Ponów" - }, - "flatten": { - "tags": "statyczny, dezaktywacja, nieinteraktywny, opływowy, streamline", - "title": "Spłaszcz", - "header": "Spłaszcz dokument(y) PDF", - "flattenOnlyForms": "Spłaszcz tylko formularze", - "submit": "Spłaszcz" - }, - "repair": { - "tags": "naprawianie, naprawa, przywracanie, poprawianie, odzyskiwanie", - "title": "Napraw", - "header": "Napraw dokument(y) PDF", - "submit": "Napraw" - }, - "removeBlanks": { - "tags": "czyszczenie, usprawnianie, brak treści, organizowanie", - "title": "Usuń puste", - "header": "Usuń puste strony", - "threshold": "Próg:", - "thresholdDesc": "Próg określający, jak biały musi być biały piksel", - "whitePercent": "Procent białego (%):", - "whitePercentDesc": "Procent strony, która musi być biała, aby została usunięta", - "submit": "Usuń puste" - }, - "removeAnnotations": { - "tags": "komentarze, podświetlanie, notatki, znaczniki, usuwanie", - "title": "Usuń notatki", - "header": "Usuń notatki", - "submit": "Usuń" - }, - "compare": { - "tags": "rozróżnienie, kontrast, zmiany, analiza", - "title": "Porównaj", - "header": "Porównaj PDF(y)", - "highlightColor": { - "1": "Kolor Podświetlenia 1:", - "2": "Kolor Podświetlenia 2:" - }, - "document": { - "1": "Dokument 1", - "2": "Dokument 2" - }, - "submit": "Porównaj", - "complex": { - "message": "Jeden lub oba dostarczone dokumenty są dużymi plikami, dokładność porównania może być zmniejszona" - }, - "large": { - "file": { - "message": "Jeden lub oba dostarczone dokumenty są zbyt duże do przetworzenia" - } - }, - "no": { - "text": { - "message": "Jeden lub oba wybrane pliki PDF nie zawierają treści tekstowej. Wybierz pliki PDF z tekstem do porównania." - } - } - }, - "certSign": { - "tags": "uwierzytelnianie, PEM, P12, oficjalny, szyfrowanie", - "title": "Podpisywanie certyfikatem", - "header": "Podpisz dokument PDF certyfikatem prywatnym (moduł w budowie)", - "selectPDF": "Wybierz dokument PDF do podpisania:", - "jksNote": "Notka: jeśli twój typ certyfikatu nie jest widoczny na liście, skonwertuj go do formatu Java Keystore (.jks) używając polecenia keytool. Następnie wybierz plik .JKS poniżej z listy.", - "selectKey": "Wybierz plik klucza prywatnego (format PKCS#8, może to być .pem lub .der):", - "selectCert": "Wybierz plik certyfikatu (format X.509, może to być .pem lub .der):", - "selectP12": "Wybierz plik magazynu kluczy PKCS#12 (.p12 lub .pfx) (opcjonalnie, jeśli jest podany, powinien zawierać klucz prywatny i certyfikat):", - "selectJKS": "Wybierz plik Java Keystore (.jks lub .keystore):", - "certType": "Typ certyfikatu", - "password": "Wprowadź hasło do magazynu kluczy lub klucza prywatnego (jeśli istnieje):", - "showSig": "Wyświetl podpis", - "reason": "Organizacja", - "location": "Lokalizacja", - "name": "Nazwa", - "showLogo": "Show Logo", - "submit": "Podpisz PDF" - }, - "removeCertSign": { - "tags": "uwierzytelnianie, PEM, P12, oficjalny, odszyfrowywanie", - "title": "Usuń podpis cyfrowy", - "header": "Usuń podpis cyfrowy z dokumentu PDF", - "selectPDF": "Wskaż plik PDF:", - "submit": "Usuń podpis cyfrowy" - }, - "pageLayout": { - "tags": "scalanie, kompozycja, pojedynczy widok, organizowanie, porządkowanie", - "title": "Układ wielu stron", - "header": "Układ wielu stron", - "pagesPerSheet": "Stron na jednym arkuszu:", - "addBorder": "Dodaj granicę", - "submit": "Wykonaj" - }, - "scalePages": { - "tags": "zmiana rozmiaru, modyfikacja, rozmiar, dostosowanie", - "title": "Dopasuj rozmiar stron", - "header": "Dopasuj rozmiar stron", - "pageSize": "Rozmiar stron dokumentu:", - "keepPageSize": "Original Size", - "scaleFactor": "Poziom powiększenia (przycięcia) stron:", - "submit": "Wykonaj" - }, - "add-page-numbers": { - "tags": "stronicowanie, etykieta, organizowanie, indeks, index" - }, - "auto-rename": { - "tags": "automatyczne wykrywanie, oparte na nagłówkach, organizowanie, ponowne etykietowanie", - "title": "Automatyczna zmiana nazwy", - "header": "Automatyczna zmiana nazwy dokumentu PDF", - "submit": "Automatyczna zmiana nazwy" - }, - "adjust-contrast": { - "tags": "Korekcja kolorów, dostrajanie, modyfikacja, ulepszanie" - }, - "crop": { - "tags": "przycinanie, zmniejszanie, edycja, kształtowanie", - "title": "Przytnij", - "header": "Przytnij dokument PDF", - "submit": "Wyślij" - }, - "autoSplitPDF": { - "tags": "Oparty na QR, rozdzielanie, skanowanie, organizowanie", - "title": "Automatycznie podziel PDF", - "header": "Automatycznie podziel PDF", - "description": "Drukuj, wstaw, skanuj, wyślij i pozwól nam automatycznie posortować dokumenty. Bez ręcznego sortowania.", - "selectText": { - "1": "Wydrukuj strony separacji z poniższych wzorów - (mogą być czarno-białe)", - "2": "Skanuj wszystkie swoje dokumenty na raz, wstawiając stronę separator między nie.", - "3": "Wyślij pojedynczy duży plik PDF zawierający skan i pozwól Stirling PDF zająć się resztą.", - "4": "Strony separacji są automatycznie wykrywane i usuwane, gwarantując ładny finalny dokument." - }, - "formPrompt": "Wyślij dokument PDF zawierający strony podziału z Stirling PDF.", - "duplexMode": "Skanowanie dwustronne", - "dividerDownload2": "Pobierz 'Auto Splitter Divider (with instructions).pdf'", - "submit": "Wyślij" - }, - "sanitizePdf": { - "tags": "czyszczenie, ochrona, bezpieczeństwo, usuwanie zagrożeń" - }, - "URLToPDF": { - "tags": "przechwytywanie stron internetowych, zapisywanie strony, strona internetowa do dokumentu, archiwizacja", - "title": "URL do PDF", - "header": "URL do PDF", - "submit": "Konwertuj", - "credit": "Użyj WeasyPrint" - }, - "HTMLToPDF": { - "tags": "znaczniki, treść internetowa, transformacja, konwertowanie", - "title": "HTML do PDF", - "header": "HTML do PDF", - "help": "Akceptuje pliki HTML oraz ZIP zawierające html/css/obrazy", - "submit": "Konwertuj", - "credit": "Użyj WeasyPrint", - "zoom": "Powiększ", - "pageWidth": "Szerokość strony w cm (zostaw puste dla autoskalowania)", - "pageHeight": "Wysokość strony w cm (zostaw puste dla autoskalowania)", - "marginTop": "Górny margines strony w mm (zostaw puste dla autoskalowania)", - "marginBottom": "Dolny margines strony w mm (zostaw puste dla autoskalowania)", - "marginLeft": "Lewy margines strony w mm (zostaw puste dla autoskalowania)", - "marginRight": "Prawy margines strony w mm (zostaw puste dla autoskalowania)", - "printBackground": "Używaj tła stron", - "defaultHeader": "Domyślny nagłówek (Nazwa i numer strony)", - "cssMediaType": "Wskaż CSS dla strony", - "none": "Żaden", - "print": "Drukuj", - "screen": "Ekran" - }, - "MarkdownToPDF": { - "tags": "znaczniki, treść internetowa, transformacja, konwertowanie", - "title": "Markdown do PDF", - "header": "Markdown do PDF", - "submit": "Konwertuj", - "help": "Prace trwają", - "credit": "Użyj WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "znaczniki,treść internetowa,transformacja,konwersja,md", - "title": "PDF do Markdown", - "header": "PDF do Markdown", - "submit": "Konwertuj" - }, - "getPdfInfo": { - "tags": "informacje, dane, statystyka, statystyki", - "title": "Pobierz informacje o pliku PDF", - "header": "Pobierz informacje o pliku PDF", - "submit": "Pobierz informacje", - "downloadJson": "Pobierz JSON z zawartością" - }, - "extractPage": { - "tags": "wydobycie,separacja,wyciaganie" - }, - "PdfToSinglePage": { - "tags": "pojedyncza strona" - }, - "showJS": { - "tags": "JS", - "title": "Pokaż Javascript", - "header": "Pokaż Javascript", - "downloadJS": "Pobierz Javascript", - "submit": "Pokaż" - }, - "autoRedact": { - "tags": "Redagowanie, ukrywanie, zaciemnianie, zaczernianie, zaznaczanie, ukrywanie", - "title": "Automatyczne zaciemnienie", - "header": "Automatyczne zaciemnienie", - "colorLabel": "Kolor", - "textsToRedactLabel": "Tekst do zaciemnienia (podzielony liniami)", - "textsToRedactPlaceholder": "przykład \\n Poufne \\n Ściśle tajne", - "useRegexLabel": "Użyj RegExp", - "wholeWordSearchLabel": "Szukaj całego słowa", - "customPaddingLabel": "Dodatkowe wypełnienie", - "convertPDFToImageLabel": "Przerób PDF na PDF-obrazowy (usuwa tekst w tle)", - "submitButton": "Wyślij" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Redakcja ręczna", - "header": "Redakcja ręczna", - "submit": "Redaguj", - "textBasedRedaction": "Redakcja oparta na tekście", - "pageBasedRedaction": "Redakcja oparta na stronach", - "convertPDFToImageLabel": "Konwertuj PDF do PDF-Image (służy do usuwania tekstu za polem)", - "pageRedactionNumbers": { - "title": "Strony", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Kolor redakcji" - }, - "export": "Eksport", - "upload": "Prześlij", - "boxRedaction": "Redakcja za pomocą prostokąta", - "zoom": "Powiększenie", - "zoomIn": "Powiększ", - "zoomOut": "Pomniejsz", - "nextPage": "Następna strona", - "previousPage": "Poprzednia strona", - "toggleSidebar": "Przełącz panel boczny", - "showThumbnails": "Pokaż miniatury", - "showDocumentOutline": "Pokaż zarys dokumentu (kliknij dwukrotnie, aby rozwinąć/zwinąć wszystkie elementy)", - "showAttatchments": "Pokaż załączniki", - "showLayers": "Pokaż warstwy (kliknij dwukrotnie, aby przywrócić domyślny stan warstw)", - "colourPicker": "Selektor kolorów", - "findCurrentOutlineItem": "Znajdź bieżący element zarysu", - "applyChanges": "Zastosuj zmiany" - }, - "tableExtraxt": { - "tags": "CSV, ekstrakcja tabeli, ekstrakcja, konwersja, wydobywanie" - }, - "autoSizeSplitPDF": { - "tags": "pdf, dzielenie, dokument, organizacja" - }, - "overlay-pdfs": { - "tags": "Nakładka", - "header": "Nałóż pliki PDF", - "baseFile": { - "label": "Wybierz bazowy plik PDF" - }, - "overlayFiles": { - "label": "Wybierz plik(i) nakładane PDF" - }, - "mode": { - "label": "Wybierz tryb nakładania", - "sequential": "Sekwencyjny", - "interleaved": "Przeplatany", - "fixedRepeat": "Ustalona ilośc powtórzeń" - }, - "counts": { - "label": "Ile potwórzeń", - "placeholder": "Wprowadź numerację rozdzieloną przecinkami (2,3,1)" - }, - "position": { - "label": "Wybierz miejsce nakładania", - "foreground": "Przód", - "background": "Tło" - }, - "submit": "Wyślij" - }, - "split-by-sections": { - "tags": "Podział sekcji, dzielenie, dostosowywanie", - "title": "Podziel PDF przez sekcje", - "header": "Podziel PDF w sekcje", - "horizontal": { - "label": "Podział pionowy", - "placeholder": "Podaj ilość podziałów pionowych" - }, - "vertical": { - "label": "Podział poziomy", - "placeholder": "Podaj ilość podziałów poziomych" - }, - "submit": "Podziel PDF", - "merge": "Połącz w jednego PDF" - }, - "AddStampRequest": { - "tags": "Stempel, dodawanie obrazu, wyśrodkowanie obrazu, znak wodny, PDF, osadzanie, dostosowywanie", - "header": "Pieczęć PDF", - "title": "Pieczęć PDF", - "stampType": "Typ pieczęci", - "stampText": "Tekst w pieczęci", - "stampImage": "Obraz w pieczęci", - "alphabet": "Alfabet", - "fontSize": "Rozmiar czcionki/obrazu", - "rotation": "Obrót", - "opacity": "Przeźroczystość", - "position": "Pozycja", - "overrideX": "Nadpisz koordynatę X", - "overrideY": "Nadpisz koordynatę Y", - "customMargin": "Własny margines", - "customColor": "Własny kolor tekstu", - "submit": "Wyślij" - }, - "removeImagePdf": { - "tags": "Usuń obraz, operacje na stronie, back-end, strona serwera" - }, - "splitPdfByChapters": { - "tags": "podział, rozdziały, zakładki, porządkowanie, organizacja" - }, - "validateSignature": { - "tags": "podpis,weryfikuj,pdf,certyfikat,podpis cyfrowy,weryfikuj podpis,weryfikuj certyfikat", - "title": "Weryfikacja podpisów PDF", - "header": "Weryfikacja podpisów cyfrowych", - "selectPDF": "Wybierz podpisany plik PDF", - "submit": "Sprawdź podpisy", - "results": "Wyniki weryfikacji", - "status": { - "_value": "Status", - "valid": "Poprawny", - "invalid": "Niepoprawny" - }, - "signer": "Podpisujący", - "date": "Data", - "reason": "Powód", - "location": "Lokalizacja", - "noSignatures": "Nie znaleziono podpisów cyfrowych w tym dokumencie", - "chain": { - "invalid": "Weryfikacja łańcucha certyfikatów nie powiodła się – nie można zweryfikować tożsamości podpisującego" - }, - "trust": { - "invalid": "Certyfikat nie znajduje się w magazynie zaufania – źródło nie może zostać zweryfikowane" - }, - "cert": { - "expired": "Certyfikat wygasł", - "revoked": "Certyfikat został unieważniony", - "info": "Szczegóły certyfikatu", - "issuer": "Wystawca", - "subject": "Podmiot", - "serialNumber": "Numer seryjny", - "validFrom": "Ważny od", - "validUntil": "Ważny do", - "algorithm": "Algorytm", - "keySize": "Rozmiar klucza", - "version": "Wersja", - "keyUsage": "Zastosowanie klucza", - "selfSigned": "Samopodpisany", - "bits": "bity" - }, - "signature": { - "info": "Informacje o podpisie", - "_value": "Podpis", - "mathValid": "Podpis jest matematycznie poprawny, ALE:" - }, - "selectCustomCert": "Niestandardowy plik certyfikatu X.509 (Opcjonalne)" - }, - "replace-color": { - "title": "Zamień-Odwróć-Kolor", - "header": "Zamień-Odwróć kolor PDF", - "selectText": { - "1": "Zastąp lub Odwróć opcje kolorów", - "2": "Domyślnie (domyślne kolory o wysokim kontraście)", - "3": "Niestandardowe (kolory niestandardowe)", - "4": "Całkowita-Odwrotność (Odwrócenie wszystkich kolorów)", - "5": "Wysoki kontrast opcji kolorystycznych", - "6": "biały tekst na czarnym tle", - "7": "Czarny tekst na białym tle", - "8": "Żółty tekst na czarnym tle", - "9": "Zielony tekst na czarnym tle", - "10": "Wybierz Kolor tekstu", - "11": "Wybierz Kolor tła" - }, - "submit": "Zamień" - }, - "replaceColorPdf": { - "tags": "Zastąp kolor, operacje na stronach, back-end, strona serwera" - }, - "login": { - "title": "Logowanie", - "header": "Logowanie", - "signin": "Logowanie", - "rememberme": "Zapamiętaj", - "invalid": "Nieprawidłowe dane logowania", - "locked": "Konto jest zablokowane", - "signinTitle": "Zaloguj się", - "ssoSignIn": "Zaloguj się za pomocą logowania jednokrotnego", - "oAuth2AutoCreateDisabled": "Wyłączono automatyczne tworzenie użytkownika OAUTH2", - "oAuth2AdminBlockedUser": "Rejestracja lub logowanie niezarejestrowanych użytkowników jest obecnie zablokowane. Prosimy o kontakt z administratorem.", - "oauth2RequestNotFound": "Błąd logowania OAuth2", - "oauth2InvalidUserInfoResponse": "Niewłaściwe dane logowania", - "oauth2invalidRequest": "Nieprawidłowe żądanie", - "oauth2AccessDenied": "Brak dostępu", - "oauth2InvalidTokenResponse": "Nieprawidłowa odpowiedź na token", - "oauth2InvalidIdToken": "Nieprawidłowa wartość tokenu", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "Użytkownik jest nieaktywny, logowanie przy użyciu tej nazwy użytkownika jest obecnie zablokowane. Prosimy o kontakt z administratorem.", - "alreadyLoggedIn": "Jesteś już zalogowany na", - "alreadyLoggedIn2": "urządzeniach. Wyloguj się z tych urządzeń i spróbuj ponownie.", - "toManySessions": "Masz zbyt wiele aktywnych sesji", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF do pojedyńczej strony", - "header": "PDF do pojedyńczej strony", - "submit": "Zapisz dokument jako PDF z jedną stroną" - }, - "pageExtracter": { - "title": "Wyciągnij stronę", - "header": "Wyciągnij stronę", - "submit": "Wyciągnij", - "placeholder": "(przykład 1,2,8 lub 2n-1)" - }, - "sanitizePDF": { - "title": "Dezynfekuj PDF", - "header": "Dezynfekuj dokument PDF", - "selectText": { - "1": "Usuń elementy JavaScript", - "2": "Usuń załączone pliki", - "3": "Usuń metadane XMP", - "4": "Usuń linki", - "5": "Usuń czcionki", - "6": "Remove Document Info Metadata" - }, - "submit": "Dezynfekuj PDF" - }, - "adjustContrast": { - "title": "Dopasuj kontrast", - "header": "Dopasuj kontrast", - "contrast": "Kontrast:", - "brightness": "Jasność:", - "saturation": "Nasycenie:", - "download": "Pobierz" - }, - "compress": { - "title": "Kompresuj", - "header": "Kompresuj PDF", - "credit": "Ta usługa używa qpdf do kompresji/optymalizacji PDF.", - "grayscale": { - "label": "Zastosuj skalę szarości do kompresji" - }, - "selectText": { - "1": { - "_value": "Ustawienia kompresji", - "1": "1-3 kompresja PDF,
4-6 lekka kompresja obrazów,
7-9 intensywna kompresja obrazów
Znacznie obniży jakość obrazu" - }, - "2": "Poziom optymalizacji:", - "4": "Tryb automatyczny - Automatycznie dostosowuje jakość, aby uzyskać dokładny rozmiar pliku PDF", - "5": "Oczekiwany rozmiar pliku PDF (np. 25 MB, 10,8 MB, 25 KB)" - }, - "submit": "Kompresuj" - }, - "decrypt": { - "passwordPrompt": "Ten plik jest chroniony hasłem. Wprowadź hasło:", - "cancelled": "Operacja anulowana dla PDF: {0}", - "noPassword": "Nie podano hasła dla zaszyfrowanego PDF: {0}", - "invalidPassword": "Spróbuj ponownie, używając poprawnego hasła.", - "invalidPasswordHeader": "Nieprawidłowe hasło lub nieobsługiwane szyfrowanie dla PDF: {0}", - "unexpectedError": "Wystąpił błąd podczas przetwarzania pliku. Spróbuj ponownie.", - "serverError": "Błąd serwera podczas odszyfrowywania: {0}", - "success": "Plik został pomyślnie odszyfrowany." - }, - "multiTool-advert": { - "message": "Ta funkcja jest również dostępna na naszej stronie narzędzia wielofunkcyjnego. Sprawdź ją, aby uzyskać lepszy interfejs zarządzania stronami i dodatkowe funkcje!" - }, - "pageRemover": { - "title": "Narzędzie do usuwania stron", - "header": "Narzędzie do usuwania stron w dokumentach PDF", - "pagesToDelete": "Strony do usunięcia (wprowadź listę numerów stron oddzielonych przecinkami):", - "submit": "Usuń strony", - "placeholder": "(przykład 1,3,2 lub 4-8,2,10-12)" - }, - "imageToPDF": { - "title": "Obraz na PDF", - "header": "Obraz na PDF", - "submit": "Konwertuj", - "selectLabel": "Opcje dopasowania", - "fillPage": "Wypełnij stronę", - "fitDocumentToImage": "Dopasuj stronę do obrazu", - "maintainAspectRatio": "Zachowaj proporcje", - "selectText": { - "2": "Automatyczne obracanie PDF", - "3": "Logika wielu plików (dostępna tylko w przypadku pracy z wieloma obrazami)", - "4": "Połącz w jeden dokument PDF", - "5": "Konwertuj na osobne dokumenty PDF" - } - }, - "PDFToCSV": { - "title": "PDF na CSV", - "header": "PDF na CSV", - "prompt": "Wybierz stronę do wyodrębnienia tabeli", - "submit": "Zatwierdź" - }, - "split-by-size-or-count": { - "title": "Podziel PDF przez ilość stron bądź rozmiar", - "header": "Podziel PDF przez ilość stron bądź rozmiar", - "type": { - "label": "Wybierz typ podziału:", - "size": "Rozmiar", - "pageCount": "Ilość stron", - "docCount": "Ilość dokumentów" - }, - "value": { - "label": "Podaj wartość", - "placeholder": "Podaj rozmiar(2MB lub 3KB) albo ilość(1 lub 4 lub 5)" - }, - "submit": "Wyślij" - }, - "printFile": { - "title": "Drukuj plik", - "header": "Drukuj plik za pomocą drukarki", - "selectText": { - "1": "Wskaż plik do wydruku", - "2": "Wskaż drukarkę" - }, - "submit": "Drukuj" - }, - "licenses": { - "nav": "Licencje", - "title": "Licencje stron trzecich", - "header": "Licencje stron trzecich", - "module": "Moduł", - "version": "Wersja", - "license": "Licencja" - }, - "survey": { - "nav": "Ankieta", - "title": "Ankieta Stirling-PDF", - "description": "Stirling-PDF nie śledzi swoich użytkowników, dlatego chciałby poznać ich opinie!", - "changes": "Stirling-PDF zmieniło się od czasu ostatniej ankiety! Aby dowiedzieć się więcej, sprawdź nasz wpis na blogu tutaj:", - "changes2": "Dzięki tym zmianom otrzymujemy płatne wsparcie biznesowe i finansowanie", - "please": "Prosimy, wypełnij dla nas ankietę!", - "disabled": "(Blokada wyskakującego okienka z ankietą zostanie dodana w następnych aktualizacjach, ale będzie dostępna na dole strony)", - "button": "Wypełnij ankietę", - "dontShowAgain": "Nie pokazuj ponownie.", - "meeting": { - "1": "Jeśli używasz Stirling-PDF w pracy, chętnie z Tobą porozmawiamy. Oferujemy sesje wsparcia technicznego w zamian za 15-minutowe spotkanie odkrywcze z użytkownikiem.", - "2": "To okazja do:", - "3": "Uzyskania pomocy w zakresie wdrożenia, integracji lub rozwiązywania problemów", - "4": "Przekazania bezpośredniej opinii na temat wydajności, nietypowych przypadków i brakujących funkcji", - "5": "Pomocy w dopracowaniu Stirling-PDF do zastosowań w rzeczywistych warunkach biznesowych", - "6": "Jeśli jesteś zainteresowany, możesz bezpośrednio umówić się na spotkanie z naszym zespołem. (Spotkania tylko w języku angielskim)", - "7": "Nie możemy się doczekać, aby poznać Twoje przypadki użycia i uczynić Stirling-PDF jeszcze lepszym!", - "notInterested": "Nie jesteś firmą i/lub nie jesteś zainteresowany spotkaniem?", - "button": "Zarezerwuj spotkanie" - } - }, - "removeImage": { - "title": "Usuń obraz", - "header": "Usuń obraz", - "removeImage": "Usuń obraz", - "submit": "Usuń obraz" - }, - "splitByChapters": { - "title": "Podziel PDF według Rozdziałów", - "header": "Podziel PDF według Rozdziałów", - "bookmarkLevel": "Poziom Zakładek", - "includeMetadata": "Dołącz Metadane", - "allowDuplicates": "Zezwalaj na Duplikaty", - "desc": { - "1": "Narzędzie to dzieli plik PDF na wiele plików PDF w oparciu o strukturę rozdziałów.", - "2": "Poziom Zakładek: Wybierz poziom zakładek, który ma zostać użyty do podziału (0 dla najwyższego poziomu, 1 dla drugiego poziomu itd.).", - "3": "Dołącz Metadane: Jeśli opcja ta jest zaznaczona, metadane oryginalnego pliku PDF zostaną uwzględnione w każdym rozdzielonych plików PDF.", - "4": "Zezwól na Duplikaty: Jeśli ta opcja jest zaznaczona, pozwala na tworzenie oddzielnych plików PDF przez wiele zakładek na tej samej stronie." - }, - "submit": "Podziel PDF" - }, - "fileChooser": { - "click": "Kliknij", - "or": "lub", - "dragAndDrop": "Przeciągnij i upuść", - "dragAndDropPDF": "Przeciągnij i upuść plik PDF", - "dragAndDropImage": "Przeciągnij i upuść plik obrazu", - "hoveredDragAndDrop": "Przeciągnij i upuść plik(i) tutaj", - "extractPDF": "Trwa wyodrębnianie..." - }, - "releases": { - "footer": "Wydania", - "title": "Informacje o wydaniu", - "header": "Informacje o wydaniu", - "current": { - "version": "Obecna wersja" - }, - "note": "Informacje o wydaniu są dostępne tylko w języku angielskim" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/pt-BR/translation.json b/frontend/dist/locales/pt-BR/translation.json deleted file mode 100644 index 45a2d2d94..000000000 --- a/frontend/dist/locales/pt-BR/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Tamanho da Fonte", - "fontName": "Nome da Fonte", - "title": "Adicionar Números de Página", - "header": "Adicionar Números de Página", - "selectText": { - "1": "Selecionar arquivo PDF:", - "2": "Tamanho da margem:", - "3": "Posição:", - "4": "Número inicial:", - "5": "Páginas a numerar:", - "6": "Texto personalizado:" - }, - "customTextDesc": "Texto personalizado:", - "numberPagesDesc": "Quais páginas numerar, padrão 'todas', também aceita 1-5 ou 2,5,9,etc.", - "customNumberDesc": "O padrão é {n}, também aceita 'Página {n} de {total}', 'Texto-{n}', '{nome do arquivo}-{n}'", - "submit": "Adicionar Números de Página" - }, - "pdfPrompt": "Selecione o(s) PDF(s)", - "multiPdfPrompt": "Selecione os PDFs (2+)", - "multiPdfDropPrompt": "Selecione (ou arraste e solte) todos os PDFs desejados:", - "imgPrompt": "Selecione a(s) Imagem(ns)", - "genericSubmit": "Enviar", - "uploadLimit": "Tamanho máximo do arquivo:", - "uploadLimitExceededSingular": "está acima do limite. Tamanho máximo permitido é", - "uploadLimitExceededPlural": "estão acima do limite. Tamanho máximo permitido é", - "processTimeWarning": "Aviso: Este processo pode levar até um minuto, dependendo do tamanho do arquivo", - "pageOrderPrompt": "Ordem de Página Personalizada (Digite uma lista de números de páginas, separadas por vírgula ou funções como 2n+1):", - "pageSelectionPrompt": "Seleção de Página Personalizada (Digite uma lista de números de páginas, separadas por vírgula como 1,5,6 ou funções como 2n+1):", - "goToPage": "Ir", - "true": "Verdadeiro", - "false": "Falso", - "unknown": "Desconhecido", - "save": "Salvar", - "saveToBrowser": "Salvar no Navegador", - "close": "Fechar", - "filesSelected": "Arquivos Selecionados", - "noFavourites": "Nenhum Favorito Adicionado", - "downloadComplete": "Download Completo", - "bored": "Entediado? Clique aqui!", - "alphabet": "Alfabeto", - "downloadPdf": "Baixar PDF", - "text": "Texto", - "font": "Fonte", - "selectFillter": "-- Selecione --", - "pageNum": "Número da Página", - "sizes": { - "small": "Pequeno", - "medium": "Médio", - "large": "Grande", - "x-large": "Extra grande" - }, - "error": { - "pdfPassword": "O PDF está protegido por senha e a senha não foi fornecida ou está incorreta", - "_value": "Erro", - "sorry": "Desculpe pelo problema!", - "needHelp": "Precisa de ajuda / Encontrou um problema?", - "contactTip": "Se você ainda estiver com problemas, não hesite em entrar em contato conosco para obter ajuda. Você pode enviar um tíquete em nossa página GitHub ou entrar em contato conosco através do Discord:", - "404": { - "head": "404 - Página não encontrada | Ops, tropeçamos no código!", - "1": "Não conseguimos encontrar a página que você está procurando.", - "2": "Algo deu errado" - }, - "github": "Submeter um tíquete no GitHub", - "showStack": "Mostrar rastreamento de pilha", - "copyStack": "Copiar rastreamento de pilha", - "githubSubmit": "GitHub - Submeter um tíquete", - "discordSubmit": "Discord - Submeter um post de suporte" - }, - "delete": "Apagar", - "username": "Usuário", - "password": "Senha", - "welcome": "Bem-vindo", - "property": "Propriedade", - "black": "Preto", - "white": "Branco", - "red": "Vermelho", - "green": "Verde", - "blue": "Azul", - "custom": "Personalizado...", - "WorkInProgess": "Trabalho em progresso, talvez não funcione ou apresente erros, Por favor, reporte qualquer problema!", - "poweredBy": "Distribuído por", - "yes": "Sim", - "no": "Não", - "changedCredsMessage": "Credenciais alteradas!", - "notAuthenticatedMessage": "Usuário não autenticado.", - "userNotFoundMessage": "Usuário não encontrado.", - "incorrectPasswordMessage": "A senha atual está incorreta.", - "usernameExistsMessage": "Novo Usuário já existe.", - "invalidUsernameMessage": "Usuário inválido, nome de usuário só pode conter letras, números e os seguintes caracteres especiais @._+- ou deve ser um e-mail válido.", - "invalidPasswordMessage": "A senha não deve estar vazia e não deve conter espaços no início ou no final.", - "confirmPasswordErrorMessage": "Nova Senha e Confirmar Nova Senha devem ser iguais.", - "deleteCurrentUserMessage": "Não é possível apagar usuário conectado no momento.", - "deleteUsernameExistsMessage": "O usuário não existe e desta forma não pode ser apagado.", - "downgradeCurrentUserMessage": "Não é possível fazer downgrade da função do usuário conectado no momento.", - "disabledCurrentUserMessage": "O usuário atual não pode ser desativado.", - "downgradeCurrentUserLongMessage": "Não é possível fazer downgrade da função do usuário atual. Portanto, o usuário atual não será mostrado.", - "userAlreadyExistsOAuthMessage": "O usuário já existe como um usuário OAuth2.", - "userAlreadyExistsWebMessage": "O usuário já existe como um usuário Web.", - "oops": "Ops!", - "help": "Ajuda", - "goHomepage": "Ir para a Página Inicial", - "joinDiscord": "Junte-se ao nosso servidor Discord", - "seeDockerHub": "Visite nosso Docker Hub", - "visitGithub": "Visite nosso repositório no GitHub", - "donate": "Doar", - "color": "Cor", - "sponsor": "Patrocinador", - "info": "Informações", - "pro": "Profissional", - "page": "Página", - "pages": "Páginas", - "loading": "Carregando...", - "addToDoc": "Adicionar ao Documento", - "reset": "Reiniciar", - "apply": "Aplicar", - "noFileSelected": "Nenhum arquivo selecionado. Por favo, envie um arquivo.", - "legal": { - "privacy": "Política de Privacidade", - "terms": "Termos e Condições", - "accessibility": "Acessibilidade", - "cookie": "Política de Cookies", - "impressum": "Informações legais", - "showCookieBanner": "Preferências de Cookies" - }, - "pipeline": { - "header": "Menu do Pipeline (Beta)", - "uploadButton": "Carregar Arquivo Personalizado", - "configureButton": "Configurar", - "defaultOption": "Arquivo Personalizado", - "submitButton": "Enviar", - "help": "Ajuda relacionada ao Pipeline", - "scanHelp": "Ajuda para leitura e processamento de pastas", - "deletePrompt": "Tem certeza de que deseja excluir o pipeline ->", - "tags": "automatizar,sequência,scriptado,processo-em-lote", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Configuração do Pipeline", - "pipelineNameLabel": "Nome do Pipeline:", - "saveSettings": "Salvar Configurações da Operação", - "pipelineNamePrompt": "Insira o nome do pipeline neste campo", - "selectOperation": "Selecione uma Operação:", - "addOperationButton": "Adicione a Operação", - "pipelineHeader": "Pipeline:", - "saveButton": "Baixar (JSON)", - "validateButton": "Validar" - }, - "enterpriseEdition": { - "button": "Atualize para a versão Pro", - "warning": "Este recurso só está disponivel para usuários da versão Pro.", - "yamlAdvert": "Stirling PDF Pro suporta arquivos de configuração YAML e outros recursos SSO.", - "ssoAdvert": "Procurando por mais recursos de controle de usuários? Veja a versão Pro do Stirling PDF" - }, - "analytics": { - "title": "Você quer melhorar o Stirling PDF?", - "paragraph1": "Stirling PDF possui coleta de dados opcional para ajudar a melhorar o produto. Nós não rastreamos nenhuma informação pessoal ou conteúdo dos arquivos.", - "paragraph2": "Por favor considere habilitar a coleta de dados para ajudar Stirling PDF a crescer e nos ajudar a entender melhor nossos usuários.", - "enable": "Habilitar coleta de dados", - "disable": "Desabilitar coleta de dados", - "settings": "Você pode alterar as configurações de coleta de dados no arquivo config/settings.yml" - }, - "navbar": { - "favorite": "Favoritos", - "recent": "Novos e Recentemente Atualizados", - "darkmode": "Modo Escuro", - "language": "Idiomas", - "settings": "Configurações", - "allTools": "Ferramentas", - "multiTool": "Multiferramentas", - "search": "Pesquisar", - "sections": { - "organize": "Organizar", - "convertTo": "Converter para PDF", - "convertFrom": "Converter de PDF", - "security": "Assinatura & Segurança", - "advance": "Avançado", - "edit": "Visualizar & Editar", - "popular": "Populares" - } - }, - "settings": { - "title": "Configurações", - "update": "Atualização disponível", - "updateAvailable": "{0} é a versão atualmente instalada. Uma nova versão ({1}) está disponível.", - "appVersion": "Versão do Aplicativo:", - "downloadOption": { - "title": "Escolha a opção de download (para download de arquivo único, não compactados):", - "1": "Abrir na mesma janela", - "2": "Abrir em nova janela", - "3": "Baixar o arquivo" - }, - "zipThreshold": "Compactar os arquivos quando o número baixado exceder:", - "signOut": "Sair", - "accountSettings": "Configurações da Conta", - "bored": { - "help": "Habilitar jogos secretos" - }, - "cacheInputs": { - "name": "Salvar entradas do formulário.", - "help": "Habilitar para armazenar entradas usadas anteriormente para execuções futuras" - } - }, - "changeCreds": { - "title": "Alterar Credenciais", - "header": "Atualizar Detalhes da Conta", - "changePassword": "Você está usando as credenciais padrões. Por favor, insira uma nova senha", - "newUsername": "Novo Usuário", - "oldPassword": "Senha Atual", - "newPassword": "Senha Nova", - "confirmNewPassword": "Confirme a Nova Senha", - "submit": "Enviar Alterações" - }, - "account": { - "title": "Configurações da Conta", - "accountSettings": "Configurações da Conta", - "adminSettings": "Configurações de Administrador – Visualizar e Adicionar Usuários", - "userControlSettings": "Configurações de Controle de Usuário", - "changeUsername": "Alterar Usuário", - "newUsername": "Novo Usuário", - "password": "Senha de Confirmação", - "oldPassword": "Senha Antiga", - "newPassword": "Senha Nova", - "changePassword": "Alterar a Senha", - "confirmNewPassword": "Confirme a Nova Senha", - "signOut": "Sair", - "yourApiKey": "Sua chave de API", - "syncTitle": "Sincronize as configurações do navegador com sua conta:", - "settingsCompare": "Comparação das Configurações:", - "property": "Propriedade", - "webBrowserSettings": "Configuração do navegador Web", - "syncToBrowser": "Sincronizar Conta -> Navegador", - "syncToAccount": "Sincronizar Conta <- Navegador" - }, - "adminUserSettings": { - "title": "Configurações de controle de usuário", - "header": "Configurações de controle do usuário administrador", - "admin": "Administrador", - "user": "Usuário", - "addUser": "Adicionar novo usuário", - "deleteUser": "Apagar usuário", - "confirmDeleteUser": "O usuário deve ser apagado?", - "confirmChangeUserStatus": "O usuário deve ser desabilitado/habilitado?", - "usernameInfo": "Nome de usuário só pode incluir letras, números e os seguintes caracteres especiais @._+- ou deve ser um e-mail válido.", - "roles": "Funções", - "role": "Função", - "actions": "Ações", - "apiUser": "Usuário de API limitado", - "extraApiUser": "Usuário de API limitado adicional", - "webOnlyUser": "Usuário web apenas", - "demoUser": "Usuário demo (Sem configurações personalizadas)", - "internalApiUser": "Usuário de API interno", - "forceChange": "Forçar usuário a trocar a senha ao iniciar sessão", - "submit": "Salvar Usuário", - "changeUserRole": "Alterar Função do Usuário", - "authenticated": "Autenticado", - "editOwnProfil": "Editar próprio perfil", - "enabledUser": "usuário habilitado", - "disabledUser": "usuário desabilitado", - "activeUsers": "Usuários Ativos:", - "disabledUsers": "Usuários Desabilitados:", - "totalUsers": "Total de Usuários:", - "lastRequest": "Última solicitação", - "usage": "Ver Utilização" - }, - "endpointStatistics": { - "title": "Estatísticas de Endpoints", - "header": "Estatísticas de Endpoints", - "top10": "Top 10", - "top20": "Top 20", - "all": "Todos", - "refresh": "Atualizar", - "includeHomepage": "Incluir Página Inicial ('/')", - "includeLoginPage": "Incluir Página de Login ('/login')", - "totalEndpoints": "Total de Endpoints", - "totalVisits": "Total de Visitas", - "showing": "Mostrando", - "selectedVisits": "Visitas Selecionadas", - "endpoint": "Endpoint", - "visits": "Visitas", - "percentage": "Percentagem", - "loading": "Carregando...", - "failedToLoad": "Falha ao carregar dados do Endpoint. Por favor, tente atualizar.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Número de Visitas", - "visitsTooltip": "Visitas: {0} ({1}% do total)", - "retry": "Tentar novamente" - }, - "database": { - "title": "Importar/Exportar banco de dados", - "header": "Importar/Exportar banco de dados", - "fileName": "Nome do Arquivo", - "creationDate": "Data de Criação", - "fileSize": "Tamanho do Arquivo", - "deleteBackupFile": "Apagar arquivo de backup", - "importBackupFile": "Importar arquivo de backup", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Baixar arquivo de backup", - "info_1": "Ao importar dados, é crucial garantir a estrutura correta. Se você não tem certeza do que está fazendo procure auxílio de um profissional. Um erro na estrutura pode ocasionar em mau funcionamento da aplicação, incluindo a impossibilidade da aplicação ser executada.", - "info_2": "O nome do arquivo não importa ao enviar. Ele será renomeado em seguida para seguir o formato backup_usuario_yyyyMMddHHmm.sql, garantindo uma convenção de nomes coerente.", - "submit": "Importar Backup", - "importIntoDatabaseSuccessed": "Importação para o banco de dados bem sucedida", - "backupCreated": "Database backup successful", - "fileNotFound": "Arquivo não encontrado", - "fileNullOrEmpty": "O arquivo não pode estar nulo ou vazio", - "failedImportFile": "Falha ao importar arquivo", - "notSupported": "Esta função não está disponível para sua conexão de banco de dados." - }, - "session": { - "expired": "Sua sessão expirou. Por gentileza atualize a página e tente novamente.", - "refreshPage": "Atualizar Página" - }, - "home": { - "desc": "Seu tudo-em-um hospedado localmente para tudo relacionado a PDFs", - "searchBar": "Pesquisar funcionalidades...", - "viewPdf": { - "title": "Ver/Editar PDF", - "desc": "Visualizar, anotar, adicionar texto ou imagens ao PDF." - }, - "setFavorites": "Adicionar Favoritos", - "hideFavorites": "Ocultar Favoritos", - "showFavorites": "Mostrar Favoritos", - "legacyHomepage": "Página Inicial Antiga", - "newHomePage": "Experimente nossa nova Página Inicial!", - "alphabetical": "Alfabética", - "globalPopularity": "Popularidade Global", - "sortBy": "Ordenar por:", - "multiTool": { - "title": "Multiferramentas de PDF", - "desc": "Mesclar, girar, reorganizar, dividir, inserir e remover páginas." - }, - "merge": { - "title": "Mesclar", - "desc": "Mescle facilmente vários PDFs em um só." - }, - "split": { - "title": "Dividir", - "desc": "Dividir PDFs em vários documentos/arquivos." - }, - "rotate": { - "title": "Girar", - "desc": "Gire facilmente seus PDFs." - }, - "imageToPdf": { - "title": "Imagem para PDF", - "desc": "Converter uma imagem (PNG, JPG, GIF) em PDF." - }, - "pdfToImage": { - "title": "PDF para Imagem", - "desc": "Converter PDF em uma imagem (PNG, JPG, GIF e outros)." - }, - "pdfOrganiser": { - "title": "Organizar Páginas", - "desc": "Remover/reorganizar as páginas de diversas formas diferentes." - }, - "addImage": { - "title": "Adicionar Imagem", - "desc": "Adicionar imagens em um local definido no PDF." - }, - "watermark": { - "title": "Adicionar Marca d'água", - "desc": "Adicionar uma marca d'água personalizada ao seu PDF." - }, - "permissions": { - "title": "Alterar Permissões", - "desc": "Alterar as permissões do seu PDF." - }, - "removePages": { - "title": "Remover Páginas", - "desc": "Excluir páginas indesejadas do seu PDF." - }, - "addPassword": { - "title": "Proteger PDF", - "desc": "Criptografar seu PDF com uma senha podendo realizar alterações de permissões." - }, - "removePassword": { - "title": "Desproteger PDF", - "desc": "Descriptografar o PDF realizando a remoção da senha." - }, - "compressPdfs": { - "title": "Comprimir", - "desc": "Comprimir PDFs para reduzir o tamanho do arquivo." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Alterar Metadados", - "desc": "Alterar/remover/adicionar metadados de um PDF." - }, - "fileToPDF": { - "title": "Converter Arquivo para PDF", - "desc": "Converter praticamente qualquer arquivo em PDF (DOCX, PNG, XLS, PPT, TXT e outros)." - }, - "ocr": { - "title": "Processamento de OCR", - "desc": "Reconhecimento Óptico de Caracteres transforma PDFs com imagens em documentos pesquisáveis e com texto selecionável." - }, - "extractImages": { - "title": "Extrair Imagens", - "desc": "Extrair as imagens de um PDF e salvá-las em um arquivo compactado." - }, - "pdfToPDFA": { - "title": "PDF para PDF/A", - "desc": "Converter o PDF para o formato PDF/A, voltado a armazenamento a longo prazo." - }, - "PDFToWord": { - "title": "PDF para Word", - "desc": "Converter PDF para formatos Word (DOC, DOCX e ODT)." - }, - "PDFToPresentation": { - "title": "PDF para Apresentação", - "desc": "Converter PDF para formatos de Apresentação (PPT, PPTX e ODP)." - }, - "PDFToText": { - "title": "PDF para TXT/RTF", - "desc": "Converter PDF em formato de TXT ou RTF." - }, - "PDFToHTML": { - "title": "PDF para HTML", - "desc": "Converter PDF para o formato HTML." - }, - "PDFToXML": { - "title": "PDF para XML", - "desc": "Converter PDF para formato XML." - }, - "ScannerImageSplit": { - "title": "Detectar/Dividir Fotos Digitalizadas", - "desc": "Divide várias fotos de dentro de uma imagem/PDF." - }, - "sign": { - "title": "Assinar", - "desc": "Adicionar assinatura ao PDF por desenho, texto ou imagem." - }, - "flatten": { - "title": "Achatar", - "desc": "Combinar todos os elementos e formulários interativos de um PDF em uma única camada fixa, não editável." - }, - "repair": { - "title": "Reparar", - "desc": "Tentar reparar um PDF corrompido/quebrado." - }, - "removeBlanks": { - "title": "Remover Páginas em Branco", - "desc": "Detectar e remover páginas em branco de um PDF." - }, - "removeAnnotations": { - "title": "Remover Anotações", - "desc": "Remove todos os comentários/anotações de um PDF." - }, - "compare": { - "title": "Comparar", - "desc": "Comparar e mostrar as diferenças entre dois documentos PDF." - }, - "certSign": { - "title": "Assinar com Certificado", - "desc": "Assinar PDF com um Certificado/Chave (PEM/P12/JKS)." - }, - "removeCertSign": { - "title": "Remover Assinatura com Certificado", - "desc": "Remover assinatura com Certificado/Chave (PEM/P12/JKS) em um PDF." - }, - "pageLayout": { - "title": "Layout de Múltiplas Páginas", - "desc": "Mesclar várias páginas de um documento PDF em uma única página." - }, - "scalePages": { - "title": "Ajustar Dimensões da Página", - "desc": "Alterar o tamanho/escala da página e/ou seu conteúdo." - }, - "pipeline": { - "title": "Pipeline", - "desc": "Executar várias ações em PDFs seguindo scripts de operações." - }, - "add-page-numbers": { - "title": "Adicionar Números de Página", - "desc": "Adicionar números de página no documento, em um local definido." - }, - "auto-rename": { - "title": "Renomeação Automática do PDF", - "desc": "Renomeia automaticamente o PDF com base no cabeçalho detectado." - }, - "adjust-contrast": { - "title": "Ajuste Visual do PDF", - "desc": "Ajustar Contraste, Saturação e Brilho de um PDF." - }, - "crop": { - "title": "Recortar", - "desc": "Recortar trecho de um PDF para reduzir o tamanho." - }, - "autoSplitPDF": { - "title": "Divisão Automática de Páginas", - "desc": "Dividir automaticamente um PDF digitalizado utilizando um separador de páginas físico com QR Code." - }, - "sanitizePdf": { - "title": "Higienizar", - "desc": "Remover scripts, links, metadados e outros elementos de um PDF." - }, - "URLToPDF": { - "title": "Converter URL/Site para PDF", - "desc": "Converter qualquer página da internet para um PDF." - }, - "HTMLToPDF": { - "title": "HTML para PDF", - "desc": "Converter qualquer arquivo HTML ou zip para PDF." - }, - "MarkdownToPDF": { - "title": "Markdown para PDF", - "desc": "Converte qualquer arquivo Markdown para PDF." - }, - "PDFToMarkdown": { - "title": "PDF para Markdown", - "desc": "Converte qualquer PDF para Markdown." - }, - "getPdfInfo": { - "title": "Obter Informações de um PDF", - "desc": "Obtém informações (metadata) de um PDF." - }, - "extractPage": { - "title": "Extrair Página(s)", - "desc": "Extrair determinadas páginas de um PDF." - }, - "PdfToSinglePage": { - "title": "PDF para Página Única", - "desc": "Combina todas as páginas de um PDF em uma única página." - }, - "showJS": { - "title": "Mostrar Javascript", - "desc": "Procura, exibe e extrai qualquer JavaScript injetado em um PDF." - }, - "autoRedact": { - "title": "Ocultação de Texto Automática", - "desc": "Ocultação automática (escurecimento) de texto em um PDF com base em texto de entrada." - }, - "redact": { - "title": "Ocultação de Texto Manual", - "desc": "Ocultação de texto manual baseada em um texto selecionado, desenho de formas ou/e páginas selecionadas." - }, - "tableExtraxt": { - "title": "PDF para CSV", - "desc": "Extração de tabelas de um PDF convertendo para CSV." - }, - "autoSizeSplitPDF": { - "title": "Divisão Manual do PDF", - "desc": "Divida um PDF em vários, com base no tamanho, contagem de páginas ou contagem de documentos." - }, - "overlay-pdfs": { - "title": "Sobrepor PDFs", - "desc": "Sobrepõe PDF sobre outro PDF." - }, - "split-by-sections": { - "title": "Dividir PDF por Seções", - "desc": "Divida cada página de um PDF em seções horizontais e/ou verticais menores." - }, - "AddStampRequest": { - "title": "Adicionar Carimbo ao PDF", - "desc": "Adicione texto ou carimbos de imagem em locais definidos." - }, - "removeImagePdf": { - "title": "Remover Imagem", - "desc": "Remova imagens do PDF para reduzir o tamanho do arquivo." - }, - "splitPdfByChapters": { - "title": "Divide PDF por Capítulos", - "desc": "Divide um PDF em vários arquivos baseado na sua estrutura de capítulos." - }, - "validateSignature": { - "title": "Verificar Assinatura com Certificado", - "desc": "Verifica assinatura digital e certificado em um PDF." - }, - "replaceColorPdf": { - "title": "Substitui e Inverte Cores", - "desc": "Substitui cor do texto e plano de fundo de um PDF e/ou inverte a toda cor do PDF para reduzir o tamanho." - } - }, - "viewPdf": { - "tags": "visualizar,ler,anotar,texto,imagem", - "title": "Ver/Editar PDF", - "header": "Visualizar PDF" - }, - "multiTool": { - "tags": "Multiferramentas,múltiplas operações,Interface do Usuário,Clique e arraste,front-end,lado do cliente,interativo,intratável,movimento,excluir,migrar,dividir", - "title": "Multiferramentas de PDF", - "header": "Multiferramentas de PDF", - "uploadPrompts": "Nome do Arquivo:", - "selectAll": "Selecionar Tudo", - "deselectAll": "Desselecionar Tudo", - "selectPages": "Selecionar Páginas", - "selectedPages": "Páginas Selecionadas", - "page": "Página", - "deleteSelected": "Apagar Selecionados", - "downloadAll": "Exportar", - "downloadSelected": "Exportar Selecionados", - "insertPageBreak": "Inserir Página em Branco", - "addFile": "Inserir Arquivo", - "rotateLeft": "Girar para Esquerda", - "rotateRight": "Girar para Direita", - "split": "Dividir", - "moveLeft": "Mover para Esquerda", - "moveRight": "Mover para Direita", - "delete": "Apagar", - "dragDropMessage": "Página(s) Selecionadas", - "undo": "Desfazer", - "redo": "Refazer" - }, - "merge": { - "tags": "mesclar,Operações de Página,Back-end,lado do servidor", - "title": "Mesclar", - "header": "Mesclar", - "sortByName": "Classificar por Nome", - "sortByDate": "Classificar por Data", - "removeCertSign": "Remover a assinatura digital do arquivo mesclado?", - "submit": "Mesclar" - }, - "split": { - "tags": "Operações de Página,dividir,Múltiplas Páginas,cortar,lado do servidor", - "title": "Dividir", - "header": "Dividir", - "desc": { - "1": "Os números selecionados correspondem às páginas onde você deseja realizar a divisão.", - "2": "Por exemplo, selecionar 1,3,7-9 dividirá um documento de 11 páginas em 6 PDFs separados, da seguinte forma:", - "3": "Documento Nº1: Página 1", - "4": "Documento Nº2: Páginas 2 e 3", - "5": "Documento Nº3: Páginas 4, 5, 6 e 7", - "6": "Documento Nº4: Página 8", - "7": "Documento Nº5: Página 9", - "8": "Documento Nº6: Página 10 e 11 (e mais se tiver)" - }, - "splitPages": "Digite as páginas para a divisão:", - "submit": "Dividir" - }, - "rotate": { - "tags": "Lado do servidor", - "title": "Girar", - "header": "Girar", - "selectAngle": "Selecione o ângulo de rotação (múltiplos de 90 graus):", - "submit": "Girar" - }, - "imageToPdf": { - "tags": "conversão,img,jpg,imagem,foto" - }, - "pdfToImage": { - "tags": "conversão,img,jpg,imagem,foto", - "title": "PDF para Imagem", - "header": "PDF para Imagem", - "selectText": "Formato da imagem:", - "singleOrMultiple": "Resultado da conversão:", - "single": "Imagem grande única combinando todas as páginas do PDF", - "multi": "Várias imagens, uma imagem por página do PDF", - "colorType": "Cor de saída:", - "color": "Colorido", - "grey": "Escala de Cinza", - "blackwhite": "Preto e Branco (pode perder informações!)", - "submit": "Converter", - "info": "Python não está instalado. Necessário para conversão WebP.", - "placeholder": "(por exemplo 1,2,8 ou 4,7,12-16 ou 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,par,ímpar,ordenar,mover", - "title": "Organizar Páginas", - "header": "Organizar Páginas", - "submit": "Reorganizar Páginas", - "mode": { - "_value": "Modo:", - "1": "Ordem de página personalizada", - "2": "Ordem inversa", - "3": "Classificação duplex", - "4": "Classificação de livreto", - "5": "Classificação de livreto com ponto lateral", - "6": "Divisão ímpar-par", - "7": "Remover primeiro", - "8": "Remover último", - "9": "Remover o primeiro e o último", - "10": "Mesclagem ímpar-par", - "11": "Duplicar todas as páginas" - }, - "placeholder": "(por exemplo 1,3,2 ou 4-8,2,10-12 ou 2n-1)" - }, - "addImage": { - "tags": "img,jpg,imagem,foto", - "title": "Adicionar Imagem", - "header": "Adicionar Imagem", - "everyPage": "Para cada página?", - "upload": "Carregar imagem", - "submit": "Adicionar imagem" - }, - "watermark": { - "tags": "Texto,repetindo,rótulo,próprio,direitos autorais,marca registrada,img,jpg,imagem,foto", - "title": "Adicionar marca d'água", - "header": "Adicionar marca d'água", - "customColor": "Cor de texto personalizada", - "selectText": { - "1": "Selecione PDF para adicionar a marca d'água:", - "2": "Texto da marca d'água:", - "3": "Tamanho da fonte:", - "4": "Rotação (0-360):", - "5": "Espaçador de Largura (Espaço entre cada marca d'água horizontalmente):", - "6": "Espaçador de Altura (Espaço entre cada marca d'água verticalmente):", - "7": "Opacidade (0% - 100%):", - "8": "Tipo de marca d'água:", - "9": "Imagem da marca d'água:", - "10": "Converter PDF em imagem PDF." - }, - "submit": "Adicionar Marca D'água", - "type": { - "1": "Texto", - "2": "Imagem" - } - }, - "permissions": { - "tags": "leitura,escrita,edição,impressão", - "title": "Alterar Permissões", - "header": "Alterar Permissões", - "warning": "Aviso: para que essas permissões sejam imutáveis, é recomendável defini-las com uma senha através da página \"Proteger PDF\".", - "selectText": { - "1": "Selecione o PDF para alterar as permissões:", - "2": "Permissões para definir:", - "3": "Impedir montagem do documento.", - "4": "Impedir extração de conteúdo.", - "5": "Impedir extração para acessibilidade.", - "6": "Impedir preenchimento de formulário.", - "7": "Impedir modificações.", - "8": "Impedir modificação de anotações.", - "9": "Impedir impressão.", - "10": "Impedir impressão de formatos diferentes." - }, - "submit": "Alterar" - }, - "removePages": { - "tags": "Remover páginas,excluir páginas" - }, - "addPassword": { - "tags": "seguro,segurança", - "title": "Proteger PDF", - "header": "Proteger PDF (Criptografar)", - "selectText": { - "1": "Selecione o PDF para Criptografar:", - "2": "Senha de acesso:", - "3": "Tamanho da chave de criptografia:", - "4": "Valores mais altos são mais seguros, mas valores mais baixos são melhores para compatibilidade.", - "5": "Permissões a serem definidas (recomendado para uso junto com a senha do proprietário):", - "6": "Impedir a montagem do documento.", - "7": "Impedir a extração de conteúdo.", - "8": "Impedir a extração para acessibilidade.", - "9": "Impedir o preenchimento do formulário.", - "10": "Impedir modificação.", - "11": "Impedir modificação de anotações.", - "12": "Impedir impressão.", - "13": "Impedir impressão de formatos diferentes.", - "14": "Senha do proprietário:", - "15": "Restringe o que pode ser feito com o documento depois de aberto (não suportado por todos os leitores).", - "16": "Restringe a abertura do próprio documento." - }, - "submit": "Criptografar" - }, - "removePassword": { - "tags": "seguro, descriptografar, segurança, remover senha", - "title": "Desproteger PDF", - "header": "Desproteger PDF (descriptografar)", - "selectText": { - "1": "Selecione o PDF para descriptografar:", - "2": "Senha" - }, - "submit": "Descriptografar" - }, - "compressPdfs": { - "tags": "compactar,pequeno,mínimo" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Título,autor,data,criação,hora,editor,produtor,estatísticas", - "title": "Alterar Metadados", - "header": "Alterar Metadados", - "selectText": { - "1": "Edite as variáveis ​​que deseja alterar.", - "2": "Excluir todos os metadados.", - "3": "Mostrar metadados personalizados.", - "4": "Outros metadados:", - "5": "Adicionar Entrada de Metadados Personalizada" - }, - "author": "Autor:", - "creationDate": "Data de criação (aaaa/mm/dd HH:mm:ss):", - "creator": "Criador:", - "keywords": "Palavras-chave:", - "modDate": "Data de modificação (aaaa/mm/dd HH:mm:ss):", - "producer": "Produtor:", - "subject": "Assunto:", - "trapped": "Metadados trapping:", - "submit": "Alterar" - }, - "fileToPDF": { - "tags": "transformação,formato,documento,imagem,slide,texto,conversão,escritório,documentos,word,excel,powerpoint", - "title": "Converter Arquivo para PDF", - "header": "Converter Arquivo para PDF", - "credit": "Este serviço usa o LibreOffice e o Unoconv realizar a conversão de arquivos.", - "supportedFileTypesInfo": "Tipos de Arquivos Suportados", - "supportedFileTypes": "A listagem abaixo não é exaustiva, para obter uma lista atualizada completa dos formatos suportados, consulte a documentação do LibreOffice.", - "submit": "Converter para PDF" - }, - "ocr": { - "tags": "reconhecimento,texto,imagem,digitalização,leitura,identificação,detecção,editável", - "title": "Processamento de OCR", - "header": "Processamento de OCR (Reconhecimento Óptico de Caracteres)", - "selectText": { - "1": "Selecione os idiomas a serem detectados no PDF (os listados são os atualmente instalados):", - "2": "Criar um arquivo de texto contendo o texto OCR junto do PDF com OCR", - "3": "Páginas corretamente digitalizadas em um ângulo inclinado, gire-as de volta à posição original", - "4": "Limpar a página para reduzir a probabilidade de o OCR encontrar texto no ruído de fundo (sem alteração na saída)", - "5": "Limpar a página para reduzir a probabilidade de o OCR encontrar texto no ruído de fundo, mantendo a limpeza na saída.", - "6": "Ignorar páginas com texto interativo, processar por OCR apenas as páginas com imagens", - "7": "Forçar OCR, executar OCR em todas as páginas, removendo todos os elementos de texto originais", - "8": "Normal (gerará um erro se o PDF já contiver texto)", - "9": "Configurações Adicionais", - "10": "Modo OCR:", - "11": "Remover imagens após o OCR (remove TODAS as imagens, útil apenas como parte do processo de conversão)", - "12": "Tipo de renderização (Avançado):" - }, - "help": "Por favor, leia a documentação abaixo para saber mais sobre OCR e sua utilização.", - "credit": "Este serviço usa Qpdf e Tesseract para OCR.", - "submit": "Processar OCR no PDF" - }, - "extractImages": { - "tags": "imagem,foto,salvar,arquivo,zip,captura,coleta", - "title": "Extrair Imagens", - "header": "Extrair Imagens", - "selectText": "Selecione o formato de saída das imagens extraídas:", - "allowDuplicates": "Salvar imagens duplicadas.", - "submit": "Extrair" - }, - "pdfToPDFA": { - "tags": "arquivo,longo prazo,padrão,conversão,armazenamento,preservação", - "title": "PDF para PDF/A", - "header": "PDF para PDF/A", - "credit": "Este serviço usa o LibreOffice para conversão para PDF/A.", - "submit": "Converter", - "tip": "Atenção, atualmente não funciona para múltiplas entradas ao mesmo tempo.", - "outputFormat": "Formato de saída:", - "pdfWithDigitalSignature": "O PDF contém uma assinatura digital. Isso será removido na próxima etapa." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformação,formato,conversão,escritório,microsoft,doc", - "title": "PDF para Word", - "header": "PDF para Word", - "selectText": { - "1": "Formato do arquivo de saída:" - }, - "credit": "Este serviço usa o LibreOffice para conversão de arquivos.", - "submit": "Converter" - }, - "PDFToPresentation": { - "tags": "slides,apresentação,escritório,microsoft", - "title": "PDF para Apresentação", - "header": "PDF para Apresentação", - "selectText": { - "1": "Formato do arquivo de saída:" - }, - "credit": "Este serviço usa o LibreOffice para conversão de arquivos.", - "submit": "Converter" - }, - "PDFToText": { - "tags": "formato rich,formato richtext,formato rich text", - "title": "PDF para TXT/RTF", - "header": "PDF para TXT/RTF", - "selectText": { - "1": "Formato do arquivo de saída:" - }, - "credit": "Este serviço usa o LibreOffice para conversão de arquivos.", - "submit": "Converter" - }, - "PDFToHTML": { - "tags": "conteúdo web,compatível com navegador", - "title": "PDF para HTML", - "header": "PDF para HTML", - "credit": "Este serviço usa o pdftohtml para conversão de arquivos.", - "submit": "Converter" - }, - "PDFToXML": { - "tags": "extração-de-dados,conteúdo-estruturado,interoperabilidade,transformação,converter", - "title": "PDF para XML", - "header": "PDF para XML", - "credit": "Este serviço usa o LibreOffice para conversão de arquivos.", - "submit": "Converter" - }, - "ScannerImageSplit": { - "tags": "separar,detecção-automática,digitalizações,fotos-múltiplas,organizar", - "selectText": { - "1": "Limite de ângulo:", - "2": "Define o ângulo absoluto mínimo necessário para que a imagem seja girada (padrão: 10).", - "3": "Tolerância:", - "4": "Determina o intervalo de variação de cor em torno da cor de fundo estimada (padrão: 30).", - "5": "Área mínima:", - "6": "Define o limite mínimo de área para uma foto (padrão: 10000).", - "7": "Área mínima de contorno:", - "8": "Define o limite mínimo da área de contorno para uma foto.", - "9": "Tamanho da borda:", - "10": "Define o tamanho da borda adicionada e removida para evitar bordas brancas na saída (padrão: 1)." - }, - "info": "Python não está instalado. É necessário para executar." - }, - "sign": { - "tags": "autorizar,iniciais,assinatura-desenhada,assinatura-de-texto,assinatura-de-imagem", - "title": "Assinar", - "header": "Assinar", - "upload": "Carregar Imagem", - "draw": "Desenhar Assinatura", - "text": "Inserir Texto", - "clear": "Limpar", - "add": "Adicionar", - "saved": "Assinaturas Salvas", - "save": "Salvar Assinatura", - "personalSigs": "Assinaturas Pessoais", - "sharedSigs": "Assinaturas Compartilhadas", - "noSavedSigs": "Nenhuma assinatura salva encontrada.", - "addToAll": "Adicionar em todas páginas", - "delete": "Apagar", - "first": "Primeira página", - "last": "Última página", - "next": "Próxima página", - "previous": "Página anterior", - "maintainRatio": "Habilitar manter proporção", - "undo": "Desfazer", - "redo": "Refazer" - }, - "flatten": { - "tags": "estático,desativar,não-interativo,otimizar", - "title": "Achatar", - "header": "Achatar", - "flattenOnlyForms": "Achatar apenas formulários interativos.", - "submit": "Achatar" - }, - "repair": { - "tags": "corrigir,restaurar,correção,recuperar", - "title": "Reparar", - "header": "Reparar", - "submit": "Reparar" - }, - "removeBlanks": { - "tags": "limpeza,otimização,sem-conteúdo,organizar", - "title": "Remover Páginas em Branco", - "header": "Remover Páginas em Branco", - "threshold": "Limite de brancura de pixel:", - "thresholdDesc": "Limite para determinar o quão branco um pixel branco deve ser para ser classificado como \"branco\", para remoção. 0 = Preto, 255 = branco puro.", - "whitePercent": "Porcentagem de branco (%):", - "whitePercentDesc": "Porcentagem da página que devem ter pixels classificados como “brancos” para serem removidas.", - "submit": "Remover Páginas em Branco" - }, - "removeAnnotations": { - "tags": "comentários,destaque,notas,marcação,remover", - "title": "Remover Anotações", - "header": "Remover Anotações", - "submit": "Remover" - }, - "compare": { - "tags": "diferenciar,contraste,mudanças,análise", - "title": "Comparar", - "header": "Comparar", - "highlightColor": { - "1": "Cor de destaque 1:", - "2": "Cor de destaque 2:" - }, - "document": { - "1": "Documento 1:", - "2": "Documento 2:" - }, - "submit": "Comparar", - "complex": { - "message": "Um ou ambos os documentos fornecidos são arquivos grandes, a precisão da comparação pode ser reduzida." - }, - "large": { - "file": { - "message": "Um ou ambos os documentos fornecidos são muito grandes para processar." - } - }, - "no": { - "text": { - "message": "Um ou ambos os PDFs selecionados não possuem conteúdo de texto. Por favor, escolha PDFs com texto para comparação." - } - } - }, - "certSign": { - "tags": "autenticar,PEM,P12,oficial,criptografar", - "title": "Assinatura com Certificado", - "header": "Assinatura com Certificado (Em desenvolvimento)", - "selectPDF": "Selecione um arquivo PDF para assinatura:", - "jksNote": "Nota: Se o seu tipo de certificado não estiver listado abaixo, converta-o em um arquivo Java Keystore (.jks) usando a ferramenta de linha de comando keytool. Em seguida, escolha a opção de arquivo .jks abaixo.", - "selectKey": "Selecione o seu arquivo de chave privada (formato PKCS#8, pode ser .pem ou .der):", - "selectCert": "Selecione o seu arquivo de certificado (formato X.509, pode ser .pem ou .der):", - "selectP12": "Selecione o seu arquivo de armazenamento de chave PKCS#12 (.p12 ou .pfx) (opcional, se fornecido, deve conter a sua chave privada e certificado):", - "selectJKS": "Selecione seu arquivo Java Keystore (.jks ou .keystore):", - "certType": "Tipo de Certificado:", - "password": "Digite a senha do seu armazenamento de chave ou chave privada (se aplicável):", - "showSig": "Mostrar Assinatura.", - "reason": "Razão", - "location": "Localização", - "name": "Nome", - "showLogo": "Mostrar Logotipo", - "submit": "Assinar PDF" - }, - "removeCertSign": { - "tags": "autenticar,PEM,P12,oficial,descriptografar", - "title": "Remover Assinatura com Certificado", - "header": "Remover Assinatura com Certificado", - "selectPDF": "Selecione um arquivo PDF:", - "submit": "Remover Assinatura" - }, - "pageLayout": { - "tags": "mesclar,composto,vista-única,organizar", - "title": "Layout de Múltiplas Páginas", - "header": "Layout de Múltiplas Páginas", - "pagesPerSheet": "Páginas por folha:", - "addBorder": "Adicionar bordas.", - "submit": "Enviar" - }, - "scalePages": { - "tags": "redimensionar,modificar,dimensão,adaptar", - "title": "Ajustar Dimensões da Página", - "header": "Ajustar Dimensões da Página", - "pageSize": "Tamanho desejado do documento:", - "keepPageSize": "Tamanho Original", - "scaleFactor": "Fator de zoom (corte) de uma página:", - "submit": "Enviar" - }, - "add-page-numbers": { - "tags": "paginar,rotular,organizar,índice" - }, - "auto-rename": { - "tags": "detecção-automática,baseado-em-cabeçalho,organizar,relabel", - "title": "Renomeação Automática do PDF", - "header": "Renomeação Automática do PDF", - "submit": "Renomeação Automática" - }, - "adjust-contrast": { - "tags": "correção-de-cor,ajustar,modificar,realçar" - }, - "crop": { - "tags": "aparar,encolher,editar,formato", - "title": "Recortar", - "header": "Recortar", - "submit": "Enviar" - }, - "autoSplitPDF": { - "tags": "baseado-em-QR,separar,segmento-de-digitalização,organizar", - "title": "Divisão Automática de Páginas", - "header": "Divisão Automática de Páginas", - "description": "Imprima, insira, digitalize, faça o upload e deixe que a gente divida seus documentos automaticamente.", - "selectText": { - "1": "Imprima algumas folhas divisórias, descritas abaixo (preto e branco ou colorido).", - "2": "Digitalize todos os seus documentos de uma vez, inserindo a folha divisória enre os documentos que deseja separar.", - "3": "Faça o upload do arquivo único PDF digitalizado e deixe o Stirling PDF cuidar do resto.", - "4": "As páginas divisórias são detectadas e removidas automaticamente, garantindo um documento final organizado." - }, - "formPrompt": "Enviar PDF contendo folhas divisórias Stirling-PDF:", - "duplexMode": "Modo Duplex (Digitalização frente e verso).", - "dividerDownload2": "Baixar 'Folha Divisória Automática (com instruções).pdf'", - "submit": "Enviar" - }, - "sanitizePdf": { - "tags": "limpar,seguro,protegido,remover-ameaças" - }, - "URLToPDF": { - "tags": "captura-de-web,salvar-página,web-para-doc,arquivar", - "title": "Converter URL/Site para PDF", - "header": "Converter URL/Site para PDF", - "submit": "Converter", - "credit": "Utiliza o WeasyPrint." - }, - "HTMLToPDF": { - "tags": "marcação,conteúdo-web,transformação,converter", - "title": "HTML para PDF", - "header": "HTML para PDF", - "help": "Aceita arquivos HTML e ZIPs contendo html, css, imagens, etc.", - "submit": "Converter", - "credit": "Utiliza o WeasyPrint.", - "zoom": "Nível de zoom para exibição do site:", - "pageWidth": "Largura da página em centímetros. (Em branco para padrão)", - "pageHeight": "Altura da página em centímetros. (Em branco para padrão)", - "marginTop": "Margem superior da página em milímetros. (Em branco para padrão)", - "marginBottom": "Margem inferior da página em milímetros. (Em branco para padrão)", - "marginLeft": "Margem esquerda da página em milímetros. (Em branco para padrão)", - "marginRight": "Margem direita da página em milímetros. (Em branco para padrão)", - "printBackground": "Renderize o plano de fundo dos sites.", - "defaultHeader": "Habilitar cabeçalho padrão (nome e número da página)", - "cssMediaType": "Altere o tipo de mídia CSS da página.", - "none": "Nenhum", - "print": "Imprimir", - "screen": "Tela" - }, - "MarkdownToPDF": { - "tags": "marcação,conteúdo-web,transformação,converter", - "title": "Markdown para PDF", - "header": "Markdown para PDF", - "submit": "Converter", - "help": "Em desenvolvimento.", - "credit": "Utiliza o WeasyPrint." - }, - "PDFToMarkdown": { - "tags": "marcação,conteúdo-web,transformação,converter,md", - "title": "PDF para Markdown", - "header": "PDF para Markdown", - "submit": "Converter" - }, - "getPdfInfo": { - "tags": "informações,dados,estatísticas", - "title": "Obter Informações do PDF", - "header": "Obter Informações do PDF", - "submit": "Obter Informações", - "downloadJson": "Baixar JSON" - }, - "extractPage": { - "tags": "extrair" - }, - "PdfToSinglePage": { - "tags": "página única" - }, - "showJS": { - "tags": "JavaScript", - "title": "Mostrar JavaScript", - "header": "Mostrar JavaScript", - "downloadJS": "Baixar JavaScript", - "submit": "Mostrar" - }, - "autoRedact": { - "tags": "Redigir,ocultar,escurecer,preto,marcador,oculto", - "title": "Ocultação de Texto Automática", - "header": "Ocultação de Texto Automática", - "colorLabel": "Cor:", - "textsToRedactLabel": "Texto para ocultar (um por linha):", - "textsToRedactPlaceholder": "Por exemplo: \\nConfidencial \\nSecreto", - "useRegexLabel": "Usar Regex (expressão regular).", - "wholeWordSearchLabel": "Pesquisa apenas palavras inteiras.", - "customPaddingLabel": "Preenchimento extra personalizado:", - "convertPDFToImageLabel": "Converter PDF em imagem PDF (Usado para remover o texto atrás da caixa).", - "submitButton": "Ocultar" - }, - "redact": { - "tags": "Redigir,ocultar,escurecer,preto,marcador,oculto,manual", - "title": "Ocultação de Texto Manual", - "header": "Ocultação de Texto Manual", - "submit": "Ocultar", - "textBasedRedaction": "Ocultação baseada em texto", - "pageBasedRedaction": "Ocultação baseada em páginas", - "convertPDFToImageLabel": "Converter PDF para PDF-Imagem (Utilizado para remover texto atrás da seleção)", - "pageRedactionNumbers": { - "title": "Páginas", - "placeholder": "(p.ex. 1,2,8 ou 4,7,12-16 ou 2n-1)" - }, - "redactionColor": { - "title": "Cor da Ocultação" - }, - "export": "Exportar", - "upload": "Carregar", - "boxRedaction": "Ocultação baseada em formas", - "zoom": "Zoom", - "zoomIn": "Ampliar", - "zoomOut": "Reduzir", - "nextPage": "Proxima Página", - "previousPage": "Página Anterior", - "toggleSidebar": "Mostrar/Ocultar Barra Lateral", - "showThumbnails": "Mostrar Miniaturas", - "showDocumentOutline": "Mostrar Estrutura do Documento (duplo clique para expandir/recolher todos os itens)", - "showAttatchments": "Mostrar Anexos", - "showLayers": "Mostrar Camadas (duplo clique para restabelecer as camadas para o estado padrão)", - "colourPicker": "Seletor de Cores", - "findCurrentOutlineItem": "Encontrar item atual", - "applyChanges": "Aplicar Alterações" - }, - "tableExtraxt": { - "tags": "CSV,extração de tabela,extrair,converter" - }, - "autoSizeSplitPDF": { - "tags": "pdf,divisão,documento,organização" - }, - "overlay-pdfs": { - "tags": "Sobreposição", - "header": "Sobrepor PDFs", - "baseFile": { - "label": "Selecione o arquivo PDF base:" - }, - "overlayFiles": { - "label": "Selecione os arquivos PDF para sobreposição:" - }, - "mode": { - "label": "Selecione o modo de sobreposição:", - "sequential": "Sobreposição sequencial", - "interleaved": "Sobreposição intercalada", - "fixedRepeat": "Sobreposição de repetição fixa" - }, - "counts": { - "label": "Contagens de sobreposição (para modo de repetição fixa)", - "placeholder": "Insira contagens separadas por vírgula (por exemplo, 2,3,1)" - }, - "position": { - "label": "Selecione a posição de sobreposição", - "foreground": "Primeiro plano", - "background": "Plano de fundo" - }, - "submit": "Enviar" - }, - "split-by-sections": { - "tags": "Seção Dividir, Dividir, Personalizar", - "title": "Dividir PDF por Seções", - "header": "Dividir PDF por Seções", - "horizontal": { - "label": "Divisões Horizontais:", - "placeholder": "Insira o número de divisões horizontais" - }, - "vertical": { - "label": "Divisões Verticais:", - "placeholder": "Insira o número de divisões verticais" - }, - "submit": "Dividir", - "merge": "Mesclar em um PDF." - }, - "AddStampRequest": { - "tags": "Carimbo,Adicionar imagem,centralizar imagem,Marca d'água,PDF,Incorporar,Personalizar", - "header": "Adicionar Carimbo ao PDF", - "title": "Adicionar Carimbo ao PDF", - "stampType": "Tipo de carimbo:", - "stampText": "Texto do carimbo:", - "stampImage": "Imagem do carimbo:", - "alphabet": "Alfabeto:", - "fontSize": "Tamanho da fonte/imagem:", - "rotation": "Rotação:", - "opacity": "Opacidade:", - "position": "Posição:", - "overrideX": "Substituir coordenada X:", - "overrideY": "Substituir coordenada Y:", - "customMargin": "Margem personalizada:", - "customColor": "Cor de texto personalizada:", - "submit": "Enviar" - }, - "removeImagePdf": { - "tags": "Remover imagem,operações de página,back-end,lado do servidor" - }, - "splitPdfByChapters": { - "tags": "dividir,capítulos,favoritos,organizar" - }, - "validateSignature": { - "tags": "assinatura,verificação,validação,pdf,certificado,assinatura digital,validar assinatura,validar certificado", - "title": "Verificar Assinatura com Certificado", - "header": "Verificar Assinatura com Certificado", - "selectPDF": "Selecione PDF com assinatura por certificado:", - "submit": "Verificar Assinatura", - "results": "Resultados da Verificação", - "status": { - "_value": "Situação", - "valid": "Valido", - "invalid": "Inválido" - }, - "signer": "Signatário", - "date": "Data", - "reason": "Motivo", - "location": "Localização", - "noSignatures": "Nenhuma assinatura digital encontrada no documento.", - "chain": { - "invalid": "Falha na validação da cadeia de certificados - não é possível verificar a identidade do signatário" - }, - "trust": { - "invalid": "Certificado não está presente no repositório de confiança, a fonte não pode ser verificada" - }, - "cert": { - "expired": "Certificate expirou", - "revoked": "Certificado foi revogado", - "info": "Detalhes do certificado", - "issuer": "Emissor", - "subject": "Assunto", - "serialNumber": "Número de serial", - "validFrom": "Valido de", - "validUntil": "Valido até", - "algorithm": "Algoritmo", - "keySize": "Tamanho da chave", - "version": "Versão", - "keyUsage": "Uso da chave", - "selfSigned": "Autoassinados", - "bits": "bits" - }, - "signature": { - "info": "Informações da assinatura", - "_value": "Assinatura", - "mathValid": "Assinatura é matematicamente valida PORÉM:" - }, - "selectCustomCert": "Arquivo customizado de certificado X.509 (Opcional)" - }, - "replace-color": { - "title": "Substitui e Inverte Cores", - "header": "Substitui e Inverte Cores", - "selectText": { - "1": "Substituir ou inverter cores Opções:", - "2": "Padrão (Cores de alto constraste)", - "3": "Customizado (Cores customizadas)", - "4": "Inversão Completa (Inverte todas cores)", - "5": "Opções de cores de alto contraste:", - "6": "Texto branco em um plano de fundo preto", - "7": "Texto preto em um plano de fundo branco", - "8": "Texto amarelo em um plano de fundo preto", - "9": "Texto verde em um plano de fundo preto", - "10": "Escolha a cor do texto:", - "11": "Escolha a cor do plano de fundo:" - }, - "submit": "Substituir" - }, - "replaceColorPdf": { - "tags": "Substitui Cor, Operações na Página, back end, lado do servidor" - }, - "login": { - "title": "Iniciar sessão", - "header": "Iniciar sessão", - "signin": "Iniciar sessão", - "rememberme": "Lembrar de mim", - "invalid": "Usuário ou senha inválidos.", - "locked": "Sua conta foi bloqueada.", - "signinTitle": "Por favor, inicie a sessão", - "ssoSignIn": "Iniciar sessão através de login único (SSO)", - "oAuth2AutoCreateDisabled": "Auto-Criar Usuário OAUTH2 Desativado", - "oAuth2AdminBlockedUser": "O registro ou login de usuários não registrados está atualmente bloqueado. Entre em contato com o administrador.", - "oauth2RequestNotFound": "Solicitação de autorização não encontrada", - "oauth2InvalidUserInfoResponse": "Resposta de informação de usuário inválida", - "oauth2invalidRequest": "Requisição Inválida", - "oauth2AccessDenied": "Acesso Negado", - "oauth2InvalidTokenResponse": "Resposta de Token Inválida", - "oauth2InvalidIdToken": "Id de Token Inválido", - "relyingPartyRegistrationNotFound": "Nenhum registro de parte confiável (RP) encontrado", - "userIsDisabled": "O usuário está desativado, o login está atualmente bloqueado com este nome de usuário. Entre em contato com o administrador.", - "alreadyLoggedIn": "Você já está conectado em", - "alreadyLoggedIn2": "aparelhos. Por favor saia dos aparelhos e tente novamente.", - "toManySessions": "Você tem muitas sessões ativas", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF para Página Única", - "header": "PDF para Página Única", - "submit": "Converter para Página Única" - }, - "pageExtracter": { - "title": "Extrair Página(s)", - "header": "Extrair Páginas(s)", - "submit": "Extrair", - "placeholder": "(por exemplo 1,2,8 or 4,7,12-16 ou 2n-1)" - }, - "sanitizePDF": { - "title": "Higienizar", - "header": "Higienizar", - "selectText": { - "1": "Remover scripts de JavaScript.", - "2": "Remover arquivos embutidos.", - "3": "Remover metadados XMP.", - "4": "Remover links.", - "5": "Remover fontes.", - "6": "Remover metadados de informações do documento." - }, - "submit": "Higienizar PDF" - }, - "adjustContrast": { - "title": "Ajuste Visual do PDF", - "header": "Ajuste Visual do PDF", - "contrast": "Contraste:", - "brightness": "Brilho:", - "saturation": "Saturação:", - "download": "Baixar" - }, - "compress": { - "title": "Comprimir", - "header": "Comprimir", - "credit": "Este serviço usa o Qpdf para compressão/otimização de PDF.", - "grayscale": { - "label": "Aplicar escala de cinza para compressão" - }, - "selectText": { - "1": { - "_value": "Configurações de Compressão:", - "1": "1-3: Compressão do PDF,
4-6: Compressão leve de Imagem,
7-9: Compressão alta de Imagem. Redução considerável de qualidade da imagem." - }, - "2": "Nível de Otimização:", - "4": "Modo Automático - Ajusta automaticamente a qualidade para atingir o tamanho exato desejado", - "5": "Tamanho esperado do PDF (por exemplo, 25 MB, 10,8 MB, 25 KB):" - }, - "submit": "Comprimir" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "Esta função também está disponível em Multiferramentas de PDF. Com uma interface mais completa e funções adicionais." - }, - "pageRemover": { - "title": "Remover Páginas", - "header": "Remover Páginas", - "pagesToDelete": "Páginas a serem excluídas (insira uma lista separada por vírgulas, com os números de páginas):", - "submit": "Excluir Páginas", - "placeholder": "(por exemplo 1,2,6 ou 1-10,15-30)" - }, - "imageToPDF": { - "title": "Imagem para PDF", - "header": "Imagem para PDF", - "submit": "Converter", - "selectLabel": "Opções de ajuste da imagem:", - "fillPage": "Preencher a página", - "fitDocumentToImage": "Ajustar página à imagem", - "maintainAspectRatio": "Manter proporções", - "selectText": { - "2": "Girar automaticamente.", - "3": "Lógica de vários arquivos (Ativada apenas ao trabalhar com várias imagens):", - "4": "Mesclar em um único PDF", - "5": "Converter em PDFs separados" - } - }, - "PDFToCSV": { - "title": "PDF para CSV", - "header": "PDF para CSV", - "prompt": "Escolha a página para extração da tabela:", - "submit": "Extrair" - }, - "split-by-size-or-count": { - "title": "Divisão Manual do PDF", - "header": "Divisão Manual do PDF", - "type": { - "label": "Selecione o tipo de divisão:", - "size": "Por tamanho", - "pageCount": "Por contagem de páginas", - "docCount": "Por contagem de documentos" - }, - "value": { - "label": "Insira o valor:", - "placeholder": "Insira o tamanho (por exemplo, 2 MB ou 3 KB) ou a contagem (por exemplo, 5)" - }, - "submit": "Enviar" - }, - "printFile": { - "title": "Imprimir arquivo", - "header": "Imprimir arquivo na impressora", - "selectText": { - "1": "Selecione o arquivo para imprimir", - "2": "Digite o nome da impressora" - }, - "submit": "Imprimir" - }, - "licenses": { - "nav": "Licenças", - "title": "Licenças de Terceiros", - "header": "Licenças de Terceiros", - "module": "Módulo", - "version": "Versão", - "license": "Licença" - }, - "survey": { - "nav": "Pesquisa", - "title": "Pesquisa Stirling-PDF", - "description": "Stirling-PDF não possui rastreamento, então queremos ouvir nossos usuários para melhorar o Stirling-PDF!", - "changes": "Stirling-PDF mudou desde sua última pesquisa! Para saber mais acesse nosso blog:", - "changes2": "Com essas mudanças estamos implementando suporte empresarial pago e financeamento.", - "please": "Por favor, considere responder à nossa pesquisa!", - "disabled": "(O pop-up da pesquisa será desativado nas atualizações seguintes, mas estará disponível no rodapé da página)", - "button": "Responder a Pesquisa", - "dontShowAgain": "Não mostre novamente.", - "meeting": { - "1": "Se você está utilizando o Stirling PDF em ambiente empresarial, nos vamos amar falar com você. Nós estamos oferecendo sessões de suporte técnico em troca de uma sessão de descoberta de usuários de 15 minutos.", - "2": "Essa é uma chance para:", - "3": "Obter ajuda com implementação, integração ou resolução de problemas", - "4": "Prover feedback sobre desempenho, casos especiais e lacunas de funcionalidades", - "5": "Nos ajude a melhorar o Stirling PDF para uso empresarial no mundo real", - "6": "Se você está interessado, você pode agendar um horário com nosso time diretamente. (Apenas em Inglês)", - "7": "Estamos ansiosos para entender seu uso do software e tornar o Stirling PDF ainda melhor!", - "notInterested": "Não é uma empresa e/ou não tem interesse em uma reunião?", - "button": "Agendar Reunião" - } - }, - "removeImage": { - "title": "Remover Imagem", - "header": "Remover Imagem", - "removeImage": "Remover Imagem", - "submit": "Remover Imagem" - }, - "splitByChapters": { - "title": "Divide PDF por Capítulos", - "header": "Divide PDF por Capítulos", - "bookmarkLevel": "Nível do Marcador:", - "includeMetadata": "Incluir Metadados.", - "allowDuplicates": "Permitir Cópias.", - "desc": { - "1": "Essa ferramenta divide um arquivo PDF em vários arquivos PDFs baseado na estrutura de capítulos.", - "2": "Nível do Marcador: Escolha o nível do marcador a ser usado para divisão (0 para o primeiro nível, 1 para o segundo nível, etc).", - "3": "Incluir Metadados: Se marcado, os metadados do PDF original serão incluidos em cada arquivo gerado pela divisão do PDF.", - "4": "Permitir Cópias: Se marcado, habilita vários marcadores na mesma página para criar PDFs separados." - }, - "submit": "Dividir" - }, - "fileChooser": { - "click": "Clique", - "or": "ou", - "dragAndDrop": "Arraste & Solte", - "dragAndDropPDF": "Arraste & Solte PDF(s)", - "dragAndDropImage": "Arraste & Solte Imagem(ns)", - "hoveredDragAndDrop": "Arraste & Solte arquivo(s) aqui", - "extractPDF": "Extraindo..." - }, - "releases": { - "footer": "Versões", - "title": "Notas de Lançamento", - "header": "Notas de Lançamento", - "current": { - "version": "Versão Atual" - }, - "note": "Notas de Lançamento estão disponíveis apenas em Inglês" - }, - "cookieBanner": { - "popUp": { - "title": "Como nós utilizamos Cookies:", - "description": { - "1": "Nós utilizamos cookies e outras tecnologias para melhorar o Stirling PDF, ajude-nos para que possamos desenvolver novas funcionalidades que você irá amar.", - "2": "Se você não tiver interesse, clicando em \"Não, Obrigado\" será habilitado apenas cookies essenciais, para o site funcionar sem problemas." - }, - "acceptAllBtn": "Aceito", - "acceptNecessaryBtn": "Não, Obrigado", - "showPreferencesBtn": "Gerenciar Preferências" - }, - "preferencesModal": { - "title": "Central de Preferências de Consentimento", - "acceptAllBtn": "Aceitar tudo", - "acceptNecessaryBtn": "Rejeitar tudo", - "savePreferencesBtn": "Salvar preferências", - "closeIconLabel": "Fechar janela", - "serviceCounterLabel": "Serviço|Serviços", - "subtitle": "Uso de Cookies", - "description": { - "1": "Stirling PDF utiliza cookies e tecnologias semelhantes para aprimorar sua experiência e entender como nossas ferramentas são utilizadas. Isso nos ajuda a melhorar o desempenho, desenvolver os recursos de seu interesse e fornecer suporte contínuo aos nossos usuários.", - "2": "O Stirling PDF não pode – e nunca irá – rastrear ou acessar o conteúdo dos documentos que você manipula.", - "3": "Sua privacidade e confiança são prioridades para nós." - }, - "necessary": { - "title": { - "1": "Cookies Estritamente Necessários", - "2": "Sempre Ativado" - }, - "description": "Estes cookies são essenciais para o bom funcionamento do site. Eles habilitam recursos básicos como definir suas preferências de privacidade, realizar login e preencher formulários – e é por isso que não podem ser desativados." - }, - "analytics": { - "title": "Cookies Analíticos", - "description": "Estes cookies nos ajudam a entender como nossas ferramentas estão sendo utilizadas, para que possamos nos concentrar na construção dos recursos que nossa comunidade mais valoriza. Fique tranquilo: o Stirling PDF não pode e nunca rastreará o conteúdo dos documentos com os quais você manipula." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/pt-PT/translation.json b/frontend/dist/locales/pt-PT/translation.json deleted file mode 100644 index 9ecc39e51..000000000 --- a/frontend/dist/locales/pt-PT/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Tamanho da Fonte", - "fontName": "Nome da Fonte", - "title": "Adicionar Números de Página", - "header": "Adicionar Números de Página", - "selectText": { - "1": "Selecionar ficheiro PDF:", - "2": "Tamanho da Margem", - "3": "Posição", - "4": "Número Inicial", - "5": "Páginas a Numerar", - "6": "Texto Personalizado" - }, - "customTextDesc": "Texto Personalizado", - "numberPagesDesc": "Quais páginas a numerar, predefinição 'todas', também aceita 1-5 ou 2,5,9 etc", - "customNumberDesc": "Predefinição {n}, também aceita 'Página {n} de {total}', 'Texto-{n}', '{filename}-{n}", - "submit": "Adicionar Números de Página" - }, - "pdfPrompt": "Selecione PDF(s)", - "multiPdfPrompt": "Selecione PDFs (2+)", - "multiPdfDropPrompt": "Selecione (ou arraste e solte) todos os PDFs necessários", - "imgPrompt": "Selecione Imagem(ns)", - "genericSubmit": "Submeter", - "uploadLimit": "Tamanho máximo de ficheiro:", - "uploadLimitExceededSingular": "é muito grande. O tamanho máximo permitido é", - "uploadLimitExceededPlural": "são muito grandes. O tamanho máximo permitido é", - "processTimeWarning": "Aviso: Este processo pode demorar até um minuto dependendo do tamanho do ficheiro", - "pageOrderPrompt": "Ordem Personalizada de Páginas (Insira uma lista de números de página separados por vírgulas ou Funções como 2n+1):", - "pageSelectionPrompt": "Seleção Personalizada de Páginas (Insira uma lista de números de página separados por vírgulas 1,5,6 ou Funções como 2n+1):", - "goToPage": "Ir", - "true": "Verdadeiro", - "false": "Falso", - "unknown": "Desconhecido", - "save": "Guardar", - "saveToBrowser": "Guardar no Navegador", - "close": "Fechar", - "filesSelected": "ficheiros selecionados", - "noFavourites": "Nenhum favorito adicionado", - "downloadComplete": "Download Concluído", - "bored": "Entediado à espera?", - "alphabet": "Alfabeto", - "downloadPdf": "Transferir PDF", - "text": "Texto", - "font": "Tipo de letra", - "selectFillter": "-- Selecionar --", - "pageNum": "Número da Página", - "sizes": { - "small": "Pequeno", - "medium": "Médio", - "large": "Grande", - "x-large": "Extra Grande" - }, - "error": { - "pdfPassword": "O documento PDF está protegido por palavra-passe e ou não foi fornecida ou está incorreta", - "_value": "Erro", - "sorry": "Pedimos desculpa pelo inconveniente!", - "needHelp": "Precisa de ajuda / Encontrou um problema?", - "contactTip": "Se ainda estiver com problemas, não hesite em contactar-nos para obter ajuda. Pode submeter um ticket na nossa página GitHub ou contactar-nos através do Discord:", - "404": { - "head": "404 - Página Não Encontrada | Ups, tropeçámos no código!", - "1": "Não conseguimos encontrar a página que procura.", - "2": "Algo correu mal" - }, - "github": "Submeter um ticket no GitHub", - "showStack": "Mostrar Rastreamento da Pilha", - "copyStack": "Copiar Rastreamento da Pilha", - "githubSubmit": "GitHub - Submeter um ticket", - "discordSubmit": "Discord - Submeter Publicação de Suporte" - }, - "delete": "Eliminar", - "username": "Nome de utilizador", - "password": "Palavra-passe", - "welcome": "Bem-vindo", - "property": "Propriedade", - "black": "Preto", - "white": "Branco", - "red": "Vermelho", - "green": "Verde", - "blue": "Azul", - "custom": "Personalizar...", - "WorkInProgess": "Trabalho em progresso, pode não funcionar ou ter erros, Por favor reporte quaisquer problemas!", - "poweredBy": "Desenvolvido por", - "yes": "Sim", - "no": "Não", - "changedCredsMessage": "Credenciais alteradas!", - "notAuthenticatedMessage": "Utilizador não autenticado.", - "userNotFoundMessage": "Utilizador não encontrado.", - "incorrectPasswordMessage": "A palavra-passe atual está incorreta.", - "usernameExistsMessage": "O novo nome de utilizador já existe.", - "invalidUsernameMessage": "Nome de utilizador inválido, o nome de utilizador só pode conter letras, números e os seguintes caracteres especiais @._+- ou deve ser um endereço de email válido.", - "invalidPasswordMessage": "A palavra-passe não pode estar vazia e não deve ter espaços no início ou no fim.", - "confirmPasswordErrorMessage": "A Nova Palavra-passe e Confirmar Nova Palavra-passe devem coincidir.", - "deleteCurrentUserMessage": "Não é possível eliminar o utilizador atualmente autenticado.", - "deleteUsernameExistsMessage": "O nome de utilizador não existe e não pode ser eliminado.", - "downgradeCurrentUserMessage": "Não é possível rebaixar a função do utilizador atual", - "disabledCurrentUserMessage": "O utilizador atual não pode ser desativado", - "downgradeCurrentUserLongMessage": "Não é possível rebaixar a função do utilizador atual. Por isso, o utilizador atual não será mostrado.", - "userAlreadyExistsOAuthMessage": "O utilizador já existe como utilizador OAuth2.", - "userAlreadyExistsWebMessage": "O utilizador já existe como utilizador web.", - "oops": "Ups!", - "help": "Ajuda", - "goHomepage": "Ir para a Página Inicial", - "joinDiscord": "Junte-se ao nosso servidor Discord", - "seeDockerHub": "Ver Docker Hub", - "visitGithub": "Visitar Repositório Github", - "donate": "Doar", - "color": "Cor", - "sponsor": "Patrocinar", - "info": "Informação", - "pro": "Pro", - "page": "Página", - "pages": "Páginas", - "loading": "A carregar...", - "addToDoc": "Adicionar ao Documento", - "reset": "Repor", - "apply": "Aplicar", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Política de Privacidade", - "terms": "Termos e Condições", - "accessibility": "Acessibilidade", - "cookie": "Política de Cookies", - "impressum": "Aviso Legal", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Menu Pipeline (Beta)", - "uploadButton": "Carregar Personalizado", - "configureButton": "Configurar", - "defaultOption": "Personalizado", - "submitButton": "Submeter", - "help": "Ajuda Pipeline", - "scanHelp": "Ajuda Digitalização de Pastas", - "deletePrompt": "Tem a certeza que pretende eliminar o pipeline?", - "tags": "automatizar,sequência,script,processamento-lote", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Configuração Pipeline", - "pipelineNameLabel": "Nome Pipeline", - "saveSettings": "Guardar Definições da Operação", - "pipelineNamePrompt": "Insira aqui o nome do pipeline", - "selectOperation": "Selecionar Operação", - "addOperationButton": "Adicionar operação", - "pipelineHeader": "Pipeline:", - "saveButton": "Transferir", - "validateButton": "Validar" - }, - "enterpriseEdition": { - "button": "Atualizar para Pro", - "warning": "Esta funcionalidade está apenas disponível para utilizadores Pro.", - "yamlAdvert": "O Stirling PDF Pro suporta ficheiros de configuração YAML e outras funcionalidades SSO.", - "ssoAdvert": "Procura mais funcionalidades de gestão de utilizadores? Veja o Stirling PDF Pro" - }, - "analytics": { - "title": "Quer tornar o Stirling PDF melhor?", - "paragraph1": "O Stirling PDF tem análises opcionais para nos ajudar a melhorar o produto. Não rastreamos qualquer informação pessoal ou conteúdo de ficheiros.", - "paragraph2": "Por favor considere ativar as análises para ajudar o Stirling-PDF a crescer e permitir-nos compreender melhor os nossos utilizadores.", - "enable": "Ativar análises", - "disable": "Desativar análises", - "settings": "Pode alterar as definições para análises no ficheiro config/settings.yml" - }, - "navbar": { - "favorite": "Favoritos", - "recent": "New and recently updated", - "darkmode": "Modo Escuro", - "language": "Idiomas", - "settings": "Definições", - "allTools": "Ferramentas", - "multiTool": "Multi Ferramentas", - "search": "Pesquisar", - "sections": { - "organize": "Organizar", - "convertTo": "Converter para PDF", - "convertFrom": "Converter de PDF", - "security": "Assinatura & Segurança", - "advance": "Avançado", - "edit": "Ver & Editar", - "popular": "Popular" - } - }, - "settings": { - "title": "Definições", - "update": "Atualização disponível", - "updateAvailable": "{0} é a versão atual instalada. Uma nova versão ({1}) está disponível.", - "appVersion": "Versão da Aplicação:", - "downloadOption": { - "title": "Escolha a opção de download (Para downloads de ficheiro único não zipado):", - "1": "Abrir na mesma janela", - "2": "Abrir em nova janela", - "3": "Transferir ficheiro" - }, - "zipThreshold": "Comprimir ficheiros quando o número de ficheiros transferidos exceder", - "signOut": "Terminar Sessão", - "accountSettings": "Definições de Conta", - "bored": { - "help": "Ativa jogo easter egg" - }, - "cacheInputs": { - "name": "Guardar inputs do formulário", - "help": "Ativar para guardar inputs previamente usados para futuras utilizações" - } - }, - "changeCreds": { - "title": "Alterar Credenciais", - "header": "Atualizar os Detalhes da sua Conta", - "changePassword": "Está a usar credenciais de login padrão. Por favor insira uma nova palavra-passe", - "newUsername": "Novo Nome de Utilizador", - "oldPassword": "Palavra-passe Atual", - "newPassword": "Nova Palavra-passe", - "confirmNewPassword": "Confirmar Nova Palavra-passe", - "submit": "Submeter Alterações" - }, - "account": { - "title": "Definições de Conta", - "accountSettings": "Definições de Conta", - "adminSettings": "Definições de Administrador - Ver e Adicionar Utilizadores", - "userControlSettings": "Definições de Controlo de Utilizador", - "changeUsername": "Alterar Nome de Utilizador", - "newUsername": "Novo Nome de Utilizador", - "password": "Palavra-passe de Confirmação", - "oldPassword": "Palavra-passe antiga", - "newPassword": "Nova Palavra-passe", - "changePassword": "Alterar Palavra-passe", - "confirmNewPassword": "Confirmar Nova Palavra-passe", - "signOut": "Terminar Sessão", - "yourApiKey": "A sua Chave API", - "syncTitle": "Sincronizar definições do navegador com Conta", - "settingsCompare": "Comparação de Definições:", - "property": "Propriedade", - "webBrowserSettings": "Definições do Navegador Web", - "syncToBrowser": "Sincronizar Conta -> Navegador", - "syncToAccount": "Sincronizar Conta <- Navegador" - }, - "adminUserSettings": { - "title": "Definições de Controlo de Utilizador", - "header": "Definições de Controlo de Utilizador Admin", - "admin": "Admin", - "user": "Utilizador", - "addUser": "Adicionar Novo Utilizador", - "deleteUser": "Eliminar Utilizador", - "confirmDeleteUser": "Deve o utilizador ser eliminado?", - "confirmChangeUserStatus": "Deve o utilizador ser desativado/ativado?", - "usernameInfo": "O nome de utilizador só pode conter letras, números e os seguintes caracteres especiais @._+- ou deve ser um endereço de email válido.", - "roles": "Funções", - "role": "Função", - "actions": "Ações", - "apiUser": "Utilizador API Limitado", - "extraApiUser": "Utilizador API Limitado Adicional", - "webOnlyUser": "Utilizador Apenas Web", - "demoUser": "Utilizador Demo (Sem Definições Personalizadas)", - "internalApiUser": "Utilizador API Interno", - "forceChange": "Forçar utilizador a alterar palavra-passe no login", - "submit": "Guardar Utilizador", - "changeUserRole": "Alterar Função do Utilizador", - "authenticated": "Autenticado", - "editOwnProfil": "Editar próprio perfil", - "enabledUser": "utilizador ativado", - "disabledUser": "utilizador desativado", - "activeUsers": "Utilizadores Ativos:", - "disabledUsers": "Utilizadores Desativados:", - "totalUsers": "Total de Utilizadores:", - "lastRequest": "Último Pedido", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Importar/Exportar Base de Dados", - "header": "Importar/Exportar Base de Dados", - "fileName": "Nome do Ficheiro", - "creationDate": "Data de Criação", - "fileSize": "Tamanho do Ficheiro", - "deleteBackupFile": "Eliminar Ficheiro de Backup", - "importBackupFile": "Importar Ficheiro de Backup", - "createBackupFile": "Criar Ficheiro de Backup", - "downloadBackupFile": "Transferir Ficheiro de Backup", - "info_1": "Ao importar dados, é crucial assegurar a estrutura correta. Se não tiver certeza do que está a fazer, procure aconselhamento e suporte de um profissional. Um erro na estrutura pode causar mau funcionamento da aplicação, até à completa impossibilidade de executar a aplicação.", - "info_2": "O nome do ficheiro não importa ao carregar. Será renomeado depois para seguir o formato backup_user_yyyyMMddHHmm.sql, assegurando uma convenção de nomes consistente.", - "submit": "Importar Backup", - "importIntoDatabaseSuccessed": "Importação para base de dados bem sucedida", - "backupCreated": "Backup da base de dados bem sucedido", - "fileNotFound": "Ficheiro não Encontrado", - "fileNullOrEmpty": "O ficheiro não pode ser nulo ou vazio", - "failedImportFile": "Falha ao Importar Ficheiro", - "notSupported": "Esta função não está disponível para a sua ligação à base de dados." - }, - "session": { - "expired": "A sua sessão expirou. Por favor atualize a página e tente novamente.", - "refreshPage": "Atualizar Página" - }, - "home": { - "desc": "O seu centro local para todas as suas necessidades de PDF.", - "searchBar": "Pesquisar funcionalidades...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Ver, anotar, adicionar texto ou imagens" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "Multi Ferramenta PDF", - "desc": "Juntar, Rodar, Reorganizar, Dividir e Remover páginas" - }, - "merge": { - "title": "Juntar", - "desc": "Junte facilmente vários PDFs num só." - }, - "split": { - "title": "Dividir", - "desc": "Dividir PDFs em vários documentos" - }, - "rotate": { - "title": "Rodar", - "desc": "Rode facilmente os seus PDFs." - }, - "imageToPdf": { - "title": "Imagem para PDF", - "desc": "Converter uma imagem (PNG, JPEG, GIF) para PDF." - }, - "pdfToImage": { - "title": "PDF para Imagem", - "desc": "Converter um PDF para uma imagem. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Organizar", - "desc": "Remover/Reorganizar páginas em qualquer ordem" - }, - "addImage": { - "title": "Adicionar imagem", - "desc": "Adiciona uma imagem numa localização definida no PDF" - }, - "watermark": { - "title": "Adicionar Marca de Água", - "desc": "Adicionar uma marca de água personalizada ao seu documento PDF." - }, - "permissions": { - "title": "Alterar Permissões", - "desc": "Alterar as permissões do seu documento PDF" - }, - "removePages": { - "title": "Remover", - "desc": "Eliminar páginas indesejadas do seu documento PDF." - }, - "addPassword": { - "title": "Adicionar Palavra-passe", - "desc": "Encriptar o seu documento PDF com uma palavra-passe." - }, - "removePassword": { - "title": "Remover Palavra-passe", - "desc": "Remover proteção por palavra-passe do seu documento PDF." - }, - "compressPdfs": { - "title": "Comprimir", - "desc": "Comprimir PDFs para reduzir o seu tamanho." - }, - "unlockPDFForms": { - "title": "Desbloquear Formulários do PDF", - "desc": "Remover propriedades de apenas leitura dos formulários de um PDF" - }, - "changeMetadata": { - "title": "Alterar Metadados", - "desc": "Alterar/Remover/Adicionar metadados de um documento PDF" - }, - "fileToPDF": { - "title": "Converter ficheiro para PDF", - "desc": "Converter quase qualquer ficheiro para PDF (DOCX, PNG, XLS, PPT, TXT e mais)" - }, - "ocr": { - "title": "OCR / Limpeza de digitalizações", - "desc": "Limpa digitalizações e deteta texto de imagens dentro de um PDF e readiciona-o como texto." - }, - "extractImages": { - "title": "Extrair Imagens", - "desc": "Extrai todas as imagens de um PDF e guarda-as num zip" - }, - "pdfToPDFA": { - "title": "PDF para PDF/A", - "desc": "Converter PDF para PDF/A para armazenamento a longo prazo" - }, - "PDFToWord": { - "title": "PDF para Word", - "desc": "Converter PDF para formatos Word (DOC, DOCX e ODT)" - }, - "PDFToPresentation": { - "title": "PDF para Apresentação", - "desc": "Converter PDF para formatos de Apresentação (PPT, PPTX e ODP)" - }, - "PDFToText": { - "title": "PDF para RTF (Texto)", - "desc": "Converter PDF para formato Texto ou RTF" - }, - "PDFToHTML": { - "title": "PDF para HTML", - "desc": "Converter PDF para formato HTML" - }, - "PDFToXML": { - "title": "PDF para XML", - "desc": "Converter PDF para formato XML" - }, - "ScannerImageSplit": { - "title": "Detetar/Dividir fotos digitalizadas", - "desc": "Divide múltiplas fotos de dentro de uma foto/PDF" - }, - "sign": { - "title": "Assinar", - "desc": "Adiciona assinatura ao PDF por desenho, texto ou imagem" - }, - "flatten": { - "title": "Achatar", - "desc": "Remover todos os elementos interativos e formulários de um PDF" - }, - "repair": { - "title": "Reparar", - "desc": "Tenta reparar um PDF corrompido/danificado" - }, - "removeBlanks": { - "title": "Remover Páginas em Branco", - "desc": "Deteta e remove páginas em branco de um documento" - }, - "removeAnnotations": { - "title": "Remover Anotações", - "desc": "Remove todos os comentários/anotações de um PDF" - }, - "compare": { - "title": "Comparar", - "desc": "Compara e mostra as diferenças entre 2 Documentos PDF" - }, - "certSign": { - "title": "Assinar com Certificado", - "desc": "Assina um PDF com um Certificado/Chave (PEM/P12)" - }, - "removeCertSign": { - "title": "Remover Assinatura de Certificado", - "desc": "Remove assinatura de certificado do PDF" - }, - "pageLayout": { - "title": "Layout Multi-Página", - "desc": "Juntar múltiplas páginas de um documento PDF numa única página" - }, - "scalePages": { - "title": "Ajustar tamanho/escala de página", - "desc": "Alterar o tamanho/escala de uma página e/ou os seus conteúdos." - }, - "pipeline": { - "title": "Pipeline", - "desc": "Executar múltiplas ações em PDFs definindo scripts pipeline" - }, - "add-page-numbers": { - "title": "Adicionar Números de Página", - "desc": "Adicionar números de página ao longo de um documento numa localização definida" - }, - "auto-rename": { - "title": "Renomear Automaticamente Ficheiro PDF", - "desc": "Renomeia automaticamente um ficheiro PDF baseado no cabeçalho detetado" - }, - "adjust-contrast": { - "title": "Ajustar Cores/Contraste", - "desc": "Ajustar Contraste, Saturação e Brilho de um PDF" - }, - "crop": { - "title": "Recortar PDF", - "desc": "Recortar um PDF para reduzir o seu tamanho (mantém o texto!)" - }, - "autoSplitPDF": { - "title": "Divisão Automática de Páginas", - "desc": "Dividir automaticamente PDF digitalizado com separador de páginas físico com Código QR" - }, - "sanitizePdf": { - "title": "Sanitizar", - "desc": "Remover scripts e outros elementos de ficheiros PDF" - }, - "URLToPDF": { - "title": "URL/Website Para PDF", - "desc": "Converte qualquer URL http(s) para PDF" - }, - "HTMLToPDF": { - "title": "HTML para PDF", - "desc": "Converte qualquer ficheiro HTML ou zip para PDF" - }, - "MarkdownToPDF": { - "title": "Markdown para PDF", - "desc": "Converte qualquer ficheiro Markdown para PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Obter TODA Informação sobre PDF", - "desc": "Obtém qualquer e toda informação possível sobre PDFs" - }, - "extractPage": { - "title": "Extrair página(s)", - "desc": "Extrai páginas selecionadas do PDF" - }, - "PdfToSinglePage": { - "title": "Página Única Grande", - "desc": "Junta todas as páginas do PDF numa única página grande" - }, - "showJS": { - "title": "Mostrar Javascript", - "desc": "Procura e mostra qualquer JS injetado num PDF" - }, - "autoRedact": { - "title": "Redação Automática", - "desc": "Redação Automática (Oculta) texto num PDF baseado em texto de entrada" - }, - "redact": { - "title": "Redação Manual", - "desc": "Redacta um PDF baseado em texto selecionado, formas desenhadas e/ou página(s) selecionada(s)" - }, - "tableExtraxt": { - "title": "PDF para CSV", - "desc": "Extrai Tabelas de um PDF convertendo para CSV" - }, - "autoSizeSplitPDF": { - "title": "Divisão Automática por Tamanho/Contagem", - "desc": "Dividir um único PDF em múltiplos documentos baseado em tamanho, contagem de páginas, ou contagem de documentos" - }, - "overlay-pdfs": { - "title": "Sobrepor PDFs", - "desc": "Sobrepõe PDFs em cima de outro PDF" - }, - "split-by-sections": { - "title": "Dividir PDF por Secções", - "desc": "Divide cada página de um PDF em secções horizontais e verticais mais pequenas" - }, - "AddStampRequest": { - "title": "Adicionar Carimbo a PDF", - "desc": "Adicionar carimbos de texto ou adicionar carimbos de imagem em localizações definidas" - }, - "removeImagePdf": { - "title": "Remover imagem", - "desc": "Remover imagem do PDF para reduzir tamanho do ficheiro" - }, - "splitPdfByChapters": { - "title": "Dividir PDF por Capítulos", - "desc": "Dividir um PDF em múltiplos ficheiros baseado na sua estrutura de capítulos." - }, - "validateSignature": { - "title": "Validar Assinatura PDF", - "desc": "Verificar assinaturas digitais e certificados em documentos PDF" - }, - "replaceColorPdf": { - "title": "Substituir e Inverter Cor", - "desc": "Substituir cor para texto e fundo em PDF e inverter cor completa do pdf para reduzir tamanho do ficheiro" - } - }, - "viewPdf": { - "tags": "ver,ler,anotar,texto,imagem", - "title": "View/Edit PDF", - "header": "Ver PDF" - }, - "multiTool": { - "tags": "Multi Ferramenta,Multi operação,UI,clicar arrastar,front end,lado cliente,interativo,interagível,mover,eliminar,migrar,dividir", - "title": "Multi Ferramenta PDF", - "header": "Multi Ferramenta PDF", - "uploadPrompts": "Nome do Ficheiro", - "selectAll": "Selecionar Tudo", - "deselectAll": "Desselecionar Tudo", - "selectPages": "Selecionar Página", - "selectedPages": "Páginas Selecionadas", - "page": "Página", - "deleteSelected": "Eliminar Selecionadas", - "downloadAll": "Exportar", - "downloadSelected": "Exportar Selecionadas", - "insertPageBreak": "Inserir Quebra de Página", - "addFile": "Adicionar Ficheiro", - "rotateLeft": "Rodar à Esquerda", - "rotateRight": "Rodar à Direita", - "split": "Dividir", - "moveLeft": "Mover à Esquerda", - "moveRight": "Mover à Direita", - "delete": "Eliminar", - "dragDropMessage": "Página(s) Selecionada(s)", - "undo": "Desfazer", - "redo": "Refazer" - }, - "merge": { - "tags": "juntar,Operações de página,Back end,lado servidor", - "title": "Juntar", - "header": "Juntar múltiplos PDFs (2+)", - "sortByName": "Ordenar por nome", - "sortByDate": "Ordenar por data", - "removeCertSign": "Remover assinatura digital no ficheiro junto?", - "submit": "Juntar" - }, - "split": { - "tags": "Operações de página,dividir,Multi Página,cortar,lado servidor", - "title": "Dividir PDF", - "header": "Dividir PDF", - "desc": { - "1": "Os números que seleciona são o número da página onde deseja fazer uma divisão", - "2": "Como tal, selecionar 1,3,7-9 iria dividir um documento de 10 páginas em 6 PDFs separados com:", - "3": "Documento #1: Página 1", - "4": "Documento #2: Páginas 2 e 3", - "5": "Documento #3: Páginas 4, 5, 6, 7", - "6": "Documento #4: Página 8", - "7": "Documento #5: Página 9", - "8": "Documento #6: Página 10" - }, - "splitPages": "Introduza páginas para dividir:", - "submit": "Dividir" - }, - "rotate": { - "tags": "lado servidor", - "title": "Rodar PDF", - "header": "Rodar PDF", - "selectAngle": "Selecione ângulo de rotação (em múltiplos de 90 graus):", - "submit": "Rodar" - }, - "imageToPdf": { - "tags": "conversão,img,jpg,imagem,foto" - }, - "pdfToImage": { - "tags": "conversão,img,jpg,imagem,foto", - "title": "PDF para Imagem", - "header": "PDF para Imagem", - "selectText": "Formato de Imagem", - "singleOrMultiple": "Tipo de resultado da imagem", - "single": "Única Imagem Grande", - "multi": "Múltiplas Imagens", - "colorType": "Tipo de cor", - "color": "Cor", - "grey": "Escala de Cinza", - "blackwhite": "Preto e Branco (Pode perder dados!)", - "submit": "Converter", - "info": "Python não está instalado. Necessário para conversão WebP.", - "placeholder": "(ex. 1,2,8 ou 4,7,12-16 ou 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,par,ímpar,ordenar,mover", - "title": "Organizador de Páginas", - "header": "Organizador de Páginas PDF", - "submit": "Reorganizar Páginas", - "mode": { - "_value": "Modo", - "1": "Ordem de Página Personalizada", - "2": "Ordem Inversa", - "3": "Ordenação Duplex", - "4": "Ordenação em Livro", - "5": "Ordenação em Livro com Costura Lateral", - "6": "Divisão Par-Ímpar", - "7": "Remover Primeira", - "8": "Remover Última", - "9": "Remover Primeira e Última", - "10": "Junção Par-Ímpar", - "11": "Duplicate all pages" - }, - "placeholder": "(ex. 1,3,2 ou 4-8,2,10-12 ou 2n-1)" - }, - "addImage": { - "tags": "img,jpg,imagem,foto", - "title": "Adicionar Imagem", - "header": "Adicionar imagem ao PDF", - "everyPage": "Todas as Páginas?", - "upload": "Adicionar imagem", - "submit": "Adicionar imagem" - }, - "watermark": { - "tags": "Texto,repetindo,etiqueta,próprio,copyright,marca registada,img,jpg,imagem,foto", - "title": "Adicionar Marca de Água", - "header": "Adicionar Marca de Água", - "customColor": "Cor de Texto Personalizada", - "selectText": { - "1": "Selecione PDF para adicionar marca de água:", - "2": "Texto da Marca de Água:", - "3": "Tamanho da Fonte:", - "4": "Rotação (0-360):", - "5": "Espaçador de Largura (Espaço entre cada marca de água horizontalmente):", - "6": "Espaçador de Altura (Espaço entre cada marca de água verticalmente):", - "7": "Opacidade (0% - 100%):", - "8": "Tipo de Marca de Água:", - "9": "Imagem da Marca de Água:", - "10": "Converter PDF para PDF-Imagem" - }, - "submit": "Adicionar Marca de Água", - "type": { - "1": "Texto", - "2": "Imagem" - } - }, - "permissions": { - "tags": "ler,escrever,editar,imprimir", - "title": "Alterar Permissões", - "header": "Alterar Permissões", - "warning": "Aviso para tornar estas permissões inalteráveis é recomendado defini-las com uma palavra-passe através da página adicionar-palavra-passe", - "selectText": { - "1": "Selecione PDF para alterar permissões", - "2": "Permissões a definir", - "3": "Impedir montagem do documento", - "4": "Impedir extração de conteúdo", - "5": "Impedir extração para acessibilidade", - "6": "Impedir preenchimento de formulário", - "7": "Impedir modificação", - "8": "Impedir modificação de anotação", - "9": "Impedir impressão", - "10": "Impedir impressão em diferentes formatos" - }, - "submit": "Alterar" - }, - "removePages": { - "tags": "Remover páginas,eliminar páginas" - }, - "addPassword": { - "tags": "seguro,segurança", - "title": "Adicionar Palavra-passe", - "header": "Adicionar palavra-passe (Encriptar)", - "selectText": { - "1": "Selecione PDF para encriptar", - "2": "Palavra-passe de Utilizador", - "3": "Comprimento da Chave de Encriptação", - "4": "Valores mais altos são mais fortes, mas valores mais baixos têm melhor compatibilidade.", - "5": "Permissões a definir (Recomendado usar junto com palavra-passe de Proprietário)", - "6": "Impedir montagem do documento", - "7": "Impedir extração de conteúdo", - "8": "Impedir extração para acessibilidade", - "9": "Impedir preenchimento de formulário", - "10": "Impedir modificação", - "11": "Impedir modificação de anotação", - "12": "Impedir impressão", - "13": "Impedir impressão em diferentes formatos", - "14": "Palavra-passe de Proprietário", - "15": "Restringe o que pode ser feito com o documento uma vez aberto (Não suportado por todos os leitores)", - "16": "Restringe a abertura do próprio documento" - }, - "submit": "Encriptar" - }, - "removePassword": { - "tags": "seguro,Desencriptar,segurança,sem palavra-passe,eliminar palavra-passe", - "title": "Remover palavra-passe", - "header": "Remover palavra-passe (Desencriptar)", - "selectText": { - "1": "Selecione PDF para Desencriptar", - "2": "Palavra-passe" - }, - "submit": "Remover" - }, - "compressPdfs": { - "tags": "comprimir,pequeno,minúsculo" - }, - "unlockPDFForms": { - "tags": "remover,apagar,formulário,campo,apenas leitura", - "title": "Desbloquear Formulários do PDF", - "header": "Desbloquear Formulários do PDF", - "submit": "Remover" - }, - "changeMetadata": { - "tags": "Título,autor,data,criação,tempo,editor,produtor,estatísticas", - "title": "Título:", - "header": "Alterar Metadados", - "selectText": { - "1": "Por favor edite as variáveis que deseja alterar", - "2": "Eliminar todos os metadados", - "3": "Mostrar Metadados Personalizados:", - "4": "Outros Metadados:", - "5": "Adicionar Entrada de Metadados Personalizada" - }, - "author": "Autor:", - "creationDate": "Data de Criação (aaaa/MM/dd HH:mm:ss):", - "creator": "Criador:", - "keywords": "Palavras-chave:", - "modDate": "Data de Modificação (aaaa/MM/dd HH:mm:ss):", - "producer": "Produtor:", - "subject": "Assunto:", - "trapped": "Capturado:", - "submit": "Alterar" - }, - "fileToPDF": { - "tags": "transformação,formato,documento,imagem,slide,texto,conversão,escritório,docs,word,excel,powerpoint", - "title": "Ficheiro para PDF", - "header": "Converter qualquer ficheiro para PDF", - "credit": "Este serviço usa LibreOffice e Unoconv para conversão de ficheiros.", - "supportedFileTypesInfo": "Tipos de Ficheiro Suportados", - "supportedFileTypes": "Os tipos de ficheiro suportados devem incluir os abaixo, no entanto para uma lista completa atualizada de formatos suportados, por favor consulte a documentação do LibreOffice", - "submit": "Converter para PDF" - }, - "ocr": { - "tags": "reconhecimento,texto,imagem,digitalização,ler,identificar,deteção,editável", - "title": "OCR / Limpeza de digitalizações", - "header": "Limpeza de Digitalizações / OCR (Reconhecimento Ótico de Caracteres)", - "selectText": { - "1": "Selecione idiomas que devem ser detetados dentro do PDF (Os listados são os atualmente detetados):", - "2": "Produzir ficheiro de texto contendo texto OCR junto com o PDF processado com OCR", - "3": "Corrigir páginas que foram digitalizadas num ângulo inclinado rodando-as de volta ao lugar", - "4": "Limpar página para que seja menos provável que o OCR encontre texto em ruído de fundo. (Sem alteração na saída)", - "5": "Limpar página para que seja menos provável que o OCR encontre texto em ruído de fundo, mantém a limpeza na saída.", - "6": "Ignora páginas que têm texto interativo, apenas processa OCR em páginas que são imagens", - "7": "Forçar OCR, irá processar OCR em Cada página removendo todos os elementos de texto originais", - "8": "Normal (Irá dar erro se o PDF contiver texto)", - "9": "Definições Adicionais", - "10": "Modo OCR", - "11": "Remover imagens após OCR (Remove TODAS as imagens, apenas útil se parte do passo de conversão)", - "12": "Tipo de Renderização (Avançado)" - }, - "help": "Por favor leia esta documentação sobre como usar isto para outros idiomas e/ou usar fora do docker", - "credit": "Este serviço usa qpdf e Tesseract para OCR.", - "submit": "Processar PDF com OCR" - }, - "extractImages": { - "tags": "imagem,foto,guardar,arquivo,zip,capturar,extrair", - "title": "Extrair Imagens", - "header": "Extrair Imagens", - "selectText": "Selecione formato de imagem para converter imagens extraídas", - "allowDuplicates": "Guardar imagens duplicadas", - "submit": "Extrair" - }, - "pdfToPDFA": { - "tags": "arquivo,longo prazo,padrão,conversão,armazenamento,preservação", - "title": "PDF Para PDF/A", - "header": "PDF Para PDF/A", - "credit": "Este serviço usa libreoffice para conversão PDF/A", - "submit": "Converter", - "tip": "Atualmente não funciona para múltiplas entradas de uma só vez", - "outputFormat": "Formato de saída", - "pdfWithDigitalSignature": "O PDF contém uma assinatura digital. Esta será removida no próximo passo." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformação,formato,conversão,escritório,microsoft,docfile", - "title": "PDF para Word", - "header": "PDF para Word", - "selectText": { - "1": "Formato do ficheiro de saída" - }, - "credit": "Este serviço usa LibreOffice para conversão de ficheiros.", - "submit": "Converter" - }, - "PDFToPresentation": { - "tags": "slides,apresentação,escritório,microsoft", - "title": "PDF para Apresentação", - "header": "PDF para Apresentação", - "selectText": { - "1": "Formato do ficheiro de saída" - }, - "credit": "Este serviço usa LibreOffice para conversão de ficheiros.", - "submit": "Converter" - }, - "PDFToText": { - "tags": "formato rico,formato texto rico,formato texto rico", - "title": "PDF para RTF (Texto)", - "header": "PDF para RTF (Texto)", - "selectText": { - "1": "Formato do ficheiro de saída" - }, - "credit": "Este serviço usa LibreOffice para conversão de ficheiros.", - "submit": "Converter" - }, - "PDFToHTML": { - "tags": "conteúdo web,compatível com navegador", - "title": "PDF para HTML", - "header": "PDF para HTML", - "credit": "Este serviço usa pdftohtml para conversão de ficheiros.", - "submit": "Converter" - }, - "PDFToXML": { - "tags": "extração-dados,conteúdo-estruturado,interop,transformação,converter", - "title": "PDF para XML", - "header": "PDF para XML", - "credit": "Este serviço usa LibreOffice para conversão de ficheiros.", - "submit": "Converter" - }, - "ScannerImageSplit": { - "tags": "separar,auto-detetar,digitalizações,multi-foto,organizar", - "selectText": { - "1": "Limiar de Ângulo:", - "2": "Define o ângulo absoluto mínimo necessário para a imagem ser rodada (predefinição: 10).", - "3": "Tolerância:", - "4": "Determina o intervalo de variação de cor em torno da cor de fundo estimada (predefinição: 30).", - "5": "Área Mínima:", - "6": "Define o limiar de área mínima para uma foto (predefinição: 10000).", - "7": "Área Mínima de Contorno:", - "8": "Define o limiar de área mínima de contorno para uma foto", - "9": "Tamanho da Borda:", - "10": "Define o tamanho da borda adicionada e removida para prevenir bordas brancas na saída (predefinição: 1)." - }, - "info": "Python não está instalado. É necessário para executar." - }, - "sign": { - "tags": "autorizar,iniciais,assinatura-desenhada,assinatura-texto,assinatura-imagem", - "title": "Assinar", - "header": "Assinar PDFs", - "upload": "Carregar Imagem", - "draw": "Desenhar Assinatura", - "text": "Entrada de Texto", - "clear": "Limpar", - "add": "Adicionar", - "saved": "Assinaturas Guardadas", - "save": "Guardar Assinatura", - "personalSigs": "Assinaturas Pessoais", - "sharedSigs": "Assinaturas Partilhadas", - "noSavedSigs": "Nenhuma assinatura guardada encontrada", - "addToAll": "Adicionar a todas as páginas", - "delete": "Eliminar", - "first": "Primeira página", - "last": "Última página", - "next": "Próxima página", - "previous": "Página anterior", - "maintainRatio": "Alternar manter proporção", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "estático,desativar,não-interativo,otimizar", - "title": "Achatar", - "header": "Achatar PDFs", - "flattenOnlyForms": "Achatar apenas formulários", - "submit": "Achatar" - }, - "repair": { - "tags": "corrigir,restaurar,correção,recuperar", - "title": "Reparar", - "header": "Reparar PDFs", - "submit": "Reparar" - }, - "removeBlanks": { - "tags": "limpeza,otimizar,sem-conteúdo,organizar", - "title": "Remover Páginas em Branco", - "header": "Remover Páginas em Branco", - "threshold": "Limiar de Brancura de Pixel:", - "thresholdDesc": "Limiar para determinar quão branco um pixel branco deve ser para ser classificado como 'Branco'. 0 = Preto, 255 branco puro.", - "whitePercent": "Percentagem de Branco (%):", - "whitePercentDesc": "Percentagem da página que deve ser pixels 'brancos' para ser removida", - "submit": "Remover Páginas em Branco" - }, - "removeAnnotations": { - "tags": "comentários,destaque,notas,marcação,remover", - "title": "Remover Anotações", - "header": "Remover Anotações", - "submit": "Remover" - }, - "compare": { - "tags": "diferenciar,contrastar,alterações,análise", - "title": "Comparar", - "header": "Comparar PDFs", - "highlightColor": { - "1": "Cor de Destaque 1:", - "2": "Cor de Destaque 2:" - }, - "document": { - "1": "Documento 1", - "2": "Documento 2" - }, - "submit": "Comparar", - "complex": { - "message": "Um ou ambos os documentos fornecidos são ficheiros grandes, a precisão da comparação pode ser reduzida" - }, - "large": { - "file": { - "message": "Um ou ambos os documentos fornecidos são demasiado grandes para processar" - } - }, - "no": { - "text": { - "message": "Um ou ambos os PDFs selecionados não têm conteúdo de texto. Por favor escolha PDFs com texto para comparação." - } - } - }, - "certSign": { - "tags": "autenticar,PEM,P12,oficial,encriptar", - "title": "Assinatura de Certificado", - "header": "Assinar um PDF com o seu certificado (Trabalho em progresso)", - "selectPDF": "Selecione um Ficheiro PDF para Assinar:", - "jksNote": "Nota: Se o seu tipo de certificado não estiver listado abaixo, por favor converta-o para um ficheiro Java Keystore (.jks) usando a ferramenta de linha de comando keytool. Depois, escolha a opção de ficheiro .jks abaixo.", - "selectKey": "Selecione o Seu Ficheiro de Chave Privada (formato PKCS#8, pode ser .pem ou .der):", - "selectCert": "Selecione o Seu Ficheiro de Certificado (formato X.509, pode ser .pem ou .der):", - "selectP12": "Selecione o Seu Ficheiro Keystore PKCS#12 (.p12 ou .pfx) (Opcional, Se fornecido, deve conter a sua chave privada e certificado):", - "selectJKS": "Selecione o Seu Ficheiro Java Keystore (.jks ou .keystore):", - "certType": "Tipo de Certificado", - "password": "Introduza a Sua Palavra-passe de Keystore ou Chave Privada (Se Existir):", - "showSig": "Mostrar Assinatura", - "reason": "Razão", - "location": "Localização", - "name": "Nome", - "showLogo": "Mostrar Logo", - "submit": "Assinar PDF" - }, - "removeCertSign": { - "tags": "autenticar,PEM,P12,oficial,desencriptar", - "title": "Remover Assinatura de Certificado", - "header": "Remover o certificado digital do PDF", - "selectPDF": "Selecione um ficheiro PDF:", - "submit": "Remover Assinatura" - }, - "pageLayout": { - "tags": "juntar,composto,vista-única,organizar", - "title": "Layout Multi-Página", - "header": "Layout Multi-Página", - "pagesPerSheet": "Páginas por folha:", - "addBorder": "Adicionar Bordas", - "submit": "Submeter" - }, - "scalePages": { - "tags": "redimensionar,modificar,dimensão,adaptar", - "title": "Ajustar escala de página", - "header": "Ajustar escala de página", - "pageSize": "Tamanho de uma página do documento.", - "keepPageSize": "Tamanho Original", - "scaleFactor": "Nível de zoom (recorte) de uma página.", - "submit": "Submeter" - }, - "add-page-numbers": { - "tags": "paginar,etiqueta,organizar,índice" - }, - "auto-rename": { - "tags": "auto-deteção,baseado-cabeçalho,organizar,reetiquetar", - "title": "Renomear Automático", - "header": "Renomear PDF Automaticamente", - "submit": "Renomear Automático" - }, - "adjust-contrast": { - "tags": "correção-cor,afinar,modificar,melhorar" - }, - "crop": { - "tags": "aparar,encolher,editar,forma", - "title": "Recortar", - "header": "Recortar PDF", - "submit": "Submeter" - }, - "autoSplitPDF": { - "tags": "baseado-QR,separar,segmento-digitalização,organizar", - "title": "Divisão Automática de PDF", - "header": "Divisão Automática de PDF", - "description": "Imprima, Insira, Digitalize, carregue, e deixe-nos separar automaticamente os seus documentos. Sem necessidade de organização manual.", - "selectText": { - "1": "Imprima algumas folhas separadoras abaixo (Preto e branco é suficiente).", - "2": "Digitalize todos os seus documentos de uma vez inserindo a folha separadora entre eles.", - "3": "Carregue o único ficheiro PDF digitalizado grande e deixe o Stirling PDF tratar do resto.", - "4": "As páginas separadoras são automaticamente detetadas e removidas, garantindo um documento final organizado." - }, - "formPrompt": "Submeter PDF contendo separadores de página Stirling-PDF:", - "duplexMode": "Modo Duplex (Digitalização frente e verso)", - "dividerDownload2": "Transferir 'Separador de Divisão Automática (com instruções).pdf'", - "submit": "Submeter" - }, - "sanitizePdf": { - "tags": "limpar,seguro,segurança,remover-ameaças" - }, - "URLToPDF": { - "tags": "captura-web,guardar-página,web-para-doc,arquivo", - "title": "URL Para PDF", - "header": "URL Para PDF", - "submit": "Converter", - "credit": "Usa WeasyPrint" - }, - "HTMLToPDF": { - "tags": "marcação,conteúdo-web,transformação,converter", - "title": "HTML Para PDF", - "header": "HTML Para PDF", - "help": "Aceita ficheiros HTML e ZIPs contendo html/css/imagens etc necessários", - "submit": "Converter", - "credit": "Usa WeasyPrint", - "zoom": "Nível de zoom para mostrar o website.", - "pageWidth": "Largura da página em centímetros. (Em branco para predefinição)", - "pageHeight": "Altura da página em centímetros. (Em branco para predefinição)", - "marginTop": "Margem superior da página em milímetros. (Em branco para predefinição)", - "marginBottom": "Margem inferior da página em milímetros. (Em branco para predefinição)", - "marginLeft": "Margem esquerda da página em milímetros. (Em branco para predefinição)", - "marginRight": "Margem direita da página em milímetros. (Em branco para predefinição)", - "printBackground": "Renderizar o fundo dos websites.", - "defaultHeader": "Ativar Cabeçalho Predefinido (Nome e número de página)", - "cssMediaType": "Alterar o tipo de media CSS da página.", - "none": "Nenhum", - "print": "Imprimir", - "screen": "Ecrã" - }, - "MarkdownToPDF": { - "tags": "marcação,conteúdo-web,transformação,converter", - "title": "Markdown Para PDF", - "header": "Markdown Para PDF", - "submit": "Converter", - "help": "Trabalho em progresso", - "credit": "Usa WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "informação,dados,estatísticas,estatísticas", - "title": "Obter Informação do PDF", - "header": "Obter Informação do PDF", - "submit": "Obter Informação", - "downloadJson": "Transferir JSON" - }, - "extractPage": { - "tags": "extrair" - }, - "PdfToSinglePage": { - "tags": "página única" - }, - "showJS": { - "tags": "JS", - "title": "Mostrar Javascript", - "header": "Mostrar Javascript", - "downloadJS": "Transferir Javascript", - "submit": "Mostrar" - }, - "autoRedact": { - "tags": "Redação,Ocultar,ocultar,preto,marcador,oculto", - "title": "Redação Automática", - "header": "Redação Automática", - "colorLabel": "Cor", - "textsToRedactLabel": "Texto a redactar (separado por linhas)", - "textsToRedactPlaceholder": "ex. \\nConfidencial \\nTop-Secret", - "useRegexLabel": "Usar Regex", - "wholeWordSearchLabel": "Pesquisa de Palavra Completa", - "customPaddingLabel": "Preenchimento Extra Personalizado", - "convertPDFToImageLabel": "Converter PDF para PDF-Imagem (Usado para remover texto por trás da caixa)", - "submitButton": "Submeter" - }, - "redact": { - "tags": "Redação,Ocultar,ocultar,preto,marcador,oculto,manual", - "title": "Redação Manual", - "header": "Redação Manual", - "submit": "Redactar", - "textBasedRedaction": "Redação baseada em Texto", - "pageBasedRedaction": "Redação baseada em Página", - "convertPDFToImageLabel": "Converter PDF para PDF-Imagem (Usado para remover texto por trás da caixa)", - "pageRedactionNumbers": { - "title": "Páginas", - "placeholder": "(ex. 1,2,8 ou 4,7,12-16 ou 2n-1)" - }, - "redactionColor": { - "title": "Cor de Redação" - }, - "export": "Exportar", - "upload": "Carregar", - "boxRedaction": "Redação por desenho de caixa", - "zoom": "Zoom", - "zoomIn": "Aumentar zoom", - "zoomOut": "Diminuir zoom", - "nextPage": "Próxima Página", - "previousPage": "Página Anterior", - "toggleSidebar": "Alternar Barra Lateral", - "showThumbnails": "Mostrar Miniaturas", - "showDocumentOutline": "Mostrar Esquema do Documento (duplo clique para expandir/colapsar todos os itens)", - "showAttatchments": "Mostrar Anexos", - "showLayers": "Mostrar Camadas (duplo clique para repor todas as camadas para o estado predefinido)", - "colourPicker": "Seletor de Cor", - "findCurrentOutlineItem": "Encontrar item atual do esquema", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,Extração de Tabela,extrair,converter" - }, - "autoSizeSplitPDF": { - "tags": "pdf,dividir,documento,organização" - }, - "overlay-pdfs": { - "tags": "Sobrepor", - "header": "Sobrepor Ficheiros PDF", - "baseFile": { - "label": "Selecione Ficheiro PDF Base" - }, - "overlayFiles": { - "label": "Selecione Ficheiros PDF de Sobreposição" - }, - "mode": { - "label": "Selecione Modo de Sobreposição", - "sequential": "Sobreposição Sequencial", - "interleaved": "Sobreposição Intercalada", - "fixedRepeat": "Sobreposição de Repetição Fixa" - }, - "counts": { - "label": "Contagens de Sobreposição (para Modo de Repetição Fixa)", - "placeholder": "Introduza contagens separadas por vírgulas (ex., 2,3,1)" - }, - "position": { - "label": "Selecione Posição de Sobreposição", - "foreground": "Primeiro Plano", - "background": "Plano de Fundo" - }, - "submit": "Submeter" - }, - "split-by-sections": { - "tags": "Dividir Secção, Dividir, Personalizar", - "title": "Dividir PDF por Secções", - "header": "Dividir PDF em Secções", - "horizontal": { - "label": "Divisões Horizontais", - "placeholder": "Introduza número de divisões horizontais" - }, - "vertical": { - "label": "Divisões Verticais", - "placeholder": "Introduza número de divisões verticais" - }, - "submit": "Dividir PDF", - "merge": "Juntar Num Único PDF" - }, - "AddStampRequest": { - "tags": "Carimbo, Adicionar imagem, imagem central, Marca de água, PDF, Incorporar, Personalizar", - "header": "Carimbar PDF", - "title": "Carimbar PDF", - "stampType": "Tipo de Carimbo", - "stampText": "Texto do Carimbo", - "stampImage": "Imagem do Carimbo", - "alphabet": "Alfabeto", - "fontSize": "Tamanho da Fonte/Imagem", - "rotation": "Rotação", - "opacity": "Opacidade", - "position": "Posição", - "overrideX": "Sobrepor Coordenada X", - "overrideY": "Sobrepor Coordenada Y", - "customMargin": "Margem Personalizada", - "customColor": "Cor de Texto Personalizada", - "submit": "Submeter" - }, - "removeImagePdf": { - "tags": "Remover Imagem,operações de página,lado servidor" - }, - "splitPdfByChapters": { - "tags": "dividir,capítulos,marcadores,organizar" - }, - "validateSignature": { - "tags": "assinatura,verificar,validar,pdf,certificado,assinatura digital,Validar Assinatura,Validar certificado", - "title": "Validar Assinaturas PDF", - "header": "Validar Assinaturas Digitais", - "selectPDF": "Selecionar ficheiro PDF assinado", - "submit": "Validar Assinaturas", - "results": "Resultados da Validação", - "status": { - "_value": "Estado", - "valid": "Válida", - "invalid": "Inválida" - }, - "signer": "Assinante", - "date": "Data", - "reason": "Razão", - "location": "Localização", - "noSignatures": "Nenhuma assinatura digital encontrada neste documento", - "chain": { - "invalid": "Falha na validação da cadeia de certificados - não é possível verificar a identidade do assinante" - }, - "trust": { - "invalid": "Certificado não está na loja de confiança - a fonte não pode ser verificada" - }, - "cert": { - "expired": "O certificado expirou", - "revoked": "O certificado foi revogado", - "info": "Detalhes do Certificado", - "issuer": "Emissor", - "subject": "Assunto", - "serialNumber": "Número de Série", - "validFrom": "Válido Desde", - "validUntil": "Válido Até", - "algorithm": "Algoritmo", - "keySize": "Tamanho da Chave", - "version": "Versão", - "keyUsage": "Utilização da Chave", - "selfSigned": "Auto-Assinado", - "bits": "bits" - }, - "signature": { - "info": "Informação da Assinatura", - "_value": "Assinatura", - "mathValid": "A assinatura é matematicamente válida MAS:" - }, - "selectCustomCert": "Ficheiro de Certificado Personalizado X.509 (Opcional)" - }, - "replace-color": { - "title": "Substituir-Inverter-Cor", - "header": "Substituir-Inverter Cor PDF", - "selectText": { - "1": "Opções de Substituir ou Inverter cor", - "2": "Predefinição(Cores de alto contraste predefinidas)", - "3": "Personalizado(Cores personalizadas)", - "4": "Inversão Total(Inverter todas as cores)", - "5": "Opções de cor de alto contraste", - "6": "texto branco em fundo preto", - "7": "Texto preto em fundo branco", - "8": "Texto amarelo em fundo preto", - "9": "Texto verde em fundo preto", - "10": "Escolher cor do texto", - "11": "Escolher cor do fundo" - }, - "submit": "Substituir" - }, - "replaceColorPdf": { - "tags": "Substituir Cor,operações de página,Back end,lado servidor" - }, - "login": { - "title": "Iniciar sessão", - "header": "Iniciar sessão", - "signin": "Iniciar sessão", - "rememberme": "Lembrar-me", - "invalid": "Nome de utilizador ou palavra-passe inválidos.", - "locked": "A sua conta foi bloqueada.", - "signinTitle": "Por favor inicie sessão", - "ssoSignIn": "Login via Single Sign-on", - "oAuth2AutoCreateDisabled": "Criação Automática de Utilizador OAUTH2 Desativada", - "oAuth2AdminBlockedUser": "O registo ou login de utilizadores não registados está atualmente bloqueado. Por favor contacte o administrador.", - "oauth2RequestNotFound": "Pedido de autorização não encontrado", - "oauth2InvalidUserInfoResponse": "Resposta de Informação de Utilizador Inválida", - "oauth2invalidRequest": "Pedido Inválido", - "oauth2AccessDenied": "Acesso Negado", - "oauth2InvalidTokenResponse": "Resposta de Token Inválida", - "oauth2InvalidIdToken": "Token de Id Inválido", - "relyingPartyRegistrationNotFound": "Nenhum registo de relying party encontrado", - "userIsDisabled": "O utilizador está desativado, o login está atualmente bloqueado com este nome de utilizador. Por favor contacte o administrador.", - "alreadyLoggedIn": "Já tem sessão iniciada em", - "alreadyLoggedIn2": "dispositivos. Por favor termine sessão nesses dispositivos e tente novamente.", - "toManySessions": "Tem demasiadas sessões ativas", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF Para Página Única", - "header": "PDF Para Página Única", - "submit": "Converter Para Página Única" - }, - "pageExtracter": { - "title": "Extrair Páginas", - "header": "Extrair Páginas", - "submit": "Extrair", - "placeholder": "(ex. 1,2,8 ou 4,7,12-16 ou 2n-1)" - }, - "sanitizePDF": { - "title": "Sanitizar PDF", - "header": "Sanitizar um ficheiro PDF", - "selectText": { - "1": "Remover ações JavaScript", - "2": "Remover ficheiros incorporados", - "3": "Remove XMP metadata", - "4": "Remover ligações", - "5": "Remover tipos de letra", - "6": "Remove Document Info Metadata" - }, - "submit": "Sanitizar PDF" - }, - "adjustContrast": { - "title": "Ajustar Contraste", - "header": "Ajustar Contraste", - "contrast": "Contraste:", - "brightness": "Brilho:", - "saturation": "Saturação:", - "download": "Transferir" - }, - "compress": { - "title": "Comprimir", - "header": "Comprimir PDF", - "credit": "Este serviço usa qpdf para Compressão/Otimização de PDF.", - "grayscale": { - "label": "Aplicar escala de cinzentos para compressão" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Nível de otimização:", - "4": "Modo automático - Ajusta automaticamente a qualidade para obter o PDF com o tamanho exato", - "5": "Tamanho esperado do PDF (ex. 25MB, 10.8MB, 25KB)" - }, - "submit": "Comprimir" - }, - "decrypt": { - "passwordPrompt": "Este ficheiro está protegido por palavra-passe. Por favor introduza a palavra-passe:", - "cancelled": "Operação cancelada para PDF: {0}", - "noPassword": "Nenhuma palavra-passe fornecida para PDF encriptado: {0}", - "invalidPassword": "Por favor tente novamente com a palavra-passe correta.", - "invalidPasswordHeader": "Palavra-passe incorreta ou encriptação não suportada para PDF: {0}", - "unexpectedError": "Ocorreu um erro ao processar o ficheiro. Por favor tente novamente.", - "serverError": "Erro do servidor ao desencriptar: {0}", - "success": "Ficheiro desencriptado com sucesso." - }, - "multiTool-advert": { - "message": "Esta funcionalidade também está disponível na nossa página multi-ferramenta. Experimente para uma interface melhorada página a página e funcionalidades adicionais!" - }, - "pageRemover": { - "title": "Removedor de Página", - "header": "Removedor de Página PDF", - "pagesToDelete": "Páginas a eliminar (Introduza uma lista de números de página separados por vírgulas):", - "submit": "Eliminar Páginas", - "placeholder": "(ex. 1,2,6 ou 1-10,15-30)" - }, - "imageToPDF": { - "title": "Imagem para PDF", - "header": "Imagem para PDF", - "submit": "Converter", - "selectLabel": "Opções de Ajuste de Imagem", - "fillPage": "Preencher Página", - "fitDocumentToImage": "Ajustar Página à Imagem", - "maintainAspectRatio": "Manter Proporções", - "selectText": { - "2": "Rodar PDF automaticamente", - "3": "Lógica de múltiplos ficheiros (Apenas ativada se trabalhar com múltiplas imagens)", - "4": "Juntar num único PDF", - "5": "Converter para PDFs separados" - } - }, - "PDFToCSV": { - "title": "PDF para CSV", - "header": "PDF para CSV", - "prompt": "Escolha a página para extrair tabela", - "submit": "Extrair" - }, - "split-by-size-or-count": { - "title": "Dividir PDF por Tamanho ou Contagem", - "header": "Dividir PDF por Tamanho ou Contagem", - "type": { - "label": "Selecione Tipo de Divisão", - "size": "Por Tamanho", - "pageCount": "Por Contagem de Páginas", - "docCount": "Por Contagem de Documentos" - }, - "value": { - "label": "Introduzir Valor", - "placeholder": "Introduza tamanho (ex., 2MB ou 3KB) ou contagem (ex., 5)" - }, - "submit": "Submeter" - }, - "printFile": { - "title": "Imprimir Ficheiro", - "header": "Imprimir Ficheiro para Impressora", - "selectText": { - "1": "Selecione Ficheiro para Imprimir", - "2": "Introduza Nome da Impressora" - }, - "submit": "Imprimir" - }, - "licenses": { - "nav": "Licenças", - "title": "Licenças de Terceiros", - "header": "Licenças de Terceiros", - "module": "Módulo", - "version": "Versão", - "license": "Licença" - }, - "survey": { - "nav": "Inquérito", - "title": "Inquérito Stirling-PDF", - "description": "O Stirling-PDF não tem rastreamento por isso queremos ouvir os nossos utilizadores para melhorar o Stirling-PDF!", - "changes": "O Stirling-PDF mudou desde o último inquérito! Para saber mais por favor veja a nossa publicação no blog aqui:", - "changes2": "Com estas mudanças estamos a receber suporte empresarial pago e financiamento", - "please": "Por favor considere participar no nosso inquérito!", - "disabled": "(A janela pop-up do inquérito será desativada nas atualizações seguintes mas estará disponível no rodapé da página)", - "button": "Participar no Inquérito", - "dontShowAgain": "Não mostrar novamente", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Remover imagem", - "header": "Remover imagem", - "removeImage": "Remover imagem", - "submit": "Remover imagem" - }, - "splitByChapters": { - "title": "Dividir PDF por Capítulos", - "header": "Dividir PDF por Capítulos", - "bookmarkLevel": "Nível de Marcador", - "includeMetadata": "Incluir Metadados", - "allowDuplicates": "Permitir Duplicados", - "desc": { - "1": "Esta ferramenta divide um ficheiro PDF em múltiplos PDFs baseado na sua estrutura de capítulos.", - "2": "Nível de Marcador: Escolha o nível de marcadores a usar para dividir (0 para nível superior, 1 para segundo nível, etc.).", - "3": "Incluir Metadados: Se selecionado, os metadados do PDF original serão incluídos em cada PDF dividido.", - "4": "Permitir Duplicados: Se selecionado, permite que múltiplos marcadores na mesma página criem PDFs separados." - }, - "submit": "Dividir PDF" - }, - "fileChooser": { - "click": "Clicar", - "or": "ou", - "dragAndDrop": "Arrastar e Largar", - "dragAndDropPDF": "Arrastar e Largar ficheiro PDF", - "dragAndDropImage": "Arrastar e Largar ficheiro de Imagem", - "hoveredDragAndDrop": "Arrastar e Largar ficheiro(s) aqui", - "extractPDF": "Extraindo..." - }, - "releases": { - "footer": "Lançamentos", - "title": "Notas de Lançamento", - "header": "Notas de Lançamento", - "current": { - "version": "Lançamento Atual" - }, - "note": "Notas de lançamento apenas disponíveis em Inglês" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/ro-RO/translation.json b/frontend/dist/locales/ro-RO/translation.json deleted file mode 100644 index 4e22c0cc3..000000000 --- a/frontend/dist/locales/ro-RO/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Dimensiune Font", - "fontName": "Nume Font", - "title": "Adaugă Numere de Pagină", - "header": "Adaugă Numere de Pagină", - "selectText": { - "1": "Selectează fișierul PDF:", - "2": "Dimensiunea Marginii", - "3": "Poziție", - "4": "Număr de Start", - "5": "Pagini de Numerotat", - "6": "Text Personalizat" - }, - "customTextDesc": "Text Personalizat", - "numberPagesDesc": "Ce pagini să numeroteze, implicit 'toate', acceptă și 1-5 sau 2,5,9 etc", - "customNumberDesc": "Implicit la {n}, acceptă și 'Pagina {n} din {total}', 'Text-{n}', '{nume_fisier}-{n}", - "submit": "Adaugă Numere de Pagină" - }, - "pdfPrompt": "Selectează fișiere PDF", - "multiPdfPrompt": "Selectează mai multe fișiere PDF (2+)", - "multiPdfDropPrompt": "Selectează (sau trage și plasează) toate fișierele PDF de care ai nevoie", - "imgPrompt": "Selectează imagini", - "genericSubmit": "Trimite", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Avertisment: Acest proces poate dura până la un minut în funcție de dimensiunea fișierului", - "pageOrderPrompt": "Ordinea paginilor (Introdu o listă separată prin virgulă de numere de pagină):", - "pageSelectionPrompt": "Selecție Personalizată de Pagini (Introduceți o listă separată prin virgule a numerelor de pagini 1,5,6 sau funcții precum 2n+1) :", - "goToPage": "Mergi la pagină", - "true": "Adevărat", - "false": "Fals", - "unknown": "Necunoscut", - "save": "Salvează", - "saveToBrowser": "Salvează în Browser", - "close": "Închide", - "filesSelected": "fișiere selectate", - "noFavourites": "Niciun favorit adăugat", - "downloadComplete": "Descărcare Completă", - "bored": "Plictisit așteptând?", - "alphabet": "Alfabet", - "downloadPdf": "Descarcă PDF", - "text": "Text", - "font": "Font", - "selectFillter": "-- Selectează --", - "pageNum": "Numărul paginii", - "sizes": { - "small": "Mic", - "medium": "Mediu", - "large": "Mare", - "x-large": "Foarte Mare" - }, - "error": { - "pdfPassword": "Documentul PDF este protejat cu parolă și fie parola nu a fost furnizată, fie a fost incorectă", - "_value": "Eroare", - "sorry": "Ne pare rău pentru problemă!", - "needHelp": "Ai nevoie de ajutor / Ai găsit o problemă?", - "contactTip": "Dacă întâmpini în continuare dificultăți, nu ezita să ne contactezi pentru ajutor. Poți deschide un tichet pe pagina noastră GitHub sau ne poți contacta prin Discord:", - "404": { - "head": "404 - Pagina nu a fost găsită | Ups, ne-am împiedicat în cod!", - "1": "Nu putem găsi pagina pe care o cauți.", - "2": "Ceva nu a mers bine" - }, - "github": "Deschide un tichet pe GitHub", - "showStack": "Arată Urmărirea Stivei", - "copyStack": "Copiază Urmărirea Stivei", - "githubSubmit": "GitHub - Deschide un tichet", - "discordSubmit": "Discord - Trimite o postare de Suport" - }, - "delete": "Șterge", - "username": "Nume de utilizator", - "password": "Parolă", - "welcome": "Bun venit", - "property": "Proprietate", - "black": "Negru", - "white": "Alb", - "red": "Roșu", - "green": "Verde", - "blue": "Albastru", - "custom": "Personalizat...", - "WorkInProgess": "Lucru în curs, S-ar putea să nu funcționeze sau să aibă erori, Vă rugăm să raportați orice probleme!", - "poweredBy": "Propulsat de", - "yes": "Da", - "no": "Nu", - "changedCredsMessage": "Credențialele au fost schimbate!", - "notAuthenticatedMessage": "Utilizatorul nu este autentificat.", - "userNotFoundMessage": "Utilizatorul nu a fost găsit.", - "incorrectPasswordMessage": "Parola curentă este incorectă.", - "usernameExistsMessage": "Noul nume de utilizator există deja.", - "invalidUsernameMessage": "Nume de utilizator invalid, numele de utilizator poate conține doar litere, numere și următoarele caractere speciale @._+- sau trebuie să fie o adresă de email validă.", - "invalidPasswordMessage": "Parola nu trebuie să fie goală și nu trebuie să aibă spații la început sau la sfârșit.", - "confirmPasswordErrorMessage": "Noua Parolă și Confirmarea Noii Parole trebuie să se potrivească.", - "deleteCurrentUserMessage": "Nu se poate șterge utilizatorul conectat în prezent.", - "deleteUsernameExistsMessage": "Numele de utilizator nu există și nu poate fi șters.", - "downgradeCurrentUserMessage": "Rolul utilizatorului curent nu poate fi retrogradat", - "disabledCurrentUserMessage": "Utilizatorul curent nu poate fi dezactivat", - "downgradeCurrentUserLongMessage": "Rolul utilizatorului curent nu poate fi retrogradat. Prin urmare, utilizatorul curent nu va fi afișat.", - "userAlreadyExistsOAuthMessage": "Utilizatorul există deja ca utilizator OAuth2.", - "userAlreadyExistsWebMessage": "Utilizatorul există deja ca utilizator web.", - "oops": "Ups!", - "help": "Ajutor", - "goHomepage": "Mergi la Pagina de Start", - "joinDiscord": "Alătură-te serverului nostru Discord", - "seeDockerHub": "Vezi Docker Hub", - "visitGithub": "Vizitează Depozitul Github", - "donate": "Donează", - "color": "Culoare", - "sponsor": "Sponsor", - "info": "Informații", - "pro": "Pro", - "page": "Page", - "pages": "Pages", - "loading": "Loading...", - "addToDoc": "Add to Document", - "reset": "Reset", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Privacy Policy", - "terms": "Terms and Conditions", - "accessibility": "Accessibility", - "cookie": "Cookie Policy", - "impressum": "Impressum", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Meniu Pipeline (Beta)", - "uploadButton": "Încarcă Personalizat", - "configureButton": "Configurează", - "defaultOption": "Personalizat", - "submitButton": "Trimite", - "help": "Ajutor Pipeline", - "scanHelp": "Ajutor pentru Scanarea Dosarului", - "deletePrompt": "Sigur doriți să ștergeți pipeline-ul", - "tags": "automatizează,secvență,scriptare,procesare-lot", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Configurare Pipeline", - "pipelineNameLabel": "Nume Pipeline", - "saveSettings": "Salvează Setările Operației", - "pipelineNamePrompt": "Introduceți numele pipeline-ului aici", - "selectOperation": "Selectați Operația", - "addOperationButton": "Adaugă operație", - "pipelineHeader": "Pipeline:", - "saveButton": "Descarcă", - "validateButton": "Validează" - }, - "enterpriseEdition": { - "button": "Upgrade to Pro", - "warning": "This feature is only available to Pro users.", - "yamlAdvert": "Stirling PDF Pro supports YAML configuration files and other SSO features.", - "ssoAdvert": "Looking for more user management features? Check out Stirling PDF Pro" - }, - "analytics": { - "title": "Do you want make Stirling PDF better?", - "paragraph1": "Stirling PDF has opt in analytics to help us improve the product. We do not track any personal information or file contents.", - "paragraph2": "Please consider enabling analytics to help Stirling-PDF grow and to allow us to understand our users better.", - "enable": "Enable analytics", - "disable": "Disable analytics", - "settings": "You can change the settings for analytics in the config/settings.yml file" - }, - "navbar": { - "favorite": "Favorite", - "recent": "New and recently updated", - "darkmode": "Mod întunecat", - "language": "Limbi", - "settings": "Setări", - "allTools": "Instrumente", - "multiTool": "Instrumente Multiple", - "search": "Search", - "sections": { - "organize": "Organizează", - "convertTo": "Convertește în PDF", - "convertFrom": "Convertește din PDF", - "security": "Semnează & Securitate", - "advance": "Avansat", - "edit": "Vizualizează & Editează", - "popular": "Popular" - } - }, - "settings": { - "title": "Setări", - "update": "Actualizare disponibilă", - "updateAvailable": "{0} este versiunea instalată curent. O nouă versiune ({1}) este disponibilă.", - "appVersion": "Versiune aplicație:", - "downloadOption": { - "title": "Alege opțiunea de descărcare (pentru descărcarea unui singur fișier non-zip):", - "1": "Deschide în aceeași fereastră", - "2": "Deschide într-o fereastră nouă", - "3": "Descarcă fișierul" - }, - "zipThreshold": "Împachetează fișierele când numărul de fișiere descărcate depășește", - "signOut": "Deconectare", - "accountSettings": "Setări Cont", - "bored": { - "help": "Activează jocul easter egg" - }, - "cacheInputs": { - "name": "Salvează intrările formularului", - "help": "Activează pentru a stoca intrările utilizate anterior pentru rulări viitoare" - } - }, - "changeCreds": { - "title": "Schimbă Credențialele", - "header": "Actualizează Detaliile Contului Tău", - "changePassword": "Utilizezi credențiale de conectare implicite. Te rugăm să introduci o nouă parolă", - "newUsername": "Nume de Utilizator Nou", - "oldPassword": "Parola Curentă", - "newPassword": "Parolă Nouă", - "confirmNewPassword": "Confirmă Parola Nouă", - "submit": "Trimite Modificările" - }, - "account": { - "title": "Setări Cont", - "accountSettings": "Setări Cont", - "adminSettings": "Setări Admin - Vizualizează și Adaugă Utilizatori", - "userControlSettings": "Setări Control Utilizator", - "changeUsername": "Schimbă Numele de Utilizator", - "newUsername": "Nume de Utilizator Nou", - "password": "Parolă de Confirmare", - "oldPassword": "Parola veche", - "newPassword": "Parolă Nouă", - "changePassword": "Schimbă Parola", - "confirmNewPassword": "Confirmă Parola Nouă", - "signOut": "Deconectare", - "yourApiKey": "Cheia ta API", - "syncTitle": "Sincronizează setările browserului cu Contul", - "settingsCompare": "Comparație Setări:", - "property": "Proprietate", - "webBrowserSettings": "Setare Browser Web", - "syncToBrowser": "Sincronizează Cont -> Browser", - "syncToAccount": "Sincronizează Cont <- Browser" - }, - "adminUserSettings": { - "title": "Setări Control Utilizator", - "header": "Setări Control Utilizator Admin", - "admin": "Admin", - "user": "Utilizator", - "addUser": "Adaugă Utilizator Nou", - "deleteUser": "Șterge Utilizator", - "confirmDeleteUser": "Ar trebui șters utilizatorul?", - "confirmChangeUserStatus": "Ar trebui dezactivat/activat utilizatorul?", - "usernameInfo": "Numele de utilizator poate conține doar litere, numere și următoarele caractere speciale @._+- sau trebuie să fie o adresă de email validă.", - "roles": "Roluri", - "role": "Rol", - "actions": "Acțiuni", - "apiUser": "Utilizator API Limitat", - "extraApiUser": "Utilizator API Limitat Suplimentar", - "webOnlyUser": "Utilizator Doar Web", - "demoUser": "Utilizator Demo (Fără setări personalizate)", - "internalApiUser": "Utilizator API Intern", - "forceChange": "Forțează utilizatorul să schimbe parola la conectare", - "submit": "Salvează Utilizator", - "changeUserRole": "Schimbă rolul utilizatorului", - "authenticated": "Autentificat", - "editOwnProfil": "Editează propriul profil", - "enabledUser": "utilizator activat", - "disabledUser": "utilizator dezactivat", - "activeUsers": "Utilizatori Activi:", - "disabledUsers": "Utilizatori Dezactivați:", - "totalUsers": "Total Utilizatori:", - "lastRequest": "Ultima Cerere", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Import/Export Bază de Date", - "header": "Import/Export Bază de Date", - "fileName": "Nume Fișier", - "creationDate": "Data Creării", - "fileSize": "Dimensiune Fișier", - "deleteBackupFile": "Șterge Fișier de Backup", - "importBackupFile": "Importă Fișier de Backup", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Descarcă Fișier de Backup", - "info_1": "Când importați date, este crucial să vă asigurați de structura corectă. Dacă nu sunteți sigur de ceea ce faceți, cereți sfaturi și suport de la un profesionist. O eroare în structură poate cauza defecțiuni ale aplicației, până la incapacitatea completă de a rula aplicația.", - "info_2": "Numele fișierului nu contează la încărcare. Va fi redenumit ulterior pentru a urma formatul backup_user_aaaallzzoomm.sql, asigurând o convenție de denumire consecventă.", - "submit": "Importă Backup", - "importIntoDatabaseSuccessed": "Importul în baza de date a reușit", - "backupCreated": "Database backup successful", - "fileNotFound": "Fișierul nu a fost găsit", - "fileNullOrEmpty": "Fișierul nu trebuie să fie nul sau gol", - "failedImportFile": "Importul Fișierului a Eșuat", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "Your session has expired. Please refresh the page and try again.", - "refreshPage": "Refresh Page" - }, - "home": { - "desc": "Un singur punct de oprire găzduit local pentru toate nevoile tale legate de fișiere PDF.", - "searchBar": "Caută funcționalități...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Vizualizează, adnotează, adaugă text sau imagini" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "Instrument multiplu PDF", - "desc": "Unifică, rotește, rearanjează și elimină pagini" - }, - "merge": { - "title": "Unifică", - "desc": "Unifică cu ușurință mai multe fișiere PDF într-unul singur." - }, - "split": { - "title": "Desparte", - "desc": "Desparte fișierele PDF în mai multe documente." - }, - "rotate": { - "title": "Rotește", - "desc": "Rotește cu ușurință fișierele PDF." - }, - "imageToPdf": { - "title": "Imagine în PDF", - "desc": "Convertește o imagine (PNG, JPEG, GIF) în PDF." - }, - "pdfToImage": { - "title": "PDF în Imagine", - "desc": "Convertește un fișier PDF în imagine (PNG, JPEG, GIF)." - }, - "pdfOrganiser": { - "title": "Organizează", - "desc": "Elimină/rearanjează pagini în orice ordine" - }, - "addImage": { - "title": "Adaugă imagine", - "desc": "Adaugă o imagine într-o locație specifică pe PDF (în curs de dezvoltare)" - }, - "watermark": { - "title": "Adaugă Filigran", - "desc": "Adaugă un filigran personalizat la documentul PDF." - }, - "permissions": { - "title": "Schimbă permisiuni", - "desc": "Schimbă permisiunile documentului PDF" - }, - "removePages": { - "title": "Elimină", - "desc": "Șterge paginile nedorite din documentul PDF." - }, - "addPassword": { - "title": "Adaugă Parolă", - "desc": "Criptează documentul PDF cu o parolă." - }, - "removePassword": { - "title": "Elimină Parola", - "desc": "Elimină protecția cu parolă din documentul PDF." - }, - "compressPdfs": { - "title": "Comprimă", - "desc": "Comprimă fișierele PDF pentru a reduce dimensiunea lor." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Schimbă Metadatele", - "desc": "Schimbă/Elimină/Adaugă metadate într-un document PDF." - }, - "fileToPDF": { - "title": "Convertește fișierul în PDF", - "desc": "Convertește aproape orice fișier în format PDF (DOCX, PNG, XLS, PPT, TXT și altele)." - }, - "ocr": { - "title": "OCR / Curățare scanări", - "desc": "Curăță scanările și detectează textul din imaginile dintr-un PDF și îl adaugă ca text." - }, - "extractImages": { - "title": "Extrage Imagini", - "desc": "Extrage toate imaginile dintr-un PDF și le salvează într-un fișier zip." - }, - "pdfToPDFA": { - "title": "PDF în PDF/A", - "desc": "Convertește un document PDF în format PDF/A pentru stocare pe termen lung." - }, - "PDFToWord": { - "title": "PDF în Word", - "desc": "Convertește un document PDF în formate Word (DOC, DOCX și ODT)." - }, - "PDFToPresentation": { - "title": "PDF în Prezentare", - "desc": "Convertește un document PDF în formate de prezentare (PPT, PPTX și ODP)." - }, - "PDFToText": { - "title": "PDF în Text/RTF", - "desc": "Convertește un document PDF în format Text sau RTF." - }, - "PDFToHTML": { - "title": "PDF în HTML", - "desc": "Convertește un document PDF în format HTML." - }, - "PDFToXML": { - "title": "PDF în XML", - "desc": "Convertește un document PDF în format XML." - }, - "ScannerImageSplit": { - "title": "Detectează/Împarte poze scanate", - "desc": "Împarte mai multe poze dintr-o poză/PDF." - }, - "sign": { - "title": "Semnează", - "desc": "Adaugă o semnătură la documentul PDF prin desenare, text sau imagine." - }, - "flatten": { - "title": "Nivelare", - "desc": "Elimină toate elementele interactive și formularele dintr-un PDF." - }, - "repair": { - "title": "Repară", - "desc": "Încearcă să repare un document PDF corupt/defect." - }, - "removeBlanks": { - "title": "Elimină pagini goale", - "desc": "Detectează și elimină paginile goale dintr-un document." - }, - "removeAnnotations": { - "title": "Elimină Adnotările", - "desc": "Elimină toate comentariile/adnotările dintr-un PDF" - }, - "compare": { - "title": "Compară", - "desc": "Compară și arată diferențele dintre 2 documente PDF." - }, - "certSign": { - "title": "Semnare cu certificat", - "desc": "Semnează un PDF cu un certificat/cheie (PEM/P12)" - }, - "removeCertSign": { - "title": "Elimină Semnătura cu Certificat", - "desc": "Elimină semnătura cu certificat din PDF" - }, - "pageLayout": { - "title": "Aspect Multi-Pagină", - "desc": "Îmbină mai multe pagini ale unui document PDF într-o singură pagină" - }, - "scalePages": { - "title": "Ajustează dimensiunea/scala paginii", - "desc": "Modifică dimensiunea/scala paginii și/sau a conținutului său." - }, - "pipeline": { - "title": "Pipeline (Avansat)", - "desc": "Rulează multiple acțiuni pe PDF-uri definind scripturi pipeline" - }, - "add-page-numbers": { - "title": "Adaugă Numere de Pagină", - "desc": "Adaugă numere de pagină în tot documentul într-o locație setată" - }, - "auto-rename": { - "title": "Redenumire Automată Fișier PDF", - "desc": "Redenumește automat un fișier PDF bazat pe antetul detectat" - }, - "adjust-contrast": { - "title": "Ajustează Culorile/Contrastul", - "desc": "Ajustează Contrastul, Saturația și Luminozitatea unui PDF" - }, - "crop": { - "title": "Decupează PDF", - "desc": "Decupează un PDF pentru a-i reduce dimensiunea (menține textul!)" - }, - "autoSplitPDF": { - "title": "Desparte Automat Paginile", - "desc": "Desparte Automat PDF-ul Scanat cu separator fizic de pagini scanate cu Cod QR" - }, - "sanitizePdf": { - "title": "Igienizează", - "desc": "Elimină scripturile și alte elemente din fișierele PDF" - }, - "URLToPDF": { - "title": "URL/Website în PDF", - "desc": "Convertește orice URL http(s) în PDF" - }, - "HTMLToPDF": { - "title": "HTML în PDF", - "desc": "Convertește orice fișier HTML sau zip în PDF" - }, - "MarkdownToPDF": { - "title": "Markdown în PDF", - "desc": "Convertește orice fișier Markdown în PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Obține TOATE Informațiile despre PDF", - "desc": "Extrage orice și toate informațiile posibile despre PDF-uri" - }, - "extractPage": { - "title": "Extrage pagină(i)", - "desc": "Extrage paginile selectate din PDF" - }, - "PdfToSinglePage": { - "title": "PDF într-o Singură Pagină Mare", - "desc": "Îmbină toate paginile PDF într-o singură pagină mare" - }, - "showJS": { - "title": "Arată Javascript", - "desc": "Caută și afișează orice JS injectat într-un PDF" - }, - "autoRedact": { - "title": "Redactare Automată", - "desc": "Redactează automat (înnegrește) text într-un PDF bazat pe textul de intrare" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF în CSV", - "desc": "Extrage Tabelele dintr-un PDF convertindu-l în CSV" - }, - "autoSizeSplitPDF": { - "title": "Despărțire Automată după Dimensiune/Număr", - "desc": "Împarte un singur PDF în mai multe documente bazat pe dimensiune, număr de pagini sau număr de documente" - }, - "overlay-pdfs": { - "title": "Suprapune PDF-uri", - "desc": "Suprapune PDF-uri peste alt PDF" - }, - "split-by-sections": { - "title": "Împarte PDF pe Secțiuni", - "desc": "Împarte fiecare pagină a unui PDF în secțiuni mai mici orizontale și verticale" - }, - "AddStampRequest": { - "title": "Adaugă Ștampilă la PDF", - "desc": "Adaugă text sau adaugă ștampile imagine în locații setate" - }, - "removeImagePdf": { - "title": "Elimină imagine", - "desc": "Elimină imaginea din PDF pentru a reduce dimensiunea fișierului" - }, - "splitPdfByChapters": { - "title": "Split PDF by Chapters", - "desc": "Split a PDF into multiple files based on its chapter structure." - }, - "validateSignature": { - "title": "Validate PDF Signature", - "desc": "Verify digital signatures and certificates in PDF documents" - }, - "replaceColorPdf": { - "title": "Replace and Invert Color", - "desc": "Replace color for text and background in PDF and invert full color of pdf to reduce file size" - } - }, - "viewPdf": { - "tags": "vizualizare,citește,adnotează,text,imagine", - "title": "View/Edit PDF", - "header": "Vizualizează PDF" - }, - "multiTool": { - "tags": "Instrument Multiplu,Operație multiplă,UI,clic tragere,front end,client side", - "title": "Instrument PDF multiplu", - "header": "Instrument PDF multiplu", - "uploadPrompts": "Nume Fișier", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "selectPages": "Page Select", - "selectedPages": "Selected Pages", - "page": "Page", - "deleteSelected": "Delete Selected", - "downloadAll": "Export", - "downloadSelected": "Export Selected", - "insertPageBreak": "Insert Page Break", - "addFile": "Add File", - "rotateLeft": "Rotate Left", - "rotateRight": "Rotate Right", - "split": "Split", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "Delete", - "dragDropMessage": "Page(s) Selected", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "unificare,Operații pagină,Back end,server side", - "title": "Unire", - "header": "Unirea mai multor PDF-uri (2+)", - "sortByName": "Sortează după nume", - "sortByDate": "Sortează după dată", - "removeCertSign": "Elimină semnătura digitală în fișierul unificat?", - "submit": "Unire" - }, - "split": { - "tags": "Operații pagină,divizare,Pagină Multiplă,tăiere,server side", - "title": "Împarte PDF", - "header": "Împarte PDF", - "desc": { - "1": "Numerele pe care le selectați reprezintă numărul paginii pe care doriți să o împărțiți", - "2": "Prin urmare, selectând 1,3,7-9, un document cu 10 pagini va fi împărțit în 6 PDF-uri separate, astfel:", - "3": "Documentul #1: Pagina 1", - "4": "Documentul #2: Paginile 2 și 3", - "5": "Documentul #3: Paginile 4, 5, 6 și 7", - "6": "Documentul #4: Pagina 8", - "7": "Documentul #5: Pagina 9", - "8": "Documentul #6: Pagina 10" - }, - "splitPages": "Introduceți paginile pe care să le împărțiți:", - "submit": "Împarte" - }, - "rotate": { - "tags": "server side", - "title": "Rotește PDF", - "header": "Rotește PDF", - "selectAngle": "Selectați un unghi de rotație (în multiplicate de 90 de grade):", - "submit": "Rotește" - }, - "imageToPdf": { - "tags": "conversie,img,jpg,poză,fotografie" - }, - "pdfToImage": { - "tags": "conversie,img,jpg,poză,fotografie", - "title": "PDF în Imagine", - "header": "PDF în Imagine", - "selectText": "Format imagine", - "singleOrMultiple": "Tip rezultat imagine", - "single": "O singură imagine mare", - "multi": "Mai multe imagini", - "colorType": "Tip culoare", - "color": "Culoare", - "grey": "Scală de gri", - "blackwhite": "Alb și negru (Poate pierde date!)", - "submit": "Convertește", - "info": "Python nu este instalat. Necesar pentru conversia WebP.", - "placeholder": "(ex. 1,2,8 sau 4,7,12-16 sau 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,par,impar,sortează,mută", - "title": "Organizator de pagini", - "header": "Organizator de pagini PDF", - "submit": "Rearanjați paginile", - "mode": { - "_value": "Mod", - "1": "Ordine Personalizată a Paginilor", - "2": "Ordine Inversă", - "3": "Sortare Duplex", - "4": "Sortare Broșură", - "5": "Sortare Broșură cu Coasere Laterală", - "6": "Separare Impar-Par", - "7": "Elimină Prima", - "8": "Elimină Ultima", - "9": "Elimină Prima și Ultima", - "10": "Îmbinare Impar-Par", - "11": "Duplicate all pages" - }, - "placeholder": "(ex. 1,3,2 sau 4-8,2,10-12 sau 2n-1)" - }, - "addImage": { - "tags": "img,jpg,poză,fotografie", - "title": "Adăugare imagine", - "header": "Adăugare imagine în PDF", - "everyPage": "Pe fiecare pagină?", - "upload": "Adăugare imagine", - "submit": "Adăugare imagine" - }, - "watermark": { - "tags": "Text,repetitiv,etichetă,propriu,drepturi de autor,marcă comercială,img,jpg,poză,fotografie", - "title": "Adaugă Filigran", - "header": "Adaugă Filigran", - "customColor": "Culoare Text Personalizată", - "selectText": { - "1": "Selectează PDF-ul la care să adaugi filigranul:", - "2": "Textul Filigranului:", - "3": "Mărimea fontului:", - "4": "Rotire (0-360):", - "5": "Spațiere lățime (Spațiu între fiecare filigran pe orizontală):", - "6": "Spațiere înălțime (Spațiu între fiecare filigran pe verticală):", - "7": "Opacitate (0% - 100%):", - "8": "Tip Filigran:", - "9": "Imagine Filigran:", - "10": "Convertește PDF în PDF-Imagine" - }, - "submit": "Adaugă Filigran", - "type": { - "1": "Text", - "2": "Imagine" - } - }, - "permissions": { - "tags": "citește,scrie,editează,tipărește", - "title": "Schimbă Permisiunile", - "header": "Schimbă Permisiunile", - "warning": "Pentru a face aceste permisiuni neschimbabile, se recomandă să le setezi cu o parolă prin intermediul paginii de adăugare a parolei", - "selectText": { - "1": "Selectează PDF-ul pentru a schimba permisiunile", - "2": "Permisiunile de setat", - "3": "Previne asamblarea documentului", - "4": "Previne extragerea conținutului", - "5": "Previne extragerea pentru accesibilitate", - "6": "Previne completarea formularului", - "7": "Previne modificarea", - "8": "Previne modificarea adnotărilor", - "9": "Previne tipărirea", - "10": "Previne tipărirea în formate diferite" - }, - "submit": "Schimbă" - }, - "removePages": { - "tags": "Elimină pagini,șterge pagini" - }, - "addPassword": { - "tags": "securizează,securitate", - "title": "Adaugă parolă", - "header": "Adaugă o parolă (Criptare)", - "selectText": { - "1": "Selectează PDF-ul pentru criptare", - "2": "Parolă", - "3": "Lungime cheie de criptare", - "4": "Valori mai mari sunt mai puternice, dar valorile mai mici au o compatibilitate mai bună.", - "5": "Permisiuni de setare", - "6": "Previne asamblarea documentului", - "7": "Previne extragerea conținutului", - "8": "Previne extragerea pentru accesibilitate", - "9": "Previne completarea formularului", - "10": "Previne modificarea", - "11": "Previne modificarea adnotărilor", - "12": "Previne tipărirea", - "13": "Previne tipărirea în formate diferite", - "14": "Parolă Proprietar", - "15": "Restricționează ce se poate face cu documentul odată ce este deschis (Nu este suportat de toate programele de citire)", - "16": "Restricționează deschiderea documentului în sine" - }, - "submit": "Criptează" - }, - "removePassword": { - "tags": "securizează,Decriptează,securitate,elimină parola,șterge parola", - "title": "Elimină parola", - "header": "Elimină parola (Decodifică)", - "selectText": { - "1": "Selectează PDF-ul pentru decodificare", - "2": "Parolă" - }, - "submit": "Elimină" - }, - "compressPdfs": { - "tags": "comprimă,mic,minuscul" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Titlu,autor,dată,creare,timp,editor", - "title": "Titlu:", - "header": "Schimbă Metadatele", - "selectText": { - "1": "Te rugăm să editezi variabilele pe care dorești să le schimbi", - "2": "Șterge toate metadatele", - "3": "Afișează Metadatele Personalizate:", - "4": "Alte Metadate:", - "5": "Adaugă Intrare Metadate Personalizate" - }, - "author": "Autor:", - "creationDate": "Data creării (aaaa/LL/zz OO:mm:ss):", - "creator": "Creator:", - "keywords": "Cuvinte cheie:", - "modDate": "Data modificării (aaaa/LL/zz OO:mm:ss):", - "producer": "Producător:", - "subject": "Subiect:", - "trapped": "Blocat:", - "submit": "Schimbă" - }, - "fileToPDF": { - "tags": "transformare,format,document,poză,diapozitiv,text,conversie,office,docs,word,excel,powerpoint", - "title": "Fișier în PDF", - "header": "Convertiți orice fișier în PDF", - "credit": "Acest serviciu utilizează LibreOffice și Unoconv pentru conversia fișierelor.", - "supportedFileTypesInfo": "Tipuri de fișiere suportate", - "supportedFileTypes": "Tipurile de fișiere suportate ar trebui să includă cele de mai jos. Pentru o listă completă și actualizată a formatelor suportate, consultați documentația LibreOffice.", - "submit": "Convertiți în PDF" - }, - "ocr": { - "tags": "recunoaștere,text,imagine,scanare,citește,identifică,detectare,editabil", - "title": "OCR / Curățare scanare", - "header": "Curățare scanări / OCR (Recunoaștere optică a caracterelor)", - "selectText": { - "1": "Selectați limbile care trebuie detectate în PDF (Cele listate sunt cele detectate în prezent):", - "2": "Produceți un fișier text care conține textul OCR împreună cu PDF-ul OCR", - "3": "Corectați paginile care au fost scanate în unghi înclinat prin rotirea lor în poziție corectă", - "4": "Curățați pagina astfel încât să fie mai puțin probabil ca OCR-ul să găsească text în zgomotul de fundal. (Nu se schimbă rezultatul)", - "5": "Curățați pagina astfel încât să fie mai puțin probabil ca OCR-ul să găsească text în zgomotul de fundal, menține curățarea în rezultat.", - "6": "Ignorați paginile care conțin text interactiv, OCR-ul se aplică doar paginilor care sunt imagini", - "7": "Forțează OCR-ul, va aplica OCR pe fiecare pagină, înlăturând toate elementele de text originale", - "8": "Normal (Va genera eroare dacă PDF-ul conține text)", - "9": "Setări suplimentare", - "10": "Mod OCR", - "11": "Elimină imaginile după OCR (Elimină TOATE imaginile, util doar în etapa de conversie)", - "12": "Tip de redare (Avansat)" - }, - "help": "Citiți documentația pentru a afla cum să utilizați acest serviciu pentru alte limbi și/sau în afara mediului Docker", - "credit": "Acest serviciu utilizează qpdf și Tesseract pentru OCR.", - "submit": "Procesează PDF-ul cu OCR" - }, - "extractImages": { - "tags": "poză,fotografie,salvează,arhivă,zip,captură,extrage", - "title": "Extrage Imagini", - "header": "Extrage Imagini", - "selectText": "Selectați formatul imaginii în care să se convertească imaginile extrase", - "allowDuplicates": "Salvează imaginile duplicate", - "submit": "Extrage" - }, - "pdfToPDFA": { - "tags": "arhivă,termen-lung,standard,conversie,stocare,conservare", - "title": "PDF către PDF/A", - "header": "PDF către PDF/A", - "credit": "Acest serviciu utilizează libreoffice pentru conversia în PDF/A", - "submit": "Convertește", - "tip": "În prezent nu funcționează pentru mai multe intrări simultan", - "outputFormat": "Format de ieșire", - "pdfWithDigitalSignature": "PDF-ul conține o semnătură digitală. Aceasta va fi eliminată în pasul următor." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformare,format,conversie,office,microsoft,fișier doc", - "title": "PDF către Word", - "header": "PDF către Word", - "selectText": { - "1": "Format fișier de ieșire" - }, - "credit": "Acest serviciu utilizează LibreOffice pentru conversia fișierului.", - "submit": "Convertește" - }, - "PDFToPresentation": { - "tags": "diapozitive,prezentare,office,microsoft", - "title": "PDF către Prezentare", - "header": "PDF către Prezentare", - "selectText": { - "1": "Format fișier de ieșire" - }, - "credit": "Acest serviciu utilizează LibreOffice pentru conversia fișierului.", - "submit": "Convertește" - }, - "PDFToText": { - "tags": "format bogat,format text bogat,format text îmbogățit", - "title": "PDF către Text/RTF", - "header": "PDF către Text/RTF", - "selectText": { - "1": "Format fișier de ieșire" - }, - "credit": "Acest serviciu utilizează LibreOffice pentru conversia fișierului.", - "submit": "Convertește" - }, - "PDFToHTML": { - "tags": "conținut web,compatibil cu browser", - "title": "PDF către HTML", - "header": "PDF către HTML", - "credit": "Acest serviciu utilizează pdftohtml pentru conversia fișierului.", - "submit": "Convertește" - }, - "PDFToXML": { - "tags": "extragere-date,conținut-structurat,interoperabilitate,transformare,convertește", - "title": "PDF către XML", - "header": "PDF către XML", - "credit": "Acest serviciu utilizează LibreOffice pentru conversia fișierului.", - "submit": "Convertește" - }, - "ScannerImageSplit": { - "tags": "separă,auto-detectare,scanări,multi-foto,organizează", - "selectText": { - "1": "Prag unghi:", - "2": "Stabilește unghiul absolut minim necesar pentru ca imaginea să fie rotită (implicit: 5).", - "3": "Toleranță:", - "4": "Determină intervalul de variație a culorii în jurul culorii de fundal estimate (implicit: 20).", - "5": "Arie minimă:", - "6": "Stabilește pragul minim de arie pentru o fotografie (implicit: 8000).", - "7": "Arie minimă a conturului:", - "8": "Stabilește pragul minim de arie a conturului pentru o fotografie.", - "9": "Mărimea marginii:", - "10": "Stabilește mărimea marginii adăugate și eliminate pentru a evita marginile albe în rezultat (implicit: 1)." - }, - "info": "Python nu este instalat. Este necesar pentru a rula." - }, - "sign": { - "tags": "autorizează,inițiale,semnătură-desenată,semnătură-text,semnătură-imagine", - "title": "Semnează", - "header": "Semnează documente PDF", - "upload": "Încarcă Imaginea", - "draw": "Desenează Semnătura", - "text": "Introdu Textul", - "clear": "Curăță", - "add": "Adaugă", - "saved": "Saved Signatures", - "save": "Save Signature", - "personalSigs": "Personal Signatures", - "sharedSigs": "Shared Signatures", - "noSavedSigs": "No saved signatures found", - "addToAll": "Add to all pages", - "delete": "Delete", - "first": "First page", - "last": "Last page", - "next": "Next page", - "previous": "Previous page", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "static,dezactivează,non-interactiv,simplifică", - "title": "Nivelare", - "header": "Nivelează documente PDF", - "flattenOnlyForms": "Nivelează doar formularele", - "submit": "Nivelează" - }, - "repair": { - "tags": "repară,restaurează,corectare,recuperează", - "title": "Repară", - "header": "Repară documente PDF", - "submit": "Repară" - }, - "removeBlanks": { - "tags": "curățare,simplificare,fără-conținut,organizează", - "title": "Elimină pagini goale", - "header": "Elimină pagini goale", - "threshold": "Prag:", - "thresholdDesc": "Prag pentru determinarea cât de alb trebuie să fie un pixel alb", - "whitePercent": "Procent alb (%):", - "whitePercentDesc": "Procentul paginii care trebuie să fie alb pentru a fi eliminată", - "submit": "Elimină pagini goale" - }, - "removeAnnotations": { - "tags": "comentarii,evidențiere,note,marcaje,elimină", - "title": "Elimină Adnotările", - "header": "Elimină Adnotările", - "submit": "Elimină" - }, - "compare": { - "tags": "diferențiază,contrastează,modificări,analiză", - "title": "Compară", - "header": "Compară PDF-uri", - "highlightColor": { - "1": "Culoare Evidențiere 1:", - "2": "Culoare Evidențiere 2:" - }, - "document": { - "1": "Documentul 1", - "2": "Documentul 2" - }, - "submit": "Compară", - "complex": { - "message": "One or both of the provided documents are large files, accuracy of comparison may be reduced" - }, - "large": { - "file": { - "message": "One or Both of the provided documents are too large to process" - } - }, - "no": { - "text": { - "message": "One or both of the selected PDFs have no text content. Please choose PDFs with text for comparison." - } - } - }, - "certSign": { - "tags": "autentifică,PEM,P12,oficial,criptează", - "title": "Semnare certificat", - "header": "Semnează un fișier PDF cu certificatul tău (În curs de desfășurare)", - "selectPDF": "Selectează un fișier PDF pentru semnare:", - "jksNote": "Notă: Dacă tipul certificatului tău nu este listat mai jos, te rugăm să-l convertești într-un fișier Java Keystore (.jks) folosind instrumentul de linie de comandă keytool. Apoi, alege opțiunea fișier .jks de mai jos.", - "selectKey": "Selectează fișierul cheie privată (format PKCS#8, poate fi .pem sau .der):", - "selectCert": "Selectează fișierul de certificat (format X.509, poate fi .pem sau .der):", - "selectP12": "Selectează fișierul de stocare cheie PKCS#12 (.p12 sau .pfx) (Opțional, dacă este furnizat, ar trebui să conțină cheia privată și certificatul tău):", - "selectJKS": "Selectează Fișierul Java Keystore (.jks sau .keystore):", - "certType": "Tipul certificatului", - "password": "Introdu parola pentru stocarea cheie sau cheia privată (dacă există):", - "showSig": "Afișează semnătura", - "reason": "Motivul", - "location": "Locația", - "name": "Numele", - "showLogo": "Show Logo", - "submit": "Semnează PDF" - }, - "removeCertSign": { - "tags": "autentifică,PEM,P12,oficial,decriptează", - "title": "Elimină Semnătura cu Certificat", - "header": "Elimină certificatul digital din PDF", - "selectPDF": "Selectează un fișier PDF:", - "submit": "Elimină Semnătura" - }, - "pageLayout": { - "tags": "îmbină,compozit,vizualizare-unică,organizează", - "title": "Aspect Multi-Pagină", - "header": "Aspect Multi-Pagină", - "pagesPerSheet": "Pagini per foaie:", - "addBorder": "Adaugă Borduri", - "submit": "Trimite" - }, - "scalePages": { - "tags": "redimensionează,modifică,dimensiune,adaptează", - "title": "Ajustează scala paginii", - "header": "Ajustează scala paginii", - "pageSize": "Dimensiunea unei pagini a documentului.", - "keepPageSize": "Original Size", - "scaleFactor": "Nivel de zoom (decupare) al unei pagini.", - "submit": "Trimite" - }, - "add-page-numbers": { - "tags": "paginează,etichetează,organizează,indexează" - }, - "auto-rename": { - "tags": "auto-detectare,bazat-pe-antet,organizează,reetichetează", - "title": "Redenumire Automată", - "header": "Redenumire Automată PDF", - "submit": "Redenumire Automată" - }, - "adjust-contrast": { - "tags": "corectare-culoare,reglează,modifică,îmbunătățește" - }, - "crop": { - "tags": "taie,micșorează,editează,formă", - "title": "Decupează", - "header": "Decupează PDF", - "submit": "Trimite" - }, - "autoSplitPDF": { - "tags": "bazat-pe-QR,separă,segment-scanat,organizează", - "title": "Împarte Automat PDF", - "header": "Împarte Automat PDF", - "description": "Tipărește, Inserează, Scanează, încarcă și lasă-ne să separăm automat documentele tale. Fără muncă manuală de sortare necesară.", - "selectText": { - "1": "Tipărește câteva foi separatoare de mai jos (Alb-negru este suficient).", - "2": "Scanează toate documentele tale o dată inserând foaia separatoare între ele.", - "3": "Încarcă fișierul PDF scanat mare și lasă Stirling PDF să se ocupe de rest.", - "4": "Paginile separatoare sunt detectate automat și eliminate, garantând un document final ordonat." - }, - "formPrompt": "Trimite PDF-ul conținând separatoarele de pagini Stirling-PDF:", - "duplexMode": "Mod Duplex (Scanare față-verso)", - "dividerDownload2": "Descarcă 'Separator Auto Splitter (cu instrucțiuni).pdf'", - "submit": "Trimite" - }, - "sanitizePdf": { - "tags": "curăță,securizează,sigur,elimină-amenințări" - }, - "URLToPDF": { - "tags": "captură-web,salvează-pagina,web-în-document,arhivează", - "title": "URL în PDF", - "header": "URL în PDF", - "submit": "Convertește", - "credit": "Folosește WeasyPrint" - }, - "HTMLToPDF": { - "tags": "markup,conținut-web,transformare,convertește", - "title": "HTML în PDF", - "header": "HTML în PDF", - "help": "Acceptă fișiere HTML și ZIP-uri care conțin html/css/imagini etc. necesare", - "submit": "Convertește", - "credit": "Folosește WeasyPrint", - "zoom": "Nivel de zoom pentru afișarea site-ului web.", - "pageWidth": "Lățimea paginii în centimetri. (Gol pentru implicit)", - "pageHeight": "Înălțimea paginii în centimetri. (Gol pentru implicit)", - "marginTop": "Marginea de sus a paginii în milimetri. (Gol pentru implicit)", - "marginBottom": "Marginea de jos a paginii în milimetri. (Gol pentru implicit)", - "marginLeft": "Marginea din stânga a paginii în milimetri. (Gol pentru implicit)", - "marginRight": "Marginea din dreapta a paginii în milimetri. (Gol pentru implicit)", - "printBackground": "Redă fundalul site-urilor web.", - "defaultHeader": "Activează Antetul Implicit (Nume și număr de pagină)", - "cssMediaType": "Schimbă tipul de media CSS al paginii.", - "none": "Niciunul", - "print": "Tipărire", - "screen": "Ecran" - }, - "MarkdownToPDF": { - "tags": "markup,conținut-web,transformare,convertește", - "title": "Markdown în PDF", - "header": "Markdown în PDF", - "submit": "Convertește", - "help": "Lucrare în curs", - "credit": "Folosește WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "informații,date,statistici,statistici", - "title": "Obține Informații despre PDF", - "header": "Obține Informații despre PDF", - "submit": "Obține Informații", - "downloadJson": "Descarcă JSON" - }, - "extractPage": { - "tags": "extrage" - }, - "PdfToSinglePage": { - "tags": "pagină unică" - }, - "showJS": { - "tags": "JS", - "title": "Arată Javascript", - "header": "Arată Javascript", - "downloadJS": "Descarcă Javascript", - "submit": "Arată" - }, - "autoRedact": { - "tags": "Redactează,Ascunde,înnegrește,negru,marker,ascuns", - "title": "Redactare Automată", - "header": "Redactare Automată", - "colorLabel": "Culoare", - "textsToRedactLabel": "Text de Redactat (separat pe linii)", - "textsToRedactPlaceholder": "ex. \\nConfidențial \\nSecret de Serviciu", - "useRegexLabel": "Folosește Regex", - "wholeWordSearchLabel": "Căutare Cuvânt Întreg", - "customPaddingLabel": "Spațiere Suplimentară Personalizată", - "convertPDFToImageLabel": "Convertește PDF în PDF-Imagine (Folosit pentru a elimina textul din spatele casetei)", - "submitButton": "Trimite" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,Extragere Tabel,extrage,convertește" - }, - "autoSizeSplitPDF": { - "tags": "pdf,împarte,document,organizare" - }, - "overlay-pdfs": { - "tags": "Suprapune", - "header": "Suprapune Fișiere PDF", - "baseFile": { - "label": "Selectează Fișierul PDF de Bază" - }, - "overlayFiles": { - "label": "Selectează Fișierele PDF de Suprapus" - }, - "mode": { - "label": "Selectează Modul de Suprapunere", - "sequential": "Suprapunere Secvențială", - "interleaved": "Suprapunere Intercalată", - "fixedRepeat": "Suprapunere cu Repetare Fixă" - }, - "counts": { - "label": "Numere de Suprapunere (pentru Modul de Repetare Fixă)", - "placeholder": "Introdu numere separate prin virgulă (ex. 2,3,1)" - }, - "position": { - "label": "Selectează Poziția de Suprapunere", - "foreground": "Prim-plan", - "background": "Fundal" - }, - "submit": "Trimite" - }, - "split-by-sections": { - "tags": "Împărțire pe Secțiuni, Divizează, Personalizează", - "title": "Împarte PDF în Secțiuni", - "header": "Împarte PDF în Secțiuni", - "horizontal": { - "label": "Diviziuni Orizontale", - "placeholder": "Introdu numărul de diviziuni orizontale" - }, - "vertical": { - "label": "Diviziuni Verticale", - "placeholder": "Introdu numărul de diviziuni verticale" - }, - "submit": "Împarte PDF", - "merge": "Îmbină Într-un Singur PDF" - }, - "AddStampRequest": { - "tags": "Ștampilă, Adaugă imagine, centrează imagine, Filigran, PDF, Încorporează, Personalizează", - "header": "Ștampilează PDF", - "title": "Ștampilează PDF", - "stampType": "Tip Ștampilă", - "stampText": "Text Ștampilă", - "stampImage": "Imagine Ștampilă", - "alphabet": "Alfabet", - "fontSize": "Dimensiune Font/Imagine", - "rotation": "Rotație", - "opacity": "Opacitate", - "position": "Poziție", - "overrideX": "Suprascrie Coordonata X", - "overrideY": "Suprascrie Coordonata Y", - "customMargin": "Margine Personalizată", - "customColor": "Culoare Text Personalizată", - "submit": "Trimite" - }, - "removeImagePdf": { - "tags": "Elimină Imagine,Operații pagină,Back end,server side" - }, - "splitPdfByChapters": { - "tags": "split,chapters,bookmarks,organize" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "Validate PDF Signatures", - "header": "Validate Digital Signatures", - "selectPDF": "Select signed PDF file", - "submit": "Validate Signatures", - "results": "Validation Results", - "status": { - "_value": "Status", - "valid": "Valid", - "invalid": "Invalid" - }, - "signer": "Signer", - "date": "Date", - "reason": "Reason", - "location": "Location", - "noSignatures": "No digital signatures found in this document", - "chain": { - "invalid": "Certificate chain validation failed - cannot verify signer's identity" - }, - "trust": { - "invalid": "Certificate not in trust store - source cannot be verified" - }, - "cert": { - "expired": "Certificate has expired", - "revoked": "Certificate has been revoked", - "info": "Certificate Details", - "issuer": "Issuer", - "subject": "Subject", - "serialNumber": "Serial Number", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "algorithm": "Algorithm", - "keySize": "Key Size", - "version": "Version", - "keyUsage": "Key Usage", - "selfSigned": "Self-Signed", - "bits": "bits" - }, - "signature": { - "info": "Signature Information", - "_value": "Signature", - "mathValid": "Signature is mathematically valid BUT:" - }, - "selectCustomCert": "Custom Certificate File X.509 (Optional)" - }, - "replace-color": { - "title": "Replace-Invert-Color", - "header": "Replace-Invert Color PDF", - "selectText": { - "1": "Replace or Invert color Options", - "2": "Default(Default high contrast colors)", - "3": "Custom(Customized colors)", - "4": "Full-Invert(Invert all colors)", - "5": "High contrast color options", - "6": "white text on black background", - "7": "Black text on white background", - "8": "Yellow text on black background", - "9": "Green text on black background", - "10": "Choose text Color", - "11": "Choose background Color" - }, - "submit": "Replace" - }, - "replaceColorPdf": { - "tags": "Replace Color,Page operations,Back end,server side" - }, - "login": { - "title": "Autentificare", - "header": "Autentificare", - "signin": "Autentificare", - "rememberme": "Ține-mă minte", - "invalid": "Nume de utilizator sau parolă invalidă.", - "locked": "Contul tău a fost blocat.", - "signinTitle": "Te rugăm să te autentifici", - "ssoSignIn": "Conectare prin conectare unică", - "oAuth2AutoCreateDisabled": "OAUTH2 Creare automată utilizator dezactivată", - "oAuth2AdminBlockedUser": "Înregistrarea sau conectarea utilizatorilor neînregistrați este în prezent blocată. Te rugăm să contactezi administratorul.", - "oauth2RequestNotFound": "Cererea de autorizare nu a fost găsită", - "oauth2InvalidUserInfoResponse": "Răspuns Invalid la Informațiile Utilizatorului", - "oauth2invalidRequest": "Cerere Invalidă", - "oauth2AccessDenied": "Acces Refuzat", - "oauth2InvalidTokenResponse": "Răspuns Invalid la Token", - "oauth2InvalidIdToken": "Token de Id Invalid", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "Utilizatorul este dezactivat, conectarea este în prezent blocată cu acest nume de utilizator. Te rugăm să contactezi administratorul.", - "alreadyLoggedIn": "You are already logged in to", - "alreadyLoggedIn2": "devices. Please log out of the devices and try again.", - "toManySessions": "You have too many active sessions", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF într-o Singură Pagină", - "header": "PDF într-o Singură Pagină", - "submit": "Convertește într-o Singură Pagină" - }, - "pageExtracter": { - "title": "Extrage Pagini", - "header": "Extrage Pagini", - "submit": "Extrage", - "placeholder": "(ex. 1,2,8 sau 4,7,12-16 sau 2n-1)" - }, - "sanitizePDF": { - "title": "Igienizează PDF", - "header": "Igienizează un fișier PDF", - "selectText": { - "1": "Elimină acțiunile JavaScript", - "2": "Elimină fișierele încorporate", - "3": "Remove XMP metadata", - "4": "Elimină link-urile", - "5": "Elimină fonturile", - "6": "Remove Document Info Metadata" - }, - "submit": "Igienizează PDF" - }, - "adjustContrast": { - "title": "Ajustează Contrastul", - "header": "Ajustează Contrastul", - "contrast": "Contrast:", - "brightness": "Luminozitate:", - "saturation": "Saturație:", - "download": "Descarcă" - }, - "compress": { - "title": "Comprimare", - "header": "Comprimare PDF", - "credit": "Acest serviciu utilizează qpdf pentru comprimarea/optimizarea PDF-urilor.", - "grayscale": { - "label": "Aplicare scală de gri pentru compresie" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Nivel de optimizare:", - "4": "Mod automat - ajustează automat calitatea pentru a aduce PDF-ul la dimensiunea exactă", - "5": "Dimensiunea PDF așteptată (de ex. 25MB, 10.8MB, 25KB)" - }, - "submit": "Comprimare" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "This feature is also available in our multi-tool page. Check it out for enhanced page-by-page UI and additional features!" - }, - "pageRemover": { - "title": "Înlăturare pagini", - "header": "Înlăturare pagini din PDF", - "pagesToDelete": "Pagini de șters (Introduceți o listă de numere de pagini separate prin virgulă):", - "submit": "Ștergere pagini", - "placeholder": "(ex. 1,2,6 sau 1-10,15-30)" - }, - "imageToPDF": { - "title": "Imagine în PDF", - "header": "Imagine în PDF", - "submit": "Convertește", - "selectLabel": "Opțiuni de Potrivire a Imaginii", - "fillPage": "Umple Pagina", - "fitDocumentToImage": "Potrivește Pagina la Imagine", - "maintainAspectRatio": "Menține Raportul de Aspect", - "selectText": { - "2": "Rotire automată a PDF-ului", - "3": "Logica pentru mai multe fișiere (activată numai dacă se lucrează cu mai multe imagini)", - "4": "Unifică într-un singur PDF", - "5": "Convertește în PDF-uri separate" - } - }, - "PDFToCSV": { - "title": "PDF în CSV", - "header": "PDF în CSV", - "prompt": "Alege pagina pentru extragerea tabelului", - "submit": "Extrage" - }, - "split-by-size-or-count": { - "title": "Împarte PDF după Dimensiune sau Număr", - "header": "Împarte PDF după Dimensiune sau Număr", - "type": { - "label": "Selectează Tipul de Împărțire", - "size": "După Dimensiune", - "pageCount": "După Număr de Pagini", - "docCount": "După Număr de Documente" - }, - "value": { - "label": "Introdu Valoarea", - "placeholder": "Introdu dimensiunea (ex. 2MB sau 3KB) sau numărul (ex. 5)" - }, - "submit": "Trimite" - }, - "printFile": { - "title": "Tipărește Fișier", - "header": "Tipărește Fișier la Imprimantă", - "selectText": { - "1": "Selectează Fișierul de Tipărit", - "2": "Introdu Numele Imprimantei" - }, - "submit": "Tipărește" - }, - "licenses": { - "nav": "Licențe", - "title": "Licențe Terțe Părți", - "header": "Licențe Terțe Părți", - "module": "Modul", - "version": "Versiune", - "license": "Licență" - }, - "survey": { - "nav": "Sondaj", - "title": "Sondaj Stirling-PDF", - "description": "Stirling-PDF nu are urmărire, așa că vrem să auzim de la utilizatorii noștri pentru a îmbunătăți Stirling-PDF!", - "changes": "Stirling-PDF has changed since the last survey! To find out more please check our blog post here:", - "changes2": "With these changes we are getting paid business support and funding", - "please": "Te rugăm să iei în considerare completarea sondajului nostru!", - "disabled": "(Fereastra pop-up a sondajului va fi dezactivată în următoarele actualizări, dar va fi disponibilă în subsolul paginii)", - "button": "Completează Sondajul", - "dontShowAgain": "Nu mai arăta din nou", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Elimină imagine", - "header": "Elimină imagine", - "removeImage": "Elimină imagine", - "submit": "Elimină imagine" - }, - "splitByChapters": { - "title": "Split PDF by Chapters", - "header": "Split PDF by Chapters", - "bookmarkLevel": "Bookmark Level", - "includeMetadata": "Include Metadata", - "allowDuplicates": "Allow Duplicates", - "desc": { - "1": "This tool splits a PDF file into multiple PDFs based on its chapter structure.", - "2": "Bookmark Level: Choose the level of bookmarks to use for splitting (0 for top-level, 1 for second-level, etc.).", - "3": "Include Metadata: If checked, the original PDF's metadata will be included in each split PDF.", - "4": "Allow Duplicates: If checked, allows multiple bookmarks on the same page to create separate PDFs." - }, - "submit": "Split PDF" - }, - "fileChooser": { - "click": "Click", - "or": "or", - "dragAndDrop": "Drag & Drop", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "Drag & Drop file(s) here", - "extractPDF": "Extracting..." - }, - "releases": { - "footer": "Releases", - "title": "Release Notes", - "header": "Release Notes", - "current": { - "version": "Current Release" - }, - "note": "Release notes are only available in English" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/ru-RU/translation.json b/frontend/dist/locales/ru-RU/translation.json deleted file mode 100644 index 79bfecf9d..000000000 --- a/frontend/dist/locales/ru-RU/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Размер шрифта", - "fontName": "Название шрифта", - "title": "Добавить номера страниц", - "header": "Добавить номера страниц", - "selectText": { - "1": "Выберите PDF-файл:", - "2": "Размер полей", - "3": "Позиция", - "4": "Начальный номер", - "5": "Страницы для нумерации", - "6": "Пользовательский текст" - }, - "customTextDesc": "Пользовательский текст", - "numberPagesDesc": "Какие страницы нумеровать, по умолчанию 'все', также принимает 1-5 или 2,5,9 и т.д.", - "customNumberDesc": "По умолчанию {n}, также принимает 'Страница {n} из {total}', 'Текст-{n}', '{filename}-{n}'", - "submit": "Добавить номера страниц" - }, - "pdfPrompt": "Выберите PDF-файл(ы)", - "multiPdfPrompt": "Выберите PDF-файлы (2+)", - "multiPdfDropPrompt": "Выберите (или перетащите) все необходимые PDF-файлы", - "imgPrompt": "Выберите изображение(я)", - "genericSubmit": "Отправить", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Внимание: Данный процесс может занять до минуты в зависимости от размера файла", - "pageOrderPrompt": "Пользовательский порядок страниц (Введите список номеров страниц через запятую или функции типа 2n+1):", - "pageSelectionPrompt": "Выбор страниц (Введите список номеров страниц через запятую 1,5,6 или функции типа 2n+1):", - "goToPage": "Перейти", - "true": "Да", - "false": "Нет", - "unknown": "Неизвестно", - "save": "Сохранить", - "saveToBrowser": "Сохранить в браузере", - "close": "Закрыть", - "filesSelected": "файлов выбрано", - "noFavourites": "Нет избранного", - "downloadComplete": "Загрузка завершена", - "bored": "Скучно ждать?", - "alphabet": "Алфавит", - "downloadPdf": "Скачать PDF", - "text": "Текст", - "font": "Шрифт", - "selectFillter": "-- Выбрать --", - "pageNum": "Номер страницы", - "sizes": { - "small": "Малый", - "medium": "Средний", - "large": "Большой", - "x-large": "Очень большой" - }, - "error": { - "pdfPassword": "PDF-документ защищен паролем, и пароль не был предоставлен или был неверным", - "_value": "Ошибка", - "sorry": "Извините за неполадки!", - "needHelp": "Нужна помощь / Нашли проблему?", - "contactTip": "Если у вас все еще есть проблемы, не стесняйтесь обращаться к нам за помощью. Вы можете отправить тикет на нашей странице GitHub или связаться с нами через Discord:", - "404": { - "head": "404 - Страница не найдена | Упс, мы запутались в коде!", - "1": "Мы не можем найти страницу, которую вы ищете.", - "2": "Что-то пошло не так" - }, - "github": "Отправить тикет на GitHub", - "showStack": "Показать трассировку стека", - "copyStack": "Скопировать трассировку стека", - "githubSubmit": "GitHub - Отправить тикет", - "discordSubmit": "Discord - Отправить запрос в поддержку" - }, - "delete": "Удалить", - "username": "Имя пользователя", - "password": "Пароль", - "welcome": "Добро пожаловать", - "property": "Свойство", - "black": "Черный", - "white": "Белый", - "red": "Красный", - "green": "Зеленый", - "blue": "Синий", - "custom": "Пользовательский...", - "WorkInProgess": "В разработке, возможны ошибки и сбои, пожалуйста, сообщайте о любых проблемах!", - "poweredBy": "Работает на", - "yes": "Да", - "no": "Нет", - "changedCredsMessage": "Учетные данные изменены!", - "notAuthenticatedMessage": "Пользователь не прошел аутентификацию.", - "userNotFoundMessage": "Пользователь не найден.", - "incorrectPasswordMessage": "Текущий пароль неверен.", - "usernameExistsMessage": "Новое имя пользователя уже существует.", - "invalidUsernameMessage": "Недопустимое имя пользователя, оно может содержать только буквы, цифры и следующие специальные символы @._+- или должно быть действительным адресом электронной почты.", - "invalidPasswordMessage": "Пароль не должен быть пустым и не должен содержать пробелы в начале или конце.", - "confirmPasswordErrorMessage": "Новый пароль и его подтверждение должны совпадать.", - "deleteCurrentUserMessage": "Невозможно удалить текущего пользователя.", - "deleteUsernameExistsMessage": "Имя пользователя не существует и не может быть удалено.", - "downgradeCurrentUserMessage": "Невозможно понизить роль текущего пользователя", - "disabledCurrentUserMessage": "Текущий пользователь не может быть отключен", - "downgradeCurrentUserLongMessage": "Невозможно понизить роль текущего пользователя. Следовательно, текущий пользователь не будет отображаться.", - "userAlreadyExistsOAuthMessage": "Пользователь уже существует как пользователь OAuth2.", - "userAlreadyExistsWebMessage": "Пользователь уже существует как веб-пользователь.", - "oops": "Упс!", - "help": "Помощь", - "goHomepage": "Перейти на главную", - "joinDiscord": "Присоединиться к Discord", - "seeDockerHub": "Посмотреть на Docker Hub", - "visitGithub": "Посетить репозиторий GitHub", - "donate": "Поддержать", - "color": "Цвет", - "sponsor": "Спонсор", - "info": "Информация", - "pro": "Pro", - "page": "Страница", - "pages": "Страницы", - "loading": "Загрузка...", - "addToDoc": "Добавить в документ", - "reset": "Сбросить", - "apply": "Применить", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Политика конфиденциальности", - "terms": "Условия использования", - "accessibility": "Доступность", - "cookie": "Политика использования файлов cookie", - "impressum": "Выходные данные", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Меню конвейера (Beta)", - "uploadButton": "Загрузить пользовательский", - "configureButton": "Настроить", - "defaultOption": "Пользовательский", - "submitButton": "Отправить", - "help": "Помощь по конвейеру", - "scanHelp": "Помощь по сканированию папок", - "deletePrompt": "Вы уверены, что хотите удалить конвейер?", - "tags": "автоматизация,последовательность,скриптовый,пакетная обработка", - "title": "Конвейер" - }, - "pipelineOptions": { - "header": "Настройка конвейера", - "pipelineNameLabel": "Название конвейера", - "saveSettings": "Сохранить настройки операции", - "pipelineNamePrompt": "Введите название конвейера здесь", - "selectOperation": "Выбрать операцию", - "addOperationButton": "Добавить операцию", - "pipelineHeader": "Конвейер:", - "saveButton": "Скачать", - "validateButton": "Проверить" - }, - "enterpriseEdition": { - "button": "Перейти на Pro", - "warning": "Эта функция доступна только для пользователей Pro.", - "yamlAdvert": "Stirling PDF Pro поддерживает файлы конфигурации YAML и другие функции SSO.", - "ssoAdvert": "Ищете больше возможностей управления пользователями? Посмотрите Stirling PDF Pro" - }, - "analytics": { - "title": "Хотите улучшить Stirling PDF?", - "paragraph1": "В Stirling PDF есть опциональная аналитика для улучшения продукта. Мы не отслеживаем личную информацию или содержимое файлов.", - "paragraph2": "Пожалуйста, рассмотрите возможность включения аналитики, чтобы помочь развитию Stirling-PDF и позволить нам лучше понимать наших пользователей.", - "enable": "Включить аналитику", - "disable": "Отключить аналитику", - "settings": "Вы можете изменить настройки аналитики в файле config/settings.yml" - }, - "navbar": { - "favorite": "Избранное", - "recent": "Новое и недавно обновленное", - "darkmode": "Темный режим", - "language": "Языки", - "settings": "Настройки", - "allTools": "Инструменты", - "multiTool": "Мультиинструмент", - "search": "Поиск", - "sections": { - "organize": "Организация", - "convertTo": "Конвертировать в PDF", - "convertFrom": "Конвертировать из PDF", - "security": "Подписи и безопасность", - "advance": "Расширенные", - "edit": "Просмотр и редактирование", - "popular": "Популярное" - } - }, - "settings": { - "title": "Настройки", - "update": "Доступно обновление", - "updateAvailable": "Текущая установленная версия - {0}. Доступна новая версия ({1}).", - "appVersion": "Версия приложения:", - "downloadOption": { - "title": "Выберите вариант загрузки (для одиночных файлов без архивации):", - "1": "Открыть в том же окне", - "2": "Открыть в новом окне", - "3": "Скачать файл" - }, - "zipThreshold": "Архивировать файлы, когда количество загружаемых файлов превышает", - "signOut": "Выйти", - "accountSettings": "Настройки аккаунта", - "bored": { - "help": "Включает пасхалку-игру" - }, - "cacheInputs": { - "name": "Сохранять данные форм", - "help": "Включите для сохранения ранее использованных данных для будущих запусков" - } - }, - "changeCreds": { - "title": "Изменить учетные данные", - "header": "Обновить данные вашей учетной записи", - "changePassword": "Вы используете стандартные учетные данные для входа. Пожалуйста, введите новый пароль", - "newUsername": "Новое имя пользователя", - "oldPassword": "Текущий пароль", - "newPassword": "Новый пароль", - "confirmNewPassword": "Подтвердите новый пароль", - "submit": "Отправить изменения" - }, - "account": { - "title": "Настройки аккаунта", - "accountSettings": "Настройки аккаунта", - "adminSettings": "Настройки администратора - Просмотр и добавление пользователей", - "userControlSettings": "Настройки управления пользователями", - "changeUsername": "Изменить имя пользователя", - "newUsername": "Новое имя пользователя", - "password": "Пароль подтверждения", - "oldPassword": "Старый пароль", - "newPassword": "Новый пароль", - "changePassword": "Изменить пароль", - "confirmNewPassword": "Подтвердите новый пароль", - "signOut": "Выйти", - "yourApiKey": "Ваш API-ключ", - "syncTitle": "Синхронизировать настройки браузера с аккаунтом", - "settingsCompare": "Сравнение настроек:", - "property": "Свойство", - "webBrowserSettings": "Настройки веб-браузера", - "syncToBrowser": "Синхронизировать Аккаунт -> Браузер", - "syncToAccount": "Синхронизировать Аккаунт <- Браузер" - }, - "adminUserSettings": { - "title": "Настройки управления пользователями", - "header": "Настройки управления пользователями администратора", - "admin": "Администратор", - "user": "Пользователь", - "addUser": "Добавить нового пользователя", - "deleteUser": "Удалить пользователя", - "confirmDeleteUser": "Удалить пользователя?", - "confirmChangeUserStatus": "Отключить/включить пользователя?", - "usernameInfo": "Имя пользователя может содержать только буквы, цифры и следующие специальные символы @._+- или должно быть действительным адресом электронной почты.", - "roles": "Роли", - "role": "Роль", - "actions": "Действия", - "apiUser": "Ограниченный пользователь API", - "extraApiUser": "Дополнительный ограниченный пользователь API", - "webOnlyUser": "Только веб-пользователь", - "demoUser": "Демо-пользователь (без настраиваемых параметров)", - "internalApiUser": "Внутренний пользователь API", - "forceChange": "Требовать смену пароля при входе", - "submit": "Сохранить пользователя", - "changeUserRole": "Изменить роль пользователя", - "authenticated": "Аутентифицирован", - "editOwnProfil": "Редактировать свой профиль", - "enabledUser": "активный пользователь", - "disabledUser": "отключенный пользователь", - "activeUsers": "Активные пользователи:", - "disabledUsers": "Отключенные пользователи:", - "totalUsers": "Всего пользователей:", - "lastRequest": "Последний запрос", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Статистика конечных точек", - "header": "Статистика конечных точек", - "top10": "Топ 10", - "top20": "Топ 20", - "all": "Все", - "refresh": "Обновить", - "includeHomepage": "Включить главную страницу ('/')", - "includeLoginPage": "Включить страницу входа ('/login')", - "totalEndpoints": "Всего конечных точек", - "totalVisits": "Всего посещений", - "showing": "Показано", - "selectedVisits": "Выбранные посещения", - "endpoint": "Конечная точка", - "visits": "Посещения", - "percentage": "Процент", - "loading": "Загрузка...", - "failedToLoad": "Не удалось загрузить данные конечной точки. Пожалуйста, попробуйте обновить.", - "home": "Главная", - "login": "Вход", - "top": "Топ", - "numberOfVisits": "Количество посещений", - "visitsTooltip": "Посещения: {0} ({1}% от общего числа)", - "retry": "Повторить" - }, - "database": { - "title": "Импорт/экспорт базы данных", - "header": "Импорт/экспорт базы данных", - "fileName": "Имя файла", - "creationDate": "Дата создания", - "fileSize": "Размер файла", - "deleteBackupFile": "Удалить файл резервной копии", - "importBackupFile": "Импортировать файл резервной копии", - "createBackupFile": "Создать файл резервной копии", - "downloadBackupFile": "Скачать файл резервной копии", - "info_1": "При импорте данных важно обеспечить правильную структуру. Если вы не уверены в своих действиях, обратитесь за профессиональной помощью. Ошибка в структуре может привести к сбоям в работе приложения вплоть до полной неработоспособности.", - "info_2": "Имя файла при загрузке не имеет значения. Оно будет переименовано в формат backup_user_yyyyMMddHHmm.sql для обеспечения единообразия наименований.", - "submit": "Импортировать резервную копию", - "importIntoDatabaseSuccessed": "Импорт в базу данных выполнен успешно", - "backupCreated": "Резервное копирование базы данных выполнено успешно", - "fileNotFound": "Файл не найден", - "fileNullOrEmpty": "Файл не должен быть пустым", - "failedImportFile": "Не удалось импортировать файл", - "notSupported": "Эта функция недоступна для вашего подключения к базе данных." - }, - "session": { - "expired": "Ваша сессия истекла. Пожалуйста, обновите страницу и попробуйте снова.", - "refreshPage": "Обновить страницу" - }, - "home": { - "desc": "Ваше локальное решение для всех потребностей, связанных с PDF.", - "searchBar": "Поиск функций...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Просмотр, аннотирование, добавление текста или изображений" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "Мультиинструмент PDF", - "desc": "Объединение, поворот, переупорядочивание и удаление страниц" - }, - "merge": { - "title": "Объединить", - "desc": "Легко объединяйте несколько PDF-файлов в один." - }, - "split": { - "title": "Разделить", - "desc": "Разделить PDF на несколько документов" - }, - "rotate": { - "title": "Повернуть", - "desc": "Легко поворачивайте ваши PDF-файлы." - }, - "imageToPdf": { - "title": "Изображение в PDF", - "desc": "Преобразование изображения (PNG, JPEG, GIF) в PDF." - }, - "pdfToImage": { - "title": "PDF в изображение", - "desc": "Преобразование PDF в изображение (PNG, JPEG, GIF)." - }, - "pdfOrganiser": { - "title": "Организация", - "desc": "Удаление/переупорядочивание страниц в любом порядке" - }, - "addImage": { - "title": "Добавить изображение", - "desc": "Добавляет изображение в указанное место PDF" - }, - "watermark": { - "title": "Добавить водяной знак", - "desc": "Добавьте собственный водяной знак в ваш PDF-документ." - }, - "permissions": { - "title": "Изменить разрешения", - "desc": "Измените разрешения вашего PDF-документа" - }, - "removePages": { - "title": "Удалить", - "desc": "Удалите ненужные страницы из вашего PDF-документа." - }, - "addPassword": { - "title": "Добавить пароль", - "desc": "Зашифруйте ваш PDF-документ паролем." - }, - "removePassword": { - "title": "Удалить пароль", - "desc": "Удалите защиту паролем из вашего PDF-документа." - }, - "compressPdfs": { - "title": "Сжать", - "desc": "Сжимайте PDF-файлы для уменьшения их размера." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Изменить метаданные", - "desc": "Изменить/удалить/добавить метаданные из PDF-документа" - }, - "fileToPDF": { - "title": "Файл в PDF", - "desc": "Преобразуйте практически любой файл в PDF (DOCX, PNG, XLS, PPT, TXT и другие)" - }, - "ocr": { - "title": "OCR / Очистка сканов", - "desc": "Очистка сканов и распознавание текста с изображений в PDF с последующим добавлением его как текст." - }, - "extractImages": { - "title": "Извлечь изображения", - "desc": "Извлекает все изображения из PDF и сохраняет их в zip-архив" - }, - "pdfToPDFA": { - "title": "PDF в PDF/A", - "desc": "Преобразование PDF в PDF/A для долгосрочного хранения" - }, - "PDFToWord": { - "title": "PDF в Word", - "desc": "Преобразование PDF в форматы Word (DOC, DOCX и ODT)" - }, - "PDFToPresentation": { - "title": "PDF в презентацию", - "desc": "Преобразование PDF в форматы презентаций (PPT, PPTX и ODP)" - }, - "PDFToText": { - "title": "PDF в RTF (текст)", - "desc": "Преобразование PDF в текстовый или RTF формат" - }, - "PDFToHTML": { - "title": "PDF в HTML", - "desc": "Преобразование PDF в формат HTML" - }, - "PDFToXML": { - "title": "PDF в XML", - "desc": "Преобразование PDF в формат XML" - }, - "ScannerImageSplit": { - "title": "Обнаружение/разделение сканированных фото", - "desc": "Разделяет несколько фотографий внутри фото/PDF" - }, - "sign": { - "title": "Подпись", - "desc": "Добавляет подпись в PDF рисованием, текстом или изображением" - }, - "flatten": { - "title": "Сведение", - "desc": "Удаляет все интерактивные элементы и формы из PDF" - }, - "repair": { - "title": "Восстановление", - "desc": "Пытается восстановить поврежденный/сломанный PDF" - }, - "removeBlanks": { - "title": "Удалить пустые страницы", - "desc": "Обнаруживает и удаляет пустые страницы из документа" - }, - "removeAnnotations": { - "title": "Удалить аннотации", - "desc": "Удаляет все комментарии/аннотации из PDF" - }, - "compare": { - "title": "Сравнить", - "desc": "Сравнивает и показывает различия между 2 PDF-документами" - }, - "certSign": { - "title": "Подписать сертификатом", - "desc": "Подписывает PDF сертификатом/ключом (PEM/P12)" - }, - "removeCertSign": { - "title": "Удалить сертификат подписи", - "desc": "Удаляет сертификат подписи из PDF" - }, - "pageLayout": { - "title": "Многостраничная компоновка", - "desc": "Объединяет несколько страниц PDF-документа в одну страницу" - }, - "scalePages": { - "title": "Настроить размер/масштаб страницы", - "desc": "Изменить размер/масштаб страницы и/или её содержимого." - }, - "pipeline": { - "title": "Конвейер", - "desc": "Выполняйте несколько действий с PDF, определяя сценарии конвейера" - }, - "add-page-numbers": { - "title": "Добавить нумерацию страниц", - "desc": "Добавить номера страниц по всему документу в указанном месте" - }, - "auto-rename": { - "title": "Автопереименование PDF-файла", - "desc": "Автоматически переименовывает PDF-файл на основе обнаруженного заголовка" - }, - "adjust-contrast": { - "title": "Настройка цветов/контраста", - "desc": "Настройка контраста, насыщенности и яркости PDF" - }, - "crop": { - "title": "Обрезать PDF", - "desc": "Обрезать PDF для уменьшения его размера (сохраняет текст!)" - }, - "autoSplitPDF": { - "title": "Авторазделение страниц", - "desc": "Автоматическое разделение сканированного PDF с физическим разделителем страниц по QR-коду" - }, - "sanitizePdf": { - "title": "Очистка", - "desc": "Удаление скриптов и других элементов из PDF-файлов" - }, - "URLToPDF": { - "title": "URL/веб-сайт в PDF", - "desc": "Преобразует любой http(s)URL в PDF" - }, - "HTMLToPDF": { - "title": "HTML в PDF", - "desc": "Преобразует любой HTML-файл или zip в PDF" - }, - "MarkdownToPDF": { - "title": "Markdown в PDF", - "desc": "Преобразует любой файл Markdown в PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Получить ВСЮ информацию о PDF", - "desc": "Собирает всю возможную информацию о PDF" - }, - "extractPage": { - "title": "Извлечь страницу(ы)", - "desc": "Извлекает выбранные страницы из PDF" - }, - "PdfToSinglePage": { - "title": "Одна большая страница", - "desc": "Объединяет все страницы PDF в одну большую страницу" - }, - "showJS": { - "title": "Показать Javascript", - "desc": "Ищет и отображает любой JS, внедрённый в PDF" - }, - "autoRedact": { - "title": "Автоматическое редактирование", - "desc": "Автоматически закрашивает (чернит) текст в PDF на основе входного текста" - }, - "redact": { - "title": "Ручное редактирование", - "desc": "Редактирует PDF на основе выбранного текста, нарисованных форм и/или выбранных страниц" - }, - "tableExtraxt": { - "title": "PDF в CSV", - "desc": "Извлекает таблицы из PDF с преобразованием в CSV" - }, - "autoSizeSplitPDF": { - "title": "Авторазделение по размеру/количеству", - "desc": "Разделяет один PDF на несколько документов на основе размера, количества страниц или количества документов" - }, - "overlay-pdfs": { - "title": "Наложение PDF", - "desc": "Накладывает PDF поверх другого PDF" - }, - "split-by-sections": { - "title": "Разделить PDF по секциям", - "desc": "Разделяет каждую страницу PDF на меньшие горизонтальные и вертикальные секции" - }, - "AddStampRequest": { - "title": "Добавить штамп в PDF", - "desc": "Добавляет текстовые или графические штампы в указанных местах" - }, - "removeImagePdf": { - "title": "Удалить изображение", - "desc": "Удаляет изображения из PDF для уменьшения размера файла" - }, - "splitPdfByChapters": { - "title": "Разделить PDF по главам", - "desc": "Разделяет PDF на несколько файлов на основе структуры его глав" - }, - "validateSignature": { - "title": "Проверка подписи PDF", - "desc": "Проверка цифровых подписей и сертификатов в PDF-документах" - }, - "replaceColorPdf": { - "title": "Замена и инверсия цвета", - "desc": "Заменяет цвет текста и фона в PDF и инвертирует все цвета PDF для уменьшения размера файла" - } - }, - "viewPdf": { - "tags": "просмотр,чтение,аннотации,текст,изображение", - "title": "View/Edit PDF", - "header": "Просмотр PDF" - }, - "multiTool": { - "tags": "Мультиинструмент,Многооперационный,UI,перетаскивание,клиентская часть,интерактивный", - "title": "Мультиинструмент PDF", - "header": "Мультиинструмент PDF", - "uploadPrompts": "Имя файла", - "selectAll": "Выбрать все", - "deselectAll": "Отменить выбор всех", - "selectPages": "Выбор страницы", - "selectedPages": "Выбранные страницы", - "page": "Страница", - "deleteSelected": "Удалить выбранные", - "downloadAll": "Экспорт", - "downloadSelected": "Экспорт выбранных", - "insertPageBreak": "Вставить разрыв страницы", - "addFile": "Добавить файл", - "rotateLeft": "Повернуть влево", - "rotateRight": "Повернуть вправо", - "split": "Разделить", - "moveLeft": "Переместить влево", - "moveRight": "Переместить вправо", - "delete": "Удалить", - "dragDropMessage": "Выбрано страниц", - "undo": "Отменить", - "redo": "Повторить" - }, - "merge": { - "tags": "объединение,операции со страницами,серверная часть", - "title": "Объединить", - "header": "Объединение нескольких PDF (2+)", - "sortByName": "Сортировать по имени", - "sortByDate": "Сортировать по дате", - "removeCertSign": "Удалить цифровую подпись в объединенном файле?", - "submit": "Объединить" - }, - "split": { - "tags": "операции со страницами,разделение,многостраничный,вырезание,серверная часть", - "title": "Разделить PDF", - "header": "Разделить PDF", - "desc": { - "1": "Числа, которые вы выбираете, это номера страниц, на которых нужно выполнить разделение", - "2": "Таким образом, выбор 1,3,7-9 разделит 10-страничный документ на 6 отдельных PDF с:", - "3": "Документ #1: Страница 1", - "4": "Документ #2: Страницы 2 и 3", - "5": "Документ #3: Страницы 4, 5, 6 и 7", - "6": "Документ #4: Страница 8", - "7": "Документ #5: Страница 9", - "8": "Документ #6: Страница 10" - }, - "splitPages": "Введите страницы для разделения:", - "submit": "Разделить" - }, - "rotate": { - "tags": "серверная часть", - "title": "Повернуть PDF", - "header": "Повернуть PDF", - "selectAngle": "Выберите угол поворота (кратный 90 градусам):", - "submit": "Повернуть" - }, - "imageToPdf": { - "tags": "конвертация,изображение,jpg,картинка,фото" - }, - "pdfToImage": { - "tags": "конвертация,изображение,jpg,картинка,фото", - "title": "PDF в изображение", - "header": "PDF в изображение", - "selectText": "Формат изображения", - "singleOrMultiple": "Тип результата изображения", - "single": "Одно большое изображение", - "multi": "Несколько изображений", - "colorType": "Тип цвета", - "color": "Цветной", - "grey": "Оттенки серого", - "blackwhite": "Черно-белый (возможна потеря данных!)", - "submit": "Преобразовать", - "info": "Python не установлен. Требуется для конвертации в WebP.", - "placeholder": "(например, 1,2,8 или 4,7,12-16 или 2n-1)" - }, - "pdfOrganiser": { - "tags": "двусторонняя печать,четные,нечетные,сортировка,перемещение", - "title": "Организатор страниц", - "header": "Организатор страниц PDF", - "submit": "Переупорядочить страницы", - "mode": { - "_value": "Режим", - "1": "Пользовательский порядок страниц", - "2": "Обратный порядок", - "3": "Сортировка дуплекса", - "4": "Сортировка буклета", - "5": "Сортировка буклета с боковым сшиванием", - "6": "Разделить на четные-нечетные", - "7": "Удалить первую", - "8": "Удалить последнюю", - "9": "Удалить первую и последнюю", - "10": "Объединение четных-нечетных", - "11": "Duplicate all pages" - }, - "placeholder": "(например, 1,3,2 или 4-8,2,10-12 или 2n-1)" - }, - "addImage": { - "tags": "изображение,jpg,картинка,фото", - "title": "Добавить изображение", - "header": "Добавить изображение в PDF", - "everyPage": "Каждая страница?", - "upload": "Добавить изображение", - "submit": "Добавить изображение" - }, - "watermark": { - "tags": "текст,повторяющийся,метка,собственный,авторское право,торговая марка,изображение,jpg,картинка,фото", - "title": "Добавить водяной знак", - "header": "Добавить водяной знак", - "customColor": "Пользовательский цвет текста", - "selectText": { - "1": "Выберите PDF для добавления водяного знака:", - "2": "Текст водяного знака:", - "3": "Размер шрифта:", - "4": "Поворот (0-360):", - "5": "Горизонтальный интервал (расстояние между водяными знаками по горизонтали):", - "6": "Вертикальный интервал (расстояние между водяными знаками по вертикали):", - "7": "Прозрачность (0% - 100%):", - "8": "Тип водяного знака:", - "9": "Изображение водяного знака:", - "10": "Преобразовать PDF в PDF-изображение" - }, - "submit": "Добавить водяной знак", - "type": { - "1": "Текст", - "2": "Изображение" - } - }, - "permissions": { - "tags": "чтение,запись,редактирование,печать", - "title": "Изменить разрешения", - "header": "Изменить разрешения", - "warning": "Внимание: для неизменяемости этих разрешений рекомендуется устанавливать их с паролем через страницу добавления пароля", - "selectText": { - "1": "Выберите PDF для изменения разрешений", - "2": "Устанавливаемые разрешения", - "3": "Запретить компоновку документа", - "4": "Запретить извлечение содержимого", - "5": "Запретить извлечение для специальных возможностей", - "6": "Запретить заполнение форм", - "7": "Запретить модификацию", - "8": "Запретить модификацию аннотаций", - "9": "Запретить печать", - "10": "Запретить печать в высоком качестве" - }, - "submit": "Изменить" - }, - "removePages": { - "tags": "Удалить страницы,удаление страниц" - }, - "addPassword": { - "tags": "безопасность,защита", - "title": "Добавить пароль", - "header": "Добавить пароль (Шифрование)", - "selectText": { - "1": "Выберите PDF для шифрования", - "2": "Пароль пользователя", - "3": "Длина ключа шифрования", - "4": "Более высокие значения сильнее, но более низкие значения обеспечивают лучшую совместимость.", - "5": "Устанавливаемые разрешения (Рекомендуется использовать вместе с паролем владельца)", - "6": "Запретить компоновку документа", - "7": "Запретить извлечение содержимого", - "8": "Запретить извлечение для специальных возможностей", - "9": "Запретить заполнение форм", - "10": "Запретить модификацию", - "11": "Запретить модификацию аннотаций", - "12": "Запретить печать", - "13": "Запретить печать в высоком качестве", - "14": "Пароль владельца", - "15": "Ограничивает действия с документом после его открытия (Поддерживается не всеми программами чтения)", - "16": "Ограничивает само открытие документа" - }, - "submit": "Зашифровать" - }, - "removePassword": { - "tags": "безопасность,расшифровка,защита,удаление пароля", - "title": "Удалить пароль", - "header": "Удалить пароль (Расшифровать)", - "selectText": { - "1": "Выберите PDF для расшифровки", - "2": "Пароль" - }, - "submit": "Удалить" - }, - "compressPdfs": { - "tags": "сжатие,маленький,крошечный" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "заголовок,автор,дата,создание,время,издатель,производитель,статистика", - "title": "Изменить метаданные", - "header": "Изменить метаданные", - "selectText": { - "1": "Пожалуйста, отредактируйте переменные, которые хотите изменить", - "2": "Удалить все метаданные", - "3": "Показать пользовательские метаданные:", - "4": "Другие метаданные:", - "5": "Добавить пользовательскую запись метаданных" - }, - "author": "Автор:", - "creationDate": "Дата создания (yyyy/MM/dd HH:mm:ss):", - "creator": "Создатель:", - "keywords": "Ключевые слова:", - "modDate": "Дата изменения (yyyy/MM/dd HH:mm:ss):", - "producer": "Производитель:", - "subject": "Тема:", - "trapped": "Trapped:", - "submit": "Изменить" - }, - "fileToPDF": { - "tags": "преобразование,формат,документ,картинка,презентация,текст,конвертация,офис,документы,word,excel,powerpoint", - "title": "Файл в PDF", - "header": "Преобразовать любой файл в PDF", - "credit": "Этот сервис использует LibreOffice и Unoconv для преобразования файлов.", - "supportedFileTypesInfo": "Поддерживаемые типы файлов", - "supportedFileTypes": "Поддерживаемые типы файлов должны включать перечисленные ниже, однако для получения полного актуального списка поддерживаемых форматов обратитесь к документации LibreOffice", - "submit": "Преобразовать в PDF" - }, - "ocr": { - "tags": "распознавание,текст,изображение,сканирование,чтение,идентификация,обнаружение,редактируемый", - "title": "OCR / Очистка сканов", - "header": "Очистка сканов / OCR (оптическое распознавание символов)", - "selectText": { - "1": "Выберите языки, которые должны быть обнаружены в PDF (перечислены те, которые обнаружены в данный момент):", - "2": "Создать текстовый файл с OCR-текстом вместе с OCR-обработанным PDF", - "3": "Исправить страницы, отсканированные под углом, путем их поворота в правильное положение", - "4": "Очистить страницу, чтобы уменьшить вероятность нахождения OCR текста в фоновом шуме. (Без изменения вывода)", - "5": "Очистить страницу, чтобы уменьшить вероятность нахождения OCR текста в фоновом шуме, с сохранением очистки в выводе.", - "6": "Игнорировать страницы с интерактивным текстом, обрабатывать OCR только для страниц с изображениями", - "7": "Принудительное OCR, будет обрабатывать каждую страницу, удаляя все исходные текстовые элементы", - "8": "Обычный (выдаст ошибку, если PDF содержит текст)", - "9": "Дополнительные настройки", - "10": "Режим OCR", - "11": "Удалить изображения после OCR (удаляет ВСЕ изображения, полезно только как часть шага преобразования)", - "12": "Тип рендеринга (продвинутый)" - }, - "help": "Пожалуйста, прочтите эту документацию о том, как использовать это для других языков и/или использовать не в Docker", - "credit": "Этот сервис использует qpdf и Tesseract для OCR.", - "submit": "Обработать PDF с OCR" - }, - "extractImages": { - "tags": "картинка,фото,сохранение,архив,zip,захват,извлечение", - "title": "Извлечь изображения", - "header": "Извлечь изображения", - "selectText": "Выберите формат изображения для преобразования извлеченных изображений", - "allowDuplicates": "Сохранять дубликаты изображений", - "submit": "Извлечь" - }, - "pdfToPDFA": { - "tags": "архив,долгосрочный,стандарт,конвертация,хранение,сохранение", - "title": "PDF в PDF/A", - "header": "PDF в PDF/A", - "credit": "Этот сервис использует libreoffice для преобразования в PDF/A", - "submit": "Преобразовать", - "tip": "В настоящее время не работает с несколькими входными файлами одновременно", - "outputFormat": "Формат вывода", - "pdfWithDigitalSignature": "PDF содержит цифровую подпись. Она будет удалена на следующем шаге." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,преобразование,формат,конвертация,офис,microsoft,docfile", - "title": "PDF в Word", - "header": "PDF в Word", - "selectText": { - "1": "Формат выходного файла" - }, - "credit": "Этот сервис использует LibreOffice для преобразования файлов.", - "submit": "Преобразовать" - }, - "PDFToPresentation": { - "tags": "слайды,показ,офис,microsoft", - "title": "PDF в презентацию", - "header": "PDF в презентацию", - "selectText": { - "1": "Формат выходного файла" - }, - "credit": "Этот сервис использует LibreOffice для преобразования файлов.", - "submit": "Преобразовать" - }, - "PDFToText": { - "tags": "richformat,richtextformat,rich text format", - "title": "PDF в RTF (текст)", - "header": "PDF в RTF (текст)", - "selectText": { - "1": "Формат выходного файла" - }, - "credit": "Этот сервис использует LibreOffice для преобразования файлов.", - "submit": "Преобразовать" - }, - "PDFToHTML": { - "tags": "веб-контент,браузерный формат", - "title": "PDF в HTML", - "header": "PDF в HTML", - "credit": "Этот сервис использует pdftohtml для преобразования файлов.", - "submit": "Преобразовать" - }, - "PDFToXML": { - "tags": "извлечение данных,структурированный контент,взаимодействие,преобразование,конвертация", - "title": "PDF в XML", - "header": "PDF в XML", - "credit": "Этот сервис использует LibreOffice для преобразования файлов.", - "submit": "Преобразовать" - }, - "ScannerImageSplit": { - "tags": "разделение,автоопределение,сканы,мульти-фото,организация", - "selectText": { - "1": "Пороговый угол:", - "2": "Устанавливает минимальный абсолютный угол, необходимый для поворота изображения (по умолчанию: 10).", - "3": "Допуск:", - "4": "Определяет диапазон изменения цвета вокруг предполагаемого фонового цвета (по умолчанию: 30).", - "5": "Минимальная площадь:", - "6": "Устанавливает минимальный порог площади для фотографии (по умолчанию: 10000).", - "7": "Минимальная площадь контура:", - "8": "Устанавливает минимальный порог площади контура для фотографии", - "9": "Размер границы:", - "10": "Устанавливает размер добавляемой и удаляемой границы для предотвращения белых границ в выводе (по умолчанию: 1)." - }, - "info": "Python не установлен. Он необходим для работы." - }, - "sign": { - "tags": "авторизация,инициалы,нарисованная подпись,текстовая подпись,подпись изображением", - "title": "Подпись", - "header": "Подписать PDF", - "upload": "Загрузить изображение", - "draw": "Нарисовать подпись", - "text": "Текстовый ввод", - "clear": "Очистить", - "add": "Добавить", - "saved": "Сохраненные подписи", - "save": "Сохранить подпись", - "personalSigs": "Личные подписи", - "sharedSigs": "Общие подписи", - "noSavedSigs": "Сохраненные подписи не найдены", - "addToAll": "Добавить на все страницы", - "delete": "Удалить", - "first": "Первая страница", - "last": "Последняя страница", - "next": "Следующая страница", - "previous": "Предыдущая страница", - "maintainRatio": "Переключить сохранение пропорций", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "статический,деактивация,неинтерактивный,упрощение", - "title": "Сведение", - "header": "Сведение PDF", - "flattenOnlyForms": "Свести только формы", - "submit": "Свести" - }, - "repair": { - "tags": "исправление,восстановление,коррекция,возврат", - "title": "Восстановление", - "header": "Восстановление PDF", - "submit": "Восстановить" - }, - "removeBlanks": { - "tags": "очистка,упрощение,без содержимого,организация", - "title": "Удалить пустые страницы", - "header": "Удалить пустые страницы", - "threshold": "Порог белизны пикселей:", - "thresholdDesc": "Порог определения, насколько белым должен быть пиксель, чтобы считаться 'белым'. 0 = черный, 255 = чисто белый.", - "whitePercent": "Процент белого (%):", - "whitePercentDesc": "Процент страницы, который должен быть 'белыми' пикселями для удаления", - "submit": "Удалить пустые" - }, - "removeAnnotations": { - "tags": "комментарии,выделение,заметки,разметка,удаление", - "title": "Удалить аннотации", - "header": "Удалить аннотации", - "submit": "Удалить" - }, - "compare": { - "tags": "различие,контраст,изменения,анализ", - "title": "Сравнить", - "header": "Сравнить PDF", - "highlightColor": { - "1": "Цвет выделения 1:", - "2": "Цвет выделения 2:" - }, - "document": { - "1": "Документ 1", - "2": "Документ 2" - }, - "submit": "Сравнить", - "complex": { - "message": "Один или оба предоставленных документа являются большими файлами, точность сравнения может быть снижена" - }, - "large": { - "file": { - "message": "Один или оба предоставленных документа слишком велики для обработки" - } - }, - "no": { - "text": { - "message": "Выбранные PDF-файлы не содержат текстового содержимого. Пожалуйста, выберите PDF-файлы с текстом для сравнения." - } - } - }, - "certSign": { - "tags": "аутентификация,PEM,P12,официальный,шифрование", - "title": "Подписание сертификатом", - "header": "Подпишите PDF вашим сертификатом (в разработке)", - "selectPDF": "Выберите PDF-файл для подписания:", - "jksNote": "Примечание: Если тип вашего сертификата не указан ниже, пожалуйста, преобразуйте его в файл хранилища ключей Java (.jks) с помощью утилиты командной строки keytool. Затем выберите опцию .jks файла ниже.", - "selectKey": "Выберите файл закрытого ключа (формат PKCS#8, может быть .pem или .der):", - "selectCert": "Выберите файл сертификата (формат X.509, может быть .pem или .der):", - "selectP12": "Выберите файл хранилища ключей PKCS#12 (.p12 или .pfx) (необязательно, если предоставлен, должен содержать ваш закрытый ключ и сертификат):", - "selectJKS": "Выберите файл хранилища ключей Java (.jks или .keystore):", - "certType": "Тип сертификата", - "password": "Введите пароль хранилища ключей или закрытого ключа (если есть):", - "showSig": "Показать подпись", - "reason": "Причина", - "location": "Местоположение", - "name": "Имя", - "showLogo": "Показать логотип", - "submit": "Подписать PDF" - }, - "removeCertSign": { - "tags": "аутентификация,PEM,P12,официальный,расшифровка", - "title": "Удалить сертификат подписи", - "header": "Удалить цифровой сертификат из PDF", - "selectPDF": "Выберите PDF-файл:", - "submit": "Удалить подпись" - }, - "pageLayout": { - "tags": "объединение,композиция,единый вид,организация", - "title": "Многостраничная компоновка", - "header": "Многостраничная компоновка", - "pagesPerSheet": "Страниц на лист:", - "addBorder": "Добавить границы", - "submit": "Отправить" - }, - "scalePages": { - "tags": "изменение размера,модификация,размеры,адаптация", - "title": "Настройка масштаба страницы", - "header": "Настройка масштаба страницы", - "pageSize": "Размер страницы документа.", - "keepPageSize": "Исходный размер", - "scaleFactor": "Коэффициент масштабирования (обрезки) страницы.", - "submit": "Отправить" - }, - "add-page-numbers": { - "tags": "нумерация,метка,организация,индекс" - }, - "auto-rename": { - "tags": "автообнаружение,на основе заголовка,организация,переименование", - "title": "Автопереименование", - "header": "Автопереименование PDF", - "submit": "Автопереименование" - }, - "adjust-contrast": { - "tags": "цветокоррекция,настройка,модификация,улучшение" - }, - "crop": { - "tags": "обрезка,уменьшение,редактирование,форма", - "title": "Обрезка", - "header": "Обрезка PDF", - "submit": "Отправить" - }, - "autoSplitPDF": { - "tags": "QR-код,разделение,скан-сегмент,организация", - "title": "Автоматическое разделение PDF", - "header": "Автоматическое разделение PDF", - "description": "Печатайте, вставляйте, сканируйте, загружайте и позвольте нам автоматически разделить ваши документы. Не требуется ручная сортировка.", - "selectText": { - "1": "Распечатайте несколько разделительных листов (подойдет черно-белая печать).", - "2": "Отсканируйте все ваши документы за раз, вставив разделительные листы между ними.", - "3": "Загрузите один большой отсканированный PDF-файл и позвольте Stirling PDF сделать все остальное.", - "4": "Разделительные страницы автоматически обнаруживаются и удаляются, гарантируя аккуратный конечный документ." - }, - "formPrompt": "Отправить PDF, содержащий разделители страниц Stirling-PDF:", - "duplexMode": "Двусторонний режим (сканирование с двух сторон)", - "dividerDownload2": "Скачать 'Автоматический разделитель (с инструкциями).pdf'", - "submit": "Отправить" - }, - "sanitizePdf": { - "tags": "очистка,безопасность,защита,удаление угроз" - }, - "URLToPDF": { - "tags": "веб-захват,сохранение страницы,веб в док,архивация", - "title": "URL в PDF", - "header": "URL в PDF", - "submit": "Преобразовать", - "credit": "Использует WeasyPrint" - }, - "HTMLToPDF": { - "tags": "разметка,веб-контент,преобразование,конвертация", - "title": "HTML в PDF", - "header": "HTML в PDF", - "help": "Принимает HTML-файлы и ZIP-архивы, содержащие html/css/изображения и т.д.", - "submit": "Преобразовать", - "credit": "Использует WeasyPrint", - "zoom": "Уровень масштабирования для отображения веб-сайта.", - "pageWidth": "Ширина страницы в сантиметрах. (Пусто для значения по умолчанию)", - "pageHeight": "Высота страницы в сантиметрах. (Пусто для значения по умолчанию)", - "marginTop": "Верхнее поле страницы в миллиметрах. (Пусто для значения по умолчанию)", - "marginBottom": "Нижнее поле страницы в миллиметрах. (Пусто для значения по умолчанию)", - "marginLeft": "Левое поле страницы в миллиметрах. (Пусто для значения по умолчанию)", - "marginRight": "Правое поле страницы в миллиметрах. (Пусто для значения по умолчанию)", - "printBackground": "Отображать фон веб-сайтов.", - "defaultHeader": "Включить заголовок по умолчанию (имя и номер страницы)", - "cssMediaType": "Изменить тип носителя CSS страницы.", - "none": "Нет", - "print": "Печать", - "screen": "Экран" - }, - "MarkdownToPDF": { - "tags": "разметка,веб-контент,преобразование,конвертация", - "title": "Markdown в PDF", - "header": "Markdown в PDF", - "submit": "Преобразовать", - "help": "В разработке", - "credit": "Использует WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "информация,данные,статистика,параметры", - "title": "Получить информацию о PDF", - "header": "Получить информацию о PDF", - "submit": "Получить информацию", - "downloadJson": "Скачать JSON" - }, - "extractPage": { - "tags": "извлечение" - }, - "PdfToSinglePage": { - "tags": "одна страница" - }, - "showJS": { - "tags": "JS", - "title": "Показать Javascript", - "header": "Показать Javascript", - "downloadJS": "Скачать Javascript", - "submit": "Показать" - }, - "autoRedact": { - "tags": "Редактирование,Скрытие,зачернение,чёрный,маркер,скрытый", - "title": "Автоматическое редактирование", - "header": "Автоматическое редактирование", - "colorLabel": "Цвет", - "textsToRedactLabel": "Текст для редактирования (построчно)", - "textsToRedactPlaceholder": "например \\nКонфиденциально \\nСовершенно секретно", - "useRegexLabel": "Использовать регулярные выражения", - "wholeWordSearchLabel": "Поиск целых слов", - "customPaddingLabel": "Пользовательские отступы", - "convertPDFToImageLabel": "Преобразовать PDF в PDF-изображение (используется для удаления текста за рамкой)", - "submitButton": "Отправить" - }, - "redact": { - "tags": "Редактирование,Скрытие,зачернение,чёрный,маркер,скрытый,ручной", - "title": "Ручное редактирование", - "header": "Ручное редактирование", - "submit": "Редактировать", - "textBasedRedaction": "Редактирование на основе текста", - "pageBasedRedaction": "Редактирование на основе страниц", - "convertPDFToImageLabel": "Преобразовать PDF в PDF-изображение (используется для удаления текста за рамкой)", - "pageRedactionNumbers": { - "title": "Страницы", - "placeholder": "(например, 1,2,8 или 4,7,12-16 или 2n-1)" - }, - "redactionColor": { - "title": "Цвет редактирования" - }, - "export": "Экспорт", - "upload": "Загрузить", - "boxRedaction": "Редактирование рисованием рамки", - "zoom": "Масштаб", - "zoomIn": "Увеличить", - "zoomOut": "Уменьшить", - "nextPage": "Следующая страница", - "previousPage": "Предыдущая страница", - "toggleSidebar": "Переключить боковую панель", - "showThumbnails": "Показать миниатюры", - "showDocumentOutline": "Показать структуру документа (двойной щелчок для развертывания/свертывания всех элементов)", - "showAttatchments": "Показать вложения", - "showLayers": "Показать слои (двойной щелчок для сброса всех слоев к состоянию по умолчанию)", - "colourPicker": "Выбор цвета", - "findCurrentOutlineItem": "Найти текущий элемент структуры", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,Извлечение таблиц,извлечение,конвертация" - }, - "autoSizeSplitPDF": { - "tags": "pdf,разделение,документ,организация" - }, - "overlay-pdfs": { - "tags": "Наложение", - "header": "Наложение PDF-файлов", - "baseFile": { - "label": "Выберите базовый PDF-файл" - }, - "overlayFiles": { - "label": "Выберите накладываемые PDF-файлы" - }, - "mode": { - "label": "Выберите режим наложения", - "sequential": "Последовательное наложение", - "interleaved": "Чередующееся наложение", - "fixedRepeat": "Фиксированное повторяющееся наложение" - }, - "counts": { - "label": "Количество наложений (для режима фиксированного повторения)", - "placeholder": "Введите количество через запятую (например, 2,3,1)" - }, - "position": { - "label": "Выберите позицию наложения", - "foreground": "На переднем плане", - "background": "На заднем плане" - }, - "submit": "Отправить" - }, - "split-by-sections": { - "tags": "Разделение по секциям,Разделить,Настроить", - "title": "Разделить PDF по секциям", - "header": "Разделить PDF на секции", - "horizontal": { - "label": "Горизонтальные разделы", - "placeholder": "Введите количество горизонтальных разделов" - }, - "vertical": { - "label": "Вертикальные разделы", - "placeholder": "Введите количество вертикальных разделов" - }, - "submit": "Разделить PDF", - "merge": "Объединить в один PDF" - }, - "AddStampRequest": { - "tags": "Штамп,Добавить изображение,центрировать изображение,Водяной знак,PDF,Встраивание,Настройка", - "header": "Штамп PDF", - "title": "Штамп PDF", - "stampType": "Тип штампа", - "stampText": "Текст штампа", - "stampImage": "Изображение штампа", - "alphabet": "Алфавит", - "fontSize": "Размер шрифта/изображения", - "rotation": "Поворот", - "opacity": "Прозрачность", - "position": "Позиция", - "overrideX": "Переопределить координату X", - "overrideY": "Переопределить координату Y", - "customMargin": "Пользовательские поля", - "customColor": "Пользовательский цвет текста", - "submit": "Отправить" - }, - "removeImagePdf": { - "tags": "Удаление изображения,операции со страницами,Серверная часть" - }, - "splitPdfByChapters": { - "tags": "разделение,главы,закладки,организация" - }, - "validateSignature": { - "tags": "подпись,проверка,валидация,pdf,сертификат,цифровая подпись,Проверка подписи,Проверка сертификата", - "title": "Проверка подписей PDF", - "header": "Проверка цифровых подписей", - "selectPDF": "Выберите подписанный PDF-файл", - "submit": "Проверить подписи", - "results": "Результаты проверки", - "status": { - "_value": "Статус", - "valid": "Действительна", - "invalid": "Недействительна" - }, - "signer": "Подписант", - "date": "Дата", - "reason": "Причина", - "location": "Местоположение", - "noSignatures": "В этом документе не найдено цифровых подписей", - "chain": { - "invalid": "Проверка цепочки сертификатов не удалась - невозможно проверить личность подписанта" - }, - "trust": { - "invalid": "Сертификат отсутствует в доверенном хранилище - источник не может быть проверен" - }, - "cert": { - "expired": "Срок действия сертификата истек", - "revoked": "Сертификат был отозван", - "info": "Сведения о сертификате", - "issuer": "Издатель", - "subject": "Субъект", - "serialNumber": "Серийный номер", - "validFrom": "Действителен с", - "validUntil": "Действителен до", - "algorithm": "Алгоритм", - "keySize": "Размер ключа", - "version": "Версия", - "keyUsage": "Использование ключа", - "selfSigned": "Самоподписанный", - "bits": "бит" - }, - "signature": { - "info": "Информация о подписи", - "_value": "Подпись", - "mathValid": "Подпись математически корректна, НО:" - }, - "selectCustomCert": "Пользовательский файл сертификата X.509 (Необязательно)" - }, - "replace-color": { - "title": "Замена-Инверсия цвета", - "header": "Замена-Инверсия цвета PDF", - "selectText": { - "1": "Параметры замены или инверсии цвета", - "2": "По умолчанию (цвета высокого контраста)", - "3": "Пользовательские (настраиваемые цвета)", - "4": "Полная инверсия (инвертировать все цвета)", - "5": "Параметры высокого контраста", - "6": "белый текст на чёрном фоне", - "7": "чёрный текст на белом фоне", - "8": "жёлтый текст на чёрном фоне", - "9": "зелёный текст на чёрном фоне", - "10": "Выбрать цвет текста", - "11": "Выбрать цвет фона" - }, - "submit": "Заменить" - }, - "replaceColorPdf": { - "tags": "Замена цвета,операции со страницами,Серверная часть" - }, - "login": { - "title": "Вход", - "header": "Вход", - "signin": "Войти", - "rememberme": "Запомнить меня", - "invalid": "Неверное имя пользователя или пароль.", - "locked": "Ваша учетная запись заблокирована.", - "signinTitle": "Пожалуйста, войдите", - "ssoSignIn": "Вход через единый вход", - "oAuth2AutoCreateDisabled": "Автоматическое создание пользователей OAuth2 отключено", - "oAuth2AdminBlockedUser": "Регистрация или вход незарегистрированных пользователей в настоящее время заблокированы. Обратитесь к администратору.", - "oauth2RequestNotFound": "Запрос авторизации не найден", - "oauth2InvalidUserInfoResponse": "Недействительный ответ с информацией о пользователе", - "oauth2invalidRequest": "Недействительный запрос", - "oauth2AccessDenied": "Доступ запрещен", - "oauth2InvalidTokenResponse": "Недействительный ответ токена", - "oauth2InvalidIdToken": "Недействительный идентификационный токен", - "relyingPartyRegistrationNotFound": "Регистрация доверяющей стороны не найдена", - "userIsDisabled": "Пользователь деактивирован, вход с этим именем пользователя в настоящее время заблокирован. Обратитесь к администратору.", - "alreadyLoggedIn": "Вы уже вошли в", - "alreadyLoggedIn2": "устройств(а). Пожалуйста, выйдите из этих устройств и попробуйте снова.", - "toManySessions": "У вас слишком много активных сессий", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF в одну страницу", - "header": "PDF в одну страницу", - "submit": "Преобразовать в одну страницу" - }, - "pageExtracter": { - "title": "Извлечь страницы", - "header": "Извлечь страницы", - "submit": "Извлечь", - "placeholder": "(например, 1,2,8 или 4,7,12-16 или 2n-1)" - }, - "sanitizePDF": { - "title": "Очистить PDF", - "header": "Очистить PDF-файл", - "selectText": { - "1": "Удалить JavaScript-действия", - "2": "Удалить встроенные файлы", - "3": "Remove XMP metadata", - "4": "Удалить ссылки", - "5": "Удалить шрифты", - "6": "Remove Document Info Metadata" - }, - "submit": "Очистить PDF" - }, - "adjustContrast": { - "title": "Настройка контраста", - "header": "Настройка контраста", - "contrast": "Контраст:", - "brightness": "Яркость:", - "saturation": "Насыщенность:", - "download": "Скачать" - }, - "compress": { - "title": "Сжать", - "header": "Сжать PDF", - "credit": "Этот сервис использует qpdf для сжатия/оптимизации PDF.", - "grayscale": { - "label": "Применить шкалу серого для сжатия" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Уровень оптимизации:", - "4": "Автоматический режим - автоматически настраивает качество для получения точного размера PDF", - "5": "Ожидаемый размер PDF (например, 25MB, 10.8MB, 25KB)" - }, - "submit": "Сжать" - }, - "decrypt": { - "passwordPrompt": "Этот файл защищен паролем. Пожалуйста, введите пароль:", - "cancelled": "Операция отменена для PDF: {0}", - "noPassword": "Не предоставлен пароль для зашифрованного PDF: {0}", - "invalidPassword": "Пожалуйста, попробуйте снова с правильным паролем.", - "invalidPasswordHeader": "Неверный пароль или неподдерживаемое шифрование для PDF: {0}", - "unexpectedError": "Произошла ошибка при обработке файла. Пожалуйста, попробуйте снова.", - "serverError": "Ошибка сервера при расшифровке: {0}", - "success": "Файл успешно расшифрован." - }, - "multiTool-advert": { - "message": "Эта функция также доступна на нашей странице мультиинструмента. Попробуйте её для улучшенного постраничного интерфейса и дополнительных возможностей!" - }, - "pageRemover": { - "title": "Удаление страниц", - "header": "Удаление страниц PDF", - "pagesToDelete": "Страницы для удаления (введите список номеров страниц через запятую):", - "submit": "Удалить страницы", - "placeholder": "(например, 1,2,6 или 1-10,15-30)" - }, - "imageToPDF": { - "title": "Изображение в PDF", - "header": "Изображение в PDF", - "submit": "Преобразовать", - "selectLabel": "Параметры вписывания изображения", - "fillPage": "Заполнить страницу", - "fitDocumentToImage": "Подогнать страницу под изображение", - "maintainAspectRatio": "Сохранять пропорции", - "selectText": { - "2": "Автоматически поворачивать PDF", - "3": "Логика обработки множества файлов (активна только при работе с несколькими изображениями)", - "4": "Объединить в один PDF", - "5": "Преобразовать в отдельные PDF" - } - }, - "PDFToCSV": { - "title": "PDF в CSV", - "header": "PDF в CSV", - "prompt": "Выберите страницу для извлечения таблицы", - "submit": "Извлечь" - }, - "split-by-size-or-count": { - "title": "Разделить PDF по размеру или количеству", - "header": "Разделить PDF по размеру или количеству", - "type": { - "label": "Выберите тип разделения", - "size": "По размеру", - "pageCount": "По количеству страниц", - "docCount": "По количеству документов" - }, - "value": { - "label": "Введите значение", - "placeholder": "Введите размер (например, 2MB или 3KB) или количество (например, 5)" - }, - "submit": "Отправить" - }, - "printFile": { - "title": "Печать файла", - "header": "Печать файла на принтер", - "selectText": { - "1": "Выберите файл для печати", - "2": "Введите имя принтера" - }, - "submit": "Печать" - }, - "licenses": { - "nav": "Лицензии", - "title": "Лицензии сторонних компонентов", - "header": "Лицензии сторонних компонентов", - "module": "Модуль", - "version": "Версия", - "license": "Лицензия" - }, - "survey": { - "nav": "Опрос", - "title": "Опрос Stirling-PDF", - "description": "Stirling-PDF не использует отслеживание, поэтому мы хотим услышать мнение пользователей для улучшения Stirling-PDF!", - "changes": "Stirling-PDF изменился с момента последнего опроса! Чтобы узнать больше, пожалуйста, прочитайте наш пост в блоге здесь:", - "changes2": "С этими изменениями мы получаем платную бизнес-поддержку и финансирование", - "please": "Пожалуйста, примите участие в нашем опросе!", - "disabled": "(Всплывающее окно опроса будет отключено в следующих обновлениях, но будет доступно в нижней части страницы)", - "button": "Пройти опрос", - "dontShowAgain": "Больше не показывать", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Удалить изображение", - "header": "Удалить изображение", - "removeImage": "Удалить изображение", - "submit": "Удалить изображение" - }, - "splitByChapters": { - "title": "Разделить PDF по главам", - "header": "Разделить PDF по главам", - "bookmarkLevel": "Уровень закладок", - "includeMetadata": "Включить метаданные", - "allowDuplicates": "Разрешить дубликаты", - "desc": { - "1": "Этот инструмент разделяет PDF-файл на несколько PDF на основе его структуры глав.", - "2": "Уровень закладок: выберите уровень закладок для разделения (0 для верхнего уровня, 1 для второго уровня и т.д.).", - "3": "Включить метаданные: если отмечено, метаданные исходного PDF будут включены в каждый разделенный PDF.", - "4": "Разрешить дубликаты: если отмечено, позволяет создавать отдельные PDF из нескольких закладок на одной странице." - }, - "submit": "Разделить PDF" - }, - "fileChooser": { - "click": "Нажмите", - "or": "или", - "dragAndDrop": "Перетащите", - "dragAndDropPDF": "Перетащите PDF-файл", - "dragAndDropImage": "Перетащите файл изображения", - "hoveredDragAndDrop": "Перетащите файл(ы) сюда", - "extractPDF": "Извлечение..." - }, - "releases": { - "footer": "Релизы", - "title": "Примечания к релизу", - "header": "Примечания к релизу", - "current": { - "version": "Текущий релиз" - }, - "note": "Примечания к релизу доступны только на английском языке" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/sk-SK/translation.json b/frontend/dist/locales/sk-SK/translation.json deleted file mode 100644 index bbdf5f676..000000000 --- a/frontend/dist/locales/sk-SK/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Font Size", - "fontName": "Font Name", - "title": "Pridať čísla stránok", - "header": "Pridať čísla stránok", - "selectText": { - "1": "Vybrať PDF súbor:", - "2": "Veľkosť okraja", - "3": "Pozícia", - "4": "Počiatočné číslo", - "5": "Stránky na číslovanie", - "6": "Vlastný text" - }, - "customTextDesc": "Vlastný text", - "numberPagesDesc": "Ktoré stránky číslovať, predvolené 'všetky', tiež akceptuje 1-5 alebo 2,5,9 atď.", - "customNumberDesc": "Predvolené {n}, tiež akceptuje 'Strana {n} z {total}', 'Text-{n}', '{filename}-{n}", - "submit": "Pridať čísla stránok" - }, - "pdfPrompt": "Vyberte PDF súbor(y)", - "multiPdfPrompt": "Vyberte PDF súbory (2+)", - "multiPdfDropPrompt": "Vyberte (alebo pretiahnite) všetky požadované PDF súbory", - "imgPrompt": "Vyberte obrázok(y)", - "genericSubmit": "Odoslať", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Varovanie: Tento proces môže trvať až minútu v závislosti od veľkosti súboru", - "pageOrderPrompt": "Vlastné poradie stránok (Zadajte zoznam čísel stránok oddelených čiarkou alebo funkcie ako 2n+1):", - "pageSelectionPrompt": "Vlastný výber stránok (Zadajte zoznam čísel stránok oddelených čiarkou 1,5,6 alebo funkcie ako 2n+1):", - "goToPage": "Choď", - "true": "Áno", - "false": "Nie", - "unknown": "Neznáme", - "save": "Uložiť", - "saveToBrowser": "Uložiť do prehliadača", - "close": "Zatvoriť", - "filesSelected": "vybrané súbory", - "noFavourites": "Žiadne obľúbené položky", - "downloadComplete": "Stiahnutie dokončené", - "bored": "Nudíte sa pri čakaní?", - "alphabet": "Abeceda", - "downloadPdf": "Stiahnuť PDF", - "text": "Text", - "font": "Font", - "selectFillter": "-- Vyberte --", - "pageNum": "Číslo stránky", - "sizes": { - "small": "Malé", - "medium": "Stredné", - "large": "Veľké", - "x-large": "Veľmi veľké" - }, - "error": { - "pdfPassword": "PDF dokument je chránený heslom a buď heslo nebolo zadané, alebo bolo nesprávne", - "_value": "Chyba", - "sorry": "Ospravedlňujeme sa za problém!", - "needHelp": "Potrebujete pomoc / Našli ste problém?", - "contactTip": "Ak máte stále problémy, neváhajte nás kontaktovať pre pomoc. Môžete podať tiket na našej stránke GitHub alebo nás kontaktovať cez Discord:", - "404": { - "head": "404 - Stránka nenájdená | Ups, narazili sme na chybu v kóde!", - "1": "Nemôžeme nájsť stránku, ktorú hľadáte.", - "2": "Niečo sa pokazilo" - }, - "github": "Podajte tiket na GitHub", - "showStack": "Zobraziť sledovanie zásobníka", - "copyStack": "Kopírovať sledovanie zásobníka", - "githubSubmit": "GitHub - Podajte tiket", - "discordSubmit": "Discord - Podajte príspevok na podporu" - }, - "delete": "Vymazať", - "username": "Používateľské meno", - "password": "Heslo", - "welcome": "Vitajte", - "property": "Vlastnosť", - "black": "Čierna", - "white": "Biela", - "red": "Červená", - "green": "Zelená", - "blue": "Modrá", - "custom": "Vlastné...", - "WorkInProgess": "Práca prebieha, nemusí fungovať alebo môže byť chybová, prosím nahláste akékoľvek problémy!", - "poweredBy": "Poskytované", - "yes": "Áno", - "no": "Nie", - "changedCredsMessage": "Údaje zmenené!", - "notAuthenticatedMessage": "Používateľ nie je overený.", - "userNotFoundMessage": "Používateľ nebol nájdený.", - "incorrectPasswordMessage": "Aktuálne heslo je nesprávne.", - "usernameExistsMessage": "Nové používateľské meno už existuje.", - "invalidUsernameMessage": "Neplatné používateľské meno, používateľské meno musí obsahovať len abecedné znaky a čísla.", - "invalidPasswordMessage": "The password must not be empty and must not have spaces at the beginning or end.", - "confirmPasswordErrorMessage": "New Password and Confirm New Password must match.", - "deleteCurrentUserMessage": "Nie je možné zmazať aktuálne prihláseného používateľa.", - "deleteUsernameExistsMessage": "Používateľské meno neexistuje a nemôže byť zmazané.", - "downgradeCurrentUserMessage": "Nie je možné znížiť rolu aktuálneho používateľa", - "disabledCurrentUserMessage": "The current user cannot be disabled", - "downgradeCurrentUserLongMessage": "Nie je možné znížiť rolu aktuálneho používateľa. Preto, aktuálny používateľ nebude zobrazený.", - "userAlreadyExistsOAuthMessage": "The user already exists as an OAuth2 user.", - "userAlreadyExistsWebMessage": "The user already exists as an web user.", - "oops": "Ups!", - "help": "Pomoc", - "goHomepage": "Prejsť na domovskú stránku", - "joinDiscord": "Pripojte sa na náš Discord server", - "seeDockerHub": "Pozrieť Docker Hub", - "visitGithub": "Navštíviť GitHub repozitár", - "donate": "Darovať", - "color": "Farba", - "sponsor": "Sponzorovať", - "info": "Info", - "pro": "Pro", - "page": "Page", - "pages": "Pages", - "loading": "Loading...", - "addToDoc": "Add to Document", - "reset": "Reset", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Privacy Policy", - "terms": "Terms and Conditions", - "accessibility": "Accessibility", - "cookie": "Cookie Policy", - "impressum": "Impressum", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Menu pipeline (Beta)", - "uploadButton": "Nahrať vlastný", - "configureButton": "Konfigurovať", - "defaultOption": "Vlastné", - "submitButton": "Odoslať", - "help": "Pomoc s pipeline", - "scanHelp": "Pomoc so skenovaním priečinka", - "deletePrompt": "Are you sure you want to delete pipeline", - "tags": "automatizovať,sekvencia,skriptované,dávkové spracovanie", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Konfigurácia pipeline", - "pipelineNameLabel": "Názov pipeline", - "saveSettings": "Uložiť nastavenia operácie", - "pipelineNamePrompt": "Zadajte názov pipeline tu", - "selectOperation": "Vybrať operáciu", - "addOperationButton": "Pridať operáciu", - "pipelineHeader": "Pipeline:", - "saveButton": "Stiahnuť", - "validateButton": "Overiť" - }, - "enterpriseEdition": { - "button": "Upgrade to Pro", - "warning": "This feature is only available to Pro users.", - "yamlAdvert": "Stirling PDF Pro supports YAML configuration files and other SSO features.", - "ssoAdvert": "Looking for more user management features? Check out Stirling PDF Pro" - }, - "analytics": { - "title": "Do you want make Stirling PDF better?", - "paragraph1": "Stirling PDF has opt in analytics to help us improve the product. We do not track any personal information or file contents.", - "paragraph2": "Please consider enabling analytics to help Stirling-PDF grow and to allow us to understand our users better.", - "enable": "Enable analytics", - "disable": "Disable analytics", - "settings": "You can change the settings for analytics in the config/settings.yml file" - }, - "navbar": { - "favorite": "Favorites", - "recent": "New and recently updated", - "darkmode": "Tmavý režim", - "language": "Languages", - "settings": "Nastavenia", - "allTools": "Tools", - "multiTool": "Multi Tools", - "search": "Search", - "sections": { - "organize": "Organize", - "convertTo": "Convert to PDF", - "convertFrom": "Convert from PDF", - "security": "Sign & Security", - "advance": "Advanced", - "edit": "View & Edit", - "popular": "Popular" - } - }, - "settings": { - "title": "Nastavenia", - "update": "Dostupná aktualizácia", - "updateAvailable": "{0} je aktuálne nainštalovaná verzia. Nová verzia ({1}) je dostupná.", - "appVersion": "Verzia aplikácie:", - "downloadOption": { - "title": "Vyberte možnosť sťahovania (Pre jednotlivé neskomprimované súbory):", - "1": "Otvoriť v rovnakom okne", - "2": "Otvoriť v novom okne", - "3": "Stiahnuť súbor" - }, - "zipThreshold": "Komprimovať súbory, keď počet stiahnutých súborov prekročí", - "signOut": "Odhlásiť sa", - "accountSettings": "Nastavenia účtu", - "bored": { - "help": "Umožňuje veľkonočnú hru" - }, - "cacheInputs": { - "name": "Uložiť vstupy formulára", - "help": "Umožňuje uložiť predtým použité vstupy na budúce použitie" - } - }, - "changeCreds": { - "title": "Zmeniť údaje", - "header": "Aktualizujte údaje svojho účtu", - "changePassword": "Používate predvolené prihlasovacie údaje. Prosím, zadajte nové heslo", - "newUsername": "Nové používateľské meno", - "oldPassword": "Aktuálne heslo", - "newPassword": "Nové heslo", - "confirmNewPassword": "Potvrďte nové heslo", - "submit": "Odoslať zmeny" - }, - "account": { - "title": "Nastavenia účtu", - "accountSettings": "Nastavenia účtu", - "adminSettings": "Admin nastavenia - Zobraziť a pridať používateľov", - "userControlSettings": "Nastavenia kontroly používateľov", - "changeUsername": "Zmeniť používateľské meno", - "newUsername": "Nové používateľské meno", - "password": "Potvrdzovacie heslo", - "oldPassword": "Staré heslo", - "newPassword": "Nové heslo", - "changePassword": "Zmeniť heslo", - "confirmNewPassword": "Potvrďte nové heslo", - "signOut": "Odhlásiť sa", - "yourApiKey": "Váš API kľúč", - "syncTitle": "Synchronizovať nastavenia prehliadača s účtom", - "settingsCompare": "Porovnanie nastavení:", - "property": "Vlastnosť", - "webBrowserSettings": "Nastavenie webového prehliadača", - "syncToBrowser": "Synchronizovať účet -> Prehliadač", - "syncToAccount": "Synchronizovať účet <- Prehliadač" - }, - "adminUserSettings": { - "title": "Nastavenia kontroly používateľov", - "header": "Admin nastavenia kontroly používateľov", - "admin": "Admin", - "user": "Používateľ", - "addUser": "Pridať nového používateľa", - "deleteUser": "Delete User", - "confirmDeleteUser": "Should the user be deleted?", - "confirmChangeUserStatus": "Should the user be disabled/enabled?", - "usernameInfo": "Používateľské meno musí obsahovať iba písmená a čísla, žiadne medzery alebo špeciálne znaky.", - "roles": "Role", - "role": "Rola", - "actions": "Akcie", - "apiUser": "Obmedzený API používateľ", - "extraApiUser": "Ďalší obmedzený API používateľ", - "webOnlyUser": "Používateľ iba pre web", - "demoUser": "Demo používateľ (Bez vlastných nastavení)", - "internalApiUser": "Interný API používateľ", - "forceChange": "Donútiť používateľa zmeniť heslo pri prihlásení", - "submit": "Uložiť používateľa", - "changeUserRole": "Zmeniť rolu používateľa", - "authenticated": "Authenticated", - "editOwnProfil": "Edit own profile", - "enabledUser": "enabled user", - "disabledUser": "disabled user", - "activeUsers": "Active Users:", - "disabledUsers": "Disabled Users:", - "totalUsers": "Total Users:", - "lastRequest": "Last Request", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Database Import/Export", - "header": "Database Import/Export", - "fileName": "File Name", - "creationDate": "Creation Date", - "fileSize": "File Size", - "deleteBackupFile": "Delete Backup File", - "importBackupFile": "Import Backup File", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Download Backup File", - "info_1": "When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.", - "info_2": "The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.", - "submit": "Import Backup", - "importIntoDatabaseSuccessed": "Import into database successed", - "backupCreated": "Database backup successful", - "fileNotFound": "File not Found", - "fileNullOrEmpty": "File must not be null or empty", - "failedImportFile": "Failed Import File", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "Your session has expired. Please refresh the page and try again.", - "refreshPage": "Refresh Page" - }, - "home": { - "desc": "Vaša lokálne hostovaná jednorazová zástavka pre všetky potreby PDF.", - "searchBar": "Vyhľadať funkcie...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Zobraziť, anotovať, pridať text alebo obrázky" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "PDF Multi Tool", - "desc": "Zlúčiť, otočiť, preusporiadať a odstrániť stránky" - }, - "merge": { - "title": "Zlúčiť", - "desc": "Jednoducho zlúčte viacero PDF súborov do jedného." - }, - "split": { - "title": "Rozdeliť", - "desc": "Rozdeľte PDF súbory na viacero dokumentov" - }, - "rotate": { - "title": "Otočiť", - "desc": "Jednoducho otáčajte svoje PDF súbory." - }, - "imageToPdf": { - "title": "Obrázok na PDF", - "desc": "Konvertujte obrázok (PNG, JPEG, GIF) na PDF." - }, - "pdfToImage": { - "title": "PDF na obrázok", - "desc": "Konvertujte PDF na obrázok. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Organizovať", - "desc": "Odstráňte/preusporiadajte stránky v ľubovoľnom poradí" - }, - "addImage": { - "title": "Pridať obrázok", - "desc": "Pridať obrázok na zadané miesto v PDF" - }, - "watermark": { - "title": "Pridať vodotlač", - "desc": "Pridať vlastnú vodotlač do vášho PDF dokumentu." - }, - "permissions": { - "title": "Zmeniť povolenia", - "desc": "Zmena povolení vášho PDF dokumentu" - }, - "removePages": { - "title": "Odstrániť", - "desc": "Odstrániť nechcené stránky z vášho PDF dokumentu." - }, - "addPassword": { - "title": "Pridať heslo", - "desc": "Šifrovať váš PDF dokument heslom." - }, - "removePassword": { - "title": "Odstrániť heslo", - "desc": "Odstrániť ochranu heslom z vášho PDF dokumentu." - }, - "compressPdfs": { - "title": "Komprimovať", - "desc": "Komprimujte PDF na zmenšenie jeho veľkosti." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Zmeniť metadáta", - "desc": "Zmena/Odstránenie/Pridanie metadát z PDF dokumentu" - }, - "fileToPDF": { - "title": "Konvertovať súbor na PDF", - "desc": "Konvertujte takmer akýkoľvek súbor na PDF (DOCX, PNG, XLS, PPT, TXT a ďalšie)" - }, - "ocr": { - "title": "OCR / Čistenie skenov", - "desc": "Čistenie skenov a rozpoznanie textu z obrázkov v PDF a opätovné pridanie ako text." - }, - "extractImages": { - "title": "Extrahovať obrázky", - "desc": "Extrahuje všetky obrázky z PDF a uloží ich do zipu" - }, - "pdfToPDFA": { - "title": "PDF na PDF/A", - "desc": "Konvertujte PDF na PDF/A pre dlhodobé uchovávanie" - }, - "PDFToWord": { - "title": "PDF na Word", - "desc": "Konvertujte PDF na formáty Word (DOC, DOCX a ODT)" - }, - "PDFToPresentation": { - "title": "PDF na Prezentáciu", - "desc": "Konvertujte PDF na formáty prezentácie (PPT, PPTX a ODP)" - }, - "PDFToText": { - "title": "PDF na RTF (Text)", - "desc": "Konvertujte PDF na RTF alebo textový formát" - }, - "PDFToHTML": { - "title": "PDF na HTML", - "desc": "Konvertujte PDF na HTML formát" - }, - "PDFToXML": { - "title": "PDF na XML", - "desc": "Konvertujte PDF na XML formát" - }, - "ScannerImageSplit": { - "title": "Detekcia/Rozdelenie skenovaných fotografií", - "desc": "Rozdelí viacero fotografií v rámci fotografie/PDF" - }, - "sign": { - "title": "Podpísať", - "desc": "Pridáva podpis do PDF kreslením, textom alebo obrázkom" - }, - "flatten": { - "title": "Zploštiť", - "desc": "Odstrániť všetky interaktívne prvky a formuláre z PDF" - }, - "repair": { - "title": "Opraviť", - "desc": "Skúša opraviť poškodené/rozbité PDF" - }, - "removeBlanks": { - "title": "Odstrániť prázdne stránky", - "desc": "Detekuje a odstraňuje prázdne stránky z dokumentu" - }, - "removeAnnotations": { - "title": "Odstrániť anotácie", - "desc": "Odstraňuje všetky komentáre/anotácie z PDF" - }, - "compare": { - "title": "Porovnať", - "desc": "Porovnáva a zobrazuje rozdiely medzi 2 PDF dokumentmi" - }, - "certSign": { - "title": "Podpísať s certifikátom", - "desc": "Podpísať PDF s certifikátom/kľúčom (PEM/P12)" - }, - "removeCertSign": { - "title": "Remove Certificate Sign", - "desc": "Remove certificate signature from PDF" - }, - "pageLayout": { - "title": "Viacstranové usporiadanie", - "desc": "Zlúčte viacero stránok PDF dokumentu do jednej stránky" - }, - "scalePages": { - "title": "Prispôsobiť veľkosť/škálovanie stránok", - "desc": "Zmeniť veľkosť/škálovanie stránky a/alebo jej obsahu." - }, - "pipeline": { - "title": "Pipeline", - "desc": "Spustiť viacero akcií na PDF definovaním pipeline skriptov" - }, - "add-page-numbers": { - "title": "Pridať čísla stránok", - "desc": "Pridať čísla stránok po celom dokumente na určenom mieste" - }, - "auto-rename": { - "title": "Automatické premenovanie PDF súboru", - "desc": "Automaticky premenuje PDF súbor na základe zisteného záhlavia" - }, - "adjust-contrast": { - "title": "Upraviť farby/kontrast", - "desc": "Upravte kontrast, sýtosť a jas PDF" - }, - "crop": { - "title": "Orezať PDF", - "desc": "Orezať PDF na zmenšenie jeho veľkosti (zachováva text!)" - }, - "autoSplitPDF": { - "title": "Automatické rozdelenie stránok", - "desc": "Automatické rozdelenie skenovaného PDF pomocou fyzického skenovaného rozdeľovača stránok QR kódom" - }, - "sanitizePdf": { - "title": "Vyčistiť", - "desc": "Odstrániť skripty a ďalšie prvky z PDF súborov" - }, - "URLToPDF": { - "title": "URL/Webstránka do PDF", - "desc": "Konvertuje akúkoľvek http(s)URL do PDF" - }, - "HTMLToPDF": { - "title": "HTML do PDF", - "desc": "Konvertuje akýkoľvek HTML súbor alebo zip do PDF" - }, - "MarkdownToPDF": { - "title": "Markdown do PDF", - "desc": "Konvertuje akýkoľvek Markdown súbor do PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Získať všetky informácie o PDF", - "desc": "Získava všetky dostupné informácie o PDF" - }, - "extractPage": { - "title": "Extrahovať stránku(y)", - "desc": "Extrahuje vybrané stránky z PDF" - }, - "PdfToSinglePage": { - "title": "PDF na jednu veľkú stránku", - "desc": "Zlúči všetky stránky PDF do jednej veľkej stránky" - }, - "showJS": { - "title": "Zobraziť JavaScript", - "desc": "Vyhľadá a zobrazuje akýkoľvek JS vložený do PDF" - }, - "autoRedact": { - "title": "Automatické redigovanie", - "desc": "Automaticky rediguje (zatieni) text v PDF na základe zadaného textu" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF do CSV", - "desc": "Extrahuje tabuľky z PDF a konvertuje ich do CSV" - }, - "autoSizeSplitPDF": { - "title": "Automatické rozdelenie podľa veľkosti/počtu", - "desc": "Rozdelí jeden PDF na viacero dokumentov na základe veľkosti, počtu stránok alebo počtu dokumentov" - }, - "overlay-pdfs": { - "title": "Prekrývanie PDF", - "desc": "Prekrýva PDF súbory na iný PDF" - }, - "split-by-sections": { - "title": "Rozdelenie PDF podľa sekcií", - "desc": "Rozdelí každú stránku PDF na menšie horizontálne a vertikálne sekcie" - }, - "AddStampRequest": { - "title": "Pridať pečiatku do PDF", - "desc": "Pridať text alebo obrázkové pečiatky na určené miesta" - }, - "removeImagePdf": { - "title": "Remove image", - "desc": "Remove image from PDF to reduce file size" - }, - "splitPdfByChapters": { - "title": "Split PDF by Chapters", - "desc": "Split a PDF into multiple files based on its chapter structure." - }, - "validateSignature": { - "title": "Validate PDF Signature", - "desc": "Verify digital signatures and certificates in PDF documents" - }, - "replaceColorPdf": { - "title": "Replace and Invert Color", - "desc": "Replace color for text and background in PDF and invert full color of pdf to reduce file size" - } - }, - "viewPdf": { - "tags": "zobraziť,čítať,anotovať,text,obrázok", - "title": "View/Edit PDF", - "header": "Zobraziť PDF" - }, - "multiTool": { - "tags": "Multi Tool,Multi operácie,UI,klik drag,front end,beží na klientovi,interaktívne,intraktívne,posunúť", - "title": "PDF Multi Nástroj", - "header": "PDF Multi Nástroj", - "uploadPrompts": "File Name", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "selectPages": "Page Select", - "selectedPages": "Selected Pages", - "page": "Page", - "deleteSelected": "Delete Selected", - "downloadAll": "Export", - "downloadSelected": "Export Selected", - "insertPageBreak": "Insert Page Break", - "addFile": "Add File", - "rotateLeft": "Rotate Left", - "rotateRight": "Rotate Right", - "split": "Split", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "Delete", - "dragDropMessage": "Page(s) Selected", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "zlúčenie,operácie so stránkami,back end,beží na serveri", - "title": "Zlúčiť", - "header": "Zlúčiť viacero PDF (2+)", - "sortByName": "Zoradiť podľa názvu", - "sortByDate": "Zoradiť podľa dátumu", - "removeCertSign": "Remove digital signature in the merged file?", - "submit": "Zlúčiť" - }, - "split": { - "tags": "operácie so stránkami,rozdelenie,viacstranové,rozrezať,beží na serveri", - "title": "Rozdeliť PDF", - "header": "Rozdeliť PDF", - "desc": { - "1": "Čísla vybrané sú čísla stránok, na ktorých chcete urobiť rozdelenie", - "2": "Takže výber 1,3,7-9 by rozdelil 10-stranový dokument na 6 samostatných PDF s:", - "3": "Dokument č. 1: Strana 1", - "4": "Dokument č. 2: Strany 2 a 3", - "5": "Dokument č. 3: Strany 4, 5, 6, 7", - "6": "Dokument č. 4: Strana 8", - "7": "Dokument č. 5: Strana 9", - "8": "Dokument č. 6: Strana 10" - }, - "splitPages": "Zadajte stránky na rozdelenie:", - "submit": "Rozdeliť" - }, - "rotate": { - "tags": "beží na serveri", - "title": "Otočiť PDF", - "header": "Otočiť PDF", - "selectAngle": "Vyberte uhol otočenia (v násobkoch 90 stupňov):", - "submit": "Otočiť" - }, - "imageToPdf": { - "tags": "konverzia,img,jpg,obrázok,fotografia" - }, - "pdfToImage": { - "tags": "konverzia,img,jpg,obrázok,fotografia", - "title": "PDF na obrázok", - "header": "PDF na obrázok", - "selectText": "Formát obrázka", - "singleOrMultiple": "Typ výsledného obrázka", - "single": "Jedna veľká snímka", - "multi": "Viaceré snímky", - "colorType": "Typ farby", - "color": "Farba", - "grey": "Odtiene šedej", - "blackwhite": "Čierno-biele (Môže stratiť údaje!)", - "submit": "Konvertovať", - "info": "Python is not installed. Required for WebP conversion.", - "placeholder": "(napr. 1,2,8 alebo 4,7,12-16 alebo 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,nepárne,párne,zoradiť,posunúť", - "title": "Organizátor stránok", - "header": "Organizátor stránok PDF", - "submit": "Preusporiadať stránky", - "mode": { - "_value": "Režim", - "1": "Vlastné poradie stránok", - "2": "Obrátené poradie", - "3": "Duplexné triedenie", - "4": "Triedená brožúra", - "5": "Brožúra s bočným šitím", - "6": "Rozdelenie na nepárne a párne", - "7": "Odstrániť prvú", - "8": "Odstrániť poslednú", - "9": "Odstrániť prvú aj poslednú", - "10": "Odd-Even Merge", - "11": "Duplicate all pages" - }, - "placeholder": "(napr. 1,3,2 alebo 4-8,2,10-12 alebo 2n-1)" - }, - "addImage": { - "tags": "img,jpg,obrázok,fotografia", - "title": "Pridať obrázok", - "header": "Pridať obrázok do PDF", - "everyPage": "Každá stránka?", - "upload": "Pridať obrázok", - "submit": "Pridať obrázok" - }, - "watermark": { - "tags": "Text,opakujúci sa,označenie,vlastné,autorské práva,ochranná známka,img,jpg,obrázok,fotografia", - "title": "Pridať vodotlač", - "header": "Pridať vodotlač", - "customColor": "Vlastná farba textu", - "selectText": { - "1": "Vyberte PDF, do ktorého chcete pridať vodotlač:", - "2": "Text vodotlače:", - "3": "Veľkosť písma:", - "4": "Rotácia (0-360):", - "5": "Šírka medzery (Medzera medzi jednotlivými vodotlačami horizontálne):", - "6": "Výška medzery (Medzera medzi jednotlivými vodotlačami vertikálne):", - "7": "Priehľadnosť (0% - 100%):", - "8": "Typ vodotlače:", - "9": "Obrázok vodotlače:", - "10": "Convert PDF to PDF-Image" - }, - "submit": "Pridať vodotlač", - "type": { - "1": "Text", - "2": "Obrázok" - } - }, - "permissions": { - "tags": "čítať,písať,upravovať,tlačiť", - "title": "Zmeniť povolenia", - "header": "Zmeniť povolenia", - "warning": "Varovanie: Aby boli tieto povolenia nemenné, odporúča sa nastaviť ich s heslom cez stránku pridania hesla", - "selectText": { - "1": "Vyberte PDF na zmenu povolení", - "2": "Nastavenia povolení", - "3": "Zakázať zostavovanie dokumentu", - "4": "Zakázať extrakciu obsahu", - "5": "Zakázať extrakciu pre prístupnosť", - "6": "Zakázať vypĺňanie formulárov", - "7": "Zakázať úpravy", - "8": "Zakázať úpravu anotácií", - "9": "Zakázať tlač", - "10": "Zakázať tlač rôznych formátov" - }, - "submit": "Zmeniť" - }, - "removePages": { - "tags": "Odstrániť stránky,vymazať stránky" - }, - "addPassword": { - "tags": "zaistiť,bezpečnosť", - "title": "Pridať heslo", - "header": "Pridať heslo (Zašifrovať)", - "selectText": { - "1": "Vyberte PDF na zašifrovanie", - "2": "Používateľské heslo", - "3": "Dĺžka šifrovacieho kľúča", - "4": "Vyššie hodnoty sú silnejšie, ale nižšie hodnoty majú lepšiu kompatibilitu.", - "5": "Nastavenia povolení (Odporúča sa používať spolu s heslom vlastníka)", - "6": "Zakázať zostavovanie dokumentu", - "7": "Zakázať extrakciu obsahu", - "8": "Zakázať extrakciu pre prístupnosť", - "9": "Zakázať vypĺňanie formulárov", - "10": "Zakázať úpravy", - "11": "Zakázať úpravu anotácií", - "12": "Zakázať tlač", - "13": "Zakázať tlač rôznych formátov", - "14": "Heslo vlastníka", - "15": "Obmedzuje, čo môže byť vykonané s dokumentom po jeho otvorení (Nepodporované všetkými čítačmi)", - "16": "Obmedzuje samotné otvorenie dokumentu" - }, - "submit": "Zašifrovať" - }, - "removePassword": { - "tags": "zaistiť,Dešifrovať,bezpečnosť,odheslovať,vymazať heslo", - "title": "Odstrániť heslo", - "header": "Odstrániť heslo (Dešifrovať)", - "selectText": { - "1": "Vyberte PDF na dešifrovanie", - "2": "Heslo" - }, - "submit": "Odstrániť" - }, - "compressPdfs": { - "tags": "stlačiť,malé,drobné" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Názov,autor,dátum,vytvorenie,čas,vydavateľ,producent,štatistiky", - "title": "Zmeniť metadáta", - "header": "Zmeniť metadáta", - "selectText": { - "1": "Prosím, upravte premenné, ktoré chcete zmeniť", - "2": "Vymazať všetky metadáta", - "3": "Zobraziť vlastné metadáta:", - "4": "Iné metadáta:", - "5": "Pridať vlastný záznam metadát" - }, - "author": "Autor:", - "creationDate": "Dátum vytvorenia (yyyy/MM/dd HH:mm:ss):", - "creator": "Tvorca:", - "keywords": "Kľúčové slová:", - "modDate": "Dátum úpravy (yyyy/MM/dd HH:mm:ss):", - "producer": "Producent:", - "subject": "Predmet:", - "trapped": "Zachytené:", - "submit": "Zmeniť" - }, - "fileToPDF": { - "tags": "transformácia,formát,dokument,obrázok,prezentácia,text,konverzia,kancelária,dokumenty,word,excel,powerpoint", - "title": "Súbor do PDF", - "header": "Konvertovať akýkoľvek súbor do PDF", - "credit": "Táto služba používa LibreOffice a Unoconv pre konverziu súborov.", - "supportedFileTypesInfo": "Supported File types", - "supportedFileTypes": "Podporované typy súborov by mali zahŕňať nižšie uvedené, avšak pre úplný aktualizovaný zoznam podporovaných formátov, prosím, odkazujte na dokumentáciu LibreOffice", - "submit": "Konvertovať do PDF" - }, - "ocr": { - "tags": "rozpoznanie,text,obrázok,scan,čítať,identifikovať,detekcia,upraviteľné", - "title": "OCR / Čistenie skenov", - "header": "Čistenie skenov / OCR (Optické rozpoznávanie znakov)", - "selectText": { - "1": "Vyberte jazyky, ktoré majú byť detekované v PDF (Uvedené sú tie, ktoré sú aktuálne detekované):", - "2": "Vytvoriť textový súbor obsahujúci OCR text spolu s OCR PDF", - "3": "Opraviť stránky, ktoré boli naskenované pod uhlom, otočením späť na miesto", - "4": "Vyčistiť stránku, aby OCR menej pravdepodobne našlo text v šume pozadia. (Žiadna zmena výstupu)", - "5": "Vyčistiť stránku, aby OCR menej pravdepodobne našlo text v šume pozadia, zachováva čistenie vo výstupe.", - "6": "Ignoruje stránky, ktoré majú interaktívny text, OCR iba stránky, ktoré sú obrázky", - "7": "Vynútiť OCR, OCR každú stránku odstránením všetkých pôvodných textových prvkov", - "8": "Normálne (Chyba, ak PDF obsahuje text)", - "9": "Ďalšie nastavenia", - "10": "OCR režim", - "11": "Odstrániť obrázky po OCR (Odstráni VŠETKY obrázky, užitočné iba ak je súčasťou konverzného kroku)", - "12": "Typ vykreslenia (Pokročilé)" - }, - "help": "Prosím, prečítajte si túto dokumentáciu o tom, ako používať OCR pre iné jazyky a/alebo použitie mimo docker", - "credit": "Táto služba používa qpdf a Tesseract pre OCR.", - "submit": "Spracovať PDF s OCR" - }, - "extractImages": { - "tags": "obrázok,fotografia,uložiť,archív,zip,zachytiť,chytiť", - "title": "Extrahovať obrázky", - "header": "Extrahovať obrázky", - "selectText": "Vyberte formát obrázka na konverziu extrahovaných obrázkov", - "allowDuplicates": "Save duplicate images", - "submit": "Extrahovať" - }, - "pdfToPDFA": { - "tags": "archív,dĺhodobé,štandard,konverzia,uchovanie", - "title": "PDF na PDF/A", - "header": "PDF na PDF/A", - "credit": "Táto služba používa libreoffice na konverziu PDF/A", - "submit": "Konvertovať", - "tip": "Momentálne nefunguje pre viacero vstupov naraz", - "outputFormat": "Výstupný formát", - "pdfWithDigitalSignature": "The PDF contains a digital signature. This will be removed in the next step." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformácia,formát,konverzia,kancelária,microsoft,dokument", - "title": "PDF na Word", - "header": "PDF na Word", - "selectText": { - "1": "Výstupný formát súboru" - }, - "credit": "Táto služba používa LibreOffice na konverziu súborov.", - "submit": "Konvertovať" - }, - "PDFToPresentation": { - "tags": "slajdy,prezentácia,kancelária,microsoft", - "title": "PDF na Prezentáciu", - "header": "PDF na Prezentáciu", - "selectText": { - "1": "Výstupný formát súboru" - }, - "credit": "Táto služba používa LibreOffice na konverziu súborov.", - "submit": "Konvertovať" - }, - "PDFToText": { - "tags": "bohatý formát,bohatý textový formát,bohatý text", - "title": "PDF na RTF (Text)", - "header": "PDF na RTF (Text)", - "selectText": { - "1": "Výstupný formát súboru" - }, - "credit": "Táto služba používa LibreOffice na konverziu súborov.", - "submit": "Konvertovať" - }, - "PDFToHTML": { - "tags": "webový obsah,prehliadač priateľský", - "title": "PDF na HTML", - "header": "PDF na HTML", - "credit": "Táto služba používa pdftohtml na konverziu súborov.", - "submit": "Konvertovať" - }, - "PDFToXML": { - "tags": "extrakcia dát,štruktúrovaný obsah,interop,transformácia,konvertovať", - "title": "PDF na XML", - "header": "PDF na XML", - "credit": "Táto služba používa LibreOffice na konverziu súborov.", - "submit": "Konvertovať" - }, - "ScannerImageSplit": { - "tags": "rozdeliť,auto-detekcia,skeny,viac-fotografií,organizovať", - "selectText": { - "1": "Prahová hodnota uhla:", - "2": "Nastaví minimálny absolútny uhol potrebný na otočenie obrázka (predvolené: 10).", - "3": "Tolerancia:", - "4": "Určuje rozsah farebnej variácie okolo odhadovanej farby pozadia (predvolené: 30).", - "5": "Minimálna plocha:", - "6": "Nastaví minimálnu prahovú hodnotu plochy pre fotografiu (predvolené: 10000).", - "7": "Minimálna plocha obrysu:", - "8": "Nastaví minimálnu prahovú hodnotu plochy obrysu pre fotografiu", - "9": "Veľkosť okraja:", - "10": "Nastaví veľkosť okraja pridaného a odstráneného, aby sa zabránilo bielym okrajom vo výstupe (predvolené: 1)." - }, - "info": "Python is not installed. It is required to run." - }, - "sign": { - "tags": "autorizovať,iniciály,kreslený podpis,textový podpis,obrázkový podpis", - "title": "Podpísať", - "header": "Podpísať PDF", - "upload": "Nahrať obrázok", - "draw": "Kresliť podpis", - "text": "Textový vstup", - "clear": "Vymazať", - "add": "Pridať", - "saved": "Saved Signatures", - "save": "Save Signature", - "personalSigs": "Personal Signatures", - "sharedSigs": "Shared Signatures", - "noSavedSigs": "No saved signatures found", - "addToAll": "Add to all pages", - "delete": "Delete", - "first": "First page", - "last": "Last page", - "next": "Next page", - "previous": "Previous page", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "statické,deaktivovať,neinteraktívne,zjednodušiť", - "title": "Zploštiť", - "header": "Zploštiť PDF", - "flattenOnlyForms": "Zploštiť iba formuláre", - "submit": "Zploštiť" - }, - "repair": { - "tags": "opraviť,obnoviť,oprava,obnovenie", - "title": "Opraviť", - "header": "Opraviť PDF", - "submit": "Opraviť" - }, - "removeBlanks": { - "tags": "čistenie,zjednodušiť,neobsah,organizovať", - "title": "Odstrániť prázdne stránky", - "header": "Odstrániť prázdne stránky", - "threshold": "Prahová hodnota bielych pixelov:", - "thresholdDesc": "Prahová hodnota pre určenie, ako biely musí byť biely pixel, aby bol klasifikovaný ako 'biely'. 0 = čierny, 255 = čistá biela.", - "whitePercent": "Percento bielych pixelov (%):", - "whitePercentDesc": "Percento stránky, ktoré musí byť 'biele' pixely, aby bola odstránená", - "submit": "Odstrániť prázdne stránky" - }, - "removeAnnotations": { - "tags": "komentáre,zdôraznenie,poznámky,označenie,odstrániť", - "title": "Odstrániť anotácie", - "header": "Odstrániť anotácie", - "submit": "Odstrániť" - }, - "compare": { - "tags": "odlišovať,kontrast,zmeny,analýza", - "title": "Porovnať", - "header": "Porovnať PDF", - "highlightColor": { - "1": "Highlight Color 1:", - "2": "Highlight Color 2:" - }, - "document": { - "1": "Dokument 1", - "2": "Dokument 2" - }, - "submit": "Porovnať", - "complex": { - "message": "One or both of the provided documents are large files, accuracy of comparison may be reduced" - }, - "large": { - "file": { - "message": "One or Both of the provided documents are too large to process" - } - }, - "no": { - "text": { - "message": "One or both of the selected PDFs have no text content. Please choose PDFs with text for comparison." - } - } - }, - "certSign": { - "tags": "autentifikovať,PEM,P12,oficiálne,šifrovať", - "title": "Podpis certifikátom", - "header": "Podpísať PDF certifikátom (Práca prebieha)", - "selectPDF": "Vyberte PDF súbor na podpis:", - "jksNote": "Poznámka: Ak váš typ certifikátu nie je uvedený nižšie, prosím, konvertujte ho na Java Keystore (.jks) súbor pomocou nástroja keytool. Potom vyberte možnosť .jks súbor nižšie.", - "selectKey": "Vyberte váš súkromný kľúčový súbor (formát PKCS#8, môže byť .pem alebo .der):", - "selectCert": "Vyberte váš certifikátový súbor (formát X.509, môže byť .pem alebo .der):", - "selectP12": "Vyberte váš PKCS#12 Keystore súbor (.p12 alebo .pfx) (Voliteľné, ak je poskytnuté, malo by obsahovať váš súkromný kľúč a certifikát):", - "selectJKS": "Vyberte váš Java Keystore súbor (.jks alebo .keystore):", - "certType": "Typ certifikátu", - "password": "Zadajte heslo pre Keystore alebo súkromný kľúč (ak existuje):", - "showSig": "Zobraziť podpis", - "reason": "Dôvod", - "location": "Miesto", - "name": "Meno", - "showLogo": "Show Logo", - "submit": "Podpísať PDF" - }, - "removeCertSign": { - "tags": "authenticate,PEM,P12,official,decrypt", - "title": "Remove Certificate Signature", - "header": "Remove the digital certificate from the PDF", - "selectPDF": "Select a PDF file:", - "submit": "Remove Signature" - }, - "pageLayout": { - "tags": "zlúčiť,zjednotiť,jednostranový pohľad,organizovať", - "title": "Viacstranové usporiadanie", - "header": "Viacstranové usporiadanie", - "pagesPerSheet": "Stránky na list:", - "addBorder": "Pridať okraje", - "submit": "Odoslať" - }, - "scalePages": { - "tags": "veľkosť,modifikovať,rozmery,prispôsobiť", - "title": "Upraviť mierku stránky", - "header": "Upraviť mierku stránky", - "pageSize": "Veľkosť stránky dokumentu.", - "keepPageSize": "Original Size", - "scaleFactor": "Úroveň priblíženia (orezania) stránky.", - "submit": "Odoslať" - }, - "add-page-numbers": { - "tags": "číslovať,označiť,organizovať,indexovať" - }, - "auto-rename": { - "tags": "auto-detekcia, založené na záhlaví, organizovať, premenovať", - "title": "Automatické premenovanie", - "header": "Automatické premenovanie PDF", - "submit": "Automaticky premenovať" - }, - "adjust-contrast": { - "tags": "farbová korekcia, doladenie, upraviť, zlepšiť" - }, - "crop": { - "tags": "orezať, zmenšiť, upraviť, tvarovať", - "title": "Orezať", - "header": "Orezať PDF", - "submit": "Odoslať" - }, - "autoSplitPDF": { - "tags": "QR-založené, rozdeľ, skenovanie-segment, organizovať", - "title": "Automatické rozdelenie PDF", - "header": "Automatické rozdelenie PDF", - "description": "Vytlačte, vložte, naskenujte, nahrajte a nechajte nás automaticky oddeliť vaše dokumenty. Žiadna manuálna práca nie je potrebná.", - "selectText": { - "1": "Vytlačte si niekoľko rozdeľovacích listov nižšie (Čierno-biele je v poriadku).", - "2": "Naskenujte všetky svoje dokumenty naraz vložením rozdeľovacieho listu medzi ne.", - "3": "Nahrajte jeden veľký naskenovaný PDF súbor a nechajte Stirling PDF urobiť zvyšok.", - "4": "Rozdeľovacie stránky sú automaticky detekované a odstránené, čo zaručuje čistý konečný dokument." - }, - "formPrompt": "Odoslať PDF obsahujúce Stirling-PDF rozdeľovače stránok:", - "duplexMode": "Duplex režim (skanovanie prednej a zadnej strany)", - "dividerDownload2": "Stiahnuť 'Auto Splitter Divider (s inštrukciami).pdf'", - "submit": "Odoslať" - }, - "sanitizePdf": { - "tags": "čistiť, zabezpečiť, bezpečné, odstrániť hrozby" - }, - "URLToPDF": { - "tags": "webová snímka, uložiť stránku, web do dokumentu, archív", - "title": "URL do PDF", - "header": "URL do PDF", - "submit": "Konvertovať", - "credit": "Používa WeasyPrint" - }, - "HTMLToPDF": { - "tags": "markup, webový obsah, transformácia, konvertovať", - "title": "HTML do PDF", - "header": "HTML do PDF", - "help": "Akceptuje HTML súbory a ZIPy obsahujúce html/css/obrázky atď. potrebné", - "submit": "Konvertovať", - "credit": "Používa WeasyPrint", - "zoom": "Úroveň priblíženia pre zobrazenie webstránky.", - "pageWidth": "Šírka stránky v centimetroch. (Prázdne pre predvolené)", - "pageHeight": "Výška stránky v centimetroch. (Prázdne pre predvolené)", - "marginTop": "Horný okraj stránky v milimetroch. (Prázdne pre predvolené)", - "marginBottom": "Dolný okraj stránky v milimetroch. (Prázdne pre predvolené)", - "marginLeft": "Ľavý okraj stránky v milimetroch. (Prázdne pre predvolené)", - "marginRight": "Pravý okraj stránky v milimetroch. (Prázdne pre predvolené)", - "printBackground": "Vykresliť pozadie webstránok.", - "defaultHeader": "Povoliť predvolené záhlavie (Názov a číslo stránky)", - "cssMediaType": "Zmeniť typ CSS médií stránky.", - "none": "Žiadne", - "print": "Tlač", - "screen": "Obrazovka" - }, - "MarkdownToPDF": { - "tags": "markup, webový obsah, transformácia, konvertovať", - "title": "Markdown do PDF", - "header": "Markdown do PDF", - "submit": "Konvertovať", - "help": "Práca prebieha", - "credit": "Používa WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "informácie, údaje, štatistiky", - "title": "Získať informácie o PDF", - "header": "Získať informácie o PDF", - "submit": "Získať info", - "downloadJson": "Stiahnuť JSON" - }, - "extractPage": { - "tags": "extrahovať" - }, - "PdfToSinglePage": { - "tags": "jedna stránka" - }, - "showJS": { - "tags": "JS", - "title": "Zobraziť JavaScript", - "header": "Zobraziť JavaScript", - "downloadJS": "Stiahnuť JavaScript", - "submit": "Zobraziť" - }, - "autoRedact": { - "tags": "redigovať, skryť, zatieniť, čierne, marker, skryté", - "title": "Automatické redigovanie", - "header": "Automatické redigovanie", - "colorLabel": "Farba", - "textsToRedactLabel": "Text na redigovanie (oddelený riadkami)", - "textsToRedactPlaceholder": "napr. \\nDôverné \\nPrísne tajné", - "useRegexLabel": "Použiť Regex", - "wholeWordSearchLabel": "Vyhľadávanie celých slov", - "customPaddingLabel": "Vlastné odsadenie", - "convertPDFToImageLabel": "Konvertovať PDF na PDF-Obrázok (Používa sa na odstránenie textu za boxom)", - "submitButton": "Odoslať" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV, extrakcia tabuliek, extrahovať, konvertovať" - }, - "autoSizeSplitPDF": { - "tags": "pdf, rozdelenie, dokument, organizácia" - }, - "overlay-pdfs": { - "tags": "prekrývanie", - "header": "Prekrytie PDF súborov", - "baseFile": { - "label": "Vyberte základný PDF súbor" - }, - "overlayFiles": { - "label": "Vyberte prekryvné PDF súbory" - }, - "mode": { - "label": "Vyberte režim prekrytia", - "sequential": "Sériové prekrytie", - "interleaved": "Prepletené prekrytie", - "fixedRepeat": "Pevné opakované prekrytie" - }, - "counts": { - "label": "Počty prekrytí (pre režim pevného opakovania)", - "placeholder": "Zadajte počty oddelené čiarkami (napr. 2,3,1)" - }, - "position": { - "label": "Vyberte pozíciu prekrytia", - "foreground": "Popredie", - "background": "Pozadie" - }, - "submit": "Odoslať" - }, - "split-by-sections": { - "tags": "rozdelenie sekcií, rozdeliť, prispôsobiť", - "title": "Rozdeliť PDF podľa sekcií", - "header": "Rozdeliť PDF na sekcie", - "horizontal": { - "label": "Horizontálne delenia", - "placeholder": "Zadajte počet horizontálnych delení" - }, - "vertical": { - "label": "Vertikálne delenia", - "placeholder": "Zadajte počet vertikálnych delení" - }, - "submit": "Rozdeliť PDF", - "merge": "Zlúčiť do jedného PDF" - }, - "AddStampRequest": { - "tags": "pečiatka, pridať obrázok, stred obrázka, vodotlač, PDF, vložiť, prispôsobiť", - "header": "Pečiatka PDF", - "title": "Pečiatka PDF", - "stampType": "Typ pečiatky", - "stampText": "Text pečiatky", - "stampImage": "Obrázok pečiatky", - "alphabet": "Abeceda", - "fontSize": "Veľkosť písma/obrázka", - "rotation": "Rotácia", - "opacity": "Priehľadnosť", - "position": "Poloha", - "overrideX": "Nahradiť súradnicu X", - "overrideY": "Nahradiť súradnicu Y", - "customMargin": "Vlastný okraj", - "customColor": "Vlastná farba textu", - "submit": "Odoslať" - }, - "removeImagePdf": { - "tags": "Remove Image,Page operations,Back end,server side" - }, - "splitPdfByChapters": { - "tags": "split,chapters,bookmarks,organize" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "Validate PDF Signatures", - "header": "Validate Digital Signatures", - "selectPDF": "Select signed PDF file", - "submit": "Validate Signatures", - "results": "Validation Results", - "status": { - "_value": "Status", - "valid": "Valid", - "invalid": "Invalid" - }, - "signer": "Signer", - "date": "Date", - "reason": "Reason", - "location": "Location", - "noSignatures": "No digital signatures found in this document", - "chain": { - "invalid": "Certificate chain validation failed - cannot verify signer's identity" - }, - "trust": { - "invalid": "Certificate not in trust store - source cannot be verified" - }, - "cert": { - "expired": "Certificate has expired", - "revoked": "Certificate has been revoked", - "info": "Certificate Details", - "issuer": "Issuer", - "subject": "Subject", - "serialNumber": "Serial Number", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "algorithm": "Algorithm", - "keySize": "Key Size", - "version": "Version", - "keyUsage": "Key Usage", - "selfSigned": "Self-Signed", - "bits": "bits" - }, - "signature": { - "info": "Signature Information", - "_value": "Signature", - "mathValid": "Signature is mathematically valid BUT:" - }, - "selectCustomCert": "Custom Certificate File X.509 (Optional)" - }, - "replace-color": { - "title": "Replace-Invert-Color", - "header": "Replace-Invert Color PDF", - "selectText": { - "1": "Replace or Invert color Options", - "2": "Default(Default high contrast colors)", - "3": "Custom(Customized colors)", - "4": "Full-Invert(Invert all colors)", - "5": "High contrast color options", - "6": "white text on black background", - "7": "Black text on white background", - "8": "Yellow text on black background", - "9": "Green text on black background", - "10": "Choose text Color", - "11": "Choose background Color" - }, - "submit": "Replace" - }, - "replaceColorPdf": { - "tags": "Replace Color,Page operations,Back end,server side" - }, - "login": { - "title": "Prihlásenie", - "header": "Prihlásenie", - "signin": "Prihlásiť sa", - "rememberme": "Zapamätať si ma", - "invalid": "Neplatné používateľské meno alebo heslo.", - "locked": "Váš účet bol uzamknutý.", - "signinTitle": "Prosím, prihláste sa", - "ssoSignIn": "Prihlásiť sa cez Single Sign-on", - "oAuth2AutoCreateDisabled": "Vytváranie používateľa cez OAUTH2 je zakázané", - "oAuth2AdminBlockedUser": "Registration or logging in of non-registered users is currently blocked. Please contact the administrator.", - "oauth2RequestNotFound": "Authorization request not found", - "oauth2InvalidUserInfoResponse": "Invalid User Info Response", - "oauth2invalidRequest": "Invalid Request", - "oauth2AccessDenied": "Access Denied", - "oauth2InvalidTokenResponse": "Invalid Token Response", - "oauth2InvalidIdToken": "Invalid Id Token", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "User is deactivated, login is currently blocked with this username. Please contact the administrator.", - "alreadyLoggedIn": "You are already logged in to", - "alreadyLoggedIn2": "devices. Please log out of the devices and try again.", - "toManySessions": "You have too many active sessions", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF na jednu stránku", - "header": "PDF na jednu stránku", - "submit": "Konvertovať na jednu stránku" - }, - "pageExtracter": { - "title": "Extrahovať stránky", - "header": "Extrahovať stránky", - "submit": "Extrahovať", - "placeholder": "(napr. 1,2,8 alebo 4,7,12-16 alebo 2n-1)" - }, - "sanitizePDF": { - "title": "Vyčistiť PDF", - "header": "Vyčistiť PDF súbor", - "selectText": { - "1": "Odstrániť JavaScript akcie", - "2": "Odstrániť vložené súbory", - "3": "Remove XMP metadata", - "4": "Odstrániť odkazy", - "5": "Odstrániť fonty", - "6": "Remove Document Info Metadata" - }, - "submit": "Vyčistiť PDF" - }, - "adjustContrast": { - "title": "Upraviť kontrast", - "header": "Upraviť kontrast", - "contrast": "Kontrast:", - "brightness": "Jas:", - "saturation": "Sýtosť:", - "download": "Stiahnuť" - }, - "compress": { - "title": "Komprimovať", - "header": "Komprimovať PDF", - "credit": "Táto služba používa qpdf pre kompresiu/optimalizáciu PDF.", - "grayscale": { - "label": "Použiť odtiene šedej na kompresiu" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Úroveň optimalizácie:", - "4": "Automatický režim - Automaticky upravuje kvalitu, aby sa PDF dostalo na presnú veľkosť", - "5": "Očakávaná veľkosť PDF (napr. 25MB, 10.8MB, 25KB)" - }, - "submit": "Komprimovať" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "This feature is also available in our multi-tool page. Check it out for enhanced page-by-page UI and additional features!" - }, - "pageRemover": { - "title": "Odstraňovač stránok", - "header": "Odstraňovač stránok PDF", - "pagesToDelete": "Stránky na odstránenie (Zadajte zoznam čísel stránok oddelených čiarkami):", - "submit": "Odstrániť stránky", - "placeholder": "(napr. 1,2,6 alebo 1-10,15-30)" - }, - "imageToPDF": { - "title": "Obrázok na PDF", - "header": "Obrázok na PDF", - "submit": "Konvertovať", - "selectLabel": "Možnosti prispôsobenia obrázka", - "fillPage": "Vyplniť stránku", - "fitDocumentToImage": "Prispôsobiť stránku obrázku", - "maintainAspectRatio": "Zachovať pomery strán", - "selectText": { - "2": "Automatické otočenie PDF", - "3": "Logika pre viac súborov (Povolí sa len, ak pracujete s viacerými obrázkami)", - "4": "Zlúčiť do jedného PDF", - "5": "Konvertovať na samostatné PDF" - } - }, - "PDFToCSV": { - "title": "PDF na CSV", - "header": "PDF na CSV", - "prompt": "Vyberte stránku na extrakciu tabuľky", - "submit": "Extrahovať" - }, - "split-by-size-or-count": { - "title": "Rozdeliť PDF podľa veľkosti alebo počtu", - "header": "Rozdeliť PDF podľa veľkosti alebo počtu", - "type": { - "label": "Vyberte typ rozdelenia", - "size": "Podľa veľkosti", - "pageCount": "Podľa počtu stránok", - "docCount": "Podľa počtu dokumentov" - }, - "value": { - "label": "Zadajte hodnotu", - "placeholder": "Zadajte veľkosť (napr. 2MB alebo 3KB) alebo počet (napr. 5)" - }, - "submit": "Odoslať" - }, - "printFile": { - "title": "Vytlačiť súbor", - "header": "Vytlačiť súbor na tlačiareň", - "selectText": { - "1": "Vyberte súbor na tlač", - "2": "Zadajte názov tlačiarne" - }, - "submit": "Vytlačiť" - }, - "licenses": { - "nav": "Licencie", - "title": "Licencie tretích strán", - "header": "Licencie tretích strán", - "module": "Modul", - "version": "Verzia", - "license": "Licencia" - }, - "survey": { - "nav": "Survey", - "title": "Stirling-PDF Survey", - "description": "Stirling-PDF has no tracking so we want to hear from our users to improve Stirling-PDF!", - "changes": "Stirling-PDF has changed since the last survey! To find out more please check our blog post here:", - "changes2": "With these changes we are getting paid business support and funding", - "please": "Please consider taking our survey!", - "disabled": "(Survey popup will be disabled in following updates but available at foot of page)", - "button": "Take Survey", - "dontShowAgain": "Don't show again", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Remove image", - "header": "Remove image", - "removeImage": "Remove image", - "submit": "Remove image" - }, - "splitByChapters": { - "title": "Split PDF by Chapters", - "header": "Split PDF by Chapters", - "bookmarkLevel": "Bookmark Level", - "includeMetadata": "Include Metadata", - "allowDuplicates": "Allow Duplicates", - "desc": { - "1": "This tool splits a PDF file into multiple PDFs based on its chapter structure.", - "2": "Bookmark Level: Choose the level of bookmarks to use for splitting (0 for top-level, 1 for second-level, etc.).", - "3": "Include Metadata: If checked, the original PDF's metadata will be included in each split PDF.", - "4": "Allow Duplicates: If checked, allows multiple bookmarks on the same page to create separate PDFs." - }, - "submit": "Split PDF" - }, - "fileChooser": { - "click": "Click", - "or": "or", - "dragAndDrop": "Drag & Drop", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "Drag & Drop file(s) here", - "extractPDF": "Extracting..." - }, - "releases": { - "footer": "Releases", - "title": "Release Notes", - "header": "Release Notes", - "current": { - "version": "Current Release" - }, - "note": "Release notes are only available in English" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/sl-SI/translation.json b/frontend/dist/locales/sl-SI/translation.json deleted file mode 100644 index 68f9e3eb5..000000000 --- a/frontend/dist/locales/sl-SI/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Velikost pisave", - "fontName": "Ime pisave", - "title": "Dodaj številke strani", - "header": "Dodaj številke strani", - "selectText": { - "1": "Izberite datoteko PDF:", - "2": "Velikost roba", - "3": "Položaj", - "4": "Začetna številka", - "5": "Strani v številko", - "6": "Besedilo po meri" - }, - "customTextDesc": "Besedilo po meri", - "numberPagesDesc": "Katere strani oštevilčiti, privzeto 'vse', sprejema tudi 1-5 ali 2,5,9 itd.", - "customNumberDesc": "Privzeto na {n}, sprejema tudi 'Stran {n} od {total}', 'Besedilo-{n}', '{filename}-{n}", - "submit": "Dodaj številke strani" - }, - "pdfPrompt": "Izberi PDF(e)", - "multiPdfPrompt": "Izberi PDF (2+)", - "multiPdfDropPrompt": "Izberite (ali povlecite in spustite) vse datoteke PDF, ki jih potrebujete", - "imgPrompt": "Izberite sliko(e)", - "genericSubmit": "Pošlji", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Opozorilo: ta postopek lahko traja do minute, odvisno od velikosti datoteke", - "pageOrderPrompt": "Vrstni red strani po meri (Vnesite z vejicami ločen seznam številk strani ali funkcij, kot je 2n+1) :", - "pageSelectionPrompt": "Izbira strani po meri (Vnesite z vejicami ločen seznam številk strani 1,5,6 ali funkcije, kot je 2n+1) :", - "goToPage": "Pojdi", - "true": "Res", - "false": "Napačno", - "unknown": "Neznano", - "save": "Shrani", - "saveToBrowser": "Shrani v brskalnik", - "close": "Zapri", - "filesSelected": "izbrane datoteke", - "noFavourites": "Ni dodanih priljubljenih", - "downloadComplete": "Prenos končan", - "bored": "dolgočaseno čakanje?", - "alphabet": "Abeceda", - "downloadPdf": "Prenesi PDF", - "text": "Besedilo", - "font": "Pisava", - "selectFillter": "-- Izberite --", - "pageNum": "Številka strani", - "sizes": { - "small": "Majhen", - "medium": "Srednje", - "large": "Veliko", - "x-large": "X-Velik" - }, - "error": { - "pdfPassword": "Dokument PDF je zaščiten z geslom in geslo ni bilo vneseno ali pa je bilo napačno", - "_value": "Napaka", - "sorry": "Oprostite za težavo!", - "needHelp": "Potrebujete pomoč / Ste našli težavo?", - "contactTip": "Če imate še vedno težave, ne oklevajte in se obrnite na nas za pomoč. Vstopnico lahko oddate na naši strani GitHub ali nas kontaktirate prek Discorda:", - "404": { - "head": "404 - Stran ni najdena | Ups, spotaknili smo se pri kodi!", - "1": "Zdi se, da ne moremo najti strani, ki jo iščete.", - "2": "Nekaj ​​je šlo narobe" - }, - "github": "Oddajte vstopnico na GitHub", - "showStack": "Prikaži sled sklada", - "copyStack": "Kopiraj sled sklada", - "githubSubmit": "GitHub - Predloži vstopnico", - "discordSubmit": "Discord - Pošlji objavo podpori" - }, - "delete": "Izbriši", - "username": "Uporabniško ime", - "password": "Geslo", - "welcome": "Dobrodošli", - "property": "Lastnost", - "black": "črna", - "white": "bela", - "red": "rdeča", - "green": "zelena", - "blue": "modra", - "custom": "Po meri...", - "WorkInProgess": "Delo je v teku, morda ne bo delovalo ali bo hroščalo, prosimo, prijavite morebitne težave!", - "poweredBy": "Poganja", - "yes": "Da", - "no": "Ne", - "changedCredsMessage": "Poverilnice spremenjene!", - "notAuthenticatedMessage": "Uporabnik ni preverjen.", - "userNotFoundMessage": "Uporabnika ni mogoče najti.", - "incorrectPasswordMessage": "Trenutno geslo ni pravilno.", - "usernameExistsMessage": "Novo uporabniško ime že obstaja.", - "invalidUsernameMessage": "Neveljavno uporabniško ime, uporabniško ime lahko vsebuje samo črke, številke in naslednje posebne znake @._+- ali mora biti veljaven e-poštni naslov.", - "invalidPasswordMessage": "Geslo ne sme biti prazno in ne sme imeti presledkov na začetku ali koncu.", - "confirmPasswordErrorMessage": "Novo geslo in Potrditev novega gesla se morata ujemati.", - "deleteCurrentUserMessage": "Trenutno prijavljenega uporabnika ni mogoče izbrisati.", - "deleteUsernameExistsMessage": "Uporabniško ime ne obstaja in ga ni mogoče izbrisati.", - "downgradeCurrentUserMessage": "Vloge trenutnega uporabnika ni mogoče znižati", - "disabledCurrentUserMessage": "Trenutnega uporabnika ni mogoče onemogočiti", - "downgradeCurrentUserLongMessage": "Vloge trenutnega uporabnika ni mogoče znižati. Zato trenutni uporabnik ne bo prikazan.", - "userAlreadyExistsOAuthMessage": "Uporabnik že obstaja kot uporabnik OAuth2.", - "userAlreadyExistsWebMessage": "Uporabnik že obstaja kot spletni uporabnik.", - "oops": "Ojoj!", - "help": "Pomoč", - "goHomepage": "Pojdi na domačo stran", - "joinDiscord": "Pridružite se našemu strežniku Discord", - "seeDockerHub": "Glej Docker Hub", - "visitGithub": "Obiščite skladišče Github", - "donate": "Doniraj", - "color": "Barva", - "sponsor": "Sponzor", - "info": "Podatki", - "pro": "Pro", - "page": "Stran", - "pages": "Strani", - "loading": "Nalaganje...", - "addToDoc": "Dodaj v dokument", - "reset": "Ponastavi", - "apply": "Uporabi", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Politika zasebnosti", - "terms": "Določila in pogoji", - "accessibility": "Dostopnost", - "cookie": "Pravilnik o piškotkih", - "impressum": "Impresum", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Meni cevovoda (beta)", - "uploadButton": "Naloži po meri", - "configureButton": "Konfiguriraj", - "defaultOption": "Po meri", - "submitButton": "Pošlji", - "help": "Pomoč za cevovod", - "scanHelp": "Pomoč za skeniranje map", - "deletePrompt": "Ali ste prepričani, da želite izbrisati cevovod", - "tags": "avtomatiziraj,zaporedje,skriptiran,serijski proces", - "title": "Cevovod" - }, - "pipelineOptions": { - "header": "Konfiguracija cevovoda", - "pipelineNameLabel": "Ime cevovoda", - "saveSettings": "Shrani nastavitve delovanja", - "pipelineNamePrompt": "Sem vnesite ime cevovoda", - "selectOperation": "Izberi operacijo", - "addOperationButton": "Dodaj operacijo", - "pipelineHeader": "Cevovod:", - "saveButton": "Prenos", - "validateButton": "Potrdi" - }, - "enterpriseEdition": { - "button": "Nadgradi na Pro", - "warning": "Ta funkcija je na voljo samo uporabnikom Pro.", - "yamlAdvert": "Stirling PDF Pro podpira konfiguracijske datoteke YAML in druge funkcije SSO.", - "ssoAdvert": "Iščete več funkcij za upravljanje uporabnikov? Oglejte si Stirling PDF Pro" - }, - "analytics": { - "title": "Ali želite izboljšati Stirling PDF?", - "paragraph1": "Stirling PDF se je odločil za analitiko, ki nam pomaga izboljšati izdelek. Ne sledimo nobenim osebnim podatkom ali vsebini datotek.", - "paragraph2": "Prosimo, razmislite o omogočanju analitike, ki bo pomagala rasti Stirling-PDF in nam bo omogočila boljše razumevanje naših uporabnikov.", - "enable": "Omogoči analitiko", - "disable": "Onemogoči analitiko", - "settings": "Nastavitve za analitiko lahko spremenite v datoteki config/settings.yml" - }, - "navbar": { - "favorite": "Priljubljene", - "recent": "New and recently updated", - "darkmode": "Temni način", - "language": "Jeziki", - "settings": "Nastavitve", - "allTools": "Orodja", - "multiTool": "Več orodje", - "search": "Išči", - "sections": { - "organize": "Organiziraj", - "convertTo": "Pretvori v PDF", - "convertFrom": "Pretvori iz PDF", - "security": "Podpis in varnost", - "advance": "Napredno", - "edit": "Ogled in urejanje", - "popular": "Priljubljeno" - } - }, - "settings": { - "title": "Nastavitve", - "update": "Na voljo je posodobitev", - "updateAvailable": "{0} je trenutno nameščena različica. Na voljo je nova različica ({1}).", - "appVersion": "Različica aplikacije:", - "downloadOption": { - "title": "Izberi možnost prenosa (za prenose ene datoteke brez zip):", - "1": "Odpri v istem oknu", - "2": "Odpri v novem oknu", - "3": "Prenesi datoteko" - }, - "zipThreshold": "Zip datoteke, ko preseže število prenesenih datotek", - "signOut": "Odjava", - "accountSettings": "Nastavitve računa", - "bored": { - "help": "Omogoči igro velikonočnih jajc" - }, - "cacheInputs": { - "name": "Shrani vnose obrazca", - "help": "Omogoči shranjevanje predhodno uporabljenih vnosov za prihodnje zagone" - } - }, - "changeCreds": { - "title": "Spremeni poverilnice", - "header": "Posodobite podrobnosti svojega računa", - "changePassword": "Uporabljate privzete poverilnice za prijavo. Prosim vnesite novo geslo", - "newUsername": "Novo uporabniško ime", - "oldPassword": "Trenutno geslo", - "newPassword": "Novo geslo", - "confirmNewPassword": "Potrdi novo geslo", - "submit": "Pošlji spremembe" - }, - "account": { - "title": "Nastavitve računa", - "accountSettings": "Nastavitve računa", - "adminSettings": "Skrbniške nastavitve - ogled in dodajanje uporabnikov", - "userControlSettings": "Nastavitve uporabniškega nadzora", - "changeUsername": "Spremeni uporabniško ime", - "newUsername": "Novo uporabniško ime", - "password": "Geslo za potrditev", - "oldPassword": "Staro geslo", - "newPassword": "Novo geslo", - "changePassword": "Spremeni geslo", - "confirmNewPassword": "Potrdi novo geslo", - "signOut": "Odjava", - "yourApiKey": "Vaš API ključ", - "syncTitle": "Sinhroniziraj nastavitve brskalnika z računom", - "settingsCompare": "Primerjava nastavitev:", - "property": "Lastnina", - "webBrowserSettings": "Nastavitev spletnega brskalnika", - "syncToBrowser": "Sinhroniziraj račun -> Brskalnik", - "syncToAccount": "Sinhroniziraj račun <- Brskalnik" - }, - "adminUserSettings": { - "title": "Nastavitve uporabniškega nadzora", - "header": "Nastavitve skrbniškega nadzora uporabnika", - "admin": "Skrbnik", - "user": "Uporabnik", - "addUser": "Dodaj novega uporabnika", - "deleteUser": "Izbriši uporabnika", - "confirmDeleteUser": "Ali je treba uporabnika izbrisati?", - "confirmChangeUserStatus": "Ali naj bo uporabnik onemogočen/omogočen?", - "usernameInfo": "Uporabniško ime lahko vsebuje samo črke, številke in naslednje posebne znake @._+- ali mora biti veljaven e-poštni naslov.", - "roles": "Vloge", - "role": "Vloga", - "actions": "Dejanja", - "apiUser": "Omejen uporabnik API-ja", - "extraApiUser": "Dodatni omejeni uporabnik API-ja", - "webOnlyUser": "Samo spletni uporabnik", - "demoUser": "Demo uporabnik (brez nastavitev po meri)", - "internalApiUser": "Notranji uporabnik API-ja", - "forceChange": "Prisili uporabnika, da spremeni geslo ob prijavi", - "submit": "Shrani uporabnika", - "changeUserRole": "Spremeni uporabniško vlogo", - "authenticated": "Preverjeno", - "editOwnProfil": "Uredi svoj profil", - "enabledUser": "omogočen uporabnik", - "disabledUser": "onemogočen uporabnik", - "activeUsers": "Aktivni uporabniki:", - "disabledUsers": "Onemogočeni uporabniki:", - "totalUsers": "Skupno število uporabnikov:", - "lastRequest": "Zadnja zahteva", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Statistika končne točke", - "header": "Statistika končne točke", - "top10": "10 najboljših", - "top20": "20 najboljših", - "all": "Vse", - "refresh": "Osveži", - "includeHomepage": "Vključi domačo stran ('/')", - "includeLoginPage": "Vključi prijavno stran ('/login')", - "totalEndpoints": "Skupno končnih točk", - "totalVisits": "Skupno število obiskov", - "showing": "Prikaz", - "selectedVisits": "Izbrani obiski", - "endpoint": "Končna točka", - "visits": "Obiski", - "percentage": "Odstotek", - "loading": "Nalaganje...", - "failedToLoad": "Nalaganje podatkov končne točke ni uspelo. Poskusite osvežiti.", - "home": "Domača stran", - "login": "Prijava", - "top": "Na vrh", - "numberOfVisits": "Število obiskov", - "visitsTooltip": "Obiski: {0} ({1}% vseh)", - "retry": "Poskusi znova" - }, - "database": { - "title": "Uvoz/izvoz baze podatkov", - "header": "Uvoz/izvoz baze podatkov", - "fileName": "Ime datoteke", - "creationDate": "Datum ustvarjanja", - "fileSize": "Velikost datoteke", - "deleteBackupFile": "Izbriši datoteko varnostne kopije", - "importBackupFile": "Uvozi datoteko varnostne kopije", - "createBackupFile": "Ustvari datoteko varnostne kopije", - "downloadBackupFile": "Prenesi varnostno kopijo datoteke", - "info_1": "Pri uvažanju podatkov je ključnega pomena zagotoviti pravilno strukturo. Če niste prepričani, kaj počnete, poiščite nasvet in podporo strokovnjaka. Napaka v strukturi lahko povzroči motnje v delovanju aplikacije, vse do popolne nezmožnosti zagona aplikacije.", - "info_2": "Ime datoteke pri nalaganju ni pomembno. Pozneje se bo preimenoval tako, da bo sledil formatu backup_user_yyyyMMddHHmm.sql, kar bo zagotovilo dosledno poimenovanje.", - "submit": "Uvozi varnostno kopijo", - "importIntoDatabaseSuccessed": "Uvoz v bazo podatkov uspel", - "backupCreated": "Uspešno varnostno kopiranje baze podatkov", - "fileNotFound": "Datoteke ni mogoče najti", - "fileNullOrEmpty": "Datoteka ne sme biti ničelna ali prazna", - "failedImportFile": "Uvoz datoteke ni uspel", - "notSupported": "Ta funkcija ni na voljo za vašo povezavo z bazo podatkov." - }, - "session": { - "expired": "Vaša seja je potekla. Osvežite stran in poskusite znova.", - "refreshPage": "Osveži stran" - }, - "home": { - "desc": "Vaša lokalna trgovina na enem mestu za vse vaše potrebe po PDF-jih.", - "searchBar": "Išči funkcije...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Oglejte si, komentirajte, dodajte besedilo ali slike" - }, - "setFavorites": "Nastavi priljubljene", - "hideFavorites": "Skrij priljubljene", - "showFavorites": "Prikaži priljubljene", - "legacyHomepage": "Stara domača stran", - "newHomePage": "Preizkusite našo novo domačo stran!", - "alphabetical": "Abecedno", - "globalPopularity": "Globalna priljubljenost", - "sortBy": "Razvrsti po:", - "multiTool": { - "title": "PDF Multi Tool", - "desc": "Spoji, zavrti, prerazporedi, razdeli in odstrani strani" - }, - "merge": { - "title": "Združi", - "desc": "Enostavno združite več PDF-jev v enega." - }, - "split": { - "title": "Razdeli se", - "desc": "Razdeli PDF-je v več dokumentov" - }, - "rotate": { - "title": "Zavrti", - "desc": "Preprosto zavrtite svoje PDF-je." - }, - "imageToPdf": { - "title": "Slika v PDF", - "desc": "Pretvori sliko (PNG, JPEG, GIF) v PDF." - }, - "pdfToImage": { - "title": "PDF v sliko", - "desc": "Pretvori PDF v sliko. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Organiziraj", - "desc": "Odstrani/Prerazporedi strani v poljubnem vrstnem redu" - }, - "addImage": { - "title": "Dodaj sliko", - "desc": "Doda sliko na določeno mesto v PDF-ju" - }, - "watermark": { - "title": "Dodaj vodni žig", - "desc": "V dokument PDF dodajte vodni žig po meri." - }, - "permissions": { - "title": "Spremeni dovoljenja", - "desc": "Spremenite dovoljenja vašega dokumenta PDF" - }, - "removePages": { - "title": "Odstrani", - "desc": "Izbrišite neželene strani iz dokumenta PDF." - }, - "addPassword": { - "title": "Dodaj geslo", - "desc": "Šifrirajte svoj dokument PDF z geslom." - }, - "removePassword": { - "title": "Odstrani geslo", - "desc": "Odstranite zaščito z geslom iz vašega dokumenta PDF." - }, - "compressPdfs": { - "title": "Stisni", - "desc": "Stisnite PDF-je, da zmanjšate njihovo velikost." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Spremeni metapodatke", - "desc": "Spremeni/Odstrani/Dodaj metapodatke iz dokumenta PDF" - }, - "fileToPDF": { - "title": "Pretvori datoteko v PDF", - "desc": "Pretvori skoraj vsako datoteko v PDF (DOCX, PNG, XLS, PPT, TXT in več)" - }, - "ocr": { - "title": "OCR / Čistilni pregledi", - "desc": "Cleanup skenira in zazna besedilo iz slik znotraj PDF-ja in ga ponovno doda kot besedilo." - }, - "extractImages": { - "title": "Izvleči slike", - "desc": "Izvleče vse slike iz PDF-ja in jih shrani v zip" - }, - "pdfToPDFA": { - "title": "PDF v PDF/A", - "desc": "Pretvori PDF v PDF/A za dolgoročno shranjevanje" - }, - "PDFToWord": { - "title": "PDF v Word", - "desc": "Pretvori PDF v format Word (DOC, DOCX in ODT)" - }, - "PDFToPresentation": { - "title": "PDF v predstavitev", - "desc": "Pretvori PDF v predstavitvene formate (PPT, PPTX in ODP)" - }, - "PDFToText": { - "title": "PDF v RTF (Besedilo)", - "desc": "Pretvori PDF v format besedila ali RTF" - }, - "PDFToHTML": { - "title": "PDF v HTML", - "desc": "Pretvori PDF v format HTML" - }, - "PDFToXML": { - "title": "PDF v XML", - "desc": "Pretvori PDF v format XML" - }, - "ScannerImageSplit": { - "title": "Zaznaj/razdeli skenirane fotografije", - "desc": "Razdeli več fotografij iz fotografije/PDF" - }, - "sign": { - "title": "Podpiši", - "desc": "Doda podpis v PDF z risbo, besedilom ali sliko" - }, - "flatten": { - "title": "Zravnaj", - "desc": "Odstrani vse interaktivne elemente in obrazce iz PDF-ja" - }, - "repair": { - "title": "Popravilo", - "desc": "Poskuša popraviti poškodovan/pokvarjen PDF" - }, - "removeBlanks": { - "title": "Odstrani prazne strani", - "desc": "Zazna in odstrani prazne strani iz dokumenta" - }, - "removeAnnotations": { - "title": "Odstrani opombe", - "desc": "Odstrani vse komentarje/opombe iz PDF-ja" - }, - "compare": { - "title": "Primerjaj", - "desc": "Primerja in prikazuje razlike med 2 dokumentoma PDF" - }, - "certSign": { - "title": "Podpiši s potrdilom", - "desc": "Podpiše PDF s potrdilom/ključem (PEM/P12)" - }, - "removeCertSign": { - "title": "Odstrani znak potrdila", - "desc": "Odstrani podpis potrdila iz PDF-ja" - }, - "pageLayout": { - "title": "Večstranska postavitev", - "desc": "Združi več strani dokumenta PDF v eno stran" - }, - "scalePages": { - "title": "Prilagodi velikost/merilo strani", - "desc": "Spremenite velikost/merilo strani in/ali njeno vsebino." - }, - "pipeline": { - "title": "Cevovod", - "desc": "Zaženi več dejanj na PDF-jih z definiranjem cevovodnih skriptov" - }, - "add-page-numbers": { - "title": "Dodaj številke strani", - "desc": "Dodaj številke strani skozi dokument na določeno mesto" - }, - "auto-rename": { - "title": "Samodejno preimenuj datoteko PDF", - "desc": "Samodejno preimenuje datoteko PDF glede na zaznano glavo" - }, - "adjust-contrast": { - "title": "Prilagodi barve/kontrast", - "desc": "Prilagodi kontrast, nasičenost in svetlost PDF-ja" - }, - "crop": { - "title": "Obreži PDF", - "desc": "Obrežite PDF, da zmanjšate njegovo velikost (ohranja besedilo!)" - }, - "autoSplitPDF": { - "title": "Samodejno razdeli strani", - "desc": "Samodejno razdeli optično prebrane PDF-je s fizično QR kodo razdelilnika optično prebranih strani" - }, - "sanitizePdf": { - "title": "Razkuži", - "desc": "Odstrani skripte in druge elemente iz datotek PDF" - }, - "URLToPDF": { - "title": "URL/spletna stran v PDF", - "desc": "Pretvori poljuben http(-e)URL v PDF" - }, - "HTMLToPDF": { - "title": "HTML v PDF", - "desc": "Pretvori katero koli datoteko HTML ali zip v PDF" - }, - "MarkdownToPDF": { - "title": "Markdown v PDF", - "desc": "Pretvori katero koli datoteko Markdown v PDF" - }, - "PDFToMarkdown": { - "title": "PDF v Markdown", - "desc": "Pretvori poljuben PDF v Markdown" - }, - "getPdfInfo": { - "title": "Pridobite VSE informacije o PDF-ju", - "desc": "Zgrabi vse možne informacije o PDF-jih" - }, - "extractPage": { - "title": "Izvleček strani(e)", - "desc": "Izvleče izbrane strani iz PDF-ja" - }, - "PdfToSinglePage": { - "title": "PDF na eno veliko stran", - "desc": "Združi vse strani PDF v eno samo veliko stran" - }, - "showJS": { - "title": "Prikaži Javascript", - "desc": "Išče in prikaže vse JS, vstavljene v PDF" - }, - "autoRedact": { - "title": "Samodejno popravi", - "desc": "Samodejno popravi (začrni) besedilo v PDF-ju na podlagi vnesenega besedila" - }, - "redact": { - "title": "Ročna redakcija", - "desc": "Preredi PDF na podlagi izbranega besedila, narisanih oblik in/ali izbranih strani(-e)" - }, - "tableExtraxt": { - "title": "PDF v CSV", - "desc": "Izvleče tabele iz PDF in jih pretvori v CSV" - }, - "autoSizeSplitPDF": { - "title": "Samodejna razdelitev po velikosti/številu", - "desc": "Razdeli en PDF na več dokumentov glede na velikost, število strani ali število dokumentov" - }, - "overlay-pdfs": { - "title": "Prekrivanje PDF-jev", - "desc": "Prekriva PDF-je na vrhu drugega PDF-ja" - }, - "split-by-sections": { - "title": "Razdeli PDF po razdelkih", - "desc": "Vsako stran PDF-ja razdelite na manjše vodoravne in navpične dele" - }, - "AddStampRequest": { - "title": "Dodaj žig v PDF", - "desc": "Dodaj besedilo ali slikovne žige na nastavljenih lokacijah" - }, - "removeImagePdf": { - "title": "Odstrani sliko", - "desc": "Odstranite sliko iz PDF-ja, da zmanjšate velikost datoteke" - }, - "splitPdfByChapters": { - "title": "Razdeli PDF po poglavjih", - "desc": "Razdeli PDF na več datotek glede na strukturo poglavij." - }, - "validateSignature": { - "title": "Preveri podpis PDF", - "desc": "Preveri digitalne podpise in potrdila v dokumentih PDF" - }, - "replaceColorPdf": { - "title": "Napredne barvne možnosti", - "desc": "Zamenjaj barvo besedila in ozadja v PDF-ju in obrni celotno barvo PDF-ja, da zmanjšaš velikost datoteke" - } - }, - "viewPdf": { - "tags": "ogled, branje, opomba, besedilo, slika", - "title": "View/Edit PDF", - "header": "Ogled PDF-ja" - }, - "multiTool": { - "tags": "Več orodij, več operacij, uporabniški vmesnik, klik povleci, sprednji del, odjemalska stran, interaktivno, nepremagljivo, premakni, izbriši, preseli, razdeli", - "title": "PDF večnamensko orodje", - "header": "PDF Multi Tool", - "uploadPrompts": "Ime datoteke", - "selectAll": "Izberi vse", - "deselectAll": "Prekliči izbor vseh", - "selectPages": "Izberi stran", - "selectedPages": "Izbrane strani", - "page": "Stran", - "deleteSelected": "Izbriši izbrano", - "downloadAll": "Izvozi", - "downloadSelected": "Izvozi izbrano", - "insertPageBreak": "Vstavi prelom strani", - "addFile": "Dodaj datoteko", - "rotateLeft": "Zavrti v levo", - "rotateRight": "Zavrti v desno", - "split": "Razdeli", - "moveLeft": "Premakni levo", - "moveRight": "Premik desno", - "delete": "Izbriši", - "dragDropMessage": "Izbrane strani", - "undo": "Razveljavi", - "redo": "Ponovi" - }, - "merge": { - "tags": "spoj,operacije strani,zadnja stran,strežniška stran", - "title": "Združi", - "header": "Združi več PDF-jev (2+)", - "sortByName": "Razvrsti po imenu", - "sortByDate": "Razvrsti po datumu", - "removeCertSign": "Odstraniti digitalni podpis v združeni datoteki?", - "submit": "Združi" - }, - "split": { - "tags": "Operacije strani,deli,Multi Page,cut,strežniška stran", - "title": "Razdeli PDF", - "header": "Razdeli PDF", - "desc": { - "1": "Številke, ki jih izberete, so številke strani, na kateri želite narediti razdelitev", - "2": "Tako bi izbira 1,3,7-9 razdelila dokument z 10 stranmi v 6 ločenih PDF-jev z:", - "3": "Dokument #1: Stran 1", - "4": "Dokument #2: Stran 2 in 3", - "5": "Dokument #3: Stran 4, 5, 6 in 7", - "6": "Dokument #4: stran 8", - "7": "Dokument #5: stran 9", - "8": "Dokument #6: stran 10" - }, - "splitPages": "Vnesite strani za razdelitev:", - "submit": "Razdeli" - }, - "rotate": { - "tags": "strežniška stran", - "title": "Zasukaj PDF", - "header": "Zasukaj PDF", - "selectAngle": "Izberite kot vrtenja (v večkratnikih 90 stopinj):", - "submit": "Zavrti" - }, - "imageToPdf": { - "tags": "pretvorba,img,jpg,slika,fotografija" - }, - "pdfToImage": { - "tags": "pretvorba,img,jpg,slika,fotografija", - "title": "PDF v sliko", - "header": "PDF v sliko", - "selectText": "Oblika slike", - "singleOrMultiple": "Vrsta rezultata od strani do slike", - "single": "Ena velika slika Prečesavanje vseh strani", - "multi": "Več slik, ena slika na stran", - "colorType": "Vrsta barve", - "color": "Barva", - "grey": "Sivine", - "blackwhite": "Črno-belo (Lahko izgubite podatke!)", - "submit": "Pretvori", - "info": "Python ni nameščen. Zahtevano za pretvorbo WebP.", - "placeholder": "(npr. 1,2,8 ali 4,7,12-16 ali 2n-1)" - }, - "pdfOrganiser": { - "tags": "dvostranski,sodi,lihi,razvrsti,premakni", - "title": "Organizator strani", - "header": "Organizator strani PDF", - "submit": "Prerazporedi strani", - "mode": { - "_value": "Način", - "1": "Vrst strani po meri", - "2": "Obraten vrstni red", - "3": "Obojestransko razvrščanje", - "4": "Razvrsti knjižice", - "5": "Razvrsti knjižico s stranskim šivom", - "6": "Razdelitev liho-sodo", - "7": "Najprej odstrani", - "8": "Odstrani zadnjega", - "9": "Odstrani prvega in zadnjega", - "10": "Sodo-liho spajanje", - "11": "Duplicate all pages" - }, - "placeholder": "(npr. 1,3,2 ali 4-8,2,10-12 ali 2n-1)" - }, - "addImage": { - "tags": "img,jpg,slika,fotografija", - "title": "Dodaj sliko", - "header": "Dodaj sliko v PDF", - "everyPage": "Vsaka stran?", - "upload": "Dodaj sliko", - "submit": "Dodaj sliko" - }, - "watermark": { - "tags": "Besedilo, ponavljajoče se, oznaka, lastno, avtorske pravice, blagovna znamka, img, jpg, slika, fotografija", - "title": "Dodaj vodni žig", - "header": "Dodaj vodni žig", - "customColor": "Barva besedila po meri", - "selectText": { - "1": "Izberite PDF za dodajanje vodnega žiga v:", - "2": "Besedilo vodnega žiga:", - "3": "Velikost pisave:", - "4": "Vrtenje (0-360):", - "5": "Širinski presledek (Presledek med vsakim vodnim žigom vodoravno):", - "6": "Višinski presledek (Presledek med vsakim vodnim žigom navpično):", - "7": "Neprosojnost (0% - 100%):", - "8": "Vrsta vodnega žiga:", - "9": "Slika vodnega žiga:", - "10": "Pretvori PDF v PDF-sliko" - }, - "submit": "Dodaj vodni žig", - "type": { - "1": "Besedilo", - "2": "Slika" - } - }, - "permissions": { - "tags": "branje, pisanje, urejanje, tiskanje", - "title": "Spremeni dovoljenja", - "header": "Spremeni dovoljenja", - "warning": "Opozorilo, da so ta dovoljenja nespremenljiva, priporočamo, da jih nastavite z geslom prek strani za dodajanje gesla", - "selectText": { - "1": "Izberite PDF za spremembo dovoljenj", - "2": "Dovoljenja za nastavitev", - "3": "Prepreči sestavljanje dokumenta", - "4": "Prepreči ekstrakcijo vsebine", - "5": "Prepreči ekstrakcijo za dostopnost", - "6": "Prepreči izpolnjevanje obrazca", - "7": "Prepreči spreminjanje", - "8": "Prepreči spreminjanje pripisov", - "9": "Prepreči tiskanje", - "10": "Prepreči tiskanje različnih formatov" - }, - "submit": "Spremeni" - }, - "removePages": { - "tags": "Odstrani strani, izbriši strani" - }, - "addPassword": { - "tags": "varno,varnost", - "title": "Dodaj geslo", - "header": "Dodaj geslo (Šifriraj)", - "selectText": { - "1": "Izberite PDF za šifriranje", - "2": "Uporabniško geslo", - "3": "Dolžina šifrirnega ključa", - "4": "Višje vrednosti so močnejše, nižje vrednosti pa imajo boljšo združljivost.", - "5": "Dovoljenja za nastavitev (priporočeno za uporabo skupaj z geslom lastnika)", - "6": "Prepreči sestavljanje dokumenta", - "7": "Prepreči ekstrakcijo vsebine", - "8": "Prepreči ekstrakcijo za dostopnost", - "9": "Prepreči izpolnjevanje obrazca", - "10": "Prepreči spreminjanje", - "11": "Prepreči spreminjanje pripisov", - "12": "Prepreči tiskanje", - "13": "Prepreči tiskanje različnih formatov", - "14": "Lastniško geslo", - "15": "Omejuje, kaj je mogoče storiti z dokumentom, ko je odprt (ni podprt za vse bralnike)", - "16": "Omeji odpiranje samega dokumenta" - }, - "submit": "Šifriraj" - }, - "removePassword": { - "tags": "varno,dešifriranje,varnost,odstranitev gesla,brisanje gesla", - "title": "Odstrani geslo", - "header": "Odstrani geslo (dešifriraj)", - "selectText": { - "1": "Izberite PDF za dešifriranje", - "2": "Geslo" - }, - "submit": "Odstrani" - }, - "compressPdfs": { - "tags": "squish,small,tiny" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Naslov,avtor,datum,kreacija,čas,založnik,producent,statistika", - "title": "Spremeni metapodatke", - "header": "Spremeni metapodatke", - "selectText": { - "1": "Prosimo, uredite spremenljivke, ki jih želite spremeniti", - "2": "Izbriši vse metapodatke", - "3": "Prikaži metapodatke po meri:", - "4": "Drugi metapodatki:", - "5": "Dodaj vnos metapodatkov po meri" - }, - "author": "Avtor:", - "creationDate": "Datum ustvarjanja (llll/MM/dd HH:mm:ss):", - "creator": "Ustvarjalec:", - "keywords": "Ključne besede:", - "modDate": "Datum spremembe (llll/MM/dd HH:mm:ss):", - "producer": "Proizvajalec:", - "subject": "Zadeva:", - "trapped": "Ujet:", - "submit": "Spremeni" - }, - "fileToPDF": { - "tags": "transformacija,format,dokument,slika,diapozitiv,besedilo,konverzija,office,docs,word,excel,powerpoint", - "title": "Datoteka v PDF", - "header": "Pretvori katero koli datoteko v PDF", - "credit": "Ta storitev uporablja LibreOffice in Unoconv za pretvorbo datotek.", - "supportedFileTypesInfo": "Podprte vrste datotek", - "supportedFileTypes": "Podprte vrste datotek bi morale vsebovati spodaj, vendar za popoln posodobljen seznam podprtih formatov glejte dokumentacijo LibreOffice", - "submit": "Pretvori v PDF" - }, - "ocr": { - "tags": "prepoznavanje,besedilo,slika,skeniranje,branje,prepoznavanje,zaznavanje,urejanje", - "title": "OCR / Čiščenje skeniranja", - "header": "Čistilni pregledi / OCR (optično prepoznavanje znakov)", - "selectText": { - "1": "Izberite jezike, ki jih želite zaznati v PDF-ju (navedeni so tisti, ki so trenutno zaznani):", - "2": "Izdelajte besedilno datoteko, ki vsebuje OCR besedilo poleg OCR-jevega PDF-ja", - "3": "Pravilne strani so bile optično prebrane pod poševnim kotom z obračanjem nazaj na svoje mesto", - "4": "Čista stran, zato je manj verjetno, da bo OCR našel besedilo v hrupu v ozadju. (Brez spremembe izhoda)", - "5": "Čista stran, tako da je manj verjetno, da bo OCR našel besedilo v hrupu v ozadju, vzdržuje čiščenje v izhodu.", - "6": "Prezre strani, ki imajo interaktivno besedilo, samo OCR strani, ki so slike", - "7": "Vsili OCR, bo OCR Vsaka stran bo odstranila vse originalne besedilne elemente", - "8": "Normalno (Bo napaka, če PDF vsebuje besedilo)", - "9": "Dodatne nastavitve", - "10": "Način OCR", - "11": "Odstrani slike po OCR (Odstrani VSE slike, uporabno le, če je del koraka pretvorbe)", - "12": "Vrsta upodabljanja (napredno)" - }, - "help": "Prosimo, preberite to dokumentacijo o uporabi tega za druge jezike in/ali uporabi ne v dockerju", - "credit": "Ta storitev uporablja qpdf in Tesseract za OCR.", - "submit": "Obdelaj PDF z OCR" - }, - "extractImages": { - "tags": "slika,fotografija,shrani,arhiv,zip,zajemi,zgrabi", - "title": "Izvleci slike", - "header": "Izvleci slike", - "selectText": "Izberite format slike za pretvorbo ekstrahiranih slik", - "allowDuplicates": "Shrani podvojene slike", - "submit": "Izvleček" - }, - "pdfToPDFA": { - "tags": "archive,long-term,standard,conversion,storage,preservation", - "title": "PDF v PDF/A", - "header": "PDF v PDF/A", - "credit": "Ta storitev uporablja libreoffice za pretvorbo PDF/A", - "submit": "Pretvori", - "tip": "Trenutno ne deluje za več vnosov hkrati", - "outputFormat": "Izhodna oblika", - "pdfWithDigitalSignature": "PDF vsebuje digitalni podpis. To bo odstranjeno v naslednjem koraku." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformacija,format,pretvorba,office,microsoft,docfile", - "title": "PDF v Word", - "header": "PDF v Word", - "selectText": { - "1": "Oblika izhodne datoteke" - }, - "credit": "Ta storitev uporablja LibreOffice za pretvorbo datotek.", - "submit": "Pretvori" - }, - "PDFToPresentation": { - "tags": "slides,show,office,microsoft", - "title": "PDF v predstavitev", - "header": "PDF v predstavitev", - "selectText": { - "1": "Oblika izhodne datoteke" - }, - "credit": "Ta storitev uporablja LibreOffice za pretvorbo datotek.", - "submit": "Pretvori" - }, - "PDFToText": { - "tags": "richformat,richtextformat,obogaten tekst", - "title": "PDF v RTF (Besedilo)", - "header": "PDF v RTF (Besedilo)", - "selectText": { - "1": "Oblika izhodne datoteke" - }, - "credit": "Ta storitev uporablja LibreOffice za pretvorbo datotek.", - "submit": "Pretvori" - }, - "PDFToHTML": { - "tags": "spletna vsebina, brskalniku prijazen", - "title": "PDF v HTML", - "header": "PDF v HTML", - "credit": "Ta storitev uporablja pdftohtml za pretvorbo datotek.", - "submit": "Pretvori" - }, - "PDFToXML": { - "tags": "data-extraction,structured-content,interop,transformation,convert", - "title": "PDF v XML", - "header": "PDF v XML", - "credit": "Ta storitev uporablja LibreOffice za pretvorbo datotek.", - "submit": "Pretvori" - }, - "ScannerImageSplit": { - "tags": "separate,auto-detect,scans,multi-photo,organize", - "selectText": { - "1": "Prag kota:", - "2": "Nastavi najmanjši absolutni kot, potreben za vrtenje slike (privzeto: 10).", - "3": "Toleranca:", - "4": "Določi razpon barvne variacije okoli ocenjene barve ozadja (privzeto: 30).", - "5": "Najmanjša površina:", - "6": "Nastavi minimalni prag površine za fotografijo (privzeto: 10000).", - "7": "Najmanjša konturna površina:", - "8": "Nastavi najmanjši prag konturne površine za fotografijo", - "9": "Velikost obrobe:", - "10": "Nastavi velikost dodane in odstranjene obrobe, da prepreči bele obrobe v izpisu (privzeto: 1)." - }, - "info": "Python ni nameščen. Za tek je potrebno." - }, - "sign": { - "tags": "avtoriziraj,začetnice,narisan-podpis,besedilni-znak,podpis-slike", - "title": "Podpiši", - "header": "Podpiši PDF-je", - "upload": "Naloži sliko", - "draw": "Nariši podpis", - "text": "Vnos besedila", - "clear": "Počisti", - "add": "Dodaj", - "saved": "Shranjeni podpisi", - "save": "Shrani podpis", - "personalSigs": "Osebni podpisi", - "sharedSigs": "Skupni podpisi", - "noSavedSigs": "Ni shranjenih podpisov", - "addToAll": "Dodaj na vse strani", - "delete": "Izbriši", - "first": "Prva stran", - "last": "Zadnja stran", - "next": "Naslednja stran", - "previous": "Prejšnja stran", - "maintainRatio": "Preklopi ohranjanje razmerja stranic", - "undo": "Razveljavi", - "redo": "Ponovi" - }, - "flatten": { - "tags": "static,deactivate,non-interactive,streamline", - "title": "Zravnaj", - "header": "Zravnaj PDF", - "flattenOnlyForms": "Splošči samo obrazce", - "submit": "Zravnaj" - }, - "repair": { - "tags": "popravi,obnovi,popravi,obnovi", - "title": "Popravilo", - "header": "Popravi datoteke PDF", - "submit": "Popravilo" - }, - "removeBlanks": { - "tags": "cleanup,streamline,non-content,organize", - "title": "Odstrani praznine", - "header": "Odstrani prazne strani", - "threshold": "Prag beline slikovnih pik:", - "thresholdDesc": "Prag za določanje, kako bel mora biti bel piksel, da je označen kot 'bel'. 0 = črna, 255 čisto bela.", - "whitePercent": "Odstotek beline (%):", - "whitePercentDesc": "Odstotek strani, ki mora imeti 'bele' slikovne pike za odstranitev", - "submit": "Odstrani praznine" - }, - "removeAnnotations": { - "tags": "comments,highlight,notes,markup,remove", - "title": "Odstrani opombe", - "header": "Odstrani opombe", - "submit": "Odstrani" - }, - "compare": { - "tags": "diferenciiraj,kontrast,spremembe,analiza", - "title": "Primerjaj", - "header": "Primerjaj PDF-je", - "highlightColor": { - "1": "Označite barvo 1:", - "2": "Barva osvetlitve 2:" - }, - "document": { - "1": "Dokument 1", - "2": "Dokument 2" - }, - "submit": "Primerjaj", - "complex": { - "message": "Eden ali oba predložena dokumenta sta veliki datoteki, točnost primerjave je lahko zmanjšana" - }, - "large": { - "file": { - "message": "Eden ali oba podana dokumenta sta prevelika za obdelavo" - } - }, - "no": { - "text": { - "message": "Eden ali oba izbrana dokumenta PDF nimata besedilne vsebine. Za primerjavo izberite PDF-je z besedilom." - } - } - }, - "certSign": { - "tags": "avtentikacija,PEM,P12,uradno,šifriranje", - "title": "Podpisovanje potrdila", - "header": "Podpišite PDF s svojim potrdilom (Delo v teku)", - "selectPDF": "Izberite datoteko PDF za podpis:", - "jksNote": "Opomba: Če vaša vrsta potrdila ni navedena spodaj, jo pretvorite v datoteko Java Keystore (.jks) z orodjem ukazne vrstice keytool. Nato spodaj izberite možnost datoteke .jks.", - "selectKey": "Izberite datoteko z zasebnim ključem (format PKCS#8, lahko je .pem ali .der):", - "selectCert": "Izberite svojo datoteko potrdila (format X.509, lahko je .pem ali .der):", - "selectP12": "Izberite datoteko shrambe ključev PKCS#12 (.p12 ali .pfx) (izbirno, če je na voljo, mora vsebovati vaš zasebni ključ in potrdilo):", - "selectJKS": "Izberite datoteko shrambe ključev Java (.jks ali .keystore):", - "certType": "Vrsta potrdila", - "password": "Vnesite geslo shrambe ključev ali zasebnega ključa (če obstaja):", - "showSig": "Prikaži podpis", - "reason": "Razlog", - "location": "Lokacija", - "name": "Ime", - "showLogo": "Prikaži logotip", - "submit": "Podpiši PDF" - }, - "removeCertSign": { - "tags": "avtentikacija,PEM,P12,uradno,dešifriranje", - "title": "Odstrani podpis potrdila", - "header": "Odstranite digitalno potrdilo iz PDF-ja", - "selectPDF": "Izberite datoteko PDF:", - "submit": "Odstrani podpis" - }, - "pageLayout": { - "tags": "spoji,sestavi,enojni pogled,organiziraj", - "title": "Postavitev več strani", - "header": "Postavitev več strani", - "pagesPerSheet": "Strani na list:", - "addBorder": "Dodaj obrobe", - "submit": "Pošlji" - }, - "scalePages": { - "tags": "resize,modify,dimension,adapt", - "title": "Prilagodi velikost strani", - "header": "Prilagodi velikost strani", - "pageSize": "Velikost strani dokumenta.", - "keepPageSize": "Izvirna velikost", - "scaleFactor": "Raven povečave (obrezovanje) strani.", - "submit": "Pošlji" - }, - "add-page-numbers": { - "tags": "paginate,label,organize,index" - }, - "auto-rename": { - "tags": "samodejno zaznaj,na podlagi glave,organiziraj,preoznači", - "title": "Samodejno preimenuj", - "header": "Samodejno preimenuj PDF", - "submit": "Samodejno preimenuj" - }, - "adjust-contrast": { - "tags": "color-correction,tune,modify,enhance,colour-correction" - }, - "crop": { - "tags": "obreži, skrči, uredi, oblikuj", - "title": "Obrezovanje", - "header": "Obreži PDF", - "submit": "Pošlji" - }, - "autoSplitPDF": { - "tags": "Na osnovi QR,ločeno,skeniranje-segment,organiziranje", - "title": "Samodejno razdeli PDF", - "header": "Samodejno razdeli PDF", - "description": "Natisnite, vstavite, skenirajte, naložite in nam dovolite, da samodejno ločimo vaše dokumente. Ročno razvrščanje ni potrebno.", - "selectText": { - "1": "Natisnite nekaj razdelilnih listov od spodaj (črno-belo je v redu).", - "2": "Skenirajte vse dokumente hkrati tako, da mednje vstavite razdelilni list.", - "3": "Naložite eno veliko optično prebrano datoteko PDF in pustite, da Stirling PDF uredi ostalo.", - "4": "Ločilne strani so samodejno zaznane in odstranjene, kar zagotavlja čist končni dokument." - }, - "formPrompt": "Pošljite PDF, ki vsebuje razdelilnike strani Stirling-PDF:", - "duplexMode": "Dupleksni način (skeniranje spredaj in zadaj)", - "dividerDownload2": "Prenesi 'Samodejni razdelilnik (z navodili).pdf'", - "submit": "Pošlji" - }, - "sanitizePdf": { - "tags": "clean,secure,safe,remove-threats" - }, - "URLToPDF": { - "tags": "web-capture,save-page,web-to-doc,archive", - "title": "URL v PDF", - "header": "URL v PDF", - "submit": "Pretvori", - "credit": "Uporablja WeasyPrint" - }, - "HTMLToPDF": { - "tags": "markup,web-content,transformation,convert", - "title": "HTML v PDF", - "header": "HTML v PDF", - "help": "Sprejema datoteke HTML in ZIP, ki vsebujejo html/css/slike itd.", - "submit": "Pretvori", - "credit": "Uporablja WeasyPrint", - "zoom": "Raven povečave za prikaz spletne strani.", - "pageWidth": "Širina strani v centimetrih. (Privzeto prazno)", - "pageHeight": "Višina strani v centimetrih. (Privzeto prazno)", - "marginTop": "Zgornji rob strani v milimetrih. (Privzeto prazno)", - "marginBottom": "Spodnji rob strani v milimetrih. (Privzeto prazno)", - "marginLeft": "Levi rob strani v milimetrih. (Privzeto prazno)", - "marginRight": "Desni rob strani v milimetrih. (Privzeto prazno)", - "printBackground": "Upodobi ozadje spletnih strani.", - "defaultHeader": "Omogoči privzeto glavo (ime in številka strani)", - "cssMediaType": "Spremenite vrsto medija CSS strani.", - "none": "Brez", - "print": "Natisni", - "screen": "Zaslon" - }, - "MarkdownToPDF": { - "tags": "markup,web-content,transformation,convert,md", - "title": "Označi v PDF", - "header": "Označi v PDF", - "submit": "Pretvori", - "help": "Delo v teku", - "credit": "Uporablja WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF v Markdown", - "header": "PDF v Markdown", - "submit": "Pretvori" - }, - "getPdfInfo": { - "tags": "informacije,podatki,statistika,statistika", - "title": "Pridobite informacije o PDF-ju", - "header": "Pridobite informacije o PDF-ju", - "submit": "Pridobi informacije", - "downloadJson": "Prenesite JSON" - }, - "extractPage": { - "tags": "izvleček" - }, - "PdfToSinglePage": { - "tags": "ena stran" - }, - "showJS": { - "tags": "JS", - "title": "Prikaži Javascript", - "header": "Prikaži Javascript", - "downloadJS": "Prenesi Javascript", - "submit": "Pokaži" - }, - "autoRedact": { - "tags": "Uredi,Skrij,zatemni,črno,marker,skrito", - "title": "Samodejno redigiraj", - "header": "Samodejno redigiraj", - "colorLabel": "Barva", - "textsToRedactLabel": "Besedilo za redigiranje (ločeno z vrsticami)", - "textsToRedactPlaceholder": "npr. \\nZaupno \\nStrogo zaupno", - "useRegexLabel": "Uporabi regularni izraz", - "wholeWordSearchLabel": "Iskanje po celi besedi", - "customPaddingLabel": "Dodatno oblazinjenje po meri", - "convertPDFToImageLabel": "Pretvori PDF v PDF-sliko (Uporablja se za odstranitev besedila za poljem)", - "submitButton": "Pošlji" - }, - "redact": { - "tags": "Uredi,Skrij,zatemni,črno,marker,skrito,ročno", - "title": "Ročna redakcija", - "header": "Ročna redakcija", - "submit": "Uredi", - "textBasedRedaction": "Redakcija na podlagi besedila", - "pageBasedRedaction": "Redakcija na podlagi strani", - "convertPDFToImageLabel": "Pretvori PDF v PDF-sliko (Uporablja se za odstranjevanje besedila za poljem)", - "pageRedactionNumbers": { - "title": "Strani", - "placeholder": "(npr. 1,2,8 ali 4,7,12-16 ali 2n-1)" - }, - "redactionColor": { - "title": "Barva redakcije" - }, - "export": "Izvozi", - "upload": "Naloži", - "boxRedaction": "Redakcija narisane škatle", - "zoom": "Povečaj", - "zoomIn": "Povečaj", - "zoomOut": "Pomanjšaj", - "nextPage": "Naslednja stran", - "previousPage": "Prejšnja stran", - "toggleSidebar": "Preklopi stransko vrstico", - "showThumbnails": "Prikaži sličice", - "showDocumentOutline": "Pokaži oris dokumenta (dvokliknite, da razširite/strnete vse elemente)", - "showAttatchments": "Prikaži priloge", - "showLayers": "Prikaži plasti (dvokliknite za ponastavitev vseh plasti na privzeto stanje)", - "colourPicker": "Izbirnik barv", - "findCurrentOutlineItem": "Poišči trenutno postavko orisa", - "applyChanges": "Uporabi spremembe" - }, - "tableExtraxt": { - "tags": "CSV, ekstrakcija tabele, ekstrah, pretvorba" - }, - "autoSizeSplitPDF": { - "tags": "pdf,razdelitev,dokument,organizacija" - }, - "overlay-pdfs": { - "tags": "Prekrivanje", - "header": "Prekrivne datoteke PDF", - "baseFile": { - "label": "Izberite osnovno datoteko PDF" - }, - "overlayFiles": { - "label": "Izberite Prekrivne datoteke PDF" - }, - "mode": { - "label": "Izberi način prekrivanja", - "sequential": "Zaporedno prekrivanje", - "interleaved": "Prepleteno prekrivanje", - "fixedRepeat": "Popravljeno prekrivanje ponavljanja" - }, - "counts": { - "label": "Število prekrivanj (za fiksni način ponavljanja)", - "placeholder": "Vnesite število, ločeno z vejico (npr. 2,3,1)" - }, - "position": { - "label": "Izberi položaj prekrivanja", - "foreground": "Ospredje", - "background": "Ozadje" - }, - "submit": "Pošlji" - }, - "split-by-sections": { - "tags": "Oddelek Razdeli, razdeli, prilagodi, prilagodi", - "title": "Razdeli PDF po razdelkih", - "header": "Razdeli PDF na razdelke", - "horizontal": { - "label": "Vodoravna delitev", - "placeholder": "Vnesite število vodoravnih delitev" - }, - "vertical": { - "label": "Navpične delitve", - "placeholder": "Vnesite število navpičnih delitev" - }, - "submit": "Razdeli PDF", - "merge": "Združi v en PDF" - }, - "AddStampRequest": { - "tags": "Žig, Dodaj sliko, sredinska slika, Vodni žig, PDF, Vdelaj, Prilagodi, Prilagodi", - "header": "Ožigosajte PDF", - "title": "Ožigosajte PDF", - "stampType": "Vrsta žiga", - "stampText": "Označi besedilo", - "stampImage": "Označi sliko", - "alphabet": "Abeceda", - "fontSize": "Velikost pisave/slike", - "rotation": "Rotacija", - "opacity": "Neprosojnost", - "position": "Položaj", - "overrideX": "Preglasi X koordinato", - "overrideY": "Preglasi Y koordinato", - "customMargin": "Margina po meri", - "customColor": "Barva besedila po meri", - "submit": "Pošlji" - }, - "removeImagePdf": { - "tags": "Odstrani sliko,operacije strani,zadnja stran,strežniška stran" - }, - "splitPdfByChapters": { - "tags": "razdeli,poglavja,zaznamki,organiziraj" - }, - "validateSignature": { - "tags": "podpis,preveri,validiraj,pdf,certificate,digitalni podpis,Preveri podpis,Preveri certifikat", - "title": "Preveri podpise PDF", - "header": "Preveri digitalne podpise", - "selectPDF": "Izberite podpisano datoteko PDF", - "submit": "Preveri podpise", - "results": "Rezultati preverjanja", - "status": { - "_value": "Stanje", - "valid": "Veljaven", - "invalid": "Neveljavno" - }, - "signer": "Podpisnik", - "date": "Datum", - "reason": "Razlog", - "location": "Lokacija", - "noSignatures": "V tem dokumentu ni bilo najdenih digitalnih podpisov", - "chain": { - "invalid": "Preverjanje verige potrdil ni uspelo - ni mogoče preveriti identitete podpisnika" - }, - "trust": { - "invalid": "Certifikat ni v zaupanja vrednem skladišču - vira ni mogoče preveriti" - }, - "cert": { - "expired": "Potrdilo je poteklo", - "revoked": "Potrdilo je bilo preklicano", - "info": "Podrobnosti potrdila", - "issuer": "Izdajatelj", - "subject": "Zadeva", - "serialNumber": "Serijska številka", - "validFrom": "Veljavno od", - "validUntil": "Velja do", - "algorithm": "Algoritem", - "keySize": "Velikost ključa", - "version": "Različica", - "keyUsage": "Uporaba ključa", - "selfSigned": "Samopodpisano", - "bits": "bits" - }, - "signature": { - "info": "Informacije o podpisu", - "_value": "Podpis", - "mathValid": "Podpis je matematično veljaven AMPAK:" - }, - "selectCustomCert": "Datoteka potrdila po meri X.509 (izbirno)" - }, - "replace-color": { - "title": "Napredne barvne možnosti", - "header": "Zamenjaj-Obrni barvni PDF", - "selectText": { - "1": "Zamenjaj ali obrni barvne možnosti", - "2": "Privzeto (privzete barve z visokim kontrastom)", - "3": "Po meri (barve po meri)", - "4": "Full-Invert(Invert vse barve)", - "5": "Možnosti barv z visokim kontrastom", - "6": "belo besedilo na črnem ozadju", - "7": "Črno besedilo na belem ozadju", - "8": "Rumeno besedilo na črnem ozadju", - "9": "Zeleno besedilo na črnem ozadju", - "10": "Izberi barvo besedila", - "11": "Izberi barvo ozadja" - }, - "submit": "Zamenjaj" - }, - "replaceColorPdf": { - "tags": "Zamenjaj barvo,operacije strani,zadnja stran,strežniška stran" - }, - "login": { - "title": "Prijava", - "header": "Prijava", - "signin": "Prijava", - "rememberme": "Zapomni si me", - "invalid": "Neveljavno uporabniško ime ali geslo.", - "locked": "Vaš račun je bil zaklenjen.", - "signinTitle": "Prosim prijavite se", - "ssoSignIn": "Prijava prek enotne prijave", - "oAuth2AutoCreateDisabled": "OAUTH2 Samodejno ustvarjanje uporabnika onemogočeno", - "oAuth2AdminBlockedUser": "Registracija ali prijava neregistriranih uporabnikov je trenutno blokirana. Prosimo kontaktirajte skrbnika.", - "oauth2RequestNotFound": "Zahteva za avtorizacijo ni bila najdena", - "oauth2InvalidUserInfoResponse": "Neveljaven odgovor z informacijami o uporabniku", - "oauth2invalidRequest": "Neveljavna zahteva", - "oauth2AccessDenied": "Dostop zavrnjen", - "oauth2InvalidTokenResponse": "Neveljaven odgovor žetona", - "oauth2InvalidIdToken": "Neveljaven žeton ID-ja", - "relyingPartyRegistrationNotFound": "Ni najdene registracije odvisne stranke", - "userIsDisabled": "Uporabnik je deaktiviran, prijava s tem uporabniškim imenom je trenutno blokirana. Prosimo kontaktirajte skrbnika.", - "alreadyLoggedIn": "Prijavljeni ste že v", - "alreadyLoggedIn2": "naprave. Odjavite se iz naprav in poskusite znova.", - "toManySessions": "Imate preveč aktivnih sej", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF na eno stran", - "header": "PDF na eno stran", - "submit": "Pretvori v eno stran" - }, - "pageExtracter": { - "title": "Izvleči strani", - "header": "Izvleči strani", - "submit": "Izvleček", - "placeholder": "(npr. 1,2,8 ali 4,7,12-16 ali 2n-1)" - }, - "sanitizePDF": { - "title": "Prečisti PDF", - "header": "Prečisti datoteko PDF", - "selectText": { - "1": "Odstrani dejanja JavaScript", - "2": "Odstrani vdelane datoteke", - "3": "Remove XMP metadata", - "4": "Odstrani povezave", - "5": "Odstrani pisave", - "6": "Remove Document Info Metadata" - }, - "submit": "Prečisti PDF" - }, - "adjustContrast": { - "title": "Prilagodi kontrast", - "header": "Prilagodi kontrast", - "contrast": "Kontrast:", - "brightness": "Svetlost:", - "saturation": "Nasičenost:", - "download": "Prenos" - }, - "compress": { - "title": "Stisnite", - "header": "Stisnite PDF", - "credit": "Ta storitev uporablja qpdf za stiskanje/optimizacijo PDF.", - "grayscale": { - "label": "Uporabi sivinsko lestvico za stiskanje" - }, - "selectText": { - "1": { - "_value": "Nastavitve stiskanja", - "1": "1-3 stiskanje PDF,
4-6 enostavno stiskanje slik,
7-9 intenzivno stiskanje slik Bo dramatično zmanjšalo kakovost slike" - }, - "2": "Raven optimizacije:", - "4": "Samodejni način - Samodejno prilagodi kakovost, da dobi PDF na natančno velikost", - "5": "Pričakovana velikost PDF (npr. 25 MB, 10,8 MB, 25 KB)" - }, - "submit": "Stisnite" - }, - "decrypt": { - "passwordPrompt": "Ta datoteka je zaščitena z geslom. Prosim vnesite geslo:", - "cancelled": "Operacija preklicana za PDF: {0}", - "noPassword": "Geslo ni na voljo za šifriran PDF: {0}", - "invalidPassword": "Prosimo poskusite znova s ​​pravilnim geslom.", - "invalidPasswordHeader": "Nepravilno geslo ali nepodprto šifriranje za PDF: {0}", - "unexpectedError": "Pri obdelavi datoteke je prišlo do napake. prosim poskusite ponovno", - "serverError": "Napaka strežnika med dešifriranjem: {0}", - "success": "Datoteka uspešno dešifrirana." - }, - "multiTool-advert": { - "message": "Ta funkcija je na voljo tudi na naši strani z več orodji. Oglejte si izboljšan uporabniški vmesnik od strani do strani in dodatne funkcije!" - }, - "pageRemover": { - "title": "Odstranjevalec strani", - "header": "Odstranjevalnik strani PDF", - "pagesToDelete": "Strani za brisanje (Vnesite z vejicami ločen seznam številk strani) :", - "submit": "Izbriši strani", - "placeholder": "(npr. 1,2,6 ali 1-10,15-30)" - }, - "imageToPDF": { - "title": "Slika v PDF", - "header": "Slika v PDF", - "submit": "Pretvori", - "selectLabel": "Možnosti prilagajanja slike", - "fillPage": "Izpolni stran", - "fitDocumentToImage": "Prilagodi stran sliki", - "maintainAspectRatio": "Ohrani razmerja stranic", - "selectText": { - "2": "Samodejno zasukaj PDF", - "3": "Logika več datotek (omogočeno samo pri delu z več slikami)", - "4": "Združi v en PDF", - "5": "Pretvori v ločene datoteke PDF" - } - }, - "PDFToCSV": { - "title": "PDF v CSV", - "header": "PDF v CSV", - "prompt": "Izberite stran za ekstrahiranje tabele", - "submit": "Izvleček" - }, - "split-by-size-or-count": { - "title": "Razdeli PDF po velikosti ali številu", - "header": "Razdeli PDF po velikosti ali številu", - "type": { - "label": "Izberite vrsto razdelitve", - "size": "Po velikosti", - "pageCount": "Po številu strani", - "docCount": "Po številu dokumentov" - }, - "value": { - "label": "Vnesite vrednost", - "placeholder": "Vnesite velikost (npr. 2MB ali 3KB) ali število (npr. 5)" - }, - "submit": "Pošlji" - }, - "printFile": { - "title": "Natisni datoteko", - "header": "Natisni datoteko na tiskalnik", - "selectText": { - "1": "Izberite datoteko za tiskanje", - "2": "Vnesite ime tiskalnika" - }, - "submit": "Natisni" - }, - "licenses": { - "nav": "Licence", - "title": "Licence tretjih oseb", - "header": "Licence tretjih oseb", - "module": "Modul", - "version": "Različica", - "license": "Licenca" - }, - "survey": { - "nav": "Anketa", - "title": "Anketa Stirling-PDF", - "description": "Stirling-PDF nima sledenja, zato želimo slišati od naših uporabnikov, da bi izboljšali Stirling-PDF!", - "changes": "Stirling-PDF se je spremenil od zadnje ankete! Če želite izvedeti več, si oglejte objavo v spletnem dnevniku tukaj:", - "changes2": "S temi spremembami dobimo plačano poslovno podporo in financiranje", - "please": "Prosimo, razmislite o sodelovanju v naši anketi, če želite prispevati k prihodnosti Stirling-PDF!", - "disabled": "(Pojavno okno ankete bo v naslednjih posodobitvah onemogočeno, vendar na voljo na dnu strani)", - "button": "Izpolnite anketo", - "dontShowAgain": "Ne prikaži več", - "meeting": { - "1": "Če v službi uporabljate Stirling PDF, bi radi govorili z vami. Ponujamo seje tehnične podpore v zameno za 15-minutno sejo odkrivanja uporabnikov.", - "2": "To je priložnost za:", - "3": "Poiščite pomoč pri uvajanju, integracijah ali odpravljanju težav", - "4": "Zagotovite neposredne povratne informacije o zmogljivosti, robnih primerih in vrzeli v funkcijah", - "5": "Pomagajte nam izboljšati Stirling PDF za uporabo v podjetju v resničnem svetu", - "6": "Če ste zainteresirani, si lahko rezervirate čas neposredno pri naši ekipi. (samo angleško govoreči)", - "7": "Veselimo se poglobitve v vaše primere uporabe in izboljšanja Stirling PDF-ja!", - "notInterested": "Niste podjetje in/ali vas zanima srečanje?", - "button": "Rezerviraj srečanje" - } - }, - "removeImage": { - "title": "Odstrani sliko", - "header": "Odstrani sliko", - "removeImage": "Odstrani sliko", - "submit": "Odstrani sliko" - }, - "splitByChapters": { - "title": "Razdeli PDF po poglavjih", - "header": "Razdeli PDF po poglavjih", - "bookmarkLevel": "Raven zaznamka", - "includeMetadata": "Vključi metapodatke", - "allowDuplicates": "Dovoli podvojitve", - "desc": { - "1": "To orodje razdeli datoteko PDF na več datotek PDF glede na strukturo poglavij.", - "2": "Raven zaznamkov: Izberite raven zaznamkov, ki jih želite uporabiti za razdelitev (0 za najvišjo raven, 1 za drugo raven itd.).", - "3": "Vključi metapodatke: Če je označeno, bodo metapodatki izvirnega PDF-ja vključeni v vsak razdeljeni PDF.", - "4": "Dovoli dvojnike: Če je označeno, dovoljuje več zaznamkov na isti strani za ustvarjanje ločenih PDF-jev." - }, - "submit": "Razdeli PDF" - }, - "fileChooser": { - "click": "Klikni", - "or": "ali", - "dragAndDrop": "Povleci in spusti", - "dragAndDropPDF": "Povleci in spusti datoteko PDF", - "dragAndDropImage": "Povleci in spusti slikovno datoteko", - "hoveredDragAndDrop": "Povleci in spusti datoteko(e) sem", - "extractPDF": "Izvlečenje..." - }, - "releases": { - "footer": "Izdaje", - "title": "Opombe ob izdaji", - "header": "Opombe ob izdaji", - "current": { - "version": "Trenutna izdaja" - }, - "note": "Opombe ob izdaji so na voljo samo v angleščini" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/sr-LATN-RS/translation.json b/frontend/dist/locales/sr-LATN-RS/translation.json deleted file mode 100644 index 2821b0ffd..000000000 --- a/frontend/dist/locales/sr-LATN-RS/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Font Size", - "fontName": "Font Name", - "title": "Dodavanje brojeva stranica", - "header": "Dodavanje brojeva stranica", - "selectText": { - "1": "Izaberi PDF fajl:", - "2": "Veličina margine", - "3": "Pozicija", - "4": "Početni broj", - "5": "Brojane stranice", - "6": "Prilagođeni tekst" - }, - "customTextDesc": "Prilagođeni tekst", - "numberPagesDesc": "Koje stranice brojati, podrazumevano 'sve', takođe prihvata 1-5 ili 2,5,9 itd.", - "customNumberDesc": "Podrazumevano je {n}, takođe prihvata 'Stranica {n} od {ukupno}', 'Tekst-{n}', '{ime_fajla}-{n}'", - "submit": "Dodaj brojeve stranica" - }, - "pdfPrompt": "Odaberi PDF(ove)", - "multiPdfPrompt": "Odaberi PDF-ove (2+)", - "multiPdfDropPrompt": "Odaberi (prevuci i pusti ) sve PDF-ove koji su vam potrebni", - "imgPrompt": "Odaberi sliku (slike)", - "genericSubmit": "Prihvatiti", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Warning:Upozorenje: Ovaj proces može trajati i do minut, u zavisnosti od veličine dokumenta", - "pageOrderPrompt": "Prilagođeni redosled stranica (unesi listu brojeva stranica ili funkcija, kao što su 2n+1, razdvojene zarezima) :", - "pageSelectionPrompt": "Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :", - "goToPage": "Idi", - "true": "Tačno", - "false": "Netačno", - "unknown": "Nepoznato", - "save": "Sačuvaj", - "saveToBrowser": "Save to Browser", - "close": "Zatvori", - "filesSelected": "odabrani fajlovi", - "noFavourites": "Nema dodatih favorita", - "downloadComplete": "Download Complete", - "bored": "Da li ti je dosadno dok čekaš?", - "alphabet": "Alfabet", - "downloadPdf": "Skini PDF", - "text": "Tekst", - "font": "Font", - "selectFillter": "-- Izaberi --", - "pageNum": "Broj Strane", - "sizes": { - "small": "Malo", - "medium": "Srednje", - "large": "Veliko", - "x-large": "X-Veliko" - }, - "error": { - "pdfPassword": "PDF dokument je šifrovan i lozinka nije data ili je netačna", - "_value": "Error", - "sorry": "Sorry for the issue!", - "needHelp": "Need help / Found an issue?", - "contactTip": "If you're still having trouble, don't hesitate to reach out to us for help. You can submit a ticket on our GitHub page or contact us through Discord:", - "404": { - "head": "404 - Page Not Found | Oops, we tripped in the code!", - "1": "We can't seem to find the page you're looking for.", - "2": "Something went wrong" - }, - "github": "Submit a ticket on GitHub", - "showStack": "Show Stack Trace", - "copyStack": "Copy Stack Trace", - "githubSubmit": "GitHub - Submit a ticket", - "discordSubmit": "Discord - Submit Support post" - }, - "delete": "Obriši", - "username": "Korisničko ime", - "password": "Šifra", - "welcome": "Dobrodošli", - "property": "Svojstvo", - "black": "Crno", - "white": "Belo", - "red": "Crveno", - "green": "Zeleno", - "blue": "Plavo", - "custom": "Prilagođeno...", - "WorkInProgess": "Radovi u toku, možda neće raditi ili će biti grešaka, molimo prijavite sve probleme !", - "poweredBy": "Powered by", - "yes": "Yes", - "no": "No", - "changedCredsMessage": "Podaci za prijavu uspešno promenjeni!", - "notAuthenticatedMessage": "Korisnik nije autentifikovan.", - "userNotFoundMessage": "Korisnik nije pronađen.", - "incorrectPasswordMessage": "Trenutna šifra je netačna.", - "usernameExistsMessage": "Novi korisnik već postoji", - "invalidUsernameMessage": "Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.", - "invalidPasswordMessage": "The password must not be empty and must not have spaces at the beginning or end.", - "confirmPasswordErrorMessage": "New Password and Confirm New Password must match.", - "deleteCurrentUserMessage": "Cannot delete currently logged in user.", - "deleteUsernameExistsMessage": "The username does not exist and cannot be deleted.", - "downgradeCurrentUserMessage": "Nije moguće degradirati ulogu trenutnog korisnika", - "disabledCurrentUserMessage": "The current user cannot be disabled", - "downgradeCurrentUserLongMessage": "Nije moguće unazaditi ulogu trenutnog korisnika. Dakle, trenutni korisnik neće biti prikazan.", - "userAlreadyExistsOAuthMessage": "The user already exists as an OAuth2 user.", - "userAlreadyExistsWebMessage": "The user already exists as an web user.", - "oops": "Oops!", - "help": "Help", - "goHomepage": "Go to Homepage", - "joinDiscord": "Join our Discord server", - "seeDockerHub": "See Docker Hub", - "visitGithub": "Visit Github Repository", - "donate": "Donate", - "color": "Color", - "sponsor": "Sponsor", - "info": "Info", - "pro": "Pro", - "page": "Page", - "pages": "Pages", - "loading": "Loading...", - "addToDoc": "Add to Document", - "reset": "Reset", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Privacy Policy", - "terms": "Terms and Conditions", - "accessibility": "Accessibility", - "cookie": "Cookie Policy", - "impressum": "Impressum", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Meni za Pipeline (Alfa verzija)", - "uploadButton": "Postavi prilagođeno", - "configureButton": "Konfiguriši", - "defaultOption": "Prilagođeno", - "submitButton": "Pošalji", - "help": "Pipeline Help", - "scanHelp": "Folder Scanning Help", - "deletePrompt": "Are you sure you want to delete pipeline", - "tags": "automatizacija,sekvenciranje,skriptirano,batch-process", - "title": "Tok rada" - }, - "pipelineOptions": { - "header": "Konfiguracija Pipeline-a", - "pipelineNameLabel": "Ime Pipeline-a", - "saveSettings": "Sačuvaj podešavanja", - "pipelineNamePrompt": "Unesite ime pipeline-a ovde", - "selectOperation": "Select Operation", - "addOperationButton": "Dodaj operaciju", - "pipelineHeader": "Pipeline:", - "saveButton": "Preuzmi", - "validateButton": "Proveri" - }, - "enterpriseEdition": { - "button": "Upgrade to Pro", - "warning": "This feature is only available to Pro users.", - "yamlAdvert": "Stirling PDF Pro supports YAML configuration files and other SSO features.", - "ssoAdvert": "Looking for more user management features? Check out Stirling PDF Pro" - }, - "analytics": { - "title": "Do you want make Stirling PDF better?", - "paragraph1": "Stirling PDF has opt in analytics to help us improve the product. We do not track any personal information or file contents.", - "paragraph2": "Please consider enabling analytics to help Stirling-PDF grow and to allow us to understand our users better.", - "enable": "Enable analytics", - "disable": "Disable analytics", - "settings": "You can change the settings for analytics in the config/settings.yml file" - }, - "navbar": { - "favorite": "Favorites", - "recent": "New and recently updated", - "darkmode": "Tamni režim", - "language": "Languages", - "settings": "Podešavanja", - "allTools": "Tools", - "multiTool": "Multi Tools", - "search": "Search", - "sections": { - "organize": "Organize", - "convertTo": "Convert to PDF", - "convertFrom": "Convert from PDF", - "security": "Sign & Security", - "advance": "Advanced", - "edit": "View & Edit", - "popular": "Popular" - } - }, - "settings": { - "title": "Podešavanja", - "update": "Dostupno ažuriranje", - "updateAvailable": "{0} is the current installed version. A new version ({1}) is available.", - "appVersion": "Verzija aplikacije:", - "downloadOption": { - "title": "Odaberite opciju preuzimanja (Za preuzimanje pojedinačnih fajlova bez zip formata):", - "1": "Otvori u istom prozoru", - "2": "Otvori u novom prozoru", - "3": "Preuzmi fajl" - }, - "zipThreshold": "Zipuj fajlove kada pređe broj preuzetih fajlova", - "signOut": "Odjava", - "accountSettings": "Podešavanja naloga", - "bored": { - "help": "Enables easter egg game" - }, - "cacheInputs": { - "name": "Save form inputs", - "help": "Enable to store previously used inputs for future runs" - } - }, - "changeCreds": { - "title": "Promeni pristupne podatke", - "header": "Ažurirajte detalje svog naloga", - "changePassword": "You are using default login credentials. Please enter a new password", - "newUsername": "Novo korisničko ime", - "oldPassword": "Trenutna lozinka", - "newPassword": "Nova lozinka", - "confirmNewPassword": "Potvrdite novu lozinku", - "submit": "Potvrdi promene" - }, - "account": { - "title": "Podešavanja naloga", - "accountSettings": "Podešavanja naloga", - "adminSettings": "Admin podešavanja - Pregled i dodavanje korisnika", - "userControlSettings": "Podešavanja kontrole korisnika", - "changeUsername": "Pormeni korisničko ime", - "newUsername": "Novo korisničko ime", - "password": "Potvrda lozinke", - "oldPassword": "Stara lozinka", - "newPassword": "Nova lozinka", - "changePassword": "Pormeni lozinku", - "confirmNewPassword": "Potvrdi novu lozinku", - "signOut": "Odjava", - "yourApiKey": "Tvoj API ključ", - "syncTitle": "Sinhronizacija podešavanja pregledača sa nalogom", - "settingsCompare": "Upoređivanje podešavanja:", - "property": "Svojstvo", - "webBrowserSettings": "Podešavanja veb pregledača", - "syncToBrowser": "Sinhronizacija naloga -> pregledač", - "syncToAccount": "Sinhronizacija naloga <- pregledač" - }, - "adminUserSettings": { - "title": "Podešavanja kontrole korisnika", - "header": "Podešavanja kontrole korisnika za administratora", - "admin": "Administrator", - "user": "Korisnik", - "addUser": "Dodaj novog korisnika", - "deleteUser": "Delete User", - "confirmDeleteUser": "Should the user be deleted?", - "confirmChangeUserStatus": "Should the user be disabled/enabled?", - "usernameInfo": "Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.", - "roles": "Uloge", - "role": "Uloga", - "actions": "Akcije", - "apiUser": "Korisnik s ograničenim API pristupom", - "extraApiUser": "Additional Limited API User", - "webOnlyUser": "Korisnik samo za web", - "demoUser": "Demo korisnik (Bez prilagođenih podešavanja)", - "internalApiUser": "Internal API User", - "forceChange": "Prisili korisnika da promeni korisničko ime/lozinku pri prijavi", - "submit": "Sačuvaj korisnika", - "changeUserRole": "Promenite ulogu korisnika", - "authenticated": "Authenticated", - "editOwnProfil": "Edit own profile", - "enabledUser": "enabled user", - "disabledUser": "disabled user", - "activeUsers": "Active Users:", - "disabledUsers": "Disabled Users:", - "totalUsers": "Total Users:", - "lastRequest": "Last Request", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Database Import/Export", - "header": "Database Import/Export", - "fileName": "File Name", - "creationDate": "Creation Date", - "fileSize": "File Size", - "deleteBackupFile": "Delete Backup File", - "importBackupFile": "Import Backup File", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Download Backup File", - "info_1": "When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.", - "info_2": "The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.", - "submit": "Import Backup", - "importIntoDatabaseSuccessed": "Import into database successed", - "backupCreated": "Database backup successful", - "fileNotFound": "File not Found", - "fileNullOrEmpty": "File must not be null or empty", - "failedImportFile": "Failed Import File", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "Your session has expired. Please refresh the page and try again.", - "refreshPage": "Refresh Page" - }, - "home": { - "desc": "Vaš lokalno hostovan jedinstveni alat za sve vaše potrebe vezane za PDF.", - "searchBar": "Pretraži funkcije...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Pregledaj, anotiraj, dodaj tekst ili slike" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "PDF Multi Alat", - "desc": "Spajanje, rotacija, premeštanje i uklanjanje stranica" - }, - "merge": { - "title": "Spajanje", - "desc": "Lako spojite više PDF-ova u jedan." - }, - "split": { - "title": "Razdvajanje", - "desc": "Razdvojite PDF-ove u više dokumenata" - }, - "rotate": { - "title": "Rotacija", - "desc": "Lako rotirajte vaše PDF-ove." - }, - "imageToPdf": { - "title": "Slika u PDF", - "desc": "Konvertujte sliku (PNG, JPEG, GIF) u PDF." - }, - "pdfToImage": { - "title": "PDF u Sliku", - "desc": "Konvertujte PDF u sliku. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Organizacija", - "desc": "Uklonite/Premeštajte stranice u bilo kom redosledu" - }, - "addImage": { - "title": "Dodaj sliku", - "desc": "Dodaje sliku na određeno mesto u PDF-u" - }, - "watermark": { - "title": "Dodaj vodeni žig", - "desc": "Dodajte prilagođeni vodeni žig na vaš PDF dokument." - }, - "permissions": { - "title": "Promeni dozvole", - "desc": "Promenite dozvole vašeg PDF dokumenta" - }, - "removePages": { - "title": "Ukloni", - "desc": "Obrišite nepotrebne stranice iz vašeg PDF dokumenta." - }, - "addPassword": { - "title": "Dodaj lozinku", - "desc": "Enkriptujte vaš PDF dokument lozinkom." - }, - "removePassword": { - "title": "Ukloni lozinku", - "desc": "Uklonite zaštitu lozinkom sa vašeg PDF dokumenta." - }, - "compressPdfs": { - "title": "Kompresuj", - "desc": "Kompresujte PDF-ove kako bi smanjili veličinu fajla." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Promena metapodataka", - "desc": "Promenite/Uklonite/Dodajte metapodatke u PDF dokumentu" - }, - "fileToPDF": { - "title": "Konvertuj fajl u PDF", - "desc": "Konvertujte gotovo bilo koji fajl u PDF (DOCX, PNG, XLS, PPT, TXT i više)" - }, - "ocr": { - "title": "OCR / Čišćenje skenova", - "desc": "Čišćenje skenova i detektovanje teksta sa slika unutar PDF-a i ponovno dodavanje kao teksta." - }, - "extractImages": { - "title": "Izvuci slike", - "desc": "Izvlači sve slike iz PDF-a i čuva ih u zip formatu" - }, - "pdfToPDFA": { - "title": "PDF u PDF/A", - "desc": "Konvertujte PDF u PDF/A za dugoročno čuvanje" - }, - "PDFToWord": { - "title": "PDF u Word", - "desc": "Konvertujte PDF u Word formate (DOC, DOCX i ODT)" - }, - "PDFToPresentation": { - "title": "PDF u Prezentaciju", - "desc": "Konvertujte PDF u formate za prezentaciju (PPT, PPTX i ODP)" - }, - "PDFToText": { - "title": "PDF u RTF (Tekst)", - "desc": "Konvertujte PDF u tekst ili RTF format" - }, - "PDFToHTML": { - "title": "PDF u HTML", - "desc": "Konvertujte PDF u HTML format" - }, - "PDFToXML": { - "title": "PDF u XML", - "desc": "Konvertujte PDF u XML format" - }, - "ScannerImageSplit": { - "title": "Detekcija/Razdvajanje skeniranih fotografija", - "desc": "Razdvaja više fotografija unutar slike/PDF-a" - }, - "sign": { - "title": "Potpis", - "desc": "Dodaje potpis u PDF crtežom, tekstom ili slikom" - }, - "flatten": { - "title": "Ravnanje", - "desc": "Uklanja sve interaktivne elemente i forme iz PDF-a" - }, - "repair": { - "title": "Popravi", - "desc": "Pokušava popraviti oštećeni/izgubljeni PDF" - }, - "removeBlanks": { - "title": "Ukloni prazne stranice", - "desc": "Detektuje i uklanja prazne stranice iz dokumenta" - }, - "removeAnnotations": { - "title": "Ukloni Anotacije", - "desc": "Uklanja sve komentare/anotacije iz PDF-a" - }, - "compare": { - "title": "Uporedi", - "desc": "Upoređuje i prikazuje razlike između 2 PDF dokumenata" - }, - "certSign": { - "title": "Potpis sa sertifikatom", - "desc": "Potpisuje PDF sa sertifikatom/ključem (PEM/P12)" - }, - "removeCertSign": { - "title": "Remove Certificate Sign", - "desc": "Remove certificate signature from PDF" - }, - "pageLayout": { - "title": "Višestruki prikaz stranica", - "desc": "Spaja više stranica PDF dokumenta u jednu stranicu" - }, - "scalePages": { - "title": "Podesi veličinu/skalu stranice", - "desc": "Podesi veličinu/skalu stranice i/ili njenog sadržaja." - }, - "pipeline": { - "title": "Pipeline (Napredno)", - "desc": "Pokreće više akcija na PDF-ovima definisanjem skripti u pipelinu" - }, - "add-page-numbers": { - "title": "Dodaj brojeve stranica", - "desc": "Dodaje brojeve stranica u dokumentu na određeno mesto" - }, - "auto-rename": { - "title": "Automatsko preimenovanje PDF fajla", - "desc": "Automatski menja ime PDF fajla na osnovu detektovanog zaglavlja" - }, - "adjust-contrast": { - "title": "Podesi boje/kontrast", - "desc": "Podesi kontrast, zasićenost i osvetljenost PDF-a" - }, - "crop": { - "title": "Skraćivanje PDF-a", - "desc": "Skraćuje PDF radi smanjenja veličine (zadržava tekst!)" - }, - "autoSplitPDF": { - "title": "Automatsko razdvajanje stranica", - "desc": "Automatski deli skenirane PDF-ove pomoću fizičkog skenera QR koda" - }, - "sanitizePdf": { - "title": "Sanitizacija", - "desc": "Uklanja skripte i druge elemente iz PDF fajlova" - }, - "URLToPDF": { - "title": "URL/Website u PDF", - "desc": "Konvertuje bilo koji http(s) URL u PDF" - }, - "HTMLToPDF": { - "title": "HTML u PDF", - "desc": "Konvertuje bilo koji HTML fajl ili zip u PDF" - }, - "MarkdownToPDF": { - "title": "Markdown u PDF", - "desc": "Konvertuje bilo koji Markdown fajl u PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Dohvati SVE informacije o PDF-u", - "desc": "Dobavlja sve moguće informacije o PDF-ovima" - }, - "extractPage": { - "title": "Izdvajanje stranica", - "desc": "Izdvaja odabrane stranice iz PDF-a" - }, - "PdfToSinglePage": { - "title": "PDF u Jednu Veliku Stranicu", - "desc": "Spaja sve stranice PDF-a u jednu veliku stranicu" - }, - "showJS": { - "title": "Prikaži JavaScript", - "desc": "Pretražuje i prikazuje bilo koji JavaScript ubačen u PDF" - }, - "autoRedact": { - "title": "Automatsko Cenzurisanje", - "desc": "Automatsko cenzurisanje teksta u PDF-u na osnovu unetog teksta" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF u CSV", - "desc": "Izdvaja tabele iz PDF-a pretvarajući ih u CSV" - }, - "autoSizeSplitPDF": { - "title": "Automatsko Deljenje po Veličini/Broju", - "desc": "Deljenje jednog PDF-a na više dokumenata na osnovu veličine, broja stranica ili broja dokumenata" - }, - "overlay-pdfs": { - "title": "Preklapanje PDF-ova", - "desc": "Preklapa PDF-ove jedan preko drugog" - }, - "split-by-sections": { - "title": "Deljenje PDF-a po Odeljcima", - "desc": "Deljenje svake stranice PDF-a na manje horizontalne i vertikalne odeljke" - }, - "AddStampRequest": { - "title": "Add Stamp to PDF", - "desc": "Add text or add image stamps at set locations" - }, - "removeImagePdf": { - "title": "Remove image", - "desc": "Remove image from PDF to reduce file size" - }, - "splitPdfByChapters": { - "title": "Split PDF by Chapters", - "desc": "Split a PDF into multiple files based on its chapter structure." - }, - "validateSignature": { - "title": "Validate PDF Signature", - "desc": "Verify digital signatures and certificates in PDF documents" - }, - "replaceColorPdf": { - "title": "Replace and Invert Color", - "desc": "Replace color for text and background in PDF and invert full color of pdf to reduce file size" - } - }, - "viewPdf": { - "tags": "pregled,čitanje,anotiranje,tekst,slika", - "title": "View/Edit PDF", - "header": "Prikaz PDF-a" - }, - "multiTool": { - "tags": "Multi Alat,Multi operacija,Korisnički interfejs,klik i povuci,front end,klijentska strana,interaktivno,pomera", - "title": "PDF Multi Alatka", - "header": "PDF Multi Alatka", - "uploadPrompts": "File Name", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "selectPages": "Page Select", - "selectedPages": "Selected Pages", - "page": "Page", - "deleteSelected": "Delete Selected", - "downloadAll": "Export", - "downloadSelected": "Export Selected", - "insertPageBreak": "Insert Page Break", - "addFile": "Add File", - "rotateLeft": "Rotate Left", - "rotateRight": "Rotate Right", - "split": "Split", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "Delete", - "dragDropMessage": "Page(s) Selected", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "spajanje,Operacije sa stranicama,Backend,server strana", - "title": "Spajanje", - "header": "Spajanje više PDF fajlova (2+)", - "sortByName": "Sortiraj po imenu", - "sortByDate": "Sortiraj po datumu", - "removeCertSign": "Remove digital signature in the merged file?", - "submit": "Spajanje" - }, - "split": { - "tags": "Operacije sa stranicama,podela,Višestruke stranice,sečenje,server strana", - "title": "Razdvajanje PDF-a", - "header": "Razdvajanje PDF-a", - "desc": { - "1": "Brojevi koje izaberete predstavljaju brojeve stranica na kojima želite napraviti razdvajanje", - "2": "Na primer, izbor 1,3,7-9 bi razdvojio dokument od 10 stranica u 6 odvojenih PDF-a sa:", - "3": "Dokument #1: Stranica 1", - "4": "Dokument #2: Stranice 2 i 3", - "5": "Dokument #3: Stranice 4, 5, 6 i 7", - "6": "Dokument #4: Stranica 8", - "7": "Dokument #5: Stranica 9", - "8": "Dokument #6: Stranice 10" - }, - "splitPages": "Unesite stranice za razdvajanje:", - "submit": "Razdvoji" - }, - "rotate": { - "tags": "server strana", - "title": "Rotiranje PDF-a", - "header": "Rotiranje PDF-a", - "selectAngle": "Izaberite ugao rotacije (u višestrukim od 90 stepeni):", - "submit": "Rotiraj" - }, - "imageToPdf": { - "tags": "konverzija,img,jpg,slika,foto" - }, - "pdfToImage": { - "tags": "konverzija,img,jpg,slika,foto", - "title": "PDF u sliku", - "header": "PDF u sliku", - "selectText": "Format slike", - "singleOrMultiple": "Tip rezultata slike po stranici", - "single": "Jedna velika slika koja sadrži sve stranice", - "multi": "Više slika, po jedna slika po stranici", - "colorType": "Tip boje", - "color": "Boja", - "grey": "Nijanse sive", - "blackwhite": "Crno-belo (Može izgubiti podatke!)", - "submit": "Konvertuj", - "info": "Python is not installed. Required for WebP conversion.", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,even,odd,sort,move", - "title": "Organizator stranica", - "header": "Organizator stranica u PDF-u", - "submit": "Preuredi stranice", - "mode": { - "_value": "Mode", - "1": "Custom Page Order", - "2": "Reverse Order", - "3": "Duplex Sort", - "4": "Booklet Sort", - "5": "Side Stitch Booklet Sort", - "6": "Odd-Even Split", - "7": "Remove First", - "8": "Remove Last", - "9": "Remove First and Last", - "10": "Odd-Even Merge", - "11": "Duplicate all pages" - }, - "placeholder": "(e.g. 1,3,2 or 4-8,2,10-12 or 2n-1)" - }, - "addImage": { - "tags": "img,jpg,slika,foto", - "title": "Dodaj sliku", - "header": "Dodaj sliku u PDF", - "everyPage": "Na svakoj stranici?", - "upload": "Dodaj sliku", - "submit": "Dodaj sliku" - }, - "watermark": { - "tags": "Tekst,ponavljanje,etiketa,vlastiti,autorsko pravo,zaštita, img,jpg,slika,foto", - "title": "Dodaj vodeni žig", - "header": "Dodaj vodeni žig", - "customColor": "Custom Text Color", - "selectText": { - "1": "Izaberite PDF za dodavanje vodenog žiga:", - "2": "Tekst vodenog žiga:", - "3": "Veličina fonta:", - "4": "Rotacija (0-360):", - "5": "Širina razmaka (Razmak između svakog vodenog žiga horizontalno):", - "6": "Visina razmaka (Razmak između svakog vodenog žiga vertikalno):", - "7": "Opačitost (0% - 100%):", - "8": "Tip vodenog žiga:", - "9": "Slika vodenog žiga:", - "10": "Convert PDF to PDF-Image" - }, - "submit": "Dodaj vodeni žig", - "type": { - "1": "Text", - "2": "Image" - } - }, - "permissions": { - "tags": "čitanje,pisanje,izmena,štampa", - "title": "Promeni dozvole", - "header": "Promeni dozvole", - "warning": "Upozorenje: Da biste ove dozvole učinili nepromenljivim, preporučuje se postavljanje šifre putem stranice za dodavanje šifre.", - "selectText": { - "1": "Izaberite PDF za promenu dozvola", - "2": "Postavke dozvola", - "3": "Onemogući sastavljanje dokumenta", - "4": "Onemogući ekstrakciju sadržaja", - "5": "Onemogući ekstrakciju za pristupačnost", - "6": "Onemogući popunjavanje formulara", - "7": "Onemogući modifikaciju", - "8": "Onemogući modifikaciju anotacija", - "9": "Onemogući štampanje", - "10": "Onemogući štampanje u različitim formatima" - }, - "submit": "Promeni" - }, - "removePages": { - "tags": "Ukloni stranice,obriši stranice" - }, - "addPassword": { - "tags": "bezbedno,zaštita", - "title": "Dodaj šifru", - "header": "Dodaj šifru (Enkripcija)", - "selectText": { - "1": "Izaberite PDF za enkripciju", - "2": "Korisnička šifra", - "3": "Dužina enkripcijskog ključa", - "4": "Veće vrednosti su jače, ali manje vrednosti imaju bolju kompatibilnost.", - "5": "Postavke dozvola (Preporučuje se korišćenje sa šifrom vlasnika)", - "6": "Onemogući sastavljanje dokumenta", - "7": "Onemogući ekstrakciju sadržaja", - "8": "Onemogući ekstrakciju za pristupačnost", - "9": "Onemogući popunjavanje formulara", - "10": "Onemogući modifikaciju", - "11": "Onemogući modifikaciju anotacija", - "12": "Onemogući štampanje", - "13": "Onemogući štampanje u različitim formatima", - "14": "Šifra vlasnika", - "15": "Ograničava šta se može raditi sa dokumentom nakon otvaranja (Nije podržano od svih čitača)", - "16": "Ograničava otvaranje samog dokumenta" - }, - "submit": "Enkriptuj" - }, - "removePassword": { - "tags": "bezbedno,Dešifruj,zaštita,ukloni lozinku", - "title": "Ukloni šifru", - "header": "Ukloni šifru (Dekripcija)", - "selectText": { - "1": "Izaberite PDF za dekripciju", - "2": "Šifra" - }, - "submit": "Ukloni" - }, - "compressPdfs": { - "tags": "smanji,mali,minijaturni" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Naslov,autor,datum,kreacije,vreme,izdavač,proizvođač,statistike", - "title": "Naslov:", - "header": "Promeni metapodatke", - "selectText": { - "1": "Izmenite promenljive koje želite promeniti", - "2": "Obriši sve metapodatke", - "3": "Prikaži prilagođene metapodatke:", - "4": "Drugi metapodaci:", - "5": "Dodaj prilagođeni unos metapodataka" - }, - "author": "Autor:", - "creationDate": "Datum kreiranja (gggg/MM/dd HH:mm:ss):", - "creator": "Kreator:", - "keywords": "Ključne reči:", - "modDate": "Datum izmene (gggg/MM/dd HH:mm:ss):", - "producer": "Proizvođač:", - "subject": "Tema:", - "trapped": "Zaglavljeno:", - "submit": "Promeni" - }, - "fileToPDF": { - "tags": "transformacija,format,dokument,slika,slajd,tekst,konverzija,office,docs,word,excel,powerpoint", - "title": "Fajl u PDF", - "header": "Konvertuj bilo koji fajl u PDF", - "credit": "Ova usluga koristi LibreOffice i Unoconv za konverziju fajla.", - "supportedFileTypesInfo": "Supported File types", - "supportedFileTypes": "Podržani tipovi fajlova bi trebali uključivati navedeno, ali za punu ažuriranu listu podržanih formata, molimo pogledajte LibreOffice dokumentaciju", - "submit": "Konvertuj u PDF" - }, - "ocr": { - "tags": "prepoznavanje,tekst,slika,sken,čitanje,identifikacija,detekcija,uređivanje", - "title": "OCR / Čišćenje skeniranja", - "header": "Čišćenje skeniranja / OCR (Optičko prepoznavanje znakova)", - "selectText": { - "1": "Odaberite jezike koji će biti detektovani unutar PDF-a (Navedeni su trenutno detektovani):", - "2": "Proizvedi tekstualni fajl koji sadrži OCR tekst uz OCR-ovani PDF", - "3": "Ispravite stranice koje su skenirane pod uglom rotirajući ih na svoje mesto", - "4": "Očistite stranicu tako da je manje verovatno da će OCR pronaći tekst u pozadinskom šumu. (Bez promene izlaza)", - "5": "Očistite stranicu tako da je manje verovatno da će OCR pronaći tekst u pozadinskom šumu, zadržavajući čišćenje u izlazu.", - "6": "Ignoriše stranice koje imaju interaktivni tekst, samo OCR-uje stranice koje su slike", - "7": "Prinudni OCR, OCR-uje svaku stranicu uklanjajući sve originalne tekstualne elemente", - "8": "Normalno (Prikaže grešku ako PDF sadrži tekst)", - "9": "Dodatne postavke", - "10": "Režim OCR-a", - "11": "Ukloni slike nakon OCR-a (Uklanja SVE slike, korisno samo ako je deo koraka konverzije)", - "12": "Tip rendiranja (Napredno)" - }, - "help": "Molimo vas da pročitate ovu dokumentaciju o tome kako koristiti ovo za druge jezike i/ili korišćenje van docker-a", - "credit": "Ova usluga koristi qpdf i Tesseract za OCR.", - "submit": "Obradi PDF sa OCR-om" - }, - "extractImages": { - "tags": "slika,foto,sačuvaj,arhiva,zip,zahvati,uhvati", - "title": "Izdvajanje slika", - "header": "Izdvajanje slika", - "selectText": "Odaberite format slike za konvertovanje izdvojenih slika", - "allowDuplicates": "Save duplicate images", - "submit": "Izdvajanje" - }, - "pdfToPDFA": { - "tags": "arhiva,dugoročno,standard,konverzija,čuvanje,čuvanje", - "title": "PDF u PDF/A", - "header": "PDF u PDF/A", - "credit": "Ova usluga koristi libreoffice za konverziju u PDF/A format", - "submit": "Konvertuj", - "tip": "Currently does not work for multiple inputs at once", - "outputFormat": "Output format", - "pdfWithDigitalSignature": "The PDF contains a digital signature. This will be removed in the next step." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformacija,format,konverzija,office,microsoft,docfile", - "title": "PDF u Word", - "header": "PDF u Word", - "selectText": { - "1": "Format izlaznog fajla" - }, - "credit": "Ova usluga koristi LibreOffice za konverziju fajlova.", - "submit": "Konvertuj" - }, - "PDFToPresentation": { - "tags": "slajdovi,prikaz,office,microsoft", - "title": "PDF u Prezentaciju", - "header": "PDF u Prezentaciju", - "selectText": { - "1": "Format izlaznog fajla" - }, - "credit": "Ova usluga koristi LibreOffice za konverziju fajlova.", - "submit": "Konvertuj" - }, - "PDFToText": { - "tags": "richformat,richtextformat,rich text format", - "title": "PDF u RTF (Tekst)", - "header": "PDF u RTF (Tekst)", - "selectText": { - "1": "Format izlaznog fajla" - }, - "credit": "Ova usluga koristi LibreOffice za konverziju fajlova.", - "submit": "Konvertuj" - }, - "PDFToHTML": { - "tags": "web sadržaj,prijateljski za pretraživače", - "title": "PDF u HTML", - "header": "PDF u HTML", - "credit": "Ova usluga koristi pdftohtml za konverziju fajlova.", - "submit": "Konvertuj" - }, - "PDFToXML": { - "tags": "izdvajanje-podataka,strukturirani-sadržaj,interop,transformacija,konvertovanje", - "title": "PDF u XML", - "header": "PDF u XML", - "credit": "Ova usluga koristi LibreOffice za konverziju fajlova.", - "submit": "Konvertuj" - }, - "ScannerImageSplit": { - "tags": "razdvoji,auto-detekcija,skeniranja,višestruke fotografije,organizacija", - "selectText": { - "1": "Ugao praga:", - "2": "Postavlja minimalni apsolutni ugao potreban za rotiranje slike (podrazumevano: 10).", - "3": "Tolerancija:", - "4": "Određuje opseg varijacije boja oko procenjene boje pozadine (podrazumevano: 30).", - "5": "Minimalna površina:", - "6": "Postavlja minimalni prag površine za fotografiju (podrazumevano: 10000).", - "7": "Minimalna površina konture:", - "8": "Postavlja minimalni prag površine konture za fotografiju", - "9": "Veličina ivice:", - "10": "Postavlja veličinu ivice dodate i uklonjene kako bi se sprečile bele ivice u izlazu (podrazumevano: 1)." - }, - "info": "Python is not installed. It is required to run." - }, - "sign": { - "tags": "autorizacija,inicijali,crtani-potpis,tekstualni-potpis,slikovni-potpis", - "title": "Potpiši", - "header": "Potpiši PDF fajlove", - "upload": "Učitaj sliku", - "draw": "Nacrtaj potpis", - "text": "Tekstualni unos", - "clear": "Obriši", - "add": "Dodaj", - "saved": "Saved Signatures", - "save": "Save Signature", - "personalSigs": "Personal Signatures", - "sharedSigs": "Shared Signatures", - "noSavedSigs": "No saved signatures found", - "addToAll": "Add to all pages", - "delete": "Delete", - "first": "First page", - "last": "Last page", - "next": "Next page", - "previous": "Previous page", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "statično,deaktivirati,neinteraktivno,usmeriti", - "title": "Ravnanje", - "header": "Ravnanje PDF fajlova", - "flattenOnlyForms": "Flatten only forms", - "submit": "Ravnanje" - }, - "repair": { - "tags": "popravi,vrati,korekcija,obnovi", - "title": "Popravi", - "header": "Popravi PDF fajlove", - "submit": "Popravi" - }, - "removeBlanks": { - "tags": "čišćenje,usmeriti,ne-sadržaj,organizacija", - "title": "Ukloni prazne stranice", - "header": "Ukloni prazne stranice", - "threshold": "Prag beline piksela:", - "thresholdDesc": "Prag za određivanje koliko beli piksel mora biti 'beli'. 0 = Crno, 255 čisto belo.", - "whitePercent": "Procenat bele boje (%):", - "whitePercentDesc": "Procenat stranice koji mora biti 'beli' pikseli da bi se uklonili", - "submit": "Ukloni prazne" - }, - "removeAnnotations": { - "tags": "komentari,isticanje,beleške,oznake,ukloni", - "title": "Ukloni Anotacije", - "header": "Ukloni Anotacije", - "submit": "Ukloni" - }, - "compare": { - "tags": "razlikovati,kontrast,izmene,analiza", - "title": "Uporedi", - "header": "Uporedi PDF fajlove", - "highlightColor": { - "1": "Highlight Color 1:", - "2": "Highlight Color 2:" - }, - "document": { - "1": "Dokument 1", - "2": "Dokument 2" - }, - "submit": "Uporedi", - "complex": { - "message": "One or both of the provided documents are large files, accuracy of comparison may be reduced" - }, - "large": { - "file": { - "message": "One or Both of the provided documents are too large to process" - } - }, - "no": { - "text": { - "message": "One or both of the selected PDFs have no text content. Please choose PDFs with text for comparison." - } - } - }, - "certSign": { - "tags": "autentifikacija,PEM,P12,zvanično,šifrovanje", - "title": "Potpisivanje Sertifikatom", - "header": "Potpiši PDF sa svojim sertifikatom (Rad u toku)", - "selectPDF": "Izaberite PDF fajl za potpisivanje:", - "jksNote": "Note: If your certificate type is not listed below, please convert it to a Java Keystore (.jks) file using the keytool command line tool. Then, choose the .jks file option below.", - "selectKey": "Izaberite svoj privatni ključ (PKCS#8 format, može biti .pem ili .der):", - "selectCert": "Izaberite svoj sertifikat (X.509 format, može biti .pem ili .der):", - "selectP12": "Izaberite svoj PKCS#12 keystore fajl (.p12 ili .pfx) (Opciono, ako je dostupan, trebalo bi da sadrži vaš privatni ključ i sertifikat):", - "selectJKS": "Select Your Java Keystore File (.jks or .keystore):", - "certType": "Tip sertifikata", - "password": "Unesite lozinku vašeg keystore-a ili privatnog ključa (ako je ima):", - "showSig": "Prikaži potpis", - "reason": "Razlog", - "location": "Lokacija", - "name": "Ime", - "showLogo": "Show Logo", - "submit": "Potpiši PDF" - }, - "removeCertSign": { - "tags": "authenticate,PEM,P12,official,decrypt", - "title": "Remove Certificate Signature", - "header": "Remove the digital certificate from the PDF", - "selectPDF": "Select a PDF file:", - "submit": "Remove Signature" - }, - "pageLayout": { - "tags": "spajanje,kompozit,pojedinačan-prikaz,organizacija", - "title": "Višestruki Raspored Stranica", - "header": "Višestruki Raspored Stranica", - "pagesPerSheet": "Stranica po listu:", - "addBorder": "Dodaj ivice", - "submit": "Potvrdi" - }, - "scalePages": { - "tags": "izmena,modifikacija,dimenzija,adaptacija", - "title": "Podesi razmeru stranica", - "header": "Podesi razmeru stranica", - "pageSize": "Veličina stranice dokumenta.", - "keepPageSize": "Original Size", - "scaleFactor": "Nivo zumiranja (rezanje) stranice.", - "submit": "Potvrdi" - }, - "add-page-numbers": { - "tags": "paginacija,oznaka,organizacija,indeks" - }, - "auto-rename": { - "tags": "auto-detekcija,zaglavlje-bazirano,organizacija,preimenovanje", - "title": "Automatsko preimenovanje", - "header": "Automatsko preimenovanje PDF-a", - "submit": "Automatsko preimenovanje" - }, - "adjust-contrast": { - "tags": "korekcija-boja,podešavanje,modifikacija,unapredi" - }, - "crop": { - "tags": "trimovanje,skupljanje,uređivanje,oblikovanje", - "title": "Iseci", - "header": "Skraćivanje PDF-a", - "submit": "Potvrdi" - }, - "autoSplitPDF": { - "tags": "QR-bazirano,razdvoji,segment-skeniranja,organizacija", - "title": "Automatsko Deljenje PDF-a", - "header": "Automatsko Deljenje PDF-a", - "description": "Štampajte, umetnite, skenirajte, učitajte i dozvolite nam da automatski razdvojimo vaše dokumente. Nije potrebno ručno sortiranje.", - "selectText": { - "1": "Odštampajte nekoliko listova razdeljivača ispod (Crno-belo je u redu).", - "2": "Skenirajte sve vaše dokumente odjednom, ubacivanjem lista razdeljivača između njih.", - "3": "Učitajte jedan veliki skenirani PDF fajl i dozvolite Stirling PDF-u da obavi ostalo.", - "4": "Listovi razdeljivača se automatski detektuju i uklanjaju, obezbeđujući uredan konačni dokument." - }, - "formPrompt": "Potvrdite PDF koji sadrži Stirling-PDF listove razdeljivača:", - "duplexMode": "Dupleks režim (skeniranje prednje i zadnje strane)", - "dividerDownload2": "Preuzmi 'Auto Splitter Divider (sa uputstvima).pdf'", - "submit": "Potvrdi" - }, - "sanitizePdf": { - "tags": "čišćenje,bezbednost,bezbedno,ukloni-pretnje" - }, - "URLToPDF": { - "tags": "uhvati-web,sačuvaj-stranicu,web-u-doc,arhiva", - "title": "URL u PDF", - "header": "URL u PDF", - "submit": "Konvertuj", - "credit": "Koristi WeasyPrint" - }, - "HTMLToPDF": { - "tags": "oznake,web-sadržaj,transformacija,konvertovanje", - "title": "HTML u PDF", - "header": "HTML u PDF", - "help": "Prihvata HTML fajlove i ZIP-ove koji sadrže html/css/slike itd. potrebno", - "submit": "Konvertuj", - "credit": "Koristi WeasyPrint", - "zoom": "Zoom level for displaying the website.", - "pageWidth": "Width of the page in centimeters. (Blank to default)", - "pageHeight": "Height of the page in centimeters. (Blank to default)", - "marginTop": "Top margin of the page in millimeters. (Blank to default)", - "marginBottom": "Bottom margin of the page in millimeters. (Blank to default)", - "marginLeft": "Left margin of the page in millimeters. (Blank to default)", - "marginRight": "Right margin of the page in millimeters. (Blank to default)", - "printBackground": "Render the background of websites.", - "defaultHeader": "Enable Default Header (Name and page number)", - "cssMediaType": "Change the CSS media type of the page.", - "none": "None", - "print": "Print", - "screen": "Screen" - }, - "MarkdownToPDF": { - "tags": "oznake,web-sadržaj,transformacija,konvertovanje", - "title": "Markdown u PDF", - "header": "Markdown u PDF", - "submit": "Konvertuj", - "help": "Rad u toku", - "credit": "Koristi WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "informacije,podaci,statistike", - "title": "Informacije o PDF-u", - "header": "Informacije o PDF-u", - "submit": "Informacije", - "downloadJson": "Preuzmi JSON" - }, - "extractPage": { - "tags": "izdvajanje" - }, - "PdfToSinglePage": { - "tags": "jedna-stranica" - }, - "showJS": { - "tags": "JS", - "title": "Prikaži Javascript", - "header": "Prikaži Javascript", - "downloadJS": "Preuzmi Javascript", - "submit": "Prikaži" - }, - "autoRedact": { - "tags": "Cenzura,Sakrij,prekrivanje,crna,marker,skriveno", - "title": "Auto Cenzura", - "header": "Auto Cenzura", - "colorLabel": "Boja", - "textsToRedactLabel": "Tekst za cenzurisanje (razdvojeni linijama)", - "textsToRedactPlaceholder": "npr. \\nPoverljivo \\nVrhunski Tajno", - "useRegexLabel": "Koristi Regex", - "wholeWordSearchLabel": "Pretraga celih reči", - "customPaddingLabel": "Dodatni prazan prostor", - "convertPDFToImageLabel": "Konvertuj PDF u PDF-Image (koristi se za uklanjanje teksta iza okvira)", - "submitButton": "Potvrdi" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,Izdvajanje tabela,izdvajanje,konvertovanje" - }, - "autoSizeSplitPDF": { - "tags": "pdf,delenje,dokumenti,organizacija" - }, - "overlay-pdfs": { - "tags": "Preklapanje", - "header": "Preklapanje PDF fajlova", - "baseFile": { - "label": "Izaberite osnovni PDF fajl" - }, - "overlayFiles": { - "label": "Izaberite PDF fajlove za preklapanje" - }, - "mode": { - "label": "Izaberite režim preklapanja", - "sequential": "Sekvencijalno preklapanje", - "interleaved": "Interleaved preklapanje", - "fixedRepeat": "Fixed Repeat preklapanje" - }, - "counts": { - "label": "Broj preklapanja (za režim Fixed Repeat)", - "placeholder": "Unesite brojeve odvojene zarezom (npr. 2,3,1)" - }, - "position": { - "label": "Izaberite poziciju preklapanja", - "foreground": "Prethodni plan", - "background": "Pozadina" - }, - "submit": "Potvrdi" - }, - "split-by-sections": { - "tags": "Deljenje odeljaka,Deljenje,Podešavanje", - "title": "Razdvoji PDF po sekcijama", - "header": "Razdvoji PDF u sekcije", - "horizontal": { - "label": "Horizontalne podele", - "placeholder": "Unesite broj horizontalnih podele" - }, - "vertical": { - "label": "Vertikalne podele", - "placeholder": "Unesite broj vertikalnih podele" - }, - "submit": "Razdvoji PDF", - "merge": "Merge Into One PDF" - }, - "AddStampRequest": { - "tags": "Stamp, Add image, center image, Watermark, PDF, Embed, Customize", - "header": "Stamp PDF", - "title": "Stamp PDF", - "stampType": "Stamp Type", - "stampText": "Stamp Text", - "stampImage": "Stamp Image", - "alphabet": "Alphabet", - "fontSize": "Font/Image Size", - "rotation": "Rotation", - "opacity": "Opacity", - "position": "Position", - "overrideX": "Override X Coordinate", - "overrideY": "Override Y Coordinate", - "customMargin": "Custom Margin", - "customColor": "Custom Text Color", - "submit": "Submit" - }, - "removeImagePdf": { - "tags": "Remove Image,Page operations,Back end,server side" - }, - "splitPdfByChapters": { - "tags": "split,chapters,bookmarks,organize" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "Validate PDF Signatures", - "header": "Validate Digital Signatures", - "selectPDF": "Select signed PDF file", - "submit": "Validate Signatures", - "results": "Validation Results", - "status": { - "_value": "Status", - "valid": "Valid", - "invalid": "Invalid" - }, - "signer": "Signer", - "date": "Date", - "reason": "Reason", - "location": "Location", - "noSignatures": "No digital signatures found in this document", - "chain": { - "invalid": "Certificate chain validation failed - cannot verify signer's identity" - }, - "trust": { - "invalid": "Certificate not in trust store - source cannot be verified" - }, - "cert": { - "expired": "Certificate has expired", - "revoked": "Certificate has been revoked", - "info": "Certificate Details", - "issuer": "Issuer", - "subject": "Subject", - "serialNumber": "Serial Number", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "algorithm": "Algorithm", - "keySize": "Key Size", - "version": "Version", - "keyUsage": "Key Usage", - "selfSigned": "Self-Signed", - "bits": "bits" - }, - "signature": { - "info": "Signature Information", - "_value": "Signature", - "mathValid": "Signature is mathematically valid BUT:" - }, - "selectCustomCert": "Custom Certificate File X.509 (Optional)" - }, - "replace-color": { - "title": "Replace-Invert-Color", - "header": "Replace-Invert Color PDF", - "selectText": { - "1": "Replace or Invert color Options", - "2": "Default(Default high contrast colors)", - "3": "Custom(Customized colors)", - "4": "Full-Invert(Invert all colors)", - "5": "High contrast color options", - "6": "white text on black background", - "7": "Black text on white background", - "8": "Yellow text on black background", - "9": "Green text on black background", - "10": "Choose text Color", - "11": "Choose background Color" - }, - "submit": "Replace" - }, - "replaceColorPdf": { - "tags": "Replace Color,Page operations,Back end,server side" - }, - "login": { - "title": "Prijavite se", - "header": "Prijavite se", - "signin": "Prijavite se", - "rememberme": "Zapamti me", - "invalid": "Neispravno korisničko ime ili lozinka.", - "locked": "Vaš nalog je zaključan.", - "signinTitle": "Molimo vas da se prijavite", - "ssoSignIn": "Prijavite se putem jedinstvene prijave", - "oAuth2AutoCreateDisabled": "OAUTH2 automatsko kreiranje korisnika je onemogućeno", - "oAuth2AdminBlockedUser": "Registration or logging in of non-registered users is currently blocked. Please contact the administrator.", - "oauth2RequestNotFound": "Authorization request not found", - "oauth2InvalidUserInfoResponse": "Invalid User Info Response", - "oauth2invalidRequest": "Invalid Request", - "oauth2AccessDenied": "Access Denied", - "oauth2InvalidTokenResponse": "Invalid Token Response", - "oauth2InvalidIdToken": "Invalid Id Token", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "User is deactivated, login is currently blocked with this username. Please contact the administrator.", - "alreadyLoggedIn": "You are already logged in to", - "alreadyLoggedIn2": "devices. Please log out of the devices and try again.", - "toManySessions": "You have too many active sessions", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF u Jednu Stranicu", - "header": "PDF u Jednu Stranicu", - "submit": "Konvertuj u Jednu Stranicu" - }, - "pageExtracter": { - "title": "Izdvajanje stranica", - "header": "Izdvajanje stranica", - "submit": "Izdvoji", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "sanitizePDF": { - "title": "Sanitizacija PDF-a", - "header": "Sanitizacija PDF fajla", - "selectText": { - "1": "Ukloni JavaScript akcije", - "2": "Ukloni ugrađene fajlove", - "3": "Remove XMP metadata", - "4": "Ukloni linkove", - "5": "Ukloni fontove", - "6": "Remove Document Info Metadata" - }, - "submit": "Sanitizuj PDF" - }, - "adjustContrast": { - "title": "Podesi Kontrast", - "header": "Podesi Kontrast", - "contrast": "Kontrast:", - "brightness": "Osvetljenje:", - "saturation": "Zasićenje:", - "download": "Preuzmi" - }, - "compress": { - "title": "Kompresija", - "header": "Kompresuj PDF", - "credit": "Ova usluga koristi qpdf za kompresiju / optimizaciju PDF-a.", - "grayscale": { - "label": "Primeni sivinu za kompresiju" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Nivo optimizacije:", - "4": "Automatski režim - Automatski prilagođava kvalitet kako bi PDF bio tačne veličine", - "5": "Očekivana veličina PDF-a (npr. 25MB, 10.8MB, 25KB)" - }, - "submit": "Kompresuj" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "This feature is also available in our multi-tool page. Check it out for enhanced page-by-page UI and additional features!" - }, - "pageRemover": { - "title": "Uklanjanje stranica", - "header": "Uklanjanje stranica iz PDF-a", - "pagesToDelete": "Stranice za brisanje (Unesite listu brojeva stranica odvojenih zarezima) :", - "submit": "Obriši stranice", - "placeholder": "(e.g. 1,2,6 or 1-10,15-30)" - }, - "imageToPDF": { - "title": "Slika u PDF", - "header": "Slika u PDF", - "submit": "Konvertuj", - "selectLabel": "Opcije prilagođavanja slike", - "fillPage": "Popuni stranicu", - "fitDocumentToImage": "Prilagodi stranicu slici", - "maintainAspectRatio": "Očuvaj proporcije", - "selectText": { - "2": "Automatsko rotiranje PDF-a", - "3": "Logika za više fajlova (Omogućeno samo ako radite sa više slika)", - "4": "Spoji u jedan PDF", - "5": "Konvertuj u odvojene PDF-ove" - } - }, - "PDFToCSV": { - "title": "PDF u CSV", - "header": "PDF u CSV", - "prompt": "Izaberite stranicu za ekstrakciju tabele", - "submit": "Izvuci" - }, - "split-by-size-or-count": { - "title": "Razdvoji PDF po veličini ili broju", - "header": "Razdvoji PDF po veličini ili broju", - "type": { - "label": "Izaberite tip razdvajanja", - "size": "Po veličini", - "pageCount": "Po broju stranica", - "docCount": "Po broju dokumenata" - }, - "value": { - "label": "Unesite vrednost", - "placeholder": "Unesite veličinu (npr. 2MB ili 3KB) ili broj (npr. 5)" - }, - "submit": "Potvrdi" - }, - "printFile": { - "title": "Print File", - "header": "Print File to Printer", - "selectText": { - "1": "Select File to Print", - "2": "Enter Printer Name" - }, - "submit": "Print" - }, - "licenses": { - "nav": "Licenses", - "title": "3rd Party Licenses", - "header": "3rd Party Licenses", - "module": "Module", - "version": "Version", - "license": "License" - }, - "survey": { - "nav": "Survey", - "title": "Stirling-PDF Survey", - "description": "Stirling-PDF has no tracking so we want to hear from our users to improve Stirling-PDF!", - "changes": "Stirling-PDF has changed since the last survey! To find out more please check our blog post here:", - "changes2": "With these changes we are getting paid business support and funding", - "please": "Please consider taking our survey!", - "disabled": "(Survey popup will be disabled in following updates but available at foot of page)", - "button": "Take Survey", - "dontShowAgain": "Don't show again", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Remove image", - "header": "Remove image", - "removeImage": "Remove image", - "submit": "Remove image" - }, - "splitByChapters": { - "title": "Split PDF by Chapters", - "header": "Split PDF by Chapters", - "bookmarkLevel": "Bookmark Level", - "includeMetadata": "Include Metadata", - "allowDuplicates": "Allow Duplicates", - "desc": { - "1": "This tool splits a PDF file into multiple PDFs based on its chapter structure.", - "2": "Bookmark Level: Choose the level of bookmarks to use for splitting (0 for top-level, 1 for second-level, etc.).", - "3": "Include Metadata: If checked, the original PDF's metadata will be included in each split PDF.", - "4": "Allow Duplicates: If checked, allows multiple bookmarks on the same page to create separate PDFs." - }, - "submit": "Split PDF" - }, - "fileChooser": { - "click": "Click", - "or": "or", - "dragAndDrop": "Drag & Drop", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "Drag & Drop file(s) here", - "extractPDF": "Extracting..." - }, - "releases": { - "footer": "Releases", - "title": "Release Notes", - "header": "Release Notes", - "current": { - "version": "Current Release" - }, - "note": "Release notes are only available in English" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/sv-SE/translation.json b/frontend/dist/locales/sv-SE/translation.json deleted file mode 100644 index 158f5b762..000000000 --- a/frontend/dist/locales/sv-SE/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Teckenstorlek", - "fontName": "Typsnitt", - "title": "Lägg till sidnummer", - "header": "Lägg till sidnummer", - "selectText": { - "1": "Välj PDF-fil:", - "2": "Marginalstorlek", - "3": "Position", - "4": "Startnummer", - "5": "Sidor att numrera", - "6": "Anpassad text" - }, - "customTextDesc": "Anpassad text", - "numberPagesDesc": "Vilka sidor som ska numreras, standard 'all', accepterar även 1-5 eller 2,5,9 etc", - "customNumberDesc": "Standard är {n}, accepterar även 'Sida {n} av {total}', 'Text-{n}', '{filnamn}-{n}", - "submit": "Lägg till sidnummer" - }, - "pdfPrompt": "Välj PDF(er)", - "multiPdfPrompt": "Välj PDF-filer (2+)", - "multiPdfDropPrompt": "Välj (eller dra och släpp) alla PDF-filer du behöver", - "imgPrompt": "Välj bild(er)", - "genericSubmit": "Skicka", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Varning: Denna process kan ta upp till en minut beroende på filstorlek", - "pageOrderPrompt": "Sidordning (Ange en kommaseparerad lista med sidnummer) :", - "pageSelectionPrompt": "Anpassat sidval (Ange en kommaseparerad lista med sidnummer 1,5,6 eller funktioner som 2n+1) :", - "goToPage": "Gå till", - "true": "Sant", - "false": "Falskt", - "unknown": "Okänt", - "save": "Spara", - "saveToBrowser": "Spara till webbläsare", - "close": "Stäng", - "filesSelected": "filer valda", - "noFavourites": "Inga favoriter har lagts till", - "downloadComplete": "Nedladdning klar", - "bored": "Trött på att vänta?", - "alphabet": "Alfabet", - "downloadPdf": "Ladda ner PDF", - "text": "Text", - "font": "Teckensnitt", - "selectFillter": "-- Välj --", - "pageNum": "Sidnummer", - "sizes": { - "small": "Liten", - "medium": "Mellan", - "large": "Stor", - "x-large": "Extra stor" - }, - "error": { - "pdfPassword": "PDF-dokumentet är lösenordsskyddat och antingen har lösenordet inte angetts eller är felaktigt", - "_value": "Fel", - "sorry": "Vi beklagar problemet!", - "needHelp": "Behöver du hjälp / Har du hittat ett problem?", - "contactTip": "Om du fortfarande har problem, tveka inte att kontakta oss för hjälp. Du kan skicka in en fråga på vår GitHub-sida eller kontakta oss via Discord:", - "404": { - "head": "404 - Sidan hittades inte | Hoppsan, vi snubblade i koden!", - "1": "Vi kan inte hitta sidan du letar efter.", - "2": "Något gick fel" - }, - "github": "Skicka in en fråga på GitHub", - "showStack": "Visa stackspårning", - "copyStack": "Kopiera stackspårning", - "githubSubmit": "GitHub - Skicka in en fråga", - "discordSubmit": "Discord - Skicka in ett supportinlägg" - }, - "delete": "Radera", - "username": "Användarnamn", - "password": "Lösenord", - "welcome": "Välkommen", - "property": "Egenskap", - "black": "Svart", - "white": "Vit", - "red": "Röd", - "green": "Grön", - "blue": "Blå", - "custom": "Anpassad...", - "WorkInProgess": "Pågående arbete, kan vara icke fungerande eller buggigt. Rapportera eventuella problem!", - "poweredBy": "Drivs av", - "yes": "Ja", - "no": "Nej", - "changedCredsMessage": "Inloggningsuppgifter ändrade!", - "notAuthenticatedMessage": "Användaren är inte autentiserad.", - "userNotFoundMessage": "Användaren hittades inte.", - "incorrectPasswordMessage": "Nuvarande lösenord är felaktigt.", - "usernameExistsMessage": "Nytt användarnamn finns redan.", - "invalidUsernameMessage": "Ogiltigt användarnamn, användarnamn kan endast innehålla bokstäver, siffror och följande specialtecken @._+- eller måste vara en giltig e-postadress.", - "invalidPasswordMessage": "Lösenordet får inte vara tomt och får inte ha mellanslag i början eller slutet.", - "confirmPasswordErrorMessage": "Nytt lösenord och bekräfta nytt lösenord måste matcha.", - "deleteCurrentUserMessage": "Kan inte ta bort den för närvarande inloggade användaren.", - "deleteUsernameExistsMessage": "Användarnamnet finns inte och kan inte raderas.", - "downgradeCurrentUserMessage": "Kan inte nedgradera nuvarande användares roll", - "disabledCurrentUserMessage": "Den nuvarande användaren kan inte inaktiveras", - "downgradeCurrentUserLongMessage": "Kan inte nedgradera nuvarande användares roll. Därför kommer den aktuella användaren inte att visas.", - "userAlreadyExistsOAuthMessage": "Användaren finns redan som en OAuth2-användare.", - "userAlreadyExistsWebMessage": "Användaren finns redan som en webbanvändare.", - "oops": "Hoppsan!", - "help": "Hjälp", - "goHomepage": "Gå till startsidan", - "joinDiscord": "Gå med i vår Discord-server", - "seeDockerHub": "Se Docker Hub", - "visitGithub": "Besök GitHub-repositoriet", - "donate": "Donera", - "color": "Färg", - "sponsor": "Sponsör", - "info": "Info", - "pro": "Pro", - "page": "Sidan", - "pages": "Sidor", - "loading": "Laddar...", - "addToDoc": "Lägg till i dokument", - "reset": "Reset", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Dataprotektionspolicy", - "terms": "Villkor och betingelser", - "accessibility": "Gängeshållbarhet", - "cookie": "Cockiropfer", - "impressum": "Riksdagens utskott för teknikfrihet", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Pipeline-meny (Beta)", - "uploadButton": "Ladda upp anpassad", - "configureButton": "Konfigurera", - "defaultOption": "Anpassad", - "submitButton": "Skicka", - "help": "Pipeline-hjälp", - "scanHelp": "Hjälp för mappskanning", - "deletePrompt": "Är du säker på att du vill ta bort pipeline", - "tags": "automatisera,sekvens,skriptad,batchprocess", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Pipeline-konfiguration", - "pipelineNameLabel": "Pipeline-namn", - "saveSettings": "Spara operationsinställningar", - "pipelineNamePrompt": "Ange pipeline-namn här", - "selectOperation": "Välj operation", - "addOperationButton": "Lägg till operation", - "pipelineHeader": "Pipeline:", - "saveButton": "Ladda ner", - "validateButton": "Validera" - }, - "enterpriseEdition": { - "button": "Uppgradera till Pro", - "warning": "Den här funktionen är endast tillgänglig för Pro-användare.", - "yamlAdvert": "Stirling PDF Pro stöder YAML-konfigurationsfiler och andra SSO funktioner.", - "ssoAdvert": "Söker du fler funktioner för användarhantering? Spana in Stirling PDF Pro." - }, - "analytics": { - "title": "Vill du göra Stirling PDF bättre?", - "paragraph1": "Stirling PDF har inaktiverad analys för att hjälpa oss förbättra produkten. Vi spårar ingen personlig information eller filinnehåll.", - "paragraph2": "Var god aktivera analyser för att hjälpa Stirling-PDF att växa och tillåta oss att förstå våra användare bättre.", - "enable": "Aktivera analys", - "disable": "Avaktivera analys", - "settings": "Du kan ändra analysinställningarna i config/settings.yml-filen" - }, - "navbar": { - "favorite": "Favoriter", - "recent": "New and recently updated", - "darkmode": "Mörkt läge", - "language": "Språk", - "settings": "Inställningar", - "allTools": "Verktyg", - "multiTool": "Multiverktyg", - "search": "Search", - "sections": { - "organize": "Organisera", - "convertTo": "Konvertera till PDF", - "convertFrom": "Konvertera från PDF", - "security": "Signera & Säkerhet", - "advance": "Avancerat", - "edit": "Visa & Redigera", - "popular": "Populära" - } - }, - "settings": { - "title": "Inställningar", - "update": "Uppdatering tillgänglig", - "updateAvailable": "{0} är den aktuella installerade versionen. En ny version ({1}) finns tillgänglig.", - "appVersion": "Appversion:", - "downloadOption": { - "title": "Välj nedladdningsalternativ (för nedladdning av en fil utan zip):", - "1": "Öppnas i samma fönster", - "2": "Öppna i nytt fönster", - "3": "Ladda ner fil" - }, - "zipThreshold": "Zippa filer när antalet nedladdade filer överskrider", - "signOut": "Logga ut", - "accountSettings": "Kontoinställningar", - "bored": { - "help": "Aktiverar påskäggsspel" - }, - "cacheInputs": { - "name": "Spara formulärinmatningar", - "help": "Aktivera för att lagra tidigare använda inmatningar för framtida körningar" - } - }, - "changeCreds": { - "title": "Ändra inloggningsuppgifter", - "header": "Uppdatera dina kontouppgifter", - "changePassword": "Du använder standardinloggningsuppgifter. Vänligen ange ett nytt lösenord", - "newUsername": "Nytt användarnamn", - "oldPassword": "Nuvarande lösenord", - "newPassword": "Nytt lösenord", - "confirmNewPassword": "Bekräfta nytt lösenord", - "submit": "Skicka ändringar" - }, - "account": { - "title": "Kontoinställningar", - "accountSettings": "Kontoinställningar", - "adminSettings": "Admininställningar - Visa och lägg till användare", - "userControlSettings": "Användarhanteringsinställningar", - "changeUsername": "Ändra användarnamn", - "newUsername": "Nytt användarnamn", - "password": "Bekräftelselösenord", - "oldPassword": "Gammalt lösenord", - "newPassword": "Nytt lösenord", - "changePassword": "Ändra lösenord", - "confirmNewPassword": "Bekräfta nytt lösenord", - "signOut": "Logga ut", - "yourApiKey": "Din API-nyckel", - "syncTitle": "Synkronisera webbläsarinställningar med konto", - "settingsCompare": "Jämförelse av inställningar:", - "property": "Egenskap", - "webBrowserSettings": "Webbläsarinställning", - "syncToBrowser": "Synkronisera konto -> webbläsare", - "syncToAccount": "Synkronisera konto <- webbläsare" - }, - "adminUserSettings": { - "title": "Användarhanteringsinställningar", - "header": "Admininställningar för användarhantering", - "admin": "Admin", - "user": "Användare", - "addUser": "Lägg till ny användare", - "deleteUser": "Ta bort användare", - "confirmDeleteUser": "Ska användaren tas bort?", - "confirmChangeUserStatus": "Ska användaren inaktiveras/aktiveras?", - "usernameInfo": "Användarnamn kan endast innehålla bokstäver, siffror och följande specialtecken @._+- eller måste vara en giltig e-postadress.", - "roles": "Roller", - "role": "Roll", - "actions": "Åtgärder", - "apiUser": "Begränsad API-användare", - "extraApiUser": "Ytterligare begränsad API-användare", - "webOnlyUser": "Endast webbanvändare", - "demoUser": "Demoanvändare (Inga anpassade inställningar)", - "internalApiUser": "Intern API-användare", - "forceChange": "Tvinga användare att ändra lösenord vid inloggning", - "submit": "Spara användare", - "changeUserRole": "Ändra användarens roll", - "authenticated": "Autentiserad", - "editOwnProfil": "Redigera egen profil", - "enabledUser": "aktiverad användare", - "disabledUser": "inaktiverad användare", - "activeUsers": "Aktiva användare:", - "disabledUsers": "Inaktiverade användare:", - "totalUsers": "Totalt antal användare:", - "lastRequest": "Senaste begäran", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Databasimport/export", - "header": "Databasimport/export", - "fileName": "Filnamn", - "creationDate": "Skapelsedatum", - "fileSize": "Filstorlek", - "deleteBackupFile": "Ta bort säkerhetskopieringsfil", - "importBackupFile": "Importera säkerhetskopieringsfil", - "createBackupFile": "Skapa säkerhetskopieringsfil", - "downloadBackupFile": "Ladda ner säkerhetskopieringsfil", - "info_1": "Vid import av data är det avgörande att säkerställa korrekt struktur. Om du är osäker på vad du gör, sök råd och stöd från en professionell. Ett fel i strukturen kan orsaka funktionsfel i applikationen, upp till och inklusive fullständig oförmåga att köra applikationen.", - "info_2": "Filnamnet spelar ingen roll vid uppladdning. Det kommer att döpas om efteråt för att följa formatet backup_user_yyyyMMddHHmm.sql, vilket säkerställer en konsekvent namngivningskonvention.", - "submit": "Importera säkerhetskopia", - "importIntoDatabaseSuccessed": "Import till databas lyckades", - "backupCreated": "Backup av databas lyckades", - "fileNotFound": "Filen hittades inte", - "fileNullOrEmpty": "Filen får inte vara null eller tom", - "failedImportFile": "Misslyckades med att importera fil", - "notSupported": "Denna funktion är inte tillgänglig för din databasanslutning." - }, - "session": { - "expired": "Din session har löpt ut. Uppdatera sidan och försök igen.", - "refreshPage": "Uppdatera sida" - }, - "home": { - "desc": "Din lokala one-stop-shop för alla dina PDF-behov.", - "searchBar": "Sök efter funktioner...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Visa, kommentera, lägg till text eller bilder" - }, - "setFavorites": "Välj Favoriter", - "hideFavorites": "Dölj Favoriter", - "showFavorites": "Visa Favoriter", - "legacyHomepage": "Gammal Hem-vy.", - "newHomePage": "Testa vår nya Hem-vy!", - "alphabetical": "Alfabetisk", - "globalPopularity": "Global Popularity", - "sortBy": "Sortera efter:", - "multiTool": { - "title": "PDF Multi-verktyg", - "desc": "Sammanfoga, rotera, ordna om och ta bort sidor" - }, - "merge": { - "title": "Sammanfoga", - "desc": "Sammanfoga enkelt flera PDF-filer till en." - }, - "split": { - "title": "Dela", - "desc": "Dela upp PDF-filer i flera dokument" - }, - "rotate": { - "title": "Rotera", - "desc": "Rotera enkelt dina PDF-filer." - }, - "imageToPdf": { - "title": "Bild till PDF", - "desc": "Konvertera en bild (PNG, JPEG, GIF) till PDF." - }, - "pdfToImage": { - "title": "PDF till bild", - "desc": "Konvertera en PDF till en bild. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Ordna", - "desc": "Ta bort/ordna om sidor i valfri ordning" - }, - "addImage": { - "title": "Lägg till bild", - "desc": "Lägger till en bild på en angiven plats i PDF:en (pågår arbete)" - }, - "watermark": { - "title": "Lägg till vattenstämpel", - "desc": "Lägg till en anpassad vattenstämpel till ditt PDF-dokument." - }, - "permissions": { - "title": "Ändra behörigheter", - "desc": "Ändra behörigheterna för ditt PDF-dokument" - }, - "removePages": { - "title": "Ta bort", - "desc": "Ta bort oönskade sidor från ditt PDF-dokument." - }, - "addPassword": { - "title": "Lägg till lösenord", - "desc": "Kryptera ditt PDF-dokument med ett lösenord." - }, - "removePassword": { - "title": "Ta bort lösenord", - "desc": "Ta bort lösenordsskydd från ditt PDF-dokument." - }, - "compressPdfs": { - "title": "Komprimera", - "desc": "Komprimera PDF-filer för att minska deras filstorlek." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Ändra metadata", - "desc": "Ändra/ta bort/lägg till metadata från ett PDF-dokument" - }, - "fileToPDF": { - "title": "Konvertera fil till PDF", - "desc": "Konvertera nästan vilken fil som helst till PDF (DOCX, PNG, XLS, PPT, TXT och mer)" - }, - "ocr": { - "title": "OCR / Rensningsskanningar", - "desc": "Rengör skanningar och upptäcker text från bilder i en PDF och lägger till den igen som text." - }, - "extractImages": { - "title": "Extrahera bilder", - "desc": "Extraherar alla bilder från en PDF och sparar dem till zip" - }, - "pdfToPDFA": { - "title": "PDF till PDF/A", - "desc": "Konvertera PDF till PDF/A för långtidslagring" - }, - "PDFToWord": { - "title": "PDF till Word", - "desc": "Konvertera PDF till Word-format (DOC, DOCX och ODT)" - }, - "PDFToPresentation": { - "title": "PDF till presentation", - "desc": "Konvertera PDF till presentationsformat (PPT, PPTX och ODP)" - }, - "PDFToText": { - "title": "PDF till text/RTF", - "desc": "Konvertera PDF till text- eller RTF-format" - }, - "PDFToHTML": { - "title": "PDF till HTML", - "desc": "Konvertera PDF till HTML-format" - }, - "PDFToXML": { - "title": "PDF till XML", - "desc": "Konvertera PDF till XML-format" - }, - "ScannerImageSplit": { - "title": "Detektera/Dela skannade foton", - "desc": "Delar flera foton från ett foto/PDF" - }, - "sign": { - "title": "Signera", - "desc": "Lägger till signatur till PDF genom ritning, text eller bild" - }, - "flatten": { - "title": "Platta till", - "desc": "Ta bort alla interaktiva element och formulär från en PDF" - }, - "repair": { - "title": "Reparera", - "desc": "Försöker reparera en korrupt/trasig PDF" - }, - "removeBlanks": { - "title": "Ta bort tomma sidor", - "desc": "Känner av och tar bort tomma sidor från ett dokument" - }, - "removeAnnotations": { - "title": "Ta bort anteckningar", - "desc": "Tar bort alla kommentarer/anteckningar från en PDF" - }, - "compare": { - "title": "Jämför", - "desc": "Jämför och visar skillnaderna mellan 2 PDF-dokument" - }, - "certSign": { - "title": "Signera med certifikat", - "desc": "Signerar en PDF med ett certifikat/nyckel (PEM/P12)" - }, - "removeCertSign": { - "title": "Ta bort certifikatsignatur", - "desc": "Ta bort certifikatsignatur från PDF" - }, - "pageLayout": { - "title": "Flersidigt layout", - "desc": "Slå samman flera sidor av ett PDF-dokument till en enda sida" - }, - "scalePages": { - "title": "Justera sidstorlek/skala", - "desc": "Ändra storleken/skalan på sidan och/eller dess innehåll." - }, - "pipeline": { - "title": "Pipeline (Avancerat)", - "desc": "Kör flera åtgärder på PDF:er genom att definiera pipeline-skript" - }, - "add-page-numbers": { - "title": "Lägg till sidnummer", - "desc": "Lägg till sidnummer genom hela dokumentet på en angiven plats" - }, - "auto-rename": { - "title": "Automatiskt byt namn på PDF-fil", - "desc": "Byter automatiskt namn på en PDF-fil baserat på dess detekterade rubrik" - }, - "adjust-contrast": { - "title": "Justera färger/kontrast", - "desc": "Justera kontrast, mättnad och ljusstyrka i en PDF" - }, - "crop": { - "title": "Beskär PDF", - "desc": "Beskär en PDF för att minska dess storlek (behåller text!)" - }, - "autoSplitPDF": { - "title": "Auto-dela sidor", - "desc": "Auto-dela skannad PDF med fysisk skannad sidseparator QR-kod" - }, - "sanitizePdf": { - "title": "Sanera", - "desc": "Ta bort skript och andra element från PDF-filer" - }, - "URLToPDF": { - "title": "URL/Webbplats till PDF", - "desc": "Konverterar valfri http(s)URL till PDF" - }, - "HTMLToPDF": { - "title": "HTML till PDF", - "desc": "Konverterar valfri HTML-fil eller zip till PDF" - }, - "MarkdownToPDF": { - "title": "Markdown till PDF", - "desc": "Konverterar valfri Markdown-fil till PDF" - }, - "PDFToMarkdown": { - "title": "PDF till Markdown", - "desc": "Konvertera PDF till Markdown" - }, - "getPdfInfo": { - "title": "Hämta ALL information om PDF", - "desc": "Hämtar all möjlig information om PDF:er" - }, - "extractPage": { - "title": "Extrahera sida(or)", - "desc": "Extraherar valda sidor från PDF" - }, - "PdfToSinglePage": { - "title": "PDF till en enda stor sida", - "desc": "Slår samman alla PDF-sidor till en enda stor sida" - }, - "showJS": { - "title": "Visa Javascript", - "desc": "Söker och visar eventuell JS som injicerats i en PDF" - }, - "autoRedact": { - "title": "Auto-redigera", - "desc": "Auto-redigerar (svärtar) text i en PDF baserat på inmatad text" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF till CSV", - "desc": "Extraherar tabeller från en PDF och konverterar dem till CSV" - }, - "autoSizeSplitPDF": { - "title": "Auto-dela efter storlek/antal", - "desc": "Dela en enda PDF till flera dokument baserat på storlek, sidantal eller dokumentantal" - }, - "overlay-pdfs": { - "title": "Överlagra PDF:er", - "desc": "Överlagrar PDF:er ovanpå en annan PDF" - }, - "split-by-sections": { - "title": "Dela PDF efter sektioner", - "desc": "Dela varje sida av en PDF i mindre horisontella och vertikala sektioner" - }, - "AddStampRequest": { - "title": "Lägg till stämpel på PDF", - "desc": "Lägg till text eller bildstämplar på angivna platser" - }, - "removeImagePdf": { - "title": "Ta bort bild", - "desc": "Ta bort bild från PDF för att minska filstorlek" - }, - "splitPdfByChapters": { - "title": "Dela upp PDF efter kapitel", - "desc": "Dela upp en PDF till flera filer baserat på dess kapitelstruktur." - }, - "validateSignature": { - "title": "Validera PDF signature", - "desc": "Verifiera digitala signaturer och certifiakt i PDF dokument" - }, - "replaceColorPdf": { - "title": "Ersätt och Invertera färg", - "desc": "Ersätt färg för text och bakgrund i PDF och invertera hela färgen på PDF för att minska filstorlek" - } - }, - "viewPdf": { - "tags": "visa,läs,kommentera,text,bild", - "title": "View/Edit PDF", - "header": "Visa PDF" - }, - "multiTool": { - "tags": "Multiverktyg,Multioperation,UI,klicka dra,front end,klientsida", - "title": "PDF-multiverktyg", - "header": "PDF Multi-verktyg", - "uploadPrompts": "Filnamn", - "selectAll": "Välj allt", - "deselectAll": "Deselect All", - "selectPages": "Välj sidor", - "selectedPages": "Valda sidor", - "page": "Sida", - "deleteSelected": "Ta bort valda", - "downloadAll": "Exportera", - "downloadSelected": "Exportersa valda", - "insertPageBreak": "Insert Page Break", - "addFile": "Lägg till fil", - "rotateLeft": "Rotera Vänster", - "rotateRight": "Rotera Höger", - "split": "Dela upp", - "moveLeft": "Flytta Vänster", - "moveRight": "Flytta Höger", - "delete": "Ta bort", - "dragDropMessage": "Valda sid(or)", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "sammanfoga,Sidoperationer,Backend,serversida", - "title": "Sammanfoga", - "header": "Slå samman flera PDF-filer (2+)", - "sortByName": "Sortera efter namn", - "sortByDate": "Sortera efter datum", - "removeCertSign": "Ta bort digital signatur i den sammanslagna filen?", - "submit": "Slå samman" - }, - "split": { - "tags": "Sidoperationer,dela,Multisida,klippa,serversida", - "title": "Dela upp PDF", - "header": "Dela upp PDF", - "desc": { - "1": "Siffrorna du väljer är sidnumret du vill göra en delning på", - "2": "Som sådan skulle ett val av 1,3,7-9 dela upp ett 10-sidigt dokument i 6 separata PDF-filer med:", - "3": "Dokument #1: Sida 1", - "4": "Dokument #2: Sida 2 och 3", - "5": "Dokument #3: Sida 4, 5, 6 och 7", - "6": "Dokument #4: Sida 8", - "7": "Dokument #5: Sida 9", - "8": "Dokument #6: Sida 10" - }, - "splitPages": "Ange sidor att dela på:", - "submit": "Dela" - }, - "rotate": { - "tags": "serversida", - "title": "Rotera PDF", - "header": "Rotera PDF", - "selectAngle": "Välj rotationsvinkel (i multipler av 90 grader):", - "submit": "Rotera" - }, - "imageToPdf": { - "tags": "konvertering,img,jpg,bild,foto" - }, - "pdfToImage": { - "tags": "konvertering,img,jpg,bild,foto", - "title": "PDF till bild", - "header": "PDF till bild", - "selectText": "Bildformat", - "singleOrMultiple": "Bildresultattyp", - "single": "Enstaka stor bild", - "multi": "Flera bilder", - "colorType": "Färgtyp", - "color": "Färg", - "grey": "Gråskala", - "blackwhite": "Svartvitt (kan förlora data!)", - "submit": "Konvertera", - "info": "Python är inte installerat. Krävs för WebP-konvertering.", - "placeholder": "(t.ex. 1,2,8 eller 4,7,12-16 eller 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,jämn,udda,sortera,flytta", - "title": "Sidorganisatör", - "header": "PDF-sidorganisatör", - "submit": "Ordna om sidor", - "mode": { - "_value": "Läge", - "1": "Anpassad sidordning", - "2": "Omvänd ordning", - "3": "Duplexsortering", - "4": "Häftessortering", - "5": "Sidohäftad häftessortering", - "6": "Udda-jämn delning", - "7": "Ta bort första", - "8": "Ta bort sista", - "9": "Ta bort första och sista", - "10": "Udda-jämn sammanslagning", - "11": "Duplicate all pages" - }, - "placeholder": "(t.ex. 1,3,2 eller 4-8,2,10-12 eller 2n-1)" - }, - "addImage": { - "tags": "img,jpg,bild,foto", - "title": "Lägg till bild", - "header": "Lägg till bild till PDF", - "everyPage": "Varje sida?", - "upload": "Lägg till bild", - "submit": "Lägg till bild" - }, - "watermark": { - "tags": "Text,upprepande,etikett,egen,upphovsrätt,varumärke,img,jpg,bild,foto", - "title": "Lägg till vattenstämpel", - "header": "Lägg till vattenstämpel", - "customColor": "Anpassad textfärg", - "selectText": { - "1": "Välj PDF för att lägga till vattenstämpel till:", - "2": "Vattenmärkestext:", - "3": "Teckenstorlek:", - "4": "Vändning (0-360):", - "5": "Width Spacer (mellanrum mellan varje vattenstämpel horisontellt):", - "6": "Height Spacer (mellanrum mellan varje vattenstämpel vertikalt):", - "7": "Opacitet (0% - 100%):", - "8": "Vattenstämpeltyp:", - "9": "Vattenstämpelbild:", - "10": "Konvertera PDF till PDF-bild" - }, - "submit": "Lägg till vattenstämpel", - "type": { - "1": "Text", - "2": "Bild" - } - }, - "permissions": { - "tags": "läsa,skriva,redigera,skriva ut", - "title": "Ändra behörigheter", - "header": "Ändra behörigheter", - "warning": "Varning: för att dessa behörigheter ska vara oföränderliga rekommenderas det att ställa in dem med ett lösenord via sidan Lägg till lösenord", - "selectText": { - "1": "Välj PDF för att ändra behörigheter", - "2": "Behörigheter att ställa in", - "3": "Förhindra sammansättning av dokument", - "4": "Förhindra innehållsextraktion", - "5": "Förhindra extraktion för tillgänglighet", - "6": "Förhindra att fylla i formulär", - "7": "Förhindra ändring", - "8": "Förhindra anteckningsändring", - "9": "Förhindra utskrift", - "10": "Förhindra utskrift av olika format" - }, - "submit": "Ändra" - }, - "removePages": { - "tags": "Ta bort sidor,radera sidor" - }, - "addPassword": { - "tags": "säkra,säkerhet", - "title": "Lägg till lösenord", - "header": "Lägg till lösenord (kryptera)", - "selectText": { - "1": "Välj PDF att kryptera", - "2": "Lösenord", - "3": "Längd på krypteringsnyckeln", - "4": "Högre värden är starkare, men lägre värden har bättre kompatibilitet.", - "5": "Behörigheter att ställa in", - "6": "Förhindra sammansättning av dokument", - "7": "Förhindra innehållsextraktion", - "8": "Förhindra extraktion för tillgänglighet", - "9": "Förhindra att fylla i formulär", - "10": "Förhindra modifiering", - "11": "Förhindra anteckningsändring", - "12": "Förhindra utskrift", - "13": "Förhindra utskrift av olika format", - "14": "Ägarlösenord", - "15": "Begränsar vad som kan göras med dokumentet när det väl är öppnat (Stöds inte av alla läsare)", - "16": "Begränsar öppnandet av själva dokumentet" - }, - "submit": "Kryptera" - }, - "removePassword": { - "tags": "säkra,Dekryptera,säkerhet,ta bort lösenord,radera lösenord", - "title": "Ta bort lösenord", - "header": "Ta bort lösenord (Dekryptera)", - "selectText": { - "1": "Välj PDF att dekryptera", - "2": "Lösenord" - }, - "submit": "Ta bort" - }, - "compressPdfs": { - "tags": "pressa ihop,liten,minimal" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Titel,författare,datum,skapelse,tid,utgivare,producent,statistik", - "title": "Titel:", - "header": "Ändra metadata", - "selectText": { - "1": "Redigera de variabler du vill ändra", - "2": "Ta bort all metadata", - "3": "Visa anpassade metadata:", - "4": "Andra metadata:", - "5": "Lägg till anpassad metadatapost" - }, - "author": "Författare:", - "creationDate": "Skapningsdatum (åååå/MM/dd HH:mm:ss):", - "creator": "Skapare:", - "keywords": "Sökord:", - "modDate": "Ändringsdatum (åååå/MM/dd HH:mm:ss):", - "producer": "Producent:", - "subject": "Ämne:", - "trapped": "Fångad:", - "submit": "Ändra" - }, - "fileToPDF": { - "tags": "transformation,format,dokument,bild,presentation,text,konvertering,kontor,dokument,word,excel,powerpoint", - "title": "Fil till PDF", - "header": "Konvertera valfri fil till PDF", - "credit": "Denna tjänst använder LibreOffice och Unoconv för filkonvertering.", - "supportedFileTypesInfo": "Filtyper som stöds", - "supportedFileTypes": "Filtyper som stöds bör inkludera nedanstående, men för en fullständig uppdaterad lista över format som stöds, se LibreOffice-dokumentationen", - "submit": "Konvertera till PDF" - }, - "ocr": { - "tags": "igenkänning,text,bild,skanna,läsa,identifiera,detektering,redigerbar", - "title": "OCR / Rengöring av skanningar", - "header": "Rengöring av skanningar / OCR (Optisk teckenigenkänning)", - "selectText": { - "1": "Välj språk som ska upptäckas i PDF:en (de listade är de som för närvarande identifieras):", - "2": "Producera en textfil som innehåller OCR-text tillsammans med den OCR-behandlade PDF-filen", - "3": "Korrigera sidor som skannades i en sned vinkel genom att rotera dem tillbaka på plats", - "4": "Rensa sidan så att det är mindre troligt att OCR hittar text i bakgrundsbrus. (Ingen utgångsändring)", - "5": "Rensa sidan så att det är mindre sannolikt att OCR kommer att hitta text i bakgrundsbrus, upprätthåller rensning i utdata.", - "6": "Ignorerar sidor som har interaktiv text, endast OCR-sidor som är bilder", - "7": "Tvinga OCR, kommer OCR att ta bort alla ursprungliga textelement", - "8": "Normal (kommer ge fel om PDF innehåller text)", - "9": "Ytterligare inställningar", - "10": "OCR-läge", - "11": "Ta bort bilder efter OCR (tar bort ALLA bilder, endast användbart som en del av konverteringssteget)", - "12": "Renderingstyp (avancerat)" - }, - "help": "Vänligen läs denna dokumentation om hur du använder detta för andra språk och/eller använder inte i docker", - "credit": "Denna tjänst använder qpdf och Tesseract för OCR.", - "submit": "Bearbeta PDF med OCR" - }, - "extractImages": { - "tags": "bild,foto,spara,arkiv,zip,fånga,ta", - "title": "Extrahera bilder", - "header": "Extrahera bilder", - "selectText": "Välj bildformat att konvertera extraherade bilder till", - "allowDuplicates": "Spara dubblettbilder", - "submit": "Extrahera" - }, - "pdfToPDFA": { - "tags": "arkiv,långtids,standard,konvertering,lagring,bevarande", - "title": "PDF till PDF/A", - "header": "PDF till PDF/A", - "credit": "Denna tjänst använder libreoffice för PDF/A-konvertering", - "submit": "Konvertera", - "tip": "Fungerar för närvarande inte för flera inmatningar samtidigt", - "outputFormat": "Utdataformat", - "pdfWithDigitalSignature": "PDF:en innehåller en digital signatur. Denna kommer att tas bort i nästa steg." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,transformation,format,konvertering,kontor,microsoft,docfil", - "title": "PDF till Word", - "header": "PDF till Word", - "selectText": { - "1": "Utdatafilformat" - }, - "credit": "Denna tjänst använder LibreOffice för filkonvertering.", - "submit": "Konvertera" - }, - "PDFToPresentation": { - "tags": "bildspel,visa,kontor,microsoft", - "title": "PDF till presentation", - "header": "PDF till presentation", - "selectText": { - "1": "Utdatafilformat" - }, - "credit": "Denna tjänst använder LibreOffice för filkonvertering.", - "submit": "Konvertera" - }, - "PDFToText": { - "tags": "rikformat,riktextformat,rich text format", - "title": "PDF till text/RTF", - "header": "PDF till text/RTF", - "selectText": { - "1": "Utdatafilformat" - }, - "credit": "Denna tjänst använder LibreOffice för filkonvertering.", - "submit": "Konvertera" - }, - "PDFToHTML": { - "tags": "webbinnehåll,webbläsarvänlig", - "title": "PDF till HTML", - "header": "PDF till HTML", - "credit": "Denna tjänst använder pdftohtml för filkonvertering.", - "submit": "Konvertera" - }, - "PDFToXML": { - "tags": "dataextraktion,strukturerat-innehåll,interop,transformation,konvertera", - "title": "PDF till XML", - "header": "PDF till XML", - "credit": "Denna tjänst använder LibreOffice för filkonvertering.", - "submit": "Konvertera" - }, - "ScannerImageSplit": { - "tags": "separera,auto-detektera,skanningar,multi-foto,organisera", - "selectText": { - "1": "Vinkeltröskel:", - "2": "Ställer in den minsta absoluta vinkeln som krävs för att bilden ska roteras (standard: 10).", - "3": "Tolerans:", - "4": "Bestämmer intervallet för färgvariation runt den uppskattade bakgrundsfärgen (standard: 30).", - "5": "Minsta area:", - "6": "Ställer in minsta areatröskel för ett foto (standard: 10000).", - "7": "Minsta konturarea:", - "8": "Ställer in minsta tröskelvärde för konturarea för ett foto", - "9": "Kantstorlek:", - "10": "Ställer in storleken på kanten som läggs till och tas bort för att förhindra vita kanter i utdata (standard: 1)." - }, - "info": "Python är inte installerat. Det krävs för att köra." - }, - "sign": { - "tags": "auktorisera,initialer,ritad-signatur,text-signatur,bild-signatur", - "title": "Signera", - "header": "Signera PDF-filer", - "upload": "Ladda upp bild", - "draw": "Rita signatur", - "text": "Textinmatning", - "clear": "Rensa", - "add": "Lägg till", - "saved": "Sparade signaturer", - "save": "Spara signatur", - "personalSigs": "Personliga signaturer", - "sharedSigs": "Delade signaturer", - "noSavedSigs": "Inga sparade signaturer hittades", - "addToAll": "Lägg till på alla sidor", - "delete": "Ta bort", - "first": "Första sidan", - "last": "Sista sidan", - "next": "Nästa sida", - "previous": "Föregående sida", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "statisk,avaktivera,icke-interaktiv,effektivisera", - "title": "Platta till", - "header": "Platta till PDF-filer", - "flattenOnlyForms": "Platta till endast formulär", - "submit": "Platta till" - }, - "repair": { - "tags": "fixa,återställa,korrigering,återhämta", - "title": "Reparera", - "header": "Reparera PDF-filer", - "submit": "Reparera" - }, - "removeBlanks": { - "tags": "städa upp,effektivisera,icke-innehåll,organisera", - "title": "Ta bort tomrum", - "header": "Ta bort tomma sidor", - "threshold": "Tröskelvärde:", - "thresholdDesc": "Tröskelvärde för att bestämma hur vit en vit pixel måste vara", - "whitePercent": "Vit procent (%):", - "whitePercentDesc": "Procentandel av sidan som måste vara vit för att kunna tas bort", - "submit": "Ta bort tomrum" - }, - "removeAnnotations": { - "tags": "kommentarer,markera,anteckningar,markup,ta bort", - "title": "Ta bort anteckningar", - "header": "Ta bort anteckningar", - "submit": "Ta bort" - }, - "compare": { - "tags": "särskilja,kontrastera,ändringar,analys", - "title": "Jämför", - "header": "Jämför PDF-filer", - "highlightColor": { - "1": "Markeringsfärg 1:", - "2": "Markeringsfärg 2:" - }, - "document": { - "1": "Dokument 1", - "2": "Dokument 2" - }, - "submit": "Jämför", - "complex": { - "message": "En eller båda de angivna dokumenten är stora filer, jämförelsepräzissen kan minska." - }, - "large": { - "file": { - "message": "En eller båda de angivna dokumenten är för stora att bearbeta" - } - }, - "no": { - "text": { - "message": "En eller båda de valda PDF:erna innehåller ingen textinnehåll. Välj PDF:er med text för jämförelse." - } - } - }, - "certSign": { - "tags": "autentisera,PEM,P12,officiell,kryptera", - "title": "Certifikatsignering", - "header": "Signera en PDF med ditt certifikat (Pågående arbete)", - "selectPDF": "Välj en PDF-fil för signering:", - "jksNote": "Obs: Om din certifikattyp inte finns listad nedan, vänligen konvertera den till en Java Keystore (.jks) fil med hjälp av keytool-kommandoradsverktyget. Välj sedan .jks-filalternativet nedan.", - "selectKey": "Välj din privata nyckelfil (PKCS#8-format, kan vara .pem eller .der):", - "selectCert": "Välj din certifikatfil (X.509-format, kan vara .pem eller .der):", - "selectP12": "Välj din PKCS#12-nyckellagringsfil (.p12 eller .pfx) (Valfritt, om det tillhandahålls bör det innehålla din privata nyckel och certifikat):", - "selectJKS": "Välj din Java Keystore-fil (.jks eller .keystore):", - "certType": "Certifikattyp", - "password": "Ange ditt nyckellagerlösenord eller privata nyckellösenord (om tillämpligt):", - "showSig": "Visa signatur", - "reason": "Anledning", - "location": "Plats", - "name": "Namn", - "showLogo": "Visa logo", - "submit": "Signera PDF" - }, - "removeCertSign": { - "tags": "autentisera,PEM,P12,officiell,dekryptera", - "title": "Ta bort certifikatsignatur", - "header": "Ta bort den digitala certifikatsignaturen från PDF:en", - "selectPDF": "Välj en PDF-fil:", - "submit": "Ta bort signatur" - }, - "pageLayout": { - "tags": "slå samman,sammansatt,enkel-vy,organisera", - "title": "Flersidigt layout", - "header": "Flersidigt layout", - "pagesPerSheet": "Sidor per ark:", - "addBorder": "Lägg till kanter", - "submit": "Skicka" - }, - "scalePages": { - "tags": "ändra storlek,modifiera,dimension,anpassa", - "title": "Justera sidskala", - "header": "Justera sidskala", - "pageSize": "Storlek på en sida i dokumentet.", - "keepPageSize": "Originalstorlek", - "scaleFactor": "Zoomnivå (beskärning) för en sida.", - "submit": "Skicka" - }, - "add-page-numbers": { - "tags": "paginera,etikett,organisera,indexera" - }, - "auto-rename": { - "tags": "auto-detektera,rubrikbaserad,organisera,märka om", - "title": "Auto-byt namn", - "header": "Auto-byt namn på PDF", - "submit": "Auto-byt namn" - }, - "adjust-contrast": { - "tags": "färgkorrigering,finjustera,modifiera,förbättra" - }, - "crop": { - "tags": "trimma,krympa,redigera,forma", - "title": "Beskär", - "header": "Beskär PDF", - "submit": "Skicka" - }, - "autoSplitPDF": { - "tags": "QR-baserad,separera,skanna-segment,organisera", - "title": "Auto-dela PDF", - "header": "Auto-dela PDF", - "description": "Skriv ut, infoga, skanna, ladda upp och låt oss automatiskt separera dina dokument. Inget manuellt sorteringsarbete behövs.", - "selectText": { - "1": "Skriv ut några avdelare från nedan (Svartvitt går bra).", - "2": "Skanna alla dina dokument på en gång genom att infoga avdelaren mellan dem.", - "3": "Ladda upp den enda stora skannade PDF-filen och låt Stirling PDF hantera resten.", - "4": "Avdelarsidor detekteras automatiskt och tas bort, vilket garanterar ett prydligt slutdokument." - }, - "formPrompt": "Skicka PDF som innehåller Stirling-PDF-sidavdelare:", - "duplexMode": "Duplexläge (Fram- och baksideskanning)", - "dividerDownload2": "Ladda ner 'Auto-delningsavdelare (med instruktioner).pdf'", - "submit": "Skicka" - }, - "sanitizePdf": { - "tags": "rengöra,säkra,säker,ta bort hot" - }, - "URLToPDF": { - "tags": "webbfångst,spara-sida,webb-till-dokument,arkivera", - "title": "URL till PDF", - "header": "URL till PDF", - "submit": "Konvertera", - "credit": "Använder WeasyPrint" - }, - "HTMLToPDF": { - "tags": "markup,webbinnehåll,transformation,konvertera", - "title": "HTML till PDF", - "header": "HTML till PDF", - "help": "Accepterar HTML-filer och ZIP-filer som innehåller html/css/bilder etc som krävs", - "submit": "Konvertera", - "credit": "Använder WeasyPrint", - "zoom": "Zoomnivå för visning av webbplatsen.", - "pageWidth": "Sidans bredd i centimeter. (Tom för standard)", - "pageHeight": "Sidans höjd i centimeter. (Tom för standard)", - "marginTop": "Övre marginal på sidan i millimeter. (Tom för standard)", - "marginBottom": "Nedre marginal på sidan i millimeter. (Tom för standard)", - "marginLeft": "Vänster marginal på sidan i millimeter. (Tom för standard)", - "marginRight": "Höger marginal på sidan i millimeter. (Tom för standard)", - "printBackground": "Rendera bakgrunden på webbplatser.", - "defaultHeader": "Aktivera standardhuvud (Namn och sidnummer)", - "cssMediaType": "Ändra CSS-mediatypen för sidan.", - "none": "Ingen", - "print": "Utskrift", - "screen": "Skärm" - }, - "MarkdownToPDF": { - "tags": "markup,webbinnehåll,transformation,konvertera", - "title": "Markdown till PDF", - "header": "Markdown till PDF", - "submit": "Konvertera", - "help": "Pågående arbete", - "credit": "Använder WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF Till Markdown", - "header": "PDF Till Markdown", - "submit": "Konvertera" - }, - "getPdfInfo": { - "tags": "information,data,statistik,statistik", - "title": "Hämta information om PDF", - "header": "Hämta information om PDF", - "submit": "Hämta information", - "downloadJson": "Ladda ner JSON" - }, - "extractPage": { - "tags": "extrahera" - }, - "PdfToSinglePage": { - "tags": "enstaka sida" - }, - "showJS": { - "tags": "JS", - "title": "Visa Javascript", - "header": "Visa Javascript", - "downloadJS": "Ladda ner Javascript", - "submit": "Visa" - }, - "autoRedact": { - "tags": "Redigera,Dölja,svärta,svart,markör,dold", - "title": "Auto-redigera", - "header": "Auto-redigera", - "colorLabel": "Färg", - "textsToRedactLabel": "Text att redigera (radavgränsad)", - "textsToRedactPlaceholder": "t.ex. \\nKonfidentiellt \\nHemligt", - "useRegexLabel": "Använd Regex", - "wholeWordSearchLabel": "Hel ord-sökning", - "customPaddingLabel": "Anpassad extra utfyllnad", - "convertPDFToImageLabel": "Konvertera PDF till PDF-bild (Används för att ta bort text bakom rutan)", - "submitButton": "Skicka" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,Tabellextraktion,extrahera,konvertera" - }, - "autoSizeSplitPDF": { - "tags": "pdf,dela,dokument,organisation" - }, - "overlay-pdfs": { - "tags": "Överlagra", - "header": "Överlagra PDF-filer", - "baseFile": { - "label": "Välj bas-PDF-fil" - }, - "overlayFiles": { - "label": "Välj överlagrings-PDF-filer" - }, - "mode": { - "label": "Välj överlagringsläge", - "sequential": "Sekventiell överlagring", - "interleaved": "Sammanflätad överlagring", - "fixedRepeat": "Fast upprepningsöverlagring" - }, - "counts": { - "label": "Överlagringsantal (för fast upprepningsläge)", - "placeholder": "Ange kommaseparerade antal (t.ex. 2,3,1)" - }, - "position": { - "label": "Välj överlagringsposition", - "foreground": "Förgrund", - "background": "Bakgrund" - }, - "submit": "Skicka" - }, - "split-by-sections": { - "tags": "Sektionsdelning,Dela,Anpassa", - "title": "Dela PDF efter sektioner", - "header": "Dela PDF i sektioner", - "horizontal": { - "label": "Horisontella indelningar", - "placeholder": "Ange antal horisontella indelningar" - }, - "vertical": { - "label": "Vertikala indelningar", - "placeholder": "Ange antal vertikala indelningar" - }, - "submit": "Dela PDF", - "merge": "Slå samman till en PDF" - }, - "AddStampRequest": { - "tags": "Stämpel,Lägg till bild,centrera bild,Vattenstämpel,PDF,Bädda in,Anpassa", - "header": "Stämpla PDF", - "title": "Stämpla PDF", - "stampType": "Stämpeltyp", - "stampText": "Stämpeltext", - "stampImage": "Stämpelbild", - "alphabet": "Alfabet", - "fontSize": "Tecken-/bildstorlek", - "rotation": "Rotation", - "opacity": "Opacitet", - "position": "Position", - "overrideX": "Åsidosätt X-koordinat", - "overrideY": "Åsidosätt Y-koordinat", - "customMargin": "Anpassad marginal", - "customColor": "Anpassad textfärg", - "submit": "Skicka" - }, - "removeImagePdf": { - "tags": "Ta bort bild,Sidoperationer,Backend,serversida" - }, - "splitPdfByChapters": { - "tags": "dela,kapitel,bokmärken,organisera" - }, - "validateSignature": { - "tags": "signatur,verifiera,validera,pdf,certifikat,digital signatur,Validera Signatur,Validera certifikat", - "title": "Validera PDF Signaturer", - "header": "Validera Digitala Signaturer", - "selectPDF": "Välj signerad PDF fil", - "submit": "Validera Signaturer", - "results": "Valideringsresultat", - "status": { - "_value": "Status", - "valid": "Giltig", - "invalid": "Ogiltig" - }, - "signer": "Signer", - "date": "Datum", - "reason": "Anledning", - "location": "Plats", - "noSignatures": "Inga digitala signaturer hittade i detta dokument", - "chain": { - "invalid": "Certificate chain validation failed - cannot verify signer's identity" - }, - "trust": { - "invalid": "Certificate not in trust store - source cannot be verified" - }, - "cert": { - "expired": "Certificate has expired", - "revoked": "Certificate has been revoked", - "info": "Certificate Details", - "issuer": "Issuer", - "subject": "Subject", - "serialNumber": "Serial Number", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "algorithm": "Algorithm", - "keySize": "Key Size", - "version": "Version", - "keyUsage": "Key Usage", - "selfSigned": "Self-Signed", - "bits": "bits" - }, - "signature": { - "info": "Signature Information", - "_value": "Signature", - "mathValid": "Signature is mathematically valid BUT:" - }, - "selectCustomCert": "Custom Certificate File X.509 (Optional)" - }, - "replace-color": { - "title": "Ersätt-Invertera-Färg", - "header": "Ersätt-Invertera färg på PDF", - "selectText": { - "1": "Ersätt eller Invertera färgalternativ", - "2": "Standard (standard höghastighetsfärg)", - "3": "Anpassad (anpassade färger)", - "4": "Full-Invertera (invertera alla färger)", - "5": "Höghastighetsfärgalternativ", - "6": "Vit text på svart bakgrund", - "7": "Svart text på vit bakgrund", - "8": "Gul text på svart bakgrund", - "9": "Grön text på svart bakgrund", - "10": "Välj textfärg", - "11": "Välj bakgrundsfärg" - }, - "submit": "Ersätt" - }, - "replaceColorPdf": { - "tags": "Ersätt Färg, Sidåtgärder, Bakomliggande, Serversid" - }, - "login": { - "title": "Logga in", - "header": "Logga in", - "signin": "Logga in", - "rememberme": "Kom ihåg mig", - "invalid": "Ogiltigt användarnamn eller lösenord.", - "locked": "Ditt konto har låsts.", - "signinTitle": "Vänligen logga in", - "ssoSignIn": "Logga in via enkel inloggning", - "oAuth2AutoCreateDisabled": "OAUTH2 Auto-skapa användare inaktiverad", - "oAuth2AdminBlockedUser": "Registrering eller inloggning av icke-registrerade användare är för närvarande blockerad. Kontakta administratören.", - "oauth2RequestNotFound": "Auktoriseringsbegäran hittades inte", - "oauth2InvalidUserInfoResponse": "Ogiltigt svar på användarinformation", - "oauth2invalidRequest": "Ogiltig begäran", - "oauth2AccessDenied": "Åtkomst nekad", - "oauth2InvalidTokenResponse": "Ogiltigt token-svar", - "oauth2InvalidIdToken": "Ogiltigt Id-token", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "Användaren är inaktiverad, inloggning är för närvarande blockerad med detta användarnamn. Kontakta administratören.", - "alreadyLoggedIn": "Du är redan inloggad på", - "alreadyLoggedIn2": "enheter. Logga ut från enheterna och försök igen.", - "toManySessions": "Du har för många aktiva sessioner", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF till en sida", - "header": "PDF till en sida", - "submit": "Konvertera till en sida" - }, - "pageExtracter": { - "title": "Extrahera sidor", - "header": "Extrahera sidor", - "submit": "Extrahera", - "placeholder": "(t.ex. 1,2,8 eller 4,7,12-16 eller 2n-1)" - }, - "sanitizePDF": { - "title": "Sanera PDF", - "header": "Sanera en PDF-fil", - "selectText": { - "1": "Ta bort JavaScript-åtgärder", - "2": "Ta bort inbäddade filer", - "3": "Remove XMP metadata", - "4": "Ta bort länkar", - "5": "Ta bort typsnitt", - "6": "Remove Document Info Metadata" - }, - "submit": "Sanera PDF" - }, - "adjustContrast": { - "title": "Justera kontrast", - "header": "Justera kontrast", - "contrast": "Kontrast:", - "brightness": "Ljusstyrka:", - "saturation": "Mättnad:", - "download": "Ladda ner" - }, - "compress": { - "title": "Komprimera", - "header": "Komprimera PDF", - "credit": "Denna tjänst använder qpdf för PDF-komprimering/optimering.", - "grayscale": { - "label": "Tillämpa gråskala för komprimering" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Optimeringsnivå:", - "4": "Autoläge - Autojusterar kvaliteten för att få PDF till exakt storlek", - "5": "Förväntad PDF-storlek (t.ex. 25MB, 10,8MB, 25KB)" - }, - "submit": "Komprimera" - }, - "decrypt": { - "passwordPrompt": "Denna fil är lösenordsskyddad. Fyll i lösenord:", - "cancelled": "Operation misslyckades för PDF: {0}", - "noPassword": "Inget lösenord angivet för krypterad PDF: {0}", - "invalidPassword": "Försök igen med korrekt lösenord.", - "invalidPasswordHeader": "Felaktigt lösenord eller osupportad kryptering för PDF: {0}", - "unexpectedError": "Det uppstod ett fel vid processering av filen. Vänligen försök igen.", - "serverError": "Serverfel vid avkryptering: {0}", - "success": "Fil avkrypterad." - }, - "multiTool-advert": { - "message": "Denna funktion finns också tillgänglig i vår multi-tool page. Spana in den för bättre sida-för-sida anpassning och ytterligare funktioner!" - }, - "pageRemover": { - "title": "Sidborttagare", - "header": "PDF Sidborttagning", - "pagesToDelete": "Sidor att radera (Ange en kommaseparerad lista med sidnummer) :", - "submit": "Ta bort sidor", - "placeholder": "(t.ex. 1,2,6 eller 1-10,15-30)" - }, - "imageToPDF": { - "title": "Bild till PDF", - "header": "Bild till PDF", - "submit": "Konvertera", - "selectLabel": "Alternativ för bildanpassning", - "fillPage": "Fyll sida", - "fitDocumentToImage": "Anpassa sida till bild", - "maintainAspectRatio": "Behåll bildförhållande", - "selectText": { - "2": "Rotera PDF automatiskt", - "3": "Multifillogik (Endast aktiverad om man arbetar med flera bilder)", - "4": "Slå samman till en enda PDF", - "5": "Konvertera till separata PDF-filer" - } - }, - "PDFToCSV": { - "title": "PDF till CSV", - "header": "PDF till CSV", - "prompt": "Välj sida för att extrahera tabell", - "submit": "Extrahera" - }, - "split-by-size-or-count": { - "title": "Dela PDF efter storlek eller antal", - "header": "Dela PDF efter storlek eller antal", - "type": { - "label": "Välj delningstyp", - "size": "Efter storlek", - "pageCount": "Efter sidantal", - "docCount": "Efter dokumentantal" - }, - "value": { - "label": "Ange värde", - "placeholder": "Ange storlek (t.ex. 2MB eller 3KB) eller antal (t.ex. 5)" - }, - "submit": "Skicka" - }, - "printFile": { - "title": "Skriv ut fil", - "header": "Skriv ut fil till skrivare", - "selectText": { - "1": "Välj fil att skriva ut", - "2": "Ange skrivarnamn" - }, - "submit": "Skriv ut" - }, - "licenses": { - "nav": "Licenser", - "title": "Tredjepartslicenser", - "header": "Tredjepartslicenser", - "module": "Modul", - "version": "Version", - "license": "Licens" - }, - "survey": { - "nav": "Undersökning", - "title": "Stirling-PDF-undersökning", - "description": "Stirling-PDF har ingen spårning så vi vill höra från våra användare för att förbättra Stirling-PDF!", - "changes": "Stirling-PDF har ändrats sedan den senaste undersökningen. Lär dig mer på vår blogg här:", - "changes2": "Med dessa ändringar fås betalat företagsstöd och finansiering", - "please": "Vänligen överväg att delta i vår undersökning!", - "disabled": "(Undersökningspopup kommer att inaktiveras i kommande uppdateringar men finns tillgänglig längst ner på sidan)", - "button": "Delta i undersökningen", - "dontShowAgain": "Visa inte igen", - "meeting": { - "1": "Om du använder Stirling PDF på jobbet skulle vi vilja prata med dig. Vi erbjuder teknisk support i utbyte mot ett 15 minuters samtal med dig som användare.", - "2": "Detta är en chans att:", - "3": "Få hjälp med utrullning, integrationer eller felsökning", - "4": "Ge direkt feedback på prestanda, sällan uppkomna problem och verktyg som saknas.", - "5": "Hjälp oss refinera Stirling PDF för företagsanvändning", - "6": "Om du är intresserad kan du boka en tid med vårt team omgående. (Endast engelsktalande)", - "7": "Ser fram emot att gräva ned oss i din användning och se till att Stirling PDF blir ännu bättre!", - "notInterested": "Inte ett företag och/eller intresserad i ett möte?", - "button": "Boka möte" - } - }, - "removeImage": { - "title": "Ta bort bild", - "header": "Ta bort bild", - "removeImage": "Ta bort bild", - "submit": "Ta bort bild" - }, - "splitByChapters": { - "title": "Dela upp PDF efter kapitel", - "header": "Dela upp PDF efter kapitel", - "bookmarkLevel": "Bokmärkesnivå", - "includeMetadata": "Inkludera Metadata", - "allowDuplicates": "Tillåt Dubletter", - "desc": { - "1": "Detta verktyg delar upp en PDF till flera PDFer baserat på dess kapitelstruktur.", - "2": "Bokmärkesnivå: Välj nivån av bokmärken att använda för delning (0 för toppnivå, 1 för andra nivå, m.m.).", - "3": "Include Metadata: If checked, the original PDF's metadata will be included in each split PDF.", - "4": "Tillåt duplicieringar: Om kryssrutan är markerad tillåts flera bokmärken på samma sida skapa individuella PDF:er." - }, - "submit": "Dela upp PDF" - }, - "fileChooser": { - "click": "Klicka", - "or": "eller", - "dragAndDrop": "Dra & Släpp", - "dragAndDropPDF": "Dra & Släpp PDF fil", - "dragAndDropImage": "Dra & Släpp bildfil", - "hoveredDragAndDrop": "Dra & Släpp fil(er) här", - "extractPDF": "Extraherar..." - }, - "releases": { - "footer": "Utgåvor", - "title": "Release Notes", - "header": "Release Notes", - "current": { - "version": "Nuvarande Utgåva" - }, - "note": "Release notes are only available in English" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/th-TH/translation.json b/frontend/dist/locales/th-TH/translation.json deleted file mode 100644 index 8dee79b00..000000000 --- a/frontend/dist/locales/th-TH/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "ขนาดตัวอักษร", - "fontName": "ชื่อฟอนต์", - "title": "เพิ่มหมายเลขหน้า", - "header": "เพิ่มหมายเลขหน้า", - "selectText": { - "1": "เลือกไฟล์ PDF:", - "2": "ขนาดขอบ", - "3": "ตำแหน่ง", - "4": "หมายเลขเริ่มต้น", - "5": "หน้าเพื่อกำหนดหมายเลข", - "6": "ข้อความที่กำหนดเอง" - }, - "customTextDesc": "ข้อความที่กำหนดเอง", - "numberPagesDesc": "หมายเลขหน้าที่จะกำหนด หมายเลขเริ่มต้น 'ทั้งหมด', ยังยอมรับ 1-5 หรือ 2,5,9 เป็นต้น", - "customNumberDesc": "ค่าเริ่มต้น {n}, ยังยอมรับ 'หน้า {n} ของ {total}', 'ข้อความ-{n}', '{filename}-{n}'", - "submit": "เพิ่มหมายเลขหน้า" - }, - "pdfPrompt": "เลือก PDF", - "multiPdfPrompt": "เลือก PDF หลายไฟล์ (2 ขึ้นไป)", - "multiPdfDropPrompt": "เลือก (หรือลากและวาง) PDF ทั้งหมดที่คุณต้องการ", - "imgPrompt": "เลือกภาพ", - "genericSubmit": "ส่ง", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "คำเตือน: กระบวนการนี้อาจใช้เวลาสูงสุดหนึ่งนาทีขึ้นอยู่กับขนาดไฟล์", - "pageOrderPrompt": "เรียงลำดับหน้าตามความต้องการ (ป้อนหมายเลขหน้าแยกด้วยเครื่องหมายจุลภาคหรือฟังก์ชัน เช่น 2n+1) :", - "pageSelectionPrompt": "เลือกหน้าตามความต้องการ (ป้อนหมายเลขหน้าแยกด้วยเครื่องหมายจุลภาค เช่น 1,5,6 หรือฟังก์ชัน เช่น 2n+1) :", - "goToPage": "ไปที่หน้า", - "true": "จริง", - "false": "เท็จ", - "unknown": "ไม่ทราบ", - "save": "บันทึก", - "saveToBrowser": "บันทึกในเบราว์เซอร์", - "close": "ปิด", - "filesSelected": "ไฟล์ที่เลือก", - "noFavourites": "ไม่มีรายการโปรดที่เพิ่ม", - "downloadComplete": "การดาวน์โหลดเสร็จสมบูรณ์", - "bored": "เบื่อรอหรือยัง?", - "alphabet": "ตัวอักษร", - "downloadPdf": "ดาวน์โหลด PDF", - "text": "ข้อความ", - "font": "ฟอนต์", - "selectFillter": "-- เลือก --", - "pageNum": "หมายเลขหน้า", - "sizes": { - "small": "เล็ก", - "medium": "กลาง", - "large": "ใหญ่", - "x-large": "ใหญ่มาก" - }, - "error": { - "pdfPassword": "เอกสาร PDF มีรหัสผ่าน และไม่ได้ระบุรหัสผ่านหรือรหัสผ่านไม่ถูกต้อง", - "_value": "ข้อผิดพลาด", - "sorry": "ขออภัยในปัญหา!", - "needHelp": "ต้องการความช่วยเหลือ / พบปัญหา?", - "contactTip": "หากคุณยังมีปัญหา อย่าลังเลที่จะติดต่อเราเพื่อขอความช่วยเหลือ คุณสามารถส่งตั๋วบนหน้าของเราใน GitHub หรือ ติดต่อเราผ่าน Discord:", - "404": { - "head": "404 - ไม่พบหน้า | อุ๊ย! เราพลาดในโค้ด!", - "1": "เราไม่สามารถหาหน้าที่คุณกำลังมองหา", - "2": "บางสิ่งบางอย่างผิดพลาด" - }, - "github": "ส่งตั๋วใน GitHub", - "showStack": "แสดง Stack Trace", - "copyStack": "คัดลอก Stack Trace", - "githubSubmit": "GitHub - ส่งตั๋ว", - "discordSubmit": "Discord - ส่งโพสต์การสนับสนุน" - }, - "delete": "ลบ", - "username": "ชื่อผู้ใช้", - "password": "รหัสผ่าน", - "welcome": "ยินดีต้อนรับ", - "property": "คุณสมบัติ", - "black": "ดำ", - "white": "ขาว", - "red": "แดง", - "green": "เขียว", - "blue": "น้ำเงิน", - "custom": "ปรับแต่ง...", - "WorkInProgess": "กำลังดำเนินการ อาจไม่ทำงานหรือมีบั๊ก โปรดรายงานปัญหาใด ๆ!", - "poweredBy": "ขับเคลื่อนโดย", - "yes": "ใช่", - "no": "ไม่", - "changedCredsMessage": "ข้อมูลรับรองเปลี่ยนแปลงแล้ว!", - "notAuthenticatedMessage": "ผู้ใช้ไม่ได้รับการยืนยัน", - "userNotFoundMessage": "ไม่พบผู้ใช้", - "incorrectPasswordMessage": "รหัสผ่านปัจจุบันไม่ถูกต้อง", - "usernameExistsMessage": "ชื่อผู้ใช้ใหม่มีอยู่แล้ว", - "invalidUsernameMessage": "ชื่อผู้ใช้ไม่ถูกต้อง ชื่อผู้ใช้สามารถประกอบด้วยตัวอักษร ตัวเลข และอักขระพิเศษต่อไปนี้ @._+- หรือจะต้องเป็นที่อยู่อีเมลที่ถูกต้อง", - "invalidPasswordMessage": "รหัสผ่านไม่ควรว่าง และไม่ควรมีพื้นที่ว่างที่ขอบของข้อความ", - "confirmPasswordErrorMessage": "รหัสผ่านใหม่และยืนยันรหัสผ่านใหม่ต้องตรงกัน", - "deleteCurrentUserMessage": "ไม่สามารถลบผู้ใช้ที่เข้าสู่ระบบในปัจจุบันได้", - "deleteUsernameExistsMessage": "ชื่อผู้ใช้ไม่ปรากฏและไม่สามารถลบได้", - "downgradeCurrentUserMessage": "ไม่สามารถลดระดับบทบาทของผู้ใช้ปัจจุบันได้", - "disabledCurrentUserMessage": "ผู้ใช้งานปัจจุบันไม่สามารถปิดการใช้งานได้", - "downgradeCurrentUserLongMessage": "ไม่สามารถลดระดับบทบาทของผู้ใช้ปัจจุบันได้ ดังนั้นผู้ใช้ปัจจุบันจะไม่ปรากฏ", - "userAlreadyExistsOAuthMessage": "ผู้ใช้มีอยู่แล้วในฐานะผู้ใช้ OAuth2", - "userAlreadyExistsWebMessage": "ผู้ใช้มีอยู่แล้วในฐานะผู้ใช้เว็บ", - "oops": "อุ๊ย!", - "help": "ช่วยเหลือ", - "goHomepage": "ไปที่หน้าหลัก", - "joinDiscord": "เข้าร่วมเซิร์ฟเวอร์ Discord ของเรา", - "seeDockerHub": "ดู Docker Hub", - "visitGithub": "เยี่ยมชมที่เก็บ Github", - "donate": "บริจาค", - "color": "สี", - "sponsor": "ผู้สนับสนุน", - "info": "ข้อมูล", - "pro": "โปร", - "page": "หน้า", - "pages": "หน้า", - "loading": "กำลังโหลด...", - "addToDoc": "เพิ่มเข้าสู่เอกสาร", - "reset": "Reset", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "นโยบายความเป็นส่วนตัว", - "terms": "ข้อกำหนดการใช้งาน", - "accessibility": "ความเข้าถึง", - "cookie": "นโยบายคุกกี้", - "impressum": "ปฏิญญา", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "เมนู Pipeline (เบต้า)", - "uploadButton": "อัปโหลดแบบกำหนดเอง", - "configureButton": "กำหนดค่า", - "defaultOption": "กำหนดเอง", - "submitButton": "ส่ง", - "help": "ความช่วยเหลือ Pipeline", - "scanHelp": "ความช่วยเหลือการสแกนโฟลเดอร์", - "deletePrompt": "คุณแน่ใจว่าต้องการลบ pipeline ใช่ไหม", - "tags": "อัตโนมัติ, ลำดับ, สคริปต์, ประมวลผลแบทช์", - "title": "พิ้พลne" - }, - "pipelineOptions": { - "header": "การกำหนดค่า Pipeline", - "pipelineNameLabel": "ชื่อ Pipeline", - "saveSettings": "บันทึกการตั้งค่าการดำเนินการ", - "pipelineNamePrompt": "ใส่ชื่อ pipeline ที่นี่", - "selectOperation": "เลือกการดำเนินการ", - "addOperationButton": "เพิ่มการดำเนินการ", - "pipelineHeader": "Pipeline:", - "saveButton": "ดาวน์โหลด", - "validateButton": "ตรวจสอบความถูกต้อง" - }, - "enterpriseEdition": { - "button": "อัปเกรดเป็นโปร", - "warning": "ฟีเจอร์นี้มีให้ใช้งานเฉพาะผู้ใช้ที่เป็นโปรเท่านั้น", - "yamlAdvert": "Stirling PDF Pro supports YAML configuration files and other SSO features.", - "ssoAdvert": "Looking for more user management features? Check out Stirling PDF Pro" - }, - "analytics": { - "title": "คุณต้องการที่จะทำให้ Stirling PDF ดียิ่งขึ้นไหม?", - "paragraph1": "Stirling PDF มีการวิเคราะห์แบบสมัครใจเพื่อช่วยเราปรับปรุงผลิตภัณฑ์ เราไม่นำทางความเป็นส่วนตัวหรือเนื้อหาของไฟล์ไปเก็บข้อมูลใด ๆ", - "paragraph2": "โปรดพิจารณาการเปิดใช้งานการวิเคราะห์เพื่อช่วยให้ Stirling-PDF เจริญเติบโตและทำให้เราเข้าใจผู้ใช้งานมากขึ้น", - "enable": "เปิดการวิเคราะห์", - "disable": "ปิดการวิเคราะห์", - "settings": "คุณสามารถเปลี่ยนแปลงการตั้งค่าการวิเคราะห์ในไฟล์ config/settings.yml" - }, - "navbar": { - "favorite": "รายการโปรด", - "recent": "New and recently updated", - "darkmode": "โหมดมืด", - "language": "ภาษา", - "settings": "การตั้งค่า", - "allTools": "เครื่องมือทั้งหมด", - "multiTool": "เครื่องมือหลายตัว", - "search": "Search", - "sections": { - "organize": "จัดระเบียบ", - "convertTo": "แปลงเป็น PDF", - "convertFrom": "แปลงจาก PDF", - "security": "ลงนามและความปลอดภัย", - "advance": "ขั้นสูง", - "edit": "ดูและแก้ไข", - "popular": "ยอดนิยม" - } - }, - "settings": { - "title": "การตั้งค่า", - "update": "มีการอัปเดต", - "updateAvailable": "{0} คือเวอร์ชันที่ติดตั้งในปัจจุบัน มีเวอร์ชันใหม่ ({1}) พร้อมให้บริการ", - "appVersion": "เวอร์ชันแอป:", - "downloadOption": { - "title": "เลือกตัวเลือกการดาวน์โหลด (สำหรับการดาวน์โหลดไฟล์เดียวที่ไม่ใช่ zip):", - "1": "เปิดในหน้าต่างเดียวกัน", - "2": "เปิดในหน้าต่างใหม่", - "3": "ดาวน์โหลดไฟล์" - }, - "zipThreshold": "บีบอัดไฟล์เมื่อจำนวนไฟล์ที่ดาวน์โหลดเกิน", - "signOut": "ออกจากระบบ", - "accountSettings": "การตั้งค่าบัญชี", - "bored": { - "help": "เปิดใช้งานเกม easter egg" - }, - "cacheInputs": { - "name": "บันทึกการป้อนฟอร์ม", - "help": "เปิดใช้งานเพื่อบันทึกการป้อนข้อมูลที่ใช้ก่อนหน้านี้สำหรับการรันในอนาคต" - } - }, - "changeCreds": { - "title": "เปลี่ยนข้อมูลรับรอง", - "header": "อัปเดตรายละเอียดบัญชีของคุณ", - "changePassword": "คุณกำลังใช้ข้อมูลรับรองการเข้าสู่ระบบเริ่มต้น กรุณาใส่รหัสผ่านใหม่", - "newUsername": "ชื่อผู้ใช้ใหม่", - "oldPassword": "รหัสผ่านปัจจุบัน", - "newPassword": "รหัสผ่านใหม่", - "confirmNewPassword": "ยืนยันรหัสผ่านใหม่", - "submit": "ส่งการเปลี่ยนแปลง" - }, - "account": { - "title": "การตั้งค่าบัญชี", - "accountSettings": "การตั้งค่าบัญชี", - "adminSettings": "การตั้งค่าผู้ดูแลระบบ - ดูและเพิ่มผู้ใช้", - "userControlSettings": "การควบคุมผู้ใช้", - "changeUsername": "เปลี่ยนชื่อผู้ใช้", - "newUsername": "ชื่อผู้ใช้ใหม่", - "password": "รหัสผ่านยืนยัน", - "oldPassword": "รหัสผ่านเก่า", - "newPassword": "รหัสผ่านใหม่", - "changePassword": "เปลี่ยนรหัสผ่าน", - "confirmNewPassword": "ยืนยันรหัสผ่านใหม่", - "signOut": "ออกจากระบบ", - "yourApiKey": "คีย์ API ของคุณ", - "syncTitle": "ซิงค์การตั้งค่าเบราว์เซอร์กับบัญชี", - "settingsCompare": "การเปรียบเทียบการตั้งค่า:", - "property": "คุณสมบัติ", - "webBrowserSettings": "การตั้งค่าเบราว์เซอร์เว็บ", - "syncToBrowser": "ซิงค์บัญชี -> เบราว์เซอร์", - "syncToAccount": "ซิงค์บัญชี <- เบราว์เซอร์" - }, - "adminUserSettings": { - "title": "การควบคุมผู้ใช้", - "header": "การควบคุมผู้ใช้", - "admin": "ผู้ดูแลระบบ", - "user": "ผู้ใช้", - "addUser": "เพิ่มผู้ใช้ใหม่", - "deleteUser": "ลบผู้ใช้", - "confirmDeleteUser": "ควรลบผู้ใช้นี้หรือไม่?", - "confirmChangeUserStatus": "ผู้ใช้นี้ควรถูกปิด/เปิดใช้งานหรือไม่?", - "usernameInfo": "ชื่อผู้ใช้สามารถประกอบด้วยตัวอักษร ตัวเลข และอักขระพิเศษต่อไปนี้ @._+- หรือจะต้องเป็นที่อยู่อีเมลที่ถูกต้อง", - "roles": "บทบาท", - "role": "บทบาท", - "actions": "การดำเนินการ", - "apiUser": "ผู้ใช้ API จำกัด", - "extraApiUser": "ผู้ใช้ API เพิ่มเติม", - "webOnlyUser": "ผู้ใช้เว็บเท่านั้น", - "demoUser": "ผู้ใช้ทดลอง (ไม่มีการตั้งค่าปรับแต่ง)", - "internalApiUser": "ผู้ใช้ API ภายใน", - "forceChange": "บังคับให้ผู้ใช้เปลี่ยนรหัสผ่านในการเข้าสู่ระบบ", - "submit": "บันทึกผู้ใช้", - "changeUserRole": "เปลี่ยนบทบาทของผู้ใช้", - "authenticated": "ได้รับการยืนยันแล้ว", - "editOwnProfil": "แก้ไขโปรไฟล์ของตัวเอง", - "enabledUser": "ผู้ใช้ที่เปิดใช้งาน", - "disabledUser": "ผู้ใช้ที่ปิดใช้งาน", - "activeUsers": "ผู้ใช้ที่มีการใช้งาน:", - "disabledUsers": "ผู้ใช้ที่ถูกระงับการใช้งาน:", - "totalUsers": "ผู้ใช้รวมทั้งหมด:", - "lastRequest": "การขอข้อมูลล่าสุด", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "การนำเข้า/ส่งออกฐานข้อมูล", - "header": "การนำเข้า/ส่งออกฐานข้อมูล", - "fileName": "ชื่อไฟล์", - "creationDate": "วันที่สร้าง", - "fileSize": "ขนาดไฟล์", - "deleteBackupFile": "ลบไฟล์สำรอง", - "importBackupFile": "นำเข้าไฟล์สำรอง", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "ดาวน์โหลดไฟล์สำรอง", - "info_1": "เมื่อนำเข้าข้อมูล จำเป็นต้องแน่ใจว่าโครงสร้างถูกต้อง หากไม่แน่ใจว่ากำลังทำอะไรอยู่ ควรขอคำแนะนำและความช่วยเหลือจากมืออาชีพ ความผิดพลาดในโครงสร้างอาจทำให้เกิดข้อบกพร่องในการทำงานของแอปพลิเคชันจนถึงขั้นไม่สามารถรันแอปพลิเคชันได้เลย", - "info_2": "ชื่อไฟล์ไม่สำคัญเมื่ออัปโหลด จะถูกเปลี่ยนชื่อภายหลังให้เป็นรูปแบบ backup_user_yyyyMMddHHmm.sql เพื่อให้มีการตั้งชื่อที่สอดคล้องกัน", - "submit": "นำเข้าสำรอง", - "importIntoDatabaseSuccessed": "การนำเข้าในฐานข้อมูลสำเร็จ", - "backupCreated": "Database backup successful", - "fileNotFound": "ไม่พบไฟล์", - "fileNullOrEmpty": "ไฟล์ต้องไม่ว่างเปล่าหรือไม่มีข้อมูล", - "failedImportFile": "การนำเข้าไฟล์ล้มเหลว", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "สถานะของคุณในระบบหมดอายุ กรุณารีเฟรชหน้าและลองใหม่อีกครั้ง", - "refreshPage": "Refresh Page" - }, - "home": { - "desc": "ศูนย์รวมทุกความต้องการของคุณเกี่ยวกับ PDF ที่โฮสต์ในท้องถิ่นของคุณ", - "searchBar": "ค้นหาคุณสมบัติ...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "ดู เพิ่มคำอธิบาย เพิ่มข้อความหรือรูปภาพ" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "เครื่องมือ PDF หลายตัว", - "desc": "รวม หมุน จัดเรียง และลบหน้าต่างๆ" - }, - "merge": { - "title": "รวมไฟล์ PDF", - "desc": "รวม PDF หลายไฟล์เป็นหนึ่งเดียวได้อย่างง่ายดาย" - }, - "split": { - "title": "แยกไฟล์ PDF", - "desc": "แยก PDF เป็นหลายเอกสาร" - }, - "rotate": { - "title": "หมุน", - "desc": "หมุน PDF ของคุณได้อย่างง่ายดาย" - }, - "imageToPdf": { - "title": "รูปภาพเป็น PDF", - "desc": "แปลงรูปภาพ (PNG, JPEG, GIF) เป็น PDF" - }, - "pdfToImage": { - "title": "PDF เป็นรูปภาพ", - "desc": "แปลง PDF เป็นรูปภาพ (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "จัดระเบียบ", - "desc": "ลบ/จัดเรียงหน้าต่างๆ ในลำดับที่ต้องการ" - }, - "addImage": { - "title": "เพิ่มรูปภาพ", - "desc": "เพิ่มรูปภาพไปยังตำแหน่งที่กำหนดใน PDF" - }, - "watermark": { - "title": "เพิ่มลายน้ำ", - "desc": "เพิ่มลายน้ำที่กำหนดเองลงในเอกสาร PDF ของคุณ" - }, - "permissions": { - "title": "เปลี่ยนสิทธิ์", - "desc": "เปลี่ยนสิทธิ์ของเอกสาร PDF ของคุณ" - }, - "removePages": { - "title": "ลบ", - "desc": "ลบหน้าที่ไม่ต้องการจากเอกสาร PDF ของคุณ" - }, - "addPassword": { - "title": "เพิ่มรหัสผ่าน", - "desc": "เข้ารหัสเอกสาร PDF ของคุณด้วยรหัสผ่าน" - }, - "removePassword": { - "title": "ลบรหัสผ่าน", - "desc": "ลบรหัสผ่านจากการป้องกันเอกสาร PDF ของคุณ" - }, - "compressPdfs": { - "title": "บีบอัด", - "desc": "บีบอัด PDF เพื่อลดขนาดไฟล์" - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "เปลี่ยนข้อมูลเมตา", - "desc": "เปลี่ยน/ลบ/เพิ่มข้อมูลเมตาจากเอกสาร PDF" - }, - "fileToPDF": { - "title": "แปลงไฟล์เป็น PDF", - "desc": "แปลงไฟล์เกือบทุกประเภทเป็น PDF (DOCX, PNG, XLS, PPT, TXT และอื่น ๆ)" - }, - "ocr": { - "title": "OCR / ทำความสะอาดการสแกน", - "desc": "ทำความสะอาดการสแกนและตรวจจับข้อความจากภาพภายใน PDF และเพิ่มเป็นข้อความอีกครั้ง" - }, - "extractImages": { - "title": "แยกรูปภาพ", - "desc": "แยกรูปภาพทั้งหมดจาก PDF และบันทึกในรูปแบบ zip" - }, - "pdfToPDFA": { - "title": "PDF เป็น PDF/A", - "desc": "แปลง PDF เป็น PDF/A สำหรับการจัดเก็บระยะยาว" - }, - "PDFToWord": { - "title": "PDF เป็น Word", - "desc": "แปลง PDF เป็นรูปแบบ Word (DOC, DOCX และ ODT)" - }, - "PDFToPresentation": { - "title": "PDF เป็น Presentation", - "desc": "แปลง PDF เป็นรูปแบบ Presentation (PPT, PPTX และ ODP)" - }, - "PDFToText": { - "title": "PDF เป็น RTF (Text)", - "desc": "แปลง PDF เป็นรูปแบบข้อความหรือ RTF" - }, - "PDFToHTML": { - "title": "PDF เป็น HTML", - "desc": "แปลง PDF เป็นรูปแบบ HTML" - }, - "PDFToXML": { - "title": "PDF เป็น XML", - "desc": "แปลง PDF เป็นรูปแบบ XML" - }, - "ScannerImageSplit": { - "title": "ตรวจจับ/แยกรูปภาพสแกน", - "desc": "แยกรูปภาพหลายรูปจากภาพ/ PDF" - }, - "sign": { - "title": "เซ็นชื่อ", - "desc": "เพิ่มลายเซ็นลงใน PDF ด้วยการวาด ข้อความ หรือรูปภาพ" - }, - "flatten": { - "title": "แบน", - "desc": "ลบองค์ประกอบแบบอินเตอร์แอคทีฟและฟอร์มทั้งหมดจาก PDF" - }, - "repair": { - "title": "ซ่อมแซม", - "desc": "พยายามซ่อมแซม PDF ที่เสียหาย/แตก" - }, - "removeBlanks": { - "title": "ลบหน้าว่าง", - "desc": "ตรวจจับและลบหน้าว่างจากเอกสาร" - }, - "removeAnnotations": { - "title": "ลบคำอธิบายประกอบ", - "desc": "ลบความคิดเห็น/คำอธิบายประกอบทั้งหมดจาก PDF" - }, - "compare": { - "title": "เปรียบเทียบ", - "desc": "เปรียบเทียบและแสดงความแตกต่างระหว่างเอกสาร PDF สองฉบับ" - }, - "certSign": { - "title": "เซ็นชื่อด้วยใบรับรอง", - "desc": "เซ็นชื่อ PDF ด้วยใบรับรอง/คีย์ (PEM/P12)" - }, - "removeCertSign": { - "title": "ลบลายเซ็นใบรับรอง", - "desc": "ลบลายเซ็นใบรับรองจาก PDF" - }, - "pageLayout": { - "title": "เลย์เอาต์หลายหน้า", - "desc": "รวมหน้าหลายหน้าของเอกสาร PDF เข้าด้วยกันในหน้าเดียว" - }, - "scalePages": { - "title": "ปรับขนาด/สเกลหน้า", - "desc": "เปลี่ยนขนาด/สเกลของหน้าและ/หรือเนื้อหาของมัน" - }, - "pipeline": { - "title": "ทิศทางงาน", - "desc": "เรียกใช้งานหลายการกระทำใน PDF โดยกำหนดสคริปต์ pipeline" - }, - "add-page-numbers": { - "title": "เพิ่มหมายเลขหน้า", - "desc": "เพิ่มหมายเลขหน้าตลอดทั้งเอกสารในตำแหน่งที่กำหนด" - }, - "auto-rename": { - "title": "เปลี่ยนชื่อ PDF อัตโนมัติ", - "desc": "เปลี่ยนชื่อไฟล์ PDF โดยอัตโนมัติตามหัวข้อที่ตรวจจับได้" - }, - "adjust-contrast": { - "title": "ปรับสี/คอนทราสต์", - "desc": "ปรับคอนทราสต์ ความอิ่มตัว และความสว่างของ PDF" - }, - "crop": { - "title": "ครอบตัด PDF", - "desc": "ครอบตัด PDF เพื่อลดขนาด (รักษาข้อความ!)" - }, - "autoSplitPDF": { - "title": "แยกหน้าอัตโนมัติ", - "desc": "แยก PDF ที่สแกนโดยใช้ QR Code แยกหน้า" - }, - "sanitizePdf": { - "title": "ทำความสะอาด", - "desc": "ลบสคริปต์และองค์ประกอบอื่นๆ จากไฟล์ PDF" - }, - "URLToPDF": { - "title": "URL/เว็บไซต์เป็น PDF", - "desc": "แปลง URL http(s) เป็น PDF" - }, - "HTMLToPDF": { - "title": "HTML เป็น PDF", - "desc": "แปลงไฟล์ HTML หรือ zip เป็น PDF" - }, - "MarkdownToPDF": { - "title": "Markdown เป็น PDF", - "desc": "แปลงไฟล์ Markdown เป็น PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "รับข้อมูลทั้งหมดเกี่ยวกับ PDF", - "desc": "รับข้อมูลที่เป็นไปได้ทั้งหมดเกี่ยวกับ PDF" - }, - "extractPage": { - "title": "แยกหน้า", - "desc": "แยกหน้าที่เลือกจาก PDF" - }, - "PdfToSinglePage": { - "title": "หน้าขนาดใหญ่เพียงหน้าเดียว", - "desc": "รวมหน้าทั้งหมดของ PDF เป็นหน้าเดียวขนาดใหญ่" - }, - "showJS": { - "title": "แสดง Javascript", - "desc": "ค้นหาและแสดง Javascript ที่ฝังใน PDF" - }, - "autoRedact": { - "title": "ซ่อนข้อมูลอัตโนมัติ", - "desc": "ซ่อนข้อความใน PDF โดยอัตโนมัติตามข้อความที่ป้อน" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF เป็น CSV", - "desc": "แยกตารางจาก PDF แปลงเป็น CSV" - }, - "autoSizeSplitPDF": { - "title": "แยกตามขนาด/จำนวน", - "desc": "แยก PDF เป็นเอกสารหลายฉบับตามขนาด จำนวนหน้า หรือจำนวนเอกสาร" - }, - "overlay-pdfs": { - "title": "ซ้อนทับ PDF", - "desc": "ซ้อนทับ PDF บน PDF อีกไฟล์หนึ่ง" - }, - "split-by-sections": { - "title": "แยก PDF เป็นส่วน", - "desc": "แบ่งแต่ละหน้าของ PDF เป็นส่วนย่อยแนวนอนและแนวตั้ง" - }, - "AddStampRequest": { - "title": "เพิ่มตราประทับลงใน PDF", - "desc": "เพิ่มข้อความหรือตราประทับรูปภาพในตำแหน่งที่กำหนด" - }, - "removeImagePdf": { - "title": "ลบภาพออกจาก PDF", - "desc": "ลบภาพออกจาก PDF เพื่อลดขนาดไฟล์" - }, - "splitPdfByChapters": { - "title": "Split PDF by Chapters", - "desc": "Split a PDF into multiple files based on its chapter structure." - }, - "validateSignature": { - "title": "Validate PDF Signature", - "desc": "Verify digital signatures and certificates in PDF documents" - }, - "replaceColorPdf": { - "title": "Replace and Invert Color", - "desc": "Replace color for text and background in PDF and invert full color of pdf to reduce file size" - } - }, - "viewPdf": { - "tags": "ดู, อ่าน, เพิ่มคำอธิบาย, ข้อความ, รูปภาพ", - "title": "View/Edit PDF", - "header": "ดู PDF" - }, - "multiTool": { - "tags": "เครื่องมือหลายตัว, หลายการดำเนินการ, UI, คลิกและลาก, ส่วนหน้า, ฝั่งไคลเอนต์, อินเตอร์แอคทีฟ, เคลื่อนย้าย", - "title": "เครื่องมือ PDF หลายตัว", - "header": "เครื่องมือ PDF หลายตัว", - "uploadPrompts": "ชื่อไฟล์", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "selectPages": "Page Select", - "selectedPages": "Selected Pages", - "page": "Page", - "deleteSelected": "Delete Selected", - "downloadAll": "Export", - "downloadSelected": "Export Selected", - "insertPageBreak": "Insert Page Break", - "addFile": "Add File", - "rotateLeft": "Rotate Left", - "rotateRight": "Rotate Right", - "split": "Split", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "Delete", - "dragDropMessage": "Page(s) Selected", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "รวม, การดำเนินการหน้า, ฝั่งเซิร์ฟเวอร์", - "title": "รวม", - "header": "รวม PDF หลายไฟล์ (2 ขึ้นไป)", - "sortByName": "จัดเรียงตามชื่อ", - "sortByDate": "จัดเรียงตามวันที่", - "removeCertSign": "ลบลายเซ็นดิจิทัลในไฟล์ที่รวม?", - "submit": "รวม" - }, - "split": { - "tags": "การดำเนินการหน้า, แบ่ง, หลายหน้า, ตัด, ฝั่งเซิร์ฟเวอร์", - "title": "แยก PDF", - "header": "แยก PDF", - "desc": { - "1": "หมายเลขที่คุณเลือกคือหมายเลขหน้าที่คุณต้องการแยก", - "2": "ดังนั้นการเลือก 1,3,7-9 จะทำให้เอกสาร 10 หน้าแยกออกเป็น PDF แยก 6 ชุด:", - "3": "เอกสาร #1: หน้า 1", - "4": "เอกสาร #2: หน้า 2 และ 3", - "5": "เอกสาร #3: หน้า 4, 5, 6, 7", - "6": "เอกสาร #4: หน้า 8", - "7": "เอกสาร #5: หน้า 9", - "8": "เอกสาร #6: หน้า 10" - }, - "splitPages": "ป้อนหน้าที่ต้องการแยก:", - "submit": "แยก" - }, - "rotate": { - "tags": "ฝั่งเซิร์ฟเวอร์", - "title": "หมุน PDF", - "header": "หมุน PDF", - "selectAngle": "เลือกมุมการหมุน (เป็นหลายเท่าของ 90 องศา):", - "submit": "หมุน" - }, - "imageToPdf": { - "tags": "การแปลง, รูปภาพ, JPG, ภาพ, รูปถ่าย" - }, - "pdfToImage": { - "tags": "การแปลง, รูปภาพ, JPG, ภาพ, รูปถ่าย", - "title": "PDF เป็นรูปภาพ", - "header": "PDF เป็นรูปภาพ", - "selectText": "รูปแบบภาพ", - "singleOrMultiple": "ประเภทผลลัพธ์รูปภาพ", - "single": "รูปภาพใหญ่เพียงภาพเดียว", - "multi": "หลายภาพ", - "colorType": "ประเภทสี", - "color": "สี", - "grey": "ระดับสีเทา", - "blackwhite": "ขาวดำ (อาจสูญเสียข้อมูล!)", - "submit": "แปลง", - "info": "Python ไม่มีการติดตั้ง จำเป็นสำหรับการแปลง WebP", - "placeholder": "(เช่น 1,2,8 หรือ 4,7,12-16 หรือ 2n-1)" - }, - "pdfOrganiser": { - "tags": "สองหน้า, คู่ขนาน, เรียงลำดับ, เคลื่อนย้าย", - "title": "ตัวจัดระเบียบหน้า", - "header": "ตัวจัดระเบียบหน้า PDF", - "submit": "จัดเรียงหน้าใหม่", - "mode": { - "_value": "โหมด", - "1": "เรียงลำดับหน้าตามความต้องการ", - "2": "เรียงลำดับย้อนกลับ", - "3": "เรียงลำดับแบบสองหน้า", - "4": "เรียงลำดับแบบสมุด", - "5": "เรียงลำดับแบบเย็บข้าง", - "6": "แยกหน้าแบบคี่-คู่", - "7": "ลบหน้าหมายเลขแรก", - "8": "ลบหน้าหมายเลขสุดท้าย", - "9": "ลบหน้าหมายเลขแรกและสุดท้าย", - "10": "รวมหน้าแบบคี่-คู่", - "11": "Duplicate all pages" - }, - "placeholder": "(เช่น 1,3,2 หรือ 4-8,2,10-12 หรือ 2n-1)" - }, - "addImage": { - "tags": "รูปภาพ, JPG, ภาพ, รูปถ่าย", - "title": "เพิ่มรูปภาพ", - "header": "เพิ่มรูปภาพใน PDF", - "everyPage": "ทุกหน้า?", - "upload": "เพิ่มรูปภาพ", - "submit": "เพิ่มรูปภาพ" - }, - "watermark": { - "tags": "ข้อความ, ซ้ำ, ป้าย, ของคุณเอง, ลิขสิทธิ์, เครื่องหมายการค้า, รูปภาพ, JPG, ภาพ, รูปถ่าย", - "title": "เพิ่มลายน้ำ", - "header": "เพิ่มลายน้ำ", - "customColor": "สีข้อความที่กำหนดเอง", - "selectText": { - "1": "เลือก PDF เพื่อเพิ่มลายน้ำ:", - "2": "ข้อความลายน้ำ:", - "3": "ขนาดฟอนต์:", - "4": "การหมุน (0-360):", - "5": "ตัวเว้นระยะความกว้าง (ช่องว่างระหว่างลายน้ำในแนวนอน):", - "6": "ตัวเว้นระยะความสูง (ช่องว่างระหว่างลายน้ำในแนวตั้ง):", - "7": "ความทึบ (0% - 100%):", - "8": "ประเภทลายน้ำ:", - "9": "ภาพลายน้ำ:", - "10": "Convert PDF to PDF-Image" - }, - "submit": "เพิ่มลายน้ำ", - "type": { - "1": "ข้อความ", - "2": "ภาพ" - } - }, - "permissions": { - "tags": "อ่าน, เขียน, แก้ไข, พิมพ์", - "title": "เปลี่ยนสิทธิ์", - "header": "เปลี่ยนสิทธิ์", - "warning": "คำเตือน: การตั้งค่าสิทธิ์เหล่านี้เป็นการเปลี่ยนแปลงที่ไม่สามารถย้อนกลับได้ แนะนำให้ตั้งค่าพร้อมรหัสผ่านผ่านหน้าการเพิ่มรหัสผ่าน", - "selectText": { - "1": "เลือก PDF เพื่อเปลี่ยนสิทธิ์", - "2": "สิทธิ์ที่ตั้งค่า", - "3": "ป้องกันการประกอบเอกสาร", - "4": "ป้องกันการสกัดเนื้อหา", - "5": "ป้องกันการสกัดเพื่อการเข้าถึง", - "6": "ป้องกันการกรอกแบบฟอร์ม", - "7": "ป้องกันการแก้ไข", - "8": "ป้องกันการแก้ไขคำอธิบายประกอบ", - "9": "ป้องกันการพิมพ์", - "10": "ป้องกันการพิมพ์รูปแบบต่างๆ" - }, - "submit": "เปลี่ยน" - }, - "removePages": { - "tags": "ลบหน้า, ลบหน้า" - }, - "addPassword": { - "tags": "ปลอดภัย, ความปลอดภัย", - "title": "เพิ่มรหัสผ่าน", - "header": "เพิ่มรหัสผ่าน (เข้ารหัส)", - "selectText": { - "1": "เลือก PDF เพื่อเข้ารหัส", - "2": "รหัสผ่านผู้ใช้", - "3": "ความยาวคีย์การเข้ารหัส", - "4": "ค่าสูงกว่ามีความแข็งแกร่งกว่า แต่ค่าต่ำกว่าเข้ากันได้ดีกว่า", - "5": "สิทธิ์ที่ตั้งค่า (แนะนำให้ใช้พร้อมรหัสผ่านผู้ดูแล)", - "6": "ป้องกันการประกอบเอกสาร", - "7": "ป้องกันการสกัดเนื้อหา", - "8": "ป้องกันการสกัดเพื่อการเข้าถึง", - "9": "ป้องกันการกรอกแบบฟอร์ม", - "10": "ป้องกันการแก้ไข", - "11": "ป้องกันการแก้ไขคำอธิบายประกอบ", - "12": "ป้องกันการพิมพ์", - "13": "ป้องกันการพิมพ์รูปแบบต่างๆ", - "14": "รหัสผ่านผู้ดูแล", - "15": "จำกัดสิ่งที่สามารถทำได้กับเอกสารเมื่อเปิด (ไม่รองรับโดยผู้อ่านทั้งหมด)", - "16": "จำกัดการเปิดเอกสาร" - }, - "submit": "เข้ารหัส" - }, - "removePassword": { - "tags": "ปลอดภัย, ถอดรหัส, ความปลอดภัย, ลบรหัสผ่าน", - "title": "ลบรหัสผ่าน", - "header": "ลบรหัสผ่าน (ถอดรหัส)", - "selectText": { - "1": "เลือก PDF ที่ต้องการถอดรหัส", - "2": "รหัสผ่าน" - }, - "submit": "ลบ" - }, - "compressPdfs": { - "tags": "ย่อ, เล็ก, จิ๋ว" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "ชื่อ, ผู้แต่ง, วันที่, สร้าง, เวลา, ผู้เผยแพร่, ผู้ผลิต, สถิติ", - "title": "เปลี่ยนข้อมูลเมตา", - "header": "เปลี่ยนข้อมูลเมตา", - "selectText": { - "1": "โปรดแก้ไขตัวแปรที่คุณต้องการเปลี่ยน", - "2": "ลบข้อมูลเมตาทั้งหมด", - "3": "แสดงข้อมูลเมตาที่กำหนดเอง:", - "4": "ข้อมูลเมตาอื่น ๆ:", - "5": "เพิ่มรายการข้อมูลเมตาที่กำหนดเอง" - }, - "author": "ผู้แต่ง:", - "creationDate": "วันที่สร้าง (yyyy/MM/dd HH:mm:ss):", - "creator": "ผู้สร้าง:", - "keywords": "คำสำคัญ:", - "modDate": "วันที่แก้ไข (yyyy/MM/dd HH:mm:ss):", - "producer": "ผู้ผลิต:", - "subject": "หัวข้อ:", - "trapped": "ติดกับ:", - "submit": "เปลี่ยน" - }, - "fileToPDF": { - "tags": "การแปลง, รูปแบบ, เอกสาร, รูปภาพ, สไลด์, ข้อความ, การแปลง, สำนักงาน, เอกสาร, Word, Excel, PowerPoint", - "title": "ไฟล์เป็น PDF", - "header": "แปลงไฟล์ใดๆ เป็น PDF", - "credit": "บริการนี้ใช้ LibreOffice และ Unoconv สำหรับการแปลงไฟล์", - "supportedFileTypesInfo": "ประเภทไฟล์ที่รองรับ", - "supportedFileTypes": "ประเภทไฟล์ที่รองรับควรมีรายการด้านล่าง อย่างไรก็ตามสำหรับรายการรูปแบบที่รองรับทั้งหมด กรุณาดูเอกสาร LibreOffice", - "submit": "แปลงเป็น PDF" - }, - "ocr": { - "tags": "การรู้จำ, ข้อความ, รูปภาพ, การสแกน, อ่าน, ระบุ, ตรวจจับ, แก้ไขได้", - "title": "OCR / ทำความสะอาดการสแกน", - "header": "ทำความสะอาดการสแกน / OCR (การรู้จำอักขระด้วยแสง)", - "selectText": { - "1": "เลือกภาษาที่จะตรวจจับใน PDF (รายการที่แสดงคือภาษาที่ตรวจจับได้ในขณะนี้):", - "2": "สร้างไฟล์ข้อความที่มีข้อความ OCR ควบคู่ไปกับ PDF ที่ OCR แล้ว", - "3": "แก้ไขหน้าที่สแกนเอียงโดยการหมุนกลับไปยังตำแหน่งที่ถูกต้อง", - "4": "ทำความสะอาดหน้าเพื่อลดโอกาสที่ OCR จะพบข้อความในเสียงพื้นหลัง (ไม่มีการเปลี่ยนแปลงในผลลัพธ์)", - "5": "ทำความสะอาดหน้าเพื่อลดโอกาสที่ OCR จะพบข้อความในเสียงพื้นหลัง รักษาการทำความสะอาดในผลลัพธ์", - "6": "ไม่สนใจหน้าที่มีข้อความแบบโต้ตอบ OCR เฉพาะหน้าที่เป็นภาพ", - "7": "บังคับ OCR จะ OCR ทุกหน้าลบองค์ประกอบข้อความต้นฉบับทั้งหมด", - "8": "ปกติ (จะแสดงข้อผิดพลาดหาก PDF มีข้อความ)", - "9": "การตั้งค่าเพิ่มเติม", - "10": "โหมด OCR", - "11": "ลบภาพหลังจาก OCR (ลบภาพทั้งหมด, มีประโยชน์เฉพาะหากเป็นส่วนหนึ่งของขั้นตอนการแปลง)", - "12": "ประเภทการเรนเดอร์ (ขั้นสูง)" - }, - "help": "โปรดอ่านเอกสารนี้เพื่อใช้งานภาษาอื่นๆ และ/หรือใช้งานนอก docker", - "credit": "บริการนี้ใช้ qpdf และ Tesseract สำหรับ OCR", - "submit": "ประมวลผล PDF ด้วย OCR" - }, - "extractImages": { - "tags": "รูปภาพ, ภาพ, บันทึก, เก็บถาวร, zip, จับ, รับ", - "title": "แยกรูปภาพ", - "header": "แยกรูปภาพ", - "selectText": "เลือกรูปแบบภาพที่จะใช้ในการแปลงรูปภาพที่แยกได้", - "allowDuplicates": "บันทึกลายซ้ำ", - "submit": "แยก" - }, - "pdfToPDFA": { - "tags": "การจัดเก็บ, ระยะยาว, มาตรฐาน, การแปลง, การเก็บรักษา", - "title": "PDF เป็น PDF/A", - "header": "PDF เป็น PDF/A", - "credit": "บริการนี้ใช้ libreoffice สำหรับการแปลง PDF/A", - "submit": "แปลง", - "tip": "ปัจจุบันไม่ทำงานสำหรับการป้อนข้อมูลหลายรายการพร้อมกัน", - "outputFormat": "รูปแบบผลลัพธ์", - "pdfWithDigitalSignature": "PDF มีลายเซ็นดิจิทัล ซึ่งจะถูกลบในขั้นตอนถัดไป" - }, - "PDFToWord": { - "tags": "doc, docx, odt, word, การแปลง, รูปแบบ, การแปลง, สำนักงาน, microsoft, docfile", - "title": "PDF เป็น Word", - "header": "PDF เป็น Word", - "selectText": { - "1": "รูปแบบไฟล์ผลลัพธ์" - }, - "credit": "บริการนี้ใช้ LibreOffice สำหรับการแปลงไฟล์", - "submit": "แปลง" - }, - "PDFToPresentation": { - "tags": "สไลด์, โชว์, สำนักงาน, microsoft", - "title": "PDF เป็น Presentation", - "header": "PDF เป็น Presentation", - "selectText": { - "1": "รูปแบบไฟล์ผลลัพธ์" - }, - "credit": "บริการนี้ใช้ LibreOffice สำหรับการแปลงไฟล์", - "submit": "แปลง" - }, - "PDFToText": { - "tags": "รูปแบบข้อความที่มีคุณภาพ, rich text format", - "title": "PDF เป็น RTF (Text)", - "header": "PDF เป็น RTF (Text)", - "selectText": { - "1": "รูปแบบไฟล์ผลลัพธ์" - }, - "credit": "บริการนี้ใช้ LibreOffice สำหรับการแปลงไฟล์", - "submit": "แปลง" - }, - "PDFToHTML": { - "tags": "เนื้อหาเว็บ, เป็นมิตรกับเบราว์เซอร์", - "title": "PDF เป็น HTML", - "header": "PDF เป็น HTML", - "credit": "บริการนี้ใช้ pdftohtml สำหรับการแปลงไฟล์", - "submit": "แปลง" - }, - "PDFToXML": { - "tags": "การแยกข้อมูล, เนื้อหาโครงสร้าง, การทำงานร่วมกัน, การแปลง", - "title": "PDF เป็น XML", - "header": "PDF เป็น XML", - "credit": "บริการนี้ใช้ LibreOffice สำหรับการแปลงไฟล์", - "submit": "แปลง" - }, - "ScannerImageSplit": { - "tags": "แยก, ตรวจจับอัตโนมัติ, การสแกน, รูปภาพหลายรูป, จัดระเบียบ", - "selectText": { - "1": "เกณฑ์มุม:", - "2": "ตั้งค่ามุมขั้นต่ำที่จำเป็นสำหรับการหมุนภาพ (ค่าเริ่มต้น: 10)", - "3": "ความอดทน:", - "4": "กำหนดช่วงความแตกต่างของสีรอบสีพื้นหลังที่คาดคะเน (ค่าเริ่มต้น: 30)", - "5": "พื้นที่ขั้นต่ำ:", - "6": "ตั้งค่าเกณฑ์พื้นที่ขั้นต่ำสำหรับรูปภาพ (ค่าเริ่มต้น: 10000)", - "7": "พื้นที่เค้าโครงขั้นต่ำ:", - "8": "ตั้งค่าเกณฑ์พื้นที่เค้าโครงขั้นต่ำสำหรับรูปภาพ", - "9": "ขนาดขอบ:", - "10": "ตั้งค่าขนาดขอบที่เพิ่มและลบเพื่อป้องกันขอบขาวในผลลัพธ์ (ค่าเริ่มต้น: 1)" - }, - "info": "Python ไม่มีการติดตั้ง กรุณาติดตั้งเพื่อใช้งาน" - }, - "sign": { - "tags": "อนุญาต, อักษรย่อ, ลายเซ็นที่วาด, ลายเซ็นข้อความ, ลายเซ็นรูปภาพ", - "title": "เซ็นชื่อ", - "header": "เซ็นชื่อ PDF", - "upload": "อัปโหลดรูปภาพ", - "draw": "วาดลายเซ็น", - "text": "ป้อนข้อความ", - "clear": "ล้าง", - "add": "เพิ่ม", - "saved": "ลายเซ็นที่บันทึกไว้", - "save": "บันทึกลายเซ็น", - "personalSigs": "ลายเซ็นส่วนตัว", - "sharedSigs": "ลายเซ็นร่วม", - "noSavedSigs": "ไม่พบลายเซ็นที่บันทึกไว้", - "addToAll": "Add to all pages", - "delete": "Delete", - "first": "First page", - "last": "Last page", - "next": "Next page", - "previous": "Previous page", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "สถิต, ปิดการใช้งาน, ไม่โต้ตอบ, ลดจำนวน", - "title": "แบน", - "header": "แบน PDF", - "flattenOnlyForms": "แบนเฉพาะฟอร์ม", - "submit": "แบน" - }, - "repair": { - "tags": "ซ่อมแซม, กู้คืน, กู้", - "title": "ซ่อมแซม", - "header": "ซ่อมแซม PDF", - "submit": "ซ่อมแซม" - }, - "removeBlanks": { - "tags": "ทำความสะอาด, ลดจำนวน, ไม่มีเนื้อหา, จัดระเบียบ", - "title": "ลบหน้าว่าง", - "header": "ลบหน้าว่าง", - "threshold": "เกณฑ์ความขาวของพิกเซล:", - "thresholdDesc": "เกณฑ์ในการกำหนดว่าพิกเซลขาวเพียงพอจะถูกจัดเป็น 'ขาว' เท่าใด 0 = ดำ, 255 = ขาวบริสุทธิ์", - "whitePercent": "เปอร์เซ็นต์ความขาว (%):", - "whitePercentDesc": "เปอร์เซ็นต์ของหน้าที่ต้องเป็นพิกเซล 'ขาว' เพื่อจะถูกลบ", - "submit": "ลบหน้าว่าง" - }, - "removeAnnotations": { - "tags": "ความคิดเห็น, เน้นข้อความ, โน้ต, มาร์คอัพ, ลบ", - "title": "ลบคำอธิบายประกอบ", - "header": "ลบคำอธิบายประกอบ", - "submit": "ลบ" - }, - "compare": { - "tags": "แยกแยะ, เปรียบเทียบ, การเปลี่ยนแปลง, การวิเคราะห์", - "title": "เปรียบเทียบ", - "header": "เปรียบเทียบ PDF", - "highlightColor": { - "1": "สีเน้น 1:", - "2": "สีเน้น 2:" - }, - "document": { - "1": "เอกสาร 1", - "2": "เอกสาร 2" - }, - "submit": "เปรียบเทียบ", - "complex": { - "message": "หนึ่งหรือทั้งสองเอกสารที่ให้มายอมเป็นไฟล์ใหญ่ ความถูกต้องของการเปรียบเทียบอาจลดลง" - }, - "large": { - "file": { - "message": "หนึ่งหรือทั้งสองเอกสารที่ให้มามีขนาดใหญ่มาก ไม่สามารถประมวลผลได้" - } - }, - "no": { - "text": { - "message": "หนึ่งหรือทั้งสองเอกสาร PDF ที่เลือกไม่มีเนื้อหาข้อความ กรุณาเลือกเอกสาร PDF ที่มีข้อความสำหรับการเปรียบเทียบ" - } - } - }, - "certSign": { - "tags": "ยืนยัน, PEM, P12, เป็นทางการ, เข้ารหัส", - "title": "การเซ็นชื่อด้วยใบรับรอง", - "header": "เซ็นชื่อ PDF ด้วยใบรับรองของคุณ (กำลังดำเนินการ)", - "selectPDF": "เลือกไฟล์ PDF สำหรับการเซ็น:", - "jksNote": "หมายเหตุ: หากประเภทใบรับรองของคุณไม่อยู่ในรายการด้านล่าง กรุณาแปลงเป็นไฟล์ Java Keystore (.jks) โดยใช้เครื่องมือ keytool จากบรรทัดคำสั่ง จากนั้นเลือกตัวเลือกไฟล์ .jks ด้านล่าง", - "selectKey": "เลือกไฟล์คีย์ส่วนตัวของคุณ (รูปแบบ PKCS#8, อาจเป็น .pem หรือ .der):", - "selectCert": "เลือกไฟล์ใบรับรองของคุณ (รูปแบบ X.509, อาจเป็น .pem หรือ .der):", - "selectP12": "เลือกไฟล์ PKCS#12 Keystore ของคุณ (.p12 หรือ .pfx) (ไม่บังคับ หากมี ควรมีคีย์ส่วนตัวและใบรับรองของคุณ):", - "selectJKS": "เลือกไฟล์ Java Keystore ของคุณ (.jks หรือ .keystore):", - "certType": "ประเภทใบรับรอง", - "password": "ใส่รหัสผ่าน Keystore หรือคีย์ส่วนตัวของคุณ (ถ้ามี):", - "showSig": "แสดงลายเซ็น", - "reason": "เหตุผล", - "location": "ตำแหน่ง", - "name": "ชื่อ", - "showLogo": "แสดงโลโก้", - "submit": "เซ็นชื่อ PDF" - }, - "removeCertSign": { - "tags": "ยืนยัน, PEM, P12, เป็นทางการ, ถอดรหัส", - "title": "ลบลายเซ็นใบรับรอง", - "header": "ลบลายเซ็นดิจิทัลจาก PDF", - "selectPDF": "เลือกไฟล์ PDF:", - "submit": "ลบลายเซ็น" - }, - "pageLayout": { - "tags": "รวม, ประกอบ, มุมมองเดียว, จัดระเบียบ", - "title": "เลย์เอาต์หลายหน้า", - "header": "เลย์เอาต์หลายหน้า", - "pagesPerSheet": "จำนวนหน้าต่อแผ่น:", - "addBorder": "เพิ่มขอบ", - "submit": "ส่ง" - }, - "scalePages": { - "tags": "ปรับขนาด, แก้ไข, มิติ, ปรับ", - "title": "ปรับสเกลหน้า", - "header": "ปรับสเกลหน้า", - "pageSize": "ขนาดหน้าของเอกสาร", - "keepPageSize": "ขนาดต้นฉบับ", - "scaleFactor": "ระดับการซูม (ครอบตัด) ของหน้า", - "submit": "ส่ง" - }, - "add-page-numbers": { - "tags": "หน้า, เลขหน้า, จัดระเบียบ, ดัชนี" - }, - "auto-rename": { - "tags": "ตรวจจับอัตโนมัติ, ตั้งชื่อใหม่, จัดระเบียบ, ป้าย", - "title": "เปลี่ยนชื่ออัตโนมัติ", - "header": "เปลี่ยนชื่อ PDF อัตโนมัติ", - "submit": "เปลี่ยนชื่ออัตโนมัติ" - }, - "adjust-contrast": { - "tags": "ปรับสี, จูน, แก้ไข, ปรับปรุง" - }, - "crop": { - "tags": "ครอบตัด, ลดขนาด, แก้ไข, รูปทรง", - "title": "ครอบตัด", - "header": "ครอบตัด PDF", - "submit": "ส่ง" - }, - "autoSplitPDF": { - "tags": "แยกโดย QR, แยก, ส่วนสแกน, จัดระเบียบ", - "title": "แยกหน้าอัตโนมัติ", - "header": "แยก PDF อัตโนมัติ", - "description": "พิมพ์ แทรก สแกน อัปโหลด และให้เราจัดการแยกเอกสารของคุณโดยอัตโนมัติ ไม่ต้องทำงานแยกแยะด้วยตนเอง", - "selectText": { - "1": "พิมพ์แผ่นแยกด้านล่าง (ขาวดำก็ได้)", - "2": "สแกนเอกสารทั้งหมดพร้อมแทรกแผ่นแยกระหว่างเอกสาร", - "3": "อัปโหลดไฟล์ PDF ที่สแกนขนาดใหญ่เดียวและปล่อยให้ Stirling PDF จัดการส่วนที่เหลือ", - "4": "หน้ากั้นจะถูกตรวจจับและลบโดยอัตโนมัติ รับประกันเอกสารสุดท้ายที่เรียบร้อย" - }, - "formPrompt": "ส่ง PDF ที่มีแผ่นแยก Stirling-PDF:", - "duplexMode": "โหมด Duplex (การสแกนหน้าและหลัง)", - "dividerDownload2": "ดาวน์โหลด 'Auto Splitter Divider (with instructions).pdf'", - "submit": "ส่ง" - }, - "sanitizePdf": { - "tags": "ทำความสะอาด, ปลอดภัย, ปลอดภัย, ลบภัยคุกคาม" - }, - "URLToPDF": { - "tags": "จับเว็บ, บันทึกหน้า, เว็บเป็นเอกสาร, จัดเก็บ", - "title": "URL เป็น PDF", - "header": "URL เป็น PDF", - "submit": "แปลง", - "credit": "ใช้ WeasyPrint" - }, - "HTMLToPDF": { - "tags": "มาร์กอัป, เนื้อหาเว็บ, การแปลง, การแปลง", - "title": "HTML เป็น PDF", - "header": "HTML เป็น PDF", - "help": "ยอมรับไฟล์ HTML และ ZIP ที่มี html/css/รูปภาพ ฯลฯ ที่จำเป็น", - "submit": "แปลง", - "credit": "ใช้ WeasyPrint", - "zoom": "ระดับการซูมสำหรับการแสดงเว็บไซต์", - "pageWidth": "ความกว้างของหน้าเป็นเซนติเมตร (เว้นว่างเพื่อใช้ค่าเริ่มต้น)", - "pageHeight": "ความสูงของหน้าเป็นเซนติเมตร (เว้นว่างเพื่อใช้ค่าเริ่มต้น)", - "marginTop": "ขอบบนของหน้าเป็นมิลลิเมตร (เว้นว่างเพื่อใช้ค่าเริ่มต้น)", - "marginBottom": "ขอบล่างของหน้าเป็นมิลลิเมตร (เว้นว่างเพื่อใช้ค่าเริ่มต้น)", - "marginLeft": "ขอบซ้ายของหน้าเป็นมิลลิเมตร (เว้นว่างเพื่อใช้ค่าเริ่มต้น)", - "marginRight": "ขอบขวาของหน้าเป็นมิลลิเมตร (เว้นว่างเพื่อใช้ค่าเริ่มต้น)", - "printBackground": "แสดงพื้นหลังของเว็บไซต์", - "defaultHeader": "เปิดใช้งานหัวเรื่องเริ่มต้น (ชื่อและหมายเลขหน้า)", - "cssMediaType": "เปลี่ยนประเภทสื่อ CSS ของหน้า", - "none": "ไม่มี", - "print": "พิมพ์", - "screen": "หน้าจอ" - }, - "MarkdownToPDF": { - "tags": "มาร์กอัป, เนื้อหาเว็บ, การแปลง, การแปลง", - "title": "Markdown เป็น PDF", - "header": "Markdown เป็น PDF", - "submit": "แปลง", - "help": "กำลังดำเนินการ", - "credit": "ใช้ WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "ข้อมูล, สถิติ, สถิติ", - "title": "รับข้อมูลเกี่ยวกับ PDF", - "header": "รับข้อมูลเกี่ยวกับ PDF", - "submit": "รับข้อมูล", - "downloadJson": "ดาวน์โหลด JSON" - }, - "extractPage": { - "tags": "แยก" - }, - "PdfToSinglePage": { - "tags": "หน้าเดียว" - }, - "showJS": { - "tags": "JS", - "title": "แสดง Javascript", - "header": "แสดง Javascript", - "downloadJS": "ดาวน์โหลด Javascript", - "submit": "แสดง" - }, - "autoRedact": { - "tags": "ซ่อน, ซ่อนข้อความ, ซ่อนด้วยสีดำ", - "title": "ซ่อนข้อมูลอัตโนมัติ", - "header": "ซ่อนข้อมูลอัตโนมัติ", - "colorLabel": "สี", - "textsToRedactLabel": "ข้อความที่จะซ่อน (แยกด้วยบรรทัด)", - "textsToRedactPlaceholder": "เช่น \\nConfidential \\nTop-Secret", - "useRegexLabel": "ใช้ Regex", - "wholeWordSearchLabel": "ค้นหาทั้งคำ", - "customPaddingLabel": "การเติมที่กำหนดเอง", - "convertPDFToImageLabel": "แปลง PDF เป็นภาพ PDF (ใช้เพื่อลบข้อความที่อยู่ด้านหลังกล่อง)", - "submitButton": "ส่ง" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV, การแยกตาราง, แยก, การแปลง" - }, - "autoSizeSplitPDF": { - "tags": "pdf, แยก, เอกสาร, การจัดระเบียบ" - }, - "overlay-pdfs": { - "tags": "ซ้อนทับ", - "header": "ซ้อนทับไฟล์ PDF", - "baseFile": { - "label": "เลือกไฟล์ PDF พื้นฐาน" - }, - "overlayFiles": { - "label": "เลือกไฟล์ PDF ซ้อนทับ" - }, - "mode": { - "label": "เลือกโหมดซ้อนทับ", - "sequential": "ซ้อนทับตามลำดับ", - "interleaved": "ซ้อนทับแบบสลับ", - "fixedRepeat": "ซ้อนทับแบบวนซ้ำ" - }, - "counts": { - "label": "จำนวนการซ้อนทับ (สำหรับโหมดวนซ้ำ)", - "placeholder": "ป้อนจำนวนแยกด้วยเครื่องหมายจุลภาค (เช่น 2,3,1)" - }, - "position": { - "label": "เลือกตำแหน่งซ้อนทับ", - "foreground": "พื้นหน้า", - "background": "พื้นหลัง" - }, - "submit": "ส่ง" - }, - "split-by-sections": { - "tags": "แยกส่วน, แบ่ง, ปรับแต่ง", - "title": "แยก PDF ตามส่วน", - "header": "แยก PDF เป็นส่วน", - "horizontal": { - "label": "การแบ่งแนวนอน", - "placeholder": "ป้อนจำนวนการแบ่งแนวนอน" - }, - "vertical": { - "label": "การแบ่งแนวตั้ง", - "placeholder": "ป้อนจำนวนการแบ่งแนวตั้ง" - }, - "submit": "แยก PDF", - "merge": "รวมเป็น PDF เดียว" - }, - "AddStampRequest": { - "tags": "ตราประทับ, เพิ่มรูปภาพ, รูปภาพกึ่งกลาง, ลายน้ำ, PDF, ฝัง, ปรับแต่ง", - "header": "ตราประทับ PDF", - "title": "ตราประทับ PDF", - "stampType": "ประเภทตราประทับ", - "stampText": "ข้อความตราประทับ", - "stampImage": "รูปภาพตราประทับ", - "alphabet": "ตัวอักษร", - "fontSize": "ขนาดฟอนต์/รูปภาพ", - "rotation": "การหมุน", - "opacity": "ความทึบ", - "position": "ตำแหน่ง", - "overrideX": "แทนที่พิกัด X", - "overrideY": "แทนที่พิกัด Y", - "customMargin": "ขอบที่กำหนดเอง", - "customColor": "สีข้อความที่กำหนดเอง", - "submit": "ส่ง" - }, - "removeImagePdf": { - "tags": "Remove Image,Page operations,Back end,server side" - }, - "splitPdfByChapters": { - "tags": "split,chapters,bookmarks,organize" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "Validate PDF Signatures", - "header": "Validate Digital Signatures", - "selectPDF": "Select signed PDF file", - "submit": "Validate Signatures", - "results": "Validation Results", - "status": { - "_value": "Status", - "valid": "Valid", - "invalid": "Invalid" - }, - "signer": "Signer", - "date": "Date", - "reason": "Reason", - "location": "Location", - "noSignatures": "No digital signatures found in this document", - "chain": { - "invalid": "Certificate chain validation failed - cannot verify signer's identity" - }, - "trust": { - "invalid": "Certificate not in trust store - source cannot be verified" - }, - "cert": { - "expired": "Certificate has expired", - "revoked": "Certificate has been revoked", - "info": "Certificate Details", - "issuer": "Issuer", - "subject": "Subject", - "serialNumber": "Serial Number", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "algorithm": "Algorithm", - "keySize": "Key Size", - "version": "Version", - "keyUsage": "Key Usage", - "selfSigned": "Self-Signed", - "bits": "bits" - }, - "signature": { - "info": "Signature Information", - "_value": "Signature", - "mathValid": "Signature is mathematically valid BUT:" - }, - "selectCustomCert": "Custom Certificate File X.509 (Optional)" - }, - "replace-color": { - "title": "Replace-Invert-Color", - "header": "Replace-Invert Color PDF", - "selectText": { - "1": "Replace or Invert color Options", - "2": "Default(Default high contrast colors)", - "3": "Custom(Customized colors)", - "4": "Full-Invert(Invert all colors)", - "5": "High contrast color options", - "6": "white text on black background", - "7": "Black text on white background", - "8": "Yellow text on black background", - "9": "Green text on black background", - "10": "Choose text Color", - "11": "Choose background Color" - }, - "submit": "Replace" - }, - "replaceColorPdf": { - "tags": "Replace Color,Page operations,Back end,server side" - }, - "login": { - "title": "ลงชื่อเข้าใช้", - "header": "ลงชื่อเข้าใช้", - "signin": "ลงชื่อเข้าใช้", - "rememberme": "จำฉันไว้", - "invalid": "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง", - "locked": "บัญชีของคุณถูกล็อค", - "signinTitle": "กรุณาลงชื่อเข้าใช้", - "ssoSignIn": "เข้าสู่ระบบด้วย Single Sign-on", - "oAuth2AutoCreateDisabled": "การสร้างผู้ใช้ OAuth2 อัตโนมัติถูกปิดใช้งาน", - "oAuth2AdminBlockedUser": "Registration or logging in of non-registered users is currently blocked. Please contact the administrator.", - "oauth2RequestNotFound": "ไม่พบคำขอการอนุญาต", - "oauth2InvalidUserInfoResponse": "การตอบกลับข้อมูลผู้ใช้ไม่ถูกต้อง", - "oauth2invalidRequest": "คำขอไม่ถูกต้อง", - "oauth2AccessDenied": "การเข้าถึงถูกปฏิเสธ", - "oauth2InvalidTokenResponse": "การตอบกลับโทเค็นไม่ถูกต้อง", - "oauth2InvalidIdToken": "โทเค็น Id ไม่ถูกต้อง", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "ผู้ใช้งานถูกระงับการใช้งาน ไม่สามารถเข้าสู่ระบบด้วยชื่อผู้ใช้นี้ได้ กรุณาติดต่อผู้ดูแลระบบ", - "alreadyLoggedIn": "คุณได้เข้าสู่ระบบใน", - "alreadyLoggedIn2": "อุปกรณ์แล้ว กรุณาออกจากระบบจากอุปกรณ์ที่ใช้งานอยู่แล้ว จากนั้นลองใหม่อีกครั้ง", - "toManySessions": "คุณมีการเข้าสู่ระบบพร้อมกันเกินกว่ากำหนด", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF เป็นหน้าขนาดใหญ่เพียงหน้าเดียว", - "header": "PDF เป็นหน้าขนาดใหญ่เพียงหน้าเดียว", - "submit": "แปลงเป็นหน้าขนาดใหญ่เพียงหน้าเดียว" - }, - "pageExtracter": { - "title": "แยกหน้า", - "header": "แยกหน้า", - "submit": "แยก", - "placeholder": "(เช่น 1,2,8 หรือ 4,7,12-16 หรือ 2n-1)" - }, - "sanitizePDF": { - "title": "ทำความสะอาด PDF", - "header": "ทำความสะอาดไฟล์ PDF", - "selectText": { - "1": "ลบการกระทำ JavaScript", - "2": "ลบไฟล์ฝังตัว", - "3": "Remove XMP metadata", - "4": "ลบลิงก์", - "5": "ลบฟอนต์", - "6": "Remove Document Info Metadata" - }, - "submit": "ทำความสะอาด PDF" - }, - "adjustContrast": { - "title": "ปรับคอนทราสต์", - "header": "ปรับคอนทราสต์", - "contrast": "คอนทราสต์:", - "brightness": "ความสว่าง:", - "saturation": "ความอิ่มตัว:", - "download": "ดาวน์โหลด" - }, - "compress": { - "title": "บีบอัด", - "header": "บีบอัด PDF", - "credit": "บริการนี้ใช้ qpdf สำหรับการบีบอัด/การเพิ่มประสิทธิภาพ PDF", - "grayscale": { - "label": "ใช้ระดับสีเทาสำหรับการบีบอัด" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "ระดับการเพิ่มประสิทธิภาพ:", - "4": "โหมดอัตโนมัติ - ปรับคุณภาพอัตโนมัติเพื่อให้ PDF ตรงกับขนาดที่ต้องการ", - "5": "ขนาด PDF ที่คาดหวัง (เช่น 25MB, 10.8MB, 25KB)" - }, - "submit": "บีบอัด" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "This feature is also available in our multi-tool page. Check it out for enhanced page-by-page UI and additional features!" - }, - "pageRemover": { - "title": "ตัวลบหน้า", - "header": "ตัวลบหน้า PDF", - "pagesToDelete": "หน้าที่จะลบ (ป้อนหมายเลขหน้าแยกด้วยเครื่องหมายจุลภาค):", - "submit": "ลบหน้า", - "placeholder": "(เช่น 1,2,6 หรือ 1-10,15-30)" - }, - "imageToPDF": { - "title": "รูปภาพเป็น PDF", - "header": "รูปภาพเป็น PDF", - "submit": "แปลง", - "selectLabel": "ตัวเลือกการใส่ภาพ", - "fillPage": "เติมหน้า", - "fitDocumentToImage": "ปรับหน้าให้พอดีกับภาพ", - "maintainAspectRatio": "รักษาอัตราส่วนกว้างยาว", - "selectText": { - "2": "หมุน PDF อัตโนมัติ", - "3": "ตรรกะหลายไฟล์ (เปิดใช้งานเฉพาะเมื่อทำงานกับหลายภาพ)", - "4": "รวมเป็น PDF เดียว", - "5": "แปลงเป็น PDF แยก" - } - }, - "PDFToCSV": { - "title": "PDF เป็น CSV", - "header": "PDF เป็น CSV", - "prompt": "เลือกหน้าที่ต้องการแยกตาราง", - "submit": "แยก" - }, - "split-by-size-or-count": { - "title": "แยก PDF ตามขนาดหรือจำนวน", - "header": "แยก PDF ตามขนาดหรือจำนวน", - "type": { - "label": "เลือกประเภทการแยก", - "size": "ตามขนาด", - "pageCount": "ตามจำนวนหน้า", - "docCount": "ตามจำนวนเอกสาร" - }, - "value": { - "label": "ป้อนค่า", - "placeholder": "ป้อนขนาด (เช่น 2MB หรือ 3KB) หรือจำนวน (เช่น 5)" - }, - "submit": "ส่ง" - }, - "printFile": { - "title": "พิมพ์ไฟล์", - "header": "พิมพ์ไฟล์ไปยังเครื่องพิมพ์", - "selectText": { - "1": "เลือกไฟล์ที่จะพิมพ์", - "2": "ป้อนชื่อเครื่องพิมพ์" - }, - "submit": "พิมพ์" - }, - "licenses": { - "nav": "ใบอนุญาต", - "title": "ใบอนุญาตบุคคลที่สาม", - "header": "ใบอนุญาตบุคคลที่สาม", - "module": "โมดูล", - "version": "เวอร์ชัน", - "license": "ใบอนุญาต" - }, - "survey": { - "nav": "สำรวจ", - "title": "สำรวจ Stirling-PDF", - "description": "Stirling-PDF ไม่มีการติดตาม ดังนั้นเราต้องการฟังความคิดเห็นจากผู้ใช้เพื่อปรับปรุง Stirling-PDF!", - "changes": "Stirling-PDF ได้มีการเปลี่ยนแปลงตั้งแต่การสำรวจครั้งล่าสุด! กรุณาตรวจสอบบล็อกของเราที่นี้เพื่อรับข้อมูลเพิ่มเติม:", - "changes2": "ด้วยการเปลี่ยนแปลงเหล่านี้เราได้รับการสนับสนุนทางธุรกิจและการเงินจากผู้ประกอบการ", - "please": "กรุณาพิจารณาการสำรวจของเรา!", - "disabled": "(ป๊อปอัปการสำรวจจะถูกปิดใช้งานในการอัปเดตต่อไปนี้ แต่สามารถใช้ได้ที่ส่วนท้ายของหน้า)", - "button": "เริ่มสำรวจ", - "dontShowAgain": "ไม่ต้องแสดงอีก", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "ลบภาพ", - "header": "ลบภาพ", - "removeImage": "ลบภาพ", - "submit": "ยืนยันการลบภาพ" - }, - "splitByChapters": { - "title": "แบ่งไฟล์ PDF ตามหมวดหมู่", - "header": "แบ่งไฟล์ PDF ตามหมวดหมู่", - "bookmarkLevel": "ระดับบุคคลที่ได้รับเลือก", - "includeMetadata": "รวมข้อมูลเสริม", - "allowDuplicates": "อนุญาตให้มีการซ้ำ", - "desc": { - "1": "เครื่องมือนี้จะแบ่งไฟล์ PDF ออกเป็นหลายไฟล์ PDF ตามโครงสร้างหมวดหมู่ของไฟล์นั้นๆ", - "2": "ระดับบุคคลที่ได้รับเลือก: เลือกระดับบุคคลที่ได้รับเลือกที่จะใช้ในการแบ่ง (0 สำหรับระดับต้น, 1 สำหรับระดับที่สอง เป็นต้น)", - "3": "รวมข้อมูลเสริม: หากถูกเลือก ข้อมูลเสริมของไฟล์ PDF ที่เดิมจะถูกรวมอยู่ในแต่ละไฟล์ที่แบ่งออก", - "4": "อนุญาตให้มีการซ้ำ: หากถูกเลือก จะทำให้สามารถสร้างไฟล์ PDF แยกออกมาจากหน้าเดียวกันได้หลายรายการ" - }, - "submit": "แบ่งไฟล์ PDF" - }, - "fileChooser": { - "click": "Click", - "or": "or", - "dragAndDrop": "Drag & Drop", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "Drag & Drop file(s) here", - "extractPDF": "Extracting..." - }, - "releases": { - "footer": "Releases", - "title": "Release Notes", - "header": "Release Notes", - "current": { - "version": "Current Release" - }, - "note": "Release notes are only available in English" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/tr-TR/translation.json b/frontend/dist/locales/tr-TR/translation.json deleted file mode 100644 index 1700a35f7..000000000 --- a/frontend/dist/locales/tr-TR/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Font Büyüklüğü", - "fontName": "Font İsmi", - "title": "Sayfa Numaraları Ekle", - "header": "Sayfa Numaraları Ekle", - "selectText": { - "1": "PDF dosyasını seçin:", - "2": "Kenar Boyutu", - "3": "Pozisyon", - "4": "Başlangıç Numarası", - "5": "Numaralandırılacak Sayfalar", - "6": "Özel Metin" - }, - "customTextDesc": "Özel Metin", - "numberPagesDesc": "Hangi sayfaların numaralandırılacağını, varsayılan 'all', ayrıca 1-5 veya 2,5,9 vb. kabul eder", - "customNumberDesc": "Varsayılan {n}, ayrıca 'Sayfa {n} / {total}', 'Metin-{n}', '{filename}-{n} kabul eder", - "submit": "Sayfa Numaraları Ekle" - }, - "pdfPrompt": "PDF(leri) seçin", - "multiPdfPrompt": "PDFleri seçin (2+)", - "multiPdfDropPrompt": "Tüm gerekli PDF'leri seçin (ya da sürükleyip bırakın)", - "imgPrompt": "Resim(leri) seçin", - "genericSubmit": "Gönder", - "uploadLimit": "Maksimum dosya boyutu:", - "uploadLimitExceededSingular": "çok büyük. İzin verilen maksimum boyut:", - "uploadLimitExceededPlural": "çok büyük. İzin verilen maksimum boyut:", - "processTimeWarning": "Uyarı: Bu işlem, dosya boyutuna bağlı olarak bir dakikaya kadar sürebilir.", - "pageOrderPrompt": "Özel Sayfa Sırası (Virgülle ayrılmış sayfa numaraları veya 2n+1 gibi bir fonksiyon girin) :", - "pageSelectionPrompt": "Özel Sayfa Seçimi (1,5,6 sayfa numaralarının virgülle ayrılmış bir listesini veya 2n+1 gibi bir fonksiyon girin) :", - "goToPage": "Sayfaya Git", - "true": "Doğru", - "false": "Yanlış", - "unknown": "Bilinmeyen", - "save": "Kaydet", - "saveToBrowser": "Tarayıcıya Kaydet", - "close": "Kapat", - "filesSelected": "dosya seçildi", - "noFavourites": "Favori eklenmedi", - "downloadComplete": "İndirme Tamamlandı", - "bored": "Sıkıldınız mı?", - "alphabet": "Alfabe", - "downloadPdf": "PDF İndir", - "text": "Metin", - "font": "Yazı tipi", - "selectFillter": "-- Seçiniz --", - "pageNum": "Sayfa Numarası", - "sizes": { - "small": "Küçük", - "medium": "Orta", - "large": "Büyük", - "x-large": "Çok Büyük" - }, - "error": { - "pdfPassword": "PDF belgesi şifreli ve şifre ya sağlanmadı ya da yanlış.", - "_value": "Hata", - "sorry": "Sorun için özür dileriz!", - "needHelp": "Yardıma mı ihtiyacınız var / Bir sorun mu buldunuz?", - "contactTip": "Hala sorun yaşıyorsanız, yardım için bize ulaşmaktan çekinmeyin. GitHub sayfamızdan bir bilet gönderebilir veya Discord üzerinden bizimle iletişime geçebilirsiniz:", - "404": { - "head": "404 - Sayfa Bulunamadı | Tüh, kodda takıldık!", - "1": "Aradığınız sayfayı bulamıyoruz.", - "2": "Bir şeyler ters gitti" - }, - "github": "GitHub üzerinden bir hata bildirin", - "showStack": "Yığın İzlemesini Göster", - "copyStack": "Yığın İzini Kopyala", - "githubSubmit": "GitHub - Hata gönderin", - "discordSubmit": "Discord - Destek gönderisi gönderin" - }, - "delete": "Sil", - "username": "Kullanıcı Adı", - "password": "Parola", - "welcome": "Hoş geldiniz", - "property": "Özellik", - "black": "Siyah", - "white": "Beyaz", - "red": "Kırmızı", - "green": "Yeşil", - "blue": "Mavi", - "custom": "Özel", - "WorkInProgess": "Çalışmalar devam ediyor, Çalışmayabilir veya hatalı olabilir, Lütfen herhangi bir sorunu bildirin!", - "poweredBy": "Tarafından desteklenmektedir", - "yes": "Evet", - "no": "Hayır", - "changedCredsMessage": "Bilgiler değiştirildi!", - "notAuthenticatedMessage": "Kullanıcı doğrulanmadı.", - "userNotFoundMessage": "Kullanıcı bulunamadı.", - "incorrectPasswordMessage": "Mevcut şifre yanlış.", - "usernameExistsMessage": "Yeni Kullanıcı Adı zaten var.", - "invalidUsernameMessage": "Geçersiz kullanıcı adı, kullanıcı adı yalnızca harf, rakam ve aşağıdaki özel karakterleri @._+- içerebilir veya geçerli bir e-posta adresi olmalıdır.", - "invalidPasswordMessage": "Şifre boş olmamalı ve başında veya sonunda boşluk bulunmamalıdır.", - "confirmPasswordErrorMessage": "Yeni Şifre ve Yeni Şifreyi Onayla eşleşmelidir.", - "deleteCurrentUserMessage": "Şu anda oturum açmış olan kullanıcı silinemiyor.", - "deleteUsernameExistsMessage": "Kullanıcı adı mevcut değil ve silinemez.", - "downgradeCurrentUserMessage": "Mevcut kullanıcının rolü düşürülemiyor", - "disabledCurrentUserMessage": "Mevcut kullanıcı devre dışı bırakılamaz", - "downgradeCurrentUserLongMessage": "Mevcut kullanıcının rolü düşürülemiyor. Bu nedenle, mevcut kullanıcı gösterilmeyecektir.", - "userAlreadyExistsOAuthMessage": "Kullanıcı zaten bir OAuth2 kullanıcısı olarak mevcut.", - "userAlreadyExistsWebMessage": "Kullanıcı zaten bir web kullanıcısı olarak mevcut.", - "oops": "Tüh!", - "help": "Yardım", - "goHomepage": "Anasayfa'ya git", - "joinDiscord": "Discord sunucumuza katılın", - "seeDockerHub": "Docker Hub'a bakın", - "visitGithub": "Github Deposunu Ziyaret Edin", - "donate": "Bağış Yapın", - "color": "Renk", - "sponsor": "Bağış", - "info": "Bilgi", - "pro": "Pro", - "page": "Sayfa", - "pages": "Sayfalar", - "loading": "Yükleniyor...", - "addToDoc": "Dökümana Ekle", - "reset": "Sıfırla", - "apply": "Uygula", - "noFileSelected": "Hiçbir dosya seçilmedi. Lütfen bir dosya yükleyin.", - "legal": { - "privacy": "Gizlilik Politikası", - "terms": "Şartlar ve koşullar", - "accessibility": "Erişilebilirlik", - "cookie": "Çerez Politikası", - "impressum": "Hakkımızda", - "showCookieBanner": "Çerez Tercihleri" - }, - "pipeline": { - "header": "Çoklu İşlemler Menü (Beta)", - "uploadButton": "Yükle", - "configureButton": "Yapılandır", - "defaultOption": "Özel", - "submitButton": "Gönder", - "help": "Çoklu İşlemler Yardım", - "scanHelp": "Klasör Tarama Yardımı", - "deletePrompt": "Çoklu işlemleri silmek istediğinizden emin misiniz", - "tags": "otomatikleştir,sıralı,betikli,toplu-işlem", - "title": "Çoklu İşlemler" - }, - "pipelineOptions": { - "header": "Çoklu İşlemler Yapılandırma", - "pipelineNameLabel": "Çoklu İşlemler İsim", - "saveSettings": "Ayarları Kaydet", - "pipelineNamePrompt": "Buraya isim girin", - "selectOperation": "İşlem Seçin", - "addOperationButton": "İşlem ekle", - "pipelineHeader": "Çoklu İşlemler:", - "saveButton": "İndir", - "validateButton": "Doğrula" - }, - "enterpriseEdition": { - "button": "Pro Sürümüne Yükselt", - "warning": "Bu özellik yalnızca Pro kullanıcılarına sunulmaktadır.", - "yamlAdvert": "Stirling PDF Pro, YAML yapılandırma dosyalarını ve diğer SSO özelliklerini destekler.", - "ssoAdvert": "Daha fazla kullanıcı yönetimi özelliği mi arıyorsunuz? Stirling PDF Pro'ya göz atın" - }, - "analytics": { - "title": "Stirling PDF’i daha iyi hale getirmek ister misiniz?", - "paragraph1": "Stirling PDF, ürünü geliştirmemize yardımcı olmak için isteğe bağlı analizleri içerir. Kişisel bilgileri veya dosya içeriklerini asla takip etmiyoruz.", - "paragraph2": "Stirling PDF’in büyümesine destek olmak ve kullanıcılarımızı daha iyi anlayabilmemiz için analizleri etkinleştirmeyi düşünebilirsiniz.", - "enable": "Analizi Etkinleştir", - "disable": "Analizi Devre Dışı Bırak", - "settings": "Analiz ayarlarını config/settings.yml dosyasından değiştirebilirsiniz" - }, - "navbar": { - "favorite": "Favoriler", - "recent": "New and recently updated", - "darkmode": "Karanlık Mod", - "language": "Diller", - "settings": "Ayarlar", - "allTools": "Araçlar", - "multiTool": "Çoklu Araçlar", - "search": "Search", - "sections": { - "organize": "Düzenle", - "convertTo": "PDF'ye dönüştür", - "convertFrom": "PDF'den dönüştür", - "security": "Oturum ve Güvenlik", - "advance": "Gelişmiş", - "edit": "Görüntüle ve Düzenle", - "popular": "Popular" - } - }, - "settings": { - "title": "Ayarlar", - "update": "Güncelleme mevcut", - "updateAvailable": "{0} mevcut kurulu sürümdür. Yeni bir sürüm ({1}) mevcuttur.", - "appVersion": "Uygulama Sürümü:", - "downloadOption": { - "title": "İndirme seçeneği seçin (Zip olmayan tek dosya indirmeler için):", - "1": "Aynı pencerede aç", - "2": "Yeni pencerede aç", - "3": "Dosyayı indir" - }, - "zipThreshold": "İndirilen dosya sayısı şu değeri aştığında zip dosyası oluştur:", - "signOut": "Çıkış Yap", - "accountSettings": "Hesap Ayarları", - "bored": { - "help": "Paskalya yumurtası oyunu etkinleştirir" - }, - "cacheInputs": { - "name": "Form girdilerini kaydet", - "help": "Gelecekteki çalıştırmalar için önceden kullanılan girdileri saklamayı etkinleştirin" - } - }, - "changeCreds": { - "title": "Giriş Bilgilerini Değiştir", - "header": "Hesap Detaylarınızı Güncelleyin", - "changePassword": "Varsayılan giriş bilgilerini kullanıyorsunuz. Lütfen yeni bir şifre girin.", - "newUsername": "Yeni Kullanıcı Adı", - "oldPassword": "Mevcut Şifre", - "newPassword": "Yeni Şifre", - "confirmNewPassword": "Yeni Şifreyi Onayla", - "submit": "Değişiklikleri Gönder" - }, - "account": { - "title": "Hesap Ayarları", - "accountSettings": "Hesap Ayarları", - "adminSettings": "Yönetici Ayarları - Kullanıcıları Görüntüle ve Ekle", - "userControlSettings": "Kullanıcı Kontrol Ayarları", - "changeUsername": "Kullanıcı Adını Değiştir", - "newUsername": "Yeni kullanıcı adı", - "password": "Onay Şifresi", - "oldPassword": "Eski Şifre", - "newPassword": "Yeni Şifre", - "changePassword": "Şifreyi Değiştir", - "confirmNewPassword": "Yeni Şifreyi Onayla", - "signOut": "Çıkış Yap", - "yourApiKey": "API Anahtarınız", - "syncTitle": "Hesap Ayarları ile Tarayıcı Ayarlarını Eşitle", - "settingsCompare": "Ayar Karşılaştırması:", - "property": "Özellik", - "webBrowserSettings": "Web Tarayıcı Ayarı", - "syncToBrowser": "Hesaptan Tarayıcıya Eşitle", - "syncToAccount": "Tarayıcıdan Hesaba Eşitle" - }, - "adminUserSettings": { - "title": "Kullanıcı Kontrol Ayarları", - "header": "Yönetici Kullanıcı Kontrol Ayarları", - "admin": "Yönetici", - "user": "Kullanıcı", - "addUser": "Yeni Kullanıcı Ekle", - "deleteUser": "Kullanıcı Sil", - "confirmDeleteUser": "Kullanıcı silinsin mi?", - "confirmChangeUserStatus": "Kullanıcı devre dışı bırakılmalı/aktifleştirilmeli mi ?", - "usernameInfo": "Kullanıcı adı yalnızca harf, rakam ve aşağıdaki özel karakterleri @._+- içerebilir veya geçerli bir e-posta adresi olmalıdır.", - "roles": "Roller", - "role": "Rol", - "actions": "Eylemler", - "apiUser": "Sınırlı API Kullanıcısı", - "extraApiUser": "Ek Sınırlı API Kullanıcısı", - "webOnlyUser": "Sadece Web Kullanıcısı", - "demoUser": "Demo Kullanıcısı (Özel ayar yok)", - "internalApiUser": "Dahili API Kullanıcısı", - "forceChange": "Kullanıcının girişte kullanıcı adı/şifre değiştirmesini zorla", - "submit": "Kullanıcıyı Kaydet", - "changeUserRole": "Kullanıcı rolünü değiştir", - "authenticated": "Onaylandı", - "editOwnProfil": "Profili düzenle", - "enabledUser": "aktif kullanıcı", - "disabledUser": "devre dışı kullanıcı", - "activeUsers": "Aktif Kullanıcılar:", - "disabledUsers": "Devre Dışı Kullanıcılar:", - "totalUsers": "Toplam Kullanıcılar:", - "lastRequest": "Son İstek", - "usage": "Kullanımı Görüntüle" - }, - "endpointStatistics": { - "title": "Endpoint İstatistikleri", - "header": "Endpoint İstatistikleri", - "top10": "En Çok Kullanılan 10", - "top20": "En Çok Kullanılan 20", - "all": "Hepsi", - "refresh": "Yenile", - "includeHomepage": "Ana Sayfayı Dahil Et ('/')", - "includeLoginPage": "Giriş Sayfasını Dahil Et ('/login')", - "totalEndpoints": "Toplam Uç Nokta", - "totalVisits": "Toplam Ziyaret", - "showing": "Gösteriliyor", - "selectedVisits": "Seçilen Ziyaretler", - "endpoint": "Endpoint", - "visits": "Ziyaret", - "percentage": "Yüzde", - "loading": "Yükleniyor...", - "failedToLoad": "Endpoint verileri yüklenemedi. Lütfen sayfayı yenileyin.", - "home": "Ana Sayfa", - "login": "Giriş", - "top": "En Çok", - "numberOfVisits": "Ziyaret Sayısı", - "visitsTooltip": "Ziyaret: {0} (toplamın %{1}’i)", - "retry": "Yeniden Dene" - }, - "database": { - "title": "Veri Tabanını İçe/Dışa Aktar", - "header": "Veri Tabanını İçe/Dışa Aktar", - "fileName": "Dosya Adı", - "creationDate": "Oluşturulma Tarihi", - "fileSize": "Dosya Boyutu", - "deleteBackupFile": "Yedekleme Dosyasını Sil", - "importBackupFile": "Yedekleme Dosyasını İçe Aktar", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Yedekleme Dosyasını İndir", - "info_1": "Verileri içe aktarırken, yapının doğru olduğundan emin olmak çok önemlidir. Ne yaptığınızdan emin değilseniz, bir uzmandan tavsiye ve destek alın. Yapıdaki bir hata, uygulamanın tamamen çalıştırılamaması da dahil olmak üzere uygulama sorunlarına neden olabilir.", - "info_2": "Karşıya yüklerken dosya adı önemli değildir. Daha sonra yedekleme_kullanıcısı_yyyyAAggSdd.sql biçiminde yeniden adlandırılacak ve tutarlı bir adlandırma kuralı sağlanacaktır.", - "submit": "Yedeklemeyi İçe Aktar", - "importIntoDatabaseSuccessed": "Veri tabanına başarıyla aktarıldı", - "backupCreated": "Veritabanı yedeklemesi başarılı", - "fileNotFound": "Dosya bulunamadı", - "fileNullOrEmpty": "Dosya yok veya boş olmamalıdır", - "failedImportFile": "Dosya İçe Aktarılamadı", - "notSupported": "Bu işlev, mevcut veritabanı bağlantınız için desteklenmiyor." - }, - "session": { - "expired": "Oturumunuzun süresi doldu. Lütfen sayfayı yenileyip tekrar deneyin.", - "refreshPage": "Sayfayı Yenile" - }, - "home": { - "desc": "Yerel olarak barındırılan tüm PDF ihtiyaçlarınız için tek durak noktanız.", - "searchBar": "Özellikleri arayın...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Görüntüleyin, açıklama ekleyin, metin veya resim ekleyin" - }, - "setFavorites": "Favorilere Ekle", - "hideFavorites": "Favorileri Gizle", - "showFavorites": "Favorileri Göster", - "legacyHomepage": "Eski ana sayfa", - "newHomePage": "Yeni ana sayfamızı deneyin!", - "alphabetical": "Alfabetik", - "globalPopularity": "Global Popülerlik", - "sortBy": "Sıralama ölçütü:", - "multiTool": { - "title": "PDF Çoklu Araç", - "desc": "Birleştir, Döndür, Yeniden Düzenle ve Sayfaları Kaldır" - }, - "merge": { - "title": "Birleştir", - "desc": "Çoklu PDF'leri tek bir dosyada kolayca birleştirin." - }, - "split": { - "title": "Ayır", - "desc": "PDF'leri birden fazla belgeye ayırın" - }, - "rotate": { - "title": "Döndür", - "desc": "PDF'lerinizi kolayca döndürün." - }, - "imageToPdf": { - "title": "Resimden PDF'e", - "desc": "Bir resmi (PNG, JPEG, GIF) PDF'e dönüştürün." - }, - "pdfToImage": { - "title": "PDF'den Resme", - "desc": "PDF'yi bir resme dönüştürün. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Düzenle", - "desc": "Sayfaları herhangi bir sırayla kaldırın/düzenleyin" - }, - "addImage": { - "title": "Resim Ekle", - "desc": "PDF'e belirli bir konuma resim ekler" - }, - "watermark": { - "title": "Filigran Ekle", - "desc": "PDF belgenize özel bir filigran ekleyin." - }, - "permissions": { - "title": "İzinleri Değiştir", - "desc": "PDF belgenizin izinlerini değiştirin" - }, - "removePages": { - "title": "Kaldır", - "desc": "PDF belgenizden istenmeyen sayfaları silin." - }, - "addPassword": { - "title": "Parola Ekle", - "desc": "PDF belgenizi bir parola ile şifreleyin." - }, - "removePassword": { - "title": "Parolayı Kaldır", - "desc": "PDF belgenizden parola korumasını kaldırın." - }, - "compressPdfs": { - "title": "Sıkıştır", - "desc": "PDF'lerin dosya boyutunu azaltmak için sıkıştırın." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Metaveriyi Değiştir", - "desc": "Bir PDF belgesinden metaveriyi değiştir/kaldır/ekle" - }, - "fileToPDF": { - "title": "Dosyayı PDF'e Dönüştür", - "desc": "Hemen hemen her dosyayı PDF'e dönüştürün (DOCX, PNG, XLS, PPT, TXT ve daha fazlası)" - }, - "ocr": { - "title": "OCR / Taramaları Temizle", - "desc": "Taramaları temizler ve bir PDF içindeki resimlerden metni algılar ve tekrar metin olarak ekler." - }, - "extractImages": { - "title": "Resimleri Çıkar", - "desc": "Bir PDF'ten tüm resimleri çıkarır ve bunları zip olarak kaydeder." - }, - "pdfToPDFA": { - "title": "PDF'den PDF/A'ya", - "desc": "PDF'yi uzun vadeli saklama için PDF/A'ya dönüştürün" - }, - "PDFToWord": { - "title": "PDF'den Word'e", - "desc": "PDF'yi Word formatlarına dönüştürün (DOC, DOCX ve ODT)" - }, - "PDFToPresentation": { - "title": "PDF'den Sunuma", - "desc": "PDF'yi Sunum formatlarına dönüştürün (PPT, PPTX ve ODP)" - }, - "PDFToText": { - "title": "PDF'den RTF (Metin)'e", - "desc": "PDF'i Metin veya RTF formatına dönüştür" - }, - "PDFToHTML": { - "title": "PDF'den HTML'e", - "desc": "PDF'i HTML formatına dönüştür" - }, - "PDFToXML": { - "title": "PDF'den XML'e", - "desc": "PDF'i XML formatına dönüştür" - }, - "ScannerImageSplit": { - "title": "Taranmış Fotoğrafları Tespit Et/Böl", - "desc": "Bir fotoğraf/PDF içerisindeki birden fazla fotoğrafı ayırır" - }, - "sign": { - "title": "İmzala", - "desc": "Çizim, metin veya resim ile PDF'e imza ekler" - }, - "flatten": { - "title": "Düzleştir", - "desc": "PDF'ten tüm etkileşimli öğeleri ve formları kaldırır" - }, - "repair": { - "title": "Onar", - "desc": "Bozuk/kırık bir PDF'i onarmaya çalışır" - }, - "removeBlanks": { - "title": "Boş Sayfaları Kaldır", - "desc": "Bir belgeden boş sayfaları tespit eder ve kaldırır" - }, - "removeAnnotations": { - "title": "Ek Açıklamaları Kaldır", - "desc": "PDF'deki tüm yorumları/açıklamaları kaldırır" - }, - "compare": { - "title": "Karşılaştır", - "desc": "2 PDF Belgesi arasındaki farkları karşılaştırır ve gösterir" - }, - "certSign": { - "title": "Sertifika ile İmzala", - "desc": "Bir PDF'i Sertifika/Anahtar (PEM/P12) ile imzalar" - }, - "removeCertSign": { - "title": "Sertifika İmzasını Kaldır", - "desc": "PDF'ten sertifika imzasını kaldırır" - }, - "pageLayout": { - "title": "Çoklu-Sayfa Düzeni", - "desc": "Bir PDF belgesinin çoklu sayfalarını tek bir sayfada birleştirir" - }, - "scalePages": { - "title": "Sayfa boyutunu/ölçeğini ayarla", - "desc": "Bir sayfanın ve/veya içeriğinin boyutunu/ölçeğini değiştirir" - }, - "pipeline": { - "title": "Çoklu İşlemler", - "desc": "Çoklu İşlemler tanımlayarak PDF'lere birden fazla işlemi çalıştır" - }, - "add-page-numbers": { - "title": "Sayfa Numaraları Ekle", - "desc": "Bir belgeye belirli bir konuma sayfa numaraları ekler" - }, - "auto-rename": { - "title": "PDF Dosyasını Otomatik Yeniden Adlandır", - "desc": "Tespit edilen başlığa dayanarak bir PDF dosyasını otomatik olarak yeniden adlandırır" - }, - "adjust-contrast": { - "title": "Renkleri/Kontrastı Ayarla", - "desc": "Bir PDF'in Kontrastını, Doygunluğunu ve Parlaklığını ayarlar" - }, - "crop": { - "title": "PDF'i Kırp", - "desc": "Boyutunu azaltmak için bir PDF'i kırpar (metni korur!)" - }, - "autoSplitPDF": { - "title": "Sayfaları Otomatik Böl", - "desc": "Fiziksel taranmış sayfa bölücü QR Kod ile Taranmış PDF'i Otomatik Böl" - }, - "sanitizePdf": { - "title": "Temizle", - "desc": "PDF dosyalarından betikleri ve diğer öğeleri kaldırır" - }, - "URLToPDF": { - "title": "URL/Websitesi PDF'e", - "desc": "Herhangi bir http(s)URL'yi PDF'e dönüştürür" - }, - "HTMLToPDF": { - "title": "HTML'den PDF'e", - "desc": "Herhangi bir HTML dosyasını veya zip'i PDF'e dönüştürür" - }, - "MarkdownToPDF": { - "title": "Markdown'dan PDF'e", - "desc": "Herhangi bir Markdown dosyasını PDF'e dönüştürür" - }, - "PDFToMarkdown": { - "title": "PDF'den Markdown'a", - "desc": "Herhangi bir PDF'yi Markdown formatına dönüştürür" - }, - "getPdfInfo": { - "title": "PDF Hakkında TÜM Bilgiyi Al", - "desc": "PDF'ler hakkında mümkün olan her türlü bilgiyi toplar" - }, - "extractPage": { - "title": "Sayfa(ları) Çıkar", - "desc": "PDF'ten seçili sayfaları çıkarır" - }, - "PdfToSinglePage": { - "title": "PDF'i Tek Büyük Sayfaya", - "desc": "Tüm PDF sayfalarını tek büyük bir sayfada birleştirir" - }, - "showJS": { - "title": "Javascript'i Göster", - "desc": "Bir PDF'e enjekte edilen herhangi bir JS'i araştırır ve gösterir" - }, - "autoRedact": { - "title": "Otomatik Karartma", - "desc": "Giriş metnine dayanarak bir PDF'teki metni Otomatik Karartır (Redakte)" - }, - "redact": { - "title": "Manuel Sansürleme", - "desc": "Seçilen metinler, çizilen şekiller ve/veya belirli sayfalar üzerinden PDF'yi sansürler" - }, - "tableExtraxt": { - "title": "PDF'den CSV'ye", - "desc": "PDF'den Tabloları çıkarır ve CSV'ye dönüştürür" - }, - "autoSizeSplitPDF": { - "title": "Boyut/Sayıya Göre Otomatik Bölme", - "desc": "Tek bir PDF'yi boyut, sayfa sayısı veya belge sayısına göre birden fazla belgeye bölün" - }, - "overlay-pdfs": { - "title": "PDF'leri Bindirme", - "desc": "PDF'leri başka bir PDF'nin üzerine bindirir" - }, - "split-by-sections": { - "title": "PDF'yi Bölümlere Ayırma", - "desc": "PDF'nin her sayfasını daha küçük yatay ve dikey bölümlere ayırın" - }, - "AddStampRequest": { - "title": "PDF'ye Damga Ekleme", - "desc": "Belirlenen konumlara metin veya resim damgaları ekleyin" - }, - "removeImagePdf": { - "title": "Resmi kaldır", - "desc": "Dosya boyutunu küçültmek için PDF'den resmi kaldırın" - }, - "splitPdfByChapters": { - "title": "PDF'yi Bölümlere Göre Böl", - "desc": "PDF'yi bölüm yapısına göre birden fazla dosyaya ayırın." - }, - "validateSignature": { - "title": "PDF İmzasını Doğrula", - "desc": "PDF belgelerindeki dijital imzaları ve sertifikaları doğrulayın" - }, - "replaceColorPdf": { - "title": "Renkleri Değiştir ve Tersine Çevir", - "desc": "PDF'deki metin ve arka plan renklerini değiştirin ve PDF'nin tüm renklerini tersine çevirerek dosya boyutunu azaltın" - } - }, - "viewPdf": { - "tags": "görüntüle,oku,açıklama ekle,metin,görüntü", - "title": "View/Edit PDF", - "header": "PDF Görüntüle" - }, - "multiTool": { - "tags": "Çoklu Araç,Çoklu işlem,Arayüz,tıklama sürükleme,ön uç,istemci tarafı,etkileşimli,taşınabilir,taşı", - "title": "PDF Çoklu Araç", - "header": "PDF Çoklu Araç", - "uploadPrompts": "Dosya Adı", - "selectAll": "Tümünü Seç", - "deselectAll": "Seçimi Kaldır", - "selectPages": "Sayfa Seç", - "selectedPages": "Seçilen Sayfalar", - "page": "Sayfa", - "deleteSelected": "Seçilenleri Sil", - "downloadAll": "Dışa Aktar", - "downloadSelected": "Seçilenleri Dışa Aktar", - "insertPageBreak": "Sayfa Sonu Ekle", - "addFile": "Dosya Ekle", - "rotateLeft": "Sola Döndür", - "rotateRight": "Sağa Döndür", - "split": "Böl", - "moveLeft": "Sola Taşı", - "moveRight": "Sağa Taşı", - "delete": "Sil", - "dragDropMessage": "Sayfa(lar) Seçildi", - "undo": "Geri Al", - "redo": "Yinele" - }, - "merge": { - "tags": "birleştir,Sayfa işlemleri,Arka uç,sunucu tarafı", - "title": "Birleştir", - "header": "Çoklu PDF'leri Birleştir (2+)", - "sortByName": "İsme göre sırala", - "sortByDate": "Tarihe göre sırala", - "removeCertSign": "Birleştirilen dosyadaki dijital imza kaldırılsın mı?", - "submit": "Birleştir" - }, - "split": { - "tags": "Sayfa işlemleri,böl,Çoklu Sayfa,kes,sunucu tarafı", - "title": "PDF Ayır", - "header": "PDF Ayır", - "desc": { - "1": "Seçtiğiniz numaralar, bir ayrım yapmak istediğiniz sayfa numarasıdır", - "2": "Bu nedenle, 1,3,7-9 seçmek 10 sayfalı bir belgeyi şunlarla 6 ayrı PDF'e böler:", - "3": "Belge #1: Sayfa 1", - "4": "Belge #2: Sayfa 2 ve 3", - "5": "Belge #3: Sayfa 4, 5, 6 ve 7", - "6": "Belge #4: Sayfa 8", - "7": "Belge #5: Sayfa 9", - "8": "Belge #6: Sayfa 10" - }, - "splitPages": "Ayrılacak sayfaları girin:", - "submit": "Ayır" - }, - "rotate": { - "tags": "sunucu tarafı", - "title": "PDF Döndür", - "header": "PDF Döndür", - "selectAngle": "Döndürme açısını seçin (90 derecenin katları olarak):", - "submit": "Döndür" - }, - "imageToPdf": { - "tags": "dönüşüm,img,jpg,fotoğraf,resim" - }, - "pdfToImage": { - "tags": "dönüşüm,img,jpg,fotoğraf,resim", - "title": "PDF'den Resme", - "header": "PDF'den Resme", - "selectText": "Resim Formatı", - "singleOrMultiple": "Sonuç resim tipi", - "single": "Tüm sayfaları birleştiren Tek Büyük Resim", - "multi": "Çoklu Resimler, sayfa başına bir resim", - "colorType": "Renk türü", - "color": "Renk", - "grey": "Gri tonlama", - "blackwhite": "Siyah ve Beyaz (Veri kaybolabilir!)", - "submit": "Dönüştür", - "info": "Python kurulu değil. WebP dönüşümü için gereklidir.", - "placeholder": "(örneğin 1,2,8 veya 4,7,12-16 ya da 2n-1)" - }, - "pdfOrganiser": { - "tags": "çift,çift,yan,yana,sırala,taşı", - "title": "Sayfa Organizatörü", - "header": "PDF Sayfa Organizatörü", - "submit": "Sayfaları Yeniden Düzenle", - "mode": { - "_value": "Mod", - "1": "Özel Sayfa Düzeni", - "2": "Ters Sıralama", - "3": "Çift Taraflı Sıralama", - "4": "Kitapçık Sıralama", - "5": "Yandan Dikişli Kitapçık Sıralama", - "6": "Tek-Çift Ayrımı", - "7": "İlk Önce Kaldır", - "8": "Sonuncuyu Kaldır", - "9": "İlk ve Sonu Kaldır", - "10": "Tek-Çift Birleştirme", - "11": "Tüm sayfaları çoğalt" - }, - "placeholder": "(örn. 1,3,2 veya 4-8,2,10-12 veya 2n-1)" - }, - "addImage": { - "tags": "img,jpg,fotoğraf,resim", - "title": "Resim Ekle", - "header": "PDF'e resim ekle", - "everyPage": "Her Sayfa mı?", - "upload": "Resim ekle", - "submit": "Resim ekle" - }, - "watermark": { - "tags": "Metin,tekrarlayan,etiket,kendi,telif hakkı,marka,img,jpg,fotoğraf,resim", - "title": "Filigran Ekle", - "header": "Filigran Ekle", - "customColor": "Özel Metin Rengi", - "selectText": { - "1": "Filigran eklemek için PDF seçin:", - "2": "Filigran Metni:", - "3": "Yazı Boyutu:", - "4": "Döndürme (0-360):", - "5": "genişlikBoşluk (Yatayda her filigran arasında boşluk):", - "6": "yükseklikBoşluk (Dikeyde her filigran arasında boşluk):", - "7": "Opaklık (0% - 100%):", - "8": "Filigran Türü:", - "9": "Filigran Resmi:", - "10": "PDF'yi PDF-Resim'e Dönüştür" - }, - "submit": "Filigran Ekle", - "type": { - "1": "Metin", - "2": "Resim" - } - }, - "permissions": { - "tags": "oku,yaz,düzenle,yazdır", - "title": "İzinleri Değiştir", - "header": "İzinleri Değiştir", - "warning": "İzinlerin değiştirilemez olması için bunları add-password sayfası aracılığıyla bir parola ile ayarlamaları önerilir", - "selectText": { - "1": "İzinlerini değiştirmek için PDF seçin", - "2": "Ayarlanacak izinler", - "3": "Belgenin birleştirilmesini önle", - "4": "İçeriğin çıkarılmasını önle", - "5": "Erişilebilirlik için çıkarmanın önlenmesi", - "6": "Formun doldurulmasını önle", - "7": "Değişikliği önle", - "8": "Açıklama değişikliğini önle", - "9": "Yazdırmayı önle", - "10": "Farklı formatlarda yazdırmayı önle" - }, - "submit": "Değiştir" - }, - "removePages": { - "tags": "Sayfaları kaldır,sayfaları sil" - }, - "addPassword": { - "tags": "güvenli, güvenlik", - "title": "Parola Ekle", - "header": "Parola Ekle (Şifrele)", - "selectText": { - "1": "Şifrelenecek PDF'i seçin", - "2": "Kullanıcı Parolası", - "3": "Şifreleme Anahtar Uzunluğu", - "4": "Daha yüksek değerler daha güçlüdür, ancak daha düşük değerler daha iyi uyumluluğa sahiptir.", - "5": "İzinlerin ayarlanması (Sahip parolası ile birlikte kullanılması önerilir)", - "6": "Belgenin birleştirilmesini önle", - "7": "İçeriğin çıkarılmasını önle", - "8": "Erişilebilirlik için çıkarmanın önlenmesi", - "9": "Formun doldurulmasını önle", - "10": "Değişikliği önle", - "11": "Açıklama değişikliğini önle", - "12": "Yazdırmayı önle", - "13": "Farklı formatlarda yazdırmayı önle", - "14": "Sahip Parolası", - "15": "Açıldığında belgeyle ne yapılacağını kısıtlar (Tüm okuyucular tarafından desteklenmez)", - "16": "Belgenin kendisinin açılmasını kısıtlar" - }, - "submit": "Şifrele" - }, - "removePassword": { - "tags": "güvenli,Şifreyi çöz,güvenlik,parolasız,parolayı sil", - "title": "Parola Kaldır", - "header": "Parola Kaldır (Şifre Çöz)", - "selectText": { - "1": "Şifreyi Çözmek için PDF Seçin", - "2": "Parola" - }, - "submit": "Kaldır" - }, - "compressPdfs": { - "tags": "sıkıştır,küçük,minik" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Başlık,yazar,tarih,oluşturma,zaman,yayıncı,üretici,istatistikler", - "title": "Başlık:", - "header": "Metaveriyi Değiştir", - "selectText": { - "1": "Değiştirmek istediğiniz değişkenleri düzenleyin", - "2": "Tüm metaveriyi sil", - "3": "Özel Metaveriyi Göster:", - "4": "Diğer Metaveri:", - "5": "Özel Metaveri Girişi Ekle" - }, - "author": "Yazar:", - "creationDate": "Oluşturma Tarihi (yyyy/MM/dd HH:mm:ss):", - "creator": "Oluşturan:", - "keywords": "Anahtar Kelimeler:", - "modDate": "Değişiklik Tarihi (yyyy/MM/dd HH:mm:ss):", - "producer": "Üretici:", - "subject": "Konu:", - "trapped": "Tuzak:", - "submit": "Değiştir" - }, - "fileToPDF": { - "tags": "dönüşüm,format,belge,fotoğraf,slayt,metin,dönüşüm,ofis,doküman,word,excel,powerpoint", - "title": "Dosyadan PDF'e", - "header": "Herhangi bir dosyayı PDF'e dönüştür", - "credit": "Bu hizmet dosya dönüşümü için LibreOffice ve Unoconv'u kullanır.", - "supportedFileTypesInfo": "Desteklenen Dosya türleri", - "supportedFileTypes": "Desteklenen dosya türleri aşağıdakileri içermelidir ancak desteklenen formatların tam güncellenmiş listesi için lütfen LibreOffice dokümantasyonuna başvurun", - "submit": "PDF'e Dönüştür" - }, - "ocr": { - "tags": "tanıma,metin,resim,tarama,okuma,tanımlama,algılama,düzenlenebilir", - "title": "OCR / Tarama Temizleme", - "header": "Taramaları Temizle / OCR (Optik Karakter Tanıma)", - "selectText": { - "1": "PDF içinde tespit edilecek dilleri seçin (Listelenenler şu anda tespit edilenlerdir):", - "2": "OCR'li PDF ile birlikte OCR metnini içeren metin dosyası oluştur", - "3": "Skew açıda taranan sayfaları geri döndürerek düzeltin", - "4": "OCR'nin arka planda metin bulmasını azaltmak için sayfayı temizle. (Çıktıda değişiklik yok)", - "5": "OCR'nin arka planda metin bulmasını azaltmak için sayfayı temizle, temizlemeyi çıktıda korur.", - "6": "İnteraktif metni olan sayfaları yoksay, sadece resim olan sayfaları OCR yapar", - "7": "Zorla OCR, tüm orijinal metin öğelerini kaldırarak Her sayfayı OCR yapar", - "8": "Normal (PDF metin içeriyorsa hata verir)", - "9": "Ek Ayarlar", - "10": "OCR Modu", - "11": "OCR'den sonra resimleri kaldır (TÜM resimleri kaldırır, sadece dönüşüm adımının bir parçasıysa yararlıdır)", - "12": "Render Türü (İleri Seviye)" - }, - "help": "Lütfen bu belgede başka dillerde nasıl kullanılacağı ve/veya docker'da kullanılmaması hakkında bilgi edinin", - "credit": "Bu hizmet OCR için qpdf ve Tesseract'ı kullanır.", - "submit": "PDF'i OCR(Metin Tanıma) ile İşle" - }, - "extractImages": { - "tags": "fotoğraf,resim,kaydet,arşiv,zip,yakala,al", - "title": "Resimleri Çıkar", - "header": "Resimleri Çıkar", - "selectText": "Çıkarılan resimleri dönüştürmek için resim formatını seçin", - "allowDuplicates": "Yinelenen görselleri kaydet", - "submit": "Çıkar" - }, - "pdfToPDFA": { - "tags": "arşiv,uzun vadeli,standart,dönüşüm,saklama,koruma", - "title": "PDF'den PDF/A'ya", - "header": "PDF'den PDF/A'ya", - "credit": "Bu hizmet PDF/A dönüşümü için libreoffice kullanır", - "submit": "Dönüştür", - "tip": "Şu anda aynı anda birden fazla giriş için çalışmıyor", - "outputFormat": "Çıkış formatı", - "pdfWithDigitalSignature": "PDF dijital imza içeriyor. Bu bir sonraki adımda kaldırılacak." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,dönüşüm,format,dönüşüm,ofis,microsoft,docfile", - "title": "PDF'den Word'e", - "header": "PDF'den Word'e", - "selectText": { - "1": "Çıktı dosya formatı" - }, - "credit": "Bu hizmet dosya dönüşümü için LibreOffice kullanır.", - "submit": "Dönüştür" - }, - "PDFToPresentation": { - "tags": "slaytlar,show,ofis,microsoft", - "title": "PDF'den Sunuma", - "header": "PDF'den Sunuma", - "selectText": { - "1": "Çıktı dosya formatı" - }, - "credit": "Bu hizmet dosya dönüşümü için LibreOffice kullanır.", - "submit": "Dönüştür" - }, - "PDFToText": { - "tags": "zenginformat,zenginmetinformatı,zengin metin formatı", - "title": "PDF'den RTF (Metin)'e", - "header": "PDF'den RTF (Metin)'e", - "selectText": { - "1": "Çıktı dosya formatı" - }, - "credit": "Bu hizmet dosya dönüşümü için LibreOffice kullanır.", - "submit": "Dönüştür" - }, - "PDFToHTML": { - "tags": "web içeriği,tarayıcı dostu", - "title": "PDF'den HTML'e", - "header": "PDF'den HTML'e", - "credit": "Bu hizmet dosya dönüşümü için pdftohtml kullanır.", - "submit": "Dönüştür" - }, - "PDFToXML": { - "tags": "veri-çıkarımı,yapılandırılmış-içerik,entegrasyon,dönüşüm,dönüştür", - "title": "PDF'den XML'e", - "header": "PDF'den XML'e", - "credit": "Bu hizmet dosya dönüşümü için LibreOffice kullanır.", - "submit": "Dönüştür" - }, - "ScannerImageSplit": { - "tags": "ayır,otomatik-tespit,taramalar,çoklu-fotoğraf,düzenle", - "selectText": { - "1": "Açı Eşiği:", - "2": "Resmin döndürülmesi için gereken minimum mutlak açıyı ayarlar (varsayılan: 10).", - "3": "Tolerans:", - "4": "Tahmini arka plan rengi etrafındaki renk varyasyon aralığını belirler (varsayılan: 30).", - "5": "Minimum Alan:", - "6": "Bir fotoğraf için minimum alan eşiğini ayarlar (varsayılan: 10000).", - "7": "Minimum Kontur Alanı:", - "8": "Bir fotoğraf için minimum kontur alanı eşiğini ayarlar", - "9": "Kenar Boyutu:", - "10": "Çıktıda beyaz kenarların önlenmesi için eklenen ve kaldırılan kenarın boyutunu ayarlar (varsayılan: 1)." - }, - "info": "Python kurulu değil. Çalışması için gereklidir." - }, - "sign": { - "tags": "onayla,başharfler,çizili-imza,metin-imza,resim-imza", - "title": "İmzala", - "header": "PDF'lere İmza At", - "upload": "Resim Yükle", - "draw": "İmza Çiz", - "text": "Metin Girişi", - "clear": "Temizle", - "add": "Ekle", - "saved": "Kaydedilmiş İmzalar", - "save": "İmzayı Kaydet", - "personalSigs": "Kişisel İmzalar", - "sharedSigs": "Paylaşılan İmzalar", - "noSavedSigs": "Kayıtlı imza bulunamadı", - "addToAll": "Tüm sayfalara ekle", - "delete": "Sil", - "first": "İlk sayfa", - "last": "Son sayfa", - "next": "Sonraki sayfa", - "previous": "Önceki sayfa", - "maintainRatio": "Oranı korumayı değiştir", - "undo": "Geri Al", - "redo": "Yinele" - }, - "flatten": { - "tags": "statik,devre dışı bırak,etkileşimsiz,sadeleştir", - "title": "Düzleştir", - "header": "PDF'leri Düzleştir", - "flattenOnlyForms": "Yalnızca formları düzleştir", - "submit": "Düzleştir" - }, - "repair": { - "tags": "onar,geri yükle,düzelt,geri getir", - "title": "Onar", - "header": "PDF'leri Onar", - "submit": "Onar" - }, - "removeBlanks": { - "tags": "temizle,sadeleştir,içeriksiz,düzenle", - "title": "Boşları Kaldır", - "header": "Boş Sayfaları Kaldır", - "threshold": "Pixel Beyazlık Eşiği:", - "thresholdDesc": "Bir beyaz pixelin 'Beyaz' olarak sınıflandırılması için ne kadar beyaz olması gerektiğini belirlemek için eşik. 0 = Siyah, 255 saf beyaz.", - "whitePercent": "Beyaz Yüzde (%):", - "whitePercentDesc": "Bir sayfanın 'beyaz' pixel olması gereken yüzdesi", - "submit": "Boşları Kaldır" - }, - "removeAnnotations": { - "tags": "yorumlar,vurgulama,notlar,işaretleme,kaldırma", - "title": "Ek Açıklamaları Kaldır", - "header": "Ek Açıklamaları Kaldır", - "submit": "Kaldır" - }, - "compare": { - "tags": "farklılaştır,karşılaştır,değişiklikler,analiz", - "title": "Karşılaştır", - "header": "PDF'leri Karşılaştır", - "highlightColor": { - "1": "Vurgu Rengi 1:", - "2": "Vurgu Rengi 2:" - }, - "document": { - "1": "Belge 1", - "2": "Belge 2" - }, - "submit": "Karşılaştır", - "complex": { - "message": "Verilen belgelerden biri veya her ikisi büyük dosyalar olduğundan karşılaştırma doğruluğu azalabilir" - }, - "large": { - "file": { - "message": "Verilen belgelerden biri veya her ikisi işlenemeyecek kadar büyük" - } - }, - "no": { - "text": { - "message": "Seçilen PDF'lerden biri veya her ikisinde metin içeriği yok. Lütfen karşılaştırma için metin içeren PDF'ler seçin." - } - } - }, - "certSign": { - "tags": "doğrula,PEM,P12,resmi,şifrele", - "title": "Sertifika İmzalama", - "header": "Sertifikanızla bir PDF imzalayın (Devam eden iş)", - "selectPDF": "İmzalamak için bir PDF Dosyası seçin:", - "jksNote": "Not: Sertifika türünüz aşağıda listelenmemişse, lütfen keytool komut satırı aracını kullanarak sertifikanızı bir Java Keystore (.jks) dosyasına dönüştürün. Ardından, aşağıdaki .jks dosyası seçeneğini seçin.", - "selectKey": "Özel Anahtar Dosyanızı Seçin (PKCS#8 formatında, .pem veya .der olabilir):", - "selectCert": "Sertifika Dosyanızı Seçin (X.509 formatında, .pem veya .der olabilir):", - "selectP12": "PKCS#12 Anahtar Deposu Dosyanızı Seçin (.p12 veya .pfx) (İsteğe bağlı, sağlanırsa, özel anahtarınızı ve sertifikanızı içermelidir):", - "selectJKS": "Java Keystore Dosyanızı (.jks veya .keystore) seçin:", - "certType": "Sertifika Türü", - "password": "Anahtar Deposu veya Özel Anahtar Şifrenizi Girin (Varsa):", - "showSig": "İmzayı Göster", - "reason": "Neden", - "location": "Konum", - "name": "İsim", - "showLogo": "Show Logo", - "submit": "PDF'i İmzala" - }, - "removeCertSign": { - "tags": "doğrula,PEM,P12,resmi,şifre çöz", - "title": "Sertifika İmzasını Kaldır", - "header": "PDF'ten dijital sertifikayı kaldırın", - "selectPDF": "PDF dosyası seçin:", - "submit": "İmzayı Kaldır" - }, - "pageLayout": { - "tags": "birleştir,kompozit,tek-görünüm,düzenle", - "title": "Çoklu Sayfa Düzeni", - "header": "Çoklu Sayfa Düzeni", - "pagesPerSheet": "Sayfa başına sayfalar:", - "addBorder": "Kenarlık Ekle", - "submit": "Gönder" - }, - "scalePages": { - "tags": "boyutlandır,değiştir,boyut,uyarla", - "title": "Sayfa Ölçeğini Ayarla", - "header": "Sayfa Ölçeğini Ayarla", - "pageSize": "Belgenin bir sayfa boyutu.", - "keepPageSize": "Original Size", - "scaleFactor": "Bir sayfanın yakınlaştırma seviyesi (kırpma).", - "submit": "Gönder" - }, - "add-page-numbers": { - "tags": "sayfalandır,etiket,düzenle,dizin" - }, - "auto-rename": { - "tags": "otomatik-tespit,başlık-tabanlı,düzenle,yeniden-etiketle", - "title": "Otomatik Yeniden Adlandır", - "header": "PDF'i Otomatik Yeniden Adlandır", - "submit": "Otomatik Yeniden Adlandır" - }, - "adjust-contrast": { - "tags": "renk-düzeltme,ayarla,değiştir,artır" - }, - "crop": { - "tags": "kırp,küçült,düzenle,şekillendir", - "title": "Kırp", - "header": "PDF'i Kırp", - "submit": "Gönder" - }, - "autoSplitPDF": { - "tags": "QR-tabanlı,ayır,tarama-segmenti,düzenle", - "title": "PDF'i Otomatik Böl", - "header": "PDF'i Otomatik Böl", - "description": "Yazdır, Ekle, Tara, yükle ve belgelerinizi otomatik olarak ayırmamıza izin ver. Elle sıralama yapmaya gerek yok.", - "selectText": { - "1": "Aşağıdan bazı ayırıcı sayfaları yazdırın (Siyah ve beyaz olabilir).", - "2": "Ayırıcı sayfayı aralarına ekleyerek tüm belgelerinizi birden tara.", - "3": "Tek büyük taranmış PDF dosyasını yükleyin ve gerisini Stirling PDF'in halletmesine izin verin.", - "4": "Ayırıcı sayfalar otomatik olarak tespit edilir ve kaldırılır, düzgün bir final belgesi garantilidir." - }, - "formPrompt": "Stirling-PDF Sayfa ayırıcıları içeren PDF'i gönderin:", - "duplexMode": "Çift Taraflı Mod (Ön ve arka tarama)", - "dividerDownload2": "'Otomatik Ayırıcı Ayırıcı (talimatlarla).pdf' indir", - "submit": "Gönder" - }, - "sanitizePdf": { - "tags": "temizle,güvende,korunaklı,tehditleri-kaldır" - }, - "URLToPDF": { - "tags": "web-yakala,sayfa-kaydet,webten-dökümana,arşivle", - "title": "URL'den PDF'e", - "header": "URL'den PDF'e", - "submit": "Dönüştür", - "credit": "WeasyPrint Kullanıyor" - }, - "HTMLToPDF": { - "tags": "biçimlendirme,web-içeriği,dönüşüm,dönüştür", - "title": "HTML'den PDF'e", - "header": "HTML'den PDF'e", - "help": "HTML dosyalarını ve html/css/görsel vb. içeren ZIP'leri kabul eder", - "submit": "Dönüştür", - "credit": "WeasyPrint Kullanıyor", - "zoom": "Web sitesini görüntülemek için yakınlaştırma düzeyi.", - "pageWidth": "Sayfanın santimetre cinsinden genişliği. (Varsayılan olarak boş)", - "pageHeight": "Sayfanın santimetre cinsinden yüksekliği. (Varsayılan olarak boş)", - "marginTop": "Sayfanın milimetre cinsinden üst kenar boşluğu. (Varsayılan olarak boş)", - "marginBottom": "Sayfanın milimetre cinsinden alt kenar boşluğu. (Varsayılan olarak boş)", - "marginLeft": "Sayfanın milimetre cinsinden sol kenar boşluğu. (Varsayılan olarak boş)", - "marginRight": "Sayfanın milimetre cinsinden sağ kenar boşluğu. (Varsayılan olarak boş)", - "printBackground": "Web sitelerinin arka planını oluşturun.", - "defaultHeader": "Varsayılan Üstbilgiyi Etkinleştir (Ad ve sayfa numarası)", - "cssMediaType": "Sayfanın CSS ortam türünü değiştirin.", - "none": "Hiçbiri", - "print": "Yazdır", - "screen": "Ekran" - }, - "MarkdownToPDF": { - "tags": "biçimlendirme,web-içeriği,dönüşüm,dönüştür", - "title": "Markdown'dan PDF'e", - "header": "Markdown'dan PDF'e", - "submit": "Dönüştür", - "help": "Devam eden iş", - "credit": "WeasyPrint Kullanıyor" - }, - "PDFToMarkdown": { - "tags": "biçimlendirme,web-içeriği,dönüşüm,dönüştür,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "bilgi,veri,istatistikler,istatistik", - "title": "PDF Hakkında Bilgi Al", - "header": "PDF Hakkında Bilgi Al", - "submit": "Bilgi Al", - "downloadJson": "JSON İndir" - }, - "extractPage": { - "tags": "çıkar" - }, - "PdfToSinglePage": { - "tags": "tek sayfa" - }, - "showJS": { - "tags": "JS", - "title": "Javascript'i Göster", - "header": "Javascript'i Göster", - "downloadJS": "Javascript İndir", - "submit": "Göster" - }, - "autoRedact": { - "tags": "Karart,Gizle,karartma,siyah,markör,gizli", - "title": "Otomatik Karartma", - "header": "Otomatik Karartma", - "colorLabel": "Renk", - "textsToRedactLabel": "Karartılacak Metin (satır ayrılmış)", - "textsToRedactPlaceholder": "Örn. \\nGizli \\nÇok Gizli", - "useRegexLabel": "Regex Kullan", - "wholeWordSearchLabel": "Tam Kelime Arama", - "customPaddingLabel": "Özel Ekstra Dolgu", - "convertPDFToImageLabel": "PDF'i PDF-Görüntü'ye dönüştür (Kutunun arkasındaki metni kaldırmak için kullanılır)", - "submitButton": "Gönder" - }, - "redact": { - "tags": "Sansürle,Gizle,karart,karartma,işaretleyici,gizli,manuel", - "title": "Manuel Sansürleme", - "header": "Manuel Sansürleme", - "submit": "Sansürle", - "textBasedRedaction": "Metin Tabanlı Sansürleme", - "pageBasedRedaction": "Sayfa Tabanlı Sansürleme", - "convertPDFToImageLabel": "PDF'yi Görsel PDF'ye Dönüştür (Kutunun arkasındaki metni kaldırmak için kullanılır)", - "pageRedactionNumbers": { - "title": "Sayfalar", - "placeholder": "(örneğin: 1,2,8 veya 4,7,12-16 ya da 2n-1)" - }, - "redactionColor": { - "title": "Sansür Rengi" - }, - "export": "Dışa Aktar", - "upload": "Yükle", - "boxRedaction": "Kutu Çizerek Sansürleme", - "zoom": "Yakınlaştırma", - "zoomIn": "Yakınlaştır", - "zoomOut": "Uzaklaştır", - "nextPage": "Sonraki Sayfa", - "previousPage": "Önceki Sayfa", - "toggleSidebar": "Kenar Çubuğunu Aç/Kapat", - "showThumbnails": "Küçük Resimleri Göster", - "showDocumentOutline": "Belge Anahatlarını Göster (tüm öğeleri genişletmek/daraltmak için çift tıklayın)", - "showAttatchments": "Ekleri Göster", - "showLayers": "Katmanları Göster (tüm katmanları varsayılana döndürmek için çift tıklayın)", - "colourPicker": "Renk Seçici", - "findCurrentOutlineItem": "Geçerli Anahat Öğesini Bul", - "applyChanges": "Değişiklikleri Uygula" - }, - "tableExtraxt": { - "tags": "CSV, Tablo Çıkarma, ayıklama, dönüştürme" - }, - "autoSizeSplitPDF": { - "tags": "pdf,bölme,belge,organizasyon" - }, - "overlay-pdfs": { - "tags": "Bindirme", - "header": "PDF Dosyalarını Bindirme", - "baseFile": { - "label": "Temel PDF Dosyasını Seçin" - }, - "overlayFiles": { - "label": "İkinci PDF Dosyalarını Seçin" - }, - "mode": { - "label": "Bindirme Modunu Seçin", - "sequential": "Sıralı Bindirme", - "interleaved": "Serpiştirilmiş Bindirme", - "fixedRepeat": "Sabit Tekrar Bindirme" - }, - "counts": { - "label": "Bindirme Sayıları (Sabit Tekrar Modu için)", - "placeholder": "Virgülle ayrılmış sayıları girin (örn. 2,3,1)" - }, - "position": { - "label": "Bindirme Konumunu Seçin", - "foreground": "Ön plan", - "background": "Arka plan" - }, - "submit": "Gönder" - }, - "split-by-sections": { - "tags": "Bölümlere Ayırma, Bölme, Özelleştirme", - "title": "PDF'yi Bölümlere Ayırma", - "header": "PDF'yi Bölümlere Ayırma", - "horizontal": { - "label": "Yatay Bölümler", - "placeholder": "Yatay bölme sayısını girin" - }, - "vertical": { - "label": "Dikey Bölümler", - "placeholder": "Dikey bölme sayısını girin" - }, - "submit": "PDF'yi Böl", - "merge": "Bir PDF'de Birleştirin" - }, - "AddStampRequest": { - "tags": "Damga, Görüntü ekle, Görüntüyü ortala, Filigran, PDF, Göm, Özelleştir", - "header": "Damga PDF", - "title": "Damga PDF", - "stampType": "Damga Türü", - "stampText": "Damga Metni", - "stampImage": "Damga Resmi", - "alphabet": "Alfabe", - "fontSize": "Yazı Tipi/Görüntü Boyutu", - "rotation": "Döndürme", - "opacity": "Opaklık", - "position": "Konum", - "overrideX": "X Koordinatını geçersiz kıl", - "overrideY": "Y Koordinatını Geçersiz Kıl", - "customMargin": "Özel Kenar Boşluğu", - "customColor": "Özel Metin Rengi", - "submit": "Gönder" - }, - "removeImagePdf": { - "tags": "Resmi Kaldır,Sayfa İşlemleri,Arka uç,sunucu tarafı" - }, - "splitPdfByChapters": { - "tags": "böl, bölümler, yer imleri, düzenle" - }, - "validateSignature": { - "tags": "imza, doğrula, geçerlilik kontrolü, pdf, sertifika, dijital imza, İmzayı Doğrula, Sertifikayı Doğrula", - "title": "PDF İmzalarını Doğrula", - "header": "Dijital İmzaları Doğrula", - "selectPDF": "İmzalanmış PDF dosyasını seçin", - "submit": "İmzaları Doğrula", - "results": "Doğrulama Sonuçları", - "status": { - "_value": "Durum", - "valid": "Geçerli", - "invalid": "Geçersiz" - }, - "signer": "İmzalayan", - "date": "Tarih", - "reason": "Gerekçe", - "location": "Konum", - "noSignatures": "Bu belgede dijital imza bulunamadı", - "chain": { - "invalid": "Sertifika zinciri doğrulaması başarısız - imzalayanın kimliği doğrulanamıyor" - }, - "trust": { - "invalid": "Sertifika güvenilir mağazada değil - kaynak doğrulanamıyor" - }, - "cert": { - "expired": "Sertifika süresi dolmuş", - "revoked": "Sertifika iptal edilmiş", - "info": "Sertifika Detayları", - "issuer": "Veren", - "subject": "Konu", - "serialNumber": "Seri Numarası", - "validFrom": "Geçerlilik Başlangıcı", - "validUntil": "Geçerlilik Bitişi", - "algorithm": "Algoritma", - "keySize": "Anahtar Boyutu", - "version": "Sürüm", - "keyUsage": "Anahtar Kullanımı", - "selfSigned": "Kendi Kendine İmzalı", - "bits": "bits" - }, - "signature": { - "info": "İmza Bilgisi", - "_value": "İmza", - "mathValid": "İmza matematiksel olarak geçerli, ANCAK:" - }, - "selectCustomCert": "Özel Sertifika Dosyası X.509 (İsteğe Bağlı)" - }, - "replace-color": { - "title": "Renk Değiştir-Tersine Çevir", - "header": "PDF Renklerini Değiştir veya Tersine Çevir", - "selectText": { - "1": "Renk Değiştir veya Tersine Çevirme Seçenekleri", - "2": "Varsayılan (Yüksek kontrastlı varsayılan renkler)", - "3": "Özel (Kişiselleştirilmiş renkler)", - "4": "Tümü Tersine Çevir (Tüm renkleri tersine çevir)", - "5": "Yüksek kontrastlı renk seçenekleri", - "6": "Siyah arka plan üzerine beyaz metin", - "7": "Beyaz arka plan üzerine siyah metin", - "8": "Siyah arka plan üzerine sarı metin", - "9": "Siyah arka plan üzerine yeşil metin", - "10": "Metin Rengini Seç", - "11": "Arka Plan Rengini Seç" - }, - "submit": "Değiştir" - }, - "replaceColorPdf": { - "tags": "Renk Değiştir, Sayfa işlemleri, Arka yüz, Sunucu tarafı" - }, - "login": { - "title": "Giriş Yap", - "header": "Giriş Yap", - "signin": "Giriş Yap", - "rememberme": "Beni hatırla", - "invalid": "Geçersiz kullanıcı adı veya şifre.", - "locked": "Hesabınız kilitlendi.", - "signinTitle": "Lütfen giriş yapınız.", - "ssoSignIn": "Tek Oturum Açma ile Giriş Yap", - "oAuth2AutoCreateDisabled": "OAUTH2 Otomatik Oluşturma Kullanıcı Devre Dışı Bırakıldı", - "oAuth2AdminBlockedUser": "Kayıtlı olmayan kullanıcıların kayıt veya giriş yapması şu anda engellenmiştir. Lütfen yöneticiyle iletişime geçin.", - "oauth2RequestNotFound": "Yetkilendirme isteği bulunamadı", - "oauth2InvalidUserInfoResponse": "Geçersiz Kullanıcı Bilgisi Yanıtı", - "oauth2invalidRequest": "Geçersiz İstek", - "oauth2AccessDenied": "Erişim Reddedildi", - "oauth2InvalidTokenResponse": "Geçersiz Belirteç Yanıtı", - "oauth2InvalidIdToken": "Geçersiz Kimlik Belirteci", - "relyingPartyRegistrationNotFound": "Bağlı taraf kaydı bulunamadı", - "userIsDisabled": "Kullanıcı devre dışı bırakıldı, şu anda bu kullanıcı adıyla giriş engellendi. Lütfen yöneticiyle iletişime geçin.", - "alreadyLoggedIn": "Zaten şu cihazlarda oturum açılmış:", - "alreadyLoggedIn2": "Lütfen bu cihazlardan çıkış yaparak tekrar deneyin.", - "toManySessions": "Çok fazla aktif oturumunuz var", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF'i Tek Sayfaya", - "header": "PDF'i Tek Sayfaya", - "submit": "Tek Sayfaya Dönüştür" - }, - "pageExtracter": { - "title": "Sayfaları Çıkar", - "header": "Sayfaları Çıkar", - "submit": "Çıkar", - "placeholder": "(örneğin 1,2,8 veya 4,7,12-16 ya da 2n-1)" - }, - "sanitizePDF": { - "title": "PDF'i Temizle", - "header": "PDF dosyasını temizle", - "selectText": { - "1": "JavaScript işlemlerini kaldır", - "2": "Gömülü dosyaları kaldır", - "3": "XMP meta verisini kaldır", - "4": "Linkleri kaldır", - "5": "Fontları kaldır", - "6": "Belge Bilgisi Meta Verisini Kaldır" - }, - "submit": "PDF'i Temizle" - }, - "adjustContrast": { - "title": "Kontrastı Ayarla", - "header": "Kontrastı Ayarla", - "contrast": "Kontrast:", - "brightness": "Parlaklık:", - "saturation": "Doygunluk:", - "download": "İndir" - }, - "compress": { - "title": "Sıkıştır", - "header": "PDF'i Sıkıştır", - "credit": "Bu hizmet PDF Sıkıştırma/Optimizasyonu için qpdf kullanır.", - "grayscale": { - "label": "Sıkıştırma için Gri Ton Uygula" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Optimizasyon seviyesi:", - "4": "Otomatik mod - PDF'in tam boyutuna ulaşmak için kaliteyi otomatik ayarlar", - "5": "Beklenen PDF Boyutu (örn. 25MB, 10.8MB, 25KB)" - }, - "submit": "Sıkıştır" - }, - "decrypt": { - "passwordPrompt": "Bu dosya parola korumalı. Lütfen parolayı girin:", - "cancelled": "PDF için işlem iptal edildi: {0}", - "noPassword": "Şifrelenmiş PDF için parola girilmedi: {0}", - "invalidPassword": "Lütfen doğru parolayla tekrar deneyin.", - "invalidPasswordHeader": "PDF için yanlış parola veya desteklenmeyen şifreleme: {0}", - "unexpectedError": "Dosya işlenirken bir hata oluştu. Lütfen tekrar deneyin.", - "serverError": "Şifre çözme sırasında sunucu hatası: {0}", - "success": "Dosyanın şifresi başarıyla çözüldü." - }, - "multiTool-advert": { - "message": "Bu özellik çoklu araçlar sayfamızda da mevcuttur. Sayfa sayfa gelişmiş arayüz ve ek özellikler için göz atın!" - }, - "pageRemover": { - "title": "Sayfa Silici", - "header": "PDF Sayfa silici", - "pagesToDelete": "Silinmesi gereken sayfalar (Virgülle ayrılmış sayfa numaraları listesi girin):", - "submit": "Sayfaları Sil", - "placeholder": "(örn. 1,2,6 veya 1-10,15-30)" - }, - "imageToPDF": { - "title": "Resimden PDF'e", - "header": "Resimden PDF'e", - "submit": "Dönüştür", - "selectLabel": "Resim Uydurma Seçenekleri", - "fillPage": "Sayfayı Doldur", - "fitDocumentToImage": "Resme Uygun Sayfa", - "maintainAspectRatio": "En Boy Oranını Koru", - "selectText": { - "2": "PDF'yi otomatik döndür", - "3": "Çoklu dosya mantığı (Yalnızca birden fazla resimle çalışırken etkinleştirilir)", - "4": "Tek bir PDF'e birleştir", - "5": "Ayrı PDF'lere dönüştür" - } - }, - "PDFToCSV": { - "title": "PDF'den CSV'ye", - "header": "PDF'den CSV'ye", - "prompt": "Tabloyu çıkarmak için sayfa seçin", - "submit": "Çıkart" - }, - "split-by-size-or-count": { - "title": "PDF'yi Boyuta veya Sayıya Göre Bölme", - "header": "PDF'yi Boyuta veya Sayıya Göre Bölme", - "type": { - "label": "Bölme Türünü Seçin", - "size": "Boyuta Göre", - "pageCount": "Sayfa Sayısına Göre", - "docCount": "Belge Sayısına Göre" - }, - "value": { - "label": "Değer Girin", - "placeholder": "Boyutu (örn. 2MB veya 3KB) veya sayıyı (örn. 5) girin" - }, - "submit": "Gönder" - }, - "printFile": { - "title": "Dosya Yazdır", - "header": "Dosyayı Yazıcıya Yazdır", - "selectText": { - "1": "Yazdırılacak Dosyayı Seçin", - "2": "Yazıcı Adını Girin" - }, - "submit": "Yazdır" - }, - "licenses": { - "nav": "Lisanslar", - "title": "3. Taraf Lisansları", - "header": "3. Taraf Lisansları", - "module": "Modül", - "version": "Sürüm", - "license": "Lisans" - }, - "survey": { - "nav": "Anket", - "title": "Stirling-PDF Anketi", - "description": "Stirling-PDF'te izleme yok, bu yüzden Stirling-PDF'i iyileştirmek için kullanıcılarımızdan geri bildirim almak istiyoruz!", - "changes": "Stirling-PDF son ankete göre değişti! Daha fazla bilgi için blog yazımıza göz atın:", - "changes2": "Bu değişikliklerle birlikte ücretli kurumsal destek ve fon alıyoruz", - "please": "Lütfen anketimize katılmayı düşünün!", - "disabled": "(Anket açılır penceresi sonraki güncellemelerde devre dışı bırakılacak ancak sayfanın alt kısmında yer alacaktır)", - "button": "Ankete Katıl", - "dontShowAgain": "Tekrar gösterme", - "meeting": { - "1": "Eğer Stirling PDF'i iş yerinizde kullanıyorsanız, sizinle görüşmek isteriz. 15 dakikalık bir kullanıcı keşif oturumu karşılığında teknik destek sunuyoruz.", - "2": "Bu fırsat sayesinde:", - "3": "Kurulum, entegrasyonlar veya sorun giderme konularında yardım alabilirsiniz", - "4": "Performans, uç durumlar ve eksik özellikler hakkında doğrudan geri bildirim sağlayabilirsiniz", - "5": "Stirling PDF’i gerçek dünya kurumsal kullanımı için daha iyi hale getirmemize yardımcı olabilirsiniz", - "6": "İlgileniyorsanız, ekibimizden doğrudan zaman ayırabilirsiniz. (Yalnızca İngilizce)", - "7": "Kullanım senaryolarınızı dinlemeyi ve Stirling PDF’i daha da iyi hale getirmeyi sabırsızlıkla bekliyoruz!", - "notInterested": "Kurumsal kullanıcı değilseniz ve/veya görüşmeye ilgi duymuyorsanız", - "button": "Görüşme Planla" - } - }, - "removeImage": { - "title": "Resmi kaldır", - "header": "Resmi kaldır", - "removeImage": "Resmi kaldır", - "submit": "Resmi kaldır" - }, - "splitByChapters": { - "title": "PDF'yi Bölümlere Ayır", - "header": "PDF'yi Bölümlere Ayır", - "bookmarkLevel": "Yer imi Seviyesi", - "includeMetadata": "Meta Veriyi Dahil Et", - "allowDuplicates": "Yinelenen Yer İmlerine İzin Ver", - "desc": { - "1": "Bu araç, bir PDF dosyasını bölüm yapısına göre birden fazla PDF'ye böler.", - "2": "Bölme için kullanılacak yer imi seviyesini seçin (0 en üst seviye, 1 ikinci seviye vb.).", - "3": "Meta Veriyi Dahil Et: İşaretlenirse, orijinal PDF'nin meta verisi her bir bölünmüş PDF'ye dahil edilir.", - "4": "Yinelenen Yer İmlerine İzin Ver: İşaretlenirse, aynı sayfadaki birden fazla yer imi ayrı PDF'ler oluşturabilir." - }, - "submit": "PDF'yi Ayır" - }, - "fileChooser": { - "click": "Seç", - "or": "veya", - "dragAndDrop": "Sürükle & Bırak", - "dragAndDropPDF": "PDF dosyasını Sürükle & Bırak", - "dragAndDropImage": "Görsel dosyasını Sürükle & Bırak", - "hoveredDragAndDrop": "Dosya(lar)ı buraya sürükleyip bırakın", - "extractPDF": "PDF Çıkarılıyor..." - }, - "releases": { - "footer": "Sürümler", - "title": "Sürüm Notları", - "header": "Sürüm Notları", - "current": { - "version": "Mevcut Sürüm" - }, - "note": "Sürüm notları yalnızca İngilizce dilinde mevcuttur" - }, - "cookieBanner": { - "popUp": { - "title": "Çerezleri Nasıl Kullanıyoruz", - "description": { - "1": "Stirling PDF’yi sizin için daha iyi çalıştırmak için çerezler ve diğer teknolojileri kullanıyoruz — araçlarımızı geliştirmemize ve seveceğiniz özellikler oluşturmamıza yardımcı oluyorlar.", - "2": "İstemiyorsanız, ‘Hayır Teşekkürler’ butonuna tıklayarak yalnızca temel, gerekli çerezleri etkinleştirebilirsiniz." - }, - "acceptAllBtn": "Tamam", - "acceptNecessaryBtn": "Hayır Teşekkürler", - "showPreferencesBtn": "Tercihleri Yönet" - }, - "preferencesModal": { - "title": "Onay Tercih Merkezi", - "acceptAllBtn": "Tümünü Kabul Et", - "acceptNecessaryBtn": "Tümünü Reddet", - "savePreferencesBtn": "Tercihleri Kaydet", - "closeIconLabel": "Kapat", - "serviceCounterLabel": "Hizmet|Hizmetler", - "subtitle": "Çerez Kullanımı", - "description": { - "1": "Stirling PDF, deneyiminizi geliştirmek ve araçlarımızın nasıl kullanıldığını anlamak için çerezler ve benzeri teknolojiler kullanır. Bu, performansı iyileştirmemize, önemsediğiniz özellikleri geliştirmemize ve kullanıcılarımıza sürekli destek sağlamamıza yardımcı olur.", - "2": "Stirling PDF, kullandığınız belgelerin içeriğini asla takip edemez veya erişemez.", - "3": "Gizliliğiniz ve güveniniz bizim için en önemli şeydir." - }, - "necessary": { - "title": { - "1": "Kesinlikle Gerekli Çerezler", - "2": "Her Zaman Etkin" - }, - "description": "Bu çerezler, web sitesinin düzgün çalışabilmesi için gereklidir. Gizlilik tercihlerinizi ayarlama, giriş yapma ve form doldurma gibi temel işlevleri mümkün kılarlar — bu nedenle devre dışı bırakılamazlar." - }, - "analytics": { - "title": "Analitik", - "description": "Bu çerezler, araçlarımızın nasıl kullanıldığını anlamamıza yardımcı olur, böylece topluluğumuzun en çok değer verdiği özellikleri geliştirmeye odaklanabiliriz. İçiniz rahat olsun — Stirling PDF, belgelerinizin içeriğini asla takip etmez ve etmeyecektir." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/uk-UA/translation.json b/frontend/dist/locales/uk-UA/translation.json deleted file mode 100644 index d87033abf..000000000 --- a/frontend/dist/locales/uk-UA/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Розмір шрифту", - "fontName": "Назва шрифту", - "title": "Додати номери сторінок", - "header": "Додати номери сторінок", - "selectText": { - "1": "Виберіть PDF-файл:", - "2": "Розмір поля", - "3": "Позиція", - "4": "Стартовий номер", - "5": "Сторінки для нумерації", - "6": "Свій текст" - }, - "customTextDesc": "Користувацький текст", - "numberPagesDesc": "Які сторінки нумерувати, за замовчуванням 'всі', також приймає 1-5 або 2,5,9 тощо.", - "customNumberDesc": "За замовчуванням {n}, також можна використовувати 'Сторінка {n} з {total}', 'Текст-{n}', '{filename}-{n}'", - "submit": "Додати номери сторінок" - }, - "pdfPrompt": "Оберіть PDF(и)", - "multiPdfPrompt": "Оберіть PDFи (2+)", - "multiPdfDropPrompt": "Оберіть (або перетягніть) всі необхідні PDFи", - "imgPrompt": "Оберіть зображення(я)", - "genericSubmit": "Надіслати", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Увага: Цей процес може тривати до хвилини в залежності від розміру файлу.", - "pageOrderPrompt": "Порядок сторінок (введіть список номерів сторінок через кому):", - "pageSelectionPrompt": "Користувацький вибір сторінки (введіть список номерів сторінок через кому 1,5,6 або функції типу 2n+1) :", - "goToPage": "Вперед", - "true": "Правда", - "false": "Брехня", - "unknown": "Невідомо", - "save": "Зберегти", - "saveToBrowser": "Зберегти в браузері", - "close": "Закрити", - "filesSelected": "файлів обрано", - "noFavourites": "Немає вибраного", - "downloadComplete": "Завантаження завершено", - "bored": "Нудно чекати?", - "alphabet": "Алфавіт", - "downloadPdf": "Завантажити PDF", - "text": "Текст", - "font": "Шрифт", - "selectFillter": "-- Вибрати --", - "pageNum": "номер сторінки", - "sizes": { - "small": "Малий", - "medium": "Середній", - "large": "Великий", - "x-large": "Дуже великий" - }, - "error": { - "pdfPassword": "Документ PDF захищено паролем, і пароль не був наданий або був невірним", - "_value": "Помилка", - "sorry": "Вибачте за незручності!", - "needHelp": "Потрібна допомога / Знайшли проблему?", - "contactTip": "Якщо у вас досі виникають проблеми, не соромтеся звертатися до нас за допомогою. Ви можете надіслати запит на нашій сторінці GitHub або зв'язатися з нами через Discord:", - "404": { - "head": "404 - Сторінку не знайдено | Ой, ми заплуталися в коді!", - "1": "Ми не можемо знайти сторінку, яку ви шукаєте.", - "2": "Щось пішло не так" - }, - "github": "Надіслати запит на GitHub", - "showStack": "Показати стек викликів", - "copyStack": "Скопіювати стек викликів", - "githubSubmit": "GitHub - Надіслати запит", - "discordSubmit": "Discord - Надіслати повідомлення підтримки" - }, - "delete": "Видалити", - "username": "Ім'я користувача", - "password": "Пароль", - "welcome": "Ласкаво просимо", - "property": "Властивість", - "black": "Чорний", - "white": "Білий", - "red": "Червоний", - "green": "Зелений", - "blue": "Синій", - "custom": "Звичай...", - "WorkInProgess": "Робота триває, може не працювати або глючити, будь ласка, повідомляйте про будь-які проблеми!", - "poweredBy": "Працює на", - "yes": "Так", - "no": "Ні", - "changedCredsMessage": "Облікові дані змінено!", - "notAuthenticatedMessage": "Користувач не пройшов перевірку автентичності.", - "userNotFoundMessage": "Користувача не знайдено.", - "incorrectPasswordMessage": "Поточний пароль невірний.", - "usernameExistsMessage": "Нове ім'я користувача вже існує.", - "invalidUsernameMessage": "Недійсне ім’я користувача, ім’я користувача може містити лише літери, цифри та наступні спеціальні символи @._+- або має бути дійсною електронною адресою.", - "invalidPasswordMessage": "Пароль не повинен бути порожнім і не повинен мати пробілів на початку або в кінці.", - "confirmPasswordErrorMessage": "Новий пароль і підтвердження нового пароля мають збігатися.", - "deleteCurrentUserMessage": "Неможливо видалити користувача, який увійшов в систему.", - "deleteUsernameExistsMessage": "Ім'я користувача не існує і не може бути видалено.", - "downgradeCurrentUserMessage": "Неможливо понизити роль поточного користувача", - "disabledCurrentUserMessage": "Поточного користувача неможливо вимкнути", - "downgradeCurrentUserLongMessage": "Неможливо понизити роль поточного користувача. Отже, поточний користувач не відображатиметься.", - "userAlreadyExistsOAuthMessage": "Користувач уже існує як користувач OAuth2.", - "userAlreadyExistsWebMessage": "Користувач уже існує як веб-користувач.", - "oops": "Упс!", - "help": "Допомога", - "goHomepage": "До головної сторінки", - "joinDiscord": "Приєднуйтесь до нашого Discord серверу", - "seeDockerHub": "Переглянути Docker Hub", - "visitGithub": "Переглянути Github репозиторій", - "donate": "Задонатити", - "color": "Колір", - "sponsor": "Спонсор", - "info": "Інформація", - "pro": "Pro", - "page": "Сторінка", - "pages": "Сторінки", - "loading": "Завантаження...", - "addToDoc": "Додати до документу", - "reset": "Скинути", - "apply": "Застосувати", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Політика конфіденційності", - "terms": "Правила та умови", - "accessibility": "Доступність", - "cookie": "Політика використання файлів cookie", - "impressum": "Вихідні дані", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Меню конвеєрної обробки (Бета)", - "uploadButton": "Завантажити Користувацький", - "configureButton": "Налаштування", - "defaultOption": "Користувацький", - "submitButton": "Надіслати", - "help": "Довідка з конвеєрної обробки", - "scanHelp": "Довідка зі сканування папок", - "deletePrompt": "Ви впевнені, що хочете видалити конвеєр?", - "tags": "автоматизація,послідовність,сценарій,scripted,batch-process", - "title": "Пайплайн" - }, - "pipelineOptions": { - "header": "Налаштування конвеєрної обробки", - "pipelineNameLabel": "Назва конвеєра", - "saveSettings": "Зберегти налаштування операції", - "pipelineNamePrompt": "Введіть назву конвеєра тут", - "selectOperation": "Вибрати операцію", - "addOperationButton": "Додати операцію", - "pipelineHeader": "Конвеєр:", - "saveButton": "Завантажити", - "validateButton": "Перевірити" - }, - "enterpriseEdition": { - "button": "Оновлення до Pro", - "warning": "Ця функція доступна лише для користувачів Pro.", - "yamlAdvert": "Stirling PDF Pro підтримує конфігураційні файли YAML та інші функції SSO.", - "ssoAdvert": "Шукаєте більше функцій керування користувачами? Перегляньте Stirling PDF Pro" - }, - "analytics": { - "title": "Бажаєте покращити Stirling PDF?", - "paragraph1": "Stirling PDF увімкнув аналітику, щоб допомогти нам покращити продукт. Ми не відстежуємо жодну особисту інформацію чи вміст файлів.", - "paragraph2": "Увімкніть аналітику, щоб допомогти Stirling-PDF розвиватися та дозволити нам краще розуміти наших користувачів.", - "enable": "Увімкнути аналітику", - "disable": "Вимкнути аналітику", - "settings": "Ви можете змінити параметри аналітики у файлі config/settings.yml" - }, - "navbar": { - "favorite": "Обране", - "recent": "Новий і нещодавно оновлений", - "darkmode": "Темний режим", - "language": "Мови", - "settings": "Налаштування", - "allTools": "Інструменти", - "multiTool": "Мультіінструмент", - "search": "Пошук", - "sections": { - "organize": "Організувати", - "convertTo": "Конвертувати в PDF", - "convertFrom": "Конвертувати з PDF", - "security": "Підпис та Безпека", - "advance": "Додаткове", - "edit": "Перегляд та Редагування", - "popular": "Популярне" - } - }, - "settings": { - "title": "Налаштування", - "update": "Доступне оновлення", - "updateAvailable": "Зараз встановлена версія {0}. Нова версія ({1}) доступна.", - "appVersion": "Версія додатку:", - "downloadOption": { - "title": "Виберіть варіант завантаження (для завантаження одного файлу без zip):", - "1": "Відкрити в тому ж вікні", - "2": "Відкрити в новому вікні", - "3": "Завантажити файл" - }, - "zipThreshold": "Zip-файли, коли кількість завантажених файлів перевищує", - "signOut": "Вийти", - "accountSettings": "Налаштування акаунта", - "bored": { - "help": "Вмикає гру «пасхальне яйце»." - }, - "cacheInputs": { - "name": "Зберігати дані форм", - "help": "Увімкнути для збереження раніше використаних вхідних даних для майбутніх прогонів" - } - }, - "changeCreds": { - "title": "Змінити облікові дані", - "header": "Оновіть дані вашого облікового запису", - "changePassword": "Ви використовуєте заводські облікові дані для входу. Будь ласка, введіть новий пароль", - "newUsername": "Нове ім'я користувача", - "oldPassword": "Поточний пароль", - "newPassword": "Новий пароль", - "confirmNewPassword": "Підтвердіть новий пароль", - "submit": "Надіслати зміни" - }, - "account": { - "title": "Налаштування акаунта", - "accountSettings": "Налаштування акаунта", - "adminSettings": "Налаштування адміністратора - Перегляд і додавання користувачів", - "userControlSettings": "Налаштування контролю користувача", - "changeUsername": "Змінити ім'я користувача", - "newUsername": "Нове ім'я користувача", - "password": "Підтвердження пароля", - "oldPassword": "Старий пароль", - "newPassword": "Новий пароль", - "changePassword": "Змінити пароль", - "confirmNewPassword": "Підтвердіть новий пароль", - "signOut": "Вийти", - "yourApiKey": "Ваш API-ключ", - "syncTitle": "Синхронізувати налаштування браузера з обліковим записом", - "settingsCompare": "Порівняння налаштувань:", - "property": "Властивість", - "webBrowserSettings": "Налаштування веб-браузера", - "syncToBrowser": "Синхронізувати обліковий запис -> Браузер", - "syncToAccount": "Синхронізувати обліковий запис <- Браузер" - }, - "adminUserSettings": { - "title": "Налаштування контролю користувача", - "header": "Налаштування контролю користувача адміністратора", - "admin": "Адміністратор", - "user": "Користувач", - "addUser": "Додати нового користувача", - "deleteUser": "Видалити користувача", - "confirmDeleteUser": "Видалити цього користувача?", - "confirmChangeUserStatus": "Чи потрібно вимкнути/ввімкнути користувача?", - "usernameInfo": "Ім’я користувача може містити лише літери, цифри та наступні спеціальні символи @._+- або має бути дійсною електронною адресою.", - "roles": "Ролі", - "role": "Роль", - "actions": "Дії", - "apiUser": "Обмежений користувач API", - "extraApiUser": "Додатковий обмежений користувач API", - "webOnlyUser": "Тільки веб-користувач", - "demoUser": "Демо-користувач (без налаштованих параметрів)", - "internalApiUser": "Внутрішній користувач API", - "forceChange": "Примусити користувача змінити пароль при вході в систему", - "submit": "Зберегти користувача", - "changeUserRole": "Змінити роль користувача", - "authenticated": "Автентифіковано", - "editOwnProfil": "Редагувати власний профіль", - "enabledUser": "активний користувач", - "disabledUser": "заблокований користувач", - "activeUsers": "Активні користувачі:", - "disabledUsers": "Заблоковані користувачі:", - "totalUsers": "Всього користувачів:", - "lastRequest": "Останній запит", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Статистика кінцевих точок", - "header": "Статистика кінцевих точок", - "top10": "Топ 10", - "top20": "Топ 20", - "all": "Всі", - "refresh": "Оновити", - "includeHomepage": "Включити головну сторінку ('/')", - "includeLoginPage": "Включити сторінку входу ('/login')", - "totalEndpoints": "Всього кінцевих точок", - "totalVisits": "Всього відвідувань", - "showing": "Показано", - "selectedVisits": "Вибрані відвідування", - "endpoint": "Кінцева точка", - "visits": "Відвідування", - "percentage": "Відсоток", - "loading": "Завантаження...", - "failedToLoad": "Не вдалося завантажити дані кінцевих точок. Спробуйте оновити.", - "home": "Головна", - "login": "Вхід", - "top": "Топ", - "numberOfVisits": "Кількість відвідувань", - "visitsTooltip": "Відвідування: {0} ({1}% від загальної кількості)", - "retry": "Повторити" - }, - "database": { - "title": "Імпорт/експорт бази даних", - "header": "Імпорт/експорт бази даних", - "fileName": "Ім'я файлу", - "creationDate": "Дата створення", - "fileSize": "Розмір файлу", - "deleteBackupFile": "Видалити файл резервної копії", - "importBackupFile": "Імпортувати файл резервної копії", - "createBackupFile": "Створити файл резервної копії", - "downloadBackupFile": "Завантажте файл резервної копії", - "info_1": "При імпорті даних важливо забезпечити правильну структуру. Якщо ви не впевнені у своїх діях, зверніться за професійною допомогою. Помилка в структурі може призвести до збоїв у роботі програми та призвести до повної непрацездатності.", - "info_2": "Ім'я файлу під час завантаження не має значення. Воно буде перейменовано на формат backup_user_yyyyMMddHHmm.sql для забезпечення одноманітності найменувань.", - "submit": "Імпорт резервної копії", - "importIntoDatabaseSuccessed": "Імпорт до бази даних виконано вдало", - "backupCreated": "Резервне копіювання бази даних успішно", - "fileNotFound": "Файл не знайдено", - "fileNullOrEmpty": "Файл не має бути пустим", - "failedImportFile": "Не вдалося імпортувати файл", - "notSupported": "Ця функція недоступна для вашого підключення до бази даних." - }, - "session": { - "expired": "Ваш сеанс закінчився. Будь ласка, оновіть сторінку та повторіть спробу.", - "refreshPage": "Оновити сторінку" - }, - "home": { - "desc": "Ваше локальне рішення для всіх потреб, пов'язаних із PDF.", - "searchBar": "Пошук функцій...", - "viewPdf": { - "title": "Перегляд/редагування PDF", - "desc": "Перегляд, анотація, додавання тексту або зображень" - }, - "setFavorites": "Налаштувати обрані", - "hideFavorites": "Приховати обрані", - "showFavorites": "Показати обрані", - "legacyHomepage": "Стара сторінка", - "newHomePage": "Спробуйте нову сторінку!", - "alphabetical": "Абеткою", - "globalPopularity": "Глобальною поулярністю", - "sortBy": "Сортувати за:", - "multiTool": { - "title": "Мультіінструмент PDF", - "desc": "Об'єднання, поворот, зміна порядку та видалення сторінок" - }, - "merge": { - "title": "Об'єднати", - "desc": "Легко об'єднуйте кілька PDF-файлів у один." - }, - "split": { - "title": "Розділити", - "desc": "Розділіть PDF-файли на кілька документів" - }, - "rotate": { - "title": "Повернути", - "desc": "Легко повертайте ваші PDF-файли." - }, - "imageToPdf": { - "title": "Зображення в PDF", - "desc": "Перетворення зображення (PNG, JPEG, GIF) в PDF." - }, - "pdfToImage": { - "title": "PDF в зображення", - "desc": "Перетворення PDF в зображення. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Реорганізація", - "desc": "Видалення/перестановка сторінок у будь-якому порядку" - }, - "addImage": { - "title": "Додати зображення", - "desc": "Додає зображення у вказане місце в PDF (в розробці)" - }, - "watermark": { - "title": "Додати водяний знак", - "desc": "Додайте свій водяний знак до документа PDF." - }, - "permissions": { - "title": "Змінити дозволи", - "desc": "Змініть дозволи вашого документа PDF" - }, - "removePages": { - "title": "Видалення", - "desc": "Видаліть непотрібні сторінки з документа PDF." - }, - "addPassword": { - "title": "Додати пароль", - "desc": "Зашифруйте документ PDF паролем." - }, - "removePassword": { - "title": "Видалити пароль", - "desc": "Зніміть захист паролем з вашого документа PDF." - }, - "compressPdfs": { - "title": "Стиснути", - "desc": "Стискайте PDF-файли, щоб зменшити їх розмір." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Змінити метадані", - "desc": "Змінити/видалити/додати метадані з документа PDF" - }, - "fileToPDF": { - "title": "Конвертувати файл в PDF", - "desc": "Конвертуйте майже будь-який файл в PDF (DOCX, PNG, XLS, PPT, TXT та інші)" - }, - "ocr": { - "title": "OCR/Очищення сканування", - "desc": "Очищення сканування та виявлення тексту на зображеннях у файлі PDF та повторне додавання його як текст." - }, - "extractImages": { - "title": "Витягнути зображення", - "desc": "Витягує всі зображення з PDF і зберігає їх у zip" - }, - "pdfToPDFA": { - "title": "PDF в PDF/A", - "desc": "Перетворення PDF в PDF/A для довготривалого зберігання" - }, - "PDFToWord": { - "title": "PDF в Word", - "desc": "Перетворення PDF в формати Word (DOC, DOCX та ODT)" - }, - "PDFToPresentation": { - "title": "PDF в презентацію", - "desc": "Перетворення PDF в формати презентацій (PPT, PPTX та ODP)" - }, - "PDFToText": { - "title": "PDF в Text/RTF", - "desc": "Перетворення PDF в текстовий або RTF формат" - }, - "PDFToHTML": { - "title": "PDF в HTML", - "desc": "Перетворення PDF в формат HTML" - }, - "PDFToXML": { - "title": "PDF в XML", - "desc": "Перетворення PDF в формат XML" - }, - "ScannerImageSplit": { - "title": "Виявлення/розділення відсканованих фотографій", - "desc": "Розділяє кілька фотографій з фото/PDF" - }, - "sign": { - "title": "Підпис", - "desc": "Додає підпис до PDF за допомогою малюнка, тексту або зображення" - }, - "flatten": { - "title": "Знеактивування", - "desc": "Видалення всіх інтерактивних елементів та форм з PDF" - }, - "repair": { - "title": "Ремонт", - "desc": "Намагається відновити пошкоджений/зламаний PDF" - }, - "removeBlanks": { - "title": "Видалити порожні сторінки", - "desc": "Виявляє та видаляє порожні сторінки з документа" - }, - "removeAnnotations": { - "title": "Видалити анотації", - "desc": "Видаляє всі коментарі/анотації з PDF" - }, - "compare": { - "title": "Порівняння", - "desc": "Порівнює та показує різницю між двома PDF-документами" - }, - "certSign": { - "title": "Підписати сертифікатом", - "desc": "Підписати PDF сертифікатом/ключем (PEM/P12)" - }, - "removeCertSign": { - "title": "Видалити підпис сертифікатом", - "desc": "Видалити підпис сертифікатом з PDF-документу" - }, - "pageLayout": { - "title": "Об'єднати сторінки", - "desc": "Об'єднання кількох сторінок документа PDF в одну сторінку" - }, - "scalePages": { - "title": "Змінити розмір/масштаб сторінки", - "desc": "Змінити розмір/масштаб сторінки та/або її вмісту." - }, - "pipeline": { - "title": "Конвеєр (розширений)", - "desc": "Виконуйте кілька дій з PDF-файлами, визначаючи сценарії конвеєрної обробки." - }, - "add-page-numbers": { - "title": "Додати номера сторінок", - "desc": "Додає номера сторінок по всьому документу в заданому місці" - }, - "auto-rename": { - "title": "Автоматичне перейменування PDF-файлу", - "desc": "Автоматичне перейменування файлу PDF на основі його виявленого заголовку" - }, - "adjust-contrast": { - "title": "Налаштування кольорів/контрастності", - "desc": "Налаштування контрастності, насиченості та яскравості файлу PDF" - }, - "crop": { - "title": "Обрізати PDF-файл", - "desc": "Обрізати PDF-файл, щоб зменшити його розмір (текст залишається!)" - }, - "autoSplitPDF": { - "title": "Автоматичне розділення сторінок", - "desc": "Автоматичне розділення відсканованого PDF-файлу за допомогою фізичного роздільника відсканованих сторінок QR-коду" - }, - "sanitizePdf": { - "title": "Санітарна обробка", - "desc": "Видалення скриптів та інших елементів з PDF-файлів" - }, - "URLToPDF": { - "title": "URL/сайт в PDF", - "desc": "Конвертує будь-який http(s)URL у PDF" - }, - "HTMLToPDF": { - "title": "HTML в PDF", - "desc": "Конвертує будь-який HTML-файл або zip-файл у PDF." - }, - "MarkdownToPDF": { - "title": "Markdown в PDF", - "desc": "Конвертує будь-який файл Markdown у PDF" - }, - "PDFToMarkdown": { - "title": "PDF в Markdown", - "desc": "Конвертує будь-який файл PDF у Markdown" - }, - "getPdfInfo": { - "title": "Отримати ВСЮ інформацію у форматі PDF", - "desc": "Збирає будь-яку можливу інформацію у PDF-файлах." - }, - "extractPage": { - "title": "Видобути сторінку(и)", - "desc": "Видобуває обрані сторінки з PDF" - }, - "PdfToSinglePage": { - "title": "PDF на одну велику сторінку", - "desc": "Об'єднує всі сторінки PDF в одну велику сторінку." - }, - "showJS": { - "title": "Показати JavaScript", - "desc": "Шукає та відображає будь-який JS, вбудований у PDF-файл." - }, - "autoRedact": { - "title": "Автоматичне редагування", - "desc": "Автоматичне затемнення (чорніння) тексту в PDF на основі вхідного тексту" - }, - "redact": { - "title": "Ручне редагування", - "desc": "Редагує PDF-файл на основі виділеного тексту, намальованих форм і/або вибраних сторінок" - }, - "tableExtraxt": { - "title": "PDF в CSV", - "desc": "Видобуває таблиці з PDF та перетворює їх у CSV" - }, - "autoSizeSplitPDF": { - "title": "Автоматичне розділення за розміром/кількістю", - "desc": "Розділяє один PDF на кілька документів на основі розміру, кількості сторінок або кількості документів" - }, - "overlay-pdfs": { - "title": "Накладення PDF", - "desc": "Накладення одного PDF поверх іншого PDF" - }, - "split-by-sections": { - "title": "Розділення PDF за секціями", - "desc": "Розділення кожної сторінки PDF на менші горизонтальні та вертикальні секції" - }, - "AddStampRequest": { - "title": "Додати печатку на PDF", - "desc": "Додавання текстової або зображення печатки у вказані місця" - }, - "removeImagePdf": { - "title": "Видалити зображення", - "desc": "Видаляє зображення з PDF для зменшення розміру файлу" - }, - "splitPdfByChapters": { - "title": "Розділити PDF за розділами", - "desc": "Розділяє PDF на кілька файлів на основі структури його розділів" - }, - "validateSignature": { - "title": "Перевірка підпису PDF", - "desc": "Перевірка цифрових підписів та сертифікатів у PDF-документах" - }, - "replaceColorPdf": { - "title": "Заміна та інверсія кольору", - "desc": "Замінює колір тексту та фону у PDF та інвертує всі кольори PDF для зменшення розміру файлу" - } - }, - "viewPdf": { - "tags": "перегляд,читання,анотації,текст,зображення", - "title": "Перегляд/редагування PDF", - "header": "Переглянути PDF" - }, - "multiTool": { - "tags": "мультиінструмент,багатоопераційний,інтерфейс,перетягування,клієнтська частина,інтерактивний", - "title": "Мультиінструмент PDF", - "header": "Мультиінструмент PDF", - "uploadPrompts": "Ім'я файлу", - "selectAll": "Вибрати все", - "deselectAll": "Скасувати вибір усіх", - "selectPages": "Вибір сторінки", - "selectedPages": "Вибрані сторінки", - "page": "Сторінка", - "deleteSelected": "Видалити вибрані", - "downloadAll": "Експорт", - "downloadSelected": "Експорт вибраних", - "insertPageBreak": "Вставити розрив сторінки", - "addFile": "Додати файл", - "rotateLeft": "Повернути вліво", - "rotateRight": "Повернути праворуч", - "split": "Розділити", - "moveLeft": "Перемістити вліво", - "moveRight": "Перемістити праворуч", - "delete": "Видалити", - "dragDropMessage": "Вибрано сторінок", - "undo": "Скасувати", - "redo": "Повторити" - }, - "merge": { - "tags": "об'єднання,операції зі сторінками,серверна частина", - "title": "Об'єднати", - "header": "Об'єднання кількох PDF-файлів (2+)", - "sortByName": "Сортування за ім'ям", - "sortByDate": "Сортування за датою", - "removeCertSign": "Видалити цифровий підпис у об’єднаному файлі?", - "submit": "Об'єднати" - }, - "split": { - "tags": "операції зі сторінками,розділення,багатосторінковий,вирізання,серверна частина", - "title": "Розділити PDF", - "header": "Розділити PDF", - "desc": { - "1": "Числа, які ви вибрали, це номери сторінок, на яких ви хочете зробити розділ.", - "2": "Таким чином, вибір 1,3,7-8 розділить 10-сторінковий документ на 6 окремих PDF-файлів з:", - "3": "Документ #1: Сторінка 1", - "4": "Документ #2: Сторінки 2 і 3", - "5": "Документ #3: Сторінки 4, 5 і 6", - "6": "Документ #4: Сторінка 7", - "7": "Документ #5: Сторінка 8", - "8": "Документ #6: Сторінки 9 і 10" - }, - "splitPages": "Введіть сторінки для розділення:", - "submit": "Розділити" - }, - "rotate": { - "tags": "серверна частина", - "title": "Повернути PDF", - "header": "Повернути PDF", - "selectAngle": "Виберіть кут повороту (кратний 90 градусам):", - "submit": "Повернути" - }, - "imageToPdf": { - "tags": "конвертація,зображення,jpg,картинка,фото" - }, - "pdfToImage": { - "tags": "конвертація,зображення,jpg,картинка,фото", - "title": "PDF в зображення", - "header": "PDF в зображення", - "selectText": "Формат зображення", - "singleOrMultiple": "Тип результату зображення", - "single": "Одне велике зображення", - "multi": "Декілька зображень", - "colorType": "Тип кольору", - "color": "Колір", - "grey": "Відтінки сірого", - "blackwhite": "Чорно-білий (може втратити дані!)", - "submit": "Конвертувати", - "info": "Python не встановлено. Необхідно для конвертації WebP.", - "placeholder": "(наприклад 1,2,8 або 4,7,12-16 або 2n-1)" - }, - "pdfOrganiser": { - "tags": "двосторонній друк,парні,непарні,сортування,переміщення", - "title": "Організатор сторінок", - "header": "Організатор PDF-сторінок", - "submit": "Переупорядкувати сторінки", - "mode": { - "_value": "Режим", - "1": "Користувацький порядок сторінок", - "2": "Зворотній порядок", - "3": "Сортування дуплексом", - "4": "Сортування брошурою", - "5": "Сортування брошурою зі степлером з боку", - "6": "Розділення на парні та непарні сторінки", - "7": "Видалити першу", - "8": "Видалити останню", - "9": "Видалити першу та останню", - "10": "Об'єднання парних-непарних", - "11": "Дублювати всі сторінки" - }, - "placeholder": "(наприклад, 1,3,2 або 4-8,2,10-12 або 2n-1)" - }, - "addImage": { - "tags": "зображення,jpg,картинка,фото", - "title": "Додати зображення", - "header": "Додати зображення в PDF", - "everyPage": "Кожна сторінка?", - "upload": "Додати зображення", - "submit": "Додати зображення" - }, - "watermark": { - "tags": "текст,повторний,мітка,власний,авторське право,торговельна марка,зображення,jpg,картинка,фото", - "title": "Додати водяний знак", - "header": "Додати водяний знак", - "customColor": "Користувацький колір тексту", - "selectText": { - "1": "Виберіть PDF, щоб додати водяний знак:", - "2": "Текст водяного знаку:", - "3": "Розмір шрифту:", - "4": "Обертання (0-360):", - "5": "Горизонтальний інтервал (проміжок між кожним водяним знаком по горизонталі):", - "6": "Вертикальний інтервал (проміжок між кожним водяним знаком по вертикалі):", - "7": "Непрозорість (0% - 100%):", - "8": "Тип водяного знаку:", - "9": "Зображення водяного знаку:", - "10": "Кевертувати PDF в PDF-Image" - }, - "submit": "Додати водяний знак", - "type": { - "1": "Текст", - "2": "Зображення" - } - }, - "permissions": { - "tags": "читання,запис,редагування,друк", - "title": "Змінити дозволи", - "header": "Змінити дозволи", - "warning": "Попередження про те, що ці дозволи не можна змінити, рекомендується встановити їх за допомогою пароля на сторінці додавання пароля.", - "selectText": { - "1": "Виберіть PDF, щоб змінити дозволи", - "2": "Дозволи на встановлення", - "3": "Запобігти збірці документа", - "4": "Запобігти вилученню контенту", - "5": "Запобігти вилученню для доступності", - "6": "Заборонити заповнення форм", - "7": "Запобігти модифікації", - "8": "Заборонити модифікацію анотацій", - "9": "Заборонити друк", - "10": "Заборонити друк різних форматів" - }, - "submit": "Змінити" - }, - "removePages": { - "tags": "видалити сторінки,видалення сторінок" - }, - "addPassword": { - "tags": "безпека,захист", - "title": "Додати пароль", - "header": "Додати пароль (зашифрувати)", - "selectText": { - "1": "Оберіть PDF для шифрування", - "2": "Пароль", - "3": "Довжина ключа шифрування", - "4": "Вищі значення сильніші, але нижчі значення мають кращу сумісність.", - "5": "Дозволи на встановлення", - "6": "Запобігти збірці документа", - "7": "Запобігти вилученню контенту", - "8": "Запобігти вилученню для доступності", - "9": "Заборонити заповнення форм", - "10": "Запобігти модифікації", - "11": "Заборонити модифікацію анотацій", - "12": "Заборонити друк", - "13": "Заборонити друк різних форматів", - "14": "Власницький пароль", - "15": "Обмежує, що можна робити з документом після його відкриття (не підтримується всіма програмами читання)", - "16": "Обмежує відкриття самого документа" - }, - "submit": "Шифрувати" - }, - "removePassword": { - "tags": "безпека,розшифровка,захист,видалення пароля", - "title": "Видалити пароль", - "header": "Видалити пароль (Розшифрувати)", - "selectText": { - "1": "Виберіть PDF для розшифрування", - "2": "Пароль" - }, - "submit": "Видалити" - }, - "compressPdfs": { - "tags": "стиск,маленький,крихітний" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "заголовок,автор,дата,створення,час,видавець,виробник,статистика", - "title": "Заголовок:", - "header": "Змінити метадані", - "selectText": { - "1": "Будь ласка, відредагуйте змінні, які ви хочете змінити", - "2": "Видалити всі метадані", - "3": "Показати користувацькі метадані:", - "4": "Інші метадані:", - "5": "Додати користувацький запис метаданих" - }, - "author": "Автор:", - "creationDate": "Дата створення (yyyy/MM/dd HH:mm:ss):", - "creator": "Створювач:", - "keywords": "Ключові слова:", - "modDate": "Дата зміни (yyyy/MM/dd HH:mm:ss):", - "producer": "Виробник:", - "subject": "Тема:", - "trapped": "Пастка:", - "submit": "Змінити" - }, - "fileToPDF": { - "tags": "перетворення,формат,документ,картинка,презентація,текст,конвертація,офіс,документи,word,excel,powerpoint", - "title": "Файл у PDF", - "header": "Конвертувати будь-який файл у PDF", - "credit": "Цей сервіс використовує LibreOffice та Unoconv для перетворення файлів.", - "supportedFileTypesInfo": "Підтримувані типи файлів", - "supportedFileTypes": "Підтримувані типи файлів повинні включати нижченаведені, однак повний оновлений список підтримуваних форматів дивіться у документації LibreOffice.", - "submit": "Перетворити у PDF" - }, - "ocr": { - "tags": "розпізнавання,текст,зображення,сканування,читання,ідентифікація,виявлення,редагований", - "title": "OCR/Очищення сканування", - "header": "Очищення сканування / OCR (Optical Character Recognition) Розпізнавання тексту", - "selectText": { - "1": "Виберіть мови, які повинні бути виявлені у PDF-файлі (перелічені ті, які виявлені на даний момент):", - "2": "Створіть текстовий файл, що містить текст OCR, разом із PDF-файлом, обробленим OCR.", - "3": "Правильні сторінки були відскановані під перекошеним кутом шляхом повороту їх на місце", - "4": "Очистіть сторінку, щоб зменшити шанси, що OCR знайде текст на фоновому шумі. (без зміни виходу)", - "5": "Очистіть сторінку, щоб зменшити шанси, що OCR знайде текст на фоновому шумі, підтримує очищення виводу.", - "6": "Ігнорує сторінки з інтерактивним текстом, розпізнає лише сторінки з зображеннями", - "7": "Примусове розпізнавання символів, буде розпізнавати кожну сторінку, видаляючи всі елементи початкового тексту", - "8": "Звичайний (буде помилка, якщо PDF містить текст)", - "9": "Додаткові налаштування", - "10": "Режим OCR", - "11": "Видалити зображення після OCR (видаляє ВСІ зображення, корисно лише в тому випадку, якщо вони є частиною етапу перетворення)", - "12": "Тип рендеру (розширений)" - }, - "help": "Прочитайте цю документацію про те, як використовувати це для інших мов і/або використовувати не в докері.", - "credit": "Цей сервіс використовує qpdf та Tesseract для OCR.", - "submit": "Обробка PDF з OCR" - }, - "extractImages": { - "tags": "зображення,фото,збереження,архів,zip,захоплення,захоплення", - "title": "Витягнути зображення", - "header": "Витягнути зображення", - "selectText": "Виберіть формат зображення для перетворення витягнутих зображень у", - "allowDuplicates": "Зберігати дублікати зображень", - "submit": "Витягнути" - }, - "pdfToPDFA": { - "tags": "архів,довгостроковий,стандартний,конверсія,зберігання,консервація", - "title": "PDF в PDF/A", - "header": "PDF в PDF/A", - "credit": "Цей сервіс використовує libreoffice для перетворення у формат PDF/A", - "submit": "Конвертувати", - "tip": "Наразі не працює для кількох вхідних файлів одночасно", - "outputFormat": "Вихідний формат", - "pdfWithDigitalSignature": "Цей PDF документ має цифровий підпис. Цей підпис буде видалений у наступному кроці." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,перетворення,формат,перетворення,офіс,microsoft,docfile", - "title": "PDF в Word", - "header": "PDF в Word", - "selectText": { - "1": "Формат вихідного файлу" - }, - "credit": "Цей сервіс використовує LibreOffice для перетворення файлів.", - "submit": "Конвертувати" - }, - "PDFToPresentation": { - "tags": "слайди,презентація,офіс,майкрософт", - "title": "PDF в Презентацію", - "header": "PDF в Презентацію", - "selectText": { - "1": "Формат вихідного файлу" - }, - "credit": "Цей сервіс використовує LibreOffice для перетворення файлів.", - "submit": "Конвертувати" - }, - "PDFToText": { - "tags": "richformat,richtextformat,формат rich text,rtf", - "title": "PDF в Text/RTF", - "header": "PDF в Text/RTF", - "selectText": { - "1": "Формат вихідного файлу" - }, - "credit": "Цей сервіс використовує LibreOffice для перетворення файлів.", - "submit": "Конвертувати" - }, - "PDFToHTML": { - "tags": "веб-контент,зручний для перегляду", - "title": "PDF в HTML", - "header": "PDF в HTML", - "credit": "Цей сервіс використовує pdftohtml для перетворення файлів.", - "submit": "Конвертувати" - }, - "PDFToXML": { - "tags": "вилучення даних,структурований вміст,взаємодія,перетворення,перетворення", - "title": "PDF в XML", - "header": "PDF в XML", - "credit": "Цей сервіс використовує LibreOffice для перетворення файлів.", - "submit": "Конвертувати" - }, - "ScannerImageSplit": { - "tags": "окремий,автоматичне визначення,сканування,кілька фотографій,упорядкування", - "selectText": { - "1": "Пороговий кут:", - "2": "Встановлює мінімальний абсолютний кут, необхідний для повороту зображення (за замовчуванням: 10).", - "3": "Толерантність:", - "4": "Визначає діапазон зміни кольору навколо передбачуваного кольору фону (за замовчуванням: 30).", - "5": "Мінімальна площа:", - "6": "Встановлює мінімальний поріг площі для фотографії (за замовчуванням: 10000).", - "7": "Мінімальна площа контуру:", - "8": "Встановлює мінімальний поріг площі контуру для фотографії", - "9": "Розмір рамки:", - "10": "Встановлює розмір додаваної та видаляної рамки, щоб запобігти появі білих рамок на виході (за замовчуванням: 1)." - }, - "info": "Python не встановлено. Він необхідний роботи." - }, - "sign": { - "tags": "авторизувати,ініціали,намальований-підпис,текстовий-підпис,зображення-підпис", - "title": "Підпис", - "header": "Підписати PDF", - "upload": "Завантажити зображення", - "draw": "Намалювати підпис", - "text": "Ввід тексту", - "clear": "Очистити", - "add": "Додати", - "saved": "Збережені підписи", - "save": "Зберегти підпис", - "personalSigs": "Особисті підписи", - "sharedSigs": "Загальні підписи", - "noSavedSigs": "Збережені підписи не знайдено", - "addToAll": "Додати на всі сторінки", - "delete": "Видалити", - "first": "Перша сторінка", - "last": "Остання сторінка", - "next": "Наступна сторінка", - "previous": "Попередня сторінка", - "maintainRatio": "Переключити збереження пропорцій", - "undo": "Скасувати", - "redo": "Повторити" - }, - "flatten": { - "tags": "flatten,статичний,дезактивувати,неінтерактивний, упорядкувати", - "title": "Згладжування", - "header": "Згладжування PDF", - "flattenOnlyForms": "Згладити тільки форми", - "submit": "Згладити" - }, - "repair": { - "tags": "виправити,відновити,виправити,відновити", - "title": "Ремонт", - "header": "Ремонт PDF", - "submit": "Ремонтувати" - }, - "removeBlanks": { - "tags": "очищення,упорядкування,без вмісту,упорядкування", - "title": "Видалити порожні", - "header": "Видалити порожні сторінки", - "threshold": "Поріг:", - "thresholdDesc": "Поріг для визначення того, наскільки білим має бути білий піксель", - "whitePercent": "Відсоток білого (%):", - "whitePercentDesc": "Загальний відсоток білого на сторінці, для видалення", - "submit": "Видалити порожні" - }, - "removeAnnotations": { - "tags": "коментарі,виділення,примітки,розмітка,видалення", - "title": "Видалити анотації", - "header": "Видалити анотації", - "submit": "Видалити" - }, - "compare": { - "tags": "диференціація,контраст,зміни,аналіз", - "title": "Порівняння", - "header": "Порівняння PDF", - "highlightColor": { - "1": "Колір виділення 1:", - "2": "Колір виділення 2:" - }, - "document": { - "1": "Документ 1", - "2": "Документ 2" - }, - "submit": "Порівняти", - "complex": { - "message": "Один або обидва надані документи є великими файлами, точність порівняння може бути знижена" - }, - "large": { - "file": { - "message": "Один або обидва надані документи занадто великі для обробки" - } - }, - "no": { - "text": { - "message": "Вибрані PDF-файли не містять текстового вмісту. Будь ласка, виберіть PDF-файли з текстом для порівняння." - } - } - }, - "certSign": { - "tags": "автентифікація,pem,p12,офіційний,шифрування", - "title": "Підпис сертифікатом", - "header": "Підпишіть PDF своїм сертифікатом (робота в процесі)", - "selectPDF": "Виберіть файл PDF для підпису:", - "jksNote": "Примітка: Якщо ваш тип сертифіката не зазначений нижче, будь ласка, конвертуйте його в файл сховища Java Keystore (.jks), використовуючи утиліту командного рядка keytool. Потім виберіть опцію файлу .jks нижче.", - "selectKey": "Виберіть файл закритого ключа (формат PKCS#8, може бути .pem або .der):", - "selectCert": "Виберіть файл сертифіката (формат X.509, може бути .pem або .der):", - "selectP12": "Виберіть файл сховища ключів PKCS#12 (.p12 або .pfx) (необов'язково, якщо він наданий, він повинен містити ваш закритий ключ і сертифікат):", - "selectJKS": "Виберіть файл сховища Java Keystore (.jks або .keystore):", - "certType": "Тип сертифіката", - "password": "Введіть пароль до сховища ключів або особистого ключа (якщо є):", - "showSig": "Показати підпис", - "reason": "Причина", - "location": "Місцезнаходження", - "name": "Ім'я", - "showLogo": "Показати логотип", - "submit": "Підписати PDF" - }, - "removeCertSign": { - "tags": "автентифікація,pem,p12,офіційний,розшифрувати", - "title": "Видалення підпису сертифікатом", - "header": "Видалення підпису сертифікатом з PDF документу", - "selectPDF": "Оберіть PDF-файл:", - "submit": "Видалити підпис" - }, - "pageLayout": { - "tags": "об'єднати,скласти,єдиний перегляд,упорядкувати", - "title": "Многосторінковий макет", - "header": "Многосторінковий макет", - "pagesPerSheet": "Сторінок на одному аркуші:", - "addBorder": "Додати рамки", - "submit": "Відправити" - }, - "scalePages": { - "tags": "змінити розмір,змінити,розмір,адаптувати", - "title": "Відрегулювати масштаб сторінки", - "header": "Відрегулювати масштаб сторінки", - "pageSize": "Розмір сторінки документа.", - "keepPageSize": "Оригінальний розмір", - "scaleFactor": "Рівень масштабування (обрізки) сторінки.", - "submit": "Відправити" - }, - "add-page-numbers": { - "tags": "розбити на сторінки,позначити,упорядкувати,індексувати" - }, - "auto-rename": { - "tags": "автоматичне визначення,на основі заголовка,організація,зміна міток", - "title": "Автоматичне перейменування", - "header": "Автоматичне перейменування PDF", - "submit": "Автоматичне перейменування" - }, - "adjust-contrast": { - "tags": "корекція кольору,налаштування,зміна,покращення" - }, - "crop": { - "tags": "обрізати,зменшувати,редагувати,формувати", - "title": "Обрізати", - "header": "Обрізати PDF-файл", - "submit": "Надіслати" - }, - "autoSplitPDF": { - "tags": "на основі qr,відокремити,сканувати сегмент,упорядкувати", - "title": "Автоматичне розділення PDF", - "header": "Автоматичне розділення PDF", - "description": "Друк, вставка, сканування, завантаження і дозвольте нам автоматично розділити ваші документи. Не потребує ручного сортування.", - "selectText": { - "1": "Друк кількох окремих аркушів (підійде чорно-білий варіант).", - "2": "Скануйте всі документи одночасно, вставляючи між ними роздільний аркуш.", - "3": "Завантажте один великий відсканований PDF-файл, і нехай Stirling PDF зробить все інше.", - "4": "Роздільні сторінки автоматично виявляються і видаляються, забезпечуючи акуратний кінцевий документ." - }, - "formPrompt": "Надіслати PDF-файл, що містить роздільні сторінки Stirling-PDF:", - "duplexMode": "Дуплексний режим (сканування спереду і ззаду)", - "dividerDownload2": "Завантажити 'Auto Splitter Divider (with instructions).pdf'", - "submit": "Надіслати" - }, - "sanitizePdf": { - "tags": "чистка,безпека,безпечні,віддалення загроз" - }, - "URLToPDF": { - "tags": "веб-захоплення,збереження сторінки,веб-документ,архів", - "title": "URL у PDF", - "header": "URL у PDF", - "submit": "Конвертувати", - "credit": "Використовує WeasyPrint" - }, - "HTMLToPDF": { - "tags": "розмітка,веб-контент,перетворення,конвертація", - "title": "HTML у PDF", - "header": "HTML у PDF", - "help": "Приймає файли HTML та ZIP-файли, що містять html/css/зображення тощо.", - "submit": "Конвертувати", - "credit": "Використовує WeasyPrint", - "zoom": "Рівень масштабування для відображення веб-сайту.", - "pageWidth": "Ширина сторінки в сантиметрах. (Порожньо - за замовчуванням)", - "pageHeight": "Висота сторінки в сантиметрах. (Порожньо - за замовчуванням)", - "marginTop": "Верхній відступ сторінки в міліметрах. (Порожньо - за замовчуванням)", - "marginBottom": "Нижній відступ сторінки в міліметрах. (Порожньо - за замовчуванням)", - "marginLeft": "Лівий відступ сторінки в міліметрах. (Порожньо - за замовчуванням)", - "marginRight": "Правий відступ сторінки в міліметрах. (Порожньо - за замовчуванням)", - "printBackground": "Відтворити фон веб-сайтів.", - "defaultHeader": "Включити заголовок за замовчуванням (Ім'я та номер сторінки)", - "cssMediaType": "Змінити тип медіа CSS сторінки.", - "none": "Немає", - "print": "Друк", - "screen": "Екран" - }, - "MarkdownToPDF": { - "tags": "розмітка,веб-контент,перетворення,конвертація", - "title": "Markdown в PDF", - "header": "Markdown в PDF", - "submit": "Конвертувати", - "help": "Робота в процесі", - "credit": "Використовує WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "розмітка,веб-вміст,трансформація,перетворення,md", - "title": "PDF в Markdown", - "header": "PDF в Markdown", - "submit": "Конвертувати" - }, - "getPdfInfo": { - "tags": "інформація,дані,статистика,статистика", - "title": "Отримати інформацію в PDF", - "header": "Отримати інформацію в PDF", - "submit": "Отримати інформацію", - "downloadJson": "Завантажити JSON" - }, - "extractPage": { - "tags": "екстракт" - }, - "PdfToSinglePage": { - "tags": "одну сторінку" - }, - "showJS": { - "tags": "js", - "title": "Показати JavaScript", - "header": "Показати JavaScript", - "downloadJS": "Завантажити JavaScript", - "submit": "Показати" - }, - "autoRedact": { - "tags": "редагувати,приховати,затемнити,чорний,маркер,приховано", - "title": "Автоматичне редагування", - "header": "Автоматичне редагування", - "colorLabel": "Колір", - "textsToRedactLabel": "Текст для приховування (кожен рядок окремо)", - "textsToRedactPlaceholder": "наприклад \\nКонфіденційно \\nЦілком таємно", - "useRegexLabel": "Використовувати регулярні вирази", - "wholeWordSearchLabel": "Пошук цілих слів", - "customPaddingLabel": "Додаткове заповнення за користувацьким значенням", - "convertPDFToImageLabel": "Перетворити PDF в зображення PDF (використовується для видалення тексту поза межами)", - "submitButton": "Надіслати" - }, - "redact": { - "tags": "редагувати,приховати,затемнити,чорний,маркер,приховано,вручну", - "title": "Ручне редагування", - "header": "Ручне редагування", - "submit": "Редагувати", - "textBasedRedaction": "Редагування на основі тексту", - "pageBasedRedaction": "Редагування на основі сторінок", - "convertPDFToImageLabel": "Перетворити PDF на PDF-зображення (використовується для видалення тексту за рамкою)", - "pageRedactionNumbers": { - "title": "Сторінки", - "placeholder": "(наприклад, 1,2,8 або 4,7,12-16 або 2n-1)" - }, - "redactionColor": { - "title": "Колір редагування" - }, - "export": "Експорт", - "upload": "Завантажити", - "boxRedaction": "Редагування малюванням рамки", - "zoom": "Масштаб", - "zoomIn": "Збільшити", - "zoomOut": "Зменшити", - "nextPage": "Наступна сторінка", - "previousPage": "Попередня сторінка", - "toggleSidebar": "Перемикати бічну панель", - "showThumbnails": "Показати мініатюри", - "showDocumentOutline": "Показати структуру документа (подвійне клацання для розгортання/згортання всіх елементів)", - "showAttatchments": "Показати вкладення", - "showLayers": "Показати шари (подвійне клацання для скидання всіх шарів до стану за умовчанням)", - "colourPicker": "Вибір кольору", - "findCurrentOutlineItem": "Знайти поточний елемент структури", - "applyChanges": "Застосувати зміни" - }, - "tableExtraxt": { - "tags": "csv,видобуток таблиці,вилучення,конвертація" - }, - "autoSizeSplitPDF": { - "tags": "pdf,розділити,документ,організація" - }, - "overlay-pdfs": { - "tags": "накладання", - "header": "Накладення файлів PDF", - "baseFile": { - "label": "Виберіть основний файл PDF" - }, - "overlayFiles": { - "label": "Виберіть файл(и) для накладення" - }, - "mode": { - "label": "Виберіть режим накладення", - "sequential": "Послідовне накладення", - "interleaved": "Перехресне накладення", - "fixedRepeat": "Накладення з фіксованим повторенням" - }, - "counts": { - "label": "Кількість накладень (для режиму з фіксованим повторенням)", - "placeholder": "Введіть через кому кількість повторень (наприклад, 2,3,1)" - }, - "position": { - "label": "Виберіть позицію накладення", - "foreground": "Над основним", - "background": "За основним" - }, - "submit": "Надіслати" - }, - "split-by-sections": { - "tags": "розділ розділу,розділення,налаштування", - "title": "Розділити PDF за розділами", - "header": "Розділити PDF на секції", - "horizontal": { - "label": "Горизонтальні розділи", - "placeholder": "Введіть кількість горизонтальних розділів" - }, - "vertical": { - "label": "Вертикальні розділи", - "placeholder": "Введіть кількість вертикальних розділів" - }, - "submit": "Розділити PDF", - "merge": "Об'єднати в один PDF" - }, - "AddStampRequest": { - "tags": "штамп,додати зображення,центральне зображення,водяний знак,pdf,вставити,налаштувати", - "header": "Поставити печатку на PDF", - "title": "Поставити печатку на PDF", - "stampType": "Тип печатки", - "stampText": "Текст печатки", - "stampImage": "Зображення печатки", - "alphabet": "Алфавіт", - "fontSize": "Розмір шрифту/зображення", - "rotation": "Обертання", - "opacity": "Прозорість", - "position": "Позиція", - "overrideX": "Перевизначити координату X", - "overrideY": "Перевизначити координату Y", - "customMargin": "Користувацький відступ", - "customColor": "Користувацький колір тексту", - "submit": "Надіслати" - }, - "removeImagePdf": { - "tags": "видалення зображення,операції зі сторінками,серверна частина" - }, - "splitPdfByChapters": { - "tags": "поділ,глави,закладки,організація" - }, - "validateSignature": { - "tags": "підпис,перевірка,валідація,pdf,сертифікат,цифровий підпис,перевірка підпису,перевірка сертифіката", - "title": "Перевірка підписів PDF", - "header": "Перевірка цифрових підписів", - "selectPDF": "Виберіть підписаний PDF-файл", - "submit": "Перевірити підписи", - "results": "Результаты проверки", - "status": { - "_value": "Статус", - "valid": "Дійна", - "invalid": "Недійсна" - }, - "signer": "Підписант", - "date": "Дата", - "reason": "Причина", - "location": "Местоположение", - "noSignatures": "В цьому документі не знайдено цифрових підписів", - "chain": { - "invalid": "Перевірка цепочки сертифікатів не удалась - неможливо перевірити особистість підписанта" - }, - "trust": { - "invalid": "Сертифікат відсутній у довіреному сховищі - джерело не може бути перевірено" - }, - "cert": { - "expired": "Срок дії сертифіката істеку", - "revoked": "Сертифікат був отозван", - "info": "Сведения про сертифікати", - "issuer": "Издатель", - "subject": "суб'єкт", - "serialNumber": "Серийний номер", - "validFrom": "Дійсний з", - "validUntil": "Дійсний до", - "algorithm": "Алгоритм", - "keySize": "Розмір ключа", - "version": "Версія", - "keyUsage": "Використання ключа", - "selfSigned": "Самоподписанный", - "bits": "біт" - }, - "signature": { - "info": "Інформація про підписи", - "_value": "Подпись", - "mathValid": "Подпись математически корректна, НО:" - }, - "selectCustomCert": "Користувачський файл сертифіката X.509 (Необов'язково)" - }, - "replace-color": { - "title": "Заміна-інверсія кольору", - "header": "Заміна-інверсія кольору PDF", - "selectText": { - "1": "Параметри заміни або інверсії кольору", - "2": "За замовчуванням (кольори високого розмаїття)", - "3": "Користувальницькі (настроювані кольори)", - "4": "Повна інверсія (інвертувати всі кольори)", - "5": "Параметри високого розмаїття", - "6": "білий текст на чорному тлі", - "7": "чорний текст на білому тлі", - "8": "жовтий текст на чорному тлі", - "9": "зелений текст на чорному тлі", - "10": "Вибрати колір тексту", - "11": "Вибрати колір тла" - }, - "submit": "Замінити" - }, - "replaceColorPdf": { - "tags": "Заміна кольору, операції зі сторінками, Серверна частина" - }, - "login": { - "title": "Вхід", - "header": "Вхід", - "signin": "Увійти", - "rememberme": "Запам'ятати мене", - "invalid": "Недійсне ім'я користувача або пароль.", - "locked": "Ваш обліковий запис заблоковано.", - "signinTitle": "Будь ласка, увійдіть", - "ssoSignIn": "Увійти через єдиний вхід", - "oAuth2AutoCreateDisabled": "Автоматичне створення користувача OAUTH2 ВИМКНЕНО", - "oAuth2AdminBlockedUser": "Реєстрація або вхід незареєстрованих користувачів наразі заборонено. Будь ласка, зв'яжіться з адміністратором.", - "oauth2RequestNotFound": "Запит на авторизація не знайдено", - "oauth2InvalidUserInfoResponse": "Недійсна відповідь з інформацією користувача", - "oauth2invalidRequest": "Недійсний запит", - "oauth2AccessDenied": "Доступ заблоковано", - "oauth2InvalidTokenResponse": "Недійсна відповідь з токеном", - "oauth2InvalidIdToken": "Недійсний ідентифікаційний токен", - "relyingPartyRegistrationNotFound": "Реєстрацію довіряючої сторони не знайдено", - "userIsDisabled": "Користувач деактивовано, вхід з цим ім'ям користувача заблоковано. Зверніться до адміністратора.", - "alreadyLoggedIn": "Ви вже увійшли до", - "alreadyLoggedIn2": "пристроїв (а). Будь ласка, вийдіть із цих пристроїв і спробуйте знову.", - "toManySessions": "У вас дуже багато активних сесій", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF на одну сторінку", - "header": "PDF на одну сторінку", - "submit": "Перетворити на одну сторінку" - }, - "pageExtracter": { - "title": "Видобути сторінки", - "header": "Видобути сторінки", - "submit": "Видобути", - "placeholder": "(наприклад 1,2,8 або 4,7,12-16 або 2n-1)" - }, - "sanitizePDF": { - "title": "Дезінфекція PDF", - "header": "Дезінфекція PDF файлу", - "selectText": { - "1": "Видалити JavaScript", - "2": "Видалити вбудовані файли", - "3": "Remove XMP metadata", - "4": "Видалити посилання", - "5": "Видалити шрифти", - "6": "Remove Document Info Metadata" - }, - "submit": "Дезінфекція" - }, - "adjustContrast": { - "title": "Налаштування контрастності", - "header": "Налаштування контрастності", - "contrast": "Контраст:", - "brightness": "Яскравість:", - "saturation": "Насиченість:", - "download": "Завантажити" - }, - "compress": { - "title": "Стиснути", - "header": "Стиснути PDF", - "credit": "Ця служба використовує qpdf для стиснення/оптимізації PDF.", - "grayscale": { - "label": "Застосувати відтінки сірого для стиснення" - }, - "selectText": { - "1": { - "_value": "Параметри стиснення", - "1": "1-3 стиснення PDF,
4-6 невелике стиснення зображень,
7-9 посилене стиснення зображень (різко знизить якість зображень)" - }, - "2": "Рівень оптимізації:", - "4": "Автоматичний режим - автоматично налаштовує якість для отримання PDF точного розміру", - "5": "Очікуваний розмір PDF (наприклад, 25 МБ, 10,8 МБ, 25 КБ)" - }, - "submit": "Стиснути" - }, - "decrypt": { - "passwordPrompt": "Цей файл захищений паролем. Будь ласка, введіть пароль:", - "cancelled": "Операцію скасовано для PDF: {0}", - "noPassword": "Не надано пароль для зашифрованого PDF: {0}", - "invalidPassword": "Будь ласка, спробуйте ще раз з правильним паролем.", - "invalidPasswordHeader": "Неправильний пароль або непідтримуване шифрування для PDF: {0}", - "unexpectedError": "Виникла помилка при обробці файлу. Будь ласка, спробуйте ще раз.", - "serverError": "Помилка сервера під час розшифровки: {0}", - "success": "Файл успішно розшифровано." - }, - "multiTool-advert": { - "message": "Ця функція також доступна на нашій сторінці мультиінструменту. Спробуйте її для покращеного посторінкового інтерфейсу та додаткових можливостей!" - }, - "pageRemover": { - "title": "Видалення сторінок", - "header": "Видалення сторінок PDF", - "pagesToDelete": "Сторінки для видалення (введіть список номерів сторінок через кому):", - "submit": "Видалити сторінки", - "placeholder": "(наприклад, 1,2,6 або 1-10,15-30)" - }, - "imageToPDF": { - "title": "Зображення в PDF", - "header": "Зображення в PDF", - "submit": "Конвертувати", - "selectLabel": "Виберіть режим відображення зображення", - "fillPage": "Заповнення сторінки", - "fitDocumentToImage": "Підігнати документ під зображення", - "maintainAspectRatio": "Зберегти пропорції", - "selectText": { - "2": "Автоматичний поворот PDF", - "3": "Логіка для кількох файлів (активується лише при роботі з декількома зображеннями)", - "4": "Об'єднати в один PDF", - "5": "Перетворення в окремі PDF-файли" - } - }, - "PDFToCSV": { - "title": "PDF в CSV", - "header": "PDF в CSV", - "prompt": "Виберіть сторінку для витягу таблиці", - "submit": "Конвертувати" - }, - "split-by-size-or-count": { - "title": "Розділити PDF за розміром або кількістю", - "header": "Розділити PDF за розміром або кількістю", - "type": { - "label": "Виберіть тип розділення", - "size": "За розміром", - "pageCount": "За кількістю сторінок", - "docCount": "За кількістю документів" - }, - "value": { - "label": "Введіть значення", - "placeholder": "Введіть розмір (наприклад, 2MB або 3KB) або кількість (наприклад, 5)" - }, - "submit": "Надіслати" - }, - "printFile": { - "title": "Роздрукувати файл", - "header": "Роздрукувати файл прінтером", - "selectText": { - "1": "Обрати файл для роздрукування", - "2": "Обрати назву прінтера" - }, - "submit": "Роздрукувати" - }, - "licenses": { - "nav": "Ліцензії", - "title": "Ліцензії від третіх сторін", - "header": "Ліцензії від третіх сторін", - "module": "Модуль", - "version": "Версія", - "license": "Ліцензія" - }, - "survey": { - "nav": "Опитування", - "title": "Опитування Stirling-PDF", - "description": "Stirling-PDF не має аналітичних засобів для відслідковування, тому ми хочемо почути думку від користувачів, як покращити Stirling-PDF!", - "changes": "Stirling-PDF змінився з часу останнього опитування! Щоб дізнатися більше, перегляньте допис у нашому блозі тут:", - "changes2": "Завдяки цим змінам ми отримуємо платну підтримку бізнесу та фінансування", - "please": "Будь-ласка, пройдіть опитування!", - "disabled": "(Вікно з опитування буде відключено у наступних оновленнях, але буде доступне внизу сторінки)", - "button": "Пройти опитування", - "dontShowAgain": "Не показувати це вікно", - "meeting": { - "1": "Якщо ви використовуєте Stirling PDF на роботі, ми будемо раді поговорити з вами. Ми пропонуємо сеанси технічної підтримки в обмін на 15-хвилинний сеанс пошуку користувачів.", - "2": "Це можливість:", - "3": "Отримайте допомогу щодо розгортання, інтеграції або усунення несправностей", - "4": "Надайте прямий відгук про продуктивність, крайні випадки та недоліки функцій", - "5": "Допоможіть нам удосконалити Stirling PDF для реального корпоративного використання", - "6": "Якщо ви зацікавлені, ви можете забронювати час безпосередньо з нашою командою. (тільки англомовний)", - "7": "З нетерпінням чекаємо на можливість розібратися у ваших сценаріях використання та зробити Stirling PDF ще кращим!", - "notInterested": "Не бізнес і/або зацікавлені у зустрічі?", - "button": "Зустріч" - } - }, - "removeImage": { - "title": "Видалити зображення", - "header": "Видалити зображення", - "removeImage": "Видалити зображення", - "submit": "Видалити зображення" - }, - "splitByChapters": { - "title": "Розділити PDF по главам", - "header": "Розділити PDF по главам", - "bookmarkLevel": "Уровень закладок", - "includeMetadata": "Включити метаданні", - "allowDuplicates": "Разрешить публикации", - "desc": { - "1": "Цей інструмент розділяє PDF-файл на кілька PDF-файлів на основі своєї структури глави.", - "2": "Уровень закладок: виберіть рівень закладок для розподілу (0 для верхнього рівня, 1 для другого рівня і т.д.).", - "3": "Включити метаданні: якщо позначено, метаданні вихідного PDF будуть включені в кожен розділений PDF.", - "4": "Розрішити публікації: якщо позначено, можна створити окремий PDF із кількох закладок на одній сторінці." - }, - "submit": "Розділити PDF" - }, - "fileChooser": { - "click": "Натисніть", - "or": "або", - "dragAndDrop": "Перетащите", - "dragAndDropPDF": "Перетащите PDF-файл", - "dragAndDropImage": "Перетащите файл зображення", - "hoveredDragAndDrop": "Перетащите файл(и) сюда", - "extractPDF": "Видобування..." - }, - "releases": { - "footer": "Релізи", - "title": "Примечания к релизу", - "header": "Примечания к релизу", - "current": { - "version": "Текущий релиз" - }, - "note": "Примітка до релізу доступна тільки на англійській мові" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/vi-VN/translation.json b/frontend/dist/locales/vi-VN/translation.json deleted file mode 100644 index 900288953..000000000 --- a/frontend/dist/locales/vi-VN/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "Font Size", - "fontName": "Font Name", - "title": "Thêm số trang", - "header": "Thêm số trang", - "selectText": { - "1": "Chọn tệp PDF:", - "2": "Kích thước lề", - "3": "Vị trí", - "4": "Số bắt đầu", - "5": "Trang cần đánh số", - "6": "Văn bản tùy chỉnh" - }, - "customTextDesc": "Văn bản tùy chỉnh", - "numberPagesDesc": "Những trang cần đánh số, mặc định là 'all', cũng chấp nhận 1-5 hoặc 2,5,9 v.v.", - "customNumberDesc": "Mặc định là {n}, cũng chấp nhận 'Trang {n} / {total}', 'Văn bản-{n}', '{filename}-{n}", - "submit": "Thêm số trang" - }, - "pdfPrompt": "Chọn (các) tệp PDF", - "multiPdfPrompt": "Chọn các tệp PDF (2+)", - "multiPdfDropPrompt": "Chọn (hoặc kéo và thả) tất cả các tệp PDF bạn cần", - "imgPrompt": "Chọn (các) hình ảnh", - "genericSubmit": "Gửi", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "Cảnh báo: Quá trình này có thể mất đến một phút tùy thuộc vào kích thước tệp", - "pageOrderPrompt": "Thứ tự trang tùy chỉnh (Nhập danh sách số trang được phân tách bằng dấu phẩy hoặc Các hàm như 2n+1) :", - "pageSelectionPrompt": "Lựa chọn trang tùy chỉnh (Nhập danh sách số trang được phân tách bằng dấu phẩy 1,5,6 hoặc Các hàm như 2n+1) :", - "goToPage": "Đi đến", - "true": "Đúng", - "false": "Sai", - "unknown": "Không xác định", - "save": "Lưu", - "saveToBrowser": "Lưu vào trình duyệt", - "close": "Đóng", - "filesSelected": "tệp đã chọn", - "noFavourites": "Không có mục yêu thích nào được thêm", - "downloadComplete": "Tải xuống hoàn tất", - "bored": "Chán phải chờ đợi?", - "alphabet": "Bảng chữ cái", - "downloadPdf": "Tải xuống PDF", - "text": "Văn bản", - "font": "Phông chữ", - "selectFillter": "-- Chọn --", - "pageNum": "Số trang", - "sizes": { - "small": "Nhỏ", - "medium": "Trung bình", - "large": "Lớn", - "x-large": "Rất lớn" - }, - "error": { - "pdfPassword": "Tài liệu PDF được bảo vệ bằng mật khẩu và mật khẩu không được cung cấp hoặc không chính xác", - "_value": "Lỗi", - "sorry": "Xin lỗi vì sự cố!", - "needHelp": "Cần trợ giúp / Phát hiện sự cố?", - "contactTip": "Nếu bạn vẫn gặp khó khăn, đừng ngần ngại liên hệ với chúng tôi để được trợ giúp. Bạn có thể gửi ticket trên trang GitHub của chúng tôi hoặc liên hệ qua Discord:", - "404": { - "head": "404 - Không tìm thấy trang | Ồ, có vẻ như chúng tôi đã vấp phải lỗi trong mã nguồn!", - "1": "Chúng tôi không thể tìm thấy trang bạn đang tìm kiếm.", - "2": "Đã xảy ra lỗi" - }, - "github": "Gửi ticket trên GitHub", - "showStack": "Hiển thị Stack Trace", - "copyStack": "Sao chép Stack Trace", - "githubSubmit": "GitHub - Gửi ticket", - "discordSubmit": "Discord - Gửi bài đăng hỗ trợ" - }, - "delete": "Xóa", - "username": "Tên người dùng", - "password": "Mật khẩu", - "welcome": "Chào mừng", - "property": "Thuộc tính", - "black": "Đen", - "white": "Trắng", - "red": "Đỏ", - "green": "Xanh lá", - "blue": "Xanh dương", - "custom": "Tùy chỉnh...", - "WorkInProgess": "Đang trong quá trình phát triển, Có thể không hoạt động hoặc có lỗi, Vui lòng báo cáo mọi vấn đề!", - "poweredBy": "Được hỗ trợ bởi", - "yes": "Có", - "no": "Không", - "changedCredsMessage": "Thông tin đăng nhập đã thay đổi!", - "notAuthenticatedMessage": "Người dùng chưa được xác thực.", - "userNotFoundMessage": "Không tìm thấy người dùng.", - "incorrectPasswordMessage": "Mật khẩu hiện tại không chính xác.", - "usernameExistsMessage": "Tên người dùng mới đã tồn tại.", - "invalidUsernameMessage": "Tên người dùng không hợp lệ, tên người dùng chỉ có thể chứa chữ cái, số và các ký tự đặc biệt sau @._+- hoặc phải là một địa chỉ email hợp lệ.", - "invalidPasswordMessage": "The password must not be empty and must not have spaces at the beginning or end.", - "confirmPasswordErrorMessage": "Mật khẩu mới và Xác nhận mật khẩu mới phải khớp nhau.", - "deleteCurrentUserMessage": "Không thể xóa người dùng đang đăng nhập.", - "deleteUsernameExistsMessage": "Tên người dùng không tồn tại và không thể bị xóa.", - "downgradeCurrentUserMessage": "Không thể hạ cấp vai trò của người dùng hiện tại", - "disabledCurrentUserMessage": "The current user cannot be disabled", - "downgradeCurrentUserLongMessage": "Không thể hạ cấp vai trò của người dùng hiện tại. Do đó, người dùng hiện tại sẽ không được hiển thị.", - "userAlreadyExistsOAuthMessage": "Người dùng đã tồn tại dưới dạng người dùng OAuth2.", - "userAlreadyExistsWebMessage": "Người dùng đã tồn tại dưới dạng người dùng web.", - "oops": "Rất tiếc!", - "help": "Trợ giúp", - "goHomepage": "Đi đến Trang chủ", - "joinDiscord": "Tham gia máy chủ Discord của chúng tôi", - "seeDockerHub": "Xem Docker Hub", - "visitGithub": "Truy cập kho lưu trữ Github", - "donate": "Ủng hộ", - "color": "Màu sắc", - "sponsor": "Nhà tài trợ", - "info": "Thông tin", - "pro": "Pro", - "page": "Page", - "pages": "Pages", - "loading": "Loading...", - "addToDoc": "Add to Document", - "reset": "Reset", - "apply": "Apply", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "Privacy Policy", - "terms": "Terms and Conditions", - "accessibility": "Accessibility", - "cookie": "Cookie Policy", - "impressum": "Impressum", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "Menu Pipeline (Beta)", - "uploadButton": "Tải lên tùy chỉnh", - "configureButton": "Cấu hình", - "defaultOption": "Tùy chỉnh", - "submitButton": "Gửi", - "help": "Trợ giúp Pipeline", - "scanHelp": "Trợ giúp quét thư mục", - "deletePrompt": "Bạn có chắc chắn muốn xóa pipeline", - "tags": "tự động hóa,chuỗi,kịch bản,xử lý hàng loạt", - "title": "Pipeline" - }, - "pipelineOptions": { - "header": "Cấu hình Pipeline", - "pipelineNameLabel": "Tên Pipeline", - "saveSettings": "Lưu cài đặt thao tác", - "pipelineNamePrompt": "Nhập tên pipeline tại đây", - "selectOperation": "Chọn thao tác", - "addOperationButton": "Thêm thao tác", - "pipelineHeader": "Pipeline:", - "saveButton": "Tải xuống", - "validateButton": "Xác thực" - }, - "enterpriseEdition": { - "button": "Upgrade to Pro", - "warning": "This feature is only available to Pro users.", - "yamlAdvert": "Stirling PDF Pro supports YAML configuration files and other SSO features.", - "ssoAdvert": "Looking for more user management features? Check out Stirling PDF Pro" - }, - "analytics": { - "title": "Do you want make Stirling PDF better?", - "paragraph1": "Stirling PDF has opt in analytics to help us improve the product. We do not track any personal information or file contents.", - "paragraph2": "Please consider enabling analytics to help Stirling-PDF grow and to allow us to understand our users better.", - "enable": "Enable analytics", - "disable": "Disable analytics", - "settings": "You can change the settings for analytics in the config/settings.yml file" - }, - "navbar": { - "favorite": "Yêu thích", - "recent": "New and recently updated", - "darkmode": "Chế độ tối", - "language": "Ngôn ngữ", - "settings": "Cài đặt", - "allTools": "Công cụ", - "multiTool": "Đa công cụ", - "search": "Search", - "sections": { - "organize": "Sắp xếp", - "convertTo": "Chuyển đổi sang PDF", - "convertFrom": "Chuyển đổi từ PDF", - "security": "Ký & Bảo mật", - "advance": "Nâng cao", - "edit": "Xem & Chỉnh sửa", - "popular": "Popular" - } - }, - "settings": { - "title": "Cài đặt", - "update": "Có bản cập nhật", - "updateAvailable": "{0} là phiên bản hiện tại đã cài đặt. Một phiên bản mới ({1}) đã có sẵn.", - "appVersion": "Phiên bản ứng dụng:", - "downloadOption": { - "title": "Chọn tùy chọn tải xuống (Đối với tải xuống tệp đơn không nén):", - "1": "Mở trong cùng cửa sổ", - "2": "Mở trong cửa sổ mới", - "3": "Tải xuống tệp" - }, - "zipThreshold": "Nén tệp khi số lượng tệp tải xuống vượt quá", - "signOut": "Đăng xuất", - "accountSettings": "Cài đặt tài khoản", - "bored": { - "help": "Bật trò chơi ẩn" - }, - "cacheInputs": { - "name": "Lưu đầu vào biểu mẫu", - "help": "Bật để lưu trữ các đầu vào đã sử dụng trước đó cho các lần chạy trong tương lai" - } - }, - "changeCreds": { - "title": "Thay đổi thông tin đăng nhập", - "header": "Cập nhật thông tin tài khoản của bạn", - "changePassword": "Bạn đang sử dụng thông tin đăng nhập mặc định. Vui lòng nhập mật khẩu mới", - "newUsername": "Tên người dùng mới", - "oldPassword": "Mật khẩu hiện tại", - "newPassword": "Mật khẩu mới", - "confirmNewPassword": "Xác nhận mật khẩu mới", - "submit": "Gửi thay đổi" - }, - "account": { - "title": "Cài đặt tài khoản", - "accountSettings": "Cài đặt tài khoản", - "adminSettings": "Cài đặt quản trị - Xem và thêm người dùng", - "userControlSettings": "Cài đặt kiểm soát người dùng", - "changeUsername": "Thay đổi tên người dùng", - "newUsername": "Tên người dùng mới", - "password": "Mật khẩu xác nhận", - "oldPassword": "Mật khẩu cũ", - "newPassword": "Mật khẩu mới", - "changePassword": "Thay đổi mật khẩu", - "confirmNewPassword": "Xác nhận mật khẩu mới", - "signOut": "Đăng xuất", - "yourApiKey": "Khóa API của bạn", - "syncTitle": "Đồng bộ hóa cài đặt trình duyệt với tài khoản", - "settingsCompare": "So sánh cài đặt:", - "property": "Thuộc tính", - "webBrowserSettings": "Cài đặt trình duyệt web", - "syncToBrowser": "Đồng bộ hóa Tài khoản -> Trình duyệt", - "syncToAccount": "Đồng bộ hóa Tài khoản <- Trình duyệt" - }, - "adminUserSettings": { - "title": "Cài đặt kiểm soát người dùng", - "header": "Cài đặt kiểm soát người dùng quản trị", - "admin": "Quản trị viên", - "user": "Người dùng", - "addUser": "Thêm người dùng mới", - "deleteUser": "Xóa người dùng", - "confirmDeleteUser": "Bạn có muốn xóa người dùng không?", - "confirmChangeUserStatus": "Should the user be disabled/enabled?", - "usernameInfo": "Tên người dùng chỉ có thể chứa chữ cái, số và các ký tự đặc biệt sau @._+- hoặc phải là một địa chỉ email hợp lệ.", - "roles": "Vai trò", - "role": "Vai trò", - "actions": "Hành động", - "apiUser": "Người dùng API giới hạn", - "extraApiUser": "Người dùng API giới hạn bổ sung", - "webOnlyUser": "Chỉ người dùng web", - "demoUser": "Người dùng demo (Không có cài đặt tùy chỉnh)", - "internalApiUser": "Người dùng API nội bộ", - "forceChange": "Buộc người dùng thay đổi mật khẩu khi đăng nhập", - "submit": "Lưu người dùng", - "changeUserRole": "Thay đổi vai trò của người dùng", - "authenticated": "Đã xác thực", - "editOwnProfil": "Edit own profile", - "enabledUser": "enabled user", - "disabledUser": "disabled user", - "activeUsers": "Active Users:", - "disabledUsers": "Disabled Users:", - "totalUsers": "Total Users:", - "lastRequest": "Last Request", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "Nhập/Xuất cơ sở dữ liệu", - "header": "Nhập/Xuất cơ sở dữ liệu", - "fileName": "Tên tệp", - "creationDate": "Ngày tạo", - "fileSize": "Kích thước tệp", - "deleteBackupFile": "Xóa tệp sao lưu", - "importBackupFile": "Nhập tệp sao lưu", - "createBackupFile": "Create Backup File", - "downloadBackupFile": "Tải xuống tệp sao lưu", - "info_1": "Khi nhập dữ liệu, điều quan trọng là phải đảm bảo cấu trúc chính xác. Nếu bạn không chắc chắn về những gì bạn đang làm, hãy tìm kiếm lời khuyên và hỗ trợ từ một chuyên gia. Lỗi trong cấu trúc có thể gây ra sự cố ứng dụng, thậm chí là không thể chạy ứng dụng hoàn toàn.", - "info_2": "Tên tệp không quan trọng khi tải lên. Nó sẽ được đổi tên sau đó để tuân theo định dạng backup_user_yyyyMMddHHmm.sql, đảm bảo quy ước đặt tên nhất quán.", - "submit": "Nhập bản sao lưu", - "importIntoDatabaseSuccessed": "Nhập vào cơ sở dữ liệu thành công", - "backupCreated": "Database backup successful", - "fileNotFound": "Không tìm thấy tệp", - "fileNullOrEmpty": "Tệp không được để trống hoặc rỗng", - "failedImportFile": "Không thể nhập tệp", - "notSupported": "This function is not available for your database connection." - }, - "session": { - "expired": "Your session has expired. Please refresh the page and try again.", - "refreshPage": "Refresh Page" - }, - "home": { - "desc": "Giải pháp toàn diện cho mọi nhu cầu về PDF ngay trên máy của bạn", - "searchBar": "Tìm kiếm tính năng...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "Xem, chú thích, thêm văn bản hoặc hình ảnh" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "Đa công cụ PDF", - "desc": "Ghép nối, Xoay, Sắp xếp lại và Xóa trang" - }, - "merge": { - "title": "Ghép nối", - "desc": "Dễ dàng ghép nối nhiều PDF thành một." - }, - "split": { - "title": "Tách", - "desc": "Tách PDF thành nhiều tài liệu" - }, - "rotate": { - "title": "Xoay", - "desc": "Dễ dàng xoay PDF của bạn." - }, - "imageToPdf": { - "title": "Hình ảnh sang PDF", - "desc": "Chuyển đổi hình ảnh (PNG, JPEG, GIF) sang PDF." - }, - "pdfToImage": { - "title": "PDF sang Hình ảnh", - "desc": "Chuyển đổi PDF sang hình ảnh. (PNG, JPEG, GIF)" - }, - "pdfOrganiser": { - "title": "Sắp xếp", - "desc": "Xóa/Sắp xếp lại trang theo bất kỳ thứ tự nào" - }, - "addImage": { - "title": "Thêm hình ảnh", - "desc": "Thêm hình ảnh vào vị trí cố định trên PDF" - }, - "watermark": { - "title": "Thêm hình mờ", - "desc": "Thêm hình mờ tùy chỉnh vào tài liệu PDF của bạn." - }, - "permissions": { - "title": "Thay đổi quyền", - "desc": "Thay đổi quyền của tài liệu PDF của bạn" - }, - "removePages": { - "title": "Xóa", - "desc": "Xóa các trang không mong muốn khỏi tài liệu PDF của bạn." - }, - "addPassword": { - "title": "Thêm mật khẩu", - "desc": "Mã hóa tài liệu PDF của bạn bằng mật khẩu." - }, - "removePassword": { - "title": "Xóa mật khẩu", - "desc": "Xóa bảo vệ mật khẩu khỏi tài liệu PDF của bạn." - }, - "compressPdfs": { - "title": "Nén", - "desc": "Nén PDF để giảm kích thước tệp." - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "Thay đổi Metadata", - "desc": "Thay đổi/Xóa/Thêm metadata từ tài liệu PDF" - }, - "fileToPDF": { - "title": "Chuyển đổi tệp sang PDF", - "desc": "Chuyển đổi hầu hết mọi tệp sang PDF (DOCX, PNG, XLS, PPT, TXT và nhiều hơn nữa)" - }, - "ocr": { - "title": "OCR / Dọn dẹp bản quét", - "desc": "Dọn dẹp bản quét và phát hiện văn bản từ hình ảnh trong PDF và thêm lại dưới dạng văn bản." - }, - "extractImages": { - "title": "Trích xuất hình ảnh", - "desc": "Trích xuất tất cả hình ảnh từ PDF và lưu chúng vào tệp zip" - }, - "pdfToPDFA": { - "title": "PDF sang PDF/A", - "desc": "Chuyển đổi PDF sang PDF/A để lưu trữ lâu dài" - }, - "PDFToWord": { - "title": "PDF sang Word", - "desc": "Chuyển đổi PDF sang các định dạng Word (DOC, DOCX và ODT)" - }, - "PDFToPresentation": { - "title": "PDF sang Bài thuyết trình", - "desc": "Chuyển đổi PDF sang các định dạng Bài thuyết trình (PPT, PPTX và ODP)" - }, - "PDFToText": { - "title": "PDF sang RTF (Văn bản)", - "desc": "Chuyển đổi PDF sang định dạng Văn bản hoặc RTF" - }, - "PDFToHTML": { - "title": "PDF sang HTML", - "desc": "Chuyển đổi PDF sang định dạng HTML" - }, - "PDFToXML": { - "title": "PDF sang XML", - "desc": "Chuyển đổi PDF sang định dạng XML" - }, - "ScannerImageSplit": { - "title": "Phát hiện/Tách ảnh quét", - "desc": "Tách nhiều ảnh từ trong một ảnh/PDF" - }, - "sign": { - "title": "Ký", - "desc": "Thêm chữ ký vào PDF bằng cách vẽ, văn bản hoặc hình ảnh" - }, - "flatten": { - "title": "Làm phẳng", - "desc": "Xóa tất cả các phần tử tương tác và biểu mẫu từ PDF" - }, - "repair": { - "title": "Sửa chữa", - "desc": "Cố gắng sửa chữa PDF bị hỏng/lỗi" - }, - "removeBlanks": { - "title": "Xóa trang trống", - "desc": "Phát hiện và xóa các trang trống khỏi tài liệu" - }, - "removeAnnotations": { - "title": "Xóa chú thích", - "desc": "Xóa tất cả các bình luận/chú thích khỏi PDF" - }, - "compare": { - "title": "So sánh", - "desc": "So sánh và hiển thị sự khác biệt giữa 2 tài liệu PDF" - }, - "certSign": { - "title": "Ký bằng chứng chỉ", - "desc": "Ký PDF bằng Chứng chỉ/Khóa (PEM/P12)" - }, - "removeCertSign": { - "title": "Xóa chữ ký chứng chỉ", - "desc": "Xóa chữ ký chứng chỉ khỏi PDF" - }, - "pageLayout": { - "title": "Bố cục nhiều trang", - "desc": "Ghép nhiều trang của tài liệu PDF thành một trang duy nhất" - }, - "scalePages": { - "title": "Điều chỉnh kích thước/tỷ lệ trang", - "desc": "Thay đổi kích thước/tỷ lệ của trang và/hoặc nội dung của nó." - }, - "pipeline": { - "title": "Pipeline (Nâng cao)", - "desc": "Chạy nhiều thao tác trên PDF bằng cách định nghĩa các tập lệnh pipeline" - }, - "add-page-numbers": { - "title": "Thêm số trang", - "desc": "Thêm số trang xuyên suốt tài liệu ở vị trí cố định" - }, - "auto-rename": { - "title": "Tự động đổi tên tệp PDF", - "desc": "Tự động đổi tên tệp PDF dựa trên tiêu đề được phát hiện" - }, - "adjust-contrast": { - "title": "Điều chỉnh màu sắc/tương phản", - "desc": "Điều chỉnh độ tương phản, độ bão hòa và độ sáng của PDF" - }, - "crop": { - "title": "Cắt PDF", - "desc": "Cắt PDF để giảm kích thước (giữ nguyên văn bản!)" - }, - "autoSplitPDF": { - "title": "Tự động tách trang", - "desc": "Tự động tách PDF đã quét với mã QR tách trang quét vật lý" - }, - "sanitizePdf": { - "title": "Làm sạch", - "desc": "Xóa các tập lệnh và phần tử khác khỏi các tệp PDF" - }, - "URLToPDF": { - "title": "URL/Trang web sang PDF", - "desc": "Chuyển đổi bất kỳ URL http(s) nào thành PDF" - }, - "HTMLToPDF": { - "title": "HTML sang PDF", - "desc": "Chuyển đổi bất kỳ tệp HTML hoặc zip nào thành PDF" - }, - "MarkdownToPDF": { - "title": "Markdown sang PDF", - "desc": "Chuyển đổi bất kỳ tệp Markdown nào thành PDF" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "Lấy TẤT CẢ thông tin về PDF", - "desc": "Lấy bất kỳ và tất cả thông tin có thể về PDF" - }, - "extractPage": { - "title": "Trích xuất (các) trang", - "desc": "Trích xuất các trang được chọn từ PDF" - }, - "PdfToSinglePage": { - "title": "PDF sang một trang lớn", - "desc": "Ghép tất cả các trang PDF thành một trang lớn duy nhất" - }, - "showJS": { - "title": "Hiển thị Javascript", - "desc": "Tìm kiếm và hiển thị bất kỳ JS nào được chèn vào PDF" - }, - "autoRedact": { - "title": "Tự động biên tập", - "desc": "Tự động biên tập (Che đen) văn bản trong PDF dựa trên văn bản đầu vào" - }, - "redact": { - "title": "Manual Redaction", - "desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)" - }, - "tableExtraxt": { - "title": "PDF sang CSV", - "desc": "Trích xuất bảng từ PDF chuyển đổi thành CSV" - }, - "autoSizeSplitPDF": { - "title": "Tự động chia theo kích thước/số lượng", - "desc": "Chia một tệp PDF thành nhiều tài liệu dựa trên kích thước, số trang hoặc số lượng tài liệu" - }, - "overlay-pdfs": { - "title": "Chồng lớp PDF", - "desc": "Chồng lớp PDF lên trên PDF khác" - }, - "split-by-sections": { - "title": "Chia PDF theo phần", - "desc": "Chia mỗi trang của PDF thành các phần nhỏ hơn theo chiều ngang và dọc" - }, - "AddStampRequest": { - "title": "Thêm dấu vào PDF", - "desc": "Thêm văn bản hoặc hình ảnh dấu tại vị trí cố định" - }, - "removeImagePdf": { - "title": "Remove image", - "desc": "Remove image from PDF to reduce file size" - }, - "splitPdfByChapters": { - "title": "Split PDF by Chapters", - "desc": "Split a PDF into multiple files based on its chapter structure." - }, - "validateSignature": { - "title": "Validate PDF Signature", - "desc": "Verify digital signatures and certificates in PDF documents" - }, - "replaceColorPdf": { - "title": "Replace and Invert Color", - "desc": "Replace color for text and background in PDF and invert full color of pdf to reduce file size" - } - }, - "viewPdf": { - "tags": "xem,đọc,chú thích,văn bản,hình ảnh", - "title": "View/Edit PDF", - "header": "Xem PDF" - }, - "multiTool": { - "tags": "Đa công cụ,Đa thao tác,Giao diện người dùng,nhấp kéo,phía trước,phía máy khách,tương tác,có thể tương tác,di chuyển", - "title": "Công cụ đa năng PDF", - "header": "Công cụ đa năng PDF", - "uploadPrompts": "Tên tệp", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "selectPages": "Page Select", - "selectedPages": "Selected Pages", - "page": "Page", - "deleteSelected": "Delete Selected", - "downloadAll": "Export", - "downloadSelected": "Export Selected", - "insertPageBreak": "Insert Page Break", - "addFile": "Add File", - "rotateLeft": "Rotate Left", - "rotateRight": "Rotate Right", - "split": "Split", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "Delete", - "dragDropMessage": "Page(s) Selected", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "ghép nối,Thao tác trang,Phía sau,phía máy chủ", - "title": "Trộn", - "header": "Trộn nhiều PDF (2+)", - "sortByName": "Sắp xếp theo tên", - "sortByDate": "Sắp xếp theo ngày", - "removeCertSign": "Xóa chữ ký số trong tệp đã trộn?", - "submit": "Trộn" - }, - "split": { - "tags": "Thao tác trang,chia,Nhiều trang,cắt,phía máy chủ", - "title": "Chia PDF", - "header": "Chia PDF", - "desc": { - "1": "Các số bạn chọn là số trang bạn muốn thực hiện chia", - "2": "Như vậy, việc chọn 1,3,7-9 sẽ chia một tài liệu 10 trang thành 6 PDF riêng biệt với:", - "3": "Tài liệu #1: Trang 1", - "4": "Tài liệu #2: Trang 2 và 3", - "5": "Tài liệu #3: Trang 4, 5, 6 và 7", - "6": "Tài liệu #4: Trang 8", - "7": "Tài liệu #5: Trang 9", - "8": "Tài liệu #6: Trang 10" - }, - "splitPages": "Nhập các trang cần chia:", - "submit": "Chia" - }, - "rotate": { - "tags": "phía máy chủ", - "title": "Xoay PDF", - "header": "Xoay PDF", - "selectAngle": "Chọn góc xoay (theo bội số của 90 độ):", - "submit": "Xoay" - }, - "imageToPdf": { - "tags": "chuyển đổi,img,jpg,hình ảnh,ảnh" - }, - "pdfToImage": { - "tags": "chuyển đổi,img,jpg,hình ảnh,ảnh", - "title": "PDF sang hình ảnh", - "header": "PDF sang hình ảnh", - "selectText": "Định dạng hình ảnh", - "singleOrMultiple": "Loại kết quả trang sang hình ảnh", - "single": "Một hình ảnh lớn kết hợp tất cả các trang", - "multi": "Nhiều hình ảnh, mỗi trang một hình ảnh", - "colorType": "Loại màu", - "color": "Màu", - "grey": "Thang độ xám", - "blackwhite": "Đen trắng (Có thể mất dữ liệu!)", - "submit": "Chuyển đổi", - "info": "Python is not installed. Required for WebP conversion.", - "placeholder": "(ví dụ: 1,2,8 hoặc 4,7,12-16 hoặc 2n-1)" - }, - "pdfOrganiser": { - "tags": "duplex,chẵn,lẻ,sắp xếp,di chuyển", - "title": "Sắp xếp trang", - "header": "Sắp xếp trang PDF", - "submit": "Sắp xếp lại trang", - "mode": { - "_value": "Chế độ", - "1": "Thứ tự trang tùy chỉnh", - "2": "Đảo ngược thứ tự", - "3": "Sắp xếp hai mặt", - "4": "Sắp xếp sách nhỏ", - "5": "Sắp xếp sách nhỏ đóng gáy bên", - "6": "Tách lẻ-chẵn", - "7": "Xóa trang đầu", - "8": "Xóa trang cuối", - "9": "Xóa trang đầu và cuối", - "10": "Trộn lẻ-chẵn", - "11": "Duplicate all pages" - }, - "placeholder": "(ví dụ: 1,3,2 hoặc 4-8,2,10-12 hoặc 2n-1)" - }, - "addImage": { - "tags": "img,jpg,hình ảnh,ảnh", - "title": "Thêm hình ảnh", - "header": "Thêm hình ảnh vào PDF", - "everyPage": "Mọi trang?", - "upload": "Thêm hình ảnh", - "submit": "Thêm hình ảnh" - }, - "watermark": { - "tags": "Văn bản,lặp lại,nhãn,riêng,bản quyền,thương hiệu,img,jpg,hình ảnh,ảnh", - "title": "Thêm hình mờ", - "header": "Thêm hình mờ", - "customColor": "Màu văn bản tùy chỉnh", - "selectText": { - "1": "Chọn PDF để thêm hình mờ:", - "2": "Văn bản hình mờ:", - "3": "Cỡ chữ:", - "4": "Xoay (0-360):", - "5": "Khoảng cách ngang (Khoảng cách giữa mỗi hình mờ theo chiều ngang):", - "6": "Khoảng cách dọc (Khoảng cách giữa mỗi hình mờ theo chiều dọc):", - "7": "Độ mờ (0% - 100%):", - "8": "Loại hình mờ:", - "9": "Hình ảnh hình mờ:", - "10": "Convert PDF to PDF-Image" - }, - "submit": "Thêm hình mờ", - "type": { - "1": "Văn bản", - "2": "Hình ảnh" - } - }, - "permissions": { - "tags": "đọc,viết,chỉnh sửa,in", - "title": "Thay đổi quyền", - "header": "Thay đổi quyền", - "warning": "Cảnh báo để các quyền này không thể thay đổi, bạn nên đặt chúng với mật khẩu thông qua trang thêm mật khẩu", - "selectText": { - "1": "Chọn PDF để thay đổi quyền", - "2": "Quyền cần đặt", - "3": "Ngăn chặn lắp ráp tài liệu", - "4": "Ngăn chặn trích xuất nội dung", - "5": "Ngăn chặn trích xuất để truy cập", - "6": "Ngăn chặn điền vào biểu mẫu", - "7": "Ngăn chặn sửa đổi", - "8": "Ngăn chặn sửa đổi chú thích", - "9": "Ngăn chặn in", - "10": "Ngăn chặn in các định dạng khác nhau" - }, - "submit": "Thay đổi" - }, - "removePages": { - "tags": "Xóa trang,xóa trang" - }, - "addPassword": { - "tags": "bảo mật,an toàn", - "title": "Thêm mật khẩu", - "header": "Thêm mật khẩu (Mã hóa)", - "selectText": { - "1": "Chọn PDF để mã hóa", - "2": "Mật khẩu người dùng", - "3": "Độ dài khóa mã hóa", - "4": "Giá trị cao hơn thì mạnh hơn, nhưng giá trị thấp hơn có tính tương thích tốt hơn.", - "5": "Quyền cần đặt (Khuyến nghị sử dụng cùng với mật khẩu chủ sở hữu)", - "6": "Ngăn chặn lắp ráp tài liệu", - "7": "Ngăn chặn trích xuất nội dung", - "8": "Ngăn chặn trích xuất để truy cập", - "9": "Ngăn chặn điền vào biểu mẫu", - "10": "Ngăn chặn sửa đổi", - "11": "Ngăn chặn sửa đổi chú thích", - "12": "Ngăn chặn in", - "13": "Ngăn chặn in các định dạng khác nhau", - "14": "Mật khẩu chủ sở hữu", - "15": "Hạn chế những gì có thể làm với tài liệu sau khi mở (Không được hỗ trợ bởi tất cả các trình đọc)", - "16": "Hạn chế việc mở tài liệu" - }, - "submit": "Mã hóa" - }, - "removePassword": { - "tags": "bảo mật,Giải mã,an toàn,bỏ mật khẩu,xóa mật khẩu", - "title": "Xóa mật khẩu", - "header": "Xóa mật khẩu (Giải mã)", - "selectText": { - "1": "Chọn PDF để giải mã", - "2": "Mật khẩu" - }, - "submit": "Xóa" - }, - "compressPdfs": { - "tags": "ép,nhỏ,nhỏ gọn" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "Tiêu đề,tác giả,ngày,tạo,thời gian,nhà xuất bản,nhà sản xuất,thống kê", - "title": "Thay đổi metadata", - "header": "Thay đổi metadata", - "selectText": { - "1": "Vui lòng chỉnh sửa các biến bạn muốn thay đổi", - "2": "Xóa tất cả metadata", - "3": "Hiển thị metadata tùy chỉnh:", - "4": "Metadata khác:", - "5": "Thêm mục metadata tùy chỉnh" - }, - "author": "Tác giả:", - "creationDate": "Ngày tạo (yyyy/MM/dd HH:mm:ss):", - "creator": "Người tạo:", - "keywords": "Từ khóa:", - "modDate": "Ngày sửa đổi (yyyy/MM/dd HH:mm:ss):", - "producer": "Nhà sản xuất:", - "subject": "Chủ đề:", - "trapped": "Trapped:", - "submit": "Thay đổi" - }, - "fileToPDF": { - "tags": "chuyển đổi,định dạng,tài liệu,hình ảnh,slide,văn bản,chuyển đổi,văn phòng,tài liệu,word,excel,powerpoint", - "title": "Tệp sang PDF", - "header": "Chuyển đổi bất kỳ tệp nào sang PDF", - "credit": "Dịch vụ này sử dụng LibreOffice và Unoconv để chuyển đổi tệp.", - "supportedFileTypesInfo": "Các loại tệp được hỗ trợ", - "supportedFileTypes": "Các loại tệp được hỗ trợ nên bao gồm các loại dưới đây, tuy nhiên để có danh sách đầy đủ và cập nhật các định dạng được hỗ trợ, vui lòng tham khảo tài liệu LibreOffice", - "submit": "Chuyển đổi sang PDF" - }, - "ocr": { - "tags": "nhận dạng,văn bản,hình ảnh,quét,đọc,nhận dạng,phát hiện,có thể chỉnh sửa", - "title": "OCR / Làm sạch bản Scan", - "header": "Làm sạch các bản Scan / OCR (Nhận dạng ký tự quang học)", - "selectText": { - "1": "Chọn ngôn ngữ cần được phát hiện trong PDF (Những ngôn ngữ được liệt kê là những ngôn ngữ hiện đang được phát hiện):", - "2": "Tạo tệp văn bản chứa văn bản OCR cùng với PDF đã được OCR", - "3": "Sửa các trang đã được scan ở góc nghiêng bằng cách xoay chúng trở lại vị trí", - "4": "Làm sạch trang để giảm khả năng OCR sẽ tìm thấy văn bản trong nhiễu nền. (Không thay đổi đầu ra)", - "5": "Làm sạch trang để giảm khả năng OCR sẽ tìm thấy văn bản trong nhiễu nền, duy trì làm sạch trong đầu ra.", - "6": "Bỏ qua các trang có văn bản tương tác, chỉ OCR các trang là hình ảnh", - "7": "Bắt buộc OCR, sẽ OCR mọi trang và xóa tất cả các phần tử văn bản gốc", - "8": "Bình thường (Sẽ báo lỗi nếu PDF chứa văn bản)", - "9": "Cài đặt bổ sung", - "10": "Chế độ OCR", - "11": "Xóa hình ảnh sau khi OCR (Xóa TẤT CẢ hình ảnh, chỉ hữu ích nếu là một phần của bước chuyển đổi)", - "12": "Loại hiển thị (Nâng cao)" - }, - "help": "Vui lòng đọc tài liệu này về cách sử dụng cho các ngôn ngữ khác và/hoặc sử dụng không trong docker", - "credit": "Dịch vụ này sử dụng qpdf và Tesseract cho OCR.", - "submit": "Xử lý PDF với OCR" - }, - "extractImages": { - "tags": "hình ảnh,ảnh,lưu,lưu trữ,zip,chụp,lấy", - "title": "Trích xuất hình ảnh", - "header": "Trích xuất hình ảnh", - "selectText": "Chọn định dạng hình ảnh để chuyển đổi hình ảnh đã trích xuất", - "allowDuplicates": "Save duplicate images", - "submit": "Trích xuất" - }, - "pdfToPDFA": { - "tags": "lưu trữ,dài hạn,tiêu chuẩn,chuyển đổi,lưu trữ,bảo quản", - "title": "PDF sang PDF/A", - "header": "PDF sang PDF/A", - "credit": "Dịch vụ này sử dụng libreoffice để chuyển đổi PDF/A", - "submit": "Chuyển đổi", - "tip": "Hiện tại không hoạt động với nhiều đầu vào cùng lúc", - "outputFormat": "Định dạng đầu ra", - "pdfWithDigitalSignature": "PDF chứa chữ ký số. Điều này sẽ bị xóa trong bước tiếp theo." - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,chuyển đổi,định dạng,chuyển đổi,văn phòng,microsoft,tệp doc", - "title": "PDF sang Word", - "header": "PDF sang Word", - "selectText": { - "1": "Định dạng tệp đầu ra" - }, - "credit": "Dịch vụ này sử dụng LibreOffice để chuyển đổi tệp.", - "submit": "Chuyển đổi" - }, - "PDFToPresentation": { - "tags": "slides,trình chiếu,văn phòng,microsoft", - "title": "PDF sang bài thuyết trình", - "header": "PDF sang bài thuyết trình", - "selectText": { - "1": "Định dạng tệp đầu ra" - }, - "credit": "Dịch vụ này sử dụng LibreOffice để chuyển đổi tệp.", - "submit": "Chuyển đổi" - }, - "PDFToText": { - "tags": "định dạng phong phú,định dạng văn bản phong phú,định dạng văn bản phong phú", - "title": "PDF sang RTF (Văn bản)", - "header": "PDF sang RTF (Văn bản)", - "selectText": { - "1": "Định dạng tệp đầu ra" - }, - "credit": "Dịch vụ này sử dụng LibreOffice để chuyển đổi tệp.", - "submit": "Chuyển đổi" - }, - "PDFToHTML": { - "tags": "nội dung web,thân thiện với trình duyệt", - "title": "PDF sang HTML", - "header": "PDF sang HTML", - "credit": "Dịch vụ này sử dụng pdftohtml để chuyển đổi tệp.", - "submit": "Chuyển đổi" - }, - "PDFToXML": { - "tags": "trích xuất dữ liệu,nội dung có cấu trúc,tương tác,chuyển đổi,chuyển", - "title": "PDF sang XML", - "header": "PDF sang XML", - "credit": "Dịch vụ này sử dụng LibreOffice để chuyển đổi tệp.", - "submit": "Chuyển đổi" - }, - "ScannerImageSplit": { - "tags": "tách,tự động phát hiện,quét,nhiều ảnh,sắp xếp", - "selectText": { - "1": "Ngưỡng góc:", - "2": "Đặt góc tuyệt đối tối thiểu cần thiết để xoay hình ảnh (mặc định: 10).", - "3": "Dung sai:", - "4": "Xác định phạm vi biến đổi màu sắc xung quanh màu nền ước tính (mặc định: 30).", - "5": "Diện tích tối thiểu:", - "6": "Đặt ngưỡng diện tích tối thiểu cho một ảnh (mặc định: 10000).", - "7": "Diện tích đường viền tối thiểu:", - "8": "Đặt ngưỡng diện tích đường viền tối thiểu cho một ảnh", - "9": "Kích thước viền:", - "10": "Đặt kích thước của viền được thêm vào và loại bỏ để ngăn chặn viền trắng trong đầu ra (mặc định: 1)." - }, - "info": "Python is not installed. It is required to run." - }, - "sign": { - "tags": "ủy quyền,ký tắt,chữ ký vẽ,ký văn bản,chữ ký hình ảnh", - "title": "Ký", - "header": "Ký PDF", - "upload": "Tải lên hình ảnh", - "draw": "Vẽ chữ ký", - "text": "Nhập văn bản", - "clear": "Xóa", - "add": "Thêm", - "saved": "Saved Signatures", - "save": "Save Signature", - "personalSigs": "Personal Signatures", - "sharedSigs": "Shared Signatures", - "noSavedSigs": "No saved signatures found", - "addToAll": "Add to all pages", - "delete": "Delete", - "first": "First page", - "last": "Last page", - "next": "Next page", - "previous": "Previous page", - "maintainRatio": "Toggle maintain aspect ratio", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "tĩnh,vô hiệu hóa,không tương tác,tinh giản", - "title": "Làm phẳng", - "header": "Làm phẳng PDF", - "flattenOnlyForms": "Chỉ làm phẳng biểu mẫu", - "submit": "Làm phẳng" - }, - "repair": { - "tags": "sửa,khôi phục,sửa chữa,phục hồi", - "title": "Sửa chữa", - "header": "Sửa chữa PDF", - "submit": "Sửa chữa" - }, - "removeBlanks": { - "tags": "dọn dẹp,tinh giản,không nội dung,sắp xếp", - "title": "Xóa trang trắng", - "header": "Xóa trang trắng", - "threshold": "Ngưỡng độ trắng của pixel:", - "thresholdDesc": "Ngưỡng để xác định mức độ trắng của một pixel để được coi là 'Trắng'. 0 = Đen, 255 trắng tinh khiết.", - "whitePercent": "Phần trăm trắng (%):", - "whitePercentDesc": "Phần trăm của trang phải là pixel 'trắng' để bị xóa", - "submit": "Xóa trang trắng" - }, - "removeAnnotations": { - "tags": "bình luận,đánh dấu,ghi chú,đánh dấu,xóa", - "title": "Xóa chú thích", - "header": "Xóa chú thích", - "submit": "Xóa" - }, - "compare": { - "tags": "phân biệt,đối chiếu,thay đổi,phân tích", - "title": "So sánh", - "header": "So sánh PDF", - "highlightColor": { - "1": "Màu đánh dấu 1:", - "2": "Màu đánh dấu 2:" - }, - "document": { - "1": "Tài liệu 1", - "2": "Tài liệu 2" - }, - "submit": "So sánh", - "complex": { - "message": "One or both of the provided documents are large files, accuracy of comparison may be reduced" - }, - "large": { - "file": { - "message": "One or Both of the provided documents are too large to process" - } - }, - "no": { - "text": { - "message": "One or both of the selected PDFs have no text content. Please choose PDFs with text for comparison." - } - } - }, - "certSign": { - "tags": "xác thực,PEM,P12,chính thức,mã hóa", - "title": "Ký bằng chứng chỉ", - "header": "Ký PDF bằng chứng chỉ của bạn (Đang trong quá trình phát triển)", - "selectPDF": "Chọn tệp PDF để ký:", - "jksNote": "Lưu ý: Nếu loại chứng chỉ của bạn không được liệt kê bên dưới, vui lòng chuyển đổi nó thành tệp Java Keystore (.jks) bằng công cụ dòng lệnh keytool. Sau đó, chọn tùy chọn tệp .jks bên dưới.", - "selectKey": "Chọn tệp khóa riêng của bạn (định dạng PKCS#8, có thể là .pem hoặc .der):", - "selectCert": "Chọn tệp chứng chỉ của bạn (định dạng X.509, có thể là .pem hoặc .der):", - "selectP12": "Chọn tệp Keystore PKCS#12 của bạn (.p12 hoặc .pfx) (Tùy chọn, nếu cung cấp, nó phải chứa khóa riêng và chứng chỉ của bạn):", - "selectJKS": "Chọn tệp Java Keystore của bạn (.jks hoặc .keystore):", - "certType": "Loại chứng chỉ", - "password": "Nhập mật khẩu Keystore hoặc Private Key của bạn (Nếu có):", - "showSig": "Hiển thị chữ ký", - "reason": "Lý do", - "location": "Vị trí", - "name": "Tên", - "showLogo": "Show Logo", - "submit": "Ký PDF" - }, - "removeCertSign": { - "tags": "xác thực,PEM,P12,chính thức,giải mã", - "title": "Xóa chữ ký chứng chỉ", - "header": "Xóa chứng chỉ số khỏi PDF", - "selectPDF": "Chọn một tệp PDF:", - "submit": "Xóa chữ ký" - }, - "pageLayout": { - "tags": "ghép,tổng hợp,xem đơn,sắp xếp", - "title": "Bố cục nhiều trang", - "header": "Bố cục nhiều trang", - "pagesPerSheet": "Số trang trên một tờ:", - "addBorder": "Thêm viền", - "submit": "Gửi" - }, - "scalePages": { - "tags": "điều chỉnh kích thước,sửa đổi,kích thước,điều chỉnh", - "title": "Điều chỉnh tỷ lệ trang", - "header": "Điều chỉnh tỷ lệ trang", - "pageSize": "Kích thước của một trang trong tài liệu.", - "keepPageSize": "Original Size", - "scaleFactor": "Mức độ phóng to (cắt cúp) của một trang.", - "submit": "Gửi" - }, - "add-page-numbers": { - "tags": "đánh số trang,gắn nhãn,sắp xếp,chỉ mục" - }, - "auto-rename": { - "tags": "tự động phát hiện,dựa trên tiêu đề,sắp xếp,đổi nhãn", - "title": "Tự động đổi tên", - "header": "Tự động đổi tên PDF", - "submit": "Tự động đổi tên" - }, - "adjust-contrast": { - "tags": "hiệu chỉnh màu sắc,điều chỉnh,sửa đổi,nâng cao" - }, - "crop": { - "tags": "cắt tỉa,thu nhỏ,chỉnh sửa,định hình", - "title": "Cắt cúp", - "header": "Cắt cúp PDF", - "submit": "Gửi" - }, - "autoSplitPDF": { - "tags": "Dựa trên QR,tách,phân đoạn quét,sắp xếp", - "title": "Tự động chia PDF", - "header": "Tự động chia PDF", - "description": "In, chèn, quét, tải lên và để chúng tôi tự động tách tài liệu của bạn. Không cần sắp xếp thủ công.", - "selectText": { - "1": "In một số trang phân cách từ bên dưới (Đen trắng là được).", - "2": "Quét tất cả tài liệu của bạn cùng một lúc bằng cách chèn trang phân cách giữa chúng.", - "3": "Tải lên tệp PDF quét lớn duy nhất và để Stirling PDF xử lý phần còn lại.", - "4": "Các trang phân cách được tự động phát hiện và xóa, đảm bảo tài liệu cuối cùng gọn gàng." - }, - "formPrompt": "Gửi PDF chứa trang phân cách Stirling-PDF:", - "duplexMode": "Chế độ hai mặt (Quét mặt trước và sau)", - "dividerDownload2": "Tải xuống 'Trang phân cách tự động (có hướng dẫn).pdf'", - "submit": "Gửi" - }, - "sanitizePdf": { - "tags": "làm sạch,bảo mật,an toàn,loại bỏ mối đe dọa" - }, - "URLToPDF": { - "tags": "chụp web,lưu trang,web sang tài liệu,lưu trữ", - "title": "URL sang PDF", - "header": "URL sang PDF", - "submit": "Chuyển đổi", - "credit": "Sử dụng WeasyPrint" - }, - "HTMLToPDF": { - "tags": "đánh dấu,nội dung web,chuyển đổi,chuyển", - "title": "HTML sang PDF", - "header": "HTML sang PDF", - "help": "Chấp nhận tệp HTML và ZIP chứa html/css/hình ảnh cần thiết", - "submit": "Chuyển đổi", - "credit": "Sử dụng WeasyPrint", - "zoom": "Mức độ phóng to để hiển thị trang web.", - "pageWidth": "Chiều rộng trang tính bằng cm. (Để trống để mặc định)", - "pageHeight": "Chiều cao trang tính bằng cm. (Để trống để mặc định)", - "marginTop": "Lề trên của trang tính bằng mm. (Để trống để mặc định)", - "marginBottom": "Lề dưới của trang tính bằng mm. (Để trống để mặc định)", - "marginLeft": "Lề trái của trang tính bằng mm. (Để trống để mặc định)", - "marginRight": "Lề phải của trang tính bằng mm. (Để trống để mặc định)", - "printBackground": "Hiển thị nền của trang web.", - "defaultHeader": "Bật tiêu đề mặc định (Tên và số trang)", - "cssMediaType": "Thay đổi loại phương tiện CSS của trang.", - "none": "Không", - "print": "In", - "screen": "Màn hình" - }, - "MarkdownToPDF": { - "tags": "đánh dấu,nội dung web,chuyển đổi,chuyển", - "title": "Markdown sang PDF", - "header": "Markdown sang PDF", - "submit": "Chuyển đổi", - "help": "Đang trong quá trình phát triển", - "credit": "Sử dụng WeasyPrint" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "thông tin,dữ liệu,số liệu thống kê,thống kê", - "title": "Lấy thông tin PDF", - "header": "Lấy thông tin PDF", - "submit": "Lấy thông tin", - "downloadJson": "Tải xuống JSON" - }, - "extractPage": { - "tags": "trích xuất" - }, - "PdfToSinglePage": { - "tags": "trang đơn" - }, - "showJS": { - "tags": "JS", - "title": "Hiển thị Javascript", - "header": "Hiển thị Javascript", - "downloadJS": "Tải xuống Javascript", - "submit": "Hiển thị" - }, - "autoRedact": { - "tags": "Biên tập,Ẩn,che đen,đen,bút đánh dấu,ẩn", - "title": "Tự động biên tập", - "header": "Tự động biên tập", - "colorLabel": "Màu sắc", - "textsToRedactLabel": "Văn bản cần biên tập (mỗi dòng một từ)", - "textsToRedactPlaceholder": "ví dụ: \\nMật \\nTối mật", - "useRegexLabel": "Sử dụng Regex", - "wholeWordSearchLabel": "Tìm kiếm toàn bộ từ", - "customPaddingLabel": "Đệm thêm tùy chỉnh", - "convertPDFToImageLabel": "Chuyển đổi PDF thành PDF-Hình ảnh (Dùng để xóa văn bản phía sau ô)", - "submitButton": "Gửi" - }, - "redact": { - "tags": "Redact,Hide,black out,black,marker,hidden,manual", - "title": "Manual Redaction", - "header": "Manual Redaction", - "submit": "Redact", - "textBasedRedaction": "Text based Redaction", - "pageBasedRedaction": "Page-based Redaction", - "convertPDFToImageLabel": "Convert PDF to PDF-Image (Used to remove text behind the box)", - "pageRedactionNumbers": { - "title": "Pages", - "placeholder": "(e.g. 1,2,8 or 4,7,12-16 or 2n-1)" - }, - "redactionColor": { - "title": "Redaction Color" - }, - "export": "Export", - "upload": "Upload", - "boxRedaction": "Box draw redaction", - "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom out", - "nextPage": "Next Page", - "previousPage": "Previous Page", - "toggleSidebar": "Toggle Sidebar", - "showThumbnails": "Show Thumbnails", - "showDocumentOutline": "Show Document Outline (double-click to expand/collapse all items)", - "showAttatchments": "Show Attachments", - "showLayers": "Show Layers (double-click to reset all layers to the default state)", - "colourPicker": "Colour Picker", - "findCurrentOutlineItem": "Find current outline item", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,Trích xuất bảng,trích xuất,chuyển đổi" - }, - "autoSizeSplitPDF": { - "tags": "pdf,chia,tài liệu,tổ chức" - }, - "overlay-pdfs": { - "tags": "Chồng lớp", - "header": "Chồng lớp tệp PDF", - "baseFile": { - "label": "Chọn tệp PDF nền" - }, - "overlayFiles": { - "label": "Chọn các tệp PDF chồng lớp" - }, - "mode": { - "label": "Chọn chế độ chồng lớp", - "sequential": "Chồng lớp tuần tự", - "interleaved": "Chồng lớp xen kẽ", - "fixedRepeat": "Chồng lớp lặp lại cố định" - }, - "counts": { - "label": "Số lần chồng lớp (cho chế độ lặp lại cố định)", - "placeholder": "Nhập số lần chồng lớp, phân cách bằng dấu phẩy (ví dụ: 2,3,1)" - }, - "position": { - "label": "Chọn vị trí chồng lớp", - "foreground": "Nền trước", - "background": "Nền sau" - }, - "submit": "Gửi" - }, - "split-by-sections": { - "tags": "Chia phần,Phân chia,Tùy chỉnh", - "title": "Chia PDF theo phần", - "header": "Chia PDF thành các phần", - "horizontal": { - "label": "Phân chia theo chiều ngang", - "placeholder": "Nhập số lượng phân chia theo chiều ngang" - }, - "vertical": { - "label": "Phân chia theo chiều dọc", - "placeholder": "Nhập số lượng phân chia theo chiều dọc" - }, - "submit": "Chia PDF", - "merge": "Trộn thành một PDF" - }, - "AddStampRequest": { - "tags": "Dấu,Thêm hình ảnh,căn giữa hình ảnh,Hình mờ,PDF,Nhúng,Tùy chỉnh", - "header": "Đóng dấu PDF", - "title": "Đóng dấu PDF", - "stampType": "Loại dấu", - "stampText": "Văn bản dấu", - "stampImage": "Hình ảnh dấu", - "alphabet": "Bảng chữ cái", - "fontSize": "Cỡ chữ/Kích thước hình ảnh", - "rotation": "Xoay", - "opacity": "Độ mờ", - "position": "Vị trí", - "overrideX": "Ghi đè tọa độ X", - "overrideY": "Ghi đè tọa độ Y", - "customMargin": "Lề tùy chỉnh", - "customColor": "Màu văn bản tùy chỉnh", - "submit": "Gửi" - }, - "removeImagePdf": { - "tags": "Remove Image,Page operations,Back end,server side" - }, - "splitPdfByChapters": { - "tags": "split,chapters,bookmarks,organize" - }, - "validateSignature": { - "tags": "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate", - "title": "Validate PDF Signatures", - "header": "Validate Digital Signatures", - "selectPDF": "Select signed PDF file", - "submit": "Validate Signatures", - "results": "Validation Results", - "status": { - "_value": "Status", - "valid": "Valid", - "invalid": "Invalid" - }, - "signer": "Signer", - "date": "Date", - "reason": "Reason", - "location": "Location", - "noSignatures": "No digital signatures found in this document", - "chain": { - "invalid": "Certificate chain validation failed - cannot verify signer's identity" - }, - "trust": { - "invalid": "Certificate not in trust store - source cannot be verified" - }, - "cert": { - "expired": "Certificate has expired", - "revoked": "Certificate has been revoked", - "info": "Certificate Details", - "issuer": "Issuer", - "subject": "Subject", - "serialNumber": "Serial Number", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "algorithm": "Algorithm", - "keySize": "Key Size", - "version": "Version", - "keyUsage": "Key Usage", - "selfSigned": "Self-Signed", - "bits": "bits" - }, - "signature": { - "info": "Signature Information", - "_value": "Signature", - "mathValid": "Signature is mathematically valid BUT:" - }, - "selectCustomCert": "Custom Certificate File X.509 (Optional)" - }, - "replace-color": { - "title": "Replace-Invert-Color", - "header": "Replace-Invert Color PDF", - "selectText": { - "1": "Replace or Invert color Options", - "2": "Default(Default high contrast colors)", - "3": "Custom(Customized colors)", - "4": "Full-Invert(Invert all colors)", - "5": "High contrast color options", - "6": "white text on black background", - "7": "Black text on white background", - "8": "Yellow text on black background", - "9": "Green text on black background", - "10": "Choose text Color", - "11": "Choose background Color" - }, - "submit": "Replace" - }, - "replaceColorPdf": { - "tags": "Replace Color,Page operations,Back end,server side" - }, - "login": { - "title": "Đăng nhập", - "header": "Đăng nhập", - "signin": "Đăng nhập", - "rememberme": "Ghi nhớ tôi", - "invalid": "Tên đăng nhập hoặc mật khẩu không hợp lệ.", - "locked": "Tài khoản của bạn đã bị khóa.", - "signinTitle": "Vui lòng đăng nhập", - "ssoSignIn": "Đăng nhập qua Single Sign-on", - "oAuth2AutoCreateDisabled": "Tự động tạo người dùng OAUTH2 bị vô hiệu hóa", - "oAuth2AdminBlockedUser": "Registration or logging in of non-registered users is currently blocked. Please contact the administrator.", - "oauth2RequestNotFound": "Không tìm thấy yêu cầu ủy quyền", - "oauth2InvalidUserInfoResponse": "Phản hồi thông tin người dùng không hợp lệ", - "oauth2invalidRequest": "Yêu cầu không hợp lệ", - "oauth2AccessDenied": "Truy cập bị từ chối", - "oauth2InvalidTokenResponse": "Phản hồi token không hợp lệ", - "oauth2InvalidIdToken": "Id Token không hợp lệ", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "User is deactivated, login is currently blocked with this username. Please contact the administrator.", - "alreadyLoggedIn": "You are already logged in to", - "alreadyLoggedIn2": "devices. Please log out of the devices and try again.", - "toManySessions": "You have too many active sessions", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF thành một trang", - "header": "PDF thành một trang", - "submit": "Chuyển đổi thành một trang" - }, - "pageExtracter": { - "title": "Trích xuất trang", - "header": "Trích xuất trang", - "submit": "Trích xuất", - "placeholder": "(ví dụ: 1,2,8 hoặc 4,7,12-16 hoặc 2n-1)" - }, - "sanitizePDF": { - "title": "Làm sạch PDF", - "header": "Làm sạch tệp PDF", - "selectText": { - "1": "Xóa các hành động JavaScript", - "2": "Xóa các tệp nhúng", - "3": "Remove XMP metadata", - "4": "Xóa liên kết", - "5": "Xóa phông chữ", - "6": "Remove Document Info Metadata" - }, - "submit": "Làm sạch PDF" - }, - "adjustContrast": { - "title": "Điều chỉnh độ tương phản", - "header": "Điều chỉnh độ tương phản", - "contrast": "Độ tương phản:", - "brightness": "Độ sáng:", - "saturation": "Độ bão hòa:", - "download": "Tải xuống" - }, - "compress": { - "title": "Nén", - "header": "Nén PDF", - "credit": "Dịch vụ này sử dụng qpdf để Nén/Tối ưu hóa PDF.", - "grayscale": { - "label": "Áp dụng thang độ xám để nén" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Mức độ tối ưu hóa:", - "4": "Chế độ tự động - Tự động điều chỉnh chất lượng để đạt được kích thước PDF chính xác", - "5": "Kích thước PDF mong muốn (ví dụ: 25MB, 10.8MB, 25KB)" - }, - "submit": "Nén" - }, - "decrypt": { - "passwordPrompt": "This file is password-protected. Please enter the password:", - "cancelled": "Operation cancelled for PDF: {0}", - "noPassword": "No password provided for encrypted PDF: {0}", - "invalidPassword": "Please try again with the correct password.", - "invalidPasswordHeader": "Incorrect password or unsupported encryption for PDF: {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "File decrypted successfully." - }, - "multiTool-advert": { - "message": "This feature is also available in our multi-tool page. Check it out for enhanced page-by-page UI and additional features!" - }, - "pageRemover": { - "title": "Xóa trang", - "header": "Xóa trang PDF", - "pagesToDelete": "Các trang cần xóa (Nhập danh sách số trang được phân cách bằng dấu phẩy) :", - "submit": "Xóa trang", - "placeholder": "(ví dụ: 1,2,6 hoặc 1-10,15-30)" - }, - "imageToPDF": { - "title": "Hình ảnh sang PDF", - "header": "Hình ảnh sang PDF", - "submit": "Chuyển đổi", - "selectLabel": "Tùy chọn điều chỉnh hình ảnh", - "fillPage": "Lấp đầy trang", - "fitDocumentToImage": "Điều chỉnh trang theo hình ảnh", - "maintainAspectRatio": "Giữ tỷ lệ khung hình", - "selectText": { - "2": "Tự động xoay PDF", - "3": "Logic đa tệp (Chỉ được bật khi làm việc với nhiều hình ảnh)", - "4": "Trộn thành một PDF duy nhất", - "5": "Chuyển đổi thành các PDF riêng biệt" - } - }, - "PDFToCSV": { - "title": "PDF sang CSV", - "header": "PDF sang CSV", - "prompt": "Chọn trang để trích xuất bảng", - "submit": "Trích xuất" - }, - "split-by-size-or-count": { - "title": "Chia PDF theo kích thước hoặc số lượng", - "header": "Chia PDF theo kích thước hoặc số lượng", - "type": { - "label": "Chọn loại chia", - "size": "Theo kích thước", - "pageCount": "Theo số trang", - "docCount": "Theo số tài liệu" - }, - "value": { - "label": "Nhập giá trị", - "placeholder": "Nhập kích thước (ví dụ: 2MB hoặc 3KB) hoặc số lượng (ví dụ: 5)" - }, - "submit": "Gửi" - }, - "printFile": { - "title": "In tệp", - "header": "In tệp vào máy in", - "selectText": { - "1": "Chọn tệp để in", - "2": "Nhập tên máy in" - }, - "submit": "In" - }, - "licenses": { - "nav": "Giấy phép", - "title": "Giấy phép bên thứ 3", - "header": "Giấy phép bên thứ 3", - "module": "Module", - "version": "Phiên bản", - "license": "Giấy phép" - }, - "survey": { - "nav": "Khảo sát", - "title": "Khảo sát Stirling-PDF", - "description": "Stirling-PDF không có cài đặt theo dõi nên chúng tôi muốn nghe từ người dùng để cải thiện Stirling-PDF!", - "changes": "Stirling-PDF has changed since the last survey! To find out more please check our blog post here:", - "changes2": "With these changes we are getting paid business support and funding", - "please": "Vui lòng cân nhắc tham gia khảo sát của chúng tôi!", - "disabled": "(Cửa sổ popup khảo sát sẽ bị vô hiệu hóa trong các bản cập nhật tiếp theo nhưng vẫn tìm thấy ở cuối trang)", - "button": "Tham gia khảo sát", - "dontShowAgain": "Không hiển thị lại", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "Remove image", - "header": "Remove image", - "removeImage": "Remove image", - "submit": "Remove image" - }, - "splitByChapters": { - "title": "Split PDF by Chapters", - "header": "Split PDF by Chapters", - "bookmarkLevel": "Bookmark Level", - "includeMetadata": "Include Metadata", - "allowDuplicates": "Allow Duplicates", - "desc": { - "1": "This tool splits a PDF file into multiple PDFs based on its chapter structure.", - "2": "Bookmark Level: Choose the level of bookmarks to use for splitting (0 for top-level, 1 for second-level, etc.).", - "3": "Include Metadata: If checked, the original PDF's metadata will be included in each split PDF.", - "4": "Allow Duplicates: If checked, allows multiple bookmarks on the same page to create separate PDFs." - }, - "submit": "Split PDF" - }, - "fileChooser": { - "click": "Click", - "or": "or", - "dragAndDrop": "Drag & Drop", - "dragAndDropPDF": "Drag & Drop PDF file", - "dragAndDropImage": "Drag & Drop Image file", - "hoveredDragAndDrop": "Drag & Drop file(s) here", - "extractPDF": "Extracting..." - }, - "releases": { - "footer": "Releases", - "title": "Release Notes", - "header": "Release Notes", - "current": { - "version": "Current Release" - }, - "note": "Release notes are only available in English" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/zh-BO/translation.json b/frontend/dist/locales/zh-BO/translation.json deleted file mode 100644 index 7386ee7fd..000000000 --- a/frontend/dist/locales/zh-BO/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "ཡིག་གཟུགས་ཆེ་ཆུང་", - "fontName": "ཡིག་གཟུགས་མིང་", - "title": "ཤོག་གྲངས་སྣོན་པ།", - "header": "ཤོག་གྲངས་སྣོན་པ།", - "selectText": { - "1": "PDF ཡིག་ཆ་འདེམས་པ།", - "2": "མཐའ་མཚམས་ཀྱི་ཆེ་ཆུང་།", - "3": "གནས་ས།", - "4": "འགོ་འཛུགས་ཨང་གྲངས།", - "5": "ཨང་གྲངས་རྒྱག་རྒྱུའི་ཤོག་ངོས།", - "6": "རང་སྒྲིག་ཡི་གེ" - }, - "customTextDesc": "རང་སྒྲིག་ཡི་གེ", - "numberPagesDesc": "ཨང་གྲངས་རྒྱག་རྒྱུའི་ཤོག་ངོས། སྔོན་སྒྲིག་ནི་'ཚང་མ་'ཡིན། 1-5 ཡང་ན་ 2,5,9 སོགས་ཀྱང་ངོས་ལེན་བྱེད།", - "customNumberDesc": "སྔོན་སྒྲིག་ནི་ {n} ཡིན། 'ཤོག་ངོས་ {n} / {total}', 'ཡི་གེ-{n}', '{filename}-{n}' སོགས་ཀྱང་ངོས་ལེན་བྱེད།", - "submit": "ཤོག་གྲངས་སྣོན་པ།" - }, - "pdfPrompt": "PDF འདེམས་རོགས།", - "multiPdfPrompt": "PDF གཉིས་ཡན་འདེམས་རོགས།", - "multiPdfDropPrompt": "དགོས་མཁོ་འདི་ PDF ཡིག་ཆ་ཚང་མ་འདེམས་པའམ་འཐེན་རོགས།", - "imgPrompt": "པར་རིས་འདེམས་རོགས།", - "genericSubmit": "ཕུལ་བཅོས།", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "ཉེན་བཅོས། བྱ་རིམ་འདི་ཡིག་ཆའི་ཆེ་ཆུང་ལ་གཞིགས་ནས་སྐར་མ་གཅིག་བར་འགོར་སྲིད།", - "pageOrderPrompt": "ཤོག་ངོས་གོ་རིམ་རང་སྒྲིག(ཤོག་གྲངས་ཀྱི་ཐོ་གཞུང་ངམ་རྩིས་རྒྱག་བྱེད་ཐབས་ 2n+1 ལྟ་བུ་འཇུག་རོགས།)", - "pageSelectionPrompt": "ཤོག་ངོས་འདེམས་སྒྲུག(ཤོག་གྲངས་ཀྱི་ཐོ་གཞུང་ 1,5,6 འམ་རྩིས་རྒྱག་བྱེད་ཐབས་ 2n+1 ལྟ་བུ་འཇུག་རོགས།)", - "goToPage": "འགྲོ་བ།", - "true": "བདེན་པ།", - "false": "རྫུན་མ།", - "unknown": "མི་ཤེས་པ།", - "save": "ཉར་ཚགས།", - "saveToBrowser": "བཤར་ཆེ་ནང་ཉར་ཚགས།", - "close": "སྒོ་རིག།", - "filesSelected": "ཡིག་ཆབདམས་ཟིན།", - "noFavourites": "དགའ་མོས་གང་ཡང་སྣོན་མེད།", - "downloadComplete": "ཕབ་ལེན་ལེགས་གྲུབ།", - "bored": "སྒུག་སྡོད་སྐྱིད་པོ་མི་འདུག་གམ།", - "alphabet": "གསལ་བྱེད།", - "downloadPdf": "PDF ཕབ་ལེན།", - "text": "ཡི་གེ", - "font": "ཡིག་གཟུགས་ཌྷ", - "selectFillter": "-- འདེམས་རོགས། --", - "pageNum": "ཤོག་གིངས།", - "sizes": { - "small": "ཆུང་ཆང་།", - "medium": "འབྲིང་ཚད།", - "large": "ཆེན་པོ།", - "x-large": "ཧ་ཅང་ཆེན་པོ།" - }, - "error": { - "pdfPassword": "PDF ཡིག་ཆར་གསང་ཚིག་བཀོད་ཡོད་པ་དང་། གསང་ཚིག་མ་བཀོད་པའམ་ནོར་འདུག", - "_value": "ནོར་འཁྲུལ།", - "sorry": "དཀའ་ངལ་ལ་དགོངས་དག", - "needHelp": "རོགས་རམ་དགོས་སམ། / དཀའ་ངལ་ཞིག་རྙེད་སོང་ངམ།", - "contactTip": "གལ་སྲིད་ད་དུང་དཀའ་ངལ་འཕྲད་བཞིན་ཡོད་ན། རོགས་རམ་ཞུ་བར་ང་ཚོར་འབྲེལ་གཏུག་བྱེད་རོགས། ཁྱེད་ཀྱིས་ང་ཚོའི་ GitHub ཤོག་ངོས་སུ་སྙན་ཞུ་འབུལ་བའམ་ Discord བརྒྱུད་ནས་འབྲེལ་བ་གནང་ཆོག", - "404": { - "head": "404 - ཤོག་ངོས་མ་རྙེད། | དགོངས་པ་མ་ཚོམ། ང་ཚོ་ཚབས་ཆེའི་ནོར་འཁྲུལ་ཞིག་བྱུང་སོང་།", - "1": "ཁྱེད་ཀྱིས་འཚོལ་བཞིན་པའི་ཤོག་ངོས་དེ་རྙེད་ཐུབ་ཀྱི་མི་འདུག", - "2": "ནོར་འཁྲུལ་ཞིག་བྱུང་སོང་།" - }, - "github": "GitHub སྟེང་དུ་སྙན་ཞུ་འབུལ་བ།", - "showStack": "Stack Trace སྟོན།", - "copyStack": "Stack Trace པར་སློག", - "githubSubmit": "GitHub - སྙན་ཞུ་འབུལ་བ།", - "discordSubmit": "Discord - རྒྱབ་སྐྱོར་སྙན་ཞུ་འབུལ་བ།" - }, - "delete": "སུབ་པ།", - "username": "སྤྱོད་མཁན་མིང་།", - "password": "གསང་ཚིག།", - "welcome": "དགའ་བསི་ཞུ།", - "property": "ཁྱད་ཆོས།", - "black": "ནག་པོ", - "white": "དཀར་པོ", - "red": "དམར་པོ", - "green": "ལྗང་ཁུ།", - "blue": "སྔོན་པོ", - "custom": "མཚན་ཉིད་རང་སྒྲིག...", - "WorkInProgess": "ལས་ཀ་བྱེད་བཞིན་པ། ནོར་འཁྲུལ་ཡོང་སྲིད། དཀའ་ངལ་ཡོད་ཚེ་སྙན་སེང་གནང་རོགས།", - "poweredBy": "མཁོ་སྲོད་བྱེད་མཁན།", - "yes": "ཡིན།", - "no": "མིན།", - "changedCredsMessage": "ངོ་སྤྲོད་ལག་ཁྱེར་བསྒྱུར་ཟིན།", - "notAuthenticatedMessage": "སྤྱོད་མཁན་ར་སྤྲོད་བྱས་མེད།", - "userNotFoundMessage": "སྤྱོད་མཁན་རྙེད་མ་བྱུང་།", - "incorrectPasswordMessage": "ད་ལྟའི་གསང་ཚིག་ནོར་འདུག", - "usernameExistsMessage": "སྤྱོད་མཁན་མིང་གསར་པ་དེ་ཡོད་ཟིན།", - "invalidUsernameMessage": "སྤྱོད་མཁན་མིང་ནུས་མེད། ཡི་གེ་དང་ཨང་ཀི། དམིགས་བསལ་མཚོན་རྟགས་ @._+- ཡང་ན་གློག་འཕྲིན་ཁ་བྱང་ཚད་ལྡན་ཞིག་དགོས།", - "invalidPasswordMessage": "གསང་ཚིག་སྟོང་པ་ཡིན་མི་ཆོག་ལ། མགོ་མཇུག་ཏུ་བར་སྟོང་ཡོད་མི་ཆོག", - "confirmPasswordErrorMessage": "གསང་ཚིག་གསར་པ་དང་གསང་ཚིག་གསར་པ་ངོས་སྦྱོར་གཉིས་མཐུན་དགོས།", - "deleteCurrentUserMessage": "ད་ལྟ་ནང་འཛུལ་བྱས་པའི་སྤྱོད་མཁན་སུབ་མི་ཆོག", - "deleteUsernameExistsMessage": "སྤྱོད་མཁན་མིང་མེད་པས་སུབ་མི་ཐུབ།", - "downgradeCurrentUserMessage": "ད་ལྟའི་སྤྱོད་མཁན་གྱི་གོ་གནས་མར་འབེབས་མི་ཆོག", - "disabledCurrentUserMessage": "ད་ལྟའི་སྤྱོད་མཁན་སྤྱོད་མི་ཆོག་པ་བཟོ་མི་ཆོག", - "downgradeCurrentUserLongMessage": "ད་ལྟའི་སྤྱོད་མཁན་གྱི་གོ་གནས་མར་འབེབས་མི་ཆོག དེར་བརྟེན་ད་ལྟའི་སྤྱོད་མཁན་སྟོན་མི་སྲིད།", - "userAlreadyExistsOAuthMessage": "སྤྱོད་མཁན་འདི་ OAuth2 སྤྱོད་མཁན་ཞིག་ཏུ་ཡོད་ཟིན།", - "userAlreadyExistsWebMessage": "སྤྱོད་མཁན་འདི་དྲ་ཚིགས་སྤྱོད་མཁན་ཞིག་ཏུ་ཡོད་ཟིན།", - "oops": "ཨ་ཙི།", - "help": "རོགས་རམ།", - "goHomepage": "གཙོ་ངོས་སུ་ཕྱིན།", - "joinDiscord": "ང་ཚོའི་ Discord སྡེ་ཚན་དུ་འཛུལ།", - "seeDockerHub": "Docker Hub ལ་ལྟ་བ།", - "visitGithub": "Github མཛོད་ཁང་ལ་འཚམས་འདྲི།", - "donate": "ཞལ་འདེབས།", - "color": "ཚོན་མདོག", - "sponsor": "མཐུན་འགྱུར་སྦྱོར་མཁན།", - "info": "ཆ་འཕྲིན།", - "pro": "ཆེད་ལས།", - "page": "ཤོག་ངོས།", - "pages": "ཤོག་ངོས་ཁག", - "loading": "འཇུག་བཞིན་པ...", - "addToDoc": "ཡིག་ཆར་སྣོན།", - "reset": "བསྐྱར་སྒྲིག", - "apply": "ཉེར་སྤྱོད།", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "གསང་དོན་སྲིད་བྱུས།", - "terms": "བེད་སྤྱོད་ཆ་རྐྱེན།", - "accessibility": "བེད་སྤྱོད་ནུས་པ།", - "cookie": "Cookie སྲིད་བྱུས།", - "impressum": "པར་འདེབས་བདག་དབང་།", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "བརྒྱུད་རིམ་ཐོ་ཡིག (Beta)", - "uploadButton": "མཁོ་སྤྲོད་རང་སྒྲིག", - "configureButton": "སྒྲིག་འགོད།", - "defaultOption": "རང་སྒྲིག", - "submitButton": "ཕུལ་བ།", - "help": "བརྒྱུད་རིམ་རོགས་རམ།", - "scanHelp": "ཡིག་སྣོད་བཤེར་འཚོལ་རོགས་རམ།", - "deletePrompt": "བརྒྱུད་རིམ་སུབ་རྒྱུ་གཏན་འཁེལ་ལམ།", - "tags": "རང་འགུལ།,རིམ་པ།,འཁྲབ་གཞུང་།,ཆ་ཚང་བཀོལ་སྤྱོད།", - "title": "རྒ��ུ་ལམ།" - }, - "pipelineOptions": { - "header": "བརྒྱུད་རིམ་སྒྲིག་འགོད།", - "pipelineNameLabel": "བརྒྱུད་རིམ་མིང་།", - "saveSettings": "བཀོལ་སྤྱོད་སྒྲིག་འགོད་ཉར་ཚགས།", - "pipelineNamePrompt": "བརྒྱུད་རིམ་གྱི་མིང་འདིར་འཇུག་རོགས།", - "selectOperation": "བཀོལ་སྤྱོད་འདེམས་རོགས།", - "addOperationButton": "བཀོལ་སྤྱོད་སྣོན།", - "pipelineHeader": "བརྒྱུད་རིམ།", - "saveButton": "ཕབ་ལེན།", - "validateButton": "ཚད་ལྡན་ཡིན་མིན་ཞིབ་བཤེར།" - }, - "enterpriseEdition": { - "button": "ཆེད་ལས་པའི་རིམ་པར་རྒྱག", - "warning": "ནུས་པ་འདི་ཆེད་ལས་པའི་སྤྱོད་མཁན་ཁོ་ནར་སྤྱོད་ཆོག", - "yamlAdvert": "Stirling PDF Pro ཡིས་ YAML སྒྲིག་འགོད་ཡིག་ཆ་དང་ SSO ནུས་པ་གཞན་དག་ལ་རྒྱབ་སྐྱོར་བྱེད།", - "ssoAdvert": "སྤྱོད་མཁན་དོ་དམ་ནུས་པ་མང་བ་དགོས་སམ། Stirling PDF Pro ལ་ལྟ་རོགས།" - }, - "analytics": { - "title": "ཁྱེད་ཀྱིས་ Stirling PDF ལེགས་སུ་གཏོང་འདོད་དམ།", - "paragraph1": "Stirling PDF ལ་ཐོན་རྫས་ལེགས་སུ་གཏོང་བར་རོགས་རམ་བྱེད་པའི་གདམ་ག་ཡོད་པའི་དཔྱད་ཞིབ་ཡོད། ང་ཚོས་སྒེར་གྱི་ཆ་འཕྲིན་དང་ཡིག་ཆའི་ནང་དོན་གང་ཡང་རྗེས་འདེད་མི་བྱེད།", - "paragraph2": "Stirling-PDF འཕེལ་རྒྱས་དང་ང་ཚོའི་སྤྱོད་མཁན་ལེགས་པོར་རྟོགས་པར་རོགས་རམ་བྱེད་པའི་ཆེད་དུ་དཔྱད་ཞིབ་སྤྱོད་འགོ་འཛུགས་རོགས།", - "enable": "དཔྱད་ཞིབ་སྤྱོད་འགོ་འཛུགས།", - "disable": "དཔྱད་ཞིབ་སྤྱོད་མཚམས་འཇོག", - "settings": "དཔྱད་ཞིབ་ཀྱི་སྒྲིག་འགོད་ config/settings.yml ཡིག་ཆའི་ནང་བསྒྱུར་བཅོས་བྱེད་ཆོག" - }, - "navbar": { - "favorite": "དགའ་མོས།", - "recent": "New and recently updated", - "darkmode": "མུན་ནག་རྣམ་པ།", - "language": "སྐད་རིགས།", - "settings": "སྒྲིག་འགོད།", - "allTools": "ལག་ཆ།", - "multiTool": "ལག་ཆ་མང་པོ།", - "search": "འཚོལ་བཤེར།", - "sections": { - "organize": "གོ་སྒྲིག", - "convertTo": "PDF ལ་བསྒྱུར་བ།", - "convertFrom": "PDF ནས་བསྒྱུར་བ།", - "security": "མིང་རྟགས་དང་བདེ་འཇགས།", - "advance": "མཐོ་རིམ།", - "edit": "ལྟ་བ་དང་རྩོམ་སྒྲིག", - "popular": "སྤྱི་མོས།" - } - }, - "settings": { - "title": "སྒྲིག་འགོད།", - "update": "གསར་སྒྱུར་ཡོད།", - "updateAvailable": "{0} ནི་ད་ལྟ་སྒྲིག་འཇུག་བྱས་པའི་པར་གཞི་ཡིན། པར་གཞི་གསར་པ་ ({1}) ཡོད།", - "appVersion": "མཉེན་ཆས་པར་གཞི།", - "downloadOption": { - "title": "ཕབ་ལེན་གདམ་ག་འདེམས་རོགས། (ཡིག་ཆ་རྐྱང་པ་ zip མིན་པའི་ཕབ་ལེན་ཆེད།):", - "1": "སྒེའུ་ཁུང་གཅིག་པའི་ནང་ཁ་ཕྱེ།", - "2": "སྒེའུ་ཁུང་གསར་པར་ཁ་ཕྱེ།", - "3": "ཡིག་ཆ་ཕབ་ལེན།" - }, - "zipThreshold": "ཕབ་ལེན་བྱས་པའི་ཡིག་ཆའི་གྲངས་ཀ་འདི་ལས་བརྒལ་ན་ zip བྱེད།", - "signOut": "ཕྱིར་འབུད།", - "accountSettings": "ཐོ་མིང་སྒྲིག་འགོད།", - "bored": { - "help": "སྒོ་ང་རྩེད་མོ་སྤྱོད་འགོ་རྩོམ།" - }, - "cacheInputs": { - "name": "ནང་འཇུག་གི་ནང་དོན་ཉར་ཚགས།", - "help": "སྔོན་མ་བེད་སྤྱད་པའི་ནང་འཇུག་གི་ནང་དོན་མ་འོངས་པར་བེད་སྤྱོད་ཆེད་ཉར་ཚགས་བྱེད།" - } - }, - "changeCreds": { - "title": "ངོ་སྤྲོད་ལག་ཁྱེར་བསྒྱུར་བ།", - "header": "ཁྱེད་ཀྱི་ཐོ་མིང་ཞིབ་ཕྲ་གསར་སྒྱུར།", - "changePassword": "ཁྱེད་ཀྱིས་སྔོན་སྒྲིག་ནང་འཛུལ་ངོ་སྤྲོད་བེད་སྤྱོད་བྱེད་བཞིན་ཡོད། གསང་ཚིག་གསར་པ་འཇུག་རོགས།", - "newUsername": "སྤྱོད་མཁན་མིང་གསར་པ།", - "oldPassword": "ད་ལྟའི་གསང་ཚིག", - "newPassword": "གསང་ཚིག་གསར་པ།", - "confirmNewPassword": "གསང་ཚིག་གསར་པ་ངོས་སྦྱོར།", - "submit": "འགྱུར་བ་ཕུལ་བ།" - }, - "account": { - "title": "ཐོ་མིང་སྒྲིག་འགོད།", - "accountSettings": "ཐོ་མིང་སྒྲིག་འགོད།", - "adminSettings": "དོ་དམ་པའི་སྒྲིག་འགོད། - སྤྱོད་མཁན་ལྟ་བ་དང་སྣོན་པ།", - "userControlSettings": "སྤྱོད་མཁན་ཚོད་འཛིན་སྒྲིག་འགོད།", - "changeUsername": "སྤྱོད་མཁན་མིང་བསྒྱུར་བ།", - "newUsername": "སྤྱོད་མཁན་མིང་གསར་པ།", - "password": "གསང་ཚིག་ངོས་སྦྱོར།", - "oldPassword": "གསང་ཚིག་རྙིང་པ།", - "newPassword": "གསང་ཚིག་གསར་པ།", - "changePassword": "གསང་ཚིག་བསྒྱུར་བ།", - "confirmNewPassword": "གསང་ཚིག་གསར་པ་ངོས་སྦྱོར།", - "signOut": "ཕྱིར་འབུད།", - "yourApiKey": "ཁྱེད་ཀྱི་ API ལྡེ་མིག", - "syncTitle": "བཤར་ཆས་སྒྲིག་འགོད་ཐོ་མིང་དང་མཉམ་བགྲོད།", - "settingsCompare": "སྒྲིག་འགོད་བསྡུར་བ།", - "property": "ཁྱད་ཆོས།", - "webBrowserSettings": "བཤར་ཆས་སྒྲིག་འགོད།", - "syncToBrowser": "མཉམ་བགྲོད་ཐོ་མིང་ -> བཤར་ཆས།", - "syncToAccount": "མཉམ་བགྲོད་ཐོ་མིང་ <- བཤར་ཆས།" - }, - "adminUserSettings": { - "title": "སྤྱོད་མཁན་ཚོད་འཛིན་སྒྲིག་འགོད།", - "header": "དོ་དམ་པའི་སྤྱོད་མཁན་ཚོད་འཛིན་སྒྲིག་འགོད།", - "admin": "དོ་དམ་པ།", - "user": "སྤྱོད་མཁན།", - "addUser": "སྤྱོད་མཁན་གསར་པ་སྣོན།", - "deleteUser": "སྤྱོད་མཁན་སུབ་པ།", - "confirmDeleteUser": "སྤྱོད་མཁན་སུབ་དགོས་སམ།", - "confirmChangeUserStatus": "སྤྱོད་མཁན་སྤྱོད་མི་ཆོག་པའམ་སྤྱོད་ཆོག་པ་བཟོ་དགོས་སམ།", - "usernameInfo": "སྤྱོད་མཁན་མིང་ནང་ཡི་གེ་དང་ཨང་ཀི། དམིགས་བསལ་མཚོན་རྟགས་ @._+- ཡང་ན་གློག་འཕྲིན་ཁ་བྱང་ཚད་ལྡན་ཞིག་དགོས།", - "roles": "འགན་འཁུར།", - "role": "འགན་འཁུར།", - "actions": "བྱ་སྤྱོད།", - "apiUser": "ཚད་བཀག་ཅན་གྱི་ API སྤྱོད་མཁན།", - "extraApiUser": "ཚད་བཀག་ཅན་གྱི་ API སྤྱོད་མཁན་འཕར་མ།", - "webOnlyUser": "དྲ་ཚིགས་ཁོ་ནའི་སྤྱོད་མཁན།", - "demoUser": "བརྟག་དཔྱད་སྤྱོད་མཁན། (རང་སྒྲིག་མེད་པ།)", - "internalApiUser": "ནང་ཁུལ་ API སྤྱོད་མཁན།", - "forceChange": "ནང་འཛུལ་སྐབས་གསང་ཚིག་བསྒྱུར་དགོས་པ་བཟོ་བ།", - "submit": "སྤྱོད་མཁན་ཉར་ཚགས།", - "changeUserRole": "སྤྱོད་མཁན་གྱི་འགན་འཁུར་བསྒྱུར་བ།", - "authenticated": "ར་སྤྲོད་བྱས་ཟིན།", - "editOwnProfil": "རང་ཉིད་ཀྱི་སྤྱོད་མཁན་ཡིག་ཆ་རྩོམ་སྒྲིག", - "enabledUser": "སྤྱོད་ཆོག་པའི་སྤྱོད་མཁན།", - "disabledUser": "སྤྱོད་མི་ཆོག་པའི་སྤྱོད་མཁན།", - "activeUsers": "འགུལ་བཞིན་པའི་སྤྱོད་མཁན།", - "disabledUsers": "སྤྱོད་མི་ཆོག་པའི་སྤྱོད་མཁན།", - "totalUsers": "སྤྱོད་མཁན་ཁྱོན་བསྡོམས།", - "lastRequest": "རེ་ཞུ་མཐའ་མ།", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "གཞི་གྲངས་མཛོད་ནང་འདྲེན་/ཕྱིར་འདྲེན།", - "header": "གཞི་གྲངས་མཛོད་ནང་འདྲེན་/ཕྱིར་འདྲེན།", - "fileName": "ཡིག་ཆའི་མིང་།", - "creationDate": "བཟོ་བའི་དུས་ཚོད།", - "fileSize": "ཡིག་ཆའི་ཆེ་ཆུང་།", - "deleteBackupFile": "གྲབས་ཉར་ཡིག་ཆ་སུབ་པ།", - "importBackupFile": "གྲབས་ཉར་ཡིག་ཆ་ནང་འདྲེན།", - "createBackupFile": "གྲབས་ཉར་ཡིག་ཆ་བཟོ་བ།", - "downloadBackupFile": "གྲབས་ཉར་ཡིག་ཆ་ཕབ་ལེན།", - "info_1": "གཞི་གྲངས་ནང་འདྲེན་སྐབས་བཀོད་པ་ཏག་ཏག་ཡིན་པ་ངེས་པར་དུ་བྱེད་དགོས། གལ་སྲིད་ཁྱེད་རང་གང་བྱེད་བཞིན་པ་མི་ཤེས་ན། ཆེད་ལས་པ་ཞིག་ལས་ལམ་སྟོན་དང་རྒྱབ་སྐྱོར་ཞུ་རོགས། བཀོད་པའི་ནང་ནོར་འཁྲུལ་ཡོད་ན་མཉེན་ཆས་ལ་སྐྱོན་ཤོར་སྲིད་པ་དང་། ཐ་ན་མཉེན་ཆས་གཏན་ནས་འཁོར་སྐྱོད་བྱེད་མི་ཐུབ་པའང་ཡོང་སྲིད།", - "info_2": "ཡིག་ཆ་ཡར་འཇུག་སྐབས་ཡིག་ཆའི་མིང་ལ་ཁྱད་པར་མེད། དེའི་རྗེས་སུ་ backup_user_yyyyMMddHHmm.sql ཞེས་པའི་རྣམ་པར་མིང་བསྐྱར་འདོགས་བྱ་རྒྱུ་ཡིན་པས། མིང་འདོགས་སྟངས་གཅིག་མཚུངས་ཡིན་པ་ངེས་པར་བྱེད་ཐུབ།", - "submit": "གྲབས་ཉར་ནང་འདྲེན།", - "importIntoDatabaseSuccessed": "གཞི་གྲངས་མཛོད་དུ་ནང་འདྲེན་ལེགས་གྲུབ།", - "backupCreated": "གཞི་གྲངས་མཛོད་གྲབས་ཉར་ལེགས་གྲུབ།", - "fileNotFound": "ཡིག་ཆ་རྙེད་མ་བྱུང་།", - "fileNullOrEmpty": "ཡིག་ཆ་སྟོང་པའམ་མེད་པ་ཡིན་མི་ཆོག", - "failedImportFile": "ཡིག་ཆ་ནང་འདྲེན་ཕམ་པ།", - "notSupported": "སྡུད་གཞི་རྒྱབ་སྐྱོར་མི་བྱེད།" - }, - "session": { - "expired": "ཁྱེད་ཀྱི་གླེང་མོལ་དུས་ཡོལ་ཟིན། ཤོག་ངོས་གསར་སྒྱུར་བྱས་ནས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱེད་རོགས།", - "refreshPage": "ཤོག་ངོས་གསར་སྒྱུར།" - }, - "home": { - "desc": "ཁྱེད་ཀྱི་ PDF དགོས་མཁོ་ཚང་མའི་ཆེད་དུ་ས་གནས་རང་དུ་བཞག་པའི་ཞབས་ཞུ་ཁང་།", - "searchBar": "ནུས་པ་འཚོལ་བཤེར།", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "ལྟ་བ། མཆན་འགྲེལ། ཡི་གེ་དང་པར་རིས་སྣོན་པ།" - }, - "setFavorites": "Set Favourites", - "hideFavorites": "Hide Favourites", - "showFavorites": "Show Favourites", - "legacyHomepage": "Old homepage", - "newHomePage": "Try our new homepage!", - "alphabetical": "Alphabetical", - "globalPopularity": "Global Popularity", - "sortBy": "Sort by:", - "multiTool": { - "title": "PDF ལག་ཆ་མང་པོ།", - "desc": "སྡེབ་སྦྱོར། འཁོར་སྐྱོད། བསྐྱར་སྒྲིག ཁ་གྱེས། དང་ཤོག་ངོས་སུབ་པ།" - }, - "merge": { - "title": "སྡེབ་སྦྱོར།", - "desc": "PDF མང་པོ་གཅིག་ཏུ་སྡེབ་སྦྱོར་བྱེད་པ།" - }, - "split": { - "title": "ཁ་གྱེས།", - "desc": "PDF ཡིག་ཆ་མང་པོར་བགོ་བ།" - }, - "rotate": { - "title": "འཁོར་སྐྱོད།", - "desc": "PDF ལས་སླ་པོའི་ངང་འཁོར་སྐྱོད་བྱེད་པ།" - }, - "imageToPdf": { - "title": "པར་རིས་ནས་ PDF ལ།", - "desc": "པར་རིས་ (PNG, JPEG, GIF) ནས་ PDF ལ་བསྒྱུར་བ།" - }, - "pdfToImage": { - "title": "PDF ནས་པར་རིས་ལ།", - "desc": "PDF ནས་པར་རིས་ (PNG, JPEG, GIF) ལ་བསྒྱུར་བ།" - }, - "pdfOrganiser": { - "title": "གོ་སྒྲིག", - "desc": "ཤོག་ངོས་རྣམས་གོ་རིམ་གང་རུང་དུ་སུབ་པའམ་བསྐྱར་སྒྲིག་བྱེད་པ།" - }, - "addImage": { - "title": "པར་རིས་སྣོན་པ།", - "desc": "PDF ནང་གནས་ས་ངེས་ཅན་ཞིག་ཏུ་པར་རིས་སྣོན་པ།" - }, - "watermark": { - "title": "ཆུ་རྟགས་སྣོན་པ།", - "desc": "PDF ཡིག་ཆར་རང་སྒྲིག་གི་ཆུ་རྟགས་སྣོན་པ།" - }, - "permissions": { - "title": "ཆོག་མཆན་བསྒྱུར་བ།", - "desc": "PDF ཡིག་ཆའི་ཆོག་མཆན་བསྒྱུར་བ།" - }, - "removePages": { - "title": "སུབ་པ།", - "desc": "PDF ཡིག་ཆ་ནས་མི་དགོས་པའི་ཤོག་ངོས་རྣམས་སུབ་པ།" - }, - "addPassword": { - "title": "གསང་ཚིག་སྣོན་པ།", - "desc": "PDF ཡིག་ཆར་གསང་ཚིག་གིས་གསང་སྡོམ་བྱེད་པ།" - }, - "removePassword": { - "title": "གསང་ཚིག་སུབ་པ།", - "desc": "PDF ཡིག་ཆ་ནས་གསང་ཚིག་སྲུང་སྐྱོབ་སུབ་པ།" - }, - "compressPdfs": { - "title": "སྡུད་སྒྲིལ།", - "desc": "ཡིག་ཆའི་ཆེ་ཆུང་ཆུང་དུ་གཏོང་ཆེད་ PDF སྡུད་སྒྲིལ་བྱེད་པ།" - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "གནས་ཆ་སྒྱུར་བཅོས།", - "desc": "PDF ཡིག་ཆ་ནས་གནས་ཆ་བསྒྱུར་བའམ་སུབ་པ།སྣོན་པ།" - }, - "fileToPDF": { - "title": "ཡིག་ཆ་ནས་ PDF ལ་བསྒྱུར་བ།", - "desc": "ཡིག་ཆ་ཕལ་ཆེ་བ་ PDF ལ་བསྒྱུར་ཐུབ། (DOCX, PNG, XLS, PPT, TXT སོགས།)" - }, - "ocr": { - "title": "OCR / བཤེར་འབེབས་གཙང་སེལ།", - "desc": "བཤེར་འབེབས་གཙང་སེལ་དང་ PDF ནང་གི་པར་རིས་ནས་ཡི་གེ་ངོས་འཛིན་བྱས་ཏེ་ཡི་གེའི་རྣམ་པར་བསྐྱར་སྣོན་བྱེད་པ།" - }, - "extractImages": { - "title": "པར་རིས་ཕྱིར་འདོན།", - "desc": "PDF ནས་པར་རིས་ཚང་མ་ཕྱིར་བཏོན་ནས་ zip ནང་ཉར་ཚགས་བྱེད་པ།" - }, - "pdfToPDFA": { - "title": "PDF ནས་ PDF/A ལ།", - "desc": "PDF ནས་དུས་ཡུན་རིང་པོའི་ཉར་ཚགས་ཆེད་ PDF/A ལ་བསྒྱུར་བ།" - }, - "PDFToWord": { - "title": "PDF ནས་ Word ལ།", - "desc": "PDF ནས་ Word རྣམ་གཞག་ (DOC, DOCX དང་ ODT) ལ་བསྒྱུར་བ།" - }, - "PDFToPresentation": { - "title": "PDF ནས་སྟོན་བྱེད་ལ།", - "desc": "PDF ནས་སྟོན་བྱེད་རྣམ་གཞག་ (PPT, PPTX དང་ ODP) ལ་བསྒྱུར་བ།" - }, - "PDFToText": { - "title": "PDF ནས་ RTF (ཡི་གེ) ལ།", - "desc": "PDF ནས་ཡི་གེའམ་ RTF རྣམ་གཞག་ལ་བསྒྱུར་བ།" - }, - "PDFToHTML": { - "title": "PDF ནས་ HTML ལ།", - "desc": "PDF ནས་ HTML རྣམ་གཞག་ལ་བསྒྱུར་བ།" - }, - "PDFToXML": { - "title": "PDF ནས་ XML ལ།", - "desc": "PDF ནས་ XML རྣམ་གཞག་ལ་བསྒྱུར་བ།" - }, - "ScannerImageSplit": { - "title": "བཤེར་པར་ངོས་འཛིན་/ཁ་གྱེས།", - "desc": "པར་རིས་/PDF ནང་གི་པར་མང་པོ་ཁ་གྱེས་བྱེད་པ།" - }, - "sign": { - "title": "མིང་རྟགས།", - "desc": "རི་མོ། ཡི་གེ། པར་རིས་བཅས་ཀྱི་སྒོ་ནས་ PDF ལ་མིང་རྟགས་སྣོན་པ།" - }, - "flatten": { - "title": "སྙོམས་པ།", - "desc": "PDF ནས་སྤྱོད་སྒོ་ཅན་གྱི་ཆ་ཤས་དང་འགེངས་ཤོག་ཚང་མ་སུབ་པ།" - }, - "repair": { - "title": "བཟོ་བཅོས།", - "desc": "སྐྱོན་ཤོར་བའམ་གཏོར་བཤིག་ཐེབས་པའི་ PDF བཟོ་བཅོས་བྱེད་ཐབས་བྱེད་པ།" - }, - "removeBlanks": { - "title": "སྟོང་ཤོག་སུབ་པ།", - "desc": "PDF ནང་གི་སྟོང་ཤོག་རང་འགུལ་ངོས་འཛིན་དང་སུབ་པ།" - }, - "removeAnnotations": { - "title": "མཆན་འགྲེལ་སུབ་པ།", - "desc": "PDF ནང་གི་མཆན་འགྲེལ་ཚང་མ་སུབ་པ།" - }, - "compare": { - "title": "PDF བསྡུར་བ།", - "desc": "PDF ཡིག་ཆ་གཉིས་ཀྱི་ཁྱད་པར་བསྡུར་བ།" - }, - "certSign": { - "title": "ལག་ཁྱེར་མིང་རྟགས།", - "desc": "ལག་ཁྱེར་/ལྡེ་མིག་ (PEM/P12) གྱིས་ PDF ལ་མིང་རྟགས་རྒྱག་པ།" - }, - "removeCertSign": { - "title": "ལག་ཁྱེར་མིང་རྟགས་སུབ་པ།", - "desc": "PDF ནས་ལག་ཁྱེར་མིང་རྟགས་སུབ་པ།" - }, - "pageLayout": { - "title": "ཤོག་ངོས་མང་པོའི་བཀོད་པ།", - "desc": "PDF ཡིག་ཆའི་ཤོག་ངོས་མང་པོ་ཤོག་ངོས་གཅིག་ཏུ་སྡེབ་སྦྱོར་བྱེད་པ།" - }, - "scalePages": { - "title": "ཤོག་ངོས་ཆེ་ཆུང་/ཚད་སྒྲིག་པ།", - "desc": "ཤོག་ངོས་དང་/ཡང་ན་དེའི་ནང་དོན་གྱི་ཆེ་ཆུང་/ཚད་བསྒྱུར་བ།" - }, - "pipeline": { - "title": "བརྒྱུད་རིམ།", - "desc": "བརྒྱུད་རིམ་འཁྲབ་གཞུང་བཟོས་ནས་ PDF ལ་བྱ་བ་མང་པོ་འཁོར་སྐྱོད་བྱེད་པ།" - }, - "add-page-numbers": { - "title": "ཤོག་གྲངས་སྣོན་པ།", - "desc": "ཡིག་ཆའི་ནང་གནས་ས་ངེས་ཅན་དུ་ཤོག་གྲངས་སྣོན་པ།" - }, - "auto-rename": { - "title": "PDF ཡིག་ཆའི་མིང་རང་འགུལ་བསྐྱར་འདོགས།", - "desc": "ངོས་འཛིན་བྱས་པའི་འགོ་བརྗོད་ལ་གཞིགས་ནས་ PDF ཡིག་ཆའི་མིང་རང་འགུལ་བསྐྱར་འདོགས་བྱེད་པ།" - }, - "adjust-contrast": { - "title": "ཚོས་གཞི་/འོད་ཁྱད་སྙོམ་སྒྲིག", - "desc": "PDF ཡི་འོད་ཁྱད། ཚོས་ཟིལ། དང་གསལ་ཚད་སྙོམ་སྒྲིག་བྱེད་པ།" - }, - "crop": { - "title": "PDF གཏུབ་གཅོད།", - "desc": "ཆེ་ཆུང་ཆུང་དུ་གཏོང་ཆེད་ PDF གཏུབ་གཅོད་བྱེད་པ། (ཡི་གེ་རྣམས་སྲུང་སྐྱོབ་བྱེད་ཐུབ།)" - }, - "autoSplitPDF": { - "title": "ཤོག་ངོས་རང་འགུལ་ཁ་གྱེས།", - "desc": "བཤེར་འབེབས་བྱས་པའི་ PDF ནང་གི་དངོས་ཡོད་བཤེར་འབེབས་ཤོག་ངོས་ཁ་གྱེས་ QR Code བེད་སྤྱོད་བྱས་ནས་རང་འགུལ་ཁ་གྱེས་བྱེད་པ།" - }, - "sanitizePdf": { - "title": "གཙང་སེལ།", - "desc": "PDF ཡིག་ཆ་ནས་འཁྲབ་གཞུང་དང་ཆ་ཤས་གཞན་དག་སུབ་པ།" - }, - "URLToPDF": { - "title": "དྲ��ཚིགས་ནས་ PDF ལ།", - "desc": "http(s) དྲ་ཚིགས་གང་རུང་ PDF ལ་བསྒྱུར་བ།" - }, - "HTMLToPDF": { - "title": "HTML ནས་ PDF ལ།", - "desc": "HTML ཡིག་ཆའམ་ zip ཡིག་ཆ་གང་རུང་ PDF ལ་བསྒྱུར་བ།" - }, - "MarkdownToPDF": { - "title": "Markdown ནས་ PDF ལ།", - "desc": "Markdown ཡིག་ཆ་གང་རུང་ PDF ལ་བསྒྱུར་བ།" - }, - "PDFToMarkdown": { - "title": "PDF to Markdown", - "desc": "Converts any PDF to Markdown" - }, - "getPdfInfo": { - "title": "PDF ཡི་གནས་ཚུལ་ཆ་ཚང་ལེན་པ།", - "desc": "PDF ཡི་གནས་ཚུལ་ཡོད་ཚད་ལེན་པ།" - }, - "extractPage": { - "title": "ཤོག་ངོས་ཕྱིར་འདོན།", - "desc": "PDF ནས་འདེམས་སྒྲུག་བྱས་པའི་ཤོག་ངོས་རྣམས་ཕྱིར་འདོན་པ།" - }, - "PdfToSinglePage": { - "title": "PDF ནས་ཤོག་ངོས་ཆེན་པོ་གཅིག་ལ།", - "desc": "PDF ཡི་ཤོག་ངོས་ཚང་མ་ཤོག་ངོས་ཆེན་པོ་གཅིག་ཏུ་སྡེབ་སྦྱོར་བྱེད་པ།" - }, - "showJS": { - "title": "Javascript སྟོན་པ།", - "desc": "PDF ནང་དུ་བཅུག་པའི་ JS གང་ཡོད་འཚོལ་ཞིབ་དང་མངོན་སྟོན་བྱེད་པ།" - }, - "autoRedact": { - "title": "རང་འགུལ་སྒྲིབ་སྲུང་།", - "desc": "འཇུག་པའི་ཡི་གེ་གཞིར་བཟུང་ནས་ PDF ནང་གི་ཡི་གེ་རྣམས་རང་འགུལ་གྱིས་སྒྲིབ་པ།" - }, - "redact": { - "title": "ལག་བཟོས་སྒྲིབ་སྲུང་།", - "desc": "འདེམས་སྒྲུག་བྱས་པའི་ཡི་གེ། བྲིས་པའི་དབྱིབས། དང་/ཡང་ན་འདེམས་སྒྲུག་བྱས་པའི་ཤོག་ངོས་གཞིར་བཟུང་ནས་ PDF སྒྲིབ་སྲུང་བྱེད་པ།" - }, - "tableExtraxt": { - "title": "PDF ནས་ CSV ལ།", - "desc": "PDF ནས་རེའུ་མིག་རྣམས་ CSV ལ་ཕྱིར་འདོན་པ།" - }, - "autoSizeSplitPDF": { - "title": "ཆེ་ཆུང་/གྲངས་ཀ་ལྟར་རང་འགུལ་ཁ་གྱེས།", - "desc": "PDF གཅིག་ནས་ཡིག་ཆ་མང་པོར་ཆེ་ཆུང་། ཤོག་གྲངས། ཡང་ན་ཡིག་ཆའི་གྲངས་ཀ་གཞིར་བཟུང་ནས་ཁ་གྱེས་བྱེད་པ།" - }, - "overlay-pdfs": { - "title": "PDF སྟེང་བརྩེགས།", - "desc": "PDF གཞན་ཞིག་གི་སྟེང་དུ་ PDF བརྩེགས་པ།" - }, - "split-by-sections": { - "title": "དུམ་བུ་ལྟར་ PDF ཁ་གྱེས།", - "desc": "PDF ཡི་ཤོག་ངོས་རེ་རེ་གཞུང་དང་འཕྲེད་ཀྱི་དུམ་བུ་ཆུང་ཆུང་དུ་བགོ་བ།" - }, - "AddStampRequest": { - "title": "PDF ལ་ཐེལ་ཙེ་སྣོན་པ།", - "desc": "གནས་ས་ངེས་ཅན་དུ་ཡི་གེའམ་པར་རིས་ཀྱི་ཐེལ་ཙེ་སྣོན་པ།" - }, - "removeImagePdf": { - "title": "པར་རིས་སུབ་པ།", - "desc": "ཡིག་ཆའི་ཆེ་ཆུང་ཆུང་དུ་གཏོང་ཆེད་ PDF ནས་པར་རིས་སུབ་པ།" - }, - "splitPdfByChapters": { - "title": "ལེའུ་ལྟར་ PDF ཁ་གྱེས།", - "desc": "PDF ཡི་ལེའུའི་སྒྲོམ་གཞི་གཞིར་བཟུང་ནས་ཡིག་ཆ་མང་པོར་ཁ་གྱེས་བྱེད་པ།" - }, - "validateSignature": { - "title": "PDF མིང་རྟགས་ར་སྤྲོད།", - "desc": "PDF ཡིག་ཆའི་ནང་གི་ཨང་ཀིའི་མིང་རྟགས་དང་ལག་ཁྱེར་ར་སྤྲོད་བྱེད་པ།" - }, - "replaceColorPdf": { - "title": "ཚོས་གཞིའི་གདམ་ག་མཐོ་རིམ།", - "desc": "PDF ནང་གི་ཡི་གེ་དང་རྒྱབ་ལྗོངས་ཀྱི་ཚོས་གཞི་བརྗེ་སྒྱུར་བྱེད་པ་དང་ཡིག་ཆའི་ཆེ་ཆུང་ཆུང་དུ་གཏོང་ཆེད་ཚོས་གཞི་ཡོངས་རྫོགས་ལྡོག་སྒྱུར་བྱེད་པ།" - } - }, - "viewPdf": { - "tags": "ལྟ་བ།,ཀློག་པ།,མཆན་འགྲེལ།,ཡི་གེ,པར་རིས།", - "title": "View/Edit PDF", - "header": "PDF ལྟ་བ།" - }, - "multiTool": { - "tags": "ལག་ཆ་མང་པོ།,བཀོལ་སྤྱོད་མང་པོ།,UI,མཐེབ་གནོན་འཐེན་པ།,མདུན་ངོས།,མཁོ་མཁན་ཕྱོགས།,སྤྱོད་སྒོ།,འགུལ་སྐྱོད།,སུབ་པ།,གནས་སྤོ།,བགོ་བ།", - "title": "PDF ལག་ཆ་མང་པོ།", - "header": "PDF ལག་ཆ་མང་པོ།", - "uploadPrompts": "ཡིག་ཆའི་མིང་།", - "selectAll": "ཚང་མ་འདེམས་པ།", - "deselectAll": "འདེམས་པ་ཚང་མ་འདོར་བ།", - "selectPages": "ཤོག་ངོས་འདེམས་པ།", - "selectedPages": "འདེམས་པའི་ཤོག་ངོས།", - "page": "ཤོག་ངོས།", - "deleteSelected": "འདེམས་པ་སུབ་པ།", - "downloadAll": "ཕྱིར་འདྲེན།", - "downloadSelected": "འདེམས་པ་ཕྱིར་འདྲེན།", - "insertPageBreak": "ཤོག་ངོས་བར་མཚམས་འཇུག་པ།", - "addFile": "ཡིག་ཆ་སྣོན་པ།", - "rotateLeft": "གཡོན་དུ་འཁོར་བ།", - "rotateRight": "གཡས་སུ་འཁོར་བ།", - "split": "དབྱེ་བ།", - "moveLeft": "Move Left", - "moveRight": "Move Right", - "delete": "སུབ་པ།", - "dragDropMessage": "ཤིག་ཆ་འདྲུད་འཐེན་བྱས་ནས་གོ་རིམ་བསྒྱུར་བཅོས་བྱེད་ཆོག", - "undo": "ཕྱིར་འཐེན།", - "redo": "བསྐྱར་བཟོ།" - }, - "merge": { - "tags": "སྡེབ་སྦྱོར།,ཤོག་ངོས་བཀོལ་སྤྱོད།,རྒྱབ་ངོས།,ཞབས་ཞུ་ཕྱོགས།", - "title": "སྡེབ་སྦྱོར།", - "header": "Merge multiple PDFs (2+)", - "sortByName": "Sort by name", - "sortByDate": "དུས་ཚོད་ལྟར་གོ་རིམ་སྒྲིག་པ།", - "removeCertSign": "སྡེབ་སྦྱོར་བྱས་པའི་ཡིག་ཆའི་ནང་གི་ཨང་ཀིའི་མིང་རྟགས་སུབ་བམ།", - "submit": "སྡེབ་སྦྱོར།" - }, - "split": { - "tags": "ཤོག་ངོས་བཀོལ་སྤྱོད།,བགོ་བ།,ཤོག་ངོས་མང་པོ།,གཅོད་པ།,ཞབས་ཞུ་ཕྱོགས།", - "title": "PDF ཁ་གྱེས།", - "header": "PDF ཁ་གྱེས།", - "desc": { - "1": "ཁྱེད་ཀྱིས་འདེམས་པའི་ཨང་གྲངས་རྣམས་ནི་ཁ་གྱེས་བྱ་རྒྱུའི་ཤོག་ངོས་ཨང་གྲངས་ཡིན།", - "2": "དེ་ལྟར་ཤོག་ངོས་ 10 ཡོད་པའི་ཡིག་ཆ་ཞིག་ལ་ 1,3,7-9 འདེམས་ན་ PDF ཡིག་ཆ་ 6 ལ་ཁ་གྱེས་ཏེ།", - "3": "ཡིག་ཆ་ #1: ཤོག་ངོས་ 1", - "4": "ཡིག་ཆ་ #2: ཤོག་ངོས་ 2 དང་ 3", - "5": "ཡིག་ཆ་ #3: ཤོག་ངོས་ 4, 5, 6 དང་ 7", - "6": "Document #4: Page 8", - "7": "Document #5: Page 9", - "8": "ཡིག་ཆ་ #6: ཤོག་ངོས་ 10" - }, - "splitPages": "ཁ་གྱེས་བྱ་རྒྱུའི་ཤོག་ངོས་འཇུག་པ།", - "submit": "ཁ་གྱེས།" - }, - "rotate": { - "tags": "ཞབས་ཞུ་ཕྱོགས།", - "title": "Rotate PDF", - "header": "PDF འཁོར་སྐྱོད།", - "selectAngle": "འཁོར་སྐྱོད་ཀྱི་ཟུར་ཚད་འདེམས་པ། (ཟུར་ཚད་ 90 ཡི་སྒྱུར་ཐོབ་ནང་དུ།)", - "submit": "འཁོར་སྐྱོད།" - }, - "imageToPdf": { - "tags": "བསྒྱུར་བ།,པར་རིས།,jpg,པར།,འདྲ་པར།" - }, - "pdfToImage": { - "tags": "བསྒྱུར་བ།,པར་རིས།,jpg,པར།,འདྲ་པར།", - "title": "PDF ནས་པར་རིས་ལ།", - "header": "PDF ནས་པར་རིས་ལ།", - "selectText": "པར་རིས་རྣམ་གཞག", - "singleOrMultiple": "ཤོག་ངོས་ནས་པར་རིས་ཀྱི་འབྲས་བུའི་རིགས།", - "single": "ཤོག་ངོས་ཚང་མ་མཉམ་དུ་སྦྱར་བའི་པར་རིས་ཆེན་པོ་གཅིག", - "multi": "པར་རིས་མང་པོ། ཤོག་ངོས་རེར་པར་རིས་རེ།", - "colorType": "ཚོས་མདོག་གི་རིགས།", - "color": "ཚོས་མདོག", - "grey": "སྐྱ་མདོག", - "blackwhite": "དཀར་ནག (གནས་ཚུལ་བརླག་སྲིད།)", - "submit": "བསྒྱུར་བ།", - "info": "Python སྒྲིག་འཇུག་བྱས་མི་འདུག WebP བསྒྱུར་བར་དགོས་མཁོ་ཡིན།", - "placeholder": "(དཔེར་ན། 1,2,8 ཡང་ན་ 4,7,12-16 ཡང་ན་ 2n-1)" - }, - "pdfOrganiser": { - "tags": "ཤོག་ངོས་གཉིས་མ།,ཨང་གྲངས་ཟུང་ལྡན།,ཨང་གྲངས་ཡ་གྲངས།,གོ་རིམ་སྒྲིག་པ།,སྤོ་བ།", - "title": "ཤོག་ངོས་གོ་སྒྲིག་བྱེད་མཁན།", - "header": "PDF ཤོག་ངོས་གོ་སྒྲིག་བྱེད་མཁན།", - "submit": "ཤོག་ངོས་བསྐྱར་སྒྲིག", - "mode": { - "_value": "རྣམ་པ།", - "1": "རང་སྒྲིག་ཤོག་ངོས་གོ་རིམ།", - "2": "ལྡོག་ཕྱོགས་གོ་རིམ།", - "3": "ཕྱོགས་གཉིས་གོ་རིམ།", - "4": "དེབ་ཆུང་གོ་རིམ།", - "5": "ཟུར་འདྲུད་དེབ་ཆུང་གོ་རིམ།", - "6": "ཡ་ཟུང་དབྱེ་བ།", - "7": "Remove First", - "8": "Remove Last", - "9": "དང་པོ་དང་མཐའ་མ་སུབ་པ།", - "10": "ཡ་ཟུང་སྡེབ་སྦྱོར།", - "11": "Duplicate all pages" - }, - "placeholder": "(དཔེར་ན། 1,3,2 ཡང་ན་ 4-8,2,10-12 ཡང་ན་ 2n-1)" - }, - "addImage": { - "tags": "པར་རིས།,jpg,པར།,འདྲ་པར།", - "title": "པར་རིས་སྣོན་པ།", - "header": "PDF ལ་པར་རིས་སྣོན་པ།", - "everyPage": "ཤོག་ངོས་ཚང་མར་ཡིན་ནམ།", - "upload": "པར་རིས་སྣོན་པ།", - "submit": "པར་རིས་སྣོན་པ།" - }, - "watermark": { - "tags": "ཡི་གེ,བསྐྱར་ཟློས།,ཁ་ཡིག,རང་དབང་།,པར་དབང་།,ཚོང་རྟགས།,པར་རིས།,jpg,པར།,འདྲ་པར།", - "title": "རྟ�ས་ཐེལ་སྣོན་པ།", - "header": "རྟགས་ཐེལ་སྣོན་པ།", - "customColor": "ཡི་གེའི་ཚོས་མདོག་རང་སྒྲིག", - "selectText": { - "1": "རྟགས་ཐེལ་སྣོན་རྒྱུའི་ PDF འདེམས་པ།", - "2": "རྟགས་ཐེལ་གྱི་ཡི་གེ།", - "3": "ཡིག་གཟུགས་ཆེ་ཆུང་།", - "4": "འཁོར་སྐྱོད། (0-360)", - "5": "ཞེང་ཚད་བར་སྟོང་། (རྟགས་ཐེལ་རེ་རེའི་བར་གྱི་གཞུང་ཕྱོགས་བར་ཐག)", - "6": "མཐོ་ཚད་བར་སྟོང་། (རྟགས་ཐེལ་རེ་རེའི་བར་གྱི་གྱེན་ཕྱོགས་བར་ཐག)", - "7": "གསལ་ཚད། (0% - 100%)", - "8": "རྟགས་ཐེལ་གྱི་རིགས།", - "9": "རྟགས་ཐེལ་གྱི་པར་རིས།", - "10": "PDF ནས་ PDF-པར་རིས་ལ་བསྒྱུར་བ།" - }, - "submit": "རྟགས་ཐེལ་སྣོན་པ།", - "type": { - "1": "ཡི་གེ", - "2": "པར་རིས།" - } - }, - "permissions": { - "tags": "ཀློག་པ།,འབྲི་བ།,རྩོམ་སྒྲིག,པར་འདེབས།", - "title": "ཆོག་མཆན་བསྒྱུར་བ།", - "header": "ཆོག་མཆན་བསྒྱུར་བ།", - "warning": "ཉེན་བརྡ། ཆོག་མཆན་འདི་དག་བསྒྱུར་མི་ཐུབ་པ་བཟོ་དགོས་ན། གསང་ཚིག་སྣོན་པའི་ཤོག་ངོས་བརྒྱུད་ནས་གསང་ཚིག་དང་མཉམ་དུ་སྒྲིག་འགོད་བྱེད་པའི་འོས་སྦྱོར་ཡོད།", - "selectText": { - "1": "ཆོག་མཆན་བསྒྱུར་རྒྱུའི་ PDF འདེམས་པ།", - "2": "སྒྲིག་འགོད་བྱ་རྒྱུའི་ཆོག་མཆན།", - "3": "ཡིག་ཆ་སྡེབ་སྒྲིག་འགོག་པ།", - "4": "ནང་དོན་ཕྱིར་འདོན་འགོག་པ།", - "5": "མཐུན་རྐྱེན་གྱི་ཆེད་དུ་ཕྱིར་འདོན་འགོག་པ།", - "6": "འགེངས་ཤོག་བཀང་བ་འགོག་པ།", - "7": "བཟོ་བཅོས་འགོག་པ།", - "8": "མཆན་འགྲེལ་བཟོ་བཅོས་འགོག་པ།", - "9": "པར་འདེབས་འགོག་པ།", - "10": "པར་འདེབས་རྣམ་པ་མི་འདྲ་བ་འགོག་པ།" - }, - "submit": "བསྒྱུར་བ།" - }, - "removePages": { - "tags": "ཤོག་ངོས་སུབ་པ།,ཤོག་ངོས་གསུབ་པ།" - }, - "addPassword": { - "tags": "བདེ་འཇགས།,ཉེན་སྲུང་།", - "title": "གསང་ཚིག་སྣོན་པ།", - "header": "གསང་ཚིག་སྣོན་པ། (གསང་སྡོམ།)", - "selectText": { - "1": "གསང་སྡོམ་བྱ་རྒྱུའི་ PDF འདེམས་པ།", - "2": "སྤྱོད་མཁན་གྱི་གསང་ཚིག", - "3": "གསང་སྡོམ་ལྡེ་མིག་གི་རིང་ཚད།", - "4": "ཚད་མཐོ་བ་རྣམས་སྲ་བརྟན་ཆེ་བ་ཡོད། འོན་ཀྱང་ཚད་དམའ་བ་རྣམས་འཆམ་མཐུན་རང་བཞིན་བཟང་བ་ཡོད།", - "5": "ཆོག་མཆན་སྒྲིག་འགོད། (བདག་པོའི་གསང་ཚིག་དང་མཉམ་དུ་བེད་སྤྱོད་བྱེད་པར་འོས་སྦྱོར་བྱེད།)", - "6": "ཡིག་ཆ་སྒྲིག་སྦྱོར་འགོག་པ།", - "7": "ནང་དོན་ཕྱིར་འདོན་འགོག་པ།", - "8": "མཐུན་རྐྱེན་གྱི་ཆེད་དུ་ཕྱིར་འདོན་འགོག་པ།", - "9": "འགེངས་ཤོག་བཀང་བ་འགོག་པ།", - "10": "བཟོ་བཅོས་འགོག་པ།", - "11": "མཆན་འགྲེལ་བཟོ་བཅོས་འགོག་པ།", - "12": "Prevent printin", - "13": "Prevent printing different formats", - "14": "སྤྱོད་མཁན་གྱི་གསང་གྲངས།", - "15": "ཡིག་ཚགས་རང་སྟེང་ཁ་ཕྱེས་རྒྱུར་བཀག་སྡོམ་བྱེད། འདི་ལྟར་བྱས་ན་ཀློག་ཆས་ཀྱིས་ནུས་པ་ཐོན་པ་པའི་ངེས་པ་མེད།", - "16": "ཡིག་ཚགས་རང་སྟེང་ཁ་ཕྱེས་རྒྱུར་བཀག་སྡོམ་བྱེད།" - }, - "submit": "གསང་བསྒྱུར།" - }, - "removePassword": { - "tags": "བདེ་འཇགས།,གསང་སྡོམ་གྲོལ་བ།,ཉེན་སྲུང་།,གསང་ཚིག་མེད་པ།,གསང་ཚིག་སུབ་པ།", - "title": "གསང་ཚིག་སུབ་པ།", - "header": "གསང་ཚིག་སུབ་པ། (གསང་སྡོམ་གྲོལ་བ།)", - "selectText": { - "1": "གསང་སྡོམ་གྲོལ་རྒྱུའི་ PDF འདེམས་པ།", - "2": "གསང་ཚིག" - }, - "submit": "སུབ་པ།" - }, - "compressPdfs": { - "tags": "བསྡུས་པ།,ཆུང་ཆུང་།,ཆུང་ཆུང་།" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "ཁ་བྱང་།,རྩོམ་པ་པོ།,ཚེས་གྲངས།,བཟོ་བ།,དུས་ཚོད།,པར་སྐྲུན་པ།,ཐོན་སྐྱེད་པ།,སྡོམ་རྩིས།", - "title": "གནས་ཚུལ་ཞིབ་ཕྲ་བསྒྱུར་བ།", - "header": "གནས་ཚུལ་ཞིབ་ཕྲ་བསྒྱུར་བ།", - "selectText": { - "1": "བསྒྱུར་འདོད་པའི་འགྱུར་ཚད་རྣམས་རྩོམ་སྒྲིག་བྱེད་རོགས།", - "2": "གནས་ཚུལ་ཞིབ་ཕྲ་ཚང་མ་སུབ་པ།", - "3": "རང་སྒྲིག་གནས་ཚུལ་ཞིབ་ཕྲ་སྟོན།", - "4": "གནས་ཚུལ་ཞིབ་ཕྲ་གཞན།", - "5": "རང་སྒྲིག་གནས་ཚུལ་ཞིབ་ཕྲ་གསར་སྣོན།" - }, - "author": "རྩོམ་པ་པོ།", - "creationDate": "བཟོ་བའི་དུས་ཚོད། (yyyy/MM/dd HH:mm:ss)", - "creator": "བཟོ་མཁན།", - "keywords": "གནད་ཚིག", - "modDate": "བཟོ་བཅོས་དུས་ཚོད། (yyyy/MM/dd HH:mm:ss)", - "producer": "སྐྲུན་མཁན།", - "subject": "བརྗོད་གཞི།", - "trapped": "བཟུང་བ།", - "submit": "བསྒྱུར་བ།" - }, - "fileToPDF": { - "tags": "བསྒྱུར་བཅོས།,རྣམ་གཞག,ཡིག་ཆ།,པར།,སྟོན་བྱེད།,ཡི་གེ,བསྒྱུར་བ།,ཡིག་ཚང་།,docs,word,excel,powerpoint", - "title": "ཡིག་ཆ་ནས་ PDF ལ།", - "header": "ཡིག་ཆ་གང་རུང་ PDF ལ་བསྒྱུར་བ།", - "credit": "ཞབས་ཞུ་འདིས་ཡིག་ཆ་བསྒྱུར་བའི་ཆེད་དུ་ LibreOffice དང་ Unoconv བེད་སྤྱོད་བྱེད་པ།", - "supportedFileTypesInfo": "རྒྱབ་སྐྱོར་བྱེད་པའི་ཡིག་ཆའི་རིགས།", - "supportedFileTypes": "རྒྱབ་སྐྱོར་བྱེད་པའི་ཡིག་ཆའི་རིགས་ནང་དུ་གཤམ་གྱི་རྣམས་འདུས་ཡོད་ཀྱང་། རྒྱབ་སྐྱོར་བྱེད་པའི་རྣམ་གཞག་གི་ཆ་ཚང་བའི་ཐོ་གཞུང་གསར་ཤོས་ཀྱི་ཆེད་དུ། LibreOffice ཡི་ཡིག་ཆར་གཟིགས་རོགས།", - "submit": "PDF ལ་བསྒྱུར་བ།" - }, - "ocr": { - "tags": "ངོས་འཛིན།,ཡི་གེ,པར་རིས།,བཤེར་འབེབས།,ཀློག་པ།,ངོས་འཛིན།,འཚོལ་ཞིབ།,རྩོམ་སྒྲིག་རུང་བ།", - "title": "OCR / བ�ེར་འབེབས་གཙང་སེལ།", - "header": "བཤེར་འབེབས་གཙང་སེལ། / OCR (འོད་ཀྱི་ཡིག་འབྲུ་ངོས་འཛིན།)", - "selectText": { - "1": "PDF ནང་དུ་ངོས་འཛིན་བྱ་རྒྱུའི་སྐད་ཡིག་འདེམས་པ། (བཀོད་པ་རྣམས་ནི་ད་ལྟ་ངོས་འཛིན་བྱས་ཟིན་པ་ཡིན།)", - "2": "OCR བྱས་པའི་ཡི་གེ་དང་མཉམ་དུ་ OCR བྱས་པའི་ PDF ཡི་ཡི་གེའི་ཡིག་ཆ་བཟོ་བ།", - "3": "ཡོ་འཁྱོག་ཏུ་བཤེར་འབེབས་བྱས་པའི་ཤོག་ངོས་རྣམས་ཡང་བསྐྱར་འཁོར་སྐྱོད་བྱས་ནས་གནས་སུ་འཇོག་པ།", - "4": "OCR གྱིས་རྒྱབ་ལྗོངས་ཀྱི་སྒྲ་གདངས་ནང་དུ་ཡི་གེ་རྙེད་མི་སྲིད་པའི་ཆེད་དུ་ཤོག་ངོས་གཙང་སེལ་བྱེད་པ། (ཕྱིར་འདོན་ལ་འགྱུར་བ་མེད།)", - "5": "OCR གྱིས་རྒྱབ་ལྗོངས་ཀྱི་སྒྲ་གདངས་ནང་དུ་ཡི་གེ་རྙེད་མི་སྲིད་པའི་ཆེད་དུ་ཤོག་ངོས་གཙང་སེལ་བྱེད་པ། ཕྱིར་འདོན་ནང་དུ་གཙང་སེལ་རྒྱུན་འཁྱོངས་བྱེད་པ།", - "6": "སྤྱོད་སྒོ་ཡོད་པའི་ཡི་གེ་ཡོད་པའི་ཤོག་ངོས་རྣམས་སྣང་མེད་དུ་འཇོག་པ། པར་རིས་ཡིན་པའི་ཤོག་ངོས་ཁོ་ནར་ OCR བྱེད་པ།", - "7": "OCR བཙན་སྐུལ་བྱེད་པ། ཤོག་ངོས་ཚང་མར་ OCR བྱས་ནས་ཐོག་མའི་ཡི་གེའི་གཞི་རྐྱེན་ཚང་མ་སུབ་པ།", - "8": "རྒྱུན་ལྡན། (PDF ནང་དུ་ཡི་གེ་ཡོད་ན་ནོར་འཁྲུལ་འབྱུང་།)", - "9": "ཟུར་སྣོན་སྒྲིག་འགོད།", - "10": "OCR རྣམ་པ།", - "11": "པར་རིས་ཕྱིར་འདོན།", - "12": "པར་རིས་ཕྱིར་འདོན།" - }, - "help": "སྐད་ཡིག་གཞན་དག་གི་ཆེད་དུ་བེད་སྤྱོད་བྱེད་སྟངས་དང་/ཡང་ན་ docker མིན་པའི་བེད་སྤྱོད་ཀྱི་ཆེད་དུ་ཡིག་ཆ་འདི་ཀློག་རོགས།", - "credit": "ཞབས་ཞུ་འདིས་ OCR གྱི་ཆེད་དུ་ qpdf དང་ Tesseract བེད་སྤྱོད་བྱེད་པ།", - "submit": "OCR བརྒྱུད་ནས་ PDF བཀོལ་སྤྱོད།" - }, - "extractImages": { - "tags": "པར།,འདྲ་པར།,ཉར་ཚགས།,ཡིག་མཛོད།,zip,འཛིན་པ།,ལེན་པ།", - "title": "Extract Images", - "header": "Extract Images", - "selectText": "ཕྱིར་བཏོན་པའི་པར་རིས་རྣམས་བསྒྱུར་རྒྱུའི་པར་རིས་རྣམ་གཞག་འདེམས་པ།", - "allowDuplicates": "བསྐྱར་ཟློས་པར་རིས་ཉར་ཚགས།", - "submit": "ཕྱིར་འདོན།" - }, - "pdfToPDFA": { - "tags": "ཡིག་མཛོད།,དུས་ཡུན་རིང་པོ།,ཚད་ལྡན།,བསྒྱུར་བ།,ཉར་ཚགས།,སྲུང་སྐྱོབ།", - "title": "PDF ནས་ PDF/A ལ།", - "header": "PDF ནས་ PDF/A ལ།", - "credit": "ཞབས་ཞུ་འདིས་ PDF/A བསྒྱུར་བའི་ཆེད་དུ་ libreoffice བེད་སྤྱོད་བྱེད་པ།", - "submit": "བསྒྱུར་བ།", - "tip": "ད་ལྟ་ཡིག་ཆ་མང་པོ་དུས་གཅིག་ལ་བསྒྱུར་མི་ཐུབ།", - "outputFormat": "ཕྱིར་འདོན་རྣམ་གཞག", - "pdfWithDigitalSignature": "PDF འདིར་ཨང་ཀིའི་མིང་རྟགས་ཡོད། འདི་རྗེས་མའི་རིམ་པར་སུབ་ངེས་ཡིན།" - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,བསྒྱུར་བཅོས།,རྣམ་གཞག,བསྒྱུར་བ།,ཡིག་ཚང་།,microsoft,docfile", - "title": "PDF ནས་ Word ལ།", - "header": "PDF ནས་ Word ལ།", - "selectText": { - "1": "ཕྱིར་འདོན་ཡིག་ཆའི་རྣམ་གཞག" - }, - "credit": "ཞབས་ཞུ་འདིས་ཡིག་ཆ་བསྒྱུར་བའི་ཆེད་དུ་ LibreOffice བེད་སྤྱོད་བྱེད་པ།", - "submit": "བསྒྱུར་བ།" - }, - "PDFToPresentation": { - "tags": "སྟོན་བྱེད།,འཁྲབ་སྟོན།,ཡིག་ཚང་།,microsoft", - "title": "PDF ནས་སྤྱན་འབུལ་ལ།", - "header": "PDF ནས་སྤྱན་འབུལ་ལ།", - "selectText": { - "1": "ཕྱིར་འདོན་ཡིག་ཆའི་རྣམ་གཞག" - }, - "credit": "This service uses LibreOffice for file conversion.", - "submit": "Convert" - }, - "PDFToText": { - "tags": "richformat,richtextformat,rich text format", - "title": "PDF ནས་ RTF ལ། (ཡི་གེ)", - "header": "PDF ནས་ RTF ལ། (ཡི་གེ)", - "selectText": { - "1": "ཕྱིར་འདོན་ཡིག་ཆའི་རྣམ་གཞག" - }, - "credit": "This service uses LibreOffice for file conversion.", - "submit": "Convert" - }, - "PDFToHTML": { - "tags": "དྲ་ངོས་ནང་དོན།,བཤར་ཆས་འཆམ་མཐུན།", - "title": "PDF ནས་ HTML ལ།", - "header": "PDF ནས་ HTML ལ།", - "credit": "This service uses pdftohtml for file conversion.", - "submit": "Convert" - }, - "PDFToXML": { - "tags": "གཞི་གྲངས་ཕྱིར་འདོན།,སྒྲོམ་གཞི་ཅན་གྱི་ནང་དོན།,མཉམ་འབྲེལ།,བསྒྱུར་བཅོས།,བསྒྱུར་བ།", - "title": "PDF ནས་ XML ལ།", - "header": "PDF ནས་ XML ལ།", - "credit": "This service uses LibreOffice for file conversion.", - "submit": "Convert" - }, - "ScannerImageSplit": { - "tags": "ཁ་གྱེས།,རང་འགུལ་ངོས་འཛིན།,བཤེར་འབེབས།,པར་མང་པོ།,གོ་སྒྲིག", - "selectText": { - "1": "�ུར་ཚད་མཚམས།", - "2": "པར་རིས་འཁོར་སྐྱོད་བྱེད་དགོས་པའི་ཉུང་མཐའི་ཟུར་ཚད་སྒྲིག་འགོད་བྱེད་པ། (སྔོན་སྒྲིག 10)", - "3": "བཟོད་སྲན་ཚད།", - "4": "ཚོད་དཔག་བྱས་པའི་རྒྱབ་ལྗོངས་ཚོས་གཞིའི་མཐའ་འཁོར་གྱི་ཚོས་མདོག་འགྱུར་བའི་ཁྱབ་ཚད་ཐག་གཅོད་བྱེད་པ། (སྔོན་སྒྲིག 30)", - "5": "ཉུང་མཐའི་རྒྱ་ཁྱོན།", - "6": "པར་རིས་ཤིག་གི་ཉུང་མཐའི་རྒྱ་ཁྱོན་མཚམས་སྒྲིག་འགོད་བྱེད་པ། (སྔོན་སྒྲིག 10000)", - "7": "ཉུང་མཐའི་མཐའ་འཁོར་རྒྱ་ཁྱོན།", - "8": "པར་རིས་ཤིག་གི་ཉུང་མཐའི་མཐའ་འཁོར་རྒྱ་ཁྱོན་མཚམས་སྒྲིག་འགོད་བྱེད་པ།", - "9": "མཐའ་མཚམས་ཆེ་ཆུང་།", - "10": "ཕྱིར་འདོན་པའི་ནང་དཀར་མཐའ་འགོག་པའི་ཆེད་དུ་སྣོན་པ་དང་སུབ་པ་བྱེད་པ�� (སྔོན་སྒྲིག 1)" - }, - "info": "Python སྒྲིག་འཇུག་བྱས་མི་འདུག འདི་བཀོལ་སྤྱོད་བྱེད་པར་དགོས་མཁོ་ཡིན།" - }, - "sign": { - "tags": "དབང་སྤྲོད།,མིང་རྟགས་ཐུང་ངུ་།,བྲིས་པའི་མིང་རྟགས།,ཡི་གེའི་མིང་རྟགས།,པར་རིས་མིང་རྟགས།", - "title": "མིང་རྟགས།", - "header": "PDF ལ་མིང་རྟགས་རྒྱག་པ།", - "upload": "པར་རིས་ཡར་འཇོག", - "draw": "མིང་རྟགས་འབྲི་བ།", - "text": "ཡི་གེ་འཇུག་པ།", - "clear": "གཙང་སེལ།", - "add": "སྣོན་པ།", - "saved": "ཉར་ཚགས་བྱས་པའི་མིང་རྟགས།", - "save": "མིང་རྟགས་ཉར་ཚགས།", - "personalSigs": "སྒེར་གྱི་མིང་རྟགས།", - "sharedSigs": "མཉམ་སྤྱོད་མིང་རྟགས།", - "noSavedSigs": "ཉར་ཚགས་བྱས་པའི་མིང་རྟགས་མ་རྙེད།", - "addToAll": "ཤོག་ངོས་ཚང་མར་སྣོན་པ།", - "delete": "སུབ་པ།", - "first": "ཤོག་ངོས་དང་པོ།", - "last": "ཤོག་ངོས་མཐའ་མ།", - "next": "ཤོག་ངོས་རྗེས་མ།", - "previous": "ཤོག་ངོས་སྔོན་མ།", - "maintainRatio": "བསྡུར་ཚད་རྒྱུན་འཁྱོངས་སྒོ་རྒྱག་པ།", - "undo": "Undo", - "redo": "Redo" - }, - "flatten": { - "tags": "སྙོམས་པ།,འགེངས་ཤོག,སྤྱོད་སྒོ།,ཆ་ཤས།,སུབ་པ།", - "title": "སྙ�མས་པ།", - "header": "PDF སྙོམས་པ།", - "flattenOnlyForms": "འགེངས་ཤོག་ཁོ་ན་སྙོམས་པ།", - "submit": "སྙོམས་པ།" - }, - "repair": { - "tags": "སྐྱོན་སེལ།,བཟོ་བཅོས།,གསོ་བ།,ལེགས་བཅོས།", - "title": "བཟོ་བཅོས།", - "header": "PDF བཟོ་བཅོས།", - "submit": "བཟོ་བཅོས།" - }, - "removeBlanks": { - "tags": "སྟོང་ཤོག་སུབ་པ། སྟོང་པ་སུབ་པ། དཀར་ཤོག་སུབ་པ། PDF སྟོང་ཤོག་སུབ་པ།", - "title": "སྟོང་ཤོག་སུབ་པ།", - "header": "སྟོང་པའི་ཤོག་ངོས་སུབ་པ།", - "threshold": "པིག་ཟེལ་དཀར་པོའི་མཚམས་ཚད།", - "thresholdDesc": "པིག་ཟེལ་དཀར་པོ་ཞིག་'དཀར་པོ་'རུ་རྩི་བའི་དཀར་ཚད་ཀྱི་མཚམས། 0 = ནག་པོ། 255 དཀར་པོ་གཙང་མ།", - "whitePercent": "དཀར་པོའི་བརྒྱ་ཆ། (%)", - "whitePercentDesc": "སུབ་རྒྱུའི་ཤོག་ངོས་ཤིག་གི་'དཀར་པོའི་'པིག་ཟེལ་གྱི་བརྒྱ་ཆ།", - "submit": "སྟོང་ཤོག་སུབ་པ།" - }, - "removeAnnotations": { - "tags": "མཆན་འགྲེལ་སུབ་པ། དཔྱད་བརྗོད་སུབ་པ། མཆན་བུ་སུབ་པ། PDF མཆན་འགྲེལ་སུབ་པ།", - "title": "མཆན་འགྲེལ་སུབ་པ།", - "header": "མཆན་འགྲེལ་སུབ་པ།", - "submit": "སུབ་པ།" - }, - "compare": { - "tags": "བསྡུར་བ། ཁྱད་པར། ཞིབ་བསྡུར། གཤིབ་བསྡུར། PDF བསྡུར་བ།", - "title": "བས�ུར་བ།", - "header": "PDF བསྡུར་བ།", - "highlightColor": { - "1": "མདངས་འདོན་ཚོས་གཞི་ ༡།", - "2": "མདངས་འདོན་ཚོས་གཞི་ ༢།" - }, - "document": { - "1": "ཡིག་ཆ་ ༡", - "2": "ཡིག་ཆ་ ༢" - }, - "submit": "བསྡུར་བ།", - "complex": { - "message": "མཁོ་སྤྲོད་བྱས་པའི་ཡིག་ཆ་གཅིག་གམ་གཉིས་ཀ་ཡིག་ཆ་ཆེན་པོ་ཡིན་པས། བསྡུར་བའི་ཏག་ཏག་ཚད་ཉུང་དུ་འགྲོ་སྲིད།" - }, - "large": { - "file": { - "message": "མཁོ་སྤྲོད་བྱས་པའི་ཡིག་ཆ་གཅིག་གམ་གཉིས་ཀ་བཀོལ་སྤྱོད་བྱེད་མི་ཐུབ་པའི་ཆེ་ཚད་ཡིན།" - } - }, - "no": { - "text": { - "message": "འདེམས་པའི་ PDF གཅིག་གམ་གཉིས་ཀར་ཡི་གེའི་ནང་དོན་མི་འདུག བསྡུར་བའི་ཆེད་དུ་ཡི་གེ་ཡོད་པའི་ PDF འདེམས་རོགས།" - } - } - }, - "certSign": { - "tags": "ར་སྤྲོད།,PEM,P12,གཞུང་འབྲེལ།,གསང་སྡོམ།", - "title": "ལག་ཁྱེར་མིང་རྟགས།", - "header": "ཁྱེད་ཀྱི་ལག་ཁྱེར་གྱིས་ PDF ལ་མིང་རྟགས་རྒྱག་པ། (ལས་ཀ་བྱེད་བཞིན་པ།)", - "selectPDF": "མིང་རྟགས་རྒྱག་རྒྱུའི་ PDF ཡིག་ཆ་འདེམས་པ།", - "jksNote": "དྲན་གསོ། གལ་སྲིད་ཁྱེད་ཀྱི་ལག་ཁྱེར་གྱི་རིགས་གཤམ་དུ་མེད་ན། keytool བཀའ་བརྡ་ཐིག་བེད་སྤྱོད་བྱས་ནས་ Java Keystore (.jks) ཡིག་ཆ་ལ་བསྒྱུར་རོགས། དེ་ནས་གཤམ་དུ་ .jks ཡིག་ཆ་འདེམས་རོགས།", - "selectKey": "སྒེར་གྱི་ལྡེ་མིག་ཡིག་ཆ་འདེམས་པ། (PKCS#8 རྣམ་གཞག .pem ཡང་ན་ .der ཡིན་སྲིད།)", - "selectCert": "ལག་ཁྱེར་ཡིག་ཆ་འདེམས་པ། (X.509 རྣམ་གཞག .pem ཡང་ན་ .der ཡིན་སྲིད།)", - "selectP12": "PKCS#12 ལྡེ་མིག་མཛོད་ཡིག་ཆ་འདེམས་པ། (.p12 ཡང་ན་ .pfx) (འདེམས་རུང་། གལ་སྲིད་མཁོ་སྤྲོད་བྱས་ན། དེའི་ནང་དུ་ཁྱེད་ཀྱི་སྒེར་གྱི་ལྡེ་མིག་དང་ལག་ཁྱེར་འདུས་ཡོད་དགོས།)", - "selectJKS": "Java ལྡེ་མིག་མཛོད་ཡིག་ཆ་འདེམས་པ། (.jks ཡང་ན་ .keystore)", - "certType": "ལག་ཁྱེར་གྱི་རིགས།", - "password": "ཁྱེད་ཀྱི་ལྡེ་མིག་མཛོད་དམ་སྒེར་གྱི་ལྡེ་མིག་གི་གསང་ཚིག་འཇུག་པ། (གལ་སྲིད་ཡོད་ན།)", - "showSig": "མིང་རྟགས་སྟོན།", - "reason": "རྒྱུ་མཚན།", - "location": "ས་གནས།", - "name": "མིང་།", - "showLogo": "མཚོན་རྟགས་སྟོན།", - "submit": "PDF ལ་མིང་རྟགས་རྒྱག་པ།" - }, - "removeCertSign": { - "tags": "ར་སྤྲོད།,PEM,P12,གཞུང་འབྲེལ།,གསང་སྡོམ་གྲོལ་བ།", - "title": "ལག་ཁྱེར་མིང་རྟགས་སུབ་པ།", - "header": "PDF ནས་ཨང་ཀིའི་ལག་ཁྱེར་སུབ་པ།", - "selectPDF": "PDF ཡིག་ཆ་འདེམས་པ།", - "submit": "མིང་རྟགས་སུབ་པ།" - }, - "pageLayout": { - "tags": "སྡེབ་སྦྱོར།,བསྡུས་པ།,ལྟ་ཚུལ་གཅིག,གོ་སྒྲིག", - "title": "ཤོག་ངོས་མང་པོའི་བཀོད་པ།", - "header": "ཤོག་ངོས་མང་པོའི་བཀོད་པ།", - "pagesPerSheet": "ཤོག་ལྷེ་རེར་ཤོག་ངོས་གྲངས།", - "addBorder": "མཐའ་མཚམས་སྣོན་པ།", - "submit": "ཕུལ་བ།" - }, - "scalePages": { - "tags": "ཆེ་ཆུང་བསྐྱར་སྒྲིག,བཟོ་བཅོས།,ཚད་གཞི།,བསྟུན་འགྱུར།", - "title": "ཤོག་ངོས་ཆེ་ཆུང་སྙོམ་སྒྲིག", - "header": "ཤོག་ངོས་ཆེ་ཆུང་སྙོམ་སྒྲིག", - "pageSize": "ཡིག་ཆའི་ཤོག་ངོས་ཀྱི་ཆེ་ཆུང་།", - "keepPageSize": "ཐོག་མའི་ཆེ་ཆུང་།", - "scaleFactor": "ཤོག་ངོས་ཀྱི་ཆེ་ཆུང་ཚད། (གཏུབ་གཅོད།)", - "submit": "ཕུལ་བ།" - }, - "add-page-numbers": { - "tags": "ཤོག་གྲངས་རྒྱག་པ།,མིང་རྟགས།,གོ་སྒྲིག,དཀར་ཆག" - }, - "auto-rename": { - "tags": "རང་འགུལ་ངོས་འཛིན།,འགོ་བརྗོད་གཞིར་བཟུང་།,གོ་སྒྲིག,མིང་བསྐྱར་འདོགས།", - "title": "རང་འགུལ་མིང་བསྐྱར་འདོགས།", - "header": "PDF རང་འགུལ་མིང་བསྐྱར་འདོགས།", - "submit": "རང་འགུལ་མིང་བསྐྱར་འདོགས།" - }, - "adjust-contrast": { - "tags": "ཚོས་གཞི་ལེགས་སྒྲིག,སྙོམ་སྒྲིག,བཟོ་བཅོས།,ཡར་རྒྱས།,ཚོས་མདངས་ལེགས་སྒྲིག" - }, - "crop": { - "tags": "གཏུབ་པ།,ཆུང་དུ་གཏོང་བ།,རྩོམ་སྒྲིག,དབྱིབས།", - "title": "གཏུབ་གཅོད།", - "header": "PDF གཏུབ་གཅོད།", - "submit": "ཕུལ་བ།" - }, - "autoSplitPDF": { - "tags": "QR གཞིར་བཟུང་།,ཁ་གྱེས།,བཤེར་དུམ།,གོ་སྒྲིག", - "title": "PDF རང་འགུལ་ཁ་གྱེས།", - "header": "PDF རང་འགུལ་ཁ་གྱེས།", - "description": "པར་འདེབས། ནང་འཇུག བཤེར་འབེབས། ཡར་འཇོག་བྱས་ནས་ང་ཚོས་ཡིག་ཆ་རྣམས་རང་འགུལ་གྱིས་ཁ་གྱེས་བྱེད་དུ་འཇུག ལག་བཟོས་གོ་རིམ་སྒྲིག་དགོས་མེད།", - "selectText": { - "1": "གཤམ་ནས་བར་མཚམས་ཤོག་བུ་འགའ་པར་འདེབས་བྱེད། (ནག་དཀར་ཡིན་ནའང་འགྲིག)", - "2": "ཡིག་ཆ་ཚང་མའི་བར་དུ་བར་མཚམས་ཤོག་བུ་བཅུག་ནས་ཐེངས་གཅིག་ལ་བཤེར་འབེབས་བྱེད།", - "3": "བཤེར་འབེབས་བྱས་པའི་ PDF ཡིག་ཆ་ཆེན་པོ་གཅིག་ཡར་འཇོག་བྱས་ནས་ Stirling PDF ལ་ལྷག་མ་བྱེད་དུ་འཇུག", - "4": "བར་མཚམས་ཤོག་ངོས་རྣམས་རང་འགུལ་གྱིས་ངོས་འཛིན་དང་སུབ་པ་བྱས་ནས་མཐའ་མའི་ཡིག་ཆ་གཙང་མ་ཞིག་ངེས་པར་དུ་ཐོབ་ཐུབ།" - }, - "formPrompt": "Stirling-PDF ཤོག་ངོས་བར་མཚམས་ཡོད་པའི་ PDF ཕུལ་བ།", - "duplexMode": "ཕྱོགས་གཉིས་ཀྱི་རྣམ་པ། (མདུན་རྒྱབ་བཤེར་འབེབས།)", - "dividerDownload2": "'རང་འགུལ་ཁ་གྱེས་བར་མཚམས། (བཀོལ་སྤྱོད་ལམ་སྟོན་དང་བཅས་པ།).pdf' ཕབ་ལེན།", - "submit": "ཕུལ་བ།" - }, - "sanitizePdf": { - "tags": "གཙང་སེལ།,བདེ་འཇགས།,ཉེན་མེད།,ཉེན་ཁ་སེལ་བ།" - }, - "URLToPDF": { - "tags": "དྲ་ངོས་ལེན་པ།,ཤོག་ངོས་ཉར་ཚགས།,དྲ་ཚིགས་ཡིག་ཆ།,ཡིག་མཛོད།", - "title": "URL ནས་ PDF ལ།", - "header": "URL ནས་ PDF ལ།", - "submit": "བསྒྱུར་བ།", - "credit": "WeasyPrint བེད་སྤྱོད་བྱེད་པ།" - }, - "HTMLToPDF": { - "tags": "རྟགས་རྒྱག,དྲ་ངོས་ནང་དོན།,བསྒྱུར་བཅོས།,བསྒྱུར་བ།", - "title": "HTML ནས་ PDF ལ།", - "header": "HTML ནས་ PDF ལ།", - "help": "HTML ཡིག་ཆ་དང་དགོས་མཁོའི་ html/css/པར་རིས་སོགས་འདུས་པའི་ ZIP ཡིག་ཆ་ངོས་ལེན་བྱེད་པ།", - "submit": "བསྒྱུར་བ།", - "credit": "WeasyPrint བེད་སྤྱོད་བྱེད་པ།", - "zoom": "དྲ་ཚིགས་སྟོན་པའི་ཆེ་ཆུང་ཚད།", - "pageWidth": "ཤོག་ངོས་ཀྱི་ཞེང་ཚད་སེན་ཊི་མི་ཊར་ནང་། (སྟོང་པར་བཞག་ན་སྔོན་སྒྲིག)", - "pageHeight": "ཤོག་ངོས་ཀྱི་དཔངས་ཚད་སེན་ཊི་མི་ཊར་ནང་། (སྟོང་པར་བཞག་ན་སྔོན་སྒྲིག)", - "marginTop": "ཤོག་ངོས་ཀྱི་སྟེང་མཐའི་བར་ཐག་མི་ལི་མི་ཊར་ནང་། (སྟོང་པར་བཞག་ན་སྔོན་སྒྲིག)", - "marginBottom": "ཤོག་ངོས་ཀྱི་འོག་མཐའི་བར་ཐག་མི་ལི་མི་ཊར་ནང་། (སྟོང་པར་བཞག་ན་སྔོན་སྒྲིག)", - "marginLeft": "ཤོག་ངོས་ཀྱི་གཡོན་མཐའི་བར་ཐག་མི་ལི་མི་ཊར་ནང་། (སྟོང་པར་བཞག་ན་སྔོན་སྒྲིག)", - "marginRight": "ཤོག་ངོས་ཀྱི་གཡས་མཐའི་བར་ཐག་མི་ལི་མི་ཊར་ནང་། (སྟོང་པར་བཞག་ན་སྔོན་སྒྲིག)", - "printBackground": "དྲ་ཚིགས་ཀྱི་རྒྱབ་ལྗོངས་མངོན་པ།", - "defaultHeader": "སྔོན་སྒྲིག་མགོ་བྱང་སྤྱོད་པ། (མིང་དང་ཤོག་གྲངས།)", - "cssMediaType": "ཤོག་ངོས་ཀྱི་ CSS བརྒྱུད་ལམ་རིགས་བསྒྱུར་བ།", - "none": "མེད།", - "print": "པར་འདེབས།", - "screen": "བརྙན་ཡོལ།" - }, - "MarkdownToPDF": { - "tags": "རྟགས་རྒྱག,དྲ་ངོས་ནང་དོན།,བསྒྱུར་བཅོས།,བསྒྱུར་བ།", - "title": "Markdown ནས་ PDF ལ།", - "header": "Markdown ནས་ PDF ལ།", - "submit": "བསྒྱུར་བ།", - "help": "ལས་ཀ་བྱེད་བཞིན་པ།", - "credit": "WeasyPrint བེད་སྤྱོད་བྱེད་པ།" - }, - "PDFToMarkdown": { - "tags": "markup,web-content,transformation,convert,md", - "title": "PDF To Markdown", - "header": "PDF To Markdown", - "submit": "Convert" - }, - "getPdfInfo": { - "tags": "གནས་ཚུལ།,གཞི་གྲངས།,སྡོམ་རྩིས།,གྲངས་ཐོ།", - "title": "PDF ཡི་གནས་ཚུལ་ལེན་པ།", - "header": "PDF ཡི་གནས་ཚུལ་ལེན་པ།", - "submit": "གནས་ཚུལ་ལེན་པ།", - "downloadJson": "JSON ཕབ་ལེན།" - }, - "extractPage": { - "tags": "ཕྱིར་འདོན།" - }, - "PdfToSinglePage": { - "tags": "ཤོག་ངོས་གཅིག" - }, - "showJS": { - "tags": "JS", - "title": "Javascript ས�ོན་པ།", - "header": "Javascript སྟོན་པ།", - "downloadJS": "Javascript ཕབ་ལེན།", - "submit": "སྟོན་པ།" - }, - "autoRedact": { - "tags": "སྒྲིབ་སྲུང་།,སྦས་པ།,ནག་པོས་སྒྲིབ་པ།,ནག་པོ།,རྟགས་རྒྱག,སྦས་པ།", - "title": "རང་འགུལ་སྒྲིབ་སྲུང་།", - "header": "རང་འགུལ་སྒྲིབ་སྲུང་།", - "colorLabel": "ཚོས་གཞི།", - "textsToRedactLabel": "སྒྲིབ་རྒྱུའི་ཡི་གེ། (ཐིག་ཕྲེང་སོ་སོར།)", - "textsToRedactPlaceholder": "དཔེར་ན། \\nགསང་བ། \\nགསང་ཆེ།", - "useRegexLabel": "Regex བེད་སྤྱོད།", - "wholeWordSearchLabel": "ཚིག་ཆ་ཚང་འཚོལ་བ།", - "customPaddingLabel": "མཐའ་མཚམས་སྟོང་ཆ་སྣོན་པ།", - "convertPDFToImageLabel": "PDF ནས་ PDF-པར་རིས་ལ་བསྒྱུར་བ། (སྒྲོམ་གྱི་རྒྱབ་ཀྱི་ཡི་གེ་སུབ་པར་བེད་སྤྱོད།)", - "submitButton": "ཕུལ་བ།" - }, - "redact": { - "tags": "སྒྲིབ་སྲུང་།,སྦས་པ།,ནག་པོས་སྒྲིབ་པ།,ནག་པོ།,རྟགས་རྒྱག,སྦས་པ།,ལག་བཟོས།", - "title": "ལག་བཟོས་སྒྲིབ་སྲུང་།", - "header": "ལག་བཟོས་སྒྲིབ་སྲུང་།", - "submit": "སྒྲིབ་སྲུང་།", - "textBasedRedaction": "ཡི་གེ་གཞིར་བཟུང་བའི་སྒྲིབ་སྲུང་།", - "pageBasedRedaction": "ཤོག་ངོས་གཞིར་བཟུང་བའི་སྒྲིབ་སྲུང་།", - "convertPDFToImageLabel": "PDF ནས་ PDF-པར་རིས་ལ་བསྒྱུར་བ། (སྒྲོམ་གྱི་རྒྱབ་ཀྱི་ཡི་གེ་སུབ་པར་བེད་སྤྱོད།)", - "pageRedactionNumbers": { - "title": "ཤོག་ངོས།", - "placeholder": "(དཔེར་ན། 1,2,8 ཡང་ན་ 4,7,12-16 ཡང་ན་ 2n-1)" - }, - "redactionColor": { - "title": "སྒྲིབ་སྲུང་གི་ཚོས་གཞི།" - }, - "export": "ཕྱིར་འདྲེན།", - "upload": "ཡར་འཇུག", - "boxRedaction": "སྒྲོམ་བྲིས་སྒྲིབ་སྲུང་།", - "zoom": "ཆེ་ཆུང་།", - "zoomIn": "ཆེ་རུ་གཏོང་བ།", - "zoomOut": "ཆུང་དུ་གཏོང་བ།", - "nextPage": "ཤོག་ངོས་རྗེས་མ།", - "previousPage": "ཤོག་ངོས་སྔོན་མ།", - "toggleSidebar": "ཟུར་སྣེའི་སྡེ་ཚན་སྟོན་སྦས།", - "showThumbnails": "བསྡུས་པར་སྟོན།", - "showDocumentOutline": "ཡིག་ཆའི་སྒྲོམ་གཞི་སྟོན། (ནང་གསེས་ཚང་མ་རྒྱ་སྐྱེད་/བསྡུ་བར་ཉིས་རྡེབ།)", - "showAttatchments": "ཟུར་སྦྱར་སྟོན།", - "showLayers": "རིམ་པ་སྟོན། (རིམ་པ་ཚང་མ་སྔོན་སྒྲིག་གནས་བབ་ལ་བསྐྱར་སྒྲིག་བྱེད་པར་ཉིས་རྡེབ།)", - "colourPicker": "ཚོས་གཞི་འདེམས་བྱེད���", - "findCurrentOutlineItem": "ད་ལྟའི་སྒྲོམ་གཞིའི་ནང་དོན་འཚོལ་བ།", - "applyChanges": "Apply Changes" - }, - "tableExtraxt": { - "tags": "CSV,རེའུ་མིག་ཕྱིར་འདོན།,ཕྱིར་འདོན།,བསྒྱུར་བ།" - }, - "autoSizeSplitPDF": { - "tags": "pdf,ཁ་གྱེས།,ཡིག་ཆ།,གོ་སྒྲིག" - }, - "overlay-pdfs": { - "tags": "སྟེང་བརྩེགས།", - "header": "PDF ཡིག་ཆ་བརྩེགས་པ།", - "baseFile": { - "label": "གཞི་རྩའི་ PDF ཡིག་ཆ་འདེམས་པ།" - }, - "overlayFiles": { - "label": "བརྩེགས་རྒྱུའི་ PDF ཡིག་ཆ་འདེམས་པ།" - }, - "mode": { - "label": "བརྩེགས་སྟངས་འདེམས་པ།", - "sequential": "རིམ་བཞིན་བརྩེགས་པ།", - "interleaved": "སྤེལ་མར་བརྩེགས་པ།", - "fixedRepeat": "བསྐྱར་ཟློས་གཏན་འཇགས་བརྩེགས་པ།" - }, - "counts": { - "label": "བརྩེགས་གྲངས། (བསྐྱར་ཟློས་གཏན་འཇགས་རྣམ་པའི་ཆེད།)", - "placeholder": "ཚེག་ཁྱིམ་གྱིས་བཅད་པའི་གྲངས་ཀ་འཇུག་པ། (དཔེར་ན། 2,3,1)" - }, - "position": { - "label": "བརྩེགས་སའི་གནས་ས་འདེམས་པ།", - "foreground": "མདུན་ངོས།", - "background": "རྒྱབ་ལྗོངས།" - }, - "submit": "ཕུལ་བ།" - }, - "split-by-sections": { - "tags": "དུམ་བུ་ཁ་གྱེས།,བགོ་བ།,རང་སྒྲིག,སྒྲིག་སྦྱོར།", - "title": "�་ཤས་ལྟར་ PDF ཁ་གྱེས།", - "header": "PDF ཆ་ཤས་སུ་ཁ་གྱེས།", - "horizontal": { - "label": "གཞུང་ཕྱོགས་བགོ་བཤའ།", - "placeholder": "གཞུང་ཕྱོགས་བགོ་བཤའི་གྲངས་ཀ་འཇུག་པ།" - }, - "vertical": { - "label": "གྱེན་ཕྱོགས་བགོ་བཤའ།", - "placeholder": "གྱེན་ཕྱོགས་བགོ་བཤའི་གྲངས་ཀ་འཇུག་པ།" - }, - "submit": "PDF ཁ་གྱེས།", - "merge": "PDF གཅིག་ཏུ་སྡེབ་སྦྱོར།" - }, - "AddStampRequest": { - "tags": "ཐེལ་ཙེ།,པར་རིས་སྣོན་པ།,དཀྱིལ་སྒྲིག་པར་རིས།,ཆུ་རྟགས།,PDF,ནང་འཇུག,རང་སྒྲིག,སྒྲིག་སྦྱོར།", - "header": "PDF ལ་ཐེལ་ཙེ་རྒྱག་པ།", - "title": "PDF ལ་ཐེལ་ཙེ་རྒྱག་པ།", - "stampType": "ཐེལ་ཙེའི་རིགས།", - "stampText": "ཐེལ་ཙེའི་ཡི་གེ", - "stampImage": "ཐེལ་ཙེའི་པར་རིས།", - "alphabet": "ཡི་གེའི་གཟུགས།", - "fontSize": "ཡི་གེ/པར་རིས་ཀྱི་ཆེ་ཆུང་།", - "rotation": "འཁོར་སྐྱོད།", - "opacity": "གསལ་ཚད།", - "position": "གནས་ས།", - "overrideX": "X གནས་ཚད་བརྗེ་བསྒྱུར།", - "overrideY": "Y གནས་ཚད་བརྗེ་བསྒྱུར།", - "customMargin": "མཐའ་མཚམས་རང་སྒྲིག", - "customColor": "ཡི་གེའི་ཚོས་མདོག་རང་སྒྲིག", - "submit": "ཕུལ་བ།" - }, - "removeImagePdf": { - "tags": "པར་རིས་སུབ་པ།,ཤོག་ངོས་བཀོལ་སྤྱོད།,རྒྱབ་ངོས།,ཞབས་ཞུ་ཕྱོགས།" - }, - "splitPdfByChapters": { - "tags": "ཁ་གྱེས།,ལེའུ།,དཔེ་རྟགས།,གོ་སྒྲིག" - }, - "validateSignature": { - "tags": "མིང་རྟགས།,ར་སྤྲོད།,ཆ་འཇོག,pdf,ལག་ཁྱེར།,ཨང་ཀིའི་མིང་རྟགས།,མིང་རྟགས་ར་སྤྲོད།,ལག་ཁྱེར་ར་སྤྲོད།", - "title": "PDF མིང་རྟགས་ར་སྤྲོད།", - "header": "ཨང་ཀིའི་མིང་རྟགས་ར་སྤྲོད།", - "selectPDF": "མིང་རྟགས་བཀོད་པའི་ PDF ཡིག་ཆ་འདེམས་པ།", - "submit": "མིང་རྟགས་ར་སྤྲོད།", - "results": "ར་སྤྲོད་འབྲས་བུ།", - "status": { - "_value": "གནས་སྟངས།", - "valid": "ནུས་ལྡན།", - "invalid": "ནུས་མེད།" - }, - "signer": "མིང་རྟགས་འགོད་མཁན།", - "date": "དུས་ཚོད།", - "reason": "རྒྱུ་མཚན།", - "location": "ས་གནས།", - "noSignatures": "ཡིག་ཆ་འདིའི་ནང་དུ་ཨང་ཀིའི་མིང་རྟགས་མ་རྙེད།", - "chain": { - "invalid": "ལག་ཁྱེར་བརྒྱུད་རིམ་ར་སྤྲོད་མ་འགྲུབ་པ། - མིང་རྟགས་འགོད་མཁན་གྱི་ངོ་སྤྲོད་ར་སྤྲོད་བྱེད་མི་ཐུབ།" - }, - "trust": { - "invalid": "ལག་ཁྱེར་ཡིད་ཆེས་མཛོད་ཁང་ནང་མེད་པ། - འབྱུང་ཁུངས་ར་སྤྲོད་བྱེད་མི་ཐུབ།" - }, - "cert": { - "expired": "ལག་ཁྱེར་དུས་ཡོལ་ཟིན།", - "revoked": "ལག་ཁྱེར་ཕྱིར་འཐེན་བྱས་ཟིན།", - "info": "ལག་ཁྱེར་ཞིབ་ཕྲ།", - "issuer": "སྤྲོད་མཁན།", - "subject": "བརྗོད་གཞི།", - "serialNumber": "ཨང་གྲངས་གོ་རིམ།", - "validFrom": "ནུས་ལྡན་འགོ་འཛུགས།", - "validUntil": "ནུས་ལྡན་མཇུག་སྒྲིལ།", - "algorithm": "བྱེད་ཐབས།", - "keySize": "ལྡེ་མིག་ཆེ་ཆུང་།", - "version": "པར་གཞི།", - "keyUsage": "ལྡེ་མིག་བེད་སྤྱོད།", - "selfSigned": "རང་མིང་རྟགས།", - "bits": "གནས།" - }, - "signature": { - "info": "མིང་རྟགས་ཀྱི་གནས་ཚུལ།", - "_value": "མིང་རྟགས།", - "mathValid": "མིང་རྟགས་ཨང་རྩིས་ཐོག་ནས་ནུས་ལྡན་ཡིན་ཡང་།" - }, - "selectCustomCert": "རང་སྒྲིག་ལག་ཁྱེར་ཡིག་ཆ་ X.509 (འདམ་ག)" - }, - "replace-color": { - "title": "ཚོས་གཞིའི་གདམ་ག་མཐོ་རིམ།", - "header": "ཚོས་གཞི་བརྗེ་སྒྱུར་-ལྡོག་སྒྱུར་ PDF", - "selectText": { - "1": "ཚོས་གཞི་བརྗེ་སྒྱུར་རམ་ལྡོག་སྒྱུར་གྱི་གདམ་ག", - "2": "སྔོན་སྒྲིག (སྔོན་སྒྲིག་གི་འོད་ཁྱད་མཐོ་བའི་ཚོས་གཞི།)", - "3": "རང་སྒྲིག (རང་སྒྲིག་གི་ཚོས་གཞི།)", - "4": "ཡོངས་རྫོགས་ལྡོག་སྒྱུར། (ཚོས་གཞི་ཚང་མ་ལྡོག་སྒྱུར།)", - "5": "འོད་ཁྱད་མཐོ་བའི་ཚོས་གཞིའི་གདམ་ག", - "6": "རྒྱབ་ལྗོངས་ནག་པོའི་སྟེང་གི་ཡི་གེ་དཀར་པོ།", - "7": "རྒྱབ་ལྗོངས་དཀར་པོའི་སྟེང་གི་ཡི་གེ་ནག་པོ།", - "8": "རྒྱབ་ལྗོངས་ནག་པོའི་སྟེང་གི་ཡི་གེ་སེར་པོ།", - "9": "རྒྱབ་ལྗོངས་ནག་པོའི་སྟེང་གི་ཡི་གེ་ལྗང་ཁུ།", - "10": "ཡི་གེའི་ཚོས་གཞི་འདེམས་པ།", - "11": "རྒྱབ་ལྗོངས་ཀྱི་ཚོས་གཞི་འདེམས་པ།" - }, - "submit": "བརྗེ་སྒྱུར།" - }, - "replaceColorPdf": { - "tags": "ཚོས་གཞི་བརྗེ་སྒྱུར།,ཤོག་ངོས་བཀོལ་སྤྱོད���,རྒྱབ་ངོས།,ཞབས་ཞུ་ཕྱོགས།" - }, - "login": { - "title": "�ང་འཛུལ།", - "header": "ནང་འཛུལ།", - "signin": "ནང་འཛུལ།", - "rememberme": "ང་དྲན་པར་བྱེད།", - "invalid": "སྤྱོད་མིང་ངམ་གསང་ཚིག་ནོར་འདུག", - "locked": "ཁྱེད་ཀྱི་ཐོ་མཛོད་ཟྭ་རྒྱག་བརྒྱབ་ཟིན།", - "signinTitle": "ནང་འཛུལ་གནང་རོགས།", - "ssoSignIn": "གཅིག་གྱུར་ནང་འཛུལ་བརྒྱུད་ནས་ནང་འཛུལ།", - "oAuth2AutoCreateDisabled": "OAUTH2 རང་འགུལ་སྤྱོད་མཁན་གསར་བཟོ་བཀག་སྡོམ་བྱས་ཟིན།", - "oAuth2AdminBlockedUser": "ད་ལྟ་ཐོ་འགོད་མ་བྱས་པའི་སྤྱོད་མཁན་གྱི་ཐོ་འགོད་དང་ནང་འཛུལ་བཀག་སྡོམ་བྱས་ཡོད། དོ་དམ་པར་འབྲེལ་བ་གནང་རོགས།", - "oauth2RequestNotFound": "དབང་སྤྲོད་རེ་ཞུ་རྙེད་མ་བྱུང་།", - "oauth2InvalidUserInfoResponse": "སྤྱོད་མཁན་གྱི་གནས་ཚུལ་ལན་འདེབས་ནོར་འཁྲུལ།", - "oauth2invalidRequest": "རེ་ཞུ་ནོར་འཁྲུལ།", - "oauth2AccessDenied": "འཛུལ་སྤྱོད་བཀག་འགོག", - "oauth2InvalidTokenResponse": "བརྡ་རྟགས་ལན་འདེབས་ནོར་འཁྲུལ།", - "oauth2InvalidIdToken": "ངོ་རྟགས་བརྡ་རྟགས་ནོར་འཁྲུལ།", - "relyingPartyRegistrationNotFound": "བརྟེན་སའི་ཚོགས་པའི་ཐོ་འགོད་རྙེད་མ་བྱུང་།", - "userIsDisabled": "སྤྱོད་མཁན་བཀག་སྡོམ་བྱས་ཟིན། སྤྱོད་མིང་འདི་བརྒྱུད་ནས་ནང་འཛུལ་བྱེད་མི་ཆོག དོ་དམ་པར་འབྲེལ་བ་གནང་རོགས།", - "alreadyLoggedIn": "ཁྱེད་རང་", - "alreadyLoggedIn2": "སྒྲིག་ཆས་ནང་ནང་འཛུལ་བྱས་ཟིན། སྒྲིག་ཆས་ནས་ཕྱིར་འཐེན་བྱས་ནས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱེད་རོགས།", - "toManySessions": "ཁྱེད་ལ་འཛུལ་ཞུགས་བྱས་པའི་གནས་སྐབས་མང་དྲགས་འདུག", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF ནས་ཤོག་ངོས་གཅིག་ལ།", - "header": "PDF ནས་ཤོག་ངོས་གཅིག་ལ།", - "submit": "ཤོག་ངོས་གཅིག་ལ་བསྒྱུར་བ།" - }, - "pageExtracter": { - "title": "ཤོག་ངོས་ཕྱིར་འདོན།", - "header": "ཤོག་ངོས་ཕྱིར་འདོན།", - "submit": "ཕྱིར་འདོན།", - "placeholder": "(དཔེར་ན། 1,2,8 ཡང་ན་ 4,7,12-16 ཡང་ན་ 2n-1)" - }, - "sanitizePDF": { - "title": "PDF གཙང་སེལ།", - "header": "PDF ཡིག་ཆ་གཙང་སེལ།", - "selectText": { - "1": "Javascript བྱ་འགུལ་སུབ་པ།", - "2": "ནང་འཇུག་ཡིག་ཆ་སུབ་པ།", - "3": "Remove XMP metadata", - "4": "འབྲེལ་ཐག་སུབ་པ།", - "5": "ཡིག་གཟུགས་སུབ་པ།", - "6": "Remove Document Info Metadata" - }, - "submit": "PDF གཙང་སེལ།" - }, - "adjustContrast": { - "title": "འོད་ཁྱད་སྙོམ་སྒྲིག", - "header": "འོད་ཁྱད་སྙོམ་སྒྲིག", - "contrast": "འོད་ཁྱད།", - "brightness": "གསལ་ཚད།", - "saturation": "མདོག་ཚད།", - "download": "ཕབ་ལེན།" - }, - "compress": { - "title": "སྡུད་སྒྲིལ།", - "header": "PDF སྡུད་སྒྲིལ།", - "credit": "ཞབས་ཞུ་འདིས་ PDF སྡུད་སྒྲིལ་/ཡར་རྒྱས་གཏོང་བའི་ཆེད་དུ་ qpdf བེད་སྤྱོད་བྱེད་པ།", - "grayscale": { - "label": "应用灰度进行压缩" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "Optimisation level:", - "4": "རང་འགུལ་རྣམ་པ། - PDF ཏག་ཏག་ཆེ་ཆུང་ཚད་ལ་འཁྲིད་པའི་ཆེད་དུ་སྤུས་ཚད་རང་འགུལ་གྱིས་སྙོམ་སྒྲིག་བྱེད་པ།", - "5": "རེ་བའི་ PDF ཆེ་ཆུང་། (དཔེར་ན། 25MB, 10.8MB, 25KB)" - }, - "submit": "སྡུད་སྒྲིལ།" - }, - "decrypt": { - "passwordPrompt": "ཡིག་ཆ་འདི་གསང་ཚིག་གིས་སྲུང་སྐྱོབ་བྱས་ཡོད། གསང་ཚིག་འཇུག་རོགས།", - "cancelled": "PDF ཡི་བྱ་བ་མཚམས་འཇོག་བྱས་ཟིན། {0}", - "noPassword": "གསང་སྡོམ་གྲོལ་ཟིན། {0}", - "invalidPassword": "གསང་ཚིག་ཏག་ཏག་དང་མཉམ་དུ་ཡང་བསྐྱར་ཚོད་ལྟ་བྱེད་རོགས།", - "invalidPasswordHeader": "གསང་ཚིག་ནོར་བའམ་རྒྱབ་སྐྱོར་མི་བྱེད་པའི་གསང་སྡོམ་ PDF ཡིན་པ། {0}", - "unexpectedError": "There was an error processing the file. Please try again.", - "serverError": "Server error while decrypting: {0}", - "success": "ཡིག་ཆའི་གསང་སྡོམ་གྲོལ་ཟིན།" - }, - "multiTool-advert": { - "message": "This feature is also available in our multi-tool page. Check it out for enhanced page-by-page UI and additional features!" - }, - "pageRemover": { - "title": "Page Remover", - "header": "PDF Page remover", - "pagesToDelete": "སུབ་རྒྱུའི་ཤོག་ངོས། (ཤོག་གྲངས་ཀྱི་ཐོ་གཞུང་ཚག་ཤད་ཀྱིས་བཅད་ནས་འཇུག་པ།)", - "submit": "ཤོག་ངོས་སུབ་པ།", - "placeholder": "(དཔེར་ན། 1,2,6 ཡང་ན་ 1-10,15-30)" - }, - "imageToPDF": { - "title": "པར་རིས་ནས་ PDF ལ།", - "header": "པར་རིས་ནས་ PDF ལ།", - "submit": "བསྒྱུར་བ།", - "selectLabel": "པར་རིས་འཚམ་སྒྲིག་གདམ་ག", - "fillPage": "ཤོག་ངོས་བཀང་བ།", - "fitDocumentToImage": "ཤོག་ངོས་པར་རིས་དང་འཚམ་པར་བཟོ་བ།", - "maintainAspectRatio": "བསྡུར་ཚད་རྒྱུན་འཁྱོངས།", - "selectText": { - "2": "PDF འཁོར་སྐྱོད་བྱ་རྒྱུའི།", - "3": "ཡིག་ཆ་མང་པོའི་གཏན་ཚིགས། (པར་རིས་མང་པོ་དང་མཉམ་དུ་ལས་ཀ་བྱེད་སྐབས་ཁོ་ནར་སྤྱོད་ཆོག)", - "4": "PDF གཅིག་ཏུ་སྡེབ་སྦྱོར།", - "5": "PDF སོ་སོར་བསྒྱུར་བ།" - } - }, - "PDFToCSV": { - "title": "PDF ནས་ CSV ལ།", - "header": "PDF ནས་ CSV ལ།", - "prompt": "Choose page to extract table", - "submit": "Extract" - }, - "split-by-size-or-count": { - "title": "�ེ་ཆུང་ངམ་གྲངས་ཀ་ལྟར་ PDF ཁ་གྱེས།", - "header": "ཆེ་ཆུང་ངམ་གྲངས་ཀ་ལྟར་ PDF ཁ་གྱེས།", - "type": { - "label": "ཁ་གྱེས་རིགས་འདེམས་པ།", - "size": "ཆེ་ཆུང་ལྟར།", - "pageCount": "ཤོག་གྲངས་ལྟར།", - "docCount": "ཡིག་ཆའི་གྲངས་ཀ་ལྟར།" - }, - "value": { - "label": "གྲངས་ཐང་འཇུག་པ།", - "placeholder": "ཆེ་ཆུང་ (དཔེར་ན། 2MB ཡང་ན་ 3KB) ཡང་ན་གྲངས་ཀ་ (དཔེར་ན། 5) འཇུག་པ།" - }, - "submit": "ཕུལ་བ།" - }, - "printFile": { - "title": "ཡིག་ཆ་པར་འདེབས།", - "header": "ཡིག་ཆ་པར་འདེབས་འཕྲུལ་འཁོར་ལ་པར་འདེབས།", - "selectText": { - "1": "པར་འདེབས་བྱ་རྒྱུའི་ཡིག་ཆ་འདེམས་པ།", - "2": "པར་འདེབས་འཕྲུལ་འཁོར་གྱི་མིང་འཇུག་པ།" - }, - "submit": "པར་འདེབས།" - }, - "licenses": { - "nav": "ཆོག་མཆན།", - "title": "ཕྱི་ཡི་ཆོག་མཆན།", - "header": "ཕྱི་ཡི་ཆོག་མཆན།", - "module": "སྡེ་ཚན།", - "version": "པར་གཞི།", - "license": "ཆོག་མཆན།" - }, - "survey": { - "nav": "བསམ་ཞིབ།", - "title": "Stirling-PDF བསམ་ཞིབ།", - "description": "Stirling-PDF ལ་རྗེས་འདེད་མེད་པས། ང་ཚོས་ Stirling-PDF ཡར་རྒྱས་གཏོང་བའི་ཆེད་དུ་སྤྱོད་མཁན་ཚོའི་བསམ་འཆར་ཉན་འདོད་ཡོད།", - "changes": "བསམ་ཞིབ་སྔ་མ་ནས་བཟུང་ Stirling-PDF ལ་འགྱུར་བ་བྱུང་ཡོད། དེའི་སྐོར་ལ་གནས་ཚུལ་མང་བ་ཤེས་འདོད་ན་ང་ཚོའི་རྩོམ་ཡིག་འདིར་གཟིགས་རོགས།", - "changes2": "འགྱུར་བ་འདི་དག་དང་མཉམ་དུ་ང་ཚོར་ཚོང་དོན་རྒྱབ་སྐྱོར་དང་མ་དངུལ་ཐོབ་བཞིན་ཡོད།", - "please": "Stirling-PDF ཡི་མ་འོངས་པའི་ཐད་ལ་ནུས་པ་ཐོན་པའི་ཆེད་དུ་ང་ཚོའི་བསམ་ཞིབ་ནང་མཉམ་ཞུགས་གནང་རོགས།", - "disabled": "(བསམ་ཞིབ་སྒེའུ་ཁུང་རྗེས་མའི་གསར་སྒྱུར་ནང་སྒོ་རྒྱག་རྒྱུ་ཡིན་ཡང་ཤོག་ངོས་མཇུག་ཏུ་ཡོད་རྒྱུ་ཡིན།)", - "button": "བསམ་ཞིབ་བྱེད་པ།", - "dontShowAgain": "ཡང་བསྐྱར་མ་སྟོན།", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "པ�་རིས་སུབ་པ།", - "header": "པར་རིས་སུབ་པ།", - "removeImage": "པར་རིས་སུབ་པ།", - "submit": "པར་རིས་སུབ་པ།" - }, - "splitByChapters": { - "title": "ལེའ�་ལྟར་ PDF ཁ་གྱེས།", - "header": "ལེའུ་ལྟར་ PDF ཁ་གྱེས།", - "bookmarkLevel": "དཔེ་རྟགས་རིམ་པ།", - "includeMetadata": "གནས་ཚུལ་ཞིབ་ཕྲ་ཚུད་པ།", - "allowDuplicates": "བསྐྱར་ཟློས་ཆོག་པ།", - "desc": { - "1": "This tool splits a PDF file into multiple PDFs based on its chapter structure.", - "2": "Bookmark Level: Choose the level of bookmarks to use for splitting (0 for top-level, 1 for second-level, etc.).", - "3": "Include Metadata: If checked, the original PDF metadata will be included in each split PDF.", - "4": "Allow Duplicates: If checked, allows multiple bookmarks on the same page to create separate PDFs." - }, - "submit": "Split PDF" - }, - "fileChooser": { - "click": "སྤྱོད།", - "or": "ཡང་ན།", - "dragAndDrop": "འཐེན་ནས་འཇོག་པ།", - "dragAndDropPDF": "PDF ཡིག་ཆ་འཐེན་ནས་འཇོག་པ།", - "dragAndDropImage": "པར་རིས་ཡིག་ཆ་འཐེན་ནས་འཇོག་པ།", - "hoveredDragAndDrop": "ཡིག་ཆ་འདིར་འཐེན་ནས་འཇོག་པ།", - "extractPDF": "འདོན་རིས་འགྱུར་བའི་སྒྲིག་བཏང་བ།" - }, - "releases": { - "footer": "པར་གཞི།", - "title": "པར་གཞི་གསར་པའི་གསལ་བསྒྲགས།", - "header": "པར་གཞི་གསར་པའི་གསལ་བསྒྲགས།", - "current": { - "version": "མིག་སྔའི་པར་གཞི།" - }, - "note": "པར་གཞི་གསར་པའི་གསལ་བསྒྲགས་དབྱིན་ཡིག་ཁོ་ནར་ཡོད།" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/zh-CN/translation.json b/frontend/dist/locales/zh-CN/translation.json deleted file mode 100644 index eeecb643a..000000000 --- a/frontend/dist/locales/zh-CN/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "字体大小", - "fontName": "字体名称", - "title": "添加页码", - "header": "添加页码", - "selectText": { - "1": "选择PDF文件:", - "2": "边距大小", - "3": "位置", - "4": "起始页码", - "5": "添加页码的页数", - "6": "自定义文本" - }, - "customTextDesc": "自定义文本", - "numberPagesDesc": "要添加页码的页数,默认为“所有”,也可以接受1-5或2,5,9等", - "customNumberDesc": "默认为 {n},也可以接受“第 {n} 页/共 {total} 页”,“文本-{n}”,“{filename}-{n}”", - "submit": "添加页码" - }, - "pdfPrompt": "选择 PDF", - "multiPdfPrompt": "选择多个 PDF(2个或更多)", - "multiPdfDropPrompt": "选择(或拖拽)所需的 PDF", - "imgPrompt": "选择图像", - "genericSubmit": "提交", - "uploadLimit": "Maximum file size:", - "uploadLimitExceededSingular": "is too large. Maximum allowed size is", - "uploadLimitExceededPlural": "are too large. Maximum allowed size is", - "processTimeWarning": "警告:此过程可能需要多达一分钟,具体时间取决于文件大小", - "pageOrderPrompt": "页面顺序(输入逗号分隔的页码列表或函数):", - "pageSelectionPrompt": "自定义页面选择(输入以逗号分隔的页码列表或函数:1,5,6、2n+1):", - "goToPage": "到", - "true": "对", - "false": "错", - "unknown": "未知", - "save": "保存", - "saveToBrowser": "保存到浏览器", - "close": "关闭", - "filesSelected": "选中的文件", - "noFavourites": "没有添加收藏夹", - "downloadComplete": "下载完成", - "bored": "等待时觉得无聊?", - "alphabet": "字母表", - "downloadPdf": "下载 PDF", - "text": "文本", - "font": "字体", - "selectFillter": "-- 选择--", - "pageNum": "页码", - "sizes": { - "small": "小型尺寸", - "medium": "中型尺寸", - "large": "大型尺寸", - "x-large": "超大型尺寸" - }, - "error": { - "pdfPassword": "PDF文档有密码,未提供密码或密码不正确", - "_value": "错误", - "sorry": "对此问题感到抱歉!", - "needHelp": "需要帮助 / 发现问题?", - "contactTip": "如果你仍然遇到问题,不要犹豫,向我们寻求帮助。你可以在我们的 GitHub 页面上提交工单,或者通过 Discord 与我们联系:", - "404": { - "head": "404 - 页面未找到 | 哎呀,我们在代码中触发了错误!", - "1": "我们似乎找不到你寻找的页面。", - "2": "出了些问题" - }, - "github": "在 GitHub 上提交工单", - "showStack": "显示堆栈跟踪", - "copyStack": "复制堆栈跟踪", - "githubSubmit": "GitHub - 提交工单", - "discordSubmit": "Discord - 提交支持帖子" - }, - "delete": "删除", - "username": "用户名", - "password": "密码", - "welcome": "欢迎", - "property": "资产", - "black": "黑色", - "white": "白色", - "red": "红色", - "green": "绿色", - "blue": "蓝色", - "custom": "自定义...", - "WorkInProgess": "工作正在进行中,可能无法工作或有错误,请报告任何问题!", - "poweredBy": "服务来源:", - "yes": "是", - "no": "否", - "changedCredsMessage": "凭证已更改!", - "notAuthenticatedMessage": "用户未经过身份验证。", - "userNotFoundMessage": "未找到用户。", - "incorrectPasswordMessage": "当前密码不正确。", - "usernameExistsMessage": "新用户名已存在。", - "invalidUsernameMessage": "用户名无效,用户名只能包含字母、数字和以下特殊字符@._+- 或必须是有效的电子邮件地址。", - "invalidPasswordMessage": "密码不能为空且开头和结尾不能有空格。", - "confirmPasswordErrorMessage": "两次密码不一致。", - "deleteCurrentUserMessage": "无法删除当前登录的用户。", - "deleteUsernameExistsMessage": "用户名不存在,无法删除。", - "downgradeCurrentUserMessage": "无法降级当前用户的角色", - "disabledCurrentUserMessage": "无法禁用当前用户。", - "downgradeCurrentUserLongMessage": "无法降级当前用户的角色。因此,当前用户将不会显示。", - "userAlreadyExistsOAuthMessage": "该用户已作为 OAuth2 用户存在。", - "userAlreadyExistsWebMessage": "该用户已作为 Web 用户存在。", - "oops": "哎呀!", - "help": "帮助", - "goHomepage": "返回主页", - "joinDiscord": "加入我们的 Discord 服务器", - "seeDockerHub": "查看 Docker Hub", - "visitGithub": "访问 Github 仓库", - "donate": "捐款", - "color": "颜色", - "sponsor": "赞助", - "info": "信息", - "pro": "专业版", - "page": "页面", - "pages": "页码", - "loading": "加载中...", - "addToDoc": "添加至文件", - "reset": "重置", - "apply": "应用", - "noFileSelected": "No file selected. Please upload one.", - "legal": { - "privacy": "隐私政策", - "terms": "服务条款", - "accessibility": "无障碍", - "cookie": "Cookie 政策", - "impressum": "Impressum", - "showCookieBanner": "Cookie Preferences" - }, - "pipeline": { - "header": "流水线菜单(Beta)", - "uploadButton": "上传自定义流水线", - "configureButton": "配置", - "defaultOption": "自定义", - "submitButton": "提交", - "help": "工作流帮助", - "scanHelp": "文件夹扫描帮助", - "deletePrompt": "确认删除该工作流?", - "tags": "自动化、顺序、脚本化、批处理", - "title": "流水线" - }, - "pipelineOptions": { - "header": "流水线配置", - "pipelineNameLabel": "流水线名称", - "saveSettings": "保存设置", - "pipelineNamePrompt": "请输入流水线名称", - "selectOperation": "选择操作", - "addOperationButton": "添加操作", - "pipelineHeader": "流水线:", - "saveButton": "下载", - "validateButton": "验证" - }, - "enterpriseEdition": { - "button": "升级到 Pro 版本", - "warning": "此功能仅适用于 Pro 版本", - "yamlAdvert": "Stirling PDF Pro支持YAML配置文件和其他SSO功能。", - "ssoAdvert": "寻找更多的用户管理功能?查看Stirling PDF Pro" - }, - "analytics": { - "title": "你想协助改善Stirling PDF吗", - "paragraph1": "Stirling PDF有选择性分析功能,可以帮助我们改进产品。我们不跟踪任何个人信息或文件内容。", - "paragraph2": "请考虑启用分析来帮助Stirling-PDF的发展,并让我们更好地了解我们的用户。", - "enable": "启用分析功能", - "disable": "禁用分析功能", - "settings": "您可以在 config/settings.yml 文件中变更分析功能的设定" - }, - "navbar": { - "favorite": "收藏", - "recent": "新功能和最近更新", - "darkmode": "暗黑模式", - "language": "语言", - "settings": "设置", - "allTools": "工具箱", - "multiTool": "多功能工具", - "search": "搜索", - "sections": { - "organize": "组织", - "convertTo": "转换成PDF", - "convertFrom": "从PDF转换", - "security": "签名和安全", - "advance": "高级功能", - "edit": "查看和编辑", - "popular": "热门" - } - }, - "settings": { - "title": "设置", - "update": "有可用的更新", - "updateAvailable": "当前版本为 {0},新版本 ({1}) 可用。", - "appVersion": "应用程序版本:", - "downloadOption": { - "title": "选择下载选项(单个文件非压缩文件):", - "1": "在同一窗口打开", - "2": "在新窗口中打开", - "3": "下载文件" - }, - "zipThreshold": "当下载的文件数量超过限制时,将文件压缩。", - "signOut": "登出", - "accountSettings": "账号设定", - "bored": { - "help": "启用彩蛋游戏" - }, - "cacheInputs": { - "name": "保存表单输入", - "help": "保存先前输入以供日后使用" - } - }, - "changeCreds": { - "title": "更改凭证", - "header": "更新您的账户详情", - "changePassword": "您正在使用默认登录凭证,请输入新密码", - "newUsername": "新用户名", - "oldPassword": "当前密码", - "newPassword": "新密码", - "confirmNewPassword": "确认新密码", - "submit": "提交更改" - }, - "account": { - "title": "账号设定", - "accountSettings": "账号设定", - "adminSettings": "管理员设置 - 查看和添加用户", - "userControlSettings": "用户控制设置", - "changeUsername": "更改用户名", - "newUsername": "新用户名", - "password": "确认密码", - "oldPassword": "旧密码", - "newPassword": "新密码", - "changePassword": "更改密码", - "confirmNewPassword": "确认新密码", - "signOut": "退出登录", - "yourApiKey": "您的 API 密钥", - "syncTitle": "将浏览器设置与账户同步", - "settingsCompare": "设置比较:", - "property": "属性", - "webBrowserSettings": "Web 浏览器设置", - "syncToBrowser": "同步账户 -> 浏览器", - "syncToAccount": "同步账户 <- 浏览器" - }, - "adminUserSettings": { - "title": "用户控制设置", - "header": "管理员用户控制设置", - "admin": "管理员", - "user": "用户", - "addUser": "添加新用户", - "deleteUser": "删除用户", - "confirmDeleteUser": "确认删除该用户?", - "confirmChangeUserStatus": "是否应禁用/启用该用户?", - "usernameInfo": "用户名只能包含字母、数字和以下特殊字符@._+-,或者必须是有效的电子邮件地址。", - "roles": "角色", - "role": "角色", - "actions": "操作", - "apiUser": "受限制的 API 用户", - "extraApiUser": "额外受限制的 API 用户", - "webOnlyUser": "仅限 Web 用户", - "demoUser": "演示用户(无自定义设置)", - "internalApiUser": "内部 API 用户", - "forceChange": "强制用户在登录时更改用户名/密码", - "submit": "保存用户", - "changeUserRole": "更改用户角色", - "authenticated": "已验证", - "editOwnProfil": "编辑个人资料", - "enabledUser": "启用用户", - "disabledUser": "禁用用户", - "activeUsers": "激活用户:", - "disabledUsers": "禁用用户:", - "totalUsers": "总用户:", - "lastRequest": "最后登录", - "usage": "View Usage" - }, - "endpointStatistics": { - "title": "Endpoint Statistics", - "header": "Endpoint Statistics", - "top10": "Top 10", - "top20": "Top 20", - "all": "All", - "refresh": "Refresh", - "includeHomepage": "Include Homepage ('/')", - "includeLoginPage": "Include Login Page ('/login')", - "totalEndpoints": "Total Endpoints", - "totalVisits": "Total Visits", - "showing": "Showing", - "selectedVisits": "Selected Visits", - "endpoint": "Endpoint", - "visits": "Visits", - "percentage": "Percentage", - "loading": "Loading...", - "failedToLoad": "Failed to load endpoint data. Please try refreshing.", - "home": "Home", - "login": "Login", - "top": "Top", - "numberOfVisits": "Number of Visits", - "visitsTooltip": "Visits: {0} ({1}% of total)", - "retry": "Retry" - }, - "database": { - "title": "数据库 导入/导出", - "header": "数据库 导入/导出", - "fileName": "文件名", - "creationDate": "创建时间", - "fileSize": "文件大小", - "deleteBackupFile": "删除备份文件", - "importBackupFile": "导入备份文件", - "createBackupFile": "创建备份文件", - "downloadBackupFile": "下载备份文件", - "info_1": "导入数据时,确保结构正确至关重要。如果您不确定自己在做什么,请寻求专业人士的建议和支持。结构错误会导致应用程序故障,甚至完全无法运行应用程序。", - "info_2": "上传文件时,文件名并不重要。上传后,文件名将重命名为 backup_user_yyyyMMddHHmm.sql,以确保命名规范的一致性。", - "submit": "导入备份", - "importIntoDatabaseSuccessed": "导入数据库成功", - "backupCreated": "数据库备份成功", - "fileNotFound": "未找到文件", - "fileNullOrEmpty": "文件不能为空", - "failedImportFile": "导入文件失败", - "notSupported": "此功能不适用于您的数据库连接。" - }, - "session": { - "expired": "您的会话已过期。请刷新页面并重试。", - "refreshPage": "刷新页面" - }, - "home": { - "desc": "本地部署的一站式服务,满足您的所有 PDF 需求。", - "searchBar": "搜索您需要的功能...", - "viewPdf": { - "title": "View/Edit PDF", - "desc": "浏览、注释、添加文本或图像" - }, - "setFavorites": "编辑收藏夹", - "hideFavorites": "隐藏收藏夹", - "showFavorites": "显示收藏夹", - "legacyHomepage": "使用旧版主页", - "newHomePage": "试用新版主页!", - "alphabetical": "按字母顺序", - "globalPopularity": "按全球热度", - "sortBy": "排序:", - "multiTool": { - "title": "PDF 多功能工具", - "desc": "合并、旋转、重新排列和删除 PDF 页面" - }, - "merge": { - "title": "合并", - "desc": "轻松将多个 PDF 合并成一个。" - }, - "split": { - "title": "拆分", - "desc": "将 PDF 拆分为多个文档。" - }, - "rotate": { - "title": "旋转", - "desc": "旋转 PDF。" - }, - "imageToPdf": { - "title": "转换图像到 PDF", - "desc": "将图像(PNG、JPEG、GIF)转换为 PDF。" - }, - "pdfToImage": { - "title": "转换 PDF 到图像", - "desc": "将 PDF 转换为图像(PNG、JPEG、GIF)。" - }, - "pdfOrganiser": { - "title": "整理", - "desc": "按任意顺序删除/重新排列页面。" - }, - "addImage": { - "title": "在 PDF 中添加图片", - "desc": "将图像添加到 PDF 的指定位置。" - }, - "watermark": { - "title": "添加水印", - "desc": "在 PDF 中添加自定义水印。" - }, - "permissions": { - "title": "更改权限", - "desc": "更改 PDF 文档的权限。" - }, - "removePages": { - "title": "删除", - "desc": "从 PDF 文档中删除不需要的页面。" - }, - "addPassword": { - "title": "添加密码", - "desc": "使用密码对 PDF 文档进行加密。" - }, - "removePassword": { - "title": "删除密码", - "desc": "从 PDF 文档中移除密码保护。" - }, - "compressPdfs": { - "title": "压缩", - "desc": "压缩 PDF 文件以减小文件大小。" - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "更改元数据", - "desc": "更改/删除/添加 PDF 文档的元数据。" - }, - "fileToPDF": { - "title": "将文件转换为 PDF 文件", - "desc": "将几乎所有文件转换为 PDF (DOCX、PNG、XLS、PPT、TXT等)。" - }, - "ocr": { - "title": "运行 OCR /清理扫描", - "desc": "清理和识别 PDF 中的图像文本,并将其转换为可编辑文本。" - }, - "extractImages": { - "title": "提取图像", - "desc": "从 PDF 中提取所有图像并保存到压缩包中。" - }, - "pdfToPDFA": { - "title": "PDF 转 PDF/A", - "desc": "将 PDF 转换为 PDF/A 以进行长期保存。" - }, - "PDFToWord": { - "title": "PDF 转 Word", - "desc": "将PDF转换为Word格式(DOC、DOCX和ODT)。" - }, - "PDFToPresentation": { - "title": "PDF 转演示文稿", - "desc": "将 PDF 转换为演示文稿格式(PPT、PPTX 和 ODP)。" - }, - "PDFToText": { - "title": "PDF 转 RTF(文本)", - "desc": "将PDF转换为文本或 RTF 格式。" - }, - "PDFToHTML": { - "title": "PDF 转 HTML", - "desc": "将 PDF 转换为 HTML 格式。" - }, - "PDFToXML": { - "title": "PDF 转 XML", - "desc": "将 PDF 转换为 XML 格式。" - }, - "ScannerImageSplit": { - "title": "检测/分割扫描图像", - "desc": "从一张照片或 PDF 中分割出多张照片。" - }, - "sign": { - "title": "签名", - "desc": "通过绘图、文字或图像向 PDF 添加签名" - }, - "flatten": { - "title": "展平", - "desc": "从 PDF 中删除所有互动元素和表单" - }, - "repair": { - "title": "修复", - "desc": "尝试修复损坏/损坏的 PDF" - }, - "removeBlanks": { - "title": "删除空白页", - "desc": "检测并删除文档中的空白页" - }, - "removeAnnotations": { - "title": "删除标注", - "desc": "删除 PDF 中的所有标注/评论" - }, - "compare": { - "title": "比较", - "desc": "比较并显示两个 PDF 文档之间的差异" - }, - "certSign": { - "title": "使用证书签名", - "desc": "使用证书/密钥(PEM/P12)对PDF进行签名" - }, - "removeCertSign": { - "title": "移除证书签名", - "desc": "移除 PDF 的证书签名" - }, - "pageLayout": { - "title": "多页布局", - "desc": "将 PDF 文档的多个页面合并成一页" - }, - "scalePages": { - "title": "调整页面尺寸/缩放", - "desc": "调整页面及/或其内容的尺寸/缩放" - }, - "pipeline": { - "title": "流水线(高级版)", - "desc": "通过定义流水线脚本在 PDF 上运行多个操作" - }, - "add-page-numbers": { - "title": "添加页码", - "desc": "在文档的指定位置添加页码" - }, - "auto-rename": { - "title": "自动重命名 PDF 文件", - "desc": "根据检测到的标题自动对 PDF 文件进行重命名" - }, - "adjust-contrast": { - "title": "调整颜色/对比度", - "desc": "调整 PDF 的对比度、饱和度和亮度" - }, - "crop": { - "title": "裁剪 PDF", - "desc": "裁剪 PDF 以减小其文件大小(保留文本!)" - }, - "autoSplitPDF": { - "title": "自动拆分页面", - "desc": "使用物理扫描页面分割器 QR 代码自动拆分扫描的 PDF" - }, - "sanitizePdf": { - "title": "清理", - "desc": "从 PDF 文件中删除脚本和其他元素" - }, - "URLToPDF": { - "title": "URL/网站转 PDF", - "desc": "将任何 http(s)URL 转换为PDF" - }, - "HTMLToPDF": { - "title": "HTML 转 PDF", - "desc": "将任何 HTML 文件或 zip 文件转换为 PDF" - }, - "MarkdownToPDF": { - "title": "Markdown 转 PDF", - "desc": "将任何 Markdown 文件转换为 PDF" - }, - "PDFToMarkdown": { - "title": "PDF 转 Markdown", - "desc": "将任何pdf文件转换为Markdown文件" - }, - "getPdfInfo": { - "title": "获取 PDF 的所有信息", - "desc": "获取 PDF 的所有可能的信息" - }, - "extractPage": { - "title": "提取页面", - "desc": "从 PDF 中提取选定的页面" - }, - "PdfToSinglePage": { - "title": "PDF 转单一大页", - "desc": "将所有 PDF 页面合并为一个大的单页" - }, - "showJS": { - "title": "显示 JavaScript", - "desc": "搜索并显示嵌入到 PDF 中的任何 JavaScript 代码" - }, - "autoRedact": { - "title": "自动删除", - "desc": "根据输入文本自动删除(覆盖)PDF 中的文本" - }, - "redact": { - "title": "手动修订", - "desc": "根据选定的文本、绘制的形状和/或选定的页面编辑PDF" - }, - "tableExtraxt": { - "title": "PDF 转 CSV", - "desc": "从 PDF 中提取表格并将其转换为 CSV" - }, - "autoSizeSplitPDF": { - "title": "自动根据大小/数目拆分 PDF", - "desc": "将单个 PDF 拆分为多个文档,基于大小、页数或文档数" - }, - "overlay-pdfs": { - "title": "叠加 PDF", - "desc": "将 PDF 叠加在另一个 PDF 上" - }, - "split-by-sections": { - "title": "拆分 PDF 成小块", - "desc": "将 PDF 的每一页分割成更小的水平和垂直的部分" - }, - "AddStampRequest": { - "title": "添加图章", - "desc": "在指定位置添加文本或图片图章" - }, - "removeImagePdf": { - "title": "删除图像", - "desc": "删除图像减少 PDF 大小" - }, - "splitPdfByChapters": { - "title": "按章节拆分 PDF", - "desc": "根据其章节结构将 PDF 拆分为多个文件。" - }, - "validateSignature": { - "title": "验证 PDF 签名", - "desc": "验证 PDF 文档中的数字签名和证书" - }, - "replaceColorPdf": { - "title": "替换和反转颜色", - "desc": "替换 PDF 中文本和背景的颜色,并将PDF全色反转以减小文件大小" - } - }, - "viewPdf": { - "tags": "浏览、阅读、注释、文本、图像", - "title": "View/Edit PDF", - "header": "浏览 PDF" - }, - "multiTool": { - "tags": "多工具,多操作,用户界面,点击拖动,前端,客户端", - "title": "PDF 多功能工具", - "header": "PDF 多功能工具", - "uploadPrompts": "文件名", - "selectAll": "选择所有", - "deselectAll": "取消选择所有", - "selectPages": "Page Select", - "selectedPages": "已选择的页面", - "page": "Page", - "deleteSelected": "删除已选", - "downloadAll": "导出全部", - "downloadSelected": "导出已选", - "insertPageBreak": "插入分页符", - "addFile": "添加文件", - "rotateLeft": "向左旋转", - "rotateRight": "向右旋转", - "split": "分割", - "moveLeft": "向做移动", - "moveRight": "向右移动", - "delete": "删除", - "dragDropMessage": "选择页面", - "undo": "Undo", - "redo": "Redo" - }, - "merge": { - "tags": "合并,页面操作,后端,服务器端", - "title": "合并", - "header": "合并多个 PDF(2个以上)。", - "sortByName": "按名称排序", - "sortByDate": "按日期排序", - "removeCertSign": "删除合并文件的数字签名吗?", - "submit": "合并" - }, - "split": { - "tags": "页面操作,划分,多页面,剪切,服务器端", - "title": "拆分 PDF", - "header": "拆分 PDF", - "desc": { - "1": "选择希望进行分割的页数", - "2": "如选择1,3,7-9将把一个 10 页的文件分割成6个独立的PDF:", - "3": "文档 #1:第 1 页", - "4": "文档 #2:第 2 页和第 3 页", - "5": "文档 #3:第 4 页、第 5 页、第 6 页和第 7 页", - "6": "文档 #4:第 7 页", - "7": "文档 #5:第 8 页", - "8": "文档 #6:第 9 页和第 10 页" - }, - "splitPages": "输入要分割的页面:", - "submit": "拆分" - }, - "rotate": { - "tags": "服务器端", - "title": "旋转 PDF", - "header": "旋转 PDF", - "selectAngle": "选择旋转角度(以 90 度的倍数):", - "submit": "旋转" - }, - "imageToPdf": { - "tags": "转换、图像、JPG、图片、照片" - }, - "pdfToImage": { - "tags": "转换、图像、JPG、图片、照片", - "title": "PDF 转图片", - "header": "将 PDF 转换为图片", - "selectText": "图像格式", - "singleOrMultiple": "图像结果类型", - "single": "单张图片", - "multi": "多张图片", - "colorType": "颜色类型", - "color": "颜色", - "grey": "灰度", - "blackwhite": "黑白(可能会丢失数据!)。", - "submit": "转换", - "info": "WebP 转换需要安装 Python", - "placeholder": "(例如:1,2,8 或 4,7,12-16 或 2n-1)" - }, - "pdfOrganiser": { - "tags": "双面、偶数、奇数、排序、移动", - "title": "页面排序", - "header": "PDF 页面排序", - "submit": "重新排列页面", - "mode": { - "_value": "模式", - "1": "自定义页面顺序", - "2": "反向顺序", - "3": "双面排序", - "4": "小册子排序", - "5": "侧装订小册子排序", - "6": "奇偶拆分", - "7": "删除第一页", - "8": "删除最后一页", - "9": "删除第一页和最后一页", - "10": "奇偶合并", - "11": "Duplicate all pages" - }, - "placeholder": "(例如:1,3,2 或 4-8,2,10-12 或 2n-1)" - }, - "addImage": { - "tags": "图像、JPG、图片、照片", - "title": "添加图像", - "header": "添加图片到 PDF", - "everyPage": "每一页?", - "upload": "添加图片", - "submit": "添加图片" - }, - "watermark": { - "tags": "文本、重复、标签、自定义、版权、商标、图像、JPG、图片、照片", - "title": "添加水印", - "header": "添加水印", - "customColor": "自定义文本颜色", - "selectText": { - "1": "选择要添加水印的 PDF:", - "2": "水印文本:", - "3": "字体大小:", - "4": "旋转(0-360):", - "5": "水平间距(每个水印之间的水平距离):", - "6": "垂直间距(每个水印之间的垂直距离):", - "7": "透明度(0% - 100%):", - "8": "水印类型:", - "9": "水印图片:", - "10": "将 PDF 转换为 PDF-Image" - }, - "submit": "添加水印", - "type": { - "1": "文字", - "2": "图片" - } - }, - "permissions": { - "tags": "阅读、写入、编辑、打印", - "title": "更改权限", - "header": "改变权限", - "warning": "警告,为了使这些权限不能被改变,建议通过添加密码页面设置密码。", - "selectText": { - "1": "选择 PDF 来改变权限", - "2": "要设置的权限", - "3": "防止文件的拼接", - "4": "防止内容提取", - "5": "防止提取内容的可访问性", - "6": "防止填写表格", - "7": "防止修改", - "8": "防止修改注释", - "9": "防止打印", - "10": "防止打印不同的格式" - }, - "submit": "改变" - }, - "removePages": { - "tags": "删除页面、删除" - }, - "addPassword": { - "tags": "安全、密码、加密", - "title": "添加密码", - "header": "添加密码(加密)。", - "selectText": { - "1": "选择要加密的 PDF。", - "2": "密码", - "3": "加密密钥长度", - "4": "值越高越强,但值越低兼容性越好。", - "5": "要设置的权限", - "6": "防止文件的拼接。", - "7": "防止内容提取", - "8": "防止为可访问性提取内容", - "9": "防止填写表格", - "10": "防止修改", - "11": "防止修改注释", - "12": "防止打印", - "13": "防止打印不同的格式", - "14": "所有者密码", - "15": "限制打开后对文档的操作(不被所有阅读器支持)", - "16": "限制打开文档本身" - }, - "submit": "加密" - }, - "removePassword": { - "tags": "安全、解密、密码、安全性、删除密码", - "title": "删除密码", - "header": "移除密码(解密)。", - "selectText": { - "1": "选择要解密的 PDF", - "2": "密码" - }, - "submit": "删除" - }, - "compressPdfs": { - "tags": "压缩、小、微小" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "标题、作者、日期、创建、时间、发布者、制作人、统计数据", - "title": "标题:", - "header": "更改元数据", - "selectText": { - "1": "请编辑你想要改变的变量。", - "2": "删除所有元数据", - "3": "显示自定义元数据:", - "4": "其他元数据:", - "5": "添加自定义元数据条目" - }, - "author": "作者:", - "creationDate": "创建日期(yyyy/MM/dd HH:mm:ss):", - "creator": "创建者:", - "keywords": "关键词:", - "modDate": "修改日期(yyyy/MM/dd HH:mm:ss):", - "producer": "生产者:", - "subject": "主题:", - "trapped": "被困:", - "submit": "更改" - }, - "fileToPDF": { - "tags": "转换、格式、文档、图片、幻灯片、文本、转换、Office、Docs、Word、Excel、PowerPoint", - "title": "文件转换为 PDF", - "header": "将任何文件转换为 PDF。", - "credit": "此服务使用 LibreOffice 和 Unoconv 进行文件转换。", - "supportedFileTypesInfo": "支持的文件类型", - "supportedFileTypes": "支持的文件类型应该包括以下几种,但是,对于支持的格式的完整更新列表,请参考 LibreOffice 文档。", - "submit": "转换为 PDF" - }, - "ocr": { - "tags": "识别、文本、图像、扫描、阅读、识别、检测、可编辑", - "title": "OCR/扫描清理", - "header": "清理扫描件/OCR(光学字符识别)。", - "selectText": { - "1": "选择要在 PDF 中检测的语言(列出的语言是目前检测到的):", - "2": "生成包含 OCR 文本的文本文件,与 OCR 编辑的 PDF 一起。", - "3": "通过将页面旋转回原位来纠正偏斜的扫描角度", - "4": "清理页面,降低 OCR 在噪点中识别到文本的可能。(没有输出变化)", - "5": "清洁页面,降低 OCR 在噪点中识别到文本的可能,保持输出的清洁。", - "6": "忽略有交互式文本的页面,只对有图像的页面进行 OCR。", - "7": "强制 OCR,将 OCR 每个页面,删除所有的原始文本元素。", - "8": "正常 (如果 PDF 包含文本,将出现错误)", - "9": "额外设置", - "10": "OCR 模式", - "11": "OCR 后移除图像(移除所有图像,只有在转换步骤中才有用)。", - "12": "渲染类型(高级)" - }, - "help": "请阅读此文档,了解如何将其用于其他语言和/或不在 docker 中使用。", - "credit": "此服务使用 qpdf 和 Tesseract 进行 OCR。", - "submit": "用 OCR 处理 PDF" - }, - "extractImages": { - "tags": "图片、照片、保存、归档、压缩包、截取、抓取", - "title": "提取图像", - "header": "提取图像", - "selectText": "选择图像格式,将提取的图像转换为", - "allowDuplicates": "保存重复图像", - "submit": "提取" - }, - "pdfToPDFA": { - "tags": "归档、长期、标准、转换、存储、保存", - "title": "PDF 转 PDF/A", - "header": "将 PDF 转换为 PDF/A", - "credit": "此服务使用 libreoffice 进行 PDF/A 转换", - "submit": "转换", - "tip": "目前不支持上传多个", - "outputFormat": "输出格式", - "pdfWithDigitalSignature": "该PDF包含数字签名,下一步将移除该签名。" - }, - "PDFToWord": { - "tags": "doc、docx、odt、word、转换、格式、Office、Microsoft、文档", - "title": "PDF 转 Word", - "header": "将 PDF 转换为 Word", - "selectText": { - "1": "输出文件格式" - }, - "credit": "此服务使用 LibreOffice 进行文件转换。", - "submit": "转换" - }, - "PDFToPresentation": { - "tags": "幻灯片、展示、Office、Microsoft", - "title": "PDF 转演示文稿", - "header": "将 PDF 转换为演示文稿", - "selectText": { - "1": "输出文件格式" - }, - "credit": "此服务使用 LibreOffice 进行文件转换。", - "submit": "转换" - }, - "PDFToText": { - "tags": "富文本格式、RTF、富文本格式", - "title": "PDF 转文本/RTF", - "header": "将 PDF 转换为文本/RTF", - "selectText": { - "1": "输出文件格式" - }, - "credit": "此服务使用 LibreOffice 进行文件转换。", - "submit": "转换" - }, - "PDFToHTML": { - "tags": "网页内容、浏览器友好", - "title": "PDF 转 HTML", - "header": "将 PDF 转换为 HTML", - "credit": "此服务使用 pdftohtml 进行文件转换。", - "submit": "转换" - }, - "PDFToXML": { - "tags": "数据提取、结构化内容、互操作、转换", - "title": "PDF 转 XML", - "header": "将 PDF 转换为 XML", - "credit": "此服务使用 LibreOffice 进行文件转换。", - "submit": "转换" - }, - "ScannerImageSplit": { - "tags": "分离、自动检测、扫描、多张照片、整理", - "selectText": { - "1": "角度阈值:", - "2": "设置图像被旋转所需的最小绝对角度(默认:10)。", - "3": "公差:", - "4": "确定估计背景颜色周围的颜色变化范围(默认值:30)。", - "5": "最小面积:", - "6": "设置照片的最小面积阈值(默认:10000)。", - "7": "最小轮廓面积:", - "8": "设置照片的最小轮廓面积阈值。", - "9": "边框尺寸:", - "10": "设置添加和删除的边框大小,以防止输出中出现白边(默认值:1)。" - }, - "info": "此功能需要安装 Python" - }, - "sign": { - "tags": "授权、缩写、手绘签名、文本签名、图像签名", - "title": "签名", - "header": "签署 PDF", - "upload": "上传图片", - "draw": "绘制签名", - "text": "文本输入", - "clear": "清除", - "add": "添加", - "saved": "已保存签名", - "save": "保存签名", - "personalSigs": "个人签名", - "sharedSigs": "共享签名", - "noSavedSigs": "未找到已保存的签名", - "addToAll": "添加到所有页面", - "delete": "删除", - "first": "首页", - "last": "末页", - "next": "下一页", - "previous": "上一页", - "maintainRatio": "切换保持长宽比", - "undo": "撤销", - "redo": "重做" - }, - "flatten": { - "tags": "静态、停用、非交互、简化", - "title": "展平", - "header": "展平 PDF", - "flattenOnlyForms": "仅展平表格", - "submit": "展平" - }, - "repair": { - "tags": "修复、恢复、纠正、恢复", - "title": "修复", - "header": "修复 PDF", - "submit": "修复" - }, - "removeBlanks": { - "tags": "清理、简化、非内容、整理", - "title": "删除空白", - "header": "删除空白页", - "threshold": "阈值:", - "thresholdDesc": "确定白色像素必须有多白的阈值", - "whitePercent": "白色百分比(%):", - "whitePercentDesc": "必须为白色才能删除的页面百分比", - "submit": "删除空白" - }, - "removeAnnotations": { - "tags": "评论、高亮、笔记、标注、删除", - "title": "删除标注", - "header": "删除标注", - "submit": "删除" - }, - "compare": { - "tags": "区分、对比、更改、分析", - "title": "比较", - "header": "比较PDF", - "highlightColor": { - "1": "高亮颜色 1:", - "2": "高亮颜色 2:" - }, - "document": { - "1": "文档 1", - "2": "文档 2" - }, - "submit": "比较", - "complex": { - "message": "提供的一份或两份文件是大文件,比较的准确性可能会降低。" - }, - "large": { - "file": { - "message": "提供的文件中有一份或两份过大,无法处理。" - } - }, - "no": { - "text": { - "message": "所选的 PDF 文件中有一个或两个没有文本内容。请选择包含文本的 PDF 文件进行对比。" - } - } - }, - "certSign": { - "tags": "身份验证、PEM、P12、官方、加密", - "title": "证书签名", - "header": "使用您的证书签名 PDF(进行中)", - "selectPDF": "选择要签名的 PDF 文件:", - "jksNote": "注意:如果您的证书类型未在下面列出,请使用keytool命令行工具将其转换为 Java Keystore(.jks)文件。 然后,选择下面的.jks文件选项。", - "selectKey": "选择您的私钥文件(PKCS#8格式,可以是.pem或.der):", - "selectCert": "选择您的证书文件(X.509格式,可以是.pem或.der):", - "selectP12": "选择您的 PKCS#12 密钥库文件(.p12或.pfx)(可选,如果提供,它应该包含您的私钥和证书):", - "selectJKS": "选择你的 Java Keystore 文件 (.jks或.keystore):", - "certType": "证书类型", - "password": "输入您的密钥库或私钥密码(如果有):", - "showSig": "显示签名", - "reason": "原因", - "location": "位置", - "name": "名称", - "showLogo": "显示 Logo", - "submit": "给 PDF 签名" - }, - "removeCertSign": { - "tags": "身份验证、PEM、P12、官方、加密", - "title": "移除证书签名", - "header": "移除 PDF 的证书签名", - "selectPDF": "选择 PDF 文件:", - "submit": "移除签名" - }, - "pageLayout": { - "tags": "合并、组合、单视图、整理", - "title": "多页布局", - "header": "多页布局", - "pagesPerSheet": "每页的页面数:", - "addBorder": "添加边框", - "submit": "提交" - }, - "scalePages": { - "tags": "调整大小、修改、尺寸、适应", - "title": "调整页面缩放比例", - "header": "调整页面缩放比例", - "pageSize": "文档页面的尺寸。", - "keepPageSize": "保持页面原尺寸", - "scaleFactor": "页面的缩放级别(裁剪)。", - "submit": "提交" - }, - "add-page-numbers": { - "tags": "分页、标签、整理、索引" - }, - "auto-rename": { - "tags": "自动检测、基于标题、整理、重新标记", - "title": "自动重命名", - "header": "自动重命名 PDF", - "submit": "自动重命名" - }, - "adjust-contrast": { - "tags": "颜色校正、调节、修改、增强" - }, - "crop": { - "tags": "修剪、缩小、编辑、形状", - "title": "裁剪", - "header": "裁剪 PDF", - "submit": "提交" - }, - "autoSplitPDF": { - "tags": "基于 QR 码、分离、扫描分割、整理", - "title": "自动拆分 PDF", - "header": "自动拆分 PDF", - "description": "打印、插入、扫描、上传,让我们自动分离您的文档。无需手动排序。", - "selectText": { - "1": "从下面打印一些分隔页(黑白打印即可)。", - "2": "在文档之间插入分隔页,一次性扫描所有文档。", - "3": "上传单个大型扫描的 PDF 文件,让 Stirling PDF 处理剩下的事情。", - "4": "分隔页会自动检测和删除,确保最终文档整洁。" - }, - "formPrompt": "提交包含 Stirling-PDF 分隔页的 PDF:", - "duplexMode": "双面模式(正反面扫描)", - "dividerDownload2": "下载“自动拆分分隔页(带指导说明).pdf”", - "submit": "提交" - }, - "sanitizePdf": { - "tags": "清理、安全、安全、删除威胁" - }, - "URLToPDF": { - "tags": "网页捕获、保存网页、网页转文档、归档", - "title": "URL 转 PDF", - "header": "将 URL 转换为 PDF", - "submit": "转换", - "credit": "此服务使用 WeasyPrint 进行文件转换。" - }, - "HTMLToPDF": { - "tags": "标记、网页内容、转换、转换", - "title": "HTML 转 PDF", - "header": "将 HTML 转换为 PDF", - "help": "接受 HTML 文件和包含所需的 html/css/images 等的 ZIP 文件", - "submit": "转换", - "credit": "此服务使用 WeasyPrint 进行文件转换。", - "zoom": "网站显示缩放级别", - "pageWidth": "页面宽度-以厘米为单位(填空则使用默认值)", - "pageHeight": "页面高度-以厘米为单位(填空则使用默认值)", - "marginTop": "页面上边距-以毫米为单位(填空则使用默认值)", - "marginBottom": "页面下边距-以毫米为单位(填空则使用默认值)", - "marginLeft": "页面左上边距-以毫米为单位(填空则使用默认值)", - "marginRight": "页面右边距-以毫米为单位(填空则使用默认值)", - "printBackground": "页面背景渲染", - "defaultHeader": "启用默认页头(文件名称和页码)", - "cssMediaType": "更换页面的 CSS 媒体类型。", - "none": "无", - "print": "打印", - "screen": "屏幕" - }, - "MarkdownToPDF": { - "tags": "标记、网页内容、转换、转换", - "title": "Markdown 转 PDF", - "header": "将 Markdown 转换为 PDF", - "submit": "转换", - "help": "正在努力中", - "credit": "此服务使用 WeasyPrint 进行文件转换。" - }, - "PDFToMarkdown": { - "tags": "标记,网页内容,转换,转档,md", - "title": "PDF转Markdown", - "header": "PDF转Markdown", - "submit": "转换" - }, - "getPdfInfo": { - "tags": "信息、数据、统计、统计数据", - "title": "获取 PDF 信息", - "header": "获取 PDF 信息", - "submit": "获取信息", - "downloadJson": "下载 JSON" - }, - "extractPage": { - "tags": "提取" - }, - "PdfToSinglePage": { - "tags": "单页" - }, - "showJS": { - "tags": "JavaScript", - "title": "显示 JavaScript", - "header": "显示 JavaScript", - "downloadJS": "下载 JavaScript", - "submit": "显示" - }, - "autoRedact": { - "tags": "脱敏、隐藏、涂黑、标记、不可见", - "title": "自动删除", - "header": "自动删除", - "colorLabel": "颜色", - "textsToRedactLabel": "要删除的文本(每行一个)", - "textsToRedactPlaceholder": "例如:\\n保密\\n绝密", - "useRegexLabel": "使用正则表达式", - "wholeWordSearchLabel": "全字匹配", - "customPaddingLabel": "自定义额外间距", - "convertPDFToImageLabel": "将PDF转换为PDF-Image(用于删除方框后面的文本)", - "submitButton": "提交" - }, - "redact": { - "tags": "涂改,隐藏,涂黑,黑色,标记,遮蔽,手动", - "title": "手动纠正", - "header": "手动纠正", - "submit": "纠正", - "textBasedRedaction": "基于文本的纠正", - "pageBasedRedaction": "基于页面的纠正", - "convertPDFToImageLabel": "将PDF转换为PDF图像(用于删除框后的文本)", - "pageRedactionNumbers": { - "title": "页面", - "placeholder": "(例如 1,2,8 或 4,7,12-16 或 2n-1)" - }, - "redactionColor": { - "title": "编辑颜色" - }, - "export": "导出", - "upload": "上传", - "boxRedaction": "框选区域涂黑", - "zoom": "缩放", - "zoomIn": "放大", - "zoomOut": "缩小", - "nextPage": "下一页", - "previousPage": "上一页", - "toggleSidebar": "切换侧边栏", - "showThumbnails": "显示缩略图", - "showDocumentOutline": "显示文档大纲(双击展开/折叠所有项目)", - "showAttatchments": "显示附件", - "showLayers": "显示图层(双击将所有图层重置为默认状态)", - "colourPicker": "颜色选择器", - "findCurrentOutlineItem": "查找当前大纲项目", - "applyChanges": "应用" - }, - "tableExtraxt": { - "tags": "CSV、表格提取、提取、转换" - }, - "autoSizeSplitPDF": { - "tags": "pdf、拆分、文件、组织" - }, - "overlay-pdfs": { - "tags": "叠加", - "header": "叠加 PDF 文件", - "baseFile": { - "label": "选择基础 PDF 文件" - }, - "overlayFiles": { - "label": "选择需要叠加在基础上的 PDF 文件" - }, - "mode": { - "label": "选择叠加模式", - "sequential": "按顺序叠加", - "interleaved": "交错叠加", - "fixedRepeat": "固定重复叠加" - }, - "counts": { - "label": "叠加次数(仅限固定重复叠加模式)", - "placeholder": "输入用逗号分隔的次数(例如:2,3,1)" - }, - "position": { - "label": "选择叠加位置", - "foreground": "前面(上面)", - "background": "后面(下面)" - }, - "submit": "提交" - }, - "split-by-sections": { - "tags": "章节拆分、分割、自定义", - "title": "按照块(Section)拆分 PDF", - "header": "将 PDF 拆分成块", - "horizontal": { - "label": "水平分割", - "placeholder": "输入水平分割数" - }, - "vertical": { - "label": "垂直分割", - "placeholder": "输入垂直分割数" - }, - "submit": "分割 PDF", - "merge": "是否合并为一个 pdf" - }, - "AddStampRequest": { - "tags": "图章、添加图片、图片居中、水印、PDF、嵌入、自定义", - "header": "添加图章", - "title": "添加图章", - "stampType": "图章类型", - "stampText": "图章文字", - "stampImage": "图章图片", - "alphabet": "字母表", - "fontSize": "字体/图片大小", - "rotation": "旋转角度", - "opacity": "透明度", - "position": "定位", - "overrideX": "覆盖X坐标", - "overrideY": "覆盖Y坐标", - "customMargin": "自定义外边距", - "customColor": "自定义文本颜色", - "submit": "提交" - }, - "removeImagePdf": { - "tags": "删除图像, 页面操作, 后端, 服务端" - }, - "splitPdfByChapters": { - "tags": "分割,章节,书签,组织" - }, - "validateSignature": { - "tags": "签名,验证,验证,PDF,证书,数字签名,验证签名,验证证书", - "title": "验证pdf签名", - "header": "验证数字签名", - "selectPDF": "选择已签名的pdf文件", - "submit": "验证签名", - "results": "验证结果", - "status": { - "_value": "状态", - "valid": "有效", - "invalid": "无效" - }, - "signer": "签署者", - "date": "日期", - "reason": "原因", - "location": "位置", - "noSignatures": "此文件中未找到电子签名", - "chain": { - "invalid": "证书链验证失败 - 无法验证签名者的身份" - }, - "trust": { - "invalid": "证书不在信任存储区中 - 无法验证来源" - }, - "cert": { - "expired": "凭证已过期", - "revoked": "凭证已被撤销", - "info": "凭证信息", - "issuer": "发行者", - "subject": "主题", - "serialNumber": "序列号", - "validFrom": "有效期自", - "validUntil": "有效期至", - "algorithm": "算法", - "keySize": "密钥长度", - "version": "版本", - "keyUsage": "密钥用途", - "selfSigned": "自签名", - "bits": "比特" - }, - "signature": { - "info": "签名信息", - "_value": "签名", - "mathValid": "签名在数学上有效,但:" - }, - "selectCustomCert": "X.509 自签名证书(可选)" - }, - "replace-color": { - "title": "替换-反转-颜色", - "header": "替换-反转 PDF 颜色", - "selectText": { - "1": "替换或反转颜色选项", - "2": "默认(默认高对比度颜色)", - "3": "定制(定制的颜色)", - "4": "全反转(反转所有颜色)", - "5": "高对比度颜色选项", - "6": "黑底白字", - "7": "白底黑字", - "8": "黑底黄字", - "9": "黑底绿字", - "10": "选择文本颜色", - "11": "选择背景颜色" - }, - "submit": "取代" - }, - "replaceColorPdf": { - "tags": "更换颜色,页面操作,后端,服务器端" - }, - "login": { - "title": "登录", - "header": "登录", - "signin": "登录", - "rememberme": "记住我", - "invalid": "用户名或密码无效。", - "locked": "您的账户已被锁定。", - "signinTitle": "请登录", - "ssoSignIn": "通过单点登录登录", - "oAuth2AutoCreateDisabled": "OAuth2 自动创建用户已禁用", - "oAuth2AdminBlockedUser": "目前已阻止未注册用户的注册或登录。请联系管理员。", - "oauth2RequestNotFound": "找不到验证请求", - "oauth2InvalidUserInfoResponse": "无效的用户信息响应", - "oauth2invalidRequest": "无效请求", - "oauth2AccessDenied": "拒绝访问", - "oauth2InvalidTokenResponse": "无效的 Token 响应", - "oauth2InvalidIdToken": "无效的 Token", - "relyingPartyRegistrationNotFound": "No relying party registration found", - "userIsDisabled": "用户被禁用,登录已被阻止。请联系管理员。", - "alreadyLoggedIn": "您已经登录到了", - "alreadyLoggedIn2": "设备,请注销设备后重试。", - "toManySessions": "你已经有太多的会话了。请注销一些设备后重试。", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF 转单页", - "header": "将 PDF 转换为单页", - "submit": "转为单页" - }, - "pageExtracter": { - "title": "提取页面", - "header": "提取页面", - "submit": "提取", - "placeholder": "(例如:1,2,8 或 4,7,12-16 或 2n-1)" - }, - "sanitizePDF": { - "title": "清理 PDF", - "header": "清理 PDF 文件", - "selectText": { - "1": "移除 JavaScript 操作", - "2": "移除嵌入的文件", - "3": "Remove XMP metadata", - "4": "移除链接", - "5": "移除字体", - "6": "Remove Document Info Metadata" - }, - "submit": "清理PDF" - }, - "adjustContrast": { - "title": "调整对比度", - "header": "调整对比度", - "contrast": "对比度:", - "brightness": "亮度:", - "saturation": "饱和度:", - "download": "下载" - }, - "compress": { - "title": "压缩", - "header": "压缩 PDF", - "credit": "此服务使用qpdf进行 PDF 压缩/优化。", - "grayscale": { - "label": "应用灰度进行压缩" - }, - "selectText": { - "1": { - "_value": "Compression Settings", - "1": "1-3 PDF compression,
4-6 lite image compression,
7-9 intense image compression Will dramatically reduce image quality" - }, - "2": "优化级别:", - "4": "自动模式 - 自动调整质量以获得精确大小的PDF", - "5": "预期PDF大小(例如:25MB、10.8MB、25KB)" - }, - "submit": "压缩" - }, - "decrypt": { - "passwordPrompt": "此文件受密码保护。请输入密码:", - "cancelled": "PDF 操作已取消: {0}", - "noPassword": "未提供加密 PDF 的密码: {0}", - "invalidPassword": "请使用正确的密码重试。", - "invalidPasswordHeader": "密码错误或不支持的 PDF 加密: {0}", - "unexpectedError": "处理文件时发生错误。请再试一次。", - "serverError": "服务器解密时发生错误: {0}", - "success": "文件解密成功。" - }, - "multiTool-advert": { - "message": "此功能也适用于我们的“多功能工具页面”。查看它以获得增强的逐页 UI 以及其他功能!" - }, - "pageRemover": { - "title": "删除页面", - "header": "PDF 页面移除器", - "pagesToDelete": "要删除的页面(输入一个用逗号分隔的页码列表):", - "submit": "删除页面", - "placeholder": "(例如:1,2,6 或 1-10,15-30)" - }, - "imageToPDF": { - "title": "图片转 PDF", - "header": "将图片转换为 PDF", - "submit": "转换", - "selectLabel": "图片适应选项", - "fillPage": "填充页面", - "fitDocumentToImage": "适应图片大小", - "maintainAspectRatio": "保持纵横比例", - "selectText": { - "2": "自动旋转 PDF", - "3": "多文件逻辑(仅在处理多个图像时启用)", - "4": "合并成一个 PDF 文件", - "5": "转换为独立的 PDF 文件" - } - }, - "PDFToCSV": { - "title": "PDF 转 CSV", - "header": "将 PDF 转换为 CSV", - "prompt": "选择需要提取表格的页面", - "submit": "提取" - }, - "split-by-size-or-count": { - "title": "按照大小或数目拆分 PDF", - "header": "按照大小或数目拆分 PDF", - "type": { - "label": "选择拆分类型", - "size": "按照大小", - "pageCount": "按照页数", - "docCount": "按照文档数" - }, - "value": { - "label": "输入数值", - "placeholder": "输入大小(例如:2MB或3KB)或数目(例如:5)" - }, - "submit": "提交" - }, - "printFile": { - "title": "打印文件", - "header": "使用打印机打印文件", - "selectText": { - "1": "选择要打印的文件", - "2": "输入打印机名称" - }, - "submit": "打印" - }, - "licenses": { - "nav": "许可证", - "title": "第三方许可证", - "header": "第三方许可证", - "module": "模块", - "version": "版本", - "license": "许可证" - }, - "survey": { - "nav": "问卷调查", - "title": "Stirling-PDF 问卷调查", - "description": "Stirling-PDF 没有跟踪器,所以我们希望听取用户的意见来改进 Stirling-PDF!", - "changes": "自上次调查以来,Stirling-PDF 已经发生了变化!要了解更多信息,请在此处查看我们的博客文章:", - "changes2": "通过这些变化,我们得到了商业支持和资金援助。", - "please": "请考虑参加我们的调查!", - "disabled": "(调查弹出窗口将在后续更新中被禁用,但可在页脚处查看)", - "button": "参与调查", - "dontShowAgain": "不再显示", - "meeting": { - "1": "If you're using Stirling PDF at work, we'd love to speak to you. We're offering technical support sessions in exchange for a 15 minute user discovery session.", - "2": "This is a chance to:", - "3": "Get help with deployment, integrations, or troubleshooting", - "4": "Provide direct feedback on performance, edge cases, and feature gaps", - "5": "Help us refine Stirling PDF for real-world enterprise use", - "6": "If you're interested, you can book time with our team directly. (English speaking only)", - "7": "Looking forward to digging into your use cases and making Stirling PDF even better!", - "notInterested": "Not a business and/or interested in a meeting?", - "button": "Book meeting" - } - }, - "removeImage": { - "title": "删除图像", - "header": "删除图像", - "removeImage": "删除图像", - "submit": "删除图像" - }, - "splitByChapters": { - "title": "按章节拆分 PDF", - "header": "按章节拆分 PDF", - "bookmarkLevel": "书签级别", - "includeMetadata": "包含元数据", - "allowDuplicates": "允许重复", - "desc": { - "1": "此工具根据章节结构将PDF文件拆分为多个PDF。", - "2": "书签级别:选择用于拆分的书签级别(0表示顶级,1表示二级等)。", - "3": "包含元数据:如果选中,原始PDF的元数据将包含在每个拆分的PDF中。", - "4": "允许重复:如果选中,允许同一页面上的多个书签创建单独的PDF。" - }, - "submit": "拆分 PDF" - }, - "fileChooser": { - "click": "单击", - "or": "或", - "dragAndDrop": "拖放文件", - "dragAndDropPDF": "拖放PDF文件", - "dragAndDropImage": "拖放图片文件", - "hoveredDragAndDrop": "拖放文件到此处", - "extractPDF": "处理中..." - }, - "releases": { - "footer": "版本", - "title": "版本说明", - "header": "版本说明", - "current": { - "version": "当前版本" - }, - "note": "版本说明仅提供英文版本" - }, - "cookieBanner": { - "popUp": { - "title": "How we use Cookies", - "description": { - "1": "We use cookies and other technologies to make Stirling PDF work better for you—helping us improve our tools and keep building features you'll love.", - "2": "If you’d rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly." - }, - "acceptAllBtn": "Okay", - "acceptNecessaryBtn": "No Thanks", - "showPreferencesBtn": "Manage preferences" - }, - "preferencesModal": { - "title": "Consent Preferences Center", - "acceptAllBtn": "Accept all", - "acceptNecessaryBtn": "Reject all", - "savePreferencesBtn": "Save preferences", - "closeIconLabel": "Close modal", - "serviceCounterLabel": "Service|Services", - "subtitle": "Cookie Usage", - "description": { - "1": "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users.", - "2": "Stirling PDF cannot—and will never—track or access the content of the documents you use.", - "3": "Your privacy and trust are at the core of what we do." - }, - "necessary": { - "title": { - "1": "Strictly Necessary Cookies", - "2": "Always Enabled" - }, - "description": "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms—which is why they can’t be turned off." - }, - "analytics": { - "title": "Analytics", - "description": "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured—Stirling PDF cannot and will never track the content of the documents you work with." - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/locales/zh-TW/translation.json b/frontend/dist/locales/zh-TW/translation.json deleted file mode 100644 index 43d456623..000000000 --- a/frontend/dist/locales/zh-TW/translation.json +++ /dev/null @@ -1,1561 +0,0 @@ -{ - "language": { - "direction": "ltr" - }, - "addPageNumbers": { - "fontSize": "字型大小", - "fontName": "字型名稱", - "title": "新增頁碼", - "header": "新增頁碼", - "selectText": { - "1": "選擇 PDF 檔案:", - "2": "邊距大小", - "3": "位置", - "4": "起始號碼", - "5": "要編號的頁面", - "6": "自訂文字" - }, - "customTextDesc": "自訂文字", - "numberPagesDesc": "要編號的頁面,預設為 '全部',也可使用 1-5 或 2,5,9 等格式", - "customNumberDesc": "預設為 {n},也接受 '頁面 {n} 共 {total}','文字-{n}','{filename}-{n}'", - "submit": "新增頁碼" - }, - "pdfPrompt": "選擇 PDF 檔案", - "multiPdfPrompt": "選擇多個 PDF 檔案", - "multiPdfDropPrompt": "選擇(或拖放)所有需要的 PDF 檔案", - "imgPrompt": "選擇圖片", - "genericSubmit": "送出", - "uploadLimit": "檔案大小上限:", - "uploadLimitExceededSingular": "太大。允許的最大檔案大小為", - "uploadLimitExceededPlural": "太大。允許的最大檔案大小為", - "processTimeWarning": "警告:此過程可能長達一分鐘,具體取決於檔案大小", - "pageOrderPrompt": "自訂頁面順序(輸入以逗號分隔的頁碼或函式,如 2n+1):", - "pageSelectionPrompt": "自訂頁面選擇(輸入以逗號分隔的頁碼 1、5、6 或 2n+1 等函式的清單):", - "goToPage": "前往", - "true": "是", - "false": "否", - "unknown": "未知", - "save": "儲存", - "saveToBrowser": "儲存到瀏覽器", - "close": "關閉", - "filesSelected": "已選擇的檔案", - "noFavourites": "還沒有功能被收藏", - "downloadComplete": "下載完成", - "bored": "等待時覺得無聊?", - "alphabet": "字母表", - "downloadPdf": "下載 PDF", - "text": "文字", - "font": "字型", - "selectFillter": "-- 選擇 --", - "pageNum": "頁碼", - "sizes": { - "small": "小", - "medium": "中", - "large": "大", - "x-large": "特大" - }, - "error": { - "pdfPassword": "PDF 檔案已加密,但未提供密碼或密碼不正確", - "_value": "錯誤", - "sorry": "很抱歉造成您的困擾!", - "needHelp": "需要協助或發現問題?", - "contactTip": "如果您仍然遇到問題,請不要猶豫,隨時向我們尋求協助。您可以在我們的 GitHub 頁面回報問題,或透過 Discord 跟我們聯絡:", - "404": { - "head": "404 - 找不到頁面 | 糟糕,我們在程式碼中迷路了!", - "1": "我們似乎找不到您正在尋找的頁面。", - "2": "發生了一些錯誤" - }, - "github": "在 GitHub 上回報問題", - "showStack": "顯示堆疊追蹤", - "copyStack": "複製堆疊追蹤", - "githubSubmit": "GitHub - 回報問題", - "discordSubmit": "Discord - 發表支援文章" - }, - "delete": "刪除", - "username": "使用者名稱", - "password": "密碼", - "welcome": "歡迎", - "property": "屬性", - "black": "黑色", - "white": "白色", - "red": "紅色", - "green": "綠色", - "blue": "藍色", - "custom": "自訂...", - "WorkInProgess": "工作正在進行中,可能無法工作或有問題,請報告任何問題!", - "poweredBy": "Powered by", - "yes": "是", - "no": "否", - "changedCredsMessage": "憑證已變更!", - "notAuthenticatedMessage": "使用者未通過驗證。", - "userNotFoundMessage": "找不到使用者。", - "incorrectPasswordMessage": "目前密碼不正確。", - "usernameExistsMessage": "新使用者名稱已存在。", - "invalidUsernameMessage": "無效的使用者名稱。使用者名稱只能包含字母、數字和以下特殊字元 @._+- 或必須是有效的電子郵件地址。", - "invalidPasswordMessage": "密碼不能為空,且開頭和結尾不能有空格。", - "confirmPasswordErrorMessage": "新密碼與確認新密碼必須相符。", - "deleteCurrentUserMessage": "無法刪除目前登入的使用者。", - "deleteUsernameExistsMessage": "使用者名稱不存在,無法刪除。", - "downgradeCurrentUserMessage": "無法降級目前使用者的角色", - "disabledCurrentUserMessage": "無法停用目前使用者", - "downgradeCurrentUserLongMessage": "無法降級目前使用者的角色。因此,將不會顯示目前使用者。", - "userAlreadyExistsOAuthMessage": "使用者已經以 OAuth2 使用者身份存在。", - "userAlreadyExistsWebMessage": "使用者已經以網頁使用者身份存在。", - "oops": "哎呀!", - "help": "說明", - "goHomepage": "前往首頁", - "joinDiscord": "加入我們的 Discord 伺服器", - "seeDockerHub": "造訪 Docker Hub 儲存庫", - "visitGithub": "造訪 GitHub 專案", - "donate": "捐款", - "color": "顏色", - "sponsor": "贊助", - "info": "資訊", - "pro": "專業版", - "page": "頁面", - "pages": "頁面", - "loading": "載入中...", - "addToDoc": "新增至文件", - "reset": "重設", - "apply": "套用", - "noFileSelected": "未選擇檔案,請上傳一個。", - "legal": { - "privacy": "隱私權政策", - "terms": "使用條款", - "accessibility": "無障礙性聲明", - "cookie": "Cookie 政策", - "impressum": "版本說明", - "showCookieBanner": "Cookie 偏好設定" - }, - "pipeline": { - "header": "管道功能選單(測試版)", - "uploadButton": "上傳自訂設定", - "configureButton": "設定", - "defaultOption": "自訂", - "submitButton": "送出", - "help": "管道功能說明", - "scanHelp": "資料夾掃描說明", - "deletePrompt": "您確定要刪除此管道嗎?", - "tags": "自動化,序列,指令碼,批次處理", - "title": "管道" - }, - "pipelineOptions": { - "header": "管道設定", - "pipelineNameLabel": "管道名稱", - "saveSettings": "儲存操作設定", - "pipelineNamePrompt": "請在此輸入管道名稱", - "selectOperation": "選擇操作", - "addOperationButton": "新增操作", - "pipelineHeader": "管道:", - "saveButton": "下載", - "validateButton": "驗證" - }, - "enterpriseEdition": { - "button": "升級至專業版", - "warning": "此功能僅提供給專業版使用者使用。", - "yamlAdvert": "Stirling PDF 專業版支援 YAML 設定檔和其他單一登入 (SSO) 功能。", - "ssoAdvert": "需要更多使用者管理功能嗎?請參考 Stirling PDF 專業版" - }, - "analytics": { - "title": "您想協助改善 Stirling PDF 嗎?", - "paragraph1": "Stirling PDF 有選擇性的分析功能,可幫助我們改進產品。我們不會追蹤任何個人資訊或檔案內容。", - "paragraph2": "請考慮啟用分析功能,以協助 Stirling-PDF 成長並讓我們更了解使用者需求。", - "enable": "啟用分析功能", - "disable": "停用分析功能", - "settings": "您可以在 config/settings.yml 檔案中變更分析功能的設定" - }, - "navbar": { - "favorite": "我的最愛", - "recent": "最新與近期更新", - "darkmode": "深色模式", - "language": "語言", - "settings": "設定", - "allTools": "工具", - "multiTool": "複合工具", - "search": "搜尋", - "sections": { - "organize": "整理", - "convertTo": "轉換為 PDF", - "convertFrom": "從 PDF 轉換", - "security": "簽章與安全性", - "advance": "進階", - "edit": "檢視與編輯", - "popular": "熱門功能" - } - }, - "settings": { - "title": "設定", - "update": "有更新可用", - "updateAvailable": "目前安裝的版本是 {0}。有新版本({1})可供使用。", - "appVersion": "應用程式版本:", - "downloadOption": { - "title": "選擇下載選項(適用於單一檔案非壓縮下載):", - "1": "在同一視窗中開啟", - "2": "在新視窗中開啟", - "3": "下載檔案" - }, - "zipThreshold": "當下載檔案數量超過此數值時,將檔案壓縮", - "signOut": "登出", - "accountSettings": "帳號設定", - "bored": { - "help": "啟用彩蛋遊戲" - }, - "cacheInputs": { - "name": "儲存表單輸入", - "help": "啟用此功能以儲存先前使用的輸入,以便日後使用" - } - }, - "changeCreds": { - "title": "變更憑證", - "header": "更新您的帳號詳細資訊", - "changePassword": "您正在使用預設登入憑證。請輸入新密碼", - "newUsername": "新使用者名稱", - "oldPassword": "目前密碼", - "newPassword": "新密碼", - "confirmNewPassword": "確認新密碼", - "submit": "送出變更" - }, - "account": { - "title": "帳號設定", - "accountSettings": "帳號設定", - "adminSettings": "管理員設定 - 檢視和新增使用者", - "userControlSettings": "使用者控制設定", - "changeUsername": "修改使用者名稱", - "newUsername": "新使用者名稱", - "password": "確認密碼", - "oldPassword": "舊密碼", - "newPassword": "新密碼", - "changePassword": "修改密碼", - "confirmNewPassword": "確認新密碼", - "signOut": "登出", - "yourApiKey": "您的 API 金鑰", - "syncTitle": "將瀏覽器設定與帳號同步", - "settingsCompare": "設定比較:", - "property": "屬性", - "webBrowserSettings": "網頁瀏覽器設定", - "syncToBrowser": "同步帳號 → 瀏覽器", - "syncToAccount": "同步帳號 ← 瀏覽器" - }, - "adminUserSettings": { - "title": "使用者控制設定", - "header": "管理員使用者控制設定", - "admin": "管理員", - "user": "使用者", - "addUser": "新增使用者", - "deleteUser": "刪除使用者", - "confirmDeleteUser": "確定要刪除此使用者?", - "confirmChangeUserStatus": "是否要停用/啟用此使用者?", - "usernameInfo": "使用者名稱只能包含字母、數字和以下特殊字元 @._+- 或必須是有效的電子郵件地址。", - "roles": "角色", - "role": "角色", - "actions": "操作", - "apiUser": "受限制的 API 使用者", - "extraApiUser": "額外受限制的 API 使用者", - "webOnlyUser": "僅網頁版使用者", - "demoUser": "示範使用者(無自訂設定)", - "internalApiUser": "內部 API 使用者", - "forceChange": "強制使用者在登入時變更密碼", - "submit": "儲存使用者", - "changeUserRole": "變更使用者角色", - "authenticated": "已驗證", - "editOwnProfil": "編輯自己的個人資料", - "enabledUser": "已啟用使用者", - "disabledUser": "已停用使用者", - "activeUsers": "使用中的使用者:", - "disabledUsers": "已停用的使用者:", - "totalUsers": "使用者總數:", - "lastRequest": "最後請求時間", - "usage": "檢視使用情況" - }, - "endpointStatistics": { - "title": "端點統計", - "header": "端點統計", - "top10": "前 10 名", - "top20": "前 20 名", - "all": "全部", - "refresh": "重新整理", - "includeHomepage": "包含首頁 ('/')", - "includeLoginPage": "包含登入頁面 ('/login')", - "totalEndpoints": "端點總數", - "totalVisits": "總造訪次數", - "showing": "顯示中", - "selectedVisits": "選取的造訪次數", - "endpoint": "端點", - "visits": "造訪次數", - "percentage": "百分比", - "loading": "載入中...", - "failedToLoad": "無法載入端點資料。請嘗試重新整理。", - "home": "首頁", - "login": "登入", - "top": "前", - "numberOfVisits": "造訪次數", - "visitsTooltip": "造訪次數:{0}(總數的 {1}%)", - "retry": "重試" - }, - "database": { - "title": "資料庫匯入/匯出", - "header": "資料庫匯入/匯出", - "fileName": "檔案名稱", - "creationDate": "建立日期", - "fileSize": "檔案大小", - "deleteBackupFile": "刪除備份檔案", - "importBackupFile": "匯入備份檔案", - "createBackupFile": "建立備份檔案", - "downloadBackupFile": "下載備份檔案", - "info_1": "在匯入資料時,確保正確的結構至關重要。如果您不確定自己在做什麼,請尋求專業人士的建議和支援。結構錯誤可能會導致應用程式故障,甚至完全無法執行應用程式。", - "info_2": "上傳時檔案名稱並不重要。上傳後將重新命名為 backup_user_yyyyMMddHHmm.sql 格式,以確保命名規範一致。", - "submit": "匯入備份", - "importIntoDatabaseSuccessed": "成功匯入資料庫", - "backupCreated": "資料庫備份成功", - "fileNotFound": "找不到檔案", - "fileNullOrEmpty": "檔案不得為空或空白", - "failedImportFile": "匯入檔案失敗", - "notSupported": "您的資料庫連線不支援此功能。" - }, - "session": { - "expired": "您的工作階段已過期。請重新整理頁面並再試一次。", - "refreshPage": "重新整理頁面" - }, - "home": { - "desc": "您的本機一站式 PDF 解決方案。", - "searchBar": "搜尋功能...", - "viewPdf": { - "title": "檢視/編輯 PDF", - "desc": "檢視、註釋、新增文字或圖片" - }, - "setFavorites": "設定我的最愛", - "hideFavorites": "隱藏我的最愛", - "showFavorites": "顯示我的最愛", - "legacyHomepage": "舊版首頁", - "newHomePage": "嘗試使用全新首頁!", - "alphabetical": "按照字母排序", - "globalPopularity": "熱門程度", - "sortBy": "排序方式:", - "multiTool": { - "title": "PDF 複合工具", - "desc": "合併、旋轉、重新排列和移除頁面" - }, - "merge": { - "title": "合併", - "desc": "輕鬆將多個 PDF 合併為一個。" - }, - "split": { - "title": "分割", - "desc": "將 PDF 分割為多個文件" - }, - "rotate": { - "title": "旋轉", - "desc": "輕鬆旋轉您的 PDF。" - }, - "imageToPdf": { - "title": "圖片轉 PDF", - "desc": "將圖片(PNG、JPEG、GIF)轉換為 PDF。" - }, - "pdfToImage": { - "title": "PDF 轉圖片", - "desc": "將 PDF 轉換為圖片。(PNG、JPEG、GIF)" - }, - "pdfOrganiser": { - "title": "整理", - "desc": "以任何順序移除/重新排列頁面" - }, - "addImage": { - "title": "新增圖片", - "desc": "在 PDF 的指定位置新增圖片" - }, - "watermark": { - "title": "新增浮水印", - "desc": "在您的 PDF 檔案中新增自訂浮水印。" - }, - "permissions": { - "title": "修改權限", - "desc": "修改您的 PDF 檔案權限" - }, - "removePages": { - "title": "移除", - "desc": "從您的 PDF 檔案中刪除不需要的頁面。" - }, - "addPassword": { - "title": "新增密碼", - "desc": "用密碼加密您的 PDF 檔案。" - }, - "removePassword": { - "title": "移除密碼", - "desc": "從您的 PDF 檔案中移除密碼保護。" - }, - "compressPdfs": { - "title": "壓縮", - "desc": "壓縮 PDF 以減少其檔案大小。" - }, - "unlockPDFForms": { - "title": "Unlock PDF Forms", - "desc": "Remove read-only property of form fields in a PDF document." - }, - "changeMetadata": { - "title": "變更中繼資料", - "desc": "從 PDF 檔案中變更/移除/新增中繼資料" - }, - "fileToPDF": { - "title": "檔案轉 PDF", - "desc": "將幾乎所有格式轉換為 PDF(DOCX、PNG、XLS、PPT、TXT 等等)" - }, - "ocr": { - "title": "OCR / 清理掃描", - "desc": "清理掃描並從 PDF 中的影像中偵測文字並重新新增為文字。" - }, - "extractImages": { - "title": "提取圖片", - "desc": "從 PDF 中提取所有圖片並將它們儲存到壓縮檔中" - }, - "pdfToPDFA": { - "title": "PDF 轉 PDF/A", - "desc": "將 PDF 轉換為長期儲存的 PDF/A" - }, - "PDFToWord": { - "title": "PDF 轉 Word", - "desc": "將 PDF 轉換為 Word 格式(DOC、DOCX 和 ODT)" - }, - "PDFToPresentation": { - "title": "PDF 轉簡報", - "desc": "將 PDF 轉換為簡報格式(PPT、PPTX 和 ODP)" - }, - "PDFToText": { - "title": "PDF 轉 RTF(文字)", - "desc": "將 PDF 轉換為文字或 RTF 格式" - }, - "PDFToHTML": { - "title": "PDF 轉 HTML", - "desc": "將 PDF 轉換為 HTML 格式" - }, - "PDFToXML": { - "title": "PDF 轉 XML", - "desc": "將 PDF 轉換為 XML 格式" - }, - "ScannerImageSplit": { - "title": "偵測/分割掃描照片", - "desc": "從照片/PDF 中分割多張照片" - }, - "sign": { - "title": "簽章", - "desc": "透過繪圖、文字或影像新增簽章到 PDF" - }, - "flatten": { - "title": "平坦化", - "desc": "從 PDF 中移除所有互動元素和表單" - }, - "repair": { - "title": "修復", - "desc": "嘗試修復損壞/破損的 PDF" - }, - "removeBlanks": { - "title": "移除空白頁面", - "desc": "偵測並從文件中移除空白頁面" - }, - "removeAnnotations": { - "title": "移除註釋", - "desc": "從 PDF 中移除所有註釋/註解" - }, - "compare": { - "title": "比較", - "desc": "比較並顯示 2 個 PDF 檔案的差異" - }, - "certSign": { - "title": "使用憑證簽章", - "desc": "使用憑證/金鑰(PEM/P12)簽章 PDF" - }, - "removeCertSign": { - "title": "移除簽章", - "desc": "從 PDF 移除簽章" - }, - "pageLayout": { - "title": "多頁面版面配置", - "desc": "將 PDF 檔案的多個頁面合併到單一頁面" - }, - "scalePages": { - "title": "調整頁面大小/比例", - "desc": "修改頁面及其內容的大小/比例。" - }, - "pipeline": { - "title": "管道(進階)", - "desc": "透過定義管道指令碼在 PDF 上執行多個操作" - }, - "add-page-numbers": { - "title": "新增頁碼", - "desc": "在文件的設定位置新增頁碼" - }, - "auto-rename": { - "title": "自動重新命名 PDF 檔案", - "desc": "根據其偵測到的標頭自動重新命名 PDF 檔案" - }, - "adjust-contrast": { - "title": "調整顏色/對比度", - "desc": "調整 PDF 的對比度、飽和度和亮度" - }, - "crop": { - "title": "裁剪 PDF", - "desc": "裁剪 PDF 以減少其大小(保持文字!)" - }, - "autoSplitPDF": { - "title": "自動分割頁面", - "desc": "自動分割掃描的 PDF,使用實體掃描頁面分割器 QR Code" - }, - "sanitizePdf": { - "title": "清理", - "desc": "從 PDF 檔案中移除指令碼和其他元素" - }, - "URLToPDF": { - "title": "網址/網站轉 PDF", - "desc": "將任何 http(s) 網址轉換為 PDF" - }, - "HTMLToPDF": { - "title": "HTML 轉 PDF", - "desc": "將任何 HTML 檔案或壓縮檔轉換為 PDF" - }, - "MarkdownToPDF": { - "title": "Markdown 轉 PDF", - "desc": "將任何 Markdown 檔案轉換為 PDF" - }, - "PDFToMarkdown": { - "title": "PDF 轉 Markdown", - "desc": "將任何 PDF 轉換為 Markdown 檔案" - }, - "getPdfInfo": { - "title": "取得 PDF 的所有資訊", - "desc": "取得 PDF 的所有可能資訊" - }, - "extractPage": { - "title": "提取多個頁面", - "desc": "從 PDF 中提取選定的頁面" - }, - "PdfToSinglePage": { - "title": "PDF 轉單一大頁面", - "desc": "將所有 PDF 頁面合併為一個大的單一頁面" - }, - "showJS": { - "title": "顯示 JavaScript", - "desc": "搜尋並顯示嵌入 PDF 中的任何 JS(JavaScript)" - }, - "autoRedact": { - "title": "自動塗黑", - "desc": "根據輸入的文字自動塗黑 PDF 中的文字" - }, - "redact": { - "title": "手動塗黑", - "desc": "依據選取的文字、繪製的形狀和選取的頁面塗黑 PDF" - }, - "tableExtraxt": { - "title": "PDF 轉 CSV", - "desc": "從 PDF 中提取表格並將其轉換為 CSV" - }, - "autoSizeSplitPDF": { - "title": "根據大小/數量自動分割", - "desc": "根據大小、頁數或文件數將單一 PDF 分割為多個文件" - }, - "overlay-pdfs": { - "title": "覆蓋 PDF", - "desc": "將 PDF 覆蓋在另一個 PDF 上" - }, - "split-by-sections": { - "title": "依區段分割 PDF", - "desc": "將 PDF 的每一頁分割為較小的水平和垂直區段" - }, - "AddStampRequest": { - "title": "將圖章新增到 PDF", - "desc": "在設定位置新增文字或新增影像圖章" - }, - "removeImagePdf": { - "title": "移除圖片", - "desc": "從 PDF 中移除圖片以減少檔案大小" - }, - "splitPdfByChapters": { - "title": "依章節分割 PDF", - "desc": "根據 PDF 的章節結構將其分割成多個檔案。" - }, - "validateSignature": { - "title": "驗證 PDF 簽章", - "desc": "驗證 PDF 文件中的數位簽章與憑證" - }, - "replaceColorPdf": { - "title": "取代與反轉顏色", - "desc": "取代 PDF 中文字和背景的顏色,並反轉整個 PDF 的顏色以減少檔案大小" - } - }, - "viewPdf": { - "tags": "檢視,閱讀,註釋,文字,圖片", - "title": "檢視/編輯 PDF", - "header": "檢視 PDF" - }, - "multiTool": { - "tags": "複合工具,多功能,UI,點選拖曳,前端,客戶端,互動,互動式,移動", - "title": "PDF 複合工具", - "header": "PDF 複合工具", - "uploadPrompts": "檔名", - "selectAll": "全選", - "deselectAll": "取消全選", - "selectPages": "選取頁面", - "selectedPages": "已選取的頁面", - "page": "頁面", - "deleteSelected": "刪除已選取的項目", - "downloadAll": "匯出", - "downloadSelected": "匯出已選取的項目", - "insertPageBreak": "插入分頁符號", - "addFile": "新增檔案", - "rotateLeft": "向左旋轉", - "rotateRight": "向右旋轉", - "split": "分割", - "moveLeft": "向左移動", - "moveRight": "向右移動", - "delete": "刪除", - "dragDropMessage": "已選取的頁面", - "undo": "復原", - "redo": "重做" - }, - "merge": { - "tags": "合併,頁面操作,後端,伺服器端", - "title": "合併", - "header": "合併多個 PDF", - "sortByName": "依名稱排序", - "sortByDate": "依日期排序", - "removeCertSign": "是否移除合併後檔案的憑證簽章?", - "submit": "合併" - }, - "split": { - "tags": "頁面操作,劃分,多頁,剪下,伺服器端", - "title": "分割 PDF", - "header": "分割 PDF", - "desc": { - "1": "你選擇的數字是你希望進行分割的頁碼", - "2": "因此,選擇 1,3,7-9 將會將一個 10 頁的文件分割為 6 個單獨的 PDF,包括:", - "3": "文件 #1:頁面 1", - "4": "文件 #2:頁面 2 和 3", - "5": "文件 #3:頁面 4、5、6 和 7", - "6": "文件 #4:頁面 8", - "7": "文件 #5:頁面 9", - "8": "文件 #6:頁面 10" - }, - "splitPages": "輸入要分割的頁面:", - "submit": "分割" - }, - "rotate": { - "tags": "伺服器端", - "title": "旋轉 PDF", - "header": "旋轉 PDF", - "selectAngle": "選擇旋轉角度(以 90 度的倍數):", - "submit": "旋轉" - }, - "imageToPdf": { - "tags": "轉換,img,jpg,圖片,照片" - }, - "pdfToImage": { - "tags": "轉換,img,jpg,圖片,照片", - "title": "PDF 轉圖片", - "header": "PDF 轉圖片", - "selectText": "影像格式", - "singleOrMultiple": "頁面到影像的結果類型", - "single": "單一大影像結合所有頁面", - "multi": "多個影像,每頁一個影像", - "colorType": "顏色類型", - "color": "顏色", - "grey": "灰度", - "blackwhite": "黑白(可能會遺失資料!)", - "submit": "轉換", - "info": "尚未安裝 Python。需要安裝 Python 才能進行 WebP 轉換。", - "placeholder": "(例如 1,2,8 或 4,7,12-16 或 2n-1)" - }, - "pdfOrganiser": { - "tags": "雙面,偶數,奇數,排序,移動", - "title": "頁面整理", - "header": "PDF 頁面整理", - "submit": "重新排列頁面", - "mode": { - "_value": "模式", - "1": "自定義頁面順序", - "2": "反向順序", - "3": "雙工排序", - "4": "摺頁冊排序", - "5": "側裝訂摺頁冊排序", - "6": "奇偶拆分", - "7": "刪除第一頁", - "8": "刪除最後一頁", - "9": "刪除第一頁和最後一頁", - "10": "奇偶合併", - "11": "複製所有頁面" - }, - "placeholder": "(例如 1,3,2 或 4-8,2,10-12 或 2n-1)" - }, - "addImage": { - "tags": "img,jpg,圖片,照片", - "title": "新增圖片", - "header": "新增圖片到 PDF", - "everyPage": "每一頁?", - "upload": "新增圖片", - "submit": "新增圖片" - }, - "watermark": { - "tags": "文字,重複,標籤,自有,版權,商標,img,jpg,圖片,照片", - "title": "新增浮水印", - "header": "新增浮水印", - "customColor": "自訂文字顏色", - "selectText": { - "1": "選擇要新增浮水印的 PDF:", - "2": "浮水印文字:", - "3": "字型大小:", - "4": "旋轉(0-360):", - "5": "Width Spacer(每個浮水印之間的水平間距):", - "6": "Height Spacer(每個浮水印之間的垂直間距):", - "7": "不透明度(0% - 100%):", - "8": "浮水印類型:", - "9": "浮水印影像:", - "10": "將 PDF 轉換為 PDF 影像" - }, - "submit": "新增浮水印", - "type": { - "1": "文字", - "2": "圖片" - } - }, - "permissions": { - "tags": "讀取,寫入,編輯,列印", - "title": "變更權限", - "header": "變更權限", - "warning": "警告,要使這些權限不可變更,建議透過新增密碼頁面使用密碼設定這些權限", - "selectText": { - "1": "選擇要變更權限的 PDF", - "2": "要設定的權限", - "3": "防止文件組裝", - "4": "防止內容提取", - "5": "防止為了無障礙使用而提取資料", - "6": "防止填寫表單", - "7": "防止修改", - "8": "防止註釋修改", - "9": "防止列印", - "10": "防止列印不同格式" - }, - "submit": "變更" - }, - "removePages": { - "tags": "移除頁面,刪除頁面" - }, - "addPassword": { - "tags": "安全,安全性", - "title": "新增密碼", - "header": "新增密碼(加密)", - "selectText": { - "1": "選擇要加密的 PDF", - "2": "使用者密碼", - "3": "加密金鑰長度", - "4": "較高的值更強,但較低的值具有更好的相容性。", - "5": "要設定的權限(建議與擁有者密碼一起使用)", - "6": "防止文件組裝", - "7": "防止內容提取", - "8": "防止為了無障礙使用而提取資料", - "9": "防止填寫表單", - "10": "防止修改", - "11": "防止註釋修改", - "12": "防止列印", - "13": "防止列印不同格式", - "14": "擁有者密碼", - "15": "限制一旦開啟文件可以做什麼(並非所有軟體都支援)", - "16": "限制開啟文件本身" - }, - "submit": "加密" - }, - "removePassword": { - "tags": "安全,解密,安全性,取消密碼,刪除密碼", - "title": "移除密碼", - "header": "移除密碼(解密)", - "selectText": { - "1": "選擇要解密的 PDF", - "2": "密碼" - }, - "submit": "移除" - }, - "compressPdfs": { - "tags": "壓縮,小,微小" - }, - "unlockPDFForms": { - "tags": "remove,delete,form,field,readonly", - "title": "Remove Read-Only from Form Fields", - "header": "Unlock PDF Forms", - "submit": "Remove" - }, - "changeMetadata": { - "tags": "標題,作者,日期,建立,時間,出版商,製作人,統計", - "title": "標題:", - "header": "變更中繼資料", - "selectText": { - "1": "請編輯你希望變更的變數", - "2": "刪除所有中繼資料", - "3": "顯示自訂中繼資料:", - "4": "其他中繼資料:", - "5": "新增自訂中繼資料項目" - }, - "author": "作者:", - "creationDate": "建立日期(yyyy/MM/dd HH:mm:ss):", - "creator": "建立者:", - "keywords": "關鍵字:", - "modDate": "修改日期(yyyy/MM/dd HH:mm:ss):", - "producer": "製作人:", - "subject": "主題:", - "trapped": "陷阱:", - "submit": "變更" - }, - "fileToPDF": { - "tags": "轉換,格式,文件,圖片,投影片,文字,轉換,office,docs,Word,Excel,PowerPoint", - "title": "檔案轉 PDF", - "header": "將任何檔案轉換為 PDF", - "credit": "此服務使用 LibreOffice 和 Unoconv 進行檔案轉換。", - "supportedFileTypesInfo": "支援的檔案類型", - "supportedFileTypes": "支援的檔案類型應包括以下內容,但要獲得完整的更新支援格式列表,請參閱 LibreOffice 的文件", - "submit": "轉換為 PDF" - }, - "ocr": { - "tags": "識別,文字,影像,掃描,讀取,識別,偵測,可編輯", - "title": "OCR / 掃描清理", - "header": "清理掃描 / OCR(光學字元識別)", - "selectText": { - "1": "選擇要在 PDF 中偵測的語言(列出的是目前可以偵測的語言):", - "2": "產生包含 OCR 文字的文字文件,並與 OCR 的 PDF 一起", - "3": "修正掃描的頁面傾斜角度,將它們旋轉回原位", - "4": "清理頁面以降低 OCR 在背景雜訊中識別文字的機率。(無輸出變化)", - "5": "清理頁面以降低 OCR 在背景雜訊中識別文字的機率,保持乾淨的輸出。", - "6": "忽略具有互動文字的頁面,只對影像頁面進行 OCR", - "7": "強制 OCR,將對每一頁進行 OCR,移除所有原始文字元素", - "8": "正常(如果 PDF 包含文字將出錯)", - "9": "額外設定", - "10": "OCR 模式", - "11": "移除 OCR 後的影像(移除所有影像,只有在轉換步驟中才有用)", - "12": "渲染類型(進階)" - }, - "help": "請閱讀此文件,了解如何使用其他語言和/或在 Docker 中使用", - "credit": "此服務使用 qpdf 和 Tesseract 進行 OCR。", - "submit": "使用 OCR 處理 PDF" - }, - "extractImages": { - "tags": "圖片,照片,儲存,存檔,壓縮檔,捕獲,抓取", - "title": "提取圖片", - "header": "提取圖片", - "selectText": "選擇要轉換提取影像的影像格式", - "allowDuplicates": "儲存重複的圖片", - "submit": "提取" - }, - "pdfToPDFA": { - "tags": "存檔,長期,標準,轉換,儲存,保存", - "title": "PDF 轉 PDF/A", - "header": "PDF 轉 PDF/A", - "credit": "此服務使用 libreoffice 進行 PDF/A 轉換", - "submit": "轉換", - "tip": "目前不支援上傳多個", - "outputFormat": "輸出格式", - "pdfWithDigitalSignature": "該 PDF 的憑證簽章將會在下一步被移除" - }, - "PDFToWord": { - "tags": "doc,docx,odt,word,轉換,格式,轉檔,office,微軟,docfile", - "title": "PDF 轉 Word", - "header": "PDF 轉 Word", - "selectText": { - "1": "輸出文件格式" - }, - "credit": "此服務使用 LibreOffice 進行檔案轉換。", - "submit": "轉換" - }, - "PDFToPresentation": { - "tags": "投影片,展示,office,微軟", - "title": "PDF 轉簡報", - "header": "PDF 轉簡報", - "selectText": { - "1": "輸出文件格式" - }, - "credit": "此服務使用 LibreOffice 進行檔案轉換。", - "submit": "轉換" - }, - "PDFToText": { - "tags": "豐富格式,豐富文字格式,豐富文字格式", - "title": "PDF 轉 RTF(文字)", - "header": "PDF 轉 RTF(文字)", - "selectText": { - "1": "輸出文件格式" - }, - "credit": "此服務使用 LibreOffice 進行檔案轉換。", - "submit": "轉換" - }, - "PDFToHTML": { - "tags": "網頁內容,瀏覽器友善", - "title": "PDF 轉 HTML", - "header": "PDF 轉 HTML", - "credit": "此服務使用 pdftohtml 進行檔案轉換。", - "submit": "轉換" - }, - "PDFToXML": { - "tags": "資料提取,結構化內容,互操作,轉換,轉檔", - "title": "PDF 轉換為 XML", - "header": "PDF 轉換為 XML", - "credit": "此服務使用 LibreOffice 進行檔案轉換。", - "submit": "轉換" - }, - "ScannerImageSplit": { - "tags": "分離,自動偵測,掃描,多照片,組織", - "selectText": { - "1": "角度閾值:", - "2": "設定影像旋轉所需的最小絕對角度(預設:10)。", - "3": "容忍度:", - "4": "確定圍繞估計的背景顏色的顏色變化範圍(預設:30)。", - "5": "最小區域:", - "6": "設定照片的最小區域閾值(預設:10000)。", - "7": "最小輪廓區域:", - "8": "設定照片的最小輪廓區域閾值", - "9": "邊框大小:", - "10": "設定新增和移除的邊框大小,以防止輸出中的白色邊框(預設:1)。" - }, - "info": "尚未安裝 Python。需要安裝 Python 才能執行。" - }, - "sign": { - "tags": "授權,縮寫,繪製簽章,文字,影像簽章", - "title": "簽章", - "header": "簽署 PDF", - "upload": "上傳影像", - "draw": "繪製簽章", - "text": "文字輸入", - "clear": "清除", - "add": "新增", - "saved": "已儲存的簽章", - "save": "儲存簽章", - "personalSigs": "個人簽章", - "sharedSigs": "共用簽章", - "noSavedSigs": "尚未儲存任何簽章", - "addToAll": "新增至所有頁面", - "delete": "刪除", - "first": "第一頁", - "last": "最後一頁", - "next": "下一頁", - "previous": "上一頁", - "maintainRatio": "切換維持長寬比", - "undo": "撤銷", - "redo": "重做" - }, - "flatten": { - "tags": "靜態,停用,非互動,簡化", - "title": "平坦化", - "header": "PDF 平坦化", - "flattenOnlyForms": "僅將表單平坦化", - "submit": "平坦化" - }, - "repair": { - "tags": "修復,恢復,修正,復原", - "title": "修復", - "header": "修復 PDF", - "submit": "修復" - }, - "removeBlanks": { - "tags": "清理,簡化,非內容,組織", - "title": "移除空白頁面", - "header": "移除空白頁面", - "threshold": "畫素白度閾值:", - "thresholdDesc": "確定一個白色畫素必須多麼白才能被分類為 '白色'。0 = 黑色,255 純白。", - "whitePercent": "白色百分比(%):", - "whitePercentDesc": "頁面必須是 '白色' 畫素的百分比才能被移除", - "submit": "移除空白" - }, - "removeAnnotations": { - "tags": "註釋,突出,註解,標記,移除", - "title": "移除註釋", - "header": "移除註釋", - "submit": "移除" - }, - "compare": { - "tags": "區分,對比,變化,分析", - "title": "比較", - "header": "比較 PDF", - "highlightColor": { - "1": "標示顏色 1:", - "2": "標示顏色 2:" - }, - "document": { - "1": "文件 1", - "2": "文件 2" - }, - "submit": "比較", - "complex": { - "message": "選擇的檔案大小太大(其中一個或兩者皆是),可能會影響比較的精確度" - }, - "large": { - "file": { - "message": "選擇的檔案大小超出系統限制(其中一個或兩者皆是),無法處理" - } - }, - "no": { - "text": { - "message": "選擇的 PDF 檔案未包含文字(其中一個或兩者皆是)。請選擇含有文字的 PDF 進行比較" - } - } - }, - "certSign": { - "tags": "驗證,PEM,P12,官方,加密", - "title": "憑證簽章", - "header": "使用您的憑證簽章(進行中)", - "selectPDF": "選擇要簽章的 PDF 檔案:", - "jksNote": "注意:如果您的證書類型未被列在下方,請使用 keytool 命令列工具將其轉換為 Java Keystore (.jks) 檔案格式,然後選擇下面的 .jks 檔案選項。", - "selectKey": "選擇您的私鑰檔案(PKCS#8 格式,副檔名可能是 .pem 或 .der):", - "selectCert": "選擇您的憑證檔案(X.509 格式,副檔名可能是 .pem 或 .der):", - "selectP12": "選擇您的 PKCS#12 金鑰庫檔案(副檔名可能是 .p12 或 .pfx)(選填,如果有提供,則它應該包含您的私鑰和憑證):", - "selectJKS": "選擇您的 Java Keystore 檔案 (副檔名可能是 .jks 或 .keystore):", - "certType": "憑證類型", - "password": "輸入您的金鑰庫或私鑰密碼(如果有的話):", - "showSig": "顯示簽章", - "reason": "原因", - "location": "位置", - "name": "名稱", - "showLogo": "顯示 Logo", - "submit": "簽章 PDF" - }, - "removeCertSign": { - "tags": "驗證,PEM,P12,官方,解密", - "title": "移除憑證簽章", - "header": "從 PDF 檔案中移除憑證簽章", - "selectPDF": "選擇 PDF 檔案", - "submit": "移除" - }, - "pageLayout": { - "tags": "合併,複合,單一檢視,組織", - "title": "多頁面版面配置", - "header": "多頁面版面配置", - "pagesPerSheet": "每張紙的頁面數:", - "addBorder": "新增邊框", - "submit": "送出" - }, - "scalePages": { - "tags": "調整大小,修改,尺寸,適應", - "title": "調整頁面大小/比例", - "header": "調整頁面大小/比例", - "pageSize": "文件的頁面大小。", - "keepPageSize": "原始大小", - "scaleFactor": "頁面的縮放級別(裁剪)。", - "submit": "送出" - }, - "add-page-numbers": { - "tags": "分頁,標籤,組織,索引" - }, - "auto-rename": { - "tags": "自動偵測,基於標頭,組織,重新標籤", - "title": "自動重新命名", - "header": "自動重新命名 PDF", - "submit": "自動重新命名" - }, - "adjust-contrast": { - "tags": "色彩校正,調整,修改,增強" - }, - "crop": { - "tags": "修剪,縮小,編輯,形狀", - "title": "裁剪", - "header": "裁剪 PDF", - "submit": "送出" - }, - "autoSplitPDF": { - "tags": "基於 QR Code,分離,掃描區段,組織", - "title": "自動分割 PDF", - "header": "自動分割 PDF", - "description": "列印,插入,掃描,上傳,讓 Stirling PDF 處理其餘的工作。不需要手動工作排序。", - "selectText": { - "1": "從下面列印一些分隔紙張(黑白即可)。", - "2": "透過在它們之間插入分隔紙張一次掃描所有文件。", - "3": "上傳單一大的掃描 PDF 檔案,讓 Stirling PDF 處理其餘的工作。", - "4": "自動偵測並移除分隔頁面,確保最終文件整潔。" - }, - "formPrompt": "送出包含 Stirling-PDF 頁面分隔器的 PDF:", - "duplexMode": "雙面模式(正反面掃描)", - "dividerDownload2": "下載 '自動分割器分隔器(帶說明).pdf'", - "submit": "送出" - }, - "sanitizePdf": { - "tags": "清理,安全,無害,移除威脅" - }, - "URLToPDF": { - "tags": "網頁捕獲,儲存頁面,網頁轉文件,存檔", - "title": "URL 轉 PDF", - "header": "URL 轉 PDF", - "submit": "轉換", - "credit": "此服務使用 WeasyPrint 進行轉換" - }, - "HTMLToPDF": { - "tags": "標記,網頁內容,轉換,轉檔", - "title": "HTML 轉 PDF", - "header": "HTML 轉 PDF", - "help": "接受 HTML 文件和包含所需 html/css/images 等的 ZIP", - "submit": "轉換", - "credit": "此服務使用 WeasyPrint 進行轉換", - "zoom": "用於顯示網站的縮放級別。", - "pageWidth": "頁面寬度-以公分為單位(留空則使用預設值)", - "pageHeight": "頁面高度-以公分為單位(留空則使用預設值)", - "marginTop": "頁面的上邊距-以毫米為單位(留空則使用預設值)", - "marginBottom": "頁面的下邊距-以毫米為單位(留空則使用預設值)", - "marginLeft": "頁面的左邊距-以毫米為單位(留空則使用預設值)", - "marginRight": "頁面的右邊距-以毫米為單位(留空則使用預設值)", - "printBackground": "渲染網站的背景。", - "defaultHeader": "啟用預設標頭(名稱和頁碼)", - "cssMediaType": "更改頁面的 CSS 媒體類型。", - "none": "無", - "print": "列印", - "screen": "螢幕" - }, - "MarkdownToPDF": { - "tags": "標記,網頁內容,轉換,轉檔,md", - "title": "Markdown 轉 PDF", - "header": "Markdown 轉 PDF", - "submit": "轉換", - "help": "正在進行中", - "credit": "此服務使用 WeasyPrint 進行轉換" - }, - "PDFToMarkdown": { - "tags": "標記語言,網頁內容,轉換,轉檔,md", - "title": "PDF 轉 Markdown", - "header": "PDF 轉 Markdown", - "submit": "轉換" - }, - "getPdfInfo": { - "tags": "資訊,資料,統計,統計資料", - "title": "取得 PDF 資訊", - "header": "取得 PDF 資訊", - "submit": "取得資訊", - "downloadJson": "下載 JSON" - }, - "extractPage": { - "tags": "提取" - }, - "PdfToSinglePage": { - "tags": "單一頁面" - }, - "showJS": { - "tags": "JS", - "title": "顯示 JavaScript", - "header": "顯示 JavaScript", - "downloadJS": "下載 JavaScript", - "submit": "顯示" - }, - "autoRedact": { - "tags": "塗改,隱藏,塗黑,黑色,標記,遮蔽", - "title": "自動塗黑", - "header": "自動塗黑", - "colorLabel": "顏色", - "textsToRedactLabel": "要塗黑的文字(以行分隔)", - "textsToRedactPlaceholder": "例如 \\n機密 \\n最高機密", - "useRegexLabel": "使用正則表達式", - "wholeWordSearchLabel": "整個單詞搜尋", - "customPaddingLabel": "自訂額外填充", - "convertPDFToImageLabel": "將 PDF 轉換為 PDF-影像(用於移除方框後面的文字)", - "submitButton": "送出" - }, - "redact": { - "tags": "塗改,隱藏,塗黑,黑色,標記,遮蔽,手動", - "title": "手動塗黑", - "header": "手動塗黑", - "submit": "塗黑", - "textBasedRedaction": "以文字為基礎的塗黑", - "pageBasedRedaction": "以頁面為基礎的塗黑", - "convertPDFToImageLabel": "將 PDF 轉換為 PDF 影像(用於移除黑框後的文字)", - "pageRedactionNumbers": { - "title": "頁面", - "placeholder": "(例如 1,2,8 或 4,7,12-16 或 2n-1)" - }, - "redactionColor": { - "title": "塗黑顏色" - }, - "export": "匯出", - "upload": "上傳", - "boxRedaction": "框選區域塗黑", - "zoom": "縮放", - "zoomIn": "放大", - "zoomOut": "縮小", - "nextPage": "下一頁", - "previousPage": "上一頁", - "toggleSidebar": "切換側邊欄", - "showThumbnails": "顯示縮圖", - "showDocumentOutline": "顯示文件大綱(按兩下可展開/摺疊所有項目)", - "showAttatchments": "顯示附件", - "showLayers": "顯示圖層(按兩下可將所有圖層重設為預設狀態)", - "colourPicker": "顏色選擇器", - "findCurrentOutlineItem": "尋找目前的大綱項目", - "applyChanges": "套用變更" - }, - "tableExtraxt": { - "tags": "CSV,表格提取,提取,轉換" - }, - "autoSizeSplitPDF": { - "tags": "pdf,分割,文件,組織" - }, - "overlay-pdfs": { - "tags": "覆蓋", - "header": "覆蓋 PDF 檔案", - "baseFile": { - "label": "選擇基底 PDF 檔案" - }, - "overlayFiles": { - "label": "選擇覆蓋 PDF 檔案" - }, - "mode": { - "label": "選擇覆蓋模式", - "sequential": "序列覆蓋", - "interleaved": "交錯覆蓋", - "fixedRepeat": "固定重複覆蓋" - }, - "counts": { - "label": "覆蓋次數(適用於固定重複模式)", - "placeholder": "輸入逗號分隔的次數(例如:2,3,1)" - }, - "position": { - "label": "選擇覆蓋位置", - "foreground": "前景", - "background": "背景" - }, - "submit": "送出" - }, - "split-by-sections": { - "tags": "區段分割, 劃分, 自訂", - "title": "依區段分割 PDF", - "header": "將 PDF 分割成區段", - "horizontal": { - "label": "水平劃分", - "placeholder": "輸入水平劃分的數量" - }, - "vertical": { - "label": "垂直劃分", - "placeholder": "輸入垂直劃分的數量" - }, - "submit": "分割 PDF", - "merge": "是否合併為一個 PDF" - }, - "AddStampRequest": { - "tags": "圖章,新增圖片,中心影像,浮水印,PDF,嵌入,自訂", - "header": "圖章 PDF", - "title": "圖章 PDF", - "stampType": "圖章類型", - "stampText": "圖章文字", - "stampImage": "圖章圖片", - "alphabet": "字母表", - "fontSize": "字型/影像大小", - "rotation": "旋轉", - "opacity": "透明度", - "position": "位置", - "overrideX": "覆蓋 X 座標", - "overrideY": "覆蓋 Y 座標", - "customMargin": "自訂邊緣", - "customColor": "自訂文字顏色", - "submit": "送出" - }, - "removeImagePdf": { - "tags": "移除圖片,頁面操作,後端,伺服器端" - }, - "splitPdfByChapters": { - "tags": "分割,章節,書籤,整理" - }, - "validateSignature": { - "tags": "簽章,驗證,確認,pdf,憑證,數位簽章,驗證簽章,驗證憑證", - "title": "驗證 PDF 簽章", - "header": "驗證數位簽章", - "selectPDF": "選擇已簽章的 PDF 檔案", - "submit": "驗證簽章", - "results": "驗證結果", - "status": { - "_value": "狀態", - "valid": "有效", - "invalid": "無效" - }, - "signer": "簽署者", - "date": "日期", - "reason": "原因", - "location": "位置", - "noSignatures": "此文件中未找到數位簽章", - "chain": { - "invalid": "憑證鏈驗證失敗 - 無法驗證簽署者身份" - }, - "trust": { - "invalid": "憑證不在信任儲存區中 - 無法驗證來源" - }, - "cert": { - "expired": "憑證已過期", - "revoked": "憑證已被撤銷", - "info": "憑證詳細資訊", - "issuer": "發行者", - "subject": "主旨", - "serialNumber": "序號", - "validFrom": "有效期自", - "validUntil": "有效期至", - "algorithm": "演算法", - "keySize": "金鑰長度", - "version": "版本", - "keyUsage": "金鑰用途", - "selfSigned": "自我簽署", - "bits": "位元" - }, - "signature": { - "info": "簽章資訊", - "_value": "簽章", - "mathValid": "簽章在數學上有效,但:" - }, - "selectCustomCert": "自訂 X.509 憑證檔案(選填)" - }, - "replace-color": { - "title": "取代-反轉顏色", - "header": "取代-反轉 PDF 顏色", - "selectText": { - "1": "取代或反轉顏色選項", - "2": "預設(預設高對比度顏色)", - "3": "自訂(自訂顏色)", - "4": "全部反轉(反轉所有顏色)", - "5": "高對比度顏色選項", - "6": "黑底白字", - "7": "白底黑字", - "8": "黑底黃字", - "9": "黑底綠字", - "10": "選擇文字顏色", - "11": "選擇背景顏色" - }, - "submit": "取代" - }, - "replaceColorPdf": { - "tags": "取代顏色,頁面操作,後端,伺服器端" - }, - "login": { - "title": "登入", - "header": "登入", - "signin": "登入", - "rememberme": "記住我", - "invalid": "使用者名稱或密碼無效。", - "locked": "您的帳號已被鎖定。", - "signinTitle": "請登入", - "ssoSignIn": "透過 SSO 單一登入", - "oAuth2AutoCreateDisabled": "OAuth 2.0 自動建立使用者功能已停用", - "oAuth2AdminBlockedUser": "目前不允許未註冊的使用者註冊或登入。請聯絡系統管理員。", - "oauth2RequestNotFound": "找不到驗證請求", - "oauth2InvalidUserInfoResponse": "使用者資訊回應無效", - "oauth2invalidRequest": "請求無效", - "oauth2AccessDenied": "存取被拒", - "oauth2InvalidTokenResponse": "無效的權杖回應", - "oauth2InvalidIdToken": "無效的身分權杖", - "relyingPartyRegistrationNotFound": "找不到任何信賴方註冊紀錄", - "userIsDisabled": "使用者已停用,目前此使用者無法登入。請聯絡系統管理員。", - "alreadyLoggedIn": "您已經登入了", - "alreadyLoggedIn2": "部裝置。請先從這些裝置登出後再試一次。", - "toManySessions": "您有太多使用中的工作階段", - "logoutMessage": "You have been logged out." - }, - "pdfToSinglePage": { - "title": "PDF 轉為單一頁面", - "header": "PDF 轉為單一頁面", - "submit": "轉換為單一頁面" - }, - "pageExtracter": { - "title": "提取頁面", - "header": "提取頁面", - "submit": "提取", - "placeholder": "(例如 1,2,8 或 4,7,12-16 或 2n-1)" - }, - "sanitizePDF": { - "title": "清理 PDF", - "header": "清理 PDF 檔案", - "selectText": { - "1": "移除 JavaScript 操作", - "2": "移除內嵌文件", - "3": "移除內嵌 XMP 資訊", - "4": "移除連結", - "5": "移除字型", - "6": "移除文件中繼資料" - }, - "submit": "清理 PDF" - }, - "adjustContrast": { - "title": "調整對比度", - "header": "調整對比度", - "contrast": "對比度:", - "brightness": "亮度:", - "saturation": "飽和度:", - "download": "下載" - }, - "compress": { - "title": "壓縮", - "header": "壓縮 PDF", - "credit": "此服務使用 qpdf 進行 PDF 壓縮/最佳化。", - "grayscale": { - "label": "套用灰階進行壓縮" - }, - "selectText": { - "1": { - "_value": "壓縮設定", - "1": "1-3 為一般 PDF 壓縮,
4-6 為輕度圖片壓縮,
7-9 為高強度圖片壓縮,將大幅降低圖片品質" - }, - "2": "最佳化等級:", - "4": "自動模式 - 自動調整品質使 PDF 達到指定的檔案大小", - "5": "指定的 PDF 檔案大小(例如 25MB, 10.8MB, 25KB)" - }, - "submit": "壓縮" - }, - "decrypt": { - "passwordPrompt": "此檔案已受密碼保護。請輸入密碼:", - "cancelled": "已取消處理 PDF:{0}", - "noPassword": "未提供加密 PDF 的密碼:{0}", - "invalidPassword": "請重新輸入正確的密碼。", - "invalidPasswordHeader": "密碼錯誤或不支援的加密方式,PDF:{0}", - "unexpectedError": "處理檔案時發生錯誤。請再試一次。", - "serverError": "解密時發生伺服器錯誤:{0}", - "success": "檔案已成功解密。" - }, - "multiTool-advert": { - "message": "此功能也可以在我們的複合工具頁面中使用。前往查看並體驗更強大的逐頁操作介面及其他進階功能!" - }, - "pageRemover": { - "title": "頁面移除", - "header": "PDF 頁面移除", - "pagesToDelete": "要刪除的頁面(輸入以逗號分隔的頁碼):", - "submit": "刪除頁面", - "placeholder": "(例如 1,2,6 或 1-10,15-30)" - }, - "imageToPDF": { - "title": "圖片轉 PDF", - "header": "圖片轉 PDF", - "submit": "轉換", - "selectLabel": "影像適應選項", - "fillPage": "填充頁面", - "fitDocumentToImage": "適應影像到頁面", - "maintainAspectRatio": "保持長寬比", - "selectText": { - "2": "自動旋轉 PDF", - "3": "多文件邏輯(僅在處理多個影像時啟用)", - "4": "合併為單一 PDF", - "5": "轉換為單獨的 PDF" - } - }, - "PDFToCSV": { - "title": "PDF 轉換為 CSV", - "header": "PDF 轉換為 CSV", - "prompt": "選擇要提取表格的頁面", - "submit": "提取" - }, - "split-by-size-or-count": { - "title": "依大小或數量分割 PDF", - "header": "依大小或數量分割 PDF", - "type": { - "label": "選擇分割類型", - "size": "依大小", - "pageCount": "依頁數", - "docCount": "依文件數量" - }, - "value": { - "label": "輸入值", - "placeholder": "輸入大小(例如:2MB 或 3KB)或數量(例如:5)" - }, - "submit": "送出" - }, - "printFile": { - "title": "列印檔案", - "header": "使用印表機印出檔案", - "selectText": { - "1": "選擇要印的檔案", - "2": "輸入印表機名稱" - }, - "submit": "列印" - }, - "licenses": { - "nav": "授權條款", - "title": "第三方授權條款", - "header": "第三方授權條款", - "module": "模組", - "version": "版本", - "license": "授權條款" - }, - "survey": { - "nav": "問卷調查", - "title": "Stirling-PDF 問卷調查", - "description": "Stirling-PDF 沒有追蹤功能,因此我們希望聽取使用者的意見來改進 Stirling-PDF!", - "changes": "Stirling-PDF 自上次調查以來已有所改變!欲了解更多資訊,請查看我們的部落格文章:", - "changes2": "隨著這些變更,我們正在獲得付費的商業支援和資金", - "please": "請考慮參與我們的問卷調查!", - "disabled": "(問卷調查彈出視窗將在後續更新中停用,但仍可在頁尾使用)", - "button": "參與問卷調查", - "dontShowAgain": "不要再次顯示", - "meeting": { - "1": "如果您在工作中使用 Stirling PDF,我們很希望能與您交流。我們將提供技術支援諮詢,以換取 15 分鐘的使用者體驗回饋交流。", - "2": "這是一個機會讓您:", - "3": "獲得關於部署、整合或疑難排解方面的協助", - "4": "針對效能、特殊案例和缺少的功能提供直接意見回饋", - "5": "協助我們改良 Stirling PDF 以符合實際企業使用需求", - "6": "如果您有興趣,可以直接預約時間與我們的團隊交流。(僅提供英語服務)", - "7": "期待深入了解您的使用情境,讓 Stirling PDF 變得更好!", - "notInterested": "不是企業使用者或對會議不感興趣?", - "button": "預約會議" - } - }, - "removeImage": { - "title": "移除圖片", - "header": "移除圖片", - "removeImage": "移除圖片", - "submit": "移除圖片" - }, - "splitByChapters": { - "title": "依章節分割 PDF", - "header": "依章節分割 PDF", - "bookmarkLevel": "書籤層級", - "includeMetadata": "包含中繼資料", - "allowDuplicates": "允許重複", - "desc": { - "1": "此工具會根據 PDF 檔案的章節結構將其分割成多個 PDF。", - "2": "書籤層級:選擇用於分割的書籤層級(0 表示最上層,1 表示第二層,依此類推)。", - "3": "包含中繼資料:如果勾選,原始 PDF 的中繼資料將包含在每個分割後的 PDF 中。", - "4": "允許重複:如果勾選,允許同一頁面上的多個書籤建立獨立的 PDF。" - }, - "submit": "分割 PDF" - }, - "fileChooser": { - "click": "點選", - "or": "或", - "dragAndDrop": "拖放檔案", - "dragAndDropPDF": "拖放 PDF 檔案", - "dragAndDropImage": "拖放圖片檔案", - "hoveredDragAndDrop": "將檔案拖放至此", - "extractPDF": "處理中..." - }, - "releases": { - "footer": "版本資訊", - "title": "版本資訊", - "header": "版本資訊", - "current": { - "version": "目前版本" - }, - "note": "版本資訊僅提供英文版本" - }, - "cookieBanner": { - "popUp": { - "title": "我們如何使用 Cookies", - "description": { - "1": "我們使用 Cookies 和其他技術來讓 Stirling PDF 變得更好——幫助我們改善工具並繼續創造您會喜愛的新功能", - "2": "如果您仍不想,點擊「不,謝謝」只會開啟必要的 Cookies 好讓網站功能保持運作" - }, - "acceptAllBtn": "接受", - "acceptNecessaryBtn": "不,謝謝", - "showPreferencesBtn": "管理偏好設定" - }, - "preferencesModal": { - "title": "喜好設定中心", - "acceptAllBtn": "全部接受", - "acceptNecessaryBtn": "全部拒絕", - "savePreferencesBtn": "儲存設定", - "closeIconLabel": "關閉視窗", - "serviceCounterLabel": "服務|服務", - "subtitle": "Cookies 的用途", - "description": { - "1": "Stirling PDF 使用 Cookies 與其他相似技術去改善您的體驗和分析您如何使用我們的工具。這有助於我們改善效能、開發您注目的功能,和提供使用者協助。", - "2": "Stirling PDF 不能——且永遠不會——追蹤或存取您的文件。", - "3": "您的隱私和信任是我們的核心理念。" - }, - "necessary": { - "title": { - "1": "必要的 Cookies", - "2": "永遠開啟" - }, - "description": "這些 Cookies 對網站正常運作至關重要。它們讓核心功能,像是隱私設定、登入、填入表格能夠運作——這也是為什麼它們不能被關掉。" - }, - "analytics": { - "title": "分析 Cookies", - "description": "這些 Cookies 幫助我們分析您如何使用我們的工具,好讓我們能專注在構建社群最重視的功能。儘管放心—— Stirling PDF 不會且永不追蹤您的文件" - } - } - } -} \ No newline at end of file diff --git a/frontend/dist/logo192.png b/frontend/dist/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 zcmZWtbyO6NvR-oO24RV%BvuJ&=?+<7=`LvyB&A_#M7mSDYw1v6DJkiYl9XjT!%$dLEBTQ8R9|wd3008in6lFF3GV-6mLi?MoP_y~}QUnaDCHI#t z7w^m$@6DI)|C8_jrT?q=f8D?0AM?L)Z}xAo^e^W>t$*Y0KlT5=@bBjT9kxb%-KNdk zeOS1tKO#ChhG7%{ApNBzE2ZVNcxbrin#E1TiAw#BlUhXllzhN$qWez5l;h+t^q#Eav8PhR2|T}y5kkflaK`ba-eoE+Z2q@o6P$)=&` z+(8}+-McnNO>e#$Rr{32ngsZIAX>GH??tqgwUuUz6kjns|LjsB37zUEWd|(&O!)DY zQLrq%Y>)Y8G`yYbYCx&aVHi@-vZ3|ebG!f$sTQqMgi0hWRJ^Wc+Ibv!udh_r%2|U) zPi|E^PK?UE!>_4`f`1k4hqqj_$+d!EB_#IYt;f9)fBOumGNyglU(ofY`yHq4Y?B%- zp&G!MRY<~ajTgIHErMe(Z8JG*;D-PJhd@RX@QatggM7+G(Lz8eZ;73)72Hfx5KDOE zkT(m}i2;@X2AT5fW?qVp?@WgN$aT+f_6eo?IsLh;jscNRp|8H}Z9p_UBO^SJXpZew zEK8fz|0Th%(Wr|KZBGTM4yxkA5CFdAj8=QSrT$fKW#tweUFqr0TZ9D~a5lF{)%-tTGMK^2tz(y2v$i%V8XAxIywrZCp=)83p(zIk6@S5AWl|Oa2hF`~~^W zI;KeOSkw1O#TiQ8;U7OPXjZM|KrnN}9arP)m0v$c|L)lF`j_rpG(zW1Qjv$=^|p*f z>)Na{D&>n`jOWMwB^TM}slgTEcjxTlUby89j1)|6ydRfWERn3|7Zd2&e7?!K&5G$x z`5U3uFtn4~SZq|LjFVrz$3iln-+ucY4q$BC{CSm7Xe5c1J<=%Oagztj{ifpaZk_bQ z9Sb-LaQMKp-qJA*bP6DzgE3`}*i1o3GKmo2pn@dj0;He}F=BgINo};6gQF8!n0ULZ zL>kC0nPSFzlcB7p41doao2F7%6IUTi_+!L`MM4o*#Y#0v~WiO8uSeAUNp=vA2KaR&=jNR2iVwG>7t%sG2x_~yXzY)7K& zk3p+O0AFZ1eu^T3s};B%6TpJ6h-Y%B^*zT&SN7C=N;g|#dGIVMSOru3iv^SvO>h4M=t-N1GSLLDqVTcgurco6)3&XpU!FP6Hlrmj}f$ zp95;b)>M~`kxuZF3r~a!rMf4|&1=uMG$;h^g=Kl;H&Np-(pFT9FF@++MMEx3RBsK?AU0fPk-#mdR)Wdkj)`>ZMl#^<80kM87VvsI3r_c@_vX=fdQ`_9-d(xiI z4K;1y1TiPj_RPh*SpDI7U~^QQ?%0&!$Sh#?x_@;ag)P}ZkAik{_WPB4rHyW#%>|Gs zdbhyt=qQPA7`?h2_8T;-E6HI#im9K>au*(j4;kzwMSLgo6u*}-K`$_Gzgu&XE)udQ zmQ72^eZd|vzI)~!20JV-v-T|<4@7ruqrj|o4=JJPlybwMg;M$Ud7>h6g()CT@wXm` zbq=A(t;RJ^{Xxi*Ff~!|3!-l_PS{AyNAU~t{h;(N(PXMEf^R(B+ZVX3 z8y0;0A8hJYp@g+c*`>eTA|3Tgv9U8#BDTO9@a@gVMDxr(fVaEqL1tl?md{v^j8aUv zm&%PX4^|rX|?E4^CkplWWNv*OKM>DxPa z!RJ)U^0-WJMi)Ksc!^ixOtw^egoAZZ2Cg;X7(5xZG7yL_;UJ#yp*ZD-;I^Z9qkP`} zwCTs0*%rIVF1sgLervtnUo&brwz?6?PXRuOCS*JI-WL6GKy7-~yi0giTEMmDs_-UX zo=+nFrW_EfTg>oY72_4Z0*uG>MnXP=c0VpT&*|rvv1iStW;*^={rP1y?Hv+6R6bxFMkxpWkJ>m7Ba{>zc_q zEefC3jsXdyS5??Mz7IET$Kft|EMNJIv7Ny8ZOcKnzf`K5Cd)&`-fTY#W&jnV0l2vt z?Gqhic}l}mCv1yUEy$%DP}4AN;36$=7aNI^*AzV(eYGeJ(Px-j<^gSDp5dBAv2#?; zcMXv#aj>%;MiG^q^$0MSg-(uTl!xm49dH!{X0){Ew7ThWV~Gtj7h%ZD zVN-R-^7Cf0VH!8O)uUHPL2mO2tmE*cecwQv_5CzWeh)ykX8r5Hi`ehYo)d{Jnh&3p z9ndXT$OW51#H5cFKa76c<%nNkP~FU93b5h-|Cb}ScHs@4Q#|}byWg;KDMJ#|l zE=MKD*F@HDBcX@~QJH%56eh~jfPO-uKm}~t7VkHxHT;)4sd+?Wc4* z>CyR*{w@4(gnYRdFq=^(#-ytb^5ESD?x<0Skhb%Pt?npNW1m+Nv`tr9+qN<3H1f<% zZvNEqyK5FgPsQ`QIu9P0x_}wJR~^CotL|n zk?dn;tLRw9jJTur4uWoX6iMm914f0AJfB@C74a;_qRrAP4E7l890P&{v<}>_&GLrW z)klculcg`?zJO~4;BBAa=POU%aN|pmZJn2{hA!d!*lwO%YSIzv8bTJ}=nhC^n}g(ld^rn#kq9Z3)z`k9lvV>y#!F4e{5c$tnr9M{V)0m(Z< z#88vX6-AW7T2UUwW`g<;8I$Jb!R%z@rCcGT)-2k7&x9kZZT66}Ztid~6t0jKb&9mm zpa}LCb`bz`{MzpZR#E*QuBiZXI#<`5qxx=&LMr-UUf~@dRk}YI2hbMsAMWOmDzYtm zjof16D=mc`^B$+_bCG$$@R0t;e?~UkF?7<(vkb70*EQB1rfUWXh$j)R2)+dNAH5%R zEBs^?N;UMdy}V};59Gu#0$q53$}|+q7CIGg_w_WlvE}AdqoS<7DY1LWS9?TrfmcvT zaypmplwn=P4;a8-%l^e?f`OpGb}%(_mFsL&GywhyN(-VROj`4~V~9bGv%UhcA|YW% zs{;nh@aDX11y^HOFXB$a7#Sr3cEtNd4eLm@Y#fc&j)TGvbbMwze zXtekX_wJqxe4NhuW$r}cNy|L{V=t#$%SuWEW)YZTH|!iT79k#?632OFse{+BT_gau zJwQcbH{b}dzKO?^dV&3nTILYlGw{27UJ72ZN){BILd_HV_s$WfI2DC<9LIHFmtyw? zQ;?MuK7g%Ym+4e^W#5}WDLpko%jPOC=aN)3!=8)s#Rnercak&b3ESRX3z{xfKBF8L z5%CGkFmGO@x?_mPGlpEej!3!AMddChabyf~nJNZxx!D&{@xEb!TDyvqSj%Y5@A{}9 zRzoBn0?x}=krh{ok3Nn%e)#~uh;6jpezhA)ySb^b#E>73e*frBFu6IZ^D7Ii&rsiU z%jzygxT-n*joJpY4o&8UXr2s%j^Q{?e-voloX`4DQyEK+DmrZh8A$)iWL#NO9+Y@!sO2f@rI!@jN@>HOA< z?q2l{^%mY*PNx2FoX+A7X3N}(RV$B`g&N=e0uvAvEN1W^{*W?zT1i#fxuw10%~))J zjx#gxoVlXREWZf4hRkgdHx5V_S*;p-y%JtGgQ4}lnA~MBz-AFdxUxU1RIT$`sal|X zPB6sEVRjGbXIP0U+?rT|y5+ev&OMX*5C$n2SBPZr`jqzrmpVrNciR0e*Wm?fK6DY& zl(XQZ60yWXV-|Ps!A{EF;=_z(YAF=T(-MkJXUoX zI{UMQDAV2}Ya?EisdEW;@pE6dt;j0fg5oT2dxCi{wqWJ<)|SR6fxX~5CzblPGr8cb zUBVJ2CQd~3L?7yfTpLNbt)He1D>*KXI^GK%<`bq^cUq$Q@uJifG>p3LU(!H=C)aEL zenk7pVg}0{dKU}&l)Y2Y2eFMdS(JS0}oZUuVaf2+K*YFNGHB`^YGcIpnBlMhO7d4@vV zv(@N}(k#REdul8~fP+^F@ky*wt@~&|(&&meNO>rKDEnB{ykAZ}k>e@lad7to>Ao$B zz<1(L=#J*u4_LB=8w+*{KFK^u00NAmeNN7pr+Pf+N*Zl^dO{LM-hMHyP6N!~`24jd zXYP|Ze;dRXKdF2iJG$U{k=S86l@pytLx}$JFFs8e)*Vi?aVBtGJ3JZUj!~c{(rw5>vuRF$`^p!P8w1B=O!skwkO5yd4_XuG^QVF z`-r5K7(IPSiKQ2|U9+`@Js!g6sfJwAHVd|s?|mnC*q zp|B|z)(8+mxXyxQ{8Pg3F4|tdpgZZSoU4P&9I8)nHo1@)9_9u&NcT^FI)6|hsAZFk zZ+arl&@*>RXBf-OZxhZerOr&dN5LW9@gV=oGFbK*J+m#R-|e6(Loz(;g@T^*oO)0R zN`N=X46b{7yk5FZGr#5&n1!-@j@g02g|X>MOpF3#IjZ_4wg{dX+G9eqS+Es9@6nC7 zD9$NuVJI}6ZlwtUm5cCAiYv0(Yi{%eH+}t)!E^>^KxB5^L~a`4%1~5q6h>d;paC9c zTj0wTCKrhWf+F#5>EgX`sl%POl?oyCq0(w0xoL?L%)|Q7d|Hl92rUYAU#lc**I&^6p=4lNQPa0 znQ|A~i0ip@`B=FW-Q;zh?-wF;Wl5!+q3GXDu-x&}$gUO)NoO7^$BeEIrd~1Dh{Tr` z8s<(Bn@gZ(mkIGnmYh_ehXnq78QL$pNDi)|QcT*|GtS%nz1uKE+E{7jdEBp%h0}%r zD2|KmYGiPa4;md-t_m5YDz#c*oV_FqXd85d@eub?9N61QuYcb3CnVWpM(D-^|CmkL z(F}L&N7qhL2PCq)fRh}XO@U`Yn<?TNGR4L(mF7#4u29{i~@k;pLsgl({YW5`Mo+p=zZn3L*4{JU;++dG9 X@eDJUQo;Ye2mwlRs?y0|+_a0zY+Zo%Dkae}+MySoIppb75o?vUW_?)>@g{U2`ERQIXV zeY$JrWnMZ$QC<=ii4X|@0H8`si75jB(ElJb00HAB%>SlLR{!zO|C9P3zxw_U8?1d8uRZ=({Ga4shyN}3 zAK}WA(ds|``G4jA)9}Bt2Hy0+f3rV1E6b|@?hpGA=PI&r8)ah|)I2s(P5Ic*Ndhn^ z*T&j@gbCTv7+8rpYbR^Ty}1AY)YH;p!m948r#%7x^Z@_-w{pDl|1S4`EM3n_PaXvK z1JF)E3qy$qTj5Xs{jU9k=y%SQ0>8E$;x?p9ayU0bZZeo{5Z@&FKX>}s!0+^>C^D#z z>xsCPvxD3Z=dP}TTOSJhNTPyVt14VCQ9MQFN`rn!c&_p?&4<5_PGm4a;WS&1(!qKE z_H$;dDdiPQ!F_gsN`2>`X}$I=B;={R8%L~`>RyKcS$72ai$!2>d(YkciA^J0@X%G4 z4cu!%Ps~2JuJ8ex`&;Fa0NQOq_nDZ&X;^A=oc1&f#3P1(!5il>6?uK4QpEG8z0Rhu zvBJ+A9RV?z%v?!$=(vcH?*;vRs*+PPbOQ3cdPr5=tOcLqmfx@#hOqX0iN)wTTO21jH<>jpmwRIAGw7`a|sl?9y9zRBh>(_%| zF?h|P7}~RKj?HR+q|4U`CjRmV-$mLW>MScKnNXiv{vD3&2@*u)-6P@h0A`eeZ7}71 zK(w%@R<4lLt`O7fs1E)$5iGb~fPfJ?WxhY7c3Q>T-w#wT&zW522pH-B%r5v#5y^CF zcC30Se|`D2mY$hAlIULL%-PNXgbbpRHgn<&X3N9W!@BUk@9g*P5mz-YnZBb*-$zMM z7Qq}ic0mR8n{^L|=+diODdV}Q!gwr?y+2m=3HWwMq4z)DqYVg0J~^}-%7rMR@S1;9 z7GFj6K}i32X;3*$SmzB&HW{PJ55kT+EI#SsZf}bD7nW^Haf}_gXciYKX{QBxIPSx2Ma? zHQqgzZq!_{&zg{yxqv3xq8YV+`S}F6A>Gtl39_m;K4dA{pP$BW0oIXJ>jEQ!2V3A2 zdpoTxG&V=(?^q?ZTj2ZUpDUdMb)T?E$}CI>r@}PFPWD9@*%V6;4Ag>D#h>!s)=$0R zRXvdkZ%|c}ubej`jl?cS$onl9Tw52rBKT)kgyw~Xy%z62Lr%V6Y=f?2)J|bZJ5(Wx zmji`O;_B+*X@qe-#~`HFP<{8$w@z4@&`q^Q-Zk8JG3>WalhnW1cvnoVw>*R@c&|o8 zZ%w!{Z+MHeZ*OE4v*otkZqz11*s!#s^Gq>+o`8Z5 z^i-qzJLJh9!W-;SmFkR8HEZJWiXk$40i6)7 zZpr=k2lp}SasbM*Nbn3j$sn0;rUI;%EDbi7T1ZI4qL6PNNM2Y%6{LMIKW+FY_yF3) zSKQ2QSujzNMSL2r&bYs`|i2Dnn z=>}c0>a}>|uT!IiMOA~pVT~R@bGlm}Edf}Kq0?*Af6#mW9f9!}RjW7om0c9Qlp;yK z)=XQs(|6GCadQbWIhYF=rf{Y)sj%^Id-ARO0=O^Ad;Ph+ z0?$eE1xhH?{T$QI>0JP75`r)U_$#%K1^BQ8z#uciKf(C701&RyLQWBUp*Q7eyn76} z6JHpC9}R$J#(R0cDCkXoFSp;j6{x{b&0yE@P7{;pCEpKjS(+1RQy38`=&Yxo%F=3y zCPeefABp34U-s?WmU#JJw23dcC{sPPFc2#J$ZgEN%zod}J~8dLm*fx9f6SpO zn^Ww3bt9-r0XaT2a@Wpw;C23XM}7_14#%QpubrIw5aZtP+CqIFmsG4`Cm6rfxl9n5 z7=r2C-+lM2AB9X0T_`?EW&Byv&K?HS4QLoylJ|OAF z`8atBNTzJ&AQ!>sOo$?^0xj~D(;kS$`9zbEGd>f6r`NC3X`tX)sWgWUUOQ7w=$TO&*j;=u%25ay-%>3@81tGe^_z*C7pb9y*Ed^H3t$BIKH2o+olp#$q;)_ zfpjCb_^VFg5fU~K)nf*d*r@BCC>UZ!0&b?AGk_jTPXaSnCuW110wjHPPe^9R^;jo3 zwvzTl)C`Zl5}O2}3lec=hZ*$JnkW#7enKKc)(pM${_$9Hc=Sr_A9Biwe*Y=T?~1CK z6eZ9uPICjy-sMGbZl$yQmpB&`ouS8v{58__t0$JP%i3R&%QR3ianbZqDs<2#5FdN@n5bCn^ZtH992~5k(eA|8|@G9u`wdn7bnpg|@{m z^d6Y`*$Zf2Xr&|g%sai#5}Syvv(>Jnx&EM7-|Jr7!M~zdAyjt*xl;OLhvW-a%H1m0 z*x5*nb=R5u><7lyVpNAR?q@1U59 zO+)QWwL8t zyip?u_nI+K$uh{y)~}qj?(w0&=SE^8`_WMM zTybjG=999h38Yes7}-4*LJ7H)UE8{mE(6;8voE+TYY%33A>S6`G_95^5QHNTo_;Ao ztIQIZ_}49%{8|=O;isBZ?=7kfdF8_@azfoTd+hEJKWE!)$)N%HIe2cplaK`ry#=pV z0q{9w-`i0h@!R8K3GC{ivt{70IWG`EP|(1g7i_Q<>aEAT{5(yD z=!O?kq61VegV+st@XCw475j6vS)_z@efuqQgHQR1T4;|-#OLZNQJPV4k$AX1Uk8Lm z{N*b*ia=I+MB}kWpupJ~>!C@xEN#Wa7V+7{m4j8c?)ChV=D?o~sjT?0C_AQ7B-vxqX30s0I_`2$in86#`mAsT-w?j{&AL@B3$;P z31G4(lV|b}uSDCIrjk+M1R!X7s4Aabn<)zpgT}#gE|mIvV38^ODy@<&yflpCwS#fRf9ZX3lPV_?8@C5)A;T zqmouFLFk;qIs4rA=hh=GL~sCFsXHsqO6_y~*AFt939UYVBSx1s(=Kb&5;j7cSowdE;7()CC2|-i9Zz+_BIw8#ll~-tyH?F3{%`QCsYa*b#s*9iCc`1P1oC26?`g<9))EJ3%xz+O!B3 zZ7$j~To)C@PquR>a1+Dh>-a%IvH_Y7^ys|4o?E%3`I&ADXfC8++hAdZfzIT#%C+Jz z1lU~K_vAm0m8Qk}K$F>|>RPK%<1SI0(G+8q~H zAsjezyP+u!Se4q3GW)`h`NPSRlMoBjCzNPesWJwVTY!o@G8=(6I%4XHGaSiS3MEBK zhgGFv6Jc>L$4jVE!I?TQuwvz_%CyO!bLh94nqK11C2W$*aa2ueGopG8DnBICVUORP zgytv#)49fVXDaR$SukloYC3u7#5H)}1K21=?DKj^U)8G;MS)&Op)g^zR2($<>C*zW z;X7`hLxiIO#J`ANdyAOJle4V%ppa*(+0i3w;8i*BA_;u8gOO6)MY`ueq7stBMJTB; z-a0R>hT*}>z|Gg}@^zDL1MrH+2hsR8 zHc}*9IvuQC^Ju)^#Y{fOr(96rQNPNhxc;mH@W*m206>Lo<*SaaH?~8zg&f&%YiOEG zGiz?*CP>Bci}!WiS=zj#K5I}>DtpregpP_tfZtPa(N<%vo^#WCQ5BTv0vr%Z{)0q+ z)RbfHktUm|lg&U3YM%lMUM(fu}i#kjX9h>GYctkx9Mt_8{@s%!K_EI zScgwy6%_fR?CGJQtmgNAj^h9B#zmaMDWgH55pGuY1Gv7D z;8Psm(vEPiwn#MgJYu4Ty9D|h!?Rj0ddE|&L3S{IP%H4^N!m`60ZwZw^;eg4sk6K{ ziA^`Sbl_4~f&Oo%n;8Ye(tiAdlZKI!Z=|j$5hS|D$bDJ}p{gh$KN&JZYLUjv4h{NY zBJ>X9z!xfDGY z+oh_Z&_e#Q(-}>ssZfm=j$D&4W4FNy&-kAO1~#3Im;F)Nwe{(*75(p=P^VI?X0GFakfh+X-px4a%Uw@fSbmp9hM1_~R>?Z8+ ziy|e9>8V*`OP}4x5JjdWp}7eX;lVxp5qS}0YZek;SNmm7tEeSF*-dI)6U-A%m6YvCgM(}_=k#a6o^%-K4{`B1+}O4x zztDT%hVb;v#?j`lTvlFQ3aV#zkX=7;YFLS$uIzb0E3lozs5`Xy zi~vF+%{z9uLjKvKPhP%x5f~7-Gj+%5N`%^=yk*Qn{`> z;xj&ROY6g`iy2a@{O)V(jk&8#hHACVDXey5a+KDod_Z&}kHM}xt7}Md@pil{2x7E~ zL$k^d2@Ec2XskjrN+IILw;#7((abu;OJii&v3?60x>d_Ma(onIPtcVnX@ELF0aL?T zSmWiL3(dOFkt!x=1O!_0n(cAzZW+3nHJ{2S>tgSK?~cFha^y(l@-Mr2W$%MN{#af8J;V*>hdq!gx=d0h$T7l}>91Wh07)9CTX zh2_ZdQCyFOQ)l(}gft0UZG`Sh2`x-w`5vC2UD}lZs*5 zG76$akzn}Xi))L3oGJ75#pcN=cX3!=57$Ha=hQ2^lwdyU#a}4JJOz6ddR%zae%#4& za)bFj)z=YQela(F#Y|Q#dp}PJghITwXouVaMq$BM?K%cXn9^Y@g43$=O)F&ZlOUom zJiad#dea;-eywBA@e&D6Pdso1?2^(pXiN91?jvcaUyYoKUmvl5G9e$W!okWe*@a<^ z8cQQ6cNSf+UPDx%?_G4aIiybZHHagF{;IcD(dPO!#=u zWfqLcPc^+7Uu#l(Bpxft{*4lv#*u7X9AOzDO z1D9?^jIo}?%iz(_dwLa{ex#T}76ZfN_Z-hwpus9y+4xaUu9cX}&P{XrZVWE{1^0yw zO;YhLEW!pJcbCt3L8~a7>jsaN{V3>tz6_7`&pi%GxZ=V3?3K^U+*ryLSb)8^IblJ0 zSRLNDvIxt)S}g30?s_3NX>F?NKIGrG_zB9@Z>uSW3k2es_H2kU;Rnn%j5qP)!XHKE zPB2mHP~tLCg4K_vH$xv`HbRsJwbZMUV(t=ez;Ec(vyHH)FbfLg`c61I$W_uBB>i^r z&{_P;369-&>23R%qNIULe=1~T$(DA`ev*EWZ6j(B$(te}x1WvmIll21zvygkS%vwG zzkR6Z#RKA2!z!C%M!O>!=Gr0(J0FP=-MN=5t-Ir)of50y10W}j`GtRCsXBakrKtG& zazmITDJMA0C51&BnLY)SY9r)NVTMs);1<=oosS9g31l{4ztjD3#+2H7u_|66b|_*O z;Qk6nalpqdHOjx|K&vUS_6ITgGll;TdaN*ta=M_YtyC)I9Tmr~VaPrH2qb6sd~=AcIxV+%z{E&0@y=DPArw zdV7z(G1hBx7hd{>(cr43^WF%4Y@PXZ?wPpj{OQ#tvc$pABJbvPGvdR`cAtHn)cSEV zrpu}1tJwQ3y!mSmH*uz*x0o|CS<^w%&KJzsj~DU0cLQUxk5B!hWE>aBkjJle8z~;s z-!A=($+}Jq_BTK5^B!`R>!MulZN)F=iXXeUd0w5lUsE5VP*H*oCy(;?S$p*TVvTxwAeWFB$jHyb0593)$zqalVlDX=GcCN1gU0 zlgU)I$LcXZ8Oyc2TZYTPu@-;7<4YYB-``Qa;IDcvydIA$%kHhJKV^m*-zxcvU4viy&Kr5GVM{IT>WRywKQ9;>SEiQD*NqplK-KK4YR`p0@JW)n_{TU3bt0 zim%;(m1=#v2}zTps=?fU5w^(*y)xT%1vtQH&}50ZF!9YxW=&7*W($2kgKyz1mUgfs zfV<*XVVIFnohW=|j+@Kfo!#liQR^x>2yQdrG;2o8WZR+XzU_nG=Ed2rK?ntA;K5B{ z>M8+*A4!Jm^Bg}aW?R?6;@QG@uQ8&oJ{hFixcfEnJ4QH?A4>P=q29oDGW;L;= z9-a0;g%c`C+Ai!UmK$NC*4#;Jp<1=TioL=t^YM)<<%u#hnnfSS`nq63QKGO1L8RzX z@MFDqs1z ztYmxDl@LU)5acvHk)~Z`RW7=aJ_nGD!mOSYD>5Odjn@TK#LY{jf?+piB5AM-CAoT_ z?S-*q7}wyLJzK>N%eMPuFgN)Q_otKP;aqy=D5f!7<=n(lNkYRXVpkB{TAYLYg{|(jtRqYmg$xH zjmq?B(RE4 zQx^~Pt}gxC2~l=K$$-sYy_r$CO(d=+b3H1MB*y_5g6WLaWTXn+TKQ|hNY^>Mp6k*$ zwkovomhu776vQATqT4blf~g;TY(MWCrf^^yfWJvSAB$p5l;jm@o#=!lqw+Lqfq>X= z$6~kxfm7`3q4zUEB;u4qa#BdJxO!;xGm)wwuisj{0y2x{R(IGMrsIzDY9LW>m!Y`= z04sx3IjnYvL<4JqxQ8f7qYd0s2Ig%`ytYPEMKI)s(LD}D@EY>x`VFtqvnADNBdeao zC96X+MxnwKmjpg{U&gP3HE}1=s!lv&D{6(g_lzyF3A`7Jn*&d_kL<;dAFx!UZ>hB8 z5A*%LsAn;VLp>3${0>M?PSQ)9s3}|h2e?TG4_F{}{Cs>#3Q*t$(CUc}M)I}8cPF6% z=+h(Kh^8)}gj(0}#e7O^FQ6`~fd1#8#!}LMuo3A0bN`o}PYsm!Y}sdOz$+Tegc=qT z8x`PH$7lvnhJp{kHWb22l;@7B7|4yL4UOOVM0MP_>P%S1Lnid)+k9{+3D+JFa#Pyf zhVc#&df87APl4W9X)F3pGS>@etfl=_E5tBcVoOfrD4hmVeTY-cj((pkn%n@EgN{0f zwb_^Rk0I#iZuHK!l*lN`ceJn(sI{$Fq6nN& zE<-=0_2WN}m+*ivmIOxB@#~Q-cZ>l136w{#TIJe478`KE7@=a{>SzPHsKLzYAyBQO zAtuuF$-JSDy_S@6GW0MOE~R)b;+0f%_NMrW(+V#c_d&U8Z9+ec4=HmOHw?gdjF(Lu zzra83M_BoO-1b3;9`%&DHfuUY)6YDV21P$C!Rc?mv&{lx#f8oc6?0?x zK08{WP65?#>(vPfA-c=MCY|%*1_<3D4NX zeVTi-JGl2uP_2@0F{G({pxQOXt_d{g_CV6b?jNpfUG9;8yle-^4KHRvZs-_2siata zt+d_T@U$&t*xaD22(fH(W1r$Mo?3dc%Tncm=C6{V9y{v&VT#^1L04vDrLM9qBoZ4@ z6DBN#m57hX7$C(=#$Y5$bJmwA$T8jKD8+6A!-IJwA{WOfs%s}yxUw^?MRZjF$n_KN z6`_bGXcmE#5e4Ym)aQJ)xg3Pg0@k`iGuHe?f(5LtuzSq=nS^5z>vqU0EuZ&75V%Z{ zYyhRLN^)$c6Ds{f7*FBpE;n5iglx5PkHfWrj3`x^j^t z7ntuV`g!9Xg#^3!x)l*}IW=(Tz3>Y5l4uGaB&lz{GDjm2D5S$CExLT`I1#n^lBH7Y zDgpMag@`iETKAI=p<5E#LTkwzVR@=yY|uBVI1HG|8h+d;G-qfuj}-ZR6fN>EfCCW z9~wRQoAPEa#aO?3h?x{YvV*d+NtPkf&4V0k4|L=uj!U{L+oLa(z#&iuhJr3-PjO3R z5s?=nn_5^*^Rawr>>Nr@K(jwkB#JK-=+HqwfdO<+P5byeim)wvqGlP-P|~Nse8=XF zz`?RYB|D6SwS}C+YQv+;}k6$-%D(@+t14BL@vM z2q%q?f6D-A5s$_WY3{^G0F131bbh|g!}#BKw=HQ7mx;Dzg4Z*bTLQSfo{ed{4}NZW zfrRm^Ca$rlE{Ue~uYv>R9{3smwATcdM_6+yWIO z*ZRH~uXE@#p$XTbCt5j7j2=86e{9>HIB6xDzV+vAo&B?KUiMP|ttOElepnl%|DPqL b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/frontend/dist/manifest.json b/frontend/dist/manifest.json deleted file mode 100644 index 080d6c77a..000000000 --- a/frontend/dist/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/frontend/dist/pdf.worker.js b/frontend/dist/pdf.worker.js deleted file mode 100644 index ac3d027f8..000000000 --- a/frontend/dist/pdf.worker.js +++ /dev/null @@ -1,58353 +0,0 @@ -/** - * @licstart The following is the entire license notice for the - * JavaScript code in this page - * - * Copyright 2023 Mozilla Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @licend The above is the entire license notice for the - * JavaScript code in this page - */ - -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = root.pdfjsWorker = factory(); - else if(typeof define === 'function' && define.amd) - define("pdfjs-dist/build/pdf.worker", [], () => { return (root.pdfjsWorker = factory()); }); - else if(typeof exports === 'object') - exports["pdfjs-dist/build/pdf.worker"] = root.pdfjsWorker = factory(); - else - root["pdfjs-dist/build/pdf.worker"] = root.pdfjsWorker = factory(); -})(globalThis, () => { -return /******/ (() => { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ([ -/* 0 */, -/* 1 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.WorkerTask = exports.WorkerMessageHandler = void 0; -var _util = __w_pdfjs_require__(2); -var _core_utils = __w_pdfjs_require__(3); -var _primitives = __w_pdfjs_require__(4); -var _pdf_manager = __w_pdfjs_require__(6); -var _annotation = __w_pdfjs_require__(10); -var _cleanup_helper = __w_pdfjs_require__(68); -var _writer = __w_pdfjs_require__(73); -var _message_handler = __w_pdfjs_require__(104); -var _worker_stream = __w_pdfjs_require__(105); -var _struct_tree = __w_pdfjs_require__(72); -class WorkerTask { - constructor(name) { - this.name = name; - this.terminated = false; - this._capability = new _util.PromiseCapability(); - } - get finished() { - return this._capability.promise; - } - finish() { - this._capability.resolve(); - } - terminate() { - this.terminated = true; - } - ensureNotTerminated() { - if (this.terminated) { - throw new Error("Worker task was terminated"); - } - } -} -exports.WorkerTask = WorkerTask; -class WorkerMessageHandler { - static setup(handler, port) { - let testMessageProcessed = false; - handler.on("test", function (data) { - if (testMessageProcessed) { - return; - } - testMessageProcessed = true; - handler.send("test", data instanceof Uint8Array); - }); - handler.on("configure", function (data) { - (0, _util.setVerbosityLevel)(data.verbosity); - }); - handler.on("GetDocRequest", function (data) { - return WorkerMessageHandler.createDocumentHandler(data, port); - }); - } - static createDocumentHandler(docParams, port) { - let pdfManager; - let terminated = false; - let cancelXHRs = null; - const WorkerTasks = new Set(); - const verbosity = (0, _util.getVerbosityLevel)(); - const { - docId, - apiVersion - } = docParams; - const workerVersion = '3.11.174'; - if (apiVersion !== workerVersion) { - throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`); - } - const enumerableProperties = []; - for (const property in []) { - enumerableProperties.push(property); - } - if (enumerableProperties.length) { - throw new Error("The `Array.prototype` contains unexpected enumerable properties: " + enumerableProperties.join(", ") + "; thus breaking e.g. `for...in` iteration of `Array`s."); - } - const workerHandlerName = docId + "_worker"; - let handler = new _message_handler.MessageHandler(workerHandlerName, docId, port); - function ensureNotTerminated() { - if (terminated) { - throw new Error("Worker was terminated"); - } - } - function startWorkerTask(task) { - WorkerTasks.add(task); - } - function finishWorkerTask(task) { - task.finish(); - WorkerTasks.delete(task); - } - async function loadDocument(recoveryMode) { - await pdfManager.ensureDoc("checkHeader"); - await pdfManager.ensureDoc("parseStartXRef"); - await pdfManager.ensureDoc("parse", [recoveryMode]); - await pdfManager.ensureDoc("checkFirstPage", [recoveryMode]); - await pdfManager.ensureDoc("checkLastPage", [recoveryMode]); - const isPureXfa = await pdfManager.ensureDoc("isPureXfa"); - if (isPureXfa) { - const task = new WorkerTask("loadXfaFonts"); - startWorkerTask(task); - await Promise.all([pdfManager.loadXfaFonts(handler, task).catch(reason => {}).then(() => finishWorkerTask(task)), pdfManager.loadXfaImages()]); - } - const [numPages, fingerprints] = await Promise.all([pdfManager.ensureDoc("numPages"), pdfManager.ensureDoc("fingerprints")]); - const htmlForXfa = isPureXfa ? await pdfManager.ensureDoc("htmlForXfa") : null; - return { - numPages, - fingerprints, - htmlForXfa - }; - } - function getPdfManager({ - data, - password, - disableAutoFetch, - rangeChunkSize, - length, - docBaseUrl, - enableXfa, - evaluatorOptions - }) { - const pdfManagerArgs = { - source: null, - disableAutoFetch, - docBaseUrl, - docId, - enableXfa, - evaluatorOptions, - handler, - length, - password, - rangeChunkSize - }; - const pdfManagerCapability = new _util.PromiseCapability(); - let newPdfManager; - if (data) { - try { - pdfManagerArgs.source = data; - newPdfManager = new _pdf_manager.LocalPdfManager(pdfManagerArgs); - pdfManagerCapability.resolve(newPdfManager); - } catch (ex) { - pdfManagerCapability.reject(ex); - } - return pdfManagerCapability.promise; - } - let pdfStream, - cachedChunks = []; - try { - pdfStream = new _worker_stream.PDFWorkerStream(handler); - } catch (ex) { - pdfManagerCapability.reject(ex); - return pdfManagerCapability.promise; - } - const fullRequest = pdfStream.getFullReader(); - fullRequest.headersReady.then(function () { - if (!fullRequest.isRangeSupported) { - return; - } - pdfManagerArgs.source = pdfStream; - pdfManagerArgs.length = fullRequest.contentLength; - pdfManagerArgs.disableAutoFetch ||= fullRequest.isStreamingSupported; - newPdfManager = new _pdf_manager.NetworkPdfManager(pdfManagerArgs); - for (const chunk of cachedChunks) { - newPdfManager.sendProgressiveData(chunk); - } - cachedChunks = []; - pdfManagerCapability.resolve(newPdfManager); - cancelXHRs = null; - }).catch(function (reason) { - pdfManagerCapability.reject(reason); - cancelXHRs = null; - }); - let loaded = 0; - const flushChunks = function () { - const pdfFile = (0, _core_utils.arrayBuffersToBytes)(cachedChunks); - if (length && pdfFile.length !== length) { - (0, _util.warn)("reported HTTP length is different from actual"); - } - try { - pdfManagerArgs.source = pdfFile; - newPdfManager = new _pdf_manager.LocalPdfManager(pdfManagerArgs); - pdfManagerCapability.resolve(newPdfManager); - } catch (ex) { - pdfManagerCapability.reject(ex); - } - cachedChunks = []; - }; - new Promise(function (resolve, reject) { - const readChunk = function ({ - value, - done - }) { - try { - ensureNotTerminated(); - if (done) { - if (!newPdfManager) { - flushChunks(); - } - cancelXHRs = null; - return; - } - loaded += value.byteLength; - if (!fullRequest.isStreamingSupported) { - handler.send("DocProgress", { - loaded, - total: Math.max(loaded, fullRequest.contentLength || 0) - }); - } - if (newPdfManager) { - newPdfManager.sendProgressiveData(value); - } else { - cachedChunks.push(value); - } - fullRequest.read().then(readChunk, reject); - } catch (e) { - reject(e); - } - }; - fullRequest.read().then(readChunk, reject); - }).catch(function (e) { - pdfManagerCapability.reject(e); - cancelXHRs = null; - }); - cancelXHRs = function (reason) { - pdfStream.cancelAllRequests(reason); - }; - return pdfManagerCapability.promise; - } - function setupDoc(data) { - function onSuccess(doc) { - ensureNotTerminated(); - handler.send("GetDoc", { - pdfInfo: doc - }); - } - function onFailure(ex) { - ensureNotTerminated(); - if (ex instanceof _util.PasswordException) { - const task = new WorkerTask(`PasswordException: response ${ex.code}`); - startWorkerTask(task); - handler.sendWithPromise("PasswordRequest", ex).then(function ({ - password - }) { - finishWorkerTask(task); - pdfManager.updatePassword(password); - pdfManagerReady(); - }).catch(function () { - finishWorkerTask(task); - handler.send("DocException", ex); - }); - } else if (ex instanceof _util.InvalidPDFException || ex instanceof _util.MissingPDFException || ex instanceof _util.UnexpectedResponseException || ex instanceof _util.UnknownErrorException) { - handler.send("DocException", ex); - } else { - handler.send("DocException", new _util.UnknownErrorException(ex.message, ex.toString())); - } - } - function pdfManagerReady() { - ensureNotTerminated(); - loadDocument(false).then(onSuccess, function (reason) { - ensureNotTerminated(); - if (!(reason instanceof _core_utils.XRefParseException)) { - onFailure(reason); - return; - } - pdfManager.requestLoadedStream().then(function () { - ensureNotTerminated(); - loadDocument(true).then(onSuccess, onFailure); - }); - }); - } - ensureNotTerminated(); - getPdfManager(data).then(function (newPdfManager) { - if (terminated) { - newPdfManager.terminate(new _util.AbortException("Worker was terminated.")); - throw new Error("Worker was terminated"); - } - pdfManager = newPdfManager; - pdfManager.requestLoadedStream(true).then(stream => { - handler.send("DataLoaded", { - length: stream.bytes.byteLength - }); - }); - }).then(pdfManagerReady, onFailure); - } - handler.on("GetPage", function (data) { - return pdfManager.getPage(data.pageIndex).then(function (page) { - return Promise.all([pdfManager.ensure(page, "rotate"), pdfManager.ensure(page, "ref"), pdfManager.ensure(page, "userUnit"), pdfManager.ensure(page, "view")]).then(function ([rotate, ref, userUnit, view]) { - return { - rotate, - ref, - userUnit, - view - }; - }); - }); - }); - handler.on("GetPageIndex", function (data) { - const pageRef = _primitives.Ref.get(data.num, data.gen); - return pdfManager.ensureCatalog("getPageIndex", [pageRef]); - }); - handler.on("GetDestinations", function (data) { - return pdfManager.ensureCatalog("destinations"); - }); - handler.on("GetDestination", function (data) { - return pdfManager.ensureCatalog("getDestination", [data.id]); - }); - handler.on("GetPageLabels", function (data) { - return pdfManager.ensureCatalog("pageLabels"); - }); - handler.on("GetPageLayout", function (data) { - return pdfManager.ensureCatalog("pageLayout"); - }); - handler.on("GetPageMode", function (data) { - return pdfManager.ensureCatalog("pageMode"); - }); - handler.on("GetViewerPreferences", function (data) { - return pdfManager.ensureCatalog("viewerPreferences"); - }); - handler.on("GetOpenAction", function (data) { - return pdfManager.ensureCatalog("openAction"); - }); - handler.on("GetAttachments", function (data) { - return pdfManager.ensureCatalog("attachments"); - }); - handler.on("GetDocJSActions", function (data) { - return pdfManager.ensureCatalog("jsActions"); - }); - handler.on("GetPageJSActions", function ({ - pageIndex - }) { - return pdfManager.getPage(pageIndex).then(function (page) { - return pdfManager.ensure(page, "jsActions"); - }); - }); - handler.on("GetOutline", function (data) { - return pdfManager.ensureCatalog("documentOutline"); - }); - handler.on("GetOptionalContentConfig", function (data) { - return pdfManager.ensureCatalog("optionalContentConfig"); - }); - handler.on("GetPermissions", function (data) { - return pdfManager.ensureCatalog("permissions"); - }); - handler.on("GetMetadata", function (data) { - return Promise.all([pdfManager.ensureDoc("documentInfo"), pdfManager.ensureCatalog("metadata")]); - }); - handler.on("GetMarkInfo", function (data) { - return pdfManager.ensureCatalog("markInfo"); - }); - handler.on("GetData", function (data) { - return pdfManager.requestLoadedStream().then(function (stream) { - return stream.bytes; - }); - }); - handler.on("GetAnnotations", function ({ - pageIndex, - intent - }) { - return pdfManager.getPage(pageIndex).then(function (page) { - const task = new WorkerTask(`GetAnnotations: page ${pageIndex}`); - startWorkerTask(task); - return page.getAnnotationsData(handler, task, intent).then(data => { - finishWorkerTask(task); - return data; - }, reason => { - finishWorkerTask(task); - throw reason; - }); - }); - }); - handler.on("GetFieldObjects", function (data) { - return pdfManager.ensureDoc("fieldObjects"); - }); - handler.on("HasJSActions", function (data) { - return pdfManager.ensureDoc("hasJSActions"); - }); - handler.on("GetCalculationOrderIds", function (data) { - return pdfManager.ensureDoc("calculationOrderIds"); - }); - handler.on("SaveDocument", async function ({ - isPureXfa, - numPages, - annotationStorage, - filename - }) { - const globalPromises = [pdfManager.requestLoadedStream(), pdfManager.ensureCatalog("acroForm"), pdfManager.ensureCatalog("acroFormRef"), pdfManager.ensureDoc("startXRef"), pdfManager.ensureDoc("xref"), pdfManager.ensureDoc("linearization"), pdfManager.ensureCatalog("structTreeRoot")]; - const promises = []; - const newAnnotationsByPage = !isPureXfa ? (0, _core_utils.getNewAnnotationsMap)(annotationStorage) : null; - const [stream, acroForm, acroFormRef, startXRef, xref, linearization, _structTreeRoot] = await Promise.all(globalPromises); - const catalogRef = xref.trailer.getRaw("Root") || null; - let structTreeRoot; - if (newAnnotationsByPage) { - if (!_structTreeRoot) { - if (await _struct_tree.StructTreeRoot.canCreateStructureTree({ - catalogRef, - pdfManager, - newAnnotationsByPage - })) { - structTreeRoot = null; - } - } else if (await _structTreeRoot.canUpdateStructTree({ - pdfManager, - newAnnotationsByPage - })) { - structTreeRoot = _structTreeRoot; - } - const imagePromises = _annotation.AnnotationFactory.generateImages(annotationStorage.values(), xref, pdfManager.evaluatorOptions.isOffscreenCanvasSupported); - const newAnnotationPromises = structTreeRoot === undefined ? promises : []; - for (const [pageIndex, annotations] of newAnnotationsByPage) { - newAnnotationPromises.push(pdfManager.getPage(pageIndex).then(page => { - const task = new WorkerTask(`Save (editor): page ${pageIndex}`); - return page.saveNewAnnotations(handler, task, annotations, imagePromises).finally(function () { - finishWorkerTask(task); - }); - })); - } - if (structTreeRoot === null) { - promises.push(Promise.all(newAnnotationPromises).then(async newRefs => { - await _struct_tree.StructTreeRoot.createStructureTree({ - newAnnotationsByPage, - xref, - catalogRef, - pdfManager, - newRefs - }); - return newRefs; - })); - } else if (structTreeRoot) { - promises.push(Promise.all(newAnnotationPromises).then(async newRefs => { - await structTreeRoot.updateStructureTree({ - newAnnotationsByPage, - pdfManager, - newRefs - }); - return newRefs; - })); - } - } - if (isPureXfa) { - promises.push(pdfManager.serializeXfaData(annotationStorage)); - } else { - for (let pageIndex = 0; pageIndex < numPages; pageIndex++) { - promises.push(pdfManager.getPage(pageIndex).then(function (page) { - const task = new WorkerTask(`Save: page ${pageIndex}`); - return page.save(handler, task, annotationStorage).finally(function () { - finishWorkerTask(task); - }); - })); - } - } - const refs = await Promise.all(promises); - let newRefs = []; - let xfaData = null; - if (isPureXfa) { - xfaData = refs[0]; - if (!xfaData) { - return stream.bytes; - } - } else { - newRefs = refs.flat(2); - if (newRefs.length === 0) { - return stream.bytes; - } - } - const needAppearances = acroFormRef && acroForm instanceof _primitives.Dict && newRefs.some(ref => ref.needAppearances); - const xfa = acroForm instanceof _primitives.Dict && acroForm.get("XFA") || null; - let xfaDatasetsRef = null; - let hasXfaDatasetsEntry = false; - if (Array.isArray(xfa)) { - for (let i = 0, ii = xfa.length; i < ii; i += 2) { - if (xfa[i] === "datasets") { - xfaDatasetsRef = xfa[i + 1]; - hasXfaDatasetsEntry = true; - } - } - if (xfaDatasetsRef === null) { - xfaDatasetsRef = xref.getNewTemporaryRef(); - } - } else if (xfa) { - (0, _util.warn)("Unsupported XFA type."); - } - let newXrefInfo = Object.create(null); - if (xref.trailer) { - const infoObj = Object.create(null); - const xrefInfo = xref.trailer.get("Info") || null; - if (xrefInfo instanceof _primitives.Dict) { - xrefInfo.forEach((key, value) => { - if (typeof value === "string") { - infoObj[key] = (0, _util.stringToPDFString)(value); - } - }); - } - newXrefInfo = { - rootRef: catalogRef, - encryptRef: xref.trailer.getRaw("Encrypt") || null, - newRef: xref.getNewTemporaryRef(), - infoRef: xref.trailer.getRaw("Info") || null, - info: infoObj, - fileIds: xref.trailer.get("ID") || null, - startXRef: linearization ? startXRef : xref.lastXRefStreamPos ?? startXRef, - filename - }; - } - return (0, _writer.incrementalUpdate)({ - originalData: stream.bytes, - xrefInfo: newXrefInfo, - newRefs, - xref, - hasXfa: !!xfa, - xfaDatasetsRef, - hasXfaDatasetsEntry, - needAppearances, - acroFormRef, - acroForm, - xfaData - }).finally(() => { - xref.resetNewTemporaryRef(); - }); - }); - handler.on("GetOperatorList", function (data, sink) { - const pageIndex = data.pageIndex; - pdfManager.getPage(pageIndex).then(function (page) { - const task = new WorkerTask(`GetOperatorList: page ${pageIndex}`); - startWorkerTask(task); - const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0; - page.getOperatorList({ - handler, - sink, - task, - intent: data.intent, - cacheKey: data.cacheKey, - annotationStorage: data.annotationStorage - }).then(function (operatorListInfo) { - finishWorkerTask(task); - if (start) { - (0, _util.info)(`page=${pageIndex + 1} - getOperatorList: time=` + `${Date.now() - start}ms, len=${operatorListInfo.length}`); - } - sink.close(); - }, function (reason) { - finishWorkerTask(task); - if (task.terminated) { - return; - } - sink.error(reason); - }); - }); - }); - handler.on("GetTextContent", function (data, sink) { - const { - pageIndex, - includeMarkedContent, - disableNormalization - } = data; - pdfManager.getPage(pageIndex).then(function (page) { - const task = new WorkerTask("GetTextContent: page " + pageIndex); - startWorkerTask(task); - const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0; - page.extractTextContent({ - handler, - task, - sink, - includeMarkedContent, - disableNormalization - }).then(function () { - finishWorkerTask(task); - if (start) { - (0, _util.info)(`page=${pageIndex + 1} - getTextContent: time=` + `${Date.now() - start}ms`); - } - sink.close(); - }, function (reason) { - finishWorkerTask(task); - if (task.terminated) { - return; - } - sink.error(reason); - }); - }); - }); - handler.on("GetStructTree", function (data) { - return pdfManager.getPage(data.pageIndex).then(function (page) { - return pdfManager.ensure(page, "getStructTree"); - }); - }); - handler.on("FontFallback", function (data) { - return pdfManager.fontFallback(data.id, handler); - }); - handler.on("Cleanup", function (data) { - return pdfManager.cleanup(true); - }); - handler.on("Terminate", function (data) { - terminated = true; - const waitOn = []; - if (pdfManager) { - pdfManager.terminate(new _util.AbortException("Worker was terminated.")); - const cleanupPromise = pdfManager.cleanup(); - waitOn.push(cleanupPromise); - pdfManager = null; - } else { - (0, _cleanup_helper.clearGlobalCaches)(); - } - if (cancelXHRs) { - cancelXHRs(new _util.AbortException("Worker was terminated.")); - } - for (const task of WorkerTasks) { - waitOn.push(task.finished); - task.terminate(); - } - return Promise.all(waitOn).then(function () { - handler.destroy(); - handler = null; - }); - }); - handler.on("Ready", function (data) { - setupDoc(docParams); - docParams = null; - }); - return workerHandlerName; - } - static initializeFromPort(port) { - const handler = new _message_handler.MessageHandler("worker", "main", port); - WorkerMessageHandler.setup(handler, port); - handler.send("ready", null); - } -} -exports.WorkerMessageHandler = WorkerMessageHandler; -function isMessagePort(maybePort) { - return typeof maybePort.postMessage === "function" && "onmessage" in maybePort; -} -if (typeof window === "undefined" && !_util.isNodeJS && typeof self !== "undefined" && isMessagePort(self)) { - WorkerMessageHandler.initializeFromPort(self); -} - -/***/ }), -/* 2 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.RenderingIntentFlag = exports.PromiseCapability = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.MAX_IMAGE_SIZE_TO_CACHE = exports.LINE_FACTOR = exports.LINE_DESCENT_FACTOR = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FeatureTest = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.BASELINE_FACTOR = exports.AnnotationType = exports.AnnotationReplyType = exports.AnnotationPrefix = exports.AnnotationMode = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationEditorType = exports.AnnotationEditorPrefix = exports.AnnotationEditorParamsType = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0; -exports.assert = assert; -exports.bytesToString = bytesToString; -exports.createValidAbsoluteUrl = createValidAbsoluteUrl; -exports.getModificationDate = getModificationDate; -exports.getUuid = getUuid; -exports.getVerbosityLevel = getVerbosityLevel; -exports.info = info; -exports.isArrayBuffer = isArrayBuffer; -exports.isArrayEqual = isArrayEqual; -exports.isNodeJS = void 0; -exports.normalizeUnicode = normalizeUnicode; -exports.objectFromMap = objectFromMap; -exports.objectSize = objectSize; -exports.setVerbosityLevel = setVerbosityLevel; -exports.shadow = shadow; -exports.string32 = string32; -exports.stringToBytes = stringToBytes; -exports.stringToPDFString = stringToPDFString; -exports.stringToUTF8String = stringToUTF8String; -exports.unreachable = unreachable; -exports.utf8StringToString = utf8StringToString; -exports.warn = warn; -const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); -exports.isNodeJS = isNodeJS; -const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; -exports.IDENTITY_MATRIX = IDENTITY_MATRIX; -const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; -exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; -const MAX_IMAGE_SIZE_TO_CACHE = 10e6; -exports.MAX_IMAGE_SIZE_TO_CACHE = MAX_IMAGE_SIZE_TO_CACHE; -const LINE_FACTOR = 1.35; -exports.LINE_FACTOR = LINE_FACTOR; -const LINE_DESCENT_FACTOR = 0.35; -exports.LINE_DESCENT_FACTOR = LINE_DESCENT_FACTOR; -const BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR; -exports.BASELINE_FACTOR = BASELINE_FACTOR; -const RenderingIntentFlag = { - ANY: 0x01, - DISPLAY: 0x02, - PRINT: 0x04, - SAVE: 0x08, - ANNOTATIONS_FORMS: 0x10, - ANNOTATIONS_STORAGE: 0x20, - ANNOTATIONS_DISABLE: 0x40, - OPLIST: 0x100 -}; -exports.RenderingIntentFlag = RenderingIntentFlag; -const AnnotationMode = { - DISABLE: 0, - ENABLE: 1, - ENABLE_FORMS: 2, - ENABLE_STORAGE: 3 -}; -exports.AnnotationMode = AnnotationMode; -const AnnotationEditorPrefix = "pdfjs_internal_editor_"; -exports.AnnotationEditorPrefix = AnnotationEditorPrefix; -const AnnotationEditorType = { - DISABLE: -1, - NONE: 0, - FREETEXT: 3, - STAMP: 13, - INK: 15 -}; -exports.AnnotationEditorType = AnnotationEditorType; -const AnnotationEditorParamsType = { - RESIZE: 1, - CREATE: 2, - FREETEXT_SIZE: 11, - FREETEXT_COLOR: 12, - FREETEXT_OPACITY: 13, - INK_COLOR: 21, - INK_THICKNESS: 22, - INK_OPACITY: 23 -}; -exports.AnnotationEditorParamsType = AnnotationEditorParamsType; -const PermissionFlag = { - PRINT: 0x04, - MODIFY_CONTENTS: 0x08, - COPY: 0x10, - MODIFY_ANNOTATIONS: 0x20, - FILL_INTERACTIVE_FORMS: 0x100, - COPY_FOR_ACCESSIBILITY: 0x200, - ASSEMBLE: 0x400, - PRINT_HIGH_QUALITY: 0x800 -}; -exports.PermissionFlag = PermissionFlag; -const TextRenderingMode = { - FILL: 0, - STROKE: 1, - FILL_STROKE: 2, - INVISIBLE: 3, - FILL_ADD_TO_PATH: 4, - STROKE_ADD_TO_PATH: 5, - FILL_STROKE_ADD_TO_PATH: 6, - ADD_TO_PATH: 7, - FILL_STROKE_MASK: 3, - ADD_TO_PATH_FLAG: 4 -}; -exports.TextRenderingMode = TextRenderingMode; -const ImageKind = { - GRAYSCALE_1BPP: 1, - RGB_24BPP: 2, - RGBA_32BPP: 3 -}; -exports.ImageKind = ImageKind; -const AnnotationType = { - TEXT: 1, - LINK: 2, - FREETEXT: 3, - LINE: 4, - SQUARE: 5, - CIRCLE: 6, - POLYGON: 7, - POLYLINE: 8, - HIGHLIGHT: 9, - UNDERLINE: 10, - SQUIGGLY: 11, - STRIKEOUT: 12, - STAMP: 13, - CARET: 14, - INK: 15, - POPUP: 16, - FILEATTACHMENT: 17, - SOUND: 18, - MOVIE: 19, - WIDGET: 20, - SCREEN: 21, - PRINTERMARK: 22, - TRAPNET: 23, - WATERMARK: 24, - THREED: 25, - REDACT: 26 -}; -exports.AnnotationType = AnnotationType; -const AnnotationReplyType = { - GROUP: "Group", - REPLY: "R" -}; -exports.AnnotationReplyType = AnnotationReplyType; -const AnnotationFlag = { - INVISIBLE: 0x01, - HIDDEN: 0x02, - PRINT: 0x04, - NOZOOM: 0x08, - NOROTATE: 0x10, - NOVIEW: 0x20, - READONLY: 0x40, - LOCKED: 0x80, - TOGGLENOVIEW: 0x100, - LOCKEDCONTENTS: 0x200 -}; -exports.AnnotationFlag = AnnotationFlag; -const AnnotationFieldFlag = { - READONLY: 0x0000001, - REQUIRED: 0x0000002, - NOEXPORT: 0x0000004, - MULTILINE: 0x0001000, - PASSWORD: 0x0002000, - NOTOGGLETOOFF: 0x0004000, - RADIO: 0x0008000, - PUSHBUTTON: 0x0010000, - COMBO: 0x0020000, - EDIT: 0x0040000, - SORT: 0x0080000, - FILESELECT: 0x0100000, - MULTISELECT: 0x0200000, - DONOTSPELLCHECK: 0x0400000, - DONOTSCROLL: 0x0800000, - COMB: 0x1000000, - RICHTEXT: 0x2000000, - RADIOSINUNISON: 0x2000000, - COMMITONSELCHANGE: 0x4000000 -}; -exports.AnnotationFieldFlag = AnnotationFieldFlag; -const AnnotationBorderStyleType = { - SOLID: 1, - DASHED: 2, - BEVELED: 3, - INSET: 4, - UNDERLINE: 5 -}; -exports.AnnotationBorderStyleType = AnnotationBorderStyleType; -const AnnotationActionEventType = { - E: "Mouse Enter", - X: "Mouse Exit", - D: "Mouse Down", - U: "Mouse Up", - Fo: "Focus", - Bl: "Blur", - PO: "PageOpen", - PC: "PageClose", - PV: "PageVisible", - PI: "PageInvisible", - K: "Keystroke", - F: "Format", - V: "Validate", - C: "Calculate" -}; -exports.AnnotationActionEventType = AnnotationActionEventType; -const DocumentActionEventType = { - WC: "WillClose", - WS: "WillSave", - DS: "DidSave", - WP: "WillPrint", - DP: "DidPrint" -}; -exports.DocumentActionEventType = DocumentActionEventType; -const PageActionEventType = { - O: "PageOpen", - C: "PageClose" -}; -exports.PageActionEventType = PageActionEventType; -const VerbosityLevel = { - ERRORS: 0, - WARNINGS: 1, - INFOS: 5 -}; -exports.VerbosityLevel = VerbosityLevel; -const CMapCompressionType = { - NONE: 0, - BINARY: 1 -}; -exports.CMapCompressionType = CMapCompressionType; -const OPS = { - dependency: 1, - setLineWidth: 2, - setLineCap: 3, - setLineJoin: 4, - setMiterLimit: 5, - setDash: 6, - setRenderingIntent: 7, - setFlatness: 8, - setGState: 9, - save: 10, - restore: 11, - transform: 12, - moveTo: 13, - lineTo: 14, - curveTo: 15, - curveTo2: 16, - curveTo3: 17, - closePath: 18, - rectangle: 19, - stroke: 20, - closeStroke: 21, - fill: 22, - eoFill: 23, - fillStroke: 24, - eoFillStroke: 25, - closeFillStroke: 26, - closeEOFillStroke: 27, - endPath: 28, - clip: 29, - eoClip: 30, - beginText: 31, - endText: 32, - setCharSpacing: 33, - setWordSpacing: 34, - setHScale: 35, - setLeading: 36, - setFont: 37, - setTextRenderingMode: 38, - setTextRise: 39, - moveText: 40, - setLeadingMoveText: 41, - setTextMatrix: 42, - nextLine: 43, - showText: 44, - showSpacedText: 45, - nextLineShowText: 46, - nextLineSetSpacingShowText: 47, - setCharWidth: 48, - setCharWidthAndBounds: 49, - setStrokeColorSpace: 50, - setFillColorSpace: 51, - setStrokeColor: 52, - setStrokeColorN: 53, - setFillColor: 54, - setFillColorN: 55, - setStrokeGray: 56, - setFillGray: 57, - setStrokeRGBColor: 58, - setFillRGBColor: 59, - setStrokeCMYKColor: 60, - setFillCMYKColor: 61, - shadingFill: 62, - beginInlineImage: 63, - beginImageData: 64, - endInlineImage: 65, - paintXObject: 66, - markPoint: 67, - markPointProps: 68, - beginMarkedContent: 69, - beginMarkedContentProps: 70, - endMarkedContent: 71, - beginCompat: 72, - endCompat: 73, - paintFormXObjectBegin: 74, - paintFormXObjectEnd: 75, - beginGroup: 76, - endGroup: 77, - beginAnnotation: 80, - endAnnotation: 81, - paintImageMaskXObject: 83, - paintImageMaskXObjectGroup: 84, - paintImageXObject: 85, - paintInlineImageXObject: 86, - paintInlineImageXObjectGroup: 87, - paintImageXObjectRepeat: 88, - paintImageMaskXObjectRepeat: 89, - paintSolidColorImageMask: 90, - constructPath: 91 -}; -exports.OPS = OPS; -const PasswordResponses = { - NEED_PASSWORD: 1, - INCORRECT_PASSWORD: 2 -}; -exports.PasswordResponses = PasswordResponses; -let verbosity = VerbosityLevel.WARNINGS; -function setVerbosityLevel(level) { - if (Number.isInteger(level)) { - verbosity = level; - } -} -function getVerbosityLevel() { - return verbosity; -} -function info(msg) { - if (verbosity >= VerbosityLevel.INFOS) { - console.log(`Info: ${msg}`); - } -} -function warn(msg) { - if (verbosity >= VerbosityLevel.WARNINGS) { - console.log(`Warning: ${msg}`); - } -} -function unreachable(msg) { - throw new Error(msg); -} -function assert(cond, msg) { - if (!cond) { - unreachable(msg); - } -} -function _isValidProtocol(url) { - switch (url?.protocol) { - case "http:": - case "https:": - case "ftp:": - case "mailto:": - case "tel:": - return true; - default: - return false; - } -} -function createValidAbsoluteUrl(url, baseUrl = null, options = null) { - if (!url) { - return null; - } - try { - if (options && typeof url === "string") { - if (options.addDefaultProtocol && url.startsWith("www.")) { - const dots = url.match(/\./g); - if (dots?.length >= 2) { - url = `http://${url}`; - } - } - if (options.tryConvertEncoding) { - try { - url = stringToUTF8String(url); - } catch {} - } - } - const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); - if (_isValidProtocol(absoluteUrl)) { - return absoluteUrl; - } - } catch {} - return null; -} -function shadow(obj, prop, value, nonSerializable = false) { - Object.defineProperty(obj, prop, { - value, - enumerable: !nonSerializable, - configurable: true, - writable: false - }); - return value; -} -const BaseException = function BaseExceptionClosure() { - function BaseException(message, name) { - if (this.constructor === BaseException) { - unreachable("Cannot initialize BaseException."); - } - this.message = message; - this.name = name; - } - BaseException.prototype = new Error(); - BaseException.constructor = BaseException; - return BaseException; -}(); -exports.BaseException = BaseException; -class PasswordException extends BaseException { - constructor(msg, code) { - super(msg, "PasswordException"); - this.code = code; - } -} -exports.PasswordException = PasswordException; -class UnknownErrorException extends BaseException { - constructor(msg, details) { - super(msg, "UnknownErrorException"); - this.details = details; - } -} -exports.UnknownErrorException = UnknownErrorException; -class InvalidPDFException extends BaseException { - constructor(msg) { - super(msg, "InvalidPDFException"); - } -} -exports.InvalidPDFException = InvalidPDFException; -class MissingPDFException extends BaseException { - constructor(msg) { - super(msg, "MissingPDFException"); - } -} -exports.MissingPDFException = MissingPDFException; -class UnexpectedResponseException extends BaseException { - constructor(msg, status) { - super(msg, "UnexpectedResponseException"); - this.status = status; - } -} -exports.UnexpectedResponseException = UnexpectedResponseException; -class FormatError extends BaseException { - constructor(msg) { - super(msg, "FormatError"); - } -} -exports.FormatError = FormatError; -class AbortException extends BaseException { - constructor(msg) { - super(msg, "AbortException"); - } -} -exports.AbortException = AbortException; -function bytesToString(bytes) { - if (typeof bytes !== "object" || bytes?.length === undefined) { - unreachable("Invalid argument for bytesToString"); - } - const length = bytes.length; - const MAX_ARGUMENT_COUNT = 8192; - if (length < MAX_ARGUMENT_COUNT) { - return String.fromCharCode.apply(null, bytes); - } - const strBuf = []; - for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) { - const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); - const chunk = bytes.subarray(i, chunkEnd); - strBuf.push(String.fromCharCode.apply(null, chunk)); - } - return strBuf.join(""); -} -function stringToBytes(str) { - if (typeof str !== "string") { - unreachable("Invalid argument for stringToBytes"); - } - const length = str.length; - const bytes = new Uint8Array(length); - for (let i = 0; i < length; ++i) { - bytes[i] = str.charCodeAt(i) & 0xff; - } - return bytes; -} -function string32(value) { - return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); -} -function objectSize(obj) { - return Object.keys(obj).length; -} -function objectFromMap(map) { - const obj = Object.create(null); - for (const [key, value] of map) { - obj[key] = value; - } - return obj; -} -function isLittleEndian() { - const buffer8 = new Uint8Array(4); - buffer8[0] = 1; - const view32 = new Uint32Array(buffer8.buffer, 0, 1); - return view32[0] === 1; -} -function isEvalSupported() { - try { - new Function(""); - return true; - } catch { - return false; - } -} -class FeatureTest { - static get isLittleEndian() { - return shadow(this, "isLittleEndian", isLittleEndian()); - } - static get isEvalSupported() { - return shadow(this, "isEvalSupported", isEvalSupported()); - } - static get isOffscreenCanvasSupported() { - return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined"); - } - static get platform() { - if (typeof navigator === "undefined") { - return shadow(this, "platform", { - isWin: false, - isMac: false - }); - } - return shadow(this, "platform", { - isWin: navigator.platform.includes("Win"), - isMac: navigator.platform.includes("Mac") - }); - } - static get isCSSRoundSupported() { - return shadow(this, "isCSSRoundSupported", globalThis.CSS?.supports?.("width: round(1.5px, 1px)")); - } -} -exports.FeatureTest = FeatureTest; -const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0")); -class Util { - static makeHexColor(r, g, b) { - return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`; - } - static scaleMinMax(transform, minMax) { - let temp; - if (transform[0]) { - if (transform[0] < 0) { - temp = minMax[0]; - minMax[0] = minMax[1]; - minMax[1] = temp; - } - minMax[0] *= transform[0]; - minMax[1] *= transform[0]; - if (transform[3] < 0) { - temp = minMax[2]; - minMax[2] = minMax[3]; - minMax[3] = temp; - } - minMax[2] *= transform[3]; - minMax[3] *= transform[3]; - } else { - temp = minMax[0]; - minMax[0] = minMax[2]; - minMax[2] = temp; - temp = minMax[1]; - minMax[1] = minMax[3]; - minMax[3] = temp; - if (transform[1] < 0) { - temp = minMax[2]; - minMax[2] = minMax[3]; - minMax[3] = temp; - } - minMax[2] *= transform[1]; - minMax[3] *= transform[1]; - if (transform[2] < 0) { - temp = minMax[0]; - minMax[0] = minMax[1]; - minMax[1] = temp; - } - minMax[0] *= transform[2]; - minMax[1] *= transform[2]; - } - minMax[0] += transform[4]; - minMax[1] += transform[4]; - minMax[2] += transform[5]; - minMax[3] += transform[5]; - } - static transform(m1, m2) { - return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; - } - static applyTransform(p, m) { - const xt = p[0] * m[0] + p[1] * m[2] + m[4]; - const yt = p[0] * m[1] + p[1] * m[3] + m[5]; - return [xt, yt]; - } - static applyInverseTransform(p, m) { - const d = m[0] * m[3] - m[1] * m[2]; - const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; - const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; - return [xt, yt]; - } - static getAxialAlignedBoundingBox(r, m) { - const p1 = this.applyTransform(r, m); - const p2 = this.applyTransform(r.slice(2, 4), m); - const p3 = this.applyTransform([r[0], r[3]], m); - const p4 = this.applyTransform([r[2], r[1]], m); - return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; - } - static inverseTransform(m) { - const d = m[0] * m[3] - m[1] * m[2]; - return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; - } - static singularValueDecompose2dScale(m) { - const transpose = [m[0], m[2], m[1], m[3]]; - const a = m[0] * transpose[0] + m[1] * transpose[2]; - const b = m[0] * transpose[1] + m[1] * transpose[3]; - const c = m[2] * transpose[0] + m[3] * transpose[2]; - const d = m[2] * transpose[1] + m[3] * transpose[3]; - const first = (a + d) / 2; - const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2; - const sx = first + second || 1; - const sy = first - second || 1; - return [Math.sqrt(sx), Math.sqrt(sy)]; - } - static normalizeRect(rect) { - const r = rect.slice(0); - if (rect[0] > rect[2]) { - r[0] = rect[2]; - r[2] = rect[0]; - } - if (rect[1] > rect[3]) { - r[1] = rect[3]; - r[3] = rect[1]; - } - return r; - } - static intersect(rect1, rect2) { - const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2])); - const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2])); - if (xLow > xHigh) { - return null; - } - const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3])); - const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3])); - if (yLow > yHigh) { - return null; - } - return [xLow, yLow, xHigh, yHigh]; - } - static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) { - const tvalues = [], - bounds = [[], []]; - let a, b, c, t, t1, t2, b2ac, sqrtb2ac; - for (let i = 0; i < 2; ++i) { - if (i === 0) { - b = 6 * x0 - 12 * x1 + 6 * x2; - a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3; - c = 3 * x1 - 3 * x0; - } else { - b = 6 * y0 - 12 * y1 + 6 * y2; - a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3; - c = 3 * y1 - 3 * y0; - } - if (Math.abs(a) < 1e-12) { - if (Math.abs(b) < 1e-12) { - continue; - } - t = -c / b; - if (0 < t && t < 1) { - tvalues.push(t); - } - continue; - } - b2ac = b * b - 4 * c * a; - sqrtb2ac = Math.sqrt(b2ac); - if (b2ac < 0) { - continue; - } - t1 = (-b + sqrtb2ac) / (2 * a); - if (0 < t1 && t1 < 1) { - tvalues.push(t1); - } - t2 = (-b - sqrtb2ac) / (2 * a); - if (0 < t2 && t2 < 1) { - tvalues.push(t2); - } - } - let j = tvalues.length, - mt; - const jlen = j; - while (j--) { - t = tvalues[j]; - mt = 1 - t; - bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3; - bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3; - } - bounds[0][jlen] = x0; - bounds[1][jlen] = y0; - bounds[0][jlen + 1] = x3; - bounds[1][jlen + 1] = y3; - bounds[0].length = bounds[1].length = jlen + 2; - return [Math.min(...bounds[0]), Math.min(...bounds[1]), Math.max(...bounds[0]), Math.max(...bounds[1])]; - } -} -exports.Util = Util; -const PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac]; -function stringToPDFString(str) { - if (str[0] >= "\xEF") { - let encoding; - if (str[0] === "\xFE" && str[1] === "\xFF") { - encoding = "utf-16be"; - } else if (str[0] === "\xFF" && str[1] === "\xFE") { - encoding = "utf-16le"; - } else if (str[0] === "\xEF" && str[1] === "\xBB" && str[2] === "\xBF") { - encoding = "utf-8"; - } - if (encoding) { - try { - const decoder = new TextDecoder(encoding, { - fatal: true - }); - const buffer = stringToBytes(str); - return decoder.decode(buffer); - } catch (ex) { - warn(`stringToPDFString: "${ex}".`); - } - } - } - const strBuf = []; - for (let i = 0, ii = str.length; i < ii; i++) { - const code = PDFStringTranslateTable[str.charCodeAt(i)]; - strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); - } - return strBuf.join(""); -} -function stringToUTF8String(str) { - return decodeURIComponent(escape(str)); -} -function utf8StringToString(str) { - return unescape(encodeURIComponent(str)); -} -function isArrayBuffer(v) { - return typeof v === "object" && v?.byteLength !== undefined; -} -function isArrayEqual(arr1, arr2) { - if (arr1.length !== arr2.length) { - return false; - } - for (let i = 0, ii = arr1.length; i < ii; i++) { - if (arr1[i] !== arr2[i]) { - return false; - } - } - return true; -} -function getModificationDate(date = new Date()) { - const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")]; - return buffer.join(""); -} -class PromiseCapability { - #settled = false; - constructor() { - this.promise = new Promise((resolve, reject) => { - this.resolve = data => { - this.#settled = true; - resolve(data); - }; - this.reject = reason => { - this.#settled = true; - reject(reason); - }; - }); - } - get settled() { - return this.#settled; - } -} -exports.PromiseCapability = PromiseCapability; -let NormalizeRegex = null; -let NormalizationMap = null; -function normalizeUnicode(str) { - if (!NormalizeRegex) { - NormalizeRegex = /([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu; - NormalizationMap = new Map([["ſt", "ſt"]]); - } - return str.replaceAll(NormalizeRegex, (_, p1, p2) => { - return p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2); - }); -} -function getUuid() { - if (typeof crypto !== "undefined" && typeof crypto?.randomUUID === "function") { - return crypto.randomUUID(); - } - const buf = new Uint8Array(32); - if (typeof crypto !== "undefined" && typeof crypto?.getRandomValues === "function") { - crypto.getRandomValues(buf); - } else { - for (let i = 0; i < 32; i++) { - buf[i] = Math.floor(Math.random() * 255); - } - } - return bytesToString(buf); -} -const AnnotationPrefix = "pdfjs_internal_id_"; -exports.AnnotationPrefix = AnnotationPrefix; - -/***/ }), -/* 3 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XRefParseException = exports.XRefEntryException = exports.ParserEOFException = exports.PDF_VERSION_REGEXP = exports.MissingDataException = void 0; -exports.arrayBuffersToBytes = arrayBuffersToBytes; -exports.collectActions = collectActions; -exports.encodeToXmlString = encodeToXmlString; -exports.escapePDFName = escapePDFName; -exports.escapeString = escapeString; -exports.getInheritableProperty = getInheritableProperty; -exports.getLookupTableFactory = getLookupTableFactory; -exports.getNewAnnotationsMap = getNewAnnotationsMap; -exports.getRotationMatrix = getRotationMatrix; -exports.isAscii = isAscii; -exports.isWhiteSpace = isWhiteSpace; -exports.log2 = log2; -exports.numberToString = numberToString; -exports.parseXFAPath = parseXFAPath; -exports.readInt8 = readInt8; -exports.readUint16 = readUint16; -exports.readUint32 = readUint32; -exports.recoverJsURL = recoverJsURL; -exports.stringToUTF16HexString = stringToUTF16HexString; -exports.stringToUTF16String = stringToUTF16String; -exports.toRomanNumerals = toRomanNumerals; -exports.validateCSSFont = validateCSSFont; -exports.validateFontName = validateFontName; -var _util = __w_pdfjs_require__(2); -var _primitives = __w_pdfjs_require__(4); -var _base_stream = __w_pdfjs_require__(5); -const PDF_VERSION_REGEXP = /^[1-9]\.\d$/; -exports.PDF_VERSION_REGEXP = PDF_VERSION_REGEXP; -function getLookupTableFactory(initializer) { - let lookup; - return function () { - if (initializer) { - lookup = Object.create(null); - initializer(lookup); - initializer = null; - } - return lookup; - }; -} -class MissingDataException extends _util.BaseException { - constructor(begin, end) { - super(`Missing data [${begin}, ${end})`, "MissingDataException"); - this.begin = begin; - this.end = end; - } -} -exports.MissingDataException = MissingDataException; -class ParserEOFException extends _util.BaseException { - constructor(msg) { - super(msg, "ParserEOFException"); - } -} -exports.ParserEOFException = ParserEOFException; -class XRefEntryException extends _util.BaseException { - constructor(msg) { - super(msg, "XRefEntryException"); - } -} -exports.XRefEntryException = XRefEntryException; -class XRefParseException extends _util.BaseException { - constructor(msg) { - super(msg, "XRefParseException"); - } -} -exports.XRefParseException = XRefParseException; -function arrayBuffersToBytes(arr) { - const length = arr.length; - if (length === 0) { - return new Uint8Array(0); - } - if (length === 1) { - return new Uint8Array(arr[0]); - } - let dataLength = 0; - for (let i = 0; i < length; i++) { - dataLength += arr[i].byteLength; - } - const data = new Uint8Array(dataLength); - let pos = 0; - for (let i = 0; i < length; i++) { - const item = new Uint8Array(arr[i]); - data.set(item, pos); - pos += item.byteLength; - } - return data; -} -function getInheritableProperty({ - dict, - key, - getArray = false, - stopWhenFound = true -}) { - let values; - const visited = new _primitives.RefSet(); - while (dict instanceof _primitives.Dict && !(dict.objId && visited.has(dict.objId))) { - if (dict.objId) { - visited.put(dict.objId); - } - const value = getArray ? dict.getArray(key) : dict.get(key); - if (value !== undefined) { - if (stopWhenFound) { - return value; - } - (values ||= []).push(value); - } - dict = dict.get("Parent"); - } - return values; -} -const ROMAN_NUMBER_MAP = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]; -function toRomanNumerals(number, lowerCase = false) { - (0, _util.assert)(Number.isInteger(number) && number > 0, "The number should be a positive integer."); - const romanBuf = []; - let pos; - while (number >= 1000) { - number -= 1000; - romanBuf.push("M"); - } - pos = number / 100 | 0; - number %= 100; - romanBuf.push(ROMAN_NUMBER_MAP[pos]); - pos = number / 10 | 0; - number %= 10; - romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]); - romanBuf.push(ROMAN_NUMBER_MAP[20 + number]); - const romanStr = romanBuf.join(""); - return lowerCase ? romanStr.toLowerCase() : romanStr; -} -function log2(x) { - if (x <= 0) { - return 0; - } - return Math.ceil(Math.log2(x)); -} -function readInt8(data, offset) { - return data[offset] << 24 >> 24; -} -function readUint16(data, offset) { - return data[offset] << 8 | data[offset + 1]; -} -function readUint32(data, offset) { - return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0; -} -function isWhiteSpace(ch) { - return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a; -} -function parseXFAPath(path) { - const positionPattern = /(.+)\[(\d+)\]$/; - return path.split(".").map(component => { - const m = component.match(positionPattern); - if (m) { - return { - name: m[1], - pos: parseInt(m[2], 10) - }; - } - return { - name: component, - pos: 0 - }; - }); -} -function escapePDFName(str) { - const buffer = []; - let start = 0; - for (let i = 0, ii = str.length; i < ii; i++) { - const char = str.charCodeAt(i); - if (char < 0x21 || char > 0x7e || char === 0x23 || char === 0x28 || char === 0x29 || char === 0x3c || char === 0x3e || char === 0x5b || char === 0x5d || char === 0x7b || char === 0x7d || char === 0x2f || char === 0x25) { - if (start < i) { - buffer.push(str.substring(start, i)); - } - buffer.push(`#${char.toString(16)}`); - start = i + 1; - } - } - if (buffer.length === 0) { - return str; - } - if (start < str.length) { - buffer.push(str.substring(start, str.length)); - } - return buffer.join(""); -} -function escapeString(str) { - return str.replaceAll(/([()\\\n\r])/g, match => { - if (match === "\n") { - return "\\n"; - } else if (match === "\r") { - return "\\r"; - } - return `\\${match}`; - }); -} -function _collectJS(entry, xref, list, parents) { - if (!entry) { - return; - } - let parent = null; - if (entry instanceof _primitives.Ref) { - if (parents.has(entry)) { - return; - } - parent = entry; - parents.put(parent); - entry = xref.fetch(entry); - } - if (Array.isArray(entry)) { - for (const element of entry) { - _collectJS(element, xref, list, parents); - } - } else if (entry instanceof _primitives.Dict) { - if ((0, _primitives.isName)(entry.get("S"), "JavaScript")) { - const js = entry.get("JS"); - let code; - if (js instanceof _base_stream.BaseStream) { - code = js.getString(); - } else if (typeof js === "string") { - code = js; - } - code &&= (0, _util.stringToPDFString)(code).replaceAll("\x00", ""); - if (code) { - list.push(code); - } - } - _collectJS(entry.getRaw("Next"), xref, list, parents); - } - if (parent) { - parents.remove(parent); - } -} -function collectActions(xref, dict, eventType) { - const actions = Object.create(null); - const additionalActionsDicts = getInheritableProperty({ - dict, - key: "AA", - stopWhenFound: false - }); - if (additionalActionsDicts) { - for (let i = additionalActionsDicts.length - 1; i >= 0; i--) { - const additionalActions = additionalActionsDicts[i]; - if (!(additionalActions instanceof _primitives.Dict)) { - continue; - } - for (const key of additionalActions.getKeys()) { - const action = eventType[key]; - if (!action) { - continue; - } - const actionDict = additionalActions.getRaw(key); - const parents = new _primitives.RefSet(); - const list = []; - _collectJS(actionDict, xref, list, parents); - if (list.length > 0) { - actions[action] = list; - } - } - } - } - if (dict.has("A")) { - const actionDict = dict.get("A"); - const parents = new _primitives.RefSet(); - const list = []; - _collectJS(actionDict, xref, list, parents); - if (list.length > 0) { - actions.Action = list; - } - } - return (0, _util.objectSize)(actions) > 0 ? actions : null; -} -const XMLEntities = { - 0x3c: "<", - 0x3e: ">", - 0x26: "&", - 0x22: """, - 0x27: "'" -}; -function encodeToXmlString(str) { - const buffer = []; - let start = 0; - for (let i = 0, ii = str.length; i < ii; i++) { - const char = str.codePointAt(i); - if (0x20 <= char && char <= 0x7e) { - const entity = XMLEntities[char]; - if (entity) { - if (start < i) { - buffer.push(str.substring(start, i)); - } - buffer.push(entity); - start = i + 1; - } - } else { - if (start < i) { - buffer.push(str.substring(start, i)); - } - buffer.push(`&#x${char.toString(16).toUpperCase()};`); - if (char > 0xd7ff && (char < 0xe000 || char > 0xfffd)) { - i++; - } - start = i + 1; - } - } - if (buffer.length === 0) { - return str; - } - if (start < str.length) { - buffer.push(str.substring(start, str.length)); - } - return buffer.join(""); -} -function validateFontName(fontFamily, mustWarn = false) { - const m = /^("|').*("|')$/.exec(fontFamily); - if (m && m[1] === m[2]) { - const re = new RegExp(`[^\\\\]${m[1]}`); - if (re.test(fontFamily.slice(1, -1))) { - if (mustWarn) { - (0, _util.warn)(`FontFamily contains unescaped ${m[1]}: ${fontFamily}.`); - } - return false; - } - } else { - for (const ident of fontFamily.split(/[ \t]+/)) { - if (/^(\d|(-(\d|-)))/.test(ident) || !/^[\w-\\]+$/.test(ident)) { - if (mustWarn) { - (0, _util.warn)(`FontFamily contains invalid : ${fontFamily}.`); - } - return false; - } - } - } - return true; -} -function validateCSSFont(cssFontInfo) { - const DEFAULT_CSS_FONT_OBLIQUE = "14"; - const DEFAULT_CSS_FONT_WEIGHT = "400"; - const CSS_FONT_WEIGHT_VALUES = new Set(["100", "200", "300", "400", "500", "600", "700", "800", "900", "1000", "normal", "bold", "bolder", "lighter"]); - const { - fontFamily, - fontWeight, - italicAngle - } = cssFontInfo; - if (!validateFontName(fontFamily, true)) { - return false; - } - const weight = fontWeight ? fontWeight.toString() : ""; - cssFontInfo.fontWeight = CSS_FONT_WEIGHT_VALUES.has(weight) ? weight : DEFAULT_CSS_FONT_WEIGHT; - const angle = parseFloat(italicAngle); - cssFontInfo.italicAngle = isNaN(angle) || angle < -90 || angle > 90 ? DEFAULT_CSS_FONT_OBLIQUE : italicAngle.toString(); - return true; -} -function recoverJsURL(str) { - const URL_OPEN_METHODS = ["app.launchURL", "window.open", "xfa.host.gotoURL"]; - const regex = new RegExp("^\\s*(" + URL_OPEN_METHODS.join("|").replaceAll(".", "\\.") + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", "i"); - const jsUrl = regex.exec(str); - if (jsUrl?.[2]) { - const url = jsUrl[2]; - let newWindow = false; - if (jsUrl[3] === "true" && jsUrl[1] === "app.launchURL") { - newWindow = true; - } - return { - url, - newWindow - }; - } - return null; -} -function numberToString(value) { - if (Number.isInteger(value)) { - return value.toString(); - } - const roundedValue = Math.round(value * 100); - if (roundedValue % 100 === 0) { - return (roundedValue / 100).toString(); - } - if (roundedValue % 10 === 0) { - return value.toFixed(1); - } - return value.toFixed(2); -} -function getNewAnnotationsMap(annotationStorage) { - if (!annotationStorage) { - return null; - } - const newAnnotationsByPage = new Map(); - for (const [key, value] of annotationStorage) { - if (!key.startsWith(_util.AnnotationEditorPrefix)) { - continue; - } - let annotations = newAnnotationsByPage.get(value.pageIndex); - if (!annotations) { - annotations = []; - newAnnotationsByPage.set(value.pageIndex, annotations); - } - annotations.push(value); - } - return newAnnotationsByPage.size > 0 ? newAnnotationsByPage : null; -} -function isAscii(str) { - return /^[\x00-\x7F]*$/.test(str); -} -function stringToUTF16HexString(str) { - const buf = []; - for (let i = 0, ii = str.length; i < ii; i++) { - const char = str.charCodeAt(i); - buf.push((char >> 8 & 0xff).toString(16).padStart(2, "0"), (char & 0xff).toString(16).padStart(2, "0")); - } - return buf.join(""); -} -function stringToUTF16String(str, bigEndian = false) { - const buf = []; - if (bigEndian) { - buf.push("\xFE\xFF"); - } - for (let i = 0, ii = str.length; i < ii; i++) { - const char = str.charCodeAt(i); - buf.push(String.fromCharCode(char >> 8 & 0xff), String.fromCharCode(char & 0xff)); - } - return buf.join(""); -} -function getRotationMatrix(rotation, width, height) { - switch (rotation) { - case 90: - return [0, 1, -1, 0, width, 0]; - case 180: - return [-1, 0, 0, -1, width, height]; - case 270: - return [0, -1, 1, 0, 0, height]; - default: - throw new Error("Invalid rotation"); - } -} - -/***/ }), -/* 4 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.EOF = exports.Dict = exports.Cmd = exports.CIRCULAR_REF = void 0; -exports.clearPrimitiveCaches = clearPrimitiveCaches; -exports.isCmd = isCmd; -exports.isDict = isDict; -exports.isName = isName; -exports.isRefsEqual = isRefsEqual; -var _util = __w_pdfjs_require__(2); -const CIRCULAR_REF = Symbol("CIRCULAR_REF"); -exports.CIRCULAR_REF = CIRCULAR_REF; -const EOF = Symbol("EOF"); -exports.EOF = EOF; -let CmdCache = Object.create(null); -let NameCache = Object.create(null); -let RefCache = Object.create(null); -function clearPrimitiveCaches() { - CmdCache = Object.create(null); - NameCache = Object.create(null); - RefCache = Object.create(null); -} -class Name { - constructor(name) { - this.name = name; - } - static get(name) { - return NameCache[name] ||= new Name(name); - } -} -exports.Name = Name; -class Cmd { - constructor(cmd) { - this.cmd = cmd; - } - static get(cmd) { - return CmdCache[cmd] ||= new Cmd(cmd); - } -} -exports.Cmd = Cmd; -const nonSerializable = function nonSerializableClosure() { - return nonSerializable; -}; -class Dict { - constructor(xref = null) { - this._map = Object.create(null); - this.xref = xref; - this.objId = null; - this.suppressEncryption = false; - this.__nonSerializable__ = nonSerializable; - } - assignXref(newXref) { - this.xref = newXref; - } - get size() { - return Object.keys(this._map).length; - } - get(key1, key2, key3) { - let value = this._map[key1]; - if (value === undefined && key2 !== undefined) { - value = this._map[key2]; - if (value === undefined && key3 !== undefined) { - value = this._map[key3]; - } - } - if (value instanceof Ref && this.xref) { - return this.xref.fetch(value, this.suppressEncryption); - } - return value; - } - async getAsync(key1, key2, key3) { - let value = this._map[key1]; - if (value === undefined && key2 !== undefined) { - value = this._map[key2]; - if (value === undefined && key3 !== undefined) { - value = this._map[key3]; - } - } - if (value instanceof Ref && this.xref) { - return this.xref.fetchAsync(value, this.suppressEncryption); - } - return value; - } - getArray(key1, key2, key3) { - let value = this._map[key1]; - if (value === undefined && key2 !== undefined) { - value = this._map[key2]; - if (value === undefined && key3 !== undefined) { - value = this._map[key3]; - } - } - if (value instanceof Ref && this.xref) { - value = this.xref.fetch(value, this.suppressEncryption); - } - if (Array.isArray(value)) { - value = value.slice(); - for (let i = 0, ii = value.length; i < ii; i++) { - if (value[i] instanceof Ref && this.xref) { - value[i] = this.xref.fetch(value[i], this.suppressEncryption); - } - } - } - return value; - } - getRaw(key) { - return this._map[key]; - } - getKeys() { - return Object.keys(this._map); - } - getRawValues() { - return Object.values(this._map); - } - set(key, value) { - this._map[key] = value; - } - has(key) { - return this._map[key] !== undefined; - } - forEach(callback) { - for (const key in this._map) { - callback(key, this.get(key)); - } - } - static get empty() { - const emptyDict = new Dict(null); - emptyDict.set = (key, value) => { - (0, _util.unreachable)("Should not call `set` on the empty dictionary."); - }; - return (0, _util.shadow)(this, "empty", emptyDict); - } - static merge({ - xref, - dictArray, - mergeSubDicts = false - }) { - const mergedDict = new Dict(xref), - properties = new Map(); - for (const dict of dictArray) { - if (!(dict instanceof Dict)) { - continue; - } - for (const [key, value] of Object.entries(dict._map)) { - let property = properties.get(key); - if (property === undefined) { - property = []; - properties.set(key, property); - } else if (!mergeSubDicts || !(value instanceof Dict)) { - continue; - } - property.push(value); - } - } - for (const [name, values] of properties) { - if (values.length === 1 || !(values[0] instanceof Dict)) { - mergedDict._map[name] = values[0]; - continue; - } - const subDict = new Dict(xref); - for (const dict of values) { - for (const [key, value] of Object.entries(dict._map)) { - if (subDict._map[key] === undefined) { - subDict._map[key] = value; - } - } - } - if (subDict.size > 0) { - mergedDict._map[name] = subDict; - } - } - properties.clear(); - return mergedDict.size > 0 ? mergedDict : Dict.empty; - } - clone() { - const dict = new Dict(this.xref); - for (const key of this.getKeys()) { - dict.set(key, this.getRaw(key)); - } - return dict; - } -} -exports.Dict = Dict; -class Ref { - constructor(num, gen) { - this.num = num; - this.gen = gen; - } - toString() { - if (this.gen === 0) { - return `${this.num}R`; - } - return `${this.num}R${this.gen}`; - } - static fromString(str) { - const ref = RefCache[str]; - if (ref) { - return ref; - } - const m = /^(\d+)R(\d*)$/.exec(str); - if (!m || m[1] === "0") { - return null; - } - return RefCache[str] = new Ref(parseInt(m[1]), !m[2] ? 0 : parseInt(m[2])); - } - static get(num, gen) { - const key = gen === 0 ? `${num}R` : `${num}R${gen}`; - return RefCache[key] ||= new Ref(num, gen); - } -} -exports.Ref = Ref; -class RefSet { - constructor(parent = null) { - this._set = new Set(parent?._set); - } - has(ref) { - return this._set.has(ref.toString()); - } - put(ref) { - this._set.add(ref.toString()); - } - remove(ref) { - this._set.delete(ref.toString()); - } - [Symbol.iterator]() { - return this._set.values(); - } - clear() { - this._set.clear(); - } -} -exports.RefSet = RefSet; -class RefSetCache { - constructor() { - this._map = new Map(); - } - get size() { - return this._map.size; - } - get(ref) { - return this._map.get(ref.toString()); - } - has(ref) { - return this._map.has(ref.toString()); - } - put(ref, obj) { - this._map.set(ref.toString(), obj); - } - putAlias(ref, aliasRef) { - this._map.set(ref.toString(), this.get(aliasRef)); - } - [Symbol.iterator]() { - return this._map.values(); - } - clear() { - this._map.clear(); - } -} -exports.RefSetCache = RefSetCache; -function isName(v, name) { - return v instanceof Name && (name === undefined || v.name === name); -} -function isCmd(v, cmd) { - return v instanceof Cmd && (cmd === undefined || v.cmd === cmd); -} -function isDict(v, type) { - return v instanceof Dict && (type === undefined || isName(v.get("Type"), type)); -} -function isRefsEqual(v1, v2) { - return v1.num === v2.num && v1.gen === v2.gen; -} - -/***/ }), -/* 5 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.BaseStream = void 0; -var _util = __w_pdfjs_require__(2); -class BaseStream { - constructor() { - if (this.constructor === BaseStream) { - (0, _util.unreachable)("Cannot initialize BaseStream."); - } - } - get length() { - (0, _util.unreachable)("Abstract getter `length` accessed"); - } - get isEmpty() { - (0, _util.unreachable)("Abstract getter `isEmpty` accessed"); - } - get isDataLoaded() { - return (0, _util.shadow)(this, "isDataLoaded", true); - } - getByte() { - (0, _util.unreachable)("Abstract method `getByte` called"); - } - getBytes(length) { - (0, _util.unreachable)("Abstract method `getBytes` called"); - } - peekByte() { - const peekedByte = this.getByte(); - if (peekedByte !== -1) { - this.pos--; - } - return peekedByte; - } - peekBytes(length) { - const bytes = this.getBytes(length); - this.pos -= bytes.length; - return bytes; - } - getUint16() { - const b0 = this.getByte(); - const b1 = this.getByte(); - if (b0 === -1 || b1 === -1) { - return -1; - } - return (b0 << 8) + b1; - } - getInt32() { - const b0 = this.getByte(); - const b1 = this.getByte(); - const b2 = this.getByte(); - const b3 = this.getByte(); - return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; - } - getByteRange(begin, end) { - (0, _util.unreachable)("Abstract method `getByteRange` called"); - } - getString(length) { - return (0, _util.bytesToString)(this.getBytes(length)); - } - skip(n) { - this.pos += n || 1; - } - reset() { - (0, _util.unreachable)("Abstract method `reset` called"); - } - moveStart() { - (0, _util.unreachable)("Abstract method `moveStart` called"); - } - makeSubStream(start, length, dict = null) { - (0, _util.unreachable)("Abstract method `makeSubStream` called"); - } - getBaseStreams() { - return null; - } -} -exports.BaseStream = BaseStream; - -/***/ }), -/* 6 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.NetworkPdfManager = exports.LocalPdfManager = void 0; -var _util = __w_pdfjs_require__(2); -var _chunked_stream = __w_pdfjs_require__(7); -var _core_utils = __w_pdfjs_require__(3); -var _document = __w_pdfjs_require__(9); -var _stream = __w_pdfjs_require__(8); -function parseDocBaseUrl(url) { - if (url) { - const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url); - if (absoluteUrl) { - return absoluteUrl.href; - } - (0, _util.warn)(`Invalid absolute docBaseUrl: "${url}".`); - } - return null; -} -class BasePdfManager { - constructor(args) { - if (this.constructor === BasePdfManager) { - (0, _util.unreachable)("Cannot initialize BasePdfManager."); - } - this._docBaseUrl = parseDocBaseUrl(args.docBaseUrl); - this._docId = args.docId; - this._password = args.password; - this.enableXfa = args.enableXfa; - args.evaluatorOptions.isOffscreenCanvasSupported &&= _util.FeatureTest.isOffscreenCanvasSupported; - this.evaluatorOptions = args.evaluatorOptions; - } - get docId() { - return this._docId; - } - get password() { - return this._password; - } - get docBaseUrl() { - return this._docBaseUrl; - } - get catalog() { - return this.pdfDocument.catalog; - } - ensureDoc(prop, args) { - return this.ensure(this.pdfDocument, prop, args); - } - ensureXRef(prop, args) { - return this.ensure(this.pdfDocument.xref, prop, args); - } - ensureCatalog(prop, args) { - return this.ensure(this.pdfDocument.catalog, prop, args); - } - getPage(pageIndex) { - return this.pdfDocument.getPage(pageIndex); - } - fontFallback(id, handler) { - return this.pdfDocument.fontFallback(id, handler); - } - loadXfaFonts(handler, task) { - return this.pdfDocument.loadXfaFonts(handler, task); - } - loadXfaImages() { - return this.pdfDocument.loadXfaImages(); - } - serializeXfaData(annotationStorage) { - return this.pdfDocument.serializeXfaData(annotationStorage); - } - cleanup(manuallyTriggered = false) { - return this.pdfDocument.cleanup(manuallyTriggered); - } - async ensure(obj, prop, args) { - (0, _util.unreachable)("Abstract method `ensure` called"); - } - requestRange(begin, end) { - (0, _util.unreachable)("Abstract method `requestRange` called"); - } - requestLoadedStream(noFetch = false) { - (0, _util.unreachable)("Abstract method `requestLoadedStream` called"); - } - sendProgressiveData(chunk) { - (0, _util.unreachable)("Abstract method `sendProgressiveData` called"); - } - updatePassword(password) { - this._password = password; - } - terminate(reason) { - (0, _util.unreachable)("Abstract method `terminate` called"); - } -} -class LocalPdfManager extends BasePdfManager { - constructor(args) { - super(args); - const stream = new _stream.Stream(args.source); - this.pdfDocument = new _document.PDFDocument(this, stream); - this._loadedStreamPromise = Promise.resolve(stream); - } - async ensure(obj, prop, args) { - const value = obj[prop]; - if (typeof value === "function") { - return value.apply(obj, args); - } - return value; - } - requestRange(begin, end) { - return Promise.resolve(); - } - requestLoadedStream(noFetch = false) { - return this._loadedStreamPromise; - } - terminate(reason) {} -} -exports.LocalPdfManager = LocalPdfManager; -class NetworkPdfManager extends BasePdfManager { - constructor(args) { - super(args); - this.streamManager = new _chunked_stream.ChunkedStreamManager(args.source, { - msgHandler: args.handler, - length: args.length, - disableAutoFetch: args.disableAutoFetch, - rangeChunkSize: args.rangeChunkSize - }); - this.pdfDocument = new _document.PDFDocument(this, this.streamManager.getStream()); - } - async ensure(obj, prop, args) { - try { - const value = obj[prop]; - if (typeof value === "function") { - return value.apply(obj, args); - } - return value; - } catch (ex) { - if (!(ex instanceof _core_utils.MissingDataException)) { - throw ex; - } - await this.requestRange(ex.begin, ex.end); - return this.ensure(obj, prop, args); - } - } - requestRange(begin, end) { - return this.streamManager.requestRange(begin, end); - } - requestLoadedStream(noFetch = false) { - return this.streamManager.requestAllChunks(noFetch); - } - sendProgressiveData(chunk) { - this.streamManager.onReceiveData({ - chunk - }); - } - terminate(reason) { - this.streamManager.abort(reason); - } -} -exports.NetworkPdfManager = NetworkPdfManager; - -/***/ }), -/* 7 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ChunkedStreamManager = exports.ChunkedStream = void 0; -var _core_utils = __w_pdfjs_require__(3); -var _util = __w_pdfjs_require__(2); -var _stream = __w_pdfjs_require__(8); -class ChunkedStream extends _stream.Stream { - constructor(length, chunkSize, manager) { - super(new Uint8Array(length), 0, length, null); - this.chunkSize = chunkSize; - this._loadedChunks = new Set(); - this.numChunks = Math.ceil(length / chunkSize); - this.manager = manager; - this.progressiveDataLength = 0; - this.lastSuccessfulEnsureByteChunk = -1; - } - getMissingChunks() { - const chunks = []; - for (let chunk = 0, n = this.numChunks; chunk < n; ++chunk) { - if (!this._loadedChunks.has(chunk)) { - chunks.push(chunk); - } - } - return chunks; - } - get numChunksLoaded() { - return this._loadedChunks.size; - } - get isDataLoaded() { - return this.numChunksLoaded === this.numChunks; - } - onReceiveData(begin, chunk) { - const chunkSize = this.chunkSize; - if (begin % chunkSize !== 0) { - throw new Error(`Bad begin offset: ${begin}`); - } - const end = begin + chunk.byteLength; - if (end % chunkSize !== 0 && end !== this.bytes.length) { - throw new Error(`Bad end offset: ${end}`); - } - this.bytes.set(new Uint8Array(chunk), begin); - const beginChunk = Math.floor(begin / chunkSize); - const endChunk = Math.floor((end - 1) / chunkSize) + 1; - for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { - this._loadedChunks.add(curChunk); - } - } - onReceiveProgressiveData(data) { - let position = this.progressiveDataLength; - const beginChunk = Math.floor(position / this.chunkSize); - this.bytes.set(new Uint8Array(data), position); - position += data.byteLength; - this.progressiveDataLength = position; - const endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize); - for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { - this._loadedChunks.add(curChunk); - } - } - ensureByte(pos) { - if (pos < this.progressiveDataLength) { - return; - } - const chunk = Math.floor(pos / this.chunkSize); - if (chunk > this.numChunks) { - return; - } - if (chunk === this.lastSuccessfulEnsureByteChunk) { - return; - } - if (!this._loadedChunks.has(chunk)) { - throw new _core_utils.MissingDataException(pos, pos + 1); - } - this.lastSuccessfulEnsureByteChunk = chunk; - } - ensureRange(begin, end) { - if (begin >= end) { - return; - } - if (end <= this.progressiveDataLength) { - return; - } - const beginChunk = Math.floor(begin / this.chunkSize); - if (beginChunk > this.numChunks) { - return; - } - const endChunk = Math.min(Math.floor((end - 1) / this.chunkSize) + 1, this.numChunks); - for (let chunk = beginChunk; chunk < endChunk; ++chunk) { - if (!this._loadedChunks.has(chunk)) { - throw new _core_utils.MissingDataException(begin, end); - } - } - } - nextEmptyChunk(beginChunk) { - const numChunks = this.numChunks; - for (let i = 0; i < numChunks; ++i) { - const chunk = (beginChunk + i) % numChunks; - if (!this._loadedChunks.has(chunk)) { - return chunk; - } - } - return null; - } - hasChunk(chunk) { - return this._loadedChunks.has(chunk); - } - getByte() { - const pos = this.pos; - if (pos >= this.end) { - return -1; - } - if (pos >= this.progressiveDataLength) { - this.ensureByte(pos); - } - return this.bytes[this.pos++]; - } - getBytes(length) { - const bytes = this.bytes; - const pos = this.pos; - const strEnd = this.end; - if (!length) { - if (strEnd > this.progressiveDataLength) { - this.ensureRange(pos, strEnd); - } - return bytes.subarray(pos, strEnd); - } - let end = pos + length; - if (end > strEnd) { - end = strEnd; - } - if (end > this.progressiveDataLength) { - this.ensureRange(pos, end); - } - this.pos = end; - return bytes.subarray(pos, end); - } - getByteRange(begin, end) { - if (begin < 0) { - begin = 0; - } - if (end > this.end) { - end = this.end; - } - if (end > this.progressiveDataLength) { - this.ensureRange(begin, end); - } - return this.bytes.subarray(begin, end); - } - makeSubStream(start, length, dict = null) { - if (length) { - if (start + length > this.progressiveDataLength) { - this.ensureRange(start, start + length); - } - } else if (start >= this.progressiveDataLength) { - this.ensureByte(start); - } - function ChunkedStreamSubstream() {} - ChunkedStreamSubstream.prototype = Object.create(this); - ChunkedStreamSubstream.prototype.getMissingChunks = function () { - const chunkSize = this.chunkSize; - const beginChunk = Math.floor(this.start / chunkSize); - const endChunk = Math.floor((this.end - 1) / chunkSize) + 1; - const missingChunks = []; - for (let chunk = beginChunk; chunk < endChunk; ++chunk) { - if (!this._loadedChunks.has(chunk)) { - missingChunks.push(chunk); - } - } - return missingChunks; - }; - Object.defineProperty(ChunkedStreamSubstream.prototype, "isDataLoaded", { - get() { - if (this.numChunksLoaded === this.numChunks) { - return true; - } - return this.getMissingChunks().length === 0; - }, - configurable: true - }); - const subStream = new ChunkedStreamSubstream(); - subStream.pos = subStream.start = start; - subStream.end = start + length || this.end; - subStream.dict = dict; - return subStream; - } - getBaseStreams() { - return [this]; - } -} -exports.ChunkedStream = ChunkedStream; -class ChunkedStreamManager { - constructor(pdfNetworkStream, args) { - this.length = args.length; - this.chunkSize = args.rangeChunkSize; - this.stream = new ChunkedStream(this.length, this.chunkSize, this); - this.pdfNetworkStream = pdfNetworkStream; - this.disableAutoFetch = args.disableAutoFetch; - this.msgHandler = args.msgHandler; - this.currRequestId = 0; - this._chunksNeededByRequest = new Map(); - this._requestsByChunk = new Map(); - this._promisesByRequest = new Map(); - this.progressiveDataLength = 0; - this.aborted = false; - this._loadedStreamCapability = new _util.PromiseCapability(); - } - sendRequest(begin, end) { - const rangeReader = this.pdfNetworkStream.getRangeReader(begin, end); - if (!rangeReader.isStreamingSupported) { - rangeReader.onProgress = this.onProgress.bind(this); - } - let chunks = [], - loaded = 0; - return new Promise((resolve, reject) => { - const readChunk = ({ - value, - done - }) => { - try { - if (done) { - const chunkData = (0, _core_utils.arrayBuffersToBytes)(chunks); - chunks = null; - resolve(chunkData); - return; - } - loaded += value.byteLength; - if (rangeReader.isStreamingSupported) { - this.onProgress({ - loaded - }); - } - chunks.push(value); - rangeReader.read().then(readChunk, reject); - } catch (e) { - reject(e); - } - }; - rangeReader.read().then(readChunk, reject); - }).then(data => { - if (this.aborted) { - return; - } - this.onReceiveData({ - chunk: data, - begin - }); - }); - } - requestAllChunks(noFetch = false) { - if (!noFetch) { - const missingChunks = this.stream.getMissingChunks(); - this._requestChunks(missingChunks); - } - return this._loadedStreamCapability.promise; - } - _requestChunks(chunks) { - const requestId = this.currRequestId++; - const chunksNeeded = new Set(); - this._chunksNeededByRequest.set(requestId, chunksNeeded); - for (const chunk of chunks) { - if (!this.stream.hasChunk(chunk)) { - chunksNeeded.add(chunk); - } - } - if (chunksNeeded.size === 0) { - return Promise.resolve(); - } - const capability = new _util.PromiseCapability(); - this._promisesByRequest.set(requestId, capability); - const chunksToRequest = []; - for (const chunk of chunksNeeded) { - let requestIds = this._requestsByChunk.get(chunk); - if (!requestIds) { - requestIds = []; - this._requestsByChunk.set(chunk, requestIds); - chunksToRequest.push(chunk); - } - requestIds.push(requestId); - } - if (chunksToRequest.length > 0) { - const groupedChunksToRequest = this.groupChunks(chunksToRequest); - for (const groupedChunk of groupedChunksToRequest) { - const begin = groupedChunk.beginChunk * this.chunkSize; - const end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length); - this.sendRequest(begin, end).catch(capability.reject); - } - } - return capability.promise.catch(reason => { - if (this.aborted) { - return; - } - throw reason; - }); - } - getStream() { - return this.stream; - } - requestRange(begin, end) { - end = Math.min(end, this.length); - const beginChunk = this.getBeginChunk(begin); - const endChunk = this.getEndChunk(end); - const chunks = []; - for (let chunk = beginChunk; chunk < endChunk; ++chunk) { - chunks.push(chunk); - } - return this._requestChunks(chunks); - } - requestRanges(ranges = []) { - const chunksToRequest = []; - for (const range of ranges) { - const beginChunk = this.getBeginChunk(range.begin); - const endChunk = this.getEndChunk(range.end); - for (let chunk = beginChunk; chunk < endChunk; ++chunk) { - if (!chunksToRequest.includes(chunk)) { - chunksToRequest.push(chunk); - } - } - } - chunksToRequest.sort(function (a, b) { - return a - b; - }); - return this._requestChunks(chunksToRequest); - } - groupChunks(chunks) { - const groupedChunks = []; - let beginChunk = -1; - let prevChunk = -1; - for (let i = 0, ii = chunks.length; i < ii; ++i) { - const chunk = chunks[i]; - if (beginChunk < 0) { - beginChunk = chunk; - } - if (prevChunk >= 0 && prevChunk + 1 !== chunk) { - groupedChunks.push({ - beginChunk, - endChunk: prevChunk + 1 - }); - beginChunk = chunk; - } - if (i + 1 === chunks.length) { - groupedChunks.push({ - beginChunk, - endChunk: chunk + 1 - }); - } - prevChunk = chunk; - } - return groupedChunks; - } - onProgress(args) { - this.msgHandler.send("DocProgress", { - loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded, - total: this.length - }); - } - onReceiveData(args) { - const chunk = args.chunk; - const isProgressive = args.begin === undefined; - const begin = isProgressive ? this.progressiveDataLength : args.begin; - const end = begin + chunk.byteLength; - const beginChunk = Math.floor(begin / this.chunkSize); - const endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize); - if (isProgressive) { - this.stream.onReceiveProgressiveData(chunk); - this.progressiveDataLength = end; - } else { - this.stream.onReceiveData(begin, chunk); - } - if (this.stream.isDataLoaded) { - this._loadedStreamCapability.resolve(this.stream); - } - const loadedRequests = []; - for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { - const requestIds = this._requestsByChunk.get(curChunk); - if (!requestIds) { - continue; - } - this._requestsByChunk.delete(curChunk); - for (const requestId of requestIds) { - const chunksNeeded = this._chunksNeededByRequest.get(requestId); - if (chunksNeeded.has(curChunk)) { - chunksNeeded.delete(curChunk); - } - if (chunksNeeded.size > 0) { - continue; - } - loadedRequests.push(requestId); - } - } - if (!this.disableAutoFetch && this._requestsByChunk.size === 0) { - let nextEmptyChunk; - if (this.stream.numChunksLoaded === 1) { - const lastChunk = this.stream.numChunks - 1; - if (!this.stream.hasChunk(lastChunk)) { - nextEmptyChunk = lastChunk; - } - } else { - nextEmptyChunk = this.stream.nextEmptyChunk(endChunk); - } - if (Number.isInteger(nextEmptyChunk)) { - this._requestChunks([nextEmptyChunk]); - } - } - for (const requestId of loadedRequests) { - const capability = this._promisesByRequest.get(requestId); - this._promisesByRequest.delete(requestId); - capability.resolve(); - } - this.msgHandler.send("DocProgress", { - loaded: this.stream.numChunksLoaded * this.chunkSize, - total: this.length - }); - } - onError(err) { - this._loadedStreamCapability.reject(err); - } - getBeginChunk(begin) { - return Math.floor(begin / this.chunkSize); - } - getEndChunk(end) { - return Math.floor((end - 1) / this.chunkSize) + 1; - } - abort(reason) { - this.aborted = true; - this.pdfNetworkStream?.cancelAllRequests(reason); - for (const capability of this._promisesByRequest.values()) { - capability.reject(reason); - } - } -} -exports.ChunkedStreamManager = ChunkedStreamManager; - -/***/ }), -/* 8 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StringStream = exports.Stream = exports.NullStream = void 0; -var _base_stream = __w_pdfjs_require__(5); -var _util = __w_pdfjs_require__(2); -class Stream extends _base_stream.BaseStream { - constructor(arrayBuffer, start, length, dict) { - super(); - this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer); - this.start = start || 0; - this.pos = this.start; - this.end = start + length || this.bytes.length; - this.dict = dict; - } - get length() { - return this.end - this.start; - } - get isEmpty() { - return this.length === 0; - } - getByte() { - if (this.pos >= this.end) { - return -1; - } - return this.bytes[this.pos++]; - } - getBytes(length) { - const bytes = this.bytes; - const pos = this.pos; - const strEnd = this.end; - if (!length) { - return bytes.subarray(pos, strEnd); - } - let end = pos + length; - if (end > strEnd) { - end = strEnd; - } - this.pos = end; - return bytes.subarray(pos, end); - } - getByteRange(begin, end) { - if (begin < 0) { - begin = 0; - } - if (end > this.end) { - end = this.end; - } - return this.bytes.subarray(begin, end); - } - reset() { - this.pos = this.start; - } - moveStart() { - this.start = this.pos; - } - makeSubStream(start, length, dict = null) { - return new Stream(this.bytes.buffer, start, length, dict); - } -} -exports.Stream = Stream; -class StringStream extends Stream { - constructor(str) { - super((0, _util.stringToBytes)(str)); - } -} -exports.StringStream = StringStream; -class NullStream extends Stream { - constructor() { - super(new Uint8Array(0)); - } -} -exports.NullStream = NullStream; - -/***/ }), -/* 9 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Page = exports.PDFDocument = void 0; -var _util = __w_pdfjs_require__(2); -var _annotation = __w_pdfjs_require__(10); -var _core_utils = __w_pdfjs_require__(3); -var _primitives = __w_pdfjs_require__(4); -var _xfa_fonts = __w_pdfjs_require__(51); -var _base_stream = __w_pdfjs_require__(5); -var _crypto = __w_pdfjs_require__(74); -var _catalog = __w_pdfjs_require__(66); -var _cleanup_helper = __w_pdfjs_require__(68); -var _dataset_reader = __w_pdfjs_require__(102); -var _parser = __w_pdfjs_require__(16); -var _stream = __w_pdfjs_require__(8); -var _object_loader = __w_pdfjs_require__(76); -var _operator_list = __w_pdfjs_require__(64); -var _evaluator = __w_pdfjs_require__(13); -var _decode_stream = __w_pdfjs_require__(18); -var _struct_tree = __w_pdfjs_require__(72); -var _writer = __w_pdfjs_require__(73); -var _factory = __w_pdfjs_require__(77); -var _xref = __w_pdfjs_require__(103); -const DEFAULT_USER_UNIT = 1.0; -const LETTER_SIZE_MEDIABOX = [0, 0, 612, 792]; -class Page { - constructor({ - pdfManager, - xref, - pageIndex, - pageDict, - ref, - globalIdFactory, - fontCache, - builtInCMapCache, - standardFontDataCache, - globalImageCache, - systemFontCache, - nonBlendModesSet, - xfaFactory - }) { - this.pdfManager = pdfManager; - this.pageIndex = pageIndex; - this.pageDict = pageDict; - this.xref = xref; - this.ref = ref; - this.fontCache = fontCache; - this.builtInCMapCache = builtInCMapCache; - this.standardFontDataCache = standardFontDataCache; - this.globalImageCache = globalImageCache; - this.systemFontCache = systemFontCache; - this.nonBlendModesSet = nonBlendModesSet; - this.evaluatorOptions = pdfManager.evaluatorOptions; - this.resourcesPromise = null; - this.xfaFactory = xfaFactory; - const idCounters = { - obj: 0 - }; - this._localIdFactory = class extends globalIdFactory { - static createObjId() { - return `p${pageIndex}_${++idCounters.obj}`; - } - static getPageObjId() { - return `p${ref.toString()}`; - } - }; - } - _getInheritableProperty(key, getArray = false) { - const value = (0, _core_utils.getInheritableProperty)({ - dict: this.pageDict, - key, - getArray, - stopWhenFound: false - }); - if (!Array.isArray(value)) { - return value; - } - if (value.length === 1 || !(value[0] instanceof _primitives.Dict)) { - return value[0]; - } - return _primitives.Dict.merge({ - xref: this.xref, - dictArray: value - }); - } - get content() { - return this.pageDict.getArray("Contents"); - } - get resources() { - const resources = this._getInheritableProperty("Resources"); - return (0, _util.shadow)(this, "resources", resources instanceof _primitives.Dict ? resources : _primitives.Dict.empty); - } - _getBoundingBox(name) { - if (this.xfaData) { - return this.xfaData.bbox; - } - let box = this._getInheritableProperty(name, true); - if (Array.isArray(box) && box.length === 4) { - box = _util.Util.normalizeRect(box); - if (box[2] - box[0] > 0 && box[3] - box[1] > 0) { - return box; - } - (0, _util.warn)(`Empty, or invalid, /${name} entry.`); - } - return null; - } - get mediaBox() { - return (0, _util.shadow)(this, "mediaBox", this._getBoundingBox("MediaBox") || LETTER_SIZE_MEDIABOX); - } - get cropBox() { - return (0, _util.shadow)(this, "cropBox", this._getBoundingBox("CropBox") || this.mediaBox); - } - get userUnit() { - let obj = this.pageDict.get("UserUnit"); - if (typeof obj !== "number" || obj <= 0) { - obj = DEFAULT_USER_UNIT; - } - return (0, _util.shadow)(this, "userUnit", obj); - } - get view() { - const { - cropBox, - mediaBox - } = this; - if (cropBox !== mediaBox && !(0, _util.isArrayEqual)(cropBox, mediaBox)) { - const box = _util.Util.intersect(cropBox, mediaBox); - if (box && box[2] - box[0] > 0 && box[3] - box[1] > 0) { - return (0, _util.shadow)(this, "view", box); - } - (0, _util.warn)("Empty /CropBox and /MediaBox intersection."); - } - return (0, _util.shadow)(this, "view", mediaBox); - } - get rotate() { - let rotate = this._getInheritableProperty("Rotate") || 0; - if (rotate % 90 !== 0) { - rotate = 0; - } else if (rotate >= 360) { - rotate %= 360; - } else if (rotate < 0) { - rotate = (rotate % 360 + 360) % 360; - } - return (0, _util.shadow)(this, "rotate", rotate); - } - _onSubStreamError(reason, objId) { - if (this.evaluatorOptions.ignoreErrors) { - (0, _util.warn)(`getContentStream - ignoring sub-stream (${objId}): "${reason}".`); - return; - } - throw reason; - } - getContentStream() { - return this.pdfManager.ensure(this, "content").then(content => { - if (content instanceof _base_stream.BaseStream) { - return content; - } - if (Array.isArray(content)) { - return new _decode_stream.StreamsSequenceStream(content, this._onSubStreamError.bind(this)); - } - return new _stream.NullStream(); - }); - } - get xfaData() { - return (0, _util.shadow)(this, "xfaData", this.xfaFactory ? { - bbox: this.xfaFactory.getBoundingBox(this.pageIndex) - } : null); - } - #replaceIdByRef(annotations, deletedAnnotations, existingAnnotations) { - for (const annotation of annotations) { - if (annotation.id) { - const ref = _primitives.Ref.fromString(annotation.id); - if (!ref) { - (0, _util.warn)(`A non-linked annotation cannot be modified: ${annotation.id}`); - continue; - } - if (annotation.deleted) { - deletedAnnotations.put(ref); - continue; - } - existingAnnotations?.put(ref); - annotation.ref = ref; - delete annotation.id; - } - } - } - async saveNewAnnotations(handler, task, annotations, imagePromises) { - if (this.xfaFactory) { - throw new Error("XFA: Cannot save new annotations."); - } - const partialEvaluator = new _evaluator.PartialEvaluator({ - xref: this.xref, - handler, - pageIndex: this.pageIndex, - idFactory: this._localIdFactory, - fontCache: this.fontCache, - builtInCMapCache: this.builtInCMapCache, - standardFontDataCache: this.standardFontDataCache, - globalImageCache: this.globalImageCache, - systemFontCache: this.systemFontCache, - options: this.evaluatorOptions - }); - const deletedAnnotations = new _primitives.RefSet(); - const existingAnnotations = new _primitives.RefSet(); - this.#replaceIdByRef(annotations, deletedAnnotations, existingAnnotations); - const pageDict = this.pageDict; - const annotationsArray = this.annotations.filter(a => !(a instanceof _primitives.Ref && deletedAnnotations.has(a))); - const newData = await _annotation.AnnotationFactory.saveNewAnnotations(partialEvaluator, task, annotations, imagePromises); - for (const { - ref - } of newData.annotations) { - if (ref instanceof _primitives.Ref && !existingAnnotations.has(ref)) { - annotationsArray.push(ref); - } - } - const savedDict = pageDict.get("Annots"); - pageDict.set("Annots", annotationsArray); - const buffer = []; - await (0, _writer.writeObject)(this.ref, pageDict, buffer, this.xref); - if (savedDict) { - pageDict.set("Annots", savedDict); - } - const objects = newData.dependencies; - objects.push({ - ref: this.ref, - data: buffer.join("") - }, ...newData.annotations); - return objects; - } - save(handler, task, annotationStorage) { - const partialEvaluator = new _evaluator.PartialEvaluator({ - xref: this.xref, - handler, - pageIndex: this.pageIndex, - idFactory: this._localIdFactory, - fontCache: this.fontCache, - builtInCMapCache: this.builtInCMapCache, - standardFontDataCache: this.standardFontDataCache, - globalImageCache: this.globalImageCache, - systemFontCache: this.systemFontCache, - options: this.evaluatorOptions - }); - return this._parsedAnnotations.then(function (annotations) { - const newRefsPromises = []; - for (const annotation of annotations) { - if (!annotation.mustBePrinted(annotationStorage)) { - continue; - } - newRefsPromises.push(annotation.save(partialEvaluator, task, annotationStorage).catch(function (reason) { - (0, _util.warn)("save - ignoring annotation data during " + `"${task.name}" task: "${reason}".`); - return null; - })); - } - return Promise.all(newRefsPromises).then(function (newRefs) { - return newRefs.filter(newRef => !!newRef); - }); - }); - } - loadResources(keys) { - if (!this.resourcesPromise) { - this.resourcesPromise = this.pdfManager.ensure(this, "resources"); - } - return this.resourcesPromise.then(() => { - const objectLoader = new _object_loader.ObjectLoader(this.resources, keys, this.xref); - return objectLoader.load(); - }); - } - getOperatorList({ - handler, - sink, - task, - intent, - cacheKey, - annotationStorage = null - }) { - const contentStreamPromise = this.getContentStream(); - const resourcesPromise = this.loadResources(["ColorSpace", "ExtGState", "Font", "Pattern", "Properties", "Shading", "XObject"]); - const partialEvaluator = new _evaluator.PartialEvaluator({ - xref: this.xref, - handler, - pageIndex: this.pageIndex, - idFactory: this._localIdFactory, - fontCache: this.fontCache, - builtInCMapCache: this.builtInCMapCache, - standardFontDataCache: this.standardFontDataCache, - globalImageCache: this.globalImageCache, - systemFontCache: this.systemFontCache, - options: this.evaluatorOptions - }); - const newAnnotationsByPage = !this.xfaFactory ? (0, _core_utils.getNewAnnotationsMap)(annotationStorage) : null; - let deletedAnnotations = null; - let newAnnotationsPromise = Promise.resolve(null); - if (newAnnotationsByPage) { - const newAnnotations = newAnnotationsByPage.get(this.pageIndex); - if (newAnnotations) { - const annotationGlobalsPromise = this.pdfManager.ensureDoc("annotationGlobals"); - let imagePromises; - const missingBitmaps = new Set(); - for (const { - bitmapId, - bitmap - } of newAnnotations) { - if (bitmapId && !bitmap && !missingBitmaps.has(bitmapId)) { - missingBitmaps.add(bitmapId); - } - } - const { - isOffscreenCanvasSupported - } = this.evaluatorOptions; - if (missingBitmaps.size > 0) { - const annotationWithBitmaps = newAnnotations.slice(); - for (const [key, annotation] of annotationStorage) { - if (!key.startsWith(_util.AnnotationEditorPrefix)) { - continue; - } - if (annotation.bitmap && missingBitmaps.has(annotation.bitmapId)) { - annotationWithBitmaps.push(annotation); - } - } - imagePromises = _annotation.AnnotationFactory.generateImages(annotationWithBitmaps, this.xref, isOffscreenCanvasSupported); - } else { - imagePromises = _annotation.AnnotationFactory.generateImages(newAnnotations, this.xref, isOffscreenCanvasSupported); - } - deletedAnnotations = new _primitives.RefSet(); - this.#replaceIdByRef(newAnnotations, deletedAnnotations, null); - newAnnotationsPromise = annotationGlobalsPromise.then(annotationGlobals => { - if (!annotationGlobals) { - return null; - } - return _annotation.AnnotationFactory.printNewAnnotations(annotationGlobals, partialEvaluator, task, newAnnotations, imagePromises); - }); - } - } - const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); - const pageListPromise = dataPromises.then(([contentStream]) => { - const opList = new _operator_list.OperatorList(intent, sink); - handler.send("StartRenderPage", { - transparency: partialEvaluator.hasBlendModes(this.resources, this.nonBlendModesSet), - pageIndex: this.pageIndex, - cacheKey - }); - return partialEvaluator.getOperatorList({ - stream: contentStream, - task, - resources: this.resources, - operatorList: opList - }).then(function () { - return opList; - }); - }); - return Promise.all([pageListPromise, this._parsedAnnotations, newAnnotationsPromise]).then(function ([pageOpList, annotations, newAnnotations]) { - if (newAnnotations) { - annotations = annotations.filter(a => !(a.ref && deletedAnnotations.has(a.ref))); - for (let i = 0, ii = newAnnotations.length; i < ii; i++) { - const newAnnotation = newAnnotations[i]; - if (newAnnotation.refToReplace) { - const j = annotations.findIndex(a => a.ref && (0, _primitives.isRefsEqual)(a.ref, newAnnotation.refToReplace)); - if (j >= 0) { - annotations.splice(j, 1, newAnnotation); - newAnnotations.splice(i--, 1); - ii--; - } - } - } - annotations = annotations.concat(newAnnotations); - } - if (annotations.length === 0 || intent & _util.RenderingIntentFlag.ANNOTATIONS_DISABLE) { - pageOpList.flush(true); - return { - length: pageOpList.totalLength - }; - } - const renderForms = !!(intent & _util.RenderingIntentFlag.ANNOTATIONS_FORMS), - intentAny = !!(intent & _util.RenderingIntentFlag.ANY), - intentDisplay = !!(intent & _util.RenderingIntentFlag.DISPLAY), - intentPrint = !!(intent & _util.RenderingIntentFlag.PRINT); - const opListPromises = []; - for (const annotation of annotations) { - if (intentAny || intentDisplay && annotation.mustBeViewed(annotationStorage, renderForms) || intentPrint && annotation.mustBePrinted(annotationStorage)) { - opListPromises.push(annotation.getOperatorList(partialEvaluator, task, intent, renderForms, annotationStorage).catch(function (reason) { - (0, _util.warn)("getOperatorList - ignoring annotation data during " + `"${task.name}" task: "${reason}".`); - return { - opList: null, - separateForm: false, - separateCanvas: false - }; - })); - } - } - return Promise.all(opListPromises).then(function (opLists) { - let form = false, - canvas = false; - for (const { - opList, - separateForm, - separateCanvas - } of opLists) { - pageOpList.addOpList(opList); - form ||= separateForm; - canvas ||= separateCanvas; - } - pageOpList.flush(true, { - form, - canvas - }); - return { - length: pageOpList.totalLength - }; - }); - }); - } - extractTextContent({ - handler, - task, - includeMarkedContent, - disableNormalization, - sink - }) { - const contentStreamPromise = this.getContentStream(); - const resourcesPromise = this.loadResources(["ExtGState", "Font", "Properties", "XObject"]); - const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); - return dataPromises.then(([contentStream]) => { - const partialEvaluator = new _evaluator.PartialEvaluator({ - xref: this.xref, - handler, - pageIndex: this.pageIndex, - idFactory: this._localIdFactory, - fontCache: this.fontCache, - builtInCMapCache: this.builtInCMapCache, - standardFontDataCache: this.standardFontDataCache, - globalImageCache: this.globalImageCache, - systemFontCache: this.systemFontCache, - options: this.evaluatorOptions - }); - return partialEvaluator.getTextContent({ - stream: contentStream, - task, - resources: this.resources, - includeMarkedContent, - disableNormalization, - sink, - viewBox: this.view - }); - }); - } - async getStructTree() { - const structTreeRoot = await this.pdfManager.ensureCatalog("structTreeRoot"); - if (!structTreeRoot) { - return null; - } - await this._parsedAnnotations; - const structTree = await this.pdfManager.ensure(this, "_parseStructTree", [structTreeRoot]); - return structTree.serializable; - } - _parseStructTree(structTreeRoot) { - const tree = new _struct_tree.StructTreePage(structTreeRoot, this.pageDict); - tree.parse(this.ref); - return tree; - } - async getAnnotationsData(handler, task, intent) { - const annotations = await this._parsedAnnotations; - if (annotations.length === 0) { - return annotations; - } - const annotationsData = [], - textContentPromises = []; - let partialEvaluator; - const intentAny = !!(intent & _util.RenderingIntentFlag.ANY), - intentDisplay = !!(intent & _util.RenderingIntentFlag.DISPLAY), - intentPrint = !!(intent & _util.RenderingIntentFlag.PRINT); - for (const annotation of annotations) { - const isVisible = intentAny || intentDisplay && annotation.viewable; - if (isVisible || intentPrint && annotation.printable) { - annotationsData.push(annotation.data); - } - if (annotation.hasTextContent && isVisible) { - partialEvaluator ||= new _evaluator.PartialEvaluator({ - xref: this.xref, - handler, - pageIndex: this.pageIndex, - idFactory: this._localIdFactory, - fontCache: this.fontCache, - builtInCMapCache: this.builtInCMapCache, - standardFontDataCache: this.standardFontDataCache, - globalImageCache: this.globalImageCache, - systemFontCache: this.systemFontCache, - options: this.evaluatorOptions - }); - textContentPromises.push(annotation.extractTextContent(partialEvaluator, task, [-Infinity, -Infinity, Infinity, Infinity]).catch(function (reason) { - (0, _util.warn)(`getAnnotationsData - ignoring textContent during "${task.name}" task: "${reason}".`); - })); - } - } - await Promise.all(textContentPromises); - return annotationsData; - } - get annotations() { - const annots = this._getInheritableProperty("Annots"); - return (0, _util.shadow)(this, "annotations", Array.isArray(annots) ? annots : []); - } - get _parsedAnnotations() { - const promise = this.pdfManager.ensure(this, "annotations").then(async annots => { - if (annots.length === 0) { - return annots; - } - const annotationGlobals = await this.pdfManager.ensureDoc("annotationGlobals"); - if (!annotationGlobals) { - return []; - } - const annotationPromises = []; - for (const annotationRef of annots) { - annotationPromises.push(_annotation.AnnotationFactory.create(this.xref, annotationRef, annotationGlobals, this._localIdFactory, false, this.ref).catch(function (reason) { - (0, _util.warn)(`_parsedAnnotations: "${reason}".`); - return null; - })); - } - const sortedAnnotations = []; - let popupAnnotations; - for (const annotation of await Promise.all(annotationPromises)) { - if (!annotation) { - continue; - } - if (annotation instanceof _annotation.PopupAnnotation) { - (popupAnnotations ||= []).push(annotation); - continue; - } - sortedAnnotations.push(annotation); - } - if (popupAnnotations) { - sortedAnnotations.push(...popupAnnotations); - } - return sortedAnnotations; - }); - return (0, _util.shadow)(this, "_parsedAnnotations", promise); - } - get jsActions() { - const actions = (0, _core_utils.collectActions)(this.xref, this.pageDict, _util.PageActionEventType); - return (0, _util.shadow)(this, "jsActions", actions); - } -} -exports.Page = Page; -const PDF_HEADER_SIGNATURE = new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x2d]); -const STARTXREF_SIGNATURE = new Uint8Array([0x73, 0x74, 0x61, 0x72, 0x74, 0x78, 0x72, 0x65, 0x66]); -const ENDOBJ_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a]); -const FINGERPRINT_FIRST_BYTES = 1024; -const EMPTY_FINGERPRINT = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; -function find(stream, signature, limit = 1024, backwards = false) { - const signatureLength = signature.length; - const scanBytes = stream.peekBytes(limit); - const scanLength = scanBytes.length - signatureLength; - if (scanLength <= 0) { - return false; - } - if (backwards) { - const signatureEnd = signatureLength - 1; - let pos = scanBytes.length - 1; - while (pos >= signatureEnd) { - let j = 0; - while (j < signatureLength && scanBytes[pos - j] === signature[signatureEnd - j]) { - j++; - } - if (j >= signatureLength) { - stream.pos += pos - signatureEnd; - return true; - } - pos--; - } - } else { - let pos = 0; - while (pos <= scanLength) { - let j = 0; - while (j < signatureLength && scanBytes[pos + j] === signature[j]) { - j++; - } - if (j >= signatureLength) { - stream.pos += pos; - return true; - } - pos++; - } - } - return false; -} -class PDFDocument { - constructor(pdfManager, stream) { - if (stream.length <= 0) { - throw new _util.InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes."); - } - this.pdfManager = pdfManager; - this.stream = stream; - this.xref = new _xref.XRef(stream, pdfManager); - this._pagePromises = new Map(); - this._version = null; - const idCounters = { - font: 0 - }; - this._globalIdFactory = class { - static getDocId() { - return `g_${pdfManager.docId}`; - } - static createFontId() { - return `f${++idCounters.font}`; - } - static createObjId() { - (0, _util.unreachable)("Abstract method `createObjId` called."); - } - static getPageObjId() { - (0, _util.unreachable)("Abstract method `getPageObjId` called."); - } - }; - } - parse(recoveryMode) { - this.xref.parse(recoveryMode); - this.catalog = new _catalog.Catalog(this.pdfManager, this.xref); - } - get linearization() { - let linearization = null; - try { - linearization = _parser.Linearization.create(this.stream); - } catch (err) { - if (err instanceof _core_utils.MissingDataException) { - throw err; - } - (0, _util.info)(err); - } - return (0, _util.shadow)(this, "linearization", linearization); - } - get startXRef() { - const stream = this.stream; - let startXRef = 0; - if (this.linearization) { - stream.reset(); - if (find(stream, ENDOBJ_SIGNATURE)) { - startXRef = stream.pos + 6 - stream.start; - } - } else { - const step = 1024; - const startXRefLength = STARTXREF_SIGNATURE.length; - let found = false, - pos = stream.end; - while (!found && pos > 0) { - pos -= step - startXRefLength; - if (pos < 0) { - pos = 0; - } - stream.pos = pos; - found = find(stream, STARTXREF_SIGNATURE, step, true); - } - if (found) { - stream.skip(9); - let ch; - do { - ch = stream.getByte(); - } while ((0, _core_utils.isWhiteSpace)(ch)); - let str = ""; - while (ch >= 0x20 && ch <= 0x39) { - str += String.fromCharCode(ch); - ch = stream.getByte(); - } - startXRef = parseInt(str, 10); - if (isNaN(startXRef)) { - startXRef = 0; - } - } - } - return (0, _util.shadow)(this, "startXRef", startXRef); - } - checkHeader() { - const stream = this.stream; - stream.reset(); - if (!find(stream, PDF_HEADER_SIGNATURE)) { - return; - } - stream.moveStart(); - stream.skip(PDF_HEADER_SIGNATURE.length); - let version = "", - ch; - while ((ch = stream.getByte()) > 0x20 && version.length < 7) { - version += String.fromCharCode(ch); - } - if (_core_utils.PDF_VERSION_REGEXP.test(version)) { - this._version = version; - } else { - (0, _util.warn)(`Invalid PDF header version: ${version}`); - } - } - parseStartXRef() { - this.xref.setStartXRef(this.startXRef); - } - get numPages() { - let num = 0; - if (this.catalog.hasActualNumPages) { - num = this.catalog.numPages; - } else if (this.xfaFactory) { - num = this.xfaFactory.getNumPages(); - } else if (this.linearization) { - num = this.linearization.numPages; - } else { - num = this.catalog.numPages; - } - return (0, _util.shadow)(this, "numPages", num); - } - _hasOnlyDocumentSignatures(fields, recursionDepth = 0) { - const RECURSION_LIMIT = 10; - if (!Array.isArray(fields)) { - return false; - } - return fields.every(field => { - field = this.xref.fetchIfRef(field); - if (!(field instanceof _primitives.Dict)) { - return false; - } - if (field.has("Kids")) { - if (++recursionDepth > RECURSION_LIMIT) { - (0, _util.warn)("_hasOnlyDocumentSignatures: maximum recursion depth reached"); - return false; - } - return this._hasOnlyDocumentSignatures(field.get("Kids"), recursionDepth); - } - const isSignature = (0, _primitives.isName)(field.get("FT"), "Sig"); - const rectangle = field.get("Rect"); - const isInvisible = Array.isArray(rectangle) && rectangle.every(value => value === 0); - return isSignature && isInvisible; - }); - } - get _xfaStreams() { - const acroForm = this.catalog.acroForm; - if (!acroForm) { - return null; - } - const xfa = acroForm.get("XFA"); - const entries = { - "xdp:xdp": "", - template: "", - datasets: "", - config: "", - connectionSet: "", - localeSet: "", - stylesheet: "", - "/xdp:xdp": "" - }; - if (xfa instanceof _base_stream.BaseStream && !xfa.isEmpty) { - entries["xdp:xdp"] = xfa; - return entries; - } - if (!Array.isArray(xfa) || xfa.length === 0) { - return null; - } - for (let i = 0, ii = xfa.length; i < ii; i += 2) { - let name; - if (i === 0) { - name = "xdp:xdp"; - } else if (i === ii - 2) { - name = "/xdp:xdp"; - } else { - name = xfa[i]; - } - if (!entries.hasOwnProperty(name)) { - continue; - } - const data = this.xref.fetchIfRef(xfa[i + 1]); - if (!(data instanceof _base_stream.BaseStream) || data.isEmpty) { - continue; - } - entries[name] = data; - } - return entries; - } - get xfaDatasets() { - const streams = this._xfaStreams; - if (!streams) { - return (0, _util.shadow)(this, "xfaDatasets", null); - } - for (const key of ["datasets", "xdp:xdp"]) { - const stream = streams[key]; - if (!stream) { - continue; - } - try { - const str = (0, _util.stringToUTF8String)(stream.getString()); - const data = { - [key]: str - }; - return (0, _util.shadow)(this, "xfaDatasets", new _dataset_reader.DatasetReader(data)); - } catch { - (0, _util.warn)("XFA - Invalid utf-8 string."); - break; - } - } - return (0, _util.shadow)(this, "xfaDatasets", null); - } - get xfaData() { - const streams = this._xfaStreams; - if (!streams) { - return null; - } - const data = Object.create(null); - for (const [key, stream] of Object.entries(streams)) { - if (!stream) { - continue; - } - try { - data[key] = (0, _util.stringToUTF8String)(stream.getString()); - } catch { - (0, _util.warn)("XFA - Invalid utf-8 string."); - return null; - } - } - return data; - } - get xfaFactory() { - let data; - if (this.pdfManager.enableXfa && this.catalog.needsRendering && this.formInfo.hasXfa && !this.formInfo.hasAcroForm) { - data = this.xfaData; - } - return (0, _util.shadow)(this, "xfaFactory", data ? new _factory.XFAFactory(data) : null); - } - get isPureXfa() { - return this.xfaFactory ? this.xfaFactory.isValid() : false; - } - get htmlForXfa() { - return this.xfaFactory ? this.xfaFactory.getPages() : null; - } - async loadXfaImages() { - const xfaImagesDict = await this.pdfManager.ensureCatalog("xfaImages"); - if (!xfaImagesDict) { - return; - } - const keys = xfaImagesDict.getKeys(); - const objectLoader = new _object_loader.ObjectLoader(xfaImagesDict, keys, this.xref); - await objectLoader.load(); - const xfaImages = new Map(); - for (const key of keys) { - const stream = xfaImagesDict.get(key); - if (stream instanceof _base_stream.BaseStream) { - xfaImages.set(key, stream.getBytes()); - } - } - this.xfaFactory.setImages(xfaImages); - } - async loadXfaFonts(handler, task) { - const acroForm = await this.pdfManager.ensureCatalog("acroForm"); - if (!acroForm) { - return; - } - const resources = await acroForm.getAsync("DR"); - if (!(resources instanceof _primitives.Dict)) { - return; - } - const objectLoader = new _object_loader.ObjectLoader(resources, ["Font"], this.xref); - await objectLoader.load(); - const fontRes = resources.get("Font"); - if (!(fontRes instanceof _primitives.Dict)) { - return; - } - const options = Object.assign(Object.create(null), this.pdfManager.evaluatorOptions); - options.useSystemFonts = false; - const partialEvaluator = new _evaluator.PartialEvaluator({ - xref: this.xref, - handler, - pageIndex: -1, - idFactory: this._globalIdFactory, - fontCache: this.catalog.fontCache, - builtInCMapCache: this.catalog.builtInCMapCache, - standardFontDataCache: this.catalog.standardFontDataCache, - options - }); - const operatorList = new _operator_list.OperatorList(); - const pdfFonts = []; - const initialState = { - get font() { - return pdfFonts.at(-1); - }, - set font(font) { - pdfFonts.push(font); - }, - clone() { - return this; - } - }; - const fonts = new Map(); - fontRes.forEach((fontName, font) => { - fonts.set(fontName, font); - }); - const promises = []; - for (const [fontName, font] of fonts) { - const descriptor = font.get("FontDescriptor"); - if (!(descriptor instanceof _primitives.Dict)) { - continue; - } - let fontFamily = descriptor.get("FontFamily"); - fontFamily = fontFamily.replaceAll(/[ ]+(\d)/g, "$1"); - const fontWeight = descriptor.get("FontWeight"); - const italicAngle = -descriptor.get("ItalicAngle"); - const cssFontInfo = { - fontFamily, - fontWeight, - italicAngle - }; - if (!(0, _core_utils.validateCSSFont)(cssFontInfo)) { - continue; - } - promises.push(partialEvaluator.handleSetFont(resources, [_primitives.Name.get(fontName), 1], null, operatorList, task, initialState, null, cssFontInfo).catch(function (reason) { - (0, _util.warn)(`loadXfaFonts: "${reason}".`); - return null; - })); - } - await Promise.all(promises); - const missingFonts = this.xfaFactory.setFonts(pdfFonts); - if (!missingFonts) { - return; - } - options.ignoreErrors = true; - promises.length = 0; - pdfFonts.length = 0; - const reallyMissingFonts = new Set(); - for (const missing of missingFonts) { - if (!(0, _xfa_fonts.getXfaFontName)(`${missing}-Regular`)) { - reallyMissingFonts.add(missing); - } - } - if (reallyMissingFonts.size) { - missingFonts.push("PdfJS-Fallback"); - } - for (const missing of missingFonts) { - if (reallyMissingFonts.has(missing)) { - continue; - } - for (const fontInfo of [{ - name: "Regular", - fontWeight: 400, - italicAngle: 0 - }, { - name: "Bold", - fontWeight: 700, - italicAngle: 0 - }, { - name: "Italic", - fontWeight: 400, - italicAngle: 12 - }, { - name: "BoldItalic", - fontWeight: 700, - italicAngle: 12 - }]) { - const name = `${missing}-${fontInfo.name}`; - const dict = (0, _xfa_fonts.getXfaFontDict)(name); - promises.push(partialEvaluator.handleSetFont(resources, [_primitives.Name.get(name), 1], null, operatorList, task, initialState, dict, { - fontFamily: missing, - fontWeight: fontInfo.fontWeight, - italicAngle: fontInfo.italicAngle - }).catch(function (reason) { - (0, _util.warn)(`loadXfaFonts: "${reason}".`); - return null; - })); - } - } - await Promise.all(promises); - this.xfaFactory.appendFonts(pdfFonts, reallyMissingFonts); - } - async serializeXfaData(annotationStorage) { - return this.xfaFactory ? this.xfaFactory.serializeData(annotationStorage) : null; - } - get version() { - return this.catalog.version || this._version; - } - get formInfo() { - const formInfo = { - hasFields: false, - hasAcroForm: false, - hasXfa: false, - hasSignatures: false - }; - const acroForm = this.catalog.acroForm; - if (!acroForm) { - return (0, _util.shadow)(this, "formInfo", formInfo); - } - try { - const fields = acroForm.get("Fields"); - const hasFields = Array.isArray(fields) && fields.length > 0; - formInfo.hasFields = hasFields; - const xfa = acroForm.get("XFA"); - formInfo.hasXfa = Array.isArray(xfa) && xfa.length > 0 || xfa instanceof _base_stream.BaseStream && !xfa.isEmpty; - const sigFlags = acroForm.get("SigFlags"); - const hasSignatures = !!(sigFlags & 0x1); - const hasOnlyDocumentSignatures = hasSignatures && this._hasOnlyDocumentSignatures(fields); - formInfo.hasAcroForm = hasFields && !hasOnlyDocumentSignatures; - formInfo.hasSignatures = hasSignatures; - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.warn)(`Cannot fetch form information: "${ex}".`); - } - return (0, _util.shadow)(this, "formInfo", formInfo); - } - get documentInfo() { - const docInfo = { - PDFFormatVersion: this.version, - Language: this.catalog.lang, - EncryptFilterName: this.xref.encrypt ? this.xref.encrypt.filterName : null, - IsLinearized: !!this.linearization, - IsAcroFormPresent: this.formInfo.hasAcroForm, - IsXFAPresent: this.formInfo.hasXfa, - IsCollectionPresent: !!this.catalog.collection, - IsSignaturesPresent: this.formInfo.hasSignatures - }; - let infoDict; - try { - infoDict = this.xref.trailer.get("Info"); - } catch (err) { - if (err instanceof _core_utils.MissingDataException) { - throw err; - } - (0, _util.info)("The document information dictionary is invalid."); - } - if (!(infoDict instanceof _primitives.Dict)) { - return (0, _util.shadow)(this, "documentInfo", docInfo); - } - for (const key of infoDict.getKeys()) { - const value = infoDict.get(key); - switch (key) { - case "Title": - case "Author": - case "Subject": - case "Keywords": - case "Creator": - case "Producer": - case "CreationDate": - case "ModDate": - if (typeof value === "string") { - docInfo[key] = (0, _util.stringToPDFString)(value); - continue; - } - break; - case "Trapped": - if (value instanceof _primitives.Name) { - docInfo[key] = value; - continue; - } - break; - default: - let customValue; - switch (typeof value) { - case "string": - customValue = (0, _util.stringToPDFString)(value); - break; - case "number": - case "boolean": - customValue = value; - break; - default: - if (value instanceof _primitives.Name) { - customValue = value; - } - break; - } - if (customValue === undefined) { - (0, _util.warn)(`Bad value, for custom key "${key}", in Info: ${value}.`); - continue; - } - if (!docInfo.Custom) { - docInfo.Custom = Object.create(null); - } - docInfo.Custom[key] = customValue; - continue; - } - (0, _util.warn)(`Bad value, for key "${key}", in Info: ${value}.`); - } - return (0, _util.shadow)(this, "documentInfo", docInfo); - } - get fingerprints() { - function validate(data) { - return typeof data === "string" && data.length > 0 && data !== EMPTY_FINGERPRINT; - } - function hexString(hash) { - const buf = []; - for (const num of hash) { - const hex = num.toString(16); - buf.push(hex.padStart(2, "0")); - } - return buf.join(""); - } - const idArray = this.xref.trailer.get("ID"); - let hashOriginal, hashModified; - if (Array.isArray(idArray) && validate(idArray[0])) { - hashOriginal = (0, _util.stringToBytes)(idArray[0]); - if (idArray[1] !== idArray[0] && validate(idArray[1])) { - hashModified = (0, _util.stringToBytes)(idArray[1]); - } - } else { - hashOriginal = (0, _crypto.calculateMD5)(this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES); - } - return (0, _util.shadow)(this, "fingerprints", [hexString(hashOriginal), hashModified ? hexString(hashModified) : null]); - } - async _getLinearizationPage(pageIndex) { - const { - catalog, - linearization, - xref - } = this; - const ref = _primitives.Ref.get(linearization.objectNumberFirst, 0); - try { - const obj = await xref.fetchAsync(ref); - if (obj instanceof _primitives.Dict) { - let type = obj.getRaw("Type"); - if (type instanceof _primitives.Ref) { - type = await xref.fetchAsync(type); - } - if ((0, _primitives.isName)(type, "Page") || !obj.has("Type") && !obj.has("Kids")) { - if (!catalog.pageKidsCountCache.has(ref)) { - catalog.pageKidsCountCache.put(ref, 1); - } - if (!catalog.pageIndexCache.has(ref)) { - catalog.pageIndexCache.put(ref, 0); - } - return [obj, ref]; - } - } - throw new _util.FormatError("The Linearization dictionary doesn't point to a valid Page dictionary."); - } catch (reason) { - (0, _util.warn)(`_getLinearizationPage: "${reason.message}".`); - return catalog.getPageDict(pageIndex); - } - } - getPage(pageIndex) { - const cachedPromise = this._pagePromises.get(pageIndex); - if (cachedPromise) { - return cachedPromise; - } - const { - catalog, - linearization, - xfaFactory - } = this; - let promise; - if (xfaFactory) { - promise = Promise.resolve([_primitives.Dict.empty, null]); - } else if (linearization?.pageFirst === pageIndex) { - promise = this._getLinearizationPage(pageIndex); - } else { - promise = catalog.getPageDict(pageIndex); - } - promise = promise.then(([pageDict, ref]) => { - return new Page({ - pdfManager: this.pdfManager, - xref: this.xref, - pageIndex, - pageDict, - ref, - globalIdFactory: this._globalIdFactory, - fontCache: catalog.fontCache, - builtInCMapCache: catalog.builtInCMapCache, - standardFontDataCache: catalog.standardFontDataCache, - globalImageCache: catalog.globalImageCache, - systemFontCache: catalog.systemFontCache, - nonBlendModesSet: catalog.nonBlendModesSet, - xfaFactory - }); - }); - this._pagePromises.set(pageIndex, promise); - return promise; - } - async checkFirstPage(recoveryMode = false) { - if (recoveryMode) { - return; - } - try { - await this.getPage(0); - } catch (reason) { - if (reason instanceof _core_utils.XRefEntryException) { - this._pagePromises.delete(0); - await this.cleanup(); - throw new _core_utils.XRefParseException(); - } - } - } - async checkLastPage(recoveryMode = false) { - const { - catalog, - pdfManager - } = this; - catalog.setActualNumPages(); - let numPages; - try { - await Promise.all([pdfManager.ensureDoc("xfaFactory"), pdfManager.ensureDoc("linearization"), pdfManager.ensureCatalog("numPages")]); - if (this.xfaFactory) { - return; - } else if (this.linearization) { - numPages = this.linearization.numPages; - } else { - numPages = catalog.numPages; - } - if (!Number.isInteger(numPages)) { - throw new _util.FormatError("Page count is not an integer."); - } else if (numPages <= 1) { - return; - } - await this.getPage(numPages - 1); - } catch (reason) { - this._pagePromises.delete(numPages - 1); - await this.cleanup(); - if (reason instanceof _core_utils.XRefEntryException && !recoveryMode) { - throw new _core_utils.XRefParseException(); - } - (0, _util.warn)(`checkLastPage - invalid /Pages tree /Count: ${numPages}.`); - let pagesTree; - try { - pagesTree = await catalog.getAllPageDicts(recoveryMode); - } catch (reasonAll) { - if (reasonAll instanceof _core_utils.XRefEntryException && !recoveryMode) { - throw new _core_utils.XRefParseException(); - } - catalog.setActualNumPages(1); - return; - } - for (const [pageIndex, [pageDict, ref]] of pagesTree) { - let promise; - if (pageDict instanceof Error) { - promise = Promise.reject(pageDict); - promise.catch(() => {}); - } else { - promise = Promise.resolve(new Page({ - pdfManager, - xref: this.xref, - pageIndex, - pageDict, - ref, - globalIdFactory: this._globalIdFactory, - fontCache: catalog.fontCache, - builtInCMapCache: catalog.builtInCMapCache, - standardFontDataCache: catalog.standardFontDataCache, - globalImageCache: catalog.globalImageCache, - systemFontCache: catalog.systemFontCache, - nonBlendModesSet: catalog.nonBlendModesSet, - xfaFactory: null - })); - } - this._pagePromises.set(pageIndex, promise); - } - catalog.setActualNumPages(pagesTree.size); - } - } - fontFallback(id, handler) { - return this.catalog.fontFallback(id, handler); - } - async cleanup(manuallyTriggered = false) { - return this.catalog ? this.catalog.cleanup(manuallyTriggered) : (0, _cleanup_helper.clearGlobalCaches)(); - } - #collectFieldObjects(name, fieldRef, promises, annotationGlobals) { - const field = this.xref.fetchIfRef(fieldRef); - if (field.has("T")) { - const partName = (0, _util.stringToPDFString)(field.get("T")); - name = name === "" ? partName : `${name}.${partName}`; - } - if (!promises.has(name)) { - promises.set(name, []); - } - promises.get(name).push(_annotation.AnnotationFactory.create(this.xref, fieldRef, annotationGlobals, this._localIdFactory, true, null).then(annotation => annotation?.getFieldObject()).catch(function (reason) { - (0, _util.warn)(`#collectFieldObjects: "${reason}".`); - return null; - })); - if (field.has("Kids")) { - for (const kid of field.get("Kids")) { - this.#collectFieldObjects(name, kid, promises, annotationGlobals); - } - } - } - get fieldObjects() { - if (!this.formInfo.hasFields) { - return (0, _util.shadow)(this, "fieldObjects", Promise.resolve(null)); - } - const promise = this.pdfManager.ensureDoc("annotationGlobals").then(async annotationGlobals => { - if (!annotationGlobals) { - return null; - } - const allFields = Object.create(null); - const fieldPromises = new Map(); - for (const fieldRef of this.catalog.acroForm.get("Fields")) { - this.#collectFieldObjects("", fieldRef, fieldPromises, annotationGlobals); - } - const allPromises = []; - for (const [name, promises] of fieldPromises) { - allPromises.push(Promise.all(promises).then(fields => { - fields = fields.filter(field => !!field); - if (fields.length > 0) { - allFields[name] = fields; - } - })); - } - await Promise.all(allPromises); - return allFields; - }); - return (0, _util.shadow)(this, "fieldObjects", promise); - } - get hasJSActions() { - const promise = this.pdfManager.ensureDoc("_parseHasJSActions"); - return (0, _util.shadow)(this, "hasJSActions", promise); - } - async _parseHasJSActions() { - const [catalogJsActions, fieldObjects] = await Promise.all([this.pdfManager.ensureCatalog("jsActions"), this.pdfManager.ensureDoc("fieldObjects")]); - if (catalogJsActions) { - return true; - } - if (fieldObjects) { - return Object.values(fieldObjects).some(fieldObject => fieldObject.some(object => object.actions !== null)); - } - return false; - } - get calculationOrderIds() { - const acroForm = this.catalog.acroForm; - if (!acroForm?.has("CO")) { - return (0, _util.shadow)(this, "calculationOrderIds", null); - } - const calculationOrder = acroForm.get("CO"); - if (!Array.isArray(calculationOrder) || calculationOrder.length === 0) { - return (0, _util.shadow)(this, "calculationOrderIds", null); - } - const ids = []; - for (const id of calculationOrder) { - if (id instanceof _primitives.Ref) { - ids.push(id.toString()); - } - } - if (ids.length === 0) { - return (0, _util.shadow)(this, "calculationOrderIds", null); - } - return (0, _util.shadow)(this, "calculationOrderIds", ids); - } - get annotationGlobals() { - return (0, _util.shadow)(this, "annotationGlobals", _annotation.AnnotationFactory.createGlobals(this.pdfManager)); - } -} -exports.PDFDocument = PDFDocument; - -/***/ }), -/* 10 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PopupAnnotation = exports.MarkupAnnotation = exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = void 0; -exports.getQuadPoints = getQuadPoints; -var _util = __w_pdfjs_require__(2); -var _core_utils = __w_pdfjs_require__(3); -var _default_appearance = __w_pdfjs_require__(11); -var _primitives = __w_pdfjs_require__(4); -var _stream = __w_pdfjs_require__(8); -var _base_stream = __w_pdfjs_require__(5); -var _bidi = __w_pdfjs_require__(60); -var _catalog = __w_pdfjs_require__(66); -var _colorspace = __w_pdfjs_require__(12); -var _file_spec = __w_pdfjs_require__(69); -var _jpeg_stream = __w_pdfjs_require__(26); -var _object_loader = __w_pdfjs_require__(76); -var _operator_list = __w_pdfjs_require__(64); -var _writer = __w_pdfjs_require__(73); -var _factory = __w_pdfjs_require__(77); -class AnnotationFactory { - static createGlobals(pdfManager) { - return Promise.all([pdfManager.ensureCatalog("acroForm"), pdfManager.ensureDoc("xfaDatasets"), pdfManager.ensureCatalog("structTreeRoot"), pdfManager.ensureCatalog("baseUrl"), pdfManager.ensureCatalog("attachments")]).then(([acroForm, xfaDatasets, structTreeRoot, baseUrl, attachments]) => { - return { - pdfManager, - acroForm: acroForm instanceof _primitives.Dict ? acroForm : _primitives.Dict.empty, - xfaDatasets, - structTreeRoot, - baseUrl, - attachments - }; - }, reason => { - (0, _util.warn)(`createGlobals: "${reason}".`); - return null; - }); - } - static async create(xref, ref, annotationGlobals, idFactory, collectFields, pageRef) { - const pageIndex = collectFields ? await this._getPageIndex(xref, ref, annotationGlobals.pdfManager) : null; - return annotationGlobals.pdfManager.ensure(this, "_create", [xref, ref, annotationGlobals, idFactory, collectFields, pageIndex, pageRef]); - } - static _create(xref, ref, annotationGlobals, idFactory, collectFields = false, pageIndex = null, pageRef = null) { - const dict = xref.fetchIfRef(ref); - if (!(dict instanceof _primitives.Dict)) { - return undefined; - } - const { - acroForm, - pdfManager - } = annotationGlobals; - const id = ref instanceof _primitives.Ref ? ref.toString() : `annot_${idFactory.createObjId()}`; - let subtype = dict.get("Subtype"); - subtype = subtype instanceof _primitives.Name ? subtype.name : null; - const parameters = { - xref, - ref, - dict, - subtype, - id, - annotationGlobals, - collectFields, - needAppearances: !collectFields && acroForm.get("NeedAppearances") === true, - pageIndex, - evaluatorOptions: pdfManager.evaluatorOptions, - pageRef - }; - switch (subtype) { - case "Link": - return new LinkAnnotation(parameters); - case "Text": - return new TextAnnotation(parameters); - case "Widget": - let fieldType = (0, _core_utils.getInheritableProperty)({ - dict, - key: "FT" - }); - fieldType = fieldType instanceof _primitives.Name ? fieldType.name : null; - switch (fieldType) { - case "Tx": - return new TextWidgetAnnotation(parameters); - case "Btn": - return new ButtonWidgetAnnotation(parameters); - case "Ch": - return new ChoiceWidgetAnnotation(parameters); - case "Sig": - return new SignatureWidgetAnnotation(parameters); - } - (0, _util.warn)(`Unimplemented widget field type "${fieldType}", ` + "falling back to base field type."); - return new WidgetAnnotation(parameters); - case "Popup": - return new PopupAnnotation(parameters); - case "FreeText": - return new FreeTextAnnotation(parameters); - case "Line": - return new LineAnnotation(parameters); - case "Square": - return new SquareAnnotation(parameters); - case "Circle": - return new CircleAnnotation(parameters); - case "PolyLine": - return new PolylineAnnotation(parameters); - case "Polygon": - return new PolygonAnnotation(parameters); - case "Caret": - return new CaretAnnotation(parameters); - case "Ink": - return new InkAnnotation(parameters); - case "Highlight": - return new HighlightAnnotation(parameters); - case "Underline": - return new UnderlineAnnotation(parameters); - case "Squiggly": - return new SquigglyAnnotation(parameters); - case "StrikeOut": - return new StrikeOutAnnotation(parameters); - case "Stamp": - return new StampAnnotation(parameters); - case "FileAttachment": - return new FileAttachmentAnnotation(parameters); - default: - if (!collectFields) { - if (!subtype) { - (0, _util.warn)("Annotation is missing the required /Subtype."); - } else { - (0, _util.warn)(`Unimplemented annotation type "${subtype}", ` + "falling back to base annotation."); - } - } - return new Annotation(parameters); - } - } - static async _getPageIndex(xref, ref, pdfManager) { - try { - const annotDict = await xref.fetchIfRefAsync(ref); - if (!(annotDict instanceof _primitives.Dict)) { - return -1; - } - const pageRef = annotDict.getRaw("P"); - if (pageRef instanceof _primitives.Ref) { - try { - const pageIndex = await pdfManager.ensureCatalog("getPageIndex", [pageRef]); - return pageIndex; - } catch (ex) { - (0, _util.info)(`_getPageIndex -- not a valid page reference: "${ex}".`); - } - } - if (annotDict.has("Kids")) { - return -1; - } - const numPages = await pdfManager.ensureDoc("numPages"); - for (let pageIndex = 0; pageIndex < numPages; pageIndex++) { - const page = await pdfManager.getPage(pageIndex); - const annotations = await pdfManager.ensure(page, "annotations"); - for (const annotRef of annotations) { - if (annotRef instanceof _primitives.Ref && (0, _primitives.isRefsEqual)(annotRef, ref)) { - return pageIndex; - } - } - } - } catch (ex) { - (0, _util.warn)(`_getPageIndex: "${ex}".`); - } - return -1; - } - static generateImages(annotations, xref, isOffscreenCanvasSupported) { - if (!isOffscreenCanvasSupported) { - (0, _util.warn)("generateImages: OffscreenCanvas is not supported, cannot save or print some annotations with images."); - return null; - } - let imagePromises; - for (const { - bitmapId, - bitmap - } of annotations) { - if (!bitmap) { - continue; - } - imagePromises ||= new Map(); - imagePromises.set(bitmapId, StampAnnotation.createImage(bitmap, xref)); - } - return imagePromises; - } - static async saveNewAnnotations(evaluator, task, annotations, imagePromises) { - const xref = evaluator.xref; - let baseFontRef; - const dependencies = []; - const promises = []; - const { - isOffscreenCanvasSupported - } = evaluator.options; - for (const annotation of annotations) { - if (annotation.deleted) { - continue; - } - switch (annotation.annotationType) { - case _util.AnnotationEditorType.FREETEXT: - if (!baseFontRef) { - const baseFont = new _primitives.Dict(xref); - baseFont.set("BaseFont", _primitives.Name.get("Helvetica")); - baseFont.set("Type", _primitives.Name.get("Font")); - baseFont.set("Subtype", _primitives.Name.get("Type1")); - baseFont.set("Encoding", _primitives.Name.get("WinAnsiEncoding")); - const buffer = []; - baseFontRef = xref.getNewTemporaryRef(); - await (0, _writer.writeObject)(baseFontRef, baseFont, buffer, xref); - dependencies.push({ - ref: baseFontRef, - data: buffer.join("") - }); - } - promises.push(FreeTextAnnotation.createNewAnnotation(xref, annotation, dependencies, { - evaluator, - task, - baseFontRef - })); - break; - case _util.AnnotationEditorType.INK: - promises.push(InkAnnotation.createNewAnnotation(xref, annotation, dependencies)); - break; - case _util.AnnotationEditorType.STAMP: - if (!isOffscreenCanvasSupported) { - break; - } - const image = await imagePromises.get(annotation.bitmapId); - if (image.imageStream) { - const { - imageStream, - smaskStream - } = image; - const buffer = []; - if (smaskStream) { - const smaskRef = xref.getNewTemporaryRef(); - await (0, _writer.writeObject)(smaskRef, smaskStream, buffer, xref); - dependencies.push({ - ref: smaskRef, - data: buffer.join("") - }); - imageStream.dict.set("SMask", smaskRef); - buffer.length = 0; - } - const imageRef = image.imageRef = xref.getNewTemporaryRef(); - await (0, _writer.writeObject)(imageRef, imageStream, buffer, xref); - dependencies.push({ - ref: imageRef, - data: buffer.join("") - }); - image.imageStream = image.smaskStream = null; - } - promises.push(StampAnnotation.createNewAnnotation(xref, annotation, dependencies, { - image - })); - break; - } - } - return { - annotations: await Promise.all(promises), - dependencies - }; - } - static async printNewAnnotations(annotationGlobals, evaluator, task, annotations, imagePromises) { - if (!annotations) { - return null; - } - const { - options, - xref - } = evaluator; - const promises = []; - for (const annotation of annotations) { - if (annotation.deleted) { - continue; - } - switch (annotation.annotationType) { - case _util.AnnotationEditorType.FREETEXT: - promises.push(FreeTextAnnotation.createNewPrintAnnotation(annotationGlobals, xref, annotation, { - evaluator, - task, - evaluatorOptions: options - })); - break; - case _util.AnnotationEditorType.INK: - promises.push(InkAnnotation.createNewPrintAnnotation(annotationGlobals, xref, annotation, { - evaluatorOptions: options - })); - break; - case _util.AnnotationEditorType.STAMP: - if (!options.isOffscreenCanvasSupported) { - break; - } - const image = await imagePromises.get(annotation.bitmapId); - if (image.imageStream) { - const { - imageStream, - smaskStream - } = image; - if (smaskStream) { - imageStream.dict.set("SMask", smaskStream); - } - image.imageRef = new _jpeg_stream.JpegStream(imageStream, imageStream.length); - image.imageStream = image.smaskStream = null; - } - promises.push(StampAnnotation.createNewPrintAnnotation(annotationGlobals, xref, annotation, { - image, - evaluatorOptions: options - })); - break; - } - } - return Promise.all(promises); - } -} -exports.AnnotationFactory = AnnotationFactory; -function getRgbColor(color, defaultColor = new Uint8ClampedArray(3)) { - if (!Array.isArray(color)) { - return defaultColor; - } - const rgbColor = defaultColor || new Uint8ClampedArray(3); - switch (color.length) { - case 0: - return null; - case 1: - _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0); - return rgbColor; - case 3: - _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0); - return rgbColor; - case 4: - _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0); - return rgbColor; - default: - return defaultColor; - } -} -function getPdfColorArray(color) { - return Array.from(color, c => c / 255); -} -function getQuadPoints(dict, rect) { - const quadPoints = dict.getArray("QuadPoints"); - if (!Array.isArray(quadPoints) || quadPoints.length === 0 || quadPoints.length % 8 > 0) { - return null; - } - const quadPointsLists = []; - for (let i = 0, ii = quadPoints.length / 8; i < ii; i++) { - let minX = Infinity, - maxX = -Infinity, - minY = Infinity, - maxY = -Infinity; - for (let j = i * 8, jj = i * 8 + 8; j < jj; j += 2) { - const x = quadPoints[j]; - const y = quadPoints[j + 1]; - minX = Math.min(x, minX); - maxX = Math.max(x, maxX); - minY = Math.min(y, minY); - maxY = Math.max(y, maxY); - } - if (rect !== null && (minX < rect[0] || maxX > rect[2] || minY < rect[1] || maxY > rect[3])) { - return null; - } - quadPointsLists.push([{ - x: minX, - y: maxY - }, { - x: maxX, - y: maxY - }, { - x: minX, - y: minY - }, { - x: maxX, - y: minY - }]); - } - return quadPointsLists; -} -function getTransformMatrix(rect, bbox, matrix) { - const [minX, minY, maxX, maxY] = _util.Util.getAxialAlignedBoundingBox(bbox, matrix); - if (minX === maxX || minY === maxY) { - return [1, 0, 0, 1, rect[0], rect[1]]; - } - const xRatio = (rect[2] - rect[0]) / (maxX - minX); - const yRatio = (rect[3] - rect[1]) / (maxY - minY); - return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio]; -} -class Annotation { - constructor(params) { - const { - dict, - xref, - annotationGlobals - } = params; - this.setTitle(dict.get("T")); - this.setContents(dict.get("Contents")); - this.setModificationDate(dict.get("M")); - this.setFlags(dict.get("F")); - this.setRectangle(dict.getArray("Rect")); - this.setColor(dict.getArray("C")); - this.setBorderStyle(dict); - this.setAppearance(dict); - this.setOptionalContent(dict); - const MK = dict.get("MK"); - this.setBorderAndBackgroundColors(MK); - this.setRotation(MK, dict); - this.ref = params.ref instanceof _primitives.Ref ? params.ref : null; - this._streams = []; - if (this.appearance) { - this._streams.push(this.appearance); - } - const isLocked = !!(this.flags & _util.AnnotationFlag.LOCKED); - const isContentLocked = !!(this.flags & _util.AnnotationFlag.LOCKEDCONTENTS); - if (annotationGlobals.structTreeRoot) { - let structParent = dict.get("StructParent"); - structParent = Number.isInteger(structParent) && structParent >= 0 ? structParent : -1; - annotationGlobals.structTreeRoot.addAnnotationIdToPage(params.pageRef, structParent); - } - this.data = { - annotationFlags: this.flags, - borderStyle: this.borderStyle, - color: this.color, - backgroundColor: this.backgroundColor, - borderColor: this.borderColor, - rotation: this.rotation, - contentsObj: this._contents, - hasAppearance: !!this.appearance, - id: params.id, - modificationDate: this.modificationDate, - rect: this.rectangle, - subtype: params.subtype, - hasOwnCanvas: false, - noRotate: !!(this.flags & _util.AnnotationFlag.NOROTATE), - noHTML: isLocked && isContentLocked - }; - if (params.collectFields) { - const kids = dict.get("Kids"); - if (Array.isArray(kids)) { - const kidIds = []; - for (const kid of kids) { - if (kid instanceof _primitives.Ref) { - kidIds.push(kid.toString()); - } - } - if (kidIds.length !== 0) { - this.data.kidIds = kidIds; - } - } - this.data.actions = (0, _core_utils.collectActions)(xref, dict, _util.AnnotationActionEventType); - this.data.fieldName = this._constructFieldName(dict); - this.data.pageIndex = params.pageIndex; - } - this._isOffscreenCanvasSupported = params.evaluatorOptions.isOffscreenCanvasSupported; - this._fallbackFontDict = null; - this._needAppearances = false; - } - _hasFlag(flags, flag) { - return !!(flags & flag); - } - _isViewable(flags) { - return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW); - } - _isPrintable(flags) { - return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE); - } - mustBeViewed(annotationStorage, _renderForms) { - const noView = annotationStorage?.get(this.data.id)?.noView; - if (noView !== undefined) { - return !noView; - } - return this.viewable && !this._hasFlag(this.flags, _util.AnnotationFlag.HIDDEN); - } - mustBePrinted(annotationStorage) { - const noPrint = annotationStorage?.get(this.data.id)?.noPrint; - if (noPrint !== undefined) { - return !noPrint; - } - return this.printable; - } - get viewable() { - if (this.data.quadPoints === null) { - return false; - } - if (this.flags === 0) { - return true; - } - return this._isViewable(this.flags); - } - get printable() { - if (this.data.quadPoints === null) { - return false; - } - if (this.flags === 0) { - return false; - } - return this._isPrintable(this.flags); - } - _parseStringHelper(data) { - const str = typeof data === "string" ? (0, _util.stringToPDFString)(data) : ""; - const dir = str && (0, _bidi.bidi)(str).dir === "rtl" ? "rtl" : "ltr"; - return { - str, - dir - }; - } - setDefaultAppearance(params) { - const { - dict, - annotationGlobals - } = params; - const defaultAppearance = (0, _core_utils.getInheritableProperty)({ - dict, - key: "DA" - }) || annotationGlobals.acroForm.get("DA"); - this._defaultAppearance = typeof defaultAppearance === "string" ? defaultAppearance : ""; - this.data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance); - } - setTitle(title) { - this._title = this._parseStringHelper(title); - } - setContents(contents) { - this._contents = this._parseStringHelper(contents); - } - setModificationDate(modificationDate) { - this.modificationDate = typeof modificationDate === "string" ? modificationDate : null; - } - setFlags(flags) { - this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0; - } - hasFlag(flag) { - return this._hasFlag(this.flags, flag); - } - setRectangle(rectangle) { - this.rectangle = Array.isArray(rectangle) && rectangle.length === 4 ? _util.Util.normalizeRect(rectangle) : [0, 0, 0, 0]; - } - setColor(color) { - this.color = getRgbColor(color); - } - setLineEndings(lineEndings) { - this.lineEndings = ["None", "None"]; - if (Array.isArray(lineEndings) && lineEndings.length === 2) { - for (let i = 0; i < 2; i++) { - const obj = lineEndings[i]; - if (obj instanceof _primitives.Name) { - switch (obj.name) { - case "None": - continue; - case "Square": - case "Circle": - case "Diamond": - case "OpenArrow": - case "ClosedArrow": - case "Butt": - case "ROpenArrow": - case "RClosedArrow": - case "Slash": - this.lineEndings[i] = obj.name; - continue; - } - } - (0, _util.warn)(`Ignoring invalid lineEnding: ${obj}`); - } - } - } - setRotation(mk, dict) { - this.rotation = 0; - let angle = mk instanceof _primitives.Dict ? mk.get("R") || 0 : dict.get("Rotate") || 0; - if (Number.isInteger(angle) && angle !== 0) { - angle %= 360; - if (angle < 0) { - angle += 360; - } - if (angle % 90 === 0) { - this.rotation = angle; - } - } - } - setBorderAndBackgroundColors(mk) { - if (mk instanceof _primitives.Dict) { - this.borderColor = getRgbColor(mk.getArray("BC"), null); - this.backgroundColor = getRgbColor(mk.getArray("BG"), null); - } else { - this.borderColor = this.backgroundColor = null; - } - } - setBorderStyle(borderStyle) { - this.borderStyle = new AnnotationBorderStyle(); - if (!(borderStyle instanceof _primitives.Dict)) { - return; - } - if (borderStyle.has("BS")) { - const dict = borderStyle.get("BS"); - const dictType = dict.get("Type"); - if (!dictType || (0, _primitives.isName)(dictType, "Border")) { - this.borderStyle.setWidth(dict.get("W"), this.rectangle); - this.borderStyle.setStyle(dict.get("S")); - this.borderStyle.setDashArray(dict.getArray("D")); - } - } else if (borderStyle.has("Border")) { - const array = borderStyle.getArray("Border"); - if (Array.isArray(array) && array.length >= 3) { - this.borderStyle.setHorizontalCornerRadius(array[0]); - this.borderStyle.setVerticalCornerRadius(array[1]); - this.borderStyle.setWidth(array[2], this.rectangle); - if (array.length === 4) { - this.borderStyle.setDashArray(array[3], true); - } - } - } else { - this.borderStyle.setWidth(0); - } - } - setAppearance(dict) { - this.appearance = null; - const appearanceStates = dict.get("AP"); - if (!(appearanceStates instanceof _primitives.Dict)) { - return; - } - const normalAppearanceState = appearanceStates.get("N"); - if (normalAppearanceState instanceof _base_stream.BaseStream) { - this.appearance = normalAppearanceState; - return; - } - if (!(normalAppearanceState instanceof _primitives.Dict)) { - return; - } - const as = dict.get("AS"); - if (!(as instanceof _primitives.Name) || !normalAppearanceState.has(as.name)) { - return; - } - const appearance = normalAppearanceState.get(as.name); - if (appearance instanceof _base_stream.BaseStream) { - this.appearance = appearance; - } - } - setOptionalContent(dict) { - this.oc = null; - const oc = dict.get("OC"); - if (oc instanceof _primitives.Name) { - (0, _util.warn)("setOptionalContent: Support for /Name-entry is not implemented."); - } else if (oc instanceof _primitives.Dict) { - this.oc = oc; - } - } - loadResources(keys, appearance) { - return appearance.dict.getAsync("Resources").then(resources => { - if (!resources) { - return undefined; - } - const objectLoader = new _object_loader.ObjectLoader(resources, keys, resources.xref); - return objectLoader.load().then(function () { - return resources; - }); - }); - } - async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { - const data = this.data; - let appearance = this.appearance; - const isUsingOwnCanvas = !!(this.data.hasOwnCanvas && intent & _util.RenderingIntentFlag.DISPLAY); - if (!appearance) { - if (!isUsingOwnCanvas) { - return { - opList: new _operator_list.OperatorList(), - separateForm: false, - separateCanvas: false - }; - } - appearance = new _stream.StringStream(""); - appearance.dict = new _primitives.Dict(); - } - const appearanceDict = appearance.dict; - const resources = await this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"], appearance); - const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1]; - const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0]; - const transform = getTransformMatrix(data.rect, bbox, matrix); - const opList = new _operator_list.OperatorList(); - let optionalContent; - if (this.oc) { - optionalContent = await evaluator.parseMarkedContentProps(this.oc, null); - } - if (optionalContent !== undefined) { - opList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); - } - opList.addOp(_util.OPS.beginAnnotation, [data.id, data.rect, transform, matrix, isUsingOwnCanvas]); - await evaluator.getOperatorList({ - stream: appearance, - task, - resources, - operatorList: opList, - fallbackFontDict: this._fallbackFontDict - }); - opList.addOp(_util.OPS.endAnnotation, []); - if (optionalContent !== undefined) { - opList.addOp(_util.OPS.endMarkedContent, []); - } - this.reset(); - return { - opList, - separateForm: false, - separateCanvas: isUsingOwnCanvas - }; - } - async save(evaluator, task, annotationStorage) { - return null; - } - get hasTextContent() { - return false; - } - async extractTextContent(evaluator, task, viewBox) { - if (!this.appearance) { - return; - } - const resources = await this.loadResources(["ExtGState", "Font", "Properties", "XObject"], this.appearance); - const text = []; - const buffer = []; - let firstPosition = null; - const sink = { - desiredSize: Math.Infinity, - ready: true, - enqueue(chunk, size) { - for (const item of chunk.items) { - if (item.str === undefined) { - continue; - } - firstPosition ||= item.transform.slice(-2); - buffer.push(item.str); - if (item.hasEOL) { - text.push(buffer.join("")); - buffer.length = 0; - } - } - } - }; - await evaluator.getTextContent({ - stream: this.appearance, - task, - resources, - includeMarkedContent: true, - sink, - viewBox - }); - this.reset(); - if (buffer.length) { - text.push(buffer.join("")); - } - if (text.length > 1 || text[0]) { - const appearanceDict = this.appearance.dict; - const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1]; - const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0]; - const rect = this.data.rect; - const transform = getTransformMatrix(rect, bbox, matrix); - transform[4] -= rect[0]; - transform[5] -= rect[1]; - firstPosition = _util.Util.applyTransform(firstPosition, transform); - firstPosition = _util.Util.applyTransform(firstPosition, matrix); - this.data.textPosition = firstPosition; - this.data.textContent = text; - } - } - getFieldObject() { - if (this.data.kidIds) { - return { - id: this.data.id, - actions: this.data.actions, - name: this.data.fieldName, - strokeColor: this.data.borderColor, - fillColor: this.data.backgroundColor, - type: "", - kidIds: this.data.kidIds, - page: this.data.pageIndex, - rotation: this.rotation - }; - } - return null; - } - reset() { - for (const stream of this._streams) { - stream.reset(); - } - } - _constructFieldName(dict) { - if (!dict.has("T") && !dict.has("Parent")) { - (0, _util.warn)("Unknown field name, falling back to empty field name."); - return ""; - } - if (!dict.has("Parent")) { - return (0, _util.stringToPDFString)(dict.get("T")); - } - const fieldName = []; - if (dict.has("T")) { - fieldName.unshift((0, _util.stringToPDFString)(dict.get("T"))); - } - let loopDict = dict; - const visited = new _primitives.RefSet(); - if (dict.objId) { - visited.put(dict.objId); - } - while (loopDict.has("Parent")) { - loopDict = loopDict.get("Parent"); - if (!(loopDict instanceof _primitives.Dict) || loopDict.objId && visited.has(loopDict.objId)) { - break; - } - if (loopDict.objId) { - visited.put(loopDict.objId); - } - if (loopDict.has("T")) { - fieldName.unshift((0, _util.stringToPDFString)(loopDict.get("T"))); - } - } - return fieldName.join("."); - } -} -exports.Annotation = Annotation; -class AnnotationBorderStyle { - constructor() { - this.width = 1; - this.style = _util.AnnotationBorderStyleType.SOLID; - this.dashArray = [3]; - this.horizontalCornerRadius = 0; - this.verticalCornerRadius = 0; - } - setWidth(width, rect = [0, 0, 0, 0]) { - if (width instanceof _primitives.Name) { - this.width = 0; - return; - } - if (typeof width === "number") { - if (width > 0) { - const maxWidth = (rect[2] - rect[0]) / 2; - const maxHeight = (rect[3] - rect[1]) / 2; - if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) { - (0, _util.warn)(`AnnotationBorderStyle.setWidth - ignoring width: ${width}`); - width = 1; - } - } - this.width = width; - } - } - setStyle(style) { - if (!(style instanceof _primitives.Name)) { - return; - } - switch (style.name) { - case "S": - this.style = _util.AnnotationBorderStyleType.SOLID; - break; - case "D": - this.style = _util.AnnotationBorderStyleType.DASHED; - break; - case "B": - this.style = _util.AnnotationBorderStyleType.BEVELED; - break; - case "I": - this.style = _util.AnnotationBorderStyleType.INSET; - break; - case "U": - this.style = _util.AnnotationBorderStyleType.UNDERLINE; - break; - default: - break; - } - } - setDashArray(dashArray, forceStyle = false) { - if (Array.isArray(dashArray) && dashArray.length > 0) { - let isValid = true; - let allZeros = true; - for (const element of dashArray) { - const validNumber = +element >= 0; - if (!validNumber) { - isValid = false; - break; - } else if (element > 0) { - allZeros = false; - } - } - if (isValid && !allZeros) { - this.dashArray = dashArray; - if (forceStyle) { - this.setStyle(_primitives.Name.get("D")); - } - } else { - this.width = 0; - } - } else if (dashArray) { - this.width = 0; - } - } - setHorizontalCornerRadius(radius) { - if (Number.isInteger(radius)) { - this.horizontalCornerRadius = radius; - } - } - setVerticalCornerRadius(radius) { - if (Number.isInteger(radius)) { - this.verticalCornerRadius = radius; - } - } -} -exports.AnnotationBorderStyle = AnnotationBorderStyle; -class MarkupAnnotation extends Annotation { - constructor(params) { - super(params); - const { - dict - } = params; - if (dict.has("IRT")) { - const rawIRT = dict.getRaw("IRT"); - this.data.inReplyTo = rawIRT instanceof _primitives.Ref ? rawIRT.toString() : null; - const rt = dict.get("RT"); - this.data.replyType = rt instanceof _primitives.Name ? rt.name : _util.AnnotationReplyType.REPLY; - } - let popupRef = null; - if (this.data.replyType === _util.AnnotationReplyType.GROUP) { - const parent = dict.get("IRT"); - this.setTitle(parent.get("T")); - this.data.titleObj = this._title; - this.setContents(parent.get("Contents")); - this.data.contentsObj = this._contents; - if (!parent.has("CreationDate")) { - this.data.creationDate = null; - } else { - this.setCreationDate(parent.get("CreationDate")); - this.data.creationDate = this.creationDate; - } - if (!parent.has("M")) { - this.data.modificationDate = null; - } else { - this.setModificationDate(parent.get("M")); - this.data.modificationDate = this.modificationDate; - } - popupRef = parent.getRaw("Popup"); - if (!parent.has("C")) { - this.data.color = null; - } else { - this.setColor(parent.getArray("C")); - this.data.color = this.color; - } - } else { - this.data.titleObj = this._title; - this.setCreationDate(dict.get("CreationDate")); - this.data.creationDate = this.creationDate; - popupRef = dict.getRaw("Popup"); - if (!dict.has("C")) { - this.data.color = null; - } - } - this.data.popupRef = popupRef instanceof _primitives.Ref ? popupRef.toString() : null; - if (dict.has("RC")) { - this.data.richText = _factory.XFAFactory.getRichTextAsHtml(dict.get("RC")); - } - } - setCreationDate(creationDate) { - this.creationDate = typeof creationDate === "string" ? creationDate : null; - } - _setDefaultAppearance({ - xref, - extra, - strokeColor, - fillColor, - blendMode, - strokeAlpha, - fillAlpha, - pointsCallback - }) { - let minX = Number.MAX_VALUE; - let minY = Number.MAX_VALUE; - let maxX = Number.MIN_VALUE; - let maxY = Number.MIN_VALUE; - const buffer = ["q"]; - if (extra) { - buffer.push(extra); - } - if (strokeColor) { - buffer.push(`${strokeColor[0]} ${strokeColor[1]} ${strokeColor[2]} RG`); - } - if (fillColor) { - buffer.push(`${fillColor[0]} ${fillColor[1]} ${fillColor[2]} rg`); - } - let pointsArray = this.data.quadPoints; - if (!pointsArray) { - pointsArray = [[{ - x: this.rectangle[0], - y: this.rectangle[3] - }, { - x: this.rectangle[2], - y: this.rectangle[3] - }, { - x: this.rectangle[0], - y: this.rectangle[1] - }, { - x: this.rectangle[2], - y: this.rectangle[1] - }]]; - } - for (const points of pointsArray) { - const [mX, MX, mY, MY] = pointsCallback(buffer, points); - minX = Math.min(minX, mX); - maxX = Math.max(maxX, MX); - minY = Math.min(minY, mY); - maxY = Math.max(maxY, MY); - } - buffer.push("Q"); - const formDict = new _primitives.Dict(xref); - const appearanceStreamDict = new _primitives.Dict(xref); - appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); - const appearanceStream = new _stream.StringStream(buffer.join(" ")); - appearanceStream.dict = appearanceStreamDict; - formDict.set("Fm0", appearanceStream); - const gsDict = new _primitives.Dict(xref); - if (blendMode) { - gsDict.set("BM", _primitives.Name.get(blendMode)); - } - if (typeof strokeAlpha === "number") { - gsDict.set("CA", strokeAlpha); - } - if (typeof fillAlpha === "number") { - gsDict.set("ca", fillAlpha); - } - const stateDict = new _primitives.Dict(xref); - stateDict.set("GS0", gsDict); - const resources = new _primitives.Dict(xref); - resources.set("ExtGState", stateDict); - resources.set("XObject", formDict); - const appearanceDict = new _primitives.Dict(xref); - appearanceDict.set("Resources", resources); - const bbox = this.data.rect = [minX, minY, maxX, maxY]; - appearanceDict.set("BBox", bbox); - this.appearance = new _stream.StringStream("/GS0 gs /Fm0 Do"); - this.appearance.dict = appearanceDict; - this._streams.push(this.appearance, appearanceStream); - } - static async createNewAnnotation(xref, annotation, dependencies, params) { - const annotationRef = annotation.ref ||= xref.getNewTemporaryRef(); - const ap = await this.createNewAppearanceStream(annotation, xref, params); - const buffer = []; - let annotationDict; - if (ap) { - const apRef = xref.getNewTemporaryRef(); - annotationDict = this.createNewDict(annotation, xref, { - apRef - }); - await (0, _writer.writeObject)(apRef, ap, buffer, xref); - dependencies.push({ - ref: apRef, - data: buffer.join("") - }); - } else { - annotationDict = this.createNewDict(annotation, xref, {}); - } - if (Number.isInteger(annotation.parentTreeId)) { - annotationDict.set("StructParent", annotation.parentTreeId); - } - buffer.length = 0; - await (0, _writer.writeObject)(annotationRef, annotationDict, buffer, xref); - return { - ref: annotationRef, - data: buffer.join("") - }; - } - static async createNewPrintAnnotation(annotationGlobals, xref, annotation, params) { - const ap = await this.createNewAppearanceStream(annotation, xref, params); - const annotationDict = this.createNewDict(annotation, xref, { - ap - }); - const newAnnotation = new this.prototype.constructor({ - dict: annotationDict, - xref, - annotationGlobals, - evaluatorOptions: params.evaluatorOptions - }); - if (annotation.ref) { - newAnnotation.ref = newAnnotation.refToReplace = annotation.ref; - } - return newAnnotation; - } -} -exports.MarkupAnnotation = MarkupAnnotation; -class WidgetAnnotation extends Annotation { - constructor(params) { - super(params); - const { - dict, - xref, - annotationGlobals - } = params; - const data = this.data; - this._needAppearances = params.needAppearances; - data.annotationType = _util.AnnotationType.WIDGET; - if (data.fieldName === undefined) { - data.fieldName = this._constructFieldName(dict); - } - if (data.actions === undefined) { - data.actions = (0, _core_utils.collectActions)(xref, dict, _util.AnnotationActionEventType); - } - let fieldValue = (0, _core_utils.getInheritableProperty)({ - dict, - key: "V", - getArray: true - }); - data.fieldValue = this._decodeFormValue(fieldValue); - const defaultFieldValue = (0, _core_utils.getInheritableProperty)({ - dict, - key: "DV", - getArray: true - }); - data.defaultFieldValue = this._decodeFormValue(defaultFieldValue); - if (fieldValue === undefined && annotationGlobals.xfaDatasets) { - const path = this._title.str; - if (path) { - this._hasValueFromXFA = true; - data.fieldValue = fieldValue = annotationGlobals.xfaDatasets.getValue(path); - } - } - if (fieldValue === undefined && data.defaultFieldValue !== null) { - data.fieldValue = data.defaultFieldValue; - } - data.alternativeText = (0, _util.stringToPDFString)(dict.get("TU") || ""); - this.setDefaultAppearance(params); - data.hasAppearance ||= this._needAppearances && data.fieldValue !== undefined && data.fieldValue !== null; - const fieldType = (0, _core_utils.getInheritableProperty)({ - dict, - key: "FT" - }); - data.fieldType = fieldType instanceof _primitives.Name ? fieldType.name : null; - const localResources = (0, _core_utils.getInheritableProperty)({ - dict, - key: "DR" - }); - const acroFormResources = annotationGlobals.acroForm.get("DR"); - const appearanceResources = this.appearance?.dict.get("Resources"); - this._fieldResources = { - localResources, - acroFormResources, - appearanceResources, - mergedResources: _primitives.Dict.merge({ - xref, - dictArray: [localResources, appearanceResources, acroFormResources], - mergeSubDicts: true - }) - }; - data.fieldFlags = (0, _core_utils.getInheritableProperty)({ - dict, - key: "Ff" - }); - if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) { - data.fieldFlags = 0; - } - data.readOnly = this.hasFieldFlag(_util.AnnotationFieldFlag.READONLY); - data.required = this.hasFieldFlag(_util.AnnotationFieldFlag.REQUIRED); - data.hidden = this._hasFlag(data.annotationFlags, _util.AnnotationFlag.HIDDEN) || this._hasFlag(data.annotationFlags, _util.AnnotationFlag.NOVIEW); - } - _decodeFormValue(formValue) { - if (Array.isArray(formValue)) { - return formValue.filter(item => typeof item === "string").map(item => (0, _util.stringToPDFString)(item)); - } else if (formValue instanceof _primitives.Name) { - return (0, _util.stringToPDFString)(formValue.name); - } else if (typeof formValue === "string") { - return (0, _util.stringToPDFString)(formValue); - } - return null; - } - hasFieldFlag(flag) { - return !!(this.data.fieldFlags & flag); - } - _isViewable(flags) { - return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE); - } - mustBeViewed(annotationStorage, renderForms) { - if (renderForms) { - return this.viewable; - } - return super.mustBeViewed(annotationStorage, renderForms) && !this._hasFlag(this.flags, _util.AnnotationFlag.NOVIEW); - } - getRotationMatrix(annotationStorage) { - let rotation = annotationStorage?.get(this.data.id)?.rotation; - if (rotation === undefined) { - rotation = this.rotation; - } - if (rotation === 0) { - return _util.IDENTITY_MATRIX; - } - const width = this.data.rect[2] - this.data.rect[0]; - const height = this.data.rect[3] - this.data.rect[1]; - return (0, _core_utils.getRotationMatrix)(rotation, width, height); - } - getBorderAndBackgroundAppearances(annotationStorage) { - let rotation = annotationStorage?.get(this.data.id)?.rotation; - if (rotation === undefined) { - rotation = this.rotation; - } - if (!this.backgroundColor && !this.borderColor) { - return ""; - } - const width = this.data.rect[2] - this.data.rect[0]; - const height = this.data.rect[3] - this.data.rect[1]; - const rect = rotation === 0 || rotation === 180 ? `0 0 ${width} ${height} re` : `0 0 ${height} ${width} re`; - let str = ""; - if (this.backgroundColor) { - str = `${(0, _default_appearance.getPdfColor)(this.backgroundColor, true)} ${rect} f `; - } - if (this.borderColor) { - const borderWidth = this.borderStyle.width || 1; - str += `${borderWidth} w ${(0, _default_appearance.getPdfColor)(this.borderColor, false)} ${rect} S `; - } - return str; - } - async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { - if (renderForms && !(this instanceof SignatureWidgetAnnotation) && !this.data.noHTML && !this.data.hasOwnCanvas) { - return { - opList: new _operator_list.OperatorList(), - separateForm: true, - separateCanvas: false - }; - } - if (!this._hasText) { - return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); - } - const content = await this._getAppearance(evaluator, task, intent, annotationStorage); - if (this.appearance && content === null) { - return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); - } - const opList = new _operator_list.OperatorList(); - if (!this._defaultAppearance || content === null) { - return { - opList, - separateForm: false, - separateCanvas: false - }; - } - const isUsingOwnCanvas = !!(this.data.hasOwnCanvas && intent & _util.RenderingIntentFlag.DISPLAY); - const matrix = [1, 0, 0, 1, 0, 0]; - const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]]; - const transform = getTransformMatrix(this.data.rect, bbox, matrix); - let optionalContent; - if (this.oc) { - optionalContent = await evaluator.parseMarkedContentProps(this.oc, null); - } - if (optionalContent !== undefined) { - opList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); - } - opList.addOp(_util.OPS.beginAnnotation, [this.data.id, this.data.rect, transform, this.getRotationMatrix(annotationStorage), isUsingOwnCanvas]); - const stream = new _stream.StringStream(content); - await evaluator.getOperatorList({ - stream, - task, - resources: this._fieldResources.mergedResources, - operatorList: opList - }); - opList.addOp(_util.OPS.endAnnotation, []); - if (optionalContent !== undefined) { - opList.addOp(_util.OPS.endMarkedContent, []); - } - return { - opList, - separateForm: false, - separateCanvas: isUsingOwnCanvas - }; - } - _getMKDict(rotation) { - const mk = new _primitives.Dict(null); - if (rotation) { - mk.set("R", rotation); - } - if (this.borderColor) { - mk.set("BC", getPdfColorArray(this.borderColor)); - } - if (this.backgroundColor) { - mk.set("BG", getPdfColorArray(this.backgroundColor)); - } - return mk.size > 0 ? mk : null; - } - amendSavedDict(annotationStorage, dict) {} - async save(evaluator, task, annotationStorage) { - const storageEntry = annotationStorage?.get(this.data.id); - let value = storageEntry?.value, - rotation = storageEntry?.rotation; - if (value === this.data.fieldValue || value === undefined) { - if (!this._hasValueFromXFA && rotation === undefined) { - return null; - } - value ||= this.data.fieldValue; - } - if (rotation === undefined && !this._hasValueFromXFA && Array.isArray(value) && Array.isArray(this.data.fieldValue) && value.length === this.data.fieldValue.length && value.every((x, i) => x === this.data.fieldValue[i])) { - return null; - } - if (rotation === undefined) { - rotation = this.rotation; - } - let appearance = null; - if (!this._needAppearances) { - appearance = await this._getAppearance(evaluator, task, _util.RenderingIntentFlag.SAVE, annotationStorage); - if (appearance === null) { - return null; - } - } else {} - let needAppearances = false; - if (appearance?.needAppearances) { - needAppearances = true; - appearance = null; - } - const { - xref - } = evaluator; - const originalDict = xref.fetchIfRef(this.ref); - if (!(originalDict instanceof _primitives.Dict)) { - return null; - } - const dict = new _primitives.Dict(xref); - for (const key of originalDict.getKeys()) { - if (key !== "AP") { - dict.set(key, originalDict.getRaw(key)); - } - } - const xfa = { - path: this.data.fieldName, - value - }; - const encoder = val => { - return (0, _core_utils.isAscii)(val) ? val : (0, _core_utils.stringToUTF16String)(val, true); - }; - dict.set("V", Array.isArray(value) ? value.map(encoder) : encoder(value)); - this.amendSavedDict(annotationStorage, dict); - const maybeMK = this._getMKDict(rotation); - if (maybeMK) { - dict.set("MK", maybeMK); - } - const buffer = []; - const changes = [{ - ref: this.ref, - data: "", - xfa, - needAppearances - }]; - if (appearance !== null) { - const newRef = xref.getNewTemporaryRef(); - const AP = new _primitives.Dict(xref); - dict.set("AP", AP); - AP.set("N", newRef); - const resources = this._getSaveFieldResources(xref); - const appearanceStream = new _stream.StringStream(appearance); - const appearanceDict = appearanceStream.dict = new _primitives.Dict(xref); - appearanceDict.set("Subtype", _primitives.Name.get("Form")); - appearanceDict.set("Resources", resources); - appearanceDict.set("BBox", [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]]); - const rotationMatrix = this.getRotationMatrix(annotationStorage); - if (rotationMatrix !== _util.IDENTITY_MATRIX) { - appearanceDict.set("Matrix", rotationMatrix); - } - await (0, _writer.writeObject)(newRef, appearanceStream, buffer, xref); - changes.push({ - ref: newRef, - data: buffer.join(""), - xfa: null, - needAppearances: false - }); - buffer.length = 0; - } - dict.set("M", `D:${(0, _util.getModificationDate)()}`); - await (0, _writer.writeObject)(this.ref, dict, buffer, xref); - changes[0].data = buffer.join(""); - return changes; - } - async _getAppearance(evaluator, task, intent, annotationStorage) { - const isPassword = this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD); - if (isPassword) { - return null; - } - const storageEntry = annotationStorage?.get(this.data.id); - let value, rotation; - if (storageEntry) { - value = storageEntry.formattedValue || storageEntry.value; - rotation = storageEntry.rotation; - } - if (rotation === undefined && value === undefined && !this._needAppearances) { - if (!this._hasValueFromXFA || this.appearance) { - return null; - } - } - const colors = this.getBorderAndBackgroundAppearances(annotationStorage); - if (value === undefined) { - value = this.data.fieldValue; - if (!value) { - return `/Tx BMC q ${colors}Q EMC`; - } - } - if (Array.isArray(value) && value.length === 1) { - value = value[0]; - } - (0, _util.assert)(typeof value === "string", "Expected `value` to be a string."); - value = value.trim(); - if (this.data.combo) { - const option = this.data.options.find(({ - exportValue - }) => value === exportValue); - value = option?.displayValue || value; - } - if (value === "") { - return `/Tx BMC q ${colors}Q EMC`; - } - if (rotation === undefined) { - rotation = this.rotation; - } - let lineCount = -1; - let lines; - if (this.data.multiLine) { - lines = value.split(/\r\n?|\n/).map(line => line.normalize("NFC")); - lineCount = lines.length; - } else { - lines = [value.replace(/\r\n?|\n/, "").normalize("NFC")]; - } - const defaultPadding = 1; - const defaultHPadding = 2; - let totalHeight = this.data.rect[3] - this.data.rect[1]; - let totalWidth = this.data.rect[2] - this.data.rect[0]; - if (rotation === 90 || rotation === 270) { - [totalWidth, totalHeight] = [totalHeight, totalWidth]; - } - if (!this._defaultAppearance) { - this.data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance = "/Helvetica 0 Tf 0 g"); - } - let font = await WidgetAnnotation._getFontData(evaluator, task, this.data.defaultAppearanceData, this._fieldResources.mergedResources); - let defaultAppearance, fontSize, lineHeight; - const encodedLines = []; - let encodingError = false; - for (const line of lines) { - const encodedString = font.encodeString(line); - if (encodedString.length > 1) { - encodingError = true; - } - encodedLines.push(encodedString.join("")); - } - if (encodingError && intent & _util.RenderingIntentFlag.SAVE) { - return { - needAppearances: true - }; - } - if (encodingError && this._isOffscreenCanvasSupported) { - const fontFamily = this.data.comb ? "monospace" : "sans-serif"; - const fakeUnicodeFont = new _default_appearance.FakeUnicodeFont(evaluator.xref, fontFamily); - const resources = fakeUnicodeFont.createFontResources(lines.join("")); - const newFont = resources.getRaw("Font"); - if (this._fieldResources.mergedResources.has("Font")) { - const oldFont = this._fieldResources.mergedResources.get("Font"); - for (const key of newFont.getKeys()) { - oldFont.set(key, newFont.getRaw(key)); - } - } else { - this._fieldResources.mergedResources.set("Font", newFont); - } - const fontName = fakeUnicodeFont.fontName.name; - font = await WidgetAnnotation._getFontData(evaluator, task, { - fontName, - fontSize: 0 - }, resources); - for (let i = 0, ii = encodedLines.length; i < ii; i++) { - encodedLines[i] = (0, _core_utils.stringToUTF16String)(lines[i]); - } - const savedDefaultAppearance = Object.assign(Object.create(null), this.data.defaultAppearanceData); - this.data.defaultAppearanceData.fontSize = 0; - this.data.defaultAppearanceData.fontName = fontName; - [defaultAppearance, fontSize, lineHeight] = this._computeFontSize(totalHeight - 2 * defaultPadding, totalWidth - 2 * defaultHPadding, value, font, lineCount); - this.data.defaultAppearanceData = savedDefaultAppearance; - } else { - if (!this._isOffscreenCanvasSupported) { - (0, _util.warn)("_getAppearance: OffscreenCanvas is not supported, annotation may not render correctly."); - } - [defaultAppearance, fontSize, lineHeight] = this._computeFontSize(totalHeight - 2 * defaultPadding, totalWidth - 2 * defaultHPadding, value, font, lineCount); - } - let descent = font.descent; - if (isNaN(descent)) { - descent = _util.BASELINE_FACTOR * lineHeight; - } else { - descent = Math.max(_util.BASELINE_FACTOR * lineHeight, Math.abs(descent) * fontSize); - } - const defaultVPadding = Math.min(Math.floor((totalHeight - fontSize) / 2), defaultPadding); - const alignment = this.data.textAlignment; - if (this.data.multiLine) { - return this._getMultilineAppearance(defaultAppearance, encodedLines, font, fontSize, totalWidth, totalHeight, alignment, defaultHPadding, defaultVPadding, descent, lineHeight, annotationStorage); - } - if (this.data.comb) { - return this._getCombAppearance(defaultAppearance, font, encodedLines[0], fontSize, totalWidth, totalHeight, defaultHPadding, defaultVPadding, descent, lineHeight, annotationStorage); - } - const bottomPadding = defaultVPadding + descent; - if (alignment === 0 || alignment > 2) { - return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 ${(0, _core_utils.numberToString)(defaultHPadding)} ${(0, _core_utils.numberToString)(bottomPadding)} Tm (${(0, _core_utils.escapeString)(encodedLines[0])}) Tj` + " ET Q EMC"; - } - const prevInfo = { - shift: 0 - }; - const renderedText = this._renderText(encodedLines[0], font, fontSize, totalWidth, alignment, prevInfo, defaultHPadding, bottomPadding); - return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 0 0 Tm ${renderedText}` + " ET Q EMC"; - } - static async _getFontData(evaluator, task, appearanceData, resources) { - const operatorList = new _operator_list.OperatorList(); - const initialState = { - font: null, - clone() { - return this; - } - }; - const { - fontName, - fontSize - } = appearanceData; - await evaluator.handleSetFont(resources, [fontName && _primitives.Name.get(fontName), fontSize], null, operatorList, task, initialState, null); - return initialState.font; - } - _getTextWidth(text, font) { - return font.charsToGlyphs(text).reduce((width, glyph) => width + glyph.width, 0) / 1000; - } - _computeFontSize(height, width, text, font, lineCount) { - let { - fontSize - } = this.data.defaultAppearanceData; - let lineHeight = (fontSize || 12) * _util.LINE_FACTOR, - numberOfLines = Math.round(height / lineHeight); - if (!fontSize) { - const roundWithTwoDigits = x => Math.floor(x * 100) / 100; - if (lineCount === -1) { - const textWidth = this._getTextWidth(text, font); - fontSize = roundWithTwoDigits(Math.min(height / _util.LINE_FACTOR, textWidth > width ? width / textWidth : Infinity)); - numberOfLines = 1; - } else { - const lines = text.split(/\r\n?|\n/); - const cachedLines = []; - for (const line of lines) { - const encoded = font.encodeString(line).join(""); - const glyphs = font.charsToGlyphs(encoded); - const positions = font.getCharPositions(encoded); - cachedLines.push({ - line: encoded, - glyphs, - positions - }); - } - const isTooBig = fsize => { - let totalHeight = 0; - for (const cache of cachedLines) { - const chunks = this._splitLine(null, font, fsize, width, cache); - totalHeight += chunks.length * fsize; - if (totalHeight > height) { - return true; - } - } - return false; - }; - numberOfLines = Math.max(numberOfLines, lineCount); - while (true) { - lineHeight = height / numberOfLines; - fontSize = roundWithTwoDigits(lineHeight / _util.LINE_FACTOR); - if (isTooBig(fontSize)) { - numberOfLines++; - continue; - } - break; - } - } - const { - fontName, - fontColor - } = this.data.defaultAppearanceData; - this._defaultAppearance = (0, _default_appearance.createDefaultAppearance)({ - fontSize, - fontName, - fontColor - }); - } - return [this._defaultAppearance, fontSize, height / numberOfLines]; - } - _renderText(text, font, fontSize, totalWidth, alignment, prevInfo, hPadding, vPadding) { - let shift; - if (alignment === 1) { - const width = this._getTextWidth(text, font) * fontSize; - shift = (totalWidth - width) / 2; - } else if (alignment === 2) { - const width = this._getTextWidth(text, font) * fontSize; - shift = totalWidth - width - hPadding; - } else { - shift = hPadding; - } - const shiftStr = (0, _core_utils.numberToString)(shift - prevInfo.shift); - prevInfo.shift = shift; - vPadding = (0, _core_utils.numberToString)(vPadding); - return `${shiftStr} ${vPadding} Td (${(0, _core_utils.escapeString)(text)}) Tj`; - } - _getSaveFieldResources(xref) { - const { - localResources, - appearanceResources, - acroFormResources - } = this._fieldResources; - const fontName = this.data.defaultAppearanceData?.fontName; - if (!fontName) { - return localResources || _primitives.Dict.empty; - } - for (const resources of [localResources, appearanceResources]) { - if (resources instanceof _primitives.Dict) { - const localFont = resources.get("Font"); - if (localFont instanceof _primitives.Dict && localFont.has(fontName)) { - return resources; - } - } - } - if (acroFormResources instanceof _primitives.Dict) { - const acroFormFont = acroFormResources.get("Font"); - if (acroFormFont instanceof _primitives.Dict && acroFormFont.has(fontName)) { - const subFontDict = new _primitives.Dict(xref); - subFontDict.set(fontName, acroFormFont.getRaw(fontName)); - const subResourcesDict = new _primitives.Dict(xref); - subResourcesDict.set("Font", subFontDict); - return _primitives.Dict.merge({ - xref, - dictArray: [subResourcesDict, localResources], - mergeSubDicts: true - }); - } - } - return localResources || _primitives.Dict.empty; - } - getFieldObject() { - return null; - } -} -class TextWidgetAnnotation extends WidgetAnnotation { - constructor(params) { - super(params); - this.data.hasOwnCanvas = this.data.readOnly && !this.data.noHTML; - this._hasText = true; - const dict = params.dict; - if (typeof this.data.fieldValue !== "string") { - this.data.fieldValue = ""; - } - let alignment = (0, _core_utils.getInheritableProperty)({ - dict, - key: "Q" - }); - if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) { - alignment = null; - } - this.data.textAlignment = alignment; - let maximumLength = (0, _core_utils.getInheritableProperty)({ - dict, - key: "MaxLen" - }); - if (!Number.isInteger(maximumLength) || maximumLength < 0) { - maximumLength = 0; - } - this.data.maxLen = maximumLength; - this.data.multiLine = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE); - this.data.comb = this.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !this.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== 0; - this.data.doNotScroll = this.hasFieldFlag(_util.AnnotationFieldFlag.DONOTSCROLL); - } - get hasTextContent() { - return !!this.appearance && !this._needAppearances; - } - _getCombAppearance(defaultAppearance, font, text, fontSize, width, height, hPadding, vPadding, descent, lineHeight, annotationStorage) { - const combWidth = width / this.data.maxLen; - const colors = this.getBorderAndBackgroundAppearances(annotationStorage); - const buf = []; - const positions = font.getCharPositions(text); - for (const [start, end] of positions) { - buf.push(`(${(0, _core_utils.escapeString)(text.substring(start, end))}) Tj`); - } - const renderedComb = buf.join(` ${(0, _core_utils.numberToString)(combWidth)} 0 Td `); - return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 ${(0, _core_utils.numberToString)(hPadding)} ${(0, _core_utils.numberToString)(vPadding + descent)} Tm ${renderedComb}` + " ET Q EMC"; - } - _getMultilineAppearance(defaultAppearance, lines, font, fontSize, width, height, alignment, hPadding, vPadding, descent, lineHeight, annotationStorage) { - const buf = []; - const totalWidth = width - 2 * hPadding; - const prevInfo = { - shift: 0 - }; - for (let i = 0, ii = lines.length; i < ii; i++) { - const line = lines[i]; - const chunks = this._splitLine(line, font, fontSize, totalWidth); - for (let j = 0, jj = chunks.length; j < jj; j++) { - const chunk = chunks[j]; - const vShift = i === 0 && j === 0 ? -vPadding - (lineHeight - descent) : -lineHeight; - buf.push(this._renderText(chunk, font, fontSize, width, alignment, prevInfo, hPadding, vShift)); - } - } - const colors = this.getBorderAndBackgroundAppearances(annotationStorage); - const renderedText = buf.join("\n"); - return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 0 ${(0, _core_utils.numberToString)(height)} Tm ${renderedText}` + " ET Q EMC"; - } - _splitLine(line, font, fontSize, width, cache = {}) { - line = cache.line || line; - const glyphs = cache.glyphs || font.charsToGlyphs(line); - if (glyphs.length <= 1) { - return [line]; - } - const positions = cache.positions || font.getCharPositions(line); - const scale = fontSize / 1000; - const chunks = []; - let lastSpacePosInStringStart = -1, - lastSpacePosInStringEnd = -1, - lastSpacePos = -1, - startChunk = 0, - currentWidth = 0; - for (let i = 0, ii = glyphs.length; i < ii; i++) { - const [start, end] = positions[i]; - const glyph = glyphs[i]; - const glyphWidth = glyph.width * scale; - if (glyph.unicode === " ") { - if (currentWidth + glyphWidth > width) { - chunks.push(line.substring(startChunk, start)); - startChunk = start; - currentWidth = glyphWidth; - lastSpacePosInStringStart = -1; - lastSpacePos = -1; - } else { - currentWidth += glyphWidth; - lastSpacePosInStringStart = start; - lastSpacePosInStringEnd = end; - lastSpacePos = i; - } - } else if (currentWidth + glyphWidth > width) { - if (lastSpacePosInStringStart !== -1) { - chunks.push(line.substring(startChunk, lastSpacePosInStringEnd)); - startChunk = lastSpacePosInStringEnd; - i = lastSpacePos + 1; - lastSpacePosInStringStart = -1; - currentWidth = 0; - } else { - chunks.push(line.substring(startChunk, start)); - startChunk = start; - currentWidth = glyphWidth; - } - } else { - currentWidth += glyphWidth; - } - } - if (startChunk < line.length) { - chunks.push(line.substring(startChunk, line.length)); - } - return chunks; - } - getFieldObject() { - return { - id: this.data.id, - value: this.data.fieldValue, - defaultValue: this.data.defaultFieldValue || "", - multiline: this.data.multiLine, - password: this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD), - charLimit: this.data.maxLen, - comb: this.data.comb, - editable: !this.data.readOnly, - hidden: this.data.hidden, - name: this.data.fieldName, - rect: this.data.rect, - actions: this.data.actions, - page: this.data.pageIndex, - strokeColor: this.data.borderColor, - fillColor: this.data.backgroundColor, - rotation: this.rotation, - type: "text" - }; - } -} -class ButtonWidgetAnnotation extends WidgetAnnotation { - constructor(params) { - super(params); - this.checkedAppearance = null; - this.uncheckedAppearance = null; - this.data.checkBox = !this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); - this.data.radioButton = this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); - this.data.pushButton = this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); - this.data.isTooltipOnly = false; - if (this.data.checkBox) { - this._processCheckBox(params); - } else if (this.data.radioButton) { - this._processRadioButton(params); - } else if (this.data.pushButton) { - this.data.hasOwnCanvas = true; - this._processPushButton(params); - } else { - (0, _util.warn)("Invalid field flags for button widget annotation"); - } - } - async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { - if (this.data.pushButton) { - return super.getOperatorList(evaluator, task, intent, false, annotationStorage); - } - let value = null; - let rotation = null; - if (annotationStorage) { - const storageEntry = annotationStorage.get(this.data.id); - value = storageEntry ? storageEntry.value : null; - rotation = storageEntry ? storageEntry.rotation : null; - } - if (value === null && this.appearance) { - return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); - } - if (value === null || value === undefined) { - value = this.data.checkBox ? this.data.fieldValue === this.data.exportValue : this.data.fieldValue === this.data.buttonValue; - } - const appearance = value ? this.checkedAppearance : this.uncheckedAppearance; - if (appearance) { - const savedAppearance = this.appearance; - const savedMatrix = appearance.dict.getArray("Matrix") || _util.IDENTITY_MATRIX; - if (rotation) { - appearance.dict.set("Matrix", this.getRotationMatrix(annotationStorage)); - } - this.appearance = appearance; - const operatorList = super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); - this.appearance = savedAppearance; - appearance.dict.set("Matrix", savedMatrix); - return operatorList; - } - return { - opList: new _operator_list.OperatorList(), - separateForm: false, - separateCanvas: false - }; - } - async save(evaluator, task, annotationStorage) { - if (this.data.checkBox) { - return this._saveCheckbox(evaluator, task, annotationStorage); - } - if (this.data.radioButton) { - return this._saveRadioButton(evaluator, task, annotationStorage); - } - return null; - } - async _saveCheckbox(evaluator, task, annotationStorage) { - if (!annotationStorage) { - return null; - } - const storageEntry = annotationStorage.get(this.data.id); - let rotation = storageEntry?.rotation, - value = storageEntry?.value; - if (rotation === undefined) { - if (value === undefined) { - return null; - } - const defaultValue = this.data.fieldValue === this.data.exportValue; - if (defaultValue === value) { - return null; - } - } - const dict = evaluator.xref.fetchIfRef(this.ref); - if (!(dict instanceof _primitives.Dict)) { - return null; - } - if (rotation === undefined) { - rotation = this.rotation; - } - if (value === undefined) { - value = this.data.fieldValue === this.data.exportValue; - } - const xfa = { - path: this.data.fieldName, - value: value ? this.data.exportValue : "" - }; - const name = _primitives.Name.get(value ? this.data.exportValue : "Off"); - dict.set("V", name); - dict.set("AS", name); - dict.set("M", `D:${(0, _util.getModificationDate)()}`); - const maybeMK = this._getMKDict(rotation); - if (maybeMK) { - dict.set("MK", maybeMK); - } - const buffer = []; - await (0, _writer.writeObject)(this.ref, dict, buffer, evaluator.xref); - return [{ - ref: this.ref, - data: buffer.join(""), - xfa - }]; - } - async _saveRadioButton(evaluator, task, annotationStorage) { - if (!annotationStorage) { - return null; - } - const storageEntry = annotationStorage.get(this.data.id); - let rotation = storageEntry?.rotation, - value = storageEntry?.value; - if (rotation === undefined) { - if (value === undefined) { - return null; - } - const defaultValue = this.data.fieldValue === this.data.buttonValue; - if (defaultValue === value) { - return null; - } - } - const dict = evaluator.xref.fetchIfRef(this.ref); - if (!(dict instanceof _primitives.Dict)) { - return null; - } - if (value === undefined) { - value = this.data.fieldValue === this.data.buttonValue; - } - if (rotation === undefined) { - rotation = this.rotation; - } - const xfa = { - path: this.data.fieldName, - value: value ? this.data.buttonValue : "" - }; - const name = _primitives.Name.get(value ? this.data.buttonValue : "Off"); - const buffer = []; - let parentData = null; - if (value) { - if (this.parent instanceof _primitives.Ref) { - const parent = evaluator.xref.fetch(this.parent); - parent.set("V", name); - await (0, _writer.writeObject)(this.parent, parent, buffer, evaluator.xref); - parentData = buffer.join(""); - buffer.length = 0; - } else if (this.parent instanceof _primitives.Dict) { - this.parent.set("V", name); - } - } - dict.set("AS", name); - dict.set("M", `D:${(0, _util.getModificationDate)()}`); - const maybeMK = this._getMKDict(rotation); - if (maybeMK) { - dict.set("MK", maybeMK); - } - await (0, _writer.writeObject)(this.ref, dict, buffer, evaluator.xref); - const newRefs = [{ - ref: this.ref, - data: buffer.join(""), - xfa - }]; - if (parentData) { - newRefs.push({ - ref: this.parent, - data: parentData, - xfa: null - }); - } - return newRefs; - } - _getDefaultCheckedAppearance(params, type) { - const width = this.data.rect[2] - this.data.rect[0]; - const height = this.data.rect[3] - this.data.rect[1]; - const bbox = [0, 0, width, height]; - const FONT_RATIO = 0.8; - const fontSize = Math.min(width, height) * FONT_RATIO; - let metrics, char; - if (type === "check") { - metrics = { - width: 0.755 * fontSize, - height: 0.705 * fontSize - }; - char = "\x33"; - } else if (type === "disc") { - metrics = { - width: 0.791 * fontSize, - height: 0.705 * fontSize - }; - char = "\x6C"; - } else { - (0, _util.unreachable)(`_getDefaultCheckedAppearance - unsupported type: ${type}`); - } - const xShift = (0, _core_utils.numberToString)((width - metrics.width) / 2); - const yShift = (0, _core_utils.numberToString)((height - metrics.height) / 2); - const appearance = `q BT /PdfJsZaDb ${fontSize} Tf 0 g ${xShift} ${yShift} Td (${char}) Tj ET Q`; - const appearanceStreamDict = new _primitives.Dict(params.xref); - appearanceStreamDict.set("FormType", 1); - appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); - appearanceStreamDict.set("Type", _primitives.Name.get("XObject")); - appearanceStreamDict.set("BBox", bbox); - appearanceStreamDict.set("Matrix", [1, 0, 0, 1, 0, 0]); - appearanceStreamDict.set("Length", appearance.length); - const resources = new _primitives.Dict(params.xref); - const font = new _primitives.Dict(params.xref); - font.set("PdfJsZaDb", this.fallbackFontDict); - resources.set("Font", font); - appearanceStreamDict.set("Resources", resources); - this.checkedAppearance = new _stream.StringStream(appearance); - this.checkedAppearance.dict = appearanceStreamDict; - this._streams.push(this.checkedAppearance); - } - _processCheckBox(params) { - const customAppearance = params.dict.get("AP"); - if (!(customAppearance instanceof _primitives.Dict)) { - return; - } - const normalAppearance = customAppearance.get("N"); - if (!(normalAppearance instanceof _primitives.Dict)) { - return; - } - const asValue = this._decodeFormValue(params.dict.get("AS")); - if (typeof asValue === "string") { - this.data.fieldValue = asValue; - } - const yes = this.data.fieldValue !== null && this.data.fieldValue !== "Off" ? this.data.fieldValue : "Yes"; - const exportValues = normalAppearance.getKeys(); - if (exportValues.length === 0) { - exportValues.push("Off", yes); - } else if (exportValues.length === 1) { - if (exportValues[0] === "Off") { - exportValues.push(yes); - } else { - exportValues.unshift("Off"); - } - } else if (exportValues.includes(yes)) { - exportValues.length = 0; - exportValues.push("Off", yes); - } else { - const otherYes = exportValues.find(v => v !== "Off"); - exportValues.length = 0; - exportValues.push("Off", otherYes); - } - if (!exportValues.includes(this.data.fieldValue)) { - this.data.fieldValue = "Off"; - } - this.data.exportValue = exportValues[1]; - const checkedAppearance = normalAppearance.get(this.data.exportValue); - this.checkedAppearance = checkedAppearance instanceof _base_stream.BaseStream ? checkedAppearance : null; - const uncheckedAppearance = normalAppearance.get("Off"); - this.uncheckedAppearance = uncheckedAppearance instanceof _base_stream.BaseStream ? uncheckedAppearance : null; - if (this.checkedAppearance) { - this._streams.push(this.checkedAppearance); - } else { - this._getDefaultCheckedAppearance(params, "check"); - } - if (this.uncheckedAppearance) { - this._streams.push(this.uncheckedAppearance); - } - this._fallbackFontDict = this.fallbackFontDict; - if (this.data.defaultFieldValue === null) { - this.data.defaultFieldValue = "Off"; - } - } - _processRadioButton(params) { - this.data.fieldValue = this.data.buttonValue = null; - const fieldParent = params.dict.get("Parent"); - if (fieldParent instanceof _primitives.Dict) { - this.parent = params.dict.getRaw("Parent"); - const fieldParentValue = fieldParent.get("V"); - if (fieldParentValue instanceof _primitives.Name) { - this.data.fieldValue = this._decodeFormValue(fieldParentValue); - } - } - const appearanceStates = params.dict.get("AP"); - if (!(appearanceStates instanceof _primitives.Dict)) { - return; - } - const normalAppearance = appearanceStates.get("N"); - if (!(normalAppearance instanceof _primitives.Dict)) { - return; - } - for (const key of normalAppearance.getKeys()) { - if (key !== "Off") { - this.data.buttonValue = this._decodeFormValue(key); - break; - } - } - const checkedAppearance = normalAppearance.get(this.data.buttonValue); - this.checkedAppearance = checkedAppearance instanceof _base_stream.BaseStream ? checkedAppearance : null; - const uncheckedAppearance = normalAppearance.get("Off"); - this.uncheckedAppearance = uncheckedAppearance instanceof _base_stream.BaseStream ? uncheckedAppearance : null; - if (this.checkedAppearance) { - this._streams.push(this.checkedAppearance); - } else { - this._getDefaultCheckedAppearance(params, "disc"); - } - if (this.uncheckedAppearance) { - this._streams.push(this.uncheckedAppearance); - } - this._fallbackFontDict = this.fallbackFontDict; - if (this.data.defaultFieldValue === null) { - this.data.defaultFieldValue = "Off"; - } - } - _processPushButton(params) { - const { - dict, - annotationGlobals - } = params; - if (!dict.has("A") && !dict.has("AA") && !this.data.alternativeText) { - (0, _util.warn)("Push buttons without action dictionaries are not supported"); - return; - } - this.data.isTooltipOnly = !dict.has("A") && !dict.has("AA"); - _catalog.Catalog.parseDestDictionary({ - destDict: dict, - resultObj: this.data, - docBaseUrl: annotationGlobals.baseUrl, - docAttachments: annotationGlobals.attachments - }); - } - getFieldObject() { - let type = "button"; - let exportValues; - if (this.data.checkBox) { - type = "checkbox"; - exportValues = this.data.exportValue; - } else if (this.data.radioButton) { - type = "radiobutton"; - exportValues = this.data.buttonValue; - } - return { - id: this.data.id, - value: this.data.fieldValue || "Off", - defaultValue: this.data.defaultFieldValue, - exportValues, - editable: !this.data.readOnly, - name: this.data.fieldName, - rect: this.data.rect, - hidden: this.data.hidden, - actions: this.data.actions, - page: this.data.pageIndex, - strokeColor: this.data.borderColor, - fillColor: this.data.backgroundColor, - rotation: this.rotation, - type - }; - } - get fallbackFontDict() { - const dict = new _primitives.Dict(); - dict.set("BaseFont", _primitives.Name.get("ZapfDingbats")); - dict.set("Type", _primitives.Name.get("FallbackType")); - dict.set("Subtype", _primitives.Name.get("FallbackType")); - dict.set("Encoding", _primitives.Name.get("ZapfDingbatsEncoding")); - return (0, _util.shadow)(this, "fallbackFontDict", dict); - } -} -class ChoiceWidgetAnnotation extends WidgetAnnotation { - constructor(params) { - super(params); - const { - dict, - xref - } = params; - this.indices = dict.getArray("I"); - this.hasIndices = Array.isArray(this.indices) && this.indices.length > 0; - this.data.options = []; - const options = (0, _core_utils.getInheritableProperty)({ - dict, - key: "Opt" - }); - if (Array.isArray(options)) { - for (let i = 0, ii = options.length; i < ii; i++) { - const option = xref.fetchIfRef(options[i]); - const isOptionArray = Array.isArray(option); - this.data.options[i] = { - exportValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[0]) : option), - displayValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[1]) : option) - }; - } - } - if (!this.hasIndices) { - if (typeof this.data.fieldValue === "string") { - this.data.fieldValue = [this.data.fieldValue]; - } else if (!this.data.fieldValue) { - this.data.fieldValue = []; - } - } else { - this.data.fieldValue = []; - const ii = this.data.options.length; - for (const i of this.indices) { - if (Number.isInteger(i) && i >= 0 && i < ii) { - this.data.fieldValue.push(this.data.options[i].exportValue); - } - } - } - this.data.combo = this.hasFieldFlag(_util.AnnotationFieldFlag.COMBO); - this.data.multiSelect = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT); - this._hasText = true; - } - getFieldObject() { - const type = this.data.combo ? "combobox" : "listbox"; - const value = this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null; - return { - id: this.data.id, - value, - defaultValue: this.data.defaultFieldValue, - editable: !this.data.readOnly, - name: this.data.fieldName, - rect: this.data.rect, - numItems: this.data.fieldValue.length, - multipleSelection: this.data.multiSelect, - hidden: this.data.hidden, - actions: this.data.actions, - items: this.data.options, - page: this.data.pageIndex, - strokeColor: this.data.borderColor, - fillColor: this.data.backgroundColor, - rotation: this.rotation, - type - }; - } - amendSavedDict(annotationStorage, dict) { - if (!this.hasIndices) { - return; - } - let values = annotationStorage?.get(this.data.id)?.value; - if (!Array.isArray(values)) { - values = [values]; - } - const indices = []; - const { - options - } = this.data; - for (let i = 0, j = 0, ii = options.length; i < ii; i++) { - if (options[i].exportValue === values[j]) { - indices.push(i); - j += 1; - } - } - dict.set("I", indices); - } - async _getAppearance(evaluator, task, intent, annotationStorage) { - if (this.data.combo) { - return super._getAppearance(evaluator, task, intent, annotationStorage); - } - let exportedValue, rotation; - const storageEntry = annotationStorage?.get(this.data.id); - if (storageEntry) { - rotation = storageEntry.rotation; - exportedValue = storageEntry.value; - } - if (rotation === undefined && exportedValue === undefined && !this._needAppearances) { - return null; - } - if (exportedValue === undefined) { - exportedValue = this.data.fieldValue; - } else if (!Array.isArray(exportedValue)) { - exportedValue = [exportedValue]; - } - const defaultPadding = 1; - const defaultHPadding = 2; - let totalHeight = this.data.rect[3] - this.data.rect[1]; - let totalWidth = this.data.rect[2] - this.data.rect[0]; - if (rotation === 90 || rotation === 270) { - [totalWidth, totalHeight] = [totalHeight, totalWidth]; - } - const lineCount = this.data.options.length; - const valueIndices = []; - for (let i = 0; i < lineCount; i++) { - const { - exportValue - } = this.data.options[i]; - if (exportedValue.includes(exportValue)) { - valueIndices.push(i); - } - } - if (!this._defaultAppearance) { - this.data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance = "/Helvetica 0 Tf 0 g"); - } - const font = await WidgetAnnotation._getFontData(evaluator, task, this.data.defaultAppearanceData, this._fieldResources.mergedResources); - let defaultAppearance; - let { - fontSize - } = this.data.defaultAppearanceData; - if (!fontSize) { - const lineHeight = (totalHeight - defaultPadding) / lineCount; - let lineWidth = -1; - let value; - for (const { - displayValue - } of this.data.options) { - const width = this._getTextWidth(displayValue, font); - if (width > lineWidth) { - lineWidth = width; - value = displayValue; - } - } - [defaultAppearance, fontSize] = this._computeFontSize(lineHeight, totalWidth - 2 * defaultHPadding, value, font, -1); - } else { - defaultAppearance = this._defaultAppearance; - } - const lineHeight = fontSize * _util.LINE_FACTOR; - const vPadding = (lineHeight - fontSize) / 2; - const numberOfVisibleLines = Math.floor(totalHeight / lineHeight); - let firstIndex = 0; - if (valueIndices.length > 0) { - const minIndex = Math.min(...valueIndices); - const maxIndex = Math.max(...valueIndices); - firstIndex = Math.max(0, maxIndex - numberOfVisibleLines + 1); - if (firstIndex > minIndex) { - firstIndex = minIndex; - } - } - const end = Math.min(firstIndex + numberOfVisibleLines + 1, lineCount); - const buf = ["/Tx BMC q", `1 1 ${totalWidth} ${totalHeight} re W n`]; - if (valueIndices.length) { - buf.push("0.600006 0.756866 0.854904 rg"); - for (const index of valueIndices) { - if (firstIndex <= index && index < end) { - buf.push(`1 ${totalHeight - (index - firstIndex + 1) * lineHeight} ${totalWidth} ${lineHeight} re f`); - } - } - } - buf.push("BT", defaultAppearance, `1 0 0 1 0 ${totalHeight} Tm`); - const prevInfo = { - shift: 0 - }; - for (let i = firstIndex; i < end; i++) { - const { - displayValue - } = this.data.options[i]; - const vpadding = i === firstIndex ? vPadding : 0; - buf.push(this._renderText(displayValue, font, fontSize, totalWidth, 0, prevInfo, defaultHPadding, -lineHeight + vpadding)); - } - buf.push("ET Q EMC"); - return buf.join("\n"); - } -} -class SignatureWidgetAnnotation extends WidgetAnnotation { - constructor(params) { - super(params); - this.data.fieldValue = null; - this.data.hasOwnCanvas = this.data.noRotate; - } - getFieldObject() { - return { - id: this.data.id, - value: null, - page: this.data.pageIndex, - type: "signature" - }; - } -} -class TextAnnotation extends MarkupAnnotation { - constructor(params) { - const DEFAULT_ICON_SIZE = 22; - super(params); - this.data.noRotate = true; - this.data.hasOwnCanvas = this.data.noRotate; - const { - dict - } = params; - this.data.annotationType = _util.AnnotationType.TEXT; - if (this.data.hasAppearance) { - this.data.name = "NoIcon"; - } else { - this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE; - this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE; - this.data.name = dict.has("Name") ? dict.get("Name").name : "Note"; - } - if (dict.has("State")) { - this.data.state = dict.get("State") || null; - this.data.stateModel = dict.get("StateModel") || null; - } else { - this.data.state = null; - this.data.stateModel = null; - } - } -} -class LinkAnnotation extends Annotation { - constructor(params) { - super(params); - const { - dict, - annotationGlobals - } = params; - this.data.annotationType = _util.AnnotationType.LINK; - const quadPoints = getQuadPoints(dict, this.rectangle); - if (quadPoints) { - this.data.quadPoints = quadPoints; - } - this.data.borderColor ||= this.data.color; - _catalog.Catalog.parseDestDictionary({ - destDict: dict, - resultObj: this.data, - docBaseUrl: annotationGlobals.baseUrl, - docAttachments: annotationGlobals.attachments - }); - } -} -class PopupAnnotation extends Annotation { - constructor(params) { - super(params); - const { - dict - } = params; - this.data.annotationType = _util.AnnotationType.POPUP; - if (this.data.rect[0] === this.data.rect[2] || this.data.rect[1] === this.data.rect[3]) { - this.data.rect = null; - } - let parentItem = dict.get("Parent"); - if (!parentItem) { - (0, _util.warn)("Popup annotation has a missing or invalid parent annotation."); - return; - } - const parentRect = parentItem.getArray("Rect"); - this.data.parentRect = Array.isArray(parentRect) && parentRect.length === 4 ? _util.Util.normalizeRect(parentRect) : null; - const rt = parentItem.get("RT"); - if ((0, _primitives.isName)(rt, _util.AnnotationReplyType.GROUP)) { - parentItem = parentItem.get("IRT"); - } - if (!parentItem.has("M")) { - this.data.modificationDate = null; - } else { - this.setModificationDate(parentItem.get("M")); - this.data.modificationDate = this.modificationDate; - } - if (!parentItem.has("C")) { - this.data.color = null; - } else { - this.setColor(parentItem.getArray("C")); - this.data.color = this.color; - } - if (!this.viewable) { - const parentFlags = parentItem.get("F"); - if (this._isViewable(parentFlags)) { - this.setFlags(parentFlags); - } - } - this.setTitle(parentItem.get("T")); - this.data.titleObj = this._title; - this.setContents(parentItem.get("Contents")); - this.data.contentsObj = this._contents; - if (parentItem.has("RC")) { - this.data.richText = _factory.XFAFactory.getRichTextAsHtml(parentItem.get("RC")); - } - this.data.open = !!dict.get("Open"); - } -} -exports.PopupAnnotation = PopupAnnotation; -class FreeTextAnnotation extends MarkupAnnotation { - constructor(params) { - super(params); - this.data.hasOwnCanvas = true; - const { - evaluatorOptions, - xref - } = params; - this.data.annotationType = _util.AnnotationType.FREETEXT; - this.setDefaultAppearance(params); - if (this.appearance) { - const { - fontColor, - fontSize - } = (0, _default_appearance.parseAppearanceStream)(this.appearance, evaluatorOptions, xref); - this.data.defaultAppearanceData.fontColor = fontColor; - this.data.defaultAppearanceData.fontSize = fontSize || 10; - } else if (this._isOffscreenCanvasSupported) { - const strokeAlpha = params.dict.get("CA"); - const fakeUnicodeFont = new _default_appearance.FakeUnicodeFont(xref, "sans-serif"); - this.data.defaultAppearanceData.fontSize ||= 10; - const { - fontColor, - fontSize - } = this.data.defaultAppearanceData; - this.appearance = fakeUnicodeFont.createAppearance(this._contents.str, this.rectangle, this.rotation, fontSize, fontColor, strokeAlpha); - this._streams.push(this.appearance, _default_appearance.FakeUnicodeFont.toUnicodeStream); - } else { - (0, _util.warn)("FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly."); - } - } - get hasTextContent() { - return !!this.appearance; - } - static createNewDict(annotation, xref, { - apRef, - ap - }) { - const { - color, - fontSize, - rect, - rotation, - user, - value - } = annotation; - const freetext = new _primitives.Dict(xref); - freetext.set("Type", _primitives.Name.get("Annot")); - freetext.set("Subtype", _primitives.Name.get("FreeText")); - freetext.set("CreationDate", `D:${(0, _util.getModificationDate)()}`); - freetext.set("Rect", rect); - const da = `/Helv ${fontSize} Tf ${(0, _default_appearance.getPdfColor)(color, true)}`; - freetext.set("DA", da); - freetext.set("Contents", (0, _core_utils.isAscii)(value) ? value : (0, _core_utils.stringToUTF16String)(value, true)); - freetext.set("F", 4); - freetext.set("Border", [0, 0, 0]); - freetext.set("Rotate", rotation); - if (user) { - freetext.set("T", (0, _core_utils.isAscii)(user) ? user : (0, _core_utils.stringToUTF16String)(user, true)); - } - if (apRef || ap) { - const n = new _primitives.Dict(xref); - freetext.set("AP", n); - if (apRef) { - n.set("N", apRef); - } else { - n.set("N", ap); - } - } - return freetext; - } - static async createNewAppearanceStream(annotation, xref, params) { - const { - baseFontRef, - evaluator, - task - } = params; - const { - color, - fontSize, - rect, - rotation, - value - } = annotation; - const resources = new _primitives.Dict(xref); - const font = new _primitives.Dict(xref); - if (baseFontRef) { - font.set("Helv", baseFontRef); - } else { - const baseFont = new _primitives.Dict(xref); - baseFont.set("BaseFont", _primitives.Name.get("Helvetica")); - baseFont.set("Type", _primitives.Name.get("Font")); - baseFont.set("Subtype", _primitives.Name.get("Type1")); - baseFont.set("Encoding", _primitives.Name.get("WinAnsiEncoding")); - font.set("Helv", baseFont); - } - resources.set("Font", font); - const helv = await WidgetAnnotation._getFontData(evaluator, task, { - fontName: "Helv", - fontSize - }, resources); - const [x1, y1, x2, y2] = rect; - let w = x2 - x1; - let h = y2 - y1; - if (rotation % 180 !== 0) { - [w, h] = [h, w]; - } - const lines = value.split("\n"); - const scale = fontSize / 1000; - let totalWidth = -Infinity; - const encodedLines = []; - for (let line of lines) { - const encoded = helv.encodeString(line); - if (encoded.length > 1) { - return null; - } - line = encoded.join(""); - encodedLines.push(line); - let lineWidth = 0; - const glyphs = helv.charsToGlyphs(line); - for (const glyph of glyphs) { - lineWidth += glyph.width * scale; - } - totalWidth = Math.max(totalWidth, lineWidth); - } - let hscale = 1; - if (totalWidth > w) { - hscale = w / totalWidth; - } - let vscale = 1; - const lineHeight = _util.LINE_FACTOR * fontSize; - const lineAscent = (_util.LINE_FACTOR - _util.LINE_DESCENT_FACTOR) * fontSize; - const totalHeight = lineHeight * lines.length; - if (totalHeight > h) { - vscale = h / totalHeight; - } - const fscale = Math.min(hscale, vscale); - const newFontSize = fontSize * fscale; - let firstPoint, clipBox, matrix; - switch (rotation) { - case 0: - matrix = [1, 0, 0, 1]; - clipBox = [rect[0], rect[1], w, h]; - firstPoint = [rect[0], rect[3] - lineAscent]; - break; - case 90: - matrix = [0, 1, -1, 0]; - clipBox = [rect[1], -rect[2], w, h]; - firstPoint = [rect[1], -rect[0] - lineAscent]; - break; - case 180: - matrix = [-1, 0, 0, -1]; - clipBox = [-rect[2], -rect[3], w, h]; - firstPoint = [-rect[2], -rect[1] - lineAscent]; - break; - case 270: - matrix = [0, -1, 1, 0]; - clipBox = [-rect[3], rect[0], w, h]; - firstPoint = [-rect[3], rect[2] - lineAscent]; - break; - } - const buffer = ["q", `${matrix.join(" ")} 0 0 cm`, `${clipBox.join(" ")} re W n`, `BT`, `${(0, _default_appearance.getPdfColor)(color, true)}`, `0 Tc /Helv ${(0, _core_utils.numberToString)(newFontSize)} Tf`]; - buffer.push(`${firstPoint.join(" ")} Td (${(0, _core_utils.escapeString)(encodedLines[0])}) Tj`); - const vShift = (0, _core_utils.numberToString)(lineHeight); - for (let i = 1, ii = encodedLines.length; i < ii; i++) { - const line = encodedLines[i]; - buffer.push(`0 -${vShift} Td (${(0, _core_utils.escapeString)(line)}) Tj`); - } - buffer.push("ET", "Q"); - const appearance = buffer.join("\n"); - const appearanceStreamDict = new _primitives.Dict(xref); - appearanceStreamDict.set("FormType", 1); - appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); - appearanceStreamDict.set("Type", _primitives.Name.get("XObject")); - appearanceStreamDict.set("BBox", rect); - appearanceStreamDict.set("Resources", resources); - appearanceStreamDict.set("Matrix", [1, 0, 0, 1, -rect[0], -rect[1]]); - const ap = new _stream.StringStream(appearance); - ap.dict = appearanceStreamDict; - return ap; - } -} -class LineAnnotation extends MarkupAnnotation { - constructor(params) { - super(params); - const { - dict, - xref - } = params; - this.data.annotationType = _util.AnnotationType.LINE; - this.data.hasOwnCanvas = this.data.noRotate; - const lineCoordinates = dict.getArray("L"); - this.data.lineCoordinates = _util.Util.normalizeRect(lineCoordinates); - this.setLineEndings(dict.getArray("LE")); - this.data.lineEndings = this.lineEndings; - if (!this.appearance) { - const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0]; - const strokeAlpha = dict.get("CA"); - const interiorColor = getRgbColor(dict.getArray("IC"), null); - const fillColor = interiorColor ? getPdfColorArray(interiorColor) : null; - const fillAlpha = fillColor ? strokeAlpha : null; - const borderWidth = this.borderStyle.width || 1, - borderAdjust = 2 * borderWidth; - const bbox = [this.data.lineCoordinates[0] - borderAdjust, this.data.lineCoordinates[1] - borderAdjust, this.data.lineCoordinates[2] + borderAdjust, this.data.lineCoordinates[3] + borderAdjust]; - if (!_util.Util.intersect(this.rectangle, bbox)) { - this.rectangle = bbox; - } - this._setDefaultAppearance({ - xref, - extra: `${borderWidth} w`, - strokeColor, - fillColor, - strokeAlpha, - fillAlpha, - pointsCallback: (buffer, points) => { - buffer.push(`${lineCoordinates[0]} ${lineCoordinates[1]} m`, `${lineCoordinates[2]} ${lineCoordinates[3]} l`, "S"); - return [points[0].x - borderWidth, points[1].x + borderWidth, points[3].y - borderWidth, points[1].y + borderWidth]; - } - }); - } - } -} -class SquareAnnotation extends MarkupAnnotation { - constructor(params) { - super(params); - const { - dict, - xref - } = params; - this.data.annotationType = _util.AnnotationType.SQUARE; - this.data.hasOwnCanvas = this.data.noRotate; - if (!this.appearance) { - const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0]; - const strokeAlpha = dict.get("CA"); - const interiorColor = getRgbColor(dict.getArray("IC"), null); - const fillColor = interiorColor ? getPdfColorArray(interiorColor) : null; - const fillAlpha = fillColor ? strokeAlpha : null; - if (this.borderStyle.width === 0 && !fillColor) { - return; - } - this._setDefaultAppearance({ - xref, - extra: `${this.borderStyle.width} w`, - strokeColor, - fillColor, - strokeAlpha, - fillAlpha, - pointsCallback: (buffer, points) => { - const x = points[2].x + this.borderStyle.width / 2; - const y = points[2].y + this.borderStyle.width / 2; - const width = points[3].x - points[2].x - this.borderStyle.width; - const height = points[1].y - points[3].y - this.borderStyle.width; - buffer.push(`${x} ${y} ${width} ${height} re`); - if (fillColor) { - buffer.push("B"); - } else { - buffer.push("S"); - } - return [points[0].x, points[1].x, points[3].y, points[1].y]; - } - }); - } - } -} -class CircleAnnotation extends MarkupAnnotation { - constructor(params) { - super(params); - const { - dict, - xref - } = params; - this.data.annotationType = _util.AnnotationType.CIRCLE; - if (!this.appearance) { - const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0]; - const strokeAlpha = dict.get("CA"); - const interiorColor = getRgbColor(dict.getArray("IC"), null); - const fillColor = interiorColor ? getPdfColorArray(interiorColor) : null; - const fillAlpha = fillColor ? strokeAlpha : null; - if (this.borderStyle.width === 0 && !fillColor) { - return; - } - const controlPointsDistance = 4 / 3 * Math.tan(Math.PI / (2 * 4)); - this._setDefaultAppearance({ - xref, - extra: `${this.borderStyle.width} w`, - strokeColor, - fillColor, - strokeAlpha, - fillAlpha, - pointsCallback: (buffer, points) => { - const x0 = points[0].x + this.borderStyle.width / 2; - const y0 = points[0].y - this.borderStyle.width / 2; - const x1 = points[3].x - this.borderStyle.width / 2; - const y1 = points[3].y + this.borderStyle.width / 2; - const xMid = x0 + (x1 - x0) / 2; - const yMid = y0 + (y1 - y0) / 2; - const xOffset = (x1 - x0) / 2 * controlPointsDistance; - const yOffset = (y1 - y0) / 2 * controlPointsDistance; - buffer.push(`${xMid} ${y1} m`, `${xMid + xOffset} ${y1} ${x1} ${yMid + yOffset} ${x1} ${yMid} c`, `${x1} ${yMid - yOffset} ${xMid + xOffset} ${y0} ${xMid} ${y0} c`, `${xMid - xOffset} ${y0} ${x0} ${yMid - yOffset} ${x0} ${yMid} c`, `${x0} ${yMid + yOffset} ${xMid - xOffset} ${y1} ${xMid} ${y1} c`, "h"); - if (fillColor) { - buffer.push("B"); - } else { - buffer.push("S"); - } - return [points[0].x, points[1].x, points[3].y, points[1].y]; - } - }); - } - } -} -class PolylineAnnotation extends MarkupAnnotation { - constructor(params) { - super(params); - const { - dict, - xref - } = params; - this.data.annotationType = _util.AnnotationType.POLYLINE; - this.data.hasOwnCanvas = this.data.noRotate; - this.data.vertices = []; - if (!(this instanceof PolygonAnnotation)) { - this.setLineEndings(dict.getArray("LE")); - this.data.lineEndings = this.lineEndings; - } - const rawVertices = dict.getArray("Vertices"); - if (!Array.isArray(rawVertices)) { - return; - } - for (let i = 0, ii = rawVertices.length; i < ii; i += 2) { - this.data.vertices.push({ - x: rawVertices[i], - y: rawVertices[i + 1] - }); - } - if (!this.appearance) { - const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0]; - const strokeAlpha = dict.get("CA"); - const borderWidth = this.borderStyle.width || 1, - borderAdjust = 2 * borderWidth; - const bbox = [Infinity, Infinity, -Infinity, -Infinity]; - for (const vertex of this.data.vertices) { - bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust); - bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust); - bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust); - bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust); - } - if (!_util.Util.intersect(this.rectangle, bbox)) { - this.rectangle = bbox; - } - this._setDefaultAppearance({ - xref, - extra: `${borderWidth} w`, - strokeColor, - strokeAlpha, - pointsCallback: (buffer, points) => { - const vertices = this.data.vertices; - for (let i = 0, ii = vertices.length; i < ii; i++) { - buffer.push(`${vertices[i].x} ${vertices[i].y} ${i === 0 ? "m" : "l"}`); - } - buffer.push("S"); - return [points[0].x, points[1].x, points[3].y, points[1].y]; - } - }); - } - } -} -class PolygonAnnotation extends PolylineAnnotation { - constructor(params) { - super(params); - this.data.annotationType = _util.AnnotationType.POLYGON; - } -} -class CaretAnnotation extends MarkupAnnotation { - constructor(params) { - super(params); - this.data.annotationType = _util.AnnotationType.CARET; - } -} -class InkAnnotation extends MarkupAnnotation { - constructor(params) { - super(params); - this.data.hasOwnCanvas = this.data.noRotate; - const { - dict, - xref - } = params; - this.data.annotationType = _util.AnnotationType.INK; - this.data.inkLists = []; - const rawInkLists = dict.getArray("InkList"); - if (!Array.isArray(rawInkLists)) { - return; - } - for (let i = 0, ii = rawInkLists.length; i < ii; ++i) { - this.data.inkLists.push([]); - for (let j = 0, jj = rawInkLists[i].length; j < jj; j += 2) { - this.data.inkLists[i].push({ - x: xref.fetchIfRef(rawInkLists[i][j]), - y: xref.fetchIfRef(rawInkLists[i][j + 1]) - }); - } - } - if (!this.appearance) { - const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0]; - const strokeAlpha = dict.get("CA"); - const borderWidth = this.borderStyle.width || 1, - borderAdjust = 2 * borderWidth; - const bbox = [Infinity, Infinity, -Infinity, -Infinity]; - for (const inkLists of this.data.inkLists) { - for (const vertex of inkLists) { - bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust); - bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust); - bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust); - bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust); - } - } - if (!_util.Util.intersect(this.rectangle, bbox)) { - this.rectangle = bbox; - } - this._setDefaultAppearance({ - xref, - extra: `${borderWidth} w`, - strokeColor, - strokeAlpha, - pointsCallback: (buffer, points) => { - for (const inkList of this.data.inkLists) { - for (let i = 0, ii = inkList.length; i < ii; i++) { - buffer.push(`${inkList[i].x} ${inkList[i].y} ${i === 0 ? "m" : "l"}`); - } - buffer.push("S"); - } - return [points[0].x, points[1].x, points[3].y, points[1].y]; - } - }); - } - } - static createNewDict(annotation, xref, { - apRef, - ap - }) { - const { - color, - opacity, - paths, - rect, - rotation, - thickness - } = annotation; - const ink = new _primitives.Dict(xref); - ink.set("Type", _primitives.Name.get("Annot")); - ink.set("Subtype", _primitives.Name.get("Ink")); - ink.set("CreationDate", `D:${(0, _util.getModificationDate)()}`); - ink.set("Rect", rect); - ink.set("InkList", paths.map(p => p.points)); - ink.set("F", 4); - ink.set("Rotate", rotation); - const bs = new _primitives.Dict(xref); - ink.set("BS", bs); - bs.set("W", thickness); - ink.set("C", Array.from(color, c => c / 255)); - ink.set("CA", opacity); - const n = new _primitives.Dict(xref); - ink.set("AP", n); - if (apRef) { - n.set("N", apRef); - } else { - n.set("N", ap); - } - return ink; - } - static async createNewAppearanceStream(annotation, xref, params) { - const { - color, - rect, - paths, - thickness, - opacity - } = annotation; - const appearanceBuffer = [`${thickness} w 1 J 1 j`, `${(0, _default_appearance.getPdfColor)(color, false)}`]; - if (opacity !== 1) { - appearanceBuffer.push("/R0 gs"); - } - const buffer = []; - for (const { - bezier - } of paths) { - buffer.length = 0; - buffer.push(`${(0, _core_utils.numberToString)(bezier[0])} ${(0, _core_utils.numberToString)(bezier[1])} m`); - for (let i = 2, ii = bezier.length; i < ii; i += 6) { - const curve = bezier.slice(i, i + 6).map(_core_utils.numberToString).join(" "); - buffer.push(`${curve} c`); - } - buffer.push("S"); - appearanceBuffer.push(buffer.join("\n")); - } - const appearance = appearanceBuffer.join("\n"); - const appearanceStreamDict = new _primitives.Dict(xref); - appearanceStreamDict.set("FormType", 1); - appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); - appearanceStreamDict.set("Type", _primitives.Name.get("XObject")); - appearanceStreamDict.set("BBox", rect); - appearanceStreamDict.set("Length", appearance.length); - if (opacity !== 1) { - const resources = new _primitives.Dict(xref); - const extGState = new _primitives.Dict(xref); - const r0 = new _primitives.Dict(xref); - r0.set("CA", opacity); - r0.set("Type", _primitives.Name.get("ExtGState")); - extGState.set("R0", r0); - resources.set("ExtGState", extGState); - appearanceStreamDict.set("Resources", resources); - } - const ap = new _stream.StringStream(appearance); - ap.dict = appearanceStreamDict; - return ap; - } -} -class HighlightAnnotation extends MarkupAnnotation { - constructor(params) { - super(params); - const { - dict, - xref - } = params; - this.data.annotationType = _util.AnnotationType.HIGHLIGHT; - const quadPoints = this.data.quadPoints = getQuadPoints(dict, null); - if (quadPoints) { - const resources = this.appearance?.dict.get("Resources"); - if (!this.appearance || !resources?.has("ExtGState")) { - if (this.appearance) { - (0, _util.warn)("HighlightAnnotation - ignoring built-in appearance stream."); - } - const fillColor = this.color ? getPdfColorArray(this.color) : [1, 1, 0]; - const fillAlpha = dict.get("CA"); - this._setDefaultAppearance({ - xref, - fillColor, - blendMode: "Multiply", - fillAlpha, - pointsCallback: (buffer, points) => { - buffer.push(`${points[0].x} ${points[0].y} m`, `${points[1].x} ${points[1].y} l`, `${points[3].x} ${points[3].y} l`, `${points[2].x} ${points[2].y} l`, "f"); - return [points[0].x, points[1].x, points[3].y, points[1].y]; - } - }); - } - } else { - this.data.popupRef = null; - } - } -} -class UnderlineAnnotation extends MarkupAnnotation { - constructor(params) { - super(params); - const { - dict, - xref - } = params; - this.data.annotationType = _util.AnnotationType.UNDERLINE; - const quadPoints = this.data.quadPoints = getQuadPoints(dict, null); - if (quadPoints) { - if (!this.appearance) { - const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0]; - const strokeAlpha = dict.get("CA"); - this._setDefaultAppearance({ - xref, - extra: "[] 0 d 0.571 w", - strokeColor, - strokeAlpha, - pointsCallback: (buffer, points) => { - buffer.push(`${points[2].x} ${points[2].y + 1.3} m`, `${points[3].x} ${points[3].y + 1.3} l`, "S"); - return [points[0].x, points[1].x, points[3].y, points[1].y]; - } - }); - } - } else { - this.data.popupRef = null; - } - } -} -class SquigglyAnnotation extends MarkupAnnotation { - constructor(params) { - super(params); - const { - dict, - xref - } = params; - this.data.annotationType = _util.AnnotationType.SQUIGGLY; - const quadPoints = this.data.quadPoints = getQuadPoints(dict, null); - if (quadPoints) { - if (!this.appearance) { - const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0]; - const strokeAlpha = dict.get("CA"); - this._setDefaultAppearance({ - xref, - extra: "[] 0 d 1 w", - strokeColor, - strokeAlpha, - pointsCallback: (buffer, points) => { - const dy = (points[0].y - points[2].y) / 6; - let shift = dy; - let x = points[2].x; - const y = points[2].y; - const xEnd = points[3].x; - buffer.push(`${x} ${y + shift} m`); - do { - x += 2; - shift = shift === 0 ? dy : 0; - buffer.push(`${x} ${y + shift} l`); - } while (x < xEnd); - buffer.push("S"); - return [points[2].x, xEnd, y - 2 * dy, y + 2 * dy]; - } - }); - } - } else { - this.data.popupRef = null; - } - } -} -class StrikeOutAnnotation extends MarkupAnnotation { - constructor(params) { - super(params); - const { - dict, - xref - } = params; - this.data.annotationType = _util.AnnotationType.STRIKEOUT; - const quadPoints = this.data.quadPoints = getQuadPoints(dict, null); - if (quadPoints) { - if (!this.appearance) { - const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0]; - const strokeAlpha = dict.get("CA"); - this._setDefaultAppearance({ - xref, - extra: "[] 0 d 1 w", - strokeColor, - strokeAlpha, - pointsCallback: (buffer, points) => { - buffer.push(`${(points[0].x + points[2].x) / 2} ` + `${(points[0].y + points[2].y) / 2} m`, `${(points[1].x + points[3].x) / 2} ` + `${(points[1].y + points[3].y) / 2} l`, "S"); - return [points[0].x, points[1].x, points[3].y, points[1].y]; - } - }); - } - } else { - this.data.popupRef = null; - } - } -} -class StampAnnotation extends MarkupAnnotation { - constructor(params) { - super(params); - this.data.annotationType = _util.AnnotationType.STAMP; - this.data.hasOwnCanvas = this.data.noRotate; - } - static async createImage(bitmap, xref) { - const { - width, - height - } = bitmap; - const canvas = new OffscreenCanvas(width, height); - const ctx = canvas.getContext("2d", { - alpha: true - }); - ctx.drawImage(bitmap, 0, 0); - const data = ctx.getImageData(0, 0, width, height).data; - const buf32 = new Uint32Array(data.buffer); - const hasAlpha = buf32.some(_util.FeatureTest.isLittleEndian ? x => x >>> 24 !== 0xff : x => (x & 0xff) !== 0xff); - if (hasAlpha) { - ctx.fillStyle = "white"; - ctx.fillRect(0, 0, width, height); - ctx.drawImage(bitmap, 0, 0); - } - const jpegBufferPromise = canvas.convertToBlob({ - type: "image/jpeg", - quality: 1 - }).then(blob => { - return blob.arrayBuffer(); - }); - const xobjectName = _primitives.Name.get("XObject"); - const imageName = _primitives.Name.get("Image"); - const image = new _primitives.Dict(xref); - image.set("Type", xobjectName); - image.set("Subtype", imageName); - image.set("BitsPerComponent", 8); - image.set("ColorSpace", _primitives.Name.get("DeviceRGB")); - image.set("Filter", _primitives.Name.get("DCTDecode")); - image.set("BBox", [0, 0, width, height]); - image.set("Width", width); - image.set("Height", height); - let smaskStream = null; - if (hasAlpha) { - const alphaBuffer = new Uint8Array(buf32.length); - if (_util.FeatureTest.isLittleEndian) { - for (let i = 0, ii = buf32.length; i < ii; i++) { - alphaBuffer[i] = buf32[i] >>> 24; - } - } else { - for (let i = 0, ii = buf32.length; i < ii; i++) { - alphaBuffer[i] = buf32[i] & 0xff; - } - } - const smask = new _primitives.Dict(xref); - smask.set("Type", xobjectName); - smask.set("Subtype", imageName); - smask.set("BitsPerComponent", 8); - smask.set("ColorSpace", _primitives.Name.get("DeviceGray")); - smask.set("Width", width); - smask.set("Height", height); - smaskStream = new _stream.Stream(alphaBuffer, 0, 0, smask); - } - const imageStream = new _stream.Stream(await jpegBufferPromise, 0, 0, image); - return { - imageStream, - smaskStream, - width, - height - }; - } - static createNewDict(annotation, xref, { - apRef, - ap - }) { - const { - rect, - rotation, - user - } = annotation; - const stamp = new _primitives.Dict(xref); - stamp.set("Type", _primitives.Name.get("Annot")); - stamp.set("Subtype", _primitives.Name.get("Stamp")); - stamp.set("CreationDate", `D:${(0, _util.getModificationDate)()}`); - stamp.set("Rect", rect); - stamp.set("F", 4); - stamp.set("Border", [0, 0, 0]); - stamp.set("Rotate", rotation); - if (user) { - stamp.set("T", (0, _core_utils.isAscii)(user) ? user : (0, _core_utils.stringToUTF16String)(user, true)); - } - if (apRef || ap) { - const n = new _primitives.Dict(xref); - stamp.set("AP", n); - if (apRef) { - n.set("N", apRef); - } else { - n.set("N", ap); - } - } - return stamp; - } - static async createNewAppearanceStream(annotation, xref, params) { - const { - rotation - } = annotation; - const { - imageRef, - width, - height - } = params.image; - const resources = new _primitives.Dict(xref); - const xobject = new _primitives.Dict(xref); - resources.set("XObject", xobject); - xobject.set("Im0", imageRef); - const appearance = `q ${width} 0 0 ${height} 0 0 cm /Im0 Do Q`; - const appearanceStreamDict = new _primitives.Dict(xref); - appearanceStreamDict.set("FormType", 1); - appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); - appearanceStreamDict.set("Type", _primitives.Name.get("XObject")); - appearanceStreamDict.set("BBox", [0, 0, width, height]); - appearanceStreamDict.set("Resources", resources); - if (rotation) { - const matrix = (0, _core_utils.getRotationMatrix)(rotation, width, height); - appearanceStreamDict.set("Matrix", matrix); - } - const ap = new _stream.StringStream(appearance); - ap.dict = appearanceStreamDict; - return ap; - } -} -class FileAttachmentAnnotation extends MarkupAnnotation { - constructor(params) { - super(params); - const { - dict, - xref - } = params; - const file = new _file_spec.FileSpec(dict.get("FS"), xref); - this.data.annotationType = _util.AnnotationType.FILEATTACHMENT; - this.data.hasOwnCanvas = this.data.noRotate; - this.data.file = file.serializable; - const name = dict.get("Name"); - this.data.name = name instanceof _primitives.Name ? (0, _util.stringToPDFString)(name.name) : "PushPin"; - const fillAlpha = dict.get("ca"); - this.data.fillAlpha = typeof fillAlpha === "number" && fillAlpha >= 0 && fillAlpha <= 1 ? fillAlpha : null; - } -} - -/***/ }), -/* 11 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FakeUnicodeFont = void 0; -exports.createDefaultAppearance = createDefaultAppearance; -exports.getPdfColor = getPdfColor; -exports.parseAppearanceStream = parseAppearanceStream; -exports.parseDefaultAppearance = parseDefaultAppearance; -var _primitives = __w_pdfjs_require__(4); -var _core_utils = __w_pdfjs_require__(3); -var _util = __w_pdfjs_require__(2); -var _colorspace = __w_pdfjs_require__(12); -var _evaluator = __w_pdfjs_require__(13); -var _image_utils = __w_pdfjs_require__(59); -var _function = __w_pdfjs_require__(57); -var _stream = __w_pdfjs_require__(8); -class DefaultAppearanceEvaluator extends _evaluator.EvaluatorPreprocessor { - constructor(str) { - super(new _stream.StringStream(str)); - } - parse() { - const operation = { - fn: 0, - args: [] - }; - const result = { - fontSize: 0, - fontName: "", - fontColor: new Uint8ClampedArray(3) - }; - try { - while (true) { - operation.args.length = 0; - if (!this.read(operation)) { - break; - } - if (this.savedStatesDepth !== 0) { - continue; - } - const { - fn, - args - } = operation; - switch (fn | 0) { - case _util.OPS.setFont: - const [fontName, fontSize] = args; - if (fontName instanceof _primitives.Name) { - result.fontName = fontName.name; - } - if (typeof fontSize === "number" && fontSize > 0) { - result.fontSize = fontSize; - } - break; - case _util.OPS.setFillRGBColor: - _colorspace.ColorSpace.singletons.rgb.getRgbItem(args, 0, result.fontColor, 0); - break; - case _util.OPS.setFillGray: - _colorspace.ColorSpace.singletons.gray.getRgbItem(args, 0, result.fontColor, 0); - break; - case _util.OPS.setFillCMYKColor: - _colorspace.ColorSpace.singletons.cmyk.getRgbItem(args, 0, result.fontColor, 0); - break; - } - } - } catch (reason) { - (0, _util.warn)(`parseDefaultAppearance - ignoring errors: "${reason}".`); - } - return result; - } -} -function parseDefaultAppearance(str) { - return new DefaultAppearanceEvaluator(str).parse(); -} -class AppearanceStreamEvaluator extends _evaluator.EvaluatorPreprocessor { - constructor(stream, evaluatorOptions, xref) { - super(stream); - this.stream = stream; - this.evaluatorOptions = evaluatorOptions; - this.xref = xref; - this.resources = stream.dict?.get("Resources"); - } - parse() { - const operation = { - fn: 0, - args: [] - }; - let result = { - scaleFactor: 1, - fontSize: 0, - fontName: "", - fontColor: new Uint8ClampedArray(3), - fillColorSpace: _colorspace.ColorSpace.singletons.gray - }; - let breakLoop = false; - const stack = []; - try { - while (true) { - operation.args.length = 0; - if (breakLoop || !this.read(operation)) { - break; - } - const { - fn, - args - } = operation; - switch (fn | 0) { - case _util.OPS.save: - stack.push({ - scaleFactor: result.scaleFactor, - fontSize: result.fontSize, - fontName: result.fontName, - fontColor: result.fontColor.slice(), - fillColorSpace: result.fillColorSpace - }); - break; - case _util.OPS.restore: - result = stack.pop() || result; - break; - case _util.OPS.setTextMatrix: - result.scaleFactor *= Math.hypot(args[0], args[1]); - break; - case _util.OPS.setFont: - const [fontName, fontSize] = args; - if (fontName instanceof _primitives.Name) { - result.fontName = fontName.name; - } - if (typeof fontSize === "number" && fontSize > 0) { - result.fontSize = fontSize * result.scaleFactor; - } - break; - case _util.OPS.setFillColorSpace: - result.fillColorSpace = _colorspace.ColorSpace.parse({ - cs: args[0], - xref: this.xref, - resources: this.resources, - pdfFunctionFactory: this._pdfFunctionFactory, - localColorSpaceCache: this._localColorSpaceCache - }); - break; - case _util.OPS.setFillColor: - const cs = result.fillColorSpace; - cs.getRgbItem(args, 0, result.fontColor, 0); - break; - case _util.OPS.setFillRGBColor: - _colorspace.ColorSpace.singletons.rgb.getRgbItem(args, 0, result.fontColor, 0); - break; - case _util.OPS.setFillGray: - _colorspace.ColorSpace.singletons.gray.getRgbItem(args, 0, result.fontColor, 0); - break; - case _util.OPS.setFillCMYKColor: - _colorspace.ColorSpace.singletons.cmyk.getRgbItem(args, 0, result.fontColor, 0); - break; - case _util.OPS.showText: - case _util.OPS.showSpacedText: - case _util.OPS.nextLineShowText: - case _util.OPS.nextLineSetSpacingShowText: - breakLoop = true; - break; - } - } - } catch (reason) { - (0, _util.warn)(`parseAppearanceStream - ignoring errors: "${reason}".`); - } - this.stream.reset(); - delete result.scaleFactor; - delete result.fillColorSpace; - return result; - } - get _localColorSpaceCache() { - return (0, _util.shadow)(this, "_localColorSpaceCache", new _image_utils.LocalColorSpaceCache()); - } - get _pdfFunctionFactory() { - const pdfFunctionFactory = new _function.PDFFunctionFactory({ - xref: this.xref, - isEvalSupported: this.evaluatorOptions.isEvalSupported - }); - return (0, _util.shadow)(this, "_pdfFunctionFactory", pdfFunctionFactory); - } -} -function parseAppearanceStream(stream, evaluatorOptions, xref) { - return new AppearanceStreamEvaluator(stream, evaluatorOptions, xref).parse(); -} -function getPdfColor(color, isFill) { - if (color[0] === color[1] && color[1] === color[2]) { - const gray = color[0] / 255; - return `${(0, _core_utils.numberToString)(gray)} ${isFill ? "g" : "G"}`; - } - return Array.from(color, c => (0, _core_utils.numberToString)(c / 255)).join(" ") + ` ${isFill ? "rg" : "RG"}`; -} -function createDefaultAppearance({ - fontSize, - fontName, - fontColor -}) { - return `/${(0, _core_utils.escapePDFName)(fontName)} ${fontSize} Tf ${getPdfColor(fontColor, true)}`; -} -class FakeUnicodeFont { - constructor(xref, fontFamily) { - this.xref = xref; - this.widths = null; - this.firstChar = Infinity; - this.lastChar = -Infinity; - this.fontFamily = fontFamily; - const canvas = new OffscreenCanvas(1, 1); - this.ctxMeasure = canvas.getContext("2d"); - if (!FakeUnicodeFont._fontNameId) { - FakeUnicodeFont._fontNameId = 1; - } - this.fontName = _primitives.Name.get(`InvalidPDFjsFont_${fontFamily}_${FakeUnicodeFont._fontNameId++}`); - } - get toUnicodeRef() { - if (!FakeUnicodeFont._toUnicodeRef) { - const toUnicode = `/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo -<< /Registry (Adobe) -/Ordering (UCS) /Supplement 0 >> def -/CMapName /Adobe-Identity-UCS def -/CMapType 2 def -1 begincodespacerange -<0000> -endcodespacerange -1 beginbfrange -<0000> <0000> -endbfrange -endcmap CMapName currentdict /CMap defineresource pop end end`; - const toUnicodeStream = FakeUnicodeFont.toUnicodeStream = new _stream.StringStream(toUnicode); - const toUnicodeDict = new _primitives.Dict(this.xref); - toUnicodeStream.dict = toUnicodeDict; - toUnicodeDict.set("Length", toUnicode.length); - FakeUnicodeFont._toUnicodeRef = this.xref.getNewPersistentRef(toUnicodeStream); - } - return FakeUnicodeFont._toUnicodeRef; - } - get fontDescriptorRef() { - if (!FakeUnicodeFont._fontDescriptorRef) { - const fontDescriptor = new _primitives.Dict(this.xref); - fontDescriptor.set("Type", _primitives.Name.get("FontDescriptor")); - fontDescriptor.set("FontName", this.fontName); - fontDescriptor.set("FontFamily", "MyriadPro Regular"); - fontDescriptor.set("FontBBox", [0, 0, 0, 0]); - fontDescriptor.set("FontStretch", _primitives.Name.get("Normal")); - fontDescriptor.set("FontWeight", 400); - fontDescriptor.set("ItalicAngle", 0); - FakeUnicodeFont._fontDescriptorRef = this.xref.getNewPersistentRef(fontDescriptor); - } - return FakeUnicodeFont._fontDescriptorRef; - } - get descendantFontRef() { - const descendantFont = new _primitives.Dict(this.xref); - descendantFont.set("BaseFont", this.fontName); - descendantFont.set("Type", _primitives.Name.get("Font")); - descendantFont.set("Subtype", _primitives.Name.get("CIDFontType0")); - descendantFont.set("CIDToGIDMap", _primitives.Name.get("Identity")); - descendantFont.set("FirstChar", this.firstChar); - descendantFont.set("LastChar", this.lastChar); - descendantFont.set("FontDescriptor", this.fontDescriptorRef); - descendantFont.set("DW", 1000); - const widths = []; - const chars = [...this.widths.entries()].sort(); - let currentChar = null; - let currentWidths = null; - for (const [char, width] of chars) { - if (!currentChar) { - currentChar = char; - currentWidths = [width]; - continue; - } - if (char === currentChar + currentWidths.length) { - currentWidths.push(width); - } else { - widths.push(currentChar, currentWidths); - currentChar = char; - currentWidths = [width]; - } - } - if (currentChar) { - widths.push(currentChar, currentWidths); - } - descendantFont.set("W", widths); - const cidSystemInfo = new _primitives.Dict(this.xref); - cidSystemInfo.set("Ordering", "Identity"); - cidSystemInfo.set("Registry", "Adobe"); - cidSystemInfo.set("Supplement", 0); - descendantFont.set("CIDSystemInfo", cidSystemInfo); - return this.xref.getNewPersistentRef(descendantFont); - } - get baseFontRef() { - const baseFont = new _primitives.Dict(this.xref); - baseFont.set("BaseFont", this.fontName); - baseFont.set("Type", _primitives.Name.get("Font")); - baseFont.set("Subtype", _primitives.Name.get("Type0")); - baseFont.set("Encoding", _primitives.Name.get("Identity-H")); - baseFont.set("DescendantFonts", [this.descendantFontRef]); - baseFont.set("ToUnicode", this.toUnicodeRef); - return this.xref.getNewPersistentRef(baseFont); - } - get resources() { - const resources = new _primitives.Dict(this.xref); - const font = new _primitives.Dict(this.xref); - font.set(this.fontName.name, this.baseFontRef); - resources.set("Font", font); - return resources; - } - _createContext() { - this.widths = new Map(); - this.ctxMeasure.font = `1000px ${this.fontFamily}`; - return this.ctxMeasure; - } - createFontResources(text) { - const ctx = this._createContext(); - for (const line of text.split(/\r\n?|\n/)) { - for (const char of line.split("")) { - const code = char.charCodeAt(0); - if (this.widths.has(code)) { - continue; - } - const metrics = ctx.measureText(char); - const width = Math.ceil(metrics.width); - this.widths.set(code, width); - this.firstChar = Math.min(code, this.firstChar); - this.lastChar = Math.max(code, this.lastChar); - } - } - return this.resources; - } - createAppearance(text, rect, rotation, fontSize, bgColor, strokeAlpha) { - const ctx = this._createContext(); - const lines = []; - let maxWidth = -Infinity; - for (const line of text.split(/\r\n?|\n/)) { - lines.push(line); - const lineWidth = ctx.measureText(line).width; - maxWidth = Math.max(maxWidth, lineWidth); - for (const char of line.split("")) { - const code = char.charCodeAt(0); - let width = this.widths.get(code); - if (width === undefined) { - const metrics = ctx.measureText(char); - width = Math.ceil(metrics.width); - this.widths.set(code, width); - this.firstChar = Math.min(code, this.firstChar); - this.lastChar = Math.max(code, this.lastChar); - } - } - } - maxWidth *= fontSize / 1000; - const [x1, y1, x2, y2] = rect; - let w = x2 - x1; - let h = y2 - y1; - if (rotation % 180 !== 0) { - [w, h] = [h, w]; - } - let hscale = 1; - if (maxWidth > w) { - hscale = w / maxWidth; - } - let vscale = 1; - const lineHeight = _util.LINE_FACTOR * fontSize; - const lineDescent = _util.LINE_DESCENT_FACTOR * fontSize; - const maxHeight = lineHeight * lines.length; - if (maxHeight > h) { - vscale = h / maxHeight; - } - const fscale = Math.min(hscale, vscale); - const newFontSize = fontSize * fscale; - const buffer = ["q", `0 0 ${(0, _core_utils.numberToString)(w)} ${(0, _core_utils.numberToString)(h)} re W n`, `BT`, `1 0 0 1 0 ${(0, _core_utils.numberToString)(h + lineDescent)} Tm 0 Tc ${getPdfColor(bgColor, true)}`, `/${this.fontName.name} ${(0, _core_utils.numberToString)(newFontSize)} Tf`]; - const { - resources - } = this; - strokeAlpha = typeof strokeAlpha === "number" && strokeAlpha >= 0 && strokeAlpha <= 1 ? strokeAlpha : 1; - if (strokeAlpha !== 1) { - buffer.push("/R0 gs"); - const extGState = new _primitives.Dict(this.xref); - const r0 = new _primitives.Dict(this.xref); - r0.set("ca", strokeAlpha); - r0.set("CA", strokeAlpha); - r0.set("Type", _primitives.Name.get("ExtGState")); - extGState.set("R0", r0); - resources.set("ExtGState", extGState); - } - const vShift = (0, _core_utils.numberToString)(lineHeight); - for (const line of lines) { - buffer.push(`0 -${vShift} Td <${(0, _core_utils.stringToUTF16HexString)(line)}> Tj`); - } - buffer.push("ET", "Q"); - const appearance = buffer.join("\n"); - const appearanceStreamDict = new _primitives.Dict(this.xref); - appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); - appearanceStreamDict.set("Type", _primitives.Name.get("XObject")); - appearanceStreamDict.set("BBox", [0, 0, w, h]); - appearanceStreamDict.set("Length", appearance.length); - appearanceStreamDict.set("Resources", resources); - if (rotation) { - const matrix = (0, _core_utils.getRotationMatrix)(rotation, w, h); - appearanceStreamDict.set("Matrix", matrix); - } - const ap = new _stream.StringStream(appearance); - ap.dict = appearanceStreamDict; - return ap; - } -} -exports.FakeUnicodeFont = FakeUnicodeFont; - -/***/ }), -/* 12 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ColorSpace = void 0; -var _util = __w_pdfjs_require__(2); -var _primitives = __w_pdfjs_require__(4); -var _base_stream = __w_pdfjs_require__(5); -var _core_utils = __w_pdfjs_require__(3); -function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) { - const COMPONENTS = 3; - alpha01 = alpha01 !== 1 ? 0 : alpha01; - const xRatio = w1 / w2; - const yRatio = h1 / h2; - let newIndex = 0, - oldIndex; - const xScaled = new Uint16Array(w2); - const w1Scanline = w1 * COMPONENTS; - for (let i = 0; i < w2; i++) { - xScaled[i] = Math.floor(i * xRatio) * COMPONENTS; - } - for (let i = 0; i < h2; i++) { - const py = Math.floor(i * yRatio) * w1Scanline; - for (let j = 0; j < w2; j++) { - oldIndex = py + xScaled[j]; - dest[newIndex++] = src[oldIndex++]; - dest[newIndex++] = src[oldIndex++]; - dest[newIndex++] = src[oldIndex++]; - newIndex += alpha01; - } - } -} -class ColorSpace { - constructor(name, numComps) { - if (this.constructor === ColorSpace) { - (0, _util.unreachable)("Cannot initialize ColorSpace."); - } - this.name = name; - this.numComps = numComps; - } - getRgb(src, srcOffset) { - const rgb = new Uint8ClampedArray(3); - this.getRgbItem(src, srcOffset, rgb, 0); - return rgb; - } - getRgbItem(src, srcOffset, dest, destOffset) { - (0, _util.unreachable)("Should not call ColorSpace.getRgbItem"); - } - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - (0, _util.unreachable)("Should not call ColorSpace.getRgbBuffer"); - } - getOutputLength(inputLength, alpha01) { - (0, _util.unreachable)("Should not call ColorSpace.getOutputLength"); - } - isPassthrough(bits) { - return false; - } - isDefaultDecode(decodeMap, bpc) { - return ColorSpace.isDefaultDecode(decodeMap, this.numComps); - } - fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) { - const count = originalWidth * originalHeight; - let rgbBuf = null; - const numComponentColors = 1 << bpc; - const needsResizing = originalHeight !== height || originalWidth !== width; - if (this.isPassthrough(bpc)) { - rgbBuf = comps; - } else if (this.numComps === 1 && count > numComponentColors && this.name !== "DeviceGray" && this.name !== "DeviceRGB") { - const allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors); - for (let i = 0; i < numComponentColors; i++) { - allColors[i] = i; - } - const colorMap = new Uint8ClampedArray(numComponentColors * 3); - this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0); - if (!needsResizing) { - let destPos = 0; - for (let i = 0; i < count; ++i) { - const key = comps[i] * 3; - dest[destPos++] = colorMap[key]; - dest[destPos++] = colorMap[key + 1]; - dest[destPos++] = colorMap[key + 2]; - destPos += alpha01; - } - } else { - rgbBuf = new Uint8Array(count * 3); - let rgbPos = 0; - for (let i = 0; i < count; ++i) { - const key = comps[i] * 3; - rgbBuf[rgbPos++] = colorMap[key]; - rgbBuf[rgbPos++] = colorMap[key + 1]; - rgbBuf[rgbPos++] = colorMap[key + 2]; - } - } - } else if (!needsResizing) { - this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01); - } else { - rgbBuf = new Uint8ClampedArray(count * 3); - this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0); - } - if (rgbBuf) { - if (needsResizing) { - resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01); - } else { - let destPos = 0, - rgbPos = 0; - for (let i = 0, ii = width * actualHeight; i < ii; i++) { - dest[destPos++] = rgbBuf[rgbPos++]; - dest[destPos++] = rgbBuf[rgbPos++]; - dest[destPos++] = rgbBuf[rgbPos++]; - destPos += alpha01; - } - } - } - } - get usesZeroToOneRange() { - return (0, _util.shadow)(this, "usesZeroToOneRange", true); - } - static _cache(cacheKey, xref, localColorSpaceCache, parsedColorSpace) { - if (!localColorSpaceCache) { - throw new Error('ColorSpace._cache - expected "localColorSpaceCache" argument.'); - } - if (!parsedColorSpace) { - throw new Error('ColorSpace._cache - expected "parsedColorSpace" argument.'); - } - let csName, csRef; - if (cacheKey instanceof _primitives.Ref) { - csRef = cacheKey; - cacheKey = xref.fetch(cacheKey); - } - if (cacheKey instanceof _primitives.Name) { - csName = cacheKey.name; - } - if (csName || csRef) { - localColorSpaceCache.set(csName, csRef, parsedColorSpace); - } - } - static getCached(cacheKey, xref, localColorSpaceCache) { - if (!localColorSpaceCache) { - throw new Error('ColorSpace.getCached - expected "localColorSpaceCache" argument.'); - } - if (cacheKey instanceof _primitives.Ref) { - const localColorSpace = localColorSpaceCache.getByRef(cacheKey); - if (localColorSpace) { - return localColorSpace; - } - try { - cacheKey = xref.fetch(cacheKey); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - } - } - if (cacheKey instanceof _primitives.Name) { - const localColorSpace = localColorSpaceCache.getByName(cacheKey.name); - if (localColorSpace) { - return localColorSpace; - } - } - return null; - } - static async parseAsync({ - cs, - xref, - resources = null, - pdfFunctionFactory, - localColorSpaceCache - }) { - const parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory); - this._cache(cs, xref, localColorSpaceCache, parsedColorSpace); - return parsedColorSpace; - } - static parse({ - cs, - xref, - resources = null, - pdfFunctionFactory, - localColorSpaceCache - }) { - const cachedColorSpace = this.getCached(cs, xref, localColorSpaceCache); - if (cachedColorSpace) { - return cachedColorSpace; - } - const parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory); - this._cache(cs, xref, localColorSpaceCache, parsedColorSpace); - return parsedColorSpace; - } - static _parse(cs, xref, resources = null, pdfFunctionFactory) { - cs = xref.fetchIfRef(cs); - if (cs instanceof _primitives.Name) { - switch (cs.name) { - case "G": - case "DeviceGray": - return this.singletons.gray; - case "RGB": - case "DeviceRGB": - return this.singletons.rgb; - case "CMYK": - case "DeviceCMYK": - return this.singletons.cmyk; - case "Pattern": - return new PatternCS(null); - default: - if (resources instanceof _primitives.Dict) { - const colorSpaces = resources.get("ColorSpace"); - if (colorSpaces instanceof _primitives.Dict) { - const resourcesCS = colorSpaces.get(cs.name); - if (resourcesCS) { - if (resourcesCS instanceof _primitives.Name) { - return this._parse(resourcesCS, xref, resources, pdfFunctionFactory); - } - cs = resourcesCS; - break; - } - } - } - throw new _util.FormatError(`Unrecognized ColorSpace: ${cs.name}`); - } - } - if (Array.isArray(cs)) { - const mode = xref.fetchIfRef(cs[0]).name; - let params, numComps, baseCS, whitePoint, blackPoint, gamma; - switch (mode) { - case "G": - case "DeviceGray": - return this.singletons.gray; - case "RGB": - case "DeviceRGB": - return this.singletons.rgb; - case "CMYK": - case "DeviceCMYK": - return this.singletons.cmyk; - case "CalGray": - params = xref.fetchIfRef(cs[1]); - whitePoint = params.getArray("WhitePoint"); - blackPoint = params.getArray("BlackPoint"); - gamma = params.get("Gamma"); - return new CalGrayCS(whitePoint, blackPoint, gamma); - case "CalRGB": - params = xref.fetchIfRef(cs[1]); - whitePoint = params.getArray("WhitePoint"); - blackPoint = params.getArray("BlackPoint"); - gamma = params.getArray("Gamma"); - const matrix = params.getArray("Matrix"); - return new CalRGBCS(whitePoint, blackPoint, gamma, matrix); - case "ICCBased": - const stream = xref.fetchIfRef(cs[1]); - const dict = stream.dict; - numComps = dict.get("N"); - const alt = dict.get("Alternate"); - if (alt) { - const altCS = this._parse(alt, xref, resources, pdfFunctionFactory); - if (altCS.numComps === numComps) { - return altCS; - } - (0, _util.warn)("ICCBased color space: Ignoring incorrect /Alternate entry."); - } - if (numComps === 1) { - return this.singletons.gray; - } else if (numComps === 3) { - return this.singletons.rgb; - } else if (numComps === 4) { - return this.singletons.cmyk; - } - break; - case "Pattern": - baseCS = cs[1] || null; - if (baseCS) { - baseCS = this._parse(baseCS, xref, resources, pdfFunctionFactory); - } - return new PatternCS(baseCS); - case "I": - case "Indexed": - baseCS = this._parse(cs[1], xref, resources, pdfFunctionFactory); - const hiVal = xref.fetchIfRef(cs[2]) + 1; - const lookup = xref.fetchIfRef(cs[3]); - return new IndexedCS(baseCS, hiVal, lookup); - case "Separation": - case "DeviceN": - const name = xref.fetchIfRef(cs[1]); - numComps = Array.isArray(name) ? name.length : 1; - baseCS = this._parse(cs[2], xref, resources, pdfFunctionFactory); - const tintFn = pdfFunctionFactory.create(cs[3]); - return new AlternateCS(numComps, baseCS, tintFn); - case "Lab": - params = xref.fetchIfRef(cs[1]); - whitePoint = params.getArray("WhitePoint"); - blackPoint = params.getArray("BlackPoint"); - const range = params.getArray("Range"); - return new LabCS(whitePoint, blackPoint, range); - default: - throw new _util.FormatError(`Unimplemented ColorSpace object: ${mode}`); - } - } - throw new _util.FormatError(`Unrecognized ColorSpace object: ${cs}`); - } - static isDefaultDecode(decode, numComps) { - if (!Array.isArray(decode)) { - return true; - } - if (numComps * 2 !== decode.length) { - (0, _util.warn)("The decode map is not the correct length"); - return true; - } - for (let i = 0, ii = decode.length; i < ii; i += 2) { - if (decode[i] !== 0 || decode[i + 1] !== 1) { - return false; - } - } - return true; - } - static get singletons() { - return (0, _util.shadow)(this, "singletons", { - get gray() { - return (0, _util.shadow)(this, "gray", new DeviceGrayCS()); - }, - get rgb() { - return (0, _util.shadow)(this, "rgb", new DeviceRgbCS()); - }, - get cmyk() { - return (0, _util.shadow)(this, "cmyk", new DeviceCmykCS()); - } - }); - } -} -exports.ColorSpace = ColorSpace; -class AlternateCS extends ColorSpace { - constructor(numComps, base, tintFn) { - super("Alternate", numComps); - this.base = base; - this.tintFn = tintFn; - this.tmpBuf = new Float32Array(base.numComps); - } - getRgbItem(src, srcOffset, dest, destOffset) { - const tmpBuf = this.tmpBuf; - this.tintFn(src, srcOffset, tmpBuf, 0); - this.base.getRgbItem(tmpBuf, 0, dest, destOffset); - } - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - const tintFn = this.tintFn; - const base = this.base; - const scale = 1 / ((1 << bits) - 1); - const baseNumComps = base.numComps; - const usesZeroToOneRange = base.usesZeroToOneRange; - const isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0; - let pos = isPassthrough ? destOffset : 0; - const baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count); - const numComps = this.numComps; - const scaled = new Float32Array(numComps); - const tinted = new Float32Array(baseNumComps); - let i, j; - for (i = 0; i < count; i++) { - for (j = 0; j < numComps; j++) { - scaled[j] = src[srcOffset++] * scale; - } - tintFn(scaled, 0, tinted, 0); - if (usesZeroToOneRange) { - for (j = 0; j < baseNumComps; j++) { - baseBuf[pos++] = tinted[j] * 255; - } - } else { - base.getRgbItem(tinted, 0, baseBuf, pos); - pos += baseNumComps; - } - } - if (!isPassthrough) { - base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01); - } - } - getOutputLength(inputLength, alpha01) { - return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01); - } -} -class PatternCS extends ColorSpace { - constructor(baseCS) { - super("Pattern", null); - this.base = baseCS; - } - isDefaultDecode(decodeMap, bpc) { - (0, _util.unreachable)("Should not call PatternCS.isDefaultDecode"); - } -} -class IndexedCS extends ColorSpace { - constructor(base, highVal, lookup) { - super("Indexed", 1); - this.base = base; - this.highVal = highVal; - const length = base.numComps * highVal; - this.lookup = new Uint8Array(length); - if (lookup instanceof _base_stream.BaseStream) { - const bytes = lookup.getBytes(length); - this.lookup.set(bytes); - } else if (typeof lookup === "string") { - for (let i = 0; i < length; ++i) { - this.lookup[i] = lookup.charCodeAt(i) & 0xff; - } - } else { - throw new _util.FormatError(`IndexedCS - unrecognized lookup table: ${lookup}`); - } - } - getRgbItem(src, srcOffset, dest, destOffset) { - const numComps = this.base.numComps; - const start = src[srcOffset] * numComps; - this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0); - } - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - const base = this.base; - const numComps = base.numComps; - const outputDelta = base.getOutputLength(numComps, alpha01); - const lookup = this.lookup; - for (let i = 0; i < count; ++i) { - const lookupPos = src[srcOffset++] * numComps; - base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01); - destOffset += outputDelta; - } - } - getOutputLength(inputLength, alpha01) { - return this.base.getOutputLength(inputLength * this.base.numComps, alpha01); - } - isDefaultDecode(decodeMap, bpc) { - if (!Array.isArray(decodeMap)) { - return true; - } - if (decodeMap.length !== 2) { - (0, _util.warn)("Decode map length is not correct"); - return true; - } - if (!Number.isInteger(bpc) || bpc < 1) { - (0, _util.warn)("Bits per component is not correct"); - return true; - } - return decodeMap[0] === 0 && decodeMap[1] === (1 << bpc) - 1; - } -} -class DeviceGrayCS extends ColorSpace { - constructor() { - super("DeviceGray", 1); - } - getRgbItem(src, srcOffset, dest, destOffset) { - const c = src[srcOffset] * 255; - dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c; - } - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - const scale = 255 / ((1 << bits) - 1); - let j = srcOffset, - q = destOffset; - for (let i = 0; i < count; ++i) { - const c = scale * src[j++]; - dest[q++] = c; - dest[q++] = c; - dest[q++] = c; - q += alpha01; - } - } - getOutputLength(inputLength, alpha01) { - return inputLength * (3 + alpha01); - } -} -class DeviceRgbCS extends ColorSpace { - constructor() { - super("DeviceRGB", 3); - } - getRgbItem(src, srcOffset, dest, destOffset) { - dest[destOffset] = src[srcOffset] * 255; - dest[destOffset + 1] = src[srcOffset + 1] * 255; - dest[destOffset + 2] = src[srcOffset + 2] * 255; - } - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - if (bits === 8 && alpha01 === 0) { - dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset); - return; - } - const scale = 255 / ((1 << bits) - 1); - let j = srcOffset, - q = destOffset; - for (let i = 0; i < count; ++i) { - dest[q++] = scale * src[j++]; - dest[q++] = scale * src[j++]; - dest[q++] = scale * src[j++]; - q += alpha01; - } - } - getOutputLength(inputLength, alpha01) { - return inputLength * (3 + alpha01) / 3 | 0; - } - isPassthrough(bits) { - return bits === 8; - } -} -class DeviceCmykCS extends ColorSpace { - constructor() { - super("DeviceCMYK", 4); - } - #toRgb(src, srcOffset, srcScale, dest, destOffset) { - const c = src[srcOffset] * srcScale; - const m = src[srcOffset + 1] * srcScale; - const y = src[srcOffset + 2] * srcScale; - const k = src[srcOffset + 3] * srcScale; - dest[destOffset] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) + k * (-21.86122147463605 * k - 189.48180835922747); - dest[destOffset + 1] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + k * (-20.737325471181034 * k - 187.80453709719578); - dest[destOffset + 2] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505) + k * (-22.33816807309886 * k - 180.12613974708367); - } - getRgbItem(src, srcOffset, dest, destOffset) { - this.#toRgb(src, srcOffset, 1, dest, destOffset); - } - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - const scale = 1 / ((1 << bits) - 1); - for (let i = 0; i < count; i++) { - this.#toRgb(src, srcOffset, scale, dest, destOffset); - srcOffset += 4; - destOffset += 3 + alpha01; - } - } - getOutputLength(inputLength, alpha01) { - return inputLength / 4 * (3 + alpha01) | 0; - } -} -class CalGrayCS extends ColorSpace { - constructor(whitePoint, blackPoint, gamma) { - super("CalGray", 1); - if (!whitePoint) { - throw new _util.FormatError("WhitePoint missing - required for color space CalGray"); - } - [this.XW, this.YW, this.ZW] = whitePoint; - [this.XB, this.YB, this.ZB] = blackPoint || [0, 0, 0]; - this.G = gamma || 1; - if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { - throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}, no fallback available`); - } - if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { - (0, _util.info)(`Invalid BlackPoint for ${this.name}, falling back to default.`); - this.XB = this.YB = this.ZB = 0; - } - if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) { - (0, _util.warn)(`${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ` + `ZB: ${this.ZB}, only default values are supported.`); - } - if (this.G < 1) { - (0, _util.info)(`Invalid Gamma: ${this.G} for ${this.name}, falling back to default.`); - this.G = 1; - } - } - #toRgb(src, srcOffset, dest, destOffset, scale) { - const A = src[srcOffset] * scale; - const AG = A ** this.G; - const L = this.YW * AG; - const val = Math.max(295.8 * L ** 0.3333333333333333 - 40.8, 0); - dest[destOffset] = val; - dest[destOffset + 1] = val; - dest[destOffset + 2] = val; - } - getRgbItem(src, srcOffset, dest, destOffset) { - this.#toRgb(src, srcOffset, dest, destOffset, 1); - } - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - const scale = 1 / ((1 << bits) - 1); - for (let i = 0; i < count; ++i) { - this.#toRgb(src, srcOffset, dest, destOffset, scale); - srcOffset += 1; - destOffset += 3 + alpha01; - } - } - getOutputLength(inputLength, alpha01) { - return inputLength * (3 + alpha01); - } -} -class CalRGBCS extends ColorSpace { - static #BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]); - static #BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]); - static #SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252]); - static #FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]); - static #tempNormalizeMatrix = new Float32Array(3); - static #tempConvertMatrix1 = new Float32Array(3); - static #tempConvertMatrix2 = new Float32Array(3); - static #DECODE_L_CONSTANT = ((8 + 16) / 116) ** 3 / 8.0; - constructor(whitePoint, blackPoint, gamma, matrix) { - super("CalRGB", 3); - if (!whitePoint) { - throw new _util.FormatError("WhitePoint missing - required for color space CalRGB"); - } - const [XW, YW, ZW] = this.whitePoint = whitePoint; - const [XB, YB, ZB] = this.blackPoint = blackPoint || new Float32Array(3); - [this.GR, this.GG, this.GB] = gamma || new Float32Array([1, 1, 1]); - [this.MXA, this.MYA, this.MZA, this.MXB, this.MYB, this.MZB, this.MXC, this.MYC, this.MZC] = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]); - if (XW < 0 || ZW < 0 || YW !== 1) { - throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}, no fallback available`); - } - if (XB < 0 || YB < 0 || ZB < 0) { - (0, _util.info)(`Invalid BlackPoint for ${this.name} [${XB}, ${YB}, ${ZB}], ` + "falling back to default."); - this.blackPoint = new Float32Array(3); - } - if (this.GR < 0 || this.GG < 0 || this.GB < 0) { - (0, _util.info)(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ` + `${this.name}, falling back to default.`); - this.GR = this.GG = this.GB = 1; - } - } - #matrixProduct(a, b, result) { - result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; - result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2]; - result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2]; - } - #toFlat(sourceWhitePoint, LMS, result) { - result[0] = LMS[0] * 1 / sourceWhitePoint[0]; - result[1] = LMS[1] * 1 / sourceWhitePoint[1]; - result[2] = LMS[2] * 1 / sourceWhitePoint[2]; - } - #toD65(sourceWhitePoint, LMS, result) { - const D65X = 0.95047; - const D65Y = 1; - const D65Z = 1.08883; - result[0] = LMS[0] * D65X / sourceWhitePoint[0]; - result[1] = LMS[1] * D65Y / sourceWhitePoint[1]; - result[2] = LMS[2] * D65Z / sourceWhitePoint[2]; - } - #sRGBTransferFunction(color) { - if (color <= 0.0031308) { - return this.#adjustToRange(0, 1, 12.92 * color); - } - if (color >= 0.99554525) { - return 1; - } - return this.#adjustToRange(0, 1, (1 + 0.055) * color ** (1 / 2.4) - 0.055); - } - #adjustToRange(min, max, value) { - return Math.max(min, Math.min(max, value)); - } - #decodeL(L) { - if (L < 0) { - return -this.#decodeL(-L); - } - if (L > 8.0) { - return ((L + 16) / 116) ** 3; - } - return L * CalRGBCS.#DECODE_L_CONSTANT; - } - #compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) { - if (sourceBlackPoint[0] === 0 && sourceBlackPoint[1] === 0 && sourceBlackPoint[2] === 0) { - result[0] = XYZ_Flat[0]; - result[1] = XYZ_Flat[1]; - result[2] = XYZ_Flat[2]; - return; - } - const zeroDecodeL = this.#decodeL(0); - const X_DST = zeroDecodeL; - const X_SRC = this.#decodeL(sourceBlackPoint[0]); - const Y_DST = zeroDecodeL; - const Y_SRC = this.#decodeL(sourceBlackPoint[1]); - const Z_DST = zeroDecodeL; - const Z_SRC = this.#decodeL(sourceBlackPoint[2]); - const X_Scale = (1 - X_DST) / (1 - X_SRC); - const X_Offset = 1 - X_Scale; - const Y_Scale = (1 - Y_DST) / (1 - Y_SRC); - const Y_Offset = 1 - Y_Scale; - const Z_Scale = (1 - Z_DST) / (1 - Z_SRC); - const Z_Offset = 1 - Z_Scale; - result[0] = XYZ_Flat[0] * X_Scale + X_Offset; - result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset; - result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset; - } - #normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) { - if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) { - result[0] = XYZ_In[0]; - result[1] = XYZ_In[1]; - result[2] = XYZ_In[2]; - return; - } - const LMS = result; - this.#matrixProduct(CalRGBCS.#BRADFORD_SCALE_MATRIX, XYZ_In, LMS); - const LMS_Flat = CalRGBCS.#tempNormalizeMatrix; - this.#toFlat(sourceWhitePoint, LMS, LMS_Flat); - this.#matrixProduct(CalRGBCS.#BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result); - } - #normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) { - const LMS = result; - this.#matrixProduct(CalRGBCS.#BRADFORD_SCALE_MATRIX, XYZ_In, LMS); - const LMS_D65 = CalRGBCS.#tempNormalizeMatrix; - this.#toD65(sourceWhitePoint, LMS, LMS_D65); - this.#matrixProduct(CalRGBCS.#BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result); - } - #toRgb(src, srcOffset, dest, destOffset, scale) { - const A = this.#adjustToRange(0, 1, src[srcOffset] * scale); - const B = this.#adjustToRange(0, 1, src[srcOffset + 1] * scale); - const C = this.#adjustToRange(0, 1, src[srcOffset + 2] * scale); - const AGR = A === 1 ? 1 : A ** this.GR; - const BGG = B === 1 ? 1 : B ** this.GG; - const CGB = C === 1 ? 1 : C ** this.GB; - const X = this.MXA * AGR + this.MXB * BGG + this.MXC * CGB; - const Y = this.MYA * AGR + this.MYB * BGG + this.MYC * CGB; - const Z = this.MZA * AGR + this.MZB * BGG + this.MZC * CGB; - const XYZ = CalRGBCS.#tempConvertMatrix1; - XYZ[0] = X; - XYZ[1] = Y; - XYZ[2] = Z; - const XYZ_Flat = CalRGBCS.#tempConvertMatrix2; - this.#normalizeWhitePointToFlat(this.whitePoint, XYZ, XYZ_Flat); - const XYZ_Black = CalRGBCS.#tempConvertMatrix1; - this.#compensateBlackPoint(this.blackPoint, XYZ_Flat, XYZ_Black); - const XYZ_D65 = CalRGBCS.#tempConvertMatrix2; - this.#normalizeWhitePointToD65(CalRGBCS.#FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65); - const SRGB = CalRGBCS.#tempConvertMatrix1; - this.#matrixProduct(CalRGBCS.#SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB); - dest[destOffset] = this.#sRGBTransferFunction(SRGB[0]) * 255; - dest[destOffset + 1] = this.#sRGBTransferFunction(SRGB[1]) * 255; - dest[destOffset + 2] = this.#sRGBTransferFunction(SRGB[2]) * 255; - } - getRgbItem(src, srcOffset, dest, destOffset) { - this.#toRgb(src, srcOffset, dest, destOffset, 1); - } - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - const scale = 1 / ((1 << bits) - 1); - for (let i = 0; i < count; ++i) { - this.#toRgb(src, srcOffset, dest, destOffset, scale); - srcOffset += 3; - destOffset += 3 + alpha01; - } - } - getOutputLength(inputLength, alpha01) { - return inputLength * (3 + alpha01) / 3 | 0; - } -} -class LabCS extends ColorSpace { - constructor(whitePoint, blackPoint, range) { - super("Lab", 3); - if (!whitePoint) { - throw new _util.FormatError("WhitePoint missing - required for color space Lab"); - } - [this.XW, this.YW, this.ZW] = whitePoint; - [this.amin, this.amax, this.bmin, this.bmax] = range || [-100, 100, -100, 100]; - [this.XB, this.YB, this.ZB] = blackPoint || [0, 0, 0]; - if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { - throw new _util.FormatError("Invalid WhitePoint components, no fallback available"); - } - if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { - (0, _util.info)("Invalid BlackPoint, falling back to default"); - this.XB = this.YB = this.ZB = 0; - } - if (this.amin > this.amax || this.bmin > this.bmax) { - (0, _util.info)("Invalid Range, falling back to defaults"); - this.amin = -100; - this.amax = 100; - this.bmin = -100; - this.bmax = 100; - } - } - #fn_g(x) { - return x >= 6 / 29 ? x ** 3 : 108 / 841 * (x - 4 / 29); - } - #decode(value, high1, low2, high2) { - return low2 + value * (high2 - low2) / high1; - } - #toRgb(src, srcOffset, maxVal, dest, destOffset) { - let Ls = src[srcOffset]; - let as = src[srcOffset + 1]; - let bs = src[srcOffset + 2]; - if (maxVal !== false) { - Ls = this.#decode(Ls, maxVal, 0, 100); - as = this.#decode(as, maxVal, this.amin, this.amax); - bs = this.#decode(bs, maxVal, this.bmin, this.bmax); - } - if (as > this.amax) { - as = this.amax; - } else if (as < this.amin) { - as = this.amin; - } - if (bs > this.bmax) { - bs = this.bmax; - } else if (bs < this.bmin) { - bs = this.bmin; - } - const M = (Ls + 16) / 116; - const L = M + as / 500; - const N = M - bs / 200; - const X = this.XW * this.#fn_g(L); - const Y = this.YW * this.#fn_g(M); - const Z = this.ZW * this.#fn_g(N); - let r, g, b; - if (this.ZW < 1) { - r = X * 3.1339 + Y * -1.617 + Z * -0.4906; - g = X * -0.9785 + Y * 1.916 + Z * 0.0333; - b = X * 0.072 + Y * -0.229 + Z * 1.4057; - } else { - r = X * 3.2406 + Y * -1.5372 + Z * -0.4986; - g = X * -0.9689 + Y * 1.8758 + Z * 0.0415; - b = X * 0.0557 + Y * -0.204 + Z * 1.057; - } - dest[destOffset] = Math.sqrt(r) * 255; - dest[destOffset + 1] = Math.sqrt(g) * 255; - dest[destOffset + 2] = Math.sqrt(b) * 255; - } - getRgbItem(src, srcOffset, dest, destOffset) { - this.#toRgb(src, srcOffset, false, dest, destOffset); - } - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - const maxVal = (1 << bits) - 1; - for (let i = 0; i < count; i++) { - this.#toRgb(src, srcOffset, maxVal, dest, destOffset); - srcOffset += 3; - destOffset += 3 + alpha01; - } - } - getOutputLength(inputLength, alpha01) { - return inputLength * (3 + alpha01) / 3 | 0; - } - isDefaultDecode(decodeMap, bpc) { - return true; - } - get usesZeroToOneRange() { - return (0, _util.shadow)(this, "usesZeroToOneRange", false); - } -} - -/***/ }), -/* 13 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PartialEvaluator = exports.EvaluatorPreprocessor = void 0; -var _util = __w_pdfjs_require__(2); -var _cmap = __w_pdfjs_require__(14); -var _primitives = __w_pdfjs_require__(4); -var _fonts = __w_pdfjs_require__(34); -var _encodings = __w_pdfjs_require__(37); -var _standard_fonts = __w_pdfjs_require__(41); -var _pattern = __w_pdfjs_require__(50); -var _xfa_fonts = __w_pdfjs_require__(51); -var _to_unicode_map = __w_pdfjs_require__(42); -var _function = __w_pdfjs_require__(57); -var _parser = __w_pdfjs_require__(16); -var _image_utils = __w_pdfjs_require__(59); -var _stream = __w_pdfjs_require__(8); -var _base_stream = __w_pdfjs_require__(5); -var _bidi = __w_pdfjs_require__(60); -var _colorspace = __w_pdfjs_require__(12); -var _decode_stream = __w_pdfjs_require__(18); -var _fonts_utils = __w_pdfjs_require__(38); -var _font_substitutions = __w_pdfjs_require__(61); -var _glyphlist = __w_pdfjs_require__(39); -var _metrics = __w_pdfjs_require__(45); -var _unicode = __w_pdfjs_require__(40); -var _image_resizer = __w_pdfjs_require__(62); -var _murmurhash = __w_pdfjs_require__(63); -var _operator_list = __w_pdfjs_require__(64); -var _image = __w_pdfjs_require__(65); -const DefaultPartialEvaluatorOptions = Object.freeze({ - maxImageSize: -1, - disableFontFace: false, - ignoreErrors: false, - isEvalSupported: true, - isOffscreenCanvasSupported: false, - canvasMaxAreaInBytes: -1, - fontExtraProperties: false, - useSystemFonts: true, - cMapUrl: null, - standardFontDataUrl: null -}); -const PatternType = { - TILING: 1, - SHADING: 2 -}; -const TEXT_CHUNK_BATCH_SIZE = 10; -const deferred = Promise.resolve(); -function normalizeBlendMode(value, parsingArray = false) { - if (Array.isArray(value)) { - for (const val of value) { - const maybeBM = normalizeBlendMode(val, true); - if (maybeBM) { - return maybeBM; - } - } - (0, _util.warn)(`Unsupported blend mode Array: ${value}`); - return "source-over"; - } - if (!(value instanceof _primitives.Name)) { - if (parsingArray) { - return null; - } - return "source-over"; - } - switch (value.name) { - case "Normal": - case "Compatible": - return "source-over"; - case "Multiply": - return "multiply"; - case "Screen": - return "screen"; - case "Overlay": - return "overlay"; - case "Darken": - return "darken"; - case "Lighten": - return "lighten"; - case "ColorDodge": - return "color-dodge"; - case "ColorBurn": - return "color-burn"; - case "HardLight": - return "hard-light"; - case "SoftLight": - return "soft-light"; - case "Difference": - return "difference"; - case "Exclusion": - return "exclusion"; - case "Hue": - return "hue"; - case "Saturation": - return "saturation"; - case "Color": - return "color"; - case "Luminosity": - return "luminosity"; - } - if (parsingArray) { - return null; - } - (0, _util.warn)(`Unsupported blend mode: ${value.name}`); - return "source-over"; -} -function incrementCachedImageMaskCount(data) { - if (data.fn === _util.OPS.paintImageMaskXObject && data.args[0]?.count > 0) { - data.args[0].count++; - } -} -class TimeSlotManager { - static TIME_SLOT_DURATION_MS = 20; - static CHECK_TIME_EVERY = 100; - constructor() { - this.reset(); - } - check() { - if (++this.checked < TimeSlotManager.CHECK_TIME_EVERY) { - return false; - } - this.checked = 0; - return this.endTime <= Date.now(); - } - reset() { - this.endTime = Date.now() + TimeSlotManager.TIME_SLOT_DURATION_MS; - this.checked = 0; - } -} -class PartialEvaluator { - constructor({ - xref, - handler, - pageIndex, - idFactory, - fontCache, - builtInCMapCache, - standardFontDataCache, - globalImageCache, - systemFontCache, - options = null - }) { - this.xref = xref; - this.handler = handler; - this.pageIndex = pageIndex; - this.idFactory = idFactory; - this.fontCache = fontCache; - this.builtInCMapCache = builtInCMapCache; - this.standardFontDataCache = standardFontDataCache; - this.globalImageCache = globalImageCache; - this.systemFontCache = systemFontCache; - this.options = options || DefaultPartialEvaluatorOptions; - this.parsingType3Font = false; - this._regionalImageCache = new _image_utils.RegionalImageCache(); - this._fetchBuiltInCMapBound = this.fetchBuiltInCMap.bind(this); - _image_resizer.ImageResizer.setMaxArea(this.options.canvasMaxAreaInBytes); - } - get _pdfFunctionFactory() { - const pdfFunctionFactory = new _function.PDFFunctionFactory({ - xref: this.xref, - isEvalSupported: this.options.isEvalSupported - }); - return (0, _util.shadow)(this, "_pdfFunctionFactory", pdfFunctionFactory); - } - clone(newOptions = null) { - const newEvaluator = Object.create(this); - newEvaluator.options = Object.assign(Object.create(null), this.options, newOptions); - return newEvaluator; - } - hasBlendModes(resources, nonBlendModesSet) { - if (!(resources instanceof _primitives.Dict)) { - return false; - } - if (resources.objId && nonBlendModesSet.has(resources.objId)) { - return false; - } - const processed = new _primitives.RefSet(nonBlendModesSet); - if (resources.objId) { - processed.put(resources.objId); - } - const nodes = [resources], - xref = this.xref; - while (nodes.length) { - const node = nodes.shift(); - const graphicStates = node.get("ExtGState"); - if (graphicStates instanceof _primitives.Dict) { - for (let graphicState of graphicStates.getRawValues()) { - if (graphicState instanceof _primitives.Ref) { - if (processed.has(graphicState)) { - continue; - } - try { - graphicState = xref.fetch(graphicState); - } catch (ex) { - processed.put(graphicState); - (0, _util.info)(`hasBlendModes - ignoring ExtGState: "${ex}".`); - continue; - } - } - if (!(graphicState instanceof _primitives.Dict)) { - continue; - } - if (graphicState.objId) { - processed.put(graphicState.objId); - } - const bm = graphicState.get("BM"); - if (bm instanceof _primitives.Name) { - if (bm.name !== "Normal") { - return true; - } - continue; - } - if (bm !== undefined && Array.isArray(bm)) { - for (const element of bm) { - if (element instanceof _primitives.Name && element.name !== "Normal") { - return true; - } - } - } - } - } - const xObjects = node.get("XObject"); - if (!(xObjects instanceof _primitives.Dict)) { - continue; - } - for (let xObject of xObjects.getRawValues()) { - if (xObject instanceof _primitives.Ref) { - if (processed.has(xObject)) { - continue; - } - try { - xObject = xref.fetch(xObject); - } catch (ex) { - processed.put(xObject); - (0, _util.info)(`hasBlendModes - ignoring XObject: "${ex}".`); - continue; - } - } - if (!(xObject instanceof _base_stream.BaseStream)) { - continue; - } - if (xObject.dict.objId) { - processed.put(xObject.dict.objId); - } - const xResources = xObject.dict.get("Resources"); - if (!(xResources instanceof _primitives.Dict)) { - continue; - } - if (xResources.objId && processed.has(xResources.objId)) { - continue; - } - nodes.push(xResources); - if (xResources.objId) { - processed.put(xResources.objId); - } - } - } - for (const ref of processed) { - nonBlendModesSet.put(ref); - } - return false; - } - async fetchBuiltInCMap(name) { - const cachedData = this.builtInCMapCache.get(name); - if (cachedData) { - return cachedData; - } - let data; - if (this.options.cMapUrl !== null) { - const url = `${this.options.cMapUrl}${name}.bcmap`; - const response = await fetch(url); - if (!response.ok) { - throw new Error(`fetchBuiltInCMap: failed to fetch file "${url}" with "${response.statusText}".`); - } - data = { - cMapData: new Uint8Array(await response.arrayBuffer()), - compressionType: _util.CMapCompressionType.BINARY - }; - } else { - data = await this.handler.sendWithPromise("FetchBuiltInCMap", { - name - }); - } - if (data.compressionType !== _util.CMapCompressionType.NONE) { - this.builtInCMapCache.set(name, data); - } - return data; - } - async fetchStandardFontData(name) { - const cachedData = this.standardFontDataCache.get(name); - if (cachedData) { - return new _stream.Stream(cachedData); - } - if (this.options.useSystemFonts && name !== "Symbol" && name !== "ZapfDingbats") { - return null; - } - const standardFontNameToFileName = (0, _standard_fonts.getFontNameToFileMap)(), - filename = standardFontNameToFileName[name]; - let data; - if (this.options.standardFontDataUrl !== null) { - const url = `${this.options.standardFontDataUrl}${filename}`; - const response = await fetch(url); - if (!response.ok) { - (0, _util.warn)(`fetchStandardFontData: failed to fetch file "${url}" with "${response.statusText}".`); - } else { - data = await response.arrayBuffer(); - } - } else { - try { - data = await this.handler.sendWithPromise("FetchStandardFontData", { - filename - }); - } catch (e) { - (0, _util.warn)(`fetchStandardFontData: failed to fetch file "${filename}" with "${e}".`); - } - } - if (!data) { - return null; - } - this.standardFontDataCache.set(name, data); - return new _stream.Stream(data); - } - async buildFormXObject(resources, xobj, smask, operatorList, task, initialState, localColorSpaceCache) { - const dict = xobj.dict; - const matrix = dict.getArray("Matrix"); - let bbox = dict.getArray("BBox"); - bbox = Array.isArray(bbox) && bbox.length === 4 ? _util.Util.normalizeRect(bbox) : null; - let optionalContent, groupOptions; - if (dict.has("OC")) { - optionalContent = await this.parseMarkedContentProps(dict.get("OC"), resources); - } - if (optionalContent !== undefined) { - operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); - } - const group = dict.get("Group"); - if (group) { - groupOptions = { - matrix, - bbox, - smask, - isolated: false, - knockout: false - }; - const groupSubtype = group.get("S"); - let colorSpace = null; - if ((0, _primitives.isName)(groupSubtype, "Transparency")) { - groupOptions.isolated = group.get("I") || false; - groupOptions.knockout = group.get("K") || false; - if (group.has("CS")) { - const cs = group.getRaw("CS"); - const cachedColorSpace = _colorspace.ColorSpace.getCached(cs, this.xref, localColorSpaceCache); - if (cachedColorSpace) { - colorSpace = cachedColorSpace; - } else { - colorSpace = await this.parseColorSpace({ - cs, - resources, - localColorSpaceCache - }); - } - } - } - if (smask?.backdrop) { - colorSpace ||= _colorspace.ColorSpace.singletons.rgb; - smask.backdrop = colorSpace.getRgb(smask.backdrop, 0); - } - operatorList.addOp(_util.OPS.beginGroup, [groupOptions]); - } - const args = group ? [matrix, null] : [matrix, bbox]; - operatorList.addOp(_util.OPS.paintFormXObjectBegin, args); - return this.getOperatorList({ - stream: xobj, - task, - resources: dict.get("Resources") || resources, - operatorList, - initialState - }).then(function () { - operatorList.addOp(_util.OPS.paintFormXObjectEnd, []); - if (group) { - operatorList.addOp(_util.OPS.endGroup, [groupOptions]); - } - if (optionalContent !== undefined) { - operatorList.addOp(_util.OPS.endMarkedContent, []); - } - }); - } - _sendImgData(objId, imgData, cacheGlobally = false) { - const transfers = imgData ? [imgData.bitmap || imgData.data.buffer] : null; - if (this.parsingType3Font || cacheGlobally) { - return this.handler.send("commonobj", [objId, "Image", imgData], transfers); - } - return this.handler.send("obj", [objId, this.pageIndex, "Image", imgData], transfers); - } - async buildPaintImageXObject({ - resources, - image, - isInline = false, - operatorList, - cacheKey, - localImageCache, - localColorSpaceCache - }) { - const dict = image.dict; - const imageRef = dict.objId; - const w = dict.get("W", "Width"); - const h = dict.get("H", "Height"); - if (!(w && typeof w === "number") || !(h && typeof h === "number")) { - (0, _util.warn)("Image dimensions are missing, or not numbers."); - return; - } - const maxImageSize = this.options.maxImageSize; - if (maxImageSize !== -1 && w * h > maxImageSize) { - const msg = "Image exceeded maximum allowed size and was removed."; - if (this.options.ignoreErrors) { - (0, _util.warn)(msg); - return; - } - throw new Error(msg); - } - let optionalContent; - if (dict.has("OC")) { - optionalContent = await this.parseMarkedContentProps(dict.get("OC"), resources); - } - const imageMask = dict.get("IM", "ImageMask") || false; - let imgData, args; - if (imageMask) { - const interpolate = dict.get("I", "Interpolate"); - const bitStrideLength = w + 7 >> 3; - const imgArray = image.getBytes(bitStrideLength * h); - const decode = dict.getArray("D", "Decode"); - if (this.parsingType3Font) { - imgData = _image.PDFImage.createRawMask({ - imgArray, - width: w, - height: h, - imageIsFromDecodeStream: image instanceof _decode_stream.DecodeStream, - inverseDecode: decode?.[0] > 0, - interpolate - }); - imgData.cached = !!cacheKey; - args = [imgData]; - operatorList.addImageOps(_util.OPS.paintImageMaskXObject, args, optionalContent); - if (cacheKey) { - const cacheData = { - fn: _util.OPS.paintImageMaskXObject, - args, - optionalContent - }; - localImageCache.set(cacheKey, imageRef, cacheData); - if (imageRef) { - this._regionalImageCache.set(null, imageRef, cacheData); - } - } - return; - } - imgData = await _image.PDFImage.createMask({ - imgArray, - width: w, - height: h, - imageIsFromDecodeStream: image instanceof _decode_stream.DecodeStream, - inverseDecode: decode?.[0] > 0, - interpolate, - isOffscreenCanvasSupported: this.options.isOffscreenCanvasSupported - }); - if (imgData.isSingleOpaquePixel) { - operatorList.addImageOps(_util.OPS.paintSolidColorImageMask, [], optionalContent); - if (cacheKey) { - const cacheData = { - fn: _util.OPS.paintSolidColorImageMask, - args: [], - optionalContent - }; - localImageCache.set(cacheKey, imageRef, cacheData); - if (imageRef) { - this._regionalImageCache.set(null, imageRef, cacheData); - } - } - return; - } - const objId = `mask_${this.idFactory.createObjId()}`; - operatorList.addDependency(objId); - this._sendImgData(objId, imgData); - args = [{ - data: objId, - width: imgData.width, - height: imgData.height, - interpolate: imgData.interpolate, - count: 1 - }]; - operatorList.addImageOps(_util.OPS.paintImageMaskXObject, args, optionalContent); - if (cacheKey) { - const cacheData = { - fn: _util.OPS.paintImageMaskXObject, - args, - optionalContent - }; - localImageCache.set(cacheKey, imageRef, cacheData); - if (imageRef) { - this._regionalImageCache.set(null, imageRef, cacheData); - } - } - return; - } - const SMALL_IMAGE_DIMENSIONS = 200; - if (isInline && !dict.has("SMask") && !dict.has("Mask") && w + h < SMALL_IMAGE_DIMENSIONS) { - const imageObj = new _image.PDFImage({ - xref: this.xref, - res: resources, - image, - isInline, - pdfFunctionFactory: this._pdfFunctionFactory, - localColorSpaceCache - }); - imgData = await imageObj.createImageData(true, false); - operatorList.isOffscreenCanvasSupported = this.options.isOffscreenCanvasSupported; - operatorList.addImageOps(_util.OPS.paintInlineImageXObject, [imgData], optionalContent); - return; - } - let objId = `img_${this.idFactory.createObjId()}`, - cacheGlobally = false; - if (this.parsingType3Font) { - objId = `${this.idFactory.getDocId()}_type3_${objId}`; - } else if (imageRef) { - cacheGlobally = this.globalImageCache.shouldCache(imageRef, this.pageIndex); - if (cacheGlobally) { - objId = `${this.idFactory.getDocId()}_${objId}`; - } - } - operatorList.addDependency(objId); - args = [objId, w, h]; - _image.PDFImage.buildImage({ - xref: this.xref, - res: resources, - image, - isInline, - pdfFunctionFactory: this._pdfFunctionFactory, - localColorSpaceCache - }).then(async imageObj => { - imgData = await imageObj.createImageData(false, this.options.isOffscreenCanvasSupported); - if (cacheKey && imageRef && cacheGlobally) { - const length = imgData.bitmap ? imgData.width * imgData.height * 4 : imgData.data.length; - this.globalImageCache.addByteSize(imageRef, length); - } - return this._sendImgData(objId, imgData, cacheGlobally); - }).catch(reason => { - (0, _util.warn)(`Unable to decode image "${objId}": "${reason}".`); - return this._sendImgData(objId, null, cacheGlobally); - }); - operatorList.addImageOps(_util.OPS.paintImageXObject, args, optionalContent); - if (cacheKey) { - const cacheData = { - fn: _util.OPS.paintImageXObject, - args, - optionalContent - }; - localImageCache.set(cacheKey, imageRef, cacheData); - if (imageRef) { - this._regionalImageCache.set(null, imageRef, cacheData); - if (cacheGlobally) { - (0, _util.assert)(!isInline, "Cannot cache an inline image globally."); - this.globalImageCache.setData(imageRef, { - objId, - fn: _util.OPS.paintImageXObject, - args, - optionalContent, - byteSize: 0 - }); - } - } - } - } - handleSMask(smask, resources, operatorList, task, stateManager, localColorSpaceCache) { - const smaskContent = smask.get("G"); - const smaskOptions = { - subtype: smask.get("S").name, - backdrop: smask.get("BC") - }; - const transferObj = smask.get("TR"); - if ((0, _function.isPDFFunction)(transferObj)) { - const transferFn = this._pdfFunctionFactory.create(transferObj); - const transferMap = new Uint8Array(256); - const tmp = new Float32Array(1); - for (let i = 0; i < 256; i++) { - tmp[0] = i / 255; - transferFn(tmp, 0, tmp, 0); - transferMap[i] = tmp[0] * 255 | 0; - } - smaskOptions.transferMap = transferMap; - } - return this.buildFormXObject(resources, smaskContent, smaskOptions, operatorList, task, stateManager.state.clone(), localColorSpaceCache); - } - handleTransferFunction(tr) { - let transferArray; - if (Array.isArray(tr)) { - transferArray = tr; - } else if ((0, _function.isPDFFunction)(tr)) { - transferArray = [tr]; - } else { - return null; - } - const transferMaps = []; - let numFns = 0, - numEffectfulFns = 0; - for (const entry of transferArray) { - const transferObj = this.xref.fetchIfRef(entry); - numFns++; - if ((0, _primitives.isName)(transferObj, "Identity")) { - transferMaps.push(null); - continue; - } else if (!(0, _function.isPDFFunction)(transferObj)) { - return null; - } - const transferFn = this._pdfFunctionFactory.create(transferObj); - const transferMap = new Uint8Array(256), - tmp = new Float32Array(1); - for (let j = 0; j < 256; j++) { - tmp[0] = j / 255; - transferFn(tmp, 0, tmp, 0); - transferMap[j] = tmp[0] * 255 | 0; - } - transferMaps.push(transferMap); - numEffectfulFns++; - } - if (!(numFns === 1 || numFns === 4)) { - return null; - } - if (numEffectfulFns === 0) { - return null; - } - return transferMaps; - } - handleTilingType(fn, color, resources, pattern, patternDict, operatorList, task, localTilingPatternCache) { - const tilingOpList = new _operator_list.OperatorList(); - const patternResources = _primitives.Dict.merge({ - xref: this.xref, - dictArray: [patternDict.get("Resources"), resources] - }); - return this.getOperatorList({ - stream: pattern, - task, - resources: patternResources, - operatorList: tilingOpList - }).then(function () { - const operatorListIR = tilingOpList.getIR(); - const tilingPatternIR = (0, _pattern.getTilingPatternIR)(operatorListIR, patternDict, color); - operatorList.addDependencies(tilingOpList.dependencies); - operatorList.addOp(fn, tilingPatternIR); - if (patternDict.objId) { - localTilingPatternCache.set(null, patternDict.objId, { - operatorListIR, - dict: patternDict - }); - } - }).catch(reason => { - if (reason instanceof _util.AbortException) { - return; - } - if (this.options.ignoreErrors) { - (0, _util.warn)(`handleTilingType - ignoring pattern: "${reason}".`); - return; - } - throw reason; - }); - } - handleSetFont(resources, fontArgs, fontRef, operatorList, task, state, fallbackFontDict = null, cssFontInfo = null) { - const fontName = fontArgs?.[0] instanceof _primitives.Name ? fontArgs[0].name : null; - return this.loadFont(fontName, fontRef, resources, fallbackFontDict, cssFontInfo).then(translated => { - if (!translated.font.isType3Font) { - return translated; - } - return translated.loadType3Data(this, resources, task).then(function () { - operatorList.addDependencies(translated.type3Dependencies); - return translated; - }).catch(reason => { - return new TranslatedFont({ - loadedName: "g_font_error", - font: new _fonts.ErrorFont(`Type3 font load error: ${reason}`), - dict: translated.font, - evaluatorOptions: this.options - }); - }); - }).then(translated => { - state.font = translated.font; - translated.send(this.handler); - return translated.loadedName; - }); - } - handleText(chars, state) { - const font = state.font; - const glyphs = font.charsToGlyphs(chars); - if (font.data) { - const isAddToPathSet = !!(state.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); - if (isAddToPathSet || state.fillColorSpace.name === "Pattern" || font.disableFontFace || this.options.disableFontFace) { - PartialEvaluator.buildFontPaths(font, glyphs, this.handler, this.options); - } - } - return glyphs; - } - ensureStateFont(state) { - if (state.font) { - return; - } - const reason = new _util.FormatError("Missing setFont (Tf) operator before text rendering operator."); - if (this.options.ignoreErrors) { - (0, _util.warn)(`ensureStateFont: "${reason}".`); - return; - } - throw reason; - } - async setGState({ - resources, - gState, - operatorList, - cacheKey, - task, - stateManager, - localGStateCache, - localColorSpaceCache - }) { - const gStateRef = gState.objId; - let isSimpleGState = true; - const gStateObj = []; - let promise = Promise.resolve(); - for (const key of gState.getKeys()) { - const value = gState.get(key); - switch (key) { - case "Type": - break; - case "LW": - case "LC": - case "LJ": - case "ML": - case "D": - case "RI": - case "FL": - case "CA": - case "ca": - gStateObj.push([key, value]); - break; - case "Font": - isSimpleGState = false; - promise = promise.then(() => { - return this.handleSetFont(resources, null, value[0], operatorList, task, stateManager.state).then(function (loadedName) { - operatorList.addDependency(loadedName); - gStateObj.push([key, [loadedName, value[1]]]); - }); - }); - break; - case "BM": - gStateObj.push([key, normalizeBlendMode(value)]); - break; - case "SMask": - if ((0, _primitives.isName)(value, "None")) { - gStateObj.push([key, false]); - break; - } - if (value instanceof _primitives.Dict) { - isSimpleGState = false; - promise = promise.then(() => { - return this.handleSMask(value, resources, operatorList, task, stateManager, localColorSpaceCache); - }); - gStateObj.push([key, true]); - } else { - (0, _util.warn)("Unsupported SMask type"); - } - break; - case "TR": - const transferMaps = this.handleTransferFunction(value); - gStateObj.push([key, transferMaps]); - break; - case "OP": - case "op": - case "OPM": - case "BG": - case "BG2": - case "UCR": - case "UCR2": - case "TR2": - case "HT": - case "SM": - case "SA": - case "AIS": - case "TK": - (0, _util.info)("graphic state operator " + key); - break; - default: - (0, _util.info)("Unknown graphic state operator " + key); - break; - } - } - return promise.then(function () { - if (gStateObj.length > 0) { - operatorList.addOp(_util.OPS.setGState, [gStateObj]); - } - if (isSimpleGState) { - localGStateCache.set(cacheKey, gStateRef, gStateObj); - } - }); - } - loadFont(fontName, font, resources, fallbackFontDict = null, cssFontInfo = null) { - const errorFont = async () => { - return new TranslatedFont({ - loadedName: "g_font_error", - font: new _fonts.ErrorFont(`Font "${fontName}" is not available.`), - dict: font, - evaluatorOptions: this.options - }); - }; - let fontRef; - if (font) { - if (font instanceof _primitives.Ref) { - fontRef = font; - } - } else { - const fontRes = resources.get("Font"); - if (fontRes) { - fontRef = fontRes.getRaw(fontName); - } - } - if (fontRef) { - if (this.parsingType3Font && this.type3FontRefs.has(fontRef)) { - return errorFont(); - } - if (this.fontCache.has(fontRef)) { - return this.fontCache.get(fontRef); - } - font = this.xref.fetchIfRef(fontRef); - } - if (!(font instanceof _primitives.Dict)) { - if (!this.options.ignoreErrors && !this.parsingType3Font) { - (0, _util.warn)(`Font "${fontName}" is not available.`); - return errorFont(); - } - (0, _util.warn)(`Font "${fontName}" is not available -- attempting to fallback to a default font.`); - font = fallbackFontDict || PartialEvaluator.fallbackFontDict; - } - if (font.cacheKey && this.fontCache.has(font.cacheKey)) { - return this.fontCache.get(font.cacheKey); - } - const fontCapability = new _util.PromiseCapability(); - let preEvaluatedFont; - try { - preEvaluatedFont = this.preEvaluateFont(font); - preEvaluatedFont.cssFontInfo = cssFontInfo; - } catch (reason) { - (0, _util.warn)(`loadFont - preEvaluateFont failed: "${reason}".`); - return errorFont(); - } - const { - descriptor, - hash - } = preEvaluatedFont; - const fontRefIsRef = fontRef instanceof _primitives.Ref; - let fontID; - if (hash && descriptor instanceof _primitives.Dict) { - const fontAliases = descriptor.fontAliases ||= Object.create(null); - if (fontAliases[hash]) { - const aliasFontRef = fontAliases[hash].aliasRef; - if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) { - this.fontCache.putAlias(fontRef, aliasFontRef); - return this.fontCache.get(fontRef); - } - } else { - fontAliases[hash] = { - fontID: this.idFactory.createFontId() - }; - } - if (fontRefIsRef) { - fontAliases[hash].aliasRef = fontRef; - } - fontID = fontAliases[hash].fontID; - } else { - fontID = this.idFactory.createFontId(); - } - (0, _util.assert)(fontID?.startsWith("f"), 'The "fontID" must be (correctly) defined.'); - if (fontRefIsRef) { - this.fontCache.put(fontRef, fontCapability.promise); - } else { - font.cacheKey = `cacheKey_${fontID}`; - this.fontCache.put(font.cacheKey, fontCapability.promise); - } - font.loadedName = `${this.idFactory.getDocId()}_${fontID}`; - this.translateFont(preEvaluatedFont).then(translatedFont => { - fontCapability.resolve(new TranslatedFont({ - loadedName: font.loadedName, - font: translatedFont, - dict: font, - evaluatorOptions: this.options - })); - }).catch(reason => { - (0, _util.warn)(`loadFont - translateFont failed: "${reason}".`); - fontCapability.resolve(new TranslatedFont({ - loadedName: font.loadedName, - font: new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason), - dict: font, - evaluatorOptions: this.options - })); - }); - return fontCapability.promise; - } - buildPath(operatorList, fn, args, parsingText = false) { - const lastIndex = operatorList.length - 1; - if (!args) { - args = []; - } - if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== _util.OPS.constructPath) { - if (parsingText) { - (0, _util.warn)(`Encountered path operator "${fn}" inside of a text object.`); - operatorList.addOp(_util.OPS.save, null); - } - let minMax; - switch (fn) { - case _util.OPS.rectangle: - const x = args[0] + args[2]; - const y = args[1] + args[3]; - minMax = [Math.min(args[0], x), Math.max(args[0], x), Math.min(args[1], y), Math.max(args[1], y)]; - break; - case _util.OPS.moveTo: - case _util.OPS.lineTo: - minMax = [args[0], args[0], args[1], args[1]]; - break; - default: - minMax = [Infinity, -Infinity, Infinity, -Infinity]; - break; - } - operatorList.addOp(_util.OPS.constructPath, [[fn], args, minMax]); - if (parsingText) { - operatorList.addOp(_util.OPS.restore, null); - } - } else { - const opArgs = operatorList.argsArray[lastIndex]; - opArgs[0].push(fn); - opArgs[1].push(...args); - const minMax = opArgs[2]; - switch (fn) { - case _util.OPS.rectangle: - const x = args[0] + args[2]; - const y = args[1] + args[3]; - minMax[0] = Math.min(minMax[0], args[0], x); - minMax[1] = Math.max(minMax[1], args[0], x); - minMax[2] = Math.min(minMax[2], args[1], y); - minMax[3] = Math.max(minMax[3], args[1], y); - break; - case _util.OPS.moveTo: - case _util.OPS.lineTo: - minMax[0] = Math.min(minMax[0], args[0]); - minMax[1] = Math.max(minMax[1], args[0]); - minMax[2] = Math.min(minMax[2], args[1]); - minMax[3] = Math.max(minMax[3], args[1]); - break; - } - } - } - parseColorSpace({ - cs, - resources, - localColorSpaceCache - }) { - return _colorspace.ColorSpace.parseAsync({ - cs, - xref: this.xref, - resources, - pdfFunctionFactory: this._pdfFunctionFactory, - localColorSpaceCache - }).catch(reason => { - if (reason instanceof _util.AbortException) { - return null; - } - if (this.options.ignoreErrors) { - (0, _util.warn)(`parseColorSpace - ignoring ColorSpace: "${reason}".`); - return null; - } - throw reason; - }); - } - parseShading({ - shading, - resources, - localColorSpaceCache, - localShadingPatternCache - }) { - let id = localShadingPatternCache.get(shading); - if (!id) { - var shadingFill = _pattern.Pattern.parseShading(shading, this.xref, resources, this._pdfFunctionFactory, localColorSpaceCache); - const patternIR = shadingFill.getIR(); - id = `pattern_${this.idFactory.createObjId()}`; - if (this.parsingType3Font) { - id = `${this.idFactory.getDocId()}_type3_${id}`; - } - localShadingPatternCache.set(shading, id); - if (this.parsingType3Font) { - this.handler.send("commonobj", [id, "Pattern", patternIR]); - } else { - this.handler.send("obj", [id, this.pageIndex, "Pattern", patternIR]); - } - } - return id; - } - handleColorN(operatorList, fn, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache) { - const patternName = args.pop(); - if (patternName instanceof _primitives.Name) { - const rawPattern = patterns.getRaw(patternName.name); - const localTilingPattern = rawPattern instanceof _primitives.Ref && localTilingPatternCache.getByRef(rawPattern); - if (localTilingPattern) { - try { - const color = cs.base ? cs.base.getRgb(args, 0) : null; - const tilingPatternIR = (0, _pattern.getTilingPatternIR)(localTilingPattern.operatorListIR, localTilingPattern.dict, color); - operatorList.addOp(fn, tilingPatternIR); - return undefined; - } catch {} - } - const pattern = this.xref.fetchIfRef(rawPattern); - if (pattern) { - const dict = pattern instanceof _base_stream.BaseStream ? pattern.dict : pattern; - const typeNum = dict.get("PatternType"); - if (typeNum === PatternType.TILING) { - const color = cs.base ? cs.base.getRgb(args, 0) : null; - return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task, localTilingPatternCache); - } else if (typeNum === PatternType.SHADING) { - const shading = dict.get("Shading"); - const matrix = dict.getArray("Matrix"); - const objId = this.parseShading({ - shading, - resources, - localColorSpaceCache, - localShadingPatternCache - }); - operatorList.addOp(fn, ["Shading", objId, matrix]); - return undefined; - } - throw new _util.FormatError(`Unknown PatternType: ${typeNum}`); - } - } - throw new _util.FormatError(`Unknown PatternName: ${patternName}`); - } - _parseVisibilityExpression(array, nestingCounter, currentResult) { - const MAX_NESTING = 10; - if (++nestingCounter > MAX_NESTING) { - (0, _util.warn)("Visibility expression is too deeply nested"); - return; - } - const length = array.length; - const operator = this.xref.fetchIfRef(array[0]); - if (length < 2 || !(operator instanceof _primitives.Name)) { - (0, _util.warn)("Invalid visibility expression"); - return; - } - switch (operator.name) { - case "And": - case "Or": - case "Not": - currentResult.push(operator.name); - break; - default: - (0, _util.warn)(`Invalid operator ${operator.name} in visibility expression`); - return; - } - for (let i = 1; i < length; i++) { - const raw = array[i]; - const object = this.xref.fetchIfRef(raw); - if (Array.isArray(object)) { - const nestedResult = []; - currentResult.push(nestedResult); - this._parseVisibilityExpression(object, nestingCounter, nestedResult); - } else if (raw instanceof _primitives.Ref) { - currentResult.push(raw.toString()); - } - } - } - async parseMarkedContentProps(contentProperties, resources) { - let optionalContent; - if (contentProperties instanceof _primitives.Name) { - const properties = resources.get("Properties"); - optionalContent = properties.get(contentProperties.name); - } else if (contentProperties instanceof _primitives.Dict) { - optionalContent = contentProperties; - } else { - throw new _util.FormatError("Optional content properties malformed."); - } - const optionalContentType = optionalContent.get("Type")?.name; - if (optionalContentType === "OCG") { - return { - type: optionalContentType, - id: optionalContent.objId - }; - } else if (optionalContentType === "OCMD") { - const expression = optionalContent.get("VE"); - if (Array.isArray(expression)) { - const result = []; - this._parseVisibilityExpression(expression, 0, result); - if (result.length > 0) { - return { - type: "OCMD", - expression: result - }; - } - } - const optionalContentGroups = optionalContent.get("OCGs"); - if (Array.isArray(optionalContentGroups) || optionalContentGroups instanceof _primitives.Dict) { - const groupIds = []; - if (Array.isArray(optionalContentGroups)) { - for (const ocg of optionalContentGroups) { - groupIds.push(ocg.toString()); - } - } else { - groupIds.push(optionalContentGroups.objId); - } - return { - type: optionalContentType, - ids: groupIds, - policy: optionalContent.get("P") instanceof _primitives.Name ? optionalContent.get("P").name : null, - expression: null - }; - } else if (optionalContentGroups instanceof _primitives.Ref) { - return { - type: optionalContentType, - id: optionalContentGroups.toString() - }; - } - } - return null; - } - getOperatorList({ - stream, - task, - resources, - operatorList, - initialState = null, - fallbackFontDict = null - }) { - resources ||= _primitives.Dict.empty; - initialState ||= new EvalState(); - if (!operatorList) { - throw new Error('getOperatorList: missing "operatorList" parameter'); - } - const self = this; - const xref = this.xref; - let parsingText = false; - const localImageCache = new _image_utils.LocalImageCache(); - const localColorSpaceCache = new _image_utils.LocalColorSpaceCache(); - const localGStateCache = new _image_utils.LocalGStateCache(); - const localTilingPatternCache = new _image_utils.LocalTilingPatternCache(); - const localShadingPatternCache = new Map(); - const xobjs = resources.get("XObject") || _primitives.Dict.empty; - const patterns = resources.get("Pattern") || _primitives.Dict.empty; - const stateManager = new StateManager(initialState); - const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); - const timeSlotManager = new TimeSlotManager(); - function closePendingRestoreOPS(argument) { - for (let i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) { - operatorList.addOp(_util.OPS.restore, []); - } - } - return new Promise(function promiseBody(resolve, reject) { - const next = function (promise) { - Promise.all([promise, operatorList.ready]).then(function () { - try { - promiseBody(resolve, reject); - } catch (ex) { - reject(ex); - } - }, reject); - }; - task.ensureNotTerminated(); - timeSlotManager.reset(); - const operation = {}; - let stop, i, ii, cs, name, isValidName; - while (!(stop = timeSlotManager.check())) { - operation.args = null; - if (!preprocessor.read(operation)) { - break; - } - let args = operation.args; - let fn = operation.fn; - switch (fn | 0) { - case _util.OPS.paintXObject: - isValidName = args[0] instanceof _primitives.Name; - name = args[0].name; - if (isValidName) { - const localImage = localImageCache.getByName(name); - if (localImage) { - operatorList.addImageOps(localImage.fn, localImage.args, localImage.optionalContent); - incrementCachedImageMaskCount(localImage); - args = null; - continue; - } - } - next(new Promise(function (resolveXObject, rejectXObject) { - if (!isValidName) { - throw new _util.FormatError("XObject must be referred to by name."); - } - let xobj = xobjs.getRaw(name); - if (xobj instanceof _primitives.Ref) { - const localImage = localImageCache.getByRef(xobj) || self._regionalImageCache.getByRef(xobj); - if (localImage) { - operatorList.addImageOps(localImage.fn, localImage.args, localImage.optionalContent); - incrementCachedImageMaskCount(localImage); - resolveXObject(); - return; - } - const globalImage = self.globalImageCache.getData(xobj, self.pageIndex); - if (globalImage) { - operatorList.addDependency(globalImage.objId); - operatorList.addImageOps(globalImage.fn, globalImage.args, globalImage.optionalContent); - resolveXObject(); - return; - } - xobj = xref.fetch(xobj); - } - if (!(xobj instanceof _base_stream.BaseStream)) { - throw new _util.FormatError("XObject should be a stream"); - } - const type = xobj.dict.get("Subtype"); - if (!(type instanceof _primitives.Name)) { - throw new _util.FormatError("XObject should have a Name subtype"); - } - if (type.name === "Form") { - stateManager.save(); - self.buildFormXObject(resources, xobj, null, operatorList, task, stateManager.state.clone(), localColorSpaceCache).then(function () { - stateManager.restore(); - resolveXObject(); - }, rejectXObject); - return; - } else if (type.name === "Image") { - self.buildPaintImageXObject({ - resources, - image: xobj, - operatorList, - cacheKey: name, - localImageCache, - localColorSpaceCache - }).then(resolveXObject, rejectXObject); - return; - } else if (type.name === "PS") { - (0, _util.info)("Ignored XObject subtype PS"); - } else { - throw new _util.FormatError(`Unhandled XObject subtype ${type.name}`); - } - resolveXObject(); - }).catch(function (reason) { - if (reason instanceof _util.AbortException) { - return; - } - if (self.options.ignoreErrors) { - (0, _util.warn)(`getOperatorList - ignoring XObject: "${reason}".`); - return; - } - throw reason; - })); - return; - case _util.OPS.setFont: - var fontSize = args[1]; - next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state, fallbackFontDict).then(function (loadedName) { - operatorList.addDependency(loadedName); - operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]); - })); - return; - case _util.OPS.beginText: - parsingText = true; - break; - case _util.OPS.endText: - parsingText = false; - break; - case _util.OPS.endInlineImage: - var cacheKey = args[0].cacheKey; - if (cacheKey) { - const localImage = localImageCache.getByName(cacheKey); - if (localImage) { - operatorList.addImageOps(localImage.fn, localImage.args, localImage.optionalContent); - incrementCachedImageMaskCount(localImage); - args = null; - continue; - } - } - next(self.buildPaintImageXObject({ - resources, - image: args[0], - isInline: true, - operatorList, - cacheKey, - localImageCache, - localColorSpaceCache - })); - return; - case _util.OPS.showText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - args[0] = self.handleText(args[0], stateManager.state); - break; - case _util.OPS.showSpacedText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - var combinedGlyphs = []; - var state = stateManager.state; - for (const arrItem of args[0]) { - if (typeof arrItem === "string") { - combinedGlyphs.push(...self.handleText(arrItem, state)); - } else if (typeof arrItem === "number") { - combinedGlyphs.push(arrItem); - } - } - args[0] = combinedGlyphs; - fn = _util.OPS.showText; - break; - case _util.OPS.nextLineShowText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - operatorList.addOp(_util.OPS.nextLine); - args[0] = self.handleText(args[0], stateManager.state); - fn = _util.OPS.showText; - break; - case _util.OPS.nextLineSetSpacingShowText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - operatorList.addOp(_util.OPS.nextLine); - operatorList.addOp(_util.OPS.setWordSpacing, [args.shift()]); - operatorList.addOp(_util.OPS.setCharSpacing, [args.shift()]); - args[0] = self.handleText(args[0], stateManager.state); - fn = _util.OPS.showText; - break; - case _util.OPS.setTextRenderingMode: - stateManager.state.textRenderingMode = args[0]; - break; - case _util.OPS.setFillColorSpace: - { - const cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache); - if (cachedColorSpace) { - stateManager.state.fillColorSpace = cachedColorSpace; - continue; - } - next(self.parseColorSpace({ - cs: args[0], - resources, - localColorSpaceCache - }).then(function (colorSpace) { - if (colorSpace) { - stateManager.state.fillColorSpace = colorSpace; - } - })); - return; - } - case _util.OPS.setStrokeColorSpace: - { - const cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache); - if (cachedColorSpace) { - stateManager.state.strokeColorSpace = cachedColorSpace; - continue; - } - next(self.parseColorSpace({ - cs: args[0], - resources, - localColorSpaceCache - }).then(function (colorSpace) { - if (colorSpace) { - stateManager.state.strokeColorSpace = colorSpace; - } - })); - return; - } - case _util.OPS.setFillColor: - cs = stateManager.state.fillColorSpace; - args = cs.getRgb(args, 0); - fn = _util.OPS.setFillRGBColor; - break; - case _util.OPS.setStrokeColor: - cs = stateManager.state.strokeColorSpace; - args = cs.getRgb(args, 0); - fn = _util.OPS.setStrokeRGBColor; - break; - case _util.OPS.setFillGray: - stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.gray; - args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0); - fn = _util.OPS.setFillRGBColor; - break; - case _util.OPS.setStrokeGray: - stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.gray; - args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0); - fn = _util.OPS.setStrokeRGBColor; - break; - case _util.OPS.setFillCMYKColor: - stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.cmyk; - args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0); - fn = _util.OPS.setFillRGBColor; - break; - case _util.OPS.setStrokeCMYKColor: - stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.cmyk; - args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0); - fn = _util.OPS.setStrokeRGBColor; - break; - case _util.OPS.setFillRGBColor: - stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.rgb; - args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0); - break; - case _util.OPS.setStrokeRGBColor: - stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.rgb; - args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0); - break; - case _util.OPS.setFillColorN: - cs = stateManager.state.fillColorSpace; - if (cs.name === "Pattern") { - next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache)); - return; - } - args = cs.getRgb(args, 0); - fn = _util.OPS.setFillRGBColor; - break; - case _util.OPS.setStrokeColorN: - cs = stateManager.state.strokeColorSpace; - if (cs.name === "Pattern") { - next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache)); - return; - } - args = cs.getRgb(args, 0); - fn = _util.OPS.setStrokeRGBColor; - break; - case _util.OPS.shadingFill: - var shadingRes = resources.get("Shading"); - if (!shadingRes) { - throw new _util.FormatError("No shading resource found"); - } - var shading = shadingRes.get(args[0].name); - if (!shading) { - throw new _util.FormatError("No shading object found"); - } - const patternId = self.parseShading({ - shading, - resources, - localColorSpaceCache, - localShadingPatternCache - }); - args = [patternId]; - fn = _util.OPS.shadingFill; - break; - case _util.OPS.setGState: - isValidName = args[0] instanceof _primitives.Name; - name = args[0].name; - if (isValidName) { - const localGStateObj = localGStateCache.getByName(name); - if (localGStateObj) { - if (localGStateObj.length > 0) { - operatorList.addOp(_util.OPS.setGState, [localGStateObj]); - } - args = null; - continue; - } - } - next(new Promise(function (resolveGState, rejectGState) { - if (!isValidName) { - throw new _util.FormatError("GState must be referred to by name."); - } - const extGState = resources.get("ExtGState"); - if (!(extGState instanceof _primitives.Dict)) { - throw new _util.FormatError("ExtGState should be a dictionary."); - } - const gState = extGState.get(name); - if (!(gState instanceof _primitives.Dict)) { - throw new _util.FormatError("GState should be a dictionary."); - } - self.setGState({ - resources, - gState, - operatorList, - cacheKey: name, - task, - stateManager, - localGStateCache, - localColorSpaceCache - }).then(resolveGState, rejectGState); - }).catch(function (reason) { - if (reason instanceof _util.AbortException) { - return; - } - if (self.options.ignoreErrors) { - (0, _util.warn)(`getOperatorList - ignoring ExtGState: "${reason}".`); - return; - } - throw reason; - })); - return; - case _util.OPS.moveTo: - case _util.OPS.lineTo: - case _util.OPS.curveTo: - case _util.OPS.curveTo2: - case _util.OPS.curveTo3: - case _util.OPS.closePath: - case _util.OPS.rectangle: - self.buildPath(operatorList, fn, args, parsingText); - continue; - case _util.OPS.markPoint: - case _util.OPS.markPointProps: - case _util.OPS.beginCompat: - case _util.OPS.endCompat: - continue; - case _util.OPS.beginMarkedContentProps: - if (!(args[0] instanceof _primitives.Name)) { - (0, _util.warn)(`Expected name for beginMarkedContentProps arg0=${args[0]}`); - continue; - } - if (args[0].name === "OC") { - next(self.parseMarkedContentProps(args[1], resources).then(data => { - operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", data]); - }).catch(reason => { - if (reason instanceof _util.AbortException) { - return; - } - if (self.options.ignoreErrors) { - (0, _util.warn)(`getOperatorList - ignoring beginMarkedContentProps: "${reason}".`); - return; - } - throw reason; - })); - return; - } - args = [args[0].name, args[1] instanceof _primitives.Dict ? args[1].get("MCID") : null]; - break; - case _util.OPS.beginMarkedContent: - case _util.OPS.endMarkedContent: - default: - if (args !== null) { - for (i = 0, ii = args.length; i < ii; i++) { - if (args[i] instanceof _primitives.Dict) { - break; - } - } - if (i < ii) { - (0, _util.warn)("getOperatorList - ignoring operator: " + fn); - continue; - } - } - } - operatorList.addOp(fn, args); - } - if (stop) { - next(deferred); - return; - } - closePendingRestoreOPS(); - resolve(); - }).catch(reason => { - if (reason instanceof _util.AbortException) { - return; - } - if (this.options.ignoreErrors) { - (0, _util.warn)(`getOperatorList - ignoring errors during "${task.name}" ` + `task: "${reason}".`); - closePendingRestoreOPS(); - return; - } - throw reason; - }); - } - getTextContent({ - stream, - task, - resources, - stateManager = null, - includeMarkedContent = false, - sink, - seenStyles = new Set(), - viewBox, - markedContentData = null, - disableNormalization = false - }) { - resources ||= _primitives.Dict.empty; - stateManager ||= new StateManager(new TextState()); - if (includeMarkedContent) { - markedContentData ||= { - level: 0 - }; - } - const textContent = { - items: [], - styles: Object.create(null) - }; - const textContentItem = { - initialized: false, - str: [], - totalWidth: 0, - totalHeight: 0, - width: 0, - height: 0, - vertical: false, - prevTransform: null, - textAdvanceScale: 0, - spaceInFlowMin: 0, - spaceInFlowMax: 0, - trackingSpaceMin: Infinity, - negativeSpaceMax: -Infinity, - notASpace: -Infinity, - transform: null, - fontName: null, - hasEOL: false - }; - const twoLastChars = [" ", " "]; - let twoLastCharsPos = 0; - function saveLastChar(char) { - const nextPos = (twoLastCharsPos + 1) % 2; - const ret = twoLastChars[twoLastCharsPos] !== " " && twoLastChars[nextPos] === " "; - twoLastChars[twoLastCharsPos] = char; - twoLastCharsPos = nextPos; - return ret; - } - function shouldAddWhitepsace() { - return twoLastChars[twoLastCharsPos] !== " " && twoLastChars[(twoLastCharsPos + 1) % 2] === " "; - } - function resetLastChars() { - twoLastChars[0] = twoLastChars[1] = " "; - twoLastCharsPos = 0; - } - const TRACKING_SPACE_FACTOR = 0.102; - const NOT_A_SPACE_FACTOR = 0.03; - const NEGATIVE_SPACE_FACTOR = -0.2; - const SPACE_IN_FLOW_MIN_FACTOR = 0.102; - const SPACE_IN_FLOW_MAX_FACTOR = 0.6; - const VERTICAL_SHIFT_RATIO = 0.25; - const self = this; - const xref = this.xref; - const showSpacedTextBuffer = []; - let xobjs = null; - const emptyXObjectCache = new _image_utils.LocalImageCache(); - const emptyGStateCache = new _image_utils.LocalGStateCache(); - const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); - let textState; - function pushWhitespace({ - width = 0, - height = 0, - transform = textContentItem.prevTransform, - fontName = textContentItem.fontName - }) { - textContent.items.push({ - str: " ", - dir: "ltr", - width, - height, - transform, - fontName, - hasEOL: false - }); - } - function getCurrentTextTransform() { - const font = textState.font; - const tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise]; - if (font.isType3Font && (textState.fontSize <= 1 || font.isCharBBox) && !(0, _util.isArrayEqual)(textState.fontMatrix, _util.FONT_IDENTITY_MATRIX)) { - const glyphHeight = font.bbox[3] - font.bbox[1]; - if (glyphHeight > 0) { - tsm[3] *= glyphHeight * textState.fontMatrix[3]; - } - } - return _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm)); - } - function ensureTextContentItem() { - if (textContentItem.initialized) { - return textContentItem; - } - const { - font, - loadedName - } = textState; - if (!seenStyles.has(loadedName)) { - seenStyles.add(loadedName); - textContent.styles[loadedName] = { - fontFamily: font.fallbackName, - ascent: font.ascent, - descent: font.descent, - vertical: font.vertical - }; - } - textContentItem.fontName = loadedName; - const trm = textContentItem.transform = getCurrentTextTransform(); - if (!font.vertical) { - textContentItem.width = textContentItem.totalWidth = 0; - textContentItem.height = textContentItem.totalHeight = Math.hypot(trm[2], trm[3]); - textContentItem.vertical = false; - } else { - textContentItem.width = textContentItem.totalWidth = Math.hypot(trm[0], trm[1]); - textContentItem.height = textContentItem.totalHeight = 0; - textContentItem.vertical = true; - } - const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]); - const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]); - textContentItem.textAdvanceScale = scaleCtmX * scaleLineX; - const { - fontSize - } = textState; - textContentItem.trackingSpaceMin = fontSize * TRACKING_SPACE_FACTOR; - textContentItem.notASpace = fontSize * NOT_A_SPACE_FACTOR; - textContentItem.negativeSpaceMax = fontSize * NEGATIVE_SPACE_FACTOR; - textContentItem.spaceInFlowMin = fontSize * SPACE_IN_FLOW_MIN_FACTOR; - textContentItem.spaceInFlowMax = fontSize * SPACE_IN_FLOW_MAX_FACTOR; - textContentItem.hasEOL = false; - textContentItem.initialized = true; - return textContentItem; - } - function updateAdvanceScale() { - if (!textContentItem.initialized) { - return; - } - const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]); - const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]); - const scaleFactor = scaleCtmX * scaleLineX; - if (scaleFactor === textContentItem.textAdvanceScale) { - return; - } - if (!textContentItem.vertical) { - textContentItem.totalWidth += textContentItem.width * textContentItem.textAdvanceScale; - textContentItem.width = 0; - } else { - textContentItem.totalHeight += textContentItem.height * textContentItem.textAdvanceScale; - textContentItem.height = 0; - } - textContentItem.textAdvanceScale = scaleFactor; - } - function runBidiTransform(textChunk) { - let text = textChunk.str.join(""); - if (!disableNormalization) { - text = (0, _util.normalizeUnicode)(text); - } - const bidiResult = (0, _bidi.bidi)(text, -1, textChunk.vertical); - return { - str: bidiResult.str, - dir: bidiResult.dir, - width: Math.abs(textChunk.totalWidth), - height: Math.abs(textChunk.totalHeight), - transform: textChunk.transform, - fontName: textChunk.fontName, - hasEOL: textChunk.hasEOL - }; - } - function handleSetFont(fontName, fontRef) { - return self.loadFont(fontName, fontRef, resources).then(function (translated) { - if (!translated.font.isType3Font) { - return translated; - } - return translated.loadType3Data(self, resources, task).catch(function () {}).then(function () { - return translated; - }); - }).then(function (translated) { - textState.loadedName = translated.loadedName; - textState.font = translated.font; - textState.fontMatrix = translated.font.fontMatrix || _util.FONT_IDENTITY_MATRIX; - }); - } - function applyInverseRotation(x, y, matrix) { - const scale = Math.hypot(matrix[0], matrix[1]); - return [(matrix[0] * x + matrix[1] * y) / scale, (matrix[2] * x + matrix[3] * y) / scale]; - } - function compareWithLastPosition(glyphWidth) { - const currentTransform = getCurrentTextTransform(); - let posX = currentTransform[4]; - let posY = currentTransform[5]; - if (textState.font?.vertical) { - if (posX < viewBox[0] || posX > viewBox[2] || posY + glyphWidth < viewBox[1] || posY > viewBox[3]) { - return false; - } - } else if (posX + glyphWidth < viewBox[0] || posX > viewBox[2] || posY < viewBox[1] || posY > viewBox[3]) { - return false; - } - if (!textState.font || !textContentItem.prevTransform) { - return true; - } - let lastPosX = textContentItem.prevTransform[4]; - let lastPosY = textContentItem.prevTransform[5]; - if (lastPosX === posX && lastPosY === posY) { - return true; - } - let rotate = -1; - if (currentTransform[0] && currentTransform[1] === 0 && currentTransform[2] === 0) { - rotate = currentTransform[0] > 0 ? 0 : 180; - } else if (currentTransform[1] && currentTransform[0] === 0 && currentTransform[3] === 0) { - rotate = currentTransform[1] > 0 ? 90 : 270; - } - switch (rotate) { - case 0: - break; - case 90: - [posX, posY] = [posY, posX]; - [lastPosX, lastPosY] = [lastPosY, lastPosX]; - break; - case 180: - [posX, posY, lastPosX, lastPosY] = [-posX, -posY, -lastPosX, -lastPosY]; - break; - case 270: - [posX, posY] = [-posY, -posX]; - [lastPosX, lastPosY] = [-lastPosY, -lastPosX]; - break; - default: - [posX, posY] = applyInverseRotation(posX, posY, currentTransform); - [lastPosX, lastPosY] = applyInverseRotation(lastPosX, lastPosY, textContentItem.prevTransform); - } - if (textState.font.vertical) { - const advanceY = (lastPosY - posY) / textContentItem.textAdvanceScale; - const advanceX = posX - lastPosX; - const textOrientation = Math.sign(textContentItem.height); - if (advanceY < textOrientation * textContentItem.negativeSpaceMax) { - if (Math.abs(advanceX) > 0.5 * textContentItem.width) { - appendEOL(); - return true; - } - resetLastChars(); - flushTextContentItem(); - return true; - } - if (Math.abs(advanceX) > textContentItem.width) { - appendEOL(); - return true; - } - if (advanceY <= textOrientation * textContentItem.notASpace) { - resetLastChars(); - } - if (advanceY <= textOrientation * textContentItem.trackingSpaceMin) { - if (shouldAddWhitepsace()) { - resetLastChars(); - flushTextContentItem(); - pushWhitespace({ - height: Math.abs(advanceY) - }); - } else { - textContentItem.height += advanceY; - } - } else if (!addFakeSpaces(advanceY, textContentItem.prevTransform, textOrientation)) { - if (textContentItem.str.length === 0) { - resetLastChars(); - pushWhitespace({ - height: Math.abs(advanceY) - }); - } else { - textContentItem.height += advanceY; - } - } - if (Math.abs(advanceX) > textContentItem.width * VERTICAL_SHIFT_RATIO) { - flushTextContentItem(); - } - return true; - } - const advanceX = (posX - lastPosX) / textContentItem.textAdvanceScale; - const advanceY = posY - lastPosY; - const textOrientation = Math.sign(textContentItem.width); - if (advanceX < textOrientation * textContentItem.negativeSpaceMax) { - if (Math.abs(advanceY) > 0.5 * textContentItem.height) { - appendEOL(); - return true; - } - resetLastChars(); - flushTextContentItem(); - return true; - } - if (Math.abs(advanceY) > textContentItem.height) { - appendEOL(); - return true; - } - if (advanceX <= textOrientation * textContentItem.notASpace) { - resetLastChars(); - } - if (advanceX <= textOrientation * textContentItem.trackingSpaceMin) { - if (shouldAddWhitepsace()) { - resetLastChars(); - flushTextContentItem(); - pushWhitespace({ - width: Math.abs(advanceX) - }); - } else { - textContentItem.width += advanceX; - } - } else if (!addFakeSpaces(advanceX, textContentItem.prevTransform, textOrientation)) { - if (textContentItem.str.length === 0) { - resetLastChars(); - pushWhitespace({ - width: Math.abs(advanceX) - }); - } else { - textContentItem.width += advanceX; - } - } - if (Math.abs(advanceY) > textContentItem.height * VERTICAL_SHIFT_RATIO) { - flushTextContentItem(); - } - return true; - } - function buildTextContentItem({ - chars, - extraSpacing - }) { - const font = textState.font; - if (!chars) { - const charSpacing = textState.charSpacing + extraSpacing; - if (charSpacing) { - if (!font.vertical) { - textState.translateTextMatrix(charSpacing * textState.textHScale, 0); - } else { - textState.translateTextMatrix(0, -charSpacing); - } - } - return; - } - const glyphs = font.charsToGlyphs(chars); - const scale = textState.fontMatrix[0] * textState.fontSize; - for (let i = 0, ii = glyphs.length; i < ii; i++) { - const glyph = glyphs[i]; - const { - category - } = glyph; - if (category.isInvisibleFormatMark) { - continue; - } - let charSpacing = textState.charSpacing + (i + 1 === ii ? extraSpacing : 0); - let glyphWidth = glyph.width; - if (font.vertical) { - glyphWidth = glyph.vmetric ? glyph.vmetric[0] : -glyphWidth; - } - let scaledDim = glyphWidth * scale; - if (category.isWhitespace) { - if (!font.vertical) { - charSpacing += scaledDim + textState.wordSpacing; - textState.translateTextMatrix(charSpacing * textState.textHScale, 0); - } else { - charSpacing += -scaledDim + textState.wordSpacing; - textState.translateTextMatrix(0, -charSpacing); - } - saveLastChar(" "); - continue; - } - if (!category.isZeroWidthDiacritic && !compareWithLastPosition(scaledDim)) { - if (!font.vertical) { - textState.translateTextMatrix(scaledDim * textState.textHScale, 0); - } else { - textState.translateTextMatrix(0, scaledDim); - } - continue; - } - const textChunk = ensureTextContentItem(); - if (category.isZeroWidthDiacritic) { - scaledDim = 0; - } - if (!font.vertical) { - scaledDim *= textState.textHScale; - textState.translateTextMatrix(scaledDim, 0); - textChunk.width += scaledDim; - } else { - textState.translateTextMatrix(0, scaledDim); - scaledDim = Math.abs(scaledDim); - textChunk.height += scaledDim; - } - if (scaledDim) { - textChunk.prevTransform = getCurrentTextTransform(); - } - const glyphUnicode = glyph.unicode; - if (saveLastChar(glyphUnicode)) { - textChunk.str.push(" "); - } - textChunk.str.push(glyphUnicode); - if (charSpacing) { - if (!font.vertical) { - textState.translateTextMatrix(charSpacing * textState.textHScale, 0); - } else { - textState.translateTextMatrix(0, -charSpacing); - } - } - } - } - function appendEOL() { - resetLastChars(); - if (textContentItem.initialized) { - textContentItem.hasEOL = true; - flushTextContentItem(); - } else { - textContent.items.push({ - str: "", - dir: "ltr", - width: 0, - height: 0, - transform: getCurrentTextTransform(), - fontName: textState.loadedName, - hasEOL: true - }); - } - } - function addFakeSpaces(width, transf, textOrientation) { - if (textOrientation * textContentItem.spaceInFlowMin <= width && width <= textOrientation * textContentItem.spaceInFlowMax) { - if (textContentItem.initialized) { - resetLastChars(); - textContentItem.str.push(" "); - } - return false; - } - const fontName = textContentItem.fontName; - let height = 0; - if (textContentItem.vertical) { - height = width; - width = 0; - } - flushTextContentItem(); - resetLastChars(); - pushWhitespace({ - width: Math.abs(width), - height: Math.abs(height), - transform: transf || getCurrentTextTransform(), - fontName - }); - return true; - } - function flushTextContentItem() { - if (!textContentItem.initialized || !textContentItem.str) { - return; - } - if (!textContentItem.vertical) { - textContentItem.totalWidth += textContentItem.width * textContentItem.textAdvanceScale; - } else { - textContentItem.totalHeight += textContentItem.height * textContentItem.textAdvanceScale; - } - textContent.items.push(runBidiTransform(textContentItem)); - textContentItem.initialized = false; - textContentItem.str.length = 0; - } - function enqueueChunk(batch = false) { - const length = textContent.items.length; - if (length === 0) { - return; - } - if (batch && length < TEXT_CHUNK_BATCH_SIZE) { - return; - } - sink.enqueue(textContent, length); - textContent.items = []; - textContent.styles = Object.create(null); - } - const timeSlotManager = new TimeSlotManager(); - return new Promise(function promiseBody(resolve, reject) { - const next = function (promise) { - enqueueChunk(true); - Promise.all([promise, sink.ready]).then(function () { - try { - promiseBody(resolve, reject); - } catch (ex) { - reject(ex); - } - }, reject); - }; - task.ensureNotTerminated(); - timeSlotManager.reset(); - const operation = {}; - let stop, - args = []; - while (!(stop = timeSlotManager.check())) { - args.length = 0; - operation.args = args; - if (!preprocessor.read(operation)) { - break; - } - const previousState = textState; - textState = stateManager.state; - const fn = operation.fn; - args = operation.args; - switch (fn | 0) { - case _util.OPS.setFont: - var fontNameArg = args[0].name, - fontSizeArg = args[1]; - if (textState.font && fontNameArg === textState.fontName && fontSizeArg === textState.fontSize) { - break; - } - flushTextContentItem(); - textState.fontName = fontNameArg; - textState.fontSize = fontSizeArg; - next(handleSetFont(fontNameArg, null)); - return; - case _util.OPS.setTextRise: - textState.textRise = args[0]; - break; - case _util.OPS.setHScale: - textState.textHScale = args[0] / 100; - break; - case _util.OPS.setLeading: - textState.leading = args[0]; - break; - case _util.OPS.moveText: - textState.translateTextLineMatrix(args[0], args[1]); - textState.textMatrix = textState.textLineMatrix.slice(); - break; - case _util.OPS.setLeadingMoveText: - textState.leading = -args[1]; - textState.translateTextLineMatrix(args[0], args[1]); - textState.textMatrix = textState.textLineMatrix.slice(); - break; - case _util.OPS.nextLine: - textState.carriageReturn(); - break; - case _util.OPS.setTextMatrix: - textState.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); - textState.setTextLineMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); - updateAdvanceScale(); - break; - case _util.OPS.setCharSpacing: - textState.charSpacing = args[0]; - break; - case _util.OPS.setWordSpacing: - textState.wordSpacing = args[0]; - break; - case _util.OPS.beginText: - textState.textMatrix = _util.IDENTITY_MATRIX.slice(); - textState.textLineMatrix = _util.IDENTITY_MATRIX.slice(); - break; - case _util.OPS.showSpacedText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - const spaceFactor = (textState.font.vertical ? 1 : -1) * textState.fontSize / 1000; - const elements = args[0]; - for (let i = 0, ii = elements.length; i < ii; i++) { - const item = elements[i]; - if (typeof item === "string") { - showSpacedTextBuffer.push(item); - } else if (typeof item === "number" && item !== 0) { - const str = showSpacedTextBuffer.join(""); - showSpacedTextBuffer.length = 0; - buildTextContentItem({ - chars: str, - extraSpacing: item * spaceFactor - }); - } - } - if (showSpacedTextBuffer.length > 0) { - const str = showSpacedTextBuffer.join(""); - showSpacedTextBuffer.length = 0; - buildTextContentItem({ - chars: str, - extraSpacing: 0 - }); - } - break; - case _util.OPS.showText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - buildTextContentItem({ - chars: args[0], - extraSpacing: 0 - }); - break; - case _util.OPS.nextLineShowText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - textState.carriageReturn(); - buildTextContentItem({ - chars: args[0], - extraSpacing: 0 - }); - break; - case _util.OPS.nextLineSetSpacingShowText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - textState.wordSpacing = args[0]; - textState.charSpacing = args[1]; - textState.carriageReturn(); - buildTextContentItem({ - chars: args[2], - extraSpacing: 0 - }); - break; - case _util.OPS.paintXObject: - flushTextContentItem(); - if (!xobjs) { - xobjs = resources.get("XObject") || _primitives.Dict.empty; - } - var isValidName = args[0] instanceof _primitives.Name; - var name = args[0].name; - if (isValidName && emptyXObjectCache.getByName(name)) { - break; - } - next(new Promise(function (resolveXObject, rejectXObject) { - if (!isValidName) { - throw new _util.FormatError("XObject must be referred to by name."); - } - let xobj = xobjs.getRaw(name); - if (xobj instanceof _primitives.Ref) { - if (emptyXObjectCache.getByRef(xobj)) { - resolveXObject(); - return; - } - const globalImage = self.globalImageCache.getData(xobj, self.pageIndex); - if (globalImage) { - resolveXObject(); - return; - } - xobj = xref.fetch(xobj); - } - if (!(xobj instanceof _base_stream.BaseStream)) { - throw new _util.FormatError("XObject should be a stream"); - } - const type = xobj.dict.get("Subtype"); - if (!(type instanceof _primitives.Name)) { - throw new _util.FormatError("XObject should have a Name subtype"); - } - if (type.name !== "Form") { - emptyXObjectCache.set(name, xobj.dict.objId, true); - resolveXObject(); - return; - } - const currentState = stateManager.state.clone(); - const xObjStateManager = new StateManager(currentState); - const matrix = xobj.dict.getArray("Matrix"); - if (Array.isArray(matrix) && matrix.length === 6) { - xObjStateManager.transform(matrix); - } - enqueueChunk(); - const sinkWrapper = { - enqueueInvoked: false, - enqueue(chunk, size) { - this.enqueueInvoked = true; - sink.enqueue(chunk, size); - }, - get desiredSize() { - return sink.desiredSize; - }, - get ready() { - return sink.ready; - } - }; - self.getTextContent({ - stream: xobj, - task, - resources: xobj.dict.get("Resources") || resources, - stateManager: xObjStateManager, - includeMarkedContent, - sink: sinkWrapper, - seenStyles, - viewBox, - markedContentData, - disableNormalization - }).then(function () { - if (!sinkWrapper.enqueueInvoked) { - emptyXObjectCache.set(name, xobj.dict.objId, true); - } - resolveXObject(); - }, rejectXObject); - }).catch(function (reason) { - if (reason instanceof _util.AbortException) { - return; - } - if (self.options.ignoreErrors) { - (0, _util.warn)(`getTextContent - ignoring XObject: "${reason}".`); - return; - } - throw reason; - })); - return; - case _util.OPS.setGState: - isValidName = args[0] instanceof _primitives.Name; - name = args[0].name; - if (isValidName && emptyGStateCache.getByName(name)) { - break; - } - next(new Promise(function (resolveGState, rejectGState) { - if (!isValidName) { - throw new _util.FormatError("GState must be referred to by name."); - } - const extGState = resources.get("ExtGState"); - if (!(extGState instanceof _primitives.Dict)) { - throw new _util.FormatError("ExtGState should be a dictionary."); - } - const gState = extGState.get(name); - if (!(gState instanceof _primitives.Dict)) { - throw new _util.FormatError("GState should be a dictionary."); - } - const gStateFont = gState.get("Font"); - if (!gStateFont) { - emptyGStateCache.set(name, gState.objId, true); - resolveGState(); - return; - } - flushTextContentItem(); - textState.fontName = null; - textState.fontSize = gStateFont[1]; - handleSetFont(null, gStateFont[0]).then(resolveGState, rejectGState); - }).catch(function (reason) { - if (reason instanceof _util.AbortException) { - return; - } - if (self.options.ignoreErrors) { - (0, _util.warn)(`getTextContent - ignoring ExtGState: "${reason}".`); - return; - } - throw reason; - })); - return; - case _util.OPS.beginMarkedContent: - flushTextContentItem(); - if (includeMarkedContent) { - markedContentData.level++; - textContent.items.push({ - type: "beginMarkedContent", - tag: args[0] instanceof _primitives.Name ? args[0].name : null - }); - } - break; - case _util.OPS.beginMarkedContentProps: - flushTextContentItem(); - if (includeMarkedContent) { - markedContentData.level++; - let mcid = null; - if (args[1] instanceof _primitives.Dict) { - mcid = args[1].get("MCID"); - } - textContent.items.push({ - type: "beginMarkedContentProps", - id: Number.isInteger(mcid) ? `${self.idFactory.getPageObjId()}_mc${mcid}` : null, - tag: args[0] instanceof _primitives.Name ? args[0].name : null - }); - } - break; - case _util.OPS.endMarkedContent: - flushTextContentItem(); - if (includeMarkedContent) { - if (markedContentData.level === 0) { - break; - } - markedContentData.level--; - textContent.items.push({ - type: "endMarkedContent" - }); - } - break; - case _util.OPS.restore: - if (previousState && (previousState.font !== textState.font || previousState.fontSize !== textState.fontSize || previousState.fontName !== textState.fontName)) { - flushTextContentItem(); - } - break; - } - if (textContent.items.length >= sink.desiredSize) { - stop = true; - break; - } - } - if (stop) { - next(deferred); - return; - } - flushTextContentItem(); - enqueueChunk(); - resolve(); - }).catch(reason => { - if (reason instanceof _util.AbortException) { - return; - } - if (this.options.ignoreErrors) { - (0, _util.warn)(`getTextContent - ignoring errors during "${task.name}" ` + `task: "${reason}".`); - flushTextContentItem(); - enqueueChunk(); - return; - } - throw reason; - }); - } - extractDataStructures(dict, baseDict, properties) { - const xref = this.xref; - let cidToGidBytes; - const toUnicodePromise = this.readToUnicode(properties.toUnicode || dict.get("ToUnicode") || baseDict.get("ToUnicode")); - if (properties.composite) { - const cidSystemInfo = dict.get("CIDSystemInfo"); - if (cidSystemInfo instanceof _primitives.Dict) { - properties.cidSystemInfo = { - registry: (0, _util.stringToPDFString)(cidSystemInfo.get("Registry")), - ordering: (0, _util.stringToPDFString)(cidSystemInfo.get("Ordering")), - supplement: cidSystemInfo.get("Supplement") - }; - } - try { - const cidToGidMap = dict.get("CIDToGIDMap"); - if (cidToGidMap instanceof _base_stream.BaseStream) { - cidToGidBytes = cidToGidMap.getBytes(); - } - } catch (ex) { - if (!this.options.ignoreErrors) { - throw ex; - } - (0, _util.warn)(`extractDataStructures - ignoring CIDToGIDMap data: "${ex}".`); - } - } - const differences = []; - let baseEncodingName = null; - let encoding; - if (dict.has("Encoding")) { - encoding = dict.get("Encoding"); - if (encoding instanceof _primitives.Dict) { - baseEncodingName = encoding.get("BaseEncoding"); - baseEncodingName = baseEncodingName instanceof _primitives.Name ? baseEncodingName.name : null; - if (encoding.has("Differences")) { - const diffEncoding = encoding.get("Differences"); - let index = 0; - for (const entry of diffEncoding) { - const data = xref.fetchIfRef(entry); - if (typeof data === "number") { - index = data; - } else if (data instanceof _primitives.Name) { - differences[index++] = data.name; - } else { - throw new _util.FormatError(`Invalid entry in 'Differences' array: ${data}`); - } - } - } - } else if (encoding instanceof _primitives.Name) { - baseEncodingName = encoding.name; - } else { - const msg = "Encoding is not a Name nor a Dict"; - if (!this.options.ignoreErrors) { - throw new _util.FormatError(msg); - } - (0, _util.warn)(msg); - } - if (baseEncodingName !== "MacRomanEncoding" && baseEncodingName !== "MacExpertEncoding" && baseEncodingName !== "WinAnsiEncoding") { - baseEncodingName = null; - } - } - const nonEmbeddedFont = !properties.file || properties.isInternalFont, - isSymbolsFontName = (0, _standard_fonts.getSymbolsFonts)()[properties.name]; - if (baseEncodingName && nonEmbeddedFont && isSymbolsFontName) { - baseEncodingName = null; - } - if (baseEncodingName) { - properties.defaultEncoding = (0, _encodings.getEncoding)(baseEncodingName); - } else { - const isSymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Symbolic); - const isNonsymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Nonsymbolic); - encoding = _encodings.StandardEncoding; - if (properties.type === "TrueType" && !isNonsymbolicFont) { - encoding = _encodings.WinAnsiEncoding; - } - if (isSymbolicFont || isSymbolsFontName) { - encoding = _encodings.MacRomanEncoding; - if (nonEmbeddedFont) { - if (/Symbol/i.test(properties.name)) { - encoding = _encodings.SymbolSetEncoding; - } else if (/Dingbats/i.test(properties.name)) { - encoding = _encodings.ZapfDingbatsEncoding; - } else if (/Wingdings/i.test(properties.name)) { - encoding = _encodings.WinAnsiEncoding; - } - } - } - properties.defaultEncoding = encoding; - } - properties.differences = differences; - properties.baseEncodingName = baseEncodingName; - properties.hasEncoding = !!baseEncodingName || differences.length > 0; - properties.dict = dict; - return toUnicodePromise.then(readToUnicode => { - properties.toUnicode = readToUnicode; - return this.buildToUnicode(properties); - }).then(builtToUnicode => { - properties.toUnicode = builtToUnicode; - if (cidToGidBytes) { - properties.cidToGidMap = this.readCidToGidMap(cidToGidBytes, builtToUnicode); - } - return properties; - }); - } - _simpleFontToUnicode(properties, forceGlyphs = false) { - (0, _util.assert)(!properties.composite, "Must be a simple font."); - const toUnicode = []; - const encoding = properties.defaultEncoding.slice(); - const baseEncodingName = properties.baseEncodingName; - const differences = properties.differences; - for (const charcode in differences) { - const glyphName = differences[charcode]; - if (glyphName === ".notdef") { - continue; - } - encoding[charcode] = glyphName; - } - const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - for (const charcode in encoding) { - let glyphName = encoding[charcode]; - if (glyphName === "") { - continue; - } - let unicode = glyphsUnicodeMap[glyphName]; - if (unicode !== undefined) { - toUnicode[charcode] = String.fromCharCode(unicode); - continue; - } - let code = 0; - switch (glyphName[0]) { - case "G": - if (glyphName.length === 3) { - code = parseInt(glyphName.substring(1), 16); - } - break; - case "g": - if (glyphName.length === 5) { - code = parseInt(glyphName.substring(1), 16); - } - break; - case "C": - case "c": - if (glyphName.length >= 3 && glyphName.length <= 4) { - const codeStr = glyphName.substring(1); - if (forceGlyphs) { - code = parseInt(codeStr, 16); - break; - } - code = +codeStr; - if (Number.isNaN(code) && Number.isInteger(parseInt(codeStr, 16))) { - return this._simpleFontToUnicode(properties, true); - } - } - break; - case "u": - unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); - if (unicode !== -1) { - code = unicode; - } - break; - default: - switch (glyphName) { - case "f_h": - case "f_t": - case "T_h": - toUnicode[charcode] = glyphName.replaceAll("_", ""); - continue; - } - break; - } - if (code > 0 && code <= 0x10ffff && Number.isInteger(code)) { - if (baseEncodingName && code === +charcode) { - const baseEncoding = (0, _encodings.getEncoding)(baseEncodingName); - if (baseEncoding && (glyphName = baseEncoding[charcode])) { - toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]); - continue; - } - } - toUnicode[charcode] = String.fromCodePoint(code); - } - } - return toUnicode; - } - async buildToUnicode(properties) { - properties.hasIncludedToUnicodeMap = properties.toUnicode?.length > 0; - if (properties.hasIncludedToUnicodeMap) { - if (!properties.composite && properties.hasEncoding) { - properties.fallbackToUnicode = this._simpleFontToUnicode(properties); - } - return properties.toUnicode; - } - if (!properties.composite) { - return new _to_unicode_map.ToUnicodeMap(this._simpleFontToUnicode(properties)); - } - if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof _cmap.IdentityCMap) || properties.cidSystemInfo.registry === "Adobe" && (properties.cidSystemInfo.ordering === "GB1" || properties.cidSystemInfo.ordering === "CNS1" || properties.cidSystemInfo.ordering === "Japan1" || properties.cidSystemInfo.ordering === "Korea1"))) { - const { - registry, - ordering - } = properties.cidSystemInfo; - const ucs2CMapName = _primitives.Name.get(`${registry}-${ordering}-UCS2`); - const ucs2CMap = await _cmap.CMapFactory.create({ - encoding: ucs2CMapName, - fetchBuiltInCMap: this._fetchBuiltInCMapBound, - useCMap: null - }); - const toUnicode = [], - buf = []; - properties.cMap.forEach(function (charcode, cid) { - if (cid > 0xffff) { - throw new _util.FormatError("Max size of CID is 65,535"); - } - const ucs2 = ucs2CMap.lookup(cid); - if (ucs2) { - buf.length = 0; - for (let i = 0, ii = ucs2.length; i < ii; i += 2) { - buf.push((ucs2.charCodeAt(i) << 8) + ucs2.charCodeAt(i + 1)); - } - toUnicode[charcode] = String.fromCharCode(...buf); - } - }); - return new _to_unicode_map.ToUnicodeMap(toUnicode); - } - return new _to_unicode_map.IdentityToUnicodeMap(properties.firstChar, properties.lastChar); - } - readToUnicode(cmapObj) { - if (!cmapObj) { - return Promise.resolve(null); - } - if (cmapObj instanceof _primitives.Name) { - return _cmap.CMapFactory.create({ - encoding: cmapObj, - fetchBuiltInCMap: this._fetchBuiltInCMapBound, - useCMap: null - }).then(function (cmap) { - if (cmap instanceof _cmap.IdentityCMap) { - return new _to_unicode_map.IdentityToUnicodeMap(0, 0xffff); - } - return new _to_unicode_map.ToUnicodeMap(cmap.getMap()); - }); - } else if (cmapObj instanceof _base_stream.BaseStream) { - return _cmap.CMapFactory.create({ - encoding: cmapObj, - fetchBuiltInCMap: this._fetchBuiltInCMapBound, - useCMap: null - }).then(function (cmap) { - if (cmap instanceof _cmap.IdentityCMap) { - return new _to_unicode_map.IdentityToUnicodeMap(0, 0xffff); - } - const map = new Array(cmap.length); - cmap.forEach(function (charCode, token) { - if (typeof token === "number") { - map[charCode] = String.fromCodePoint(token); - return; - } - const str = []; - for (let k = 0; k < token.length; k += 2) { - const w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); - if ((w1 & 0xf800) !== 0xd800) { - str.push(w1); - continue; - } - k += 2; - const w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); - str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000); - } - map[charCode] = String.fromCodePoint(...str); - }); - return new _to_unicode_map.ToUnicodeMap(map); - }, reason => { - if (reason instanceof _util.AbortException) { - return null; - } - if (this.options.ignoreErrors) { - (0, _util.warn)(`readToUnicode - ignoring ToUnicode data: "${reason}".`); - return null; - } - throw reason; - }); - } - return Promise.resolve(null); - } - readCidToGidMap(glyphsData, toUnicode) { - const result = []; - for (let j = 0, jj = glyphsData.length; j < jj; j++) { - const glyphID = glyphsData[j++] << 8 | glyphsData[j]; - const code = j >> 1; - if (glyphID === 0 && !toUnicode.has(code)) { - continue; - } - result[code] = glyphID; - } - return result; - } - extractWidths(dict, descriptor, properties) { - const xref = this.xref; - let glyphsWidths = []; - let defaultWidth = 0; - const glyphsVMetrics = []; - let defaultVMetrics; - let i, ii, j, jj, start, code, widths; - if (properties.composite) { - defaultWidth = dict.has("DW") ? dict.get("DW") : 1000; - widths = dict.get("W"); - if (widths) { - for (i = 0, ii = widths.length; i < ii; i++) { - start = xref.fetchIfRef(widths[i++]); - code = xref.fetchIfRef(widths[i]); - if (Array.isArray(code)) { - for (j = 0, jj = code.length; j < jj; j++) { - glyphsWidths[start++] = xref.fetchIfRef(code[j]); - } - } else { - const width = xref.fetchIfRef(widths[++i]); - for (j = start; j <= code; j++) { - glyphsWidths[j] = width; - } - } - } - } - if (properties.vertical) { - let vmetrics = dict.getArray("DW2") || [880, -1000]; - defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]]; - vmetrics = dict.get("W2"); - if (vmetrics) { - for (i = 0, ii = vmetrics.length; i < ii; i++) { - start = xref.fetchIfRef(vmetrics[i++]); - code = xref.fetchIfRef(vmetrics[i]); - if (Array.isArray(code)) { - for (j = 0, jj = code.length; j < jj; j++) { - glyphsVMetrics[start++] = [xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j])]; - } - } else { - const vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])]; - for (j = start; j <= code; j++) { - glyphsVMetrics[j] = vmetric; - } - } - } - } - } - } else { - const firstChar = properties.firstChar; - widths = dict.get("Widths"); - if (widths) { - j = firstChar; - for (i = 0, ii = widths.length; i < ii; i++) { - glyphsWidths[j++] = xref.fetchIfRef(widths[i]); - } - defaultWidth = parseFloat(descriptor.get("MissingWidth")) || 0; - } else { - const baseFontName = dict.get("BaseFont"); - if (baseFontName instanceof _primitives.Name) { - const metrics = this.getBaseFontMetrics(baseFontName.name); - glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties); - defaultWidth = metrics.defaultWidth; - } - } - } - let isMonospace = true; - let firstWidth = defaultWidth; - for (const glyph in glyphsWidths) { - const glyphWidth = glyphsWidths[glyph]; - if (!glyphWidth) { - continue; - } - if (!firstWidth) { - firstWidth = glyphWidth; - continue; - } - if (firstWidth !== glyphWidth) { - isMonospace = false; - break; - } - } - if (isMonospace) { - properties.flags |= _fonts_utils.FontFlags.FixedPitch; - } else { - properties.flags &= ~_fonts_utils.FontFlags.FixedPitch; - } - properties.defaultWidth = defaultWidth; - properties.widths = glyphsWidths; - properties.defaultVMetrics = defaultVMetrics; - properties.vmetrics = glyphsVMetrics; - } - isSerifFont(baseFontName) { - const fontNameWoStyle = baseFontName.split("-")[0]; - return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || /serif/gi.test(fontNameWoStyle); - } - getBaseFontMetrics(name) { - let defaultWidth = 0; - let widths = Object.create(null); - let monospace = false; - const stdFontMap = (0, _standard_fonts.getStdFontMap)(); - let lookupName = stdFontMap[name] || name; - const Metrics = (0, _metrics.getMetrics)(); - if (!(lookupName in Metrics)) { - lookupName = this.isSerifFont(name) ? "Times-Roman" : "Helvetica"; - } - const glyphWidths = Metrics[lookupName]; - if (typeof glyphWidths === "number") { - defaultWidth = glyphWidths; - monospace = true; - } else { - widths = glyphWidths(); - } - return { - defaultWidth, - monospace, - widths - }; - } - buildCharCodeToWidth(widthsByGlyphName, properties) { - const widths = Object.create(null); - const differences = properties.differences; - const encoding = properties.defaultEncoding; - for (let charCode = 0; charCode < 256; charCode++) { - if (charCode in differences && widthsByGlyphName[differences[charCode]]) { - widths[charCode] = widthsByGlyphName[differences[charCode]]; - continue; - } - if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) { - widths[charCode] = widthsByGlyphName[encoding[charCode]]; - continue; - } - } - return widths; - } - preEvaluateFont(dict) { - const baseDict = dict; - let type = dict.get("Subtype"); - if (!(type instanceof _primitives.Name)) { - throw new _util.FormatError("invalid font Subtype"); - } - let composite = false; - let hash, toUnicode; - if (type.name === "Type0") { - const df = dict.get("DescendantFonts"); - if (!df) { - throw new _util.FormatError("Descendant fonts are not specified"); - } - dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df; - if (!(dict instanceof _primitives.Dict)) { - throw new _util.FormatError("Descendant font is not a dictionary."); - } - type = dict.get("Subtype"); - if (!(type instanceof _primitives.Name)) { - throw new _util.FormatError("invalid font Subtype"); - } - composite = true; - } - const firstChar = dict.get("FirstChar") || 0, - lastChar = dict.get("LastChar") || (composite ? 0xffff : 0xff); - const descriptor = dict.get("FontDescriptor"); - if (descriptor) { - hash = new _murmurhash.MurmurHash3_64(); - const encoding = baseDict.getRaw("Encoding"); - if (encoding instanceof _primitives.Name) { - hash.update(encoding.name); - } else if (encoding instanceof _primitives.Ref) { - hash.update(encoding.toString()); - } else if (encoding instanceof _primitives.Dict) { - for (const entry of encoding.getRawValues()) { - if (entry instanceof _primitives.Name) { - hash.update(entry.name); - } else if (entry instanceof _primitives.Ref) { - hash.update(entry.toString()); - } else if (Array.isArray(entry)) { - const diffLength = entry.length, - diffBuf = new Array(diffLength); - for (let j = 0; j < diffLength; j++) { - const diffEntry = entry[j]; - if (diffEntry instanceof _primitives.Name) { - diffBuf[j] = diffEntry.name; - } else if (typeof diffEntry === "number" || diffEntry instanceof _primitives.Ref) { - diffBuf[j] = diffEntry.toString(); - } - } - hash.update(diffBuf.join()); - } - } - } - hash.update(`${firstChar}-${lastChar}`); - toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode"); - if (toUnicode instanceof _base_stream.BaseStream) { - const stream = toUnicode.str || toUnicode; - const uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start); - hash.update(uint8array); - } else if (toUnicode instanceof _primitives.Name) { - hash.update(toUnicode.name); - } - const widths = dict.get("Widths") || baseDict.get("Widths"); - if (Array.isArray(widths)) { - const widthsBuf = []; - for (const entry of widths) { - if (typeof entry === "number" || entry instanceof _primitives.Ref) { - widthsBuf.push(entry.toString()); - } - } - hash.update(widthsBuf.join()); - } - if (composite) { - hash.update("compositeFont"); - const compositeWidths = dict.get("W") || baseDict.get("W"); - if (Array.isArray(compositeWidths)) { - const widthsBuf = []; - for (const entry of compositeWidths) { - if (typeof entry === "number" || entry instanceof _primitives.Ref) { - widthsBuf.push(entry.toString()); - } else if (Array.isArray(entry)) { - const subWidthsBuf = []; - for (const element of entry) { - if (typeof element === "number" || element instanceof _primitives.Ref) { - subWidthsBuf.push(element.toString()); - } - } - widthsBuf.push(`[${subWidthsBuf.join()}]`); - } - } - hash.update(widthsBuf.join()); - } - const cidToGidMap = dict.getRaw("CIDToGIDMap") || baseDict.getRaw("CIDToGIDMap"); - if (cidToGidMap instanceof _primitives.Name) { - hash.update(cidToGidMap.name); - } else if (cidToGidMap instanceof _primitives.Ref) { - hash.update(cidToGidMap.toString()); - } else if (cidToGidMap instanceof _base_stream.BaseStream) { - hash.update(cidToGidMap.peekBytes()); - } - } - } - return { - descriptor, - dict, - baseDict, - composite, - type: type.name, - firstChar, - lastChar, - toUnicode, - hash: hash ? hash.hexdigest() : "" - }; - } - async translateFont({ - descriptor, - dict, - baseDict, - composite, - type, - firstChar, - lastChar, - toUnicode, - cssFontInfo - }) { - const isType3Font = type === "Type3"; - let properties; - if (!descriptor) { - if (isType3Font) { - descriptor = new _primitives.Dict(null); - descriptor.set("FontName", _primitives.Name.get(type)); - descriptor.set("FontBBox", dict.getArray("FontBBox") || [0, 0, 0, 0]); - } else { - let baseFontName = dict.get("BaseFont"); - if (!(baseFontName instanceof _primitives.Name)) { - throw new _util.FormatError("Base font is not specified"); - } - baseFontName = baseFontName.name.replaceAll(/[,_]/g, "-"); - const metrics = this.getBaseFontMetrics(baseFontName); - const fontNameWoStyle = baseFontName.split("-")[0]; - const flags = (this.isSerifFont(fontNameWoStyle) ? _fonts_utils.FontFlags.Serif : 0) | (metrics.monospace ? _fonts_utils.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts_utils.FontFlags.Symbolic : _fonts_utils.FontFlags.Nonsymbolic); - properties = { - type, - name: baseFontName, - loadedName: baseDict.loadedName, - systemFontInfo: null, - widths: metrics.widths, - defaultWidth: metrics.defaultWidth, - isSimulatedFlags: true, - flags, - firstChar, - lastChar, - toUnicode, - xHeight: 0, - capHeight: 0, - italicAngle: 0, - isType3Font - }; - const widths = dict.get("Widths"); - const standardFontName = (0, _standard_fonts.getStandardFontName)(baseFontName); - let file = null; - if (standardFontName) { - file = await this.fetchStandardFontData(standardFontName); - properties.isInternalFont = !!file; - } - if (!properties.isInternalFont && this.options.useSystemFonts) { - properties.systemFontInfo = (0, _font_substitutions.getFontSubstitution)(this.systemFontCache, this.idFactory, this.options.standardFontDataUrl, baseFontName, standardFontName); - } - return this.extractDataStructures(dict, dict, properties).then(newProperties => { - if (widths) { - const glyphWidths = []; - let j = firstChar; - for (const width of widths) { - glyphWidths[j++] = this.xref.fetchIfRef(width); - } - newProperties.widths = glyphWidths; - } else { - newProperties.widths = this.buildCharCodeToWidth(metrics.widths, newProperties); - } - return new _fonts.Font(baseFontName, file, newProperties); - }); - } - } - let fontName = descriptor.get("FontName"); - let baseFont = dict.get("BaseFont"); - if (typeof fontName === "string") { - fontName = _primitives.Name.get(fontName); - } - if (typeof baseFont === "string") { - baseFont = _primitives.Name.get(baseFont); - } - const fontNameStr = fontName?.name; - const baseFontStr = baseFont?.name; - if (!isType3Font && fontNameStr !== baseFontStr) { - (0, _util.info)(`The FontDescriptor's FontName is "${fontNameStr}" but ` + `should be the same as the Font's BaseFont "${baseFontStr}".`); - if (fontNameStr && baseFontStr && (baseFontStr.startsWith(fontNameStr) || !(0, _standard_fonts.isKnownFontName)(fontNameStr) && (0, _standard_fonts.isKnownFontName)(baseFontStr))) { - fontName = null; - } - } - fontName ||= baseFont; - if (!(fontName instanceof _primitives.Name)) { - throw new _util.FormatError("invalid font name"); - } - let fontFile, subtype, length1, length2, length3; - try { - fontFile = descriptor.get("FontFile", "FontFile2", "FontFile3"); - } catch (ex) { - if (!this.options.ignoreErrors) { - throw ex; - } - (0, _util.warn)(`translateFont - fetching "${fontName.name}" font file: "${ex}".`); - fontFile = new _stream.NullStream(); - } - let isInternalFont = false; - let glyphScaleFactors = null; - let systemFontInfo = null; - if (fontFile) { - if (fontFile.dict) { - const subtypeEntry = fontFile.dict.get("Subtype"); - if (subtypeEntry instanceof _primitives.Name) { - subtype = subtypeEntry.name; - } - length1 = fontFile.dict.get("Length1"); - length2 = fontFile.dict.get("Length2"); - length3 = fontFile.dict.get("Length3"); - } - } else if (cssFontInfo) { - const standardFontName = (0, _xfa_fonts.getXfaFontName)(fontName.name); - if (standardFontName) { - cssFontInfo.fontFamily = `${cssFontInfo.fontFamily}-PdfJS-XFA`; - cssFontInfo.metrics = standardFontName.metrics || null; - glyphScaleFactors = standardFontName.factors || null; - fontFile = await this.fetchStandardFontData(standardFontName.name); - isInternalFont = !!fontFile; - baseDict = dict = (0, _xfa_fonts.getXfaFontDict)(fontName.name); - composite = true; - } - } else if (!isType3Font) { - const standardFontName = (0, _standard_fonts.getStandardFontName)(fontName.name); - if (standardFontName) { - fontFile = await this.fetchStandardFontData(standardFontName); - isInternalFont = !!fontFile; - } - if (!isInternalFont && this.options.useSystemFonts) { - systemFontInfo = (0, _font_substitutions.getFontSubstitution)(this.systemFontCache, this.idFactory, this.options.standardFontDataUrl, fontName.name, standardFontName); - } - } - properties = { - type, - name: fontName.name, - subtype, - file: fontFile, - length1, - length2, - length3, - isInternalFont, - loadedName: baseDict.loadedName, - composite, - fixedPitch: false, - fontMatrix: dict.getArray("FontMatrix") || _util.FONT_IDENTITY_MATRIX, - firstChar, - lastChar, - toUnicode, - bbox: descriptor.getArray("FontBBox") || dict.getArray("FontBBox"), - ascent: descriptor.get("Ascent"), - descent: descriptor.get("Descent"), - xHeight: descriptor.get("XHeight") || 0, - capHeight: descriptor.get("CapHeight") || 0, - flags: descriptor.get("Flags"), - italicAngle: descriptor.get("ItalicAngle") || 0, - isType3Font, - cssFontInfo, - scaleFactors: glyphScaleFactors, - systemFontInfo - }; - if (composite) { - const cidEncoding = baseDict.get("Encoding"); - if (cidEncoding instanceof _primitives.Name) { - properties.cidEncoding = cidEncoding.name; - } - const cMap = await _cmap.CMapFactory.create({ - encoding: cidEncoding, - fetchBuiltInCMap: this._fetchBuiltInCMapBound, - useCMap: null - }); - properties.cMap = cMap; - properties.vertical = properties.cMap.vertical; - } - return this.extractDataStructures(dict, baseDict, properties).then(newProperties => { - this.extractWidths(dict, descriptor, newProperties); - return new _fonts.Font(fontName.name, fontFile, newProperties); - }); - } - static buildFontPaths(font, glyphs, handler, evaluatorOptions) { - function buildPath(fontChar) { - const glyphName = `${font.loadedName}_path_${fontChar}`; - try { - if (font.renderer.hasBuiltPath(fontChar)) { - return; - } - handler.send("commonobj", [glyphName, "FontPath", font.renderer.getPathJs(fontChar)]); - } catch (reason) { - if (evaluatorOptions.ignoreErrors) { - (0, _util.warn)(`buildFontPaths - ignoring ${glyphName} glyph: "${reason}".`); - return; - } - throw reason; - } - } - for (const glyph of glyphs) { - buildPath(glyph.fontChar); - const accent = glyph.accent; - if (accent?.fontChar) { - buildPath(accent.fontChar); - } - } - } - static get fallbackFontDict() { - const dict = new _primitives.Dict(); - dict.set("BaseFont", _primitives.Name.get("Helvetica")); - dict.set("Type", _primitives.Name.get("FallbackType")); - dict.set("Subtype", _primitives.Name.get("FallbackType")); - dict.set("Encoding", _primitives.Name.get("WinAnsiEncoding")); - return (0, _util.shadow)(this, "fallbackFontDict", dict); - } -} -exports.PartialEvaluator = PartialEvaluator; -class TranslatedFont { - constructor({ - loadedName, - font, - dict, - evaluatorOptions - }) { - this.loadedName = loadedName; - this.font = font; - this.dict = dict; - this._evaluatorOptions = evaluatorOptions || DefaultPartialEvaluatorOptions; - this.type3Loaded = null; - this.type3Dependencies = font.isType3Font ? new Set() : null; - this.sent = false; - } - send(handler) { - if (this.sent) { - return; - } - this.sent = true; - handler.send("commonobj", [this.loadedName, "Font", this.font.exportData(this._evaluatorOptions.fontExtraProperties)]); - } - fallback(handler) { - if (!this.font.data) { - return; - } - this.font.disableFontFace = true; - PartialEvaluator.buildFontPaths(this.font, this.font.glyphCacheValues, handler, this._evaluatorOptions); - } - loadType3Data(evaluator, resources, task) { - if (this.type3Loaded) { - return this.type3Loaded; - } - if (!this.font.isType3Font) { - throw new Error("Must be a Type3 font."); - } - const type3Evaluator = evaluator.clone({ - ignoreErrors: false - }); - type3Evaluator.parsingType3Font = true; - const type3FontRefs = new _primitives.RefSet(evaluator.type3FontRefs); - if (this.dict.objId && !type3FontRefs.has(this.dict.objId)) { - type3FontRefs.put(this.dict.objId); - } - type3Evaluator.type3FontRefs = type3FontRefs; - const translatedFont = this.font, - type3Dependencies = this.type3Dependencies; - let loadCharProcsPromise = Promise.resolve(); - const charProcs = this.dict.get("CharProcs"); - const fontResources = this.dict.get("Resources") || resources; - const charProcOperatorList = Object.create(null); - const fontBBox = _util.Util.normalizeRect(translatedFont.bbox || [0, 0, 0, 0]), - width = fontBBox[2] - fontBBox[0], - height = fontBBox[3] - fontBBox[1]; - const fontBBoxSize = Math.hypot(width, height); - for (const key of charProcs.getKeys()) { - loadCharProcsPromise = loadCharProcsPromise.then(() => { - const glyphStream = charProcs.get(key); - const operatorList = new _operator_list.OperatorList(); - return type3Evaluator.getOperatorList({ - stream: glyphStream, - task, - resources: fontResources, - operatorList - }).then(() => { - if (operatorList.fnArray[0] === _util.OPS.setCharWidthAndBounds) { - this._removeType3ColorOperators(operatorList, fontBBoxSize); - } - charProcOperatorList[key] = operatorList.getIR(); - for (const dependency of operatorList.dependencies) { - type3Dependencies.add(dependency); - } - }).catch(function (reason) { - (0, _util.warn)(`Type3 font resource "${key}" is not available.`); - const dummyOperatorList = new _operator_list.OperatorList(); - charProcOperatorList[key] = dummyOperatorList.getIR(); - }); - }); - } - this.type3Loaded = loadCharProcsPromise.then(() => { - translatedFont.charProcOperatorList = charProcOperatorList; - if (this._bbox) { - translatedFont.isCharBBox = true; - translatedFont.bbox = this._bbox; - } - }); - return this.type3Loaded; - } - _removeType3ColorOperators(operatorList, fontBBoxSize = NaN) { - const charBBox = _util.Util.normalizeRect(operatorList.argsArray[0].slice(2)), - width = charBBox[2] - charBBox[0], - height = charBBox[3] - charBBox[1]; - const charBBoxSize = Math.hypot(width, height); - if (width === 0 || height === 0) { - operatorList.fnArray.splice(0, 1); - operatorList.argsArray.splice(0, 1); - } else if (fontBBoxSize === 0 || Math.round(charBBoxSize / fontBBoxSize) >= 10) { - if (!this._bbox) { - this._bbox = [Infinity, Infinity, -Infinity, -Infinity]; - } - this._bbox[0] = Math.min(this._bbox[0], charBBox[0]); - this._bbox[1] = Math.min(this._bbox[1], charBBox[1]); - this._bbox[2] = Math.max(this._bbox[2], charBBox[2]); - this._bbox[3] = Math.max(this._bbox[3], charBBox[3]); - } - let i = 0, - ii = operatorList.length; - while (i < ii) { - switch (operatorList.fnArray[i]) { - case _util.OPS.setCharWidthAndBounds: - break; - case _util.OPS.setStrokeColorSpace: - case _util.OPS.setFillColorSpace: - case _util.OPS.setStrokeColor: - case _util.OPS.setStrokeColorN: - case _util.OPS.setFillColor: - case _util.OPS.setFillColorN: - case _util.OPS.setStrokeGray: - case _util.OPS.setFillGray: - case _util.OPS.setStrokeRGBColor: - case _util.OPS.setFillRGBColor: - case _util.OPS.setStrokeCMYKColor: - case _util.OPS.setFillCMYKColor: - case _util.OPS.shadingFill: - case _util.OPS.setRenderingIntent: - operatorList.fnArray.splice(i, 1); - operatorList.argsArray.splice(i, 1); - ii--; - continue; - case _util.OPS.setGState: - const [gStateObj] = operatorList.argsArray[i]; - let j = 0, - jj = gStateObj.length; - while (j < jj) { - const [gStateKey] = gStateObj[j]; - switch (gStateKey) { - case "TR": - case "TR2": - case "HT": - case "BG": - case "BG2": - case "UCR": - case "UCR2": - gStateObj.splice(j, 1); - jj--; - continue; - } - j++; - } - break; - } - i++; - } - } -} -class StateManager { - constructor(initialState = new EvalState()) { - this.state = initialState; - this.stateStack = []; - } - save() { - const old = this.state; - this.stateStack.push(this.state); - this.state = old.clone(); - } - restore() { - const prev = this.stateStack.pop(); - if (prev) { - this.state = prev; - } - } - transform(args) { - this.state.ctm = _util.Util.transform(this.state.ctm, args); - } -} -class TextState { - constructor() { - this.ctm = new Float32Array(_util.IDENTITY_MATRIX); - this.fontName = null; - this.fontSize = 0; - this.loadedName = null; - this.font = null; - this.fontMatrix = _util.FONT_IDENTITY_MATRIX; - this.textMatrix = _util.IDENTITY_MATRIX.slice(); - this.textLineMatrix = _util.IDENTITY_MATRIX.slice(); - this.charSpacing = 0; - this.wordSpacing = 0; - this.leading = 0; - this.textHScale = 1; - this.textRise = 0; - } - setTextMatrix(a, b, c, d, e, f) { - const m = this.textMatrix; - m[0] = a; - m[1] = b; - m[2] = c; - m[3] = d; - m[4] = e; - m[5] = f; - } - setTextLineMatrix(a, b, c, d, e, f) { - const m = this.textLineMatrix; - m[0] = a; - m[1] = b; - m[2] = c; - m[3] = d; - m[4] = e; - m[5] = f; - } - translateTextMatrix(x, y) { - const m = this.textMatrix; - m[4] = m[0] * x + m[2] * y + m[4]; - m[5] = m[1] * x + m[3] * y + m[5]; - } - translateTextLineMatrix(x, y) { - const m = this.textLineMatrix; - m[4] = m[0] * x + m[2] * y + m[4]; - m[5] = m[1] * x + m[3] * y + m[5]; - } - carriageReturn() { - this.translateTextLineMatrix(0, -this.leading); - this.textMatrix = this.textLineMatrix.slice(); - } - clone() { - const clone = Object.create(this); - clone.textMatrix = this.textMatrix.slice(); - clone.textLineMatrix = this.textLineMatrix.slice(); - clone.fontMatrix = this.fontMatrix.slice(); - return clone; - } -} -class EvalState { - constructor() { - this.ctm = new Float32Array(_util.IDENTITY_MATRIX); - this.font = null; - this.textRenderingMode = _util.TextRenderingMode.FILL; - this.fillColorSpace = _colorspace.ColorSpace.singletons.gray; - this.strokeColorSpace = _colorspace.ColorSpace.singletons.gray; - } - clone() { - return Object.create(this); - } -} -class EvaluatorPreprocessor { - static get opMap() { - return (0, _util.shadow)(this, "opMap", { - w: { - id: _util.OPS.setLineWidth, - numArgs: 1, - variableArgs: false - }, - J: { - id: _util.OPS.setLineCap, - numArgs: 1, - variableArgs: false - }, - j: { - id: _util.OPS.setLineJoin, - numArgs: 1, - variableArgs: false - }, - M: { - id: _util.OPS.setMiterLimit, - numArgs: 1, - variableArgs: false - }, - d: { - id: _util.OPS.setDash, - numArgs: 2, - variableArgs: false - }, - ri: { - id: _util.OPS.setRenderingIntent, - numArgs: 1, - variableArgs: false - }, - i: { - id: _util.OPS.setFlatness, - numArgs: 1, - variableArgs: false - }, - gs: { - id: _util.OPS.setGState, - numArgs: 1, - variableArgs: false - }, - q: { - id: _util.OPS.save, - numArgs: 0, - variableArgs: false - }, - Q: { - id: _util.OPS.restore, - numArgs: 0, - variableArgs: false - }, - cm: { - id: _util.OPS.transform, - numArgs: 6, - variableArgs: false - }, - m: { - id: _util.OPS.moveTo, - numArgs: 2, - variableArgs: false - }, - l: { - id: _util.OPS.lineTo, - numArgs: 2, - variableArgs: false - }, - c: { - id: _util.OPS.curveTo, - numArgs: 6, - variableArgs: false - }, - v: { - id: _util.OPS.curveTo2, - numArgs: 4, - variableArgs: false - }, - y: { - id: _util.OPS.curveTo3, - numArgs: 4, - variableArgs: false - }, - h: { - id: _util.OPS.closePath, - numArgs: 0, - variableArgs: false - }, - re: { - id: _util.OPS.rectangle, - numArgs: 4, - variableArgs: false - }, - S: { - id: _util.OPS.stroke, - numArgs: 0, - variableArgs: false - }, - s: { - id: _util.OPS.closeStroke, - numArgs: 0, - variableArgs: false - }, - f: { - id: _util.OPS.fill, - numArgs: 0, - variableArgs: false - }, - F: { - id: _util.OPS.fill, - numArgs: 0, - variableArgs: false - }, - "f*": { - id: _util.OPS.eoFill, - numArgs: 0, - variableArgs: false - }, - B: { - id: _util.OPS.fillStroke, - numArgs: 0, - variableArgs: false - }, - "B*": { - id: _util.OPS.eoFillStroke, - numArgs: 0, - variableArgs: false - }, - b: { - id: _util.OPS.closeFillStroke, - numArgs: 0, - variableArgs: false - }, - "b*": { - id: _util.OPS.closeEOFillStroke, - numArgs: 0, - variableArgs: false - }, - n: { - id: _util.OPS.endPath, - numArgs: 0, - variableArgs: false - }, - W: { - id: _util.OPS.clip, - numArgs: 0, - variableArgs: false - }, - "W*": { - id: _util.OPS.eoClip, - numArgs: 0, - variableArgs: false - }, - BT: { - id: _util.OPS.beginText, - numArgs: 0, - variableArgs: false - }, - ET: { - id: _util.OPS.endText, - numArgs: 0, - variableArgs: false - }, - Tc: { - id: _util.OPS.setCharSpacing, - numArgs: 1, - variableArgs: false - }, - Tw: { - id: _util.OPS.setWordSpacing, - numArgs: 1, - variableArgs: false - }, - Tz: { - id: _util.OPS.setHScale, - numArgs: 1, - variableArgs: false - }, - TL: { - id: _util.OPS.setLeading, - numArgs: 1, - variableArgs: false - }, - Tf: { - id: _util.OPS.setFont, - numArgs: 2, - variableArgs: false - }, - Tr: { - id: _util.OPS.setTextRenderingMode, - numArgs: 1, - variableArgs: false - }, - Ts: { - id: _util.OPS.setTextRise, - numArgs: 1, - variableArgs: false - }, - Td: { - id: _util.OPS.moveText, - numArgs: 2, - variableArgs: false - }, - TD: { - id: _util.OPS.setLeadingMoveText, - numArgs: 2, - variableArgs: false - }, - Tm: { - id: _util.OPS.setTextMatrix, - numArgs: 6, - variableArgs: false - }, - "T*": { - id: _util.OPS.nextLine, - numArgs: 0, - variableArgs: false - }, - Tj: { - id: _util.OPS.showText, - numArgs: 1, - variableArgs: false - }, - TJ: { - id: _util.OPS.showSpacedText, - numArgs: 1, - variableArgs: false - }, - "'": { - id: _util.OPS.nextLineShowText, - numArgs: 1, - variableArgs: false - }, - '"': { - id: _util.OPS.nextLineSetSpacingShowText, - numArgs: 3, - variableArgs: false - }, - d0: { - id: _util.OPS.setCharWidth, - numArgs: 2, - variableArgs: false - }, - d1: { - id: _util.OPS.setCharWidthAndBounds, - numArgs: 6, - variableArgs: false - }, - CS: { - id: _util.OPS.setStrokeColorSpace, - numArgs: 1, - variableArgs: false - }, - cs: { - id: _util.OPS.setFillColorSpace, - numArgs: 1, - variableArgs: false - }, - SC: { - id: _util.OPS.setStrokeColor, - numArgs: 4, - variableArgs: true - }, - SCN: { - id: _util.OPS.setStrokeColorN, - numArgs: 33, - variableArgs: true - }, - sc: { - id: _util.OPS.setFillColor, - numArgs: 4, - variableArgs: true - }, - scn: { - id: _util.OPS.setFillColorN, - numArgs: 33, - variableArgs: true - }, - G: { - id: _util.OPS.setStrokeGray, - numArgs: 1, - variableArgs: false - }, - g: { - id: _util.OPS.setFillGray, - numArgs: 1, - variableArgs: false - }, - RG: { - id: _util.OPS.setStrokeRGBColor, - numArgs: 3, - variableArgs: false - }, - rg: { - id: _util.OPS.setFillRGBColor, - numArgs: 3, - variableArgs: false - }, - K: { - id: _util.OPS.setStrokeCMYKColor, - numArgs: 4, - variableArgs: false - }, - k: { - id: _util.OPS.setFillCMYKColor, - numArgs: 4, - variableArgs: false - }, - sh: { - id: _util.OPS.shadingFill, - numArgs: 1, - variableArgs: false - }, - BI: { - id: _util.OPS.beginInlineImage, - numArgs: 0, - variableArgs: false - }, - ID: { - id: _util.OPS.beginImageData, - numArgs: 0, - variableArgs: false - }, - EI: { - id: _util.OPS.endInlineImage, - numArgs: 1, - variableArgs: false - }, - Do: { - id: _util.OPS.paintXObject, - numArgs: 1, - variableArgs: false - }, - MP: { - id: _util.OPS.markPoint, - numArgs: 1, - variableArgs: false - }, - DP: { - id: _util.OPS.markPointProps, - numArgs: 2, - variableArgs: false - }, - BMC: { - id: _util.OPS.beginMarkedContent, - numArgs: 1, - variableArgs: false - }, - BDC: { - id: _util.OPS.beginMarkedContentProps, - numArgs: 2, - variableArgs: false - }, - EMC: { - id: _util.OPS.endMarkedContent, - numArgs: 0, - variableArgs: false - }, - BX: { - id: _util.OPS.beginCompat, - numArgs: 0, - variableArgs: false - }, - EX: { - id: _util.OPS.endCompat, - numArgs: 0, - variableArgs: false - }, - BM: null, - BD: null, - true: null, - fa: null, - fal: null, - fals: null, - false: null, - nu: null, - nul: null, - null: null - }); - } - static MAX_INVALID_PATH_OPS = 10; - constructor(stream, xref, stateManager = new StateManager()) { - this.parser = new _parser.Parser({ - lexer: new _parser.Lexer(stream, EvaluatorPreprocessor.opMap), - xref - }); - this.stateManager = stateManager; - this.nonProcessedArgs = []; - this._isPathOp = false; - this._numInvalidPathOPS = 0; - } - get savedStatesDepth() { - return this.stateManager.stateStack.length; - } - read(operation) { - let args = operation.args; - while (true) { - const obj = this.parser.getObj(); - if (obj instanceof _primitives.Cmd) { - const cmd = obj.cmd; - const opSpec = EvaluatorPreprocessor.opMap[cmd]; - if (!opSpec) { - (0, _util.warn)(`Unknown command "${cmd}".`); - continue; - } - const fn = opSpec.id; - const numArgs = opSpec.numArgs; - let argsLength = args !== null ? args.length : 0; - if (!this._isPathOp) { - this._numInvalidPathOPS = 0; - } - this._isPathOp = fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath; - if (!opSpec.variableArgs) { - if (argsLength !== numArgs) { - const nonProcessedArgs = this.nonProcessedArgs; - while (argsLength > numArgs) { - nonProcessedArgs.push(args.shift()); - argsLength--; - } - while (argsLength < numArgs && nonProcessedArgs.length !== 0) { - if (args === null) { - args = []; - } - args.unshift(nonProcessedArgs.pop()); - argsLength++; - } - } - if (argsLength < numArgs) { - const partialMsg = `command ${cmd}: expected ${numArgs} args, ` + `but received ${argsLength} args.`; - if (this._isPathOp && ++this._numInvalidPathOPS > EvaluatorPreprocessor.MAX_INVALID_PATH_OPS) { - throw new _util.FormatError(`Invalid ${partialMsg}`); - } - (0, _util.warn)(`Skipping ${partialMsg}`); - if (args !== null) { - args.length = 0; - } - continue; - } - } else if (argsLength > numArgs) { - (0, _util.info)(`Command ${cmd}: expected [0, ${numArgs}] args, ` + `but received ${argsLength} args.`); - } - this.preprocessCommand(fn, args); - operation.fn = fn; - operation.args = args; - return true; - } - if (obj === _primitives.EOF) { - return false; - } - if (obj !== null) { - if (args === null) { - args = []; - } - args.push(obj); - if (args.length > 33) { - throw new _util.FormatError("Too many arguments"); - } - } - } - } - preprocessCommand(fn, args) { - switch (fn | 0) { - case _util.OPS.save: - this.stateManager.save(); - break; - case _util.OPS.restore: - this.stateManager.restore(); - break; - case _util.OPS.transform: - this.stateManager.transform(args); - break; - } - } -} -exports.EvaluatorPreprocessor = EvaluatorPreprocessor; - -/***/ }), -/* 14 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.IdentityCMap = exports.CMapFactory = exports.CMap = void 0; -var _util = __w_pdfjs_require__(2); -var _primitives = __w_pdfjs_require__(4); -var _base_stream = __w_pdfjs_require__(5); -var _binary_cmap = __w_pdfjs_require__(15); -var _parser = __w_pdfjs_require__(16); -var _core_utils = __w_pdfjs_require__(3); -var _stream = __w_pdfjs_require__(8); -const BUILT_IN_CMAPS = ["Adobe-GB1-UCS2", "Adobe-CNS1-UCS2", "Adobe-Japan1-UCS2", "Adobe-Korea1-UCS2", "78-EUC-H", "78-EUC-V", "78-H", "78-RKSJ-H", "78-RKSJ-V", "78-V", "78ms-RKSJ-H", "78ms-RKSJ-V", "83pv-RKSJ-H", "90ms-RKSJ-H", "90ms-RKSJ-V", "90msp-RKSJ-H", "90msp-RKSJ-V", "90pv-RKSJ-H", "90pv-RKSJ-V", "Add-H", "Add-RKSJ-H", "Add-RKSJ-V", "Add-V", "Adobe-CNS1-0", "Adobe-CNS1-1", "Adobe-CNS1-2", "Adobe-CNS1-3", "Adobe-CNS1-4", "Adobe-CNS1-5", "Adobe-CNS1-6", "Adobe-GB1-0", "Adobe-GB1-1", "Adobe-GB1-2", "Adobe-GB1-3", "Adobe-GB1-4", "Adobe-GB1-5", "Adobe-Japan1-0", "Adobe-Japan1-1", "Adobe-Japan1-2", "Adobe-Japan1-3", "Adobe-Japan1-4", "Adobe-Japan1-5", "Adobe-Japan1-6", "Adobe-Korea1-0", "Adobe-Korea1-1", "Adobe-Korea1-2", "B5-H", "B5-V", "B5pc-H", "B5pc-V", "CNS-EUC-H", "CNS-EUC-V", "CNS1-H", "CNS1-V", "CNS2-H", "CNS2-V", "ETHK-B5-H", "ETHK-B5-V", "ETen-B5-H", "ETen-B5-V", "ETenms-B5-H", "ETenms-B5-V", "EUC-H", "EUC-V", "Ext-H", "Ext-RKSJ-H", "Ext-RKSJ-V", "Ext-V", "GB-EUC-H", "GB-EUC-V", "GB-H", "GB-V", "GBK-EUC-H", "GBK-EUC-V", "GBK2K-H", "GBK2K-V", "GBKp-EUC-H", "GBKp-EUC-V", "GBT-EUC-H", "GBT-EUC-V", "GBT-H", "GBT-V", "GBTpc-EUC-H", "GBTpc-EUC-V", "GBpc-EUC-H", "GBpc-EUC-V", "H", "HKdla-B5-H", "HKdla-B5-V", "HKdlb-B5-H", "HKdlb-B5-V", "HKgccs-B5-H", "HKgccs-B5-V", "HKm314-B5-H", "HKm314-B5-V", "HKm471-B5-H", "HKm471-B5-V", "HKscs-B5-H", "HKscs-B5-V", "Hankaku", "Hiragana", "KSC-EUC-H", "KSC-EUC-V", "KSC-H", "KSC-Johab-H", "KSC-Johab-V", "KSC-V", "KSCms-UHC-H", "KSCms-UHC-HW-H", "KSCms-UHC-HW-V", "KSCms-UHC-V", "KSCpc-EUC-H", "KSCpc-EUC-V", "Katakana", "NWP-H", "NWP-V", "RKSJ-H", "RKSJ-V", "Roman", "UniCNS-UCS2-H", "UniCNS-UCS2-V", "UniCNS-UTF16-H", "UniCNS-UTF16-V", "UniCNS-UTF32-H", "UniCNS-UTF32-V", "UniCNS-UTF8-H", "UniCNS-UTF8-V", "UniGB-UCS2-H", "UniGB-UCS2-V", "UniGB-UTF16-H", "UniGB-UTF16-V", "UniGB-UTF32-H", "UniGB-UTF32-V", "UniGB-UTF8-H", "UniGB-UTF8-V", "UniJIS-UCS2-H", "UniJIS-UCS2-HW-H", "UniJIS-UCS2-HW-V", "UniJIS-UCS2-V", "UniJIS-UTF16-H", "UniJIS-UTF16-V", "UniJIS-UTF32-H", "UniJIS-UTF32-V", "UniJIS-UTF8-H", "UniJIS-UTF8-V", "UniJIS2004-UTF16-H", "UniJIS2004-UTF16-V", "UniJIS2004-UTF32-H", "UniJIS2004-UTF32-V", "UniJIS2004-UTF8-H", "UniJIS2004-UTF8-V", "UniJISPro-UCS2-HW-V", "UniJISPro-UCS2-V", "UniJISPro-UTF8-V", "UniJISX0213-UTF32-H", "UniJISX0213-UTF32-V", "UniJISX02132004-UTF32-H", "UniJISX02132004-UTF32-V", "UniKS-UCS2-H", "UniKS-UCS2-V", "UniKS-UTF16-H", "UniKS-UTF16-V", "UniKS-UTF32-H", "UniKS-UTF32-V", "UniKS-UTF8-H", "UniKS-UTF8-V", "V", "WP-Symbol"]; -const MAX_MAP_RANGE = 2 ** 24 - 1; -class CMap { - constructor(builtInCMap = false) { - this.codespaceRanges = [[], [], [], []]; - this.numCodespaceRanges = 0; - this._map = []; - this.name = ""; - this.vertical = false; - this.useCMap = null; - this.builtInCMap = builtInCMap; - } - addCodespaceRange(n, low, high) { - this.codespaceRanges[n - 1].push(low, high); - this.numCodespaceRanges++; - } - mapCidRange(low, high, dstLow) { - if (high - low > MAX_MAP_RANGE) { - throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE."); - } - while (low <= high) { - this._map[low++] = dstLow++; - } - } - mapBfRange(low, high, dstLow) { - if (high - low > MAX_MAP_RANGE) { - throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE."); - } - const lastByte = dstLow.length - 1; - while (low <= high) { - this._map[low++] = dstLow; - const nextCharCode = dstLow.charCodeAt(lastByte) + 1; - if (nextCharCode > 0xff) { - dstLow = dstLow.substring(0, lastByte - 1) + String.fromCharCode(dstLow.charCodeAt(lastByte - 1) + 1) + "\x00"; - continue; - } - dstLow = dstLow.substring(0, lastByte) + String.fromCharCode(nextCharCode); - } - } - mapBfRangeToArray(low, high, array) { - if (high - low > MAX_MAP_RANGE) { - throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE."); - } - const ii = array.length; - let i = 0; - while (low <= high && i < ii) { - this._map[low] = array[i++]; - ++low; - } - } - mapOne(src, dst) { - this._map[src] = dst; - } - lookup(code) { - return this._map[code]; - } - contains(code) { - return this._map[code] !== undefined; - } - forEach(callback) { - const map = this._map; - const length = map.length; - if (length <= 0x10000) { - for (let i = 0; i < length; i++) { - if (map[i] !== undefined) { - callback(i, map[i]); - } - } - } else { - for (const i in map) { - callback(i, map[i]); - } - } - } - charCodeOf(value) { - const map = this._map; - if (map.length <= 0x10000) { - return map.indexOf(value); - } - for (const charCode in map) { - if (map[charCode] === value) { - return charCode | 0; - } - } - return -1; - } - getMap() { - return this._map; - } - readCharCode(str, offset, out) { - let c = 0; - const codespaceRanges = this.codespaceRanges; - for (let n = 0, nn = codespaceRanges.length; n < nn; n++) { - c = (c << 8 | str.charCodeAt(offset + n)) >>> 0; - const codespaceRange = codespaceRanges[n]; - for (let k = 0, kk = codespaceRange.length; k < kk;) { - const low = codespaceRange[k++]; - const high = codespaceRange[k++]; - if (c >= low && c <= high) { - out.charcode = c; - out.length = n + 1; - return; - } - } - } - out.charcode = 0; - out.length = 1; - } - getCharCodeLength(charCode) { - const codespaceRanges = this.codespaceRanges; - for (let n = 0, nn = codespaceRanges.length; n < nn; n++) { - const codespaceRange = codespaceRanges[n]; - for (let k = 0, kk = codespaceRange.length; k < kk;) { - const low = codespaceRange[k++]; - const high = codespaceRange[k++]; - if (charCode >= low && charCode <= high) { - return n + 1; - } - } - } - return 1; - } - get length() { - return this._map.length; - } - get isIdentityCMap() { - if (!(this.name === "Identity-H" || this.name === "Identity-V")) { - return false; - } - if (this._map.length !== 0x10000) { - return false; - } - for (let i = 0; i < 0x10000; i++) { - if (this._map[i] !== i) { - return false; - } - } - return true; - } -} -exports.CMap = CMap; -class IdentityCMap extends CMap { - constructor(vertical, n) { - super(); - this.vertical = vertical; - this.addCodespaceRange(n, 0, 0xffff); - } - mapCidRange(low, high, dstLow) { - (0, _util.unreachable)("should not call mapCidRange"); - } - mapBfRange(low, high, dstLow) { - (0, _util.unreachable)("should not call mapBfRange"); - } - mapBfRangeToArray(low, high, array) { - (0, _util.unreachable)("should not call mapBfRangeToArray"); - } - mapOne(src, dst) { - (0, _util.unreachable)("should not call mapCidOne"); - } - lookup(code) { - return Number.isInteger(code) && code <= 0xffff ? code : undefined; - } - contains(code) { - return Number.isInteger(code) && code <= 0xffff; - } - forEach(callback) { - for (let i = 0; i <= 0xffff; i++) { - callback(i, i); - } - } - charCodeOf(value) { - return Number.isInteger(value) && value <= 0xffff ? value : -1; - } - getMap() { - const map = new Array(0x10000); - for (let i = 0; i <= 0xffff; i++) { - map[i] = i; - } - return map; - } - get length() { - return 0x10000; - } - get isIdentityCMap() { - (0, _util.unreachable)("should not access .isIdentityCMap"); - } -} -exports.IdentityCMap = IdentityCMap; -function strToInt(str) { - let a = 0; - for (let i = 0; i < str.length; i++) { - a = a << 8 | str.charCodeAt(i); - } - return a >>> 0; -} -function expectString(obj) { - if (typeof obj !== "string") { - throw new _util.FormatError("Malformed CMap: expected string."); - } -} -function expectInt(obj) { - if (!Number.isInteger(obj)) { - throw new _util.FormatError("Malformed CMap: expected int."); - } -} -function parseBfChar(cMap, lexer) { - while (true) { - let obj = lexer.getObj(); - if (obj === _primitives.EOF) { - break; - } - if ((0, _primitives.isCmd)(obj, "endbfchar")) { - return; - } - expectString(obj); - const src = strToInt(obj); - obj = lexer.getObj(); - expectString(obj); - const dst = obj; - cMap.mapOne(src, dst); - } -} -function parseBfRange(cMap, lexer) { - while (true) { - let obj = lexer.getObj(); - if (obj === _primitives.EOF) { - break; - } - if ((0, _primitives.isCmd)(obj, "endbfrange")) { - return; - } - expectString(obj); - const low = strToInt(obj); - obj = lexer.getObj(); - expectString(obj); - const high = strToInt(obj); - obj = lexer.getObj(); - if (Number.isInteger(obj) || typeof obj === "string") { - const dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj; - cMap.mapBfRange(low, high, dstLow); - } else if ((0, _primitives.isCmd)(obj, "[")) { - obj = lexer.getObj(); - const array = []; - while (!(0, _primitives.isCmd)(obj, "]") && obj !== _primitives.EOF) { - array.push(obj); - obj = lexer.getObj(); - } - cMap.mapBfRangeToArray(low, high, array); - } else { - break; - } - } - throw new _util.FormatError("Invalid bf range."); -} -function parseCidChar(cMap, lexer) { - while (true) { - let obj = lexer.getObj(); - if (obj === _primitives.EOF) { - break; - } - if ((0, _primitives.isCmd)(obj, "endcidchar")) { - return; - } - expectString(obj); - const src = strToInt(obj); - obj = lexer.getObj(); - expectInt(obj); - const dst = obj; - cMap.mapOne(src, dst); - } -} -function parseCidRange(cMap, lexer) { - while (true) { - let obj = lexer.getObj(); - if (obj === _primitives.EOF) { - break; - } - if ((0, _primitives.isCmd)(obj, "endcidrange")) { - return; - } - expectString(obj); - const low = strToInt(obj); - obj = lexer.getObj(); - expectString(obj); - const high = strToInt(obj); - obj = lexer.getObj(); - expectInt(obj); - const dstLow = obj; - cMap.mapCidRange(low, high, dstLow); - } -} -function parseCodespaceRange(cMap, lexer) { - while (true) { - let obj = lexer.getObj(); - if (obj === _primitives.EOF) { - break; - } - if ((0, _primitives.isCmd)(obj, "endcodespacerange")) { - return; - } - if (typeof obj !== "string") { - break; - } - const low = strToInt(obj); - obj = lexer.getObj(); - if (typeof obj !== "string") { - break; - } - const high = strToInt(obj); - cMap.addCodespaceRange(obj.length, low, high); - } - throw new _util.FormatError("Invalid codespace range."); -} -function parseWMode(cMap, lexer) { - const obj = lexer.getObj(); - if (Number.isInteger(obj)) { - cMap.vertical = !!obj; - } -} -function parseCMapName(cMap, lexer) { - const obj = lexer.getObj(); - if (obj instanceof _primitives.Name) { - cMap.name = obj.name; - } -} -async function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) { - let previous, embeddedUseCMap; - objLoop: while (true) { - try { - const obj = lexer.getObj(); - if (obj === _primitives.EOF) { - break; - } else if (obj instanceof _primitives.Name) { - if (obj.name === "WMode") { - parseWMode(cMap, lexer); - } else if (obj.name === "CMapName") { - parseCMapName(cMap, lexer); - } - previous = obj; - } else if (obj instanceof _primitives.Cmd) { - switch (obj.cmd) { - case "endcmap": - break objLoop; - case "usecmap": - if (previous instanceof _primitives.Name) { - embeddedUseCMap = previous.name; - } - break; - case "begincodespacerange": - parseCodespaceRange(cMap, lexer); - break; - case "beginbfchar": - parseBfChar(cMap, lexer); - break; - case "begincidchar": - parseCidChar(cMap, lexer); - break; - case "beginbfrange": - parseBfRange(cMap, lexer); - break; - case "begincidrange": - parseCidRange(cMap, lexer); - break; - } - } - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.warn)("Invalid cMap data: " + ex); - continue; - } - } - if (!useCMap && embeddedUseCMap) { - useCMap = embeddedUseCMap; - } - if (useCMap) { - return extendCMap(cMap, fetchBuiltInCMap, useCMap); - } - return cMap; -} -async function extendCMap(cMap, fetchBuiltInCMap, useCMap) { - cMap.useCMap = await createBuiltInCMap(useCMap, fetchBuiltInCMap); - if (cMap.numCodespaceRanges === 0) { - const useCodespaceRanges = cMap.useCMap.codespaceRanges; - for (let i = 0; i < useCodespaceRanges.length; i++) { - cMap.codespaceRanges[i] = useCodespaceRanges[i].slice(); - } - cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges; - } - cMap.useCMap.forEach(function (key, value) { - if (!cMap.contains(key)) { - cMap.mapOne(key, cMap.useCMap.lookup(key)); - } - }); - return cMap; -} -async function createBuiltInCMap(name, fetchBuiltInCMap) { - if (name === "Identity-H") { - return new IdentityCMap(false, 2); - } else if (name === "Identity-V") { - return new IdentityCMap(true, 2); - } - if (!BUILT_IN_CMAPS.includes(name)) { - throw new Error("Unknown CMap name: " + name); - } - if (!fetchBuiltInCMap) { - throw new Error("Built-in CMap parameters are not provided."); - } - const { - cMapData, - compressionType - } = await fetchBuiltInCMap(name); - const cMap = new CMap(true); - if (compressionType === _util.CMapCompressionType.BINARY) { - return new _binary_cmap.BinaryCMapReader().process(cMapData, cMap, useCMap => { - return extendCMap(cMap, fetchBuiltInCMap, useCMap); - }); - } - if (compressionType === _util.CMapCompressionType.NONE) { - const lexer = new _parser.Lexer(new _stream.Stream(cMapData)); - return parseCMap(cMap, lexer, fetchBuiltInCMap, null); - } - throw new Error(`Invalid CMap "compressionType" value: ${compressionType}`); -} -class CMapFactory { - static async create({ - encoding, - fetchBuiltInCMap, - useCMap - }) { - if (encoding instanceof _primitives.Name) { - return createBuiltInCMap(encoding.name, fetchBuiltInCMap); - } else if (encoding instanceof _base_stream.BaseStream) { - const parsedCMap = await parseCMap(new CMap(), new _parser.Lexer(encoding), fetchBuiltInCMap, useCMap); - if (parsedCMap.isIdentityCMap) { - return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap); - } - return parsedCMap; - } - throw new Error("Encoding required."); - } -} -exports.CMapFactory = CMapFactory; - -/***/ }), -/* 15 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.BinaryCMapReader = void 0; -var _util = __w_pdfjs_require__(2); -function hexToInt(a, size) { - let n = 0; - for (let i = 0; i <= size; i++) { - n = n << 8 | a[i]; - } - return n >>> 0; -} -function hexToStr(a, size) { - if (size === 1) { - return String.fromCharCode(a[0], a[1]); - } - if (size === 3) { - return String.fromCharCode(a[0], a[1], a[2], a[3]); - } - return String.fromCharCode(...a.subarray(0, size + 1)); -} -function addHex(a, b, size) { - let c = 0; - for (let i = size; i >= 0; i--) { - c += a[i] + b[i]; - a[i] = c & 255; - c >>= 8; - } -} -function incHex(a, size) { - let c = 1; - for (let i = size; i >= 0 && c > 0; i--) { - c += a[i]; - a[i] = c & 255; - c >>= 8; - } -} -const MAX_NUM_SIZE = 16; -const MAX_ENCODED_NUM_SIZE = 19; -class BinaryCMapStream { - constructor(data) { - this.buffer = data; - this.pos = 0; - this.end = data.length; - this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE); - } - readByte() { - if (this.pos >= this.end) { - return -1; - } - return this.buffer[this.pos++]; - } - readNumber() { - let n = 0; - let last; - do { - const b = this.readByte(); - if (b < 0) { - throw new _util.FormatError("unexpected EOF in bcmap"); - } - last = !(b & 0x80); - n = n << 7 | b & 0x7f; - } while (!last); - return n; - } - readSigned() { - const n = this.readNumber(); - return n & 1 ? ~(n >>> 1) : n >>> 1; - } - readHex(num, size) { - num.set(this.buffer.subarray(this.pos, this.pos + size + 1)); - this.pos += size + 1; - } - readHexNumber(num, size) { - let last; - const stack = this.tmpBuf; - let sp = 0; - do { - const b = this.readByte(); - if (b < 0) { - throw new _util.FormatError("unexpected EOF in bcmap"); - } - last = !(b & 0x80); - stack[sp++] = b & 0x7f; - } while (!last); - let i = size, - buffer = 0, - bufferSize = 0; - while (i >= 0) { - while (bufferSize < 8 && stack.length > 0) { - buffer |= stack[--sp] << bufferSize; - bufferSize += 7; - } - num[i] = buffer & 255; - i--; - buffer >>= 8; - bufferSize -= 8; - } - } - readHexSigned(num, size) { - this.readHexNumber(num, size); - const sign = num[size] & 1 ? 255 : 0; - let c = 0; - for (let i = 0; i <= size; i++) { - c = (c & 1) << 8 | num[i]; - num[i] = c >> 1 ^ sign; - } - } - readString() { - const len = this.readNumber(), - buf = new Array(len); - for (let i = 0; i < len; i++) { - buf[i] = this.readNumber(); - } - return String.fromCharCode(...buf); - } -} -class BinaryCMapReader { - async process(data, cMap, extend) { - const stream = new BinaryCMapStream(data); - const header = stream.readByte(); - cMap.vertical = !!(header & 1); - let useCMap = null; - const start = new Uint8Array(MAX_NUM_SIZE); - const end = new Uint8Array(MAX_NUM_SIZE); - const char = new Uint8Array(MAX_NUM_SIZE); - const charCode = new Uint8Array(MAX_NUM_SIZE); - const tmp = new Uint8Array(MAX_NUM_SIZE); - let code; - let b; - while ((b = stream.readByte()) >= 0) { - const type = b >> 5; - if (type === 7) { - switch (b & 0x1f) { - case 0: - stream.readString(); - break; - case 1: - useCMap = stream.readString(); - break; - } - continue; - } - const sequence = !!(b & 0x10); - const dataSize = b & 15; - if (dataSize + 1 > MAX_NUM_SIZE) { - throw new Error("BinaryCMapReader.process: Invalid dataSize."); - } - const ucs2DataSize = 1; - const subitemsCount = stream.readNumber(); - switch (type) { - case 0: - stream.readHex(start, dataSize); - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); - for (let i = 1; i < subitemsCount; i++) { - incHex(end, dataSize); - stream.readHexNumber(start, dataSize); - addHex(start, end, dataSize); - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); - } - break; - case 1: - stream.readHex(start, dataSize); - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - stream.readNumber(); - for (let i = 1; i < subitemsCount; i++) { - incHex(end, dataSize); - stream.readHexNumber(start, dataSize); - addHex(start, end, dataSize); - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - stream.readNumber(); - } - break; - case 2: - stream.readHex(char, dataSize); - code = stream.readNumber(); - cMap.mapOne(hexToInt(char, dataSize), code); - for (let i = 1; i < subitemsCount; i++) { - incHex(char, dataSize); - if (!sequence) { - stream.readHexNumber(tmp, dataSize); - addHex(char, tmp, dataSize); - } - code = stream.readSigned() + (code + 1); - cMap.mapOne(hexToInt(char, dataSize), code); - } - break; - case 3: - stream.readHex(start, dataSize); - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - code = stream.readNumber(); - cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); - for (let i = 1; i < subitemsCount; i++) { - incHex(end, dataSize); - if (!sequence) { - stream.readHexNumber(start, dataSize); - addHex(start, end, dataSize); - } else { - start.set(end); - } - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - code = stream.readNumber(); - cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); - } - break; - case 4: - stream.readHex(char, ucs2DataSize); - stream.readHex(charCode, dataSize); - cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize)); - for (let i = 1; i < subitemsCount; i++) { - incHex(char, ucs2DataSize); - if (!sequence) { - stream.readHexNumber(tmp, ucs2DataSize); - addHex(char, tmp, ucs2DataSize); - } - incHex(charCode, dataSize); - stream.readHexSigned(tmp, dataSize); - addHex(charCode, tmp, dataSize); - cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize)); - } - break; - case 5: - stream.readHex(start, ucs2DataSize); - stream.readHexNumber(end, ucs2DataSize); - addHex(end, start, ucs2DataSize); - stream.readHex(charCode, dataSize); - cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); - for (let i = 1; i < subitemsCount; i++) { - incHex(end, ucs2DataSize); - if (!sequence) { - stream.readHexNumber(start, ucs2DataSize); - addHex(start, end, ucs2DataSize); - } else { - start.set(end); - } - stream.readHexNumber(end, ucs2DataSize); - addHex(end, start, ucs2DataSize); - stream.readHex(charCode, dataSize); - cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); - } - break; - default: - throw new Error(`BinaryCMapReader.process - unknown type: ${type}`); - } - } - if (useCMap) { - return extend(useCMap); - } - return cMap; - } -} -exports.BinaryCMapReader = BinaryCMapReader; - -/***/ }), -/* 16 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Parser = exports.Linearization = exports.Lexer = void 0; -var _util = __w_pdfjs_require__(2); -var _primitives = __w_pdfjs_require__(4); -var _core_utils = __w_pdfjs_require__(3); -var _stream = __w_pdfjs_require__(8); -var _ascii_85_stream = __w_pdfjs_require__(17); -var _ascii_hex_stream = __w_pdfjs_require__(19); -var _ccitt_stream = __w_pdfjs_require__(20); -var _flate_stream = __w_pdfjs_require__(22); -var _jbig2_stream = __w_pdfjs_require__(23); -var _jpeg_stream = __w_pdfjs_require__(26); -var _jpx_stream = __w_pdfjs_require__(29); -var _lzw_stream = __w_pdfjs_require__(31); -var _predictor_stream = __w_pdfjs_require__(32); -var _run_length_stream = __w_pdfjs_require__(33); -const MAX_LENGTH_TO_CACHE = 1000; -function getInlineImageCacheKey(bytes) { - const strBuf = [], - ii = bytes.length; - let i = 0; - while (i < ii - 1) { - strBuf.push(bytes[i++] << 8 | bytes[i++]); - } - if (i < ii) { - strBuf.push(bytes[i]); - } - return ii + "_" + String.fromCharCode.apply(null, strBuf); -} -class Parser { - constructor({ - lexer, - xref, - allowStreams = false, - recoveryMode = false - }) { - this.lexer = lexer; - this.xref = xref; - this.allowStreams = allowStreams; - this.recoveryMode = recoveryMode; - this.imageCache = Object.create(null); - this._imageId = 0; - this.refill(); - } - refill() { - this.buf1 = this.lexer.getObj(); - this.buf2 = this.lexer.getObj(); - } - shift() { - if (this.buf2 instanceof _primitives.Cmd && this.buf2.cmd === "ID") { - this.buf1 = this.buf2; - this.buf2 = null; - } else { - this.buf1 = this.buf2; - this.buf2 = this.lexer.getObj(); - } - } - tryShift() { - try { - this.shift(); - return true; - } catch (e) { - if (e instanceof _core_utils.MissingDataException) { - throw e; - } - return false; - } - } - getObj(cipherTransform = null) { - const buf1 = this.buf1; - this.shift(); - if (buf1 instanceof _primitives.Cmd) { - switch (buf1.cmd) { - case "BI": - return this.makeInlineImage(cipherTransform); - case "[": - const array = []; - while (!(0, _primitives.isCmd)(this.buf1, "]") && this.buf1 !== _primitives.EOF) { - array.push(this.getObj(cipherTransform)); - } - if (this.buf1 === _primitives.EOF) { - if (this.recoveryMode) { - return array; - } - throw new _core_utils.ParserEOFException("End of file inside array."); - } - this.shift(); - return array; - case "<<": - const dict = new _primitives.Dict(this.xref); - while (!(0, _primitives.isCmd)(this.buf1, ">>") && this.buf1 !== _primitives.EOF) { - if (!(this.buf1 instanceof _primitives.Name)) { - (0, _util.info)("Malformed dictionary: key must be a name object"); - this.shift(); - continue; - } - const key = this.buf1.name; - this.shift(); - if (this.buf1 === _primitives.EOF) { - break; - } - dict.set(key, this.getObj(cipherTransform)); - } - if (this.buf1 === _primitives.EOF) { - if (this.recoveryMode) { - return dict; - } - throw new _core_utils.ParserEOFException("End of file inside dictionary."); - } - if ((0, _primitives.isCmd)(this.buf2, "stream")) { - return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict; - } - this.shift(); - return dict; - default: - return buf1; - } - } - if (Number.isInteger(buf1)) { - if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, "R")) { - const ref = _primitives.Ref.get(buf1, this.buf1); - this.shift(); - this.shift(); - return ref; - } - return buf1; - } - if (typeof buf1 === "string") { - if (cipherTransform) { - return cipherTransform.decryptString(buf1); - } - return buf1; - } - return buf1; - } - findDefaultInlineStreamEnd(stream) { - const E = 0x45, - I = 0x49, - SPACE = 0x20, - LF = 0xa, - CR = 0xd, - NUL = 0x0; - const { - knownCommands - } = this.lexer, - startPos = stream.pos, - n = 15; - let state = 0, - ch, - maybeEIPos; - while ((ch = stream.getByte()) !== -1) { - if (state === 0) { - state = ch === E ? 1 : 0; - } else if (state === 1) { - state = ch === I ? 2 : 0; - } else { - if (ch === SPACE || ch === LF || ch === CR) { - maybeEIPos = stream.pos; - const followingBytes = stream.peekBytes(n); - const ii = followingBytes.length; - if (ii === 0) { - break; - } - for (let i = 0; i < ii; i++) { - ch = followingBytes[i]; - if (ch === NUL && followingBytes[i + 1] !== NUL) { - continue; - } - if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7f)) { - state = 0; - break; - } - } - if (state !== 2) { - continue; - } - if (!knownCommands) { - (0, _util.warn)("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined."); - continue; - } - const tmpLexer = new Lexer(new _stream.Stream(followingBytes.slice()), knownCommands); - tmpLexer._hexStringWarn = () => {}; - let numArgs = 0; - while (true) { - const nextObj = tmpLexer.getObj(); - if (nextObj === _primitives.EOF) { - state = 0; - break; - } - if (nextObj instanceof _primitives.Cmd) { - const knownCommand = knownCommands[nextObj.cmd]; - if (!knownCommand) { - state = 0; - break; - } else if (knownCommand.variableArgs ? numArgs <= knownCommand.numArgs : numArgs === knownCommand.numArgs) { - break; - } - numArgs = 0; - continue; - } - numArgs++; - } - if (state === 2) { - break; - } - } else { - state = 0; - } - } - } - if (ch === -1) { - (0, _util.warn)("findDefaultInlineStreamEnd: " + "Reached the end of the stream without finding a valid EI marker"); - if (maybeEIPos) { - (0, _util.warn)('... trying to recover by using the last "EI" occurrence.'); - stream.skip(-(stream.pos - maybeEIPos)); - } - } - let endOffset = 4; - stream.skip(-endOffset); - ch = stream.peekByte(); - stream.skip(endOffset); - if (!(0, _core_utils.isWhiteSpace)(ch)) { - endOffset--; - } - return stream.pos - endOffset - startPos; - } - findDCTDecodeInlineStreamEnd(stream) { - const startPos = stream.pos; - let foundEOI = false, - b, - markerLength; - while ((b = stream.getByte()) !== -1) { - if (b !== 0xff) { - continue; - } - switch (stream.getByte()) { - case 0x00: - break; - case 0xff: - stream.skip(-1); - break; - case 0xd9: - foundEOI = true; - break; - case 0xc0: - case 0xc1: - case 0xc2: - case 0xc3: - case 0xc5: - case 0xc6: - case 0xc7: - case 0xc9: - case 0xca: - case 0xcb: - case 0xcd: - case 0xce: - case 0xcf: - case 0xc4: - case 0xcc: - case 0xda: - case 0xdb: - case 0xdc: - case 0xdd: - case 0xde: - case 0xdf: - case 0xe0: - case 0xe1: - case 0xe2: - case 0xe3: - case 0xe4: - case 0xe5: - case 0xe6: - case 0xe7: - case 0xe8: - case 0xe9: - case 0xea: - case 0xeb: - case 0xec: - case 0xed: - case 0xee: - case 0xef: - case 0xfe: - markerLength = stream.getUint16(); - if (markerLength > 2) { - stream.skip(markerLength - 2); - } else { - stream.skip(-2); - } - break; - } - if (foundEOI) { - break; - } - } - const length = stream.pos - startPos; - if (b === -1) { - (0, _util.warn)("Inline DCTDecode image stream: " + "EOI marker not found, searching for /EI/ instead."); - stream.skip(-length); - return this.findDefaultInlineStreamEnd(stream); - } - this.inlineStreamSkipEI(stream); - return length; - } - findASCII85DecodeInlineStreamEnd(stream) { - const TILDE = 0x7e, - GT = 0x3e; - const startPos = stream.pos; - let ch; - while ((ch = stream.getByte()) !== -1) { - if (ch === TILDE) { - const tildePos = stream.pos; - ch = stream.peekByte(); - while ((0, _core_utils.isWhiteSpace)(ch)) { - stream.skip(); - ch = stream.peekByte(); - } - if (ch === GT) { - stream.skip(); - break; - } - if (stream.pos > tildePos) { - const maybeEI = stream.peekBytes(2); - if (maybeEI[0] === 0x45 && maybeEI[1] === 0x49) { - break; - } - } - } - } - const length = stream.pos - startPos; - if (ch === -1) { - (0, _util.warn)("Inline ASCII85Decode image stream: " + "EOD marker not found, searching for /EI/ instead."); - stream.skip(-length); - return this.findDefaultInlineStreamEnd(stream); - } - this.inlineStreamSkipEI(stream); - return length; - } - findASCIIHexDecodeInlineStreamEnd(stream) { - const GT = 0x3e; - const startPos = stream.pos; - let ch; - while ((ch = stream.getByte()) !== -1) { - if (ch === GT) { - break; - } - } - const length = stream.pos - startPos; - if (ch === -1) { - (0, _util.warn)("Inline ASCIIHexDecode image stream: " + "EOD marker not found, searching for /EI/ instead."); - stream.skip(-length); - return this.findDefaultInlineStreamEnd(stream); - } - this.inlineStreamSkipEI(stream); - return length; - } - inlineStreamSkipEI(stream) { - const E = 0x45, - I = 0x49; - let state = 0, - ch; - while ((ch = stream.getByte()) !== -1) { - if (state === 0) { - state = ch === E ? 1 : 0; - } else if (state === 1) { - state = ch === I ? 2 : 0; - } else if (state === 2) { - break; - } - } - } - makeInlineImage(cipherTransform) { - const lexer = this.lexer; - const stream = lexer.stream; - const dictMap = Object.create(null); - let dictLength; - while (!(0, _primitives.isCmd)(this.buf1, "ID") && this.buf1 !== _primitives.EOF) { - if (!(this.buf1 instanceof _primitives.Name)) { - throw new _util.FormatError("Dictionary key must be a name object"); - } - const key = this.buf1.name; - this.shift(); - if (this.buf1 === _primitives.EOF) { - break; - } - dictMap[key] = this.getObj(cipherTransform); - } - if (lexer.beginInlineImagePos !== -1) { - dictLength = stream.pos - lexer.beginInlineImagePos; - } - const filter = this.xref.fetchIfRef(dictMap.F || dictMap.Filter); - let filterName; - if (filter instanceof _primitives.Name) { - filterName = filter.name; - } else if (Array.isArray(filter)) { - const filterZero = this.xref.fetchIfRef(filter[0]); - if (filterZero instanceof _primitives.Name) { - filterName = filterZero.name; - } - } - const startPos = stream.pos; - let length; - switch (filterName) { - case "DCT": - case "DCTDecode": - length = this.findDCTDecodeInlineStreamEnd(stream); - break; - case "A85": - case "ASCII85Decode": - length = this.findASCII85DecodeInlineStreamEnd(stream); - break; - case "AHx": - case "ASCIIHexDecode": - length = this.findASCIIHexDecodeInlineStreamEnd(stream); - break; - default: - length = this.findDefaultInlineStreamEnd(stream); - } - let cacheKey; - if (length < MAX_LENGTH_TO_CACHE && dictLength > 0) { - const initialStreamPos = stream.pos; - stream.pos = lexer.beginInlineImagePos; - cacheKey = getInlineImageCacheKey(stream.getBytes(dictLength + length)); - stream.pos = initialStreamPos; - const cacheEntry = this.imageCache[cacheKey]; - if (cacheEntry !== undefined) { - this.buf2 = _primitives.Cmd.get("EI"); - this.shift(); - cacheEntry.reset(); - return cacheEntry; - } - } - const dict = new _primitives.Dict(this.xref); - for (const key in dictMap) { - dict.set(key, dictMap[key]); - } - let imageStream = stream.makeSubStream(startPos, length, dict); - if (cipherTransform) { - imageStream = cipherTransform.createStream(imageStream, length); - } - imageStream = this.filter(imageStream, dict, length); - imageStream.dict = dict; - if (cacheKey !== undefined) { - imageStream.cacheKey = `inline_img_${++this._imageId}`; - this.imageCache[cacheKey] = imageStream; - } - this.buf2 = _primitives.Cmd.get("EI"); - this.shift(); - return imageStream; - } - _findStreamLength(startPos, signature) { - const { - stream - } = this.lexer; - stream.pos = startPos; - const SCAN_BLOCK_LENGTH = 2048; - const signatureLength = signature.length; - while (stream.pos < stream.end) { - const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); - const scanLength = scanBytes.length - signatureLength; - if (scanLength <= 0) { - break; - } - let pos = 0; - while (pos < scanLength) { - let j = 0; - while (j < signatureLength && scanBytes[pos + j] === signature[j]) { - j++; - } - if (j >= signatureLength) { - stream.pos += pos; - return stream.pos - startPos; - } - pos++; - } - stream.pos += scanLength; - } - return -1; - } - makeStream(dict, cipherTransform) { - const lexer = this.lexer; - let stream = lexer.stream; - lexer.skipToNextLine(); - const startPos = stream.pos - 1; - let length = dict.get("Length"); - if (!Number.isInteger(length)) { - (0, _util.info)(`Bad length "${length && length.toString()}" in stream.`); - length = 0; - } - stream.pos = startPos + length; - lexer.nextChar(); - if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, "endstream")) { - this.shift(); - } else { - const ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d]); - let actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE); - if (actualLength < 0) { - const MAX_TRUNCATION = 1; - for (let i = 1; i <= MAX_TRUNCATION; i++) { - const end = ENDSTREAM_SIGNATURE.length - i; - const TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end); - const maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE); - if (maybeLength >= 0) { - const lastByte = stream.peekBytes(end + 1)[end]; - if (!(0, _core_utils.isWhiteSpace)(lastByte)) { - break; - } - (0, _util.info)(`Found "${(0, _util.bytesToString)(TRUNCATED_SIGNATURE)}" when ` + "searching for endstream command."); - actualLength = maybeLength; - break; - } - } - if (actualLength < 0) { - throw new _util.FormatError("Missing endstream command."); - } - } - length = actualLength; - lexer.nextChar(); - this.shift(); - this.shift(); - } - this.shift(); - stream = stream.makeSubStream(startPos, length, dict); - if (cipherTransform) { - stream = cipherTransform.createStream(stream, length); - } - stream = this.filter(stream, dict, length); - stream.dict = dict; - return stream; - } - filter(stream, dict, length) { - let filter = dict.get("F", "Filter"); - let params = dict.get("DP", "DecodeParms"); - if (filter instanceof _primitives.Name) { - if (Array.isArray(params)) { - (0, _util.warn)("/DecodeParms should not be an Array, when /Filter is a Name."); - } - return this.makeFilter(stream, filter.name, length, params); - } - let maybeLength = length; - if (Array.isArray(filter)) { - const filterArray = filter; - const paramsArray = params; - for (let i = 0, ii = filterArray.length; i < ii; ++i) { - filter = this.xref.fetchIfRef(filterArray[i]); - if (!(filter instanceof _primitives.Name)) { - throw new _util.FormatError(`Bad filter name "${filter}"`); - } - params = null; - if (Array.isArray(paramsArray) && i in paramsArray) { - params = this.xref.fetchIfRef(paramsArray[i]); - } - stream = this.makeFilter(stream, filter.name, maybeLength, params); - maybeLength = null; - } - } - return stream; - } - makeFilter(stream, name, maybeLength, params) { - if (maybeLength === 0) { - (0, _util.warn)(`Empty "${name}" stream.`); - return new _stream.NullStream(); - } - try { - switch (name) { - case "Fl": - case "FlateDecode": - if (params) { - return new _predictor_stream.PredictorStream(new _flate_stream.FlateStream(stream, maybeLength), maybeLength, params); - } - return new _flate_stream.FlateStream(stream, maybeLength); - case "LZW": - case "LZWDecode": - let earlyChange = 1; - if (params) { - if (params.has("EarlyChange")) { - earlyChange = params.get("EarlyChange"); - } - return new _predictor_stream.PredictorStream(new _lzw_stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params); - } - return new _lzw_stream.LZWStream(stream, maybeLength, earlyChange); - case "DCT": - case "DCTDecode": - return new _jpeg_stream.JpegStream(stream, maybeLength, params); - case "JPX": - case "JPXDecode": - return new _jpx_stream.JpxStream(stream, maybeLength, params); - case "A85": - case "ASCII85Decode": - return new _ascii_85_stream.Ascii85Stream(stream, maybeLength); - case "AHx": - case "ASCIIHexDecode": - return new _ascii_hex_stream.AsciiHexStream(stream, maybeLength); - case "CCF": - case "CCITTFaxDecode": - return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params); - case "RL": - case "RunLengthDecode": - return new _run_length_stream.RunLengthStream(stream, maybeLength); - case "JBIG2Decode": - return new _jbig2_stream.Jbig2Stream(stream, maybeLength, params); - } - (0, _util.warn)(`Filter "${name}" is not supported.`); - return stream; - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.warn)(`Invalid stream: "${ex}"`); - return new _stream.NullStream(); - } - } -} -exports.Parser = Parser; -const specialChars = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; -function toHexDigit(ch) { - if (ch >= 0x30 && ch <= 0x39) { - return ch & 0x0f; - } - if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { - return (ch & 0x0f) + 9; - } - return -1; -} -class Lexer { - constructor(stream, knownCommands = null) { - this.stream = stream; - this.nextChar(); - this.strBuf = []; - this.knownCommands = knownCommands; - this._hexStringNumWarn = 0; - this.beginInlineImagePos = -1; - } - nextChar() { - return this.currentChar = this.stream.getByte(); - } - peekChar() { - return this.stream.peekByte(); - } - getNumber() { - let ch = this.currentChar; - let eNotation = false; - let divideBy = 0; - let sign = 1; - if (ch === 0x2d) { - sign = -1; - ch = this.nextChar(); - if (ch === 0x2d) { - ch = this.nextChar(); - } - } else if (ch === 0x2b) { - ch = this.nextChar(); - } - if (ch === 0x0a || ch === 0x0d) { - do { - ch = this.nextChar(); - } while (ch === 0x0a || ch === 0x0d); - } - if (ch === 0x2e) { - divideBy = 10; - ch = this.nextChar(); - } - if (ch < 0x30 || ch > 0x39) { - const msg = `Invalid number: ${String.fromCharCode(ch)} (charCode ${ch})`; - if ((0, _core_utils.isWhiteSpace)(ch) || ch === -1) { - (0, _util.info)(`Lexer.getNumber - "${msg}".`); - return 0; - } - throw new _util.FormatError(msg); - } - let baseValue = ch - 0x30; - let powerValue = 0; - let powerValueSign = 1; - while ((ch = this.nextChar()) >= 0) { - if (ch >= 0x30 && ch <= 0x39) { - const currentDigit = ch - 0x30; - if (eNotation) { - powerValue = powerValue * 10 + currentDigit; - } else { - if (divideBy !== 0) { - divideBy *= 10; - } - baseValue = baseValue * 10 + currentDigit; - } - } else if (ch === 0x2e) { - if (divideBy === 0) { - divideBy = 1; - } else { - break; - } - } else if (ch === 0x2d) { - (0, _util.warn)("Badly formatted number: minus sign in the middle"); - } else if (ch === 0x45 || ch === 0x65) { - ch = this.peekChar(); - if (ch === 0x2b || ch === 0x2d) { - powerValueSign = ch === 0x2d ? -1 : 1; - this.nextChar(); - } else if (ch < 0x30 || ch > 0x39) { - break; - } - eNotation = true; - } else { - break; - } - } - if (divideBy !== 0) { - baseValue /= divideBy; - } - if (eNotation) { - baseValue *= 10 ** (powerValueSign * powerValue); - } - return sign * baseValue; - } - getString() { - let numParen = 1; - let done = false; - const strBuf = this.strBuf; - strBuf.length = 0; - let ch = this.nextChar(); - while (true) { - let charBuffered = false; - switch (ch | 0) { - case -1: - (0, _util.warn)("Unterminated string"); - done = true; - break; - case 0x28: - ++numParen; - strBuf.push("("); - break; - case 0x29: - if (--numParen === 0) { - this.nextChar(); - done = true; - } else { - strBuf.push(")"); - } - break; - case 0x5c: - ch = this.nextChar(); - switch (ch) { - case -1: - (0, _util.warn)("Unterminated string"); - done = true; - break; - case 0x6e: - strBuf.push("\n"); - break; - case 0x72: - strBuf.push("\r"); - break; - case 0x74: - strBuf.push("\t"); - break; - case 0x62: - strBuf.push("\b"); - break; - case 0x66: - strBuf.push("\f"); - break; - case 0x5c: - case 0x28: - case 0x29: - strBuf.push(String.fromCharCode(ch)); - break; - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - let x = ch & 0x0f; - ch = this.nextChar(); - charBuffered = true; - if (ch >= 0x30 && ch <= 0x37) { - x = (x << 3) + (ch & 0x0f); - ch = this.nextChar(); - if (ch >= 0x30 && ch <= 0x37) { - charBuffered = false; - x = (x << 3) + (ch & 0x0f); - } - } - strBuf.push(String.fromCharCode(x)); - break; - case 0x0d: - if (this.peekChar() === 0x0a) { - this.nextChar(); - } - break; - case 0x0a: - break; - default: - strBuf.push(String.fromCharCode(ch)); - break; - } - break; - default: - strBuf.push(String.fromCharCode(ch)); - break; - } - if (done) { - break; - } - if (!charBuffered) { - ch = this.nextChar(); - } - } - return strBuf.join(""); - } - getName() { - let ch, previousCh; - const strBuf = this.strBuf; - strBuf.length = 0; - while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { - if (ch === 0x23) { - ch = this.nextChar(); - if (specialChars[ch]) { - (0, _util.warn)("Lexer_getName: " + "NUMBER SIGN (#) should be followed by a hexadecimal number."); - strBuf.push("#"); - break; - } - const x = toHexDigit(ch); - if (x !== -1) { - previousCh = ch; - ch = this.nextChar(); - const x2 = toHexDigit(ch); - if (x2 === -1) { - (0, _util.warn)(`Lexer_getName: Illegal digit (${String.fromCharCode(ch)}) ` + "in hexadecimal number."); - strBuf.push("#", String.fromCharCode(previousCh)); - if (specialChars[ch]) { - break; - } - strBuf.push(String.fromCharCode(ch)); - continue; - } - strBuf.push(String.fromCharCode(x << 4 | x2)); - } else { - strBuf.push("#", String.fromCharCode(ch)); - } - } else { - strBuf.push(String.fromCharCode(ch)); - } - } - if (strBuf.length > 127) { - (0, _util.warn)(`Name token is longer than allowed by the spec: ${strBuf.length}`); - } - return _primitives.Name.get(strBuf.join("")); - } - _hexStringWarn(ch) { - const MAX_HEX_STRING_NUM_WARN = 5; - if (this._hexStringNumWarn++ === MAX_HEX_STRING_NUM_WARN) { - (0, _util.warn)("getHexString - ignoring additional invalid characters."); - return; - } - if (this._hexStringNumWarn > MAX_HEX_STRING_NUM_WARN) { - return; - } - (0, _util.warn)(`getHexString - ignoring invalid character: ${ch}`); - } - getHexString() { - const strBuf = this.strBuf; - strBuf.length = 0; - let ch = this.currentChar; - let isFirstHex = true; - let firstDigit, secondDigit; - this._hexStringNumWarn = 0; - while (true) { - if (ch < 0) { - (0, _util.warn)("Unterminated hex string"); - break; - } else if (ch === 0x3e) { - this.nextChar(); - break; - } else if (specialChars[ch] === 1) { - ch = this.nextChar(); - continue; - } else { - if (isFirstHex) { - firstDigit = toHexDigit(ch); - if (firstDigit === -1) { - this._hexStringWarn(ch); - ch = this.nextChar(); - continue; - } - } else { - secondDigit = toHexDigit(ch); - if (secondDigit === -1) { - this._hexStringWarn(ch); - ch = this.nextChar(); - continue; - } - strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit)); - } - isFirstHex = !isFirstHex; - ch = this.nextChar(); - } - } - return strBuf.join(""); - } - getObj() { - let comment = false; - let ch = this.currentChar; - while (true) { - if (ch < 0) { - return _primitives.EOF; - } - if (comment) { - if (ch === 0x0a || ch === 0x0d) { - comment = false; - } - } else if (ch === 0x25) { - comment = true; - } else if (specialChars[ch] !== 1) { - break; - } - ch = this.nextChar(); - } - switch (ch | 0) { - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - case 0x38: - case 0x39: - case 0x2b: - case 0x2d: - case 0x2e: - return this.getNumber(); - case 0x28: - return this.getString(); - case 0x2f: - return this.getName(); - case 0x5b: - this.nextChar(); - return _primitives.Cmd.get("["); - case 0x5d: - this.nextChar(); - return _primitives.Cmd.get("]"); - case 0x3c: - ch = this.nextChar(); - if (ch === 0x3c) { - this.nextChar(); - return _primitives.Cmd.get("<<"); - } - return this.getHexString(); - case 0x3e: - ch = this.nextChar(); - if (ch === 0x3e) { - this.nextChar(); - return _primitives.Cmd.get(">>"); - } - return _primitives.Cmd.get(">"); - case 0x7b: - this.nextChar(); - return _primitives.Cmd.get("{"); - case 0x7d: - this.nextChar(); - return _primitives.Cmd.get("}"); - case 0x29: - this.nextChar(); - throw new _util.FormatError(`Illegal character: ${ch}`); - } - let str = String.fromCharCode(ch); - if (ch < 0x20 || ch > 0x7f) { - const nextCh = this.peekChar(); - if (nextCh >= 0x20 && nextCh <= 0x7f) { - this.nextChar(); - return _primitives.Cmd.get(str); - } - } - const knownCommands = this.knownCommands; - let knownCommandFound = knownCommands?.[str] !== undefined; - while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { - const possibleCommand = str + String.fromCharCode(ch); - if (knownCommandFound && knownCommands[possibleCommand] === undefined) { - break; - } - if (str.length === 128) { - throw new _util.FormatError(`Command token too long: ${str.length}`); - } - str = possibleCommand; - knownCommandFound = knownCommands?.[str] !== undefined; - } - if (str === "true") { - return true; - } - if (str === "false") { - return false; - } - if (str === "null") { - return null; - } - if (str === "BI") { - this.beginInlineImagePos = this.stream.pos; - } - return _primitives.Cmd.get(str); - } - skipToNextLine() { - let ch = this.currentChar; - while (ch >= 0) { - if (ch === 0x0d) { - ch = this.nextChar(); - if (ch === 0x0a) { - this.nextChar(); - } - break; - } else if (ch === 0x0a) { - this.nextChar(); - break; - } - ch = this.nextChar(); - } - } -} -exports.Lexer = Lexer; -class Linearization { - static create(stream) { - function getInt(linDict, name, allowZeroValue = false) { - const obj = linDict.get(name); - if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) { - return obj; - } - throw new Error(`The "${name}" parameter in the linearization ` + "dictionary is invalid."); - } - function getHints(linDict) { - const hints = linDict.get("H"); - let hintsLength; - if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) { - for (let index = 0; index < hintsLength; index++) { - const hint = hints[index]; - if (!(Number.isInteger(hint) && hint > 0)) { - throw new Error(`Hint (${index}) in the linearization dictionary is invalid.`); - } - } - return hints; - } - throw new Error("Hint array in the linearization dictionary is invalid."); - } - const parser = new Parser({ - lexer: new Lexer(stream), - xref: null - }); - const obj1 = parser.getObj(); - const obj2 = parser.getObj(); - const obj3 = parser.getObj(); - const linDict = parser.getObj(); - let obj, length; - if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && (0, _primitives.isCmd)(obj3, "obj") && linDict instanceof _primitives.Dict && typeof (obj = linDict.get("Linearized")) === "number" && obj > 0)) { - return null; - } else if ((length = getInt(linDict, "L")) !== stream.length) { - throw new Error('The "L" parameter in the linearization dictionary ' + "does not equal the stream length."); - } - return { - length, - hints: getHints(linDict), - objectNumberFirst: getInt(linDict, "O"), - endFirst: getInt(linDict, "E"), - numPages: getInt(linDict, "N"), - mainXRefEntriesOffset: getInt(linDict, "T"), - pageFirst: linDict.has("P") ? getInt(linDict, "P", true) : 0 - }; - } -} -exports.Linearization = Linearization; - -/***/ }), -/* 17 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Ascii85Stream = void 0; -var _decode_stream = __w_pdfjs_require__(18); -var _core_utils = __w_pdfjs_require__(3); -class Ascii85Stream extends _decode_stream.DecodeStream { - constructor(str, maybeLength) { - if (maybeLength) { - maybeLength *= 0.8; - } - super(maybeLength); - this.str = str; - this.dict = str.dict; - this.input = new Uint8Array(5); - } - readBlock() { - const TILDA_CHAR = 0x7e; - const Z_LOWER_CHAR = 0x7a; - const EOF = -1; - const str = this.str; - let c = str.getByte(); - while ((0, _core_utils.isWhiteSpace)(c)) { - c = str.getByte(); - } - if (c === EOF || c === TILDA_CHAR) { - this.eof = true; - return; - } - const bufferLength = this.bufferLength; - let buffer, i; - if (c === Z_LOWER_CHAR) { - buffer = this.ensureBuffer(bufferLength + 4); - for (i = 0; i < 4; ++i) { - buffer[bufferLength + i] = 0; - } - this.bufferLength += 4; - } else { - const input = this.input; - input[0] = c; - for (i = 1; i < 5; ++i) { - c = str.getByte(); - while ((0, _core_utils.isWhiteSpace)(c)) { - c = str.getByte(); - } - input[i] = c; - if (c === EOF || c === TILDA_CHAR) { - break; - } - } - buffer = this.ensureBuffer(bufferLength + i - 1); - this.bufferLength += i - 1; - if (i < 5) { - for (; i < 5; ++i) { - input[i] = 0x21 + 84; - } - this.eof = true; - } - let t = 0; - for (i = 0; i < 5; ++i) { - t = t * 85 + (input[i] - 0x21); - } - for (i = 3; i >= 0; --i) { - buffer[bufferLength + i] = t & 0xff; - t >>= 8; - } - } - } -} -exports.Ascii85Stream = Ascii85Stream; - -/***/ }), -/* 18 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StreamsSequenceStream = exports.DecodeStream = void 0; -var _base_stream = __w_pdfjs_require__(5); -var _stream = __w_pdfjs_require__(8); -const emptyBuffer = new Uint8Array(0); -class DecodeStream extends _base_stream.BaseStream { - constructor(maybeMinBufferLength) { - super(); - this._rawMinBufferLength = maybeMinBufferLength || 0; - this.pos = 0; - this.bufferLength = 0; - this.eof = false; - this.buffer = emptyBuffer; - this.minBufferLength = 512; - if (maybeMinBufferLength) { - while (this.minBufferLength < maybeMinBufferLength) { - this.minBufferLength *= 2; - } - } - } - get isEmpty() { - while (!this.eof && this.bufferLength === 0) { - this.readBlock(); - } - return this.bufferLength === 0; - } - ensureBuffer(requested) { - const buffer = this.buffer; - if (requested <= buffer.byteLength) { - return buffer; - } - let size = this.minBufferLength; - while (size < requested) { - size *= 2; - } - const buffer2 = new Uint8Array(size); - buffer2.set(buffer); - return this.buffer = buffer2; - } - getByte() { - const pos = this.pos; - while (this.bufferLength <= pos) { - if (this.eof) { - return -1; - } - this.readBlock(); - } - return this.buffer[this.pos++]; - } - getBytes(length) { - const pos = this.pos; - let end; - if (length) { - this.ensureBuffer(pos + length); - end = pos + length; - while (!this.eof && this.bufferLength < end) { - this.readBlock(); - } - const bufEnd = this.bufferLength; - if (end > bufEnd) { - end = bufEnd; - } - } else { - while (!this.eof) { - this.readBlock(); - } - end = this.bufferLength; - } - this.pos = end; - return this.buffer.subarray(pos, end); - } - reset() { - this.pos = 0; - } - makeSubStream(start, length, dict = null) { - if (length === undefined) { - while (!this.eof) { - this.readBlock(); - } - } else { - const end = start + length; - while (this.bufferLength <= end && !this.eof) { - this.readBlock(); - } - } - return new _stream.Stream(this.buffer, start, length, dict); - } - getBaseStreams() { - return this.str ? this.str.getBaseStreams() : null; - } -} -exports.DecodeStream = DecodeStream; -class StreamsSequenceStream extends DecodeStream { - constructor(streams, onError = null) { - let maybeLength = 0; - for (const stream of streams) { - maybeLength += stream instanceof DecodeStream ? stream._rawMinBufferLength : stream.length; - } - super(maybeLength); - this.streams = streams; - this._onError = onError; - } - readBlock() { - const streams = this.streams; - if (streams.length === 0) { - this.eof = true; - return; - } - const stream = streams.shift(); - let chunk; - try { - chunk = stream.getBytes(); - } catch (reason) { - if (this._onError) { - this._onError(reason, stream.dict?.objId); - return; - } - throw reason; - } - const bufferLength = this.bufferLength; - const newLength = bufferLength + chunk.length; - const buffer = this.ensureBuffer(newLength); - buffer.set(chunk, bufferLength); - this.bufferLength = newLength; - } - getBaseStreams() { - const baseStreamsBuf = []; - for (const stream of this.streams) { - const baseStreams = stream.getBaseStreams(); - if (baseStreams) { - baseStreamsBuf.push(...baseStreams); - } - } - return baseStreamsBuf.length > 0 ? baseStreamsBuf : null; - } -} -exports.StreamsSequenceStream = StreamsSequenceStream; - -/***/ }), -/* 19 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.AsciiHexStream = void 0; -var _decode_stream = __w_pdfjs_require__(18); -class AsciiHexStream extends _decode_stream.DecodeStream { - constructor(str, maybeLength) { - if (maybeLength) { - maybeLength *= 0.5; - } - super(maybeLength); - this.str = str; - this.dict = str.dict; - this.firstDigit = -1; - } - readBlock() { - const UPSTREAM_BLOCK_SIZE = 8000; - const bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE); - if (!bytes.length) { - this.eof = true; - return; - } - const maxDecodeLength = bytes.length + 1 >> 1; - const buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength); - let bufferLength = this.bufferLength; - let firstDigit = this.firstDigit; - for (const ch of bytes) { - let digit; - if (ch >= 0x30 && ch <= 0x39) { - digit = ch & 0x0f; - } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { - digit = (ch & 0x0f) + 9; - } else if (ch === 0x3e) { - this.eof = true; - break; - } else { - continue; - } - if (firstDigit < 0) { - firstDigit = digit; - } else { - buffer[bufferLength++] = firstDigit << 4 | digit; - firstDigit = -1; - } - } - if (firstDigit >= 0 && this.eof) { - buffer[bufferLength++] = firstDigit << 4; - firstDigit = -1; - } - this.firstDigit = firstDigit; - this.bufferLength = bufferLength; - } -} -exports.AsciiHexStream = AsciiHexStream; - -/***/ }), -/* 20 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.CCITTFaxStream = void 0; -var _ccitt = __w_pdfjs_require__(21); -var _decode_stream = __w_pdfjs_require__(18); -var _primitives = __w_pdfjs_require__(4); -class CCITTFaxStream extends _decode_stream.DecodeStream { - constructor(str, maybeLength, params) { - super(maybeLength); - this.str = str; - this.dict = str.dict; - if (!(params instanceof _primitives.Dict)) { - params = _primitives.Dict.empty; - } - const source = { - next() { - return str.getByte(); - } - }; - this.ccittFaxDecoder = new _ccitt.CCITTFaxDecoder(source, { - K: params.get("K"), - EndOfLine: params.get("EndOfLine"), - EncodedByteAlign: params.get("EncodedByteAlign"), - Columns: params.get("Columns"), - Rows: params.get("Rows"), - EndOfBlock: params.get("EndOfBlock"), - BlackIs1: params.get("BlackIs1") - }); - } - readBlock() { - while (!this.eof) { - const c = this.ccittFaxDecoder.readNextChar(); - if (c === -1) { - this.eof = true; - return; - } - this.ensureBuffer(this.bufferLength + 1); - this.buffer[this.bufferLength++] = c; - } - } -} -exports.CCITTFaxStream = CCITTFaxStream; - -/***/ }), -/* 21 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.CCITTFaxDecoder = void 0; -var _util = __w_pdfjs_require__(2); -const ccittEOL = -2; -const ccittEOF = -1; -const twoDimPass = 0; -const twoDimHoriz = 1; -const twoDimVert0 = 2; -const twoDimVertR1 = 3; -const twoDimVertL1 = 4; -const twoDimVertR2 = 5; -const twoDimVertL2 = 6; -const twoDimVertR3 = 7; -const twoDimVertL3 = 8; -const twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]]; -const whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]]; -const whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]]; -const blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]]; -const blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]]; -const blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]]; -class CCITTFaxDecoder { - constructor(source, options = {}) { - if (!source || typeof source.next !== "function") { - throw new Error('CCITTFaxDecoder - invalid "source" parameter.'); - } - this.source = source; - this.eof = false; - this.encoding = options.K || 0; - this.eoline = options.EndOfLine || false; - this.byteAlign = options.EncodedByteAlign || false; - this.columns = options.Columns || 1728; - this.rows = options.Rows || 0; - this.eoblock = options.EndOfBlock ?? true; - this.black = options.BlackIs1 || false; - this.codingLine = new Uint32Array(this.columns + 1); - this.refLine = new Uint32Array(this.columns + 2); - this.codingLine[0] = this.columns; - this.codingPos = 0; - this.row = 0; - this.nextLine2D = this.encoding < 0; - this.inputBits = 0; - this.inputBuf = 0; - this.outputBits = 0; - this.rowsDone = false; - let code1; - while ((code1 = this._lookBits(12)) === 0) { - this._eatBits(1); - } - if (code1 === 1) { - this._eatBits(12); - } - if (this.encoding > 0) { - this.nextLine2D = !this._lookBits(1); - this._eatBits(1); - } - } - readNextChar() { - if (this.eof) { - return -1; - } - const refLine = this.refLine; - const codingLine = this.codingLine; - const columns = this.columns; - let refPos, blackPixels, bits, i; - if (this.outputBits === 0) { - if (this.rowsDone) { - this.eof = true; - } - if (this.eof) { - return -1; - } - this.err = false; - let code1, code2, code3; - if (this.nextLine2D) { - for (i = 0; codingLine[i] < columns; ++i) { - refLine[i] = codingLine[i]; - } - refLine[i++] = columns; - refLine[i] = columns; - codingLine[0] = 0; - this.codingPos = 0; - refPos = 0; - blackPixels = 0; - while (codingLine[this.codingPos] < columns) { - code1 = this._getTwoDimCode(); - switch (code1) { - case twoDimPass: - this._addPixels(refLine[refPos + 1], blackPixels); - if (refLine[refPos + 1] < columns) { - refPos += 2; - } - break; - case twoDimHoriz: - code1 = code2 = 0; - if (blackPixels) { - do { - code1 += code3 = this._getBlackCode(); - } while (code3 >= 64); - do { - code2 += code3 = this._getWhiteCode(); - } while (code3 >= 64); - } else { - do { - code1 += code3 = this._getWhiteCode(); - } while (code3 >= 64); - do { - code2 += code3 = this._getBlackCode(); - } while (code3 >= 64); - } - this._addPixels(codingLine[this.codingPos] + code1, blackPixels); - if (codingLine[this.codingPos] < columns) { - this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1); - } - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - break; - case twoDimVertR3: - this._addPixels(refLine[refPos] + 3, blackPixels); - blackPixels ^= 1; - if (codingLine[this.codingPos] < columns) { - ++refPos; - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - break; - case twoDimVertR2: - this._addPixels(refLine[refPos] + 2, blackPixels); - blackPixels ^= 1; - if (codingLine[this.codingPos] < columns) { - ++refPos; - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - break; - case twoDimVertR1: - this._addPixels(refLine[refPos] + 1, blackPixels); - blackPixels ^= 1; - if (codingLine[this.codingPos] < columns) { - ++refPos; - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - break; - case twoDimVert0: - this._addPixels(refLine[refPos], blackPixels); - blackPixels ^= 1; - if (codingLine[this.codingPos] < columns) { - ++refPos; - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - break; - case twoDimVertL3: - this._addPixelsNeg(refLine[refPos] - 3, blackPixels); - blackPixels ^= 1; - if (codingLine[this.codingPos] < columns) { - if (refPos > 0) { - --refPos; - } else { - ++refPos; - } - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - break; - case twoDimVertL2: - this._addPixelsNeg(refLine[refPos] - 2, blackPixels); - blackPixels ^= 1; - if (codingLine[this.codingPos] < columns) { - if (refPos > 0) { - --refPos; - } else { - ++refPos; - } - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - break; - case twoDimVertL1: - this._addPixelsNeg(refLine[refPos] - 1, blackPixels); - blackPixels ^= 1; - if (codingLine[this.codingPos] < columns) { - if (refPos > 0) { - --refPos; - } else { - ++refPos; - } - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - break; - case ccittEOF: - this._addPixels(columns, 0); - this.eof = true; - break; - default: - (0, _util.info)("bad 2d code"); - this._addPixels(columns, 0); - this.err = true; - } - } - } else { - codingLine[0] = 0; - this.codingPos = 0; - blackPixels = 0; - while (codingLine[this.codingPos] < columns) { - code1 = 0; - if (blackPixels) { - do { - code1 += code3 = this._getBlackCode(); - } while (code3 >= 64); - } else { - do { - code1 += code3 = this._getWhiteCode(); - } while (code3 >= 64); - } - this._addPixels(codingLine[this.codingPos] + code1, blackPixels); - blackPixels ^= 1; - } - } - let gotEOL = false; - if (this.byteAlign) { - this.inputBits &= ~7; - } - if (!this.eoblock && this.row === this.rows - 1) { - this.rowsDone = true; - } else { - code1 = this._lookBits(12); - if (this.eoline) { - while (code1 !== ccittEOF && code1 !== 1) { - this._eatBits(1); - code1 = this._lookBits(12); - } - } else { - while (code1 === 0) { - this._eatBits(1); - code1 = this._lookBits(12); - } - } - if (code1 === 1) { - this._eatBits(12); - gotEOL = true; - } else if (code1 === ccittEOF) { - this.eof = true; - } - } - if (!this.eof && this.encoding > 0 && !this.rowsDone) { - this.nextLine2D = !this._lookBits(1); - this._eatBits(1); - } - if (this.eoblock && gotEOL && this.byteAlign) { - code1 = this._lookBits(12); - if (code1 === 1) { - this._eatBits(12); - if (this.encoding > 0) { - this._lookBits(1); - this._eatBits(1); - } - if (this.encoding >= 0) { - for (i = 0; i < 4; ++i) { - code1 = this._lookBits(12); - if (code1 !== 1) { - (0, _util.info)("bad rtc code: " + code1); - } - this._eatBits(12); - if (this.encoding > 0) { - this._lookBits(1); - this._eatBits(1); - } - } - } - this.eof = true; - } - } else if (this.err && this.eoline) { - while (true) { - code1 = this._lookBits(13); - if (code1 === ccittEOF) { - this.eof = true; - return -1; - } - if (code1 >> 1 === 1) { - break; - } - this._eatBits(1); - } - this._eatBits(12); - if (this.encoding > 0) { - this._eatBits(1); - this.nextLine2D = !(code1 & 1); - } - } - this.outputBits = codingLine[0] > 0 ? codingLine[this.codingPos = 0] : codingLine[this.codingPos = 1]; - this.row++; - } - let c; - if (this.outputBits >= 8) { - c = this.codingPos & 1 ? 0 : 0xff; - this.outputBits -= 8; - if (this.outputBits === 0 && codingLine[this.codingPos] < columns) { - this.codingPos++; - this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; - } - } else { - bits = 8; - c = 0; - do { - if (typeof this.outputBits !== "number") { - throw new _util.FormatError('Invalid /CCITTFaxDecode data, "outputBits" must be a number.'); - } - if (this.outputBits > bits) { - c <<= bits; - if (!(this.codingPos & 1)) { - c |= 0xff >> 8 - bits; - } - this.outputBits -= bits; - bits = 0; - } else { - c <<= this.outputBits; - if (!(this.codingPos & 1)) { - c |= 0xff >> 8 - this.outputBits; - } - bits -= this.outputBits; - this.outputBits = 0; - if (codingLine[this.codingPos] < columns) { - this.codingPos++; - this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; - } else if (bits > 0) { - c <<= bits; - bits = 0; - } - } - } while (bits); - } - if (this.black) { - c ^= 0xff; - } - return c; - } - _addPixels(a1, blackPixels) { - const codingLine = this.codingLine; - let codingPos = this.codingPos; - if (a1 > codingLine[codingPos]) { - if (a1 > this.columns) { - (0, _util.info)("row is wrong length"); - this.err = true; - a1 = this.columns; - } - if (codingPos & 1 ^ blackPixels) { - ++codingPos; - } - codingLine[codingPos] = a1; - } - this.codingPos = codingPos; - } - _addPixelsNeg(a1, blackPixels) { - const codingLine = this.codingLine; - let codingPos = this.codingPos; - if (a1 > codingLine[codingPos]) { - if (a1 > this.columns) { - (0, _util.info)("row is wrong length"); - this.err = true; - a1 = this.columns; - } - if (codingPos & 1 ^ blackPixels) { - ++codingPos; - } - codingLine[codingPos] = a1; - } else if (a1 < codingLine[codingPos]) { - if (a1 < 0) { - (0, _util.info)("invalid code"); - this.err = true; - a1 = 0; - } - while (codingPos > 0 && a1 < codingLine[codingPos - 1]) { - --codingPos; - } - codingLine[codingPos] = a1; - } - this.codingPos = codingPos; - } - _findTableCode(start, end, table, limit) { - const limitValue = limit || 0; - for (let i = start; i <= end; ++i) { - let code = this._lookBits(i); - if (code === ccittEOF) { - return [true, 1, false]; - } - if (i < end) { - code <<= end - i; - } - if (!limitValue || code >= limitValue) { - const p = table[code - limitValue]; - if (p[0] === i) { - this._eatBits(i); - return [true, p[1], true]; - } - } - } - return [false, 0, false]; - } - _getTwoDimCode() { - let code = 0; - let p; - if (this.eoblock) { - code = this._lookBits(7); - p = twoDimTable[code]; - if (p?.[0] > 0) { - this._eatBits(p[0]); - return p[1]; - } - } else { - const result = this._findTableCode(1, 7, twoDimTable); - if (result[0] && result[2]) { - return result[1]; - } - } - (0, _util.info)("Bad two dim code"); - return ccittEOF; - } - _getWhiteCode() { - let code = 0; - let p; - if (this.eoblock) { - code = this._lookBits(12); - if (code === ccittEOF) { - return 1; - } - p = code >> 5 === 0 ? whiteTable1[code] : whiteTable2[code >> 3]; - if (p[0] > 0) { - this._eatBits(p[0]); - return p[1]; - } - } else { - let result = this._findTableCode(1, 9, whiteTable2); - if (result[0]) { - return result[1]; - } - result = this._findTableCode(11, 12, whiteTable1); - if (result[0]) { - return result[1]; - } - } - (0, _util.info)("bad white code"); - this._eatBits(1); - return 1; - } - _getBlackCode() { - let code, p; - if (this.eoblock) { - code = this._lookBits(13); - if (code === ccittEOF) { - return 1; - } - if (code >> 7 === 0) { - p = blackTable1[code]; - } else if (code >> 9 === 0 && code >> 7 !== 0) { - p = blackTable2[(code >> 1) - 64]; - } else { - p = blackTable3[code >> 7]; - } - if (p[0] > 0) { - this._eatBits(p[0]); - return p[1]; - } - } else { - let result = this._findTableCode(2, 6, blackTable3); - if (result[0]) { - return result[1]; - } - result = this._findTableCode(7, 12, blackTable2, 64); - if (result[0]) { - return result[1]; - } - result = this._findTableCode(10, 13, blackTable1); - if (result[0]) { - return result[1]; - } - } - (0, _util.info)("bad black code"); - this._eatBits(1); - return 1; - } - _lookBits(n) { - let c; - while (this.inputBits < n) { - if ((c = this.source.next()) === -1) { - if (this.inputBits === 0) { - return ccittEOF; - } - return this.inputBuf << n - this.inputBits & 0xffff >> 16 - n; - } - this.inputBuf = this.inputBuf << 8 | c; - this.inputBits += 8; - } - return this.inputBuf >> this.inputBits - n & 0xffff >> 16 - n; - } - _eatBits(n) { - if ((this.inputBits -= n) < 0) { - this.inputBits = 0; - } - } -} -exports.CCITTFaxDecoder = CCITTFaxDecoder; - -/***/ }), -/* 22 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FlateStream = void 0; -var _decode_stream = __w_pdfjs_require__(18); -var _util = __w_pdfjs_require__(2); -const codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); -const lengthDecode = new Int32Array([0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102]); -const distDecode = new Int32Array([0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001]); -const fixedLitCodeTab = [new Int32Array([0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff]), 9]; -const fixedDistCodeTab = [new Int32Array([0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000]), 5]; -class FlateStream extends _decode_stream.DecodeStream { - constructor(str, maybeLength) { - super(maybeLength); - this.str = str; - this.dict = str.dict; - const cmf = str.getByte(); - const flg = str.getByte(); - if (cmf === -1 || flg === -1) { - throw new _util.FormatError(`Invalid header in flate stream: ${cmf}, ${flg}`); - } - if ((cmf & 0x0f) !== 0x08) { - throw new _util.FormatError(`Unknown compression method in flate stream: ${cmf}, ${flg}`); - } - if (((cmf << 8) + flg) % 31 !== 0) { - throw new _util.FormatError(`Bad FCHECK in flate stream: ${cmf}, ${flg}`); - } - if (flg & 0x20) { - throw new _util.FormatError(`FDICT bit set in flate stream: ${cmf}, ${flg}`); - } - this.codeSize = 0; - this.codeBuf = 0; - } - getBits(bits) { - const str = this.str; - let codeSize = this.codeSize; - let codeBuf = this.codeBuf; - let b; - while (codeSize < bits) { - if ((b = str.getByte()) === -1) { - throw new _util.FormatError("Bad encoding in flate stream"); - } - codeBuf |= b << codeSize; - codeSize += 8; - } - b = codeBuf & (1 << bits) - 1; - this.codeBuf = codeBuf >> bits; - this.codeSize = codeSize -= bits; - return b; - } - getCode(table) { - const str = this.str; - const codes = table[0]; - const maxLen = table[1]; - let codeSize = this.codeSize; - let codeBuf = this.codeBuf; - let b; - while (codeSize < maxLen) { - if ((b = str.getByte()) === -1) { - break; - } - codeBuf |= b << codeSize; - codeSize += 8; - } - const code = codes[codeBuf & (1 << maxLen) - 1]; - const codeLen = code >> 16; - const codeVal = code & 0xffff; - if (codeLen < 1 || codeSize < codeLen) { - throw new _util.FormatError("Bad encoding in flate stream"); - } - this.codeBuf = codeBuf >> codeLen; - this.codeSize = codeSize - codeLen; - return codeVal; - } - generateHuffmanTable(lengths) { - const n = lengths.length; - let maxLen = 0; - let i; - for (i = 0; i < n; ++i) { - if (lengths[i] > maxLen) { - maxLen = lengths[i]; - } - } - const size = 1 << maxLen; - const codes = new Int32Array(size); - for (let len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) { - for (let val = 0; val < n; ++val) { - if (lengths[val] === len) { - let code2 = 0; - let t = code; - for (i = 0; i < len; ++i) { - code2 = code2 << 1 | t & 1; - t >>= 1; - } - for (i = code2; i < size; i += skip) { - codes[i] = len << 16 | val; - } - ++code; - } - } - } - return [codes, maxLen]; - } - readBlock() { - let buffer, len; - const str = this.str; - let hdr = this.getBits(3); - if (hdr & 1) { - this.eof = true; - } - hdr >>= 1; - if (hdr === 0) { - let b; - if ((b = str.getByte()) === -1) { - throw new _util.FormatError("Bad block header in flate stream"); - } - let blockLen = b; - if ((b = str.getByte()) === -1) { - throw new _util.FormatError("Bad block header in flate stream"); - } - blockLen |= b << 8; - if ((b = str.getByte()) === -1) { - throw new _util.FormatError("Bad block header in flate stream"); - } - let check = b; - if ((b = str.getByte()) === -1) { - throw new _util.FormatError("Bad block header in flate stream"); - } - check |= b << 8; - if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) { - throw new _util.FormatError("Bad uncompressed block length in flate stream"); - } - this.codeBuf = 0; - this.codeSize = 0; - const bufferLength = this.bufferLength, - end = bufferLength + blockLen; - buffer = this.ensureBuffer(end); - this.bufferLength = end; - if (blockLen === 0) { - if (str.peekByte() === -1) { - this.eof = true; - } - } else { - const block = str.getBytes(blockLen); - buffer.set(block, bufferLength); - if (block.length < blockLen) { - this.eof = true; - } - } - return; - } - let litCodeTable; - let distCodeTable; - if (hdr === 1) { - litCodeTable = fixedLitCodeTab; - distCodeTable = fixedDistCodeTab; - } else if (hdr === 2) { - const numLitCodes = this.getBits(5) + 257; - const numDistCodes = this.getBits(5) + 1; - const numCodeLenCodes = this.getBits(4) + 4; - const codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length); - let i; - for (i = 0; i < numCodeLenCodes; ++i) { - codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3); - } - const codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths); - len = 0; - i = 0; - const codes = numLitCodes + numDistCodes; - const codeLengths = new Uint8Array(codes); - let bitsLength, bitsOffset, what; - while (i < codes) { - const code = this.getCode(codeLenCodeTab); - if (code === 16) { - bitsLength = 2; - bitsOffset = 3; - what = len; - } else if (code === 17) { - bitsLength = 3; - bitsOffset = 3; - what = len = 0; - } else if (code === 18) { - bitsLength = 7; - bitsOffset = 11; - what = len = 0; - } else { - codeLengths[i++] = len = code; - continue; - } - let repeatLength = this.getBits(bitsLength) + bitsOffset; - while (repeatLength-- > 0) { - codeLengths[i++] = what; - } - } - litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes)); - distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes)); - } else { - throw new _util.FormatError("Unknown block type in flate stream"); - } - buffer = this.buffer; - let limit = buffer ? buffer.length : 0; - let pos = this.bufferLength; - while (true) { - let code1 = this.getCode(litCodeTable); - if (code1 < 256) { - if (pos + 1 >= limit) { - buffer = this.ensureBuffer(pos + 1); - limit = buffer.length; - } - buffer[pos++] = code1; - continue; - } - if (code1 === 256) { - this.bufferLength = pos; - return; - } - code1 -= 257; - code1 = lengthDecode[code1]; - let code2 = code1 >> 16; - if (code2 > 0) { - code2 = this.getBits(code2); - } - len = (code1 & 0xffff) + code2; - code1 = this.getCode(distCodeTable); - code1 = distDecode[code1]; - code2 = code1 >> 16; - if (code2 > 0) { - code2 = this.getBits(code2); - } - const dist = (code1 & 0xffff) + code2; - if (pos + len >= limit) { - buffer = this.ensureBuffer(pos + len); - limit = buffer.length; - } - for (let k = 0; k < len; ++k, ++pos) { - buffer[pos] = buffer[pos - dist]; - } - } - } -} -exports.FlateStream = FlateStream; - -/***/ }), -/* 23 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Jbig2Stream = void 0; -var _base_stream = __w_pdfjs_require__(5); -var _decode_stream = __w_pdfjs_require__(18); -var _primitives = __w_pdfjs_require__(4); -var _jbig = __w_pdfjs_require__(24); -var _util = __w_pdfjs_require__(2); -class Jbig2Stream extends _decode_stream.DecodeStream { - constructor(stream, maybeLength, params) { - super(maybeLength); - this.stream = stream; - this.dict = stream.dict; - this.maybeLength = maybeLength; - this.params = params; - } - get bytes() { - return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); - } - ensureBuffer(requested) {} - readBlock() { - if (this.eof) { - return; - } - const jbig2Image = new _jbig.Jbig2Image(); - const chunks = []; - if (this.params instanceof _primitives.Dict) { - const globalsStream = this.params.get("JBIG2Globals"); - if (globalsStream instanceof _base_stream.BaseStream) { - const globals = globalsStream.getBytes(); - chunks.push({ - data: globals, - start: 0, - end: globals.length - }); - } - } - chunks.push({ - data: this.bytes, - start: 0, - end: this.bytes.length - }); - const data = jbig2Image.parseChunks(chunks); - const dataLength = data.length; - for (let i = 0; i < dataLength; i++) { - data[i] ^= 0xff; - } - this.buffer = data; - this.bufferLength = dataLength; - this.eof = true; - } -} -exports.Jbig2Stream = Jbig2Stream; - -/***/ }), -/* 24 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Jbig2Image = void 0; -var _util = __w_pdfjs_require__(2); -var _core_utils = __w_pdfjs_require__(3); -var _arithmetic_decoder = __w_pdfjs_require__(25); -var _ccitt = __w_pdfjs_require__(21); -class Jbig2Error extends _util.BaseException { - constructor(msg) { - super(`JBIG2 error: ${msg}`, "Jbig2Error"); - } -} -class ContextCache { - getContexts(id) { - if (id in this) { - return this[id]; - } - return this[id] = new Int8Array(1 << 16); - } -} -class DecodingContext { - constructor(data, start, end) { - this.data = data; - this.start = start; - this.end = end; - } - get decoder() { - const decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end); - return (0, _util.shadow)(this, "decoder", decoder); - } - get contextCache() { - const cache = new ContextCache(); - return (0, _util.shadow)(this, "contextCache", cache); - } -} -const MAX_INT_32 = 2 ** 31 - 1; -const MIN_INT_32 = -(2 ** 31); -function decodeInteger(contextCache, procedure, decoder) { - const contexts = contextCache.getContexts(procedure); - let prev = 1; - function readBits(length) { - let v = 0; - for (let i = 0; i < length; i++) { - const bit = decoder.readBit(contexts, prev); - prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256; - v = v << 1 | bit; - } - return v >>> 0; - } - const sign = readBits(1); - const value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2); - let signedValue; - if (sign === 0) { - signedValue = value; - } else if (value > 0) { - signedValue = -value; - } - if (signedValue >= MIN_INT_32 && signedValue <= MAX_INT_32) { - return signedValue; - } - return null; -} -function decodeIAID(contextCache, decoder, codeLength) { - const contexts = contextCache.getContexts("IAID"); - let prev = 1; - for (let i = 0; i < codeLength; i++) { - const bit = decoder.readBit(contexts, prev); - prev = prev << 1 | bit; - } - if (codeLength < 31) { - return prev & (1 << codeLength) - 1; - } - return prev & 0x7fffffff; -} -const SegmentTypes = ["SymbolDictionary", null, null, null, "IntermediateTextRegion", null, "ImmediateTextRegion", "ImmediateLosslessTextRegion", null, null, null, null, null, null, null, null, "PatternDictionary", null, null, null, "IntermediateHalftoneRegion", null, "ImmediateHalftoneRegion", "ImmediateLosslessHalftoneRegion", null, null, null, null, null, null, null, null, null, null, null, null, "IntermediateGenericRegion", null, "ImmediateGenericRegion", "ImmediateLosslessGenericRegion", "IntermediateGenericRefinementRegion", null, "ImmediateGenericRefinementRegion", "ImmediateLosslessGenericRefinementRegion", null, null, null, null, "PageInformation", "EndOfPage", "EndOfStripe", "EndOfFile", "Profiles", "Tables", null, null, null, null, null, null, null, null, "Extension"]; -const CodingTemplates = [[{ - x: -1, - y: -2 -}, { - x: 0, - y: -2 -}, { - x: 1, - y: -2 -}, { - x: -2, - y: -1 -}, { - x: -1, - y: -1 -}, { - x: 0, - y: -1 -}, { - x: 1, - y: -1 -}, { - x: 2, - y: -1 -}, { - x: -4, - y: 0 -}, { - x: -3, - y: 0 -}, { - x: -2, - y: 0 -}, { - x: -1, - y: 0 -}], [{ - x: -1, - y: -2 -}, { - x: 0, - y: -2 -}, { - x: 1, - y: -2 -}, { - x: 2, - y: -2 -}, { - x: -2, - y: -1 -}, { - x: -1, - y: -1 -}, { - x: 0, - y: -1 -}, { - x: 1, - y: -1 -}, { - x: 2, - y: -1 -}, { - x: -3, - y: 0 -}, { - x: -2, - y: 0 -}, { - x: -1, - y: 0 -}], [{ - x: -1, - y: -2 -}, { - x: 0, - y: -2 -}, { - x: 1, - y: -2 -}, { - x: -2, - y: -1 -}, { - x: -1, - y: -1 -}, { - x: 0, - y: -1 -}, { - x: 1, - y: -1 -}, { - x: -2, - y: 0 -}, { - x: -1, - y: 0 -}], [{ - x: -3, - y: -1 -}, { - x: -2, - y: -1 -}, { - x: -1, - y: -1 -}, { - x: 0, - y: -1 -}, { - x: 1, - y: -1 -}, { - x: -4, - y: 0 -}, { - x: -3, - y: 0 -}, { - x: -2, - y: 0 -}, { - x: -1, - y: 0 -}]]; -const RefinementTemplates = [{ - coding: [{ - x: 0, - y: -1 - }, { - x: 1, - y: -1 - }, { - x: -1, - y: 0 - }], - reference: [{ - x: 0, - y: -1 - }, { - x: 1, - y: -1 - }, { - x: -1, - y: 0 - }, { - x: 0, - y: 0 - }, { - x: 1, - y: 0 - }, { - x: -1, - y: 1 - }, { - x: 0, - y: 1 - }, { - x: 1, - y: 1 - }] -}, { - coding: [{ - x: -1, - y: -1 - }, { - x: 0, - y: -1 - }, { - x: 1, - y: -1 - }, { - x: -1, - y: 0 - }], - reference: [{ - x: 0, - y: -1 - }, { - x: -1, - y: 0 - }, { - x: 0, - y: 0 - }, { - x: 1, - y: 0 - }, { - x: 0, - y: 1 - }, { - x: 1, - y: 1 - }] -}]; -const ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195]; -const RefinementReusedContexts = [0x0020, 0x0008]; -function decodeBitmapTemplate0(width, height, decodingContext) { - const decoder = decodingContext.decoder; - const contexts = decodingContext.contextCache.getContexts("GB"); - const bitmap = []; - let contextLabel, i, j, pixel, row, row1, row2; - const OLD_PIXEL_MASK = 0x7bf7; - for (i = 0; i < height; i++) { - row = bitmap[i] = new Uint8Array(width); - row1 = i < 1 ? row : bitmap[i - 1]; - row2 = i < 2 ? row : bitmap[i - 2]; - contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4; - for (j = 0; j < width; j++) { - row[j] = pixel = decoder.readBit(contexts, contextLabel); - contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel; - } - } - return bitmap; -} -function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) { - if (mmr) { - const input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end); - return decodeMMRBitmap(input, width, height, false); - } - if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) { - return decodeBitmapTemplate0(width, height, decodingContext); - } - const useskip = !!skip; - const template = CodingTemplates[templateIndex].concat(at); - template.sort(function (a, b) { - return a.y - b.y || a.x - b.x; - }); - const templateLength = template.length; - const templateX = new Int8Array(templateLength); - const templateY = new Int8Array(templateLength); - const changingTemplateEntries = []; - let reuseMask = 0, - minX = 0, - maxX = 0, - minY = 0; - let c, k; - for (k = 0; k < templateLength; k++) { - templateX[k] = template[k].x; - templateY[k] = template[k].y; - minX = Math.min(minX, template[k].x); - maxX = Math.max(maxX, template[k].x); - minY = Math.min(minY, template[k].y); - if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) { - reuseMask |= 1 << templateLength - 1 - k; - } else { - changingTemplateEntries.push(k); - } - } - const changingEntriesLength = changingTemplateEntries.length; - const changingTemplateX = new Int8Array(changingEntriesLength); - const changingTemplateY = new Int8Array(changingEntriesLength); - const changingTemplateBit = new Uint16Array(changingEntriesLength); - for (c = 0; c < changingEntriesLength; c++) { - k = changingTemplateEntries[c]; - changingTemplateX[c] = template[k].x; - changingTemplateY[c] = template[k].y; - changingTemplateBit[c] = 1 << templateLength - 1 - k; - } - const sbb_left = -minX; - const sbb_top = -minY; - const sbb_right = width - maxX; - const pseudoPixelContext = ReusedContexts[templateIndex]; - let row = new Uint8Array(width); - const bitmap = []; - const decoder = decodingContext.decoder; - const contexts = decodingContext.contextCache.getContexts("GB"); - let ltp = 0, - j, - i0, - j0, - contextLabel = 0, - bit, - shift; - for (let i = 0; i < height; i++) { - if (prediction) { - const sltp = decoder.readBit(contexts, pseudoPixelContext); - ltp ^= sltp; - if (ltp) { - bitmap.push(row); - continue; - } - } - row = new Uint8Array(row); - bitmap.push(row); - for (j = 0; j < width; j++) { - if (useskip && skip[i][j]) { - row[j] = 0; - continue; - } - if (j >= sbb_left && j < sbb_right && i >= sbb_top) { - contextLabel = contextLabel << 1 & reuseMask; - for (k = 0; k < changingEntriesLength; k++) { - i0 = i + changingTemplateY[k]; - j0 = j + changingTemplateX[k]; - bit = bitmap[i0][j0]; - if (bit) { - bit = changingTemplateBit[k]; - contextLabel |= bit; - } - } - } else { - contextLabel = 0; - shift = templateLength - 1; - for (k = 0; k < templateLength; k++, shift--) { - j0 = j + templateX[k]; - if (j0 >= 0 && j0 < width) { - i0 = i + templateY[k]; - if (i0 >= 0) { - bit = bitmap[i0][j0]; - if (bit) { - contextLabel |= bit << shift; - } - } - } - } - } - const pixel = decoder.readBit(contexts, contextLabel); - row[j] = pixel; - } - } - return bitmap; -} -function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) { - let codingTemplate = RefinementTemplates[templateIndex].coding; - if (templateIndex === 0) { - codingTemplate = codingTemplate.concat([at[0]]); - } - const codingTemplateLength = codingTemplate.length; - const codingTemplateX = new Int32Array(codingTemplateLength); - const codingTemplateY = new Int32Array(codingTemplateLength); - let k; - for (k = 0; k < codingTemplateLength; k++) { - codingTemplateX[k] = codingTemplate[k].x; - codingTemplateY[k] = codingTemplate[k].y; - } - let referenceTemplate = RefinementTemplates[templateIndex].reference; - if (templateIndex === 0) { - referenceTemplate = referenceTemplate.concat([at[1]]); - } - const referenceTemplateLength = referenceTemplate.length; - const referenceTemplateX = new Int32Array(referenceTemplateLength); - const referenceTemplateY = new Int32Array(referenceTemplateLength); - for (k = 0; k < referenceTemplateLength; k++) { - referenceTemplateX[k] = referenceTemplate[k].x; - referenceTemplateY[k] = referenceTemplate[k].y; - } - const referenceWidth = referenceBitmap[0].length; - const referenceHeight = referenceBitmap.length; - const pseudoPixelContext = RefinementReusedContexts[templateIndex]; - const bitmap = []; - const decoder = decodingContext.decoder; - const contexts = decodingContext.contextCache.getContexts("GR"); - let ltp = 0; - for (let i = 0; i < height; i++) { - if (prediction) { - const sltp = decoder.readBit(contexts, pseudoPixelContext); - ltp ^= sltp; - if (ltp) { - throw new Jbig2Error("prediction is not supported"); - } - } - const row = new Uint8Array(width); - bitmap.push(row); - for (let j = 0; j < width; j++) { - let i0, j0; - let contextLabel = 0; - for (k = 0; k < codingTemplateLength; k++) { - i0 = i + codingTemplateY[k]; - j0 = j + codingTemplateX[k]; - if (i0 < 0 || j0 < 0 || j0 >= width) { - contextLabel <<= 1; - } else { - contextLabel = contextLabel << 1 | bitmap[i0][j0]; - } - } - for (k = 0; k < referenceTemplateLength; k++) { - i0 = i + referenceTemplateY[k] - offsetY; - j0 = j + referenceTemplateX[k] - offsetX; - if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) { - contextLabel <<= 1; - } else { - contextLabel = contextLabel << 1 | referenceBitmap[i0][j0]; - } - } - const pixel = decoder.readBit(contexts, contextLabel); - row[j] = pixel; - } - } - return bitmap; -} -function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) { - if (huffman && refinement) { - throw new Jbig2Error("symbol refinement with Huffman is not supported"); - } - const newSymbols = []; - let currentHeight = 0; - let symbolCodeLength = (0, _core_utils.log2)(symbols.length + numberOfNewSymbols); - const decoder = decodingContext.decoder; - const contextCache = decodingContext.contextCache; - let tableB1, symbolWidths; - if (huffman) { - tableB1 = getStandardTable(1); - symbolWidths = []; - symbolCodeLength = Math.max(symbolCodeLength, 1); - } - while (newSymbols.length < numberOfNewSymbols) { - const deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, "IADH", decoder); - currentHeight += deltaHeight; - let currentWidth = 0, - totalWidth = 0; - const firstSymbol = huffman ? symbolWidths.length : 0; - while (true) { - const deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, "IADW", decoder); - if (deltaWidth === null) { - break; - } - currentWidth += deltaWidth; - totalWidth += currentWidth; - let bitmap; - if (refinement) { - const numberOfInstances = decodeInteger(contextCache, "IAAI", decoder); - if (numberOfInstances > 1) { - bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput); - } else { - const symbolId = decodeIAID(contextCache, decoder, symbolCodeLength); - const rdx = decodeInteger(contextCache, "IARDX", decoder); - const rdy = decodeInteger(contextCache, "IARDY", decoder); - const symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length]; - bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext); - } - newSymbols.push(bitmap); - } else if (huffman) { - symbolWidths.push(currentWidth); - } else { - bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext); - newSymbols.push(bitmap); - } - } - if (huffman && !refinement) { - const bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput); - huffmanInput.byteAlign(); - let collectiveBitmap; - if (bitmapSize === 0) { - collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight); - } else { - const originalEnd = huffmanInput.end; - const bitmapEnd = huffmanInput.position + bitmapSize; - huffmanInput.end = bitmapEnd; - collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false); - huffmanInput.end = originalEnd; - huffmanInput.position = bitmapEnd; - } - const numberOfSymbolsDecoded = symbolWidths.length; - if (firstSymbol === numberOfSymbolsDecoded - 1) { - newSymbols.push(collectiveBitmap); - } else { - let i, - y, - xMin = 0, - xMax, - bitmapWidth, - symbolBitmap; - for (i = firstSymbol; i < numberOfSymbolsDecoded; i++) { - bitmapWidth = symbolWidths[i]; - xMax = xMin + bitmapWidth; - symbolBitmap = []; - for (y = 0; y < currentHeight; y++) { - symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax)); - } - newSymbols.push(symbolBitmap); - xMin = xMax; - } - } - } - } - const exportedSymbols = [], - flags = []; - let currentFlag = false, - i, - ii; - const totalSymbolsLength = symbols.length + numberOfNewSymbols; - while (flags.length < totalSymbolsLength) { - let runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, "IAEX", decoder); - while (runLength--) { - flags.push(currentFlag); - } - currentFlag = !currentFlag; - } - for (i = 0, ii = symbols.length; i < ii; i++) { - if (flags[i]) { - exportedSymbols.push(symbols[i]); - } - } - for (let j = 0; j < numberOfNewSymbols; i++, j++) { - if (flags[i]) { - exportedSymbols.push(newSymbols[j]); - } - } - return exportedSymbols; -} -function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) { - if (huffman && refinement) { - throw new Jbig2Error("refinement with Huffman is not supported"); - } - const bitmap = []; - let i, row; - for (i = 0; i < height; i++) { - row = new Uint8Array(width); - if (defaultPixelValue) { - for (let j = 0; j < width; j++) { - row[j] = defaultPixelValue; - } - } - bitmap.push(row); - } - const decoder = decodingContext.decoder; - const contextCache = decodingContext.contextCache; - let stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, "IADT", decoder); - let firstS = 0; - i = 0; - while (i < numberOfSymbolInstances) { - const deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, "IADT", decoder); - stripT += deltaT; - const deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, "IAFS", decoder); - firstS += deltaFirstS; - let currentS = firstS; - do { - let currentT = 0; - if (stripSize > 1) { - currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, "IAIT", decoder); - } - const t = stripSize * stripT + currentT; - const symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength); - const applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, "IARI", decoder)); - let symbolBitmap = inputSymbols[symbolId]; - let symbolWidth = symbolBitmap[0].length; - let symbolHeight = symbolBitmap.length; - if (applyRefinement) { - const rdw = decodeInteger(contextCache, "IARDW", decoder); - const rdh = decodeInteger(contextCache, "IARDH", decoder); - const rdx = decodeInteger(contextCache, "IARDX", decoder); - const rdy = decodeInteger(contextCache, "IARDY", decoder); - symbolWidth += rdw; - symbolHeight += rdh; - symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext); - } - const offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1); - const offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0); - let s2, t2, symbolRow; - if (transposed) { - for (s2 = 0; s2 < symbolHeight; s2++) { - row = bitmap[offsetS + s2]; - if (!row) { - continue; - } - symbolRow = symbolBitmap[s2]; - const maxWidth = Math.min(width - offsetT, symbolWidth); - switch (combinationOperator) { - case 0: - for (t2 = 0; t2 < maxWidth; t2++) { - row[offsetT + t2] |= symbolRow[t2]; - } - break; - case 2: - for (t2 = 0; t2 < maxWidth; t2++) { - row[offsetT + t2] ^= symbolRow[t2]; - } - break; - default: - throw new Jbig2Error(`operator ${combinationOperator} is not supported`); - } - } - currentS += symbolHeight - 1; - } else { - for (t2 = 0; t2 < symbolHeight; t2++) { - row = bitmap[offsetT + t2]; - if (!row) { - continue; - } - symbolRow = symbolBitmap[t2]; - switch (combinationOperator) { - case 0: - for (s2 = 0; s2 < symbolWidth; s2++) { - row[offsetS + s2] |= symbolRow[s2]; - } - break; - case 2: - for (s2 = 0; s2 < symbolWidth; s2++) { - row[offsetS + s2] ^= symbolRow[s2]; - } - break; - default: - throw new Jbig2Error(`operator ${combinationOperator} is not supported`); - } - } - currentS += symbolWidth - 1; - } - i++; - const deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, "IADS", decoder); - if (deltaS === null) { - break; - } - currentS += deltaS + dsOffset; - } while (true); - } - return bitmap; -} -function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) { - const at = []; - if (!mmr) { - at.push({ - x: -patternWidth, - y: 0 - }); - if (template === 0) { - at.push({ - x: -3, - y: -1 - }, { - x: 2, - y: -2 - }, { - x: -2, - y: -2 - }); - } - } - const collectiveWidth = (maxPatternIndex + 1) * patternWidth; - const collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext); - const patterns = []; - for (let i = 0; i <= maxPatternIndex; i++) { - const patternBitmap = []; - const xMin = patternWidth * i; - const xMax = xMin + patternWidth; - for (let y = 0; y < patternHeight; y++) { - patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax)); - } - patterns.push(patternBitmap); - } - return patterns; -} -function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) { - const skip = null; - if (enableSkip) { - throw new Jbig2Error("skip is not supported"); - } - if (combinationOperator !== 0) { - throw new Jbig2Error(`operator "${combinationOperator}" is not supported in halftone region`); - } - const regionBitmap = []; - let i, j, row; - for (i = 0; i < regionHeight; i++) { - row = new Uint8Array(regionWidth); - if (defaultPixelValue) { - for (j = 0; j < regionWidth; j++) { - row[j] = defaultPixelValue; - } - } - regionBitmap.push(row); - } - const numberOfPatterns = patterns.length; - const pattern0 = patterns[0]; - const patternWidth = pattern0[0].length, - patternHeight = pattern0.length; - const bitsPerValue = (0, _core_utils.log2)(numberOfPatterns); - const at = []; - if (!mmr) { - at.push({ - x: template <= 1 ? 3 : 2, - y: -1 - }); - if (template === 0) { - at.push({ - x: -3, - y: -1 - }, { - x: 2, - y: -2 - }, { - x: -2, - y: -2 - }); - } - } - const grayScaleBitPlanes = []; - let mmrInput, bitmap; - if (mmr) { - mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end); - } - for (i = bitsPerValue - 1; i >= 0; i--) { - if (mmr) { - bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true); - } else { - bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext); - } - grayScaleBitPlanes[i] = bitmap; - } - let mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow; - for (mg = 0; mg < gridHeight; mg++) { - for (ng = 0; ng < gridWidth; ng++) { - bit = 0; - patternIndex = 0; - for (j = bitsPerValue - 1; j >= 0; j--) { - bit ^= grayScaleBitPlanes[j][mg][ng]; - patternIndex |= bit << j; - } - patternBitmap = patterns[patternIndex]; - x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8; - y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8; - if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) { - for (i = 0; i < patternHeight; i++) { - regionRow = regionBitmap[y + i]; - patternRow = patternBitmap[i]; - for (j = 0; j < patternWidth; j++) { - regionRow[x + j] |= patternRow[j]; - } - } - } else { - let regionX, regionY; - for (i = 0; i < patternHeight; i++) { - regionY = y + i; - if (regionY < 0 || regionY >= regionHeight) { - continue; - } - regionRow = regionBitmap[regionY]; - patternRow = patternBitmap[i]; - for (j = 0; j < patternWidth; j++) { - regionX = x + j; - if (regionX >= 0 && regionX < regionWidth) { - regionRow[regionX] |= patternRow[j]; - } - } - } - } - } - } - return regionBitmap; -} -function readSegmentHeader(data, start) { - const segmentHeader = {}; - segmentHeader.number = (0, _core_utils.readUint32)(data, start); - const flags = data[start + 4]; - const segmentType = flags & 0x3f; - if (!SegmentTypes[segmentType]) { - throw new Jbig2Error("invalid segment type: " + segmentType); - } - segmentHeader.type = segmentType; - segmentHeader.typeName = SegmentTypes[segmentType]; - segmentHeader.deferredNonRetain = !!(flags & 0x80); - const pageAssociationFieldSize = !!(flags & 0x40); - const referredFlags = data[start + 5]; - let referredToCount = referredFlags >> 5 & 7; - const retainBits = [referredFlags & 31]; - let position = start + 6; - if (referredFlags === 7) { - referredToCount = (0, _core_utils.readUint32)(data, position - 1) & 0x1fffffff; - position += 3; - let bytes = referredToCount + 7 >> 3; - retainBits[0] = data[position++]; - while (--bytes > 0) { - retainBits.push(data[position++]); - } - } else if (referredFlags === 5 || referredFlags === 6) { - throw new Jbig2Error("invalid referred-to flags"); - } - segmentHeader.retainBits = retainBits; - let referredToSegmentNumberSize = 4; - if (segmentHeader.number <= 256) { - referredToSegmentNumberSize = 1; - } else if (segmentHeader.number <= 65536) { - referredToSegmentNumberSize = 2; - } - const referredTo = []; - let i, ii; - for (i = 0; i < referredToCount; i++) { - let number; - if (referredToSegmentNumberSize === 1) { - number = data[position]; - } else if (referredToSegmentNumberSize === 2) { - number = (0, _core_utils.readUint16)(data, position); - } else { - number = (0, _core_utils.readUint32)(data, position); - } - referredTo.push(number); - position += referredToSegmentNumberSize; - } - segmentHeader.referredTo = referredTo; - if (!pageAssociationFieldSize) { - segmentHeader.pageAssociation = data[position++]; - } else { - segmentHeader.pageAssociation = (0, _core_utils.readUint32)(data, position); - position += 4; - } - segmentHeader.length = (0, _core_utils.readUint32)(data, position); - position += 4; - if (segmentHeader.length === 0xffffffff) { - if (segmentType === 38) { - const genericRegionInfo = readRegionSegmentInformation(data, position); - const genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength]; - const genericRegionMmr = !!(genericRegionSegmentFlags & 1); - const searchPatternLength = 6; - const searchPattern = new Uint8Array(searchPatternLength); - if (!genericRegionMmr) { - searchPattern[0] = 0xff; - searchPattern[1] = 0xac; - } - searchPattern[2] = genericRegionInfo.height >>> 24 & 0xff; - searchPattern[3] = genericRegionInfo.height >> 16 & 0xff; - searchPattern[4] = genericRegionInfo.height >> 8 & 0xff; - searchPattern[5] = genericRegionInfo.height & 0xff; - for (i = position, ii = data.length; i < ii; i++) { - let j = 0; - while (j < searchPatternLength && searchPattern[j] === data[i + j]) { - j++; - } - if (j === searchPatternLength) { - segmentHeader.length = i + searchPatternLength; - break; - } - } - if (segmentHeader.length === 0xffffffff) { - throw new Jbig2Error("segment end was not found"); - } - } else { - throw new Jbig2Error("invalid unknown segment length"); - } - } - segmentHeader.headerEnd = position; - return segmentHeader; -} -function readSegments(header, data, start, end) { - const segments = []; - let position = start; - while (position < end) { - const segmentHeader = readSegmentHeader(data, position); - position = segmentHeader.headerEnd; - const segment = { - header: segmentHeader, - data - }; - if (!header.randomAccess) { - segment.start = position; - position += segmentHeader.length; - segment.end = position; - } - segments.push(segment); - if (segmentHeader.type === 51) { - break; - } - } - if (header.randomAccess) { - for (let i = 0, ii = segments.length; i < ii; i++) { - segments[i].start = position; - position += segments[i].header.length; - segments[i].end = position; - } - } - return segments; -} -function readRegionSegmentInformation(data, start) { - return { - width: (0, _core_utils.readUint32)(data, start), - height: (0, _core_utils.readUint32)(data, start + 4), - x: (0, _core_utils.readUint32)(data, start + 8), - y: (0, _core_utils.readUint32)(data, start + 12), - combinationOperator: data[start + 16] & 7 - }; -} -const RegionSegmentInformationFieldLength = 17; -function processSegment(segment, visitor) { - const header = segment.header; - const data = segment.data, - end = segment.end; - let position = segment.start; - let args, at, i, atLength; - switch (header.type) { - case 0: - const dictionary = {}; - const dictionaryFlags = (0, _core_utils.readUint16)(data, position); - dictionary.huffman = !!(dictionaryFlags & 1); - dictionary.refinement = !!(dictionaryFlags & 2); - dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3; - dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3; - dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1; - dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1; - dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256); - dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512); - dictionary.template = dictionaryFlags >> 10 & 3; - dictionary.refinementTemplate = dictionaryFlags >> 12 & 1; - position += 2; - if (!dictionary.huffman) { - atLength = dictionary.template === 0 ? 4 : 1; - at = []; - for (i = 0; i < atLength; i++) { - at.push({ - x: (0, _core_utils.readInt8)(data, position), - y: (0, _core_utils.readInt8)(data, position + 1) - }); - position += 2; - } - dictionary.at = at; - } - if (dictionary.refinement && !dictionary.refinementTemplate) { - at = []; - for (i = 0; i < 2; i++) { - at.push({ - x: (0, _core_utils.readInt8)(data, position), - y: (0, _core_utils.readInt8)(data, position + 1) - }); - position += 2; - } - dictionary.refinementAt = at; - } - dictionary.numberOfExportedSymbols = (0, _core_utils.readUint32)(data, position); - position += 4; - dictionary.numberOfNewSymbols = (0, _core_utils.readUint32)(data, position); - position += 4; - args = [dictionary, header.number, header.referredTo, data, position, end]; - break; - case 6: - case 7: - const textRegion = {}; - textRegion.info = readRegionSegmentInformation(data, position); - position += RegionSegmentInformationFieldLength; - const textRegionSegmentFlags = (0, _core_utils.readUint16)(data, position); - position += 2; - textRegion.huffman = !!(textRegionSegmentFlags & 1); - textRegion.refinement = !!(textRegionSegmentFlags & 2); - textRegion.logStripSize = textRegionSegmentFlags >> 2 & 3; - textRegion.stripSize = 1 << textRegion.logStripSize; - textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3; - textRegion.transposed = !!(textRegionSegmentFlags & 64); - textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3; - textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1; - textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27; - textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1; - if (textRegion.huffman) { - const textRegionHuffmanFlags = (0, _core_utils.readUint16)(data, position); - position += 2; - textRegion.huffmanFS = textRegionHuffmanFlags & 3; - textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3; - textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3; - textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3; - textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3; - textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3; - textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3; - textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000); - } - if (textRegion.refinement && !textRegion.refinementTemplate) { - at = []; - for (i = 0; i < 2; i++) { - at.push({ - x: (0, _core_utils.readInt8)(data, position), - y: (0, _core_utils.readInt8)(data, position + 1) - }); - position += 2; - } - textRegion.refinementAt = at; - } - textRegion.numberOfSymbolInstances = (0, _core_utils.readUint32)(data, position); - position += 4; - args = [textRegion, header.referredTo, data, position, end]; - break; - case 16: - const patternDictionary = {}; - const patternDictionaryFlags = data[position++]; - patternDictionary.mmr = !!(patternDictionaryFlags & 1); - patternDictionary.template = patternDictionaryFlags >> 1 & 3; - patternDictionary.patternWidth = data[position++]; - patternDictionary.patternHeight = data[position++]; - patternDictionary.maxPatternIndex = (0, _core_utils.readUint32)(data, position); - position += 4; - args = [patternDictionary, header.number, data, position, end]; - break; - case 22: - case 23: - const halftoneRegion = {}; - halftoneRegion.info = readRegionSegmentInformation(data, position); - position += RegionSegmentInformationFieldLength; - const halftoneRegionFlags = data[position++]; - halftoneRegion.mmr = !!(halftoneRegionFlags & 1); - halftoneRegion.template = halftoneRegionFlags >> 1 & 3; - halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8); - halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7; - halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1; - halftoneRegion.gridWidth = (0, _core_utils.readUint32)(data, position); - position += 4; - halftoneRegion.gridHeight = (0, _core_utils.readUint32)(data, position); - position += 4; - halftoneRegion.gridOffsetX = (0, _core_utils.readUint32)(data, position) & 0xffffffff; - position += 4; - halftoneRegion.gridOffsetY = (0, _core_utils.readUint32)(data, position) & 0xffffffff; - position += 4; - halftoneRegion.gridVectorX = (0, _core_utils.readUint16)(data, position); - position += 2; - halftoneRegion.gridVectorY = (0, _core_utils.readUint16)(data, position); - position += 2; - args = [halftoneRegion, header.referredTo, data, position, end]; - break; - case 38: - case 39: - const genericRegion = {}; - genericRegion.info = readRegionSegmentInformation(data, position); - position += RegionSegmentInformationFieldLength; - const genericRegionSegmentFlags = data[position++]; - genericRegion.mmr = !!(genericRegionSegmentFlags & 1); - genericRegion.template = genericRegionSegmentFlags >> 1 & 3; - genericRegion.prediction = !!(genericRegionSegmentFlags & 8); - if (!genericRegion.mmr) { - atLength = genericRegion.template === 0 ? 4 : 1; - at = []; - for (i = 0; i < atLength; i++) { - at.push({ - x: (0, _core_utils.readInt8)(data, position), - y: (0, _core_utils.readInt8)(data, position + 1) - }); - position += 2; - } - genericRegion.at = at; - } - args = [genericRegion, data, position, end]; - break; - case 48: - const pageInfo = { - width: (0, _core_utils.readUint32)(data, position), - height: (0, _core_utils.readUint32)(data, position + 4), - resolutionX: (0, _core_utils.readUint32)(data, position + 8), - resolutionY: (0, _core_utils.readUint32)(data, position + 12) - }; - if (pageInfo.height === 0xffffffff) { - delete pageInfo.height; - } - const pageSegmentFlags = data[position + 16]; - (0, _core_utils.readUint16)(data, position + 17); - pageInfo.lossless = !!(pageSegmentFlags & 1); - pageInfo.refinement = !!(pageSegmentFlags & 2); - pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1; - pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3; - pageInfo.requiresBuffer = !!(pageSegmentFlags & 32); - pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64); - args = [pageInfo]; - break; - case 49: - break; - case 50: - break; - case 51: - break; - case 53: - args = [header.number, data, position, end]; - break; - case 62: - break; - default: - throw new Jbig2Error(`segment type ${header.typeName}(${header.type}) is not implemented`); - } - const callbackName = "on" + header.typeName; - if (callbackName in visitor) { - visitor[callbackName].apply(visitor, args); - } -} -function processSegments(segments, visitor) { - for (let i = 0, ii = segments.length; i < ii; i++) { - processSegment(segments[i], visitor); - } -} -function parseJbig2Chunks(chunks) { - const visitor = new SimpleSegmentVisitor(); - for (let i = 0, ii = chunks.length; i < ii; i++) { - const chunk = chunks[i]; - const segments = readSegments({}, chunk.data, chunk.start, chunk.end); - processSegments(segments, visitor); - } - return visitor.buffer; -} -function parseJbig2(data) { - throw new Error("Not implemented: parseJbig2"); -} -class SimpleSegmentVisitor { - onPageInformation(info) { - this.currentPageInfo = info; - const rowSize = info.width + 7 >> 3; - const buffer = new Uint8ClampedArray(rowSize * info.height); - if (info.defaultPixelValue) { - buffer.fill(0xff); - } - this.buffer = buffer; - } - drawBitmap(regionInfo, bitmap) { - const pageInfo = this.currentPageInfo; - const width = regionInfo.width, - height = regionInfo.height; - const rowSize = pageInfo.width + 7 >> 3; - const combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator; - const buffer = this.buffer; - const mask0 = 128 >> (regionInfo.x & 7); - let offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3); - let i, j, mask, offset; - switch (combinationOperator) { - case 0: - for (i = 0; i < height; i++) { - mask = mask0; - offset = offset0; - for (j = 0; j < width; j++) { - if (bitmap[i][j]) { - buffer[offset] |= mask; - } - mask >>= 1; - if (!mask) { - mask = 128; - offset++; - } - } - offset0 += rowSize; - } - break; - case 2: - for (i = 0; i < height; i++) { - mask = mask0; - offset = offset0; - for (j = 0; j < width; j++) { - if (bitmap[i][j]) { - buffer[offset] ^= mask; - } - mask >>= 1; - if (!mask) { - mask = 128; - offset++; - } - } - offset0 += rowSize; - } - break; - default: - throw new Jbig2Error(`operator ${combinationOperator} is not supported`); - } - } - onImmediateGenericRegion(region, data, start, end) { - const regionInfo = region.info; - const decodingContext = new DecodingContext(data, start, end); - const bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext); - this.drawBitmap(regionInfo, bitmap); - } - onImmediateLosslessGenericRegion() { - this.onImmediateGenericRegion(...arguments); - } - onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) { - let huffmanTables, huffmanInput; - if (dictionary.huffman) { - huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables); - huffmanInput = new Reader(data, start, end); - } - let symbols = this.symbols; - if (!symbols) { - this.symbols = symbols = {}; - } - const inputSymbols = []; - for (const referredSegment of referredSegments) { - const referredSymbols = symbols[referredSegment]; - if (referredSymbols) { - inputSymbols.push(...referredSymbols); - } - } - const decodingContext = new DecodingContext(data, start, end); - symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput); - } - onImmediateTextRegion(region, referredSegments, data, start, end) { - const regionInfo = region.info; - let huffmanTables, huffmanInput; - const symbols = this.symbols; - const inputSymbols = []; - for (const referredSegment of referredSegments) { - const referredSymbols = symbols[referredSegment]; - if (referredSymbols) { - inputSymbols.push(...referredSymbols); - } - } - const symbolCodeLength = (0, _core_utils.log2)(inputSymbols.length); - if (region.huffman) { - huffmanInput = new Reader(data, start, end); - huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput); - } - const decodingContext = new DecodingContext(data, start, end); - const bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput); - this.drawBitmap(regionInfo, bitmap); - } - onImmediateLosslessTextRegion() { - this.onImmediateTextRegion(...arguments); - } - onPatternDictionary(dictionary, currentSegment, data, start, end) { - let patterns = this.patterns; - if (!patterns) { - this.patterns = patterns = {}; - } - const decodingContext = new DecodingContext(data, start, end); - patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext); - } - onImmediateHalftoneRegion(region, referredSegments, data, start, end) { - const patterns = this.patterns[referredSegments[0]]; - const regionInfo = region.info; - const decodingContext = new DecodingContext(data, start, end); - const bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext); - this.drawBitmap(regionInfo, bitmap); - } - onImmediateLosslessHalftoneRegion() { - this.onImmediateHalftoneRegion(...arguments); - } - onTables(currentSegment, data, start, end) { - let customTables = this.customTables; - if (!customTables) { - this.customTables = customTables = {}; - } - customTables[currentSegment] = decodeTablesSegment(data, start, end); - } -} -class HuffmanLine { - constructor(lineData) { - if (lineData.length === 2) { - this.isOOB = true; - this.rangeLow = 0; - this.prefixLength = lineData[0]; - this.rangeLength = 0; - this.prefixCode = lineData[1]; - this.isLowerRange = false; - } else { - this.isOOB = false; - this.rangeLow = lineData[0]; - this.prefixLength = lineData[1]; - this.rangeLength = lineData[2]; - this.prefixCode = lineData[3]; - this.isLowerRange = lineData[4] === "lower"; - } - } -} -class HuffmanTreeNode { - constructor(line) { - this.children = []; - if (line) { - this.isLeaf = true; - this.rangeLength = line.rangeLength; - this.rangeLow = line.rangeLow; - this.isLowerRange = line.isLowerRange; - this.isOOB = line.isOOB; - } else { - this.isLeaf = false; - } - } - buildTree(line, shift) { - const bit = line.prefixCode >> shift & 1; - if (shift <= 0) { - this.children[bit] = new HuffmanTreeNode(line); - } else { - let node = this.children[bit]; - if (!node) { - this.children[bit] = node = new HuffmanTreeNode(null); - } - node.buildTree(line, shift - 1); - } - } - decodeNode(reader) { - if (this.isLeaf) { - if (this.isOOB) { - return null; - } - const htOffset = reader.readBits(this.rangeLength); - return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset); - } - const node = this.children[reader.readBit()]; - if (!node) { - throw new Jbig2Error("invalid Huffman data"); - } - return node.decodeNode(reader); - } -} -class HuffmanTable { - constructor(lines, prefixCodesDone) { - if (!prefixCodesDone) { - this.assignPrefixCodes(lines); - } - this.rootNode = new HuffmanTreeNode(null); - for (let i = 0, ii = lines.length; i < ii; i++) { - const line = lines[i]; - if (line.prefixLength > 0) { - this.rootNode.buildTree(line, line.prefixLength - 1); - } - } - } - decode(reader) { - return this.rootNode.decodeNode(reader); - } - assignPrefixCodes(lines) { - const linesLength = lines.length; - let prefixLengthMax = 0; - for (let i = 0; i < linesLength; i++) { - prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength); - } - const histogram = new Uint32Array(prefixLengthMax + 1); - for (let i = 0; i < linesLength; i++) { - histogram[lines[i].prefixLength]++; - } - let currentLength = 1, - firstCode = 0, - currentCode, - currentTemp, - line; - histogram[0] = 0; - while (currentLength <= prefixLengthMax) { - firstCode = firstCode + histogram[currentLength - 1] << 1; - currentCode = firstCode; - currentTemp = 0; - while (currentTemp < linesLength) { - line = lines[currentTemp]; - if (line.prefixLength === currentLength) { - line.prefixCode = currentCode; - currentCode++; - } - currentTemp++; - } - currentLength++; - } - } -} -function decodeTablesSegment(data, start, end) { - const flags = data[start]; - const lowestValue = (0, _core_utils.readUint32)(data, start + 1) & 0xffffffff; - const highestValue = (0, _core_utils.readUint32)(data, start + 5) & 0xffffffff; - const reader = new Reader(data, start + 9, end); - const prefixSizeBits = (flags >> 1 & 7) + 1; - const rangeSizeBits = (flags >> 4 & 7) + 1; - const lines = []; - let prefixLength, - rangeLength, - currentRangeLow = lowestValue; - do { - prefixLength = reader.readBits(prefixSizeBits); - rangeLength = reader.readBits(rangeSizeBits); - lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0])); - currentRangeLow += 1 << rangeLength; - } while (currentRangeLow < highestValue); - prefixLength = reader.readBits(prefixSizeBits); - lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, "lower"])); - prefixLength = reader.readBits(prefixSizeBits); - lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0])); - if (flags & 1) { - prefixLength = reader.readBits(prefixSizeBits); - lines.push(new HuffmanLine([prefixLength, 0])); - } - return new HuffmanTable(lines, false); -} -const standardTablesCache = {}; -function getStandardTable(number) { - let table = standardTablesCache[number]; - if (table) { - return table; - } - let lines; - switch (number) { - case 1: - lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]]; - break; - case 2: - lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [75, 6, 32, 0x3e], [6, 0x3f]]; - break; - case 3: - lines = [[-256, 8, 8, 0xfe], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [-257, 8, 32, 0xff, "lower"], [75, 7, 32, 0x7e], [6, 0x3e]]; - break; - case 4: - lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [76, 5, 32, 0x1f]]; - break; - case 5: - lines = [[-255, 7, 8, 0x7e], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [-256, 7, 32, 0x7f, "lower"], [76, 6, 32, 0x3e]]; - break; - case 6: - lines = [[-2048, 5, 10, 0x1c], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xa], [-128, 5, 6, 0x1d], [-64, 5, 5, 0x1e], [-32, 4, 5, 0xb], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xc], [1024, 4, 10, 0xd], [-2049, 6, 32, 0x3e, "lower"], [2048, 6, 32, 0x3f]]; - break; - case 7: - lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1a], [-64, 5, 5, 0x1b], [-32, 4, 5, 0xa], [0, 4, 5, 0xb], [32, 5, 5, 0x1c], [64, 5, 6, 0x1d], [128, 4, 7, 0xc], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1e, "lower"], [2048, 5, 32, 0x1f]]; - break; - case 8: - lines = [[-15, 8, 3, 0xfc], [-7, 9, 1, 0x1fc], [-5, 8, 1, 0xfd], [-3, 9, 0, 0x1fd], [-2, 7, 0, 0x7c], [-1, 4, 0, 0xa], [0, 2, 1, 0x0], [2, 5, 0, 0x1a], [3, 6, 0, 0x3a], [4, 3, 4, 0x4], [20, 6, 1, 0x3b], [22, 4, 4, 0xb], [38, 4, 5, 0xc], [70, 5, 6, 0x1b], [134, 5, 7, 0x1c], [262, 6, 7, 0x3c], [390, 7, 8, 0x7d], [646, 6, 10, 0x3d], [-16, 9, 32, 0x1fe, "lower"], [1670, 9, 32, 0x1ff], [2, 0x1]]; - break; - case 9: - lines = [[-31, 8, 4, 0xfc], [-15, 9, 2, 0x1fc], [-11, 8, 2, 0xfd], [-7, 9, 1, 0x1fd], [-5, 7, 1, 0x7c], [-3, 4, 1, 0xa], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1a], [5, 6, 1, 0x3a], [7, 3, 5, 0x4], [39, 6, 2, 0x3b], [43, 4, 5, 0xb], [75, 4, 6, 0xc], [139, 5, 7, 0x1b], [267, 5, 8, 0x1c], [523, 6, 8, 0x3c], [779, 7, 9, 0x7d], [1291, 6, 11, 0x3d], [-32, 9, 32, 0x1fe, "lower"], [3339, 9, 32, 0x1ff], [2, 0x0]]; - break; - case 10: - lines = [[-21, 7, 4, 0x7a], [-5, 8, 0, 0xfc], [-4, 7, 0, 0x7b], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7c], [5, 8, 0, 0xfd], [6, 2, 6, 0x1], [70, 5, 5, 0x1a], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3a], [582, 6, 9, 0x3b], [1094, 6, 10, 0x3c], [2118, 7, 11, 0x7d], [-22, 8, 32, 0xfe, "lower"], [4166, 8, 32, 0xff], [2, 0x2]]; - break; - case 11: - lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xc], [5, 4, 1, 0xd], [7, 5, 1, 0x1c], [9, 5, 2, 0x1d], [13, 6, 2, 0x3c], [17, 7, 2, 0x7a], [21, 7, 3, 0x7b], [29, 7, 4, 0x7c], [45, 7, 5, 0x7d], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]]; - break; - case 12: - lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1c], [6, 5, 1, 0x1d], [8, 6, 1, 0x3c], [10, 7, 0, 0x7a], [11, 7, 1, 0x7b], [13, 7, 2, 0x7c], [17, 7, 3, 0x7d], [25, 7, 4, 0x7e], [41, 8, 5, 0xfe], [73, 8, 32, 0xff]]; - break; - case 13: - lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xc], [4, 5, 0, 0x1c], [5, 4, 1, 0xd], [7, 3, 3, 0x5], [15, 6, 1, 0x3a], [17, 6, 2, 0x3b], [21, 6, 3, 0x3c], [29, 6, 4, 0x3d], [45, 6, 5, 0x3e], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]]; - break; - case 14: - lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]]; - break; - case 15: - lines = [[-24, 7, 4, 0x7c], [-8, 6, 2, 0x3c], [-4, 5, 1, 0x1c], [-2, 4, 0, 0xc], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xd], [3, 5, 1, 0x1d], [5, 6, 2, 0x3d], [9, 7, 4, 0x7d], [-25, 7, 32, 0x7e, "lower"], [25, 7, 32, 0x7f]]; - break; - default: - throw new Jbig2Error(`standard table B.${number} does not exist`); - } - for (let i = 0, ii = lines.length; i < ii; i++) { - lines[i] = new HuffmanLine(lines[i]); - } - table = new HuffmanTable(lines, true); - standardTablesCache[number] = table; - return table; -} -class Reader { - constructor(data, start, end) { - this.data = data; - this.start = start; - this.end = end; - this.position = start; - this.shift = -1; - this.currentByte = 0; - } - readBit() { - if (this.shift < 0) { - if (this.position >= this.end) { - throw new Jbig2Error("end of data while reading bit"); - } - this.currentByte = this.data[this.position++]; - this.shift = 7; - } - const bit = this.currentByte >> this.shift & 1; - this.shift--; - return bit; - } - readBits(numBits) { - let result = 0, - i; - for (i = numBits - 1; i >= 0; i--) { - result |= this.readBit() << i; - } - return result; - } - byteAlign() { - this.shift = -1; - } - next() { - if (this.position >= this.end) { - return -1; - } - return this.data[this.position++]; - } -} -function getCustomHuffmanTable(index, referredTo, customTables) { - let currentIndex = 0; - for (let i = 0, ii = referredTo.length; i < ii; i++) { - const table = customTables[referredTo[i]]; - if (table) { - if (index === currentIndex) { - return table; - } - currentIndex++; - } - } - throw new Jbig2Error("can't find custom Huffman table"); -} -function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) { - const codes = []; - for (let i = 0; i <= 34; i++) { - const codeLength = reader.readBits(4); - codes.push(new HuffmanLine([i, codeLength, 0, 0])); - } - const runCodesTable = new HuffmanTable(codes, false); - codes.length = 0; - for (let i = 0; i < numberOfSymbols;) { - const codeLength = runCodesTable.decode(reader); - if (codeLength >= 32) { - let repeatedLength, numberOfRepeats, j; - switch (codeLength) { - case 32: - if (i === 0) { - throw new Jbig2Error("no previous value in symbol ID table"); - } - numberOfRepeats = reader.readBits(2) + 3; - repeatedLength = codes[i - 1].prefixLength; - break; - case 33: - numberOfRepeats = reader.readBits(3) + 3; - repeatedLength = 0; - break; - case 34: - numberOfRepeats = reader.readBits(7) + 11; - repeatedLength = 0; - break; - default: - throw new Jbig2Error("invalid code length in symbol ID table"); - } - for (j = 0; j < numberOfRepeats; j++) { - codes.push(new HuffmanLine([i, repeatedLength, 0, 0])); - i++; - } - } else { - codes.push(new HuffmanLine([i, codeLength, 0, 0])); - i++; - } - } - reader.byteAlign(); - const symbolIDTable = new HuffmanTable(codes, false); - let customIndex = 0, - tableFirstS, - tableDeltaS, - tableDeltaT; - switch (textRegion.huffmanFS) { - case 0: - case 1: - tableFirstS = getStandardTable(textRegion.huffmanFS + 6); - break; - case 3: - tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - break; - default: - throw new Jbig2Error("invalid Huffman FS selector"); - } - switch (textRegion.huffmanDS) { - case 0: - case 1: - case 2: - tableDeltaS = getStandardTable(textRegion.huffmanDS + 8); - break; - case 3: - tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - break; - default: - throw new Jbig2Error("invalid Huffman DS selector"); - } - switch (textRegion.huffmanDT) { - case 0: - case 1: - case 2: - tableDeltaT = getStandardTable(textRegion.huffmanDT + 11); - break; - case 3: - tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - break; - default: - throw new Jbig2Error("invalid Huffman DT selector"); - } - if (textRegion.refinement) { - throw new Jbig2Error("refinement with Huffman is not supported"); - } - return { - symbolIDTable, - tableFirstS, - tableDeltaS, - tableDeltaT - }; -} -function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) { - let customIndex = 0, - tableDeltaHeight, - tableDeltaWidth; - switch (dictionary.huffmanDHSelector) { - case 0: - case 1: - tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4); - break; - case 3: - tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - break; - default: - throw new Jbig2Error("invalid Huffman DH selector"); - } - switch (dictionary.huffmanDWSelector) { - case 0: - case 1: - tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2); - break; - case 3: - tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - break; - default: - throw new Jbig2Error("invalid Huffman DW selector"); - } - let tableBitmapSize, tableAggregateInstances; - if (dictionary.bitmapSizeSelector) { - tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - } else { - tableBitmapSize = getStandardTable(1); - } - if (dictionary.aggregationInstancesSelector) { - tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables); - } else { - tableAggregateInstances = getStandardTable(1); - } - return { - tableDeltaHeight, - tableDeltaWidth, - tableBitmapSize, - tableAggregateInstances - }; -} -function readUncompressedBitmap(reader, width, height) { - const bitmap = []; - for (let y = 0; y < height; y++) { - const row = new Uint8Array(width); - bitmap.push(row); - for (let x = 0; x < width; x++) { - row[x] = reader.readBit(); - } - reader.byteAlign(); - } - return bitmap; -} -function decodeMMRBitmap(input, width, height, endOfBlock) { - const params = { - K: -1, - Columns: width, - Rows: height, - BlackIs1: true, - EndOfBlock: endOfBlock - }; - const decoder = new _ccitt.CCITTFaxDecoder(input, params); - const bitmap = []; - let currentByte, - eof = false; - for (let y = 0; y < height; y++) { - const row = new Uint8Array(width); - bitmap.push(row); - let shift = -1; - for (let x = 0; x < width; x++) { - if (shift < 0) { - currentByte = decoder.readNextChar(); - if (currentByte === -1) { - currentByte = 0; - eof = true; - } - shift = 7; - } - row[x] = currentByte >> shift & 1; - shift--; - } - } - if (endOfBlock && !eof) { - const lookForEOFLimit = 5; - for (let i = 0; i < lookForEOFLimit; i++) { - if (decoder.readNextChar() === -1) { - break; - } - } - } - return bitmap; -} -class Jbig2Image { - parseChunks(chunks) { - return parseJbig2Chunks(chunks); - } - parse(data) { - throw new Error("Not implemented: Jbig2Image.parse"); - } -} -exports.Jbig2Image = Jbig2Image; - -/***/ }), -/* 25 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ArithmeticDecoder = void 0; -const QeTable = [{ - qe: 0x5601, - nmps: 1, - nlps: 1, - switchFlag: 1 -}, { - qe: 0x3401, - nmps: 2, - nlps: 6, - switchFlag: 0 -}, { - qe: 0x1801, - nmps: 3, - nlps: 9, - switchFlag: 0 -}, { - qe: 0x0ac1, - nmps: 4, - nlps: 12, - switchFlag: 0 -}, { - qe: 0x0521, - nmps: 5, - nlps: 29, - switchFlag: 0 -}, { - qe: 0x0221, - nmps: 38, - nlps: 33, - switchFlag: 0 -}, { - qe: 0x5601, - nmps: 7, - nlps: 6, - switchFlag: 1 -}, { - qe: 0x5401, - nmps: 8, - nlps: 14, - switchFlag: 0 -}, { - qe: 0x4801, - nmps: 9, - nlps: 14, - switchFlag: 0 -}, { - qe: 0x3801, - nmps: 10, - nlps: 14, - switchFlag: 0 -}, { - qe: 0x3001, - nmps: 11, - nlps: 17, - switchFlag: 0 -}, { - qe: 0x2401, - nmps: 12, - nlps: 18, - switchFlag: 0 -}, { - qe: 0x1c01, - nmps: 13, - nlps: 20, - switchFlag: 0 -}, { - qe: 0x1601, - nmps: 29, - nlps: 21, - switchFlag: 0 -}, { - qe: 0x5601, - nmps: 15, - nlps: 14, - switchFlag: 1 -}, { - qe: 0x5401, - nmps: 16, - nlps: 14, - switchFlag: 0 -}, { - qe: 0x5101, - nmps: 17, - nlps: 15, - switchFlag: 0 -}, { - qe: 0x4801, - nmps: 18, - nlps: 16, - switchFlag: 0 -}, { - qe: 0x3801, - nmps: 19, - nlps: 17, - switchFlag: 0 -}, { - qe: 0x3401, - nmps: 20, - nlps: 18, - switchFlag: 0 -}, { - qe: 0x3001, - nmps: 21, - nlps: 19, - switchFlag: 0 -}, { - qe: 0x2801, - nmps: 22, - nlps: 19, - switchFlag: 0 -}, { - qe: 0x2401, - nmps: 23, - nlps: 20, - switchFlag: 0 -}, { - qe: 0x2201, - nmps: 24, - nlps: 21, - switchFlag: 0 -}, { - qe: 0x1c01, - nmps: 25, - nlps: 22, - switchFlag: 0 -}, { - qe: 0x1801, - nmps: 26, - nlps: 23, - switchFlag: 0 -}, { - qe: 0x1601, - nmps: 27, - nlps: 24, - switchFlag: 0 -}, { - qe: 0x1401, - nmps: 28, - nlps: 25, - switchFlag: 0 -}, { - qe: 0x1201, - nmps: 29, - nlps: 26, - switchFlag: 0 -}, { - qe: 0x1101, - nmps: 30, - nlps: 27, - switchFlag: 0 -}, { - qe: 0x0ac1, - nmps: 31, - nlps: 28, - switchFlag: 0 -}, { - qe: 0x09c1, - nmps: 32, - nlps: 29, - switchFlag: 0 -}, { - qe: 0x08a1, - nmps: 33, - nlps: 30, - switchFlag: 0 -}, { - qe: 0x0521, - nmps: 34, - nlps: 31, - switchFlag: 0 -}, { - qe: 0x0441, - nmps: 35, - nlps: 32, - switchFlag: 0 -}, { - qe: 0x02a1, - nmps: 36, - nlps: 33, - switchFlag: 0 -}, { - qe: 0x0221, - nmps: 37, - nlps: 34, - switchFlag: 0 -}, { - qe: 0x0141, - nmps: 38, - nlps: 35, - switchFlag: 0 -}, { - qe: 0x0111, - nmps: 39, - nlps: 36, - switchFlag: 0 -}, { - qe: 0x0085, - nmps: 40, - nlps: 37, - switchFlag: 0 -}, { - qe: 0x0049, - nmps: 41, - nlps: 38, - switchFlag: 0 -}, { - qe: 0x0025, - nmps: 42, - nlps: 39, - switchFlag: 0 -}, { - qe: 0x0015, - nmps: 43, - nlps: 40, - switchFlag: 0 -}, { - qe: 0x0009, - nmps: 44, - nlps: 41, - switchFlag: 0 -}, { - qe: 0x0005, - nmps: 45, - nlps: 42, - switchFlag: 0 -}, { - qe: 0x0001, - nmps: 45, - nlps: 43, - switchFlag: 0 -}, { - qe: 0x5601, - nmps: 46, - nlps: 46, - switchFlag: 0 -}]; -class ArithmeticDecoder { - constructor(data, start, end) { - this.data = data; - this.bp = start; - this.dataEnd = end; - this.chigh = data[start]; - this.clow = 0; - this.byteIn(); - this.chigh = this.chigh << 7 & 0xffff | this.clow >> 9 & 0x7f; - this.clow = this.clow << 7 & 0xffff; - this.ct -= 7; - this.a = 0x8000; - } - byteIn() { - const data = this.data; - let bp = this.bp; - if (data[bp] === 0xff) { - if (data[bp + 1] > 0x8f) { - this.clow += 0xff00; - this.ct = 8; - } else { - bp++; - this.clow += data[bp] << 9; - this.ct = 7; - this.bp = bp; - } - } else { - bp++; - this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xff00; - this.ct = 8; - this.bp = bp; - } - if (this.clow > 0xffff) { - this.chigh += this.clow >> 16; - this.clow &= 0xffff; - } - } - readBit(contexts, pos) { - let cx_index = contexts[pos] >> 1, - cx_mps = contexts[pos] & 1; - const qeTableIcx = QeTable[cx_index]; - const qeIcx = qeTableIcx.qe; - let d; - let a = this.a - qeIcx; - if (this.chigh < qeIcx) { - if (a < qeIcx) { - a = qeIcx; - d = cx_mps; - cx_index = qeTableIcx.nmps; - } else { - a = qeIcx; - d = 1 ^ cx_mps; - if (qeTableIcx.switchFlag === 1) { - cx_mps = d; - } - cx_index = qeTableIcx.nlps; - } - } else { - this.chigh -= qeIcx; - if ((a & 0x8000) !== 0) { - this.a = a; - return cx_mps; - } - if (a < qeIcx) { - d = 1 ^ cx_mps; - if (qeTableIcx.switchFlag === 1) { - cx_mps = d; - } - cx_index = qeTableIcx.nlps; - } else { - d = cx_mps; - cx_index = qeTableIcx.nmps; - } - } - do { - if (this.ct === 0) { - this.byteIn(); - } - a <<= 1; - this.chigh = this.chigh << 1 & 0xffff | this.clow >> 15 & 1; - this.clow = this.clow << 1 & 0xffff; - this.ct--; - } while ((a & 0x8000) === 0); - this.a = a; - contexts[pos] = cx_index << 1 | cx_mps; - return d; - } -} -exports.ArithmeticDecoder = ArithmeticDecoder; - -/***/ }), -/* 26 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.JpegStream = void 0; -var _decode_stream = __w_pdfjs_require__(18); -var _primitives = __w_pdfjs_require__(4); -var _jpg = __w_pdfjs_require__(27); -var _util = __w_pdfjs_require__(2); -class JpegStream extends _decode_stream.DecodeStream { - constructor(stream, maybeLength, params) { - let ch; - while ((ch = stream.getByte()) !== -1) { - if (ch === 0xff) { - stream.skip(-1); - break; - } - } - super(maybeLength); - this.stream = stream; - this.dict = stream.dict; - this.maybeLength = maybeLength; - this.params = params; - } - get bytes() { - return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); - } - ensureBuffer(requested) {} - readBlock() { - if (this.eof) { - return; - } - const jpegOptions = { - decodeTransform: undefined, - colorTransform: undefined - }; - const decodeArr = this.dict.getArray("D", "Decode"); - if ((this.forceRGBA || this.forceRGB) && Array.isArray(decodeArr)) { - const bitsPerComponent = this.dict.get("BPC", "BitsPerComponent") || 8; - const decodeArrLength = decodeArr.length; - const transform = new Int32Array(decodeArrLength); - let transformNeeded = false; - const maxValue = (1 << bitsPerComponent) - 1; - for (let i = 0; i < decodeArrLength; i += 2) { - transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0; - transform[i + 1] = decodeArr[i] * maxValue | 0; - if (transform[i] !== 256 || transform[i + 1] !== 0) { - transformNeeded = true; - } - } - if (transformNeeded) { - jpegOptions.decodeTransform = transform; - } - } - if (this.params instanceof _primitives.Dict) { - const colorTransform = this.params.get("ColorTransform"); - if (Number.isInteger(colorTransform)) { - jpegOptions.colorTransform = colorTransform; - } - } - const jpegImage = new _jpg.JpegImage(jpegOptions); - jpegImage.parse(this.bytes); - const data = jpegImage.getData({ - width: this.drawWidth, - height: this.drawHeight, - forceRGBA: this.forceRGBA, - forceRGB: this.forceRGB, - isSourcePDF: true - }); - this.buffer = data; - this.bufferLength = data.length; - this.eof = true; - } -} -exports.JpegStream = JpegStream; - -/***/ }), -/* 27 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.JpegImage = void 0; -var _util = __w_pdfjs_require__(2); -var _image_utils = __w_pdfjs_require__(28); -var _core_utils = __w_pdfjs_require__(3); -class JpegError extends _util.BaseException { - constructor(msg) { - super(`JPEG error: ${msg}`, "JpegError"); - } -} -class DNLMarkerError extends _util.BaseException { - constructor(message, scanLines) { - super(message, "DNLMarkerError"); - this.scanLines = scanLines; - } -} -class EOIMarkerError extends _util.BaseException { - constructor(msg) { - super(msg, "EOIMarkerError"); - } -} -const dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]); -const dctCos1 = 4017; -const dctSin1 = 799; -const dctCos3 = 3406; -const dctSin3 = 2276; -const dctCos6 = 1567; -const dctSin6 = 3784; -const dctSqrt2 = 5793; -const dctSqrt1d2 = 2896; -function buildHuffmanTable(codeLengths, values) { - let k = 0, - i, - j, - length = 16; - while (length > 0 && !codeLengths[length - 1]) { - length--; - } - const code = [{ - children: [], - index: 0 - }]; - let p = code[0], - q; - for (i = 0; i < length; i++) { - for (j = 0; j < codeLengths[i]; j++) { - p = code.pop(); - p.children[p.index] = values[k]; - while (p.index > 0) { - p = code.pop(); - } - p.index++; - code.push(p); - while (code.length <= i) { - code.push(q = { - children: [], - index: 0 - }); - p.children[p.index] = q.children; - p = q; - } - k++; - } - if (i + 1 < length) { - code.push(q = { - children: [], - index: 0 - }); - p.children[p.index] = q.children; - p = q; - } - } - return code[0].children; -} -function getBlockBufferOffset(component, row, col) { - return 64 * ((component.blocksPerLine + 1) * row + col); -} -function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) { - const mcusPerLine = frame.mcusPerLine; - const progressive = frame.progressive; - const startOffset = offset; - let bitsData = 0, - bitsCount = 0; - function readBit() { - if (bitsCount > 0) { - bitsCount--; - return bitsData >> bitsCount & 1; - } - bitsData = data[offset++]; - if (bitsData === 0xff) { - const nextByte = data[offset++]; - if (nextByte) { - if (nextByte === 0xdc && parseDNLMarker) { - offset += 2; - const scanLines = (0, _core_utils.readUint16)(data, offset); - offset += 2; - if (scanLines > 0 && scanLines !== frame.scanLines) { - throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data", scanLines); - } - } else if (nextByte === 0xd9) { - if (parseDNLMarker) { - const maybeScanLines = blockRow * (frame.precision === 8 ? 8 : 0); - if (maybeScanLines > 0 && Math.round(frame.scanLines / maybeScanLines) >= 5) { - throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, " + "possibly caused by incorrect `scanLines` parameter", maybeScanLines); - } - } - throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data"); - } - throw new JpegError(`unexpected marker ${(bitsData << 8 | nextByte).toString(16)}`); - } - } - bitsCount = 7; - return bitsData >>> 7; - } - function decodeHuffman(tree) { - let node = tree; - while (true) { - node = node[readBit()]; - switch (typeof node) { - case "number": - return node; - case "object": - continue; - } - throw new JpegError("invalid huffman sequence"); - } - } - function receive(length) { - let n = 0; - while (length > 0) { - n = n << 1 | readBit(); - length--; - } - return n; - } - function receiveAndExtend(length) { - if (length === 1) { - return readBit() === 1 ? 1 : -1; - } - const n = receive(length); - if (n >= 1 << length - 1) { - return n; - } - return n + (-1 << length) + 1; - } - function decodeBaseline(component, blockOffset) { - const t = decodeHuffman(component.huffmanTableDC); - const diff = t === 0 ? 0 : receiveAndExtend(t); - component.blockData[blockOffset] = component.pred += diff; - let k = 1; - while (k < 64) { - const rs = decodeHuffman(component.huffmanTableAC); - const s = rs & 15, - r = rs >> 4; - if (s === 0) { - if (r < 15) { - break; - } - k += 16; - continue; - } - k += r; - const z = dctZigZag[k]; - component.blockData[blockOffset + z] = receiveAndExtend(s); - k++; - } - } - function decodeDCFirst(component, blockOffset) { - const t = decodeHuffman(component.huffmanTableDC); - const diff = t === 0 ? 0 : receiveAndExtend(t) << successive; - component.blockData[blockOffset] = component.pred += diff; - } - function decodeDCSuccessive(component, blockOffset) { - component.blockData[blockOffset] |= readBit() << successive; - } - let eobrun = 0; - function decodeACFirst(component, blockOffset) { - if (eobrun > 0) { - eobrun--; - return; - } - let k = spectralStart; - const e = spectralEnd; - while (k <= e) { - const rs = decodeHuffman(component.huffmanTableAC); - const s = rs & 15, - r = rs >> 4; - if (s === 0) { - if (r < 15) { - eobrun = receive(r) + (1 << r) - 1; - break; - } - k += 16; - continue; - } - k += r; - const z = dctZigZag[k]; - component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive); - k++; - } - } - let successiveACState = 0, - successiveACNextValue; - function decodeACSuccessive(component, blockOffset) { - let k = spectralStart; - const e = spectralEnd; - let r = 0; - let s; - let rs; - while (k <= e) { - const offsetZ = blockOffset + dctZigZag[k]; - const sign = component.blockData[offsetZ] < 0 ? -1 : 1; - switch (successiveACState) { - case 0: - rs = decodeHuffman(component.huffmanTableAC); - s = rs & 15; - r = rs >> 4; - if (s === 0) { - if (r < 15) { - eobrun = receive(r) + (1 << r); - successiveACState = 4; - } else { - r = 16; - successiveACState = 1; - } - } else { - if (s !== 1) { - throw new JpegError("invalid ACn encoding"); - } - successiveACNextValue = receiveAndExtend(s); - successiveACState = r ? 2 : 3; - } - continue; - case 1: - case 2: - if (component.blockData[offsetZ]) { - component.blockData[offsetZ] += sign * (readBit() << successive); - } else { - r--; - if (r === 0) { - successiveACState = successiveACState === 2 ? 3 : 0; - } - } - break; - case 3: - if (component.blockData[offsetZ]) { - component.blockData[offsetZ] += sign * (readBit() << successive); - } else { - component.blockData[offsetZ] = successiveACNextValue << successive; - successiveACState = 0; - } - break; - case 4: - if (component.blockData[offsetZ]) { - component.blockData[offsetZ] += sign * (readBit() << successive); - } - break; - } - k++; - } - if (successiveACState === 4) { - eobrun--; - if (eobrun === 0) { - successiveACState = 0; - } - } - } - let blockRow = 0; - function decodeMcu(component, decode, mcu, row, col) { - const mcuRow = mcu / mcusPerLine | 0; - const mcuCol = mcu % mcusPerLine; - blockRow = mcuRow * component.v + row; - const blockCol = mcuCol * component.h + col; - const blockOffset = getBlockBufferOffset(component, blockRow, blockCol); - decode(component, blockOffset); - } - function decodeBlock(component, decode, mcu) { - blockRow = mcu / component.blocksPerLine | 0; - const blockCol = mcu % component.blocksPerLine; - const blockOffset = getBlockBufferOffset(component, blockRow, blockCol); - decode(component, blockOffset); - } - const componentsLength = components.length; - let component, i, j, k, n; - let decodeFn; - if (progressive) { - if (spectralStart === 0) { - decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive; - } else { - decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive; - } - } else { - decodeFn = decodeBaseline; - } - let mcu = 0, - fileMarker; - const mcuExpected = componentsLength === 1 ? components[0].blocksPerLine * components[0].blocksPerColumn : mcusPerLine * frame.mcusPerColumn; - let h, v; - while (mcu <= mcuExpected) { - const mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected; - if (mcuToRead > 0) { - for (i = 0; i < componentsLength; i++) { - components[i].pred = 0; - } - eobrun = 0; - if (componentsLength === 1) { - component = components[0]; - for (n = 0; n < mcuToRead; n++) { - decodeBlock(component, decodeFn, mcu); - mcu++; - } - } else { - for (n = 0; n < mcuToRead; n++) { - for (i = 0; i < componentsLength; i++) { - component = components[i]; - h = component.h; - v = component.v; - for (j = 0; j < v; j++) { - for (k = 0; k < h; k++) { - decodeMcu(component, decodeFn, mcu, j, k); - } - } - } - mcu++; - } - } - } - bitsCount = 0; - fileMarker = findNextFileMarker(data, offset); - if (!fileMarker) { - break; - } - if (fileMarker.invalid) { - const partialMsg = mcuToRead > 0 ? "unexpected" : "excessive"; - (0, _util.warn)(`decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`); - offset = fileMarker.offset; - } - if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) { - offset += 2; - } else { - break; - } - } - return offset - startOffset; -} -function quantizeAndInverse(component, blockBufferOffset, p) { - const qt = component.quantizationTable, - blockData = component.blockData; - let v0, v1, v2, v3, v4, v5, v6, v7; - let p0, p1, p2, p3, p4, p5, p6, p7; - let t; - if (!qt) { - throw new JpegError("missing required Quantization Table."); - } - for (let row = 0; row < 64; row += 8) { - p0 = blockData[blockBufferOffset + row]; - p1 = blockData[blockBufferOffset + row + 1]; - p2 = blockData[blockBufferOffset + row + 2]; - p3 = blockData[blockBufferOffset + row + 3]; - p4 = blockData[blockBufferOffset + row + 4]; - p5 = blockData[blockBufferOffset + row + 5]; - p6 = blockData[blockBufferOffset + row + 6]; - p7 = blockData[blockBufferOffset + row + 7]; - p0 *= qt[row]; - if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { - t = dctSqrt2 * p0 + 512 >> 10; - p[row] = t; - p[row + 1] = t; - p[row + 2] = t; - p[row + 3] = t; - p[row + 4] = t; - p[row + 5] = t; - p[row + 6] = t; - p[row + 7] = t; - continue; - } - p1 *= qt[row + 1]; - p2 *= qt[row + 2]; - p3 *= qt[row + 3]; - p4 *= qt[row + 4]; - p5 *= qt[row + 5]; - p6 *= qt[row + 6]; - p7 *= qt[row + 7]; - v0 = dctSqrt2 * p0 + 128 >> 8; - v1 = dctSqrt2 * p4 + 128 >> 8; - v2 = p2; - v3 = p6; - v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8; - v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8; - v5 = p3 << 4; - v6 = p5 << 4; - v0 = v0 + v1 + 1 >> 1; - v1 = v0 - v1; - t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8; - v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8; - v3 = t; - v4 = v4 + v6 + 1 >> 1; - v6 = v4 - v6; - v7 = v7 + v5 + 1 >> 1; - v5 = v7 - v5; - v0 = v0 + v3 + 1 >> 1; - v3 = v0 - v3; - v1 = v1 + v2 + 1 >> 1; - v2 = v1 - v2; - t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; - v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; - v7 = t; - t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; - v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; - v6 = t; - p[row] = v0 + v7; - p[row + 7] = v0 - v7; - p[row + 1] = v1 + v6; - p[row + 6] = v1 - v6; - p[row + 2] = v2 + v5; - p[row + 5] = v2 - v5; - p[row + 3] = v3 + v4; - p[row + 4] = v3 - v4; - } - for (let col = 0; col < 8; ++col) { - p0 = p[col]; - p1 = p[col + 8]; - p2 = p[col + 16]; - p3 = p[col + 24]; - p4 = p[col + 32]; - p5 = p[col + 40]; - p6 = p[col + 48]; - p7 = p[col + 56]; - if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { - t = dctSqrt2 * p0 + 8192 >> 14; - if (t < -2040) { - t = 0; - } else if (t >= 2024) { - t = 255; - } else { - t = t + 2056 >> 4; - } - blockData[blockBufferOffset + col] = t; - blockData[blockBufferOffset + col + 8] = t; - blockData[blockBufferOffset + col + 16] = t; - blockData[blockBufferOffset + col + 24] = t; - blockData[blockBufferOffset + col + 32] = t; - blockData[blockBufferOffset + col + 40] = t; - blockData[blockBufferOffset + col + 48] = t; - blockData[blockBufferOffset + col + 56] = t; - continue; - } - v0 = dctSqrt2 * p0 + 2048 >> 12; - v1 = dctSqrt2 * p4 + 2048 >> 12; - v2 = p2; - v3 = p6; - v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12; - v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12; - v5 = p3; - v6 = p5; - v0 = (v0 + v1 + 1 >> 1) + 4112; - v1 = v0 - v1; - t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12; - v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12; - v3 = t; - v4 = v4 + v6 + 1 >> 1; - v6 = v4 - v6; - v7 = v7 + v5 + 1 >> 1; - v5 = v7 - v5; - v0 = v0 + v3 + 1 >> 1; - v3 = v0 - v3; - v1 = v1 + v2 + 1 >> 1; - v2 = v1 - v2; - t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; - v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; - v7 = t; - t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; - v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; - v6 = t; - p0 = v0 + v7; - p7 = v0 - v7; - p1 = v1 + v6; - p6 = v1 - v6; - p2 = v2 + v5; - p5 = v2 - v5; - p3 = v3 + v4; - p4 = v3 - v4; - if (p0 < 16) { - p0 = 0; - } else if (p0 >= 4080) { - p0 = 255; - } else { - p0 >>= 4; - } - if (p1 < 16) { - p1 = 0; - } else if (p1 >= 4080) { - p1 = 255; - } else { - p1 >>= 4; - } - if (p2 < 16) { - p2 = 0; - } else if (p2 >= 4080) { - p2 = 255; - } else { - p2 >>= 4; - } - if (p3 < 16) { - p3 = 0; - } else if (p3 >= 4080) { - p3 = 255; - } else { - p3 >>= 4; - } - if (p4 < 16) { - p4 = 0; - } else if (p4 >= 4080) { - p4 = 255; - } else { - p4 >>= 4; - } - if (p5 < 16) { - p5 = 0; - } else if (p5 >= 4080) { - p5 = 255; - } else { - p5 >>= 4; - } - if (p6 < 16) { - p6 = 0; - } else if (p6 >= 4080) { - p6 = 255; - } else { - p6 >>= 4; - } - if (p7 < 16) { - p7 = 0; - } else if (p7 >= 4080) { - p7 = 255; - } else { - p7 >>= 4; - } - blockData[blockBufferOffset + col] = p0; - blockData[blockBufferOffset + col + 8] = p1; - blockData[blockBufferOffset + col + 16] = p2; - blockData[blockBufferOffset + col + 24] = p3; - blockData[blockBufferOffset + col + 32] = p4; - blockData[blockBufferOffset + col + 40] = p5; - blockData[blockBufferOffset + col + 48] = p6; - blockData[blockBufferOffset + col + 56] = p7; - } -} -function buildComponentData(frame, component) { - const blocksPerLine = component.blocksPerLine; - const blocksPerColumn = component.blocksPerColumn; - const computationBuffer = new Int16Array(64); - for (let blockRow = 0; blockRow < blocksPerColumn; blockRow++) { - for (let blockCol = 0; blockCol < blocksPerLine; blockCol++) { - const offset = getBlockBufferOffset(component, blockRow, blockCol); - quantizeAndInverse(component, offset, computationBuffer); - } - } - return component.blockData; -} -function findNextFileMarker(data, currentPos, startPos = currentPos) { - const maxPos = data.length - 1; - let newPos = startPos < currentPos ? startPos : currentPos; - if (currentPos >= maxPos) { - return null; - } - const currentMarker = (0, _core_utils.readUint16)(data, currentPos); - if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) { - return { - invalid: null, - marker: currentMarker, - offset: currentPos - }; - } - let newMarker = (0, _core_utils.readUint16)(data, newPos); - while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) { - if (++newPos >= maxPos) { - return null; - } - newMarker = (0, _core_utils.readUint16)(data, newPos); - } - return { - invalid: currentMarker.toString(16), - marker: newMarker, - offset: newPos - }; -} -class JpegImage { - constructor({ - decodeTransform = null, - colorTransform = -1 - } = {}) { - this._decodeTransform = decodeTransform; - this._colorTransform = colorTransform; - } - parse(data, { - dnlScanLines = null - } = {}) { - function readDataBlock() { - const length = (0, _core_utils.readUint16)(data, offset); - offset += 2; - let endOffset = offset + length - 2; - const fileMarker = findNextFileMarker(data, endOffset, offset); - if (fileMarker?.invalid) { - (0, _util.warn)("readDataBlock - incorrect length, current marker is: " + fileMarker.invalid); - endOffset = fileMarker.offset; - } - const array = data.subarray(offset, endOffset); - offset += array.length; - return array; - } - function prepareComponents(frame) { - const mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH); - const mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV); - for (const component of frame.components) { - const blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH); - const blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV); - const blocksPerLineForMcu = mcusPerLine * component.h; - const blocksPerColumnForMcu = mcusPerColumn * component.v; - const blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1); - component.blockData = new Int16Array(blocksBufferSize); - component.blocksPerLine = blocksPerLine; - component.blocksPerColumn = blocksPerColumn; - } - frame.mcusPerLine = mcusPerLine; - frame.mcusPerColumn = mcusPerColumn; - } - let offset = 0; - let jfif = null; - let adobe = null; - let frame, resetInterval; - let numSOSMarkers = 0; - const quantizationTables = []; - const huffmanTablesAC = [], - huffmanTablesDC = []; - let fileMarker = (0, _core_utils.readUint16)(data, offset); - offset += 2; - if (fileMarker !== 0xffd8) { - throw new JpegError("SOI not found"); - } - fileMarker = (0, _core_utils.readUint16)(data, offset); - offset += 2; - markerLoop: while (fileMarker !== 0xffd9) { - let i, j, l; - switch (fileMarker) { - case 0xffe0: - case 0xffe1: - case 0xffe2: - case 0xffe3: - case 0xffe4: - case 0xffe5: - case 0xffe6: - case 0xffe7: - case 0xffe8: - case 0xffe9: - case 0xffea: - case 0xffeb: - case 0xffec: - case 0xffed: - case 0xffee: - case 0xffef: - case 0xfffe: - const appData = readDataBlock(); - if (fileMarker === 0xffe0) { - if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) { - jfif = { - version: { - major: appData[5], - minor: appData[6] - }, - densityUnits: appData[7], - xDensity: appData[8] << 8 | appData[9], - yDensity: appData[10] << 8 | appData[11], - thumbWidth: appData[12], - thumbHeight: appData[13], - thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13]) - }; - } - } - if (fileMarker === 0xffee) { - if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) { - adobe = { - version: appData[5] << 8 | appData[6], - flags0: appData[7] << 8 | appData[8], - flags1: appData[9] << 8 | appData[10], - transformCode: appData[11] - }; - } - } - break; - case 0xffdb: - const quantizationTablesLength = (0, _core_utils.readUint16)(data, offset); - offset += 2; - const quantizationTablesEnd = quantizationTablesLength + offset - 2; - let z; - while (offset < quantizationTablesEnd) { - const quantizationTableSpec = data[offset++]; - const tableData = new Uint16Array(64); - if (quantizationTableSpec >> 4 === 0) { - for (j = 0; j < 64; j++) { - z = dctZigZag[j]; - tableData[z] = data[offset++]; - } - } else if (quantizationTableSpec >> 4 === 1) { - for (j = 0; j < 64; j++) { - z = dctZigZag[j]; - tableData[z] = (0, _core_utils.readUint16)(data, offset); - offset += 2; - } - } else { - throw new JpegError("DQT - invalid table spec"); - } - quantizationTables[quantizationTableSpec & 15] = tableData; - } - break; - case 0xffc0: - case 0xffc1: - case 0xffc2: - if (frame) { - throw new JpegError("Only single frame JPEGs supported"); - } - offset += 2; - frame = {}; - frame.extended = fileMarker === 0xffc1; - frame.progressive = fileMarker === 0xffc2; - frame.precision = data[offset++]; - const sofScanLines = (0, _core_utils.readUint16)(data, offset); - offset += 2; - frame.scanLines = dnlScanLines || sofScanLines; - frame.samplesPerLine = (0, _core_utils.readUint16)(data, offset); - offset += 2; - frame.components = []; - frame.componentIds = {}; - const componentsCount = data[offset++]; - let maxH = 0, - maxV = 0; - for (i = 0; i < componentsCount; i++) { - const componentId = data[offset]; - const h = data[offset + 1] >> 4; - const v = data[offset + 1] & 15; - if (maxH < h) { - maxH = h; - } - if (maxV < v) { - maxV = v; - } - const qId = data[offset + 2]; - l = frame.components.push({ - h, - v, - quantizationId: qId, - quantizationTable: null - }); - frame.componentIds[componentId] = l - 1; - offset += 3; - } - frame.maxH = maxH; - frame.maxV = maxV; - prepareComponents(frame); - break; - case 0xffc4: - const huffmanLength = (0, _core_utils.readUint16)(data, offset); - offset += 2; - for (i = 2; i < huffmanLength;) { - const huffmanTableSpec = data[offset++]; - const codeLengths = new Uint8Array(16); - let codeLengthSum = 0; - for (j = 0; j < 16; j++, offset++) { - codeLengthSum += codeLengths[j] = data[offset]; - } - const huffmanValues = new Uint8Array(codeLengthSum); - for (j = 0; j < codeLengthSum; j++, offset++) { - huffmanValues[j] = data[offset]; - } - i += 17 + codeLengthSum; - (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues); - } - break; - case 0xffdd: - offset += 2; - resetInterval = (0, _core_utils.readUint16)(data, offset); - offset += 2; - break; - case 0xffda: - const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines; - offset += 2; - const selectorsCount = data[offset++], - components = []; - for (i = 0; i < selectorsCount; i++) { - const index = data[offset++]; - const componentIndex = frame.componentIds[index]; - const component = frame.components[componentIndex]; - component.index = index; - const tableSpec = data[offset++]; - component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4]; - component.huffmanTableAC = huffmanTablesAC[tableSpec & 15]; - components.push(component); - } - const spectralStart = data[offset++], - spectralEnd = data[offset++], - successiveApproximation = data[offset++]; - try { - const processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker); - offset += processed; - } catch (ex) { - if (ex instanceof DNLMarkerError) { - (0, _util.warn)(`${ex.message} -- attempting to re-parse the JPEG image.`); - return this.parse(data, { - dnlScanLines: ex.scanLines - }); - } else if (ex instanceof EOIMarkerError) { - (0, _util.warn)(`${ex.message} -- ignoring the rest of the image data.`); - break markerLoop; - } - throw ex; - } - break; - case 0xffdc: - offset += 4; - break; - case 0xffff: - if (data[offset] !== 0xff) { - offset--; - } - break; - default: - const nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3); - if (nextFileMarker?.invalid) { - (0, _util.warn)("JpegImage.parse - unexpected data, current marker is: " + nextFileMarker.invalid); - offset = nextFileMarker.offset; - break; - } - if (!nextFileMarker || offset >= data.length - 1) { - (0, _util.warn)("JpegImage.parse - reached the end of the image data " + "without finding an EOI marker (0xFFD9)."); - break markerLoop; - } - throw new JpegError("JpegImage.parse - unknown marker: " + fileMarker.toString(16)); - } - fileMarker = (0, _core_utils.readUint16)(data, offset); - offset += 2; - } - this.width = frame.samplesPerLine; - this.height = frame.scanLines; - this.jfif = jfif; - this.adobe = adobe; - this.components = []; - for (const component of frame.components) { - const quantizationTable = quantizationTables[component.quantizationId]; - if (quantizationTable) { - component.quantizationTable = quantizationTable; - } - this.components.push({ - index: component.index, - output: buildComponentData(frame, component), - scaleX: component.h / frame.maxH, - scaleY: component.v / frame.maxV, - blocksPerLine: component.blocksPerLine, - blocksPerColumn: component.blocksPerColumn - }); - } - this.numComponents = this.components.length; - return undefined; - } - _getLinearizedBlockData(width, height, isSourcePDF = false) { - const scaleX = this.width / width, - scaleY = this.height / height; - let component, componentScaleX, componentScaleY, blocksPerScanline; - let x, y, i, j, k; - let index; - let offset = 0; - let output; - const numComponents = this.components.length; - const dataLength = width * height * numComponents; - const data = new Uint8ClampedArray(dataLength); - const xScaleBlockOffset = new Uint32Array(width); - const mask3LSB = 0xfffffff8; - let lastComponentScaleX; - for (i = 0; i < numComponents; i++) { - component = this.components[i]; - componentScaleX = component.scaleX * scaleX; - componentScaleY = component.scaleY * scaleY; - offset = i; - output = component.output; - blocksPerScanline = component.blocksPerLine + 1 << 3; - if (componentScaleX !== lastComponentScaleX) { - for (x = 0; x < width; x++) { - j = 0 | x * componentScaleX; - xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7; - } - lastComponentScaleX = componentScaleX; - } - for (y = 0; y < height; y++) { - j = 0 | y * componentScaleY; - index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3; - for (x = 0; x < width; x++) { - data[offset] = output[index + xScaleBlockOffset[x]]; - offset += numComponents; - } - } - } - let transform = this._decodeTransform; - if (!isSourcePDF && numComponents === 4 && !transform) { - transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]); - } - if (transform) { - for (i = 0; i < dataLength;) { - for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) { - data[i] = (data[i] * transform[k] >> 8) + transform[k + 1]; - } - } - } - return data; - } - get _isColorConversionNeeded() { - if (this.adobe) { - return !!this.adobe.transformCode; - } - if (this.numComponents === 3) { - if (this._colorTransform === 0) { - return false; - } else if (this.components[0].index === 0x52 && this.components[1].index === 0x47 && this.components[2].index === 0x42) { - return false; - } - return true; - } - if (this._colorTransform === 1) { - return true; - } - return false; - } - _convertYccToRgb(data) { - let Y, Cb, Cr; - for (let i = 0, length = data.length; i < length; i += 3) { - Y = data[i]; - Cb = data[i + 1]; - Cr = data[i + 2]; - data[i] = Y - 179.456 + 1.402 * Cr; - data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr; - data[i + 2] = Y - 226.816 + 1.772 * Cb; - } - return data; - } - _convertYccToRgba(data, out) { - for (let i = 0, j = 0, length = data.length; i < length; i += 3, j += 4) { - const Y = data[i]; - const Cb = data[i + 1]; - const Cr = data[i + 2]; - out[j] = Y - 179.456 + 1.402 * Cr; - out[j + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr; - out[j + 2] = Y - 226.816 + 1.772 * Cb; - out[j + 3] = 255; - } - return out; - } - _convertYcckToRgb(data) { - let Y, Cb, Cr, k; - let offset = 0; - for (let i = 0, length = data.length; i < length; i += 4) { - Y = data[i]; - Cb = data[i + 1]; - Cr = data[i + 2]; - k = data[i + 3]; - data[offset++] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776); - data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665); - data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407); - } - return data.subarray(0, offset); - } - _convertYcckToRgba(data) { - for (let i = 0, length = data.length; i < length; i += 4) { - const Y = data[i]; - const Cb = data[i + 1]; - const Cr = data[i + 2]; - const k = data[i + 3]; - data[i] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776); - data[i + 1] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665); - data[i + 2] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407); - data[i + 3] = 255; - } - return data; - } - _convertYcckToCmyk(data) { - let Y, Cb, Cr; - for (let i = 0, length = data.length; i < length; i += 4) { - Y = data[i]; - Cb = data[i + 1]; - Cr = data[i + 2]; - data[i] = 434.456 - Y - 1.402 * Cr; - data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr; - data[i + 2] = 481.816 - Y - 1.772 * Cb; - } - return data; - } - _convertCmykToRgb(data) { - let c, m, y, k; - let offset = 0; - for (let i = 0, length = data.length; i < length; i += 4) { - c = data[i]; - m = data[i + 1]; - y = data[i + 2]; - k = data[i + 3]; - data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254); - data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.0003189131175883281 * k + 0.7364883807733168); - data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144); - } - return data.subarray(0, offset); - } - _convertCmykToRgba(data) { - for (let i = 0, length = data.length; i < length; i += 4) { - const c = data[i]; - const m = data[i + 1]; - const y = data[i + 2]; - const k = data[i + 3]; - data[i] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254); - data[i + 1] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.0003189131175883281 * k + 0.7364883807733168); - data[i + 2] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144); - data[i + 3] = 255; - } - return data; - } - getData({ - width, - height, - forceRGBA = false, - forceRGB = false, - isSourcePDF = false - }) { - if (this.numComponents > 4) { - throw new JpegError("Unsupported color mode"); - } - const data = this._getLinearizedBlockData(width, height, isSourcePDF); - if (this.numComponents === 1 && (forceRGBA || forceRGB)) { - const len = data.length * (forceRGBA ? 4 : 3); - const rgbaData = new Uint8ClampedArray(len); - let offset = 0; - if (forceRGBA) { - (0, _image_utils.grayToRGBA)(data, new Uint32Array(rgbaData.buffer)); - } else { - for (const grayColor of data) { - rgbaData[offset++] = grayColor; - rgbaData[offset++] = grayColor; - rgbaData[offset++] = grayColor; - } - } - return rgbaData; - } else if (this.numComponents === 3 && this._isColorConversionNeeded) { - if (forceRGBA) { - const rgbaData = new Uint8ClampedArray(data.length / 3 * 4); - return this._convertYccToRgba(data, rgbaData); - } - return this._convertYccToRgb(data); - } else if (this.numComponents === 4) { - if (this._isColorConversionNeeded) { - if (forceRGBA) { - return this._convertYcckToRgba(data); - } - if (forceRGB) { - return this._convertYcckToRgb(data); - } - return this._convertYcckToCmyk(data); - } else if (forceRGBA) { - return this._convertCmykToRgba(data); - } else if (forceRGB) { - return this._convertCmykToRgb(data); - } - } - return data; - } -} -exports.JpegImage = JpegImage; - -/***/ }), -/* 28 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.convertBlackAndWhiteToRGBA = convertBlackAndWhiteToRGBA; -exports.convertToRGBA = convertToRGBA; -exports.grayToRGBA = grayToRGBA; -var _util = __w_pdfjs_require__(2); -function convertToRGBA(params) { - switch (params.kind) { - case _util.ImageKind.GRAYSCALE_1BPP: - return convertBlackAndWhiteToRGBA(params); - case _util.ImageKind.RGB_24BPP: - return convertRGBToRGBA(params); - } - return null; -} -function convertBlackAndWhiteToRGBA({ - src, - srcPos = 0, - dest, - width, - height, - nonBlackColor = 0xffffffff, - inverseDecode = false -}) { - const black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; - const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor]; - const widthInSource = width >> 3; - const widthRemainder = width & 7; - const srcLength = src.length; - dest = new Uint32Array(dest.buffer); - let destPos = 0; - for (let i = 0; i < height; i++) { - for (const max = srcPos + widthInSource; srcPos < max; srcPos++) { - const elem = srcPos < srcLength ? src[srcPos] : 255; - dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping; - dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping; - dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping; - dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping; - dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping; - dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping; - dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping; - dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping; - } - if (widthRemainder === 0) { - continue; - } - const elem = srcPos < srcLength ? src[srcPos++] : 255; - for (let j = 0; j < widthRemainder; j++) { - dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping; - } - } - return { - srcPos, - destPos - }; -} -function convertRGBToRGBA({ - src, - srcPos = 0, - dest, - destPos = 0, - width, - height -}) { - let i = 0; - const len32 = src.length >> 2; - const src32 = new Uint32Array(src.buffer, srcPos, len32); - if (_util.FeatureTest.isLittleEndian) { - for (; i < len32 - 2; i += 3, destPos += 4) { - const s1 = src32[i]; - const s2 = src32[i + 1]; - const s3 = src32[i + 2]; - dest[destPos] = s1 | 0xff000000; - dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000; - dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000; - dest[destPos + 3] = s3 >>> 8 | 0xff000000; - } - for (let j = i * 4, jj = src.length; j < jj; j += 3) { - dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000; - } - } else { - for (; i < len32 - 2; i += 3, destPos += 4) { - const s1 = src32[i]; - const s2 = src32[i + 1]; - const s3 = src32[i + 2]; - dest[destPos] = s1 | 0xff; - dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff; - dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff; - dest[destPos + 3] = s3 << 8 | 0xff; - } - for (let j = i * 4, jj = src.length; j < jj; j += 3) { - dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff; - } - } - return { - srcPos, - destPos - }; -} -function grayToRGBA(src, dest) { - if (_util.FeatureTest.isLittleEndian) { - for (let i = 0, ii = src.length; i < ii; i++) { - dest[i] = src[i] * 0x10101 | 0xff000000; - } - } else { - for (let i = 0, ii = src.length; i < ii; i++) { - dest[i] = src[i] * 0x1010100 | 0x000000ff; - } - } -} - -/***/ }), -/* 29 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.JpxStream = void 0; -var _decode_stream = __w_pdfjs_require__(18); -var _jpx = __w_pdfjs_require__(30); -var _util = __w_pdfjs_require__(2); -class JpxStream extends _decode_stream.DecodeStream { - constructor(stream, maybeLength, params) { - super(maybeLength); - this.stream = stream; - this.dict = stream.dict; - this.maybeLength = maybeLength; - this.params = params; - } - get bytes() { - return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); - } - ensureBuffer(requested) {} - readBlock() { - if (this.eof) { - return; - } - const jpxImage = new _jpx.JpxImage(); - jpxImage.parse(this.bytes); - const width = jpxImage.width; - const height = jpxImage.height; - const componentsCount = jpxImage.componentsCount; - const tileCount = jpxImage.tiles.length; - if (tileCount === 1) { - this.buffer = jpxImage.tiles[0].items; - } else { - const data = new Uint8ClampedArray(width * height * componentsCount); - for (let k = 0; k < tileCount; k++) { - const tileComponents = jpxImage.tiles[k]; - const tileWidth = tileComponents.width; - const tileHeight = tileComponents.height; - const tileLeft = tileComponents.left; - const tileTop = tileComponents.top; - const src = tileComponents.items; - let srcPosition = 0; - let dataPosition = (width * tileTop + tileLeft) * componentsCount; - const imgRowSize = width * componentsCount; - const tileRowSize = tileWidth * componentsCount; - for (let j = 0; j < tileHeight; j++) { - const rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize); - data.set(rowBytes, dataPosition); - srcPosition += tileRowSize; - dataPosition += imgRowSize; - } - } - this.buffer = data; - } - this.bufferLength = this.buffer.length; - this.eof = true; - } -} -exports.JpxStream = JpxStream; - -/***/ }), -/* 30 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.JpxImage = void 0; -var _util = __w_pdfjs_require__(2); -var _core_utils = __w_pdfjs_require__(3); -var _arithmetic_decoder = __w_pdfjs_require__(25); -class JpxError extends _util.BaseException { - constructor(msg) { - super(`JPX error: ${msg}`, "JpxError"); - } -} -const SubbandsGainLog2 = { - LL: 0, - LH: 1, - HL: 1, - HH: 2 -}; -class JpxImage { - constructor() { - this.failOnCorruptedImage = false; - } - parse(data) { - const head = (0, _core_utils.readUint16)(data, 0); - if (head === 0xff4f) { - this.parseCodestream(data, 0, data.length); - return; - } - const length = data.length; - let position = 0; - while (position < length) { - let headerSize = 8; - let lbox = (0, _core_utils.readUint32)(data, position); - const tbox = (0, _core_utils.readUint32)(data, position + 4); - position += headerSize; - if (lbox === 1) { - lbox = (0, _core_utils.readUint32)(data, position) * 4294967296 + (0, _core_utils.readUint32)(data, position + 4); - position += 8; - headerSize += 8; - } - if (lbox === 0) { - lbox = length - position + headerSize; - } - if (lbox < headerSize) { - throw new JpxError("Invalid box field size"); - } - const dataLength = lbox - headerSize; - let jumpDataLength = true; - switch (tbox) { - case 0x6a703268: - jumpDataLength = false; - break; - case 0x636f6c72: - const method = data[position]; - if (method === 1) { - const colorspace = (0, _core_utils.readUint32)(data, position + 3); - switch (colorspace) { - case 16: - case 17: - case 18: - break; - default: - (0, _util.warn)("Unknown colorspace " + colorspace); - break; - } - } else if (method === 2) { - (0, _util.info)("ICC profile not supported"); - } - break; - case 0x6a703263: - this.parseCodestream(data, position, position + dataLength); - break; - case 0x6a502020: - if ((0, _core_utils.readUint32)(data, position) !== 0x0d0a870a) { - (0, _util.warn)("Invalid JP2 signature"); - } - break; - case 0x6a501a1a: - case 0x66747970: - case 0x72726571: - case 0x72657320: - case 0x69686472: - break; - default: - const headerType = String.fromCharCode(tbox >> 24 & 0xff, tbox >> 16 & 0xff, tbox >> 8 & 0xff, tbox & 0xff); - (0, _util.warn)(`Unsupported header type ${tbox} (${headerType}).`); - break; - } - if (jumpDataLength) { - position += dataLength; - } - } - } - parseImageProperties(stream) { - let newByte = stream.getByte(); - while (newByte >= 0) { - const oldByte = newByte; - newByte = stream.getByte(); - const code = oldByte << 8 | newByte; - if (code === 0xff51) { - stream.skip(4); - const Xsiz = stream.getInt32() >>> 0; - const Ysiz = stream.getInt32() >>> 0; - const XOsiz = stream.getInt32() >>> 0; - const YOsiz = stream.getInt32() >>> 0; - stream.skip(16); - const Csiz = stream.getUint16(); - this.width = Xsiz - XOsiz; - this.height = Ysiz - YOsiz; - this.componentsCount = Csiz; - this.bitsPerComponent = 8; - return; - } - } - throw new JpxError("No size marker found in JPX stream"); - } - parseCodestream(data, start, end) { - const context = {}; - let doNotRecover = false; - try { - let position = start; - while (position + 1 < end) { - const code = (0, _core_utils.readUint16)(data, position); - position += 2; - let length = 0, - j, - sqcd, - spqcds, - spqcdSize, - scalarExpounded, - tile; - switch (code) { - case 0xff4f: - context.mainHeader = true; - break; - case 0xffd9: - break; - case 0xff51: - length = (0, _core_utils.readUint16)(data, position); - const siz = {}; - siz.Xsiz = (0, _core_utils.readUint32)(data, position + 4); - siz.Ysiz = (0, _core_utils.readUint32)(data, position + 8); - siz.XOsiz = (0, _core_utils.readUint32)(data, position + 12); - siz.YOsiz = (0, _core_utils.readUint32)(data, position + 16); - siz.XTsiz = (0, _core_utils.readUint32)(data, position + 20); - siz.YTsiz = (0, _core_utils.readUint32)(data, position + 24); - siz.XTOsiz = (0, _core_utils.readUint32)(data, position + 28); - siz.YTOsiz = (0, _core_utils.readUint32)(data, position + 32); - const componentsCount = (0, _core_utils.readUint16)(data, position + 36); - siz.Csiz = componentsCount; - const components = []; - j = position + 38; - for (let i = 0; i < componentsCount; i++) { - const component = { - precision: (data[j] & 0x7f) + 1, - isSigned: !!(data[j] & 0x80), - XRsiz: data[j + 1], - YRsiz: data[j + 2] - }; - j += 3; - calculateComponentDimensions(component, siz); - components.push(component); - } - context.SIZ = siz; - context.components = components; - calculateTileGrids(context, components); - context.QCC = []; - context.COC = []; - break; - case 0xff5c: - length = (0, _core_utils.readUint16)(data, position); - const qcd = {}; - j = position + 2; - sqcd = data[j++]; - switch (sqcd & 0x1f) { - case 0: - spqcdSize = 8; - scalarExpounded = true; - break; - case 1: - spqcdSize = 16; - scalarExpounded = false; - break; - case 2: - spqcdSize = 16; - scalarExpounded = true; - break; - default: - throw new Error("Invalid SQcd value " + sqcd); - } - qcd.noQuantization = spqcdSize === 8; - qcd.scalarExpounded = scalarExpounded; - qcd.guardBits = sqcd >> 5; - spqcds = []; - while (j < length + position) { - const spqcd = {}; - if (spqcdSize === 8) { - spqcd.epsilon = data[j++] >> 3; - spqcd.mu = 0; - } else { - spqcd.epsilon = data[j] >> 3; - spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; - j += 2; - } - spqcds.push(spqcd); - } - qcd.SPqcds = spqcds; - if (context.mainHeader) { - context.QCD = qcd; - } else { - context.currentTile.QCD = qcd; - context.currentTile.QCC = []; - } - break; - case 0xff5d: - length = (0, _core_utils.readUint16)(data, position); - const qcc = {}; - j = position + 2; - let cqcc; - if (context.SIZ.Csiz < 257) { - cqcc = data[j++]; - } else { - cqcc = (0, _core_utils.readUint16)(data, j); - j += 2; - } - sqcd = data[j++]; - switch (sqcd & 0x1f) { - case 0: - spqcdSize = 8; - scalarExpounded = true; - break; - case 1: - spqcdSize = 16; - scalarExpounded = false; - break; - case 2: - spqcdSize = 16; - scalarExpounded = true; - break; - default: - throw new Error("Invalid SQcd value " + sqcd); - } - qcc.noQuantization = spqcdSize === 8; - qcc.scalarExpounded = scalarExpounded; - qcc.guardBits = sqcd >> 5; - spqcds = []; - while (j < length + position) { - const spqcd = {}; - if (spqcdSize === 8) { - spqcd.epsilon = data[j++] >> 3; - spqcd.mu = 0; - } else { - spqcd.epsilon = data[j] >> 3; - spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; - j += 2; - } - spqcds.push(spqcd); - } - qcc.SPqcds = spqcds; - if (context.mainHeader) { - context.QCC[cqcc] = qcc; - } else { - context.currentTile.QCC[cqcc] = qcc; - } - break; - case 0xff52: - length = (0, _core_utils.readUint16)(data, position); - const cod = {}; - j = position + 2; - const scod = data[j++]; - cod.entropyCoderWithCustomPrecincts = !!(scod & 1); - cod.sopMarkerUsed = !!(scod & 2); - cod.ephMarkerUsed = !!(scod & 4); - cod.progressionOrder = data[j++]; - cod.layersCount = (0, _core_utils.readUint16)(data, j); - j += 2; - cod.multipleComponentTransform = data[j++]; - cod.decompositionLevelsCount = data[j++]; - cod.xcb = (data[j++] & 0xf) + 2; - cod.ycb = (data[j++] & 0xf) + 2; - const blockStyle = data[j++]; - cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1); - cod.resetContextProbabilities = !!(blockStyle & 2); - cod.terminationOnEachCodingPass = !!(blockStyle & 4); - cod.verticallyStripe = !!(blockStyle & 8); - cod.predictableTermination = !!(blockStyle & 16); - cod.segmentationSymbolUsed = !!(blockStyle & 32); - cod.reversibleTransformation = data[j++]; - if (cod.entropyCoderWithCustomPrecincts) { - const precinctsSizes = []; - while (j < length + position) { - const precinctsSize = data[j++]; - precinctsSizes.push({ - PPx: precinctsSize & 0xf, - PPy: precinctsSize >> 4 - }); - } - cod.precinctsSizes = precinctsSizes; - } - const unsupported = []; - if (cod.selectiveArithmeticCodingBypass) { - unsupported.push("selectiveArithmeticCodingBypass"); - } - if (cod.terminationOnEachCodingPass) { - unsupported.push("terminationOnEachCodingPass"); - } - if (cod.verticallyStripe) { - unsupported.push("verticallyStripe"); - } - if (cod.predictableTermination) { - unsupported.push("predictableTermination"); - } - if (unsupported.length > 0) { - doNotRecover = true; - (0, _util.warn)(`JPX: Unsupported COD options (${unsupported.join(", ")}).`); - } - if (context.mainHeader) { - context.COD = cod; - } else { - context.currentTile.COD = cod; - context.currentTile.COC = []; - } - break; - case 0xff90: - length = (0, _core_utils.readUint16)(data, position); - tile = {}; - tile.index = (0, _core_utils.readUint16)(data, position + 2); - tile.length = (0, _core_utils.readUint32)(data, position + 4); - tile.dataEnd = tile.length + position - 2; - tile.partIndex = data[position + 8]; - tile.partsCount = data[position + 9]; - context.mainHeader = false; - if (tile.partIndex === 0) { - tile.COD = context.COD; - tile.COC = context.COC.slice(0); - tile.QCD = context.QCD; - tile.QCC = context.QCC.slice(0); - } - context.currentTile = tile; - break; - case 0xff93: - tile = context.currentTile; - if (tile.partIndex === 0) { - initializeTile(context, tile.index); - buildPackets(context); - } - length = tile.dataEnd - position; - parseTilePackets(context, data, position, length); - break; - case 0xff53: - (0, _util.warn)("JPX: Codestream code 0xFF53 (COC) is not implemented."); - case 0xff55: - case 0xff57: - case 0xff58: - case 0xff64: - length = (0, _core_utils.readUint16)(data, position); - break; - default: - throw new Error("Unknown codestream code: " + code.toString(16)); - } - position += length; - } - } catch (e) { - if (doNotRecover || this.failOnCorruptedImage) { - throw new JpxError(e.message); - } else { - (0, _util.warn)(`JPX: Trying to recover from: "${e.message}".`); - } - } - this.tiles = transformComponents(context); - this.width = context.SIZ.Xsiz - context.SIZ.XOsiz; - this.height = context.SIZ.Ysiz - context.SIZ.YOsiz; - this.componentsCount = context.SIZ.Csiz; - } -} -exports.JpxImage = JpxImage; -function calculateComponentDimensions(component, siz) { - component.x0 = Math.ceil(siz.XOsiz / component.XRsiz); - component.x1 = Math.ceil(siz.Xsiz / component.XRsiz); - component.y0 = Math.ceil(siz.YOsiz / component.YRsiz); - component.y1 = Math.ceil(siz.Ysiz / component.YRsiz); - component.width = component.x1 - component.x0; - component.height = component.y1 - component.y0; -} -function calculateTileGrids(context, components) { - const siz = context.SIZ; - const tiles = []; - let tile; - const numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz); - const numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz); - for (let q = 0; q < numYtiles; q++) { - for (let p = 0; p < numXtiles; p++) { - tile = {}; - tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz); - tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz); - tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz); - tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz); - tile.width = tile.tx1 - tile.tx0; - tile.height = tile.ty1 - tile.ty0; - tile.components = []; - tiles.push(tile); - } - } - context.tiles = tiles; - const componentsCount = siz.Csiz; - for (let i = 0, ii = componentsCount; i < ii; i++) { - const component = components[i]; - for (let j = 0, jj = tiles.length; j < jj; j++) { - const tileComponent = {}; - tile = tiles[j]; - tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz); - tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz); - tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz); - tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz); - tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0; - tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0; - tile.components[i] = tileComponent; - } - } -} -function getBlocksDimensions(context, component, r) { - const codOrCoc = component.codingStyleParameters; - const result = {}; - if (!codOrCoc.entropyCoderWithCustomPrecincts) { - result.PPx = 15; - result.PPy = 15; - } else { - result.PPx = codOrCoc.precinctsSizes[r].PPx; - result.PPy = codOrCoc.precinctsSizes[r].PPy; - } - result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx); - result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy); - return result; -} -function buildPrecincts(context, resolution, dimensions) { - const precinctWidth = 1 << dimensions.PPx; - const precinctHeight = 1 << dimensions.PPy; - const isZeroRes = resolution.resLevel === 0; - const precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1); - const precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1); - const numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0; - const numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0; - const numprecincts = numprecinctswide * numprecinctshigh; - resolution.precinctParameters = { - precinctWidth, - precinctHeight, - numprecinctswide, - numprecinctshigh, - numprecincts, - precinctWidthInSubband, - precinctHeightInSubband - }; -} -function buildCodeblocks(context, subband, dimensions) { - const xcb_ = dimensions.xcb_; - const ycb_ = dimensions.ycb_; - const codeblockWidth = 1 << xcb_; - const codeblockHeight = 1 << ycb_; - const cbx0 = subband.tbx0 >> xcb_; - const cby0 = subband.tby0 >> ycb_; - const cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_; - const cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_; - const precinctParameters = subband.resolution.precinctParameters; - const codeblocks = []; - const precincts = []; - let i, j, codeblock, precinctNumber; - for (j = cby0; j < cby1; j++) { - for (i = cbx0; i < cbx1; i++) { - codeblock = { - cbx: i, - cby: j, - tbx0: codeblockWidth * i, - tby0: codeblockHeight * j, - tbx1: codeblockWidth * (i + 1), - tby1: codeblockHeight * (j + 1) - }; - codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0); - codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0); - codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1); - codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1); - const pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband); - const pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband); - precinctNumber = pi + pj * precinctParameters.numprecinctswide; - codeblock.precinctNumber = precinctNumber; - codeblock.subbandType = subband.type; - codeblock.Lblock = 3; - if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) { - continue; - } - codeblocks.push(codeblock); - let precinct = precincts[precinctNumber]; - if (precinct !== undefined) { - if (i < precinct.cbxMin) { - precinct.cbxMin = i; - } else if (i > precinct.cbxMax) { - precinct.cbxMax = i; - } - if (j < precinct.cbyMin) { - precinct.cbxMin = j; - } else if (j > precinct.cbyMax) { - precinct.cbyMax = j; - } - } else { - precincts[precinctNumber] = precinct = { - cbxMin: i, - cbyMin: j, - cbxMax: i, - cbyMax: j - }; - } - codeblock.precinct = precinct; - } - } - subband.codeblockParameters = { - codeblockWidth: xcb_, - codeblockHeight: ycb_, - numcodeblockwide: cbx1 - cbx0 + 1, - numcodeblockhigh: cby1 - cby0 + 1 - }; - subband.codeblocks = codeblocks; - subband.precincts = precincts; -} -function createPacket(resolution, precinctNumber, layerNumber) { - const precinctCodeblocks = []; - const subbands = resolution.subbands; - for (let i = 0, ii = subbands.length; i < ii; i++) { - const subband = subbands[i]; - const codeblocks = subband.codeblocks; - for (let j = 0, jj = codeblocks.length; j < jj; j++) { - const codeblock = codeblocks[j]; - if (codeblock.precinctNumber !== precinctNumber) { - continue; - } - precinctCodeblocks.push(codeblock); - } - } - return { - layerNumber, - codeblocks: precinctCodeblocks - }; -} -function LayerResolutionComponentPositionIterator(context) { - const siz = context.SIZ; - const tileIndex = context.currentTile.index; - const tile = context.tiles[tileIndex]; - const layersCount = tile.codingStyleDefaultParameters.layersCount; - const componentsCount = siz.Csiz; - let maxDecompositionLevelsCount = 0; - for (let q = 0; q < componentsCount; q++) { - maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); - } - let l = 0, - r = 0, - i = 0, - k = 0; - this.nextPacket = function JpxImage_nextPacket() { - for (; l < layersCount; l++) { - for (; r <= maxDecompositionLevelsCount; r++) { - for (; i < componentsCount; i++) { - const component = tile.components[i]; - if (r > component.codingStyleParameters.decompositionLevelsCount) { - continue; - } - const resolution = component.resolutions[r]; - const numprecincts = resolution.precinctParameters.numprecincts; - for (; k < numprecincts;) { - const packet = createPacket(resolution, k, l); - k++; - return packet; - } - k = 0; - } - i = 0; - } - r = 0; - } - throw new JpxError("Out of packets"); - }; -} -function ResolutionLayerComponentPositionIterator(context) { - const siz = context.SIZ; - const tileIndex = context.currentTile.index; - const tile = context.tiles[tileIndex]; - const layersCount = tile.codingStyleDefaultParameters.layersCount; - const componentsCount = siz.Csiz; - let maxDecompositionLevelsCount = 0; - for (let q = 0; q < componentsCount; q++) { - maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); - } - let r = 0, - l = 0, - i = 0, - k = 0; - this.nextPacket = function JpxImage_nextPacket() { - for (; r <= maxDecompositionLevelsCount; r++) { - for (; l < layersCount; l++) { - for (; i < componentsCount; i++) { - const component = tile.components[i]; - if (r > component.codingStyleParameters.decompositionLevelsCount) { - continue; - } - const resolution = component.resolutions[r]; - const numprecincts = resolution.precinctParameters.numprecincts; - for (; k < numprecincts;) { - const packet = createPacket(resolution, k, l); - k++; - return packet; - } - k = 0; - } - i = 0; - } - l = 0; - } - throw new JpxError("Out of packets"); - }; -} -function ResolutionPositionComponentLayerIterator(context) { - const siz = context.SIZ; - const tileIndex = context.currentTile.index; - const tile = context.tiles[tileIndex]; - const layersCount = tile.codingStyleDefaultParameters.layersCount; - const componentsCount = siz.Csiz; - let l, r, c, p; - let maxDecompositionLevelsCount = 0; - for (c = 0; c < componentsCount; c++) { - const component = tile.components[c]; - maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount); - } - const maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1); - for (r = 0; r <= maxDecompositionLevelsCount; ++r) { - let maxNumPrecincts = 0; - for (c = 0; c < componentsCount; ++c) { - const resolutions = tile.components[c].resolutions; - if (r < resolutions.length) { - maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts); - } - } - maxNumPrecinctsInLevel[r] = maxNumPrecincts; - } - l = 0; - r = 0; - c = 0; - p = 0; - this.nextPacket = function JpxImage_nextPacket() { - for (; r <= maxDecompositionLevelsCount; r++) { - for (; p < maxNumPrecinctsInLevel[r]; p++) { - for (; c < componentsCount; c++) { - const component = tile.components[c]; - if (r > component.codingStyleParameters.decompositionLevelsCount) { - continue; - } - const resolution = component.resolutions[r]; - const numprecincts = resolution.precinctParameters.numprecincts; - if (p >= numprecincts) { - continue; - } - for (; l < layersCount;) { - const packet = createPacket(resolution, p, l); - l++; - return packet; - } - l = 0; - } - c = 0; - } - p = 0; - } - throw new JpxError("Out of packets"); - }; -} -function PositionComponentResolutionLayerIterator(context) { - const siz = context.SIZ; - const tileIndex = context.currentTile.index; - const tile = context.tiles[tileIndex]; - const layersCount = tile.codingStyleDefaultParameters.layersCount; - const componentsCount = siz.Csiz; - const precinctsSizes = getPrecinctSizesInImageScale(tile); - const precinctsIterationSizes = precinctsSizes; - let l = 0, - r = 0, - c = 0, - px = 0, - py = 0; - this.nextPacket = function JpxImage_nextPacket() { - for (; py < precinctsIterationSizes.maxNumHigh; py++) { - for (; px < precinctsIterationSizes.maxNumWide; px++) { - for (; c < componentsCount; c++) { - const component = tile.components[c]; - const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; - for (; r <= decompositionLevelsCount; r++) { - const resolution = component.resolutions[r]; - const sizeInImageScale = precinctsSizes.components[c].resolutions[r]; - const k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); - if (k === null) { - continue; - } - for (; l < layersCount;) { - const packet = createPacket(resolution, k, l); - l++; - return packet; - } - l = 0; - } - r = 0; - } - c = 0; - } - px = 0; - } - throw new JpxError("Out of packets"); - }; -} -function ComponentPositionResolutionLayerIterator(context) { - const siz = context.SIZ; - const tileIndex = context.currentTile.index; - const tile = context.tiles[tileIndex]; - const layersCount = tile.codingStyleDefaultParameters.layersCount; - const componentsCount = siz.Csiz; - const precinctsSizes = getPrecinctSizesInImageScale(tile); - let l = 0, - r = 0, - c = 0, - px = 0, - py = 0; - this.nextPacket = function JpxImage_nextPacket() { - for (; c < componentsCount; ++c) { - const component = tile.components[c]; - const precinctsIterationSizes = precinctsSizes.components[c]; - const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; - for (; py < precinctsIterationSizes.maxNumHigh; py++) { - for (; px < precinctsIterationSizes.maxNumWide; px++) { - for (; r <= decompositionLevelsCount; r++) { - const resolution = component.resolutions[r]; - const sizeInImageScale = precinctsIterationSizes.resolutions[r]; - const k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); - if (k === null) { - continue; - } - for (; l < layersCount;) { - const packet = createPacket(resolution, k, l); - l++; - return packet; - } - l = 0; - } - r = 0; - } - px = 0; - } - py = 0; - } - throw new JpxError("Out of packets"); - }; -} -function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) { - const posX = pxIndex * precinctIterationSizes.minWidth; - const posY = pyIndex * precinctIterationSizes.minHeight; - if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) { - return null; - } - const startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide; - return posX / sizeInImageScale.height + startPrecinctRowIndex; -} -function getPrecinctSizesInImageScale(tile) { - const componentsCount = tile.components.length; - let minWidth = Number.MAX_VALUE; - let minHeight = Number.MAX_VALUE; - let maxNumWide = 0; - let maxNumHigh = 0; - const sizePerComponent = new Array(componentsCount); - for (let c = 0; c < componentsCount; c++) { - const component = tile.components[c]; - const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; - const sizePerResolution = new Array(decompositionLevelsCount + 1); - let minWidthCurrentComponent = Number.MAX_VALUE; - let minHeightCurrentComponent = Number.MAX_VALUE; - let maxNumWideCurrentComponent = 0; - let maxNumHighCurrentComponent = 0; - let scale = 1; - for (let r = decompositionLevelsCount; r >= 0; --r) { - const resolution = component.resolutions[r]; - const widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth; - const heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight; - minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution); - minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution); - maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide); - maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh); - sizePerResolution[r] = { - width: widthCurrentResolution, - height: heightCurrentResolution - }; - scale <<= 1; - } - minWidth = Math.min(minWidth, minWidthCurrentComponent); - minHeight = Math.min(minHeight, minHeightCurrentComponent); - maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent); - maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent); - sizePerComponent[c] = { - resolutions: sizePerResolution, - minWidth: minWidthCurrentComponent, - minHeight: minHeightCurrentComponent, - maxNumWide: maxNumWideCurrentComponent, - maxNumHigh: maxNumHighCurrentComponent - }; - } - return { - components: sizePerComponent, - minWidth, - minHeight, - maxNumWide, - maxNumHigh - }; -} -function buildPackets(context) { - const siz = context.SIZ; - const tileIndex = context.currentTile.index; - const tile = context.tiles[tileIndex]; - const componentsCount = siz.Csiz; - for (let c = 0; c < componentsCount; c++) { - const component = tile.components[c]; - const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; - const resolutions = []; - const subbands = []; - for (let r = 0; r <= decompositionLevelsCount; r++) { - const blocksDimensions = getBlocksDimensions(context, component, r); - const resolution = {}; - const scale = 1 << decompositionLevelsCount - r; - resolution.trx0 = Math.ceil(component.tcx0 / scale); - resolution.try0 = Math.ceil(component.tcy0 / scale); - resolution.trx1 = Math.ceil(component.tcx1 / scale); - resolution.try1 = Math.ceil(component.tcy1 / scale); - resolution.resLevel = r; - buildPrecincts(context, resolution, blocksDimensions); - resolutions.push(resolution); - let subband; - if (r === 0) { - subband = {}; - subband.type = "LL"; - subband.tbx0 = Math.ceil(component.tcx0 / scale); - subband.tby0 = Math.ceil(component.tcy0 / scale); - subband.tbx1 = Math.ceil(component.tcx1 / scale); - subband.tby1 = Math.ceil(component.tcy1 / scale); - subband.resolution = resolution; - buildCodeblocks(context, subband, blocksDimensions); - subbands.push(subband); - resolution.subbands = [subband]; - } else { - const bscale = 1 << decompositionLevelsCount - r + 1; - const resolutionSubbands = []; - subband = {}; - subband.type = "HL"; - subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); - subband.tby0 = Math.ceil(component.tcy0 / bscale); - subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); - subband.tby1 = Math.ceil(component.tcy1 / bscale); - subband.resolution = resolution; - buildCodeblocks(context, subband, blocksDimensions); - subbands.push(subband); - resolutionSubbands.push(subband); - subband = {}; - subband.type = "LH"; - subband.tbx0 = Math.ceil(component.tcx0 / bscale); - subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); - subband.tbx1 = Math.ceil(component.tcx1 / bscale); - subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); - subband.resolution = resolution; - buildCodeblocks(context, subband, blocksDimensions); - subbands.push(subband); - resolutionSubbands.push(subband); - subband = {}; - subband.type = "HH"; - subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); - subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); - subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); - subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); - subband.resolution = resolution; - buildCodeblocks(context, subband, blocksDimensions); - subbands.push(subband); - resolutionSubbands.push(subband); - resolution.subbands = resolutionSubbands; - } - } - component.resolutions = resolutions; - component.subbands = subbands; - } - const progressionOrder = tile.codingStyleDefaultParameters.progressionOrder; - switch (progressionOrder) { - case 0: - tile.packetsIterator = new LayerResolutionComponentPositionIterator(context); - break; - case 1: - tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context); - break; - case 2: - tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context); - break; - case 3: - tile.packetsIterator = new PositionComponentResolutionLayerIterator(context); - break; - case 4: - tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context); - break; - default: - throw new JpxError(`Unsupported progression order ${progressionOrder}`); - } -} -function parseTilePackets(context, data, offset, dataLength) { - let position = 0; - let buffer, - bufferSize = 0, - skipNextBit = false; - function readBits(count) { - while (bufferSize < count) { - const b = data[offset + position]; - position++; - if (skipNextBit) { - buffer = buffer << 7 | b; - bufferSize += 7; - skipNextBit = false; - } else { - buffer = buffer << 8 | b; - bufferSize += 8; - } - if (b === 0xff) { - skipNextBit = true; - } - } - bufferSize -= count; - return buffer >>> bufferSize & (1 << count) - 1; - } - function skipMarkerIfEqual(value) { - if (data[offset + position - 1] === 0xff && data[offset + position] === value) { - skipBytes(1); - return true; - } else if (data[offset + position] === 0xff && data[offset + position + 1] === value) { - skipBytes(2); - return true; - } - return false; - } - function skipBytes(count) { - position += count; - } - function alignToByte() { - bufferSize = 0; - if (skipNextBit) { - position++; - skipNextBit = false; - } - } - function readCodingpasses() { - if (readBits(1) === 0) { - return 1; - } - if (readBits(1) === 0) { - return 2; - } - let value = readBits(2); - if (value < 3) { - return value + 3; - } - value = readBits(5); - if (value < 31) { - return value + 6; - } - value = readBits(7); - return value + 37; - } - const tileIndex = context.currentTile.index; - const tile = context.tiles[tileIndex]; - const sopMarkerUsed = context.COD.sopMarkerUsed; - const ephMarkerUsed = context.COD.ephMarkerUsed; - const packetsIterator = tile.packetsIterator; - while (position < dataLength) { - alignToByte(); - if (sopMarkerUsed && skipMarkerIfEqual(0x91)) { - skipBytes(4); - } - const packet = packetsIterator.nextPacket(); - if (!readBits(1)) { - continue; - } - const layerNumber = packet.layerNumber, - queue = []; - let codeblock; - for (let i = 0, ii = packet.codeblocks.length; i < ii; i++) { - codeblock = packet.codeblocks[i]; - let precinct = codeblock.precinct; - const codeblockColumn = codeblock.cbx - precinct.cbxMin; - const codeblockRow = codeblock.cby - precinct.cbyMin; - let codeblockIncluded = false; - let firstTimeInclusion = false; - let valueReady, zeroBitPlanesTree; - if (codeblock.included !== undefined) { - codeblockIncluded = !!readBits(1); - } else { - precinct = codeblock.precinct; - let inclusionTree; - if (precinct.inclusionTree !== undefined) { - inclusionTree = precinct.inclusionTree; - } else { - const width = precinct.cbxMax - precinct.cbxMin + 1; - const height = precinct.cbyMax - precinct.cbyMin + 1; - inclusionTree = new InclusionTree(width, height, layerNumber); - zeroBitPlanesTree = new TagTree(width, height); - precinct.inclusionTree = inclusionTree; - precinct.zeroBitPlanesTree = zeroBitPlanesTree; - for (let l = 0; l < layerNumber; l++) { - if (readBits(1) !== 0) { - throw new JpxError("Invalid tag tree"); - } - } - } - if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) { - while (true) { - if (readBits(1)) { - valueReady = !inclusionTree.nextLevel(); - if (valueReady) { - codeblock.included = true; - codeblockIncluded = firstTimeInclusion = true; - break; - } - } else { - inclusionTree.incrementValue(layerNumber); - break; - } - } - } - } - if (!codeblockIncluded) { - continue; - } - if (firstTimeInclusion) { - zeroBitPlanesTree = precinct.zeroBitPlanesTree; - zeroBitPlanesTree.reset(codeblockColumn, codeblockRow); - while (true) { - if (readBits(1)) { - valueReady = !zeroBitPlanesTree.nextLevel(); - if (valueReady) { - break; - } - } else { - zeroBitPlanesTree.incrementValue(); - } - } - codeblock.zeroBitPlanes = zeroBitPlanesTree.value; - } - const codingpasses = readCodingpasses(); - while (readBits(1)) { - codeblock.Lblock++; - } - const codingpassesLog2 = (0, _core_utils.log2)(codingpasses); - const bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock; - const codedDataLength = readBits(bits); - queue.push({ - codeblock, - codingpasses, - dataLength: codedDataLength - }); - } - alignToByte(); - if (ephMarkerUsed) { - skipMarkerIfEqual(0x92); - } - while (queue.length > 0) { - const packetItem = queue.shift(); - codeblock = packetItem.codeblock; - if (codeblock.data === undefined) { - codeblock.data = []; - } - codeblock.data.push({ - data, - start: offset + position, - end: offset + position + packetItem.dataLength, - codingpasses: packetItem.codingpasses - }); - position += packetItem.dataLength; - } - } - return position; -} -function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed, resetContextProbabilities) { - const x0 = subband.tbx0; - const y0 = subband.tby0; - const width = subband.tbx1 - subband.tbx0; - const codeblocks = subband.codeblocks; - const right = subband.type.charAt(0) === "H" ? 1 : 0; - const bottom = subband.type.charAt(1) === "H" ? levelWidth : 0; - for (let i = 0, ii = codeblocks.length; i < ii; ++i) { - const codeblock = codeblocks[i]; - const blockWidth = codeblock.tbx1_ - codeblock.tbx0_; - const blockHeight = codeblock.tby1_ - codeblock.tby0_; - if (blockWidth === 0 || blockHeight === 0) { - continue; - } - if (codeblock.data === undefined) { - continue; - } - const bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb); - let currentCodingpassType = 2; - const data = codeblock.data; - let totalLength = 0, - codingpasses = 0; - let j, jj, dataItem; - for (j = 0, jj = data.length; j < jj; j++) { - dataItem = data[j]; - totalLength += dataItem.end - dataItem.start; - codingpasses += dataItem.codingpasses; - } - const encodedData = new Uint8Array(totalLength); - let position = 0; - for (j = 0, jj = data.length; j < jj; j++) { - dataItem = data[j]; - const chunk = dataItem.data.subarray(dataItem.start, dataItem.end); - encodedData.set(chunk, position); - position += chunk.length; - } - const decoder = new _arithmetic_decoder.ArithmeticDecoder(encodedData, 0, totalLength); - bitModel.setDecoder(decoder); - for (j = 0; j < codingpasses; j++) { - switch (currentCodingpassType) { - case 0: - bitModel.runSignificancePropagationPass(); - break; - case 1: - bitModel.runMagnitudeRefinementPass(); - break; - case 2: - bitModel.runCleanupPass(); - if (segmentationSymbolUsed) { - bitModel.checkSegmentationSymbol(); - } - break; - } - if (resetContextProbabilities) { - bitModel.reset(); - } - currentCodingpassType = (currentCodingpassType + 1) % 3; - } - let offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width; - const sign = bitModel.coefficentsSign; - const magnitude = bitModel.coefficentsMagnitude; - const bitsDecoded = bitModel.bitsDecoded; - const magnitudeCorrection = reversible ? 0 : 0.5; - let k, n, nb; - position = 0; - const interleave = subband.type !== "LL"; - for (j = 0; j < blockHeight; j++) { - const row = offset / width | 0; - const levelOffset = 2 * row * (levelWidth - width) + right + bottom; - for (k = 0; k < blockWidth; k++) { - n = magnitude[position]; - if (n !== 0) { - n = (n + magnitudeCorrection) * delta; - if (sign[position] !== 0) { - n = -n; - } - nb = bitsDecoded[position]; - const pos = interleave ? levelOffset + (offset << 1) : offset; - coefficients[pos] = reversible && nb >= mb ? n : n * (1 << mb - nb); - } - offset++; - position++; - } - offset += width - blockWidth; - } - } -} -function transformTile(context, tile, c) { - const component = tile.components[c]; - const codingStyleParameters = component.codingStyleParameters; - const quantizationParameters = component.quantizationParameters; - const decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount; - const spqcds = quantizationParameters.SPqcds; - const scalarExpounded = quantizationParameters.scalarExpounded; - const guardBits = quantizationParameters.guardBits; - const segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed; - const resetContextProbabilities = codingStyleParameters.resetContextProbabilities; - const precision = context.components[c].precision; - const reversible = codingStyleParameters.reversibleTransformation; - const transform = reversible ? new ReversibleTransform() : new IrreversibleTransform(); - const subbandCoefficients = []; - let b = 0; - for (let i = 0; i <= decompositionLevelsCount; i++) { - const resolution = component.resolutions[i]; - const width = resolution.trx1 - resolution.trx0; - const height = resolution.try1 - resolution.try0; - const coefficients = new Float32Array(width * height); - for (let j = 0, jj = resolution.subbands.length; j < jj; j++) { - let mu, epsilon; - if (!scalarExpounded) { - mu = spqcds[0].mu; - epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0); - } else { - mu = spqcds[b].mu; - epsilon = spqcds[b].epsilon; - b++; - } - const subband = resolution.subbands[j]; - const gainLog2 = SubbandsGainLog2[subband.type]; - const delta = reversible ? 1 : 2 ** (precision + gainLog2 - epsilon) * (1 + mu / 2048); - const mb = guardBits + epsilon - 1; - copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed, resetContextProbabilities); - } - subbandCoefficients.push({ - width, - height, - items: coefficients - }); - } - const result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0); - return { - left: component.tcx0, - top: component.tcy0, - width: result.width, - height: result.height, - items: result.items - }; -} -function transformComponents(context) { - const siz = context.SIZ; - const components = context.components; - const componentsCount = siz.Csiz; - const resultImages = []; - for (let i = 0, ii = context.tiles.length; i < ii; i++) { - const tile = context.tiles[i]; - const transformedTiles = []; - for (let c = 0; c < componentsCount; c++) { - transformedTiles[c] = transformTile(context, tile, c); - } - const tile0 = transformedTiles[0]; - const out = new Uint8ClampedArray(tile0.items.length * componentsCount); - const result = { - left: tile0.left, - top: tile0.top, - width: tile0.width, - height: tile0.height, - items: out - }; - let shift, offset; - let pos = 0, - j, - jj, - y0, - y1, - y2; - if (tile.codingStyleDefaultParameters.multipleComponentTransform) { - const fourComponents = componentsCount === 4; - const y0items = transformedTiles[0].items; - const y1items = transformedTiles[1].items; - const y2items = transformedTiles[2].items; - const y3items = fourComponents ? transformedTiles[3].items : null; - shift = components[0].precision - 8; - offset = (128 << shift) + 0.5; - const component0 = tile.components[0]; - const alpha01 = componentsCount - 3; - jj = y0items.length; - if (!component0.codingStyleParameters.reversibleTransformation) { - for (j = 0; j < jj; j++, pos += alpha01) { - y0 = y0items[j] + offset; - y1 = y1items[j]; - y2 = y2items[j]; - out[pos++] = y0 + 1.402 * y2 >> shift; - out[pos++] = y0 - 0.34413 * y1 - 0.71414 * y2 >> shift; - out[pos++] = y0 + 1.772 * y1 >> shift; - } - } else { - for (j = 0; j < jj; j++, pos += alpha01) { - y0 = y0items[j] + offset; - y1 = y1items[j]; - y2 = y2items[j]; - const g = y0 - (y2 + y1 >> 2); - out[pos++] = g + y2 >> shift; - out[pos++] = g >> shift; - out[pos++] = g + y1 >> shift; - } - } - if (fourComponents) { - for (j = 0, pos = 3; j < jj; j++, pos += 4) { - out[pos] = y3items[j] + offset >> shift; - } - } - } else { - for (let c = 0; c < componentsCount; c++) { - const items = transformedTiles[c].items; - shift = components[c].precision - 8; - offset = (128 << shift) + 0.5; - for (pos = c, j = 0, jj = items.length; j < jj; j++) { - out[pos] = items[j] + offset >> shift; - pos += componentsCount; - } - } - } - resultImages.push(result); - } - return resultImages; -} -function initializeTile(context, tileIndex) { - const siz = context.SIZ; - const componentsCount = siz.Csiz; - const tile = context.tiles[tileIndex]; - for (let c = 0; c < componentsCount; c++) { - const component = tile.components[c]; - const qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD; - component.quantizationParameters = qcdOrQcc; - const codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD; - component.codingStyleParameters = codOrCoc; - } - tile.codingStyleDefaultParameters = context.currentTile.COD; -} -class TagTree { - constructor(width, height) { - const levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1; - this.levels = []; - for (let i = 0; i < levelsLength; i++) { - const level = { - width, - height, - items: [] - }; - this.levels.push(level); - width = Math.ceil(width / 2); - height = Math.ceil(height / 2); - } - } - reset(i, j) { - let currentLevel = 0, - value = 0, - level; - while (currentLevel < this.levels.length) { - level = this.levels[currentLevel]; - const index = i + j * level.width; - if (level.items[index] !== undefined) { - value = level.items[index]; - break; - } - level.index = index; - i >>= 1; - j >>= 1; - currentLevel++; - } - currentLevel--; - level = this.levels[currentLevel]; - level.items[level.index] = value; - this.currentLevel = currentLevel; - delete this.value; - } - incrementValue() { - const level = this.levels[this.currentLevel]; - level.items[level.index]++; - } - nextLevel() { - let currentLevel = this.currentLevel; - let level = this.levels[currentLevel]; - const value = level.items[level.index]; - currentLevel--; - if (currentLevel < 0) { - this.value = value; - return false; - } - this.currentLevel = currentLevel; - level = this.levels[currentLevel]; - level.items[level.index] = value; - return true; - } -} -class InclusionTree { - constructor(width, height, defaultValue) { - const levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1; - this.levels = []; - for (let i = 0; i < levelsLength; i++) { - const items = new Uint8Array(width * height); - for (let j = 0, jj = items.length; j < jj; j++) { - items[j] = defaultValue; - } - const level = { - width, - height, - items - }; - this.levels.push(level); - width = Math.ceil(width / 2); - height = Math.ceil(height / 2); - } - } - reset(i, j, stopValue) { - let currentLevel = 0; - while (currentLevel < this.levels.length) { - const level = this.levels[currentLevel]; - const index = i + j * level.width; - level.index = index; - const value = level.items[index]; - if (value === 0xff) { - break; - } - if (value > stopValue) { - this.currentLevel = currentLevel; - this.propagateValues(); - return false; - } - i >>= 1; - j >>= 1; - currentLevel++; - } - this.currentLevel = currentLevel - 1; - return true; - } - incrementValue(stopValue) { - const level = this.levels[this.currentLevel]; - level.items[level.index] = stopValue + 1; - this.propagateValues(); - } - propagateValues() { - let levelIndex = this.currentLevel; - let level = this.levels[levelIndex]; - const currentValue = level.items[level.index]; - while (--levelIndex >= 0) { - level = this.levels[levelIndex]; - level.items[level.index] = currentValue; - } - } - nextLevel() { - let currentLevel = this.currentLevel; - let level = this.levels[currentLevel]; - const value = level.items[level.index]; - level.items[level.index] = 0xff; - currentLevel--; - if (currentLevel < 0) { - return false; - } - this.currentLevel = currentLevel; - level = this.levels[currentLevel]; - level.items[level.index] = value; - return true; - } -} -class BitModel { - static UNIFORM_CONTEXT = 17; - static RUNLENGTH_CONTEXT = 18; - static LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]); - static HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]); - static HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]); - constructor(width, height, subband, zeroBitPlanes, mb) { - this.width = width; - this.height = height; - let contextLabelTable; - if (subband === "HH") { - contextLabelTable = BitModel.HHContextLabel; - } else if (subband === "HL") { - contextLabelTable = BitModel.HLContextLabel; - } else { - contextLabelTable = BitModel.LLAndLHContextsLabel; - } - this.contextLabelTable = contextLabelTable; - const coefficientCount = width * height; - this.neighborsSignificance = new Uint8Array(coefficientCount); - this.coefficentsSign = new Uint8Array(coefficientCount); - let coefficentsMagnitude; - if (mb > 14) { - coefficentsMagnitude = new Uint32Array(coefficientCount); - } else if (mb > 6) { - coefficentsMagnitude = new Uint16Array(coefficientCount); - } else { - coefficentsMagnitude = new Uint8Array(coefficientCount); - } - this.coefficentsMagnitude = coefficentsMagnitude; - this.processingFlags = new Uint8Array(coefficientCount); - const bitsDecoded = new Uint8Array(coefficientCount); - if (zeroBitPlanes !== 0) { - for (let i = 0; i < coefficientCount; i++) { - bitsDecoded[i] = zeroBitPlanes; - } - } - this.bitsDecoded = bitsDecoded; - this.reset(); - } - setDecoder(decoder) { - this.decoder = decoder; - } - reset() { - this.contexts = new Int8Array(19); - this.contexts[0] = 4 << 1 | 0; - this.contexts[BitModel.UNIFORM_CONTEXT] = 46 << 1 | 0; - this.contexts[BitModel.RUNLENGTH_CONTEXT] = 3 << 1 | 0; - } - setNeighborsSignificance(row, column, index) { - const neighborsSignificance = this.neighborsSignificance; - const width = this.width, - height = this.height; - const left = column > 0; - const right = column + 1 < width; - let i; - if (row > 0) { - i = index - width; - if (left) { - neighborsSignificance[i - 1] += 0x10; - } - if (right) { - neighborsSignificance[i + 1] += 0x10; - } - neighborsSignificance[i] += 0x04; - } - if (row + 1 < height) { - i = index + width; - if (left) { - neighborsSignificance[i - 1] += 0x10; - } - if (right) { - neighborsSignificance[i + 1] += 0x10; - } - neighborsSignificance[i] += 0x04; - } - if (left) { - neighborsSignificance[index - 1] += 0x01; - } - if (right) { - neighborsSignificance[index + 1] += 0x01; - } - neighborsSignificance[index] |= 0x80; - } - runSignificancePropagationPass() { - const decoder = this.decoder; - const width = this.width, - height = this.height; - const coefficentsMagnitude = this.coefficentsMagnitude; - const coefficentsSign = this.coefficentsSign; - const neighborsSignificance = this.neighborsSignificance; - const processingFlags = this.processingFlags; - const contexts = this.contexts; - const labels = this.contextLabelTable; - const bitsDecoded = this.bitsDecoded; - const processedInverseMask = ~1; - const processedMask = 1; - const firstMagnitudeBitMask = 2; - for (let i0 = 0; i0 < height; i0 += 4) { - for (let j = 0; j < width; j++) { - let index = i0 * width + j; - for (let i1 = 0; i1 < 4; i1++, index += width) { - const i = i0 + i1; - if (i >= height) { - break; - } - processingFlags[index] &= processedInverseMask; - if (coefficentsMagnitude[index] || !neighborsSignificance[index]) { - continue; - } - const contextLabel = labels[neighborsSignificance[index]]; - const decision = decoder.readBit(contexts, contextLabel); - if (decision) { - const sign = this.decodeSignBit(i, j, index); - coefficentsSign[index] = sign; - coefficentsMagnitude[index] = 1; - this.setNeighborsSignificance(i, j, index); - processingFlags[index] |= firstMagnitudeBitMask; - } - bitsDecoded[index]++; - processingFlags[index] |= processedMask; - } - } - } - } - decodeSignBit(row, column, index) { - const width = this.width, - height = this.height; - const coefficentsMagnitude = this.coefficentsMagnitude; - const coefficentsSign = this.coefficentsSign; - let contribution, sign0, sign1, significance1; - let contextLabel, decoded; - significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0; - if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) { - sign1 = coefficentsSign[index + 1]; - if (significance1) { - sign0 = coefficentsSign[index - 1]; - contribution = 1 - sign1 - sign0; - } else { - contribution = 1 - sign1 - sign1; - } - } else if (significance1) { - sign0 = coefficentsSign[index - 1]; - contribution = 1 - sign0 - sign0; - } else { - contribution = 0; - } - const horizontalContribution = 3 * contribution; - significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0; - if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) { - sign1 = coefficentsSign[index + width]; - if (significance1) { - sign0 = coefficentsSign[index - width]; - contribution = 1 - sign1 - sign0 + horizontalContribution; - } else { - contribution = 1 - sign1 - sign1 + horizontalContribution; - } - } else if (significance1) { - sign0 = coefficentsSign[index - width]; - contribution = 1 - sign0 - sign0 + horizontalContribution; - } else { - contribution = horizontalContribution; - } - if (contribution >= 0) { - contextLabel = 9 + contribution; - decoded = this.decoder.readBit(this.contexts, contextLabel); - } else { - contextLabel = 9 - contribution; - decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1; - } - return decoded; - } - runMagnitudeRefinementPass() { - const decoder = this.decoder; - const width = this.width, - height = this.height; - const coefficentsMagnitude = this.coefficentsMagnitude; - const neighborsSignificance = this.neighborsSignificance; - const contexts = this.contexts; - const bitsDecoded = this.bitsDecoded; - const processingFlags = this.processingFlags; - const processedMask = 1; - const firstMagnitudeBitMask = 2; - const length = width * height; - const width4 = width * 4; - for (let index0 = 0, indexNext; index0 < length; index0 = indexNext) { - indexNext = Math.min(length, index0 + width4); - for (let j = 0; j < width; j++) { - for (let index = index0 + j; index < indexNext; index += width) { - if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { - continue; - } - let contextLabel = 16; - if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) { - processingFlags[index] ^= firstMagnitudeBitMask; - const significance = neighborsSignificance[index] & 127; - contextLabel = significance === 0 ? 15 : 14; - } - const bit = decoder.readBit(contexts, contextLabel); - coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit; - bitsDecoded[index]++; - processingFlags[index] |= processedMask; - } - } - } - } - runCleanupPass() { - const decoder = this.decoder; - const width = this.width, - height = this.height; - const neighborsSignificance = this.neighborsSignificance; - const coefficentsMagnitude = this.coefficentsMagnitude; - const coefficentsSign = this.coefficentsSign; - const contexts = this.contexts; - const labels = this.contextLabelTable; - const bitsDecoded = this.bitsDecoded; - const processingFlags = this.processingFlags; - const processedMask = 1; - const firstMagnitudeBitMask = 2; - const oneRowDown = width; - const twoRowsDown = width * 2; - const threeRowsDown = width * 3; - let iNext; - for (let i0 = 0; i0 < height; i0 = iNext) { - iNext = Math.min(i0 + 4, height); - const indexBase = i0 * width; - const checkAllEmpty = i0 + 3 < height; - for (let j = 0; j < width; j++) { - const index0 = indexBase + j; - const allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0; - let i1 = 0, - index = index0; - let i = i0, - sign; - if (allEmpty) { - const hasSignificantCoefficent = decoder.readBit(contexts, BitModel.RUNLENGTH_CONTEXT); - if (!hasSignificantCoefficent) { - bitsDecoded[index0]++; - bitsDecoded[index0 + oneRowDown]++; - bitsDecoded[index0 + twoRowsDown]++; - bitsDecoded[index0 + threeRowsDown]++; - continue; - } - i1 = decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT); - if (i1 !== 0) { - i = i0 + i1; - index += i1 * width; - } - sign = this.decodeSignBit(i, j, index); - coefficentsSign[index] = sign; - coefficentsMagnitude[index] = 1; - this.setNeighborsSignificance(i, j, index); - processingFlags[index] |= firstMagnitudeBitMask; - index = index0; - for (let i2 = i0; i2 <= i; i2++, index += width) { - bitsDecoded[index]++; - } - i1++; - } - for (i = i0 + i1; i < iNext; i++, index += width) { - if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { - continue; - } - const contextLabel = labels[neighborsSignificance[index]]; - const decision = decoder.readBit(contexts, contextLabel); - if (decision === 1) { - sign = this.decodeSignBit(i, j, index); - coefficentsSign[index] = sign; - coefficentsMagnitude[index] = 1; - this.setNeighborsSignificance(i, j, index); - processingFlags[index] |= firstMagnitudeBitMask; - } - bitsDecoded[index]++; - } - } - } - } - checkSegmentationSymbol() { - const decoder = this.decoder; - const contexts = this.contexts; - const symbol = decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT); - if (symbol !== 0xa) { - throw new JpxError("Invalid segmentation symbol"); - } - } -} -class Transform { - constructor() { - if (this.constructor === Transform) { - (0, _util.unreachable)("Cannot initialize Transform."); - } - } - calculate(subbands, u0, v0) { - let ll = subbands[0]; - for (let i = 1, ii = subbands.length; i < ii; i++) { - ll = this.iterate(ll, subbands[i], u0, v0); - } - return ll; - } - extend(buffer, offset, size) { - let i1 = offset - 1, - j1 = offset + 1; - let i2 = offset + size - 2, - j2 = offset + size; - buffer[i1--] = buffer[j1++]; - buffer[j2++] = buffer[i2--]; - buffer[i1--] = buffer[j1++]; - buffer[j2++] = buffer[i2--]; - buffer[i1--] = buffer[j1++]; - buffer[j2++] = buffer[i2--]; - buffer[i1] = buffer[j1]; - buffer[j2] = buffer[i2]; - } - filter(x, offset, length) { - (0, _util.unreachable)("Abstract method `filter` called"); - } - iterate(ll, hl_lh_hh, u0, v0) { - const llWidth = ll.width, - llHeight = ll.height; - let llItems = ll.items; - const width = hl_lh_hh.width; - const height = hl_lh_hh.height; - const items = hl_lh_hh.items; - let i, j, k, l, u, v; - for (k = 0, i = 0; i < llHeight; i++) { - l = i * 2 * width; - for (j = 0; j < llWidth; j++, k++, l += 2) { - items[l] = llItems[k]; - } - } - llItems = ll.items = null; - const bufferPadding = 4; - const rowBuffer = new Float32Array(width + 2 * bufferPadding); - if (width === 1) { - if ((u0 & 1) !== 0) { - for (v = 0, k = 0; v < height; v++, k += width) { - items[k] *= 0.5; - } - } - } else { - for (v = 0, k = 0; v < height; v++, k += width) { - rowBuffer.set(items.subarray(k, k + width), bufferPadding); - this.extend(rowBuffer, bufferPadding, width); - this.filter(rowBuffer, bufferPadding, width); - items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k); - } - } - let numBuffers = 16; - const colBuffers = []; - for (i = 0; i < numBuffers; i++) { - colBuffers.push(new Float32Array(height + 2 * bufferPadding)); - } - let b, - currentBuffer = 0; - ll = bufferPadding + height; - if (height === 1) { - if ((v0 & 1) !== 0) { - for (u = 0; u < width; u++) { - items[u] *= 0.5; - } - } - } else { - for (u = 0; u < width; u++) { - if (currentBuffer === 0) { - numBuffers = Math.min(width - u, numBuffers); - for (k = u, l = bufferPadding; l < ll; k += width, l++) { - for (b = 0; b < numBuffers; b++) { - colBuffers[b][l] = items[k + b]; - } - } - currentBuffer = numBuffers; - } - currentBuffer--; - const buffer = colBuffers[currentBuffer]; - this.extend(buffer, bufferPadding, height); - this.filter(buffer, bufferPadding, height); - if (currentBuffer === 0) { - k = u - numBuffers + 1; - for (l = bufferPadding; l < ll; k += width, l++) { - for (b = 0; b < numBuffers; b++) { - items[k + b] = colBuffers[b][l]; - } - } - } - } - } - return { - width, - height, - items - }; - } -} -class IrreversibleTransform extends Transform { - filter(x, offset, length) { - const len = length >> 1; - offset |= 0; - let j, n, current, next; - const alpha = -1.586134342059924; - const beta = -0.052980118572961; - const gamma = 0.882911075530934; - const delta = 0.443506852043971; - const K = 1.230174104914001; - const K_ = 1 / K; - j = offset - 3; - for (n = len + 4; n--; j += 2) { - x[j] *= K_; - } - j = offset - 2; - current = delta * x[j - 1]; - for (n = len + 3; n--; j += 2) { - next = delta * x[j + 1]; - x[j] = K * x[j] - current - next; - if (n--) { - j += 2; - current = delta * x[j + 1]; - x[j] = K * x[j] - current - next; - } else { - break; - } - } - j = offset - 1; - current = gamma * x[j - 1]; - for (n = len + 2; n--; j += 2) { - next = gamma * x[j + 1]; - x[j] -= current + next; - if (n--) { - j += 2; - current = gamma * x[j + 1]; - x[j] -= current + next; - } else { - break; - } - } - j = offset; - current = beta * x[j - 1]; - for (n = len + 1; n--; j += 2) { - next = beta * x[j + 1]; - x[j] -= current + next; - if (n--) { - j += 2; - current = beta * x[j + 1]; - x[j] -= current + next; - } else { - break; - } - } - if (len !== 0) { - j = offset + 1; - current = alpha * x[j - 1]; - for (n = len; n--; j += 2) { - next = alpha * x[j + 1]; - x[j] -= current + next; - if (n--) { - j += 2; - current = alpha * x[j + 1]; - x[j] -= current + next; - } else { - break; - } - } - } - } -} -class ReversibleTransform extends Transform { - filter(x, offset, length) { - const len = length >> 1; - offset |= 0; - let j, n; - for (j = offset, n = len + 1; n--; j += 2) { - x[j] -= x[j - 1] + x[j + 1] + 2 >> 2; - } - for (j = offset + 1, n = len; n--; j += 2) { - x[j] += x[j - 1] + x[j + 1] >> 1; - } - } -} - -/***/ }), -/* 31 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.LZWStream = void 0; -var _decode_stream = __w_pdfjs_require__(18); -class LZWStream extends _decode_stream.DecodeStream { - constructor(str, maybeLength, earlyChange) { - super(maybeLength); - this.str = str; - this.dict = str.dict; - this.cachedData = 0; - this.bitsCached = 0; - const maxLzwDictionarySize = 4096; - const lzwState = { - earlyChange, - codeLength: 9, - nextCode: 258, - dictionaryValues: new Uint8Array(maxLzwDictionarySize), - dictionaryLengths: new Uint16Array(maxLzwDictionarySize), - dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize), - currentSequence: new Uint8Array(maxLzwDictionarySize), - currentSequenceLength: 0 - }; - for (let i = 0; i < 256; ++i) { - lzwState.dictionaryValues[i] = i; - lzwState.dictionaryLengths[i] = 1; - } - this.lzwState = lzwState; - } - readBits(n) { - let bitsCached = this.bitsCached; - let cachedData = this.cachedData; - while (bitsCached < n) { - const c = this.str.getByte(); - if (c === -1) { - this.eof = true; - return null; - } - cachedData = cachedData << 8 | c; - bitsCached += 8; - } - this.bitsCached = bitsCached -= n; - this.cachedData = cachedData; - this.lastCode = null; - return cachedData >>> bitsCached & (1 << n) - 1; - } - readBlock() { - const blockSize = 512, - decodedSizeDelta = blockSize; - let estimatedDecodedSize = blockSize * 2; - let i, j, q; - const lzwState = this.lzwState; - if (!lzwState) { - return; - } - const earlyChange = lzwState.earlyChange; - let nextCode = lzwState.nextCode; - const dictionaryValues = lzwState.dictionaryValues; - const dictionaryLengths = lzwState.dictionaryLengths; - const dictionaryPrevCodes = lzwState.dictionaryPrevCodes; - let codeLength = lzwState.codeLength; - let prevCode = lzwState.prevCode; - const currentSequence = lzwState.currentSequence; - let currentSequenceLength = lzwState.currentSequenceLength; - let decodedLength = 0; - let currentBufferLength = this.bufferLength; - let buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); - for (i = 0; i < blockSize; i++) { - const code = this.readBits(codeLength); - const hasPrev = currentSequenceLength > 0; - if (code < 256) { - currentSequence[0] = code; - currentSequenceLength = 1; - } else if (code >= 258) { - if (code < nextCode) { - currentSequenceLength = dictionaryLengths[code]; - for (j = currentSequenceLength - 1, q = code; j >= 0; j--) { - currentSequence[j] = dictionaryValues[q]; - q = dictionaryPrevCodes[q]; - } - } else { - currentSequence[currentSequenceLength++] = currentSequence[0]; - } - } else if (code === 256) { - codeLength = 9; - nextCode = 258; - currentSequenceLength = 0; - continue; - } else { - this.eof = true; - delete this.lzwState; - break; - } - if (hasPrev) { - dictionaryPrevCodes[nextCode] = prevCode; - dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1; - dictionaryValues[nextCode] = currentSequence[0]; - nextCode++; - codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0; - } - prevCode = code; - decodedLength += currentSequenceLength; - if (estimatedDecodedSize < decodedLength) { - do { - estimatedDecodedSize += decodedSizeDelta; - } while (estimatedDecodedSize < decodedLength); - buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); - } - for (j = 0; j < currentSequenceLength; j++) { - buffer[currentBufferLength++] = currentSequence[j]; - } - } - lzwState.nextCode = nextCode; - lzwState.codeLength = codeLength; - lzwState.prevCode = prevCode; - lzwState.currentSequenceLength = currentSequenceLength; - this.bufferLength = currentBufferLength; - } -} -exports.LZWStream = LZWStream; - -/***/ }), -/* 32 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PredictorStream = void 0; -var _decode_stream = __w_pdfjs_require__(18); -var _primitives = __w_pdfjs_require__(4); -var _util = __w_pdfjs_require__(2); -class PredictorStream extends _decode_stream.DecodeStream { - constructor(str, maybeLength, params) { - super(maybeLength); - if (!(params instanceof _primitives.Dict)) { - return str; - } - const predictor = this.predictor = params.get("Predictor") || 1; - if (predictor <= 1) { - return str; - } - if (predictor !== 2 && (predictor < 10 || predictor > 15)) { - throw new _util.FormatError(`Unsupported predictor: ${predictor}`); - } - this.readBlock = predictor === 2 ? this.readBlockTiff : this.readBlockPng; - this.str = str; - this.dict = str.dict; - const colors = this.colors = params.get("Colors") || 1; - const bits = this.bits = params.get("BPC", "BitsPerComponent") || 8; - const columns = this.columns = params.get("Columns") || 1; - this.pixBytes = colors * bits + 7 >> 3; - this.rowBytes = columns * colors * bits + 7 >> 3; - return this; - } - readBlockTiff() { - const rowBytes = this.rowBytes; - const bufferLength = this.bufferLength; - const buffer = this.ensureBuffer(bufferLength + rowBytes); - const bits = this.bits; - const colors = this.colors; - const rawBytes = this.str.getBytes(rowBytes); - this.eof = !rawBytes.length; - if (this.eof) { - return; - } - let inbuf = 0, - outbuf = 0; - let inbits = 0, - outbits = 0; - let pos = bufferLength; - let i; - if (bits === 1 && colors === 1) { - for (i = 0; i < rowBytes; ++i) { - let c = rawBytes[i] ^ inbuf; - c ^= c >> 1; - c ^= c >> 2; - c ^= c >> 4; - inbuf = (c & 1) << 7; - buffer[pos++] = c; - } - } else if (bits === 8) { - for (i = 0; i < colors; ++i) { - buffer[pos++] = rawBytes[i]; - } - for (; i < rowBytes; ++i) { - buffer[pos] = buffer[pos - colors] + rawBytes[i]; - pos++; - } - } else if (bits === 16) { - const bytesPerPixel = colors * 2; - for (i = 0; i < bytesPerPixel; ++i) { - buffer[pos++] = rawBytes[i]; - } - for (; i < rowBytes; i += 2) { - const sum = ((rawBytes[i] & 0xff) << 8) + (rawBytes[i + 1] & 0xff) + ((buffer[pos - bytesPerPixel] & 0xff) << 8) + (buffer[pos - bytesPerPixel + 1] & 0xff); - buffer[pos++] = sum >> 8 & 0xff; - buffer[pos++] = sum & 0xff; - } - } else { - const compArray = new Uint8Array(colors + 1); - const bitMask = (1 << bits) - 1; - let j = 0, - k = bufferLength; - const columns = this.columns; - for (i = 0; i < columns; ++i) { - for (let kk = 0; kk < colors; ++kk) { - if (inbits < bits) { - inbuf = inbuf << 8 | rawBytes[j++] & 0xff; - inbits += 8; - } - compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask; - inbits -= bits; - outbuf = outbuf << bits | compArray[kk]; - outbits += bits; - if (outbits >= 8) { - buffer[k++] = outbuf >> outbits - 8 & 0xff; - outbits -= 8; - } - } - } - if (outbits > 0) { - buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1); - } - } - this.bufferLength += rowBytes; - } - readBlockPng() { - const rowBytes = this.rowBytes; - const pixBytes = this.pixBytes; - const predictor = this.str.getByte(); - const rawBytes = this.str.getBytes(rowBytes); - this.eof = !rawBytes.length; - if (this.eof) { - return; - } - const bufferLength = this.bufferLength; - const buffer = this.ensureBuffer(bufferLength + rowBytes); - let prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength); - if (prevRow.length === 0) { - prevRow = new Uint8Array(rowBytes); - } - let i, - j = bufferLength, - up, - c; - switch (predictor) { - case 0: - for (i = 0; i < rowBytes; ++i) { - buffer[j++] = rawBytes[i]; - } - break; - case 1: - for (i = 0; i < pixBytes; ++i) { - buffer[j++] = rawBytes[i]; - } - for (; i < rowBytes; ++i) { - buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xff; - j++; - } - break; - case 2: - for (i = 0; i < rowBytes; ++i) { - buffer[j++] = prevRow[i] + rawBytes[i] & 0xff; - } - break; - case 3: - for (i = 0; i < pixBytes; ++i) { - buffer[j++] = (prevRow[i] >> 1) + rawBytes[i]; - } - for (; i < rowBytes; ++i) { - buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xff; - j++; - } - break; - case 4: - for (i = 0; i < pixBytes; ++i) { - up = prevRow[i]; - c = rawBytes[i]; - buffer[j++] = up + c; - } - for (; i < rowBytes; ++i) { - up = prevRow[i]; - const upLeft = prevRow[i - pixBytes]; - const left = buffer[j - pixBytes]; - const p = left + up - upLeft; - let pa = p - left; - if (pa < 0) { - pa = -pa; - } - let pb = p - up; - if (pb < 0) { - pb = -pb; - } - let pc = p - upLeft; - if (pc < 0) { - pc = -pc; - } - c = rawBytes[i]; - if (pa <= pb && pa <= pc) { - buffer[j++] = left + c; - } else if (pb <= pc) { - buffer[j++] = up + c; - } else { - buffer[j++] = upLeft + c; - } - } - break; - default: - throw new _util.FormatError(`Unsupported predictor: ${predictor}`); - } - this.bufferLength += rowBytes; - } -} -exports.PredictorStream = PredictorStream; - -/***/ }), -/* 33 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.RunLengthStream = void 0; -var _decode_stream = __w_pdfjs_require__(18); -class RunLengthStream extends _decode_stream.DecodeStream { - constructor(str, maybeLength) { - super(maybeLength); - this.str = str; - this.dict = str.dict; - } - readBlock() { - const repeatHeader = this.str.getBytes(2); - if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) { - this.eof = true; - return; - } - let buffer; - let bufferLength = this.bufferLength; - let n = repeatHeader[0]; - if (n < 128) { - buffer = this.ensureBuffer(bufferLength + n + 1); - buffer[bufferLength++] = repeatHeader[1]; - if (n > 0) { - const source = this.str.getBytes(n); - buffer.set(source, bufferLength); - bufferLength += n; - } - } else { - n = 257 - n; - const b = repeatHeader[1]; - buffer = this.ensureBuffer(bufferLength + n + 1); - for (let i = 0; i < n; i++) { - buffer[bufferLength++] = b; - } - } - this.bufferLength = bufferLength; - } -} -exports.RunLengthStream = RunLengthStream; - -/***/ }), -/* 34 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Font = exports.ErrorFont = void 0; -var _util = __w_pdfjs_require__(2); -var _cff_parser = __w_pdfjs_require__(35); -var _fonts_utils = __w_pdfjs_require__(38); -var _unicode = __w_pdfjs_require__(40); -var _glyphlist = __w_pdfjs_require__(39); -var _encodings = __w_pdfjs_require__(37); -var _standard_fonts = __w_pdfjs_require__(41); -var _to_unicode_map = __w_pdfjs_require__(42); -var _cff_font = __w_pdfjs_require__(43); -var _font_renderer = __w_pdfjs_require__(44); -var _metrics = __w_pdfjs_require__(45); -var _glyf = __w_pdfjs_require__(46); -var _cmap = __w_pdfjs_require__(14); -var _opentype_file_builder = __w_pdfjs_require__(47); -var _core_utils = __w_pdfjs_require__(3); -var _stream = __w_pdfjs_require__(8); -var _type1_font = __w_pdfjs_require__(48); -const PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]]; -const PDF_GLYPH_SPACE_UNITS = 1000; -const EXPORT_DATA_PROPERTIES = ["ascent", "bbox", "black", "bold", "charProcOperatorList", "composite", "cssFontInfo", "data", "defaultVMetrics", "defaultWidth", "descent", "fallbackName", "fontMatrix", "isInvalidPDFjsFont", "isType3Font", "italic", "loadedName", "mimetype", "missingFile", "name", "remeasure", "subtype", "systemFontInfo", "type", "vertical"]; -const EXPORT_DATA_EXTRA_PROPERTIES = ["cMap", "defaultEncoding", "differences", "isMonospace", "isSerifFont", "isSymbolicFont", "seacMap", "toFontChar", "toUnicode", "vmetrics", "widths"]; -function adjustWidths(properties) { - if (!properties.fontMatrix) { - return; - } - if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) { - return; - } - const scale = 0.001 / properties.fontMatrix[0]; - const glyphsWidths = properties.widths; - for (const glyph in glyphsWidths) { - glyphsWidths[glyph] *= scale; - } - properties.defaultWidth *= scale; -} -function adjustTrueTypeToUnicode(properties, isSymbolicFont, nameRecords) { - if (properties.isInternalFont) { - return; - } - if (properties.hasIncludedToUnicodeMap) { - return; - } - if (properties.hasEncoding) { - return; - } - if (properties.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { - return; - } - if (!isSymbolicFont) { - return; - } - if (nameRecords.length === 0) { - return; - } - if (properties.defaultEncoding === _encodings.WinAnsiEncoding) { - return; - } - for (const r of nameRecords) { - if (!isWinNameRecord(r)) { - return; - } - } - const encoding = _encodings.WinAnsiEncoding; - const toUnicode = [], - glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - for (const charCode in encoding) { - const glyphName = encoding[charCode]; - if (glyphName === "") { - continue; - } - const unicode = glyphsUnicodeMap[glyphName]; - if (unicode === undefined) { - continue; - } - toUnicode[charCode] = String.fromCharCode(unicode); - } - if (toUnicode.length > 0) { - properties.toUnicode.amend(toUnicode); - } -} -function adjustType1ToUnicode(properties, builtInEncoding) { - if (properties.isInternalFont) { - return; - } - if (properties.hasIncludedToUnicodeMap) { - return; - } - if (builtInEncoding === properties.defaultEncoding) { - return; - } - if (properties.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { - return; - } - const toUnicode = [], - glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - for (const charCode in builtInEncoding) { - if (properties.hasEncoding) { - if (properties.baseEncodingName || properties.differences[charCode] !== undefined) { - continue; - } - } - const glyphName = builtInEncoding[charCode]; - const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); - if (unicode !== -1) { - toUnicode[charCode] = String.fromCharCode(unicode); - } - } - if (toUnicode.length > 0) { - properties.toUnicode.amend(toUnicode); - } -} -function amendFallbackToUnicode(properties) { - if (!properties.fallbackToUnicode) { - return; - } - if (properties.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { - return; - } - const toUnicode = []; - for (const charCode in properties.fallbackToUnicode) { - if (properties.toUnicode.has(charCode)) { - continue; - } - toUnicode[charCode] = properties.fallbackToUnicode[charCode]; - } - if (toUnicode.length > 0) { - properties.toUnicode.amend(toUnicode); - } -} -class Glyph { - constructor(originalCharCode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { - this.originalCharCode = originalCharCode; - this.fontChar = fontChar; - this.unicode = unicode; - this.accent = accent; - this.width = width; - this.vmetric = vmetric; - this.operatorListId = operatorListId; - this.isSpace = isSpace; - this.isInFont = isInFont; - } - get category() { - return (0, _util.shadow)(this, "category", (0, _unicode.getCharUnicodeCategory)(this.unicode), true); - } -} -function int16(b0, b1) { - return (b0 << 8) + b1; -} -function writeSignedInt16(bytes, index, value) { - bytes[index + 1] = value; - bytes[index] = value >>> 8; -} -function signedInt16(b0, b1) { - const value = (b0 << 8) + b1; - return value & 1 << 15 ? value - 0x10000 : value; -} -function int32(b0, b1, b2, b3) { - return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; -} -function string16(value) { - return String.fromCharCode(value >> 8 & 0xff, value & 0xff); -} -function safeString16(value) { - if (value > 0x7fff) { - value = 0x7fff; - } else if (value < -0x8000) { - value = -0x8000; - } - return String.fromCharCode(value >> 8 & 0xff, value & 0xff); -} -function isTrueTypeFile(file) { - const header = file.peekBytes(4); - return (0, _core_utils.readUint32)(header, 0) === 0x00010000 || (0, _util.bytesToString)(header) === "true"; -} -function isTrueTypeCollectionFile(file) { - const header = file.peekBytes(4); - return (0, _util.bytesToString)(header) === "ttcf"; -} -function isOpenTypeFile(file) { - const header = file.peekBytes(4); - return (0, _util.bytesToString)(header) === "OTTO"; -} -function isType1File(file) { - const header = file.peekBytes(2); - if (header[0] === 0x25 && header[1] === 0x21) { - return true; - } - if (header[0] === 0x80 && header[1] === 0x01) { - return true; - } - return false; -} -function isCFFFile(file) { - const header = file.peekBytes(4); - if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) { - return true; - } - return false; -} -function getFontFileType(file, { - type, - subtype, - composite -}) { - let fileType, fileSubtype; - if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) { - fileType = composite ? "CIDFontType2" : "TrueType"; - } else if (isOpenTypeFile(file)) { - fileType = composite ? "CIDFontType2" : "OpenType"; - } else if (isType1File(file)) { - if (composite) { - fileType = "CIDFontType0"; - } else { - fileType = type === "MMType1" ? "MMType1" : "Type1"; - } - } else if (isCFFFile(file)) { - if (composite) { - fileType = "CIDFontType0"; - fileSubtype = "CIDFontType0C"; - } else { - fileType = type === "MMType1" ? "MMType1" : "Type1"; - fileSubtype = "Type1C"; - } - } else { - (0, _util.warn)("getFontFileType: Unable to detect correct font file Type/Subtype."); - fileType = type; - fileSubtype = subtype; - } - return [fileType, fileSubtype]; -} -function applyStandardFontGlyphMap(map, glyphMap) { - for (const charCode in glyphMap) { - map[+charCode] = glyphMap[charCode]; - } -} -function buildToFontChar(encoding, glyphsUnicodeMap, differences) { - const toFontChar = []; - let unicode; - for (let i = 0, ii = encoding.length; i < ii; i++) { - unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap); - if (unicode !== -1) { - toFontChar[i] = unicode; - } - } - for (const charCode in differences) { - unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap); - if (unicode !== -1) { - toFontChar[+charCode] = unicode; - } - } - return toFontChar; -} -function isMacNameRecord(r) { - return r.platform === 1 && r.encoding === 0 && r.language === 0; -} -function isWinNameRecord(r) { - return r.platform === 3 && r.encoding === 1 && r.language === 0x409; -} -function convertCidString(charCode, cid, shouldThrow = false) { - switch (cid.length) { - case 1: - return cid.charCodeAt(0); - case 2: - return cid.charCodeAt(0) << 8 | cid.charCodeAt(1); - } - const msg = `Unsupported CID string (charCode ${charCode}): "${cid}".`; - if (shouldThrow) { - throw new _util.FormatError(msg); - } - (0, _util.warn)(msg); - return cid; -} -function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId, toUnicode) { - const newMap = Object.create(null); - const toUnicodeExtraMap = new Map(); - const toFontChar = []; - const usedGlyphIds = new Set(); - let privateUseAreaIndex = 0; - const privateUseOffetStart = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; - let nextAvailableFontCharCode = privateUseOffetStart; - let privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1]; - const isInPrivateArea = code => PRIVATE_USE_AREAS[0][0] <= code && code <= PRIVATE_USE_AREAS[0][1] || PRIVATE_USE_AREAS[1][0] <= code && code <= PRIVATE_USE_AREAS[1][1]; - for (let originalCharCode in charCodeToGlyphId) { - originalCharCode |= 0; - let glyphId = charCodeToGlyphId[originalCharCode]; - if (!hasGlyph(glyphId)) { - continue; - } - if (nextAvailableFontCharCode > privateUseOffetEnd) { - privateUseAreaIndex++; - if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) { - (0, _util.warn)("Ran out of space in font private use area."); - break; - } - nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; - privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1]; - } - const fontCharCode = nextAvailableFontCharCode++; - if (glyphId === 0) { - glyphId = newGlyphZeroId; - } - let unicode = toUnicode.get(originalCharCode); - if (typeof unicode === "string") { - unicode = unicode.codePointAt(0); - } - if (unicode && !isInPrivateArea(unicode) && !usedGlyphIds.has(glyphId)) { - toUnicodeExtraMap.set(unicode, glyphId); - usedGlyphIds.add(glyphId); - } - newMap[fontCharCode] = glyphId; - toFontChar[originalCharCode] = fontCharCode; - } - return { - toFontChar, - charCodeToGlyphId: newMap, - toUnicodeExtraMap, - nextAvailableFontCharCode - }; -} -function getRanges(glyphs, toUnicodeExtraMap, numGlyphs) { - const codes = []; - for (const charCode in glyphs) { - if (glyphs[charCode] >= numGlyphs) { - continue; - } - codes.push({ - fontCharCode: charCode | 0, - glyphId: glyphs[charCode] - }); - } - if (toUnicodeExtraMap) { - for (const [unicode, glyphId] of toUnicodeExtraMap) { - if (glyphId >= numGlyphs) { - continue; - } - codes.push({ - fontCharCode: unicode, - glyphId - }); - } - } - if (codes.length === 0) { - codes.push({ - fontCharCode: 0, - glyphId: 0 - }); - } - codes.sort(function fontGetRangesSort(a, b) { - return a.fontCharCode - b.fontCharCode; - }); - const ranges = []; - const length = codes.length; - for (let n = 0; n < length;) { - const start = codes[n].fontCharCode; - const codeIndices = [codes[n].glyphId]; - ++n; - let end = start; - while (n < length && end + 1 === codes[n].fontCharCode) { - codeIndices.push(codes[n].glyphId); - ++end; - ++n; - if (end === 0xffff) { - break; - } - } - ranges.push([start, end, codeIndices]); - } - return ranges; -} -function createCmapTable(glyphs, toUnicodeExtraMap, numGlyphs) { - const ranges = getRanges(glyphs, toUnicodeExtraMap, numGlyphs); - const numTables = ranges.at(-1)[1] > 0xffff ? 2 : 1; - let cmap = "\x00\x00" + string16(numTables) + "\x00\x03" + "\x00\x01" + (0, _util.string32)(4 + numTables * 8); - let i, ii, j, jj; - for (i = ranges.length - 1; i >= 0; --i) { - if (ranges[i][0] <= 0xffff) { - break; - } - } - const bmpLength = i + 1; - if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) { - ranges[i][1] = 0xfffe; - } - const trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0; - const segCount = bmpLength + trailingRangesCount; - const searchParams = _opentype_file_builder.OpenTypeFileBuilder.getSearchParams(segCount, 2); - let startCount = ""; - let endCount = ""; - let idDeltas = ""; - let idRangeOffsets = ""; - let glyphsIds = ""; - let bias = 0; - let range, start, end, codes; - for (i = 0, ii = bmpLength; i < ii; i++) { - range = ranges[i]; - start = range[0]; - end = range[1]; - startCount += string16(start); - endCount += string16(end); - codes = range[2]; - let contiguous = true; - for (j = 1, jj = codes.length; j < jj; ++j) { - if (codes[j] !== codes[j - 1] + 1) { - contiguous = false; - break; - } - } - if (!contiguous) { - const offset = (segCount - i) * 2 + bias * 2; - bias += end - start + 1; - idDeltas += string16(0); - idRangeOffsets += string16(offset); - for (j = 0, jj = codes.length; j < jj; ++j) { - glyphsIds += string16(codes[j]); - } - } else { - const startCode = codes[0]; - idDeltas += string16(startCode - start & 0xffff); - idRangeOffsets += string16(0); - } - } - if (trailingRangesCount > 0) { - endCount += "\xFF\xFF"; - startCount += "\xFF\xFF"; - idDeltas += "\x00\x01"; - idRangeOffsets += "\x00\x00"; - } - const format314 = "\x00\x00" + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + "\x00\x00" + startCount + idDeltas + idRangeOffsets + glyphsIds; - let format31012 = ""; - let header31012 = ""; - if (numTables > 1) { - cmap += "\x00\x03" + "\x00\x0A" + (0, _util.string32)(4 + numTables * 8 + 4 + format314.length); - format31012 = ""; - for (i = 0, ii = ranges.length; i < ii; i++) { - range = ranges[i]; - start = range[0]; - codes = range[2]; - let code = codes[0]; - for (j = 1, jj = codes.length; j < jj; ++j) { - if (codes[j] !== codes[j - 1] + 1) { - end = range[0] + j - 1; - format31012 += (0, _util.string32)(start) + (0, _util.string32)(end) + (0, _util.string32)(code); - start = end + 1; - code = codes[j]; - } - } - format31012 += (0, _util.string32)(start) + (0, _util.string32)(range[1]) + (0, _util.string32)(code); - } - header31012 = "\x00\x0C" + "\x00\x00" + (0, _util.string32)(format31012.length + 16) + "\x00\x00\x00\x00" + (0, _util.string32)(format31012.length / 12); - } - return cmap + "\x00\x04" + string16(format314.length + 4) + format314 + header31012 + format31012; -} -function validateOS2Table(os2, file) { - file.pos = (file.start || 0) + os2.offset; - const version = file.getUint16(); - file.skip(60); - const selection = file.getUint16(); - if (version < 4 && selection & 0x0300) { - return false; - } - const firstChar = file.getUint16(); - const lastChar = file.getUint16(); - if (firstChar > lastChar) { - return false; - } - file.skip(6); - const usWinAscent = file.getUint16(); - if (usWinAscent === 0) { - return false; - } - os2.data[8] = os2.data[9] = 0; - return true; -} -function createOS2Table(properties, charstrings, override) { - override ||= { - unitsPerEm: 0, - yMax: 0, - yMin: 0, - ascent: 0, - descent: 0 - }; - let ulUnicodeRange1 = 0; - let ulUnicodeRange2 = 0; - let ulUnicodeRange3 = 0; - let ulUnicodeRange4 = 0; - let firstCharIndex = null; - let lastCharIndex = 0; - let position = -1; - if (charstrings) { - for (let code in charstrings) { - code |= 0; - if (firstCharIndex > code || !firstCharIndex) { - firstCharIndex = code; - } - if (lastCharIndex < code) { - lastCharIndex = code; - } - position = (0, _unicode.getUnicodeRangeFor)(code, position); - if (position < 32) { - ulUnicodeRange1 |= 1 << position; - } else if (position < 64) { - ulUnicodeRange2 |= 1 << position - 32; - } else if (position < 96) { - ulUnicodeRange3 |= 1 << position - 64; - } else if (position < 123) { - ulUnicodeRange4 |= 1 << position - 96; - } else { - throw new _util.FormatError("Unicode ranges Bits > 123 are reserved for internal usage"); - } - } - if (lastCharIndex > 0xffff) { - lastCharIndex = 0xffff; - } - } else { - firstCharIndex = 0; - lastCharIndex = 255; - } - const bbox = properties.bbox || [0, 0, 0, 0]; - const unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; - const scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS; - const typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3])); - let typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1])); - if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) { - typoDescent = -typoDescent; - } - const winAscent = override.yMax || typoAscent; - const winDescent = -override.yMin || -typoDescent; - return "\x00\x03" + "\x02\x24" + "\x01\xF4" + "\x00\x05" + "\x00\x00" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x00\x8C" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x01\xDF" + "\x00\x31" + "\x01\x02" + "\x00\x00" + "\x00\x00\x06" + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + "\x00\x00\x00\x00\x00\x00" + (0, _util.string32)(ulUnicodeRange1) + (0, _util.string32)(ulUnicodeRange2) + (0, _util.string32)(ulUnicodeRange3) + (0, _util.string32)(ulUnicodeRange4) + "\x2A\x32\x31\x2A" + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + "\x00\x64" + string16(winAscent) + string16(winDescent) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + "\x00\x03"; -} -function createPostTable(properties) { - const angle = Math.floor(properties.italicAngle * 2 ** 16); - return "\x00\x03\x00\x00" + (0, _util.string32)(angle) + "\x00\x00" + "\x00\x00" + (0, _util.string32)(properties.fixedPitch ? 1 : 0) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00"; -} -function createPostscriptName(name) { - return name.replaceAll(/[^\x21-\x7E]|[[\](){}<>/%]/g, "").slice(0, 63); -} -function createNameTable(name, proto) { - if (!proto) { - proto = [[], []]; - } - const strings = [proto[0][0] || "Original licence", proto[0][1] || name, proto[0][2] || "Unknown", proto[0][3] || "uniqueID", proto[0][4] || name, proto[0][5] || "Version 0.11", proto[0][6] || createPostscriptName(name), proto[0][7] || "Unknown", proto[0][8] || "Unknown", proto[0][9] || "Unknown"]; - const stringsUnicode = []; - let i, ii, j, jj, str; - for (i = 0, ii = strings.length; i < ii; i++) { - str = proto[1][i] || strings[i]; - const strBufUnicode = []; - for (j = 0, jj = str.length; j < jj; j++) { - strBufUnicode.push(string16(str.charCodeAt(j))); - } - stringsUnicode.push(strBufUnicode.join("")); - } - const names = [strings, stringsUnicode]; - const platforms = ["\x00\x01", "\x00\x03"]; - const encodings = ["\x00\x00", "\x00\x01"]; - const languages = ["\x00\x00", "\x04\x09"]; - const namesRecordCount = strings.length * platforms.length; - let nameTable = "\x00\x00" + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6); - let strOffset = 0; - for (i = 0, ii = platforms.length; i < ii; i++) { - const strs = names[i]; - for (j = 0, jj = strs.length; j < jj; j++) { - str = strs[j]; - const nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset); - nameTable += nameRecord; - strOffset += str.length; - } - } - nameTable += strings.join("") + stringsUnicode.join(""); - return nameTable; -} -class Font { - constructor(name, file, properties) { - this.name = name; - this.psName = null; - this.mimetype = null; - this.disableFontFace = false; - this.loadedName = properties.loadedName; - this.isType3Font = properties.isType3Font; - this.missingFile = false; - this.cssFontInfo = properties.cssFontInfo; - this._charsCache = Object.create(null); - this._glyphCache = Object.create(null); - let isSerifFont = !!(properties.flags & _fonts_utils.FontFlags.Serif); - if (!isSerifFont && !properties.isSimulatedFlags) { - const baseName = name.replaceAll(/[,_]/g, "-").split("-")[0], - serifFonts = (0, _standard_fonts.getSerifFonts)(); - for (const namePart of baseName.split("+")) { - if (serifFonts[namePart]) { - isSerifFont = true; - break; - } - } - } - this.isSerifFont = isSerifFont; - this.isSymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Symbolic); - this.isMonospace = !!(properties.flags & _fonts_utils.FontFlags.FixedPitch); - let { - type, - subtype - } = properties; - this.type = type; - this.subtype = subtype; - this.systemFontInfo = properties.systemFontInfo; - const matches = name.match(/^InvalidPDFjsFont_(.*)_\d+$/); - this.isInvalidPDFjsFont = !!matches; - if (this.isInvalidPDFjsFont) { - this.fallbackName = matches[1]; - } else if (this.isMonospace) { - this.fallbackName = "monospace"; - } else if (this.isSerifFont) { - this.fallbackName = "serif"; - } else { - this.fallbackName = "sans-serif"; - } - if (this.systemFontInfo?.guessFallback) { - this.systemFontInfo.guessFallback = false; - this.systemFontInfo.css += `,${this.fallbackName}`; - } - this.differences = properties.differences; - this.widths = properties.widths; - this.defaultWidth = properties.defaultWidth; - this.composite = properties.composite; - this.cMap = properties.cMap; - this.capHeight = properties.capHeight / PDF_GLYPH_SPACE_UNITS; - this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS; - this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS; - this.lineHeight = this.ascent - this.descent; - this.fontMatrix = properties.fontMatrix; - this.bbox = properties.bbox; - this.defaultEncoding = properties.defaultEncoding; - this.toUnicode = properties.toUnicode; - this.toFontChar = []; - if (properties.type === "Type3") { - for (let charCode = 0; charCode < 256; charCode++) { - this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode]; - } - return; - } - this.cidEncoding = properties.cidEncoding || ""; - this.vertical = !!properties.vertical; - if (this.vertical) { - this.vmetrics = properties.vmetrics; - this.defaultVMetrics = properties.defaultVMetrics; - } - if (!file || file.isEmpty) { - if (file) { - (0, _util.warn)('Font file is empty in "' + name + '" (' + this.loadedName + ")"); - } - this.fallbackToSystemFont(properties); - return; - } - [type, subtype] = getFontFileType(file, properties); - if (type !== this.type || subtype !== this.subtype) { - (0, _util.info)("Inconsistent font file Type/SubType, expected: " + `${this.type}/${this.subtype} but found: ${type}/${subtype}.`); - } - let data; - try { - switch (type) { - case "MMType1": - (0, _util.info)("MMType1 font (" + name + "), falling back to Type1."); - case "Type1": - case "CIDFontType0": - this.mimetype = "font/opentype"; - const cff = subtype === "Type1C" || subtype === "CIDFontType0C" ? new _cff_font.CFFFont(file, properties) : new _type1_font.Type1Font(name, file, properties); - adjustWidths(properties); - data = this.convert(name, cff, properties); - break; - case "OpenType": - case "TrueType": - case "CIDFontType2": - this.mimetype = "font/opentype"; - data = this.checkAndRepair(name, file, properties); - if (this.isOpenType) { - adjustWidths(properties); - type = "OpenType"; - } - break; - default: - throw new _util.FormatError(`Font ${type} is not supported`); - } - } catch (e) { - (0, _util.warn)(e); - this.fallbackToSystemFont(properties); - return; - } - amendFallbackToUnicode(properties); - this.data = data; - this.type = type; - this.subtype = subtype; - this.fontMatrix = properties.fontMatrix; - this.widths = properties.widths; - this.defaultWidth = properties.defaultWidth; - this.toUnicode = properties.toUnicode; - this.seacMap = properties.seacMap; - } - get renderer() { - const renderer = _font_renderer.FontRendererFactory.create(this, _fonts_utils.SEAC_ANALYSIS_ENABLED); - return (0, _util.shadow)(this, "renderer", renderer); - } - exportData(extraProperties = false) { - const exportDataProperties = extraProperties ? [...EXPORT_DATA_PROPERTIES, ...EXPORT_DATA_EXTRA_PROPERTIES] : EXPORT_DATA_PROPERTIES; - const data = Object.create(null); - let property, value; - for (property of exportDataProperties) { - value = this[property]; - if (value !== undefined) { - data[property] = value; - } - } - return data; - } - fallbackToSystemFont(properties) { - this.missingFile = true; - const { - name, - type - } = this; - let fontName = (0, _fonts_utils.normalizeFontName)(name); - const stdFontMap = (0, _standard_fonts.getStdFontMap)(), - nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)(); - const isStandardFont = !!stdFontMap[fontName]; - const isMappedToStandardFont = !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]); - fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName; - const fontBasicMetricsMap = (0, _metrics.getFontBasicMetrics)(); - const metrics = fontBasicMetricsMap[fontName]; - if (metrics) { - if (isNaN(this.ascent)) { - this.ascent = metrics.ascent / PDF_GLYPH_SPACE_UNITS; - } - if (isNaN(this.descent)) { - this.descent = metrics.descent / PDF_GLYPH_SPACE_UNITS; - } - if (isNaN(this.capHeight)) { - this.capHeight = metrics.capHeight / PDF_GLYPH_SPACE_UNITS; - } - } - this.bold = /bold/gi.test(fontName); - this.italic = /oblique|italic/gi.test(fontName); - this.black = /Black/g.test(name); - const isNarrow = /Narrow/g.test(name); - this.remeasure = (!isStandardFont || isNarrow) && Object.keys(this.widths).length > 0; - if ((isStandardFont || isMappedToStandardFont) && type === "CIDFontType2" && this.cidEncoding.startsWith("Identity-")) { - const cidToGidMap = properties.cidToGidMap; - const map = []; - applyStandardFontGlyphMap(map, (0, _standard_fonts.getGlyphMapForStandardFonts)()); - if (/Arial-?Black/i.test(name)) { - applyStandardFontGlyphMap(map, (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)()); - } else if (/Calibri/i.test(name)) { - applyStandardFontGlyphMap(map, (0, _standard_fonts.getSupplementalGlyphMapForCalibri)()); - } - if (cidToGidMap) { - for (const charCode in map) { - const cid = map[charCode]; - if (cidToGidMap[cid] !== undefined) { - map[+charCode] = cidToGidMap[cid]; - } - } - if (cidToGidMap.length !== this.toUnicode.length && properties.hasIncludedToUnicodeMap && this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { - this.toUnicode.forEach(function (charCode, unicodeCharCode) { - const cid = map[charCode]; - if (cidToGidMap[cid] === undefined) { - map[+charCode] = unicodeCharCode; - } - }); - } - } - if (!(this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap)) { - this.toUnicode.forEach(function (charCode, unicodeCharCode) { - map[+charCode] = unicodeCharCode; - }); - } - this.toFontChar = map; - this.toUnicode = new _to_unicode_map.ToUnicodeMap(map); - } else if (/Symbol/i.test(fontName)) { - this.toFontChar = buildToFontChar(_encodings.SymbolSetEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences); - } else if (/Dingbats/i.test(fontName)) { - this.toFontChar = buildToFontChar(_encodings.ZapfDingbatsEncoding, (0, _glyphlist.getDingbatsGlyphsUnicode)(), this.differences); - } else if (isStandardFont) { - const map = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences); - if (type === "CIDFontType2" && !this.cidEncoding.startsWith("Identity-") && !(this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap)) { - this.toUnicode.forEach(function (charCode, unicodeCharCode) { - map[+charCode] = unicodeCharCode; - }); - } - this.toFontChar = map; - } else { - const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - const map = []; - this.toUnicode.forEach((charCode, unicodeCharCode) => { - if (!this.composite) { - const glyphName = this.differences[charCode] || this.defaultEncoding[charCode]; - const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); - if (unicode !== -1) { - unicodeCharCode = unicode; - } - } - map[+charCode] = unicodeCharCode; - }); - if (this.composite && this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { - if (/Tahoma|Verdana/i.test(name)) { - applyStandardFontGlyphMap(map, (0, _standard_fonts.getGlyphMapForStandardFonts)()); - } - } - this.toFontChar = map; - } - amendFallbackToUnicode(properties); - this.loadedName = fontName.split("-")[0]; - } - checkAndRepair(name, font, properties) { - const VALID_TABLES = ["OS/2", "cmap", "head", "hhea", "hmtx", "maxp", "name", "post", "loca", "glyf", "fpgm", "prep", "cvt ", "CFF "]; - function readTables(file, numTables) { - const tables = Object.create(null); - tables["OS/2"] = null; - tables.cmap = null; - tables.head = null; - tables.hhea = null; - tables.hmtx = null; - tables.maxp = null; - tables.name = null; - tables.post = null; - for (let i = 0; i < numTables; i++) { - const table = readTableEntry(file); - if (!VALID_TABLES.includes(table.tag)) { - continue; - } - if (table.length === 0) { - continue; - } - tables[table.tag] = table; - } - return tables; - } - function readTableEntry(file) { - const tag = file.getString(4); - const checksum = file.getInt32() >>> 0; - const offset = file.getInt32() >>> 0; - const length = file.getInt32() >>> 0; - const previousPosition = file.pos; - file.pos = file.start || 0; - file.skip(offset); - const data = file.getBytes(length); - file.pos = previousPosition; - if (tag === "head") { - data[8] = data[9] = data[10] = data[11] = 0; - data[17] |= 0x20; - } - return { - tag, - checksum, - length, - offset, - data - }; - } - function readOpenTypeHeader(ttf) { - return { - version: ttf.getString(4), - numTables: ttf.getUint16(), - searchRange: ttf.getUint16(), - entrySelector: ttf.getUint16(), - rangeShift: ttf.getUint16() - }; - } - function readTrueTypeCollectionHeader(ttc) { - const ttcTag = ttc.getString(4); - (0, _util.assert)(ttcTag === "ttcf", "Must be a TrueType Collection font."); - const majorVersion = ttc.getUint16(); - const minorVersion = ttc.getUint16(); - const numFonts = ttc.getInt32() >>> 0; - const offsetTable = []; - for (let i = 0; i < numFonts; i++) { - offsetTable.push(ttc.getInt32() >>> 0); - } - const header = { - ttcTag, - majorVersion, - minorVersion, - numFonts, - offsetTable - }; - switch (majorVersion) { - case 1: - return header; - case 2: - header.dsigTag = ttc.getInt32() >>> 0; - header.dsigLength = ttc.getInt32() >>> 0; - header.dsigOffset = ttc.getInt32() >>> 0; - return header; - } - throw new _util.FormatError(`Invalid TrueType Collection majorVersion: ${majorVersion}.`); - } - function readTrueTypeCollectionData(ttc, fontName) { - const { - numFonts, - offsetTable - } = readTrueTypeCollectionHeader(ttc); - const fontNameParts = fontName.split("+"); - let fallbackData; - for (let i = 0; i < numFonts; i++) { - ttc.pos = (ttc.start || 0) + offsetTable[i]; - const potentialHeader = readOpenTypeHeader(ttc); - const potentialTables = readTables(ttc, potentialHeader.numTables); - if (!potentialTables.name) { - throw new _util.FormatError('TrueType Collection font must contain a "name" table.'); - } - const [nameTable] = readNameTable(potentialTables.name); - for (let j = 0, jj = nameTable.length; j < jj; j++) { - for (let k = 0, kk = nameTable[j].length; k < kk; k++) { - const nameEntry = nameTable[j][k]?.replaceAll(/\s/g, ""); - if (!nameEntry) { - continue; - } - if (nameEntry === fontName) { - return { - header: potentialHeader, - tables: potentialTables - }; - } - if (fontNameParts.length < 2) { - continue; - } - for (const part of fontNameParts) { - if (nameEntry === part) { - fallbackData = { - name: part, - header: potentialHeader, - tables: potentialTables - }; - } - } - } - } - } - if (fallbackData) { - (0, _util.warn)(`TrueType Collection does not contain "${fontName}" font, ` + `falling back to "${fallbackData.name}" font instead.`); - return { - header: fallbackData.header, - tables: fallbackData.tables - }; - } - throw new _util.FormatError(`TrueType Collection does not contain "${fontName}" font.`); - } - function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) { - if (!cmap) { - (0, _util.warn)("No cmap table available."); - return { - platformId: -1, - encodingId: -1, - mappings: [], - hasShortCmap: false - }; - } - let segment; - let start = (file.start || 0) + cmap.offset; - file.pos = start; - file.skip(2); - const numTables = file.getUint16(); - let potentialTable; - let canBreak = false; - for (let i = 0; i < numTables; i++) { - const platformId = file.getUint16(); - const encodingId = file.getUint16(); - const offset = file.getInt32() >>> 0; - let useTable = false; - if (potentialTable?.platformId === platformId && potentialTable?.encodingId === encodingId) { - continue; - } - if (platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 3)) { - useTable = true; - } else if (platformId === 1 && encodingId === 0) { - useTable = true; - } else if (platformId === 3 && encodingId === 1 && (hasEncoding || !potentialTable)) { - useTable = true; - if (!isSymbolicFont) { - canBreak = true; - } - } else if (isSymbolicFont && platformId === 3 && encodingId === 0) { - useTable = true; - let correctlySorted = true; - if (i < numTables - 1) { - const nextBytes = file.peekBytes(2), - nextPlatformId = int16(nextBytes[0], nextBytes[1]); - if (nextPlatformId < platformId) { - correctlySorted = false; - } - } - if (correctlySorted) { - canBreak = true; - } - } - if (useTable) { - potentialTable = { - platformId, - encodingId, - offset - }; - } - if (canBreak) { - break; - } - } - if (potentialTable) { - file.pos = start + potentialTable.offset; - } - if (!potentialTable || file.peekByte() === -1) { - (0, _util.warn)("Could not find a preferred cmap table."); - return { - platformId: -1, - encodingId: -1, - mappings: [], - hasShortCmap: false - }; - } - const format = file.getUint16(); - let hasShortCmap = false; - const mappings = []; - let j, glyphId; - if (format === 0) { - file.skip(2 + 2); - for (j = 0; j < 256; j++) { - const index = file.getByte(); - if (!index) { - continue; - } - mappings.push({ - charCode: j, - glyphId: index - }); - } - hasShortCmap = true; - } else if (format === 2) { - file.skip(2 + 2); - const subHeaderKeys = []; - let maxSubHeaderKey = 0; - for (let i = 0; i < 256; i++) { - const subHeaderKey = file.getUint16() >> 3; - subHeaderKeys.push(subHeaderKey); - maxSubHeaderKey = Math.max(subHeaderKey, maxSubHeaderKey); - } - const subHeaders = []; - for (let i = 0; i <= maxSubHeaderKey; i++) { - subHeaders.push({ - firstCode: file.getUint16(), - entryCount: file.getUint16(), - idDelta: signedInt16(file.getByte(), file.getByte()), - idRangePos: file.pos + file.getUint16() - }); - } - for (let i = 0; i < 256; i++) { - if (subHeaderKeys[i] === 0) { - file.pos = subHeaders[0].idRangePos + 2 * i; - glyphId = file.getUint16(); - mappings.push({ - charCode: i, - glyphId - }); - } else { - const s = subHeaders[subHeaderKeys[i]]; - for (j = 0; j < s.entryCount; j++) { - const charCode = (i << 8) + j + s.firstCode; - file.pos = s.idRangePos + 2 * j; - glyphId = file.getUint16(); - if (glyphId !== 0) { - glyphId = (glyphId + s.idDelta) % 65536; - } - mappings.push({ - charCode, - glyphId - }); - } - } - } - } else if (format === 4) { - file.skip(2 + 2); - const segCount = file.getUint16() >> 1; - file.skip(6); - const segments = []; - let segIndex; - for (segIndex = 0; segIndex < segCount; segIndex++) { - segments.push({ - end: file.getUint16() - }); - } - file.skip(2); - for (segIndex = 0; segIndex < segCount; segIndex++) { - segments[segIndex].start = file.getUint16(); - } - for (segIndex = 0; segIndex < segCount; segIndex++) { - segments[segIndex].delta = file.getUint16(); - } - let offsetsCount = 0, - offsetIndex; - for (segIndex = 0; segIndex < segCount; segIndex++) { - segment = segments[segIndex]; - const rangeOffset = file.getUint16(); - if (!rangeOffset) { - segment.offsetIndex = -1; - continue; - } - offsetIndex = (rangeOffset >> 1) - (segCount - segIndex); - segment.offsetIndex = offsetIndex; - offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1); - } - const offsets = []; - for (j = 0; j < offsetsCount; j++) { - offsets.push(file.getUint16()); - } - for (segIndex = 0; segIndex < segCount; segIndex++) { - segment = segments[segIndex]; - start = segment.start; - const end = segment.end; - const delta = segment.delta; - offsetIndex = segment.offsetIndex; - for (j = start; j <= end; j++) { - if (j === 0xffff) { - continue; - } - glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start]; - glyphId = glyphId + delta & 0xffff; - mappings.push({ - charCode: j, - glyphId - }); - } - } - } else if (format === 6) { - file.skip(2 + 2); - const firstCode = file.getUint16(); - const entryCount = file.getUint16(); - for (j = 0; j < entryCount; j++) { - glyphId = file.getUint16(); - const charCode = firstCode + j; - mappings.push({ - charCode, - glyphId - }); - } - } else if (format === 12) { - file.skip(2 + 4 + 4); - const nGroups = file.getInt32() >>> 0; - for (j = 0; j < nGroups; j++) { - const startCharCode = file.getInt32() >>> 0; - const endCharCode = file.getInt32() >>> 0; - let glyphCode = file.getInt32() >>> 0; - for (let charCode = startCharCode; charCode <= endCharCode; charCode++) { - mappings.push({ - charCode, - glyphId: glyphCode++ - }); - } - } - } else { - (0, _util.warn)("cmap table has unsupported format: " + format); - return { - platformId: -1, - encodingId: -1, - mappings: [], - hasShortCmap: false - }; - } - mappings.sort(function (a, b) { - return a.charCode - b.charCode; - }); - for (let i = 1; i < mappings.length; i++) { - if (mappings[i - 1].charCode === mappings[i].charCode) { - mappings.splice(i, 1); - i--; - } - } - return { - platformId: potentialTable.platformId, - encodingId: potentialTable.encodingId, - mappings, - hasShortCmap - }; - } - function sanitizeMetrics(file, header, metrics, headTable, numGlyphs, dupFirstEntry) { - if (!header) { - if (metrics) { - metrics.data = null; - } - return; - } - file.pos = (file.start || 0) + header.offset; - file.pos += 4; - file.pos += 2; - file.pos += 2; - file.pos += 2; - file.pos += 2; - file.pos += 2; - file.pos += 2; - file.pos += 2; - file.pos += 2; - file.pos += 2; - const caretOffset = file.getUint16(); - file.pos += 8; - file.pos += 2; - let numOfMetrics = file.getUint16(); - if (caretOffset !== 0) { - const macStyle = int16(headTable.data[44], headTable.data[45]); - if (!(macStyle & 2)) { - header.data[22] = 0; - header.data[23] = 0; - } - } - if (numOfMetrics > numGlyphs) { - (0, _util.info)(`The numOfMetrics (${numOfMetrics}) should not be ` + `greater than the numGlyphs (${numGlyphs}).`); - numOfMetrics = numGlyphs; - header.data[34] = (numOfMetrics & 0xff00) >> 8; - header.data[35] = numOfMetrics & 0x00ff; - } - const numOfSidebearings = numGlyphs - numOfMetrics; - const numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1); - if (numMissing > 0) { - const entries = new Uint8Array(metrics.length + numMissing * 2); - entries.set(metrics.data); - if (dupFirstEntry) { - entries[metrics.length] = metrics.data[2]; - entries[metrics.length + 1] = metrics.data[3]; - } - metrics.data = entries; - } - } - function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) { - const glyphProfile = { - length: 0, - sizeOfInstructions: 0 - }; - if (sourceStart < 0 || sourceStart >= source.length || sourceEnd > source.length || sourceEnd - sourceStart <= 12) { - return glyphProfile; - } - const glyf = source.subarray(sourceStart, sourceEnd); - const xMin = signedInt16(glyf[2], glyf[3]); - const yMin = signedInt16(glyf[4], glyf[5]); - const xMax = signedInt16(glyf[6], glyf[7]); - const yMax = signedInt16(glyf[8], glyf[9]); - if (xMin > xMax) { - writeSignedInt16(glyf, 2, xMax); - writeSignedInt16(glyf, 6, xMin); - } - if (yMin > yMax) { - writeSignedInt16(glyf, 4, yMax); - writeSignedInt16(glyf, 8, yMin); - } - const contoursCount = signedInt16(glyf[0], glyf[1]); - if (contoursCount < 0) { - if (contoursCount < -1) { - return glyphProfile; - } - dest.set(glyf, destStart); - glyphProfile.length = glyf.length; - return glyphProfile; - } - let i, - j = 10, - flagsCount = 0; - for (i = 0; i < contoursCount; i++) { - const endPoint = glyf[j] << 8 | glyf[j + 1]; - flagsCount = endPoint + 1; - j += 2; - } - const instructionsStart = j; - const instructionsLength = glyf[j] << 8 | glyf[j + 1]; - glyphProfile.sizeOfInstructions = instructionsLength; - j += 2 + instructionsLength; - const instructionsEnd = j; - let coordinatesLength = 0; - for (i = 0; i < flagsCount; i++) { - const flag = glyf[j++]; - if (flag & 0xc0) { - glyf[j - 1] = flag & 0x3f; - } - let xLength = 2; - if (flag & 2) { - xLength = 1; - } else if (flag & 16) { - xLength = 0; - } - let yLength = 2; - if (flag & 4) { - yLength = 1; - } else if (flag & 32) { - yLength = 0; - } - const xyLength = xLength + yLength; - coordinatesLength += xyLength; - if (flag & 8) { - const repeat = glyf[j++]; - if (repeat === 0) { - glyf[j - 1] ^= 8; - } - i += repeat; - coordinatesLength += repeat * xyLength; - } - } - if (coordinatesLength === 0) { - return glyphProfile; - } - let glyphDataLength = j + coordinatesLength; - if (glyphDataLength > glyf.length) { - return glyphProfile; - } - if (!hintsValid && instructionsLength > 0) { - dest.set(glyf.subarray(0, instructionsStart), destStart); - dest.set([0, 0], destStart + instructionsStart); - dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2); - glyphDataLength -= instructionsLength; - if (glyf.length - glyphDataLength > 3) { - glyphDataLength = glyphDataLength + 3 & ~3; - } - glyphProfile.length = glyphDataLength; - return glyphProfile; - } - if (glyf.length - glyphDataLength > 3) { - glyphDataLength = glyphDataLength + 3 & ~3; - dest.set(glyf.subarray(0, glyphDataLength), destStart); - glyphProfile.length = glyphDataLength; - return glyphProfile; - } - dest.set(glyf, destStart); - glyphProfile.length = glyf.length; - return glyphProfile; - } - function sanitizeHead(head, numGlyphs, locaLength) { - const data = head.data; - const version = int32(data[0], data[1], data[2], data[3]); - if (version >> 16 !== 1) { - (0, _util.info)("Attempting to fix invalid version in head table: " + version); - data[0] = 0; - data[1] = 1; - data[2] = 0; - data[3] = 0; - } - const indexToLocFormat = int16(data[50], data[51]); - if (indexToLocFormat < 0 || indexToLocFormat > 1) { - (0, _util.info)("Attempting to fix invalid indexToLocFormat in head table: " + indexToLocFormat); - const numGlyphsPlusOne = numGlyphs + 1; - if (locaLength === numGlyphsPlusOne << 1) { - data[50] = 0; - data[51] = 0; - } else if (locaLength === numGlyphsPlusOne << 2) { - data[50] = 0; - data[51] = 1; - } else { - throw new _util.FormatError("Could not fix indexToLocFormat: " + indexToLocFormat); - } - } - } - function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions) { - let itemSize, itemDecode, itemEncode; - if (isGlyphLocationsLong) { - itemSize = 4; - itemDecode = function fontItemDecodeLong(data, offset) { - return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; - }; - itemEncode = function fontItemEncodeLong(data, offset, value) { - data[offset] = value >>> 24 & 0xff; - data[offset + 1] = value >> 16 & 0xff; - data[offset + 2] = value >> 8 & 0xff; - data[offset + 3] = value & 0xff; - }; - } else { - itemSize = 2; - itemDecode = function fontItemDecode(data, offset) { - return data[offset] << 9 | data[offset + 1] << 1; - }; - itemEncode = function fontItemEncode(data, offset, value) { - data[offset] = value >> 9 & 0xff; - data[offset + 1] = value >> 1 & 0xff; - }; - } - const numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs; - const locaDataSize = itemSize * (1 + numGlyphsOut); - const locaData = new Uint8Array(locaDataSize); - locaData.set(loca.data.subarray(0, locaDataSize)); - loca.data = locaData; - const oldGlyfData = glyf.data; - const oldGlyfDataLength = oldGlyfData.length; - const newGlyfData = new Uint8Array(oldGlyfDataLength); - let i, j; - const locaEntries = []; - for (i = 0, j = 0; i < numGlyphs + 1; i++, j += itemSize) { - let offset = itemDecode(locaData, j); - if (offset > oldGlyfDataLength) { - offset = oldGlyfDataLength; - } - locaEntries.push({ - index: i, - offset, - endOffset: 0 - }); - } - locaEntries.sort((a, b) => { - return a.offset - b.offset; - }); - for (i = 0; i < numGlyphs; i++) { - locaEntries[i].endOffset = locaEntries[i + 1].offset; - } - locaEntries.sort((a, b) => { - return a.index - b.index; - }); - for (i = 0; i < numGlyphs; i++) { - const { - offset, - endOffset - } = locaEntries[i]; - if (offset !== 0 || endOffset !== 0) { - break; - } - const nextOffset = locaEntries[i + 1].offset; - if (nextOffset === 0) { - continue; - } - locaEntries[i].endOffset = nextOffset; - break; - } - const missingGlyphs = Object.create(null); - let writeOffset = 0; - itemEncode(locaData, 0, writeOffset); - for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) { - const glyphProfile = sanitizeGlyph(oldGlyfData, locaEntries[i].offset, locaEntries[i].endOffset, newGlyfData, writeOffset, hintsValid); - const newLength = glyphProfile.length; - if (newLength === 0) { - missingGlyphs[i] = true; - } - if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) { - maxSizeOfInstructions = glyphProfile.sizeOfInstructions; - } - writeOffset += newLength; - itemEncode(locaData, j, writeOffset); - } - if (writeOffset === 0) { - const simpleGlyph = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]); - for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) { - itemEncode(locaData, j, simpleGlyph.length); - } - glyf.data = simpleGlyph; - } else if (dupFirstEntry) { - const firstEntryLength = itemDecode(locaData, itemSize); - if (newGlyfData.length > firstEntryLength + writeOffset) { - glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset); - } else { - glyf.data = new Uint8Array(firstEntryLength + writeOffset); - glyf.data.set(newGlyfData.subarray(0, writeOffset)); - } - glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset); - itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength); - } else { - glyf.data = newGlyfData.subarray(0, writeOffset); - } - return { - missingGlyphs, - maxSizeOfInstructions - }; - } - function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) { - const start = (font.start || 0) + post.offset; - font.pos = start; - const length = post.length, - end = start + length; - const version = font.getInt32(); - font.skip(28); - let glyphNames; - let valid = true; - let i; - switch (version) { - case 0x00010000: - glyphNames = _fonts_utils.MacStandardGlyphOrdering; - break; - case 0x00020000: - const numGlyphs = font.getUint16(); - if (numGlyphs !== maxpNumGlyphs) { - valid = false; - break; - } - const glyphNameIndexes = []; - for (i = 0; i < numGlyphs; ++i) { - const index = font.getUint16(); - if (index >= 32768) { - valid = false; - break; - } - glyphNameIndexes.push(index); - } - if (!valid) { - break; - } - const customNames = [], - strBuf = []; - while (font.pos < end) { - const stringLength = font.getByte(); - strBuf.length = stringLength; - for (i = 0; i < stringLength; ++i) { - strBuf[i] = String.fromCharCode(font.getByte()); - } - customNames.push(strBuf.join("")); - } - glyphNames = []; - for (i = 0; i < numGlyphs; ++i) { - const j = glyphNameIndexes[i]; - if (j < 258) { - glyphNames.push(_fonts_utils.MacStandardGlyphOrdering[j]); - continue; - } - glyphNames.push(customNames[j - 258]); - } - break; - case 0x00030000: - break; - default: - (0, _util.warn)("Unknown/unsupported post table version " + version); - valid = false; - if (propertiesObj.defaultEncoding) { - glyphNames = propertiesObj.defaultEncoding; - } - break; - } - propertiesObj.glyphNames = glyphNames; - return valid; - } - function readNameTable(nameTable) { - const start = (font.start || 0) + nameTable.offset; - font.pos = start; - const names = [[], []], - records = []; - const length = nameTable.length, - end = start + length; - const format = font.getUint16(); - const FORMAT_0_HEADER_LENGTH = 6; - if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) { - return [names, records]; - } - const numRecords = font.getUint16(); - const stringsStart = font.getUint16(); - const NAME_RECORD_LENGTH = 12; - let i, ii; - for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) { - const r = { - platform: font.getUint16(), - encoding: font.getUint16(), - language: font.getUint16(), - name: font.getUint16(), - length: font.getUint16(), - offset: font.getUint16() - }; - if (isMacNameRecord(r) || isWinNameRecord(r)) { - records.push(r); - } - } - for (i = 0, ii = records.length; i < ii; i++) { - const record = records[i]; - if (record.length <= 0) { - continue; - } - const pos = start + stringsStart + record.offset; - if (pos + record.length > end) { - continue; - } - font.pos = pos; - const nameIndex = record.name; - if (record.encoding) { - let str = ""; - for (let j = 0, jj = record.length; j < jj; j += 2) { - str += String.fromCharCode(font.getUint16()); - } - names[1][nameIndex] = str; - } else { - names[0][nameIndex] = font.getString(record.length); - } - } - return [names, records]; - } - const TTOpsStackDeltas = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2]; - function sanitizeTTProgram(table, ttContext) { - let data = table.data; - let i = 0, - j, - n, - b, - funcId, - pc, - lastEndf = 0, - lastDeff = 0; - const stack = []; - const callstack = []; - const functionsCalled = []; - let tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions; - let inFDEF = false, - ifLevel = 0, - inELSE = 0; - for (let ii = data.length; i < ii;) { - const op = data[i++]; - if (op === 0x40) { - n = data[i++]; - if (inFDEF || inELSE) { - i += n; - } else { - for (j = 0; j < n; j++) { - stack.push(data[i++]); - } - } - } else if (op === 0x41) { - n = data[i++]; - if (inFDEF || inELSE) { - i += n * 2; - } else { - for (j = 0; j < n; j++) { - b = data[i++]; - stack.push(b << 8 | data[i++]); - } - } - } else if ((op & 0xf8) === 0xb0) { - n = op - 0xb0 + 1; - if (inFDEF || inELSE) { - i += n; - } else { - for (j = 0; j < n; j++) { - stack.push(data[i++]); - } - } - } else if ((op & 0xf8) === 0xb8) { - n = op - 0xb8 + 1; - if (inFDEF || inELSE) { - i += n * 2; - } else { - for (j = 0; j < n; j++) { - b = data[i++]; - stack.push(b << 8 | data[i++]); - } - } - } else if (op === 0x2b && !tooComplexToFollowFunctions) { - if (!inFDEF && !inELSE) { - funcId = stack.at(-1); - if (isNaN(funcId)) { - (0, _util.info)("TT: CALL empty stack (or invalid entry)."); - } else { - ttContext.functionsUsed[funcId] = true; - if (funcId in ttContext.functionsStackDeltas) { - const newStackLength = stack.length + ttContext.functionsStackDeltas[funcId]; - if (newStackLength < 0) { - (0, _util.warn)("TT: CALL invalid functions stack delta."); - ttContext.hintsValid = false; - return; - } - stack.length = newStackLength; - } else if (funcId in ttContext.functionsDefined && !functionsCalled.includes(funcId)) { - callstack.push({ - data, - i, - stackTop: stack.length - 1 - }); - functionsCalled.push(funcId); - pc = ttContext.functionsDefined[funcId]; - if (!pc) { - (0, _util.warn)("TT: CALL non-existent function"); - ttContext.hintsValid = false; - return; - } - data = pc.data; - i = pc.i; - } - } - } - } else if (op === 0x2c && !tooComplexToFollowFunctions) { - if (inFDEF || inELSE) { - (0, _util.warn)("TT: nested FDEFs not allowed"); - tooComplexToFollowFunctions = true; - } - inFDEF = true; - lastDeff = i; - funcId = stack.pop(); - ttContext.functionsDefined[funcId] = { - data, - i - }; - } else if (op === 0x2d) { - if (inFDEF) { - inFDEF = false; - lastEndf = i; - } else { - pc = callstack.pop(); - if (!pc) { - (0, _util.warn)("TT: ENDF bad stack"); - ttContext.hintsValid = false; - return; - } - funcId = functionsCalled.pop(); - data = pc.data; - i = pc.i; - ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop; - } - } else if (op === 0x89) { - if (inFDEF || inELSE) { - (0, _util.warn)("TT: nested IDEFs not allowed"); - tooComplexToFollowFunctions = true; - } - inFDEF = true; - lastDeff = i; - } else if (op === 0x58) { - ++ifLevel; - } else if (op === 0x1b) { - inELSE = ifLevel; - } else if (op === 0x59) { - if (inELSE === ifLevel) { - inELSE = 0; - } - --ifLevel; - } else if (op === 0x1c) { - if (!inFDEF && !inELSE) { - const offset = stack.at(-1); - if (offset > 0) { - i += offset - 1; - } - } - } - if (!inFDEF && !inELSE) { - let stackDelta = 0; - if (op <= 0x8e) { - stackDelta = TTOpsStackDeltas[op]; - } else if (op >= 0xc0 && op <= 0xdf) { - stackDelta = -1; - } else if (op >= 0xe0) { - stackDelta = -2; - } - if (op >= 0x71 && op <= 0x75) { - n = stack.pop(); - if (!isNaN(n)) { - stackDelta = -n * 2; - } - } - while (stackDelta < 0 && stack.length > 0) { - stack.pop(); - stackDelta++; - } - while (stackDelta > 0) { - stack.push(NaN); - stackDelta--; - } - } - } - ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions; - const content = [data]; - if (i > data.length) { - content.push(new Uint8Array(i - data.length)); - } - if (lastDeff > lastEndf) { - (0, _util.warn)("TT: complementing a missing function tail"); - content.push(new Uint8Array([0x22, 0x2d])); - } - foldTTTable(table, content); - } - function checkInvalidFunctions(ttContext, maxFunctionDefs) { - if (ttContext.tooComplexToFollowFunctions) { - return; - } - if (ttContext.functionsDefined.length > maxFunctionDefs) { - (0, _util.warn)("TT: more functions defined than expected"); - ttContext.hintsValid = false; - return; - } - for (let j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) { - if (j > maxFunctionDefs) { - (0, _util.warn)("TT: invalid function id: " + j); - ttContext.hintsValid = false; - return; - } - if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) { - (0, _util.warn)("TT: undefined function: " + j); - ttContext.hintsValid = false; - return; - } - } - } - function foldTTTable(table, content) { - if (content.length > 1) { - let newLength = 0; - let j, jj; - for (j = 0, jj = content.length; j < jj; j++) { - newLength += content[j].length; - } - newLength = newLength + 3 & ~3; - const result = new Uint8Array(newLength); - let pos = 0; - for (j = 0, jj = content.length; j < jj; j++) { - result.set(content[j], pos); - pos += content[j].length; - } - table.data = result; - table.length = newLength; - } - } - function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) { - const ttContext = { - functionsDefined: [], - functionsUsed: [], - functionsStackDeltas: [], - tooComplexToFollowFunctions: false, - hintsValid: true - }; - if (fpgm) { - sanitizeTTProgram(fpgm, ttContext); - } - if (prep) { - sanitizeTTProgram(prep, ttContext); - } - if (fpgm) { - checkInvalidFunctions(ttContext, maxFunctionDefs); - } - if (cvt && cvt.length & 1) { - const cvtData = new Uint8Array(cvt.length + 1); - cvtData.set(cvt.data); - cvt.data = cvtData; - } - return ttContext.hintsValid; - } - font = new _stream.Stream(new Uint8Array(font.getBytes())); - let header, tables; - if (isTrueTypeCollectionFile(font)) { - const ttcData = readTrueTypeCollectionData(font, this.name); - header = ttcData.header; - tables = ttcData.tables; - } else { - header = readOpenTypeHeader(font); - tables = readTables(font, header.numTables); - } - let cff, cffFile; - const isTrueType = !tables["CFF "]; - if (!isTrueType) { - const isComposite = properties.composite && (properties.cidToGidMap?.length > 0 || !(properties.cMap instanceof _cmap.IdentityCMap)); - if (header.version === "OTTO" && !isComposite || !tables.head || !tables.hhea || !tables.maxp || !tables.post) { - cffFile = new _stream.Stream(tables["CFF "].data); - cff = new _cff_font.CFFFont(cffFile, properties); - adjustWidths(properties); - return this.convert(name, cff, properties); - } - delete tables.glyf; - delete tables.loca; - delete tables.fpgm; - delete tables.prep; - delete tables["cvt "]; - this.isOpenType = true; - } else { - if (!tables.loca) { - throw new _util.FormatError('Required "loca" table is not found'); - } - if (!tables.glyf) { - (0, _util.warn)('Required "glyf" table is not found -- trying to recover.'); - tables.glyf = { - tag: "glyf", - data: new Uint8Array(0) - }; - } - this.isOpenType = false; - } - if (!tables.maxp) { - throw new _util.FormatError('Required "maxp" table is not found'); - } - font.pos = (font.start || 0) + tables.maxp.offset; - const version = font.getInt32(); - const numGlyphs = font.getUint16(); - if (properties.scaleFactors?.length === numGlyphs && isTrueType) { - const { - scaleFactors - } = properties; - const isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]); - const glyphs = new _glyf.GlyfTable({ - glyfTable: tables.glyf.data, - isGlyphLocationsLong, - locaTable: tables.loca.data, - numGlyphs - }); - glyphs.scale(scaleFactors); - const { - glyf, - loca, - isLocationLong - } = glyphs.write(); - tables.glyf.data = glyf; - tables.loca.data = loca; - if (isLocationLong !== !!isGlyphLocationsLong) { - tables.head.data[50] = 0; - tables.head.data[51] = isLocationLong ? 1 : 0; - } - const metrics = tables.hmtx.data; - for (let i = 0; i < numGlyphs; i++) { - const j = 4 * i; - const advanceWidth = Math.round(scaleFactors[i] * int16(metrics[j], metrics[j + 1])); - metrics[j] = advanceWidth >> 8 & 0xff; - metrics[j + 1] = advanceWidth & 0xff; - const lsb = Math.round(scaleFactors[i] * signedInt16(metrics[j + 2], metrics[j + 3])); - writeSignedInt16(metrics, j + 2, lsb); - } - } - let numGlyphsOut = numGlyphs + 1; - let dupFirstEntry = true; - if (numGlyphsOut > 0xffff) { - dupFirstEntry = false; - numGlyphsOut = numGlyphs; - (0, _util.warn)("Not enough space in glyfs to duplicate first glyph."); - } - let maxFunctionDefs = 0; - let maxSizeOfInstructions = 0; - if (version >= 0x00010000 && tables.maxp.length >= 22) { - font.pos += 8; - const maxZones = font.getUint16(); - if (maxZones > 2) { - tables.maxp.data[14] = 0; - tables.maxp.data[15] = 2; - } - font.pos += 4; - maxFunctionDefs = font.getUint16(); - font.pos += 4; - maxSizeOfInstructions = font.getUint16(); - } - tables.maxp.data[4] = numGlyphsOut >> 8; - tables.maxp.data[5] = numGlyphsOut & 255; - const hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, tables["cvt "], maxFunctionDefs); - if (!hintsValid) { - delete tables.fpgm; - delete tables.prep; - delete tables["cvt "]; - } - sanitizeMetrics(font, tables.hhea, tables.hmtx, tables.head, numGlyphsOut, dupFirstEntry); - if (!tables.head) { - throw new _util.FormatError('Required "head" table is not found'); - } - sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0); - let missingGlyphs = Object.create(null); - if (isTrueType) { - const isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]); - const glyphsInfo = sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions); - missingGlyphs = glyphsInfo.missingGlyphs; - if (version >= 0x00010000 && tables.maxp.length >= 22) { - tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8; - tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255; - } - } - if (!tables.hhea) { - throw new _util.FormatError('Required "hhea" table is not found'); - } - if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) { - tables.hhea.data[10] = 0xff; - tables.hhea.data[11] = 0xff; - } - const metricsOverride = { - unitsPerEm: int16(tables.head.data[18], tables.head.data[19]), - yMax: signedInt16(tables.head.data[42], tables.head.data[43]), - yMin: signedInt16(tables.head.data[38], tables.head.data[39]), - ascent: signedInt16(tables.hhea.data[4], tables.hhea.data[5]), - descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7]), - lineGap: signedInt16(tables.hhea.data[8], tables.hhea.data[9]) - }; - this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm; - this.descent = metricsOverride.descent / metricsOverride.unitsPerEm; - this.lineGap = metricsOverride.lineGap / metricsOverride.unitsPerEm; - if (this.cssFontInfo?.lineHeight) { - this.lineHeight = this.cssFontInfo.metrics.lineHeight; - this.lineGap = this.cssFontInfo.metrics.lineGap; - } else { - this.lineHeight = this.ascent - this.descent + this.lineGap; - } - if (tables.post) { - readPostScriptTable(tables.post, properties, numGlyphs); - } - tables.post = { - tag: "post", - data: createPostTable(properties) - }; - const charCodeToGlyphId = []; - function hasGlyph(glyphId) { - return !missingGlyphs[glyphId]; - } - if (properties.composite) { - const cidToGidMap = properties.cidToGidMap || []; - const isCidToGidMapEmpty = cidToGidMap.length === 0; - properties.cMap.forEach(function (charCode, cid) { - if (typeof cid === "string") { - cid = convertCidString(charCode, cid, true); - } - if (cid > 0xffff) { - throw new _util.FormatError("Max size of CID is 65,535"); - } - let glyphId = -1; - if (isCidToGidMapEmpty) { - glyphId = cid; - } else if (cidToGidMap[cid] !== undefined) { - glyphId = cidToGidMap[cid]; - } - if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) { - charCodeToGlyphId[charCode] = glyphId; - } - }); - } else { - const cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont, properties.hasEncoding); - const cmapPlatformId = cmapTable.platformId; - const cmapEncodingId = cmapTable.encodingId; - const cmapMappings = cmapTable.mappings; - let baseEncoding = [], - forcePostTable = false; - if (properties.hasEncoding && (properties.baseEncodingName === "MacRomanEncoding" || properties.baseEncodingName === "WinAnsiEncoding")) { - baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName); - } - if (properties.hasEncoding && !this.isSymbolicFont && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0)) { - const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - for (let charCode = 0; charCode < 256; charCode++) { - let glyphName; - if (this.differences[charCode] !== undefined) { - glyphName = this.differences[charCode]; - } else if (baseEncoding.length && baseEncoding[charCode] !== "") { - glyphName = baseEncoding[charCode]; - } else { - glyphName = _encodings.StandardEncoding[charCode]; - } - if (!glyphName) { - continue; - } - const standardGlyphName = (0, _fonts_utils.recoverGlyphName)(glyphName, glyphsUnicodeMap); - let unicodeOrCharCode; - if (cmapPlatformId === 3 && cmapEncodingId === 1) { - unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName]; - } else if (cmapPlatformId === 1 && cmapEncodingId === 0) { - unicodeOrCharCode = _encodings.MacRomanEncoding.indexOf(standardGlyphName); - } - if (unicodeOrCharCode === undefined) { - if (!properties.glyphNames && properties.hasIncludedToUnicodeMap && !(this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap)) { - const unicode = this.toUnicode.get(charCode); - if (unicode) { - unicodeOrCharCode = unicode.codePointAt(0); - } - } - if (unicodeOrCharCode === undefined) { - continue; - } - } - for (const mapping of cmapMappings) { - if (mapping.charCode !== unicodeOrCharCode) { - continue; - } - charCodeToGlyphId[charCode] = mapping.glyphId; - break; - } - } - } else if (cmapPlatformId === 0) { - for (const mapping of cmapMappings) { - charCodeToGlyphId[mapping.charCode] = mapping.glyphId; - } - forcePostTable = true; - } else { - for (const mapping of cmapMappings) { - let charCode = mapping.charCode; - if (cmapPlatformId === 3 && charCode >= 0xf000 && charCode <= 0xf0ff) { - charCode &= 0xff; - } - charCodeToGlyphId[charCode] = mapping.glyphId; - } - } - if (properties.glyphNames && (baseEncoding.length || this.differences.length)) { - for (let i = 0; i < 256; ++i) { - if (!forcePostTable && charCodeToGlyphId[i] !== undefined) { - continue; - } - const glyphName = this.differences[i] || baseEncoding[i]; - if (!glyphName) { - continue; - } - const glyphId = properties.glyphNames.indexOf(glyphName); - if (glyphId > 0 && hasGlyph(glyphId)) { - charCodeToGlyphId[i] = glyphId; - } - } - } - } - if (charCodeToGlyphId.length === 0) { - charCodeToGlyphId[0] = 0; - } - let glyphZeroId = numGlyphsOut - 1; - if (!dupFirstEntry) { - glyphZeroId = 0; - } - if (!properties.cssFontInfo) { - const newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId, this.toUnicode); - this.toFontChar = newMapping.toFontChar; - tables.cmap = { - tag: "cmap", - data: createCmapTable(newMapping.charCodeToGlyphId, newMapping.toUnicodeExtraMap, numGlyphsOut) - }; - if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"], font)) { - tables["OS/2"] = { - tag: "OS/2", - data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride) - }; - } - } - if (!isTrueType) { - try { - cffFile = new _stream.Stream(tables["CFF "].data); - const parser = new _cff_parser.CFFParser(cffFile, properties, _fonts_utils.SEAC_ANALYSIS_ENABLED); - cff = parser.parse(); - cff.duplicateFirstGlyph(); - const compiler = new _cff_parser.CFFCompiler(cff); - tables["CFF "].data = compiler.compile(); - } catch { - (0, _util.warn)("Failed to compile font " + properties.loadedName); - } - } - if (!tables.name) { - tables.name = { - tag: "name", - data: createNameTable(this.name) - }; - } else { - const [namePrototype, nameRecords] = readNameTable(tables.name); - tables.name.data = createNameTable(name, namePrototype); - this.psName = namePrototype[0][6] || null; - if (!properties.composite) { - adjustTrueTypeToUnicode(properties, this.isSymbolicFont, nameRecords); - } - } - const builder = new _opentype_file_builder.OpenTypeFileBuilder(header.version); - for (const tableTag in tables) { - builder.addTable(tableTag, tables[tableTag].data); - } - return builder.toArray(); - } - convert(fontName, font, properties) { - properties.fixedPitch = false; - if (properties.builtInEncoding) { - adjustType1ToUnicode(properties, properties.builtInEncoding); - } - let glyphZeroId = 1; - if (font instanceof _cff_font.CFFFont) { - glyphZeroId = font.numGlyphs - 1; - } - const mapping = font.getGlyphMapping(properties); - let newMapping = null; - let newCharCodeToGlyphId = mapping; - let toUnicodeExtraMap = null; - if (!properties.cssFontInfo) { - newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId, this.toUnicode); - this.toFontChar = newMapping.toFontChar; - newCharCodeToGlyphId = newMapping.charCodeToGlyphId; - toUnicodeExtraMap = newMapping.toUnicodeExtraMap; - } - const numGlyphs = font.numGlyphs; - function getCharCodes(charCodeToGlyphId, glyphId) { - let charCodes = null; - for (const charCode in charCodeToGlyphId) { - if (glyphId === charCodeToGlyphId[charCode]) { - (charCodes ||= []).push(charCode | 0); - } - } - return charCodes; - } - function createCharCode(charCodeToGlyphId, glyphId) { - for (const charCode in charCodeToGlyphId) { - if (glyphId === charCodeToGlyphId[charCode]) { - return charCode | 0; - } - } - newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId; - return newMapping.nextAvailableFontCharCode++; - } - const seacs = font.seacs; - if (newMapping && _fonts_utils.SEAC_ANALYSIS_ENABLED && seacs?.length) { - const matrix = properties.fontMatrix || _util.FONT_IDENTITY_MATRIX; - const charset = font.getCharset(); - const seacMap = Object.create(null); - for (let glyphId in seacs) { - glyphId |= 0; - const seac = seacs[glyphId]; - const baseGlyphName = _encodings.StandardEncoding[seac[2]]; - const accentGlyphName = _encodings.StandardEncoding[seac[3]]; - const baseGlyphId = charset.indexOf(baseGlyphName); - const accentGlyphId = charset.indexOf(accentGlyphName); - if (baseGlyphId < 0 || accentGlyphId < 0) { - continue; - } - const accentOffset = { - x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4], - y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5] - }; - const charCodes = getCharCodes(mapping, glyphId); - if (!charCodes) { - continue; - } - for (const charCode of charCodes) { - const charCodeToGlyphId = newMapping.charCodeToGlyphId; - const baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId); - const accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId); - seacMap[charCode] = { - baseFontCharCode, - accentFontCharCode, - accentOffset - }; - } - } - properties.seacMap = seacMap; - } - const unitsPerEm = 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; - const builder = new _opentype_file_builder.OpenTypeFileBuilder("\x4F\x54\x54\x4F"); - builder.addTable("CFF ", font.data); - builder.addTable("OS/2", createOS2Table(properties, newCharCodeToGlyphId)); - builder.addTable("cmap", createCmapTable(newCharCodeToGlyphId, toUnicodeExtraMap, numGlyphs)); - builder.addTable("head", "\x00\x01\x00\x00" + "\x00\x00\x10\x00" + "\x00\x00\x00\x00" + "\x5F\x0F\x3C\xF5" + "\x00\x00" + safeString16(unitsPerEm) + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00" + safeString16(properties.descent) + "\x0F\xFF" + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + "\x00\x11" + "\x00\x00" + "\x00\x00" + "\x00\x00"); - builder.addTable("hhea", "\x00\x01\x00\x00" + safeString16(properties.ascent) + safeString16(properties.descent) + "\x00\x00" + "\xFF\xFF" + "\x00\x00" + "\x00\x00" + "\x00\x00" + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + string16(numGlyphs)); - builder.addTable("hmtx", function fontFieldsHmtx() { - const charstrings = font.charstrings; - const cffWidths = font.cff ? font.cff.widths : null; - let hmtx = "\x00\x00\x00\x00"; - for (let i = 1, ii = numGlyphs; i < ii; i++) { - let width = 0; - if (charstrings) { - const charstring = charstrings[i - 1]; - width = "width" in charstring ? charstring.width : 0; - } else if (cffWidths) { - width = Math.ceil(cffWidths[i] || 0); - } - hmtx += string16(width) + string16(0); - } - return hmtx; - }()); - builder.addTable("maxp", "\x00\x00\x50\x00" + string16(numGlyphs)); - builder.addTable("name", createNameTable(fontName)); - builder.addTable("post", createPostTable(properties)); - return builder.toArray(); - } - get spaceWidth() { - const possibleSpaceReplacements = ["space", "minus", "one", "i", "I"]; - let width; - for (const glyphName of possibleSpaceReplacements) { - if (glyphName in this.widths) { - width = this.widths[glyphName]; - break; - } - const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - const glyphUnicode = glyphsUnicodeMap[glyphName]; - let charcode = 0; - if (this.composite && this.cMap.contains(glyphUnicode)) { - charcode = this.cMap.lookup(glyphUnicode); - if (typeof charcode === "string") { - charcode = convertCidString(glyphUnicode, charcode); - } - } - if (!charcode && this.toUnicode) { - charcode = this.toUnicode.charCodeOf(glyphUnicode); - } - if (charcode <= 0) { - charcode = glyphUnicode; - } - width = this.widths[charcode]; - if (width) { - break; - } - } - return (0, _util.shadow)(this, "spaceWidth", width || this.defaultWidth); - } - _charToGlyph(charcode, isSpace = false) { - let glyph = this._glyphCache[charcode]; - if (glyph?.isSpace === isSpace) { - return glyph; - } - let fontCharCode, width, operatorListId; - let widthCode = charcode; - if (this.cMap?.contains(charcode)) { - widthCode = this.cMap.lookup(charcode); - if (typeof widthCode === "string") { - widthCode = convertCidString(charcode, widthCode); - } - } - width = this.widths[widthCode]; - if (typeof width !== "number") { - width = this.defaultWidth; - } - const vmetric = this.vmetrics?.[widthCode]; - let unicode = this.toUnicode.get(charcode) || charcode; - if (typeof unicode === "number") { - unicode = String.fromCharCode(unicode); - } - let isInFont = this.toFontChar[charcode] !== undefined; - fontCharCode = this.toFontChar[charcode] || charcode; - if (this.missingFile) { - const glyphName = this.differences[charcode] || this.defaultEncoding[charcode]; - if ((glyphName === ".notdef" || glyphName === "") && this.type === "Type1") { - fontCharCode = 0x20; - } - fontCharCode = (0, _unicode.mapSpecialUnicodeValues)(fontCharCode); - } - if (this.isType3Font) { - operatorListId = fontCharCode; - } - let accent = null; - if (this.seacMap?.[charcode]) { - isInFont = true; - const seac = this.seacMap[charcode]; - fontCharCode = seac.baseFontCharCode; - accent = { - fontChar: String.fromCodePoint(seac.accentFontCharCode), - offset: seac.accentOffset - }; - } - let fontChar = ""; - if (typeof fontCharCode === "number") { - if (fontCharCode <= 0x10ffff) { - fontChar = String.fromCodePoint(fontCharCode); - } else { - (0, _util.warn)(`charToGlyph - invalid fontCharCode: ${fontCharCode}`); - } - } - glyph = new Glyph(charcode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont); - return this._glyphCache[charcode] = glyph; - } - charsToGlyphs(chars) { - let glyphs = this._charsCache[chars]; - if (glyphs) { - return glyphs; - } - glyphs = []; - if (this.cMap) { - const c = Object.create(null), - ii = chars.length; - let i = 0; - while (i < ii) { - this.cMap.readCharCode(chars, i, c); - const { - charcode, - length - } = c; - i += length; - const glyph = this._charToGlyph(charcode, length === 1 && chars.charCodeAt(i - 1) === 0x20); - glyphs.push(glyph); - } - } else { - for (let i = 0, ii = chars.length; i < ii; ++i) { - const charcode = chars.charCodeAt(i); - const glyph = this._charToGlyph(charcode, charcode === 0x20); - glyphs.push(glyph); - } - } - return this._charsCache[chars] = glyphs; - } - getCharPositions(chars) { - const positions = []; - if (this.cMap) { - const c = Object.create(null); - let i = 0; - while (i < chars.length) { - this.cMap.readCharCode(chars, i, c); - const length = c.length; - positions.push([i, i + length]); - i += length; - } - } else { - for (let i = 0, ii = chars.length; i < ii; ++i) { - positions.push([i, i + 1]); - } - } - return positions; - } - get glyphCacheValues() { - return Object.values(this._glyphCache); - } - encodeString(str) { - const buffers = []; - const currentBuf = []; - const hasCurrentBufErrors = () => buffers.length % 2 === 1; - const getCharCode = this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap ? unicode => this.toUnicode.charCodeOf(unicode) : unicode => this.toUnicode.charCodeOf(String.fromCodePoint(unicode)); - for (let i = 0, ii = str.length; i < ii; i++) { - const unicode = str.codePointAt(i); - if (unicode > 0xd7ff && (unicode < 0xe000 || unicode > 0xfffd)) { - i++; - } - if (this.toUnicode) { - const charCode = getCharCode(unicode); - if (charCode !== -1) { - if (hasCurrentBufErrors()) { - buffers.push(currentBuf.join("")); - currentBuf.length = 0; - } - const charCodeLength = this.cMap ? this.cMap.getCharCodeLength(charCode) : 1; - for (let j = charCodeLength - 1; j >= 0; j--) { - currentBuf.push(String.fromCharCode(charCode >> 8 * j & 0xff)); - } - continue; - } - } - if (!hasCurrentBufErrors()) { - buffers.push(currentBuf.join("")); - currentBuf.length = 0; - } - currentBuf.push(String.fromCodePoint(unicode)); - } - buffers.push(currentBuf.join("")); - return buffers; - } -} -exports.Font = Font; -class ErrorFont { - constructor(error) { - this.error = error; - this.loadedName = "g_font_error"; - this.missingFile = true; - } - charsToGlyphs() { - return []; - } - encodeString(chars) { - return [chars]; - } - exportData(extraProperties = false) { - return { - error: this.error - }; - } -} -exports.ErrorFont = ErrorFont; - -/***/ }), -/* 35 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.CFFTopDict = exports.CFFStrings = exports.CFFStandardStrings = exports.CFFPrivateDict = exports.CFFParser = exports.CFFIndex = exports.CFFHeader = exports.CFFFDSelect = exports.CFFCompiler = exports.CFFCharset = exports.CFF = void 0; -var _util = __w_pdfjs_require__(2); -var _charsets = __w_pdfjs_require__(36); -var _encodings = __w_pdfjs_require__(37); -const MAX_SUBR_NESTING = 10; -const CFFStandardStrings = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"]; -exports.CFFStandardStrings = CFFStandardStrings; -const NUM_STANDARD_CFF_STRINGS = 391; -const CharstringValidationData = [null, { - id: "hstem", - min: 2, - stackClearing: true, - stem: true -}, null, { - id: "vstem", - min: 2, - stackClearing: true, - stem: true -}, { - id: "vmoveto", - min: 1, - stackClearing: true -}, { - id: "rlineto", - min: 2, - resetStack: true -}, { - id: "hlineto", - min: 1, - resetStack: true -}, { - id: "vlineto", - min: 1, - resetStack: true -}, { - id: "rrcurveto", - min: 6, - resetStack: true -}, null, { - id: "callsubr", - min: 1, - undefStack: true -}, { - id: "return", - min: 0, - undefStack: true -}, null, null, { - id: "endchar", - min: 0, - stackClearing: true -}, null, null, null, { - id: "hstemhm", - min: 2, - stackClearing: true, - stem: true -}, { - id: "hintmask", - min: 0, - stackClearing: true -}, { - id: "cntrmask", - min: 0, - stackClearing: true -}, { - id: "rmoveto", - min: 2, - stackClearing: true -}, { - id: "hmoveto", - min: 1, - stackClearing: true -}, { - id: "vstemhm", - min: 2, - stackClearing: true, - stem: true -}, { - id: "rcurveline", - min: 8, - resetStack: true -}, { - id: "rlinecurve", - min: 8, - resetStack: true -}, { - id: "vvcurveto", - min: 4, - resetStack: true -}, { - id: "hhcurveto", - min: 4, - resetStack: true -}, null, { - id: "callgsubr", - min: 1, - undefStack: true -}, { - id: "vhcurveto", - min: 4, - resetStack: true -}, { - id: "hvcurveto", - min: 4, - resetStack: true -}]; -const CharstringValidationData12 = [null, null, null, { - id: "and", - min: 2, - stackDelta: -1 -}, { - id: "or", - min: 2, - stackDelta: -1 -}, { - id: "not", - min: 1, - stackDelta: 0 -}, null, null, null, { - id: "abs", - min: 1, - stackDelta: 0 -}, { - id: "add", - min: 2, - stackDelta: -1, - stackFn(stack, index) { - stack[index - 2] = stack[index - 2] + stack[index - 1]; - } -}, { - id: "sub", - min: 2, - stackDelta: -1, - stackFn(stack, index) { - stack[index - 2] = stack[index - 2] - stack[index - 1]; - } -}, { - id: "div", - min: 2, - stackDelta: -1, - stackFn(stack, index) { - stack[index - 2] = stack[index - 2] / stack[index - 1]; - } -}, null, { - id: "neg", - min: 1, - stackDelta: 0, - stackFn(stack, index) { - stack[index - 1] = -stack[index - 1]; - } -}, { - id: "eq", - min: 2, - stackDelta: -1 -}, null, null, { - id: "drop", - min: 1, - stackDelta: -1 -}, null, { - id: "put", - min: 2, - stackDelta: -2 -}, { - id: "get", - min: 1, - stackDelta: 0 -}, { - id: "ifelse", - min: 4, - stackDelta: -3 -}, { - id: "random", - min: 0, - stackDelta: 1 -}, { - id: "mul", - min: 2, - stackDelta: -1, - stackFn(stack, index) { - stack[index - 2] = stack[index - 2] * stack[index - 1]; - } -}, null, { - id: "sqrt", - min: 1, - stackDelta: 0 -}, { - id: "dup", - min: 1, - stackDelta: 1 -}, { - id: "exch", - min: 2, - stackDelta: 0 -}, { - id: "index", - min: 2, - stackDelta: 0 -}, { - id: "roll", - min: 3, - stackDelta: -2 -}, null, null, null, { - id: "hflex", - min: 7, - resetStack: true -}, { - id: "flex", - min: 13, - resetStack: true -}, { - id: "hflex1", - min: 9, - resetStack: true -}, { - id: "flex1", - min: 11, - resetStack: true -}]; -class CFFParser { - constructor(file, properties, seacAnalysisEnabled) { - this.bytes = file.getBytes(); - this.properties = properties; - this.seacAnalysisEnabled = !!seacAnalysisEnabled; - } - parse() { - const properties = this.properties; - const cff = new CFF(); - this.cff = cff; - const header = this.parseHeader(); - const nameIndex = this.parseIndex(header.endPos); - const topDictIndex = this.parseIndex(nameIndex.endPos); - const stringIndex = this.parseIndex(topDictIndex.endPos); - const globalSubrIndex = this.parseIndex(stringIndex.endPos); - const topDictParsed = this.parseDict(topDictIndex.obj.get(0)); - const topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings); - cff.header = header.obj; - cff.names = this.parseNameIndex(nameIndex.obj); - cff.strings = this.parseStringIndex(stringIndex.obj); - cff.topDict = topDict; - cff.globalSubrIndex = globalSubrIndex.obj; - this.parsePrivateDict(cff.topDict); - cff.isCIDFont = topDict.hasName("ROS"); - const charStringOffset = topDict.getByName("CharStrings"); - const charStringIndex = this.parseIndex(charStringOffset).obj; - const fontMatrix = topDict.getByName("FontMatrix"); - if (fontMatrix) { - properties.fontMatrix = fontMatrix; - } - const fontBBox = topDict.getByName("FontBBox"); - if (fontBBox) { - properties.ascent = Math.max(fontBBox[3], fontBBox[1]); - properties.descent = Math.min(fontBBox[1], fontBBox[3]); - properties.ascentScaled = true; - } - let charset, encoding; - if (cff.isCIDFont) { - const fdArrayIndex = this.parseIndex(topDict.getByName("FDArray")).obj; - for (let i = 0, ii = fdArrayIndex.count; i < ii; ++i) { - const dictRaw = fdArrayIndex.get(i); - const fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings); - this.parsePrivateDict(fontDict); - cff.fdArray.push(fontDict); - } - encoding = null; - charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, true); - cff.fdSelect = this.parseFDSelect(topDict.getByName("FDSelect"), charStringIndex.count); - } else { - charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, false); - encoding = this.parseEncoding(topDict.getByName("Encoding"), properties, cff.strings, charset.charset); - } - cff.charset = charset; - cff.encoding = encoding; - const charStringsAndSeacs = this.parseCharStrings({ - charStrings: charStringIndex, - localSubrIndex: topDict.privateDict.subrsIndex, - globalSubrIndex: globalSubrIndex.obj, - fdSelect: cff.fdSelect, - fdArray: cff.fdArray, - privateDict: topDict.privateDict - }); - cff.charStrings = charStringsAndSeacs.charStrings; - cff.seacs = charStringsAndSeacs.seacs; - cff.widths = charStringsAndSeacs.widths; - return cff; - } - parseHeader() { - let bytes = this.bytes; - const bytesLength = bytes.length; - let offset = 0; - while (offset < bytesLength && bytes[offset] !== 1) { - ++offset; - } - if (offset >= bytesLength) { - throw new _util.FormatError("Invalid CFF header"); - } - if (offset !== 0) { - (0, _util.info)("cff data is shifted"); - bytes = bytes.subarray(offset); - this.bytes = bytes; - } - const major = bytes[0]; - const minor = bytes[1]; - const hdrSize = bytes[2]; - const offSize = bytes[3]; - const header = new CFFHeader(major, minor, hdrSize, offSize); - return { - obj: header, - endPos: hdrSize - }; - } - parseDict(dict) { - let pos = 0; - function parseOperand() { - let value = dict[pos++]; - if (value === 30) { - return parseFloatOperand(); - } else if (value === 28) { - value = dict[pos++]; - value = (value << 24 | dict[pos++] << 16) >> 16; - return value; - } else if (value === 29) { - value = dict[pos++]; - value = value << 8 | dict[pos++]; - value = value << 8 | dict[pos++]; - value = value << 8 | dict[pos++]; - return value; - } else if (value >= 32 && value <= 246) { - return value - 139; - } else if (value >= 247 && value <= 250) { - return (value - 247) * 256 + dict[pos++] + 108; - } else if (value >= 251 && value <= 254) { - return -((value - 251) * 256) - dict[pos++] - 108; - } - (0, _util.warn)('CFFParser_parseDict: "' + value + '" is a reserved command.'); - return NaN; - } - function parseFloatOperand() { - let str = ""; - const eof = 15; - const lookup = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", null, "-"]; - const length = dict.length; - while (pos < length) { - const b = dict[pos++]; - const b1 = b >> 4; - const b2 = b & 15; - if (b1 === eof) { - break; - } - str += lookup[b1]; - if (b2 === eof) { - break; - } - str += lookup[b2]; - } - return parseFloat(str); - } - let operands = []; - const entries = []; - pos = 0; - const end = dict.length; - while (pos < end) { - let b = dict[pos]; - if (b <= 21) { - if (b === 12) { - b = b << 8 | dict[++pos]; - } - entries.push([b, operands]); - operands = []; - ++pos; - } else { - operands.push(parseOperand()); - } - } - return entries; - } - parseIndex(pos) { - const cffIndex = new CFFIndex(); - const bytes = this.bytes; - const count = bytes[pos++] << 8 | bytes[pos++]; - const offsets = []; - let end = pos; - let i, ii; - if (count !== 0) { - const offsetSize = bytes[pos++]; - const startPos = pos + (count + 1) * offsetSize - 1; - for (i = 0, ii = count + 1; i < ii; ++i) { - let offset = 0; - for (let j = 0; j < offsetSize; ++j) { - offset <<= 8; - offset += bytes[pos++]; - } - offsets.push(startPos + offset); - } - end = offsets[count]; - } - for (i = 0, ii = offsets.length - 1; i < ii; ++i) { - const offsetStart = offsets[i]; - const offsetEnd = offsets[i + 1]; - cffIndex.add(bytes.subarray(offsetStart, offsetEnd)); - } - return { - obj: cffIndex, - endPos: end - }; - } - parseNameIndex(index) { - const names = []; - for (let i = 0, ii = index.count; i < ii; ++i) { - const name = index.get(i); - names.push((0, _util.bytesToString)(name)); - } - return names; - } - parseStringIndex(index) { - const strings = new CFFStrings(); - for (let i = 0, ii = index.count; i < ii; ++i) { - const data = index.get(i); - strings.add((0, _util.bytesToString)(data)); - } - return strings; - } - createDict(Type, dict, strings) { - const cffDict = new Type(strings); - for (const [key, value] of dict) { - cffDict.setByKey(key, value); - } - return cffDict; - } - parseCharString(state, data, localSubrIndex, globalSubrIndex) { - if (!data || state.callDepth > MAX_SUBR_NESTING) { - return false; - } - let stackSize = state.stackSize; - const stack = state.stack; - let length = data.length; - for (let j = 0; j < length;) { - const value = data[j++]; - let validationCommand = null; - if (value === 12) { - const q = data[j++]; - if (q === 0) { - data[j - 2] = 139; - data[j - 1] = 22; - stackSize = 0; - } else { - validationCommand = CharstringValidationData12[q]; - } - } else if (value === 28) { - stack[stackSize] = (data[j] << 24 | data[j + 1] << 16) >> 16; - j += 2; - stackSize++; - } else if (value === 14) { - if (stackSize >= 4) { - stackSize -= 4; - if (this.seacAnalysisEnabled) { - state.seac = stack.slice(stackSize, stackSize + 4); - return false; - } - } - validationCommand = CharstringValidationData[value]; - } else if (value >= 32 && value <= 246) { - stack[stackSize] = value - 139; - stackSize++; - } else if (value >= 247 && value <= 254) { - stack[stackSize] = value < 251 ? (value - 247 << 8) + data[j] + 108 : -(value - 251 << 8) - data[j] - 108; - j++; - stackSize++; - } else if (value === 255) { - stack[stackSize] = (data[j] << 24 | data[j + 1] << 16 | data[j + 2] << 8 | data[j + 3]) / 65536; - j += 4; - stackSize++; - } else if (value === 19 || value === 20) { - state.hints += stackSize >> 1; - if (state.hints === 0) { - data.copyWithin(j - 1, j, -1); - j -= 1; - length -= 1; - continue; - } - j += state.hints + 7 >> 3; - stackSize %= 2; - validationCommand = CharstringValidationData[value]; - } else if (value === 10 || value === 29) { - const subrsIndex = value === 10 ? localSubrIndex : globalSubrIndex; - if (!subrsIndex) { - validationCommand = CharstringValidationData[value]; - (0, _util.warn)("Missing subrsIndex for " + validationCommand.id); - return false; - } - let bias = 32768; - if (subrsIndex.count < 1240) { - bias = 107; - } else if (subrsIndex.count < 33900) { - bias = 1131; - } - const subrNumber = stack[--stackSize] + bias; - if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) { - validationCommand = CharstringValidationData[value]; - (0, _util.warn)("Out of bounds subrIndex for " + validationCommand.id); - return false; - } - state.stackSize = stackSize; - state.callDepth++; - const valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex); - if (!valid) { - return false; - } - state.callDepth--; - stackSize = state.stackSize; - continue; - } else if (value === 11) { - state.stackSize = stackSize; - return true; - } else if (value === 0 && j === data.length) { - data[j - 1] = 14; - validationCommand = CharstringValidationData[14]; - } else if (value === 9) { - data.copyWithin(j - 1, j, -1); - j -= 1; - length -= 1; - continue; - } else { - validationCommand = CharstringValidationData[value]; - } - if (validationCommand) { - if (validationCommand.stem) { - state.hints += stackSize >> 1; - if (value === 3 || value === 23) { - state.hasVStems = true; - } else if (state.hasVStems && (value === 1 || value === 18)) { - (0, _util.warn)("CFF stem hints are in wrong order"); - data[j - 1] = value === 1 ? 3 : 23; - } - } - if ("min" in validationCommand) { - if (!state.undefStack && stackSize < validationCommand.min) { - (0, _util.warn)("Not enough parameters for " + validationCommand.id + "; actual: " + stackSize + ", expected: " + validationCommand.min); - if (stackSize === 0) { - data[j - 1] = 14; - return true; - } - return false; - } - } - if (state.firstStackClearing && validationCommand.stackClearing) { - state.firstStackClearing = false; - stackSize -= validationCommand.min; - if (stackSize >= 2 && validationCommand.stem) { - stackSize %= 2; - } else if (stackSize > 1) { - (0, _util.warn)("Found too many parameters for stack-clearing command"); - } - if (stackSize > 0) { - state.width = stack[stackSize - 1]; - } - } - if ("stackDelta" in validationCommand) { - if ("stackFn" in validationCommand) { - validationCommand.stackFn(stack, stackSize); - } - stackSize += validationCommand.stackDelta; - } else if (validationCommand.stackClearing) { - stackSize = 0; - } else if (validationCommand.resetStack) { - stackSize = 0; - state.undefStack = false; - } else if (validationCommand.undefStack) { - stackSize = 0; - state.undefStack = true; - state.firstStackClearing = false; - } - } - } - if (length < data.length) { - data.fill(14, length); - } - state.stackSize = stackSize; - return true; - } - parseCharStrings({ - charStrings, - localSubrIndex, - globalSubrIndex, - fdSelect, - fdArray, - privateDict - }) { - const seacs = []; - const widths = []; - const count = charStrings.count; - for (let i = 0; i < count; i++) { - const charstring = charStrings.get(i); - const state = { - callDepth: 0, - stackSize: 0, - stack: [], - undefStack: true, - hints: 0, - firstStackClearing: true, - seac: null, - width: null, - hasVStems: false - }; - let valid = true; - let localSubrToUse = null; - let privateDictToUse = privateDict; - if (fdSelect && fdArray.length) { - const fdIndex = fdSelect.getFDIndex(i); - if (fdIndex === -1) { - (0, _util.warn)("Glyph index is not in fd select."); - valid = false; - } - if (fdIndex >= fdArray.length) { - (0, _util.warn)("Invalid fd index for glyph index."); - valid = false; - } - if (valid) { - privateDictToUse = fdArray[fdIndex].privateDict; - localSubrToUse = privateDictToUse.subrsIndex; - } - } else if (localSubrIndex) { - localSubrToUse = localSubrIndex; - } - if (valid) { - valid = this.parseCharString(state, charstring, localSubrToUse, globalSubrIndex); - } - if (state.width !== null) { - const nominalWidth = privateDictToUse.getByName("nominalWidthX"); - widths[i] = nominalWidth + state.width; - } else { - const defaultWidth = privateDictToUse.getByName("defaultWidthX"); - widths[i] = defaultWidth; - } - if (state.seac !== null) { - seacs[i] = state.seac; - } - if (!valid) { - charStrings.set(i, new Uint8Array([14])); - } - } - return { - charStrings, - seacs, - widths - }; - } - emptyPrivateDictionary(parentDict) { - const privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings); - parentDict.setByKey(18, [0, 0]); - parentDict.privateDict = privateDict; - } - parsePrivateDict(parentDict) { - if (!parentDict.hasName("Private")) { - this.emptyPrivateDictionary(parentDict); - return; - } - const privateOffset = parentDict.getByName("Private"); - if (!Array.isArray(privateOffset) || privateOffset.length !== 2) { - parentDict.removeByName("Private"); - return; - } - const size = privateOffset[0]; - const offset = privateOffset[1]; - if (size === 0 || offset >= this.bytes.length) { - this.emptyPrivateDictionary(parentDict); - return; - } - const privateDictEnd = offset + size; - const dictData = this.bytes.subarray(offset, privateDictEnd); - const dict = this.parseDict(dictData); - const privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings); - parentDict.privateDict = privateDict; - if (privateDict.getByName("ExpansionFactor") === 0) { - privateDict.setByName("ExpansionFactor", 0.06); - } - if (!privateDict.getByName("Subrs")) { - return; - } - const subrsOffset = privateDict.getByName("Subrs"); - const relativeOffset = offset + subrsOffset; - if (subrsOffset === 0 || relativeOffset >= this.bytes.length) { - this.emptyPrivateDictionary(parentDict); - return; - } - const subrsIndex = this.parseIndex(relativeOffset); - privateDict.subrsIndex = subrsIndex.obj; - } - parseCharsets(pos, length, strings, cid) { - if (pos === 0) { - return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, _charsets.ISOAdobeCharset); - } else if (pos === 1) { - return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT, _charsets.ExpertCharset); - } else if (pos === 2) { - return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, _charsets.ExpertSubsetCharset); - } - const bytes = this.bytes; - const start = pos; - const format = bytes[pos++]; - const charset = [cid ? 0 : ".notdef"]; - let id, count, i; - length -= 1; - switch (format) { - case 0: - for (i = 0; i < length; i++) { - id = bytes[pos++] << 8 | bytes[pos++]; - charset.push(cid ? id : strings.get(id)); - } - break; - case 1: - while (charset.length <= length) { - id = bytes[pos++] << 8 | bytes[pos++]; - count = bytes[pos++]; - for (i = 0; i <= count; i++) { - charset.push(cid ? id++ : strings.get(id++)); - } - } - break; - case 2: - while (charset.length <= length) { - id = bytes[pos++] << 8 | bytes[pos++]; - count = bytes[pos++] << 8 | bytes[pos++]; - for (i = 0; i <= count; i++) { - charset.push(cid ? id++ : strings.get(id++)); - } - } - break; - default: - throw new _util.FormatError("Unknown charset format"); - } - const end = pos; - const raw = bytes.subarray(start, end); - return new CFFCharset(false, format, charset, raw); - } - parseEncoding(pos, properties, strings, charset) { - const encoding = Object.create(null); - const bytes = this.bytes; - let predefined = false; - let format, i, ii; - let raw = null; - function readSupplement() { - const supplementsCount = bytes[pos++]; - for (i = 0; i < supplementsCount; i++) { - const code = bytes[pos++]; - const sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff); - encoding[code] = charset.indexOf(strings.get(sid)); - } - } - if (pos === 0 || pos === 1) { - predefined = true; - format = pos; - const baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding; - for (i = 0, ii = charset.length; i < ii; i++) { - const index = baseEncoding.indexOf(charset[i]); - if (index !== -1) { - encoding[index] = i; - } - } - } else { - const dataStart = pos; - format = bytes[pos++]; - switch (format & 0x7f) { - case 0: - const glyphsCount = bytes[pos++]; - for (i = 1; i <= glyphsCount; i++) { - encoding[bytes[pos++]] = i; - } - break; - case 1: - const rangesCount = bytes[pos++]; - let gid = 1; - for (i = 0; i < rangesCount; i++) { - const start = bytes[pos++]; - const left = bytes[pos++]; - for (let j = start; j <= start + left; j++) { - encoding[j] = gid++; - } - } - break; - default: - throw new _util.FormatError(`Unknown encoding format: ${format} in CFF`); - } - const dataEnd = pos; - if (format & 0x80) { - bytes[dataStart] &= 0x7f; - readSupplement(); - } - raw = bytes.subarray(dataStart, dataEnd); - } - format &= 0x7f; - return new CFFEncoding(predefined, format, encoding, raw); - } - parseFDSelect(pos, length) { - const bytes = this.bytes; - const format = bytes[pos++]; - const fdSelect = []; - let i; - switch (format) { - case 0: - for (i = 0; i < length; ++i) { - const id = bytes[pos++]; - fdSelect.push(id); - } - break; - case 3: - const rangesCount = bytes[pos++] << 8 | bytes[pos++]; - for (i = 0; i < rangesCount; ++i) { - let first = bytes[pos++] << 8 | bytes[pos++]; - if (i === 0 && first !== 0) { - (0, _util.warn)("parseFDSelect: The first range must have a first GID of 0" + " -- trying to recover."); - first = 0; - } - const fdIndex = bytes[pos++]; - const next = bytes[pos] << 8 | bytes[pos + 1]; - for (let j = first; j < next; ++j) { - fdSelect.push(fdIndex); - } - } - pos += 2; - break; - default: - throw new _util.FormatError(`parseFDSelect: Unknown format "${format}".`); - } - if (fdSelect.length !== length) { - throw new _util.FormatError("parseFDSelect: Invalid font data."); - } - return new CFFFDSelect(format, fdSelect); - } -} -exports.CFFParser = CFFParser; -class CFF { - constructor() { - this.header = null; - this.names = []; - this.topDict = null; - this.strings = new CFFStrings(); - this.globalSubrIndex = null; - this.encoding = null; - this.charset = null; - this.charStrings = null; - this.fdArray = []; - this.fdSelect = null; - this.isCIDFont = false; - } - duplicateFirstGlyph() { - if (this.charStrings.count >= 65535) { - (0, _util.warn)("Not enough space in charstrings to duplicate first glyph."); - return; - } - const glyphZero = this.charStrings.get(0); - this.charStrings.add(glyphZero); - if (this.isCIDFont) { - this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]); - } - } - hasGlyphId(id) { - if (id < 0 || id >= this.charStrings.count) { - return false; - } - const glyph = this.charStrings.get(id); - return glyph.length > 0; - } -} -exports.CFF = CFF; -class CFFHeader { - constructor(major, minor, hdrSize, offSize) { - this.major = major; - this.minor = minor; - this.hdrSize = hdrSize; - this.offSize = offSize; - } -} -exports.CFFHeader = CFFHeader; -class CFFStrings { - constructor() { - this.strings = []; - } - get(index) { - if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) { - return CFFStandardStrings[index]; - } - if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) { - return this.strings[index - NUM_STANDARD_CFF_STRINGS]; - } - return CFFStandardStrings[0]; - } - getSID(str) { - let index = CFFStandardStrings.indexOf(str); - if (index !== -1) { - return index; - } - index = this.strings.indexOf(str); - if (index !== -1) { - return index + NUM_STANDARD_CFF_STRINGS; - } - return -1; - } - add(value) { - this.strings.push(value); - } - get count() { - return this.strings.length; - } -} -exports.CFFStrings = CFFStrings; -class CFFIndex { - constructor() { - this.objects = []; - this.length = 0; - } - add(data) { - this.length += data.length; - this.objects.push(data); - } - set(index, data) { - this.length += data.length - this.objects[index].length; - this.objects[index] = data; - } - get(index) { - return this.objects[index]; - } - get count() { - return this.objects.length; - } -} -exports.CFFIndex = CFFIndex; -class CFFDict { - constructor(tables, strings) { - this.keyToNameMap = tables.keyToNameMap; - this.nameToKeyMap = tables.nameToKeyMap; - this.defaults = tables.defaults; - this.types = tables.types; - this.opcodes = tables.opcodes; - this.order = tables.order; - this.strings = strings; - this.values = Object.create(null); - } - setByKey(key, value) { - if (!(key in this.keyToNameMap)) { - return false; - } - if (value.length === 0) { - return true; - } - for (const val of value) { - if (isNaN(val)) { - (0, _util.warn)(`Invalid CFFDict value: "${value}" for key "${key}".`); - return true; - } - } - const type = this.types[key]; - if (type === "num" || type === "sid" || type === "offset") { - value = value[0]; - } - this.values[key] = value; - return true; - } - setByName(name, value) { - if (!(name in this.nameToKeyMap)) { - throw new _util.FormatError(`Invalid dictionary name "${name}"`); - } - this.values[this.nameToKeyMap[name]] = value; - } - hasName(name) { - return this.nameToKeyMap[name] in this.values; - } - getByName(name) { - if (!(name in this.nameToKeyMap)) { - throw new _util.FormatError(`Invalid dictionary name ${name}"`); - } - const key = this.nameToKeyMap[name]; - if (!(key in this.values)) { - return this.defaults[key]; - } - return this.values[key]; - } - removeByName(name) { - delete this.values[this.nameToKeyMap[name]]; - } - static createTables(layout) { - const tables = { - keyToNameMap: {}, - nameToKeyMap: {}, - defaults: {}, - types: {}, - opcodes: {}, - order: [] - }; - for (const entry of layout) { - const key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0]; - tables.keyToNameMap[key] = entry[1]; - tables.nameToKeyMap[entry[1]] = key; - tables.types[key] = entry[2]; - tables.defaults[key] = entry[3]; - tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]]; - tables.order.push(key); - } - return tables; - } -} -const CFFTopDictLayout = [[[12, 30], "ROS", ["sid", "sid", "num"], null], [[12, 20], "SyntheticBase", "num", null], [0, "version", "sid", null], [1, "Notice", "sid", null], [[12, 0], "Copyright", "sid", null], [2, "FullName", "sid", null], [3, "FamilyName", "sid", null], [4, "Weight", "sid", null], [[12, 1], "isFixedPitch", "num", 0], [[12, 2], "ItalicAngle", "num", 0], [[12, 3], "UnderlinePosition", "num", -100], [[12, 4], "UnderlineThickness", "num", 50], [[12, 5], "PaintType", "num", 0], [[12, 6], "CharstringType", "num", 2], [[12, 7], "FontMatrix", ["num", "num", "num", "num", "num", "num"], [0.001, 0, 0, 0.001, 0, 0]], [13, "UniqueID", "num", null], [5, "FontBBox", ["num", "num", "num", "num"], [0, 0, 0, 0]], [[12, 8], "StrokeWidth", "num", 0], [14, "XUID", "array", null], [15, "charset", "offset", 0], [16, "Encoding", "offset", 0], [17, "CharStrings", "offset", 0], [18, "Private", ["offset", "offset"], null], [[12, 21], "PostScript", "sid", null], [[12, 22], "BaseFontName", "sid", null], [[12, 23], "BaseFontBlend", "delta", null], [[12, 31], "CIDFontVersion", "num", 0], [[12, 32], "CIDFontRevision", "num", 0], [[12, 33], "CIDFontType", "num", 0], [[12, 34], "CIDCount", "num", 8720], [[12, 35], "UIDBase", "num", null], [[12, 37], "FDSelect", "offset", null], [[12, 36], "FDArray", "offset", null], [[12, 38], "FontName", "sid", null]]; -class CFFTopDict extends CFFDict { - static get tables() { - return (0, _util.shadow)(this, "tables", this.createTables(CFFTopDictLayout)); - } - constructor(strings) { - super(CFFTopDict.tables, strings); - this.privateDict = null; - } -} -exports.CFFTopDict = CFFTopDict; -const CFFPrivateDictLayout = [[6, "BlueValues", "delta", null], [7, "OtherBlues", "delta", null], [8, "FamilyBlues", "delta", null], [9, "FamilyOtherBlues", "delta", null], [[12, 9], "BlueScale", "num", 0.039625], [[12, 10], "BlueShift", "num", 7], [[12, 11], "BlueFuzz", "num", 1], [10, "StdHW", "num", null], [11, "StdVW", "num", null], [[12, 12], "StemSnapH", "delta", null], [[12, 13], "StemSnapV", "delta", null], [[12, 14], "ForceBold", "num", 0], [[12, 17], "LanguageGroup", "num", 0], [[12, 18], "ExpansionFactor", "num", 0.06], [[12, 19], "initialRandomSeed", "num", 0], [20, "defaultWidthX", "num", 0], [21, "nominalWidthX", "num", 0], [19, "Subrs", "offset", null]]; -class CFFPrivateDict extends CFFDict { - static get tables() { - return (0, _util.shadow)(this, "tables", this.createTables(CFFPrivateDictLayout)); - } - constructor(strings) { - super(CFFPrivateDict.tables, strings); - this.subrsIndex = null; - } -} -exports.CFFPrivateDict = CFFPrivateDict; -const CFFCharsetPredefinedTypes = { - ISO_ADOBE: 0, - EXPERT: 1, - EXPERT_SUBSET: 2 -}; -class CFFCharset { - constructor(predefined, format, charset, raw) { - this.predefined = predefined; - this.format = format; - this.charset = charset; - this.raw = raw; - } -} -exports.CFFCharset = CFFCharset; -class CFFEncoding { - constructor(predefined, format, encoding, raw) { - this.predefined = predefined; - this.format = format; - this.encoding = encoding; - this.raw = raw; - } -} -class CFFFDSelect { - constructor(format, fdSelect) { - this.format = format; - this.fdSelect = fdSelect; - } - getFDIndex(glyphIndex) { - if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) { - return -1; - } - return this.fdSelect[glyphIndex]; - } -} -exports.CFFFDSelect = CFFFDSelect; -class CFFOffsetTracker { - constructor() { - this.offsets = Object.create(null); - } - isTracking(key) { - return key in this.offsets; - } - track(key, location) { - if (key in this.offsets) { - throw new _util.FormatError(`Already tracking location of ${key}`); - } - this.offsets[key] = location; - } - offset(value) { - for (const key in this.offsets) { - this.offsets[key] += value; - } - } - setEntryLocation(key, values, output) { - if (!(key in this.offsets)) { - throw new _util.FormatError(`Not tracking location of ${key}`); - } - const data = output.data; - const dataOffset = this.offsets[key]; - const size = 5; - for (let i = 0, ii = values.length; i < ii; ++i) { - const offset0 = i * size + dataOffset; - const offset1 = offset0 + 1; - const offset2 = offset0 + 2; - const offset3 = offset0 + 3; - const offset4 = offset0 + 4; - if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) { - throw new _util.FormatError("writing to an offset that is not empty"); - } - const value = values[i]; - data[offset0] = 0x1d; - data[offset1] = value >> 24 & 0xff; - data[offset2] = value >> 16 & 0xff; - data[offset3] = value >> 8 & 0xff; - data[offset4] = value & 0xff; - } - } -} -class CFFCompiler { - constructor(cff) { - this.cff = cff; - } - compile() { - const cff = this.cff; - const output = { - data: [], - length: 0, - add(data) { - try { - this.data.push(...data); - } catch { - this.data = this.data.concat(data); - } - this.length = this.data.length; - } - }; - const header = this.compileHeader(cff.header); - output.add(header); - const nameIndex = this.compileNameIndex(cff.names); - output.add(nameIndex); - if (cff.isCIDFont) { - if (cff.topDict.hasName("FontMatrix")) { - const base = cff.topDict.getByName("FontMatrix"); - cff.topDict.removeByName("FontMatrix"); - for (const subDict of cff.fdArray) { - let matrix = base.slice(0); - if (subDict.hasName("FontMatrix")) { - matrix = _util.Util.transform(matrix, subDict.getByName("FontMatrix")); - } - subDict.setByName("FontMatrix", matrix); - } - } - } - const xuid = cff.topDict.getByName("XUID"); - if (xuid?.length > 16) { - cff.topDict.removeByName("XUID"); - } - cff.topDict.setByName("charset", 0); - let compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont); - output.add(compiled.output); - const topDictTracker = compiled.trackers[0]; - const stringIndex = this.compileStringIndex(cff.strings.strings); - output.add(stringIndex); - const globalSubrIndex = this.compileIndex(cff.globalSubrIndex); - output.add(globalSubrIndex); - if (cff.encoding && cff.topDict.hasName("Encoding")) { - if (cff.encoding.predefined) { - topDictTracker.setEntryLocation("Encoding", [cff.encoding.format], output); - } else { - const encoding = this.compileEncoding(cff.encoding); - topDictTracker.setEntryLocation("Encoding", [output.length], output); - output.add(encoding); - } - } - const charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont); - topDictTracker.setEntryLocation("charset", [output.length], output); - output.add(charset); - const charStrings = this.compileCharStrings(cff.charStrings); - topDictTracker.setEntryLocation("CharStrings", [output.length], output); - output.add(charStrings); - if (cff.isCIDFont) { - topDictTracker.setEntryLocation("FDSelect", [output.length], output); - const fdSelect = this.compileFDSelect(cff.fdSelect); - output.add(fdSelect); - compiled = this.compileTopDicts(cff.fdArray, output.length, true); - topDictTracker.setEntryLocation("FDArray", [output.length], output); - output.add(compiled.output); - const fontDictTrackers = compiled.trackers; - this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output); - } - this.compilePrivateDicts([cff.topDict], [topDictTracker], output); - output.add([0]); - return output.data; - } - encodeNumber(value) { - if (Number.isInteger(value)) { - return this.encodeInteger(value); - } - return this.encodeFloat(value); - } - static get EncodeFloatRegExp() { - return (0, _util.shadow)(this, "EncodeFloatRegExp", /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/); - } - encodeFloat(num) { - let value = num.toString(); - const m = CFFCompiler.EncodeFloatRegExp.exec(value); - if (m) { - const epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length)); - value = (Math.round(num * epsilon) / epsilon).toString(); - } - let nibbles = ""; - let i, ii; - for (i = 0, ii = value.length; i < ii; ++i) { - const a = value[i]; - if (a === "e") { - nibbles += value[++i] === "-" ? "c" : "b"; - } else if (a === ".") { - nibbles += "a"; - } else if (a === "-") { - nibbles += "e"; - } else { - nibbles += a; - } - } - nibbles += nibbles.length & 1 ? "f" : "ff"; - const out = [30]; - for (i = 0, ii = nibbles.length; i < ii; i += 2) { - out.push(parseInt(nibbles.substring(i, i + 2), 16)); - } - return out; - } - encodeInteger(value) { - let code; - if (value >= -107 && value <= 107) { - code = [value + 139]; - } else if (value >= 108 && value <= 1131) { - value -= 108; - code = [(value >> 8) + 247, value & 0xff]; - } else if (value >= -1131 && value <= -108) { - value = -value - 108; - code = [(value >> 8) + 251, value & 0xff]; - } else if (value >= -32768 && value <= 32767) { - code = [0x1c, value >> 8 & 0xff, value & 0xff]; - } else { - code = [0x1d, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff]; - } - return code; - } - compileHeader(header) { - return [header.major, header.minor, 4, header.offSize]; - } - compileNameIndex(names) { - const nameIndex = new CFFIndex(); - for (const name of names) { - const length = Math.min(name.length, 127); - let sanitizedName = new Array(length); - for (let j = 0; j < length; j++) { - let char = name[j]; - if (char < "!" || char > "~" || char === "[" || char === "]" || char === "(" || char === ")" || char === "{" || char === "}" || char === "<" || char === ">" || char === "/" || char === "%") { - char = "_"; - } - sanitizedName[j] = char; - } - sanitizedName = sanitizedName.join(""); - if (sanitizedName === "") { - sanitizedName = "Bad_Font_Name"; - } - nameIndex.add((0, _util.stringToBytes)(sanitizedName)); - } - return this.compileIndex(nameIndex); - } - compileTopDicts(dicts, length, removeCidKeys) { - const fontDictTrackers = []; - let fdArrayIndex = new CFFIndex(); - for (const fontDict of dicts) { - if (removeCidKeys) { - fontDict.removeByName("CIDFontVersion"); - fontDict.removeByName("CIDFontRevision"); - fontDict.removeByName("CIDFontType"); - fontDict.removeByName("CIDCount"); - fontDict.removeByName("UIDBase"); - } - const fontDictTracker = new CFFOffsetTracker(); - const fontDictData = this.compileDict(fontDict, fontDictTracker); - fontDictTrackers.push(fontDictTracker); - fdArrayIndex.add(fontDictData); - fontDictTracker.offset(length); - } - fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers); - return { - trackers: fontDictTrackers, - output: fdArrayIndex - }; - } - compilePrivateDicts(dicts, trackers, output) { - for (let i = 0, ii = dicts.length; i < ii; ++i) { - const fontDict = dicts[i]; - const privateDict = fontDict.privateDict; - if (!privateDict || !fontDict.hasName("Private")) { - throw new _util.FormatError("There must be a private dictionary."); - } - const privateDictTracker = new CFFOffsetTracker(); - const privateDictData = this.compileDict(privateDict, privateDictTracker); - let outputLength = output.length; - privateDictTracker.offset(outputLength); - if (!privateDictData.length) { - outputLength = 0; - } - trackers[i].setEntryLocation("Private", [privateDictData.length, outputLength], output); - output.add(privateDictData); - if (privateDict.subrsIndex && privateDict.hasName("Subrs")) { - const subrs = this.compileIndex(privateDict.subrsIndex); - privateDictTracker.setEntryLocation("Subrs", [privateDictData.length], output); - output.add(subrs); - } - } - } - compileDict(dict, offsetTracker) { - const out = []; - for (const key of dict.order) { - if (!(key in dict.values)) { - continue; - } - let values = dict.values[key]; - let types = dict.types[key]; - if (!Array.isArray(types)) { - types = [types]; - } - if (!Array.isArray(values)) { - values = [values]; - } - if (values.length === 0) { - continue; - } - for (let j = 0, jj = types.length; j < jj; ++j) { - const type = types[j]; - const value = values[j]; - switch (type) { - case "num": - case "sid": - out.push(...this.encodeNumber(value)); - break; - case "offset": - const name = dict.keyToNameMap[key]; - if (!offsetTracker.isTracking(name)) { - offsetTracker.track(name, out.length); - } - out.push(0x1d, 0, 0, 0, 0); - break; - case "array": - case "delta": - out.push(...this.encodeNumber(value)); - for (let k = 1, kk = values.length; k < kk; ++k) { - out.push(...this.encodeNumber(values[k])); - } - break; - default: - throw new _util.FormatError(`Unknown data type of ${type}`); - } - } - out.push(...dict.opcodes[key]); - } - return out; - } - compileStringIndex(strings) { - const stringIndex = new CFFIndex(); - for (const string of strings) { - stringIndex.add((0, _util.stringToBytes)(string)); - } - return this.compileIndex(stringIndex); - } - compileCharStrings(charStrings) { - const charStringsIndex = new CFFIndex(); - for (let i = 0; i < charStrings.count; i++) { - const glyph = charStrings.get(i); - if (glyph.length === 0) { - charStringsIndex.add(new Uint8Array([0x8b, 0x0e])); - continue; - } - charStringsIndex.add(glyph); - } - return this.compileIndex(charStringsIndex); - } - compileCharset(charset, numGlyphs, strings, isCIDFont) { - let out; - const numGlyphsLessNotDef = numGlyphs - 1; - if (isCIDFont) { - out = new Uint8Array([2, 0, 0, numGlyphsLessNotDef >> 8 & 0xff, numGlyphsLessNotDef & 0xff]); - } else { - const length = 1 + numGlyphsLessNotDef * 2; - out = new Uint8Array(length); - out[0] = 0; - let charsetIndex = 0; - const numCharsets = charset.charset.length; - let warned = false; - for (let i = 1; i < out.length; i += 2) { - let sid = 0; - if (charsetIndex < numCharsets) { - const name = charset.charset[charsetIndex++]; - sid = strings.getSID(name); - if (sid === -1) { - sid = 0; - if (!warned) { - warned = true; - (0, _util.warn)(`Couldn't find ${name} in CFF strings`); - } - } - } - out[i] = sid >> 8 & 0xff; - out[i + 1] = sid & 0xff; - } - } - return this.compileTypedArray(out); - } - compileEncoding(encoding) { - return this.compileTypedArray(encoding.raw); - } - compileFDSelect(fdSelect) { - const format = fdSelect.format; - let out, i; - switch (format) { - case 0: - out = new Uint8Array(1 + fdSelect.fdSelect.length); - out[0] = format; - for (i = 0; i < fdSelect.fdSelect.length; i++) { - out[i + 1] = fdSelect.fdSelect[i]; - } - break; - case 3: - const start = 0; - let lastFD = fdSelect.fdSelect[0]; - const ranges = [format, 0, 0, start >> 8 & 0xff, start & 0xff, lastFD]; - for (i = 1; i < fdSelect.fdSelect.length; i++) { - const currentFD = fdSelect.fdSelect[i]; - if (currentFD !== lastFD) { - ranges.push(i >> 8 & 0xff, i & 0xff, currentFD); - lastFD = currentFD; - } - } - const numRanges = (ranges.length - 3) / 3; - ranges[1] = numRanges >> 8 & 0xff; - ranges[2] = numRanges & 0xff; - ranges.push(i >> 8 & 0xff, i & 0xff); - out = new Uint8Array(ranges); - break; - } - return this.compileTypedArray(out); - } - compileTypedArray(data) { - return Array.from(data); - } - compileIndex(index, trackers = []) { - const objects = index.objects; - const count = objects.length; - if (count === 0) { - return [0, 0]; - } - const data = [count >> 8 & 0xff, count & 0xff]; - let lastOffset = 1, - i; - for (i = 0; i < count; ++i) { - lastOffset += objects[i].length; - } - let offsetSize; - if (lastOffset < 0x100) { - offsetSize = 1; - } else if (lastOffset < 0x10000) { - offsetSize = 2; - } else if (lastOffset < 0x1000000) { - offsetSize = 3; - } else { - offsetSize = 4; - } - data.push(offsetSize); - let relativeOffset = 1; - for (i = 0; i < count + 1; i++) { - if (offsetSize === 1) { - data.push(relativeOffset & 0xff); - } else if (offsetSize === 2) { - data.push(relativeOffset >> 8 & 0xff, relativeOffset & 0xff); - } else if (offsetSize === 3) { - data.push(relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff); - } else { - data.push(relativeOffset >>> 24 & 0xff, relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff); - } - if (objects[i]) { - relativeOffset += objects[i].length; - } - } - for (i = 0; i < count; i++) { - if (trackers[i]) { - trackers[i].offset(data.length); - } - data.push(...objects[i]); - } - return data; - } -} -exports.CFFCompiler = CFFCompiler; - -/***/ }), -/* 36 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ISOAdobeCharset = exports.ExpertSubsetCharset = exports.ExpertCharset = void 0; -const ISOAdobeCharset = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron"]; -exports.ISOAdobeCharset = ISOAdobeCharset; -const ExpertCharset = [".notdef", "space", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"]; -exports.ExpertCharset = ExpertCharset; -const ExpertSubsetCharset = [".notdef", "space", "dollaroldstyle", "dollarsuperior", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "hyphensuperior", "colonmonetary", "onefitted", "rupiah", "centoldstyle", "figuredash", "hypheninferior", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior"]; -exports.ExpertSubsetCharset = ExpertSubsetCharset; - -/***/ }), -/* 37 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ZapfDingbatsEncoding = exports.WinAnsiEncoding = exports.SymbolSetEncoding = exports.StandardEncoding = exports.MacRomanEncoding = exports.ExpertEncoding = void 0; -exports.getEncoding = getEncoding; -const ExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "", "", "", "isuperior", "", "", "lsuperior", "msuperior", "nsuperior", "osuperior", "", "", "rsuperior", "ssuperior", "tsuperior", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdownsmall", "centoldstyle", "Lslashsmall", "", "", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "", "Dotaccentsmall", "", "", "Macronsmall", "", "", "figuredash", "hypheninferior", "", "", "Ogoneksmall", "Ringsmall", "Cedillasmall", "", "", "", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"]; -exports.ExpertEncoding = ExpertEncoding; -const MacExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "centoldstyle", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "", "threequartersemdash", "", "questionsmall", "", "", "", "", "Ethsmall", "", "", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "", "", "", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hypheninferior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "asuperior", "centsuperior", "", "", "", "", "Aacutesmall", "Agravesmall", "Acircumflexsmall", "Adieresissmall", "Atildesmall", "Aringsmall", "Ccedillasmall", "Eacutesmall", "Egravesmall", "Ecircumflexsmall", "Edieresissmall", "Iacutesmall", "Igravesmall", "Icircumflexsmall", "Idieresissmall", "Ntildesmall", "Oacutesmall", "Ogravesmall", "Ocircumflexsmall", "Odieresissmall", "Otildesmall", "Uacutesmall", "Ugravesmall", "Ucircumflexsmall", "Udieresissmall", "", "eightsuperior", "fourinferior", "threeinferior", "sixinferior", "eightinferior", "seveninferior", "Scaronsmall", "", "centinferior", "twoinferior", "", "Dieresissmall", "", "Caronsmall", "osuperior", "fiveinferior", "", "commainferior", "periodinferior", "Yacutesmall", "", "dollarinferior", "", "", "Thornsmall", "", "nineinferior", "zeroinferior", "Zcaronsmall", "AEsmall", "Oslashsmall", "questiondownsmall", "oneinferior", "Lslashsmall", "", "", "", "", "", "", "Cedillasmall", "", "", "", "", "", "OEsmall", "figuredash", "hyphensuperior", "", "", "", "", "exclamdownsmall", "", "Ydieresissmall", "", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "ninesuperior", "zerosuperior", "", "esuperior", "rsuperior", "tsuperior", "", "", "isuperior", "ssuperior", "dsuperior", "", "", "", "", "", "lsuperior", "Ogoneksmall", "Brevesmall", "Macronsmall", "bsuperior", "nsuperior", "msuperior", "commasuperior", "periodsuperior", "Dotaccentsmall", "Ringsmall", "", "", "", ""]; -const MacRomanEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "space", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron"]; -exports.MacRomanEncoding = MacRomanEncoding; -const StandardEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "", "endash", "dagger", "daggerdbl", "periodcentered", "", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "", "questiondown", "", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "", "ring", "cedilla", "", "hungarumlaut", "ogonek", "caron", "emdash", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "AE", "", "ordfeminine", "", "", "", "", "Lslash", "Oslash", "OE", "ordmasculine", "", "", "", "", "", "ae", "", "", "", "dotlessi", "", "", "lslash", "oslash", "oe", "germandbls", "", "", "", ""]; -exports.StandardEncoding = StandardEncoding; -const WinAnsiEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "bullet", "Euro", "bullet", "quotesinglbase", "florin", "quotedblbase", "ellipsis", "dagger", "daggerdbl", "circumflex", "perthousand", "Scaron", "guilsinglleft", "OE", "bullet", "Zcaron", "bullet", "bullet", "quoteleft", "quoteright", "quotedblleft", "quotedblright", "bullet", "endash", "emdash", "tilde", "trademark", "scaron", "guilsinglright", "oe", "bullet", "zcaron", "Ydieresis", "space", "exclamdown", "cent", "sterling", "currency", "yen", "brokenbar", "section", "dieresis", "copyright", "ordfeminine", "guillemotleft", "logicalnot", "hyphen", "registered", "macron", "degree", "plusminus", "twosuperior", "threesuperior", "acute", "mu", "paragraph", "periodcentered", "cedilla", "onesuperior", "ordmasculine", "guillemotright", "onequarter", "onehalf", "threequarters", "questiondown", "Agrave", "Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring", "AE", "Ccedilla", "Egrave", "Eacute", "Ecircumflex", "Edieresis", "Igrave", "Iacute", "Icircumflex", "Idieresis", "Eth", "Ntilde", "Ograve", "Oacute", "Ocircumflex", "Otilde", "Odieresis", "multiply", "Oslash", "Ugrave", "Uacute", "Ucircumflex", "Udieresis", "Yacute", "Thorn", "germandbls", "agrave", "aacute", "acircumflex", "atilde", "adieresis", "aring", "ae", "ccedilla", "egrave", "eacute", "ecircumflex", "edieresis", "igrave", "iacute", "icircumflex", "idieresis", "eth", "ntilde", "ograve", "oacute", "ocircumflex", "otilde", "odieresis", "divide", "oslash", "ugrave", "uacute", "ucircumflex", "udieresis", "yacute", "thorn", "ydieresis"]; -exports.WinAnsiEncoding = WinAnsiEncoding; -const SymbolSetEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "universal", "numbersign", "existential", "percent", "ampersand", "suchthat", "parenleft", "parenright", "asteriskmath", "plus", "comma", "minus", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "congruent", "Alpha", "Beta", "Chi", "Delta", "Epsilon", "Phi", "Gamma", "Eta", "Iota", "theta1", "Kappa", "Lambda", "Mu", "Nu", "Omicron", "Pi", "Theta", "Rho", "Sigma", "Tau", "Upsilon", "sigma1", "Omega", "Xi", "Psi", "Zeta", "bracketleft", "therefore", "bracketright", "perpendicular", "underscore", "radicalex", "alpha", "beta", "chi", "delta", "epsilon", "phi", "gamma", "eta", "iota", "phi1", "kappa", "lambda", "mu", "nu", "omicron", "pi", "theta", "rho", "sigma", "tau", "upsilon", "omega1", "omega", "xi", "psi", "zeta", "braceleft", "bar", "braceright", "similar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Euro", "Upsilon1", "minute", "lessequal", "fraction", "infinity", "florin", "club", "diamond", "heart", "spade", "arrowboth", "arrowleft", "arrowup", "arrowright", "arrowdown", "degree", "plusminus", "second", "greaterequal", "multiply", "proportional", "partialdiff", "bullet", "divide", "notequal", "equivalence", "approxequal", "ellipsis", "arrowvertex", "arrowhorizex", "carriagereturn", "aleph", "Ifraktur", "Rfraktur", "weierstrass", "circlemultiply", "circleplus", "emptyset", "intersection", "union", "propersuperset", "reflexsuperset", "notsubset", "propersubset", "reflexsubset", "element", "notelement", "angle", "gradient", "registerserif", "copyrightserif", "trademarkserif", "product", "radical", "dotmath", "logicalnot", "logicaland", "logicalor", "arrowdblboth", "arrowdblleft", "arrowdblup", "arrowdblright", "arrowdbldown", "lozenge", "angleleft", "registersans", "copyrightsans", "trademarksans", "summation", "parenlefttp", "parenleftex", "parenleftbt", "bracketlefttp", "bracketleftex", "bracketleftbt", "bracelefttp", "braceleftmid", "braceleftbt", "braceex", "", "angleright", "integral", "integraltp", "integralex", "integralbt", "parenrighttp", "parenrightex", "parenrightbt", "bracketrighttp", "bracketrightex", "bracketrightbt", "bracerighttp", "bracerightmid", "bracerightbt", ""]; -exports.SymbolSetEncoding = SymbolSetEncoding; -const ZapfDingbatsEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "a1", "a2", "a202", "a3", "a4", "a5", "a119", "a118", "a117", "a11", "a12", "a13", "a14", "a15", "a16", "a105", "a17", "a18", "a19", "a20", "a21", "a22", "a23", "a24", "a25", "a26", "a27", "a28", "a6", "a7", "a8", "a9", "a10", "a29", "a30", "a31", "a32", "a33", "a34", "a35", "a36", "a37", "a38", "a39", "a40", "a41", "a42", "a43", "a44", "a45", "a46", "a47", "a48", "a49", "a50", "a51", "a52", "a53", "a54", "a55", "a56", "a57", "a58", "a59", "a60", "a61", "a62", "a63", "a64", "a65", "a66", "a67", "a68", "a69", "a70", "a71", "a72", "a73", "a74", "a203", "a75", "a204", "a76", "a77", "a78", "a79", "a81", "a82", "a83", "a84", "a97", "a98", "a99", "a100", "", "a89", "a90", "a93", "a94", "a91", "a92", "a205", "a85", "a206", "a86", "a87", "a88", "a95", "a96", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "a101", "a102", "a103", "a104", "a106", "a107", "a108", "a112", "a111", "a110", "a109", "a120", "a121", "a122", "a123", "a124", "a125", "a126", "a127", "a128", "a129", "a130", "a131", "a132", "a133", "a134", "a135", "a136", "a137", "a138", "a139", "a140", "a141", "a142", "a143", "a144", "a145", "a146", "a147", "a148", "a149", "a150", "a151", "a152", "a153", "a154", "a155", "a156", "a157", "a158", "a159", "a160", "a161", "a163", "a164", "a196", "a165", "a192", "a166", "a167", "a168", "a169", "a170", "a171", "a172", "a173", "a162", "a174", "a175", "a176", "a177", "a178", "a179", "a193", "a180", "a199", "a181", "a200", "a182", "", "a201", "a183", "a184", "a197", "a185", "a194", "a198", "a186", "a195", "a187", "a188", "a189", "a190", "a191", ""]; -exports.ZapfDingbatsEncoding = ZapfDingbatsEncoding; -function getEncoding(encodingName) { - switch (encodingName) { - case "WinAnsiEncoding": - return WinAnsiEncoding; - case "StandardEncoding": - return StandardEncoding; - case "MacRomanEncoding": - return MacRomanEncoding; - case "SymbolSetEncoding": - return SymbolSetEncoding; - case "ZapfDingbatsEncoding": - return ZapfDingbatsEncoding; - case "ExpertEncoding": - return ExpertEncoding; - case "MacExpertEncoding": - return MacExpertEncoding; - default: - return null; - } -} - -/***/ }), -/* 38 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.SEAC_ANALYSIS_ENABLED = exports.MacStandardGlyphOrdering = exports.FontFlags = void 0; -exports.normalizeFontName = normalizeFontName; -exports.recoverGlyphName = recoverGlyphName; -exports.type1FontGlyphMapping = type1FontGlyphMapping; -var _encodings = __w_pdfjs_require__(37); -var _glyphlist = __w_pdfjs_require__(39); -var _unicode = __w_pdfjs_require__(40); -var _util = __w_pdfjs_require__(2); -const SEAC_ANALYSIS_ENABLED = true; -exports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED; -const FontFlags = { - FixedPitch: 1, - Serif: 2, - Symbolic: 4, - Script: 8, - Nonsymbolic: 32, - Italic: 64, - AllCap: 65536, - SmallCap: 131072, - ForceBold: 262144 -}; -exports.FontFlags = FontFlags; -const MacStandardGlyphOrdering = [".notdef", ".null", "nonmarkingreturn", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "Lslash", "lslash", "Scaron", "scaron", "Zcaron", "zcaron", "brokenbar", "Eth", "eth", "Yacute", "yacute", "Thorn", "thorn", "minus", "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf", "onequarter", "threequarters", "franc", "Gbreve", "gbreve", "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", "Ccaron", "ccaron", "dcroat"]; -exports.MacStandardGlyphOrdering = MacStandardGlyphOrdering; -function recoverGlyphName(name, glyphsUnicodeMap) { - if (glyphsUnicodeMap[name] !== undefined) { - return name; - } - const unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap); - if (unicode !== -1) { - for (const key in glyphsUnicodeMap) { - if (glyphsUnicodeMap[key] === unicode) { - return key; - } - } - } - (0, _util.info)("Unable to recover a standard glyph name for: " + name); - return name; -} -function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) { - const charCodeToGlyphId = Object.create(null); - let glyphId, charCode, baseEncoding; - const isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); - if (properties.isInternalFont) { - baseEncoding = builtInEncoding; - for (charCode = 0; charCode < baseEncoding.length; charCode++) { - glyphId = glyphNames.indexOf(baseEncoding[charCode]); - charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : 0; - } - } else if (properties.baseEncodingName) { - baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName); - for (charCode = 0; charCode < baseEncoding.length; charCode++) { - glyphId = glyphNames.indexOf(baseEncoding[charCode]); - charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : 0; - } - } else if (isSymbolicFont) { - for (charCode in builtInEncoding) { - charCodeToGlyphId[charCode] = builtInEncoding[charCode]; - } - } else { - baseEncoding = _encodings.StandardEncoding; - for (charCode = 0; charCode < baseEncoding.length; charCode++) { - glyphId = glyphNames.indexOf(baseEncoding[charCode]); - charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : 0; - } - } - const differences = properties.differences; - let glyphsUnicodeMap; - if (differences) { - for (charCode in differences) { - const glyphName = differences[charCode]; - glyphId = glyphNames.indexOf(glyphName); - if (glyphId === -1) { - if (!glyphsUnicodeMap) { - glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - } - const standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap); - if (standardGlyphName !== glyphName) { - glyphId = glyphNames.indexOf(standardGlyphName); - } - } - charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : 0; - } - } - return charCodeToGlyphId; -} -function normalizeFontName(name) { - return name.replaceAll(/[,_]/g, "-").replaceAll(/\s/g, ""); -} - -/***/ }), -/* 39 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getGlyphsUnicode = exports.getDingbatsGlyphsUnicode = void 0; -var _core_utils = __w_pdfjs_require__(3); -const getGlyphsUnicode = (0, _core_utils.getLookupTableFactory)(function (t) { - t.A = 0x0041; - t.AE = 0x00c6; - t.AEacute = 0x01fc; - t.AEmacron = 0x01e2; - t.AEsmall = 0xf7e6; - t.Aacute = 0x00c1; - t.Aacutesmall = 0xf7e1; - t.Abreve = 0x0102; - t.Abreveacute = 0x1eae; - t.Abrevecyrillic = 0x04d0; - t.Abrevedotbelow = 0x1eb6; - t.Abrevegrave = 0x1eb0; - t.Abrevehookabove = 0x1eb2; - t.Abrevetilde = 0x1eb4; - t.Acaron = 0x01cd; - t.Acircle = 0x24b6; - t.Acircumflex = 0x00c2; - t.Acircumflexacute = 0x1ea4; - t.Acircumflexdotbelow = 0x1eac; - t.Acircumflexgrave = 0x1ea6; - t.Acircumflexhookabove = 0x1ea8; - t.Acircumflexsmall = 0xf7e2; - t.Acircumflextilde = 0x1eaa; - t.Acute = 0xf6c9; - t.Acutesmall = 0xf7b4; - t.Acyrillic = 0x0410; - t.Adblgrave = 0x0200; - t.Adieresis = 0x00c4; - t.Adieresiscyrillic = 0x04d2; - t.Adieresismacron = 0x01de; - t.Adieresissmall = 0xf7e4; - t.Adotbelow = 0x1ea0; - t.Adotmacron = 0x01e0; - t.Agrave = 0x00c0; - t.Agravesmall = 0xf7e0; - t.Ahookabove = 0x1ea2; - t.Aiecyrillic = 0x04d4; - t.Ainvertedbreve = 0x0202; - t.Alpha = 0x0391; - t.Alphatonos = 0x0386; - t.Amacron = 0x0100; - t.Amonospace = 0xff21; - t.Aogonek = 0x0104; - t.Aring = 0x00c5; - t.Aringacute = 0x01fa; - t.Aringbelow = 0x1e00; - t.Aringsmall = 0xf7e5; - t.Asmall = 0xf761; - t.Atilde = 0x00c3; - t.Atildesmall = 0xf7e3; - t.Aybarmenian = 0x0531; - t.B = 0x0042; - t.Bcircle = 0x24b7; - t.Bdotaccent = 0x1e02; - t.Bdotbelow = 0x1e04; - t.Becyrillic = 0x0411; - t.Benarmenian = 0x0532; - t.Beta = 0x0392; - t.Bhook = 0x0181; - t.Blinebelow = 0x1e06; - t.Bmonospace = 0xff22; - t.Brevesmall = 0xf6f4; - t.Bsmall = 0xf762; - t.Btopbar = 0x0182; - t.C = 0x0043; - t.Caarmenian = 0x053e; - t.Cacute = 0x0106; - t.Caron = 0xf6ca; - t.Caronsmall = 0xf6f5; - t.Ccaron = 0x010c; - t.Ccedilla = 0x00c7; - t.Ccedillaacute = 0x1e08; - t.Ccedillasmall = 0xf7e7; - t.Ccircle = 0x24b8; - t.Ccircumflex = 0x0108; - t.Cdot = 0x010a; - t.Cdotaccent = 0x010a; - t.Cedillasmall = 0xf7b8; - t.Chaarmenian = 0x0549; - t.Cheabkhasiancyrillic = 0x04bc; - t.Checyrillic = 0x0427; - t.Chedescenderabkhasiancyrillic = 0x04be; - t.Chedescendercyrillic = 0x04b6; - t.Chedieresiscyrillic = 0x04f4; - t.Cheharmenian = 0x0543; - t.Chekhakassiancyrillic = 0x04cb; - t.Cheverticalstrokecyrillic = 0x04b8; - t.Chi = 0x03a7; - t.Chook = 0x0187; - t.Circumflexsmall = 0xf6f6; - t.Cmonospace = 0xff23; - t.Coarmenian = 0x0551; - t.Csmall = 0xf763; - t.D = 0x0044; - t.DZ = 0x01f1; - t.DZcaron = 0x01c4; - t.Daarmenian = 0x0534; - t.Dafrican = 0x0189; - t.Dcaron = 0x010e; - t.Dcedilla = 0x1e10; - t.Dcircle = 0x24b9; - t.Dcircumflexbelow = 0x1e12; - t.Dcroat = 0x0110; - t.Ddotaccent = 0x1e0a; - t.Ddotbelow = 0x1e0c; - t.Decyrillic = 0x0414; - t.Deicoptic = 0x03ee; - t.Delta = 0x2206; - t.Deltagreek = 0x0394; - t.Dhook = 0x018a; - t.Dieresis = 0xf6cb; - t.DieresisAcute = 0xf6cc; - t.DieresisGrave = 0xf6cd; - t.Dieresissmall = 0xf7a8; - t.Digammagreek = 0x03dc; - t.Djecyrillic = 0x0402; - t.Dlinebelow = 0x1e0e; - t.Dmonospace = 0xff24; - t.Dotaccentsmall = 0xf6f7; - t.Dslash = 0x0110; - t.Dsmall = 0xf764; - t.Dtopbar = 0x018b; - t.Dz = 0x01f2; - t.Dzcaron = 0x01c5; - t.Dzeabkhasiancyrillic = 0x04e0; - t.Dzecyrillic = 0x0405; - t.Dzhecyrillic = 0x040f; - t.E = 0x0045; - t.Eacute = 0x00c9; - t.Eacutesmall = 0xf7e9; - t.Ebreve = 0x0114; - t.Ecaron = 0x011a; - t.Ecedillabreve = 0x1e1c; - t.Echarmenian = 0x0535; - t.Ecircle = 0x24ba; - t.Ecircumflex = 0x00ca; - t.Ecircumflexacute = 0x1ebe; - t.Ecircumflexbelow = 0x1e18; - t.Ecircumflexdotbelow = 0x1ec6; - t.Ecircumflexgrave = 0x1ec0; - t.Ecircumflexhookabove = 0x1ec2; - t.Ecircumflexsmall = 0xf7ea; - t.Ecircumflextilde = 0x1ec4; - t.Ecyrillic = 0x0404; - t.Edblgrave = 0x0204; - t.Edieresis = 0x00cb; - t.Edieresissmall = 0xf7eb; - t.Edot = 0x0116; - t.Edotaccent = 0x0116; - t.Edotbelow = 0x1eb8; - t.Efcyrillic = 0x0424; - t.Egrave = 0x00c8; - t.Egravesmall = 0xf7e8; - t.Eharmenian = 0x0537; - t.Ehookabove = 0x1eba; - t.Eightroman = 0x2167; - t.Einvertedbreve = 0x0206; - t.Eiotifiedcyrillic = 0x0464; - t.Elcyrillic = 0x041b; - t.Elevenroman = 0x216a; - t.Emacron = 0x0112; - t.Emacronacute = 0x1e16; - t.Emacrongrave = 0x1e14; - t.Emcyrillic = 0x041c; - t.Emonospace = 0xff25; - t.Encyrillic = 0x041d; - t.Endescendercyrillic = 0x04a2; - t.Eng = 0x014a; - t.Enghecyrillic = 0x04a4; - t.Enhookcyrillic = 0x04c7; - t.Eogonek = 0x0118; - t.Eopen = 0x0190; - t.Epsilon = 0x0395; - t.Epsilontonos = 0x0388; - t.Ercyrillic = 0x0420; - t.Ereversed = 0x018e; - t.Ereversedcyrillic = 0x042d; - t.Escyrillic = 0x0421; - t.Esdescendercyrillic = 0x04aa; - t.Esh = 0x01a9; - t.Esmall = 0xf765; - t.Eta = 0x0397; - t.Etarmenian = 0x0538; - t.Etatonos = 0x0389; - t.Eth = 0x00d0; - t.Ethsmall = 0xf7f0; - t.Etilde = 0x1ebc; - t.Etildebelow = 0x1e1a; - t.Euro = 0x20ac; - t.Ezh = 0x01b7; - t.Ezhcaron = 0x01ee; - t.Ezhreversed = 0x01b8; - t.F = 0x0046; - t.Fcircle = 0x24bb; - t.Fdotaccent = 0x1e1e; - t.Feharmenian = 0x0556; - t.Feicoptic = 0x03e4; - t.Fhook = 0x0191; - t.Fitacyrillic = 0x0472; - t.Fiveroman = 0x2164; - t.Fmonospace = 0xff26; - t.Fourroman = 0x2163; - t.Fsmall = 0xf766; - t.G = 0x0047; - t.GBsquare = 0x3387; - t.Gacute = 0x01f4; - t.Gamma = 0x0393; - t.Gammaafrican = 0x0194; - t.Gangiacoptic = 0x03ea; - t.Gbreve = 0x011e; - t.Gcaron = 0x01e6; - t.Gcedilla = 0x0122; - t.Gcircle = 0x24bc; - t.Gcircumflex = 0x011c; - t.Gcommaaccent = 0x0122; - t.Gdot = 0x0120; - t.Gdotaccent = 0x0120; - t.Gecyrillic = 0x0413; - t.Ghadarmenian = 0x0542; - t.Ghemiddlehookcyrillic = 0x0494; - t.Ghestrokecyrillic = 0x0492; - t.Gheupturncyrillic = 0x0490; - t.Ghook = 0x0193; - t.Gimarmenian = 0x0533; - t.Gjecyrillic = 0x0403; - t.Gmacron = 0x1e20; - t.Gmonospace = 0xff27; - t.Grave = 0xf6ce; - t.Gravesmall = 0xf760; - t.Gsmall = 0xf767; - t.Gsmallhook = 0x029b; - t.Gstroke = 0x01e4; - t.H = 0x0048; - t.H18533 = 0x25cf; - t.H18543 = 0x25aa; - t.H18551 = 0x25ab; - t.H22073 = 0x25a1; - t.HPsquare = 0x33cb; - t.Haabkhasiancyrillic = 0x04a8; - t.Hadescendercyrillic = 0x04b2; - t.Hardsigncyrillic = 0x042a; - t.Hbar = 0x0126; - t.Hbrevebelow = 0x1e2a; - t.Hcedilla = 0x1e28; - t.Hcircle = 0x24bd; - t.Hcircumflex = 0x0124; - t.Hdieresis = 0x1e26; - t.Hdotaccent = 0x1e22; - t.Hdotbelow = 0x1e24; - t.Hmonospace = 0xff28; - t.Hoarmenian = 0x0540; - t.Horicoptic = 0x03e8; - t.Hsmall = 0xf768; - t.Hungarumlaut = 0xf6cf; - t.Hungarumlautsmall = 0xf6f8; - t.Hzsquare = 0x3390; - t.I = 0x0049; - t.IAcyrillic = 0x042f; - t.IJ = 0x0132; - t.IUcyrillic = 0x042e; - t.Iacute = 0x00cd; - t.Iacutesmall = 0xf7ed; - t.Ibreve = 0x012c; - t.Icaron = 0x01cf; - t.Icircle = 0x24be; - t.Icircumflex = 0x00ce; - t.Icircumflexsmall = 0xf7ee; - t.Icyrillic = 0x0406; - t.Idblgrave = 0x0208; - t.Idieresis = 0x00cf; - t.Idieresisacute = 0x1e2e; - t.Idieresiscyrillic = 0x04e4; - t.Idieresissmall = 0xf7ef; - t.Idot = 0x0130; - t.Idotaccent = 0x0130; - t.Idotbelow = 0x1eca; - t.Iebrevecyrillic = 0x04d6; - t.Iecyrillic = 0x0415; - t.Ifraktur = 0x2111; - t.Igrave = 0x00cc; - t.Igravesmall = 0xf7ec; - t.Ihookabove = 0x1ec8; - t.Iicyrillic = 0x0418; - t.Iinvertedbreve = 0x020a; - t.Iishortcyrillic = 0x0419; - t.Imacron = 0x012a; - t.Imacroncyrillic = 0x04e2; - t.Imonospace = 0xff29; - t.Iniarmenian = 0x053b; - t.Iocyrillic = 0x0401; - t.Iogonek = 0x012e; - t.Iota = 0x0399; - t.Iotaafrican = 0x0196; - t.Iotadieresis = 0x03aa; - t.Iotatonos = 0x038a; - t.Ismall = 0xf769; - t.Istroke = 0x0197; - t.Itilde = 0x0128; - t.Itildebelow = 0x1e2c; - t.Izhitsacyrillic = 0x0474; - t.Izhitsadblgravecyrillic = 0x0476; - t.J = 0x004a; - t.Jaarmenian = 0x0541; - t.Jcircle = 0x24bf; - t.Jcircumflex = 0x0134; - t.Jecyrillic = 0x0408; - t.Jheharmenian = 0x054b; - t.Jmonospace = 0xff2a; - t.Jsmall = 0xf76a; - t.K = 0x004b; - t.KBsquare = 0x3385; - t.KKsquare = 0x33cd; - t.Kabashkircyrillic = 0x04a0; - t.Kacute = 0x1e30; - t.Kacyrillic = 0x041a; - t.Kadescendercyrillic = 0x049a; - t.Kahookcyrillic = 0x04c3; - t.Kappa = 0x039a; - t.Kastrokecyrillic = 0x049e; - t.Kaverticalstrokecyrillic = 0x049c; - t.Kcaron = 0x01e8; - t.Kcedilla = 0x0136; - t.Kcircle = 0x24c0; - t.Kcommaaccent = 0x0136; - t.Kdotbelow = 0x1e32; - t.Keharmenian = 0x0554; - t.Kenarmenian = 0x053f; - t.Khacyrillic = 0x0425; - t.Kheicoptic = 0x03e6; - t.Khook = 0x0198; - t.Kjecyrillic = 0x040c; - t.Klinebelow = 0x1e34; - t.Kmonospace = 0xff2b; - t.Koppacyrillic = 0x0480; - t.Koppagreek = 0x03de; - t.Ksicyrillic = 0x046e; - t.Ksmall = 0xf76b; - t.L = 0x004c; - t.LJ = 0x01c7; - t.LL = 0xf6bf; - t.Lacute = 0x0139; - t.Lambda = 0x039b; - t.Lcaron = 0x013d; - t.Lcedilla = 0x013b; - t.Lcircle = 0x24c1; - t.Lcircumflexbelow = 0x1e3c; - t.Lcommaaccent = 0x013b; - t.Ldot = 0x013f; - t.Ldotaccent = 0x013f; - t.Ldotbelow = 0x1e36; - t.Ldotbelowmacron = 0x1e38; - t.Liwnarmenian = 0x053c; - t.Lj = 0x01c8; - t.Ljecyrillic = 0x0409; - t.Llinebelow = 0x1e3a; - t.Lmonospace = 0xff2c; - t.Lslash = 0x0141; - t.Lslashsmall = 0xf6f9; - t.Lsmall = 0xf76c; - t.M = 0x004d; - t.MBsquare = 0x3386; - t.Macron = 0xf6d0; - t.Macronsmall = 0xf7af; - t.Macute = 0x1e3e; - t.Mcircle = 0x24c2; - t.Mdotaccent = 0x1e40; - t.Mdotbelow = 0x1e42; - t.Menarmenian = 0x0544; - t.Mmonospace = 0xff2d; - t.Msmall = 0xf76d; - t.Mturned = 0x019c; - t.Mu = 0x039c; - t.N = 0x004e; - t.NJ = 0x01ca; - t.Nacute = 0x0143; - t.Ncaron = 0x0147; - t.Ncedilla = 0x0145; - t.Ncircle = 0x24c3; - t.Ncircumflexbelow = 0x1e4a; - t.Ncommaaccent = 0x0145; - t.Ndotaccent = 0x1e44; - t.Ndotbelow = 0x1e46; - t.Nhookleft = 0x019d; - t.Nineroman = 0x2168; - t.Nj = 0x01cb; - t.Njecyrillic = 0x040a; - t.Nlinebelow = 0x1e48; - t.Nmonospace = 0xff2e; - t.Nowarmenian = 0x0546; - t.Nsmall = 0xf76e; - t.Ntilde = 0x00d1; - t.Ntildesmall = 0xf7f1; - t.Nu = 0x039d; - t.O = 0x004f; - t.OE = 0x0152; - t.OEsmall = 0xf6fa; - t.Oacute = 0x00d3; - t.Oacutesmall = 0xf7f3; - t.Obarredcyrillic = 0x04e8; - t.Obarreddieresiscyrillic = 0x04ea; - t.Obreve = 0x014e; - t.Ocaron = 0x01d1; - t.Ocenteredtilde = 0x019f; - t.Ocircle = 0x24c4; - t.Ocircumflex = 0x00d4; - t.Ocircumflexacute = 0x1ed0; - t.Ocircumflexdotbelow = 0x1ed8; - t.Ocircumflexgrave = 0x1ed2; - t.Ocircumflexhookabove = 0x1ed4; - t.Ocircumflexsmall = 0xf7f4; - t.Ocircumflextilde = 0x1ed6; - t.Ocyrillic = 0x041e; - t.Odblacute = 0x0150; - t.Odblgrave = 0x020c; - t.Odieresis = 0x00d6; - t.Odieresiscyrillic = 0x04e6; - t.Odieresissmall = 0xf7f6; - t.Odotbelow = 0x1ecc; - t.Ogoneksmall = 0xf6fb; - t.Ograve = 0x00d2; - t.Ogravesmall = 0xf7f2; - t.Oharmenian = 0x0555; - t.Ohm = 0x2126; - t.Ohookabove = 0x1ece; - t.Ohorn = 0x01a0; - t.Ohornacute = 0x1eda; - t.Ohorndotbelow = 0x1ee2; - t.Ohorngrave = 0x1edc; - t.Ohornhookabove = 0x1ede; - t.Ohorntilde = 0x1ee0; - t.Ohungarumlaut = 0x0150; - t.Oi = 0x01a2; - t.Oinvertedbreve = 0x020e; - t.Omacron = 0x014c; - t.Omacronacute = 0x1e52; - t.Omacrongrave = 0x1e50; - t.Omega = 0x2126; - t.Omegacyrillic = 0x0460; - t.Omegagreek = 0x03a9; - t.Omegaroundcyrillic = 0x047a; - t.Omegatitlocyrillic = 0x047c; - t.Omegatonos = 0x038f; - t.Omicron = 0x039f; - t.Omicrontonos = 0x038c; - t.Omonospace = 0xff2f; - t.Oneroman = 0x2160; - t.Oogonek = 0x01ea; - t.Oogonekmacron = 0x01ec; - t.Oopen = 0x0186; - t.Oslash = 0x00d8; - t.Oslashacute = 0x01fe; - t.Oslashsmall = 0xf7f8; - t.Osmall = 0xf76f; - t.Ostrokeacute = 0x01fe; - t.Otcyrillic = 0x047e; - t.Otilde = 0x00d5; - t.Otildeacute = 0x1e4c; - t.Otildedieresis = 0x1e4e; - t.Otildesmall = 0xf7f5; - t.P = 0x0050; - t.Pacute = 0x1e54; - t.Pcircle = 0x24c5; - t.Pdotaccent = 0x1e56; - t.Pecyrillic = 0x041f; - t.Peharmenian = 0x054a; - t.Pemiddlehookcyrillic = 0x04a6; - t.Phi = 0x03a6; - t.Phook = 0x01a4; - t.Pi = 0x03a0; - t.Piwrarmenian = 0x0553; - t.Pmonospace = 0xff30; - t.Psi = 0x03a8; - t.Psicyrillic = 0x0470; - t.Psmall = 0xf770; - t.Q = 0x0051; - t.Qcircle = 0x24c6; - t.Qmonospace = 0xff31; - t.Qsmall = 0xf771; - t.R = 0x0052; - t.Raarmenian = 0x054c; - t.Racute = 0x0154; - t.Rcaron = 0x0158; - t.Rcedilla = 0x0156; - t.Rcircle = 0x24c7; - t.Rcommaaccent = 0x0156; - t.Rdblgrave = 0x0210; - t.Rdotaccent = 0x1e58; - t.Rdotbelow = 0x1e5a; - t.Rdotbelowmacron = 0x1e5c; - t.Reharmenian = 0x0550; - t.Rfraktur = 0x211c; - t.Rho = 0x03a1; - t.Ringsmall = 0xf6fc; - t.Rinvertedbreve = 0x0212; - t.Rlinebelow = 0x1e5e; - t.Rmonospace = 0xff32; - t.Rsmall = 0xf772; - t.Rsmallinverted = 0x0281; - t.Rsmallinvertedsuperior = 0x02b6; - t.S = 0x0053; - t.SF010000 = 0x250c; - t.SF020000 = 0x2514; - t.SF030000 = 0x2510; - t.SF040000 = 0x2518; - t.SF050000 = 0x253c; - t.SF060000 = 0x252c; - t.SF070000 = 0x2534; - t.SF080000 = 0x251c; - t.SF090000 = 0x2524; - t.SF100000 = 0x2500; - t.SF110000 = 0x2502; - t.SF190000 = 0x2561; - t.SF200000 = 0x2562; - t.SF210000 = 0x2556; - t.SF220000 = 0x2555; - t.SF230000 = 0x2563; - t.SF240000 = 0x2551; - t.SF250000 = 0x2557; - t.SF260000 = 0x255d; - t.SF270000 = 0x255c; - t.SF280000 = 0x255b; - t.SF360000 = 0x255e; - t.SF370000 = 0x255f; - t.SF380000 = 0x255a; - t.SF390000 = 0x2554; - t.SF400000 = 0x2569; - t.SF410000 = 0x2566; - t.SF420000 = 0x2560; - t.SF430000 = 0x2550; - t.SF440000 = 0x256c; - t.SF450000 = 0x2567; - t.SF460000 = 0x2568; - t.SF470000 = 0x2564; - t.SF480000 = 0x2565; - t.SF490000 = 0x2559; - t.SF500000 = 0x2558; - t.SF510000 = 0x2552; - t.SF520000 = 0x2553; - t.SF530000 = 0x256b; - t.SF540000 = 0x256a; - t.Sacute = 0x015a; - t.Sacutedotaccent = 0x1e64; - t.Sampigreek = 0x03e0; - t.Scaron = 0x0160; - t.Scarondotaccent = 0x1e66; - t.Scaronsmall = 0xf6fd; - t.Scedilla = 0x015e; - t.Schwa = 0x018f; - t.Schwacyrillic = 0x04d8; - t.Schwadieresiscyrillic = 0x04da; - t.Scircle = 0x24c8; - t.Scircumflex = 0x015c; - t.Scommaaccent = 0x0218; - t.Sdotaccent = 0x1e60; - t.Sdotbelow = 0x1e62; - t.Sdotbelowdotaccent = 0x1e68; - t.Seharmenian = 0x054d; - t.Sevenroman = 0x2166; - t.Shaarmenian = 0x0547; - t.Shacyrillic = 0x0428; - t.Shchacyrillic = 0x0429; - t.Sheicoptic = 0x03e2; - t.Shhacyrillic = 0x04ba; - t.Shimacoptic = 0x03ec; - t.Sigma = 0x03a3; - t.Sixroman = 0x2165; - t.Smonospace = 0xff33; - t.Softsigncyrillic = 0x042c; - t.Ssmall = 0xf773; - t.Stigmagreek = 0x03da; - t.T = 0x0054; - t.Tau = 0x03a4; - t.Tbar = 0x0166; - t.Tcaron = 0x0164; - t.Tcedilla = 0x0162; - t.Tcircle = 0x24c9; - t.Tcircumflexbelow = 0x1e70; - t.Tcommaaccent = 0x0162; - t.Tdotaccent = 0x1e6a; - t.Tdotbelow = 0x1e6c; - t.Tecyrillic = 0x0422; - t.Tedescendercyrillic = 0x04ac; - t.Tenroman = 0x2169; - t.Tetsecyrillic = 0x04b4; - t.Theta = 0x0398; - t.Thook = 0x01ac; - t.Thorn = 0x00de; - t.Thornsmall = 0xf7fe; - t.Threeroman = 0x2162; - t.Tildesmall = 0xf6fe; - t.Tiwnarmenian = 0x054f; - t.Tlinebelow = 0x1e6e; - t.Tmonospace = 0xff34; - t.Toarmenian = 0x0539; - t.Tonefive = 0x01bc; - t.Tonesix = 0x0184; - t.Tonetwo = 0x01a7; - t.Tretroflexhook = 0x01ae; - t.Tsecyrillic = 0x0426; - t.Tshecyrillic = 0x040b; - t.Tsmall = 0xf774; - t.Twelveroman = 0x216b; - t.Tworoman = 0x2161; - t.U = 0x0055; - t.Uacute = 0x00da; - t.Uacutesmall = 0xf7fa; - t.Ubreve = 0x016c; - t.Ucaron = 0x01d3; - t.Ucircle = 0x24ca; - t.Ucircumflex = 0x00db; - t.Ucircumflexbelow = 0x1e76; - t.Ucircumflexsmall = 0xf7fb; - t.Ucyrillic = 0x0423; - t.Udblacute = 0x0170; - t.Udblgrave = 0x0214; - t.Udieresis = 0x00dc; - t.Udieresisacute = 0x01d7; - t.Udieresisbelow = 0x1e72; - t.Udieresiscaron = 0x01d9; - t.Udieresiscyrillic = 0x04f0; - t.Udieresisgrave = 0x01db; - t.Udieresismacron = 0x01d5; - t.Udieresissmall = 0xf7fc; - t.Udotbelow = 0x1ee4; - t.Ugrave = 0x00d9; - t.Ugravesmall = 0xf7f9; - t.Uhookabove = 0x1ee6; - t.Uhorn = 0x01af; - t.Uhornacute = 0x1ee8; - t.Uhorndotbelow = 0x1ef0; - t.Uhorngrave = 0x1eea; - t.Uhornhookabove = 0x1eec; - t.Uhorntilde = 0x1eee; - t.Uhungarumlaut = 0x0170; - t.Uhungarumlautcyrillic = 0x04f2; - t.Uinvertedbreve = 0x0216; - t.Ukcyrillic = 0x0478; - t.Umacron = 0x016a; - t.Umacroncyrillic = 0x04ee; - t.Umacrondieresis = 0x1e7a; - t.Umonospace = 0xff35; - t.Uogonek = 0x0172; - t.Upsilon = 0x03a5; - t.Upsilon1 = 0x03d2; - t.Upsilonacutehooksymbolgreek = 0x03d3; - t.Upsilonafrican = 0x01b1; - t.Upsilondieresis = 0x03ab; - t.Upsilondieresishooksymbolgreek = 0x03d4; - t.Upsilonhooksymbol = 0x03d2; - t.Upsilontonos = 0x038e; - t.Uring = 0x016e; - t.Ushortcyrillic = 0x040e; - t.Usmall = 0xf775; - t.Ustraightcyrillic = 0x04ae; - t.Ustraightstrokecyrillic = 0x04b0; - t.Utilde = 0x0168; - t.Utildeacute = 0x1e78; - t.Utildebelow = 0x1e74; - t.V = 0x0056; - t.Vcircle = 0x24cb; - t.Vdotbelow = 0x1e7e; - t.Vecyrillic = 0x0412; - t.Vewarmenian = 0x054e; - t.Vhook = 0x01b2; - t.Vmonospace = 0xff36; - t.Voarmenian = 0x0548; - t.Vsmall = 0xf776; - t.Vtilde = 0x1e7c; - t.W = 0x0057; - t.Wacute = 0x1e82; - t.Wcircle = 0x24cc; - t.Wcircumflex = 0x0174; - t.Wdieresis = 0x1e84; - t.Wdotaccent = 0x1e86; - t.Wdotbelow = 0x1e88; - t.Wgrave = 0x1e80; - t.Wmonospace = 0xff37; - t.Wsmall = 0xf777; - t.X = 0x0058; - t.Xcircle = 0x24cd; - t.Xdieresis = 0x1e8c; - t.Xdotaccent = 0x1e8a; - t.Xeharmenian = 0x053d; - t.Xi = 0x039e; - t.Xmonospace = 0xff38; - t.Xsmall = 0xf778; - t.Y = 0x0059; - t.Yacute = 0x00dd; - t.Yacutesmall = 0xf7fd; - t.Yatcyrillic = 0x0462; - t.Ycircle = 0x24ce; - t.Ycircumflex = 0x0176; - t.Ydieresis = 0x0178; - t.Ydieresissmall = 0xf7ff; - t.Ydotaccent = 0x1e8e; - t.Ydotbelow = 0x1ef4; - t.Yericyrillic = 0x042b; - t.Yerudieresiscyrillic = 0x04f8; - t.Ygrave = 0x1ef2; - t.Yhook = 0x01b3; - t.Yhookabove = 0x1ef6; - t.Yiarmenian = 0x0545; - t.Yicyrillic = 0x0407; - t.Yiwnarmenian = 0x0552; - t.Ymonospace = 0xff39; - t.Ysmall = 0xf779; - t.Ytilde = 0x1ef8; - t.Yusbigcyrillic = 0x046a; - t.Yusbigiotifiedcyrillic = 0x046c; - t.Yuslittlecyrillic = 0x0466; - t.Yuslittleiotifiedcyrillic = 0x0468; - t.Z = 0x005a; - t.Zaarmenian = 0x0536; - t.Zacute = 0x0179; - t.Zcaron = 0x017d; - t.Zcaronsmall = 0xf6ff; - t.Zcircle = 0x24cf; - t.Zcircumflex = 0x1e90; - t.Zdot = 0x017b; - t.Zdotaccent = 0x017b; - t.Zdotbelow = 0x1e92; - t.Zecyrillic = 0x0417; - t.Zedescendercyrillic = 0x0498; - t.Zedieresiscyrillic = 0x04de; - t.Zeta = 0x0396; - t.Zhearmenian = 0x053a; - t.Zhebrevecyrillic = 0x04c1; - t.Zhecyrillic = 0x0416; - t.Zhedescendercyrillic = 0x0496; - t.Zhedieresiscyrillic = 0x04dc; - t.Zlinebelow = 0x1e94; - t.Zmonospace = 0xff3a; - t.Zsmall = 0xf77a; - t.Zstroke = 0x01b5; - t.a = 0x0061; - t.aabengali = 0x0986; - t.aacute = 0x00e1; - t.aadeva = 0x0906; - t.aagujarati = 0x0a86; - t.aagurmukhi = 0x0a06; - t.aamatragurmukhi = 0x0a3e; - t.aarusquare = 0x3303; - t.aavowelsignbengali = 0x09be; - t.aavowelsigndeva = 0x093e; - t.aavowelsigngujarati = 0x0abe; - t.abbreviationmarkarmenian = 0x055f; - t.abbreviationsigndeva = 0x0970; - t.abengali = 0x0985; - t.abopomofo = 0x311a; - t.abreve = 0x0103; - t.abreveacute = 0x1eaf; - t.abrevecyrillic = 0x04d1; - t.abrevedotbelow = 0x1eb7; - t.abrevegrave = 0x1eb1; - t.abrevehookabove = 0x1eb3; - t.abrevetilde = 0x1eb5; - t.acaron = 0x01ce; - t.acircle = 0x24d0; - t.acircumflex = 0x00e2; - t.acircumflexacute = 0x1ea5; - t.acircumflexdotbelow = 0x1ead; - t.acircumflexgrave = 0x1ea7; - t.acircumflexhookabove = 0x1ea9; - t.acircumflextilde = 0x1eab; - t.acute = 0x00b4; - t.acutebelowcmb = 0x0317; - t.acutecmb = 0x0301; - t.acutecomb = 0x0301; - t.acutedeva = 0x0954; - t.acutelowmod = 0x02cf; - t.acutetonecmb = 0x0341; - t.acyrillic = 0x0430; - t.adblgrave = 0x0201; - t.addakgurmukhi = 0x0a71; - t.adeva = 0x0905; - t.adieresis = 0x00e4; - t.adieresiscyrillic = 0x04d3; - t.adieresismacron = 0x01df; - t.adotbelow = 0x1ea1; - t.adotmacron = 0x01e1; - t.ae = 0x00e6; - t.aeacute = 0x01fd; - t.aekorean = 0x3150; - t.aemacron = 0x01e3; - t.afii00208 = 0x2015; - t.afii08941 = 0x20a4; - t.afii10017 = 0x0410; - t.afii10018 = 0x0411; - t.afii10019 = 0x0412; - t.afii10020 = 0x0413; - t.afii10021 = 0x0414; - t.afii10022 = 0x0415; - t.afii10023 = 0x0401; - t.afii10024 = 0x0416; - t.afii10025 = 0x0417; - t.afii10026 = 0x0418; - t.afii10027 = 0x0419; - t.afii10028 = 0x041a; - t.afii10029 = 0x041b; - t.afii10030 = 0x041c; - t.afii10031 = 0x041d; - t.afii10032 = 0x041e; - t.afii10033 = 0x041f; - t.afii10034 = 0x0420; - t.afii10035 = 0x0421; - t.afii10036 = 0x0422; - t.afii10037 = 0x0423; - t.afii10038 = 0x0424; - t.afii10039 = 0x0425; - t.afii10040 = 0x0426; - t.afii10041 = 0x0427; - t.afii10042 = 0x0428; - t.afii10043 = 0x0429; - t.afii10044 = 0x042a; - t.afii10045 = 0x042b; - t.afii10046 = 0x042c; - t.afii10047 = 0x042d; - t.afii10048 = 0x042e; - t.afii10049 = 0x042f; - t.afii10050 = 0x0490; - t.afii10051 = 0x0402; - t.afii10052 = 0x0403; - t.afii10053 = 0x0404; - t.afii10054 = 0x0405; - t.afii10055 = 0x0406; - t.afii10056 = 0x0407; - t.afii10057 = 0x0408; - t.afii10058 = 0x0409; - t.afii10059 = 0x040a; - t.afii10060 = 0x040b; - t.afii10061 = 0x040c; - t.afii10062 = 0x040e; - t.afii10063 = 0xf6c4; - t.afii10064 = 0xf6c5; - t.afii10065 = 0x0430; - t.afii10066 = 0x0431; - t.afii10067 = 0x0432; - t.afii10068 = 0x0433; - t.afii10069 = 0x0434; - t.afii10070 = 0x0435; - t.afii10071 = 0x0451; - t.afii10072 = 0x0436; - t.afii10073 = 0x0437; - t.afii10074 = 0x0438; - t.afii10075 = 0x0439; - t.afii10076 = 0x043a; - t.afii10077 = 0x043b; - t.afii10078 = 0x043c; - t.afii10079 = 0x043d; - t.afii10080 = 0x043e; - t.afii10081 = 0x043f; - t.afii10082 = 0x0440; - t.afii10083 = 0x0441; - t.afii10084 = 0x0442; - t.afii10085 = 0x0443; - t.afii10086 = 0x0444; - t.afii10087 = 0x0445; - t.afii10088 = 0x0446; - t.afii10089 = 0x0447; - t.afii10090 = 0x0448; - t.afii10091 = 0x0449; - t.afii10092 = 0x044a; - t.afii10093 = 0x044b; - t.afii10094 = 0x044c; - t.afii10095 = 0x044d; - t.afii10096 = 0x044e; - t.afii10097 = 0x044f; - t.afii10098 = 0x0491; - t.afii10099 = 0x0452; - t.afii10100 = 0x0453; - t.afii10101 = 0x0454; - t.afii10102 = 0x0455; - t.afii10103 = 0x0456; - t.afii10104 = 0x0457; - t.afii10105 = 0x0458; - t.afii10106 = 0x0459; - t.afii10107 = 0x045a; - t.afii10108 = 0x045b; - t.afii10109 = 0x045c; - t.afii10110 = 0x045e; - t.afii10145 = 0x040f; - t.afii10146 = 0x0462; - t.afii10147 = 0x0472; - t.afii10148 = 0x0474; - t.afii10192 = 0xf6c6; - t.afii10193 = 0x045f; - t.afii10194 = 0x0463; - t.afii10195 = 0x0473; - t.afii10196 = 0x0475; - t.afii10831 = 0xf6c7; - t.afii10832 = 0xf6c8; - t.afii10846 = 0x04d9; - t.afii299 = 0x200e; - t.afii300 = 0x200f; - t.afii301 = 0x200d; - t.afii57381 = 0x066a; - t.afii57388 = 0x060c; - t.afii57392 = 0x0660; - t.afii57393 = 0x0661; - t.afii57394 = 0x0662; - t.afii57395 = 0x0663; - t.afii57396 = 0x0664; - t.afii57397 = 0x0665; - t.afii57398 = 0x0666; - t.afii57399 = 0x0667; - t.afii57400 = 0x0668; - t.afii57401 = 0x0669; - t.afii57403 = 0x061b; - t.afii57407 = 0x061f; - t.afii57409 = 0x0621; - t.afii57410 = 0x0622; - t.afii57411 = 0x0623; - t.afii57412 = 0x0624; - t.afii57413 = 0x0625; - t.afii57414 = 0x0626; - t.afii57415 = 0x0627; - t.afii57416 = 0x0628; - t.afii57417 = 0x0629; - t.afii57418 = 0x062a; - t.afii57419 = 0x062b; - t.afii57420 = 0x062c; - t.afii57421 = 0x062d; - t.afii57422 = 0x062e; - t.afii57423 = 0x062f; - t.afii57424 = 0x0630; - t.afii57425 = 0x0631; - t.afii57426 = 0x0632; - t.afii57427 = 0x0633; - t.afii57428 = 0x0634; - t.afii57429 = 0x0635; - t.afii57430 = 0x0636; - t.afii57431 = 0x0637; - t.afii57432 = 0x0638; - t.afii57433 = 0x0639; - t.afii57434 = 0x063a; - t.afii57440 = 0x0640; - t.afii57441 = 0x0641; - t.afii57442 = 0x0642; - t.afii57443 = 0x0643; - t.afii57444 = 0x0644; - t.afii57445 = 0x0645; - t.afii57446 = 0x0646; - t.afii57448 = 0x0648; - t.afii57449 = 0x0649; - t.afii57450 = 0x064a; - t.afii57451 = 0x064b; - t.afii57452 = 0x064c; - t.afii57453 = 0x064d; - t.afii57454 = 0x064e; - t.afii57455 = 0x064f; - t.afii57456 = 0x0650; - t.afii57457 = 0x0651; - t.afii57458 = 0x0652; - t.afii57470 = 0x0647; - t.afii57505 = 0x06a4; - t.afii57506 = 0x067e; - t.afii57507 = 0x0686; - t.afii57508 = 0x0698; - t.afii57509 = 0x06af; - t.afii57511 = 0x0679; - t.afii57512 = 0x0688; - t.afii57513 = 0x0691; - t.afii57514 = 0x06ba; - t.afii57519 = 0x06d2; - t.afii57534 = 0x06d5; - t.afii57636 = 0x20aa; - t.afii57645 = 0x05be; - t.afii57658 = 0x05c3; - t.afii57664 = 0x05d0; - t.afii57665 = 0x05d1; - t.afii57666 = 0x05d2; - t.afii57667 = 0x05d3; - t.afii57668 = 0x05d4; - t.afii57669 = 0x05d5; - t.afii57670 = 0x05d6; - t.afii57671 = 0x05d7; - t.afii57672 = 0x05d8; - t.afii57673 = 0x05d9; - t.afii57674 = 0x05da; - t.afii57675 = 0x05db; - t.afii57676 = 0x05dc; - t.afii57677 = 0x05dd; - t.afii57678 = 0x05de; - t.afii57679 = 0x05df; - t.afii57680 = 0x05e0; - t.afii57681 = 0x05e1; - t.afii57682 = 0x05e2; - t.afii57683 = 0x05e3; - t.afii57684 = 0x05e4; - t.afii57685 = 0x05e5; - t.afii57686 = 0x05e6; - t.afii57687 = 0x05e7; - t.afii57688 = 0x05e8; - t.afii57689 = 0x05e9; - t.afii57690 = 0x05ea; - t.afii57694 = 0xfb2a; - t.afii57695 = 0xfb2b; - t.afii57700 = 0xfb4b; - t.afii57705 = 0xfb1f; - t.afii57716 = 0x05f0; - t.afii57717 = 0x05f1; - t.afii57718 = 0x05f2; - t.afii57723 = 0xfb35; - t.afii57793 = 0x05b4; - t.afii57794 = 0x05b5; - t.afii57795 = 0x05b6; - t.afii57796 = 0x05bb; - t.afii57797 = 0x05b8; - t.afii57798 = 0x05b7; - t.afii57799 = 0x05b0; - t.afii57800 = 0x05b2; - t.afii57801 = 0x05b1; - t.afii57802 = 0x05b3; - t.afii57803 = 0x05c2; - t.afii57804 = 0x05c1; - t.afii57806 = 0x05b9; - t.afii57807 = 0x05bc; - t.afii57839 = 0x05bd; - t.afii57841 = 0x05bf; - t.afii57842 = 0x05c0; - t.afii57929 = 0x02bc; - t.afii61248 = 0x2105; - t.afii61289 = 0x2113; - t.afii61352 = 0x2116; - t.afii61573 = 0x202c; - t.afii61574 = 0x202d; - t.afii61575 = 0x202e; - t.afii61664 = 0x200c; - t.afii63167 = 0x066d; - t.afii64937 = 0x02bd; - t.agrave = 0x00e0; - t.agujarati = 0x0a85; - t.agurmukhi = 0x0a05; - t.ahiragana = 0x3042; - t.ahookabove = 0x1ea3; - t.aibengali = 0x0990; - t.aibopomofo = 0x311e; - t.aideva = 0x0910; - t.aiecyrillic = 0x04d5; - t.aigujarati = 0x0a90; - t.aigurmukhi = 0x0a10; - t.aimatragurmukhi = 0x0a48; - t.ainarabic = 0x0639; - t.ainfinalarabic = 0xfeca; - t.aininitialarabic = 0xfecb; - t.ainmedialarabic = 0xfecc; - t.ainvertedbreve = 0x0203; - t.aivowelsignbengali = 0x09c8; - t.aivowelsigndeva = 0x0948; - t.aivowelsigngujarati = 0x0ac8; - t.akatakana = 0x30a2; - t.akatakanahalfwidth = 0xff71; - t.akorean = 0x314f; - t.alef = 0x05d0; - t.alefarabic = 0x0627; - t.alefdageshhebrew = 0xfb30; - t.aleffinalarabic = 0xfe8e; - t.alefhamzaabovearabic = 0x0623; - t.alefhamzaabovefinalarabic = 0xfe84; - t.alefhamzabelowarabic = 0x0625; - t.alefhamzabelowfinalarabic = 0xfe88; - t.alefhebrew = 0x05d0; - t.aleflamedhebrew = 0xfb4f; - t.alefmaddaabovearabic = 0x0622; - t.alefmaddaabovefinalarabic = 0xfe82; - t.alefmaksuraarabic = 0x0649; - t.alefmaksurafinalarabic = 0xfef0; - t.alefmaksurainitialarabic = 0xfef3; - t.alefmaksuramedialarabic = 0xfef4; - t.alefpatahhebrew = 0xfb2e; - t.alefqamatshebrew = 0xfb2f; - t.aleph = 0x2135; - t.allequal = 0x224c; - t.alpha = 0x03b1; - t.alphatonos = 0x03ac; - t.amacron = 0x0101; - t.amonospace = 0xff41; - t.ampersand = 0x0026; - t.ampersandmonospace = 0xff06; - t.ampersandsmall = 0xf726; - t.amsquare = 0x33c2; - t.anbopomofo = 0x3122; - t.angbopomofo = 0x3124; - t.angbracketleft = 0x3008; - t.angbracketright = 0x3009; - t.angkhankhuthai = 0x0e5a; - t.angle = 0x2220; - t.anglebracketleft = 0x3008; - t.anglebracketleftvertical = 0xfe3f; - t.anglebracketright = 0x3009; - t.anglebracketrightvertical = 0xfe40; - t.angleleft = 0x2329; - t.angleright = 0x232a; - t.angstrom = 0x212b; - t.anoteleia = 0x0387; - t.anudattadeva = 0x0952; - t.anusvarabengali = 0x0982; - t.anusvaradeva = 0x0902; - t.anusvaragujarati = 0x0a82; - t.aogonek = 0x0105; - t.apaatosquare = 0x3300; - t.aparen = 0x249c; - t.apostrophearmenian = 0x055a; - t.apostrophemod = 0x02bc; - t.apple = 0xf8ff; - t.approaches = 0x2250; - t.approxequal = 0x2248; - t.approxequalorimage = 0x2252; - t.approximatelyequal = 0x2245; - t.araeaekorean = 0x318e; - t.araeakorean = 0x318d; - t.arc = 0x2312; - t.arighthalfring = 0x1e9a; - t.aring = 0x00e5; - t.aringacute = 0x01fb; - t.aringbelow = 0x1e01; - t.arrowboth = 0x2194; - t.arrowdashdown = 0x21e3; - t.arrowdashleft = 0x21e0; - t.arrowdashright = 0x21e2; - t.arrowdashup = 0x21e1; - t.arrowdblboth = 0x21d4; - t.arrowdbldown = 0x21d3; - t.arrowdblleft = 0x21d0; - t.arrowdblright = 0x21d2; - t.arrowdblup = 0x21d1; - t.arrowdown = 0x2193; - t.arrowdownleft = 0x2199; - t.arrowdownright = 0x2198; - t.arrowdownwhite = 0x21e9; - t.arrowheaddownmod = 0x02c5; - t.arrowheadleftmod = 0x02c2; - t.arrowheadrightmod = 0x02c3; - t.arrowheadupmod = 0x02c4; - t.arrowhorizex = 0xf8e7; - t.arrowleft = 0x2190; - t.arrowleftdbl = 0x21d0; - t.arrowleftdblstroke = 0x21cd; - t.arrowleftoverright = 0x21c6; - t.arrowleftwhite = 0x21e6; - t.arrowright = 0x2192; - t.arrowrightdblstroke = 0x21cf; - t.arrowrightheavy = 0x279e; - t.arrowrightoverleft = 0x21c4; - t.arrowrightwhite = 0x21e8; - t.arrowtableft = 0x21e4; - t.arrowtabright = 0x21e5; - t.arrowup = 0x2191; - t.arrowupdn = 0x2195; - t.arrowupdnbse = 0x21a8; - t.arrowupdownbase = 0x21a8; - t.arrowupleft = 0x2196; - t.arrowupleftofdown = 0x21c5; - t.arrowupright = 0x2197; - t.arrowupwhite = 0x21e7; - t.arrowvertex = 0xf8e6; - t.asciicircum = 0x005e; - t.asciicircummonospace = 0xff3e; - t.asciitilde = 0x007e; - t.asciitildemonospace = 0xff5e; - t.ascript = 0x0251; - t.ascriptturned = 0x0252; - t.asmallhiragana = 0x3041; - t.asmallkatakana = 0x30a1; - t.asmallkatakanahalfwidth = 0xff67; - t.asterisk = 0x002a; - t.asteriskaltonearabic = 0x066d; - t.asteriskarabic = 0x066d; - t.asteriskmath = 0x2217; - t.asteriskmonospace = 0xff0a; - t.asterisksmall = 0xfe61; - t.asterism = 0x2042; - t.asuperior = 0xf6e9; - t.asymptoticallyequal = 0x2243; - t.at = 0x0040; - t.atilde = 0x00e3; - t.atmonospace = 0xff20; - t.atsmall = 0xfe6b; - t.aturned = 0x0250; - t.aubengali = 0x0994; - t.aubopomofo = 0x3120; - t.audeva = 0x0914; - t.augujarati = 0x0a94; - t.augurmukhi = 0x0a14; - t.aulengthmarkbengali = 0x09d7; - t.aumatragurmukhi = 0x0a4c; - t.auvowelsignbengali = 0x09cc; - t.auvowelsigndeva = 0x094c; - t.auvowelsigngujarati = 0x0acc; - t.avagrahadeva = 0x093d; - t.aybarmenian = 0x0561; - t.ayin = 0x05e2; - t.ayinaltonehebrew = 0xfb20; - t.ayinhebrew = 0x05e2; - t.b = 0x0062; - t.babengali = 0x09ac; - t.backslash = 0x005c; - t.backslashmonospace = 0xff3c; - t.badeva = 0x092c; - t.bagujarati = 0x0aac; - t.bagurmukhi = 0x0a2c; - t.bahiragana = 0x3070; - t.bahtthai = 0x0e3f; - t.bakatakana = 0x30d0; - t.bar = 0x007c; - t.barmonospace = 0xff5c; - t.bbopomofo = 0x3105; - t.bcircle = 0x24d1; - t.bdotaccent = 0x1e03; - t.bdotbelow = 0x1e05; - t.beamedsixteenthnotes = 0x266c; - t.because = 0x2235; - t.becyrillic = 0x0431; - t.beharabic = 0x0628; - t.behfinalarabic = 0xfe90; - t.behinitialarabic = 0xfe91; - t.behiragana = 0x3079; - t.behmedialarabic = 0xfe92; - t.behmeeminitialarabic = 0xfc9f; - t.behmeemisolatedarabic = 0xfc08; - t.behnoonfinalarabic = 0xfc6d; - t.bekatakana = 0x30d9; - t.benarmenian = 0x0562; - t.bet = 0x05d1; - t.beta = 0x03b2; - t.betasymbolgreek = 0x03d0; - t.betdagesh = 0xfb31; - t.betdageshhebrew = 0xfb31; - t.bethebrew = 0x05d1; - t.betrafehebrew = 0xfb4c; - t.bhabengali = 0x09ad; - t.bhadeva = 0x092d; - t.bhagujarati = 0x0aad; - t.bhagurmukhi = 0x0a2d; - t.bhook = 0x0253; - t.bihiragana = 0x3073; - t.bikatakana = 0x30d3; - t.bilabialclick = 0x0298; - t.bindigurmukhi = 0x0a02; - t.birusquare = 0x3331; - t.blackcircle = 0x25cf; - t.blackdiamond = 0x25c6; - t.blackdownpointingtriangle = 0x25bc; - t.blackleftpointingpointer = 0x25c4; - t.blackleftpointingtriangle = 0x25c0; - t.blacklenticularbracketleft = 0x3010; - t.blacklenticularbracketleftvertical = 0xfe3b; - t.blacklenticularbracketright = 0x3011; - t.blacklenticularbracketrightvertical = 0xfe3c; - t.blacklowerlefttriangle = 0x25e3; - t.blacklowerrighttriangle = 0x25e2; - t.blackrectangle = 0x25ac; - t.blackrightpointingpointer = 0x25ba; - t.blackrightpointingtriangle = 0x25b6; - t.blacksmallsquare = 0x25aa; - t.blacksmilingface = 0x263b; - t.blacksquare = 0x25a0; - t.blackstar = 0x2605; - t.blackupperlefttriangle = 0x25e4; - t.blackupperrighttriangle = 0x25e5; - t.blackuppointingsmalltriangle = 0x25b4; - t.blackuppointingtriangle = 0x25b2; - t.blank = 0x2423; - t.blinebelow = 0x1e07; - t.block = 0x2588; - t.bmonospace = 0xff42; - t.bobaimaithai = 0x0e1a; - t.bohiragana = 0x307c; - t.bokatakana = 0x30dc; - t.bparen = 0x249d; - t.bqsquare = 0x33c3; - t.braceex = 0xf8f4; - t.braceleft = 0x007b; - t.braceleftbt = 0xf8f3; - t.braceleftmid = 0xf8f2; - t.braceleftmonospace = 0xff5b; - t.braceleftsmall = 0xfe5b; - t.bracelefttp = 0xf8f1; - t.braceleftvertical = 0xfe37; - t.braceright = 0x007d; - t.bracerightbt = 0xf8fe; - t.bracerightmid = 0xf8fd; - t.bracerightmonospace = 0xff5d; - t.bracerightsmall = 0xfe5c; - t.bracerighttp = 0xf8fc; - t.bracerightvertical = 0xfe38; - t.bracketleft = 0x005b; - t.bracketleftbt = 0xf8f0; - t.bracketleftex = 0xf8ef; - t.bracketleftmonospace = 0xff3b; - t.bracketlefttp = 0xf8ee; - t.bracketright = 0x005d; - t.bracketrightbt = 0xf8fb; - t.bracketrightex = 0xf8fa; - t.bracketrightmonospace = 0xff3d; - t.bracketrighttp = 0xf8f9; - t.breve = 0x02d8; - t.brevebelowcmb = 0x032e; - t.brevecmb = 0x0306; - t.breveinvertedbelowcmb = 0x032f; - t.breveinvertedcmb = 0x0311; - t.breveinverteddoublecmb = 0x0361; - t.bridgebelowcmb = 0x032a; - t.bridgeinvertedbelowcmb = 0x033a; - t.brokenbar = 0x00a6; - t.bstroke = 0x0180; - t.bsuperior = 0xf6ea; - t.btopbar = 0x0183; - t.buhiragana = 0x3076; - t.bukatakana = 0x30d6; - t.bullet = 0x2022; - t.bulletinverse = 0x25d8; - t.bulletoperator = 0x2219; - t.bullseye = 0x25ce; - t.c = 0x0063; - t.caarmenian = 0x056e; - t.cabengali = 0x099a; - t.cacute = 0x0107; - t.cadeva = 0x091a; - t.cagujarati = 0x0a9a; - t.cagurmukhi = 0x0a1a; - t.calsquare = 0x3388; - t.candrabindubengali = 0x0981; - t.candrabinducmb = 0x0310; - t.candrabindudeva = 0x0901; - t.candrabindugujarati = 0x0a81; - t.capslock = 0x21ea; - t.careof = 0x2105; - t.caron = 0x02c7; - t.caronbelowcmb = 0x032c; - t.caroncmb = 0x030c; - t.carriagereturn = 0x21b5; - t.cbopomofo = 0x3118; - t.ccaron = 0x010d; - t.ccedilla = 0x00e7; - t.ccedillaacute = 0x1e09; - t.ccircle = 0x24d2; - t.ccircumflex = 0x0109; - t.ccurl = 0x0255; - t.cdot = 0x010b; - t.cdotaccent = 0x010b; - t.cdsquare = 0x33c5; - t.cedilla = 0x00b8; - t.cedillacmb = 0x0327; - t.cent = 0x00a2; - t.centigrade = 0x2103; - t.centinferior = 0xf6df; - t.centmonospace = 0xffe0; - t.centoldstyle = 0xf7a2; - t.centsuperior = 0xf6e0; - t.chaarmenian = 0x0579; - t.chabengali = 0x099b; - t.chadeva = 0x091b; - t.chagujarati = 0x0a9b; - t.chagurmukhi = 0x0a1b; - t.chbopomofo = 0x3114; - t.cheabkhasiancyrillic = 0x04bd; - t.checkmark = 0x2713; - t.checyrillic = 0x0447; - t.chedescenderabkhasiancyrillic = 0x04bf; - t.chedescendercyrillic = 0x04b7; - t.chedieresiscyrillic = 0x04f5; - t.cheharmenian = 0x0573; - t.chekhakassiancyrillic = 0x04cc; - t.cheverticalstrokecyrillic = 0x04b9; - t.chi = 0x03c7; - t.chieuchacirclekorean = 0x3277; - t.chieuchaparenkorean = 0x3217; - t.chieuchcirclekorean = 0x3269; - t.chieuchkorean = 0x314a; - t.chieuchparenkorean = 0x3209; - t.chochangthai = 0x0e0a; - t.chochanthai = 0x0e08; - t.chochingthai = 0x0e09; - t.chochoethai = 0x0e0c; - t.chook = 0x0188; - t.cieucacirclekorean = 0x3276; - t.cieucaparenkorean = 0x3216; - t.cieuccirclekorean = 0x3268; - t.cieuckorean = 0x3148; - t.cieucparenkorean = 0x3208; - t.cieucuparenkorean = 0x321c; - t.circle = 0x25cb; - t.circlecopyrt = 0x00a9; - t.circlemultiply = 0x2297; - t.circleot = 0x2299; - t.circleplus = 0x2295; - t.circlepostalmark = 0x3036; - t.circlewithlefthalfblack = 0x25d0; - t.circlewithrighthalfblack = 0x25d1; - t.circumflex = 0x02c6; - t.circumflexbelowcmb = 0x032d; - t.circumflexcmb = 0x0302; - t.clear = 0x2327; - t.clickalveolar = 0x01c2; - t.clickdental = 0x01c0; - t.clicklateral = 0x01c1; - t.clickretroflex = 0x01c3; - t.club = 0x2663; - t.clubsuitblack = 0x2663; - t.clubsuitwhite = 0x2667; - t.cmcubedsquare = 0x33a4; - t.cmonospace = 0xff43; - t.cmsquaredsquare = 0x33a0; - t.coarmenian = 0x0581; - t.colon = 0x003a; - t.colonmonetary = 0x20a1; - t.colonmonospace = 0xff1a; - t.colonsign = 0x20a1; - t.colonsmall = 0xfe55; - t.colontriangularhalfmod = 0x02d1; - t.colontriangularmod = 0x02d0; - t.comma = 0x002c; - t.commaabovecmb = 0x0313; - t.commaaboverightcmb = 0x0315; - t.commaaccent = 0xf6c3; - t.commaarabic = 0x060c; - t.commaarmenian = 0x055d; - t.commainferior = 0xf6e1; - t.commamonospace = 0xff0c; - t.commareversedabovecmb = 0x0314; - t.commareversedmod = 0x02bd; - t.commasmall = 0xfe50; - t.commasuperior = 0xf6e2; - t.commaturnedabovecmb = 0x0312; - t.commaturnedmod = 0x02bb; - t.compass = 0x263c; - t.congruent = 0x2245; - t.contourintegral = 0x222e; - t.control = 0x2303; - t.controlACK = 0x0006; - t.controlBEL = 0x0007; - t.controlBS = 0x0008; - t.controlCAN = 0x0018; - t.controlCR = 0x000d; - t.controlDC1 = 0x0011; - t.controlDC2 = 0x0012; - t.controlDC3 = 0x0013; - t.controlDC4 = 0x0014; - t.controlDEL = 0x007f; - t.controlDLE = 0x0010; - t.controlEM = 0x0019; - t.controlENQ = 0x0005; - t.controlEOT = 0x0004; - t.controlESC = 0x001b; - t.controlETB = 0x0017; - t.controlETX = 0x0003; - t.controlFF = 0x000c; - t.controlFS = 0x001c; - t.controlGS = 0x001d; - t.controlHT = 0x0009; - t.controlLF = 0x000a; - t.controlNAK = 0x0015; - t.controlNULL = 0x0000; - t.controlRS = 0x001e; - t.controlSI = 0x000f; - t.controlSO = 0x000e; - t.controlSOT = 0x0002; - t.controlSTX = 0x0001; - t.controlSUB = 0x001a; - t.controlSYN = 0x0016; - t.controlUS = 0x001f; - t.controlVT = 0x000b; - t.copyright = 0x00a9; - t.copyrightsans = 0xf8e9; - t.copyrightserif = 0xf6d9; - t.cornerbracketleft = 0x300c; - t.cornerbracketlefthalfwidth = 0xff62; - t.cornerbracketleftvertical = 0xfe41; - t.cornerbracketright = 0x300d; - t.cornerbracketrighthalfwidth = 0xff63; - t.cornerbracketrightvertical = 0xfe42; - t.corporationsquare = 0x337f; - t.cosquare = 0x33c7; - t.coverkgsquare = 0x33c6; - t.cparen = 0x249e; - t.cruzeiro = 0x20a2; - t.cstretched = 0x0297; - t.curlyand = 0x22cf; - t.curlyor = 0x22ce; - t.currency = 0x00a4; - t.cyrBreve = 0xf6d1; - t.cyrFlex = 0xf6d2; - t.cyrbreve = 0xf6d4; - t.cyrflex = 0xf6d5; - t.d = 0x0064; - t.daarmenian = 0x0564; - t.dabengali = 0x09a6; - t.dadarabic = 0x0636; - t.dadeva = 0x0926; - t.dadfinalarabic = 0xfebe; - t.dadinitialarabic = 0xfebf; - t.dadmedialarabic = 0xfec0; - t.dagesh = 0x05bc; - t.dageshhebrew = 0x05bc; - t.dagger = 0x2020; - t.daggerdbl = 0x2021; - t.dagujarati = 0x0aa6; - t.dagurmukhi = 0x0a26; - t.dahiragana = 0x3060; - t.dakatakana = 0x30c0; - t.dalarabic = 0x062f; - t.dalet = 0x05d3; - t.daletdagesh = 0xfb33; - t.daletdageshhebrew = 0xfb33; - t.dalethebrew = 0x05d3; - t.dalfinalarabic = 0xfeaa; - t.dammaarabic = 0x064f; - t.dammalowarabic = 0x064f; - t.dammatanaltonearabic = 0x064c; - t.dammatanarabic = 0x064c; - t.danda = 0x0964; - t.dargahebrew = 0x05a7; - t.dargalefthebrew = 0x05a7; - t.dasiapneumatacyrilliccmb = 0x0485; - t.dblGrave = 0xf6d3; - t.dblanglebracketleft = 0x300a; - t.dblanglebracketleftvertical = 0xfe3d; - t.dblanglebracketright = 0x300b; - t.dblanglebracketrightvertical = 0xfe3e; - t.dblarchinvertedbelowcmb = 0x032b; - t.dblarrowleft = 0x21d4; - t.dblarrowright = 0x21d2; - t.dbldanda = 0x0965; - t.dblgrave = 0xf6d6; - t.dblgravecmb = 0x030f; - t.dblintegral = 0x222c; - t.dbllowline = 0x2017; - t.dbllowlinecmb = 0x0333; - t.dbloverlinecmb = 0x033f; - t.dblprimemod = 0x02ba; - t.dblverticalbar = 0x2016; - t.dblverticallineabovecmb = 0x030e; - t.dbopomofo = 0x3109; - t.dbsquare = 0x33c8; - t.dcaron = 0x010f; - t.dcedilla = 0x1e11; - t.dcircle = 0x24d3; - t.dcircumflexbelow = 0x1e13; - t.dcroat = 0x0111; - t.ddabengali = 0x09a1; - t.ddadeva = 0x0921; - t.ddagujarati = 0x0aa1; - t.ddagurmukhi = 0x0a21; - t.ddalarabic = 0x0688; - t.ddalfinalarabic = 0xfb89; - t.dddhadeva = 0x095c; - t.ddhabengali = 0x09a2; - t.ddhadeva = 0x0922; - t.ddhagujarati = 0x0aa2; - t.ddhagurmukhi = 0x0a22; - t.ddotaccent = 0x1e0b; - t.ddotbelow = 0x1e0d; - t.decimalseparatorarabic = 0x066b; - t.decimalseparatorpersian = 0x066b; - t.decyrillic = 0x0434; - t.degree = 0x00b0; - t.dehihebrew = 0x05ad; - t.dehiragana = 0x3067; - t.deicoptic = 0x03ef; - t.dekatakana = 0x30c7; - t.deleteleft = 0x232b; - t.deleteright = 0x2326; - t.delta = 0x03b4; - t.deltaturned = 0x018d; - t.denominatorminusonenumeratorbengali = 0x09f8; - t.dezh = 0x02a4; - t.dhabengali = 0x09a7; - t.dhadeva = 0x0927; - t.dhagujarati = 0x0aa7; - t.dhagurmukhi = 0x0a27; - t.dhook = 0x0257; - t.dialytikatonos = 0x0385; - t.dialytikatonoscmb = 0x0344; - t.diamond = 0x2666; - t.diamondsuitwhite = 0x2662; - t.dieresis = 0x00a8; - t.dieresisacute = 0xf6d7; - t.dieresisbelowcmb = 0x0324; - t.dieresiscmb = 0x0308; - t.dieresisgrave = 0xf6d8; - t.dieresistonos = 0x0385; - t.dihiragana = 0x3062; - t.dikatakana = 0x30c2; - t.dittomark = 0x3003; - t.divide = 0x00f7; - t.divides = 0x2223; - t.divisionslash = 0x2215; - t.djecyrillic = 0x0452; - t.dkshade = 0x2593; - t.dlinebelow = 0x1e0f; - t.dlsquare = 0x3397; - t.dmacron = 0x0111; - t.dmonospace = 0xff44; - t.dnblock = 0x2584; - t.dochadathai = 0x0e0e; - t.dodekthai = 0x0e14; - t.dohiragana = 0x3069; - t.dokatakana = 0x30c9; - t.dollar = 0x0024; - t.dollarinferior = 0xf6e3; - t.dollarmonospace = 0xff04; - t.dollaroldstyle = 0xf724; - t.dollarsmall = 0xfe69; - t.dollarsuperior = 0xf6e4; - t.dong = 0x20ab; - t.dorusquare = 0x3326; - t.dotaccent = 0x02d9; - t.dotaccentcmb = 0x0307; - t.dotbelowcmb = 0x0323; - t.dotbelowcomb = 0x0323; - t.dotkatakana = 0x30fb; - t.dotlessi = 0x0131; - t.dotlessj = 0xf6be; - t.dotlessjstrokehook = 0x0284; - t.dotmath = 0x22c5; - t.dottedcircle = 0x25cc; - t.doubleyodpatah = 0xfb1f; - t.doubleyodpatahhebrew = 0xfb1f; - t.downtackbelowcmb = 0x031e; - t.downtackmod = 0x02d5; - t.dparen = 0x249f; - t.dsuperior = 0xf6eb; - t.dtail = 0x0256; - t.dtopbar = 0x018c; - t.duhiragana = 0x3065; - t.dukatakana = 0x30c5; - t.dz = 0x01f3; - t.dzaltone = 0x02a3; - t.dzcaron = 0x01c6; - t.dzcurl = 0x02a5; - t.dzeabkhasiancyrillic = 0x04e1; - t.dzecyrillic = 0x0455; - t.dzhecyrillic = 0x045f; - t.e = 0x0065; - t.eacute = 0x00e9; - t.earth = 0x2641; - t.ebengali = 0x098f; - t.ebopomofo = 0x311c; - t.ebreve = 0x0115; - t.ecandradeva = 0x090d; - t.ecandragujarati = 0x0a8d; - t.ecandravowelsigndeva = 0x0945; - t.ecandravowelsigngujarati = 0x0ac5; - t.ecaron = 0x011b; - t.ecedillabreve = 0x1e1d; - t.echarmenian = 0x0565; - t.echyiwnarmenian = 0x0587; - t.ecircle = 0x24d4; - t.ecircumflex = 0x00ea; - t.ecircumflexacute = 0x1ebf; - t.ecircumflexbelow = 0x1e19; - t.ecircumflexdotbelow = 0x1ec7; - t.ecircumflexgrave = 0x1ec1; - t.ecircumflexhookabove = 0x1ec3; - t.ecircumflextilde = 0x1ec5; - t.ecyrillic = 0x0454; - t.edblgrave = 0x0205; - t.edeva = 0x090f; - t.edieresis = 0x00eb; - t.edot = 0x0117; - t.edotaccent = 0x0117; - t.edotbelow = 0x1eb9; - t.eegurmukhi = 0x0a0f; - t.eematragurmukhi = 0x0a47; - t.efcyrillic = 0x0444; - t.egrave = 0x00e8; - t.egujarati = 0x0a8f; - t.eharmenian = 0x0567; - t.ehbopomofo = 0x311d; - t.ehiragana = 0x3048; - t.ehookabove = 0x1ebb; - t.eibopomofo = 0x311f; - t.eight = 0x0038; - t.eightarabic = 0x0668; - t.eightbengali = 0x09ee; - t.eightcircle = 0x2467; - t.eightcircleinversesansserif = 0x2791; - t.eightdeva = 0x096e; - t.eighteencircle = 0x2471; - t.eighteenparen = 0x2485; - t.eighteenperiod = 0x2499; - t.eightgujarati = 0x0aee; - t.eightgurmukhi = 0x0a6e; - t.eighthackarabic = 0x0668; - t.eighthangzhou = 0x3028; - t.eighthnotebeamed = 0x266b; - t.eightideographicparen = 0x3227; - t.eightinferior = 0x2088; - t.eightmonospace = 0xff18; - t.eightoldstyle = 0xf738; - t.eightparen = 0x247b; - t.eightperiod = 0x248f; - t.eightpersian = 0x06f8; - t.eightroman = 0x2177; - t.eightsuperior = 0x2078; - t.eightthai = 0x0e58; - t.einvertedbreve = 0x0207; - t.eiotifiedcyrillic = 0x0465; - t.ekatakana = 0x30a8; - t.ekatakanahalfwidth = 0xff74; - t.ekonkargurmukhi = 0x0a74; - t.ekorean = 0x3154; - t.elcyrillic = 0x043b; - t.element = 0x2208; - t.elevencircle = 0x246a; - t.elevenparen = 0x247e; - t.elevenperiod = 0x2492; - t.elevenroman = 0x217a; - t.ellipsis = 0x2026; - t.ellipsisvertical = 0x22ee; - t.emacron = 0x0113; - t.emacronacute = 0x1e17; - t.emacrongrave = 0x1e15; - t.emcyrillic = 0x043c; - t.emdash = 0x2014; - t.emdashvertical = 0xfe31; - t.emonospace = 0xff45; - t.emphasismarkarmenian = 0x055b; - t.emptyset = 0x2205; - t.enbopomofo = 0x3123; - t.encyrillic = 0x043d; - t.endash = 0x2013; - t.endashvertical = 0xfe32; - t.endescendercyrillic = 0x04a3; - t.eng = 0x014b; - t.engbopomofo = 0x3125; - t.enghecyrillic = 0x04a5; - t.enhookcyrillic = 0x04c8; - t.enspace = 0x2002; - t.eogonek = 0x0119; - t.eokorean = 0x3153; - t.eopen = 0x025b; - t.eopenclosed = 0x029a; - t.eopenreversed = 0x025c; - t.eopenreversedclosed = 0x025e; - t.eopenreversedhook = 0x025d; - t.eparen = 0x24a0; - t.epsilon = 0x03b5; - t.epsilontonos = 0x03ad; - t.equal = 0x003d; - t.equalmonospace = 0xff1d; - t.equalsmall = 0xfe66; - t.equalsuperior = 0x207c; - t.equivalence = 0x2261; - t.erbopomofo = 0x3126; - t.ercyrillic = 0x0440; - t.ereversed = 0x0258; - t.ereversedcyrillic = 0x044d; - t.escyrillic = 0x0441; - t.esdescendercyrillic = 0x04ab; - t.esh = 0x0283; - t.eshcurl = 0x0286; - t.eshortdeva = 0x090e; - t.eshortvowelsigndeva = 0x0946; - t.eshreversedloop = 0x01aa; - t.eshsquatreversed = 0x0285; - t.esmallhiragana = 0x3047; - t.esmallkatakana = 0x30a7; - t.esmallkatakanahalfwidth = 0xff6a; - t.estimated = 0x212e; - t.esuperior = 0xf6ec; - t.eta = 0x03b7; - t.etarmenian = 0x0568; - t.etatonos = 0x03ae; - t.eth = 0x00f0; - t.etilde = 0x1ebd; - t.etildebelow = 0x1e1b; - t.etnahtafoukhhebrew = 0x0591; - t.etnahtafoukhlefthebrew = 0x0591; - t.etnahtahebrew = 0x0591; - t.etnahtalefthebrew = 0x0591; - t.eturned = 0x01dd; - t.eukorean = 0x3161; - t.euro = 0x20ac; - t.evowelsignbengali = 0x09c7; - t.evowelsigndeva = 0x0947; - t.evowelsigngujarati = 0x0ac7; - t.exclam = 0x0021; - t.exclamarmenian = 0x055c; - t.exclamdbl = 0x203c; - t.exclamdown = 0x00a1; - t.exclamdownsmall = 0xf7a1; - t.exclammonospace = 0xff01; - t.exclamsmall = 0xf721; - t.existential = 0x2203; - t.ezh = 0x0292; - t.ezhcaron = 0x01ef; - t.ezhcurl = 0x0293; - t.ezhreversed = 0x01b9; - t.ezhtail = 0x01ba; - t.f = 0x0066; - t.fadeva = 0x095e; - t.fagurmukhi = 0x0a5e; - t.fahrenheit = 0x2109; - t.fathaarabic = 0x064e; - t.fathalowarabic = 0x064e; - t.fathatanarabic = 0x064b; - t.fbopomofo = 0x3108; - t.fcircle = 0x24d5; - t.fdotaccent = 0x1e1f; - t.feharabic = 0x0641; - t.feharmenian = 0x0586; - t.fehfinalarabic = 0xfed2; - t.fehinitialarabic = 0xfed3; - t.fehmedialarabic = 0xfed4; - t.feicoptic = 0x03e5; - t.female = 0x2640; - t.ff = 0xfb00; - t.f_f = 0xfb00; - t.ffi = 0xfb03; - t.f_f_i = 0xfb03; - t.ffl = 0xfb04; - t.f_f_l = 0xfb04; - t.fi = 0xfb01; - t.f_i = 0xfb01; - t.fifteencircle = 0x246e; - t.fifteenparen = 0x2482; - t.fifteenperiod = 0x2496; - t.figuredash = 0x2012; - t.filledbox = 0x25a0; - t.filledrect = 0x25ac; - t.finalkaf = 0x05da; - t.finalkafdagesh = 0xfb3a; - t.finalkafdageshhebrew = 0xfb3a; - t.finalkafhebrew = 0x05da; - t.finalmem = 0x05dd; - t.finalmemhebrew = 0x05dd; - t.finalnun = 0x05df; - t.finalnunhebrew = 0x05df; - t.finalpe = 0x05e3; - t.finalpehebrew = 0x05e3; - t.finaltsadi = 0x05e5; - t.finaltsadihebrew = 0x05e5; - t.firsttonechinese = 0x02c9; - t.fisheye = 0x25c9; - t.fitacyrillic = 0x0473; - t.five = 0x0035; - t.fivearabic = 0x0665; - t.fivebengali = 0x09eb; - t.fivecircle = 0x2464; - t.fivecircleinversesansserif = 0x278e; - t.fivedeva = 0x096b; - t.fiveeighths = 0x215d; - t.fivegujarati = 0x0aeb; - t.fivegurmukhi = 0x0a6b; - t.fivehackarabic = 0x0665; - t.fivehangzhou = 0x3025; - t.fiveideographicparen = 0x3224; - t.fiveinferior = 0x2085; - t.fivemonospace = 0xff15; - t.fiveoldstyle = 0xf735; - t.fiveparen = 0x2478; - t.fiveperiod = 0x248c; - t.fivepersian = 0x06f5; - t.fiveroman = 0x2174; - t.fivesuperior = 0x2075; - t.fivethai = 0x0e55; - t.fl = 0xfb02; - t.f_l = 0xfb02; - t.florin = 0x0192; - t.fmonospace = 0xff46; - t.fmsquare = 0x3399; - t.fofanthai = 0x0e1f; - t.fofathai = 0x0e1d; - t.fongmanthai = 0x0e4f; - t.forall = 0x2200; - t.four = 0x0034; - t.fourarabic = 0x0664; - t.fourbengali = 0x09ea; - t.fourcircle = 0x2463; - t.fourcircleinversesansserif = 0x278d; - t.fourdeva = 0x096a; - t.fourgujarati = 0x0aea; - t.fourgurmukhi = 0x0a6a; - t.fourhackarabic = 0x0664; - t.fourhangzhou = 0x3024; - t.fourideographicparen = 0x3223; - t.fourinferior = 0x2084; - t.fourmonospace = 0xff14; - t.fournumeratorbengali = 0x09f7; - t.fouroldstyle = 0xf734; - t.fourparen = 0x2477; - t.fourperiod = 0x248b; - t.fourpersian = 0x06f4; - t.fourroman = 0x2173; - t.foursuperior = 0x2074; - t.fourteencircle = 0x246d; - t.fourteenparen = 0x2481; - t.fourteenperiod = 0x2495; - t.fourthai = 0x0e54; - t.fourthtonechinese = 0x02cb; - t.fparen = 0x24a1; - t.fraction = 0x2044; - t.franc = 0x20a3; - t.g = 0x0067; - t.gabengali = 0x0997; - t.gacute = 0x01f5; - t.gadeva = 0x0917; - t.gafarabic = 0x06af; - t.gaffinalarabic = 0xfb93; - t.gafinitialarabic = 0xfb94; - t.gafmedialarabic = 0xfb95; - t.gagujarati = 0x0a97; - t.gagurmukhi = 0x0a17; - t.gahiragana = 0x304c; - t.gakatakana = 0x30ac; - t.gamma = 0x03b3; - t.gammalatinsmall = 0x0263; - t.gammasuperior = 0x02e0; - t.gangiacoptic = 0x03eb; - t.gbopomofo = 0x310d; - t.gbreve = 0x011f; - t.gcaron = 0x01e7; - t.gcedilla = 0x0123; - t.gcircle = 0x24d6; - t.gcircumflex = 0x011d; - t.gcommaaccent = 0x0123; - t.gdot = 0x0121; - t.gdotaccent = 0x0121; - t.gecyrillic = 0x0433; - t.gehiragana = 0x3052; - t.gekatakana = 0x30b2; - t.geometricallyequal = 0x2251; - t.gereshaccenthebrew = 0x059c; - t.gereshhebrew = 0x05f3; - t.gereshmuqdamhebrew = 0x059d; - t.germandbls = 0x00df; - t.gershayimaccenthebrew = 0x059e; - t.gershayimhebrew = 0x05f4; - t.getamark = 0x3013; - t.ghabengali = 0x0998; - t.ghadarmenian = 0x0572; - t.ghadeva = 0x0918; - t.ghagujarati = 0x0a98; - t.ghagurmukhi = 0x0a18; - t.ghainarabic = 0x063a; - t.ghainfinalarabic = 0xfece; - t.ghaininitialarabic = 0xfecf; - t.ghainmedialarabic = 0xfed0; - t.ghemiddlehookcyrillic = 0x0495; - t.ghestrokecyrillic = 0x0493; - t.gheupturncyrillic = 0x0491; - t.ghhadeva = 0x095a; - t.ghhagurmukhi = 0x0a5a; - t.ghook = 0x0260; - t.ghzsquare = 0x3393; - t.gihiragana = 0x304e; - t.gikatakana = 0x30ae; - t.gimarmenian = 0x0563; - t.gimel = 0x05d2; - t.gimeldagesh = 0xfb32; - t.gimeldageshhebrew = 0xfb32; - t.gimelhebrew = 0x05d2; - t.gjecyrillic = 0x0453; - t.glottalinvertedstroke = 0x01be; - t.glottalstop = 0x0294; - t.glottalstopinverted = 0x0296; - t.glottalstopmod = 0x02c0; - t.glottalstopreversed = 0x0295; - t.glottalstopreversedmod = 0x02c1; - t.glottalstopreversedsuperior = 0x02e4; - t.glottalstopstroke = 0x02a1; - t.glottalstopstrokereversed = 0x02a2; - t.gmacron = 0x1e21; - t.gmonospace = 0xff47; - t.gohiragana = 0x3054; - t.gokatakana = 0x30b4; - t.gparen = 0x24a2; - t.gpasquare = 0x33ac; - t.gradient = 0x2207; - t.grave = 0x0060; - t.gravebelowcmb = 0x0316; - t.gravecmb = 0x0300; - t.gravecomb = 0x0300; - t.gravedeva = 0x0953; - t.gravelowmod = 0x02ce; - t.gravemonospace = 0xff40; - t.gravetonecmb = 0x0340; - t.greater = 0x003e; - t.greaterequal = 0x2265; - t.greaterequalorless = 0x22db; - t.greatermonospace = 0xff1e; - t.greaterorequivalent = 0x2273; - t.greaterorless = 0x2277; - t.greateroverequal = 0x2267; - t.greatersmall = 0xfe65; - t.gscript = 0x0261; - t.gstroke = 0x01e5; - t.guhiragana = 0x3050; - t.guillemotleft = 0x00ab; - t.guillemotright = 0x00bb; - t.guilsinglleft = 0x2039; - t.guilsinglright = 0x203a; - t.gukatakana = 0x30b0; - t.guramusquare = 0x3318; - t.gysquare = 0x33c9; - t.h = 0x0068; - t.haabkhasiancyrillic = 0x04a9; - t.haaltonearabic = 0x06c1; - t.habengali = 0x09b9; - t.hadescendercyrillic = 0x04b3; - t.hadeva = 0x0939; - t.hagujarati = 0x0ab9; - t.hagurmukhi = 0x0a39; - t.haharabic = 0x062d; - t.hahfinalarabic = 0xfea2; - t.hahinitialarabic = 0xfea3; - t.hahiragana = 0x306f; - t.hahmedialarabic = 0xfea4; - t.haitusquare = 0x332a; - t.hakatakana = 0x30cf; - t.hakatakanahalfwidth = 0xff8a; - t.halantgurmukhi = 0x0a4d; - t.hamzaarabic = 0x0621; - t.hamzalowarabic = 0x0621; - t.hangulfiller = 0x3164; - t.hardsigncyrillic = 0x044a; - t.harpoonleftbarbup = 0x21bc; - t.harpoonrightbarbup = 0x21c0; - t.hasquare = 0x33ca; - t.hatafpatah = 0x05b2; - t.hatafpatah16 = 0x05b2; - t.hatafpatah23 = 0x05b2; - t.hatafpatah2f = 0x05b2; - t.hatafpatahhebrew = 0x05b2; - t.hatafpatahnarrowhebrew = 0x05b2; - t.hatafpatahquarterhebrew = 0x05b2; - t.hatafpatahwidehebrew = 0x05b2; - t.hatafqamats = 0x05b3; - t.hatafqamats1b = 0x05b3; - t.hatafqamats28 = 0x05b3; - t.hatafqamats34 = 0x05b3; - t.hatafqamatshebrew = 0x05b3; - t.hatafqamatsnarrowhebrew = 0x05b3; - t.hatafqamatsquarterhebrew = 0x05b3; - t.hatafqamatswidehebrew = 0x05b3; - t.hatafsegol = 0x05b1; - t.hatafsegol17 = 0x05b1; - t.hatafsegol24 = 0x05b1; - t.hatafsegol30 = 0x05b1; - t.hatafsegolhebrew = 0x05b1; - t.hatafsegolnarrowhebrew = 0x05b1; - t.hatafsegolquarterhebrew = 0x05b1; - t.hatafsegolwidehebrew = 0x05b1; - t.hbar = 0x0127; - t.hbopomofo = 0x310f; - t.hbrevebelow = 0x1e2b; - t.hcedilla = 0x1e29; - t.hcircle = 0x24d7; - t.hcircumflex = 0x0125; - t.hdieresis = 0x1e27; - t.hdotaccent = 0x1e23; - t.hdotbelow = 0x1e25; - t.he = 0x05d4; - t.heart = 0x2665; - t.heartsuitblack = 0x2665; - t.heartsuitwhite = 0x2661; - t.hedagesh = 0xfb34; - t.hedageshhebrew = 0xfb34; - t.hehaltonearabic = 0x06c1; - t.heharabic = 0x0647; - t.hehebrew = 0x05d4; - t.hehfinalaltonearabic = 0xfba7; - t.hehfinalalttwoarabic = 0xfeea; - t.hehfinalarabic = 0xfeea; - t.hehhamzaabovefinalarabic = 0xfba5; - t.hehhamzaaboveisolatedarabic = 0xfba4; - t.hehinitialaltonearabic = 0xfba8; - t.hehinitialarabic = 0xfeeb; - t.hehiragana = 0x3078; - t.hehmedialaltonearabic = 0xfba9; - t.hehmedialarabic = 0xfeec; - t.heiseierasquare = 0x337b; - t.hekatakana = 0x30d8; - t.hekatakanahalfwidth = 0xff8d; - t.hekutaarusquare = 0x3336; - t.henghook = 0x0267; - t.herutusquare = 0x3339; - t.het = 0x05d7; - t.hethebrew = 0x05d7; - t.hhook = 0x0266; - t.hhooksuperior = 0x02b1; - t.hieuhacirclekorean = 0x327b; - t.hieuhaparenkorean = 0x321b; - t.hieuhcirclekorean = 0x326d; - t.hieuhkorean = 0x314e; - t.hieuhparenkorean = 0x320d; - t.hihiragana = 0x3072; - t.hikatakana = 0x30d2; - t.hikatakanahalfwidth = 0xff8b; - t.hiriq = 0x05b4; - t.hiriq14 = 0x05b4; - t.hiriq21 = 0x05b4; - t.hiriq2d = 0x05b4; - t.hiriqhebrew = 0x05b4; - t.hiriqnarrowhebrew = 0x05b4; - t.hiriqquarterhebrew = 0x05b4; - t.hiriqwidehebrew = 0x05b4; - t.hlinebelow = 0x1e96; - t.hmonospace = 0xff48; - t.hoarmenian = 0x0570; - t.hohipthai = 0x0e2b; - t.hohiragana = 0x307b; - t.hokatakana = 0x30db; - t.hokatakanahalfwidth = 0xff8e; - t.holam = 0x05b9; - t.holam19 = 0x05b9; - t.holam26 = 0x05b9; - t.holam32 = 0x05b9; - t.holamhebrew = 0x05b9; - t.holamnarrowhebrew = 0x05b9; - t.holamquarterhebrew = 0x05b9; - t.holamwidehebrew = 0x05b9; - t.honokhukthai = 0x0e2e; - t.hookabovecomb = 0x0309; - t.hookcmb = 0x0309; - t.hookpalatalizedbelowcmb = 0x0321; - t.hookretroflexbelowcmb = 0x0322; - t.hoonsquare = 0x3342; - t.horicoptic = 0x03e9; - t.horizontalbar = 0x2015; - t.horncmb = 0x031b; - t.hotsprings = 0x2668; - t.house = 0x2302; - t.hparen = 0x24a3; - t.hsuperior = 0x02b0; - t.hturned = 0x0265; - t.huhiragana = 0x3075; - t.huiitosquare = 0x3333; - t.hukatakana = 0x30d5; - t.hukatakanahalfwidth = 0xff8c; - t.hungarumlaut = 0x02dd; - t.hungarumlautcmb = 0x030b; - t.hv = 0x0195; - t.hyphen = 0x002d; - t.hypheninferior = 0xf6e5; - t.hyphenmonospace = 0xff0d; - t.hyphensmall = 0xfe63; - t.hyphensuperior = 0xf6e6; - t.hyphentwo = 0x2010; - t.i = 0x0069; - t.iacute = 0x00ed; - t.iacyrillic = 0x044f; - t.ibengali = 0x0987; - t.ibopomofo = 0x3127; - t.ibreve = 0x012d; - t.icaron = 0x01d0; - t.icircle = 0x24d8; - t.icircumflex = 0x00ee; - t.icyrillic = 0x0456; - t.idblgrave = 0x0209; - t.ideographearthcircle = 0x328f; - t.ideographfirecircle = 0x328b; - t.ideographicallianceparen = 0x323f; - t.ideographiccallparen = 0x323a; - t.ideographiccentrecircle = 0x32a5; - t.ideographicclose = 0x3006; - t.ideographiccomma = 0x3001; - t.ideographiccommaleft = 0xff64; - t.ideographiccongratulationparen = 0x3237; - t.ideographiccorrectcircle = 0x32a3; - t.ideographicearthparen = 0x322f; - t.ideographicenterpriseparen = 0x323d; - t.ideographicexcellentcircle = 0x329d; - t.ideographicfestivalparen = 0x3240; - t.ideographicfinancialcircle = 0x3296; - t.ideographicfinancialparen = 0x3236; - t.ideographicfireparen = 0x322b; - t.ideographichaveparen = 0x3232; - t.ideographichighcircle = 0x32a4; - t.ideographiciterationmark = 0x3005; - t.ideographiclaborcircle = 0x3298; - t.ideographiclaborparen = 0x3238; - t.ideographicleftcircle = 0x32a7; - t.ideographiclowcircle = 0x32a6; - t.ideographicmedicinecircle = 0x32a9; - t.ideographicmetalparen = 0x322e; - t.ideographicmoonparen = 0x322a; - t.ideographicnameparen = 0x3234; - t.ideographicperiod = 0x3002; - t.ideographicprintcircle = 0x329e; - t.ideographicreachparen = 0x3243; - t.ideographicrepresentparen = 0x3239; - t.ideographicresourceparen = 0x323e; - t.ideographicrightcircle = 0x32a8; - t.ideographicsecretcircle = 0x3299; - t.ideographicselfparen = 0x3242; - t.ideographicsocietyparen = 0x3233; - t.ideographicspace = 0x3000; - t.ideographicspecialparen = 0x3235; - t.ideographicstockparen = 0x3231; - t.ideographicstudyparen = 0x323b; - t.ideographicsunparen = 0x3230; - t.ideographicsuperviseparen = 0x323c; - t.ideographicwaterparen = 0x322c; - t.ideographicwoodparen = 0x322d; - t.ideographiczero = 0x3007; - t.ideographmetalcircle = 0x328e; - t.ideographmooncircle = 0x328a; - t.ideographnamecircle = 0x3294; - t.ideographsuncircle = 0x3290; - t.ideographwatercircle = 0x328c; - t.ideographwoodcircle = 0x328d; - t.ideva = 0x0907; - t.idieresis = 0x00ef; - t.idieresisacute = 0x1e2f; - t.idieresiscyrillic = 0x04e5; - t.idotbelow = 0x1ecb; - t.iebrevecyrillic = 0x04d7; - t.iecyrillic = 0x0435; - t.ieungacirclekorean = 0x3275; - t.ieungaparenkorean = 0x3215; - t.ieungcirclekorean = 0x3267; - t.ieungkorean = 0x3147; - t.ieungparenkorean = 0x3207; - t.igrave = 0x00ec; - t.igujarati = 0x0a87; - t.igurmukhi = 0x0a07; - t.ihiragana = 0x3044; - t.ihookabove = 0x1ec9; - t.iibengali = 0x0988; - t.iicyrillic = 0x0438; - t.iideva = 0x0908; - t.iigujarati = 0x0a88; - t.iigurmukhi = 0x0a08; - t.iimatragurmukhi = 0x0a40; - t.iinvertedbreve = 0x020b; - t.iishortcyrillic = 0x0439; - t.iivowelsignbengali = 0x09c0; - t.iivowelsigndeva = 0x0940; - t.iivowelsigngujarati = 0x0ac0; - t.ij = 0x0133; - t.ikatakana = 0x30a4; - t.ikatakanahalfwidth = 0xff72; - t.ikorean = 0x3163; - t.ilde = 0x02dc; - t.iluyhebrew = 0x05ac; - t.imacron = 0x012b; - t.imacroncyrillic = 0x04e3; - t.imageorapproximatelyequal = 0x2253; - t.imatragurmukhi = 0x0a3f; - t.imonospace = 0xff49; - t.increment = 0x2206; - t.infinity = 0x221e; - t.iniarmenian = 0x056b; - t.integral = 0x222b; - t.integralbottom = 0x2321; - t.integralbt = 0x2321; - t.integralex = 0xf8f5; - t.integraltop = 0x2320; - t.integraltp = 0x2320; - t.intersection = 0x2229; - t.intisquare = 0x3305; - t.invbullet = 0x25d8; - t.invcircle = 0x25d9; - t.invsmileface = 0x263b; - t.iocyrillic = 0x0451; - t.iogonek = 0x012f; - t.iota = 0x03b9; - t.iotadieresis = 0x03ca; - t.iotadieresistonos = 0x0390; - t.iotalatin = 0x0269; - t.iotatonos = 0x03af; - t.iparen = 0x24a4; - t.irigurmukhi = 0x0a72; - t.ismallhiragana = 0x3043; - t.ismallkatakana = 0x30a3; - t.ismallkatakanahalfwidth = 0xff68; - t.issharbengali = 0x09fa; - t.istroke = 0x0268; - t.isuperior = 0xf6ed; - t.iterationhiragana = 0x309d; - t.iterationkatakana = 0x30fd; - t.itilde = 0x0129; - t.itildebelow = 0x1e2d; - t.iubopomofo = 0x3129; - t.iucyrillic = 0x044e; - t.ivowelsignbengali = 0x09bf; - t.ivowelsigndeva = 0x093f; - t.ivowelsigngujarati = 0x0abf; - t.izhitsacyrillic = 0x0475; - t.izhitsadblgravecyrillic = 0x0477; - t.j = 0x006a; - t.jaarmenian = 0x0571; - t.jabengali = 0x099c; - t.jadeva = 0x091c; - t.jagujarati = 0x0a9c; - t.jagurmukhi = 0x0a1c; - t.jbopomofo = 0x3110; - t.jcaron = 0x01f0; - t.jcircle = 0x24d9; - t.jcircumflex = 0x0135; - t.jcrossedtail = 0x029d; - t.jdotlessstroke = 0x025f; - t.jecyrillic = 0x0458; - t.jeemarabic = 0x062c; - t.jeemfinalarabic = 0xfe9e; - t.jeeminitialarabic = 0xfe9f; - t.jeemmedialarabic = 0xfea0; - t.jeharabic = 0x0698; - t.jehfinalarabic = 0xfb8b; - t.jhabengali = 0x099d; - t.jhadeva = 0x091d; - t.jhagujarati = 0x0a9d; - t.jhagurmukhi = 0x0a1d; - t.jheharmenian = 0x057b; - t.jis = 0x3004; - t.jmonospace = 0xff4a; - t.jparen = 0x24a5; - t.jsuperior = 0x02b2; - t.k = 0x006b; - t.kabashkircyrillic = 0x04a1; - t.kabengali = 0x0995; - t.kacute = 0x1e31; - t.kacyrillic = 0x043a; - t.kadescendercyrillic = 0x049b; - t.kadeva = 0x0915; - t.kaf = 0x05db; - t.kafarabic = 0x0643; - t.kafdagesh = 0xfb3b; - t.kafdageshhebrew = 0xfb3b; - t.kaffinalarabic = 0xfeda; - t.kafhebrew = 0x05db; - t.kafinitialarabic = 0xfedb; - t.kafmedialarabic = 0xfedc; - t.kafrafehebrew = 0xfb4d; - t.kagujarati = 0x0a95; - t.kagurmukhi = 0x0a15; - t.kahiragana = 0x304b; - t.kahookcyrillic = 0x04c4; - t.kakatakana = 0x30ab; - t.kakatakanahalfwidth = 0xff76; - t.kappa = 0x03ba; - t.kappasymbolgreek = 0x03f0; - t.kapyeounmieumkorean = 0x3171; - t.kapyeounphieuphkorean = 0x3184; - t.kapyeounpieupkorean = 0x3178; - t.kapyeounssangpieupkorean = 0x3179; - t.karoriisquare = 0x330d; - t.kashidaautoarabic = 0x0640; - t.kashidaautonosidebearingarabic = 0x0640; - t.kasmallkatakana = 0x30f5; - t.kasquare = 0x3384; - t.kasraarabic = 0x0650; - t.kasratanarabic = 0x064d; - t.kastrokecyrillic = 0x049f; - t.katahiraprolongmarkhalfwidth = 0xff70; - t.kaverticalstrokecyrillic = 0x049d; - t.kbopomofo = 0x310e; - t.kcalsquare = 0x3389; - t.kcaron = 0x01e9; - t.kcedilla = 0x0137; - t.kcircle = 0x24da; - t.kcommaaccent = 0x0137; - t.kdotbelow = 0x1e33; - t.keharmenian = 0x0584; - t.kehiragana = 0x3051; - t.kekatakana = 0x30b1; - t.kekatakanahalfwidth = 0xff79; - t.kenarmenian = 0x056f; - t.kesmallkatakana = 0x30f6; - t.kgreenlandic = 0x0138; - t.khabengali = 0x0996; - t.khacyrillic = 0x0445; - t.khadeva = 0x0916; - t.khagujarati = 0x0a96; - t.khagurmukhi = 0x0a16; - t.khaharabic = 0x062e; - t.khahfinalarabic = 0xfea6; - t.khahinitialarabic = 0xfea7; - t.khahmedialarabic = 0xfea8; - t.kheicoptic = 0x03e7; - t.khhadeva = 0x0959; - t.khhagurmukhi = 0x0a59; - t.khieukhacirclekorean = 0x3278; - t.khieukhaparenkorean = 0x3218; - t.khieukhcirclekorean = 0x326a; - t.khieukhkorean = 0x314b; - t.khieukhparenkorean = 0x320a; - t.khokhaithai = 0x0e02; - t.khokhonthai = 0x0e05; - t.khokhuatthai = 0x0e03; - t.khokhwaithai = 0x0e04; - t.khomutthai = 0x0e5b; - t.khook = 0x0199; - t.khorakhangthai = 0x0e06; - t.khzsquare = 0x3391; - t.kihiragana = 0x304d; - t.kikatakana = 0x30ad; - t.kikatakanahalfwidth = 0xff77; - t.kiroguramusquare = 0x3315; - t.kiromeetorusquare = 0x3316; - t.kirosquare = 0x3314; - t.kiyeokacirclekorean = 0x326e; - t.kiyeokaparenkorean = 0x320e; - t.kiyeokcirclekorean = 0x3260; - t.kiyeokkorean = 0x3131; - t.kiyeokparenkorean = 0x3200; - t.kiyeoksioskorean = 0x3133; - t.kjecyrillic = 0x045c; - t.klinebelow = 0x1e35; - t.klsquare = 0x3398; - t.kmcubedsquare = 0x33a6; - t.kmonospace = 0xff4b; - t.kmsquaredsquare = 0x33a2; - t.kohiragana = 0x3053; - t.kohmsquare = 0x33c0; - t.kokaithai = 0x0e01; - t.kokatakana = 0x30b3; - t.kokatakanahalfwidth = 0xff7a; - t.kooposquare = 0x331e; - t.koppacyrillic = 0x0481; - t.koreanstandardsymbol = 0x327f; - t.koroniscmb = 0x0343; - t.kparen = 0x24a6; - t.kpasquare = 0x33aa; - t.ksicyrillic = 0x046f; - t.ktsquare = 0x33cf; - t.kturned = 0x029e; - t.kuhiragana = 0x304f; - t.kukatakana = 0x30af; - t.kukatakanahalfwidth = 0xff78; - t.kvsquare = 0x33b8; - t.kwsquare = 0x33be; - t.l = 0x006c; - t.labengali = 0x09b2; - t.lacute = 0x013a; - t.ladeva = 0x0932; - t.lagujarati = 0x0ab2; - t.lagurmukhi = 0x0a32; - t.lakkhangyaothai = 0x0e45; - t.lamaleffinalarabic = 0xfefc; - t.lamalefhamzaabovefinalarabic = 0xfef8; - t.lamalefhamzaaboveisolatedarabic = 0xfef7; - t.lamalefhamzabelowfinalarabic = 0xfefa; - t.lamalefhamzabelowisolatedarabic = 0xfef9; - t.lamalefisolatedarabic = 0xfefb; - t.lamalefmaddaabovefinalarabic = 0xfef6; - t.lamalefmaddaaboveisolatedarabic = 0xfef5; - t.lamarabic = 0x0644; - t.lambda = 0x03bb; - t.lambdastroke = 0x019b; - t.lamed = 0x05dc; - t.lameddagesh = 0xfb3c; - t.lameddageshhebrew = 0xfb3c; - t.lamedhebrew = 0x05dc; - t.lamfinalarabic = 0xfede; - t.lamhahinitialarabic = 0xfcca; - t.laminitialarabic = 0xfedf; - t.lamjeeminitialarabic = 0xfcc9; - t.lamkhahinitialarabic = 0xfccb; - t.lamlamhehisolatedarabic = 0xfdf2; - t.lammedialarabic = 0xfee0; - t.lammeemhahinitialarabic = 0xfd88; - t.lammeeminitialarabic = 0xfccc; - t.largecircle = 0x25ef; - t.lbar = 0x019a; - t.lbelt = 0x026c; - t.lbopomofo = 0x310c; - t.lcaron = 0x013e; - t.lcedilla = 0x013c; - t.lcircle = 0x24db; - t.lcircumflexbelow = 0x1e3d; - t.lcommaaccent = 0x013c; - t.ldot = 0x0140; - t.ldotaccent = 0x0140; - t.ldotbelow = 0x1e37; - t.ldotbelowmacron = 0x1e39; - t.leftangleabovecmb = 0x031a; - t.lefttackbelowcmb = 0x0318; - t.less = 0x003c; - t.lessequal = 0x2264; - t.lessequalorgreater = 0x22da; - t.lessmonospace = 0xff1c; - t.lessorequivalent = 0x2272; - t.lessorgreater = 0x2276; - t.lessoverequal = 0x2266; - t.lesssmall = 0xfe64; - t.lezh = 0x026e; - t.lfblock = 0x258c; - t.lhookretroflex = 0x026d; - t.lira = 0x20a4; - t.liwnarmenian = 0x056c; - t.lj = 0x01c9; - t.ljecyrillic = 0x0459; - t.ll = 0xf6c0; - t.lladeva = 0x0933; - t.llagujarati = 0x0ab3; - t.llinebelow = 0x1e3b; - t.llladeva = 0x0934; - t.llvocalicbengali = 0x09e1; - t.llvocalicdeva = 0x0961; - t.llvocalicvowelsignbengali = 0x09e3; - t.llvocalicvowelsigndeva = 0x0963; - t.lmiddletilde = 0x026b; - t.lmonospace = 0xff4c; - t.lmsquare = 0x33d0; - t.lochulathai = 0x0e2c; - t.logicaland = 0x2227; - t.logicalnot = 0x00ac; - t.logicalnotreversed = 0x2310; - t.logicalor = 0x2228; - t.lolingthai = 0x0e25; - t.longs = 0x017f; - t.lowlinecenterline = 0xfe4e; - t.lowlinecmb = 0x0332; - t.lowlinedashed = 0xfe4d; - t.lozenge = 0x25ca; - t.lparen = 0x24a7; - t.lslash = 0x0142; - t.lsquare = 0x2113; - t.lsuperior = 0xf6ee; - t.ltshade = 0x2591; - t.luthai = 0x0e26; - t.lvocalicbengali = 0x098c; - t.lvocalicdeva = 0x090c; - t.lvocalicvowelsignbengali = 0x09e2; - t.lvocalicvowelsigndeva = 0x0962; - t.lxsquare = 0x33d3; - t.m = 0x006d; - t.mabengali = 0x09ae; - t.macron = 0x00af; - t.macronbelowcmb = 0x0331; - t.macroncmb = 0x0304; - t.macronlowmod = 0x02cd; - t.macronmonospace = 0xffe3; - t.macute = 0x1e3f; - t.madeva = 0x092e; - t.magujarati = 0x0aae; - t.magurmukhi = 0x0a2e; - t.mahapakhhebrew = 0x05a4; - t.mahapakhlefthebrew = 0x05a4; - t.mahiragana = 0x307e; - t.maichattawalowleftthai = 0xf895; - t.maichattawalowrightthai = 0xf894; - t.maichattawathai = 0x0e4b; - t.maichattawaupperleftthai = 0xf893; - t.maieklowleftthai = 0xf88c; - t.maieklowrightthai = 0xf88b; - t.maiekthai = 0x0e48; - t.maiekupperleftthai = 0xf88a; - t.maihanakatleftthai = 0xf884; - t.maihanakatthai = 0x0e31; - t.maitaikhuleftthai = 0xf889; - t.maitaikhuthai = 0x0e47; - t.maitholowleftthai = 0xf88f; - t.maitholowrightthai = 0xf88e; - t.maithothai = 0x0e49; - t.maithoupperleftthai = 0xf88d; - t.maitrilowleftthai = 0xf892; - t.maitrilowrightthai = 0xf891; - t.maitrithai = 0x0e4a; - t.maitriupperleftthai = 0xf890; - t.maiyamokthai = 0x0e46; - t.makatakana = 0x30de; - t.makatakanahalfwidth = 0xff8f; - t.male = 0x2642; - t.mansyonsquare = 0x3347; - t.maqafhebrew = 0x05be; - t.mars = 0x2642; - t.masoracirclehebrew = 0x05af; - t.masquare = 0x3383; - t.mbopomofo = 0x3107; - t.mbsquare = 0x33d4; - t.mcircle = 0x24dc; - t.mcubedsquare = 0x33a5; - t.mdotaccent = 0x1e41; - t.mdotbelow = 0x1e43; - t.meemarabic = 0x0645; - t.meemfinalarabic = 0xfee2; - t.meeminitialarabic = 0xfee3; - t.meemmedialarabic = 0xfee4; - t.meemmeeminitialarabic = 0xfcd1; - t.meemmeemisolatedarabic = 0xfc48; - t.meetorusquare = 0x334d; - t.mehiragana = 0x3081; - t.meizierasquare = 0x337e; - t.mekatakana = 0x30e1; - t.mekatakanahalfwidth = 0xff92; - t.mem = 0x05de; - t.memdagesh = 0xfb3e; - t.memdageshhebrew = 0xfb3e; - t.memhebrew = 0x05de; - t.menarmenian = 0x0574; - t.merkhahebrew = 0x05a5; - t.merkhakefulahebrew = 0x05a6; - t.merkhakefulalefthebrew = 0x05a6; - t.merkhalefthebrew = 0x05a5; - t.mhook = 0x0271; - t.mhzsquare = 0x3392; - t.middledotkatakanahalfwidth = 0xff65; - t.middot = 0x00b7; - t.mieumacirclekorean = 0x3272; - t.mieumaparenkorean = 0x3212; - t.mieumcirclekorean = 0x3264; - t.mieumkorean = 0x3141; - t.mieumpansioskorean = 0x3170; - t.mieumparenkorean = 0x3204; - t.mieumpieupkorean = 0x316e; - t.mieumsioskorean = 0x316f; - t.mihiragana = 0x307f; - t.mikatakana = 0x30df; - t.mikatakanahalfwidth = 0xff90; - t.minus = 0x2212; - t.minusbelowcmb = 0x0320; - t.minuscircle = 0x2296; - t.minusmod = 0x02d7; - t.minusplus = 0x2213; - t.minute = 0x2032; - t.miribaarusquare = 0x334a; - t.mirisquare = 0x3349; - t.mlonglegturned = 0x0270; - t.mlsquare = 0x3396; - t.mmcubedsquare = 0x33a3; - t.mmonospace = 0xff4d; - t.mmsquaredsquare = 0x339f; - t.mohiragana = 0x3082; - t.mohmsquare = 0x33c1; - t.mokatakana = 0x30e2; - t.mokatakanahalfwidth = 0xff93; - t.molsquare = 0x33d6; - t.momathai = 0x0e21; - t.moverssquare = 0x33a7; - t.moverssquaredsquare = 0x33a8; - t.mparen = 0x24a8; - t.mpasquare = 0x33ab; - t.mssquare = 0x33b3; - t.msuperior = 0xf6ef; - t.mturned = 0x026f; - t.mu = 0x00b5; - t.mu1 = 0x00b5; - t.muasquare = 0x3382; - t.muchgreater = 0x226b; - t.muchless = 0x226a; - t.mufsquare = 0x338c; - t.mugreek = 0x03bc; - t.mugsquare = 0x338d; - t.muhiragana = 0x3080; - t.mukatakana = 0x30e0; - t.mukatakanahalfwidth = 0xff91; - t.mulsquare = 0x3395; - t.multiply = 0x00d7; - t.mumsquare = 0x339b; - t.munahhebrew = 0x05a3; - t.munahlefthebrew = 0x05a3; - t.musicalnote = 0x266a; - t.musicalnotedbl = 0x266b; - t.musicflatsign = 0x266d; - t.musicsharpsign = 0x266f; - t.mussquare = 0x33b2; - t.muvsquare = 0x33b6; - t.muwsquare = 0x33bc; - t.mvmegasquare = 0x33b9; - t.mvsquare = 0x33b7; - t.mwmegasquare = 0x33bf; - t.mwsquare = 0x33bd; - t.n = 0x006e; - t.nabengali = 0x09a8; - t.nabla = 0x2207; - t.nacute = 0x0144; - t.nadeva = 0x0928; - t.nagujarati = 0x0aa8; - t.nagurmukhi = 0x0a28; - t.nahiragana = 0x306a; - t.nakatakana = 0x30ca; - t.nakatakanahalfwidth = 0xff85; - t.napostrophe = 0x0149; - t.nasquare = 0x3381; - t.nbopomofo = 0x310b; - t.nbspace = 0x00a0; - t.ncaron = 0x0148; - t.ncedilla = 0x0146; - t.ncircle = 0x24dd; - t.ncircumflexbelow = 0x1e4b; - t.ncommaaccent = 0x0146; - t.ndotaccent = 0x1e45; - t.ndotbelow = 0x1e47; - t.nehiragana = 0x306d; - t.nekatakana = 0x30cd; - t.nekatakanahalfwidth = 0xff88; - t.newsheqelsign = 0x20aa; - t.nfsquare = 0x338b; - t.ngabengali = 0x0999; - t.ngadeva = 0x0919; - t.ngagujarati = 0x0a99; - t.ngagurmukhi = 0x0a19; - t.ngonguthai = 0x0e07; - t.nhiragana = 0x3093; - t.nhookleft = 0x0272; - t.nhookretroflex = 0x0273; - t.nieunacirclekorean = 0x326f; - t.nieunaparenkorean = 0x320f; - t.nieuncieuckorean = 0x3135; - t.nieuncirclekorean = 0x3261; - t.nieunhieuhkorean = 0x3136; - t.nieunkorean = 0x3134; - t.nieunpansioskorean = 0x3168; - t.nieunparenkorean = 0x3201; - t.nieunsioskorean = 0x3167; - t.nieuntikeutkorean = 0x3166; - t.nihiragana = 0x306b; - t.nikatakana = 0x30cb; - t.nikatakanahalfwidth = 0xff86; - t.nikhahitleftthai = 0xf899; - t.nikhahitthai = 0x0e4d; - t.nine = 0x0039; - t.ninearabic = 0x0669; - t.ninebengali = 0x09ef; - t.ninecircle = 0x2468; - t.ninecircleinversesansserif = 0x2792; - t.ninedeva = 0x096f; - t.ninegujarati = 0x0aef; - t.ninegurmukhi = 0x0a6f; - t.ninehackarabic = 0x0669; - t.ninehangzhou = 0x3029; - t.nineideographicparen = 0x3228; - t.nineinferior = 0x2089; - t.ninemonospace = 0xff19; - t.nineoldstyle = 0xf739; - t.nineparen = 0x247c; - t.nineperiod = 0x2490; - t.ninepersian = 0x06f9; - t.nineroman = 0x2178; - t.ninesuperior = 0x2079; - t.nineteencircle = 0x2472; - t.nineteenparen = 0x2486; - t.nineteenperiod = 0x249a; - t.ninethai = 0x0e59; - t.nj = 0x01cc; - t.njecyrillic = 0x045a; - t.nkatakana = 0x30f3; - t.nkatakanahalfwidth = 0xff9d; - t.nlegrightlong = 0x019e; - t.nlinebelow = 0x1e49; - t.nmonospace = 0xff4e; - t.nmsquare = 0x339a; - t.nnabengali = 0x09a3; - t.nnadeva = 0x0923; - t.nnagujarati = 0x0aa3; - t.nnagurmukhi = 0x0a23; - t.nnnadeva = 0x0929; - t.nohiragana = 0x306e; - t.nokatakana = 0x30ce; - t.nokatakanahalfwidth = 0xff89; - t.nonbreakingspace = 0x00a0; - t.nonenthai = 0x0e13; - t.nonuthai = 0x0e19; - t.noonarabic = 0x0646; - t.noonfinalarabic = 0xfee6; - t.noonghunnaarabic = 0x06ba; - t.noonghunnafinalarabic = 0xfb9f; - t.nooninitialarabic = 0xfee7; - t.noonjeeminitialarabic = 0xfcd2; - t.noonjeemisolatedarabic = 0xfc4b; - t.noonmedialarabic = 0xfee8; - t.noonmeeminitialarabic = 0xfcd5; - t.noonmeemisolatedarabic = 0xfc4e; - t.noonnoonfinalarabic = 0xfc8d; - t.notcontains = 0x220c; - t.notelement = 0x2209; - t.notelementof = 0x2209; - t.notequal = 0x2260; - t.notgreater = 0x226f; - t.notgreaternorequal = 0x2271; - t.notgreaternorless = 0x2279; - t.notidentical = 0x2262; - t.notless = 0x226e; - t.notlessnorequal = 0x2270; - t.notparallel = 0x2226; - t.notprecedes = 0x2280; - t.notsubset = 0x2284; - t.notsucceeds = 0x2281; - t.notsuperset = 0x2285; - t.nowarmenian = 0x0576; - t.nparen = 0x24a9; - t.nssquare = 0x33b1; - t.nsuperior = 0x207f; - t.ntilde = 0x00f1; - t.nu = 0x03bd; - t.nuhiragana = 0x306c; - t.nukatakana = 0x30cc; - t.nukatakanahalfwidth = 0xff87; - t.nuktabengali = 0x09bc; - t.nuktadeva = 0x093c; - t.nuktagujarati = 0x0abc; - t.nuktagurmukhi = 0x0a3c; - t.numbersign = 0x0023; - t.numbersignmonospace = 0xff03; - t.numbersignsmall = 0xfe5f; - t.numeralsigngreek = 0x0374; - t.numeralsignlowergreek = 0x0375; - t.numero = 0x2116; - t.nun = 0x05e0; - t.nundagesh = 0xfb40; - t.nundageshhebrew = 0xfb40; - t.nunhebrew = 0x05e0; - t.nvsquare = 0x33b5; - t.nwsquare = 0x33bb; - t.nyabengali = 0x099e; - t.nyadeva = 0x091e; - t.nyagujarati = 0x0a9e; - t.nyagurmukhi = 0x0a1e; - t.o = 0x006f; - t.oacute = 0x00f3; - t.oangthai = 0x0e2d; - t.obarred = 0x0275; - t.obarredcyrillic = 0x04e9; - t.obarreddieresiscyrillic = 0x04eb; - t.obengali = 0x0993; - t.obopomofo = 0x311b; - t.obreve = 0x014f; - t.ocandradeva = 0x0911; - t.ocandragujarati = 0x0a91; - t.ocandravowelsigndeva = 0x0949; - t.ocandravowelsigngujarati = 0x0ac9; - t.ocaron = 0x01d2; - t.ocircle = 0x24de; - t.ocircumflex = 0x00f4; - t.ocircumflexacute = 0x1ed1; - t.ocircumflexdotbelow = 0x1ed9; - t.ocircumflexgrave = 0x1ed3; - t.ocircumflexhookabove = 0x1ed5; - t.ocircumflextilde = 0x1ed7; - t.ocyrillic = 0x043e; - t.odblacute = 0x0151; - t.odblgrave = 0x020d; - t.odeva = 0x0913; - t.odieresis = 0x00f6; - t.odieresiscyrillic = 0x04e7; - t.odotbelow = 0x1ecd; - t.oe = 0x0153; - t.oekorean = 0x315a; - t.ogonek = 0x02db; - t.ogonekcmb = 0x0328; - t.ograve = 0x00f2; - t.ogujarati = 0x0a93; - t.oharmenian = 0x0585; - t.ohiragana = 0x304a; - t.ohookabove = 0x1ecf; - t.ohorn = 0x01a1; - t.ohornacute = 0x1edb; - t.ohorndotbelow = 0x1ee3; - t.ohorngrave = 0x1edd; - t.ohornhookabove = 0x1edf; - t.ohorntilde = 0x1ee1; - t.ohungarumlaut = 0x0151; - t.oi = 0x01a3; - t.oinvertedbreve = 0x020f; - t.okatakana = 0x30aa; - t.okatakanahalfwidth = 0xff75; - t.okorean = 0x3157; - t.olehebrew = 0x05ab; - t.omacron = 0x014d; - t.omacronacute = 0x1e53; - t.omacrongrave = 0x1e51; - t.omdeva = 0x0950; - t.omega = 0x03c9; - t.omega1 = 0x03d6; - t.omegacyrillic = 0x0461; - t.omegalatinclosed = 0x0277; - t.omegaroundcyrillic = 0x047b; - t.omegatitlocyrillic = 0x047d; - t.omegatonos = 0x03ce; - t.omgujarati = 0x0ad0; - t.omicron = 0x03bf; - t.omicrontonos = 0x03cc; - t.omonospace = 0xff4f; - t.one = 0x0031; - t.onearabic = 0x0661; - t.onebengali = 0x09e7; - t.onecircle = 0x2460; - t.onecircleinversesansserif = 0x278a; - t.onedeva = 0x0967; - t.onedotenleader = 0x2024; - t.oneeighth = 0x215b; - t.onefitted = 0xf6dc; - t.onegujarati = 0x0ae7; - t.onegurmukhi = 0x0a67; - t.onehackarabic = 0x0661; - t.onehalf = 0x00bd; - t.onehangzhou = 0x3021; - t.oneideographicparen = 0x3220; - t.oneinferior = 0x2081; - t.onemonospace = 0xff11; - t.onenumeratorbengali = 0x09f4; - t.oneoldstyle = 0xf731; - t.oneparen = 0x2474; - t.oneperiod = 0x2488; - t.onepersian = 0x06f1; - t.onequarter = 0x00bc; - t.oneroman = 0x2170; - t.onesuperior = 0x00b9; - t.onethai = 0x0e51; - t.onethird = 0x2153; - t.oogonek = 0x01eb; - t.oogonekmacron = 0x01ed; - t.oogurmukhi = 0x0a13; - t.oomatragurmukhi = 0x0a4b; - t.oopen = 0x0254; - t.oparen = 0x24aa; - t.openbullet = 0x25e6; - t.option = 0x2325; - t.ordfeminine = 0x00aa; - t.ordmasculine = 0x00ba; - t.orthogonal = 0x221f; - t.oshortdeva = 0x0912; - t.oshortvowelsigndeva = 0x094a; - t.oslash = 0x00f8; - t.oslashacute = 0x01ff; - t.osmallhiragana = 0x3049; - t.osmallkatakana = 0x30a9; - t.osmallkatakanahalfwidth = 0xff6b; - t.ostrokeacute = 0x01ff; - t.osuperior = 0xf6f0; - t.otcyrillic = 0x047f; - t.otilde = 0x00f5; - t.otildeacute = 0x1e4d; - t.otildedieresis = 0x1e4f; - t.oubopomofo = 0x3121; - t.overline = 0x203e; - t.overlinecenterline = 0xfe4a; - t.overlinecmb = 0x0305; - t.overlinedashed = 0xfe49; - t.overlinedblwavy = 0xfe4c; - t.overlinewavy = 0xfe4b; - t.overscore = 0x00af; - t.ovowelsignbengali = 0x09cb; - t.ovowelsigndeva = 0x094b; - t.ovowelsigngujarati = 0x0acb; - t.p = 0x0070; - t.paampssquare = 0x3380; - t.paasentosquare = 0x332b; - t.pabengali = 0x09aa; - t.pacute = 0x1e55; - t.padeva = 0x092a; - t.pagedown = 0x21df; - t.pageup = 0x21de; - t.pagujarati = 0x0aaa; - t.pagurmukhi = 0x0a2a; - t.pahiragana = 0x3071; - t.paiyannoithai = 0x0e2f; - t.pakatakana = 0x30d1; - t.palatalizationcyrilliccmb = 0x0484; - t.palochkacyrillic = 0x04c0; - t.pansioskorean = 0x317f; - t.paragraph = 0x00b6; - t.parallel = 0x2225; - t.parenleft = 0x0028; - t.parenleftaltonearabic = 0xfd3e; - t.parenleftbt = 0xf8ed; - t.parenleftex = 0xf8ec; - t.parenleftinferior = 0x208d; - t.parenleftmonospace = 0xff08; - t.parenleftsmall = 0xfe59; - t.parenleftsuperior = 0x207d; - t.parenlefttp = 0xf8eb; - t.parenleftvertical = 0xfe35; - t.parenright = 0x0029; - t.parenrightaltonearabic = 0xfd3f; - t.parenrightbt = 0xf8f8; - t.parenrightex = 0xf8f7; - t.parenrightinferior = 0x208e; - t.parenrightmonospace = 0xff09; - t.parenrightsmall = 0xfe5a; - t.parenrightsuperior = 0x207e; - t.parenrighttp = 0xf8f6; - t.parenrightvertical = 0xfe36; - t.partialdiff = 0x2202; - t.paseqhebrew = 0x05c0; - t.pashtahebrew = 0x0599; - t.pasquare = 0x33a9; - t.patah = 0x05b7; - t.patah11 = 0x05b7; - t.patah1d = 0x05b7; - t.patah2a = 0x05b7; - t.patahhebrew = 0x05b7; - t.patahnarrowhebrew = 0x05b7; - t.patahquarterhebrew = 0x05b7; - t.patahwidehebrew = 0x05b7; - t.pazerhebrew = 0x05a1; - t.pbopomofo = 0x3106; - t.pcircle = 0x24df; - t.pdotaccent = 0x1e57; - t.pe = 0x05e4; - t.pecyrillic = 0x043f; - t.pedagesh = 0xfb44; - t.pedageshhebrew = 0xfb44; - t.peezisquare = 0x333b; - t.pefinaldageshhebrew = 0xfb43; - t.peharabic = 0x067e; - t.peharmenian = 0x057a; - t.pehebrew = 0x05e4; - t.pehfinalarabic = 0xfb57; - t.pehinitialarabic = 0xfb58; - t.pehiragana = 0x307a; - t.pehmedialarabic = 0xfb59; - t.pekatakana = 0x30da; - t.pemiddlehookcyrillic = 0x04a7; - t.perafehebrew = 0xfb4e; - t.percent = 0x0025; - t.percentarabic = 0x066a; - t.percentmonospace = 0xff05; - t.percentsmall = 0xfe6a; - t.period = 0x002e; - t.periodarmenian = 0x0589; - t.periodcentered = 0x00b7; - t.periodhalfwidth = 0xff61; - t.periodinferior = 0xf6e7; - t.periodmonospace = 0xff0e; - t.periodsmall = 0xfe52; - t.periodsuperior = 0xf6e8; - t.perispomenigreekcmb = 0x0342; - t.perpendicular = 0x22a5; - t.perthousand = 0x2030; - t.peseta = 0x20a7; - t.pfsquare = 0x338a; - t.phabengali = 0x09ab; - t.phadeva = 0x092b; - t.phagujarati = 0x0aab; - t.phagurmukhi = 0x0a2b; - t.phi = 0x03c6; - t.phi1 = 0x03d5; - t.phieuphacirclekorean = 0x327a; - t.phieuphaparenkorean = 0x321a; - t.phieuphcirclekorean = 0x326c; - t.phieuphkorean = 0x314d; - t.phieuphparenkorean = 0x320c; - t.philatin = 0x0278; - t.phinthuthai = 0x0e3a; - t.phisymbolgreek = 0x03d5; - t.phook = 0x01a5; - t.phophanthai = 0x0e1e; - t.phophungthai = 0x0e1c; - t.phosamphaothai = 0x0e20; - t.pi = 0x03c0; - t.pieupacirclekorean = 0x3273; - t.pieupaparenkorean = 0x3213; - t.pieupcieuckorean = 0x3176; - t.pieupcirclekorean = 0x3265; - t.pieupkiyeokkorean = 0x3172; - t.pieupkorean = 0x3142; - t.pieupparenkorean = 0x3205; - t.pieupsioskiyeokkorean = 0x3174; - t.pieupsioskorean = 0x3144; - t.pieupsiostikeutkorean = 0x3175; - t.pieupthieuthkorean = 0x3177; - t.pieuptikeutkorean = 0x3173; - t.pihiragana = 0x3074; - t.pikatakana = 0x30d4; - t.pisymbolgreek = 0x03d6; - t.piwrarmenian = 0x0583; - t.planckover2pi = 0x210f; - t.planckover2pi1 = 0x210f; - t.plus = 0x002b; - t.plusbelowcmb = 0x031f; - t.pluscircle = 0x2295; - t.plusminus = 0x00b1; - t.plusmod = 0x02d6; - t.plusmonospace = 0xff0b; - t.plussmall = 0xfe62; - t.plussuperior = 0x207a; - t.pmonospace = 0xff50; - t.pmsquare = 0x33d8; - t.pohiragana = 0x307d; - t.pointingindexdownwhite = 0x261f; - t.pointingindexleftwhite = 0x261c; - t.pointingindexrightwhite = 0x261e; - t.pointingindexupwhite = 0x261d; - t.pokatakana = 0x30dd; - t.poplathai = 0x0e1b; - t.postalmark = 0x3012; - t.postalmarkface = 0x3020; - t.pparen = 0x24ab; - t.precedes = 0x227a; - t.prescription = 0x211e; - t.primemod = 0x02b9; - t.primereversed = 0x2035; - t.product = 0x220f; - t.projective = 0x2305; - t.prolongedkana = 0x30fc; - t.propellor = 0x2318; - t.propersubset = 0x2282; - t.propersuperset = 0x2283; - t.proportion = 0x2237; - t.proportional = 0x221d; - t.psi = 0x03c8; - t.psicyrillic = 0x0471; - t.psilipneumatacyrilliccmb = 0x0486; - t.pssquare = 0x33b0; - t.puhiragana = 0x3077; - t.pukatakana = 0x30d7; - t.pvsquare = 0x33b4; - t.pwsquare = 0x33ba; - t.q = 0x0071; - t.qadeva = 0x0958; - t.qadmahebrew = 0x05a8; - t.qafarabic = 0x0642; - t.qaffinalarabic = 0xfed6; - t.qafinitialarabic = 0xfed7; - t.qafmedialarabic = 0xfed8; - t.qamats = 0x05b8; - t.qamats10 = 0x05b8; - t.qamats1a = 0x05b8; - t.qamats1c = 0x05b8; - t.qamats27 = 0x05b8; - t.qamats29 = 0x05b8; - t.qamats33 = 0x05b8; - t.qamatsde = 0x05b8; - t.qamatshebrew = 0x05b8; - t.qamatsnarrowhebrew = 0x05b8; - t.qamatsqatanhebrew = 0x05b8; - t.qamatsqatannarrowhebrew = 0x05b8; - t.qamatsqatanquarterhebrew = 0x05b8; - t.qamatsqatanwidehebrew = 0x05b8; - t.qamatsquarterhebrew = 0x05b8; - t.qamatswidehebrew = 0x05b8; - t.qarneyparahebrew = 0x059f; - t.qbopomofo = 0x3111; - t.qcircle = 0x24e0; - t.qhook = 0x02a0; - t.qmonospace = 0xff51; - t.qof = 0x05e7; - t.qofdagesh = 0xfb47; - t.qofdageshhebrew = 0xfb47; - t.qofhebrew = 0x05e7; - t.qparen = 0x24ac; - t.quarternote = 0x2669; - t.qubuts = 0x05bb; - t.qubuts18 = 0x05bb; - t.qubuts25 = 0x05bb; - t.qubuts31 = 0x05bb; - t.qubutshebrew = 0x05bb; - t.qubutsnarrowhebrew = 0x05bb; - t.qubutsquarterhebrew = 0x05bb; - t.qubutswidehebrew = 0x05bb; - t.question = 0x003f; - t.questionarabic = 0x061f; - t.questionarmenian = 0x055e; - t.questiondown = 0x00bf; - t.questiondownsmall = 0xf7bf; - t.questiongreek = 0x037e; - t.questionmonospace = 0xff1f; - t.questionsmall = 0xf73f; - t.quotedbl = 0x0022; - t.quotedblbase = 0x201e; - t.quotedblleft = 0x201c; - t.quotedblmonospace = 0xff02; - t.quotedblprime = 0x301e; - t.quotedblprimereversed = 0x301d; - t.quotedblright = 0x201d; - t.quoteleft = 0x2018; - t.quoteleftreversed = 0x201b; - t.quotereversed = 0x201b; - t.quoteright = 0x2019; - t.quoterightn = 0x0149; - t.quotesinglbase = 0x201a; - t.quotesingle = 0x0027; - t.quotesinglemonospace = 0xff07; - t.r = 0x0072; - t.raarmenian = 0x057c; - t.rabengali = 0x09b0; - t.racute = 0x0155; - t.radeva = 0x0930; - t.radical = 0x221a; - t.radicalex = 0xf8e5; - t.radoverssquare = 0x33ae; - t.radoverssquaredsquare = 0x33af; - t.radsquare = 0x33ad; - t.rafe = 0x05bf; - t.rafehebrew = 0x05bf; - t.ragujarati = 0x0ab0; - t.ragurmukhi = 0x0a30; - t.rahiragana = 0x3089; - t.rakatakana = 0x30e9; - t.rakatakanahalfwidth = 0xff97; - t.ralowerdiagonalbengali = 0x09f1; - t.ramiddlediagonalbengali = 0x09f0; - t.ramshorn = 0x0264; - t.ratio = 0x2236; - t.rbopomofo = 0x3116; - t.rcaron = 0x0159; - t.rcedilla = 0x0157; - t.rcircle = 0x24e1; - t.rcommaaccent = 0x0157; - t.rdblgrave = 0x0211; - t.rdotaccent = 0x1e59; - t.rdotbelow = 0x1e5b; - t.rdotbelowmacron = 0x1e5d; - t.referencemark = 0x203b; - t.reflexsubset = 0x2286; - t.reflexsuperset = 0x2287; - t.registered = 0x00ae; - t.registersans = 0xf8e8; - t.registerserif = 0xf6da; - t.reharabic = 0x0631; - t.reharmenian = 0x0580; - t.rehfinalarabic = 0xfeae; - t.rehiragana = 0x308c; - t.rekatakana = 0x30ec; - t.rekatakanahalfwidth = 0xff9a; - t.resh = 0x05e8; - t.reshdageshhebrew = 0xfb48; - t.reshhebrew = 0x05e8; - t.reversedtilde = 0x223d; - t.reviahebrew = 0x0597; - t.reviamugrashhebrew = 0x0597; - t.revlogicalnot = 0x2310; - t.rfishhook = 0x027e; - t.rfishhookreversed = 0x027f; - t.rhabengali = 0x09dd; - t.rhadeva = 0x095d; - t.rho = 0x03c1; - t.rhook = 0x027d; - t.rhookturned = 0x027b; - t.rhookturnedsuperior = 0x02b5; - t.rhosymbolgreek = 0x03f1; - t.rhotichookmod = 0x02de; - t.rieulacirclekorean = 0x3271; - t.rieulaparenkorean = 0x3211; - t.rieulcirclekorean = 0x3263; - t.rieulhieuhkorean = 0x3140; - t.rieulkiyeokkorean = 0x313a; - t.rieulkiyeoksioskorean = 0x3169; - t.rieulkorean = 0x3139; - t.rieulmieumkorean = 0x313b; - t.rieulpansioskorean = 0x316c; - t.rieulparenkorean = 0x3203; - t.rieulphieuphkorean = 0x313f; - t.rieulpieupkorean = 0x313c; - t.rieulpieupsioskorean = 0x316b; - t.rieulsioskorean = 0x313d; - t.rieulthieuthkorean = 0x313e; - t.rieultikeutkorean = 0x316a; - t.rieulyeorinhieuhkorean = 0x316d; - t.rightangle = 0x221f; - t.righttackbelowcmb = 0x0319; - t.righttriangle = 0x22bf; - t.rihiragana = 0x308a; - t.rikatakana = 0x30ea; - t.rikatakanahalfwidth = 0xff98; - t.ring = 0x02da; - t.ringbelowcmb = 0x0325; - t.ringcmb = 0x030a; - t.ringhalfleft = 0x02bf; - t.ringhalfleftarmenian = 0x0559; - t.ringhalfleftbelowcmb = 0x031c; - t.ringhalfleftcentered = 0x02d3; - t.ringhalfright = 0x02be; - t.ringhalfrightbelowcmb = 0x0339; - t.ringhalfrightcentered = 0x02d2; - t.rinvertedbreve = 0x0213; - t.rittorusquare = 0x3351; - t.rlinebelow = 0x1e5f; - t.rlongleg = 0x027c; - t.rlonglegturned = 0x027a; - t.rmonospace = 0xff52; - t.rohiragana = 0x308d; - t.rokatakana = 0x30ed; - t.rokatakanahalfwidth = 0xff9b; - t.roruathai = 0x0e23; - t.rparen = 0x24ad; - t.rrabengali = 0x09dc; - t.rradeva = 0x0931; - t.rragurmukhi = 0x0a5c; - t.rreharabic = 0x0691; - t.rrehfinalarabic = 0xfb8d; - t.rrvocalicbengali = 0x09e0; - t.rrvocalicdeva = 0x0960; - t.rrvocalicgujarati = 0x0ae0; - t.rrvocalicvowelsignbengali = 0x09c4; - t.rrvocalicvowelsigndeva = 0x0944; - t.rrvocalicvowelsigngujarati = 0x0ac4; - t.rsuperior = 0xf6f1; - t.rtblock = 0x2590; - t.rturned = 0x0279; - t.rturnedsuperior = 0x02b4; - t.ruhiragana = 0x308b; - t.rukatakana = 0x30eb; - t.rukatakanahalfwidth = 0xff99; - t.rupeemarkbengali = 0x09f2; - t.rupeesignbengali = 0x09f3; - t.rupiah = 0xf6dd; - t.ruthai = 0x0e24; - t.rvocalicbengali = 0x098b; - t.rvocalicdeva = 0x090b; - t.rvocalicgujarati = 0x0a8b; - t.rvocalicvowelsignbengali = 0x09c3; - t.rvocalicvowelsigndeva = 0x0943; - t.rvocalicvowelsigngujarati = 0x0ac3; - t.s = 0x0073; - t.sabengali = 0x09b8; - t.sacute = 0x015b; - t.sacutedotaccent = 0x1e65; - t.sadarabic = 0x0635; - t.sadeva = 0x0938; - t.sadfinalarabic = 0xfeba; - t.sadinitialarabic = 0xfebb; - t.sadmedialarabic = 0xfebc; - t.sagujarati = 0x0ab8; - t.sagurmukhi = 0x0a38; - t.sahiragana = 0x3055; - t.sakatakana = 0x30b5; - t.sakatakanahalfwidth = 0xff7b; - t.sallallahoualayhewasallamarabic = 0xfdfa; - t.samekh = 0x05e1; - t.samekhdagesh = 0xfb41; - t.samekhdageshhebrew = 0xfb41; - t.samekhhebrew = 0x05e1; - t.saraaathai = 0x0e32; - t.saraaethai = 0x0e41; - t.saraaimaimalaithai = 0x0e44; - t.saraaimaimuanthai = 0x0e43; - t.saraamthai = 0x0e33; - t.saraathai = 0x0e30; - t.saraethai = 0x0e40; - t.saraiileftthai = 0xf886; - t.saraiithai = 0x0e35; - t.saraileftthai = 0xf885; - t.saraithai = 0x0e34; - t.saraothai = 0x0e42; - t.saraueeleftthai = 0xf888; - t.saraueethai = 0x0e37; - t.saraueleftthai = 0xf887; - t.sarauethai = 0x0e36; - t.sarauthai = 0x0e38; - t.sarauuthai = 0x0e39; - t.sbopomofo = 0x3119; - t.scaron = 0x0161; - t.scarondotaccent = 0x1e67; - t.scedilla = 0x015f; - t.schwa = 0x0259; - t.schwacyrillic = 0x04d9; - t.schwadieresiscyrillic = 0x04db; - t.schwahook = 0x025a; - t.scircle = 0x24e2; - t.scircumflex = 0x015d; - t.scommaaccent = 0x0219; - t.sdotaccent = 0x1e61; - t.sdotbelow = 0x1e63; - t.sdotbelowdotaccent = 0x1e69; - t.seagullbelowcmb = 0x033c; - t.second = 0x2033; - t.secondtonechinese = 0x02ca; - t.section = 0x00a7; - t.seenarabic = 0x0633; - t.seenfinalarabic = 0xfeb2; - t.seeninitialarabic = 0xfeb3; - t.seenmedialarabic = 0xfeb4; - t.segol = 0x05b6; - t.segol13 = 0x05b6; - t.segol1f = 0x05b6; - t.segol2c = 0x05b6; - t.segolhebrew = 0x05b6; - t.segolnarrowhebrew = 0x05b6; - t.segolquarterhebrew = 0x05b6; - t.segoltahebrew = 0x0592; - t.segolwidehebrew = 0x05b6; - t.seharmenian = 0x057d; - t.sehiragana = 0x305b; - t.sekatakana = 0x30bb; - t.sekatakanahalfwidth = 0xff7e; - t.semicolon = 0x003b; - t.semicolonarabic = 0x061b; - t.semicolonmonospace = 0xff1b; - t.semicolonsmall = 0xfe54; - t.semivoicedmarkkana = 0x309c; - t.semivoicedmarkkanahalfwidth = 0xff9f; - t.sentisquare = 0x3322; - t.sentosquare = 0x3323; - t.seven = 0x0037; - t.sevenarabic = 0x0667; - t.sevenbengali = 0x09ed; - t.sevencircle = 0x2466; - t.sevencircleinversesansserif = 0x2790; - t.sevendeva = 0x096d; - t.seveneighths = 0x215e; - t.sevengujarati = 0x0aed; - t.sevengurmukhi = 0x0a6d; - t.sevenhackarabic = 0x0667; - t.sevenhangzhou = 0x3027; - t.sevenideographicparen = 0x3226; - t.seveninferior = 0x2087; - t.sevenmonospace = 0xff17; - t.sevenoldstyle = 0xf737; - t.sevenparen = 0x247a; - t.sevenperiod = 0x248e; - t.sevenpersian = 0x06f7; - t.sevenroman = 0x2176; - t.sevensuperior = 0x2077; - t.seventeencircle = 0x2470; - t.seventeenparen = 0x2484; - t.seventeenperiod = 0x2498; - t.seventhai = 0x0e57; - t.sfthyphen = 0x00ad; - t.shaarmenian = 0x0577; - t.shabengali = 0x09b6; - t.shacyrillic = 0x0448; - t.shaddaarabic = 0x0651; - t.shaddadammaarabic = 0xfc61; - t.shaddadammatanarabic = 0xfc5e; - t.shaddafathaarabic = 0xfc60; - t.shaddakasraarabic = 0xfc62; - t.shaddakasratanarabic = 0xfc5f; - t.shade = 0x2592; - t.shadedark = 0x2593; - t.shadelight = 0x2591; - t.shademedium = 0x2592; - t.shadeva = 0x0936; - t.shagujarati = 0x0ab6; - t.shagurmukhi = 0x0a36; - t.shalshelethebrew = 0x0593; - t.shbopomofo = 0x3115; - t.shchacyrillic = 0x0449; - t.sheenarabic = 0x0634; - t.sheenfinalarabic = 0xfeb6; - t.sheeninitialarabic = 0xfeb7; - t.sheenmedialarabic = 0xfeb8; - t.sheicoptic = 0x03e3; - t.sheqel = 0x20aa; - t.sheqelhebrew = 0x20aa; - t.sheva = 0x05b0; - t.sheva115 = 0x05b0; - t.sheva15 = 0x05b0; - t.sheva22 = 0x05b0; - t.sheva2e = 0x05b0; - t.shevahebrew = 0x05b0; - t.shevanarrowhebrew = 0x05b0; - t.shevaquarterhebrew = 0x05b0; - t.shevawidehebrew = 0x05b0; - t.shhacyrillic = 0x04bb; - t.shimacoptic = 0x03ed; - t.shin = 0x05e9; - t.shindagesh = 0xfb49; - t.shindageshhebrew = 0xfb49; - t.shindageshshindot = 0xfb2c; - t.shindageshshindothebrew = 0xfb2c; - t.shindageshsindot = 0xfb2d; - t.shindageshsindothebrew = 0xfb2d; - t.shindothebrew = 0x05c1; - t.shinhebrew = 0x05e9; - t.shinshindot = 0xfb2a; - t.shinshindothebrew = 0xfb2a; - t.shinsindot = 0xfb2b; - t.shinsindothebrew = 0xfb2b; - t.shook = 0x0282; - t.sigma = 0x03c3; - t.sigma1 = 0x03c2; - t.sigmafinal = 0x03c2; - t.sigmalunatesymbolgreek = 0x03f2; - t.sihiragana = 0x3057; - t.sikatakana = 0x30b7; - t.sikatakanahalfwidth = 0xff7c; - t.siluqhebrew = 0x05bd; - t.siluqlefthebrew = 0x05bd; - t.similar = 0x223c; - t.sindothebrew = 0x05c2; - t.siosacirclekorean = 0x3274; - t.siosaparenkorean = 0x3214; - t.sioscieuckorean = 0x317e; - t.sioscirclekorean = 0x3266; - t.sioskiyeokkorean = 0x317a; - t.sioskorean = 0x3145; - t.siosnieunkorean = 0x317b; - t.siosparenkorean = 0x3206; - t.siospieupkorean = 0x317d; - t.siostikeutkorean = 0x317c; - t.six = 0x0036; - t.sixarabic = 0x0666; - t.sixbengali = 0x09ec; - t.sixcircle = 0x2465; - t.sixcircleinversesansserif = 0x278f; - t.sixdeva = 0x096c; - t.sixgujarati = 0x0aec; - t.sixgurmukhi = 0x0a6c; - t.sixhackarabic = 0x0666; - t.sixhangzhou = 0x3026; - t.sixideographicparen = 0x3225; - t.sixinferior = 0x2086; - t.sixmonospace = 0xff16; - t.sixoldstyle = 0xf736; - t.sixparen = 0x2479; - t.sixperiod = 0x248d; - t.sixpersian = 0x06f6; - t.sixroman = 0x2175; - t.sixsuperior = 0x2076; - t.sixteencircle = 0x246f; - t.sixteencurrencydenominatorbengali = 0x09f9; - t.sixteenparen = 0x2483; - t.sixteenperiod = 0x2497; - t.sixthai = 0x0e56; - t.slash = 0x002f; - t.slashmonospace = 0xff0f; - t.slong = 0x017f; - t.slongdotaccent = 0x1e9b; - t.smileface = 0x263a; - t.smonospace = 0xff53; - t.sofpasuqhebrew = 0x05c3; - t.softhyphen = 0x00ad; - t.softsigncyrillic = 0x044c; - t.sohiragana = 0x305d; - t.sokatakana = 0x30bd; - t.sokatakanahalfwidth = 0xff7f; - t.soliduslongoverlaycmb = 0x0338; - t.solidusshortoverlaycmb = 0x0337; - t.sorusithai = 0x0e29; - t.sosalathai = 0x0e28; - t.sosothai = 0x0e0b; - t.sosuathai = 0x0e2a; - t.space = 0x0020; - t.spacehackarabic = 0x0020; - t.spade = 0x2660; - t.spadesuitblack = 0x2660; - t.spadesuitwhite = 0x2664; - t.sparen = 0x24ae; - t.squarebelowcmb = 0x033b; - t.squarecc = 0x33c4; - t.squarecm = 0x339d; - t.squarediagonalcrosshatchfill = 0x25a9; - t.squarehorizontalfill = 0x25a4; - t.squarekg = 0x338f; - t.squarekm = 0x339e; - t.squarekmcapital = 0x33ce; - t.squareln = 0x33d1; - t.squarelog = 0x33d2; - t.squaremg = 0x338e; - t.squaremil = 0x33d5; - t.squaremm = 0x339c; - t.squaremsquared = 0x33a1; - t.squareorthogonalcrosshatchfill = 0x25a6; - t.squareupperlefttolowerrightfill = 0x25a7; - t.squareupperrighttolowerleftfill = 0x25a8; - t.squareverticalfill = 0x25a5; - t.squarewhitewithsmallblack = 0x25a3; - t.srsquare = 0x33db; - t.ssabengali = 0x09b7; - t.ssadeva = 0x0937; - t.ssagujarati = 0x0ab7; - t.ssangcieuckorean = 0x3149; - t.ssanghieuhkorean = 0x3185; - t.ssangieungkorean = 0x3180; - t.ssangkiyeokkorean = 0x3132; - t.ssangnieunkorean = 0x3165; - t.ssangpieupkorean = 0x3143; - t.ssangsioskorean = 0x3146; - t.ssangtikeutkorean = 0x3138; - t.ssuperior = 0xf6f2; - t.sterling = 0x00a3; - t.sterlingmonospace = 0xffe1; - t.strokelongoverlaycmb = 0x0336; - t.strokeshortoverlaycmb = 0x0335; - t.subset = 0x2282; - t.subsetnotequal = 0x228a; - t.subsetorequal = 0x2286; - t.succeeds = 0x227b; - t.suchthat = 0x220b; - t.suhiragana = 0x3059; - t.sukatakana = 0x30b9; - t.sukatakanahalfwidth = 0xff7d; - t.sukunarabic = 0x0652; - t.summation = 0x2211; - t.sun = 0x263c; - t.superset = 0x2283; - t.supersetnotequal = 0x228b; - t.supersetorequal = 0x2287; - t.svsquare = 0x33dc; - t.syouwaerasquare = 0x337c; - t.t = 0x0074; - t.tabengali = 0x09a4; - t.tackdown = 0x22a4; - t.tackleft = 0x22a3; - t.tadeva = 0x0924; - t.tagujarati = 0x0aa4; - t.tagurmukhi = 0x0a24; - t.taharabic = 0x0637; - t.tahfinalarabic = 0xfec2; - t.tahinitialarabic = 0xfec3; - t.tahiragana = 0x305f; - t.tahmedialarabic = 0xfec4; - t.taisyouerasquare = 0x337d; - t.takatakana = 0x30bf; - t.takatakanahalfwidth = 0xff80; - t.tatweelarabic = 0x0640; - t.tau = 0x03c4; - t.tav = 0x05ea; - t.tavdages = 0xfb4a; - t.tavdagesh = 0xfb4a; - t.tavdageshhebrew = 0xfb4a; - t.tavhebrew = 0x05ea; - t.tbar = 0x0167; - t.tbopomofo = 0x310a; - t.tcaron = 0x0165; - t.tccurl = 0x02a8; - t.tcedilla = 0x0163; - t.tcheharabic = 0x0686; - t.tchehfinalarabic = 0xfb7b; - t.tchehinitialarabic = 0xfb7c; - t.tchehmedialarabic = 0xfb7d; - t.tcircle = 0x24e3; - t.tcircumflexbelow = 0x1e71; - t.tcommaaccent = 0x0163; - t.tdieresis = 0x1e97; - t.tdotaccent = 0x1e6b; - t.tdotbelow = 0x1e6d; - t.tecyrillic = 0x0442; - t.tedescendercyrillic = 0x04ad; - t.teharabic = 0x062a; - t.tehfinalarabic = 0xfe96; - t.tehhahinitialarabic = 0xfca2; - t.tehhahisolatedarabic = 0xfc0c; - t.tehinitialarabic = 0xfe97; - t.tehiragana = 0x3066; - t.tehjeeminitialarabic = 0xfca1; - t.tehjeemisolatedarabic = 0xfc0b; - t.tehmarbutaarabic = 0x0629; - t.tehmarbutafinalarabic = 0xfe94; - t.tehmedialarabic = 0xfe98; - t.tehmeeminitialarabic = 0xfca4; - t.tehmeemisolatedarabic = 0xfc0e; - t.tehnoonfinalarabic = 0xfc73; - t.tekatakana = 0x30c6; - t.tekatakanahalfwidth = 0xff83; - t.telephone = 0x2121; - t.telephoneblack = 0x260e; - t.telishagedolahebrew = 0x05a0; - t.telishaqetanahebrew = 0x05a9; - t.tencircle = 0x2469; - t.tenideographicparen = 0x3229; - t.tenparen = 0x247d; - t.tenperiod = 0x2491; - t.tenroman = 0x2179; - t.tesh = 0x02a7; - t.tet = 0x05d8; - t.tetdagesh = 0xfb38; - t.tetdageshhebrew = 0xfb38; - t.tethebrew = 0x05d8; - t.tetsecyrillic = 0x04b5; - t.tevirhebrew = 0x059b; - t.tevirlefthebrew = 0x059b; - t.thabengali = 0x09a5; - t.thadeva = 0x0925; - t.thagujarati = 0x0aa5; - t.thagurmukhi = 0x0a25; - t.thalarabic = 0x0630; - t.thalfinalarabic = 0xfeac; - t.thanthakhatlowleftthai = 0xf898; - t.thanthakhatlowrightthai = 0xf897; - t.thanthakhatthai = 0x0e4c; - t.thanthakhatupperleftthai = 0xf896; - t.theharabic = 0x062b; - t.thehfinalarabic = 0xfe9a; - t.thehinitialarabic = 0xfe9b; - t.thehmedialarabic = 0xfe9c; - t.thereexists = 0x2203; - t.therefore = 0x2234; - t.theta = 0x03b8; - t.theta1 = 0x03d1; - t.thetasymbolgreek = 0x03d1; - t.thieuthacirclekorean = 0x3279; - t.thieuthaparenkorean = 0x3219; - t.thieuthcirclekorean = 0x326b; - t.thieuthkorean = 0x314c; - t.thieuthparenkorean = 0x320b; - t.thirteencircle = 0x246c; - t.thirteenparen = 0x2480; - t.thirteenperiod = 0x2494; - t.thonangmonthothai = 0x0e11; - t.thook = 0x01ad; - t.thophuthaothai = 0x0e12; - t.thorn = 0x00fe; - t.thothahanthai = 0x0e17; - t.thothanthai = 0x0e10; - t.thothongthai = 0x0e18; - t.thothungthai = 0x0e16; - t.thousandcyrillic = 0x0482; - t.thousandsseparatorarabic = 0x066c; - t.thousandsseparatorpersian = 0x066c; - t.three = 0x0033; - t.threearabic = 0x0663; - t.threebengali = 0x09e9; - t.threecircle = 0x2462; - t.threecircleinversesansserif = 0x278c; - t.threedeva = 0x0969; - t.threeeighths = 0x215c; - t.threegujarati = 0x0ae9; - t.threegurmukhi = 0x0a69; - t.threehackarabic = 0x0663; - t.threehangzhou = 0x3023; - t.threeideographicparen = 0x3222; - t.threeinferior = 0x2083; - t.threemonospace = 0xff13; - t.threenumeratorbengali = 0x09f6; - t.threeoldstyle = 0xf733; - t.threeparen = 0x2476; - t.threeperiod = 0x248a; - t.threepersian = 0x06f3; - t.threequarters = 0x00be; - t.threequartersemdash = 0xf6de; - t.threeroman = 0x2172; - t.threesuperior = 0x00b3; - t.threethai = 0x0e53; - t.thzsquare = 0x3394; - t.tihiragana = 0x3061; - t.tikatakana = 0x30c1; - t.tikatakanahalfwidth = 0xff81; - t.tikeutacirclekorean = 0x3270; - t.tikeutaparenkorean = 0x3210; - t.tikeutcirclekorean = 0x3262; - t.tikeutkorean = 0x3137; - t.tikeutparenkorean = 0x3202; - t.tilde = 0x02dc; - t.tildebelowcmb = 0x0330; - t.tildecmb = 0x0303; - t.tildecomb = 0x0303; - t.tildedoublecmb = 0x0360; - t.tildeoperator = 0x223c; - t.tildeoverlaycmb = 0x0334; - t.tildeverticalcmb = 0x033e; - t.timescircle = 0x2297; - t.tipehahebrew = 0x0596; - t.tipehalefthebrew = 0x0596; - t.tippigurmukhi = 0x0a70; - t.titlocyrilliccmb = 0x0483; - t.tiwnarmenian = 0x057f; - t.tlinebelow = 0x1e6f; - t.tmonospace = 0xff54; - t.toarmenian = 0x0569; - t.tohiragana = 0x3068; - t.tokatakana = 0x30c8; - t.tokatakanahalfwidth = 0xff84; - t.tonebarextrahighmod = 0x02e5; - t.tonebarextralowmod = 0x02e9; - t.tonebarhighmod = 0x02e6; - t.tonebarlowmod = 0x02e8; - t.tonebarmidmod = 0x02e7; - t.tonefive = 0x01bd; - t.tonesix = 0x0185; - t.tonetwo = 0x01a8; - t.tonos = 0x0384; - t.tonsquare = 0x3327; - t.topatakthai = 0x0e0f; - t.tortoiseshellbracketleft = 0x3014; - t.tortoiseshellbracketleftsmall = 0xfe5d; - t.tortoiseshellbracketleftvertical = 0xfe39; - t.tortoiseshellbracketright = 0x3015; - t.tortoiseshellbracketrightsmall = 0xfe5e; - t.tortoiseshellbracketrightvertical = 0xfe3a; - t.totaothai = 0x0e15; - t.tpalatalhook = 0x01ab; - t.tparen = 0x24af; - t.trademark = 0x2122; - t.trademarksans = 0xf8ea; - t.trademarkserif = 0xf6db; - t.tretroflexhook = 0x0288; - t.triagdn = 0x25bc; - t.triaglf = 0x25c4; - t.triagrt = 0x25ba; - t.triagup = 0x25b2; - t.ts = 0x02a6; - t.tsadi = 0x05e6; - t.tsadidagesh = 0xfb46; - t.tsadidageshhebrew = 0xfb46; - t.tsadihebrew = 0x05e6; - t.tsecyrillic = 0x0446; - t.tsere = 0x05b5; - t.tsere12 = 0x05b5; - t.tsere1e = 0x05b5; - t.tsere2b = 0x05b5; - t.tserehebrew = 0x05b5; - t.tserenarrowhebrew = 0x05b5; - t.tserequarterhebrew = 0x05b5; - t.tserewidehebrew = 0x05b5; - t.tshecyrillic = 0x045b; - t.tsuperior = 0xf6f3; - t.ttabengali = 0x099f; - t.ttadeva = 0x091f; - t.ttagujarati = 0x0a9f; - t.ttagurmukhi = 0x0a1f; - t.tteharabic = 0x0679; - t.ttehfinalarabic = 0xfb67; - t.ttehinitialarabic = 0xfb68; - t.ttehmedialarabic = 0xfb69; - t.tthabengali = 0x09a0; - t.tthadeva = 0x0920; - t.tthagujarati = 0x0aa0; - t.tthagurmukhi = 0x0a20; - t.tturned = 0x0287; - t.tuhiragana = 0x3064; - t.tukatakana = 0x30c4; - t.tukatakanahalfwidth = 0xff82; - t.tusmallhiragana = 0x3063; - t.tusmallkatakana = 0x30c3; - t.tusmallkatakanahalfwidth = 0xff6f; - t.twelvecircle = 0x246b; - t.twelveparen = 0x247f; - t.twelveperiod = 0x2493; - t.twelveroman = 0x217b; - t.twentycircle = 0x2473; - t.twentyhangzhou = 0x5344; - t.twentyparen = 0x2487; - t.twentyperiod = 0x249b; - t.two = 0x0032; - t.twoarabic = 0x0662; - t.twobengali = 0x09e8; - t.twocircle = 0x2461; - t.twocircleinversesansserif = 0x278b; - t.twodeva = 0x0968; - t.twodotenleader = 0x2025; - t.twodotleader = 0x2025; - t.twodotleadervertical = 0xfe30; - t.twogujarati = 0x0ae8; - t.twogurmukhi = 0x0a68; - t.twohackarabic = 0x0662; - t.twohangzhou = 0x3022; - t.twoideographicparen = 0x3221; - t.twoinferior = 0x2082; - t.twomonospace = 0xff12; - t.twonumeratorbengali = 0x09f5; - t.twooldstyle = 0xf732; - t.twoparen = 0x2475; - t.twoperiod = 0x2489; - t.twopersian = 0x06f2; - t.tworoman = 0x2171; - t.twostroke = 0x01bb; - t.twosuperior = 0x00b2; - t.twothai = 0x0e52; - t.twothirds = 0x2154; - t.u = 0x0075; - t.uacute = 0x00fa; - t.ubar = 0x0289; - t.ubengali = 0x0989; - t.ubopomofo = 0x3128; - t.ubreve = 0x016d; - t.ucaron = 0x01d4; - t.ucircle = 0x24e4; - t.ucircumflex = 0x00fb; - t.ucircumflexbelow = 0x1e77; - t.ucyrillic = 0x0443; - t.udattadeva = 0x0951; - t.udblacute = 0x0171; - t.udblgrave = 0x0215; - t.udeva = 0x0909; - t.udieresis = 0x00fc; - t.udieresisacute = 0x01d8; - t.udieresisbelow = 0x1e73; - t.udieresiscaron = 0x01da; - t.udieresiscyrillic = 0x04f1; - t.udieresisgrave = 0x01dc; - t.udieresismacron = 0x01d6; - t.udotbelow = 0x1ee5; - t.ugrave = 0x00f9; - t.ugujarati = 0x0a89; - t.ugurmukhi = 0x0a09; - t.uhiragana = 0x3046; - t.uhookabove = 0x1ee7; - t.uhorn = 0x01b0; - t.uhornacute = 0x1ee9; - t.uhorndotbelow = 0x1ef1; - t.uhorngrave = 0x1eeb; - t.uhornhookabove = 0x1eed; - t.uhorntilde = 0x1eef; - t.uhungarumlaut = 0x0171; - t.uhungarumlautcyrillic = 0x04f3; - t.uinvertedbreve = 0x0217; - t.ukatakana = 0x30a6; - t.ukatakanahalfwidth = 0xff73; - t.ukcyrillic = 0x0479; - t.ukorean = 0x315c; - t.umacron = 0x016b; - t.umacroncyrillic = 0x04ef; - t.umacrondieresis = 0x1e7b; - t.umatragurmukhi = 0x0a41; - t.umonospace = 0xff55; - t.underscore = 0x005f; - t.underscoredbl = 0x2017; - t.underscoremonospace = 0xff3f; - t.underscorevertical = 0xfe33; - t.underscorewavy = 0xfe4f; - t.union = 0x222a; - t.universal = 0x2200; - t.uogonek = 0x0173; - t.uparen = 0x24b0; - t.upblock = 0x2580; - t.upperdothebrew = 0x05c4; - t.upsilon = 0x03c5; - t.upsilondieresis = 0x03cb; - t.upsilondieresistonos = 0x03b0; - t.upsilonlatin = 0x028a; - t.upsilontonos = 0x03cd; - t.uptackbelowcmb = 0x031d; - t.uptackmod = 0x02d4; - t.uragurmukhi = 0x0a73; - t.uring = 0x016f; - t.ushortcyrillic = 0x045e; - t.usmallhiragana = 0x3045; - t.usmallkatakana = 0x30a5; - t.usmallkatakanahalfwidth = 0xff69; - t.ustraightcyrillic = 0x04af; - t.ustraightstrokecyrillic = 0x04b1; - t.utilde = 0x0169; - t.utildeacute = 0x1e79; - t.utildebelow = 0x1e75; - t.uubengali = 0x098a; - t.uudeva = 0x090a; - t.uugujarati = 0x0a8a; - t.uugurmukhi = 0x0a0a; - t.uumatragurmukhi = 0x0a42; - t.uuvowelsignbengali = 0x09c2; - t.uuvowelsigndeva = 0x0942; - t.uuvowelsigngujarati = 0x0ac2; - t.uvowelsignbengali = 0x09c1; - t.uvowelsigndeva = 0x0941; - t.uvowelsigngujarati = 0x0ac1; - t.v = 0x0076; - t.vadeva = 0x0935; - t.vagujarati = 0x0ab5; - t.vagurmukhi = 0x0a35; - t.vakatakana = 0x30f7; - t.vav = 0x05d5; - t.vavdagesh = 0xfb35; - t.vavdagesh65 = 0xfb35; - t.vavdageshhebrew = 0xfb35; - t.vavhebrew = 0x05d5; - t.vavholam = 0xfb4b; - t.vavholamhebrew = 0xfb4b; - t.vavvavhebrew = 0x05f0; - t.vavyodhebrew = 0x05f1; - t.vcircle = 0x24e5; - t.vdotbelow = 0x1e7f; - t.vecyrillic = 0x0432; - t.veharabic = 0x06a4; - t.vehfinalarabic = 0xfb6b; - t.vehinitialarabic = 0xfb6c; - t.vehmedialarabic = 0xfb6d; - t.vekatakana = 0x30f9; - t.venus = 0x2640; - t.verticalbar = 0x007c; - t.verticallineabovecmb = 0x030d; - t.verticallinebelowcmb = 0x0329; - t.verticallinelowmod = 0x02cc; - t.verticallinemod = 0x02c8; - t.vewarmenian = 0x057e; - t.vhook = 0x028b; - t.vikatakana = 0x30f8; - t.viramabengali = 0x09cd; - t.viramadeva = 0x094d; - t.viramagujarati = 0x0acd; - t.visargabengali = 0x0983; - t.visargadeva = 0x0903; - t.visargagujarati = 0x0a83; - t.vmonospace = 0xff56; - t.voarmenian = 0x0578; - t.voicediterationhiragana = 0x309e; - t.voicediterationkatakana = 0x30fe; - t.voicedmarkkana = 0x309b; - t.voicedmarkkanahalfwidth = 0xff9e; - t.vokatakana = 0x30fa; - t.vparen = 0x24b1; - t.vtilde = 0x1e7d; - t.vturned = 0x028c; - t.vuhiragana = 0x3094; - t.vukatakana = 0x30f4; - t.w = 0x0077; - t.wacute = 0x1e83; - t.waekorean = 0x3159; - t.wahiragana = 0x308f; - t.wakatakana = 0x30ef; - t.wakatakanahalfwidth = 0xff9c; - t.wakorean = 0x3158; - t.wasmallhiragana = 0x308e; - t.wasmallkatakana = 0x30ee; - t.wattosquare = 0x3357; - t.wavedash = 0x301c; - t.wavyunderscorevertical = 0xfe34; - t.wawarabic = 0x0648; - t.wawfinalarabic = 0xfeee; - t.wawhamzaabovearabic = 0x0624; - t.wawhamzaabovefinalarabic = 0xfe86; - t.wbsquare = 0x33dd; - t.wcircle = 0x24e6; - t.wcircumflex = 0x0175; - t.wdieresis = 0x1e85; - t.wdotaccent = 0x1e87; - t.wdotbelow = 0x1e89; - t.wehiragana = 0x3091; - t.weierstrass = 0x2118; - t.wekatakana = 0x30f1; - t.wekorean = 0x315e; - t.weokorean = 0x315d; - t.wgrave = 0x1e81; - t.whitebullet = 0x25e6; - t.whitecircle = 0x25cb; - t.whitecircleinverse = 0x25d9; - t.whitecornerbracketleft = 0x300e; - t.whitecornerbracketleftvertical = 0xfe43; - t.whitecornerbracketright = 0x300f; - t.whitecornerbracketrightvertical = 0xfe44; - t.whitediamond = 0x25c7; - t.whitediamondcontainingblacksmalldiamond = 0x25c8; - t.whitedownpointingsmalltriangle = 0x25bf; - t.whitedownpointingtriangle = 0x25bd; - t.whiteleftpointingsmalltriangle = 0x25c3; - t.whiteleftpointingtriangle = 0x25c1; - t.whitelenticularbracketleft = 0x3016; - t.whitelenticularbracketright = 0x3017; - t.whiterightpointingsmalltriangle = 0x25b9; - t.whiterightpointingtriangle = 0x25b7; - t.whitesmallsquare = 0x25ab; - t.whitesmilingface = 0x263a; - t.whitesquare = 0x25a1; - t.whitestar = 0x2606; - t.whitetelephone = 0x260f; - t.whitetortoiseshellbracketleft = 0x3018; - t.whitetortoiseshellbracketright = 0x3019; - t.whiteuppointingsmalltriangle = 0x25b5; - t.whiteuppointingtriangle = 0x25b3; - t.wihiragana = 0x3090; - t.wikatakana = 0x30f0; - t.wikorean = 0x315f; - t.wmonospace = 0xff57; - t.wohiragana = 0x3092; - t.wokatakana = 0x30f2; - t.wokatakanahalfwidth = 0xff66; - t.won = 0x20a9; - t.wonmonospace = 0xffe6; - t.wowaenthai = 0x0e27; - t.wparen = 0x24b2; - t.wring = 0x1e98; - t.wsuperior = 0x02b7; - t.wturned = 0x028d; - t.wynn = 0x01bf; - t.x = 0x0078; - t.xabovecmb = 0x033d; - t.xbopomofo = 0x3112; - t.xcircle = 0x24e7; - t.xdieresis = 0x1e8d; - t.xdotaccent = 0x1e8b; - t.xeharmenian = 0x056d; - t.xi = 0x03be; - t.xmonospace = 0xff58; - t.xparen = 0x24b3; - t.xsuperior = 0x02e3; - t.y = 0x0079; - t.yaadosquare = 0x334e; - t.yabengali = 0x09af; - t.yacute = 0x00fd; - t.yadeva = 0x092f; - t.yaekorean = 0x3152; - t.yagujarati = 0x0aaf; - t.yagurmukhi = 0x0a2f; - t.yahiragana = 0x3084; - t.yakatakana = 0x30e4; - t.yakatakanahalfwidth = 0xff94; - t.yakorean = 0x3151; - t.yamakkanthai = 0x0e4e; - t.yasmallhiragana = 0x3083; - t.yasmallkatakana = 0x30e3; - t.yasmallkatakanahalfwidth = 0xff6c; - t.yatcyrillic = 0x0463; - t.ycircle = 0x24e8; - t.ycircumflex = 0x0177; - t.ydieresis = 0x00ff; - t.ydotaccent = 0x1e8f; - t.ydotbelow = 0x1ef5; - t.yeharabic = 0x064a; - t.yehbarreearabic = 0x06d2; - t.yehbarreefinalarabic = 0xfbaf; - t.yehfinalarabic = 0xfef2; - t.yehhamzaabovearabic = 0x0626; - t.yehhamzaabovefinalarabic = 0xfe8a; - t.yehhamzaaboveinitialarabic = 0xfe8b; - t.yehhamzaabovemedialarabic = 0xfe8c; - t.yehinitialarabic = 0xfef3; - t.yehmedialarabic = 0xfef4; - t.yehmeeminitialarabic = 0xfcdd; - t.yehmeemisolatedarabic = 0xfc58; - t.yehnoonfinalarabic = 0xfc94; - t.yehthreedotsbelowarabic = 0x06d1; - t.yekorean = 0x3156; - t.yen = 0x00a5; - t.yenmonospace = 0xffe5; - t.yeokorean = 0x3155; - t.yeorinhieuhkorean = 0x3186; - t.yerahbenyomohebrew = 0x05aa; - t.yerahbenyomolefthebrew = 0x05aa; - t.yericyrillic = 0x044b; - t.yerudieresiscyrillic = 0x04f9; - t.yesieungkorean = 0x3181; - t.yesieungpansioskorean = 0x3183; - t.yesieungsioskorean = 0x3182; - t.yetivhebrew = 0x059a; - t.ygrave = 0x1ef3; - t.yhook = 0x01b4; - t.yhookabove = 0x1ef7; - t.yiarmenian = 0x0575; - t.yicyrillic = 0x0457; - t.yikorean = 0x3162; - t.yinyang = 0x262f; - t.yiwnarmenian = 0x0582; - t.ymonospace = 0xff59; - t.yod = 0x05d9; - t.yoddagesh = 0xfb39; - t.yoddageshhebrew = 0xfb39; - t.yodhebrew = 0x05d9; - t.yodyodhebrew = 0x05f2; - t.yodyodpatahhebrew = 0xfb1f; - t.yohiragana = 0x3088; - t.yoikorean = 0x3189; - t.yokatakana = 0x30e8; - t.yokatakanahalfwidth = 0xff96; - t.yokorean = 0x315b; - t.yosmallhiragana = 0x3087; - t.yosmallkatakana = 0x30e7; - t.yosmallkatakanahalfwidth = 0xff6e; - t.yotgreek = 0x03f3; - t.yoyaekorean = 0x3188; - t.yoyakorean = 0x3187; - t.yoyakthai = 0x0e22; - t.yoyingthai = 0x0e0d; - t.yparen = 0x24b4; - t.ypogegrammeni = 0x037a; - t.ypogegrammenigreekcmb = 0x0345; - t.yr = 0x01a6; - t.yring = 0x1e99; - t.ysuperior = 0x02b8; - t.ytilde = 0x1ef9; - t.yturned = 0x028e; - t.yuhiragana = 0x3086; - t.yuikorean = 0x318c; - t.yukatakana = 0x30e6; - t.yukatakanahalfwidth = 0xff95; - t.yukorean = 0x3160; - t.yusbigcyrillic = 0x046b; - t.yusbigiotifiedcyrillic = 0x046d; - t.yuslittlecyrillic = 0x0467; - t.yuslittleiotifiedcyrillic = 0x0469; - t.yusmallhiragana = 0x3085; - t.yusmallkatakana = 0x30e5; - t.yusmallkatakanahalfwidth = 0xff6d; - t.yuyekorean = 0x318b; - t.yuyeokorean = 0x318a; - t.yyabengali = 0x09df; - t.yyadeva = 0x095f; - t.z = 0x007a; - t.zaarmenian = 0x0566; - t.zacute = 0x017a; - t.zadeva = 0x095b; - t.zagurmukhi = 0x0a5b; - t.zaharabic = 0x0638; - t.zahfinalarabic = 0xfec6; - t.zahinitialarabic = 0xfec7; - t.zahiragana = 0x3056; - t.zahmedialarabic = 0xfec8; - t.zainarabic = 0x0632; - t.zainfinalarabic = 0xfeb0; - t.zakatakana = 0x30b6; - t.zaqefgadolhebrew = 0x0595; - t.zaqefqatanhebrew = 0x0594; - t.zarqahebrew = 0x0598; - t.zayin = 0x05d6; - t.zayindagesh = 0xfb36; - t.zayindageshhebrew = 0xfb36; - t.zayinhebrew = 0x05d6; - t.zbopomofo = 0x3117; - t.zcaron = 0x017e; - t.zcircle = 0x24e9; - t.zcircumflex = 0x1e91; - t.zcurl = 0x0291; - t.zdot = 0x017c; - t.zdotaccent = 0x017c; - t.zdotbelow = 0x1e93; - t.zecyrillic = 0x0437; - t.zedescendercyrillic = 0x0499; - t.zedieresiscyrillic = 0x04df; - t.zehiragana = 0x305c; - t.zekatakana = 0x30bc; - t.zero = 0x0030; - t.zeroarabic = 0x0660; - t.zerobengali = 0x09e6; - t.zerodeva = 0x0966; - t.zerogujarati = 0x0ae6; - t.zerogurmukhi = 0x0a66; - t.zerohackarabic = 0x0660; - t.zeroinferior = 0x2080; - t.zeromonospace = 0xff10; - t.zerooldstyle = 0xf730; - t.zeropersian = 0x06f0; - t.zerosuperior = 0x2070; - t.zerothai = 0x0e50; - t.zerowidthjoiner = 0xfeff; - t.zerowidthnonjoiner = 0x200c; - t.zerowidthspace = 0x200b; - t.zeta = 0x03b6; - t.zhbopomofo = 0x3113; - t.zhearmenian = 0x056a; - t.zhebrevecyrillic = 0x04c2; - t.zhecyrillic = 0x0436; - t.zhedescendercyrillic = 0x0497; - t.zhedieresiscyrillic = 0x04dd; - t.zihiragana = 0x3058; - t.zikatakana = 0x30b8; - t.zinorhebrew = 0x05ae; - t.zlinebelow = 0x1e95; - t.zmonospace = 0xff5a; - t.zohiragana = 0x305e; - t.zokatakana = 0x30be; - t.zparen = 0x24b5; - t.zretroflexhook = 0x0290; - t.zstroke = 0x01b6; - t.zuhiragana = 0x305a; - t.zukatakana = 0x30ba; - t[".notdef"] = 0x0000; - t.angbracketleftbig = 0x2329; - t.angbracketleftBig = 0x2329; - t.angbracketleftbigg = 0x2329; - t.angbracketleftBigg = 0x2329; - t.angbracketrightBig = 0x232a; - t.angbracketrightbig = 0x232a; - t.angbracketrightBigg = 0x232a; - t.angbracketrightbigg = 0x232a; - t.arrowhookleft = 0x21aa; - t.arrowhookright = 0x21a9; - t.arrowlefttophalf = 0x21bc; - t.arrowleftbothalf = 0x21bd; - t.arrownortheast = 0x2197; - t.arrownorthwest = 0x2196; - t.arrowrighttophalf = 0x21c0; - t.arrowrightbothalf = 0x21c1; - t.arrowsoutheast = 0x2198; - t.arrowsouthwest = 0x2199; - t.backslashbig = 0x2216; - t.backslashBig = 0x2216; - t.backslashBigg = 0x2216; - t.backslashbigg = 0x2216; - t.bardbl = 0x2016; - t.bracehtipdownleft = 0xfe37; - t.bracehtipdownright = 0xfe37; - t.bracehtipupleft = 0xfe38; - t.bracehtipupright = 0xfe38; - t.braceleftBig = 0x007b; - t.braceleftbig = 0x007b; - t.braceleftbigg = 0x007b; - t.braceleftBigg = 0x007b; - t.bracerightBig = 0x007d; - t.bracerightbig = 0x007d; - t.bracerightbigg = 0x007d; - t.bracerightBigg = 0x007d; - t.bracketleftbig = 0x005b; - t.bracketleftBig = 0x005b; - t.bracketleftbigg = 0x005b; - t.bracketleftBigg = 0x005b; - t.bracketrightBig = 0x005d; - t.bracketrightbig = 0x005d; - t.bracketrightbigg = 0x005d; - t.bracketrightBigg = 0x005d; - t.ceilingleftbig = 0x2308; - t.ceilingleftBig = 0x2308; - t.ceilingleftBigg = 0x2308; - t.ceilingleftbigg = 0x2308; - t.ceilingrightbig = 0x2309; - t.ceilingrightBig = 0x2309; - t.ceilingrightbigg = 0x2309; - t.ceilingrightBigg = 0x2309; - t.circledotdisplay = 0x2299; - t.circledottext = 0x2299; - t.circlemultiplydisplay = 0x2297; - t.circlemultiplytext = 0x2297; - t.circleplusdisplay = 0x2295; - t.circleplustext = 0x2295; - t.contintegraldisplay = 0x222e; - t.contintegraltext = 0x222e; - t.coproductdisplay = 0x2210; - t.coproducttext = 0x2210; - t.floorleftBig = 0x230a; - t.floorleftbig = 0x230a; - t.floorleftbigg = 0x230a; - t.floorleftBigg = 0x230a; - t.floorrightbig = 0x230b; - t.floorrightBig = 0x230b; - t.floorrightBigg = 0x230b; - t.floorrightbigg = 0x230b; - t.hatwide = 0x0302; - t.hatwider = 0x0302; - t.hatwidest = 0x0302; - t.intercal = 0x1d40; - t.integraldisplay = 0x222b; - t.integraltext = 0x222b; - t.intersectiondisplay = 0x22c2; - t.intersectiontext = 0x22c2; - t.logicalanddisplay = 0x2227; - t.logicalandtext = 0x2227; - t.logicalordisplay = 0x2228; - t.logicalortext = 0x2228; - t.parenleftBig = 0x0028; - t.parenleftbig = 0x0028; - t.parenleftBigg = 0x0028; - t.parenleftbigg = 0x0028; - t.parenrightBig = 0x0029; - t.parenrightbig = 0x0029; - t.parenrightBigg = 0x0029; - t.parenrightbigg = 0x0029; - t.prime = 0x2032; - t.productdisplay = 0x220f; - t.producttext = 0x220f; - t.radicalbig = 0x221a; - t.radicalBig = 0x221a; - t.radicalBigg = 0x221a; - t.radicalbigg = 0x221a; - t.radicalbt = 0x221a; - t.radicaltp = 0x221a; - t.radicalvertex = 0x221a; - t.slashbig = 0x002f; - t.slashBig = 0x002f; - t.slashBigg = 0x002f; - t.slashbigg = 0x002f; - t.summationdisplay = 0x2211; - t.summationtext = 0x2211; - t.tildewide = 0x02dc; - t.tildewider = 0x02dc; - t.tildewidest = 0x02dc; - t.uniondisplay = 0x22c3; - t.unionmultidisplay = 0x228e; - t.unionmultitext = 0x228e; - t.unionsqdisplay = 0x2294; - t.unionsqtext = 0x2294; - t.uniontext = 0x22c3; - t.vextenddouble = 0x2225; - t.vextendsingle = 0x2223; -}); -exports.getGlyphsUnicode = getGlyphsUnicode; -const getDingbatsGlyphsUnicode = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 0x0020; - t.a1 = 0x2701; - t.a2 = 0x2702; - t.a202 = 0x2703; - t.a3 = 0x2704; - t.a4 = 0x260e; - t.a5 = 0x2706; - t.a119 = 0x2707; - t.a118 = 0x2708; - t.a117 = 0x2709; - t.a11 = 0x261b; - t.a12 = 0x261e; - t.a13 = 0x270c; - t.a14 = 0x270d; - t.a15 = 0x270e; - t.a16 = 0x270f; - t.a105 = 0x2710; - t.a17 = 0x2711; - t.a18 = 0x2712; - t.a19 = 0x2713; - t.a20 = 0x2714; - t.a21 = 0x2715; - t.a22 = 0x2716; - t.a23 = 0x2717; - t.a24 = 0x2718; - t.a25 = 0x2719; - t.a26 = 0x271a; - t.a27 = 0x271b; - t.a28 = 0x271c; - t.a6 = 0x271d; - t.a7 = 0x271e; - t.a8 = 0x271f; - t.a9 = 0x2720; - t.a10 = 0x2721; - t.a29 = 0x2722; - t.a30 = 0x2723; - t.a31 = 0x2724; - t.a32 = 0x2725; - t.a33 = 0x2726; - t.a34 = 0x2727; - t.a35 = 0x2605; - t.a36 = 0x2729; - t.a37 = 0x272a; - t.a38 = 0x272b; - t.a39 = 0x272c; - t.a40 = 0x272d; - t.a41 = 0x272e; - t.a42 = 0x272f; - t.a43 = 0x2730; - t.a44 = 0x2731; - t.a45 = 0x2732; - t.a46 = 0x2733; - t.a47 = 0x2734; - t.a48 = 0x2735; - t.a49 = 0x2736; - t.a50 = 0x2737; - t.a51 = 0x2738; - t.a52 = 0x2739; - t.a53 = 0x273a; - t.a54 = 0x273b; - t.a55 = 0x273c; - t.a56 = 0x273d; - t.a57 = 0x273e; - t.a58 = 0x273f; - t.a59 = 0x2740; - t.a60 = 0x2741; - t.a61 = 0x2742; - t.a62 = 0x2743; - t.a63 = 0x2744; - t.a64 = 0x2745; - t.a65 = 0x2746; - t.a66 = 0x2747; - t.a67 = 0x2748; - t.a68 = 0x2749; - t.a69 = 0x274a; - t.a70 = 0x274b; - t.a71 = 0x25cf; - t.a72 = 0x274d; - t.a73 = 0x25a0; - t.a74 = 0x274f; - t.a203 = 0x2750; - t.a75 = 0x2751; - t.a204 = 0x2752; - t.a76 = 0x25b2; - t.a77 = 0x25bc; - t.a78 = 0x25c6; - t.a79 = 0x2756; - t.a81 = 0x25d7; - t.a82 = 0x2758; - t.a83 = 0x2759; - t.a84 = 0x275a; - t.a97 = 0x275b; - t.a98 = 0x275c; - t.a99 = 0x275d; - t.a100 = 0x275e; - t.a101 = 0x2761; - t.a102 = 0x2762; - t.a103 = 0x2763; - t.a104 = 0x2764; - t.a106 = 0x2765; - t.a107 = 0x2766; - t.a108 = 0x2767; - t.a112 = 0x2663; - t.a111 = 0x2666; - t.a110 = 0x2665; - t.a109 = 0x2660; - t.a120 = 0x2460; - t.a121 = 0x2461; - t.a122 = 0x2462; - t.a123 = 0x2463; - t.a124 = 0x2464; - t.a125 = 0x2465; - t.a126 = 0x2466; - t.a127 = 0x2467; - t.a128 = 0x2468; - t.a129 = 0x2469; - t.a130 = 0x2776; - t.a131 = 0x2777; - t.a132 = 0x2778; - t.a133 = 0x2779; - t.a134 = 0x277a; - t.a135 = 0x277b; - t.a136 = 0x277c; - t.a137 = 0x277d; - t.a138 = 0x277e; - t.a139 = 0x277f; - t.a140 = 0x2780; - t.a141 = 0x2781; - t.a142 = 0x2782; - t.a143 = 0x2783; - t.a144 = 0x2784; - t.a145 = 0x2785; - t.a146 = 0x2786; - t.a147 = 0x2787; - t.a148 = 0x2788; - t.a149 = 0x2789; - t.a150 = 0x278a; - t.a151 = 0x278b; - t.a152 = 0x278c; - t.a153 = 0x278d; - t.a154 = 0x278e; - t.a155 = 0x278f; - t.a156 = 0x2790; - t.a157 = 0x2791; - t.a158 = 0x2792; - t.a159 = 0x2793; - t.a160 = 0x2794; - t.a161 = 0x2192; - t.a163 = 0x2194; - t.a164 = 0x2195; - t.a196 = 0x2798; - t.a165 = 0x2799; - t.a192 = 0x279a; - t.a166 = 0x279b; - t.a167 = 0x279c; - t.a168 = 0x279d; - t.a169 = 0x279e; - t.a170 = 0x279f; - t.a171 = 0x27a0; - t.a172 = 0x27a1; - t.a173 = 0x27a2; - t.a162 = 0x27a3; - t.a174 = 0x27a4; - t.a175 = 0x27a5; - t.a176 = 0x27a6; - t.a177 = 0x27a7; - t.a178 = 0x27a8; - t.a179 = 0x27a9; - t.a193 = 0x27aa; - t.a180 = 0x27ab; - t.a199 = 0x27ac; - t.a181 = 0x27ad; - t.a200 = 0x27ae; - t.a182 = 0x27af; - t.a201 = 0x27b1; - t.a183 = 0x27b2; - t.a184 = 0x27b3; - t.a197 = 0x27b4; - t.a185 = 0x27b5; - t.a194 = 0x27b6; - t.a198 = 0x27b7; - t.a186 = 0x27b8; - t.a195 = 0x27b9; - t.a187 = 0x27ba; - t.a188 = 0x27bb; - t.a189 = 0x27bc; - t.a190 = 0x27bd; - t.a191 = 0x27be; - t.a89 = 0x2768; - t.a90 = 0x2769; - t.a93 = 0x276a; - t.a94 = 0x276b; - t.a91 = 0x276c; - t.a92 = 0x276d; - t.a205 = 0x276e; - t.a85 = 0x276f; - t.a206 = 0x2770; - t.a86 = 0x2771; - t.a87 = 0x2772; - t.a88 = 0x2773; - t.a95 = 0x2774; - t.a96 = 0x2775; - t[".notdef"] = 0x0000; -}); -exports.getDingbatsGlyphsUnicode = getDingbatsGlyphsUnicode; - -/***/ }), -/* 40 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.clearUnicodeCaches = clearUnicodeCaches; -exports.getCharUnicodeCategory = getCharUnicodeCategory; -exports.getUnicodeForGlyph = getUnicodeForGlyph; -exports.getUnicodeRangeFor = getUnicodeRangeFor; -exports.mapSpecialUnicodeValues = mapSpecialUnicodeValues; -var _core_utils = __w_pdfjs_require__(3); -const getSpecialPUASymbols = (0, _core_utils.getLookupTableFactory)(function (t) { - t[63721] = 0x00a9; - t[63193] = 0x00a9; - t[63720] = 0x00ae; - t[63194] = 0x00ae; - t[63722] = 0x2122; - t[63195] = 0x2122; - t[63729] = 0x23a7; - t[63730] = 0x23a8; - t[63731] = 0x23a9; - t[63740] = 0x23ab; - t[63741] = 0x23ac; - t[63742] = 0x23ad; - t[63726] = 0x23a1; - t[63727] = 0x23a2; - t[63728] = 0x23a3; - t[63737] = 0x23a4; - t[63738] = 0x23a5; - t[63739] = 0x23a6; - t[63723] = 0x239b; - t[63724] = 0x239c; - t[63725] = 0x239d; - t[63734] = 0x239e; - t[63735] = 0x239f; - t[63736] = 0x23a0; -}); -function mapSpecialUnicodeValues(code) { - if (code >= 0xfff0 && code <= 0xffff) { - return 0; - } else if (code >= 0xf600 && code <= 0xf8ff) { - return getSpecialPUASymbols()[code] || code; - } else if (code === 0x00ad) { - return 0x002d; - } - return code; -} -function getUnicodeForGlyph(name, glyphsUnicodeMap) { - let unicode = glyphsUnicodeMap[name]; - if (unicode !== undefined) { - return unicode; - } - if (!name) { - return -1; - } - if (name[0] === "u") { - const nameLen = name.length; - let hexStr; - if (nameLen === 7 && name[1] === "n" && name[2] === "i") { - hexStr = name.substring(3); - } else if (nameLen >= 5 && nameLen <= 7) { - hexStr = name.substring(1); - } else { - return -1; - } - if (hexStr === hexStr.toUpperCase()) { - unicode = parseInt(hexStr, 16); - if (unicode >= 0) { - return unicode; - } - } - } - return -1; -} -const UnicodeRanges = [[0x0000, 0x007f], [0x0080, 0x00ff], [0x0100, 0x017f], [0x0180, 0x024f], [0x0250, 0x02af, 0x1d00, 0x1d7f, 0x1d80, 0x1dbf], [0x02b0, 0x02ff, 0xa700, 0xa71f], [0x0300, 0x036f, 0x1dc0, 0x1dff], [0x0370, 0x03ff], [0x2c80, 0x2cff], [0x0400, 0x04ff, 0x0500, 0x052f, 0x2de0, 0x2dff, 0xa640, 0xa69f], [0x0530, 0x058f], [0x0590, 0x05ff], [0xa500, 0xa63f], [0x0600, 0x06ff, 0x0750, 0x077f], [0x07c0, 0x07ff], [0x0900, 0x097f], [0x0980, 0x09ff], [0x0a00, 0x0a7f], [0x0a80, 0x0aff], [0x0b00, 0x0b7f], [0x0b80, 0x0bff], [0x0c00, 0x0c7f], [0x0c80, 0x0cff], [0x0d00, 0x0d7f], [0x0e00, 0x0e7f], [0x0e80, 0x0eff], [0x10a0, 0x10ff, 0x2d00, 0x2d2f], [0x1b00, 0x1b7f], [0x1100, 0x11ff], [0x1e00, 0x1eff, 0x2c60, 0x2c7f, 0xa720, 0xa7ff], [0x1f00, 0x1fff], [0x2000, 0x206f, 0x2e00, 0x2e7f], [0x2070, 0x209f], [0x20a0, 0x20cf], [0x20d0, 0x20ff], [0x2100, 0x214f], [0x2150, 0x218f], [0x2190, 0x21ff, 0x27f0, 0x27ff, 0x2900, 0x297f, 0x2b00, 0x2bff], [0x2200, 0x22ff, 0x2a00, 0x2aff, 0x27c0, 0x27ef, 0x2980, 0x29ff], [0x2300, 0x23ff], [0x2400, 0x243f], [0x2440, 0x245f], [0x2460, 0x24ff], [0x2500, 0x257f], [0x2580, 0x259f], [0x25a0, 0x25ff], [0x2600, 0x26ff], [0x2700, 0x27bf], [0x3000, 0x303f], [0x3040, 0x309f], [0x30a0, 0x30ff, 0x31f0, 0x31ff], [0x3100, 0x312f, 0x31a0, 0x31bf], [0x3130, 0x318f], [0xa840, 0xa87f], [0x3200, 0x32ff], [0x3300, 0x33ff], [0xac00, 0xd7af], [0xd800, 0xdfff], [0x10900, 0x1091f], [0x4e00, 0x9fff, 0x2e80, 0x2eff, 0x2f00, 0x2fdf, 0x2ff0, 0x2fff, 0x3400, 0x4dbf, 0x20000, 0x2a6df, 0x3190, 0x319f], [0xe000, 0xf8ff], [0x31c0, 0x31ef, 0xf900, 0xfaff, 0x2f800, 0x2fa1f], [0xfb00, 0xfb4f], [0xfb50, 0xfdff], [0xfe20, 0xfe2f], [0xfe10, 0xfe1f], [0xfe50, 0xfe6f], [0xfe70, 0xfeff], [0xff00, 0xffef], [0xfff0, 0xffff], [0x0f00, 0x0fff], [0x0700, 0x074f], [0x0780, 0x07bf], [0x0d80, 0x0dff], [0x1000, 0x109f], [0x1200, 0x137f, 0x1380, 0x139f, 0x2d80, 0x2ddf], [0x13a0, 0x13ff], [0x1400, 0x167f], [0x1680, 0x169f], [0x16a0, 0x16ff], [0x1780, 0x17ff], [0x1800, 0x18af], [0x2800, 0x28ff], [0xa000, 0xa48f], [0x1700, 0x171f, 0x1720, 0x173f, 0x1740, 0x175f, 0x1760, 0x177f], [0x10300, 0x1032f], [0x10330, 0x1034f], [0x10400, 0x1044f], [0x1d000, 0x1d0ff, 0x1d100, 0x1d1ff, 0x1d200, 0x1d24f], [0x1d400, 0x1d7ff], [0xff000, 0xffffd], [0xfe00, 0xfe0f, 0xe0100, 0xe01ef], [0xe0000, 0xe007f], [0x1900, 0x194f], [0x1950, 0x197f], [0x1980, 0x19df], [0x1a00, 0x1a1f], [0x2c00, 0x2c5f], [0x2d30, 0x2d7f], [0x4dc0, 0x4dff], [0xa800, 0xa82f], [0x10000, 0x1007f, 0x10080, 0x100ff, 0x10100, 0x1013f], [0x10140, 0x1018f], [0x10380, 0x1039f], [0x103a0, 0x103df], [0x10450, 0x1047f], [0x10480, 0x104af], [0x10800, 0x1083f], [0x10a00, 0x10a5f], [0x1d300, 0x1d35f], [0x12000, 0x123ff, 0x12400, 0x1247f], [0x1d360, 0x1d37f], [0x1b80, 0x1bbf], [0x1c00, 0x1c4f], [0x1c50, 0x1c7f], [0xa880, 0xa8df], [0xa900, 0xa92f], [0xa930, 0xa95f], [0xaa00, 0xaa5f], [0x10190, 0x101cf], [0x101d0, 0x101ff], [0x102a0, 0x102df, 0x10280, 0x1029f, 0x10920, 0x1093f], [0x1f030, 0x1f09f, 0x1f000, 0x1f02f]]; -function getUnicodeRangeFor(value, lastPosition = -1) { - if (lastPosition !== -1) { - const range = UnicodeRanges[lastPosition]; - for (let i = 0, ii = range.length; i < ii; i += 2) { - if (value >= range[i] && value <= range[i + 1]) { - return lastPosition; - } - } - } - for (let i = 0, ii = UnicodeRanges.length; i < ii; i++) { - const range = UnicodeRanges[i]; - for (let j = 0, jj = range.length; j < jj; j += 2) { - if (value >= range[j] && value <= range[j + 1]) { - return i; - } - } - } - return -1; -} -const SpecialCharRegExp = new RegExp("^(\\s)|(\\p{Mn})|(\\p{Cf})$", "u"); -const CategoryCache = new Map(); -function getCharUnicodeCategory(char) { - const cachedCategory = CategoryCache.get(char); - if (cachedCategory) { - return cachedCategory; - } - const groups = char.match(SpecialCharRegExp); - const category = { - isWhitespace: !!groups?.[1], - isZeroWidthDiacritic: !!groups?.[2], - isInvisibleFormatMark: !!groups?.[3] - }; - CategoryCache.set(char, category); - return category; -} -function clearUnicodeCaches() { - CategoryCache.clear(); -} - -/***/ }), -/* 41 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getSerifFonts = exports.getNonStdFontMap = exports.getGlyphMapForStandardFonts = exports.getFontNameToFileMap = void 0; -exports.getStandardFontName = getStandardFontName; -exports.getSymbolsFonts = exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getStdFontMap = void 0; -exports.isKnownFontName = isKnownFontName; -var _core_utils = __w_pdfjs_require__(3); -var _fonts_utils = __w_pdfjs_require__(38); -const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { - t["Times-Roman"] = "Times-Roman"; - t.Helvetica = "Helvetica"; - t.Courier = "Courier"; - t.Symbol = "Symbol"; - t["Times-Bold"] = "Times-Bold"; - t["Helvetica-Bold"] = "Helvetica-Bold"; - t["Courier-Bold"] = "Courier-Bold"; - t.ZapfDingbats = "ZapfDingbats"; - t["Times-Italic"] = "Times-Italic"; - t["Helvetica-Oblique"] = "Helvetica-Oblique"; - t["Courier-Oblique"] = "Courier-Oblique"; - t["Times-BoldItalic"] = "Times-BoldItalic"; - t["Helvetica-BoldOblique"] = "Helvetica-BoldOblique"; - t["Courier-BoldOblique"] = "Courier-BoldOblique"; - t.ArialNarrow = "Helvetica"; - t["ArialNarrow-Bold"] = "Helvetica-Bold"; - t["ArialNarrow-BoldItalic"] = "Helvetica-BoldOblique"; - t["ArialNarrow-Italic"] = "Helvetica-Oblique"; - t.ArialBlack = "Helvetica"; - t["ArialBlack-Bold"] = "Helvetica-Bold"; - t["ArialBlack-BoldItalic"] = "Helvetica-BoldOblique"; - t["ArialBlack-Italic"] = "Helvetica-Oblique"; - t["Arial-Black"] = "Helvetica"; - t["Arial-Black-Bold"] = "Helvetica-Bold"; - t["Arial-Black-BoldItalic"] = "Helvetica-BoldOblique"; - t["Arial-Black-Italic"] = "Helvetica-Oblique"; - t.Arial = "Helvetica"; - t["Arial-Bold"] = "Helvetica-Bold"; - t["Arial-BoldItalic"] = "Helvetica-BoldOblique"; - t["Arial-Italic"] = "Helvetica-Oblique"; - t.ArialMT = "Helvetica"; - t["Arial-BoldItalicMT"] = "Helvetica-BoldOblique"; - t["Arial-BoldMT"] = "Helvetica-Bold"; - t["Arial-ItalicMT"] = "Helvetica-Oblique"; - t["Arial-BoldItalicMT-BoldItalic"] = "Helvetica-BoldOblique"; - t["Arial-BoldMT-Bold"] = "Helvetica-Bold"; - t["Arial-ItalicMT-Italic"] = "Helvetica-Oblique"; - t.ArialUnicodeMS = "Helvetica"; - t["ArialUnicodeMS-Bold"] = "Helvetica-Bold"; - t["ArialUnicodeMS-BoldItalic"] = "Helvetica-BoldOblique"; - t["ArialUnicodeMS-Italic"] = "Helvetica-Oblique"; - t["Courier-BoldItalic"] = "Courier-BoldOblique"; - t["Courier-Italic"] = "Courier-Oblique"; - t.CourierNew = "Courier"; - t["CourierNew-Bold"] = "Courier-Bold"; - t["CourierNew-BoldItalic"] = "Courier-BoldOblique"; - t["CourierNew-Italic"] = "Courier-Oblique"; - t["CourierNewPS-BoldItalicMT"] = "Courier-BoldOblique"; - t["CourierNewPS-BoldMT"] = "Courier-Bold"; - t["CourierNewPS-ItalicMT"] = "Courier-Oblique"; - t.CourierNewPSMT = "Courier"; - t["Helvetica-BoldItalic"] = "Helvetica-BoldOblique"; - t["Helvetica-Italic"] = "Helvetica-Oblique"; - t["Symbol-Bold"] = "Symbol"; - t["Symbol-BoldItalic"] = "Symbol"; - t["Symbol-Italic"] = "Symbol"; - t.TimesNewRoman = "Times-Roman"; - t["TimesNewRoman-Bold"] = "Times-Bold"; - t["TimesNewRoman-BoldItalic"] = "Times-BoldItalic"; - t["TimesNewRoman-Italic"] = "Times-Italic"; - t.TimesNewRomanPS = "Times-Roman"; - t["TimesNewRomanPS-Bold"] = "Times-Bold"; - t["TimesNewRomanPS-BoldItalic"] = "Times-BoldItalic"; - t["TimesNewRomanPS-BoldItalicMT"] = "Times-BoldItalic"; - t["TimesNewRomanPS-BoldMT"] = "Times-Bold"; - t["TimesNewRomanPS-Italic"] = "Times-Italic"; - t["TimesNewRomanPS-ItalicMT"] = "Times-Italic"; - t.TimesNewRomanPSMT = "Times-Roman"; - t["TimesNewRomanPSMT-Bold"] = "Times-Bold"; - t["TimesNewRomanPSMT-BoldItalic"] = "Times-BoldItalic"; - t["TimesNewRomanPSMT-Italic"] = "Times-Italic"; -}); -exports.getStdFontMap = getStdFontMap; -const getFontNameToFileMap = (0, _core_utils.getLookupTableFactory)(function (t) { - t.Courier = "FoxitFixed.pfb"; - t["Courier-Bold"] = "FoxitFixedBold.pfb"; - t["Courier-BoldOblique"] = "FoxitFixedBoldItalic.pfb"; - t["Courier-Oblique"] = "FoxitFixedItalic.pfb"; - t.Helvetica = "LiberationSans-Regular.ttf"; - t["Helvetica-Bold"] = "LiberationSans-Bold.ttf"; - t["Helvetica-BoldOblique"] = "LiberationSans-BoldItalic.ttf"; - t["Helvetica-Oblique"] = "LiberationSans-Italic.ttf"; - t["Times-Roman"] = "FoxitSerif.pfb"; - t["Times-Bold"] = "FoxitSerifBold.pfb"; - t["Times-BoldItalic"] = "FoxitSerifBoldItalic.pfb"; - t["Times-Italic"] = "FoxitSerifItalic.pfb"; - t.Symbol = "FoxitSymbol.pfb"; - t.ZapfDingbats = "FoxitDingbats.pfb"; - t["LiberationSans-Regular"] = "LiberationSans-Regular.ttf"; - t["LiberationSans-Bold"] = "LiberationSans-Bold.ttf"; - t["LiberationSans-Italic"] = "LiberationSans-Italic.ttf"; - t["LiberationSans-BoldItalic"] = "LiberationSans-BoldItalic.ttf"; -}); -exports.getFontNameToFileMap = getFontNameToFileMap; -const getNonStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { - t.Calibri = "Helvetica"; - t["Calibri-Bold"] = "Helvetica-Bold"; - t["Calibri-BoldItalic"] = "Helvetica-BoldOblique"; - t["Calibri-Italic"] = "Helvetica-Oblique"; - t.CenturyGothic = "Helvetica"; - t["CenturyGothic-Bold"] = "Helvetica-Bold"; - t["CenturyGothic-BoldItalic"] = "Helvetica-BoldOblique"; - t["CenturyGothic-Italic"] = "Helvetica-Oblique"; - t.ComicSansMS = "Comic Sans MS"; - t["ComicSansMS-Bold"] = "Comic Sans MS-Bold"; - t["ComicSansMS-BoldItalic"] = "Comic Sans MS-BoldItalic"; - t["ComicSansMS-Italic"] = "Comic Sans MS-Italic"; - t.Impact = "Helvetica"; - t["ItcSymbol-Bold"] = "Helvetica-Bold"; - t["ItcSymbol-BoldItalic"] = "Helvetica-BoldOblique"; - t["ItcSymbol-Book"] = "Helvetica"; - t["ItcSymbol-BookItalic"] = "Helvetica-Oblique"; - t["ItcSymbol-Medium"] = "Helvetica"; - t["ItcSymbol-MediumItalic"] = "Helvetica-Oblique"; - t.LucidaConsole = "Courier"; - t["LucidaConsole-Bold"] = "Courier-Bold"; - t["LucidaConsole-BoldItalic"] = "Courier-BoldOblique"; - t["LucidaConsole-Italic"] = "Courier-Oblique"; - t["LucidaSans-Demi"] = "Helvetica-Bold"; - t["MS-Gothic"] = "MS Gothic"; - t["MS-Gothic-Bold"] = "MS Gothic-Bold"; - t["MS-Gothic-BoldItalic"] = "MS Gothic-BoldItalic"; - t["MS-Gothic-Italic"] = "MS Gothic-Italic"; - t["MS-Mincho"] = "MS Mincho"; - t["MS-Mincho-Bold"] = "MS Mincho-Bold"; - t["MS-Mincho-BoldItalic"] = "MS Mincho-BoldItalic"; - t["MS-Mincho-Italic"] = "MS Mincho-Italic"; - t["MS-PGothic"] = "MS PGothic"; - t["MS-PGothic-Bold"] = "MS PGothic-Bold"; - t["MS-PGothic-BoldItalic"] = "MS PGothic-BoldItalic"; - t["MS-PGothic-Italic"] = "MS PGothic-Italic"; - t["MS-PMincho"] = "MS PMincho"; - t["MS-PMincho-Bold"] = "MS PMincho-Bold"; - t["MS-PMincho-BoldItalic"] = "MS PMincho-BoldItalic"; - t["MS-PMincho-Italic"] = "MS PMincho-Italic"; - t.NuptialScript = "Times-Italic"; - t.SegoeUISymbol = "Helvetica"; -}); -exports.getNonStdFontMap = getNonStdFontMap; -const getSerifFonts = (0, _core_utils.getLookupTableFactory)(function (t) { - t["Adobe Jenson"] = true; - t["Adobe Text"] = true; - t.Albertus = true; - t.Aldus = true; - t.Alexandria = true; - t.Algerian = true; - t["American Typewriter"] = true; - t.Antiqua = true; - t.Apex = true; - t.Arno = true; - t.Aster = true; - t.Aurora = true; - t.Baskerville = true; - t.Bell = true; - t.Bembo = true; - t["Bembo Schoolbook"] = true; - t.Benguiat = true; - t["Berkeley Old Style"] = true; - t["Bernhard Modern"] = true; - t["Berthold City"] = true; - t.Bodoni = true; - t["Bauer Bodoni"] = true; - t["Book Antiqua"] = true; - t.Bookman = true; - t["Bordeaux Roman"] = true; - t["Californian FB"] = true; - t.Calisto = true; - t.Calvert = true; - t.Capitals = true; - t.Cambria = true; - t.Cartier = true; - t.Caslon = true; - t.Catull = true; - t.Centaur = true; - t["Century Old Style"] = true; - t["Century Schoolbook"] = true; - t.Chaparral = true; - t["Charis SIL"] = true; - t.Cheltenham = true; - t["Cholla Slab"] = true; - t.Clarendon = true; - t.Clearface = true; - t.Cochin = true; - t.Colonna = true; - t["Computer Modern"] = true; - t["Concrete Roman"] = true; - t.Constantia = true; - t["Cooper Black"] = true; - t.Corona = true; - t.Ecotype = true; - t.Egyptienne = true; - t.Elephant = true; - t.Excelsior = true; - t.Fairfield = true; - t["FF Scala"] = true; - t.Folkard = true; - t.Footlight = true; - t.FreeSerif = true; - t["Friz Quadrata"] = true; - t.Garamond = true; - t.Gentium = true; - t.Georgia = true; - t.Gloucester = true; - t["Goudy Old Style"] = true; - t["Goudy Schoolbook"] = true; - t["Goudy Pro Font"] = true; - t.Granjon = true; - t["Guardian Egyptian"] = true; - t.Heather = true; - t.Hercules = true; - t["High Tower Text"] = true; - t.Hiroshige = true; - t["Hoefler Text"] = true; - t["Humana Serif"] = true; - t.Imprint = true; - t["Ionic No. 5"] = true; - t.Janson = true; - t.Joanna = true; - t.Korinna = true; - t.Lexicon = true; - t.LiberationSerif = true; - t["Liberation Serif"] = true; - t["Linux Libertine"] = true; - t.Literaturnaya = true; - t.Lucida = true; - t["Lucida Bright"] = true; - t.Melior = true; - t.Memphis = true; - t.Miller = true; - t.Minion = true; - t.Modern = true; - t["Mona Lisa"] = true; - t["Mrs Eaves"] = true; - t["MS Serif"] = true; - t["Museo Slab"] = true; - t["New York"] = true; - t["Nimbus Roman"] = true; - t["NPS Rawlinson Roadway"] = true; - t.NuptialScript = true; - t.Palatino = true; - t.Perpetua = true; - t.Plantin = true; - t["Plantin Schoolbook"] = true; - t.Playbill = true; - t["Poor Richard"] = true; - t["Rawlinson Roadway"] = true; - t.Renault = true; - t.Requiem = true; - t.Rockwell = true; - t.Roman = true; - t["Rotis Serif"] = true; - t.Sabon = true; - t.Scala = true; - t.Seagull = true; - t.Sistina = true; - t.Souvenir = true; - t.STIX = true; - t["Stone Informal"] = true; - t["Stone Serif"] = true; - t.Sylfaen = true; - t.Times = true; - t.Trajan = true; - t["Trinité"] = true; - t["Trump Mediaeval"] = true; - t.Utopia = true; - t["Vale Type"] = true; - t["Bitstream Vera"] = true; - t["Vera Serif"] = true; - t.Versailles = true; - t.Wanted = true; - t.Weiss = true; - t["Wide Latin"] = true; - t.Windsor = true; - t.XITS = true; -}); -exports.getSerifFonts = getSerifFonts; -const getSymbolsFonts = (0, _core_utils.getLookupTableFactory)(function (t) { - t.Dingbats = true; - t.Symbol = true; - t.ZapfDingbats = true; - t.Wingdings = true; - t["Wingdings-Bold"] = true; - t["Wingdings-Regular"] = true; -}); -exports.getSymbolsFonts = getSymbolsFonts; -const getGlyphMapForStandardFonts = (0, _core_utils.getLookupTableFactory)(function (t) { - t[2] = 10; - t[3] = 32; - t[4] = 33; - t[5] = 34; - t[6] = 35; - t[7] = 36; - t[8] = 37; - t[9] = 38; - t[10] = 39; - t[11] = 40; - t[12] = 41; - t[13] = 42; - t[14] = 43; - t[15] = 44; - t[16] = 45; - t[17] = 46; - t[18] = 47; - t[19] = 48; - t[20] = 49; - t[21] = 50; - t[22] = 51; - t[23] = 52; - t[24] = 53; - t[25] = 54; - t[26] = 55; - t[27] = 56; - t[28] = 57; - t[29] = 58; - t[30] = 894; - t[31] = 60; - t[32] = 61; - t[33] = 62; - t[34] = 63; - t[35] = 64; - t[36] = 65; - t[37] = 66; - t[38] = 67; - t[39] = 68; - t[40] = 69; - t[41] = 70; - t[42] = 71; - t[43] = 72; - t[44] = 73; - t[45] = 74; - t[46] = 75; - t[47] = 76; - t[48] = 77; - t[49] = 78; - t[50] = 79; - t[51] = 80; - t[52] = 81; - t[53] = 82; - t[54] = 83; - t[55] = 84; - t[56] = 85; - t[57] = 86; - t[58] = 87; - t[59] = 88; - t[60] = 89; - t[61] = 90; - t[62] = 91; - t[63] = 92; - t[64] = 93; - t[65] = 94; - t[66] = 95; - t[67] = 96; - t[68] = 97; - t[69] = 98; - t[70] = 99; - t[71] = 100; - t[72] = 101; - t[73] = 102; - t[74] = 103; - t[75] = 104; - t[76] = 105; - t[77] = 106; - t[78] = 107; - t[79] = 108; - t[80] = 109; - t[81] = 110; - t[82] = 111; - t[83] = 112; - t[84] = 113; - t[85] = 114; - t[86] = 115; - t[87] = 116; - t[88] = 117; - t[89] = 118; - t[90] = 119; - t[91] = 120; - t[92] = 121; - t[93] = 122; - t[94] = 123; - t[95] = 124; - t[96] = 125; - t[97] = 126; - t[98] = 196; - t[99] = 197; - t[100] = 199; - t[101] = 201; - t[102] = 209; - t[103] = 214; - t[104] = 220; - t[105] = 225; - t[106] = 224; - t[107] = 226; - t[108] = 228; - t[109] = 227; - t[110] = 229; - t[111] = 231; - t[112] = 233; - t[113] = 232; - t[114] = 234; - t[115] = 235; - t[116] = 237; - t[117] = 236; - t[118] = 238; - t[119] = 239; - t[120] = 241; - t[121] = 243; - t[122] = 242; - t[123] = 244; - t[124] = 246; - t[125] = 245; - t[126] = 250; - t[127] = 249; - t[128] = 251; - t[129] = 252; - t[130] = 8224; - t[131] = 176; - t[132] = 162; - t[133] = 163; - t[134] = 167; - t[135] = 8226; - t[136] = 182; - t[137] = 223; - t[138] = 174; - t[139] = 169; - t[140] = 8482; - t[141] = 180; - t[142] = 168; - t[143] = 8800; - t[144] = 198; - t[145] = 216; - t[146] = 8734; - t[147] = 177; - t[148] = 8804; - t[149] = 8805; - t[150] = 165; - t[151] = 181; - t[152] = 8706; - t[153] = 8721; - t[154] = 8719; - t[156] = 8747; - t[157] = 170; - t[158] = 186; - t[159] = 8486; - t[160] = 230; - t[161] = 248; - t[162] = 191; - t[163] = 161; - t[164] = 172; - t[165] = 8730; - t[166] = 402; - t[167] = 8776; - t[168] = 8710; - t[169] = 171; - t[170] = 187; - t[171] = 8230; - t[179] = 8220; - t[180] = 8221; - t[181] = 8216; - t[182] = 8217; - t[200] = 193; - t[203] = 205; - t[207] = 211; - t[210] = 218; - t[223] = 711; - t[224] = 321; - t[225] = 322; - t[226] = 352; - t[227] = 353; - t[228] = 381; - t[229] = 382; - t[233] = 221; - t[234] = 253; - t[252] = 263; - t[253] = 268; - t[254] = 269; - t[258] = 258; - t[260] = 260; - t[261] = 261; - t[265] = 280; - t[266] = 281; - t[267] = 282; - t[268] = 283; - t[269] = 313; - t[275] = 323; - t[276] = 324; - t[278] = 328; - t[283] = 344; - t[284] = 345; - t[285] = 346; - t[286] = 347; - t[292] = 367; - t[295] = 377; - t[296] = 378; - t[298] = 380; - t[305] = 963; - t[306] = 964; - t[307] = 966; - t[308] = 8215; - t[309] = 8252; - t[310] = 8319; - t[311] = 8359; - t[312] = 8592; - t[313] = 8593; - t[337] = 9552; - t[493] = 1039; - t[494] = 1040; - t[672] = 1488; - t[673] = 1489; - t[674] = 1490; - t[675] = 1491; - t[676] = 1492; - t[677] = 1493; - t[678] = 1494; - t[679] = 1495; - t[680] = 1496; - t[681] = 1497; - t[682] = 1498; - t[683] = 1499; - t[684] = 1500; - t[685] = 1501; - t[686] = 1502; - t[687] = 1503; - t[688] = 1504; - t[689] = 1505; - t[690] = 1506; - t[691] = 1507; - t[692] = 1508; - t[693] = 1509; - t[694] = 1510; - t[695] = 1511; - t[696] = 1512; - t[697] = 1513; - t[698] = 1514; - t[705] = 1524; - t[706] = 8362; - t[710] = 64288; - t[711] = 64298; - t[759] = 1617; - t[761] = 1776; - t[763] = 1778; - t[775] = 1652; - t[777] = 1764; - t[778] = 1780; - t[779] = 1781; - t[780] = 1782; - t[782] = 771; - t[783] = 64726; - t[786] = 8363; - t[788] = 8532; - t[790] = 768; - t[791] = 769; - t[792] = 768; - t[795] = 803; - t[797] = 64336; - t[798] = 64337; - t[799] = 64342; - t[800] = 64343; - t[801] = 64344; - t[802] = 64345; - t[803] = 64362; - t[804] = 64363; - t[805] = 64364; - t[2424] = 7821; - t[2425] = 7822; - t[2426] = 7823; - t[2427] = 7824; - t[2428] = 7825; - t[2429] = 7826; - t[2430] = 7827; - t[2433] = 7682; - t[2678] = 8045; - t[2679] = 8046; - t[2830] = 1552; - t[2838] = 686; - t[2840] = 751; - t[2842] = 753; - t[2843] = 754; - t[2844] = 755; - t[2846] = 757; - t[2856] = 767; - t[2857] = 848; - t[2858] = 849; - t[2862] = 853; - t[2863] = 854; - t[2864] = 855; - t[2865] = 861; - t[2866] = 862; - t[2906] = 7460; - t[2908] = 7462; - t[2909] = 7463; - t[2910] = 7464; - t[2912] = 7466; - t[2913] = 7467; - t[2914] = 7468; - t[2916] = 7470; - t[2917] = 7471; - t[2918] = 7472; - t[2920] = 7474; - t[2921] = 7475; - t[2922] = 7476; - t[2924] = 7478; - t[2925] = 7479; - t[2926] = 7480; - t[2928] = 7482; - t[2929] = 7483; - t[2930] = 7484; - t[2932] = 7486; - t[2933] = 7487; - t[2934] = 7488; - t[2936] = 7490; - t[2937] = 7491; - t[2938] = 7492; - t[2940] = 7494; - t[2941] = 7495; - t[2942] = 7496; - t[2944] = 7498; - t[2946] = 7500; - t[2948] = 7502; - t[2950] = 7504; - t[2951] = 7505; - t[2952] = 7506; - t[2954] = 7508; - t[2955] = 7509; - t[2956] = 7510; - t[2958] = 7512; - t[2959] = 7513; - t[2960] = 7514; - t[2962] = 7516; - t[2963] = 7517; - t[2964] = 7518; - t[2966] = 7520; - t[2967] = 7521; - t[2968] = 7522; - t[2970] = 7524; - t[2971] = 7525; - t[2972] = 7526; - t[2974] = 7528; - t[2975] = 7529; - t[2976] = 7530; - t[2978] = 1537; - t[2979] = 1538; - t[2980] = 1539; - t[2982] = 1549; - t[2983] = 1551; - t[2984] = 1552; - t[2986] = 1554; - t[2987] = 1555; - t[2988] = 1556; - t[2990] = 1623; - t[2991] = 1624; - t[2995] = 1775; - t[2999] = 1791; - t[3002] = 64290; - t[3003] = 64291; - t[3004] = 64292; - t[3006] = 64294; - t[3007] = 64295; - t[3008] = 64296; - t[3011] = 1900; - t[3014] = 8223; - t[3015] = 8244; - t[3017] = 7532; - t[3018] = 7533; - t[3019] = 7534; - t[3075] = 7590; - t[3076] = 7591; - t[3079] = 7594; - t[3080] = 7595; - t[3083] = 7598; - t[3084] = 7599; - t[3087] = 7602; - t[3088] = 7603; - t[3091] = 7606; - t[3092] = 7607; - t[3095] = 7610; - t[3096] = 7611; - t[3099] = 7614; - t[3100] = 7615; - t[3103] = 7618; - t[3104] = 7619; - t[3107] = 8337; - t[3108] = 8338; - t[3116] = 1884; - t[3119] = 1885; - t[3120] = 1885; - t[3123] = 1886; - t[3124] = 1886; - t[3127] = 1887; - t[3128] = 1887; - t[3131] = 1888; - t[3132] = 1888; - t[3135] = 1889; - t[3136] = 1889; - t[3139] = 1890; - t[3140] = 1890; - t[3143] = 1891; - t[3144] = 1891; - t[3147] = 1892; - t[3148] = 1892; - t[3153] = 580; - t[3154] = 581; - t[3157] = 584; - t[3158] = 585; - t[3161] = 588; - t[3162] = 589; - t[3165] = 891; - t[3166] = 892; - t[3169] = 1274; - t[3170] = 1275; - t[3173] = 1278; - t[3174] = 1279; - t[3181] = 7622; - t[3182] = 7623; - t[3282] = 11799; - t[3316] = 578; - t[3379] = 42785; - t[3393] = 1159; - t[3416] = 8377; -}); -exports.getGlyphMapForStandardFonts = getGlyphMapForStandardFonts; -const getSupplementalGlyphMapForArialBlack = (0, _core_utils.getLookupTableFactory)(function (t) { - t[227] = 322; - t[264] = 261; - t[291] = 346; -}); -exports.getSupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack; -const getSupplementalGlyphMapForCalibri = (0, _core_utils.getLookupTableFactory)(function (t) { - t[1] = 32; - t[4] = 65; - t[5] = 192; - t[6] = 193; - t[9] = 196; - t[17] = 66; - t[18] = 67; - t[21] = 268; - t[24] = 68; - t[28] = 69; - t[29] = 200; - t[30] = 201; - t[32] = 282; - t[38] = 70; - t[39] = 71; - t[44] = 72; - t[47] = 73; - t[48] = 204; - t[49] = 205; - t[58] = 74; - t[60] = 75; - t[62] = 76; - t[68] = 77; - t[69] = 78; - t[75] = 79; - t[76] = 210; - t[80] = 214; - t[87] = 80; - t[89] = 81; - t[90] = 82; - t[92] = 344; - t[94] = 83; - t[97] = 352; - t[100] = 84; - t[104] = 85; - t[109] = 220; - t[115] = 86; - t[116] = 87; - t[121] = 88; - t[122] = 89; - t[124] = 221; - t[127] = 90; - t[129] = 381; - t[258] = 97; - t[259] = 224; - t[260] = 225; - t[263] = 228; - t[268] = 261; - t[271] = 98; - t[272] = 99; - t[273] = 263; - t[275] = 269; - t[282] = 100; - t[286] = 101; - t[287] = 232; - t[288] = 233; - t[290] = 283; - t[295] = 281; - t[296] = 102; - t[336] = 103; - t[346] = 104; - t[349] = 105; - t[350] = 236; - t[351] = 237; - t[361] = 106; - t[364] = 107; - t[367] = 108; - t[371] = 322; - t[373] = 109; - t[374] = 110; - t[381] = 111; - t[382] = 242; - t[383] = 243; - t[386] = 246; - t[393] = 112; - t[395] = 113; - t[396] = 114; - t[398] = 345; - t[400] = 115; - t[401] = 347; - t[403] = 353; - t[410] = 116; - t[437] = 117; - t[442] = 252; - t[448] = 118; - t[449] = 119; - t[454] = 120; - t[455] = 121; - t[457] = 253; - t[460] = 122; - t[462] = 382; - t[463] = 380; - t[853] = 44; - t[855] = 58; - t[856] = 46; - t[876] = 47; - t[878] = 45; - t[882] = 45; - t[894] = 40; - t[895] = 41; - t[896] = 91; - t[897] = 93; - t[923] = 64; - t[1004] = 48; - t[1005] = 49; - t[1006] = 50; - t[1007] = 51; - t[1008] = 52; - t[1009] = 53; - t[1010] = 54; - t[1011] = 55; - t[1012] = 56; - t[1013] = 57; - t[1081] = 37; - t[1085] = 43; - t[1086] = 45; -}); -exports.getSupplementalGlyphMapForCalibri = getSupplementalGlyphMapForCalibri; -function getStandardFontName(name) { - const fontName = (0, _fonts_utils.normalizeFontName)(name); - const stdFontMap = getStdFontMap(); - return stdFontMap[fontName]; -} -function isKnownFontName(name) { - const fontName = (0, _fonts_utils.normalizeFontName)(name); - return !!(getStdFontMap()[fontName] || getNonStdFontMap()[fontName] || getSerifFonts()[fontName] || getSymbolsFonts()[fontName]); -} - -/***/ }), -/* 42 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ToUnicodeMap = exports.IdentityToUnicodeMap = void 0; -var _util = __w_pdfjs_require__(2); -class ToUnicodeMap { - constructor(cmap = []) { - this._map = cmap; - } - get length() { - return this._map.length; - } - forEach(callback) { - for (const charCode in this._map) { - callback(charCode, this._map[charCode].charCodeAt(0)); - } - } - has(i) { - return this._map[i] !== undefined; - } - get(i) { - return this._map[i]; - } - charCodeOf(value) { - const map = this._map; - if (map.length <= 0x10000) { - return map.indexOf(value); - } - for (const charCode in map) { - if (map[charCode] === value) { - return charCode | 0; - } - } - return -1; - } - amend(map) { - for (const charCode in map) { - this._map[charCode] = map[charCode]; - } - } -} -exports.ToUnicodeMap = ToUnicodeMap; -class IdentityToUnicodeMap { - constructor(firstChar, lastChar) { - this.firstChar = firstChar; - this.lastChar = lastChar; - } - get length() { - return this.lastChar + 1 - this.firstChar; - } - forEach(callback) { - for (let i = this.firstChar, ii = this.lastChar; i <= ii; i++) { - callback(i, i); - } - } - has(i) { - return this.firstChar <= i && i <= this.lastChar; - } - get(i) { - if (this.firstChar <= i && i <= this.lastChar) { - return String.fromCharCode(i); - } - return undefined; - } - charCodeOf(v) { - return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1; - } - amend(map) { - (0, _util.unreachable)("Should not call amend()"); - } -} -exports.IdentityToUnicodeMap = IdentityToUnicodeMap; - -/***/ }), -/* 43 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.CFFFont = void 0; -var _cff_parser = __w_pdfjs_require__(35); -var _fonts_utils = __w_pdfjs_require__(38); -var _util = __w_pdfjs_require__(2); -class CFFFont { - constructor(file, properties) { - this.properties = properties; - const parser = new _cff_parser.CFFParser(file, properties, _fonts_utils.SEAC_ANALYSIS_ENABLED); - this.cff = parser.parse(); - this.cff.duplicateFirstGlyph(); - const compiler = new _cff_parser.CFFCompiler(this.cff); - this.seacs = this.cff.seacs; - try { - this.data = compiler.compile(); - } catch { - (0, _util.warn)("Failed to compile font " + properties.loadedName); - this.data = file; - } - this._createBuiltInEncoding(); - } - get numGlyphs() { - return this.cff.charStrings.count; - } - getCharset() { - return this.cff.charset.charset; - } - getGlyphMapping() { - const cff = this.cff; - const properties = this.properties; - const { - cidToGidMap, - cMap - } = properties; - const charsets = cff.charset.charset; - let charCodeToGlyphId; - let glyphId; - if (properties.composite) { - let invCidToGidMap; - if (cidToGidMap?.length > 0) { - invCidToGidMap = Object.create(null); - for (let i = 0, ii = cidToGidMap.length; i < ii; i++) { - const gid = cidToGidMap[i]; - if (gid !== undefined) { - invCidToGidMap[gid] = i; - } - } - } - charCodeToGlyphId = Object.create(null); - let charCode; - if (cff.isCIDFont) { - for (glyphId = 0; glyphId < charsets.length; glyphId++) { - const cid = charsets[glyphId]; - charCode = cMap.charCodeOf(cid); - if (invCidToGidMap?.[charCode] !== undefined) { - charCode = invCidToGidMap[charCode]; - } - charCodeToGlyphId[charCode] = glyphId; - } - } else { - for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) { - charCode = cMap.charCodeOf(glyphId); - charCodeToGlyphId[charCode] = glyphId; - } - } - return charCodeToGlyphId; - } - let encoding = cff.encoding ? cff.encoding.encoding : null; - if (properties.isInternalFont) { - encoding = properties.defaultEncoding; - } - charCodeToGlyphId = (0, _fonts_utils.type1FontGlyphMapping)(properties, encoding, charsets); - return charCodeToGlyphId; - } - hasGlyphId(id) { - return this.cff.hasGlyphId(id); - } - _createBuiltInEncoding() { - const { - charset, - encoding - } = this.cff; - if (!charset || !encoding) { - return; - } - const charsets = charset.charset, - encodings = encoding.encoding; - const map = []; - for (const charCode in encodings) { - const glyphId = encodings[charCode]; - if (glyphId >= 0) { - const glyphName = charsets[glyphId]; - if (glyphName) { - map[charCode] = glyphName; - } - } - } - if (map.length > 0) { - this.properties.builtInEncoding = map; - } - } -} -exports.CFFFont = CFFFont; - -/***/ }), -/* 44 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FontRendererFactory = void 0; -var _util = __w_pdfjs_require__(2); -var _cff_parser = __w_pdfjs_require__(35); -var _glyphlist = __w_pdfjs_require__(39); -var _encodings = __w_pdfjs_require__(37); -var _stream = __w_pdfjs_require__(8); -function getUint32(data, offset) { - return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0; -} -function getUint16(data, offset) { - return data[offset] << 8 | data[offset + 1]; -} -function getInt16(data, offset) { - return (data[offset] << 24 | data[offset + 1] << 16) >> 16; -} -function getInt8(data, offset) { - return data[offset] << 24 >> 24; -} -function getFloat214(data, offset) { - return getInt16(data, offset) / 16384; -} -function getSubroutineBias(subrs) { - const numSubrs = subrs.length; - let bias = 32768; - if (numSubrs < 1240) { - bias = 107; - } else if (numSubrs < 33900) { - bias = 1131; - } - return bias; -} -function parseCmap(data, start, end) { - const offset = getUint16(data, start + 2) === 1 ? getUint32(data, start + 8) : getUint32(data, start + 16); - const format = getUint16(data, start + offset); - let ranges, p, i; - if (format === 4) { - getUint16(data, start + offset + 2); - const segCount = getUint16(data, start + offset + 6) >> 1; - p = start + offset + 14; - ranges = []; - for (i = 0; i < segCount; i++, p += 2) { - ranges[i] = { - end: getUint16(data, p) - }; - } - p += 2; - for (i = 0; i < segCount; i++, p += 2) { - ranges[i].start = getUint16(data, p); - } - for (i = 0; i < segCount; i++, p += 2) { - ranges[i].idDelta = getUint16(data, p); - } - for (i = 0; i < segCount; i++, p += 2) { - let idOffset = getUint16(data, p); - if (idOffset === 0) { - continue; - } - ranges[i].ids = []; - for (let j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) { - ranges[i].ids[j] = getUint16(data, p + idOffset); - idOffset += 2; - } - } - return ranges; - } else if (format === 12) { - const groups = getUint32(data, start + offset + 12); - p = start + offset + 16; - ranges = []; - for (i = 0; i < groups; i++) { - start = getUint32(data, p); - ranges.push({ - start, - end: getUint32(data, p + 4), - idDelta: getUint32(data, p + 8) - start - }); - p += 12; - } - return ranges; - } - throw new _util.FormatError(`unsupported cmap: ${format}`); -} -function parseCff(data, start, end, seacAnalysisEnabled) { - const properties = {}; - const parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, seacAnalysisEnabled); - const cff = parser.parse(); - return { - glyphs: cff.charStrings.objects, - subrs: cff.topDict.privateDict?.subrsIndex?.objects, - gsubrs: cff.globalSubrIndex?.objects, - isCFFCIDFont: cff.isCIDFont, - fdSelect: cff.fdSelect, - fdArray: cff.fdArray - }; -} -function parseGlyfTable(glyf, loca, isGlyphLocationsLong) { - let itemSize, itemDecode; - if (isGlyphLocationsLong) { - itemSize = 4; - itemDecode = getUint32; - } else { - itemSize = 2; - itemDecode = (data, offset) => 2 * getUint16(data, offset); - } - const glyphs = []; - let startOffset = itemDecode(loca, 0); - for (let j = itemSize; j < loca.length; j += itemSize) { - const endOffset = itemDecode(loca, j); - glyphs.push(glyf.subarray(startOffset, endOffset)); - startOffset = endOffset; - } - return glyphs; -} -function lookupCmap(ranges, unicode) { - const code = unicode.codePointAt(0); - let gid = 0, - l = 0, - r = ranges.length - 1; - while (l < r) { - const c = l + r + 1 >> 1; - if (code < ranges[c].start) { - r = c - 1; - } else { - l = c; - } - } - if (ranges[l].start <= code && code <= ranges[l].end) { - gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xffff; - } - return { - charCode: code, - glyphId: gid - }; -} -function compileGlyf(code, cmds, font) { - function moveTo(x, y) { - cmds.push({ - cmd: "moveTo", - args: [x, y] - }); - } - function lineTo(x, y) { - cmds.push({ - cmd: "lineTo", - args: [x, y] - }); - } - function quadraticCurveTo(xa, ya, x, y) { - cmds.push({ - cmd: "quadraticCurveTo", - args: [xa, ya, x, y] - }); - } - let i = 0; - const numberOfContours = getInt16(code, i); - let flags; - let x = 0, - y = 0; - i += 10; - if (numberOfContours < 0) { - do { - flags = getUint16(code, i); - const glyphIndex = getUint16(code, i + 2); - i += 4; - let arg1, arg2; - if (flags & 0x01) { - if (flags & 0x02) { - arg1 = getInt16(code, i); - arg2 = getInt16(code, i + 2); - } else { - arg1 = getUint16(code, i); - arg2 = getUint16(code, i + 2); - } - i += 4; - } else if (flags & 0x02) { - arg1 = getInt8(code, i++); - arg2 = getInt8(code, i++); - } else { - arg1 = code[i++]; - arg2 = code[i++]; - } - if (flags & 0x02) { - x = arg1; - y = arg2; - } else { - x = 0; - y = 0; - } - let scaleX = 1, - scaleY = 1, - scale01 = 0, - scale10 = 0; - if (flags & 0x08) { - scaleX = scaleY = getFloat214(code, i); - i += 2; - } else if (flags & 0x40) { - scaleX = getFloat214(code, i); - scaleY = getFloat214(code, i + 2); - i += 4; - } else if (flags & 0x80) { - scaleX = getFloat214(code, i); - scale01 = getFloat214(code, i + 2); - scale10 = getFloat214(code, i + 4); - scaleY = getFloat214(code, i + 6); - i += 8; - } - const subglyph = font.glyphs[glyphIndex]; - if (subglyph) { - cmds.push({ - cmd: "save" - }, { - cmd: "transform", - args: [scaleX, scale01, scale10, scaleY, x, y] - }); - if (!(flags & 0x02)) {} - compileGlyf(subglyph, cmds, font); - cmds.push({ - cmd: "restore" - }); - } - } while (flags & 0x20); - } else { - const endPtsOfContours = []; - let j, jj; - for (j = 0; j < numberOfContours; j++) { - endPtsOfContours.push(getUint16(code, i)); - i += 2; - } - const instructionLength = getUint16(code, i); - i += 2 + instructionLength; - const numberOfPoints = endPtsOfContours.at(-1) + 1; - const points = []; - while (points.length < numberOfPoints) { - flags = code[i++]; - let repeat = 1; - if (flags & 0x08) { - repeat += code[i++]; - } - while (repeat-- > 0) { - points.push({ - flags - }); - } - } - for (j = 0; j < numberOfPoints; j++) { - switch (points[j].flags & 0x12) { - case 0x00: - x += getInt16(code, i); - i += 2; - break; - case 0x02: - x -= code[i++]; - break; - case 0x12: - x += code[i++]; - break; - } - points[j].x = x; - } - for (j = 0; j < numberOfPoints; j++) { - switch (points[j].flags & 0x24) { - case 0x00: - y += getInt16(code, i); - i += 2; - break; - case 0x04: - y -= code[i++]; - break; - case 0x24: - y += code[i++]; - break; - } - points[j].y = y; - } - let startPoint = 0; - for (i = 0; i < numberOfContours; i++) { - const endPoint = endPtsOfContours[i]; - const contour = points.slice(startPoint, endPoint + 1); - if (contour[0].flags & 1) { - contour.push(contour[0]); - } else if (contour.at(-1).flags & 1) { - contour.unshift(contour.at(-1)); - } else { - const p = { - flags: 1, - x: (contour[0].x + contour.at(-1).x) / 2, - y: (contour[0].y + contour.at(-1).y) / 2 - }; - contour.unshift(p); - contour.push(p); - } - moveTo(contour[0].x, contour[0].y); - for (j = 1, jj = contour.length; j < jj; j++) { - if (contour[j].flags & 1) { - lineTo(contour[j].x, contour[j].y); - } else if (contour[j + 1].flags & 1) { - quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y); - j++; - } else { - quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2); - } - } - startPoint = endPoint + 1; - } - } -} -function compileCharString(charStringCode, cmds, font, glyphId) { - function moveTo(x, y) { - cmds.push({ - cmd: "moveTo", - args: [x, y] - }); - } - function lineTo(x, y) { - cmds.push({ - cmd: "lineTo", - args: [x, y] - }); - } - function bezierCurveTo(x1, y1, x2, y2, x, y) { - cmds.push({ - cmd: "bezierCurveTo", - args: [x1, y1, x2, y2, x, y] - }); - } - const stack = []; - let x = 0, - y = 0; - let stems = 0; - function parse(code) { - let i = 0; - while (i < code.length) { - let stackClean = false; - let v = code[i++]; - let xa, xb, ya, yb, y1, y2, y3, n, subrCode; - switch (v) { - case 1: - stems += stack.length >> 1; - stackClean = true; - break; - case 3: - stems += stack.length >> 1; - stackClean = true; - break; - case 4: - y += stack.pop(); - moveTo(x, y); - stackClean = true; - break; - case 5: - while (stack.length > 0) { - x += stack.shift(); - y += stack.shift(); - lineTo(x, y); - } - break; - case 6: - while (stack.length > 0) { - x += stack.shift(); - lineTo(x, y); - if (stack.length === 0) { - break; - } - y += stack.shift(); - lineTo(x, y); - } - break; - case 7: - while (stack.length > 0) { - y += stack.shift(); - lineTo(x, y); - if (stack.length === 0) { - break; - } - x += stack.shift(); - lineTo(x, y); - } - break; - case 8: - while (stack.length > 0) { - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - } - break; - case 10: - n = stack.pop(); - subrCode = null; - if (font.isCFFCIDFont) { - const fdIndex = font.fdSelect.getFDIndex(glyphId); - if (fdIndex >= 0 && fdIndex < font.fdArray.length) { - const fontDict = font.fdArray[fdIndex]; - let subrs; - if (fontDict.privateDict?.subrsIndex) { - subrs = fontDict.privateDict.subrsIndex.objects; - } - if (subrs) { - n += getSubroutineBias(subrs); - subrCode = subrs[n]; - } - } else { - (0, _util.warn)("Invalid fd index for glyph index."); - } - } else { - subrCode = font.subrs[n + font.subrsBias]; - } - if (subrCode) { - parse(subrCode); - } - break; - case 11: - return; - case 12: - v = code[i++]; - switch (v) { - case 34: - xa = x + stack.shift(); - xb = xa + stack.shift(); - y1 = y + stack.shift(); - x = xb + stack.shift(); - bezierCurveTo(xa, y, xb, y1, x, y1); - xa = x + stack.shift(); - xb = xa + stack.shift(); - x = xb + stack.shift(); - bezierCurveTo(xa, y1, xb, y, x, y); - break; - case 35: - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - stack.pop(); - break; - case 36: - xa = x + stack.shift(); - y1 = y + stack.shift(); - xb = xa + stack.shift(); - y2 = y1 + stack.shift(); - x = xb + stack.shift(); - bezierCurveTo(xa, y1, xb, y2, x, y2); - xa = x + stack.shift(); - xb = xa + stack.shift(); - y3 = y2 + stack.shift(); - x = xb + stack.shift(); - bezierCurveTo(xa, y2, xb, y3, x, y); - break; - case 37: - const x0 = x, - y0 = y; - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb; - y = yb; - if (Math.abs(x - x0) > Math.abs(y - y0)) { - x += stack.shift(); - } else { - y += stack.shift(); - } - bezierCurveTo(xa, ya, xb, yb, x, y); - break; - default: - throw new _util.FormatError(`unknown operator: 12 ${v}`); - } - break; - case 14: - if (stack.length >= 4) { - const achar = stack.pop(); - const bchar = stack.pop(); - y = stack.pop(); - x = stack.pop(); - cmds.push({ - cmd: "save" - }, { - cmd: "translate", - args: [x, y] - }); - let cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]])); - compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId); - cmds.push({ - cmd: "restore" - }); - cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[bchar]])); - compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId); - } - return; - case 18: - stems += stack.length >> 1; - stackClean = true; - break; - case 19: - stems += stack.length >> 1; - i += stems + 7 >> 3; - stackClean = true; - break; - case 20: - stems += stack.length >> 1; - i += stems + 7 >> 3; - stackClean = true; - break; - case 21: - y += stack.pop(); - x += stack.pop(); - moveTo(x, y); - stackClean = true; - break; - case 22: - x += stack.pop(); - moveTo(x, y); - stackClean = true; - break; - case 23: - stems += stack.length >> 1; - stackClean = true; - break; - case 24: - while (stack.length > 2) { - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - } - x += stack.shift(); - y += stack.shift(); - lineTo(x, y); - break; - case 25: - while (stack.length > 6) { - x += stack.shift(); - y += stack.shift(); - lineTo(x, y); - } - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - break; - case 26: - if (stack.length % 2) { - x += stack.shift(); - } - while (stack.length > 0) { - xa = x; - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb; - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - } - break; - case 27: - if (stack.length % 2) { - y += stack.shift(); - } - while (stack.length > 0) { - xa = x + stack.shift(); - ya = y; - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb; - bezierCurveTo(xa, ya, xb, yb, x, y); - } - break; - case 28: - stack.push((code[i] << 24 | code[i + 1] << 16) >> 16); - i += 2; - break; - case 29: - n = stack.pop() + font.gsubrsBias; - subrCode = font.gsubrs[n]; - if (subrCode) { - parse(subrCode); - } - break; - case 30: - while (stack.length > 0) { - xa = x; - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + (stack.length === 1 ? stack.shift() : 0); - bezierCurveTo(xa, ya, xb, yb, x, y); - if (stack.length === 0) { - break; - } - xa = x + stack.shift(); - ya = y; - xb = xa + stack.shift(); - yb = ya + stack.shift(); - y = yb + stack.shift(); - x = xb + (stack.length === 1 ? stack.shift() : 0); - bezierCurveTo(xa, ya, xb, yb, x, y); - } - break; - case 31: - while (stack.length > 0) { - xa = x + stack.shift(); - ya = y; - xb = xa + stack.shift(); - yb = ya + stack.shift(); - y = yb + stack.shift(); - x = xb + (stack.length === 1 ? stack.shift() : 0); - bezierCurveTo(xa, ya, xb, yb, x, y); - if (stack.length === 0) { - break; - } - xa = x; - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + (stack.length === 1 ? stack.shift() : 0); - bezierCurveTo(xa, ya, xb, yb, x, y); - } - break; - default: - if (v < 32) { - throw new _util.FormatError(`unknown operator: ${v}`); - } - if (v < 247) { - stack.push(v - 139); - } else if (v < 251) { - stack.push((v - 247) * 256 + code[i++] + 108); - } else if (v < 255) { - stack.push(-(v - 251) * 256 - code[i++] - 108); - } else { - stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536); - i += 4; - } - break; - } - if (stackClean) { - stack.length = 0; - } - } - } - parse(charStringCode); -} -const NOOP = []; -class CompiledFont { - constructor(fontMatrix) { - if (this.constructor === CompiledFont) { - (0, _util.unreachable)("Cannot initialize CompiledFont."); - } - this.fontMatrix = fontMatrix; - this.compiledGlyphs = Object.create(null); - this.compiledCharCodeToGlyphId = Object.create(null); - } - getPathJs(unicode) { - const { - charCode, - glyphId - } = lookupCmap(this.cmap, unicode); - let fn = this.compiledGlyphs[glyphId]; - if (!fn) { - try { - fn = this.compileGlyph(this.glyphs[glyphId], glyphId); - this.compiledGlyphs[glyphId] = fn; - } catch (ex) { - this.compiledGlyphs[glyphId] = NOOP; - if (this.compiledCharCodeToGlyphId[charCode] === undefined) { - this.compiledCharCodeToGlyphId[charCode] = glyphId; - } - throw ex; - } - } - if (this.compiledCharCodeToGlyphId[charCode] === undefined) { - this.compiledCharCodeToGlyphId[charCode] = glyphId; - } - return fn; - } - compileGlyph(code, glyphId) { - if (!code || code.length === 0 || code[0] === 14) { - return NOOP; - } - let fontMatrix = this.fontMatrix; - if (this.isCFFCIDFont) { - const fdIndex = this.fdSelect.getFDIndex(glyphId); - if (fdIndex >= 0 && fdIndex < this.fdArray.length) { - const fontDict = this.fdArray[fdIndex]; - fontMatrix = fontDict.getByName("FontMatrix") || _util.FONT_IDENTITY_MATRIX; - } else { - (0, _util.warn)("Invalid fd index for glyph index."); - } - } - const cmds = [{ - cmd: "save" - }, { - cmd: "transform", - args: fontMatrix.slice() - }, { - cmd: "scale", - args: ["size", "-size"] - }]; - this.compileGlyphImpl(code, cmds, glyphId); - cmds.push({ - cmd: "restore" - }); - return cmds; - } - compileGlyphImpl() { - (0, _util.unreachable)("Children classes should implement this."); - } - hasBuiltPath(unicode) { - const { - charCode, - glyphId - } = lookupCmap(this.cmap, unicode); - return this.compiledGlyphs[glyphId] !== undefined && this.compiledCharCodeToGlyphId[charCode] !== undefined; - } -} -class TrueTypeCompiled extends CompiledFont { - constructor(glyphs, cmap, fontMatrix) { - super(fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]); - this.glyphs = glyphs; - this.cmap = cmap; - } - compileGlyphImpl(code, cmds) { - compileGlyf(code, cmds, this); - } -} -class Type2Compiled extends CompiledFont { - constructor(cffInfo, cmap, fontMatrix, glyphNameMap) { - super(fontMatrix || [0.001, 0, 0, 0.001, 0, 0]); - this.glyphs = cffInfo.glyphs; - this.gsubrs = cffInfo.gsubrs || []; - this.subrs = cffInfo.subrs || []; - this.cmap = cmap; - this.glyphNameMap = glyphNameMap || (0, _glyphlist.getGlyphsUnicode)(); - this.gsubrsBias = getSubroutineBias(this.gsubrs); - this.subrsBias = getSubroutineBias(this.subrs); - this.isCFFCIDFont = cffInfo.isCFFCIDFont; - this.fdSelect = cffInfo.fdSelect; - this.fdArray = cffInfo.fdArray; - } - compileGlyphImpl(code, cmds, glyphId) { - compileCharString(code, cmds, this, glyphId); - } -} -class FontRendererFactory { - static create(font, seacAnalysisEnabled) { - const data = new Uint8Array(font.data); - let cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm; - const numTables = getUint16(data, 4); - for (let i = 0, p = 12; i < numTables; i++, p += 16) { - const tag = (0, _util.bytesToString)(data.subarray(p, p + 4)); - const offset = getUint32(data, p + 8); - const length = getUint32(data, p + 12); - switch (tag) { - case "cmap": - cmap = parseCmap(data, offset, offset + length); - break; - case "glyf": - glyf = data.subarray(offset, offset + length); - break; - case "loca": - loca = data.subarray(offset, offset + length); - break; - case "head": - unitsPerEm = getUint16(data, offset + 18); - indexToLocFormat = getUint16(data, offset + 50); - break; - case "CFF ": - cff = parseCff(data, offset, offset + length, seacAnalysisEnabled); - break; - } - } - if (glyf) { - const fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0]; - return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix); - } - return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap); - } -} -exports.FontRendererFactory = FontRendererFactory; - -/***/ }), -/* 45 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getMetrics = exports.getFontBasicMetrics = void 0; -var _core_utils = __w_pdfjs_require__(3); -const getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) { - t.Courier = 600; - t["Courier-Bold"] = 600; - t["Courier-BoldOblique"] = 600; - t["Courier-Oblique"] = 600; - t.Helvetica = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 278; - t.exclam = 278; - t.quotedbl = 355; - t.numbersign = 556; - t.dollar = 556; - t.percent = 889; - t.ampersand = 667; - t.quoteright = 222; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 389; - t.plus = 584; - t.comma = 278; - t.hyphen = 333; - t.period = 278; - t.slash = 278; - t.zero = 556; - t.one = 556; - t.two = 556; - t.three = 556; - t.four = 556; - t.five = 556; - t.six = 556; - t.seven = 556; - t.eight = 556; - t.nine = 556; - t.colon = 278; - t.semicolon = 278; - t.less = 584; - t.equal = 584; - t.greater = 584; - t.question = 556; - t.at = 1015; - t.A = 667; - t.B = 667; - t.C = 722; - t.D = 722; - t.E = 667; - t.F = 611; - t.G = 778; - t.H = 722; - t.I = 278; - t.J = 500; - t.K = 667; - t.L = 556; - t.M = 833; - t.N = 722; - t.O = 778; - t.P = 667; - t.Q = 778; - t.R = 722; - t.S = 667; - t.T = 611; - t.U = 722; - t.V = 667; - t.W = 944; - t.X = 667; - t.Y = 667; - t.Z = 611; - t.bracketleft = 278; - t.backslash = 278; - t.bracketright = 278; - t.asciicircum = 469; - t.underscore = 556; - t.quoteleft = 222; - t.a = 556; - t.b = 556; - t.c = 500; - t.d = 556; - t.e = 556; - t.f = 278; - t.g = 556; - t.h = 556; - t.i = 222; - t.j = 222; - t.k = 500; - t.l = 222; - t.m = 833; - t.n = 556; - t.o = 556; - t.p = 556; - t.q = 556; - t.r = 333; - t.s = 500; - t.t = 278; - t.u = 556; - t.v = 500; - t.w = 722; - t.x = 500; - t.y = 500; - t.z = 500; - t.braceleft = 334; - t.bar = 260; - t.braceright = 334; - t.asciitilde = 584; - t.exclamdown = 333; - t.cent = 556; - t.sterling = 556; - t.fraction = 167; - t.yen = 556; - t.florin = 556; - t.section = 556; - t.currency = 556; - t.quotesingle = 191; - t.quotedblleft = 333; - t.guillemotleft = 556; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 500; - t.fl = 500; - t.endash = 556; - t.dagger = 556; - t.daggerdbl = 556; - t.periodcentered = 278; - t.paragraph = 537; - t.bullet = 350; - t.quotesinglbase = 222; - t.quotedblbase = 333; - t.quotedblright = 333; - t.guillemotright = 556; - t.ellipsis = 1000; - t.perthousand = 1000; - t.questiondown = 611; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 1000; - t.AE = 1000; - t.ordfeminine = 370; - t.Lslash = 556; - t.Oslash = 778; - t.OE = 1000; - t.ordmasculine = 365; - t.ae = 889; - t.dotlessi = 278; - t.lslash = 222; - t.oslash = 611; - t.oe = 944; - t.germandbls = 611; - t.Idieresis = 278; - t.eacute = 556; - t.abreve = 556; - t.uhungarumlaut = 556; - t.ecaron = 556; - t.Ydieresis = 667; - t.divide = 584; - t.Yacute = 667; - t.Acircumflex = 667; - t.aacute = 556; - t.Ucircumflex = 722; - t.yacute = 500; - t.scommaaccent = 500; - t.ecircumflex = 556; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 556; - t.Uacute = 722; - t.uogonek = 556; - t.Edieresis = 667; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 737; - t.Emacron = 667; - t.ccaron = 500; - t.aring = 556; - t.Ncommaaccent = 722; - t.lacute = 222; - t.agrave = 556; - t.Tcommaaccent = 611; - t.Cacute = 722; - t.atilde = 556; - t.Edotaccent = 667; - t.scaron = 500; - t.scedilla = 500; - t.iacute = 278; - t.lozenge = 471; - t.Rcaron = 722; - t.Gcommaaccent = 778; - t.ucircumflex = 556; - t.acircumflex = 556; - t.Amacron = 667; - t.rcaron = 333; - t.ccedilla = 500; - t.Zdotaccent = 611; - t.Thorn = 667; - t.Omacron = 778; - t.Racute = 722; - t.Sacute = 667; - t.dcaron = 643; - t.Umacron = 722; - t.uring = 556; - t.threesuperior = 333; - t.Ograve = 778; - t.Agrave = 667; - t.Abreve = 667; - t.multiply = 584; - t.uacute = 556; - t.Tcaron = 611; - t.partialdiff = 476; - t.ydieresis = 500; - t.Nacute = 722; - t.icircumflex = 278; - t.Ecircumflex = 667; - t.adieresis = 556; - t.edieresis = 556; - t.cacute = 500; - t.nacute = 556; - t.umacron = 556; - t.Ncaron = 722; - t.Iacute = 278; - t.plusminus = 584; - t.brokenbar = 260; - t.registered = 737; - t.Gbreve = 778; - t.Idotaccent = 278; - t.summation = 600; - t.Egrave = 667; - t.racute = 333; - t.omacron = 556; - t.Zacute = 611; - t.Zcaron = 611; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 722; - t.lcommaaccent = 222; - t.tcaron = 317; - t.eogonek = 556; - t.Uogonek = 722; - t.Aacute = 667; - t.Adieresis = 667; - t.egrave = 556; - t.zacute = 500; - t.iogonek = 222; - t.Oacute = 778; - t.oacute = 556; - t.amacron = 556; - t.sacute = 500; - t.idieresis = 278; - t.Ocircumflex = 778; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 556; - t.twosuperior = 333; - t.Odieresis = 778; - t.mu = 556; - t.igrave = 278; - t.ohungarumlaut = 556; - t.Eogonek = 667; - t.dcroat = 556; - t.threequarters = 834; - t.Scedilla = 667; - t.lcaron = 299; - t.Kcommaaccent = 667; - t.Lacute = 556; - t.trademark = 1000; - t.edotaccent = 556; - t.Igrave = 278; - t.Imacron = 278; - t.Lcaron = 556; - t.onehalf = 834; - t.lessequal = 549; - t.ocircumflex = 556; - t.ntilde = 556; - t.Uhungarumlaut = 722; - t.Eacute = 667; - t.emacron = 556; - t.gbreve = 556; - t.onequarter = 834; - t.Scaron = 667; - t.Scommaaccent = 667; - t.Ohungarumlaut = 778; - t.degree = 400; - t.ograve = 556; - t.Ccaron = 722; - t.ugrave = 556; - t.radical = 453; - t.Dcaron = 722; - t.rcommaaccent = 333; - t.Ntilde = 722; - t.otilde = 556; - t.Rcommaaccent = 722; - t.Lcommaaccent = 556; - t.Atilde = 667; - t.Aogonek = 667; - t.Aring = 667; - t.Otilde = 778; - t.zdotaccent = 500; - t.Ecaron = 667; - t.Iogonek = 278; - t.kcommaaccent = 500; - t.minus = 584; - t.Icircumflex = 278; - t.ncaron = 556; - t.tcommaaccent = 278; - t.logicalnot = 584; - t.odieresis = 556; - t.udieresis = 556; - t.notequal = 549; - t.gcommaaccent = 556; - t.eth = 556; - t.zcaron = 500; - t.ncommaaccent = 556; - t.onesuperior = 333; - t.imacron = 278; - t.Euro = 556; - }); - t["Helvetica-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 278; - t.exclam = 333; - t.quotedbl = 474; - t.numbersign = 556; - t.dollar = 556; - t.percent = 889; - t.ampersand = 722; - t.quoteright = 278; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 389; - t.plus = 584; - t.comma = 278; - t.hyphen = 333; - t.period = 278; - t.slash = 278; - t.zero = 556; - t.one = 556; - t.two = 556; - t.three = 556; - t.four = 556; - t.five = 556; - t.six = 556; - t.seven = 556; - t.eight = 556; - t.nine = 556; - t.colon = 333; - t.semicolon = 333; - t.less = 584; - t.equal = 584; - t.greater = 584; - t.question = 611; - t.at = 975; - t.A = 722; - t.B = 722; - t.C = 722; - t.D = 722; - t.E = 667; - t.F = 611; - t.G = 778; - t.H = 722; - t.I = 278; - t.J = 556; - t.K = 722; - t.L = 611; - t.M = 833; - t.N = 722; - t.O = 778; - t.P = 667; - t.Q = 778; - t.R = 722; - t.S = 667; - t.T = 611; - t.U = 722; - t.V = 667; - t.W = 944; - t.X = 667; - t.Y = 667; - t.Z = 611; - t.bracketleft = 333; - t.backslash = 278; - t.bracketright = 333; - t.asciicircum = 584; - t.underscore = 556; - t.quoteleft = 278; - t.a = 556; - t.b = 611; - t.c = 556; - t.d = 611; - t.e = 556; - t.f = 333; - t.g = 611; - t.h = 611; - t.i = 278; - t.j = 278; - t.k = 556; - t.l = 278; - t.m = 889; - t.n = 611; - t.o = 611; - t.p = 611; - t.q = 611; - t.r = 389; - t.s = 556; - t.t = 333; - t.u = 611; - t.v = 556; - t.w = 778; - t.x = 556; - t.y = 556; - t.z = 500; - t.braceleft = 389; - t.bar = 280; - t.braceright = 389; - t.asciitilde = 584; - t.exclamdown = 333; - t.cent = 556; - t.sterling = 556; - t.fraction = 167; - t.yen = 556; - t.florin = 556; - t.section = 556; - t.currency = 556; - t.quotesingle = 238; - t.quotedblleft = 500; - t.guillemotleft = 556; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 611; - t.fl = 611; - t.endash = 556; - t.dagger = 556; - t.daggerdbl = 556; - t.periodcentered = 278; - t.paragraph = 556; - t.bullet = 350; - t.quotesinglbase = 278; - t.quotedblbase = 500; - t.quotedblright = 500; - t.guillemotright = 556; - t.ellipsis = 1000; - t.perthousand = 1000; - t.questiondown = 611; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 1000; - t.AE = 1000; - t.ordfeminine = 370; - t.Lslash = 611; - t.Oslash = 778; - t.OE = 1000; - t.ordmasculine = 365; - t.ae = 889; - t.dotlessi = 278; - t.lslash = 278; - t.oslash = 611; - t.oe = 944; - t.germandbls = 611; - t.Idieresis = 278; - t.eacute = 556; - t.abreve = 556; - t.uhungarumlaut = 611; - t.ecaron = 556; - t.Ydieresis = 667; - t.divide = 584; - t.Yacute = 667; - t.Acircumflex = 722; - t.aacute = 556; - t.Ucircumflex = 722; - t.yacute = 556; - t.scommaaccent = 556; - t.ecircumflex = 556; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 556; - t.Uacute = 722; - t.uogonek = 611; - t.Edieresis = 667; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 737; - t.Emacron = 667; - t.ccaron = 556; - t.aring = 556; - t.Ncommaaccent = 722; - t.lacute = 278; - t.agrave = 556; - t.Tcommaaccent = 611; - t.Cacute = 722; - t.atilde = 556; - t.Edotaccent = 667; - t.scaron = 556; - t.scedilla = 556; - t.iacute = 278; - t.lozenge = 494; - t.Rcaron = 722; - t.Gcommaaccent = 778; - t.ucircumflex = 611; - t.acircumflex = 556; - t.Amacron = 722; - t.rcaron = 389; - t.ccedilla = 556; - t.Zdotaccent = 611; - t.Thorn = 667; - t.Omacron = 778; - t.Racute = 722; - t.Sacute = 667; - t.dcaron = 743; - t.Umacron = 722; - t.uring = 611; - t.threesuperior = 333; - t.Ograve = 778; - t.Agrave = 722; - t.Abreve = 722; - t.multiply = 584; - t.uacute = 611; - t.Tcaron = 611; - t.partialdiff = 494; - t.ydieresis = 556; - t.Nacute = 722; - t.icircumflex = 278; - t.Ecircumflex = 667; - t.adieresis = 556; - t.edieresis = 556; - t.cacute = 556; - t.nacute = 611; - t.umacron = 611; - t.Ncaron = 722; - t.Iacute = 278; - t.plusminus = 584; - t.brokenbar = 280; - t.registered = 737; - t.Gbreve = 778; - t.Idotaccent = 278; - t.summation = 600; - t.Egrave = 667; - t.racute = 389; - t.omacron = 611; - t.Zacute = 611; - t.Zcaron = 611; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 722; - t.lcommaaccent = 278; - t.tcaron = 389; - t.eogonek = 556; - t.Uogonek = 722; - t.Aacute = 722; - t.Adieresis = 722; - t.egrave = 556; - t.zacute = 500; - t.iogonek = 278; - t.Oacute = 778; - t.oacute = 611; - t.amacron = 556; - t.sacute = 556; - t.idieresis = 278; - t.Ocircumflex = 778; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 611; - t.twosuperior = 333; - t.Odieresis = 778; - t.mu = 611; - t.igrave = 278; - t.ohungarumlaut = 611; - t.Eogonek = 667; - t.dcroat = 611; - t.threequarters = 834; - t.Scedilla = 667; - t.lcaron = 400; - t.Kcommaaccent = 722; - t.Lacute = 611; - t.trademark = 1000; - t.edotaccent = 556; - t.Igrave = 278; - t.Imacron = 278; - t.Lcaron = 611; - t.onehalf = 834; - t.lessequal = 549; - t.ocircumflex = 611; - t.ntilde = 611; - t.Uhungarumlaut = 722; - t.Eacute = 667; - t.emacron = 556; - t.gbreve = 611; - t.onequarter = 834; - t.Scaron = 667; - t.Scommaaccent = 667; - t.Ohungarumlaut = 778; - t.degree = 400; - t.ograve = 611; - t.Ccaron = 722; - t.ugrave = 611; - t.radical = 549; - t.Dcaron = 722; - t.rcommaaccent = 389; - t.Ntilde = 722; - t.otilde = 611; - t.Rcommaaccent = 722; - t.Lcommaaccent = 611; - t.Atilde = 722; - t.Aogonek = 722; - t.Aring = 722; - t.Otilde = 778; - t.zdotaccent = 500; - t.Ecaron = 667; - t.Iogonek = 278; - t.kcommaaccent = 556; - t.minus = 584; - t.Icircumflex = 278; - t.ncaron = 611; - t.tcommaaccent = 333; - t.logicalnot = 584; - t.odieresis = 611; - t.udieresis = 611; - t.notequal = 549; - t.gcommaaccent = 611; - t.eth = 611; - t.zcaron = 500; - t.ncommaaccent = 611; - t.onesuperior = 333; - t.imacron = 278; - t.Euro = 556; - }); - t["Helvetica-BoldOblique"] = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 278; - t.exclam = 333; - t.quotedbl = 474; - t.numbersign = 556; - t.dollar = 556; - t.percent = 889; - t.ampersand = 722; - t.quoteright = 278; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 389; - t.plus = 584; - t.comma = 278; - t.hyphen = 333; - t.period = 278; - t.slash = 278; - t.zero = 556; - t.one = 556; - t.two = 556; - t.three = 556; - t.four = 556; - t.five = 556; - t.six = 556; - t.seven = 556; - t.eight = 556; - t.nine = 556; - t.colon = 333; - t.semicolon = 333; - t.less = 584; - t.equal = 584; - t.greater = 584; - t.question = 611; - t.at = 975; - t.A = 722; - t.B = 722; - t.C = 722; - t.D = 722; - t.E = 667; - t.F = 611; - t.G = 778; - t.H = 722; - t.I = 278; - t.J = 556; - t.K = 722; - t.L = 611; - t.M = 833; - t.N = 722; - t.O = 778; - t.P = 667; - t.Q = 778; - t.R = 722; - t.S = 667; - t.T = 611; - t.U = 722; - t.V = 667; - t.W = 944; - t.X = 667; - t.Y = 667; - t.Z = 611; - t.bracketleft = 333; - t.backslash = 278; - t.bracketright = 333; - t.asciicircum = 584; - t.underscore = 556; - t.quoteleft = 278; - t.a = 556; - t.b = 611; - t.c = 556; - t.d = 611; - t.e = 556; - t.f = 333; - t.g = 611; - t.h = 611; - t.i = 278; - t.j = 278; - t.k = 556; - t.l = 278; - t.m = 889; - t.n = 611; - t.o = 611; - t.p = 611; - t.q = 611; - t.r = 389; - t.s = 556; - t.t = 333; - t.u = 611; - t.v = 556; - t.w = 778; - t.x = 556; - t.y = 556; - t.z = 500; - t.braceleft = 389; - t.bar = 280; - t.braceright = 389; - t.asciitilde = 584; - t.exclamdown = 333; - t.cent = 556; - t.sterling = 556; - t.fraction = 167; - t.yen = 556; - t.florin = 556; - t.section = 556; - t.currency = 556; - t.quotesingle = 238; - t.quotedblleft = 500; - t.guillemotleft = 556; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 611; - t.fl = 611; - t.endash = 556; - t.dagger = 556; - t.daggerdbl = 556; - t.periodcentered = 278; - t.paragraph = 556; - t.bullet = 350; - t.quotesinglbase = 278; - t.quotedblbase = 500; - t.quotedblright = 500; - t.guillemotright = 556; - t.ellipsis = 1000; - t.perthousand = 1000; - t.questiondown = 611; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 1000; - t.AE = 1000; - t.ordfeminine = 370; - t.Lslash = 611; - t.Oslash = 778; - t.OE = 1000; - t.ordmasculine = 365; - t.ae = 889; - t.dotlessi = 278; - t.lslash = 278; - t.oslash = 611; - t.oe = 944; - t.germandbls = 611; - t.Idieresis = 278; - t.eacute = 556; - t.abreve = 556; - t.uhungarumlaut = 611; - t.ecaron = 556; - t.Ydieresis = 667; - t.divide = 584; - t.Yacute = 667; - t.Acircumflex = 722; - t.aacute = 556; - t.Ucircumflex = 722; - t.yacute = 556; - t.scommaaccent = 556; - t.ecircumflex = 556; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 556; - t.Uacute = 722; - t.uogonek = 611; - t.Edieresis = 667; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 737; - t.Emacron = 667; - t.ccaron = 556; - t.aring = 556; - t.Ncommaaccent = 722; - t.lacute = 278; - t.agrave = 556; - t.Tcommaaccent = 611; - t.Cacute = 722; - t.atilde = 556; - t.Edotaccent = 667; - t.scaron = 556; - t.scedilla = 556; - t.iacute = 278; - t.lozenge = 494; - t.Rcaron = 722; - t.Gcommaaccent = 778; - t.ucircumflex = 611; - t.acircumflex = 556; - t.Amacron = 722; - t.rcaron = 389; - t.ccedilla = 556; - t.Zdotaccent = 611; - t.Thorn = 667; - t.Omacron = 778; - t.Racute = 722; - t.Sacute = 667; - t.dcaron = 743; - t.Umacron = 722; - t.uring = 611; - t.threesuperior = 333; - t.Ograve = 778; - t.Agrave = 722; - t.Abreve = 722; - t.multiply = 584; - t.uacute = 611; - t.Tcaron = 611; - t.partialdiff = 494; - t.ydieresis = 556; - t.Nacute = 722; - t.icircumflex = 278; - t.Ecircumflex = 667; - t.adieresis = 556; - t.edieresis = 556; - t.cacute = 556; - t.nacute = 611; - t.umacron = 611; - t.Ncaron = 722; - t.Iacute = 278; - t.plusminus = 584; - t.brokenbar = 280; - t.registered = 737; - t.Gbreve = 778; - t.Idotaccent = 278; - t.summation = 600; - t.Egrave = 667; - t.racute = 389; - t.omacron = 611; - t.Zacute = 611; - t.Zcaron = 611; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 722; - t.lcommaaccent = 278; - t.tcaron = 389; - t.eogonek = 556; - t.Uogonek = 722; - t.Aacute = 722; - t.Adieresis = 722; - t.egrave = 556; - t.zacute = 500; - t.iogonek = 278; - t.Oacute = 778; - t.oacute = 611; - t.amacron = 556; - t.sacute = 556; - t.idieresis = 278; - t.Ocircumflex = 778; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 611; - t.twosuperior = 333; - t.Odieresis = 778; - t.mu = 611; - t.igrave = 278; - t.ohungarumlaut = 611; - t.Eogonek = 667; - t.dcroat = 611; - t.threequarters = 834; - t.Scedilla = 667; - t.lcaron = 400; - t.Kcommaaccent = 722; - t.Lacute = 611; - t.trademark = 1000; - t.edotaccent = 556; - t.Igrave = 278; - t.Imacron = 278; - t.Lcaron = 611; - t.onehalf = 834; - t.lessequal = 549; - t.ocircumflex = 611; - t.ntilde = 611; - t.Uhungarumlaut = 722; - t.Eacute = 667; - t.emacron = 556; - t.gbreve = 611; - t.onequarter = 834; - t.Scaron = 667; - t.Scommaaccent = 667; - t.Ohungarumlaut = 778; - t.degree = 400; - t.ograve = 611; - t.Ccaron = 722; - t.ugrave = 611; - t.radical = 549; - t.Dcaron = 722; - t.rcommaaccent = 389; - t.Ntilde = 722; - t.otilde = 611; - t.Rcommaaccent = 722; - t.Lcommaaccent = 611; - t.Atilde = 722; - t.Aogonek = 722; - t.Aring = 722; - t.Otilde = 778; - t.zdotaccent = 500; - t.Ecaron = 667; - t.Iogonek = 278; - t.kcommaaccent = 556; - t.minus = 584; - t.Icircumflex = 278; - t.ncaron = 611; - t.tcommaaccent = 333; - t.logicalnot = 584; - t.odieresis = 611; - t.udieresis = 611; - t.notequal = 549; - t.gcommaaccent = 611; - t.eth = 611; - t.zcaron = 500; - t.ncommaaccent = 611; - t.onesuperior = 333; - t.imacron = 278; - t.Euro = 556; - }); - t["Helvetica-Oblique"] = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 278; - t.exclam = 278; - t.quotedbl = 355; - t.numbersign = 556; - t.dollar = 556; - t.percent = 889; - t.ampersand = 667; - t.quoteright = 222; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 389; - t.plus = 584; - t.comma = 278; - t.hyphen = 333; - t.period = 278; - t.slash = 278; - t.zero = 556; - t.one = 556; - t.two = 556; - t.three = 556; - t.four = 556; - t.five = 556; - t.six = 556; - t.seven = 556; - t.eight = 556; - t.nine = 556; - t.colon = 278; - t.semicolon = 278; - t.less = 584; - t.equal = 584; - t.greater = 584; - t.question = 556; - t.at = 1015; - t.A = 667; - t.B = 667; - t.C = 722; - t.D = 722; - t.E = 667; - t.F = 611; - t.G = 778; - t.H = 722; - t.I = 278; - t.J = 500; - t.K = 667; - t.L = 556; - t.M = 833; - t.N = 722; - t.O = 778; - t.P = 667; - t.Q = 778; - t.R = 722; - t.S = 667; - t.T = 611; - t.U = 722; - t.V = 667; - t.W = 944; - t.X = 667; - t.Y = 667; - t.Z = 611; - t.bracketleft = 278; - t.backslash = 278; - t.bracketright = 278; - t.asciicircum = 469; - t.underscore = 556; - t.quoteleft = 222; - t.a = 556; - t.b = 556; - t.c = 500; - t.d = 556; - t.e = 556; - t.f = 278; - t.g = 556; - t.h = 556; - t.i = 222; - t.j = 222; - t.k = 500; - t.l = 222; - t.m = 833; - t.n = 556; - t.o = 556; - t.p = 556; - t.q = 556; - t.r = 333; - t.s = 500; - t.t = 278; - t.u = 556; - t.v = 500; - t.w = 722; - t.x = 500; - t.y = 500; - t.z = 500; - t.braceleft = 334; - t.bar = 260; - t.braceright = 334; - t.asciitilde = 584; - t.exclamdown = 333; - t.cent = 556; - t.sterling = 556; - t.fraction = 167; - t.yen = 556; - t.florin = 556; - t.section = 556; - t.currency = 556; - t.quotesingle = 191; - t.quotedblleft = 333; - t.guillemotleft = 556; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 500; - t.fl = 500; - t.endash = 556; - t.dagger = 556; - t.daggerdbl = 556; - t.periodcentered = 278; - t.paragraph = 537; - t.bullet = 350; - t.quotesinglbase = 222; - t.quotedblbase = 333; - t.quotedblright = 333; - t.guillemotright = 556; - t.ellipsis = 1000; - t.perthousand = 1000; - t.questiondown = 611; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 1000; - t.AE = 1000; - t.ordfeminine = 370; - t.Lslash = 556; - t.Oslash = 778; - t.OE = 1000; - t.ordmasculine = 365; - t.ae = 889; - t.dotlessi = 278; - t.lslash = 222; - t.oslash = 611; - t.oe = 944; - t.germandbls = 611; - t.Idieresis = 278; - t.eacute = 556; - t.abreve = 556; - t.uhungarumlaut = 556; - t.ecaron = 556; - t.Ydieresis = 667; - t.divide = 584; - t.Yacute = 667; - t.Acircumflex = 667; - t.aacute = 556; - t.Ucircumflex = 722; - t.yacute = 500; - t.scommaaccent = 500; - t.ecircumflex = 556; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 556; - t.Uacute = 722; - t.uogonek = 556; - t.Edieresis = 667; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 737; - t.Emacron = 667; - t.ccaron = 500; - t.aring = 556; - t.Ncommaaccent = 722; - t.lacute = 222; - t.agrave = 556; - t.Tcommaaccent = 611; - t.Cacute = 722; - t.atilde = 556; - t.Edotaccent = 667; - t.scaron = 500; - t.scedilla = 500; - t.iacute = 278; - t.lozenge = 471; - t.Rcaron = 722; - t.Gcommaaccent = 778; - t.ucircumflex = 556; - t.acircumflex = 556; - t.Amacron = 667; - t.rcaron = 333; - t.ccedilla = 500; - t.Zdotaccent = 611; - t.Thorn = 667; - t.Omacron = 778; - t.Racute = 722; - t.Sacute = 667; - t.dcaron = 643; - t.Umacron = 722; - t.uring = 556; - t.threesuperior = 333; - t.Ograve = 778; - t.Agrave = 667; - t.Abreve = 667; - t.multiply = 584; - t.uacute = 556; - t.Tcaron = 611; - t.partialdiff = 476; - t.ydieresis = 500; - t.Nacute = 722; - t.icircumflex = 278; - t.Ecircumflex = 667; - t.adieresis = 556; - t.edieresis = 556; - t.cacute = 500; - t.nacute = 556; - t.umacron = 556; - t.Ncaron = 722; - t.Iacute = 278; - t.plusminus = 584; - t.brokenbar = 260; - t.registered = 737; - t.Gbreve = 778; - t.Idotaccent = 278; - t.summation = 600; - t.Egrave = 667; - t.racute = 333; - t.omacron = 556; - t.Zacute = 611; - t.Zcaron = 611; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 722; - t.lcommaaccent = 222; - t.tcaron = 317; - t.eogonek = 556; - t.Uogonek = 722; - t.Aacute = 667; - t.Adieresis = 667; - t.egrave = 556; - t.zacute = 500; - t.iogonek = 222; - t.Oacute = 778; - t.oacute = 556; - t.amacron = 556; - t.sacute = 500; - t.idieresis = 278; - t.Ocircumflex = 778; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 556; - t.twosuperior = 333; - t.Odieresis = 778; - t.mu = 556; - t.igrave = 278; - t.ohungarumlaut = 556; - t.Eogonek = 667; - t.dcroat = 556; - t.threequarters = 834; - t.Scedilla = 667; - t.lcaron = 299; - t.Kcommaaccent = 667; - t.Lacute = 556; - t.trademark = 1000; - t.edotaccent = 556; - t.Igrave = 278; - t.Imacron = 278; - t.Lcaron = 556; - t.onehalf = 834; - t.lessequal = 549; - t.ocircumflex = 556; - t.ntilde = 556; - t.Uhungarumlaut = 722; - t.Eacute = 667; - t.emacron = 556; - t.gbreve = 556; - t.onequarter = 834; - t.Scaron = 667; - t.Scommaaccent = 667; - t.Ohungarumlaut = 778; - t.degree = 400; - t.ograve = 556; - t.Ccaron = 722; - t.ugrave = 556; - t.radical = 453; - t.Dcaron = 722; - t.rcommaaccent = 333; - t.Ntilde = 722; - t.otilde = 556; - t.Rcommaaccent = 722; - t.Lcommaaccent = 556; - t.Atilde = 667; - t.Aogonek = 667; - t.Aring = 667; - t.Otilde = 778; - t.zdotaccent = 500; - t.Ecaron = 667; - t.Iogonek = 278; - t.kcommaaccent = 500; - t.minus = 584; - t.Icircumflex = 278; - t.ncaron = 556; - t.tcommaaccent = 278; - t.logicalnot = 584; - t.odieresis = 556; - t.udieresis = 556; - t.notequal = 549; - t.gcommaaccent = 556; - t.eth = 556; - t.zcaron = 500; - t.ncommaaccent = 556; - t.onesuperior = 333; - t.imacron = 278; - t.Euro = 556; - }); - t.Symbol = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 250; - t.exclam = 333; - t.universal = 713; - t.numbersign = 500; - t.existential = 549; - t.percent = 833; - t.ampersand = 778; - t.suchthat = 439; - t.parenleft = 333; - t.parenright = 333; - t.asteriskmath = 500; - t.plus = 549; - t.comma = 250; - t.minus = 549; - t.period = 250; - t.slash = 278; - t.zero = 500; - t.one = 500; - t.two = 500; - t.three = 500; - t.four = 500; - t.five = 500; - t.six = 500; - t.seven = 500; - t.eight = 500; - t.nine = 500; - t.colon = 278; - t.semicolon = 278; - t.less = 549; - t.equal = 549; - t.greater = 549; - t.question = 444; - t.congruent = 549; - t.Alpha = 722; - t.Beta = 667; - t.Chi = 722; - t.Delta = 612; - t.Epsilon = 611; - t.Phi = 763; - t.Gamma = 603; - t.Eta = 722; - t.Iota = 333; - t.theta1 = 631; - t.Kappa = 722; - t.Lambda = 686; - t.Mu = 889; - t.Nu = 722; - t.Omicron = 722; - t.Pi = 768; - t.Theta = 741; - t.Rho = 556; - t.Sigma = 592; - t.Tau = 611; - t.Upsilon = 690; - t.sigma1 = 439; - t.Omega = 768; - t.Xi = 645; - t.Psi = 795; - t.Zeta = 611; - t.bracketleft = 333; - t.therefore = 863; - t.bracketright = 333; - t.perpendicular = 658; - t.underscore = 500; - t.radicalex = 500; - t.alpha = 631; - t.beta = 549; - t.chi = 549; - t.delta = 494; - t.epsilon = 439; - t.phi = 521; - t.gamma = 411; - t.eta = 603; - t.iota = 329; - t.phi1 = 603; - t.kappa = 549; - t.lambda = 549; - t.mu = 576; - t.nu = 521; - t.omicron = 549; - t.pi = 549; - t.theta = 521; - t.rho = 549; - t.sigma = 603; - t.tau = 439; - t.upsilon = 576; - t.omega1 = 713; - t.omega = 686; - t.xi = 493; - t.psi = 686; - t.zeta = 494; - t.braceleft = 480; - t.bar = 200; - t.braceright = 480; - t.similar = 549; - t.Euro = 750; - t.Upsilon1 = 620; - t.minute = 247; - t.lessequal = 549; - t.fraction = 167; - t.infinity = 713; - t.florin = 500; - t.club = 753; - t.diamond = 753; - t.heart = 753; - t.spade = 753; - t.arrowboth = 1042; - t.arrowleft = 987; - t.arrowup = 603; - t.arrowright = 987; - t.arrowdown = 603; - t.degree = 400; - t.plusminus = 549; - t.second = 411; - t.greaterequal = 549; - t.multiply = 549; - t.proportional = 713; - t.partialdiff = 494; - t.bullet = 460; - t.divide = 549; - t.notequal = 549; - t.equivalence = 549; - t.approxequal = 549; - t.ellipsis = 1000; - t.arrowvertex = 603; - t.arrowhorizex = 1000; - t.carriagereturn = 658; - t.aleph = 823; - t.Ifraktur = 686; - t.Rfraktur = 795; - t.weierstrass = 987; - t.circlemultiply = 768; - t.circleplus = 768; - t.emptyset = 823; - t.intersection = 768; - t.union = 768; - t.propersuperset = 713; - t.reflexsuperset = 713; - t.notsubset = 713; - t.propersubset = 713; - t.reflexsubset = 713; - t.element = 713; - t.notelement = 713; - t.angle = 768; - t.gradient = 713; - t.registerserif = 790; - t.copyrightserif = 790; - t.trademarkserif = 890; - t.product = 823; - t.radical = 549; - t.dotmath = 250; - t.logicalnot = 713; - t.logicaland = 603; - t.logicalor = 603; - t.arrowdblboth = 1042; - t.arrowdblleft = 987; - t.arrowdblup = 603; - t.arrowdblright = 987; - t.arrowdbldown = 603; - t.lozenge = 494; - t.angleleft = 329; - t.registersans = 790; - t.copyrightsans = 790; - t.trademarksans = 786; - t.summation = 713; - t.parenlefttp = 384; - t.parenleftex = 384; - t.parenleftbt = 384; - t.bracketlefttp = 384; - t.bracketleftex = 384; - t.bracketleftbt = 384; - t.bracelefttp = 494; - t.braceleftmid = 494; - t.braceleftbt = 494; - t.braceex = 494; - t.angleright = 329; - t.integral = 274; - t.integraltp = 686; - t.integralex = 686; - t.integralbt = 686; - t.parenrighttp = 384; - t.parenrightex = 384; - t.parenrightbt = 384; - t.bracketrighttp = 384; - t.bracketrightex = 384; - t.bracketrightbt = 384; - t.bracerighttp = 494; - t.bracerightmid = 494; - t.bracerightbt = 494; - t.apple = 790; - }); - t["Times-Roman"] = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 250; - t.exclam = 333; - t.quotedbl = 408; - t.numbersign = 500; - t.dollar = 500; - t.percent = 833; - t.ampersand = 778; - t.quoteright = 333; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 500; - t.plus = 564; - t.comma = 250; - t.hyphen = 333; - t.period = 250; - t.slash = 278; - t.zero = 500; - t.one = 500; - t.two = 500; - t.three = 500; - t.four = 500; - t.five = 500; - t.six = 500; - t.seven = 500; - t.eight = 500; - t.nine = 500; - t.colon = 278; - t.semicolon = 278; - t.less = 564; - t.equal = 564; - t.greater = 564; - t.question = 444; - t.at = 921; - t.A = 722; - t.B = 667; - t.C = 667; - t.D = 722; - t.E = 611; - t.F = 556; - t.G = 722; - t.H = 722; - t.I = 333; - t.J = 389; - t.K = 722; - t.L = 611; - t.M = 889; - t.N = 722; - t.O = 722; - t.P = 556; - t.Q = 722; - t.R = 667; - t.S = 556; - t.T = 611; - t.U = 722; - t.V = 722; - t.W = 944; - t.X = 722; - t.Y = 722; - t.Z = 611; - t.bracketleft = 333; - t.backslash = 278; - t.bracketright = 333; - t.asciicircum = 469; - t.underscore = 500; - t.quoteleft = 333; - t.a = 444; - t.b = 500; - t.c = 444; - t.d = 500; - t.e = 444; - t.f = 333; - t.g = 500; - t.h = 500; - t.i = 278; - t.j = 278; - t.k = 500; - t.l = 278; - t.m = 778; - t.n = 500; - t.o = 500; - t.p = 500; - t.q = 500; - t.r = 333; - t.s = 389; - t.t = 278; - t.u = 500; - t.v = 500; - t.w = 722; - t.x = 500; - t.y = 500; - t.z = 444; - t.braceleft = 480; - t.bar = 200; - t.braceright = 480; - t.asciitilde = 541; - t.exclamdown = 333; - t.cent = 500; - t.sterling = 500; - t.fraction = 167; - t.yen = 500; - t.florin = 500; - t.section = 500; - t.currency = 500; - t.quotesingle = 180; - t.quotedblleft = 444; - t.guillemotleft = 500; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 556; - t.fl = 556; - t.endash = 500; - t.dagger = 500; - t.daggerdbl = 500; - t.periodcentered = 250; - t.paragraph = 453; - t.bullet = 350; - t.quotesinglbase = 333; - t.quotedblbase = 444; - t.quotedblright = 444; - t.guillemotright = 500; - t.ellipsis = 1000; - t.perthousand = 1000; - t.questiondown = 444; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 1000; - t.AE = 889; - t.ordfeminine = 276; - t.Lslash = 611; - t.Oslash = 722; - t.OE = 889; - t.ordmasculine = 310; - t.ae = 667; - t.dotlessi = 278; - t.lslash = 278; - t.oslash = 500; - t.oe = 722; - t.germandbls = 500; - t.Idieresis = 333; - t.eacute = 444; - t.abreve = 444; - t.uhungarumlaut = 500; - t.ecaron = 444; - t.Ydieresis = 722; - t.divide = 564; - t.Yacute = 722; - t.Acircumflex = 722; - t.aacute = 444; - t.Ucircumflex = 722; - t.yacute = 500; - t.scommaaccent = 389; - t.ecircumflex = 444; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 444; - t.Uacute = 722; - t.uogonek = 500; - t.Edieresis = 611; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 760; - t.Emacron = 611; - t.ccaron = 444; - t.aring = 444; - t.Ncommaaccent = 722; - t.lacute = 278; - t.agrave = 444; - t.Tcommaaccent = 611; - t.Cacute = 667; - t.atilde = 444; - t.Edotaccent = 611; - t.scaron = 389; - t.scedilla = 389; - t.iacute = 278; - t.lozenge = 471; - t.Rcaron = 667; - t.Gcommaaccent = 722; - t.ucircumflex = 500; - t.acircumflex = 444; - t.Amacron = 722; - t.rcaron = 333; - t.ccedilla = 444; - t.Zdotaccent = 611; - t.Thorn = 556; - t.Omacron = 722; - t.Racute = 667; - t.Sacute = 556; - t.dcaron = 588; - t.Umacron = 722; - t.uring = 500; - t.threesuperior = 300; - t.Ograve = 722; - t.Agrave = 722; - t.Abreve = 722; - t.multiply = 564; - t.uacute = 500; - t.Tcaron = 611; - t.partialdiff = 476; - t.ydieresis = 500; - t.Nacute = 722; - t.icircumflex = 278; - t.Ecircumflex = 611; - t.adieresis = 444; - t.edieresis = 444; - t.cacute = 444; - t.nacute = 500; - t.umacron = 500; - t.Ncaron = 722; - t.Iacute = 333; - t.plusminus = 564; - t.brokenbar = 200; - t.registered = 760; - t.Gbreve = 722; - t.Idotaccent = 333; - t.summation = 600; - t.Egrave = 611; - t.racute = 333; - t.omacron = 500; - t.Zacute = 611; - t.Zcaron = 611; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 667; - t.lcommaaccent = 278; - t.tcaron = 326; - t.eogonek = 444; - t.Uogonek = 722; - t.Aacute = 722; - t.Adieresis = 722; - t.egrave = 444; - t.zacute = 444; - t.iogonek = 278; - t.Oacute = 722; - t.oacute = 500; - t.amacron = 444; - t.sacute = 389; - t.idieresis = 278; - t.Ocircumflex = 722; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 500; - t.twosuperior = 300; - t.Odieresis = 722; - t.mu = 500; - t.igrave = 278; - t.ohungarumlaut = 500; - t.Eogonek = 611; - t.dcroat = 500; - t.threequarters = 750; - t.Scedilla = 556; - t.lcaron = 344; - t.Kcommaaccent = 722; - t.Lacute = 611; - t.trademark = 980; - t.edotaccent = 444; - t.Igrave = 333; - t.Imacron = 333; - t.Lcaron = 611; - t.onehalf = 750; - t.lessequal = 549; - t.ocircumflex = 500; - t.ntilde = 500; - t.Uhungarumlaut = 722; - t.Eacute = 611; - t.emacron = 444; - t.gbreve = 500; - t.onequarter = 750; - t.Scaron = 556; - t.Scommaaccent = 556; - t.Ohungarumlaut = 722; - t.degree = 400; - t.ograve = 500; - t.Ccaron = 667; - t.ugrave = 500; - t.radical = 453; - t.Dcaron = 722; - t.rcommaaccent = 333; - t.Ntilde = 722; - t.otilde = 500; - t.Rcommaaccent = 667; - t.Lcommaaccent = 611; - t.Atilde = 722; - t.Aogonek = 722; - t.Aring = 722; - t.Otilde = 722; - t.zdotaccent = 444; - t.Ecaron = 611; - t.Iogonek = 333; - t.kcommaaccent = 500; - t.minus = 564; - t.Icircumflex = 333; - t.ncaron = 500; - t.tcommaaccent = 278; - t.logicalnot = 564; - t.odieresis = 500; - t.udieresis = 500; - t.notequal = 549; - t.gcommaaccent = 500; - t.eth = 500; - t.zcaron = 444; - t.ncommaaccent = 500; - t.onesuperior = 300; - t.imacron = 278; - t.Euro = 500; - }); - t["Times-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 250; - t.exclam = 333; - t.quotedbl = 555; - t.numbersign = 500; - t.dollar = 500; - t.percent = 1000; - t.ampersand = 833; - t.quoteright = 333; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 500; - t.plus = 570; - t.comma = 250; - t.hyphen = 333; - t.period = 250; - t.slash = 278; - t.zero = 500; - t.one = 500; - t.two = 500; - t.three = 500; - t.four = 500; - t.five = 500; - t.six = 500; - t.seven = 500; - t.eight = 500; - t.nine = 500; - t.colon = 333; - t.semicolon = 333; - t.less = 570; - t.equal = 570; - t.greater = 570; - t.question = 500; - t.at = 930; - t.A = 722; - t.B = 667; - t.C = 722; - t.D = 722; - t.E = 667; - t.F = 611; - t.G = 778; - t.H = 778; - t.I = 389; - t.J = 500; - t.K = 778; - t.L = 667; - t.M = 944; - t.N = 722; - t.O = 778; - t.P = 611; - t.Q = 778; - t.R = 722; - t.S = 556; - t.T = 667; - t.U = 722; - t.V = 722; - t.W = 1000; - t.X = 722; - t.Y = 722; - t.Z = 667; - t.bracketleft = 333; - t.backslash = 278; - t.bracketright = 333; - t.asciicircum = 581; - t.underscore = 500; - t.quoteleft = 333; - t.a = 500; - t.b = 556; - t.c = 444; - t.d = 556; - t.e = 444; - t.f = 333; - t.g = 500; - t.h = 556; - t.i = 278; - t.j = 333; - t.k = 556; - t.l = 278; - t.m = 833; - t.n = 556; - t.o = 500; - t.p = 556; - t.q = 556; - t.r = 444; - t.s = 389; - t.t = 333; - t.u = 556; - t.v = 500; - t.w = 722; - t.x = 500; - t.y = 500; - t.z = 444; - t.braceleft = 394; - t.bar = 220; - t.braceright = 394; - t.asciitilde = 520; - t.exclamdown = 333; - t.cent = 500; - t.sterling = 500; - t.fraction = 167; - t.yen = 500; - t.florin = 500; - t.section = 500; - t.currency = 500; - t.quotesingle = 278; - t.quotedblleft = 500; - t.guillemotleft = 500; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 556; - t.fl = 556; - t.endash = 500; - t.dagger = 500; - t.daggerdbl = 500; - t.periodcentered = 250; - t.paragraph = 540; - t.bullet = 350; - t.quotesinglbase = 333; - t.quotedblbase = 500; - t.quotedblright = 500; - t.guillemotright = 500; - t.ellipsis = 1000; - t.perthousand = 1000; - t.questiondown = 500; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 1000; - t.AE = 1000; - t.ordfeminine = 300; - t.Lslash = 667; - t.Oslash = 778; - t.OE = 1000; - t.ordmasculine = 330; - t.ae = 722; - t.dotlessi = 278; - t.lslash = 278; - t.oslash = 500; - t.oe = 722; - t.germandbls = 556; - t.Idieresis = 389; - t.eacute = 444; - t.abreve = 500; - t.uhungarumlaut = 556; - t.ecaron = 444; - t.Ydieresis = 722; - t.divide = 570; - t.Yacute = 722; - t.Acircumflex = 722; - t.aacute = 500; - t.Ucircumflex = 722; - t.yacute = 500; - t.scommaaccent = 389; - t.ecircumflex = 444; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 500; - t.Uacute = 722; - t.uogonek = 556; - t.Edieresis = 667; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 747; - t.Emacron = 667; - t.ccaron = 444; - t.aring = 500; - t.Ncommaaccent = 722; - t.lacute = 278; - t.agrave = 500; - t.Tcommaaccent = 667; - t.Cacute = 722; - t.atilde = 500; - t.Edotaccent = 667; - t.scaron = 389; - t.scedilla = 389; - t.iacute = 278; - t.lozenge = 494; - t.Rcaron = 722; - t.Gcommaaccent = 778; - t.ucircumflex = 556; - t.acircumflex = 500; - t.Amacron = 722; - t.rcaron = 444; - t.ccedilla = 444; - t.Zdotaccent = 667; - t.Thorn = 611; - t.Omacron = 778; - t.Racute = 722; - t.Sacute = 556; - t.dcaron = 672; - t.Umacron = 722; - t.uring = 556; - t.threesuperior = 300; - t.Ograve = 778; - t.Agrave = 722; - t.Abreve = 722; - t.multiply = 570; - t.uacute = 556; - t.Tcaron = 667; - t.partialdiff = 494; - t.ydieresis = 500; - t.Nacute = 722; - t.icircumflex = 278; - t.Ecircumflex = 667; - t.adieresis = 500; - t.edieresis = 444; - t.cacute = 444; - t.nacute = 556; - t.umacron = 556; - t.Ncaron = 722; - t.Iacute = 389; - t.plusminus = 570; - t.brokenbar = 220; - t.registered = 747; - t.Gbreve = 778; - t.Idotaccent = 389; - t.summation = 600; - t.Egrave = 667; - t.racute = 444; - t.omacron = 500; - t.Zacute = 667; - t.Zcaron = 667; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 722; - t.lcommaaccent = 278; - t.tcaron = 416; - t.eogonek = 444; - t.Uogonek = 722; - t.Aacute = 722; - t.Adieresis = 722; - t.egrave = 444; - t.zacute = 444; - t.iogonek = 278; - t.Oacute = 778; - t.oacute = 500; - t.amacron = 500; - t.sacute = 389; - t.idieresis = 278; - t.Ocircumflex = 778; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 556; - t.twosuperior = 300; - t.Odieresis = 778; - t.mu = 556; - t.igrave = 278; - t.ohungarumlaut = 500; - t.Eogonek = 667; - t.dcroat = 556; - t.threequarters = 750; - t.Scedilla = 556; - t.lcaron = 394; - t.Kcommaaccent = 778; - t.Lacute = 667; - t.trademark = 1000; - t.edotaccent = 444; - t.Igrave = 389; - t.Imacron = 389; - t.Lcaron = 667; - t.onehalf = 750; - t.lessequal = 549; - t.ocircumflex = 500; - t.ntilde = 556; - t.Uhungarumlaut = 722; - t.Eacute = 667; - t.emacron = 444; - t.gbreve = 500; - t.onequarter = 750; - t.Scaron = 556; - t.Scommaaccent = 556; - t.Ohungarumlaut = 778; - t.degree = 400; - t.ograve = 500; - t.Ccaron = 722; - t.ugrave = 556; - t.radical = 549; - t.Dcaron = 722; - t.rcommaaccent = 444; - t.Ntilde = 722; - t.otilde = 500; - t.Rcommaaccent = 722; - t.Lcommaaccent = 667; - t.Atilde = 722; - t.Aogonek = 722; - t.Aring = 722; - t.Otilde = 778; - t.zdotaccent = 444; - t.Ecaron = 667; - t.Iogonek = 389; - t.kcommaaccent = 556; - t.minus = 570; - t.Icircumflex = 389; - t.ncaron = 556; - t.tcommaaccent = 333; - t.logicalnot = 570; - t.odieresis = 500; - t.udieresis = 556; - t.notequal = 549; - t.gcommaaccent = 500; - t.eth = 500; - t.zcaron = 444; - t.ncommaaccent = 556; - t.onesuperior = 300; - t.imacron = 278; - t.Euro = 500; - }); - t["Times-BoldItalic"] = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 250; - t.exclam = 389; - t.quotedbl = 555; - t.numbersign = 500; - t.dollar = 500; - t.percent = 833; - t.ampersand = 778; - t.quoteright = 333; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 500; - t.plus = 570; - t.comma = 250; - t.hyphen = 333; - t.period = 250; - t.slash = 278; - t.zero = 500; - t.one = 500; - t.two = 500; - t.three = 500; - t.four = 500; - t.five = 500; - t.six = 500; - t.seven = 500; - t.eight = 500; - t.nine = 500; - t.colon = 333; - t.semicolon = 333; - t.less = 570; - t.equal = 570; - t.greater = 570; - t.question = 500; - t.at = 832; - t.A = 667; - t.B = 667; - t.C = 667; - t.D = 722; - t.E = 667; - t.F = 667; - t.G = 722; - t.H = 778; - t.I = 389; - t.J = 500; - t.K = 667; - t.L = 611; - t.M = 889; - t.N = 722; - t.O = 722; - t.P = 611; - t.Q = 722; - t.R = 667; - t.S = 556; - t.T = 611; - t.U = 722; - t.V = 667; - t.W = 889; - t.X = 667; - t.Y = 611; - t.Z = 611; - t.bracketleft = 333; - t.backslash = 278; - t.bracketright = 333; - t.asciicircum = 570; - t.underscore = 500; - t.quoteleft = 333; - t.a = 500; - t.b = 500; - t.c = 444; - t.d = 500; - t.e = 444; - t.f = 333; - t.g = 500; - t.h = 556; - t.i = 278; - t.j = 278; - t.k = 500; - t.l = 278; - t.m = 778; - t.n = 556; - t.o = 500; - t.p = 500; - t.q = 500; - t.r = 389; - t.s = 389; - t.t = 278; - t.u = 556; - t.v = 444; - t.w = 667; - t.x = 500; - t.y = 444; - t.z = 389; - t.braceleft = 348; - t.bar = 220; - t.braceright = 348; - t.asciitilde = 570; - t.exclamdown = 389; - t.cent = 500; - t.sterling = 500; - t.fraction = 167; - t.yen = 500; - t.florin = 500; - t.section = 500; - t.currency = 500; - t.quotesingle = 278; - t.quotedblleft = 500; - t.guillemotleft = 500; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 556; - t.fl = 556; - t.endash = 500; - t.dagger = 500; - t.daggerdbl = 500; - t.periodcentered = 250; - t.paragraph = 500; - t.bullet = 350; - t.quotesinglbase = 333; - t.quotedblbase = 500; - t.quotedblright = 500; - t.guillemotright = 500; - t.ellipsis = 1000; - t.perthousand = 1000; - t.questiondown = 500; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 1000; - t.AE = 944; - t.ordfeminine = 266; - t.Lslash = 611; - t.Oslash = 722; - t.OE = 944; - t.ordmasculine = 300; - t.ae = 722; - t.dotlessi = 278; - t.lslash = 278; - t.oslash = 500; - t.oe = 722; - t.germandbls = 500; - t.Idieresis = 389; - t.eacute = 444; - t.abreve = 500; - t.uhungarumlaut = 556; - t.ecaron = 444; - t.Ydieresis = 611; - t.divide = 570; - t.Yacute = 611; - t.Acircumflex = 667; - t.aacute = 500; - t.Ucircumflex = 722; - t.yacute = 444; - t.scommaaccent = 389; - t.ecircumflex = 444; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 500; - t.Uacute = 722; - t.uogonek = 556; - t.Edieresis = 667; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 747; - t.Emacron = 667; - t.ccaron = 444; - t.aring = 500; - t.Ncommaaccent = 722; - t.lacute = 278; - t.agrave = 500; - t.Tcommaaccent = 611; - t.Cacute = 667; - t.atilde = 500; - t.Edotaccent = 667; - t.scaron = 389; - t.scedilla = 389; - t.iacute = 278; - t.lozenge = 494; - t.Rcaron = 667; - t.Gcommaaccent = 722; - t.ucircumflex = 556; - t.acircumflex = 500; - t.Amacron = 667; - t.rcaron = 389; - t.ccedilla = 444; - t.Zdotaccent = 611; - t.Thorn = 611; - t.Omacron = 722; - t.Racute = 667; - t.Sacute = 556; - t.dcaron = 608; - t.Umacron = 722; - t.uring = 556; - t.threesuperior = 300; - t.Ograve = 722; - t.Agrave = 667; - t.Abreve = 667; - t.multiply = 570; - t.uacute = 556; - t.Tcaron = 611; - t.partialdiff = 494; - t.ydieresis = 444; - t.Nacute = 722; - t.icircumflex = 278; - t.Ecircumflex = 667; - t.adieresis = 500; - t.edieresis = 444; - t.cacute = 444; - t.nacute = 556; - t.umacron = 556; - t.Ncaron = 722; - t.Iacute = 389; - t.plusminus = 570; - t.brokenbar = 220; - t.registered = 747; - t.Gbreve = 722; - t.Idotaccent = 389; - t.summation = 600; - t.Egrave = 667; - t.racute = 389; - t.omacron = 500; - t.Zacute = 611; - t.Zcaron = 611; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 667; - t.lcommaaccent = 278; - t.tcaron = 366; - t.eogonek = 444; - t.Uogonek = 722; - t.Aacute = 667; - t.Adieresis = 667; - t.egrave = 444; - t.zacute = 389; - t.iogonek = 278; - t.Oacute = 722; - t.oacute = 500; - t.amacron = 500; - t.sacute = 389; - t.idieresis = 278; - t.Ocircumflex = 722; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 500; - t.twosuperior = 300; - t.Odieresis = 722; - t.mu = 576; - t.igrave = 278; - t.ohungarumlaut = 500; - t.Eogonek = 667; - t.dcroat = 500; - t.threequarters = 750; - t.Scedilla = 556; - t.lcaron = 382; - t.Kcommaaccent = 667; - t.Lacute = 611; - t.trademark = 1000; - t.edotaccent = 444; - t.Igrave = 389; - t.Imacron = 389; - t.Lcaron = 611; - t.onehalf = 750; - t.lessequal = 549; - t.ocircumflex = 500; - t.ntilde = 556; - t.Uhungarumlaut = 722; - t.Eacute = 667; - t.emacron = 444; - t.gbreve = 500; - t.onequarter = 750; - t.Scaron = 556; - t.Scommaaccent = 556; - t.Ohungarumlaut = 722; - t.degree = 400; - t.ograve = 500; - t.Ccaron = 667; - t.ugrave = 556; - t.radical = 549; - t.Dcaron = 722; - t.rcommaaccent = 389; - t.Ntilde = 722; - t.otilde = 500; - t.Rcommaaccent = 667; - t.Lcommaaccent = 611; - t.Atilde = 667; - t.Aogonek = 667; - t.Aring = 667; - t.Otilde = 722; - t.zdotaccent = 389; - t.Ecaron = 667; - t.Iogonek = 389; - t.kcommaaccent = 500; - t.minus = 606; - t.Icircumflex = 389; - t.ncaron = 556; - t.tcommaaccent = 278; - t.logicalnot = 606; - t.odieresis = 500; - t.udieresis = 556; - t.notequal = 549; - t.gcommaaccent = 500; - t.eth = 500; - t.zcaron = 389; - t.ncommaaccent = 556; - t.onesuperior = 300; - t.imacron = 278; - t.Euro = 500; - }); - t["Times-Italic"] = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 250; - t.exclam = 333; - t.quotedbl = 420; - t.numbersign = 500; - t.dollar = 500; - t.percent = 833; - t.ampersand = 778; - t.quoteright = 333; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 500; - t.plus = 675; - t.comma = 250; - t.hyphen = 333; - t.period = 250; - t.slash = 278; - t.zero = 500; - t.one = 500; - t.two = 500; - t.three = 500; - t.four = 500; - t.five = 500; - t.six = 500; - t.seven = 500; - t.eight = 500; - t.nine = 500; - t.colon = 333; - t.semicolon = 333; - t.less = 675; - t.equal = 675; - t.greater = 675; - t.question = 500; - t.at = 920; - t.A = 611; - t.B = 611; - t.C = 667; - t.D = 722; - t.E = 611; - t.F = 611; - t.G = 722; - t.H = 722; - t.I = 333; - t.J = 444; - t.K = 667; - t.L = 556; - t.M = 833; - t.N = 667; - t.O = 722; - t.P = 611; - t.Q = 722; - t.R = 611; - t.S = 500; - t.T = 556; - t.U = 722; - t.V = 611; - t.W = 833; - t.X = 611; - t.Y = 556; - t.Z = 556; - t.bracketleft = 389; - t.backslash = 278; - t.bracketright = 389; - t.asciicircum = 422; - t.underscore = 500; - t.quoteleft = 333; - t.a = 500; - t.b = 500; - t.c = 444; - t.d = 500; - t.e = 444; - t.f = 278; - t.g = 500; - t.h = 500; - t.i = 278; - t.j = 278; - t.k = 444; - t.l = 278; - t.m = 722; - t.n = 500; - t.o = 500; - t.p = 500; - t.q = 500; - t.r = 389; - t.s = 389; - t.t = 278; - t.u = 500; - t.v = 444; - t.w = 667; - t.x = 444; - t.y = 444; - t.z = 389; - t.braceleft = 400; - t.bar = 275; - t.braceright = 400; - t.asciitilde = 541; - t.exclamdown = 389; - t.cent = 500; - t.sterling = 500; - t.fraction = 167; - t.yen = 500; - t.florin = 500; - t.section = 500; - t.currency = 500; - t.quotesingle = 214; - t.quotedblleft = 556; - t.guillemotleft = 500; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 500; - t.fl = 500; - t.endash = 500; - t.dagger = 500; - t.daggerdbl = 500; - t.periodcentered = 250; - t.paragraph = 523; - t.bullet = 350; - t.quotesinglbase = 333; - t.quotedblbase = 556; - t.quotedblright = 556; - t.guillemotright = 500; - t.ellipsis = 889; - t.perthousand = 1000; - t.questiondown = 500; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 889; - t.AE = 889; - t.ordfeminine = 276; - t.Lslash = 556; - t.Oslash = 722; - t.OE = 944; - t.ordmasculine = 310; - t.ae = 667; - t.dotlessi = 278; - t.lslash = 278; - t.oslash = 500; - t.oe = 667; - t.germandbls = 500; - t.Idieresis = 333; - t.eacute = 444; - t.abreve = 500; - t.uhungarumlaut = 500; - t.ecaron = 444; - t.Ydieresis = 556; - t.divide = 675; - t.Yacute = 556; - t.Acircumflex = 611; - t.aacute = 500; - t.Ucircumflex = 722; - t.yacute = 444; - t.scommaaccent = 389; - t.ecircumflex = 444; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 500; - t.Uacute = 722; - t.uogonek = 500; - t.Edieresis = 611; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 760; - t.Emacron = 611; - t.ccaron = 444; - t.aring = 500; - t.Ncommaaccent = 667; - t.lacute = 278; - t.agrave = 500; - t.Tcommaaccent = 556; - t.Cacute = 667; - t.atilde = 500; - t.Edotaccent = 611; - t.scaron = 389; - t.scedilla = 389; - t.iacute = 278; - t.lozenge = 471; - t.Rcaron = 611; - t.Gcommaaccent = 722; - t.ucircumflex = 500; - t.acircumflex = 500; - t.Amacron = 611; - t.rcaron = 389; - t.ccedilla = 444; - t.Zdotaccent = 556; - t.Thorn = 611; - t.Omacron = 722; - t.Racute = 611; - t.Sacute = 500; - t.dcaron = 544; - t.Umacron = 722; - t.uring = 500; - t.threesuperior = 300; - t.Ograve = 722; - t.Agrave = 611; - t.Abreve = 611; - t.multiply = 675; - t.uacute = 500; - t.Tcaron = 556; - t.partialdiff = 476; - t.ydieresis = 444; - t.Nacute = 667; - t.icircumflex = 278; - t.Ecircumflex = 611; - t.adieresis = 500; - t.edieresis = 444; - t.cacute = 444; - t.nacute = 500; - t.umacron = 500; - t.Ncaron = 667; - t.Iacute = 333; - t.plusminus = 675; - t.brokenbar = 275; - t.registered = 760; - t.Gbreve = 722; - t.Idotaccent = 333; - t.summation = 600; - t.Egrave = 611; - t.racute = 389; - t.omacron = 500; - t.Zacute = 556; - t.Zcaron = 556; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 667; - t.lcommaaccent = 278; - t.tcaron = 300; - t.eogonek = 444; - t.Uogonek = 722; - t.Aacute = 611; - t.Adieresis = 611; - t.egrave = 444; - t.zacute = 389; - t.iogonek = 278; - t.Oacute = 722; - t.oacute = 500; - t.amacron = 500; - t.sacute = 389; - t.idieresis = 278; - t.Ocircumflex = 722; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 500; - t.twosuperior = 300; - t.Odieresis = 722; - t.mu = 500; - t.igrave = 278; - t.ohungarumlaut = 500; - t.Eogonek = 611; - t.dcroat = 500; - t.threequarters = 750; - t.Scedilla = 500; - t.lcaron = 300; - t.Kcommaaccent = 667; - t.Lacute = 556; - t.trademark = 980; - t.edotaccent = 444; - t.Igrave = 333; - t.Imacron = 333; - t.Lcaron = 611; - t.onehalf = 750; - t.lessequal = 549; - t.ocircumflex = 500; - t.ntilde = 500; - t.Uhungarumlaut = 722; - t.Eacute = 611; - t.emacron = 444; - t.gbreve = 500; - t.onequarter = 750; - t.Scaron = 500; - t.Scommaaccent = 500; - t.Ohungarumlaut = 722; - t.degree = 400; - t.ograve = 500; - t.Ccaron = 667; - t.ugrave = 500; - t.radical = 453; - t.Dcaron = 722; - t.rcommaaccent = 389; - t.Ntilde = 667; - t.otilde = 500; - t.Rcommaaccent = 611; - t.Lcommaaccent = 556; - t.Atilde = 611; - t.Aogonek = 611; - t.Aring = 611; - t.Otilde = 722; - t.zdotaccent = 389; - t.Ecaron = 611; - t.Iogonek = 333; - t.kcommaaccent = 444; - t.minus = 675; - t.Icircumflex = 333; - t.ncaron = 500; - t.tcommaaccent = 278; - t.logicalnot = 675; - t.odieresis = 500; - t.udieresis = 500; - t.notequal = 549; - t.gcommaaccent = 500; - t.eth = 500; - t.zcaron = 389; - t.ncommaaccent = 500; - t.onesuperior = 300; - t.imacron = 278; - t.Euro = 500; - }); - t.ZapfDingbats = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 278; - t.a1 = 974; - t.a2 = 961; - t.a202 = 974; - t.a3 = 980; - t.a4 = 719; - t.a5 = 789; - t.a119 = 790; - t.a118 = 791; - t.a117 = 690; - t.a11 = 960; - t.a12 = 939; - t.a13 = 549; - t.a14 = 855; - t.a15 = 911; - t.a16 = 933; - t.a105 = 911; - t.a17 = 945; - t.a18 = 974; - t.a19 = 755; - t.a20 = 846; - t.a21 = 762; - t.a22 = 761; - t.a23 = 571; - t.a24 = 677; - t.a25 = 763; - t.a26 = 760; - t.a27 = 759; - t.a28 = 754; - t.a6 = 494; - t.a7 = 552; - t.a8 = 537; - t.a9 = 577; - t.a10 = 692; - t.a29 = 786; - t.a30 = 788; - t.a31 = 788; - t.a32 = 790; - t.a33 = 793; - t.a34 = 794; - t.a35 = 816; - t.a36 = 823; - t.a37 = 789; - t.a38 = 841; - t.a39 = 823; - t.a40 = 833; - t.a41 = 816; - t.a42 = 831; - t.a43 = 923; - t.a44 = 744; - t.a45 = 723; - t.a46 = 749; - t.a47 = 790; - t.a48 = 792; - t.a49 = 695; - t.a50 = 776; - t.a51 = 768; - t.a52 = 792; - t.a53 = 759; - t.a54 = 707; - t.a55 = 708; - t.a56 = 682; - t.a57 = 701; - t.a58 = 826; - t.a59 = 815; - t.a60 = 789; - t.a61 = 789; - t.a62 = 707; - t.a63 = 687; - t.a64 = 696; - t.a65 = 689; - t.a66 = 786; - t.a67 = 787; - t.a68 = 713; - t.a69 = 791; - t.a70 = 785; - t.a71 = 791; - t.a72 = 873; - t.a73 = 761; - t.a74 = 762; - t.a203 = 762; - t.a75 = 759; - t.a204 = 759; - t.a76 = 892; - t.a77 = 892; - t.a78 = 788; - t.a79 = 784; - t.a81 = 438; - t.a82 = 138; - t.a83 = 277; - t.a84 = 415; - t.a97 = 392; - t.a98 = 392; - t.a99 = 668; - t.a100 = 668; - t.a89 = 390; - t.a90 = 390; - t.a93 = 317; - t.a94 = 317; - t.a91 = 276; - t.a92 = 276; - t.a205 = 509; - t.a85 = 509; - t.a206 = 410; - t.a86 = 410; - t.a87 = 234; - t.a88 = 234; - t.a95 = 334; - t.a96 = 334; - t.a101 = 732; - t.a102 = 544; - t.a103 = 544; - t.a104 = 910; - t.a106 = 667; - t.a107 = 760; - t.a108 = 760; - t.a112 = 776; - t.a111 = 595; - t.a110 = 694; - t.a109 = 626; - t.a120 = 788; - t.a121 = 788; - t.a122 = 788; - t.a123 = 788; - t.a124 = 788; - t.a125 = 788; - t.a126 = 788; - t.a127 = 788; - t.a128 = 788; - t.a129 = 788; - t.a130 = 788; - t.a131 = 788; - t.a132 = 788; - t.a133 = 788; - t.a134 = 788; - t.a135 = 788; - t.a136 = 788; - t.a137 = 788; - t.a138 = 788; - t.a139 = 788; - t.a140 = 788; - t.a141 = 788; - t.a142 = 788; - t.a143 = 788; - t.a144 = 788; - t.a145 = 788; - t.a146 = 788; - t.a147 = 788; - t.a148 = 788; - t.a149 = 788; - t.a150 = 788; - t.a151 = 788; - t.a152 = 788; - t.a153 = 788; - t.a154 = 788; - t.a155 = 788; - t.a156 = 788; - t.a157 = 788; - t.a158 = 788; - t.a159 = 788; - t.a160 = 894; - t.a161 = 838; - t.a163 = 1016; - t.a164 = 458; - t.a196 = 748; - t.a165 = 924; - t.a192 = 748; - t.a166 = 918; - t.a167 = 927; - t.a168 = 928; - t.a169 = 928; - t.a170 = 834; - t.a171 = 873; - t.a172 = 828; - t.a173 = 924; - t.a162 = 924; - t.a174 = 917; - t.a175 = 930; - t.a176 = 931; - t.a177 = 463; - t.a178 = 883; - t.a179 = 836; - t.a193 = 836; - t.a180 = 867; - t.a199 = 867; - t.a181 = 696; - t.a200 = 696; - t.a182 = 874; - t.a201 = 874; - t.a183 = 760; - t.a184 = 946; - t.a197 = 771; - t.a185 = 865; - t.a194 = 771; - t.a198 = 888; - t.a186 = 967; - t.a195 = 888; - t.a187 = 831; - t.a188 = 873; - t.a189 = 927; - t.a190 = 970; - t.a191 = 918; - }); -}); -exports.getMetrics = getMetrics; -const getFontBasicMetrics = (0, _core_utils.getLookupTableFactory)(function (t) { - t.Courier = { - ascent: 629, - descent: -157, - capHeight: 562, - xHeight: -426 - }; - t["Courier-Bold"] = { - ascent: 629, - descent: -157, - capHeight: 562, - xHeight: 439 - }; - t["Courier-Oblique"] = { - ascent: 629, - descent: -157, - capHeight: 562, - xHeight: 426 - }; - t["Courier-BoldOblique"] = { - ascent: 629, - descent: -157, - capHeight: 562, - xHeight: 426 - }; - t.Helvetica = { - ascent: 718, - descent: -207, - capHeight: 718, - xHeight: 523 - }; - t["Helvetica-Bold"] = { - ascent: 718, - descent: -207, - capHeight: 718, - xHeight: 532 - }; - t["Helvetica-Oblique"] = { - ascent: 718, - descent: -207, - capHeight: 718, - xHeight: 523 - }; - t["Helvetica-BoldOblique"] = { - ascent: 718, - descent: -207, - capHeight: 718, - xHeight: 532 - }; - t["Times-Roman"] = { - ascent: 683, - descent: -217, - capHeight: 662, - xHeight: 450 - }; - t["Times-Bold"] = { - ascent: 683, - descent: -217, - capHeight: 676, - xHeight: 461 - }; - t["Times-Italic"] = { - ascent: 683, - descent: -217, - capHeight: 653, - xHeight: 441 - }; - t["Times-BoldItalic"] = { - ascent: 683, - descent: -217, - capHeight: 669, - xHeight: 462 - }; - t.Symbol = { - ascent: Math.NaN, - descent: Math.NaN, - capHeight: Math.NaN, - xHeight: Math.NaN - }; - t.ZapfDingbats = { - ascent: Math.NaN, - descent: Math.NaN, - capHeight: Math.NaN, - xHeight: Math.NaN - }; -}); -exports.getFontBasicMetrics = getFontBasicMetrics; - -/***/ }), -/* 46 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.GlyfTable = void 0; -const ON_CURVE_POINT = 1 << 0; -const X_SHORT_VECTOR = 1 << 1; -const Y_SHORT_VECTOR = 1 << 2; -const REPEAT_FLAG = 1 << 3; -const X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR = 1 << 4; -const Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR = 1 << 5; -const OVERLAP_SIMPLE = 1 << 6; -const ARG_1_AND_2_ARE_WORDS = 1 << 0; -const ARGS_ARE_XY_VALUES = 1 << 1; -const WE_HAVE_A_SCALE = 1 << 3; -const MORE_COMPONENTS = 1 << 5; -const WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6; -const WE_HAVE_A_TWO_BY_TWO = 1 << 7; -const WE_HAVE_INSTRUCTIONS = 1 << 8; -class GlyfTable { - constructor({ - glyfTable, - isGlyphLocationsLong, - locaTable, - numGlyphs - }) { - this.glyphs = []; - const loca = new DataView(locaTable.buffer, locaTable.byteOffset, locaTable.byteLength); - const glyf = new DataView(glyfTable.buffer, glyfTable.byteOffset, glyfTable.byteLength); - const offsetSize = isGlyphLocationsLong ? 4 : 2; - let prev = isGlyphLocationsLong ? loca.getUint32(0) : 2 * loca.getUint16(0); - let pos = 0; - for (let i = 0; i < numGlyphs; i++) { - pos += offsetSize; - const next = isGlyphLocationsLong ? loca.getUint32(pos) : 2 * loca.getUint16(pos); - if (next === prev) { - this.glyphs.push(new Glyph({})); - continue; - } - const glyph = Glyph.parse(prev, glyf); - this.glyphs.push(glyph); - prev = next; - } - } - getSize() { - return this.glyphs.reduce((a, g) => { - const size = g.getSize(); - return a + (size + 3 & ~3); - }, 0); - } - write() { - const totalSize = this.getSize(); - const glyfTable = new DataView(new ArrayBuffer(totalSize)); - const isLocationLong = totalSize > 0x1fffe; - const offsetSize = isLocationLong ? 4 : 2; - const locaTable = new DataView(new ArrayBuffer((this.glyphs.length + 1) * offsetSize)); - if (isLocationLong) { - locaTable.setUint32(0, 0); - } else { - locaTable.setUint16(0, 0); - } - let pos = 0; - let locaIndex = 0; - for (const glyph of this.glyphs) { - pos += glyph.write(pos, glyfTable); - pos = pos + 3 & ~3; - locaIndex += offsetSize; - if (isLocationLong) { - locaTable.setUint32(locaIndex, pos); - } else { - locaTable.setUint16(locaIndex, pos >> 1); - } - } - return { - isLocationLong, - loca: new Uint8Array(locaTable.buffer), - glyf: new Uint8Array(glyfTable.buffer) - }; - } - scale(factors) { - for (let i = 0, ii = this.glyphs.length; i < ii; i++) { - this.glyphs[i].scale(factors[i]); - } - } -} -exports.GlyfTable = GlyfTable; -class Glyph { - constructor({ - header = null, - simple = null, - composites = null - }) { - this.header = header; - this.simple = simple; - this.composites = composites; - } - static parse(pos, glyf) { - const [read, header] = GlyphHeader.parse(pos, glyf); - pos += read; - if (header.numberOfContours < 0) { - const composites = []; - while (true) { - const [n, composite] = CompositeGlyph.parse(pos, glyf); - pos += n; - composites.push(composite); - if (!(composite.flags & MORE_COMPONENTS)) { - break; - } - } - return new Glyph({ - header, - composites - }); - } - const simple = SimpleGlyph.parse(pos, glyf, header.numberOfContours); - return new Glyph({ - header, - simple - }); - } - getSize() { - if (!this.header) { - return 0; - } - const size = this.simple ? this.simple.getSize() : this.composites.reduce((a, c) => a + c.getSize(), 0); - return this.header.getSize() + size; - } - write(pos, buf) { - if (!this.header) { - return 0; - } - const spos = pos; - pos += this.header.write(pos, buf); - if (this.simple) { - pos += this.simple.write(pos, buf); - } else { - for (const composite of this.composites) { - pos += composite.write(pos, buf); - } - } - return pos - spos; - } - scale(factor) { - if (!this.header) { - return; - } - const xMiddle = (this.header.xMin + this.header.xMax) / 2; - this.header.scale(xMiddle, factor); - if (this.simple) { - this.simple.scale(xMiddle, factor); - } else { - for (const composite of this.composites) { - composite.scale(xMiddle, factor); - } - } - } -} -class GlyphHeader { - constructor({ - numberOfContours, - xMin, - yMin, - xMax, - yMax - }) { - this.numberOfContours = numberOfContours; - this.xMin = xMin; - this.yMin = yMin; - this.xMax = xMax; - this.yMax = yMax; - } - static parse(pos, glyf) { - return [10, new GlyphHeader({ - numberOfContours: glyf.getInt16(pos), - xMin: glyf.getInt16(pos + 2), - yMin: glyf.getInt16(pos + 4), - xMax: glyf.getInt16(pos + 6), - yMax: glyf.getInt16(pos + 8) - })]; - } - getSize() { - return 10; - } - write(pos, buf) { - buf.setInt16(pos, this.numberOfContours); - buf.setInt16(pos + 2, this.xMin); - buf.setInt16(pos + 4, this.yMin); - buf.setInt16(pos + 6, this.xMax); - buf.setInt16(pos + 8, this.yMax); - return 10; - } - scale(x, factor) { - this.xMin = Math.round(x + (this.xMin - x) * factor); - this.xMax = Math.round(x + (this.xMax - x) * factor); - } -} -class Contour { - constructor({ - flags, - xCoordinates, - yCoordinates - }) { - this.xCoordinates = xCoordinates; - this.yCoordinates = yCoordinates; - this.flags = flags; - } -} -class SimpleGlyph { - constructor({ - contours, - instructions - }) { - this.contours = contours; - this.instructions = instructions; - } - static parse(pos, glyf, numberOfContours) { - const endPtsOfContours = []; - for (let i = 0; i < numberOfContours; i++) { - const endPt = glyf.getUint16(pos); - pos += 2; - endPtsOfContours.push(endPt); - } - const numberOfPt = endPtsOfContours[numberOfContours - 1] + 1; - const instructionLength = glyf.getUint16(pos); - pos += 2; - const instructions = new Uint8Array(glyf).slice(pos, pos + instructionLength); - pos += instructionLength; - const flags = []; - for (let i = 0; i < numberOfPt; pos++, i++) { - let flag = glyf.getUint8(pos); - flags.push(flag); - if (flag & REPEAT_FLAG) { - const count = glyf.getUint8(++pos); - flag ^= REPEAT_FLAG; - for (let m = 0; m < count; m++) { - flags.push(flag); - } - i += count; - } - } - const allXCoordinates = []; - let xCoordinates = []; - let yCoordinates = []; - let pointFlags = []; - const contours = []; - let endPtsOfContoursIndex = 0; - let lastCoordinate = 0; - for (let i = 0; i < numberOfPt; i++) { - const flag = flags[i]; - if (flag & X_SHORT_VECTOR) { - const x = glyf.getUint8(pos++); - lastCoordinate += flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR ? x : -x; - xCoordinates.push(lastCoordinate); - } else if (flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR) { - xCoordinates.push(lastCoordinate); - } else { - lastCoordinate += glyf.getInt16(pos); - pos += 2; - xCoordinates.push(lastCoordinate); - } - if (endPtsOfContours[endPtsOfContoursIndex] === i) { - endPtsOfContoursIndex++; - allXCoordinates.push(xCoordinates); - xCoordinates = []; - } - } - lastCoordinate = 0; - endPtsOfContoursIndex = 0; - for (let i = 0; i < numberOfPt; i++) { - const flag = flags[i]; - if (flag & Y_SHORT_VECTOR) { - const y = glyf.getUint8(pos++); - lastCoordinate += flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR ? y : -y; - yCoordinates.push(lastCoordinate); - } else if (flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR) { - yCoordinates.push(lastCoordinate); - } else { - lastCoordinate += glyf.getInt16(pos); - pos += 2; - yCoordinates.push(lastCoordinate); - } - pointFlags.push(flag & ON_CURVE_POINT | flag & OVERLAP_SIMPLE); - if (endPtsOfContours[endPtsOfContoursIndex] === i) { - xCoordinates = allXCoordinates[endPtsOfContoursIndex]; - endPtsOfContoursIndex++; - contours.push(new Contour({ - flags: pointFlags, - xCoordinates, - yCoordinates - })); - yCoordinates = []; - pointFlags = []; - } - } - return new SimpleGlyph({ - contours, - instructions - }); - } - getSize() { - let size = this.contours.length * 2 + 2 + this.instructions.length; - let lastX = 0; - let lastY = 0; - for (const contour of this.contours) { - size += contour.flags.length; - for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) { - const x = contour.xCoordinates[i]; - const y = contour.yCoordinates[i]; - let abs = Math.abs(x - lastX); - if (abs > 255) { - size += 2; - } else if (abs > 0) { - size += 1; - } - lastX = x; - abs = Math.abs(y - lastY); - if (abs > 255) { - size += 2; - } else if (abs > 0) { - size += 1; - } - lastY = y; - } - } - return size; - } - write(pos, buf) { - const spos = pos; - const xCoordinates = []; - const yCoordinates = []; - const flags = []; - let lastX = 0; - let lastY = 0; - for (const contour of this.contours) { - for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) { - let flag = contour.flags[i]; - const x = contour.xCoordinates[i]; - let delta = x - lastX; - if (delta === 0) { - flag |= X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR; - xCoordinates.push(0); - } else { - const abs = Math.abs(delta); - if (abs <= 255) { - flag |= delta >= 0 ? X_SHORT_VECTOR | X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR : X_SHORT_VECTOR; - xCoordinates.push(abs); - } else { - xCoordinates.push(delta); - } - } - lastX = x; - const y = contour.yCoordinates[i]; - delta = y - lastY; - if (delta === 0) { - flag |= Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR; - yCoordinates.push(0); - } else { - const abs = Math.abs(delta); - if (abs <= 255) { - flag |= delta >= 0 ? Y_SHORT_VECTOR | Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR : Y_SHORT_VECTOR; - yCoordinates.push(abs); - } else { - yCoordinates.push(delta); - } - } - lastY = y; - flags.push(flag); - } - buf.setUint16(pos, xCoordinates.length - 1); - pos += 2; - } - buf.setUint16(pos, this.instructions.length); - pos += 2; - if (this.instructions.length) { - new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(this.instructions, pos); - pos += this.instructions.length; - } - for (const flag of flags) { - buf.setUint8(pos++, flag); - } - for (let i = 0, ii = xCoordinates.length; i < ii; i++) { - const x = xCoordinates[i]; - const flag = flags[i]; - if (flag & X_SHORT_VECTOR) { - buf.setUint8(pos++, x); - } else if (!(flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR)) { - buf.setInt16(pos, x); - pos += 2; - } - } - for (let i = 0, ii = yCoordinates.length; i < ii; i++) { - const y = yCoordinates[i]; - const flag = flags[i]; - if (flag & Y_SHORT_VECTOR) { - buf.setUint8(pos++, y); - } else if (!(flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR)) { - buf.setInt16(pos, y); - pos += 2; - } - } - return pos - spos; - } - scale(x, factor) { - for (const contour of this.contours) { - if (contour.xCoordinates.length === 0) { - continue; - } - for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) { - contour.xCoordinates[i] = Math.round(x + (contour.xCoordinates[i] - x) * factor); - } - } - } -} -class CompositeGlyph { - constructor({ - flags, - glyphIndex, - argument1, - argument2, - transf, - instructions - }) { - this.flags = flags; - this.glyphIndex = glyphIndex; - this.argument1 = argument1; - this.argument2 = argument2; - this.transf = transf; - this.instructions = instructions; - } - static parse(pos, glyf) { - const spos = pos; - const transf = []; - let flags = glyf.getUint16(pos); - const glyphIndex = glyf.getUint16(pos + 2); - pos += 4; - let argument1, argument2; - if (flags & ARG_1_AND_2_ARE_WORDS) { - if (flags & ARGS_ARE_XY_VALUES) { - argument1 = glyf.getInt16(pos); - argument2 = glyf.getInt16(pos + 2); - } else { - argument1 = glyf.getUint16(pos); - argument2 = glyf.getUint16(pos + 2); - } - pos += 4; - flags ^= ARG_1_AND_2_ARE_WORDS; - } else { - if (flags & ARGS_ARE_XY_VALUES) { - argument1 = glyf.getInt8(pos); - argument2 = glyf.getInt8(pos + 1); - } else { - argument1 = glyf.getUint8(pos); - argument2 = glyf.getUint8(pos + 1); - } - pos += 2; - } - if (flags & WE_HAVE_A_SCALE) { - transf.push(glyf.getUint16(pos)); - pos += 2; - } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) { - transf.push(glyf.getUint16(pos), glyf.getUint16(pos + 2)); - pos += 4; - } else if (flags & WE_HAVE_A_TWO_BY_TWO) { - transf.push(glyf.getUint16(pos), glyf.getUint16(pos + 2), glyf.getUint16(pos + 4), glyf.getUint16(pos + 6)); - pos += 8; - } - let instructions = null; - if (flags & WE_HAVE_INSTRUCTIONS) { - const instructionLength = glyf.getUint16(pos); - pos += 2; - instructions = new Uint8Array(glyf).slice(pos, pos + instructionLength); - pos += instructionLength; - } - return [pos - spos, new CompositeGlyph({ - flags, - glyphIndex, - argument1, - argument2, - transf, - instructions - })]; - } - getSize() { - let size = 2 + 2 + this.transf.length * 2; - if (this.flags & WE_HAVE_INSTRUCTIONS) { - size += 2 + this.instructions.length; - } - size += 2; - if (this.flags & 2) { - if (!(this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127)) { - size += 2; - } - } else if (!(this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255)) { - size += 2; - } - return size; - } - write(pos, buf) { - const spos = pos; - if (this.flags & ARGS_ARE_XY_VALUES) { - if (!(this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127)) { - this.flags |= ARG_1_AND_2_ARE_WORDS; - } - } else if (!(this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255)) { - this.flags |= ARG_1_AND_2_ARE_WORDS; - } - buf.setUint16(pos, this.flags); - buf.setUint16(pos + 2, this.glyphIndex); - pos += 4; - if (this.flags & ARG_1_AND_2_ARE_WORDS) { - if (this.flags & ARGS_ARE_XY_VALUES) { - buf.setInt16(pos, this.argument1); - buf.setInt16(pos + 2, this.argument2); - } else { - buf.setUint16(pos, this.argument1); - buf.setUint16(pos + 2, this.argument2); - } - pos += 4; - } else { - buf.setUint8(pos, this.argument1); - buf.setUint8(pos + 1, this.argument2); - pos += 2; - } - if (this.flags & WE_HAVE_INSTRUCTIONS) { - buf.setUint16(pos, this.instructions.length); - pos += 2; - if (this.instructions.length) { - new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(this.instructions, pos); - pos += this.instructions.length; - } - } - return pos - spos; - } - scale(x, factor) {} -} - -/***/ }), -/* 47 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.OpenTypeFileBuilder = void 0; -var _core_utils = __w_pdfjs_require__(3); -var _util = __w_pdfjs_require__(2); -function writeInt16(dest, offset, num) { - dest[offset] = num >> 8 & 0xff; - dest[offset + 1] = num & 0xff; -} -function writeInt32(dest, offset, num) { - dest[offset] = num >> 24 & 0xff; - dest[offset + 1] = num >> 16 & 0xff; - dest[offset + 2] = num >> 8 & 0xff; - dest[offset + 3] = num & 0xff; -} -function writeData(dest, offset, data) { - if (data instanceof Uint8Array) { - dest.set(data, offset); - } else if (typeof data === "string") { - for (let i = 0, ii = data.length; i < ii; i++) { - dest[offset++] = data.charCodeAt(i) & 0xff; - } - } else { - for (const num of data) { - dest[offset++] = num & 0xff; - } - } -} -const OTF_HEADER_SIZE = 12; -const OTF_TABLE_ENTRY_SIZE = 16; -class OpenTypeFileBuilder { - constructor(sfnt) { - this.sfnt = sfnt; - this.tables = Object.create(null); - } - static getSearchParams(entriesCount, entrySize) { - let maxPower2 = 1, - log2 = 0; - while ((maxPower2 ^ entriesCount) > maxPower2) { - maxPower2 <<= 1; - log2++; - } - const searchRange = maxPower2 * entrySize; - return { - range: searchRange, - entry: log2, - rangeShift: entrySize * entriesCount - searchRange - }; - } - toArray() { - let sfnt = this.sfnt; - const tables = this.tables; - const tablesNames = Object.keys(tables); - tablesNames.sort(); - const numTables = tablesNames.length; - let i, j, jj, table, tableName; - let offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE; - const tableOffsets = [offset]; - for (i = 0; i < numTables; i++) { - table = tables[tablesNames[i]]; - const paddedLength = (table.length + 3 & ~3) >>> 0; - offset += paddedLength; - tableOffsets.push(offset); - } - const file = new Uint8Array(offset); - for (i = 0; i < numTables; i++) { - table = tables[tablesNames[i]]; - writeData(file, tableOffsets[i], table); - } - if (sfnt === "true") { - sfnt = (0, _util.string32)(0x00010000); - } - file[0] = sfnt.charCodeAt(0) & 0xff; - file[1] = sfnt.charCodeAt(1) & 0xff; - file[2] = sfnt.charCodeAt(2) & 0xff; - file[3] = sfnt.charCodeAt(3) & 0xff; - writeInt16(file, 4, numTables); - const searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16); - writeInt16(file, 6, searchParams.range); - writeInt16(file, 8, searchParams.entry); - writeInt16(file, 10, searchParams.rangeShift); - offset = OTF_HEADER_SIZE; - for (i = 0; i < numTables; i++) { - tableName = tablesNames[i]; - file[offset] = tableName.charCodeAt(0) & 0xff; - file[offset + 1] = tableName.charCodeAt(1) & 0xff; - file[offset + 2] = tableName.charCodeAt(2) & 0xff; - file[offset + 3] = tableName.charCodeAt(3) & 0xff; - let checksum = 0; - for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) { - const quad = (0, _core_utils.readUint32)(file, j); - checksum = checksum + quad >>> 0; - } - writeInt32(file, offset + 4, checksum); - writeInt32(file, offset + 8, tableOffsets[i]); - writeInt32(file, offset + 12, tables[tableName].length); - offset += OTF_TABLE_ENTRY_SIZE; - } - return file; - } - addTable(tag, data) { - if (tag in this.tables) { - throw new Error("Table " + tag + " already exists"); - } - this.tables[tag] = data; - } -} -exports.OpenTypeFileBuilder = OpenTypeFileBuilder; - -/***/ }), -/* 48 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Type1Font = void 0; -var _cff_parser = __w_pdfjs_require__(35); -var _util = __w_pdfjs_require__(2); -var _fonts_utils = __w_pdfjs_require__(38); -var _core_utils = __w_pdfjs_require__(3); -var _stream = __w_pdfjs_require__(8); -var _type1_parser = __w_pdfjs_require__(49); -function findBlock(streamBytes, signature, startIndex) { - const streamBytesLength = streamBytes.length; - const signatureLength = signature.length; - const scanLength = streamBytesLength - signatureLength; - let i = startIndex, - found = false; - while (i < scanLength) { - let j = 0; - while (j < signatureLength && streamBytes[i + j] === signature[j]) { - j++; - } - if (j >= signatureLength) { - i += j; - while (i < streamBytesLength && (0, _core_utils.isWhiteSpace)(streamBytes[i])) { - i++; - } - found = true; - break; - } - i++; - } - return { - found, - length: i - }; -} -function getHeaderBlock(stream, suggestedLength) { - const EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63]; - const streamStartPos = stream.pos; - let headerBytes, headerBytesLength, block; - try { - headerBytes = stream.getBytes(suggestedLength); - headerBytesLength = headerBytes.length; - } catch {} - if (headerBytesLength === suggestedLength) { - block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length); - if (block.found && block.length === suggestedLength) { - return { - stream: new _stream.Stream(headerBytes), - length: suggestedLength - }; - } - } - (0, _util.warn)('Invalid "Length1" property in Type1 font -- trying to recover.'); - stream.pos = streamStartPos; - const SCAN_BLOCK_LENGTH = 2048; - let actualLength; - while (true) { - const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); - block = findBlock(scanBytes, EEXEC_SIGNATURE, 0); - if (block.length === 0) { - break; - } - stream.pos += block.length; - if (block.found) { - actualLength = stream.pos - streamStartPos; - break; - } - } - stream.pos = streamStartPos; - if (actualLength) { - return { - stream: new _stream.Stream(stream.getBytes(actualLength)), - length: actualLength - }; - } - (0, _util.warn)('Unable to recover "Length1" property in Type1 font -- using as is.'); - return { - stream: new _stream.Stream(stream.getBytes(suggestedLength)), - length: suggestedLength - }; -} -function getEexecBlock(stream, suggestedLength) { - const eexecBytes = stream.getBytes(); - if (eexecBytes.length === 0) { - throw new _util.FormatError("getEexecBlock - no font program found."); - } - return { - stream: new _stream.Stream(eexecBytes), - length: eexecBytes.length - }; -} -class Type1Font { - constructor(name, file, properties) { - const PFB_HEADER_SIZE = 6; - let headerBlockLength = properties.length1; - let eexecBlockLength = properties.length2; - let pfbHeader = file.peekBytes(PFB_HEADER_SIZE); - const pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01; - if (pfbHeaderPresent) { - file.skip(PFB_HEADER_SIZE); - headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; - } - const headerBlock = getHeaderBlock(file, headerBlockLength); - const headerBlockParser = new _type1_parser.Type1Parser(headerBlock.stream, false, _fonts_utils.SEAC_ANALYSIS_ENABLED); - headerBlockParser.extractFontHeader(properties); - if (pfbHeaderPresent) { - pfbHeader = file.getBytes(PFB_HEADER_SIZE); - eexecBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; - } - const eexecBlock = getEexecBlock(file, eexecBlockLength); - const eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, _fonts_utils.SEAC_ANALYSIS_ENABLED); - const data = eexecBlockParser.extractFontProgram(properties); - for (const key in data.properties) { - properties[key] = data.properties[key]; - } - const charstrings = data.charstrings; - const type2Charstrings = this.getType2Charstrings(charstrings); - const subrs = this.getType2Subrs(data.subrs); - this.charstrings = charstrings; - this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties); - this.seacs = this.getSeacs(data.charstrings); - } - get numGlyphs() { - return this.charstrings.length + 1; - } - getCharset() { - const charset = [".notdef"]; - for (const { - glyphName - } of this.charstrings) { - charset.push(glyphName); - } - return charset; - } - getGlyphMapping(properties) { - const charstrings = this.charstrings; - if (properties.composite) { - const charCodeToGlyphId = Object.create(null); - for (let glyphId = 0, charstringsLen = charstrings.length; glyphId < charstringsLen; glyphId++) { - const charCode = properties.cMap.charCodeOf(glyphId); - charCodeToGlyphId[charCode] = glyphId + 1; - } - return charCodeToGlyphId; - } - const glyphNames = [".notdef"]; - let builtInEncoding, glyphId; - for (glyphId = 0; glyphId < charstrings.length; glyphId++) { - glyphNames.push(charstrings[glyphId].glyphName); - } - const encoding = properties.builtInEncoding; - if (encoding) { - builtInEncoding = Object.create(null); - for (const charCode in encoding) { - glyphId = glyphNames.indexOf(encoding[charCode]); - if (glyphId >= 0) { - builtInEncoding[charCode] = glyphId; - } - } - } - return (0, _fonts_utils.type1FontGlyphMapping)(properties, builtInEncoding, glyphNames); - } - hasGlyphId(id) { - if (id < 0 || id >= this.numGlyphs) { - return false; - } - if (id === 0) { - return true; - } - const glyph = this.charstrings[id - 1]; - return glyph.charstring.length > 0; - } - getSeacs(charstrings) { - const seacMap = []; - for (let i = 0, ii = charstrings.length; i < ii; i++) { - const charstring = charstrings[i]; - if (charstring.seac) { - seacMap[i + 1] = charstring.seac; - } - } - return seacMap; - } - getType2Charstrings(type1Charstrings) { - const type2Charstrings = []; - for (const type1Charstring of type1Charstrings) { - type2Charstrings.push(type1Charstring.charstring); - } - return type2Charstrings; - } - getType2Subrs(type1Subrs) { - let bias = 0; - const count = type1Subrs.length; - if (count < 1133) { - bias = 107; - } else if (count < 33769) { - bias = 1131; - } else { - bias = 32768; - } - const type2Subrs = []; - let i; - for (i = 0; i < bias; i++) { - type2Subrs.push([0x0b]); - } - for (i = 0; i < count; i++) { - type2Subrs.push(type1Subrs[i]); - } - return type2Subrs; - } - wrap(name, glyphs, charstrings, subrs, properties) { - const cff = new _cff_parser.CFF(); - cff.header = new _cff_parser.CFFHeader(1, 0, 4, 4); - cff.names = [name]; - const topDict = new _cff_parser.CFFTopDict(); - topDict.setByName("version", 391); - topDict.setByName("Notice", 392); - topDict.setByName("FullName", 393); - topDict.setByName("FamilyName", 394); - topDict.setByName("Weight", 395); - topDict.setByName("Encoding", null); - topDict.setByName("FontMatrix", properties.fontMatrix); - topDict.setByName("FontBBox", properties.bbox); - topDict.setByName("charset", null); - topDict.setByName("CharStrings", null); - topDict.setByName("Private", null); - cff.topDict = topDict; - const strings = new _cff_parser.CFFStrings(); - strings.add("Version 0.11"); - strings.add("See original notice"); - strings.add(name); - strings.add(name); - strings.add("Medium"); - cff.strings = strings; - cff.globalSubrIndex = new _cff_parser.CFFIndex(); - const count = glyphs.length; - const charsetArray = [".notdef"]; - let i, ii; - for (i = 0; i < count; i++) { - const glyphName = charstrings[i].glyphName; - const index = _cff_parser.CFFStandardStrings.indexOf(glyphName); - if (index === -1) { - strings.add(glyphName); - } - charsetArray.push(glyphName); - } - cff.charset = new _cff_parser.CFFCharset(false, 0, charsetArray); - const charStringsIndex = new _cff_parser.CFFIndex(); - charStringsIndex.add([0x8b, 0x0e]); - for (i = 0; i < count; i++) { - charStringsIndex.add(glyphs[i]); - } - cff.charStrings = charStringsIndex; - const privateDict = new _cff_parser.CFFPrivateDict(); - privateDict.setByName("Subrs", null); - const fields = ["BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StemSnapH", "StemSnapV", "BlueShift", "BlueFuzz", "BlueScale", "LanguageGroup", "ExpansionFactor", "ForceBold", "StdHW", "StdVW"]; - for (i = 0, ii = fields.length; i < ii; i++) { - const field = fields[i]; - if (!(field in properties.privateData)) { - continue; - } - const value = properties.privateData[field]; - if (Array.isArray(value)) { - for (let j = value.length - 1; j > 0; j--) { - value[j] -= value[j - 1]; - } - } - privateDict.setByName(field, value); - } - cff.topDict.privateDict = privateDict; - const subrIndex = new _cff_parser.CFFIndex(); - for (i = 0, ii = subrs.length; i < ii; i++) { - subrIndex.add(subrs[i]); - } - privateDict.subrsIndex = subrIndex; - const compiler = new _cff_parser.CFFCompiler(cff); - return compiler.compile(); - } -} -exports.Type1Font = Type1Font; - -/***/ }), -/* 49 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Type1Parser = void 0; -var _encodings = __w_pdfjs_require__(37); -var _core_utils = __w_pdfjs_require__(3); -var _stream = __w_pdfjs_require__(8); -var _util = __w_pdfjs_require__(2); -const HINTING_ENABLED = false; -const COMMAND_MAP = { - hstem: [1], - vstem: [3], - vmoveto: [4], - rlineto: [5], - hlineto: [6], - vlineto: [7], - rrcurveto: [8], - callsubr: [10], - flex: [12, 35], - drop: [12, 18], - endchar: [14], - rmoveto: [21], - hmoveto: [22], - vhcurveto: [30], - hvcurveto: [31] -}; -class Type1CharString { - constructor() { - this.width = 0; - this.lsb = 0; - this.flexing = false; - this.output = []; - this.stack = []; - } - convert(encoded, subrs, seacAnalysisEnabled) { - const count = encoded.length; - let error = false; - let wx, sbx, subrNumber; - for (let i = 0; i < count; i++) { - let value = encoded[i]; - if (value < 32) { - if (value === 12) { - value = (value << 8) + encoded[++i]; - } - switch (value) { - case 1: - if (!HINTING_ENABLED) { - this.stack = []; - break; - } - error = this.executeCommand(2, COMMAND_MAP.hstem); - break; - case 3: - if (!HINTING_ENABLED) { - this.stack = []; - break; - } - error = this.executeCommand(2, COMMAND_MAP.vstem); - break; - case 4: - if (this.flexing) { - if (this.stack.length < 1) { - error = true; - break; - } - const dy = this.stack.pop(); - this.stack.push(0, dy); - break; - } - error = this.executeCommand(1, COMMAND_MAP.vmoveto); - break; - case 5: - error = this.executeCommand(2, COMMAND_MAP.rlineto); - break; - case 6: - error = this.executeCommand(1, COMMAND_MAP.hlineto); - break; - case 7: - error = this.executeCommand(1, COMMAND_MAP.vlineto); - break; - case 8: - error = this.executeCommand(6, COMMAND_MAP.rrcurveto); - break; - case 9: - this.stack = []; - break; - case 10: - if (this.stack.length < 1) { - error = true; - break; - } - subrNumber = this.stack.pop(); - if (!subrs[subrNumber]) { - error = true; - break; - } - error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled); - break; - case 11: - return error; - case 13: - if (this.stack.length < 2) { - error = true; - break; - } - wx = this.stack.pop(); - sbx = this.stack.pop(); - this.lsb = sbx; - this.width = wx; - this.stack.push(wx, sbx); - error = this.executeCommand(2, COMMAND_MAP.hmoveto); - break; - case 14: - this.output.push(COMMAND_MAP.endchar[0]); - break; - case 21: - if (this.flexing) { - break; - } - error = this.executeCommand(2, COMMAND_MAP.rmoveto); - break; - case 22: - if (this.flexing) { - this.stack.push(0); - break; - } - error = this.executeCommand(1, COMMAND_MAP.hmoveto); - break; - case 30: - error = this.executeCommand(4, COMMAND_MAP.vhcurveto); - break; - case 31: - error = this.executeCommand(4, COMMAND_MAP.hvcurveto); - break; - case (12 << 8) + 0: - this.stack = []; - break; - case (12 << 8) + 1: - if (!HINTING_ENABLED) { - this.stack = []; - break; - } - error = this.executeCommand(2, COMMAND_MAP.vstem); - break; - case (12 << 8) + 2: - if (!HINTING_ENABLED) { - this.stack = []; - break; - } - error = this.executeCommand(2, COMMAND_MAP.hstem); - break; - case (12 << 8) + 6: - if (seacAnalysisEnabled) { - const asb = this.stack.at(-5); - this.seac = this.stack.splice(-4, 4); - this.seac[0] += this.lsb - asb; - error = this.executeCommand(0, COMMAND_MAP.endchar); - } else { - error = this.executeCommand(4, COMMAND_MAP.endchar); - } - break; - case (12 << 8) + 7: - if (this.stack.length < 4) { - error = true; - break; - } - this.stack.pop(); - wx = this.stack.pop(); - const sby = this.stack.pop(); - sbx = this.stack.pop(); - this.lsb = sbx; - this.width = wx; - this.stack.push(wx, sbx, sby); - error = this.executeCommand(3, COMMAND_MAP.rmoveto); - break; - case (12 << 8) + 12: - if (this.stack.length < 2) { - error = true; - break; - } - const num2 = this.stack.pop(); - const num1 = this.stack.pop(); - this.stack.push(num1 / num2); - break; - case (12 << 8) + 16: - if (this.stack.length < 2) { - error = true; - break; - } - subrNumber = this.stack.pop(); - const numArgs = this.stack.pop(); - if (subrNumber === 0 && numArgs === 3) { - const flexArgs = this.stack.splice(-17, 17); - this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]); - error = this.executeCommand(13, COMMAND_MAP.flex, true); - this.flexing = false; - this.stack.push(flexArgs[15], flexArgs[16]); - } else if (subrNumber === 1 && numArgs === 0) { - this.flexing = true; - } - break; - case (12 << 8) + 17: - break; - case (12 << 8) + 33: - this.stack = []; - break; - default: - (0, _util.warn)('Unknown type 1 charstring command of "' + value + '"'); - break; - } - if (error) { - break; - } - continue; - } else if (value <= 246) { - value -= 139; - } else if (value <= 250) { - value = (value - 247) * 256 + encoded[++i] + 108; - } else if (value <= 254) { - value = -((value - 251) * 256) - encoded[++i] - 108; - } else { - value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0; - } - this.stack.push(value); - } - return error; - } - executeCommand(howManyArgs, command, keepStack) { - const stackLength = this.stack.length; - if (howManyArgs > stackLength) { - return true; - } - const start = stackLength - howManyArgs; - for (let i = start; i < stackLength; i++) { - let value = this.stack[i]; - if (Number.isInteger(value)) { - this.output.push(28, value >> 8 & 0xff, value & 0xff); - } else { - value = 65536 * value | 0; - this.output.push(255, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); - } - } - this.output.push(...command); - if (keepStack) { - this.stack.splice(start, howManyArgs); - } else { - this.stack.length = 0; - } - return false; - } -} -const EEXEC_ENCRYPT_KEY = 55665; -const CHAR_STRS_ENCRYPT_KEY = 4330; -function isHexDigit(code) { - return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102; -} -function decrypt(data, key, discardNumber) { - if (discardNumber >= data.length) { - return new Uint8Array(0); - } - const c1 = 52845, - c2 = 22719; - let r = key | 0, - i, - j; - for (i = 0; i < discardNumber; i++) { - r = (data[i] + r) * c1 + c2 & (1 << 16) - 1; - } - const count = data.length - discardNumber; - const decrypted = new Uint8Array(count); - for (i = discardNumber, j = 0; j < count; i++, j++) { - const value = data[i]; - decrypted[j] = value ^ r >> 8; - r = (value + r) * c1 + c2 & (1 << 16) - 1; - } - return decrypted; -} -function decryptAscii(data, key, discardNumber) { - const c1 = 52845, - c2 = 22719; - let r = key | 0; - const count = data.length, - maybeLength = count >>> 1; - const decrypted = new Uint8Array(maybeLength); - let i, j; - for (i = 0, j = 0; i < count; i++) { - const digit1 = data[i]; - if (!isHexDigit(digit1)) { - continue; - } - i++; - let digit2; - while (i < count && !isHexDigit(digit2 = data[i])) { - i++; - } - if (i < count) { - const value = parseInt(String.fromCharCode(digit1, digit2), 16); - decrypted[j++] = value ^ r >> 8; - r = (value + r) * c1 + c2 & (1 << 16) - 1; - } - } - return decrypted.slice(discardNumber, j); -} -function isSpecial(c) { - return c === 0x2f || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d || c === 0x28 || c === 0x29; -} -class Type1Parser { - constructor(stream, encrypted, seacAnalysisEnabled) { - if (encrypted) { - const data = stream.getBytes(); - const isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7])); - stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4)); - } - this.seacAnalysisEnabled = !!seacAnalysisEnabled; - this.stream = stream; - this.nextChar(); - } - readNumberArray() { - this.getToken(); - const array = []; - while (true) { - const token = this.getToken(); - if (token === null || token === "]" || token === "}") { - break; - } - array.push(parseFloat(token || 0)); - } - return array; - } - readNumber() { - const token = this.getToken(); - return parseFloat(token || 0); - } - readInt() { - const token = this.getToken(); - return parseInt(token || 0, 10) | 0; - } - readBoolean() { - const token = this.getToken(); - return token === "true" ? 1 : 0; - } - nextChar() { - return this.currentChar = this.stream.getByte(); - } - prevChar() { - this.stream.skip(-2); - return this.currentChar = this.stream.getByte(); - } - getToken() { - let comment = false; - let ch = this.currentChar; - while (true) { - if (ch === -1) { - return null; - } - if (comment) { - if (ch === 0x0a || ch === 0x0d) { - comment = false; - } - } else if (ch === 0x25) { - comment = true; - } else if (!(0, _core_utils.isWhiteSpace)(ch)) { - break; - } - ch = this.nextChar(); - } - if (isSpecial(ch)) { - this.nextChar(); - return String.fromCharCode(ch); - } - let token = ""; - do { - token += String.fromCharCode(ch); - ch = this.nextChar(); - } while (ch >= 0 && !(0, _core_utils.isWhiteSpace)(ch) && !isSpecial(ch)); - return token; - } - readCharStrings(bytes, lenIV) { - if (lenIV === -1) { - return bytes; - } - return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV); - } - extractFontProgram(properties) { - const stream = this.stream; - const subrs = [], - charstrings = []; - const privateData = Object.create(null); - privateData.lenIV = 4; - const program = { - subrs: [], - charstrings: [], - properties: { - privateData - } - }; - let token, length, data, lenIV; - while ((token = this.getToken()) !== null) { - if (token !== "/") { - continue; - } - token = this.getToken(); - switch (token) { - case "CharStrings": - this.getToken(); - this.getToken(); - this.getToken(); - this.getToken(); - while (true) { - token = this.getToken(); - if (token === null || token === "end") { - break; - } - if (token !== "/") { - continue; - } - const glyph = this.getToken(); - length = this.readInt(); - this.getToken(); - data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); - lenIV = program.properties.privateData.lenIV; - const encoded = this.readCharStrings(data, lenIV); - this.nextChar(); - token = this.getToken(); - if (token === "noaccess") { - this.getToken(); - } else if (token === "/") { - this.prevChar(); - } - charstrings.push({ - glyph, - encoded - }); - } - break; - case "Subrs": - this.readInt(); - this.getToken(); - while (this.getToken() === "dup") { - const index = this.readInt(); - length = this.readInt(); - this.getToken(); - data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); - lenIV = program.properties.privateData.lenIV; - const encoded = this.readCharStrings(data, lenIV); - this.nextChar(); - token = this.getToken(); - if (token === "noaccess") { - this.getToken(); - } - subrs[index] = encoded; - } - break; - case "BlueValues": - case "OtherBlues": - case "FamilyBlues": - case "FamilyOtherBlues": - const blueArray = this.readNumberArray(); - if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) { - program.properties.privateData[token] = blueArray; - } - break; - case "StemSnapH": - case "StemSnapV": - program.properties.privateData[token] = this.readNumberArray(); - break; - case "StdHW": - case "StdVW": - program.properties.privateData[token] = this.readNumberArray()[0]; - break; - case "BlueShift": - case "lenIV": - case "BlueFuzz": - case "BlueScale": - case "LanguageGroup": - program.properties.privateData[token] = this.readNumber(); - break; - case "ExpansionFactor": - program.properties.privateData[token] = this.readNumber() || 0.06; - break; - case "ForceBold": - program.properties.privateData[token] = this.readBoolean(); - break; - } - } - for (const { - encoded, - glyph - } of charstrings) { - const charString = new Type1CharString(); - const error = charString.convert(encoded, subrs, this.seacAnalysisEnabled); - let output = charString.output; - if (error) { - output = [14]; - } - const charStringObject = { - glyphName: glyph, - charstring: output, - width: charString.width, - lsb: charString.lsb, - seac: charString.seac - }; - if (glyph === ".notdef") { - program.charstrings.unshift(charStringObject); - } else { - program.charstrings.push(charStringObject); - } - if (properties.builtInEncoding) { - const index = properties.builtInEncoding.indexOf(glyph); - if (index > -1 && properties.widths[index] === undefined && index >= properties.firstChar && index <= properties.lastChar) { - properties.widths[index] = charString.width; - } - } - } - return program; - } - extractFontHeader(properties) { - let token; - while ((token = this.getToken()) !== null) { - if (token !== "/") { - continue; - } - token = this.getToken(); - switch (token) { - case "FontMatrix": - const matrix = this.readNumberArray(); - properties.fontMatrix = matrix; - break; - case "Encoding": - const encodingArg = this.getToken(); - let encoding; - if (!/^\d+$/.test(encodingArg)) { - encoding = (0, _encodings.getEncoding)(encodingArg); - } else { - encoding = []; - const size = parseInt(encodingArg, 10) | 0; - this.getToken(); - for (let j = 0; j < size; j++) { - token = this.getToken(); - while (token !== "dup" && token !== "def") { - token = this.getToken(); - if (token === null) { - return; - } - } - if (token === "def") { - break; - } - const index = this.readInt(); - this.getToken(); - const glyph = this.getToken(); - encoding[index] = glyph; - this.getToken(); - } - } - properties.builtInEncoding = encoding; - break; - case "FontBBox": - const fontBBox = this.readNumberArray(); - properties.ascent = Math.max(fontBBox[3], fontBBox[1]); - properties.descent = Math.min(fontBBox[1], fontBBox[3]); - properties.ascentScaled = true; - break; - } - } - } -} -exports.Type1Parser = Type1Parser; - -/***/ }), -/* 50 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Pattern = void 0; -exports.clearPatternCaches = clearPatternCaches; -exports.getTilingPatternIR = getTilingPatternIR; -var _util = __w_pdfjs_require__(2); -var _base_stream = __w_pdfjs_require__(5); -var _colorspace = __w_pdfjs_require__(12); -var _core_utils = __w_pdfjs_require__(3); -const ShadingType = { - FUNCTION_BASED: 1, - AXIAL: 2, - RADIAL: 3, - FREE_FORM_MESH: 4, - LATTICE_FORM_MESH: 5, - COONS_PATCH_MESH: 6, - TENSOR_PATCH_MESH: 7 -}; -class Pattern { - constructor() { - (0, _util.unreachable)("Cannot initialize Pattern."); - } - static parseShading(shading, xref, res, pdfFunctionFactory, localColorSpaceCache) { - const dict = shading instanceof _base_stream.BaseStream ? shading.dict : shading; - const type = dict.get("ShadingType"); - try { - switch (type) { - case ShadingType.AXIAL: - case ShadingType.RADIAL: - return new RadialAxialShading(dict, xref, res, pdfFunctionFactory, localColorSpaceCache); - case ShadingType.FREE_FORM_MESH: - case ShadingType.LATTICE_FORM_MESH: - case ShadingType.COONS_PATCH_MESH: - case ShadingType.TENSOR_PATCH_MESH: - return new MeshShading(shading, xref, res, pdfFunctionFactory, localColorSpaceCache); - default: - throw new _util.FormatError("Unsupported ShadingType: " + type); - } - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.warn)(ex); - return new DummyShading(); - } - } -} -exports.Pattern = Pattern; -class BaseShading { - static SMALL_NUMBER = 1e-6; - constructor() { - if (this.constructor === BaseShading) { - (0, _util.unreachable)("Cannot initialize BaseShading."); - } - } - getIR() { - (0, _util.unreachable)("Abstract method `getIR` called."); - } -} -class RadialAxialShading extends BaseShading { - constructor(dict, xref, resources, pdfFunctionFactory, localColorSpaceCache) { - super(); - this.coordsArr = dict.getArray("Coords"); - this.shadingType = dict.get("ShadingType"); - const cs = _colorspace.ColorSpace.parse({ - cs: dict.getRaw("CS") || dict.getRaw("ColorSpace"), - xref, - resources, - pdfFunctionFactory, - localColorSpaceCache - }); - const bbox = dict.getArray("BBox"); - this.bbox = Array.isArray(bbox) && bbox.length === 4 ? _util.Util.normalizeRect(bbox) : null; - let t0 = 0.0, - t1 = 1.0; - if (dict.has("Domain")) { - const domainArr = dict.getArray("Domain"); - t0 = domainArr[0]; - t1 = domainArr[1]; - } - let extendStart = false, - extendEnd = false; - if (dict.has("Extend")) { - const extendArr = dict.getArray("Extend"); - extendStart = extendArr[0]; - extendEnd = extendArr[1]; - } - if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) { - const [x1, y1, r1, x2, y2, r2] = this.coordsArr; - const distance = Math.hypot(x1 - x2, y1 - y2); - if (r1 <= r2 + distance && r2 <= r1 + distance) { - (0, _util.warn)("Unsupported radial gradient."); - } - } - this.extendStart = extendStart; - this.extendEnd = extendEnd; - const fnObj = dict.getRaw("Function"); - const fn = pdfFunctionFactory.createFromArray(fnObj); - const NUMBER_OF_SAMPLES = 840; - const step = (t1 - t0) / NUMBER_OF_SAMPLES; - const colorStops = this.colorStops = []; - if (t0 >= t1 || step <= 0) { - (0, _util.info)("Bad shading domain."); - return; - } - const color = new Float32Array(cs.numComps), - ratio = new Float32Array(1); - let rgbColor; - let iBase = 0; - ratio[0] = t0; - fn(ratio, 0, color, 0); - let rgbBase = cs.getRgb(color, 0); - const cssColorBase = _util.Util.makeHexColor(rgbBase[0], rgbBase[1], rgbBase[2]); - colorStops.push([0, cssColorBase]); - let iPrev = 1; - ratio[0] = t0 + step; - fn(ratio, 0, color, 0); - let rgbPrev = cs.getRgb(color, 0); - let maxSlopeR = rgbPrev[0] - rgbBase[0] + 1; - let maxSlopeG = rgbPrev[1] - rgbBase[1] + 1; - let maxSlopeB = rgbPrev[2] - rgbBase[2] + 1; - let minSlopeR = rgbPrev[0] - rgbBase[0] - 1; - let minSlopeG = rgbPrev[1] - rgbBase[1] - 1; - let minSlopeB = rgbPrev[2] - rgbBase[2] - 1; - for (let i = 2; i < NUMBER_OF_SAMPLES; i++) { - ratio[0] = t0 + i * step; - fn(ratio, 0, color, 0); - rgbColor = cs.getRgb(color, 0); - const run = i - iBase; - maxSlopeR = Math.min(maxSlopeR, (rgbColor[0] - rgbBase[0] + 1) / run); - maxSlopeG = Math.min(maxSlopeG, (rgbColor[1] - rgbBase[1] + 1) / run); - maxSlopeB = Math.min(maxSlopeB, (rgbColor[2] - rgbBase[2] + 1) / run); - minSlopeR = Math.max(minSlopeR, (rgbColor[0] - rgbBase[0] - 1) / run); - minSlopeG = Math.max(minSlopeG, (rgbColor[1] - rgbBase[1] - 1) / run); - minSlopeB = Math.max(minSlopeB, (rgbColor[2] - rgbBase[2] - 1) / run); - const slopesExist = minSlopeR <= maxSlopeR && minSlopeG <= maxSlopeG && minSlopeB <= maxSlopeB; - if (!slopesExist) { - const cssColor = _util.Util.makeHexColor(rgbPrev[0], rgbPrev[1], rgbPrev[2]); - colorStops.push([iPrev / NUMBER_OF_SAMPLES, cssColor]); - maxSlopeR = rgbColor[0] - rgbPrev[0] + 1; - maxSlopeG = rgbColor[1] - rgbPrev[1] + 1; - maxSlopeB = rgbColor[2] - rgbPrev[2] + 1; - minSlopeR = rgbColor[0] - rgbPrev[0] - 1; - minSlopeG = rgbColor[1] - rgbPrev[1] - 1; - minSlopeB = rgbColor[2] - rgbPrev[2] - 1; - iBase = iPrev; - rgbBase = rgbPrev; - } - iPrev = i; - rgbPrev = rgbColor; - } - const cssColor = _util.Util.makeHexColor(rgbPrev[0], rgbPrev[1], rgbPrev[2]); - colorStops.push([1, cssColor]); - let background = "transparent"; - if (dict.has("Background")) { - rgbColor = cs.getRgb(dict.get("Background"), 0); - background = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]); - } - if (!extendStart) { - colorStops.unshift([0, background]); - colorStops[1][0] += BaseShading.SMALL_NUMBER; - } - if (!extendEnd) { - colorStops.at(-1)[0] -= BaseShading.SMALL_NUMBER; - colorStops.push([1, background]); - } - this.colorStops = colorStops; - } - getIR() { - const coordsArr = this.coordsArr; - const shadingType = this.shadingType; - let type, p0, p1, r0, r1; - if (shadingType === ShadingType.AXIAL) { - p0 = [coordsArr[0], coordsArr[1]]; - p1 = [coordsArr[2], coordsArr[3]]; - r0 = null; - r1 = null; - type = "axial"; - } else if (shadingType === ShadingType.RADIAL) { - p0 = [coordsArr[0], coordsArr[1]]; - p1 = [coordsArr[3], coordsArr[4]]; - r0 = coordsArr[2]; - r1 = coordsArr[5]; - type = "radial"; - } else { - (0, _util.unreachable)(`getPattern type unknown: ${shadingType}`); - } - return ["RadialAxial", type, this.bbox, this.colorStops, p0, p1, r0, r1]; - } -} -class MeshStreamReader { - constructor(stream, context) { - this.stream = stream; - this.context = context; - this.buffer = 0; - this.bufferLength = 0; - const numComps = context.numComps; - this.tmpCompsBuf = new Float32Array(numComps); - const csNumComps = context.colorSpace.numComps; - this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf; - } - get hasData() { - if (this.stream.end) { - return this.stream.pos < this.stream.end; - } - if (this.bufferLength > 0) { - return true; - } - const nextByte = this.stream.getByte(); - if (nextByte < 0) { - return false; - } - this.buffer = nextByte; - this.bufferLength = 8; - return true; - } - readBits(n) { - let buffer = this.buffer; - let bufferLength = this.bufferLength; - if (n === 32) { - if (bufferLength === 0) { - return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0; - } - buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte(); - const nextByte = this.stream.getByte(); - this.buffer = nextByte & (1 << bufferLength) - 1; - return (buffer << 8 - bufferLength | (nextByte & 0xff) >> bufferLength) >>> 0; - } - if (n === 8 && bufferLength === 0) { - return this.stream.getByte(); - } - while (bufferLength < n) { - buffer = buffer << 8 | this.stream.getByte(); - bufferLength += 8; - } - bufferLength -= n; - this.bufferLength = bufferLength; - this.buffer = buffer & (1 << bufferLength) - 1; - return buffer >> bufferLength; - } - align() { - this.buffer = 0; - this.bufferLength = 0; - } - readFlag() { - return this.readBits(this.context.bitsPerFlag); - } - readCoordinate() { - const bitsPerCoordinate = this.context.bitsPerCoordinate; - const xi = this.readBits(bitsPerCoordinate); - const yi = this.readBits(bitsPerCoordinate); - const decode = this.context.decode; - const scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10; - return [xi * scale * (decode[1] - decode[0]) + decode[0], yi * scale * (decode[3] - decode[2]) + decode[2]]; - } - readComponents() { - const numComps = this.context.numComps; - const bitsPerComponent = this.context.bitsPerComponent; - const scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10; - const decode = this.context.decode; - const components = this.tmpCompsBuf; - for (let i = 0, j = 4; i < numComps; i++, j += 2) { - const ci = this.readBits(bitsPerComponent); - components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j]; - } - const color = this.tmpCsCompsBuf; - if (this.context.colorFn) { - this.context.colorFn(components, 0, color, 0); - } - return this.context.colorSpace.getRgb(color, 0); - } -} -let bCache = Object.create(null); -function buildB(count) { - const lut = []; - for (let i = 0; i <= count; i++) { - const t = i / count, - t_ = 1 - t; - lut.push(new Float32Array([t_ ** 3, 3 * t * t_ ** 2, 3 * t ** 2 * t_, t ** 3])); - } - return lut; -} -function getB(count) { - return bCache[count] ||= buildB(count); -} -function clearPatternCaches() { - bCache = Object.create(null); -} -class MeshShading extends BaseShading { - static MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3; - static MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20; - static TRIANGLE_DENSITY = 20; - constructor(stream, xref, resources, pdfFunctionFactory, localColorSpaceCache) { - super(); - if (!(stream instanceof _base_stream.BaseStream)) { - throw new _util.FormatError("Mesh data is not a stream"); - } - const dict = stream.dict; - this.shadingType = dict.get("ShadingType"); - const bbox = dict.getArray("BBox"); - this.bbox = Array.isArray(bbox) && bbox.length === 4 ? _util.Util.normalizeRect(bbox) : null; - const cs = _colorspace.ColorSpace.parse({ - cs: dict.getRaw("CS") || dict.getRaw("ColorSpace"), - xref, - resources, - pdfFunctionFactory, - localColorSpaceCache - }); - this.background = dict.has("Background") ? cs.getRgb(dict.get("Background"), 0) : null; - const fnObj = dict.getRaw("Function"); - const fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null; - this.coords = []; - this.colors = []; - this.figures = []; - const decodeContext = { - bitsPerCoordinate: dict.get("BitsPerCoordinate"), - bitsPerComponent: dict.get("BitsPerComponent"), - bitsPerFlag: dict.get("BitsPerFlag"), - decode: dict.getArray("Decode"), - colorFn: fn, - colorSpace: cs, - numComps: fn ? 1 : cs.numComps - }; - const reader = new MeshStreamReader(stream, decodeContext); - let patchMesh = false; - switch (this.shadingType) { - case ShadingType.FREE_FORM_MESH: - this._decodeType4Shading(reader); - break; - case ShadingType.LATTICE_FORM_MESH: - const verticesPerRow = dict.get("VerticesPerRow") | 0; - if (verticesPerRow < 2) { - throw new _util.FormatError("Invalid VerticesPerRow"); - } - this._decodeType5Shading(reader, verticesPerRow); - break; - case ShadingType.COONS_PATCH_MESH: - this._decodeType6Shading(reader); - patchMesh = true; - break; - case ShadingType.TENSOR_PATCH_MESH: - this._decodeType7Shading(reader); - patchMesh = true; - break; - default: - (0, _util.unreachable)("Unsupported mesh type."); - break; - } - if (patchMesh) { - this._updateBounds(); - for (let i = 0, ii = this.figures.length; i < ii; i++) { - this._buildFigureFromPatch(i); - } - } - this._updateBounds(); - this._packData(); - } - _decodeType4Shading(reader) { - const coords = this.coords; - const colors = this.colors; - const operators = []; - const ps = []; - let verticesLeft = 0; - while (reader.hasData) { - const f = reader.readFlag(); - const coord = reader.readCoordinate(); - const color = reader.readComponents(); - if (verticesLeft === 0) { - if (!(0 <= f && f <= 2)) { - throw new _util.FormatError("Unknown type4 flag"); - } - switch (f) { - case 0: - verticesLeft = 3; - break; - case 1: - ps.push(ps.at(-2), ps.at(-1)); - verticesLeft = 1; - break; - case 2: - ps.push(ps.at(-3), ps.at(-1)); - verticesLeft = 1; - break; - } - operators.push(f); - } - ps.push(coords.length); - coords.push(coord); - colors.push(color); - verticesLeft--; - reader.align(); - } - this.figures.push({ - type: "triangles", - coords: new Int32Array(ps), - colors: new Int32Array(ps) - }); - } - _decodeType5Shading(reader, verticesPerRow) { - const coords = this.coords; - const colors = this.colors; - const ps = []; - while (reader.hasData) { - const coord = reader.readCoordinate(); - const color = reader.readComponents(); - ps.push(coords.length); - coords.push(coord); - colors.push(color); - } - this.figures.push({ - type: "lattice", - coords: new Int32Array(ps), - colors: new Int32Array(ps), - verticesPerRow - }); - } - _decodeType6Shading(reader) { - const coords = this.coords; - const colors = this.colors; - const ps = new Int32Array(16); - const cs = new Int32Array(4); - while (reader.hasData) { - const f = reader.readFlag(); - if (!(0 <= f && f <= 3)) { - throw new _util.FormatError("Unknown type6 flag"); - } - const pi = coords.length; - for (let i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) { - coords.push(reader.readCoordinate()); - } - const ci = colors.length; - for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { - colors.push(reader.readComponents()); - } - let tmp1, tmp2, tmp3, tmp4; - switch (f) { - case 0: - ps[12] = pi + 3; - ps[13] = pi + 4; - ps[14] = pi + 5; - ps[15] = pi + 6; - ps[8] = pi + 2; - ps[11] = pi + 7; - ps[4] = pi + 1; - ps[7] = pi + 8; - ps[0] = pi; - ps[1] = pi + 11; - ps[2] = pi + 10; - ps[3] = pi + 9; - cs[2] = ci + 1; - cs[3] = ci + 2; - cs[0] = ci; - cs[1] = ci + 3; - break; - case 1: - tmp1 = ps[12]; - tmp2 = ps[13]; - tmp3 = ps[14]; - tmp4 = ps[15]; - ps[12] = tmp4; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = tmp3; - ps[11] = pi + 3; - ps[4] = tmp2; - ps[7] = pi + 4; - ps[0] = tmp1; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - tmp1 = cs[2]; - tmp2 = cs[3]; - cs[2] = tmp2; - cs[3] = ci; - cs[0] = tmp1; - cs[1] = ci + 1; - break; - case 2: - tmp1 = ps[15]; - tmp2 = ps[11]; - ps[12] = ps[3]; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = ps[7]; - ps[11] = pi + 3; - ps[4] = tmp2; - ps[7] = pi + 4; - ps[0] = tmp1; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - tmp1 = cs[3]; - cs[2] = cs[1]; - cs[3] = ci; - cs[0] = tmp1; - cs[1] = ci + 1; - break; - case 3: - ps[12] = ps[0]; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = ps[1]; - ps[11] = pi + 3; - ps[4] = ps[2]; - ps[7] = pi + 4; - ps[0] = ps[3]; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - cs[2] = cs[0]; - cs[3] = ci; - cs[0] = cs[1]; - cs[1] = ci + 1; - break; - } - ps[5] = coords.length; - coords.push([(-4 * coords[ps[0]][0] - coords[ps[15]][0] + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, (-4 * coords[ps[0]][1] - coords[ps[15]][1] + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9]); - ps[6] = coords.length; - coords.push([(-4 * coords[ps[3]][0] - coords[ps[12]][0] + 6 * (coords[ps[2]][0] + coords[ps[7]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9, (-4 * coords[ps[3]][1] - coords[ps[12]][1] + 6 * (coords[ps[2]][1] + coords[ps[7]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9]); - ps[9] = coords.length; - coords.push([(-4 * coords[ps[12]][0] - coords[ps[3]][0] + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, (-4 * coords[ps[12]][1] - coords[ps[3]][1] + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9]); - ps[10] = coords.length; - coords.push([(-4 * coords[ps[15]][0] - coords[ps[0]][0] + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, (-4 * coords[ps[15]][1] - coords[ps[0]][1] + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9]); - this.figures.push({ - type: "patch", - coords: new Int32Array(ps), - colors: new Int32Array(cs) - }); - } - } - _decodeType7Shading(reader) { - const coords = this.coords; - const colors = this.colors; - const ps = new Int32Array(16); - const cs = new Int32Array(4); - while (reader.hasData) { - const f = reader.readFlag(); - if (!(0 <= f && f <= 3)) { - throw new _util.FormatError("Unknown type7 flag"); - } - const pi = coords.length; - for (let i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) { - coords.push(reader.readCoordinate()); - } - const ci = colors.length; - for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { - colors.push(reader.readComponents()); - } - let tmp1, tmp2, tmp3, tmp4; - switch (f) { - case 0: - ps[12] = pi + 3; - ps[13] = pi + 4; - ps[14] = pi + 5; - ps[15] = pi + 6; - ps[8] = pi + 2; - ps[9] = pi + 13; - ps[10] = pi + 14; - ps[11] = pi + 7; - ps[4] = pi + 1; - ps[5] = pi + 12; - ps[6] = pi + 15; - ps[7] = pi + 8; - ps[0] = pi; - ps[1] = pi + 11; - ps[2] = pi + 10; - ps[3] = pi + 9; - cs[2] = ci + 1; - cs[3] = ci + 2; - cs[0] = ci; - cs[1] = ci + 3; - break; - case 1: - tmp1 = ps[12]; - tmp2 = ps[13]; - tmp3 = ps[14]; - tmp4 = ps[15]; - ps[12] = tmp4; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = tmp3; - ps[9] = pi + 9; - ps[10] = pi + 10; - ps[11] = pi + 3; - ps[4] = tmp2; - ps[5] = pi + 8; - ps[6] = pi + 11; - ps[7] = pi + 4; - ps[0] = tmp1; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - tmp1 = cs[2]; - tmp2 = cs[3]; - cs[2] = tmp2; - cs[3] = ci; - cs[0] = tmp1; - cs[1] = ci + 1; - break; - case 2: - tmp1 = ps[15]; - tmp2 = ps[11]; - ps[12] = ps[3]; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = ps[7]; - ps[9] = pi + 9; - ps[10] = pi + 10; - ps[11] = pi + 3; - ps[4] = tmp2; - ps[5] = pi + 8; - ps[6] = pi + 11; - ps[7] = pi + 4; - ps[0] = tmp1; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - tmp1 = cs[3]; - cs[2] = cs[1]; - cs[3] = ci; - cs[0] = tmp1; - cs[1] = ci + 1; - break; - case 3: - ps[12] = ps[0]; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = ps[1]; - ps[9] = pi + 9; - ps[10] = pi + 10; - ps[11] = pi + 3; - ps[4] = ps[2]; - ps[5] = pi + 8; - ps[6] = pi + 11; - ps[7] = pi + 4; - ps[0] = ps[3]; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - cs[2] = cs[0]; - cs[3] = ci; - cs[0] = cs[1]; - cs[1] = ci + 1; - break; - } - this.figures.push({ - type: "patch", - coords: new Int32Array(ps), - colors: new Int32Array(cs) - }); - } - } - _buildFigureFromPatch(index) { - const figure = this.figures[index]; - (0, _util.assert)(figure.type === "patch", "Unexpected patch mesh figure"); - const coords = this.coords, - colors = this.colors; - const pi = figure.coords; - const ci = figure.colors; - const figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); - const figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); - const figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); - const figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); - let splitXBy = Math.ceil((figureMaxX - figureMinX) * MeshShading.TRIANGLE_DENSITY / (this.bounds[2] - this.bounds[0])); - splitXBy = Math.max(MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy)); - let splitYBy = Math.ceil((figureMaxY - figureMinY) * MeshShading.TRIANGLE_DENSITY / (this.bounds[3] - this.bounds[1])); - splitYBy = Math.max(MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy)); - const verticesPerRow = splitXBy + 1; - const figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow); - const figureColors = new Int32Array((splitYBy + 1) * verticesPerRow); - let k = 0; - const cl = new Uint8Array(3), - cr = new Uint8Array(3); - const c0 = colors[ci[0]], - c1 = colors[ci[1]], - c2 = colors[ci[2]], - c3 = colors[ci[3]]; - const bRow = getB(splitYBy), - bCol = getB(splitXBy); - for (let row = 0; row <= splitYBy; row++) { - cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0; - cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0; - cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0; - cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0; - cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0; - cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0; - for (let col = 0; col <= splitXBy; col++, k++) { - if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) { - continue; - } - let x = 0, - y = 0; - let q = 0; - for (let i = 0; i <= 3; i++) { - for (let j = 0; j <= 3; j++, q++) { - const m = bRow[row][i] * bCol[col][j]; - x += coords[pi[q]][0] * m; - y += coords[pi[q]][1] * m; - } - } - figureCoords[k] = coords.length; - coords.push([x, y]); - figureColors[k] = colors.length; - const newColor = new Uint8Array(3); - newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0; - newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0; - newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0; - colors.push(newColor); - } - } - figureCoords[0] = pi[0]; - figureColors[0] = ci[0]; - figureCoords[splitXBy] = pi[3]; - figureColors[splitXBy] = ci[1]; - figureCoords[verticesPerRow * splitYBy] = pi[12]; - figureColors[verticesPerRow * splitYBy] = ci[2]; - figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15]; - figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3]; - this.figures[index] = { - type: "lattice", - coords: figureCoords, - colors: figureColors, - verticesPerRow - }; - } - _updateBounds() { - let minX = this.coords[0][0], - minY = this.coords[0][1], - maxX = minX, - maxY = minY; - for (let i = 1, ii = this.coords.length; i < ii; i++) { - const x = this.coords[i][0], - y = this.coords[i][1]; - minX = minX > x ? x : minX; - minY = minY > y ? y : minY; - maxX = maxX < x ? x : maxX; - maxY = maxY < y ? y : maxY; - } - this.bounds = [minX, minY, maxX, maxY]; - } - _packData() { - let i, ii, j, jj; - const coords = this.coords; - const coordsPacked = new Float32Array(coords.length * 2); - for (i = 0, j = 0, ii = coords.length; i < ii; i++) { - const xy = coords[i]; - coordsPacked[j++] = xy[0]; - coordsPacked[j++] = xy[1]; - } - this.coords = coordsPacked; - const colors = this.colors; - const colorsPacked = new Uint8Array(colors.length * 3); - for (i = 0, j = 0, ii = colors.length; i < ii; i++) { - const c = colors[i]; - colorsPacked[j++] = c[0]; - colorsPacked[j++] = c[1]; - colorsPacked[j++] = c[2]; - } - this.colors = colorsPacked; - const figures = this.figures; - for (i = 0, ii = figures.length; i < ii; i++) { - const figure = figures[i], - ps = figure.coords, - cs = figure.colors; - for (j = 0, jj = ps.length; j < jj; j++) { - ps[j] *= 2; - cs[j] *= 3; - } - } - } - getIR() { - return ["Mesh", this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.bbox, this.background]; - } -} -class DummyShading extends BaseShading { - getIR() { - return ["Dummy"]; - } -} -function getTilingPatternIR(operatorList, dict, color) { - const matrix = dict.getArray("Matrix"); - const bbox = _util.Util.normalizeRect(dict.getArray("BBox")); - const xstep = dict.get("XStep"); - const ystep = dict.get("YStep"); - const paintType = dict.get("PaintType"); - const tilingType = dict.get("TilingType"); - if (bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) { - throw new _util.FormatError(`Invalid getTilingPatternIR /BBox array: [${bbox}].`); - } - return ["TilingPattern", color, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType]; -} - -/***/ }), -/* 51 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getXfaFontDict = getXfaFontDict; -exports.getXfaFontName = getXfaFontName; -var _calibri_factors = __w_pdfjs_require__(52); -var _primitives = __w_pdfjs_require__(4); -var _helvetica_factors = __w_pdfjs_require__(53); -var _liberationsans_widths = __w_pdfjs_require__(54); -var _myriadpro_factors = __w_pdfjs_require__(55); -var _segoeui_factors = __w_pdfjs_require__(56); -var _core_utils = __w_pdfjs_require__(3); -var _fonts_utils = __w_pdfjs_require__(38); -const getXFAFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { - t["MyriadPro-Regular"] = t["PdfJS-Fallback-Regular"] = { - name: "LiberationSans-Regular", - factors: _myriadpro_factors.MyriadProRegularFactors, - baseWidths: _liberationsans_widths.LiberationSansRegularWidths, - baseMapping: _liberationsans_widths.LiberationSansRegularMapping, - metrics: _myriadpro_factors.MyriadProRegularMetrics - }; - t["MyriadPro-Bold"] = t["PdfJS-Fallback-Bold"] = { - name: "LiberationSans-Bold", - factors: _myriadpro_factors.MyriadProBoldFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldMapping, - metrics: _myriadpro_factors.MyriadProBoldMetrics - }; - t["MyriadPro-It"] = t["MyriadPro-Italic"] = t["PdfJS-Fallback-Italic"] = { - name: "LiberationSans-Italic", - factors: _myriadpro_factors.MyriadProItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansItalicMapping, - metrics: _myriadpro_factors.MyriadProItalicMetrics - }; - t["MyriadPro-BoldIt"] = t["MyriadPro-BoldItalic"] = t["PdfJS-Fallback-BoldItalic"] = { - name: "LiberationSans-BoldItalic", - factors: _myriadpro_factors.MyriadProBoldItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, - metrics: _myriadpro_factors.MyriadProBoldItalicMetrics - }; - t.ArialMT = t.Arial = t["Arial-Regular"] = { - name: "LiberationSans-Regular", - baseWidths: _liberationsans_widths.LiberationSansRegularWidths, - baseMapping: _liberationsans_widths.LiberationSansRegularMapping - }; - t["Arial-BoldMT"] = t["Arial-Bold"] = { - name: "LiberationSans-Bold", - baseWidths: _liberationsans_widths.LiberationSansBoldWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldMapping - }; - t["Arial-ItalicMT"] = t["Arial-Italic"] = { - name: "LiberationSans-Italic", - baseWidths: _liberationsans_widths.LiberationSansItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansItalicMapping - }; - t["Arial-BoldItalicMT"] = t["Arial-BoldItalic"] = { - name: "LiberationSans-BoldItalic", - baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping - }; - t["Calibri-Regular"] = { - name: "LiberationSans-Regular", - factors: _calibri_factors.CalibriRegularFactors, - baseWidths: _liberationsans_widths.LiberationSansRegularWidths, - baseMapping: _liberationsans_widths.LiberationSansRegularMapping, - metrics: _calibri_factors.CalibriRegularMetrics - }; - t["Calibri-Bold"] = { - name: "LiberationSans-Bold", - factors: _calibri_factors.CalibriBoldFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldMapping, - metrics: _calibri_factors.CalibriBoldMetrics - }; - t["Calibri-Italic"] = { - name: "LiberationSans-Italic", - factors: _calibri_factors.CalibriItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansItalicMapping, - metrics: _calibri_factors.CalibriItalicMetrics - }; - t["Calibri-BoldItalic"] = { - name: "LiberationSans-BoldItalic", - factors: _calibri_factors.CalibriBoldItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, - metrics: _calibri_factors.CalibriBoldItalicMetrics - }; - t["Segoeui-Regular"] = { - name: "LiberationSans-Regular", - factors: _segoeui_factors.SegoeuiRegularFactors, - baseWidths: _liberationsans_widths.LiberationSansRegularWidths, - baseMapping: _liberationsans_widths.LiberationSansRegularMapping, - metrics: _segoeui_factors.SegoeuiRegularMetrics - }; - t["Segoeui-Bold"] = { - name: "LiberationSans-Bold", - factors: _segoeui_factors.SegoeuiBoldFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldMapping, - metrics: _segoeui_factors.SegoeuiBoldMetrics - }; - t["Segoeui-Italic"] = { - name: "LiberationSans-Italic", - factors: _segoeui_factors.SegoeuiItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansItalicMapping, - metrics: _segoeui_factors.SegoeuiItalicMetrics - }; - t["Segoeui-BoldItalic"] = { - name: "LiberationSans-BoldItalic", - factors: _segoeui_factors.SegoeuiBoldItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, - metrics: _segoeui_factors.SegoeuiBoldItalicMetrics - }; - t["Helvetica-Regular"] = t.Helvetica = { - name: "LiberationSans-Regular", - factors: _helvetica_factors.HelveticaRegularFactors, - baseWidths: _liberationsans_widths.LiberationSansRegularWidths, - baseMapping: _liberationsans_widths.LiberationSansRegularMapping, - metrics: _helvetica_factors.HelveticaRegularMetrics - }; - t["Helvetica-Bold"] = { - name: "LiberationSans-Bold", - factors: _helvetica_factors.HelveticaBoldFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldMapping, - metrics: _helvetica_factors.HelveticaBoldMetrics - }; - t["Helvetica-Italic"] = { - name: "LiberationSans-Italic", - factors: _helvetica_factors.HelveticaItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansItalicMapping, - metrics: _helvetica_factors.HelveticaItalicMetrics - }; - t["Helvetica-BoldItalic"] = { - name: "LiberationSans-BoldItalic", - factors: _helvetica_factors.HelveticaBoldItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, - metrics: _helvetica_factors.HelveticaBoldItalicMetrics - }; -}); -function getXfaFontName(name) { - const fontName = (0, _fonts_utils.normalizeFontName)(name); - const fontMap = getXFAFontMap(); - return fontMap[fontName]; -} -function getXfaFontWidths(name) { - const info = getXfaFontName(name); - if (!info) { - return null; - } - const { - baseWidths, - baseMapping, - factors - } = info; - const rescaledBaseWidths = !factors ? baseWidths : baseWidths.map((w, i) => w * factors[i]); - let currentCode = -2; - let currentArray; - const newWidths = []; - for (const [unicode, glyphIndex] of baseMapping.map((charUnicode, index) => [charUnicode, index]).sort(([unicode1], [unicode2]) => unicode1 - unicode2)) { - if (unicode === -1) { - continue; - } - if (unicode === currentCode + 1) { - currentArray.push(rescaledBaseWidths[glyphIndex]); - currentCode += 1; - } else { - currentCode = unicode; - currentArray = [rescaledBaseWidths[glyphIndex]]; - newWidths.push(unicode, currentArray); - } - } - return newWidths; -} -function getXfaFontDict(name) { - const widths = getXfaFontWidths(name); - const dict = new _primitives.Dict(null); - dict.set("BaseFont", _primitives.Name.get(name)); - dict.set("Type", _primitives.Name.get("Font")); - dict.set("Subtype", _primitives.Name.get("CIDFontType2")); - dict.set("Encoding", _primitives.Name.get("Identity-H")); - dict.set("CIDToGIDMap", _primitives.Name.get("Identity")); - dict.set("W", widths); - dict.set("FirstChar", widths[0]); - dict.set("LastChar", widths.at(-2) + widths.at(-1).length - 1); - const descriptor = new _primitives.Dict(null); - dict.set("FontDescriptor", descriptor); - const systemInfo = new _primitives.Dict(null); - systemInfo.set("Ordering", "Identity"); - systemInfo.set("Registry", "Adobe"); - systemInfo.set("Supplement", 0); - dict.set("CIDSystemInfo", systemInfo); - return dict; -} - -/***/ }), -/* 52 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.CalibriRegularMetrics = exports.CalibriRegularFactors = exports.CalibriItalicMetrics = exports.CalibriItalicFactors = exports.CalibriBoldMetrics = exports.CalibriBoldItalicMetrics = exports.CalibriBoldItalicFactors = exports.CalibriBoldFactors = void 0; -const CalibriBoldFactors = [1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.54657, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, 0.92138, 0.83908, 0.7762, 0.73293, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.9121, 0.86943, 0.79795, 0.88198, 0.77958, 0.70864, 0.81055, 0.90399, 0.88653, 0.96017, 0.82577, 0.77892, 0.78257, 0.97507, 1.54657, 0.97507, 0.85284, 0.89552, 0.90176, 0.88762, 0.8785, 0.75241, 0.8785, 0.90518, 0.95015, 0.77618, 0.8785, 0.88401, 0.91916, 0.86304, 0.88401, 0.91488, 0.8785, 0.8801, 0.8785, 0.8785, 0.91343, 0.7173, 1.04106, 0.8785, 0.85075, 0.95794, 0.82616, 0.85162, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.12401, 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539, 0.73293, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958, 0.95958, 0.88506, 0.9121, 0.86943, 0.86943, 0.86943, 0.86943, 0.86943, 0.85284, 0.87508, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795, 0.90807, 0.88762, 0.88762, 0.88762, 0.88762, 0.88762, 0.88762, 0.8715, 0.75241, 0.90518, 0.90518, 0.90518, 0.90518, 0.88401, 0.88401, 0.88401, 0.88401, 0.8785, 0.8785, 0.8801, 0.8801, 0.8801, 0.8801, 0.8801, 0.90747, 0.89049, 0.8785, 0.8785, 0.8785, 0.8785, 0.85162, 0.8785, 0.85162, 0.83908, 0.88762, 0.83908, 0.88762, 0.83908, 0.88762, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.87289, 0.83016, 0.88506, 0.93125, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.81921, 0.77618, 0.81921, 0.77618, 0.81921, 0.77618, 1, 1, 0.87356, 0.8785, 0.91075, 0.89608, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.76229, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.79468, 0.91926, 0.88175, 0.70823, 0.94903, 0.9121, 0.8785, 1, 1, 0.9121, 0.8785, 0.87802, 0.88656, 0.8785, 0.86943, 0.8801, 0.86943, 0.8801, 0.86943, 0.8801, 0.87402, 0.89291, 0.77958, 0.91343, 1, 1, 0.77958, 0.91343, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864, 0.7173, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.96017, 0.95794, 0.77892, 0.85162, 0.77892, 0.78257, 0.79492, 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.88762, 0.77539, 0.8715, 0.87508, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, 1, 1.15543, 0.70674, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.06303, 0.83908, 0.80352, 0.57184, 0.6965, 0.56289, 0.82001, 0.56029, 0.81235, 1.02988, 0.83908, 0.7762, 0.68156, 0.80367, 0.73133, 0.78257, 0.87356, 0.86943, 0.95958, 0.75727, 0.89019, 1.04924, 0.9121, 0.7648, 0.86943, 0.87356, 0.79795, 0.78275, 0.81055, 0.77892, 0.9762, 0.82577, 0.99819, 0.84896, 0.95958, 0.77892, 0.96108, 1.01407, 0.89049, 1.02988, 0.94211, 0.96108, 0.8936, 0.84021, 0.87842, 0.96399, 0.79109, 0.89049, 1.00813, 1.02988, 0.86077, 0.87445, 0.92099, 0.84723, 0.86513, 0.8801, 0.75638, 0.85714, 0.78216, 0.79586, 0.87965, 0.94211, 0.97747, 0.78287, 0.97926, 0.84971, 1.02988, 0.94211, 0.8801, 0.94211, 0.84971, 0.73133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90264, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90518, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90548, 1, 1, 1, 1, 1, 1, 0.96017, 0.95794, 0.96017, 0.95794, 0.96017, 0.95794, 0.77892, 0.85162, 1, 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.92794, 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71143, 1.06152, 1, 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.93835, 0.83406, 0.91133, 0.84107, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90527, 1.81055, 0.90527, 1.81055, 1.31006, 1.53711, 0.94434, 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.CalibriBoldFactors = CalibriBoldFactors; -const CalibriBoldMetrics = { - lineHeight: 1.2207, - lineGap: 0.2207 -}; -exports.CalibriBoldMetrics = CalibriBoldMetrics; -const CalibriBoldItalicFactors = [1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.56239, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, 0.92138, 0.83908, 0.7762, 0.71805, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.90872, 0.85938, 0.79795, 0.87068, 0.77958, 0.69766, 0.81055, 0.90399, 0.88653, 0.96068, 0.82577, 0.77892, 0.78257, 0.97507, 1.529, 0.97507, 0.85284, 0.89552, 0.90176, 0.94908, 0.86411, 0.74012, 0.86411, 0.88323, 0.95015, 0.86411, 0.86331, 0.88401, 0.91916, 0.86304, 0.88401, 0.9039, 0.86331, 0.86331, 0.86411, 0.86411, 0.90464, 0.70852, 1.04106, 0.86331, 0.84372, 0.95794, 0.82616, 0.84548, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.19129, 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539, 0.71805, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958, 0.95958, 0.88506, 0.90872, 0.85938, 0.85938, 0.85938, 0.85938, 0.85938, 0.85284, 0.87068, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795, 0.90807, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.85887, 0.74012, 0.88323, 0.88323, 0.88323, 0.88323, 0.88401, 0.88401, 0.88401, 0.88401, 0.8785, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.90747, 0.89049, 0.86331, 0.86331, 0.86331, 0.86331, 0.84548, 0.86411, 0.84548, 0.83908, 0.94908, 0.83908, 0.94908, 0.83908, 0.94908, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.87289, 0.79538, 0.88506, 0.92726, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.81921, 0.86411, 0.81921, 0.86411, 0.81921, 0.86411, 1, 1, 0.87356, 0.86331, 0.91075, 0.8777, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.76467, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.77312, 0.91926, 0.88175, 0.70823, 0.94903, 0.90872, 0.86331, 1, 1, 0.90872, 0.86331, 0.86906, 0.88116, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, 0.87402, 0.86549, 0.77958, 0.90464, 1, 1, 0.77958, 0.90464, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.96068, 0.95794, 0.77892, 0.84548, 0.77892, 0.78257, 0.79492, 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.94908, 0.77539, 0.85887, 0.87068, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, 1, 1.15543, 0.70088, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.48387, 0.83908, 0.80352, 0.57118, 0.6965, 0.56347, 0.79179, 0.55853, 0.80346, 1.02988, 0.83908, 0.7762, 0.67174, 0.86036, 0.73133, 0.78257, 0.87356, 0.86441, 0.95958, 0.75727, 0.89019, 1.04924, 0.90872, 0.74889, 0.85938, 0.87891, 0.79795, 0.7957, 0.81055, 0.77892, 0.97447, 0.82577, 0.97466, 0.87179, 0.95958, 0.77892, 0.94252, 0.95612, 0.8753, 1.02988, 0.92733, 0.94252, 0.87411, 0.84021, 0.8728, 0.95612, 0.74081, 0.8753, 1.02189, 1.02988, 0.84814, 0.87445, 0.91822, 0.84723, 0.85668, 0.86331, 0.81344, 0.87581, 0.76422, 0.82046, 0.96057, 0.92733, 0.99375, 0.78022, 0.95452, 0.86015, 1.02988, 0.92733, 0.86331, 0.92733, 0.86015, 0.73133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90631, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88323, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85174, 1, 1, 1, 1, 1, 1, 0.96068, 0.95794, 0.96068, 0.95794, 0.96068, 0.95794, 0.77892, 0.84548, 1, 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.89807, 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71094, 1.06152, 1, 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.92972, 0.83406, 0.91133, 0.83326, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90616, 1.81055, 0.90527, 1.81055, 1.3107, 1.53711, 0.94434, 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.CalibriBoldItalicFactors = CalibriBoldItalicFactors; -const CalibriBoldItalicMetrics = { - lineHeight: 1.2207, - lineGap: 0.2207 -}; -exports.CalibriBoldItalicMetrics = CalibriBoldItalicMetrics; -const CalibriItalicFactors = [1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39543, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071, 0.8675, 0.81552, 0.72346, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89249, 0.84118, 0.77452, 0.85374, 0.75186, 0.67789, 0.79776, 0.88844, 0.85066, 0.94309, 0.77818, 0.7306, 0.76659, 1.10369, 1.38313, 1.10369, 1.06139, 0.89552, 0.8739, 0.9245, 0.9245, 0.83203, 0.9245, 0.85865, 1.09842, 0.9245, 0.9245, 1.03297, 1.07692, 0.90918, 1.03297, 0.94959, 0.9245, 0.92274, 0.9245, 0.9245, 1.02933, 0.77832, 1.20562, 0.9245, 0.8916, 0.98986, 0.86621, 0.89453, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.16359, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, 0.72346, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, 0.90685, 0.86477, 0.89249, 0.84118, 0.84118, 0.84118, 0.84118, 0.84118, 0.85284, 0.84557, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, 0.86331, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.84843, 0.83203, 0.85865, 0.85865, 0.85865, 0.85865, 0.82601, 0.82601, 0.82601, 0.82601, 0.94469, 0.9245, 0.92274, 0.92274, 0.92274, 0.92274, 0.92274, 0.90747, 0.86651, 0.9245, 0.9245, 0.9245, 0.9245, 0.89453, 0.9245, 0.89453, 0.8675, 0.9245, 0.8675, 0.9245, 0.8675, 0.9245, 0.72346, 0.83203, 0.72346, 0.83203, 0.72346, 0.83203, 0.72346, 0.83203, 0.85193, 0.8875, 0.86477, 0.99034, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.81105, 0.9245, 0.81105, 0.9245, 0.81105, 0.9245, 1, 1, 0.86275, 0.9245, 0.90872, 0.93591, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77896, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032, 0.9375, 0.98156, 0.93407, 0.77261, 1.11429, 0.89249, 0.9245, 1, 1, 0.89249, 0.9245, 0.92534, 0.86698, 0.9245, 0.84118, 0.92274, 0.84118, 0.92274, 0.84118, 0.92274, 0.8667, 0.86291, 0.75186, 1.02933, 1, 1, 0.75186, 1.02933, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 1, 1, 0.79776, 0.97655, 0.79776, 1.23023, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.94309, 0.98986, 0.7306, 0.89453, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.9245, 0.76318, 0.84843, 0.84557, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, 0.67009, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387, 0.8675, 0.90861, 0.6192, 0.7363, 0.64824, 0.82411, 0.56321, 0.85696, 1.23516, 0.8675, 0.81552, 0.7286, 0.84134, 0.73206, 0.76659, 0.86275, 0.84369, 0.90685, 0.77892, 0.85871, 1.02638, 0.89249, 0.75828, 0.84118, 0.85984, 0.77452, 0.76466, 0.79776, 0.7306, 0.90782, 0.77818, 0.903, 0.87291, 0.90685, 0.7306, 0.99058, 1.03667, 0.94635, 1.23516, 0.9849, 0.99058, 0.92393, 0.8916, 0.942, 1.03667, 0.75026, 0.94635, 1.0297, 1.23516, 0.90918, 0.94048, 0.98217, 0.89746, 0.84153, 0.92274, 0.82507, 0.88832, 0.84438, 0.88178, 1.03525, 0.9849, 1.00225, 0.78086, 0.97248, 0.89404, 1.23516, 0.9849, 0.92274, 0.9849, 0.89404, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89693, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85865, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90933, 1, 1, 1, 1, 1, 1, 0.94309, 0.98986, 0.94309, 0.98986, 0.94309, 0.98986, 0.7306, 0.89453, 1, 1, 0.89552, 0.90527, 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, 0.89552, 0.89552, 1.42259, 0.68994, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, 1.4956, 2.01462, 0.97858, 0.82616, 0.91133, 0.83437, 0.91133, 1, 1, 1, 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90572, 1.81055, 0.90749, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, 0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, 0.85284, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.CalibriItalicFactors = CalibriItalicFactors; -const CalibriItalicMetrics = { - lineHeight: 1.2207, - lineGap: 0.2207 -}; -exports.CalibriItalicMetrics = CalibriItalicMetrics; -const CalibriRegularFactors = [1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39016, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071, 0.8675, 0.81552, 0.73834, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89385, 0.85122, 0.77452, 0.86503, 0.75186, 0.68887, 0.79776, 0.88844, 0.85066, 0.94258, 0.77818, 0.7306, 0.76659, 1.10369, 1.39016, 1.10369, 1.06139, 0.89552, 0.8739, 0.86128, 0.94469, 0.8457, 0.94469, 0.89464, 1.09842, 0.84636, 0.94469, 1.03297, 1.07692, 0.90918, 1.03297, 0.95897, 0.94469, 0.9482, 0.94469, 0.94469, 1.04692, 0.78223, 1.20562, 0.94469, 0.90332, 0.98986, 0.86621, 0.90527, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.08707, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, 0.73834, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, 0.90685, 0.86477, 0.89385, 0.85122, 0.85122, 0.85122, 0.85122, 0.85122, 0.85284, 0.85311, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, 0.86331, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.8693, 0.8457, 0.89464, 0.89464, 0.89464, 0.89464, 0.82601, 0.82601, 0.82601, 0.82601, 0.94469, 0.94469, 0.9482, 0.9482, 0.9482, 0.9482, 0.9482, 0.90747, 0.86651, 0.94469, 0.94469, 0.94469, 0.94469, 0.90527, 0.94469, 0.90527, 0.8675, 0.86128, 0.8675, 0.86128, 0.8675, 0.86128, 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457, 0.85193, 0.92454, 0.86477, 0.9921, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.81105, 0.84636, 0.81105, 0.84636, 0.81105, 0.84636, 1, 1, 0.86275, 0.94469, 0.90872, 0.95786, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77741, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032, 0.90452, 0.98156, 1.11842, 0.77261, 1.11429, 0.89385, 0.94469, 1, 1, 0.89385, 0.94469, 0.95877, 0.86901, 0.94469, 0.85122, 0.9482, 0.85122, 0.9482, 0.85122, 0.9482, 0.8667, 0.90016, 0.75186, 1.04692, 1, 1, 0.75186, 1.04692, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223, 1, 1, 0.79776, 0.92188, 0.79776, 1.23023, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.94258, 0.98986, 0.7306, 0.90527, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.86128, 0.76318, 0.8693, 0.85311, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, 0.67742, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387, 0.86686, 0.90861, 0.62267, 0.74359, 0.65649, 0.85498, 0.56963, 0.88254, 1.23516, 0.8675, 0.81552, 0.75443, 0.84503, 0.73206, 0.76659, 0.86275, 0.85122, 0.90685, 0.77892, 0.85746, 1.02638, 0.89385, 0.75657, 0.85122, 0.86275, 0.77452, 0.74171, 0.79776, 0.7306, 0.95165, 0.77818, 0.89772, 0.88831, 0.90685, 0.7306, 0.98142, 1.02191, 0.96576, 1.23516, 0.99018, 0.98142, 0.9236, 0.89258, 0.94035, 1.02191, 0.78848, 0.96576, 0.9561, 1.23516, 0.90918, 0.92578, 0.95424, 0.89746, 0.83969, 0.9482, 0.80113, 0.89442, 0.85208, 0.86155, 0.98022, 0.99018, 1.00452, 0.81209, 0.99247, 0.89181, 1.23516, 0.99018, 0.9482, 0.99018, 0.89181, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88844, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89464, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96766, 1, 1, 1, 1, 1, 1, 0.94258, 0.98986, 0.94258, 0.98986, 0.94258, 0.98986, 0.7306, 0.90527, 1, 1, 0.89552, 0.90527, 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, 0.89552, 0.89552, 1.42259, 0.69043, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, 1.4956, 2.01462, 0.99331, 0.82616, 0.91133, 0.84286, 0.91133, 1, 1, 1, 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90527, 1.81055, 0.90527, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, 0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1.07185, 0.99413, 0.96334, 1.08065, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.CalibriRegularFactors = CalibriRegularFactors; -const CalibriRegularMetrics = { - lineHeight: 1.2207, - lineGap: 0.2207 -}; -exports.CalibriRegularMetrics = CalibriRegularMetrics; - -/***/ }), -/* 53 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.HelveticaRegularMetrics = exports.HelveticaRegularFactors = exports.HelveticaItalicMetrics = exports.HelveticaItalicFactors = exports.HelveticaBoldMetrics = exports.HelveticaBoldItalicMetrics = exports.HelveticaBoldItalicFactors = exports.HelveticaBoldFactors = void 0; -const HelveticaBoldFactors = [0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.03374, 0.99977, 1.00026, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.00042, 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.03828, 1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 1.00034, 0.99977, 1, 0.99997, 1.00026, 1.00078, 1.00036, 0.99973, 1.00013, 1.0006, 0.99977, 0.99977, 0.99988, 0.85148, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 1.00069, 1.00022, 0.99977, 1.00001, 0.99984, 1.00026, 1.00001, 1.00024, 1.00001, 0.9999, 1, 1.0006, 1.00001, 1.00041, 0.99962, 1.00026, 1.0006, 0.99995, 1.00041, 0.99942, 0.99973, 0.99927, 1.00082, 0.99902, 1.00026, 1.00087, 1.0006, 1.00069, 0.99973, 0.99867, 0.99973, 0.9993, 1.00026, 1.00049, 1.00056, 1, 0.99988, 0.99935, 0.99995, 0.99954, 1.00055, 0.99945, 1.00032, 1.0006, 0.99995, 1.00026, 0.99995, 1.00032, 1.00001, 1.00008, 0.99971, 1.00019, 0.9994, 1.00001, 1.0006, 1.00044, 0.99973, 1.00023, 1.00047, 1, 0.99942, 0.99561, 0.99989, 1.00035, 0.99977, 1.00035, 0.99977, 1.00019, 0.99944, 1.00001, 1.00021, 0.99926, 1.00035, 1.00035, 0.99942, 1.00048, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.99989, 1.00057, 1.00001, 0.99936, 1.00052, 1.00012, 0.99996, 1.00043, 1, 1.00035, 0.9994, 0.99976, 1.00035, 0.99973, 1.00052, 1.00041, 1.00119, 1.00037, 0.99973, 1.00002, 0.99986, 1.00041, 1.00041, 0.99902, 0.9996, 1.00034, 0.99999, 1.00026, 0.99999, 1.00026, 0.99973, 1.00052, 0.99973, 1, 0.99973, 1.00041, 1.00075, 0.9994, 1.0003, 0.99999, 1, 1.00041, 0.99955, 1, 0.99915, 0.99973, 0.99973, 1.00026, 1.00119, 0.99955, 0.99973, 1.0006, 0.99911, 1.0006, 1.00026, 0.99972, 1.00026, 0.99902, 1.00041, 0.99973, 0.99999, 1, 1, 1.00038, 1.0005, 1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1, 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973, 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 1.00047, 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.HelveticaBoldFactors = HelveticaBoldFactors; -const HelveticaBoldMetrics = { - lineHeight: 1.2, - lineGap: 0.2 -}; -exports.HelveticaBoldMetrics = HelveticaBoldMetrics; -const HelveticaBoldItalicFactors = [0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.0044, 0.99977, 1.00026, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99971, 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.01011, 1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99977, 1, 1, 1.00026, 0.99969, 0.99972, 0.99981, 0.9998, 1.0006, 0.99977, 0.99977, 1.00022, 0.91155, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 0.99966, 1.00022, 1.00032, 1.00001, 0.99944, 1.00026, 1.00001, 0.99968, 1.00001, 1.00047, 1, 1.0006, 1.00001, 0.99981, 1.00101, 1.00026, 1.0006, 0.99948, 0.99981, 1.00064, 0.99973, 0.99942, 1.00101, 1.00061, 1.00026, 1.00069, 1.0006, 1.00014, 0.99973, 1.01322, 0.99973, 1.00065, 1.00026, 1.00012, 0.99923, 1, 1.00064, 1.00076, 0.99948, 1.00055, 1.00063, 1.00007, 0.99943, 1.0006, 0.99948, 1.00026, 0.99948, 0.99943, 1.00001, 1.00001, 1.00029, 1.00038, 1.00035, 1.00001, 1.0006, 1.0006, 0.99973, 0.99978, 1.00001, 1.00057, 0.99989, 0.99967, 0.99964, 0.99967, 0.99977, 0.99999, 0.99977, 1.00038, 0.99977, 1.00001, 0.99973, 1.00066, 0.99967, 0.99967, 1.00041, 0.99998, 0.99999, 0.99977, 1.00022, 0.99967, 1.00001, 0.99977, 1.00026, 0.99964, 1.00031, 1.00001, 0.99999, 0.99999, 1, 1.00023, 1, 1, 0.99999, 1.00035, 1.00001, 0.99999, 0.99973, 0.99977, 0.99999, 1.00058, 0.99973, 0.99973, 0.99955, 0.9995, 1.00026, 1.00026, 1.00032, 0.99989, 1.00034, 0.99999, 1.00026, 1.00026, 1.00026, 0.99973, 0.45998, 0.99973, 1.00026, 0.99973, 1.00001, 0.99999, 0.99982, 0.99994, 0.99996, 1, 1.00042, 1.00044, 1.00029, 1.00023, 0.99973, 0.99973, 1.00026, 0.99949, 1.00002, 0.99973, 1.0006, 1.0006, 1.0006, 0.99975, 1.00026, 1.00026, 1.00032, 0.98685, 0.99973, 1.00026, 1, 1, 0.99966, 1.00044, 1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1, 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973, 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1, 0.99973, 0.99971, 0.99978, 1, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00098, 1, 1, 1, 1.00049, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.HelveticaBoldItalicFactors = HelveticaBoldItalicFactors; -const HelveticaBoldItalicMetrics = { - lineHeight: 1.35, - lineGap: 0.2 -}; -exports.HelveticaBoldItalicMetrics = HelveticaBoldItalicMetrics; -const HelveticaItalicFactors = [0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.0288, 0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 0.99946, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, 1.06311, 0.99973, 1.00024, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00041, 0.9998, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.89547, 1.00026, 1.0006, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 1.00001, 1, 1.00054, 0.99977, 1.00084, 1.00007, 0.99973, 1.00013, 0.99924, 1.00001, 1.00001, 0.99945, 0.91221, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 1.00001, 1.00001, 0.99999, 0.99977, 0.99933, 1.00022, 1.00054, 1.00001, 1.00065, 1.00026, 1.00001, 1.0001, 1.00001, 1.00052, 1, 1.0006, 1.00001, 0.99945, 0.99897, 0.99968, 0.99924, 1.00036, 0.99945, 0.99949, 1, 1.0006, 0.99897, 0.99918, 0.99968, 0.99911, 0.99924, 1, 0.99962, 1.01487, 1, 1.0005, 0.99973, 1.00012, 1.00043, 1, 0.99995, 0.99994, 1.00036, 0.99947, 1.00019, 1.00063, 1.00025, 0.99924, 1.00036, 0.99973, 1.00036, 1.00025, 1.00001, 1.00001, 1.00027, 1.0001, 1.00068, 1.00001, 1.0006, 1.0006, 1, 1.00008, 0.99957, 0.99972, 0.9994, 0.99954, 0.99975, 1.00051, 1.00001, 1.00019, 1.00001, 1.0001, 0.99986, 1.00001, 1.00001, 1.00038, 0.99954, 0.99954, 0.9994, 1.00066, 0.99999, 0.99977, 1.00022, 1.00054, 1.00001, 0.99977, 1.00026, 0.99975, 1.0001, 1.00001, 0.99993, 0.9995, 0.99955, 1.00016, 0.99978, 0.99974, 1.00019, 1.00022, 0.99955, 1.00053, 0.99973, 1.00089, 1.00005, 0.99967, 1.00048, 0.99973, 1.00002, 1.00034, 0.99973, 0.99973, 0.99964, 1.00006, 1.00066, 0.99947, 0.99973, 0.98894, 0.99973, 1, 0.44898, 1, 0.99946, 1, 1.00039, 1.00082, 0.99991, 0.99991, 0.99985, 1.00022, 1.00023, 1.00061, 1.00006, 0.99966, 0.99973, 0.99973, 0.99973, 1.00019, 1.0008, 1, 0.99924, 0.99924, 0.99924, 0.99983, 1.00044, 0.99973, 0.99964, 0.98332, 1, 0.99973, 1, 1, 0.99962, 0.99895, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, 0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 1.00423, 0.99925, 0.99999, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00049, 1, 1.00245, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 1.00003, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.HelveticaItalicFactors = HelveticaItalicFactors; -const HelveticaItalicMetrics = { - lineHeight: 1.35, - lineGap: 0.2 -}; -exports.HelveticaItalicMetrics = HelveticaItalicMetrics; -const HelveticaRegularFactors = [0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.04596, 0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 1.00019, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, 1.02572, 0.99973, 1.00005, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99999, 0.9998, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.84533, 1.00026, 1.0006, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99928, 1, 0.99977, 1.00013, 1.00055, 0.99947, 0.99945, 0.99941, 0.99924, 1.00001, 1.00001, 1.0004, 0.91621, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 1.00001, 1.00005, 0.99999, 0.99977, 1.00015, 1.00022, 0.99977, 1.00001, 0.99973, 1.00026, 1.00001, 1.00019, 1.00001, 0.99946, 1, 1.0006, 1.00001, 0.99978, 1.00045, 0.99973, 0.99924, 1.00023, 0.99978, 0.99966, 1, 1.00065, 1.00045, 1.00019, 0.99973, 0.99973, 0.99924, 1, 1, 0.96499, 1, 1.00055, 0.99973, 1.00008, 1.00027, 1, 0.9997, 0.99995, 1.00023, 0.99933, 1.00019, 1.00015, 1.00031, 0.99924, 1.00023, 0.99973, 1.00023, 1.00031, 1.00001, 0.99928, 1.00029, 1.00092, 1.00035, 1.00001, 1.0006, 1.0006, 1, 0.99988, 0.99975, 1, 1.00082, 0.99561, 0.9996, 1.00035, 1.00001, 0.99962, 1.00001, 1.00092, 0.99964, 1.00001, 0.99963, 0.99999, 1.00035, 1.00035, 1.00082, 0.99962, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.9996, 0.99967, 1.00001, 1.00034, 1.00074, 1.00054, 1.00053, 1.00063, 0.99971, 0.99962, 1.00035, 0.99975, 0.99977, 0.99973, 1.00043, 0.99953, 1.0007, 0.99915, 0.99973, 1.00008, 0.99892, 1.00073, 1.00073, 1.00114, 0.99915, 1.00073, 0.99955, 0.99973, 1.00092, 0.99973, 1, 0.99998, 1, 1.0003, 1, 1.00043, 1.00001, 0.99969, 1.0003, 1, 1.00035, 1.00001, 0.9995, 1, 1.00092, 0.99973, 0.99973, 0.99973, 1.0007, 0.9995, 1, 0.99924, 1.0006, 0.99924, 0.99972, 1.00062, 0.99973, 1.00114, 1.00073, 1, 0.99955, 1, 1, 1.00047, 0.99968, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, 0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 0.99925, 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.HelveticaRegularFactors = HelveticaRegularFactors; -const HelveticaRegularMetrics = { - lineHeight: 1.2, - lineGap: 0.2 -}; -exports.HelveticaRegularMetrics = HelveticaRegularMetrics; - -/***/ }), -/* 54 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.LiberationSansRegularWidths = exports.LiberationSansRegularMapping = exports.LiberationSansItalicWidths = exports.LiberationSansItalicMapping = exports.LiberationSansBoldWidths = exports.LiberationSansBoldMapping = exports.LiberationSansBoldItalicWidths = exports.LiberationSansBoldItalicMapping = void 0; -const LiberationSansBoldWidths = [365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 719, 722, 611, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 785, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 385, 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778, 611, 778, 611, 1000, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611, 500, 611, 500, 278, 556, 722, 556, 1000, 889, 778, 611, 667, 556, 611, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 465, 722, 333, 853, 906, 474, 825, 927, 838, 278, 722, 722, 601, 719, 667, 611, 722, 778, 278, 722, 667, 833, 722, 644, 778, 722, 667, 600, 611, 667, 821, 667, 809, 802, 278, 667, 615, 451, 611, 278, 582, 615, 610, 556, 606, 475, 460, 611, 541, 278, 558, 556, 612, 556, 445, 611, 766, 619, 520, 684, 446, 582, 715, 576, 753, 845, 278, 582, 611, 582, 845, 667, 669, 885, 567, 711, 667, 278, 276, 556, 1094, 1062, 875, 610, 722, 622, 719, 722, 719, 722, 567, 712, 667, 904, 626, 719, 719, 610, 702, 833, 722, 778, 719, 667, 722, 611, 622, 854, 667, 730, 703, 1005, 1019, 870, 979, 719, 711, 1031, 719, 556, 618, 615, 417, 635, 556, 709, 497, 615, 615, 500, 635, 740, 604, 611, 604, 611, 556, 490, 556, 875, 556, 615, 581, 833, 844, 729, 854, 615, 552, 854, 583, 556, 556, 611, 417, 552, 556, 278, 281, 278, 969, 906, 611, 500, 615, 556, 604, 778, 611, 487, 447, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1000, 1000, 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1000, 1000, 240, 479, 333, 333, 604, 333, 167, 396, 556, 556, 1094, 556, 885, 489, 1115, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333, 333, 333, 333, 333, 333]; -exports.LiberationSansBoldWidths = LiberationSansBoldWidths; -const LiberationSansBoldMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; -exports.LiberationSansBoldMapping = LiberationSansBoldMapping; -const LiberationSansBoldItalicWidths = [365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 740, 722, 611, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 782, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 396, 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778, 611, 778, 611, 1000, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611, 500, 611, 500, 278, 556, 722, 556, 1000, 889, 778, 611, 667, 556, 611, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 722, 333, 854, 906, 473, 844, 930, 847, 278, 722, 722, 610, 671, 667, 611, 722, 778, 278, 722, 667, 833, 722, 657, 778, 718, 667, 590, 611, 667, 822, 667, 829, 781, 278, 667, 620, 479, 611, 278, 591, 620, 621, 556, 610, 479, 492, 611, 558, 278, 566, 556, 603, 556, 450, 611, 712, 605, 532, 664, 409, 591, 704, 578, 773, 834, 278, 591, 611, 591, 834, 667, 667, 886, 614, 719, 667, 278, 278, 556, 1094, 1042, 854, 622, 719, 677, 719, 722, 708, 722, 614, 722, 667, 927, 643, 719, 719, 615, 687, 833, 722, 778, 719, 667, 722, 611, 677, 781, 667, 729, 708, 979, 989, 854, 1000, 708, 719, 1042, 729, 556, 619, 604, 534, 618, 556, 736, 510, 611, 611, 507, 622, 740, 604, 611, 611, 611, 556, 889, 556, 885, 556, 646, 583, 889, 935, 707, 854, 594, 552, 865, 589, 556, 556, 611, 469, 563, 556, 278, 278, 278, 969, 906, 611, 507, 619, 556, 611, 778, 611, 575, 467, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1000, 1000, 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1000, 1000, 240, 479, 333, 333, 604, 333, 167, 396, 556, 556, 1104, 556, 885, 516, 1146, 1000, 768, 600, 834, 834, 834, 834, 999, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333, 333, 333, 333, 333, 333]; -exports.LiberationSansBoldItalicWidths = LiberationSansBoldItalicWidths; -const LiberationSansBoldItalicMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; -exports.LiberationSansBoldItalicMapping = LiberationSansBoldItalicMapping; -const LiberationSansItalicWidths = [365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 625, 722, 556, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278, 278, 733, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 281, 556, 400, 556, 222, 722, 556, 722, 556, 722, 556, 615, 723, 556, 778, 556, 778, 556, 778, 556, 1000, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500, 667, 500, 667, 500, 611, 278, 611, 354, 611, 278, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611, 500, 611, 500, 222, 556, 667, 556, 1000, 889, 778, 611, 667, 500, 611, 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 789, 846, 389, 794, 865, 775, 222, 667, 667, 570, 671, 667, 611, 722, 778, 278, 667, 667, 833, 722, 648, 778, 725, 667, 600, 611, 667, 837, 667, 831, 761, 278, 667, 570, 439, 555, 222, 550, 570, 571, 500, 556, 439, 463, 555, 542, 222, 500, 492, 548, 500, 447, 556, 670, 573, 486, 603, 374, 550, 652, 546, 728, 779, 222, 550, 556, 550, 779, 667, 667, 843, 544, 708, 667, 278, 278, 500, 1066, 982, 844, 589, 715, 639, 724, 667, 651, 667, 544, 704, 667, 917, 614, 715, 715, 589, 686, 833, 722, 778, 725, 667, 722, 611, 639, 795, 667, 727, 673, 920, 923, 805, 886, 651, 694, 1022, 682, 556, 562, 522, 493, 553, 556, 688, 465, 556, 556, 472, 564, 686, 550, 556, 556, 556, 500, 833, 500, 835, 500, 572, 518, 830, 851, 621, 736, 526, 492, 752, 534, 556, 556, 556, 378, 496, 500, 222, 222, 222, 910, 828, 556, 472, 565, 500, 556, 778, 556, 492, 339, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1000, 1000, 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1000, 1000, 188, 354, 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1083, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 998, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 719, 274, 549, 549, 584, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324, 324, 316, 328, 398, 285]; -exports.LiberationSansItalicWidths = LiberationSansItalicWidths; -const LiberationSansItalicMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; -exports.LiberationSansItalicMapping = LiberationSansItalicMapping; -const LiberationSansRegularWidths = [365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 615, 722, 556, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278, 278, 735, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 292, 556, 334, 556, 222, 722, 556, 722, 556, 722, 556, 604, 723, 556, 778, 556, 778, 556, 778, 556, 1000, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500, 667, 500, 667, 500, 611, 278, 611, 375, 611, 278, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611, 500, 611, 500, 222, 556, 667, 556, 1000, 889, 778, 611, 667, 500, 611, 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 784, 838, 384, 774, 855, 752, 222, 667, 667, 551, 668, 667, 611, 722, 778, 278, 667, 668, 833, 722, 650, 778, 722, 667, 618, 611, 667, 798, 667, 835, 748, 278, 667, 578, 446, 556, 222, 547, 578, 575, 500, 557, 446, 441, 556, 556, 222, 500, 500, 576, 500, 448, 556, 690, 569, 482, 617, 395, 547, 648, 525, 713, 781, 222, 547, 556, 547, 781, 667, 667, 865, 542, 719, 667, 278, 278, 500, 1057, 1010, 854, 583, 722, 635, 719, 667, 656, 667, 542, 677, 667, 923, 604, 719, 719, 583, 656, 833, 722, 778, 719, 667, 722, 611, 635, 760, 667, 740, 667, 917, 938, 792, 885, 656, 719, 1010, 722, 556, 573, 531, 365, 583, 556, 669, 458, 559, 559, 438, 583, 688, 552, 556, 542, 556, 500, 458, 500, 823, 500, 573, 521, 802, 823, 625, 719, 521, 510, 750, 542, 556, 556, 556, 365, 510, 500, 222, 278, 222, 906, 812, 556, 438, 559, 500, 552, 778, 556, 489, 411, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1000, 1000, 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1000, 1000, 188, 354, 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1073, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 719, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324, 324, 316, 328, 398, 285]; -exports.LiberationSansRegularWidths = LiberationSansRegularWidths; -const LiberationSansRegularMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; -exports.LiberationSansRegularMapping = LiberationSansRegularMapping; - -/***/ }), -/* 55 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.MyriadProRegularMetrics = exports.MyriadProRegularFactors = exports.MyriadProItalicMetrics = exports.MyriadProItalicFactors = exports.MyriadProBoldMetrics = exports.MyriadProBoldItalicMetrics = exports.MyriadProBoldItalicFactors = exports.MyriadProBoldFactors = void 0; -const MyriadProBoldFactors = [1.36898, 1, 1, 0.72706, 0.80479, 0.83734, 0.98894, 0.99793, 0.9897, 0.93884, 0.86209, 0.94292, 0.94292, 1.16661, 1.02058, 0.93582, 0.96694, 0.93582, 1.19137, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058, 0.72851, 0.78966, 0.90838, 0.83637, 0.82391, 0.96376, 0.80061, 0.86275, 0.8768, 0.95407, 1.0258, 0.73901, 0.85022, 0.83655, 1.0156, 0.95546, 0.92179, 0.87107, 0.92179, 0.82114, 0.8096, 0.89713, 0.94438, 0.95353, 0.94083, 0.91905, 0.90406, 0.9446, 0.94292, 1.18777, 0.94292, 1.02058, 0.89903, 0.90088, 0.94938, 0.97898, 0.81093, 0.97571, 0.94938, 1.024, 0.9577, 0.95933, 0.98621, 1.0474, 0.97455, 0.98981, 0.9672, 0.95933, 0.9446, 0.97898, 0.97407, 0.97646, 0.78036, 1.10208, 0.95442, 0.95298, 0.97579, 0.9332, 0.94039, 0.938, 0.80687, 1.01149, 0.80687, 1.02058, 0.80479, 0.99793, 0.99793, 0.99793, 0.99793, 1.01149, 1.00872, 0.90088, 0.91882, 1.0213, 0.8361, 1.02058, 0.62295, 0.54324, 0.89022, 1.08595, 1, 1, 0.90088, 1, 0.97455, 0.93582, 0.90088, 1, 1.05686, 0.8361, 0.99642, 0.99642, 0.99642, 0.72851, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.868, 0.82391, 0.80061, 0.80061, 0.80061, 0.80061, 1.0258, 1.0258, 1.0258, 1.0258, 0.97484, 0.95546, 0.92179, 0.92179, 0.92179, 0.92179, 0.92179, 1.02058, 0.92179, 0.94438, 0.94438, 0.94438, 0.94438, 0.90406, 0.86958, 0.98225, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.9031, 0.81093, 0.94938, 0.94938, 0.94938, 0.94938, 0.98621, 0.98621, 0.98621, 0.98621, 0.93969, 0.95933, 0.9446, 0.9446, 0.9446, 0.9446, 0.9446, 1.08595, 0.9446, 0.95442, 0.95442, 0.95442, 0.95442, 0.94039, 0.97898, 0.94039, 0.90838, 0.94938, 0.90838, 0.94938, 0.90838, 0.94938, 0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.96376, 0.84313, 0.97484, 0.97571, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.8768, 0.9577, 0.8768, 0.9577, 0.8768, 0.9577, 1, 1, 0.95407, 0.95933, 0.97069, 0.95933, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 0.887, 1.01591, 0.73901, 1.0474, 1, 1, 0.97455, 0.83655, 0.98981, 1, 1, 0.83655, 0.73977, 0.83655, 0.73903, 0.84638, 1.033, 0.95546, 0.95933, 1, 1, 0.95546, 0.95933, 0.8271, 0.95417, 0.95933, 0.92179, 0.9446, 0.92179, 0.9446, 0.92179, 0.9446, 0.936, 0.91964, 0.82114, 0.97646, 1, 1, 0.82114, 0.97646, 0.8096, 0.78036, 0.8096, 0.78036, 1, 1, 0.8096, 0.78036, 1, 1, 0.89713, 0.77452, 0.89713, 1.10208, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94083, 0.97579, 0.90406, 0.94039, 0.90406, 0.9446, 0.938, 0.9446, 0.938, 0.9446, 0.938, 1, 0.99793, 0.90838, 0.94938, 0.868, 0.9031, 0.92179, 0.9446, 1, 1, 0.89713, 1.10208, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90989, 0.9358, 0.91945, 0.83181, 0.75261, 0.87992, 0.82976, 0.96034, 0.83689, 0.97268, 1.0078, 0.90838, 0.83637, 0.8019, 0.90157, 0.80061, 0.9446, 0.95407, 0.92436, 1.0258, 0.85022, 0.97153, 1.0156, 0.95546, 0.89192, 0.92179, 0.92361, 0.87107, 0.96318, 0.89713, 0.93704, 0.95638, 0.91905, 0.91709, 0.92796, 1.0258, 0.93704, 0.94836, 1.0373, 0.95933, 1.0078, 0.95871, 0.94836, 0.96174, 0.92601, 0.9498, 0.98607, 0.95776, 0.95933, 1.05453, 1.0078, 0.98275, 0.9314, 0.95617, 0.91701, 1.05993, 0.9446, 0.78367, 0.9553, 1, 0.86832, 1.0128, 0.95871, 0.99394, 0.87548, 0.96361, 0.86774, 1.0078, 0.95871, 0.9446, 0.95871, 0.86774, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.94083, 0.97579, 0.94083, 0.97579, 0.94083, 0.97579, 0.90406, 0.94039, 0.96694, 1, 0.89903, 1, 1, 1, 0.93582, 0.93582, 0.93582, 1, 0.908, 0.908, 0.918, 0.94219, 0.94219, 0.96544, 1, 1.285, 1, 1, 0.81079, 0.81079, 1, 1, 0.74854, 1, 1, 1, 1, 0.99793, 1, 1, 1, 0.65, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.17173, 1, 0.80535, 0.76169, 1.02058, 1.0732, 1.05486, 1, 1, 1.30692, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.16161, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.MyriadProBoldFactors = MyriadProBoldFactors; -const MyriadProBoldMetrics = { - lineHeight: 1.2, - lineGap: 0.2 -}; -exports.MyriadProBoldMetrics = MyriadProBoldMetrics; -const MyriadProBoldItalicFactors = [1.36898, 1, 1, 0.66227, 0.80779, 0.81625, 0.97276, 0.97276, 0.97733, 0.92222, 0.83266, 0.94292, 0.94292, 1.16148, 1.02058, 0.93582, 0.96694, 0.93582, 1.17337, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058, 0.71541, 0.76813, 0.85576, 0.80591, 0.80729, 0.94299, 0.77512, 0.83655, 0.86523, 0.92222, 0.98621, 0.71743, 0.81698, 0.79726, 0.98558, 0.92222, 0.90637, 0.83809, 0.90637, 0.80729, 0.76463, 0.86275, 0.90699, 0.91605, 0.9154, 0.85308, 0.85458, 0.90531, 0.94292, 1.21296, 0.94292, 1.02058, 0.89903, 1.18616, 0.99613, 0.91677, 0.78216, 0.91677, 0.90083, 0.98796, 0.9135, 0.92168, 0.95381, 0.98981, 0.95298, 0.95381, 0.93459, 0.92168, 0.91513, 0.92004, 0.91677, 0.95077, 0.748, 1.04502, 0.91677, 0.92061, 0.94236, 0.89544, 0.89364, 0.9, 0.80687, 0.8578, 0.80687, 1.02058, 0.80779, 0.97276, 0.97276, 0.97276, 0.97276, 0.8578, 0.99973, 1.18616, 0.91339, 1.08074, 0.82891, 1.02058, 0.55509, 0.71526, 0.89022, 1.08595, 1, 1, 1.18616, 1, 0.96736, 0.93582, 1.18616, 1, 1.04864, 0.82711, 0.99043, 0.99043, 0.99043, 0.71541, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.845, 0.80729, 0.77512, 0.77512, 0.77512, 0.77512, 0.98621, 0.98621, 0.98621, 0.98621, 0.95961, 0.92222, 0.90637, 0.90637, 0.90637, 0.90637, 0.90637, 1.02058, 0.90251, 0.90699, 0.90699, 0.90699, 0.90699, 0.85458, 0.83659, 0.94951, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.85811, 0.78216, 0.90083, 0.90083, 0.90083, 0.90083, 0.95381, 0.95381, 0.95381, 0.95381, 0.9135, 0.92168, 0.91513, 0.91513, 0.91513, 0.91513, 0.91513, 1.08595, 0.91677, 0.91677, 0.91677, 0.91677, 0.91677, 0.89364, 0.92332, 0.89364, 0.85576, 0.99613, 0.85576, 0.99613, 0.85576, 0.99613, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.94299, 0.76783, 0.95961, 0.91677, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.86523, 0.9135, 0.86523, 0.9135, 0.86523, 0.9135, 1, 1, 0.92222, 0.92168, 0.92222, 0.92168, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.86036, 0.97096, 0.71743, 0.98981, 1, 1, 0.95298, 0.79726, 0.95381, 1, 1, 0.79726, 0.6894, 0.79726, 0.74321, 0.81691, 1.0006, 0.92222, 0.92168, 1, 1, 0.92222, 0.92168, 0.79464, 0.92098, 0.92168, 0.90637, 0.91513, 0.90637, 0.91513, 0.90637, 0.91513, 0.909, 0.87514, 0.80729, 0.95077, 1, 1, 0.80729, 0.95077, 0.76463, 0.748, 0.76463, 0.748, 1, 1, 0.76463, 0.748, 1, 1, 0.86275, 0.72651, 0.86275, 1.04502, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.9154, 0.94236, 0.85458, 0.89364, 0.85458, 0.90531, 0.9, 0.90531, 0.9, 0.90531, 0.9, 1, 0.97276, 0.85576, 0.99613, 0.845, 0.85811, 0.90251, 0.91677, 1, 1, 0.86275, 1.04502, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.00899, 1.30628, 0.85576, 0.80178, 0.66862, 0.7927, 0.69323, 0.88127, 0.72459, 0.89711, 0.95381, 0.85576, 0.80591, 0.7805, 0.94729, 0.77512, 0.90531, 0.92222, 0.90637, 0.98621, 0.81698, 0.92655, 0.98558, 0.92222, 0.85359, 0.90637, 0.90976, 0.83809, 0.94523, 0.86275, 0.83509, 0.93157, 0.85308, 0.83392, 0.92346, 0.98621, 0.83509, 0.92886, 0.91324, 0.92168, 0.95381, 0.90646, 0.92886, 0.90557, 0.86847, 0.90276, 0.91324, 0.86842, 0.92168, 0.99531, 0.95381, 0.9224, 0.85408, 0.92699, 0.86847, 1.0051, 0.91513, 0.80487, 0.93481, 1, 0.88159, 1.05214, 0.90646, 0.97355, 0.81539, 0.89398, 0.85923, 0.95381, 0.90646, 0.91513, 0.90646, 0.85923, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9154, 0.94236, 0.9154, 0.94236, 0.9154, 0.94236, 0.85458, 0.89364, 0.96694, 1, 0.89903, 1, 1, 1, 0.91782, 0.91782, 0.91782, 1, 0.896, 0.896, 0.896, 0.9332, 0.9332, 0.95973, 1, 1.26, 1, 1, 0.80479, 0.80178, 1, 1, 0.85633, 1, 1, 1, 1, 0.97276, 1, 1, 1, 0.698, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.14542, 1, 0.79199, 0.78694, 1.02058, 1.03493, 1.05486, 1, 1, 1.23026, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.20006, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.MyriadProBoldItalicFactors = MyriadProBoldItalicFactors; -const MyriadProBoldItalicMetrics = { - lineHeight: 1.2, - lineGap: 0.2 -}; -exports.MyriadProBoldItalicMetrics = MyriadProBoldItalicMetrics; -const MyriadProItalicFactors = [1.36898, 1, 1, 0.65507, 0.84943, 0.85639, 0.88465, 0.88465, 0.86936, 0.88307, 0.86948, 0.85283, 0.85283, 1.06383, 1.02058, 0.75945, 0.9219, 0.75945, 1.17337, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.75945, 0.75945, 1.02058, 1.02058, 1.02058, 0.69046, 0.70926, 0.85158, 0.77812, 0.76852, 0.89591, 0.70466, 0.76125, 0.80094, 0.86822, 0.83864, 0.728, 0.77212, 0.79475, 0.93637, 0.87514, 0.8588, 0.76013, 0.8588, 0.72421, 0.69866, 0.77598, 0.85991, 0.80811, 0.87832, 0.78112, 0.77512, 0.8562, 1.0222, 1.18417, 1.0222, 1.27014, 0.89903, 1.15012, 0.93859, 0.94399, 0.846, 0.94399, 0.81453, 1.0186, 0.94219, 0.96017, 1.03075, 1.02175, 0.912, 1.03075, 0.96998, 0.96017, 0.93859, 0.94399, 0.94399, 0.95493, 0.746, 1.12658, 0.94578, 0.91, 0.979, 0.882, 0.882, 0.83, 0.85034, 0.83537, 0.85034, 1.02058, 0.70869, 0.88465, 0.88465, 0.88465, 0.88465, 0.83537, 0.90083, 1.15012, 0.9161, 0.94565, 0.73541, 1.02058, 0.53609, 0.69353, 0.79519, 1.08595, 1, 1, 1.15012, 1, 0.91974, 0.75945, 1.15012, 1, 0.9446, 0.73361, 0.9005, 0.9005, 0.9005, 0.62864, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.773, 0.76852, 0.70466, 0.70466, 0.70466, 0.70466, 0.83864, 0.83864, 0.83864, 0.83864, 0.90561, 0.87514, 0.8588, 0.8588, 0.8588, 0.8588, 0.8588, 1.02058, 0.85751, 0.85991, 0.85991, 0.85991, 0.85991, 0.77512, 0.76013, 0.88075, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.8075, 0.846, 0.81453, 0.81453, 0.81453, 0.81453, 0.82424, 0.82424, 0.82424, 0.82424, 0.9278, 0.96017, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 1.08595, 0.8562, 0.94578, 0.94578, 0.94578, 0.94578, 0.882, 0.94578, 0.882, 0.85158, 0.93859, 0.85158, 0.93859, 0.85158, 0.93859, 0.76852, 0.846, 0.76852, 0.846, 0.76852, 0.846, 0.76852, 0.846, 0.89591, 0.8544, 0.90561, 0.94399, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.80094, 0.94219, 0.80094, 0.94219, 0.80094, 0.94219, 1, 1, 0.86822, 0.96017, 0.86822, 0.96017, 0.83864, 0.82424, 0.83864, 0.82424, 0.83864, 0.82424, 0.83864, 1.03075, 0.83864, 0.82424, 0.81402, 1.02738, 0.728, 1.02175, 1, 1, 0.912, 0.79475, 1.03075, 1, 1, 0.79475, 0.83911, 0.79475, 0.66266, 0.80553, 1.06676, 0.87514, 0.96017, 1, 1, 0.87514, 0.96017, 0.86865, 0.87396, 0.96017, 0.8588, 0.93859, 0.8588, 0.93859, 0.8588, 0.93859, 0.867, 0.84759, 0.72421, 0.95493, 1, 1, 0.72421, 0.95493, 0.69866, 0.746, 0.69866, 0.746, 1, 1, 0.69866, 0.746, 1, 1, 0.77598, 0.88417, 0.77598, 1.12658, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.87832, 0.979, 0.77512, 0.882, 0.77512, 0.8562, 0.83, 0.8562, 0.83, 0.8562, 0.83, 1, 0.88465, 0.85158, 0.93859, 0.773, 0.8075, 0.85751, 0.8562, 1, 1, 0.77598, 1.12658, 1.15012, 1.15012, 1.15012, 1.15012, 1.15012, 1.15313, 1.15012, 1.15012, 1.15012, 1.08106, 1.03901, 0.85158, 0.77025, 0.62264, 0.7646, 0.65351, 0.86026, 0.69461, 0.89947, 1.03075, 0.85158, 0.77812, 0.76449, 0.88836, 0.70466, 0.8562, 0.86822, 0.8588, 0.83864, 0.77212, 0.85308, 0.93637, 0.87514, 0.82352, 0.8588, 0.85701, 0.76013, 0.89058, 0.77598, 0.8156, 0.82565, 0.78112, 0.77899, 0.89386, 0.83864, 0.8156, 0.9486, 0.92388, 0.96186, 1.03075, 0.91123, 0.9486, 0.93298, 0.878, 0.93942, 0.92388, 0.84596, 0.96186, 0.95119, 1.03075, 0.922, 0.88787, 0.95829, 0.88, 0.93559, 0.93859, 0.78815, 0.93758, 1, 0.89217, 1.03737, 0.91123, 0.93969, 0.77487, 0.85769, 0.86799, 1.03075, 0.91123, 0.93859, 0.91123, 0.86799, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87832, 0.979, 0.87832, 0.979, 0.87832, 0.979, 0.77512, 0.882, 0.9219, 1, 0.89903, 1, 1, 1, 0.87321, 0.87321, 0.87321, 1, 1.027, 1.027, 1.027, 0.86847, 0.86847, 0.79121, 1, 1.124, 1, 1, 0.73572, 0.73572, 1, 1, 0.85034, 1, 1, 1, 1, 0.88465, 1, 1, 1, 0.669, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04828, 1, 0.74948, 0.75187, 1.02058, 0.98391, 1.02119, 1, 1, 1.06233, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05233, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.MyriadProItalicFactors = MyriadProItalicFactors; -const MyriadProItalicMetrics = { - lineHeight: 1.2, - lineGap: 0.2 -}; -exports.MyriadProItalicMetrics = MyriadProItalicMetrics; -const MyriadProRegularFactors = [1.36898, 1, 1, 0.76305, 0.82784, 0.94935, 0.89364, 0.92241, 0.89073, 0.90706, 0.98472, 0.85283, 0.85283, 1.0664, 1.02058, 0.74505, 0.9219, 0.74505, 1.23456, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.74505, 0.74505, 1.02058, 1.02058, 1.02058, 0.73002, 0.72601, 0.91755, 0.8126, 0.80314, 0.92222, 0.73764, 0.79726, 0.83051, 0.90284, 0.86023, 0.74, 0.8126, 0.84869, 0.96518, 0.91115, 0.8858, 0.79761, 0.8858, 0.74498, 0.73914, 0.81363, 0.89591, 0.83659, 0.89633, 0.85608, 0.8111, 0.90531, 1.0222, 1.22736, 1.0222, 1.27014, 0.89903, 0.90088, 0.86667, 1.0231, 0.896, 1.01411, 0.90083, 1.05099, 1.00512, 0.99793, 1.05326, 1.09377, 0.938, 1.06226, 1.00119, 0.99793, 0.98714, 1.0231, 1.01231, 0.98196, 0.792, 1.19137, 0.99074, 0.962, 1.01915, 0.926, 0.942, 0.856, 0.85034, 0.92006, 0.85034, 1.02058, 0.69067, 0.92241, 0.92241, 0.92241, 0.92241, 0.92006, 0.9332, 0.90088, 0.91882, 0.93484, 0.75339, 1.02058, 0.56866, 0.54324, 0.79519, 1.08595, 1, 1, 0.90088, 1, 0.95325, 0.74505, 0.90088, 1, 0.97198, 0.75339, 0.91009, 0.91009, 0.91009, 0.66466, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.788, 0.80314, 0.73764, 0.73764, 0.73764, 0.73764, 0.86023, 0.86023, 0.86023, 0.86023, 0.92915, 0.91115, 0.8858, 0.8858, 0.8858, 0.8858, 0.8858, 1.02058, 0.8858, 0.89591, 0.89591, 0.89591, 0.89591, 0.8111, 0.79611, 0.89713, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86936, 0.896, 0.90083, 0.90083, 0.90083, 0.90083, 0.84224, 0.84224, 0.84224, 0.84224, 0.97276, 0.99793, 0.98714, 0.98714, 0.98714, 0.98714, 0.98714, 1.08595, 0.89876, 0.99074, 0.99074, 0.99074, 0.99074, 0.942, 1.0231, 0.942, 0.91755, 0.86667, 0.91755, 0.86667, 0.91755, 0.86667, 0.80314, 0.896, 0.80314, 0.896, 0.80314, 0.896, 0.80314, 0.896, 0.92222, 0.93372, 0.92915, 1.01411, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.83051, 1.00512, 0.83051, 1.00512, 0.83051, 1.00512, 1, 1, 0.90284, 0.99793, 0.90976, 0.99793, 0.86023, 0.84224, 0.86023, 0.84224, 0.86023, 0.84224, 0.86023, 1.05326, 0.86023, 0.84224, 0.82873, 1.07469, 0.74, 1.09377, 1, 1, 0.938, 0.84869, 1.06226, 1, 1, 0.84869, 0.83704, 0.84869, 0.81441, 0.85588, 1.08927, 0.91115, 0.99793, 1, 1, 0.91115, 0.99793, 0.91887, 0.90991, 0.99793, 0.8858, 0.98714, 0.8858, 0.98714, 0.8858, 0.98714, 0.894, 0.91434, 0.74498, 0.98196, 1, 1, 0.74498, 0.98196, 0.73914, 0.792, 0.73914, 0.792, 1, 1, 0.73914, 0.792, 1, 1, 0.81363, 0.904, 0.81363, 1.19137, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89633, 1.01915, 0.8111, 0.942, 0.8111, 0.90531, 0.856, 0.90531, 0.856, 0.90531, 0.856, 1, 0.92241, 0.91755, 0.86667, 0.788, 0.86936, 0.8858, 0.89876, 1, 1, 0.81363, 1.19137, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90388, 1.03901, 0.92138, 0.78105, 0.7154, 0.86169, 0.80513, 0.94007, 0.82528, 0.98612, 1.06226, 0.91755, 0.8126, 0.81884, 0.92819, 0.73764, 0.90531, 0.90284, 0.8858, 0.86023, 0.8126, 0.91172, 0.96518, 0.91115, 0.83089, 0.8858, 0.87791, 0.79761, 0.89297, 0.81363, 0.88157, 0.89992, 0.85608, 0.81992, 0.94307, 0.86023, 0.88157, 0.95308, 0.98699, 0.99793, 1.06226, 0.95817, 0.95308, 0.97358, 0.928, 0.98088, 0.98699, 0.92761, 0.99793, 0.96017, 1.06226, 0.986, 0.944, 0.95978, 0.938, 0.96705, 0.98714, 0.80442, 0.98972, 1, 0.89762, 1.04552, 0.95817, 0.99007, 0.87064, 0.91879, 0.88888, 1.06226, 0.95817, 0.98714, 0.95817, 0.88888, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89633, 1.01915, 0.89633, 1.01915, 0.89633, 1.01915, 0.8111, 0.942, 0.9219, 1, 0.89903, 1, 1, 1, 0.93173, 0.93173, 0.93173, 1, 1.06304, 1.06304, 1.06904, 0.89903, 0.89903, 0.80549, 1, 1.156, 1, 1, 0.76575, 0.76575, 1, 1, 0.72458, 1, 1, 1, 1, 0.92241, 1, 1, 1, 0.619, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.07257, 1, 0.74705, 0.71119, 1.02058, 1.024, 1.02119, 1, 1, 1.1536, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05638, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.MyriadProRegularFactors = MyriadProRegularFactors; -const MyriadProRegularMetrics = { - lineHeight: 1.2, - lineGap: 0.2 -}; -exports.MyriadProRegularMetrics = MyriadProRegularMetrics; - -/***/ }), -/* 56 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.SegoeuiRegularMetrics = exports.SegoeuiRegularFactors = exports.SegoeuiItalicMetrics = exports.SegoeuiItalicFactors = exports.SegoeuiBoldMetrics = exports.SegoeuiBoldItalicMetrics = exports.SegoeuiBoldItalicFactors = exports.SegoeuiBoldFactors = void 0; -const SegoeuiBoldFactors = [1.76738, 1, 1, 0.99297, 0.9824, 1.04016, 1.06497, 1.03424, 0.97529, 1.17647, 1.23203, 1.1085, 1.1085, 1.16939, 1.2107, 0.9754, 1.21408, 0.9754, 1.59578, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 0.81378, 0.81378, 1.2107, 1.2107, 1.2107, 0.71703, 0.97847, 0.97363, 0.88776, 0.8641, 1.02096, 0.79795, 0.85132, 0.914, 1.06085, 1.1406, 0.8007, 0.89858, 0.83693, 1.14889, 1.09398, 0.97489, 0.92094, 0.97489, 0.90399, 0.84041, 0.95923, 1.00135, 1, 1.06467, 0.98243, 0.90996, 0.99361, 1.1085, 1.56942, 1.1085, 1.2107, 0.74627, 0.94282, 0.96752, 1.01519, 0.86304, 1.01359, 0.97278, 1.15103, 1.01359, 0.98561, 1.02285, 1.02285, 1.00527, 1.02285, 1.0302, 0.99041, 1.0008, 1.01519, 1.01359, 1.02258, 0.79104, 1.16862, 0.99041, 0.97454, 1.02511, 0.99298, 0.96752, 0.95801, 0.94856, 1.16579, 0.94856, 1.2107, 0.9824, 1.03424, 1.03424, 1, 1.03424, 1.16579, 0.8727, 1.3871, 1.18622, 1.10818, 1.04478, 1.2107, 1.18622, 0.75155, 0.94994, 1.28826, 1.21408, 1.21408, 0.91056, 1, 0.91572, 0.9754, 0.64663, 1.18328, 1.24866, 1.04478, 1.14169, 1.15749, 1.17389, 0.71703, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.93506, 0.8641, 0.79795, 0.79795, 0.79795, 0.79795, 1.1406, 1.1406, 1.1406, 1.1406, 1.02096, 1.09398, 0.97426, 0.97426, 0.97426, 0.97426, 0.97426, 1.2107, 0.97489, 1.00135, 1.00135, 1.00135, 1.00135, 0.90996, 0.92094, 1.02798, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.93136, 0.86304, 0.97278, 0.97278, 0.97278, 0.97278, 1.02285, 1.02285, 1.02285, 1.02285, 0.97122, 0.99041, 1, 1, 1, 1, 1, 1.28826, 1.0008, 0.99041, 0.99041, 0.99041, 0.99041, 0.96752, 1.01519, 0.96752, 0.97363, 0.96752, 0.97363, 0.96752, 0.97363, 0.96752, 0.8641, 0.86304, 0.8641, 0.86304, 0.8641, 0.86304, 0.8641, 0.86304, 1.02096, 1.03057, 1.02096, 1.03517, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.914, 1.01359, 0.914, 1.01359, 0.914, 1.01359, 1, 1, 1.06085, 0.98561, 1.06085, 1.00879, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 0.97138, 1.08692, 0.8007, 1.02285, 1, 1, 1.00527, 0.83693, 1.02285, 1, 1, 0.83693, 0.9455, 0.83693, 0.90418, 0.83693, 1.13005, 1.09398, 0.99041, 1, 1, 1.09398, 0.99041, 0.96692, 1.09251, 0.99041, 0.97489, 1.0008, 0.97489, 1.0008, 0.97489, 1.0008, 0.93994, 0.97931, 0.90399, 1.02258, 1, 1, 0.90399, 1.02258, 0.84041, 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 1, 1, 0.95923, 1.07034, 0.95923, 1.16862, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.06467, 1.02511, 0.90996, 0.96752, 0.90996, 0.99361, 0.95801, 0.99361, 0.95801, 0.99361, 0.95801, 1.07733, 1.03424, 0.97363, 0.96752, 0.93506, 0.93136, 0.97489, 1.0008, 1, 1, 0.95923, 1.16862, 1.15103, 1.15103, 1.01173, 1.03959, 0.75953, 0.81378, 0.79912, 1.15103, 1.21994, 0.95161, 0.87815, 1.01149, 0.81525, 0.7676, 0.98167, 1.01134, 1.02546, 0.84097, 1.03089, 1.18102, 0.97363, 0.88776, 0.85134, 0.97826, 0.79795, 0.99361, 1.06085, 0.97489, 1.1406, 0.89858, 1.0388, 1.14889, 1.09398, 0.86039, 0.97489, 1.0595, 0.92094, 0.94793, 0.95923, 0.90996, 0.99346, 0.98243, 1.02112, 0.95493, 1.1406, 0.90996, 1.03574, 1.02597, 1.0008, 1.18102, 1.06628, 1.03574, 1.0192, 1.01932, 1.00886, 0.97531, 1.0106, 1.0008, 1.13189, 1.18102, 1.02277, 0.98683, 1.0016, 0.99561, 1.07237, 1.0008, 0.90434, 0.99921, 0.93803, 0.8965, 1.23085, 1.06628, 1.04983, 0.96268, 1.0499, 0.98439, 1.18102, 1.06628, 1.0008, 1.06628, 0.98439, 0.79795, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.09466, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.97278, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.02065, 1, 1, 1, 1, 1, 1, 1.06467, 1.02511, 1.06467, 1.02511, 1.06467, 1.02511, 0.90996, 0.96752, 1, 1.21408, 0.89903, 1, 1, 0.75155, 1.04394, 1.04394, 1.04394, 1.04394, 0.98633, 0.98633, 0.98633, 0.73047, 0.73047, 1.20642, 0.91211, 1.25635, 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.12454, 0.93503, 1.03424, 1.19687, 1.03424, 1, 1, 1, 0.771, 1, 1, 1.15749, 1.15749, 1.15749, 1.10948, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.16897, 1, 0.96085, 0.90137, 1.2107, 1.18416, 1.13973, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21172, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18874, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.09193, 1.09193, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.SegoeuiBoldFactors = SegoeuiBoldFactors; -const SegoeuiBoldMetrics = { - lineHeight: 1.33008, - lineGap: 0 -}; -exports.SegoeuiBoldMetrics = SegoeuiBoldMetrics; -const SegoeuiBoldItalicFactors = [1.76738, 1, 1, 0.98946, 1.03959, 1.04016, 1.02809, 1.036, 0.97639, 1.10953, 1.23203, 1.11144, 1.11144, 1.16939, 1.21237, 0.9754, 1.21261, 0.9754, 1.59754, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 0.81378, 0.81378, 1.21237, 1.21237, 1.21237, 0.73541, 0.97847, 0.97363, 0.89723, 0.87897, 1.0426, 0.79429, 0.85292, 0.91149, 1.05815, 1.1406, 0.79631, 0.90128, 0.83853, 1.04396, 1.10615, 0.97552, 0.94436, 0.97552, 0.88641, 0.80527, 0.96083, 1.00135, 1, 1.06777, 0.9817, 0.91142, 0.99361, 1.11144, 1.57293, 1.11144, 1.21237, 0.74627, 1.31818, 1.06585, 0.97042, 0.83055, 0.97042, 0.93503, 1.1261, 0.97042, 0.97922, 1.14236, 0.94552, 1.01054, 1.14236, 1.02471, 0.97922, 0.94165, 0.97042, 0.97042, 1.0276, 0.78929, 1.1261, 0.97922, 0.95874, 1.02197, 0.98507, 0.96752, 0.97168, 0.95107, 1.16579, 0.95107, 1.21237, 1.03959, 1.036, 1.036, 1, 1.036, 1.16579, 0.87357, 1.31818, 1.18754, 1.26781, 1.05356, 1.21237, 1.18622, 0.79487, 0.94994, 1.29004, 1.24047, 1.24047, 1.31818, 1, 0.91484, 0.9754, 1.31818, 1.1349, 1.24866, 1.05356, 1.13934, 1.15574, 1.17389, 0.73541, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.94385, 0.87897, 0.79429, 0.79429, 0.79429, 0.79429, 1.1406, 1.1406, 1.1406, 1.1406, 1.0426, 1.10615, 0.97552, 0.97552, 0.97552, 0.97552, 0.97552, 1.21237, 0.97552, 1.00135, 1.00135, 1.00135, 1.00135, 0.91142, 0.94436, 0.98721, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 0.96705, 0.83055, 0.93503, 0.93503, 0.93503, 0.93503, 1.14236, 1.14236, 1.14236, 1.14236, 0.93125, 0.97922, 0.94165, 0.94165, 0.94165, 0.94165, 0.94165, 1.29004, 0.94165, 0.97922, 0.97922, 0.97922, 0.97922, 0.96752, 0.97042, 0.96752, 0.97363, 1.06585, 0.97363, 1.06585, 0.97363, 1.06585, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 1.0426, 1.0033, 1.0426, 0.97042, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.91149, 0.97042, 0.91149, 0.97042, 0.91149, 0.97042, 1, 1, 1.05815, 0.97922, 1.05815, 0.97922, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 0.97441, 1.04302, 0.79631, 1.01582, 1, 1, 1.01054, 0.83853, 1.14236, 1, 1, 0.83853, 1.09125, 0.83853, 0.90418, 0.83853, 1.19508, 1.10615, 0.97922, 1, 1, 1.10615, 0.97922, 1.01034, 1.10466, 0.97922, 0.97552, 0.94165, 0.97552, 0.94165, 0.97552, 0.94165, 0.91602, 0.91981, 0.88641, 1.0276, 1, 1, 0.88641, 1.0276, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 1, 1, 0.96083, 1.05403, 0.95923, 1.16862, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.06777, 1.02197, 0.91142, 0.96752, 0.91142, 0.99361, 0.97168, 0.99361, 0.97168, 0.99361, 0.97168, 1.23199, 1.036, 0.97363, 1.06585, 0.94385, 0.96705, 0.97552, 0.94165, 1, 1, 0.96083, 1.1261, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 0.95161, 1.27126, 1.00811, 0.83284, 0.77702, 0.99137, 0.95253, 1.0347, 0.86142, 1.07205, 1.14236, 0.97363, 0.89723, 0.86869, 1.09818, 0.79429, 0.99361, 1.05815, 0.97552, 1.1406, 0.90128, 1.06662, 1.04396, 1.10615, 0.84918, 0.97552, 1.04694, 0.94436, 0.98015, 0.96083, 0.91142, 1.00356, 0.9817, 1.01945, 0.98999, 1.1406, 0.91142, 1.04961, 0.9898, 1.00639, 1.14236, 1.07514, 1.04961, 0.99607, 1.02897, 1.008, 0.9898, 0.95134, 1.00639, 1.11121, 1.14236, 1.00518, 0.97981, 1.02186, 1, 1.08578, 0.94165, 0.99314, 0.98387, 0.93028, 0.93377, 1.35125, 1.07514, 1.10687, 0.93491, 1.04232, 1.00351, 1.14236, 1.07514, 0.94165, 1.07514, 1.00351, 0.79429, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.09097, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.93503, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96609, 1, 1, 1, 1, 1, 1, 1.06777, 1.02197, 1.06777, 1.02197, 1.06777, 1.02197, 0.91142, 0.96752, 1, 1.21261, 0.89903, 1, 1, 0.75155, 1.04745, 1.04745, 1.04745, 1.04394, 0.98633, 0.98633, 0.98633, 0.72959, 0.72959, 1.20502, 0.91406, 1.26514, 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.09125, 0.93327, 1.03336, 1.16541, 1.036, 1, 1, 1, 0.771, 1, 1, 1.15574, 1.15574, 1.15574, 1.15574, 0.86364, 0.94434, 0.86279, 0.94434, 0.86224, 1, 1, 1.16798, 1, 0.96085, 0.90068, 1.21237, 1.18416, 1.13904, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21339, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18775, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.13269, 1.13269, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.SegoeuiBoldItalicFactors = SegoeuiBoldItalicFactors; -const SegoeuiBoldItalicMetrics = { - lineHeight: 1.33008, - lineGap: 0 -}; -exports.SegoeuiBoldItalicMetrics = SegoeuiBoldItalicMetrics; -const SegoeuiItalicFactors = [1.76738, 1, 1, 0.98946, 1.14763, 1.05365, 1.06234, 0.96927, 0.92586, 1.15373, 1.18414, 0.91349, 0.91349, 1.07403, 1.17308, 0.78383, 1.20088, 0.78383, 1.42531, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.78383, 0.78383, 1.17308, 1.17308, 1.17308, 0.77349, 0.94565, 0.94729, 0.85944, 0.88506, 0.9858, 0.74817, 0.80016, 0.88449, 0.98039, 0.95782, 0.69238, 0.89898, 0.83231, 0.98183, 1.03989, 0.96924, 0.86237, 0.96924, 0.80595, 0.74524, 0.86091, 0.95402, 0.94143, 0.98448, 0.8858, 0.83089, 0.93285, 1.0949, 1.39016, 1.0949, 1.45994, 0.74627, 1.04839, 0.97454, 0.97454, 0.87207, 0.97454, 0.87533, 1.06151, 0.97454, 1.00176, 1.16484, 1.08132, 0.98047, 1.16484, 1.02989, 1.01054, 0.96225, 0.97454, 0.97454, 1.06598, 0.79004, 1.16344, 1.00351, 0.94629, 0.9973, 0.91016, 0.96777, 0.9043, 0.91082, 0.92481, 0.91082, 1.17308, 0.95748, 0.96927, 0.96927, 1, 0.96927, 0.92481, 0.80597, 1.04839, 1.23393, 1.1781, 0.9245, 1.17308, 1.20808, 0.63218, 0.94261, 1.24822, 1.09971, 1.09971, 1.04839, 1, 0.85273, 0.78032, 1.04839, 1.09971, 1.22326, 0.9245, 1.09836, 1.13525, 1.15222, 0.70424, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.85498, 0.88506, 0.74817, 0.74817, 0.74817, 0.74817, 0.95782, 0.95782, 0.95782, 0.95782, 0.9858, 1.03989, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.17308, 0.96924, 0.95402, 0.95402, 0.95402, 0.95402, 0.83089, 0.86237, 0.88409, 0.97454, 0.97454, 0.97454, 0.97454, 0.97454, 0.97454, 0.92916, 0.87207, 0.87533, 0.87533, 0.87533, 0.87533, 0.93146, 0.93146, 0.93146, 0.93146, 0.93854, 1.01054, 0.96225, 0.96225, 0.96225, 0.96225, 0.96225, 1.24822, 0.8761, 1.00351, 1.00351, 1.00351, 1.00351, 0.96777, 0.97454, 0.96777, 0.94729, 0.97454, 0.94729, 0.97454, 0.94729, 0.97454, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, 0.87207, 0.9858, 0.95391, 0.9858, 0.97454, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.88449, 0.97454, 0.88449, 0.97454, 0.88449, 0.97454, 1, 1, 0.98039, 1.00176, 0.98039, 1.00176, 0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 1.16484, 0.95782, 0.93146, 0.84421, 1.12761, 0.69238, 1.08132, 1, 1, 0.98047, 0.83231, 1.16484, 1, 1, 0.84723, 1.04861, 0.84723, 0.78755, 0.83231, 1.23736, 1.03989, 1.01054, 1, 1, 1.03989, 1.01054, 0.9857, 1.03849, 1.01054, 0.96924, 0.96225, 0.96924, 0.96225, 0.96924, 0.96225, 0.92383, 0.90171, 0.80595, 1.06598, 1, 1, 0.80595, 1.06598, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004, 1, 1, 0.86091, 1.02759, 0.85771, 1.16344, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.98448, 0.9973, 0.83089, 0.96777, 0.83089, 0.93285, 0.9043, 0.93285, 0.9043, 0.93285, 0.9043, 1.31868, 0.96927, 0.94729, 0.97454, 0.85498, 0.92916, 0.96924, 0.8761, 1, 1, 0.86091, 1.16344, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 0.81965, 0.81965, 0.94729, 0.78032, 0.71022, 0.90883, 0.84171, 0.99877, 0.77596, 1.05734, 1.2, 0.94729, 0.85944, 0.82791, 0.9607, 0.74817, 0.93285, 0.98039, 0.96924, 0.95782, 0.89898, 0.98316, 0.98183, 1.03989, 0.78614, 0.96924, 0.97642, 0.86237, 0.86075, 0.86091, 0.83089, 0.90082, 0.8858, 0.97296, 1.01284, 0.95782, 0.83089, 1.0976, 1.04, 1.03342, 1.2, 1.0675, 1.0976, 0.98205, 1.03809, 1.05097, 1.04, 0.95364, 1.03342, 1.05401, 1.2, 1.02148, 1.0119, 1.04724, 1.0127, 1.02732, 0.96225, 0.8965, 0.97783, 0.93574, 0.94818, 1.30679, 1.0675, 1.11826, 0.99821, 1.0557, 1.0326, 1.2, 1.0675, 0.96225, 1.0675, 1.0326, 0.74817, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03754, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87533, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.98705, 1, 1, 1, 1, 1, 1, 0.98448, 0.9973, 0.98448, 0.9973, 0.98448, 0.9973, 0.83089, 0.96777, 1, 1.20088, 0.89903, 1, 1, 0.75155, 0.94945, 0.94945, 0.94945, 0.94945, 1.12317, 1.12317, 1.12317, 0.67603, 0.67603, 1.15621, 0.73584, 1.21191, 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87709, 0.96927, 1.01473, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.09836, 1.09836, 1.09836, 1.01522, 0.86321, 0.94434, 0.8649, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86438, 1.17308, 1.18416, 1.14589, 0.69825, 0.97622, 1.96791, 1.24822, 1.24822, 1.17308, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.17984, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10742, 1.10742, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.SegoeuiItalicFactors = SegoeuiItalicFactors; -const SegoeuiItalicMetrics = { - lineHeight: 1.33008, - lineGap: 0 -}; -exports.SegoeuiItalicMetrics = SegoeuiItalicMetrics; -const SegoeuiRegularFactors = [1.76738, 1, 1, 0.98594, 1.02285, 1.10454, 1.06234, 0.96927, 0.92037, 1.19985, 1.2046, 0.90616, 0.90616, 1.07152, 1.1714, 0.78032, 1.20088, 0.78032, 1.40246, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.78032, 0.78032, 1.1714, 1.1714, 1.1714, 0.80597, 0.94084, 0.96706, 0.85944, 0.85734, 0.97093, 0.75842, 0.79936, 0.88198, 0.9831, 0.95782, 0.71387, 0.86969, 0.84636, 1.07796, 1.03584, 0.96924, 0.83968, 0.96924, 0.82826, 0.79649, 0.85771, 0.95132, 0.93119, 0.98965, 0.88433, 0.8287, 0.93365, 1.08612, 1.3638, 1.08612, 1.45786, 0.74627, 0.80499, 0.91484, 1.05707, 0.92383, 1.05882, 0.9403, 1.12654, 1.05882, 1.01756, 1.09011, 1.09011, 0.99414, 1.09011, 1.034, 1.01756, 1.05356, 1.05707, 1.05882, 1.04399, 0.84863, 1.21968, 1.01756, 0.95801, 1.00068, 0.91797, 0.96777, 0.9043, 0.90351, 0.92105, 0.90351, 1.1714, 0.85337, 0.96927, 0.96927, 0.99912, 0.96927, 0.92105, 0.80597, 1.2434, 1.20808, 1.05937, 0.90957, 1.1714, 1.20808, 0.75155, 0.94261, 1.24644, 1.09971, 1.09971, 0.84751, 1, 0.85273, 0.78032, 0.61584, 1.05425, 1.17914, 0.90957, 1.08665, 1.11593, 1.14169, 0.73381, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.86035, 0.85734, 0.75842, 0.75842, 0.75842, 0.75842, 0.95782, 0.95782, 0.95782, 0.95782, 0.97093, 1.03584, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.1714, 0.96924, 0.95132, 0.95132, 0.95132, 0.95132, 0.8287, 0.83968, 0.89049, 0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.93575, 0.92383, 0.9403, 0.9403, 0.9403, 0.9403, 0.8717, 0.8717, 0.8717, 0.8717, 1.00527, 1.01756, 1.05356, 1.05356, 1.05356, 1.05356, 1.05356, 1.24644, 0.95923, 1.01756, 1.01756, 1.01756, 1.01756, 0.96777, 1.05707, 0.96777, 0.96706, 0.91484, 0.96706, 0.91484, 0.96706, 0.91484, 0.85734, 0.92383, 0.85734, 0.92383, 0.85734, 0.92383, 0.85734, 0.92383, 0.97093, 1.0969, 0.97093, 1.05882, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.88198, 1.05882, 0.88198, 1.05882, 0.88198, 1.05882, 1, 1, 0.9831, 1.01756, 0.9831, 1.01756, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, 1.09011, 0.95782, 0.8717, 0.84784, 1.11551, 0.71387, 1.09011, 1, 1, 0.99414, 0.84636, 1.09011, 1, 1, 0.84636, 1.0536, 0.84636, 0.94298, 0.84636, 1.23297, 1.03584, 1.01756, 1, 1, 1.03584, 1.01756, 1.00323, 1.03444, 1.01756, 0.96924, 1.05356, 0.96924, 1.05356, 0.96924, 1.05356, 0.93066, 0.98293, 0.82826, 1.04399, 1, 1, 0.82826, 1.04399, 0.79649, 0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 1, 1, 0.85771, 1.17318, 0.85771, 1.21968, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.98965, 1.00068, 0.8287, 0.96777, 0.8287, 0.93365, 0.9043, 0.93365, 0.9043, 0.93365, 0.9043, 1.08571, 0.96927, 0.96706, 0.91484, 0.86035, 0.93575, 0.96924, 0.95923, 1, 1, 0.85771, 1.21968, 1.11437, 1.11437, 0.93109, 0.91202, 0.60411, 0.84164, 0.55572, 1.01173, 0.97361, 0.81818, 0.81818, 0.96635, 0.78032, 0.72727, 0.92366, 0.98601, 1.03405, 0.77968, 1.09799, 1.2, 0.96706, 0.85944, 0.85638, 0.96491, 0.75842, 0.93365, 0.9831, 0.96924, 0.95782, 0.86969, 0.94152, 1.07796, 1.03584, 0.78437, 0.96924, 0.98715, 0.83968, 0.83491, 0.85771, 0.8287, 0.94492, 0.88433, 0.9287, 1.0098, 0.95782, 0.8287, 1.0625, 0.98248, 1.03424, 1.2, 1.01071, 1.0625, 0.95246, 1.03809, 1.04912, 0.98248, 1.00221, 1.03424, 1.05443, 1.2, 1.04785, 0.99609, 1.00169, 1.05176, 0.99346, 1.05356, 0.9087, 1.03004, 0.95542, 0.93117, 1.23362, 1.01071, 1.07831, 1.02512, 1.05205, 1.03502, 1.2, 1.01071, 1.05356, 1.01071, 1.03502, 0.75842, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03719, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9403, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04021, 1, 1, 1, 1, 1, 1, 0.98965, 1.00068, 0.98965, 1.00068, 0.98965, 1.00068, 0.8287, 0.96777, 1, 1.20088, 0.89903, 1, 1, 0.75155, 1.03077, 1.03077, 1.03077, 1.03077, 1.13196, 1.13196, 1.13196, 0.67428, 0.67428, 1.16039, 0.73291, 1.20996, 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87796, 0.96927, 1.01518, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.10539, 1.10539, 1.11358, 1.06967, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86507, 1.1714, 1.18416, 1.14589, 0.69825, 0.97622, 1.9697, 1.24822, 1.24822, 1.17238, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18083, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10938, 1.10938, 1, 1, 1, 1.05425, 1.09971, 1.09971, 1.09971, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.SegoeuiRegularFactors = SegoeuiRegularFactors; -const SegoeuiRegularMetrics = { - lineHeight: 1.33008, - lineGap: 0 -}; -exports.SegoeuiRegularMetrics = SegoeuiRegularMetrics; - -/***/ }), -/* 57 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PostScriptEvaluator = exports.PostScriptCompiler = exports.PDFFunctionFactory = void 0; -exports.isPDFFunction = isPDFFunction; -var _primitives = __w_pdfjs_require__(4); -var _util = __w_pdfjs_require__(2); -var _ps_parser = __w_pdfjs_require__(58); -var _base_stream = __w_pdfjs_require__(5); -var _image_utils = __w_pdfjs_require__(59); -class PDFFunctionFactory { - constructor({ - xref, - isEvalSupported = true - }) { - this.xref = xref; - this.isEvalSupported = isEvalSupported !== false; - } - create(fn) { - const cachedFunction = this.getCached(fn); - if (cachedFunction) { - return cachedFunction; - } - const parsedFunction = PDFFunction.parse({ - xref: this.xref, - isEvalSupported: this.isEvalSupported, - fn: fn instanceof _primitives.Ref ? this.xref.fetch(fn) : fn - }); - this._cache(fn, parsedFunction); - return parsedFunction; - } - createFromArray(fnObj) { - const cachedFunction = this.getCached(fnObj); - if (cachedFunction) { - return cachedFunction; - } - const parsedFunction = PDFFunction.parseArray({ - xref: this.xref, - isEvalSupported: this.isEvalSupported, - fnObj: fnObj instanceof _primitives.Ref ? this.xref.fetch(fnObj) : fnObj - }); - this._cache(fnObj, parsedFunction); - return parsedFunction; - } - getCached(cacheKey) { - let fnRef; - if (cacheKey instanceof _primitives.Ref) { - fnRef = cacheKey; - } else if (cacheKey instanceof _primitives.Dict) { - fnRef = cacheKey.objId; - } else if (cacheKey instanceof _base_stream.BaseStream) { - fnRef = cacheKey.dict?.objId; - } - if (fnRef) { - const localFunction = this._localFunctionCache.getByRef(fnRef); - if (localFunction) { - return localFunction; - } - } - return null; - } - _cache(cacheKey, parsedFunction) { - if (!parsedFunction) { - throw new Error('PDFFunctionFactory._cache - expected "parsedFunction" argument.'); - } - let fnRef; - if (cacheKey instanceof _primitives.Ref) { - fnRef = cacheKey; - } else if (cacheKey instanceof _primitives.Dict) { - fnRef = cacheKey.objId; - } else if (cacheKey instanceof _base_stream.BaseStream) { - fnRef = cacheKey.dict?.objId; - } - if (fnRef) { - this._localFunctionCache.set(null, fnRef, parsedFunction); - } - } - get _localFunctionCache() { - return (0, _util.shadow)(this, "_localFunctionCache", new _image_utils.LocalFunctionCache()); - } -} -exports.PDFFunctionFactory = PDFFunctionFactory; -function toNumberArray(arr) { - if (!Array.isArray(arr)) { - return null; - } - const length = arr.length; - for (let i = 0; i < length; i++) { - if (typeof arr[i] !== "number") { - const result = new Array(length); - for (let j = 0; j < length; j++) { - result[j] = +arr[j]; - } - return result; - } - } - return arr; -} -class PDFFunction { - static getSampleArray(size, outputSize, bps, stream) { - let i, ii; - let length = 1; - for (i = 0, ii = size.length; i < ii; i++) { - length *= size[i]; - } - length *= outputSize; - const array = new Array(length); - let codeSize = 0; - let codeBuf = 0; - const sampleMul = 1.0 / (2.0 ** bps - 1); - const strBytes = stream.getBytes((length * bps + 7) / 8); - let strIdx = 0; - for (i = 0; i < length; i++) { - while (codeSize < bps) { - codeBuf <<= 8; - codeBuf |= strBytes[strIdx++]; - codeSize += 8; - } - codeSize -= bps; - array[i] = (codeBuf >> codeSize) * sampleMul; - codeBuf &= (1 << codeSize) - 1; - } - return array; - } - static parse({ - xref, - isEvalSupported, - fn - }) { - const dict = fn.dict || fn; - const typeNum = dict.get("FunctionType"); - switch (typeNum) { - case 0: - return this.constructSampled({ - xref, - isEvalSupported, - fn, - dict - }); - case 1: - break; - case 2: - return this.constructInterpolated({ - xref, - isEvalSupported, - dict - }); - case 3: - return this.constructStiched({ - xref, - isEvalSupported, - dict - }); - case 4: - return this.constructPostScript({ - xref, - isEvalSupported, - fn, - dict - }); - } - throw new _util.FormatError("Unknown type of function"); - } - static parseArray({ - xref, - isEvalSupported, - fnObj - }) { - if (!Array.isArray(fnObj)) { - return this.parse({ - xref, - isEvalSupported, - fn: fnObj - }); - } - const fnArray = []; - for (const fn of fnObj) { - fnArray.push(this.parse({ - xref, - isEvalSupported, - fn: xref.fetchIfRef(fn) - })); - } - return function (src, srcOffset, dest, destOffset) { - for (let i = 0, ii = fnArray.length; i < ii; i++) { - fnArray[i](src, srcOffset, dest, destOffset + i); - } - }; - } - static constructSampled({ - xref, - isEvalSupported, - fn, - dict - }) { - function toMultiArray(arr) { - const inputLength = arr.length; - const out = []; - let index = 0; - for (let i = 0; i < inputLength; i += 2) { - out[index++] = [arr[i], arr[i + 1]]; - } - return out; - } - function interpolate(x, xmin, xmax, ymin, ymax) { - return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin)); - } - let domain = toNumberArray(dict.getArray("Domain")); - let range = toNumberArray(dict.getArray("Range")); - if (!domain || !range) { - throw new _util.FormatError("No domain or range"); - } - const inputSize = domain.length / 2; - const outputSize = range.length / 2; - domain = toMultiArray(domain); - range = toMultiArray(range); - const size = toNumberArray(dict.getArray("Size")); - const bps = dict.get("BitsPerSample"); - const order = dict.get("Order") || 1; - if (order !== 1) { - (0, _util.info)("No support for cubic spline interpolation: " + order); - } - let encode = toNumberArray(dict.getArray("Encode")); - if (!encode) { - encode = []; - for (let i = 0; i < inputSize; ++i) { - encode.push([0, size[i] - 1]); - } - } else { - encode = toMultiArray(encode); - } - let decode = toNumberArray(dict.getArray("Decode")); - decode = !decode ? range : toMultiArray(decode); - const samples = this.getSampleArray(size, outputSize, bps, fn); - return function constructSampledFn(src, srcOffset, dest, destOffset) { - const cubeVertices = 1 << inputSize; - const cubeN = new Float64Array(cubeVertices); - const cubeVertex = new Uint32Array(cubeVertices); - let i, j; - for (j = 0; j < cubeVertices; j++) { - cubeN[j] = 1; - } - let k = outputSize, - pos = 1; - for (i = 0; i < inputSize; ++i) { - const domain_2i = domain[i][0]; - const domain_2i_1 = domain[i][1]; - const xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1); - let e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]); - const size_i = size[i]; - e = Math.min(Math.max(e, 0), size_i - 1); - const e0 = e < size_i - 1 ? Math.floor(e) : e - 1; - const n0 = e0 + 1 - e; - const n1 = e - e0; - const offset0 = e0 * k; - const offset1 = offset0 + k; - for (j = 0; j < cubeVertices; j++) { - if (j & pos) { - cubeN[j] *= n1; - cubeVertex[j] += offset1; - } else { - cubeN[j] *= n0; - cubeVertex[j] += offset0; - } - } - k *= size_i; - pos <<= 1; - } - for (j = 0; j < outputSize; ++j) { - let rj = 0; - for (i = 0; i < cubeVertices; i++) { - rj += samples[cubeVertex[i] + j] * cubeN[i]; - } - rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]); - dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]); - } - }; - } - static constructInterpolated({ - xref, - isEvalSupported, - dict - }) { - const c0 = toNumberArray(dict.getArray("C0")) || [0]; - const c1 = toNumberArray(dict.getArray("C1")) || [1]; - const n = dict.get("N"); - const diff = []; - for (let i = 0, ii = c0.length; i < ii; ++i) { - diff.push(c1[i] - c0[i]); - } - const length = diff.length; - return function constructInterpolatedFn(src, srcOffset, dest, destOffset) { - const x = n === 1 ? src[srcOffset] : src[srcOffset] ** n; - for (let j = 0; j < length; ++j) { - dest[destOffset + j] = c0[j] + x * diff[j]; - } - }; - } - static constructStiched({ - xref, - isEvalSupported, - dict - }) { - const domain = toNumberArray(dict.getArray("Domain")); - if (!domain) { - throw new _util.FormatError("No domain"); - } - const inputSize = domain.length / 2; - if (inputSize !== 1) { - throw new _util.FormatError("Bad domain for stiched function"); - } - const fns = []; - for (const fn of dict.get("Functions")) { - fns.push(this.parse({ - xref, - isEvalSupported, - fn: xref.fetchIfRef(fn) - })); - } - const bounds = toNumberArray(dict.getArray("Bounds")); - const encode = toNumberArray(dict.getArray("Encode")); - const tmpBuf = new Float32Array(1); - return function constructStichedFn(src, srcOffset, dest, destOffset) { - const clip = function constructStichedFromIRClip(v, min, max) { - if (v > max) { - v = max; - } else if (v < min) { - v = min; - } - return v; - }; - const v = clip(src[srcOffset], domain[0], domain[1]); - const length = bounds.length; - let i; - for (i = 0; i < length; ++i) { - if (v < bounds[i]) { - break; - } - } - let dmin = domain[0]; - if (i > 0) { - dmin = bounds[i - 1]; - } - let dmax = domain[1]; - if (i < bounds.length) { - dmax = bounds[i]; - } - const rmin = encode[2 * i]; - const rmax = encode[2 * i + 1]; - tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin); - fns[i](tmpBuf, 0, dest, destOffset); - }; - } - static constructPostScript({ - xref, - isEvalSupported, - fn, - dict - }) { - const domain = toNumberArray(dict.getArray("Domain")); - const range = toNumberArray(dict.getArray("Range")); - if (!domain) { - throw new _util.FormatError("No domain."); - } - if (!range) { - throw new _util.FormatError("No range."); - } - const lexer = new _ps_parser.PostScriptLexer(fn); - const parser = new _ps_parser.PostScriptParser(lexer); - const code = parser.parse(); - if (isEvalSupported && _util.FeatureTest.isEvalSupported) { - const compiled = new PostScriptCompiler().compile(code, domain, range); - if (compiled) { - return new Function("src", "srcOffset", "dest", "destOffset", compiled); - } - } - (0, _util.info)("Unable to compile PS function"); - const numOutputs = range.length >> 1; - const numInputs = domain.length >> 1; - const evaluator = new PostScriptEvaluator(code); - const cache = Object.create(null); - const MAX_CACHE_SIZE = 2048 * 4; - let cache_available = MAX_CACHE_SIZE; - const tmpBuf = new Float32Array(numInputs); - return function constructPostScriptFn(src, srcOffset, dest, destOffset) { - let i, value; - let key = ""; - const input = tmpBuf; - for (i = 0; i < numInputs; i++) { - value = src[srcOffset + i]; - input[i] = value; - key += value + "_"; - } - const cachedValue = cache[key]; - if (cachedValue !== undefined) { - dest.set(cachedValue, destOffset); - return; - } - const output = new Float32Array(numOutputs); - const stack = evaluator.execute(input); - const stackIndex = stack.length - numOutputs; - for (i = 0; i < numOutputs; i++) { - value = stack[stackIndex + i]; - let bound = range[i * 2]; - if (value < bound) { - value = bound; - } else { - bound = range[i * 2 + 1]; - if (value > bound) { - value = bound; - } - } - output[i] = value; - } - if (cache_available > 0) { - cache_available--; - cache[key] = output; - } - dest.set(output, destOffset); - }; - } -} -function isPDFFunction(v) { - let fnDict; - if (v instanceof _primitives.Dict) { - fnDict = v; - } else if (v instanceof _base_stream.BaseStream) { - fnDict = v.dict; - } else { - return false; - } - return fnDict.has("FunctionType"); -} -class PostScriptStack { - static MAX_STACK_SIZE = 100; - constructor(initialStack) { - this.stack = initialStack ? Array.from(initialStack) : []; - } - push(value) { - if (this.stack.length >= PostScriptStack.MAX_STACK_SIZE) { - throw new Error("PostScript function stack overflow."); - } - this.stack.push(value); - } - pop() { - if (this.stack.length <= 0) { - throw new Error("PostScript function stack underflow."); - } - return this.stack.pop(); - } - copy(n) { - if (this.stack.length + n >= PostScriptStack.MAX_STACK_SIZE) { - throw new Error("PostScript function stack overflow."); - } - const stack = this.stack; - for (let i = stack.length - n, j = n - 1; j >= 0; j--, i++) { - stack.push(stack[i]); - } - } - index(n) { - this.push(this.stack[this.stack.length - n - 1]); - } - roll(n, p) { - const stack = this.stack; - const l = stack.length - n; - const r = stack.length - 1; - const c = l + (p - Math.floor(p / n) * n); - for (let i = l, j = r; i < j; i++, j--) { - const t = stack[i]; - stack[i] = stack[j]; - stack[j] = t; - } - for (let i = l, j = c - 1; i < j; i++, j--) { - const t = stack[i]; - stack[i] = stack[j]; - stack[j] = t; - } - for (let i = c, j = r; i < j; i++, j--) { - const t = stack[i]; - stack[i] = stack[j]; - stack[j] = t; - } - } -} -class PostScriptEvaluator { - constructor(operators) { - this.operators = operators; - } - execute(initialStack) { - const stack = new PostScriptStack(initialStack); - let counter = 0; - const operators = this.operators; - const length = operators.length; - let operator, a, b; - while (counter < length) { - operator = operators[counter++]; - if (typeof operator === "number") { - stack.push(operator); - continue; - } - switch (operator) { - case "jz": - b = stack.pop(); - a = stack.pop(); - if (!a) { - counter = b; - } - break; - case "j": - a = stack.pop(); - counter = a; - break; - case "abs": - a = stack.pop(); - stack.push(Math.abs(a)); - break; - case "add": - b = stack.pop(); - a = stack.pop(); - stack.push(a + b); - break; - case "and": - b = stack.pop(); - a = stack.pop(); - if (typeof a === "boolean" && typeof b === "boolean") { - stack.push(a && b); - } else { - stack.push(a & b); - } - break; - case "atan": - b = stack.pop(); - a = stack.pop(); - a = Math.atan2(a, b) / Math.PI * 180; - if (a < 0) { - a += 360; - } - stack.push(a); - break; - case "bitshift": - b = stack.pop(); - a = stack.pop(); - if (a > 0) { - stack.push(a << b); - } else { - stack.push(a >> b); - } - break; - case "ceiling": - a = stack.pop(); - stack.push(Math.ceil(a)); - break; - case "copy": - a = stack.pop(); - stack.copy(a); - break; - case "cos": - a = stack.pop(); - stack.push(Math.cos(a % 360 / 180 * Math.PI)); - break; - case "cvi": - a = stack.pop() | 0; - stack.push(a); - break; - case "cvr": - break; - case "div": - b = stack.pop(); - a = stack.pop(); - stack.push(a / b); - break; - case "dup": - stack.copy(1); - break; - case "eq": - b = stack.pop(); - a = stack.pop(); - stack.push(a === b); - break; - case "exch": - stack.roll(2, 1); - break; - case "exp": - b = stack.pop(); - a = stack.pop(); - stack.push(a ** b); - break; - case "false": - stack.push(false); - break; - case "floor": - a = stack.pop(); - stack.push(Math.floor(a)); - break; - case "ge": - b = stack.pop(); - a = stack.pop(); - stack.push(a >= b); - break; - case "gt": - b = stack.pop(); - a = stack.pop(); - stack.push(a > b); - break; - case "idiv": - b = stack.pop(); - a = stack.pop(); - stack.push(a / b | 0); - break; - case "index": - a = stack.pop(); - stack.index(a); - break; - case "le": - b = stack.pop(); - a = stack.pop(); - stack.push(a <= b); - break; - case "ln": - a = stack.pop(); - stack.push(Math.log(a)); - break; - case "log": - a = stack.pop(); - stack.push(Math.log10(a)); - break; - case "lt": - b = stack.pop(); - a = stack.pop(); - stack.push(a < b); - break; - case "mod": - b = stack.pop(); - a = stack.pop(); - stack.push(a % b); - break; - case "mul": - b = stack.pop(); - a = stack.pop(); - stack.push(a * b); - break; - case "ne": - b = stack.pop(); - a = stack.pop(); - stack.push(a !== b); - break; - case "neg": - a = stack.pop(); - stack.push(-a); - break; - case "not": - a = stack.pop(); - if (typeof a === "boolean") { - stack.push(!a); - } else { - stack.push(~a); - } - break; - case "or": - b = stack.pop(); - a = stack.pop(); - if (typeof a === "boolean" && typeof b === "boolean") { - stack.push(a || b); - } else { - stack.push(a | b); - } - break; - case "pop": - stack.pop(); - break; - case "roll": - b = stack.pop(); - a = stack.pop(); - stack.roll(a, b); - break; - case "round": - a = stack.pop(); - stack.push(Math.round(a)); - break; - case "sin": - a = stack.pop(); - stack.push(Math.sin(a % 360 / 180 * Math.PI)); - break; - case "sqrt": - a = stack.pop(); - stack.push(Math.sqrt(a)); - break; - case "sub": - b = stack.pop(); - a = stack.pop(); - stack.push(a - b); - break; - case "true": - stack.push(true); - break; - case "truncate": - a = stack.pop(); - a = a < 0 ? Math.ceil(a) : Math.floor(a); - stack.push(a); - break; - case "xor": - b = stack.pop(); - a = stack.pop(); - if (typeof a === "boolean" && typeof b === "boolean") { - stack.push(a !== b); - } else { - stack.push(a ^ b); - } - break; - default: - throw new _util.FormatError(`Unknown operator ${operator}`); - } - } - return stack.stack; - } -} -exports.PostScriptEvaluator = PostScriptEvaluator; -class AstNode { - constructor(type) { - this.type = type; - } - visit(visitor) { - (0, _util.unreachable)("abstract method"); - } -} -class AstArgument extends AstNode { - constructor(index, min, max) { - super("args"); - this.index = index; - this.min = min; - this.max = max; - } - visit(visitor) { - visitor.visitArgument(this); - } -} -class AstLiteral extends AstNode { - constructor(number) { - super("literal"); - this.number = number; - this.min = number; - this.max = number; - } - visit(visitor) { - visitor.visitLiteral(this); - } -} -class AstBinaryOperation extends AstNode { - constructor(op, arg1, arg2, min, max) { - super("binary"); - this.op = op; - this.arg1 = arg1; - this.arg2 = arg2; - this.min = min; - this.max = max; - } - visit(visitor) { - visitor.visitBinaryOperation(this); - } -} -class AstMin extends AstNode { - constructor(arg, max) { - super("max"); - this.arg = arg; - this.min = arg.min; - this.max = max; - } - visit(visitor) { - visitor.visitMin(this); - } -} -class AstVariable extends AstNode { - constructor(index, min, max) { - super("var"); - this.index = index; - this.min = min; - this.max = max; - } - visit(visitor) { - visitor.visitVariable(this); - } -} -class AstVariableDefinition extends AstNode { - constructor(variable, arg) { - super("definition"); - this.variable = variable; - this.arg = arg; - } - visit(visitor) { - visitor.visitVariableDefinition(this); - } -} -class ExpressionBuilderVisitor { - constructor() { - this.parts = []; - } - visitArgument(arg) { - this.parts.push("Math.max(", arg.min, ", Math.min(", arg.max, ", src[srcOffset + ", arg.index, "]))"); - } - visitVariable(variable) { - this.parts.push("v", variable.index); - } - visitLiteral(literal) { - this.parts.push(literal.number); - } - visitBinaryOperation(operation) { - this.parts.push("("); - operation.arg1.visit(this); - this.parts.push(" ", operation.op, " "); - operation.arg2.visit(this); - this.parts.push(")"); - } - visitVariableDefinition(definition) { - this.parts.push("var "); - definition.variable.visit(this); - this.parts.push(" = "); - definition.arg.visit(this); - this.parts.push(";"); - } - visitMin(max) { - this.parts.push("Math.min("); - max.arg.visit(this); - this.parts.push(", ", max.max, ")"); - } - toString() { - return this.parts.join(""); - } -} -function buildAddOperation(num1, num2) { - if (num2.type === "literal" && num2.number === 0) { - return num1; - } - if (num1.type === "literal" && num1.number === 0) { - return num2; - } - if (num2.type === "literal" && num1.type === "literal") { - return new AstLiteral(num1.number + num2.number); - } - return new AstBinaryOperation("+", num1, num2, num1.min + num2.min, num1.max + num2.max); -} -function buildMulOperation(num1, num2) { - if (num2.type === "literal") { - if (num2.number === 0) { - return new AstLiteral(0); - } else if (num2.number === 1) { - return num1; - } else if (num1.type === "literal") { - return new AstLiteral(num1.number * num2.number); - } - } - if (num1.type === "literal") { - if (num1.number === 0) { - return new AstLiteral(0); - } else if (num1.number === 1) { - return num2; - } - } - const min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); - const max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); - return new AstBinaryOperation("*", num1, num2, min, max); -} -function buildSubOperation(num1, num2) { - if (num2.type === "literal") { - if (num2.number === 0) { - return num1; - } else if (num1.type === "literal") { - return new AstLiteral(num1.number - num2.number); - } - } - if (num2.type === "binary" && num2.op === "-" && num1.type === "literal" && num1.number === 1 && num2.arg1.type === "literal" && num2.arg1.number === 1) { - return num2.arg2; - } - return new AstBinaryOperation("-", num1, num2, num1.min - num2.max, num1.max - num2.min); -} -function buildMinOperation(num1, max) { - if (num1.min >= max) { - return new AstLiteral(max); - } else if (num1.max <= max) { - return num1; - } - return new AstMin(num1, max); -} -class PostScriptCompiler { - compile(code, domain, range) { - const stack = []; - const instructions = []; - const inputSize = domain.length >> 1, - outputSize = range.length >> 1; - let lastRegister = 0; - let n, j; - let num1, num2, ast1, ast2, tmpVar, item; - for (let i = 0; i < inputSize; i++) { - stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1])); - } - for (let i = 0, ii = code.length; i < ii; i++) { - item = code[i]; - if (typeof item === "number") { - stack.push(new AstLiteral(item)); - continue; - } - switch (item) { - case "add": - if (stack.length < 2) { - return null; - } - num2 = stack.pop(); - num1 = stack.pop(); - stack.push(buildAddOperation(num1, num2)); - break; - case "cvr": - if (stack.length < 1) { - return null; - } - break; - case "mul": - if (stack.length < 2) { - return null; - } - num2 = stack.pop(); - num1 = stack.pop(); - stack.push(buildMulOperation(num1, num2)); - break; - case "sub": - if (stack.length < 2) { - return null; - } - num2 = stack.pop(); - num1 = stack.pop(); - stack.push(buildSubOperation(num1, num2)); - break; - case "exch": - if (stack.length < 2) { - return null; - } - ast1 = stack.pop(); - ast2 = stack.pop(); - stack.push(ast1, ast2); - break; - case "pop": - if (stack.length < 1) { - return null; - } - stack.pop(); - break; - case "index": - if (stack.length < 1) { - return null; - } - num1 = stack.pop(); - if (num1.type !== "literal") { - return null; - } - n = num1.number; - if (n < 0 || !Number.isInteger(n) || stack.length < n) { - return null; - } - ast1 = stack[stack.length - n - 1]; - if (ast1.type === "literal" || ast1.type === "var") { - stack.push(ast1); - break; - } - tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); - stack[stack.length - n - 1] = tmpVar; - stack.push(tmpVar); - instructions.push(new AstVariableDefinition(tmpVar, ast1)); - break; - case "dup": - if (stack.length < 1) { - return null; - } - if (typeof code[i + 1] === "number" && code[i + 2] === "gt" && code[i + 3] === i + 7 && code[i + 4] === "jz" && code[i + 5] === "pop" && code[i + 6] === code[i + 1]) { - num1 = stack.pop(); - stack.push(buildMinOperation(num1, code[i + 1])); - i += 6; - break; - } - ast1 = stack.at(-1); - if (ast1.type === "literal" || ast1.type === "var") { - stack.push(ast1); - break; - } - tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); - stack[stack.length - 1] = tmpVar; - stack.push(tmpVar); - instructions.push(new AstVariableDefinition(tmpVar, ast1)); - break; - case "roll": - if (stack.length < 2) { - return null; - } - num2 = stack.pop(); - num1 = stack.pop(); - if (num2.type !== "literal" || num1.type !== "literal") { - return null; - } - j = num2.number; - n = num1.number; - if (n <= 0 || !Number.isInteger(n) || !Number.isInteger(j) || stack.length < n) { - return null; - } - j = (j % n + n) % n; - if (j === 0) { - break; - } - stack.push(...stack.splice(stack.length - n, n - j)); - break; - default: - return null; - } - } - if (stack.length !== outputSize) { - return null; - } - const result = []; - for (const instruction of instructions) { - const statementBuilder = new ExpressionBuilderVisitor(); - instruction.visit(statementBuilder); - result.push(statementBuilder.toString()); - } - for (let i = 0, ii = stack.length; i < ii; i++) { - const expr = stack[i], - statementBuilder = new ExpressionBuilderVisitor(); - expr.visit(statementBuilder); - const min = range[i * 2], - max = range[i * 2 + 1]; - const out = [statementBuilder.toString()]; - if (min > expr.min) { - out.unshift("Math.max(", min, ", "); - out.push(")"); - } - if (max < expr.max) { - out.unshift("Math.min(", max, ", "); - out.push(")"); - } - out.unshift("dest[destOffset + ", i, "] = "); - out.push(";"); - result.push(out.join("")); - } - return result.join("\n"); - } -} -exports.PostScriptCompiler = PostScriptCompiler; - -/***/ }), -/* 58 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PostScriptParser = exports.PostScriptLexer = void 0; -var _util = __w_pdfjs_require__(2); -var _primitives = __w_pdfjs_require__(4); -var _core_utils = __w_pdfjs_require__(3); -class PostScriptParser { - constructor(lexer) { - this.lexer = lexer; - this.operators = []; - this.token = null; - this.prev = null; - } - nextToken() { - this.prev = this.token; - this.token = this.lexer.getToken(); - } - accept(type) { - if (this.token.type === type) { - this.nextToken(); - return true; - } - return false; - } - expect(type) { - if (this.accept(type)) { - return true; - } - throw new _util.FormatError(`Unexpected symbol: found ${this.token.type} expected ${type}.`); - } - parse() { - this.nextToken(); - this.expect(PostScriptTokenTypes.LBRACE); - this.parseBlock(); - this.expect(PostScriptTokenTypes.RBRACE); - return this.operators; - } - parseBlock() { - while (true) { - if (this.accept(PostScriptTokenTypes.NUMBER)) { - this.operators.push(this.prev.value); - } else if (this.accept(PostScriptTokenTypes.OPERATOR)) { - this.operators.push(this.prev.value); - } else if (this.accept(PostScriptTokenTypes.LBRACE)) { - this.parseCondition(); - } else { - return; - } - } - } - parseCondition() { - const conditionLocation = this.operators.length; - this.operators.push(null, null); - this.parseBlock(); - this.expect(PostScriptTokenTypes.RBRACE); - if (this.accept(PostScriptTokenTypes.IF)) { - this.operators[conditionLocation] = this.operators.length; - this.operators[conditionLocation + 1] = "jz"; - } else if (this.accept(PostScriptTokenTypes.LBRACE)) { - const jumpLocation = this.operators.length; - this.operators.push(null, null); - const endOfTrue = this.operators.length; - this.parseBlock(); - this.expect(PostScriptTokenTypes.RBRACE); - this.expect(PostScriptTokenTypes.IFELSE); - this.operators[jumpLocation] = this.operators.length; - this.operators[jumpLocation + 1] = "j"; - this.operators[conditionLocation] = endOfTrue; - this.operators[conditionLocation + 1] = "jz"; - } else { - throw new _util.FormatError("PS Function: error parsing conditional."); - } - } -} -exports.PostScriptParser = PostScriptParser; -const PostScriptTokenTypes = { - LBRACE: 0, - RBRACE: 1, - NUMBER: 2, - OPERATOR: 3, - IF: 4, - IFELSE: 5 -}; -class PostScriptToken { - static get opCache() { - return (0, _util.shadow)(this, "opCache", Object.create(null)); - } - constructor(type, value) { - this.type = type; - this.value = value; - } - static getOperator(op) { - return PostScriptToken.opCache[op] ||= new PostScriptToken(PostScriptTokenTypes.OPERATOR, op); - } - static get LBRACE() { - return (0, _util.shadow)(this, "LBRACE", new PostScriptToken(PostScriptTokenTypes.LBRACE, "{")); - } - static get RBRACE() { - return (0, _util.shadow)(this, "RBRACE", new PostScriptToken(PostScriptTokenTypes.RBRACE, "}")); - } - static get IF() { - return (0, _util.shadow)(this, "IF", new PostScriptToken(PostScriptTokenTypes.IF, "IF")); - } - static get IFELSE() { - return (0, _util.shadow)(this, "IFELSE", new PostScriptToken(PostScriptTokenTypes.IFELSE, "IFELSE")); - } -} -class PostScriptLexer { - constructor(stream) { - this.stream = stream; - this.nextChar(); - this.strBuf = []; - } - nextChar() { - return this.currentChar = this.stream.getByte(); - } - getToken() { - let comment = false; - let ch = this.currentChar; - while (true) { - if (ch < 0) { - return _primitives.EOF; - } - if (comment) { - if (ch === 0x0a || ch === 0x0d) { - comment = false; - } - } else if (ch === 0x25) { - comment = true; - } else if (!(0, _core_utils.isWhiteSpace)(ch)) { - break; - } - ch = this.nextChar(); - } - switch (ch | 0) { - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - case 0x38: - case 0x39: - case 0x2b: - case 0x2d: - case 0x2e: - return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber()); - case 0x7b: - this.nextChar(); - return PostScriptToken.LBRACE; - case 0x7d: - this.nextChar(); - return PostScriptToken.RBRACE; - } - const strBuf = this.strBuf; - strBuf.length = 0; - strBuf[0] = String.fromCharCode(ch); - while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5a || ch >= 0x61 && ch <= 0x7a)) { - strBuf.push(String.fromCharCode(ch)); - } - const str = strBuf.join(""); - switch (str.toLowerCase()) { - case "if": - return PostScriptToken.IF; - case "ifelse": - return PostScriptToken.IFELSE; - default: - return PostScriptToken.getOperator(str); - } - } - getNumber() { - let ch = this.currentChar; - const strBuf = this.strBuf; - strBuf.length = 0; - strBuf[0] = String.fromCharCode(ch); - while ((ch = this.nextChar()) >= 0) { - if (ch >= 0x30 && ch <= 0x39 || ch === 0x2d || ch === 0x2e) { - strBuf.push(String.fromCharCode(ch)); - } else { - break; - } - } - const value = parseFloat(strBuf.join("")); - if (isNaN(value)) { - throw new _util.FormatError(`Invalid floating point number: ${value}`); - } - return value; - } -} -exports.PostScriptLexer = PostScriptLexer; - -/***/ }), -/* 59 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.RegionalImageCache = exports.LocalTilingPatternCache = exports.LocalImageCache = exports.LocalGStateCache = exports.LocalFunctionCache = exports.LocalColorSpaceCache = exports.GlobalImageCache = void 0; -var _util = __w_pdfjs_require__(2); -var _primitives = __w_pdfjs_require__(4); -class BaseLocalCache { - constructor(options) { - if (this.constructor === BaseLocalCache) { - (0, _util.unreachable)("Cannot initialize BaseLocalCache."); - } - this._onlyRefs = options?.onlyRefs === true; - if (!this._onlyRefs) { - this._nameRefMap = new Map(); - this._imageMap = new Map(); - } - this._imageCache = new _primitives.RefSetCache(); - } - getByName(name) { - if (this._onlyRefs) { - (0, _util.unreachable)("Should not call `getByName` method."); - } - const ref = this._nameRefMap.get(name); - if (ref) { - return this.getByRef(ref); - } - return this._imageMap.get(name) || null; - } - getByRef(ref) { - return this._imageCache.get(ref) || null; - } - set(name, ref, data) { - (0, _util.unreachable)("Abstract method `set` called."); - } -} -class LocalImageCache extends BaseLocalCache { - set(name, ref = null, data) { - if (typeof name !== "string") { - throw new Error('LocalImageCache.set - expected "name" argument.'); - } - if (ref) { - if (this._imageCache.has(ref)) { - return; - } - this._nameRefMap.set(name, ref); - this._imageCache.put(ref, data); - return; - } - if (this._imageMap.has(name)) { - return; - } - this._imageMap.set(name, data); - } -} -exports.LocalImageCache = LocalImageCache; -class LocalColorSpaceCache extends BaseLocalCache { - set(name = null, ref = null, data) { - if (typeof name !== "string" && !ref) { - throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.'); - } - if (ref) { - if (this._imageCache.has(ref)) { - return; - } - if (name !== null) { - this._nameRefMap.set(name, ref); - } - this._imageCache.put(ref, data); - return; - } - if (this._imageMap.has(name)) { - return; - } - this._imageMap.set(name, data); - } -} -exports.LocalColorSpaceCache = LocalColorSpaceCache; -class LocalFunctionCache extends BaseLocalCache { - constructor(options) { - super({ - onlyRefs: true - }); - } - set(name = null, ref, data) { - if (!ref) { - throw new Error('LocalFunctionCache.set - expected "ref" argument.'); - } - if (this._imageCache.has(ref)) { - return; - } - this._imageCache.put(ref, data); - } -} -exports.LocalFunctionCache = LocalFunctionCache; -class LocalGStateCache extends BaseLocalCache { - set(name, ref = null, data) { - if (typeof name !== "string") { - throw new Error('LocalGStateCache.set - expected "name" argument.'); - } - if (ref) { - if (this._imageCache.has(ref)) { - return; - } - this._nameRefMap.set(name, ref); - this._imageCache.put(ref, data); - return; - } - if (this._imageMap.has(name)) { - return; - } - this._imageMap.set(name, data); - } -} -exports.LocalGStateCache = LocalGStateCache; -class LocalTilingPatternCache extends BaseLocalCache { - constructor(options) { - super({ - onlyRefs: true - }); - } - set(name = null, ref, data) { - if (!ref) { - throw new Error('LocalTilingPatternCache.set - expected "ref" argument.'); - } - if (this._imageCache.has(ref)) { - return; - } - this._imageCache.put(ref, data); - } -} -exports.LocalTilingPatternCache = LocalTilingPatternCache; -class RegionalImageCache extends BaseLocalCache { - constructor(options) { - super({ - onlyRefs: true - }); - } - set(name = null, ref, data) { - if (!ref) { - throw new Error('RegionalImageCache.set - expected "ref" argument.'); - } - if (this._imageCache.has(ref)) { - return; - } - this._imageCache.put(ref, data); - } -} -exports.RegionalImageCache = RegionalImageCache; -class GlobalImageCache { - static NUM_PAGES_THRESHOLD = 2; - static MIN_IMAGES_TO_CACHE = 10; - static MAX_BYTE_SIZE = 5 * _util.MAX_IMAGE_SIZE_TO_CACHE; - constructor() { - this._refCache = new _primitives.RefSetCache(); - this._imageCache = new _primitives.RefSetCache(); - } - get _byteSize() { - let byteSize = 0; - for (const imageData of this._imageCache) { - byteSize += imageData.byteSize; - } - return byteSize; - } - get _cacheLimitReached() { - if (this._imageCache.size < GlobalImageCache.MIN_IMAGES_TO_CACHE) { - return false; - } - if (this._byteSize < GlobalImageCache.MAX_BYTE_SIZE) { - return false; - } - return true; - } - shouldCache(ref, pageIndex) { - let pageIndexSet = this._refCache.get(ref); - if (!pageIndexSet) { - pageIndexSet = new Set(); - this._refCache.put(ref, pageIndexSet); - } - pageIndexSet.add(pageIndex); - if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) { - return false; - } - if (!this._imageCache.has(ref) && this._cacheLimitReached) { - return false; - } - return true; - } - addByteSize(ref, byteSize) { - const imageData = this._imageCache.get(ref); - if (!imageData) { - return; - } - if (imageData.byteSize) { - return; - } - imageData.byteSize = byteSize; - } - getData(ref, pageIndex) { - const pageIndexSet = this._refCache.get(ref); - if (!pageIndexSet) { - return null; - } - if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) { - return null; - } - const imageData = this._imageCache.get(ref); - if (!imageData) { - return null; - } - pageIndexSet.add(pageIndex); - return imageData; - } - setData(ref, data) { - if (!this._refCache.has(ref)) { - throw new Error('GlobalImageCache.setData - expected "shouldCache" to have been called.'); - } - if (this._imageCache.has(ref)) { - return; - } - if (this._cacheLimitReached) { - (0, _util.warn)("GlobalImageCache.setData - cache limit reached."); - return; - } - this._imageCache.put(ref, data); - } - clear(onlyData = false) { - if (!onlyData) { - this._refCache.clear(); - } - this._imageCache.clear(); - } -} -exports.GlobalImageCache = GlobalImageCache; - -/***/ }), -/* 60 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.bidi = bidi; -var _util = __w_pdfjs_require__(2); -const baseTypes = ["BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "S", "B", "S", "WS", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "B", "B", "B", "S", "WS", "ON", "ON", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "ON", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "BN", "BN", "BN", "BN", "BN", "BN", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "CS", "ON", "ET", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "L", "ON", "ON", "BN", "ON", "ON", "ET", "ET", "EN", "EN", "ON", "L", "ON", "ON", "ON", "EN", "L", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L"]; -const arabicTypes = ["AN", "AN", "AN", "AN", "AN", "AN", "ON", "ON", "AL", "ET", "ET", "AL", "CS", "AL", "ON", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "ET", "AN", "AN", "AL", "AL", "AL", "NSM", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "NSM", "NSM", "ON", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "AL", "AL", "AL", "AL", "AL", "AL"]; -function isOdd(i) { - return (i & 1) !== 0; -} -function isEven(i) { - return (i & 1) === 0; -} -function findUnequal(arr, start, value) { - let j, jj; - for (j = start, jj = arr.length; j < jj; ++j) { - if (arr[j] !== value) { - return j; - } - } - return j; -} -function setValues(arr, start, end, value) { - for (let j = start; j < end; ++j) { - arr[j] = value; - } -} -function reverseValues(arr, start, end) { - for (let i = start, j = end - 1; i < j; ++i, --j) { - const temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; - } -} -function createBidiText(str, isLTR, vertical = false) { - let dir = "ltr"; - if (vertical) { - dir = "ttb"; - } else if (!isLTR) { - dir = "rtl"; - } - return { - str, - dir - }; -} -const chars = []; -const types = []; -function bidi(str, startLevel = -1, vertical = false) { - let isLTR = true; - const strLength = str.length; - if (strLength === 0 || vertical) { - return createBidiText(str, isLTR, vertical); - } - chars.length = strLength; - types.length = strLength; - let numBidi = 0; - let i, ii; - for (i = 0; i < strLength; ++i) { - chars[i] = str.charAt(i); - const charCode = str.charCodeAt(i); - let charType = "L"; - if (charCode <= 0x00ff) { - charType = baseTypes[charCode]; - } else if (0x0590 <= charCode && charCode <= 0x05f4) { - charType = "R"; - } else if (0x0600 <= charCode && charCode <= 0x06ff) { - charType = arabicTypes[charCode & 0xff]; - if (!charType) { - (0, _util.warn)("Bidi: invalid Unicode character " + charCode.toString(16)); - } - } else if (0x0700 <= charCode && charCode <= 0x08ac || 0xfb50 <= charCode && charCode <= 0xfdff || 0xfe70 <= charCode && charCode <= 0xfeff) { - charType = "AL"; - } - if (charType === "R" || charType === "AL" || charType === "AN") { - numBidi++; - } - types[i] = charType; - } - if (numBidi === 0) { - isLTR = true; - return createBidiText(str, isLTR); - } - if (startLevel === -1) { - if (numBidi / strLength < 0.3 && strLength > 4) { - isLTR = true; - startLevel = 0; - } else { - isLTR = false; - startLevel = 1; - } - } - const levels = []; - for (i = 0; i < strLength; ++i) { - levels[i] = startLevel; - } - const e = isOdd(startLevel) ? "R" : "L"; - const sor = e; - const eor = sor; - let lastType = sor; - for (i = 0; i < strLength; ++i) { - if (types[i] === "NSM") { - types[i] = lastType; - } else { - lastType = types[i]; - } - } - lastType = sor; - let t; - for (i = 0; i < strLength; ++i) { - t = types[i]; - if (t === "EN") { - types[i] = lastType === "AL" ? "AN" : "EN"; - } else if (t === "R" || t === "L" || t === "AL") { - lastType = t; - } - } - for (i = 0; i < strLength; ++i) { - t = types[i]; - if (t === "AL") { - types[i] = "R"; - } - } - for (i = 1; i < strLength - 1; ++i) { - if (types[i] === "ES" && types[i - 1] === "EN" && types[i + 1] === "EN") { - types[i] = "EN"; - } - if (types[i] === "CS" && (types[i - 1] === "EN" || types[i - 1] === "AN") && types[i + 1] === types[i - 1]) { - types[i] = types[i - 1]; - } - } - for (i = 0; i < strLength; ++i) { - if (types[i] === "EN") { - for (let j = i - 1; j >= 0; --j) { - if (types[j] !== "ET") { - break; - } - types[j] = "EN"; - } - for (let j = i + 1; j < strLength; ++j) { - if (types[j] !== "ET") { - break; - } - types[j] = "EN"; - } - } - } - for (i = 0; i < strLength; ++i) { - t = types[i]; - if (t === "WS" || t === "ES" || t === "ET" || t === "CS") { - types[i] = "ON"; - } - } - lastType = sor; - for (i = 0; i < strLength; ++i) { - t = types[i]; - if (t === "EN") { - types[i] = lastType === "L" ? "L" : "EN"; - } else if (t === "R" || t === "L") { - lastType = t; - } - } - for (i = 0; i < strLength; ++i) { - if (types[i] === "ON") { - const end = findUnequal(types, i + 1, "ON"); - let before = sor; - if (i > 0) { - before = types[i - 1]; - } - let after = eor; - if (end + 1 < strLength) { - after = types[end + 1]; - } - if (before !== "L") { - before = "R"; - } - if (after !== "L") { - after = "R"; - } - if (before === after) { - setValues(types, i, end, before); - } - i = end - 1; - } - } - for (i = 0; i < strLength; ++i) { - if (types[i] === "ON") { - types[i] = e; - } - } - for (i = 0; i < strLength; ++i) { - t = types[i]; - if (isEven(levels[i])) { - if (t === "R") { - levels[i] += 1; - } else if (t === "AN" || t === "EN") { - levels[i] += 2; - } - } else if (t === "L" || t === "AN" || t === "EN") { - levels[i] += 1; - } - } - let highestLevel = -1; - let lowestOddLevel = 99; - let level; - for (i = 0, ii = levels.length; i < ii; ++i) { - level = levels[i]; - if (highestLevel < level) { - highestLevel = level; - } - if (lowestOddLevel > level && isOdd(level)) { - lowestOddLevel = level; - } - } - for (level = highestLevel; level >= lowestOddLevel; --level) { - let start = -1; - for (i = 0, ii = levels.length; i < ii; ++i) { - if (levels[i] < level) { - if (start >= 0) { - reverseValues(chars, start, i); - start = -1; - } - } else if (start < 0) { - start = i; - } - } - if (start >= 0) { - reverseValues(chars, start, levels.length); - } - } - for (i = 0, ii = chars.length; i < ii; ++i) { - const ch = chars[i]; - if (ch === "<" || ch === ">") { - chars[i] = ""; - } - } - return createBidiText(chars.join(""), isLTR); -} - -/***/ }), -/* 61 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getFontSubstitution = getFontSubstitution; -var _fonts_utils = __w_pdfjs_require__(38); -var _core_utils = __w_pdfjs_require__(3); -const NORMAL = { - style: "normal", - weight: "normal" -}; -const BOLD = { - style: "normal", - weight: "bold" -}; -const ITALIC = { - style: "italic", - weight: "normal" -}; -const BOLDITALIC = { - style: "italic", - weight: "bold" -}; -const substitutionMap = new Map([["Times-Roman", { - local: ["Times New Roman", "Times-Roman", "Times", "Liberation Serif", "Nimbus Roman", "Nimbus Roman L", "Tinos", "Thorndale", "TeX Gyre Termes", "FreeSerif", "DejaVu Serif", "Bitstream Vera Serif", "Ubuntu"], - style: NORMAL, - ultimate: "serif" -}], ["Times-Bold", { - alias: "Times-Roman", - style: BOLD, - ultimate: "serif" -}], ["Times-Italic", { - alias: "Times-Roman", - style: ITALIC, - ultimate: "serif" -}], ["Times-BoldItalic", { - alias: "Times-Roman", - style: BOLDITALIC, - ultimate: "serif" -}], ["Helvetica", { - local: ["Helvetica", "Helvetica Neue", "Arial", "Arial Nova", "Liberation Sans", "Arimo", "Nimbus Sans", "Nimbus Sans L", "A030", "TeX Gyre Heros", "FreeSans", "DejaVu Sans", "Albany", "Bitstream Vera Sans", "Arial Unicode MS", "Microsoft Sans Serif", "Apple Symbols", "Cantarell"], - path: "LiberationSans-Regular.ttf", - style: NORMAL, - ultimate: "sans-serif" -}], ["Helvetica-Bold", { - alias: "Helvetica", - path: "LiberationSans-Bold.ttf", - style: BOLD, - ultimate: "sans-serif" -}], ["Helvetica-Oblique", { - alias: "Helvetica", - path: "LiberationSans-Italic.ttf", - style: ITALIC, - ultimate: "sans-serif" -}], ["Helvetica-BoldOblique", { - alias: "Helvetica", - path: "LiberationSans-BoldItalic.ttf", - style: BOLDITALIC, - ultimate: "sans-serif" -}], ["Courier", { - local: ["Courier", "Courier New", "Liberation Mono", "Nimbus Mono", "Nimbus Mono L", "Cousine", "Cumberland", "TeX Gyre Cursor", "FreeMono"], - style: NORMAL, - ultimate: "monospace" -}], ["Courier-Bold", { - alias: "Courier", - style: BOLD, - ultimate: "monospace" -}], ["Courier-Oblique", { - alias: "Courier", - style: ITALIC, - ultimate: "monospace" -}], ["Courier-BoldOblique", { - alias: "Courier", - style: BOLDITALIC, - ultimate: "monospace" -}], ["ArialBlack", { - local: ["Arial Black"], - style: { - style: "normal", - weight: "900" - }, - fallback: "Helvetica-Bold" -}], ["ArialBlack-Bold", { - alias: "ArialBlack" -}], ["ArialBlack-Italic", { - alias: "ArialBlack", - style: { - style: "italic", - weight: "900" - }, - fallback: "Helvetica-BoldOblique" -}], ["ArialBlack-BoldItalic", { - alias: "ArialBlack-Italic" -}], ["ArialNarrow", { - local: ["Arial Narrow", "Liberation Sans Narrow", "Helvetica Condensed", "Nimbus Sans Narrow", "TeX Gyre Heros Cn"], - style: NORMAL, - fallback: "Helvetica" -}], ["ArialNarrow-Bold", { - alias: "ArialNarrow", - style: BOLD, - fallback: "Helvetica-Bold" -}], ["ArialNarrow-Italic", { - alias: "ArialNarrow", - style: ITALIC, - fallback: "Helvetica-Oblique" -}], ["ArialNarrow-BoldItalic", { - alias: "ArialNarrow", - style: BOLDITALIC, - fallback: "Helvetica-BoldOblique" -}], ["Calibri", { - local: ["Calibri", "Carlito"], - style: NORMAL, - fallback: "Helvetica" -}], ["Calibri-Bold", { - alias: "Calibri", - style: BOLD, - fallback: "Helvetica-Bold" -}], ["Calibri-Italic", { - alias: "Calibri", - style: ITALIC, - fallback: "Helvetica-Oblique" -}], ["Calibri-BoldItalic", { - alias: "Calibri", - style: BOLDITALIC, - fallback: "Helvetica-BoldOblique" -}], ["Wingdings", { - local: ["Wingdings", "URW Dingbats"], - style: NORMAL -}], ["Wingdings-Regular", { - alias: "Wingdings" -}], ["Wingdings-Bold", { - alias: "Wingdings" -}]]); -const fontAliases = new Map([["Arial-Black", "ArialBlack"]]); -function getStyleToAppend(style) { - switch (style) { - case BOLD: - return "Bold"; - case ITALIC: - return "Italic"; - case BOLDITALIC: - return "Bold Italic"; - default: - if (style?.weight === "bold") { - return "Bold"; - } - if (style?.style === "italic") { - return "Italic"; - } - } - return ""; -} -function generateFont({ - alias, - local, - path, - fallback, - style, - ultimate -}, src, localFontPath, useFallback = true, usePath = true, append = "") { - const result = { - style: null, - ultimate: null - }; - if (local) { - const extra = append ? ` ${append}` : ""; - for (const name of local) { - src.push(`local(${name}${extra})`); - } - } - if (alias) { - const substitution = substitutionMap.get(alias); - const aliasAppend = append || getStyleToAppend(style); - Object.assign(result, generateFont(substitution, src, localFontPath, useFallback && !fallback, usePath && !path, aliasAppend)); - } - if (style) { - result.style = style; - } - if (ultimate) { - result.ultimate = ultimate; - } - if (useFallback && fallback) { - const fallbackInfo = substitutionMap.get(fallback); - const { - ultimate: fallbackUltimate - } = generateFont(fallbackInfo, src, localFontPath, useFallback, usePath && !path, append); - result.ultimate ||= fallbackUltimate; - } - if (usePath && path && localFontPath) { - src.push(`url(${localFontPath}${path})`); - } - return result; -} -function getFontSubstitution(systemFontCache, idFactory, localFontPath, baseFontName, standardFontName) { - baseFontName = (0, _fonts_utils.normalizeFontName)(baseFontName); - const key = baseFontName; - let substitutionInfo = systemFontCache.get(key); - if (substitutionInfo) { - return substitutionInfo; - } - let substitution = substitutionMap.get(baseFontName); - if (!substitution) { - for (const [alias, subst] of fontAliases) { - if (baseFontName.startsWith(alias)) { - baseFontName = `${subst}${baseFontName.substring(alias.length)}`; - substitution = substitutionMap.get(baseFontName); - break; - } - } - } - let mustAddBaseFont = false; - if (!substitution) { - substitution = substitutionMap.get(standardFontName); - mustAddBaseFont = true; - } - const loadedName = `${idFactory.getDocId()}_s${idFactory.createFontId()}`; - if (!substitution) { - if (!(0, _core_utils.validateFontName)(baseFontName)) { - systemFontCache.set(key, null); - return null; - } - const bold = /bold/gi.test(baseFontName); - const italic = /oblique|italic/gi.test(baseFontName); - const style = bold && italic && BOLDITALIC || bold && BOLD || italic && ITALIC || NORMAL; - substitutionInfo = { - css: loadedName, - guessFallback: true, - loadedName, - baseFontName, - src: `local(${baseFontName})`, - style - }; - systemFontCache.set(key, substitutionInfo); - return substitutionInfo; - } - const src = []; - if (mustAddBaseFont && (0, _core_utils.validateFontName)(baseFontName)) { - src.push(`local(${baseFontName})`); - } - const { - style, - ultimate - } = generateFont(substitution, src, localFontPath); - const guessFallback = ultimate === null; - const fallback = guessFallback ? "" : `,${ultimate}`; - substitutionInfo = { - css: `${loadedName}${fallback}`, - guessFallback, - loadedName, - baseFontName, - src: src.join(","), - style - }; - systemFontCache.set(key, substitutionInfo); - return substitutionInfo; -} - -/***/ }), -/* 62 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ImageResizer = void 0; -var _util = __w_pdfjs_require__(2); -const MIN_IMAGE_DIM = 2048; -const MAX_IMAGE_DIM = 65537; -const MAX_ERROR = 128; -class ImageResizer { - constructor(imgData, isMask) { - this._imgData = imgData; - this._isMask = isMask; - } - static needsToBeResized(width, height) { - if (width <= this._goodSquareLength && height <= this._goodSquareLength) { - return false; - } - const { - MAX_DIM - } = this; - if (width > MAX_DIM || height > MAX_DIM) { - return true; - } - const area = width * height; - if (this._hasMaxArea) { - return area > this.MAX_AREA; - } - if (area < this._goodSquareLength ** 2) { - return false; - } - if (this._areGoodDims(width, height)) { - this._goodSquareLength = Math.max(this._goodSquareLength, Math.floor(Math.sqrt(width * height))); - return false; - } - this._goodSquareLength = this._guessMax(this._goodSquareLength, MAX_DIM, MAX_ERROR, 0); - const maxArea = this.MAX_AREA = this._goodSquareLength ** 2; - return area > maxArea; - } - static get MAX_DIM() { - return (0, _util.shadow)(this, "MAX_DIM", this._guessMax(MIN_IMAGE_DIM, MAX_IMAGE_DIM, 0, 1)); - } - static get MAX_AREA() { - this._hasMaxArea = true; - return (0, _util.shadow)(this, "MAX_AREA", this._guessMax(ImageResizer._goodSquareLength, this.MAX_DIM, MAX_ERROR, 0) ** 2); - } - static set MAX_AREA(area) { - if (area >= 0) { - this._hasMaxArea = true; - (0, _util.shadow)(this, "MAX_AREA", area); - } - } - static setMaxArea(area) { - if (!this._hasMaxArea) { - this.MAX_AREA = area >> 2; - } - } - static _areGoodDims(width, height) { - try { - const canvas = new OffscreenCanvas(width, height); - const ctx = canvas.getContext("2d"); - ctx.fillRect(0, 0, 1, 1); - const opacity = ctx.getImageData(0, 0, 1, 1).data[3]; - canvas.width = canvas.height = 1; - return opacity !== 0; - } catch { - return false; - } - } - static _guessMax(start, end, tolerance, defaultHeight) { - while (start + tolerance + 1 < end) { - const middle = Math.floor((start + end) / 2); - const height = defaultHeight || middle; - if (this._areGoodDims(middle, height)) { - start = middle; - } else { - end = middle; - } - } - return start; - } - static async createImage(imgData, isMask = false) { - return new ImageResizer(imgData, isMask)._createImage(); - } - async _createImage() { - const data = this._encodeBMP(); - const blob = new Blob([data.buffer], { - type: "image/bmp" - }); - const bitmapPromise = createImageBitmap(blob); - const { - MAX_AREA, - MAX_DIM - } = ImageResizer; - const { - _imgData: imgData - } = this; - const { - width, - height - } = imgData; - const minFactor = Math.max(width / MAX_DIM, height / MAX_DIM, Math.sqrt(width * height / MAX_AREA)); - const firstFactor = Math.max(minFactor, 2); - const factor = Math.round(10 * (minFactor + 1.25)) / 10 / firstFactor; - const N = Math.floor(Math.log2(factor)); - const steps = new Array(N + 2).fill(2); - steps[0] = firstFactor; - steps.splice(-1, 1, factor / (1 << N)); - let newWidth = width; - let newHeight = height; - let bitmap = await bitmapPromise; - for (const step of steps) { - const prevWidth = newWidth; - const prevHeight = newHeight; - newWidth = Math.floor(newWidth / step) - 1; - newHeight = Math.floor(newHeight / step) - 1; - const canvas = new OffscreenCanvas(newWidth, newHeight); - const ctx = canvas.getContext("2d"); - ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight); - bitmap = canvas.transferToImageBitmap(); - } - imgData.data = null; - imgData.bitmap = bitmap; - imgData.width = newWidth; - imgData.height = newHeight; - return imgData; - } - _encodeBMP() { - const { - width, - height, - kind - } = this._imgData; - let data = this._imgData.data; - let bitPerPixel; - let colorTable = new Uint8Array(0); - let maskTable = colorTable; - let compression = 0; - switch (kind) { - case _util.ImageKind.GRAYSCALE_1BPP: - { - bitPerPixel = 1; - colorTable = new Uint8Array(this._isMask ? [255, 255, 255, 255, 0, 0, 0, 0] : [0, 0, 0, 0, 255, 255, 255, 255]); - const rowLen = width + 7 >> 3; - const rowSize = rowLen + 3 & -4; - if (rowLen !== rowSize) { - const newData = new Uint8Array(rowSize * height); - let k = 0; - for (let i = 0, ii = height * rowLen; i < ii; i += rowLen, k += rowSize) { - newData.set(data.subarray(i, i + rowLen), k); - } - data = newData; - } - break; - } - case _util.ImageKind.RGB_24BPP: - { - bitPerPixel = 24; - if (width & 3) { - const rowLen = 3 * width; - const rowSize = rowLen + 3 & -4; - const extraLen = rowSize - rowLen; - const newData = new Uint8Array(rowSize * height); - let k = 0; - for (let i = 0, ii = height * rowLen; i < ii; i += rowLen) { - const row = data.subarray(i, i + rowLen); - for (let j = 0; j < rowLen; j += 3) { - newData[k++] = row[j + 2]; - newData[k++] = row[j + 1]; - newData[k++] = row[j]; - } - k += extraLen; - } - data = newData; - } else { - for (let i = 0, ii = data.length; i < ii; i += 3) { - const tmp = data[i]; - data[i] = data[i + 2]; - data[i + 2] = tmp; - } - } - break; - } - case _util.ImageKind.RGBA_32BPP: - bitPerPixel = 32; - compression = 3; - maskTable = new Uint8Array(4 + 4 + 4 + 4 + 52); - const view = new DataView(maskTable.buffer); - if (_util.FeatureTest.isLittleEndian) { - view.setUint32(0, 0x000000ff, true); - view.setUint32(4, 0x0000ff00, true); - view.setUint32(8, 0x00ff0000, true); - view.setUint32(12, 0xff000000, true); - } else { - view.setUint32(0, 0xff000000, true); - view.setUint32(4, 0x00ff0000, true); - view.setUint32(8, 0x0000ff00, true); - view.setUint32(12, 0x000000ff, true); - } - break; - default: - throw new Error("invalid format"); - } - let i = 0; - const headerLength = 40 + maskTable.length; - const fileLength = 14 + headerLength + colorTable.length + data.length; - const bmpData = new Uint8Array(fileLength); - const view = new DataView(bmpData.buffer); - view.setUint16(i, 0x4d42, true); - i += 2; - view.setUint32(i, fileLength, true); - i += 4; - view.setUint32(i, 0, true); - i += 4; - view.setUint32(i, 14 + headerLength + colorTable.length, true); - i += 4; - view.setUint32(i, headerLength, true); - i += 4; - view.setInt32(i, width, true); - i += 4; - view.setInt32(i, -height, true); - i += 4; - view.setUint16(i, 1, true); - i += 2; - view.setUint16(i, bitPerPixel, true); - i += 2; - view.setUint32(i, compression, true); - i += 4; - view.setUint32(i, 0, true); - i += 4; - view.setInt32(i, 0, true); - i += 4; - view.setInt32(i, 0, true); - i += 4; - view.setUint32(i, colorTable.length / 4, true); - i += 4; - view.setUint32(i, 0, true); - i += 4; - bmpData.set(maskTable, i); - i += maskTable.length; - bmpData.set(colorTable, i); - i += colorTable.length; - bmpData.set(data, i); - return bmpData; - } -} -exports.ImageResizer = ImageResizer; -ImageResizer._goodSquareLength = MIN_IMAGE_DIM; - -/***/ }), -/* 63 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.MurmurHash3_64 = void 0; -var _util = __w_pdfjs_require__(2); -const SEED = 0xc3d2e1f0; -const MASK_HIGH = 0xffff0000; -const MASK_LOW = 0xffff; -class MurmurHash3_64 { - constructor(seed) { - this.h1 = seed ? seed & 0xffffffff : SEED; - this.h2 = seed ? seed & 0xffffffff : SEED; - } - update(input) { - let data, length; - if (typeof input === "string") { - data = new Uint8Array(input.length * 2); - length = 0; - for (let i = 0, ii = input.length; i < ii; i++) { - const code = input.charCodeAt(i); - if (code <= 0xff) { - data[length++] = code; - } else { - data[length++] = code >>> 8; - data[length++] = code & 0xff; - } - } - } else if ((0, _util.isArrayBuffer)(input)) { - data = input.slice(); - length = data.byteLength; - } else { - throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array."); - } - const blockCounts = length >> 2; - const tailLength = length - blockCounts * 4; - const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); - let k1 = 0, - k2 = 0; - let h1 = this.h1, - h2 = this.h2; - const C1 = 0xcc9e2d51, - C2 = 0x1b873593; - const C1_LOW = C1 & MASK_LOW, - C2_LOW = C2 & MASK_LOW; - for (let i = 0; i < blockCounts; i++) { - if (i & 1) { - k1 = dataUint32[i]; - k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; - k1 = k1 << 15 | k1 >>> 17; - k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; - h1 ^= k1; - h1 = h1 << 13 | h1 >>> 19; - h1 = h1 * 5 + 0xe6546b64; - } else { - k2 = dataUint32[i]; - k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; - k2 = k2 << 15 | k2 >>> 17; - k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; - h2 ^= k2; - h2 = h2 << 13 | h2 >>> 19; - h2 = h2 * 5 + 0xe6546b64; - } - } - k1 = 0; - switch (tailLength) { - case 3: - k1 ^= data[blockCounts * 4 + 2] << 16; - case 2: - k1 ^= data[blockCounts * 4 + 1] << 8; - case 1: - k1 ^= data[blockCounts * 4]; - k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; - k1 = k1 << 15 | k1 >>> 17; - k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; - if (blockCounts & 1) { - h1 ^= k1; - } else { - h2 ^= k1; - } - } - this.h1 = h1; - this.h2 = h2; - } - hexdigest() { - let h1 = this.h1, - h2 = this.h2; - h1 ^= h2 >>> 1; - h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW; - h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16; - h1 ^= h2 >>> 1; - h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW; - h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16; - h1 ^= h2 >>> 1; - return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0"); - } -} -exports.MurmurHash3_64 = MurmurHash3_64; - -/***/ }), -/* 64 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.OperatorList = void 0; -var _util = __w_pdfjs_require__(2); -function addState(parentState, pattern, checkFn, iterateFn, processFn) { - let state = parentState; - for (let i = 0, ii = pattern.length - 1; i < ii; i++) { - const item = pattern[i]; - state = state[item] ||= []; - } - state[pattern.at(-1)] = { - checkFn, - iterateFn, - processFn - }; -} -const InitialState = []; -addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) { - const fnArray = context.fnArray; - const iFirstSave = context.iCurr - 3; - const pos = (i - iFirstSave) % 4; - switch (pos) { - case 0: - return fnArray[i] === _util.OPS.save; - case 1: - return fnArray[i] === _util.OPS.transform; - case 2: - return fnArray[i] === _util.OPS.paintInlineImageXObject; - case 3: - return fnArray[i] === _util.OPS.restore; - } - throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`); -}, function foundInlineImageGroup(context, i) { - const MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10; - const MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200; - const MAX_WIDTH = 1000; - const IMAGE_PADDING = 1; - const fnArray = context.fnArray, - argsArray = context.argsArray; - const curr = context.iCurr; - const iFirstSave = curr - 3; - const iFirstTransform = curr - 2; - const iFirstPIIXO = curr - 1; - const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK); - if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) { - return i - (i - iFirstSave) % 4; - } - let maxX = 0; - const map = []; - let maxLineHeight = 0; - let currentX = IMAGE_PADDING, - currentY = IMAGE_PADDING; - for (let q = 0; q < count; q++) { - const transform = argsArray[iFirstTransform + (q << 2)]; - const img = argsArray[iFirstPIIXO + (q << 2)][0]; - if (currentX + img.width > MAX_WIDTH) { - maxX = Math.max(maxX, currentX); - currentY += maxLineHeight + 2 * IMAGE_PADDING; - currentX = 0; - maxLineHeight = 0; - } - map.push({ - transform, - x: currentX, - y: currentY, - w: img.width, - h: img.height - }); - currentX += img.width + 2 * IMAGE_PADDING; - maxLineHeight = Math.max(maxLineHeight, img.height); - } - const imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING; - const imgHeight = currentY + maxLineHeight + IMAGE_PADDING; - const imgData = new Uint8Array(imgWidth * imgHeight * 4); - const imgRowSize = imgWidth << 2; - for (let q = 0; q < count; q++) { - const data = argsArray[iFirstPIIXO + (q << 2)][0].data; - const rowSize = map[q].w << 2; - let dataOffset = 0; - let offset = map[q].x + map[q].y * imgWidth << 2; - imgData.set(data.subarray(0, rowSize), offset - imgRowSize); - for (let k = 0, kk = map[q].h; k < kk; k++) { - imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset); - dataOffset += rowSize; - offset += imgRowSize; - } - imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset); - while (offset >= 0) { - data[offset - 4] = data[offset]; - data[offset - 3] = data[offset + 1]; - data[offset - 2] = data[offset + 2]; - data[offset - 1] = data[offset + 3]; - data[offset + rowSize] = data[offset + rowSize - 4]; - data[offset + rowSize + 1] = data[offset + rowSize - 3]; - data[offset + rowSize + 2] = data[offset + rowSize - 2]; - data[offset + rowSize + 3] = data[offset + rowSize - 1]; - offset -= imgRowSize; - } - } - const img = { - width: imgWidth, - height: imgHeight - }; - if (context.isOffscreenCanvasSupported) { - const canvas = new OffscreenCanvas(imgWidth, imgHeight); - const ctx = canvas.getContext("2d"); - ctx.putImageData(new ImageData(new Uint8ClampedArray(imgData.buffer), imgWidth, imgHeight), 0, 0); - img.bitmap = canvas.transferToImageBitmap(); - img.data = null; - } else { - img.kind = _util.ImageKind.RGBA_32BPP; - img.data = imgData; - } - fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup); - argsArray.splice(iFirstSave, count * 4, [img, map]); - return iFirstSave + 1; -}); -addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) { - const fnArray = context.fnArray; - const iFirstSave = context.iCurr - 3; - const pos = (i - iFirstSave) % 4; - switch (pos) { - case 0: - return fnArray[i] === _util.OPS.save; - case 1: - return fnArray[i] === _util.OPS.transform; - case 2: - return fnArray[i] === _util.OPS.paintImageMaskXObject; - case 3: - return fnArray[i] === _util.OPS.restore; - } - throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`); -}, function foundImageMaskGroup(context, i) { - const MIN_IMAGES_IN_MASKS_BLOCK = 10; - const MAX_IMAGES_IN_MASKS_BLOCK = 100; - const MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000; - const fnArray = context.fnArray, - argsArray = context.argsArray; - const curr = context.iCurr; - const iFirstSave = curr - 3; - const iFirstTransform = curr - 2; - const iFirstPIMXO = curr - 1; - let count = Math.floor((i - iFirstSave) / 4); - if (count < MIN_IMAGES_IN_MASKS_BLOCK) { - return i - (i - iFirstSave) % 4; - } - let isSameImage = false; - let iTransform, transformArgs; - const firstPIMXOArg0 = argsArray[iFirstPIMXO][0]; - const firstTransformArg0 = argsArray[iFirstTransform][0], - firstTransformArg1 = argsArray[iFirstTransform][1], - firstTransformArg2 = argsArray[iFirstTransform][2], - firstTransformArg3 = argsArray[iFirstTransform][3]; - if (firstTransformArg1 === firstTransformArg2) { - isSameImage = true; - iTransform = iFirstTransform + 4; - let iPIMXO = iFirstPIMXO + 4; - for (let q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) { - transformArgs = argsArray[iTransform]; - if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== firstTransformArg1 || transformArgs[2] !== firstTransformArg2 || transformArgs[3] !== firstTransformArg3) { - if (q < MIN_IMAGES_IN_MASKS_BLOCK) { - isSameImage = false; - } else { - count = q; - } - break; - } - } - } - if (isSameImage) { - count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK); - const positions = new Float32Array(count * 2); - iTransform = iFirstTransform; - for (let q = 0; q < count; q++, iTransform += 4) { - transformArgs = argsArray[iTransform]; - positions[q << 1] = transformArgs[4]; - positions[(q << 1) + 1] = transformArgs[5]; - } - fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat); - argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg1, firstTransformArg2, firstTransformArg3, positions]); - } else { - count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK); - const images = []; - for (let q = 0; q < count; q++) { - transformArgs = argsArray[iFirstTransform + (q << 2)]; - const maskParams = argsArray[iFirstPIMXO + (q << 2)][0]; - images.push({ - data: maskParams.data, - width: maskParams.width, - height: maskParams.height, - interpolate: maskParams.interpolate, - count: maskParams.count, - transform: transformArgs - }); - } - fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup); - argsArray.splice(iFirstSave, count * 4, [images]); - } - return iFirstSave + 1; -}); -addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) { - const argsArray = context.argsArray; - const iFirstTransform = context.iCurr - 2; - return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0; -}, function iterateImageGroup(context, i) { - const fnArray = context.fnArray, - argsArray = context.argsArray; - const iFirstSave = context.iCurr - 3; - const pos = (i - iFirstSave) % 4; - switch (pos) { - case 0: - return fnArray[i] === _util.OPS.save; - case 1: - if (fnArray[i] !== _util.OPS.transform) { - return false; - } - const iFirstTransform = context.iCurr - 2; - const firstTransformArg0 = argsArray[iFirstTransform][0]; - const firstTransformArg3 = argsArray[iFirstTransform][3]; - if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) { - return false; - } - return true; - case 2: - if (fnArray[i] !== _util.OPS.paintImageXObject) { - return false; - } - const iFirstPIXO = context.iCurr - 1; - const firstPIXOArg0 = argsArray[iFirstPIXO][0]; - if (argsArray[i][0] !== firstPIXOArg0) { - return false; - } - return true; - case 3: - return fnArray[i] === _util.OPS.restore; - } - throw new Error(`iterateImageGroup - invalid pos: ${pos}`); -}, function (context, i) { - const MIN_IMAGES_IN_BLOCK = 3; - const MAX_IMAGES_IN_BLOCK = 1000; - const fnArray = context.fnArray, - argsArray = context.argsArray; - const curr = context.iCurr; - const iFirstSave = curr - 3; - const iFirstTransform = curr - 2; - const iFirstPIXO = curr - 1; - const firstPIXOArg0 = argsArray[iFirstPIXO][0]; - const firstTransformArg0 = argsArray[iFirstTransform][0]; - const firstTransformArg3 = argsArray[iFirstTransform][3]; - const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK); - if (count < MIN_IMAGES_IN_BLOCK) { - return i - (i - iFirstSave) % 4; - } - const positions = new Float32Array(count * 2); - let iTransform = iFirstTransform; - for (let q = 0; q < count; q++, iTransform += 4) { - const transformArgs = argsArray[iTransform]; - positions[q << 1] = transformArgs[4]; - positions[(q << 1) + 1] = transformArgs[5]; - } - const args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions]; - fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat); - argsArray.splice(iFirstSave, count * 4, args); - return iFirstSave + 1; -}); -addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) { - const fnArray = context.fnArray, - argsArray = context.argsArray; - const iFirstSave = context.iCurr - 4; - const pos = (i - iFirstSave) % 5; - switch (pos) { - case 0: - return fnArray[i] === _util.OPS.beginText; - case 1: - return fnArray[i] === _util.OPS.setFont; - case 2: - return fnArray[i] === _util.OPS.setTextMatrix; - case 3: - if (fnArray[i] !== _util.OPS.showText) { - return false; - } - const iFirstSetFont = context.iCurr - 3; - const firstSetFontArg0 = argsArray[iFirstSetFont][0]; - const firstSetFontArg1 = argsArray[iFirstSetFont][1]; - if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) { - return false; - } - return true; - case 4: - return fnArray[i] === _util.OPS.endText; - } - throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`); -}, function (context, i) { - const MIN_CHARS_IN_BLOCK = 3; - const MAX_CHARS_IN_BLOCK = 1000; - const fnArray = context.fnArray, - argsArray = context.argsArray; - const curr = context.iCurr; - const iFirstBeginText = curr - 4; - const iFirstSetFont = curr - 3; - const iFirstSetTextMatrix = curr - 2; - const iFirstShowText = curr - 1; - const iFirstEndText = curr; - const firstSetFontArg0 = argsArray[iFirstSetFont][0]; - const firstSetFontArg1 = argsArray[iFirstSetFont][1]; - let count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK); - if (count < MIN_CHARS_IN_BLOCK) { - return i - (i - iFirstBeginText) % 5; - } - let iFirst = iFirstBeginText; - if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) { - count++; - iFirst -= 5; - } - let iEndText = iFirst + 4; - for (let q = 1; q < count; q++) { - fnArray.splice(iEndText, 3); - argsArray.splice(iEndText, 3); - iEndText += 2; - } - return iEndText + 1; -}); -class NullOptimizer { - constructor(queue) { - this.queue = queue; - } - _optimize() {} - push(fn, args) { - this.queue.fnArray.push(fn); - this.queue.argsArray.push(args); - this._optimize(); - } - flush() {} - reset() {} -} -class QueueOptimizer extends NullOptimizer { - constructor(queue) { - super(queue); - this.state = null; - this.context = { - iCurr: 0, - fnArray: queue.fnArray, - argsArray: queue.argsArray, - isOffscreenCanvasSupported: false - }; - this.match = null; - this.lastProcessed = 0; - } - set isOffscreenCanvasSupported(value) { - this.context.isOffscreenCanvasSupported = value; - } - _optimize() { - const fnArray = this.queue.fnArray; - let i = this.lastProcessed, - ii = fnArray.length; - let state = this.state; - let match = this.match; - if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) { - this.lastProcessed = ii; - return; - } - const context = this.context; - while (i < ii) { - if (match) { - const iterate = (0, match.iterateFn)(context, i); - if (iterate) { - i++; - continue; - } - i = (0, match.processFn)(context, i + 1); - ii = fnArray.length; - match = null; - state = null; - if (i >= ii) { - break; - } - } - state = (state || InitialState)[fnArray[i]]; - if (!state || Array.isArray(state)) { - i++; - continue; - } - context.iCurr = i; - i++; - if (state.checkFn && !(0, state.checkFn)(context)) { - state = null; - continue; - } - match = state; - state = null; - } - this.state = state; - this.match = match; - this.lastProcessed = i; - } - flush() { - while (this.match) { - const length = this.queue.fnArray.length; - this.lastProcessed = (0, this.match.processFn)(this.context, length); - this.match = null; - this.state = null; - this._optimize(); - } - } - reset() { - this.state = null; - this.match = null; - this.lastProcessed = 0; - } -} -class OperatorList { - static CHUNK_SIZE = 1000; - static CHUNK_SIZE_ABOUT = this.CHUNK_SIZE - 5; - constructor(intent = 0, streamSink) { - this._streamSink = streamSink; - this.fnArray = []; - this.argsArray = []; - this.optimizer = streamSink && !(intent & _util.RenderingIntentFlag.OPLIST) ? new QueueOptimizer(this) : new NullOptimizer(this); - this.dependencies = new Set(); - this._totalLength = 0; - this.weight = 0; - this._resolved = streamSink ? null : Promise.resolve(); - } - set isOffscreenCanvasSupported(value) { - this.optimizer.isOffscreenCanvasSupported = value; - } - get length() { - return this.argsArray.length; - } - get ready() { - return this._resolved || this._streamSink.ready; - } - get totalLength() { - return this._totalLength + this.length; - } - addOp(fn, args) { - this.optimizer.push(fn, args); - this.weight++; - if (this._streamSink) { - if (this.weight >= OperatorList.CHUNK_SIZE) { - this.flush(); - } else if (this.weight >= OperatorList.CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) { - this.flush(); - } - } - } - addImageOps(fn, args, optionalContent) { - if (optionalContent !== undefined) { - this.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); - } - this.addOp(fn, args); - if (optionalContent !== undefined) { - this.addOp(_util.OPS.endMarkedContent, []); - } - } - addDependency(dependency) { - if (this.dependencies.has(dependency)) { - return; - } - this.dependencies.add(dependency); - this.addOp(_util.OPS.dependency, [dependency]); - } - addDependencies(dependencies) { - for (const dependency of dependencies) { - this.addDependency(dependency); - } - } - addOpList(opList) { - if (!(opList instanceof OperatorList)) { - (0, _util.warn)('addOpList - ignoring invalid "opList" parameter.'); - return; - } - for (const dependency of opList.dependencies) { - this.dependencies.add(dependency); - } - for (let i = 0, ii = opList.length; i < ii; i++) { - this.addOp(opList.fnArray[i], opList.argsArray[i]); - } - } - getIR() { - return { - fnArray: this.fnArray, - argsArray: this.argsArray, - length: this.length - }; - } - get _transfers() { - const transfers = []; - const { - fnArray, - argsArray, - length - } = this; - for (let i = 0; i < length; i++) { - switch (fnArray[i]) { - case _util.OPS.paintInlineImageXObject: - case _util.OPS.paintInlineImageXObjectGroup: - case _util.OPS.paintImageMaskXObject: - const arg = argsArray[i][0]; - if (!arg.cached && arg.data?.buffer instanceof ArrayBuffer) { - transfers.push(arg.data.buffer); - } - break; - } - } - return transfers; - } - flush(lastChunk = false, separateAnnots = null) { - this.optimizer.flush(); - const length = this.length; - this._totalLength += length; - this._streamSink.enqueue({ - fnArray: this.fnArray, - argsArray: this.argsArray, - lastChunk, - separateAnnots, - length - }, 1, this._transfers); - this.dependencies.clear(); - this.fnArray.length = 0; - this.argsArray.length = 0; - this.weight = 0; - this.optimizer.reset(); - } -} -exports.OperatorList = OperatorList; - -/***/ }), -/* 65 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PDFImage = void 0; -var _util = __w_pdfjs_require__(2); -var _image_utils = __w_pdfjs_require__(28); -var _base_stream = __w_pdfjs_require__(5); -var _colorspace = __w_pdfjs_require__(12); -var _decode_stream = __w_pdfjs_require__(18); -var _image_resizer = __w_pdfjs_require__(62); -var _jpeg_stream = __w_pdfjs_require__(26); -var _jpx = __w_pdfjs_require__(30); -var _primitives = __w_pdfjs_require__(4); -function decodeAndClamp(value, addend, coefficient, max) { - value = addend + value * coefficient; - if (value < 0) { - value = 0; - } else if (value > max) { - value = max; - } - return value; -} -function resizeImageMask(src, bpc, w1, h1, w2, h2) { - const length = w2 * h2; - let dest; - if (bpc <= 8) { - dest = new Uint8Array(length); - } else if (bpc <= 16) { - dest = new Uint16Array(length); - } else { - dest = new Uint32Array(length); - } - const xRatio = w1 / w2; - const yRatio = h1 / h2; - let i, - j, - py, - newIndex = 0, - oldIndex; - const xScaled = new Uint16Array(w2); - const w1Scanline = w1; - for (i = 0; i < w2; i++) { - xScaled[i] = Math.floor(i * xRatio); - } - for (i = 0; i < h2; i++) { - py = Math.floor(i * yRatio) * w1Scanline; - for (j = 0; j < w2; j++) { - oldIndex = py + xScaled[j]; - dest[newIndex++] = src[oldIndex]; - } - } - return dest; -} -class PDFImage { - constructor({ - xref, - res, - image, - isInline = false, - smask = null, - mask = null, - isMask = false, - pdfFunctionFactory, - localColorSpaceCache - }) { - this.image = image; - const dict = image.dict; - const filter = dict.get("F", "Filter"); - let filterName; - if (filter instanceof _primitives.Name) { - filterName = filter.name; - } else if (Array.isArray(filter)) { - const filterZero = xref.fetchIfRef(filter[0]); - if (filterZero instanceof _primitives.Name) { - filterName = filterZero.name; - } - } - switch (filterName) { - case "JPXDecode": - const jpxImage = new _jpx.JpxImage(); - jpxImage.parseImageProperties(image.stream); - image.stream.reset(); - image.width = jpxImage.width; - image.height = jpxImage.height; - image.bitsPerComponent = jpxImage.bitsPerComponent; - image.numComps = jpxImage.componentsCount; - break; - case "JBIG2Decode": - image.bitsPerComponent = 1; - image.numComps = 1; - break; - } - let width = dict.get("W", "Width"); - let height = dict.get("H", "Height"); - if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 0 && (image.width !== width || image.height !== height)) { - (0, _util.warn)("PDFImage - using the Width/Height of the image data, " + "rather than the image dictionary."); - width = image.width; - height = image.height; - } - if (width < 1 || height < 1) { - throw new _util.FormatError(`Invalid image width: ${width} or height: ${height}`); - } - this.width = width; - this.height = height; - this.interpolate = dict.get("I", "Interpolate"); - this.imageMask = dict.get("IM", "ImageMask") || false; - this.matte = dict.get("Matte") || false; - let bitsPerComponent = image.bitsPerComponent; - if (!bitsPerComponent) { - bitsPerComponent = dict.get("BPC", "BitsPerComponent"); - if (!bitsPerComponent) { - if (this.imageMask) { - bitsPerComponent = 1; - } else { - throw new _util.FormatError(`Bits per component missing in image: ${this.imageMask}`); - } - } - } - this.bpc = bitsPerComponent; - if (!this.imageMask) { - let colorSpace = dict.getRaw("CS") || dict.getRaw("ColorSpace"); - if (!colorSpace) { - (0, _util.info)("JPX images (which do not require color spaces)"); - switch (image.numComps) { - case 1: - colorSpace = _primitives.Name.get("DeviceGray"); - break; - case 3: - colorSpace = _primitives.Name.get("DeviceRGB"); - break; - case 4: - colorSpace = _primitives.Name.get("DeviceCMYK"); - break; - default: - throw new Error(`JPX images with ${image.numComps} color components not supported.`); - } - } - this.colorSpace = _colorspace.ColorSpace.parse({ - cs: colorSpace, - xref, - resources: isInline ? res : null, - pdfFunctionFactory, - localColorSpaceCache - }); - this.numComps = this.colorSpace.numComps; - } - this.decode = dict.getArray("D", "Decode"); - this.needsDecode = false; - if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) { - this.needsDecode = true; - const max = (1 << bitsPerComponent) - 1; - this.decodeCoefficients = []; - this.decodeAddends = []; - const isIndexed = this.colorSpace?.name === "Indexed"; - for (let i = 0, j = 0; i < this.decode.length; i += 2, ++j) { - const dmin = this.decode[i]; - const dmax = this.decode[i + 1]; - this.decodeCoefficients[j] = isIndexed ? (dmax - dmin) / max : dmax - dmin; - this.decodeAddends[j] = isIndexed ? dmin : max * dmin; - } - } - if (smask) { - this.smask = new PDFImage({ - xref, - res, - image: smask, - isInline, - pdfFunctionFactory, - localColorSpaceCache - }); - } else if (mask) { - if (mask instanceof _base_stream.BaseStream) { - const maskDict = mask.dict, - imageMask = maskDict.get("IM", "ImageMask"); - if (!imageMask) { - (0, _util.warn)("Ignoring /Mask in image without /ImageMask."); - } else { - this.mask = new PDFImage({ - xref, - res, - image: mask, - isInline, - isMask: true, - pdfFunctionFactory, - localColorSpaceCache - }); - } - } else { - this.mask = mask; - } - } - } - static async buildImage({ - xref, - res, - image, - isInline = false, - pdfFunctionFactory, - localColorSpaceCache - }) { - const imageData = image; - let smaskData = null; - let maskData = null; - const smask = image.dict.get("SMask"); - const mask = image.dict.get("Mask"); - if (smask) { - if (smask instanceof _base_stream.BaseStream) { - smaskData = smask; - } else { - (0, _util.warn)("Unsupported /SMask format."); - } - } else if (mask) { - if (mask instanceof _base_stream.BaseStream || Array.isArray(mask)) { - maskData = mask; - } else { - (0, _util.warn)("Unsupported /Mask format."); - } - } - return new PDFImage({ - xref, - res, - image: imageData, - isInline, - smask: smaskData, - mask: maskData, - pdfFunctionFactory, - localColorSpaceCache - }); - } - static createRawMask({ - imgArray, - width, - height, - imageIsFromDecodeStream, - inverseDecode, - interpolate - }) { - const computedLength = (width + 7 >> 3) * height; - const actualLength = imgArray.byteLength; - const haveFullData = computedLength === actualLength; - let data, i; - if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) { - data = imgArray; - } else if (!inverseDecode) { - data = new Uint8Array(imgArray); - } else { - data = new Uint8Array(computedLength); - data.set(imgArray); - data.fill(0xff, actualLength); - } - if (inverseDecode) { - for (i = 0; i < actualLength; i++) { - data[i] ^= 0xff; - } - } - return { - data, - width, - height, - interpolate - }; - } - static async createMask({ - imgArray, - width, - height, - imageIsFromDecodeStream, - inverseDecode, - interpolate, - isOffscreenCanvasSupported = false - }) { - const isSingleOpaquePixel = width === 1 && height === 1 && inverseDecode === (imgArray.length === 0 || !!(imgArray[0] & 128)); - if (isSingleOpaquePixel) { - return { - isSingleOpaquePixel - }; - } - if (isOffscreenCanvasSupported) { - if (_image_resizer.ImageResizer.needsToBeResized(width, height)) { - const data = new Uint8ClampedArray(width * height * 4); - (0, _image_utils.convertBlackAndWhiteToRGBA)({ - src: imgArray, - dest: data, - width, - height, - nonBlackColor: 0, - inverseDecode - }); - return _image_resizer.ImageResizer.createImage({ - kind: _util.ImageKind.RGBA_32BPP, - data, - width, - height, - interpolate - }); - } - const canvas = new OffscreenCanvas(width, height); - const ctx = canvas.getContext("2d"); - const imgData = ctx.createImageData(width, height); - (0, _image_utils.convertBlackAndWhiteToRGBA)({ - src: imgArray, - dest: imgData.data, - width, - height, - nonBlackColor: 0, - inverseDecode - }); - ctx.putImageData(imgData, 0, 0); - const bitmap = canvas.transferToImageBitmap(); - return { - data: null, - width, - height, - interpolate, - bitmap - }; - } - return this.createRawMask({ - imgArray, - width, - height, - inverseDecode, - imageIsFromDecodeStream, - interpolate - }); - } - get drawWidth() { - return Math.max(this.width, this.smask?.width || 0, this.mask?.width || 0); - } - get drawHeight() { - return Math.max(this.height, this.smask?.height || 0, this.mask?.height || 0); - } - decodeBuffer(buffer) { - const bpc = this.bpc; - const numComps = this.numComps; - const decodeAddends = this.decodeAddends; - const decodeCoefficients = this.decodeCoefficients; - const max = (1 << bpc) - 1; - let i, ii; - if (bpc === 1) { - for (i = 0, ii = buffer.length; i < ii; i++) { - buffer[i] = +!buffer[i]; - } - return; - } - let index = 0; - for (i = 0, ii = this.width * this.height; i < ii; i++) { - for (let j = 0; j < numComps; j++) { - buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max); - index++; - } - } - } - getComponents(buffer) { - const bpc = this.bpc; - if (bpc === 8) { - return buffer; - } - const width = this.width; - const height = this.height; - const numComps = this.numComps; - const length = width * height * numComps; - let bufferPos = 0; - let output; - if (bpc <= 8) { - output = new Uint8Array(length); - } else if (bpc <= 16) { - output = new Uint16Array(length); - } else { - output = new Uint32Array(length); - } - const rowComps = width * numComps; - const max = (1 << bpc) - 1; - let i = 0, - ii, - buf; - if (bpc === 1) { - let mask, loop1End, loop2End; - for (let j = 0; j < height; j++) { - loop1End = i + (rowComps & ~7); - loop2End = i + rowComps; - while (i < loop1End) { - buf = buffer[bufferPos++]; - output[i] = buf >> 7 & 1; - output[i + 1] = buf >> 6 & 1; - output[i + 2] = buf >> 5 & 1; - output[i + 3] = buf >> 4 & 1; - output[i + 4] = buf >> 3 & 1; - output[i + 5] = buf >> 2 & 1; - output[i + 6] = buf >> 1 & 1; - output[i + 7] = buf & 1; - i += 8; - } - if (i < loop2End) { - buf = buffer[bufferPos++]; - mask = 128; - while (i < loop2End) { - output[i++] = +!!(buf & mask); - mask >>= 1; - } - } - } - } else { - let bits = 0; - buf = 0; - for (i = 0, ii = length; i < ii; ++i) { - if (i % rowComps === 0) { - buf = 0; - bits = 0; - } - while (bits < bpc) { - buf = buf << 8 | buffer[bufferPos++]; - bits += 8; - } - const remainingBits = bits - bpc; - let value = buf >> remainingBits; - if (value < 0) { - value = 0; - } else if (value > max) { - value = max; - } - output[i] = value; - buf &= (1 << remainingBits) - 1; - bits = remainingBits; - } - } - return output; - } - fillOpacity(rgbaBuf, width, height, actualHeight, image) { - const smask = this.smask; - const mask = this.mask; - let alphaBuf, sw, sh, i, ii, j; - if (smask) { - sw = smask.width; - sh = smask.height; - alphaBuf = new Uint8ClampedArray(sw * sh); - smask.fillGrayBuffer(alphaBuf); - if (sw !== width || sh !== height) { - alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height); - } - } else if (mask) { - if (mask instanceof PDFImage) { - sw = mask.width; - sh = mask.height; - alphaBuf = new Uint8ClampedArray(sw * sh); - mask.numComps = 1; - mask.fillGrayBuffer(alphaBuf); - for (i = 0, ii = sw * sh; i < ii; ++i) { - alphaBuf[i] = 255 - alphaBuf[i]; - } - if (sw !== width || sh !== height) { - alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height); - } - } else if (Array.isArray(mask)) { - alphaBuf = new Uint8ClampedArray(width * height); - const numComps = this.numComps; - for (i = 0, ii = width * height; i < ii; ++i) { - let opacity = 0; - const imageOffset = i * numComps; - for (j = 0; j < numComps; ++j) { - const color = image[imageOffset + j]; - const maskOffset = j * 2; - if (color < mask[maskOffset] || color > mask[maskOffset + 1]) { - opacity = 255; - break; - } - } - alphaBuf[i] = opacity; - } - } else { - throw new _util.FormatError("Unknown mask format."); - } - } - if (alphaBuf) { - for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { - rgbaBuf[j] = alphaBuf[i]; - } - } else { - for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { - rgbaBuf[j] = 255; - } - } - } - undoPreblend(buffer, width, height) { - const matte = this.smask?.matte; - if (!matte) { - return; - } - const matteRgb = this.colorSpace.getRgb(matte, 0); - const matteR = matteRgb[0]; - const matteG = matteRgb[1]; - const matteB = matteRgb[2]; - const length = width * height * 4; - for (let i = 0; i < length; i += 4) { - const alpha = buffer[i + 3]; - if (alpha === 0) { - buffer[i] = 255; - buffer[i + 1] = 255; - buffer[i + 2] = 255; - continue; - } - const k = 255 / alpha; - buffer[i] = (buffer[i] - matteR) * k + matteR; - buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG; - buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB; - } - } - async createImageData(forceRGBA = false, isOffscreenCanvasSupported = false) { - const drawWidth = this.drawWidth; - const drawHeight = this.drawHeight; - const imgData = { - width: drawWidth, - height: drawHeight, - interpolate: this.interpolate, - kind: 0, - data: null - }; - const numComps = this.numComps; - const originalWidth = this.width; - const originalHeight = this.height; - const bpc = this.bpc; - const rowBytes = originalWidth * numComps * bpc + 7 >> 3; - const mustBeResized = isOffscreenCanvasSupported && _image_resizer.ImageResizer.needsToBeResized(drawWidth, drawHeight); - if (!forceRGBA) { - let kind; - if (this.colorSpace.name === "DeviceGray" && bpc === 1) { - kind = _util.ImageKind.GRAYSCALE_1BPP; - } else if (this.colorSpace.name === "DeviceRGB" && bpc === 8 && !this.needsDecode) { - kind = _util.ImageKind.RGB_24BPP; - } - if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) { - const data = this.getImageBytes(originalHeight * rowBytes, {}); - if (isOffscreenCanvasSupported) { - if (mustBeResized) { - return _image_resizer.ImageResizer.createImage({ - data, - kind, - width: drawWidth, - height: drawHeight, - interpolate: this.interpolate - }, this.needsDecode); - } - return this.createBitmap(kind, originalWidth, originalHeight, data); - } - imgData.kind = kind; - imgData.data = data; - if (this.needsDecode) { - (0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, "PDFImage.createImageData: The image must be grayscale."); - const buffer = imgData.data; - for (let i = 0, ii = buffer.length; i < ii; i++) { - buffer[i] ^= 0xff; - } - } - return imgData; - } - if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask && !this.needsDecode) { - let imageLength = originalHeight * rowBytes; - if (isOffscreenCanvasSupported && !mustBeResized) { - let isHandled = false; - switch (this.colorSpace.name) { - case "DeviceGray": - imageLength *= 4; - isHandled = true; - break; - case "DeviceRGB": - imageLength = imageLength / 3 * 4; - isHandled = true; - break; - case "DeviceCMYK": - isHandled = true; - break; - } - if (isHandled) { - const rgba = this.getImageBytes(imageLength, { - drawWidth, - drawHeight, - forceRGBA: true - }); - return this.createBitmap(_util.ImageKind.RGBA_32BPP, drawWidth, drawHeight, rgba); - } - } else { - switch (this.colorSpace.name) { - case "DeviceGray": - imageLength *= 3; - case "DeviceRGB": - case "DeviceCMYK": - imgData.kind = _util.ImageKind.RGB_24BPP; - imgData.data = this.getImageBytes(imageLength, { - drawWidth, - drawHeight, - forceRGB: true - }); - if (mustBeResized) { - return _image_resizer.ImageResizer.createImage(imgData); - } - return imgData; - } - } - } - } - const imgArray = this.getImageBytes(originalHeight * rowBytes, { - internal: true - }); - const actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight; - const comps = this.getComponents(imgArray); - let alpha01, maybeUndoPreblend; - let canvas, ctx, canvasImgData, data; - if (isOffscreenCanvasSupported && !mustBeResized) { - canvas = new OffscreenCanvas(drawWidth, drawHeight); - ctx = canvas.getContext("2d"); - canvasImgData = ctx.createImageData(drawWidth, drawHeight); - data = canvasImgData.data; - } - imgData.kind = _util.ImageKind.RGBA_32BPP; - if (!forceRGBA && !this.smask && !this.mask) { - if (!isOffscreenCanvasSupported || mustBeResized) { - imgData.kind = _util.ImageKind.RGB_24BPP; - data = new Uint8ClampedArray(drawWidth * drawHeight * 3); - alpha01 = 0; - } else { - const arr = new Uint32Array(data.buffer); - arr.fill(_util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff); - alpha01 = 1; - } - maybeUndoPreblend = false; - } else { - if (!isOffscreenCanvasSupported || mustBeResized) { - data = new Uint8ClampedArray(drawWidth * drawHeight * 4); - } - alpha01 = 1; - maybeUndoPreblend = true; - this.fillOpacity(data, drawWidth, drawHeight, actualHeight, comps); - } - if (this.needsDecode) { - this.decodeBuffer(comps); - } - this.colorSpace.fillRgb(data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01); - if (maybeUndoPreblend) { - this.undoPreblend(data, drawWidth, actualHeight); - } - if (isOffscreenCanvasSupported && !mustBeResized) { - ctx.putImageData(canvasImgData, 0, 0); - const bitmap = canvas.transferToImageBitmap(); - return { - data: null, - width: drawWidth, - height: drawHeight, - bitmap, - interpolate: this.interpolate - }; - } - imgData.data = data; - if (mustBeResized) { - return _image_resizer.ImageResizer.createImage(imgData); - } - return imgData; - } - fillGrayBuffer(buffer) { - const numComps = this.numComps; - if (numComps !== 1) { - throw new _util.FormatError(`Reading gray scale from a color image: ${numComps}`); - } - const width = this.width; - const height = this.height; - const bpc = this.bpc; - const rowBytes = width * numComps * bpc + 7 >> 3; - const imgArray = this.getImageBytes(height * rowBytes, { - internal: true - }); - const comps = this.getComponents(imgArray); - let i, length; - if (bpc === 1) { - length = width * height; - if (this.needsDecode) { - for (i = 0; i < length; ++i) { - buffer[i] = comps[i] - 1 & 255; - } - } else { - for (i = 0; i < length; ++i) { - buffer[i] = -comps[i] & 255; - } - } - return; - } - if (this.needsDecode) { - this.decodeBuffer(comps); - } - length = width * height; - const scale = 255 / ((1 << bpc) - 1); - for (i = 0; i < length; ++i) { - buffer[i] = scale * comps[i]; - } - } - createBitmap(kind, width, height, src) { - const canvas = new OffscreenCanvas(width, height); - const ctx = canvas.getContext("2d"); - let imgData; - if (kind === _util.ImageKind.RGBA_32BPP) { - imgData = new ImageData(src, width, height); - } else { - imgData = ctx.createImageData(width, height); - (0, _image_utils.convertToRGBA)({ - kind, - src, - dest: new Uint32Array(imgData.data.buffer), - width, - height, - inverseDecode: this.needsDecode - }); - } - ctx.putImageData(imgData, 0, 0); - const bitmap = canvas.transferToImageBitmap(); - return { - data: null, - width, - height, - bitmap, - interpolate: this.interpolate - }; - } - getImageBytes(length, { - drawWidth, - drawHeight, - forceRGBA = false, - forceRGB = false, - internal = false - }) { - this.image.reset(); - this.image.drawWidth = drawWidth || this.width; - this.image.drawHeight = drawHeight || this.height; - this.image.forceRGBA = !!forceRGBA; - this.image.forceRGB = !!forceRGB; - const imageBytes = this.image.getBytes(length); - if (internal || this.image instanceof _decode_stream.DecodeStream) { - return imageBytes; - } - (0, _util.assert)(imageBytes instanceof Uint8Array, 'PDFImage.getImageBytes: Unsupported "imageBytes" type.'); - return new Uint8Array(imageBytes); - } -} -exports.PDFImage = PDFImage; - -/***/ }), -/* 66 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Catalog = void 0; -var _core_utils = __w_pdfjs_require__(3); -var _util = __w_pdfjs_require__(2); -var _primitives = __w_pdfjs_require__(4); -var _name_number_tree = __w_pdfjs_require__(67); -var _base_stream = __w_pdfjs_require__(5); -var _cleanup_helper = __w_pdfjs_require__(68); -var _colorspace = __w_pdfjs_require__(12); -var _file_spec = __w_pdfjs_require__(69); -var _image_utils = __w_pdfjs_require__(59); -var _metadata_parser = __w_pdfjs_require__(70); -var _struct_tree = __w_pdfjs_require__(72); -function fetchDestination(dest) { - if (dest instanceof _primitives.Dict) { - dest = dest.get("D"); - } - return Array.isArray(dest) ? dest : null; -} -class Catalog { - constructor(pdfManager, xref) { - this.pdfManager = pdfManager; - this.xref = xref; - this._catDict = xref.getCatalogObj(); - if (!(this._catDict instanceof _primitives.Dict)) { - throw new _util.FormatError("Catalog object is not a dictionary."); - } - this.toplevelPagesDict; - this._actualNumPages = null; - this.fontCache = new _primitives.RefSetCache(); - this.builtInCMapCache = new Map(); - this.standardFontDataCache = new Map(); - this.globalImageCache = new _image_utils.GlobalImageCache(); - this.pageKidsCountCache = new _primitives.RefSetCache(); - this.pageIndexCache = new _primitives.RefSetCache(); - this.nonBlendModesSet = new _primitives.RefSet(); - this.systemFontCache = new Map(); - } - cloneDict() { - return this._catDict.clone(); - } - get version() { - const version = this._catDict.get("Version"); - if (version instanceof _primitives.Name) { - if (_core_utils.PDF_VERSION_REGEXP.test(version.name)) { - return (0, _util.shadow)(this, "version", version.name); - } - (0, _util.warn)(`Invalid PDF catalog version: ${version.name}`); - } - return (0, _util.shadow)(this, "version", null); - } - get lang() { - const lang = this._catDict.get("Lang"); - return (0, _util.shadow)(this, "lang", typeof lang === "string" ? (0, _util.stringToPDFString)(lang) : null); - } - get needsRendering() { - const needsRendering = this._catDict.get("NeedsRendering"); - return (0, _util.shadow)(this, "needsRendering", typeof needsRendering === "boolean" ? needsRendering : false); - } - get collection() { - let collection = null; - try { - const obj = this._catDict.get("Collection"); - if (obj instanceof _primitives.Dict && obj.size > 0) { - collection = obj; - } - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.info)("Cannot fetch Collection entry; assuming no collection is present."); - } - return (0, _util.shadow)(this, "collection", collection); - } - get acroForm() { - let acroForm = null; - try { - const obj = this._catDict.get("AcroForm"); - if (obj instanceof _primitives.Dict && obj.size > 0) { - acroForm = obj; - } - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.info)("Cannot fetch AcroForm entry; assuming no forms are present."); - } - return (0, _util.shadow)(this, "acroForm", acroForm); - } - get acroFormRef() { - const value = this._catDict.getRaw("AcroForm"); - return (0, _util.shadow)(this, "acroFormRef", value instanceof _primitives.Ref ? value : null); - } - get metadata() { - const streamRef = this._catDict.getRaw("Metadata"); - if (!(streamRef instanceof _primitives.Ref)) { - return (0, _util.shadow)(this, "metadata", null); - } - let metadata = null; - try { - const stream = this.xref.fetch(streamRef, !this.xref.encrypt?.encryptMetadata); - if (stream instanceof _base_stream.BaseStream && stream.dict instanceof _primitives.Dict) { - const type = stream.dict.get("Type"); - const subtype = stream.dict.get("Subtype"); - if ((0, _primitives.isName)(type, "Metadata") && (0, _primitives.isName)(subtype, "XML")) { - const data = (0, _util.stringToUTF8String)(stream.getString()); - if (data) { - metadata = new _metadata_parser.MetadataParser(data).serializable; - } - } - } - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.info)(`Skipping invalid Metadata: "${ex}".`); - } - return (0, _util.shadow)(this, "metadata", metadata); - } - get markInfo() { - let markInfo = null; - try { - markInfo = this._readMarkInfo(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.warn)("Unable to read mark info."); - } - return (0, _util.shadow)(this, "markInfo", markInfo); - } - _readMarkInfo() { - const obj = this._catDict.get("MarkInfo"); - if (!(obj instanceof _primitives.Dict)) { - return null; - } - const markInfo = { - Marked: false, - UserProperties: false, - Suspects: false - }; - for (const key in markInfo) { - const value = obj.get(key); - if (typeof value === "boolean") { - markInfo[key] = value; - } - } - return markInfo; - } - get structTreeRoot() { - let structTree = null; - try { - structTree = this._readStructTreeRoot(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.warn)("Unable read to structTreeRoot info."); - } - return (0, _util.shadow)(this, "structTreeRoot", structTree); - } - _readStructTreeRoot() { - const rawObj = this._catDict.getRaw("StructTreeRoot"); - const obj = this.xref.fetchIfRef(rawObj); - if (!(obj instanceof _primitives.Dict)) { - return null; - } - const root = new _struct_tree.StructTreeRoot(obj, rawObj); - root.init(); - return root; - } - get toplevelPagesDict() { - const pagesObj = this._catDict.get("Pages"); - if (!(pagesObj instanceof _primitives.Dict)) { - throw new _util.FormatError("Invalid top-level pages dictionary."); - } - return (0, _util.shadow)(this, "toplevelPagesDict", pagesObj); - } - get documentOutline() { - let obj = null; - try { - obj = this._readDocumentOutline(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.warn)("Unable to read document outline."); - } - return (0, _util.shadow)(this, "documentOutline", obj); - } - _readDocumentOutline() { - let obj = this._catDict.get("Outlines"); - if (!(obj instanceof _primitives.Dict)) { - return null; - } - obj = obj.getRaw("First"); - if (!(obj instanceof _primitives.Ref)) { - return null; - } - const root = { - items: [] - }; - const queue = [{ - obj, - parent: root - }]; - const processed = new _primitives.RefSet(); - processed.put(obj); - const xref = this.xref, - blackColor = new Uint8ClampedArray(3); - while (queue.length > 0) { - const i = queue.shift(); - const outlineDict = xref.fetchIfRef(i.obj); - if (outlineDict === null) { - continue; - } - if (!outlineDict.has("Title")) { - throw new _util.FormatError("Invalid outline item encountered."); - } - const data = { - url: null, - dest: null, - action: null - }; - Catalog.parseDestDictionary({ - destDict: outlineDict, - resultObj: data, - docBaseUrl: this.baseUrl, - docAttachments: this.attachments - }); - const title = outlineDict.get("Title"); - const flags = outlineDict.get("F") || 0; - const color = outlineDict.getArray("C"); - const count = outlineDict.get("Count"); - let rgbColor = blackColor; - if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) { - rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0); - } - const outlineItem = { - action: data.action, - attachment: data.attachment, - dest: data.dest, - url: data.url, - unsafeUrl: data.unsafeUrl, - newWindow: data.newWindow, - setOCGState: data.setOCGState, - title: (0, _util.stringToPDFString)(title), - color: rgbColor, - count: Number.isInteger(count) ? count : undefined, - bold: !!(flags & 2), - italic: !!(flags & 1), - items: [] - }; - i.parent.items.push(outlineItem); - obj = outlineDict.getRaw("First"); - if (obj instanceof _primitives.Ref && !processed.has(obj)) { - queue.push({ - obj, - parent: outlineItem - }); - processed.put(obj); - } - obj = outlineDict.getRaw("Next"); - if (obj instanceof _primitives.Ref && !processed.has(obj)) { - queue.push({ - obj, - parent: i.parent - }); - processed.put(obj); - } - } - return root.items.length > 0 ? root.items : null; - } - get permissions() { - let permissions = null; - try { - permissions = this._readPermissions(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.warn)("Unable to read permissions."); - } - return (0, _util.shadow)(this, "permissions", permissions); - } - _readPermissions() { - const encrypt = this.xref.trailer.get("Encrypt"); - if (!(encrypt instanceof _primitives.Dict)) { - return null; - } - let flags = encrypt.get("P"); - if (typeof flags !== "number") { - return null; - } - flags += 2 ** 32; - const permissions = []; - for (const key in _util.PermissionFlag) { - const value = _util.PermissionFlag[key]; - if (flags & value) { - permissions.push(value); - } - } - return permissions; - } - get optionalContentConfig() { - let config = null; - try { - const properties = this._catDict.get("OCProperties"); - if (!properties) { - return (0, _util.shadow)(this, "optionalContentConfig", null); - } - const defaultConfig = properties.get("D"); - if (!defaultConfig) { - return (0, _util.shadow)(this, "optionalContentConfig", null); - } - const groupsData = properties.get("OCGs"); - if (!Array.isArray(groupsData)) { - return (0, _util.shadow)(this, "optionalContentConfig", null); - } - const groups = []; - const groupRefs = []; - for (const groupRef of groupsData) { - if (!(groupRef instanceof _primitives.Ref)) { - continue; - } - groupRefs.push(groupRef); - const group = this.xref.fetchIfRef(groupRef); - groups.push({ - id: groupRef.toString(), - name: typeof group.get("Name") === "string" ? (0, _util.stringToPDFString)(group.get("Name")) : null, - intent: typeof group.get("Intent") === "string" ? (0, _util.stringToPDFString)(group.get("Intent")) : null - }); - } - config = this._readOptionalContentConfig(defaultConfig, groupRefs); - config.groups = groups; - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.warn)(`Unable to read optional content config: ${ex}`); - } - return (0, _util.shadow)(this, "optionalContentConfig", config); - } - _readOptionalContentConfig(config, contentGroupRefs) { - function parseOnOff(refs) { - const onParsed = []; - if (Array.isArray(refs)) { - for (const value of refs) { - if (!(value instanceof _primitives.Ref)) { - continue; - } - if (contentGroupRefs.includes(value)) { - onParsed.push(value.toString()); - } - } - } - return onParsed; - } - function parseOrder(refs, nestedLevels = 0) { - if (!Array.isArray(refs)) { - return null; - } - const order = []; - for (const value of refs) { - if (value instanceof _primitives.Ref && contentGroupRefs.includes(value)) { - parsedOrderRefs.put(value); - order.push(value.toString()); - continue; - } - const nestedOrder = parseNestedOrder(value, nestedLevels); - if (nestedOrder) { - order.push(nestedOrder); - } - } - if (nestedLevels > 0) { - return order; - } - const hiddenGroups = []; - for (const groupRef of contentGroupRefs) { - if (parsedOrderRefs.has(groupRef)) { - continue; - } - hiddenGroups.push(groupRef.toString()); - } - if (hiddenGroups.length) { - order.push({ - name: null, - order: hiddenGroups - }); - } - return order; - } - function parseNestedOrder(ref, nestedLevels) { - if (++nestedLevels > MAX_NESTED_LEVELS) { - (0, _util.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS."); - return null; - } - const value = xref.fetchIfRef(ref); - if (!Array.isArray(value)) { - return null; - } - const nestedName = xref.fetchIfRef(value[0]); - if (typeof nestedName !== "string") { - return null; - } - const nestedOrder = parseOrder(value.slice(1), nestedLevels); - if (!nestedOrder || !nestedOrder.length) { - return null; - } - return { - name: (0, _util.stringToPDFString)(nestedName), - order: nestedOrder - }; - } - const xref = this.xref, - parsedOrderRefs = new _primitives.RefSet(), - MAX_NESTED_LEVELS = 10; - return { - name: typeof config.get("Name") === "string" ? (0, _util.stringToPDFString)(config.get("Name")) : null, - creator: typeof config.get("Creator") === "string" ? (0, _util.stringToPDFString)(config.get("Creator")) : null, - baseState: config.get("BaseState") instanceof _primitives.Name ? config.get("BaseState").name : null, - on: parseOnOff(config.get("ON")), - off: parseOnOff(config.get("OFF")), - order: parseOrder(config.get("Order")), - groups: null - }; - } - setActualNumPages(num = null) { - this._actualNumPages = num; - } - get hasActualNumPages() { - return this._actualNumPages !== null; - } - get _pagesCount() { - const obj = this.toplevelPagesDict.get("Count"); - if (!Number.isInteger(obj)) { - throw new _util.FormatError("Page count in top-level pages dictionary is not an integer."); - } - return (0, _util.shadow)(this, "_pagesCount", obj); - } - get numPages() { - return this.hasActualNumPages ? this._actualNumPages : this._pagesCount; - } - get destinations() { - const obj = this._readDests(), - dests = Object.create(null); - if (obj instanceof _name_number_tree.NameTree) { - for (const [key, value] of obj.getAll()) { - const dest = fetchDestination(value); - if (dest) { - dests[(0, _util.stringToPDFString)(key)] = dest; - } - } - } else if (obj instanceof _primitives.Dict) { - obj.forEach(function (key, value) { - const dest = fetchDestination(value); - if (dest) { - dests[key] = dest; - } - }); - } - return (0, _util.shadow)(this, "destinations", dests); - } - getDestination(id) { - const obj = this._readDests(); - if (obj instanceof _name_number_tree.NameTree) { - const dest = fetchDestination(obj.get(id)); - if (dest) { - return dest; - } - const allDest = this.destinations[id]; - if (allDest) { - (0, _util.warn)(`Found "${id}" at an incorrect position in the NameTree.`); - return allDest; - } - } else if (obj instanceof _primitives.Dict) { - const dest = fetchDestination(obj.get(id)); - if (dest) { - return dest; - } - } - return null; - } - _readDests() { - const obj = this._catDict.get("Names"); - if (obj?.has("Dests")) { - return new _name_number_tree.NameTree(obj.getRaw("Dests"), this.xref); - } else if (this._catDict.has("Dests")) { - return this._catDict.get("Dests"); - } - return undefined; - } - get pageLabels() { - let obj = null; - try { - obj = this._readPageLabels(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.warn)("Unable to read page labels."); - } - return (0, _util.shadow)(this, "pageLabels", obj); - } - _readPageLabels() { - const obj = this._catDict.getRaw("PageLabels"); - if (!obj) { - return null; - } - const pageLabels = new Array(this.numPages); - let style = null, - prefix = ""; - const numberTree = new _name_number_tree.NumberTree(obj, this.xref); - const nums = numberTree.getAll(); - let currentLabel = "", - currentIndex = 1; - for (let i = 0, ii = this.numPages; i < ii; i++) { - const labelDict = nums.get(i); - if (labelDict !== undefined) { - if (!(labelDict instanceof _primitives.Dict)) { - throw new _util.FormatError("PageLabel is not a dictionary."); - } - if (labelDict.has("Type") && !(0, _primitives.isName)(labelDict.get("Type"), "PageLabel")) { - throw new _util.FormatError("Invalid type in PageLabel dictionary."); - } - if (labelDict.has("S")) { - const s = labelDict.get("S"); - if (!(s instanceof _primitives.Name)) { - throw new _util.FormatError("Invalid style in PageLabel dictionary."); - } - style = s.name; - } else { - style = null; - } - if (labelDict.has("P")) { - const p = labelDict.get("P"); - if (typeof p !== "string") { - throw new _util.FormatError("Invalid prefix in PageLabel dictionary."); - } - prefix = (0, _util.stringToPDFString)(p); - } else { - prefix = ""; - } - if (labelDict.has("St")) { - const st = labelDict.get("St"); - if (!(Number.isInteger(st) && st >= 1)) { - throw new _util.FormatError("Invalid start in PageLabel dictionary."); - } - currentIndex = st; - } else { - currentIndex = 1; - } - } - switch (style) { - case "D": - currentLabel = currentIndex; - break; - case "R": - case "r": - currentLabel = (0, _core_utils.toRomanNumerals)(currentIndex, style === "r"); - break; - case "A": - case "a": - const LIMIT = 26; - const A_UPPER_CASE = 0x41, - A_LOWER_CASE = 0x61; - const baseCharCode = style === "a" ? A_LOWER_CASE : A_UPPER_CASE; - const letterIndex = currentIndex - 1; - const character = String.fromCharCode(baseCharCode + letterIndex % LIMIT); - currentLabel = character.repeat(Math.floor(letterIndex / LIMIT) + 1); - break; - default: - if (style) { - throw new _util.FormatError(`Invalid style "${style}" in PageLabel dictionary.`); - } - currentLabel = ""; - } - pageLabels[i] = prefix + currentLabel; - currentIndex++; - } - return pageLabels; - } - get pageLayout() { - const obj = this._catDict.get("PageLayout"); - let pageLayout = ""; - if (obj instanceof _primitives.Name) { - switch (obj.name) { - case "SinglePage": - case "OneColumn": - case "TwoColumnLeft": - case "TwoColumnRight": - case "TwoPageLeft": - case "TwoPageRight": - pageLayout = obj.name; - } - } - return (0, _util.shadow)(this, "pageLayout", pageLayout); - } - get pageMode() { - const obj = this._catDict.get("PageMode"); - let pageMode = "UseNone"; - if (obj instanceof _primitives.Name) { - switch (obj.name) { - case "UseNone": - case "UseOutlines": - case "UseThumbs": - case "FullScreen": - case "UseOC": - case "UseAttachments": - pageMode = obj.name; - } - } - return (0, _util.shadow)(this, "pageMode", pageMode); - } - get viewerPreferences() { - const obj = this._catDict.get("ViewerPreferences"); - if (!(obj instanceof _primitives.Dict)) { - return (0, _util.shadow)(this, "viewerPreferences", null); - } - let prefs = null; - for (const key of obj.getKeys()) { - const value = obj.get(key); - let prefValue; - switch (key) { - case "HideToolbar": - case "HideMenubar": - case "HideWindowUI": - case "FitWindow": - case "CenterWindow": - case "DisplayDocTitle": - case "PickTrayByPDFSize": - if (typeof value === "boolean") { - prefValue = value; - } - break; - case "NonFullScreenPageMode": - if (value instanceof _primitives.Name) { - switch (value.name) { - case "UseNone": - case "UseOutlines": - case "UseThumbs": - case "UseOC": - prefValue = value.name; - break; - default: - prefValue = "UseNone"; - } - } - break; - case "Direction": - if (value instanceof _primitives.Name) { - switch (value.name) { - case "L2R": - case "R2L": - prefValue = value.name; - break; - default: - prefValue = "L2R"; - } - } - break; - case "ViewArea": - case "ViewClip": - case "PrintArea": - case "PrintClip": - if (value instanceof _primitives.Name) { - switch (value.name) { - case "MediaBox": - case "CropBox": - case "BleedBox": - case "TrimBox": - case "ArtBox": - prefValue = value.name; - break; - default: - prefValue = "CropBox"; - } - } - break; - case "PrintScaling": - if (value instanceof _primitives.Name) { - switch (value.name) { - case "None": - case "AppDefault": - prefValue = value.name; - break; - default: - prefValue = "AppDefault"; - } - } - break; - case "Duplex": - if (value instanceof _primitives.Name) { - switch (value.name) { - case "Simplex": - case "DuplexFlipShortEdge": - case "DuplexFlipLongEdge": - prefValue = value.name; - break; - default: - prefValue = "None"; - } - } - break; - case "PrintPageRange": - if (Array.isArray(value) && value.length % 2 === 0) { - const isValid = value.every((page, i, arr) => { - return Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= this.numPages; - }); - if (isValid) { - prefValue = value; - } - } - break; - case "NumCopies": - if (Number.isInteger(value) && value > 0) { - prefValue = value; - } - break; - default: - (0, _util.warn)(`Ignoring non-standard key in ViewerPreferences: ${key}.`); - continue; - } - if (prefValue === undefined) { - (0, _util.warn)(`Bad value, for key "${key}", in ViewerPreferences: ${value}.`); - continue; - } - if (!prefs) { - prefs = Object.create(null); - } - prefs[key] = prefValue; - } - return (0, _util.shadow)(this, "viewerPreferences", prefs); - } - get openAction() { - const obj = this._catDict.get("OpenAction"); - const openAction = Object.create(null); - if (obj instanceof _primitives.Dict) { - const destDict = new _primitives.Dict(this.xref); - destDict.set("A", obj); - const resultObj = { - url: null, - dest: null, - action: null - }; - Catalog.parseDestDictionary({ - destDict, - resultObj - }); - if (Array.isArray(resultObj.dest)) { - openAction.dest = resultObj.dest; - } else if (resultObj.action) { - openAction.action = resultObj.action; - } - } else if (Array.isArray(obj)) { - openAction.dest = obj; - } - return (0, _util.shadow)(this, "openAction", (0, _util.objectSize)(openAction) > 0 ? openAction : null); - } - get attachments() { - const obj = this._catDict.get("Names"); - let attachments = null; - if (obj instanceof _primitives.Dict && obj.has("EmbeddedFiles")) { - const nameTree = new _name_number_tree.NameTree(obj.getRaw("EmbeddedFiles"), this.xref); - for (const [key, value] of nameTree.getAll()) { - const fs = new _file_spec.FileSpec(value, this.xref); - if (!attachments) { - attachments = Object.create(null); - } - attachments[(0, _util.stringToPDFString)(key)] = fs.serializable; - } - } - return (0, _util.shadow)(this, "attachments", attachments); - } - get xfaImages() { - const obj = this._catDict.get("Names"); - let xfaImages = null; - if (obj instanceof _primitives.Dict && obj.has("XFAImages")) { - const nameTree = new _name_number_tree.NameTree(obj.getRaw("XFAImages"), this.xref); - for (const [key, value] of nameTree.getAll()) { - if (!xfaImages) { - xfaImages = new _primitives.Dict(this.xref); - } - xfaImages.set((0, _util.stringToPDFString)(key), value); - } - } - return (0, _util.shadow)(this, "xfaImages", xfaImages); - } - _collectJavaScript() { - const obj = this._catDict.get("Names"); - let javaScript = null; - function appendIfJavaScriptDict(name, jsDict) { - if (!(jsDict instanceof _primitives.Dict)) { - return; - } - if (!(0, _primitives.isName)(jsDict.get("S"), "JavaScript")) { - return; - } - let js = jsDict.get("JS"); - if (js instanceof _base_stream.BaseStream) { - js = js.getString(); - } else if (typeof js !== "string") { - return; - } - js = (0, _util.stringToPDFString)(js).replaceAll("\x00", ""); - if (js) { - (javaScript ||= new Map()).set(name, js); - } - } - if (obj instanceof _primitives.Dict && obj.has("JavaScript")) { - const nameTree = new _name_number_tree.NameTree(obj.getRaw("JavaScript"), this.xref); - for (const [key, value] of nameTree.getAll()) { - appendIfJavaScriptDict((0, _util.stringToPDFString)(key), value); - } - } - const openAction = this._catDict.get("OpenAction"); - if (openAction) { - appendIfJavaScriptDict("OpenAction", openAction); - } - return javaScript; - } - get jsActions() { - const javaScript = this._collectJavaScript(); - let actions = (0, _core_utils.collectActions)(this.xref, this._catDict, _util.DocumentActionEventType); - if (javaScript) { - actions ||= Object.create(null); - for (const [key, val] of javaScript) { - if (key in actions) { - actions[key].push(val); - } else { - actions[key] = [val]; - } - } - } - return (0, _util.shadow)(this, "jsActions", actions); - } - async fontFallback(id, handler) { - const translatedFonts = await Promise.all(this.fontCache); - for (const translatedFont of translatedFonts) { - if (translatedFont.loadedName === id) { - translatedFont.fallback(handler); - return; - } - } - } - async cleanup(manuallyTriggered = false) { - (0, _cleanup_helper.clearGlobalCaches)(); - this.globalImageCache.clear(manuallyTriggered); - this.pageKidsCountCache.clear(); - this.pageIndexCache.clear(); - this.nonBlendModesSet.clear(); - const translatedFonts = await Promise.all(this.fontCache); - for (const { - dict - } of translatedFonts) { - delete dict.cacheKey; - } - this.fontCache.clear(); - this.builtInCMapCache.clear(); - this.standardFontDataCache.clear(); - this.systemFontCache.clear(); - } - async getPageDict(pageIndex) { - const nodesToVisit = [this.toplevelPagesDict]; - const visitedNodes = new _primitives.RefSet(); - const pagesRef = this._catDict.getRaw("Pages"); - if (pagesRef instanceof _primitives.Ref) { - visitedNodes.put(pagesRef); - } - const xref = this.xref, - pageKidsCountCache = this.pageKidsCountCache, - pageIndexCache = this.pageIndexCache; - let currentPageIndex = 0; - while (nodesToVisit.length) { - const currentNode = nodesToVisit.pop(); - if (currentNode instanceof _primitives.Ref) { - const count = pageKidsCountCache.get(currentNode); - if (count >= 0 && currentPageIndex + count <= pageIndex) { - currentPageIndex += count; - continue; - } - if (visitedNodes.has(currentNode)) { - throw new _util.FormatError("Pages tree contains circular reference."); - } - visitedNodes.put(currentNode); - const obj = await xref.fetchAsync(currentNode); - if (obj instanceof _primitives.Dict) { - let type = obj.getRaw("Type"); - if (type instanceof _primitives.Ref) { - type = await xref.fetchAsync(type); - } - if ((0, _primitives.isName)(type, "Page") || !obj.has("Kids")) { - if (!pageKidsCountCache.has(currentNode)) { - pageKidsCountCache.put(currentNode, 1); - } - if (!pageIndexCache.has(currentNode)) { - pageIndexCache.put(currentNode, currentPageIndex); - } - if (currentPageIndex === pageIndex) { - return [obj, currentNode]; - } - currentPageIndex++; - continue; - } - } - nodesToVisit.push(obj); - continue; - } - if (!(currentNode instanceof _primitives.Dict)) { - throw new _util.FormatError("Page dictionary kid reference points to wrong type of object."); - } - const { - objId - } = currentNode; - let count = currentNode.getRaw("Count"); - if (count instanceof _primitives.Ref) { - count = await xref.fetchAsync(count); - } - if (Number.isInteger(count) && count >= 0) { - if (objId && !pageKidsCountCache.has(objId)) { - pageKidsCountCache.put(objId, count); - } - if (currentPageIndex + count <= pageIndex) { - currentPageIndex += count; - continue; - } - } - let kids = currentNode.getRaw("Kids"); - if (kids instanceof _primitives.Ref) { - kids = await xref.fetchAsync(kids); - } - if (!Array.isArray(kids)) { - let type = currentNode.getRaw("Type"); - if (type instanceof _primitives.Ref) { - type = await xref.fetchAsync(type); - } - if ((0, _primitives.isName)(type, "Page") || !currentNode.has("Kids")) { - if (currentPageIndex === pageIndex) { - return [currentNode, null]; - } - currentPageIndex++; - continue; - } - throw new _util.FormatError("Page dictionary kids object is not an array."); - } - for (let last = kids.length - 1; last >= 0; last--) { - nodesToVisit.push(kids[last]); - } - } - throw new Error(`Page index ${pageIndex} not found.`); - } - async getAllPageDicts(recoveryMode = false) { - const { - ignoreErrors - } = this.pdfManager.evaluatorOptions; - const queue = [{ - currentNode: this.toplevelPagesDict, - posInKids: 0 - }]; - const visitedNodes = new _primitives.RefSet(); - const pagesRef = this._catDict.getRaw("Pages"); - if (pagesRef instanceof _primitives.Ref) { - visitedNodes.put(pagesRef); - } - const map = new Map(), - xref = this.xref, - pageIndexCache = this.pageIndexCache; - let pageIndex = 0; - function addPageDict(pageDict, pageRef) { - if (pageRef && !pageIndexCache.has(pageRef)) { - pageIndexCache.put(pageRef, pageIndex); - } - map.set(pageIndex++, [pageDict, pageRef]); - } - function addPageError(error) { - if (error instanceof _core_utils.XRefEntryException && !recoveryMode) { - throw error; - } - if (recoveryMode && ignoreErrors && pageIndex === 0) { - (0, _util.warn)(`getAllPageDicts - Skipping invalid first page: "${error}".`); - error = _primitives.Dict.empty; - } - map.set(pageIndex++, [error, null]); - } - while (queue.length > 0) { - const queueItem = queue.at(-1); - const { - currentNode, - posInKids - } = queueItem; - let kids = currentNode.getRaw("Kids"); - if (kids instanceof _primitives.Ref) { - try { - kids = await xref.fetchAsync(kids); - } catch (ex) { - addPageError(ex); - break; - } - } - if (!Array.isArray(kids)) { - addPageError(new _util.FormatError("Page dictionary kids object is not an array.")); - break; - } - if (posInKids >= kids.length) { - queue.pop(); - continue; - } - const kidObj = kids[posInKids]; - let obj; - if (kidObj instanceof _primitives.Ref) { - if (visitedNodes.has(kidObj)) { - addPageError(new _util.FormatError("Pages tree contains circular reference.")); - break; - } - visitedNodes.put(kidObj); - try { - obj = await xref.fetchAsync(kidObj); - } catch (ex) { - addPageError(ex); - break; - } - } else { - obj = kidObj; - } - if (!(obj instanceof _primitives.Dict)) { - addPageError(new _util.FormatError("Page dictionary kid reference points to wrong type of object.")); - break; - } - let type = obj.getRaw("Type"); - if (type instanceof _primitives.Ref) { - try { - type = await xref.fetchAsync(type); - } catch (ex) { - addPageError(ex); - break; - } - } - if ((0, _primitives.isName)(type, "Page") || !obj.has("Kids")) { - addPageDict(obj, kidObj instanceof _primitives.Ref ? kidObj : null); - } else { - queue.push({ - currentNode: obj, - posInKids: 0 - }); - } - queueItem.posInKids++; - } - return map; - } - getPageIndex(pageRef) { - const cachedPageIndex = this.pageIndexCache.get(pageRef); - if (cachedPageIndex !== undefined) { - return Promise.resolve(cachedPageIndex); - } - const xref = this.xref; - function pagesBeforeRef(kidRef) { - let total = 0, - parentRef; - return xref.fetchAsync(kidRef).then(function (node) { - if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, "Page") && !(node instanceof _primitives.Dict && !node.has("Type") && node.has("Contents"))) { - throw new _util.FormatError("The reference does not point to a /Page dictionary."); - } - if (!node) { - return null; - } - if (!(node instanceof _primitives.Dict)) { - throw new _util.FormatError("Node must be a dictionary."); - } - parentRef = node.getRaw("Parent"); - return node.getAsync("Parent"); - }).then(function (parent) { - if (!parent) { - return null; - } - if (!(parent instanceof _primitives.Dict)) { - throw new _util.FormatError("Parent must be a dictionary."); - } - return parent.getAsync("Kids"); - }).then(function (kids) { - if (!kids) { - return null; - } - const kidPromises = []; - let found = false; - for (const kid of kids) { - if (!(kid instanceof _primitives.Ref)) { - throw new _util.FormatError("Kid must be a reference."); - } - if ((0, _primitives.isRefsEqual)(kid, kidRef)) { - found = true; - break; - } - kidPromises.push(xref.fetchAsync(kid).then(function (obj) { - if (!(obj instanceof _primitives.Dict)) { - throw new _util.FormatError("Kid node must be a dictionary."); - } - if (obj.has("Count")) { - total += obj.get("Count"); - } else { - total++; - } - })); - } - if (!found) { - throw new _util.FormatError("Kid reference not found in parent's kids."); - } - return Promise.all(kidPromises).then(function () { - return [total, parentRef]; - }); - }); - } - let total = 0; - const next = ref => pagesBeforeRef(ref).then(args => { - if (!args) { - this.pageIndexCache.put(pageRef, total); - return total; - } - const [count, parentRef] = args; - total += count; - return next(parentRef); - }); - return next(pageRef); - } - get baseUrl() { - const uri = this._catDict.get("URI"); - if (uri instanceof _primitives.Dict) { - const base = uri.get("Base"); - if (typeof base === "string") { - const absoluteUrl = (0, _util.createValidAbsoluteUrl)(base, null, { - tryConvertEncoding: true - }); - if (absoluteUrl) { - return (0, _util.shadow)(this, "baseUrl", absoluteUrl.href); - } - } - } - return (0, _util.shadow)(this, "baseUrl", this.pdfManager.docBaseUrl); - } - static parseDestDictionary({ - destDict, - resultObj, - docBaseUrl = null, - docAttachments = null - }) { - if (!(destDict instanceof _primitives.Dict)) { - (0, _util.warn)("parseDestDictionary: `destDict` must be a dictionary."); - return; - } - let action = destDict.get("A"), - url, - dest; - if (!(action instanceof _primitives.Dict)) { - if (destDict.has("Dest")) { - action = destDict.get("Dest"); - } else { - action = destDict.get("AA"); - if (action instanceof _primitives.Dict) { - if (action.has("D")) { - action = action.get("D"); - } else if (action.has("U")) { - action = action.get("U"); - } - } - } - } - if (action instanceof _primitives.Dict) { - const actionType = action.get("S"); - if (!(actionType instanceof _primitives.Name)) { - (0, _util.warn)("parseDestDictionary: Invalid type in Action dictionary."); - return; - } - const actionName = actionType.name; - switch (actionName) { - case "ResetForm": - const flags = action.get("Flags"); - const include = ((typeof flags === "number" ? flags : 0) & 1) === 0; - const fields = []; - const refs = []; - for (const obj of action.get("Fields") || []) { - if (obj instanceof _primitives.Ref) { - refs.push(obj.toString()); - } else if (typeof obj === "string") { - fields.push((0, _util.stringToPDFString)(obj)); - } - } - resultObj.resetForm = { - fields, - refs, - include - }; - break; - case "URI": - url = action.get("URI"); - if (url instanceof _primitives.Name) { - url = "/" + url.name; - } - break; - case "GoTo": - dest = action.get("D"); - break; - case "Launch": - case "GoToR": - const urlDict = action.get("F"); - if (urlDict instanceof _primitives.Dict) { - url = urlDict.get("F") || null; - } else if (typeof urlDict === "string") { - url = urlDict; - } - let remoteDest = action.get("D"); - if (remoteDest) { - if (remoteDest instanceof _primitives.Name) { - remoteDest = remoteDest.name; - } - if (typeof url === "string") { - const baseUrl = url.split("#")[0]; - if (typeof remoteDest === "string") { - url = baseUrl + "#" + remoteDest; - } else if (Array.isArray(remoteDest)) { - url = baseUrl + "#" + JSON.stringify(remoteDest); - } - } - } - const newWindow = action.get("NewWindow"); - if (typeof newWindow === "boolean") { - resultObj.newWindow = newWindow; - } - break; - case "GoToE": - const target = action.get("T"); - let attachment; - if (docAttachments && target instanceof _primitives.Dict) { - const relationship = target.get("R"); - const name = target.get("N"); - if ((0, _primitives.isName)(relationship, "C") && typeof name === "string") { - attachment = docAttachments[(0, _util.stringToPDFString)(name)]; - } - } - if (attachment) { - resultObj.attachment = attachment; - } else { - (0, _util.warn)(`parseDestDictionary - unimplemented "GoToE" action.`); - } - break; - case "Named": - const namedAction = action.get("N"); - if (namedAction instanceof _primitives.Name) { - resultObj.action = namedAction.name; - } - break; - case "SetOCGState": - const state = action.get("State"); - const preserveRB = action.get("PreserveRB"); - if (!Array.isArray(state) || state.length === 0) { - break; - } - const stateArr = []; - for (const elem of state) { - if (elem instanceof _primitives.Name) { - switch (elem.name) { - case "ON": - case "OFF": - case "Toggle": - stateArr.push(elem.name); - break; - } - } else if (elem instanceof _primitives.Ref) { - stateArr.push(elem.toString()); - } - } - if (stateArr.length !== state.length) { - break; - } - resultObj.setOCGState = { - state: stateArr, - preserveRB: typeof preserveRB === "boolean" ? preserveRB : true - }; - break; - case "JavaScript": - const jsAction = action.get("JS"); - let js; - if (jsAction instanceof _base_stream.BaseStream) { - js = jsAction.getString(); - } else if (typeof jsAction === "string") { - js = jsAction; - } - const jsURL = js && (0, _core_utils.recoverJsURL)((0, _util.stringToPDFString)(js)); - if (jsURL) { - url = jsURL.url; - resultObj.newWindow = jsURL.newWindow; - break; - } - default: - if (actionName === "JavaScript" || actionName === "SubmitForm") { - break; - } - (0, _util.warn)(`parseDestDictionary - unsupported action: "${actionName}".`); - break; - } - } else if (destDict.has("Dest")) { - dest = destDict.get("Dest"); - } - if (typeof url === "string") { - const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl, { - addDefaultProtocol: true, - tryConvertEncoding: true - }); - if (absoluteUrl) { - resultObj.url = absoluteUrl.href; - } - resultObj.unsafeUrl = url; - } - if (dest) { - if (dest instanceof _primitives.Name) { - dest = dest.name; - } - if (typeof dest === "string") { - resultObj.dest = (0, _util.stringToPDFString)(dest); - } else if (Array.isArray(dest)) { - resultObj.dest = dest; - } - } - } -} -exports.Catalog = Catalog; - -/***/ }), -/* 67 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.NumberTree = exports.NameTree = void 0; -var _primitives = __w_pdfjs_require__(4); -var _util = __w_pdfjs_require__(2); -class NameOrNumberTree { - constructor(root, xref, type) { - if (this.constructor === NameOrNumberTree) { - (0, _util.unreachable)("Cannot initialize NameOrNumberTree."); - } - this.root = root; - this.xref = xref; - this._type = type; - } - getAll() { - const map = new Map(); - if (!this.root) { - return map; - } - const xref = this.xref; - const processed = new _primitives.RefSet(); - processed.put(this.root); - const queue = [this.root]; - while (queue.length > 0) { - const obj = xref.fetchIfRef(queue.shift()); - if (!(obj instanceof _primitives.Dict)) { - continue; - } - if (obj.has("Kids")) { - const kids = obj.get("Kids"); - if (!Array.isArray(kids)) { - continue; - } - for (const kid of kids) { - if (processed.has(kid)) { - throw new _util.FormatError(`Duplicate entry in "${this._type}" tree.`); - } - queue.push(kid); - processed.put(kid); - } - continue; - } - const entries = obj.get(this._type); - if (!Array.isArray(entries)) { - continue; - } - for (let i = 0, ii = entries.length; i < ii; i += 2) { - map.set(xref.fetchIfRef(entries[i]), xref.fetchIfRef(entries[i + 1])); - } - } - return map; - } - get(key) { - if (!this.root) { - return null; - } - const xref = this.xref; - let kidsOrEntries = xref.fetchIfRef(this.root); - let loopCount = 0; - const MAX_LEVELS = 10; - while (kidsOrEntries.has("Kids")) { - if (++loopCount > MAX_LEVELS) { - (0, _util.warn)(`Search depth limit reached for "${this._type}" tree.`); - return null; - } - const kids = kidsOrEntries.get("Kids"); - if (!Array.isArray(kids)) { - return null; - } - let l = 0, - r = kids.length - 1; - while (l <= r) { - const m = l + r >> 1; - const kid = xref.fetchIfRef(kids[m]); - const limits = kid.get("Limits"); - if (key < xref.fetchIfRef(limits[0])) { - r = m - 1; - } else if (key > xref.fetchIfRef(limits[1])) { - l = m + 1; - } else { - kidsOrEntries = kid; - break; - } - } - if (l > r) { - return null; - } - } - const entries = kidsOrEntries.get(this._type); - if (Array.isArray(entries)) { - let l = 0, - r = entries.length - 2; - while (l <= r) { - const tmp = l + r >> 1, - m = tmp + (tmp & 1); - const currentKey = xref.fetchIfRef(entries[m]); - if (key < currentKey) { - r = m - 2; - } else if (key > currentKey) { - l = m + 2; - } else { - return xref.fetchIfRef(entries[m + 1]); - } - } - } - return null; - } -} -class NameTree extends NameOrNumberTree { - constructor(root, xref) { - super(root, xref, "Names"); - } -} -exports.NameTree = NameTree; -class NumberTree extends NameOrNumberTree { - constructor(root, xref) { - super(root, xref, "Nums"); - } -} -exports.NumberTree = NumberTree; - -/***/ }), -/* 68 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.clearGlobalCaches = clearGlobalCaches; -var _pattern = __w_pdfjs_require__(50); -var _primitives = __w_pdfjs_require__(4); -var _unicode = __w_pdfjs_require__(40); -function clearGlobalCaches() { - (0, _pattern.clearPatternCaches)(); - (0, _primitives.clearPrimitiveCaches)(); - (0, _unicode.clearUnicodeCaches)(); -} - -/***/ }), -/* 69 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FileSpec = void 0; -var _util = __w_pdfjs_require__(2); -var _base_stream = __w_pdfjs_require__(5); -var _primitives = __w_pdfjs_require__(4); -function pickPlatformItem(dict) { - if (dict.has("UF")) { - return dict.get("UF"); - } else if (dict.has("F")) { - return dict.get("F"); - } else if (dict.has("Unix")) { - return dict.get("Unix"); - } else if (dict.has("Mac")) { - return dict.get("Mac"); - } else if (dict.has("DOS")) { - return dict.get("DOS"); - } - return null; -} -class FileSpec { - constructor(root, xref) { - if (!(root instanceof _primitives.Dict)) { - return; - } - this.xref = xref; - this.root = root; - if (root.has("FS")) { - this.fs = root.get("FS"); - } - this.description = root.has("Desc") ? (0, _util.stringToPDFString)(root.get("Desc")) : ""; - if (root.has("RF")) { - (0, _util.warn)("Related file specifications are not supported"); - } - this.contentAvailable = true; - if (!root.has("EF")) { - this.contentAvailable = false; - (0, _util.warn)("Non-embedded file specifications are not supported"); - } - } - get filename() { - if (!this._filename && this.root) { - const filename = pickPlatformItem(this.root) || "unnamed"; - this._filename = (0, _util.stringToPDFString)(filename).replaceAll("\\\\", "\\").replaceAll("\\/", "/").replaceAll("\\", "/"); - } - return this._filename; - } - get content() { - if (!this.contentAvailable) { - return null; - } - if (!this.contentRef && this.root) { - this.contentRef = pickPlatformItem(this.root.get("EF")); - } - let content = null; - if (this.contentRef) { - const fileObj = this.xref.fetchIfRef(this.contentRef); - if (fileObj instanceof _base_stream.BaseStream) { - content = fileObj.getBytes(); - } else { - (0, _util.warn)("Embedded file specification points to non-existing/invalid content"); - } - } else { - (0, _util.warn)("Embedded file specification does not have a content"); - } - return content; - } - get serializable() { - return { - filename: this.filename, - content: this.content - }; - } -} -exports.FileSpec = FileSpec; - -/***/ }), -/* 70 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.MetadataParser = void 0; -var _xml_parser = __w_pdfjs_require__(71); -class MetadataParser { - constructor(data) { - data = this._repair(data); - const parser = new _xml_parser.SimpleXMLParser({ - lowerCaseName: true - }); - const xmlDocument = parser.parseFromString(data); - this._metadataMap = new Map(); - this._data = data; - if (xmlDocument) { - this._parse(xmlDocument); - } - } - _repair(data) { - return data.replace(/^[^<]+/, "").replaceAll(/>\\376\\377([^<]+)/g, function (all, codes) { - const bytes = codes.replaceAll(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) { - return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1); - }).replaceAll(/&(amp|apos|gt|lt|quot);/g, function (str, name) { - switch (name) { - case "amp": - return "&"; - case "apos": - return "'"; - case "gt": - return ">"; - case "lt": - return "<"; - case "quot": - return '"'; - } - throw new Error(`_repair: ${name} isn't defined.`); - }); - const charBuf = [">"]; - for (let i = 0, ii = bytes.length; i < ii; i += 2) { - const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1); - if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) { - charBuf.push(String.fromCharCode(code)); - } else { - charBuf.push("&#x" + (0x10000 + code).toString(16).substring(1) + ";"); - } - } - return charBuf.join(""); - }); - } - _getSequence(entry) { - const name = entry.nodeName; - if (name !== "rdf:bag" && name !== "rdf:seq" && name !== "rdf:alt") { - return null; - } - return entry.childNodes.filter(node => node.nodeName === "rdf:li"); - } - _parseArray(entry) { - if (!entry.hasChildNodes()) { - return; - } - const [seqNode] = entry.childNodes; - const sequence = this._getSequence(seqNode) || []; - this._metadataMap.set(entry.nodeName, sequence.map(node => node.textContent.trim())); - } - _parse(xmlDocument) { - let rdf = xmlDocument.documentElement; - if (rdf.nodeName !== "rdf:rdf") { - rdf = rdf.firstChild; - while (rdf && rdf.nodeName !== "rdf:rdf") { - rdf = rdf.nextSibling; - } - } - if (!rdf || rdf.nodeName !== "rdf:rdf" || !rdf.hasChildNodes()) { - return; - } - for (const desc of rdf.childNodes) { - if (desc.nodeName !== "rdf:description") { - continue; - } - for (const entry of desc.childNodes) { - const name = entry.nodeName; - switch (name) { - case "#text": - continue; - case "dc:creator": - case "dc:subject": - this._parseArray(entry); - continue; - } - this._metadataMap.set(name, entry.textContent.trim()); - } - } - } - get serializable() { - return { - parsedData: this._metadataMap, - rawData: this._data - }; - } -} -exports.MetadataParser = MetadataParser; - -/***/ }), -/* 71 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XMLParserErrorCode = exports.XMLParserBase = exports.SimpleXMLParser = exports.SimpleDOMNode = void 0; -var _core_utils = __w_pdfjs_require__(3); -const XMLParserErrorCode = { - NoError: 0, - EndOfDocument: -1, - UnterminatedCdat: -2, - UnterminatedXmlDeclaration: -3, - UnterminatedDoctypeDeclaration: -4, - UnterminatedComment: -5, - MalformedElement: -6, - OutOfMemory: -7, - UnterminatedAttributeValue: -8, - UnterminatedElement: -9, - ElementNeverBegun: -10 -}; -exports.XMLParserErrorCode = XMLParserErrorCode; -function isWhitespace(s, index) { - const ch = s[index]; - return ch === " " || ch === "\n" || ch === "\r" || ch === "\t"; -} -function isWhitespaceString(s) { - for (let i = 0, ii = s.length; i < ii; i++) { - if (!isWhitespace(s, i)) { - return false; - } - } - return true; -} -class XMLParserBase { - _resolveEntities(s) { - return s.replaceAll(/&([^;]+);/g, (all, entity) => { - if (entity.substring(0, 2) === "#x") { - return String.fromCodePoint(parseInt(entity.substring(2), 16)); - } else if (entity.substring(0, 1) === "#") { - return String.fromCodePoint(parseInt(entity.substring(1), 10)); - } - switch (entity) { - case "lt": - return "<"; - case "gt": - return ">"; - case "amp": - return "&"; - case "quot": - return '"'; - case "apos": - return "'"; - } - return this.onResolveEntity(entity); - }); - } - _parseContent(s, start) { - const attributes = []; - let pos = start; - function skipWs() { - while (pos < s.length && isWhitespace(s, pos)) { - ++pos; - } - } - while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") { - ++pos; - } - const name = s.substring(start, pos); - skipWs(); - while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") { - skipWs(); - let attrName = "", - attrValue = ""; - while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") { - attrName += s[pos]; - ++pos; - } - skipWs(); - if (s[pos] !== "=") { - return null; - } - ++pos; - skipWs(); - const attrEndChar = s[pos]; - if (attrEndChar !== '"' && attrEndChar !== "'") { - return null; - } - const attrEndIndex = s.indexOf(attrEndChar, ++pos); - if (attrEndIndex < 0) { - return null; - } - attrValue = s.substring(pos, attrEndIndex); - attributes.push({ - name: attrName, - value: this._resolveEntities(attrValue) - }); - pos = attrEndIndex + 1; - skipWs(); - } - return { - name, - attributes, - parsed: pos - start - }; - } - _parseProcessingInstruction(s, start) { - let pos = start; - function skipWs() { - while (pos < s.length && isWhitespace(s, pos)) { - ++pos; - } - } - while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "?" && s[pos] !== "/") { - ++pos; - } - const name = s.substring(start, pos); - skipWs(); - const attrStart = pos; - while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) { - ++pos; - } - const value = s.substring(attrStart, pos); - return { - name, - value, - parsed: pos - start - }; - } - parseXml(s) { - let i = 0; - while (i < s.length) { - const ch = s[i]; - let j = i; - if (ch === "<") { - ++j; - const ch2 = s[j]; - let q; - switch (ch2) { - case "/": - ++j; - q = s.indexOf(">", j); - if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedElement); - return; - } - this.onEndElement(s.substring(j, q)); - j = q + 1; - break; - case "?": - ++j; - const pi = this._parseProcessingInstruction(s, j); - if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") { - this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration); - return; - } - this.onPi(pi.name, pi.value); - j += pi.parsed + 2; - break; - case "!": - if (s.substring(j + 1, j + 3) === "--") { - q = s.indexOf("-->", j + 3); - if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedComment); - return; - } - this.onComment(s.substring(j + 3, q)); - j = q + 3; - } else if (s.substring(j + 1, j + 8) === "[CDATA[") { - q = s.indexOf("]]>", j + 8); - if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedCdat); - return; - } - this.onCdata(s.substring(j + 8, q)); - j = q + 3; - } else if (s.substring(j + 1, j + 8) === "DOCTYPE") { - const q2 = s.indexOf("[", j + 8); - let complexDoctype = false; - q = s.indexOf(">", j + 8); - if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); - return; - } - if (q2 > 0 && q > q2) { - q = s.indexOf("]>", j + 8); - if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); - return; - } - complexDoctype = true; - } - const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0)); - this.onDoctype(doctypeContent); - j = q + (complexDoctype ? 2 : 1); - } else { - this.onError(XMLParserErrorCode.MalformedElement); - return; - } - break; - default: - const content = this._parseContent(s, j); - if (content === null) { - this.onError(XMLParserErrorCode.MalformedElement); - return; - } - let isClosed = false; - if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") { - isClosed = true; - } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") { - this.onError(XMLParserErrorCode.UnterminatedElement); - return; - } - this.onBeginElement(content.name, content.attributes, isClosed); - j += content.parsed + (isClosed ? 2 : 1); - break; - } - } else { - while (j < s.length && s[j] !== "<") { - j++; - } - const text = s.substring(i, j); - this.onText(this._resolveEntities(text)); - } - i = j; - } - } - onResolveEntity(name) { - return `&${name};`; - } - onPi(name, value) {} - onComment(text) {} - onCdata(text) {} - onDoctype(doctypeContent) {} - onText(text) {} - onBeginElement(name, attributes, isEmpty) {} - onEndElement(name) {} - onError(code) {} -} -exports.XMLParserBase = XMLParserBase; -class SimpleDOMNode { - constructor(nodeName, nodeValue) { - this.nodeName = nodeName; - this.nodeValue = nodeValue; - Object.defineProperty(this, "parentNode", { - value: null, - writable: true - }); - } - get firstChild() { - return this.childNodes?.[0]; - } - get nextSibling() { - const childNodes = this.parentNode.childNodes; - if (!childNodes) { - return undefined; - } - const index = childNodes.indexOf(this); - if (index === -1) { - return undefined; - } - return childNodes[index + 1]; - } - get textContent() { - if (!this.childNodes) { - return this.nodeValue || ""; - } - return this.childNodes.map(function (child) { - return child.textContent; - }).join(""); - } - get children() { - return this.childNodes || []; - } - hasChildNodes() { - return this.childNodes?.length > 0; - } - searchNode(paths, pos) { - if (pos >= paths.length) { - return this; - } - const component = paths[pos]; - if (component.name.startsWith("#") && pos < paths.length - 1) { - return this.searchNode(paths, pos + 1); - } - const stack = []; - let node = this; - while (true) { - if (component.name === node.nodeName) { - if (component.pos === 0) { - const res = node.searchNode(paths, pos + 1); - if (res !== null) { - return res; - } - } else if (stack.length === 0) { - return null; - } else { - const [parent] = stack.pop(); - let siblingPos = 0; - for (const child of parent.childNodes) { - if (component.name === child.nodeName) { - if (siblingPos === component.pos) { - return child.searchNode(paths, pos + 1); - } - siblingPos++; - } - } - return node.searchNode(paths, pos + 1); - } - } - if (node.childNodes?.length > 0) { - stack.push([node, 0]); - node = node.childNodes[0]; - } else if (stack.length === 0) { - return null; - } else { - while (stack.length !== 0) { - const [parent, currentPos] = stack.pop(); - const newPos = currentPos + 1; - if (newPos < parent.childNodes.length) { - stack.push([parent, newPos]); - node = parent.childNodes[newPos]; - break; - } - } - if (stack.length === 0) { - return null; - } - } - } - } - dump(buffer) { - if (this.nodeName === "#text") { - buffer.push((0, _core_utils.encodeToXmlString)(this.nodeValue)); - return; - } - buffer.push(`<${this.nodeName}`); - if (this.attributes) { - for (const attribute of this.attributes) { - buffer.push(` ${attribute.name}="${(0, _core_utils.encodeToXmlString)(attribute.value)}"`); - } - } - if (this.hasChildNodes()) { - buffer.push(">"); - for (const child of this.childNodes) { - child.dump(buffer); - } - buffer.push(``); - } else if (this.nodeValue) { - buffer.push(`>${(0, _core_utils.encodeToXmlString)(this.nodeValue)}`); - } else { - buffer.push("/>"); - } - } -} -exports.SimpleDOMNode = SimpleDOMNode; -class SimpleXMLParser extends XMLParserBase { - constructor({ - hasAttributes = false, - lowerCaseName = false - }) { - super(); - this._currentFragment = null; - this._stack = null; - this._errorCode = XMLParserErrorCode.NoError; - this._hasAttributes = hasAttributes; - this._lowerCaseName = lowerCaseName; - } - parseFromString(data) { - this._currentFragment = []; - this._stack = []; - this._errorCode = XMLParserErrorCode.NoError; - this.parseXml(data); - if (this._errorCode !== XMLParserErrorCode.NoError) { - return undefined; - } - const [documentElement] = this._currentFragment; - if (!documentElement) { - return undefined; - } - return { - documentElement - }; - } - onText(text) { - if (isWhitespaceString(text)) { - return; - } - const node = new SimpleDOMNode("#text", text); - this._currentFragment.push(node); - } - onCdata(text) { - const node = new SimpleDOMNode("#text", text); - this._currentFragment.push(node); - } - onBeginElement(name, attributes, isEmpty) { - if (this._lowerCaseName) { - name = name.toLowerCase(); - } - const node = new SimpleDOMNode(name); - node.childNodes = []; - if (this._hasAttributes) { - node.attributes = attributes; - } - this._currentFragment.push(node); - if (isEmpty) { - return; - } - this._stack.push(this._currentFragment); - this._currentFragment = node.childNodes; - } - onEndElement(name) { - this._currentFragment = this._stack.pop() || []; - const lastElement = this._currentFragment.at(-1); - if (!lastElement) { - return null; - } - for (const childNode of lastElement.childNodes) { - childNode.parentNode = lastElement; - } - return lastElement; - } - onError(code) { - this._errorCode = code; - } -} -exports.SimpleXMLParser = SimpleXMLParser; - -/***/ }), -/* 72 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StructTreeRoot = exports.StructTreePage = void 0; -var _util = __w_pdfjs_require__(2); -var _primitives = __w_pdfjs_require__(4); -var _name_number_tree = __w_pdfjs_require__(67); -var _writer = __w_pdfjs_require__(73); -const MAX_DEPTH = 40; -const StructElementType = { - PAGE_CONTENT: 1, - STREAM_CONTENT: 2, - OBJECT: 3, - ANNOTATION: 4, - ELEMENT: 5 -}; -class StructTreeRoot { - constructor(rootDict, rootRef) { - this.dict = rootDict; - this.ref = rootRef instanceof _primitives.Ref ? rootRef : null; - this.roleMap = new Map(); - this.structParentIds = null; - } - init() { - this.readRoleMap(); - } - #addIdToPage(pageRef, id, type) { - if (!(pageRef instanceof _primitives.Ref) || id < 0) { - return; - } - this.structParentIds ||= new _primitives.RefSetCache(); - let ids = this.structParentIds.get(pageRef); - if (!ids) { - ids = []; - this.structParentIds.put(pageRef, ids); - } - ids.push([id, type]); - } - addAnnotationIdToPage(pageRef, id) { - this.#addIdToPage(pageRef, id, StructElementType.ANNOTATION); - } - readRoleMap() { - const roleMapDict = this.dict.get("RoleMap"); - if (!(roleMapDict instanceof _primitives.Dict)) { - return; - } - roleMapDict.forEach((key, value) => { - if (!(value instanceof _primitives.Name)) { - return; - } - this.roleMap.set(key, value.name); - }); - } - static async canCreateStructureTree({ - catalogRef, - pdfManager, - newAnnotationsByPage - }) { - if (!(catalogRef instanceof _primitives.Ref)) { - (0, _util.warn)("Cannot save the struct tree: no catalog reference."); - return false; - } - let nextKey = 0; - let hasNothingToUpdate = true; - for (const [pageIndex, elements] of newAnnotationsByPage) { - const { - ref: pageRef - } = await pdfManager.getPage(pageIndex); - if (!(pageRef instanceof _primitives.Ref)) { - (0, _util.warn)(`Cannot save the struct tree: page ${pageIndex} has no ref.`); - hasNothingToUpdate = true; - break; - } - for (const element of elements) { - if (element.accessibilityData?.type) { - element.parentTreeId = nextKey++; - hasNothingToUpdate = false; - } - } - } - if (hasNothingToUpdate) { - for (const elements of newAnnotationsByPage.values()) { - for (const element of elements) { - delete element.parentTreeId; - } - } - return false; - } - return true; - } - static async createStructureTree({ - newAnnotationsByPage, - xref, - catalogRef, - pdfManager, - newRefs - }) { - const root = pdfManager.catalog.cloneDict(); - const structTreeRootRef = xref.getNewTemporaryRef(); - root.set("StructTreeRoot", structTreeRootRef); - const buffer = []; - await (0, _writer.writeObject)(catalogRef, root, buffer, xref); - newRefs.push({ - ref: catalogRef, - data: buffer.join("") - }); - const structTreeRoot = new _primitives.Dict(xref); - structTreeRoot.set("Type", _primitives.Name.get("StructTreeRoot")); - const parentTreeRef = xref.getNewTemporaryRef(); - structTreeRoot.set("ParentTree", parentTreeRef); - const kids = []; - structTreeRoot.set("K", kids); - const parentTree = new _primitives.Dict(xref); - const nums = []; - parentTree.set("Nums", nums); - const nextKey = await this.#writeKids({ - newAnnotationsByPage, - structTreeRootRef, - kids, - nums, - xref, - pdfManager, - newRefs, - buffer - }); - structTreeRoot.set("ParentTreeNextKey", nextKey); - buffer.length = 0; - await (0, _writer.writeObject)(parentTreeRef, parentTree, buffer, xref); - newRefs.push({ - ref: parentTreeRef, - data: buffer.join("") - }); - buffer.length = 0; - await (0, _writer.writeObject)(structTreeRootRef, structTreeRoot, buffer, xref); - newRefs.push({ - ref: structTreeRootRef, - data: buffer.join("") - }); - } - async canUpdateStructTree({ - pdfManager, - newAnnotationsByPage - }) { - if (!this.ref) { - (0, _util.warn)("Cannot update the struct tree: no root reference."); - return false; - } - let nextKey = this.dict.get("ParentTreeNextKey"); - if (!Number.isInteger(nextKey) || nextKey < 0) { - (0, _util.warn)("Cannot update the struct tree: invalid next key."); - return false; - } - const parentTree = this.dict.get("ParentTree"); - if (!(parentTree instanceof _primitives.Dict)) { - (0, _util.warn)("Cannot update the struct tree: ParentTree isn't a dict."); - return false; - } - const nums = parentTree.get("Nums"); - if (!Array.isArray(nums)) { - (0, _util.warn)("Cannot update the struct tree: nums isn't an array."); - return false; - } - const { - numPages - } = pdfManager.catalog; - for (const pageIndex of newAnnotationsByPage.keys()) { - const { - pageDict, - ref: pageRef - } = await pdfManager.getPage(pageIndex); - if (!(pageRef instanceof _primitives.Ref)) { - (0, _util.warn)(`Cannot save the struct tree: page ${pageIndex} has no ref.`); - return false; - } - const id = pageDict.get("StructParents"); - if (!Number.isInteger(id) || id < 0 || id >= numPages) { - (0, _util.warn)(`Cannot save the struct tree: page ${pageIndex} has no id.`); - return false; - } - } - let hasNothingToUpdate = true; - for (const [pageIndex, elements] of newAnnotationsByPage) { - const { - pageDict - } = await pdfManager.getPage(pageIndex); - StructTreeRoot.#collectParents({ - elements, - xref: this.dict.xref, - pageDict, - parentTree - }); - for (const element of elements) { - if (element.accessibilityData?.type) { - element.parentTreeId = nextKey++; - hasNothingToUpdate = false; - } - } - } - if (hasNothingToUpdate) { - for (const elements of newAnnotationsByPage.values()) { - for (const element of elements) { - delete element.parentTreeId; - delete element.structTreeParent; - } - } - return false; - } - return true; - } - async updateStructureTree({ - newAnnotationsByPage, - pdfManager, - newRefs - }) { - const xref = this.dict.xref; - const structTreeRoot = this.dict.clone(); - const structTreeRootRef = this.ref; - let parentTreeRef = structTreeRoot.getRaw("ParentTree"); - let parentTree; - if (parentTreeRef instanceof _primitives.Ref) { - parentTree = xref.fetch(parentTreeRef); - } else { - parentTree = parentTreeRef; - parentTreeRef = xref.getNewTemporaryRef(); - structTreeRoot.set("ParentTree", parentTreeRef); - } - parentTree = parentTree.clone(); - let nums = parentTree.getRaw("Nums"); - let numsRef = null; - if (nums instanceof _primitives.Ref) { - numsRef = nums; - nums = xref.fetch(numsRef); - } - nums = nums.slice(); - if (!numsRef) { - parentTree.set("Nums", nums); - } - let kids = structTreeRoot.getRaw("K"); - let kidsRef = null; - if (kids instanceof _primitives.Ref) { - kidsRef = kids; - kids = xref.fetch(kidsRef); - } else { - kidsRef = xref.getNewTemporaryRef(); - structTreeRoot.set("K", kidsRef); - } - kids = Array.isArray(kids) ? kids.slice() : [kids]; - const buffer = []; - const newNextkey = await StructTreeRoot.#writeKids({ - newAnnotationsByPage, - structTreeRootRef, - kids, - nums, - xref, - pdfManager, - newRefs, - buffer - }); - structTreeRoot.set("ParentTreeNextKey", newNextkey); - buffer.length = 0; - await (0, _writer.writeObject)(kidsRef, kids, buffer, xref); - newRefs.push({ - ref: kidsRef, - data: buffer.join("") - }); - if (numsRef) { - buffer.length = 0; - await (0, _writer.writeObject)(numsRef, nums, buffer, xref); - newRefs.push({ - ref: numsRef, - data: buffer.join("") - }); - } - buffer.length = 0; - await (0, _writer.writeObject)(parentTreeRef, parentTree, buffer, xref); - newRefs.push({ - ref: parentTreeRef, - data: buffer.join("") - }); - buffer.length = 0; - await (0, _writer.writeObject)(structTreeRootRef, structTreeRoot, buffer, xref); - newRefs.push({ - ref: structTreeRootRef, - data: buffer.join("") - }); - } - static async #writeKids({ - newAnnotationsByPage, - structTreeRootRef, - kids, - nums, - xref, - pdfManager, - newRefs, - buffer - }) { - const objr = _primitives.Name.get("OBJR"); - let nextKey = -Infinity; - for (const [pageIndex, elements] of newAnnotationsByPage) { - const { - ref: pageRef - } = await pdfManager.getPage(pageIndex); - for (const { - accessibilityData: { - type, - title, - lang, - alt, - expanded, - actualText - }, - ref, - parentTreeId, - structTreeParent - } of elements) { - nextKey = Math.max(nextKey, parentTreeId); - const tagRef = xref.getNewTemporaryRef(); - const tagDict = new _primitives.Dict(xref); - tagDict.set("S", _primitives.Name.get(type)); - if (title) { - tagDict.set("T", title); - } - if (lang) { - tagDict.set("Lang", lang); - } - if (alt) { - tagDict.set("Alt", alt); - } - if (expanded) { - tagDict.set("E", expanded); - } - if (actualText) { - tagDict.set("ActualText", actualText); - } - if (structTreeParent) { - await this.#updateParentTag({ - structTreeParent, - tagDict, - newTagRef: tagRef, - fallbackRef: structTreeRootRef, - xref, - newRefs, - buffer - }); - } else { - tagDict.set("P", structTreeRootRef); - } - const objDict = new _primitives.Dict(xref); - tagDict.set("K", objDict); - objDict.set("Type", objr); - objDict.set("Pg", pageRef); - objDict.set("Obj", ref); - buffer.length = 0; - await (0, _writer.writeObject)(tagRef, tagDict, buffer, xref); - newRefs.push({ - ref: tagRef, - data: buffer.join("") - }); - nums.push(parentTreeId, tagRef); - kids.push(tagRef); - } - } - return nextKey + 1; - } - static #collectParents({ - elements, - xref, - pageDict, - parentTree - }) { - const idToElement = new Map(); - for (const element of elements) { - if (element.structTreeParentId) { - const id = parseInt(element.structTreeParentId.split("_mc")[1], 10); - idToElement.set(id, element); - } - } - const id = pageDict.get("StructParents"); - const numberTree = new _name_number_tree.NumberTree(parentTree, xref); - const parentArray = numberTree.get(id); - if (!Array.isArray(parentArray)) { - return; - } - const updateElement = (kid, pageKid, kidRef) => { - const element = idToElement.get(kid); - if (element) { - const parentRef = pageKid.getRaw("P"); - const parentDict = xref.fetchIfRef(parentRef); - if (parentRef instanceof _primitives.Ref && parentDict instanceof _primitives.Dict) { - element.structTreeParent = { - ref: kidRef, - dict: pageKid - }; - } - return true; - } - return false; - }; - for (const kidRef of parentArray) { - if (!(kidRef instanceof _primitives.Ref)) { - continue; - } - const pageKid = xref.fetch(kidRef); - const k = pageKid.get("K"); - if (Number.isInteger(k)) { - updateElement(k, pageKid, kidRef); - continue; - } - if (!Array.isArray(k)) { - continue; - } - for (let kid of k) { - kid = xref.fetchIfRef(kid); - if (Number.isInteger(kid) && updateElement(kid, pageKid, kidRef)) { - break; - } - } - } - } - static async #updateParentTag({ - structTreeParent: { - ref, - dict - }, - tagDict, - newTagRef, - fallbackRef, - xref, - newRefs, - buffer - }) { - const parentRef = dict.getRaw("P"); - let parentDict = xref.fetchIfRef(parentRef); - tagDict.set("P", parentRef); - let saveParentDict = false; - let parentKids; - let parentKidsRef = parentDict.getRaw("K"); - if (!(parentKidsRef instanceof _primitives.Ref)) { - parentKids = parentKidsRef; - parentKidsRef = xref.getNewTemporaryRef(); - parentDict = parentDict.clone(); - parentDict.set("K", parentKidsRef); - saveParentDict = true; - } else { - parentKids = xref.fetch(parentKidsRef); - } - if (Array.isArray(parentKids)) { - const index = parentKids.indexOf(ref); - if (index >= 0) { - parentKids = parentKids.slice(); - parentKids.splice(index + 1, 0, newTagRef); - } else { - (0, _util.warn)("Cannot update the struct tree: parent kid not found."); - tagDict.set("P", fallbackRef); - return; - } - } else if (parentKids instanceof _primitives.Dict) { - parentKids = [parentKidsRef, newTagRef]; - parentKidsRef = xref.getNewTemporaryRef(); - parentDict.set("K", parentKidsRef); - saveParentDict = true; - } - buffer.length = 0; - await (0, _writer.writeObject)(parentKidsRef, parentKids, buffer, xref); - newRefs.push({ - ref: parentKidsRef, - data: buffer.join("") - }); - if (!saveParentDict) { - return; - } - buffer.length = 0; - await (0, _writer.writeObject)(parentRef, parentDict, buffer, xref); - newRefs.push({ - ref: parentRef, - data: buffer.join("") - }); - } -} -exports.StructTreeRoot = StructTreeRoot; -class StructElementNode { - constructor(tree, dict) { - this.tree = tree; - this.dict = dict; - this.kids = []; - this.parseKids(); - } - get role() { - const nameObj = this.dict.get("S"); - const name = nameObj instanceof _primitives.Name ? nameObj.name : ""; - const { - root - } = this.tree; - if (root.roleMap.has(name)) { - return root.roleMap.get(name); - } - return name; - } - parseKids() { - let pageObjId = null; - const objRef = this.dict.getRaw("Pg"); - if (objRef instanceof _primitives.Ref) { - pageObjId = objRef.toString(); - } - const kids = this.dict.get("K"); - if (Array.isArray(kids)) { - for (const kid of kids) { - const element = this.parseKid(pageObjId, kid); - if (element) { - this.kids.push(element); - } - } - } else { - const element = this.parseKid(pageObjId, kids); - if (element) { - this.kids.push(element); - } - } - } - parseKid(pageObjId, kid) { - if (Number.isInteger(kid)) { - if (this.tree.pageDict.objId !== pageObjId) { - return null; - } - return new StructElement({ - type: StructElementType.PAGE_CONTENT, - mcid: kid, - pageObjId - }); - } - let kidDict = null; - if (kid instanceof _primitives.Ref) { - kidDict = this.dict.xref.fetch(kid); - } else if (kid instanceof _primitives.Dict) { - kidDict = kid; - } - if (!kidDict) { - return null; - } - const pageRef = kidDict.getRaw("Pg"); - if (pageRef instanceof _primitives.Ref) { - pageObjId = pageRef.toString(); - } - const type = kidDict.get("Type") instanceof _primitives.Name ? kidDict.get("Type").name : null; - if (type === "MCR") { - if (this.tree.pageDict.objId !== pageObjId) { - return null; - } - const kidRef = kidDict.getRaw("Stm"); - return new StructElement({ - type: StructElementType.STREAM_CONTENT, - refObjId: kidRef instanceof _primitives.Ref ? kidRef.toString() : null, - pageObjId, - mcid: kidDict.get("MCID") - }); - } - if (type === "OBJR") { - if (this.tree.pageDict.objId !== pageObjId) { - return null; - } - const kidRef = kidDict.getRaw("Obj"); - return new StructElement({ - type: StructElementType.OBJECT, - refObjId: kidRef instanceof _primitives.Ref ? kidRef.toString() : null, - pageObjId - }); - } - return new StructElement({ - type: StructElementType.ELEMENT, - dict: kidDict - }); - } -} -class StructElement { - constructor({ - type, - dict = null, - mcid = null, - pageObjId = null, - refObjId = null - }) { - this.type = type; - this.dict = dict; - this.mcid = mcid; - this.pageObjId = pageObjId; - this.refObjId = refObjId; - this.parentNode = null; - } -} -class StructTreePage { - constructor(structTreeRoot, pageDict) { - this.root = structTreeRoot; - this.rootDict = structTreeRoot ? structTreeRoot.dict : null; - this.pageDict = pageDict; - this.nodes = []; - } - parse(pageRef) { - if (!this.root || !this.rootDict) { - return; - } - const parentTree = this.rootDict.get("ParentTree"); - if (!parentTree) { - return; - } - const id = this.pageDict.get("StructParents"); - const ids = pageRef instanceof _primitives.Ref && this.root.structParentIds?.get(pageRef); - if (!Number.isInteger(id) && !ids) { - return; - } - const map = new Map(); - const numberTree = new _name_number_tree.NumberTree(parentTree, this.rootDict.xref); - if (Number.isInteger(id)) { - const parentArray = numberTree.get(id); - if (Array.isArray(parentArray)) { - for (const ref of parentArray) { - if (ref instanceof _primitives.Ref) { - this.addNode(this.rootDict.xref.fetch(ref), map); - } - } - } - } - if (!ids) { - return; - } - for (const [elemId, type] of ids) { - const obj = numberTree.get(elemId); - if (obj) { - const elem = this.addNode(this.rootDict.xref.fetchIfRef(obj), map); - if (elem?.kids?.length === 1 && elem.kids[0].type === StructElementType.OBJECT) { - elem.kids[0].type = type; - } - } - } - } - addNode(dict, map, level = 0) { - if (level > MAX_DEPTH) { - (0, _util.warn)("StructTree MAX_DEPTH reached."); - return null; - } - if (map.has(dict)) { - return map.get(dict); - } - const element = new StructElementNode(this, dict); - map.set(dict, element); - const parent = dict.get("P"); - if (!parent || (0, _primitives.isName)(parent.get("Type"), "StructTreeRoot")) { - if (!this.addTopLevelNode(dict, element)) { - map.delete(dict); - } - return element; - } - const parentNode = this.addNode(parent, map, level + 1); - if (!parentNode) { - return element; - } - let save = false; - for (const kid of parentNode.kids) { - if (kid.type === StructElementType.ELEMENT && kid.dict === dict) { - kid.parentNode = element; - save = true; - } - } - if (!save) { - map.delete(dict); - } - return element; - } - addTopLevelNode(dict, element) { - const obj = this.rootDict.get("K"); - if (!obj) { - return false; - } - if (obj instanceof _primitives.Dict) { - if (obj.objId !== dict.objId) { - return false; - } - this.nodes[0] = element; - return true; - } - if (!Array.isArray(obj)) { - return true; - } - let save = false; - for (let i = 0; i < obj.length; i++) { - const kidRef = obj[i]; - if (kidRef?.toString() === dict.objId) { - this.nodes[i] = element; - save = true; - } - } - return save; - } - get serializable() { - function nodeToSerializable(node, parent, level = 0) { - if (level > MAX_DEPTH) { - (0, _util.warn)("StructTree too deep to be fully serialized."); - return; - } - const obj = Object.create(null); - obj.role = node.role; - obj.children = []; - parent.children.push(obj); - const alt = node.dict.get("Alt"); - if (typeof alt === "string") { - obj.alt = (0, _util.stringToPDFString)(alt); - } - const lang = node.dict.get("Lang"); - if (typeof lang === "string") { - obj.lang = (0, _util.stringToPDFString)(lang); - } - for (const kid of node.kids) { - const kidElement = kid.type === StructElementType.ELEMENT ? kid.parentNode : null; - if (kidElement) { - nodeToSerializable(kidElement, obj, level + 1); - continue; - } else if (kid.type === StructElementType.PAGE_CONTENT || kid.type === StructElementType.STREAM_CONTENT) { - obj.children.push({ - type: "content", - id: `p${kid.pageObjId}_mc${kid.mcid}` - }); - } else if (kid.type === StructElementType.OBJECT) { - obj.children.push({ - type: "object", - id: kid.refObjId - }); - } else if (kid.type === StructElementType.ANNOTATION) { - obj.children.push({ - type: "annotation", - id: `${_util.AnnotationPrefix}${kid.refObjId}` - }); - } - } - } - const root = Object.create(null); - root.children = []; - root.role = "Root"; - for (const child of this.nodes) { - if (!child) { - continue; - } - nodeToSerializable(child, root); - } - return root; - } -} -exports.StructTreePage = StructTreePage; - -/***/ }), -/* 73 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.incrementalUpdate = incrementalUpdate; -exports.writeDict = writeDict; -exports.writeObject = writeObject; -var _util = __w_pdfjs_require__(2); -var _primitives = __w_pdfjs_require__(4); -var _core_utils = __w_pdfjs_require__(3); -var _xml_parser = __w_pdfjs_require__(71); -var _base_stream = __w_pdfjs_require__(5); -var _crypto = __w_pdfjs_require__(74); -async function writeObject(ref, obj, buffer, { - encrypt = null -}) { - const transform = encrypt?.createCipherTransform(ref.num, ref.gen); - buffer.push(`${ref.num} ${ref.gen} obj\n`); - if (obj instanceof _primitives.Dict) { - await writeDict(obj, buffer, transform); - } else if (obj instanceof _base_stream.BaseStream) { - await writeStream(obj, buffer, transform); - } else if (Array.isArray(obj)) { - await writeArray(obj, buffer, transform); - } - buffer.push("\nendobj\n"); -} -async function writeDict(dict, buffer, transform) { - buffer.push("<<"); - for (const key of dict.getKeys()) { - buffer.push(` /${(0, _core_utils.escapePDFName)(key)} `); - await writeValue(dict.getRaw(key), buffer, transform); - } - buffer.push(">>"); -} -async function writeStream(stream, buffer, transform) { - let string = stream.getString(); - const { - dict - } = stream; - const [filter, params] = await Promise.all([dict.getAsync("Filter"), dict.getAsync("DecodeParms")]); - const filterZero = Array.isArray(filter) ? await dict.xref.fetchIfRefAsync(filter[0]) : filter; - const isFilterZeroFlateDecode = (0, _primitives.isName)(filterZero, "FlateDecode"); - const MIN_LENGTH_FOR_COMPRESSING = 256; - if (typeof CompressionStream !== "undefined" && (string.length >= MIN_LENGTH_FOR_COMPRESSING || isFilterZeroFlateDecode)) { - try { - const byteArray = (0, _util.stringToBytes)(string); - const cs = new CompressionStream("deflate"); - const writer = cs.writable.getWriter(); - writer.write(byteArray); - writer.close(); - const buf = await new Response(cs.readable).arrayBuffer(); - string = (0, _util.bytesToString)(new Uint8Array(buf)); - let newFilter, newParams; - if (!filter) { - newFilter = _primitives.Name.get("FlateDecode"); - } else if (!isFilterZeroFlateDecode) { - newFilter = Array.isArray(filter) ? [_primitives.Name.get("FlateDecode"), ...filter] : [_primitives.Name.get("FlateDecode"), filter]; - if (params) { - newParams = Array.isArray(params) ? [null, ...params] : [null, params]; - } - } - if (newFilter) { - dict.set("Filter", newFilter); - } - if (newParams) { - dict.set("DecodeParms", newParams); - } - } catch (ex) { - (0, _util.info)(`writeStream - cannot compress data: "${ex}".`); - } - } - if (transform) { - string = transform.encryptString(string); - } - dict.set("Length", string.length); - await writeDict(dict, buffer, transform); - buffer.push(" stream\n", string, "\nendstream"); -} -async function writeArray(array, buffer, transform) { - buffer.push("["); - let first = true; - for (const val of array) { - if (!first) { - buffer.push(" "); - } else { - first = false; - } - await writeValue(val, buffer, transform); - } - buffer.push("]"); -} -async function writeValue(value, buffer, transform) { - if (value instanceof _primitives.Name) { - buffer.push(`/${(0, _core_utils.escapePDFName)(value.name)}`); - } else if (value instanceof _primitives.Ref) { - buffer.push(`${value.num} ${value.gen} R`); - } else if (Array.isArray(value)) { - await writeArray(value, buffer, transform); - } else if (typeof value === "string") { - if (transform) { - value = transform.encryptString(value); - } - buffer.push(`(${(0, _core_utils.escapeString)(value)})`); - } else if (typeof value === "number") { - buffer.push((0, _core_utils.numberToString)(value)); - } else if (typeof value === "boolean") { - buffer.push(value.toString()); - } else if (value instanceof _primitives.Dict) { - await writeDict(value, buffer, transform); - } else if (value instanceof _base_stream.BaseStream) { - await writeStream(value, buffer, transform); - } else if (value === null) { - buffer.push("null"); - } else { - (0, _util.warn)(`Unhandled value in writer: ${typeof value}, please file a bug.`); - } -} -function writeInt(number, size, offset, buffer) { - for (let i = size + offset - 1; i > offset - 1; i--) { - buffer[i] = number & 0xff; - number >>= 8; - } - return offset + size; -} -function writeString(string, offset, buffer) { - for (let i = 0, len = string.length; i < len; i++) { - buffer[offset + i] = string.charCodeAt(i) & 0xff; - } -} -function computeMD5(filesize, xrefInfo) { - const time = Math.floor(Date.now() / 1000); - const filename = xrefInfo.filename || ""; - const md5Buffer = [time.toString(), filename, filesize.toString()]; - let md5BufferLen = md5Buffer.reduce((a, str) => a + str.length, 0); - for (const value of Object.values(xrefInfo.info)) { - md5Buffer.push(value); - md5BufferLen += value.length; - } - const array = new Uint8Array(md5BufferLen); - let offset = 0; - for (const str of md5Buffer) { - writeString(str, offset, array); - offset += str.length; - } - return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array)); -} -function writeXFADataForAcroform(str, newRefs) { - const xml = new _xml_parser.SimpleXMLParser({ - hasAttributes: true - }).parseFromString(str); - for (const { - xfa - } of newRefs) { - if (!xfa) { - continue; - } - const { - path, - value - } = xfa; - if (!path) { - continue; - } - const nodePath = (0, _core_utils.parseXFAPath)(path); - let node = xml.documentElement.searchNode(nodePath, 0); - if (!node && nodePath.length > 1) { - node = xml.documentElement.searchNode([nodePath.at(-1)], 0); - } - if (node) { - node.childNodes = Array.isArray(value) ? value.map(val => new _xml_parser.SimpleDOMNode("value", val)) : [new _xml_parser.SimpleDOMNode("#text", value)]; - } else { - (0, _util.warn)(`Node not found for path: ${path}`); - } - } - const buffer = []; - xml.documentElement.dump(buffer); - return buffer.join(""); -} -async function updateAcroform({ - xref, - acroForm, - acroFormRef, - hasXfa, - hasXfaDatasetsEntry, - xfaDatasetsRef, - needAppearances, - newRefs -}) { - if (hasXfa && !hasXfaDatasetsEntry && !xfaDatasetsRef) { - (0, _util.warn)("XFA - Cannot save it"); - } - if (!needAppearances && (!hasXfa || !xfaDatasetsRef || hasXfaDatasetsEntry)) { - return; - } - const dict = acroForm.clone(); - if (hasXfa && !hasXfaDatasetsEntry) { - const newXfa = acroForm.get("XFA").slice(); - newXfa.splice(2, 0, "datasets"); - newXfa.splice(3, 0, xfaDatasetsRef); - dict.set("XFA", newXfa); - } - if (needAppearances) { - dict.set("NeedAppearances", true); - } - const buffer = []; - await writeObject(acroFormRef, dict, buffer, xref); - newRefs.push({ - ref: acroFormRef, - data: buffer.join("") - }); -} -function updateXFA({ - xfaData, - xfaDatasetsRef, - newRefs, - xref -}) { - if (xfaData === null) { - const datasets = xref.fetchIfRef(xfaDatasetsRef); - xfaData = writeXFADataForAcroform(datasets.getString(), newRefs); - } - const encrypt = xref.encrypt; - if (encrypt) { - const transform = encrypt.createCipherTransform(xfaDatasetsRef.num, xfaDatasetsRef.gen); - xfaData = transform.encryptString(xfaData); - } - const data = `${xfaDatasetsRef.num} ${xfaDatasetsRef.gen} obj\n` + `<< /Type /EmbeddedFile /Length ${xfaData.length}>>\nstream\n` + xfaData + "\nendstream\nendobj\n"; - newRefs.push({ - ref: xfaDatasetsRef, - data - }); -} -async function incrementalUpdate({ - originalData, - xrefInfo, - newRefs, - xref = null, - hasXfa = false, - xfaDatasetsRef = null, - hasXfaDatasetsEntry = false, - needAppearances, - acroFormRef = null, - acroForm = null, - xfaData = null -}) { - await updateAcroform({ - xref, - acroForm, - acroFormRef, - hasXfa, - hasXfaDatasetsEntry, - xfaDatasetsRef, - needAppearances, - newRefs - }); - if (hasXfa) { - updateXFA({ - xfaData, - xfaDatasetsRef, - newRefs, - xref - }); - } - const newXref = new _primitives.Dict(null); - const refForXrefTable = xrefInfo.newRef; - let buffer, baseOffset; - const lastByte = originalData.at(-1); - if (lastByte === 0x0a || lastByte === 0x0d) { - buffer = []; - baseOffset = originalData.length; - } else { - buffer = ["\n"]; - baseOffset = originalData.length + 1; - } - newXref.set("Size", refForXrefTable.num + 1); - newXref.set("Prev", xrefInfo.startXRef); - newXref.set("Type", _primitives.Name.get("XRef")); - if (xrefInfo.rootRef !== null) { - newXref.set("Root", xrefInfo.rootRef); - } - if (xrefInfo.infoRef !== null) { - newXref.set("Info", xrefInfo.infoRef); - } - if (xrefInfo.encryptRef !== null) { - newXref.set("Encrypt", xrefInfo.encryptRef); - } - newRefs.push({ - ref: refForXrefTable, - data: "" - }); - newRefs = newRefs.sort((a, b) => { - return a.ref.num - b.ref.num; - }); - const xrefTableData = [[0, 1, 0xffff]]; - const indexes = [0, 1]; - let maxOffset = 0; - for (const { - ref, - data - } of newRefs) { - maxOffset = Math.max(maxOffset, baseOffset); - xrefTableData.push([1, baseOffset, Math.min(ref.gen, 0xffff)]); - baseOffset += data.length; - indexes.push(ref.num, 1); - buffer.push(data); - } - newXref.set("Index", indexes); - if (Array.isArray(xrefInfo.fileIds) && xrefInfo.fileIds.length > 0) { - const md5 = computeMD5(baseOffset, xrefInfo); - newXref.set("ID", [xrefInfo.fileIds[0], md5]); - } - const offsetSize = Math.ceil(Math.log2(maxOffset) / 8); - const sizes = [1, offsetSize, 2]; - const structSize = sizes[0] + sizes[1] + sizes[2]; - const tableLength = structSize * xrefTableData.length; - newXref.set("W", sizes); - newXref.set("Length", tableLength); - buffer.push(`${refForXrefTable.num} ${refForXrefTable.gen} obj\n`); - await writeDict(newXref, buffer, null); - buffer.push(" stream\n"); - const bufferLen = buffer.reduce((a, str) => a + str.length, 0); - const footer = `\nendstream\nendobj\nstartxref\n${baseOffset}\n%%EOF\n`; - const array = new Uint8Array(originalData.length + bufferLen + tableLength + footer.length); - array.set(originalData); - let offset = originalData.length; - for (const str of buffer) { - writeString(str, offset, array); - offset += str.length; - } - for (const [type, objOffset, gen] of xrefTableData) { - offset = writeInt(type, sizes[0], offset, array); - offset = writeInt(objOffset, sizes[1], offset, array); - offset = writeInt(gen, sizes[2], offset, array); - } - writeString(footer, offset, array); - return array; -} - -/***/ }), -/* 74 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.calculateSHA256 = exports.calculateMD5 = exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0; -exports.calculateSHA384 = calculateSHA384; -exports.calculateSHA512 = void 0; -var _util = __w_pdfjs_require__(2); -var _primitives = __w_pdfjs_require__(4); -var _decrypt_stream = __w_pdfjs_require__(75); -class ARCFourCipher { - constructor(key) { - this.a = 0; - this.b = 0; - const s = new Uint8Array(256); - const keyLength = key.length; - for (let i = 0; i < 256; ++i) { - s[i] = i; - } - for (let i = 0, j = 0; i < 256; ++i) { - const tmp = s[i]; - j = j + tmp + key[i % keyLength] & 0xff; - s[i] = s[j]; - s[j] = tmp; - } - this.s = s; - } - encryptBlock(data) { - let a = this.a, - b = this.b; - const s = this.s; - const n = data.length; - const output = new Uint8Array(n); - for (let i = 0; i < n; ++i) { - a = a + 1 & 0xff; - const tmp = s[a]; - b = b + tmp & 0xff; - const tmp2 = s[b]; - s[a] = tmp2; - s[b] = tmp; - output[i] = data[i] ^ s[tmp + tmp2 & 0xff]; - } - this.a = a; - this.b = b; - return output; - } - decryptBlock(data) { - return this.encryptBlock(data); - } - encrypt(data) { - return this.encryptBlock(data); - } -} -exports.ARCFourCipher = ARCFourCipher; -const calculateMD5 = function calculateMD5Closure() { - const r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]); - const k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]); - function hash(data, offset, length) { - let h0 = 1732584193, - h1 = -271733879, - h2 = -1732584194, - h3 = 271733878; - const paddedLength = length + 72 & ~63; - const padded = new Uint8Array(paddedLength); - let i, j; - for (i = 0; i < length; ++i) { - padded[i] = data[offset++]; - } - padded[i++] = 0x80; - const n = paddedLength - 8; - while (i < n) { - padded[i++] = 0; - } - padded[i++] = length << 3 & 0xff; - padded[i++] = length >> 5 & 0xff; - padded[i++] = length >> 13 & 0xff; - padded[i++] = length >> 21 & 0xff; - padded[i++] = length >>> 29 & 0xff; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - const w = new Int32Array(16); - for (i = 0; i < paddedLength;) { - for (j = 0; j < 16; ++j, i += 4) { - w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24; - } - let a = h0, - b = h1, - c = h2, - d = h3, - f, - g; - for (j = 0; j < 64; ++j) { - if (j < 16) { - f = b & c | ~b & d; - g = j; - } else if (j < 32) { - f = d & b | ~d & c; - g = 5 * j + 1 & 15; - } else if (j < 48) { - f = b ^ c ^ d; - g = 3 * j + 5 & 15; - } else { - f = c ^ (b | ~d); - g = 7 * j & 15; - } - const tmp = d, - rotateArg = a + f + k[j] + w[g] | 0, - rotate = r[j]; - d = c; - c = b; - b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0; - a = tmp; - } - h0 = h0 + a | 0; - h1 = h1 + b | 0; - h2 = h2 + c | 0; - h3 = h3 + d | 0; - } - return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]); - } - return hash; -}(); -exports.calculateMD5 = calculateMD5; -class Word64 { - constructor(highInteger, lowInteger) { - this.high = highInteger | 0; - this.low = lowInteger | 0; - } - and(word) { - this.high &= word.high; - this.low &= word.low; - } - xor(word) { - this.high ^= word.high; - this.low ^= word.low; - } - or(word) { - this.high |= word.high; - this.low |= word.low; - } - shiftRight(places) { - if (places >= 32) { - this.low = this.high >>> places - 32 | 0; - this.high = 0; - } else { - this.low = this.low >>> places | this.high << 32 - places; - this.high = this.high >>> places | 0; - } - } - shiftLeft(places) { - if (places >= 32) { - this.high = this.low << places - 32; - this.low = 0; - } else { - this.high = this.high << places | this.low >>> 32 - places; - this.low <<= places; - } - } - rotateRight(places) { - let low, high; - if (places & 32) { - high = this.low; - low = this.high; - } else { - low = this.low; - high = this.high; - } - places &= 31; - this.low = low >>> places | high << 32 - places; - this.high = high >>> places | low << 32 - places; - } - not() { - this.high = ~this.high; - this.low = ~this.low; - } - add(word) { - const lowAdd = (this.low >>> 0) + (word.low >>> 0); - let highAdd = (this.high >>> 0) + (word.high >>> 0); - if (lowAdd > 0xffffffff) { - highAdd += 1; - } - this.low = lowAdd | 0; - this.high = highAdd | 0; - } - copyTo(bytes, offset) { - bytes[offset] = this.high >>> 24 & 0xff; - bytes[offset + 1] = this.high >> 16 & 0xff; - bytes[offset + 2] = this.high >> 8 & 0xff; - bytes[offset + 3] = this.high & 0xff; - bytes[offset + 4] = this.low >>> 24 & 0xff; - bytes[offset + 5] = this.low >> 16 & 0xff; - bytes[offset + 6] = this.low >> 8 & 0xff; - bytes[offset + 7] = this.low & 0xff; - } - assign(word) { - this.high = word.high; - this.low = word.low; - } -} -const calculateSHA256 = function calculateSHA256Closure() { - function rotr(x, n) { - return x >>> n | x << 32 - n; - } - function ch(x, y, z) { - return x & y ^ ~x & z; - } - function maj(x, y, z) { - return x & y ^ x & z ^ y & z; - } - function sigma(x) { - return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); - } - function sigmaPrime(x) { - return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); - } - function littleSigma(x) { - return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3; - } - function littleSigmaPrime(x) { - return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10; - } - const k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; - function hash(data, offset, length) { - let h0 = 0x6a09e667, - h1 = 0xbb67ae85, - h2 = 0x3c6ef372, - h3 = 0xa54ff53a, - h4 = 0x510e527f, - h5 = 0x9b05688c, - h6 = 0x1f83d9ab, - h7 = 0x5be0cd19; - const paddedLength = Math.ceil((length + 9) / 64) * 64; - const padded = new Uint8Array(paddedLength); - let i, j; - for (i = 0; i < length; ++i) { - padded[i] = data[offset++]; - } - padded[i++] = 0x80; - const n = paddedLength - 8; - while (i < n) { - padded[i++] = 0; - } - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = length >>> 29 & 0xff; - padded[i++] = length >> 21 & 0xff; - padded[i++] = length >> 13 & 0xff; - padded[i++] = length >> 5 & 0xff; - padded[i++] = length << 3 & 0xff; - const w = new Uint32Array(64); - for (i = 0; i < paddedLength;) { - for (j = 0; j < 16; ++j) { - w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; - i += 4; - } - for (j = 16; j < 64; ++j) { - w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0; - } - let a = h0, - b = h1, - c = h2, - d = h3, - e = h4, - f = h5, - g = h6, - h = h7, - t1, - t2; - for (j = 0; j < 64; ++j) { - t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j]; - t2 = sigma(a) + maj(a, b, c); - h = g; - g = f; - f = e; - e = d + t1 | 0; - d = c; - c = b; - b = a; - a = t1 + t2 | 0; - } - h0 = h0 + a | 0; - h1 = h1 + b | 0; - h2 = h2 + c | 0; - h3 = h3 + d | 0; - h4 = h4 + e | 0; - h5 = h5 + f | 0; - h6 = h6 + g | 0; - h7 = h7 + h | 0; - } - return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF]); - } - return hash; -}(); -exports.calculateSHA256 = calculateSHA256; -const calculateSHA512 = function calculateSHA512Closure() { - function ch(result, x, y, z, tmp) { - result.assign(x); - result.and(y); - tmp.assign(x); - tmp.not(); - tmp.and(z); - result.xor(tmp); - } - function maj(result, x, y, z, tmp) { - result.assign(x); - result.and(y); - tmp.assign(x); - tmp.and(z); - result.xor(tmp); - tmp.assign(y); - tmp.and(z); - result.xor(tmp); - } - function sigma(result, x, tmp) { - result.assign(x); - result.rotateRight(28); - tmp.assign(x); - tmp.rotateRight(34); - result.xor(tmp); - tmp.assign(x); - tmp.rotateRight(39); - result.xor(tmp); - } - function sigmaPrime(result, x, tmp) { - result.assign(x); - result.rotateRight(14); - tmp.assign(x); - tmp.rotateRight(18); - result.xor(tmp); - tmp.assign(x); - tmp.rotateRight(41); - result.xor(tmp); - } - function littleSigma(result, x, tmp) { - result.assign(x); - result.rotateRight(1); - tmp.assign(x); - tmp.rotateRight(8); - result.xor(tmp); - tmp.assign(x); - tmp.shiftRight(7); - result.xor(tmp); - } - function littleSigmaPrime(result, x, tmp) { - result.assign(x); - result.rotateRight(19); - tmp.assign(x); - tmp.rotateRight(61); - result.xor(tmp); - tmp.assign(x); - tmp.shiftRight(6); - result.xor(tmp); - } - const k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)]; - function hash(data, offset, length, mode384 = false) { - let h0, h1, h2, h3, h4, h5, h6, h7; - if (!mode384) { - h0 = new Word64(0x6a09e667, 0xf3bcc908); - h1 = new Word64(0xbb67ae85, 0x84caa73b); - h2 = new Word64(0x3c6ef372, 0xfe94f82b); - h3 = new Word64(0xa54ff53a, 0x5f1d36f1); - h4 = new Word64(0x510e527f, 0xade682d1); - h5 = new Word64(0x9b05688c, 0x2b3e6c1f); - h6 = new Word64(0x1f83d9ab, 0xfb41bd6b); - h7 = new Word64(0x5be0cd19, 0x137e2179); - } else { - h0 = new Word64(0xcbbb9d5d, 0xc1059ed8); - h1 = new Word64(0x629a292a, 0x367cd507); - h2 = new Word64(0x9159015a, 0x3070dd17); - h3 = new Word64(0x152fecd8, 0xf70e5939); - h4 = new Word64(0x67332667, 0xffc00b31); - h5 = new Word64(0x8eb44a87, 0x68581511); - h6 = new Word64(0xdb0c2e0d, 0x64f98fa7); - h7 = new Word64(0x47b5481d, 0xbefa4fa4); - } - const paddedLength = Math.ceil((length + 17) / 128) * 128; - const padded = new Uint8Array(paddedLength); - let i, j; - for (i = 0; i < length; ++i) { - padded[i] = data[offset++]; - } - padded[i++] = 0x80; - const n = paddedLength - 16; - while (i < n) { - padded[i++] = 0; - } - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = length >>> 29 & 0xff; - padded[i++] = length >> 21 & 0xff; - padded[i++] = length >> 13 & 0xff; - padded[i++] = length >> 5 & 0xff; - padded[i++] = length << 3 & 0xff; - const w = new Array(80); - for (i = 0; i < 80; i++) { - w[i] = new Word64(0, 0); - } - let a = new Word64(0, 0), - b = new Word64(0, 0), - c = new Word64(0, 0); - let d = new Word64(0, 0), - e = new Word64(0, 0), - f = new Word64(0, 0); - let g = new Word64(0, 0), - h = new Word64(0, 0); - const t1 = new Word64(0, 0), - t2 = new Word64(0, 0); - const tmp1 = new Word64(0, 0), - tmp2 = new Word64(0, 0); - let tmp3; - for (i = 0; i < paddedLength;) { - for (j = 0; j < 16; ++j) { - w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; - w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7]; - i += 8; - } - for (j = 16; j < 80; ++j) { - tmp3 = w[j]; - littleSigmaPrime(tmp3, w[j - 2], tmp2); - tmp3.add(w[j - 7]); - littleSigma(tmp1, w[j - 15], tmp2); - tmp3.add(tmp1); - tmp3.add(w[j - 16]); - } - a.assign(h0); - b.assign(h1); - c.assign(h2); - d.assign(h3); - e.assign(h4); - f.assign(h5); - g.assign(h6); - h.assign(h7); - for (j = 0; j < 80; ++j) { - t1.assign(h); - sigmaPrime(tmp1, e, tmp2); - t1.add(tmp1); - ch(tmp1, e, f, g, tmp2); - t1.add(tmp1); - t1.add(k[j]); - t1.add(w[j]); - sigma(t2, a, tmp2); - maj(tmp1, a, b, c, tmp2); - t2.add(tmp1); - tmp3 = h; - h = g; - g = f; - f = e; - d.add(t1); - e = d; - d = c; - c = b; - b = a; - tmp3.assign(t1); - tmp3.add(t2); - a = tmp3; - } - h0.add(a); - h1.add(b); - h2.add(c); - h3.add(d); - h4.add(e); - h5.add(f); - h6.add(g); - h7.add(h); - } - let result; - if (!mode384) { - result = new Uint8Array(64); - h0.copyTo(result, 0); - h1.copyTo(result, 8); - h2.copyTo(result, 16); - h3.copyTo(result, 24); - h4.copyTo(result, 32); - h5.copyTo(result, 40); - h6.copyTo(result, 48); - h7.copyTo(result, 56); - } else { - result = new Uint8Array(48); - h0.copyTo(result, 0); - h1.copyTo(result, 8); - h2.copyTo(result, 16); - h3.copyTo(result, 24); - h4.copyTo(result, 32); - h5.copyTo(result, 40); - } - return result; - } - return hash; -}(); -exports.calculateSHA512 = calculateSHA512; -function calculateSHA384(data, offset, length) { - return calculateSHA512(data, offset, length, true); -} -class NullCipher { - decryptBlock(data) { - return data; - } - encrypt(data) { - return data; - } -} -class AESBaseCipher { - constructor() { - if (this.constructor === AESBaseCipher) { - (0, _util.unreachable)("Cannot initialize AESBaseCipher."); - } - this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]); - this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]); - this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]); - this._mixCol = new Uint8Array(256); - for (let i = 0; i < 256; i++) { - this._mixCol[i] = i < 128 ? i << 1 : i << 1 ^ 0x1b; - } - this.buffer = new Uint8Array(16); - this.bufferPosition = 0; - } - _expandKey(cipherKey) { - (0, _util.unreachable)("Cannot call `_expandKey` on the base class"); - } - _decrypt(input, key) { - let t, u, v; - const state = new Uint8Array(16); - state.set(input); - for (let j = 0, k = this._keySize; j < 16; ++j, ++k) { - state[j] ^= key[k]; - } - for (let i = this._cyclesOfRepetition - 1; i >= 1; --i) { - t = state[13]; - state[13] = state[9]; - state[9] = state[5]; - state[5] = state[1]; - state[1] = t; - t = state[14]; - u = state[10]; - state[14] = state[6]; - state[10] = state[2]; - state[6] = t; - state[2] = u; - t = state[15]; - u = state[11]; - v = state[7]; - state[15] = state[3]; - state[11] = t; - state[7] = u; - state[3] = v; - for (let j = 0; j < 16; ++j) { - state[j] = this._inv_s[state[j]]; - } - for (let j = 0, k = i * 16; j < 16; ++j, ++k) { - state[j] ^= key[k]; - } - for (let j = 0; j < 16; j += 4) { - const s0 = this._mix[state[j]]; - const s1 = this._mix[state[j + 1]]; - const s2 = this._mix[state[j + 2]]; - const s3 = this._mix[state[j + 3]]; - t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8; - state[j] = t >>> 24 & 0xff; - state[j + 1] = t >> 16 & 0xff; - state[j + 2] = t >> 8 & 0xff; - state[j + 3] = t & 0xff; - } - } - t = state[13]; - state[13] = state[9]; - state[9] = state[5]; - state[5] = state[1]; - state[1] = t; - t = state[14]; - u = state[10]; - state[14] = state[6]; - state[10] = state[2]; - state[6] = t; - state[2] = u; - t = state[15]; - u = state[11]; - v = state[7]; - state[15] = state[3]; - state[11] = t; - state[7] = u; - state[3] = v; - for (let j = 0; j < 16; ++j) { - state[j] = this._inv_s[state[j]]; - state[j] ^= key[j]; - } - return state; - } - _encrypt(input, key) { - const s = this._s; - let t, u, v; - const state = new Uint8Array(16); - state.set(input); - for (let j = 0; j < 16; ++j) { - state[j] ^= key[j]; - } - for (let i = 1; i < this._cyclesOfRepetition; i++) { - for (let j = 0; j < 16; ++j) { - state[j] = s[state[j]]; - } - v = state[1]; - state[1] = state[5]; - state[5] = state[9]; - state[9] = state[13]; - state[13] = v; - v = state[2]; - u = state[6]; - state[2] = state[10]; - state[6] = state[14]; - state[10] = v; - state[14] = u; - v = state[3]; - u = state[7]; - t = state[11]; - state[3] = state[15]; - state[7] = v; - state[11] = u; - state[15] = t; - for (let j = 0; j < 16; j += 4) { - const s0 = state[j + 0]; - const s1 = state[j + 1]; - const s2 = state[j + 2]; - const s3 = state[j + 3]; - t = s0 ^ s1 ^ s2 ^ s3; - state[j + 0] ^= t ^ this._mixCol[s0 ^ s1]; - state[j + 1] ^= t ^ this._mixCol[s1 ^ s2]; - state[j + 2] ^= t ^ this._mixCol[s2 ^ s3]; - state[j + 3] ^= t ^ this._mixCol[s3 ^ s0]; - } - for (let j = 0, k = i * 16; j < 16; ++j, ++k) { - state[j] ^= key[k]; - } - } - for (let j = 0; j < 16; ++j) { - state[j] = s[state[j]]; - } - v = state[1]; - state[1] = state[5]; - state[5] = state[9]; - state[9] = state[13]; - state[13] = v; - v = state[2]; - u = state[6]; - state[2] = state[10]; - state[6] = state[14]; - state[10] = v; - state[14] = u; - v = state[3]; - u = state[7]; - t = state[11]; - state[3] = state[15]; - state[7] = v; - state[11] = u; - state[15] = t; - for (let j = 0, k = this._keySize; j < 16; ++j, ++k) { - state[j] ^= key[k]; - } - return state; - } - _decryptBlock2(data, finalize) { - const sourceLength = data.length; - let buffer = this.buffer, - bufferLength = this.bufferPosition; - const result = []; - let iv = this.iv; - for (let i = 0; i < sourceLength; ++i) { - buffer[bufferLength] = data[i]; - ++bufferLength; - if (bufferLength < 16) { - continue; - } - const plain = this._decrypt(buffer, this._key); - for (let j = 0; j < 16; ++j) { - plain[j] ^= iv[j]; - } - iv = buffer; - result.push(plain); - buffer = new Uint8Array(16); - bufferLength = 0; - } - this.buffer = buffer; - this.bufferLength = bufferLength; - this.iv = iv; - if (result.length === 0) { - return new Uint8Array(0); - } - let outputLength = 16 * result.length; - if (finalize) { - const lastBlock = result.at(-1); - let psLen = lastBlock[15]; - if (psLen <= 16) { - for (let i = 15, ii = 16 - psLen; i >= ii; --i) { - if (lastBlock[i] !== psLen) { - psLen = 0; - break; - } - } - outputLength -= psLen; - result[result.length - 1] = lastBlock.subarray(0, 16 - psLen); - } - } - const output = new Uint8Array(outputLength); - for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { - output.set(result[i], j); - } - return output; - } - decryptBlock(data, finalize, iv = null) { - const sourceLength = data.length; - const buffer = this.buffer; - let bufferLength = this.bufferPosition; - if (iv) { - this.iv = iv; - } else { - for (let i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) { - buffer[bufferLength] = data[i]; - } - if (bufferLength < 16) { - this.bufferLength = bufferLength; - return new Uint8Array(0); - } - this.iv = buffer; - data = data.subarray(16); - } - this.buffer = new Uint8Array(16); - this.bufferLength = 0; - this.decryptBlock = this._decryptBlock2; - return this.decryptBlock(data, finalize); - } - encrypt(data, iv) { - const sourceLength = data.length; - let buffer = this.buffer, - bufferLength = this.bufferPosition; - const result = []; - if (!iv) { - iv = new Uint8Array(16); - } - for (let i = 0; i < sourceLength; ++i) { - buffer[bufferLength] = data[i]; - ++bufferLength; - if (bufferLength < 16) { - continue; - } - for (let j = 0; j < 16; ++j) { - buffer[j] ^= iv[j]; - } - const cipher = this._encrypt(buffer, this._key); - iv = cipher; - result.push(cipher); - buffer = new Uint8Array(16); - bufferLength = 0; - } - this.buffer = buffer; - this.bufferLength = bufferLength; - this.iv = iv; - if (result.length === 0) { - return new Uint8Array(0); - } - const outputLength = 16 * result.length; - const output = new Uint8Array(outputLength); - for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { - output.set(result[i], j); - } - return output; - } -} -class AES128Cipher extends AESBaseCipher { - constructor(key) { - super(); - this._cyclesOfRepetition = 10; - this._keySize = 160; - this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d]); - this._key = this._expandKey(key); - } - _expandKey(cipherKey) { - const b = 176; - const s = this._s; - const rcon = this._rcon; - const result = new Uint8Array(b); - result.set(cipherKey); - for (let j = 16, i = 1; j < b; ++i) { - let t1 = result[j - 3]; - let t2 = result[j - 2]; - let t3 = result[j - 1]; - let t4 = result[j - 4]; - t1 = s[t1]; - t2 = s[t2]; - t3 = s[t3]; - t4 = s[t4]; - t1 ^= rcon[i]; - for (let n = 0; n < 4; ++n) { - result[j] = t1 ^= result[j - 16]; - j++; - result[j] = t2 ^= result[j - 16]; - j++; - result[j] = t3 ^= result[j - 16]; - j++; - result[j] = t4 ^= result[j - 16]; - j++; - } - } - return result; - } -} -exports.AES128Cipher = AES128Cipher; -class AES256Cipher extends AESBaseCipher { - constructor(key) { - super(); - this._cyclesOfRepetition = 14; - this._keySize = 224; - this._key = this._expandKey(key); - } - _expandKey(cipherKey) { - const b = 240; - const s = this._s; - const result = new Uint8Array(b); - result.set(cipherKey); - let r = 1; - let t1, t2, t3, t4; - for (let j = 32, i = 1; j < b; ++i) { - if (j % 32 === 16) { - t1 = s[t1]; - t2 = s[t2]; - t3 = s[t3]; - t4 = s[t4]; - } else if (j % 32 === 0) { - t1 = result[j - 3]; - t2 = result[j - 2]; - t3 = result[j - 1]; - t4 = result[j - 4]; - t1 = s[t1]; - t2 = s[t2]; - t3 = s[t3]; - t4 = s[t4]; - t1 ^= r; - if ((r <<= 1) >= 256) { - r = (r ^ 0x1b) & 0xff; - } - } - for (let n = 0; n < 4; ++n) { - result[j] = t1 ^= result[j - 32]; - j++; - result[j] = t2 ^= result[j - 32]; - j++; - result[j] = t3 ^= result[j - 32]; - j++; - result[j] = t4 ^= result[j - 32]; - j++; - } - } - return result; - } -} -exports.AES256Cipher = AES256Cipher; -class PDF17 { - checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { - const hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerValidationSalt, password.length); - hashData.set(userBytes, password.length + ownerValidationSalt.length); - const result = calculateSHA256(hashData, 0, hashData.length); - return (0, _util.isArrayEqual)(result, ownerPassword); - } - checkUserPassword(password, userValidationSalt, userPassword) { - const hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userValidationSalt, password.length); - const result = calculateSHA256(hashData, 0, hashData.length); - return (0, _util.isArrayEqual)(result, userPassword); - } - getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { - const hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerKeySalt, password.length); - hashData.set(userBytes, password.length + ownerKeySalt.length); - const key = calculateSHA256(hashData, 0, hashData.length); - const cipher = new AES256Cipher(key); - return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); - } - getUserKey(password, userKeySalt, userEncryption) { - const hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userKeySalt, password.length); - const key = calculateSHA256(hashData, 0, hashData.length); - const cipher = new AES256Cipher(key); - return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); - } -} -exports.PDF17 = PDF17; -class PDF20 { - _hash(password, input, userBytes) { - let k = calculateSHA256(input, 0, input.length).subarray(0, 32); - let e = [0]; - let i = 0; - while (i < 64 || e.at(-1) > i - 32) { - const combinedLength = password.length + k.length + userBytes.length, - combinedArray = new Uint8Array(combinedLength); - let writeOffset = 0; - combinedArray.set(password, writeOffset); - writeOffset += password.length; - combinedArray.set(k, writeOffset); - writeOffset += k.length; - combinedArray.set(userBytes, writeOffset); - const k1 = new Uint8Array(combinedLength * 64); - for (let j = 0, pos = 0; j < 64; j++, pos += combinedLength) { - k1.set(combinedArray, pos); - } - const cipher = new AES128Cipher(k.subarray(0, 16)); - e = cipher.encrypt(k1, k.subarray(16, 32)); - const remainder = e.slice(0, 16).reduce((a, b) => a + b, 0) % 3; - if (remainder === 0) { - k = calculateSHA256(e, 0, e.length); - } else if (remainder === 1) { - k = calculateSHA384(e, 0, e.length); - } else if (remainder === 2) { - k = calculateSHA512(e, 0, e.length); - } - i++; - } - return k.subarray(0, 32); - } - checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { - const hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerValidationSalt, password.length); - hashData.set(userBytes, password.length + ownerValidationSalt.length); - const result = this._hash(password, hashData, userBytes); - return (0, _util.isArrayEqual)(result, ownerPassword); - } - checkUserPassword(password, userValidationSalt, userPassword) { - const hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userValidationSalt, password.length); - const result = this._hash(password, hashData, []); - return (0, _util.isArrayEqual)(result, userPassword); - } - getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { - const hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerKeySalt, password.length); - hashData.set(userBytes, password.length + ownerKeySalt.length); - const key = this._hash(password, hashData, userBytes); - const cipher = new AES256Cipher(key); - return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); - } - getUserKey(password, userKeySalt, userEncryption) { - const hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userKeySalt, password.length); - const key = this._hash(password, hashData, []); - const cipher = new AES256Cipher(key); - return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); - } -} -exports.PDF20 = PDF20; -class CipherTransform { - constructor(stringCipherConstructor, streamCipherConstructor) { - this.StringCipherConstructor = stringCipherConstructor; - this.StreamCipherConstructor = streamCipherConstructor; - } - createStream(stream, length) { - const cipher = new this.StreamCipherConstructor(); - return new _decrypt_stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) { - return cipher.decryptBlock(data, finalize); - }); - } - decryptString(s) { - const cipher = new this.StringCipherConstructor(); - let data = (0, _util.stringToBytes)(s); - data = cipher.decryptBlock(data, true); - return (0, _util.bytesToString)(data); - } - encryptString(s) { - const cipher = new this.StringCipherConstructor(); - if (cipher instanceof AESBaseCipher) { - const strLen = s.length; - const pad = 16 - strLen % 16; - s += String.fromCharCode(pad).repeat(pad); - const iv = new Uint8Array(16); - if (typeof crypto !== "undefined") { - crypto.getRandomValues(iv); - } else { - for (let i = 0; i < 16; i++) { - iv[i] = Math.floor(256 * Math.random()); - } - } - let data = (0, _util.stringToBytes)(s); - data = cipher.encrypt(data, iv); - const buf = new Uint8Array(16 + data.length); - buf.set(iv); - buf.set(data, 16); - return (0, _util.bytesToString)(buf); - } - let data = (0, _util.stringToBytes)(s); - data = cipher.encrypt(data); - return (0, _util.bytesToString)(data); - } -} -class CipherTransformFactory { - static #defaultPasswordBytes = new Uint8Array([0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a]); - #createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) { - if (password) { - const passwordLength = Math.min(127, password.length); - password = password.subarray(0, passwordLength); - } else { - password = []; - } - const pdfAlgorithm = revision === 6 ? new PDF20() : new PDF17(); - if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) { - return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption); - } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) { - return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption); - } - return null; - } - #prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) { - const hashDataSize = 40 + ownerPassword.length + fileId.length; - const hashData = new Uint8Array(hashDataSize); - let i = 0, - j, - n; - if (password) { - n = Math.min(32, password.length); - for (; i < n; ++i) { - hashData[i] = password[i]; - } - } - j = 0; - while (i < 32) { - hashData[i++] = CipherTransformFactory.#defaultPasswordBytes[j++]; - } - for (j = 0, n = ownerPassword.length; j < n; ++j) { - hashData[i++] = ownerPassword[j]; - } - hashData[i++] = flags & 0xff; - hashData[i++] = flags >> 8 & 0xff; - hashData[i++] = flags >> 16 & 0xff; - hashData[i++] = flags >>> 24 & 0xff; - for (j = 0, n = fileId.length; j < n; ++j) { - hashData[i++] = fileId[j]; - } - if (revision >= 4 && !encryptMetadata) { - hashData[i++] = 0xff; - hashData[i++] = 0xff; - hashData[i++] = 0xff; - hashData[i++] = 0xff; - } - let hash = calculateMD5(hashData, 0, i); - const keyLengthInBytes = keyLength >> 3; - if (revision >= 3) { - for (j = 0; j < 50; ++j) { - hash = calculateMD5(hash, 0, keyLengthInBytes); - } - } - const encryptionKey = hash.subarray(0, keyLengthInBytes); - let cipher, checkData; - if (revision >= 3) { - for (i = 0; i < 32; ++i) { - hashData[i] = CipherTransformFactory.#defaultPasswordBytes[i]; - } - for (j = 0, n = fileId.length; j < n; ++j) { - hashData[i++] = fileId[j]; - } - cipher = new ARCFourCipher(encryptionKey); - checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i)); - n = encryptionKey.length; - const derivedKey = new Uint8Array(n); - for (j = 1; j <= 19; ++j) { - for (let k = 0; k < n; ++k) { - derivedKey[k] = encryptionKey[k] ^ j; - } - cipher = new ARCFourCipher(derivedKey); - checkData = cipher.encryptBlock(checkData); - } - for (j = 0, n = checkData.length; j < n; ++j) { - if (userPassword[j] !== checkData[j]) { - return null; - } - } - } else { - cipher = new ARCFourCipher(encryptionKey); - checkData = cipher.encryptBlock(CipherTransformFactory.#defaultPasswordBytes); - for (j = 0, n = checkData.length; j < n; ++j) { - if (userPassword[j] !== checkData[j]) { - return null; - } - } - } - return encryptionKey; - } - #decodeUserPassword(password, ownerPassword, revision, keyLength) { - const hashData = new Uint8Array(32); - let i = 0; - const n = Math.min(32, password.length); - for (; i < n; ++i) { - hashData[i] = password[i]; - } - let j = 0; - while (i < 32) { - hashData[i++] = CipherTransformFactory.#defaultPasswordBytes[j++]; - } - let hash = calculateMD5(hashData, 0, i); - const keyLengthInBytes = keyLength >> 3; - if (revision >= 3) { - for (j = 0; j < 50; ++j) { - hash = calculateMD5(hash, 0, hash.length); - } - } - let cipher, userPassword; - if (revision >= 3) { - userPassword = ownerPassword; - const derivedKey = new Uint8Array(keyLengthInBytes); - for (j = 19; j >= 0; j--) { - for (let k = 0; k < keyLengthInBytes; ++k) { - derivedKey[k] = hash[k] ^ j; - } - cipher = new ARCFourCipher(derivedKey); - userPassword = cipher.encryptBlock(userPassword); - } - } else { - cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes)); - userPassword = cipher.encryptBlock(ownerPassword); - } - return userPassword; - } - #buildObjectKey(num, gen, encryptionKey, isAes = false) { - const key = new Uint8Array(encryptionKey.length + 9); - const n = encryptionKey.length; - let i; - for (i = 0; i < n; ++i) { - key[i] = encryptionKey[i]; - } - key[i++] = num & 0xff; - key[i++] = num >> 8 & 0xff; - key[i++] = num >> 16 & 0xff; - key[i++] = gen & 0xff; - key[i++] = gen >> 8 & 0xff; - if (isAes) { - key[i++] = 0x73; - key[i++] = 0x41; - key[i++] = 0x6c; - key[i++] = 0x54; - } - const hash = calculateMD5(key, 0, i); - return hash.subarray(0, Math.min(encryptionKey.length + 5, 16)); - } - #buildCipherConstructor(cf, name, num, gen, key) { - if (!(name instanceof _primitives.Name)) { - throw new _util.FormatError("Invalid crypt filter name."); - } - const self = this; - const cryptFilter = cf.get(name.name); - const cfm = cryptFilter?.get("CFM"); - if (!cfm || cfm.name === "None") { - return function () { - return new NullCipher(); - }; - } - if (cfm.name === "V2") { - return function () { - return new ARCFourCipher(self.#buildObjectKey(num, gen, key, false)); - }; - } - if (cfm.name === "AESV2") { - return function () { - return new AES128Cipher(self.#buildObjectKey(num, gen, key, true)); - }; - } - if (cfm.name === "AESV3") { - return function () { - return new AES256Cipher(key); - }; - } - throw new _util.FormatError("Unknown crypto method"); - } - constructor(dict, fileId, password) { - const filter = dict.get("Filter"); - if (!(0, _primitives.isName)(filter, "Standard")) { - throw new _util.FormatError("unknown encryption method"); - } - this.filterName = filter.name; - this.dict = dict; - const algorithm = dict.get("V"); - if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) { - throw new _util.FormatError("unsupported encryption algorithm"); - } - this.algorithm = algorithm; - let keyLength = dict.get("Length"); - if (!keyLength) { - if (algorithm <= 3) { - keyLength = 40; - } else { - const cfDict = dict.get("CF"); - const streamCryptoName = dict.get("StmF"); - if (cfDict instanceof _primitives.Dict && streamCryptoName instanceof _primitives.Name) { - cfDict.suppressEncryption = true; - const handlerDict = cfDict.get(streamCryptoName.name); - keyLength = handlerDict?.get("Length") || 128; - if (keyLength < 40) { - keyLength <<= 3; - } - } - } - } - if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) { - throw new _util.FormatError("invalid key length"); - } - const ownerBytes = (0, _util.stringToBytes)(dict.get("O")), - userBytes = (0, _util.stringToBytes)(dict.get("U")); - const ownerPassword = ownerBytes.subarray(0, 32); - const userPassword = userBytes.subarray(0, 32); - const flags = dict.get("P"); - const revision = dict.get("R"); - const encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get("EncryptMetadata") !== false; - this.encryptMetadata = encryptMetadata; - const fileIdBytes = (0, _util.stringToBytes)(fileId); - let passwordBytes; - if (password) { - if (revision === 6) { - try { - password = (0, _util.utf8StringToString)(password); - } catch { - (0, _util.warn)("CipherTransformFactory: Unable to convert UTF8 encoded password."); - } - } - passwordBytes = (0, _util.stringToBytes)(password); - } - let encryptionKey; - if (algorithm !== 5) { - encryptionKey = this.#prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); - } else { - const ownerValidationSalt = ownerBytes.subarray(32, 40); - const ownerKeySalt = ownerBytes.subarray(40, 48); - const uBytes = userBytes.subarray(0, 48); - const userValidationSalt = userBytes.subarray(32, 40); - const userKeySalt = userBytes.subarray(40, 48); - const ownerEncryption = (0, _util.stringToBytes)(dict.get("OE")); - const userEncryption = (0, _util.stringToBytes)(dict.get("UE")); - const perms = (0, _util.stringToBytes)(dict.get("Perms")); - encryptionKey = this.#createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms); - } - if (!encryptionKey && !password) { - throw new _util.PasswordException("No password given", _util.PasswordResponses.NEED_PASSWORD); - } else if (!encryptionKey && password) { - const decodedPassword = this.#decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength); - encryptionKey = this.#prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); - } - if (!encryptionKey) { - throw new _util.PasswordException("Incorrect Password", _util.PasswordResponses.INCORRECT_PASSWORD); - } - this.encryptionKey = encryptionKey; - if (algorithm >= 4) { - const cf = dict.get("CF"); - if (cf instanceof _primitives.Dict) { - cf.suppressEncryption = true; - } - this.cf = cf; - this.stmf = dict.get("StmF") || _primitives.Name.get("Identity"); - this.strf = dict.get("StrF") || _primitives.Name.get("Identity"); - this.eff = dict.get("EFF") || this.stmf; - } - } - createCipherTransform(num, gen) { - if (this.algorithm === 4 || this.algorithm === 5) { - return new CipherTransform(this.#buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey), this.#buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey)); - } - const key = this.#buildObjectKey(num, gen, this.encryptionKey, false); - const cipherConstructor = function () { - return new ARCFourCipher(key); - }; - return new CipherTransform(cipherConstructor, cipherConstructor); - } -} -exports.CipherTransformFactory = CipherTransformFactory; - -/***/ }), -/* 75 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.DecryptStream = void 0; -var _decode_stream = __w_pdfjs_require__(18); -const chunkSize = 512; -class DecryptStream extends _decode_stream.DecodeStream { - constructor(str, maybeLength, decrypt) { - super(maybeLength); - this.str = str; - this.dict = str.dict; - this.decrypt = decrypt; - this.nextChunk = null; - this.initialized = false; - } - readBlock() { - let chunk; - if (this.initialized) { - chunk = this.nextChunk; - } else { - chunk = this.str.getBytes(chunkSize); - this.initialized = true; - } - if (!chunk || chunk.length === 0) { - this.eof = true; - return; - } - this.nextChunk = this.str.getBytes(chunkSize); - const hasMoreData = this.nextChunk?.length > 0; - const decrypt = this.decrypt; - chunk = decrypt(chunk, !hasMoreData); - const bufferLength = this.bufferLength, - newLength = bufferLength + chunk.length, - buffer = this.ensureBuffer(newLength); - buffer.set(chunk, bufferLength); - this.bufferLength = newLength; - } -} -exports.DecryptStream = DecryptStream; - -/***/ }), -/* 76 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ObjectLoader = void 0; -var _primitives = __w_pdfjs_require__(4); -var _base_stream = __w_pdfjs_require__(5); -var _core_utils = __w_pdfjs_require__(3); -var _util = __w_pdfjs_require__(2); -function mayHaveChildren(value) { - return value instanceof _primitives.Ref || value instanceof _primitives.Dict || value instanceof _base_stream.BaseStream || Array.isArray(value); -} -function addChildren(node, nodesToVisit) { - if (node instanceof _primitives.Dict) { - node = node.getRawValues(); - } else if (node instanceof _base_stream.BaseStream) { - node = node.dict.getRawValues(); - } else if (!Array.isArray(node)) { - return; - } - for (const rawValue of node) { - if (mayHaveChildren(rawValue)) { - nodesToVisit.push(rawValue); - } - } -} -class ObjectLoader { - constructor(dict, keys, xref) { - this.dict = dict; - this.keys = keys; - this.xref = xref; - this.refSet = null; - } - async load() { - if (this.xref.stream.isDataLoaded) { - return undefined; - } - const { - keys, - dict - } = this; - this.refSet = new _primitives.RefSet(); - const nodesToVisit = []; - for (const key of keys) { - const rawValue = dict.getRaw(key); - if (rawValue !== undefined) { - nodesToVisit.push(rawValue); - } - } - return this._walk(nodesToVisit); - } - async _walk(nodesToVisit) { - const nodesToRevisit = []; - const pendingRequests = []; - while (nodesToVisit.length) { - let currentNode = nodesToVisit.pop(); - if (currentNode instanceof _primitives.Ref) { - if (this.refSet.has(currentNode)) { - continue; - } - try { - this.refSet.put(currentNode); - currentNode = this.xref.fetch(currentNode); - } catch (ex) { - if (!(ex instanceof _core_utils.MissingDataException)) { - (0, _util.warn)(`ObjectLoader._walk - requesting all data: "${ex}".`); - this.refSet = null; - const { - manager - } = this.xref.stream; - return manager.requestAllChunks(); - } - nodesToRevisit.push(currentNode); - pendingRequests.push({ - begin: ex.begin, - end: ex.end - }); - } - } - if (currentNode instanceof _base_stream.BaseStream) { - const baseStreams = currentNode.getBaseStreams(); - if (baseStreams) { - let foundMissingData = false; - for (const stream of baseStreams) { - if (stream.isDataLoaded) { - continue; - } - foundMissingData = true; - pendingRequests.push({ - begin: stream.start, - end: stream.end - }); - } - if (foundMissingData) { - nodesToRevisit.push(currentNode); - } - } - } - addChildren(currentNode, nodesToVisit); - } - if (pendingRequests.length) { - await this.xref.stream.manager.requestRanges(pendingRequests); - for (const node of nodesToRevisit) { - if (node instanceof _primitives.Ref) { - this.refSet.remove(node); - } - } - return this._walk(nodesToRevisit); - } - this.refSet = null; - return undefined; - } -} -exports.ObjectLoader = ObjectLoader; - -/***/ }), -/* 77 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XFAFactory = void 0; -var _symbol_utils = __w_pdfjs_require__(78); -var _bind = __w_pdfjs_require__(79); -var _data = __w_pdfjs_require__(89); -var _fonts = __w_pdfjs_require__(85); -var _utils = __w_pdfjs_require__(84); -var _util = __w_pdfjs_require__(2); -var _parser = __w_pdfjs_require__(90); -var _xhtml = __w_pdfjs_require__(100); -class XFAFactory { - constructor(data) { - try { - this.root = new _parser.XFAParser().parse(XFAFactory._createDocument(data)); - const binder = new _bind.Binder(this.root); - this.form = binder.bind(); - this.dataHandler = new _data.DataHandler(this.root, binder.getData()); - this.form[_symbol_utils.$globalData].template = this.form; - } catch (e) { - (0, _util.warn)(`XFA - an error occurred during parsing and binding: ${e}`); - } - } - isValid() { - return this.root && this.form; - } - _createPagesHelper() { - const iterator = this.form[_symbol_utils.$toPages](); - return new Promise((resolve, reject) => { - const nextIteration = () => { - try { - const value = iterator.next(); - if (value.done) { - resolve(value.value); - } else { - setTimeout(nextIteration, 0); - } - } catch (e) { - reject(e); - } - }; - setTimeout(nextIteration, 0); - }); - } - async _createPages() { - try { - this.pages = await this._createPagesHelper(); - this.dims = this.pages.children.map(c => { - const { - width, - height - } = c.attributes.style; - return [0, 0, parseInt(width), parseInt(height)]; - }); - } catch (e) { - (0, _util.warn)(`XFA - an error occurred during layout: ${e}`); - } - } - getBoundingBox(pageIndex) { - return this.dims[pageIndex]; - } - async getNumPages() { - if (!this.pages) { - await this._createPages(); - } - return this.dims.length; - } - setImages(images) { - this.form[_symbol_utils.$globalData].images = images; - } - setFonts(fonts) { - this.form[_symbol_utils.$globalData].fontFinder = new _fonts.FontFinder(fonts); - const missingFonts = []; - for (let typeface of this.form[_symbol_utils.$globalData].usedTypefaces) { - typeface = (0, _utils.stripQuotes)(typeface); - const font = this.form[_symbol_utils.$globalData].fontFinder.find(typeface); - if (!font) { - missingFonts.push(typeface); - } - } - if (missingFonts.length > 0) { - return missingFonts; - } - return null; - } - appendFonts(fonts, reallyMissingFonts) { - this.form[_symbol_utils.$globalData].fontFinder.add(fonts, reallyMissingFonts); - } - async getPages() { - if (!this.pages) { - await this._createPages(); - } - const pages = this.pages; - this.pages = null; - return pages; - } - serializeData(storage) { - return this.dataHandler.serialize(storage); - } - static _createDocument(data) { - if (!data["/xdp:xdp"]) { - return data["xdp:xdp"]; - } - return Object.values(data).join(""); - } - static getRichTextAsHtml(rc) { - if (!rc || typeof rc !== "string") { - return null; - } - try { - let root = new _parser.XFAParser(_xhtml.XhtmlNamespace, true).parse(rc); - if (!["body", "xhtml"].includes(root[_symbol_utils.$nodeName])) { - const newRoot = _xhtml.XhtmlNamespace.body({}); - newRoot[_symbol_utils.$appendChild](root); - root = newRoot; - } - const result = root[_symbol_utils.$toHTML](); - if (!result.success) { - return null; - } - const { - html - } = result; - const { - attributes - } = html; - if (attributes) { - if (attributes.class) { - attributes.class = attributes.class.filter(attr => !attr.startsWith("xfa")); - } - attributes.dir = "auto"; - } - return { - html, - str: root[_symbol_utils.$text]() - }; - } catch (e) { - (0, _util.warn)(`XFA - an error occurred during parsing of rich text: ${e}`); - } - return null; - } -} -exports.XFAFactory = XFAFactory; - -/***/ }), -/* 78 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.$uid = exports.$toStyle = exports.$toString = exports.$toPages = exports.$toHTML = exports.$text = exports.$tabIndex = exports.$setValue = exports.$setSetAttributes = exports.$setId = exports.$searchNode = exports.$root = exports.$resolvePrototypes = exports.$removeChild = exports.$pushPara = exports.$pushGlyphs = exports.$popPara = exports.$onText = exports.$onChildCheck = exports.$onChild = exports.$nsAttributes = exports.$nodeName = exports.$namespaceId = exports.$lastAttribute = exports.$isUsable = exports.$isTransparent = exports.$isThereMoreWidth = exports.$isSplittable = exports.$isNsAgnostic = exports.$isDescendent = exports.$isDataValue = exports.$isCDATAXml = exports.$isBindable = exports.$insertAt = exports.$indexOf = exports.$ids = exports.$hasSettableValue = exports.$globalData = exports.$getTemplateRoot = exports.$getSubformParent = exports.$getRealChildrenByNameIt = exports.$getParent = exports.$getNextPage = exports.$getExtra = exports.$getDataValue = exports.$getContainedChildren = exports.$getChildrenByNameIt = exports.$getChildrenByName = exports.$getChildrenByClass = exports.$getChildren = exports.$getAvailableSpace = exports.$getAttributes = exports.$getAttributeIt = exports.$flushHTML = exports.$finalize = exports.$extra = exports.$dump = exports.$data = exports.$content = exports.$consumed = exports.$clone = exports.$cleanup = exports.$cleanPage = exports.$clean = exports.$childrenToHTML = exports.$appendChild = exports.$addHTML = exports.$acceptWhitespace = void 0; -const $acceptWhitespace = Symbol(); -exports.$acceptWhitespace = $acceptWhitespace; -const $addHTML = Symbol(); -exports.$addHTML = $addHTML; -const $appendChild = Symbol(); -exports.$appendChild = $appendChild; -const $childrenToHTML = Symbol(); -exports.$childrenToHTML = $childrenToHTML; -const $clean = Symbol(); -exports.$clean = $clean; -const $cleanPage = Symbol(); -exports.$cleanPage = $cleanPage; -const $cleanup = Symbol(); -exports.$cleanup = $cleanup; -const $clone = Symbol(); -exports.$clone = $clone; -const $consumed = Symbol(); -exports.$consumed = $consumed; -const $content = Symbol("content"); -exports.$content = $content; -const $data = Symbol("data"); -exports.$data = $data; -const $dump = Symbol(); -exports.$dump = $dump; -const $extra = Symbol("extra"); -exports.$extra = $extra; -const $finalize = Symbol(); -exports.$finalize = $finalize; -const $flushHTML = Symbol(); -exports.$flushHTML = $flushHTML; -const $getAttributeIt = Symbol(); -exports.$getAttributeIt = $getAttributeIt; -const $getAttributes = Symbol(); -exports.$getAttributes = $getAttributes; -const $getAvailableSpace = Symbol(); -exports.$getAvailableSpace = $getAvailableSpace; -const $getChildrenByClass = Symbol(); -exports.$getChildrenByClass = $getChildrenByClass; -const $getChildrenByName = Symbol(); -exports.$getChildrenByName = $getChildrenByName; -const $getChildrenByNameIt = Symbol(); -exports.$getChildrenByNameIt = $getChildrenByNameIt; -const $getDataValue = Symbol(); -exports.$getDataValue = $getDataValue; -const $getExtra = Symbol(); -exports.$getExtra = $getExtra; -const $getRealChildrenByNameIt = Symbol(); -exports.$getRealChildrenByNameIt = $getRealChildrenByNameIt; -const $getChildren = Symbol(); -exports.$getChildren = $getChildren; -const $getContainedChildren = Symbol(); -exports.$getContainedChildren = $getContainedChildren; -const $getNextPage = Symbol(); -exports.$getNextPage = $getNextPage; -const $getSubformParent = Symbol(); -exports.$getSubformParent = $getSubformParent; -const $getParent = Symbol(); -exports.$getParent = $getParent; -const $getTemplateRoot = Symbol(); -exports.$getTemplateRoot = $getTemplateRoot; -const $globalData = Symbol(); -exports.$globalData = $globalData; -const $hasSettableValue = Symbol(); -exports.$hasSettableValue = $hasSettableValue; -const $ids = Symbol(); -exports.$ids = $ids; -const $indexOf = Symbol(); -exports.$indexOf = $indexOf; -const $insertAt = Symbol(); -exports.$insertAt = $insertAt; -const $isCDATAXml = Symbol(); -exports.$isCDATAXml = $isCDATAXml; -const $isBindable = Symbol(); -exports.$isBindable = $isBindable; -const $isDataValue = Symbol(); -exports.$isDataValue = $isDataValue; -const $isDescendent = Symbol(); -exports.$isDescendent = $isDescendent; -const $isNsAgnostic = Symbol(); -exports.$isNsAgnostic = $isNsAgnostic; -const $isSplittable = Symbol(); -exports.$isSplittable = $isSplittable; -const $isThereMoreWidth = Symbol(); -exports.$isThereMoreWidth = $isThereMoreWidth; -const $isTransparent = Symbol(); -exports.$isTransparent = $isTransparent; -const $isUsable = Symbol(); -exports.$isUsable = $isUsable; -const $lastAttribute = Symbol(); -exports.$lastAttribute = $lastAttribute; -const $namespaceId = Symbol("namespaceId"); -exports.$namespaceId = $namespaceId; -const $nodeName = Symbol("nodeName"); -exports.$nodeName = $nodeName; -const $nsAttributes = Symbol(); -exports.$nsAttributes = $nsAttributes; -const $onChild = Symbol(); -exports.$onChild = $onChild; -const $onChildCheck = Symbol(); -exports.$onChildCheck = $onChildCheck; -const $onText = Symbol(); -exports.$onText = $onText; -const $pushGlyphs = Symbol(); -exports.$pushGlyphs = $pushGlyphs; -const $popPara = Symbol(); -exports.$popPara = $popPara; -const $pushPara = Symbol(); -exports.$pushPara = $pushPara; -const $removeChild = Symbol(); -exports.$removeChild = $removeChild; -const $root = Symbol("root"); -exports.$root = $root; -const $resolvePrototypes = Symbol(); -exports.$resolvePrototypes = $resolvePrototypes; -const $searchNode = Symbol(); -exports.$searchNode = $searchNode; -const $setId = Symbol(); -exports.$setId = $setId; -const $setSetAttributes = Symbol(); -exports.$setSetAttributes = $setSetAttributes; -const $setValue = Symbol(); -exports.$setValue = $setValue; -const $tabIndex = Symbol(); -exports.$tabIndex = $tabIndex; -const $text = Symbol(); -exports.$text = $text; -const $toPages = Symbol(); -exports.$toPages = $toPages; -const $toHTML = Symbol(); -exports.$toHTML = $toHTML; -const $toString = Symbol(); -exports.$toString = $toString; -const $toStyle = Symbol(); -exports.$toStyle = $toStyle; -const $uid = Symbol("uid"); -exports.$uid = $uid; - -/***/ }), -/* 79 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Binder = void 0; -var _symbol_utils = __w_pdfjs_require__(78); -var _template = __w_pdfjs_require__(80); -var _som = __w_pdfjs_require__(88); -var _xfa_object = __w_pdfjs_require__(87); -var _namespaces = __w_pdfjs_require__(81); -var _util = __w_pdfjs_require__(2); -const NS_DATASETS = _namespaces.NamespaceIds.datasets.id; -function createText(content) { - const node = new _template.Text({}); - node[_symbol_utils.$content] = content; - return node; -} -class Binder { - constructor(root) { - this.root = root; - this.datasets = root.datasets; - this.data = root.datasets?.data || new _xfa_object.XmlObject(_namespaces.NamespaceIds.datasets.id, "data"); - this.emptyMerge = this.data[_symbol_utils.$getChildren]().length === 0; - this.root.form = this.form = root.template[_symbol_utils.$clone](); - } - _isConsumeData() { - return !this.emptyMerge && this._mergeMode; - } - _isMatchTemplate() { - return !this._isConsumeData(); - } - bind() { - this._bindElement(this.form, this.data); - return this.form; - } - getData() { - return this.data; - } - _bindValue(formNode, data, picture) { - formNode[_symbol_utils.$data] = data; - if (formNode[_symbol_utils.$hasSettableValue]()) { - if (data[_symbol_utils.$isDataValue]()) { - const value = data[_symbol_utils.$getDataValue](); - formNode[_symbol_utils.$setValue](createText(value)); - } else if (formNode instanceof _template.Field && formNode.ui?.choiceList?.open === "multiSelect") { - const value = data[_symbol_utils.$getChildren]().map(child => child[_symbol_utils.$content].trim()).join("\n"); - formNode[_symbol_utils.$setValue](createText(value)); - } else if (this._isConsumeData()) { - (0, _util.warn)(`XFA - Nodes haven't the same type.`); - } - } else if (!data[_symbol_utils.$isDataValue]() || this._isMatchTemplate()) { - this._bindElement(formNode, data); - } else { - (0, _util.warn)(`XFA - Nodes haven't the same type.`); - } - } - _findDataByNameToConsume(name, isValue, dataNode, global) { - if (!name) { - return null; - } - let generator, match; - for (let i = 0; i < 3; i++) { - generator = dataNode[_symbol_utils.$getRealChildrenByNameIt](name, false, true); - while (true) { - match = generator.next().value; - if (!match) { - break; - } - if (isValue === match[_symbol_utils.$isDataValue]()) { - return match; - } - } - if (dataNode[_symbol_utils.$namespaceId] === _namespaces.NamespaceIds.datasets.id && dataNode[_symbol_utils.$nodeName] === "data") { - break; - } - dataNode = dataNode[_symbol_utils.$getParent](); - } - if (!global) { - return null; - } - generator = this.data[_symbol_utils.$getRealChildrenByNameIt](name, true, false); - match = generator.next().value; - if (match) { - return match; - } - generator = this.data[_symbol_utils.$getAttributeIt](name, true); - match = generator.next().value; - if (match?.[_symbol_utils.$isDataValue]()) { - return match; - } - return null; - } - _setProperties(formNode, dataNode) { - if (!formNode.hasOwnProperty("setProperty")) { - return; - } - for (const { - ref, - target, - connection - } of formNode.setProperty.children) { - if (connection) { - continue; - } - if (!ref) { - continue; - } - const nodes = (0, _som.searchNode)(this.root, dataNode, ref, false, false); - if (!nodes) { - (0, _util.warn)(`XFA - Invalid reference: ${ref}.`); - continue; - } - const [node] = nodes; - if (!node[_symbol_utils.$isDescendent](this.data)) { - (0, _util.warn)(`XFA - Invalid node: must be a data node.`); - continue; - } - const targetNodes = (0, _som.searchNode)(this.root, formNode, target, false, false); - if (!targetNodes) { - (0, _util.warn)(`XFA - Invalid target: ${target}.`); - continue; - } - const [targetNode] = targetNodes; - if (!targetNode[_symbol_utils.$isDescendent](formNode)) { - (0, _util.warn)(`XFA - Invalid target: must be a property or subproperty.`); - continue; - } - const targetParent = targetNode[_symbol_utils.$getParent](); - if (targetNode instanceof _template.SetProperty || targetParent instanceof _template.SetProperty) { - (0, _util.warn)(`XFA - Invalid target: cannot be a setProperty or one of its properties.`); - continue; - } - if (targetNode instanceof _template.BindItems || targetParent instanceof _template.BindItems) { - (0, _util.warn)(`XFA - Invalid target: cannot be a bindItems or one of its properties.`); - continue; - } - const content = node[_symbol_utils.$text](); - const name = targetNode[_symbol_utils.$nodeName]; - if (targetNode instanceof _xfa_object.XFAAttribute) { - const attrs = Object.create(null); - attrs[name] = content; - const obj = Reflect.construct(Object.getPrototypeOf(targetParent).constructor, [attrs]); - targetParent[name] = obj[name]; - continue; - } - if (!targetNode.hasOwnProperty(_symbol_utils.$content)) { - (0, _util.warn)(`XFA - Invalid node to use in setProperty`); - continue; - } - targetNode[_symbol_utils.$data] = node; - targetNode[_symbol_utils.$content] = content; - targetNode[_symbol_utils.$finalize](); - } - } - _bindItems(formNode, dataNode) { - if (!formNode.hasOwnProperty("items") || !formNode.hasOwnProperty("bindItems") || formNode.bindItems.isEmpty()) { - return; - } - for (const item of formNode.items.children) { - formNode[_symbol_utils.$removeChild](item); - } - formNode.items.clear(); - const labels = new _template.Items({}); - const values = new _template.Items({}); - formNode[_symbol_utils.$appendChild](labels); - formNode.items.push(labels); - formNode[_symbol_utils.$appendChild](values); - formNode.items.push(values); - for (const { - ref, - labelRef, - valueRef, - connection - } of formNode.bindItems.children) { - if (connection) { - continue; - } - if (!ref) { - continue; - } - const nodes = (0, _som.searchNode)(this.root, dataNode, ref, false, false); - if (!nodes) { - (0, _util.warn)(`XFA - Invalid reference: ${ref}.`); - continue; - } - for (const node of nodes) { - if (!node[_symbol_utils.$isDescendent](this.datasets)) { - (0, _util.warn)(`XFA - Invalid ref (${ref}): must be a datasets child.`); - continue; - } - const labelNodes = (0, _som.searchNode)(this.root, node, labelRef, true, false); - if (!labelNodes) { - (0, _util.warn)(`XFA - Invalid label: ${labelRef}.`); - continue; - } - const [labelNode] = labelNodes; - if (!labelNode[_symbol_utils.$isDescendent](this.datasets)) { - (0, _util.warn)(`XFA - Invalid label: must be a datasets child.`); - continue; - } - const valueNodes = (0, _som.searchNode)(this.root, node, valueRef, true, false); - if (!valueNodes) { - (0, _util.warn)(`XFA - Invalid value: ${valueRef}.`); - continue; - } - const [valueNode] = valueNodes; - if (!valueNode[_symbol_utils.$isDescendent](this.datasets)) { - (0, _util.warn)(`XFA - Invalid value: must be a datasets child.`); - continue; - } - const label = createText(labelNode[_symbol_utils.$text]()); - const value = createText(valueNode[_symbol_utils.$text]()); - labels[_symbol_utils.$appendChild](label); - labels.text.push(label); - values[_symbol_utils.$appendChild](value); - values.text.push(value); - } - } - } - _bindOccurrences(formNode, matches, picture) { - let baseClone; - if (matches.length > 1) { - baseClone = formNode[_symbol_utils.$clone](); - baseClone[_symbol_utils.$removeChild](baseClone.occur); - baseClone.occur = null; - } - this._bindValue(formNode, matches[0], picture); - this._setProperties(formNode, matches[0]); - this._bindItems(formNode, matches[0]); - if (matches.length === 1) { - return; - } - const parent = formNode[_symbol_utils.$getParent](); - const name = formNode[_symbol_utils.$nodeName]; - const pos = parent[_symbol_utils.$indexOf](formNode); - for (let i = 1, ii = matches.length; i < ii; i++) { - const match = matches[i]; - const clone = baseClone[_symbol_utils.$clone](); - parent[name].push(clone); - parent[_symbol_utils.$insertAt](pos + i, clone); - this._bindValue(clone, match, picture); - this._setProperties(clone, match); - this._bindItems(clone, match); - } - } - _createOccurrences(formNode) { - if (!this.emptyMerge) { - return; - } - const { - occur - } = formNode; - if (!occur || occur.initial <= 1) { - return; - } - const parent = formNode[_symbol_utils.$getParent](); - const name = formNode[_symbol_utils.$nodeName]; - if (!(parent[name] instanceof _xfa_object.XFAObjectArray)) { - return; - } - let currentNumber; - if (formNode.name) { - currentNumber = parent[name].children.filter(e => e.name === formNode.name).length; - } else { - currentNumber = parent[name].children.length; - } - const pos = parent[_symbol_utils.$indexOf](formNode) + 1; - const ii = occur.initial - currentNumber; - if (ii) { - const nodeClone = formNode[_symbol_utils.$clone](); - nodeClone[_symbol_utils.$removeChild](nodeClone.occur); - nodeClone.occur = null; - parent[name].push(nodeClone); - parent[_symbol_utils.$insertAt](pos, nodeClone); - for (let i = 1; i < ii; i++) { - const clone = nodeClone[_symbol_utils.$clone](); - parent[name].push(clone); - parent[_symbol_utils.$insertAt](pos + i, clone); - } - } - } - _getOccurInfo(formNode) { - const { - name, - occur - } = formNode; - if (!occur || !name) { - return [1, 1]; - } - const max = occur.max === -1 ? Infinity : occur.max; - return [occur.min, max]; - } - _setAndBind(formNode, dataNode) { - this._setProperties(formNode, dataNode); - this._bindItems(formNode, dataNode); - this._bindElement(formNode, dataNode); - } - _bindElement(formNode, dataNode) { - const uselessNodes = []; - this._createOccurrences(formNode); - for (const child of formNode[_symbol_utils.$getChildren]()) { - if (child[_symbol_utils.$data]) { - continue; - } - if (this._mergeMode === undefined && child[_symbol_utils.$nodeName] === "subform") { - this._mergeMode = child.mergeMode === "consumeData"; - const dataChildren = dataNode[_symbol_utils.$getChildren](); - if (dataChildren.length > 0) { - this._bindOccurrences(child, [dataChildren[0]], null); - } else if (this.emptyMerge) { - const nsId = dataNode[_symbol_utils.$namespaceId] === NS_DATASETS ? -1 : dataNode[_symbol_utils.$namespaceId]; - const dataChild = child[_symbol_utils.$data] = new _xfa_object.XmlObject(nsId, child.name || "root"); - dataNode[_symbol_utils.$appendChild](dataChild); - this._bindElement(child, dataChild); - } - continue; - } - if (!child[_symbol_utils.$isBindable]()) { - continue; - } - let global = false; - let picture = null; - let ref = null; - let match = null; - if (child.bind) { - switch (child.bind.match) { - case "none": - this._setAndBind(child, dataNode); - continue; - case "global": - global = true; - break; - case "dataRef": - if (!child.bind.ref) { - (0, _util.warn)(`XFA - ref is empty in node ${child[_symbol_utils.$nodeName]}.`); - this._setAndBind(child, dataNode); - continue; - } - ref = child.bind.ref; - break; - default: - break; - } - if (child.bind.picture) { - picture = child.bind.picture[_symbol_utils.$content]; - } - } - const [min, max] = this._getOccurInfo(child); - if (ref) { - match = (0, _som.searchNode)(this.root, dataNode, ref, true, false); - if (match === null) { - match = (0, _som.createDataNode)(this.data, dataNode, ref); - if (!match) { - continue; - } - if (this._isConsumeData()) { - match[_symbol_utils.$consumed] = true; - } - this._setAndBind(child, match); - continue; - } else { - if (this._isConsumeData()) { - match = match.filter(node => !node[_symbol_utils.$consumed]); - } - if (match.length > max) { - match = match.slice(0, max); - } else if (match.length === 0) { - match = null; - } - if (match && this._isConsumeData()) { - match.forEach(node => { - node[_symbol_utils.$consumed] = true; - }); - } - } - } else { - if (!child.name) { - this._setAndBind(child, dataNode); - continue; - } - if (this._isConsumeData()) { - const matches = []; - while (matches.length < max) { - const found = this._findDataByNameToConsume(child.name, child[_symbol_utils.$hasSettableValue](), dataNode, global); - if (!found) { - break; - } - found[_symbol_utils.$consumed] = true; - matches.push(found); - } - match = matches.length > 0 ? matches : null; - } else { - match = dataNode[_symbol_utils.$getRealChildrenByNameIt](child.name, false, this.emptyMerge).next().value; - if (!match) { - if (min === 0) { - uselessNodes.push(child); - continue; - } - const nsId = dataNode[_symbol_utils.$namespaceId] === NS_DATASETS ? -1 : dataNode[_symbol_utils.$namespaceId]; - match = child[_symbol_utils.$data] = new _xfa_object.XmlObject(nsId, child.name); - if (this.emptyMerge) { - match[_symbol_utils.$consumed] = true; - } - dataNode[_symbol_utils.$appendChild](match); - this._setAndBind(child, match); - continue; - } - if (this.emptyMerge) { - match[_symbol_utils.$consumed] = true; - } - match = [match]; - } - } - if (match) { - this._bindOccurrences(child, match, picture); - } else if (min > 0) { - this._setAndBind(child, dataNode); - } else { - uselessNodes.push(child); - } - } - uselessNodes.forEach(node => node[_symbol_utils.$getParent]()[_symbol_utils.$removeChild](node)); - } -} -exports.Binder = Binder; - -/***/ }), -/* 80 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Value = exports.Text = exports.TemplateNamespace = exports.Template = exports.SetProperty = exports.Items = exports.Field = exports.BindItems = void 0; -var _symbol_utils = __w_pdfjs_require__(78); -var _namespaces = __w_pdfjs_require__(81); -var _layout = __w_pdfjs_require__(82); -var _html_utils = __w_pdfjs_require__(83); -var _xfa_object = __w_pdfjs_require__(87); -var _utils = __w_pdfjs_require__(84); -var _util = __w_pdfjs_require__(2); -var _fonts = __w_pdfjs_require__(85); -var _core_utils = __w_pdfjs_require__(3); -var _som = __w_pdfjs_require__(88); -const TEMPLATE_NS_ID = _namespaces.NamespaceIds.template.id; -const SVG_NS = "http://www.w3.org/2000/svg"; -const MAX_ATTEMPTS_FOR_LRTB_LAYOUT = 2; -const MAX_EMPTY_PAGES = 3; -const DEFAULT_TAB_INDEX = 5000; -const HEADING_PATTERN = /^H(\d+)$/; -const MIMES = new Set(["image/gif", "image/jpeg", "image/jpg", "image/pjpeg", "image/png", "image/apng", "image/x-png", "image/bmp", "image/x-ms-bmp", "image/tiff", "image/tif", "application/octet-stream"]); -const IMAGES_HEADERS = [[[0x42, 0x4d], "image/bmp"], [[0xff, 0xd8, 0xff], "image/jpeg"], [[0x49, 0x49, 0x2a, 0x00], "image/tiff"], [[0x4d, 0x4d, 0x00, 0x2a], "image/tiff"], [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61], "image/gif"], [[0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a], "image/png"]]; -function getBorderDims(node) { - if (!node || !node.border) { - return { - w: 0, - h: 0 - }; - } - const borderExtra = node.border[_symbol_utils.$getExtra](); - if (!borderExtra) { - return { - w: 0, - h: 0 - }; - } - return { - w: borderExtra.widths[0] + borderExtra.widths[2] + borderExtra.insets[0] + borderExtra.insets[2], - h: borderExtra.widths[1] + borderExtra.widths[3] + borderExtra.insets[1] + borderExtra.insets[3] - }; -} -function hasMargin(node) { - return node.margin && (node.margin.topInset || node.margin.rightInset || node.margin.bottomInset || node.margin.leftInset); -} -function _setValue(templateNode, value) { - if (!templateNode.value) { - const nodeValue = new Value({}); - templateNode[_symbol_utils.$appendChild](nodeValue); - templateNode.value = nodeValue; - } - templateNode.value[_symbol_utils.$setValue](value); -} -function* getContainedChildren(node) { - for (const child of node[_symbol_utils.$getChildren]()) { - if (child instanceof SubformSet) { - yield* child[_symbol_utils.$getContainedChildren](); - continue; - } - yield child; - } -} -function isRequired(node) { - return node.validate?.nullTest === "error"; -} -function setTabIndex(node) { - while (node) { - if (!node.traversal) { - node[_symbol_utils.$tabIndex] = node[_symbol_utils.$getParent]()[_symbol_utils.$tabIndex]; - return; - } - if (node[_symbol_utils.$tabIndex]) { - return; - } - let next = null; - for (const child of node.traversal[_symbol_utils.$getChildren]()) { - if (child.operation === "next") { - next = child; - break; - } - } - if (!next || !next.ref) { - node[_symbol_utils.$tabIndex] = node[_symbol_utils.$getParent]()[_symbol_utils.$tabIndex]; - return; - } - const root = node[_symbol_utils.$getTemplateRoot](); - node[_symbol_utils.$tabIndex] = ++root[_symbol_utils.$tabIndex]; - const ref = root[_symbol_utils.$searchNode](next.ref, node); - if (!ref) { - return; - } - node = ref[0]; - } -} -function applyAssist(obj, attributes) { - const assist = obj.assist; - if (assist) { - const assistTitle = assist[_symbol_utils.$toHTML](); - if (assistTitle) { - attributes.title = assistTitle; - } - const role = assist.role; - const match = role.match(HEADING_PATTERN); - if (match) { - const ariaRole = "heading"; - const ariaLevel = match[1]; - attributes.role = ariaRole; - attributes["aria-level"] = ariaLevel; - } - } - if (obj.layout === "table") { - attributes.role = "table"; - } else if (obj.layout === "row") { - attributes.role = "row"; - } else { - const parent = obj[_symbol_utils.$getParent](); - if (parent.layout === "row") { - attributes.role = parent.assist?.role === "TH" ? "columnheader" : "cell"; - } - } -} -function ariaLabel(obj) { - if (!obj.assist) { - return null; - } - const assist = obj.assist; - if (assist.speak && assist.speak[_symbol_utils.$content] !== "") { - return assist.speak[_symbol_utils.$content]; - } - if (assist.toolTip) { - return assist.toolTip[_symbol_utils.$content]; - } - return null; -} -function valueToHtml(value) { - return _utils.HTMLResult.success({ - name: "div", - attributes: { - class: ["xfaRich"], - style: Object.create(null) - }, - children: [{ - name: "span", - attributes: { - style: Object.create(null) - }, - value - }] - }); -} -function setFirstUnsplittable(node) { - const root = node[_symbol_utils.$getTemplateRoot](); - if (root[_symbol_utils.$extra].firstUnsplittable === null) { - root[_symbol_utils.$extra].firstUnsplittable = node; - root[_symbol_utils.$extra].noLayoutFailure = true; - } -} -function unsetFirstUnsplittable(node) { - const root = node[_symbol_utils.$getTemplateRoot](); - if (root[_symbol_utils.$extra].firstUnsplittable === node) { - root[_symbol_utils.$extra].noLayoutFailure = false; - } -} -function handleBreak(node) { - if (node[_symbol_utils.$extra]) { - return false; - } - node[_symbol_utils.$extra] = Object.create(null); - if (node.targetType === "auto") { - return false; - } - const root = node[_symbol_utils.$getTemplateRoot](); - let target = null; - if (node.target) { - target = root[_symbol_utils.$searchNode](node.target, node[_symbol_utils.$getParent]()); - if (!target) { - return false; - } - target = target[0]; - } - const { - currentPageArea, - currentContentArea - } = root[_symbol_utils.$extra]; - if (node.targetType === "pageArea") { - if (!(target instanceof PageArea)) { - target = null; - } - if (node.startNew) { - node[_symbol_utils.$extra].target = target || currentPageArea; - return true; - } else if (target && target !== currentPageArea) { - node[_symbol_utils.$extra].target = target; - return true; - } - return false; - } - if (!(target instanceof ContentArea)) { - target = null; - } - const pageArea = target && target[_symbol_utils.$getParent](); - let index; - let nextPageArea = pageArea; - if (node.startNew) { - if (target) { - const contentAreas = pageArea.contentArea.children; - const indexForCurrent = contentAreas.indexOf(currentContentArea); - const indexForTarget = contentAreas.indexOf(target); - if (indexForCurrent !== -1 && indexForCurrent < indexForTarget) { - nextPageArea = null; - } - index = indexForTarget - 1; - } else { - index = currentPageArea.contentArea.children.indexOf(currentContentArea); - } - } else if (target && target !== currentContentArea) { - const contentAreas = pageArea.contentArea.children; - index = contentAreas.indexOf(target) - 1; - nextPageArea = pageArea === currentPageArea ? null : pageArea; - } else { - return false; - } - node[_symbol_utils.$extra].target = nextPageArea; - node[_symbol_utils.$extra].index = index; - return true; -} -function handleOverflow(node, extraNode, space) { - const root = node[_symbol_utils.$getTemplateRoot](); - const saved = root[_symbol_utils.$extra].noLayoutFailure; - const savedMethod = extraNode[_symbol_utils.$getSubformParent]; - extraNode[_symbol_utils.$getSubformParent] = () => node; - root[_symbol_utils.$extra].noLayoutFailure = true; - const res = extraNode[_symbol_utils.$toHTML](space); - node[_symbol_utils.$addHTML](res.html, res.bbox); - root[_symbol_utils.$extra].noLayoutFailure = saved; - extraNode[_symbol_utils.$getSubformParent] = savedMethod; -} -class AppearanceFilter extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "appearanceFilter"); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Arc extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "arc", true); - this.circular = (0, _utils.getInteger)({ - data: attributes.circular, - defaultValue: 0, - validate: x => x === 1 - }); - this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); - this.id = attributes.id || ""; - this.startAngle = (0, _utils.getFloat)({ - data: attributes.startAngle, - defaultValue: 0, - validate: x => true - }); - this.sweepAngle = (0, _utils.getFloat)({ - data: attributes.sweepAngle, - defaultValue: 360, - validate: x => true - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.edge = null; - this.fill = null; - } - [_symbol_utils.$toHTML]() { - const edge = this.edge || new Edge({}); - const edgeStyle = edge[_symbol_utils.$toStyle](); - const style = Object.create(null); - if (this.fill?.presence === "visible") { - Object.assign(style, this.fill[_symbol_utils.$toStyle]()); - } else { - style.fill = "transparent"; - } - style.strokeWidth = (0, _html_utils.measureToString)(edge.presence === "visible" ? edge.thickness : 0); - style.stroke = edgeStyle.color; - let arc; - const attributes = { - xmlns: SVG_NS, - style: { - width: "100%", - height: "100%", - overflow: "visible" - } - }; - if (this.sweepAngle === 360) { - arc = { - name: "ellipse", - attributes: { - xmlns: SVG_NS, - cx: "50%", - cy: "50%", - rx: "50%", - ry: "50%", - style - } - }; - } else { - const startAngle = this.startAngle * Math.PI / 180; - const sweepAngle = this.sweepAngle * Math.PI / 180; - const largeArc = this.sweepAngle > 180 ? 1 : 0; - const [x1, y1, x2, y2] = [50 * (1 + Math.cos(startAngle)), 50 * (1 - Math.sin(startAngle)), 50 * (1 + Math.cos(startAngle + sweepAngle)), 50 * (1 - Math.sin(startAngle + sweepAngle))]; - arc = { - name: "path", - attributes: { - xmlns: SVG_NS, - d: `M ${x1} ${y1} A 50 50 0 ${largeArc} 0 ${x2} ${y2}`, - vectorEffect: "non-scaling-stroke", - style - } - }; - Object.assign(attributes, { - viewBox: "0 0 100 100", - preserveAspectRatio: "none" - }); - } - const svg = { - name: "svg", - children: [arc], - attributes - }; - const parent = this[_symbol_utils.$getParent]()[_symbol_utils.$getParent](); - if (hasMargin(parent)) { - return _utils.HTMLResult.success({ - name: "div", - attributes: { - style: { - display: "inline", - width: "100%", - height: "100%" - } - }, - children: [svg] - }); - } - svg.attributes.style.position = "absolute"; - return _utils.HTMLResult.success(svg); - } -} -class Area extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "area", true); - this.colSpan = (0, _utils.getInteger)({ - data: attributes.colSpan, - defaultValue: 1, - validate: n => n >= 1 || n === -1 - }); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); - this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); - this.desc = null; - this.extras = null; - this.area = new _xfa_object.XFAObjectArray(); - this.draw = new _xfa_object.XFAObjectArray(); - this.exObject = new _xfa_object.XFAObjectArray(); - this.exclGroup = new _xfa_object.XFAObjectArray(); - this.field = new _xfa_object.XFAObjectArray(); - this.subform = new _xfa_object.XFAObjectArray(); - this.subformSet = new _xfa_object.XFAObjectArray(); - } - *[_symbol_utils.$getContainedChildren]() { - yield* getContainedChildren(this); - } - [_symbol_utils.$isTransparent]() { - return true; - } - [_symbol_utils.$isBindable]() { - return true; - } - [_symbol_utils.$addHTML](html, bbox) { - const [x, y, w, h] = bbox; - this[_symbol_utils.$extra].width = Math.max(this[_symbol_utils.$extra].width, x + w); - this[_symbol_utils.$extra].height = Math.max(this[_symbol_utils.$extra].height, y + h); - this[_symbol_utils.$extra].children.push(html); - } - [_symbol_utils.$getAvailableSpace]() { - return this[_symbol_utils.$extra].availableSpace; - } - [_symbol_utils.$toHTML](availableSpace) { - const style = (0, _html_utils.toStyle)(this, "position"); - const attributes = { - style, - id: this[_symbol_utils.$uid], - class: ["xfaArea"] - }; - if ((0, _html_utils.isPrintOnly)(this)) { - attributes.class.push("xfaPrintOnly"); - } - if (this.name) { - attributes.xfaName = this.name; - } - const children = []; - this[_symbol_utils.$extra] = { - children, - width: 0, - height: 0, - availableSpace - }; - const result = this[_symbol_utils.$childrenToHTML]({ - filter: new Set(["area", "draw", "field", "exclGroup", "subform", "subformSet"]), - include: true - }); - if (!result.success) { - if (result.isBreak()) { - return result; - } - delete this[_symbol_utils.$extra]; - return _utils.HTMLResult.FAILURE; - } - style.width = (0, _html_utils.measureToString)(this[_symbol_utils.$extra].width); - style.height = (0, _html_utils.measureToString)(this[_symbol_utils.$extra].height); - const html = { - name: "div", - attributes, - children - }; - const bbox = [this.x, this.y, this[_symbol_utils.$extra].width, this[_symbol_utils.$extra].height]; - delete this[_symbol_utils.$extra]; - return _utils.HTMLResult.success(html, bbox); - } -} -class Assist extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "assist", true); - this.id = attributes.id || ""; - this.role = attributes.role || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.speak = null; - this.toolTip = null; - } - [_symbol_utils.$toHTML]() { - return this.toolTip?.[_symbol_utils.$content] || null; - } -} -class Barcode extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "barcode", true); - this.charEncoding = (0, _utils.getKeyword)({ - data: attributes.charEncoding ? attributes.charEncoding.toLowerCase() : "", - defaultValue: "", - validate: k => ["utf-8", "big-five", "fontspecific", "gbk", "gb-18030", "gb-2312", "ksc-5601", "none", "shift-jis", "ucs-2", "utf-16"].includes(k) || k.match(/iso-8859-\d{2}/) - }); - this.checksum = (0, _utils.getStringOption)(attributes.checksum, ["none", "1mod10", "1mod10_1mod11", "2mod10", "auto"]); - this.dataColumnCount = (0, _utils.getInteger)({ - data: attributes.dataColumnCount, - defaultValue: -1, - validate: x => x >= 0 - }); - this.dataLength = (0, _utils.getInteger)({ - data: attributes.dataLength, - defaultValue: -1, - validate: x => x >= 0 - }); - this.dataPrep = (0, _utils.getStringOption)(attributes.dataPrep, ["none", "flateCompress"]); - this.dataRowCount = (0, _utils.getInteger)({ - data: attributes.dataRowCount, - defaultValue: -1, - validate: x => x >= 0 - }); - this.endChar = attributes.endChar || ""; - this.errorCorrectionLevel = (0, _utils.getInteger)({ - data: attributes.errorCorrectionLevel, - defaultValue: -1, - validate: x => x >= 0 && x <= 8 - }); - this.id = attributes.id || ""; - this.moduleHeight = (0, _utils.getMeasurement)(attributes.moduleHeight, "5mm"); - this.moduleWidth = (0, _utils.getMeasurement)(attributes.moduleWidth, "0.25mm"); - this.printCheckDigit = (0, _utils.getInteger)({ - data: attributes.printCheckDigit, - defaultValue: 0, - validate: x => x === 1 - }); - this.rowColumnRatio = (0, _utils.getRatio)(attributes.rowColumnRatio); - this.startChar = attributes.startChar || ""; - this.textLocation = (0, _utils.getStringOption)(attributes.textLocation, ["below", "above", "aboveEmbedded", "belowEmbedded", "none"]); - this.truncate = (0, _utils.getInteger)({ - data: attributes.truncate, - defaultValue: 0, - validate: x => x === 1 - }); - this.type = (0, _utils.getStringOption)(attributes.type ? attributes.type.toLowerCase() : "", ["aztec", "codabar", "code2of5industrial", "code2of5interleaved", "code2of5matrix", "code2of5standard", "code3of9", "code3of9extended", "code11", "code49", "code93", "code128", "code128a", "code128b", "code128c", "code128sscc", "datamatrix", "ean8", "ean8add2", "ean8add5", "ean13", "ean13add2", "ean13add5", "ean13pwcd", "fim", "logmars", "maxicode", "msi", "pdf417", "pdf417macro", "plessey", "postauscust2", "postauscust3", "postausreplypaid", "postausstandard", "postukrm4scc", "postusdpbc", "postusimb", "postusstandard", "postus5zip", "qrcode", "rfid", "rss14", "rss14expanded", "rss14limited", "rss14stacked", "rss14stackedomni", "rss14truncated", "telepen", "ucc128", "ucc128random", "ucc128sscc", "upca", "upcaadd2", "upcaadd5", "upcapwcd", "upce", "upceadd2", "upceadd5", "upcean2", "upcean5", "upsmaxicode"]); - this.upsMode = (0, _utils.getStringOption)(attributes.upsMode, ["usCarrier", "internationalCarrier", "secureSymbol", "standardSymbol"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.wideNarrowRatio = (0, _utils.getRatio)(attributes.wideNarrowRatio); - this.encrypt = null; - this.extras = null; - } -} -class Bind extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "bind", true); - this.match = (0, _utils.getStringOption)(attributes.match, ["once", "dataRef", "global", "none"]); - this.ref = attributes.ref || ""; - this.picture = null; - } -} -class BindItems extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "bindItems"); - this.connection = attributes.connection || ""; - this.labelRef = attributes.labelRef || ""; - this.ref = attributes.ref || ""; - this.valueRef = attributes.valueRef || ""; - } -} -exports.BindItems = BindItems; -class Bookend extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "bookend"); - this.id = attributes.id || ""; - this.leader = attributes.leader || ""; - this.trailer = attributes.trailer || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class BooleanElement extends _xfa_object.Option01 { - constructor(attributes) { - super(TEMPLATE_NS_ID, "boolean"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - [_symbol_utils.$toHTML](availableSpace) { - return valueToHtml(this[_symbol_utils.$content] === 1 ? "1" : "0"); - } -} -class Border extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "border", true); - this.break = (0, _utils.getStringOption)(attributes.break, ["close", "open"]); - this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); - this.id = attributes.id || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.corner = new _xfa_object.XFAObjectArray(4); - this.edge = new _xfa_object.XFAObjectArray(4); - this.extras = null; - this.fill = null; - this.margin = null; - } - [_symbol_utils.$getExtra]() { - if (!this[_symbol_utils.$extra]) { - const edges = this.edge.children.slice(); - if (edges.length < 4) { - const defaultEdge = edges.at(-1) || new Edge({}); - for (let i = edges.length; i < 4; i++) { - edges.push(defaultEdge); - } - } - const widths = edges.map(edge => edge.thickness); - const insets = [0, 0, 0, 0]; - if (this.margin) { - insets[0] = this.margin.topInset; - insets[1] = this.margin.rightInset; - insets[2] = this.margin.bottomInset; - insets[3] = this.margin.leftInset; - } - this[_symbol_utils.$extra] = { - widths, - insets, - edges - }; - } - return this[_symbol_utils.$extra]; - } - [_symbol_utils.$toStyle]() { - const { - edges - } = this[_symbol_utils.$getExtra](); - const edgeStyles = edges.map(node => { - const style = node[_symbol_utils.$toStyle](); - style.color ||= "#000000"; - return style; - }); - const style = Object.create(null); - if (this.margin) { - Object.assign(style, this.margin[_symbol_utils.$toStyle]()); - } - if (this.fill?.presence === "visible") { - Object.assign(style, this.fill[_symbol_utils.$toStyle]()); - } - if (this.corner.children.some(node => node.radius !== 0)) { - const cornerStyles = this.corner.children.map(node => node[_symbol_utils.$toStyle]()); - if (cornerStyles.length === 2 || cornerStyles.length === 3) { - const last = cornerStyles.at(-1); - for (let i = cornerStyles.length; i < 4; i++) { - cornerStyles.push(last); - } - } - style.borderRadius = cornerStyles.map(s => s.radius).join(" "); - } - switch (this.presence) { - case "invisible": - case "hidden": - style.borderStyle = ""; - break; - case "inactive": - style.borderStyle = "none"; - break; - default: - style.borderStyle = edgeStyles.map(s => s.style).join(" "); - break; - } - style.borderWidth = edgeStyles.map(s => s.width).join(" "); - style.borderColor = edgeStyles.map(s => s.color).join(" "); - return style; - } -} -class Break extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "break", true); - this.after = (0, _utils.getStringOption)(attributes.after, ["auto", "contentArea", "pageArea", "pageEven", "pageOdd"]); - this.afterTarget = attributes.afterTarget || ""; - this.before = (0, _utils.getStringOption)(attributes.before, ["auto", "contentArea", "pageArea", "pageEven", "pageOdd"]); - this.beforeTarget = attributes.beforeTarget || ""; - this.bookendLeader = attributes.bookendLeader || ""; - this.bookendTrailer = attributes.bookendTrailer || ""; - this.id = attributes.id || ""; - this.overflowLeader = attributes.overflowLeader || ""; - this.overflowTarget = attributes.overflowTarget || ""; - this.overflowTrailer = attributes.overflowTrailer || ""; - this.startNew = (0, _utils.getInteger)({ - data: attributes.startNew, - defaultValue: 0, - validate: x => x === 1 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - } -} -class BreakAfter extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "breakAfter", true); - this.id = attributes.id || ""; - this.leader = attributes.leader || ""; - this.startNew = (0, _utils.getInteger)({ - data: attributes.startNew, - defaultValue: 0, - validate: x => x === 1 - }); - this.target = attributes.target || ""; - this.targetType = (0, _utils.getStringOption)(attributes.targetType, ["auto", "contentArea", "pageArea"]); - this.trailer = attributes.trailer || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.script = null; - } -} -class BreakBefore extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "breakBefore", true); - this.id = attributes.id || ""; - this.leader = attributes.leader || ""; - this.startNew = (0, _utils.getInteger)({ - data: attributes.startNew, - defaultValue: 0, - validate: x => x === 1 - }); - this.target = attributes.target || ""; - this.targetType = (0, _utils.getStringOption)(attributes.targetType, ["auto", "contentArea", "pageArea"]); - this.trailer = attributes.trailer || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.script = null; - } - [_symbol_utils.$toHTML](availableSpace) { - this[_symbol_utils.$extra] = {}; - return _utils.HTMLResult.FAILURE; - } -} -class Button extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "button", true); - this.highlight = (0, _utils.getStringOption)(attributes.highlight, ["inverted", "none", "outline", "push"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - } - [_symbol_utils.$toHTML](availableSpace) { - const parent = this[_symbol_utils.$getParent](); - const grandpa = parent[_symbol_utils.$getParent](); - const htmlButton = { - name: "button", - attributes: { - id: this[_symbol_utils.$uid], - class: ["xfaButton"], - style: {} - }, - children: [] - }; - for (const event of grandpa.event.children) { - if (event.activity !== "click" || !event.script) { - continue; - } - const jsURL = (0, _core_utils.recoverJsURL)(event.script[_symbol_utils.$content]); - if (!jsURL) { - continue; - } - const href = (0, _html_utils.fixURL)(jsURL.url); - if (!href) { - continue; - } - htmlButton.children.push({ - name: "a", - attributes: { - id: "link" + this[_symbol_utils.$uid], - href, - newWindow: jsURL.newWindow, - class: ["xfaLink"], - style: {} - }, - children: [] - }); - } - return _utils.HTMLResult.success(htmlButton); - } -} -class Calculate extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "calculate", true); - this.id = attributes.id || ""; - this.override = (0, _utils.getStringOption)(attributes.override, ["disabled", "error", "ignore", "warning"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.message = null; - this.script = null; - } -} -class Caption extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "caption", true); - this.id = attributes.id || ""; - this.placement = (0, _utils.getStringOption)(attributes.placement, ["left", "bottom", "inline", "right", "top"]); - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.reserve = Math.ceil((0, _utils.getMeasurement)(attributes.reserve)); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.font = null; - this.margin = null; - this.para = null; - this.value = null; - } - [_symbol_utils.$setValue](value) { - _setValue(this, value); - } - [_symbol_utils.$getExtra](availableSpace) { - if (!this[_symbol_utils.$extra]) { - let { - width, - height - } = availableSpace; - switch (this.placement) { - case "left": - case "right": - case "inline": - width = this.reserve <= 0 ? width : this.reserve; - break; - case "top": - case "bottom": - height = this.reserve <= 0 ? height : this.reserve; - break; - } - this[_symbol_utils.$extra] = (0, _html_utils.layoutNode)(this, { - width, - height - }); - } - return this[_symbol_utils.$extra]; - } - [_symbol_utils.$toHTML](availableSpace) { - if (!this.value) { - return _utils.HTMLResult.EMPTY; - } - this[_symbol_utils.$pushPara](); - const value = this.value[_symbol_utils.$toHTML](availableSpace).html; - if (!value) { - this[_symbol_utils.$popPara](); - return _utils.HTMLResult.EMPTY; - } - const savedReserve = this.reserve; - if (this.reserve <= 0) { - const { - w, - h - } = this[_symbol_utils.$getExtra](availableSpace); - switch (this.placement) { - case "left": - case "right": - case "inline": - this.reserve = w; - break; - case "top": - case "bottom": - this.reserve = h; - break; - } - } - const children = []; - if (typeof value === "string") { - children.push({ - name: "#text", - value - }); - } else { - children.push(value); - } - const style = (0, _html_utils.toStyle)(this, "font", "margin", "visibility"); - switch (this.placement) { - case "left": - case "right": - if (this.reserve > 0) { - style.width = (0, _html_utils.measureToString)(this.reserve); - } - break; - case "top": - case "bottom": - if (this.reserve > 0) { - style.height = (0, _html_utils.measureToString)(this.reserve); - } - break; - } - (0, _html_utils.setPara)(this, null, value); - this[_symbol_utils.$popPara](); - this.reserve = savedReserve; - return _utils.HTMLResult.success({ - name: "div", - attributes: { - style, - class: ["xfaCaption"] - }, - children - }); - } -} -class Certificate extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "certificate"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Certificates extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "certificates", true); - this.credentialServerPolicy = (0, _utils.getStringOption)(attributes.credentialServerPolicy, ["optional", "required"]); - this.id = attributes.id || ""; - this.url = attributes.url || ""; - this.urlPolicy = attributes.urlPolicy || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.encryption = null; - this.issuers = null; - this.keyUsage = null; - this.oids = null; - this.signing = null; - this.subjectDNs = null; - } -} -class CheckButton extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "checkButton", true); - this.id = attributes.id || ""; - this.mark = (0, _utils.getStringOption)(attributes.mark, ["default", "check", "circle", "cross", "diamond", "square", "star"]); - this.shape = (0, _utils.getStringOption)(attributes.shape, ["square", "round"]); - this.size = (0, _utils.getMeasurement)(attributes.size, "10pt"); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.border = null; - this.extras = null; - this.margin = null; - } - [_symbol_utils.$toHTML](availableSpace) { - const style = (0, _html_utils.toStyle)("margin"); - const size = (0, _html_utils.measureToString)(this.size); - style.width = style.height = size; - let type; - let className; - let groupId; - const field = this[_symbol_utils.$getParent]()[_symbol_utils.$getParent](); - const items = field.items.children.length && field.items.children[0][_symbol_utils.$toHTML]().html || []; - const exportedValue = { - on: (items[0] !== undefined ? items[0] : "on").toString(), - off: (items[1] !== undefined ? items[1] : "off").toString() - }; - const value = field.value?.[_symbol_utils.$text]() || "off"; - const checked = value === exportedValue.on || undefined; - const container = field[_symbol_utils.$getSubformParent](); - const fieldId = field[_symbol_utils.$uid]; - let dataId; - if (container instanceof ExclGroup) { - groupId = container[_symbol_utils.$uid]; - type = "radio"; - className = "xfaRadio"; - dataId = container[_symbol_utils.$data]?.[_symbol_utils.$uid] || container[_symbol_utils.$uid]; - } else { - type = "checkbox"; - className = "xfaCheckbox"; - dataId = field[_symbol_utils.$data]?.[_symbol_utils.$uid] || field[_symbol_utils.$uid]; - } - const input = { - name: "input", - attributes: { - class: [className], - style, - fieldId, - dataId, - type, - checked, - xfaOn: exportedValue.on, - xfaOff: exportedValue.off, - "aria-label": ariaLabel(field), - "aria-required": false - } - }; - if (groupId) { - input.attributes.name = groupId; - } - if (isRequired(field)) { - input.attributes["aria-required"] = true; - input.attributes.required = true; - } - return _utils.HTMLResult.success({ - name: "label", - attributes: { - class: ["xfaLabel"] - }, - children: [input] - }); - } -} -class ChoiceList extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "choiceList", true); - this.commitOn = (0, _utils.getStringOption)(attributes.commitOn, ["select", "exit"]); - this.id = attributes.id || ""; - this.open = (0, _utils.getStringOption)(attributes.open, ["userControl", "always", "multiSelect", "onEntry"]); - this.textEntry = (0, _utils.getInteger)({ - data: attributes.textEntry, - defaultValue: 0, - validate: x => x === 1 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.border = null; - this.extras = null; - this.margin = null; - } - [_symbol_utils.$toHTML](availableSpace) { - const style = (0, _html_utils.toStyle)(this, "border", "margin"); - const ui = this[_symbol_utils.$getParent](); - const field = ui[_symbol_utils.$getParent](); - const fontSize = field.font?.size || 10; - const optionStyle = { - fontSize: `calc(${fontSize}px * var(--scale-factor))` - }; - const children = []; - if (field.items.children.length > 0) { - const items = field.items; - let displayedIndex = 0; - let saveIndex = 0; - if (items.children.length === 2) { - displayedIndex = items.children[0].save; - saveIndex = 1 - displayedIndex; - } - const displayed = items.children[displayedIndex][_symbol_utils.$toHTML]().html; - const values = items.children[saveIndex][_symbol_utils.$toHTML]().html; - let selected = false; - const value = field.value?.[_symbol_utils.$text]() || ""; - for (let i = 0, ii = displayed.length; i < ii; i++) { - const option = { - name: "option", - attributes: { - value: values[i] || displayed[i], - style: optionStyle - }, - value: displayed[i] - }; - if (values[i] === value) { - option.attributes.selected = selected = true; - } - children.push(option); - } - if (!selected) { - children.splice(0, 0, { - name: "option", - attributes: { - hidden: true, - selected: true - }, - value: " " - }); - } - } - const selectAttributes = { - class: ["xfaSelect"], - fieldId: field[_symbol_utils.$uid], - dataId: field[_symbol_utils.$data]?.[_symbol_utils.$uid] || field[_symbol_utils.$uid], - style, - "aria-label": ariaLabel(field), - "aria-required": false - }; - if (isRequired(field)) { - selectAttributes["aria-required"] = true; - selectAttributes.required = true; - } - if (this.open === "multiSelect") { - selectAttributes.multiple = true; - } - return _utils.HTMLResult.success({ - name: "label", - attributes: { - class: ["xfaLabel"] - }, - children: [{ - name: "select", - children, - attributes: selectAttributes - }] - }); - } -} -class Color extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "color", true); - this.cSpace = (0, _utils.getStringOption)(attributes.cSpace, ["SRGB"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.value = attributes.value ? (0, _utils.getColor)(attributes.value) : ""; - this.extras = null; - } - [_symbol_utils.$hasSettableValue]() { - return false; - } - [_symbol_utils.$toStyle]() { - return this.value ? _util.Util.makeHexColor(this.value.r, this.value.g, this.value.b) : null; - } -} -class Comb extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "comb"); - this.id = attributes.id || ""; - this.numberOfCells = (0, _utils.getInteger)({ - data: attributes.numberOfCells, - defaultValue: 0, - validate: x => x >= 0 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Connect extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "connect", true); - this.connection = attributes.connection || ""; - this.id = attributes.id || ""; - this.ref = attributes.ref || ""; - this.usage = (0, _utils.getStringOption)(attributes.usage, ["exportAndImport", "exportOnly", "importOnly"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.picture = null; - } -} -class ContentArea extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "contentArea", true); - this.h = (0, _utils.getMeasurement)(attributes.h); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.w = (0, _utils.getMeasurement)(attributes.w); - this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); - this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); - this.desc = null; - this.extras = null; - } - [_symbol_utils.$toHTML](availableSpace) { - const left = (0, _html_utils.measureToString)(this.x); - const top = (0, _html_utils.measureToString)(this.y); - const style = { - left, - top, - width: (0, _html_utils.measureToString)(this.w), - height: (0, _html_utils.measureToString)(this.h) - }; - const classNames = ["xfaContentarea"]; - if ((0, _html_utils.isPrintOnly)(this)) { - classNames.push("xfaPrintOnly"); - } - return _utils.HTMLResult.success({ - name: "div", - children: [], - attributes: { - style, - class: classNames, - id: this[_symbol_utils.$uid] - } - }); - } -} -class Corner extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "corner", true); - this.id = attributes.id || ""; - this.inverted = (0, _utils.getInteger)({ - data: attributes.inverted, - defaultValue: 0, - validate: x => x === 1 - }); - this.join = (0, _utils.getStringOption)(attributes.join, ["square", "round"]); - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.radius = (0, _utils.getMeasurement)(attributes.radius); - this.stroke = (0, _utils.getStringOption)(attributes.stroke, ["solid", "dashDot", "dashDotDot", "dashed", "dotted", "embossed", "etched", "lowered", "raised"]); - this.thickness = (0, _utils.getMeasurement)(attributes.thickness, "0.5pt"); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.color = null; - this.extras = null; - } - [_symbol_utils.$toStyle]() { - const style = (0, _html_utils.toStyle)(this, "visibility"); - style.radius = (0, _html_utils.measureToString)(this.join === "square" ? 0 : this.radius); - return style; - } -} -class DateElement extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "date"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - [_symbol_utils.$finalize]() { - const date = this[_symbol_utils.$content].trim(); - this[_symbol_utils.$content] = date ? new Date(date) : null; - } - [_symbol_utils.$toHTML](availableSpace) { - return valueToHtml(this[_symbol_utils.$content] ? this[_symbol_utils.$content].toString() : ""); - } -} -class DateTime extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "dateTime"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - [_symbol_utils.$finalize]() { - const date = this[_symbol_utils.$content].trim(); - this[_symbol_utils.$content] = date ? new Date(date) : null; - } - [_symbol_utils.$toHTML](availableSpace) { - return valueToHtml(this[_symbol_utils.$content] ? this[_symbol_utils.$content].toString() : ""); - } -} -class DateTimeEdit extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "dateTimeEdit", true); - this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); - this.id = attributes.id || ""; - this.picker = (0, _utils.getStringOption)(attributes.picker, ["host", "none"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.border = null; - this.comb = null; - this.extras = null; - this.margin = null; - } - [_symbol_utils.$toHTML](availableSpace) { - const style = (0, _html_utils.toStyle)(this, "border", "font", "margin"); - const field = this[_symbol_utils.$getParent]()[_symbol_utils.$getParent](); - const html = { - name: "input", - attributes: { - type: "text", - fieldId: field[_symbol_utils.$uid], - dataId: field[_symbol_utils.$data]?.[_symbol_utils.$uid] || field[_symbol_utils.$uid], - class: ["xfaTextfield"], - style, - "aria-label": ariaLabel(field), - "aria-required": false - } - }; - if (isRequired(field)) { - html.attributes["aria-required"] = true; - html.attributes.required = true; - } - return _utils.HTMLResult.success({ - name: "label", - attributes: { - class: ["xfaLabel"] - }, - children: [html] - }); - } -} -class Decimal extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "decimal"); - this.fracDigits = (0, _utils.getInteger)({ - data: attributes.fracDigits, - defaultValue: 2, - validate: x => true - }); - this.id = attributes.id || ""; - this.leadDigits = (0, _utils.getInteger)({ - data: attributes.leadDigits, - defaultValue: -1, - validate: x => true - }); - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - [_symbol_utils.$finalize]() { - const number = parseFloat(this[_symbol_utils.$content].trim()); - this[_symbol_utils.$content] = isNaN(number) ? null : number; - } - [_symbol_utils.$toHTML](availableSpace) { - return valueToHtml(this[_symbol_utils.$content] !== null ? this[_symbol_utils.$content].toString() : ""); - } -} -class DefaultUi extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "defaultUi", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - } -} -class Desc extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "desc", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.boolean = new _xfa_object.XFAObjectArray(); - this.date = new _xfa_object.XFAObjectArray(); - this.dateTime = new _xfa_object.XFAObjectArray(); - this.decimal = new _xfa_object.XFAObjectArray(); - this.exData = new _xfa_object.XFAObjectArray(); - this.float = new _xfa_object.XFAObjectArray(); - this.image = new _xfa_object.XFAObjectArray(); - this.integer = new _xfa_object.XFAObjectArray(); - this.text = new _xfa_object.XFAObjectArray(); - this.time = new _xfa_object.XFAObjectArray(); - } -} -class DigestMethod extends _xfa_object.OptionObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "digestMethod", ["", "SHA1", "SHA256", "SHA512", "RIPEMD160"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class DigestMethods extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "digestMethods", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.digestMethod = new _xfa_object.XFAObjectArray(); - } -} -class Draw extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "draw", true); - this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); - this.colSpan = (0, _utils.getInteger)({ - data: attributes.colSpan, - defaultValue: 1, - validate: n => n >= 1 || n === -1 - }); - this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; - this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); - this.id = attributes.id || ""; - this.locale = attributes.locale || ""; - this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); - this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); - this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); - this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); - this.name = attributes.name || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.rotate = (0, _utils.getInteger)({ - data: attributes.rotate, - defaultValue: 0, - validate: x => x % 90 === 0 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; - this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); - this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); - this.assist = null; - this.border = null; - this.caption = null; - this.desc = null; - this.extras = null; - this.font = null; - this.keep = null; - this.margin = null; - this.para = null; - this.traversal = null; - this.ui = null; - this.value = null; - this.setProperty = new _xfa_object.XFAObjectArray(); - } - [_symbol_utils.$setValue](value) { - _setValue(this, value); - } - [_symbol_utils.$toHTML](availableSpace) { - setTabIndex(this); - if (this.presence === "hidden" || this.presence === "inactive") { - return _utils.HTMLResult.EMPTY; - } - (0, _html_utils.fixDimensions)(this); - this[_symbol_utils.$pushPara](); - const savedW = this.w; - const savedH = this.h; - const { - w, - h, - isBroken - } = (0, _html_utils.layoutNode)(this, availableSpace); - if (w && this.w === "") { - if (isBroken && this[_symbol_utils.$getSubformParent]()[_symbol_utils.$isThereMoreWidth]()) { - this[_symbol_utils.$popPara](); - return _utils.HTMLResult.FAILURE; - } - this.w = w; - } - if (h && this.h === "") { - this.h = h; - } - setFirstUnsplittable(this); - if (!(0, _layout.checkDimensions)(this, availableSpace)) { - this.w = savedW; - this.h = savedH; - this[_symbol_utils.$popPara](); - return _utils.HTMLResult.FAILURE; - } - unsetFirstUnsplittable(this); - const style = (0, _html_utils.toStyle)(this, "font", "hAlign", "dimensions", "position", "presence", "rotate", "anchorType", "border", "margin"); - (0, _html_utils.setMinMaxDimensions)(this, style); - if (style.margin) { - style.padding = style.margin; - delete style.margin; - } - const classNames = ["xfaDraw"]; - if (this.font) { - classNames.push("xfaFont"); - } - if ((0, _html_utils.isPrintOnly)(this)) { - classNames.push("xfaPrintOnly"); - } - const attributes = { - style, - id: this[_symbol_utils.$uid], - class: classNames - }; - if (this.name) { - attributes.xfaName = this.name; - } - const html = { - name: "div", - attributes, - children: [] - }; - applyAssist(this, attributes); - const bbox = (0, _html_utils.computeBbox)(this, html, availableSpace); - const value = this.value ? this.value[_symbol_utils.$toHTML](availableSpace).html : null; - if (value === null) { - this.w = savedW; - this.h = savedH; - this[_symbol_utils.$popPara](); - return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); - } - html.children.push(value); - (0, _html_utils.setPara)(this, style, value); - this.w = savedW; - this.h = savedH; - this[_symbol_utils.$popPara](); - return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); - } -} -class Edge extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "edge", true); - this.cap = (0, _utils.getStringOption)(attributes.cap, ["square", "butt", "round"]); - this.id = attributes.id || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.stroke = (0, _utils.getStringOption)(attributes.stroke, ["solid", "dashDot", "dashDotDot", "dashed", "dotted", "embossed", "etched", "lowered", "raised"]); - this.thickness = (0, _utils.getMeasurement)(attributes.thickness, "0.5pt"); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.color = null; - this.extras = null; - } - [_symbol_utils.$toStyle]() { - const style = (0, _html_utils.toStyle)(this, "visibility"); - Object.assign(style, { - linecap: this.cap, - width: (0, _html_utils.measureToString)(this.thickness), - color: this.color ? this.color[_symbol_utils.$toStyle]() : "#000000", - style: "" - }); - if (this.presence !== "visible") { - style.style = "none"; - } else { - switch (this.stroke) { - case "solid": - style.style = "solid"; - break; - case "dashDot": - style.style = "dashed"; - break; - case "dashDotDot": - style.style = "dashed"; - break; - case "dashed": - style.style = "dashed"; - break; - case "dotted": - style.style = "dotted"; - break; - case "embossed": - style.style = "ridge"; - break; - case "etched": - style.style = "groove"; - break; - case "lowered": - style.style = "inset"; - break; - case "raised": - style.style = "outset"; - break; - } - } - return style; - } -} -class Encoding extends _xfa_object.OptionObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "encoding", ["adbe.x509.rsa_sha1", "adbe.pkcs7.detached", "adbe.pkcs7.sha1"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Encodings extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "encodings", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.encoding = new _xfa_object.XFAObjectArray(); - } -} -class Encrypt extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "encrypt", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.certificate = null; - } -} -class EncryptData extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "encryptData", true); - this.id = attributes.id || ""; - this.operation = (0, _utils.getStringOption)(attributes.operation, ["encrypt", "decrypt"]); - this.target = attributes.target || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.filter = null; - this.manifest = null; - } -} -class Encryption extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "encryption", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.certificate = new _xfa_object.XFAObjectArray(); - } -} -class EncryptionMethod extends _xfa_object.OptionObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "encryptionMethod", ["", "AES256-CBC", "TRIPLEDES-CBC", "AES128-CBC", "AES192-CBC"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class EncryptionMethods extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "encryptionMethods", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.encryptionMethod = new _xfa_object.XFAObjectArray(); - } -} -class Event extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "event", true); - this.activity = (0, _utils.getStringOption)(attributes.activity, ["click", "change", "docClose", "docReady", "enter", "exit", "full", "indexChange", "initialize", "mouseDown", "mouseEnter", "mouseExit", "mouseUp", "postExecute", "postOpen", "postPrint", "postSave", "postSign", "postSubmit", "preExecute", "preOpen", "prePrint", "preSave", "preSign", "preSubmit", "ready", "validationState"]); - this.id = attributes.id || ""; - this.listen = (0, _utils.getStringOption)(attributes.listen, ["refOnly", "refAndDescendents"]); - this.name = attributes.name || ""; - this.ref = attributes.ref || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.encryptData = null; - this.execute = null; - this.script = null; - this.signData = null; - this.submit = null; - } -} -class ExData extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "exData"); - this.contentType = attributes.contentType || ""; - this.href = attributes.href || ""; - this.id = attributes.id || ""; - this.maxLength = (0, _utils.getInteger)({ - data: attributes.maxLength, - defaultValue: -1, - validate: x => x >= -1 - }); - this.name = attributes.name || ""; - this.rid = attributes.rid || ""; - this.transferEncoding = (0, _utils.getStringOption)(attributes.transferEncoding, ["none", "base64", "package"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - [_symbol_utils.$isCDATAXml]() { - return this.contentType === "text/html"; - } - [_symbol_utils.$onChild](child) { - if (this.contentType === "text/html" && child[_symbol_utils.$namespaceId] === _namespaces.NamespaceIds.xhtml.id) { - this[_symbol_utils.$content] = child; - return true; - } - if (this.contentType === "text/xml") { - this[_symbol_utils.$content] = child; - return true; - } - return false; - } - [_symbol_utils.$toHTML](availableSpace) { - if (this.contentType !== "text/html" || !this[_symbol_utils.$content]) { - return _utils.HTMLResult.EMPTY; - } - return this[_symbol_utils.$content][_symbol_utils.$toHTML](availableSpace); - } -} -class ExObject extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "exObject", true); - this.archive = attributes.archive || ""; - this.classId = attributes.classId || ""; - this.codeBase = attributes.codeBase || ""; - this.codeType = attributes.codeType || ""; - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.boolean = new _xfa_object.XFAObjectArray(); - this.date = new _xfa_object.XFAObjectArray(); - this.dateTime = new _xfa_object.XFAObjectArray(); - this.decimal = new _xfa_object.XFAObjectArray(); - this.exData = new _xfa_object.XFAObjectArray(); - this.exObject = new _xfa_object.XFAObjectArray(); - this.float = new _xfa_object.XFAObjectArray(); - this.image = new _xfa_object.XFAObjectArray(); - this.integer = new _xfa_object.XFAObjectArray(); - this.text = new _xfa_object.XFAObjectArray(); - this.time = new _xfa_object.XFAObjectArray(); - } -} -class ExclGroup extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "exclGroup", true); - this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]); - this.accessKey = attributes.accessKey || ""; - this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); - this.colSpan = (0, _utils.getInteger)({ - data: attributes.colSpan, - defaultValue: 1, - validate: n => n >= 1 || n === -1 - }); - this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; - this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); - this.id = attributes.id || ""; - this.layout = (0, _utils.getStringOption)(attributes.layout, ["position", "lr-tb", "rl-row", "rl-tb", "row", "table", "tb"]); - this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); - this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); - this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); - this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); - this.name = attributes.name || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; - this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); - this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); - this.assist = null; - this.bind = null; - this.border = null; - this.calculate = null; - this.caption = null; - this.desc = null; - this.extras = null; - this.margin = null; - this.para = null; - this.traversal = null; - this.validate = null; - this.connect = new _xfa_object.XFAObjectArray(); - this.event = new _xfa_object.XFAObjectArray(); - this.field = new _xfa_object.XFAObjectArray(); - this.setProperty = new _xfa_object.XFAObjectArray(); - } - [_symbol_utils.$isBindable]() { - return true; - } - [_symbol_utils.$hasSettableValue]() { - return true; - } - [_symbol_utils.$setValue](value) { - for (const field of this.field.children) { - if (!field.value) { - const nodeValue = new Value({}); - field[_symbol_utils.$appendChild](nodeValue); - field.value = nodeValue; - } - field.value[_symbol_utils.$setValue](value); - } - } - [_symbol_utils.$isThereMoreWidth]() { - return this.layout.endsWith("-tb") && this[_symbol_utils.$extra].attempt === 0 && this[_symbol_utils.$extra].numberInLine > 0 || this[_symbol_utils.$getParent]()[_symbol_utils.$isThereMoreWidth](); - } - [_symbol_utils.$isSplittable]() { - const parent = this[_symbol_utils.$getSubformParent](); - if (!parent[_symbol_utils.$isSplittable]()) { - return false; - } - if (this[_symbol_utils.$extra]._isSplittable !== undefined) { - return this[_symbol_utils.$extra]._isSplittable; - } - if (this.layout === "position" || this.layout.includes("row")) { - this[_symbol_utils.$extra]._isSplittable = false; - return false; - } - if (parent.layout?.endsWith("-tb") && parent[_symbol_utils.$extra].numberInLine !== 0) { - return false; - } - this[_symbol_utils.$extra]._isSplittable = true; - return true; - } - [_symbol_utils.$flushHTML]() { - return (0, _layout.flushHTML)(this); - } - [_symbol_utils.$addHTML](html, bbox) { - (0, _layout.addHTML)(this, html, bbox); - } - [_symbol_utils.$getAvailableSpace]() { - return (0, _layout.getAvailableSpace)(this); - } - [_symbol_utils.$toHTML](availableSpace) { - setTabIndex(this); - if (this.presence === "hidden" || this.presence === "inactive" || this.h === 0 || this.w === 0) { - return _utils.HTMLResult.EMPTY; - } - (0, _html_utils.fixDimensions)(this); - const children = []; - const attributes = { - id: this[_symbol_utils.$uid], - class: [] - }; - (0, _html_utils.setAccess)(this, attributes.class); - if (!this[_symbol_utils.$extra]) { - this[_symbol_utils.$extra] = Object.create(null); - } - Object.assign(this[_symbol_utils.$extra], { - children, - attributes, - attempt: 0, - line: null, - numberInLine: 0, - availableSpace: { - width: Math.min(this.w || Infinity, availableSpace.width), - height: Math.min(this.h || Infinity, availableSpace.height) - }, - width: 0, - height: 0, - prevHeight: 0, - currentWidth: 0 - }); - const isSplittable = this[_symbol_utils.$isSplittable](); - if (!isSplittable) { - setFirstUnsplittable(this); - } - if (!(0, _layout.checkDimensions)(this, availableSpace)) { - return _utils.HTMLResult.FAILURE; - } - const filter = new Set(["field"]); - if (this.layout.includes("row")) { - const columnWidths = this[_symbol_utils.$getSubformParent]().columnWidths; - if (Array.isArray(columnWidths) && columnWidths.length > 0) { - this[_symbol_utils.$extra].columnWidths = columnWidths; - this[_symbol_utils.$extra].currentColumn = 0; - } - } - const style = (0, _html_utils.toStyle)(this, "anchorType", "dimensions", "position", "presence", "border", "margin", "hAlign"); - const classNames = ["xfaExclgroup"]; - const cl = (0, _html_utils.layoutClass)(this); - if (cl) { - classNames.push(cl); - } - if ((0, _html_utils.isPrintOnly)(this)) { - classNames.push("xfaPrintOnly"); - } - attributes.style = style; - attributes.class = classNames; - if (this.name) { - attributes.xfaName = this.name; - } - this[_symbol_utils.$pushPara](); - const isLrTb = this.layout === "lr-tb" || this.layout === "rl-tb"; - const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1; - for (; this[_symbol_utils.$extra].attempt < maxRun; this[_symbol_utils.$extra].attempt++) { - if (isLrTb && this[_symbol_utils.$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) { - this[_symbol_utils.$extra].numberInLine = 0; - } - const result = this[_symbol_utils.$childrenToHTML]({ - filter, - include: true - }); - if (result.success) { - break; - } - if (result.isBreak()) { - this[_symbol_utils.$popPara](); - return result; - } - if (isLrTb && this[_symbol_utils.$extra].attempt === 0 && this[_symbol_utils.$extra].numberInLine === 0 && !this[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].noLayoutFailure) { - this[_symbol_utils.$extra].attempt = maxRun; - break; - } - } - this[_symbol_utils.$popPara](); - if (!isSplittable) { - unsetFirstUnsplittable(this); - } - if (this[_symbol_utils.$extra].attempt === maxRun) { - if (!isSplittable) { - delete this[_symbol_utils.$extra]; - } - return _utils.HTMLResult.FAILURE; - } - let marginH = 0; - let marginV = 0; - if (this.margin) { - marginH = this.margin.leftInset + this.margin.rightInset; - marginV = this.margin.topInset + this.margin.bottomInset; - } - const width = Math.max(this[_symbol_utils.$extra].width + marginH, this.w || 0); - const height = Math.max(this[_symbol_utils.$extra].height + marginV, this.h || 0); - const bbox = [this.x, this.y, width, height]; - if (this.w === "") { - style.width = (0, _html_utils.measureToString)(width); - } - if (this.h === "") { - style.height = (0, _html_utils.measureToString)(height); - } - const html = { - name: "div", - attributes, - children - }; - applyAssist(this, attributes); - delete this[_symbol_utils.$extra]; - return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); - } -} -class Execute extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "execute"); - this.connection = attributes.connection || ""; - this.executeType = (0, _utils.getStringOption)(attributes.executeType, ["import", "remerge"]); - this.id = attributes.id || ""; - this.runAt = (0, _utils.getStringOption)(attributes.runAt, ["client", "both", "server"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Extras extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "extras", true); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.boolean = new _xfa_object.XFAObjectArray(); - this.date = new _xfa_object.XFAObjectArray(); - this.dateTime = new _xfa_object.XFAObjectArray(); - this.decimal = new _xfa_object.XFAObjectArray(); - this.exData = new _xfa_object.XFAObjectArray(); - this.extras = new _xfa_object.XFAObjectArray(); - this.float = new _xfa_object.XFAObjectArray(); - this.image = new _xfa_object.XFAObjectArray(); - this.integer = new _xfa_object.XFAObjectArray(); - this.text = new _xfa_object.XFAObjectArray(); - this.time = new _xfa_object.XFAObjectArray(); - } -} -class Field extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "field", true); - this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]); - this.accessKey = attributes.accessKey || ""; - this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); - this.colSpan = (0, _utils.getInteger)({ - data: attributes.colSpan, - defaultValue: 1, - validate: n => n >= 1 || n === -1 - }); - this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; - this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); - this.id = attributes.id || ""; - this.locale = attributes.locale || ""; - this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); - this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); - this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); - this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); - this.name = attributes.name || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.rotate = (0, _utils.getInteger)({ - data: attributes.rotate, - defaultValue: 0, - validate: x => x % 90 === 0 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; - this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); - this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); - this.assist = null; - this.bind = null; - this.border = null; - this.calculate = null; - this.caption = null; - this.desc = null; - this.extras = null; - this.font = null; - this.format = null; - this.items = new _xfa_object.XFAObjectArray(2); - this.keep = null; - this.margin = null; - this.para = null; - this.traversal = null; - this.ui = null; - this.validate = null; - this.value = null; - this.bindItems = new _xfa_object.XFAObjectArray(); - this.connect = new _xfa_object.XFAObjectArray(); - this.event = new _xfa_object.XFAObjectArray(); - this.setProperty = new _xfa_object.XFAObjectArray(); - } - [_symbol_utils.$isBindable]() { - return true; - } - [_symbol_utils.$setValue](value) { - _setValue(this, value); - } - [_symbol_utils.$toHTML](availableSpace) { - setTabIndex(this); - if (!this.ui) { - this.ui = new Ui({}); - this.ui[_symbol_utils.$globalData] = this[_symbol_utils.$globalData]; - this[_symbol_utils.$appendChild](this.ui); - let node; - switch (this.items.children.length) { - case 0: - node = new TextEdit({}); - this.ui.textEdit = node; - break; - case 1: - node = new CheckButton({}); - this.ui.checkButton = node; - break; - case 2: - node = new ChoiceList({}); - this.ui.choiceList = node; - break; - } - this.ui[_symbol_utils.$appendChild](node); - } - if (!this.ui || this.presence === "hidden" || this.presence === "inactive" || this.h === 0 || this.w === 0) { - return _utils.HTMLResult.EMPTY; - } - if (this.caption) { - delete this.caption[_symbol_utils.$extra]; - } - this[_symbol_utils.$pushPara](); - const caption = this.caption ? this.caption[_symbol_utils.$toHTML](availableSpace).html : null; - const savedW = this.w; - const savedH = this.h; - let marginH = 0; - let marginV = 0; - if (this.margin) { - marginH = this.margin.leftInset + this.margin.rightInset; - marginV = this.margin.topInset + this.margin.bottomInset; - } - let borderDims = null; - if (this.w === "" || this.h === "") { - let width = null; - let height = null; - let uiW = 0; - let uiH = 0; - if (this.ui.checkButton) { - uiW = uiH = this.ui.checkButton.size; - } else { - const { - w, - h - } = (0, _html_utils.layoutNode)(this, availableSpace); - if (w !== null) { - uiW = w; - uiH = h; - } else { - uiH = (0, _fonts.getMetrics)(this.font, true).lineNoGap; - } - } - borderDims = getBorderDims(this.ui[_symbol_utils.$getExtra]()); - uiW += borderDims.w; - uiH += borderDims.h; - if (this.caption) { - const { - w, - h, - isBroken - } = this.caption[_symbol_utils.$getExtra](availableSpace); - if (isBroken && this[_symbol_utils.$getSubformParent]()[_symbol_utils.$isThereMoreWidth]()) { - this[_symbol_utils.$popPara](); - return _utils.HTMLResult.FAILURE; - } - width = w; - height = h; - switch (this.caption.placement) { - case "left": - case "right": - case "inline": - width += uiW; - break; - case "top": - case "bottom": - height += uiH; - break; - } - } else { - width = uiW; - height = uiH; - } - if (width && this.w === "") { - width += marginH; - this.w = Math.min(this.maxW <= 0 ? Infinity : this.maxW, this.minW + 1 < width ? width : this.minW); - } - if (height && this.h === "") { - height += marginV; - this.h = Math.min(this.maxH <= 0 ? Infinity : this.maxH, this.minH + 1 < height ? height : this.minH); - } - } - this[_symbol_utils.$popPara](); - (0, _html_utils.fixDimensions)(this); - setFirstUnsplittable(this); - if (!(0, _layout.checkDimensions)(this, availableSpace)) { - this.w = savedW; - this.h = savedH; - this[_symbol_utils.$popPara](); - return _utils.HTMLResult.FAILURE; - } - unsetFirstUnsplittable(this); - const style = (0, _html_utils.toStyle)(this, "font", "dimensions", "position", "rotate", "anchorType", "presence", "margin", "hAlign"); - (0, _html_utils.setMinMaxDimensions)(this, style); - const classNames = ["xfaField"]; - if (this.font) { - classNames.push("xfaFont"); - } - if ((0, _html_utils.isPrintOnly)(this)) { - classNames.push("xfaPrintOnly"); - } - const attributes = { - style, - id: this[_symbol_utils.$uid], - class: classNames - }; - if (style.margin) { - style.padding = style.margin; - delete style.margin; - } - (0, _html_utils.setAccess)(this, classNames); - if (this.name) { - attributes.xfaName = this.name; - } - const children = []; - const html = { - name: "div", - attributes, - children - }; - applyAssist(this, attributes); - const borderStyle = this.border ? this.border[_symbol_utils.$toStyle]() : null; - const bbox = (0, _html_utils.computeBbox)(this, html, availableSpace); - const ui = this.ui[_symbol_utils.$toHTML]().html; - if (!ui) { - Object.assign(style, borderStyle); - return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); - } - if (this[_symbol_utils.$tabIndex]) { - if (ui.children?.[0]) { - ui.children[0].attributes.tabindex = this[_symbol_utils.$tabIndex]; - } else { - ui.attributes.tabindex = this[_symbol_utils.$tabIndex]; - } - } - if (!ui.attributes.style) { - ui.attributes.style = Object.create(null); - } - let aElement = null; - if (this.ui.button) { - if (ui.children.length === 1) { - [aElement] = ui.children.splice(0, 1); - } - Object.assign(ui.attributes.style, borderStyle); - } else { - Object.assign(style, borderStyle); - } - children.push(ui); - if (this.value) { - if (this.ui.imageEdit) { - ui.children.push(this.value[_symbol_utils.$toHTML]().html); - } else if (!this.ui.button) { - let value = ""; - if (this.value.exData) { - value = this.value.exData[_symbol_utils.$text](); - } else if (this.value.text) { - value = this.value.text[_symbol_utils.$getExtra](); - } else { - const htmlValue = this.value[_symbol_utils.$toHTML]().html; - if (htmlValue !== null) { - value = htmlValue.children[0].value; - } - } - if (this.ui.textEdit && this.value.text?.maxChars) { - ui.children[0].attributes.maxLength = this.value.text.maxChars; - } - if (value) { - if (this.ui.numericEdit) { - value = parseFloat(value); - value = isNaN(value) ? "" : value.toString(); - } - if (ui.children[0].name === "textarea") { - ui.children[0].attributes.textContent = value; - } else { - ui.children[0].attributes.value = value; - } - } - } - } - if (!this.ui.imageEdit && ui.children?.[0] && this.h) { - borderDims = borderDims || getBorderDims(this.ui[_symbol_utils.$getExtra]()); - let captionHeight = 0; - if (this.caption && ["top", "bottom"].includes(this.caption.placement)) { - captionHeight = this.caption.reserve; - if (captionHeight <= 0) { - captionHeight = this.caption[_symbol_utils.$getExtra](availableSpace).h; - } - const inputHeight = this.h - captionHeight - marginV - borderDims.h; - ui.children[0].attributes.style.height = (0, _html_utils.measureToString)(inputHeight); - } else { - ui.children[0].attributes.style.height = "100%"; - } - } - if (aElement) { - ui.children.push(aElement); - } - if (!caption) { - if (ui.attributes.class) { - ui.attributes.class.push("xfaLeft"); - } - this.w = savedW; - this.h = savedH; - return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); - } - if (this.ui.button) { - if (style.padding) { - delete style.padding; - } - if (caption.name === "div") { - caption.name = "span"; - } - ui.children.push(caption); - return _utils.HTMLResult.success(html, bbox); - } else if (this.ui.checkButton) { - caption.attributes.class[0] = "xfaCaptionForCheckButton"; - } - if (!ui.attributes.class) { - ui.attributes.class = []; - } - ui.children.splice(0, 0, caption); - switch (this.caption.placement) { - case "left": - ui.attributes.class.push("xfaLeft"); - break; - case "right": - ui.attributes.class.push("xfaRight"); - break; - case "top": - ui.attributes.class.push("xfaTop"); - break; - case "bottom": - ui.attributes.class.push("xfaBottom"); - break; - case "inline": - ui.attributes.class.push("xfaLeft"); - break; - } - this.w = savedW; - this.h = savedH; - return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); - } -} -exports.Field = Field; -class Fill extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "fill", true); - this.id = attributes.id || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.color = null; - this.extras = null; - this.linear = null; - this.pattern = null; - this.radial = null; - this.solid = null; - this.stipple = null; - } - [_symbol_utils.$toStyle]() { - const parent = this[_symbol_utils.$getParent](); - const grandpa = parent[_symbol_utils.$getParent](); - const ggrandpa = grandpa[_symbol_utils.$getParent](); - const style = Object.create(null); - let propName = "color"; - let altPropName = propName; - if (parent instanceof Border) { - propName = "background-color"; - altPropName = "background"; - if (ggrandpa instanceof Ui) { - style.backgroundColor = "white"; - } - } - if (parent instanceof Rectangle || parent instanceof Arc) { - propName = altPropName = "fill"; - style.fill = "white"; - } - for (const name of Object.getOwnPropertyNames(this)) { - if (name === "extras" || name === "color") { - continue; - } - const obj = this[name]; - if (!(obj instanceof _xfa_object.XFAObject)) { - continue; - } - const color = obj[_symbol_utils.$toStyle](this.color); - if (color) { - style[color.startsWith("#") ? propName : altPropName] = color; - } - return style; - } - if (this.color?.value) { - const color = this.color[_symbol_utils.$toStyle](); - style[color.startsWith("#") ? propName : altPropName] = color; - } - return style; - } -} -class Filter extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "filter", true); - this.addRevocationInfo = (0, _utils.getStringOption)(attributes.addRevocationInfo, ["", "required", "optional", "none"]); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.version = (0, _utils.getInteger)({ - data: this.version, - defaultValue: 5, - validate: x => x >= 1 && x <= 5 - }); - this.appearanceFilter = null; - this.certificates = null; - this.digestMethods = null; - this.encodings = null; - this.encryptionMethods = null; - this.handler = null; - this.lockDocument = null; - this.mdp = null; - this.reasons = null; - this.timeStamp = null; - } -} -class Float extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "float"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - [_symbol_utils.$finalize]() { - const number = parseFloat(this[_symbol_utils.$content].trim()); - this[_symbol_utils.$content] = isNaN(number) ? null : number; - } - [_symbol_utils.$toHTML](availableSpace) { - return valueToHtml(this[_symbol_utils.$content] !== null ? this[_symbol_utils.$content].toString() : ""); - } -} -class Font extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "font", true); - this.baselineShift = (0, _utils.getMeasurement)(attributes.baselineShift); - this.fontHorizontalScale = (0, _utils.getFloat)({ - data: attributes.fontHorizontalScale, - defaultValue: 100, - validate: x => x >= 0 - }); - this.fontVerticalScale = (0, _utils.getFloat)({ - data: attributes.fontVerticalScale, - defaultValue: 100, - validate: x => x >= 0 - }); - this.id = attributes.id || ""; - this.kerningMode = (0, _utils.getStringOption)(attributes.kerningMode, ["none", "pair"]); - this.letterSpacing = (0, _utils.getMeasurement)(attributes.letterSpacing, "0"); - this.lineThrough = (0, _utils.getInteger)({ - data: attributes.lineThrough, - defaultValue: 0, - validate: x => x === 1 || x === 2 - }); - this.lineThroughPeriod = (0, _utils.getStringOption)(attributes.lineThroughPeriod, ["all", "word"]); - this.overline = (0, _utils.getInteger)({ - data: attributes.overline, - defaultValue: 0, - validate: x => x === 1 || x === 2 - }); - this.overlinePeriod = (0, _utils.getStringOption)(attributes.overlinePeriod, ["all", "word"]); - this.posture = (0, _utils.getStringOption)(attributes.posture, ["normal", "italic"]); - this.size = (0, _utils.getMeasurement)(attributes.size, "10pt"); - this.typeface = attributes.typeface || "Courier"; - this.underline = (0, _utils.getInteger)({ - data: attributes.underline, - defaultValue: 0, - validate: x => x === 1 || x === 2 - }); - this.underlinePeriod = (0, _utils.getStringOption)(attributes.underlinePeriod, ["all", "word"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.weight = (0, _utils.getStringOption)(attributes.weight, ["normal", "bold"]); - this.extras = null; - this.fill = null; - } - [_symbol_utils.$clean](builder) { - super[_symbol_utils.$clean](builder); - this[_symbol_utils.$globalData].usedTypefaces.add(this.typeface); - } - [_symbol_utils.$toStyle]() { - const style = (0, _html_utils.toStyle)(this, "fill"); - const color = style.color; - if (color) { - if (color === "#000000") { - delete style.color; - } else if (!color.startsWith("#")) { - style.background = color; - style.backgroundClip = "text"; - style.color = "transparent"; - } - } - if (this.baselineShift) { - style.verticalAlign = (0, _html_utils.measureToString)(this.baselineShift); - } - style.fontKerning = this.kerningMode === "none" ? "none" : "normal"; - style.letterSpacing = (0, _html_utils.measureToString)(this.letterSpacing); - if (this.lineThrough !== 0) { - style.textDecoration = "line-through"; - if (this.lineThrough === 2) { - style.textDecorationStyle = "double"; - } - } - if (this.overline !== 0) { - style.textDecoration = "overline"; - if (this.overline === 2) { - style.textDecorationStyle = "double"; - } - } - style.fontStyle = this.posture; - style.fontSize = (0, _html_utils.measureToString)(0.99 * this.size); - (0, _html_utils.setFontFamily)(this, this, this[_symbol_utils.$globalData].fontFinder, style); - if (this.underline !== 0) { - style.textDecoration = "underline"; - if (this.underline === 2) { - style.textDecorationStyle = "double"; - } - } - style.fontWeight = this.weight; - return style; - } -} -class Format extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "format", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.picture = null; - } -} -class Handler extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "handler"); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Hyphenation extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "hyphenation"); - this.excludeAllCaps = (0, _utils.getInteger)({ - data: attributes.excludeAllCaps, - defaultValue: 0, - validate: x => x === 1 - }); - this.excludeInitialCap = (0, _utils.getInteger)({ - data: attributes.excludeInitialCap, - defaultValue: 0, - validate: x => x === 1 - }); - this.hyphenate = (0, _utils.getInteger)({ - data: attributes.hyphenate, - defaultValue: 0, - validate: x => x === 1 - }); - this.id = attributes.id || ""; - this.pushCharacterCount = (0, _utils.getInteger)({ - data: attributes.pushCharacterCount, - defaultValue: 3, - validate: x => x >= 0 - }); - this.remainCharacterCount = (0, _utils.getInteger)({ - data: attributes.remainCharacterCount, - defaultValue: 3, - validate: x => x >= 0 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.wordCharacterCount = (0, _utils.getInteger)({ - data: attributes.wordCharacterCount, - defaultValue: 7, - validate: x => x >= 0 - }); - } -} -class Image extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "image"); - this.aspect = (0, _utils.getStringOption)(attributes.aspect, ["fit", "actual", "height", "none", "width"]); - this.contentType = attributes.contentType || ""; - this.href = attributes.href || ""; - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.transferEncoding = (0, _utils.getStringOption)(attributes.transferEncoding, ["base64", "none", "package"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - [_symbol_utils.$toHTML]() { - if (this.contentType && !MIMES.has(this.contentType.toLowerCase())) { - return _utils.HTMLResult.EMPTY; - } - let buffer = this[_symbol_utils.$globalData].images && this[_symbol_utils.$globalData].images.get(this.href); - if (!buffer && (this.href || !this[_symbol_utils.$content])) { - return _utils.HTMLResult.EMPTY; - } - if (!buffer && this.transferEncoding === "base64") { - buffer = (0, _util.stringToBytes)(atob(this[_symbol_utils.$content])); - } - if (!buffer) { - return _utils.HTMLResult.EMPTY; - } - if (!this.contentType) { - for (const [header, type] of IMAGES_HEADERS) { - if (buffer.length > header.length && header.every((x, i) => x === buffer[i])) { - this.contentType = type; - break; - } - } - if (!this.contentType) { - return _utils.HTMLResult.EMPTY; - } - } - const blob = new Blob([buffer], { - type: this.contentType - }); - let style; - switch (this.aspect) { - case "fit": - case "actual": - break; - case "height": - style = { - height: "100%", - objectFit: "fill" - }; - break; - case "none": - style = { - width: "100%", - height: "100%", - objectFit: "fill" - }; - break; - case "width": - style = { - width: "100%", - objectFit: "fill" - }; - break; - } - const parent = this[_symbol_utils.$getParent](); - return _utils.HTMLResult.success({ - name: "img", - attributes: { - class: ["xfaImage"], - style, - src: URL.createObjectURL(blob), - alt: parent ? ariaLabel(parent[_symbol_utils.$getParent]()) : null - } - }); - } -} -class ImageEdit extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "imageEdit", true); - this.data = (0, _utils.getStringOption)(attributes.data, ["link", "embed"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.border = null; - this.extras = null; - this.margin = null; - } - [_symbol_utils.$toHTML](availableSpace) { - if (this.data === "embed") { - return _utils.HTMLResult.success({ - name: "div", - children: [], - attributes: {} - }); - } - return _utils.HTMLResult.EMPTY; - } -} -class Integer extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "integer"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - [_symbol_utils.$finalize]() { - const number = parseInt(this[_symbol_utils.$content].trim(), 10); - this[_symbol_utils.$content] = isNaN(number) ? null : number; - } - [_symbol_utils.$toHTML](availableSpace) { - return valueToHtml(this[_symbol_utils.$content] !== null ? this[_symbol_utils.$content].toString() : ""); - } -} -class Issuers extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "issuers", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.certificate = new _xfa_object.XFAObjectArray(); - } -} -class Items extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "items", true); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.ref = attributes.ref || ""; - this.save = (0, _utils.getInteger)({ - data: attributes.save, - defaultValue: 0, - validate: x => x === 1 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.boolean = new _xfa_object.XFAObjectArray(); - this.date = new _xfa_object.XFAObjectArray(); - this.dateTime = new _xfa_object.XFAObjectArray(); - this.decimal = new _xfa_object.XFAObjectArray(); - this.exData = new _xfa_object.XFAObjectArray(); - this.float = new _xfa_object.XFAObjectArray(); - this.image = new _xfa_object.XFAObjectArray(); - this.integer = new _xfa_object.XFAObjectArray(); - this.text = new _xfa_object.XFAObjectArray(); - this.time = new _xfa_object.XFAObjectArray(); - } - [_symbol_utils.$toHTML]() { - const output = []; - for (const child of this[_symbol_utils.$getChildren]()) { - output.push(child[_symbol_utils.$text]()); - } - return _utils.HTMLResult.success(output); - } -} -exports.Items = Items; -class Keep extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "keep", true); - this.id = attributes.id || ""; - const options = ["none", "contentArea", "pageArea"]; - this.intact = (0, _utils.getStringOption)(attributes.intact, options); - this.next = (0, _utils.getStringOption)(attributes.next, options); - this.previous = (0, _utils.getStringOption)(attributes.previous, options); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - } -} -class KeyUsage extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "keyUsage"); - const options = ["", "yes", "no"]; - this.crlSign = (0, _utils.getStringOption)(attributes.crlSign, options); - this.dataEncipherment = (0, _utils.getStringOption)(attributes.dataEncipherment, options); - this.decipherOnly = (0, _utils.getStringOption)(attributes.decipherOnly, options); - this.digitalSignature = (0, _utils.getStringOption)(attributes.digitalSignature, options); - this.encipherOnly = (0, _utils.getStringOption)(attributes.encipherOnly, options); - this.id = attributes.id || ""; - this.keyAgreement = (0, _utils.getStringOption)(attributes.keyAgreement, options); - this.keyCertSign = (0, _utils.getStringOption)(attributes.keyCertSign, options); - this.keyEncipherment = (0, _utils.getStringOption)(attributes.keyEncipherment, options); - this.nonRepudiation = (0, _utils.getStringOption)(attributes.nonRepudiation, options); - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Line extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "line", true); - this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); - this.id = attributes.id || ""; - this.slope = (0, _utils.getStringOption)(attributes.slope, ["\\", "/"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.edge = null; - } - [_symbol_utils.$toHTML]() { - const parent = this[_symbol_utils.$getParent]()[_symbol_utils.$getParent](); - const edge = this.edge || new Edge({}); - const edgeStyle = edge[_symbol_utils.$toStyle](); - const style = Object.create(null); - const thickness = edge.presence === "visible" ? edge.thickness : 0; - style.strokeWidth = (0, _html_utils.measureToString)(thickness); - style.stroke = edgeStyle.color; - let x1, y1, x2, y2; - let width = "100%"; - let height = "100%"; - if (parent.w <= thickness) { - [x1, y1, x2, y2] = ["50%", 0, "50%", "100%"]; - width = style.strokeWidth; - } else if (parent.h <= thickness) { - [x1, y1, x2, y2] = [0, "50%", "100%", "50%"]; - height = style.strokeWidth; - } else if (this.slope === "\\") { - [x1, y1, x2, y2] = [0, 0, "100%", "100%"]; - } else { - [x1, y1, x2, y2] = [0, "100%", "100%", 0]; - } - const line = { - name: "line", - attributes: { - xmlns: SVG_NS, - x1, - y1, - x2, - y2, - style - } - }; - const svg = { - name: "svg", - children: [line], - attributes: { - xmlns: SVG_NS, - width, - height, - style: { - overflow: "visible" - } - } - }; - if (hasMargin(parent)) { - return _utils.HTMLResult.success({ - name: "div", - attributes: { - style: { - display: "inline", - width: "100%", - height: "100%" - } - }, - children: [svg] - }); - } - svg.attributes.style.position = "absolute"; - return _utils.HTMLResult.success(svg); - } -} -class Linear extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "linear", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["toRight", "toBottom", "toLeft", "toTop"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.color = null; - this.extras = null; - } - [_symbol_utils.$toStyle](startColor) { - startColor = startColor ? startColor[_symbol_utils.$toStyle]() : "#FFFFFF"; - const transf = this.type.replace(/([RBLT])/, " $1").toLowerCase(); - const endColor = this.color ? this.color[_symbol_utils.$toStyle]() : "#000000"; - return `linear-gradient(${transf}, ${startColor}, ${endColor})`; - } -} -class LockDocument extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "lockDocument"); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - [_symbol_utils.$finalize]() { - this[_symbol_utils.$content] = (0, _utils.getStringOption)(this[_symbol_utils.$content], ["auto", "0", "1"]); - } -} -class Manifest extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "manifest", true); - this.action = (0, _utils.getStringOption)(attributes.action, ["include", "all", "exclude"]); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.ref = new _xfa_object.XFAObjectArray(); - } -} -class Margin extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "margin", true); - this.bottomInset = (0, _utils.getMeasurement)(attributes.bottomInset, "0"); - this.id = attributes.id || ""; - this.leftInset = (0, _utils.getMeasurement)(attributes.leftInset, "0"); - this.rightInset = (0, _utils.getMeasurement)(attributes.rightInset, "0"); - this.topInset = (0, _utils.getMeasurement)(attributes.topInset, "0"); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - } - [_symbol_utils.$toStyle]() { - return { - margin: (0, _html_utils.measureToString)(this.topInset) + " " + (0, _html_utils.measureToString)(this.rightInset) + " " + (0, _html_utils.measureToString)(this.bottomInset) + " " + (0, _html_utils.measureToString)(this.leftInset) - }; - } -} -class Mdp extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "mdp"); - this.id = attributes.id || ""; - this.permissions = (0, _utils.getInteger)({ - data: attributes.permissions, - defaultValue: 2, - validate: x => x === 1 || x === 3 - }); - this.signatureType = (0, _utils.getStringOption)(attributes.signatureType, ["filler", "author"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Medium extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "medium"); - this.id = attributes.id || ""; - this.imagingBBox = (0, _utils.getBBox)(attributes.imagingBBox); - this.long = (0, _utils.getMeasurement)(attributes.long); - this.orientation = (0, _utils.getStringOption)(attributes.orientation, ["portrait", "landscape"]); - this.short = (0, _utils.getMeasurement)(attributes.short); - this.stock = attributes.stock || ""; - this.trayIn = (0, _utils.getStringOption)(attributes.trayIn, ["auto", "delegate", "pageFront"]); - this.trayOut = (0, _utils.getStringOption)(attributes.trayOut, ["auto", "delegate"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Message extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "message", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.text = new _xfa_object.XFAObjectArray(); - } -} -class NumericEdit extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "numericEdit", true); - this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.border = null; - this.comb = null; - this.extras = null; - this.margin = null; - } - [_symbol_utils.$toHTML](availableSpace) { - const style = (0, _html_utils.toStyle)(this, "border", "font", "margin"); - const field = this[_symbol_utils.$getParent]()[_symbol_utils.$getParent](); - const html = { - name: "input", - attributes: { - type: "text", - fieldId: field[_symbol_utils.$uid], - dataId: field[_symbol_utils.$data]?.[_symbol_utils.$uid] || field[_symbol_utils.$uid], - class: ["xfaTextfield"], - style, - "aria-label": ariaLabel(field), - "aria-required": false - } - }; - if (isRequired(field)) { - html.attributes["aria-required"] = true; - html.attributes.required = true; - } - return _utils.HTMLResult.success({ - name: "label", - attributes: { - class: ["xfaLabel"] - }, - children: [html] - }); - } -} -class Occur extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "occur", true); - this.id = attributes.id || ""; - this.initial = attributes.initial !== "" ? (0, _utils.getInteger)({ - data: attributes.initial, - defaultValue: "", - validate: x => true - }) : ""; - this.max = attributes.max !== "" ? (0, _utils.getInteger)({ - data: attributes.max, - defaultValue: 1, - validate: x => true - }) : ""; - this.min = attributes.min !== "" ? (0, _utils.getInteger)({ - data: attributes.min, - defaultValue: 1, - validate: x => true - }) : ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - } - [_symbol_utils.$clean]() { - const parent = this[_symbol_utils.$getParent](); - const originalMin = this.min; - if (this.min === "") { - this.min = parent instanceof PageArea || parent instanceof PageSet ? 0 : 1; - } - if (this.max === "") { - if (originalMin === "") { - this.max = parent instanceof PageArea || parent instanceof PageSet ? -1 : 1; - } else { - this.max = this.min; - } - } - if (this.max !== -1 && this.max < this.min) { - this.max = this.min; - } - if (this.initial === "") { - this.initial = parent instanceof Template ? 1 : this.min; - } - } -} -class Oid extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "oid"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Oids extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "oids", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.oid = new _xfa_object.XFAObjectArray(); - } -} -class Overflow extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "overflow"); - this.id = attributes.id || ""; - this.leader = attributes.leader || ""; - this.target = attributes.target || ""; - this.trailer = attributes.trailer || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - [_symbol_utils.$getExtra]() { - if (!this[_symbol_utils.$extra]) { - const parent = this[_symbol_utils.$getParent](); - const root = this[_symbol_utils.$getTemplateRoot](); - const target = root[_symbol_utils.$searchNode](this.target, parent); - const leader = root[_symbol_utils.$searchNode](this.leader, parent); - const trailer = root[_symbol_utils.$searchNode](this.trailer, parent); - this[_symbol_utils.$extra] = { - target: target?.[0] || null, - leader: leader?.[0] || null, - trailer: trailer?.[0] || null, - addLeader: false, - addTrailer: false - }; - } - return this[_symbol_utils.$extra]; - } -} -class PageArea extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "pageArea", true); - this.blankOrNotBlank = (0, _utils.getStringOption)(attributes.blankOrNotBlank, ["any", "blank", "notBlank"]); - this.id = attributes.id || ""; - this.initialNumber = (0, _utils.getInteger)({ - data: attributes.initialNumber, - defaultValue: 1, - validate: x => true - }); - this.name = attributes.name || ""; - this.numbered = (0, _utils.getInteger)({ - data: attributes.numbered, - defaultValue: 1, - validate: x => true - }); - this.oddOrEven = (0, _utils.getStringOption)(attributes.oddOrEven, ["any", "even", "odd"]); - this.pagePosition = (0, _utils.getStringOption)(attributes.pagePosition, ["any", "first", "last", "only", "rest"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.desc = null; - this.extras = null; - this.medium = null; - this.occur = null; - this.area = new _xfa_object.XFAObjectArray(); - this.contentArea = new _xfa_object.XFAObjectArray(); - this.draw = new _xfa_object.XFAObjectArray(); - this.exclGroup = new _xfa_object.XFAObjectArray(); - this.field = new _xfa_object.XFAObjectArray(); - this.subform = new _xfa_object.XFAObjectArray(); - } - [_symbol_utils.$isUsable]() { - if (!this[_symbol_utils.$extra]) { - this[_symbol_utils.$extra] = { - numberOfUse: 0 - }; - return true; - } - return !this.occur || this.occur.max === -1 || this[_symbol_utils.$extra].numberOfUse < this.occur.max; - } - [_symbol_utils.$cleanPage]() { - delete this[_symbol_utils.$extra]; - } - [_symbol_utils.$getNextPage]() { - if (!this[_symbol_utils.$extra]) { - this[_symbol_utils.$extra] = { - numberOfUse: 0 - }; - } - const parent = this[_symbol_utils.$getParent](); - if (parent.relation === "orderedOccurrence") { - if (this[_symbol_utils.$isUsable]()) { - this[_symbol_utils.$extra].numberOfUse += 1; - return this; - } - } - return parent[_symbol_utils.$getNextPage](); - } - [_symbol_utils.$getAvailableSpace]() { - return this[_symbol_utils.$extra].space || { - width: 0, - height: 0 - }; - } - [_symbol_utils.$toHTML]() { - if (!this[_symbol_utils.$extra]) { - this[_symbol_utils.$extra] = { - numberOfUse: 1 - }; - } - const children = []; - this[_symbol_utils.$extra].children = children; - const style = Object.create(null); - if (this.medium && this.medium.short && this.medium.long) { - style.width = (0, _html_utils.measureToString)(this.medium.short); - style.height = (0, _html_utils.measureToString)(this.medium.long); - this[_symbol_utils.$extra].space = { - width: this.medium.short, - height: this.medium.long - }; - if (this.medium.orientation === "landscape") { - const x = style.width; - style.width = style.height; - style.height = x; - this[_symbol_utils.$extra].space = { - width: this.medium.long, - height: this.medium.short - }; - } - } else { - (0, _util.warn)("XFA - No medium specified in pageArea: please file a bug."); - } - this[_symbol_utils.$childrenToHTML]({ - filter: new Set(["area", "draw", "field", "subform"]), - include: true - }); - this[_symbol_utils.$childrenToHTML]({ - filter: new Set(["contentArea"]), - include: true - }); - return _utils.HTMLResult.success({ - name: "div", - children, - attributes: { - class: ["xfaPage"], - id: this[_symbol_utils.$uid], - style, - xfaName: this.name - } - }); - } -} -class PageSet extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "pageSet", true); - this.duplexImposition = (0, _utils.getStringOption)(attributes.duplexImposition, ["longEdge", "shortEdge"]); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.relation = (0, _utils.getStringOption)(attributes.relation, ["orderedOccurrence", "duplexPaginated", "simplexPaginated"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.occur = null; - this.pageArea = new _xfa_object.XFAObjectArray(); - this.pageSet = new _xfa_object.XFAObjectArray(); - } - [_symbol_utils.$cleanPage]() { - for (const page of this.pageArea.children) { - page[_symbol_utils.$cleanPage](); - } - for (const page of this.pageSet.children) { - page[_symbol_utils.$cleanPage](); - } - } - [_symbol_utils.$isUsable]() { - return !this.occur || this.occur.max === -1 || this[_symbol_utils.$extra].numberOfUse < this.occur.max; - } - [_symbol_utils.$getNextPage]() { - if (!this[_symbol_utils.$extra]) { - this[_symbol_utils.$extra] = { - numberOfUse: 1, - pageIndex: -1, - pageSetIndex: -1 - }; - } - if (this.relation === "orderedOccurrence") { - if (this[_symbol_utils.$extra].pageIndex + 1 < this.pageArea.children.length) { - this[_symbol_utils.$extra].pageIndex += 1; - const pageArea = this.pageArea.children[this[_symbol_utils.$extra].pageIndex]; - return pageArea[_symbol_utils.$getNextPage](); - } - if (this[_symbol_utils.$extra].pageSetIndex + 1 < this.pageSet.children.length) { - this[_symbol_utils.$extra].pageSetIndex += 1; - return this.pageSet.children[this[_symbol_utils.$extra].pageSetIndex][_symbol_utils.$getNextPage](); - } - if (this[_symbol_utils.$isUsable]()) { - this[_symbol_utils.$extra].numberOfUse += 1; - this[_symbol_utils.$extra].pageIndex = -1; - this[_symbol_utils.$extra].pageSetIndex = -1; - return this[_symbol_utils.$getNextPage](); - } - const parent = this[_symbol_utils.$getParent](); - if (parent instanceof PageSet) { - return parent[_symbol_utils.$getNextPage](); - } - this[_symbol_utils.$cleanPage](); - return this[_symbol_utils.$getNextPage](); - } - const pageNumber = this[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].pageNumber; - const parity = pageNumber % 2 === 0 ? "even" : "odd"; - const position = pageNumber === 0 ? "first" : "rest"; - let page = this.pageArea.children.find(p => p.oddOrEven === parity && p.pagePosition === position); - if (page) { - return page; - } - page = this.pageArea.children.find(p => p.oddOrEven === "any" && p.pagePosition === position); - if (page) { - return page; - } - page = this.pageArea.children.find(p => p.oddOrEven === "any" && p.pagePosition === "any"); - if (page) { - return page; - } - return this.pageArea.children[0]; - } -} -class Para extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "para", true); - this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); - this.id = attributes.id || ""; - this.lineHeight = attributes.lineHeight ? (0, _utils.getMeasurement)(attributes.lineHeight, "0pt") : ""; - this.marginLeft = attributes.marginLeft ? (0, _utils.getMeasurement)(attributes.marginLeft, "0pt") : ""; - this.marginRight = attributes.marginRight ? (0, _utils.getMeasurement)(attributes.marginRight, "0pt") : ""; - this.orphans = (0, _utils.getInteger)({ - data: attributes.orphans, - defaultValue: 0, - validate: x => x >= 0 - }); - this.preserve = attributes.preserve || ""; - this.radixOffset = attributes.radixOffset ? (0, _utils.getMeasurement)(attributes.radixOffset, "0pt") : ""; - this.spaceAbove = attributes.spaceAbove ? (0, _utils.getMeasurement)(attributes.spaceAbove, "0pt") : ""; - this.spaceBelow = attributes.spaceBelow ? (0, _utils.getMeasurement)(attributes.spaceBelow, "0pt") : ""; - this.tabDefault = attributes.tabDefault ? (0, _utils.getMeasurement)(this.tabDefault) : ""; - this.tabStops = (attributes.tabStops || "").trim().split(/\s+/).map((x, i) => i % 2 === 1 ? (0, _utils.getMeasurement)(x) : x); - this.textIndent = attributes.textIndent ? (0, _utils.getMeasurement)(attributes.textIndent, "0pt") : ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.vAlign = (0, _utils.getStringOption)(attributes.vAlign, ["top", "bottom", "middle"]); - this.widows = (0, _utils.getInteger)({ - data: attributes.widows, - defaultValue: 0, - validate: x => x >= 0 - }); - this.hyphenation = null; - } - [_symbol_utils.$toStyle]() { - const style = (0, _html_utils.toStyle)(this, "hAlign"); - if (this.marginLeft !== "") { - style.paddingLeft = (0, _html_utils.measureToString)(this.marginLeft); - } - if (this.marginRight !== "") { - style.paddingight = (0, _html_utils.measureToString)(this.marginRight); - } - if (this.spaceAbove !== "") { - style.paddingTop = (0, _html_utils.measureToString)(this.spaceAbove); - } - if (this.spaceBelow !== "") { - style.paddingBottom = (0, _html_utils.measureToString)(this.spaceBelow); - } - if (this.textIndent !== "") { - style.textIndent = (0, _html_utils.measureToString)(this.textIndent); - (0, _html_utils.fixTextIndent)(style); - } - if (this.lineHeight > 0) { - style.lineHeight = (0, _html_utils.measureToString)(this.lineHeight); - } - if (this.tabDefault !== "") { - style.tabSize = (0, _html_utils.measureToString)(this.tabDefault); - } - if (this.tabStops.length > 0) {} - if (this.hyphenatation) { - Object.assign(style, this.hyphenatation[_symbol_utils.$toStyle]()); - } - return style; - } -} -class PasswordEdit extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "passwordEdit", true); - this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); - this.id = attributes.id || ""; - this.passwordChar = attributes.passwordChar || "*"; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.border = null; - this.extras = null; - this.margin = null; - } -} -class Pattern extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "pattern", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["crossHatch", "crossDiagonal", "diagonalLeft", "diagonalRight", "horizontal", "vertical"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.color = null; - this.extras = null; - } - [_symbol_utils.$toStyle](startColor) { - startColor = startColor ? startColor[_symbol_utils.$toStyle]() : "#FFFFFF"; - const endColor = this.color ? this.color[_symbol_utils.$toStyle]() : "#000000"; - const width = 5; - const cmd = "repeating-linear-gradient"; - const colors = `${startColor},${startColor} ${width}px,${endColor} ${width}px,${endColor} ${2 * width}px`; - switch (this.type) { - case "crossHatch": - return `${cmd}(to top,${colors}) ${cmd}(to right,${colors})`; - case "crossDiagonal": - return `${cmd}(45deg,${colors}) ${cmd}(-45deg,${colors})`; - case "diagonalLeft": - return `${cmd}(45deg,${colors})`; - case "diagonalRight": - return `${cmd}(-45deg,${colors})`; - case "horizontal": - return `${cmd}(to top,${colors})`; - case "vertical": - return `${cmd}(to right,${colors})`; - } - return ""; - } -} -class Picture extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "picture"); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Proto extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "proto", true); - this.appearanceFilter = new _xfa_object.XFAObjectArray(); - this.arc = new _xfa_object.XFAObjectArray(); - this.area = new _xfa_object.XFAObjectArray(); - this.assist = new _xfa_object.XFAObjectArray(); - this.barcode = new _xfa_object.XFAObjectArray(); - this.bindItems = new _xfa_object.XFAObjectArray(); - this.bookend = new _xfa_object.XFAObjectArray(); - this.boolean = new _xfa_object.XFAObjectArray(); - this.border = new _xfa_object.XFAObjectArray(); - this.break = new _xfa_object.XFAObjectArray(); - this.breakAfter = new _xfa_object.XFAObjectArray(); - this.breakBefore = new _xfa_object.XFAObjectArray(); - this.button = new _xfa_object.XFAObjectArray(); - this.calculate = new _xfa_object.XFAObjectArray(); - this.caption = new _xfa_object.XFAObjectArray(); - this.certificate = new _xfa_object.XFAObjectArray(); - this.certificates = new _xfa_object.XFAObjectArray(); - this.checkButton = new _xfa_object.XFAObjectArray(); - this.choiceList = new _xfa_object.XFAObjectArray(); - this.color = new _xfa_object.XFAObjectArray(); - this.comb = new _xfa_object.XFAObjectArray(); - this.connect = new _xfa_object.XFAObjectArray(); - this.contentArea = new _xfa_object.XFAObjectArray(); - this.corner = new _xfa_object.XFAObjectArray(); - this.date = new _xfa_object.XFAObjectArray(); - this.dateTime = new _xfa_object.XFAObjectArray(); - this.dateTimeEdit = new _xfa_object.XFAObjectArray(); - this.decimal = new _xfa_object.XFAObjectArray(); - this.defaultUi = new _xfa_object.XFAObjectArray(); - this.desc = new _xfa_object.XFAObjectArray(); - this.digestMethod = new _xfa_object.XFAObjectArray(); - this.digestMethods = new _xfa_object.XFAObjectArray(); - this.draw = new _xfa_object.XFAObjectArray(); - this.edge = new _xfa_object.XFAObjectArray(); - this.encoding = new _xfa_object.XFAObjectArray(); - this.encodings = new _xfa_object.XFAObjectArray(); - this.encrypt = new _xfa_object.XFAObjectArray(); - this.encryptData = new _xfa_object.XFAObjectArray(); - this.encryption = new _xfa_object.XFAObjectArray(); - this.encryptionMethod = new _xfa_object.XFAObjectArray(); - this.encryptionMethods = new _xfa_object.XFAObjectArray(); - this.event = new _xfa_object.XFAObjectArray(); - this.exData = new _xfa_object.XFAObjectArray(); - this.exObject = new _xfa_object.XFAObjectArray(); - this.exclGroup = new _xfa_object.XFAObjectArray(); - this.execute = new _xfa_object.XFAObjectArray(); - this.extras = new _xfa_object.XFAObjectArray(); - this.field = new _xfa_object.XFAObjectArray(); - this.fill = new _xfa_object.XFAObjectArray(); - this.filter = new _xfa_object.XFAObjectArray(); - this.float = new _xfa_object.XFAObjectArray(); - this.font = new _xfa_object.XFAObjectArray(); - this.format = new _xfa_object.XFAObjectArray(); - this.handler = new _xfa_object.XFAObjectArray(); - this.hyphenation = new _xfa_object.XFAObjectArray(); - this.image = new _xfa_object.XFAObjectArray(); - this.imageEdit = new _xfa_object.XFAObjectArray(); - this.integer = new _xfa_object.XFAObjectArray(); - this.issuers = new _xfa_object.XFAObjectArray(); - this.items = new _xfa_object.XFAObjectArray(); - this.keep = new _xfa_object.XFAObjectArray(); - this.keyUsage = new _xfa_object.XFAObjectArray(); - this.line = new _xfa_object.XFAObjectArray(); - this.linear = new _xfa_object.XFAObjectArray(); - this.lockDocument = new _xfa_object.XFAObjectArray(); - this.manifest = new _xfa_object.XFAObjectArray(); - this.margin = new _xfa_object.XFAObjectArray(); - this.mdp = new _xfa_object.XFAObjectArray(); - this.medium = new _xfa_object.XFAObjectArray(); - this.message = new _xfa_object.XFAObjectArray(); - this.numericEdit = new _xfa_object.XFAObjectArray(); - this.occur = new _xfa_object.XFAObjectArray(); - this.oid = new _xfa_object.XFAObjectArray(); - this.oids = new _xfa_object.XFAObjectArray(); - this.overflow = new _xfa_object.XFAObjectArray(); - this.pageArea = new _xfa_object.XFAObjectArray(); - this.pageSet = new _xfa_object.XFAObjectArray(); - this.para = new _xfa_object.XFAObjectArray(); - this.passwordEdit = new _xfa_object.XFAObjectArray(); - this.pattern = new _xfa_object.XFAObjectArray(); - this.picture = new _xfa_object.XFAObjectArray(); - this.radial = new _xfa_object.XFAObjectArray(); - this.reason = new _xfa_object.XFAObjectArray(); - this.reasons = new _xfa_object.XFAObjectArray(); - this.rectangle = new _xfa_object.XFAObjectArray(); - this.ref = new _xfa_object.XFAObjectArray(); - this.script = new _xfa_object.XFAObjectArray(); - this.setProperty = new _xfa_object.XFAObjectArray(); - this.signData = new _xfa_object.XFAObjectArray(); - this.signature = new _xfa_object.XFAObjectArray(); - this.signing = new _xfa_object.XFAObjectArray(); - this.solid = new _xfa_object.XFAObjectArray(); - this.speak = new _xfa_object.XFAObjectArray(); - this.stipple = new _xfa_object.XFAObjectArray(); - this.subform = new _xfa_object.XFAObjectArray(); - this.subformSet = new _xfa_object.XFAObjectArray(); - this.subjectDN = new _xfa_object.XFAObjectArray(); - this.subjectDNs = new _xfa_object.XFAObjectArray(); - this.submit = new _xfa_object.XFAObjectArray(); - this.text = new _xfa_object.XFAObjectArray(); - this.textEdit = new _xfa_object.XFAObjectArray(); - this.time = new _xfa_object.XFAObjectArray(); - this.timeStamp = new _xfa_object.XFAObjectArray(); - this.toolTip = new _xfa_object.XFAObjectArray(); - this.traversal = new _xfa_object.XFAObjectArray(); - this.traverse = new _xfa_object.XFAObjectArray(); - this.ui = new _xfa_object.XFAObjectArray(); - this.validate = new _xfa_object.XFAObjectArray(); - this.value = new _xfa_object.XFAObjectArray(); - this.variables = new _xfa_object.XFAObjectArray(); - } -} -class Radial extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "radial", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["toEdge", "toCenter"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.color = null; - this.extras = null; - } - [_symbol_utils.$toStyle](startColor) { - startColor = startColor ? startColor[_symbol_utils.$toStyle]() : "#FFFFFF"; - const endColor = this.color ? this.color[_symbol_utils.$toStyle]() : "#000000"; - const colors = this.type === "toEdge" ? `${startColor},${endColor}` : `${endColor},${startColor}`; - return `radial-gradient(circle at center, ${colors})`; - } -} -class Reason extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "reason"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Reasons extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "reasons", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.reason = new _xfa_object.XFAObjectArray(); - } -} -class Rectangle extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "rectangle", true); - this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.corner = new _xfa_object.XFAObjectArray(4); - this.edge = new _xfa_object.XFAObjectArray(4); - this.fill = null; - } - [_symbol_utils.$toHTML]() { - const edge = this.edge.children.length ? this.edge.children[0] : new Edge({}); - const edgeStyle = edge[_symbol_utils.$toStyle](); - const style = Object.create(null); - if (this.fill?.presence === "visible") { - Object.assign(style, this.fill[_symbol_utils.$toStyle]()); - } else { - style.fill = "transparent"; - } - style.strokeWidth = (0, _html_utils.measureToString)(edge.presence === "visible" ? edge.thickness : 0); - style.stroke = edgeStyle.color; - const corner = this.corner.children.length ? this.corner.children[0] : new Corner({}); - const cornerStyle = corner[_symbol_utils.$toStyle](); - const rect = { - name: "rect", - attributes: { - xmlns: SVG_NS, - width: "100%", - height: "100%", - x: 0, - y: 0, - rx: cornerStyle.radius, - ry: cornerStyle.radius, - style - } - }; - const svg = { - name: "svg", - children: [rect], - attributes: { - xmlns: SVG_NS, - style: { - overflow: "visible" - }, - width: "100%", - height: "100%" - } - }; - const parent = this[_symbol_utils.$getParent]()[_symbol_utils.$getParent](); - if (hasMargin(parent)) { - return _utils.HTMLResult.success({ - name: "div", - attributes: { - style: { - display: "inline", - width: "100%", - height: "100%" - } - }, - children: [svg] - }); - } - svg.attributes.style.position = "absolute"; - return _utils.HTMLResult.success(svg); - } -} -class RefElement extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "ref"); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Script extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "script"); - this.binding = attributes.binding || ""; - this.contentType = attributes.contentType || ""; - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.runAt = (0, _utils.getStringOption)(attributes.runAt, ["client", "both", "server"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class SetProperty extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "setProperty"); - this.connection = attributes.connection || ""; - this.ref = attributes.ref || ""; - this.target = attributes.target || ""; - } -} -exports.SetProperty = SetProperty; -class SignData extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "signData", true); - this.id = attributes.id || ""; - this.operation = (0, _utils.getStringOption)(attributes.operation, ["sign", "clear", "verify"]); - this.ref = attributes.ref || ""; - this.target = attributes.target || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.filter = null; - this.manifest = null; - } -} -class Signature extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "signature", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["PDF1.3", "PDF1.6"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.border = null; - this.extras = null; - this.filter = null; - this.manifest = null; - this.margin = null; - } -} -class Signing extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "signing", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.certificate = new _xfa_object.XFAObjectArray(); - } -} -class Solid extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "solid", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - } - [_symbol_utils.$toStyle](startColor) { - return startColor ? startColor[_symbol_utils.$toStyle]() : "#FFFFFF"; - } -} -class Speak extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "speak"); - this.disable = (0, _utils.getInteger)({ - data: attributes.disable, - defaultValue: 0, - validate: x => x === 1 - }); - this.id = attributes.id || ""; - this.priority = (0, _utils.getStringOption)(attributes.priority, ["custom", "caption", "name", "toolTip"]); - this.rid = attributes.rid || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Stipple extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "stipple", true); - this.id = attributes.id || ""; - this.rate = (0, _utils.getInteger)({ - data: attributes.rate, - defaultValue: 50, - validate: x => x >= 0 && x <= 100 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.color = null; - this.extras = null; - } - [_symbol_utils.$toStyle](bgColor) { - const alpha = this.rate / 100; - return _util.Util.makeHexColor(Math.round(bgColor.value.r * (1 - alpha) + this.value.r * alpha), Math.round(bgColor.value.g * (1 - alpha) + this.value.g * alpha), Math.round(bgColor.value.b * (1 - alpha) + this.value.b * alpha)); - } -} -class Subform extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "subform", true); - this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]); - this.allowMacro = (0, _utils.getInteger)({ - data: attributes.allowMacro, - defaultValue: 0, - validate: x => x === 1 - }); - this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); - this.colSpan = (0, _utils.getInteger)({ - data: attributes.colSpan, - defaultValue: 1, - validate: n => n >= 1 || n === -1 - }); - this.columnWidths = (attributes.columnWidths || "").trim().split(/\s+/).map(x => x === "-1" ? -1 : (0, _utils.getMeasurement)(x)); - this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; - this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); - this.id = attributes.id || ""; - this.layout = (0, _utils.getStringOption)(attributes.layout, ["position", "lr-tb", "rl-row", "rl-tb", "row", "table", "tb"]); - this.locale = attributes.locale || ""; - this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); - this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); - this.mergeMode = (0, _utils.getStringOption)(attributes.mergeMode, ["consumeData", "matchTemplate"]); - this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); - this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); - this.name = attributes.name || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.restoreState = (0, _utils.getStringOption)(attributes.restoreState, ["manual", "auto"]); - this.scope = (0, _utils.getStringOption)(attributes.scope, ["name", "none"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; - this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); - this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); - this.assist = null; - this.bind = null; - this.bookend = null; - this.border = null; - this.break = null; - this.calculate = null; - this.desc = null; - this.extras = null; - this.keep = null; - this.margin = null; - this.occur = null; - this.overflow = null; - this.pageSet = null; - this.para = null; - this.traversal = null; - this.validate = null; - this.variables = null; - this.area = new _xfa_object.XFAObjectArray(); - this.breakAfter = new _xfa_object.XFAObjectArray(); - this.breakBefore = new _xfa_object.XFAObjectArray(); - this.connect = new _xfa_object.XFAObjectArray(); - this.draw = new _xfa_object.XFAObjectArray(); - this.event = new _xfa_object.XFAObjectArray(); - this.exObject = new _xfa_object.XFAObjectArray(); - this.exclGroup = new _xfa_object.XFAObjectArray(); - this.field = new _xfa_object.XFAObjectArray(); - this.proto = new _xfa_object.XFAObjectArray(); - this.setProperty = new _xfa_object.XFAObjectArray(); - this.subform = new _xfa_object.XFAObjectArray(); - this.subformSet = new _xfa_object.XFAObjectArray(); - } - [_symbol_utils.$getSubformParent]() { - const parent = this[_symbol_utils.$getParent](); - if (parent instanceof SubformSet) { - return parent[_symbol_utils.$getSubformParent](); - } - return parent; - } - [_symbol_utils.$isBindable]() { - return true; - } - [_symbol_utils.$isThereMoreWidth]() { - return this.layout.endsWith("-tb") && this[_symbol_utils.$extra].attempt === 0 && this[_symbol_utils.$extra].numberInLine > 0 || this[_symbol_utils.$getParent]()[_symbol_utils.$isThereMoreWidth](); - } - *[_symbol_utils.$getContainedChildren]() { - yield* getContainedChildren(this); - } - [_symbol_utils.$flushHTML]() { - return (0, _layout.flushHTML)(this); - } - [_symbol_utils.$addHTML](html, bbox) { - (0, _layout.addHTML)(this, html, bbox); - } - [_symbol_utils.$getAvailableSpace]() { - return (0, _layout.getAvailableSpace)(this); - } - [_symbol_utils.$isSplittable]() { - const parent = this[_symbol_utils.$getSubformParent](); - if (!parent[_symbol_utils.$isSplittable]()) { - return false; - } - if (this[_symbol_utils.$extra]._isSplittable !== undefined) { - return this[_symbol_utils.$extra]._isSplittable; - } - if (this.layout === "position" || this.layout.includes("row")) { - this[_symbol_utils.$extra]._isSplittable = false; - return false; - } - if (this.keep && this.keep.intact !== "none") { - this[_symbol_utils.$extra]._isSplittable = false; - return false; - } - if (parent.layout?.endsWith("-tb") && parent[_symbol_utils.$extra].numberInLine !== 0) { - return false; - } - this[_symbol_utils.$extra]._isSplittable = true; - return true; - } - [_symbol_utils.$toHTML](availableSpace) { - setTabIndex(this); - if (this.break) { - if (this.break.after !== "auto" || this.break.afterTarget !== "") { - const node = new BreakAfter({ - targetType: this.break.after, - target: this.break.afterTarget, - startNew: this.break.startNew.toString() - }); - node[_symbol_utils.$globalData] = this[_symbol_utils.$globalData]; - this[_symbol_utils.$appendChild](node); - this.breakAfter.push(node); - } - if (this.break.before !== "auto" || this.break.beforeTarget !== "") { - const node = new BreakBefore({ - targetType: this.break.before, - target: this.break.beforeTarget, - startNew: this.break.startNew.toString() - }); - node[_symbol_utils.$globalData] = this[_symbol_utils.$globalData]; - this[_symbol_utils.$appendChild](node); - this.breakBefore.push(node); - } - if (this.break.overflowTarget !== "") { - const node = new Overflow({ - target: this.break.overflowTarget, - leader: this.break.overflowLeader, - trailer: this.break.overflowTrailer - }); - node[_symbol_utils.$globalData] = this[_symbol_utils.$globalData]; - this[_symbol_utils.$appendChild](node); - this.overflow.push(node); - } - this[_symbol_utils.$removeChild](this.break); - this.break = null; - } - if (this.presence === "hidden" || this.presence === "inactive") { - return _utils.HTMLResult.EMPTY; - } - if (this.breakBefore.children.length > 1 || this.breakAfter.children.length > 1) { - (0, _util.warn)("XFA - Several breakBefore or breakAfter in subforms: please file a bug."); - } - if (this.breakBefore.children.length >= 1) { - const breakBefore = this.breakBefore.children[0]; - if (handleBreak(breakBefore)) { - return _utils.HTMLResult.breakNode(breakBefore); - } - } - if (this[_symbol_utils.$extra]?.afterBreakAfter) { - return _utils.HTMLResult.EMPTY; - } - (0, _html_utils.fixDimensions)(this); - const children = []; - const attributes = { - id: this[_symbol_utils.$uid], - class: [] - }; - (0, _html_utils.setAccess)(this, attributes.class); - if (!this[_symbol_utils.$extra]) { - this[_symbol_utils.$extra] = Object.create(null); - } - Object.assign(this[_symbol_utils.$extra], { - children, - line: null, - attributes, - attempt: 0, - numberInLine: 0, - availableSpace: { - width: Math.min(this.w || Infinity, availableSpace.width), - height: Math.min(this.h || Infinity, availableSpace.height) - }, - width: 0, - height: 0, - prevHeight: 0, - currentWidth: 0 - }); - const root = this[_symbol_utils.$getTemplateRoot](); - const savedNoLayoutFailure = root[_symbol_utils.$extra].noLayoutFailure; - const isSplittable = this[_symbol_utils.$isSplittable](); - if (!isSplittable) { - setFirstUnsplittable(this); - } - if (!(0, _layout.checkDimensions)(this, availableSpace)) { - return _utils.HTMLResult.FAILURE; - } - const filter = new Set(["area", "draw", "exclGroup", "field", "subform", "subformSet"]); - if (this.layout.includes("row")) { - const columnWidths = this[_symbol_utils.$getSubformParent]().columnWidths; - if (Array.isArray(columnWidths) && columnWidths.length > 0) { - this[_symbol_utils.$extra].columnWidths = columnWidths; - this[_symbol_utils.$extra].currentColumn = 0; - } - } - const style = (0, _html_utils.toStyle)(this, "anchorType", "dimensions", "position", "presence", "border", "margin", "hAlign"); - const classNames = ["xfaSubform"]; - const cl = (0, _html_utils.layoutClass)(this); - if (cl) { - classNames.push(cl); - } - attributes.style = style; - attributes.class = classNames; - if (this.name) { - attributes.xfaName = this.name; - } - if (this.overflow) { - const overflowExtra = this.overflow[_symbol_utils.$getExtra](); - if (overflowExtra.addLeader) { - overflowExtra.addLeader = false; - handleOverflow(this, overflowExtra.leader, availableSpace); - } - } - this[_symbol_utils.$pushPara](); - const isLrTb = this.layout === "lr-tb" || this.layout === "rl-tb"; - const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1; - for (; this[_symbol_utils.$extra].attempt < maxRun; this[_symbol_utils.$extra].attempt++) { - if (isLrTb && this[_symbol_utils.$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) { - this[_symbol_utils.$extra].numberInLine = 0; - } - const result = this[_symbol_utils.$childrenToHTML]({ - filter, - include: true - }); - if (result.success) { - break; - } - if (result.isBreak()) { - this[_symbol_utils.$popPara](); - return result; - } - if (isLrTb && this[_symbol_utils.$extra].attempt === 0 && this[_symbol_utils.$extra].numberInLine === 0 && !root[_symbol_utils.$extra].noLayoutFailure) { - this[_symbol_utils.$extra].attempt = maxRun; - break; - } - } - this[_symbol_utils.$popPara](); - if (!isSplittable) { - unsetFirstUnsplittable(this); - } - root[_symbol_utils.$extra].noLayoutFailure = savedNoLayoutFailure; - if (this[_symbol_utils.$extra].attempt === maxRun) { - if (this.overflow) { - this[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].overflowNode = this.overflow; - } - if (!isSplittable) { - delete this[_symbol_utils.$extra]; - } - return _utils.HTMLResult.FAILURE; - } - if (this.overflow) { - const overflowExtra = this.overflow[_symbol_utils.$getExtra](); - if (overflowExtra.addTrailer) { - overflowExtra.addTrailer = false; - handleOverflow(this, overflowExtra.trailer, availableSpace); - } - } - let marginH = 0; - let marginV = 0; - if (this.margin) { - marginH = this.margin.leftInset + this.margin.rightInset; - marginV = this.margin.topInset + this.margin.bottomInset; - } - const width = Math.max(this[_symbol_utils.$extra].width + marginH, this.w || 0); - const height = Math.max(this[_symbol_utils.$extra].height + marginV, this.h || 0); - const bbox = [this.x, this.y, width, height]; - if (this.w === "") { - style.width = (0, _html_utils.measureToString)(width); - } - if (this.h === "") { - style.height = (0, _html_utils.measureToString)(height); - } - if ((style.width === "0px" || style.height === "0px") && children.length === 0) { - return _utils.HTMLResult.EMPTY; - } - const html = { - name: "div", - attributes, - children - }; - applyAssist(this, attributes); - const result = _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); - if (this.breakAfter.children.length >= 1) { - const breakAfter = this.breakAfter.children[0]; - if (handleBreak(breakAfter)) { - this[_symbol_utils.$extra].afterBreakAfter = result; - return _utils.HTMLResult.breakNode(breakAfter); - } - } - delete this[_symbol_utils.$extra]; - return result; - } -} -class SubformSet extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "subformSet", true); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.relation = (0, _utils.getStringOption)(attributes.relation, ["ordered", "choice", "unordered"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.bookend = null; - this.break = null; - this.desc = null; - this.extras = null; - this.occur = null; - this.overflow = null; - this.breakAfter = new _xfa_object.XFAObjectArray(); - this.breakBefore = new _xfa_object.XFAObjectArray(); - this.subform = new _xfa_object.XFAObjectArray(); - this.subformSet = new _xfa_object.XFAObjectArray(); - } - *[_symbol_utils.$getContainedChildren]() { - yield* getContainedChildren(this); - } - [_symbol_utils.$getSubformParent]() { - let parent = this[_symbol_utils.$getParent](); - while (!(parent instanceof Subform)) { - parent = parent[_symbol_utils.$getParent](); - } - return parent; - } - [_symbol_utils.$isBindable]() { - return true; - } -} -class SubjectDN extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "subjectDN"); - this.delimiter = attributes.delimiter || ","; - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - [_symbol_utils.$finalize]() { - this[_symbol_utils.$content] = new Map(this[_symbol_utils.$content].split(this.delimiter).map(kv => { - kv = kv.split("=", 2); - kv[0] = kv[0].trim(); - return kv; - })); - } -} -class SubjectDNs extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "subjectDNs", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.subjectDN = new _xfa_object.XFAObjectArray(); - } -} -class Submit extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "submit", true); - this.embedPDF = (0, _utils.getInteger)({ - data: attributes.embedPDF, - defaultValue: 0, - validate: x => x === 1 - }); - this.format = (0, _utils.getStringOption)(attributes.format, ["xdp", "formdata", "pdf", "urlencoded", "xfd", "xml"]); - this.id = attributes.id || ""; - this.target = attributes.target || ""; - this.textEncoding = (0, _utils.getKeyword)({ - data: attributes.textEncoding ? attributes.textEncoding.toLowerCase() : "", - defaultValue: "", - validate: k => ["utf-8", "big-five", "fontspecific", "gbk", "gb-18030", "gb-2312", "ksc-5601", "none", "shift-jis", "ucs-2", "utf-16"].includes(k) || k.match(/iso-8859-\d{2}/) - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.xdpContent = attributes.xdpContent || ""; - this.encrypt = null; - this.encryptData = new _xfa_object.XFAObjectArray(); - this.signData = new _xfa_object.XFAObjectArray(); - } -} -class Template extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "template", true); - this.baseProfile = (0, _utils.getStringOption)(attributes.baseProfile, ["full", "interactiveForms"]); - this.extras = null; - this.subform = new _xfa_object.XFAObjectArray(); - } - [_symbol_utils.$finalize]() { - if (this.subform.children.length === 0) { - (0, _util.warn)("XFA - No subforms in template node."); - } - if (this.subform.children.length >= 2) { - (0, _util.warn)("XFA - Several subforms in template node: please file a bug."); - } - this[_symbol_utils.$tabIndex] = DEFAULT_TAB_INDEX; - } - [_symbol_utils.$isSplittable]() { - return true; - } - [_symbol_utils.$searchNode](expr, container) { - if (expr.startsWith("#")) { - return [this[_symbol_utils.$ids].get(expr.slice(1))]; - } - return (0, _som.searchNode)(this, container, expr, true, true); - } - *[_symbol_utils.$toPages]() { - if (!this.subform.children.length) { - return _utils.HTMLResult.success({ - name: "div", - children: [] - }); - } - this[_symbol_utils.$extra] = { - overflowNode: null, - firstUnsplittable: null, - currentContentArea: null, - currentPageArea: null, - noLayoutFailure: false, - pageNumber: 1, - pagePosition: "first", - oddOrEven: "odd", - blankOrNotBlank: "nonBlank", - paraStack: [] - }; - const root = this.subform.children[0]; - root.pageSet[_symbol_utils.$cleanPage](); - const pageAreas = root.pageSet.pageArea.children; - const mainHtml = { - name: "div", - children: [] - }; - let pageArea = null; - let breakBefore = null; - let breakBeforeTarget = null; - if (root.breakBefore.children.length >= 1) { - breakBefore = root.breakBefore.children[0]; - breakBeforeTarget = breakBefore.target; - } else if (root.subform.children.length >= 1 && root.subform.children[0].breakBefore.children.length >= 1) { - breakBefore = root.subform.children[0].breakBefore.children[0]; - breakBeforeTarget = breakBefore.target; - } else if (root.break?.beforeTarget) { - breakBefore = root.break; - breakBeforeTarget = breakBefore.beforeTarget; - } else if (root.subform.children.length >= 1 && root.subform.children[0].break?.beforeTarget) { - breakBefore = root.subform.children[0].break; - breakBeforeTarget = breakBefore.beforeTarget; - } - if (breakBefore) { - const target = this[_symbol_utils.$searchNode](breakBeforeTarget, breakBefore[_symbol_utils.$getParent]()); - if (target instanceof PageArea) { - pageArea = target; - breakBefore[_symbol_utils.$extra] = {}; - } - } - if (!pageArea) { - pageArea = pageAreas[0]; - } - pageArea[_symbol_utils.$extra] = { - numberOfUse: 1 - }; - const pageAreaParent = pageArea[_symbol_utils.$getParent](); - pageAreaParent[_symbol_utils.$extra] = { - numberOfUse: 1, - pageIndex: pageAreaParent.pageArea.children.indexOf(pageArea), - pageSetIndex: 0 - }; - let targetPageArea; - let leader = null; - let trailer = null; - let hasSomething = true; - let hasSomethingCounter = 0; - let startIndex = 0; - while (true) { - if (!hasSomething) { - mainHtml.children.pop(); - if (++hasSomethingCounter === MAX_EMPTY_PAGES) { - (0, _util.warn)("XFA - Something goes wrong: please file a bug."); - return mainHtml; - } - } else { - hasSomethingCounter = 0; - } - targetPageArea = null; - this[_symbol_utils.$extra].currentPageArea = pageArea; - const page = pageArea[_symbol_utils.$toHTML]().html; - mainHtml.children.push(page); - if (leader) { - this[_symbol_utils.$extra].noLayoutFailure = true; - page.children.push(leader[_symbol_utils.$toHTML](pageArea[_symbol_utils.$extra].space).html); - leader = null; - } - if (trailer) { - this[_symbol_utils.$extra].noLayoutFailure = true; - page.children.push(trailer[_symbol_utils.$toHTML](pageArea[_symbol_utils.$extra].space).html); - trailer = null; - } - const contentAreas = pageArea.contentArea.children; - const htmlContentAreas = page.children.filter(node => node.attributes.class.includes("xfaContentarea")); - hasSomething = false; - this[_symbol_utils.$extra].firstUnsplittable = null; - this[_symbol_utils.$extra].noLayoutFailure = false; - const flush = index => { - const html = root[_symbol_utils.$flushHTML](); - if (html) { - hasSomething ||= html.children?.length > 0; - htmlContentAreas[index].children.push(html); - } - }; - for (let i = startIndex, ii = contentAreas.length; i < ii; i++) { - const contentArea = this[_symbol_utils.$extra].currentContentArea = contentAreas[i]; - const space = { - width: contentArea.w, - height: contentArea.h - }; - startIndex = 0; - if (leader) { - htmlContentAreas[i].children.push(leader[_symbol_utils.$toHTML](space).html); - leader = null; - } - if (trailer) { - htmlContentAreas[i].children.push(trailer[_symbol_utils.$toHTML](space).html); - trailer = null; - } - const html = root[_symbol_utils.$toHTML](space); - if (html.success) { - if (html.html) { - hasSomething ||= html.html.children?.length > 0; - htmlContentAreas[i].children.push(html.html); - } else if (!hasSomething && mainHtml.children.length > 1) { - mainHtml.children.pop(); - } - return mainHtml; - } - if (html.isBreak()) { - const node = html.breakNode; - flush(i); - if (node.targetType === "auto") { - continue; - } - if (node.leader) { - leader = this[_symbol_utils.$searchNode](node.leader, node[_symbol_utils.$getParent]()); - leader = leader ? leader[0] : null; - } - if (node.trailer) { - trailer = this[_symbol_utils.$searchNode](node.trailer, node[_symbol_utils.$getParent]()); - trailer = trailer ? trailer[0] : null; - } - if (node.targetType === "pageArea") { - targetPageArea = node[_symbol_utils.$extra].target; - i = Infinity; - } else if (!node[_symbol_utils.$extra].target) { - i = node[_symbol_utils.$extra].index; - } else { - targetPageArea = node[_symbol_utils.$extra].target; - startIndex = node[_symbol_utils.$extra].index + 1; - i = Infinity; - } - continue; - } - if (this[_symbol_utils.$extra].overflowNode) { - const node = this[_symbol_utils.$extra].overflowNode; - this[_symbol_utils.$extra].overflowNode = null; - const overflowExtra = node[_symbol_utils.$getExtra](); - const target = overflowExtra.target; - overflowExtra.addLeader = overflowExtra.leader !== null; - overflowExtra.addTrailer = overflowExtra.trailer !== null; - flush(i); - const currentIndex = i; - i = Infinity; - if (target instanceof PageArea) { - targetPageArea = target; - } else if (target instanceof ContentArea) { - const index = contentAreas.indexOf(target); - if (index !== -1) { - if (index > currentIndex) { - i = index - 1; - } else { - startIndex = index; - } - } else { - targetPageArea = target[_symbol_utils.$getParent](); - startIndex = targetPageArea.contentArea.children.indexOf(target); - } - } - continue; - } - flush(i); - } - this[_symbol_utils.$extra].pageNumber += 1; - if (targetPageArea) { - if (targetPageArea[_symbol_utils.$isUsable]()) { - targetPageArea[_symbol_utils.$extra].numberOfUse += 1; - } else { - targetPageArea = null; - } - } - pageArea = targetPageArea || pageArea[_symbol_utils.$getNextPage](); - yield null; - } - } -} -exports.Template = Template; -class Text extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "text"); - this.id = attributes.id || ""; - this.maxChars = (0, _utils.getInteger)({ - data: attributes.maxChars, - defaultValue: 0, - validate: x => x >= 0 - }); - this.name = attributes.name || ""; - this.rid = attributes.rid || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - [_symbol_utils.$acceptWhitespace]() { - return true; - } - [_symbol_utils.$onChild](child) { - if (child[_symbol_utils.$namespaceId] === _namespaces.NamespaceIds.xhtml.id) { - this[_symbol_utils.$content] = child; - return true; - } - (0, _util.warn)(`XFA - Invalid content in Text: ${child[_symbol_utils.$nodeName]}.`); - return false; - } - [_symbol_utils.$onText](str) { - if (this[_symbol_utils.$content] instanceof _xfa_object.XFAObject) { - return; - } - super[_symbol_utils.$onText](str); - } - [_symbol_utils.$finalize]() { - if (typeof this[_symbol_utils.$content] === "string") { - this[_symbol_utils.$content] = this[_symbol_utils.$content].replaceAll("\r\n", "\n"); - } - } - [_symbol_utils.$getExtra]() { - if (typeof this[_symbol_utils.$content] === "string") { - return this[_symbol_utils.$content].split(/[\u2029\u2028\n]/).reduce((acc, line) => { - if (line) { - acc.push(line); - } - return acc; - }, []).join("\n"); - } - return this[_symbol_utils.$content][_symbol_utils.$text](); - } - [_symbol_utils.$toHTML](availableSpace) { - if (typeof this[_symbol_utils.$content] === "string") { - const html = valueToHtml(this[_symbol_utils.$content]).html; - if (this[_symbol_utils.$content].includes("\u2029")) { - html.name = "div"; - html.children = []; - this[_symbol_utils.$content].split("\u2029").map(para => para.split(/[\u2028\n]/).reduce((acc, line) => { - acc.push({ - name: "span", - value: line - }, { - name: "br" - }); - return acc; - }, [])).forEach(lines => { - html.children.push({ - name: "p", - children: lines - }); - }); - } else if (/[\u2028\n]/.test(this[_symbol_utils.$content])) { - html.name = "div"; - html.children = []; - this[_symbol_utils.$content].split(/[\u2028\n]/).forEach(line => { - html.children.push({ - name: "span", - value: line - }, { - name: "br" - }); - }); - } - return _utils.HTMLResult.success(html); - } - return this[_symbol_utils.$content][_symbol_utils.$toHTML](availableSpace); - } -} -exports.Text = Text; -class TextEdit extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "textEdit", true); - this.allowRichText = (0, _utils.getInteger)({ - data: attributes.allowRichText, - defaultValue: 0, - validate: x => x === 1 - }); - this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); - this.id = attributes.id || ""; - this.multiLine = (0, _utils.getInteger)({ - data: attributes.multiLine, - defaultValue: "", - validate: x => x === 0 || x === 1 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.vScrollPolicy = (0, _utils.getStringOption)(attributes.vScrollPolicy, ["auto", "off", "on"]); - this.border = null; - this.comb = null; - this.extras = null; - this.margin = null; - } - [_symbol_utils.$toHTML](availableSpace) { - const style = (0, _html_utils.toStyle)(this, "border", "font", "margin"); - let html; - const field = this[_symbol_utils.$getParent]()[_symbol_utils.$getParent](); - if (this.multiLine === "") { - this.multiLine = field instanceof Draw ? 1 : 0; - } - if (this.multiLine === 1) { - html = { - name: "textarea", - attributes: { - dataId: field[_symbol_utils.$data]?.[_symbol_utils.$uid] || field[_symbol_utils.$uid], - fieldId: field[_symbol_utils.$uid], - class: ["xfaTextfield"], - style, - "aria-label": ariaLabel(field), - "aria-required": false - } - }; - } else { - html = { - name: "input", - attributes: { - type: "text", - dataId: field[_symbol_utils.$data]?.[_symbol_utils.$uid] || field[_symbol_utils.$uid], - fieldId: field[_symbol_utils.$uid], - class: ["xfaTextfield"], - style, - "aria-label": ariaLabel(field), - "aria-required": false - } - }; - } - if (isRequired(field)) { - html.attributes["aria-required"] = true; - html.attributes.required = true; - } - return _utils.HTMLResult.success({ - name: "label", - attributes: { - class: ["xfaLabel"] - }, - children: [html] - }); - } -} -class Time extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "time"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - [_symbol_utils.$finalize]() { - const date = this[_symbol_utils.$content].trim(); - this[_symbol_utils.$content] = date ? new Date(date) : null; - } - [_symbol_utils.$toHTML](availableSpace) { - return valueToHtml(this[_symbol_utils.$content] ? this[_symbol_utils.$content].toString() : ""); - } -} -class TimeStamp extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "timeStamp"); - this.id = attributes.id || ""; - this.server = attributes.server || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class ToolTip extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "toolTip"); - this.id = attributes.id || ""; - this.rid = attributes.rid || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Traversal extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "traversal", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.traverse = new _xfa_object.XFAObjectArray(); - } -} -class Traverse extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "traverse", true); - this.id = attributes.id || ""; - this.operation = (0, _utils.getStringOption)(attributes.operation, ["next", "back", "down", "first", "left", "right", "up"]); - this.ref = attributes.ref || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.script = null; - } - get name() { - return this.operation; - } - [_symbol_utils.$isTransparent]() { - return false; - } -} -class Ui extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "ui", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.picture = null; - this.barcode = null; - this.button = null; - this.checkButton = null; - this.choiceList = null; - this.dateTimeEdit = null; - this.defaultUi = null; - this.imageEdit = null; - this.numericEdit = null; - this.passwordEdit = null; - this.signature = null; - this.textEdit = null; - } - [_symbol_utils.$getExtra]() { - if (this[_symbol_utils.$extra] === undefined) { - for (const name of Object.getOwnPropertyNames(this)) { - if (name === "extras" || name === "picture") { - continue; - } - const obj = this[name]; - if (!(obj instanceof _xfa_object.XFAObject)) { - continue; - } - this[_symbol_utils.$extra] = obj; - return obj; - } - this[_symbol_utils.$extra] = null; - } - return this[_symbol_utils.$extra]; - } - [_symbol_utils.$toHTML](availableSpace) { - const obj = this[_symbol_utils.$getExtra](); - if (obj) { - return obj[_symbol_utils.$toHTML](availableSpace); - } - return _utils.HTMLResult.EMPTY; - } -} -class Validate extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "validate", true); - this.formatTest = (0, _utils.getStringOption)(attributes.formatTest, ["warning", "disabled", "error"]); - this.id = attributes.id || ""; - this.nullTest = (0, _utils.getStringOption)(attributes.nullTest, ["disabled", "error", "warning"]); - this.scriptTest = (0, _utils.getStringOption)(attributes.scriptTest, ["error", "disabled", "warning"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.message = null; - this.picture = null; - this.script = null; - } -} -class Value extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "value", true); - this.id = attributes.id || ""; - this.override = (0, _utils.getInteger)({ - data: attributes.override, - defaultValue: 0, - validate: x => x === 1 - }); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.arc = null; - this.boolean = null; - this.date = null; - this.dateTime = null; - this.decimal = null; - this.exData = null; - this.float = null; - this.image = null; - this.integer = null; - this.line = null; - this.rectangle = null; - this.text = null; - this.time = null; - } - [_symbol_utils.$setValue](value) { - const parent = this[_symbol_utils.$getParent](); - if (parent instanceof Field) { - if (parent.ui?.imageEdit) { - if (!this.image) { - this.image = new Image({}); - this[_symbol_utils.$appendChild](this.image); - } - this.image[_symbol_utils.$content] = value[_symbol_utils.$content]; - return; - } - } - const valueName = value[_symbol_utils.$nodeName]; - if (this[valueName] !== null) { - this[valueName][_symbol_utils.$content] = value[_symbol_utils.$content]; - return; - } - for (const name of Object.getOwnPropertyNames(this)) { - const obj = this[name]; - if (obj instanceof _xfa_object.XFAObject) { - this[name] = null; - this[_symbol_utils.$removeChild](obj); - } - } - this[value[_symbol_utils.$nodeName]] = value; - this[_symbol_utils.$appendChild](value); - } - [_symbol_utils.$text]() { - if (this.exData) { - if (typeof this.exData[_symbol_utils.$content] === "string") { - return this.exData[_symbol_utils.$content].trim(); - } - return this.exData[_symbol_utils.$content][_symbol_utils.$text]().trim(); - } - for (const name of Object.getOwnPropertyNames(this)) { - if (name === "image") { - continue; - } - const obj = this[name]; - if (obj instanceof _xfa_object.XFAObject) { - return (obj[_symbol_utils.$content] || "").toString().trim(); - } - } - return null; - } - [_symbol_utils.$toHTML](availableSpace) { - for (const name of Object.getOwnPropertyNames(this)) { - const obj = this[name]; - if (!(obj instanceof _xfa_object.XFAObject)) { - continue; - } - return obj[_symbol_utils.$toHTML](availableSpace); - } - return _utils.HTMLResult.EMPTY; - } -} -exports.Value = Value; -class Variables extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "variables", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.boolean = new _xfa_object.XFAObjectArray(); - this.date = new _xfa_object.XFAObjectArray(); - this.dateTime = new _xfa_object.XFAObjectArray(); - this.decimal = new _xfa_object.XFAObjectArray(); - this.exData = new _xfa_object.XFAObjectArray(); - this.float = new _xfa_object.XFAObjectArray(); - this.image = new _xfa_object.XFAObjectArray(); - this.integer = new _xfa_object.XFAObjectArray(); - this.manifest = new _xfa_object.XFAObjectArray(); - this.script = new _xfa_object.XFAObjectArray(); - this.text = new _xfa_object.XFAObjectArray(); - this.time = new _xfa_object.XFAObjectArray(); - } - [_symbol_utils.$isTransparent]() { - return true; - } -} -class TemplateNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (TemplateNamespace.hasOwnProperty(name)) { - const node = TemplateNamespace[name](attributes); - node[_symbol_utils.$setSetAttributes](attributes); - return node; - } - return undefined; - } - static appearanceFilter(attrs) { - return new AppearanceFilter(attrs); - } - static arc(attrs) { - return new Arc(attrs); - } - static area(attrs) { - return new Area(attrs); - } - static assist(attrs) { - return new Assist(attrs); - } - static barcode(attrs) { - return new Barcode(attrs); - } - static bind(attrs) { - return new Bind(attrs); - } - static bindItems(attrs) { - return new BindItems(attrs); - } - static bookend(attrs) { - return new Bookend(attrs); - } - static boolean(attrs) { - return new BooleanElement(attrs); - } - static border(attrs) { - return new Border(attrs); - } - static break(attrs) { - return new Break(attrs); - } - static breakAfter(attrs) { - return new BreakAfter(attrs); - } - static breakBefore(attrs) { - return new BreakBefore(attrs); - } - static button(attrs) { - return new Button(attrs); - } - static calculate(attrs) { - return new Calculate(attrs); - } - static caption(attrs) { - return new Caption(attrs); - } - static certificate(attrs) { - return new Certificate(attrs); - } - static certificates(attrs) { - return new Certificates(attrs); - } - static checkButton(attrs) { - return new CheckButton(attrs); - } - static choiceList(attrs) { - return new ChoiceList(attrs); - } - static color(attrs) { - return new Color(attrs); - } - static comb(attrs) { - return new Comb(attrs); - } - static connect(attrs) { - return new Connect(attrs); - } - static contentArea(attrs) { - return new ContentArea(attrs); - } - static corner(attrs) { - return new Corner(attrs); - } - static date(attrs) { - return new DateElement(attrs); - } - static dateTime(attrs) { - return new DateTime(attrs); - } - static dateTimeEdit(attrs) { - return new DateTimeEdit(attrs); - } - static decimal(attrs) { - return new Decimal(attrs); - } - static defaultUi(attrs) { - return new DefaultUi(attrs); - } - static desc(attrs) { - return new Desc(attrs); - } - static digestMethod(attrs) { - return new DigestMethod(attrs); - } - static digestMethods(attrs) { - return new DigestMethods(attrs); - } - static draw(attrs) { - return new Draw(attrs); - } - static edge(attrs) { - return new Edge(attrs); - } - static encoding(attrs) { - return new Encoding(attrs); - } - static encodings(attrs) { - return new Encodings(attrs); - } - static encrypt(attrs) { - return new Encrypt(attrs); - } - static encryptData(attrs) { - return new EncryptData(attrs); - } - static encryption(attrs) { - return new Encryption(attrs); - } - static encryptionMethod(attrs) { - return new EncryptionMethod(attrs); - } - static encryptionMethods(attrs) { - return new EncryptionMethods(attrs); - } - static event(attrs) { - return new Event(attrs); - } - static exData(attrs) { - return new ExData(attrs); - } - static exObject(attrs) { - return new ExObject(attrs); - } - static exclGroup(attrs) { - return new ExclGroup(attrs); - } - static execute(attrs) { - return new Execute(attrs); - } - static extras(attrs) { - return new Extras(attrs); - } - static field(attrs) { - return new Field(attrs); - } - static fill(attrs) { - return new Fill(attrs); - } - static filter(attrs) { - return new Filter(attrs); - } - static float(attrs) { - return new Float(attrs); - } - static font(attrs) { - return new Font(attrs); - } - static format(attrs) { - return new Format(attrs); - } - static handler(attrs) { - return new Handler(attrs); - } - static hyphenation(attrs) { - return new Hyphenation(attrs); - } - static image(attrs) { - return new Image(attrs); - } - static imageEdit(attrs) { - return new ImageEdit(attrs); - } - static integer(attrs) { - return new Integer(attrs); - } - static issuers(attrs) { - return new Issuers(attrs); - } - static items(attrs) { - return new Items(attrs); - } - static keep(attrs) { - return new Keep(attrs); - } - static keyUsage(attrs) { - return new KeyUsage(attrs); - } - static line(attrs) { - return new Line(attrs); - } - static linear(attrs) { - return new Linear(attrs); - } - static lockDocument(attrs) { - return new LockDocument(attrs); - } - static manifest(attrs) { - return new Manifest(attrs); - } - static margin(attrs) { - return new Margin(attrs); - } - static mdp(attrs) { - return new Mdp(attrs); - } - static medium(attrs) { - return new Medium(attrs); - } - static message(attrs) { - return new Message(attrs); - } - static numericEdit(attrs) { - return new NumericEdit(attrs); - } - static occur(attrs) { - return new Occur(attrs); - } - static oid(attrs) { - return new Oid(attrs); - } - static oids(attrs) { - return new Oids(attrs); - } - static overflow(attrs) { - return new Overflow(attrs); - } - static pageArea(attrs) { - return new PageArea(attrs); - } - static pageSet(attrs) { - return new PageSet(attrs); - } - static para(attrs) { - return new Para(attrs); - } - static passwordEdit(attrs) { - return new PasswordEdit(attrs); - } - static pattern(attrs) { - return new Pattern(attrs); - } - static picture(attrs) { - return new Picture(attrs); - } - static proto(attrs) { - return new Proto(attrs); - } - static radial(attrs) { - return new Radial(attrs); - } - static reason(attrs) { - return new Reason(attrs); - } - static reasons(attrs) { - return new Reasons(attrs); - } - static rectangle(attrs) { - return new Rectangle(attrs); - } - static ref(attrs) { - return new RefElement(attrs); - } - static script(attrs) { - return new Script(attrs); - } - static setProperty(attrs) { - return new SetProperty(attrs); - } - static signData(attrs) { - return new SignData(attrs); - } - static signature(attrs) { - return new Signature(attrs); - } - static signing(attrs) { - return new Signing(attrs); - } - static solid(attrs) { - return new Solid(attrs); - } - static speak(attrs) { - return new Speak(attrs); - } - static stipple(attrs) { - return new Stipple(attrs); - } - static subform(attrs) { - return new Subform(attrs); - } - static subformSet(attrs) { - return new SubformSet(attrs); - } - static subjectDN(attrs) { - return new SubjectDN(attrs); - } - static subjectDNs(attrs) { - return new SubjectDNs(attrs); - } - static submit(attrs) { - return new Submit(attrs); - } - static template(attrs) { - return new Template(attrs); - } - static text(attrs) { - return new Text(attrs); - } - static textEdit(attrs) { - return new TextEdit(attrs); - } - static time(attrs) { - return new Time(attrs); - } - static timeStamp(attrs) { - return new TimeStamp(attrs); - } - static toolTip(attrs) { - return new ToolTip(attrs); - } - static traversal(attrs) { - return new Traversal(attrs); - } - static traverse(attrs) { - return new Traverse(attrs); - } - static ui(attrs) { - return new Ui(attrs); - } - static validate(attrs) { - return new Validate(attrs); - } - static value(attrs) { - return new Value(attrs); - } - static variables(attrs) { - return new Variables(attrs); - } -} -exports.TemplateNamespace = TemplateNamespace; - -/***/ }), -/* 81 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.NamespaceIds = exports.$buildXFAObject = void 0; -const $buildXFAObject = Symbol(); -exports.$buildXFAObject = $buildXFAObject; -const NamespaceIds = { - config: { - id: 0, - check: ns => ns.startsWith("http://www.xfa.org/schema/xci/") - }, - connectionSet: { - id: 1, - check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-connection-set/") - }, - datasets: { - id: 2, - check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-data/") - }, - form: { - id: 3, - check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-form/") - }, - localeSet: { - id: 4, - check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-locale-set/") - }, - pdf: { - id: 5, - check: ns => ns === "http://ns.adobe.com/xdp/pdf/" - }, - signature: { - id: 6, - check: ns => ns === "http://www.w3.org/2000/09/xmldsig#" - }, - sourceSet: { - id: 7, - check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-source-set/") - }, - stylesheet: { - id: 8, - check: ns => ns === "http://www.w3.org/1999/XSL/Transform" - }, - template: { - id: 9, - check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-template/") - }, - xdc: { - id: 10, - check: ns => ns.startsWith("http://www.xfa.org/schema/xdc/") - }, - xdp: { - id: 11, - check: ns => ns === "http://ns.adobe.com/xdp/" - }, - xfdf: { - id: 12, - check: ns => ns === "http://ns.adobe.com/xfdf/" - }, - xhtml: { - id: 13, - check: ns => ns === "http://www.w3.org/1999/xhtml" - }, - xmpmeta: { - id: 14, - check: ns => ns === "http://ns.adobe.com/xmpmeta/" - } -}; -exports.NamespaceIds = NamespaceIds; - -/***/ }), -/* 82 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.addHTML = addHTML; -exports.checkDimensions = checkDimensions; -exports.flushHTML = flushHTML; -exports.getAvailableSpace = getAvailableSpace; -var _symbol_utils = __w_pdfjs_require__(78); -var _html_utils = __w_pdfjs_require__(83); -function createLine(node, children) { - return { - name: "div", - attributes: { - class: [node.layout === "lr-tb" ? "xfaLr" : "xfaRl"] - }, - children - }; -} -function flushHTML(node) { - if (!node[_symbol_utils.$extra]) { - return null; - } - const attributes = node[_symbol_utils.$extra].attributes; - const html = { - name: "div", - attributes, - children: node[_symbol_utils.$extra].children - }; - if (node[_symbol_utils.$extra].failingNode) { - const htmlFromFailing = node[_symbol_utils.$extra].failingNode[_symbol_utils.$flushHTML](); - if (htmlFromFailing) { - if (node.layout.endsWith("-tb")) { - html.children.push(createLine(node, [htmlFromFailing])); - } else { - html.children.push(htmlFromFailing); - } - } - } - if (html.children.length === 0) { - return null; - } - return html; -} -function addHTML(node, html, bbox) { - const extra = node[_symbol_utils.$extra]; - const availableSpace = extra.availableSpace; - const [x, y, w, h] = bbox; - switch (node.layout) { - case "position": - { - extra.width = Math.max(extra.width, x + w); - extra.height = Math.max(extra.height, y + h); - extra.children.push(html); - break; - } - case "lr-tb": - case "rl-tb": - if (!extra.line || extra.attempt === 1) { - extra.line = createLine(node, []); - extra.children.push(extra.line); - extra.numberInLine = 0; - } - extra.numberInLine += 1; - extra.line.children.push(html); - if (extra.attempt === 0) { - extra.currentWidth += w; - extra.height = Math.max(extra.height, extra.prevHeight + h); - } else { - extra.currentWidth = w; - extra.prevHeight = extra.height; - extra.height += h; - extra.attempt = 0; - } - extra.width = Math.max(extra.width, extra.currentWidth); - break; - case "rl-row": - case "row": - { - extra.children.push(html); - extra.width += w; - extra.height = Math.max(extra.height, h); - const height = (0, _html_utils.measureToString)(extra.height); - for (const child of extra.children) { - child.attributes.style.height = height; - } - break; - } - case "table": - { - extra.width = Math.min(availableSpace.width, Math.max(extra.width, w)); - extra.height += h; - extra.children.push(html); - break; - } - case "tb": - { - extra.width = Math.min(availableSpace.width, Math.max(extra.width, w)); - extra.height += h; - extra.children.push(html); - break; - } - } -} -function getAvailableSpace(node) { - const availableSpace = node[_symbol_utils.$extra].availableSpace; - const marginV = node.margin ? node.margin.topInset + node.margin.bottomInset : 0; - const marginH = node.margin ? node.margin.leftInset + node.margin.rightInset : 0; - switch (node.layout) { - case "lr-tb": - case "rl-tb": - if (node[_symbol_utils.$extra].attempt === 0) { - return { - width: availableSpace.width - marginH - node[_symbol_utils.$extra].currentWidth, - height: availableSpace.height - marginV - node[_symbol_utils.$extra].prevHeight - }; - } - return { - width: availableSpace.width - marginH, - height: availableSpace.height - marginV - node[_symbol_utils.$extra].height - }; - case "rl-row": - case "row": - const width = node[_symbol_utils.$extra].columnWidths.slice(node[_symbol_utils.$extra].currentColumn).reduce((a, x) => a + x); - return { - width, - height: availableSpace.height - marginH - }; - case "table": - case "tb": - return { - width: availableSpace.width - marginH, - height: availableSpace.height - marginV - node[_symbol_utils.$extra].height - }; - case "position": - default: - return availableSpace; - } -} -function getTransformedBBox(node) { - let w = node.w === "" ? NaN : node.w; - let h = node.h === "" ? NaN : node.h; - let [centerX, centerY] = [0, 0]; - switch (node.anchorType || "") { - case "bottomCenter": - [centerX, centerY] = [w / 2, h]; - break; - case "bottomLeft": - [centerX, centerY] = [0, h]; - break; - case "bottomRight": - [centerX, centerY] = [w, h]; - break; - case "middleCenter": - [centerX, centerY] = [w / 2, h / 2]; - break; - case "middleLeft": - [centerX, centerY] = [0, h / 2]; - break; - case "middleRight": - [centerX, centerY] = [w, h / 2]; - break; - case "topCenter": - [centerX, centerY] = [w / 2, 0]; - break; - case "topRight": - [centerX, centerY] = [w, 0]; - break; - } - let x, y; - switch (node.rotate || 0) { - case 0: - [x, y] = [-centerX, -centerY]; - break; - case 90: - [x, y] = [-centerY, centerX]; - [w, h] = [h, -w]; - break; - case 180: - [x, y] = [centerX, centerY]; - [w, h] = [-w, -h]; - break; - case 270: - [x, y] = [centerY, -centerX]; - [w, h] = [-h, w]; - break; - } - return [node.x + x + Math.min(0, w), node.y + y + Math.min(0, h), Math.abs(w), Math.abs(h)]; -} -function checkDimensions(node, space) { - if (node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].firstUnsplittable === null) { - return true; - } - if (node.w === 0 || node.h === 0) { - return true; - } - const ERROR = 2; - const parent = node[_symbol_utils.$getSubformParent](); - const attempt = parent[_symbol_utils.$extra]?.attempt || 0; - const [, y, w, h] = getTransformedBBox(node); - switch (parent.layout) { - case "lr-tb": - case "rl-tb": - if (attempt === 0) { - if (!node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].noLayoutFailure) { - if (node.h !== "" && Math.round(h - space.height) > ERROR) { - return false; - } - if (node.w !== "") { - if (Math.round(w - space.width) <= ERROR) { - return true; - } - if (parent[_symbol_utils.$extra].numberInLine === 0) { - return space.height > ERROR; - } - return false; - } - return space.width > ERROR; - } - if (node.w !== "") { - return Math.round(w - space.width) <= ERROR; - } - return space.width > ERROR; - } - if (node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].noLayoutFailure) { - return true; - } - if (node.h !== "" && Math.round(h - space.height) > ERROR) { - return false; - } - if (node.w === "" || Math.round(w - space.width) <= ERROR) { - return space.height > ERROR; - } - if (parent[_symbol_utils.$isThereMoreWidth]()) { - return false; - } - return space.height > ERROR; - case "table": - case "tb": - if (node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].noLayoutFailure) { - return true; - } - if (node.h !== "" && !node[_symbol_utils.$isSplittable]()) { - return Math.round(h - space.height) <= ERROR; - } - if (node.w === "" || Math.round(w - space.width) <= ERROR) { - return space.height > ERROR; - } - if (parent[_symbol_utils.$isThereMoreWidth]()) { - return false; - } - return space.height > ERROR; - case "position": - if (node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].noLayoutFailure) { - return true; - } - if (node.h === "" || Math.round(h + y - space.height) <= ERROR) { - return true; - } - const area = node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].currentContentArea; - return h + y > area.h; - case "rl-row": - case "row": - if (node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].noLayoutFailure) { - return true; - } - if (node.h !== "") { - return Math.round(h - space.height) <= ERROR; - } - return true; - default: - return true; - } -} - -/***/ }), -/* 83 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.computeBbox = computeBbox; -exports.createWrapper = createWrapper; -exports.fixDimensions = fixDimensions; -exports.fixTextIndent = fixTextIndent; -exports.fixURL = fixURL; -exports.isPrintOnly = isPrintOnly; -exports.layoutClass = layoutClass; -exports.layoutNode = layoutNode; -exports.measureToString = measureToString; -exports.setAccess = setAccess; -exports.setFontFamily = setFontFamily; -exports.setMinMaxDimensions = setMinMaxDimensions; -exports.setPara = setPara; -exports.toStyle = toStyle; -var _symbol_utils = __w_pdfjs_require__(78); -var _util = __w_pdfjs_require__(2); -var _utils = __w_pdfjs_require__(84); -var _fonts = __w_pdfjs_require__(85); -var _text = __w_pdfjs_require__(86); -var _xfa_object = __w_pdfjs_require__(87); -function measureToString(m) { - if (typeof m === "string") { - return "0px"; - } - return Number.isInteger(m) ? `${m}px` : `${m.toFixed(2)}px`; -} -const converters = { - anchorType(node, style) { - const parent = node[_symbol_utils.$getSubformParent](); - if (!parent || parent.layout && parent.layout !== "position") { - return; - } - if (!("transform" in style)) { - style.transform = ""; - } - switch (node.anchorType) { - case "bottomCenter": - style.transform += "translate(-50%, -100%)"; - break; - case "bottomLeft": - style.transform += "translate(0,-100%)"; - break; - case "bottomRight": - style.transform += "translate(-100%,-100%)"; - break; - case "middleCenter": - style.transform += "translate(-50%,-50%)"; - break; - case "middleLeft": - style.transform += "translate(0,-50%)"; - break; - case "middleRight": - style.transform += "translate(-100%,-50%)"; - break; - case "topCenter": - style.transform += "translate(-50%,0)"; - break; - case "topRight": - style.transform += "translate(-100%,0)"; - break; - } - }, - dimensions(node, style) { - const parent = node[_symbol_utils.$getSubformParent](); - let width = node.w; - const height = node.h; - if (parent.layout?.includes("row")) { - const extra = parent[_symbol_utils.$extra]; - const colSpan = node.colSpan; - let w; - if (colSpan === -1) { - w = extra.columnWidths.slice(extra.currentColumn).reduce((a, x) => a + x, 0); - extra.currentColumn = 0; - } else { - w = extra.columnWidths.slice(extra.currentColumn, extra.currentColumn + colSpan).reduce((a, x) => a + x, 0); - extra.currentColumn = (extra.currentColumn + node.colSpan) % extra.columnWidths.length; - } - if (!isNaN(w)) { - width = node.w = w; - } - } - style.width = width !== "" ? measureToString(width) : "auto"; - style.height = height !== "" ? measureToString(height) : "auto"; - }, - position(node, style) { - const parent = node[_symbol_utils.$getSubformParent](); - if (parent?.layout && parent.layout !== "position") { - return; - } - style.position = "absolute"; - style.left = measureToString(node.x); - style.top = measureToString(node.y); - }, - rotate(node, style) { - if (node.rotate) { - if (!("transform" in style)) { - style.transform = ""; - } - style.transform += `rotate(-${node.rotate}deg)`; - style.transformOrigin = "top left"; - } - }, - presence(node, style) { - switch (node.presence) { - case "invisible": - style.visibility = "hidden"; - break; - case "hidden": - case "inactive": - style.display = "none"; - break; - } - }, - hAlign(node, style) { - if (node[_symbol_utils.$nodeName] === "para") { - switch (node.hAlign) { - case "justifyAll": - style.textAlign = "justify-all"; - break; - case "radix": - style.textAlign = "left"; - break; - default: - style.textAlign = node.hAlign; - } - } else { - switch (node.hAlign) { - case "left": - style.alignSelf = "start"; - break; - case "center": - style.alignSelf = "center"; - break; - case "right": - style.alignSelf = "end"; - break; - } - } - }, - margin(node, style) { - if (node.margin) { - style.margin = node.margin[_symbol_utils.$toStyle]().margin; - } - } -}; -function setMinMaxDimensions(node, style) { - const parent = node[_symbol_utils.$getSubformParent](); - if (parent.layout === "position") { - if (node.minW > 0) { - style.minWidth = measureToString(node.minW); - } - if (node.maxW > 0) { - style.maxWidth = measureToString(node.maxW); - } - if (node.minH > 0) { - style.minHeight = measureToString(node.minH); - } - if (node.maxH > 0) { - style.maxHeight = measureToString(node.maxH); - } - } -} -function layoutText(text, xfaFont, margin, lineHeight, fontFinder, width) { - const measure = new _text.TextMeasure(xfaFont, margin, lineHeight, fontFinder); - if (typeof text === "string") { - measure.addString(text); - } else { - text[_symbol_utils.$pushGlyphs](measure); - } - return measure.compute(width); -} -function layoutNode(node, availableSpace) { - let height = null; - let width = null; - let isBroken = false; - if ((!node.w || !node.h) && node.value) { - let marginH = 0; - let marginV = 0; - if (node.margin) { - marginH = node.margin.leftInset + node.margin.rightInset; - marginV = node.margin.topInset + node.margin.bottomInset; - } - let lineHeight = null; - let margin = null; - if (node.para) { - margin = Object.create(null); - lineHeight = node.para.lineHeight === "" ? null : node.para.lineHeight; - margin.top = node.para.spaceAbove === "" ? 0 : node.para.spaceAbove; - margin.bottom = node.para.spaceBelow === "" ? 0 : node.para.spaceBelow; - margin.left = node.para.marginLeft === "" ? 0 : node.para.marginLeft; - margin.right = node.para.marginRight === "" ? 0 : node.para.marginRight; - } - let font = node.font; - if (!font) { - const root = node[_symbol_utils.$getTemplateRoot](); - let parent = node[_symbol_utils.$getParent](); - while (parent && parent !== root) { - if (parent.font) { - font = parent.font; - break; - } - parent = parent[_symbol_utils.$getParent](); - } - } - const maxWidth = (node.w || availableSpace.width) - marginH; - const fontFinder = node[_symbol_utils.$globalData].fontFinder; - if (node.value.exData && node.value.exData[_symbol_utils.$content] && node.value.exData.contentType === "text/html") { - const res = layoutText(node.value.exData[_symbol_utils.$content], font, margin, lineHeight, fontFinder, maxWidth); - width = res.width; - height = res.height; - isBroken = res.isBroken; - } else { - const text = node.value[_symbol_utils.$text](); - if (text) { - const res = layoutText(text, font, margin, lineHeight, fontFinder, maxWidth); - width = res.width; - height = res.height; - isBroken = res.isBroken; - } - } - if (width !== null && !node.w) { - width += marginH; - } - if (height !== null && !node.h) { - height += marginV; - } - } - return { - w: width, - h: height, - isBroken - }; -} -function computeBbox(node, html, availableSpace) { - let bbox; - if (node.w !== "" && node.h !== "") { - bbox = [node.x, node.y, node.w, node.h]; - } else { - if (!availableSpace) { - return null; - } - let width = node.w; - if (width === "") { - if (node.maxW === 0) { - const parent = node[_symbol_utils.$getSubformParent](); - width = parent.layout === "position" && parent.w !== "" ? 0 : node.minW; - } else { - width = Math.min(node.maxW, availableSpace.width); - } - html.attributes.style.width = measureToString(width); - } - let height = node.h; - if (height === "") { - if (node.maxH === 0) { - const parent = node[_symbol_utils.$getSubformParent](); - height = parent.layout === "position" && parent.h !== "" ? 0 : node.minH; - } else { - height = Math.min(node.maxH, availableSpace.height); - } - html.attributes.style.height = measureToString(height); - } - bbox = [node.x, node.y, width, height]; - } - return bbox; -} -function fixDimensions(node) { - const parent = node[_symbol_utils.$getSubformParent](); - if (parent.layout?.includes("row")) { - const extra = parent[_symbol_utils.$extra]; - const colSpan = node.colSpan; - let width; - if (colSpan === -1) { - width = extra.columnWidths.slice(extra.currentColumn).reduce((a, w) => a + w, 0); - } else { - width = extra.columnWidths.slice(extra.currentColumn, extra.currentColumn + colSpan).reduce((a, w) => a + w, 0); - } - if (!isNaN(width)) { - node.w = width; - } - } - if (parent.layout && parent.layout !== "position") { - node.x = node.y = 0; - } - if (node.layout === "table") { - if (node.w === "" && Array.isArray(node.columnWidths)) { - node.w = node.columnWidths.reduce((a, x) => a + x, 0); - } - } -} -function layoutClass(node) { - switch (node.layout) { - case "position": - return "xfaPosition"; - case "lr-tb": - return "xfaLrTb"; - case "rl-row": - return "xfaRlRow"; - case "rl-tb": - return "xfaRlTb"; - case "row": - return "xfaRow"; - case "table": - return "xfaTable"; - case "tb": - return "xfaTb"; - default: - return "xfaPosition"; - } -} -function toStyle(node, ...names) { - const style = Object.create(null); - for (const name of names) { - const value = node[name]; - if (value === null) { - continue; - } - if (converters.hasOwnProperty(name)) { - converters[name](node, style); - continue; - } - if (value instanceof _xfa_object.XFAObject) { - const newStyle = value[_symbol_utils.$toStyle](); - if (newStyle) { - Object.assign(style, newStyle); - } else { - (0, _util.warn)(`(DEBUG) - XFA - style for ${name} not implemented yet`); - } - } - } - return style; -} -function createWrapper(node, html) { - const { - attributes - } = html; - const { - style - } = attributes; - const wrapper = { - name: "div", - attributes: { - class: ["xfaWrapper"], - style: Object.create(null) - }, - children: [] - }; - attributes.class.push("xfaWrapped"); - if (node.border) { - const { - widths, - insets - } = node.border[_symbol_utils.$extra]; - let width, height; - let top = insets[0]; - let left = insets[3]; - const insetsH = insets[0] + insets[2]; - const insetsW = insets[1] + insets[3]; - switch (node.border.hand) { - case "even": - top -= widths[0] / 2; - left -= widths[3] / 2; - width = `calc(100% + ${(widths[1] + widths[3]) / 2 - insetsW}px)`; - height = `calc(100% + ${(widths[0] + widths[2]) / 2 - insetsH}px)`; - break; - case "left": - top -= widths[0]; - left -= widths[3]; - width = `calc(100% + ${widths[1] + widths[3] - insetsW}px)`; - height = `calc(100% + ${widths[0] + widths[2] - insetsH}px)`; - break; - case "right": - width = insetsW ? `calc(100% - ${insetsW}px)` : "100%"; - height = insetsH ? `calc(100% - ${insetsH}px)` : "100%"; - break; - } - const classNames = ["xfaBorder"]; - if (isPrintOnly(node.border)) { - classNames.push("xfaPrintOnly"); - } - const border = { - name: "div", - attributes: { - class: classNames, - style: { - top: `${top}px`, - left: `${left}px`, - width, - height - } - }, - children: [] - }; - for (const key of ["border", "borderWidth", "borderColor", "borderRadius", "borderStyle"]) { - if (style[key] !== undefined) { - border.attributes.style[key] = style[key]; - delete style[key]; - } - } - wrapper.children.push(border, html); - } else { - wrapper.children.push(html); - } - for (const key of ["background", "backgroundClip", "top", "left", "width", "height", "minWidth", "minHeight", "maxWidth", "maxHeight", "transform", "transformOrigin", "visibility"]) { - if (style[key] !== undefined) { - wrapper.attributes.style[key] = style[key]; - delete style[key]; - } - } - wrapper.attributes.style.position = style.position === "absolute" ? "absolute" : "relative"; - delete style.position; - if (style.alignSelf) { - wrapper.attributes.style.alignSelf = style.alignSelf; - delete style.alignSelf; - } - return wrapper; -} -function fixTextIndent(styles) { - const indent = (0, _utils.getMeasurement)(styles.textIndent, "0px"); - if (indent >= 0) { - return; - } - const align = styles.textAlign === "right" ? "right" : "left"; - const name = "padding" + (align === "left" ? "Left" : "Right"); - const padding = (0, _utils.getMeasurement)(styles[name], "0px"); - styles[name] = `${padding - indent}px`; -} -function setAccess(node, classNames) { - switch (node.access) { - case "nonInteractive": - classNames.push("xfaNonInteractive"); - break; - case "readOnly": - classNames.push("xfaReadOnly"); - break; - case "protected": - classNames.push("xfaDisabled"); - break; - } -} -function isPrintOnly(node) { - return node.relevant.length > 0 && !node.relevant[0].excluded && node.relevant[0].viewname === "print"; -} -function getCurrentPara(node) { - const stack = node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].paraStack; - return stack.length ? stack.at(-1) : null; -} -function setPara(node, nodeStyle, value) { - if (value.attributes.class?.includes("xfaRich")) { - if (nodeStyle) { - if (node.h === "") { - nodeStyle.height = "auto"; - } - if (node.w === "") { - nodeStyle.width = "auto"; - } - } - const para = getCurrentPara(node); - if (para) { - const valueStyle = value.attributes.style; - valueStyle.display = "flex"; - valueStyle.flexDirection = "column"; - switch (para.vAlign) { - case "top": - valueStyle.justifyContent = "start"; - break; - case "bottom": - valueStyle.justifyContent = "end"; - break; - case "middle": - valueStyle.justifyContent = "center"; - break; - } - const paraStyle = para[_symbol_utils.$toStyle](); - for (const [key, val] of Object.entries(paraStyle)) { - if (!(key in valueStyle)) { - valueStyle[key] = val; - } - } - } - } -} -function setFontFamily(xfaFont, node, fontFinder, style) { - if (!fontFinder) { - delete style.fontFamily; - return; - } - const name = (0, _utils.stripQuotes)(xfaFont.typeface); - style.fontFamily = `"${name}"`; - const typeface = fontFinder.find(name); - if (typeface) { - const { - fontFamily - } = typeface.regular.cssFontInfo; - if (fontFamily !== name) { - style.fontFamily = `"${fontFamily}"`; - } - const para = getCurrentPara(node); - if (para && para.lineHeight !== "") { - return; - } - if (style.lineHeight) { - return; - } - const pdfFont = (0, _fonts.selectFont)(xfaFont, typeface); - if (pdfFont) { - style.lineHeight = Math.max(1.2, pdfFont.lineHeight); - } - } -} -function fixURL(str) { - const absoluteUrl = (0, _util.createValidAbsoluteUrl)(str, null, { - addDefaultProtocol: true, - tryConvertEncoding: true - }); - return absoluteUrl ? absoluteUrl.href : null; -} - -/***/ }), -/* 84 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.HTMLResult = void 0; -exports.getBBox = getBBox; -exports.getColor = getColor; -exports.getFloat = getFloat; -exports.getInteger = getInteger; -exports.getKeyword = getKeyword; -exports.getMeasurement = getMeasurement; -exports.getRatio = getRatio; -exports.getRelevant = getRelevant; -exports.getStringOption = getStringOption; -exports.stripQuotes = stripQuotes; -var _util = __w_pdfjs_require__(2); -const dimConverters = { - pt: x => x, - cm: x => x / 2.54 * 72, - mm: x => x / (10 * 2.54) * 72, - in: x => x * 72, - px: x => x -}; -const measurementPattern = /([+-]?\d+\.?\d*)(.*)/; -function stripQuotes(str) { - if (str.startsWith("'") || str.startsWith('"')) { - return str.slice(1, -1); - } - return str; -} -function getInteger({ - data, - defaultValue, - validate -}) { - if (!data) { - return defaultValue; - } - data = data.trim(); - const n = parseInt(data, 10); - if (!isNaN(n) && validate(n)) { - return n; - } - return defaultValue; -} -function getFloat({ - data, - defaultValue, - validate -}) { - if (!data) { - return defaultValue; - } - data = data.trim(); - const n = parseFloat(data); - if (!isNaN(n) && validate(n)) { - return n; - } - return defaultValue; -} -function getKeyword({ - data, - defaultValue, - validate -}) { - if (!data) { - return defaultValue; - } - data = data.trim(); - if (validate(data)) { - return data; - } - return defaultValue; -} -function getStringOption(data, options) { - return getKeyword({ - data, - defaultValue: options[0], - validate: k => options.includes(k) - }); -} -function getMeasurement(str, def = "0") { - def ||= "0"; - if (!str) { - return getMeasurement(def); - } - const match = str.trim().match(measurementPattern); - if (!match) { - return getMeasurement(def); - } - const [, valueStr, unit] = match; - const value = parseFloat(valueStr); - if (isNaN(value)) { - return getMeasurement(def); - } - if (value === 0) { - return 0; - } - const conv = dimConverters[unit]; - if (conv) { - return conv(value); - } - return value; -} -function getRatio(data) { - if (!data) { - return { - num: 1, - den: 1 - }; - } - const ratio = data.trim().split(/\s*:\s*/).map(x => parseFloat(x)).filter(x => !isNaN(x)); - if (ratio.length === 1) { - ratio.push(1); - } - if (ratio.length === 0) { - return { - num: 1, - den: 1 - }; - } - const [num, den] = ratio; - return { - num, - den - }; -} -function getRelevant(data) { - if (!data) { - return []; - } - return data.trim().split(/\s+/).map(e => { - return { - excluded: e[0] === "-", - viewname: e.substring(1) - }; - }); -} -function getColor(data, def = [0, 0, 0]) { - let [r, g, b] = def; - if (!data) { - return { - r, - g, - b - }; - } - const color = data.trim().split(/\s*,\s*/).map(c => Math.min(Math.max(0, parseInt(c.trim(), 10)), 255)).map(c => isNaN(c) ? 0 : c); - if (color.length < 3) { - return { - r, - g, - b - }; - } - [r, g, b] = color; - return { - r, - g, - b - }; -} -function getBBox(data) { - const def = -1; - if (!data) { - return { - x: def, - y: def, - width: def, - height: def - }; - } - const bbox = data.trim().split(/\s*,\s*/).map(m => getMeasurement(m, "-1")); - if (bbox.length < 4 || bbox[2] < 0 || bbox[3] < 0) { - return { - x: def, - y: def, - width: def, - height: def - }; - } - const [x, y, width, height] = bbox; - return { - x, - y, - width, - height - }; -} -class HTMLResult { - static get FAILURE() { - return (0, _util.shadow)(this, "FAILURE", new HTMLResult(false, null, null, null)); - } - static get EMPTY() { - return (0, _util.shadow)(this, "EMPTY", new HTMLResult(true, null, null, null)); - } - constructor(success, html, bbox, breakNode) { - this.success = success; - this.html = html; - this.bbox = bbox; - this.breakNode = breakNode; - } - isBreak() { - return !!this.breakNode; - } - static breakNode(node) { - return new HTMLResult(false, null, null, node); - } - static success(html, bbox = null) { - return new HTMLResult(true, html, bbox, null); - } -} -exports.HTMLResult = HTMLResult; - -/***/ }), -/* 85 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FontFinder = void 0; -exports.getMetrics = getMetrics; -exports.selectFont = selectFont; -var _symbol_utils = __w_pdfjs_require__(78); -var _utils = __w_pdfjs_require__(84); -var _util = __w_pdfjs_require__(2); -class FontFinder { - constructor(pdfFonts) { - this.fonts = new Map(); - this.cache = new Map(); - this.warned = new Set(); - this.defaultFont = null; - this.add(pdfFonts); - } - add(pdfFonts, reallyMissingFonts = null) { - for (const pdfFont of pdfFonts) { - this.addPdfFont(pdfFont); - } - for (const pdfFont of this.fonts.values()) { - if (!pdfFont.regular) { - pdfFont.regular = pdfFont.italic || pdfFont.bold || pdfFont.bolditalic; - } - } - if (!reallyMissingFonts || reallyMissingFonts.size === 0) { - return; - } - const myriad = this.fonts.get("PdfJS-Fallback-PdfJS-XFA"); - for (const missing of reallyMissingFonts) { - this.fonts.set(missing, myriad); - } - } - addPdfFont(pdfFont) { - const cssFontInfo = pdfFont.cssFontInfo; - const name = cssFontInfo.fontFamily; - let font = this.fonts.get(name); - if (!font) { - font = Object.create(null); - this.fonts.set(name, font); - if (!this.defaultFont) { - this.defaultFont = font; - } - } - let property = ""; - const fontWeight = parseFloat(cssFontInfo.fontWeight); - if (parseFloat(cssFontInfo.italicAngle) !== 0) { - property = fontWeight >= 700 ? "bolditalic" : "italic"; - } else if (fontWeight >= 700) { - property = "bold"; - } - if (!property) { - if (pdfFont.name.includes("Bold") || pdfFont.psName?.includes("Bold")) { - property = "bold"; - } - if (pdfFont.name.includes("Italic") || pdfFont.name.endsWith("It") || pdfFont.psName?.includes("Italic") || pdfFont.psName?.endsWith("It")) { - property += "italic"; - } - } - if (!property) { - property = "regular"; - } - font[property] = pdfFont; - } - getDefault() { - return this.defaultFont; - } - find(fontName, mustWarn = true) { - let font = this.fonts.get(fontName) || this.cache.get(fontName); - if (font) { - return font; - } - const pattern = /,|-|_| |bolditalic|bold|italic|regular|it/gi; - let name = fontName.replaceAll(pattern, ""); - font = this.fonts.get(name); - if (font) { - this.cache.set(fontName, font); - return font; - } - name = name.toLowerCase(); - const maybe = []; - for (const [family, pdfFont] of this.fonts.entries()) { - if (family.replaceAll(pattern, "").toLowerCase().startsWith(name)) { - maybe.push(pdfFont); - } - } - if (maybe.length === 0) { - for (const [, pdfFont] of this.fonts.entries()) { - if (pdfFont.regular.name?.replaceAll(pattern, "").toLowerCase().startsWith(name)) { - maybe.push(pdfFont); - } - } - } - if (maybe.length === 0) { - name = name.replaceAll(/psmt|mt/gi, ""); - for (const [family, pdfFont] of this.fonts.entries()) { - if (family.replaceAll(pattern, "").toLowerCase().startsWith(name)) { - maybe.push(pdfFont); - } - } - } - if (maybe.length === 0) { - for (const pdfFont of this.fonts.values()) { - if (pdfFont.regular.name?.replaceAll(pattern, "").toLowerCase().startsWith(name)) { - maybe.push(pdfFont); - } - } - } - if (maybe.length >= 1) { - if (maybe.length !== 1 && mustWarn) { - (0, _util.warn)(`XFA - Too many choices to guess the correct font: ${fontName}`); - } - this.cache.set(fontName, maybe[0]); - return maybe[0]; - } - if (mustWarn && !this.warned.has(fontName)) { - this.warned.add(fontName); - (0, _util.warn)(`XFA - Cannot find the font: ${fontName}`); - } - return null; - } -} -exports.FontFinder = FontFinder; -function selectFont(xfaFont, typeface) { - if (xfaFont.posture === "italic") { - if (xfaFont.weight === "bold") { - return typeface.bolditalic; - } - return typeface.italic; - } else if (xfaFont.weight === "bold") { - return typeface.bold; - } - return typeface.regular; -} -function getMetrics(xfaFont, real = false) { - let pdfFont = null; - if (xfaFont) { - const name = (0, _utils.stripQuotes)(xfaFont.typeface); - const typeface = xfaFont[_symbol_utils.$globalData].fontFinder.find(name); - pdfFont = selectFont(xfaFont, typeface); - } - if (!pdfFont) { - return { - lineHeight: 12, - lineGap: 2, - lineNoGap: 10 - }; - } - const size = xfaFont.size || 10; - const lineHeight = pdfFont.lineHeight ? Math.max(real ? 0 : 1.2, pdfFont.lineHeight) : 1.2; - const lineGap = pdfFont.lineGap === undefined ? 0.2 : pdfFont.lineGap; - return { - lineHeight: lineHeight * size, - lineGap: lineGap * size, - lineNoGap: Math.max(1, lineHeight - lineGap) * size - }; -} - -/***/ }), -/* 86 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.TextMeasure = void 0; -var _fonts = __w_pdfjs_require__(85); -const WIDTH_FACTOR = 1.02; -class FontInfo { - constructor(xfaFont, margin, lineHeight, fontFinder) { - this.lineHeight = lineHeight; - this.paraMargin = margin || { - top: 0, - bottom: 0, - left: 0, - right: 0 - }; - if (!xfaFont) { - [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder); - return; - } - this.xfaFont = { - typeface: xfaFont.typeface, - posture: xfaFont.posture, - weight: xfaFont.weight, - size: xfaFont.size, - letterSpacing: xfaFont.letterSpacing - }; - const typeface = fontFinder.find(xfaFont.typeface); - if (!typeface) { - [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder); - return; - } - this.pdfFont = (0, _fonts.selectFont)(xfaFont, typeface); - if (!this.pdfFont) { - [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder); - } - } - defaultFont(fontFinder) { - const font = fontFinder.find("Helvetica", false) || fontFinder.find("Myriad Pro", false) || fontFinder.find("Arial", false) || fontFinder.getDefault(); - if (font?.regular) { - const pdfFont = font.regular; - const info = pdfFont.cssFontInfo; - const xfaFont = { - typeface: info.fontFamily, - posture: "normal", - weight: "normal", - size: 10, - letterSpacing: 0 - }; - return [pdfFont, xfaFont]; - } - const xfaFont = { - typeface: "Courier", - posture: "normal", - weight: "normal", - size: 10, - letterSpacing: 0 - }; - return [null, xfaFont]; - } -} -class FontSelector { - constructor(defaultXfaFont, defaultParaMargin, defaultLineHeight, fontFinder) { - this.fontFinder = fontFinder; - this.stack = [new FontInfo(defaultXfaFont, defaultParaMargin, defaultLineHeight, fontFinder)]; - } - pushData(xfaFont, margin, lineHeight) { - const lastFont = this.stack.at(-1); - for (const name of ["typeface", "posture", "weight", "size", "letterSpacing"]) { - if (!xfaFont[name]) { - xfaFont[name] = lastFont.xfaFont[name]; - } - } - for (const name of ["top", "bottom", "left", "right"]) { - if (isNaN(margin[name])) { - margin[name] = lastFont.paraMargin[name]; - } - } - const fontInfo = new FontInfo(xfaFont, margin, lineHeight || lastFont.lineHeight, this.fontFinder); - if (!fontInfo.pdfFont) { - fontInfo.pdfFont = lastFont.pdfFont; - } - this.stack.push(fontInfo); - } - popFont() { - this.stack.pop(); - } - topFont() { - return this.stack.at(-1); - } -} -class TextMeasure { - constructor(defaultXfaFont, defaultParaMargin, defaultLineHeight, fonts) { - this.glyphs = []; - this.fontSelector = new FontSelector(defaultXfaFont, defaultParaMargin, defaultLineHeight, fonts); - this.extraHeight = 0; - } - pushData(xfaFont, margin, lineHeight) { - this.fontSelector.pushData(xfaFont, margin, lineHeight); - } - popFont(xfaFont) { - return this.fontSelector.popFont(); - } - addPara() { - const lastFont = this.fontSelector.topFont(); - this.extraHeight += lastFont.paraMargin.top + lastFont.paraMargin.bottom; - } - addString(str) { - if (!str) { - return; - } - const lastFont = this.fontSelector.topFont(); - const fontSize = lastFont.xfaFont.size; - if (lastFont.pdfFont) { - const letterSpacing = lastFont.xfaFont.letterSpacing; - const pdfFont = lastFont.pdfFont; - const fontLineHeight = pdfFont.lineHeight || 1.2; - const lineHeight = lastFont.lineHeight || Math.max(1.2, fontLineHeight) * fontSize; - const lineGap = pdfFont.lineGap === undefined ? 0.2 : pdfFont.lineGap; - const noGap = fontLineHeight - lineGap; - const firstLineHeight = Math.max(1, noGap) * fontSize; - const scale = fontSize / 1000; - const fallbackWidth = pdfFont.defaultWidth || pdfFont.charsToGlyphs(" ")[0].width; - for (const line of str.split(/[\u2029\n]/)) { - const encodedLine = pdfFont.encodeString(line).join(""); - const glyphs = pdfFont.charsToGlyphs(encodedLine); - for (const glyph of glyphs) { - const width = glyph.width || fallbackWidth; - this.glyphs.push([width * scale + letterSpacing, lineHeight, firstLineHeight, glyph.unicode, false]); - } - this.glyphs.push([0, 0, 0, "\n", true]); - } - this.glyphs.pop(); - return; - } - for (const line of str.split(/[\u2029\n]/)) { - for (const char of line.split("")) { - this.glyphs.push([fontSize, 1.2 * fontSize, fontSize, char, false]); - } - this.glyphs.push([0, 0, 0, "\n", true]); - } - this.glyphs.pop(); - } - compute(maxWidth) { - let lastSpacePos = -1, - lastSpaceWidth = 0, - width = 0, - height = 0, - currentLineWidth = 0, - currentLineHeight = 0; - let isBroken = false; - let isFirstLine = true; - for (let i = 0, ii = this.glyphs.length; i < ii; i++) { - const [glyphWidth, lineHeight, firstLineHeight, char, isEOL] = this.glyphs[i]; - const isSpace = char === " "; - const glyphHeight = isFirstLine ? firstLineHeight : lineHeight; - if (isEOL) { - width = Math.max(width, currentLineWidth); - currentLineWidth = 0; - height += currentLineHeight; - currentLineHeight = glyphHeight; - lastSpacePos = -1; - lastSpaceWidth = 0; - isFirstLine = false; - continue; - } - if (isSpace) { - if (currentLineWidth + glyphWidth > maxWidth) { - width = Math.max(width, currentLineWidth); - currentLineWidth = 0; - height += currentLineHeight; - currentLineHeight = glyphHeight; - lastSpacePos = -1; - lastSpaceWidth = 0; - isBroken = true; - isFirstLine = false; - } else { - currentLineHeight = Math.max(glyphHeight, currentLineHeight); - lastSpaceWidth = currentLineWidth; - currentLineWidth += glyphWidth; - lastSpacePos = i; - } - continue; - } - if (currentLineWidth + glyphWidth > maxWidth) { - height += currentLineHeight; - currentLineHeight = glyphHeight; - if (lastSpacePos !== -1) { - i = lastSpacePos; - width = Math.max(width, lastSpaceWidth); - currentLineWidth = 0; - lastSpacePos = -1; - lastSpaceWidth = 0; - } else { - width = Math.max(width, currentLineWidth); - currentLineWidth = glyphWidth; - } - isBroken = true; - isFirstLine = false; - continue; - } - currentLineWidth += glyphWidth; - currentLineHeight = Math.max(glyphHeight, currentLineHeight); - } - width = Math.max(width, currentLineWidth); - height += currentLineHeight + this.extraHeight; - return { - width: WIDTH_FACTOR * width, - height, - isBroken - }; - } -} -exports.TextMeasure = TextMeasure; - -/***/ }), -/* 87 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XmlObject = exports.XFAObjectArray = exports.XFAObject = exports.XFAAttribute = exports.StringObject = exports.OptionObject = exports.Option10 = exports.Option01 = exports.IntegerObject = exports.ContentObject = void 0; -var _symbol_utils = __w_pdfjs_require__(78); -var _utils = __w_pdfjs_require__(84); -var _util = __w_pdfjs_require__(2); -var _core_utils = __w_pdfjs_require__(3); -var _namespaces = __w_pdfjs_require__(81); -var _som = __w_pdfjs_require__(88); -const _applyPrototype = Symbol(); -const _attributes = Symbol(); -const _attributeNames = Symbol(); -const _children = Symbol("_children"); -const _cloneAttribute = Symbol(); -const _dataValue = Symbol(); -const _defaultValue = Symbol(); -const _filteredChildrenGenerator = Symbol(); -const _getPrototype = Symbol(); -const _getUnsetAttributes = Symbol(); -const _hasChildren = Symbol(); -const _max = Symbol(); -const _options = Symbol(); -const _parent = Symbol("parent"); -const _resolvePrototypesHelper = Symbol(); -const _setAttributes = Symbol(); -const _validator = Symbol(); -let uid = 0; -const NS_DATASETS = _namespaces.NamespaceIds.datasets.id; -class XFAObject { - constructor(nsId, name, hasChildren = false) { - this[_symbol_utils.$namespaceId] = nsId; - this[_symbol_utils.$nodeName] = name; - this[_hasChildren] = hasChildren; - this[_parent] = null; - this[_children] = []; - this[_symbol_utils.$uid] = `${name}${uid++}`; - this[_symbol_utils.$globalData] = null; - } - get isXFAObject() { - return true; - } - get isXFAObjectArray() { - return false; - } - createNodes(path) { - let root = this, - node = null; - for (const { - name, - index - } of path) { - for (let i = 0, ii = isFinite(index) ? index : 0; i <= ii; i++) { - const nsId = root[_symbol_utils.$namespaceId] === NS_DATASETS ? -1 : root[_symbol_utils.$namespaceId]; - node = new XmlObject(nsId, name); - root[_symbol_utils.$appendChild](node); - } - root = node; - } - return node; - } - [_symbol_utils.$onChild](child) { - if (!this[_hasChildren] || !this[_symbol_utils.$onChildCheck](child)) { - return false; - } - const name = child[_symbol_utils.$nodeName]; - const node = this[name]; - if (node instanceof XFAObjectArray) { - if (node.push(child)) { - this[_symbol_utils.$appendChild](child); - return true; - } - } else { - if (node !== null) { - this[_symbol_utils.$removeChild](node); - } - this[name] = child; - this[_symbol_utils.$appendChild](child); - return true; - } - let id = ""; - if (this.id) { - id = ` (id: ${this.id})`; - } else if (this.name) { - id = ` (name: ${this.name} ${this.h.value})`; - } - (0, _util.warn)(`XFA - node "${this[_symbol_utils.$nodeName]}"${id} has already enough "${name}"!`); - return false; - } - [_symbol_utils.$onChildCheck](child) { - return this.hasOwnProperty(child[_symbol_utils.$nodeName]) && child[_symbol_utils.$namespaceId] === this[_symbol_utils.$namespaceId]; - } - [_symbol_utils.$isNsAgnostic]() { - return false; - } - [_symbol_utils.$acceptWhitespace]() { - return false; - } - [_symbol_utils.$isCDATAXml]() { - return false; - } - [_symbol_utils.$isBindable]() { - return false; - } - [_symbol_utils.$popPara]() { - if (this.para) { - this[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].paraStack.pop(); - } - } - [_symbol_utils.$pushPara]() { - this[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].paraStack.push(this.para); - } - [_symbol_utils.$setId](ids) { - if (this.id && this[_symbol_utils.$namespaceId] === _namespaces.NamespaceIds.template.id) { - ids.set(this.id, this); - } - } - [_symbol_utils.$getTemplateRoot]() { - return this[_symbol_utils.$globalData].template; - } - [_symbol_utils.$isSplittable]() { - return false; - } - [_symbol_utils.$isThereMoreWidth]() { - return false; - } - [_symbol_utils.$appendChild](child) { - child[_parent] = this; - this[_children].push(child); - if (!child[_symbol_utils.$globalData] && this[_symbol_utils.$globalData]) { - child[_symbol_utils.$globalData] = this[_symbol_utils.$globalData]; - } - } - [_symbol_utils.$removeChild](child) { - const i = this[_children].indexOf(child); - this[_children].splice(i, 1); - } - [_symbol_utils.$hasSettableValue]() { - return this.hasOwnProperty("value"); - } - [_symbol_utils.$setValue](_) {} - [_symbol_utils.$onText](_) {} - [_symbol_utils.$finalize]() {} - [_symbol_utils.$clean](builder) { - delete this[_hasChildren]; - if (this[_symbol_utils.$cleanup]) { - builder.clean(this[_symbol_utils.$cleanup]); - delete this[_symbol_utils.$cleanup]; - } - } - [_symbol_utils.$indexOf](child) { - return this[_children].indexOf(child); - } - [_symbol_utils.$insertAt](i, child) { - child[_parent] = this; - this[_children].splice(i, 0, child); - if (!child[_symbol_utils.$globalData] && this[_symbol_utils.$globalData]) { - child[_symbol_utils.$globalData] = this[_symbol_utils.$globalData]; - } - } - [_symbol_utils.$isTransparent]() { - return !this.name; - } - [_symbol_utils.$lastAttribute]() { - return ""; - } - [_symbol_utils.$text]() { - if (this[_children].length === 0) { - return this[_symbol_utils.$content]; - } - return this[_children].map(c => c[_symbol_utils.$text]()).join(""); - } - get [_attributeNames]() { - const proto = Object.getPrototypeOf(this); - if (!proto._attributes) { - const attributes = proto._attributes = new Set(); - for (const name of Object.getOwnPropertyNames(this)) { - if (this[name] === null || this[name] instanceof XFAObject || this[name] instanceof XFAObjectArray) { - break; - } - attributes.add(name); - } - } - return (0, _util.shadow)(this, _attributeNames, proto._attributes); - } - [_symbol_utils.$isDescendent](parent) { - let node = this; - while (node) { - if (node === parent) { - return true; - } - node = node[_symbol_utils.$getParent](); - } - return false; - } - [_symbol_utils.$getParent]() { - return this[_parent]; - } - [_symbol_utils.$getSubformParent]() { - return this[_symbol_utils.$getParent](); - } - [_symbol_utils.$getChildren](name = null) { - if (!name) { - return this[_children]; - } - return this[name]; - } - [_symbol_utils.$dump]() { - const dumped = Object.create(null); - if (this[_symbol_utils.$content]) { - dumped.$content = this[_symbol_utils.$content]; - } - for (const name of Object.getOwnPropertyNames(this)) { - const value = this[name]; - if (value === null) { - continue; - } - if (value instanceof XFAObject) { - dumped[name] = value[_symbol_utils.$dump](); - } else if (value instanceof XFAObjectArray) { - if (!value.isEmpty()) { - dumped[name] = value.dump(); - } - } else { - dumped[name] = value; - } - } - return dumped; - } - [_symbol_utils.$toStyle]() { - return null; - } - [_symbol_utils.$toHTML]() { - return _utils.HTMLResult.EMPTY; - } - *[_symbol_utils.$getContainedChildren]() { - for (const node of this[_symbol_utils.$getChildren]()) { - yield node; - } - } - *[_filteredChildrenGenerator](filter, include) { - for (const node of this[_symbol_utils.$getContainedChildren]()) { - if (!filter || include === filter.has(node[_symbol_utils.$nodeName])) { - const availableSpace = this[_symbol_utils.$getAvailableSpace](); - const res = node[_symbol_utils.$toHTML](availableSpace); - if (!res.success) { - this[_symbol_utils.$extra].failingNode = node; - } - yield res; - } - } - } - [_symbol_utils.$flushHTML]() { - return null; - } - [_symbol_utils.$addHTML](html, bbox) { - this[_symbol_utils.$extra].children.push(html); - } - [_symbol_utils.$getAvailableSpace]() {} - [_symbol_utils.$childrenToHTML]({ - filter = null, - include = true - }) { - if (!this[_symbol_utils.$extra].generator) { - this[_symbol_utils.$extra].generator = this[_filteredChildrenGenerator](filter, include); - } else { - const availableSpace = this[_symbol_utils.$getAvailableSpace](); - const res = this[_symbol_utils.$extra].failingNode[_symbol_utils.$toHTML](availableSpace); - if (!res.success) { - return res; - } - if (res.html) { - this[_symbol_utils.$addHTML](res.html, res.bbox); - } - delete this[_symbol_utils.$extra].failingNode; - } - while (true) { - const gen = this[_symbol_utils.$extra].generator.next(); - if (gen.done) { - break; - } - const res = gen.value; - if (!res.success) { - return res; - } - if (res.html) { - this[_symbol_utils.$addHTML](res.html, res.bbox); - } - } - this[_symbol_utils.$extra].generator = null; - return _utils.HTMLResult.EMPTY; - } - [_symbol_utils.$setSetAttributes](attributes) { - this[_setAttributes] = new Set(Object.keys(attributes)); - } - [_getUnsetAttributes](protoAttributes) { - const allAttr = this[_attributeNames]; - const setAttr = this[_setAttributes]; - return [...protoAttributes].filter(x => allAttr.has(x) && !setAttr.has(x)); - } - [_symbol_utils.$resolvePrototypes](ids, ancestors = new Set()) { - for (const child of this[_children]) { - child[_resolvePrototypesHelper](ids, ancestors); - } - } - [_resolvePrototypesHelper](ids, ancestors) { - const proto = this[_getPrototype](ids, ancestors); - if (proto) { - this[_applyPrototype](proto, ids, ancestors); - } else { - this[_symbol_utils.$resolvePrototypes](ids, ancestors); - } - } - [_getPrototype](ids, ancestors) { - const { - use, - usehref - } = this; - if (!use && !usehref) { - return null; - } - let proto = null; - let somExpression = null; - let id = null; - let ref = use; - if (usehref) { - ref = usehref; - if (usehref.startsWith("#som(") && usehref.endsWith(")")) { - somExpression = usehref.slice("#som(".length, -1); - } else if (usehref.startsWith(".#som(") && usehref.endsWith(")")) { - somExpression = usehref.slice(".#som(".length, -1); - } else if (usehref.startsWith("#")) { - id = usehref.slice(1); - } else if (usehref.startsWith(".#")) { - id = usehref.slice(2); - } - } else if (use.startsWith("#")) { - id = use.slice(1); - } else { - somExpression = use; - } - this.use = this.usehref = ""; - if (id) { - proto = ids.get(id); - } else { - proto = (0, _som.searchNode)(ids.get(_symbol_utils.$root), this, somExpression, true, false); - if (proto) { - proto = proto[0]; - } - } - if (!proto) { - (0, _util.warn)(`XFA - Invalid prototype reference: ${ref}.`); - return null; - } - if (proto[_symbol_utils.$nodeName] !== this[_symbol_utils.$nodeName]) { - (0, _util.warn)(`XFA - Incompatible prototype: ${proto[_symbol_utils.$nodeName]} !== ${this[_symbol_utils.$nodeName]}.`); - return null; - } - if (ancestors.has(proto)) { - (0, _util.warn)(`XFA - Cycle detected in prototypes use.`); - return null; - } - ancestors.add(proto); - const protoProto = proto[_getPrototype](ids, ancestors); - if (protoProto) { - proto[_applyPrototype](protoProto, ids, ancestors); - } - proto[_symbol_utils.$resolvePrototypes](ids, ancestors); - ancestors.delete(proto); - return proto; - } - [_applyPrototype](proto, ids, ancestors) { - if (ancestors.has(proto)) { - (0, _util.warn)(`XFA - Cycle detected in prototypes use.`); - return; - } - if (!this[_symbol_utils.$content] && proto[_symbol_utils.$content]) { - this[_symbol_utils.$content] = proto[_symbol_utils.$content]; - } - const newAncestors = new Set(ancestors); - newAncestors.add(proto); - for (const unsetAttrName of this[_getUnsetAttributes](proto[_setAttributes])) { - this[unsetAttrName] = proto[unsetAttrName]; - if (this[_setAttributes]) { - this[_setAttributes].add(unsetAttrName); - } - } - for (const name of Object.getOwnPropertyNames(this)) { - if (this[_attributeNames].has(name)) { - continue; - } - const value = this[name]; - const protoValue = proto[name]; - if (value instanceof XFAObjectArray) { - for (const child of value[_children]) { - child[_resolvePrototypesHelper](ids, ancestors); - } - for (let i = value[_children].length, ii = protoValue[_children].length; i < ii; i++) { - const child = proto[_children][i][_symbol_utils.$clone](); - if (value.push(child)) { - child[_parent] = this; - this[_children].push(child); - child[_resolvePrototypesHelper](ids, ancestors); - } else { - break; - } - } - continue; - } - if (value !== null) { - value[_symbol_utils.$resolvePrototypes](ids, ancestors); - if (protoValue) { - value[_applyPrototype](protoValue, ids, ancestors); - } - continue; - } - if (protoValue !== null) { - const child = protoValue[_symbol_utils.$clone](); - child[_parent] = this; - this[name] = child; - this[_children].push(child); - child[_resolvePrototypesHelper](ids, ancestors); - } - } - } - static [_cloneAttribute](obj) { - if (Array.isArray(obj)) { - return obj.map(x => XFAObject[_cloneAttribute](x)); - } - if (typeof obj === "object" && obj !== null) { - return Object.assign({}, obj); - } - return obj; - } - [_symbol_utils.$clone]() { - const clone = Object.create(Object.getPrototypeOf(this)); - for (const $symbol of Object.getOwnPropertySymbols(this)) { - try { - clone[$symbol] = this[$symbol]; - } catch { - (0, _util.shadow)(clone, $symbol, this[$symbol]); - } - } - clone[_symbol_utils.$uid] = `${clone[_symbol_utils.$nodeName]}${uid++}`; - clone[_children] = []; - for (const name of Object.getOwnPropertyNames(this)) { - if (this[_attributeNames].has(name)) { - clone[name] = XFAObject[_cloneAttribute](this[name]); - continue; - } - const value = this[name]; - clone[name] = value instanceof XFAObjectArray ? new XFAObjectArray(value[_max]) : null; - } - for (const child of this[_children]) { - const name = child[_symbol_utils.$nodeName]; - const clonedChild = child[_symbol_utils.$clone](); - clone[_children].push(clonedChild); - clonedChild[_parent] = clone; - if (clone[name] === null) { - clone[name] = clonedChild; - } else { - clone[name][_children].push(clonedChild); - } - } - return clone; - } - [_symbol_utils.$getChildren](name = null) { - if (!name) { - return this[_children]; - } - return this[_children].filter(c => c[_symbol_utils.$nodeName] === name); - } - [_symbol_utils.$getChildrenByClass](name) { - return this[name]; - } - [_symbol_utils.$getChildrenByName](name, allTransparent, first = true) { - return Array.from(this[_symbol_utils.$getChildrenByNameIt](name, allTransparent, first)); - } - *[_symbol_utils.$getChildrenByNameIt](name, allTransparent, first = true) { - if (name === "parent") { - yield this[_parent]; - return; - } - for (const child of this[_children]) { - if (child[_symbol_utils.$nodeName] === name) { - yield child; - } - if (child.name === name) { - yield child; - } - if (allTransparent || child[_symbol_utils.$isTransparent]()) { - yield* child[_symbol_utils.$getChildrenByNameIt](name, allTransparent, false); - } - } - if (first && this[_attributeNames].has(name)) { - yield new XFAAttribute(this, name, this[name]); - } - } -} -exports.XFAObject = XFAObject; -class XFAObjectArray { - constructor(max = Infinity) { - this[_max] = max; - this[_children] = []; - } - get isXFAObject() { - return false; - } - get isXFAObjectArray() { - return true; - } - push(child) { - const len = this[_children].length; - if (len <= this[_max]) { - this[_children].push(child); - return true; - } - (0, _util.warn)(`XFA - node "${child[_symbol_utils.$nodeName]}" accepts no more than ${this[_max]} children`); - return false; - } - isEmpty() { - return this[_children].length === 0; - } - dump() { - return this[_children].length === 1 ? this[_children][0][_symbol_utils.$dump]() : this[_children].map(x => x[_symbol_utils.$dump]()); - } - [_symbol_utils.$clone]() { - const clone = new XFAObjectArray(this[_max]); - clone[_children] = this[_children].map(c => c[_symbol_utils.$clone]()); - return clone; - } - get children() { - return this[_children]; - } - clear() { - this[_children].length = 0; - } -} -exports.XFAObjectArray = XFAObjectArray; -class XFAAttribute { - constructor(node, name, value) { - this[_parent] = node; - this[_symbol_utils.$nodeName] = name; - this[_symbol_utils.$content] = value; - this[_symbol_utils.$consumed] = false; - this[_symbol_utils.$uid] = `attribute${uid++}`; - } - [_symbol_utils.$getParent]() { - return this[_parent]; - } - [_symbol_utils.$isDataValue]() { - return true; - } - [_symbol_utils.$getDataValue]() { - return this[_symbol_utils.$content].trim(); - } - [_symbol_utils.$setValue](value) { - value = value.value || ""; - this[_symbol_utils.$content] = value.toString(); - } - [_symbol_utils.$text]() { - return this[_symbol_utils.$content]; - } - [_symbol_utils.$isDescendent](parent) { - return this[_parent] === parent || this[_parent][_symbol_utils.$isDescendent](parent); - } -} -exports.XFAAttribute = XFAAttribute; -class XmlObject extends XFAObject { - constructor(nsId, name, attributes = {}) { - super(nsId, name); - this[_symbol_utils.$content] = ""; - this[_dataValue] = null; - if (name !== "#text") { - const map = new Map(); - this[_attributes] = map; - for (const [attrName, value] of Object.entries(attributes)) { - map.set(attrName, new XFAAttribute(this, attrName, value)); - } - if (attributes.hasOwnProperty(_symbol_utils.$nsAttributes)) { - const dataNode = attributes[_symbol_utils.$nsAttributes].xfa.dataNode; - if (dataNode !== undefined) { - if (dataNode === "dataGroup") { - this[_dataValue] = false; - } else if (dataNode === "dataValue") { - this[_dataValue] = true; - } - } - } - } - this[_symbol_utils.$consumed] = false; - } - [_symbol_utils.$toString](buf) { - const tagName = this[_symbol_utils.$nodeName]; - if (tagName === "#text") { - buf.push((0, _core_utils.encodeToXmlString)(this[_symbol_utils.$content])); - return; - } - const utf8TagName = (0, _util.utf8StringToString)(tagName); - const prefix = this[_symbol_utils.$namespaceId] === NS_DATASETS ? "xfa:" : ""; - buf.push(`<${prefix}${utf8TagName}`); - for (const [name, value] of this[_attributes].entries()) { - const utf8Name = (0, _util.utf8StringToString)(name); - buf.push(` ${utf8Name}="${(0, _core_utils.encodeToXmlString)(value[_symbol_utils.$content])}"`); - } - if (this[_dataValue] !== null) { - if (this[_dataValue]) { - buf.push(` xfa:dataNode="dataValue"`); - } else { - buf.push(` xfa:dataNode="dataGroup"`); - } - } - if (!this[_symbol_utils.$content] && this[_children].length === 0) { - buf.push("/>"); - return; - } - buf.push(">"); - if (this[_symbol_utils.$content]) { - if (typeof this[_symbol_utils.$content] === "string") { - buf.push((0, _core_utils.encodeToXmlString)(this[_symbol_utils.$content])); - } else { - this[_symbol_utils.$content][_symbol_utils.$toString](buf); - } - } else { - for (const child of this[_children]) { - child[_symbol_utils.$toString](buf); - } - } - buf.push(``); - } - [_symbol_utils.$onChild](child) { - if (this[_symbol_utils.$content]) { - const node = new XmlObject(this[_symbol_utils.$namespaceId], "#text"); - this[_symbol_utils.$appendChild](node); - node[_symbol_utils.$content] = this[_symbol_utils.$content]; - this[_symbol_utils.$content] = ""; - } - this[_symbol_utils.$appendChild](child); - return true; - } - [_symbol_utils.$onText](str) { - this[_symbol_utils.$content] += str; - } - [_symbol_utils.$finalize]() { - if (this[_symbol_utils.$content] && this[_children].length > 0) { - const node = new XmlObject(this[_symbol_utils.$namespaceId], "#text"); - this[_symbol_utils.$appendChild](node); - node[_symbol_utils.$content] = this[_symbol_utils.$content]; - delete this[_symbol_utils.$content]; - } - } - [_symbol_utils.$toHTML]() { - if (this[_symbol_utils.$nodeName] === "#text") { - return _utils.HTMLResult.success({ - name: "#text", - value: this[_symbol_utils.$content] - }); - } - return _utils.HTMLResult.EMPTY; - } - [_symbol_utils.$getChildren](name = null) { - if (!name) { - return this[_children]; - } - return this[_children].filter(c => c[_symbol_utils.$nodeName] === name); - } - [_symbol_utils.$getAttributes]() { - return this[_attributes]; - } - [_symbol_utils.$getChildrenByClass](name) { - const value = this[_attributes].get(name); - if (value !== undefined) { - return value; - } - return this[_symbol_utils.$getChildren](name); - } - *[_symbol_utils.$getChildrenByNameIt](name, allTransparent) { - const value = this[_attributes].get(name); - if (value) { - yield value; - } - for (const child of this[_children]) { - if (child[_symbol_utils.$nodeName] === name) { - yield child; - } - if (allTransparent) { - yield* child[_symbol_utils.$getChildrenByNameIt](name, allTransparent); - } - } - } - *[_symbol_utils.$getAttributeIt](name, skipConsumed) { - const value = this[_attributes].get(name); - if (value && (!skipConsumed || !value[_symbol_utils.$consumed])) { - yield value; - } - for (const child of this[_children]) { - yield* child[_symbol_utils.$getAttributeIt](name, skipConsumed); - } - } - *[_symbol_utils.$getRealChildrenByNameIt](name, allTransparent, skipConsumed) { - for (const child of this[_children]) { - if (child[_symbol_utils.$nodeName] === name && (!skipConsumed || !child[_symbol_utils.$consumed])) { - yield child; - } - if (allTransparent) { - yield* child[_symbol_utils.$getRealChildrenByNameIt](name, allTransparent, skipConsumed); - } - } - } - [_symbol_utils.$isDataValue]() { - if (this[_dataValue] === null) { - return this[_children].length === 0 || this[_children][0][_symbol_utils.$namespaceId] === _namespaces.NamespaceIds.xhtml.id; - } - return this[_dataValue]; - } - [_symbol_utils.$getDataValue]() { - if (this[_dataValue] === null) { - if (this[_children].length === 0) { - return this[_symbol_utils.$content].trim(); - } - if (this[_children][0][_symbol_utils.$namespaceId] === _namespaces.NamespaceIds.xhtml.id) { - return this[_children][0][_symbol_utils.$text]().trim(); - } - return null; - } - return this[_symbol_utils.$content].trim(); - } - [_symbol_utils.$setValue](value) { - value = value.value || ""; - this[_symbol_utils.$content] = value.toString(); - } - [_symbol_utils.$dump](hasNS = false) { - const dumped = Object.create(null); - if (hasNS) { - dumped.$ns = this[_symbol_utils.$namespaceId]; - } - if (this[_symbol_utils.$content]) { - dumped.$content = this[_symbol_utils.$content]; - } - dumped.$name = this[_symbol_utils.$nodeName]; - dumped.children = []; - for (const child of this[_children]) { - dumped.children.push(child[_symbol_utils.$dump](hasNS)); - } - dumped.attributes = Object.create(null); - for (const [name, value] of this[_attributes]) { - dumped.attributes[name] = value[_symbol_utils.$content]; - } - return dumped; - } -} -exports.XmlObject = XmlObject; -class ContentObject extends XFAObject { - constructor(nsId, name) { - super(nsId, name); - this[_symbol_utils.$content] = ""; - } - [_symbol_utils.$onText](text) { - this[_symbol_utils.$content] += text; - } - [_symbol_utils.$finalize]() {} -} -exports.ContentObject = ContentObject; -class OptionObject extends ContentObject { - constructor(nsId, name, options) { - super(nsId, name); - this[_options] = options; - } - [_symbol_utils.$finalize]() { - this[_symbol_utils.$content] = (0, _utils.getKeyword)({ - data: this[_symbol_utils.$content], - defaultValue: this[_options][0], - validate: k => this[_options].includes(k) - }); - } - [_symbol_utils.$clean](builder) { - super[_symbol_utils.$clean](builder); - delete this[_options]; - } -} -exports.OptionObject = OptionObject; -class StringObject extends ContentObject { - [_symbol_utils.$finalize]() { - this[_symbol_utils.$content] = this[_symbol_utils.$content].trim(); - } -} -exports.StringObject = StringObject; -class IntegerObject extends ContentObject { - constructor(nsId, name, defaultValue, validator) { - super(nsId, name); - this[_defaultValue] = defaultValue; - this[_validator] = validator; - } - [_symbol_utils.$finalize]() { - this[_symbol_utils.$content] = (0, _utils.getInteger)({ - data: this[_symbol_utils.$content], - defaultValue: this[_defaultValue], - validate: this[_validator] - }); - } - [_symbol_utils.$clean](builder) { - super[_symbol_utils.$clean](builder); - delete this[_defaultValue]; - delete this[_validator]; - } -} -exports.IntegerObject = IntegerObject; -class Option01 extends IntegerObject { - constructor(nsId, name) { - super(nsId, name, 0, n => n === 1); - } -} -exports.Option01 = Option01; -class Option10 extends IntegerObject { - constructor(nsId, name) { - super(nsId, name, 1, n => n === 0); - } -} -exports.Option10 = Option10; - -/***/ }), -/* 88 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.createDataNode = createDataNode; -exports.searchNode = searchNode; -var _symbol_utils = __w_pdfjs_require__(78); -var _util = __w_pdfjs_require__(2); -const namePattern = /^[^.[]+/; -const indexPattern = /^[^\]]+/; -const operators = { - dot: 0, - dotDot: 1, - dotHash: 2, - dotBracket: 3, - dotParen: 4 -}; -const shortcuts = new Map([["$data", (root, current) => root.datasets ? root.datasets.data : root], ["$record", (root, current) => (root.datasets ? root.datasets.data : root)[_symbol_utils.$getChildren]()[0]], ["$template", (root, current) => root.template], ["$connectionSet", (root, current) => root.connectionSet], ["$form", (root, current) => root.form], ["$layout", (root, current) => root.layout], ["$host", (root, current) => root.host], ["$dataWindow", (root, current) => root.dataWindow], ["$event", (root, current) => root.event], ["!", (root, current) => root.datasets], ["$xfa", (root, current) => root], ["xfa", (root, current) => root], ["$", (root, current) => current]]); -const somCache = new WeakMap(); -function parseIndex(index) { - index = index.trim(); - if (index === "*") { - return Infinity; - } - return parseInt(index, 10) || 0; -} -function parseExpression(expr, dotDotAllowed, noExpr = true) { - let match = expr.match(namePattern); - if (!match) { - return null; - } - let [name] = match; - const parsed = [{ - name, - cacheName: "." + name, - index: 0, - js: null, - formCalc: null, - operator: operators.dot - }]; - let pos = name.length; - while (pos < expr.length) { - const spos = pos; - const char = expr.charAt(pos++); - if (char === "[") { - match = expr.slice(pos).match(indexPattern); - if (!match) { - (0, _util.warn)("XFA - Invalid index in SOM expression"); - return null; - } - parsed.at(-1).index = parseIndex(match[0]); - pos += match[0].length + 1; - continue; - } - let operator; - switch (expr.charAt(pos)) { - case ".": - if (!dotDotAllowed) { - return null; - } - pos++; - operator = operators.dotDot; - break; - case "#": - pos++; - operator = operators.dotHash; - break; - case "[": - if (noExpr) { - (0, _util.warn)("XFA - SOM expression contains a FormCalc subexpression which is not supported for now."); - return null; - } - operator = operators.dotBracket; - break; - case "(": - if (noExpr) { - (0, _util.warn)("XFA - SOM expression contains a JavaScript subexpression which is not supported for now."); - return null; - } - operator = operators.dotParen; - break; - default: - operator = operators.dot; - break; - } - match = expr.slice(pos).match(namePattern); - if (!match) { - break; - } - [name] = match; - pos += name.length; - parsed.push({ - name, - cacheName: expr.slice(spos, pos), - operator, - index: 0, - js: null, - formCalc: null - }); - } - return parsed; -} -function searchNode(root, container, expr, dotDotAllowed = true, useCache = true) { - const parsed = parseExpression(expr, dotDotAllowed); - if (!parsed) { - return null; - } - const fn = shortcuts.get(parsed[0].name); - let i = 0; - let isQualified; - if (fn) { - isQualified = true; - root = [fn(root, container)]; - i = 1; - } else { - isQualified = container === null; - root = [container || root]; - } - for (let ii = parsed.length; i < ii; i++) { - const { - name, - cacheName, - operator, - index - } = parsed[i]; - const nodes = []; - for (const node of root) { - if (!node.isXFAObject) { - continue; - } - let children, cached; - if (useCache) { - cached = somCache.get(node); - if (!cached) { - cached = new Map(); - somCache.set(node, cached); - } - children = cached.get(cacheName); - } - if (!children) { - switch (operator) { - case operators.dot: - children = node[_symbol_utils.$getChildrenByName](name, false); - break; - case operators.dotDot: - children = node[_symbol_utils.$getChildrenByName](name, true); - break; - case operators.dotHash: - children = node[_symbol_utils.$getChildrenByClass](name); - children = children.isXFAObjectArray ? children.children : [children]; - break; - default: - break; - } - if (useCache) { - cached.set(cacheName, children); - } - } - if (children.length > 0) { - nodes.push(children); - } - } - if (nodes.length === 0 && !isQualified && i === 0) { - const parent = container[_symbol_utils.$getParent](); - container = parent; - if (!container) { - return null; - } - i = -1; - root = [container]; - continue; - } - root = isFinite(index) ? nodes.filter(node => index < node.length).map(node => node[index]) : nodes.flat(); - } - if (root.length === 0) { - return null; - } - return root; -} -function createDataNode(root, container, expr) { - const parsed = parseExpression(expr); - if (!parsed) { - return null; - } - if (parsed.some(x => x.operator === operators.dotDot)) { - return null; - } - const fn = shortcuts.get(parsed[0].name); - let i = 0; - if (fn) { - root = fn(root, container); - i = 1; - } else { - root = container || root; - } - for (let ii = parsed.length; i < ii; i++) { - const { - name, - operator, - index - } = parsed[i]; - if (!isFinite(index)) { - parsed[i].index = 0; - return root.createNodes(parsed.slice(i)); - } - let children; - switch (operator) { - case operators.dot: - children = root[_symbol_utils.$getChildrenByName](name, false); - break; - case operators.dotDot: - children = root[_symbol_utils.$getChildrenByName](name, true); - break; - case operators.dotHash: - children = root[_symbol_utils.$getChildrenByClass](name); - children = children.isXFAObjectArray ? children.children : [children]; - break; - default: - break; - } - if (children.length === 0) { - return root.createNodes(parsed.slice(i)); - } - if (index < children.length) { - const child = children[index]; - if (!child.isXFAObject) { - (0, _util.warn)(`XFA - Cannot create a node.`); - return null; - } - root = child; - } else { - parsed[i].index = index - children.length; - return root.createNodes(parsed.slice(i)); - } - } - return null; -} - -/***/ }), -/* 89 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.DataHandler = void 0; -var _symbol_utils = __w_pdfjs_require__(78); -class DataHandler { - constructor(root, data) { - this.data = data; - this.dataset = root.datasets || null; - } - serialize(storage) { - const stack = [[-1, this.data[_symbol_utils.$getChildren]()]]; - while (stack.length > 0) { - const last = stack.at(-1); - const [i, children] = last; - if (i + 1 === children.length) { - stack.pop(); - continue; - } - const child = children[++last[0]]; - const storageEntry = storage.get(child[_symbol_utils.$uid]); - if (storageEntry) { - child[_symbol_utils.$setValue](storageEntry); - } else { - const attributes = child[_symbol_utils.$getAttributes](); - for (const value of attributes.values()) { - const entry = storage.get(value[_symbol_utils.$uid]); - if (entry) { - value[_symbol_utils.$setValue](entry); - break; - } - } - } - const nodes = child[_symbol_utils.$getChildren](); - if (nodes.length > 0) { - stack.push([-1, nodes]); - } - } - const buf = [``]; - if (this.dataset) { - for (const child of this.dataset[_symbol_utils.$getChildren]()) { - if (child[_symbol_utils.$nodeName] !== "data") { - child[_symbol_utils.$toString](buf); - } - } - } - this.data[_symbol_utils.$toString](buf); - buf.push(""); - return buf.join(""); - } -} -exports.DataHandler = DataHandler; - -/***/ }), -/* 90 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XFAParser = void 0; -var _symbol_utils = __w_pdfjs_require__(78); -var _xml_parser = __w_pdfjs_require__(71); -var _builder = __w_pdfjs_require__(91); -var _util = __w_pdfjs_require__(2); -class XFAParser extends _xml_parser.XMLParserBase { - constructor(rootNameSpace = null, richText = false) { - super(); - this._builder = new _builder.Builder(rootNameSpace); - this._stack = []; - this._globalData = { - usedTypefaces: new Set() - }; - this._ids = new Map(); - this._current = this._builder.buildRoot(this._ids); - this._errorCode = _xml_parser.XMLParserErrorCode.NoError; - this._whiteRegex = /^\s+$/; - this._nbsps = /\xa0+/g; - this._richText = richText; - } - parse(data) { - this.parseXml(data); - if (this._errorCode !== _xml_parser.XMLParserErrorCode.NoError) { - return undefined; - } - this._current[_symbol_utils.$finalize](); - return this._current.element; - } - onText(text) { - text = text.replace(this._nbsps, match => match.slice(1) + " "); - if (this._richText || this._current[_symbol_utils.$acceptWhitespace]()) { - this._current[_symbol_utils.$onText](text, this._richText); - return; - } - if (this._whiteRegex.test(text)) { - return; - } - this._current[_symbol_utils.$onText](text.trim()); - } - onCdata(text) { - this._current[_symbol_utils.$onText](text); - } - _mkAttributes(attributes, tagName) { - let namespace = null; - let prefixes = null; - const attributeObj = Object.create({}); - for (const { - name, - value - } of attributes) { - if (name === "xmlns") { - if (!namespace) { - namespace = value; - } else { - (0, _util.warn)(`XFA - multiple namespace definition in <${tagName}>`); - } - } else if (name.startsWith("xmlns:")) { - const prefix = name.substring("xmlns:".length); - if (!prefixes) { - prefixes = []; - } - prefixes.push({ - prefix, - value - }); - } else { - const i = name.indexOf(":"); - if (i === -1) { - attributeObj[name] = value; - } else { - let nsAttrs = attributeObj[_symbol_utils.$nsAttributes]; - if (!nsAttrs) { - nsAttrs = attributeObj[_symbol_utils.$nsAttributes] = Object.create(null); - } - const [ns, attrName] = [name.slice(0, i), name.slice(i + 1)]; - const attrs = nsAttrs[ns] ||= Object.create(null); - attrs[attrName] = value; - } - } - } - return [namespace, prefixes, attributeObj]; - } - _getNameAndPrefix(name, nsAgnostic) { - const i = name.indexOf(":"); - if (i === -1) { - return [name, null]; - } - return [name.substring(i + 1), nsAgnostic ? "" : name.substring(0, i)]; - } - onBeginElement(tagName, attributes, isEmpty) { - const [namespace, prefixes, attributesObj] = this._mkAttributes(attributes, tagName); - const [name, nsPrefix] = this._getNameAndPrefix(tagName, this._builder.isNsAgnostic()); - const node = this._builder.build({ - nsPrefix, - name, - attributes: attributesObj, - namespace, - prefixes - }); - node[_symbol_utils.$globalData] = this._globalData; - if (isEmpty) { - node[_symbol_utils.$finalize](); - if (this._current[_symbol_utils.$onChild](node)) { - node[_symbol_utils.$setId](this._ids); - } - node[_symbol_utils.$clean](this._builder); - return; - } - this._stack.push(this._current); - this._current = node; - } - onEndElement(name) { - const node = this._current; - if (node[_symbol_utils.$isCDATAXml]() && typeof node[_symbol_utils.$content] === "string") { - const parser = new XFAParser(); - parser._globalData = this._globalData; - const root = parser.parse(node[_symbol_utils.$content]); - node[_symbol_utils.$content] = null; - node[_symbol_utils.$onChild](root); - } - node[_symbol_utils.$finalize](); - this._current = this._stack.pop(); - if (this._current[_symbol_utils.$onChild](node)) { - node[_symbol_utils.$setId](this._ids); - } - node[_symbol_utils.$clean](this._builder); - } - onError(code) { - this._errorCode = code; - } -} -exports.XFAParser = XFAParser; - -/***/ }), -/* 91 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Builder = void 0; -var _namespaces = __w_pdfjs_require__(81); -var _symbol_utils = __w_pdfjs_require__(78); -var _setup = __w_pdfjs_require__(92); -var _template = __w_pdfjs_require__(80); -var _unknown = __w_pdfjs_require__(101); -var _util = __w_pdfjs_require__(2); -var _xfa_object = __w_pdfjs_require__(87); -class Root extends _xfa_object.XFAObject { - constructor(ids) { - super(-1, "root", Object.create(null)); - this.element = null; - this[_symbol_utils.$ids] = ids; - } - [_symbol_utils.$onChild](child) { - this.element = child; - return true; - } - [_symbol_utils.$finalize]() { - super[_symbol_utils.$finalize](); - if (this.element.template instanceof _template.Template) { - this[_symbol_utils.$ids].set(_symbol_utils.$root, this.element); - this.element.template[_symbol_utils.$resolvePrototypes](this[_symbol_utils.$ids]); - this.element.template[_symbol_utils.$ids] = this[_symbol_utils.$ids]; - } - } -} -class Empty extends _xfa_object.XFAObject { - constructor() { - super(-1, "", Object.create(null)); - } - [_symbol_utils.$onChild](_) { - return false; - } -} -class Builder { - constructor(rootNameSpace = null) { - this._namespaceStack = []; - this._nsAgnosticLevel = 0; - this._namespacePrefixes = new Map(); - this._namespaces = new Map(); - this._nextNsId = Math.max(...Object.values(_namespaces.NamespaceIds).map(({ - id - }) => id)); - this._currentNamespace = rootNameSpace || new _unknown.UnknownNamespace(++this._nextNsId); - } - buildRoot(ids) { - return new Root(ids); - } - build({ - nsPrefix, - name, - attributes, - namespace, - prefixes - }) { - const hasNamespaceDef = namespace !== null; - if (hasNamespaceDef) { - this._namespaceStack.push(this._currentNamespace); - this._currentNamespace = this._searchNamespace(namespace); - } - if (prefixes) { - this._addNamespacePrefix(prefixes); - } - if (attributes.hasOwnProperty(_symbol_utils.$nsAttributes)) { - const dataTemplate = _setup.NamespaceSetUp.datasets; - const nsAttrs = attributes[_symbol_utils.$nsAttributes]; - let xfaAttrs = null; - for (const [ns, attrs] of Object.entries(nsAttrs)) { - const nsToUse = this._getNamespaceToUse(ns); - if (nsToUse === dataTemplate) { - xfaAttrs = { - xfa: attrs - }; - break; - } - } - if (xfaAttrs) { - attributes[_symbol_utils.$nsAttributes] = xfaAttrs; - } else { - delete attributes[_symbol_utils.$nsAttributes]; - } - } - const namespaceToUse = this._getNamespaceToUse(nsPrefix); - const node = namespaceToUse?.[_namespaces.$buildXFAObject](name, attributes) || new Empty(); - if (node[_symbol_utils.$isNsAgnostic]()) { - this._nsAgnosticLevel++; - } - if (hasNamespaceDef || prefixes || node[_symbol_utils.$isNsAgnostic]()) { - node[_symbol_utils.$cleanup] = { - hasNamespace: hasNamespaceDef, - prefixes, - nsAgnostic: node[_symbol_utils.$isNsAgnostic]() - }; - } - return node; - } - isNsAgnostic() { - return this._nsAgnosticLevel > 0; - } - _searchNamespace(nsName) { - let ns = this._namespaces.get(nsName); - if (ns) { - return ns; - } - for (const [name, { - check - }] of Object.entries(_namespaces.NamespaceIds)) { - if (check(nsName)) { - ns = _setup.NamespaceSetUp[name]; - if (ns) { - this._namespaces.set(nsName, ns); - return ns; - } - break; - } - } - ns = new _unknown.UnknownNamespace(++this._nextNsId); - this._namespaces.set(nsName, ns); - return ns; - } - _addNamespacePrefix(prefixes) { - for (const { - prefix, - value - } of prefixes) { - const namespace = this._searchNamespace(value); - let prefixStack = this._namespacePrefixes.get(prefix); - if (!prefixStack) { - prefixStack = []; - this._namespacePrefixes.set(prefix, prefixStack); - } - prefixStack.push(namespace); - } - } - _getNamespaceToUse(prefix) { - if (!prefix) { - return this._currentNamespace; - } - const prefixStack = this._namespacePrefixes.get(prefix); - if (prefixStack?.length > 0) { - return prefixStack.at(-1); - } - (0, _util.warn)(`Unknown namespace prefix: ${prefix}.`); - return null; - } - clean(data) { - const { - hasNamespace, - prefixes, - nsAgnostic - } = data; - if (hasNamespace) { - this._currentNamespace = this._namespaceStack.pop(); - } - if (prefixes) { - prefixes.forEach(({ - prefix - }) => { - this._namespacePrefixes.get(prefix).pop(); - }); - } - if (nsAgnostic) { - this._nsAgnosticLevel--; - } - } -} -exports.Builder = Builder; - -/***/ }), -/* 92 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.NamespaceSetUp = void 0; -var _config = __w_pdfjs_require__(93); -var _connection_set = __w_pdfjs_require__(94); -var _datasets = __w_pdfjs_require__(95); -var _locale_set = __w_pdfjs_require__(96); -var _signature = __w_pdfjs_require__(97); -var _stylesheet = __w_pdfjs_require__(98); -var _template = __w_pdfjs_require__(80); -var _xdp = __w_pdfjs_require__(99); -var _xhtml = __w_pdfjs_require__(100); -const NamespaceSetUp = { - config: _config.ConfigNamespace, - connection: _connection_set.ConnectionSetNamespace, - datasets: _datasets.DatasetsNamespace, - localeSet: _locale_set.LocaleSetNamespace, - signature: _signature.SignatureNamespace, - stylesheet: _stylesheet.StylesheetNamespace, - template: _template.TemplateNamespace, - xdp: _xdp.XdpNamespace, - xhtml: _xhtml.XhtmlNamespace -}; -exports.NamespaceSetUp = NamespaceSetUp; - -/***/ }), -/* 93 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ConfigNamespace = void 0; -var _namespaces = __w_pdfjs_require__(81); -var _symbol_utils = __w_pdfjs_require__(78); -var _xfa_object = __w_pdfjs_require__(87); -var _utils = __w_pdfjs_require__(84); -var _util = __w_pdfjs_require__(2); -const CONFIG_NS_ID = _namespaces.NamespaceIds.config.id; -class Acrobat extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "acrobat", true); - this.acrobat7 = null; - this.autoSave = null; - this.common = null; - this.validate = null; - this.validateApprovalSignatures = null; - this.submitUrl = new _xfa_object.XFAObjectArray(); - } -} -class Acrobat7 extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "acrobat7", true); - this.dynamicRender = null; - } -} -class ADBE_JSConsole extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "ADBE_JSConsole", ["delegate", "Enable", "Disable"]); - } -} -class ADBE_JSDebugger extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "ADBE_JSDebugger", ["delegate", "Enable", "Disable"]); - } -} -class AddSilentPrint extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "addSilentPrint"); - } -} -class AddViewerPreferences extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "addViewerPreferences"); - } -} -class AdjustData extends _xfa_object.Option10 { - constructor(attributes) { - super(CONFIG_NS_ID, "adjustData"); - } -} -class AdobeExtensionLevel extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "adobeExtensionLevel", 0, n => n >= 1 && n <= 8); - } -} -class Agent extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "agent", true); - this.name = attributes.name ? attributes.name.trim() : ""; - this.common = new _xfa_object.XFAObjectArray(); - } -} -class AlwaysEmbed extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "alwaysEmbed"); - } -} -class Amd extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "amd"); - } -} -class Area extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "area"); - this.level = (0, _utils.getInteger)({ - data: attributes.level, - defaultValue: 0, - validate: n => n >= 1 && n <= 3 - }); - this.name = (0, _utils.getStringOption)(attributes.name, ["", "barcode", "coreinit", "deviceDriver", "font", "general", "layout", "merge", "script", "signature", "sourceSet", "templateCache"]); - } -} -class Attributes extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "attributes", ["preserve", "delegate", "ignore"]); - } -} -class AutoSave extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "autoSave", ["disabled", "enabled"]); - } -} -class Base extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "base"); - } -} -class BatchOutput extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "batchOutput"); - this.format = (0, _utils.getStringOption)(attributes.format, ["none", "concat", "zip", "zipCompress"]); - } -} -class BehaviorOverride extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "behaviorOverride"); - } - [_symbol_utils.$finalize]() { - this[_symbol_utils.$content] = new Map(this[_symbol_utils.$content].trim().split(/\s+/).filter(x => x.includes(":")).map(x => x.split(":", 2))); - } -} -class Cache extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "cache", true); - this.templateCache = null; - } -} -class Change extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "change"); - } -} -class Common extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "common", true); - this.data = null; - this.locale = null; - this.localeSet = null; - this.messaging = null; - this.suppressBanner = null; - this.template = null; - this.validationMessaging = null; - this.versionControl = null; - this.log = new _xfa_object.XFAObjectArray(); - } -} -class Compress extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "compress"); - this.scope = (0, _utils.getStringOption)(attributes.scope, ["imageOnly", "document"]); - } -} -class CompressLogicalStructure extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "compressLogicalStructure"); - } -} -class CompressObjectStream extends _xfa_object.Option10 { - constructor(attributes) { - super(CONFIG_NS_ID, "compressObjectStream"); - } -} -class Compression extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "compression", true); - this.compressLogicalStructure = null; - this.compressObjectStream = null; - this.level = null; - this.type = null; - } -} -class Config extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "config", true); - this.acrobat = null; - this.present = null; - this.trace = null; - this.agent = new _xfa_object.XFAObjectArray(); - } -} -class Conformance extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "conformance", ["A", "B"]); - } -} -class ContentCopy extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "contentCopy"); - } -} -class Copies extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "copies", 1, n => n >= 1); - } -} -class Creator extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "creator"); - } -} -class CurrentPage extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "currentPage", 0, n => n >= 0); - } -} -class Data extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "data", true); - this.adjustData = null; - this.attributes = null; - this.incrementalLoad = null; - this.outputXSL = null; - this.range = null; - this.record = null; - this.startNode = null; - this.uri = null; - this.window = null; - this.xsl = null; - this.excludeNS = new _xfa_object.XFAObjectArray(); - this.transform = new _xfa_object.XFAObjectArray(); - } -} -class Debug extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "debug", true); - this.uri = null; - } -} -class DefaultTypeface extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "defaultTypeface"); - this.writingScript = (0, _utils.getStringOption)(attributes.writingScript, ["*", "Arabic", "Cyrillic", "EastEuropeanRoman", "Greek", "Hebrew", "Japanese", "Korean", "Roman", "SimplifiedChinese", "Thai", "TraditionalChinese", "Vietnamese"]); - } -} -class Destination extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "destination", ["pdf", "pcl", "ps", "webClient", "zpl"]); - } -} -class DocumentAssembly extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "documentAssembly"); - } -} -class Driver extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "driver", true); - this.name = attributes.name ? attributes.name.trim() : ""; - this.fontInfo = null; - this.xdc = null; - } -} -class DuplexOption extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "duplexOption", ["simplex", "duplexFlipLongEdge", "duplexFlipShortEdge"]); - } -} -class DynamicRender extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "dynamicRender", ["forbidden", "required"]); - } -} -class Embed extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "embed"); - } -} -class Encrypt extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "encrypt"); - } -} -class Encryption extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "encryption", true); - this.encrypt = null; - this.encryptionLevel = null; - this.permissions = null; - } -} -class EncryptionLevel extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "encryptionLevel", ["40bit", "128bit"]); - } -} -class Enforce extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "enforce"); - } -} -class Equate extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "equate"); - this.force = (0, _utils.getInteger)({ - data: attributes.force, - defaultValue: 1, - validate: n => n === 0 - }); - this.from = attributes.from || ""; - this.to = attributes.to || ""; - } -} -class EquateRange extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "equateRange"); - this.from = attributes.from || ""; - this.to = attributes.to || ""; - this._unicodeRange = attributes.unicodeRange || ""; - } - get unicodeRange() { - const ranges = []; - const unicodeRegex = /U\+([0-9a-fA-F]+)/; - const unicodeRange = this._unicodeRange; - for (let range of unicodeRange.split(",").map(x => x.trim()).filter(x => !!x)) { - range = range.split("-", 2).map(x => { - const found = x.match(unicodeRegex); - if (!found) { - return 0; - } - return parseInt(found[1], 16); - }); - if (range.length === 1) { - range.push(range[0]); - } - ranges.push(range); - } - return (0, _util.shadow)(this, "unicodeRange", ranges); - } -} -class Exclude extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "exclude"); - } - [_symbol_utils.$finalize]() { - this[_symbol_utils.$content] = this[_symbol_utils.$content].trim().split(/\s+/).filter(x => x && ["calculate", "close", "enter", "exit", "initialize", "ready", "validate"].includes(x)); - } -} -class ExcludeNS extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "excludeNS"); - } -} -class FlipLabel extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "flipLabel", ["usePrinterSetting", "on", "off"]); - } -} -class FontInfo extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "fontInfo", true); - this.embed = null; - this.map = null; - this.subsetBelow = null; - this.alwaysEmbed = new _xfa_object.XFAObjectArray(); - this.defaultTypeface = new _xfa_object.XFAObjectArray(); - this.neverEmbed = new _xfa_object.XFAObjectArray(); - } -} -class FormFieldFilling extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "formFieldFilling"); - } -} -class GroupParent extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "groupParent"); - } -} -class IfEmpty extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "ifEmpty", ["dataValue", "dataGroup", "ignore", "remove"]); - } -} -class IncludeXDPContent extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "includeXDPContent"); - } -} -class IncrementalLoad extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "incrementalLoad", ["none", "forwardOnly"]); - } -} -class IncrementalMerge extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "incrementalMerge"); - } -} -class Interactive extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "interactive"); - } -} -class Jog extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "jog", ["usePrinterSetting", "none", "pageSet"]); - } -} -class LabelPrinter extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "labelPrinter", true); - this.name = (0, _utils.getStringOption)(attributes.name, ["zpl", "dpl", "ipl", "tcpl"]); - this.batchOutput = null; - this.flipLabel = null; - this.fontInfo = null; - this.xdc = null; - } -} -class Layout extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "layout", ["paginate", "panel"]); - } -} -class Level extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "level", 0, n => n > 0); - } -} -class Linearized extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "linearized"); - } -} -class Locale extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "locale"); - } -} -class LocaleSet extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "localeSet"); - } -} -class Log extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "log", true); - this.mode = null; - this.threshold = null; - this.to = null; - this.uri = null; - } -} -class MapElement extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "map", true); - this.equate = new _xfa_object.XFAObjectArray(); - this.equateRange = new _xfa_object.XFAObjectArray(); - } -} -class MediumInfo extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "mediumInfo", true); - this.map = null; - } -} -class Message extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "message", true); - this.msgId = null; - this.severity = null; - } -} -class Messaging extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "messaging", true); - this.message = new _xfa_object.XFAObjectArray(); - } -} -class Mode extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "mode", ["append", "overwrite"]); - } -} -class ModifyAnnots extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "modifyAnnots"); - } -} -class MsgId extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "msgId", 1, n => n >= 1); - } -} -class NameAttr extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "nameAttr"); - } -} -class NeverEmbed extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "neverEmbed"); - } -} -class NumberOfCopies extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "numberOfCopies", null, n => n >= 2 && n <= 5); - } -} -class OpenAction extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "openAction", true); - this.destination = null; - } -} -class Output extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "output", true); - this.to = null; - this.type = null; - this.uri = null; - } -} -class OutputBin extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "outputBin"); - } -} -class OutputXSL extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "outputXSL", true); - this.uri = null; - } -} -class Overprint extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "overprint", ["none", "both", "draw", "field"]); - } -} -class Packets extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "packets"); - } - [_symbol_utils.$finalize]() { - if (this[_symbol_utils.$content] === "*") { - return; - } - this[_symbol_utils.$content] = this[_symbol_utils.$content].trim().split(/\s+/).filter(x => ["config", "datasets", "template", "xfdf", "xslt"].includes(x)); - } -} -class PageOffset extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "pageOffset"); - this.x = (0, _utils.getInteger)({ - data: attributes.x, - defaultValue: "useXDCSetting", - validate: n => true - }); - this.y = (0, _utils.getInteger)({ - data: attributes.y, - defaultValue: "useXDCSetting", - validate: n => true - }); - } -} -class PageRange extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "pageRange"); - } - [_symbol_utils.$finalize]() { - const numbers = this[_symbol_utils.$content].trim().split(/\s+/).map(x => parseInt(x, 10)); - const ranges = []; - for (let i = 0, ii = numbers.length; i < ii; i += 2) { - ranges.push(numbers.slice(i, i + 2)); - } - this[_symbol_utils.$content] = ranges; - } -} -class Pagination extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "pagination", ["simplex", "duplexShortEdge", "duplexLongEdge"]); - } -} -class PaginationOverride extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "paginationOverride", ["none", "forceDuplex", "forceDuplexLongEdge", "forceDuplexShortEdge", "forceSimplex"]); - } -} -class Part extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "part", 1, n => false); - } -} -class Pcl extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "pcl", true); - this.name = attributes.name || ""; - this.batchOutput = null; - this.fontInfo = null; - this.jog = null; - this.mediumInfo = null; - this.outputBin = null; - this.pageOffset = null; - this.staple = null; - this.xdc = null; - } -} -class Pdf extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "pdf", true); - this.name = attributes.name || ""; - this.adobeExtensionLevel = null; - this.batchOutput = null; - this.compression = null; - this.creator = null; - this.encryption = null; - this.fontInfo = null; - this.interactive = null; - this.linearized = null; - this.openAction = null; - this.pdfa = null; - this.producer = null; - this.renderPolicy = null; - this.scriptModel = null; - this.silentPrint = null; - this.submitFormat = null; - this.tagged = null; - this.version = null; - this.viewerPreferences = null; - this.xdc = null; - } -} -class Pdfa extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "pdfa", true); - this.amd = null; - this.conformance = null; - this.includeXDPContent = null; - this.part = null; - } -} -class Permissions extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "permissions", true); - this.accessibleContent = null; - this.change = null; - this.contentCopy = null; - this.documentAssembly = null; - this.formFieldFilling = null; - this.modifyAnnots = null; - this.plaintextMetadata = null; - this.print = null; - this.printHighQuality = null; - } -} -class PickTrayByPDFSize extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "pickTrayByPDFSize"); - } -} -class Picture extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "picture"); - } -} -class PlaintextMetadata extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "plaintextMetadata"); - } -} -class Presence extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "presence", ["preserve", "dissolve", "dissolveStructure", "ignore", "remove"]); - } -} -class Present extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "present", true); - this.behaviorOverride = null; - this.cache = null; - this.common = null; - this.copies = null; - this.destination = null; - this.incrementalMerge = null; - this.layout = null; - this.output = null; - this.overprint = null; - this.pagination = null; - this.paginationOverride = null; - this.script = null; - this.validate = null; - this.xdp = null; - this.driver = new _xfa_object.XFAObjectArray(); - this.labelPrinter = new _xfa_object.XFAObjectArray(); - this.pcl = new _xfa_object.XFAObjectArray(); - this.pdf = new _xfa_object.XFAObjectArray(); - this.ps = new _xfa_object.XFAObjectArray(); - this.submitUrl = new _xfa_object.XFAObjectArray(); - this.webClient = new _xfa_object.XFAObjectArray(); - this.zpl = new _xfa_object.XFAObjectArray(); - } -} -class Print extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "print"); - } -} -class PrintHighQuality extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "printHighQuality"); - } -} -class PrintScaling extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "printScaling", ["appdefault", "noScaling"]); - } -} -class PrinterName extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "printerName"); - } -} -class Producer extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "producer"); - } -} -class Ps extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "ps", true); - this.name = attributes.name || ""; - this.batchOutput = null; - this.fontInfo = null; - this.jog = null; - this.mediumInfo = null; - this.outputBin = null; - this.staple = null; - this.xdc = null; - } -} -class Range extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "range"); - } - [_symbol_utils.$finalize]() { - this[_symbol_utils.$content] = this[_symbol_utils.$content].trim().split(/\s*,\s*/, 2).map(range => range.split("-").map(x => parseInt(x.trim(), 10))).filter(range => range.every(x => !isNaN(x))).map(range => { - if (range.length === 1) { - range.push(range[0]); - } - return range; - }); - } -} -class Record extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "record"); - } - [_symbol_utils.$finalize]() { - this[_symbol_utils.$content] = this[_symbol_utils.$content].trim(); - const n = parseInt(this[_symbol_utils.$content], 10); - if (!isNaN(n) && n >= 0) { - this[_symbol_utils.$content] = n; - } - } -} -class Relevant extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "relevant"); - } - [_symbol_utils.$finalize]() { - this[_symbol_utils.$content] = this[_symbol_utils.$content].trim().split(/\s+/); - } -} -class Rename extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "rename"); - } - [_symbol_utils.$finalize]() { - this[_symbol_utils.$content] = this[_symbol_utils.$content].trim(); - if (this[_symbol_utils.$content].toLowerCase().startsWith("xml") || new RegExp("[\\p{L}_][\\p{L}\\d._\\p{M}-]*", "u").test(this[_symbol_utils.$content])) { - (0, _util.warn)("XFA - Rename: invalid XFA name"); - } - } -} -class RenderPolicy extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "renderPolicy", ["server", "client"]); - } -} -class RunScripts extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "runScripts", ["both", "client", "none", "server"]); - } -} -class Script extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "script", true); - this.currentPage = null; - this.exclude = null; - this.runScripts = null; - } -} -class ScriptModel extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "scriptModel", ["XFA", "none"]); - } -} -class Severity extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "severity", ["ignore", "error", "information", "trace", "warning"]); - } -} -class SilentPrint extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "silentPrint", true); - this.addSilentPrint = null; - this.printerName = null; - } -} -class Staple extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "staple"); - this.mode = (0, _utils.getStringOption)(attributes.mode, ["usePrinterSetting", "on", "off"]); - } -} -class StartNode extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "startNode"); - } -} -class StartPage extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "startPage", 0, n => true); - } -} -class SubmitFormat extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "submitFormat", ["html", "delegate", "fdf", "xml", "pdf"]); - } -} -class SubmitUrl extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "submitUrl"); - } -} -class SubsetBelow extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "subsetBelow", 100, n => n >= 0 && n <= 100); - } -} -class SuppressBanner extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "suppressBanner"); - } -} -class Tagged extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "tagged"); - } -} -class Template extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "template", true); - this.base = null; - this.relevant = null; - this.startPage = null; - this.uri = null; - this.xsl = null; - } -} -class Threshold extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "threshold", ["trace", "error", "information", "warning"]); - } -} -class To extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "to", ["null", "memory", "stderr", "stdout", "system", "uri"]); - } -} -class TemplateCache extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "templateCache"); - this.maxEntries = (0, _utils.getInteger)({ - data: attributes.maxEntries, - defaultValue: 5, - validate: n => n >= 0 - }); - } -} -class Trace extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "trace", true); - this.area = new _xfa_object.XFAObjectArray(); - } -} -class Transform extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "transform", true); - this.groupParent = null; - this.ifEmpty = null; - this.nameAttr = null; - this.picture = null; - this.presence = null; - this.rename = null; - this.whitespace = null; - } -} -class Type extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "type", ["none", "ascii85", "asciiHex", "ccittfax", "flate", "lzw", "runLength", "native", "xdp", "mergedXDP"]); - } -} -class Uri extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "uri"); - } -} -class Validate extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "validate", ["preSubmit", "prePrint", "preExecute", "preSave"]); - } -} -class ValidateApprovalSignatures extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "validateApprovalSignatures"); - } - [_symbol_utils.$finalize]() { - this[_symbol_utils.$content] = this[_symbol_utils.$content].trim().split(/\s+/).filter(x => ["docReady", "postSign"].includes(x)); - } -} -class ValidationMessaging extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "validationMessaging", ["allMessagesIndividually", "allMessagesTogether", "firstMessageOnly", "noMessages"]); - } -} -class Version extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "version", ["1.7", "1.6", "1.5", "1.4", "1.3", "1.2"]); - } -} -class VersionControl extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "VersionControl"); - this.outputBelow = (0, _utils.getStringOption)(attributes.outputBelow, ["warn", "error", "update"]); - this.sourceAbove = (0, _utils.getStringOption)(attributes.sourceAbove, ["warn", "error"]); - this.sourceBelow = (0, _utils.getStringOption)(attributes.sourceBelow, ["update", "maintain"]); - } -} -class ViewerPreferences extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "viewerPreferences", true); - this.ADBE_JSConsole = null; - this.ADBE_JSDebugger = null; - this.addViewerPreferences = null; - this.duplexOption = null; - this.enforce = null; - this.numberOfCopies = null; - this.pageRange = null; - this.pickTrayByPDFSize = null; - this.printScaling = null; - } -} -class WebClient extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "webClient", true); - this.name = attributes.name ? attributes.name.trim() : ""; - this.fontInfo = null; - this.xdc = null; - } -} -class Whitespace extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "whitespace", ["preserve", "ltrim", "normalize", "rtrim", "trim"]); - } -} -class Window extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "window"); - } - [_symbol_utils.$finalize]() { - const pair = this[_symbol_utils.$content].trim().split(/\s*,\s*/, 2).map(x => parseInt(x, 10)); - if (pair.some(x => isNaN(x))) { - this[_symbol_utils.$content] = [0, 0]; - return; - } - if (pair.length === 1) { - pair.push(pair[0]); - } - this[_symbol_utils.$content] = pair; - } -} -class Xdc extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "xdc", true); - this.uri = new _xfa_object.XFAObjectArray(); - this.xsl = new _xfa_object.XFAObjectArray(); - } -} -class Xdp extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "xdp", true); - this.packets = null; - } -} -class Xsl extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "xsl", true); - this.debug = null; - this.uri = null; - } -} -class Zpl extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "zpl", true); - this.name = attributes.name ? attributes.name.trim() : ""; - this.batchOutput = null; - this.flipLabel = null; - this.fontInfo = null; - this.xdc = null; - } -} -class ConfigNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (ConfigNamespace.hasOwnProperty(name)) { - return ConfigNamespace[name](attributes); - } - return undefined; - } - static acrobat(attrs) { - return new Acrobat(attrs); - } - static acrobat7(attrs) { - return new Acrobat7(attrs); - } - static ADBE_JSConsole(attrs) { - return new ADBE_JSConsole(attrs); - } - static ADBE_JSDebugger(attrs) { - return new ADBE_JSDebugger(attrs); - } - static addSilentPrint(attrs) { - return new AddSilentPrint(attrs); - } - static addViewerPreferences(attrs) { - return new AddViewerPreferences(attrs); - } - static adjustData(attrs) { - return new AdjustData(attrs); - } - static adobeExtensionLevel(attrs) { - return new AdobeExtensionLevel(attrs); - } - static agent(attrs) { - return new Agent(attrs); - } - static alwaysEmbed(attrs) { - return new AlwaysEmbed(attrs); - } - static amd(attrs) { - return new Amd(attrs); - } - static area(attrs) { - return new Area(attrs); - } - static attributes(attrs) { - return new Attributes(attrs); - } - static autoSave(attrs) { - return new AutoSave(attrs); - } - static base(attrs) { - return new Base(attrs); - } - static batchOutput(attrs) { - return new BatchOutput(attrs); - } - static behaviorOverride(attrs) { - return new BehaviorOverride(attrs); - } - static cache(attrs) { - return new Cache(attrs); - } - static change(attrs) { - return new Change(attrs); - } - static common(attrs) { - return new Common(attrs); - } - static compress(attrs) { - return new Compress(attrs); - } - static compressLogicalStructure(attrs) { - return new CompressLogicalStructure(attrs); - } - static compressObjectStream(attrs) { - return new CompressObjectStream(attrs); - } - static compression(attrs) { - return new Compression(attrs); - } - static config(attrs) { - return new Config(attrs); - } - static conformance(attrs) { - return new Conformance(attrs); - } - static contentCopy(attrs) { - return new ContentCopy(attrs); - } - static copies(attrs) { - return new Copies(attrs); - } - static creator(attrs) { - return new Creator(attrs); - } - static currentPage(attrs) { - return new CurrentPage(attrs); - } - static data(attrs) { - return new Data(attrs); - } - static debug(attrs) { - return new Debug(attrs); - } - static defaultTypeface(attrs) { - return new DefaultTypeface(attrs); - } - static destination(attrs) { - return new Destination(attrs); - } - static documentAssembly(attrs) { - return new DocumentAssembly(attrs); - } - static driver(attrs) { - return new Driver(attrs); - } - static duplexOption(attrs) { - return new DuplexOption(attrs); - } - static dynamicRender(attrs) { - return new DynamicRender(attrs); - } - static embed(attrs) { - return new Embed(attrs); - } - static encrypt(attrs) { - return new Encrypt(attrs); - } - static encryption(attrs) { - return new Encryption(attrs); - } - static encryptionLevel(attrs) { - return new EncryptionLevel(attrs); - } - static enforce(attrs) { - return new Enforce(attrs); - } - static equate(attrs) { - return new Equate(attrs); - } - static equateRange(attrs) { - return new EquateRange(attrs); - } - static exclude(attrs) { - return new Exclude(attrs); - } - static excludeNS(attrs) { - return new ExcludeNS(attrs); - } - static flipLabel(attrs) { - return new FlipLabel(attrs); - } - static fontInfo(attrs) { - return new FontInfo(attrs); - } - static formFieldFilling(attrs) { - return new FormFieldFilling(attrs); - } - static groupParent(attrs) { - return new GroupParent(attrs); - } - static ifEmpty(attrs) { - return new IfEmpty(attrs); - } - static includeXDPContent(attrs) { - return new IncludeXDPContent(attrs); - } - static incrementalLoad(attrs) { - return new IncrementalLoad(attrs); - } - static incrementalMerge(attrs) { - return new IncrementalMerge(attrs); - } - static interactive(attrs) { - return new Interactive(attrs); - } - static jog(attrs) { - return new Jog(attrs); - } - static labelPrinter(attrs) { - return new LabelPrinter(attrs); - } - static layout(attrs) { - return new Layout(attrs); - } - static level(attrs) { - return new Level(attrs); - } - static linearized(attrs) { - return new Linearized(attrs); - } - static locale(attrs) { - return new Locale(attrs); - } - static localeSet(attrs) { - return new LocaleSet(attrs); - } - static log(attrs) { - return new Log(attrs); - } - static map(attrs) { - return new MapElement(attrs); - } - static mediumInfo(attrs) { - return new MediumInfo(attrs); - } - static message(attrs) { - return new Message(attrs); - } - static messaging(attrs) { - return new Messaging(attrs); - } - static mode(attrs) { - return new Mode(attrs); - } - static modifyAnnots(attrs) { - return new ModifyAnnots(attrs); - } - static msgId(attrs) { - return new MsgId(attrs); - } - static nameAttr(attrs) { - return new NameAttr(attrs); - } - static neverEmbed(attrs) { - return new NeverEmbed(attrs); - } - static numberOfCopies(attrs) { - return new NumberOfCopies(attrs); - } - static openAction(attrs) { - return new OpenAction(attrs); - } - static output(attrs) { - return new Output(attrs); - } - static outputBin(attrs) { - return new OutputBin(attrs); - } - static outputXSL(attrs) { - return new OutputXSL(attrs); - } - static overprint(attrs) { - return new Overprint(attrs); - } - static packets(attrs) { - return new Packets(attrs); - } - static pageOffset(attrs) { - return new PageOffset(attrs); - } - static pageRange(attrs) { - return new PageRange(attrs); - } - static pagination(attrs) { - return new Pagination(attrs); - } - static paginationOverride(attrs) { - return new PaginationOverride(attrs); - } - static part(attrs) { - return new Part(attrs); - } - static pcl(attrs) { - return new Pcl(attrs); - } - static pdf(attrs) { - return new Pdf(attrs); - } - static pdfa(attrs) { - return new Pdfa(attrs); - } - static permissions(attrs) { - return new Permissions(attrs); - } - static pickTrayByPDFSize(attrs) { - return new PickTrayByPDFSize(attrs); - } - static picture(attrs) { - return new Picture(attrs); - } - static plaintextMetadata(attrs) { - return new PlaintextMetadata(attrs); - } - static presence(attrs) { - return new Presence(attrs); - } - static present(attrs) { - return new Present(attrs); - } - static print(attrs) { - return new Print(attrs); - } - static printHighQuality(attrs) { - return new PrintHighQuality(attrs); - } - static printScaling(attrs) { - return new PrintScaling(attrs); - } - static printerName(attrs) { - return new PrinterName(attrs); - } - static producer(attrs) { - return new Producer(attrs); - } - static ps(attrs) { - return new Ps(attrs); - } - static range(attrs) { - return new Range(attrs); - } - static record(attrs) { - return new Record(attrs); - } - static relevant(attrs) { - return new Relevant(attrs); - } - static rename(attrs) { - return new Rename(attrs); - } - static renderPolicy(attrs) { - return new RenderPolicy(attrs); - } - static runScripts(attrs) { - return new RunScripts(attrs); - } - static script(attrs) { - return new Script(attrs); - } - static scriptModel(attrs) { - return new ScriptModel(attrs); - } - static severity(attrs) { - return new Severity(attrs); - } - static silentPrint(attrs) { - return new SilentPrint(attrs); - } - static staple(attrs) { - return new Staple(attrs); - } - static startNode(attrs) { - return new StartNode(attrs); - } - static startPage(attrs) { - return new StartPage(attrs); - } - static submitFormat(attrs) { - return new SubmitFormat(attrs); - } - static submitUrl(attrs) { - return new SubmitUrl(attrs); - } - static subsetBelow(attrs) { - return new SubsetBelow(attrs); - } - static suppressBanner(attrs) { - return new SuppressBanner(attrs); - } - static tagged(attrs) { - return new Tagged(attrs); - } - static template(attrs) { - return new Template(attrs); - } - static templateCache(attrs) { - return new TemplateCache(attrs); - } - static threshold(attrs) { - return new Threshold(attrs); - } - static to(attrs) { - return new To(attrs); - } - static trace(attrs) { - return new Trace(attrs); - } - static transform(attrs) { - return new Transform(attrs); - } - static type(attrs) { - return new Type(attrs); - } - static uri(attrs) { - return new Uri(attrs); - } - static validate(attrs) { - return new Validate(attrs); - } - static validateApprovalSignatures(attrs) { - return new ValidateApprovalSignatures(attrs); - } - static validationMessaging(attrs) { - return new ValidationMessaging(attrs); - } - static version(attrs) { - return new Version(attrs); - } - static versionControl(attrs) { - return new VersionControl(attrs); - } - static viewerPreferences(attrs) { - return new ViewerPreferences(attrs); - } - static webClient(attrs) { - return new WebClient(attrs); - } - static whitespace(attrs) { - return new Whitespace(attrs); - } - static window(attrs) { - return new Window(attrs); - } - static xdc(attrs) { - return new Xdc(attrs); - } - static xdp(attrs) { - return new Xdp(attrs); - } - static xsl(attrs) { - return new Xsl(attrs); - } - static zpl(attrs) { - return new Zpl(attrs); - } -} -exports.ConfigNamespace = ConfigNamespace; - -/***/ }), -/* 94 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ConnectionSetNamespace = void 0; -var _namespaces = __w_pdfjs_require__(81); -var _xfa_object = __w_pdfjs_require__(87); -const CONNECTION_SET_NS_ID = _namespaces.NamespaceIds.connectionSet.id; -class ConnectionSet extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "connectionSet", true); - this.wsdlConnection = new _xfa_object.XFAObjectArray(); - this.xmlConnection = new _xfa_object.XFAObjectArray(); - this.xsdConnection = new _xfa_object.XFAObjectArray(); - } -} -class EffectiveInputPolicy extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "effectiveInputPolicy"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class EffectiveOutputPolicy extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "effectiveOutputPolicy"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Operation extends _xfa_object.StringObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "operation"); - this.id = attributes.id || ""; - this.input = attributes.input || ""; - this.name = attributes.name || ""; - this.output = attributes.output || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class RootElement extends _xfa_object.StringObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "rootElement"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class SoapAction extends _xfa_object.StringObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "soapAction"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class SoapAddress extends _xfa_object.StringObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "soapAddress"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class Uri extends _xfa_object.StringObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "uri"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class WsdlAddress extends _xfa_object.StringObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "wsdlAddress"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } -} -class WsdlConnection extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "wsdlConnection", true); - this.dataDescription = attributes.dataDescription || ""; - this.name = attributes.name || ""; - this.effectiveInputPolicy = null; - this.effectiveOutputPolicy = null; - this.operation = null; - this.soapAction = null; - this.soapAddress = null; - this.wsdlAddress = null; - } -} -class XmlConnection extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "xmlConnection", true); - this.dataDescription = attributes.dataDescription || ""; - this.name = attributes.name || ""; - this.uri = null; - } -} -class XsdConnection extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "xsdConnection", true); - this.dataDescription = attributes.dataDescription || ""; - this.name = attributes.name || ""; - this.rootElement = null; - this.uri = null; - } -} -class ConnectionSetNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (ConnectionSetNamespace.hasOwnProperty(name)) { - return ConnectionSetNamespace[name](attributes); - } - return undefined; - } - static connectionSet(attrs) { - return new ConnectionSet(attrs); - } - static effectiveInputPolicy(attrs) { - return new EffectiveInputPolicy(attrs); - } - static effectiveOutputPolicy(attrs) { - return new EffectiveOutputPolicy(attrs); - } - static operation(attrs) { - return new Operation(attrs); - } - static rootElement(attrs) { - return new RootElement(attrs); - } - static soapAction(attrs) { - return new SoapAction(attrs); - } - static soapAddress(attrs) { - return new SoapAddress(attrs); - } - static uri(attrs) { - return new Uri(attrs); - } - static wsdlAddress(attrs) { - return new WsdlAddress(attrs); - } - static wsdlConnection(attrs) { - return new WsdlConnection(attrs); - } - static xmlConnection(attrs) { - return new XmlConnection(attrs); - } - static xsdConnection(attrs) { - return new XsdConnection(attrs); - } -} -exports.ConnectionSetNamespace = ConnectionSetNamespace; - -/***/ }), -/* 95 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.DatasetsNamespace = void 0; -var _symbol_utils = __w_pdfjs_require__(78); -var _namespaces = __w_pdfjs_require__(81); -var _xfa_object = __w_pdfjs_require__(87); -const DATASETS_NS_ID = _namespaces.NamespaceIds.datasets.id; -class Data extends _xfa_object.XmlObject { - constructor(attributes) { - super(DATASETS_NS_ID, "data", attributes); - } - [_symbol_utils.$isNsAgnostic]() { - return true; - } -} -class Datasets extends _xfa_object.XFAObject { - constructor(attributes) { - super(DATASETS_NS_ID, "datasets", true); - this.data = null; - this.Signature = null; - } - [_symbol_utils.$onChild](child) { - const name = child[_symbol_utils.$nodeName]; - if (name === "data" && child[_symbol_utils.$namespaceId] === DATASETS_NS_ID || name === "Signature" && child[_symbol_utils.$namespaceId] === _namespaces.NamespaceIds.signature.id) { - this[name] = child; - } - this[_symbol_utils.$appendChild](child); - } -} -class DatasetsNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (DatasetsNamespace.hasOwnProperty(name)) { - return DatasetsNamespace[name](attributes); - } - return undefined; - } - static datasets(attributes) { - return new Datasets(attributes); - } - static data(attributes) { - return new Data(attributes); - } -} -exports.DatasetsNamespace = DatasetsNamespace; - -/***/ }), -/* 96 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.LocaleSetNamespace = void 0; -var _namespaces = __w_pdfjs_require__(81); -var _xfa_object = __w_pdfjs_require__(87); -var _utils = __w_pdfjs_require__(84); -const LOCALE_SET_NS_ID = _namespaces.NamespaceIds.localeSet.id; -class CalendarSymbols extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "calendarSymbols", true); - this.name = "gregorian"; - this.dayNames = new _xfa_object.XFAObjectArray(2); - this.eraNames = null; - this.meridiemNames = null; - this.monthNames = new _xfa_object.XFAObjectArray(2); - } -} -class CurrencySymbol extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "currencySymbol"); - this.name = (0, _utils.getStringOption)(attributes.name, ["symbol", "isoname", "decimal"]); - } -} -class CurrencySymbols extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "currencySymbols", true); - this.currencySymbol = new _xfa_object.XFAObjectArray(3); - } -} -class DatePattern extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "datePattern"); - this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]); - } -} -class DatePatterns extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "datePatterns", true); - this.datePattern = new _xfa_object.XFAObjectArray(4); - } -} -class DateTimeSymbols extends _xfa_object.ContentObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "dateTimeSymbols"); - } -} -class Day extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "day"); - } -} -class DayNames extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "dayNames", true); - this.abbr = (0, _utils.getInteger)({ - data: attributes.abbr, - defaultValue: 0, - validate: x => x === 1 - }); - this.day = new _xfa_object.XFAObjectArray(7); - } -} -class Era extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "era"); - } -} -class EraNames extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "eraNames", true); - this.era = new _xfa_object.XFAObjectArray(2); - } -} -class Locale extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "locale", true); - this.desc = attributes.desc || ""; - this.name = "isoname"; - this.calendarSymbols = null; - this.currencySymbols = null; - this.datePatterns = null; - this.dateTimeSymbols = null; - this.numberPatterns = null; - this.numberSymbols = null; - this.timePatterns = null; - this.typeFaces = null; - } -} -class LocaleSet extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "localeSet", true); - this.locale = new _xfa_object.XFAObjectArray(); - } -} -class Meridiem extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "meridiem"); - } -} -class MeridiemNames extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "meridiemNames", true); - this.meridiem = new _xfa_object.XFAObjectArray(2); - } -} -class Month extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "month"); - } -} -class MonthNames extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "monthNames", true); - this.abbr = (0, _utils.getInteger)({ - data: attributes.abbr, - defaultValue: 0, - validate: x => x === 1 - }); - this.month = new _xfa_object.XFAObjectArray(12); - } -} -class NumberPattern extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "numberPattern"); - this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]); - } -} -class NumberPatterns extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "numberPatterns", true); - this.numberPattern = new _xfa_object.XFAObjectArray(4); - } -} -class NumberSymbol extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "numberSymbol"); - this.name = (0, _utils.getStringOption)(attributes.name, ["decimal", "grouping", "percent", "minus", "zero"]); - } -} -class NumberSymbols extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "numberSymbols", true); - this.numberSymbol = new _xfa_object.XFAObjectArray(5); - } -} -class TimePattern extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "timePattern"); - this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]); - } -} -class TimePatterns extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "timePatterns", true); - this.timePattern = new _xfa_object.XFAObjectArray(4); - } -} -class TypeFace extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "typeFace", true); - this.name = attributes.name | ""; - } -} -class TypeFaces extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "typeFaces", true); - this.typeFace = new _xfa_object.XFAObjectArray(); - } -} -class LocaleSetNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (LocaleSetNamespace.hasOwnProperty(name)) { - return LocaleSetNamespace[name](attributes); - } - return undefined; - } - static calendarSymbols(attrs) { - return new CalendarSymbols(attrs); - } - static currencySymbol(attrs) { - return new CurrencySymbol(attrs); - } - static currencySymbols(attrs) { - return new CurrencySymbols(attrs); - } - static datePattern(attrs) { - return new DatePattern(attrs); - } - static datePatterns(attrs) { - return new DatePatterns(attrs); - } - static dateTimeSymbols(attrs) { - return new DateTimeSymbols(attrs); - } - static day(attrs) { - return new Day(attrs); - } - static dayNames(attrs) { - return new DayNames(attrs); - } - static era(attrs) { - return new Era(attrs); - } - static eraNames(attrs) { - return new EraNames(attrs); - } - static locale(attrs) { - return new Locale(attrs); - } - static localeSet(attrs) { - return new LocaleSet(attrs); - } - static meridiem(attrs) { - return new Meridiem(attrs); - } - static meridiemNames(attrs) { - return new MeridiemNames(attrs); - } - static month(attrs) { - return new Month(attrs); - } - static monthNames(attrs) { - return new MonthNames(attrs); - } - static numberPattern(attrs) { - return new NumberPattern(attrs); - } - static numberPatterns(attrs) { - return new NumberPatterns(attrs); - } - static numberSymbol(attrs) { - return new NumberSymbol(attrs); - } - static numberSymbols(attrs) { - return new NumberSymbols(attrs); - } - static timePattern(attrs) { - return new TimePattern(attrs); - } - static timePatterns(attrs) { - return new TimePatterns(attrs); - } - static typeFace(attrs) { - return new TypeFace(attrs); - } - static typeFaces(attrs) { - return new TypeFaces(attrs); - } -} -exports.LocaleSetNamespace = LocaleSetNamespace; - -/***/ }), -/* 97 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.SignatureNamespace = void 0; -var _namespaces = __w_pdfjs_require__(81); -var _xfa_object = __w_pdfjs_require__(87); -const SIGNATURE_NS_ID = _namespaces.NamespaceIds.signature.id; -class Signature extends _xfa_object.XFAObject { - constructor(attributes) { - super(SIGNATURE_NS_ID, "signature", true); - } -} -class SignatureNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (SignatureNamespace.hasOwnProperty(name)) { - return SignatureNamespace[name](attributes); - } - return undefined; - } - static signature(attributes) { - return new Signature(attributes); - } -} -exports.SignatureNamespace = SignatureNamespace; - -/***/ }), -/* 98 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StylesheetNamespace = void 0; -var _namespaces = __w_pdfjs_require__(81); -var _xfa_object = __w_pdfjs_require__(87); -const STYLESHEET_NS_ID = _namespaces.NamespaceIds.stylesheet.id; -class Stylesheet extends _xfa_object.XFAObject { - constructor(attributes) { - super(STYLESHEET_NS_ID, "stylesheet", true); - } -} -class StylesheetNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (StylesheetNamespace.hasOwnProperty(name)) { - return StylesheetNamespace[name](attributes); - } - return undefined; - } - static stylesheet(attributes) { - return new Stylesheet(attributes); - } -} -exports.StylesheetNamespace = StylesheetNamespace; - -/***/ }), -/* 99 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XdpNamespace = void 0; -var _namespaces = __w_pdfjs_require__(81); -var _symbol_utils = __w_pdfjs_require__(78); -var _xfa_object = __w_pdfjs_require__(87); -const XDP_NS_ID = _namespaces.NamespaceIds.xdp.id; -class Xdp extends _xfa_object.XFAObject { - constructor(attributes) { - super(XDP_NS_ID, "xdp", true); - this.uuid = attributes.uuid || ""; - this.timeStamp = attributes.timeStamp || ""; - this.config = null; - this.connectionSet = null; - this.datasets = null; - this.localeSet = null; - this.stylesheet = new _xfa_object.XFAObjectArray(); - this.template = null; - } - [_symbol_utils.$onChildCheck](child) { - const ns = _namespaces.NamespaceIds[child[_symbol_utils.$nodeName]]; - return ns && child[_symbol_utils.$namespaceId] === ns.id; - } -} -class XdpNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (XdpNamespace.hasOwnProperty(name)) { - return XdpNamespace[name](attributes); - } - return undefined; - } - static xdp(attributes) { - return new Xdp(attributes); - } -} -exports.XdpNamespace = XdpNamespace; - -/***/ }), -/* 100 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XhtmlNamespace = void 0; -var _symbol_utils = __w_pdfjs_require__(78); -var _namespaces = __w_pdfjs_require__(81); -var _html_utils = __w_pdfjs_require__(83); -var _utils = __w_pdfjs_require__(84); -var _xfa_object = __w_pdfjs_require__(87); -const XHTML_NS_ID = _namespaces.NamespaceIds.xhtml.id; -const $richText = Symbol(); -const VALID_STYLES = new Set(["color", "font", "font-family", "font-size", "font-stretch", "font-style", "font-weight", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "letter-spacing", "line-height", "orphans", "page-break-after", "page-break-before", "page-break-inside", "tab-interval", "tab-stop", "text-align", "text-decoration", "text-indent", "vertical-align", "widows", "kerning-mode", "xfa-font-horizontal-scale", "xfa-font-vertical-scale", "xfa-spacerun", "xfa-tab-stops"]); -const StyleMapping = new Map([["page-break-after", "breakAfter"], ["page-break-before", "breakBefore"], ["page-break-inside", "breakInside"], ["kerning-mode", value => value === "none" ? "none" : "normal"], ["xfa-font-horizontal-scale", value => `scaleX(${Math.max(0, Math.min(parseInt(value) / 100)).toFixed(2)})`], ["xfa-font-vertical-scale", value => `scaleY(${Math.max(0, Math.min(parseInt(value) / 100)).toFixed(2)})`], ["xfa-spacerun", ""], ["xfa-tab-stops", ""], ["font-size", (value, original) => { - value = original.fontSize = (0, _utils.getMeasurement)(value); - return (0, _html_utils.measureToString)(0.99 * value); -}], ["letter-spacing", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["line-height", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-bottom", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-left", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-right", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-top", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["text-indent", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["font-family", value => value], ["vertical-align", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))]]); -const spacesRegExp = /\s+/g; -const crlfRegExp = /[\r\n]+/g; -const crlfForRichTextRegExp = /\r\n?/g; -function mapStyle(styleStr, node, richText) { - const style = Object.create(null); - if (!styleStr) { - return style; - } - const original = Object.create(null); - for (const [key, value] of styleStr.split(";").map(s => s.split(":", 2))) { - const mapping = StyleMapping.get(key); - if (mapping === "") { - continue; - } - let newValue = value; - if (mapping) { - newValue = typeof mapping === "string" ? mapping : mapping(value, original); - } - if (key.endsWith("scale")) { - style.transform = style.transform ? `${style[key]} ${newValue}` : newValue; - } else { - style[key.replaceAll(/-([a-zA-Z])/g, (_, x) => x.toUpperCase())] = newValue; - } - } - if (style.fontFamily) { - (0, _html_utils.setFontFamily)({ - typeface: style.fontFamily, - weight: style.fontWeight || "normal", - posture: style.fontStyle || "normal", - size: original.fontSize || 0 - }, node, node[_symbol_utils.$globalData].fontFinder, style); - } - if (richText && style.verticalAlign && style.verticalAlign !== "0px" && style.fontSize) { - const SUB_SUPER_SCRIPT_FACTOR = 0.583; - const VERTICAL_FACTOR = 0.333; - const fontSize = (0, _utils.getMeasurement)(style.fontSize); - style.fontSize = (0, _html_utils.measureToString)(fontSize * SUB_SUPER_SCRIPT_FACTOR); - style.verticalAlign = (0, _html_utils.measureToString)(Math.sign((0, _utils.getMeasurement)(style.verticalAlign)) * fontSize * VERTICAL_FACTOR); - } - if (richText && style.fontSize) { - style.fontSize = `calc(${style.fontSize} * var(--scale-factor))`; - } - (0, _html_utils.fixTextIndent)(style); - return style; -} -function checkStyle(node) { - if (!node.style) { - return ""; - } - return node.style.trim().split(/\s*;\s*/).filter(s => !!s).map(s => s.split(/\s*:\s*/, 2)).filter(([key, value]) => { - if (key === "font-family") { - node[_symbol_utils.$globalData].usedTypefaces.add(value); - } - return VALID_STYLES.has(key); - }).map(kv => kv.join(":")).join(";"); -} -const NoWhites = new Set(["body", "html"]); -class XhtmlObject extends _xfa_object.XmlObject { - constructor(attributes, name) { - super(XHTML_NS_ID, name); - this[$richText] = false; - this.style = attributes.style || ""; - } - [_symbol_utils.$clean](builder) { - super[_symbol_utils.$clean](builder); - this.style = checkStyle(this); - } - [_symbol_utils.$acceptWhitespace]() { - return !NoWhites.has(this[_symbol_utils.$nodeName]); - } - [_symbol_utils.$onText](str, richText = false) { - if (!richText) { - str = str.replaceAll(crlfRegExp, ""); - if (!this.style.includes("xfa-spacerun:yes")) { - str = str.replaceAll(spacesRegExp, " "); - } - } else { - this[$richText] = true; - } - if (str) { - this[_symbol_utils.$content] += str; - } - } - [_symbol_utils.$pushGlyphs](measure, mustPop = true) { - const xfaFont = Object.create(null); - const margin = { - top: NaN, - bottom: NaN, - left: NaN, - right: NaN - }; - let lineHeight = null; - for (const [key, value] of this.style.split(";").map(s => s.split(":", 2))) { - switch (key) { - case "font-family": - xfaFont.typeface = (0, _utils.stripQuotes)(value); - break; - case "font-size": - xfaFont.size = (0, _utils.getMeasurement)(value); - break; - case "font-weight": - xfaFont.weight = value; - break; - case "font-style": - xfaFont.posture = value; - break; - case "letter-spacing": - xfaFont.letterSpacing = (0, _utils.getMeasurement)(value); - break; - case "margin": - const values = value.split(/ \t/).map(x => (0, _utils.getMeasurement)(x)); - switch (values.length) { - case 1: - margin.top = margin.bottom = margin.left = margin.right = values[0]; - break; - case 2: - margin.top = margin.bottom = values[0]; - margin.left = margin.right = values[1]; - break; - case 3: - margin.top = values[0]; - margin.bottom = values[2]; - margin.left = margin.right = values[1]; - break; - case 4: - margin.top = values[0]; - margin.left = values[1]; - margin.bottom = values[2]; - margin.right = values[3]; - break; - } - break; - case "margin-top": - margin.top = (0, _utils.getMeasurement)(value); - break; - case "margin-bottom": - margin.bottom = (0, _utils.getMeasurement)(value); - break; - case "margin-left": - margin.left = (0, _utils.getMeasurement)(value); - break; - case "margin-right": - margin.right = (0, _utils.getMeasurement)(value); - break; - case "line-height": - lineHeight = (0, _utils.getMeasurement)(value); - break; - } - } - measure.pushData(xfaFont, margin, lineHeight); - if (this[_symbol_utils.$content]) { - measure.addString(this[_symbol_utils.$content]); - } else { - for (const child of this[_symbol_utils.$getChildren]()) { - if (child[_symbol_utils.$nodeName] === "#text") { - measure.addString(child[_symbol_utils.$content]); - continue; - } - child[_symbol_utils.$pushGlyphs](measure); - } - } - if (mustPop) { - measure.popFont(); - } - } - [_symbol_utils.$toHTML](availableSpace) { - const children = []; - this[_symbol_utils.$extra] = { - children - }; - this[_symbol_utils.$childrenToHTML]({}); - if (children.length === 0 && !this[_symbol_utils.$content]) { - return _utils.HTMLResult.EMPTY; - } - let value; - if (this[$richText]) { - value = this[_symbol_utils.$content] ? this[_symbol_utils.$content].replaceAll(crlfForRichTextRegExp, "\n") : undefined; - } else { - value = this[_symbol_utils.$content] || undefined; - } - return _utils.HTMLResult.success({ - name: this[_symbol_utils.$nodeName], - attributes: { - href: this.href, - style: mapStyle(this.style, this, this[$richText]) - }, - children, - value - }); - } -} -class A extends XhtmlObject { - constructor(attributes) { - super(attributes, "a"); - this.href = (0, _html_utils.fixURL)(attributes.href) || ""; - } -} -class B extends XhtmlObject { - constructor(attributes) { - super(attributes, "b"); - } - [_symbol_utils.$pushGlyphs](measure) { - measure.pushFont({ - weight: "bold" - }); - super[_symbol_utils.$pushGlyphs](measure); - measure.popFont(); - } -} -class Body extends XhtmlObject { - constructor(attributes) { - super(attributes, "body"); - } - [_symbol_utils.$toHTML](availableSpace) { - const res = super[_symbol_utils.$toHTML](availableSpace); - const { - html - } = res; - if (!html) { - return _utils.HTMLResult.EMPTY; - } - html.name = "div"; - html.attributes.class = ["xfaRich"]; - return res; - } -} -class Br extends XhtmlObject { - constructor(attributes) { - super(attributes, "br"); - } - [_symbol_utils.$text]() { - return "\n"; - } - [_symbol_utils.$pushGlyphs](measure) { - measure.addString("\n"); - } - [_symbol_utils.$toHTML](availableSpace) { - return _utils.HTMLResult.success({ - name: "br" - }); - } -} -class Html extends XhtmlObject { - constructor(attributes) { - super(attributes, "html"); - } - [_symbol_utils.$toHTML](availableSpace) { - const children = []; - this[_symbol_utils.$extra] = { - children - }; - this[_symbol_utils.$childrenToHTML]({}); - if (children.length === 0) { - return _utils.HTMLResult.success({ - name: "div", - attributes: { - class: ["xfaRich"], - style: {} - }, - value: this[_symbol_utils.$content] || "" - }); - } - if (children.length === 1) { - const child = children[0]; - if (child.attributes?.class.includes("xfaRich")) { - return _utils.HTMLResult.success(child); - } - } - return _utils.HTMLResult.success({ - name: "div", - attributes: { - class: ["xfaRich"], - style: {} - }, - children - }); - } -} -class I extends XhtmlObject { - constructor(attributes) { - super(attributes, "i"); - } - [_symbol_utils.$pushGlyphs](measure) { - measure.pushFont({ - posture: "italic" - }); - super[_symbol_utils.$pushGlyphs](measure); - measure.popFont(); - } -} -class Li extends XhtmlObject { - constructor(attributes) { - super(attributes, "li"); - } -} -class Ol extends XhtmlObject { - constructor(attributes) { - super(attributes, "ol"); - } -} -class P extends XhtmlObject { - constructor(attributes) { - super(attributes, "p"); - } - [_symbol_utils.$pushGlyphs](measure) { - super[_symbol_utils.$pushGlyphs](measure, false); - measure.addString("\n"); - measure.addPara(); - measure.popFont(); - } - [_symbol_utils.$text]() { - const siblings = this[_symbol_utils.$getParent]()[_symbol_utils.$getChildren](); - if (siblings.at(-1) === this) { - return super[_symbol_utils.$text](); - } - return super[_symbol_utils.$text]() + "\n"; - } -} -class Span extends XhtmlObject { - constructor(attributes) { - super(attributes, "span"); - } -} -class Sub extends XhtmlObject { - constructor(attributes) { - super(attributes, "sub"); - } -} -class Sup extends XhtmlObject { - constructor(attributes) { - super(attributes, "sup"); - } -} -class Ul extends XhtmlObject { - constructor(attributes) { - super(attributes, "ul"); - } -} -class XhtmlNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (XhtmlNamespace.hasOwnProperty(name)) { - return XhtmlNamespace[name](attributes); - } - return undefined; - } - static a(attributes) { - return new A(attributes); - } - static b(attributes) { - return new B(attributes); - } - static body(attributes) { - return new Body(attributes); - } - static br(attributes) { - return new Br(attributes); - } - static html(attributes) { - return new Html(attributes); - } - static i(attributes) { - return new I(attributes); - } - static li(attributes) { - return new Li(attributes); - } - static ol(attributes) { - return new Ol(attributes); - } - static p(attributes) { - return new P(attributes); - } - static span(attributes) { - return new Span(attributes); - } - static sub(attributes) { - return new Sub(attributes); - } - static sup(attributes) { - return new Sup(attributes); - } - static ul(attributes) { - return new Ul(attributes); - } -} -exports.XhtmlNamespace = XhtmlNamespace; - -/***/ }), -/* 101 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.UnknownNamespace = void 0; -var _namespaces = __w_pdfjs_require__(81); -var _xfa_object = __w_pdfjs_require__(87); -class UnknownNamespace { - constructor(nsId) { - this.namespaceId = nsId; - } - [_namespaces.$buildXFAObject](name, attributes) { - return new _xfa_object.XmlObject(this.namespaceId, name, attributes); - } -} -exports.UnknownNamespace = UnknownNamespace; - -/***/ }), -/* 102 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.DatasetReader = void 0; -var _util = __w_pdfjs_require__(2); -var _core_utils = __w_pdfjs_require__(3); -var _xml_parser = __w_pdfjs_require__(71); -function decodeString(str) { - try { - return (0, _util.stringToUTF8String)(str); - } catch (ex) { - (0, _util.warn)(`UTF-8 decoding failed: "${ex}".`); - return str; - } -} -class DatasetXMLParser extends _xml_parser.SimpleXMLParser { - constructor(options) { - super(options); - this.node = null; - } - onEndElement(name) { - const node = super.onEndElement(name); - if (node && name === "xfa:datasets") { - this.node = node; - throw new Error("Aborting DatasetXMLParser."); - } - } -} -class DatasetReader { - constructor(data) { - if (data.datasets) { - this.node = new _xml_parser.SimpleXMLParser({ - hasAttributes: true - }).parseFromString(data.datasets).documentElement; - } else { - const parser = new DatasetXMLParser({ - hasAttributes: true - }); - try { - parser.parseFromString(data["xdp:xdp"]); - } catch {} - this.node = parser.node; - } - } - getValue(path) { - if (!this.node || !path) { - return ""; - } - const node = this.node.searchNode((0, _core_utils.parseXFAPath)(path), 0); - if (!node) { - return ""; - } - const first = node.firstChild; - if (first?.nodeName === "value") { - return node.children.map(child => decodeString(child.textContent)); - } - return decodeString(node.textContent); - } -} -exports.DatasetReader = DatasetReader; - -/***/ }), -/* 103 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XRef = void 0; -var _util = __w_pdfjs_require__(2); -var _primitives = __w_pdfjs_require__(4); -var _parser = __w_pdfjs_require__(16); -var _core_utils = __w_pdfjs_require__(3); -var _base_stream = __w_pdfjs_require__(5); -var _crypto = __w_pdfjs_require__(74); -class XRef { - #firstXRefStmPos = null; - constructor(stream, pdfManager) { - this.stream = stream; - this.pdfManager = pdfManager; - this.entries = []; - this._xrefStms = new Set(); - this._cacheMap = new Map(); - this._pendingRefs = new _primitives.RefSet(); - this._newPersistentRefNum = null; - this._newTemporaryRefNum = null; - } - getNewPersistentRef(obj) { - if (this._newPersistentRefNum === null) { - this._newPersistentRefNum = this.entries.length || 1; - } - const num = this._newPersistentRefNum++; - this._cacheMap.set(num, obj); - return _primitives.Ref.get(num, 0); - } - getNewTemporaryRef() { - if (this._newTemporaryRefNum === null) { - this._newTemporaryRefNum = this.entries.length || 1; - } - return _primitives.Ref.get(this._newTemporaryRefNum++, 0); - } - resetNewTemporaryRef() { - this._newTemporaryRefNum = null; - } - setStartXRef(startXRef) { - this.startXRefQueue = [startXRef]; - } - parse(recoveryMode = false) { - let trailerDict; - if (!recoveryMode) { - trailerDict = this.readXRef(); - } else { - (0, _util.warn)("Indexing all PDF objects"); - trailerDict = this.indexObjects(); - } - trailerDict.assignXref(this); - this.trailer = trailerDict; - let encrypt; - try { - encrypt = trailerDict.get("Encrypt"); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.warn)(`XRef.parse - Invalid "Encrypt" reference: "${ex}".`); - } - if (encrypt instanceof _primitives.Dict) { - const ids = trailerDict.get("ID"); - const fileId = ids?.length ? ids[0] : ""; - encrypt.suppressEncryption = true; - this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password); - } - let root; - try { - root = trailerDict.get("Root"); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.warn)(`XRef.parse - Invalid "Root" reference: "${ex}".`); - } - if (root instanceof _primitives.Dict) { - try { - const pages = root.get("Pages"); - if (pages instanceof _primitives.Dict) { - this.root = root; - return; - } - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - (0, _util.warn)(`XRef.parse - Invalid "Pages" reference: "${ex}".`); - } - } - if (!recoveryMode) { - throw new _core_utils.XRefParseException(); - } - throw new _util.InvalidPDFException("Invalid Root reference."); - } - processXRefTable(parser) { - if (!("tableState" in this)) { - this.tableState = { - entryNum: 0, - streamPos: parser.lexer.stream.pos, - parserBuf1: parser.buf1, - parserBuf2: parser.buf2 - }; - } - const obj = this.readXRefTable(parser); - if (!(0, _primitives.isCmd)(obj, "trailer")) { - throw new _util.FormatError("Invalid XRef table: could not find trailer dictionary"); - } - let dict = parser.getObj(); - if (!(dict instanceof _primitives.Dict) && dict.dict) { - dict = dict.dict; - } - if (!(dict instanceof _primitives.Dict)) { - throw new _util.FormatError("Invalid XRef table: could not parse trailer dictionary"); - } - delete this.tableState; - return dict; - } - readXRefTable(parser) { - const stream = parser.lexer.stream; - const tableState = this.tableState; - stream.pos = tableState.streamPos; - parser.buf1 = tableState.parserBuf1; - parser.buf2 = tableState.parserBuf2; - let obj; - while (true) { - if (!("firstEntryNum" in tableState) || !("entryCount" in tableState)) { - if ((0, _primitives.isCmd)(obj = parser.getObj(), "trailer")) { - break; - } - tableState.firstEntryNum = obj; - tableState.entryCount = parser.getObj(); - } - let first = tableState.firstEntryNum; - const count = tableState.entryCount; - if (!Number.isInteger(first) || !Number.isInteger(count)) { - throw new _util.FormatError("Invalid XRef table: wrong types in subsection header"); - } - for (let i = tableState.entryNum; i < count; i++) { - tableState.streamPos = stream.pos; - tableState.entryNum = i; - tableState.parserBuf1 = parser.buf1; - tableState.parserBuf2 = parser.buf2; - const entry = {}; - entry.offset = parser.getObj(); - entry.gen = parser.getObj(); - const type = parser.getObj(); - if (type instanceof _primitives.Cmd) { - switch (type.cmd) { - case "f": - entry.free = true; - break; - case "n": - entry.uncompressed = true; - break; - } - } - if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) { - throw new _util.FormatError(`Invalid entry in XRef subsection: ${first}, ${count}`); - } - if (i === 0 && entry.free && first === 1) { - first = 0; - } - if (!this.entries[i + first]) { - this.entries[i + first] = entry; - } - } - tableState.entryNum = 0; - tableState.streamPos = stream.pos; - tableState.parserBuf1 = parser.buf1; - tableState.parserBuf2 = parser.buf2; - delete tableState.firstEntryNum; - delete tableState.entryCount; - } - if (this.entries[0] && !this.entries[0].free) { - throw new _util.FormatError("Invalid XRef table: unexpected first object"); - } - return obj; - } - processXRefStream(stream) { - if (!("streamState" in this)) { - const streamParameters = stream.dict; - const byteWidths = streamParameters.get("W"); - let range = streamParameters.get("Index"); - if (!range) { - range = [0, streamParameters.get("Size")]; - } - this.streamState = { - entryRanges: range, - byteWidths, - entryNum: 0, - streamPos: stream.pos - }; - } - this.readXRefStream(stream); - delete this.streamState; - return stream.dict; - } - readXRefStream(stream) { - const streamState = this.streamState; - stream.pos = streamState.streamPos; - const [typeFieldWidth, offsetFieldWidth, generationFieldWidth] = streamState.byteWidths; - const entryRanges = streamState.entryRanges; - while (entryRanges.length > 0) { - const [first, n] = entryRanges; - if (!Number.isInteger(first) || !Number.isInteger(n)) { - throw new _util.FormatError(`Invalid XRef range fields: ${first}, ${n}`); - } - if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) { - throw new _util.FormatError(`Invalid XRef entry fields length: ${first}, ${n}`); - } - for (let i = streamState.entryNum; i < n; ++i) { - streamState.entryNum = i; - streamState.streamPos = stream.pos; - let type = 0, - offset = 0, - generation = 0; - for (let j = 0; j < typeFieldWidth; ++j) { - const typeByte = stream.getByte(); - if (typeByte === -1) { - throw new _util.FormatError("Invalid XRef byteWidths 'type'."); - } - type = type << 8 | typeByte; - } - if (typeFieldWidth === 0) { - type = 1; - } - for (let j = 0; j < offsetFieldWidth; ++j) { - const offsetByte = stream.getByte(); - if (offsetByte === -1) { - throw new _util.FormatError("Invalid XRef byteWidths 'offset'."); - } - offset = offset << 8 | offsetByte; - } - for (let j = 0; j < generationFieldWidth; ++j) { - const generationByte = stream.getByte(); - if (generationByte === -1) { - throw new _util.FormatError("Invalid XRef byteWidths 'generation'."); - } - generation = generation << 8 | generationByte; - } - const entry = {}; - entry.offset = offset; - entry.gen = generation; - switch (type) { - case 0: - entry.free = true; - break; - case 1: - entry.uncompressed = true; - break; - case 2: - break; - default: - throw new _util.FormatError(`Invalid XRef entry type: ${type}`); - } - if (!this.entries[first + i]) { - this.entries[first + i] = entry; - } - } - streamState.entryNum = 0; - streamState.streamPos = stream.pos; - entryRanges.splice(0, 2); - } - } - indexObjects() { - const TAB = 0x9, - LF = 0xa, - CR = 0xd, - SPACE = 0x20; - const PERCENT = 0x25, - LT = 0x3c; - function readToken(data, offset) { - let token = "", - ch = data[offset]; - while (ch !== LF && ch !== CR && ch !== LT) { - if (++offset >= data.length) { - break; - } - token += String.fromCharCode(ch); - ch = data[offset]; - } - return token; - } - function skipUntil(data, offset, what) { - const length = what.length, - dataLength = data.length; - let skipped = 0; - while (offset < dataLength) { - let i = 0; - while (i < length && data[offset + i] === what[i]) { - ++i; - } - if (i >= length) { - break; - } - offset++; - skipped++; - } - return skipped; - } - const gEndobjRegExp = /\b(endobj|\d+\s+\d+\s+obj|xref|trailer\s*<<)\b/g; - const gStartxrefRegExp = /\b(startxref|\d+\s+\d+\s+obj)\b/g; - const objRegExp = /^(\d+)\s+(\d+)\s+obj\b/; - const trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]); - const startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]); - const xrefBytes = new Uint8Array([47, 88, 82, 101, 102]); - this.entries.length = 0; - this._cacheMap.clear(); - const stream = this.stream; - stream.pos = 0; - const buffer = stream.getBytes(), - bufferStr = (0, _util.bytesToString)(buffer), - length = buffer.length; - let position = stream.start; - const trailers = [], - xrefStms = []; - while (position < length) { - let ch = buffer[position]; - if (ch === TAB || ch === LF || ch === CR || ch === SPACE) { - ++position; - continue; - } - if (ch === PERCENT) { - do { - ++position; - if (position >= length) { - break; - } - ch = buffer[position]; - } while (ch !== LF && ch !== CR); - continue; - } - const token = readToken(buffer, position); - let m; - if (token.startsWith("xref") && (token.length === 4 || /\s/.test(token[4]))) { - position += skipUntil(buffer, position, trailerBytes); - trailers.push(position); - position += skipUntil(buffer, position, startxrefBytes); - } else if (m = objRegExp.exec(token)) { - const num = m[1] | 0, - gen = m[2] | 0; - const startPos = position + token.length; - let contentLength, - updateEntries = false; - if (!this.entries[num]) { - updateEntries = true; - } else if (this.entries[num].gen === gen) { - try { - const parser = new _parser.Parser({ - lexer: new _parser.Lexer(stream.makeSubStream(startPos)) - }); - parser.getObj(); - updateEntries = true; - } catch (ex) { - if (ex instanceof _core_utils.ParserEOFException) { - (0, _util.warn)(`indexObjects -- checking object (${token}): "${ex}".`); - } else { - updateEntries = true; - } - } - } - if (updateEntries) { - this.entries[num] = { - offset: position - stream.start, - gen, - uncompressed: true - }; - } - gEndobjRegExp.lastIndex = startPos; - const match = gEndobjRegExp.exec(bufferStr); - if (match) { - const endPos = gEndobjRegExp.lastIndex + 1; - contentLength = endPos - position; - if (match[1] !== "endobj") { - (0, _util.warn)(`indexObjects: Found "${match[1]}" inside of another "obj", ` + 'caused by missing "endobj" -- trying to recover.'); - contentLength -= match[1].length + 1; - } - } else { - contentLength = length - position; - } - const content = buffer.subarray(position, position + contentLength); - const xrefTagOffset = skipUntil(content, 0, xrefBytes); - if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) { - xrefStms.push(position - stream.start); - this._xrefStms.add(position - stream.start); - } - position += contentLength; - } else if (token.startsWith("trailer") && (token.length === 7 || /\s/.test(token[7]))) { - trailers.push(position); - const startPos = position + token.length; - let contentLength; - gStartxrefRegExp.lastIndex = startPos; - const match = gStartxrefRegExp.exec(bufferStr); - if (match) { - const endPos = gStartxrefRegExp.lastIndex + 1; - contentLength = endPos - position; - if (match[1] !== "startxref") { - (0, _util.warn)(`indexObjects: Found "${match[1]}" after "trailer", ` + 'caused by missing "startxref" -- trying to recover.'); - contentLength -= match[1].length + 1; - } - } else { - contentLength = length - position; - } - position += contentLength; - } else { - position += token.length + 1; - } - } - for (const xrefStm of xrefStms) { - this.startXRefQueue.push(xrefStm); - this.readXRef(true); - } - const trailerDicts = []; - let isEncrypted = false; - for (const trailer of trailers) { - stream.pos = trailer; - const parser = new _parser.Parser({ - lexer: new _parser.Lexer(stream), - xref: this, - allowStreams: true, - recoveryMode: true - }); - const obj = parser.getObj(); - if (!(0, _primitives.isCmd)(obj, "trailer")) { - continue; - } - const dict = parser.getObj(); - if (!(dict instanceof _primitives.Dict)) { - continue; - } - trailerDicts.push(dict); - if (dict.has("Encrypt")) { - isEncrypted = true; - } - } - let trailerDict, trailerError; - for (const dict of [...trailerDicts, "genFallback", ...trailerDicts]) { - if (dict === "genFallback") { - if (!trailerError) { - break; - } - this._generationFallback = true; - continue; - } - let validPagesDict = false; - try { - const rootDict = dict.get("Root"); - if (!(rootDict instanceof _primitives.Dict)) { - continue; - } - const pagesDict = rootDict.get("Pages"); - if (!(pagesDict instanceof _primitives.Dict)) { - continue; - } - const pagesCount = pagesDict.get("Count"); - if (Number.isInteger(pagesCount)) { - validPagesDict = true; - } - } catch (ex) { - trailerError = ex; - continue; - } - if (validPagesDict && (!isEncrypted || dict.has("Encrypt")) && dict.has("ID")) { - return dict; - } - trailerDict = dict; - } - if (trailerDict) { - return trailerDict; - } - if (this.topDict) { - return this.topDict; - } - throw new _util.InvalidPDFException("Invalid PDF structure."); - } - readXRef(recoveryMode = false) { - const stream = this.stream; - const startXRefParsedCache = new Set(); - while (this.startXRefQueue.length) { - try { - const startXRef = this.startXRefQueue[0]; - if (startXRefParsedCache.has(startXRef)) { - (0, _util.warn)("readXRef - skipping XRef table since it was already parsed."); - this.startXRefQueue.shift(); - continue; - } - startXRefParsedCache.add(startXRef); - stream.pos = startXRef + stream.start; - const parser = new _parser.Parser({ - lexer: new _parser.Lexer(stream), - xref: this, - allowStreams: true - }); - let obj = parser.getObj(); - let dict; - if ((0, _primitives.isCmd)(obj, "xref")) { - dict = this.processXRefTable(parser); - if (!this.topDict) { - this.topDict = dict; - } - obj = dict.get("XRefStm"); - if (Number.isInteger(obj) && !this._xrefStms.has(obj)) { - this._xrefStms.add(obj); - this.startXRefQueue.push(obj); - this.#firstXRefStmPos ??= obj; - } - } else if (Number.isInteger(obj)) { - if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), "obj") || !((obj = parser.getObj()) instanceof _base_stream.BaseStream)) { - throw new _util.FormatError("Invalid XRef stream"); - } - dict = this.processXRefStream(obj); - if (!this.topDict) { - this.topDict = dict; - } - if (!dict) { - throw new _util.FormatError("Failed to read XRef stream"); - } - } else { - throw new _util.FormatError("Invalid XRef stream header"); - } - obj = dict.get("Prev"); - if (Number.isInteger(obj)) { - this.startXRefQueue.push(obj); - } else if (obj instanceof _primitives.Ref) { - this.startXRefQueue.push(obj.num); - } - } catch (e) { - if (e instanceof _core_utils.MissingDataException) { - throw e; - } - (0, _util.info)("(while reading XRef): " + e); - } - this.startXRefQueue.shift(); - } - if (this.topDict) { - return this.topDict; - } - if (recoveryMode) { - return undefined; - } - throw new _core_utils.XRefParseException(); - } - get lastXRefStreamPos() { - return this.#firstXRefStmPos ?? (this._xrefStms.size > 0 ? Math.max(...this._xrefStms) : null); - } - getEntry(i) { - const xrefEntry = this.entries[i]; - if (xrefEntry && !xrefEntry.free && xrefEntry.offset) { - return xrefEntry; - } - return null; - } - fetchIfRef(obj, suppressEncryption = false) { - if (obj instanceof _primitives.Ref) { - return this.fetch(obj, suppressEncryption); - } - return obj; - } - fetch(ref, suppressEncryption = false) { - if (!(ref instanceof _primitives.Ref)) { - throw new Error("ref object is not a reference"); - } - const num = ref.num; - const cacheEntry = this._cacheMap.get(num); - if (cacheEntry !== undefined) { - if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) { - cacheEntry.objId = ref.toString(); - } - return cacheEntry; - } - let xrefEntry = this.getEntry(num); - if (xrefEntry === null) { - this._cacheMap.set(num, xrefEntry); - return xrefEntry; - } - if (this._pendingRefs.has(ref)) { - this._pendingRefs.remove(ref); - (0, _util.warn)(`Ignoring circular reference: ${ref}.`); - return _primitives.CIRCULAR_REF; - } - this._pendingRefs.put(ref); - try { - xrefEntry = xrefEntry.uncompressed ? this.fetchUncompressed(ref, xrefEntry, suppressEncryption) : this.fetchCompressed(ref, xrefEntry, suppressEncryption); - this._pendingRefs.remove(ref); - } catch (ex) { - this._pendingRefs.remove(ref); - throw ex; - } - if (xrefEntry instanceof _primitives.Dict) { - xrefEntry.objId = ref.toString(); - } else if (xrefEntry instanceof _base_stream.BaseStream) { - xrefEntry.dict.objId = ref.toString(); - } - return xrefEntry; - } - fetchUncompressed(ref, xrefEntry, suppressEncryption = false) { - const gen = ref.gen; - let num = ref.num; - if (xrefEntry.gen !== gen) { - const msg = `Inconsistent generation in XRef: ${ref}`; - if (this._generationFallback && xrefEntry.gen < gen) { - (0, _util.warn)(msg); - return this.fetchUncompressed(_primitives.Ref.get(num, xrefEntry.gen), xrefEntry, suppressEncryption); - } - throw new _core_utils.XRefEntryException(msg); - } - const stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start); - const parser = new _parser.Parser({ - lexer: new _parser.Lexer(stream), - xref: this, - allowStreams: true - }); - const obj1 = parser.getObj(); - const obj2 = parser.getObj(); - const obj3 = parser.getObj(); - if (obj1 !== num || obj2 !== gen || !(obj3 instanceof _primitives.Cmd)) { - throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`); - } - if (obj3.cmd !== "obj") { - if (obj3.cmd.startsWith("obj")) { - num = parseInt(obj3.cmd.substring(3), 10); - if (!Number.isNaN(num)) { - return num; - } - } - throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`); - } - xrefEntry = this.encrypt && !suppressEncryption ? parser.getObj(this.encrypt.createCipherTransform(num, gen)) : parser.getObj(); - if (!(xrefEntry instanceof _base_stream.BaseStream)) { - this._cacheMap.set(num, xrefEntry); - } - return xrefEntry; - } - fetchCompressed(ref, xrefEntry, suppressEncryption = false) { - const tableOffset = xrefEntry.offset; - const stream = this.fetch(_primitives.Ref.get(tableOffset, 0)); - if (!(stream instanceof _base_stream.BaseStream)) { - throw new _util.FormatError("bad ObjStm stream"); - } - const first = stream.dict.get("First"); - const n = stream.dict.get("N"); - if (!Number.isInteger(first) || !Number.isInteger(n)) { - throw new _util.FormatError("invalid first and n parameters for ObjStm stream"); - } - let parser = new _parser.Parser({ - lexer: new _parser.Lexer(stream), - xref: this, - allowStreams: true - }); - const nums = new Array(n); - const offsets = new Array(n); - for (let i = 0; i < n; ++i) { - const num = parser.getObj(); - if (!Number.isInteger(num)) { - throw new _util.FormatError(`invalid object number in the ObjStm stream: ${num}`); - } - const offset = parser.getObj(); - if (!Number.isInteger(offset)) { - throw new _util.FormatError(`invalid object offset in the ObjStm stream: ${offset}`); - } - nums[i] = num; - offsets[i] = offset; - } - const start = (stream.start || 0) + first; - const entries = new Array(n); - for (let i = 0; i < n; ++i) { - const length = i < n - 1 ? offsets[i + 1] - offsets[i] : undefined; - if (length < 0) { - throw new _util.FormatError("Invalid offset in the ObjStm stream."); - } - parser = new _parser.Parser({ - lexer: new _parser.Lexer(stream.makeSubStream(start + offsets[i], length, stream.dict)), - xref: this, - allowStreams: true - }); - const obj = parser.getObj(); - entries[i] = obj; - if (obj instanceof _base_stream.BaseStream) { - continue; - } - const num = nums[i], - entry = this.entries[num]; - if (entry && entry.offset === tableOffset && entry.gen === i) { - this._cacheMap.set(num, obj); - } - } - xrefEntry = entries[xrefEntry.gen]; - if (xrefEntry === undefined) { - throw new _core_utils.XRefEntryException(`Bad (compressed) XRef entry: ${ref}`); - } - return xrefEntry; - } - async fetchIfRefAsync(obj, suppressEncryption) { - if (obj instanceof _primitives.Ref) { - return this.fetchAsync(obj, suppressEncryption); - } - return obj; - } - async fetchAsync(ref, suppressEncryption) { - try { - return this.fetch(ref, suppressEncryption); - } catch (ex) { - if (!(ex instanceof _core_utils.MissingDataException)) { - throw ex; - } - await this.pdfManager.requestRange(ex.begin, ex.end); - return this.fetchAsync(ref, suppressEncryption); - } - } - getCatalogObj() { - return this.root; - } -} -exports.XRef = XRef; - -/***/ }), -/* 104 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.MessageHandler = void 0; -var _util = __w_pdfjs_require__(2); -const CallbackKind = { - UNKNOWN: 0, - DATA: 1, - ERROR: 2 -}; -const StreamKind = { - UNKNOWN: 0, - CANCEL: 1, - CANCEL_COMPLETE: 2, - CLOSE: 3, - ENQUEUE: 4, - ERROR: 5, - PULL: 6, - PULL_COMPLETE: 7, - START_COMPLETE: 8 -}; -function wrapReason(reason) { - if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) { - (0, _util.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); - } - switch (reason.name) { - case "AbortException": - return new _util.AbortException(reason.message); - case "MissingPDFException": - return new _util.MissingPDFException(reason.message); - case "PasswordException": - return new _util.PasswordException(reason.message, reason.code); - case "UnexpectedResponseException": - return new _util.UnexpectedResponseException(reason.message, reason.status); - case "UnknownErrorException": - return new _util.UnknownErrorException(reason.message, reason.details); - default: - return new _util.UnknownErrorException(reason.message, reason.toString()); - } -} -class MessageHandler { - constructor(sourceName, targetName, comObj) { - this.sourceName = sourceName; - this.targetName = targetName; - this.comObj = comObj; - this.callbackId = 1; - this.streamId = 1; - this.streamSinks = Object.create(null); - this.streamControllers = Object.create(null); - this.callbackCapabilities = Object.create(null); - this.actionHandler = Object.create(null); - this._onComObjOnMessage = event => { - const data = event.data; - if (data.targetName !== this.sourceName) { - return; - } - if (data.stream) { - this.#processStreamMessage(data); - return; - } - if (data.callback) { - const callbackId = data.callbackId; - const capability = this.callbackCapabilities[callbackId]; - if (!capability) { - throw new Error(`Cannot resolve callback ${callbackId}`); - } - delete this.callbackCapabilities[callbackId]; - if (data.callback === CallbackKind.DATA) { - capability.resolve(data.data); - } else if (data.callback === CallbackKind.ERROR) { - capability.reject(wrapReason(data.reason)); - } else { - throw new Error("Unexpected callback case"); - } - return; - } - const action = this.actionHandler[data.action]; - if (!action) { - throw new Error(`Unknown action from worker: ${data.action}`); - } - if (data.callbackId) { - const cbSourceName = this.sourceName; - const cbTargetName = data.sourceName; - new Promise(function (resolve) { - resolve(action(data.data)); - }).then(function (result) { - comObj.postMessage({ - sourceName: cbSourceName, - targetName: cbTargetName, - callback: CallbackKind.DATA, - callbackId: data.callbackId, - data: result - }); - }, function (reason) { - comObj.postMessage({ - sourceName: cbSourceName, - targetName: cbTargetName, - callback: CallbackKind.ERROR, - callbackId: data.callbackId, - reason: wrapReason(reason) - }); - }); - return; - } - if (data.streamId) { - this.#createStreamSink(data); - return; - } - action(data.data); - }; - comObj.addEventListener("message", this._onComObjOnMessage); - } - on(actionName, handler) { - const ah = this.actionHandler; - if (ah[actionName]) { - throw new Error(`There is already an actionName called "${actionName}"`); - } - ah[actionName] = handler; - } - send(actionName, data, transfers) { - this.comObj.postMessage({ - sourceName: this.sourceName, - targetName: this.targetName, - action: actionName, - data - }, transfers); - } - sendWithPromise(actionName, data, transfers) { - const callbackId = this.callbackId++; - const capability = new _util.PromiseCapability(); - this.callbackCapabilities[callbackId] = capability; - try { - this.comObj.postMessage({ - sourceName: this.sourceName, - targetName: this.targetName, - action: actionName, - callbackId, - data - }, transfers); - } catch (ex) { - capability.reject(ex); - } - return capability.promise; - } - sendWithStream(actionName, data, queueingStrategy, transfers) { - const streamId = this.streamId++, - sourceName = this.sourceName, - targetName = this.targetName, - comObj = this.comObj; - return new ReadableStream({ - start: controller => { - const startCapability = new _util.PromiseCapability(); - this.streamControllers[streamId] = { - controller, - startCall: startCapability, - pullCall: null, - cancelCall: null, - isClosed: false - }; - comObj.postMessage({ - sourceName, - targetName, - action: actionName, - streamId, - data, - desiredSize: controller.desiredSize - }, transfers); - return startCapability.promise; - }, - pull: controller => { - const pullCapability = new _util.PromiseCapability(); - this.streamControllers[streamId].pullCall = pullCapability; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL, - streamId, - desiredSize: controller.desiredSize - }); - return pullCapability.promise; - }, - cancel: reason => { - (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason"); - const cancelCapability = new _util.PromiseCapability(); - this.streamControllers[streamId].cancelCall = cancelCapability; - this.streamControllers[streamId].isClosed = true; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CANCEL, - streamId, - reason: wrapReason(reason) - }); - return cancelCapability.promise; - } - }, queueingStrategy); - } - #createStreamSink(data) { - const streamId = data.streamId, - sourceName = this.sourceName, - targetName = data.sourceName, - comObj = this.comObj; - const self = this, - action = this.actionHandler[data.action]; - const streamSink = { - enqueue(chunk, size = 1, transfers) { - if (this.isCancelled) { - return; - } - const lastDesiredSize = this.desiredSize; - this.desiredSize -= size; - if (lastDesiredSize > 0 && this.desiredSize <= 0) { - this.sinkCapability = new _util.PromiseCapability(); - this.ready = this.sinkCapability.promise; - } - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.ENQUEUE, - streamId, - chunk - }, transfers); - }, - close() { - if (this.isCancelled) { - return; - } - this.isCancelled = true; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CLOSE, - streamId - }); - delete self.streamSinks[streamId]; - }, - error(reason) { - (0, _util.assert)(reason instanceof Error, "error must have a valid reason"); - if (this.isCancelled) { - return; - } - this.isCancelled = true; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.ERROR, - streamId, - reason: wrapReason(reason) - }); - }, - sinkCapability: new _util.PromiseCapability(), - onPull: null, - onCancel: null, - isCancelled: false, - desiredSize: data.desiredSize, - ready: null - }; - streamSink.sinkCapability.resolve(); - streamSink.ready = streamSink.sinkCapability.promise; - this.streamSinks[streamId] = streamSink; - new Promise(function (resolve) { - resolve(action(data.data, streamSink)); - }).then(function () { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.START_COMPLETE, - streamId, - success: true - }); - }, function (reason) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.START_COMPLETE, - streamId, - reason: wrapReason(reason) - }); - }); - } - #processStreamMessage(data) { - const streamId = data.streamId, - sourceName = this.sourceName, - targetName = data.sourceName, - comObj = this.comObj; - const streamController = this.streamControllers[streamId], - streamSink = this.streamSinks[streamId]; - switch (data.stream) { - case StreamKind.START_COMPLETE: - if (data.success) { - streamController.startCall.resolve(); - } else { - streamController.startCall.reject(wrapReason(data.reason)); - } - break; - case StreamKind.PULL_COMPLETE: - if (data.success) { - streamController.pullCall.resolve(); - } else { - streamController.pullCall.reject(wrapReason(data.reason)); - } - break; - case StreamKind.PULL: - if (!streamSink) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL_COMPLETE, - streamId, - success: true - }); - break; - } - if (streamSink.desiredSize <= 0 && data.desiredSize > 0) { - streamSink.sinkCapability.resolve(); - } - streamSink.desiredSize = data.desiredSize; - new Promise(function (resolve) { - resolve(streamSink.onPull?.()); - }).then(function () { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL_COMPLETE, - streamId, - success: true - }); - }, function (reason) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL_COMPLETE, - streamId, - reason: wrapReason(reason) - }); - }); - break; - case StreamKind.ENQUEUE: - (0, _util.assert)(streamController, "enqueue should have stream controller"); - if (streamController.isClosed) { - break; - } - streamController.controller.enqueue(data.chunk); - break; - case StreamKind.CLOSE: - (0, _util.assert)(streamController, "close should have stream controller"); - if (streamController.isClosed) { - break; - } - streamController.isClosed = true; - streamController.controller.close(); - this.#deleteStreamController(streamController, streamId); - break; - case StreamKind.ERROR: - (0, _util.assert)(streamController, "error should have stream controller"); - streamController.controller.error(wrapReason(data.reason)); - this.#deleteStreamController(streamController, streamId); - break; - case StreamKind.CANCEL_COMPLETE: - if (data.success) { - streamController.cancelCall.resolve(); - } else { - streamController.cancelCall.reject(wrapReason(data.reason)); - } - this.#deleteStreamController(streamController, streamId); - break; - case StreamKind.CANCEL: - if (!streamSink) { - break; - } - new Promise(function (resolve) { - resolve(streamSink.onCancel?.(wrapReason(data.reason))); - }).then(function () { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CANCEL_COMPLETE, - streamId, - success: true - }); - }, function (reason) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CANCEL_COMPLETE, - streamId, - reason: wrapReason(reason) - }); - }); - streamSink.sinkCapability.reject(wrapReason(data.reason)); - streamSink.isCancelled = true; - delete this.streamSinks[streamId]; - break; - default: - throw new Error("Unexpected stream case"); - } - } - async #deleteStreamController(streamController, streamId) { - await Promise.allSettled([streamController.startCall?.promise, streamController.pullCall?.promise, streamController.cancelCall?.promise]); - delete this.streamControllers[streamId]; - } - destroy() { - this.comObj.removeEventListener("message", this._onComObjOnMessage); - } -} -exports.MessageHandler = MessageHandler; - -/***/ }), -/* 105 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PDFWorkerStream = void 0; -var _util = __w_pdfjs_require__(2); -class PDFWorkerStream { - constructor(msgHandler) { - this._msgHandler = msgHandler; - this._contentLength = null; - this._fullRequestReader = null; - this._rangeRequestReaders = []; - } - getFullReader() { - (0, _util.assert)(!this._fullRequestReader, "PDFWorkerStream.getFullReader can only be called once."); - this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler); - return this._fullRequestReader; - } - getRangeReader(begin, end) { - const reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler); - this._rangeRequestReaders.push(reader); - return reader; - } - cancelAllRequests(reason) { - this._fullRequestReader?.cancel(reason); - for (const reader of this._rangeRequestReaders.slice(0)) { - reader.cancel(reason); - } - } -} -exports.PDFWorkerStream = PDFWorkerStream; -class PDFWorkerStreamReader { - constructor(msgHandler) { - this._msgHandler = msgHandler; - this.onProgress = null; - this._contentLength = null; - this._isRangeSupported = false; - this._isStreamingSupported = false; - const readableStream = this._msgHandler.sendWithStream("GetReader"); - this._reader = readableStream.getReader(); - this._headersReady = this._msgHandler.sendWithPromise("ReaderHeadersReady").then(data => { - this._isStreamingSupported = data.isStreamingSupported; - this._isRangeSupported = data.isRangeSupported; - this._contentLength = data.contentLength; - }); - } - get headersReady() { - return this._headersReady; - } - get contentLength() { - return this._contentLength; - } - get isStreamingSupported() { - return this._isStreamingSupported; - } - get isRangeSupported() { - return this._isRangeSupported; - } - async read() { - const { - value, - done - } = await this._reader.read(); - if (done) { - return { - value: undefined, - done: true - }; - } - return { - value: value.buffer, - done: false - }; - } - cancel(reason) { - this._reader.cancel(reason); - } -} -class PDFWorkerStreamRangeReader { - constructor(begin, end, msgHandler) { - this._msgHandler = msgHandler; - this.onProgress = null; - const readableStream = this._msgHandler.sendWithStream("GetRangeReader", { - begin, - end - }); - this._reader = readableStream.getReader(); - } - get isStreamingSupported() { - return false; - } - async read() { - const { - value, - done - } = await this._reader.read(); - if (done) { - return { - value: undefined, - done: true - }; - } - return { - value: value.buffer, - done: false - }; - } - cancel(reason) { - this._reader.cancel(reason); - } -} - -/***/ }) -/******/ ]); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __w_pdfjs_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. -(() => { -var exports = __webpack_exports__; - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -Object.defineProperty(exports, "WorkerMessageHandler", ({ - enumerable: true, - get: function () { - return _worker.WorkerMessageHandler; - } -})); -var _worker = __w_pdfjs_require__(1); -const pdfjsVersion = '3.11.174'; -const pdfjsBuild = 'ce8716743'; -})(); - -/******/ return __webpack_exports__; -/******/ })() -; -}); -//# sourceMappingURL=pdf.worker.js.map \ No newline at end of file diff --git a/frontend/dist/robots.txt b/frontend/dist/robots.txt deleted file mode 100644 index e9e57dc4d..000000000 --- a/frontend/dist/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/frontend/public/locales/en-GB/translation.json b/frontend/public/locales/en-GB/translation.json index 570c2e697..f34301dc4 100644 --- a/frontend/public/locales/en-GB/translation.json +++ b/frontend/public/locales/en-GB/translation.json @@ -1576,7 +1576,13 @@ "dragDrop": "Drag & Drop files here", "clickToUpload": "Click to upload files", "selectedFiles": "Selected Files", - "clearAll": "Clear All" + "clearAll": "Clear All", + "storage": "Storage", + "filesStored": "files stored", + "storageError": "Storage error occurred", + "storageLow": "Storage is running low. Consider removing old files.", + "uploadError": "Failed to upload some files.", + "supportMessage": "Powered by browser database storage for unlimited capacity" }, "pageEditor": { "title": "Page Editor", diff --git a/frontend/src/components/FileCard.standalone.tsx b/frontend/src/components/FileCard.standalone.tsx new file mode 100644 index 000000000..4d140689b --- /dev/null +++ b/frontend/src/components/FileCard.standalone.tsx @@ -0,0 +1,136 @@ +import React from "react"; +import { Card, Stack, Text, Group, Badge, Button, Box, Image, ThemeIcon } from "@mantine/core"; +import { useTranslation } from "react-i18next"; +import PictureAsPdfIcon from "@mui/icons-material/PictureAsPdf"; +import StorageIcon from "@mui/icons-material/Storage"; + +import { FileWithUrl } from "../types/file"; +import { getFileSize, getFileDate } from "../utils/fileUtils"; +import { useIndexedDBThumbnail } from "../hooks/useIndexedDBThumbnail"; + +interface FileCardProps { + file: FileWithUrl; + onRemove: () => void; + onDoubleClick?: () => void; +} + +const FileCard: React.FC = ({ file, onRemove, onDoubleClick }) => { + const { t } = useTranslation(); + const { thumbnail: thumb, isGenerating } = useIndexedDBThumbnail(file); + + return ( + + + + {thumb ? ( + PDF thumbnail + ) : isGenerating ? ( +
+
+ Generating... +
+ ) : ( +
+ 100 * 1024 * 1024 ? "orange" : "red"} + size={60} + radius="sm" + style={{ display: "flex", alignItems: "center", justifyContent: "center" }} + > + + + {file.size > 100 * 1024 * 1024 && ( + Large File + )} +
+ )} + + + + {file.name} + + + + + {getFileSize(file)} + + + {getFileDate(file)} + + {file.storedInIndexedDB && ( + } + > + DB + + )} + + + + + + ); +}; + +export default FileCard; \ No newline at end of file diff --git a/frontend/src/components/FileManager.tsx b/frontend/src/components/FileManager.tsx index 9eeb8315e..b436cd87b 100644 --- a/frontend/src/components/FileManager.tsx +++ b/frontend/src/components/FileManager.tsx @@ -1,134 +1,20 @@ import React, { useState, useEffect } from "react"; -import { Card, Group, Text, Stack, Image, Badge, Button, Box, Flex, ThemeIcon } from "@mantine/core"; +import { Box, Flex, Text, Notification } from "@mantine/core"; import { Dropzone, MIME_TYPES } from "@mantine/dropzone"; import { useTranslation } from "react-i18next"; -import PictureAsPdfIcon from "@mui/icons-material/PictureAsPdf"; -import { GlobalWorkerOptions, getDocument } from "pdfjs-dist"; +import { GlobalWorkerOptions } from "pdfjs-dist"; +import { StorageStats } from "../services/fileStorage"; +import { FileWithUrl, defaultStorageConfig } from "../types/file"; + +// Refactored imports +import { fileOperationsService } from "../services/fileOperationsService"; +import { checkStorageWarnings } from "../utils/storageUtils"; +import StorageStatsCard from "./StorageStatsCard"; +import FileCard from "./FileCard.standalone"; + GlobalWorkerOptions.workerSrc = "/pdf.worker.js"; -export interface FileWithUrl extends File { - url?: string; - file?: File; -} - -function getFileDate(file: File): string { - if (file.lastModified) { - return new Date(file.lastModified).toLocaleString(); - } - return "Unknown"; -} - -function getFileSize(file: File): string { - if (!file.size) return "Unknown"; - if (file.size < 1024) return `${file.size} B`; - if (file.size < 1024 * 1024) return `${(file.size / 1024).toFixed(1)} KB`; - return `${(file.size / (1024 * 1024)).toFixed(2)} MB`; -} - -function usePdfThumbnail(file: File | undefined | null): string | null { - const [thumb, setThumb] = useState(null); - - useEffect(() => { - let cancelled = false; - async function generate() { - if (!file) return; - try { - const arrayBuffer = await file.arrayBuffer(); - const pdf = await getDocument({ data: arrayBuffer }).promise; - const page = await pdf.getPage(1); - const viewport = page.getViewport({ scale: 0.5 }); - const canvas = document.createElement("canvas"); - canvas.width = viewport.width; - canvas.height = viewport.height; - const context = canvas.getContext("2d"); - if (context) { - await page.render({ canvasContext: context, viewport }).promise; - if (!cancelled) setThumb(canvas.toDataURL()); - } - } catch { - if (!cancelled) setThumb(null); - } - } - generate(); - return () => { cancelled = true; }; - }, [file]); - - return thumb; -} - -interface FileCardProps { - file: File; - onRemove: () => void; - onDoubleClick?: () => void; -} - -function FileCard({ file, onRemove, onDoubleClick }: FileCardProps) { - const { t } = useTranslation(); - const thumb = usePdfThumbnail(file); - - return ( - - - - {thumb ? ( - PDF thumbnail - ) : ( - - - - )} - - - {file.name} - - - - {getFileSize(file)} - - - {getFileDate(file)} - - - - - - ); -} - interface FileManagerProps { files: FileWithUrl[]; setFiles: React.Dispatch>; @@ -145,21 +31,212 @@ const FileManager: React.FC = ({ setCurrentView, }) => { const { t } = useTranslation(); - const handleDrop = (uploadedFiles: File[]) => { - setFiles((prevFiles) => (allowMultiple ? [...prevFiles, ...uploadedFiles] : uploadedFiles)); + const [loading, setLoading] = useState(false); + const [storageStats, setStorageStats] = useState(null); + const [notification, setNotification] = useState(null); + const [filesLoaded, setFilesLoaded] = useState(false); + + // Extract operations from service for cleaner code + const { + loadStorageStats, + forceReloadFiles, + loadExistingFiles, + uploadFiles, + removeFile, + clearAllFiles, + createBlobUrlForFile, + checkForPurge, + updateStorageStatsIncremental + } = fileOperationsService; + + // Add CSS for spinner animation + useEffect(() => { + if (!document.querySelector('#spinner-animation')) { + const style = document.createElement('style'); + style.id = 'spinner-animation'; + style.textContent = ` + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + `; + document.head.appendChild(style); + } + }, []); + + // Load existing files from IndexedDB on mount + useEffect(() => { + if (!filesLoaded) { + handleLoadExistingFiles(); + } + }, [filesLoaded]); + + // Load storage stats and set up periodic updates + useEffect(() => { + handleLoadStorageStats(); + + const interval = setInterval(async () => { + await handleLoadStorageStats(); + await handleCheckForPurge(); + }, 10000); // Update every 10 seconds + + return () => clearInterval(interval); + }, []); + + // Sync UI with IndexedDB whenever storage stats change + useEffect(() => { + const syncWithStorage = async () => { + if (storageStats && filesLoaded) { + // If file counts don't match, force reload + if (storageStats.fileCount !== files.length) { + console.warn('File count mismatch: storage has', storageStats.fileCount, 'but UI shows', files.length, '- forcing reload'); + const reloadedFiles = await forceReloadFiles(); + setFiles(reloadedFiles); + } + } + }; + + syncWithStorage(); + }, [storageStats, filesLoaded, files.length]); + + // Handlers using extracted operations + const handleLoadStorageStats = async () => { + const stats = await loadStorageStats(); + if (stats) { + setStorageStats(stats); + + // Check for storage warnings + const warning = checkStorageWarnings(stats); + if (warning) { + setNotification(warning); + } + } }; - const handleRemoveFile = (index: number) => { - setFiles((prevFiles) => prevFiles.filter((_, i) => i !== index)); + const handleLoadExistingFiles = async () => { + try { + const loadedFiles = await loadExistingFiles(filesLoaded, files); + setFiles(loadedFiles); + setFilesLoaded(true); + } catch (error) { + console.error('Failed to load existing files:', error); + setFilesLoaded(true); + } + }; + + const handleCheckForPurge = async () => { + try { + const isPurged = await checkForPurge(files); + if (isPurged) { + console.warn('IndexedDB purge detected - forcing UI reload'); + setNotification('Browser cleared storage. Files have been removed. Please re-upload.'); + const reloadedFiles = await forceReloadFiles(); + setFiles(reloadedFiles); + setFilesLoaded(true); + } + } catch (error) { + console.error('Error checking for purge:', error); + } + }; + + const handleDrop = async (uploadedFiles: File[]) => { + setLoading(true); + + try { + const newFiles = await uploadFiles(uploadedFiles, defaultStorageConfig.useIndexedDB); + + // Update files state + setFiles((prevFiles) => (allowMultiple ? [...prevFiles, ...newFiles] : newFiles)); + + // Update storage stats incrementally + if (storageStats) { + const updatedStats = updateStorageStatsIncremental(storageStats, 'add', newFiles); + setStorageStats(updatedStats); + + // Check for storage warnings + const warning = checkStorageWarnings(updatedStats); + if (warning) { + setNotification(warning); + } + } + } catch (error) { + console.error('Error handling file drop:', error); + setNotification(t("fileManager.uploadError", "Failed to upload some files.")); + } finally { + setLoading(false); + } + }; + + const handleRemoveFile = async (index: number) => { + const file = files[index]; + + try { + await removeFile(file); + + // Update storage stats incrementally + if (storageStats) { + const updatedStats = updateStorageStatsIncremental(storageStats, 'remove', [file]); + setStorageStats(updatedStats); + } + + setFiles((prevFiles) => prevFiles.filter((_, i) => i !== index)); + } catch (error) { + console.error('Failed to remove file:', error); + } + }; + + const handleClearAll = async () => { + try { + await clearAllFiles(files); + + // Reset storage stats + if (storageStats) { + const clearedStats = updateStorageStatsIncremental(storageStats, 'clear'); + setStorageStats(clearedStats); + } + + setFiles([]); + } catch (error) { + console.error('Failed to clear all files:', error); + } + }; + + const handleReloadFiles = () => { + setFilesLoaded(false); + setFiles([]); + }; + + const handleFileDoubleClick = async (file: FileWithUrl) => { + if (setPdfFile) { + try { + const url = await createBlobUrlForFile(file); + setPdfFile({ file: file, url: url }); + setCurrentView && setCurrentView("viewer"); + } catch (error) { + console.error('Failed to create blob URL for file:', error); + setNotification('Failed to open file. It may have been removed from storage.'); + } + } }; return ( -
+
+ + {/* File Upload Dropzone */} = ({ display: "flex", alignItems: "center", justifyContent: "center", - width:"90%" + width: "90%" }} > - - - {t("fileChooser.dragAndDropPDF", "Drag PDF files here or click to select")} - - + + {t("fileChooser.dragAndDropPDF", "Drag PDF files here or click to select")} + + + {/* Storage Stats Card */} + + + {/* Files Display */} {files.length === 0 ? ( {t("noFileSelected", "No files uploaded yet.")} @@ -192,23 +277,26 @@ const FileManager: React.FC = ({ > {files.map((file, idx) => ( handleRemoveFile(idx)} - onDoubleClick={() => { - const fileObj = (file as FileWithUrl).file || file; - setPdfFile && - setPdfFile({ - file: fileObj, - url: URL.createObjectURL(fileObj), - }); - setCurrentView && setCurrentView("viewer"); - }} - /> + onDoubleClick={() => handleFileDoubleClick(file)} + as FileWithUrl /> ))} )} + + {/* Notifications */} + {notification && ( + setNotification(null)} + style={{ position: "fixed", bottom: 20, right: 20, zIndex: 1000 }} + > + {notification} + + )}
); }; diff --git a/frontend/src/components/StorageStatsCard.tsx b/frontend/src/components/StorageStatsCard.tsx new file mode 100644 index 000000000..31c991208 --- /dev/null +++ b/frontend/src/components/StorageStatsCard.tsx @@ -0,0 +1,76 @@ +import React from "react"; +import { Card, Group, Text, Button, Progress } from "@mantine/core"; +import { useTranslation } from "react-i18next"; +import StorageIcon from "@mui/icons-material/Storage"; +import DeleteIcon from "@mui/icons-material/Delete"; +import { StorageStats } from "../services/fileStorage"; +import { formatFileSize } from "../utils/fileUtils"; +import { getStorageUsagePercent } from "../utils/storageUtils"; + +interface StorageStatsCardProps { + storageStats: StorageStats | null; + filesCount: number; + onClearAll: () => void; + onReloadFiles: () => void; +} + +const StorageStatsCard: React.FC = ({ + storageStats, + filesCount, + onClearAll, + onReloadFiles, +}) => { + const { t } = useTranslation(); + + if (!storageStats) return null; + + const storageUsagePercent = getStorageUsagePercent(storageStats); + + return ( + + + +
+ + {t("fileManager.storage", "Storage")}: {formatFileSize(storageStats.used)} + {storageStats.quota && ` / ${formatFileSize(storageStats.quota)}`} + + {storageStats.quota && ( + 80 ? "red" : storageUsagePercent > 60 ? "yellow" : "blue"} + size="sm" + mt={4} + /> + )} + + {storageStats.fileCount} {t("fileManager.filesStored", "files stored")} + +
+ + {filesCount > 0 && ( + + )} + + +
+
+ ); +}; + +export default StorageStatsCard; \ No newline at end of file diff --git a/frontend/src/components/Viewer.tsx b/frontend/src/components/Viewer.tsx index f119b4114..14143b916 100644 --- a/frontend/src/components/Viewer.tsx +++ b/frontend/src/components/Viewer.tsx @@ -10,9 +10,118 @@ import ViewSidebarIcon from "@mui/icons-material/ViewSidebar"; import ViewWeekIcon from "@mui/icons-material/ViewWeek"; // for dual page (book) import DescriptionIcon from "@mui/icons-material/Description"; // for single page import { useLocalStorage } from "@mantine/hooks"; +import { fileStorage } from "../services/fileStorage"; GlobalWorkerOptions.workerSrc = "/pdf.worker.js"; +// Lazy loading page image component +interface LazyPageImageProps { + pageIndex: number; + zoom: number; + theme: any; + isFirst: boolean; + renderPage: (pageIndex: number) => Promise; + pageImages: (string | null)[]; + setPageRef: (index: number, ref: HTMLImageElement | null) => void; +} + +const LazyPageImage: React.FC = ({ + pageIndex, zoom, theme, isFirst, renderPage, pageImages, setPageRef +}) => { + const [isVisible, setIsVisible] = useState(false); + const [imageUrl, setImageUrl] = useState(pageImages[pageIndex]); + const imgRef = useRef(null); + + useEffect(() => { + const observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting && !imageUrl) { + setIsVisible(true); + } + }); + }, + { + rootMargin: '200px', // Start loading 200px before visible + threshold: 0.1 + } + ); + + if (imgRef.current) { + observer.observe(imgRef.current); + } + + return () => observer.disconnect(); + }, [imageUrl]); + + useEffect(() => { + if (isVisible && !imageUrl) { + renderPage(pageIndex).then((url) => { + if (url) setImageUrl(url); + }); + } + }, [isVisible, imageUrl, pageIndex, renderPage]); + + useEffect(() => { + if (imgRef.current) { + setPageRef(pageIndex, imgRef.current); + } + }, [pageIndex, setPageRef]); + + if (imageUrl) { + return ( + {`Page + ); + } + + // Placeholder while loading + return ( +
+ {isVisible ? ( +
+
+ Loading page {pageIndex + 1}... +
+ ) : ( + Page {pageIndex + 1} + )} +
+ ); +}; + export interface ViewerProps { pdfFile: { file: File; url: string } | null; setPdfFile: (file: { file: File; url: string } | null) => void; @@ -38,7 +147,52 @@ const Viewer: React.FC = ({ const scrollAreaRef = useRef(null); const userInitiatedRef = useRef(false); const suppressScrollRef = useRef(false); + const pdfDocRef = useRef(null); + const renderingPagesRef = useRef>(new Set()); + const currentArrayBufferRef = useRef(null); + // Function to render a specific page on-demand + const renderPage = async (pageIndex: number): Promise => { + if (!pdfFile || !pdfDocRef.current || renderingPagesRef.current.has(pageIndex)) { + return null; + } + + const pageNum = pageIndex + 1; + if (pageImages[pageIndex]) { + return pageImages[pageIndex]; // Already rendered + } + + renderingPagesRef.current.add(pageIndex); + + try { + const page = await pdfDocRef.current.getPage(pageNum); + const viewport = page.getViewport({ scale: 1.2 }); + const canvas = document.createElement("canvas"); + canvas.width = viewport.width; + canvas.height = viewport.height; + const ctx = canvas.getContext("2d"); + + if (ctx) { + await page.render({ canvasContext: ctx, viewport }).promise; + const dataUrl = canvas.toDataURL(); + + // Update the pageImages array + setPageImages(prev => { + const newImages = [...prev]; + newImages[pageIndex] = dataUrl; + return newImages; + }); + + renderingPagesRef.current.delete(pageIndex); + return dataUrl; + } + } catch (error) { + console.error(`Failed to render page ${pageNum}:`, error); + } + + renderingPagesRef.current.delete(pageIndex); + return null; + }; // Listen for hash changes and update currentPage useEffect(() => { @@ -121,7 +275,7 @@ const Viewer: React.FC = ({ useEffect(() => { let cancelled = false; - async function renderPages() { + async function loadPdfInfo() { if (!pdfFile || !pdfFile.url) { setNumPages(0); setPageImages([]); @@ -129,29 +283,49 @@ const Viewer: React.FC = ({ } setLoading(true); try { - const pdf = await getDocument(pdfFile.url).promise; - setNumPages(pdf.numPages); - const images: string[] = []; - for (let i = 1; i <= pdf.numPages; i++) { - const page = await pdf.getPage(i); - const viewport = page.getViewport({ scale: 1.2 }); - const canvas = document.createElement("canvas"); - canvas.width = viewport.width; - canvas.height = viewport.height; - const ctx = canvas.getContext("2d"); - if (ctx) { - await page.render({ canvasContext: ctx, viewport }).promise; - images.push(canvas.toDataURL()); + let pdfUrl = pdfFile.url; + + // Handle special IndexedDB URLs for large files + if (pdfFile.url.startsWith('indexeddb:')) { + const fileId = pdfFile.url.replace('indexeddb:', ''); + console.log('Loading large file from IndexedDB:', fileId); + + // Get data directly from IndexedDB + const arrayBuffer = await fileStorage.getFileData(fileId); + if (!arrayBuffer) { + throw new Error('File not found in IndexedDB - may have been purged by browser'); } + + // Store reference for cleanup + currentArrayBufferRef.current = arrayBuffer; + + // Use ArrayBuffer directly instead of creating blob URL + const pdf = await getDocument({ data: arrayBuffer }).promise; + pdfDocRef.current = pdf; + setNumPages(pdf.numPages); + if (!cancelled) setPageImages(new Array(pdf.numPages).fill(null)); + } else { + // Standard blob URL or regular URL + const pdf = await getDocument(pdfUrl).promise; + pdfDocRef.current = pdf; + setNumPages(pdf.numPages); + if (!cancelled) setPageImages(new Array(pdf.numPages).fill(null)); + } + } catch (error) { + console.error('Failed to load PDF:', error); + if (!cancelled) { + setPageImages([]); + setNumPages(0); } - if (!cancelled) setPageImages(images); - } catch { - if (!cancelled) setPageImages([]); } if (!cancelled) setLoading(false); } - renderPages(); - return () => { cancelled = true; }; + loadPdfInfo(); + return () => { + cancelled = true; + // Cleanup ArrayBuffer reference to help garbage collection + currentArrayBufferRef.current = null; + }; }, [pdfFile]); useEffect(() => { @@ -210,53 +384,44 @@ const Viewer: React.FC = ({ viewportRef={scrollAreaRef} > - {pageImages.length === 0 && ( + {numPages === 0 && ( {t("viewer.noPagesToDisplay", "No pages to display.")} )} {dualPage - ? Array.from({ length: Math.ceil(pageImages.length / 2) }).map((_, i) => ( + ? Array.from({ length: Math.ceil(numPages / 2) }).map((_, i) => ( - { pageRefs.current[i * 2] = el; }} - src={pageImages[i * 2]} - alt={`Page ${i * 2 + 1}`} - style={{ - width: `${100 * zoom}%`, - maxWidth: 700 * zoom, - boxShadow: "0 2px 8px rgba(0,0,0,0.08)", - borderRadius: 8, - marginTop: i === 0 ? theme.spacing.xl : 0, // <-- add gap to first row - }} + { pageRefs.current[index] = ref; }} /> - {pageImages[i * 2 + 1] && ( - { pageRefs.current[i * 2 + 1] = el; }} - src={pageImages[i * 2 + 1]} - alt={`Page ${i * 2 + 2}`} - style={{ - width: `${100 * zoom}%`, - maxWidth: 700 * zoom, - boxShadow: "0 2px 8px rgba(0,0,0,0.08)", - borderRadius: 8, - marginTop: i === 0 ? theme.spacing.xl : 0, // <-- add gap to first row - }} + {i * 2 + 1 < numPages && ( + { pageRefs.current[index] = ref; }} /> )} )) - : pageImages.map((img, idx) => ( - ( + { pageRefs.current[idx] = el; }} - src={img} - alt={`Page ${idx + 1}`} - style={{ - width: `${100 * zoom}%`, - maxWidth: 700 * zoom, - boxShadow: "0 2px 8px rgba(0,0,0,0.08)", - borderRadius: 8, - marginTop: idx === 0 ? theme.spacing.xl : 0, // <-- add gap to first page - }} + pageIndex={idx} + zoom={zoom} + theme={theme} + isFirst={idx === 0} + renderPage={renderPage} + pageImages={pageImages} + setPageRef={(index, ref) => { pageRefs.current[index] = ref; }} /> ))} diff --git a/frontend/src/hooks/useIndexedDBThumbnail.ts b/frontend/src/hooks/useIndexedDBThumbnail.ts new file mode 100644 index 000000000..b8404e5fe --- /dev/null +++ b/frontend/src/hooks/useIndexedDBThumbnail.ts @@ -0,0 +1,72 @@ +import { useState, useEffect } from "react"; +import { getDocument } from "pdfjs-dist"; +import { FileWithUrl } from "../types/file"; + +/** + * Hook for IndexedDB-aware thumbnail loading + * Handles thumbnail generation for files not in IndexedDB + */ +export function useIndexedDBThumbnail(file: FileWithUrl | undefined | null): { + thumbnail: string | null; + isGenerating: boolean +} { + const [thumb, setThumb] = useState(null); + const [generating, setGenerating] = useState(false); + + useEffect(() => { + let cancelled = false; + + async function loadThumbnail() { + if (!file) { + setThumb(null); + return; + } + + // First priority: use stored thumbnail + if (file.thumbnail) { + setThumb(file.thumbnail); + return; + } + + // Second priority: for IndexedDB files without stored thumbnails, just use placeholder + if (file.storedInIndexedDB && file.id) { + // Don't generate thumbnails for files loaded from IndexedDB - just use placeholder + setThumb(null); + return; + } + + // Third priority: generate from blob for regular files during upload (small files only) + if (!file.storedInIndexedDB && file.size < 50 * 1024 * 1024 && !generating) { + setGenerating(true); + try { + const arrayBuffer = await file.arrayBuffer(); + const pdf = await getDocument({ data: arrayBuffer }).promise; + const page = await pdf.getPage(1); + const viewport = page.getViewport({ scale: 0.2 }); + const canvas = document.createElement("canvas"); + canvas.width = viewport.width; + canvas.height = viewport.height; + const context = canvas.getContext("2d"); + if (context && !cancelled) { + await page.render({ canvasContext: context, viewport }).promise; + if (!cancelled) setThumb(canvas.toDataURL()); + } + pdf.destroy(); // Clean up memory + } catch (error) { + console.warn('Failed to generate thumbnail for regular file', file.name, error); + if (!cancelled) setThumb(null); + } finally { + if (!cancelled) setGenerating(false); + } + } else { + // Large files or files without proper conditions - show placeholder + setThumb(null); + } + } + + loadThumbnail(); + return () => { cancelled = true; }; + }, [file, file?.thumbnail, file?.id]); + + return { thumbnail: thumb, isGenerating: generating }; +} \ No newline at end of file diff --git a/frontend/src/pages/HomePage.tsx b/frontend/src/pages/HomePage.tsx index 5c45f0d14..427dd6645 100644 --- a/frontend/src/pages/HomePage.tsx +++ b/frontend/src/pages/HomePage.tsx @@ -72,8 +72,8 @@ function getToolParams(toolKey: string, searchParams: URLSearchParams) { return { mode: searchParams.get("splitMode") || "byPages", pages: searchParams.get("pages") || "", - hDiv: searchParams.get("hDiv") || "0", - vDiv: searchParams.get("vDiv") || "1", + hDiv: searchParams.get("hDiv") || "", + vDiv: searchParams.get("vDiv") || "", merge: searchParams.get("merge") === "true", splitType: searchParams.get("splitType") || "size", splitValue: searchParams.get("splitValue") || "", @@ -83,8 +83,11 @@ function getToolParams(toolKey: string, searchParams: URLSearchParams) { }; case "compress": return { - level: searchParams.get("compressLevel") || "medium", - keepQuality: searchParams.get("keepQuality") === "true", + compressionLevel: parseInt(searchParams.get("compressionLevel") || "5"), + grayscale: searchParams.get("grayscale") === "true", + removeMetadata: searchParams.get("removeMetadata") === "true", + expectedSize: searchParams.get("expectedSize") || "", + aggressive: searchParams.get("aggressive") === "true", }; case "merge": return { @@ -124,10 +127,13 @@ function updateToolParams(toolKey: string, searchParams: URLSearchParams, setSea params.set("allowDuplicates", String(merged.allowDuplicates)); } } else if (toolKey === "compress") { - ["compressLevel", "keepQuality"].forEach((k) => params.delete(k)); + ["compressionLevel", "grayscale", "removeMetadata", "expectedSize", "aggressive"].forEach((k) => params.delete(k)); const merged = { ...getToolParams("compress", searchParams), ...newParams }; - params.set("compressLevel", merged.level); - params.set("keepQuality", String(merged.keepQuality)); + params.set("compressionLevel", String(merged.compressionLevel)); + params.set("grayscale", String(merged.grayscale)); + params.set("removeMetadata", String(merged.removeMetadata)); + if (merged.expectedSize) params.set("expectedSize", merged.expectedSize); + params.set("aggressive", String(merged.aggressive)); } else if (toolKey === "merge") { ["mergeOrder", "removeDuplicates"].forEach((k) => params.delete(k)); const merged = { ...getToolParams("merge", searchParams), ...newParams }; @@ -146,7 +152,7 @@ const TOOL_PARAMS = { "splitType", "splitValue", "bookmarkLevel", "includeMetadata", "allowDuplicates" ], compress: [ - "compressLevel", "keepQuality" + "compressionLevel", "grayscale", "removeMetadata", "expectedSize", "aggressive" ], merge: [ "mergeOrder", "removeDuplicates" @@ -222,13 +228,39 @@ export default function HomePage() { return
Tool not found
; } - // Pass only the necessary props - return React.createElement(selectedTool.component, { - files, - setDownloadUrl, - params: toolParams, - updateParams, - }); + // Pass tool-specific props + switch (selectedToolKey) { + case "split": + return React.createElement(selectedTool.component, { + file: pdfFile, + downloadUrl, + setDownloadUrl, + params: toolParams, + updateParams, + }); + case "compress": + return React.createElement(selectedTool.component, { + files, + setDownloadUrl, + setLoading: (loading: boolean) => {}, // TODO: Add loading state + params: toolParams, + updateParams, + }); + case "merge": + return React.createElement(selectedTool.component, { + files, + setDownloadUrl, + params: toolParams, + updateParams, + }); + default: + return React.createElement(selectedTool.component, { + files, + setDownloadUrl, + params: toolParams, + updateParams, + }); + } }; return ( diff --git a/frontend/src/services/fileOperationsService.ts b/frontend/src/services/fileOperationsService.ts new file mode 100644 index 000000000..d13965837 --- /dev/null +++ b/frontend/src/services/fileOperationsService.ts @@ -0,0 +1,194 @@ +import { FileWithUrl } from "../types/file"; +import { fileStorage, StorageStats } from "./fileStorage"; +import { loadFilesFromIndexedDB, createEnhancedFileFromStored, cleanupFileUrls } from "../utils/fileUtils"; +import { generateThumbnailForFile } from "../utils/thumbnailUtils"; +import { updateStorageStatsIncremental } from "../utils/storageUtils"; + +/** + * Service for file storage operations + * Contains all IndexedDB operations and file management logic + */ +export const fileOperationsService = { + + /** + * Load storage statistics + */ + async loadStorageStats(): Promise { + try { + return await fileStorage.getStorageStats(); + } catch (error) { + console.error('Failed to load storage stats:', error); + return null; + } + }, + + /** + * Force reload files from IndexedDB + */ + async forceReloadFiles(): Promise { + try { + return await loadFilesFromIndexedDB(); + } catch (error) { + console.error('Failed to force reload files:', error); + return []; + } + }, + + /** + * Load existing files from IndexedDB if not already loaded + */ + async loadExistingFiles( + filesLoaded: boolean, + currentFiles: FileWithUrl[] + ): Promise { + if (filesLoaded && currentFiles.length > 0) { + return currentFiles; + } + + try { + await fileStorage.init(); + const storedFiles = await fileStorage.getAllFileMetadata(); + + // Detect if IndexedDB was purged by comparing with current UI state + if (currentFiles.length > 0 && storedFiles.length === 0) { + console.warn('IndexedDB appears to have been purged - clearing UI state'); + return []; + } + + return await loadFilesFromIndexedDB(); + } catch (error) { + console.error('Failed to load existing files:', error); + return []; + } + }, + + /** + * Upload files to IndexedDB with thumbnail generation + */ + async uploadFiles( + uploadedFiles: File[], + useIndexedDB: boolean + ): Promise { + const newFiles: FileWithUrl[] = []; + + for (const file of uploadedFiles) { + if (useIndexedDB) { + try { + console.log('Storing file in IndexedDB:', file.name); + + // Generate thumbnail only during upload + const thumbnail = await generateThumbnailForFile(file); + + const storedFile = await fileStorage.storeFile(file, thumbnail); + console.log('File stored with ID:', storedFile.id); + + const baseFile = fileStorage.createFileFromStored(storedFile); + const enhancedFile = createEnhancedFileFromStored(storedFile, thumbnail); + + // Copy File interface methods from baseFile + enhancedFile.arrayBuffer = baseFile.arrayBuffer.bind(baseFile); + enhancedFile.slice = baseFile.slice.bind(baseFile); + enhancedFile.stream = baseFile.stream.bind(baseFile); + enhancedFile.text = baseFile.text.bind(baseFile); + + newFiles.push(enhancedFile); + } catch (error) { + console.error('Failed to store file in IndexedDB:', error); + // Fallback to RAM storage + const enhancedFile: FileWithUrl = Object.assign(file, { + url: URL.createObjectURL(file), + storedInIndexedDB: false + }); + newFiles.push(enhancedFile); + } + } else { + // IndexedDB disabled - use RAM + const enhancedFile: FileWithUrl = Object.assign(file, { + url: URL.createObjectURL(file), + storedInIndexedDB: false + }); + newFiles.push(enhancedFile); + } + } + + return newFiles; + }, + + /** + * Remove a file from storage + */ + async removeFile(file: FileWithUrl): Promise { + // Clean up blob URL + if (file.url && !file.url.startsWith('indexeddb:')) { + URL.revokeObjectURL(file.url); + } + + // Remove from IndexedDB if stored there + if (file.storedInIndexedDB && file.id) { + try { + await fileStorage.deleteFile(file.id); + } catch (error) { + console.error('Failed to delete file from IndexedDB:', error); + } + } + }, + + /** + * Clear all files from storage + */ + async clearAllFiles(files: FileWithUrl[]): Promise { + // Clean up all blob URLs + cleanupFileUrls(files); + + // Clear IndexedDB + try { + await fileStorage.clearAll(); + } catch (error) { + console.error('Failed to clear IndexedDB:', error); + } + }, + + /** + * Create blob URL for file viewing + */ + async createBlobUrlForFile(file: FileWithUrl): Promise { + // For large files, use IndexedDB direct access to avoid memory issues + const FILE_SIZE_LIMIT = 100 * 1024 * 1024; // 100MB + if (file.size > FILE_SIZE_LIMIT) { + console.warn(`File ${file.name} is too large for blob URL. Use direct IndexedDB access.`); + return `indexeddb:${file.id}`; + } + + // For all files, avoid persistent blob URLs + if (file.storedInIndexedDB && file.id) { + const storedFile = await fileStorage.getFile(file.id); + if (storedFile) { + return fileStorage.createBlobUrl(storedFile); + } + } + + // Fallback for files not in IndexedDB + return URL.createObjectURL(file); + }, + + /** + * Check for IndexedDB purge + */ + async checkForPurge(currentFiles: FileWithUrl[]): Promise { + if (currentFiles.length === 0) return false; + + try { + await fileStorage.init(); + const storedFiles = await fileStorage.getAllFileMetadata(); + return storedFiles.length === 0; // Purge detected if no files in storage but UI shows files + } catch (error) { + console.error('Error checking for purge:', error); + return true; // Assume purged if can't access IndexedDB + } + }, + + /** + * Update storage stats incrementally (re-export utility for convenience) + */ + updateStorageStatsIncremental +}; \ No newline at end of file diff --git a/frontend/src/services/fileStorage.ts b/frontend/src/services/fileStorage.ts new file mode 100644 index 000000000..9ba2e7def --- /dev/null +++ b/frontend/src/services/fileStorage.ts @@ -0,0 +1,576 @@ +/** + * IndexedDB File Storage Service + * Provides high-capacity file storage for PDF processing + */ + +export interface StoredFile { + id: string; + name: string; + type: string; + size: number; + lastModified: number; + data: ArrayBuffer; + thumbnail?: string; + url?: string; // For compatibility with existing components +} + +export interface StorageStats { + used: number; + available: number; + fileCount: number; + quota?: number; +} + +class FileStorageService { + private dbName = 'stirling-pdf-files'; + private dbVersion = 2; // Increment version to force schema update + private storeName = 'files'; + private db: IDBDatabase | null = null; + private initPromise: Promise | null = null; + + /** + * Initialize the IndexedDB database (singleton pattern) + */ + async init(): Promise { + if (this.db) { + return Promise.resolve(); + } + + if (this.initPromise) { + return this.initPromise; + } + + this.initPromise = new Promise((resolve, reject) => { + const request = indexedDB.open(this.dbName, this.dbVersion); + + request.onerror = () => { + this.initPromise = null; + reject(request.error); + }; + + request.onsuccess = () => { + this.db = request.result; + console.log('IndexedDB connection established'); + resolve(); + }; + + request.onupgradeneeded = (event) => { + const db = (event.target as IDBOpenDBRequest).result; + const oldVersion = (event as any).oldVersion; + + console.log('IndexedDB upgrade needed from version', oldVersion, 'to', this.dbVersion); + + // Only recreate object store if it doesn't exist or if upgrading from version < 2 + if (!db.objectStoreNames.contains(this.storeName)) { + const store = db.createObjectStore(this.storeName, { keyPath: 'id' }); + store.createIndex('name', 'name', { unique: false }); + store.createIndex('lastModified', 'lastModified', { unique: false }); + console.log('IndexedDB object store created with keyPath: id'); + } else if (oldVersion < 2) { + // Only delete and recreate if upgrading from version 1 to 2 + db.deleteObjectStore(this.storeName); + const store = db.createObjectStore(this.storeName, { keyPath: 'id' }); + store.createIndex('name', 'name', { unique: false }); + store.createIndex('lastModified', 'lastModified', { unique: false }); + console.log('IndexedDB object store recreated with keyPath: id (version upgrade)'); + } + }; + }); + + return this.initPromise; + } + + /** + * Store a file in IndexedDB + */ + async storeFile(file: File, thumbnail?: string): Promise { + if (!this.db) await this.init(); + + const id = `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; + const arrayBuffer = await file.arrayBuffer(); + + const storedFile: StoredFile = { + id, + name: file.name, + type: file.type, + size: file.size, + lastModified: file.lastModified, + data: arrayBuffer, + thumbnail + }; + + return new Promise((resolve, reject) => { + try { + const transaction = this.db!.transaction([this.storeName], 'readwrite'); + const store = transaction.objectStore(this.storeName); + + // Debug logging + console.log('Object store keyPath:', store.keyPath); + console.log('Storing file:', { + id: storedFile.id, + name: storedFile.name, + hasData: !!storedFile.data, + dataSize: storedFile.data.byteLength + }); + + const request = store.add(storedFile); + + request.onerror = () => { + console.error('IndexedDB add error:', request.error); + console.error('Failed object:', storedFile); + reject(request.error); + }; + request.onsuccess = () => { + console.log('File stored successfully with ID:', storedFile.id); + resolve(storedFile); + }; + } catch (error) { + console.error('Transaction error:', error); + reject(error); + } + }); + } + + /** + * Retrieve a file from IndexedDB + */ + async getFile(id: string): Promise { + if (!this.db) await this.init(); + + return new Promise((resolve, reject) => { + const transaction = this.db!.transaction([this.storeName], 'readonly'); + const store = transaction.objectStore(this.storeName); + const request = store.get(id); + + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(request.result || null); + }); + } + + /** + * Get all stored files (WARNING: loads all data into memory) + */ + async getAllFiles(): Promise { + if (!this.db) await this.init(); + + return new Promise((resolve, reject) => { + const transaction = this.db!.transaction([this.storeName], 'readonly'); + const store = transaction.objectStore(this.storeName); + const request = store.getAll(); + + request.onerror = () => reject(request.error); + request.onsuccess = () => { + // Filter out null/corrupted entries + const files = request.result.filter(file => + file && + file.data && + file.name && + typeof file.size === 'number' + ); + resolve(files); + }; + }); + } + + /** + * Get metadata of all stored files (without loading data into memory) + */ + async getAllFileMetadata(): Promise[]> { + if (!this.db) await this.init(); + + return new Promise((resolve, reject) => { + const transaction = this.db!.transaction([this.storeName], 'readonly'); + const store = transaction.objectStore(this.storeName); + const request = store.openCursor(); + const files: Omit[] = []; + + request.onerror = () => reject(request.error); + request.onsuccess = (event) => { + const cursor = (event.target as IDBRequest).result; + if (cursor) { + const storedFile = cursor.value; + // Only extract metadata, skip the data field + if (storedFile && storedFile.name && typeof storedFile.size === 'number') { + files.push({ + id: storedFile.id, + name: storedFile.name, + type: storedFile.type, + size: storedFile.size, + lastModified: storedFile.lastModified, + thumbnail: storedFile.thumbnail + }); + } + cursor.continue(); + } else { + console.log('Loaded metadata for', files.length, 'files without loading data'); + resolve(files); + } + }; + }); + } + + /** + * Delete a file from IndexedDB + */ + async deleteFile(id: string): Promise { + if (!this.db) await this.init(); + + return new Promise((resolve, reject) => { + const transaction = this.db!.transaction([this.storeName], 'readwrite'); + const store = transaction.objectStore(this.storeName); + const request = store.delete(id); + + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(); + }); + } + + /** + * Clear all stored files + */ + async clearAll(): Promise { + if (!this.db) await this.init(); + + return new Promise((resolve, reject) => { + const transaction = this.db!.transaction([this.storeName], 'readwrite'); + const store = transaction.objectStore(this.storeName); + const request = store.clear(); + + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(); + }); + } + + /** + * Get storage statistics (only our IndexedDB usage) + */ + async getStorageStats(): Promise { + if (!this.db) await this.init(); + + let used = 0; + let available = 0; + let quota: number | undefined; + let fileCount = 0; + + try { + // Get browser quota for context + if ('storage' in navigator && 'estimate' in navigator.storage) { + const estimate = await navigator.storage.estimate(); + quota = estimate.quota; + available = estimate.quota || 0; + } + + // Calculate our actual IndexedDB usage from file metadata + const files = await this.getAllFileMetadata(); + used = files.reduce((total, file) => total + (file?.size || 0), 0); + fileCount = files.length; + + // Adjust available space + if (quota) { + available = quota - used; + } + + } catch (error) { + console.warn('Could not get storage stats:', error); + // If we can't read metadata, database might be purged + used = 0; + fileCount = 0; + } + + return { + used, + available, + fileCount, + quota + }; + } + + /** + * Get file count quickly without loading metadata + */ + async getFileCount(): Promise { + if (!this.db) await this.init(); + + return new Promise((resolve, reject) => { + const transaction = this.db!.transaction([this.storeName], 'readonly'); + const store = transaction.objectStore(this.storeName); + const request = store.count(); + + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(request.result); + }); + } + + /** + * Check all IndexedDB databases to see if files are in another version + */ + async debugAllDatabases(): Promise { + console.log('=== Checking All IndexedDB Databases ==='); + + if ('databases' in indexedDB) { + try { + const databases = await indexedDB.databases(); + console.log('Found databases:', databases); + + for (const dbInfo of databases) { + if (dbInfo.name?.includes('stirling') || dbInfo.name?.includes('pdf')) { + console.log(`Checking database: ${dbInfo.name} (version: ${dbInfo.version})`); + try { + const db = await new Promise((resolve, reject) => { + const request = indexedDB.open(dbInfo.name!, dbInfo.version); + request.onsuccess = () => resolve(request.result); + request.onerror = () => reject(request.error); + }); + + console.log(`Database ${dbInfo.name} object stores:`, Array.from(db.objectStoreNames)); + db.close(); + } catch (error) { + console.error(`Failed to open database ${dbInfo.name}:`, error); + } + } + } + } catch (error) { + console.error('Failed to list databases:', error); + } + } else { + console.log('indexedDB.databases() not supported'); + } + + // Also check our specific database with different versions + for (let version = 1; version <= 3; version++) { + try { + console.log(`Trying to open ${this.dbName} version ${version}...`); + const db = await new Promise((resolve, reject) => { + const request = indexedDB.open(this.dbName, version); + request.onsuccess = () => resolve(request.result); + request.onerror = () => reject(request.error); + request.onupgradeneeded = () => { + // Don't actually upgrade, just check + request.transaction?.abort(); + }; + }); + + console.log(`Version ${version} object stores:`, Array.from(db.objectStoreNames)); + + if (db.objectStoreNames.contains('files')) { + const transaction = db.transaction(['files'], 'readonly'); + const store = transaction.objectStore('files'); + const countRequest = store.count(); + countRequest.onsuccess = () => { + console.log(`Version ${version} files store has ${countRequest.result} entries`); + }; + } + + db.close(); + } catch (error) { + console.log(`Version ${version} not accessible:`, error.message); + } + } + } + + /** + * Debug method to check what's actually in the database + */ + async debugDatabaseContents(): Promise { + if (!this.db) await this.init(); + + return new Promise((resolve, reject) => { + const transaction = this.db!.transaction([this.storeName], 'readonly'); + const store = transaction.objectStore(this.storeName); + + // First try getAll to see if there's anything + const getAllRequest = store.getAll(); + getAllRequest.onsuccess = () => { + console.log('=== Raw getAll() result ==='); + console.log('Raw entries found:', getAllRequest.result.length); + getAllRequest.result.forEach((item, index) => { + console.log(`Raw entry ${index}:`, { + keys: Object.keys(item || {}), + id: item?.id, + name: item?.name, + size: item?.size, + type: item?.type, + hasData: !!item?.data, + dataSize: item?.data?.byteLength, + fullObject: item + }); + }); + }; + + // Then try cursor + const cursorRequest = store.openCursor(); + console.log('=== IndexedDB Cursor Debug ==='); + let count = 0; + + cursorRequest.onerror = () => { + console.error('Cursor error:', cursorRequest.error); + reject(cursorRequest.error); + }; + + cursorRequest.onsuccess = (event) => { + const cursor = (event.target as IDBRequest).result; + if (cursor) { + count++; + const value = cursor.value; + console.log(`Cursor File ${count}:`, { + id: value?.id, + name: value?.name, + size: value?.size, + type: value?.type, + hasData: !!value?.data, + dataSize: value?.data?.byteLength, + hasThumbnail: !!value?.thumbnail, + allKeys: Object.keys(value || {}) + }); + cursor.continue(); + } else { + console.log(`=== End Cursor Debug - Found ${count} files ===`); + resolve(); + } + }; + }); + } + + /** + * Convert StoredFile back to File object for compatibility + */ + createFileFromStored(storedFile: StoredFile): File { + if (!storedFile || !storedFile.data) { + throw new Error('Invalid stored file: missing data'); + } + + if (!storedFile.name || typeof storedFile.size !== 'number') { + throw new Error('Invalid stored file: missing metadata'); + } + + const blob = new Blob([storedFile.data], { type: storedFile.type }); + const file = new File([blob], storedFile.name, { + type: storedFile.type, + lastModified: storedFile.lastModified + }); + + // Add custom properties for compatibility + Object.defineProperty(file, 'id', { value: storedFile.id, writable: false }); + Object.defineProperty(file, 'thumbnail', { value: storedFile.thumbnail, writable: false }); + + return file; + } + + /** + * Create blob URL for stored file + */ + createBlobUrl(storedFile: StoredFile): string { + const blob = new Blob([storedFile.data], { type: storedFile.type }); + return URL.createObjectURL(blob); + } + + /** + * Get file data as ArrayBuffer for streaming/chunked processing + */ + async getFileData(id: string): Promise { + try { + const storedFile = await this.getFile(id); + return storedFile ? storedFile.data : null; + } catch (error) { + console.warn(`Failed to get file data for ${id}:`, error); + return null; + } + } + + /** + * Create a temporary blob URL that gets revoked automatically + */ + async createTemporaryBlobUrl(id: string): Promise { + const data = await this.getFileData(id); + if (!data) return null; + + const blob = new Blob([data], { type: 'application/pdf' }); + const url = URL.createObjectURL(blob); + + // Auto-revoke after a short delay to free memory + setTimeout(() => { + URL.revokeObjectURL(url); + }, 10000); // 10 seconds + + return url; + } + + /** + * Update thumbnail for an existing file + */ + async updateThumbnail(id: string, thumbnail: string): Promise { + if (!this.db) await this.init(); + + return new Promise((resolve, reject) => { + try { + const transaction = this.db!.transaction([this.storeName], 'readwrite'); + const store = transaction.objectStore(this.storeName); + const getRequest = store.get(id); + + getRequest.onsuccess = () => { + const storedFile = getRequest.result; + if (storedFile) { + storedFile.thumbnail = thumbnail; + const updateRequest = store.put(storedFile); + + updateRequest.onsuccess = () => { + console.log('Thumbnail updated for file:', id); + resolve(true); + }; + updateRequest.onerror = () => { + console.error('Failed to update thumbnail:', updateRequest.error); + resolve(false); + }; + } else { + resolve(false); + } + }; + + getRequest.onerror = () => { + console.error('Failed to get file for thumbnail update:', getRequest.error); + resolve(false); + }; + } catch (error) { + console.error('Transaction error during thumbnail update:', error); + resolve(false); + } + }); + } + + /** + * Check if storage quota is running low + */ + async isStorageLow(): Promise { + const stats = await this.getStorageStats(); + if (!stats.quota) return false; + + const usagePercent = stats.used / stats.quota; + return usagePercent > 0.8; // Consider low if over 80% used + } + + /** + * Clean up old files if storage is low + */ + async cleanupOldFiles(maxFiles: number = 50): Promise { + const files = await this.getAllFileMetadata(); + + if (files.length <= maxFiles) return; + + // Sort by last modified (oldest first) + files.sort((a, b) => a.lastModified - b.lastModified); + + // Delete oldest files + const filesToDelete = files.slice(0, files.length - maxFiles); + for (const file of filesToDelete) { + await this.deleteFile(file.id); + } + } +} + +// Export singleton instance +export const fileStorage = new FileStorageService(); + +// Helper hook for React components +export function useFileStorage() { + return fileStorage; +} \ No newline at end of file diff --git a/frontend/src/tools/Compress.tsx b/frontend/src/tools/Compress.tsx index 4ad40e63b..8f8f4257b 100644 --- a/frontend/src/tools/Compress.tsx +++ b/frontend/src/tools/Compress.tsx @@ -2,30 +2,49 @@ import React, { useState } from "react"; import { useSearchParams } from "react-router-dom"; import { useTranslation } from "react-i18next"; import { Stack, Slider, Group, Text, Button, Checkbox, TextInput, Paper } from "@mantine/core"; +import { FileWithUrl } from "../types/file"; +import { fileStorage } from "../services/fileStorage"; export interface CompressProps { - files?: File[]; + files?: FileWithUrl[]; setDownloadUrl?: (url: string) => void; setLoading?: (loading: boolean) => void; + params?: { + compressionLevel: number; + grayscale: boolean; + removeMetadata: boolean; + expectedSize: string; + aggressive: boolean; + }; + updateParams?: (newParams: Partial) => void; } const CompressPdfPanel: React.FC = ({ files = [], setDownloadUrl, setLoading, + params = { + compressionLevel: 5, + grayscale: false, + removeMetadata: false, + expectedSize: "", + aggressive: false, + }, + updateParams, }) => { const { t } = useTranslation(); - const [searchParams] = useSearchParams(); - const [selected, setSelected] = useState(files.map(() => false)); - const [compressionLevel, setCompressionLevel] = useState(5); - const [grayscale, setGrayscale] = useState(false); - const [removeMetadata, setRemoveMetadata] = useState(false); - const [expectedSize, setExpectedSize] = useState(""); - const [aggressive, setAggressive] = useState(false); const [localLoading, setLocalLoading] = useState(false); + const { + compressionLevel, + grayscale, + removeMetadata, + expectedSize, + aggressive, + } = params; + // Update selection state if files prop changes React.useEffect(() => { setSelected(files.map(() => false)); @@ -41,21 +60,39 @@ const CompressPdfPanel: React.FC = ({ setLocalLoading(true); setLoading?.(true); - const formData = new FormData(); - selectedFiles.forEach(file => formData.append("fileInput", file)); - formData.append("compressionLevel", compressionLevel.toString()); - formData.append("grayscale", grayscale.toString()); - formData.append("removeMetadata", removeMetadata.toString()); - formData.append("aggressive", aggressive.toString()); - if (expectedSize) formData.append("expectedSize", expectedSize); - try { + const formData = new FormData(); + + // Handle IndexedDB files + for (const file of selectedFiles) { + if (!file.id) { + continue; // Skip files without an id + } + const storedFile = await fileStorage.getFile(file.id); + if (storedFile) { + const blob = new Blob([storedFile.data], { type: storedFile.type }); + const actualFile = new File([blob], storedFile.name, { + type: storedFile.type, + lastModified: storedFile.lastModified + }); + formData.append("fileInput", actualFile); + } + } + + formData.append("compressionLevel", compressionLevel.toString()); + formData.append("grayscale", grayscale.toString()); + formData.append("removeMetadata", removeMetadata.toString()); + formData.append("aggressive", aggressive.toString()); + if (expectedSize) formData.append("expectedSize", expectedSize); + const res = await fetch("/api/v1/general/compress-pdf", { method: "POST", body: formData, }); const blob = await res.blob(); setDownloadUrl?.(URL.createObjectURL(blob)); + } catch (error) { + console.error('Compression failed:', error); } finally { setLocalLoading(false); setLoading?.(false); @@ -84,7 +121,7 @@ const CompressPdfPanel: React.FC = ({ max={9} step={1} value={compressionLevel} - onChange={setCompressionLevel} + onChange={(value) => updateParams?.({ compressionLevel: value })} marks={[ { value: 1, label: "1" }, { value: 5, label: "5" }, @@ -96,23 +133,23 @@ const CompressPdfPanel: React.FC = ({ setGrayscale(e.currentTarget.checked)} + onChange={e => updateParams?.({ grayscale: e.currentTarget.checked })} /> setRemoveMetadata(e.currentTarget.checked)} + onChange={e => updateParams?.({ removeMetadata: e.currentTarget.checked })} /> setAggressive(e.currentTarget.checked)} + onChange={e => updateParams?.({ aggressive: e.currentTarget.checked })} /> setExpectedSize(e.currentTarget.value)} + onChange={e => updateParams?.({ expectedSize: e.currentTarget.value })} />