This commit is contained in:
parent
5af2c31559
commit
9140d46c1d
@ -103,6 +103,29 @@ namespace Volian.Print.Library
|
|||||||
DrawPdfDebug(cb, left, top, left + width, myColumnText.YLine, debugText,yDescent);
|
DrawPdfDebug(cb, left, top, left + width, myColumnText.YLine, debugText,yDescent);
|
||||||
return myColumnText.YLine;
|
return myColumnText.YLine;
|
||||||
}
|
}
|
||||||
|
public static float FigureAt(PdfContentByte cb, iTextSharp.text.Image image, float x, float y, float width, float height, string debugText, float yBottommargin, bool hasBorder)
|
||||||
|
{
|
||||||
|
VlnSvgPageHelper _MyPageHelper = cb.PdfWriter.PageEvent as VlnSvgPageHelper;
|
||||||
|
PdfLayer textLayer = _MyPageHelper == null ? null : _MyPageHelper.TextLayer;
|
||||||
|
float left = x + Offset.X;
|
||||||
|
float top = y + Offset.Y;
|
||||||
|
float bottom = top - height;
|
||||||
|
image.ScaleAbsoluteWidth(width);
|
||||||
|
image.ScaleAbsoluteHeight(height);
|
||||||
|
image.SetAbsolutePosition(left, bottom);
|
||||||
|
if (textLayer != null) cb.BeginLayer(textLayer);
|
||||||
|
cb.AddImage(image);
|
||||||
|
if (hasBorder)
|
||||||
|
{
|
||||||
|
iTextSharp.text.Color boxColor = new iTextSharp.text.Color(System.Drawing.Color.Black); // (PrintOverride.OverrideBoxColor(System.Drawing.Color.Black));
|
||||||
|
cb.SetColorStroke(boxColor);
|
||||||
|
cb.SetLineWidth(.85F);
|
||||||
|
cb.Rectangle(left-1.5F, bottom-1.5F, width+3, height+3);
|
||||||
|
cb.Stroke();
|
||||||
|
}
|
||||||
|
if (textLayer != null) cb.EndLayer();
|
||||||
|
return bottom;
|
||||||
|
}
|
||||||
private static void DrawPdfDebug(PdfContentByte cb, float left, float top, float right, float bottom, string debugText, float yDescent)
|
private static void DrawPdfDebug(PdfContentByte cb, float left, float top, float right, float bottom, string debugText, float yDescent)
|
||||||
{
|
{
|
||||||
VlnSvgPageHelper _MyPageHelper = cb.PdfWriter.PageEvent as VlnSvgPageHelper;
|
VlnSvgPageHelper _MyPageHelper = cb.PdfWriter.PageEvent as VlnSvgPageHelper;
|
||||||
|
@ -31,7 +31,7 @@ namespace Volian.Print.Library
|
|||||||
public vlnBox(vlnParagraph paragraph)
|
public vlnBox(vlnParagraph paragraph)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
const string BoxThin = "\x2510.\x2500.\x250c.\x2502. . .\x2518.\x2514. .\x2500. . ";
|
public const string BoxThin = "\x2510.\x2500.\x250c.\x2502. . .\x2518.\x2514. .\x2500. . ";
|
||||||
const string BoxThick = "\x2584.\x2584.\x2584.\x2588. . .\x2580.\x2580. .\x2580. . ";
|
const string BoxThick = "\x2584.\x2584.\x2584.\x2588. . .\x2580.\x2580. .\x2580. . ";
|
||||||
public override float ToPdf(PdfContentByte cb, float yPageStart, float yTopMargin, float yBottomMargin)
|
public override float ToPdf(PdfContentByte cb, float yPageStart, float yTopMargin, float yBottomMargin)
|
||||||
{
|
{
|
||||||
|
@ -92,7 +92,7 @@ namespace Volian.Print.Library
|
|||||||
_MyParent = parent;
|
_MyParent = parent;
|
||||||
_Messages = new SortedDictionary<float, vlnChangeBarMessage>();
|
_Messages = new SortedDictionary<float, vlnChangeBarMessage>();
|
||||||
// if there is an RNO separator, add the separator's height in too.
|
// if there is an RNO separator, add the separator's height in too.
|
||||||
_Height = parent.Height * MyPageHelper.YMultiplier;
|
_Height = parent.Height * MyPageHelper.YMultiplier + (parent.MyItemInfo.IsFigure?SixLinesPerInch:0);
|
||||||
foreach (vlnPrintObject vpo in parent.PartsBelow)
|
foreach (vlnPrintObject vpo in parent.PartsBelow)
|
||||||
{
|
{
|
||||||
if (vpo is vlnRNOSeparator) _YExtendLine = (vpo.Height + vpo.YOffset - (parent.Height + parent.YOffset)) * MyPageHelper.YMultiplier;
|
if (vpo is vlnRNOSeparator) _YExtendLine = (vpo.Height + vpo.YOffset - (parent.Height + parent.YOffset)) * MyPageHelper.YMultiplier;
|
||||||
|
@ -2,6 +2,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
using iTextSharp.text.pdf;
|
using iTextSharp.text.pdf;
|
||||||
using iTextSharp.text;
|
using iTextSharp.text;
|
||||||
using Itenso.Rtf;
|
using Itenso.Rtf;
|
||||||
@ -95,18 +96,18 @@ namespace Volian.Print.Library
|
|||||||
if (MyItemInfo.HasChangeBar()) MyPageHelper.AddChangeBar(DoChangeBar(cb, MyItemInfo, MyPageHelper, XOffset, yLocation, MyPageHelper.MaxRNO, MyItemInfo.ActiveFormat), cbMess);
|
if (MyItemInfo.HasChangeBar()) MyPageHelper.AddChangeBar(DoChangeBar(cb, MyItemInfo, MyPageHelper, XOffset, yLocation, MyPageHelper.MaxRNO, MyItemInfo.ActiveFormat), cbMess);
|
||||||
|
|
||||||
float retval = yLocation;
|
float retval = yLocation;
|
||||||
if (!MyItemInfo.IsStepSection) // Don't ouput the Step Section title
|
if (MyItemInfo.IsFigure)
|
||||||
{
|
{
|
||||||
retval = Rtf2Pdf.TextAt(cb, IParagraph, XOffset, yLocation, Width, 100, PdfDebugText, yBottomMargin);
|
yLocation -= (SixLinesPerInch * MyPageHelper.YMultiplier);
|
||||||
if (retval == 0) // problem occurred - paragraph was not able to be printed on page
|
if (ImageText != null)
|
||||||
{ // pagination logic needs to be fixed.
|
retval = DrawFigure(cb, yBottomMargin, yLocation);
|
||||||
cb.PdfDocument.NewPage();
|
else
|
||||||
yPageStart = yTopMargin + YTop;
|
retval = DrawText(cb, ref yPageStart, yTopMargin, yBottomMargin, ref yLocation);
|
||||||
yLocation = yPageStart - YOffset;
|
|
||||||
//MyItemInfo.ItemID, YSize, yPageSize, yLocation
|
}
|
||||||
Console.WriteLine("-1,'Yes','Forced Pagination',{0},{1},,{3},'{4}'", MyItemInfo.ItemID, YSize, 0, yLocation, MyItemInfo.ShortPath);
|
else if (!MyItemInfo.IsStepSection) // Don't ouput the Step Section title
|
||||||
retval = Rtf2Pdf.TextAt(cb, IParagraph, XOffset, yLocation, Width, 100, PdfDebugText, yBottomMargin);
|
{
|
||||||
}
|
retval = DrawText(cb, ref yPageStart, yTopMargin, yBottomMargin, ref yLocation);
|
||||||
}
|
}
|
||||||
//Height = yLocation - retval;
|
//Height = yLocation - retval;
|
||||||
if (_PartsLeft != null && _PartsLeft.Count > 0) yPageStart = PartsLeft.ToPdf(cb, yPageStart, yTopMargin, yBottomMargin);
|
if (_PartsLeft != null && _PartsLeft.Count > 0) yPageStart = PartsLeft.ToPdf(cb, yPageStart, yTopMargin, yBottomMargin);
|
||||||
@ -116,6 +117,41 @@ namespace Volian.Print.Library
|
|||||||
|
|
||||||
return yPageStart;
|
return yPageStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private float DrawText(PdfContentByte cb, ref float yPageStart, float yTopMargin, float yBottomMargin, ref float yLocation)
|
||||||
|
{
|
||||||
|
float retval = yLocation;
|
||||||
|
retval = Rtf2Pdf.TextAt(cb, IParagraph, XOffset, yLocation, Width, 100, PdfDebugText, yBottomMargin);
|
||||||
|
if (retval == 0) // problem occurred - paragraph was not able to be printed on page
|
||||||
|
{ // pagination logic needs to be fixed.
|
||||||
|
cb.PdfDocument.NewPage();
|
||||||
|
yPageStart = yTopMargin + YTop;
|
||||||
|
yLocation = yPageStart - YOffset;
|
||||||
|
//MyItemInfo.ItemID, YSize, yPageSize, yLocation
|
||||||
|
Console.WriteLine("-1,'Yes','Forced Pagination',{0},{1},,{3},'{4}'", MyItemInfo.ItemID, YSize, 0, yLocation, MyItemInfo.ShortPath);
|
||||||
|
retval = Rtf2Pdf.TextAt(cb, IParagraph, XOffset, yLocation, Width, 100, PdfDebugText, yBottomMargin);
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
private float DrawFigure(PdfContentByte cb, float yBottomMargin, float yLocation)
|
||||||
|
{
|
||||||
|
float retval = yLocation;
|
||||||
|
if (ImageText != null)
|
||||||
|
{
|
||||||
|
string[] vals = ImageText.Split("\n".ToCharArray());
|
||||||
|
ProcedureInfo proc = MyItemInfo.MyProcedure;
|
||||||
|
DocVersionInfo dvi = proc.ActiveParent as DocVersionInfo;
|
||||||
|
ROFstInfo rofst = dvi.DocVersionAssociations[0].MyROFst;
|
||||||
|
ROImageInfo roImage = ROImageInfo.GetByROFstID_FileName(rofst.ROFstID, vals[0]);
|
||||||
|
if (roImage != null)
|
||||||
|
{
|
||||||
|
iTextSharp.text.Image it_image = iTextSharp.text.Image.GetInstance(roImage.Content);
|
||||||
|
retval = Rtf2Pdf.FigureAt(cb, it_image, XOffset + _CharsToTwips, yLocation, Width * MyPageHelper.YMultiplier, Height * MyPageHelper.YMultiplier, PdfDebugText, yBottomMargin, !MyItemInfo.FormatStepData.Type.Contains("Borderless"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
private string PdfDebugText
|
private string PdfDebugText
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@ -312,30 +348,59 @@ namespace Volian.Print.Library
|
|||||||
YOffset = yoff;
|
YOffset = yoff;
|
||||||
AddMacros(itemInfo, mytab);
|
AddMacros(itemInfo, mytab);
|
||||||
if (mytab != null) mytab.YOffset = yoff;
|
if (mytab != null) mytab.YOffset = yoff;
|
||||||
Rtf = GetRtf(itemInfo);
|
if (itemInfo.IsFigure) // if a figure we've got to determine the size:
|
||||||
if (itemInfo.IsTablePart)
|
|
||||||
{
|
{
|
||||||
Width = GetTableWidth(cb, IParagraph);
|
if (itemInfo.MyContent.Text != null)
|
||||||
vlnParagraph hls = MyParent;
|
|
||||||
bool aerTable = itemInfo.FormatStepData.Type.Contains("AER");
|
|
||||||
while (hls.MyParent != null)
|
|
||||||
{
|
{
|
||||||
if (aerTable && hls.MyItemInfo.IsHigh) break;
|
ProcedureInfo proc = itemInfo.MyProcedure;
|
||||||
hls = hls.MyParent;
|
DocVersionInfo dvi = proc.ActiveParent as DocVersionInfo;
|
||||||
|
ROFstInfo rofst = dvi.DocVersionAssociations[0].MyROFst;
|
||||||
|
ROFSTLookup lookup = rofst.ROFSTLookup;
|
||||||
|
string linkInfoText = itemInfo.MyContent.Text.Replace(@"\v ", "");
|
||||||
|
Match m = Regex.Match(linkInfoText, @"(.*)[#]Link:([A-Za-z]*):(.*)");
|
||||||
|
string[] subs = m.Groups[3].Value.Split(" ".ToCharArray());
|
||||||
|
string roid = subs[1];
|
||||||
|
string val = lookup.GetRoValue(subs[1]);
|
||||||
|
if (val == null) val = lookup.GetRoValue(subs[1].Substring(0, 12));
|
||||||
|
if (val != null)
|
||||||
|
{
|
||||||
|
string[] vals = val.Split("\n".ToCharArray());
|
||||||
|
Width = Int32.Parse(vals[3], System.Globalization.NumberStyles.AllowHexSpecifier) * _CharsToTwips;
|
||||||
|
int lines = Int32.Parse(vals[2], System.Globalization.NumberStyles.AllowHexSpecifier);
|
||||||
|
Height = lines * SixLinesPerInch;
|
||||||
|
yoff += (Height + (2 * SixLinesPerInch));
|
||||||
|
string erMsg = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ROImageInfo roImage = ROImageInfo.GetByROFstID_FileName(rofst.ROFstID, vals[0]);
|
||||||
|
if (roImage != null)
|
||||||
|
ImageText = val;
|
||||||
|
else
|
||||||
|
erMsg = string.Format("Image {0} does not exist.", vals[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
erMsg = string.Format("Image {0} does not exist, error = {1}.", vals[0], ex.Message);
|
||||||
|
}
|
||||||
|
if (erMsg != null) Rtf = GetRtf(erMsg, itemInfo.ActiveFormat.PlantFormat.FormatData.Font);
|
||||||
|
}
|
||||||
|
CalculateXOffset(itemInfo, maxRNO, formatInfo);
|
||||||
}
|
}
|
||||||
XOffset = hls.XOffset + hls.Width / 2 - Width / 2;
|
|
||||||
if (XOffset < (float)itemInfo.MyDocStyle.Layout.LeftMargin)
|
|
||||||
XOffsetBox = (float)itemInfo.MyDocStyle.Layout.LeftMargin;
|
|
||||||
}
|
}
|
||||||
if (!itemInfo.IsStepSection) // Don't add any lines for the Section Title
|
else
|
||||||
{
|
{
|
||||||
yoff += Height;
|
Rtf = GetRtf(itemInfo);
|
||||||
yoff += AdjustForBlankLines();
|
if (itemInfo.IsTablePart)
|
||||||
}
|
{
|
||||||
if (itemInfo.IsFigure)
|
Width = GetTableWidth(cb, IParagraph);
|
||||||
{
|
CalculateXOffset(itemInfo, maxRNO, formatInfo);
|
||||||
// get image from ro.
|
}
|
||||||
string myro = itemInfo.MyContent.Text;
|
if (!itemInfo.IsStepSection) // Don't add any lines for the Section Title
|
||||||
|
{
|
||||||
|
yoff += Height;
|
||||||
|
yoff += AdjustForBlankLines();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
float yOffRight = yoff;
|
float yOffRight = yoff;
|
||||||
float RnoOffset = ToInt(formatInfo.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.ColRTable, maxRNO);
|
float RnoOffset = ToInt(formatInfo.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.ColRTable, maxRNO);
|
||||||
@ -361,6 +426,23 @@ namespace Volian.Print.Library
|
|||||||
}
|
}
|
||||||
YBottomMost = yoff;
|
YBottomMost = yoff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void CalculateXOffset(ItemInfo itemInfo, int maxRNO, FormatInfo formatInfo)
|
||||||
|
{
|
||||||
|
bool aerFigure = itemInfo.FormatStepData.Type.Contains("AER");
|
||||||
|
vlnParagraph hls1 = MyParent;
|
||||||
|
while (hls1.MyParent != null && !hls1.MyItemInfo.IsHigh) hls1 = hls1.MyParent;
|
||||||
|
XOffset = hls1.XOffset + hls1.Width / 2 - Width / 2; // xoffset if AER column
|
||||||
|
if (!aerFigure)
|
||||||
|
{
|
||||||
|
// adjust for RNO
|
||||||
|
int colR = int.Parse(formatInfo.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.ColRTable.Split(",".ToCharArray())[itemInfo.ColumnMode]);
|
||||||
|
XOffset += (colR * maxRNO) / 2;
|
||||||
|
XOffset -= (hls1.XOffset - (float)itemInfo.MyDocStyle.Layout.LeftMargin) / 2;
|
||||||
|
}
|
||||||
|
if (XOffset < (float)itemInfo.MyDocStyle.Layout.LeftMargin)
|
||||||
|
XOffsetBox = (float)itemInfo.MyDocStyle.Layout.LeftMargin;
|
||||||
|
}
|
||||||
private float AdjustForBlankLines()
|
private float AdjustForBlankLines()
|
||||||
{
|
{
|
||||||
int everyNLines = MyItemInfo.FormatStepData == null ? 1 : MyItemInfo.FormatStepData.StepLayoutData.EveryNLines ?? 1;
|
int everyNLines = MyItemInfo.FormatStepData == null ? 1 : MyItemInfo.FormatStepData.StepLayoutData.EveryNLines ?? 1;
|
||||||
|
@ -66,6 +66,12 @@ namespace Volian.Print.Library
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private string _ImageText; // ro definition, value part of #Link in case of image/figure
|
||||||
|
public string ImageText
|
||||||
|
{
|
||||||
|
get { return _ImageText; }
|
||||||
|
set { _ImageText = value; }
|
||||||
|
}
|
||||||
private string _Rtf; // may become iTextSharp paragraph
|
private string _Rtf; // may become iTextSharp paragraph
|
||||||
public string Rtf
|
public string Rtf
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user