ExcelTechnology

How to Create PDF Template Document with C#

Template is offered to people who don’t know how to set format for one document or table. Users can fill with contents according to the template or modify it to get better format.

Generally speaking, one template document may include font style and color, spacing and alignment. If the document has several pages, the template may include page number, header and footer of each page.

PDF is one of the most frequently used formats. Therefore, I want to talk something about PDF template, including text and paragraph settings, header and footer, page number.

Actually, we can use Adobe Acrobat to meet our requirements. Some users have concluded instruction about how to use Adobe Acrobat to operate PDF. We just search for these guides and then create a PDF template file.

But the method I will introduce is to use C# to create PDF template. This method is based on a component, Spire.Doc. If you want to use the following code, please download and install this component firstly.

Code:

using System;

using System.Drawing;

using Spire.Pdf;

using Spire.Pdf.AutomaticFields;

using Spire.Pdf.Graphics;



namespace Template

{

class Program

{

static void Main(string[] args)

{

//Create a pdf document.

PdfDocument doc = new PdfDocument();

doc.ViewerPreferences.PageLayout = PdfPageLayout.TwoColumnLeft;



//margin

PdfUnitConvertor unitCvtr = new PdfUnitConvertor();

PdfMargins margin = new PdfMargins();

margin.Top = unitCvtr.ConvertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);

margin.Bottom = margin.Top;

margin.Left = unitCvtr.ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);

margin.Right = margin.Left;



SetDocumentTemplate(doc, PdfPageSize.A4, margin);



//create section

PdfSection section = doc.Sections.Add();

section.PageSettings.Size = PdfPageSize.A4;

section.PageSettings.Margins = new PdfMargins(0);

SetSectionTemplate(section, PdfPageSize.A4, margin, "Section 1");



// Create one page

PdfNewPage page = section.Pages.Add();



//Draw page

DrawPage(page);



page = section.Pages.Add();

DrawPage(page);



page = section.Pages.Add();

DrawPage(page);



page = section.Pages.Add();

DrawPage(page);



page = section.Pages.Add();

DrawPage(page);



//Save pdf file.

doc.SaveToFile("Template.pdf");

doc.Close();



//Launching the Pdf file.

System.Diagnostics.Process.Start("Template.pdf");

}



private static void DrawPage(PdfNewPage page)

{

float pageWidth = page.Canvas.ClientSize.Width;

float y = 0;



//title

y = y + 5;

PdfBrush brush2 = new PdfSolidBrush(Color.Black);

PdfTrueTypeFont font2 = new PdfTrueTypeFont(new Font("Arial", 16f, FontStyle.Bold));

PdfStringFormat format2 = new PdfStringFormat(PdfTextAlignment.Center);

format2.CharacterSpacing = 1f;

String text = "Summary of Science";

page.Canvas.DrawString(text, font2, brush2, pageWidth / 2, y, format2);

SizeF size = font2.MeasureString(text, format2);

y = y + size.Height + 6;



//icon

PdfImage image = PdfImage.FromFile(@"Wikipedia_Science.png");

page.Canvas.DrawImage(image, new PointF(pageWidth - image.PhysicalDimension.Width, y));

float imageLeftSpace = pageWidth - image.PhysicalDimension.Width - 2;

float imageBottom = image.PhysicalDimension.Height + y;



//refenrence content

PdfTrueTypeFont font3 = new PdfTrueTypeFont(new Font("Arial", 9f));

PdfStringFormat format3 = new PdfStringFormat();

format3.ParagraphIndent = font3.Size * 2;

format3.MeasureTrailingSpaces = true;

format3.LineSpacing = font3.Size * 1.5f;

String text1 = "(All text and picture from ";

String text2 = "Wikipedia";

String text3 = ", the free encyclopedia)";

page.Canvas.DrawString(text1, font3, brush2, 0, y, format3);



size = font3.MeasureString(text1, format3);

float x1 = size.Width;

format3.ParagraphIndent = 0;

PdfTrueTypeFont font4 = new PdfTrueTypeFont(new Font("Arial", 9f, FontStyle.Underline));

PdfBrush brush3 = PdfBrushes.Blue;

page.Canvas.DrawString(text2, font4, brush3, x1, y, format3);

size = font4.MeasureString(text2, format3);

x1 = x1 + size.Width;



page.Canvas.DrawString(text3, font3, brush2, x1, y, format3);

y = y + size.Height;



//content

PdfStringFormat format4 = new PdfStringFormat();

text = System.IO.File.ReadAllText(@"Summary_of_Science.txt");

PdfTrueTypeFont font5 = new PdfTrueTypeFont(new Font("Arial", 10f));

format4.LineSpacing = font5.Size * 1.5f;

PdfStringLayouter textLayouter = new PdfStringLayouter();

float imageLeftBlockHeight = imageBottom - y;

PdfStringLayoutResult result

= textLayouter.Layout(text, font5, format4, new SizeF(imageLeftSpace, imageLeftBlockHeight));

if (result.ActualSize.Height < imageBottom - y)

{

imageLeftBlockHeight = imageLeftBlockHeight + result.LineHeight;

result = textLayouter.Layout(text, font5, format4, new SizeF(imageLeftSpace, imageLeftBlockHeight));

}

foreach (LineInfo line in result.Lines)

{

page.Canvas.DrawString(line.Text, font5, brush2, 0, y, format4);

y = y + result.LineHeight;

}

PdfTextWidget textWidget = new PdfTextWidget(result.Remainder, font5, brush2);

PdfTextLayout textLayout = new PdfTextLayout();

textLayout.Break = PdfLayoutBreakType.FitPage;

textLayout.Layout = PdfLayoutType.Paginate;

RectangleF bounds = new RectangleF(new PointF(0, y), page.Canvas.ClientSize);

textWidget.StringFormat = format4;

textWidget.Draw(page, bounds, textLayout);

}



