Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Free Text Annotation #59

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions src/PdfSharp/Fonts/enums/StandartType1Fonts.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
#region PDFsharp - A .NET library for processing PDF
//
// Authors:
// Andrey Ryzhkov
//
#endregion

using System;
using System.Collections.Generic;

namespace PdfSharp.Fonts
{
public sealed class StandardType1Fonts
{

//private StandardType1Fonts()
//{
//}

private static readonly ICollection<string> _FONTS = new List<string>();

static StandardType1Fonts()
{
_FONTS.Add(PdfSharp.Fonts.StandardType1Fonts.COURIER);
_FONTS.Add(PdfSharp.Fonts.StandardType1Fonts.COURIER_BOLD);
_FONTS.Add(PdfSharp.Fonts.StandardType1Fonts.COURIER_BOLDOBLIQUE);
_FONTS.Add(PdfSharp.Fonts.StandardType1Fonts.COURIER_OBLIQUE);
_FONTS.Add(PdfSharp.Fonts.StandardType1Fonts.HELVETICA);
_FONTS.Add(PdfSharp.Fonts.StandardType1Fonts.HELVETICA_BOLD);
_FONTS.Add(PdfSharp.Fonts.StandardType1Fonts.HELVETICA_BOLDOBLIQUE);
_FONTS.Add(PdfSharp.Fonts.StandardType1Fonts.HELVETICA_OBLIQUE);
_FONTS.Add(PdfSharp.Fonts.StandardType1Fonts.SYMBOL);
_FONTS.Add(PdfSharp.Fonts.StandardType1Fonts.TIMES_ROMAN);
_FONTS.Add(PdfSharp.Fonts.StandardType1Fonts.TIMES_BOLD);
_FONTS.Add(PdfSharp.Fonts.StandardType1Fonts.TIMES_BOLDITALIC);
_FONTS.Add(PdfSharp.Fonts.StandardType1Fonts.TIMES_ITALIC);
_FONTS.Add(PdfSharp.Fonts.StandardType1Fonts.ZAPFDINGBATS);
}

public static bool IsStandardFont(String fontName)
{
return _FONTS.Contains(fontName);
}

/// <summary>This is a possible value of a base 14 type 1 font</summary>
public const string COURIER = "Courier";

/// <summary>This is a possible value of a base 14 type 1 font</summary>
public const string COURIER_BOLD = "Courier-Bold";

/// <summary>This is a possible value of a base 14 type 1 font</summary>
public const string COURIER_OBLIQUE = "Courier-Oblique";

/// <summary>This is a possible value of a base 14 type 1 font</summary>
public const string COURIER_BOLDOBLIQUE = "Courier-BoldOblique";

/// <summary>This is a possible value of a base 14 type 1 font</summary>
public const string HELVETICA = "Helvetica";

/// <summary>This is a possible value of a base 14 type 1 font</summary>
public const string HELVETICA_BOLD = "Helvetica-Bold";

/// <summary>This is a possible value of a base 14 type 1 font</summary>
public const string HELVETICA_OBLIQUE = "Helvetica-Oblique";

/// <summary>This is a possible value of a base 14 type 1 font</summary>
public const string HELVETICA_BOLDOBLIQUE = "Helvetica-BoldOblique";

/// <summary>This is a possible value of a base 14 type 1 font</summary>
public const string SYMBOL = "Symbol";

/// <summary>This is a possible value of a base 14 type 1 font</summary>
public const string TIMES_ROMAN = "Times-Roman";

/// <summary>This is a possible value of a base 14 type 1 font</summary>
public const string TIMES_BOLD = "Times-Bold";

/// <summary>This is a possible value of a base 14 type 1 font</summary>
public const string TIMES_ITALIC = "Times-Italic";

/// <summary>This is a possible value of a base 14 type 1 font</summary>
public const string TIMES_BOLDITALIC = "Times-BoldItalic";

/// <summary>This is a possible value of a base 14 type 1 font</summary>
public const string ZAPFDINGBATS = "ZapfDingbats";
}

/// <summary>
/// The PostScript names of 14 Type 1 fonts, known as the standard fonts.
/// These fonts, or their font metrics and suitable substitution fonts, are guaranteed
/// to be available to the viewer application.
/// </summary>
public enum StandardType1Font
{
TimesRoman,
TimesBold,
TimesItalic,
TimesBoldItalic,
Helvetica,
HelveticaBold,
HelveticaOblique,
HelveticaBoldOblique,
Courier,
CourierBold,
CourierOblique,
CourierBoldOblique,
Symbol,
ZapfDingbats
}
}
95 changes: 95 additions & 0 deletions src/PdfSharp/Pdf.Annotations/DA/AnnotationDefaultAppearance.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
#region PDFsharp - A .NET library for processing PDF
//
// Authors:
// Andrey Ryzhkov
//
#endregion

