0

スーパーバイザー (またはユーザー) が入力する PDF フォームが 1 つあります。
生成された PDF を結合したい。
簡単なマージを行いましたが、最初に複数のファイルを生成してからマージする必要があります。
ユーザーが複数のフォームに入力し、最終的な送信または印刷時に、入力されたすべての PDF を 1 つだけマージする方法はありますか。

4

2 に答える 2

0

このマージ機能を試して、PDFファイルをマージしてください。

public static void Merge(string[] sourceFiles, string destinationFile)
{
    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;
        //Debug.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);
                }
                //Debug.WriteLine("Processed page " + i);
            }
            f++;
            if (f < sourceFiles.Length)
            {
                reader = new PdfReader(sourceFiles[f]);
                // we retrieve the total number of pages
                n = reader.NumberOfPages;
                //Debug.WriteLine("There are " + n + " pages in the original file.");
            }
        }
        // step 5: we close the document
        document.Close();
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

参照:iTextSharpを使用してPDFファイルをマージする

于 2012-11-09T05:52:02.170 に答える
0

上記のコメントで入手したマージ コードに基づいています。これを使用して、http 応答の出力ストリームに書き込みます。byte[] を返しますが、元のコードとこれを使用して作業を完了できます。

public static byte[] MergeFiles(List<byte[]> sourceFiles)
    {
        Document document = new Document();
        MemoryStream output = new MemoryStream();

        try
        {
            // Initialize pdf writer
            PdfWriter writer = PdfWriter.GetInstance(document, output);

            // Open document to write
            document.Open();
            PdfContentByte content = writer.DirectContent;

            // Iterate through all pdf documents
            for (int fileCounter = 0; fileCounter < sourceFiles.Count; fileCounter++)
            {
                // Create pdf reader
                PdfReader reader = new PdfReader(sourceFiles[fileCounter]);
                int numberOfPages = reader.NumberOfPages;

                // Iterate through all pages
                for (int currentPageIndex = 1; currentPageIndex <=
                                   numberOfPages; currentPageIndex++)
                {
                    // Determine page size for the current page
                    document.SetPageSize(
                       reader.GetPageSizeWithRotation(currentPageIndex));

                    // Create page
                    document.NewPage();
                    PdfImportedPage importedPage =
                      writer.GetImportedPage(reader, currentPageIndex);


                    // Determine page orientation
                    int pageOrientation = reader.GetPageRotation(currentPageIndex);
                    if ((pageOrientation == 90) || (pageOrientation == 270))
                    {
                        content.AddTemplate(importedPage, 0, -1f, 1f, 0, 0,
                           reader.GetPageSizeWithRotation(currentPageIndex).Height);
                    }
                    else
                    {
                        content.AddTemplate(importedPage, 1f, 0, 0, 1f, 0, 0);
                    }
                }
            }
        }
        catch (Exception exception)
        {
            throw new Exception("There has an unexpected exception" +
                  " occured during the pdf merging process.", exception);
        }
        finally
        {
            document.Close();
        }
        return output.GetBuffer();
    }
于 2012-11-10T08:07:59.240 に答える