Задать вопрос
  • Как поставить картинку под текст?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Типа такого?
    683c69607d63c316950911.png
    Код
    <?php
    require 'vendor/autoload.php';
    use PhpOffice\PhpWord\PhpWord;
    
    $phpWord = new PhpWord();
    $section = $phpWord->addSection();
    
    // 1. Сначала добавляем изображение как фон (первый слой)
    $section->addImage(
        __DIR__ . '/img/test.png',
        [
            'width' => 100, // Ширина изображения
            'height' => 100, // Высота изображения
            'wrappingStyle' => 'behind', // Ключевой параметр: изображение становится фоном
            'positioning' => 'relative', // Относительное позиционирование
            'posHorizontal' => \PhpOffice\PhpWord\Style\Image::POSITION_HORIZONTAL_CENTER,
            'posVertical' => \PhpOffice\PhpWord\Style\Image::POSITION_VERTICAL_TOP,
        ]
    );
    
    // 2. Затем добавляем текст (второй слой)
    $section->addText(
        'Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam error doloribus doloremque voluptate natus, numquam laudantium ducimus cupiditate, cumque nulla fugit consectetur ipsam nobis illum enim. Rerum, nulla. Laborum, tempora?',
        [
            'name' => 'Arial',
        ],
        [
            //'alignment' => 'center', // Выравнивание текста по центру
            'spaceAfter' => 0,
        ]
    );
    
    $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
    $objWriter->save('layered.docx');
    echo "Текст наложен на изображение.";
    Ответ написан
    1 комментарий
  • Взаимодействие с базой данных при сборке файла exe?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    izma, не нужны танцы с бубнами...

    Сделал тестовую программку на Tk и sqlite3. Всё, ожидаемо, собирается.
    1. До БД должен быть абсолютный путь, используем:
    def get_db_path():
        if getattr(sys, 'frozen', False):
            # Если запущен из .exe, использовать путь рядом с исполняемым файлом
            return os.path.join(os.path.dirname(sys.executable), 'database.db')
        else:
            # При обычном запуске — рядом с .py файлом
            return os.path.join(os.path.dirname(__file__), 'database.db')

    2. Собираем: pyinstaller --onefile --windowed app.py
    3. Кладём базу рядом с exe-ником.

    З.Ы. Если база нужна только в режиме чтения можно её тоже интегрировать в exe.
    pyinstaller --onefile --add-data "database.db;." --windowed app.py
    Ответ написан
    2 комментария
  • Сборка python файла с расширением pyw в exe файл??

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Перенести сборку в папку с не таким длинным названием: D:\Yandex....(+100500 символов).
    Не использовать папку/файл с таким длинным названием.
    Ответ написан
    5 комментариев
  • Ошибка при работе Python + 1C?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    obj = rs.Справочники.Номенклатура.НайтипоКоду('0001')

    У вас метод неправильно написан: НайтиПоКоду().
    Ответ написан
    Комментировать
  • Как убрать украинский флаг leaflet с карт Openstreetmap?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    В leaflet.css в .leaflet-attribution-flag добавить display: none !important;.
    683783763cecc419277630.png
    Ответ написан
    Комментировать
  • Найти и декодировать base64 в тексте, как реализовать?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    В notepad++ есть плагин Mime Tools он умеет в Base64 decode. Регуляркой находите, плагином декодируете.
    Ответ написан
    Комментировать
  • Не работает машинка на радиоуправлении, что не так?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Явным образом устанавливаем состояние моторов в void setup():
    // Остановка моторов при запуске
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
      analogWrite(ENA, 0);
      analogWrite(ENB, 0);


    и если нет сигнала - останавливаем моторы в loop():
    void loop() {
      if (radio.available()) {
        int joystickData[2] = {0}; 
        radio.read(&joystickData, sizeof(joystickData));
        controlMotors(joystickData[0], joystickData[1]);
      } else {
        controlMotors(512, 512);  // Нейтральное положение джойстика
      }
    }
    Ответ написан
    Комментировать
  • Как заставить скрипт tampermonkey работать?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    // ==UserScript==
    // @name         New Userscript
    // @namespace    http://tampermonkey.net/
    // @version      2025-05-24
    // @description  try to take over the world!
    // @author       You
    // @match        https://store.steampowered.com/news/app/550
    // @icon         https://www.google.com/s2/favicons?sz=64&domain=steampowered.com
    // @grant        none
    // ==/UserScript==
    
    (function() {
        'use strict';
        function redOctober() {
            var textElements1 = document.querySelectorAll("#responsive_page_template_content > div.page_content_ctn > div > div > div > div > div > div > div > div > div > span");
            textElements1.forEach(function(element) {
                element.style.color = 'red';
            });
        }
        const observer = new MutationObserver(redOctober);
        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
    })();

    68321e92b64a6910039614.png
    Ответ написан
    Комментировать
  • Почему Powershell автоматически меняет кодировку кода в UTF-16 LE?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Ваш исходник: ReplaceHexBytesAll.ps1 содержит BOM, что мешает PowerShell выполнить скрипт.

    iex "ргуается" на комментарии в коде...

    Это на самом деле про BOM, а не комментарий.
    1. Вам следует удалить BOM: в Notepad++ пересохранить без BOM или в IDE:
    6824822b73416273864509.png
    2. Если хочется однострочник с передачей аргументов, как у вас в начале было:
    iex "& { $(irm 'https://raw.githubusercontent.com/Drovosek01/ReplaceHexPatcher/refs/heads/main/core/v2/ReplaceHexBytesAll.ps1') } -filePath 'C:\Users\dim5x\lol\lol.exe' -patterns '4883EC28BA2F????00??8D0DB0B7380A/11111111111111111111111111111111','C4 25 2A 0A 48 89 45 18 48 8D 55 18 48 8D 4D ?? / 1111 111111 111111 1111111111111111' -makeBackup -showMoreInfo -skipStopwatch -showFoundOffsetsInDecimal"

    682484db5fc42085278250.png

    З.Ы. Насколько целесообразно не сохранять скрипт, а выполнять его в памяти, если подразумевается его более чем однократное использование, — вопрос открытый.
    Ответ написан
  • Как через subprocess выполнять скрипты с пробелами в путях?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    subprocess.Popen(
        f'cmd /k ""{path_app}" "{path_file}""',
        creationflags=subprocess.CREATE_NEW_CONSOLE
    )

    68234e308f567451893958.png
    Ответ написан
    1 комментарий
  • Как автоматически заполнять форму на сайте?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    lukepker,
    1. Поставить Tampermonkey для вашего браузера.
    2. В Tampermonkey => Cоздать новый скрипт => Вставить скрипт => Сохранить.
    3. Перезагрузить https://chgk.tvigra.ru/sendquestion/ .

    При заходе на сайт автоматом будут проставляться стандартные поля.

    Прочесть перед вставкой и поменять значения полей на свои:
    Скрипт.
    // ==UserScript==
    // @name         Автозаполнение формы на chgk.tvigra.ru
    // @namespace    http://tampermonkey.net/
    // @version      2025-05-05
    // @description  Автозаполнение формы на chgk.tvigra.ru/sendquestion
    // @author       dim5x
    // @match        https://chgk.tvigra.ru/sendquestion/
    // @icon         https://www.google.com/s2/favicons?sz=64&domain=tvigra.ru
    // @connect      i.pinimg.com
    // @grant        GM_xmlhttpRequest
    // ==/UserScript==
    
    (function() {
        'use strict';
        console.log('[DEBUG] Скрипт запущен!');
        // ФИО и дата рождения.
        const surname = document.querySelector('#surname');
        surname.value = 'Иванов';
        const name = document.querySelector('#name');
        name.value = 'Иван';
        const second_name = document.querySelector('#second_name');
        second_name.value = 'Иванович';
        const birth_date = document.querySelector('#birth_date');
        birth_date.value = '01.12.1980';
    
        // Загружаем фото.
        setTimeout(async () => {
            const fileInput = document.querySelector('input.upl[name="upl"]');
            if (!fileInput) return;
    
            // URL файла в интернете (пример - маленькое изображение).
            // Поставить в @connect в шапке тот домен, где будет лежать ваше фото. Для примера это i.pinimg.com .
            const fileUrl = 'https://i.pinimg.com/736x/57/11/9c/57119ce30030b98dcefab1662598f390.jpg';
            const fileName = 'image.jpg';
            const fileType = 'image/jpg';
    
            try {
                // Загружаем файл
                const response = await new Promise((resolve, reject) => {
                    GM_xmlhttpRequest({
                        method: 'GET',
                        url: fileUrl,
                        responseType: 'blob',
                        onload: resolve,
                        onerror: reject
                    });
                });
    
                // Создаем File объект
                const file = new File([response.response], fileName, { type: fileType });
    
                // Эмулируем загрузку
                const dt = new DataTransfer();
                dt.items.add(file);
                fileInput.files = dt.files;
    
                // Триггерим событие
                fileInput.dispatchEvent(new Event('change', { bubbles: true }));
            } catch (e) {
                console.error('Ошибка загрузки файла:', e);
            }
        }, 1000);
    
        // Место работы, должность, номер, мыло...
        const work_place = document.querySelector('#work_place');
        work_place.value = 'habr';
        const employment = document.querySelector('#employment');
        employment.value = 'TC';
        const home_address = document.querySelector('#home_address');
        home_address.value = 'Москва';
        const phone_number = document.querySelector('#phone_number');
        phone_number.value = '+79992223311';
        const email = document.querySelector('#email');
        email.value = 'email@email.email';
    
        // Галочка.
        const ruleLabel = document.querySelector('label.check_label')
        ruleLabel.click();
    })();
    Ответ написан
    Комментировать
  • Как добавить в дату, записанную в строке, нули перед месяцем и днём?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    d = '2025-2-1'
    l = d.split('-')
    for i, el in enumerate(l):
        if len(el) < 2:
            l[i] = '0' + el
    
    print('-'.join(l))
    Ответ написан
    1 комментарий
  • Как оставить в ячейке гугл таблиц только левую часть до определенного символа?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    =REGEXREPLACE(B1; "#.*"; "")
    6816dc3a05698842704085.png

    З.Ы. с REGEXEXTRACT:
    =REGEXEXTRACT(B1; "([^#]*)")
    Ответ написан
    2 комментария
  • Почему PHP считает int числа после математических операций как float?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Поскольку 55 / 100 возвращает float, результат тоже будет float.

    Если нужно целое число, можно использовать intval()
    Ответ написан
  • Почему постоянно вылезают ошибки KeyError и ValueError Pyrogram?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    А может ещё потому что:

    ...or i.cha==> R <==.type == 'supergroup'...

    Но какой смысл гадать, код не воспроизводим.
    Ответ написан
  • При запуске кода не отображается игра Pygame. Как исправить?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Должно быть внутри цикла:
    x1 += x1_change 
    y1 += y1_change
    dis.fill(white)
    
    pygame.draw.rect(dis, black, [x1, y1, 10, 10])
    pygame.display.update()
    clock.tick(30)

    Код:
    while not game_over:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_over = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    x1_change = -10
                    y1_change = 0
                elif event.key == pygame.K_RIGHT:
                    x1_change = 10
                    y1_change = 0
                elif event.key == pygame.K_UP:
                    y1_change = -10
                    x1_change = 0
                elif event.key == pygame.K_DOWN:
                    y1_change = 10
                    x1_change = 0
    
        x1 += x1_change
        y1 += y1_change
        dis.fill(white)
    
        pygame.draw.rect(dis, black, [x1, y1, 10, 10])
        pygame.display.update()
        clock.tick(30)

    6812e9630a070616747689.png
    Ответ написан
    1 комментарий
  • Почему возникает ошибка в моем коде (баг f-строк)?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Используйте версию питона >=3.12.
    До Python 3.12 обратные косые черты не допускались внутри поля замены f-строки. f-strings

    Или, если это невозможно, то так:
    things = ['Thing one','Thing two','Thing three']
    nl = '\n'
    print(f"I have a list of things:\n{nl.join(things)}")
    Ответ написан
    Комментировать
  • Можно ли сменить тему в редакторе Notepad++, чтобы он стал максимально похож на Akelpad?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    У вас разница между скриншотами в наличии Панели инструментов, которая прекрасно отключается в настройках.

    Или нажмите F11 и будут перед вами только вкладки и текст - с интерфейсом Notepad++ вообще не будете пересекаться.
    Ответ написан
    Комментировать
  • Как правильно в bash задать регулярное выражение по sed?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    sed -En 's/.*<span. *class=\"post-b\">Исполнитель<\/span>: *([^<]*)<br.*/\1/p'
    Ответ написан
    4 комментария
  • Как обойти блокировку 403?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Если владелец - включить, как вариант, Directory Browsing from IIS.
    Если пользователь - сообщить владельцу о проблеме.
    Ответ написан
    Комментировать