@mlightcad/cad-simple-viewer-cli 1.7.8-preview.6 → 1.8.0-preview.0

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.
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Recursively scan a directory for .dwg / .dxf files and export each to PDF
4
+ * via cad-simple-viewer-cli + export-pdf.scr (or export-pdf-monochrome.scr).
5
+ *
6
+ * Usage (from packages/cad-simple-viewer-cli after build):
7
+ * node examples/batch-export-pdf.mjs <inputDir> [outputDir] [--color-mode color|monochrome]
8
+ *
9
+ * --color-mode monochrome writes white paper with black linework and text.
10
+ */
11
+ import { spawn } from 'node:child_process'
12
+ import { existsSync } from 'node:fs'
13
+ import { mkdir, readdir } from 'node:fs/promises'
14
+ import path from 'node:path'
15
+ import { fileURLToPath } from 'node:url'
16
+
17
+ const __dirname = path.dirname(fileURLToPath(import.meta.url))
18
+ const packageRoot = path.resolve(__dirname, '..')
19
+ const cliJs = path.join(packageRoot, 'dist', 'cli.js')
20
+ const args = process.argv.slice(2)
21
+ const colorModeIndex = args.indexOf('--color-mode')
22
+ const colorMode = colorModeIndex >= 0 ? args[colorModeIndex + 1] : 'color'
23
+ if (colorModeIndex >= 0) args.splice(colorModeIndex, 2)
24
+ const scriptPath = path.join(
25
+ __dirname,
26
+ colorMode === 'monochrome' ? 'export-pdf-monochrome.scr' : 'export-pdf.scr'
27
+ )
28
+
29
+ const DRAWING_EXT = new Set(['.dwg', '.dxf'])
30
+
31
+ async function collectDrawings(dir, out = []) {
32
+ const entries = await readdir(dir, { withFileTypes: true })
33
+ for (const entry of entries) {
34
+ const full = path.join(dir, entry.name)
35
+ if (entry.isDirectory()) {
36
+ await collectDrawings(full, out)
37
+ } else if (DRAWING_EXT.has(path.extname(entry.name).toLowerCase())) {
38
+ out.push(full)
39
+ }
40
+ }
41
+ return out
42
+ }
43
+
44
+ function runCli(input, outputDir) {
45
+ return new Promise((resolve, reject) => {
46
+ const child = spawn(
47
+ process.execPath,
48
+ [cliJs, '-i', input, '-s', scriptPath, '-o', outputDir, '--mode', 'read'],
49
+ { stdio: 'inherit' }
50
+ )
51
+ child.on('error', reject)
52
+ child.on('exit', code => {
53
+ if (code === 0) resolve()
54
+ else
55
+ reject(
56
+ new Error(
57
+ `cad-simple-viewer-cli exited with code ${code} for ${input}`
58
+ )
59
+ )
60
+ })
61
+ })
62
+ }
63
+
64
+ async function main() {
65
+ const inputDir = path.resolve(args[0] ?? '')
66
+ const outputDir = path.resolve(args[1] ?? path.join(inputDir, 'pdf-out'))
67
+
68
+ if (colorMode !== 'color' && colorMode !== 'monochrome') {
69
+ console.error(`Invalid --color-mode: ${colorMode} (color | monochrome)`)
70
+ process.exitCode = 1
71
+ return
72
+ }
73
+ if (!args[0] || !existsSync(inputDir)) {
74
+ console.error(
75
+ 'Usage: node examples/batch-export-pdf.mjs <inputDir> [outputDir] [--color-mode color|monochrome]'
76
+ )
77
+ process.exitCode = 1
78
+ return
79
+ }
80
+ if (!existsSync(cliJs)) {
81
+ console.error(
82
+ 'CLI not built. Run: pnpm --filter @mlightcad/cad-simple-viewer-cli build'
83
+ )
84
+ process.exitCode = 1
85
+ return
86
+ }
87
+
88
+ await mkdir(outputDir, { recursive: true })
89
+ const drawings = await collectDrawings(inputDir)
90
+ if (!drawings.length) {
91
+ console.error(`No .dwg/.dxf files found under ${inputDir}`)
92
+ process.exitCode = 1
93
+ return
94
+ }
95
+
96
+ console.log(
97
+ `Found ${drawings.length} drawing(s). Color mode: ${colorMode}. Output: ${outputDir}`
98
+ )
99
+ let failed = 0
100
+ for (const drawing of drawings) {
101
+ console.log(`\n=== ${drawing} ===`)
102
+ try {
103
+ await runCli(drawing, outputDir)
104
+ } catch (error) {
105
+ failed++
106
+ console.error(error instanceof Error ? error.message : String(error))
107
+ }
108
+ }
109
+
110
+ console.log(`\nDone. success=${drawings.length - failed} failed=${failed}`)
111
+ if (failed) process.exitCode = 1
112
+ }
113
+
114
+ await main()
@@ -0,0 +1,13 @@
1
+ ; export-pdf-monochrome.scr
2
+ ; Export a print-ready PDF: white paper, black linework and text, solid fills
3
+ ; in grey (-cpdf ... Monochrome).
4
+ ; Usage:
5
+ ; cad-simple-viewer-cli -i drawing.dwg -s examples/export-pdf-monochrome.scr -o ./out
6
+ zoom
7
+ e
8
+ -cpdf
9
+ Extents
10
+ Yes
11
+ Text
12
+ Monochrome
13
+ quit
@@ -1,9 +1,14 @@
1
1
  ; export-pdf.scr
