IbexPDFCreator
DevelopersGuide
UsingIbexwithASP.NET
35
}
private void InitializeComponent() {
this.Load += = new w System.EventHandler(this.Page_Load);
}
}
}
Key points aboutthe process of streaming the PDF are covered in thefollowing sections.
6.2.1 Logging
Weset up logging so if an error occurs we gettheerror logged to file:
Logger.getLogger()
.setLevel( Level.FINEST )
.clearHandlers();
try {
Stream stream = new FileStream( Server.MapPath( @"logs\log.txt"),
FileMode.Append, FileAccess.Write ) ;
Logger.getLogger().addHandler( new StreamHandler( stream ) ) ;
}
catch( Exception ) {
}
6.2.2 Setting the MIME type
We set the correct MIME type to cause the browser to invoke the Acrobat plugin to
display the PDF:
Response.ContentType = "application/pdf";
6.2.3 Setting the content length
Weset thecontentlength to IE willcorrectly handlethe content:
Response.AddHeader( "content-length",
System.Convert.ToString( pdfStream.Length ) );
6.2.4 Not closing the MemoryStream
We call the version of generate() that takes a boolean to indicate we do not want the
output stream to be closed. If it were closed we would not be able to extract the PDF
data from the MemoryStream in order to copy it back to the browser. Typically if we
Create thumbnail from pdf c# - application SDK tool:C# PDF Thumbnail Create SDK: Draw thumbnail images for PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
www.rasteredge.com
Create thumbnail from pdf c# - application SDK tool:VB.NET PDF Thumbnail Create SDK: Draw thumbnail images for PDF in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
www.rasteredge.com
Ibex PDF Creator
Developers Guide
36
Using Ibex with ASP.NET
were writing the PDF to a file on disk we would close the stream but in this case we need
to stream to stay open.
using( dataStream ) {
doc.generate( dataStream, pdfStream, false );
}
6.3 Using XSLT
If we want to translate our XML data using a stylesheet the ASP code needs to be
changed as shown in Figure 6-3.
Figure 6-3:
ASPpage usingXSLT
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Text;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.Xml.Xsl;
using System.Security.Policy;
using ibex4;
using ibex4.logging;
namespace WebApplication1 {
public class pdfasp : System.Web.UI.Page {
private void Page_Load(object sender, System.EventArgs e) {
Logger.getLogger().setLevel( Level.FINEST ).clearHandlers();
try {
Stream stream = new FileStream(
Server.MapPath( @"logs\log.txt"), FileMode.Append,
FileAccess.Write ) ;
Logger.getLogger().addHandler( new StreamHandler( stream ) ) ;
}
catch( Exception ) {
}
FODocument doc = new FODocument();
string dataFilePath = Server.MapPath("") + "\\data.xml";
string templateFilePath = Server.MapPath("") + "\\template.xsl";
// stream for output in memory before sending to browser
MemoryStream pdfStream = new MemoryStream();
FileStream dataStream = new FileStream( dataFilePath,
FileMode.Open, FileAccess.Read );
FileStream xslStream = new FileStream( templateFilePath,
FileMode.Open, FileAccess.Read );
Logger.getLogger().info( "data file path is " + dataFilePath );
using( dataStream ) {
using( xslStream ) {
application SDK tool:How to C#: Generate Thumbnail for Word
How to Create Thumbnail for Word in C#. allowed to define and control the size of thumbnail. DOCXDocument pdf = new DOCXDocument(@"C:\1.docx"); BasePage page
www.rasteredge.com
application SDK tool:How to C#: Generate Thumbnail for PowerPoint
XDoc.PowerPoint. C#: Online Guide. Overview. Install Conversion. Convert PowerPoint to PDF. Convert PowerPoint PowerPoint. Text Search. Insert Image. Thumbnail Create
www.rasteredge.com
Ibex PDF Creator
Developers Guide
Using Ibex with ASP.NET
37
doc.generate( dataStream, xslStream, pdfStream, false );
}
}
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader( "content-length",
System.Convert.ToString( pdfStream.Length ) );
Response.BinaryWrite( pdfStream.ToArray() );
Response.End();
}
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent() {
this.Load += new System.EventHandler(this.Page_Load);
}
}
}
Thechanges made were:
• we declared a variable for the XSLT template likethis:
string templateFilePath = Server.MapPath("") + "\\template.xsl";
• we opened the XSLT template using a Stream
FileStream xslStream = new FileStream( templateFilePath, FileMode.Open,
FileAccess.Read );
• we passed theXSL stream to thegenerate() method:
using( dataStream ) {
using( xslStream ) {
doc.generate( dataStream, xslStream, pdfStream, false );
}
}
application SDK tool:VB.NET Image: Program for Creating Thumbnail from Documents and
document and image formats, such as PDF, TIFF, GIF detailed instructions for creating thumbnail in C#.NET application If you want to create thumbnail in ASP.NET
www.rasteredge.com
application SDK tool:How to C#: Generate Thumbnail for Raster
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel, VB.NET And generating thumbnail for Raster Image is an easy work. How to Create Thumbnail for Raster in C#.
www.rasteredge.com
38
Using Ibex with ASP.NET
application SDK tool:How to C#: Overview of Using XImage.Raster
You may edit the tiff document easily. Create Thumbnail. See this C# guide to learn how to use RasterEdge XImage SDK for .NET to perform quick file navigation.
www.rasteredge.com
application SDK tool:How to C#: Set Image Thumbnail in C#.NET
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel How to C#: Set Image Thumbnail in C#.NET. With XImage.Raster SDK library, you can create an image viewer and
www.rasteredge.com
Error Handling & Logging
39
Chapter 7
Error Handling & Logging
This chapter describes error handling using the IbexAPI.
Ibex associates an error handler with the library as a whole. Generally this error handler
willlog a message and notthrow an exception.
The Ibex Logger object is a singleton which is retrieved using a call to the
ibex4.logging.Logger.getLogger() method. Typically you would importtheibex4.logging
namespace and then access the logger as shown in Figure 7-1.
Figure7-1:
Clearingexistingerror
handlers
using ibex4.logging;
void sumfunc() {
Logger.getLogger().clearHandlers();
}
The default error handler writes messages to the console. Messages are displayed in
various circumstances including:
• when an invalid attributeis found;
• when a reference is made to a fontor image file which cannot befound;
• when a formatting error occurs, such as defining the widths of columns in table that
exceed the availablewidth.
As the Ibex Logger is a singleton object, logging should be configured once at the start
of an application, not on a per-document basis.
7.1 Error severity
To change the level of information logged you can set the level on the logging object to
one of the values defined in the ibex4.logging.Level object. Possible levels of logging
which can be setare:
SEVERE WARNING INFO CONFIG FINE FINER FINEST
An example of how to set the logger to log only messages which are WARNING or worse
is shown in Figure 7-2.
application SDK tool:How to C#: Overview of Using XDoc.Excel
Create Thumbnail. See this C# guide to learn how to use RasterEdge Excel SDK for .NET to perform quick file navigation. You may easily
www.rasteredge.com
application SDK tool:How to C#: Overview of Using XDoc.PowerPoint
Create Thumbnail. See this C# guide to learn how to use RasterEdge PowerPoint SDK for .NET to perform quick file navigation. You
www.rasteredge.com
Ibex PDF Creator
Developers Guide
40
Error Handling & Logging
Figure 7-2:
Settingthe errorlevel
using System;
using ibex4;
using ibex4.logging;
public class Create {
public static void Main( string[] args ) {
PDFDocument doc = new PDFDocument();
Logger.getLogger().setLevel( Level.WARNING );
7.2 Logging to a file
To log messages to a file, create an ibex4.logging.FileHandler object and then tell the
logger to log to this object. The example in Figure 7-3 logs to the file "log.txt", but any
valid filenamecan be used.
Figure 7-3:
Loggingtoafile
using System;
using ibex4;
using ibex4.logging;
public class Create {
public static void Main( string[] args ) {
Logger.getLogger()
.setLevel( Level.SEVERE )
.clearHandlers()
.addHandler(
new FileHandler("log.txt") );
TheFileHandler object synchronises access to thelog file.
If you omit the clearHandlers() call shown in the above example, log records will be
written to the default console handler and also to the file handler. You will see error
messages on the console and they will also bewritten to the file.
7.3 Logging to a stream
Ibex can log messages to a stream created by the caller. The stream is any object which
implements theSystem.IO.Stream interface.
To log messages to a stream, create an ibex4.logging.StreamHandler object and then tell
the logger to log to this object. The example in Figure 7-4 logs to a MemoryStream, but
any valid stream can be used.
Figure 7-4:
Loggingtoa stream
using System;
using System.IO;
using ibex4;
using ibex4.logging;
public class Create {
public static void Main( string[] args ) {
Logger.getLogger().clearHandlers();
MemoryStream stream = new MemoryStream();
StreamHandler h = new StreamHandler( stream );
Logger.getLogger().addHandler( h )
Ibex PDF Creator
Developers Guide
Error Handling & Logging
41
If you omit the clearHandlers() call shown in the above example log records will be
written to thedefault console handler and to the stream handler as well.
7.4 Logging to multiple destinations
Errors can be logged to any number of handlers. The example in Figure 7-5 logs to a file
called "xslfo.log", to a memory stream and to the console.
Figure 7-5:
Loggingto multiple
destinations
using System;
using System.IO;
using ibex4;
using ibex4.logging;
public class Create {
public static void Main( string[] args ) {
MemoryStream stream = new MemoryStream();
Logger.getLogger()
.addHandler( new ConsoleHandler() )
.addHandler( new StreamHandler( stream ) )
.addHandler( new FileHandler("xslfo.log") );
}
}
42
Error Handling & Logging
Page Layout
43
Chapter 8
Page Layout
This chapter describes how to configure the size of a page and position the regions in
which contentappears.
8.1 Using one layout for all pages
The first element in any FO file is theroot element which contains the whole FO tree
defining the document and declares the XML namespaces used. Figure 8-1 shows a
simple FO file.
Figure 8-1:
Simple FOfile
<root xmlns="http://www.w3.org/1999/XSL/Format">
<layout-master-set>
<simple-page-master master-name="layout" page-width="8.5in" page-height="8in">
<region-body region-name="body" margin="2.5cm"/>
</simple-page-master>
</layout-master-set>
<page-sequence master-reference="layout">
<flow flow-name="body">
<block>Hello world</block>
</flow>
</page-sequence>
</root>
The first FO element within the root element is the layout-master-set element. This
contains one or moresimple-page-master elements which define the layout of a page,
including thewidth and height.
The simple-page-master elementis like a template for a page, defining the page size and
the areas on the page into which content will be placed. As content is read from aflow ,
Ibex decides which simple-page-master to use as the basis for creating the current page.
If there is only one simple-page-master then it is always used. If there are several
simple-page-mastersthenaselectionprocessisusedtoseewhichoneappliestothe
current page.
Thesimple-page-master element contains region elements such asregion-body which
define an area on thepagewhich can be filled with textor image content.
There can be any number ofsimple-page-master elements provided each has a unique
master-nameattribute.
Figure 8-2 shows an exampleof alayout-master-set.
Figure 8-2:
Example
layout-master-set
<layout-master-set>
<simple-page-master master-name="front-page">
Ibex PDF Creator
Developers Guide
44
Page Layout
<region-body margin-right="2.5cm"
margin-left="4cm"
margin-bottom="4cm"
margin-top="4cm" region-name="body"
background-color="#eeeeee"/>
<region-after extent="3cm" region-name="footer"
background-color='#dddddd'/>
</simple-page-master>
</layout-master-set>
This shows a layout-master-set which contains a single simple-page-master with a
master-name of "front-page ".
Thissimple-page-master defines a page which has two regions on which content can be
printed. A page defined with this layout appears in the examples at the end of this
chapter, on page 49. For the purposes of this example the regions have
background-colors defined to show them clearly. More complex layouts showing five
regions appear in the examples on page 49.
Having defined a page layout which has a name, (defined by its master-name attribute)
we then use thepage-sequence element to define the content of the document. The
page-sequence element has s a a master-name e attribute e which h should match the
master-name defined for asimple-page-master (or apage-sequence-master, more of
which later).
Apage-sequencefor printing "Hello World" is shown in Figure 8-3.
Figure 8-3:
page-sequence for
hello world
<page-sequence master-reference="front-page">
<flow flow-name="body">
<block>Hello World</block>
</flow>
</page-sequence>
Akey thing to note is that the content of the page-sequence is contained in aflow
element. For content of the flow to appear on the PDF page the flow-name attribute of
theflow element must match the region-name of a region on the page master specified by
the master-reference on the page-sequence. If the flow-name does not match a
region-name, none of thecontentof thisflow will appear in theoutputdocument.
It is important to understand this feature. It means that apage-sequence can contain
multiple flow and static-content elements each containing a flow element with a
different flow-name. Only flow elements whose flow-name attribute matches a
region-name defined in the current page sequence will appear. This is how we produce
differentformats for odd and even pages.
Figure 8-4 shows in matching colors the attributes which should match for content to
appear.
Figure 8-4:
Matchingflow and
regionnames
<root xmlns="http://www.w3.org/1999/XSL/Format">
<layout-master-set>
<simple-page-master master-name="front-page">
<region-body margin-right="2.5cm"
margin-left="4cm"
margin-bottom="4cm"
margin-top="4cm" region-name="body"/>
<region-after extent="3cm" region-name="footer"/>
</simple-page-master>
</layout-master-set>
<page-sequence master-reference="front-page">
<flow flow-name="body">
Documents you may be interested
Documents you may be interested