C#&.Net干货分享- iTextSharp导出数据源到PDF
namespace Frame.ITextSharp
{
/// <summary>
/// iTextSharp导出数据源到PDF
/// </summary>
public static class ITextSharp_PDFHelper
{
/// <summary>
/// 导出Pdf
/// </summary>
/// <param name="localFilePath">文件保存路径</param>
/// <param name="dtSource">数据源</param>
/// <param name="HorV">页面横竖(为空表示竖,有非空值为横)</param>
public static void ExportPDF(string localFilePath, DataTable dtSource, string HorV)
{
iTextSharp.text.io.StreamUtil.AddToResourceSearch("iTextAsian.dll");
iTextSharp.text.io.StreamUtil.AddToResourceSearch("iTextAsianCmaps.dll");
BaseFont bf;
string basepath = Application.StartupPath;
try
{
bf = BaseFont.CreateFont(basepath + "\\FONTS\\STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
}
catch
{
bf = BaseFont.CreateFont("C:\\WINDOWS\\Fonts\\STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
}
iTextSharp.text.Font font = new iTextSharp.text.Font(bf);
iTextSharp.text.Document pdf;
if (string.IsNullOrEmpty(HorV))
{
pdf = new iTextSharp.text.Document();
}
else
{
pdf = new iTextSharp.text.Document(PageSize.A4.Rotate());
}
PdfPTable table = new PdfPTable(dtSource.Columns.Count);
table.HorizontalAlignment = Element.ALIGN_CENTER;
PdfPCell cell;
for (int i = 0; i < dtSource.Rows.Count + 1; i++)
{
for (int j = 0; j < dtSource.Columns.Count; j++)
{
if (i == 0)
{
cell = new PdfPCell(new Phrase(dtSource.Columns[j].ColumnName, font));
}
else
{
cell = new PdfPCell(new Phrase(dtSource.Rows[i - 1][j].ToString(), font));
}
table.AddCell(cell);
}
}
using (FileStream fs = new FileStream(localFilePath, FileMode.Create, FileAccess.Write))
{
PdfWriter.GetInstance(pdf, fs);
pdf.Open();
pdf.Add(table);
pdf.Close();
}
}
/// <summary>
/// 提取PDF文件的文本内容
/// </summary>
/// <param name="pdfFilepath"></param>
/// <returns></returns>
public static string ReadPdfContent(string pdfFilepath)
{
try
{
PdfReader pdfReader = new PdfReader(pdfFilepath);
int numberOfPages = pdfReader.NumberOfPages;
string pfdText = string.Empty;
for (int i = 1; i <= numberOfPages; ++i)
{
//ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
//pfdText += PdfTextExtractor.GetTextFromPage(pdfReader, i, strategy);
byte[] bufferOfPageContent = pdfReader.GetPageContent(i);
pfdText += Encoding.UTF8.GetString(bufferOfPageContent);
}
pdfReader.Close();
return pfdText;
}
catch
{
return string.Empty;
}
}
/// <summary>
/// 添加倾斜水印
/// </summary>
/// <param name="pdfStream">pdf文件流</param>
/// <param name="iTextSharpTextWaterMarkPara">水印参数</param>
public static MemoryStream SetPdfTextWaterMark(MemoryStream pdfStream, ITextSharpTextWaterMarkPara iTextSharpTextWaterMarkPara)
{
try
{
int span = 40;//设置垂直位移
MemoryStream outStream = new MemoryStream();
PdfReader pdfReader = new PdfReader(pdfStream);
PdfStamper pdfStamper = new PdfStamper(pdfReader, outStream);
pdfStamper.Writer.CloseStream = false;
int total = pdfReader.NumberOfPages + 1;
PdfContentByte content;
BaseFont font = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\STCAIYUN.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);//华文云彩字体
PdfGState gs = new PdfGState();
gs.FillOpacity = iTextSharpTextWaterMarkPara.Alpha;//透明度
int waterMarkNameLenth = iTextSharpTextWaterMarkPara.WaterMarkText.Length;
char c;
int rise = 0;
string spanString = " ";//水平位移
for (int i = 1; i < total; i++)
{
rise = waterMarkNameLenth * span;
content = pdfStamper.GetOverContent(i);//在内容上方加水印
//content = pdfStamper.GetUnderContent(i);//在内容下方加水印
content.SetGState(gs);
content.BeginText();
content.SetColorFill(BaseColor.GREEN);
content.SetFontAndSize(font, iTextSharpTextWaterMarkPara.FontSize);
int heightNumbert = (int)Math.Ceiling((decimal)iTextSharpTextWaterMarkPara.Height / (decimal)rise);//垂直重复的次数,进一发
int panleWith = (iTextSharpTextWaterMarkPara.FontSize + span) * waterMarkNameLenth;
int widthNumber = (int)Math.Ceiling((decimal)iTextSharpTextWaterMarkPara.Width / (decimal)panleWith);//水平重复次数
// 设置水印文字字体倾斜 开始
for (int w = 0; w < widthNumber; w++)
{
for (int h = 1; h <= heightNumbert; h++)
{
int yleng = rise * h;
content.SetTextMatrix(w * panleWith, yleng);//x,y设置水印开始的绝对左边,以左下角为x,y轴的起点
for (int k = 0; k < waterMarkNameLenth; k++)
{
content.SetTextRise(yleng);//指定的y轴值处添加
c = iTextSharpTextWaterMarkPara.WaterMarkText[k];
content.ShowText(c + spanString);
yleng -= span;
}
}
}
content.EndText();
}
if (pdfStamper != null)
pdfStamper.Close();
if (pdfReader != null)
pdfReader.Close();
return outStream;
}
catch (Exception ex)
{
throw ex;
}
}
}
/// <summary>
///
/// </summary>
public class ITextSharpTextWaterMarkPara
{
/// <summary>
///
/// </summary>
public ITextSharpTextWaterMarkPara()
{
Width = 0;
Height = 0;
XCoordinate = 0;
YCoordinate = 0;
}
/// <summary>
/// 水印文本
/// </summary>
public string WaterMarkText { get; set; }
/// <summary>
/// 透明度:0,10%,20%。。。。。90%,100%
/// 0,0.1f,0.2f,。。。。。0.9f,1
/// </summary>
public float Alpha { get; set; }
/// <summary>
/// 旋转度数
/// </summary>
public float RotateDegree { get; set; }
/// <summary>
/// 字体大小
/// </summary>
public int FontSize { get; set; }
/// <summary>
/// PDF的左边距离
/// </summary>
public float Width { get; set; }
/// <summary>
/// PDF的上边距离
/// </summary>
public float Height { get; set; }
/// <summary>
/// X坐标
/// </summary>
public float XCoordinate { get; set; }
/// <summary>
/// Y坐标
/// </summary>
public float YCoordinate { get; set; }
}
}
C#&.Net干货分享- iTextSharp导出数据源到PDF的更多相关文章
- C#&.Net干货分享- 构建Spire-Office相关Helper操作Word、Excel、PDF等
先下载好如下的组件: 直接使用完整源码分享: namespace Frame.Office{ /// <summary> /// Spire_WordHelper /// ...
- ITextSharp导出PDF表格和图片(C#)
文章主要介绍使用ITextSharp导出PDF表格和图片的简单操作说明,以下为ITextSharp.dll下载链接 分享链接:http://pan.baidu.com/s/1nuc6glj 密码:3g ...
- 干货分享:SQLSERVER使用裸设备
干货分享:SQLSERVER使用裸设备 这篇文章也适合ORACLE DBA和MYSQL DBA 阅读 裸设备适用于Linux和Windows 在ORACLE和MYSQL里也是支持裸设备的!! 介绍 大 ...
- iOS - GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD - ②)
距上一篇博客"APP引导页的高度集成 - DHGuidePageHUD - ①"的发布有一段时间了, 后来又在SDK中补充了一些新的内容进去但是一直没来得及跟大家分享, 今天来跟大 ...
- iOS - GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD - ①)
好长时间没更新博客, 是时候来一波干货分享了;APP引导页话不多说每一个APP都会用到,分量不重但是不可缺少,不论是APP的首次安装还是版本的更新,首先展现给用户眼前的也就只有它了吧,当然这里讲的不是 ...
- 【干货分享】Google 的设计准则,素材和资源
在谷歌,他们说, “专注于用户,所有其它的就会水到渠成 ”.他们遵循设计原则,寻求建立让用户惊喜的用户体验.谷歌一直挑战自己,为他们的用户创造一种视觉语言,综合优秀设计的经典原则和创新.谷歌设计规范是 ...
- 【干货分享】Node.js 中文资料导航
这篇文章与大家分享一批高质量的的 Node.js 中文资料.Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的, 易于扩展的网络应用 Node ...
- 干货分享:MySQL之化险为夷的【钻石】抢购风暴【转载】
转自: 干货分享:MySQL之化险为夷的[钻石]抢购风暴 - Vanos_韩尛哲 - 博客园http://www.cnblogs.com/Vanos-lcp/p/5642097.html 抢购钻石不稀 ...
- 老李分享:导出xml报告到手机
老李分享:导出xml报告到手机 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821 ...
随机推荐
- Matlab非线性规划
非线性规划 在matlab非线性规划数学模型可以写成一下形式: \[ minf(x)\\ s.t.\begin{cases} Ax \le B \\ Aeq·x = Beq\\ C(x) \le 0\ ...
- linux源码安装mysql,shell编程学习,ubuntu
一.mysql安装 以源码安装的方式编译和安装Mysql 5.6. 1.卸载旧版本 rpm -qa | grep mysql 检查是否有旧版本 查询结果:mysql-libs-5.1.73-7.el6 ...
- JavaWeb 实现简单登录、注册功能
1.首先创建一个简单的动态Javaweb项目 2.然后手动建立文件目录: 项目创建好之后,在src下建几个包: controller:控制器,负责转发请求,对请求进行处理,主要存放servlet: d ...
- 激光炸弹 HYSBZ - 1218
激光炸弹 HYSBZ - 1218 Time limit:10000 ms Memory limit:165888 kB OS:Linux Source:HNOI2003 一种新型的激光炸弹,可以摧毁 ...
- 使用matplotlib库绘制函数图
函数如下: z = x^2 * y / (x^4 +y^2) 代码如下: import numpy as np import matplotlib.pyplot as plt import mpl_t ...
- MySQL能否授予查看存储过程定义权限给用户
在其他RDBMS中,可以将查看某个存储过程(PROCEDURE)定义的权限给某个用户,例如在SQL Server中,可以单独将查看ProcedureName定义的权限授予UserA GRANT VIE ...
- Appium使用总结
目前在使用appium过程中遇到的一些问题及规避方法总结如下: Appium使用总结:1.在熄屏下启动测试,会自动唤醒屏幕2.Appium只针对单个应用测试3.使用unittest框架,该框架中每条用 ...
- Codefest19受虐记
date: 2019-08-28 前言 比赛链接:Codefest 19 A题 思路: 这是一道水题.你对着样例递推打一个表出来,会发现结果三个一组循环. 例如:A = [3, 4, 7, 3, 4, ...
- 【bzoj4555】[Tjoi2016&Heoi2016]求和(NTT+第二类斯特林数)
传送门 题意: 求 \[ f(n)=\sum_{i=0}^n\sum_{j=0}^i\begin{Bmatrix} i \\ j \end{Bmatrix}2^jj! \] 思路: 直接将第二类斯特林 ...
- 2.28秒创建一个k8s集群(非理论篇,理论自行 -- )
准备3台centos 7+ (建议7以上,不然要会很麻烦,要升级内核等等,扯淡的东西) 安装docker 和k8s集群(均以最新版为例)基于官网 设置静态ip(可选) 查看本机的网关ip cd /Li ...