Sunday 5 August 2012

Easily Set PDF View Preference with C#,VB.NET

Preference belongs to everyone, almost everybody has preferences.  If you choose ten person and view the layout of their desktop, the result may make you feel it is amazing that all the desktops are different both in the backdrop and the position of content. What makes this? It is view preference.
Recently, I read a book, a research shows that the view preference of people in American differs from people in China, the view preference of American is "F", but the Chinese is "Column". Thus, satisfying the view preference of different people is significant. For software applications, providing the function of setting the view preference by people themselves gains great popularity. Of course, as to PDF creation component Spire.PDF users, viewing the PDF page according to their own like is rather easy. Please follow the below procedure.


Procedure
Step1. Create a new project .

1.Create a new project in Console Application in Visual Studio.

2.Set the Target framework to be .NET Framework 2 or above.

Step2. Add reference.
1.Add System Drawing and Spire.PDF Dll as references in Project at the top of the Visual Studio.

2.Add following using at the top of the method.

C#
using System.Drawing;using Spire.Pdf;using Spire.Pdf.Graphics;

VB.NET
Imports System.DrawingImports Spire.PdfImports Spire.Pdf.Graphics

Step3. Set PDF view preference.
1.Create a new PDF Document.

C# Code:
            //Create a pdf document.            PdfDocument doc = new PdfDocument();
            // Create one page            PdfPageBase page = doc.Pages.Add();

VB.NET Code:
            'Create a pdf document.            Dim doc As New PdfDocument()
            ' Create one page            Dim page As PdfPageBase = doc.Pages.Add()
2. Draw the created page.

In a first sight, you may find that this step is a little complicated, because the code is really long, but the fact is not like that. You can divide this step to be three: page header, title and content. If you have icon and reference content, you can set them, but not all PDF pages have an icon and reference content. If you have an existing PDF Document and want to set view preference, this step should be avoided.

