Здравствуйте.
И всех с Новым Годом!
Возможно я не совсем правильно сформулировал вопрос... попробую подробнее рассказать.
Сделал небольшой калькулятор.
В одном из блоков выводится информация по материалам, их стоимости и количестве.
Элементы выводятся по сути списком. Количество элементов разное и у них могут отличаться наименования используемых материалов.
В общем список эток динамический.
Выглядит он в конечном счете вот так
<ul class="materials_data_ul">
<li class="materials_li materials_header_li">
<span class="material_label">Наименование</span>
<span class="material_amount">Количество</span>
<span class="material_summ">Стоимость</span>
</li>
<li class="materials_li">
<span class="material_label">Клей-пена, 600 мл</span>
<span class="material_amount">2</span>
<span class="material_summ">910</span>
</li>
<li class="materials_li">
<span class="material_label">Герметик акрилатный, ведро/15кг</span>
<span class="material_amount">1</span>
<span class="material_summ">2 275</span>
</li>
</ul>
После того как расчет сделан, мне нужно сформировать PDF файл с коммерческим предложением.
Для этого я использую pdfmaker (
http://pdfmake.org)
И собственно задача вывести данные из этого списка в таблицу.
Но ничего у меня не получается.
Я написал небольшую функцию, которая перебирает все элементы списка и добавляет информацию нужного вида в массив.
var arr = [];
$('.materials_li').each(function() {
var printName = $(this).find('.material_label').text();
var printAmount = Number($(this).find('.material_amount').text().replace(/\D+/g,""));
var printSumm = Number($(this).find('.material_summ').text().replace(/\D+/g,""));
var printPrice = printSumm/printAmount;
var printTable = '"'+printName + '", "' + printAmount + '", "' + printSumm.toFixed(2) + '", "' + printPrice.toFixed(2) + '"';
arr.push(printTable);
});
console.log(arr[2]);
console.log(arr[2]); выводит
"Герметик акрилатный, ведро/15кг", "1", "2275.00", "2275.00"
В pdfmaker данные в таблицу заносятся таким вот образом, по сути тоже массив
table: {
widths: ['46%', '18%', '18%', '18%'],
body: [
["Наименование", "Кол-во", "Цена", "Сумма"],
[arr[2]]
]
},
Содержимое arr[2] - соответсвует формату, который там должен быть.
Но [arr[2]] вызывает ошибку.
Хотя вывод определенного элемента массива тоже вариант так себе, потому что я не знаю заранее сколько элементов будет в массиве.
По хорошему прямо в таблице нужно цикл делать, но у меня ничего не получается...
В целом PDF файл задается таким вот кодом
var pdfDoc = {
pageSize:'A4',
pageOrientation:'portrait',//'portrait'
pageMargins:[20,10,20,10],
content: [
{
columns: [
{
fontSize: 20,
bold: true,
width: '50%',
text: 'HARDEK'
},
{
width: '50%',
fontSize: 12,
alignment: 'right',
margin: [0, 8, 0, 0],
text: '8 (3452) 93-47-22'
}
]
},
{
columns: [
{
fontSize: 10,
width: '50%',
text: 'производственная компания'
},
{
width: '50%',
fontSize: 12,
alignment: 'right',
text: 'www.hardek.ru'
}
]
},
{
text: '______________________________________________________________________________________________________',
alignment: 'center'
},
{
text: 'ИСХОДНЫЕ ДАННЫЕ',
fontSize: 12,
bold: true,
alignment: 'center',
margin: [0, 100, 0, 20]
},
{
table: {
widths: ['70%', '30%'],
body: [
['Площадь фасада, м2', square],
['Материал панелей', printMaterial],
['Толщина утеплителя, мм', printUteplitel],
['Модель термопанели', printModel],
['Материал стен', printStena]
]
},
layout: {
hLineWidth: function (i, node) {
return (i == 1 || i == 2 || i == 3 || i == 4 || i == 5) ? 1 : 0;
},
vLineWidth: function () {
return (0);
},
}
},
{
text: 'КОММЕРЧЕСКОЕ ПРЕДЛОЖЕНИЕ',
fontSize: 12,
bold: true,
alignment: 'center',
margin: [0, 100, 0, 20]
},
{
table: {
widths: ['46%', '18%', '18%', '18%'],
body: [
["Наименование", "Кол-во", "Цена", "Сумма"],
]
},
}
]
};