このページには自動翻訳されたテキストを含めることができます。

Core API を使用した PDF の作成

Docotic.PdfのコアAPIは、PDF作成を完全に制御できます。PDFページ、XObject、タイルパターンによって提供されるキャンバス上に、テキスト、画像、ベクターグラフィックを描画できます。

すべての座標と描画操作を制御できるため、PDFページのレイアウトを最大限にコントロールできます。グラフィックを多用するドキュメントや、精度が求められるカスタムレイアウトのドキュメントでは、このレベルの制御は不可欠です。

コアAPIを使用すると、作成したPDFに注釈、フォームフィールド、レイヤー、ブックマークなどを追加することもできます。このAPIは、Docotic.Pdfが提供する.NETでのPDF作成において、最も柔軟で強力な方法です。

PDF作成のためのコアAPIの機能を示す図。ベクターグラフィック、画像配置、テキスト描画などが示されている。

Docotic.Pdf で利用可能なすべての方法(コア API 以外の方法も含む)の概要をより詳しく知りたい場合は、PDF を作成するためのすべての方法 を概説した記事を参照してください。

始める前に

Core API の使用を開始する前に、Docotic.Pdf をインストールし、ライセンスキーをリクエストして環境をセットアップしてください。

Docotic.Pdfをインストールしてください

C#またはVB.NETでPDFドキュメントを作成するには、まずNuGetからライブラリをインストールしてください。

Install-Package BitMiracle.Docotic.Pdf

ライブラリを手動でインストールする場合は、ライブラリのバイナリを含むZIPアーカイブをダウンロードし、解凍して、プロジェクトからBitMiracle.Docotic.Pdf.dllへの参照を追加してください。

ライセンスキーを取得する

ライブラリを使用するにはライセンスキーが必要です。ライブラリを試用するには、Docotic.Pdf ダウンロードページにあるフォームに記入して、無料の期間限定ライセンスキーをリクエストしてください。

基本的なPDF作成例

このセクションでは、Core API を使用して PDF ドキュメントを作成する方法を、まず C# で、次に VB.NET で示す基本的な例を紹介します。

C#でPDFを作成する方法

Docotic.Pdfをインストールし、ライセンスキーを取得したら、Core APIを使用して簡単にPDFを作成できます。

BitMiracle.Docotic.LicenseManager.AddLicenseData("PUT-LICENSE-HERE");

using var pdf = new PdfDocument();
pdf.Save("empty.pdf");

このコードは、空のPDFファイルを作成する方法を示しています。最初の行でライセンスキーを追加します。ライセンスがない場合、PdfDocumentをインスタンス化する行で例外が発生します。最後の行でドキュメントをPDFファイルに保存します。

作成されるファイルの内部構造は、保存オプションによって異なります。この例では、デフォルトオプションで保存するSaveメソッドのオーバーロードを使用しています。これらのデフォルトオプションの動作と、変更が必要な場合については、保存オプション のセクションを参照してください。

プログラミングの慣例に従い、2番目の例ではCore APIを使用して作成した「Hello, world!」を示します。

using var pdf = new PdfDocument();

var page = pdf.Pages[0];
page.Canvas.DrawString(50, 50, "Hello, world!");

pdf.Save("hello.pdf");

このコードは、指定された位置からドキュメントの最初のページのキャンバス上に、おなじみのフレーズを配置します。この行は、デフォルトのフォントとデフォルトのフォントサイズを使用します。PDFキャンバスの操作に関する詳細については、引き続きお読みください。

VB.NETを使用してPDFを作成する

PDFを作成するためのVB.NETコードは、前のセクションのコードと非常によく似ています。

Using pdf As New PdfDocument()
    Dim page = pdf.Pages(0)
    page.Canvas.DrawString(50, 50, "Hello, world!")

    pdf.Save("hello.pdf")
End Using

前のセクションでは、C# の例を含め、コードが何をするのか、どのように動作するのかを説明しています。

PDFキャンバスの操作

PDFドキュメント内のキャンバスを変更するには、Canvas APIを使用します。これはCore APIのサブセットです。

Canvas APIは絶対位置指定モデルを使用します。座標を指定すると、キャンバスは指定した場所に正確に描画されます。座標系では、原点はページの左上隅に配置されます。座標は、X軸方向に右方向、Y軸方向に下方向に向かって増加します。

(0,0) ──► X
  │
  │
  ▼
  Y

描画テキスト

