You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
495 lines
17 KiB
495 lines
17 KiB
using Database;
|
|
using Syncfusion.DocIO.DLS;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net.Http;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Syncfusion.DocIO;
|
|
using Syncfusion.DocIO.DLS;
|
|
|
|
using Syncfusion.Pdf;
|
|
using Syncfusion.XlsIO;
|
|
using static System.Net.Mime.MediaTypeNames;
|
|
using Syncfusion.Pdf.Parsing;
|
|
using System.Xml.Linq;
|
|
using Model;
|
|
using SkiaSharp;
|
|
using System.Web;
|
|
using System.Net;
|
|
using System.Security.Policy;
|
|
using DOCGEN.Klassen;
|
|
using System.Data;
|
|
using Helper;
|
|
using Syncfusion.XlsIO.Parser.Biff_Records;
|
|
using System.Buffers.Text;
|
|
using Syncfusion.ExcelToPdfConverter;
|
|
|
|
|
|
namespace DOCGEN
|
|
{
|
|
public class DocGet
|
|
{
|
|
private string connectionstring = "";
|
|
private string URI = "https://localhost:44334/";
|
|
|
|
public DocGet(string Connectionstring)
|
|
{
|
|
this.connectionstring = Connectionstring;
|
|
Lic();
|
|
}
|
|
|
|
public void Lic()
|
|
{
|
|
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("Ngo9BigBOggjHTQxAR8/V1NCaF5cXmZCf1FpRmJGdld5fUVHYVZUTXxaS00DNHVRdkdnWXdecXRdQ2heUU13XUI=");
|
|
|
|
}
|
|
public string test_filetype(string filename)
|
|
{
|
|
string b64 = ConvertFileToBase64(filename);
|
|
var streamword = new MemoryStream(Convert.FromBase64String(b64));
|
|
var streamexcel = new MemoryStream(Convert.FromBase64String(b64));
|
|
|
|
try
|
|
{
|
|
if (Is_WordDocument(streamword) == true)
|
|
{
|
|
return "Word";
|
|
}
|
|
if (Is_ExcelDocument(streamexcel) == true)
|
|
{
|
|
return "Excel";
|
|
}
|
|
if (Is_PDFDocument(b64))
|
|
{
|
|
return "PDF";
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
return "";
|
|
}
|
|
finally
|
|
{
|
|
streamword.Dispose();
|
|
streamexcel.Dispose();
|
|
}
|
|
return "";
|
|
}
|
|
|
|
public string get_word_vorlage(int vorlagenr)
|
|
{
|
|
DB db = new DB(connectionstring);
|
|
string sql = "Select dbo.BinaryToBase64(vorlage) as Data from office_vorlage_datei where office_vorlage_dateinr=" + vorlagenr;
|
|
db.Get_Tabledata(sql, false, true);
|
|
string base64 = db.dsdaten.Tables[0].Rows[0][0].ToString();
|
|
MemoryStream ms = new MemoryStream(Helper.EncodeExtensions.DecodeBase642ByteArray(base64));
|
|
WordDocument document = new WordDocument(ms, FormatType.Automatic);
|
|
var formattype_original = document.ActualFormatType;
|
|
MemoryStream destms = new MemoryStream();
|
|
if (formattype_original.ToString().ToUpper() == "DOTMXXX")
|
|
{
|
|
document.Save(destms, FormatType.Docm);
|
|
}
|
|
|
|
else
|
|
{
|
|
document.Save(destms, formattype_original);
|
|
}
|
|
|
|
document.Close();
|
|
document.Dispose();
|
|
byte[] imageArray = destms.ToArray();
|
|
ms.Close();
|
|
ms.Dispose();
|
|
return Convert.ToBase64String(imageArray);
|
|
}
|
|
public string Get_FileType(string b64)
|
|
{
|
|
var streamword = new MemoryStream(Convert.FromBase64String(b64));
|
|
var streamexcel = new MemoryStream(Convert.FromBase64String(b64));
|
|
|
|
try
|
|
{
|
|
if (Is_WordDocument(streamword) == true)
|
|
{
|
|
return "W";
|
|
}
|
|
if (Is_ExcelDocument(streamexcel) == true)
|
|
{
|
|
return "X";
|
|
}
|
|
if (Is_PDFDocument(b64))
|
|
{
|
|
return "P";
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
return "";
|
|
}
|
|
finally
|
|
{
|
|
streamword.Dispose();
|
|
streamexcel.Dispose();
|
|
}
|
|
return "";
|
|
}
|
|
|
|
public clsdok GetDocAsFinalPDF(string DocID)
|
|
{
|
|
Database.DB db = new Database.DB(connectionstring);
|
|
db.Get_Tabledata("select * from Relaunch_View_PDF_Parameter where dokumentid='" + DocID + "' order by sort", false, true);
|
|
return GetDocAsPDF(DocID, db.dsdaten.Tables[0]);
|
|
}
|
|
public clsdok GetDocAsPDF(string Docid, DataTable pdfparameters = null)
|
|
{
|
|
clsdok dok = GetDoc(Docid);
|
|
|
|
try
|
|
{
|
|
switch (dok.doktype.ToUpper().Substring(0, 1))
|
|
{
|
|
case "D":
|
|
dok.dokument = Convert_Word_To_PDF(dok.dokument.ToString(), pdfparameters);
|
|
dok.extension = "pdf";
|
|
return dok;
|
|
break;
|
|
case "X":
|
|
|
|
dok.dokument = Convert_Excel_To_PDF(dok.dokument.ToString());
|
|
dok.extension = "pdf";
|
|
return dok;
|
|
break;
|
|
case "P":
|
|
return dok;
|
|
dok.extension = "pdf";
|
|
break;
|
|
default:
|
|
return dok;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
return dok;
|
|
}
|
|
return dok;
|
|
}
|
|
public clsdok GetDoc(string Docid)
|
|
{
|
|
//if (URI !="")
|
|
//{
|
|
// HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URI+ "api/GetDocument?dokid=" + Docid);
|
|
// request.Method = "GET";
|
|
// WebResponse response = (WebResponse)request.GetResponse();
|
|
|
|
//}
|
|
DB db = new DB(connectionstring);
|
|
clsdok dok = new clsdok("", "", "");
|
|
dok = db.GetDocumentAsBase64(Docid);
|
|
|
|
if (dok.doktype == "")
|
|
{
|
|
dok.doktype = Get_FileType(dok.dokument);
|
|
}
|
|
|
|
return dok;
|
|
|
|
}
|
|
|
|
public string ConvertFileToBase64(string fileName)
|
|
{
|
|
string ReturnValue = "";
|
|
|
|
|
|
using (FileStream BinaryFile = new FileStream(fileName, FileMode.Open))
|
|
{
|
|
BinaryReader BinRead = new BinaryReader(BinaryFile);
|
|
byte[] BinBytes = BinRead.ReadBytes(System.Convert.ToInt32(BinaryFile.Length));
|
|
ReturnValue = Convert.ToBase64String(BinBytes);
|
|
BinaryFile.Close();
|
|
}
|
|
|
|
return ReturnValue;
|
|
}
|
|
|
|
private bool Is_WordDocument(MemoryStream stream)
|
|
{
|
|
Syncfusion.DocIO.DLS.WordDocument WordDocument = new Syncfusion.DocIO.DLS.WordDocument();
|
|
try
|
|
{
|
|
WordDocument.Open(stream, FormatType.Automatic);
|
|
string type = "";
|
|
type = WordDocument.ActualFormatType.ToString();
|
|
return true;
|
|
}
|
|
catch
|
|
{
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
WordDocument.Dispose();
|
|
WordDocument = null;
|
|
}
|
|
}
|
|
|
|
private bool Is_ExcelDocument(MemoryStream stream)
|
|
{
|
|
ExcelEngine excelEngine = new ExcelEngine();
|
|
IApplication application = excelEngine.Excel;
|
|
//IWorkbook workbook = application.Workbooks.Open(stream);
|
|
IWorkbook workbook;
|
|
try
|
|
{
|
|
string type = "";
|
|
workbook = application.Workbooks.Open(stream);
|
|
type = workbook.Version.ToString();
|
|
|
|
return true;
|
|
}
|
|
catch
|
|
{
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
excelEngine.Dispose();
|
|
workbook = null;
|
|
application = null;
|
|
excelEngine = null;
|
|
}
|
|
}
|
|
|
|
private bool Is_PDFDocument(string b64)
|
|
{
|
|
PdfLoadedDocument LoadedDocument;
|
|
try
|
|
{
|
|
LoadedDocument = new PdfLoadedDocument(Helper.EncodeExtensions.DecodeBase642ByteArray(b64));
|
|
|
|
return true;
|
|
|
|
}
|
|
catch
|
|
{
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
LoadedDocument = null;
|
|
}
|
|
}
|
|
|
|
|
|
public string Convert_Word_To_PDF(string document, DataTable pdfparameters = null, bool useseettings = false)
|
|
{
|
|
|
|
//Dokument erstellen
|
|
var streamword = new MemoryStream(Convert.FromBase64String(document));
|
|
WordDocument wordDocument = new WordDocument(streamword, Syncfusion.DocIO.FormatType.Automatic);
|
|
|
|
// Keine Parameter / Dokument als PDF konvertieren
|
|
if (pdfparameters == null)
|
|
{
|
|
using (Syncfusion.DocToPDFConverter.DocToPDFConverter converter = new Syncfusion.DocToPDFConverter.DocToPDFConverter())
|
|
{
|
|
converter.Settings.EmbedFonts = true;
|
|
if (useseettings)
|
|
{
|
|
converter.Settings.UpdateDocumentFields = true;
|
|
converter.Settings.EnableAlternateChunks = true;
|
|
converter.Settings.AutoDetectComplexScript = true;
|
|
}
|
|
//Converts Word document into PDF document
|
|
using (PdfDocument pdfDocument = converter.ConvertToPDF(wordDocument))
|
|
{
|
|
MemoryStream outputStream = new MemoryStream();
|
|
pdfDocument.Save(outputStream);
|
|
byte[] bytes;
|
|
bytes = outputStream.ToArray();
|
|
return Convert.ToBase64String(bytes);
|
|
}
|
|
};
|
|
}
|
|
else
|
|
{
|
|
|
|
WordDocument[] words = new WordDocument[2];
|
|
WordDocument[] finalwords = new WordDocument[3];
|
|
bool splitted = false;
|
|
SyncFWord sfword = new SyncFWord("","");
|
|
// Texte ersetzen
|
|
foreach (DataRow r in pdfparameters.Rows)
|
|
{
|
|
// Text ersetzen im ganzen Dokument
|
|
if (r["Funktion"].ToString() == "1")
|
|
{
|
|
switch (r["OfficeElementType"].ToString())
|
|
{
|
|
case "2":
|
|
sfword.Replace_Fieldtext(ref wordDocument, r["OfficeElement"].ToString(), r["OfficeElementInhaltNeu"].ToString());
|
|
break;
|
|
case "3":
|
|
//Bookmarkcontent
|
|
break;
|
|
case "4":
|
|
sfword.Replace_Text(ref wordDocument, r["OfficeElementInhaltAlt"].ToString(), r["OfficeElementInhaltNeu"].ToString());
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
//Split
|
|
foreach (DataRow r in pdfparameters.Rows)
|
|
{
|
|
if (r["Funktion"].ToString() == "2")
|
|
{
|
|
words[0] = new WordDocument();
|
|
words[1] = new WordDocument();
|
|
|
|
sfword.SplitDocument(ref wordDocument,ref words[0], Convert.ToInt32(r["OfficeElementInhaltneu"]));
|
|
sfword.SplitDocument_Part2(ref wordDocument, ref words[1], Convert.ToInt32(r["OfficeElementInhaltneu"]));
|
|
splitted= true;
|
|
}
|
|
}
|
|
|
|
|
|
if (splitted==false)
|
|
{
|
|
finalwords[0] = words[0];
|
|
}
|
|
else
|
|
{
|
|
finalwords[0]=words[0];
|
|
//Dokument kopieren
|
|
int copynr = 0;
|
|
foreach (DataRow r in pdfparameters.Rows)
|
|
{
|
|
if (Convert.ToInt32(r["Kopienummer"]) > copynr)
|
|
{
|
|
copynr = Convert.ToInt32(r["Kopienummer"]);
|
|
finalwords[copynr] = new WordDocument();
|
|
finalwords[copynr]= words[Convert.ToInt32(r["dokumentteil"]) - 1];
|
|
|
|
}
|
|
}
|
|
foreach(DataRow r in pdfparameters.Rows)
|
|
{
|
|
if (r["Funktion"].ToString() == "3")
|
|
{
|
|
switch (r["OfficeElementType"].ToString())
|
|
{
|
|
case "2":
|
|
wordDocument = finalwords[Convert.ToInt32(r["Kopienummer"])];
|
|
sfword.Replace_Fieldtext(ref wordDocument, r["OfficeElement"].ToString(), r["OfficeElementInhaltNeu"].ToString());
|
|
wordDocument.UpdateDocumentFields();
|
|
finalwords[Convert.ToInt32(r["Kopienummer"])]=wordDocument;
|
|
|
|
break;
|
|
case "3":
|
|
//Bookmarkcontent
|
|
break;
|
|
case "4":
|
|
wordDocument = finalwords[Convert.ToInt32(r["Kopienummer"])];
|
|
sfword.Replace_Text(ref wordDocument, r["OfficeElementInhaltAlt"].ToString(), r["OfficeElementInhaltNeu"].ToString());
|
|
wordDocument.UpdateDocumentFields();
|
|
finalwords[Convert.ToInt32(r["Kopienummer"])] = wordDocument;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
PdfDocument finaldoc = new PdfDocument();
|
|
PdfDocument[] pdfs = new PdfDocument[finalwords.Length];
|
|
for (int i = 0; i< finalwords.Count(); i++)
|
|
{
|
|
using (Syncfusion.DocToPDFConverter.DocToPDFConverter converter = new Syncfusion.DocToPDFConverter.DocToPDFConverter())
|
|
{
|
|
wordDocument = finalwords[i];
|
|
converter.Settings.EmbedFonts = true;
|
|
pdfs[i] = new PdfDocument();
|
|
pdfs[i] = converter.ConvertToPDF(finalwords[i]);
|
|
};
|
|
}
|
|
|
|
MemoryStream[] streams = new MemoryStream[pdfs.Count()];
|
|
for (int i = 0; i< pdfs.Count(); i++)
|
|
{
|
|
streams[i] = new MemoryStream();
|
|
pdfs[i].Save(streams[i]);
|
|
}
|
|
PdfDocumentBase.Merge(finaldoc,streams);
|
|
MemoryStream outputStream = new MemoryStream();
|
|
finaldoc.Save(outputStream);
|
|
finaldoc.Save(@"h:\tssettings\edoka\test.pdf");
|
|
byte[] bytes;
|
|
bytes = outputStream.ToArray();
|
|
return Convert.ToBase64String(bytes);
|
|
|
|
|
|
}
|
|
|
|
|
|
//Exemplare
|
|
//foreach (DataRow r in pdfparameters.Rows)
|
|
//{
|
|
// if (r["Funktion"].ToString() == "3")
|
|
// {
|
|
// words.Add(sfword.SplitDocument(wordDocument, Convert.ToInt32(r["OfficeElementInhaltneu"])));
|
|
// words.Add(sfword.SplitDocument_Part2(wordDocument, Convert.ToInt32(r["OfficeElementInhaltneu"])));
|
|
// }
|
|
//}
|
|
|
|
return "";
|
|
}
|
|
}
|
|
|
|
public string Convert_Excel_To_PDF(string document)
|
|
{
|
|
try
|
|
{
|
|
using (ExcelEngine excelEngine = new ExcelEngine())
|
|
{
|
|
IApplication application = excelEngine.Excel;
|
|
application.DefaultVersion = ExcelVersion.Xlsx;
|
|
var streamexcel = new MemoryStream(Convert.FromBase64String(document));
|
|
IWorkbook workbook = application.Workbooks.Open(streamexcel);
|
|
|
|
//Initialize ExcelToPdfConverter
|
|
ExcelToPdfConverter converter = new ExcelToPdfConverter(workbook);
|
|
ExcelToPdfConverterSettings settings = new ExcelToPdfConverterSettings();
|
|
settings.EmbedFonts = true;
|
|
|
|
|
|
|
|
//Initialize PDF document
|
|
PdfDocument pdfDocument = new PdfDocument();
|
|
|
|
//Convert Excel document into PDF document
|
|
pdfDocument = converter.Convert(settings);
|
|
|
|
//Save the converted PDF document
|
|
|
|
MemoryStream outputStream = new MemoryStream();
|
|
pdfDocument.Save(outputStream);
|
|
byte[] bytes;
|
|
bytes = outputStream.ToArray();
|
|
return Convert.ToBase64String(bytes);
|
|
}
|
|
}
|
|
catch { }
|
|
return "";
|
|
}
|
|
|
|
public void Print_Doc(string document)
|
|
{
|
|
SyncFWord sfword = new SyncFWord("","");
|
|
sfword.Print_Word(document);
|
|
|
|
}
|
|
}
|
|
|
|
}
|