HTML导出PDF中文文件

今天在做一个账单导出,需要导出PDF文件。于是开始满天下找解决方案。其实说实话,PDF确实了解比较少,看到园子里面很多人都说用



iTextSharp。

于是乎专门对iTextSharp是什么进行了搜索,原来这个国外的一群人开发的PDF的类库。于是根据下载了iTextSharp.DLL并引用了它,结果发现结果太不理想了。没有样式没有中文,这让人。。。。甚至,跨行的RowSpan也给我弄掉了。这完全不是我需要的东西嘛。想放弃了,换个东西来做。然后随手点了iTextSharp的开源项目。结果发现,其实它是能支持中文和样式的。只是需要引用他的另一个类库xmlworker。

于是下载了  itextsharp-all-5.5.2.zip  和 itextsharp.xmlworker-all-5.5.2.zip然后就完美实现了。

相关代码如下:

这个类文件为了实现中文转码的问题

using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;

/// <summary>
/// ChineseFontFactory
/// </summary>
public class ChineseFontFactory : FontFactoryImp
{

    private static readonly string SoneFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts),
    "SIMSUN.TTC,1");//宋体  这里是宋体在计算机的中文包所在位置
    public override Font GetFont(string fontname, string encoding, bool embedded, float size, int style, BaseColor color,
        bool cached)
    {
        //可用Arial或标楷体,自己选一个
        BaseFont baseFont = BaseFont.CreateFont(SoneFile, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        return new Font(baseFont, size, style, color);
    }

}

然后封装转换方法

 /// <summary>
    /// 将Html文字 输出到PDF档里
    /// </summary>
    /// <param name="htmlText"></param>
    /// <returns></returns>
    public byte[] ConvertHtmlTextToPDF(string htmlText)
    {
        if (string.IsNullOrEmpty(htmlText))
        {
            return null;
        }
        MemoryStream outputStream = new MemoryStream();//
        byte[] data = Encoding.UTF8.GetBytes(htmlText);//
        MemoryStream msInput = new MemoryStream(data);
        Document doc = new Document();//
        PdfWriter writer = PdfWriter.GetInstance(doc, outputStream);
        PdfDestination pdfDest = new PdfDestination(PdfDestination.XYZ, 0, doc.PageSize.Height, 1f);
        doc.Open();
        XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msInput, null, Encoding.UTF8,new ChineseFontFactory());
        PdfAction action = PdfAction.GotoLocalPage(1, pdfDest, writer);
        writer.SetOpenAction(action);
        doc.Close();
        msInput.Close();
        outputStream.Close();
        return outputStream.ToArray();

    }

最后是方法触发,例如当点击按钮就会导出PDF文件

protected void btnPdf_Click(object sender, EventArgs e)
    {

        string fileName = DateTime.Now.ToString();
        System.Text.StringBuilder strb = new System.Text.StringBuilder();
        System.IO.StringWriter sw = new System.IO.StringWriter(strb);
        System.Web.UI.HtmlTextWriter htw = new HtmlTextWriter(sw);
        pointContent.RenderControl(htw);
        string htmlText = strb.ToString();
        byte[] pdfFile = this.ConvertHtmlTextToPDF(htmlText);
        Response.ContentType = "application/pdf";
        Response.ContentEncoding = System.Text.Encoding.UTF8;
        Response.AddHeader("content-disposition", "attachment;filename=" + fileName + ".pdf");
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.OutputStream.Write(pdfFile, 0, pdfFile.Length);
        Response.End();
    }

打完收工,不过在使用的过程中就是反应有点慢。这点让人有点无语。



HTML导出PDF中文文件

时间: 2024-10-05 10:43:09

HTML导出PDF中文文件的相关文章

JSP页面导出PDF格式文件

JSP页面导出PDF格式文件基本在前端页面可以全部完成 <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.debug.js"></script&

itop 2.2 导出PDF中文乱码问题解决

itop 2.2 导出PDF,中文会有乱码问题,这很明显就是字体设置问题,跟tcpdf无关. 经过排查,修改文件itop/core/pdfbulkexport.class.inc.php ,第128行即可, $oPDF->SetFont('dejavusans', '', 8, '', true); 改为 $oPDF->SetFont('DroidSansFallback', '', 8, '', true);

SublimeText插件Pandoc导出PDF中文报错或者中文不显示解决方法

按照如下自定义配置(主要是指定latex的字体[仅限本机字体]) { "user": { // "pandoc-path":"C:\\Program Files (x86)\\Pandoc\\pandoc.exe" , // transformations "transformations": { // @see http://johnmacfarlane.net/pandoc/README.html#creating-a-p

纯前端导出pdf文件

纯前端js导出pdf,已经用于生产环境. 工具: 1.html2canvas,一种让html转换为图片的工具. 2.pdfmake或者jspdf ,一种生成.编辑pdf,并且导出pdf的工具. pdfmake:http://pdfmake.org 优点: 能够支持中文,具有部分自适应布局功能,需要vfs_fonts.js字体文件. 缺点:支持中文的vfs_fonts.js文件一般较大. 如果图片过大,不会自动分页. 生成vfs_fonts.js文件的方法如图,npm install pdfmak

JS导出PDF插件(支持中文、图片使用路径)

原文:JS导出PDF插件(支持中文.图片使用路径) 在WEB上想做一个导出PDF的功能,发现jsPDF比较多人推荐,遗憾的是不支持中文,最后找到pdfmake,很好地解决了此问题.它的效果可以先到http://pdfmake.org/playground.html查看.在使用过程中,还发现图片的插入是相对繁琐的一件事. 针对这些问题,本文的主要内容可分为三部分: pdfmake的基本使用方法: 如何解决中文问题; 如何通过指定图片地址插入图片. pdfmake的基本使用方法 1.包含以下两个文件

R: 导入 csv 文件,导出到csv文件,;绘图后导出为图片、pdf等

################################################### 问题:导入 csv 文件 如何从csv文件中导入数据,?参数怎么设置?常用参数模板是啥? 解决方案: yuan <- read.csv(file = "C:/Users/Administrator/Desktop/test1.csv",header = TRUE,sep = ",",dec = ".", stringsAsFactors

java根据模板文件导出pdf

原文:https://www.cnblogs.com/wangpeng00700/p/8418594.html 在网上看了一些Java生成pdf文件的,写的有点乱,有的不支持写入中文字体,有的不支持模板,有的只是随便把数据放里面生成文件,完全不考虑数据怎样放置的以及以后的维护性,想想还是自己总结一个完全版的导出pdf的工具类吧,总结一下网上的方法,加上自己的完善. 本次完善综合特点: 一对一,点对点的给对应的地方写值,比如模板里面放了个name标识,在程序里把"张三"赋给name,那么

Mac下使用JupyterNotebook导出pdf文件

通过Latex输出中文PDF 安装latex可以选择完整安装,和安装latex-base版本.完整安装仅安装包就有约2.7G,latex-base是一个基础包,安装包100M左右,安装需要400M不到的空间.我们目前仅需要通过latex输出PDF文档,所以不需要安装完整安装.使用latex-base就可以了.但是latex-base安装后,不能直接使用,还需要一些额外操作才能正常支持中文格式. Latex在 Mac OS中 叫MacTex. 安装BasicTex 从官网下载BaisicTex安装

利用iText导出pdf文件

一.导出pdf工具类:  package pdf; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import j