このページには自動翻訳されたテキストを含めることができます。
ドキュメントの構築
もちろん、データを含む PDF ドキュメントを生成する必要があります。 しかし、PDF ファイルをパスワード で暗号化したい場合もよくあります。 そして通常は、出力ファイルに PDF メタデータを追加する必要があり ます。
ジェネレーターに PDF ファイルを暗号化するように指示する方法については、読み続けてください。 ドキュ メントの作成者とキーワードを指定する方法。
この記事は、PDF 生成のための Layout API に関するシリーズの一部です。 API を初めて使用する場合は、ま ず Layout API の使用開始 の部分をお読みください。
Create & Generate
Layout API のエントリポイントは
PdfDocumentBuilder クラスです。 まず、Create
メソッドを使用してクラスのインスタンスを作成します。 PDF を生成するには、クラスの
Generate メソッドを呼び出します。
Generate
は出力をファイルまたはストリームに保存できます。 どちらのバージョンのメソッドでも、2 番
目のパラメーターとして Action
<Document> 型のデリゲート
が必要です。 デリゲートでは、取得したいドキュメントを記述します。 ライブラリは説明に基づいて PDF を
生成します。
14,820人が合格 NuGet の合計ダウンロード数 4,998,853
暗号化
出力 PDF を暗号化するには、Generateメ ソッドの前に Encryption メソッドを 呼び出します。
暗号化ハンドラーを作成して提供する必要があります。 PDF をパスワードで暗号化するに は、PdfStandardEncryptionHandler タイプのハ ンドラーを使用します。
PdfDocumentBuilder.Create()
.Encryption(new PdfStandardEncryptionHandler("owner", "user"))
.Generate("encrypted-with-password.pdf", doc => doc.Pages(_ => { }));
証明書を使用して PDF を暗号化することもできます。 PDF ドキュメントを暗号化す る の記事を確認してください。 これには、暗号化ハンドラーと PDF 権限に関する 詳細情報が含まれています。
PDF ファイルのメタデータ
一部のワークフローでは、出力 PDF に適切な PDF キーワードと PDF 作成者を指定することが非常に重要で す。 Layout API はこれを簡単に行う方法を提供します。 Generate メソッドの前に Info メソッドを呼び出し、デリゲートにメタ データ値を指定します。
PdfDocumentBuilder.Create()
.Info(info =>
{
info.Author = $"{Environment.UserName}";
info.Title = "Generate encrypted PDF with custom metadata";
info.Keywords = "Metadata keywords encryption";
})
.Generate("metadata.pdf", doc => doc.Pages(_ => { }));
オプション
同じコンテンツでも、ライブラリは内部構造が異なる PDF ファイルを作成できます。 これらのオプションは 出力 PDF に影響します。
バージョン
Version メソッドを使用して、出力 PDF の最小 PDF 形式バージョンを設定します。
PdfDocumentBuilder.Create()
.Version(PdfVersion.Pdf17)
.Generate("version.pdf", doc => doc.Pages(_ => { }));
ライブラリでは、指定されたバージョンよりも大きなバージョンの PDF が作成される場合があることに注意し てください。 これは、ドキュメントの内容に新しいバージョンが必要な場合に発生します。 別の言い方をす ると、ドキュメントが PDF 標準の指定されたバージョンでは利用できない機能を使用している場合です。
オブジェクトストリーム
デフォルトでは、ライブラリは生成された PDF 内のオブジェクト ストリームを使用します。 これは、より小 さく、より優れた圧縮ファイルを生成するのに役立ちます。
ObjectStreams メソッドを使用し て、オブジェクト ストリームなしで PDF ファイルを作成するように APIに指示できます。
PdfDocumentBuilder.Create()
.ObjectStreams(false)
.Generate("no-object-streams.pdf", doc => doc.Pages(_ => { }));
何らかの規制要件がない限り、オブジェクト ストリームを使用し続けることをお勧めします。 または、ワー クフローの他の部分がオブジェクト ストリームを使用してドキュメントを処理できない場合。
ストリームプロバイダー
ライブラリは中間ストレージとしてストリームを使用します。 PDF を生成するときは、画像やその他の大きな オブジェクトに対しても生成されます。 ライブラリはストリーム プロバイダーを通じてストリームを取得し ます。 現在の PdfDocumentBuilder インスタンス に関連付けられているものが常に 1 つあります。
ライブラリはデフォルトで PdfMixedStorageStreamProvider を使用しま す。 このストリーム プロバイダーの実装は、データをメモリ内に保持するストリームを提供します。 データ が多すぎる場合、これらのストリームはその内容を一時ファイルにフラッシュします。 これにより、メモリ消 費量が削減され、LOH の断片化が回避されます。
PDF ファイルを生成するときに、IPdfStreamProvider イン ターフェイスの独自の実装を使用できます。 変更の理由の 1 つは、ディスク操作の遅さやコストの高さであ る可能性があります。 クラウド環境はこの説明に当てはまるかもしれません。
このコードは、一時ファイルを使用せずに完全にメモリ内で PDF を生成する方法を示しています。 これに は、デフォルトのオプションよりも多くのメモリが必要になることに注意してください。
using (var memoryOnlyProvider = new PdfMemoryStreamProvider())
{
PdfDocumentBuilder.Create()
.StreamProvider(memoryOnlyProvider)
.Generate("created-without-temp-files.pdf", doc => doc.Pages(_ => { }));
}
ライブラリは最終的に、ストリーム プロバイダーを通じて取得するすべてのストリームに対して Dispose
を呼び出します。 ストリーム プロバイダー インスタンスは自分で破棄する必要があります。