public byte[] GetWordReplacedTextUsingPlaintext(string templatePath, List <WordReplacement> items)
        {
            var pathdir = ConfigurationManager.AppSettings["doctemplate"].ToString();

            if (pathdir.StartsWith("~"))
            {
                pathdir = HttpContext.Current.Server.MapPath(pathdir);
            }

            var path = Path.Combine(pathdir, templatePath);

            FileStream fileStream = new FileStream(path, FileMode.Open);

            using (MemoryStream templateStream = new MemoryStream()) {
                //templateStream.Write(templateBytes, 0, (int)templateBytes.Length);
                fileStream.CopyStream(templateStream);
                fileStream.Close();
                using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(templateStream, true)) {
                    wordDoc.ChangeDocumentType(WordprocessingDocumentType.Document);

                    SimplifyMarkupSettings settings = new SimplifyMarkupSettings {
                        RemoveProof    = true,
                        RemoveRsidInfo = true,
                        NormalizeXml   = true,
                        //RemoveContentControls = true,
                        //RemoveMarkupForDocumentComparison = true
                    };

                    MarkupSimplifier.SimplifyMarkup(wordDoc, settings);


                    string docText = null;
                    using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream())) {
                        docText = sr.ReadToEnd();
                    }

                    foreach (var item in items)
                    {
                        if (!string.IsNullOrEmpty(item.TextToReplace))
                        {
                            Regex regexText = new Regex(item.TextToReplace);
                            docText = regexText.Replace(docText, item.ReplacementText ?? "");
                        }
                    }


                    using (StreamWriter sw = new StreamWriter(templateStream)) {
                        sw.Write(docText);


                        return(templateStream.ToArray());
                    }
                }
            }
        }
