在 NodeJs 中生成带有表单答案的 PDF 并通过电子邮件发送

Generating a PDF with form answers in NodeJs and send it by email

我正在进行一个个人项目,这是一个简单的表格,需要填写许多输入。

最后一步是确认数据,完成后,我想生成一份表格答案的 PDF 并将其发送到我之前要求的电子邮件(在表格中)。

我试过Puppeteer,它生成了表单模板的PDF,但是没有填充变量。

我想做类似“当点击回顾页面上的确认按钮时,然后用页面上的数据生成 PDF。”


(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto("http://localhost:8888/Medical%20Form/recup_donnees.php", {
    waitUntil: "networkidle2",
  });

  let button = await page.evaluate(() => {
    document.querySelector("#test");
  });

  await page.waitForSelector("button");

  await page.click("button");

  await page.pdf({ path: "bordeeeeeeeel.pdf", format: "a4" });

  await browser.close();
})();

这是我的代码,即使我知道它是绝对错误的(因为它加载了一个空页面),我也不知道如何让它工作,也许我在 Puppeteer 上走错了路我应该采取其他措施来解决问题。

抱歉这个菜鸟问题,但我实际上是菜鸟...

提前谢谢你!

因此,如果您希望其他用户填写表单,然后在 PDF 中创建他们的输入,然后在 e-mail 中发送,我肯定会认为使用编程语言和 PDF 库来处理它。看来您要发布到 .php 文件,所以如果您能够使用 PHP,那么对于这种情况,我不建议使用 puppeteer

我确信 puppeteer 有一种场景或方式会很棒,但您必须获得 puppeteer 的数据才能在表单上输入和提交。

另一种选择是 forms/data 已经提交,您可以在网站上看到它,然后您可以在网站上指示 puppeteer 用数据填写表单字段然后将页面截图并另存为.pdf.

如果您喜欢使用像 PHP 这样的 server-side 语言来处理这个问题,也许 take a look at this example 使用 PHP 中的 mPDF 库。

感谢 Treckstar,我选择了 MPDF 希望它对我想要的东西来说似乎更有效率。但是,作为一个大菜鸟,我在很多事情上都受阻了。

这是“我的逻辑”(这可能根本不合逻辑啊哈)

1.用户填写 HTML 表单

2。他提交的所有信息都收集在一个 PHP 文件中,该文件类似于“数据确认页面”,页面如下:

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Récapitulatif</title>
   <link rel="stylesheet" href="./donnees.css" />
</head>
<body>
       <div class="container">
   <form action="mypdfgenerator.php" method="post">
   <h1>Informations générales</h1>
   <ul id="infos">
       <li><span>Nom :</span> <?php echo $_POST['Nom']?></li>
       <li><span>Prénom :</span> <?php echo $_POST['Prenom']?></li>
       <li><span>Adresse :</span> <?php echo $_POST['Adresse']?></li>
       <div class="cp-ville">
       <li><span>Code Postal :</span> <?php echo $_POST['code-postal']?></li>
       <li><span>Ville :</span><?php echo $_POST['Ville']?></li>
       </div>
       <div class="telephones">
       <li><span>Téléphone domicile : </span><?php echo $_POST['Teldom']?></li>
       <li><span>Téléphone bureau : </span><?php echo $_POST['Telbur']?></li>
       <li><span>Portable : </span> <?php echo $_POST['Portable']?></li>
       </div>
       <div class="date-age-sexe">
       <li><span>Date de naissance :</span> <?php echo $_POST['date-naissance']?></li>
       <li><span>Age :</span> <?php
 $dateNaissance = $_POST['date-naissance'];
 $aujourdhui = date("Y-m-d");
 $diff = date_diff(date_create($dateNaissance), date_create($aujourdhui));
 echo $diff->format('%y').' ans';
?></li>
       <li><span>Sexe :</span> <?php echo $_POST['Sexe']?></li>
       </div>
       <li><span>Email :</span> <?php echo $_POST['Email']?></li>
       <li><span>Profession :</span> <?php echo $_POST['Profession']?></li>
       <li><span>Adressé et/ou recommandé par :</span> <?php echo $_POST['Recommandation']?></li>
   </ul>
</div>

<div class="container">
   <h1>Raison de la visite</h1>
   <ul>
       <li><span>Raison de la visite :</span> <?php echo $_POST['Raison']?></li>
       <li><span>Date approximative du dernier examen dentaire (ou soins dentaires) :</span> <?php echo $_POST['dernier-examen']?></li>
   </ul>
</div>

