Ввод не является допустимой строкой Base-64, так как он содержит символ, отличный от base 64, с использованием jsPDF-autotable, jspdf и smtjs. - PullRequest
0 голосов
/ 02 августа 2020

Мы работаем над проектом (обслуживаем iOS и Android параллельно), где AngularJS и Ioni c 1.x все еще нужны быть закодированным, поскольку перекодирование в более новую версию невозможно по причинам, о которых здесь не стоит упоминать.

Теперь нам нужно сохранить динамическое c содержимое таблицы с идентификатором tableText используя jsPDF-autotable и jsPDF в PDF-файл, который может занимать более страницы.

Внутри связанного. html -файла существуют строки, подобные приведенным ниже:

<ion-nav-buttons side="secondary">
    <a ng-click="getPDF()" class="button button-icon icon ion-ios-cloud-upload"></a>  
</ion-nav-buttons>

Таким образом запускается следующий JavaScript -код, чтобы прикрепить сгенерированный PDF-файл как вложение с использованием smtp js:

$scope.getPDF = function ()
{
  var fileName = „test.pdf“;
  var emailSubject = „Title text“;
  var emailBody = „Some text“;
  var emailReceiver = „receiver@hotmail.com";
  var emailSender = „info@my.website.com“;
  var hostName =  „smtp.my.website.com“;
  var doc = new jsPDF(
  {
    orientation: 'l', 
    unit: 'mm', 
    format: [400, 210]
  });
  doc.autoTable(
    {
      html: '#tableText,
      useCss: true
    });

    var file = doc.output();
    Email.send(
      {
        Host: hostName,
        Username: emailSender,
        Password: „somePassword“,
        To: emailReceiver,
        Attachments : 
        [{
          name : fileName,
          data : file
        }], 
        From: emailSender,
        Subject: emailSubject,
        Body: emailBody
      }).then(
      message => alert(message)
    );
    //doc.save(fileName);
  }
}

К сожалению, это не работает, так как при использовании alert (message) будут выданы следующие строки:

Входные данные не являются допустимой строкой Base-64, так как содержат символ, отличный от base 64, более двух символов заполнения или символ, не являющийся пробелом среди символы-заполнители

Обратите внимание:

  • При отправке писем без вложения (комментируя раздел с помощью «Вложения:»), электронное письмо отправляется!
  • Мы старались не сохранять сначала файл PDF, так как хранилище для файла PDF отличается для Android и iOS.

В приложении вы найдете содержимое - мусора (!) - file для информации. проблема создания PDF

Какой код нужно изменить / изменить и как для того, чтобы он работал, чтобы «настоящий» PDF-файл был отправлен как вложение?

Если строки выше не делают смысл, мы были бы более чем счастливы увидеть лучший код!

1 Ответ

0 голосов
/ 05 августа 2020

Решение было довольно простым (интересно, как получилось, что его не нашел лучший разработчик, чем я):

    var blob = doc.output();
    var dataUri = "data:" + contentType + ";base64," + btoa(blob);

    Email.send(
    {
        Host: hostName,
        Username: emailSender,
        Password: "somePassword",
        To: emailReceiver,
        Attachments : 
        [{
        name : fileName,
        data : dataUri
        }], 
        From: emailSender,
        Subject: emailSubject,
        Body: emailBody
    }).then(message => alert(message)
    );
    //doc.save(fileName);
    }
...