internal override void WriteObject(PdfWriter writer) { PdfPage dest = null; //pdf.AppendFormat(CultureInfo.InvariantCulture, // "{0} 0 obj\n<<\n/Type/Annot\n/Subtype/Link\n" + // "/Rect[{1} {2} {3} {4}]\n/BS<</Type/Border>>\n/Border[0 0 0]\n/C[0 0 0]\n", // ObjectID.ObjectNumber, rect.X1, rect.Y1, rect.X2, rect.Y2); // Older Adobe Reader versions uses a border width of 0 as default value if neither Border nor BS are present. // But the PDF Reference specifies: // "If neither the Border nor the BS entry is present, the border is drawn as a solid line with a width of 1 point." // After this issue was fixed in newer Reader versions older PDFsharp created documents show an ugly solid border. // The following hack fixes this by specifying a 0 width border. if (Elements[PdfAnnotation.Keys.BS] == null) { Elements[PdfAnnotation.Keys.BS] = new PdfLiteral("<</Type/Border/W 0>>"); } // May be superfluous. See comment above. if (Elements[PdfAnnotation.Keys.Border] == null) { Elements[PdfAnnotation.Keys.Border] = new PdfLiteral("[0 0 0]"); } switch (_linkType) { case LinkType.None: break; case LinkType.Document: // destIndex > Owner.PageCount can happen when rendering pages using PDFsharp directly. int destIndex = _destPage; if (destIndex > Owner.PageCount) { destIndex = Owner.PageCount; } destIndex--; dest = Owner.Pages[destIndex]; //pdf.AppendFormat("/Dest[{0} 0 R/XYZ null null 0]\n", dest.ObjectID); Elements[Keys.Dest] = new PdfLiteral("[{0} 0 R/XYZ null null 0]", dest.ObjectNumber); break; case LinkType.Web: //pdf.AppendFormat("/A<</S/URI/URI{0}>>\n", PdfEncoders.EncodeAsLiteral(url)); Elements[PdfAnnotation.Keys.A] = new PdfLiteral("<</S/URI/URI{0}>>", //PdfEncoders.EncodeAsLiteral(url)); PdfEncoders.ToStringLiteral(_url, PdfStringEncoding.WinAnsiEncoding, writer.SecurityHandler)); break; case LinkType.File: //pdf.AppendFormat("/A<</Type/Action/S/Launch/F<</Type/Filespec/F{0}>> >>\n", // PdfEncoders.EncodeAsLiteral(url)); Elements[PdfAnnotation.Keys.A] = new PdfLiteral("<</Type/Action/S/Launch/F<</Type/Filespec/F{0}>> >>", //PdfEncoders.EncodeAsLiteral(url)); PdfEncoders.ToStringLiteral(_url, PdfStringEncoding.WinAnsiEncoding, writer.SecurityHandler)); break; } base.WriteObject(writer); }
/// <summary> /// Writes the specified value to the PDF stream. /// </summary> public void Write(PdfString value) { WriteSeparator(CharCat.Delimiter); 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); _lastCat = CharCat.Delimiter; }
/// <summary> /// Returns the string. /// </summary> public override string ToString() { #if true PdfStringEncoding encoding = (PdfStringEncoding)(_flags & PdfStringFlags.EncodingMask); string pdf = (_flags & PdfStringFlags.HexLiteral) == 0 ? PdfEncoders.ToStringLiteral(_value, encoding, null) : PdfEncoders.ToHexStringLiteral(_value, encoding, null); return(pdf); #else return(_value); #endif }
/// <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; if ((value.Flags & PdfStringFlags.HexLiteral) == 0) { pdf = PdfEncoders.ToStringLiteral(value.Value, encoding, SecurityHandler); } else { pdf = 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 this.lastCat = CharCat.Delimiter; }
internal override void WriteObject(PdfWriter writer) { PdfPage dest = null; //pdf.AppendFormat(CultureInfo.InvariantCulture, // "{0} 0 obj\n<<\n/Type/Annot\n/Subtype/Link\n" + // "/Rect[{1} {2} {3} {4}]\n/BS<</Type/Border>>\n/Border[0 0 0]\n/C[0 0 0]\n", // this.ObjectID.ObjectNumber, rect.X1, rect.Y1, rect.X2, rect.Y2); if (Elements[Keys.BS] == null) { Elements[Keys.BS] = new PdfLiteral("<</Type/Border>>"); } if (Elements[Keys.Border] == null) { Elements[Keys.Border] = new PdfLiteral("[0 0 0]"); } switch (this.linkType) { case LinkType.Document: // destIndex > Owner.PageCount can happen rendering pages using PDFsharp directly int destIndex = this.destPage; if (destIndex > Owner.PageCount) { destIndex = Owner.PageCount; } destIndex--; dest = this.Owner.Pages[destIndex]; //pdf.AppendFormat("/Dest[{0} 0 R/XYZ null null 0]\n", dest.ObjectID); Elements[Keys.Dest] = new PdfLiteral("[{0} 0 R/XYZ null null 0]", dest.ObjectNumber); break; case LinkType.Web: //pdf.AppendFormat("/A<</S/URI/URI{0}>>\n", PdfEncoders.EncodeAsLiteral(this.url)); Elements[Keys.A] = new PdfLiteral("<</S/URI/URI{0}>>", //PdfEncoders.EncodeAsLiteral(this.url)); PdfEncoders.ToStringLiteral(this.url, PdfStringEncoding.WinAnsiEncoding, writer.SecurityHandler)); break; case LinkType.File: //pdf.AppendFormat("/A<</Type/Action/S/Launch/F<</Type/Filespec/F{0}>> >>\n", // PdfEncoders.EncodeAsLiteral(this.url)); Elements[Keys.A] = new PdfLiteral("<</Type/Action/S/Launch/F<</Type/Filespec/F{0}>> >>", //PdfEncoders.EncodeAsLiteral(this.url)); PdfEncoders.ToStringLiteral(this.url, PdfStringEncoding.WinAnsiEncoding, writer.SecurityHandler)); break; } base.WriteObject(writer); }
/// <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; }