|
Printer settings are not persisted to the printer (unless you set them on the driver itself using the printer properties). They are passed to the print subsystem along with the document. Since Acrobat controls it's own printing, it will send the settings it wants regardless of what you think you set. You could always call printWithDialog if this still fits your requirements. Otherwise, you might consider checking out the Adobe Acrobat SDK, although it might only be available to Adobe Developers Network (or something like that - maybe that was just Photoshop and Illustrator, though). That might contain additional information about controlling the printing from a client.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
isn't it possible to convert pdf file to PostScript format and then print it? Can this solve my problem?
|
|
|
|
|
And how do you propose to do that? You'll still need something that knows how to print and/or convert PDF files. If your printer supports PostScript, you can print to a file but you'll still need a program to read and print the PDF. That's even if your printer supports PostScript (most HP's do, but they prefer PCL for some stupid reason). And to my knowledge, the printing subsystem that .NET encapsulates (at least in the base class libraries) doesn't support spooling RAW documents (since you'd be sending the PostScript, you don't want the driver to convert it to PostScript). You'd need to find a completely different printing library that can spool RAW (and since most printing libraries are to help you accomplish printing graphics and text, I doubt you're going to find one). You'll be forced to P/Invoke calls on the print server. But that still doesn't solve your problem since you still need something that can read and print PDF files.
If this isn't an automated program, just use printWithDialog on the Acrobat OCX. If this is an automated program, take a look at the Acrobat solutions on Adobe[^]'s web site. They do have a product that can monitor directories and convert to PDF (Distiller, part of the Acrobat application). IIRC, there's also one that can monitor a directory and print the files using options you specify.
If the Acrobat OCX doesn't work for you, there are others, some even written in managed code, such as TallPDF (or something like that - they advertise on CodeProject and supposedly are pretty good).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Is anyone aware of a way to turn on the windows text-smoothing for one application (not globally from the control panel) I thought there might be an attribute or something in the SetStyle method but I haven't found anything.
thanks,
JR
|
|
|
|
|
FYI, this OS setting changes the algorithm used to display fonts in the system. It is not an application-specific thing, but a change in the algorithm that affects the entire font subsystem.
If you want text smoothing or ClearType support in your application (like Word, Adobe Acrobat, et. al. have), you'll have to add support for it yourself. SetStyle won't because that controls window styles and is analogous SetWindowLong from the Platform SDK. When creating the underlying window handle, this corresponds to CreateParams that is returned and will be used in the call to CreateWindowEx .
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
So then how would I go about adding it myself?
|
|
|
|
|
See the Platform SDK for information on GDI and GDI+. From what I've seen, the .NET base class library doesn't support such a featre. As far as ClearType goes, I'm not sure were you can find resources but the best place to start would probably be http://www.microsoft.com/typography/[^].
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi,
I am developping a small game in C# with DirectDraw 9.0 for Managed Code. My problem is that I can't debug my application using breakpoints because de DirectX environnement seems to locked any display of any other application except the Taskbar, the start menu and the Task Manager.
Anybody have an idea for how to use breakpoints with DirectDraw ??
Thanks!
Jean Bédard
|
|
|
|
|
I haven't done it myself but in my computer I've installed DirextX9.0 SDK and it has extra ytility for debuging and you have to install it first. Have you done that?
Mazy
You're face to face,
With the man who sold the world - David Bowie
|
|
|
|
|
First, install the Debug build of the DirectX runtime, available in the Developer Runtime\Managed DirectX\Debug directory of your DirectX SDK directory (default for Summer 2003 Update is C:\DX90SDK I believe).
Make sure you also installed the VS.NET tools from the SDK, which adds a special debugger. After this, you should have no problems.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I have no problems using breakpoints in windowed mode, I'm not sure how one would go about settin up multiple monitors as that would be ideal.
leppie::AllocCPArticle("Zee blog"); Seen on my Campus BBS: Linux is free...coz no-one wants to pay for it.
|
|
|
|
|
I need to load DLLs only if they are in a directory.
Is there a simple way to do this?
|
|
|
|
|
I did it he simple way, with System.IO.Directory.GetFiles builds a string array with all files in the dir, and GetFiles takes a "file mask" as parameter, like "*.dll", so you only get DLL's, then looping through that array do Assembly.LoadFrom
|
|
|
|
|
What is the correct way to use a a single quote in a access query. I try to load strings from one Tabel in access to another one, but some of the strings has single quotes in them. When I use a where clause or try to update with those strings in I get an error.
I tried to replace the single quotes with \', like this.
[string].Replace("'", "\'");
It didn't work, then i tried to replace it with the unicode value,
[string].Replace("'","\u2019");
I can't think of much else I can do.
Can anyone help me please.
thnxs
|
|
|
|
|
Put ' in [].
Mazy
You're face to face,
With the man who sold the world - David Bowie
|
|
|
|
|
doubling up on the single quote should work
ie
[string].Replace("'","''");
|
|
|
|
|
I have two problems.
The more important: how can I know if the user did hit the Print button or just saw the preview and close the window; the best whould be to close the dialog after the user press the Print button and let me know about this (return ... , delegate, event,...)
The other: how can I set the zoom? Default the dialog is very small, I managed to increase it's size but the zoom is still less then 100% and the text is not readable; I can not find anything related to zoom
|
|
|
|
|
I got this code a couple of days ago of the discussion boards, it worked for me.
foreach (Control c in this.printPreviewDialog1.Controls)
{
if (c is PrintPreviewControl)
{
((PrintPreviewControl)c).Zoom = 0.75;
}
}
Don't know about the print button.
|
|
|
|
|
I'm the one that originally posted that, and you could do the same thing for the print button. Just cycle through the controls (or even using the same code above) and if the control is a Button and has the right properties (if you're developing localized applications, don't check the Text property), and add an EventHandler to the ClickEvent .
Honestly, though, the best think you could do is check the DialogResult returned from PrintPreviewDialog.ShowDialog (inherited from CommonDialog ). If everything is set up correctly in the PrintPreviewDialog constructor, closing the form with the Close button (the X) should return DialogResult.Cancel , while doing anything else should return a different result. Just get the return value and put a breakpoint there to see what's returned. When possible, don't rely on hacks like I mentioned for finding the Zoom property of the hosted PrintPreviewControl .
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I tried to get the DialogResult but hitting the Print does not close the dialog, so after printing the user will close the dialog so I'll get Cancel
|
|
|
|
|
Hi All,
I’ve an application that should do a huge number of HTTP requests using “POST” method as the following:
In a thread method:
<br />
while (!Stop)<br />
{<br />
<br />
if (requestsArray.Count == 0)<br />
{<br />
Thread.Sleep(500);<br />
continue;<br />
}<br />
<br />
hTTPRequest = (HttpWebRequest) HttpWebRequest.Create(url);<br />
hTTPRequest.Proxy = new WebProxy("proxyServer", proxyPort);<br />
hTTPRequest.Method = "POST";<br />
hTTPRequest.KeepAlive = false;<br />
hTTPRequest.SendChunked = true;<br />
hTTPRequest.AllowWriteStreamBuffering = true;<br />
hTTPRequest.ContentType = "application/x-www-form-urlencoded";<br />
hTTPRequest.Timeout = 30000; (30 Secs)<br />
hTTPRequest.ReadWriteTimeout = 30000;<br />
string postData = "Some params and values";<br />
byte[] Content = new byte[UTF8Encoding.UTF8.GetByteCount(postData.ToCharArray(), 0, postData.Length)];<br />
UTF8Encoding.UTF8.GetBytes(postData, 0, postData.Length, Content, 0);<br />
hTTPRequest.ContentLength = Content.Length;<br />
Stream writeStream = hHTTPRequest.GetRequestStream();<br />
try<br />
{<br />
writeStream.Write(Content, 0, Content.Length);<br />
writeStream.Close();<br />
}<br />
catch<br />
{<br />
Log the error…<br />
}<br />
}<br />
After two or three requests I got the following error logged in my database:
"The operation has timed-out."
But note that this request takes no time to be performed. I directly get this error before the time goes out! Or any network activity occurs!
Another point: Since I post to the same target, can I use one instance of HttpWebRequest instead of creating new instance per each request? Such as:
In the constructor:
<br />
hTTPRequest = (HttpWebRequest) HttpWebRequest.Create(url);<br />
hTTPRequest.Proxy = new WebProxy("proxyServer", proxyPort);<br />
hTTPRequest.Method = "POST";<br />
hTTPRequest.KeepAlive = false;<br />
hTTPRequest.SendChunked = true;<br />
hTTPRequest.AllowWriteStreamBuffering = true;<br />
hTTPRequest.ContentType = "application/x-www-form-urlencoded";<br />
hTTPRequest.Timeout = 30000; (30 Secs)<br />
hTTPRequest.ReadWriteTimeout = 30000;<br />
In the thread’s method:
<br />
string postData = "Some params and values";<br />
byte[] Content = new byte[UTF8Encoding.UTF8.GetByteCount(postData.ToCharArray(), 0, postData.Length)];<br />
UTF8Encoding.UTF8.GetBytes(postData, 0, postData.Length, Content, 0);<br />
hTTPRequest.ContentLength = Content.Length;<br />
Stream writeStream = hTTPRequest.GetRequestStream();<br />
try<br />
{<br />
writeStream.Write(Content, 0, Content.Length);<br />
writeStream.Close();<br />
}<br />
catch<br />
{<br />
Log the error…<br />
} <br />
But for the second request I got the following error:
"This property cannot be set after writing has started."
Can anyone help me please?
|
|
|
|
|
You're not getting the response, so the request isn't being commited. Also, you should actually close your streams in the finally block of a try/catch in case of errors (finally is always executed regardless of err or not):
Stream s = ...
try
{
s.Write(...);
}
finally
{
if (s != null) s.Close();
} After you fill your request stream, call HttpWebRequest.GetResponse and see if that helps:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Console.WriteLine(response.StatusCode); See the documentation for HttpWebRequest and HttpWebResponse in the .NET Framework SDK for more information and examples, including examples of posting data.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Dear Stewart,
Thank you for your kind support. In real, I tried that, but I'm still getting the same error message in both cases
Any other ideas I'm more than confused
|
|
|
|
|
If the server is reporting a timeout, then it is there you have to look. Your client code looks alright (though I hope you actually did URL-encode your POST data), but remember that it's not the one reporting the error. It would seem that your server code has a problem where it is waiting for a request to finish or something similar. How quickly do you get an HttpWebResponse when you call HttpWebRequest.GetResponse . Put a breakpoint in there and see. Remember, if you're threading those threads won't block so your program won't appear to halt.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I am trying to get the exact character widths (and thus position/placement) of Arabic text which I am writing to the screen.
I have been trying to use “GDI32.dll” GetCharacterPlacementW. This uses a structure GCP_RESULTS which in turn contains a pointer to the text buffer and pointers to several array. One of these arrays, lpDx receives the distances between adjacent character cells.
I understand that .NET doesn't directly support a call to an unmanaged function which passes a structure with array pointers.
Apparently, though, there are two methods by which this can be achieved:
1) By manually marshalling the structure.
2) By using Pointers, ie unsafe code.
I find that I am out of my depth with this.
Does anyone have any C#/VB code for calling unmanaged code passing a structure with multiple array pointers?
Is there any better/easier way? Uniscribe, perhaps? Does anyone have a C#/VB code example for getting character widths for Unicode text with contextual shaping and combining characters?
|
|
|
|
|