要求:将多个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 = ; j <= iPageNum; j++)
{
document.NewPage();
newPage = writer.GetImportedPage(reader, j);
cb.AddTemplate(newPage, , );
}
}
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”。请改用适用的接口。右击属性,有个东西改一下,具体有点忘了。

PDF合并的更多相关文章

  1. C#实现多个PDF合并及去除文字水印功能

    实现pdf合并就是使用Spire.Pdf.dll类库的方法,但是注意需要同时引用Spire.Pdf.dll和Spire.License.dll两个类库,且两个类库的版本要一致 String[] fil ...

  2. PHP使用FPDF pdf添加水印中文乱码问题 pdf合并版本问题

    ---恢复内容开始--- require_once('../fpdf/fpdf.php');require_once('../fpdi/fpdi.php'); 使用此插件 pdf 合并 并添加水印 期 ...

  3. pdftk - handy tool for manipulating PDF 免费的pdf合并工具

    Linux pdf合并的工具 安装工具 $ sudo apt-get install pdftk 使用 $ pdftk *.pdf cat output all-in-one.pdf &&am ...

  4. 极客工具,PDF合并工具

    前言 这两天一番花两天的时间,重新用python和python图形化开发工具tkinter,完善了下PDF合并小工具,终于可以发布了. 工具目前基本功能已经完善,后期如果有反馈可以修复部分bug或完善 ...

  5. PDF文档转换为图片、图片转成PDF 及PDF合并

    简介 功能:PDF文档按每页转换成一张图片,一张图片转换成一张PDF 并将多张PDF合成一个多页的PDF文档. 经历:在各个网站上搜索始终出现各种问题,尤其是遇到引用的版本问题尤其头疼,不是不能适用当 ...

  6. Aspose.Pdf合并图片到PDF文件

    将图片和PDF文件合成为新的PDF文件,可以先将图片转换为PDF文件, 然后合成PDF即可, 将图片转换成PDF文件有如下方法: Aspose.Pdf.Document Aspose.Pdf.Gene ...

  7. Aspose.Pdf合并PDF文件

    使用Aspose.Pdf类库,有很多种方法可以合并PDF文件,这里简单介绍小生见到的几种: Doucment.Pages.Add PdfFileEditor.Append PdfFileEditor. ...

  8. wkhtmltopdf cpdf HTML转pdf 及pdf合并

    将 html 转为 pdf :wkhtmltopdf wkhtmltopdf 是一个使用 webkit 网页渲染引擎开发的用来将 html 转成 pdf 的工具,可以跟多种脚本语言进行集成来转换文档. ...

  9. 【转】利用Python将多个PDF合并为一个

    本脚本用来合并pdf文件,输出的pdf文件按输入的pdf文件名生成书签 使用示例如下: python pdfmerge.py -p "D:\pdf-files" -o " ...

随机推荐

  1. [Oracle EBS APIs]import Flow routing and DJ routing using BOM_RTG_PUB.PROCESS_RTG APIs

    DJ routing --BOM模块的工艺路线 Flow routing -- Flow Manufacturing 模块使用的工艺路线,导入 Flow routing时先导入Line Operati ...

  2. flex数据交互方式 转

    Flex数据交互方法- httpservice, webservice, RemoteObject, socket. 写在前面: 使用SOAP Web Service同Flex交互有很多好处,但是它很 ...

  3. poj 3207 2-SAT问题

    思路:将线段按开始点的升序排序,对线段尾节点进行判断,若存在交叉,那么这两条线段就不能同时在内或同时在外.这样将每条线段在内和在外看成两个状态i和i',i表示线段在内,i'表示线段在外.假使线段i和线 ...

  4. 关于Merge的整理--AndroidScreenSlidePager开源库中用到的

    在做AndroidScreenSlidePager开源库练习demo的时候,发现布局文件使用的是<merge>标签而不是<FrameLayout>标签.作者给出的说法是:Cir ...

  5. .NET 认识

  6. Git CMD - status: Show the working tree status

    命令参数 git status [<options>…​] [--] [<pathspec>…​] 命令格式 --short, -s 短格式输出. -- long 长格式输出, ...

  7. AIDL实现Android IPC

    1.AIDL文本解释 在软件工程中,接口定义语言(IDL)已经成为通用术语,是用来描述软件组件接口的特定语言.在Android中,该IDL被称为Android接口定义语言(AIDL),它是纯文本文件, ...

  8. Android 中的图像特效(Matrix)

    以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,现在在Android中有一个Matrix类,它的中文意思就是矩阵.Matrix主要是用于图像的缩放.平移.旋转.扭曲等操作.图像处理,主要用到的 ...

  9. struts2-权限拦截器、日志拦截器、execAndWait(进度条)拦截器配置

    1.权限拦截器 package login; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.Serv ...

  10. ssh git设置命令行

    #列出key ls -al ~/.ssh #生成key ssh-keygen -t rsa -b -C "your_email@example.com" #判断ssh-agent可 ...