Fri Jun 04, 2021 8:25 am
Hey,
no I use C#.
Here my Code
// Thats my Main Methode
private void CreateBagDokument()
{
// BAG Vorlage
var file = SelectedVorlage.Pfad;
var bag = new Document();
//BAG Vorlage wird gelesen
bag.LoadFromFile(file);
bag = AddList(bag);
// Lade die Parameter
var param = new BagParameter();
param = LoadParameter(@"C:\temp\BAG.json");
bag = SetInhalt(bag, param);
bag = ReplaceFields(bag, param);
//Sektion des Tenors
// bag.SaveToFile(@"C:\temp\testfile.rtf", FileFormat.Rtf);
//DocContent = File.ReadAllText(@"C:\temp\testfile.rtf");
bag.SaveToFile(@"C:\temp\" + Path.GetFileNameWithoutExtension(SelectedVorlage.Pfad) + ".xps",
FileFormat.XPS);
var xpsDocument =
new XpsDocument(@"C:\temp\" + Path.GetFileNameWithoutExtension(SelectedVorlage.Pfad) + ".xps",
FileAccess.Read);
Dokument = xpsDocument.GetFixedDocumentSequence();
xpsDocument.Close();
}
private Document AddList( Document dok )
{
var tenorStyle = new ListStyle(dok, ListType.Numbered) { Name = "tenorstyle" };
tenorStyle.Levels[0].PatternType = ListPatternType.Arabic;
tenorStyle.Levels[1].NumberPrefix = "\x0000.";
dok.ListStyles.Add(tenorStyle);
var tenorSection = dok.Sections[0];
var grundSection = dok.Sections[1];
var rechtSection = dok.Sections[2];
var tenorList = new List<Textbausteine>();
var grundList = new List<Textbausteine>();
var rechtList = new List<Textbausteine>();
if ( BausteineList != null )
{
foreach ( var item in BausteineList )
{
if ( item.IsSelected )
{
switch ( item.Briefbereich )
{
case 0:
tenorList.Add(item);
break;
case 1:
grundList.Add(item);
break;
case 2:
rechtList.Add(item);
break;
}
}
}
// Tenor
foreach ( var item in tenorList )
{
//var str = Regex.Matches(item.Inhalt, docVarPattern);
//foreach ( Match name in str )
//{
// var nm = Regex.Match(name.Value, docVarNamePattern);
//}
var paragraph = tenorSection.AddParagraph();
paragraph.AppendText(item.Inhalt);
paragraph.ApplyStyle(BuiltinStyle.BodyText1I);
paragraph.ListFormat.ApplyStyle("tenorstyle");
paragraph.AppendBreak(BreakType.LineBreak);
}
// Gründe
foreach ( var item in grundList )
{
var paragraph = grundSection.AddParagraph();
paragraph.AppendText(item.Inhalt);
paragraph.AppendBreak(BreakType.LineBreak);
}
// Rechtsbehelfsbelehrung
foreach ( var item in rechtList )
{
var paragraph = rechtSection.AddParagraph();
paragraph.AppendText(item.Inhalt);
paragraph.AppendBreak(BreakType.LineBreak);
}
}
return dok;
}
protected BagParameter LoadParameter( string file )
{
var openStream = File.ReadAllText(file, Encoding.GetEncoding("iso-8859-1"));
if ( !string.IsNullOrEmpty(openStream) )
{
try
{
var par = JsonSerializer.Deserialize<BagParameter>(openStream);
return par;
}
catch ( Exception e )
{
var _manager = new NotificationManager();
var content = new NotificationContent
{
Title = "Error",
Message = "Die Übernahme der Daten hat nicht funktioniert!\n" + e.Message,
Type = NotificationType.Error
};
_manager.ShowAsync(content, expirationTime: TimeSpan.FromSeconds(10));
return null;
}
}
return null;
}
private Document ReplaceFields( Document doc, BagParameter param )
{
if ( doc == null )
{
var doknew = new Document();
return doknew;
}
doc.Variables.Add("BEZIRK", param.Bezirk ?? "");
doc.Variables.Add("BEZIRKADRESSE", param.Bezirkadresse ?? "");
doc.Variables.Add("SITZUNGSDATUM", param.SitzungDatum.ToShortDateString() + " ");
doc.Variables.Add("DOKID", param.DokId ?? "");
doc.Variables.Add("KUERZEL", Regex.Match(param.Sachbearbeiter, @"\(.*\)").ToString() ?? "");
var orderedEnumerable = param.BeisitzerArzt.OrderBy(x => x.Vorsitz).ThenBy(x => x.Name);
var count = 1;
foreach ( var arzt in orderedEnumerable )
{
doc.Variables.Add("BEISITZERARZT" + count, arzt.Vorname + " " + arzt.Name + " ");
count++;
}
var kk = param.BeisitzerKK.FirstOrDefault(x => x.Vorsitz);
doc.Variables.Add("BEISITZERKK1", kk?.Vorname + " " + kk?.Name + " ");
foreach ( var bekk in param.BeisitzerKK )
{
if ( bekk != kk && doc.Variables["BEISITZERKK2"] == null )
{
doc.Variables.Add("BEISITZERKK2", bekk.Vorname + " " + bekk.Name + " ");
kk = bekk;
}
if ( bekk != kk && doc.Variables["BEISITZERKK3"] == null )
{
doc.Variables.Add("BEISITZERKK3", bekk.Vorname + " " + bekk.Name + " ");
kk = bekk;
}
if ( bekk != kk && doc.Variables["BEISITZERKK4"] == null )
{
doc.Variables.Add("BEISITZERKK4", bekk.Vorname + " " + bekk.Name + " ");
kk = bekk;
}
}
doc.Variables.Add("TITEL1", "Doktore");
doc.IsUpdateFields = true;
return doc;
}
private Document SetInhalt( Document doc, BagParameter param )
{
const string Pattern = @"\{+(\s?)+(.*?)+(\s?)+\}";
const string Patter = @"""[^""]*""";
var docVarPattern = new Regex(Pattern);
var docVarNamePattern = new Regex(Patter);
//A temp document to avoid the fieldcollection duplicates
var doc2 = new Document();
var section = doc2.AddSection();
var selections = doc.FindAllPattern(docVarPattern);
foreach ( var selection in selections )
{
var par = section.AddParagraph();
var name = ExtractName(docVarNamePattern.Match(selection.SelectedText).Value);
var range = selection.GetAsOneRange();
var index = range.OwnerParagraph.ChildObjects.IndexOf(range);
var field1 = par.AppendField(name, FieldType.FieldDocVariable);
field1.Code = " DOCVARIABLE " + name + " ";
//Copy the field items into the target paragraph
foreach ( DocumentObject obj in par.ChildObjects )
{
range.OwnerParagraph.ChildObjects.Insert(index++, obj.Clone());
}
//Remove the orginal text
range.OwnerParagraph.ChildObjects.Remove(range);
}
return doc;
}
private string ExtractName( string fieldCode )
{
const string pattern = @"DOCVARIABLE\\s+(?<name>[^\\s\""]+)|(\""(?<name>[^\""]+)\"").*";
var match = Regex.Match(fieldCode, pattern);
return match.Result("${name}");
}