private void SaveToUnicode(TPdfStream DataStream, TXRefSection XRef) { XRef.SetObjectOffset(ToUnicodeId, DataStream); TIndirectRecord.SaveHeader(DataStream, ToUnicodeId); XRef.SetObjectOffset(ToUnicodeLenId, DataStream); TStreamRecord.BeginSave(DataStream, ToUnicodeLenId, FCompress); long StartStream = DataStream.Position; bool Compressing = DataStream.Compress; try { DataStream.Compress = FCompress; WriteToUnicodeData(DataStream); } finally { DataStream.Compress = Compressing; } long EndStream = DataStream.Position; TStreamRecord.EndSave(DataStream); TIndirectRecord.SaveTrailer(DataStream); XRef.SetObjectOffset(ToUnicodeLenId, DataStream); TIndirectRecord.SaveHeader(DataStream, ToUnicodeLenId); TPdfBaseRecord.WriteLine(DataStream, (EndStream - StartStream).ToString(CultureInfo.InvariantCulture)); TIndirectRecord.SaveTrailer(DataStream); }
private void SavePatterns(TPdfStream DataStream, TXRefSection XRef) { int HatchCount = HatchPatterns.Count; int ImageTextureCount = ImageTexturePatterns.Count; int GradientCount = GradientPatterns.Count; if (HatchCount + GradientCount + ImageTextureCount <= 0) return; TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.PatternName)); TDictionaryRecord.BeginDictionary(DataStream); for (int i = 0; i < HatchCount; i++) { HatchPatterns[i].WritePattern(DataStream, XRef); } for (int i = 0; i < ImageTextureCount; i++) { ImageTexturePatterns[i].WritePattern(DataStream, XRef); } for (int i = 0; i < GradientCount; i++) { GradientPatterns[i].WritePattern(DataStream, XRef); } TDictionaryRecord.EndDictionary(DataStream); if (HatchCount <= 0) return; //Pattern color space TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.ColorSpaceName)); TDictionaryRecord.BeginDictionary(DataStream); PatternColorSpaceId = TPdfHatch.WriteColorSpace(DataStream, XRef); TDictionaryRecord.EndDictionary(DataStream); }
public void WritePatternObject(TPdfStream DataStream, TXRefSection XRef) { byte[] PatternDef = GetPatternDef(); XRef.SetObjectOffset(PatternObjId, DataStream); TIndirectRecord.SaveHeader(DataStream, PatternObjId); TDictionaryRecord.BeginDictionary(DataStream); TDictionaryRecord.SaveKey(DataStream, TPdfToken.TypeName, TPdfTokens.GetString(TPdfToken.PatternName)); TDictionaryRecord.SaveKey(DataStream, TPdfToken.PatternTypeName, "1"); TDictionaryRecord.SaveKey(DataStream, TPdfToken.PaintTypeName, "1"); TDictionaryRecord.SaveKey(DataStream, TPdfToken.TilingTypeName, "2"); TDictionaryRecord.SaveKey(DataStream, TPdfToken.BBoxName, String.Format(CultureInfo.InvariantCulture, "[0 0 {0} {1}]", ImgWidth, ImgHeight)); TDictionaryRecord.SaveKey(DataStream, TPdfToken.XStepName, PdfConv.CoordsToString(ImgWidth)); TDictionaryRecord.SaveKey(DataStream, TPdfToken.YStepName, PdfConv.CoordsToString(ImgHeight)); TDictionaryRecord.SaveKey(DataStream, TPdfToken.MatrixName, PdfConv.ToString(PatternMatrix, true)); TDictionaryRecord.SaveKey(DataStream, TPdfToken.LengthName, PatternDef.Length); TDictionaryRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.ResourcesName)); TDictionaryRecord.BeginDictionary(DataStream); TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.XObjectName)); TDictionaryRecord.BeginDictionary(DataStream); ImageDef.WriteImage(DataStream, XRef); TDictionaryRecord.EndDictionary(DataStream); TDictionaryRecord.EndDictionary(DataStream); TDictionaryRecord.EndDictionary(DataStream); TStreamRecord.BeginSave(DataStream); DataStream.Write(PatternDef); TStreamRecord.EndSave(DataStream); TIndirectRecord.SaveTrailer(DataStream); ImageDef.WriteImageObject(DataStream, XRef); }
public void Select(TPdfStream DataStream) { TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.PatternName) + " " + TPdfTokens.GetString(TPdfToken.Commandcs) + " " + TPdfTokens.GetString(TPdfToken.GradientPrefix) + PatternId.ToString(CultureInfo.InvariantCulture) + " " + TPdfTokens.GetString(TPdfToken.Commandscn)); }
public static int WriteColorSpace(TPdfStream DataStream, TXRefSection XRef) { int Result = XRef.GetNewObject(DataStream); TPdfBaseRecord.Write(DataStream, TPdfTokens.GetString(TPdfToken.PatternColorSpacePrefix) + " "); TIndirectRecord.CallObj(DataStream, Result); return(Result); }
public static void WriteColorSpaceObject(TPdfStream DataStream, TXRefSection XRef, int ColorSpaceId) { XRef.SetObjectOffset(ColorSpaceId, DataStream); TIndirectRecord.SaveHeader(DataStream, ColorSpaceId); TPdfBaseRecord.Write(DataStream, TPdfTokens.GetString(TPdfToken.OpenArray)); TDictionaryRecord.SaveKey(DataStream, TPdfToken.PatternName, TPdfTokens.GetString(TPdfToken.DeviceRGBName)); TPdfBaseRecord.Write(DataStream, TPdfTokens.GetString(TPdfToken.CloseArray)); TIndirectRecord.SaveTrailer(DataStream); }
public void WriteImage(TPdfStream DataStream, TXRefSection XRef) { TPdfBaseRecord.Write(DataStream, TPdfTokens.GetString(TPdfToken.ImgPrefix) + Id.ToString(CultureInfo.InvariantCulture) + " "); ImgObjId = XRef.GetNewObject(DataStream); TIndirectRecord.CallObj(DataStream, ImgObjId); if (FSMask != null) { SMaskId = XRef.GetNewObject(DataStream); } }
private static void WriteSimpleString(TPdfStream DataStream, string Text, TPdfFont aFont, string EndNewText) { if (Text == null || Text.Length == 0) { return; } Write(DataStream, TPdfTokens.GetString(TPdfToken.OpenString)); UnicodeWrite(DataStream, Text, aFont); Write(DataStream, TPdfTokens.GetString(TPdfToken.CloseString)); TPdfBaseRecord.WriteLine(DataStream, EndNewText); }
private void WriteToUnicodeData(TPdfStream DataStream) { string s = TPdfTokens.GetString(TPdfToken.ToUnicodeData).Replace("\r", ""); TPdfBaseRecord.WriteLine(DataStream, s); TPdfBaseRecord.WriteLine(DataStream, ToUnicodeData.GetData()); s = TPdfTokens.GetString(TPdfToken.ToUnicodeData2).Replace("\r", ""); TPdfBaseRecord.WriteLine(DataStream, s); }
private void SaveGStates(TPdfStream DataStream, TXRefSection XRef) { int aCount = GStates.Count; if (aCount <= 0) return; TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.ExtGStateName)); TDictionaryRecord.BeginDictionary(DataStream); for (int i = 0; i < aCount; i++) { GStates[i].WriteGState(DataStream, XRef); } TDictionaryRecord.EndDictionary(DataStream); }
private void SaveAction(TPdfStream DataStream, TXRefSection XRef) { XRef.SetObjectOffset(ActionId, DataStream); TIndirectRecord.SaveHeader(DataStream, ActionId); BeginDictionary(DataStream); TPdfBaseRecord.Write(DataStream, String.Format(CultureInfo.InvariantCulture, TPdfTokens.GetString(TPdfToken.LinkData), FURL)); EndDictionary(DataStream); TIndirectRecord.SaveTrailer(DataStream); }
internal void FinishPage(TPdfStream DataStream, TXRefSection XRef) { DataStream.FlushEndText(); DataStream.Compress = false; EndStream = DataStream.Position; TStreamRecord.EndSave(DataStream); TIndirectRecord.SaveTrailer(DataStream); XRef.SetObjectOffset(LengthId, DataStream); TIndirectRecord.SaveHeader(DataStream, LengthId); TPdfBaseRecord.WriteLine(DataStream, (EndStream - StartStream).ToString(CultureInfo.InvariantCulture)); TIndirectRecord.SaveTrailer(DataStream); }
public void Select(TPdfStream DataStream, real FontSize, ref string LastFont) { UsedInDoc = true; string NewFont = TPdfTokens.GetString(TPdfToken.FontPrefix) + Id.ToString(CultureInfo.InvariantCulture) + " " + PdfConv.CoordsToString(FontSize) + " " + TPdfTokens.GetString(TPdfToken.CommandFont); if (LastFont == NewFont) { return; } LastFont = NewFont; TPdfBaseRecord.WriteLine(DataStream, NewFont); }
internal static void SaveToStream(TPdfStream DataStream) { if (DataStream.HasSignature) //Our sign algorithm requires Reader 7 or newer. { TPdfHeaderRecord.SaveToStream(DataStream, TPdfTokens.GetString(TPdfToken.Header16)); } else { TPdfHeaderRecord.SaveToStream(DataStream, TPdfTokens.GetString(TPdfToken.Header14)); } TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.HeaderComment)); }
private void SaveWidths(TPdfStream DataStream) { //Docs say it is prefered to save as indirect object, but acrobat writes it directly. //Widths object. TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.WidthsName) + " " + TPdfTokens.GetString(TPdfToken.OpenArray)); int fc = FirstChar; if (fc < 0) { fc = 0; } for (int i = fc; i <= LastChar; i++) //characters on winansi are NOT the same as in low byte unicode. For example char 0x92 (146) is a typographic ' in winansi, not defined in unicode. { int z = (int)CharUtils.GetUniFromWin1252_PDF((byte)i); TPdfBaseRecord.WriteLine(DataStream, PdfConv.CoordsToString(Math.Round(FTrueTypeData.GlyphWidth(FTrueTypeData.Glyph(z, false))))); //don't log the erorr here, character doesn't need to exist. } TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.CloseArray)); }
public static void WriteStringInStream(TPdfStream DataStream, string Text, real FontSize, TPdfFont aFont, ref string LastFont, string EndNewText, string StartNewText2, string EndNewText2, TTracedFonts TracedFonts) { TPdfFont LastFallbackFont = aFont; int StartText = 0; int TLen = Text.Length; for (int i = 0; i <= TLen; i++) { TPdfFont FallbackFont = null; if (i < TLen) { FallbackFont = aFont.Fallback(Text[i], 0); if (FallbackFont == null) { FallbackFont = aFont; } } if (FallbackFont != LastFallbackFont) { WriteSimpleString(DataStream, Text.Substring(StartText, i - StartText), LastFallbackFont, EndNewText); StartText = i; if (FallbackFont != null) { TPdfBaseRecord.Write(DataStream, EndNewText2); FallbackFont.Select(DataStream, FontSize, ref LastFont); if (FlexCelTrace.HasListeners && FallbackFont != aFont && !TracedFonts.ContainsKey(aFont.FontName + ";" + FallbackFont.FontName)) { TracedFonts.Add(aFont.FontName + ";" + FallbackFont.FontName, String.Empty); FlexCelTrace.Write(new TPdfUsedFallbackFontError(FlxMessages.GetString(FlxErr.ErrUsedFallbackFont, aFont.FontName, FallbackFont.FontName), aFont.FontName, FallbackFont.FontName)); } TPdfBaseRecord.Write(DataStream, StartNewText2); LastFallbackFont = FallbackFont; } } } }
//For unicode fonts, we actually need to write 2 fonts, one type 0 and one CID. public override void WriteFontObject(TPdfStream DataStream, TXRefSection XRef) { //Save Type 0 Font. XRef.SetObjectOffset(FontObjId, DataStream); TIndirectRecord.SaveHeader(DataStream, FontObjId); TDictionaryRecord.BeginDictionary(DataStream); TDictionaryRecord.SaveKey(DataStream, TPdfToken.TypeName, TPdfTokens.GetString(TPdfToken.FontName)); TDictionaryRecord.SaveKey(DataStream, TPdfToken.SubtypeName, TPdfTokens.GetString(TPdfToken.Type0Name)); TDictionaryRecord.SaveKey(DataStream, TPdfToken.BaseFontName, GetFontName(true, Subset)); TDictionaryRecord.SaveKey(DataStream, TPdfToken.EncodingName, EncodingType()); XRef.SetObjectOffset(CIDFontId, DataStream); TDictionaryRecord.SaveKey(DataStream, TPdfToken.DescendantFontsName, TPdfTokens.GetString(TPdfToken.OpenArray) + TIndirectRecord.GetCallObj(CIDFontId) + TPdfTokens.GetString(TPdfToken.CloseArray)); TDictionaryRecord.SaveKey(DataStream, TPdfToken.ToUnicodeName, TIndirectRecord.GetCallObj(ToUnicodeId)); TDictionaryRecord.EndDictionary(DataStream); TIndirectRecord.SaveTrailer(DataStream); //Save CID Font. XRef.SetObjectOffset(CIDFontId, DataStream); TIndirectRecord.SaveHeader(DataStream, CIDFontId); TDictionaryRecord.BeginDictionary(DataStream); TDictionaryRecord.SaveKey(DataStream, TPdfToken.TypeName, TPdfTokens.GetString(TPdfToken.FontName)); TDictionaryRecord.SaveKey(DataStream, TPdfToken.SubtypeName, TPdfTokens.GetString(TPdfToken.CIDFontType2Name)); TDictionaryRecord.SaveKey(DataStream, TPdfToken.BaseFontName, GetFontName(true, Subset)); TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.CIDSystemInfo)); TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.CIDToGIDMap)); SaveWidths(DataStream); XRef.SetObjectOffset(FontDescriptorId, DataStream); TDictionaryRecord.SaveKey(DataStream, TPdfToken.FontDescriptorName, TIndirectRecord.GetCallObj(FontDescriptorId)); TDictionaryRecord.EndDictionary(DataStream); TIndirectRecord.SaveTrailer(DataStream); SaveToUnicode(DataStream, XRef); SaveFontDescriptor(DataStream, FontDescriptorId, XRef, true, Subset); }
internal void SaveToStream(TPdfStream DataStream) { FStartPosition = DataStream.Position; string Generation = " 00000 n "; TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.XRef)); TPdfBaseRecord.WriteLine(DataStream, "0 " + (FList.Count + 1).ToString(CultureInfo.InvariantCulture)); int aCount = FList.Count; TPdfBaseRecord.WriteLine(DataStream, "0000000000 65535 f "); for (int i = 0; i < aCount; i++) { TPdfBaseRecord.WriteLine(DataStream, ( #if (!FRAMEWORK20) (long) #endif FList[i]).ToString("0000000000", CultureInfo.InvariantCulture) + Generation); } }
private void SaveFonts(TPdfStream DataStream, TXRefSection XRef) { int aCount = Fonts.Count; if (aCount <= 0) return; TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.FontName)); TDictionaryRecord.BeginDictionary(DataStream); Fonts.CreateOrderedKeys(); foreach (string s in Fonts.Keys) { Fonts.OrderedKeys.Add(s); } Fonts.OrderedKeys.Sort(); //to keep the reference pdfs always the same. foreach (string s in Fonts.OrderedKeys) { TPdfFont pf = ((TPdfFont)Fonts[s]); if (pf.UsedInDoc) pf.WriteFont(DataStream, XRef); } TDictionaryRecord.EndDictionary(DataStream); }
internal static void SaveToStream(TPdfStream DataStream, TXRefSection XRef, int CatalogId, int InfoId) { TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.Trailer)); TDictionaryRecord.BeginDictionary(DataStream); TDictionaryRecord.SaveKey(DataStream, TPdfToken.SizeName, XRef.Count); TDictionaryRecord.SaveKey(DataStream, TPdfToken.RootName, TIndirectRecord.GetCallObj(CatalogId)); TDictionaryRecord.SaveKey(DataStream, TPdfToken.InfoName, TIndirectRecord.GetCallObj(InfoId)); Byte[] FileIdBytes = Guid.NewGuid().ToByteArray(); string FileId = PdfConv.ToHexString(FileIdBytes, true); TDictionaryRecord.SaveKey(DataStream, TPdfToken.IDName, TPdfTokens.GetString(TPdfToken.OpenArray) + FileId + " " + FileId + TPdfTokens.GetString(TPdfToken.CloseArray)); TDictionaryRecord.EndDictionary(DataStream); TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.StartXRef)); TPdfBaseRecord.WriteLine(DataStream, XRef.StartPosition.ToString(CultureInfo.InvariantCulture)); TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.Eof)); }
internal void WriteFont(TPdfStream DataStream, TXRefSection XRef, bool Compress) { if (AlreadySaved || ObjectId == -1) { return; } AlreadySaved = true; int EmbeddedLenId = XRef.GetNewObject(DataStream); //Stream Length XRef.SetObjectOffset(ObjectId, DataStream); TIndirectRecord.SaveHeader(DataStream, ObjectId); byte[] FontData = TrueTypeData.SubsetFontData(SubsetCMap); TStreamRecord.BeginSave(DataStream, EmbeddedLenId, Compress, FontData.Length); long StartStream = DataStream.Position; bool Compressing = DataStream.Compress; try { DataStream.Compress = Compress; DataStream.Write(FontData); } finally { DataStream.Compress = Compressing; } long EndStream = DataStream.Position; TStreamRecord.EndSave(DataStream); TIndirectRecord.SaveTrailer(DataStream); XRef.SetObjectOffset(EmbeddedLenId, DataStream); TIndirectRecord.SaveHeader(DataStream, EmbeddedLenId); TPdfBaseRecord.WriteLine(DataStream, (EndStream - StartStream).ToString(CultureInfo.InvariantCulture)); TIndirectRecord.SaveTrailer(DataStream); }
public void Select(TPdfStream DataStream, Color PatternColor) { TPdfBaseRecord.WriteLine(DataStream, GetColorString(PatternColor) + " " + TPdfTokens.GetString(TPdfToken.PatternPrefix) + PatternId.ToString(CultureInfo.InvariantCulture) + " " + TPdfTokens.GetString(TPdfToken.Commandscn)); }
public virtual void WriteFont(TPdfStream DataStream, TXRefSection XRef) { TPdfBaseRecord.Write(DataStream, TPdfTokens.GetString(TPdfToken.FontPrefix) + Id.ToString(CultureInfo.InvariantCulture) + " "); FontObjId = XRef.GetNewObject(DataStream); TIndirectRecord.CallObj(DataStream, FontObjId); }
public void WritePattern(TPdfStream DataStream, TXRefSection XRef) { TPdfBaseRecord.Write(DataStream, TPdfTokens.GetString(PatternPrefix) + PatternId.ToString(CultureInfo.InvariantCulture) + " "); PatternObjId = XRef.GetNewObject(DataStream); TIndirectRecord.CallObj(DataStream, PatternObjId); }
public void Select(TPdfStream DataStream) { TPdfBaseRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.ImgPrefix) + Id.ToString(CultureInfo.InvariantCulture) + " " + TPdfTokens.GetString(TPdfToken.CommandDo)); }
public void Select(TPdfStream DataStream) { TPdfBaseRecord.WriteLine(DataStream, GStateName + " " + TPdfTokens.GetString(TPdfToken.Commandgs)); }
public void WriteGState(TPdfStream DataStream, TXRefSection XRef) { TPdfBaseRecord.Write(DataStream, GStateName + " "); GStateObjId = XRef.GetNewObject(DataStream); TIndirectRecord.CallObj(DataStream, GStateObjId); }