Распечатать PDF в ionic 3

Я использую PDFMake для создания PDF-файла с моим предопределенным определением документа. В моем старом проекте ionic 1 я передаю закодированную строку функции печати, которая отлично работает. вот код для старого ionic 1

var dd = $scope.createDocumentDefinition();
            $timeout(function () {
                var pdf = pdfMake.createPdf(dd);
                pdf.getBase64(function (encodedString) {
                    console.info(encodedString);
                    $ionicLoading.hide();
                    window.plugins.PrintPDF.print({
                        data: encodedString,
                        type: 'Data',
                        title: 'Print Document',
                        success: function () {
                            console.info('success');
                        },
                        error: function (data) {
                            data = JSON.parse(data);
                            console.info('failed: ' + data.error);
                        }
                    });
                });
            }, 1000);

Теперь я обновляю свой проект до Ionic 3, поэтому я попробовал то же самое, но результат другой, вот мой новый код ionic 3. принтер открыт, но вместо того, чтобы печатать в соответствии с моим определением документа, он просто печатает закодированную строку.

let printer_ = this.printer;
    var dd = this.createDocumentDefinition();
    var pdf = pdfMake.createPdf(dd);
    pdf.getBase64(function (_encodedString) {
      let options: PrintOptions = {
        name: 'MyDocument'
      };
      console.info(JSON.stringify(pdf));
      printer_.print(_encodedString, options).then((msg)=>{
        console.info("Success",msg);
      },(error)  => {
        console.info("Error", error);
      });
  });

Есть идеи, как использовать это в ionic 3 ??

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
0
5 411
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать pdfmake для создания PDF с помощью ionic.

Сначала вам нужно установить плагин для файлов и открывателей файлов.

ionic cordova plugin add cordova-plugin-file-opener2
ionic cordova plugin add cordova-plugin-file

После этого установите пакет файлов NPM, FileOpener и PDF сделайте

npm install pdfmake 
npm install @ionic-native/file-opener 
npm install @ionic-native/file

Откройте свой src / app.module.ts и включите файл и ссылку на fileoperner:

import { File } from '@ionic-native/file';
import { FileOpener } from '@ionic-native/file-opener';

Добавить File и FileOpener в провайдер

providers: [
    StatusBar,
    SplashScreen,
    {provide: ErrorHandler, useClass: IonicErrorHandler},
    File,
    FileOpener
  ]

Я создаю пользовательский интерфейс шаблона, который выглядит так:

<ion-header>
  <ion-navbar>
    <ion-title>
      Ionic PDF
    </ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>

  <ion-item>
    <ion-label stacked>From</ion-label>
    <ion-input [(ngModel)] = "letterObj.from"></ion-input>
  </ion-item>
  <ion-item>
    <ion-label stacked>To</ion-label>
    <ion-input [(ngModel)] = "letterObj.to"></ion-input>
  </ion-item>
  <ion-item>
    <ion-label stacked>Text</ion-label>
    <ion-textarea [(ngModel)] = "letterObj.text" rows = "10"></ion-textarea>
  </ion-item>

  <button ion-button full (click) = "createPdf()">Create PDF</button>
  <button ion-button full (click) = "downloadPdf()" color = "secondary" [disabled] = "!pdfObj">Download PDF</button>

</ion-content>

После этого ваш код home.component.ts будет выглядеть так:

import { Component } from '@angular/core';
import { NavController, Platform } from 'ionic-angular';

import pdfMake from 'pdfmake/build/pdfmake';
import pdfFonts from 'pdfmake/build/vfs_fonts';
pdfMake.vfs = pdfFonts.pdfMake.vfs;

import { File } from '@ionic-native/file';
import { FileOpener } from '@ionic-native/file-opener';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
  letterObj = {
    to: '',
    from: '',
    text: ''
  }

  pdfObj = null;

  constructor(public navCtrl: NavController, private plt: Platform, private file: File, private fileOpener: FileOpener) { }

  createPdf() {
    var docDefinition = {
      content: [
        { text: 'REMINDER', style: 'header' },
        { text: new Date().toTimeString(), alignment: 'right' },

        { text: 'From', style: 'subheader' },
        { text: this.letterObj.from },

        { text: 'To', style: 'subheader' },
        this.letterObj.to,

        { text: this.letterObj.text, style: 'story', margin: [0, 20, 0, 20] },

        {
          ul: [
            'Bacon',
            'Rips',
            'BBQ',
          ]
        }
      ],
      styles: {
        header: {
          fontSize: 18,
          bold: true,
        },
        subheader: {
          fontSize: 14,
          bold: true,
          margin: [0, 15, 0, 0]
        },
        story: {
          italic: true,
          alignment: 'center',
          width: '50%',
        }
      }
    }
    this.pdfObj = pdfMake.createPdf(docDefinition);
  }

  downloadPdf() {
    if (this.plt.is('cordova')) {
      this.pdfObj.getBuffer((buffer) => {
        var blob = new Blob([buffer], { type: 'application/pdf' });

        // Save the PDF to the data Directory of our App
        this.file.writeFile(this.file.dataDirectory, 'myletter.pdf', blob, { replace: true }).then(fileEntry => {
          // Open the PDf with the correct OS tools
          this.fileOpener.open(this.file.dataDirectory + 'myletter.pdf', 'application/pdf');
        })
      });
    } else {
      // On a browser simply use download!
      this.pdfObj.download();
    }
  }

}

Я знаю это ... прочтите вопрос правильно ... я хочу распечатать PDF-файл ... но плагин принтера принимает только ввод как HTML и строку, где еще вывод PDFmake Library - base64 / buffer / blob ..

Kishan Oza 20.08.2018 14:57

затем после этого вы можете использовать этот код для печати Printer.isAvailable (). then (function () {Printer.print (this.file.dataDirectory + 'myletter.pdf', options) .then (function () {alert (" печать выполнена успешно! ");}, function () {alert (" Ошибка при печати! ");});}, function () {alert ('Ошибка: печать недоступна на вашем устройстве');});

ZearaeZ 21.08.2018 10:12

Можете ли вы сделать демо-репозиторий git для того же?

Kishan Oza 27.08.2018 14:09

Кредит, если это не был ваш учебник ?: ionicacademy.com/create-pdf-files-ionic-pdfmake

mc01 31.08.2018 18:41

@ mc01 Я тоже узнал этот код по просмотру Саймона из ionic academy на YouTube ..

alaswer 18.02.2020 15:42

Другие вопросы по теме