PHP таблица + pdfMake + AngularJS

Я новичок в PHP и AngularJS.

У меня есть веб-страница, которая общается с веб-серверами с помощью PHP — AJAX. Он запрашивает базу данных и отображает результат (большую таблицу) в заполнителе html.

Я хочу напечатать содержимое этой таблицы в загружаемом PDF-файле, когда пользователь нажимает кнопку.

Я хочу использовать PDFmake, и теперь он хорошо работает для целей тестирования, но как я могу передать это содержимое моей таблицы в приложение AngularJS?
Может быть, я должен передать идентификатор таблицы в контент docDefinition? В таком случае я не знаю, как это сделать.

Примечание. Возможно, мой подход не является корректным, потому что мне приходится передавать PHP в разные задачи и использовать AngularJS для запросов к базе данных, но сейчас я хочу использовать этот подход.

Благодарю вас

-1

Решение

Я предлагаю вам использовать угловой сервис (как объяснено в документы
)

var bigTableApp = angular.module('bigTable',[])

bigTableApp.factory('BigTableSrv', ['$resource',
function($resource) {
return $resource('URL_to_php_backend', {}, {
query: {
method: 'GET',
params: {param1: 'value 1', param2: 'value 2'},
isArray: true
}
});
}
]);

Затем вы можете использовать его в контроллере для извлечения данных из серверной части и построения структуры таблицы в PDFmake. формат таблицы:

bigTableApp.controller('BigTableController', ['$scope', 'BigTableSrv',
function BigTableController($scope, BigTableSrv) {
$scope.bigTable = BigTableSrv.query();
$scope.pdfMakeTable = {
// array of column widths, expand as needed
widths: [10, *, 130],
body: []
};

$scope.printTable = function() {
pdfMakeTable.body = $scope.bigTable.map(el => {
// process each element of your "big table" to one line of the
// pdfMake table, size of return array must match that of the widths array
return [el.prop1, el.prop2, el.prop3]
});

// create the pdfMake document
let docDefinition = {
content: [ pdfMakeTable ]
}

// print your pdf
pdfMake.creatPdf(docDefinition).print()
}
}
]);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]