namespace Utilities
{
public static class PDFHelper
{ /// <summary>
/// Html转Pdf
/// </summary>
/// <param name="strHtmlData">HTML内容</param>
/// <param name="filePath">文件路径</param>
/// <param name="fileName">文件名</param>
public static bool HtmlToPdfByInfo(string strHtmlData, string filePath, string fileName)
{
FileStream fs = null;
try
{
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
//获得字节数组
byte[] bPDF = ConvertHtmlTextToPDF(strHtmlData); if (bPDF == null)
{
return false;
} fs = new FileStream(Path.Combine(filePath, fileName), FileMode.Create); //开始写入
fs.Write(bPDF, , bPDF.Length);
return true;
}
catch (Exception)
{
throw;
}
finally
{
//清空缓冲区、关闭流
if (fs != null)
{
fs.Flush();
fs.Close();
}
}
} public static bool DownLoadFile(string url, string filePath, string fileName)
{
try
{
WebClient wc = new WebClient();
wc.Encoding = System.Text.Encoding.UTF8;
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
wc.DownloadFile(url, Path.Combine(filePath, fileName)); return true;
}
catch (Exception ex)
{
string strLog = string.Format("下载文件名:{0};文件下载地址:{1};错误信息:{2}。", fileName, url, ex.StackTrace);
LogHelper.Info(strLog);
throw ex;
} } #region HTML模板方式转PDF(格式问题)
/// <summary>
/// Html转Pdf
/// </summary>
/// <param name="url">页面地址,要完整地址</param>
/// <param name="filePath">文件路径</param>
/// <param name="fileName">文件名</param>
public static bool HtmlToPdf(string url, string filePath, string fileName)
{
FileStream fs = null;
try
{
WebClient wc = new WebClient();
wc.Encoding = System.Text.Encoding.UTF8;
//从网址下载Html字串
string htmlText = wc.DownloadString(url); //StreamWriter TxtWriter = new StreamWriter(@"D:\logfile.txt", true);
//TxtWriter.Write("0" + Environment.NewLine);
//TxtWriter.Write(htmlText + Environment.NewLine);
//TxtWriter.Close(); //获得字节数组
byte[] bPDF = ConvertHtmlTextToPDF(htmlText); if (bPDF == null)
{
return false;
} if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
fs = new FileStream(Path.Combine(filePath, fileName), FileMode.Create); //开始写入
fs.Write(bPDF, , bPDF.Length); return true;
}
catch (Exception ex)
{
string strLog = string.Format("HTML模板方式转PDF 文件名:{0};文件下载地址:{1};错误信息:{2}。", fileName, url, ex.StackTrace);
LogHelper.Info(strLog);
throw ex;
}
finally
{
//清空缓冲区、关闭流
if (fs != null)
{
fs.Flush();
fs.Close();
}
}
}
#endregion private static byte[] ConvertHtmlTextToPDF(string htmlText)
{
if (string.IsNullOrEmpty(htmlText))
{
return null;
}
//避免当htmlText无任何html tag标签的纯文字时,转PDF时会挂掉,所以一律加上<p>标签
//htmlText = "<p>" + htmlText + "</p>"; MemoryStream outputStream = new MemoryStream();//要把PDF写到哪个串流
byte[] data = Encoding.UTF8.GetBytes(htmlText);//字串转成byte[]
MemoryStream msInput = new MemoryStream(data);
Document doc = new Document();//要写PDF的文件,建构子没填的话预设直式A4
PdfWriter writer = PdfWriter.GetInstance(doc, outputStream); //PageEventHelper pageEventHelper = new PageEventHelper();
//writer.PageEvent = pageEventHelper;
//指定文件预设开档时的缩放为100%
PdfDestination pdfDest = new PdfDestination(PdfDestination.XYZ, , doc.PageSize.Height, 1f); //开启Document文件
doc.Open(); //使用XMLWorkerHelper把Html parse到PDF档里
//XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msInput, null, Encoding.UTF8);
XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msInput, null, Encoding.UTF8, new UnicodeFontFactory()); //XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msInput, null, Encoding.UTF8, new UnicodeFontFactory());
//将pdfDest设定的资料写到PDF档
PdfAction action = PdfAction.GotoLocalPage(, pdfDest, writer);
writer.SetOpenAction(action); ////手工加内容
//doc.NewPage();
////要先定义中文字体
//BaseFont BF_Light = BaseFont.CreateFont(@"C:\Windows\Fonts\simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
////要设置字体和大小
//var p = new Paragraph("合同信息", new Font(BF_Light, 13));
//PdfPTable table = new PdfPTable(1);
//PdfPCell cell = new PdfPCell(p);
////设置cell属性
//cell.HorizontalAlignment = Element.ALIGN_CENTER;
////添加单元格
//table.AddCell(cell);
//doc.Add(table); doc.Close();
msInput.Close();
outputStream.Close();
//回传PDF档案
return outputStream.ToArray();
} #region 创建PDF文档
/// <summary>
/// 生成PDF
/// </summary>
/// <param name="strHtmlData">HTML内容</param>
/// <param name="filePath">文件路径</param>
/// <param name="fileName">文件名</param>
public static bool CreatePdf(string filePath, string fileName, PdfPTable dt)
{
FileStream fs = null;
try
{
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
//获得字节数组
byte[] bPDF = CreatePdf(dt); if (bPDF == null)
{
return false;
} fs = new FileStream(Path.Combine(filePath, fileName), FileMode.Create); //开始写入
fs.Write(bPDF, , bPDF.Length);
return true;
}
catch (Exception)
{
throw;
}
finally
{
//清空缓冲区、关闭流
if (fs != null)
{
fs.Flush();
fs.Close();
}
}
} /// <summary>
/// 创建PDF
/// </summary>
/// <param name="htmlText"></param>
/// <returns></returns>
private static byte[] CreatePdf(PdfPTable pdfTable)
{
MemoryStream outputStream = new MemoryStream();//要把PDF写到哪个串流
Document doc = new Document();//要写PDF的文件,建构子没填的话预设直式A4
PdfWriter writer = PdfWriter.GetInstance(doc, outputStream);
//指定文件预设开档时的缩放为100%
PdfDestination pdfDest = new PdfDestination(PdfDestination.XYZ, , doc.PageSize.Height, 1f); //开启Document文件
doc.Open();
//将pdfDest设定的资料写到PDF档
PdfAction action = PdfAction.GotoLocalPage(, pdfDest, writer);
writer.SetOpenAction(action); //手工加内容
doc.NewPage();
doc.Add(pdfTable); var row = pdfTable.Rows[pdfTable.Rows.Count];
//iTextSharp.text.Image splitline = iTextSharp.text.Image.GetInstance(@"E:\WorkCodes\YeWu\YCloud.MFBP.Web\Images\yaoshi.png");
//splitline.ScalePercent(12f); //图片比例
//splitline.SetAbsolutePosition(doc.PageSize.Width- doc.PageSize.Width/3*2, doc.PageSize.Height - doc.PageSize.Height/5*4); doc.Close();
outputStream.Close();
//回传PDF档案
return outputStream.ToArray();
} #endregion
} public class UnicodeFontFactory : FontFactoryImp
{
static string fontPath = Environment.GetFolderPath(Environment.SpecialFolder.Fonts); //arial unicode MS是完整的unicode字型。
//private static readonly string arialFontPath = Path.Combine(fontPath, "arialuni.ttf");
//宋体。
private static readonly string stFontPath = Path.Combine(fontPath, "simsun.ttc,0"); public override Font GetFont(string fontname, string encoding, bool embedded, float size, int style, BaseColor color, bool cached)
{
BaseFont baseFont = BaseFont.CreateFont(stFontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
return new Font(baseFont, size, style, color);
}
} public class PageEventHelper : PdfPageEventHelper
{
PdfContentByte cb;
PdfTemplate template; public override void OnOpenDocument(PdfWriter writer, Document document)
{
cb = writer.DirectContent;
template = cb.CreateTemplate(, );
} public override void OnStartPage(PdfWriter writer, Document document)
{
base.OnStartPage(writer, document);
} public override void OnEndPage(PdfWriter writer, Document document)
{
base.OnEndPage(writer, document); String text = "第" + writer.PageNumber.ToString() + "页"; UnicodeFontFactory info = new UnicodeFontFactory();
float len = ;
iTextSharp.text.Rectangle pageSize = document.PageSize;
cb.SetRGBColorFill(, , ); string fontPath = Environment.GetFolderPath(Environment.SpecialFolder.Fonts);
string stFontPath = Path.Combine(fontPath, "simsun.ttc,0");
BaseFont baseFont = BaseFont.CreateFont(stFontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); cb.BeginText();
cb.SetFontAndSize(baseFont, );
cb.SetTextMatrix(document.LeftMargin, pageSize.GetBottom(document.BottomMargin));
cb.ShowText(text); cb.EndText(); cb.AddTemplate(template, document.LeftMargin + len, pageSize.GetBottom(document.BottomMargin));
} public override void OnCloseDocument(PdfWriter writer, Document document)
{
base.OnCloseDocument(writer, document); string fontPath = Environment.GetFolderPath(Environment.SpecialFolder.Fonts);
string stFontPath = Path.Combine(fontPath, "simsun.ttc,0");
BaseFont baseFont = BaseFont.CreateFont(stFontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); template.BeginText();
template.SetFontAndSize(baseFont, );
template.SetTextMatrix(, );
template.ShowText("共" + writer.PageNumber + "页");
template.EndText();
} } }

