View, fill, save, print and export PDFs in VS Code.
PDF Tools brings a full-featured PDF editor to Visual Studio Code: view, navigate, search, rotate, split, merge, print and save PDF files without leaving the editor.
One of its key features, missing from most PDF extensions for VS Code, is real form filling: fill in a PDF form and save the values into the file with Ctrl+S, exactly like a text file. Unsaved changes show the dot on the tab, auto save works, and Revert, Save As and hot exit (restoring unsaved changes after a restart) are supported.

Features
View
- Fast, accurate rendering with PDF.js, following your VS Code theme.
- Page navigation: previous/next, first/last, Go to Page (Ctrl+G, accepts page labels like iv or A-1), Back/Forward after following a link (Alt+←/→).
- Zoom: in/out, automatic, actual size, fit page, fit width, presets, Ctrl+mouse wheel and trackpad pinch.
- Rotate the view, scrolling (vertical, horizontal, wrapped, one page at a time) and spreads (none, odd, even).
- Text selection tool and hand tool (drag to pan).
- Remembers where you left each PDF: page, zoom, rotation, scrolling, spreads, sidebar and mode.
- Match Theme Colors: pages in your theme's background and text colors — dark pages in a dark theme, with the hues of images and colored text preserved.
- Focus mode: the page gets the whole editor; one floating toolbar appears when you move the mouse.
- Presentation mode (Ctrl+Alt+P): one page at a time, full screen (through VS Code's Zen mode); arrow keys, Space, the mouse wheel or a click change page, Esc ends it.

Search
- Find (Ctrl+F) like in VS Code: next/previous (Enter, F3), match case, whole word, highlight all, result count.
- Accent-insensitive by default: onesta also finds onestà (turn on Match Diacritics to tell them apart).
- All results at a glance (Ctrl+Shift+F): every match in the document with the surrounding text, grouped by page — click one to jump there.

Pages (thumbnails) · Outline (bookmarks, with filter and Find Current Item) · Search · Form Fields · Attachments (open in VS Code or save) · Layers · Document Properties (including encryption, permissions and the fonts, embedded or not).
- Text fields, checkboxes, radio buttons, drop-down lists and list boxes (AcroForm).
- Fill mode opens automatically for PDFs with form fields: highlight fields, next/previous field, next required empty field, Form Fields panel (changed, required, by page; filter by name or value), Clear Form.
- Save into the file: the Save button (enabled when there are unsaved changes), Ctrl+S, Save As…, File: Revert File and auto save. Changes are written as an incremental update, so the original content of the file is preserved byte for byte.
- Export and import form data as JSON or XFDF (the format of Acrobat and most PDF tools) — for example, to fill a new copy of a character sheet with the values of an old one.
- Hot exit: unsaved form values survive a VS Code restart.
- Several editors on one file: values typed in one appear in the other.
Export and share
- Open Text in Editor: the text of every page in a new editor tab, ready to copy, search or save.
- Copy Page as Image (to the clipboard) and Export Page as PNG…, with the form values.
- Copy Link to This Page: a
vscode:// link that opens the PDF at that page — paste it in your notes, a Markdown file or a chat.
More
- Print the filled document through your system PDF application — all pages, the current page or a range (Print Pages…:
1-3, 7, 10-).
- Password-protected PDFs: VS Code asks for the password.
- External changes: the PDF reloads automatically when it changes on disk (if you have unsaved changes, PDF Tools asks first).
- Everything is in the Command Palette (PDF Tools: …) and in the status bar (page, zoom, form state).
Usage

Open any .pdf file. To open a PDF with another editor, right-click it and choose Open With….
The toolbar has two rows: the first is always the same (sidebar, View/Fill mode, page, zoom, find, save, print, … menu); the second shows the tools of the current mode. Every action is also in the … menu and in the Command Palette. In Focus mode (pdfTools.toolbar: floating) the first row floats at the bottom of the page and the mode tools are in the … menu.
| Shortcut |
Action |
| Ctrl+F · F3 · Shift+F3 |
Find · next · previous |
| Ctrl+Shift+F |
All search results |
| Ctrl+G |
Go to page |
| Ctrl+S · Ctrl+Shift+S |
Save · Save As |
| Ctrl+Alt+P |
Presentation mode |
| Ctrl+= · Ctrl+- · Ctrl+0 |
Zoom in · out · actual size |
| Alt+← · Alt+→ |
Back · forward (after following a link) |
| N/P · Home/End |
Next/previous page · first/last page |
| R · Shift+R |
Rotate clockwise · counterclockwise |
| H · S |
Hand tool · text selection |
| 1 · 2 |
View mode · Fill mode |
| F4 |
Toggle sidebar |
Single-key shortcuts work when the focus is not in a form field.
If another PDF extension (for example vscode-pdf) is also installed, VS Code shows "There are multiple default editors available for the resource" the first time you open a PDF. Choose PDF Viewer (from PDF Tools) and confirm it as the default, or add this to your settings:
"workbench.editorAssociations": {
"*.pdf": "pdfTools.editor"
}
PDF Tools also reads vscode-pdf's pdf-preview.default.* settings when its own are not set.
Printing
Click the Print button in the PDF toolbar or in the editor title bar, or run PDF Tools: Print from the Command Palette. To print only some pages, use Print Pages… in the … menu: the current page, or pages and ranges like 1-3, 7, 10-.
VS Code does not let extensions open the print dialog (webviews are sandboxed). PDF Tools therefore writes a temporary copy of the document, including form values you have not saved yet, and opens it in your system PDF application, where you print it. Temporary copies are deleted after a day.
Settings
| Setting |
Default |
Description |
pdfTools.default.mode |
auto |
Mode a PDF opens in: auto (Fill when it has editable form fields, otherwise View), view or fill. A mode you pick for a file is remembered. |
pdfTools.default.scale |
auto |
Zoom: auto, page-actual, page-fit, page-width or a scale (1.5 = 150%). |
pdfTools.default.scrollMode |
vertical |
vertical, horizontal, wrapped or page. |
pdfTools.default.spreadMode |
none |
none, odd or even. |
pdfTools.default.cursor |
select |
select (text selection) or hand. |
pdfTools.default.sidebar |
false |
Show the sidebar when a PDF opens. |
pdfTools.restoreViewState |
true |
Reopen each PDF where you left it. |
pdfTools.toolbar |
fixed |
fixed: toolbars above the page. floating: Focus mode, one auto-hiding toolbar over the page. PDF Tools: Toggle Focus Mode switches one editor. |
pdfTools.pageColors |
off |
off: the document's own colors. theme: the color theme's background and text colors (printing and exports are not affected). PDF Tools: Toggle Theme Colors for Pages switches one editor. |
pdfTools.print.method |
systemViewer |
systemViewer: open the temporary copy in the system PDF application. windowsPrintVerb (Windows only): send it to the default application's Print command instead; falls back to systemViewer if that fails. |
The pdfTools.default.* settings fall back to vscode-pdf's pdf-preview.default.* ones (scale, scrollMode, spreadMode, cursor, sidebar).
Known limitations
- XFA forms (dynamic forms created with Adobe LiveCycle/AEM Designer) are not supported. PDF Tools shows a warning instead of the form. Documents that contain both XFA and a standard form are filled through the standard form.
- Characters the field's font cannot encode. Many forms use the non-embedded Helvetica font, which only covers Western European characters (Windows-1252). Values with other characters — for example
ō or ū — are saved correctly, but PDF.js cannot draw them with that font, so it marks the document (NeedAppearances) and leaves drawing the field to the PDF viewer that opens the file. Viewers that honor this flag redraw the field; some simpler viewers may show it empty until it is edited.
- Scanned PDFs without a text layer cannot be searched or exported as text (no OCR).
- Presentation mode uses VS Code's Zen mode for full screen (webviews cannot use the browser's full screen). If you were already in Zen mode, ending the presentation leaves it.
- Remote windows (WSL, SSH, containers) have not been tested. Printing there is not expected to work: the temporary copy is written on the remote machine, while the PDF application runs on yours.
- Editing the existing text of a PDF is not supported.
Languages
PDF Tools follows VS Code's display language: English, Italian, French and German (menus, toolbars, panels, messages, commands and settings).
Screenshots show two public-domain U.S. government documents: OPM Standard Form 182 (filled with fictitious data) and NIST Cybersecurity White Paper 29, The NIST Cybersecurity Framework (CSF) 2.0.
Privacy
PDF Tools works offline. It sends no telemetry and makes no network requests; PDFs are processed locally inside VS Code.
License
MIT © Ryadel. PDF Tools bundles PDF.js (Apache License 2.0) and other components under their own licenses; see THIRD_PARTY_NOTICES.md.
Source code: github.com/Ryadel/PDF-Tools. Questions, bug reports and feature requests: ryadel.com/en/contacts.
| |