Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:
version:
description: 'Version tag vYYYY.W.N (year, ISO week, sequence); must match the version fields'
required: true
default: 'v2026.44.4'
default: 'v2026.44.19'

jobs:
create-release:
Expand Down
12 changes: 6 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion mcp-stdio/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "open-pdf-studio-mcp-stdio",
"version": "2026.44.4",
"version": "2026.44.19",
"private": true,
"type": "module",
"description": "Thin stdio↔HTTP bridge that exposes Open PDF Studio's in-app MCP server (assistant + PDF tools) to Claude Desktop / Claude Code.",
Expand Down
2 changes: 1 addition & 1 deletion mcpb/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"manifest_version": "0.3",
"name": "open-pdf-studio",
"display_name": "Open PDF Studio",
"version": "2026.44.4",
"version": "2026.44.19",
"description": "Open, measure, annotate and save PDF drawings in Open PDF Studio, the free open-source PDF editor for the construction industry.",
"long_description": "Connects Claude to Open PDF Studio running on your computer. Claude can open PDF drawings, read and navigate pages, place scale regions, measure areas and lengths, create and edit annotations, cut vector snippets from one drawing into another, fill title blocks, place a quantity schedule on the sheet and save the result.\n\nEverything runs locally: the extension talks to the app on 127.0.0.1 and the PDF file itself is never sent to an external service. Claude only sees what it asks for, such as a picture of the current page view.\n\n**Before you start:** install Open PDF Studio (free, from open-aec.com). The AI link is on by default; check it under **Settings > General > AI link (MCP)**. Tools that change a document always ask for your permission.",
"author": {
Expand Down
2 changes: 1 addition & 1 deletion open-pdf-cad/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "open-pdf-cad"
version = "2026.44.4"
version = "2026.44.19"
edition = "2021"
license = "LGPL-3.0-or-later"
description = "CAD exchange for PDF pages: exports vector content to DXF and DWG through one shared geometry model"
Expand Down
2 changes: 1 addition & 1 deletion open-pdf-cmyk/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "open-pdf-cmyk"
version = "2026.44.4"
version = "2026.44.19"
edition = "2021"
license = "LGPL-3.0-or-later"
description = "Converts the RGB colour of a PDF to CMYK through an ICC printing profile (PDF/X export)"
Expand Down
2 changes: 1 addition & 1 deletion open-pdf-render/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion open-pdf-render/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "open-pdf-render"
version = "2026.44.4"
version = "2026.44.19"
edition = "2021"
license = "MIT"
description = "Pure Rust PDF page renderer — renders PDF pages to RGBA bitmaps"
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/ar/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "علامات القص",
"posterLabels": "تسميات (الملف، الصفحة، المربع)",
"posterOnlyLarge": "تقسيم الصفحات الكبيرة فقط",
"posterEdgeCrop": "قص الحواف الخارجية الصغيرة",
"posterEdgeCropHint": "حتى {{max}} مم لكل حافة خارجية، لهذه الطباعة فقط. عند التعطيل: الاحتفاظ بكل المحتوى.",
"posterTileInfo": "الصفحة {{page}}: المربع {{row}},{{col}} (صف، عمود) من {{rows}} × {{cols}}",
"posterNotTiled": "الصفحة {{page}} تتسع في ورقة واحدة ولن تُقسَّم.",
"posterAssumedPaper": "حجم الورق غير معروف: تُوزَّع المربعات على {{paper}}.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/bg/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "Маркери за рязане",
"posterLabels": "Етикети (файл, страница, плочка)",
"posterOnlyLarge": "Разделяй само големите страници",
"posterEdgeCrop": "Изрязване на малки външни ръбове",
"posterEdgeCropHint": "До {{max}} мм от всеки външен ръб, само за този печат. Изключено: запазване на цялото съдържание.",
"posterTileInfo": "Страница {{page}}: плочка {{row}},{{col}} (ред, колона) от {{rows}} × {{cols}}",
"posterNotTiled": "Страница {{page}} се побира на един лист и не се разделя.",
"posterAssumedPaper": "Размерът на хартията е неизвестен: плочките се разполагат върху {{paper}}.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/bn/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "কাটার চিহ্ন",
"posterLabels": "লেবেল (ফাইল, পৃষ্ঠা, টাইল)",
"posterOnlyLarge": "শুধু বড় পৃষ্ঠা টাইল করুন",
"posterEdgeCrop": "বাইরের প্রান্ত সামান্য ছাঁটুন",
"posterEdgeCropHint": "শুধু এই মুদ্রণের জন্য প্রতি বাইরের প্রান্তে সর্বোচ্চ {{max}} মিমি। বন্ধ থাকলে সব বিষয়বস্তু সংরক্ষিত থাকবে।",
"posterTileInfo": "পৃষ্ঠা {{page}}: টাইল {{row}},{{col}} (সারি, কলাম), মোট {{rows}} × {{cols}}",
"posterNotTiled": "পৃষ্ঠা {{page}} একটি শিটে এঁটে যায় এবং টাইল করা হয় না।",
"posterAssumedPaper": "কাগজের আকার অজানা: টাইলগুলি {{paper}}-এ সাজানো হয়।",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/ca/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "Marques de tall",
"posterLabels": "Etiquetes (fitxer, pàgina, tessel·la)",
"posterOnlyLarge": "Divideix només les pàgines grans",
"posterEdgeCrop": "Retalla lleugerament les vores exteriors",
"posterEdgeCropHint": "Fins a {{max}} mm per vora exterior, només per a aquesta impressió. Desactivat: conserva tot el contingut.",
"posterTileInfo": "Pàgina {{page}}: tessel·la {{row}},{{col}} (fila, columna) de {{rows}} × {{cols}}",
"posterNotTiled": "La pàgina {{page}} cap en un full i no es divideix.",
"posterAssumedPaper": "Mida del paper desconeguda: les tessel·les es distribueixen en {{paper}}.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/cs/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "Ořezové značky",
"posterLabels": "Popisky (soubor, stránka, dlaždice)",
"posterOnlyLarge": "Dělit jen velké stránky",
"posterEdgeCrop": "Oříznout malé vnější okraje",
"posterEdgeCropHint": "Až {{max}} mm na každém vnějším okraji, pouze pro tento tisk. Vypnuto: zachovat veškerý obsah.",
"posterTileInfo": "Stránka {{page}}: dlaždice {{row}},{{col}} (řádek, sloupec) z {{rows}} × {{cols}}",
"posterNotTiled": "Stránka {{page}} se vejde na jeden list a nedělí se.",
"posterAssumedPaper": "Formát papíru není znám: dlaždice se rozvrhnou na {{paper}}.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/da/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "Skæremærker",
"posterLabels": "Etiketter (fil, side, felt)",
"posterOnlyLarge": "Opdel kun store sider",
"posterEdgeCrop": "Beskær små ydre kanter",
"posterEdgeCropHint": "Op til {{max}} mm pr. yderkant, kun for denne udskrift. Fra: bevar alt indhold.",
"posterTileInfo": "Side {{page}}: felt {{row}},{{col}} (række, kolonne) af {{rows}} × {{cols}}",
"posterNotTiled": "Side {{page}} kan være på ét ark og opdeles ikke.",
"posterAssumedPaper": "Papirstørrelsen er ukendt: felterne lægges ud på {{paper}}.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/de/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "Schnittmarken",
"posterLabels": "Beschriftung (Datei, Seite, Kachel)",
"posterOnlyLarge": "Nur große Seiten kacheln",
"posterEdgeCrop": "Kleine Außenränder beschneiden",
"posterEdgeCropHint": "Bis zu {{max}} mm pro Außenrand, nur für diesen Druck. Aus: gesamten Inhalt erhalten.",
"posterTileInfo": "Seite {{page}}: Kachel {{row}},{{col}} (Zeile, Spalte) von {{rows}} × {{cols}}",
"posterNotTiled": "Seite {{page}} passt auf ein Blatt und wird nicht gekachelt.",
"posterAssumedPaper": "Papierformat unbekannt: Die Kacheln werden auf {{paper}} verteilt.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/el/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "Σημάδια κοπής",
"posterLabels": "Ετικέτες (αρχείο, σελίδα, πλακίδιο)",
"posterOnlyLarge": "Διαίρεση μόνο μεγάλων σελίδων",
"posterEdgeCrop": "Μικρή περικοπή εξωτερικών άκρων",
"posterEdgeCropHint": "Έως {{max}} mm ανά εξωτερικό άκρο, μόνο για αυτή την εκτύπωση. Ανενεργό: διατήρηση όλου του περιεχομένου.",
"posterTileInfo": "Σελίδα {{page}}: πλακίδιο {{row}},{{col}} (γραμμή, στήλη) από {{rows}} × {{cols}}",
"posterNotTiled": "Η σελίδα {{page}} χωρά σε ένα φύλλο και δεν διαιρείται.",
"posterAssumedPaper": "Άγνωστο μέγεθος χαρτιού: τα πλακίδια διατάσσονται σε {{paper}}.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/en/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "Cut marks",
"posterLabels": "Labels (file, page, tile)",
"posterOnlyLarge": "Tile only large pages",
"posterEdgeCrop": "Crop small outer edges",
"posterEdgeCropHint": "Up to {{max}} mm per outer edge, for this print only. Off: preserve all content.",
"posterTileInfo": "Page {{page}}: tile {{row}},{{col}} (row, column) of {{rows}} × {{cols}}",
"posterNotTiled": "Page {{page}} fits on one sheet and is not tiled.",
"posterAssumedPaper": "Paper size unknown: tiles are laid out on {{paper}}.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/es/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "Marcas de corte",
"posterLabels": "Etiquetas (archivo, página, pieza)",
"posterOnlyLarge": "Dividir solo páginas grandes",
"posterEdgeCrop": "Recortar ligeramente los bordes exteriores",
"posterEdgeCropHint": "Hasta {{max}} mm por borde exterior, solo para esta impresión. Desactivado: conservar todo el contenido.",
"posterTileInfo": "Página {{page}}: pieza {{row}},{{col}} (fila, columna) de {{rows}} × {{cols}}",
"posterNotTiled": "La página {{page}} cabe en una hoja y no se divide.",
"posterAssumedPaper": "Tamaño de papel desconocido: las piezas se distribuyen en {{paper}}.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/fa/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "علامت‌های برش",
"posterLabels": "برچسب‌ها (فایل، صفحه، کاشی)",
"posterOnlyLarge": "فقط صفحه‌های بزرگ کاشی شوند",
"posterEdgeCrop": "برش جزئی لبه‌های بیرونی",
"posterEdgeCropHint": "حداکثر {{max}} میلی‌متر از هر لبه بیرونی، فقط برای این چاپ. خاموش: حفظ تمام محتوا.",
"posterTileInfo": "صفحه {{page}}: کاشی {{row}},{{col}} (ردیف، ستون) از {{rows}} × {{cols}}",
"posterNotTiled": "صفحه {{page}} در یک برگه جا می‌شود و کاشی نمی‌شود.",
"posterAssumedPaper": "اندازه کاغذ نامشخص است: کاشی‌ها روی {{paper}} چیده می‌شوند.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/fi/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "Leikkausmerkit",
"posterLabels": "Tunnisteet (tiedosto, sivu, pala)",
"posterOnlyLarge": "Jaa vain suuret sivut",
"posterEdgeCrop": "Rajaa hieman ulkoreunoja",
"posterEdgeCropHint": "Enintään {{max}} mm kustakin ulkoreunasta, vain tässä tulostuksessa. Pois: säilytä kaikki sisältö.",
"posterTileInfo": "Sivu {{page}}: pala {{row}},{{col}} (rivi, sarake), yhteensä {{rows}} × {{cols}}",
"posterNotTiled": "Sivu {{page}} mahtuu yhdelle arkille, eikä sitä jaeta.",
"posterAssumedPaper": "Paperikoko on tuntematon: palat asetellaan {{paper}}-arkeille.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/fr/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "Traits de coupe",
"posterLabels": "Étiquettes (fichier, page, tuile)",
"posterOnlyLarge": "Découper uniquement les grandes pages",
"posterEdgeCrop": "Rogner légèrement les bords extérieurs",
"posterEdgeCropHint": "Jusqu’à {{max}} mm par bord extérieur, uniquement pour cette impression. Désactivé : conserver tout le contenu.",
"posterTileInfo": "Page {{page}} : tuile {{row}},{{col}} (ligne, colonne) sur {{rows}} × {{cols}}",
"posterNotTiled": "La page {{page}} tient sur une feuille et n'est pas découpée.",
"posterAssumedPaper": "Format de papier inconnu : les tuiles sont réparties sur du {{paper}}.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/he/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "סימני חיתוך",
"posterLabels": "תוויות (קובץ, עמוד, אריח)",
"posterOnlyLarge": "לחלק לאריחים רק עמודים גדולים",
"posterEdgeCrop": "חיתוך קל של השוליים החיצוניים",
"posterEdgeCropHint": "עד {{max}} מ״מ בכל קצה חיצוני, להדפסה זו בלבד. כבוי: שמירת כל התוכן.",
"posterTileInfo": "עמוד {{page}}: אריח {{row}},{{col}} (שורה, עמודה) מתוך {{rows}} × {{cols}}",
"posterNotTiled": "עמוד {{page}} נכנס בגיליון אחד ואינו מחולק.",
"posterAssumedPaper": "גודל הנייר אינו ידוע: האריחים נפרסים על {{paper}}.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/hi/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "कट चिह्न",
"posterLabels": "लेबल (फ़ाइल, पृष्ठ, टाइल)",
"posterOnlyLarge": "केवल बड़े पृष्ठों को टाइल करें",
"posterEdgeCrop": "बाहरी किनारों को थोड़ा काटें",
"posterEdgeCropHint": "केवल इस प्रिंट के लिए प्रत्येक बाहरी किनारे से अधिकतम {{max}} मिमी। बंद होने पर सारी सामग्री सुरक्षित रहती है।",
"posterTileInfo": "पृष्ठ {{page}}: टाइल {{row}},{{col}} (पंक्ति, स्तंभ), कुल {{rows}} × {{cols}}",
"posterNotTiled": "पृष्ठ {{page}} एक शीट पर आ जाता है और टाइल नहीं किया जाता।",
"posterAssumedPaper": "कागज़ का आकार अज्ञात है: टाइलें {{paper}} पर व्यवस्थित की जाती हैं।",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/hr/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "Oznake za rezanje",
"posterLabels": "Natpisi (datoteka, stranica, pločica)",
"posterOnlyLarge": "Dijeli samo velike stranice",
"posterEdgeCrop": "Blago obreži vanjske rubove",
"posterEdgeCropHint": "Do {{max}} mm po vanjskom rubu, samo za ovaj ispis. Isključeno: sačuvaj sav sadržaj.",
"posterTileInfo": "Stranica {{page}}: pločica {{row}},{{col}} (redak, stupac) od {{rows}} × {{cols}}",
"posterNotTiled": "Stranica {{page}} stane na jedan list i ne dijeli se.",
"posterAssumedPaper": "Veličina papira nije poznata: pločice se raspoređuju na {{paper}}.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/hu/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "Vágójelek",
"posterLabels": "Címkék (fájl, oldal, csempe)",
"posterOnlyLarge": "Csak a nagy oldalak felosztása",
"posterEdgeCrop": "Külső szélek kis mértékű levágása",
"posterEdgeCropHint": "Külső szélenként legfeljebb {{max}} mm, csak ennél a nyomtatásnál. Kikapcsolva: minden tartalom megmarad.",
"posterTileInfo": "{{page}}. oldal: {{row}},{{col}}. csempe (sor, oszlop), összesen {{rows}} × {{cols}}",
"posterNotTiled": "A(z) {{page}}. oldal elfér egy lapon, ezért nincs felosztva.",
"posterAssumedPaper": "Ismeretlen papírméret: a csempék {{paper}} lapokra kerülnek.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/id/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "Tanda potong",
"posterLabels": "Label (file, halaman, ubin)",
"posterOnlyLarge": "Hanya bagi halaman besar",
"posterEdgeCrop": "Pangkas sedikit tepi luar",
"posterEdgeCropHint": "Hingga {{max}} mm per tepi luar, hanya untuk cetakan ini. Nonaktif: pertahankan semua konten.",
"posterTileInfo": "Halaman {{page}}: ubin {{row}},{{col}} (baris, kolom) dari {{rows}} × {{cols}}",
"posterNotTiled": "Halaman {{page}} muat di satu lembar dan tidak dibagi.",
"posterAssumedPaper": "Ukuran kertas tidak diketahui: ubin ditata pada {{paper}}.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/it/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "Segni di taglio",
"posterLabels": "Etichette (file, pagina, riquadro)",
"posterOnlyLarge": "Suddividi solo le pagine grandi",
"posterEdgeCrop": "Ritaglia leggermente i bordi esterni",
"posterEdgeCropHint": "Fino a {{max}} mm per bordo esterno, solo per questa stampa. Disattivato: conserva tutto il contenuto.",
"posterTileInfo": "Pagina {{page}}: riquadro {{row}},{{col}} (riga, colonna) di {{rows}} × {{cols}}",
"posterNotTiled": "La pagina {{page}} sta su un foglio e non viene suddivisa.",
"posterAssumedPaper": "Formato carta sconosciuto: i riquadri vengono disposti su {{paper}}.",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/ja/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "トンボ(裁断マーク)",
"posterLabels": "ラベル(ファイル、ページ、タイル)",
"posterOnlyLarge": "大きいページのみ分割",
"posterEdgeCrop": "外周をわずかに切り取る",
"posterEdgeCropHint": "今回の印刷のみ、各外周から最大 {{max}} mm 切り取ります。オフの場合はすべての内容を保持します。",
"posterTileInfo": "{{page}} ページ: タイル {{row}},{{col}}(行, 列)/ {{rows}} × {{cols}}",
"posterNotTiled": "{{page}} ページは 1 枚の用紙に収まるため分割されません。",
"posterAssumedPaper": "用紙サイズが不明です: タイルは {{paper}} に配置されます。",
Expand Down
2 changes: 2 additions & 0 deletions open-pdf-studio/js/i18n/locales/ko/dialogs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@
"posterCutMarks": "재단선 표시",
"posterLabels": "레이블(파일, 페이지, 타일)",
"posterOnlyLarge": "큰 페이지만 분할",
"posterEdgeCrop": "바깥쪽 가장자리 조금 자르기",
"posterEdgeCropHint": "이번 인쇄에만 각 바깥쪽 가장자리에서 최대 {{max}} mm를 자릅니다. 끄면 모든 내용이 유지됩니다.",
"posterTileInfo": "{{page}} 페이지: 타일 {{row}},{{col}}(행, 열) / {{rows}} × {{cols}}",
"posterNotTiled": "{{page}} 페이지는 한 장에 들어가므로 분할되지 않습니다.",
"posterAssumedPaper": "용지 크기를 알 수 없음: 타일이 {{paper}}에 배치됩니다.",
Expand Down
Loading
Loading