2
+ ; Export a vector PDF (-cpdf).
3
+ ; Prompts: model space frame (Extents / Display) / export layouts (Yes / No) /
4
+ ; text rendering (Text / Vector) / color mode (Color / Monochrome).
5
+ ; Usage:
6
+ ; cad-simple-viewer-cli -i drawing.dwg -s examples/export-pdf.scr -o ./out
2
7
  zoom
3
8
  e
4
9
  -cpdf
5
10
  Extents
6
11
  Yes
7
12
  Text
8
-
13
+ Color
9
14
  quit
@@ -65,6 +65,24 @@
65
65
  "inputKind": "file",
66
66
  "runnable": true
67
67
  },
68
+ {
69
+ "id": "export-pdf",
70
+ "title": "Export PDF",
71
+ "description": "Zoom extents and export a vector PDF in color with every layout (-cpdf).",
72
+ "script": "export-pdf.scr",
73
+ "mode": "read",
74
+ "inputKind": "file",
75
+ "runnable": true
76
+ },
77
+ {
78
+ "id": "export-pdf-monochrome",
79
+ "title": "Export PDF (monochrome)",
80
+ "description": "Export a print-ready PDF: white paper, black linework and text, grey fills (-cpdf ... Monochrome).",
81
+ "script": "export-pdf-monochrome.scr",
82
+ "mode": "read",
83
+ "inputKind": "file",
84
+ "runnable": true
85
+ },
68
86
  {
69
87
  "id": "export-dxf",
70
88
  "title": "Export DXF",
@@ -101,6 +119,15 @@
101
119
  "inputKind": "directory",
102
120
  "runnable": true
103
121
  },
122
+ {
123
+ "id": "batch-export-pdf",
124
+ "title": "Batch export PDF",
125
+ "description": "Scan a folder and export each drawing to PDF (pass --color-mode monochrome for black and white).",
126
+ "script": "batch-export-pdf.mjs",
127
+ "kind": "batch",
128
+ "inputKind": "directory",
129
+ "runnable": true
130
+ },
104
131
  {
105
132
  "id": "batch-export-html-multi-preview",
106
133
  "title": "Batch export HTML multi + preview",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mlightcad/cad-simple-viewer-cli",
3
- "version": "1.7.8-preview.6",
3
+ "version": "1.8.0-preview.0",
4
4
  "description": "AcCoreConsole-style headless CLI: run .scr command scripts against DXF/DWG drawings",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -42,17 +42,18 @@
42
42
  "script"
43
43
  ],
44
44
  "dependencies": {
45
- "@mlightcad/data-model": "1.15.20",
46
- "@mlightcad/libredwg-converter": "3.15.20",
47
- "@mlightcad/mtext-parser": "1.5.5",
48
- "@mlightcad/mtext-renderer": "0.13.6",
45
+ "@mlightcad/data-model": "1.15.22",
46
+ "@mlightcad/libredwg-converter": "3.15.22",
47
+ "@mlightcad/mtext-parser": "1.5.7",
48
+ "@mlightcad/mtext-renderer": "0.13.7",
49
49
  "commander": "^12.1.0",
50
50
  "playwright": "^1.49.1",
51
- "@mlightcad/cad-html-plugin": "1.7.8-preview.6",
52
- "@mlightcad/pdf-renderer": "1.7.8-preview.6",
53
- "@mlightcad/cad-pdf-plugin": "1.7.8-preview.6",
54
- "@mlightcad/cad-simple-viewer": "1.7.8-preview.6",
55
- "@mlightcad/cad-svg-plugin": "1.7.8-preview.6"
51
+ "@mlightcad/cad-html-plugin": "1.8.0-preview.0",
52
+ "@mlightcad/cad-simple-viewer": "1.8.0-preview.0",
53
+ "@mlightcad/cad-svg-plugin": "1.8.0-preview.0",
54
+ "@mlightcad/pdf-renderer": "1.8.0-preview.0",
55
+ "@mlightcad/cad-pdf-core": "1.8.0-preview.0",
56
+ "@mlightcad/cad-pdf-plugin": "1.8.0-preview.0"
56
57
  },
57
58
  "devDependencies": {
58
59
  "@types/node": "^20.14.9",