.netcore 操作aspose.words导出pdf

news/2024/5/19 21:44:55 标签: .netcore, pdf, windows

个人重点关注的是生成曲线图的部分,浪费了我很多时间

chart.Legend.Position = LegendPosition.Top; 

控制图形的显示位置,这个地方好像必须要选一个位置,否则会内容显示不全,我开始用的LegendPosition.None,他就显示不了那几条线的颜色和名称说明文字。为了搞出这个效果浪费了我一天时间。

 

xAxis.Hidden = true;//隐藏x轴标签

public class ExpReport
{
    //IWebHostEnvironment _webHostEnvironment;

    //public ExpReport(IWebHostEnvironment webHostEnvironment)
    //{
    //    _webHostEnvironment = webHostEnvironment;
    //}
 
    public static string ReportChartPdf(List<TahmCJ_wdDto> Listdto, ExpReportDto ReportDto)
    {
        try
        {
            IConfiguration myconfiguration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build();

            Document doc = new Document();

            DocumentBuilder builder = new DocumentBuilder(doc);
            
            builder.PageSetup.Orientation = Orientation.Portrait;

            //var parentPath = AppContext.BaseDirectory.ToString()+@"\wwwroot\";
            var parentPath = Path.Combine(IOCProvider.GetService<IHostEnvironment>().ContentRootPath,"wwwroot"); 
            //
            string strReportFileUrl = myconfiguration["Report:ReportFileUrl"].ToString();
            string dateDir = DateTime.Now.Date.ToString("yyyyMMdd");
            string saveFileStr = "温湿度曲线报表_" + DateTime.Now.Date.ToString("yyyyMMddHHmmss") + new Random().Next(1, 1000).ToString() + ".docx";
            // 你用path

             
            string strSavePath = Path.Combine(parentPath, strReportFileUrl, dateDir);
            FolderAndFile.FolderCreate(strSavePath);

            strSavePath = Path.Combine(strSavePath, saveFileStr);  


            string strCompanyLogo = myconfiguration["Report:CompanyLogo"].ToString();  
            string Logpicurl =  Path.Combine(parentPath, strCompanyLogo);


            string ComLogoWidth = myconfiguration["Report:CompanyLogoWidth"].ToString();
            string ComLogoHeight = myconfiguration["Report:CompanyLogoHeight"].ToString();
            //Logpicurl = FolderAndFile.SetImageSize(float.Parse(ComLogoWidth), float.Parse(ComLogoHeight), Logpicurl, "");


            string RepImageWidth = myconfiguration["Report:ReportImageWidth"].ToString();
            string RepImageHeight = myconfiguration["Report:ReportImageHeight"].ToString();
       

            
            ReportDto.LogoPicUrl = Logpicurl;
            ReportDto.aveWD = Math.Round((decimal)Listdto.Average(x => x.wd1), 1).ToString("0.0");
            ReportDto.aveSD = Math.Round((decimal)Listdto.Average(x => x.sd1), 1).ToString("0.0");
            ReportDto.highWD = Listdto.Max(x => (decimal)x.wd1).ToString("0.0");
            ReportDto.highSD = Listdto.Max(x => (decimal)x.sd1).ToString("0.0");
            ReportDto.lowWD = Listdto.Min(x => (decimal)x.wd1).ToString("0.0");
            ReportDto.lowSD = Listdto.Min(x => (decimal)x.sd1).ToString("0.0");
            ReportDto.WDLimit = ((decimal)Listdto[0].wdlowLimit).ToString("0.0") + "--" + ((decimal)Listdto[0].wdHghLimit).ToString("0.0");
            ReportDto.SDLimit = ((decimal)Listdto[0].sdLowLimit).ToString("0.0") + "--" + ((decimal)Listdto[0].sdHghLimit).ToString("0.0");
            var alarmList = Listdto.Select(x => new { x.wd1, x.sd1, x.dt }).Where(x => x.wd1 < ((decimal)Listdto[0].wdlowLimit) || x.wd1 > ((decimal)Listdto[0].wdHghLimit) || x.sd1 < ((decimal)Listdto[0].sdLowLimit) || x.sd1 > ((decimal)Listdto[0].sdHghLimit));
            ReportDto.alarmCount = alarmList.Count().ToString();
            var alarmArry = alarmList.Take(20).Select(x => new { x.wd1, x.dt }.ToString()).ToArray();
            alarmArry = (from a in alarmList
                         select "温度:" + a.wd1 + " 湿度:" + a.sd1 + " 时间:" + a.dt.ToString("yyyy-MM-dd HH:mm:ss") + "").Take(20).ToArray();
            ReportDto.alarmData = string.Join(" , ", alarmArry);
            

            builder.InsertImage(Logpicurl, RelativeHorizontalPosition.Margin, 1, RelativeVerticalPosition.Margin, 1, double.Parse(ComLogoWidth), double.Parse(ComLogoHeight), WrapType.Square);

            for (int i = 0; i < 10; i++)
            {
                builder.InsertBreak(BreakType.LineBreak); 
            }

            for (int i = 0; i < 3; i++)
            {
                builder.InsertBreak(BreakType.LineBreak);
            }

            ParagraphFormat paragraphFormat = builder.ParagraphFormat;
            paragraphFormat.Alignment = ParagraphAlignment.Center; 
            builder.Font.Size = 18;
            builder.Font.Name = "Arial";
            builder.Font.Bold = false;
            //paragraphFormat.FirstLineIndent = 8;
            //paragraphFormat.Alignment = ParagraphAlignment.Center;
            //paragraphFormat.KeepTogether = true;
            //builder.Writeln($"时间区间:{ReportDto.StartTime} 到 {ReportDto.EndTime}");

            builder.CellFormat.ClearFormatting(); 

            for (int i = 0; i < 5; i++)
            {
                builder.InsertBreak(BreakType.LineBreak); 
            }

            builder.Font.Size = 35;
            builder.Font.Bold = true;
            builder.Writeln("温湿度报表");
            builder.Font.Size = 20;
            builder.Font.Bold = false;
            builder.Writeln($"报告人:{ReportDto.ReportMan} 制表人:{ReportDto.CreateManBottom}");
            builder.Writeln($"时间:{ReportDto.ReportTime}");
            

            builder.InsertBreak(BreakType.SectionBreakNewPage); 
            builder.PageSetup.Orientation = Orientation.Landscape; 


            builder.StartTable(); 

            builder.CellFormat.ClearFormatting(); 
            builder.ParagraphFormat.Alignment = ParagraphAlignment.Left; 
            builder.CellFormat.Width = builder.PageSetup.PageWidth - 140; 
            builder.Font.Size = 15;
            builder.Font.Name = "Arial";
            builder.Font.Bold = true;

            builder.InsertCell();
            builder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
            builder.Write($"{ReportDto.eqno}--温湿度\r\n");
            builder.EndRow();


            builder.InsertCell();
            builder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
            builder.Font.Size = 15;
            builder.Font.Name = "Arial";
            builder.Font.Bold = true;
            builder.Writeln("监测对象描述");
            builder.Write("\r\n");
            builder.Font.Name = "宋体";
            builder.Font.Bold = false;
            builder.Writeln($"\t监测对象名称:{ReportDto.Testname}");
            builder.Write("\r\n");
            builder.Writeln($"\t监测条件:{ReportDto.Condition}");
            builder.Write("\r\n");
            builder.Writeln($"\t监测对象类型:{ReportDto.Testboxtype}");
            builder.Write("\r\n");
            builder.Writeln($"\t监测对象编号:{ReportDto.Testboxno}");
            builder.Write("\r\n");
            builder.Writeln($"\t监测对象批号:{ReportDto.Pihao}");
            builder.Write("\r\n");
            //builder.EndRow();

            //builder.InsertCell();
            builder.Font.Name = "Arial";
            builder.Font.Bold = true;
            builder.Writeln("各项统计");
            builder.Write("\r\n");
            builder.Font.Name = "宋体";
            builder.Font.Bold = false;
            builder.Writeln($"\t平均温度:{ReportDto.aveWD}  最高温度:{ReportDto.highWD}   最低温度:{ReportDto.lowWD}  设定门限:{ReportDto.WDLimit}");
            builder.Write("\r\n");
            builder.Writeln($"\t平均湿度:{ReportDto.aveSD}  最高湿度:{ReportDto.highSD}   最低湿度:{ReportDto.lowSD}  设定门限:{ReportDto.SDLimit}");
            builder.Write("\r\n");
            builder.Writeln($"\t温度告警总数:{ReportDto.alarmCount}");
            builder.Write("\r\n");
            builder.Write("\r\n"); 
            builder.EndRow();



            builder.InsertCell();
            paragraphFormat = builder.ParagraphFormat;
            paragraphFormat.Alignment = ParagraphAlignment.Center;//居中
            builder.Font.Size = 15;
            builder.Font.Name = "Arial";
            builder.Font.Bold = true;
            builder.Writeln($"\t时间区间:{ReportDto.StartTime} 到 {ReportDto.EndTime}");
            builder.Write("\r\n");
            //builder.Writeln("温度曲线图(横轴:时间;纵轴:温度、湿度)");

            
            Shape shape = builder.InsertChart(ChartType.Line, double.Parse(RepImageWidth) + 80, double.Parse(RepImageHeight)+100);
            shape.FillColor = Color.Transparent;//背景透明
             

            var chart = shape.Chart;
            chart.Title.Text = "温湿度曲线图(横轴:时间;纵轴:温度、湿度)";
            chart.Title.Show = true; 
            chart.Series.Clear();
            chart.Legend.Position = LegendPosition.Top;

            var dataTimeList = Listdto.Select(x => x.dt.ToString("yyyy-MM-dd HH:mm:ss")).ToList();
            var dataList = Listdto.Select(x => Convert.ToDouble(x.wd1)).ToList();
            var dataListwdlowlimit = Listdto.Select(x => Convert.ToDouble(x.wdlowLimit)).ToList();
            var dataListwdhghlimit = Listdto.Select(x => Convert.ToDouble(x.wdHghLimit)).ToList();
            var series_wd = chart.Series.Add("温度",
               dataTimeList.ToArray(),
               dataList.ToArray());
            //series_wd.Name = "温度";
            series_wd.Marker.Symbol = MarkerSymbol.Circle;
            series_wd.Marker.Size = 3;
            //series_wd. = "";


            //series = chart.Series.Add("wd1",
            // dataTimeList.ToArray(),
            // dataList.ToArray());

            var series_wdlow = chart.Series.Add("温度下限",
            dataTimeList.ToArray(),
            dataListwdlowlimit.ToArray());
            //series_wdlow.Name = "温度下限";
            series_wdlow.Marker.Symbol = MarkerSymbol.Circle;
            series_wdlow.Marker.Size = 2;

            var series_wdhgh = chart.Series.Add("温度上限",
            dataTimeList.ToArray(),
            dataListwdhghlimit.ToArray());
            //series_wdhgh.Name = "温度上限";
            series_wdhgh.Marker.Symbol = MarkerSymbol.Circle;
            series_wdhgh.Marker.Size =2;



            //dataTimeList = Listdto.Select(x => x.dt.ToString("yyyy-MM-dd HH:mm:ss")).ToList();
            dataList = Listdto.Select(x => Convert.ToDouble(x.sd1)).ToList();
            var dataListsdlowlimit = Listdto.Select(x => Convert.ToDouble(x.sdLowLimit)).ToList();
            var dataListsdhghlimit = Listdto.Select(x => Convert.ToDouble(x.sdHghLimit)).ToList();
            var series_sd = chart.Series.Add("sd1",
               dataTimeList.ToArray(),
               dataList.ToArray());
            series_sd.Name = "湿度";
            series_sd.Marker.Symbol = MarkerSymbol.Circle;
            series_sd.Marker.Size = 3;

            var series_sdlow=chart.Series.Add("sdlowlimit",
               dataTimeList.ToArray(),
               dataListsdlowlimit.ToArray());
            series_sdlow.Name = "湿度下限";
            series_sdlow.Marker.Symbol = MarkerSymbol.Circle;
            series_sdlow.Marker.Size = 2;

            var series_sdhgh = chart.Series.Add("sdhghlimit",
               dataTimeList.ToArray(),
               dataListsdhghlimit.ToArray());
            series_sdhgh.Name = "湿度上限";
            series_sdhgh.Marker.Symbol= MarkerSymbol.Circle;
            series_sdhgh.Marker.Size = 2;




            ChartDataPointCollection dataPoints = series.DataPoints;
            默认给每个数据点样式
            series.InvertIfNegative = true;
            //chart.Series[0].Marker.Symbol = MarkerSymbol.Circle;
            //chart.Series[0].Marker.Size = 5;
            //chart.Series[0].Name = "温度曲线图";

            ChartAxis xAxis = chart.AxisX;
            xAxis.TickLabelSpacingIsAuto = true;
            xAxis.Hidden = true;//隐藏x轴标签


            ChartAxis yAxis = chart.AxisY;


            yAxis.TickLabelPosition = AxisTickLabelPosition.NextToAxis;//坐标轴位置


            paragraphFormat = builder.ParagraphFormat;
            paragraphFormat.Alignment = ParagraphAlignment.Center;//居中
            builder.Font.Size = 12;
            builder.Font.Name = "Arial";
            builder.Font.Bold = true;
            builder.Font.Color = Color.Red;
            builder.Writeln("本图形时间顺序是从左到右");
            builder.EndRow();

            //builder.InsertCell();
            //paragraphFormat = builder.ParagraphFormat;
            //paragraphFormat.Alignment = ParagraphAlignment.Center;//居中
            //builder.Font.ClearFormatting();
            //builder.Font.Size = 15;
            //builder.Font.Name = "Arial";
            //builder.Font.Bold = true;
            //builder.Writeln("绘制湿度曲线(横轴:时间;纵轴:湿度)");


            //shape = builder.InsertChart(ChartType.Line, double.Parse(RepImageWidth) + 80, double.Parse(RepImageHeight));
            //chart = shape.Chart;
            //shape.FillColor = Color.Transparent;
            //chart.Title.Text = "绘制湿度曲线(横轴:时间;纵轴:湿度)";
            //chart.Title.Show = false;
            //chart.Series.Clear();

            //chart.Legend.Position = LegendPosition.None;

            //dataTimeList = Listdto.Select(x => x.dt.ToString("yyyy-MM-dd HH:mm:ss")).ToList();
            //dataList = Listdto.Select(x => Convert.ToDouble(x.sd1)).ToList();
            //var dataListsdlowlimit = Listdto.Select(x => Convert.ToDouble(x.sdLowLimit)).ToList();
            //var dataListsdhghlimit = Listdto.Select(x => Convert.ToDouble(x.sdHghLimit)).ToList();
            //series = chart.Series.Add("sd1",
            //   dataTimeList.ToArray(),
            //   dataList.ToArray());

            //chart.Series.Add("sdlowlimit",
            //   dataTimeList.ToArray(),
            //   dataListsdlowlimit.ToArray());
            //chart.Series.Add("sdhghlimit",
            //   dataTimeList.ToArray(),
            //   dataListsdhghlimit.ToArray());

            //chart.Series[0].Marker.Symbol = MarkerSymbol.Circle;
            //chart.Series[0].Marker.Size = 5;
            //chart.Series[0].Name = "  ";

            //chart.Series[0].DataLabels.Clear();




            //xAxis = chart.AxisX;
            //xAxis.Hidden = true;

            //yAxis = chart.AxisY;

            //yAxis.TickLabelPosition = AxisTickLabelPosition.NextToAxis;


            //paragraphFormat = builder.ParagraphFormat;
            //paragraphFormat.Alignment = ParagraphAlignment.Center;//居中
            //builder.Font.Size = 12;
            //builder.Font.Name = "Arial";
            //builder.Font.Bold = true;
            //builder.Font.Color = Color.Red;
            //builder.Writeln("本图形时间顺序是从左到右");
            //builder.EndRow();


            builder.InsertCell();
            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
            builder.Font.ClearFormatting();
            builder.Font.Name = "Arial";
            builder.Font.Size = 15;
            builder.Font.Bold = true;
            builder.Writeln($"最近20组告警数据");
            builder.ParagraphFormat.Alignment = ParagraphAlignment.Left;//居左
            builder.Font.Name = "宋体";
            builder.Font.Bold = false;
            builder.Writeln($"{ReportDto.alarmData}");
            for (int i = 0; i < 2; i++)
            {
                builder.InsertBreak(BreakType.LineBreak);// 
            }
            builder.EndRow();

            builder.InsertCell();
            builder.Font.Name = "Arial";
            builder.Font.Size = 15;
            builder.Font.Bold = true;
            builder.Writeln($"制表人:{ReportDto.CreateMan}");
            builder.Writeln($"时   间 :{ReportDto.ReportTime}");
            builder.ParagraphFormat.Alignment = ParagraphAlignment.Right;
            builder.Writeln($"签名:\t\t\t");
            builder.EndRow();



            builder.EndTable();
            

            var docDir = Regex.Split(strSavePath, ".docx", RegexOptions.IgnoreCase)[0] + ".docx";
            doc.Save(docDir, SaveFormat.Docx);


            Document doct = new Document(docDir);
            var pdfDir = Regex.Split(strSavePath, ".docx", RegexOptions.IgnoreCase)[0] + ".pdf";


            PdfSaveOptions saveOption = new PdfSaveOptions();
            saveOption.SaveFormat = SaveFormat.Pdf;

            var passwd = string.IsNullOrEmpty(ReportDto.passwd) ? string.Empty : ReportDto.passwd;
            PdfEncryptionDetails encryptionDetails = new PdfEncryptionDetails(passwd, "owner", PdfEncryptionAlgorithm.RC4_128);
            encryptionDetails.Permissions = PdfPermissions.DisallowAll;
            encryptionDetails.Permissions = PdfPermissions.Printing | PdfPermissions.HighResolutionPrinting;


            saveOption.EncryptionDetails = encryptionDetails;
            var saveret=  doct.Save(pdfDir, saveOption);

            string returnHtppurl = "";
            if (!string.IsNullOrEmpty(pdfDir))
            {
               
                //var myhttprequest = IOCProvider.GetService<IHttpContextAccessor>().HttpContext.Request;
                //var httpHost = myhttprequest.Scheme + "://" + myhttprequest.Host;
                //string httpHost = AppDomain.CurrentDomain.BaseDirectory;
                string FullFileName = "";
                string nowDirection = "";

                string[] fileUrlArr = pdfDir.Split('\\');
                FullFileName = fileUrlArr[fileUrlArr.Length - 1];
                nowDirection = fileUrlArr[fileUrlArr.Length - 2];


                returnHtppurl = myconfiguration["Report:ReportFileUrl"].ToString().Replace("\\", "/") + "/" + nowDirection + "/" + FullFileName;
                //returnHtppurl =  filePath;



            }
            else
            {
                
            }

            return returnHtppurl;
        }
        catch (Exception ex)
        {

            throw new Exception(ex.Message);
        }

    }
}


