Skip to content

Commit e3c8e5e

Browse files
committed
Allow specifying the pdf format in the constructor of the PdfWriteDefines (#1931).
1 parent 615f97c commit e3c8e5e

File tree

2 files changed

+48
-12
lines changed

2 files changed

+48
-12
lines changed

src/Magick.NET/Formats/Pdf/PdfWriteDefines.cs

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,17 @@ namespace ImageMagick.Formats;
1212
/// </summary>
1313
public sealed class PdfWriteDefines : IWriteDefines
1414
{
15+
private static readonly List<MagickFormat> AllowedFormats = [MagickFormat.Pdf, MagickFormat.Pdfa];
16+
17+
private readonly MagickFormat _format;
18+
19+
/// <summary>
20+
/// Initializes a new instance of the <see cref="PdfWriteDefines"/> class.
21+
/// </summary>
22+
/// <param name="format">The pdf format.</param>
23+
public PdfWriteDefines(MagickFormat format = MagickFormat.Pdf)
24+
=> _format = CheckFormat(format);
25+
1526
/// <summary>
1627
/// Gets or sets the author of the pdf document (pdf:author).
1728
/// </summary>
@@ -31,7 +42,7 @@ public sealed class PdfWriteDefines : IWriteDefines
3142
/// Gets the format where the defines are for.
3243
/// </summary>
3344
public MagickFormat Format
34-
=> MagickFormat.Pdf;
45+
=> _format;
3546

3647
/// <summary>
3748
/// Gets or sets the keywords of the pdf document (pdf:keywords).
@@ -81,40 +92,48 @@ public IEnumerable<IDefine> Defines
8192
get
8293
{
8394
if (Author?.Length > 0)
84-
yield return new MagickDefine(Format, "author", Author);
95+
yield return new MagickDefine(MagickFormat.Pdf, "author", Author);
8596

8697
if (CreationTime is not null)
87-
yield return new MagickDefine(Format, "create-epoch", ToUnixTimeSeconds(CreationTime.Value));
98+
yield return new MagickDefine(MagickFormat.Pdf, "create-epoch", ToUnixTimeSeconds(CreationTime.Value));
8899

89100
if (Creator?.Length > 0)
90-
yield return new MagickDefine(Format, "creator", Creator);
101+
yield return new MagickDefine(MagickFormat.Pdf, "creator", Creator);
91102

92103
if (Keywords?.Length > 0)
93-
yield return new MagickDefine(Format, "keywords", Keywords);
104+
yield return new MagickDefine(MagickFormat.Pdf, "keywords", Keywords);
94105

95106
if (ModificationTime is not null)
96-
yield return new MagickDefine(Format, "modify-epoch", ToUnixTimeSeconds(ModificationTime.Value));
107+
yield return new MagickDefine(MagickFormat.Pdf, "modify-epoch", ToUnixTimeSeconds(ModificationTime.Value));
97108

98109
if (NoIdentifier == true)
99-
yield return new MagickDefine(Format, "no-identifier", NoIdentifier.Value);
110+
yield return new MagickDefine(MagickFormat.Pdf, "no-identifier", NoIdentifier.Value);
100111

101112
if (Producer?.Length > 0)
102-
yield return new MagickDefine(Format, "producer", Producer);
113+
yield return new MagickDefine(MagickFormat.Pdf, "producer", Producer);
103114

104115
if (Subject?.Length > 0)
105-
yield return new MagickDefine(Format, "subject", Subject);
116+
yield return new MagickDefine(MagickFormat.Pdf, "subject", Subject);
106117

107118
if (Thumbnail.HasValue)
108-
yield return new MagickDefine(Format, "thumbnail", Thumbnail.Value);
119+
yield return new MagickDefine(MagickFormat.Pdf, "thumbnail", Thumbnail.Value);
109120

110121
if (Version.HasValue)
111-
yield return new MagickDefine(Format, "version", Version.Value.ToString(".0", CultureInfo.InvariantCulture));
122+
yield return new MagickDefine(MagickFormat.Pdf, "version", Version.Value.ToString(".0", CultureInfo.InvariantCulture));
112123

113124
if (Title?.Length > 0)
114-
yield return new MagickDefine(Format, "title", Title);
125+
yield return new MagickDefine(MagickFormat.Pdf, "title", Title);
115126
}
116127
}
117128

129+
private static MagickFormat CheckFormat(MagickFormat format)
130+
{
131+
if (!AllowedFormats.Contains(format))
132+
throw new ArgumentException("The specified format is not a pdf format.", nameof(format));
133+
134+
return format;
135+
}
136+
118137
private static long ToUnixTimeSeconds(DateTime value)
119138
{
120139
var dateTimeOffset = (DateTimeOffset)value.ToUniversalTime();

tests/Magick.NET.Tests/Formats/Pdf/PdfWriteDefinesTests/TheConstructor.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright Dirk Lemstra https://github.com/dlemstra/Magick.NET.
22
// Licensed under the Apache License, Version 2.0.
33

4+
using System;
45
using ImageMagick;
56
using ImageMagick.Formats;
67
using Xunit;
@@ -29,5 +30,21 @@ public void ShouldNotSetAnyDefine()
2930
Assert.Null(image.Settings.GetDefine(MagickFormat.Pdf, "title"));
3031
Assert.Null(image.Settings.GetDefine(MagickFormat.Pdf, "version"));
3132
}
33+
34+
[Fact]
35+
public void ShouldThrowExceptionWhenFormatIsInvalid()
36+
{
37+
var exception = Assert.Throws<ArgumentException>("format", () => new PdfWriteDefines(MagickFormat.Png));
38+
Assert.Contains("The specified format is not a pdf format.", exception.Message);
39+
}
40+
41+
[Theory]
42+
[InlineData(MagickFormat.Pdf)]
43+
[InlineData(MagickFormat.Pdfa)]
44+
public void ShouldAllowSpecifyingPdfFormats(MagickFormat format)
45+
{
46+
var defines = new PdfWriteDefines(format);
47+
Assert.Equal(format, defines.Format);
48+
}
3249
}
3350
}

0 commit comments

Comments
 (0)