#javascript #node.js #api #pdf
Вопрос:
Я делаю это через Api RingCentral и получаю ответ ниже через запрос узла. Я пытаюсь понять, как я могу сохранить ответ (который должен быть источником PDF), чтобы затем открыть его.
Это и есть ответ.
Response {
size: 0,
timeout: 0,
[Symbol(Body internals)]: {
body: PassThrough {
_readableState: [ReadableState],
readable: true,
_events: [Object: null prototype],
_eventsCount: 5,
_maxListeners: undefined,
_writableState: [WritableState],
writable: true,
allowHalfOpen: true,
_transformState: [Object],
[Symbol(kCapture)]: false
},
disturbed: false,
error: null
},
[Symbol(Response internals)]: {
url: 'https://platform.ringcentral.com/restapi/v1.0/account/~/extension/1234/message-store/1234/content/1234?contentDisposition=Inline',
status: 200,
statusText: 'OK',
headers: Headers { [Symbol(map)]: [Object: null prototype] },
counter: 0
}
}
Это и есть код:
let getMessageContent = await platform.get('/restapi/v1.0/account/~/extension/' accountId '/message-store/' attachId '/content/' attachId, {
contentDisposition: ['Inline']
})
let jsonMessageContent = await getMessageContent.headers
console.log(jsonMessageContent)
Если я запущу URL-адрес в post man, я смогу увидеть PDF-файл, отображаемый таким образом.
В «Почтальоне» (это всего лишь пример)
%PDF-1.3
%����
1 0 obj
<<
/Pages 2 0 R
/Type /Catalog
>>
endobj
2 0 obj
<<
/Kids [3 0 R]
/Count 1
/Type /Pages
>>
endobj
3 0 obj
<<
/CropBox [0 0 609.882 818.449]
/Parent 2 0 R
/Thumb 4 0 R
/MediaBox [0 0 609.882 818.449]
/Resources
<<
/XObject
Есть Какие-Нибудь Идеи?
Ответ №1:
Когда в прошлом мне нужно было создать конечную точку, которая брала определенную информацию (часть ее из одного и того же запроса), создавала с ней PDF-файл и подавала его в качестве ответа, я обнаружил, что PDFKit является сильным союзником. Основная причина этого проста: его документации более чем достаточно для выполнения работы. Единственная проблема в том, что заставить ту же самую работу выглядеть немного нормально довольно утомительно. Чтобы создать ваш PDF-файл, я бы предложил нечто pdfCreatorMethod()
подобное этому:
const PDFDocument = require("pdfkit");
const fs = require("fs");
const doc = new PDFDocument({ autoFirstPage: false });
doc.pipe(fs.createWriteStream('PATH/TO/YOUR/PDF'));
doc.registerFont("Helvetica", "client/assets/fonts/Helvetica-01.ttf");
doc.registerFont(
"HelveticaBold",
"client/assets/fonts/Helvetica-Bold-02.ttf"
);
doc.font("Helvetica").fontSize(10).fillColor("#80B3BD").text("", 70, 80, {
width: 100,
align: "left",
lineBreak: true,
});
/**
* ADD WHATEVER YOU WANT TO YOUR FILE
*/
doc.end();
Позволяет вам включать в документ любую информацию, которую вы пожелаете. После этого вам понадобится только ваш маршрут, чтобы указать путь к созданному вами файлу:
router.put("/mypdf", async (req, res) => {
try {
pdfCreatorMethod(req);
res.set("Content-Type", "application/pdf");
return res.status(201).sendFile('PATH/TO/YOUR/PDF');
} catch (e) {
console.error(e);
return res.status(500).send({ error: e.message });
}
});