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);
        }
예제 #2
0
        /// <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;
        }
예제 #3
0
        /// <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
        }
예제 #4
0
        /// <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);
        }
예제 #6
0
        /// <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;
        }