pdfmake.d.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. declare module 'pdfmake/build/pdfmake' {
  2. interface PdfMakeStatic {
  3. fonts: Record<string, FontDefinition>;
  4. virtualfs: VirtualFileSystem;
  5. createPdf(docDefinition: TDocumentDefinitions, options?: Record<string, unknown>): OutputDocumentBrowser;
  6. setFonts(fonts: Record<string, FontDefinition>): void;
  7. addFonts(fonts: Record<string, FontDefinition>): void;
  8. addVirtualFileSystem(vfs: Record<string, string | { data: string; encoding?: string }>): void;
  9. setUrlAccessPolicy(callback: ((url: string) => boolean) | undefined): void;
  10. }
  11. interface FontDefinition {
  12. normal: string;
  13. bold: string;
  14. italics: string;
  15. bolditalics: string;
  16. }
  17. interface VirtualFileSystem {
  18. storage: Record<string, unknown>;
  19. existsSync(filename: string): boolean;
  20. readFileSync(filename: string, options?: string | { encoding?: string }): unknown;
  21. writeFileSync(filename: string, content: unknown, options?: string | { encoding?: string }): void;
  22. }
  23. interface OutputDocumentBrowser {
  24. getBlob(): Promise<Blob>;
  25. getBuffer(): Promise<ArrayBuffer>;
  26. download(filename?: string): Promise<void>;
  27. open(win?: Window | null): Promise<void>;
  28. print(win?: Window | null): Promise<void>;
  29. }
  30. type Margins = number | [number, number] | [number, number, number, number];
  31. type Alignment = 'left' | 'center' | 'right' | 'justify';
  32. interface Style {
  33. font?: string;
  34. fontSize?: number;
  35. bold?: boolean;
  36. italics?: boolean;
  37. alignment?: Alignment;
  38. color?: string;
  39. fillColor?: string;
  40. fillOpacity?: number;
  41. margin?: Margins;
  42. lineHeight?: number;
  43. decoration?: 'underline' | 'lineThrough' | 'overline';
  44. columnGap?: number;
  45. outline?: boolean;
  46. }
  47. type Content = string | ContentText | ContentColumns | ContentStack | ContentTable | ContentImage | ContentSvg | ContentCanvas | Content[];
  48. interface ContentText extends Style {
  49. text: string | Content[];
  50. style?: string | string[];
  51. pageBreak?: 'before' | 'after';
  52. }
  53. interface ContentColumns extends Style {
  54. columns: Content[];
  55. }
  56. interface ContentStack extends Style {
  57. stack: Content[];
  58. }
  59. interface ContentImage extends Style {
  60. image: string;
  61. width?: number;
  62. height?: number;
  63. fit?: [number, number];
  64. }
  65. interface ContentSvg extends Style {
  66. svg: string;
  67. width?: number;
  68. height?: number;
  69. fit?: [number, number];
  70. }
  71. interface ContentCanvas extends Style {
  72. canvas: {
  73. type: string;
  74. x: number;
  75. y: number;
  76. w: number;
  77. h: number;
  78. r: number;
  79. color: string;
  80. }[];
  81. }
  82. interface TableCell extends Style {
  83. text?: string | Content[];
  84. rowSpan?: number;
  85. colSpan?: number;
  86. /** 单元格垂直对齐(pdfmake 0.3+,合并 rowSpan 时常用 middle;非 CSS 的 valign) */
  87. verticalAlignment?: 'top' | 'middle' | 'bottom';
  88. border?: [boolean, boolean, boolean, boolean];
  89. noWrap?: boolean;
  90. }
  91. interface ContentTable extends Style {
  92. table: {
  93. headerRows?: number;
  94. widths?: ('auto' | '*' | number | string)[];
  95. body: (string | TableCell | Content)[][];
  96. };
  97. layout?: string | TableLayout;
  98. }
  99. interface TableLayout {
  100. hLineWidth?: (i: number, node: unknown) => number;
  101. vLineWidth?: (i: number, node: unknown) => number;
  102. hLineColor?: (i: number, node: unknown) => string;
  103. vLineColor?: (i: number, node: unknown) => string;
  104. paddingLeft?: (i: number, node: unknown) => number;
  105. paddingRight?: (i: number, node: unknown) => number;
  106. paddingTop?: (i: number, node: unknown) => number;
  107. paddingBottom?: (i: number, node: unknown) => number;
  108. fillColor?: (rowIndex: number, node: unknown, columnIndex: number) => string | null;
  109. }
  110. interface TDocumentDefinitions {
  111. content: Content;
  112. defaultStyle?: Style;
  113. styles?: Record<string, Style>;
  114. pageSize?: string | { width: number; height: number };
  115. pageOrientation?: 'portrait' | 'landscape';
  116. pageMargins?: Margins;
  117. header?: Content | ((currentPage: number, pageCount: number) => Content);
  118. footer?: Content | ((currentPage: number, pageCount: number) => Content);
  119. info?: Record<string, string>;
  120. images?: Record<string, string | { url: string; headers?: Record<string, any> }>;
  121. }
  122. const pdfMake: PdfMakeStatic;
  123. export default pdfMake;
  124. export type {
  125. TDocumentDefinitions,
  126. Content,
  127. ContentText,
  128. ContentColumns,
  129. ContentStack,
  130. ContentTable,
  131. ContentImage,
  132. TableCell,
  133. TableLayout,
  134. Style,
  135. Margins,
  136. Alignment,
  137. OutputDocumentBrowser,
  138. };
  139. }