Справочник API: Document (Генерация PDF)
Класс Document позволяет записывать команды рисования и сохранять их в векторные форматы, в первую очередь PDF. В отличие от Surface, который рендерит в пиксели, Document сохраняет векторную природу ваших рисунков.
Создание PDF
Для создания PDF необходим WStream (поток записи) для получения вывода.
java
try (FileOutputStream fos = new FileOutputStream("output.pdf");
WStream stream = new FileOutputStreamWStream(fos);
Document doc = Document.makePDF(stream)) {
// 1. Начать страницу
Canvas canvas = doc.beginPage(595, 842); // Размер A4 в пунктах
// 2. Рисовать на холсте страницы
Paint paint = new Paint().setColor(0xFF4285F4);
canvas.drawRect(Rect.makeXYWH(50, 50, 100, 100), paint);
// 3. Завершить страницу
doc.endPage();
// 4. Закрыть документ для финализации файла
doc.close();
}Добавление метаданных
Вы можете включить метаданные PDF (Заголовок, Автор и т.д.) при создании документа:
java
Document doc = Document.makePDF(stream,
"Мой Skija Документ", // Заголовок
"Разработчик Skija", // Автор
"Демо графики", // Тема
"вектор, skia, java", // Ключевые слова
"Движок Skija", // Создатель
"PDF Producer Skija", // Производитель
System.currentTimeMillis(), // Дата создания
System.currentTimeMillis() // Дата изменения
);Важные замечания
- Система координат: PDF использует Пункты (1/72 дюйма) как единицу измерения по умолчанию.
- Время жизни Canvas:
Canvas, возвращаемыйbeginPage(), действителен только до вызоваendPage(). Не пытайтесь использовать его после завершения страницы. - Шрифты: При рисовании текста в PDF, Skija попытается встроить необходимые данные шрифта. Убедитесь, что используемые гарнитуры разрешают встраивание.
- Вектор против Растра: Большинство операций Skija (линии, фигуры, текст) останутся векторными в PDF. Однако некоторые сложные эффекты (как определённые ImageFilters или Shaders) могут заставить Skia растеризовать часть страницы.