使用下面显示的代码,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( );
}
更新:已解决。代码如下所示。
答案 0 :(得分:0)
您可以从以下帖子中获取一些想法: code to download PDF file in C#
它使用了一个额外的标题:content-disposition。
答案 1 :(得分:0)
问题是文件内容是以文本形式读取的,它需要是Byte []。
更新的代码:
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( );
}