Printing in C#/.NET, scaling on a whole page - c#

I am wondering how to do the following ( couldn't get google to help me here ):
I got a .jpg file of about 250px*250px in scale..
I want this image on a DIN-A4 page as often as possible
I need an "overlay" for every image on the page with a unique code ( lets say a unique barcode for example )
How would i start here? I have really no idea which classes or methods to use for this...
Also it'd be interesting to know which "formats" i can create the documents in...
Thanks for any help!

Well, you know how big the image is, and how big the paper is, so it's easy to work out how many you can fit on a page.
Then you'll want to create an instance if the Bitmap class from your jpg, then get a Graphics object from the bitmap, call the Graphics object's DrawString method with your text (plus a font, a brush, and a point). Remember to release the Graphics object or, ideally, wrap it in a using statement.Then, as Henk says, use a PrintDocument to print it - there's an example here of that - and write your images in as required to fill the page using the PrintPageEventArgs' Graphics object.

Related

saving e.graphics into a pdf problems

i did some e.graphics.draw string/image/line, and i managed to print it using print dialog print document and print previw dialog. but i wanted to save it into a pdf using microsoft print to pdf. into a specific folder. without using the file dialog, just one button to save it as pdf.
i dont have an idea what is the next step. so any help is appreciated, btw i searched for more than 10 days, but i couldn't find a way to do this. btw i used itextsharp,and pdf printer. but i couldn't do what i want because i want to save what i did using e.graphics,thanks in advance.
In order to use the Graphics class for drawing, you have to be able to create an instance for the canvas you want to draw on. Can you do that for a PDF using iTextSharp? I don't know as I've never used it but I don't think I've ever seen it done. I think iTextSharp has its own methods for inserting text, images, etc.
The first thing you need to do is determine whether iTextSharp does/can expose a Graphics instance. If it does not then you can either give up this idea and use the functionality that iTextSharp does provide, or you can use a Graphics object to draw on an Image and then insert that into your PDF using whatever functionality iTextSharp provides for that.
Assuming you're going ahead, the first thing you should do is write a method that takes a Graphics object as an argument and uses it to draw, e.g.
private void Draw(Graphics g)
{
// Call g.DrawString, etc, here.
}
You can then call that method anywhere you have a Graphics object to perform that same drawing. If you are currently using e.Graphics to draw in the PrintPage event handler of a PrintDocument, you would move that code to the method above and change e.Graphics to g, then call the method and pass e.Graphics instead. You can then call the same method elsewhere with different Graphics objects, e.g. create a Bitmap of the desired dimensions, call Graphics.FromImage and then pass the result to that method to do the same drawing on that Bitmap.

Improving clarity of images in PictureBox C#

I have Panel on windows form containing labels for displaying information and 2 PictureBox controls. One for Company logo & other for captured photo. When i print them either on Printer or just save in PDF format, both images looking very blur. I want to improve quality of images. So they will appear clear even after zoom.
Any suggestion.
You can set this property of the Graphics object.
// g is type of Graphics.
g.InterpolationMode = InterpolationMode.High;
I don't know which technique you are using for printing but if you are using print form it is not good for decent picture or text. Therefore when you send form/PictureBox to the print object it would lose quality.The Solution is to use PrintDocument.
Share your code for more help.
Your printer has better resolution than your monitor. That bitmap won't work. You will have to recreate the print items directly on the e.Graphics of the PrintPageEventArgs.
Other work around is the technique that guy explain in his article.
http://www.dahuatu.com/3vy2K5z5mr.html

How to print GDI+ objects with correct dimensions?

I need to develop an application to print labels previously created with an editor. Each labels has some graphic objects, like images, barcodes, texts,... and when I use the GDI+ drawing methods to print in a PrintDocument, the result is that the object dimensions are always smaller than what I expect. What unit of measure I should use for the objects? What is the best practice for printing objects with GDI?
Any help would be pleasant.
Thanks in advance.
Your question is not very detailed and lacks code example of what you have so far, but anyways. It seems like you have issues setting up your print graphics. You would have to define how to map your graphics to e.g. 300dpi print document.
If you would just google for your question about how to print something with GDI+ you'll find tons of examples and tips like this
http://www.codeproject.com/Articles/2648/Printing-using-GDI-a-few-tips
:edit
if you have millimeter as unit, you can tell your graphics object to use it by defining
gr.PageUnit = GraphicsUnit.Millimeter;
crystal report would be your solution.

How to create an image with multiple tiles in the background?

I would like to know how I can create one image from many. I would like to create a tile in my windows phone application like in this image (specifically, the People tile):
(source: addictivetips.com)
I have nine pictures, and I would create an image, that I will add like tile to background. Does anybody know how can I create an image that looks like the one in that picture?
I have very little experience in this space, but have you considered creating a control that simply displays up to 9 pictures side by side in a grid like that? You then can bind each image independently & change them out however you want. This article touches on how to bind phontos in WP7 nicely:
http://msdn.microsoft.com/en-us/library/hh286418(v=vs.92).aspx
If you're talking about assembling an actual graphic image like a jpeg or bitmap, you'll need to look at the Image Class, Bitmap Class, and Graphics Class. Essentially you'll need to implement the following steps:
Load the relevant images with From method in Image, typically Image.FromFile.
Determine how many rows and columns you'll be using.
Calculate the total width and height for your layout using the widths and heights of the loaded images with appropriate padding added.
Create a new Bitmap of the appropriate size with the correct background color and iamge format.
Have variables for the current drawing location (x & y).
Have variables for the current row and column in your layout.
In a loop, Create your Graphics object.
Use Graphics.DrawImage to add your loaded image to the layout bitmap.
Increment your drawing row and or column as appropriate.
Calculate your new drawing location.
Repeat until done.
One of the options is to use WriteableBitmapEx
Also you can probably find an answer to your question here: How can I merge two images into one?

Resizing an image after loading it from the database using asp.net, C#

I have a user-uploaded image pulled from the database that I am resizing smaller to display on a web page that I intend to print. I thought about saving a smaller version when the user uploads it, but since the design of this document hasn't been finalized yet, I was looking for something more dynamic. Also, this document only needs to be printed up once, while the image uploaded is displayed at various places in the app numerous times.
Using javascript to resize it while keeping its proportions, it was printing fine for a while. After adding a margin for styling, the printer started printing the image at its full size. I'm assuming it's the margin. It looks fine on screen but pushes everything off the page on paper.
This led me to look into resizing it on the server, in the C# code, but we use user images uploaded to the database, and I can't seem to find the right time or place in the page life cycle to access and change the width and height. I've tried the various methods on the web using Bitmaps, but they all want a file, when I am using a FileDownloader page as the image url.
Perhaps I'm looking in the wrong place entirely and need to go back to the client. Advice and help is appreciated.
As long as your FileDownloader page returns the proper resized image, it shouldn't matter that you're not point to an actual image.
I'd something like this in your FileDownloader page (pseudo code):
using (Image img = LoadImageFromDatabase())
{
using (Image resized = ResizeImage(img))
{
Response.Clear();
// Set proper headers
using (MemoryStream ms = new MemoryStream())
{
resized.Save(ms); // maybe the function isn't called Save, can't remember a 100%
ms.Seek(0); // Can't remember if this is necessary
Response.BinaryWrite(ms);
}
}
}
Like I mentioned it's highly pseudo code, but it should be straight forward with a Visual Studio open, I just haven't access to it right now, and it's been quite a while since I last used this (since I'm stored the resized images like most other in this question recommends - I do so too, however I realize this is not an option for you)
When you are going to have to resize an image to known constraints, and there's the possibility of having to do that multiple times, I'd always advocate doing the resize once (on upload) and storing the result. Of course, you don't say that you need to retain the original image size, but if you do, then you just have to store the image twice - once original size and once at the resized dimensions.
Once you've done that, you can worry about defining your print layout based on the known dimensions of the resized image, and not have to faff about resizing for each use.
I would suggest converting on upload and possibly saving both images in case you want to let the user click through to the full image. Using this model you only do the conversion once and can render either size image. The GetThumbnailImage() method on the Image class will do what you desire, something like this:
String imageFile = uploadedFileName;
Image baseImage = Image.FromFile(imageFile);
Image thumbImage = baseImage.GetThumbnailImage(300,300,..., ...);
SaveMyImage(baseImage);
SaveMyImage(thumbImage);
Be sure to check the documentation for the parameters to GetThumbnailImage() to verify scaling issues and callback handling.
Could you implement such a process:
User sends an image
Image is opened by a function/routine/script, while the user waits
Image is resized on the fly and saved in the correct location which returns a code for success
User receives a message depending of the return value of the script.
EDIT:
I agree with most of the replies you got here.
If the pictures are stored in a database you need to first make thumbmails for all pictures and put them in the same database, then you need to implement a process to create the thumbmails on the fly when adding new pictures.
Disclaimer: I'm suggesting the open-source library I designed for this purpose. I'm definitely biased, but 4 years and thousands of happy users justify my bias :)
You shouldn't be resizing images inside an .ASPX page, or serving them either. Images should be handled in separate requests by a HttpModule so responsiveness doesn't suffer.
If you have some kind of ID in SQL for each image, you can use the SqlReader VirtualPathProvider to make it accessible via a URL, like /sqlimages/id
Combine that with this free, open-source dynamic image resizing module, and you're set.
You'll simply reference images like this: http://localhost/sqlimages/id?width=300&height=200 from your HTML, and you may not even have to write a line of C#.
If you write your own solution, read these 28 pitfalls you should avoid, so you don't end up crashing the server.
Hope this helps!

Categories

Resources