@mlightcad/cad-pdf-plugin 1.7.0 → 1.7.1

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.
Files changed (39) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +180 -164
  3. package/dist/cad-pdf-plugin-register.js +1 -1
  4. package/dist/cad-pdf-plugin-register.umd.cjs +1 -1
  5. package/dist/cad-pdf-plugin.js +17087 -41467
  6. package/dist/cad-pdf-plugin.umd.cjs +13 -270
  7. package/lib/AcApConvertToPdfCmd.d.ts +13 -2
  8. package/lib/AcApConvertToPdfCmd.d.ts.map +1 -1
  9. package/lib/AcApConvertToPdfCmd.js +153 -7
  10. package/lib/AcApConvertToPdfCmd.js.map +1 -1
  11. package/lib/AcApPdfConvertor.d.ts +18 -8
  12. package/lib/AcApPdfConvertor.d.ts.map +1 -1
  13. package/lib/AcApPdfConvertor.js +87 -94
  14. package/lib/AcApPdfConvertor.js.map +1 -1
  15. package/lib/AcApPdfExportOptions.d.ts +38 -0
  16. package/lib/AcApPdfExportOptions.d.ts.map +1 -0
  17. package/lib/AcApPdfExportOptions.js +12 -0
  18. package/lib/AcApPdfExportOptions.js.map +1 -0
  19. package/lib/AcApPdfFontResolver.d.ts +20 -0
  20. package/lib/AcApPdfFontResolver.d.ts.map +1 -0
  21. package/lib/AcApPdfFontResolver.js +105 -0
  22. package/lib/AcApPdfFontResolver.js.map +1 -0
  23. package/lib/AcApPdfGlyphProvider.d.ts +15 -0
  24. package/lib/AcApPdfGlyphProvider.d.ts.map +1 -0
  25. package/lib/AcApPdfGlyphProvider.js +277 -0
  26. package/lib/AcApPdfGlyphProvider.js.map +1 -0
  27. package/lib/AcApPdfPlugin.d.ts +5 -3
  28. package/lib/AcApPdfPlugin.d.ts.map +1 -1
  29. package/lib/AcApPdfPlugin.js +13 -6
  30. package/lib/AcApPdfPlugin.js.map +1 -1
  31. package/lib/index.d.ts +2 -0
  32. package/lib/index.d.ts.map +1 -1
  33. package/lib/index.js +2 -0
  34. package/lib/index.js.map +1 -1
  35. package/lib/register.d.ts +4 -2
  36. package/lib/register.d.ts.map +1 -1
  37. package/lib/register.js +4 -2
  38. package/lib/register.js.map +1 -1
  39. package/package.json +9 -9
@@ -1,14 +1,25 @@
1
1
  import { AcApContext, AcEdCommand } from '@mlightcad/cad-simple-viewer';
2
2
  /**
3
3
  * Command for converting the current CAD drawing to PDF format.
4
- * The command name is `cpdf`.
4
+ *
5
+ * Registered as `-cpdf` (command-line prompts). Also registered as `cpdf` when
6
+ * no UI dialog command is already present (e.g. cad-simple-viewer without
7
+ * cad-viewer).
5
8
  */
6
9
  export declare class AcApConvertToPdfCmd extends AcEdCommand {
7
10
  /**
8
- * Renders the current drawing to PDF and downloads it in the browser.
11
+ * Prompts for export options, then renders and downloads the PDF.
9
12
  *
10
13
  * @param context - Application context for the active document
11
14
  */
12
15
  execute(context: AcApContext): Promise<void>;
16
+ private promptOptions;
17
+ /**
18
+ * Prompts how text is painted: real PDF text (small file, selectable) or
19
+ * vector glyph outlines (current behaviour).
20
+ */
21
+ private promptTextMode;
22
+ private promptModelSpaceFit;
23
+ private promptYesNo;
13
24
  }
14
25
  //# sourceMappingURL=AcApConvertToPdfCmd.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AcApConvertToPdfCmd.d.ts","sourceRoot":"","sources":["../src/AcApConvertToPdfCmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAIvE;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;IAClD;;;;OAIG;IACG,OAAO,CAAC,OAAO,EAAE,WAAW;CAInC"}
