Задать вопрос
  • Как правильно конвертировать .pdf -> .png -> .pdf?

    @glu-dimaz Автор вопроса
    def pdf_to_png(pdf_path, poppler_path, dpi=300):
        images = convert_from_path(pdf_path, dpi=dpi, poppler_path=poppler_path)
        image_paths = []
        
        for i, image in enumerate(images):
            image_path = f"page_{i+1}.png"
            image.save(image_path, "PNG")
            image_paths.append(image_path)
        
        return image_paths
    
    def png_to_pdf(image_paths, output_pdf, dpi=300):
        pdf = None
        
        for image_path in image_paths:
            image = Image.open(image_path)
            width, height = image.size
            width_pt = width * 72 / dpi  
            height_pt = height * 72 / dpi
            
            if pdf is None:
                pdf = FPDF(unit="pt", format=[width_pt, height_pt])
            pdf.add_page()
            pdf.image(image_path, 0, 0, width_pt, height_pt)
        
        pdf.output(output_pdf, "F")
    
    def convert_pdf_to_pdf(pdf_path, output_pdf, poppler_path, dpi=300):
        image_paths = pdf_to_png(pdf_path, poppler_path, dpi)
        png_to_pdf(image_paths, output_pdf, dpi)
    
    pdf_path = "form.pdf"  # Path to the input PDF
    output_pdf = "output.pdf"  # Path to the final PDF
    poppler_path = r"C:\\poppler-24.08.0\\Library\\bin" 
    
    convert_pdf_to_pdf(pdf_path, output_pdf, poppler_path)
    print("Conversion complete!")
    Ответ написан
    Комментировать
  • Сканирование QR в поле input. Как реализовать блокировку нажатия клавиш клавиатуры?

    @glu-dimaz Автор вопроса
    let lastInputTime = 0;
    		let isScannerInput = false;
    		$('input[name=search_content]').on('keydown', function(event) {
    			clearTimeout(inputTimer);
    			let now = Date.now();
    			if (now - lastInputTime < 50) { // Если разница между нажатиями маленькая, считаем, что это сканер
    				isScannerInput = true;
    			} else {
    				isScannerInput = false;
    			}
    			lastInputTime = now;
    			if (isScannerInput) {
    				event.preventDefault();
    				event.stopPropagation();
    			}
        		inputTimer = setTimeout(function(field) {
    				var v = $('input[name="search_content"]').val();
    				var res = /\/+/g.test(v);
    				if(res){
    					searchQr($('input[name="search_content"]').val());
    					$('input[name="search_content"]').val('');
    				} else {
    					if(event.keyCode == 13) {
    						show_stage(1);		
    					}
    				}
    			}, 500);
    		});
    Ответ написан
  • Как исправить ошибку при выполнении кода с Tesseract-OCR (не видит русский язык)?

    @glu-dimaz
    C:\\Program Files\\Tesseract-OCR/rus.traineddata
    Указано в ошибке, а у вас в проводнике:
    C:\\Program Files\\Tesseract-OCR/tessdata/rus.traineddata

    Лучше ипользовать EasyOCR, куда более эффективен при машинном зрении, но требует значительной обработки изображения перед чтением и не любит шумы. Писал ПО для чтения вин-номеров авто с японских сертификатов на экспорт. Сначала пользовался Tesseract, потом перешел на EasyOCR:
    Вот последние результаты чтения:
    [03.02.2025 / 16:31:55] Task " is completed. Result: 31/35. User is: 1369
    [03.02.2025 / 14:14:47] Task " is completed. Result: 14/17. User is: 1322
    [31.01.2025 / 16:27:18] Task " is completed. Result: 22/25. User is: 1322
    [31.01.2025 / 16:01:32] Task " is completed. Result: 9/9. User is: 1369
    [30.01.2025 / 15:52:53] Task " is completed. Result: 45/58. User is: 1369
    [29.01.2025 / 15:12:49] Task " is completed. Result: 40/44. User is: 1369

    70%+ точного определения текста с изображений
    Ответ написан
    Комментировать
  • Как проработать ключи в массиве php?

    @glu-dimaz Автор вопроса
    $largest = [];
    
                foreach ($this->keywords[$a] as $key => $arr) {
    
                    for ($c = 0; $c < count($this->keywords[$a]); $c++) {
            
                        $k = array_search($arr[0], $this->keywords[$a][$c]);
    
                        if ($k !== false && $c != $key) {
    
                            if (count($this->keywords[$a][$c]) > count($largest)) {
    
                                $largest = $this->keywords[$a][$c];
    
                            }
    
                        }
                    
                    }
    
                }
    
                foreach ($this->keywords[$a] as $key => $arr) {
    
                    foreach($largest as $add_word){
    
                        if(!in_array($add_word, $arr)){
    
                            $this->keywords[$a][$key][] = '-'.$add_word;
    
                        }
    
                    }
    
                }
    Ответ написан
    Комментировать
  • Почему проблема появляется, после установки видеодрайвера, зависает намертво и уходит в ребут?

    @glu-dimaz
    попробуй перед установкой драйвера установить все обновления на ОС до последних. Потом накатить только драйвер. И вообще, лучше юзать оф дрова, а не с загрузчиков
    Ответ написан
    Комментировать
  • Как в PHP создать свою глобальную функцию?

    @glu-dimaz
    лезть в ядро php - и добавлять там новую функцию. Ток какой смысл? Создать 1 файл include , в котором собрать все необходимые include или require. И в случае неоходимости - просто вместо 10-20 файлов, прикреплять 1, в котором уже есть все необходимые 10-20 инклудов.

    можно выбрать одку папку, и заинклудить все от туда с пасширением .php через функцию glob()

    на дворе 2025 год - время фреймфорков
    Ответ написан
    Комментировать
  • Как создать фоновую задачу в боте?

    @glu-dimaz
    Попробуй flask, прост в интеграции и не надо ничего выдумывать. задал адрес запроса для бота - с сайта или откуда угодно делаешь запрос к нему, и он выполняет команду, которая заложена по адресу

    from flask import Flask, request, jsonify
    app = Flask(__name__)
    
    @app.route('/free/link')
    def free_forLink():
    #обработка запроса при обращении по адресу бота /free/link
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000)


    так же в get запросах - можно передавть любые параметры
    Ответ написан
    Комментировать
  • Какова ответственность самозанятого при якобы фактически трудовых отношениях?

    @glu-dimaz
    Соглашаюсь с предидущем ответом. В законодательстве нет официального статуса "Самозанятый". Если вы поставлены на налоговый учет как самозанятый, то единтсвенное к чему вас обязывают, это уплата НПД.
    Ответ написан
    Комментировать
  • Как правильно создать и разделить разные функции под одним хендлером?

    @glu-dimaz
    def blablabla(message):
        #Код обработки функции blablabla
    
    def blablabla2(message):
        #Код обработки функции blablabla2
    
    if message.text = "О нас":
        message = 'qq World'
        blablabla(message)
    
    else:
        message = 'qq World2'
        blablabla2(message)

    можно заморочится с классами, и если это blablabla2 и blablabla - выполняют одну и туже роль, можно их объединить в 1 функцию
    Ответ написан
    Комментировать
  • Как получить QR код для СБП?

    @glu-dimaz Автор вопроса
    Все было проще. У банка можно было в запросе указать параметры высоты и ширины. Если оно заполнено - они ответом возвращают base64 qr-кода
    Ответ написан
    Комментировать
  • Как передать ip в js в Вебасист?

    @glu-dimaz
    Что вы хотите таким образом сделать? и для чего? Если вы хотите просто передать IP адресс клиента в переменную JS, то для этого все просто:
    <script>
        var yaParams = 'ip: <? echo $_SERVER['REMOTE_ADDR']; ?>';
        console.log(yaParams);
    </script>

    6703c057275d2419798708.png
    Ответ написан
  • Как сделать overflow-y для одной части блока, чтобы другая оставалась статичной?

    @glu-dimaz
    <html>
    <head> 
    <style>
    body{
    overflow:hidden;
    height:100vh;
    }
    .overflow{
    min-height:100vh;
    overflow-y:auto;
    }
    </style>
    </head>
    
    <body>
    <div class=“overflow”>
    Content 
    <div>
    </body>
    </html>


    К примеру , задаем для body фиксированную высоту, которая равна высоте экрана. Внутри него создаем блок со свойством: overflow-y:auto , что позволяет скролить, в случае если контент больше высоты экрана. Таким образом - сама страница остается статичной и неподвижной, а скроллинг происходит только контента внутри блока div.

    <html>
    <head> 
    <style>
    body{
    display:grid;
    overflow:hidden;
    height:100vh;
    grid-template-columns:200px auto;
    }
    .no-overflow{
    
    }
    .overflow{
    min-height:100vh;
    overflow-y:auto;
    }
    </style>
    </head>
    
    <body>
    <div class=“no-scroll”>
    Leftblock 
    </div>
    <div class=“overflow”>
    Content 
    <div>
    </body>
    </html>


    Во втором примере, предварительно сделал сетку на стринце - первый блок (no-overflow) - останется статичным, относительно всей страницы во время скрола
    Ответ написан
    Комментировать