Слияние pdf с pdfsharp: исключение в pdfDocument.close()

Я хотел бы создать функцию с PDFSharp, чтобы объединить некоторые PDF-файлы.

Вот мой код

public class PDF_Merge
{
    static string [] strTabPdfFiles;


    public static string SetPdfToMerge(string strPdfFilesInput)
    {
        strTabPdfFiles = strPdfFilesInput.Split(';');
        return "O";
    }

    public static string MergeToPdf(string strPdfFilesOutput)
    {
        try
        {
            PdfDocument objDocumentFinal = new PdfDocument(strPdfFilesOutput);

            foreach (string strDoc in strTabPdfFiles)
            {
                PdfDocument objDocument = PdfReader.Open(strDoc, PdfDocumentOpenMode.Import);

                foreach (PdfPage page in objDocument.Pages)
                {
                    objDocumentFinal.AddPage(page);
                }
                objDocument.Close();----------> Exception : File cannot be modified
            }
            objDocumentFinal.Close();

            objDocumentFinal.Save(strPdfFilesOutput);
        }
        catch (Exception ex)
        {
            return ex.Message;
        }

        return "O";
    }

}

Моя проблема в том, что при вызове objDocument.Close() у меня есть исключение: «Документ не может быть изменен».

Кто-нибудь может помочь мне в этом?

Большое спасибо за эту библиотеку,

С наилучшими пожеланиями,

Никсеус


person Walter Fabio Simoni    schedule 05.12.2012    source источник


Ответы (2)


Файл PDF, открытый с помощью PdfDocumentOpenMode.Import, предназначен только для импорта и не может быть изменен.
Вместо этого попробуйте использовать PdfDocumentOpenMode.Modify.

Или посмотрите пример объединения документов:
http://www.pdfsharp.net/wiki/ConcatenateDocuments-sample.ashx

person I liked the old Stack Overflow    schedule 05.12.2012
comment
Я не хочу изменять какой-либо PDF-файл! Если вы посмотрите на мой код, вы увидите, что я создаю новый PDF. Итак, режим импорта должен быть в порядке, не так ли? - person Walter Fabio Simoni; 05.12.2012
comment
Извините, я пропустил это. Но образец работает. Так что, возможно, использование for вместо foreach имеет значение - или что-то еще. Я не могу расследовать это сегодня, но хотел бы услышать от вас, если вы что-нибудь узнаете. - person I liked the old Stack Overflow; 05.12.2012
comment
Можете ли вы когда-нибудь добавить это в сообщение об ошибке. Сейчас это совершенно непонятно. Даже CanSave возвращает true, но вы все равно получаете ошибку. - person Simon_Weaver; 21.04.2015

Я знаю, что опаздываю на вечеринку, но сегодня я столкнулся с этой проблемой.

Метод close пытается сохранить документ, поэтому требование для .Modify. В этом случае вам вообще не нужен objDocument.Close(). При желании вы можете (и, вероятно, должны?) вызвать objDocument.Dispose().

person SMB    schedule 12.03.2013
comment
На вечеринку тоже опоздал. Но это действительно плохое кодирование команды Pdf-Sharp. Закрыть или удалить любой из них должен действовать как все остальное и должен фактически освободить файл из ОС. Сразу после вызова Close я тоже получаю исключение и вызов dispose. Я все еще не могу удалить старый файл. - person Lawrence Thurman; 23.04.2014