Update 20241118
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using Microsoft.Office.Interop.Excel;
|
||||
using Microsoft.Office.Interop.Word;
|
||||
using Model;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
@@ -8,6 +9,7 @@ using System.Linq.Expressions;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Office;
|
||||
|
||||
namespace OnDocOffice
|
||||
{
|
||||
@@ -82,8 +84,11 @@ namespace OnDocOffice
|
||||
public string connectstring { get; set; }
|
||||
public string filename { get; set; }
|
||||
public string dokumentid { get; set; }
|
||||
public
|
||||
|
||||
public bool is_protected { get; set; } = false;
|
||||
public
|
||||
Microsoft.Office.Interop.Word.Application word;
|
||||
Microsoft.Office.Interop.Word.Document worddoc;
|
||||
Document doc = null;
|
||||
|
||||
|
||||
@@ -94,7 +99,6 @@ namespace OnDocOffice
|
||||
this.dokumentid = dokumentid;
|
||||
|
||||
}
|
||||
|
||||
public bool Start_Application()
|
||||
{
|
||||
try
|
||||
@@ -125,7 +129,7 @@ namespace OnDocOffice
|
||||
{
|
||||
word.Run(dr[0].ToString());
|
||||
}
|
||||
catch ( Exception e) { string a = e.Message;}
|
||||
catch (Exception e) { string a = e.Message; }
|
||||
}
|
||||
}
|
||||
//clsProcessWatch.AddToList(dokumentid, filename, "Word");
|
||||
@@ -156,5 +160,298 @@ namespace OnDocOffice
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public string Generate_Word_in_Office(ref clsDocData docdata, ref clsdok dok, string vorlage, string connectionstring, string tempdir, string dokumentid, string apptype)
|
||||
{
|
||||
this.dokumentid = docdata.Dokumentid;
|
||||
string filename = tempdir + dokumentid + "." + apptype;
|
||||
int pos = 0;
|
||||
int pos2 = 0;
|
||||
|
||||
Helper.clsFileHelper fh = new Helper.clsFileHelper();
|
||||
fh.SaveBase64ToFile(vorlage, filename);
|
||||
Start_Application();
|
||||
worddoc = word.Documents.Open(filename);
|
||||
|
||||
|
||||
if (worddoc.ProtectionType != Microsoft.Office.Interop.Word.WdProtectionType.wdNoProtection)
|
||||
{
|
||||
worddoc.Unprotect(Password: "Australia");
|
||||
is_protected = true;
|
||||
}
|
||||
|
||||
bool cursorpositionieren = false;
|
||||
if (docdata.Kopfzeile_generieren == true)
|
||||
{
|
||||
Kopfzeile_generieren();
|
||||
}
|
||||
foreach (clsDocValue dv in docdata.DocValues)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
if (dv.TMBeginn.ToString() == "TGEDKCursor" || dv.TMBeginn.ToString() == "TGEDKCursorB" ||
|
||||
dv.FieldName.ToString() == "TGEDKCursor" || dv.FieldName.ToString() == "TGEDKCursorB") { cursorpositionieren = true; }
|
||||
}
|
||||
catch { }
|
||||
|
||||
if (dv.TMBeginn.ToString() != "" && dv.TMEnd.ToString() == "")
|
||||
{
|
||||
try
|
||||
{
|
||||
worddoc.Bookmarks[dv.TMBeginn.ToString()].Select();
|
||||
word.Selection.Text = dv.Value.ToString();
|
||||
|
||||
pos = worddoc.Bookmarks[dv.TMBeginn.ToString()].Start;
|
||||
pos2 = word.Selection.End;
|
||||
|
||||
|
||||
if (dv.TMBeginn.ToString().Substring(0, 19) == "XTGEDKDirektTelefonB" ||
|
||||
dv.TMBeginn.ToString().Substring(0, 23) == "XTGEDKVornameNameBetreue" ||
|
||||
dv.TMBeginn.ToString().Substring(0, 19) == "XTGEDKDirektTelefonZ")
|
||||
{
|
||||
word.Selection.MoveLeft(Unit: Microsoft.Office.Interop.Word.WdUnits.wdCharacter, Count: 1);
|
||||
word.Selection.TypeText(Text: "");
|
||||
word.Selection.SetRange(Start: pos + 1, End: pos2 + 1);
|
||||
|
||||
var withBlock = worddoc.Bookmarks;
|
||||
withBlock.Add(Range: word.Selection.Range, Name: dv.TMBeginn.ToString());
|
||||
withBlock.DefaultSorting = Microsoft.Office.Interop.Word.WdBookmarkSortBy.wdSortByName;
|
||||
withBlock.ShowHidden = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dv.TMBeginn.ToString().Substring(0, 22) == "XTGEDKDirektTelefonDokZ" ||
|
||||
dv.TMBeginn.ToString().Substring(0, 20) == "XTGEDKVornameNameDokZ")
|
||||
{
|
||||
word.Selection.Text = dv.Value.ToString();
|
||||
word.Selection.MoveLeft(Unit: Microsoft.Office.Interop.Word.WdUnits.wdCharacter, Count: 1);
|
||||
word.Selection.TypeText(Text: "");
|
||||
word.Selection.SetRange(Start: pos + 1, End: pos2 + 1);
|
||||
|
||||
var withBlock = worddoc.Bookmarks;
|
||||
withBlock.Add(Range: word.Selection.Range, Name: dv.TMBeginn.ToString());
|
||||
withBlock.DefaultSorting = Microsoft.Office.Interop.Word.WdBookmarkSortBy.wdSortByName;
|
||||
withBlock.ShowHidden = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
//objWord.Visible = True
|
||||
// objWord.Selection.SetRange(Start:= pos, End:= pos2)
|
||||
// With docWord.Bookmarks
|
||||
// .Add(Range:= objWord.Selection.Range, Name:= Dokumentdaten.Rows(i).Item("beginntextmarke"))
|
||||
// .DefaultSorting = Microsoft.Office.Interop.Word.WdBookmarkSortBy.wdSortByName
|
||||
// .ShowHidden = False
|
||||
// End With
|
||||
}
|
||||
}
|
||||
//objWord.Selection.MoveLeft(Unit:= Microsoft.Office.Interop.Word.WdUnits.wdCharacter, Count:= 1)
|
||||
// objWord.Selection.MoveLeft(Unit:= Microsoft.Office.Interop.Word.WdUnits.wdCharacter, Count:= 2, Extend:= Microsoft.Office.Interop.Word.WdMovementType.wdExtend)
|
||||
// If objWord.Selection.Text = " " Then
|
||||
// objWord.Selection.MoveRight(Unit:= Microsoft.Office.Interop.Word.WdUnits.wdCharacter, Count:= 1)
|
||||
// objWord.Selection.MoveLeft(Unit:= Microsoft.Office.Interop.Word.WdUnits.wdCharacter, Count:= 1, Extend:= Microsoft.Office.Interop.Word.WdMovementType.wdExtend)
|
||||
// objWord.Selection.Delete(Unit:= Microsoft.Office.Interop.Word.WdUnits.wdCharacter, Count:= 1)
|
||||
// End If
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
if (dv.TMBeginn.ToString() != "" && dv.TMEnd.ToString() != "")
|
||||
{
|
||||
try
|
||||
{
|
||||
worddoc.Bookmarks[dv.TMBeginn.ToString()].Select();
|
||||
pos = worddoc.Bookmarks[dv.TMBeginn.ToString()].Start;
|
||||
worddoc.Bookmarks[dv.TMEnd.ToString()].Select();
|
||||
pos2 = worddoc.Bookmarks[dv.TMEnd.ToString()].Start;
|
||||
word.Selection.SetRange(pos, pos2);
|
||||
word.Selection.TypeText(Text: dv.Value.ToString());
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
if (dv.FieldName.ToString() != "")
|
||||
{
|
||||
try
|
||||
{
|
||||
worddoc.FormFields[dv.FieldName.ToString()].Result = dv.Value;
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
}
|
||||
|
||||
if (docdata.Barcode == true) { Generate_Barcodes(ref docdata); }
|
||||
|
||||
if (is_protected)
|
||||
{
|
||||
worddoc.Protect(Type: Microsoft.Office.Interop.Word.WdProtectionType.wdAllowOnlyFormFields, NoReset: true, Password: "Australia");
|
||||
}
|
||||
worddoc.Save();
|
||||
|
||||
worddoc.Close();
|
||||
word.Quit(SaveChanges: false);
|
||||
worddoc = null;
|
||||
word = null;
|
||||
return fh.Base64FromFile(filename);
|
||||
}
|
||||
|
||||
private void Kopfzeile_generieren()
|
||||
{
|
||||
word.Selection.HomeKey(Unit: Microsoft.Office.Interop.Word.WdUnits.wdStory);
|
||||
if (word.ActiveWindow.View.SplitSpecial != Microsoft.Office.Interop.Word.WdSpecialPane.wdPaneNone)
|
||||
{
|
||||
word.ActiveWindow.Panes[2].Close();
|
||||
}
|
||||
if (word.ActiveWindow.ActivePane.View.Type == Microsoft.Office.Interop.Word.WdViewType.wdNormalView || word.ActiveWindow.ActivePane.View.Type == Microsoft.Office.Interop.Word.WdViewType.wdOutlineView)
|
||||
{
|
||||
word.ActiveWindow.ActivePane.View.Type = Microsoft.Office.Interop.Word.WdViewType.wdPrintView;
|
||||
}
|
||||
word.ActiveWindow.ActivePane.View.SeekView = Microsoft.Office.Interop.Word.WdSeekView.wdSeekCurrentPageHeader;
|
||||
set_headerbookmark();
|
||||
word.ActiveWindow.ActivePane.View.SeekView = Microsoft.Office.Interop.Word.WdSeekView.wdSeekMainDocument;
|
||||
}
|
||||
|
||||
private void set_headerbookmark()
|
||||
{
|
||||
try
|
||||
{
|
||||
worddoc.Bookmarks["TGEDKCompanyBBEB99"].Select();
|
||||
}
|
||||
catch
|
||||
{
|
||||
word.Selection.MoveDown(Unit: Microsoft.Office.Interop.Word.WdUnits.wdLine, Count: 1);
|
||||
{
|
||||
var withBlock = word.ActiveDocument.Bookmarks;
|
||||
withBlock.Add(Range: word.Selection.Range, Name: "TGEDKCompanyBBEB99");
|
||||
withBlock.DefaultSorting = Microsoft.Office.Interop.Word.WdBookmarkSortBy.wdSortByName;
|
||||
withBlock.ShowHidden = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
private void HeaderFooterAnzeigen()
|
||||
{
|
||||
|
||||
if (word.ActiveWindow.View.SplitSpecial != Microsoft.Office.Interop.Word.WdSpecialPane.wdPaneNone)
|
||||
{
|
||||
word.ActiveWindow.Panes[2].Close();
|
||||
}
|
||||
if (word.ActiveWindow.ActivePane.View.Type == Microsoft.Office.Interop.Word.WdViewType.wdNormalView || word.ActiveWindow.ActivePane.View.Type == Microsoft.Office.Interop.Word.WdViewType.wdOutlineView)
|
||||
{
|
||||
word.ActiveWindow.ActivePane.View.Type = Microsoft.Office.Interop.Word.WdViewType.wdPrintView;
|
||||
}
|
||||
word.ActiveWindow.ActivePane.View.SeekView = Microsoft.Office.Interop.Word.WdSeekView.wdSeekCurrentPageHeader;
|
||||
if (word.Selection.HeaderFooter.IsHeader == true)
|
||||
{
|
||||
word.ActiveWindow.ActivePane.View.SeekView = Microsoft.Office.Interop.Word.WdSeekView.wdSeekCurrentPageFooter;
|
||||
}
|
||||
else
|
||||
{
|
||||
word.ActiveWindow.ActivePane.View.SeekView = Microsoft.Office.Interop.Word.WdSeekView.wdSeekCurrentPageHeader;
|
||||
}
|
||||
}
|
||||
private void Generate_Barcodes(ref clsDocData docdata)
|
||||
{
|
||||
float left = 360;
|
||||
float top = 793;
|
||||
float width = 200;
|
||||
float height = 33;
|
||||
word.Selection.HomeKey(Unit: Microsoft.Office.Interop.Word.WdUnits.wdStory);
|
||||
Microsoft.Office.Interop.Word.WdStatistic stat = Microsoft.Office.Interop.Word.WdStatistic.wdStatisticPages;
|
||||
int pages = worddoc.ComputeStatistics(stat, null);
|
||||
for (int i = 1; i < pages; i++)
|
||||
{
|
||||
|
||||
string xname = i.ToString().Trim();
|
||||
word.Selection.GoTo(What:Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage,xname);
|
||||
HeaderFooterAnzeigen();
|
||||
word.Selection.HeaderFooter.Shapes.AddTextbox(Microsoft.Office.Core.MsoTextOrientation.msoTextOrientationHorizontal, docdata.barcode_left, docdata.barcode_top, docdata.barcode_width, docdata.barcode_height).Select();
|
||||
|
||||
word.Selection.ShapeRange.Line.Visible = Microsoft.Office.Core.MsoTriState.msoFalse;
|
||||
word.Selection.ShapeRange.TextFrame.MarginLeft = 0;
|
||||
word.Selection.ShapeRange.TextFrame.MarginTop = 0;
|
||||
word.Selection.ShapeRange.TextFrame.MarginRight = 0;
|
||||
word.Selection.ShapeRange.TextFrame.MarginBottom = 0;
|
||||
|
||||
word.ActiveDocument.Tables.Add(Range:word.Selection.Range, NumRows:1, NumColumns:1);
|
||||
|
||||
if (docdata.barcode_horizontal == 0)
|
||||
{
|
||||
word.Selection.Tables[1].Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft].LineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleNone;
|
||||
word.Selection.Tables[1].Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight].LineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleNone;
|
||||
word.Selection.Tables[1].Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop].LineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleNone;
|
||||
word.Selection.Tables[1].Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].LineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleNone;
|
||||
word.Selection.Tables[1].Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderDiagonalDown].LineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleNone;
|
||||
word.Selection.Tables[1].Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderDiagonalUp].LineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleNone;
|
||||
word.Selection.Orientation = Microsoft.Office.Interop.Word.WdTextOrientation.wdTextOrientationUpward;
|
||||
word.Selection.Tables[1].Rows.HeightRule = Microsoft.Office.Interop.Word.WdRowHeightRule.wdRowHeightAtLeast;
|
||||
word.Selection.Tables[1].Rows.Height = 150;
|
||||
}
|
||||
|
||||
word.Selection.TypeText(Bar25I(dokumentid.Substring(6,16)));
|
||||
word.Selection.HomeKey(Unit: Microsoft.Office.Interop.Word.WdUnits.wdLine, Extend: Microsoft.Office.Interop.Word.WdMovementType.wdExtend);
|
||||
word.Selection.Font.Name = docdata.barcode_font;
|
||||
word.Selection.Font.Size = docdata.barcode_fontsize;
|
||||
|
||||
word.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;
|
||||
word.Selection.EndKey(Unit: Microsoft.Office.Interop.Word.WdUnits.wdLine);
|
||||
word.Selection.Font.Name = docdata.Zusatz_Font;
|
||||
word.Selection.Font.Size = docdata.Zusatz_FontSize;
|
||||
word.Selection.TypeText(docdata.barcode_zusatz);
|
||||
}
|
||||
|
||||
}
|
||||
public bool IsNumeric(string value)
|
||||
{
|
||||
return value.All(char.IsNumber);
|
||||
}
|
||||
public string Bar25I(string BarTextIn)
|
||||
{
|
||||
string Bar25IRet = default;
|
||||
string BarTextOut = "";
|
||||
string TempString = "";
|
||||
long CharValue = 0;
|
||||
string barcodeout = "";
|
||||
// Initialize input and output strings
|
||||
BarTextOut = "";
|
||||
BarTextIn = BarTextIn.Trim();
|
||||
|
||||
// Throw away non-numeric data
|
||||
TempString = "";
|
||||
for (int II = 1, loopTo = BarTextIn.Length; II <= loopTo; II++)
|
||||
{
|
||||
if (IsNumeric(BarTextIn.Substring(II-1,1)))
|
||||
{
|
||||
TempString = TempString + BarTextIn.Substring(II - 1 ,1);
|
||||
}
|
||||
}
|
||||
|
||||
// If not an even number of digits, add a leading 0
|
||||
if (TempString.Length % 2 == 1)
|
||||
{
|
||||
TempString = "0" + TempString;
|
||||
}
|
||||
|
||||
// Break digit pairs up and convert to characters- build output string
|
||||
for (int II = 1, loopTo1 = TempString.Length; II <= loopTo1; II += 2)
|
||||
{
|
||||
// Break string into pairs of digits and get value
|
||||
CharValue = Convert.ToInt32(TempString.Substring(II-1,2));
|
||||
// translate value to ASCII and save in BarTextOut
|
||||
if (CharValue < 90)
|
||||
{
|
||||
BarTextOut = BarTextOut + (char)(CharValue+33);
|
||||
}
|
||||
else
|
||||
{
|
||||
BarTextOut = BarTextOut + (char)(CharValue + 71);
|
||||
}
|
||||
}
|
||||
|
||||
// Build ouput string, trailing space for Windows rasterization bug
|
||||
barcodeout = "{" + BarTextOut + "} ";
|
||||
|
||||
// Return the string
|
||||
Bar25IRet = barcodeout;
|
||||
return Bar25IRet;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user