PDFsharp - moved to http://forum.pdfsharp.net/ Forum Index PDFsharp - moved to http://forum.pdfsharp.net/
Please visit the new PDFsharp forum at http://forum.pdfsharp.net/
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

New user, help creating PDF of JPG images from FileStream

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    PDFsharp - moved to http://forum.pdfsharp.net/ Forum Index -> Support - moved to http://forum.pdfsharp.net/
View previous topic :: View next topic  
Author Message
edmicman



Joined: 04 Mar 2008
Posts: 8

PostPosted: Tue Mar 04, 2008 3:43 pm    Post subject: New user, help creating PDF of JPG images from FileStream Reply with quote

I'm using ASP.NET 2.0, writing in C#. I have a virtual directory in IIS mapped to a share that has scanned images. The format on these is that a single entry in our database may contain multiple scanned images, with the filename like filename-1.jpg, filename-2.jpg, etc. Only "filename" is stored in our db.

I was hoping I could get PDFSharp to work so that rather than display any images as img links on my page, I could merge all appropriate images into a single PDF that is presented to the user. I thought I had it based on the sample code, but I keep running into problems, either with my code locking up the file access, or it just hangs on me, or gives a blank screen with nothing. I've tried debugging through it but don't seem to be getting anywhere. I'll post my code - hopefully I'm just doing something silly and someone can point out how I should be doing this? Thanks!