1
+ {"version":3,"file":"AcApConvertToPdfCmd.d.ts","sourceRoot":"","sources":["../src/AcApConvertToPdfCmd.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAGX,WAAW,EAGZ,MAAM,8BAA8B,CAAA;AASrC;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;IAClD;;;;OAIG;IACG,OAAO,CAAC,OAAO,EAAE,WAAW;YAUpB,aAAa;IA4B3B;;;OAGG;YACW,cAAc;YAqCd,mBAAmB;YAwCnB,WAAW;CAoC1B"}
@@ -49,11 +49,15 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
49
49
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
50
50
  }
51
51
  };
52
- import { AcEdCommand } from '@mlightcad/cad-simple-viewer';
52
+ import { AcApDocManager, AcApI18n, AcEdCommand, AcEdPromptKeywordOptions, AcEdPromptStatus } from '@mlightcad/cad-simple-viewer';
53
53
  import { AcApPdfConvertor } from './AcApPdfConvertor';
54
+ import { resolveAcApPdfExportOptions } from './AcApPdfExportOptions';
54
55
  /**
55
56
  * Command for converting the current CAD drawing to PDF format.
56
- * The command name is `cpdf`.
57
+ *
58
+ * Registered as `-cpdf` (command-line prompts). Also registered as `cpdf` when
59
+ * no UI dialog command is already present (e.g. cad-simple-viewer without
60
+ * cad-viewer).
57
61
  */
