Puppeteerを使用してPDFファイルを生成しています。ドキュメントを読むと、PDFファイルを生成する方法が2つ見つかりました:
まず、次のようにURLを渡してメソッドgoToを呼び出します
page.goto('https://example.com');
page.pdf({format: 'A4'});
2つ目、つまり私の場合、次のようにメソッドsetContentを呼び出します。
page.setContent('<p>Hello, world!</p>');
page.pdf({format: 'A4'});
問題は、クライアントから送信される3つの異なるHTML文字列があり、3つのページを含む単一のPDFファイルを生成することです(3つのHTMLSがある場合))。
人形遣いでこれを行う方法はあるのでしょうか?他の提案を受け入れますが、クロムヘッドレスを使用する必要があります。
前もって感謝します。
これを行うには、次のようにしました。
Puppeteerで3つの異なるPDFを生成します。ファイルをローカルに保存するか、変数に保存するかを選択できます。
私が見つけたすべてのPDF MergeプラグインはURLのみを受け入れ、たとえばバッファーを受け入れないため、ファイルをローカルに保存しました。PDFをローカルで同期的に生成した後、次を使用してそれらをマージしました- PDF Easy Merge 。
コードは次のとおりです。
const page1 = '<h1>HTML from page1</h1>';
const page2 = '<h1>HTML from page2</h1>';
const page3 = '<h1>HTML from page3</h1>';
const browser = await puppeteer.launch();
const tab = await browser.newPage();
await tab.setContent(page1);
await tab.pdf({ path: './page1.pdf' });
await tab.setContent(page2);
await tab.pdf({ path: './page2.pdf' });
await tab.setContent(page3);
await tab.pdf({ path: './page3.pdf' });
await browser.close();
pdfMerge([
'./page1.pdf',
'./page2.pdf',
'./page3.pdf',
],
path.join(__dirname, `./mergedFile.pdf`), async (err) => {
if (err) return console.log(err);
console.log('Successfully merged!');
})
以下のコードの複数のURLから複数のPDFを生成することができました:
package.json
{
............
............
"dependencies": {
"puppeteer": "^1.1.1",
"easy-pdf-merge": "0.1.3"
}
..............
..............
}
index.js
const puppeteer = require('puppeteer');
const merge = require('easy-pdf-merge');
var pdfUrls = ["http://www.google.com","http://www.yahoo.com"];
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
var pdfFiles=[];
for(var i=0; i<pdfUrls.length; i++){
await page.goto(pdfUrls[i], {waitUntil: 'networkidle2'});
var pdfFileName = 'sample'+(i+1)+'.pdf';
pdfFiles.Push(pdfFileName);
await page.pdf({path: pdfFileName, format: 'A4'});
}
await browser.close();
await mergeMultiplePDF(pdfFiles);
})();
const mergeMultiplePDF = (pdfFiles) => {
return new Promise((resolve, reject) => {
merge(pdfFiles,'samplefinal.pdf',function(err){
if(err){
console.log(err);
reject(err)
}
console.log('Success');
resolve()
});
});
};
RUNコマンド: node index.js