В ходе эксплуатации принтера этикеток TSC-210 в среде 1С под Linux выявилась особенность, что он не выдерживает правильные отступы при печати, даже при установке нужных параметров бумаги. Выходом явилось сохранение печати в файл, а затем печать полученного файла при помощи просто скрипта вида:
В ходе использования облака Yandex OCR для распознавания данных, выявилось что при анализе получаемого на выходе JSON, очень не достаёт визуализации полученных данных. Для того чтобы эту ситуацию чуть улучшить, написал скриптик, который на входе получает картинку для распознавания и JSON полученный от Яндекса, а на выходе выдаёт картинку с нанесенными распознанными блоками и таблицами.
Что вы ожидаете увидеть в выводе? 115? А вот и нет. Если echo выведет 115, то var_dump выведет 114.99999
Что не так с float?
Тип float в языке PHP, как и его “родственник” тип double, вовсе не предназначен для точного представления десятичных дробей. Всё что мы записали в float, хранится в приближенном значении, с некоторой погрешностью.
Решение: в виду того что в PHP это считается фичей, а не багом, то для точной работы с математикой нужно использовать модуль bcmath. Ну или использовать округления до нужной точности
Как оказалось такая совершенно не очевидная ошибка показывается (помимо варианта что и на самом деле вы напутали с URL репозитария) и когда что-то случилось с вашим открытым SSH ключём. Соответственно достаточно сгенерировать новый:
ssh-keygen -t ed25519 -C "your_email@example.com"
А затем добавить содержимое файла ~/.ssh/id_ed25519.pub в админке GitItea в раздел «Ключи SSH»
Общая идея следующая: по клику на кнопку вызываем AJAX запрос на сервер с определенными параметрами передаваемыми в POST, затем получив в результат запроса файл — формируем в DOM на файл в формате blob, и тут-же её нажимаем. В результате браузер показывает диалоговое окно сохранения файла.
Таким необычным способом мы убиваем несколько зайцев сразу:
Получаем возможность показать ошибку, если вдруг файл на сервере сформировать не удалось. Это полезно если например файл формируется на сервере «на лету» — например файл XLSX с отчётом
Мы можем передать серверу какие-то условия для формирования файла в POST запросе
На странице мы не размещаем заранее данные в тегах <form></form>, как практикуется в подобных решениях
Пользователю достаточно нажать на кнопку один раз для получения результата.
В результате скрипт формирования файла может выглядеть примерно следующим образом:
На клиенте:
/**
* Формирование отчета
* @param {type} filename - имя файла на сервере для формирования отчета
* @param {type} ext - выходное расширение (например xlsx,csv)
* @returns {Number}
*/
function get_report(filename,ext){
$("#global").addClass("loading");
var xhr = new XMLHttpRequest();
xhr.open('POST', '?r=reports/'+filename, true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.responseType = 'blob';
xhr.onload = function(e) {
$("#global").removeClass("loading");
if (this.status == 200) {
var link=document.createElement('a');
link.href=window.URL.createObjectURL(this.response);
console.log("Расширение:"+ext);
link.download="report."+ext;
link.click();
}
else {
console.log(e);
ToastMessage("error","Произошла ошибка при формировании файла. Попробуйте позднее или обратитесь к администратору системы.");
}
};
var form_data = new Map();
form_data.period_from = period_from.value;
form_data.period_to = period_to.value;
form_data.area = area_select.value;
form_data.division_check=division_check.checked;
form_data.period_check=period_check.checked;
xhr.send(mapToQueryString(form_data));
};