58
62
  var AcApConvertToPdfCmd = /** @class */ (function (_super) {
59
63
  __extends(AcApConvertToPdfCmd, _super);
@@ -61,25 +65,167 @@ var AcApConvertToPdfCmd = /** @class */ (function (_super) {
61
65
  return _super !== null && _super.apply(this, arguments) || this;
62
66
  }
63
67
  /**
64
- * Renders the current drawing to PDF and downloads it in the browser.
68
+ * Prompts for export options, then renders and downloads the PDF.
65
69
  *
66
70
  * @param context - Application context for the active document
67
71
  */
68
72
  AcApConvertToPdfCmd.prototype.execute = function (context) {
69
73
  return __awaiter(this, void 0, void 0, function () {
70
- var converter;
74
+ var options, converter;
71
75
  return __generator(this, function (_a) {
72
76
  switch (_a.label) {
73
- case 0:
74
- converter = new AcApPdfConvertor();
75
- return [4 /*yield*/, converter.convert(context)];
77
+ case 0: return [4 /*yield*/, this.promptOptions()];
76
78
  case 1:
79
+ options = _a.sent();
80
+ if (!options) {
81
+ return [2 /*return*/];
82
+ }
83
+ converter = new AcApPdfConvertor();
84
+ return [4 /*yield*/, converter.convert(context, options)];
85
+ case 2:
77
86
  _a.sent();
78
87
  return [2 /*return*/];
79
88
  }
80
89
  });
81
90
  });
82
91
  };
92
+ AcApConvertToPdfCmd.prototype.promptOptions = function () {
93
+ return __awaiter(this, void 0, void 0, function () {
94
+ var defaults, modelSpaceFit, exportLayouts, textMode;
95
+ return __generator(this, function (_a) {
96
+ switch (_a.label) {
97
+ case 0:
98
+ defaults = resolveAcApPdfExportOptions();
99
+ return [4 /*yield*/, this.promptModelSpaceFit()];
100
+ case 1:
101
+ modelSpaceFit = _a.sent();
102
+ if (modelSpaceFit === undefined) {
103
+ return [2 /*return*/, undefined];
104
+ }
105
+ return [4 /*yield*/, this.promptYesNo('jig.cpdf.exportLayouts', defaults.exportLayouts)];
106
+ case 2:
107
+ exportLayouts = _a.sent();
108
+ if (exportLayouts === undefined) {
109
+ return [2 /*return*/, undefined];
110
+ }
111
+ return [4 /*yield*/, this.promptTextMode()];
112
+ case 3:
113
+ textMode = _a.sent();
114
+ if (textMode === undefined) {
115
+ return [2 /*return*/, undefined];
116
+ }
117
+ return [2 /*return*/, resolveAcApPdfExportOptions({
118
+ modelSpaceFit: modelSpaceFit,
119
+ exportLayouts: exportLayouts,
120
+ textMode: textMode
121
+ })];
122
+ }
123
+ });
124
+ });
125
+ };
126
+ /**
127
+ * Prompts how text is painted: real PDF text (small file, selectable) or
128
+ * vector glyph outlines (current behaviour).
129
+ */
130
+ AcApConvertToPdfCmd.prototype.promptTextMode = function () {
131
+ return __awaiter(this, void 0, void 0, function () {
132
+ var defaults, prompt, text, vector, result;
133
+ return __generator(this, function (_a) {
134
+ switch (_a.label) {
135
+ case 0:
136
+ defaults = resolveAcApPdfExportOptions();
137
+ prompt = new AcEdPromptKeywordOptions(AcApI18n.t('jig.cpdf.textMode'));
138
+ prompt.allowNone = true;
139
+ text = prompt.keywords.add(AcApI18n.t('jig.cpdf.keywords.text.display'), AcApI18n.t('jig.cpdf.keywords.text.global'), AcApI18n.t('jig.cpdf.keywords.text.local'));
140
+ vector = prompt.keywords.add(AcApI18n.t('jig.cpdf.keywords.vector.display'), AcApI18n.t('jig.cpdf.keywords.vector.global'), AcApI18n.t('jig.cpdf.keywords.vector.local'));
141
+ prompt.keywords.default = defaults.textMode === 'vector' ? vector : text;
142
+ return [4 /*yield*/, AcApDocManager.instance.editor.getKeywords(prompt)];
143
+ case 1:
144
+ result = _a.sent();
145
+ if (result.status === AcEdPromptStatus.Cancel) {
146
+ return [2 /*return*/, undefined];
147
+ }
148
+ if (result.status === AcEdPromptStatus.None) {
149
+ return [2 /*return*/, defaults.textMode];
150
+ }
151
+ if (result.status === AcEdPromptStatus.OK ||
152
+ result.status === AcEdPromptStatus.Keyword) {
153
+ if (!result.stringResult) {
154
+ return [2 /*return*/, defaults.textMode];
155
+ }
156
+ return [2 /*return*/, result.stringResult === 'Vector' ? 'vector' : 'text'];
157
+ }
158
+ return [2 /*return*/, undefined];
159
+ }
160
+ });
161
+ });
162
+ };
163
+ AcApConvertToPdfCmd.prototype.promptModelSpaceFit = function () {
164
+ return __awaiter(this, void 0, void 0, function () {
165
+ var defaults, prompt, extents, display, result;
166
+ return __generator(this, function (_a) {
167
+ switch (_a.label) {
168
+ case 0:
169
+ defaults = resolveAcApPdfExportOptions();
170
+ prompt = new AcEdPromptKeywordOptions(AcApI18n.t('jig.cpdf.modelSpaceFit'));
171
+ prompt.allowNone = true;
172
+ extents = prompt.keywords.add(AcApI18n.t('jig.cpdf.keywords.extents.display'), AcApI18n.t('jig.cpdf.keywords.extents.global'), AcApI18n.t('jig.cpdf.keywords.extents.local'));
173
+ display = prompt.keywords.add(AcApI18n.t('jig.cpdf.keywords.display.display'), AcApI18n.t('jig.cpdf.keywords.display.global'), AcApI18n.t('jig.cpdf.keywords.display.local'));
174
+ prompt.keywords.default =
175
+ defaults.modelSpaceFit === 'display' ? display : extents;
176
+ return [4 /*yield*/, AcApDocManager.instance.editor.getKeywords(prompt)];
177
+ case 1:
178
+ result = _a.sent();
179
+ if (result.status === AcEdPromptStatus.Cancel) {
180
+ return [2 /*return*/, undefined];
181
+ }
182
+ if (result.status === AcEdPromptStatus.None) {
183
+ return [2 /*return*/, defaults.modelSpaceFit];
184
+ }
185
+ if (result.status === AcEdPromptStatus.OK ||
186
+ result.status === AcEdPromptStatus.Keyword) {
187
+ if (!result.stringResult) {
188
+ return [2 /*return*/, defaults.modelSpaceFit];
189
+ }
190
+ return [2 /*return*/, result.stringResult === 'Display' ? 'display' : 'extents'];
191
+ }
192
+ return [2 /*return*/, undefined];
193
+ }
194
+ });
195
+ });
196
+ };
197
+ AcApConvertToPdfCmd.prototype.promptYesNo = function (messageKey, defaultYes) {
198
+ return __awaiter(this, void 0, void 0, function () {
199
+ var prompt, yes, no, result;
200
+ return __generator(this, function (_a) {
201
+ switch (_a.label) {
202
+ case 0:
203
+ prompt = new AcEdPromptKeywordOptions(AcApI18n.t(messageKey));
204
+ prompt.allowNone = true;
205
+ yes = prompt.keywords.add(AcApI18n.t('jig.cpdf.keywords.yes.display'), AcApI18n.t('jig.cpdf.keywords.yes.global'), AcApI18n.t('jig.cpdf.keywords.yes.local'));
206
+ no = prompt.keywords.add(AcApI18n.t('jig.cpdf.keywords.no.display'), AcApI18n.t('jig.cpdf.keywords.no.global'), AcApI18n.t('jig.cpdf.keywords.no.local'));
207
+ prompt.keywords.default = defaultYes ? yes : no;
208
+ return [4 /*yield*/, AcApDocManager.instance.editor.getKeywords(prompt)];
209
+ case 1:
210
+ result = _a.sent();
211
+ if (result.status === AcEdPromptStatus.Cancel) {
212
+ return [2 /*return*/, undefined];
213
+ }
214
+ if (result.status === AcEdPromptStatus.None) {
215
+ return [2 /*return*/, defaultYes];
216
+ }
217
+ if (result.status === AcEdPromptStatus.OK ||
218
+ result.status === AcEdPromptStatus.Keyword) {
219
+ if (!result.stringResult) {
220
+ return [2 /*return*/, defaultYes];
221
+ }
222
+ return [2 /*return*/, result.stringResult === 'Yes'];
223
+ }
224
+ return [2 /*return*/, undefined];
225
+ }
226
+ });
227
+ });
228
+ };
83
229
  return AcApConvertToPdfCmd;
84
230
  }(AcEdCommand));
85
231
  export { AcApConvertToPdfCmd };
@@ -1 +1 @@
1
- {"version":3,"file":"AcApConvertToPdfCmd.js","sourceRoot":"","sources":["../src/AcApConvertToPdfCmd.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAe,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD;;;GAGG;AACH;IAAyC,uCAAW;IAApD;;IAUA,CAAC;IATC;;;;OAIG;IACG,qCAAO,GAAb,UAAc,OAAoB;;;;;;wBAC1B,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAA;wBACxC,qBAAM,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAA;;wBAAhC,SAAgC,CAAA;;;;;KACjC;IACH,0BAAC;AAAD,CAAC,AAVD,CAAyC,WAAW,GAUnD"}
1
+ {"version":3,"file":"AcApConvertToPdfCmd.js","sourceRoot":"","sources":["../src/AcApConvertToPdfCmd.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,27 @@
1
- import type { AcApContext } from '@mlightcad/cad-simple-viewer';
1
+ import { type AcApContext } from '@mlightcad/cad-simple-viewer';
2
+ import { type AcApPdfExportOptions } from './AcApPdfExportOptions';
2
3
  /**
3
- * Utility class for converting CAD drawings to PDF format.
4
+ * Converts the current CAD drawing to a vector PDF and downloads it.
4
5
  *
5
- * Reuses the SVG renderer pipeline and converts the resulting SVG to a
6
- * vector PDF using jsPDF + svg2pdf.js.
6
+ * Framing matches HTML export: `'extents'` fits drawable geometry; `'display'`
7
+ * uses the live camera box. Paper-space pages ignore model-space fit and use
8
+ * their own drawable extents.
9
+ *
10
+ * When {@link AcApPdfExportOptions.exportLayouts} is true, every layout becomes
11
+ * one PDF page. A busy indicator is shown for the duration.
7
12
  */
8
13
  export declare class AcApPdfConvertor {
9
14
  /**
10
15
  * Renders the current drawing to PDF and triggers a browser download.
16
+ *
17
+ * @param context - Active document context
18
+ * @param options - Export framing and layout options
19
+ */
20
+ convert(context: AcApContext, options?: AcApPdfExportOptions): Promise<void>;
21
+ /**
22
+ * Captures the visible world box from the active view’s screen corners.
11
23
  */
12
- convert(context: AcApContext): Promise<void>;
13
- private buildSvg;
14
- private configureRenderer;
15
- private downloadAsPdf;
24
+ private captureFitBox;
25
+ private downloadBytes;
16
26
  }
17
27
  //# sourceMappingURL=AcApPdfConvertor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AcApPdfConvertor.d.ts","sourceRoot":"","sources":["../src/AcApPdfConvertor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAS/D;;;;;GAKG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,WAAW;YASpB,QAAQ;IActB,OAAO,CAAC,iBAAiB;YAaX,aAAa;CA0B5B"}
1
+ {"version":3,"file":"AcApPdfConvertor.d.ts","sourceRoot":"","sources":["../src/AcApPdfConvertor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAMjB,MAAM,8BAA8B,CAAA;AAMrC,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,wBAAwB,CAAA;AAI/B;;;;;;;;;GASG;AACH,qBAAa,gBAAgB;IAC3B;;;;;OAKG;IACG,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,oBAAyB;IA2CtE;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,aAAa;CAYtB"}
@@ -34,120 +34,113 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
34
34
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
35
  }
36
36
  };
37
- var __values = (this && this.__values) || function(o) {
38
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
39
- if (m) return m.call(o);
40
- if (o && typeof o.length === "number") return {
41
- next: function () {
42
- if (o && i >= o.length) o = void 0;
43
- return { value: o && o[i++], done: !o };
44
- }
45
- };
46
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
47
- };
48
- import { AcApSettingManager, resolveExportDownloadName } from '@mlightcad/cad-simple-viewer';
49
- import { AcSvgRenderer } from '@mlightcad/cad-svg-plugin';
50
- import { jsPDF } from 'jspdf';
51
- import { svg2pdf } from 'svg2pdf.js';
37
+ import { AcApDocManager, AcApI18n, AcApSettingManager, resolveExportDownloadName } from '@mlightcad/cad-simple-viewer';
38
+ import { exportDatabaseToPdf } from '@mlightcad/pdf-renderer';
39
+ import { resolveAcApPdfExportOptions } from './AcApPdfExportOptions';
40
+ import { resolveViewerTextFont } from './AcApPdfFontResolver';
41
+ import { createViewerPdfGlyphProvider } from './AcApPdfGlyphProvider';
52
42
  /**
53
- * Utility class for converting CAD drawings to PDF format.
43
+ * Converts the current CAD drawing to a vector PDF and downloads it.
44
+ *
45
+ * Framing matches HTML export: `'extents'` fits drawable geometry; `'display'`
46
+ * uses the live camera box. Paper-space pages ignore model-space fit and use
47
+ * their own drawable extents.
54
48
  *
55
- * Reuses the SVG renderer pipeline and converts the resulting SVG to a
56
- * vector PDF using jsPDF + svg2pdf.js.
49
+ * When {@link AcApPdfExportOptions.exportLayouts} is true, every layout becomes
50
+ * one PDF page. A busy indicator is shown for the duration.
57
51
  */
58
52
  var AcApPdfConvertor = /** @class */ (function () {
59
53
  function AcApPdfConvertor() {
60
54
  }
61
55
  /**
62
56
  * Renders the current drawing to PDF and triggers a browser download.
57
+ *
58
+ * @param context - Active document context
59
+ * @param options - Export framing and layout options
63
60
  */
64
- AcApPdfConvertor.prototype.convert = function (context) {
65
- return __awaiter(this, void 0, void 0, function () {
66
- var svgString, downloadName;
61
+ AcApPdfConvertor.prototype.convert = function (context_1) {
62
+ return __awaiter(this, arguments, void 0, function (context, options) {
63
+ var resolved;
64
+ var _this = this;
65
+ if (options === void 0) { options = {}; }
67
66
  return __generator(this, function (_a) {
68
67
  switch (_a.label) {
69
- case 0: return [4 /*yield*/, this.buildSvg(context)];
68
+ case 0:
69
+ resolved = resolveAcApPdfExportOptions(options);
70
+ return [4 /*yield*/, AcApDocManager.instance.withBusyIndicator(function () { return __awaiter(_this, void 0, void 0, function () {
71
+ var db, pdfOptions, inModelSpace, bytes, downloadName;
72
+ return __generator(this, function (_a) {
73
+ switch (_a.label) {
74
+ case 0:
75
+ db = context.doc.database;
76
+ pdfOptions = {
77
+ title: context.doc.fileName || context.doc.docTitle,
78
+ ltscale: db.ltscale,
79
+ celtscale: db.celtscale,
80
+ showLineWeight: !!db.lwdisplay,
81
+ fontMapping: AcApSettingManager.instance.fontMapping,
82
+ background: 'none',
83
+ fit: resolved.modelSpaceFit === 'display' ? 'current' : 'extents',
84
+ layouts: resolved.exportLayouts ? 'all' : 'current',
85
+ glyphProvider: createViewerPdfGlyphProvider(),
86
+ textMode: resolved.textMode
87
+ };
88
+ if (resolved.textMode === 'text') {
89
+ pdfOptions.textFontResolver = resolveViewerTextFont;
90
+ }
91
+ if (resolved.modelSpaceFit === 'display') {
92
+ inModelSpace = db.currentSpaceId === db.tables.blockTable.modelSpace.objectId;
93
+ if (inModelSpace || !resolved.exportLayouts) {
94
+ pdfOptions.fitBox = this.captureFitBox(context.view);
95
+ }
96
+ }
97
+ return [4 /*yield*/, exportDatabaseToPdf(db, pdfOptions)];
98
+ case 1:
99
+ bytes = _a.sent();
100
+ downloadName = resolveExportDownloadName(context.doc.fileName || context.doc.docTitle, 'pdf');
101
+ this.downloadBytes(bytes, downloadName);
102
+ return [2 /*return*/];
103
+ }
104
+ });
105
+ }); }, AcApI18n.t('main.message.exportingPdf'))];
70
106
  case 1:
71
- svgString = _a.sent();
72
- downloadName = resolveExportDownloadName(context.doc.fileName || context.doc.docTitle, 'pdf');
73
- return [4 /*yield*/, this.downloadAsPdf(svgString, downloadName)];
74
- case 2:
75
107
  _a.sent();
76
108
  return [2 /*return*/];
77
109
  }
78
110
  });
79
111
  });
80
112
  };
81
- AcApPdfConvertor.prototype.buildSvg = function (context) {
82
- return __awaiter(this, void 0, void 0, function () {
83
- var entities, renderer, entities_1, entities_1_1, entity;
84
- var e_1, _a;
85
- return __generator(this, function (_b) {
86
- AcSvgRenderer.prepareExport();
87
- entities = context.doc.database.tables.blockTable.modelSpace.newIterator();
88
- renderer = new AcSvgRenderer();
89
- this.configureRenderer(renderer, context);
90
- try {
91
- for (entities_1 = __values(entities), entities_1_1 = entities_1.next(); !entities_1_1.done; entities_1_1 = entities_1.next()) {
92
- entity = entities_1_1.value;
93
- entity.worldDraw(renderer);
94
- }
95
- }
96
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
97
- finally {
98
- try {
99
- if (entities_1_1 && !entities_1_1.done && (_a = entities_1.return)) _a.call(entities_1);
100
- }
101
- finally { if (e_1) throw e_1.error; }
102
- }
103
- return [2 /*return*/, renderer.exportAsync()];
104
- });
113
+ /**
114
+ * Captures the visible world box from the active view’s screen corners.
115
+ */
116
+ AcApPdfConvertor.prototype.captureFitBox = function (view) {
117
+ var topLeft = view.screenToWorld({ x: 0, y: 0 });
118
+ var bottomRight = view.screenToWorld({
119
+ x: view.width,
120
+ y: view.height
105
121
  });
122
+ return {
123
+ min: {
124
+ x: Math.min(topLeft.x, bottomRight.x),
125
+ y: Math.min(topLeft.y, bottomRight.y)
126
+ },
127
+ max: {
128
+ x: Math.max(topLeft.x, bottomRight.x),
129
+ y: Math.max(topLeft.y, bottomRight.y)
130
+ }
131
+ };
106
132
  };
107
- AcApPdfConvertor.prototype.configureRenderer = function (renderer, context) {
108
- var _a;
109
- var db = context.doc.database;
110
- renderer.ltscale = db.ltscale;
111
- renderer.celtscale = db.celtscale;
112
- renderer.showLineWeight = !!db.lwdisplay;
113
- renderer.setFontMapping(AcApSettingManager.instance.fontMapping);
114
- var view = context.view;
115
- var bg = (_a = view === null || view === void 0 ? void 0 : view.backgroundColor) !== null && _a !== void 0 ? _a : 0xffffff;
116
- renderer.currentBackgroundColor = bg;
117
- renderer.changeForeground(bg === 0 ? 0xffffff : 0x000000);
118
- };
119
- AcApPdfConvertor.prototype.downloadAsPdf = function (svgString, downloadName) {
120
- return __awaiter(this, void 0, void 0, function () {
121
- var parser, svgDoc, svgEl, vb, vbWidth, vbHeight, orientation, pdf;
122
- var _a;
123
- return __generator(this, function (_b) {
124
- switch (_b.label) {
125
- case 0:
126
- parser = new DOMParser();
127
- svgDoc = parser.parseFromString(svgString, 'image/svg+xml');
128
- svgEl = svgDoc.documentElement;
129
- vb = (_a = svgEl.getAttribute('viewBox')) === null || _a === void 0 ? void 0 : _a.split(' ').map(Number);
130
- vbWidth = vb && vb.length === 4 ? Math.abs(vb[2]) : 297;
131
- vbHeight = vb && vb.length === 4 ? Math.abs(vb[3]) : 210;
132
- orientation = vbWidth >= vbHeight ? 'landscape' : 'portrait';
133
- pdf = new jsPDF({
134
- orientation: orientation,
135
- unit: 'mm',
136
- format: [vbWidth, vbHeight]
137
- });
138
- return [4 /*yield*/, svg2pdf(svgEl, pdf, {
139
- x: 0,
140
- y: 0,
141
- width: vbWidth,
142
- height: vbHeight
143
- })];
144
- case 1:
145
- _b.sent();
146
- pdf.save(downloadName);
147
- return [2 /*return*/];
148
- }
149
- });
150
- });
133
+ AcApPdfConvertor.prototype.downloadBytes = function (bytes, downloadName) {
134
+ var blob = new Blob([bytes], { type: 'application/pdf' });
135
+ var url = URL.createObjectURL(blob);
136
+ var link = document.createElement('a');
137
+ link.href = url;
138
+ link.download = downloadName || 'drawing.pdf';
139
+ link.rel = 'noopener';
140
+ document.body.appendChild(link);
141
+ link.click();
142
+ document.body.removeChild(link);
143
+ window.setTimeout(function () { return URL.revokeObjectURL(url); }, 60000);
151
144
  };
152
145
  return AcApPdfConvertor;
153
146
  }());
@@ -1 +1 @@
1
- {"version":3,"file":"AcApPdfConvertor.js","sourceRoot":"","sources":["../src/AcApPdfConvertor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AcApPdfConvertor.js","sourceRoot":"","sources":["../src/AcApPdfConvertor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Model-space page framing for PDF export.
3
+ *
4
+ * - `display` — fit the live viewport (on-screen view).
5
+ * - `extents` — fit drawable geometry in the current space.
6
+ */
7
+ export type AcApPdfModelSpaceFit = 'display' | 'extents';
8
+ /**
9
+ * User-configurable options for PDF export (`cpdf` dialog, `-cpdf`, and API).
10
+ */
11
+ export interface AcApPdfExportOptions {
12
+ /**
13
+ * How to frame model-space pages. Defaults to `'extents'`.
14
+ * Paper-space pages always use their own drawable extents / paper size.
15
+ */
16
+ modelSpaceFit?: AcApPdfModelSpaceFit;
17
+ /**
18
+ * When `true`, every layout (model + paper space) becomes a PDF page.
19
+ * When `false`, only the current space is exported. Defaults to `true`.
20
+ */
21
+ exportLayouts?: boolean;
22
+ /**
23
+ * How MTEXT/TEXT are painted.
24
+ *
25
+ * - `'text'` (default): laid-out text is painted as real PDF text through
26
+ * fonts resolved from the viewer font catalog — text stays
27
+ * selectable/searchable and the file shrinks dramatically. Texts whose
28
+ * font is SHX or cannot be embedded fall back to vector glyphs.
29
+ * - `'vector'`: glyphs are tessellated into line/fill geometry
30
+ * (self-contained, but dense text dominates the file size).
31
+ */
32
+ textMode?: 'vector' | 'text';
33
+ }
34
+ /**
35
+ * Resolves PDF export options with package defaults.
36
+ */
37
+ export declare function resolveAcApPdfExportOptions(options?: AcApPdfExportOptions): Required<AcApPdfExportOptions>;
38
+ //# sourceMappingURL=AcApPdfExportOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcApPdfExportOptions.d.ts","sourceRoot":"","sources":["../src/AcApPdfExportOptions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,SAAS,CAAA;AAExD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,aAAa,CAAC,EAAE,oBAAoB,CAAA;IACpC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;CAC7B;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,GAAE,oBAAyB,GACjC,QAAQ,CAAC,oBAAoB,CAAC,CAOhC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Resolves PDF export options with package defaults.
3
+ */
4
+ export function resolveAcApPdfExportOptions(options) {
5
+ if (options === void 0) { options = {}; }
6
+ return {
7
+ modelSpaceFit: options.modelSpaceFit === 'display' ? 'display' : 'extents',
8
+ exportLayouts: options.exportLayouts !== false,
9
+ textMode: options.textMode === 'vector' ? 'vector' : 'text'
10
+ };
11
+ }
12
+ //# sourceMappingURL=AcApPdfExportOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcApPdfExportOptions.js","sourceRoot":"","sources":["../src/AcApPdfExportOptions.ts"],"names":[],"mappings":"AAmCA;;GAEG;AACH,MAAM,UAAU,2BAA2B,CACzC,OAAkC;IAAlC,wBAAA,EAAA,YAAkC;IAElC,OAAO;QACL,aAAa,EACX,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC7D,aAAa,EAAE,OAAO,CAAC,aAAa,KAAK,KAAK;QAC9C,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;KAC5D,CAAA;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { AcPdfTextFontResolver } from '@mlightcad/pdf-renderer';
2
+ /**
3
+ * Resolves embeddable TTF/OTF/WOFF font programs for `textMode: 'text'` PDF
4
+ * exports from the viewer font catalog.
5
+ *
6
+ * Lookup mirrors on-screen text rendering: direct catalog hit first, then the
7
+ * font manager's replacement chain (`getReplacementFontName`) for style fonts
8
+ * the catalog does not list ("Standard", localized aliases like "标准", …).
9
+ * Only a catalog *miss* falls through to the replacement — a direct SHX hit
10
+ * stays SHX so those texts keep their vector-glyph appearance in the PDF.
11
+ *
12
+ * The catalog entry's `url` is fetched on demand; bytes are not kept between
13
+ * calls beyond pdf-lib's own embed cache, so a document using several CJK
14
+ * faces embeds each subset once regardless of how many texts reference it.
15
+ *
16
+ * SHX fonts have no embeddable program and resolve `undefined` — the renderer
17
+ * then paints those texts as vector glyphs, matching the on-screen fallback.
18
+ */
19
+ export declare const resolveViewerTextFont: AcPdfTextFontResolver;
20
+ //# sourceMappingURL=AcApPdfFontResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcApPdfFontResolver.d.ts","sourceRoot":"","sources":["../src/AcApPdfFontResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAEpE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,qBAAqB,EAAE,qBA+BnC,CAAA"}