Достижение: Добавлены скрипты и документация для релиза PDF Compressor.
- Добавлен release-body.md для подробных заметок о релизе на русском языке. - Реализован release-gitea.ps1 для автоматизированного релиза Gitea с помощью PowerShell. - Создан release-gitea.sh для автоматизированного релиза Gitea с помощью Bash. - Добавлен release.sh для сборки и маркировки релизов с поддержкой нескольких платформ. - Улучшен пользовательский интерфейс благодаря информативному логированию и обработке ошибок. - Добавлена поддержка переменных окружения и управления конфигурацией. - Добавлена функция создания архивов и загрузки ресурсов в Gitea.
This commit is contained in:
69
internal/infrastructure/compressors/pdfcpu_compressor.go
Normal file
69
internal/infrastructure/compressors/pdfcpu_compressor.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user