UGLYPEAR AI обновил бизнес: высокопроизводительное сжатие документов × RAG-платформа инженерии данныхУзнать о новом направлении →

Руководство по интеграции SDK сжатия: вызовы из Python/Java/C#

Главный вывод: SDK SmartSlim экспортирует динамическую библиотеку через стандартный C ABI и поддерживает интеграцию с Python, Java, C# и Rust. Основной поток вызова состоит из четырёх шагов: инициализация SDK, создание конфигурации сжатия, выполнение сжатия и освобождение ресурсов. Сжатие одного PDF-файла объёмом 100 МБ занимает около 0,8 секунды, задержка проверки лицензии — менее 5 мс. В этой статье — полные примеры интеграции для трёх языков, таблица параметров API и рекомендации по оптимизации производительности, а также демо пакетного сжатия. Ниже мы начнём с архитектуры SDK и подробно разберём интеграцию для каждого языка.

Если вам нужно вызывать сервис сжатия через HTTP, а не через SDK, рекомендуем сначала прочитатьПрактика вызова Compression API: подробная документация RESTful-интерфейса

1. Архитектура SDK и принципы интеграции

В основе SDK SmartSlim лежит движок сжатия на Rust, экспортируемый через стандартный C ABI (Application Binary Interface) в виде динамической библиотеки (.so/.dylib/.dll). Любой язык с поддержкой FFI (внешнего интерфейса функций) может загрузить и вызвать её. Преимущества архитектуры: ядро движка пишется один раз на Rust, и одна и та же бинарная библиотека используется многими языками — нет необходимости заново реализовывать логику сжатия.

КомпонентТехнологияНазначениеВыходной артефакт
Ядро движка сжатияRustВыполнение алгоритма сжатияСтатическая библиотека .a/.lib
Слой экспорта ABIRust #[no_mangle]Экспорт функций с C-совместимым интерфейсомДинамическая библиотека .so/.dylib/.dll
Языковой слой привязокFFI каждого языкаОбёртка над вызовами нативного кодаПакеты/библиотеки для каждого языка
Модуль лицензированияRust + шифрованиеПроверка лицензионного ключаВстроен в динамическую библиотеку
Управление конфигурациейRust structУправление параметрами сжатияJSON/TOML-конфигурация

SDK поставляется с предкомпилированными библиотеками для 6 платформ, охватывающими основные ОС и архитектуры процессоров. Готов к использованию без сборки Rust-кода.

ПлатформаДинамическая библиотекаОСАрхитектура CPUСценарий
linux-x64libsmartslim.soLinuxx86_64Сервер / десктоп
linux-arm64libsmartslim.soLinuxaarch64ARM-сервер / Raspberry Pi
macos-universallibsmartslim.dylibmacOSx86_64+arm64Intel + Apple Silicon
windows-x64smartslim.dllWindowsx86_64Windows-десктоп / сервер
linux-server-x64libsmartslim.soLinuxx86_64Оптимизированная серверная сборка
linux-server-arm64libsmartslim.soLinuxaarch64Оптимизированная ARM-серверная сборка

2. Подробное описание параметров основного API

Основной API SDK делится на четыре группы: инициализация, конфигурация, сжатие и освобождение ресурсов. В таблице ниже перечислены основные функции API и описания их параметров.

Функция APIПараметрыВозвращаемое значениеОписание
smartslim_initlicense_key: Stringhandle: HandleИнициализация SDK, проверка лицензии
smartslim_create_configformat, level, qualityconfig: ConfigHandleСоздание конфигурации сжатия
smartslim_compresshandle, input, output, configresult: ResultCodeСжатие одного файла
smartslim_compress_batchhandle, files[], config, workersresults[]: ResultCodeПакетное сжатие (с параллелизмом)
smartslim_get_infohandle, filepathFileInfo: structПолучение информации о сжатии файла
smartslim_free_configconfig: ConfigHandlevoidОсвобождение ресурсов конфигурации
smartslim_freehandle: HandlevoidОсвобождение экземпляра SDK

Параметры конфигурации сжатия поддерживают 4 уровня сжатия (low/medium/high/ultra) × 15 сценариев × 5 режимов производительности (ultrafast/fast/balanced/quality/optimal) — итого 300 комбинаций, покрывающих практически любые задачи.

