百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

C#使用 aspose 从excel转成pdf

bigegpt 2024-08-05 11:53 13 浏览

【实例简介】C#使用 aspose 从excel转成pdf,用矩阵处理其中的签章图片大小和位置

【实例截图】

【核心代码】

public Stream ExcelToPdf(Stream sm_excel)
{
Stream sm_Re = new MemoryStream();//返回的pdf结果
Stream sm_pdf = new MemoryStream();//返回的pdf结果
MemoryStream sm_img = new MemoryStream();//excel中原始图片信息
try
{
//加载excel文档
Aspose.Cells.Workbook wbc = new Aspose.Cells.Workbook(sm_excel);
//获取excel中原始签章图片信息
Aspose.Cells.Drawing.Picture pic = wbc.Worksheets[0].Pictures[0];
pic.Width = pic.OriginalWidth;
pic.Height = pic.OriginalHeight;
ImageOrPrintOptions printOption = new ImageOrPrintOptions(); //图片格式
printOption.ImageFormat = pic.ImageFormat;
pic.ToImage(sm_img, printOption);
//图片区域大小控制//zai pdf上显示 137像素,这里要设置成89,大概是这个比例,根据excel中签章原始大小设置
double lowerLeftX = 0, lowerLeftY = 0, upperRightX = pic.Width, upperRightY = pic.Height;
upperRightX = 137 * pic.Width / 280;
upperRightY = 137 * pic.Width / 280;
Aspose.Pdf.Rectangle rectangle = new Aspose.Pdf.Rectangle(lowerLeftX, lowerLeftY, upperRightX, upperRightY);
//处理excel-----------------------------------------------------------------------------------------------------------
//删除excel中的图片
wbc.Worksheets[0].Pictures.RemoveAt(0);
//把excel保存为pdf
Aspose.Cells.PdfSaveOptions op = new Aspose.Cells.PdfSaveOptions();
op.AllColumnsInOnePagePerSheet = false;
op.OnePagePerSheet = true;
wbc.Save(sm_pdf, op);
//处理pdf---------------------------------------------------------------------------------------------------------------
//给pdf添加签章
Document pdfDocument = new Document(sm_pdf);
PdfAddImage(pdfDocument, sm_img, rectangle);
pdfDocument.Save("D:\\00685.pdf");
pdfDocument.Save(sm_Re);
//资源释放
pdfDocument.Dispose();
sm_img.Close();
sm_pdf.Close();
return sm_Re;
}
catch(Exception ex)
{
//写日志
return sm_Re;
}
finally
{

}


}

public void PdfAddImage(Document pdfDocument, Stream sm_img, Aspose.Pdf.Rectangle rectangle)
{
try
{
//页面区域
Aspose.Pdf.Rectangle rec1 = pdfDocument.Pages[pdfDocument.Pages.Count].GetPageRect(true);
//签章位置 :跟页面 右 下 边缘的距离
double margin_right = 200, margin_bottom = 100;
//创建矩阵对象
Aspose.Pdf.DOM.Matrix matrix = new Aspose.Pdf.DOM.Matrix(rectangle.URX - rectangle.LLX, 0, 0, rectangle.LLY - rectangle.URY, rec1.URX -margin_right, rec1.URY -margin_bottom);
//找到添加签章的页面
Aspose.Pdf.Page page = pdfDocument.Pages[pdfDocument.Pages.Count];
//添加图片到页面资源
page.Resources.Images.Add(sm_img);
//保存当前图形状态
page.Contents.Add(new Operator.GSave());
//定义放置图像方式
page.Contents.Add(new Operator.ConcatenateMatrix(matrix));
XImage ximage = page.Resources.Images[page.Resources.Images.Count];
//绘制图像
page.Contents.Add(new Operator.Do(ximage.Name));
//恢复图像状态
page.Contents.Add(new Operator.GRestore());
}
catch (Exception ex)
{
//写异常日志
}

}


相关推荐

Go语言泛型-泛型约束与实践(go1.7泛型)

来源:械说在Go语言中,Go泛型-泛型约束与实践部分主要探讨如何定义和使用泛型约束(Constraints),以及如何在实际开发中利用泛型进行更灵活的编程。以下是详细内容:一、什么是泛型约束?**泛型...

golang总结(golang实战教程)

基础部分Go语言有哪些优势?1简单易学:语法简洁,减少了代码的冗余。高效并发:内置强大的goroutine和channel,使并发编程更加高效且易于管理。内存管理:拥有自动垃圾回收机制,减少内...

Go 官宣:新版 Protobuf API(go pro版本)

原文作者:JoeTsai,DamienNeil和HerbieOng原文链接:https://blog.golang.org/a-new-go-api-for-protocol-buffer...

Golang开发的一些注意事项(一)(golang入门项目)

1.channel关闭后读的问题当channel关闭之后再去读取它,虽然不会引发panic,但会直接得到零值,而且ok的值为false。packagemainimport"...

golang 托盘菜单应用及打开系统默认浏览器

之前看到一个应用,用go语言编写,说是某某程序的windows图形化客户端,体验一下发现只是一个托盘,然后托盘菜单的控制面板功能直接打开本地浏览器访问程序启动的webserver网页完成gui相关功...

golang标准库每日一库之 io/ioutil

一、核心函数概览函数作用描述替代方案(Go1.16+)ioutil.ReadFile(filename)一次性读取整个文件内容(返回[]byte)os.ReadFileioutil.WriteFi...

文件类型更改器——GoLang 中的 CLI 工具

我是如何为一项琐碎的工作任务创建一个简单的工具的,你也可以上周我开始玩GoLang,它是一种由Google制作的类C编译语言,非常轻量和快速,事实上它经常在Techempower的基准测...

Go (Golang) 中的 Channels 简介(golang channel长度和容量)

这篇文章重点介绍Channels(通道)在Go中的工作方式,以及如何在代码中使用它们。在Go中,Channels是一种编程结构,它允许我们在代码的不同部分之间移动数据,通常来自不同的goro...

Golang引入泛型:Go将Interface「」替换为“Any”

现在Go将拥有泛型:Go将Interface{}替换为“Any”,这是一个类型别名:typeany=interface{}这会引入了泛型作好准备,实际上,带有泛型的Go1.18Beta...

一文带你看懂Golang最新特性(golang2.0特性)

作者:腾讯PCG代码委员会经过十余年的迭代,Go语言逐渐成为云计算时代主流的编程语言。下到云计算基础设施,上到微服务,越来越多的流行产品使用Go语言编写。可见其影响力已经非常强大。一、Go语言发展历史...

Go 每日一库之 java 转 go 遇到 Apollo?让 agollo 来平滑迁移

以下文章来源于GoOfficialBlog,作者GoOfficialBlogIntroductionagollo是Apollo的Golang客户端Apollo(阿波罗)是携程框架部门研...

Golang使用grpc详解(golang gcc)

gRPC是Google开源的一种高性能、跨语言的远程过程调用(RPC)框架,它使用ProtocolBuffers作为序列化工具,支持多种编程语言,如C++,Java,Python,Go等。gR...

Etcd服务注册与发现封装实现--golang

服务注册register.gopackageregisterimport("fmt""time"etcd3"github.com/cor...

Golang:将日志以Json格式输出到Kafka

在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/...

如何从 PHP 过渡到 Golang?(php转golang)

我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗旨,从零开始,开始学习。因为我司没有专门的Golang大牛,所以我也只能一步步自己去...