Friday, February 25, 2011

WPF 300DPI High Resoluation Printing



PrintDialog dlg = new PrintDialog();
GeneralTransform transformToRoot = this.TransformToAncestor(win_root);

Rect rect = new Rect(transformToRoot.Transform(new Point(0, 0)), transformToRoot.Transform(new Point(this.ActualWidth, this.ActualHeight)));

double scale = 300 / 96;

RenderTargetBitmap bitmap = new RenderTargetBitmap((int)(scale * (rect.Width + 1)), (int)(scale * (rect.Height + 1)), scale * 96, scale * 96, PixelFormats.Default);
bitmap.Render(g); // g=grid

Image img = new Image();
img.Source = bitmap;
img.Stretch = Stretch.None;

img.Measure(new Size(dlg.PrintableAreaWidth,
dlg.PrintableAreaHeight));
Size sizeImage = img.DesiredSize;
img.Arrange(new Rect(new Point(0, 0), sizeImage));

dlg.PrintVisual(img, "Test300DPI");

For 3D:

Rect = Viewport3DVisual.ViewPort and it comes from visual brush:

<Border>
<Border.Background>
<VisualBrush Stretch="None">
<VisualBrush.Visual>
<Viewport3DVisual x:Name="visual3d" Viewport="0 0 384 384">


Saturday, February 19, 2011

Create OData Producer


(1) Create a Web App and add .mdf file to App Data Folder
(2) Add EF edmx and drag drop the .mdf's table (SQL Express)
(3) Add new item Web ->WCF Data Service (Will generate Atom Data Feed Service)

(4)
public class WcfDataService1 : DataService<AdventureWorks_DataEntities>
{
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("Products", EntitySetRights.AllRead);
config.SetEntitySetPageSize("Products", 2);
.. }

[QueryInterceptor("Products")]
public Expression<Func<Product,bool>> OnQueryCustomer()
{
return p => p.Name.Contains("Adjustable");
}
(5) Test in browser http://localhost/WcfDataService1/Products?$select=Name
...?$top=5
Feed Reader can be turned off Tool->Internet option->content->..

(6) Also test using Silverlight Client
...
AdventureWorks_DataEntities _svs;
DataServiceCollection<Product> _products;
public MainPage()
{
InitializeComponent();

_products.LoadCompleted += new EventHandler(_products_LoadCompleted);

Tuesday, February 15, 2011

WCF NamedPipeBinding in AppFabric



(1) Create anApp under default site running ASP.Net 4.0 AppPool
( net.pipe cannot have port number)
(2) Setting Binding for defulat site and App Advanced Setting to Enable net.pipe protocol

(3)Create a WCP Lib project by VS.net 2010 and publish into the App
(if svc file are missing, manually add one. It should be there if protocol include wsHttp*)
(4) VS.net 2001 ->Tool->WCF Config editor to edit App Web Config and add net.pipe endpoint and mexnetpipe endpoint. Note that Address for net.pipe can be empty but must set up mex for net.pipe.
(5) IIS Manager -> Manage WCF -> Config --> auto-start enabled

(6) svcutil net.pipe://localhost/TestNP/WcfServiceLibrary6.Service1.svc

(7) Client Code:
Service1Client c = new Service1Client("NetNamedPipeBinding_IService1");
c.Open();
string s= c.GetData(123));
c.Close();


<endpoint binding="netNamedPipeBinding" contract="WcfServiceLibrary6.IService1" />
<endpoint address="mex" binding="mexNamedPipeBinding" bindingConfiguration="" contract="IMetadataExchange" />
Note: binding config is optional
<bindings>
<netNamedPipeBinding>
<binding name="binding1">
<security mode="None" />
</binding>
</netNamedPipeBinding>
</bindings>

Thursday, February 3, 2011

Screen Shot into Clipboard


Bitmap ScreenShot;
int w = (int)aGrid.ActualWidth;
int h = (int)aGrid.ActualHeight;
int x = (int)aGrid.PointToScreen(new System.Windows.Point(0, 0)).X;
int y = (int)aGrid.PointToScreen(new System.Windows.Point(0, 0)).Y;
ScreenShot = new Bitmap(w, h);
Graphics g = Graphics.FromImage(ScreenShot);
g.CopyFromScreen(x, y, 0, 0, new System.Drawing.Size(w, h));
g.Dispose();

System.Windows.Forms.Clipboard.SetImage(ScreenShot);



Thursday, January 20, 2011

Command Utility to merge and Page Number PDF

Download:
(1) pdftk and winpdftextstamp 32 or 64 bit
(2) pdftk 1.pdf 2.pdf 3.pdf output file.pdf
(2) windpdftextstamp -ifile.pdf -ofile_n.pdf

Install PDFCreator as NT Service using SC command



(1) Add PDFCreator to the exception list DEP
Control Panel => System => Advanced system settings =>Advanced => Data Execution Prevention.

(2) Ge srvany.exe from the Windows Server 2003 Resource Kit (There are no Windows 2008 Server Resource Kit as of today)

(3) create the service with the sc command:

sc create pdfcreator start= auto binPath= "C:\Program Files\oldResourceKitTools\srvany.exe" DisplayName= "PDFCreator" obj= DOMAIN\User password= password
(Note that there is one space after Equal Sign)

(4) sc query pdfcreator

(5) Reg editing as in KB137890 :

1. Regedt32.exe locate
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\pdfcreator
2.Add Key.
Key Name: Parameters
Class :<leave blank>
3.Select the Parameters key, Add Value.
Value Name: Application
Data Type : REG_SZsc start
String : <path>\<application.ext>

where <path>\<application.ext> is the drive and full path to the application executable including the extension (i.e., C:\PDFCreator\pdfcreator.exe)


Monday, January 17, 2011

Set up ghostscript PDL to convert xps to PDF



For 32 Bit:
Download binary e.g. ghostpdl-8.71-win32.zip http://www.ghostscript.com/releases/
unzip and find gswin32
command gxps-871.exe -sDEVICE=pdfwrite -sOutputFile=33.pdf -dNOPAUSE tiger.xps

For 64 Bit

download ghostpdl-9.00.tar.gz and get all the source
use VC++ nmake xps_msvc.mak to complike gxps.exe ( from 64 bit sdk prompt)
gxps -sDEVICE=pdfwrite -sOutputFile=77.pdf -sNOPAUSE tigger.xsp

CutePDF is a printer that convert any doc to PDF and can be programed in C#
(PopUp Dialog to save file). It uses ghostscript.
http://www.cutepdf.com/products/cutepdf/writer.asp