将不同的 PDF 文件合并到一个 PDF 页面上,创建样本小册子

问题描述 投票:0回答:1
using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace CutAndPaste
{
    class Program
    {
        public static readonly string SRC = Environment.CurrentDirectory + "\\pdfs\\2.pdf";
        public static readonly string SRC2 = Environment.CurrentDirectory + "\\pdfs\\3.pdf";
        public static readonly string DEST = Environment.CurrentDirectory + "\\output.pdf";

        static void Main(string[] args)
        {
            MergePDFs(DEST, SRC, SRC2);
            Console.WriteLine("PDF'ler başarıyla birleştirildi.");
        }

        static void MergePDFs(string destPath, params string[] sourcePaths)
        {
            using (FileStream fs = new FileStream(destPath, FileMode.Create, FileAccess.Write, FileShare.None))
            using (Document doc = new Document())
            using (PdfWriter writer = PdfWriter.GetInstance(doc, fs))
            {
                doc.Open();
                PdfContentByte cb = writer.DirectContent;

                foreach (string sourcePath in sourcePaths)
                {
                    using (PdfReader reader = new PdfReader(sourcePath))
                    {
                        for (int pageNumber = 1; pageNumber <= reader.NumberOfPages; pageNumber++)
                        {
                            doc.NewPage();
                            PdfImportedPage page = writer.GetImportedPage(reader, pageNumber);
                            cb.AddTemplate(page, 0, 0);
                        }
                    }
                }
            }
        }
    }
}

我使用以下代码收到此错误:“System.ObjectDisposeException:无法访问已关闭的文件。”您认为这种做法正确吗?我非常感谢您在此事上的帮助

c# pdf merge itext
1个回答
0
投票

嗨,请尝试下面的代码

internal string PDFMerger(Dictionary<string, string> dic)
    {
        var outuptpath = Server.MapPath("~/" + DateTime.Now.ToString("yyyyMMdd") + "/_Final.pdf");
         
        Document doc = new Document();
        PdfCopy writer = new PdfCopy(doc, new FileStream(outuptpath, FileMode.Create));
        if (writer == null)
        {
            return "";
        }
        doc.Open();
        foreach (var filename in dict)
        {
            var fname = filename.Value;
            PdfReader reader = new PdfReader(fname);
            reader.ConsolidateNamedDestinations();
            for (int i = 1; i <= reader.NumberOfPages; i++)
            {
                PdfImportedPage page = writer.GetImportedPage(reader, i);
                writer.AddPage(page);
            }
            reader.Close();
        }
        writer.Close();
        doc.Close();
        return outuptpath;
    }

这里我发送字典中的文件名和路径。

请检查是否相同。

© www.soinside.com 2019 - 2024. All rights reserved.