2016-08-17 36 views
0

我需要使用Aspose将BMP呈现为PDF并下载它。ASP.NET下载带嵌入式BMP的Aspose PDF

下载的PDF已损坏,Adobe无法打开它。保存到文件PDF是好的,并打开。任何人都知道为什么从下载的PDF是损坏的?

enter image description here

protected void ASPxButton1_OnClick(object sender, EventArgs e) 
    { 

     WebsiteToImage websiteToImage = new WebsiteToImage(HttpContext.Current.Request.Url.AbsoluteUri, @"C:\Temp\Test.jpg"); 
     var generate = websiteToImage.Generate(); 
     // Create a MemoryStream object from image Byte array 
     MemoryStream ms = new MemoryStream(); 
     websiteToImage.Bitmap.Save(ms, ImageFormat.Jpeg); 

     // create a PDF object 
     Pdf pdf = new Pdf(); 
     // create a section and add it to pdf document 
     Aspose.Pdf.Generator.Section MainSection = pdf.Sections.Add(); 
     //Add the radio form field to the paragraphs collection of the section 
     // create an image object 
     Aspose.Pdf.Generator.Image sample_image = new Aspose.Pdf.Generator.Image(); 
     // specify the image file path information 
     //sample_image.ImageInfo.File = @"d:/pdftest/untitled.bmp"; 
     sample_image.ImageInfo.ImageStream = ms; 
     // specify the image file type 
     sample_image.ImageInfo.ImageFileType = Aspose.Pdf.Generator.ImageFileType.Bmp; 
     // specify the image width information equal to page width 
     sample_image.ImageInfo.FixWidth = MainSection.PageInfo.PageWidth - MainSection.PageInfo.Margin.Left - MainSection.PageInfo.Margin.Right; 
     // specify the image Height information equal to page Height 
     sample_image.ImageInfo.FixWidth = MainSection.PageInfo.PageHeight - MainSection.PageInfo.Margin.Top - MainSection.PageInfo.Margin.Bottom; 

     // create bitmap image object to load image information 
     Bitmap myimage = websiteToImage.Bitmap; 
     // check if the width of the image file is greater than Page width or not 
     if (myimage.Width > MainSection.PageInfo.PageWidth) 
      // if the Image width is greater than page width, then set the page orientation to Landscape 
      MainSection.IsLandscape = true; 
     else 
      // if the Image width is less than page width, then set the page orientation to Portrait 
      MainSection.IsLandscape = false; 

     // add image to paragraphs collection of section 
     MainSection.Paragraphs.Add(sample_image); 
     // save the resultant PDF 
     pdf.Save(@"C:\Temp\Test.pdf"); 
     pdf.Save(ms); 
     byte[] bytes = ms.GetBuffer(); 
     HttpContext.Current.Response.Clear(); 
     HttpContext.Current.Response.ContentType = "application/pdf"; 
     HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + Operator.Emplid + "Gudiance.pdf"); 
     HttpContext.Current.Response.BinaryWrite(bytes); 
     HttpContext.Current.Response.End(); 
     ms.Close(); 

回答

0

看来,您使用的是传统Aspose.Pdf.generator方法,所以为了完成你的要求,我们建议你,请尝试使用Aspose.Pdf的新文档对象模型命名空间。请尝试使用以下代码段。

// create a PDF object 
Document pdf = new Document(); 
// create a section and add it to pdf document 
Aspose.Pdf.Page MainSection = pdf.Pages.Add(); 
//Add the radio form field to the paragraphs collection of the section 
// create an image object 
Aspose.Pdf.Image sample_image = new Aspose.Pdf.Image(); 
// specify the image file path information 
sample_image.File = @"C:\pdftest\OutOfMemoryDemo\OutOfMemoryDemo\Sample.bmp"; 
// specify the image width information equal to page width 
sample_image.FixWidth = MainSection.PageInfo.Width - MainSection.PageInfo.Margin.Left - MainSection.PageInfo.Margin.Right; 
// specify the image Height information equal to page Height 
sample_image.FixWidth = MainSection.PageInfo.Height - MainSection.PageInfo.Margin.Top - MainSection.PageInfo.Margin.Bottom; 

// create bitmap image object to load image information 
System.Drawing.Bitmap myimage = new System.Drawing.Bitmap(@"C:\pdftest\OutOfMemoryDemo\OutOfMemoryDemo\Sample.bmp"); 
// check if the width of the image file is greater than Page width or not 
if (myimage.Width > MainSection.PageInfo.Width) 
    // if the Image width is greater than page width, then set the page orientation to Landscape 
    MainSection.PageInfo.IsLandscape = true; 
else 
    // if the Image width is less than page width, then set the page orientation to Portrait 
    MainSection.PageInfo.IsLandscape = false; 

// add image to paragraphs collection of section 
MainSection.Paragraphs.Add(sample_image); 
MemoryStream stream = new MemoryStream(); 

// save the resultant PDF 
pdf.Save(stream); 

StreamReader reader = new System.IO.StreamReader(Request.InputStream); 
String Data = reader.ReadToEnd(); 
this.Title = Data; 
Response.Clear(); 
Response.ClearHeaders(); 
Response.ClearContent(); 
Response.Buffer = true; 
Response.Charset = "UTF-8"; 
Response.AddHeader("Accept-Header", stream.Length.ToString()); 
Response.AddHeader("Content-Length", stream.Length.ToString()); 
Response.AddHeader("Expires", "0″"); 
Response.AddHeader("Pragma", "cache"); 
Response.AddHeader("Cache-Control", "private"); 
Response.AddHeader("content-disposition", String.Format("inline;filename={0}", "article" + "docId"+ ".pdf")); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("Accept-Ranges", "bytes"); 
Response.BinaryWrite(stream.ToArray()); 
Response.Flush(); 
Response.End(); 

PS,我的名字是Nayyer和我在的Aspose开发布道者。