pdf转换的更多相关文章

  1. Python 将pdf转换成txt(不处理图片)

    上一篇文章中已经介绍了简单的python爬网页下载文档,但下载后的文档多为doc或pdf,对于数据处理仍然有很多限制,所以将doc/pdf转换成txt显得尤为重要.查找了很多资料,在linux下要将d ...

  2. ABBYY如何把PDF转换Excel

    我们都知道2007以上版本的Office文档,是可以直接将文档转存为PDF格式文档的.那么反过来,PDF文档可以转换成其他格式的文档吗?这是大家都比较好奇的话题.如果可以以其他格式进行保存,就可以极大 ...

  3. ABBYY把pdf转换成word的方法

    有时候我们在网上下载的资料文献是PDF格式文档,遇到喜欢的字句总忍不住想要收藏起来,但是PDF文档不同于普通的Word文档可以直接进行复制粘贴,需要下载安装相关的编辑工具,才能对文字内容进行编辑.倒不 ...

  4. 如何用ABBYY把PDF转换成PPT

    在电子科技迅速发展的今天,文件格式转换并不是什么稀罕事,因为现在都是电子化办公,出现很多文件格式,但是不同的场合需要的格式不同,所以常常需要进行文件格式的转换.PDF转换成PPT也是众多文件格式转换中 ...

  5. 利用jpedal进行pdf转换成jpeg,jpg,png,tiff,tif等格式的图片

    项目中运用到pdf文件转换成image图片,开始时使用pdfbox开源库进行图片转换,但是转换出来的文件中含有部分乱码的情况.下面是pdfBox 的pdf转换图片的代码示例. try{ String ...

  6. C#技术分享【PDF转换成图片——13种方案】(2013-07-25重新整理)

    原文:C#技术分享[PDF转换成图片--13种方案](2013-07-25重新整理) 重要说明:本博已迁移到 石佳劼的博客,有疑问请到 文章新地址 留言!!! 写在最前面:为了节约大家时间,撸主把最常 ...

  7. 利用pdf2swf将PDF转换成SWF

    将PDF转换成SWF可以使用SWFTools工具中的pdf2swf(http://www.swftools.org/),CSDN快速免积分下载地址http://download.csdn.net/de ...

  8. 推荐一款免费的PDF转换工具 | PDFCandy

    相信大家在用的PDF转换工具也很多,下面良心推荐这款软件(PDFCandy)给大家,方便在今后的工作中进行运用.提高大家的工作效率. PDFCandy分为两种:网页端和客户端.(根据大家的喜好度来进行 ...

  9. pdf转换成word转换器免费版

    在平时的办公中,我们只需要有一款比较好用的pdf转换成word转换器,就能提高我们的工作效率,但是国内外的pdf转换成word转换器应该怎么选呢?小编因为是文职工作者,所以在日常的实践中选出了ABBY ...

  10. pdf转换成可在线浏览的电子杂志zmaker_pdf

    zmaker是曾经国内最流行的电子杂志制作软件,可惜可惜,不过幸好有人给发布了 最新版的 其实主要是2个流程 一个是软件的安装 软件的下载和安装请参考 官方教材 http://bbs.emaghome ...

随机推荐

  1. Linux 中账户管理

    账户管理涉及到三个文件: 1./etc/passwd yy@ubuntu:~$ head -n 3 /etc/passwdroot:x:0:0:root:/root:/bin/bashdaemon:x ...

  2. Microsoft SQL server 2012数据库学习总结(一)

    一.Microsoft SQL Server2012简介 1.基本概要 Microsoft SQL Server 2012是微软发布的新一代数据平台产品,全面支持云技术与平台,并且能够快速构建相应的解 ...

  3. jdbc简单使用

    1.代码 import java.sql.*; public class DBUtil { public static void main(String[] args) throws ClassNot ...

  4. 2019年8月23日 星期五(Workerman)

    Workerman,高性能socket服务框架 Workerman是什么? Workerman是一款纯PHP开发的开源高性能的PHP socket 服务框架. Workerman不是重复造轮子,它不是 ...

  5. 安装gitlab ce

    切换到root用户,安装相关依赖 yum install curl policycoreutils openssh-server openssh-clients service sshd restar ...

  6. GoAccess安装

    编译安装 yum install geoip-devel openssl-devel libmaxminddb-devel ncurses-devel bzip2-devel tokyocabinet ...

  7. idea-代码格式化快捷键设置(2019.1版)

    idea默认格式化快捷键是:Ctrl+Alt+L,有时会因其它软件快捷键的冲突导致失灵. 设置方法如下: 1.File -->  Settings... 2. Keymap -> Code ...

  8. F12 开发人员工具中的控制台错误消息

    使用此参考解释显示在 Internet Explorer 11 的控制台 和调试程序中的错误消息. 简介 使用 F12 开发人员工具进行调试时,错误消息(例如 EC7111 或 HTML1114)将显 ...

  9. MySQL 的索引是什么?怎么优化?

    索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本.MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的.My ...

  10. Altium Designer 只导出PCB元器件及标号的PDF文件的方法

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 作者:struct_mooc 博客地址:https://www.cnblogs.com/stru ...