private static void SetSectionTemplate(PdfSection section, SizeF pageSize, PdfMargins margin, string label)

{

PdfPageTemplateElement leftSpace

= new PdfPageTemplateElement(margin.Left, pageSize.Height);

leftSpace.Foreground = true;

section.Template.OddLeft = leftSpace;



PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 9f, FontStyle.Italic));

PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);

float y = (pageSize.Height - margin.Top - margin.Bottom) * (1 - 0.618f);

RectangleF bounds

= new RectangleF(10, y, margin.Left - 20, font.Height + 6);

leftSpace.Graphics.DrawRectangle(PdfBrushes.OrangeRed, bounds);

leftSpace.Graphics.DrawString(label, font, PdfBrushes.White, bounds, format);



PdfPageTemplateElement rightSpace

= new PdfPageTemplateElement(margin.Right, pageSize.Height);

rightSpace.Foreground = true;

section.Template.EvenRight = rightSpace;

bounds

= new RectangleF(10, y, margin.Right - 20, font.Height + 6);

rightSpace.Graphics.DrawRectangle(PdfBrushes.SaddleBrown, bounds);

rightSpace.Graphics.DrawString(label, font, PdfBrushes.White, bounds, format);

}



private static void SetDocumentTemplate(PdfDocument doc, SizeF pageSize, PdfMargins margin)

{

PdfPageTemplateElement leftSpace

= new PdfPageTemplateElement(margin.Left, pageSize.Height);

doc.Template.Left = leftSpace;



PdfPageTemplateElement topSpace

= new PdfPageTemplateElement(pageSize.Width, margin.Top);

topSpace.Foreground = true;

doc.Template.Top = topSpace;



//draw header label

PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 9f, FontStyle.Italic));

PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Right);

String label = "Demo of Spire.Pdf";

SizeF size = font.MeasureString(label, format);

float y = topSpace.Height - font.Height - 1;

PdfPen pen = new PdfPen(Color.Black, 0.75f);

topSpace.Graphics.SetTransparency(0.5f);

topSpace.Graphics.DrawLine(pen, margin.Left, y, pageSize.Width - margin.Right, y);

y = y - 1 - size.Height;

topSpace.Graphics.DrawString(label, font, PdfBrushes.Black, pageSize.Width - margin.Right, y, format);



PdfPageTemplateElement rightSpace

= new PdfPageTemplateElement(margin.Right, pageSize.Height);

doc.Template.Right = rightSpace;



