3.9 KiB
3.9 KiB
Улучшения диаграмм в PDF-отчетах
Проблемы, которые были решены
- Обрезание диаграмм - диаграммы выходили за границы страницы PDF
- Некрасивый внешний вид - диаграммы выглядели неаккуратно и нечитаемо
- Плохое качество - низкое разрешение и размытость
Внесенные улучшения
1. Улучшенная логика масштабирования (ResearchPdfService.java)
- Точный расчет доступного пространства с учетом всех отступов
- Пропорциональное масштабирование для сохранения соотношения сторон
- Ограничения масштабирования (30%-100%) для читаемости
- Дополнительная проверка размера после масштабирования
- Принудительное уменьшение если диаграмма все еще не помещается
2. Оптимизация генерации SVG (OpenAiChartService.java)
- Стандартные размеры 800x600 для оптимального качества в PDF
- Увеличенные отступы (минимум 60px) вокруг диаграммы
- Улучшенная стилизация с градиентами, тенями и рамками
- Контрастные цвета и размер шрифта не менее 14px
- Сетка и оси для лучшей читаемости
3. Улучшенная конвертация SVG в PNG (SvgToPngConverter.java)
- Высокое качество конвертации для PDF
- Автоматические размеры если SVG не содержит явных размеров
- Оптимизация для печати и отображения
4. Адаптивное размещение диаграмм
- Автоматическое разбиение больших диаграмм на отдельные страницы
- Подписи к диаграммам при наличии нескольких диаграмм
- Улучшенные отступы для лучшего внешнего вида
- Центрирование всех диаграмм
5. Улучшения в ReportGenerationService
- Улучшенное масштабирование для диаграмм тональности
- Пропорциональное изменение размера с сохранением качества
- Лучшее позиционирование и отступы
Результат
- ✅ Диаграммы больше не обрезаются
- ✅ Улучшенное качество и читаемость
- ✅ Профессиональный внешний вид
- ✅ Адаптивное размещение на страницах
- ✅ Оптимизация для PDF-формата
Технические детали
Ключевые методы:
addChartsSection()- основная логика добавления диаграммshouldSplitChart()- проверка необходимости разбиения на страницыaddChartWithPagination()- добавление с разбиениемbuildSvgPrompt()- улучшенные промпты для генерации SVG
Параметры масштабирования:
- Минимальный масштаб: 30%
- Максимальный масштаб: 100%
- Безопасный отступ: 90% от доступного пространства
- Стандартные размеры SVG: 800x600px