Docotic.Pdf の PdfCanvas クラスには、テキストを描画するための主要なメソッドが DrawStringDrawText の 2 つ用意されています。どちらのメソッドも現在のキャンバスのフォントを使用するため、テキストを描画する前に必要なフォントを設定することをお勧めします。

DrawStringを使用する

DrawString は常にテキストを 1 行描画します。明示的な座標を指定するオーバーロードを使用しない限り、このメソッドはキャンバス上の現在のテキスト位置から描画を開始します。一部のオーバーロードでは、テキストの描画方法を制御する追加オプションを指定できます。

「Hello, world!」のスニペットで、DrawString の簡単な例をすでにご覧いただきました。ここでは、文字列描画オプション を使用してテキストに下線を引く別の例を示します。

using var pdf = new PdfDocument();

var canvas = pdf.Pages[0].Canvas;
canvas.DrawString(50, 50, "This text is underlined", new PdfStringDrawingOptions
{
    Underline = true,
});

pdf.Save("underlined-text.pdf");

DrawTextを使用する

DrawText は、指定された矩形内に複数行のテキストを描画できます。このメソッドは改行を処理し、許容範囲に収まらないテキストは切り捨てます。テキスト描画オプションは、テキストの水平方向と垂直方向の配置、およびテキストの位置と描画方法に関するその他の要素を定義します。

C# を使用して PDF にテキストを描画する方法は次のとおりです。

using var pdf = new PdfDocument();

const string LongString = "Lorem ipsum dolor sit amet, consectetur adipisicing elit";
var multiLineOptions = new PdfTextDrawingOptions(new PdfRectangle(70, 70, 40, 150))
{
    HorizontalAlignment = PdfTextAlign.Left,
    VerticalAlignment = PdfVerticalAlign.Top
};

var canvas = pdf.Pages[0].Canvas;
canvas.DrawText(LongString, multiLineOptions);

pdf.Save("drawtext.pdf");

テキストの表示を微調整するには、以下のキャンバスプロパティを調整できます。

  • 文字間隔
  • 単語間隔
  • テキストの拡大縮小
  • テキストの高さ(ベースラインシフト)
  • レンダリングモード(塗りつぶし、線、塗りつぶしと線、その他)

テキスト関連のメソッドとプロパティの具体的な例については、テキストサンプルグループを参照してください。

フォントの追加と使用

デフォルトのHelveticaフォントで問題ない場合を除き、テキストが意図したとおりに表示されるように、必要なフォントをPDFに追加することをお勧めします。

Docotic.Pdfは、Type1、TrueType、Compact Font Format(CFF)、およびOpenTypeフォントを以下の場所から追加できます。

  • システムにインストールされているフォントコレクション
  • 外部ファイルおよびストリーム

さらに、任意のPDFビューアで利用可能な14種類の組み込みType1フォントを使用することもできます。

PDFでフォントを使用するには、対応するPdfDocumentオブジェクトのCreateFontまたはCreateFontFromFileメソッドを使用してPdfFontオブジェクトを作成します。次に、テキストを描画する前に、キャンバスにフォントを割り当てます。フォントサイズを設定することも推奨します。

using var pdf = new PdfDocument();
var canvas = pdf.Pages[0].Canvas;

var font = pdf.CreateFont("NSimSun");
canvas.Font = font;
canvas.FontSize = 14;
canvas.DrawString(10, 50, "Olá. 你好. Hello, Unicode!");

font.RemoveUnusedGlyphs();

pdf.Save("unicode-text.pdf");

フォントには、描画しようとしているテキストに含まれるすべての文字のグリフが含まれている必要があります。含まれていない場合は、CannotShowTextException が発生します。フォントに必要なグリフがすべて含まれていることを確認するには、PdfFont.ContainsGlyphsForText を使用してください。

Unicode のサポートはフォントの種類によって異なります。タイプ 1 フォントは、例外を除いて、ラテン文字セットとエンコーディングのみをサポートしています。組み込みの Symbol フォントと ZapfDingbats フォントには、数式、ギリシャ文字、装飾記号が含まれています。

TrueType、CFF、OpenType フォントは通常 Unicode をサポートしていますが、すべての Unicode 文字のグリフが含まれているとは限りません。

Docotic.Pdf は、出力 PDF のサイズを小さく保つため、フォントの埋め込みバイト数をできるだけ少なくしようとします。しかし、ドキュメントで多くのグリフを含むフォントが使用されている場合、生成されるファイルは比較的大きくなる可能性があります。埋め込みフォントによって追加されるバイト数を最小限に抑えるには、PdfFont.RemoveUnusedGlyphs を使用してください。

