This commit is contained in:
parent
92a879bb6b
commit
f1074ce770
@ -442,8 +442,7 @@ namespace Volian.Print.Library
|
|||||||
// For example Header1 becomes H1 and Box2 becomes B2
|
// For example Header1 becomes H1 and Box2 becomes B2
|
||||||
return token.Substring(1, 1) + token.Substring(token.Length - 2, 1);
|
return token.Substring(1, 1) + token.Substring(token.Length - 2, 1);
|
||||||
}
|
}
|
||||||
private static Regex regexJustTokens = new Regex(@"^{([^{}\?]*}{)*[^{}\?]*}$");
|
private static Regex regexJustTokens = new Regex(@"^{([^{}]*}{)*[^{}]*}$");
|
||||||
|
|
||||||
private void AddPageListItems(Volian.Svg.Library.Svg mySvg, VEPROMS.CSLA.Library.PageStyle pageStyle, VEPROMS.CSLA.Library.SectionInfo section)
|
private void AddPageListItems(Volian.Svg.Library.Svg mySvg, VEPROMS.CSLA.Library.PageStyle pageStyle, VEPROMS.CSLA.Library.SectionInfo section)
|
||||||
{
|
{
|
||||||
SvgGroup svgGroup = new SvgGroup();
|
SvgGroup svgGroup = new SvgGroup();
|
||||||
@ -492,7 +491,39 @@ namespace Volian.Print.Library
|
|||||||
svgGroup.Add(PageItemToSvgText(pageItem, section.DisplayNumber));
|
svgGroup.Add(PageItemToSvgText(pageItem, section.DisplayNumber));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
svgGroup.Add(PageItemToSvgText(pageItem, pageItem.Token));
|
// see if it's a PSI token:
|
||||||
|
if (token.Contains(@"PS-"))
|
||||||
|
{
|
||||||
|
ProcedureConfig procConfig = section.MyProcedure.MyConfig as ProcedureConfig;
|
||||||
|
if (procConfig != null)
|
||||||
|
{
|
||||||
|
int indx = token.IndexOf("-");
|
||||||
|
string val = procConfig.GetValue("PSI", token.Substring(4,token.Length-5));
|
||||||
|
svgGroup.Add(PageItemToSvgText(pageItem, val));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (token.Contains(@"PS="))
|
||||||
|
{
|
||||||
|
ProcedureConfig procConfig = section.MyProcedure.MyConfig as ProcedureConfig;
|
||||||
|
if (procConfig != null)
|
||||||
|
{
|
||||||
|
int indx = token.IndexOf("=");
|
||||||
|
int qindx = token.IndexOf("?", indx);
|
||||||
|
string pstok = token.Substring(indx + 1, qindx-indx-1);
|
||||||
|
string val = procConfig.GetValue("PSI", pstok);
|
||||||
|
int bindx = token.IndexOf("|", indx);
|
||||||
|
if (val == "Y")
|
||||||
|
val = token.Substring(qindx + 1, bindx - qindx - 1);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int eindx = token.IndexOf("}", bindx);
|
||||||
|
val = token.Substring(bindx + 1, eindx - bindx - 1);
|
||||||
|
}
|
||||||
|
if (val != null && val != "")svgGroup.Add(PageItemToSvgText(pageItem, val));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
svgGroup.Add(PageItemToSvgText(pageItem, pageItem.Token));
|
||||||
//_MyLog.InfoFormat("Token not processed {0}", token);
|
//_MyLog.InfoFormat("Token not processed {0}", token);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -245,7 +245,7 @@ namespace Volian.Print.Library
|
|||||||
}
|
}
|
||||||
private static bool FontIsFixed(System.Drawing.Font font)
|
private static bool FontIsFixed(System.Drawing.Font font)
|
||||||
{
|
{
|
||||||
iTextSharp.text.Font iFont = Rtf2iTextSharp.GetFont(font);
|
iTextSharp.text.Font iFont = Volian.Svg.Library.VolianPdf.GetFont(font);
|
||||||
float fW = iFont.BaseFont.GetWidthPointKerned("W", 12);
|
float fW = iFont.BaseFont.GetWidthPointKerned("W", 12);
|
||||||
float fE = iFont.BaseFont.GetWidthPointKerned("!", 12);
|
float fE = iFont.BaseFont.GetWidthPointKerned("!", 12);
|
||||||
return fW == fE;
|
return fW == fE;
|
||||||
|
@ -26,6 +26,37 @@ namespace Volian.Svg.Library
|
|||||||
pdfr.Close();
|
pdfr.Close();
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
public static void RegisterFont(string fontName)
|
||||||
|
{
|
||||||
|
if (!iTextSharp.text.FontFactory.IsRegistered(fontName))
|
||||||
|
{
|
||||||
|
foreach (string name in FontKey.GetValueNames())
|
||||||
|
{
|
||||||
|
if (name.StartsWith(fontName))
|
||||||
|
{
|
||||||
|
string fontFile = (string)FontKey.GetValue(name);
|
||||||
|
iTextSharp.text.FontFactory.Register(fontFile.Contains("\\") ? fontFile : FontFolder + "\\" + fontFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private static RegistryKey _FontKey = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Microsoft").OpenSubKey("Windows NT").OpenSubKey("CurrentVersion").OpenSubKey("Fonts");
|
||||||
|
public static RegistryKey FontKey
|
||||||
|
{ get { return _FontKey; } }
|
||||||
|
private static string _FontFolder = (String)Registry.CurrentUser.OpenSubKey("Software").OpenSubKey("Microsoft").OpenSubKey("Windows").OpenSubKey("CurrentVersion").OpenSubKey("Explorer").OpenSubKey("Shell Folders").GetValue("Fonts");
|
||||||
|
public static string FontFolder
|
||||||
|
{ get { return _FontFolder; } }
|
||||||
|
public static iTextSharp.text.Font GetFont(string fontName, int size, int style)
|
||||||
|
{
|
||||||
|
RegisterFont(fontName);
|
||||||
|
return iTextSharp.text.FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, size / 2, style);
|
||||||
|
}
|
||||||
|
public static iTextSharp.text.Font GetFont(System.Drawing.Font font) // fontName, int size, int style)
|
||||||
|
{
|
||||||
|
RegisterFont(font.Name);
|
||||||
|
int style = (font.Bold ? iTextSharp.text.Font.BOLD : 0) + (font.Italic ? iTextSharp.text.Font.ITALIC : 0);
|
||||||
|
return iTextSharp.text.FontFactory.GetFont(font.Name, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, font.Size, style);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
internal static class SvgITextLibrary
|
internal static class SvgITextLibrary
|
||||||
{
|
{
|
||||||
@ -494,8 +525,21 @@ namespace Volian.Svg.Library
|
|||||||
tmp.RestoreState();
|
tmp.RestoreState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public partial class SvgText : SvgShapePart
|
public partial class SvgText : SvgShapePart
|
||||||
{
|
{
|
||||||
|
private static string ReplaceSpecialCharacter(Match m)
|
||||||
|
{
|
||||||
|
int i = int.Parse(m.ToString().Substring(2, m.ToString().Length - 3));
|
||||||
|
char c = (char)i;
|
||||||
|
return c.ToString();
|
||||||
|
}
|
||||||
|
private static string ReplaceHexCharacter(Match m)
|
||||||
|
{
|
||||||
|
int i = int.Parse(m.ToString().Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
|
||||||
|
char c = (char)i;
|
||||||
|
return c.ToString();
|
||||||
|
}
|
||||||
public int Align
|
public int Align
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@ -525,11 +569,28 @@ namespace Volian.Svg.Library
|
|||||||
bool fill = FillColor != System.Drawing.Color.Transparent;
|
bool fill = FillColor != System.Drawing.Color.Transparent;
|
||||||
bool stroke = OutlineWidth.Value != 0F && OutlineColor != System.Drawing.Color.Empty;
|
bool stroke = OutlineWidth.Value != 0F && OutlineColor != System.Drawing.Color.Empty;
|
||||||
int fontStyle = (Font.Bold ? iTextSharp.text.Font.BOLD : 0) + (Font.Italic ? iTextSharp.text.Font.ITALIC : 0);
|
int fontStyle = (Font.Bold ? iTextSharp.text.Font.BOLD : 0) + (Font.Italic ? iTextSharp.text.Font.ITALIC : 0);
|
||||||
iTextSharp.text.Font font = FontFactory.GetFont(Font.Name, scale.M(new SvgMeasurement(Font.SizeInPoints, E_MeasurementUnits.PT)), fontStyle);
|
VolianPdf.RegisterFont(Font.Name);
|
||||||
|
iTextSharp.text.Font font = FontFactory.GetFont(Font.Name, BaseFont.IDENTITY_H, true, scale.M(new SvgMeasurement(Font.SizeInPoints, E_MeasurementUnits.PT)), fontStyle, new Color(FillColor));
|
||||||
|
iTextSharp.text.pdf.FontSelector fs = new FontSelector();
|
||||||
|
fs.AddFont(font);
|
||||||
|
if (font.BaseFont.GetWidthPoint("m", 12) == font.BaseFont.GetWidthPoint(".", 12))
|
||||||
|
{
|
||||||
|
VolianPdf.RegisterFont("VESymbFix");
|
||||||
|
fs.AddFont(FontFactory.GetFont("VESymbFix", BaseFont.IDENTITY_H, true, scale.M(new SvgMeasurement(Font.SizeInPoints, E_MeasurementUnits.PT)), fontStyle, new Color(FillColor)));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
VolianPdf.RegisterFont("Arial Unicode MS");
|
||||||
|
fs.AddFont(FontFactory.GetFont("Arial Unicode MS", BaseFont.IDENTITY_H, true, scale.M(new SvgMeasurement(Font.SizeInPoints, E_MeasurementUnits.PT)), fontStyle, new Color(FillColor)));
|
||||||
|
}
|
||||||
ColumnText ct = new ColumnText(cb);
|
ColumnText ct = new ColumnText(cb);
|
||||||
Chunk chk = new Chunk(text, font);
|
text = Regex.Replace(text, @"\\u[0-9]+[?]", new MatchEvaluator(ReplaceSpecialCharacter));
|
||||||
|
text = Regex.Replace(text, @"\\'[0-9a-fA-F][0-9a-fA-F]", new MatchEvaluator(ReplaceHexCharacter));
|
||||||
|
Phrase ph = fs.Process(text);
|
||||||
float x = scale.X(X);
|
float x = scale.X(X);
|
||||||
float w = chk.GetWidthPoint();
|
float w = 0; // chk.GetWidthPoint();
|
||||||
|
foreach (Chunk chk in ph.Chunks)
|
||||||
|
w += chk.GetWidthPoint();
|
||||||
switch (Justify)
|
switch (Justify)
|
||||||
{
|
{
|
||||||
//case SvgJustify.Left:
|
//case SvgJustify.Left:
|
||||||
@ -547,9 +608,9 @@ namespace Volian.Svg.Library
|
|||||||
float Offset = 0;
|
float Offset = 0;
|
||||||
if (Font.Underline)
|
if (Font.Underline)
|
||||||
{
|
{
|
||||||
chk.SetUnderline(new Color(FillColor), 0, 0.047F, 0, -.1373F, PdfContentByte.LINE_CAP_ROUND);
|
foreach (Chunk chk in ph.Chunks)
|
||||||
|
chk.SetUnderline(new Color(FillColor), 0, 0.047F, 0, -.1373F, PdfContentByte.LINE_CAP_ROUND);
|
||||||
}
|
}
|
||||||
Phrase ph = new Phrase(chk);
|
|
||||||
ct.SetSimpleColumn(x, y + ph.Leading + Offset, xRight + 1F, y + ph.Leading + Offset - 2 * font.Size);
|
ct.SetSimpleColumn(x, y + ph.Leading + Offset, xRight + 1F, y + ph.Leading + Offset - 2 * font.Size);
|
||||||
ct.AddElement(ph);
|
ct.AddElement(ph);
|
||||||
cb.SaveState();
|
cb.SaveState();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user