получить ошибку в Merge PDF в C # с использованием Itextsharpdll - PullRequest
0 голосов
/ 04 марта 2019

, когда я пытаюсь объединить PDF-файлы в C #, используя itextsharp, я использовал приведенный ниже код. Это работало 2 или 3 раза.Но после этого выходной файл создается с 0 КБ, когда я пытаюсь открыть файл, показывая, что файл используется или уже открыт другим.Пожалуйста, помогите, если что-то пропустил Спасибо в Adavance.

iTextSharp.text.pdf.PdfReader reader = null;
PdfImportedPage page = null;
FileStream stream = null;
Document pdfDoc = null;
try
{
    using(pdfDoc = new Document())
        stream = new FileStream(targetPDF, FileMode.Create);

    {
        using (PdfCopy pdf = new PdfCopy(pdfDoc, stream))
        {
            pdfDoc.Open();
            var files = Directory.GetFiles(sourceDir);

            foreach (string file in files)
            {
                reader = new iTextSharp.text.pdf.PdfReader(file);
                for (int i = 0; i < reader.NumberOfPages; i++)
                {
                    page = pdf.GetImportedPage(reader, i + 1);
                    pdf.AddPage(page);
                }
                pdf.FreeReader(reader);
                reader.Close();
            }
        }
    }
}
catch (Exception ex)
{
    if (reader != null)
    {
        reader.Close();
    }
}

введите описание изображения здесь

1 Ответ

0 голосов
/ 04 марта 2019

Я не знаю, что происходит с вашим кодом, но я могу дать функцию (я использую в своем проекте, работающей на 100%), которая объединяет список файлов

    private bool MergePDFs(IEnumerable<string> fileNames, string targetPdf)
    {
        bool merged = true;
        using (FileStream stream = new FileStream(targetPdf, FileMode.Create))
        {
            Document document = new Document();
            PdfCopy pdf = new PdfCopy(document, stream);
            PdfReader reader = null;
            try
            {
                document.Open();
                foreach (string file in fileNames)
                {
                    System.Threading.Thread.Sleep(1500);
                    reader = new PdfReader(file);
                    pdf.AddDocument(reader);
                    reader.Close();
                }
            }
            catch (Exception)
            {
                merged = false;
                if (reader != null)
                {
                    reader.Close();
                }
            }
            finally
            {
                if (document != null)
                {
                    document.Close();
                }
            }
        }
        return merged;
    }
  • , поэтомудля fileNames: вы даете список своих файлов (создаете список из вашей папки, перечисляя файлы)
  • targetPdf - это имя файла outPut
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...