public void Serialize(PdfWriter writer, object item, IndirectObjectDictionary references) { var resources = (Resources)item; writer.WriteDictionaryStart(); if (resources.Fonts?.Count > 0) { writer.WriteRaw("Font", PdfTokens.StartDictionary); for (var i = 0; i < resources.Fonts.Count; i++) { var fontRef = references[resources.Fonts[i]]; writer.WriteReference($"{resources.Fonts[i].Id.ToString().Replace("-", "")}", fontRef); } writer.WriteLine(PdfTokens.EndDictionary); } if (resources.Images?.Count > 0) { writer.WriteRaw("XObject", PdfTokens.StartDictionary); for (var i = 0; i < resources.Images.Count; i++) { var imgRef = references[resources.Images[i]]; writer.WriteReference($"{resources.Images[i].Id.ToString().Replace("-", "")}", imgRef); } writer.WriteLine(PdfTokens.EndDictionary); } writer.WriteDictionaryEnd(); }
public void Serialize(PdfWriter writer, object item, IndirectObjectDictionary references) { var trailer = (PdfTrailer)item; writer.WriteDictionaryStart(); writer.WriteRaw("Size", trailer.Size); writer.WriteReference("Root", trailer.Root); writer.WriteDictionaryEnd(); }
public void Serialize(PdfWriter writer, object item, IndirectObjectDictionary references) { var catalog = (Catalog)item; writer.WriteDictionaryStart(); writer.WriteType(catalog.Type); writer.WriteReference(nameof(catalog.Pages), references[catalog.Pages]); writer.WriteDictionaryEnd(); }
public void Serialize(PdfWriter writer, object item, IndirectObjectDictionary references) { var font = (Font)item; writer.WriteDictionaryStart(); writer.WriteType(font.Type); writer.WriteSubtype(font.Subtype.ToString()); writer.WriteName("BaseFont", font.BaseFont); writer.WriteDictionaryEnd(); }
public void Serialize(PdfWriter writer, object item, IndirectObjectDictionary references) { var pageNode = (PageNode)item; writer.WriteDictionaryStart(); writer.WriteType(pageNode.Type); writer.WriteRaw(nameof(pageNode.Count), pageNode.Count); writer.WriteReferences(nameof(pageNode.Kids), pageNode.Kids.Select(k => references[k])); writer.WriteDictionaryEnd(); }
public void Serialize(PdfWriter writer, object item, IndirectObjectDictionary references) { var xrefTable = (XrefTable)item; writer.WriteLine($"0 {xrefTable.Entries.Count}"); foreach (var xref in xrefTable.Entries) { var offset = xref.Offset.ToString().PadLeft(10, '0'); var generation = xref.Reference.Generation.ToString().PadLeft(5, '0'); var free = xref.Free ? "f" : "n"; writer.WriteLine($"{offset} {generation} {free}"); } }
public SerializationResult SerializeTree(PdfWriter writer, IPdfObject root) { var references = new List <Guid>(); var indRefs = new IndirectObjectDictionary(); // Add empty GUID to represent the "free" object references.Add(Guid.Empty); var offsets = new List <int>(); // need to visit all nodes to reserve references for each node var nodesToSerialize = new ConcurrentQueue <IPdfObject>(); var nodesToVisit = new Stack <IPdfObject>(); nodesToVisit.Push(root); while (nodesToVisit.Count > 0) { var node = nodesToVisit.Pop(); if (node == null || indRefs.Contains(node)) { continue; } nodesToVisit.PushRange(node.GetChildren()); indRefs.Add(node); nodesToSerialize.Enqueue(node); } while (nodesToSerialize.TryDequeue(out IPdfObject node)) { offsets.Add((int)writer.Position); writer.WriteLine($"{indRefs[node].Identifier} 0 {PdfTokens.StartObject}"); SerdesFactory.GetFor(node).Serialize(writer, node, indRefs); writer.WriteLine(PdfTokens.EndObject); } return(new SerializationResult() { Offsets = offsets, References = indRefs }); }
public void Serialize(PdfWriter writer, object item, IndirectObjectDictionary references) { var img = (ImageExternalObject)item; writer.WriteDictionaryStart(); writer.WriteType(PdfObjectType.XObject); writer.WriteSubtype(img.Subtype.ToString()); writer.WriteRaw(nameof(img.Width), img.Width); writer.WriteRaw(nameof(img.Height), img.Height); writer.WriteName(nameof(img.ColorSpace), new Name(img.ColorSpace.ToString())); writer.WriteRaw(nameof(img.BitsPerComponent), img.BitsPerComponent); writer.WriteRaw("Length", img.Data.Length); writer.WriteDictionaryEnd(); writer.WriteLine(PdfTokens.Stream.Start); writer.Write(img.Data); writer.WriteLine(); writer.WriteLine(PdfTokens.Stream.End); }
public void Serialize(PdfWriter writer, object item, IndirectObjectDictionary references) { var page = (Page)item; writer.WriteDictionaryStart(); writer.WriteType(page.Type); writer.WriteReference(nameof(page.Parent), references[page.Parent]); writer.WriteRaw(nameof(page.Resources), string.Empty); SerdesFactory.GetFor(page.Resources).Serialize(writer, page.Resources, references); writer.WriteRaw(nameof(page.MediaBox), string.Empty); SerdesFactory.GetFor(page.MediaBox).Serialize(writer, page.MediaBox, references); writer.WriteReference(nameof(page.Contents), references[page.Contents]); writer.WriteDictionaryEnd(); }
public void Serialize(PdfWriter writer, object item, IndirectObjectDictionary references) { var contentStream = (ContentStream)item; var streamData = new StringBuilder(); foreach (var image in contentStream.ImageContent) { streamData.AppendLine(PdfTokens.Graphics.StateOperators.Save); // move/scale cm var xform = Transformer.GetTransform(new Rectangle(0, 0, 1), image.Rectangle); streamData.AppendLine($"{xform.M11} {xform.M12} {xform.M21} {xform.M22} {xform.M31} {xform.M32} {PdfTokens.Graphics.TransformOperators.ModifyTransformationMatrix}"); // Do image streamData.AppendLine($"/{image.Image.Id.ToString().Replace("-", "")} {PdfTokens.Graphics.ImageOperators.Draw}"); streamData.AppendLine(PdfTokens.Graphics.StateOperators.Restore); } foreach (var text in contentStream.TextContent) { streamData.AppendLine(PdfTokens.Text.Begin); streamData.AppendLine($"{text.FillColor.Red} {text.FillColor.Green} {text.FillColor.Blue} {PdfTokens.Graphics.ColorOperators.SetFillRGB}"); streamData.AppendLine($"/{text.Font.Id.ToString().Replace("-", "")} {text.FontSize} {PdfTokens.Text.StateOperators.FontSize}"); streamData.AppendLine($"{text.Rectangle.X} {text.Rectangle.Y} {PdfTokens.Text.PositioningOperators.MoveFromCurrent}"); streamData.AppendLine($"( {text.Text} ) {PdfTokens.Text.ShowingOperators.Show}"); streamData.AppendLine(PdfTokens.Text.End); } var streamContents = streamData.ToString(); writer.WriteDictionaryStart(); writer.WriteRaw("Length", streamContents.Length); writer.WriteDictionaryEnd(); writer.WriteLine(PdfTokens.Stream.Start); writer.Write(streamContents); writer.WriteLine(PdfTokens.Stream.End); }
public void Serialize(PdfWriter writer, object item, IndirectObjectDictionary references) { var rect = (Rectangle)item; writer.Write($"[{rect.X} {rect.Y} {rect.Width} {rect.Height}]"); }