Skip to content

Commit ab421f4

Browse files
committed
Updated imagesharp + can reuse pdf image on multiple pages
1 parent 5d969c1 commit ab421f4

File tree

7 files changed

+63
-20
lines changed

7 files changed

+63
-20
lines changed

src/Synercoding.FileFormats.Pdf/Helpers/IStreamWriteable.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Synercoding.FileFormats.Pdf.Helpers
44
{
5-
internal interface IStreamWriteable
5+
public interface IStreamWriteable
66
{
77
/// <summary>
88
/// Write the object to the provided stream

src/Synercoding.FileFormats.Pdf/PdfInternals/Objects/IPdfObject.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
namespace Synercoding.FileFormats.Pdf.PdfInternals.Objects
55
{
6-
internal interface IPdfObject : IStreamWriteable, IDisposable
6+
public interface IPdfObject : IStreamWriteable, IDisposable
77
{
88
PdfReference Reference { get; }
99
bool IsWritten { get; }

src/Synercoding.FileFormats.Pdf/PdfInternals/Objects/Image.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
using SixLabors.ImageSharp;
2-
using SixLabors.ImageSharp.PixelFormats;
32
using Synercoding.FileFormats.Pdf.Extensions;
43
using System;
54
using System.IO;
65

76
namespace Synercoding.FileFormats.Pdf.PdfInternals.Objects
87
{
9-
internal class Image : IPdfObject, IDisposable
8+
public class Image : IPdfObject, IDisposable
109
{
11-
private readonly Image<Rgba32> _image;
10+
private readonly SixLabors.ImageSharp.Image _image;
1211
private bool _disposed;
1312

14-
public Image(PdfReference id, Image<Rgba32> image)
13+
internal Image(PdfReference id, SixLabors.ImageSharp.Image image)
1514
{
1615
Reference = id;
1716
_image = image;

src/Synercoding.FileFormats.Pdf/PdfInternals/PdfReference.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace Synercoding.FileFormats.Pdf.PdfInternals
22
{
3-
internal struct PdfReference
3+
public struct PdfReference
44
{
55
public PdfReference(int objectId)
66
: this(objectId, 0)

src/Synercoding.FileFormats.Pdf/PdfPage.cs

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using SixLabors.ImageSharp.PixelFormats;
2+
using SixLabors.ImageSharp.Processing;
23
using Synercoding.FileFormats.Pdf.Helpers;
34
using Synercoding.FileFormats.Pdf.PdfInternals.Objects;
45
using Synercoding.FileFormats.Pdf.PdfInternals.XRef;
@@ -71,7 +72,7 @@ public Rectangle TrimBox
7172
/// <param name="image">The image to be added</param>
7273
/// <param name="rectangle">The <see cref="Rectangle"/> that represents the placement on the page</param>
7374
/// <returns>This <see cref="PdfPage"/> so calls can be chained.</returns>
74-
public PdfPage AddImage(ImageSharp.Image<Rgba32> image, Rectangle rectangle)
75+
public PdfPage AddImage(ImageSharp.Image image, Rectangle rectangle)
7576
{
7677
return _addImage(image, rectangle, true);
7778
}
@@ -104,7 +105,7 @@ public PdfPage AddImage(Stream image, Rectangle rectangle)
104105
/// <param name="image">The image to be added</param>
105106
/// <param name="matrix">The <see cref="Matrix"/> that represents the placement on the page</param>
106107
/// <returns>This <see cref="PdfPage"/> so calls can be chained.</returns>
107-
public PdfPage AddImage(ImageSharp.Image<Rgba32> image, Matrix matrix)
108+
public PdfPage AddImage(ImageSharp.Image image, Matrix matrix)
108109
{
109110
return _addImage(image, matrix, true);
110111
}
@@ -131,32 +132,64 @@ public PdfPage AddImage(Stream image, Matrix matrix)
131132
return _addImage(ImageSharp.Image.Load(image), matrix, false);
132133
}
133134

134-
private PdfPage _addImage(ImageSharp.Image<Rgba32> image, Rectangle rectangle, bool clone)
135+
/// <summary>
136+
/// Add image to the <see cref="PdfPage"/>
137+
/// </summary>
138+
/// <param name="image">The image to be added</param>
139+
/// <param name="rectangle">The <see cref="Rectangle"/> that represents the placement on the page</param>
140+
/// <returns>This <see cref="PdfPage"/> so calls can be chained.</returns>
141+
public PdfPage AddImage(Image image, Rectangle rectangle)
142+
{
143+
var matrix = new Matrix(rectangle.URX - rectangle.LLX, 0, 0, rectangle.URY - rectangle.LLY, rectangle.LLX, rectangle.LLY);
144+
return AddImage(image, matrix);
145+
}
146+
147+
/// <summary>
148+
/// Add image to the <see cref="PdfPage"/>
149+
/// </summary>
150+
/// <param name="image">The image to be added</param>
151+
/// <param name="matrix">The <see cref="Matrix"/> that represents the placement on the page</param>
152+
/// <returns>This <see cref="PdfPage"/> so calls can be chained.</returns>
153+
public PdfPage AddImage(Image image, Matrix matrix)
154+
{
155+
var key = _addImageToResources(image);
156+
ContentStream.AddImage(key, matrix);
157+
158+
return this;
159+
}
160+
161+
private PdfPage _addImage(ImageSharp.Image image, Rectangle rectangle, bool clone)
135162
{
136163
var matrix = new Matrix(rectangle.URX - rectangle.LLX, 0, 0, rectangle.URY - rectangle.LLY, rectangle.LLX, rectangle.LLY);
137164

138165
return _addImage(image, matrix, clone);
139166
}
140167

141-
private PdfPage _addImage(ImageSharp.Image<Rgba32> image, Matrix matrix, bool clone)
168+
private PdfPage _addImage(ImageSharp.Image image, Matrix matrix, bool clone)
142169
{
143170
var key = _addImageToResources(image, clone);
144171
ContentStream.AddImage(key, matrix);
145172

146173
return this;
147174
}
148175

149-
private string _addImageToResources(ImageSharp.Image<Rgba32> image, bool clone)
176+
private string _addImageToResources(ImageSharp.Image image, bool clone)
150177
{
151-
var key = "Im" + System.Threading.Interlocked.Increment(ref _pageCounter).ToString().PadLeft(6, '0');
152-
var id = _tableBuilder.ReserveId();
153-
154178
if (clone)
155179
{
156-
image = image.Clone();
180+
image = image.Clone(ctx => { });
157181
}
158182

159-
_images.Add(key, new Image(id, image));
183+
var id = _tableBuilder.ReserveId();
184+
185+
return _addImageToResources(new Image(id, image));
186+
}
187+
188+
private string _addImageToResources(Image image)
189+
{
190+
var key = "Im" + System.Threading.Interlocked.Increment(ref _pageCounter).ToString().PadLeft(6, '0');
191+
192+
_images.Add(key, image);
160193

161194
return key;
162195
}

src/Synercoding.FileFormats.Pdf/PdfWriter.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,17 @@ public PdfWriter AddPage(Action<PdfPage> pageAction)
7676
return this;
7777
}
7878

79+
public Image AddImage(SixLabors.ImageSharp.Image image)
80+
{
81+
var id = _tableBuilder.ReserveId();
82+
83+
var pdfImage = new Image(id, image);
84+
85+
pdfImage.WriteToStream(_stream);
86+
87+
return pdfImage;
88+
}
89+
7990
/// <summary>
8091
/// Set meta information for this document
8192
/// </summary>

src/Synercoding.FileFormats.Pdf/Synercoding.FileFormats.Pdf.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<TargetFramework>netstandard1.6</TargetFramework>
55
<LangVersion>7.3</LangVersion>
66
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
7-
<Version>1.0.0-alpha003</Version>
7+
<Version>1.0.0-alpha004</Version>
88
<Authors>Synercoding</Authors>
99
<Description>Contains classes which makes it easy to quickly create a pdf file</Description>
1010
<DocumentationFile>bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml</DocumentationFile>
@@ -15,7 +15,7 @@
1515
</PropertyGroup>
1616

1717
<ItemGroup>
18-
<PackageReference Include="SixLabors.ImageSharp" Version="1.0.0-beta0006" />
18+
<PackageReference Include="SixLabors.ImageSharp" Version="1.0.0-beta0007" />
1919
<PackageReference Include="System.Memory" Version="4.5.2" />
2020
</ItemGroup>
2121

0 commit comments

Comments
 (0)