Reputation: 169
I'm trying to get a PDF stream return that comes from a API and parse it to base64 to embbed it in the client side, the body of the API request is returning something like this:
%PDF-1.5
%����
4 0 obj
<<
/Type/XObjcect
/Subtype/Image
/Width 799
/Height 70
/ColorSpace/DeviceGray
/BitsPerComponent 8
/Filter/FlateDecode
/Length 5181
>>
stream
x���=H#�������A�&�)���B���4iba�&O8H
.
.
.
(The rest was omitted)
I'm trying to parse to base64 this way:
console.log(typeof body); // STRING
const encoded = new Buffer.from(body).toString('base64'); //PDF NOT WORKING
But when I'm getting this base64 and embedding it on the html it says that the file can't be oppened, the same thing happens when I trying to save it as .PDF file.
When I try to parse to base64 the same pdf but this time from a downloaded pdf, the base64 code when embedded in the html works fine.
fs.readFile('/home/user/downloaded.pdf', function (err, data) {
if (err) throw err;
console.log(typeof data); //OBJECT
const pdf = data.toString('base64'); //PDF WORKS
});
I'm using const request = require('request');
to make the requests.
Upvotes: 12
Views: 29484
Reputation: 41
I've found solution on this article. You need add to your request some config.
axios.get({
url: "https...",
responseType: "arraybuffer",
responseEncoding: "binary",
headers: {
"Content-Type": "application/pdf"
}
});
Upvotes: 4
Reputation: 190
const pdf2base64 = require('pdf-to-base64');
pdf2base64("test/sample.pdf")
.then(
(response) => {
console.log(response); }
)
.catch(
(error) => {
console.log(error);
}
)
Upvotes: 1
Reputation: 1246
When you make your request you should set option encoding to null for getting Buffer
instead of String
.
request({
method: 'GET',
encoding: null,
uri: 'http://youdomain.com/binary.data'
}, (err, resp, data)=>{
console.log(typeof data) //should be an Object
console.log(data.toString('base64'))
})
Upvotes: 11