博客文章

使用iTextSharp进行pdf文件合并

作者: andy.      时间: 2016-08-31 20:09:14

因为项目的需要,要做一个按照模板生成word文档提供下载的功能,后期需要提供word合并的功能。但是word的合并可能会导致很多格式问题,我们就想,如果将word转成pdf,再做pdf合并不是很简单吗?使用了iTextSharp于是有了下面的东西....

先贴代码吧。我对这个东西也不是太熟悉,属于那种copy copy拿来用的程度。代码:

public static void MergePDF(List<string> fileList, string outMergeFile)
{
    List<PdfReader> readers = new List<PdfReader>();
    //PdfReader reader;
    iTextSharp.text.Rectangle rec = new iTextSharp.text.Rectangle(595, 842);
    Document document = new Document(rec);
    FileStream fileStream = new FileStream(outMergeFile, FileMode.Create);
    PdfWriter writer = PdfWriter.GetInstance(document, fileStream);
    document.Open();
    PdfContentByte cb = writer.DirectContent;
    PdfImportedPage newPage;
    for (int i = 0; i < fileList.Count; i++)
    {
        PdfReader reader = new PdfReader(fileList[i]);
        readers.Add(reader);
        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();
    for (int i = 0; i < fileList.Count; i++)
        readers[i].Close();
    writer.Close();
    fileStream.Close();
}

相对于网上的代码,有一段:

for (int i = 0; i < fileList.Count; i++)
        readers[i].Close();

因为不关闭的话,单个pdf文件会一直被进程占用,是有问题的。还有,之所以再document.Close()后面,因为如果在其前面的话,在执行document.Close()的时候会提示文件已被关闭。具体原因我也不是太清楚,没看过源码。

再一段代码吧,不然看着好单薄。word转pdf:

public void ConvertWordPDF(object filename, object savefilename)
{
    Object Nothing = System.Reflection.Missing.Value;
    wordApp = new Microsoft.Office.Interop.Word.Application();
    Document doc = wordApp.Documents.Open(ref filename, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
    object filefarmat = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;
    doc.SaveAs(ref savefilename, ref filefarmat, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
    doc.Close(ref Nothing, ref Nothing, ref Nothing);
    wordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
    doc = null;
    wordApp = null;
}

com组件,另存为就行了。好了,文章完成。

itextsharp-all-5.5.9:itextsharp-all-5.5.9.zip

下载如果很慢很慢的话,csdn下载连接:itextsharp-all-5.5.9






最近感觉身体被掏空了。