Code:
//// Create new PDF document
                    PdfDocument document = new PdfDocument();
                    document.Info.CreationDate = DateTime.Now;
                    document.Info.Title = "Letter";
                    document.Info.Author = "My Company Name";
                    document.Info.Subject = "Server time: " + DateTime.Now.ToShortTimeString();

                    for (int i = 1; ; i++)
                    {
                        FullFilename = ServerImagePath + "\\" + filename + "-" + i.ToString() + ".jpg";
                        if (File.Exists(FullFilename))
                        {
                            try
                            {
                                // Create new page
                                PdfPage page = document.AddPage();

                                FileStream fs = new FileStream(FullFilename, FileMode.Open, FileAccess.Read);

                                document.Save(fs, false);
                                Response.Clear();
                                Response.ContentType = "application/pdf";
                                Response.AddHeader("content-length", fs.Length.ToString());
                                //Response.BinaryWrite(fs.ToArray());
                                BinaryReader br = new BinaryReader(fs);
                                for (long l = 0; l < fs.Length; l++)
                                {
                                    Response.OutputStream.WriteByte(br.ReadByte());
                                }

                                fs.Close();
                               
                            }
                            catch (Exception ex)
                            {
                                Response.Flush();
                                Response.End();
                                break;
                            }
                        }
                        else
                            break;
Back to top
View user's profile Send private message
edmicman



Joined: 04 Mar 2008
Posts: 8

PostPosted: Wed Mar 05, 2008 3:14 pm    Post subject: Reply with quote

An update, I'm at least getting a PDF now, but it's saying it's corrupted. My updated code from what I posted above:

Code:
try
                        {
                            document.Info.CreationDate = DateTime.Now;
                            document.Info.Title = "";
                            document.Info.Author = "";
                            document.Info.Subject = "Server time: " + DateTime.Now.ToShortTimeString();

                            FileStream fs = new FileStream(FullFilename, FileMode.Open);

                            // Create new page
                            PdfPage page = document.AddPage();

                            //Write PDF
                            document.Save(fs, false);
                            Response.Clear();
                            Response.ClearContent();
                            Response.ClearHeaders();
                            Response.ContentType = "application/pdf";
                            Response.AddHeader("content-length", fs.Length.ToString());
                           
                            BinaryReader br = new BinaryReader(fs);
                            Byte[] dataBytes = br.ReadBytes((int)(fs.Length - 1));
                            Response.BinaryWrite(dataBytes);
                           

                            fs.Close();
                            Response.Flush();
                        }
                        catch (Exception ex)
                        {
                            //Handle this better!
                            Response.Write(ex.Message.ToString());
                            Response.Flush();
                            Response.Close();
                            Response.End();
                            break;
                        }
                        Response.Flush();
                        Response.Close();
                        Response.End();


This is giving me a PDF, but it's saying "not a PDF or corrupted". What am I doing wrong? Thanks!
Back to top
View user's profile Send private message
edmicman



Joined: 04 Mar 2008
Posts: 8

PostPosted: Wed Mar 05, 2008 8:38 pm    Post subject: Reply with quote

Arrrgh, I'm getting closer. This gets me my jpg image into the PDF, but it's showing up severely shrunk down. It also appears to be replicated three times - so the end result is I have my PDF, with the image in it, but it's very distorted. Here's the code I've got that creates this:

Code:
document.Info.CreationDate = DateTime.Now;
                    document.Info.Title = "";
                    document.Info.Author = "";
                    document.Info.Subject = "Server time: " + DateTime.Now.ToShortTimeString();

                    int i = 1;
                    FullFilename = ServerImagePath + "\\" + filename + "-" + i.ToString() + ".jpg";
MemoryStream ms = new MemoryStream();
                       
                        //// Create new PDF page
                        PdfPage page = document.AddPage();
                        XImage image = XImage.FromFile(FullFilename);
                       
                        page.Width = image.Width;
                        page.Height = image.Height;
                        XGraphics gfx = XGraphics.FromPdfPage(page);
                        gfx.DrawImage(image, 0, 0);
                        gfx.Dispose();
                        image.Dispose();
                        page.Close();
                        //Send PDF to browser
                        document.Save(ms, false);
                        Response.Clear();
                        Response.ContentType = "application/pdf";
                        Response.AddHeader("content-length", ms.Length.ToString());
                        Response.AppendHeader("content-disposition", string.Format("attachment;filename=output.pdf"));
                        Response.BinaryWrite(ms.ToArray());
                       
                        Response.Flush();
                        ms.Close();


I tried this code from another post:


Help!
Code:
//page.Width = XUnit.FromInch(image.Width / image.HorizontalResolution);
                        //page.Height = XUnit.FromInch(image.Height / image.VerticalResolution);


thinking that would help the proportion problem, but that just made the page the size of the shrunk image. And it still has the repeating problem.

The jpegs I'm working with are scanned documents in grayscale. Does that affect anything?
Back to top
View user's profile Send private message
edmicman



Joined: 04 Mar 2008
Posts: 8

PostPosted: Wed Mar 05, 2008 10:10 pm    Post subject: I got it! Almost..... Reply with quote

Aha! I've got it now looping through the jpg images (after changing the PdfImage.cs file to fix the grayscale jpg problem), loading them to PDFs, and stretching the JPG to fill the letter-sized PDF:

Code:
document.Info.CreationDate = DateTime.Now;
                    document.Info.Title = "";
                    document.Info.Author = "";
                    document.Info.Subject = "Server time: " + DateTime.Now.ToShortTimeString();

                    int i = 1;
                    FullFilename = ServerImagePath + "\\" + filename + "-" + i.ToString() + ".jpg";
                   
                    //Create OUTBOUND stream for the PDF to write to
                    MemoryStream ms = new MemoryStream();

                    while (File.Exists(FullFilename))
                    {
                        try
                        {
                           
                            // Create new PDF page
                            PdfPage page = document.AddPage();

                            XImage image = XImage.FromFile(FullFilename);
                            //page.Width = XUnit.FromInch(image.Width / image.HorizontalResolution);
                            //page.Height = XUnit.FromInch(image.Height / image.VerticalResolution);
                            //page.Width = image.Width;
                            //page.Height = image.Height;

                            XGraphics gfx = XGraphics.FromPdfPage(page);
                            gfx.DrawImage(image, 0, 0, image.Width, image.Height);
                            gfx.Dispose();
                            image.Dispose();
                            page.Close();
                            //Send PDF to browser
                           
                           
                        }
                        catch (Exception ex)
                        {
                            //Handle this better!
                            Response.Write(ex.Message.ToString());
                            Response.Flush();
                            Response.Close();
                            Response.End();
                            break;
                        }
                        finally
                        {
                           
                        }
                        i++;
                        FullFilename = ServerImagePath + "\\" + filename + "-" + i.ToString() + ".jpg";
                    }

                    document.Save(ms, false);
                    Response.Clear();
                    Response.ContentType = "application/pdf";
                    Response.AddHeader("content-length", ms.Length.ToString());
                    Response.AppendHeader("content-disposition", string.Format("attachment;filename=output.pdf"));
                    Response.BinaryWrite(ms.ToArray());
                    Response.Flush();
                    Response.Close();
                    Response.End();
                    ms.Close();


Now I'm noticing that stretching the jpg to fill the PDF page loses a lot of quality. These are grayscale jpg scans, on letter sized paper. But their DPI is 200. Viewing the jpg images straight in the browser looks a lot better than the images written to pdf, but I believe that is the same result as if I had printed the jpg images to pdf or to a laser printer anyway.

So, is there any suggested ways to improve quality of images added to pdf documents? Just a higher resolution? Are there any tricks using the built in graphics libraries to improve quality?
Back to top
View user's profile Send private message
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    PDFsharp - moved to http://forum.pdfsharp.net/ Forum Index -> Support - moved to http://forum.pdfsharp.net/ All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © phpBB Group. Hosted by phpBB.BizHat.com


Start Your Own YouTube Clone

Free Web Hosting | Free Forum Hosting | FlashWebHost.com | Image Hosting | Photo Gallery | FreeMarriage.com

Powered by PhpBBweb.com, setup your forum now!
For Support, visit Forums.BizHat.com