Достижение: Добавлены скрипты и документация для релиза PDF Compressor.

- Добавлен release-body.md для подробных заметок о релизе на русском языке.
- Реализован release-gitea.ps1 для автоматизированного релиза Gitea с помощью PowerShell.
- Создан release-gitea.sh для автоматизированного релиза Gitea с помощью Bash.
- Добавлен release.sh для сборки и маркировки релизов с поддержкой нескольких платформ.
- Улучшен пользовательский интерфейс благодаря информативному логированию и обработке ошибок.
- Добавлена ​​поддержка переменных окружения и управления конфигурацией.
- Добавлена ​​функция создания архивов и загрузки ресурсов в Gitea.
This commit is contained in:
Dmitriy Fofanov
2025-11-05 09:33:12 +03:00
parent f328d67080
commit ec65cfd05a
43 changed files with 5792 additions and 2 deletions

View File

@@ -0,0 +1,69 @@
package compressors
import (
"fmt"
"os"
"github.com/pdfcpu/pdfcpu/pkg/api"
"compressor/internal/domain/entities"
)
// PDFCPUCompressor реализация компрессора с использованием PDFCPU
type PDFCPUCompressor struct{}
// NewPDFCPUCompressor создает новый PDFCPU компрессор
func NewPDFCPUCompressor() *PDFCPUCompressor {
return &PDFCPUCompressor{}
}
// Compress сжимает PDF файл используя PDFCPU библиотеку
func (p *PDFCPUCompressor) Compress(inputPath, outputPath string, config *entities.CompressionConfig) (*entities.CompressionResult, error) {
fmt.Printf("🔄 Сжатие PDF с уровнем %d%% (PDFCPU)...\n", config.Level)
// Получаем исходный размер файла
originalInfo, err := os.Stat(inputPath)
if err != nil {
return nil, fmt.Errorf("ошибка получения информации об исходном файле: %w", err)
}
// Применяем настройки в зависимости от уровня сжатия
if config.ImageCompression {
fmt.Printf("📸 Включено сжатие изображений (качество: %d%%)\n", config.ImageQuality)
}
if config.RemoveDuplicates {
fmt.Println("🔄 Удаление дубликатов объектов")
}
// Выполняем оптимизацию с базовыми настройками
err = api.OptimizeFile(inputPath, outputPath, nil)
if err != nil {
return &entities.CompressionResult{
OriginalSize: originalInfo.Size(),
Success: false,
Error: err,
}, fmt.Errorf("ошибка оптимизации PDFCPU: %w", err)
}
// Получаем размер сжатого файла
compressedInfo, err := os.Stat(outputPath)
if err != nil {
return &entities.CompressionResult{
OriginalSize: originalInfo.Size(),
Success: false,
Error: err,
}, fmt.Errorf("ошибка получения информации о сжатом файле: %w", err)
}
result := &entities.CompressionResult{
OriginalSize: originalInfo.Size(),
CompressedSize: compressedInfo.Size(),
Success: true,
}
result.CalculateCompressionRatio()
fmt.Printf("✅ Сжатие завершено: %s\n", outputPath)
return result, nil
}