Showing posts with label pdf. Show all posts
Showing posts with label pdf. Show all posts

Sunday, 5 August 2012

Set Image Qaulity in Word to PDF Conversion with C#, VB.NET

When we convert Word to PDF, we can easily manage the format of word document text in different ways. But for many images contained word files, we cannot control it very well since the size of the output PDF file is always larger than it of the original word document, which, sometimes, can bring inconvenience. Thus, in order to meet people's need, I would like to share a simple method to set the image quality when we convert word to PDF 

Setting the image quality, to a large extent, is to manage the size of the images in output PDF document. New version Spire.Doc 4.2.8 helps me set the image quality when convert word to PDF in a quick way with C#, VB.NET.


How to set image quality in word to PDF conversion with C#,VB.NET
I am not sure whether other .net word component can realize this function, so please install Spire.Doc first in your system.


Step1. Create a project
1.
     Create a new project in Visual Studio.

2.     Add Spire.Doc Dll as reference. and then, add using at the top of the method. Please see below:

         C# 
         using System;         using System.Collections.Generic;         using System.Linq;         using System.Text;         using Spire.Doc;         namespace image_quality         {             class Program             {                 static void Main(string[] args)                 {                     .                  }                                      }         }
             VB.NET 

                Imports Collections.Generic             Imports System.Linq             Imports System.Text             Imports Spire.Doc             Namespace image_quality                        Class Program                                   Private Shared Sub Main(args As String())                                 .                                   End Sub                        End Class              End Namespace

Step2. Load a Word file from system
C# Code:
Document doc = new Document();
doc.LoadFromFile(@"C:\Program Files\Spire.Doc\image quality.doc", FileFormat.Doc);

VB.NET Code:
Dim doc As New Document()
doc.LoadFromFile(@"C:\Program Files\Spire.Doc\image quality.doc", FileFormat.Doc);
Step3. Set image quality.There are six images in the first page of my doc document,  I set the size of images all to be "20".  If I have only one image, the size of the image is also"20", so you can set it as your own need.

C# Code:
doc.JPEGQuality = 20;

VB.NET Code:
doc.JPEGQuality = 20;

Step4. Save and launch the fileC# Code:
          doc.SaveToFile("Image.pdf", FileFormat.PDF);
          System.Diagnostics.Process.Start("Image.pdf");

VB.NET Code:
          doc.SaveToFile("Image.pdf", FileFormat.PDF);
          System.Diagnostics.Process.Start("Image.pdf");


Preview
                      
                                                         Word Images
                                
                                                               PDF Images

The original word document size is 63KB. If I convert the word file directly to PDF, it is 80.5 KB. After I set the image quality, it changes to 58 KB. That is the clear difference.

When we convert Word to PDF, we can easily manage the format of word document text in different ways. But for many images contained word files, we cannot control it very well since the size of the output PDF file is always larger than it of the original word document, which, sometimes, can bring inconvenience. Thus, in order to meet people's need, I would like to share a simple method to set the image quality when we convert word to PDF 

Setting the image quality, to a large extent, is to manage the size of the images in output PDF document. New version Spire.Doc 4.2.8 helps me set the image quality when convert word to PDF in a quick way with C#, VB.NET.


How to set image quality in word to PDF conversion with C#,VB.NET
I am not sure whether other .net word component can realize this function, so please install Spire.Doc first in your system.


Step1. Create a project
1.
     Create a new project in Visual Studio.

2.     Add Spire.Doc Dll as reference. and then, add using at the top of the method. Please see below:

         C# 
         using System;         using System.Collections.Generic;         using System.Linq;         using System.Text;         using Spire.Doc;         namespace image_quality         {             class Program             {                 static void Main(string[] args)                 {                     .                  }                                      }         }
             VB.NET 

                Imports Collections.Generic             Imports System.Linq             Imports System.Text             Imports Spire.Doc             Namespace image_quality                        Class Program                                   Private Shared Sub Main(args As String())                                 .                                   End Sub                        End Class              End Namespace

Step2. Load a Word file from system
C# Code:
Document doc = new Document();
doc.LoadFromFile(@"C:\Program Files\Spire.Doc\image quality.doc", FileFormat.Doc);

VB.NET Code:
Dim doc As New Document()
doc.LoadFromFile(@"C:\Program Files\Spire.Doc\image quality.doc", FileFormat.Doc);
Step3. Set image quality.There are six images in the first page of my doc document,  I set the size of images all to be "20".  If I have only one image, the size of the image is also"20", so you can set it as your own need.

C# Code:
doc.JPEGQuality = 20;

VB.NET Code:
doc.JPEGQuality = 20;

Step4. Save and launch the fileC# Code:
          doc.SaveToFile("Image.pdf", FileFormat.PDF);
          System.Diagnostics.Process.Start("Image.pdf");

VB.NET Code:
          doc.SaveToFile("Image.pdf", FileFormat.PDF);
          System.Diagnostics.Process.Start("Image.pdf");


Preview
                      
                                                         Word Images
                                
                                                               PDF Images

The original word document size is 63KB. If I convert the word file directly to PDF, it is 80.5 KB. After I set the image quality, it changes to 58 KB. That is the clear difference.

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
            

Popular posts