/// <summary> /// Gets the image entries to be written to the file /// </summary> /// <returns></returns> public byte[] GetImageDict(long filePos,out int size) { MemoryStream ms=new MemoryStream(); int s; byte[] ba; foreach (PdfImageEntry ie in images.Values) { ObjectList objList=new ObjectList(ie.objectNum,filePos); ba = PdfUtility.GetUTF8Bytes(ie.imgDict, out s); ms.Write(ba, 0, ba.Length); filePos += s; ms.Write(ie.ba, 0, ie.ba.Length); // write out the image filePos += ie.ba.Length; ba = PdfUtility.GetUTF8Bytes("endstream\r\nendobj\r\n", out s); ms.Write(ba, 0, ba.Length); filePos += s; ie.xref.offsets.Add(objList); } ba = ms.ToArray(); size = ba.Length; return ba; }
/// <summary> /// Creates the xref table using the byte offsets in the array. /// </summary> /// <returns></returns> public byte[] CreateXrefTable(long fileOffset, out int size) { //Store the Offset of the Xref table for startxRef string table = null; try { ObjectList objList = new ObjectList(0, fileOffset); pa.offsets.Add(objList); pa.offsets.Sort(); numTableEntries = (int)pa.offsets.Count; table = string.Format("\r\nxref {0} {1}\r\n0000000000 65535 f\r\n", 0, numTableEntries); for (int entries = 1; entries < numTableEntries; entries++) { ObjectList obj = pa.offsets[entries]; table += obj.offset.ToString().PadLeft(10, '0'); table += " 00000 n\r\n"; } } catch (Exception e) { Exception error = new Exception(e.Message + " In Utility.CreateXrefTable()"); throw error; } return GetUTF8Bytes(table, out size); }
/// <summary> /// Convert the unicode string 16 bits to unicode bytes. /// This is written to the file to create Pdf /// </summary> /// <returns></returns> public byte[] GetUTF8Bytes(string str,long filePos,out int size) { ObjectList objList=new ObjectList(objectNum,filePos); //byte []abuf; //byte[] ubuf = Encoding.Unicode.GetBytes(str); //Encoding enc = Encoding.GetEncoding(1252); //abuf = Encoding.Convert(Encoding.Unicode, enc, ubuf); byte[] ubuf = Encoding.Unicode.GetBytes(str); Encoding enc = Encoding.GetEncoding(65001); // utf-8 byte[] abuf = Encoding.Convert(Encoding.Unicode, enc, ubuf); size=abuf.Length; xref.offsets.Add(objList); return abuf; }