Printing WinForm with controls using PrintDocument component c# [closed] - winforms

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 9 years ago.
I'm really not interested in having someone else do my job for me, I would really just appreciate a point in the right direction.
I have a couple of Forms that need to be printed. All of them consisting of multiple datagridviews and other controls. Jobcards, manufacturing sheets, stock cutting lists, quotes, etc etc..
I have tried so many possible solutions on the internet. The PrintForm component is practically useless because of poor resolution. I've tried Crystal Report, with some success, I use it to generate and print my quotes and invoices.
'Capturing' the form (Bitmap) ...(witch I guess in my case is a slightly better alternative to printForm) Doesnt cut it ether.
MSDN Printing the Form (Visual C#)
I'm rather demotivated, since this is the very last part of my application before testing.
I really want to understand and learn everything I can about the PrintDocument Component so I can FINALLY solve this problem and gain some VS-printing experience.
I'm about to get in depth with iText-Sharp now as my last resort. so please tell me if it will prove to be fruitless(in my case atleast;) That would be greatly appreciated.
Thank you kind Sir or Lady for your time and possibly your knowledge
Kindest regards
Herman Vercuiel
Quote Form that also generates similarly in Crystal Reports
The forms that I need to print... The amount of Forms vary depending on the type and amount of products ordered.
EDIT:
I'm settling for this at the moment..
How can I make sure this is fitted into one page?
currently a part of the right side of the form is missing.
private void CaptureScreen()
{
Graphics mygraphics = this.CreateGraphics();
Size s = this.Size;
memoryImage = new Bitmap(s.Width, s.Height, mygraphics);
Graphics memoryGraphics = Graphics.FromImage(memoryImage);
IntPtr dc1 = mygraphics.GetHdc();
IntPtr dc2 = memoryGraphics.GetHdc();
BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376);
mygraphics.ReleaseHdc(dc1);
memoryGraphics.ReleaseHdc(dc2);
}

The controls on a form are optimized to be rendered on a low-res raster device (the screen).
The print are optimized to be rendered on a hi-res raster device (the printer).
So, if you render a form to a printer, you may get a very tiny print, or a big print with low res (like the screen).
I'm not an expert of printing... but the only way I can think of printing a form on paper without having the low-res big ugly pixel is to re-render all the form objects: enumerate all the controls on the form, and draw by yourself the controls the way you want, so you can decide exactly how to render them in hi-res. So youcan decide the looks of the border of a button, a combo box, whatever...
Implementing something like this looks like a very big job...
Update
Another, simpler, option may be to use a bitmap to raster converter.
You can grab the screen as a bitmap, pass the bitmap in a raster-to-vector converter, obtain a vecotrialized version of your bitmap, and then you can directly print this vector-based image.
But automated raster-to-vector conversion may works... or may not work.
Your mileage may vary.
Maybe you can try "by-hand" to grab the screen and do a bitmap-to-vector conversion using some free tools, like Inkscape (start Inkskape, import the bitmap, then go in menu Path\Trace Bitmap, and try out the various options (color, BW, smoothing...)).
Then if you have good results, maybe you can find a raster-to bitmap tool to integrate in you application.

Related

Clutter: Perspective, Skew, and Matrices

Is there a way to change the clutter perspective for a given container or widget?
The clutter perspective controls how all the clutter actors on the screen are displayed when rotated, translated, scaled, etc.
What I would really like to do is to change the perspective's origin from the center of the screen to another coordinate.
I have messed with a few of the stage methods. However, I haven't had much luck understanding some of the results, and often I hit some stability issues.
I know there are transformation matrices that do all the logic under the hood, and there are documented ways to change the transform matrices. Honestly, I haven't researched much further and just though I would ask for guidance before spending a lot of time on it.
Which leads me to another question regarding the matrices and transformations. Can one of these matrices be used to skew an actor? Or deform it into a trapezoid, etc? And any idea how to get started on that, ie. what a skew matrix would look like?
Finally, does anyone know why the clip path was deprecated? It seems that would have worked for what I ultimately want to do: draw irregular shaped 2d objects on the screen If I can implement an answer to question 2, then I guess a clip box with a transformation can be used here.
1, I do not know if (or how) one might change the Clutter stage's focal point.
2 A skew or shear transformation matrix is easy enough to construct, and can be implemented in the GJS Clutter functions Clutter.Actor.set_transform(T) and Clutter.Actor.set_child_transform(T) where T is a Clutter.Matrix .
This does present another problem, however, for the current codebase; and this leads to another question. (I guess I should post it somewhere else). But, when a transform is set on a clutter actor (or its children), the rest of the actor's properties are ignored. This has the added effect that the Tweener library cannot be used for animation of these properties.
3 Finally, one can use Cairo to draw irregular shaped objects and paths on a Clutter actor, however, the reactive area for the actor (ie. mouse-enter and -leave events) will still be for the entire actor, not defined by the Cairo path.

How can I reduce the size of the shapes in visio?

