Skip to content

Справочник 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 растеризовать часть страницы.