C# Code:
private static void DrawPage(PdfPageBase page)
        {
            float pageWidth = page.Canvas.ClientSize.Width;
            float y = 0;
            //page header            PdfPen pen1 = new PdfPen(Color.LightGray, 1f);
            PdfBrush brush1 = new PdfSolidBrush(Color.LightGray);
            PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Arial", 8f, FontStyle.Italic));
            PdfStringFormat format1 = new PdfStringFormat(PdfTextAlignment.Right);
            String text = "Demo of Spire.Pdf";
            page.Canvas.DrawString(text, font1, brush1, pageWidth, y, format1);
            SizeF size = font1.MeasureString(text, format1);
            y = y + size.Height + 1;
            page.Canvas.DrawLine(pen1, 0, y, pageWidth, y);
            //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;
            text = "Summary of Science";
            page.Canvas.DrawString(text, font2, brush2, pageWidth / 2, y, format2);
            size = font2.MeasureString(text, format2);
            y = y + size.Height + 6;
            //icon            PdfImage image = PdfImage.FromFile
            (@"C:\Program Files\e-iceblue\Spire.Pdf\Demos\Data\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
            (@"C:\Program Files\e-iceblue\Spire.Pdf\Demos\Data\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);
        }
VB.NET Code:

Private Shared Sub DrawPage(ByVal page As PdfPageBase)
            Dim pageWidth As Single = page.Canvas.ClientSize.Width
            Dim y As Single = 0
            'page header            Dim pen1 As New PdfPen(Color.LightGray, 1.0F)
            Dim brush1 As PdfBrush = New PdfSolidBrush(Color.LightGray)
            Dim font1 As New PdfTrueTypeFont(New Font("Arial", 8.0F, FontStyle.Italic))
            Dim format1 As New PdfStringFormat(PdfTextAlignment.Right)
            Dim text As String = "Demo of Spire.Pdf"
            page.Canvas.DrawString(text, font1, brush1, pageWidth, y, format1)
            Dim size As SizeF = font1.MeasureString(text, format1)
            y = y + size.Height + 1
            page.Canvas.DrawLine(pen1, 0, y, pageWidth, y)
            'title            y = y + 5
            Dim brush2 As PdfBrush = New PdfSolidBrush(Color.Black)
            Dim font2 As New PdfTrueTypeFont(New Font("Arial", 16.0F, FontStyle.Bold))
            Dim format2 As New PdfStringFormat(PdfTextAlignment.Center)
            format2.CharacterSpacing = 1.0F
            text = "Summary of Science"
            page.Canvas.DrawString(text, font2, brush2, pageWidth / 2, y, format2)
            size = font2.MeasureString(text, format2)
            y = y + size.Height + 6
            'icon            Dim image As PdfImage = PdfImage.FromFile
            ("C:\Program Files\e-iceblue\Spire.Pdf\Demos\Data\Wikipedia_Science.png ")
            page.Canvas.DrawImage(image, New PointF(pageWidth - image.PhysicalDimension.Width, y))
            Dim imageLeftSpace As Single = pageWidth - image.PhysicalDimension.Width - 2
            Dim imageBottom As Single = image.PhysicalDimension.Height + y
            'refenrence content            Dim font3 As New PdfTrueTypeFont(New Font("Arial", 9.0F))
            Dim format3 As New PdfStringFormat()
            format3.ParagraphIndent = font3.Size * 2
            format3.MeasureTrailingSpaces = True
            format3.LineSpacing = font3.Size * 1.5F
            Dim text1 As String = "(All text and picture from "
            Dim text2 As String = "Wikipedia"
            Dim text3 As String = ", the free encyclopedia)"
            page.Canvas.DrawString(text1, font3, brush2, 0, y, format3)
            size = font3.MeasureString(text1, format3)
            Dim x1 As Single = size.Width
            format3.ParagraphIndent = 0
            Dim font4 As New PdfTrueTypeFont(New Font("Arial", 9.0F, FontStyle.Underline))
            Dim brush3 As PdfBrush = 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            Dim format4 As New PdfStringFormat()
            text = System.IO.File.ReadAllText
          ("C:\Program Files\e-iceblue\Spire.Pdf\Demos\Data\Summary_of_Science.txt ")
            Dim font5 As New PdfTrueTypeFont(New Font("Arial", 10.0F))
            format4.LineSpacing = font5.Size * 1.5F
            Dim textLayouter As New PdfStringLayouter()
            Dim imageLeftBlockHeight As Single = imageBottom - y
            Dim result As PdfStringLayoutResult _
                = textLayouter.Layout(text, font5, format4, New SizeF(imageLeftSpace, imageLeftBlockHeight))
            If result.ActualSize.Height < imageBottom - y Then
                imageLeftBlockHeight = imageLeftBlockHeight + result.LineHeight
                result = textLayouter.Layout(text, font5, format4, New SizeF(imageLeftSpace, imageLeftBlockHeight))
            End If
            For Each line As LineInfo In result.Lines
                page.Canvas.DrawString(line.Text, font5, brush2, 0, y, format4)
                y = y + result.LineHeight
            Next line
            Dim textWidget As New PdfTextWidget(result.Remainder, font5, brush2)
            Dim textLayout As New PdfTextLayout()
            textLayout.Break = PdfLayoutBreakType.FitPage
            textLayout.Layout = PdfLayoutType.Paginate
            Dim bounds As New RectangleF(New PointF(0, y), page.Canvas.ClientSize)
            textWidget.StringFormat = format4
            textWidget.Draw(page, bounds, textLayout)
        End Sub
3.Set PDF view preferences.

C# Code:
            //set view reference            doc.ViewerPreferences.CenterWindow = true;
            doc.ViewerPreferences.DisplayTitle = false;
            doc.ViewerPreferences.FitWindow = false;
            doc.ViewerPreferences.HideMenubar = true;
            doc.ViewerPreferences.HideToolbar = true;
            doc.ViewerPreferences.PageLayout = PdfPageLayout.SinglePage;

VB.NET Code:
            'set view reference            doc.ViewerPreferences.CenterWindow = True
            doc.ViewerPreferences.DisplayTitle = False
            doc.ViewerPreferences.FitWindow = False
            doc.ViewerPreferences.HideMenubar = True
            doc.ViewerPreferences.HideToolbar = True
            doc.ViewerPreferences.PageLayout = PdfPageLayout.SinglePage
Step4. Save the PDF file and launch it.

C# Code:
            //Save pdf file.            doc.SaveToFile("ViewerPreference.pdf");
            doc.Close();
            //Launching the Pdf file.            System.Diagnostics.Process.Start("ViewerPreference.pdf");

VB.NET Code:
            'Save pdf file.            doc.SaveToFile("ViewerPreference.pdf")
            doc.Close()
            'Launching the Pdf file.            Process.Start("ViewerPreference.pdf")

Preview
            

No comments:

Post a Comment

Popular posts