テキストの寸法を計算する

Canvas APIは絶対位置指定を使用するため、テキストを描画する前に、そのテキストが占めるスペースを把握しておく必要がある場合がよくあります。これは、長い文字列を分割したり、テキストを正確に整列させたり、他のコンテンツとの重なりを避けたりするなど、テキストを複数回に分けて出力する場合に特に重要です。PdfCanvasクラスには、現在選択されているフォントとフォントサイズを使用してテキストを測定するのに役立つメソッドがいくつか用意されています。

PdfCanvas.MeasureTextを使用すると、キャンバス上に表示される文字列の幅と高さを取得できます。一般的な使用例としては、以下のようなものがあります。

  • テキストが指定された領域に収まるかどうかを判断する
  • 改行を手動で計算する
  • テキストブロックを互いに相対的に配置

テキストを中央揃えまたは右揃えにする場合で、水平方向の幅だけが必要な場合は、PdfCanvas.GetTextWidth を使用してください。現在のフォントにおけるテキストの行の高さを知るには、PdfCanvas.GetTextHeight を使用してください。

絵を描く

PDFキャンバスに画像を描画するには、まずPdfImageオブジェクトを作成し、次にPdfCanvas.DrawImageメソッドを使用してそのオブジェクトを描画します。

C#でPDFに画像を追加する方法は次のとおりです。

using var pdf = new PdfDocument();
var canvas = pdf.Pages[0].Canvas;

var image = pdf.CreateImage("image.png");
canvas.DrawImage(image, 10, 50);

pdf.Save("image.pdf");

このコードは、対応するPdfDocumentオブジェクトのCreateImageメソッドを使用して画像オブジェクトを作成し、最初のページのキャンバスに画像を描画します。

サポートされている画像フォーマットや、より高度な画像からPDFへの変換テクニックの詳細については、画像からPDFを作成するを参照してください。

ベクターグラフィックスを使用する

Docotic.Pdf では、PdfCanvas クラスのメソッドを使用して、PDF キャンバス上に直線、ベジェ曲線、および一般的な幾何学的図形を直接描画できます。キャンバス上に目に見えるマークを配置するには、Draw で始まるメソッド(例: DrawLineToDrawCircleDrawRectangle)を使用します。

線と曲線は、PdfCanvas.Pen で定義される 現在のペン を使用して描画されます。このペンは、ストロークの色、幅、およびその他の描画プロパティを指定します。描画モードに応じて、図形はストロークのみ、塗りつぶしのみ、またはストロークと塗りつぶしの両方で描画できます。図形の内部を塗りつぶすには、PdfCanvas.Brush でアクセスできる 現在のブラシ を使用します。

using var pdf = new PdfDocument();
var canvas = pdf.Pages[0].Canvas;

canvas.DrawCircle(new PdfPoint(60, 100), 40);
canvas.DrawRectangle(
    new PdfRectangle(300, 60, 110, 70),
    PdfDrawMode.Fill);

canvas.CurrentPosition = new PdfPoint(150, 90);
canvas.DrawCurveTo(new PdfPoint(180, 60), new PdfPoint(230, 120), new PdfPoint(250, 90));

pdf.Save("curve-and-shapes.pdf");

PDFキャンバスは、ペン、ブラシ、フォント、現在の位置などのグラフィック状態を保持します。現在の状態を保存するにはSaveStateを、以前の状態に戻すにはRestoreStateを使用します。一時的な変換や同様の変更を元に戻す以外に、一度適用されたクリッピングを解除するには、状態の復元が唯一の方法です。

グラフィックパスを使用すると、線、曲線、およびより単純な図形をすぐに描画することなく、複雑な図形を作成できます。AppendLineToAppendRectangleなどのAppendメソッドを使用して、現在のパスにセグメントを追加できます。パスは、明示的に塗りつぶしまたはストロークを適用するまで、視覚的な出力は生成されません。

作成したグラフィックパスは、クリッピング領域として使用して、後続の描画操作を制限できます。クリッピングは、グラフィック状態が復元されるまで有効です。

ベクターグラフィックの操作に関する実践的な実行可能なサンプルは、サンプルリポジトリのGraphicsセクションにあります。

色と透明度の設定

PDFキャンバスのペンとブラシを使って、線と塗りつぶしの色を変更できます。そのためには、PdfPen.ColorPdfBrush.Colorを使用します。

色と透明度に関するCore APIの機能を示すために、無地と模様入りの、色と滴り落ちるような形状のイラスト。

