protected virtual void RenderImageInformation(PDFContextBase context, PDFWriter writer) { writer.WriteDictionaryNumberEntry("Width", this.PixelWidth); writer.WriteDictionaryNumberEntry("Height", this.PixelHeight); //writer.WriteDictionaryNumberEntry("Length", this.Data.LongLength); //- commented for data length fix if (this.ColorSpace == ColorSpace.G) { writer.WriteDictionaryNameEntry("ColorSpace", "DeviceGray"); } else if (this.ColorSpace == ColorSpace.Custom) { this.RenderCustomColorSpace(writer); } else if (this.ColorSpace == Drawing.ColorSpace.CMYK) { writer.WriteDictionaryNameEntry("ColorSpace", "DeviceCMYK"); } else { writer.WriteDictionaryNameEntry("ColorSpace", "DeviceRGB"); } WriteFilterNames(context, writer); writer.WriteDictionaryNumberEntry("BitsPerComponent", this.BitsPerColor); if (context.ShouldLogDebug) { context.TraceLog.Add(TraceLevel.Debug, "Image Data", "Rendered image information dictionary : cs=" + this.ColorSpace + ", w=" + this.PixelWidth + ", h=" + this.PixelHeight + ", bpc=" + BitsPerColor); } }
protected virtual void WriteStandardSecurityEntries(PDFWriter writer) { writer.WriteDictionaryNumberEntry("V", this.EncryptionVersion); writer.WriteDictionaryNumberEntry("R", this.EncryptionRevision); writer.WriteDictionaryNumberEntry("Length", this.EncryptionKeySizeBytes * 8); writer.BeginDictionaryEntry("O"); writer.WriteStringHex(this.OwnerHash); writer.EndDictionaryEntry(); writer.BeginDictionaryEntry("U"); writer.WriteStringHex(this.UserHash); writer.EndDictionaryEntry(); writer.WriteDictionaryNumberEntry("P", (int)this.ProtectionFlags); }
protected virtual PDFObjectRef DoWritePage(PDFRenderContext context, PDFWriter writer, PDFObjectRef parent) { PDFObjectRef pg = writer.BeginPage(context.PageIndex); this.PageObjectRef = pg; writer.BeginDictionary(); writer.WriteDictionaryNameEntry("Type", "Page"); writer.WriteDictionaryObjectRefEntry("Parent", parent); writer.BeginDictionaryEntry("MediaBox"); writer.WriteArrayRealEntries(0.0, 0.0, this.Size.Width.ToPoints().Value, this.Size.Height.ToPoints().Value); writer.EndDictionaryEntry(); if (this.FullStyle.IsValueDefined(StyleKeys.PageAngle)) { int value = this.FullStyle.GetValue(StyleKeys.PageAngle, 0); writer.WriteDictionaryNumberEntry("Rotate", value); } context.PageSize = this.Size; context.Offset = new PDFPoint(); context.Space = context.PageSize; if (context.ShouldLogVerbose) { context.TraceLog.Add(TraceLevel.Verbose, "Layout Page", "Rendering the contents of page : " + this.PageIndex); } PDFObjectRef content = this.OutputContent(context, writer); if (content != null) { writer.WriteDictionaryObjectRefEntry("Contents", content); } if (context.ShouldLogVerbose) { context.TraceLog.Add(TraceLevel.Verbose, "Layout Page", "Rendering the resources of page : " + this.PageIndex); } //PDFObjectRef[] annots = this.DoWriteAnnotations(context, writer); //if (null != annots && annots.Length > 0) //{ // writer.BeginDictionaryEntry("Annots"); // writer.WriteArrayRefEntries(true, annots); // writer.EndDictionaryEntry(); //} PDFObjectRef ress = this.DoWriteResource(context, writer); if (ress != null) { writer.WriteDictionaryObjectRefEntry("Resources", ress); } DoWriteArtefacts(context, writer); writer.EndDictionary(); writer.EndPage(context.PageIndex); return(pg); }
private PDFObjectRef RenderAlpaImageData(PDFContextBase context, PDFWriter writer) { context.TraceLog.Add(TraceLevel.Debug, "IMAGE", "Rendering image alpha mask"); PDFObjectRef mask = writer.BeginObject(); writer.BeginDictionary(); writer.WriteDictionaryNameEntry("Type", "XObject"); writer.WriteDictionaryNameEntry("Subtype", "Image"); writer.WriteDictionaryNumberEntry("Width", this.PixelWidth); writer.WriteDictionaryNumberEntry("Height", this.PixelHeight); //writer.WriteDictionaryNumberEntry("Length", this.AlphaData.LongLength); writer.WriteDictionaryNameEntry("ColorSpace", "DeviceGray"); writer.WriteDictionaryNumberEntry("BitsPerComponent", 8); this.WriteFilterNames(context, writer); //writer.EndDictionary(); writer.BeginStream(mask); byte[] data; if (this.HasFilter && this.ShouldApplyFilters(context)) { data = this.GetAlphaFilteredData(this.Filters, context); if (null == data) { data = this.ApplyFiltersToData(this.AlphaData, context); this.SetAlphaFilteredData(this.Filters, data, context); } } else { data = this.AlphaData; } writer.WriteRaw(data, 0, data.Length); writer.EndStream(); //inserted 15/01/15 - Write the filtered length, not the actua image data length to the dictionary. writer.WriteDictionaryNumberEntry("Length", data.Length); writer.EndDictionary(); //end of insert writer.EndObject(); return(mask); }
protected virtual PDFObjectRef RenderShadingDictionary(PDFContextBase context, PDFWriter writer) { PDFPoint offset = new PDFPoint(this.Start.X, this.Start.Y);// this.Start; PDFSize size = this.Size; PDFSize graphicsSize = new PDFSize(size.Width + offset.X, size.Height + offset.Y); var func = this._descriptor.GetGradientFunction(offset, size); var coords = GetCoords(offset, size, _descriptor.Size, _descriptor.XCentre, _descriptor.YCentre); writer.BeginDictionaryEntry("Shading"); writer.BeginDictionary(); writer.WriteDictionaryNumberEntry("ShadingType", (int)ShadingType.Radial); writer.WriteDictionaryNameEntry("ColorSpace", "DeviceRGB"); writer.WriteDictionaryBooleanEntry("AntiAlias", true); writer.BeginDictionaryEntry("BBox"); writer.WriteArrayRealEntries(true, offset.X.PointsValue, offset.Y.PointsValue, offset.X.PointsValue + size.Width.PointsValue, offset.Y.PointsValue + size.Height.PointsValue); writer.EndDictionaryEntry(); writer.BeginDictionaryEntry("Coords"); writer.WriteArrayRealEntries(true, coords); writer.EndDictionaryEntry(); writer.BeginDictionaryEntry("Extend"); writer.BeginArray(); writer.BeginArrayEntry(); writer.WriteBooleanS(true); writer.EndArrayEntry(); writer.BeginArrayEntry(); writer.WriteBooleanS(true); writer.EndArrayEntry(); writer.EndArray(); writer.EndDictionaryEntry(); if (null != func) { writer.BeginDictionaryEntry("Function"); func.WriteFunctionDictionary(context, writer); writer.EndDictionaryEntry(); } writer.EndDictionary();//shading return(null); }
private void WriteAPageLabel(PDFRenderContext context, PDFWriter writer, PDFPageNumberRegistration entry) { writer.WriteLine(); writer.BeginArrayEntry(); writer.WriteNumberS(entry.FirstPageIndex); writer.BeginDictionaryS(); string type; switch (entry.Group.NumberStyle) { case PageNumberStyle.Decimals: type = "D"; break; case PageNumberStyle.UppercaseRoman: type = "R"; break; case PageNumberStyle.LowercaseRoman: type = "r"; break; case PageNumberStyle.UppercaseLetters: type = "A"; break; case PageNumberStyle.LowercaseLetters: type = "a"; break; default: type = ""; break; } if (!string.IsNullOrEmpty(type)) { writer.WriteDictionaryNameEntry("S", type); } if (entry.Group.NumberStart > 0) { writer.WriteDictionaryNumberEntry("St", entry.Group.NumberStart + entry.PreviousLinkedRegistrationPageCount); } writer.EndDictionary(); writer.EndArrayEntry(); if (context.ShouldLogVerbose) { context.TraceLog.Add(TraceLevel.Verbose, "Page Labels", "Output the page label entry starting at page index " + entry.FirstPageIndex + " with style " + entry.Group.NumberStyle + ", starting at " + entry.Group.NumberStart); } }
public PDFObjectRef OutputToPDF(PDFRenderContext context, PDFWriter writer) { if (this.Roots.Count > 0) { if (context.ShouldLogDebug) { context.TraceLog.Begin(TraceLevel.Verbose, "Outline Stack", "Starting to render the outline tree"); } PDFObjectRef outlines = writer.BeginObject(); writer.BeginDictionary(); writer.WriteDictionaryNameEntry("Type", "Outlines"); PDFObjectRef first, last; int count; this.RenderOutlineCollection(this.Roots, outlines, context, writer, out first, out last, out count); if (null != first) { writer.WriteDictionaryObjectRefEntry("First", first); } if (null != last) { writer.WriteDictionaryObjectRefEntry("Last", last); } if (count > 0) { writer.WriteDictionaryNumberEntry("Count", count); } writer.EndDictionary(); writer.EndObject();//outlines if (context.ShouldLogDebug) { context.TraceLog.End(TraceLevel.Verbose, "Outline Stack", "Finished rendering the outline tree"); } else if (context.ShouldLogVerbose) { context.TraceLog.Add(TraceLevel.Verbose, "Outline Stack", "Rendered the outline tree to indirect object " + outlines + " with first " + first + ", last " + last + " and count " + count); } return(outlines); } else { return(null); } }
public override void WriteFunctionDictionary(PDFContextBase context, PDFWriter writer) { writer.BeginDictionary(); writer.WriteDictionaryNumberEntry("FunctionType", 3); writer.BeginDictionaryEntry("Domain"); writer.WriteArrayRealEntries(this.DomainStart, this.DomainEnd); writer.EndDictionaryEntry(); //The bounds is the function extents of the functions writer.BeginDictionaryEntry("Bounds"); writer.BeginArray(); foreach (var boundary in this.Boundaries) { writer.BeginArrayEntry(); writer.WriteRealS(boundary.Bounds); writer.EndArrayEntry(); } writer.EndArray(); writer.EndDictionaryEntry(); //Write the array of function 2 (Axial aka Linear between 2 colours) List <double> encodes = new List <double>(); writer.BeginDictionaryEntry("Functions"); writer.BeginArray(); foreach (var func in this.Functions) { writer.BeginArrayEntry(); func.WriteFunctionDictionary(context, writer); writer.EndArrayEntry(); //May need to change these values encodes.Add(0); encodes.Add(1); } writer.EndArray(); writer.EndDictionaryEntry(); //Write the encodes for each of the functions 0 1 in a single array writer.BeginDictionaryEntry("Encode"); writer.WriteArrayRealEntries(encodes.ToArray()); writer.EndDictionaryEntry(); writer.EndDictionary(); }
internal PDFObjectRef Render(PDFName name, PDFContextBase context, PDFWriter writer) { if (context.ShouldLogDebug) { context.TraceLog.Begin(TraceLevel.Message, "Image Data", "Rendering image data for '" + name.ToString() + "'"); } PDFObjectRef renderref = writer.BeginObject(name.Value); writer.BeginDictionaryS(); writer.WriteDictionaryNameEntry("Name", name.Value); writer.WriteDictionaryNameEntry("Type", "XObject"); writer.WriteDictionaryNameEntry("Subtype", "Image"); RenderImageInformation(context, writer); //writer.EndDictionary(); //- commented for data length fix writer.BeginStream(renderref); int length = this.RenderImageStreamData(context, writer); writer.EndStream(); //Added for Data Length fix HRB 15/01/2015 writer.WriteDictionaryNumberEntry("Length", length); writer.EndDictionary(); //End of add writer.EndObject(); if (context.ShouldLogDebug) { context.TraceLog.End(TraceLevel.Message, "Image Data", "Completed render of the image data for '" + name + "' with source " + this.SourcePath); } else { context.TraceLog.Add(TraceLevel.Message, "Image Data", "Rendered the image data for '" + name.ToString() + "' with source " + this.SourcePath); } return(renderref); }
protected override PDFObjectRef DoRenderToPDF(PDFContextBase context, PDFWriter writer) { PDFObjectRef oref = writer.BeginObject(this.Name.Value); writer.BeginDictionary(); writer.WriteDictionaryNameEntry("Type", "Pattern"); writer.WriteDictionaryNumberEntry("PatternType", (int)this.PatternType); //Actual shading dictionary var shading = this.RenderShadingDictionary(context, writer); if (null != shading) { writer.WriteDictionaryObjectRefEntry("Shading", shading); } writer.EndDictionary(); writer.EndObject(); return(oref); }
public override void WriteFunctionDictionary(PDFContextBase context, PDFWriter writer) { writer.BeginDictionary(); writer.WriteDictionaryNumberEntry("FunctionType", 2); writer.BeginDictionaryEntry("Domain"); writer.WriteArrayRealEntries(this.DomainStart, this.DomainEnd); writer.EndDictionaryEntry(); writer.BeginDictionaryEntry("C0"); writer.WriteArrayRealEntries(this.ColorZero.Red.Value, this.ColorZero.Green.Value, this.ColorZero.Blue.Value); writer.EndDictionaryEntry(); writer.BeginDictionaryEntry("C1"); writer.WriteArrayRealEntries(this.ColorOne.Red.Value, this.ColorOne.Green.Value, this.ColorOne.Blue.Value); writer.EndDictionaryEntry(); writer.WriteDictionaryRealEntry("N", this.Exponent); writer.EndDictionary(); //function }
internal PDFObjectRef Render(PDFName name, PDFContextBase context, PDFWriter writer) { if (context.ShouldLogDebug) { context.TraceLog.Begin(TraceLevel.Message, "Path Data", "Rendering path data for '" + name.ToString() + "'"); } PDFObjectRef renderref = writer.BeginObject(name.Value); writer.BeginDictionaryS(); writer.WriteDictionaryNameEntry("Name", name.Value); writer.WriteDictionaryNameEntry("Type", "XObject"); writer.WriteDictionaryNameEntry("Subtype", "Image"); RenderPathInformation(context, writer, renderref); int length = this.RenderPathData(context, writer, renderref); writer.WriteDictionaryNumberEntry("Length", length); writer.EndDictionary(); //End of add writer.EndObject(); if (context.ShouldLogDebug) { context.TraceLog.End(TraceLevel.Message, "Path Data", "Completed render of the path data for '" + name.ToString()); } else { context.TraceLog.Add(TraceLevel.Message, "Path Data", "Rendered the path data for '" + name.ToString()); } return(renderref); }
private PDFObjectRef RenderOutlineItem(PDFOutlineRef outlineref, PDFObjectRef parent, PDFObjectRef prev, PDFRenderContext context, PDFWriter writer, out int count) { PDFOutline outline = outlineref.Outline; Scryber.Drawing.PDFColor c = outlineref.GetColor(); Scryber.Drawing.FontStyle fs = outlineref.GetFontStyle(); bool isopen = outlineref.GetIsOpen(); count = 1;//this one PDFObjectRef item = writer.BeginObject(); writer.BeginDictionary(); writer.WriteDictionaryObjectRefEntry("Parent", parent); writer.WriteDictionaryStringEntry("Title", outline.Title); writer.WriteDictionaryStringEntry("Dest", outline.DestinationName); if (null != c) { writer.BeginDictionaryEntry("C"); writer.BeginArray(); writer.WriteRealS(c.Red.Value, c.Green.Value, c.Blue.Value); writer.EndArray(); writer.EndDictionaryEntry(); } if (fs != Scryber.Drawing.FontStyle.Regular) { int f = 0; if ((fs & Scryber.Drawing.FontStyle.Bold) > 0) { f = 2; } if ((fs & Scryber.Drawing.FontStyle.Italic) > 0) { f += 1; } writer.WriteDictionaryNumberEntry("F", f); } if (null != prev) { writer.WriteDictionaryObjectRefEntry("Prev", prev); } if (context.ShouldLogVerbose) { context.TraceLog.Add(TraceLevel.Verbose, "Outline Stack", "Rendered outline item " + item + " with title '" + outline.Title + " and destination name " + outline.DestinationName); } if (outlineref.HasInnerItems) { if (context.ShouldLogDebug) { context.TraceLog.Begin(TraceLevel.Debug, "Outline Stack", "Started rendering inner outline items"); } int opencount; PDFObjectRef childfirst, childlast; this.RenderOutlineCollection(outlineref.InnerItems, item, context, writer, out childfirst, out childlast, out opencount); writer.WriteDictionaryObjectRefEntry("First", childfirst); writer.WriteDictionaryObjectRefEntry("Last", childlast); if (opencount > 0) { if (isopen) { writer.WriteDictionaryNumberEntry("Count", opencount); count += opencount; } else { writer.WriteDictionaryNumberEntry("Count", -opencount); } } if (context.ShouldLogDebug) { context.TraceLog.End(TraceLevel.Debug, "Outlines", " Finished rendering inner outline items"); } } //we don't close the dictionary here as we need the next entry written //It should be closed in the calling method return(item); }
protected override void RenderImageInformation(PDFContextBase context, PDFWriter writer) { base.RenderImageInformation(context, writer); writer.WriteDictionaryNumberEntry("ColorTransform", 1); }
// // methods // #region protected override PDFObjectRef DoRenderToPDF(PDFContextBase context, PDFWriter writer) /// <summary> /// Renders the tiling image /// </summary> /// <param name="context"></param> /// <param name="writer"></param> /// <returns></returns> protected override PDFObjectRef DoRenderToPDF(PDFContextBase context, PDFWriter writer) { IStreamFilter[] filters = writer.DefaultStreamFilters; PDFObjectRef pattern = writer.BeginObject(); writer.BeginDictionary(); writer.WriteDictionaryNameEntry("Type", "Pattern"); writer.WriteDictionaryNumberEntry("PatternType", (int)this.PatternType); writer.WriteDictionaryNumberEntry("PaintType", (int)this.PaintType); writer.WriteDictionaryNumberEntry("TilingType", (int)this.TilingType); writer.BeginDictionaryEntry("BBox"); PDFPoint offset = new PDFPoint(this.Start.X, this.Start.Y - this.ImageSize.Height);// this.Start; PDFSize size = this.ImageSize; PDFSize graphicsSize = new PDFSize(size.Width + offset.X, size.Height + offset.Y); writer.WriteArrayRealEntries(true, offset.X.PointsValue, offset.Y.PointsValue, offset.X.PointsValue + size.Width.PointsValue, offset.Y.PointsValue + size.Height.PointsValue); writer.EndDictionaryEntry(); writer.WriteDictionaryRealEntry("XStep", this.Step.Width.PointsValue); writer.WriteDictionaryRealEntry("YStep", this.Step.Height.PointsValue); PDFObjectRef all = this.Resources.WriteResourceList(context, writer); writer.WriteDictionaryObjectRefEntry("Resources", all); writer.BeginStream(pattern); using (PDFGraphics g = PDFGraphics.Create(writer, false, this, DrawingOrigin.TopLeft, graphicsSize, context)) { offset = new PDFPoint(offset.X, 0.0); g.PaintImageRef(this.Image, size, offset); } long len = writer.EndStream(); if (null != filters && filters.Length > 0) { writer.BeginDictionaryEntry("Length"); writer.WriteNumberS(len); writer.EndDictionaryEntry(); writer.BeginDictionaryEntry("Filter"); writer.BeginArray(); foreach (IStreamFilter filter in filters) { writer.BeginArrayEntry(); writer.WriteName(filter.FilterName); writer.EndArrayEntry(); } writer.EndArray(); writer.EndDictionaryEntry(); } else { writer.BeginDictionaryEntry("Length"); writer.WriteNumberS(len); writer.EndDictionaryEntry(); } writer.EndDictionary(); writer.EndObject(); return(pattern); }
protected override PDFObjectRef DoOutputToPDF(PDFRenderContext context, PDFWriter writer) { //Get the default font and size required for the DA (default Appearance value) var xObject = this._states[FormFieldAppearanceState.Normal]; if (null == xObject) { return(null); } PDFObjectRef root = writer.BeginObject(); var font = this._style.CreateFont(); var rsrc = xObject.Document.GetResource(Scryber.Resources.PDFResource.FontDefnResourceType, font.FullName, true); string da = rsrc.Name.ToString() + " " + font.Size.ToPoints().Value.ToString() + " Tf"; writer.BeginDictionary(); writer.WriteDictionaryNameEntry("Subtype", "Widget"); writer.WriteDictionaryStringEntry("T", this.Name); if (!string.IsNullOrEmpty(this.Value)) { writer.WriteDictionaryStringEntry("V", this.Value); } if (!string.IsNullOrEmpty(this.DefaultValue)) { writer.WriteDictionaryStringEntry("DV", this.DefaultValue); } writer.WriteDictionaryNumberEntry("Ff", (int)this.FieldOptions + (int)this.FieldType); writer.WriteDictionaryStringEntry("DA", da); writer.WriteDictionaryNameEntry("FT", GetFieldTypeName(this.FieldType)); if (null != this._page && null != this._page.PageObjectRef) { writer.WriteDictionaryObjectRefEntry("P", this._page.PageObjectRef); } //MK - appearance dictionary writer.BeginDictionaryEntry("MK"); writer.BeginDictionary(); if (this._style.IsValueDefined(Styles.StyleKeys.BorderColorKey)) { WriteInputColor(context, writer, "BC", this._style.Border.Color); } if (this._style.IsValueDefined(Styles.StyleKeys.BgColorKey)) { WriteInputColor(context, writer, "BG", this._style.Background.Color); } writer.EndDictionary(); writer.EndDictionaryEntry(); if (this._states.Count > 0) { _location = context.Offset; Drawing.PDFRect bounds = Drawing.PDFRect.Empty; writer.BeginDictionaryEntry("AP"); writer.BeginDictionary(); foreach (var kvp in _states) { xObject = kvp.Value; FormFieldAppearanceState state = kvp.Key; PDFObjectRef oref = xObject.OutputToPDF(context, writer); if (null != oref) { PDFSize sz = new Drawing.PDFSize(xObject.Width, xObject.Height); if (_size == PDFSize.Empty) { _size = sz; } else { if (_size.Width < sz.Width) { _size.Width = sz.Width; } if (_size.Height < sz.Height) { _size.Height = sz.Height; } } var name = GetFieldStateName(kvp.Key); writer.WriteDictionaryObjectRefEntry(name, oref); //We should have all states starting at the same location no matter what. this._location = xObject.Location; } } writer.EndDictionary(); writer.EndDictionaryEntry(); PDFReal left = context.Graphics.GetXPosition(_location.X); PDFReal top = context.Graphics.GetYPosition(_location.Y); PDFReal right = left + context.Graphics.GetXOffset(_size.Width); PDFReal bottom = top + context.Graphics.GetYOffset(_size.Height); writer.BeginDictionaryEntry("Rect"); writer.WriteArrayRealEntries(true, left.Value, bottom.Value, right.Value, top.Value); writer.EndDictionaryEntry(); } writer.EndDictionary(); writer.EndObject(); //context.Offset = new PDFPoint(context.Offset.X, context.Offset.Y + _size.Height); return(root); }
public PDFObjectRef RenderToPDF(string fullname, PDFContextBase context, PDFWriter writer) { if (context.ShouldLogDebug) { context.TraceLog.Add(TraceLevel.Debug, "Font Descriptor", "Rendering the font descriptor information"); } PDFObjectRef oref = writer.BeginObject(); writer.BeginDictionary(); writer.WriteDictionaryNameEntry("Type", "FontDescriptor"); writer.WriteDictionaryNameEntry("FontName", fullname); if (this.FontFamily != String.Empty) { writer.WriteDictionaryStringEntry("FontFamily", this.FontFamily); } if (this.BoundingBox != null && this.BoundingBox.Length > 0) { writer.BeginDictionaryEntry("FontBBox"); writer.WriteArrayNumberEntries(this.BoundingBox); writer.EndDictionaryEntry(); } if (this.FontStretch != FontStretch.Normal) { writer.WriteDictionaryStringEntry("FontStretch", this.FontStretch.ToString()); } if (this.Weight != 400) { writer.WriteDictionaryNumberEntry("FontWeight", this.Weight); } writer.WriteDictionaryNumberEntry("FontWeight", 700); writer.WriteDictionaryNumberEntry("Flags", (int)this.Flags); writer.WriteDictionaryNumberEntry("Ascent", (int)(this.Ascent * 0.6)); writer.WriteDictionaryNumberEntry("Descent", this.Descent); //if (this.Leading != 0.0) // writer.WriteDictionaryNumberEntry("Leading", this.Leading); if (this.CapHeight != 0.0) { writer.WriteDictionaryNumberEntry("CapHeight", this.CapHeight); } if (this.XHeight != 0.0) { writer.WriteDictionaryNumberEntry("XHeight", this.XHeight); } writer.WriteDictionaryNumberEntry("StemV", this.StemV); writer.WriteDictionaryNumberEntry("ItalicAngle", this.ItalicAngle); if (this.StemH != 0.0) { writer.WriteDictionaryNumberEntry("StemH", this.StemH); } if (this.AvgWidth != 0.0) { writer.WriteDictionaryNumberEntry("AvgWidth", this.AvgWidth); } if (this.MaxWidth != 0.0) { writer.WriteDictionaryNumberEntry("MaxWidth", this.MaxWidth); } if (this.MissingWidth != 0.0) { writer.WriteDictionaryNumberEntry("MissingWidth", this.MissingWidth); } if (this.FontFile != null) { if (context.ShouldLogDebug) { context.TraceLog.Add(TraceLevel.Debug, "Font Descriptor", "Rendering the font descriptor font file"); } byte[] outputdata = this.FontFile; string filter = null; if (context.Compression == OutputCompressionType.FlateDecode) { if (context.ShouldLogDebug) { context.TraceLog.Add(TraceLevel.Debug, "Font Descriptor", "Ensuring the font data is compressed"); } outputdata = this.FilteredFontFile; filter = this.FilterName; } PDFObjectRef fileref = writer.BeginObject(); writer.BeginDictionary(); writer.WriteDictionaryNumberEntry("Length", outputdata.Length); if (this.FontType == FontType.TrueType) { writer.WriteDictionaryNumberEntry("Length1", this.FontFile.Length); } else { throw new ArgumentOutOfRangeException("FontType"); } if (!string.IsNullOrEmpty(filter)) { writer.WriteDictionaryNameEntry("Filter", this.FilterName); } writer.EndDictionary(); writer.BeginStream(fileref); writer.WriteRaw(outputdata, 0, outputdata.Length); writer.EndStream(); writer.EndObject(); //We know this is a true type font program from above writer.WriteDictionaryObjectRefEntry("FontFile2", fileref); } writer.EndDictionary(); writer.EndObject(); if (context.ShouldLogDebug) { context.TraceLog.Add(TraceLevel.Debug, "Font Descriptor", "Completed font descriptor"); } return(oref); }