Itextsharp下根据Echarts图像生成pdf
一.生成一个简单的pdf
publicActionResultGetPdf()
{
MemoryStream ms =newMemoryStream();
Document document =newDocument();
PdfWriter.GetInstance(document, ms);
document.Open();
document.Add(newParagraph("Yes Master!"));
document.Close();
returnFile(ms.ToArray(),"application/pdf","ceshi.pdf");
}
得到一个pdf
public ActionResult GetPdf()
{
it.Font font = new it.Font(BaseFont.CreateFont("C:\\Windows\\Fonts\\simhei.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED), ); MemoryStream ms = new MemoryStream();
it.Document document = new it.Document(); PdfWriter.GetInstance(document, ms); document.Open(); document.Add(new it.Paragraph("Yes Master!"));
document.Add(new it.Paragraph("其疾如风,其徐如林,侵掠如火,不动如山,难知如阴,动如雷震", font)); document.Close();
return File(ms.ToArray(), "application/pdf", "ceshi.pdf");
}
支持中文的pdf

BaseFont.AddToResourceSearch("iTextAsian.dll");
BaseFont.AddToResourceSearch("iTextAsianCmaps.dll");
<!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>ImagePdf</title>
<script src="http://cdn.bootcss.com/jquery/1.11.2/jquery.js"></script>
</head>
<body>
<div>
<button id="btnSearch" tabindex="" class="slbutton" style="border-style: none;">
导出</button>
<div id="main" style="height: 400px"></div><input id="maininput" type="hidden"/>
<iframe id="exportContainer" style="display: none;"></iframe>
<script src="http://echarts.baidu.com/build/dist/echarts.js"></script>
<script type="text/javascript">
$(function () {
$("#btnSearch").bind("click", function () {
ExportPDF();
});
});
// 路径配置
require.config({
paths: {
echarts: 'http://echarts.baidu.com/build/dist'
}
}); // 使用
require(
[
'echarts',
'echarts/chart/bar' // 使用柱状图就加载bar模块,按需加载
],
function (ec) {
// 基于准备好的dom,初始化echarts图表
var myChart = ec.init(document.getElementById('main')); var option = {
animation :false,
tooltip: {
show: true
},
legend: {
data: ['销量']
},
xAxis: [
{
type: 'category',
data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
"name": "销量",
"type": "bar",
"data": [, , , , , ]
}
]
}; // 为echarts对象加载数据
myChart.setOption(option);
$("#maininput").val(myChart.getDataURL('jpg'));
}
);
function ExportPDF() { var imgurl = $("#maininput").val();
$.ajax({
async: true,
type: "POST",
url: "/PdfDemo/SendImagePdfUrl",
cache: false,
timeout: * * ,
dataType: "json",
data: {
ImageUrl: imgurl },
success: function (result) {
if (result != null && result.message == "success") {
var src = "/PdfDemo/GetImagePdf?ID=" + result.filename;
$("#exportContainer").attr("src", src);
}
else {
if (result != null) {
alert(result.Message);
}
}
},
beforeSend: function () {
$("#btnSearch").prop("disabled",true);
},
complete: function () {
$("#btnSearch").prop("disabled", false);
}
});
}
</script>
</div>
</body>
</html>
前台代码
public ActionResult SendImagePdfUrl(string ImageUrl)
{
JsonResult j = new JsonResult();
string fileName = System.Guid.NewGuid().ToString();
if (!string.IsNullOrEmpty(ImageUrl))
{
Image pdfImage = base64ToPic(ImageUrl);
pdfImage.Save(Server.MapPath("~") + "/pdfimage/" + fileName + "1.jpg");
var data = new { message = "success", filename = fileName };
j.Data = data;//返回单个对象;
}
else
{
var data = new { message = "未提供Url" };
j.Data = data;//返回单个对象;
}
return j;
}
/// <summary>
/// //对字节数组字符串进行Base64解码并生成图片
/// </summary>
/// <param name="ImageUrl"></param>
/// <returns></returns>
public Image base64ToPic(string ImageUrl)
{ if (ImageUrl == null) //图像数据为空
{
return null;
}
try
{
//将一开始的data:png等信息去掉,只剩base64字符串
String[] url = ImageUrl.Split(',');
String u = url[];
//Base64解码
byte[] imageBytes = Convert.FromBase64String(u);
Image image;
//生成图片
using (MemoryStream ms = new MemoryStream(imageBytes, , imageBytes.Length))
{
// Convert byte[] to Image
ms.Write(imageBytes, , imageBytes.Length);
image = Image.FromStream(ms, true);
}
return image;
}
catch (Exception e)
{
return null;
}
}
Base64ToPic
public ActionResult GetImagePdf(string ID)
{
it.Font font = new it.Font(BaseFont.CreateFont("C:\\Windows\\Fonts\\simhei.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED), );
MemoryStream ms = new MemoryStream();
it.Document document = new it.Document();
PdfWriter.GetInstance(document, ms);
document.Open();
document.Add(new it.Paragraph("Yes Master!"));
document.Add(new it.Paragraph("其疾如风,其徐如林,侵掠如火,不动如山,难知如阴,动如雷震", font));
List<string> imageStringList = GetImageString(ID, ); foreach (var item in imageStringList)
{
try
{
//如果传过来的是Base64
//it.Image image = it.Image.GetInstance(base64ToPic(item), System.Drawing.Imaging.ImageFormat.Jpeg);
//如果传过来的是地址
it.Image image = it.Image.GetInstance(Server.MapPath("~") + "/pdfimage/" + item + ".jpg"); image.Alignment = it.Image.ALIGN_LEFT;
image.ScalePercent();
document.Add(image);
}
catch (Exception e)
{
document.Add(new it.Paragraph("图片" + item + "不存在"));
}
}
document.Close();
document.Dispose();
return File(ms.ToArray(), "application/pdf", "ceshi.pdf");
}
将图片放入pdf
/// <summary>
/// 得到这一系列Image的Url
/// </summary>
/// <param name="ID">相同部分</param>
/// <param name="count">共有几张</param>
/// <returns></returns>
public List<string> GetImageString(string ID, int count)
{
List<string> ImageStringList = new List<string>(); for (int i = ; i < count; i++)
{
ImageStringList.Add(ID + count.ToString());
}
return ImageStringList;
}
其他代码
欢迎拍砖。
Itextsharp下根据Echarts图像生成pdf的更多相关文章
- 昇腾CANN论文上榜CVPR,全景图像生成算法交互性再增强!
摘要:近日,CVPR 2022放榜,基于CANN的AI论文<Interactive Image Synthesis with Panoptic Layout Generation>强势上榜 ...
- itextsharp生成pdf后的直接打印问题
原文 itextsharp生成pdf后的直接打印问题 小弟这两天用itextsharp生成pdf文档,生成的pdf可以直接保存在指定路径的文件夹下,可是user不想保存,想要点一下button,就可以 ...
- itextsharp利用模板生成pdf文件笔记
iTextSharp是一款开源的PDF操作类库,使用它可以快速的创建PDF文件. 中文参考网站:http://hardrock.cnblogs.com/ http://pdfhome.hope.com ...
- C# html生成PDF遇到的问题,从iTextSharp到wkhtmltopdf
我们的网站业务会生成一个报告,用网页展示出来,要有生成pdf并下载的功能,关键是生成pdf. 用内容一段段去拼pdf,想想就很崩溃,所以就去网上找直接把html生成pdf的方法. 网上资料大部分都是用 ...
- iTextSharp生成pdf的一个简单例子
效果图: 参考:http://www.cnblogs.com/CareySon/archive/2011/11/09/2243496.html http://www.cnblogs.com/julyl ...
- linux下编译bib、tex生成pdf文件
实验: 在linux环境下,编译(英文)*.bib和*.tex文件,生成pdf文件. 环境: fedora 20(uname -a : Linux localhost.localdomain 3.19 ...
- ITextSharp用来生成 PDF 的一个组件
iTextSharp 是用来生成 PDF 的一个组件,在 1998 年夏天的时候,Bruno Lowagie ,iText 的创作者,参与了学校的一个项目,当时使用 HTML 来生成报告,但是,使用 ...
- C#使用itextsharp生成PDF文件
项目需求需要生成一个PDF文档,使用的是VS2010,ASP.NET. 网络上多次搜索没有自己想要的,于是硬着头皮到itextpdf官网看英文文档,按时完成任务,以实用为主,共享一下: 使用HTML文 ...
- 使用 ItextSharp HTML生成Pdf(C#)
以前生成pdf的时候.因为生成的pdf数据是固定的,所以先做好pdf模板,动态的数据可以先用占位符 生成的时候.找到占位符坐标.把数据填充进去 优点:先做好模板.生成的pdf 表格.文.内容会好看一些 ...
随机推荐
- TCP & UDP & IP
TCP和UDP的区别 TCP UDP 是否连接 面向连接 面向非连接 应用场合 可靠的 不可靠的 速度 慢 快 传送数据 字节流 数据报 是否可用于广播 否 是 为什么UDP比TCP快 不需要连接 ...
- Chrome 控制台 console
前言 Chrome浏览器我想是每一个前端er必用工具之一吧,一部分原因是它速度快,体积不大,支持的新特性也比其它浏览器多,还有一部分我想就是因为它的控制台功能强大了吧,说它是神器一点也不过分,很方便. ...
- 编译hadoop遇到maven timeout
在编译hadoop的过程中,使用ant jar进行编译时,提示maven版本库连接超时的问题,通过搜索发现,在如下文件的位置中有repo2的版本库地址,这个地址在国内,目前不能正常的访问: 将 ...
- 关于Redis中的serverCron
1.serverCron简介 在 Redis 中, 常规操作由 redis.c/serverCron 实现, 它主要执行以下操作 /* This is our timer interrupt, cal ...
- java Timer(定时调用、实现固定时间执行)
最近需要用到定时调用的功能.可以通过java的Timer类来进行定时调用,下面是有关Timer的一些相关知识. 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个 ...
- hdu 2199 Can you solve this equation?(二分搜索)
Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- 动手学习TCP:服务端状态变迁
上一篇文章介绍了TCP状态机,并且通过实验了解了TCP客户端正常的状态变迁过程. 那么,本篇文章就一起看看TCP服务端的正常状态变迁过程 服务端状态变迁 根据上一篇文章中的TCP状态变迁图,可以得到服 ...
- MongoDB日志过大怎么办?
MongoDB 日志文件过大怎么办? MongoDB的日志文件在设置 logappend=true 的情况下,会不断向同一日志文件追加的,时间长了,自然变得非常大. 解决如下:(特别注意:启动的时候必 ...
- 【C#】1.算法温故而知新 - 简单的桶排序
该算法的时间复杂度是O(M+N),M为桶的个数,N为待排序的个数 缺点: 1.不适用于小数 2.当数值过多,太浪费空间,比如数值范围为0~99999,那需申请100000个变量,也就是要写成a[100 ...
- 合工大 OJ 1322 窗口
窗口 Description 在某图形操作系统中,有N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域.窗口的边界上的点也属于该窗口.窗口之间有层次的区别,在多于一个窗口重叠的区域里, ...