У меня есть приложение rails, которое использует приведенный ниже код для загрузки PDF-файла с HTML-страницы.Работает нормально, но медленно, потому что загружает страницу перед ее сохранением в PDF.
Как я могу отправить HTML прямо с моего сервера Rails, чтобы не нужно было загружать URL?Есть ли какой-нибудь способ визуализации в строку и отправки через него?Или мне нужно сделать в файл, а затем отправить его путь через?
class PagesController < ApplicationController
def pdf
tmp = Tempfile.new("tmp/pdf-chrome-puppeteer")
system("yarn createPDF #{Shellwords.escape("https://google.com")} #{Shellwords.escape(tmp.path)}")
pdf_filename = "output.pdf"
send_file(tmp.path, filename: pdf_filename, type: 'application/pdf', disposition: 'attachment')
end
end
Мой JS:
#!/usr/bin/env node
const puppeteer = require("puppeteer");
const createPdf = async() => {
const startTime = new Date().getTime();
let browser;
try {
browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});
const page = await browser.newPage();
await page.goto(process.argv[2], {timeout: 30000, waitUntil: 'networkidle2'});
await page.pdf({
path: process.argv[3],
format: 'A4',
margin: { top: 36, right: 36, bottom: 20, left: 36 },
printBackground: true
});
} catch (err) {
console.log(err.message);
} finally {
if (browser) {
browser.close();
}
process.exit();
}
};