サポートされているデバイス依存のカラースペースには、グレースケール、RGB、CMYK があり、それぞれ PdfGrayColorPdfRgbColorPdfCmykColor で表されます。

using var pdf = new PdfDocument();
var canvas = pdf.Pages[0].Canvas;

canvas.Pen.Color = new PdfRgbColor(30, 60, 160);
canvas.Pen.Width = 3;

canvas.Brush.Color = new PdfCmykColor(0, 20, 5, 0);

canvas.DrawRectangle(
    new PdfRectangle(50, 50, 100, 40),
    PdfDrawMode.FillAndStroke);

pdf.Save("fill-and-stroke-colors.pdf");

Docotic.Pdf は、CIE に基づくデバイス非依存の色空間(L*a*b* カラーや ICC ベースのキャリブレーション済みカラーなど)をサポートしています。また、コア API は、カスタム インクやチャネル固有の出力が必要なワークフロー向けに、特色と色分解色空間もサポートしています。

以下のサンプル コードは、Lab カラー、プロファイルベース カラー、特色を作成する方法を示しています。サンプルを実行するには、まず、サンプルで使用されている ICC プロファイル をダウンロードしてください。

using var pdf = new PdfDocument();
var canvas = pdf.Pages[0].Canvas;

var labColorSpace = new PdfLabColorSpace(pdf, [0.5, 1, 0.5]);
canvas.Pen.Color = new PdfLabColor(labColorSpace, 50, -50, 50);
canvas.Pen.Width = 3;

var rgbProfile = pdf.CreateColorProfile("AdobeCompat-v2.icc");
canvas.Brush.Color = new PdfRgbColor(rgbProfile, 210, 105, 30);

canvas.DrawRectangle(
    new PdfRectangle(50, 50, 100, 40),
    PdfDrawMode.FillAndStroke);

var tintTransform = new PdfExponentialFunction(
    pdf, 1, [0d, 0, 0, 0], [0, 0.8, 0.73, 0.25], [0d, 1]);
var separationColorSpace = new PdfSeparationColorSpace(
    pdf, "BLOODRED", new PdfCmykColorSpace(), tintTransform);
canvas.Pen.Color = new PdfSpotColor(1.0, separationColorSpace);

canvas.DrawCircle(new PdfPoint(100, 70), 60);

pdf.Save("using-special-colors.pdf");

タイリングパターンを使用して、図形に線を引いたり塗りつぶしたりすることもできます。パターンは、独自のキャンバス上に描画されたパターンセルによって定義されます。パターンには次の2種類があります。

  • カラーパターン:セルごとに色が決まります。
  • 無色パターン:セルは使用時にペン/ブラシの色で着色されます。

パターンを使用するには、対応するPdfDocumentオブジェクトのCreateColoredPatternまたはCreateUncoloredPatternを使用してパターンを作成します。次に、PdfPen.Patternおよび/またはPdfBrush.Patternを使用してパターンを適用します。サンプルリポジトリにあるパターンの作成と使用のサンプルコードを参照してください。

半透明の色を使用すると、図形、テキスト、画像をさまざまな透明度で描画できます。半透明の色を作成するには、PdfPen.OpacityおよびPdfBrush.Opacityを使用します。

さらに、ブレンドモードは、透明なコンテンツがその下にあるコンテンツとどのように相互作用するかを制御します。キャンバスのブレンドモードを変更するには、PdfCanvas.BlendModeを使用します。

ページの追加とカスタマイズ

Docotic.Pdf は、ドキュメント内のすべてのページを管理できる PdfDocument.Pages コレクションを提供します。PdfDocument クラスには、新しいページを追加するための主要なメソッドが 2 つあります。AddPageInsertPage です。

ドキュメントの末尾に新しいページを追加するには、AddPage() を使用します。任意の位置にページを挿入するには、InsertPage(index) を使用します。どちらのメソッドも、新しく作成された PdfPage インスタンスを返します。

すべての新しいページのデフォルトサイズは 595 x 842 ユーザー空間単位です。これは A4 用紙のサイズです。ほとんどの場合、PDF のユーザー空間単位は 1/72 インチです。言い換えると、ページの解像度が 72 ピクセル/インチの場合、1 ユーザー空間単位は 1 ピクセルに相当します。

ページの幅や高さ、あるいはその両方を特定のユーザー空間単位数に設定することで、いつでもページのサイズを変更できます。

using var pdf = new PdfDocument();
var page = pdf.Pages[0];

page.Width = 600;
page.Height = 800;

