PDF レイヤー機能は、PDF ファイルのコンテンツをレイヤーに配置することをサポートします。 ユーザーは、同じ PDF ファイル内で一部のコンテンツを表示するように設定し、一部のコンテンツを非表示にするように選択的に設定できます。PDF レイヤーは、レイヤー化されたアートワーク、地図、および CAD 図面で使用される一般的な要素です。この記事では、Spire.PDF for .NET を使用してPDF のレイヤーを追加、非表示、または削除する方法を紹介します。
Spire.PDF for .NET をインストールします
まず、Spire.PDF for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.PDF
C# と VB.NET で PDF のレイヤーを追加する
Spire.PDF for.NET が提供する PdfDocument.Layers.AddLayer() メソッドでは、PDF にレイヤーの追加をサポートします。PDF レイヤー上にテキスト、線、画像、または形状を描画できます。以下に詳細な操作手順を示します。
- PdfDocument インスタンスを作成します。
- PdfDocument.LoadFromFile() メソッドを使用してサンプル PDF ドキュメントをロードします。
- PdfDocument.Layers.AddLayer(string) メソッドを使用して、指定した名前のレイヤーを PDF に追加します。
- PdfDocument.Layers.AddLayer(string, PdfVisibility) メソッドを使用して、レイヤーを追加するときにレイヤーの可視性を設定します。
- PdfLayer.CreateGraphics() メソッドを使用してレイヤーのキャンバスを作成します。
- キャンバスにテキスト、画像、またはその他の要素を描画します。
- PdfDocument.SaveToFile() メソッドを使用して結果ドキュメントを保存します。
- C#
- VB.NET
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Graphics.Layer;
using System.Drawing;
namespace AddLayersToPdf
{
class Program
{
static void Main(string[] args)
{
//PdfDocumentインスタンスを作成し、サンプルPDFをロードする
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile(@"Sample.pdf");
//AddLayerWatermark メソッドを使用して透かしのレイヤーを追加する
AddLayerWatermark(pdf);
//AddLayerHeaderメソッドを使用してヘッドーのレイヤーを追加する
AddLayerHeader(pdf);
//結果ドキュメントを保存する
pdf.SaveToFile("AddLayers.pdf");
pdf.Close();
}
private static void AddLayerWatermark(PdfDocument doc)
{
//「透かし」という名前のレイヤーを作成する
PdfLayer layer = doc.Layers.AddLayer("透かし");
//フォントを作成する
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Mincho", 48), true);
//透かしのテキストを指定する
string watermarkText = "機密";
//テキストのサイズを取得する
SizeF fontSize = font.MeasureString(watermarkText);
//2つのオフセットを計算する
float offset1 = (float)(fontSize.Width * System.Math.Sqrt(2) / 4);
float offset2 = (float)(fontSize.Height * System.Math.Sqrt(2) / 4);
//ページ数を取得する
int pageCount = doc.Pages.Count;
//2つの変数を宣言する
PdfPageBase page;
PdfCanvas canvas;
//ページをループする
for (int i = 0; (i < pageCount); i++)
{
page = doc.Pages[i];
//レイヤーにキャンバスを作成する
canvas = layer.CreateGraphics(page.Canvas);
canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2);
canvas.SetTransparency(0.4f);
canvas.RotateTransform(-45);
//レイヤーのキャンバスに文字列を描画する
canvas.DrawString(watermarkText, font, PdfBrushes.DarkBlue, 0, 0);
}
}
private static void AddLayerHeader(PdfDocument doc)
{
//「ヘッダー」という名前のレイヤーを作成する
PdfLayer layer = doc.Layers.AddLayer("ヘッダー");
//ページのサイズを取得する
SizeF size = doc.Pages[0].Size;
//XとYの初期値を指定する
float x = 90;
float y = 40;
//ページ数を取得する
int pageCount = doc.Pages.Count;
//2つの変数を宣言する
PdfPageBase page;
PdfCanvas canvas;
//ページをループする
for (int i = 0; (i < pageCount); i++)
{
//レイヤーに画像を描画する
PdfImage pdfImage = PdfImage.FromFile(@"image.jpg");
float width = pdfImage.Width;
float height = pdfImage.Height;
page = doc.Pages[i];
canvas = layer.CreateGraphics(page.Canvas);
canvas.DrawImage(pdfImage, x, y, width, height);
//レイヤーに線を描画する
PdfPen pen = new PdfPen(PdfBrushes.DarkGray, 2);
canvas.DrawLine(pen, x, (y + (height + 5)), (size.Width - x), (y + (height + 2)));
}
}
}
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports Spire.Pdf.Graphics.Layer
Imports System.Drawing
Namespace AddLayersToPdf
Class Program
Private Shared Sub Main(ByVal args As String())
'PdfDocumentインスタンスを作成し、PDFをロードする
Dim pdf As PdfDocument = New PdfDocument()
pdf.LoadFromFile("Sample.pdf")
'AddLayerWatermark メソッドを使用して透かしのレイヤーを追加する
Program.AddLayerWatermark(pdf)
'AddLayerHeaderメソッドを使用してヘッドのレイヤーを追加する
Program.AddLayerHeader(pdf)
'結果ドキュメントを保存する
pdf.SaveToFile("AddLayers.pdf")
pdf.Close()
End Sub
Private Shared Sub AddLayerWatermark(ByVal doc As PdfDocument)
'「透かし」という名前のレイヤーを作成する
Dim layer As PdfLayer = doc.Layers.AddLayer("透かし")
'フォントを作成する
Dim font As PdfTrueTypeFont = New PdfTrueTypeFont(New Font("Yu Mincho", 48), True)
'透かしのテキストを指定する
Dim watermarkText = "機密"
'テキストのサイズを取得する
Dim fontSize As SizeF = font.MeasureString(watermarkText)
'2つのオフセットを計算する
Dim offset1 As Single = fontSize.Width * Math.Sqrt(2) / 4
Dim offset2 As Single = fontSize.Height * Math.Sqrt(2) / 4
'ページ数を取得する
Dim pageCount As Integer = doc.Pages.Count
'2つの変数を宣言する
Dim page As PdfPageBase
Dim canvas As PdfCanvas
'ページをループする
Dim i = 0
While i < pageCount
page = doc.Pages(i)
'レイヤーにキャンバスを作成する
canvas = layer.CreateGraphics(page.Canvas)
canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2)
canvas.SetTransparency(0.4F)
canvas.RotateTransform(-45)
'レイヤーのキャンバスに文字列を描画する
canvas.DrawString(watermarkText, font, PdfBrushes.DarkBlue, 0, 0)
i += 1
End While
End Sub
Private Shared Sub AddLayerHeader(ByVal doc As PdfDocument)
'「ヘッダー」という名前のレイヤーを作成する
Dim layer As PdfLayer = doc.Layers.AddLayer("ヘッダー")
'ページのサイズを取得する
Dim size As SizeF = doc.Pages(0).Size
'XとYの初期値を指定する
Dim x As Single = 90
Dim y As Single = 40
'ページ数を取得する
Dim pageCount As Integer = doc.Pages.Count
'2つの変数を宣言する
Dim page As PdfPageBase
Dim canvas As PdfCanvas
'ページをループする
Dim i = 0
While i < pageCount
'レイヤーに画像を描画する
Dim pdfImage As PdfImage = PdfImage.FromFile("image.jpg")
Dim width As Single = pdfImage.Width
Dim height As Single = pdfImage.Height
page = doc.Pages(i)
canvas = layer.CreateGraphics(page.Canvas)
canvas.DrawImage(pdfImage, x, y, width, height)
'レイヤーに線を描画する
Dim pen As PdfPen = New PdfPen(PdfBrushes.DarkGray, 2)
canvas.DrawLine(pen, x, y + (height + 5), size.Width - x, y + (height + 2))
i += 1
End While
End Sub
End Class
End Namespace
C# と VB.NET で PDF のレイヤーの可視性を設定する
既存のレイヤーの可視性を設定するには、PdfDocument.Layers プロパティを使用して、インデックスまたは名前で指定したレイヤーを取得します。次に、PdfLayer.Visibility プロパティを使用してレイヤーを表示または非表示にします。以下に詳細な操作手順を示します。
- PdfDocument インスタンスを作成します。
- PdfDocument.LoadFromFile() メソッドを使用してサンプル PDF をロードします。
- PdfDocument.Layers.Visibility プロパティを使用して、指定したレイヤーの可視性を設定します。
- PdfDocument.SaveToFile() メソッドを使用して結果ドキュメントを保存します。
- C#
- VB.NET
using Spire.Pdf;
using Spire.Pdf.Graphics.Layer;
namespace HideLayer
{
class Program
{
static void Main(string[] args)
{
//PdfDocumentインスタンスを作成する
PdfDocument pdf = new PdfDocument();
//サンプルPDFドキュメントをロードする
pdf.LoadFromFile("AddLayers.pdf");
//指定したレイヤーをインデックスで非表示にする
pdf.Layers[0].Visibility = PdfVisibility.Off;
//指定したレイヤーを名前で非表示にする
//pdf.Layers["Watermark"].Visibility = PdfVisibility.Off;
//結果ドキュメントを保存する
pdf.SaveToFile("HideLayer.pdf");
}
}
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics.Layer
Namespace HideLayer
Class Program
Private Shared Sub Main(ByVal args() As String)
'PdfDocumentインスタンスを作成する
Dim pdf As PdfDocument = New PdfDocument
'サンプルPDFドキュメントをロードする
pdf.LoadFromFile("AddLayers.pdf")
'指定したレイヤーをインデックスで非表示にする
pdf.Layers(0).Visibility = PdfVisibility.Off
'指定したレイヤーを名前で非表示にする
'pdf.Layers["Watermark"].Visibility = PdfVisibility.Off;
'結果ドキュメントを保存する
pdf.SaveToFile("HideLayer.pdf")
End Sub
End Class
End Namespace
C# とVB.NET で PDF のレイヤーを削除する
Spire.PDF for .NET では、PdfDocument.Layers.RemoveLayer(string) メソッドを使用して、既存のレイヤーを名前で削除することがサポートします。ただし、同名の PDF レイヤーが存在する場合があります。このメソッドは、同じ名前のすべての PDF レイヤーを削除します。詳細な手順は次のとおりです。
- PdfDocument インスタンスを作成します。
- PdfDocument.LoadFromFile() メソッドを使用して、PDF ドキュメントをロードします。
- PdfDocument.Layers.RemoveLayer(string) メソッドを使用して、指定したレイヤーを名前で削除します。
- PdfDocument.SaveToFile() メソッドを使用して結果ドキュメントを保存します。
- C#
- VB.NET
using Spire.Pdf;
namespace DeleteLayer
{
class Program
{
static void Main(string[] args)
{
//PdfDocumentインスタンスを作成する
PdfDocument pdf = new PdfDocument();
//PDFドキュメントをロードする
pdf.LoadFromFile("AddLayers.pdf");
//名前でレイヤーを削除する
pdf.Layers.RemoveLayer(("透かし"));
//結果ドキュメントを保存する
pdf.SaveToFile("DeleteLayer.pdf", FileFormat.PDF);
}
}
}
Imports Spire.Pdf
Namespace DeleteLayer
Class Program
Private Shared Sub Main(ByVal args() As String)
'PdfDocumentインスタンスを作成する
Dim pdf As PdfDocument = New PdfDocument
'PDFドキュメントをロードする
pdf.LoadFromFile("AddLayers.pdf")
'名前でレイヤーを削除する
pdf.Layers.RemoveLayer("透かし")
'結果ドキュメントを保存する
pdf.SaveToFile("DeleteLayer.pdf", FileFormat.PDF)
End Sub
End Class
End Namespace
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。