【C#】A4のPDF 2枚をA3に結合する(iText使用)

Sponsored Links

iTextを使用したPDFからテキストを抽出する方法はこちら

A4の2枚のPDFをA3のPDFに結合する。
iTextSharp4をNugetから取得する。
PDFファイルをMemoryStreamに変換し、「Merge2A4ToA3」ファンクションへ送る。
結合したPDFのMemoryStreamを、ファイルに保存するときは、「File.WriteAllBytes」を使用する。

using iTextSharp.text;
using iTextSharp.text.pdf;
using System;
using System.IO;

namespace PDFMerge
{
    class Program
    {
        static void Main(string[] args)
        {
            MemoryStream finalStream = new MemoryStream();
            PdfCopyFields copy = new PdfCopyFields(finalStream);
            PdfReader pdf = new PdfReader(@"C:\Input\TestInput.pdf");
            copy.AddDocument(pdf);
            copy.AddDocument(pdf);
            copy.Close();
            File.WriteAllBytes(@"C:\OUTPUT\Test.pdf", Merge2A4ToA3(finalStream).ToArray());
        }

        static private MemoryStream Merge2A4ToA3(MemoryStream inputStream)
        {
            MemoryStream outputStream = new MemoryStream();

            var doc = new Document(PageSize.A3.Rotate(), 0, 0, 0, 0);
            var size = PageSize.A3.Rotate();
            var reader = new PdfReader(inputStream.ToArray());
            var writer = PdfWriter.GetInstance(doc, outputStream);
            doc.Open();
            var cb = writer.DirectContent;
            PdfImportedPage page;
            int totalPages = reader.NumberOfPages;
            for (int i = 0; i < (int)Math.Ceiling((double)(totalPages / 2)); i++)
            {
                doc.NewPage();
                page = writer.GetImportedPage(reader, (i * 2) + 1);
                cb.AddTemplate(page, 0, 0);
                if (((i * 2) + 2) == totalPages + 1) continue;
                page = writer.GetImportedPage(reader, (i * 2) + 2);
                cb.AddTemplate(page, (int)(size.Width / 2), 0);
            }
            doc.Close();
            return outputStream;
        }
    }
}

IT
Sponsored Links
Sponsored Links
Sponsored Links
ようさんチョットでぶ
Copied title and URL
Bitnami