はじめに
C++ 用の Aspose.PDF FOSS には、PDF ページ上に自由形状を直接構築するための小さなベクターグラフィックス API が含まれています。これは、既存のページコンテンツを画像フォーマットに変換するライブラリのラスターレンダリングパス(BmpDevice、JpegDevice、TiffDevice)とは別で、ドキュメント生成時にプログラムがページ上に新しいジオメトリ(円、楕円、線)を構築できるようにします。
API は Graph を中心に構成されており、Shape オブジェクトの集合を保持するコンテナで、Page.Paragraphs() を通じて他のページコンテンツと同様にページに配置されます。抽象的な Shape 基底から派生した具体的な形状は Circle、Ellipse、Line の3つで、共通の点や矩形型ではなく、少数の数値プロパティでジオメトリを表現します。ストローク幅、色、塗り、ダッシュパターンは GraphInfo を通じて形状ごとに設定され、Graph コンテナ自体は全体を枠取るための BorderInfo を保持しています。
これはライブラリの狭い領域で、形状ジオメトリとスタイリングを扱う 5 つのクラスから構成され、完全なベクトル描画レイヤーを構築したり画像合成にフォールバックしたりせずに、ページ上にシンプルな幾何学コンテンツ(境界線、マーカー、接続線、ハイライト円)を描画する必要があるプログラム向けです。
含まれるもの
グラフコンテナとページへのシェイプ追加
Graph はページ上に描画された形状を保持します。その固有プロパティ — Left()、Top()、Width()、Height()、IsChangePosition() — はページ上でコンテナの位置とサイズを決定し、Shapes() は保持している Shape ポインタのベクターを返します。形状はインスタンス化し、プロパティを設定した上でそのベクターに追加することで加えられ、Graph 自体は Page.Paragraphs().Add() を通じてページに追加されます。
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/graph.hpp>
#include <aspose/pdf/circle.hpp>
using namespace Aspose::Pdf;
int main() {
Document doc;
Page page = doc.Pages().Add();
auto graph = std::make_shared<Graph>();
graph->Left(50.0);
graph->Top(50.0);
graph->Width(400.0);
graph->Height(400.0);
auto circle = std::make_unique<Circle>();
circle->PosX(200.0);
circle->PosY(200.0);
circle->Radius(75.0);
graph->Shapes().push_back(std::move(circle));
page.Paragraphs().Add(graph);
doc.Save("graph.pdf");
}
円と楕円の描画
Circle と Ellipse はそれぞれ、共通の点や矩形型を使わず、単純な数値プロパティでジオメトリを記述します。Circle は PosX()、PosY()、Radius() を公開し、Ellipse は Left()、Bottom()、Width()、Height() を公開して、Graph が位置決めに使用するのと同様のバウンディングボックスを表します。両者とも Shape から継承した CheckBounds(containerWidth, containerHeight) をオーバーライドし、現在のジオメトリが指定サイズのコンテナに収まるかどうかを報告します。
#include <aspose/pdf/circle.hpp>
#include <aspose/pdf/ellipse.hpp>
using namespace Aspose::Pdf;
Circle circle;
circle.PosX(150.0);
circle.PosY(150.0);
circle.Radius(50.0);
bool circleFits = circle.CheckBounds(400.0, 400.0);
Ellipse ellipse;
ellipse.Left(20.0);
ellipse.Bottom(20.0);
ellipse.Width(120.0);
ellipse.Height(60.0);
bool ellipseFits = ellipse.CheckBounds(400.0, 400.0);
線の描画
Line は Circle や Ellipse とは異なる方法でジオメトリを保存します。PositionArray() は座標のフラットな std::vector<float> を返し、各点の x, y のペアを格納します(名前付きプロパティの集合ではありません)。2 点セグメントは 4 つの値、すなわち開始 x、開始 y、終了 x、終了 y で設定されます。他の形状と同様に、Line も Shape から継承した CheckBounds(containerWidth, containerHeight) をオーバーライドします。
#include <aspose/pdf/line.hpp>
using namespace Aspose::Pdf;
Line line;
line.PositionArray({50.0f, 50.0f, 350.0f, 350.0f});
bool lineFits = line.CheckBounds(400.0, 400.0);
GraphInfo と BorderInfo を使用した形状のスタイリング
各形状のストロークと塗りは GraphInfo から取得され、Shape.GraphInfo() / GraphInfo(value) を通じて読み書きします。GraphInfo はストローク幅 (LineWidth())、ストロークと塗りの色 (Color(), FillColor())、破線パターン (DashArray(), DashPhase())、二重線フラグ (IsDoubled())、および傾き/スケール/回転プロパティ (SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle()) を公開します。Graph コンテナは BorderInfo も保持しており、Border() で設定され、各辺ごとに GraphInfo を 1 つ保持します — Left(), Right(), Top(), Bottom() — さらにコンテナ自身の境界を丸めるための RoundedBorderRadius() があります。
#include <aspose/pdf/graph_info.hpp>
#include <aspose/pdf/border_info.hpp>
#include <aspose/pdf/color.hpp>
using namespace Aspose::Pdf;
GraphInfo stroke;
stroke.LineWidth(2.0f);
stroke.Color(Color::FromRgb(1.0, 0.0, 0.0));
stroke.FillColor(Color::FromRgb(1.0, 0.9, 0.9));
stroke.DashArray({4, 2});
BorderInfo border{BorderSide::All, 1.5f, Color::Black()};
border.RoundedBorderRadius(6.0);
クイックスタート
ライブラリを CMake のサブディレクトリとして追加し、aspose_pdf_foss ターゲットにリンクします:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
ドキュメントを作成し、ページを追加し、Graph コンテナ内に円を描画して、結果を保存します:
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/graph.hpp>
#include <aspose/pdf/circle.hpp>
using namespace Aspose::Pdf;
int main() {
Document doc;
Page page = doc.Pages().Add();
auto graph = std::make_shared<Graph>();
graph->Left(50.0);
graph->Top(50.0);
graph->Width(300.0);
graph->Height(300.0);
auto circle = std::make_unique<Circle>();
circle->PosX(150.0);
circle->PosY(150.0);
circle->Radius(100.0);
graph->Shapes().push_back(std::move(circle));
page.Paragraphs().Add(graph);
doc.Save("circle.pdf");
}
サポートされている形式
| フォーマット | 拡張子 | 読み取り | 書き込み |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
これらのフォーマットは、ベクターグラフィッククラスに特化したものではなく、ライブラリ全体に適用されます — ページラスタライズ(BMP、JPEG、TIFF)、テキスト抽出(Text)、およびSVGインポート — のためです。Graph、Shape、Circle、Ellipse、およびLineはPDFページコンテンツに直接描画され、独自のファイル形式に結び付けられていません。
オープンソースとライセンス
Aspose.PDF FOSS for C++ は MIT ライセンスの下で配布されており、完全なソースは github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp で入手可能です。ライセンスは、別途契約なしで商用利用、改変、再配布を許可します。