Skip to content

Getting Started ​

Installation ​

Prerequisites ​

To start using vue-pdf, you need to install the package. Run one of the following commands in your terminal:

sh
$ npm add -D @ceereals/vue-pdf
sh
$ pnpm add -D @ceereals/vue-pdf
sh
$ yarn add -D @ceereals/vue-pdf
sh
$ yarn add -D @ceereals/vue-pdf
sh
$ bun add -D @ceereals/vue-pdf

Document component ​

Here's an example of how to write a simple PDF document template using the components provided by vue-pdf:

vue
<script setup>
import { Document, Page, Text, View } from "@ceereals/vue-pdf";
import { reactive } from "vue";
const viewStyle = reactive({
  flexDirection: "row",
  justifyContent: "center",
  alignItems: "center",
  height: "100%",
});

const textStyle = reactive({
  fontSize: 24,
});
</script>
<template>
  <Document>
    <Page size="A4">
      <View :style="viewStyle">
        <Text :style="textStyle">Hello, Vue PDF!</Text>
      </View>
    </Page>
  </Document>
</template>
ts
import { Document, Page, Text, View } from "@ceereals/vue-pdf";
import { defineComponent, h, reactive } from "vue";

export default defineComponent(() => {
  const viewStyle = reactive({
    flexDirection: "row",
    justifyContent: "center",
    alignItems: "center",
    height: "100%",
  });

  const textStyle = reactive({
    fontSize: 24,
  });
  return () =>
    h(Document, [
      h(Page, { size: "A4" }, [
        h(
          View,
          {
            style: viewStyle,
          },
          [
            h(
              Text,
              {
                style: textStyle,
              },
              "Hello, Vue PDF!",
            ),
          ],
        ),
      ]),
    ]);
});
tsx
import { Document, Page, Text, View } from "@ceereals/vue-pdf";
import { defineComponent, reactive } from "vue";

export default defineComponent(() => {
  const viewStyle = reactive({
    flexDirection: "row",
    justifyContent: "center",
    alignItems: "center",
    height: "100%",
  });

  const textStyle = reactive({
    fontSize: 24,
  });
  return () => (
    <Document>
      <Page size="A4">
        <View style={viewStyle}>
          <Text style={textStyle}>Hello, Vue PDF!</Text>
        </View>
      </Page>
    </Document>
  );
});

WARNING

The Document component must be the root of your tree element structure, and under no circumstances should it be used as a child of another vue-pdf component. In addition, it should only have children of type Page. For more information, see the API Reference for Document.

Browser Usage ​

Rendering ​

We have more options to render the PDF document:

  1. Render the document in the browser using the PDFViewer component.
  2. Render the PDF document to a Blob using usePdf composable.
  3. Generate a PDF file using Node.js.

For more information about the rendering process, see the Rendering process section in the @react-pdf documentation.

Using PDFViewer component ​

To render the document in the browser with PDFViewer component do the following:

vue
<script setup>
import { PDFViewer } from "@ceereals/vue-pdf";
import HelloWorldDocument from "./HelloWorldDocument.vue";
</script>
<template>
  <PDFViewer>
    <HelloWorldDocument />
  </PDFViewer>
</template>
vue
<script setup>
import { PDFViewer } from "@ceereals/vue-pdf";
import HelloWorldDocument from "./HelloWorldDocument.vue";
</script>
<template>
  <PDFViewer :queryParams="{ toolbar: 1, view: 'fit' }">
    <HelloWorldDocument />
  </PDFViewer>
</template>

PDFViewer is a web-only component that renders the PDF document in an iframe. It is useful for client-side generated documents. You can control the toolbar visibility and other query parameters with the queryParams prop. More information at Chromium.

Using usePdf composable ​

To render the document in the browser on your own, you can use the usePdf composable:

vue
<script setup>
import { h } from "vue";
import { usePdf } from "@ceereals/vue-pdf";
import HelloWorldDocument from "./HelloWorldDocument.vue";

const { url } = usePdf(h(HelloWorldDocument, /* props */));
</script>
<template>
  <iframe :src="url"/>
</template>
vue
<script setup>
import { usePdf } from "@ceereals/vue-pdf";
import HelloWorldDocument from "./HelloWorldDocument.vue";

const { url } = usePdf(HelloWorldDocument);
</script>
<template>
  <iframe :src="url" />
</template>

Node Usage ​

Render to File ​

To generate a PDF file using Node.js, you can use the renderToFile function from the @ceereals/vue-pdf package. This function returns a Promise that resolves to a Stream.Readable object containing the PDF document when has been succesfully writte to the filesystem.

js
import { renderToFile } from "@ceereals/vue-pdf";
import HelloWorldDocument from "./HelloWorldDocument.ts";


await renderToFile(HelloWorldDocument, "hello-world.pdf");
js
import { h } from "vue";
import { renderToFile } from "@ceereals/vue-pdf";
import HelloWorldDocument from "./HelloWorldDocument.ts";


await renderToFile(h(HelloWorldDocument, /** props */), "hello-world.pdf");

Node API also includes a renderToStream and renderToBuffer, for more information see the Node API Reference.