How to convert vector files in Node.js (SVG, PDF, DXF, EPS and more...)
Tags: node, convert, vector, api
Published: 2021-03-31 20:35:20

> This is a guest post by [Ibsitam Arif](https://github.com/ibtisamarif831). Check him out!

Everyone who has worked with vectors knows how often you get need to convert it into different formats. While there are a lot of tools available for the task, [Vector Express](https://vector.express/) stands out due to its powerful REST API that can handle a huge range of vector formats. The API comes with free and paid plans with extremely affordable rates being capable of converting, analyzing, and processing the vectors. In this article, we will be using the API with Node.js, so let’s get started!

## Setting up the project

First of all, you have to make sure that Node.js is installed in your environment. With this, we initialize the project by using the following command.

`npm init`

We will be using Express.js as our backend and other dependencies for making the API work. 

`npm i express cors form-data multer axios`

After these dependencies have been installed, its time to create server.js and other folders in the same directory. In the end, our folder structure will look as follows.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b4qr84moljdxpjroooqo.png)
 
The output will be storing our converted result and the uploads folder will have all the images given to our Express server as an input.

## Implementing the API

After the whole project has been set, we starting and running our server. Enter the following code in server.js.

```javascript
const express = require('express')
const app = express()
const port = 3000
app.get("/", (req,res) => {
  res.send("Hello World")
})

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})
```

This will set up a basic server with a single route. Use the following command in the terminal to start our server.

`node server.js`

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vjtzqqmii2ic2ozdra1n.png) 

Let us import all the other packages and implement a new route for converting a PDF file to SVG using the Vector Express API.
Our server.js file will look something like this.

```javascript
const express = require('express')
const app = express()
const port = 3000

var cors = require('cors')
var axios = require('axios');
const multer = require('multer');
var fs = require('fs');
const FormData = require('form-data');
const upload = multer({ dest: "uploads/" })

app.use(cors())
app.get("/", (req, res) => {
  res.send("Hello World")
})
app.post('/convert', upload.single("file"), async(req, res) => {
  var form = new FormData()
  form.append("file", fs.createReadStream(req.file.destination + req.file.filename));
  try {
    var image= await axios.post('https://vector.express/api/v2/public/convert/pdf/pdf2svg/svg',
      form,
      { headers: { 'content-type': 'multipart/form-data' } }
    )
    var result = await axios.get(
      image.data.resultUrl,
      { responseType: "stream" }
    )
    result.data.pipe(fs.createWriteStream("./output/my.svg"))
    res.send("Done")
  } catch (error) {
    res.send(error)
  }
})
app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})
```

**Multer** It is used for handling the multipart/form-data.
**Axios** For sending requests to our API.
**Form-data** It is required to create readable streams for our API.

In this code, we are handling the multipart data and creating a readable stream to make a POST request to our API. The Vector Express takes a PDF file as an input and outputs the URL of the converted SVG. So, in order to save the converted SVG, make a GET request to the resultURL and create a writable stream to store it on our server. Let us open Postman and send a POST request to our route.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yiwm25ff8dt5rxv1e42w.png) 

Status code 200 means our code has successfully run! The converted svg will be in the output folder as follows.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ily0kdccb10rzrzw6lyw.png) 

We can also get the all available paths for converting our file. Let us create another route and use the following endpoint for making a GET request.

`https://vector.express/api/v2/public/convert/pdf/auto/svg/`

Add the following lines in our server.js:

```javascript
app.get("/paths", async (req, res) => {
  var paths = await axios.get("https://vector.express/api/v2/public/convert/pdf/auto/svg/")
  res.send(paths.data.alternatives)
})
```

Now, lets headover to Postman and make a GET request to our newly created route.

Voilá, we get the all different paths that can convert our PDF to SVG!

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8wtq4d62vcpf21qzed8g.png) 

## Conclusion

Vector Express is a power API supporting a wide range of vector files. The API is easy to use and if you are planning to use it with Node.js, this guide has walked you through the required path. 

There is also an NPM library available to make it even easier!
https://www.npmjs.com/package/@vector-express/vectorexpress-nodejs