PdfPageTemplateElement bottomSpace

= new PdfPageTemplateElement(pageSize.Width, margin.Bottom);

bottomSpace.Foreground = true;

doc.Template.Bottom = bottomSpace;



//draw footer label

y = font.Height + 1;

bottomSpace.Graphics.SetTransparency(0.5f);

bottomSpace.Graphics.DrawLine(pen, margin.Left, y, pageSize.Width - margin.Right, y);

y = y + 1;

PdfPageNumberField pageNumber = new PdfPageNumberField();

PdfPageCountField pageCount = new PdfPageCountField();

PdfCompositeField pageNumberLabel = new PdfCompositeField();

pageNumberLabel.AutomaticFields

= new PdfAutomaticField[] { pageNumber, pageCount };

pageNumberLabel.Brush = PdfBrushes.Black;

pageNumberLabel.Font = font;

pageNumberLabel.StringFormat = format;

pageNumberLabel.Text = "page {0} of {1}";

pageNumberLabel.Draw(bottomSpace.Graphics, pageSize.Width - margin.Right, y);



PdfImage headerImage

= PdfImage.FromFile(@"Header.png");

PointF pageLeftTop = new PointF(-margin.Left, -margin.Top);

PdfPageTemplateElement header

= new PdfPageTemplateElement(pageLeftTop, headerImage.PhysicalDimension);

header.Foreground = false;

header.Graphics.SetTransparency(0.5f);

header.Graphics.DrawImage(headerImage, 0, 0);

doc.Template.Stamps.Add(header);



PdfImage footerImage

= PdfImage.FromFile(@"Footer.png");

y = pageSize.Height - footerImage.PhysicalDimension.Height;

PointF footerLocation = new PointF(-margin.Left, y);

PdfPageTemplateElement footer

= new PdfPageTemplateElement(footerLocation, footerImage.PhysicalDimension);

footer.Foreground = false;

footer.Graphics.SetTransparency(0.5f);

footer.Graphics.DrawImage(footerImage, 0, 0);

doc.Template.Stamps.Add(footer);

}

}

}


21.07.2011. u 07:33 | 0 Komentara | Print | # | ^

How to Set PDF Font Using C#

In order to have a wonderful layout, people set formatting when they post articles to their blogs or submit their electronic document to article websites.

Font is one part of format settings, including font style and color. Generally speaking, the most frequently used font styles are Times New Roman and Arial. Also, there are many other font styles, including some special font, for example, Chinese font, Japanese font and so on.

How should we do to set font in PDF? Actually, people can set formatting well in Word and then convert it to PDF. However, it is possible that the format will lost during conversion. Therefore, some professional editors are developed for editing PDF documents. Of course, the most famous is Adobe Acrobat, which specializes in operating PDF documents.

In this post, I want to introduce one method to set PDF font by using C#. The following code can show you how to set various font styles, including special styles. And I hope that this method can be helpful for programmers who want to edit PDF font programmatically.

Before using the code, you need to install one component: Spire.PDF firstly. And add the DLL file as reference to your project.

Using the Code:

using System;

using System.Drawing;

using Spire.Pdf;

using Spire.Pdf.Graphics;

namespace Font

