mvc open pdf in browser : Convert pdf into jpg online SDK Library API .net asp.net html sharepoint Expert_.NET_Delivery_Using_NAnt_and_CruiseControl_.NET_200531-part1080

I have extended the <script>task to include the various XML namespaces that will be
required for the scaffolding code. All that we need to do now is fill in the blanks, beginning
with the ScriptMainmethod:
public static void ScriptMain(Project project)
{
string projectSetFile = project.Properties["xslt.projectset"];
string outputDir = project.Properties["xslt.output"];
string xsltDir = project.Properties["xslt.directory"];
XmlDocument dom = new XmlDocument();
dom.Load(projectSetFile);
ProduceCcnetConfigFile(xsltDir, outputDir, dom);
ProduceBuildAndDeployFiles(xsltDir, outputDir, dom);
}
As you know, we need to pass through the NAnt project as a requirement of the Script➥
Mainmethod. We can then use the properties (for instance) in the project within the script.
Here I have assumed that the three properties in bold are available in the NAnt script. We will
implement those later. The other action of the entry point is to load the ProjectSetXML file
that we saw in the CodeSmith examples into memory as an XML document. We then move to
produce the relevant files. The ProduceCcnetConfigFilemethod looks like this:
static void ProduceCcnetConfigFile(string xsltDirectory, ➥
string outputDirectory, ➥
XmlDocument dom)
{
string outputPath = Path.Combine(outputDirectory, "ccnet.config");
string xsltFile = Path.Combine(xsltDirectory, "Ccnet.xsl");
TransformXml(dom, xsltFile, outputPath, null);
Console.WriteLine("Produced file: " + outputPath);
}
This is quite a straightforward method, performing a simple transformation to provide
theccnet.configfile. The TransformXmlutility method is shown here:
static void TransformXml(XmlDocument document, string xsltFile, ➥
string outputPath, XsltArgumentList arguments)
{
string output = "";
XmlUrlResolver resolver = new XmlUrlResolver();
XslTransform stylesheet = new XslTransform();
stylesheet.Load(xsltFile);
using(MemoryStream stream = new MemoryStream())
{
CHAPTER 9 ■ CODE GENERATION
293
Convert pdf into jpg online - Convert PDF to JPEG images in C#.net, ASP.NET MVC, WinForms, WPF project
How to convert PDF to JPEG using C#.NET PDF to JPEG conversion / converter library control SDK
best way to convert pdf to jpg; convert pdf to high quality jpg
Convert pdf into jpg online - VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.net, ASP.NET MVC, WinForms, WPF project
Online Tutorial for PDF to JPEG (JPG) Conversion in VB.NET Image Application
convert pdf images to jpg; convert pdf into jpg format
stylesheet.Transform(document.DocumentElement.CreateNavigator(), ➥
arguments, stream, resolver);
stream.Position = 0;
using(StreamReader sr = new StreamReader(stream))
{output = sr.ReadToEnd();}
}
using(StreamWriter sw = new StreamWriter(outputPath))
{sw.WriteLine(output);}
}
This method performs a transformation accepting further arguments for the transforma-
tion (this is important for the build and deploy files as we will see a bit later) and then writes
out the resulting transformed output to the requested location.
Producing multiple outputs based on the single input file is a little more complicated.
Theopening method, ProduceBuildAndDeployFiles, is shown here:
static void ProduceBuildAndDeployFiles(string xsltDirectory, ➥
string outputDirectory, ➥
XmlDocument dom)
{
string companyName = dom.DocumentElement.SelectSingleNode("Settings")➥
.Attributes["CompanyName"].InnerText;
int index = 1;
foreach(XmlNode projectNode in 
dom.DocumentElement.SelectNodes("Projects/Project"))
{
string projectName = projectNode.Attributes["Name"].InnerText;
string solutionName = string.Join(".", new string[] { companyName, ➥
projectName });
ProduceBuildAndDeployFile("Build", xsltDirectory, outputDirectory,➥
solutionName, projectNode, dom, index);
ProduceBuildAndDeployFile("Deploy", xsltDirectory, outputDirectory,➥
solutionName, projectNode, dom, index);
index++;
}
}
As you might expect, this method loops over the XML file containing the ProjectSet,
picking out the required solution name information in order to name the files appropriately,
and then calls the ProduceBuildAndDeployFilemethod for the build and deploy transforma-
tion for each node (or project). This is very similar to the code we created for CodeSmith. The
ProduceBuildAndDeployFilemethod is as follows:
CHAPTER 9 ■ CODE GENERATION
294
Online Convert Jpeg to PDF file. Best free online export Jpg image
So, feel free to convert them too with our tool. Easy converting! If you want to turn PDF file into image file format in C# application, then RasterEdge
best pdf to jpg converter online; .pdf to jpg converter online
C# Create PDF from images Library to convert Jpeg, png images to
Batch convert PDF documents from multiple image formats, including for exporting high quality PDF from images for combining multiple image formats into one or
change format from pdf to jpg; change file from pdf to jpg
static void ProduceBuildAndDeployFile(string type, string xsltDirectory,➥
string outputDirectory,➥
string solutionName, ➥
XmlNode projectNode,➥
XmlDocument dom, int index)
{
string xslt = Path.Combine(xsltDirectory, type + ".xsl");
string outputFile = GetOutputFileName(outputDirectory, solutionName, type);
XPathNodeIterator iterator = 
projectNode.ParentNode.CreateNavigator().Select("Project[" + index + "]");
XsltArgumentList arguments = new XsltArgumentList();
arguments.AddParam("ProjectData", "", iterator);
TransformXml(dom, xslt, outputFile, arguments);
Console.WriteLine("Produced file: " + outputFile);
}
This method performs the “clever bit” by selecting the relevant project and ensuring that
the transformation call uses the correct project information. It uses a single helper method,
GetOutputFileName:
static string GetOutputFileName(string outputDirectory, ➥
string solutionName, string type)
{
return Path.Combine(outputDirectory, string.Join(".", ➥
new string[] {solutionName, type, "xml" }));
}
So we have now provided a set of code to ensure that we can use XSLT to perform the same
process, in terms of generating the multiple files required, as CodeSmith. We can include the
required properties to this script as follows:
<property name="xslt.projectset" ➥
value="d:\dotnetdelivery\chapter9\data\projectset.xslt.xml"/>
<property name="xslt.directory" value="d:\dotnetdelivery\chapter9\xslt"/>
<property name="xslt.output" value="d:\dotnetdelivery\chapter9"/>
Now we can run the NAnt script. When this script is run, we see the following results:
---------- NAnt ----------
NAnt 0.85 
Copyright (C) 2001-2005 Gerry Shaw
http://nant.sourceforge.net
Buildfile: file:///Builder.XSLT.xml
Target framework: Microsoft .NET Framework 1.1
CHAPTER 9 ■ CODE GENERATION
295
VB.NET PDF Convert to Images SDK: Convert PDF to png, gif images
Convert PDF documents to multiple image formats, including Jpg, Png, Bmp, Gif, Tiff, Bitmap, .NET Graphics, and REImage. Turn multipage PDF file into image
batch convert pdf to jpg online; convert multiple page pdf to jpg
C# Image Convert: How to Convert Adobe PDF to Jpeg, Png, Bmp, &
Adobe PDF document can be easily loaded into your C#.NET String inputFilePath = @"C:\input.pdf"; String outputFilePath = @"C:\output.jpg"; // Convert PDF to jpg
best pdf to jpg converter for; convert multipage pdf to jpg
XsltBuilder:
[script] Scanning assembly "ocwe9toj" for extensions.
Loading projectset...
Producing ccnet.config file...
Producing build and deploy files...
BUILD SUCCEEDED
Total time: 0.7 seconds.
Output completed (2 sec consumed) - Normal Termination
The relevant points are the usual dynamic assembly compilation message and then the
subsequent outputs as the files are generated. Clearly, we need to produce the actual templates
for transformations, but we now have the appropriate framework in place for the process. 
Tip
I think that I would probably create a custom NAnt task for this purpose if I were to pursue XSLT as
my transformation tool of choice.Also,consider that it is much easier to create the script for this task inside
the VS .NET IDE for debugging purposes and then make tweaks and changes to make it NAnt-friendly at
later stages.
With much of the framework in place now, we should consider the purpose of our work:
the actual code generation.
Targets for Generation
There are three main targets for generation: the ccnet.configfile, the build file, and the deploy
file. These files may end up being a series of subtemplates, but for now they fall under those
general categories.
CruiseControl.NET Configuration Files
The easiest target is the ccnet.configfile. As we have already seen in previous chapters,
thanks to the imposed standards, the project settings for this file are almost identical. Con-
sider the following project from ccnet.config:
<project name="Etomic.Library.Transformer">
<webURL>
http://localhost/ccnet/Controller.aspx?_action_ViewProjectReport=true&amp;➥
server=local&amp;project=Etomic.Library.Transformer
</webURL>
<artifactDirectory>
D:\dotNetDelivery\BuildAreaCI\Publish\Etomic.Library.Transformer\
</artifactDirectory>
CHAPTER 9 ■ CODE GENERATION
296
C# PDF Convert to Tiff SDK: Convert PDF to tiff images in C#.net
with specified zoom value and save it into stream The magnification of the original PDF page size Description: Convert to DOCX/TIFF with specified resolution and
bulk pdf to jpg converter; conversion pdf to jpg
VB.NET PDF insert image library: insert images into PDF in vb.net
Support various image formats, like Jpeg or Jpg, Png, Gif, Bmp Insert images into PDF form field in VB.NET. to PDF in preview without adobe PDF control installed.
pdf to jpeg; convert pdf image to jpg image
<modificationDelaySeconds>10</modificationDelaySeconds>
<triggers>
<intervalTrigger />
</triggers>
<sourcecontrol type="vss" autoGetSource="true">
<ssdir>"D:\dotNetDelivery\VSS"</ssdir>
<project>$/Solutions/Etomic.Library.Transformer/</project>
<username>builder</username>
<password>builder</password>
<workingDirectory>
D:\dotNetDelivery\BuildAreaCI\Source\Etomic.Library.Transformer
</workingDirectory>
</sourcecontrol>
<build type="nant">
<baseDirectory>D:\dotNetDelivery\Chapter6\</baseDirectory>
<buildArgs>-D:solution.stub=Library.Transformer 
-D:debug=false</buildArgs>
<buildFile>Build.Core.xml</buildFile>
<targetList>
<target>ci</target>
</targetList>
<buildTimeoutSeconds>300</buildTimeoutSeconds>
</build>
<labeller type="defaultlabeller">
<prefix>1.0.</prefix>
</labeller>
<tasks>
<merge>
<files>
<file>
D:\dotNetDelivery\BuildAreaCI\Reports\Etomic.Library.Transformer\*-results.xml
</file>
<file>
D:\dotNetDelivery\BuildAreaCI\Reports\Etomic.Library.Transformer\fxcop.xml
</file>
</files>
</merge>
</tasks>
<publishers>
<xmllogger />
</publishers>
</project>
CHAPTER 9 ■ CODE GENERATION
297
VB.NET Create PDF from images Library to convert Jpeg, png images
Components to batch convert PDF documents in Visual Basic control for exporting high quality PDF from images. Turn multiple image formats into one or multiple
convert .pdf to .jpg; convert pdf to jpg
C# PDF insert image Library: insert images into PDF in C#.net, ASP
Support various image formats, like Jpeg or Jpg, Png, Gif, Bmp Insert images into PDF form field. Access to freeware download and online C#.NET class source code
changing pdf file to jpg; bulk pdf to jpg converter online
The most obvious candidate for simple code generation is the capture of the solution
name information. This is what we will do for our first pass at the generation of the ccnet.➥
configfile. Other pieces of candidate information, however, are repeated throughout the
ccnet.configfile and should ideally be separated from the config file itself as the information
is either environmental or project-based:
CI server URL.This could be subject to change, or perhaps multiple master files with
differing CCNet servers exist using the same templates.
General VSS information.The location and access information of the VSS database could
change, or there could be multiple VSS and server instances.
Project version prefix.This will change from project to project, and would probably be
the first candidate I would account for.
File locations.This is also environment information and liable to change.
We will address a few of these for this demonstration of code generation.
Tip
Working through code-generation targets is generally easier to do than observe.The trick is to iden-
tify candidates and work on that basis until they are proved worthwhile.It may seem tricky to start with,but
this passes with time.The potential benefits are worth the investment in time.
The CodeSmith Template
To provide the variables required for the output of an automated ccnet.configfile, we need to
amend the simple serializable type we used earlier, and we will need to alter it further for the
build and deploy scripts. The input file may look like this:
<?xml version="1.0"?>
<ProjectSet xmlns="http://www.etomic.co.uk">
<Settings
CompanyName="Etomic"
CcnetUrl="http://localhost/ccnet"
VssFolder="D:\dotNetDelivery\VSS"
VssUsername="builder"
VssPassword="builder"
EnvironmentMain="D:\dotNetDelivery\BuildAreaCI"
EnvironmentTempDeploy="D:\dotNetDelivery\TempDeploy"
/>
<Projects>
<Project Name="Library.Transformer"/>
</Projects>
</ProjectSet>
CHAPTER 9 ■ CODE GENERATION
298
The crucial difference here is the addition of a Settingselement and a number of
name/value pairs. This slightly odd implementation of the Settingselement allows the
easyuse of name/value pairs since XML serialization does not allow the serialization of
hashtables (or other structures implementing IDictionary).
This input file needs to be translated into the serializable type as shown before and the
assembly deployed to the CodeSmith assemblies directory. The changes are as follows:
public class ProjectSet
{
[XmlElement]
public SettingCollection Settings = new SettingCollection();
[XmlArrayAttribute("Projects")]
public Project[] Projects;
}
Here I have added a new XmlElementcalledSettings. This is a new type, SettingCollection,
that looks like this:
public class SettingCollection : NameValueCollection, IXmlSerializable
{
#region IXmlSerializable Members
public void WriteXml(System.Xml.XmlWriter writer)
{
//Not Required
}
public System.Xml.Schema.XmlSchema GetSchema()
{
//Not Required
return null;
}
public void ReadXml(System.Xml.XmlReader reader)
{
while (reader.MoveToNextAttribute())
{
this.Add(reader.Name, reader.Value);
}
reader.Read();
}
#endregion
}
CHAPTER 9 ■ CODE GENERATION
299
TheSettingCollectiontype is the implementation of my quick fix for the IDictionary
problems. I want to be able to refer to the values of individual settings by name, which means a
key/value pair construct is most appropriate. The NameValueCollectiontype is a good choice; it
implementsICollectionbut not IDictionary(which is not serializable). To ensure I get the
desired effect from reading the Settingselement, I have implemented the IXmlSerializable
interface. Microsoft currently does not give this interface much attention, although that is
likely to change in .NET 2.0. The interface allows the implementer to control the behavior of
XML serialization. In our previous example, I have only implemented the ReadXmlmethod
since I will not need to write the type for at least the time being. The GetSchemamethod is
onlyused when working with ADO and DataSetparaphernalia. 
This code is part of the BuildAutomation.2 project.
Note
We do not have the space to discuss the subject of XML serialization at any great length.For our
purposes,there is not too much to know,though!
Following this, the ccnet.csttemplate should look like the following; the areas replaced
by information from the data file are in bold:
<%-- 
Name:          ccnet.xml.cst
Author:        Marc Holmes
Description:   Providing the ccnet.config file using an XML file.
%>
<%@ CodeTemplate Language="C#" TargetLanguage="Text" ➥
Description="Providing the ccnet.config file using an XML file." %>
<%@ Assembly Name="Etomic.CodeSmithExtensions.BuildAutomation.2" %>
<%@ Import Namespace="Etomic.CodeSmithExtensions.BuildAutomation" %>
<%@ Property Name="ProjectSet" ➥
Type="Etomic.CodeSmithExtensions.BuildAutomation.ProjectSet" ➥
Description="The XML file containing the project definitions." %>
<?xml version="1.0" encoding="utf-8" ?>
<cruisecontrol>
<%
SettingCollection s = ProjectSet.Settings;
foreach(Project p in ProjectSet.Projects)
{
%>
<project name="<%=s["CompanyName"]%>.<%=p.Name%>">
<webURL>
<%=s["CcnetUrl"]%>Controller.aspx?_action_ViewProjectReport=true&amp;➥
server=local&amp;project=<%=s["CompanyName"]%>.<%=p.Name%>
</webURL>
<artifactDirectory>
CHAPTER 9 ■ CODE GENERATION
300
<%=s["EnvironmentMain"]%>\Publish\<%=s["CompanyName"]%>.<%=p.Name%>\
</artifactDirectory>
<modificationDelaySeconds>10</modificationDelaySeconds>
<triggers>
<intervalTrigger />
</triggers>
<sourcecontrol type="vss" autoGetSource="true">
<ssdir>"<%=s["VssFolder"]%>"</ssdir>
<project>$/Solutions/<%=s["CompanyName"]%>.<%=p.Name%>/</project>
<username><%=s["VssUsername"]%></username>
<password><%=s["VssPassword"]%></password>
<workingDirectory>
<%=s["EnvironmentMain"]%>\Source\<%=s["CompanyName"]%>.<%=p.Name%>
</workingDirectory>
</sourcecontrol>
<build type="nant">
<baseDirectory>D:\dotNetDelivery\Chapter9\</baseDirectory>
<buildArgs>-D:debug=false</buildArgs>
<buildFile><%=s["CompanyName"]%>.<%=p.Name%>.Build.xml</buildFile>
<targetList>
<target>ci</target>
</targetList>
<buildTimeoutSeconds>300</buildTimeoutSeconds>
</build>
<labeller type="defaultlabeller">
<prefix>1.0.</prefix>
</labeller>
<tasks>
<merge>
<files>
<file>
<%=s["EnvironmentMain"]%>\Reports\<%=s["CompanyName"]%>.<%=p.Name%>\*-results.xml
</file>
<file>
<%=s["EnvironmentMain"]%>\Reports\<%=s["CompanyName"]%>.<%=p.Name%>\fxcop.xml
</file>
</files>
</merge>
</tasks>
<publishers>
<xmllogger />
CHAPTER 9 ■ CODE GENERATION
301
</publishers>
</project>
<%
}
%>
</cruisecontrol>
Based on our previous experience with the template files, it should be fairly obvious what
this template file is doing. Reviewing the outputs will reveal a ccnet.configfile, which is close
to one of our previous hand-coded ccnet.configfiles. The main thing missing from this tem-
plate is the ability to use multisource control, as we did with the web and Windows applications.
Accounting for this should be quite straightforward, though, and we will move on to the build
files. Other differences include the call to the build file itself; previously we called a file called
Build.Core.xmland passed through a solution name in order to call the specific file. As we will
see in just a moment, code generation brings a different dynamic to code, and here we have
adjusted to call a build file for a project specifically from the outset.
The XSLT Template
The XSLT template looks very similar, and it is easy to see the differences between the Code-
Smith syntax and the XSLT syntax. Depending on your familiarity with either syntax, you may
find one easier to understand than the other:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="utf-8" />
<xsl:template match="ProjectSet">
<cruisecontrol>
<xsl:for-each select="Projects/Project">
<xsl:variable name="ProjectName">
<xsl:value-of select="../../Settings/@CompanyName" />.
<xsl:value-of select="@Name" />
</xsl:variable>
<project name="{$ProjectName}">
<webURL><xsl:value-of select="../../Settings/@CcnetUrl" />➥
/Controller.aspx?_action_ViewProjectReport=true&amp;server=local&amp;project=➥
<xsl:value-of select="$ProjectName" /></webURL>
<artifactDirectory>
<xsl:value-of select="../../Settings/@EnvironmentMain" />➥
\Publish\<xsl:value-of select="$ProjectName" />\
</artifactDirectory>
<modificationDelaySeconds>10</modificationDelaySeconds>
<triggers>
<intervalTrigger />
</triggers>
CHAPTER 9 ■ CODE GENERATION
302
Documents you may be interested
Documents you may be interested