The title above is clearly a very basic question. My real question is how can I reduce the size of my shapes (I'm using Crow's Foot Database notion) without the padding messing with the alignment. I'm currently in the process of restructuring a database at my job and so I decided it would be best to have a visual presentation of how it will look like for my boss. This flowchart needs to be printable so all the entities and relations should fit on one page. Here's a what I have so far:
To solve this problem, I can simply use print scaling which is an option located under the file tab under print. Thank you for the quick responses!

Generating Print ready contents with WPF with paper precision

I am new to WPF and c# as a whole. I have experience from programming language like PHP, HTML and Javascript so I was able to cope quickly.
I have a project that is used to print PINs and Serial Number on a card. Let say the card is A4 and on the paper there are 4 rows and 3 columns of printed cards.
My problem is, I dont really know how to generate the dynamic document and the approach to use. Since the content is not that I have to just make it available on the paper before hand, it has to be placed on a particular position on the paper. Inches calculation will strictly be adhered to.
The link below illustrates an explanation of what I am talking about with border exclusive. All I want to generate is the PIN and serial in this way on a specific paper size.
http://ecloudpack.com/grid.png
Dont get me wrong, speaking of flowDocuments, I think I can bring out something but I am faced with the challenge of precision of position on the paper and making sure the pagination is correct and making sure the margin as specified is what is generated.
I have a Monday deadline and I have been trying.
Is there anyone that can help.

Downloaded Panorama background image is cropped to screen size

If I set the Panorama.Background image brush source to a URL of a photo out on the internet, the image is centered and cropped, rather than starting at the left edge and bleeding off the screen to the right, widescreen style.
If I set the source as a local pack URI, its fine.
Smells like a bug.
Anyone got a simple workaround? Microsoft should be equipping us with a working SDK that allows us to create experiences at least as good as the phone's hubs.
Thanks!
UPDATE
The problem appears not to be images on the web, but images that are smaller than the screen size of the phone - all my web-hosted images are quite small for bandwidth reasons.
Taking my original background art 1024x768 and halving its size results in the phone cropping the right edge of the image.
UPDATE 2
Found someone else with the same problem:
http://forums.create.msdn.com/forums/p/78770/615061.aspx
UPDATE 3
http://www.lukepuplett.com/2012/05/windows-phone-panorama-background-image.html
Side-by-side images demonstrate the bug, clearly. I'll throw it over to Cliff on the team in Redmond and see what he thinks.
It's a problem I've found since my earliest days with the phone, and I assumed it'd be quite a well-known issue. So I expected people to quickly say "Oh yeah, that old chestnut, you need to do XYZ."
Thanks for the -3, everyone. Keep up the good work.
Before running around with "IT'S A BUG!" claims, I would do my research.
That being said, you are downloading an image, and most likely using a combo of BitmapImage/ImageBrush. Now, ImageBrush has a Stretch property and that is where you have to look.
The panorama background is intended to be a rich, high quality image.
I would expect what you're seeing ("inconsistent" resizing) if you're using an image smaller than the space you're filling and not specifying how it should be stretched.
If you're claiming a bug, what is the behaviour you're expecting?
Based on your blog post (liked in update 3) it seems you're expecting a different default stretch behaviour for an image when used in the background in a panorama. As a general rule, introducing inconsistencies or conditional defaults is likely to introduce more confusion and work in the long run.

Can I get TextFormattingMode=Display while drawing off-screen (e.g. RenderTargetBitmap)?

I'm drawing certain images in WPF which will be displayed by a game (developed by a third party). I currently produce the images using a RenderTargetBitmap. Unfortunately it seems that this only supports the Ideal text formatting mode, resulting in blurry small fonts. The application is a third-party game and thus there's no way around using images.
Can I tell the RenderTargetBitmap to assume that it's drawing an image destined for one of the current montiors? Is there another way to get WPF to use the Display rendering mode for off-screen drawing?
I understand why this might seem wrong in the theoretical sense, but in practice there are reasons why I think this is not an unreasonable thing to do:
One of the things the Display mode allows is aliased text, which looks better at small sizes than the Ideal rendering, and is completely independent of monitor properties such as gamma.
A screenshot of small Display-mode text rendered in ClearType looks far better on any screen, even those with different gamma, than Ideal-mode text.
Can the WPF rendering engine do this, or do I have to fall back onto GDI? (which has no difficulties with using Aliased or ClearType rendering off-screen)
There is certainly no obvious way of doing this. I guess drawing to images was never a goal of WPF; the fact that it can actually do this fairly well most of the time must be accidental.
It seems that this works now. Could someone else verify? Here's the relevant code:
var textBlock = new TextBlock();
textBlock.Text = "Hello World";
textBlock.FontFamily = new System.Windows.Media.FontFamily("Arial");
textBlock.Background = System.Windows.Media.Brushes.Transparent;
textBlock.Foreground = System.Windows.Media.Brushes.Black;
textBlock.FontSize = 50;
// . Set Formatting Mode Works! Setting the rendering mode doesn't.
System.Windows.Media.TextOptions.SetTextFormattingMode(textBlock, System.Windows.Media.TextFormattingMode.Display);
Edit: Forgot to mention I'm using the .NET 4.5 framework
Edit2: The difference between Display and Ideal is especially noticeable at smaller font sizes.

Resources