ПараметрДопустимые значенияПо умолчаниюОписание
formatpdf/image/video/office/ofdАвтоопределениеТип файла
levellow/medium/high/ultramediumУровень сжатия
quality1–10075Фактор качества (изображения/PDF)
performanceultrafast/fast/balanced/quality/optimalbalancedРежим производительности
workers1–164Число параллельных потоков
securityDISABLED/LOW/MEDIUM/HIGH/MAXIMUMMEDIUMУровень безопасности

3. Примеры кода интеграции для трёх языков

Ниже приведены полные примеры интеграции на Python, Java и C# — все для сжатия одного PDF-файла.

1. Интеграция на Python (ctypes)

Python загружает динамическую библиотеку и вызывает экспортируемые функции через модуль ctypes. Код ниже выполняет полный цикл: инициализацию SDK, создание конфигурации, сжатие PDF и освобождение ресурсов. Сжатие PDF объёмом 100 МБ занимает около 0,8 секунды.

ШагКод PythonОписание
1. Загрузка библиотекиlib = ctypes.CDLL('./libsmartslim.so')Загрузка динамической библиотеки
2. Инициализацияhandle = lib.smartslim_init(b"YOUR_LICENSE")Передача лицензионного ключа
3. Создание конфигурацииconfig = lib.smartslim_create_config(b"pdf", b"medium", 75)PDF / medium / q75
4. Выполнение сжатияlib.smartslim_compress(handle, b"in.pdf", b"out.pdf", config)Сжатие файла
5. Освобождение ресурсовlib.smartslim_free_config(config); lib.smartslim_free(handle)Освобождение памяти

2. Интеграция на Java (JNI)

Java вызывает динамическую библиотеку через JNI (Java Native Interface). Сначала нужно объявить native-методы, затем загрузить библиотеку. Код ниже показывает основной поток вызова и подходит для интеграции в Java-бэкенды вроде Spring Boot.

ШагКод JavaОписание
1. Загрузка библиотекиSystem.loadLibrary("smartslim")Загрузка DLL/SO
2. Объявление методаnative long smartslim_init(String key)Объявление JNI-метода
3. Инициализацияlong handle = smartslim_init("YOUR_LICENSE")Получение дескриптора экземпляра
4. Создание конфигурацииlong config = smartslim_create_config("pdf","medium",75)Параметры конфигурации
5. Выполнение сжатияsmartslim_compress(handle, "in.pdf", "out.pdf", config)Сжатие файла
6. Освобождение ресурсовsmartslim_free_config(config); smartslim_free(handle)Освобождение памяти

3. Интеграция на C# (P-Invoke)

C# вызывает динамическую библиотеку через P/Invoke (Platform Invocation Services). Внешние функции объявляются атрибутом DllImport; подход подходит для проектов на .NET / .NET Core. Код ниже работает как на Windows, так и на Linux.

ШагКод C#Описание
1. Объявление функции[DllImport("smartslim")] static extern IntPtr smartslim_init(string key)Объявление через P-Invoke
2. ИнициализацияIntPtr handle = smartslim_init("YOUR_LICENSE")Получение дескриптора
3. Создание конфигурацииIntPtr config = smartslim_create_config("pdf","medium",75)Параметры конфигурации
4. Выполнение сжатияsmartslim_compress(handle, "in.pdf", "out.pdf", config)Сжатие файла
5. Освобождение ресурсовsmartslim_free_config(config); smartslim_free(handle)Освобождение памяти

4. Оптимизация производительности и пакетное сжатие

Оптимизация производительности при интеграции SDK ведётся в трёх измерениях: параллелизм, память и пакетная обработка. В таблице ниже сравнивается эффект разных стратегий.

Стратегия оптимизацииВремя на файл100 файлов — общееПотребление памятиПодходящая лицензия
Однопоточный режим0,8 с80 с50 МБTrial (1 поток)
4 параллельных потока0,8 с22 с180 МБStandard (4 потока)
8 параллельных потоков0,8 с12 с320 МБProfessional (8 потоков)
16 параллельных потоков0,8 с7 с600 МБEnterprise (16+ потоков)
Потоковый режим1,2 с95 с15 МБЛюбая лицензия

Для пакетного сжатия рекомендуется встроенный в SDK интерфейс smartslim_compress_batch: передаёте список файлов и число параллельных потоков, а SDK использует асинхронную диспетчеризацию задач на Rust — это эффективнее, чем самостоятельная реализация многопоточности в каждом языке. Ниже — данные производительности демо пакетного сжатия 100 PDF-файлов.

