2019年3月5日 星期二

C# 利用iTextSharp合併pdf

using iTextSharp.text;
using iTextSharp.text.pdf;


/// <summary>
/// 合併PDF
/// </summary>
/// <param name="fileList">被合併的文件集合</param>
/// <param name="outMergeFile">合併文件路徑</param>
/// <param name="iFlag">0:A4直印, 1:A4橫印</param>
public void MergePDFFiles(string[] fileList, string outMergeFile, int iFlag)
{
    PdfReader reader;
    Document document = new Document();

    if (iFlag != 0)
    {
        document = new Document(iTextSharp.text.PageSize.A4.Rotate());
    }

    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outMergeFile, FileMode.Create));

    document.Open();

    PdfContentByte cb = writer.DirectContent;
    PdfImportedPage newPage;

    for (int i = 0; i < fileList.Length; i++)
    {
        if (fileList[i] != null && fileList[i] != string.Empty)
        {
            reader = new PdfReader(fileList[i]);
            int iPageNum = reader.NumberOfPages;

            for (int j = 1; j <= iPageNum; j++)
            {
                document.NewPage();
                newPage = writer.GetImportedPage(reader, j);
                cb.AddTemplate(newPage, 0, 0);
            }
        }
    }

    document.Close();
}



/// <summary>
/// 合併PDF 自動判斷方向
/// </summary>
/// <param name="fileList">被合併的文件集合</param>
/// <param name="outMergeFile">合併文件路徑</param>
public void MergePDFFiles(string[] fileList, string outMergeFile)
{
    int f = 0;

    PdfReader reader = new PdfReader(fileList[f]);
    Document document = new Document();

    document = new Document(reader.GetPageSizeWithRotation(1));

    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outMergeFile, FileMode.Create));

    document.Open();

    PdfContentByte cb = writer.DirectContent;
    PdfImportedPage newPage;
    int rotation = 0;

    for (int i = 0; i < fileList.Length; i++)
    {
        if (fileList[i] != null)
        {
            reader = new PdfReader(fileList[i]);
            int iPageNum = reader.NumberOfPages;

            for (int j = 1; j <= iPageNum; j++)
            {
                document.NewPage();
                newPage = writer.GetImportedPage(reader, j);
                rotation = reader.GetPageRotation(j);
                if (rotation == 90 || rotation == 270)
                {
                    cb.AddTemplate(newPage, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                }
                else
                {
                    cb.AddTemplate(newPage, 1f, 0, 0, 1f, 0, 0);
                }
            }
        }
    }
}

1 則留言:

  1. 感謝您的分享,合併PDF 自動判斷方向 少了 document.Close();

    回覆刪除