別の選択肢として、あらかじめ定義されたサイズのいずれかを使用する方法もあります。

page.Size = PdfPaperSize.Ledger;

ページの向きを縦向きから横向きに変更したり、ページを時計回りに90度、180度、または270度回転させたりすることも可能です。

page.Orientation = PdfPaperOrientation.Landscape;
page.Rotation = PdfRotation.Rotate180;

ページの幅、高さ、またはあらかじめ定義されたサイズを設定するだけでなく、ページサイズを調整しながら、既存のコンテンツをトリミングしたり、サイズを変更したりすることも可能です。

XObjectsを使用したコンテンツの再利用

PDF XObjectは、ベクターグラフィック、画像、テキストを格納するコンテナです。各XObjectは独自のキャンバスを持つため、通常のPDFページと同様に複雑なXObjectを作成できます。

XObjectはベクター画像に似ています。同じオブジェクトを複数のページで再利用しても、コンテンツを再作成したり、ドキュメントのサイズを拡大したりする必要はありません。また、視覚的なアーティファクトを発生させることなく、オブジェクトの拡大縮小や回転が可能です。これらの特性から、XObjectはロゴ、イラスト、背景、透かし、その他の繰り返し使用されるグラフィックなど、繰り返し要素に最適です。

XObjectの作成と使用

XObjectを作成するには、PdfDocument.CreateXObjectメソッドを使用します。必要に応じて、オブジェクトの幅と高さを変更してください。その後、通常のページキャンバスと同様に、テキスト、画像、グラフィックをキャンバスに描画します。

C#またはVB.NETコードでPdfCanvas.DrawXObjectメソッドを使用すると、XObjectを他のキャンバスに追加できます。XObjectは、ページと他のXObjectの両方が提供するキャンバスに描画できることに注意してください。

以下は、イラストを含むXObjectを作成し、そのイラストを2つのページに描画するC#コードです。

using var pdf = new PdfDocument();

var xobj = pdf.CreateXObject();

var options = new PdfTextDrawingOptions(new PdfRectangle(0, 0, 100, 50))
{
    HorizontalAlignment = PdfTextAlign.Center,
    VerticalAlignment = PdfVerticalAlign.Center,
};
xobj.Canvas.FontSize = 16;
xobj.Canvas.DrawText("Company Logo", options);
xobj.Canvas.DrawRectangle(options.Bounds);

var page1 = pdf.Pages[0];
page1.Canvas.DrawXObject(xobj, 100, 100);

var page2 = pdf.AddPage();
page2.Canvas.DrawXObject(xobj, 200, 200);

pdf.Save("using-xobjects.pdf");

XObjectsを使用したページの変換

XObjectは、単なるグラフィックの再利用にとどまらない、より高度なシナリオを可能にします。よくある例としては、既存の2つのPDFページを1つの大きなページに結合することが挙げられます。各ソースページをXObjectに変換することで、新しいキャンバス上に並べて描画し、実質的に2ページを結合した見開きページを作成できます。この方法により、位置、間隔、拡大縮小を完全に制御できるため、比較レイアウト、ブックの見開きページ、複数ページのプレビューなどを簡単に作成できます。

同じ手法は、PDFページのサイズ変更が必要な場合にも適用できます。コンテンツを再描画または再構築する代わりに、元のページからXObjectを作成し、新しいサイズに拡大縮小して描画できます。これにより、大きすぎるページを縮小したり、小さすぎるページを拡大したり、サイズが混在するドキュメントを最小限の手間で標準化したりできます。

コアAPIの範囲と制約

Core APIはPDF作成を低レベルで精密に制御できますが、自動レイアウト機能は提供していません。マージン、ヘッダー、フッター、改ページなどの組み込み機能はなく、すべてのコンテンツは手動で配置する必要があります。テキストの計測やページ分割はすべてコードで処理する必要があり、PDF作成において最も手動的なアプローチとなります。

表、段落、改ページなどの自動レイアウト機能は、上位レベルのLayout APIを通じて利用できます。

結論

Docotic.PdfのコアAPIは、PDF作成を完全に制御できます。PDFページ、XObject、タイルパターンによって提供されるキャンバス上に、テキスト、画像、ベクターグラフィックを描画できます。

このAPIは、高精度かつ低レベルの制御が求められるシナリオ向けに設計されています。すべての要素を明示的に配置し、テキストの寸法やページ分割を独自に管理し、グラフィックの状態、色、透明度を直接操作できます。

総合的に見て、コアAPIは、精度と制御を最優先にPDFを作成するための最も柔軟なツールです。