<div class="container">
   <h1>Questionnaire de santé</h1>
   <ul id="sante">
       <div class="reponses-QCM">
       <li class="sante-li"><span>Etes-vous en bonne santé ? :</span> <?php echo $_POST['sante']?></li>
       <li class="sante-li"><span>Troubles cardiaques :</span> <?php echo $_POST['cardiaque']?></li>
       <li class="sante-li"><span>Troubles vasculaires/sanguins :</span> <?php echo $_POST['vasculaire']?></li>
       <li class="sante-li"><span>Troubles rénaux :</span> <?php echo $_POST['renaux']?></li>
       <li class="sante-li"><span>Troubles digestifs :</span> <?php echo $_POST['digestif']?></li>
       <li class="sante-li"><span>Troubles hépatiques :</span> <?php echo $_POST['hepatique']?></li>
       <li class="sante-li"><span>Troubles nerveux/épilepsie :</span> <?php echo $_POST['epilepsie']?></li>
       <li class="sante-li"><span>Troubles pulmonaires / asthme :</span> <?php echo $_POST['asthme']?></li>
       <li class="sante-li"><span>Troubles oculaires :</span> <?php echo $_POST['oculaire']?></li>
       <li class="sante-li"><span>Diabète :</span> <?php echo $_POST['diabete']?></li>
       <li class="sante-li"><span>Rhumatisme articulaire aigu :</span> <?php echo $_POST['rhumatisme']?></li>
       <li class="sante-li"><span>Arthrose (préciser zone) :</span> <?php echo $_POST['arthrose']?></li>
       <li class="sante-li"><span>Troubles cutanés :</span> <?php echo $_POST['cutanes']?></li>
       <li class="sante-li"><span>Allergies :</span> <?php echo $_POST['allergies']?></li>
       <li class="sante-li"><span>Troubles glandulaires/hormonaux :</span> <?php echo $_POST['glandulaire']?></li>
       <li class="sante-li"><span>SIDA / HIV+ :</span> <?php echo $_POST['SIDA']?></li>
       <li class="sante-li"><span>Hépatite :</span> <?php echo $_POST['hepatite']?></li>
       <li class="sante-li"><span>Tuberculose :</span> <?php echo $_POST['tuberculose']?></li>
       <li class="sante-li"><span>Cancer :</span> <?php echo $_POST['cancer']?></li>
       <li class="sante-li"><span>Autre maladie(s) ? :</span> <?php echo $_POST['autres-maladies']?></li>
       </div>
       <div class="traitement-medical">
       <li class="sante-li"><span>Suivez-vous un traitement médical en ce moment ? :</span> <?php echo $_POST['traitement-medical']?></li>
       <li class="sante-li"><span>Si oui, pour quelle(s) raison(s) :</span> <?php echo $_POST['raisons-traitement']?></li>
       </div>
       <div class="medicaments">
       <li class="sante-li"><span>Prenez-vous des médicaments ? :</span> <?php echo $_POST['prise-medicaments']?></li>
       <li class="sante-li"><span>Si oui, lesquels :</span> <?php echo $_POST['quels-medicaments']?></li>
       </div>
   </ul>
</div>

<div class="container">
   <h1>Renseignements complémentaires</h1>
   <ul>
       <div class="cigarettes">
       <li><span>Etes-vous fumeur ? :</span> <?php echo $_POST['Fumeur']?></li>
       <li><span>Si oui (cigarettes/jour) :</span> <?php echo $_POST['cigarettes-jour']?></li>
       <li><span>Depuis (années) :</span> <?php echo $_POST['duree-fumeur']?></li>
       </div>
       <div class="radio">
       <li><span>Avez-vous été traité par radiothérapie ? :</span> <?php echo $_POST['radiotherapie']?></li>
       <li><span>Si oui, date et localisation :</span> <?php echo $_POST['date-radiotherapie']?></li>
       </div>
       <li><span>Avez-vous eu des saignements prolongés après une extraction chirurgicale ? :</span> <?php echo $_POST['saignements-chirurgicaux']?></li>
       <li><span>Etes-vous sous traitement par biphosphonates ? (ex : Aclasta® , Actonel® , Fosamax® , Fosavance® , Bonviva® ,Optruma® ,...) :</span> <?php echo $_POST['biphosphonates']?></li>
       <div class="infos-medecin">
       <li><span>Nom du médecin traitant :</span> <?php echo $_POST['medecin']?></li>
       <li><span>Adresse du médecin traitant :</span> <?php echo $_POST['adresse-medecin']?></li>
       </div>
   </ul>
</div>
<div class="validate">
<button type="submit" id="test"> Télécharger en PDF </button>
<button> <a href="./index.html"> Retourner au début </a></button>
   </form>
   </div>
</body>
</html>

4.然后我想让他点击最后的提交按钮,当它点击时,它会触发 mypdfgenerator.php 页面,它是这样的:

<?php
require __DIR__ . '/vendor/autoload.php';
$mpdf = new \Mpdf\Mpdf();

$html ='<html>
<body>
    <div>Nom '.$_POST['Nom'].'</div>
</body>
</html>';

$mpdf->WriteHTML($html);
$mpdf->Output();

我试图只获取要测试的第一个变量,但 它没有显示在 PDF 中。(DIV 元素显示得很好,如我所见静态文本)

我知道这对你们来说看起来不合逻辑或不正确,但目前,我完全坚持...

非常感谢你,我也很乐意帮助别人,当然我也会在有能力的时候帮助别人

祝你有个愉快的一天!