Qt GUI 프로그래밍: QPagedPaintDevice::PdfVersion enum 심층 분석


QPagedPaintDevice::PdfVersion enumは、QPrinterやQPdfWriterで生成されるPDFファイルのバージョンを指定するために使用されます。

定数

このenumには以下の定数が定義されています。

  • PdfVersion_1_6: PDF 1.6互換のドキュメントを生成します。これはQt 5.12で追加されました。
  • PdfVersion_A1b: PDF/A-1b互換のドキュメントを生成します。
  • PdfVersion_1_4: PDF 1.4互換のドキュメントを生成します。これがデフォルト値です。

使用方法

QPagedPaintDevice::PdfVersion enumを使用するには、以下のいずれかの方法で行います。

  • QPdfWriter::setPdfVersion(): QPdfWriterオブジェクトのPDFバージョンを設定します。
  • QPrinter::setPdfVersion(): QPrinterオブジェクトのPDFバージョンを設定します。

// QPrinterオブジェクトを使用してPDF 1.6互換のドキュメントを生成する
QPrinter printer;
printer.setPdfVersion(QPagedPaintDevice::PdfVersion_1_6);

// QPdfWriterオブジェクトを使用してPDF/A-1b互換のドキュメントを生成する
QPdfWriter writer("document.pdf");
writer.setPdfVersion(QPagedPaintDevice::PdfVersion_A1b);

各バージョンの違い

各PDFバージョンには、以下の違いがあります。

  • PDF 1.6: 最新のバージョンであり、多くの機能がサポートされています。
  • PDF/A-1b: 長期保存に適した形式で、フォントやカラーパレットなどの埋め込みが制限されています。
  • PDF 1.4: 最も古いバージョンであり、多くの機能がサポートされていません。

どのバージョンを選択すべきか

生成するPDFファイルの用途に応じて、適切なバージョンを選択する必要があります。

  • 特に制約がない場合は、PDF 1.4を選択します。
  • 最新の機能が必要な場合は、PDF 1.6を選択します。
  • 長期保存する必要がある場合は、PDF/A-1bを選択します。
  • QPagedPaintDevice::PdfVersion enumは、Qt 5.0以降で使用できます。


#include <QPrinter>
#include <QPainter>

int main() {
  // QPrinter オブジェクトを作成
  QPrinter printer;

  // プリンタ設定を初期化
  printer.init();

  // PDF バージョンを 1.6 に設定
  printer.setPdfVersion(QPagedPaintDevice::PdfVersion_1_6);

  // ペインターオブジェクトを作成
  QPainter painter(&printer);

  // 描画処理
  painter.drawText(100, 100, "Hello, World!");

  // プリンタに描画
  painter.end();

  return 0;
}

例 2: QPdfWriter で PDF/A-1b 互換のドキュメントを生成する

#include <QPdfWriter>
#include <QPainter>

int main() {
  // QPdfWriter オブジェクトを作成
  QPdfWriter writer("document.pdf");

  // PDF バージョンを PDF/A-1b に設定
  writer.setPdfVersion(QPagedPaintDevice::PdfVersion_A1b);

  // ペインターオブジェクトを作成
  QPainter painter(&writer);

  // 描画処理
  painter.drawText(100, 100, "Hello, World!");

  // PDF ファイルを閉じる
  painter.end();

  return 0;
}

説明

上記の例では、それぞれ QPrinter と QPdfWriter を使用して PDF ドキュメントを生成する方法を示しています。

  • 例 2 では、QPdfWriter::setPdfVersion() メソッドを使用して PDF バージョンを PDF/A-1b に設定しています。
  • 例 1 では、QPrinter::setPdfVersion() メソッドを使用して PDF バージョンを 1.6 に設定しています。


代替方法 1: QPrintEngine::pdfVersion() メソッドを使用する

QPrintEngine::pdfVersion() メソッドは、QPrintEngine オブジェクトの PDF バージョンを取得するために使用できます。このメソッドは、QPagedPaintDevice::PdfVersion enum と同じ値を返します。

// QPrintEngine オブジェクトを取得
QPrintEngine* engine = printer.printEngine();

// PDF バージョンを取得
QPagedPaintDevice::PdfVersion version = engine->pdfVersion();

代替方法 2: QPrinter::outputFormat() メソッドを使用する

QPrinter::outputFormat() メソッドは、QPrinter オブジェクトの出力形式を取得するために使用できます。このメソッドは、QPrinter::PdfFormat 値を返します。QPrinter::PdfFormat 値は、QPagedPaintDevice::PdfVersion enum に対応しています。

// QPrinter オブジェクトの出力形式を取得
QPrinter::OutputFormat format = printer.outputFormat();

// PDF バージョンに変換
QPagedPaintDevice::PdfVersion version;
switch (format) {
case QPrinter::PdfFormat:
  version = QPagedPaintDevice::PdfVersion_1_4;
  break;
case QPrinter::NativeFormat:
  version = QPagedPaintDevice::PdfVersion_1_4;  // Qt 5.12 以前は、NativeFormat は PDF 1.4 互換
  break;
default:
  version = QPagedPaintDevice::PdfVersion_1_4;  // その他の形式は PDF 1.4 互換と仮定
}

代替方法 3: カスタム QPagedPaintDevice クラスを作成する

QPagedPaintDevice クラスを継承したカスタムクラスを作成し、pdfVersion() メソッドを独自に実装することもできます。この方法により、より柔軟な制御が可能になります。

  • 代替方法 3 は、より複雑な方法ですが、より柔軟な制御が可能になります。
  • 代替方法 1 と 2 は、Qt 5.0 以降でのみ使用できます。