Попытка объединения PDF-файлов с помощью iTextSharp v4 вызывает исключение - PullRequest
1 голос
/ 28 июня 2011

Я пробовал пару разных примеров кода, и все они выдают одно и то же исключение:

System.InvalidCastException was unhandled by user code
  Message=Unable to cast object of type 'iTextSharp.text.pdf.PdfArray' to type 'iTextSharp.text.pdf.PRIndirectReference'.
  Source=itextsharp
  StackTrace:
       at iTextSharp.text.pdf.PdfCopy.CopyObject(PdfObject inp)
       at iTextSharp.text.pdf.PdfCopy.CopyDictionary(PdfDictionary inp)
       at iTextSharp.text.pdf.PdfCopy.AddPage(PdfImportedPage iPage)

В этом примере используется PdfCopy.Я также попробовал это с PdfWriter:

    public MemoryStream Merge(MemoryStream outputStream,List<PdfReader> documents)
    {
        if (outputStream == null || !outputStream.CanWrite)
            throw new Exception("OutputStream is null or you can't write to it.");

        Document newDocument = null;
        try
        {
            newDocument = new Document(documents[0].GetPageSizeWithRotation(1));
            PdfCopy pdfWriter = new PdfCopy(newDocument, outputStream);

            newDocument.Open();
            //PdfContentByte pdfContentByte = pdfWriter.DirectContent;

            foreach (PdfReader pdfReader in documents)
            {
                for (int page = 1; page <= pdfReader.NumberOfPages; page++)
                {
                    //newDocument.NewPage();
                    PdfImportedPage importedPage = pdfWriter.GetImportedPage(pdfReader, page);
                    pdfWriter.AddPage(importedPage);
                }
            }
        }
        finally
        {
            outputStream.Flush();
            if (newDocument != null)
                newDocument.Close();
            outputStream.Close();
        }
        return outputStream;
    }

С этим кодом, исключение происходит в AddPage.На PdfWriter это происходит при закрытии документа.Я действительно не очень хорошо знаю внутренности iTextSharp ...

1 Ответ

0 голосов
/ 29 июня 2011

Я использую это: мой код

...