/// <summary> /// Initializes a new instance of the <see cref="PDFString"/> class. /// </summary> /// <param name="value">The value.</param> /// <param name="encoding">The encoding.</param> public PDFString(string value, PDFStringEncoding encoding) { switch (encoding) { case PDFStringEncoding.RawEncoding: CheckRawEncoding(value); break; case PDFStringEncoding.StandardEncoding: break; case PDFStringEncoding.PDFDocEncoding: break; case PDFStringEncoding.WinAnsiEncoding: CheckRawEncoding(value); break; case PDFStringEncoding.MacRomanEncoding: break; case PDFStringEncoding.Unicode: break; default: throw new ArgumentOutOfRangeException("encoding"); } _value = value; //if ((flags & PDFStringFlags.EncodingMask) == 0) // flags |= PDFStringFlags.PDFDocEncoding; Flags = (PDFStringFlags)encoding; }
/// <summary> /// Converts a raw string into a raw hexadecimal string literal, possibly encrypted. /// </summary> public static string ToHexStringLiteral(string text, PDFStringEncoding encoding, PDFStandardSecurityHandler securityHandler) { if (String.IsNullOrEmpty(text)) { return("<>"); } byte[] bytes; switch (encoding) { case PDFStringEncoding.RawEncoding: bytes = RawEncoding.GetBytes(text); break; case PDFStringEncoding.WinAnsiEncoding: bytes = WinAnsiEncoding.GetBytes(text); break; case PDFStringEncoding.PDFDocEncoding: bytes = DocEncoding.GetBytes(text); break; case PDFStringEncoding.Unicode: //bytes = UnicodeEncoding.GetBytes(text); bytes = RawUnicodeEncoding.GetBytes(text); break; default: throw new NotImplementedException(encoding.ToString()); } byte[] agTemp = FormatStringLiteral(bytes, encoding == PDFStringEncoding.Unicode, true, true, securityHandler); return(RawEncoding.GetString(agTemp, 0, agTemp.Length)); }
/// <summary> /// Writes the specified value to the PDF stream. /// </summary> public void Write(PDFString value) { WriteSeparator(CharCat.Delimiter); #if true PDFStringEncoding encoding = (PDFStringEncoding)(value.Flags & PDFStringFlags.EncodingMask); string pdf = (value.Flags & PDFStringFlags.HexLiteral) == 0 ? PDFEncoders.ToStringLiteral(value.Value, encoding, SecurityHandler) : PDFEncoders.ToHexStringLiteral(value.Value, encoding, SecurityHandler); WriteRaw(pdf); #else switch (value.Flags & PDFStringFlags.EncodingMask) { case PDFStringFlags.Undefined: case PDFStringFlags.PDFDocEncoding: if ((value.Flags & PDFStringFlags.HexLiteral) == 0) { WriteRaw(PDFEncoders.DocEncode(value.Value, false)); } else { WriteRaw(PDFEncoders.DocEncodeHex(value.Value, false)); } break; case PDFStringFlags.WinAnsiEncoding: throw new NotImplementedException("Unexpected encoding: WinAnsiEncoding"); case PDFStringFlags.Unicode: if ((value.Flags & PDFStringFlags.HexLiteral) == 0) { WriteRaw(PDFEncoders.DocEncode(value.Value, true)); } else { WriteRaw(PDFEncoders.DocEncodeHex(value.Value, true)); } break; case PDFStringFlags.StandardEncoding: case PDFStringFlags.MacRomanEncoding: case PDFStringFlags.MacExpertEncoding: default: throw new NotImplementedException("Unexpected encoding"); } #endif _lastCat = CharCat.Delimiter; }