using System.Collections.Generic;
using System.Globalization;

using PdfSharp.Drawing;
using PdfSharp.Fonts;

namespace PdfSharp.Pdf.Annotations.DA
{
class AnnotationDefaultAppearance
{
private static readonly IDictionary<StandardType1Font, string> stdAnnotFontNames =
new Dictionary<StandardType1Font, string>();

private string color = "1 g";

private string fontName = "/Helvetica";

private float fontSize = 0f;

static AnnotationDefaultAppearance()
{
stdAnnotFontNames.Add(StandardType1Font.Courier, "/" + StandardType1Fonts.COURIER);
stdAnnotFontNames.Add(StandardType1Font.CourierBold, "/" + StandardType1Fonts.COURIER_BOLD);
stdAnnotFontNames.Add(StandardType1Font.CourierOblique, "/" + StandardType1Fonts.COURIER_OBLIQUE);
stdAnnotFontNames.Add(StandardType1Font.CourierBoldOblique, "/" + StandardType1Fonts.COURIER_BOLDOBLIQUE);

stdAnnotFontNames.Add(StandardType1Font.Helvetica, "/" + StandardType1Fonts.HELVETICA);
stdAnnotFontNames.Add(StandardType1Font.HelveticaBold, "/" + StandardType1Fonts.HELVETICA_BOLD);
stdAnnotFontNames.Add(StandardType1Font.HelveticaOblique, "/" + StandardType1Fonts.HELVETICA_OBLIQUE);
stdAnnotFontNames.Add(StandardType1Font.HelveticaBoldOblique, "/" + StandardType1Fonts.HELVETICA_BOLDOBLIQUE);

stdAnnotFontNames.Add(StandardType1Font.TimesRoman, "/" + StandardType1Fonts.TIMES_ROMAN);
stdAnnotFontNames.Add(StandardType1Font.TimesBold, "/" + StandardType1Fonts.TIMES_BOLD);
stdAnnotFontNames.Add(StandardType1Font.TimesItalic, "/" + StandardType1Fonts.TIMES_ITALIC);
stdAnnotFontNames.Add(StandardType1Font.TimesBoldItalic, "/" + StandardType1Fonts.TIMES_BOLDITALIC);

stdAnnotFontNames.Add(StandardType1Font.Symbol, "/" + StandardType1Fonts.SYMBOL);

stdAnnotFontNames.Add(StandardType1Font.ZapfDingbats, "/" + StandardType1Fonts.ZAPFDINGBATS);
}

public AnnotationDefaultAppearance()
{
SetFont(StandardType1Font.Helvetica);
SetFontSize(10f);
SetColor(XColor.FromGrayScale(1.0));
}

public void SetFont(StandardType1Font font)
{
fontName = stdAnnotFontNames[font];
}

public void SetFontSize(float size)
{
fontSize = size;
}

public void SetColor(XColor color)
{
if (color.ColorSpace.Equals(XColorSpace.GrayScale))
{
this.color = color.GS.ToString("0.0#####", CultureInfo.InvariantCulture) + " g";
}
else if (color.ColorSpace.Equals(XColorSpace.Rgb))
{
this.color = color.R.ToString("0.0#####", CultureInfo.InvariantCulture) + " "
+ color.G.ToString("0.0#####", CultureInfo.InvariantCulture) + " "
+ color.B.ToString("0.0#####", CultureInfo.InvariantCulture) + " rg";
}
else if (color.ColorSpace.Equals(XColorSpace.Cmyk))
{
this.color = color.C.ToString("0.0#####", CultureInfo.InvariantCulture) + " "
+ color.M.ToString("0.0#####", CultureInfo.InvariantCulture) + " "
+ color.Y.ToString("0.0#####", CultureInfo.InvariantCulture) + " "
+ color.K.ToString("0.0#####", CultureInfo.InvariantCulture) + " k";
}
}

/// <summary>
/// Get string value from AnnotationDefaultAppearance
/// </summary>
public override string ToString()
{
return fontName + " " + fontSize.ToString() + " Tf " + color;
}
}
}
98 changes: 98 additions & 0 deletions src/PdfSharp/Pdf.Annotations/PdfBorderEffect.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
#region PDFsharp - A .NET library for processing PDF
//
// Begining with PDF 1.5, some annotations(square, circle and polygon) may have
// a BE entry, which is a border effect dictionary that specifies an effect to be applied
// to the border of the annotations.
//
// Authors:
// Andrey Ryzhkov
//
#endregion

