diff --git a/src/UglyToad.PdfPig.Tests/Integration/Documents/ssm2163.pdf b/src/UglyToad.PdfPig.Tests/Integration/Documents/ssm2163.pdf
new file mode 100644
index 00000000..33b9e805
Binary files /dev/null and b/src/UglyToad.PdfPig.Tests/Integration/Documents/ssm2163.pdf differ
diff --git a/src/UglyToad.PdfPig.Tests/Writer/PdfDocumentBuilderTests.cs b/src/UglyToad.PdfPig.Tests/Writer/PdfDocumentBuilderTests.cs
index 86f3bf57..83d7fcb2 100644
--- a/src/UglyToad.PdfPig.Tests/Writer/PdfDocumentBuilderTests.cs
+++ b/src/UglyToad.PdfPig.Tests/Writer/PdfDocumentBuilderTests.cs
@@ -11,6 +11,8 @@
using System.Collections.Generic;
using Tests.Fonts.TrueType;
using Xunit;
+ using System;
+ using UglyToad.PdfPig.Graphics.Operations.InlineImages;
public class PdfDocumentBuilderTests
{
@@ -167,6 +169,9 @@
return result;
}
+
+
+
[Fact]
public void CanWriteSinglePageStandard14FontHelloWorld()
{
@@ -1138,6 +1143,45 @@
Assert.True(tw.WroteCrossReferenceTable);
}
+ [Fact]
+ public void CanCopyInLineImage()
+ {
+ var docPath = IntegrationHelpers.GetDocumentPath("ssm2163.pdf");
+
+ using (var docOrig = PdfDocument.Open(docPath))
+ {
+
+ // Copy original document with inline images into pdf bytes for opening and checking.
+ PdfDocumentBuilder pdfBuilder = new PdfDocumentBuilder();
+ var numberOfPages = docOrig.NumberOfPages;
+ for (int pageNumber = 1; pageNumber <= numberOfPages; pageNumber++)
+ {
+ var sourcePage = docOrig.GetPage(pageNumber);
+ pdfBuilder.AddPage(sourcePage.Width, sourcePage.Height).CopyFrom(sourcePage);
+ }
+ var pdfBytes = pdfBuilder.Build();
+
+
+ using (var docCopy = PdfDocument.Open(pdfBytes))
+ {
+ var pageNum = 7;
+ var origPage = docOrig.GetPage(pageNum);
+ var copyPage = docCopy.GetPage(pageNum);
+
+ var opsOrig = origPage.Operations.Where(v => v.Operator == BeginInlineImageData.Symbol).Select(v => (BeginInlineImageData)v).ToArray();
+ var opCopy = copyPage.Operations.Where(v => v.Operator == BeginInlineImageData.Symbol).Select(v => (BeginInlineImageData)v).ToArray();
+
+ var dictOrig = opCopy.Select(v => v.Dictionary).ToArray();
+ var dictCopy = opCopy.Select(v => v.Dictionary).ToArray();
+
+ var exampleCopiedDictionary = dictCopy.FirstOrDefault();
+
+ Assert.NotNull(exampleCopiedDictionary);
+ Assert.True(exampleCopiedDictionary.Count>0);
+ }
+ }
+ }
+
private static void WriteFile(string name, byte[] bytes, string extension = "pdf")
{
try
diff --git a/src/UglyToad.PdfPig/Graphics/Operations/InlineImages/BeginInlineImageData.cs b/src/UglyToad.PdfPig/Graphics/Operations/InlineImages/BeginInlineImageData.cs
index 06a4bfaa..80490768 100644
--- a/src/UglyToad.PdfPig/Graphics/Operations/InlineImages/BeginInlineImageData.cs
+++ b/src/UglyToad.PdfPig/Graphics/Operations/InlineImages/BeginInlineImageData.cs
@@ -3,8 +3,9 @@
using System;
using System.Collections.Generic;
using System.IO;
- using Tokens;
-
+ using Tokens;
+ using UglyToad.PdfPig.Writer;
+
///
///
/// Begin the image data for an inline image object.
@@ -40,7 +41,17 @@
///
public void Write(Stream stream)
- {
+ {
+ var tokenWriter = TokenWriter.Instance;
+ foreach (var item in Dictionary)
+ {
+ var name = item.Key;
+ var value = item.Value;
+
+ stream.WriteText($"{name} ");
+ tokenWriter.WriteToken(value, stream);
+ stream.WriteNewLine();
+ }
stream.WriteText(Symbol);
stream.WriteNewLine();
}
diff --git a/src/UglyToad.PdfPig/Writer/TokenWriter.cs b/src/UglyToad.PdfPig/Writer/TokenWriter.cs
index 05cac5b2..2d0429b4 100644
--- a/src/UglyToad.PdfPig/Writer/TokenWriter.cs
+++ b/src/UglyToad.PdfPig/Writer/TokenWriter.cs
@@ -80,6 +80,11 @@
'%'
};
+ ///
+ /// Single global instance
+ ///
+ public static TokenWriter Instance { get; } = new TokenWriter();
+
///
/// Writes the given input token to the output stream with the correct PDF format and encoding including whitespace and line breaks as applicable.
///