Как загрузить PDF-документ из Google Docs и отобразить его в браузере? - PullRequest
0 голосов
/ 05 марта 2012

При использовании кода, показанного ниже, документ PDF не является допустимым форматом PDF. Браузер отображает сообщение « Не удалось загрузить документ PDF. ». Если я сохраняю загрузку в файл и открываю ее в Adobe Reader, появляется сообщение « При открытии этой ошибки произошла ошибка. документ."

Я могу открыть и загрузить документ вручную в Документах Google. Итак, это действительный документ PDF.

Я использую C #, ASP.NET и Google.Documents.

        // get the document to download
        Feed<Document> feed = request.GetEverything( );
        foreach( Document entry in feed.Entries )
        {
            if( entry.AtomEntry.AlternateUri.ToString( ) == DocumentAltUri )
            {
                document = entry;
                break;
            }
        }

        using( Stream stream = request.Download( document, Document.DownloadType.pdf ) )
        {
            StreamReader reader = new StreamReader( stream );
            string content = reader.ReadToEnd( );
            reader.Close( );

            Response.ClearContent( );
            Response.ContentType = "application/pdf";
            Response.AddHeader( "Content-Length", content.Length.ToString( ) );
            Response.AddHeader( "Content-Disposition", "inline;" );
            Response.Write( content );
            Response.Flush( );
            Response.Close( );
            Response.End( );
        }

ОБНОВЛЕНИЕ: Решено. код, показанный ниже.

Ответы [ 2 ]

0 голосов
/ 07 марта 2012

Проблема заключалась в том, что содержимое файла читалось как текст, оно должно быть Байт [].

Обновленный код:

        using( Stream stream = request.Download( document, type ) )
        {
            long length = 0;
            Response.ClearContent( );
            Response.ContentType = contentType;

            int nBytes = 2048;
            int count = 0;
            Byte[] arr = new Byte[nBytes];
            do
            {
                length += count = stream.Read( arr, 0, nBytes );
                Response.OutputStream.Write( arr, 0, count );
            } while( count > 0 );

            Response.AddHeader( "Content-Disposition", "inline;filename=" + filename + fileext);
            Response.AddHeader( "Content-Length", length.ToString( ) );
            Response.Flush( );
            Response.Close( );
            Response.End( );
        }
0 голосов
/ 05 марта 2012

Вы можете взять некоторые идеи из следующего поста: код для загрузки PDF-файла в C #

Используется дополнительный заголовок: content-disposition.

...