合并在C#.NET使用iTextSharp的多个PDF [英] Merging multiple PDFs using iTextSharp in c#.net

查看:473
本文介绍了合并在C#.NET使用iTextSharp的多个PDF的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗯,我试图合并多个PDF一个。

我没有给出错误时编译。我想先合并文档,但出了什么问题,因为我与表工作。

这是在 asp.net code-背后

 如果(Button.Equals(previewWord)){        字符串eventTemplate =使用Server.Mappath(/ ERAS /徽章/模板/ EventTemp+事件名称+名为.doc);        字符串单preVIEW =使用Server.Mappath(/ ERAS /徽章/模板/ previewSingle+事件名称+名为.doc);        PDF格式的字符串preVIEW =使用Server.Mappath(/ ERAS /徽章/模板/ PDF previewSingle+事件名称+.PDF);        字符串previewPDFs =使用Server.Mappath(/ ERAS /徽章/模板/ previewPDFs+事件名称+.PDF);        如果(System.IO.File.Exists((字符串)eventTemplate))
        {            如果(vulGegevensIn ==真)
            {
              //这将创建一个Worddocument,并从数据库名称等填充
                CreateWordDocument(vulGegevensIn,eventTemplate,单preVIEW,FALSE);
                //这节省了单preview.doc为PDF @param地方PDF preVIEW的
                CreatePDF(单preVIEW,PDF preVIEW);
                //试图合并
                的String [] previewsSmall =新的String [1];
                previewsSmall [0] = PDF preVIEW;
                PDFMergenITextSharp.MergeFiles(previewPDFs,previewsSmall);
            }
            //此处合并PDF文件...........................;
            //这里
            //这里没有//
            // ...
    }}

这是PDFMergenITextSharpClass

公共静态类PDFMergenITextSharp
{

 公共静态无效MergeFiles(字符串destinationFile,字符串[]来源档案)
{    尝试
    {
        INT F = 0;
        //我们创建了一定的文档阅读器
        PdfReader读卡器=新PdfReader(来源档案[F]);
        //我们检索的总页数
        INT N = reader.NumberOfPages;
        //Console.WriteLine(\"There是+ N +,在原始文件页面);
        //第1步:创建一个文件对象的
        文档的文档=新的文件(reader.GetPageSizeWithRotation(1));
        //第2步:我们创建侦听到文档中的作家
        PdfWriter作家= PdfWriter.GetInstance(文件,新的FileStream(destinationFile,FileMode.Create));
        //第3步:我们打开文档
        document.Open();
        PdfContentByte CB = writer.DirectContent;
        PdfImportedPage页面;
        INT转动;
        //第4步:我们添加的内容
        而(F< sourceFiles.Length)
        {
            INT I = 0;
            而(I< N)
            {
                我++;
                document.SetPageSize(reader.GetPageSizeWithRotation(I));
                document.NewPage();
                页= writer.GetImportedPage(读者,我);
                旋转= reader.GetPageRotation(ⅰ);
                如果(旋转== || 90旋转== 270)
                {
                    cb.AddTemplate(页面,0,-1f,1F,0,0,reader.GetPageSizeWithRotation(ⅰ).Height);
                }
                其他
                {
                    cb.AddTemplate(页面,1F,0,0,1F,0,0);
                }
                //Console.WriteLine(\"Processed网页+ I);
            }
            ˚F++;
            如果(F< sourceFiles.Length)
            {
                读者=新PdfReader(来源档案[F]);
                //我们检索的总页数
                N = reader.NumberOfPages;
                //Console.WriteLine(\"There是+ N +,在原始文件页面);
            }
        }
        //第5步:我们关闭文档
        document.Close();
    }
    赶上(例外五)
    {
        字符串STROB = e.Message;
    }
}公共静态INT CountPageNo(字符串strFileName)
{
    //我们创建了一定的文档阅读器
    PdfReader读卡器=新PdfReader(strFileName);
    //我们检索的总页数
    返回reader.NumberOfPages;
}
}


解决方案

我找到了答案:

取而代之的是第2种方法,更文件添加到输入文件的第一个数组。

 公共静态无效CombineMultiplePDFs(字符串[]文件名,串不过outFile)
{
    //第1步:创建一个文件对象的
    文档的文档=新的文件();    //第2步:我们创建侦听到文档中的作家
    PdfCopy作家=新PdfCopy(文件,新的FileStream(不过outFile,FileMode.Create));
    如果(作家== NULL)
    {
        返回;
    }    //第3步:我们打开文档
    document.Open();    的foreach(在文件名字符串文件名)
    {
        //我们创建了一定的文档阅读器
        PdfReader读卡器=新PdfReader(文件名);
        reader.ConsolidateNamedDestinations();        //第4步:我们添加的内容
        的for(int i = 1; I< = reader.NumberOfPages;我++)
        {
            PdfImportedPage页= writer.GetImportedPage(读者,我);
            writer.AddPage(页);
        }        PRAcroForm形式= reader.AcroForm;
        如果(表格!= NULL)
        {
            writer.CopyAcroForm(读卡器);
        }        reader.Close();
    }    //第5步:我们关闭文档和作家
    writer.Close();
    document.Close();
}