{

class Program

{

static void Main(string[] args)

{

//Create a pdf document.

PdfDocument doc = new PdfDocument();

// Create one page

PdfPageBase page = doc.Pages.Add();

//Draw the text

float l = page.Canvas.ClientSize.Width / 2;

PointF center = new PointF(l, l);

float r = (float)Math.Sqrt(2 * l * l);

PdfRadialGradientBrush brush

= new PdfRadialGradientBrush(center, 0f, center, r, Color.Blue, Color.Red);

PdfFontFamily[] fontFamilies

= (PdfFontFamily[])Enum.GetValues(typeof(PdfFontFamily));

float y = 10;

for (int i = 0; i < fontFamilies.Length; i++)

{

String text = String.Format("Font Family: {0}", fontFamilies[i]);

float x1 = 0;

y = 10 + i * 16;

PdfFont font1 = new PdfFont(PdfFontFamily.Courier, 14f);

PdfFont font2 = new PdfFont(fontFamilies[i], 14f);

float x2 = x1 + 10 + font1.MeasureString(text).Width;

page.Canvas.DrawString(text, font1, brush, x1, y);

page.Canvas.DrawString(text, font2, brush, x2, y);

}

//true type font - embedded.

System.Drawing.Font font = new System.Drawing.Font("Arial", 14f, FontStyle.Bold);

PdfTrueTypeFont trueTypeFont = new PdfTrueTypeFont(font);

page.Canvas.DrawString("Font Family: Arial - Embedded", trueTypeFont, brush, 0, (y = y + 16f));

//right to left

String arabicText

= "u0627u0644u0630u0647u0627u0628u0021u0020"

+ "u0628u062Fu0648u0631u0647u0020u062Du0648u0644u0647u0627u0021u0020"

+ "u0627u0644u0630u0647u0627u0628u0021u0020"

+ "u0627u0644u0630u0647u0627u0628u0021u0020"

+ "u0627u0644u0630u0647u0627u0628u0021";

trueTypeFont = new PdfTrueTypeFont(font, true);

RectangleF rctg = new RectangleF(new PointF(0, (y = y + 16f)), page.Canvas.ClientSize);

PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Right);

format.RightToLeft = true;

page.Canvas.DrawString(arabicText, trueTypeFont, brush, rctg, format);

//true type font - not embedded

font = new System.Drawing.Font("Batang", 14f, FontStyle.Italic);

trueTypeFont = new PdfTrueTypeFont(font);

page.Canvas.DrawString("Font Family: Batang - Not Embedded", trueTypeFont, brush, 0, (y = y + 16f));

//font file

String fontFileName = "Hawaii_Killer.ttf";

trueTypeFont = new PdfTrueTypeFont(fontFileName, 20f);

page.Canvas.DrawString("Hawaii Killer Font", trueTypeFont, brush, 0, (y = y + 16f));

page.Canvas.DrawString("Hawaii Killer Font, from http://www.1001freefonts.com",

new PdfFont(PdfFontFamily.Helvetica, 8f), brush, 10, (y = y + 20f));

//cjk font

PdfCjkStandardFont cjkFont = new PdfCjkStandardFont(PdfCjkFontFamily.MonotypeHeiMedium, 14f);

page.Canvas.DrawString("How to say 'Font' in Chinese? u5B57u4F53",

cjkFont, brush, 0, (y = y + 16f));

cjkFont = new PdfCjkStandardFont(PdfCjkFontFamily.HanyangSystemsGothicMedium, 14f);

page.Canvas.DrawString("How to say 'Font' in Japanese? u30D5u30A9u30F3u30C8",

cjkFont, brush, 0, (y = y + 16f));

cjkFont = new PdfCjkStandardFont(PdfCjkFontFamily.HanyangSystemsShinMyeongJoMedium, 14f);

page.Canvas.DrawString("How to say 'Font' in Korean? uAE00uAF34",

cjkFont, brush, 0, (y = y + 16f));

//Save pdf file.

doc.SaveToFile("Font.pdf");

doc.Close();

//Launching the Pdf file.

System.Diagnostics.Process.Start("Font.pdf");

}

}

}

08.07.2011. u 07:52 | 1 Komentara | Print | # | ^

<< Prethodni mjesec | Sljedeći mjesec >>

Creative Commons License
Ovaj blog je ustupljen pod Creative Commons licencom Imenovanje-Dijeli pod istim uvjetima.

< srpanj, 2011 >
P U S Č P S N
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Kolovoz 2011 (2)
Srpanj 2011 (2)
Lipanj 2011 (2)
Svibanj 2011 (2)
Travanj 2011 (3)
Ožujak 2011 (2)
Veljača 2011 (2)
Siječanj 2011 (5)
Prosinac 2010 (5)

Dnevnik.hr
Gol.hr
Zadovoljna.hr
Novaplus.hr
NovaTV.hr
DomaTV.hr
Mojamini.tv

Opis bloga

something about Excel Technology in VB.Net and C#

Linkovi

Dnevnik.hr
Video news portal Nove TV

Blog.hr
Blog servis

Igre.hr
Najbolje igre i igrice

Forum.hr
Monitor.hr