@polotno/pdf-export 0.1.33 → 0.1.35

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,91 @@
1
+ export interface TextElement {
2
+ fontFamily: string;
3
+ fontWeight?: string;
4
+ fontSize: number;
5
+ fontStyle?: string;
6
+ fill: string;
7
+ opacity: number;
8
+ strokeWidth: number;
9
+ stroke?: string;
10
+ align: string;
11
+ textDecoration: string;
12
+ letterSpacing?: number;
13
+ lineHeight: number;
14
+ text: string;
15
+ width: number;
16
+ height: number;
17
+ verticalAlign?: string;
18
+ backgroundEnabled?: boolean;
19
+ backgroundPadding?: number;
20
+ backgroundCornerRadius?: number;
21
+ backgroundColor?: string;
22
+ }
23
+ export interface RenderAttrs {
24
+ pdfx1a?: boolean;
25
+ textVerticalResizeEnabled?: boolean;
26
+ }
27
+ export interface TextSegment {
28
+ text: string;
29
+ bold?: boolean;
30
+ italic?: boolean;
31
+ underline?: boolean;
32
+ color?: string;
33
+ }
34
+ export interface TabExpansionSegment {
35
+ type: 'text' | 'tab';
36
+ text?: string;
37
+ wordSpacing?: number;
38
+ advanceWidth?: number;
39
+ }
40
+ export interface RenderSegment {
41
+ segment: TextSegment;
42
+ fontKey: string;
43
+ type: 'text' | 'tab';
44
+ text?: string;
45
+ wordSpacing?: number;
46
+ advanceWidth?: number;
47
+ }
48
+ export interface ListParagraphMeta {
49
+ type: 'ul' | 'ol';
50
+ index: number;
51
+ indentLevel: number;
52
+ displayMarker: boolean;
53
+ }
54
+ export interface ListLineMeta {
55
+ type: 'ul' | 'ol';
56
+ markerText: string;
57
+ indentPx: number;
58
+ markerBoxWidth: number;
59
+ markerFontSize: number;
60
+ markerAlignment: 'center' | 'right';
61
+ showMarker: boolean;
62
+ textStartPx: number;
63
+ }
64
+ export interface TextLine {
65
+ text: string;
66
+ width: number;
67
+ fullWidth: number;
68
+ listMeta?: ListLineMeta;
69
+ }
70
+ export interface LineRenderContext {
71
+ markerXOffset: number;
72
+ lineYOffset: number;
73
+ contentStartX: number;
74
+ widthOption: number | undefined;
75
+ heightOfLine: number;
76
+ }
77
+ export interface SegmentRenderOptions {
78
+ mode: 'fill' | 'stroke';
79
+ color?: string;
80
+ opacity?: number;
81
+ heightOfLine?: number;
82
+ offsetX?: number;
83
+ offsetY?: number;
84
+ applySegmentColor?: (segment: TextSegment) => void;
85
+ }
86
+ export interface TextMetrics {
87
+ textOptions: PDFKit.Mixins.TextOptions;
88
+ lineHeightPx: number;
89
+ baselineOffset: number;
90
+ textLines: TextLine[];
91
+ }
@@ -0,0 +1 @@
1
+ export {};
package/lib/text.js CHANGED
@@ -935,7 +935,10 @@ async function prepareLineForRendering(doc, element, line, lineIndex, yOffset, l
935
935
  : doc.heightOfString(strippedLineText, textOptions);
936
936
  const contentStartX = calculateTextContentXOffset(element, line);
937
937
  const isJustify = element.align === 'justify';
938
- const widthOption = isJustify
938
+ // Disable justification if line contains tabs - tabs position content precisely,
939
+ // and justification would interfere by spreading spaces
940
+ const hasTabs = line.text.includes('\t');
941
+ const widthOption = isJustify && !hasTabs
939
942
  ? Math.max(element.width - (line.listMeta ? line.listMeta.textStartPx : 0), 1)
940
943
  : undefined;
941
944
  // Handle list markers if needed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polotno/pdf-export",
3
- "version": "0.1.33",
3
+ "version": "0.1.35",
4
4
  "description": "Convert Polotno JSON into vector PDF",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",