Hey Guys,
I apologize that I did not fix my subject line in my last email. I realize
that it is probably pretty annoying.
Thanks, Brian
Date: Fri, 13 Nov 2009 08:22:48 -0600
From: Brian Lovett <brianlov...@gamestop.com>
Subject: Re: [iText-questions] iText-questions Digest, Vol 42, Issue
55
To: "itext-questions@lists.sourceforge.net"
<itext-questions@lists.sourceforge.net>
Message-ID:
<ce1ae16f7a9b7d45be0541f3d3303d4e44afe38...@vgv1hqpeb07exch.babgsetc.pvt>
Content-Type: text/plain; charset="us-ascii"
No problem. The "shortened for brevity" was just for the filler text anyway. I
am also including the code for the footer as well (just in case that makes any
difference). I appreciate the help!
// Pulled from a sample found on the web
public class PdfPageEvent : IPdfPageEvent
{
private PdfTemplate objTemplate;
private PdfContentByte objCB;
#region Contructors
public PdfPageEvent()
{
}
#endregion
#region Interface Methods
/**
* Called when the document is opened.
*
* @param writer the <CODE>PdfWriter</CODE> for this document
* @param document the document
*/
void IPdfPageEvent.OnOpenDocument(PdfWriter writer, Document document)
{
objCB = writer.DirectContent;
objTemplate = objCB.CreateTemplate(50f, 50f);
}
/**
* Called when a page is finished, just before being written to the
document.
*
* @param writer the <CODE>PdfWriter</CODE> for this document
* @param document the document
*/
void IPdfPageEvent.OnEndPage(PdfWriter writer, Document document)
{
SetFooter(writer, document);
}
/**
* Called when the document is closed.
* <P>
* Note that this method is called with the page number equal
* to the last page plus one.
*
* @param writer the <CODE>PdfWriter</CODE> for this document
* @param document the document
*/
void IPdfPageEvent.OnCloseDocument(PdfWriter writer, Document document)
{
objTemplate.BeginText();
BaseFont objBaseFont =
BaseFont.CreateFont("C:/windows/fonts/Arial.ttf", BaseFont.WINANSI,
BaseFont.EMBEDDED);
Font objFont = new Font(objBaseFont, 10f);
objTemplate.SetFontAndSize(objFont.BaseFont, objFont.Size);
objTemplate.ShowText((writer.PageNumber - 1).ToString());
objTemplate.EndText();
}
#region Unimplemented Interface Memebers
/**
* Called when a page is initialized.
* <P>
* Note that if even if a page is not written this method is still
* called. It is preferable to use <CODE>onEndPage</CODE> to avoid
* infinite loops.
*
* @param writer the <CODE>PdfWriter</CODE> for this document
* @param document the document
*/
void IPdfPageEvent.OnStartPage(PdfWriter writer, Document document)
{
}
/**
* Called when a Paragraph is written.
* <P>
* <CODE>paragraphPosition</CODE> will hold the height at which the
* paragraph will be written to. This is useful to insert bookmarks with
* more control.
*
* @param writer the <CODE>PdfWriter</CODE> for this document
* @param document the document
* @param paragraphPosition the position the paragraph will be written to
*/
void IPdfPageEvent.OnParagraph(PdfWriter writer, Document document,
float paragraphPosition)
{
}
/**
* Called when a Paragraph is written.
* <P>
* <CODE>paragraphPosition</CODE> will hold the height of the end of
the paragraph.
*
* @param writer the <CODE>PdfWriter</CODE> for this document
* @param document the document
* @param paragraphPosition the position of the end of the paragraph
*/
void IPdfPageEvent.OnParagraphEnd(PdfWriter writer, Document document,
float paragraphPosition)
{
}
/**
* Called when a Chapter is written.
* <P>
* <CODE>position</CODE> will hold the height at which the
* chapter will be written to.
*
* @param writer the <CODE>PdfWriter</CODE> for this document
* @param document the document
* @param paragraphPosition the position the chapter will be written to
* @param title the title of the Chapter
*/
void IPdfPageEvent.OnChapter(PdfWriter writer, Document document, float
paragraphPosition, Paragraph title)
{
}
/**
* Called when the end of a Chapter is reached.
* <P>
* <CODE>position</CODE> will hold the height of the end of the chapter.
*
* @param writer the <CODE>PdfWriter</CODE> for this document
* @param document the document
* @param paragraphPosition the position the chapter will be written to
*/
void IPdfPageEvent.OnChapterEnd(PdfWriter writer, Document document,
float paragraphPosition)
{
}
/**
* Called when a Section is written.
* <P>
* <CODE>position</CODE> will hold the height at which the
* section will be written to.
*
* @param writer the <CODE>PdfWriter</CODE> for this document
* @param document the document
* @param paragraphPosition the position the chapter will be written to
* @param title the title of the Chapter
*/
void IPdfPageEvent.OnSection(PdfWriter writer, Document document, float
paragraphPosition, int depth, Paragraph title)
{
}
/**
* Called when the end of a Section is reached.
* <P>
* <CODE>position</CODE> will hold the height of the section end.
*
* @param writer the <CODE>PdfWriter</CODE> for this document
* @param document the document
* @param paragraphPosition the position the chapter will be written to
*/
void IPdfPageEvent.OnSectionEnd(PdfWriter writer, Document document,
float paragraphPosition)
{
}
/**
* Called when a <CODE>Chunk</CODE> with a generic tag is written.
* <P>
* It is usefull to pinpoint the <CODE>Chunk</CODE> location to generate
* bookmarks, for example.
*
* @param writer the <CODE>PdfWriter</CODE> for this document
* @param document the document
* @param rect the <CODE>Rectangle</CODE> containing the
<CODE>Chunk</CODE>
* @param text the text of the tag
*/
void IPdfPageEvent.OnGenericTag(PdfWriter writer, Document document,
Rectangle rect, string text)
{
}
#endregion
#endregion
private void SetFooter(PdfWriter oWriter, Document oDocument)
{
int intPageNumber = oWriter.PageNumber;
string strText = "Page " + intPageNumber + " of ";
BaseFont objBaseFont =
BaseFont.CreateFont("C:/windows/fonts/Arial.ttf", BaseFont.WINANSI,
BaseFont.EMBEDDED);
Font objFont = new Font(objBaseFont, 10f);
float fltLen = objFont.BaseFont.GetWidthPoint(strText,
objFont.Size);
objCB.BeginText();
objCB.SetFontAndSize(objFont.BaseFont, objFont.Size);
objCB.SetTextMatrix((oDocument.PageSize.Width / 2) - (fltLen / 2),
5f);
objCB.ShowText(strText);
objCB.EndText();
objCB.AddTemplate(objTemplate, (oDocument.PageSize.Width / 2) -
(fltLen / 2) + fltLen, 5f);
}
}
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
PdfPageEvent objMyEvent = new PdfPageEvent();
#region Prepare Document for Writing
// need to write to memory first due to IE wanting
// to know the length of the pdf beforehand
MemoryStream m = new MemoryStream();
Document objDocument = new Document(PageSize.LETTER, 20f, 20f, 35f,
33f);
//we set the ContentType and create an instance of the Writer
Response.ContentType = "application/pdf";
PdfWriter objWriter = PdfWriter.GetInstance(objDocument, m);
objWriter.PageEvent = objMyEvent;
objDocument.Open();
#endregion
PdfPTable objTable = new PdfPTable(1);
PdfPCell objCell = null;
objTable.SplitLate = false;
for (int i = 0; i < 4; i++)
{
objCell = new PdfPCell(new Phrase("Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Phasellus non turpis eu nulla dignissim bibendum a
vel libero. Maecenas feugiat justo in nibh gravida adipiscing. Cras ut augue
nibh. Quisque posuere, tortor facilisis rutrum dignissim, nisi nunc tincidunt
elit, id auctor quam libero eu odio. Vestibulum lacinia aliquet egestas.
Phasellus sed enim nibh. Curabitur at sapien nisl. Fusce sed leo sed massa
lacinia tempor. Suspendisse dictum urna sed elit blandit bibendum. Duis lacus
neque, facilisis sit amet mattis nec, aliquam id velit. Vivamus elementum,
risus non accumsan interdum, nulla arcu pretium nibh, ac iaculis ligula ipsum
id nisi. Maecenas sodales, urna ac pharetra suscipit, est lacus euismod urna,
ac tristique lorem risus eu augue. Pellentesque suscipit elit non ligula
fermentum sollicitudin. Cras suscipit turpis sed sapien tincidunt in aliquet
tellus tempus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Phasellus non turpis eu nulla dignissim bibendum a vel libero. Maecenas feugiat
justo in nibh gravida adipiscing. Cras ut augue nibh. Quisque posuere, tortor
facilisis rutrum dignissim, nisi nunc tincidunt elit, id auctor quam libero eu
odio. Vestibulum lacinia aliquet egestas. Phasellus sed enim nibh. Curabitur at
sapien nisl. Fusce sed leo sed massa lacinia tempor. Suspendisse dictum urna
sed elit blandit bibendum. Duis lacus neque, facilisis sit amet mattis nec,
aliquam id velit. Vivamus elementum, risus non accumsan interdum, nulla arcu
pretium nibh, ac iaculis ligula ipsum id nisi. Maecenas sodales, urna ac
pharetra suscipit, est lacus euismod urna, ac tristique lorem risus eu augue.
Pellentesque suscipit elit non ligula fermentum sollicitudin. Cras suscipit
turpis sed sapien tincidunt in aliquet tellus tempus.",
FontFactory.GetFont("Arial", 10f)));
objTable.AddCell(objCell);
}
objDocument.Add(objTable);
#region Clean Up Document
// Close document
objDocument.Close();
// Write pdf bytes to outputstream
Response.OutputStream.Write(m.GetBuffer(), 0, m.GetBuffer().Length);
Response.OutputStream.Flush();
Response.OutputStream.Close();
#endregion
}
}
Thanks,
Brian
-----Original Message-----
Date: Thu, 12 Nov 2009 17:40:46 -0000
From: "Paulo Soares" <psoa...@glintt.com>
Subject: Re: [iText-questions] Small problem with PdfPCell spanning
more thanone page
To: "Post all your questions about iText here"
<itext-questions@lists.sourceforge.net>
Message-ID: <009001ca63bf$466b9740$587ba...@psoaresw>
Content-Type: text/plain; format=flowed; charset="iso-8859-1";
reply-type=original
It may be a rounding bug. Please post the complete code required to generate
the PDF ([Shortened for brevity] is not very useful and the devil is always
in the details).
Paulo
From: "Brian Lovett" <brianlov...@gamestop.com>
To: <itext-questions@lists.sourceforge.net>
Sent: Thursday, November 12, 2009 5:24 PM
Subject: [iText-questions] Small problem with PdfPCell spanning more thanone
page
Hey Guys,
I am using iTextSharp 4.1.6.0. I noticed that when a PdfPCell contains text
that forces it to span multiple pages, if the final line of text before the
page break falls in just the right place, that line will be repeated on the
next page (generic sample attached). I worked around it by adjusting the
top and bottom margin by a point or two.
The meat of the code I used to create the attachment is below. I am unsure
if the problem is with my code, iText, Reader, or some combination as I was
unable to find anything in the documentation or searches.
MemoryStream m = new MemoryStream();
Document objDocument = new Document(PageSize.LETTER, 20f, 20f,
35f, 33f);
Response.ContentType = "application/pdf";
PdfWriter objWriter = PdfWriter.GetInstance(objDocument, m);
objWriter.PageEvent = objMyEvent;
objDocument.Open();
PdfPTable objTable = new PdfPTable(1);
PdfPCell objCell = null;
objTable.SplitLate = false;
for (int i = 0; i < 4; i++)
{
objCell = new PdfPCell(new Phrase("Lorem ipsum dolor sit
amet [Shortened for brevity]", FontFactory.GetFont("Arial", 10f)));
objTable.AddCell(objCell);
}
objDocument.Add(objTable);
objDocument.Close();
Response.OutputStream.Write(m.GetBuffer(), 0,
m.GetBuffer().Length);
Response.OutputStream.Flush();
Response.OutputStream.Close();
Thanks,
Brian
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
iText-questions mailing list
iText-questions@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/itext-questions
Buy the iText book: http://www.1t3xt.com/docs/book.php
Check the site with examples before you ask questions:
http://www.1t3xt.info/examples/
You can also search the keywords list: http://1t3xt.info/tutorials/keywords/