예제 #2
0
        private void AddFilesToArchive(string archivePath, string matchExpression, CompressionOption compressionLevel)
        {
            // Locate source files matching expression
            var sourceFilePaths = Directory.EnumerateFiles(this.SourcePath, matchExpression, SearchOption.AllDirectories);

            using (var package = Package.Open(archivePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                sourceFilePaths.ToList().ForEach(sourceFilePath =>
                {
                    try
                    {
                        PackagePart packagePart;
                        var relSourceFilePath = sourceFilePath.Substring(this.SourcePath.Length);
                        var partUri           = PackUriHelper.CreatePartUri(new Uri(relSourceFilePath, UriKind.Relative));
                        if (!package.PartExists(partUri))
                        {
                            base.Log.LogMessage(Resources.AddFilesToZipPackage_AddNewFileToArchive, relSourceFilePath, sourceFilePath);
                        }
                        else
                        {
                            base.Log.LogMessage(Resources.AddFilesToZipPackage_AddExistingFileToArchive, relSourceFilePath, sourceFilePath);

                            // Replace old part with new part
                            package.DeletePart(partUri);
                        }

                        packagePart = package.CreatePart(partUri,
                                                         GetMimeTypeFromExtension(Path.GetExtension(sourceFilePath)), compressionLevel);

                        // Add file to archive
                        using (Stream streamForFile = new FileStream(sourceFilePath, FileMode.Open, FileAccess.Read))
                        {
                            streamForFile.CopyStream(packagePart.GetStream());
                        }
                    }
                    catch (Exception ex)
                    {
                        base.Log.LogError(Resources.AddFileToZipPackage_AddFileFailed, sourceFilePath, ex.Message);
                        throw;
                    }
                });
            }
        }
        public byte[] GetDocumentByte(string templatePath)
        {
            var pathdir = ConfigurationManager.AppSettings["doctemplate"].ToString();

            if (pathdir.StartsWith("~"))
            {
                pathdir = HttpContext.Current.Server.MapPath(pathdir);
            }

            var path = Path.Combine(pathdir, templatePath);

            FileStream fileStream = new FileStream(path, FileMode.Open);

            using (MemoryStream templateStream = new MemoryStream()) {
                //templateStream.Write(templateBytes, 0, (int)templateBytes.Length);
                fileStream.CopyStream(templateStream);
                fileStream.Close();
                return(templateStream.ToArray());
            }
        }
예제 #4
0
        /// <summary>
        /// Close the file appender stream
        /// </summary>
        /// <param name="writeBack">
        /// TRUE if the stream must be write the content of himself to the appender file.
        /// <remarks>
        /// The file must be closed to this time
        /// </remarks>
        /// </param>
        public virtual void Close(bool writeBack)
        {
            long length = stream.Length;

            stream.Close();

            if (length > 0)
            {
                //Write data to appender file
                using (FileStream tmpIn = new FileStream(Filename, FileMode.Append))
                {
                    tmpIn.Write(signature, 0, signature.Length);

                    using (FileStream tmpOut = new FileStream(tmpContentFile, FileMode.Open))
                    {
                        tmpOut.CopyStream(tmpIn);
                        tmpOut.Close();
                    }

                    tmpIn.Close();
                }
            }
        }
예제 #5
0
        public override void Close()
        {
            long length = stream.Length;

            base.Close();
            stream.Close();

            if (length > 0)
            {
                //Write data to assembly
                using (FileStream tmpIn = new FileStream(assembly.Location, FileMode.Append))
                {
                    tmpIn.Write(signature, 0, signature.Length);

                    using (FileStream tmpOut = new FileStream(tmpContentFile, FileMode.Open))
                    {
                        tmpOut.CopyStream(tmpIn);
                        tmpOut.Close();
                    }

                    tmpIn.Close();
                }
            }
        }
예제 #6
0
 /// <summary>
 /// 流拷贝
 /// </summary>
 public static MemoryStream Copy(this FileStream input)
 {
     return(input.CopyStream());
 }
        public byte[] GetWordReplacedText(string templatePath, List <WordReplacement> items)
        {
            var pathdir = ConfigurationManager.AppSettings["doctemplate"].ToString();

            if (pathdir.StartsWith("~"))
            {
                pathdir = HttpContext.Current.Server.MapPath(pathdir);
            }

            var path = Path.Combine(pathdir, templatePath);

            FileStream fileStream = new FileStream(path, FileMode.Open);

            using (MemoryStream templateStream = new MemoryStream()) {
                //templateStream.Write(templateBytes, 0, (int)templateBytes.Length);
                fileStream.CopyStream(templateStream);
                fileStream.Close();
                using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(templateStream, true)) {
                    wordDoc.ChangeDocumentType(WordprocessingDocumentType.Document);

                    SimplifyMarkupSettings settings = new SimplifyMarkupSettings {
                        RemoveComments              = true,
                        RemoveContentControls       = true,
                        RemoveEndAndFootNotes       = true,
                        RemoveFieldCodes            = false,
                        RemoveLastRenderedPageBreak = true,
                        RemovePermissions           = true,
                        RemoveProof                       = true,
                        RemoveRsidInfo                    = true,
                        RemoveSmartTags                   = true,
                        RemoveSoftHyphens                 = true,
                        ReplaceTabsWithSpaces             = true,
                        RemoveWebHidden                   = true,
                        RemoveMarkupForDocumentComparison = true
                    };

                    MarkupSimplifier.SimplifyMarkup(wordDoc, settings);

                    var body    = wordDoc.MainDocumentPart.Document.Body;
                    var tables  = body.Elements <DocumentFormat.OpenXml.Wordprocessing.Table>().ToList();
                    var paras   = body.Elements <Paragraph>();
                    var runsall = body.Descendants <Run>().ToList();

                    foreach (var item in wordDoc.MainDocumentPart.HeaderParts)
                    {
                        foreach (var run in item.RootElement.Descendants <Run>())
                        {
                            runsall.Add(run);
                        }
                    }

                    foreach (var item in wordDoc.MainDocumentPart.FooterParts)
                    {
                        foreach (var run in item.RootElement.Descendants <Run>())
                        {
                            runsall.Add(run);
                        }
                    }

                    for (int i = 0; i < runsall.Count(); i++)
                    {
                        var r        = runsall[i];
                        var textsrun = r.Elements <Text>();

                        if ((items.Any(t => !t.MatchWholeText ? r.InnerText?.Trim().Contains(t.TextToReplace) == true : r.InnerText == t.TextToReplace)))
                        {
                            var replace = items.Where(t => !t.MatchWholeText ? r.InnerText?.Trim().Contains(t.TextToReplace) == true : r.InnerText == t.TextToReplace).FirstOrDefault();

                            if (!replace.IsCheckBox)
                            {
                                foreach (var text in textsrun)
                                {
                                    if (text != null)
                                    {
                                        if (items.Any(t => !t.MatchWholeText ? text.InnerText?.Trim().Contains(t.TextToReplace) == true : text.InnerText == t.TextToReplace))
                                        {
                                            var wrd = items.FirstOrDefault(it => !it.MatchWholeText ? text.InnerText?.Trim().Contains(it.TextToReplace) == true : text.InnerText == it.TextToReplace);

                                            //while (items.Any(it => !it.MatchWholeText ? text.InnerText?.Trim().Contains(it.TextToReplace) == true : text.InnerText == it.TextToReplace)) {

                                            //}
                                            if (replace.UseRun)
                                            {
                                                try {
                                                    if (replace.Run != null)
                                                    {
                                                        replace.Run.Append(r.RunProperties.CloneNode(true));
                                                        r.RemoveAllChildren();
                                                        r.Append(replace.Run.CloneNode(true));
                                                    }
                                                    else
                                                    {
                                                        r.RemoveAllChildren();
                                                    }
                                                } catch (Exception exc) {
                                                }
                                            }
                                            else
                                            {
                                                wrd       = items.FirstOrDefault(it => !it.MatchWholeText ? text.InnerText?.Trim().Contains(it.TextToReplace) == true : text.InnerText == it.TextToReplace);
                                                text.Text = wrd.MatchWholeText ? wrd.ReplacementText : text.Text.Replace(wrd.TextToReplace, wrd.ReplacementText);
                                            }
                                        }
                                    }
                                }
                            }
                            else
                            {
                                r.RemoveAllChildren();
                                replace.Checkboxes.ForEach(c => {
                                    r.Append(c.CloneNode(true));
                                });


                                //var text = textsrun.FirstOrDefault();

                                //if (text != null)
                                //{
                                //    text.Text = String.Empty;
                                //}

                                //r.Chil();//.RemoveChild(r);
                            }
                        }
                    }

                    MarkupSimplifier.SimplifyMarkup(wordDoc, settings);
                    wordDoc.Save();

                    return(templateStream.ToArray());

                    //foreach (var para in paras) {
                    //    var fieldss = para.Elements<SimpleField>();
                    //    var runs = para.Elements<Run>().ToList();

                    //    for (int i = 0; i < runs.Count; i++) {
                    //        var r = runs[i];
                    //        var texts = r.Elements<Text>();

                    //        if ((items.Any(t => r.InnerText?.Trim().Contains(t.TextToReplace) == true))) {
                    //            var replace = items.Where(t => r.InnerText?.Trim().Contains(t.TextToReplace) == true).FirstOrDefault();

                    //            if (!replace.IsCheckBox) {
                    //                foreach (var text in texts) {
                    //                    if (text != null) {
                    //                        if (items.Any(t => text.Text?.Trim().Contains(t.TextToReplace) == true)) {

                    //                            var wrd = items.FirstOrDefault(it => text.Text.Contains(it.TextToReplace));

                    //                            while(items.Any(t => text.Text?.Trim().Contains(t.TextToReplace) == true)) {
                    //                                wrd = items.FirstOrDefault(it => text.Text.Contains(it.TextToReplace));
                    //                                text.Text = text.Text.Replace(wrd.TextToReplace, wrd.ReplacementText);
                    //                            }



                    //                        }
                    //                    }
                    //                }
                    //            } else {

                    //                replace.Checkboxes.ForEach(c => {
                    //                    r.InsertAfterSelf(c);
                    //                });
                    //                para.RemoveChild(r);
                    //            }
                    //        }

                    //    }
                    //}


                    //foreach (var table in tables) {
                    //    var rows = table.Elements<DocumentFormat.OpenXml.Wordprocessing.TableRow>();
                    //    foreach (var row in rows) {
                    //        var cells = row.Elements<DocumentFormat.OpenXml.Wordprocessing.TableCell>();
                    //        foreach (var cell in cells) {
                    //            var ps = cell.Elements<Paragraph>();
                    //            foreach (var p in ps) {

                    //                var runs = p.Elements<Run>().ToList();


                    //                for (int i = 0; i < runs.Count; i++) {
                    //                    var r = runs[i];
                    //                    var texts = r.Elements<Text>();

                    //                    if ((items.Any(t => t.TextToReplace == r.InnerText?.Trim()))) {
                    //                        var replace = items.Where(t => t.TextToReplace == r.InnerText?.Trim()).FirstOrDefault();

                    //                        if (!replace.IsCheckBox) {
                    //                            foreach (var text in texts) {
                    //                                if (text != null) {
                    //                                    if (items.Any(t => t.TextToReplace == text.Text?.Trim()))
                    //                                        text.Text = text.Text.Replace(text.Text, items.Where(t => t.TextToReplace == text.Text?.Trim()).FirstOrDefault().ReplacementText);
                    //                                }
                    //                            }
                    //                        } else {

                    //                            replace.Checkboxes.ForEach(c => {
                    //                                r.InsertAfterSelf(c);
                    //                            });
                    //                            p.RemoveChild(r);
                    //                        }
                    //                    }

                    //                }



                    //            }
                    //        }
                    //    }
                    //}



                    //var allruns = body.Elements<Run>();

                    //foreach (var run in allruns) {
                    //    foreach (var text in run.Elements<Text>()) {
                    //        if (text != null) {
                    //            if (items.Any(t => t.TextToReplace == text.Text))
                    //                text.Text = text.Text.Replace(text.Text, items.Where(t => t.TextToReplace == text.Text).FirstOrDefault().ReplacementText);
                    //        }
                    //    }
                    //}
                }
            }
        }