dvr2013 Ответов: 1

Подпись заголовка PDF не найдена - действительно запутался в этом


Итак, я попробовал два разных фрагмента кода для преобразования документа в pdf, и я получаю ту же ошибку `подпись заголовка PDF не найдена`, это мой код, который у меня есть:

private void Word2PDF()
        {
            //Create a new Microsoft Word application object
            Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();

            //Adding dummy value because c# doesn't have optional arguments
            object oMissing = System.Reflection.Missing.Value;

            //Getting list of word files in specified directory
            DirectoryInfo dirInfo = new DirectoryInfo("C:\\TestFilestore\\");
            FileInfo[] wordFiles = dirInfo.GetFiles("*.doc");
            word.Visible = false;
            word.ScreenUpdating = false;

            foreach (FileInfo wordFile in wordFiles)
            {
                //Cast as object for word open method
                Object filename = (Object)wordFile.FullName;

                Microsoft.Office.Interop.Word.Document doc = word.Documents.Open(ref filename, ref oMissing,
                                                    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                                    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                                    ref oMissing, ref oMissing, ref oMissing, ref oMissing);
                doc.Activate();

                object outputFileName = wordFile.FullName.Replace(".doc", ".pdf");
                object fileFormat = WdSaveFormat.wdFormatPDF;

                //Save document into pdf format
                doc.SaveAs(ref outputFileName,
                    ref fileFormat, ref oMissing, ref oMissing,
                    ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                    ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                    ref oMissing, ref oMissing, ref oMissing, ref oMissing);

                //close the word document, but leave the word application open.
                //doc has to be cast to type_document so that it will find the correct close method.
                object saveChanges = WdSaveOptions.wdDoNotSaveChanges;
                ((_Document)doc).Close(ref saveChanges, ref oMissing, ref oMissing);
                doc = null;
            }

            //word has to be case to type_application so that it will find the correct quit method.
            ((_Application)word).Quit(ref oMissing, ref oMissing, ref oMissing);
            word = null;

        }


И вот тут она ломается:
static public void CopyPages(string source, string dest)
        {
            var reader = new iTextSharp.text.pdf.PdfReader(source);
            using (FileStream fs = new FileStream(dest, FileMode.Create, FileAccess.Write, FileShare.None))
            {

                iTextSharp.text.Document doc = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1));
                {
                    //Use a PdfCopy to duplicate each page
                    iTextSharp.text.pdf.PdfCopy copy = new iTextSharp.text.pdf.PdfCopy(doc, fs);
                    {
                        doc.Open();
                        copy.SetLinearPageMode();
                        for (int i = 1; i <= reader.NumberOfPages; i++)
                        {
                            copy.AddPage(copy.GetImportedPage(reader, i));
                        }
                        //Reorder pages
                        //copy.ReorderPages(new int[] { 2, 1 });
                        doc.Close();
                    }
                }
            }
        }


Это та линия, которую он ломает:
var reader = new iTextSharp.text.pdf.PdfReader(source);


Любая помощь будет велика... мольбы :) Спасибо!

syed2109

см. https://stackoverflow.com/a/12363773/2089963

1 Ответов

Рейтинг:
2

VICK

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

Я использую IPDF Sharp с тех пор давно и никогда не сталкивался с таким типом проблемы, но когда сегодня я попытался объединить несколько файлов через один и тот же код, то столкнулся с этой ошибкой,

Решение оказалось довольно простым.

PDF file was corrupt which I was trying to pick from the directory to get merge.

даже вышеприведенное решение кажется ребяческим. но иногда крошечных вещей и крошечных проблем достаточно, чтобы покачать головами и расстроить разработчиков.


Так что я надеюсь , что когда-нибудь это кому-нибудь поможет.

:)


CHill60

Возможно, это была старая нить, но она все еще оставалась без ответа ... и вы правы ... иногда именно глупые вещи застают нас врасплох

VICK

Спасибо CHill60. :)

Sumit Rastogi SRA

Я получаю ту же проблему -"подпись заголовка pdf не найдена" .Но я уверен, что тот pdf-файл, который я использую, не поврежден." Пожалуйста, кто-нибудь может помочь мне в этом вопросе.

VICK

Вы пробовали отлаживать свой код и нашли строку кода,на которой появляется исключение???
Если вы используете IPDF sharp и получаете исключение, когда ваш код пытается выбрать шаблон, то вам следует проверить PDF-файл шаблона, открыв его. Возможно, он был поврежден и, следовательно, вызвал эту проблему.Так что замена его будет решением вашей проблемы.

Member 11316500

Я также использую ItextSharp и даже получаю ту же ошибку в строке инициализации PdfReader -

использование (Stream pdfStream = [HttpPostedFile from File upload control].Входной поток)
{
pdfStream.Позиция = 0;
используя (iTextSharp.текст.формат PDF.PdfReader pdfReader = новый iTextSharp.текст.формат PDF.PdfReader(pdfStream))
{
}
}

Здесь pdfStream - это потоковый объект, созданный из входного потока элемента управления FileUpload.

Тот же код отлично работает в консольном приложении, когда я читаю данные из объекта FileStream, как показано ниже.

using (Stream pdfStream = new FileStream(pData.Files[0], FileMode. Open))
{
iTextSharp.текст.формат PDF.PdfReader pdfReader = новый iTextSharp.текст.формат PDF.PdfReader(pdfStream);
}

На самом деле я не знаю, является ли чтение из posted file InputStream проблемой по сравнению с FileStream или нет (что никоим образом не может быть преобразовано из InputStream postedfile). Я действительно схожу с ума...!!
PDF-файл не поврежден, так как тот же файл очень хорошо обрабатывается в консольном приложении с кодом, показанным выше во-вторых.

Member 11578362

Это не решение, вы только что нашли причину. Я решил бы сначала проверить PDF-файл, чтобы убедиться, что он поврежден, а затем позвонить в эту строку.

ВАР читатель = новый iTextSharp.текст.формат PDF.PdfReader(источник);