enable re-use of jpeg images between or within pages

returns a reference to the added image object when calling addjpeg so that it can be shared between or within pages meaning the image is only written to the output file once but can appear multiple times.

this image doesn't seem to be displaying correctly in adobe reader.
This commit is contained in:
Eliot Jones
2020-03-15 17:30:30 +00:00
parent 19462d79f0
commit 7212b9e38c
2 changed files with 134 additions and 4 deletions

View File

@@ -436,6 +436,64 @@
}
}
[Fact]
public void CanWrite2PagesSharingJpeg()
{
var builder = new PdfDocumentBuilder();
var page = builder.AddPage(PageSize.A4);
var font = builder.AddStandard14Font(Standard14Font.Helvetica);
page.AddText("Smile", 12, new PdfPoint(25, page.PageSize.Height - 52), font);
var img = IntegrationHelpers.GetDocumentPath("smile-250-by-160.jpg", false);
var expectedBounds1 = new PdfRectangle(25, page.PageSize.Height - 300, 200, page.PageSize.Height - 200);
var imageBytes = File.ReadAllBytes(img);
var expectedBounds2 = new PdfRectangle(25, 600, 75, 650);
var jpeg = page.AddJpeg(imageBytes, expectedBounds1);
page.AddJpeg(jpeg, expectedBounds2);
var expectedBounds3 = new PdfRectangle(30, 500, 130, 550);
var page2 = builder.AddPage(PageSize.A4);
page2.AddJpeg(jpeg, expectedBounds3);
var bytes = builder.Build();
WriteFile(nameof(CanWrite2PagesSharingJpeg), bytes);
using (var document = PdfDocument.Open(bytes))
{
var page1 = document.GetPage(1);
Assert.Equal("Smile", page1.Text);
var page1Images = page1.GetImages().ToList();
Assert.Equal(2, page1Images.Count);
var image1 = page1Images[0];
Assert.Equal(expectedBounds1, image1.Bounds);
var image2 = page1Images[1];
Assert.Equal(expectedBounds2, image2.Bounds);
var page2Doc = document.GetPage(2);
var image3 = Assert.Single(page2Doc.GetImages());
Assert.NotNull(image3);
Assert.Equal(expectedBounds3, image3.Bounds);
Assert.Equal(imageBytes, image1.RawBytes);
Assert.Equal(imageBytes, image2.RawBytes);
Assert.Equal(imageBytes, image3.RawBytes);
}
}
private static void WriteFile(string name, byte[] bytes)
{
try