如何使用itextsharp将一个pdf附加到其他pdf文件

时间:2012-04-07 18:45:27

标签: pdf append

如何使用itextsharp在不使用itextsharp创建新pdf的情况下将页面附加到另一个pdf文件中的一个pdf文件。我将元数据附加到一个pdf,所以我只想添加其他pdf页面,以便第一个pdf元数据保持原样。

此致 Himvj

2 个答案:

答案 0 :(得分:3)

假设您有2个pdf文件:file1.pdffile2.pdf要连接并将生成的pdf保存到file1.pdf(通过替换其内容),您可以尝试以下操作:< / p>

using (var output = new MemoryStream())
{
    var document = new Document();
    var writer = new PdfCopy(document, output);
    document.Open();
    foreach (var file in new[] { "file1.pdf", "file2.pdf" })
    {
        var reader = new PdfReader(file);
        int n = reader.NumberOfPages;
        PdfImportedPage page;
        for (int p = 1; p <= n; p++)
        {
            page = writer.GetImportedPage(reader, p);
            writer.AddPage(page);
        }
    }
    document.Close();
    File.WriteAllBytes("file1.pdf", output.ToArray());
}

答案 1 :(得分:0)

您可以尝试将整个文档添加元数据

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

                    //1:  Create the MemoryStream for the destination document.
                    using (MemoryStream ms = new MemoryStream())
                    {
                        //2:  Create the PdfCopyFields object.
                        PdfCopyFields copy = new PdfCopyFields(ms);
                        // - Set the security and other settings for the destination file.
                        //copy.Writer.SetEncryption(PdfWriter.STRENGTH128BITS, null, "1234", PdfWriter.AllowPrinting | PdfWriter.AllowCopy | PdfWriter.AllowFillIn);
                        copy.Writer.ViewerPreferences = PdfWriter.PageModeUseOutlines;
                        // - Create an arraylist to hold bookmarks for later use.
                        ArrayList outlines = new ArrayList();
                        int pageOffset = 0;
                        int f = 0;
                        //3:  Import the documents specified in args[1], args[2], etc...
                        while (f < sourceFiles.Length)
                        {
                            //  Grab the file from args[] and open it with PdfReader.
                            string file = sourceFiles[f];
                            PdfReader reader = new PdfReader(file);

                            //  Import the pages from the current file.
                            copy.AddDocument(reader);
                            //  Create an ArrayList of bookmarks in the file being imported.
                            //      ArrayList bookmarkLst = SimpleBookmark.GetBookmark(reader);
                            //  Shift the pages to accomidate any pages that were imported before the current document.
                            //     SimpleBookmark.ShiftPageNumbers(bookmarkLst, pageOffset, null);
                            //  Fill the outlines ArrayList with each bookmark as a HashTable.
                            //      foreach (Hashtable ht in bookmarkLst)
                            //      {
                            //         outlines.Add(ht);
                            //     }
                            //  Set the page offset to the last page imported.
                            //copy.Writer.SetPageSize(rec);
                            pageOffset += reader.NumberOfPages;
                            f++;
                        }
                        //4:  Put the outlines from all documents under a new "Root" outline and 
                        //    set them for destination document 
                        //   copy.Writer.Outlines = GetBookmarks("Root", ((Hashtable)outlines[0])["Page"], outlines);
                        //5:  Close the PdfCopyFields object.
                        copy.Close();
                        //6:  Save the MemoryStream to a file.
                        MemoryStreamToFile(ms, destinationFile);


                    }
                }
                catch (System.Exception e)
                {
                    System.Console.Error.WriteLine(e.Message);
                    System.Console.Error.WriteLine(e.StackTrace);
                    System.Console.ReadLine();
                }
            }
            public static void MemoryStreamToFile(MemoryStream MS, string FileName)
            {
                using (FileStream fs = new FileStream(@FileName, FileMode.Create))
                {
                    byte[] data = MS.ToArray();
                    fs.Write(data, 0, data.Length);
                    fs.Close();
                }
            }