返回 slidev
exporting.md
根目录 / docs / guide / exporting.md
1 ---
2 outline: deep
3 ---
4
5 # Exporting
6
7 Usually the slides are displayed in a web browser, but you can also export them to PDF, PPTX, PNG, or Markdown files for sharing or printing. This feature is available through the CLI command [`slidev export`](../builtin/cli#export).
8
9 However, interactive features in your slides may not be available in the exported files. You can build and host your slides as a web application to keep the interactivity. See [Building and Hosting](./hosting) for more information.
10
11 ## The Browser Exporter <Badge> Recommended </Badge> {#browser}
12
13 > Available since v0.50.0-beta.11
14
15 Slidev provides a UI in the browser for exporting your slides. You can access it by clicking the "Export" button in "More options" menu in the [navigation bar](./ui#navigation-bar), or go to `http://localhost:<port>/export` directly.
16
17 In the UI, you can export the slides as PDF, or capture the slides as images and download them as a PPTX or zip file.
18
19 Note that browsers other than **modern Chromium-based browsers** may not work well with the exporting UI. If you encounter any issues, please try use the CLI instead.
20
21 > The following content of this page is for the CLI only.
22
23 ## The CLI {#cli}
24
25 Exporting to PDF, PPTX, or PNG relies on [Playwright](https://playwright.dev) for rendering the slides. Therefore [`playwright-chromium`](https://npmjs.com/package/playwright-chromium) is required to be installed in your project:
26
27 ::: code-group
28
29 ```bash [pnpm]
30 $ pnpm add -D playwright-chromium
31 ```
32
33 ```bash [npm]
34 $ npm i -D playwright-chromium
35 ```
36
37 ```bash [yarn]
38 $ yarn add -D playwright-chromium
39 ```
40
41 ```bash [bun]
42 $ bun add -D playwright-chromium
43 ```
44
45 ```bash [deno]
46 $ deno add -D npm:playwright-chromium
47 ```
48
49 :::
50
51 ## Formats
52
53 ### PDF
54
55 After installing `playwright-chromium` as described above, you can export your slides to PDF using the following command:
56
57 ```bash
58 $ slidev export
59 ```
60
61 By default, the PDF will be placed at `./slides-export.pdf`.
62
63 ### PPTX
64
65 Slidev can also export your slides as a PPTX file:
66
67 ```bash
68 $ slidev export --format pptx
69 ```
70
71 Note that all the slides in the PPTX file will be exported as images, so the text will not be selectable. Presenter notes will be conveyed into the PPTX file on a per-slide basis.
72
73 In this mode, the `--with-clicks` option is enabled by default. To disable it, pass `--with-clicks false`.
74
75 ### Editable PPTX
76
77 If the recipient needs to edit the deck rather than only present it, export it with native shapes instead of pictures:
78
79 ```bash
80 $ slidev export --format pptx-editable
81 ```
82
83 The slides are measured in the browser and rebuilt as PowerPoint shapes, so text is selectable and editable, boxes can be moved and recolored, and presenter notes are carried over as usual. This does not replace `--format pptx`, which stays the most visually faithful option.
84
85 What stays a picture: anything PowerPoint has no equivalent for. That includes SVG (so Mermaid diagrams and icons), `<canvas>`, `<iframe>`, videos, KaTeX formulas, CSS gradients, `filter`, `backdrop-filter`, `mix-blend-mode` and `clip-path`. Only the element concerned becomes a picture, not the whole slide.
86
87 If a slide cannot be rebuilt safely, or ends up mostly pictures anyway, it falls back to the same image export used by `--format pptx`, for that slide alone, and the reason is printed.
88
89 Worth knowing before you send the file on:
90
91 - A `.pptx` names fonts, it does not embed them. The export prints which font families it referenced; recipients need those installed or PowerPoint will substitute.
92 - PowerPoint does not measure text exactly as a browser does, so a long paragraph may wrap onto a different number of lines.
93 - Decorations a theme draws with `::before` or `::after` in normal flow are left out, and the export lists them. Code block line numbers are one of these: they come from a CSS counter, which has no text and no box that a computed style can report.
94
95 Like `--format pptx`, this exports one slide per click step unless you pass `--with-clicks false`. `--per-slide` is not supported with it.
96
97 ### PNGs and Markdown
98
99 When passing in the `--format png` option, Slidev will export PNG images for each slide instead of a PDF:
100
101 ```bash
102 $ slidev export --format png
103 ```
104
105 You can also compile a markdown file composed of compiled png using `--format md`:
106
107 ```bash
108 $ slidev export --format md
109 ```
110
111 ## Options
112
113 Here are some common options you can use with the `slidev export` command. For a full list of options, see the [CLI documentation](../builtin/cli#export).
114
115 ### Export Clicks Steps
116
117 By default, Slidev exports one page per slide with clicks animations disabled. If you want to export slides with multiple steps into multiple pages, pass the `--with-clicks` option:
118
119 ```bash
120 $ slidev export --with-clicks
121 ```
122
123 ### Output Filename
124
125 You can specify the output filename with the `--output` option:
126
127 ```bash
128 $ slidev export --output my-pdf-export
129 ```
130
131 Or in the headmatter configuration:
132
133 ```yaml
134 ---
135 exportFilename: my-pdf-export
136 ---
137 ```
138
139 ### Export with Range
140
141 By default, all slides in the presentation are exported. If you want to export a specific slide or a range of slides you can set the `--range` option and specify which slides you would like to export:
142
143 ```bash
144 $ slidev export --range 1,6-8,10
145 ```
146
147 This option accepts both specific slide numbers and ranges. The example above would export slides 1,6,7,8 and 10.
148
149 ### Multiple Exports
150
151 You can also export multiple slides at once:
152
153 ```bash
154 $ slidev export slides1.md slides2.md
155 ```
156
157 Or (only available in certain shells):
158
159 ```bash
160 $ slidev export *.md
161 ```
162
163 In this case, each input file will generate its own PDF file.
164
165 ### Dark Mode
166
167 In case you want to export your slides using the dark version of the theme, use the `--dark` option:
168
169 ```bash
170 $ slidev export --dark
171 ```
172
173 ### Timeouts
174
175 For big presentations, you might want to increase the Playwright timeout with `--timeout`:
176
177 ```bash
178 $ slidev export --timeout 60000
179 ```
180
181 ### Wait
182
183 Some parts of your slides may require a longer time to render. You can use the `--wait` option to have an extra delay before exporting:
184
185 ```bash
186 $ slidev export --wait 10000
187 ```
188
189 There is also a `--wait-until` option to wait for a state before exporting each slide. If you keep encountering timeout issues, you can try setting this option:
190
191 ```bash
192 $ slidev export --wait-until none
193 ```
194
195 Possible values:
196
197 - `'networkidle'` - (_default_) consider operation to be finished when there are no network connections for at least `500` ms. This is the safest, but may cause timeouts.
198 - `'domcontentloaded'` - consider operation to be finished when the `DOMContentLoaded` event is fired.
199 - `'load'` - consider operation to be finished when the `load` event is fired.
200 - `'none'` - do not wait for any event.
201
202 ::: warning
203 When specifying values other than `'networkidle'`, please make sure the printed slides are complete and correct. If some contents are missing, you may need to use the `--wait` option.
204 :::
205
206 ### Executable Path
207
208 Chromium may miss some features like codecs that are required to decode some videos. You can set the browser executable path for Playwright to your Chrome or Edge using `--executable-path`:
209
210 ```bash
211 $ slidev export --executable-path [path_to_chromium]
212 ```
213
214 ### PDF Outline
215
216 > Available since v0.36.10
217
218 You can generate the PDF outline by passing the `--with-toc` option:
219
220 ```bash
221 $ slidev export --with-toc
222 ```
223
224 ### Omit Background
225
226 When exporting to PNGs, you can remove the default browser background by passing `--omit-background`:
227
228 ```bash
229 $ slidev export --omit-background
230 ```
231
232 The default browser background is the white background visible on all browser windows and is different than other backgrounds applied throughout the application using CSS styling. [See Playwright docs](https://playwright.dev/docs/api/class-page#page-screenshot-option-omit-background). You will then need to apply additional CSS styling to the application to reveal the transparency.
233
234 Here is a basic example that covers all backgrounds in the application:
235
236 ```css
237 * {
238 background: transparent !important;
239 }
240 ```
241
242 ## Troubleshooting
243
244 ### Missing Content or Animation not Finished
245
246 If you find that some content is missing or the animations are not finished in the exported PDF, you can try adding a wait time before exporting each slide:
247
248 ```bash
249 $ slidev export --wait 1000
250 ```
251
252 ### Broken Emojis
253
254 If the PDF or PNG are missing Emojis, you are likely missing required fonts (such as. e.g. [Google's _Noto Emoji_](https://fonts.google.com/noto/specimen/Noto+Emoji)) in your environment.
255
256 This can affect e.g. CI/CD-like in-container sort of Linux environments. It can be fixed e.g. like this:
257
258 ```bash
259 $ curl -L --output NotoColorEmoji.ttf https://github.com/googlefonts/noto-emoji/raw/main/fonts/NotoColorEmoji.ttf
260 $ sudo mv NotoColorEmoji.ttf /usr/local/share/fonts/
261 $ fc-cache -fv
262 ```
263
264 ### Wrong Context in Global Layers
265
266 See the tip in https://sli.dev/features/global-layers.
267
267 lines MARKDOWN