indesign-cli 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cli_anything/indesign/README.md +32 -0
- cli_anything/indesign/__init__.py +1 -0
- cli_anything/indesign/__main__.py +5 -0
- cli_anything/indesign/core/artifacts.py +57 -0
- cli_anything/indesign/core/catalog.py +405 -0
- cli_anything/indesign/core/domains.py +178 -0
- cli_anything/indesign/core/envelope.py +65 -0
- cli_anything/indesign/core/errors.py +30 -0
- cli_anything/indesign/core/health.py +46 -0
- cli_anything/indesign/core/hidden_backend.py +116 -0
- cli_anything/indesign/core/hidden_handler_schemas.py +223 -0
- cli_anything/indesign/core/mcp_backend.py +152 -0
- cli_anything/indesign/core/node_setup.py +35 -0
- cli_anything/indesign/core/paths.py +41 -0
- cli_anything/indesign/core/plugins/__init__.py +2 -0
- cli_anything/indesign/core/plugins/backend.py +90 -0
- cli_anything/indesign/core/plugins/discovery.py +69 -0
- cli_anything/indesign/core/plugins/host_actions.py +76 -0
- cli_anything/indesign/core/plugins/install.py +38 -0
- cli_anything/indesign/core/plugins/manifest.py +279 -0
- cli_anything/indesign/core/plugins/validate.py +181 -0
- cli_anything/indesign/core/router.py +217 -0
- cli_anything/indesign/core/runtime.py +59 -0
- cli_anything/indesign/core/scripts.py +44 -0
- cli_anything/indesign/core/session.py +68 -0
- cli_anything/indesign/indesign_cli.py +320 -0
- cli_anything/indesign/node/hidden_handler_bridge.mjs +111 -0
- cli_anything/indesign/server/package-lock.json +168 -0
- cli_anything/indesign/server/package.json +45 -0
- cli_anything/indesign/server/src/advanced/index.js +76 -0
- cli_anything/indesign/server/src/core/InDesignMCPServer.js +273 -0
- cli_anything/indesign/server/src/core/scriptExecutor.js +271 -0
- cli_anything/indesign/server/src/core/sessionManager.js +545 -0
- cli_anything/indesign/server/src/handlers/advancedTemplateHandlers.js +1072 -0
- cli_anything/indesign/server/src/handlers/bookHandlers.js +490 -0
- cli_anything/indesign/server/src/handlers/documentHandlers.js +1472 -0
- cli_anything/indesign/server/src/handlers/exportHandlers.js +208 -0
- cli_anything/indesign/server/src/handlers/graphicsHandlers.js +605 -0
- cli_anything/indesign/server/src/handlers/groupHandlers.js +358 -0
- cli_anything/indesign/server/src/handlers/helpHandlers.js +347 -0
- cli_anything/indesign/server/src/handlers/index.js +77 -0
- cli_anything/indesign/server/src/handlers/layerHandlers.js +75 -0
- cli_anything/indesign/server/src/handlers/masterSpreadHandlers.js +451 -0
- cli_anything/indesign/server/src/handlers/pageHandlers.js +698 -0
- cli_anything/indesign/server/src/handlers/pageItemHandlers.js +704 -0
- cli_anything/indesign/server/src/handlers/presentationHandlers.js +220 -0
- cli_anything/indesign/server/src/handlers/spreadHandlers.js +348 -0
- cli_anything/indesign/server/src/handlers/styleHandlers.js +458 -0
- cli_anything/indesign/server/src/handlers/textHandlers.js +431 -0
- cli_anything/indesign/server/src/handlers/utilityHandlers.js +83 -0
- cli_anything/indesign/server/src/index.js +17 -0
- cli_anything/indesign/server/src/types/index.js +106 -0
- cli_anything/indesign/server/src/types/toolDefinitionsAdvancedTemplates.js +144 -0
- cli_anything/indesign/server/src/types/toolDefinitionsBook.js +224 -0
- cli_anything/indesign/server/src/types/toolDefinitionsContent.js +353 -0
- cli_anything/indesign/server/src/types/toolDefinitionsDocument.js +409 -0
- cli_anything/indesign/server/src/types/toolDefinitionsExport.js +65 -0
- cli_anything/indesign/server/src/types/toolDefinitionsLayer.js +40 -0
- cli_anything/indesign/server/src/types/toolDefinitionsMasterSpread.js +160 -0
- cli_anything/indesign/server/src/types/toolDefinitionsPage.js +271 -0
- cli_anything/indesign/server/src/types/toolDefinitionsPageItemGroup.js +437 -0
- cli_anything/indesign/server/src/types/toolDefinitionsPresentation.js +83 -0
- cli_anything/indesign/server/src/types/toolDefinitionsSpread.js +158 -0
- cli_anything/indesign/server/src/types/toolDefinitionsUtility.js +40 -0
- cli_anything/indesign/server/src/utils/stringUtils.js +107 -0
- cli_anything/indesign/skills/SKILL.md +198 -0
- indesign_cli-0.2.0.dist-info/METADATA +267 -0
- indesign_cli-0.2.0.dist-info/RECORD +72 -0
- indesign_cli-0.2.0.dist-info/WHEEL +5 -0
- indesign_cli-0.2.0.dist-info/entry_points.txt +3 -0
- indesign_cli-0.2.0.dist-info/licenses/LICENSE +21 -0
- indesign_cli-0.2.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export handlers
|
|
3
|
+
*/
|
|
4
|
+
import { ScriptExecutor } from '../core/scriptExecutor.js';
|
|
5
|
+
import { formatResponse, escapeJsxString, escapeFilePathForJsx } from '../utils/stringUtils.js';
|
|
6
|
+
|
|
7
|
+
export class ExportHandlers {
|
|
8
|
+
/**
|
|
9
|
+
* Export document to PDF
|
|
10
|
+
*/
|
|
11
|
+
static async exportPDF(args) {
|
|
12
|
+
// Support both schema variants: {filePath, preset} or {filePath, quality, pages, includeBleed, includeMarks}
|
|
13
|
+
const filePath = args.filePath;
|
|
14
|
+
const rawPageRange = args.pages ?? args.pageRange ?? 'all';
|
|
15
|
+
const pageRangeString = typeof rawPageRange === 'string' ? rawPageRange : String(rawPageRange ?? 'all');
|
|
16
|
+
const normalizedPageRange = pageRangeString.trim() === '' ? 'all' : pageRangeString.trim();
|
|
17
|
+
const quality = args.quality || null; // PRESS/PRINT/SCREEN/DIGITAL
|
|
18
|
+
const presetCandidate = args.preset || (quality === 'PRESS' ? 'Press Quality' : quality === 'PRINT' ? 'High Quality Print' : 'Smallest File Size');
|
|
19
|
+
const preset = typeof presetCandidate === 'string' && presetCandidate.trim() !== '' ? presetCandidate : 'High Quality Print';
|
|
20
|
+
|
|
21
|
+
const escapedFilePath = escapeFilePathForJsx(filePath);
|
|
22
|
+
const escapedPreset = escapeJsxString(preset);
|
|
23
|
+
const escapedPageRange = escapeJsxString(normalizedPageRange);
|
|
24
|
+
|
|
25
|
+
const script = [
|
|
26
|
+
'if (app.documents.length === 0) {',
|
|
27
|
+
' "No document open";',
|
|
28
|
+
'} else {',
|
|
29
|
+
' var doc = app.activeDocument;',
|
|
30
|
+
' var pdfFile = File("' + escapedFilePath + '");',
|
|
31
|
+
'',
|
|
32
|
+
' try {',
|
|
33
|
+
' // Ensure target directory exists',
|
|
34
|
+
' var targetFolder = pdfFile.parent;',
|
|
35
|
+
' if (targetFolder && !targetFolder.exists) {',
|
|
36
|
+
' try { targetFolder.create(); } catch (fe) {}',
|
|
37
|
+
' }',
|
|
38
|
+
'',
|
|
39
|
+
' // Page range preference (best-effort)',
|
|
40
|
+
` try { app.pdfExportPreferences.pageRange = "${escapedPageRange}"; } catch(e) {}`,
|
|
41
|
+
' // Export to PDF with preset',
|
|
42
|
+
' doc.exportFile(ExportFormat.PDF_TYPE, pdfFile, false, "' + escapedPreset + '");',
|
|
43
|
+
'',
|
|
44
|
+
` "PDF exported successfully to: ${escapedFilePath}";`,
|
|
45
|
+
' } catch (error) {',
|
|
46
|
+
' "Error exporting PDF: " + error.message;',
|
|
47
|
+
' }',
|
|
48
|
+
'}'
|
|
49
|
+
].join('\n');
|
|
50
|
+
|
|
51
|
+
const result = await ScriptExecutor.executeInDesignScript(script);
|
|
52
|
+
return formatResponse(result, "Export PDF");
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Export pages as images
|
|
57
|
+
*/
|
|
58
|
+
static async exportImages(args) {
|
|
59
|
+
// Support alias: outputPath (types) vs folderPath (handler)
|
|
60
|
+
const folderPath = args.folderPath || args.outputPath;
|
|
61
|
+
const format = args.format || 'JPEG';
|
|
62
|
+
const quality = args.quality ?? 80;
|
|
63
|
+
const resolution = args.resolution ?? 300;
|
|
64
|
+
const rawPageRange = args.pageRange ?? args.pages ?? 'all';
|
|
65
|
+
const pageRangeString = typeof rawPageRange === 'string' ? rawPageRange : String(rawPageRange ?? 'all');
|
|
66
|
+
const trimmedRange = pageRangeString.trim();
|
|
67
|
+
const canonicalPageRange = trimmedRange === '' ? 'all' : (trimmedRange.toLowerCase() === 'all' ? 'all' : trimmedRange);
|
|
68
|
+
|
|
69
|
+
const escapedFolderPath = escapeFilePathForJsx(folderPath);
|
|
70
|
+
const escapedPageRange = escapeJsxString(canonicalPageRange);
|
|
71
|
+
const normalizedFormat = typeof format === 'string' ? format.trim().toUpperCase() : 'JPEG';
|
|
72
|
+
const supportedFormats = new Set(['JPEG']);
|
|
73
|
+
const safeFormat = supportedFormats.has(normalizedFormat) ? normalizedFormat : 'JPEG';
|
|
74
|
+
const escapedFormat = escapeJsxString(safeFormat);
|
|
75
|
+
|
|
76
|
+
const script = [
|
|
77
|
+
'if (app.documents.length === 0) {',
|
|
78
|
+
' "No document open";',
|
|
79
|
+
'} else {',
|
|
80
|
+
' var doc = app.activeDocument;',
|
|
81
|
+
' var folder = Folder("' + escapedFolderPath + '");',
|
|
82
|
+
'',
|
|
83
|
+
' try {',
|
|
84
|
+
' if (!folder.exists) {',
|
|
85
|
+
' folder.create();',
|
|
86
|
+
' }',
|
|
87
|
+
'',
|
|
88
|
+
' var exportedCount = 0;',
|
|
89
|
+
' var pagesToExport = [];',
|
|
90
|
+
` if ("${escapedPageRange}" !== "all") {`,
|
|
91
|
+
` var parts = "${escapedPageRange}".split(",");`,
|
|
92
|
+
' for (var i=0; i<parts.length; i++) {',
|
|
93
|
+
' var seg = parts[i];',
|
|
94
|
+
' if (seg.indexOf("-") >= 0) {',
|
|
95
|
+
' var ab = seg.split("-");',
|
|
96
|
+
' var a = parseInt(ab[0],10), b = parseInt(ab[1],10);',
|
|
97
|
+
' if (!isNaN(a) && !isNaN(b)) {',
|
|
98
|
+
' for (var p=a; p<=b; p++) { if (p>=1 && p<=doc.pages.length) pagesToExport.push(p); }',
|
|
99
|
+
' }',
|
|
100
|
+
' } else {',
|
|
101
|
+
' var p = parseInt(seg,10); if (!isNaN(p) && p>=1 && p<=doc.pages.length) pagesToExport.push(p);',
|
|
102
|
+
' }',
|
|
103
|
+
' }',
|
|
104
|
+
' } else {',
|
|
105
|
+
' for (var i=1; i<=doc.pages.length; i++) pagesToExport.push(i);',
|
|
106
|
+
' }',
|
|
107
|
+
'',
|
|
108
|
+
' // Configure JPEG export preferences',
|
|
109
|
+
` var fmt = "${escapedFormat}";`,
|
|
110
|
+
' app.jpegExportPreferences.exportResolution = ' + resolution + ';',
|
|
111
|
+
' try { app.jpegExportPreferences.jpegExportRange = ExportRangeOrAllPages.EXPORT_RANGE; } catch (_) {}',
|
|
112
|
+
' try { app.jpegExportPreferences.exportingSpread = false; } catch (_) {}',
|
|
113
|
+
' // Map quality 0-100 to enum',
|
|
114
|
+
' var q = ' + quality + ';',
|
|
115
|
+
' var qual = JPEGOptionsQuality.HIGH;',
|
|
116
|
+
' try {',
|
|
117
|
+
' if (q >= 95) qual = JPEGOptionsQuality.MAXIMUM; else if (q >= 75) qual = JPEGOptionsQuality.HIGH; else if (q >= 50) qual = JPEGOptionsQuality.MEDIUM; else qual = JPEGOptionsQuality.LOW;',
|
|
118
|
+
' app.jpegExportPreferences.jpegQuality = qual;',
|
|
119
|
+
' } catch (_) {}',
|
|
120
|
+
'',
|
|
121
|
+
' for (var idx=0; idx<pagesToExport.length; idx++) {',
|
|
122
|
+
' var pageNum = pagesToExport[idx];',
|
|
123
|
+
' var pageName = String(pageNum);',
|
|
124
|
+
' try { pageName = doc.pages[pageNum - 1].name; } catch (_) {}',
|
|
125
|
+
' var fileName = folder.fsName + "/page_" + pageNum + ".jpg";',
|
|
126
|
+
' var imageFile = File(fileName);',
|
|
127
|
+
' app.jpegExportPreferences.pageString = pageName;',
|
|
128
|
+
' doc.exportFile(ExportFormat.JPG, imageFile, false);',
|
|
129
|
+
' exportedCount++;',
|
|
130
|
+
' }',
|
|
131
|
+
'',
|
|
132
|
+
` exportedCount + " pages exported as JPEG images to: ${escapedFolderPath}";`,
|
|
133
|
+
' } catch (error) {',
|
|
134
|
+
' "Error exporting images: " + error.message;',
|
|
135
|
+
' }',
|
|
136
|
+
'}'
|
|
137
|
+
].join('\n');
|
|
138
|
+
|
|
139
|
+
const result = await ScriptExecutor.executeInDesignScript(script);
|
|
140
|
+
return formatResponse(result, "Export Images");
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Package document for printing
|
|
145
|
+
*/
|
|
146
|
+
static async packageDocument(args) {
|
|
147
|
+
const folderPath = args.folderPath || args.outputPath;
|
|
148
|
+
const { includeFonts = true, includeLinks = true, includeProfiles = true } = args;
|
|
149
|
+
const escapedFolderPath = escapeFilePathForJsx(folderPath);
|
|
150
|
+
|
|
151
|
+
const script = [
|
|
152
|
+
'if (app.documents.length === 0) {',
|
|
153
|
+
' "No document open";',
|
|
154
|
+
'} else {',
|
|
155
|
+
' var doc = app.activeDocument;',
|
|
156
|
+
' var folder = Folder("' + escapedFolderPath + '");',
|
|
157
|
+
' var packageTarget = File("' + escapedFolderPath + '");',
|
|
158
|
+
'',
|
|
159
|
+
' try {',
|
|
160
|
+
' if (!folder.exists) {',
|
|
161
|
+
' folder.create();',
|
|
162
|
+
' }',
|
|
163
|
+
'',
|
|
164
|
+
' // Package the document. COM builds may not expose doc.packagePreferences, so pass options directly.',
|
|
165
|
+
' try {',
|
|
166
|
+
` doc.packageForPrint(packageTarget, ${includeFonts}, ${includeLinks}, ${includeProfiles}, false, false, true, true, false, false, "", true, "CLI E2E package", true);`,
|
|
167
|
+
' } catch (packageArgsError) {',
|
|
168
|
+
` doc.packageForPrint(packageTarget, ${includeFonts}, ${includeLinks}, ${includeProfiles}, false, false, true, true);`,
|
|
169
|
+
' }',
|
|
170
|
+
'',
|
|
171
|
+
` "Document packaged successfully to: ${escapedFolderPath}";`,
|
|
172
|
+
' } catch (error) {',
|
|
173
|
+
' "Error packaging document: " + error.message;',
|
|
174
|
+
' }',
|
|
175
|
+
'}'
|
|
176
|
+
].join('\n');
|
|
177
|
+
|
|
178
|
+
const result = await ScriptExecutor.executeInDesignScript(script);
|
|
179
|
+
return formatResponse(result, "Package Document");
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Export document to EPUB (basic)
|
|
184
|
+
*/
|
|
185
|
+
static async exportEPUB(args) {
|
|
186
|
+
const { filePath } = args;
|
|
187
|
+
const escapedFilePath = escapeFilePathForJsx(filePath);
|
|
188
|
+
|
|
189
|
+
const script = [
|
|
190
|
+
'if (app.documents.length === 0) {',
|
|
191
|
+
' "No document open";',
|
|
192
|
+
'} else {',
|
|
193
|
+
' var doc = app.activeDocument;',
|
|
194
|
+
' var epubFile = File("' + escapedFilePath + '");',
|
|
195
|
+
' try {',
|
|
196
|
+
' var folder = epubFile.parent; if (folder && !folder.exists) { try { folder.create(); } catch(e) {} }',
|
|
197
|
+
' doc.exportFile(ExportFormat.EPUB, epubFile, false);',
|
|
198
|
+
` "EPUB exported successfully to: ${escapedFilePath}";`,
|
|
199
|
+
' } catch (error) {',
|
|
200
|
+
' "Error exporting EPUB: " + error.message;',
|
|
201
|
+
' }',
|
|
202
|
+
'}'
|
|
203
|
+
].join('\n');
|
|
204
|
+
|
|
205
|
+
const result = await ScriptExecutor.executeInDesignScript(script);
|
|
206
|
+
return formatResponse(result, 'Export EPUB');
|
|
207
|
+
}
|
|
208
|
+
}
|