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); } }
/// <summary> /// Writes a single destination /// </summary> /// <param name="context"></param> /// <param name="writer"></param> /// <param name="name"></param> /// <returns></returns> internal bool WriteDestination(PDFRenderContext context, PDFWriter writer, string name) { PDFDestination dest = _dests[name]; writer.BeginArrayEntry(); writer.WriteStringLiteral(name); writer.EndArrayEntry(); writer.BeginArrayEntry(); dest.OutputToPDF(context, writer); writer.EndArrayEntry(); writer.WriteLine(); return(true); }
public Native.PDFObjectRef OutputToPDF(PDFWriter writer, PDFRenderContext context) { List <ICategorisedArtefactNamesEntry> entries = new List <ICategorisedArtefactNamesEntry>(); Native.PDFObjectRef oref = null; if (this.InnerEntries.Count == 0) { return(oref); } if (this.NameType == PDFCategorisedNameDictionary.DestinationsName) { oref = writer.BeginObject(); writer.BeginDictionary(); writer.BeginDictionaryEntry("Names"); string first = null; string last = null; writer.BeginArray(); foreach (KeyValuePair <string, IArtefactEntry> kvp in this.InnerEntries) { if (string.IsNullOrEmpty(first)) { first = kvp.Key; } else { last = kvp.Key; } writer.BeginArrayEntry(); writer.WriteStringLiteral(kvp.Key); writer.EndArrayEntry(); writer.BeginArrayEntry(); ((PDFDestination)kvp.Value).OutputToPDF(context, writer); writer.EndArrayEntry(); writer.WriteLine(); } writer.EndArray(); writer.EndDictionaryEntry(); if (!string.IsNullOrEmpty(first) && !string.IsNullOrEmpty(last)) { writer.BeginDictionaryEntry("Limits"); writer.WriteArrayStringEntries(true, first, last); writer.EndDictionaryEntry(); } writer.EndDictionary(); writer.EndObject(); } else //we contain ICategorizedArtefactNameEntry(s) { oref = writer.BeginObject(); writer.BeginDictionary(); writer.BeginDictionaryEntry("Names"); //string first = null; //string last = null; writer.BeginArray(); foreach (KeyValuePair <string, IArtefactEntry> kvp in this.InnerEntries) { //if (string.IsNullOrEmpty(first)) // first = kvp.Key; //else // last = kvp.Key; writer.BeginArrayEntry(); writer.WriteStringLiteral(kvp.Key); writer.EndArrayEntry(); writer.BeginArrayEntry(); ICategorisedArtefactNamesEntry entry = (ICategorisedArtefactNamesEntry)kvp.Value; Native.PDFObjectRef entryOref = entry.OutputToPDF(context, writer); if (null != entryOref) { writer.WriteObjectRef(entryOref); } writer.EndArrayEntry(); writer.WriteLine(); } writer.EndArray(); writer.EndDictionaryEntry(); //Limits only required on Intermediate and Leaf nodes of a tree, not the root //if (!string.IsNullOrEmpty(first) && !string.IsNullOrEmpty(last)) //{ // writer.BeginDictionaryEntry("Limits"); // writer.WriteArrayStringEntries(true, first, last); // writer.EndDictionaryEntry(); //} writer.EndDictionary(); writer.EndObject(); } return(oref); }