http://www.niftyadmin.cn/n/5231246.html

相关文章

19.OpenCV Mat的位操作

OpenCV Mat的位操作 文章目录 OpenCV Mat的位操作bitwise_orbitwise_andbitwise_xorbitwise_notreference 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; bitwise_or 对Mat中的数据按位取或&#xff0c;也就是取不为0的部分。 对于单通…

SkyWalking9.x搭建

简介 Skywalking是一款分布式的系统 性能监视工具&#xff0c;专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。SkyWalking是一款 观察性的分析平台和应用性能管理系统&#xff0c;提供了 分布式追踪、性能指标分析、应用服务依赖分析、可视化一体化等解决方…

IDEA2023.2.3 servlet.java中import com.alibaba.fastjson.JSONObject;标红问题解决

IDEA提示 java: 程序包com.alibaba.fastjson不存在_mob64ca12e98e58的技术博客_51CTO博客 2023/12/1 域名小李

Python | 轻量ORM框架Peewee的基础使用(增删改查、自动创建模型类、事务装饰器)

文章目录 01 简介02 安装03 自动创建模型类04 基础使用4.1 查询4.2 新增4.3 更新4.4 删除 05 事务 01 简介 在使用python开发的过程中&#xff0c;有时需要一些简单的数据库操作&#xff0c;而Peewee正是理想的选择&#xff0c;它是一个小巧而灵活的 Python ORM&#xff08;对…

R语言中的机器学习

转载自 R中文论坛(http://rbbs.biosino.org/Rbbs/posts/list/192.page) Machine Learning & Statistical Learning &#xff08;机器学习 & 统计学习&#xff09; 网址&#xff1a;http://cran.r-project.org/web/views/MachineLearning.html维护人员&#xff1a;To…

【kafka实践】11|消费位移提交

消费者位移 消费者位移这一节介绍了消费者位移的基本概念和消息格式&#xff0c;本节我们来聊聊消费位移的提交。 Consumer 需要向 Kafka 汇报自己的位移数据&#xff0c;这个汇报过程被称为提交位移&#xff08;Committing Offsets&#xff09;。因为 Consumer 能够同时消费…

项目实战之RabbitMQ死信队列应用

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 文章目录 &#x1f31f;架构图&#x…

#Css篇:实现一个元素水平和垂直居中实现左右固定,中间自身适应布局 左侧固定 右侧自适应

实现一个元素水平和垂直居中 元素示例&#xff1a; <div class"container"><div class"centered-element">居中的内容</div> </div>flex布局 .container {display: flex;justify-content: center;align-items: center;height: …