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

ドキュメントの構築

もちろん、データを含む PDF ドキュメントを生成する必要があります。 しかし、PDF ファイルをパスワード で暗号化したい場合もよくあります。 そして通常は、出力ファイルに PDF メタデータを追加する必要があり ます。

ジェネレーターに PDF ファイルを暗号化するように指示する方法については、読み続けてください。 ドキュ メントの作成者とキーワードを指定する方法。

この記事は、PDF 生成のための Layout API に関するシリーズの一部です。 API を初めて使用する場合は、ま ず Layout API の使用開始 の部分をお読みください。

PDF ドキュメントの構築

Create & Generate

Layout API のエントリポイントは PdfDocumentBuilder クラスです。 まず、Create メソッドを使用して クラスのインスタンスを作成します。 PDF を生成するには、クラスの Generate メソッドを呼び出します。

Generate は出力をファイルまたはストリームに保存できます。 どちらのバージョンのメソッドでも、2 番 目のパラメーターとして Action<Document> 型のデリゲートが必要です。 デリゲートでは、取得したいド キュメントを記述します。 ライブラリは説明に基づいて PDF を生成します。

Docotic.Pdf ライブラリ 9.4.17342 レイアウトアドオン 9.4.17342
回帰テスト 14,727人が合格 NuGet の合計ダウンロード数 4,260,602

暗号化

出力 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 を呼び出します。 ストリーム プロバイダー インスタンスは自分で破棄する必要があります。