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;
}
}
}