Кол-во файловСредний размер файлаИсходный общий объёмОбъём после сжатияВремя при 8 потокахСтепень сжатия
100 PDF15 МБ1,5 ГБ320 МБ12 с78,7%
100 PNG8 МБ800 МБ180 МБ8 с77,5%
100 DOCX5 МБ500 МБ120 МБ6 с76,0%
100 MP450 МБ5 ГБ1,8 ГБ45 с64,0%

Если хотите узнать о сравнении алгоритмов библиотек сжатия на Rust, см. статьюСравнение библиотек сжатия на Rust: почему мы выбрали Rust для движка。Если нужно развернуть сервис сжатия в контейнере Docker, см. статьюРазвёртывание сервиса сжатия в Docker

5. Часто задаваемые вопросы (FAQ)

В1: Какие языки программирования поддерживает Compression SDK?

SDK SmartSlim экспортирует динамическую библиотеку через стандартный C ABI и поддерживает интеграцию с четырьмя языками: Python (ctypes), Java (JNI), C# (P-Invoke), Rust (FFI). Поставляется с предкомпилированными библиотеками для 6 платформ (linux-x64/arm64, macos-universal, windows-x64 и др.) — готов к использованию без сборки. Языки, поддерживающие вызов C ABI (Go, Node.js, PHP и т.д.), также могут интегрироваться через собственные механизмы FFI.

В2: Каков поток вызова API Compression SDK?

Стандартный поток вызова состоит из четырёх шагов: 1) вызов smartslim_init для инициализации SDK и передачи лицензионного ключа; 2) вызов smartslim_create_config для создания конфигурации сжатия (формат, уровень, режим производительности); 3) вызов smartslim_compress для выполнения сжатия (входной и выходной путь); 4) вызов smartslim_free для освобождения ресурсов. Сжатие одного PDF объёмом 100 МБ занимает около 0,8 с, задержка проверки лицензии — менее 5 мс.

В3: Как реализовать пакетное сжатие в Compression SDK?

Есть два способа пакетного сжатия. Первый — цикл с вызовом интерфейса сжатия одиночного файла в сочетании с многопоточностью (в Python — concurrent.futures, в Java — ThreadPoolExecutor). Второй — встроенный в SDK интерфейс пакетного сжатия smartslim_compress_batch, которому передаются список файлов и число потоков, а диспетчеризация задач идёт на Rust внутри SDK. Рекомендуется второй способ: лицензия Standard поддерживает 4 потока, Professional — 8, Enterprise — 16 и более.

В4: Что делать при ошибках интеграции Compression SDK?

Типичные ошибки и решения: 1) UnsatisfiedLinkError (Java) или сбой загрузки DLL — проверьте путь к динамической библиотеке и совпадение архитектуры системы; 2) сбой проверки лицензии — проверьте правильность и срок действия ключа; 3) переполнение памяти — уменьшите число потоков или включите потоковый режим; 4) формат не поддерживается — проверьте, поддерживает ли версия SDK нужный формат. Для диагностики рекомендуется включить отладочное логирование или обратиться в техподдержку SmartSlim.

Заключение

SDK SmartSlim благодаря стандартному C ABI обеспечивает подход «пишем один раз — вызываем из любого языка» и поддерживает интеграцию с Python, Java, C# и Rust. Основной поток вызова состоит из четырёх шагов: инициализация, создание конфигурации, выполнение сжатия, освобождение ресурсов. Сжатие одного PDF 100 МБ занимает 0,8 с, пакетное сжатие 100 файлов при 8 потоках — всего 12 с. Оптимизация ведётся в трёх измерениях: параллелизм (4–16 потоков), память (потоковый режим снижает потребление на 75%), пакетная обработка (встроенный batch-интерфейс).

Запомните три момента: во-первых, выбирайте предкомпилированную библиотеку, соответствующую архитектуре системы (6 платформ); во-вторых, для пакетного сжатия предпочтительнее встроенный batch-интерфейс, а не самописная многопоточность; в-третьих, в производственной среде рекомендуется лицензия не ниже Professional (8 потоков) — баланс производительности и стоимости. Если вы предпочитаете вызов через HTTP, а не через SDK, см. практику вызова Compression API.

Нужно сжать файлы? Попробуйте SmartSlim

На основе собственного движка сжатия на Rust поддерживает PDF, изображения, видео, Office, OFD — более 40 форматов в 10 категориях; локальное сжатие без передачи данных за периметр.