понедельник, 21 июня 2010 г.

Пишем в PDF русские символы и вообще Unicode

Продолжаем осваивать SDK PoDoFo для работы с pdf файлами.
Сегодня я расскажу как в pdf-файл записать Unicode строки.

void writeUnicode() const
{
  //Это наша тестовая строка, она извлекается из ресурсов
  //Она будет переведена на русский, т.к. у нас включен транслятор
  //QTranslator
  QString sTitle = QObject::tr("Test String");
  //Рисовалка на текущей странице
  PdfPainter painter;
  painter.SetPage(currentPage_);
  //Кодировка
  const PdfEncoding * pEncoding;
  //2х байтная кодировка
  pEncoding = new PdfIdentityEncoding();
  //Параметры шрифта
  PdfFont * pFont;
  pFont = document_->CreateFont("Arial", pEncoding);
  pFont->SetFontSize(18.0);
 
  //Здесь конвертируем строку sTitle из QString в PdfString
  QByteArray ba = sTitle.toUtf8();
  char * dt = ba.data();
  PdfString ps(reinterpret_cast<const pdf_utf8*>(dt));
  //задаем шрифт
  painter.SetFont(pFont);
  //рисуем текст на странице
  painter.DrawText( 100.0, 100.0,
   ps, ps.GetLength());

  //заканчиваем работу с рисовалкой
  painter.FinishPage();
}


* This source code was highlighted with Source Code Highlighter.
 Основная трудность была - понять как перевести из QString в PdfString. Ну и какую задать кодировку шрифту тоже было неочевидно.
В итоге можем писать в PDF в любых Unicode символах.

2 комментария:

  1. Прошу прощения, в прошлом комментарии не учёл, что содержимое char* после нулевого байта не читается. Поэтому в конструктор PdfString надо также передать вторым параметром размер QByteArray, получившегося в результате fromUnicode();

    ОтветитьУдалить
  2. Сделали по образцу! Все равно русские буквы не отображаются.

    ОтветитьУдалить