using System;

namespace PdfSharp.Pdf.Annotations
{
public class PdfBorderEffect : PdfDictionary
{
/// <summary>
/// Initializes a new instance of the <see cref="PdfBorderEffect"/> class.
/// </summary>
public PdfBorderEffect()
{
Elements.SetName(Keys.S, "/S");
Elements.SetInteger(Keys.I, 0);
}

/// <summary>
/// Initializes a new instance of the <see cref="PdfBorderEffect"/> class.
/// </summary>
/// <param name="effect">Border effect <see cref="pdfBorderEffect"/></param>
public PdfBorderEffect(pdfBorderEffect effect)
{
Effect = effect;
}

/// <summary>
/// Get or set border effect.
/// </summary>
public pdfBorderEffect Effect
{
get
{
return (pdfBorderEffect)Enum.Parse(typeof(pdfBorderEffect), Enum.GetName(typeof(pdfBorderEffect), Elements.GetInteger(Keys.I)));
}
set
{
if (Enum.IsDefined(typeof(pdfBorderEffect), value))
{
if (value == pdfBorderEffect.None)
{
Elements.SetName(Keys.S, "/S");
}
else if (value == pdfBorderEffect.Cloud1 || value == pdfBorderEffect.Cloud2)
{
Elements.SetName(Keys.S, "/C");
}
Elements.SetInteger(Keys.I, (int)value);
}

}
}

/// <summary>
/// Predefined keys of this dictionary.
/// </summary>
public class Keys : KeysBase
{
/// <summary>
/// (Optional) A name representing the border effect to apply. Possible values are:
/// S - No effect: the border is as described by the annotation dictionary's BS entry.
/// C - The border should appear "cloudly". The width and dash array specified by BS are honored.
/// Default value: S.
/// </summary>
[KeyInfo("1.5", KeyType.Name | KeyType.Optional)]
public const string S = "/S";

/// <summary>
/// (Optional; valid only if the value of S is C) A number describing the intensity of the
/// effect. Suggest values range from 0 to 2.
/// Default value: 0.
/// </summary>
[KeyInfo("1.5", KeyType.Integer | KeyType.Optional)]
public const string I = "/I";
}
}

/// <summary>
/// Border effect types.
/// </summary>
public enum pdfBorderEffect
{
None = 0,
Cloud1 = 1,
Cloud2 = 2
}


}
Loading