zoukankan      html  css  js  c++  java
  • PDF合并

    要求:将多个table导出到一个PDF里,然后打印。 

    问题分析:要求将四个table放一个PDF打印,四个table的列各不相同,第一个是表头,其他三个是列表,列比表头多很多,如果直接生成一个excel,然后再直接导出会发现有些列在PDF中换行了。 

    原因:因为excle可打印的区域是有限制的,可打印的地方如下方法可见:文件-打印-设置-打印选择区域(如果打印要宽一点,选择A4,横向打印,)这时你点开始(2010版)回到sheet里,发现里面有一条虚线。这个虚线就是excel生成PDF后(相应纸张格式)最多显示的宽。

    解决方法:

    一,为了解决上面所说情况,可以设好四个table对应的excle模板,然后生成四个pdf。

    二,再将四个PDF全并,注意(打印的方向,纸张大小一定要一样)

    合并方法:

    /// <summary>
            /// PDF合并
            /// </summary>
            /// <param name="arrFileList">要合并的PDF名称集</param>
            /// <param name="outMergeFile">合并后的PDF</param>
            public static void MergePDFFiles(List<string> arrFileList, string strOutMergeFile)
            {
                PdfReader reader;
                Document document = new Document();
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(strOutMergeFile, FileMode.Create));  
    document.SetPageSize(PageSize.A4.Rotate()); //如果你的模板是A4的,这里一定要是A4 document.Open(); PdfContentByte cb
    = writer.DirectContent; PdfImportedPage newPage; foreach (string strFileName in arrFileList) { reader = new PdfReader(strFileName); int iPageNum = reader.NumberOfPages; for (int j = 1; j <= iPageNum; j++) { document.NewPage(); newPage = writer.GetImportedPage(reader, j); cb.AddTemplate(newPage, 0, 0); } } document.Close(); }

    调用:

    List<string> arrFileList= new List<string>();
    arrFileList.Add(strFileName);
    MergePDFFiles(arrFileList, strFileName);


    table根据模板生成excel

     Workbook excel = new Workbook();
    string strFilePath = ExcelTemplatePath + strTableName + ".xls";
     //建立excel并打开模板文件
    excel.Open(strFilePath);
    Worksheet sheet = excel.Worksheets["Sheet1"];    控制sheet1
    sheet.Cells.DeleteColumn((int.Parse(c.OrderNo.ToString()) - intDeleteCount));删除指定列
    excel.Save(strFileName, FileFormatType.Default);
     ///转成PDF
     ConvertXlsToPdf(strFileName, strFileNamePdf);

    excel转PDF

    使用这个要引用:Aspose.Cells.dll、Aspose.Pdf.Kit.dll、Interop.Excel.dll、itextsharp.dll 最好用最新的。

    /// 将Xls文件转换为PDF文件
    /// </summary>
    /// <param name="strSourceFile">源文件</param>
    /// <param name="strTargetFile">目标文件</param>
    /// <returns>是否成功</returns>
    public static bool ConvertXlsToPdf(string strSourceFile, string strTargetFile)
    {
        if (File.Exists(strTargetFile))
        {
            File.Delete(strTargetFile);
        }
    
        FileInfo fiPdf = new FileInfo(strTargetFile);
        if (!fiPdf.Directory.Exists)
        {
            fiPdf.Directory.Create();
        }
    
        bool blnResult = false;
    
        #region 微软式导出
        Excel.XlFixedFormatType targetType = Excel.XlFixedFormatType.xlTypePDF;
        object missing = Type.Missing;
        Excel.ApplicationClass application = null;
        Excel.Workbook workBook = null;
        object paramFromPage = Type.Missing;
        object paramToPage = Type.Missing;
        try
        {
            application = new Excel.ApplicationClass();
    
            object target = strTargetFile;
            //object type = targetType;
            System.IO.FileInfo fi = new System.IO.FileInfo(strSourceFile);
    
            workBook = application.Workbooks.Open(fi.FullName, missing, missing, missing, missing, missing,
                    missing, missing, missing, missing, missing, missing, missing, missing, missing);
    
            workBook.ExportAsFixedFormat(targetType, target, Excel.XlFixedFormatQuality.xlQualityStandard, true, false, missing, missing, missing, missing);
            blnResult = true;
        }
        catch (Exception ex)
        {
            blnResult = false;
            throw ex;
        }
        finally
        {
            if (workBook != null)
            {
                workBook.Close(false, missing, missing);
                workBook = null;
            }
            if (application != null)
            {
                application.Quit();
                application = null;
            }
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }
        #endregion
        return blnResult;
    }

     注意:如果报:无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。请改用适用的接口。右击属性,有个东西改一下,具体有点忘了。

  • 相关阅读:
    mysql 学习
    redis 学习
    redis 学习
    [爬虫学习笔记]MemoryCache缓存的用法学习
    [爬虫学习笔记]C#基于ARSoft.Tools.Net的DNS解析模块(半成品)
    [爬虫学习笔记]C# 使用 ScrapySharp 并行下载天涯图片
    一木禾网盘下载分析及批量获取下载地址的实现(下)
    一木禾网盘下载分析及批量获取下载地址的实现(上)
    C# TextBox Ctrl+A全选
    C#激爽特性——扩展方法
  • 原文地址:https://www.cnblogs.com/xbding/p/3785769.html
Copyright © 2011-2022 走看看