Well i'm trying to merge multiple PDFs in to one.

I gives no errors while compiling. I tried to merge the docs first but that went wrong because I'm working with tables.

This is the asp.net code-behind

if (Button.Equals("PreviewWord")) {

        String eventTemplate = Server.MapPath("/ERAS/Badges/Template/EventTemp" + EventName + ".doc");

        String SinglePreview = Server.MapPath("/ERAS/Badges/Template/PreviewSingle" + EventName + ".doc");

        String PDFPreview = Server.MapPath("/ERAS/Badges/Template/PDFPreviewSingle" + EventName + ".pdf");

        String previewPDFs = Server.MapPath("/ERAS/Badges/Template/PreviewPDFs" + EventName + ".pdf");

        if (System.IO.File.Exists((String)eventTemplate))
        {

            if (vulGegevensIn == true)
            {
              //This creates a Worddocument and fills in names etc from database
                CreateWordDocument(vulGegevensIn, eventTemplate, SinglePreview, false);
                //This saves the SinglePreview.doc as a PDF @param place of PDFPreview
                CreatePDF(SinglePreview, PDFPreview);


                //Trying to merge
                String[] previewsSmall=new String[1];
                previewsSmall[0] = PDFPreview;
                PDFMergenITextSharp.MergeFiles(previewPDFs, previewsSmall);
            }


            // merge PDFs here...........................;
            //here
            //no here//
            //...


    } }

This is the PDFMergenITextSharpClass

public static class PDFMergenITextSharp {

public static void MergeFiles(string destinationFile, string[] sourceFiles)
{

    try
    {
        int f = 0;
        // we create a reader for a certain document
        PdfReader reader = new PdfReader(sourceFiles[f]);
        // we retrieve the total number of pages
        int n = reader.NumberOfPages;
        //Console.WriteLine("There are " + n + " pages in the original file.");
        // step 1: creation of a document-object
        Document document = new Document(reader.GetPageSizeWithRotation(1));
        // step 2: we create a writer that listens to the document
        PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create));
        // step 3: we open the document
        document.Open();
        PdfContentByte cb = writer.DirectContent;
        PdfImportedPage page;
        int rotation;
        // step 4: we add content
        while (f < sourceFiles.Length)
        {
            int i = 0;
            while (i < n)
            {
                i++;
                document.SetPageSize(reader.GetPageSizeWithRotation(i));
                document.NewPage();
                page = writer.GetImportedPage(reader, i);
                rotation = reader.GetPageRotation(i);
                if (rotation == 90 || rotation == 270)
                {
                    cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                }
                else
                {
                    cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                }
                //Console.WriteLine("Processed page " + i);
            }
            f++;
            if (f < sourceFiles.Length)
            {
                reader = new PdfReader(sourceFiles[f]);
                // we retrieve the total number of pages
                n = reader.NumberOfPages;
                //Console.WriteLine("There are " + n + " pages in the original file.");
            }
        }
        // step 5: we close the document
        document.Close();
    }
    catch (Exception e)
    {
        string strOb = e.Message;
    }
}

public static int CountPageNo(string strFileName)
{
    // we create a reader for a certain document
    PdfReader reader = new PdfReader(strFileName);
    // we retrieve the total number of pages
    return reader.NumberOfPages;
}
}

解决方案

I found the answer:

Instead of the 2nd Method, add more files to the first array of input files.

public static void CombineMultiplePDFs(string[] fileNames, string outFile)
{
    // step 1: creation of a document-object
    Document document = new Document();

    // step 2: we create a writer that listens to the document
    PdfCopy writer = new PdfCopy(document, new FileStream(outFile, FileMode.Create));
    if (writer == null)
    {
        return;
    }

    // step 3: we open the document
    document.Open();

    foreach (string fileName in fileNames)
    {
        // we create a reader for a certain document
        PdfReader reader = new PdfReader(fileName);
        reader.ConsolidateNamedDestinations();

        // step 4: we add content
        for (int i = 1; i <= reader.NumberOfPages; i++)
        {                
            PdfImportedPage page = writer.GetImportedPage(reader, i);
            writer.AddPage(page);
        }

        PRAcroForm form = reader.AcroForm;
        if (form != null)
        {
            writer.CopyAcroForm(reader);
        }

        reader.Close();
    }

    // step 5: we close the document and writer
    writer.Close();
    document.Close();
}

这篇关于合并在C#.NET使用iTextSharp的多个PDF的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