加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C#创建、读取PDF

(2011-07-26 20:33:51)
标签:

c创建读取pdf

利用itextsharp

创建PDF文档
PDF文档格式是网络中一种重要的文档格式,在某些领域应用比Office系列文档格式还要广泛。因此在应用程序的需求中经常需要对PDF格式的文档进行创建、修改和读取等操作。本节将介绍PDF文档的创建。
1.目的说明
本实例主要介绍如何创建PDF文档。
2.操作步骤
(1)创建一个Windows控制台应用程序,命名为CreatePDFDemo。
(2)添加对iTextSharp的引用,iTextSharp是一个开源的PDF操作类库。
(3)在“Program.cs”文件中添加如下引用。
using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
(4)直接修改“Program.cs”文件的代码如下。
namespace CreatePDFDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("创建一个PDF文档");
            // 创建一个Document对象
            Document document = new Document();
            try
            {
                // 创建文档
                PdfWriter.GetInstance(document, new FileStream(@"c:\Create.pdf", FileMode.Create));
                // 打开文档
                document.Open();
                document.Add(new Paragraph("PDF"));
                document.Add(new Paragraph("PDF"));
                document.Add(new Paragraph("PDF"));
                document.Add(new Paragraph("PDF"));
                document.Add(new Paragraph("PDF"));
            }
            catch (DocumentException de)
            {
                Console.Error.WriteLine(de.Message);
            }
            catch (IOException ioe)
            {
                Console.Error.WriteLine(ioe.Message);
            }
            // 关闭文档
            document.Close();
        }
    }
}
3.运行结果
运行程序,结果如图8.44所示。
图8.44  运行结果
可以使用Adobe Reader来查看在C盘根目录下生成的PDF文档,如图8.45所示。
图8.45  运行结果
8.13  设置PDF文档页面大小
PDF文档是可以设置页面大小的,之前创建的PDF文档是默认大小的。本节将介绍在创建PDF文档时,进行文档页面大小的设置。
1.目的说明
本实例主要介绍如何设置PDF文档页面的大小。
2.操作步骤
(1)创建一个Windows控制台应用程序,命名为SetPdfSizeDemo。
(2)添加对iTextSharp的引用。
(3)在“Program.cs”文件中添加如下引用。
using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
(4)直接修改“Program.cs”文件的代码如下。
namespace SetPdfSizeDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("设置页面大小");
            // 设置页面
            Rectangle pageSize = new Rectangle(320, 240);
            pageSize.BackgroundColor = new Color(0xFF, 0xFF, 0xDE);
            Document document = new Document(pageSize);
            try
            {
                //创建文档
                PdfWriter.GetInstance(document, new FileStream(@"C:\Size.pdf", FileMode.Create));
                // 打开文档
                document.Open();
                // 添加文档内容
                for (int i = 0; i < 5; i++)
                {
                    document.Add(new Paragraph("PDF ,PDF ,PDF ,PDF ,PDF"));
                }
            }
            catch (DocumentException de)
            {
                Console.Error.WriteLine(de.Message);
            }
            catch (IOException ioe)
            {
                Console.Error.WriteLine(ioe.Message);
            }
            // 关闭文档
            document.Close();
        }
    }
}
3.运行结果
运行程序,结果如图8.46所示。
图8.46  运行结果
打开创建的PDF文档,如图8.47所示。
图8.47  运行结果
8.14  设置PDF文档边界
同Office中的Word文档一样,PDF文档也可以设置文档的格式,比如文档边界等。本节将介绍如何在C#中生成PDF文档的时候设置PDF文档的边界。
1.目的说明
本实例主要介绍如何设置PDF文档边界。
2.操作步骤
(1)创建一个Windows控制台应用程序,命名为SetPdfMarginDemo。
(2)添加对iTextSharp的引用。
(3)在“Program.cs”文件中添加如下引用。
using System;
using System.IO;
using System.Diagnostics;
using iTextSharp.text;
using iTextSharp.text.pdf;
(4)直接修改“Program.cs”文件的代码如下。
            Console.WriteLine("设置边界");
            // 声明文档变量
            Document document = new Document(PageSize.A5, 36, 72, 108, 180);
            try
            {
                // 创建PDF文档
                PdfWriter.GetInstance(document, new FileStream(@"c:\Margin.pdf", FileMode.Create));
                // 打开文档
                document.Open();
                // 添加部分内容
                Paragraph paragraph = new Paragraph();
                paragraph.Alignment = Element.ALIGN_JUSTIFIED;
                for (int i = 0; i < 20; i++)
                {
                    paragraph.Add("PDF, PDF, PDF, PDF, PDF, PDF, PDF, PDF, PDF, PDF, PDF, PDF, PDF, PDF");
                }
                document.Add(paragraph);
            }
            catch (DocumentException de)
            {
                Console.Error.WriteLine(de.Message);
            }
            catch (IOException ioe)
            {
                Console.Error.WriteLine(ioe.Message);
            }
            // 关闭文档
            document.Close();
        }
    }
}
3.运行结果
运行程序,结果如图8.48所示。
打开创建的PDF文档,如图8.49所示。
图8.48  运行结果                           图8.49  运行结果
8.15  设置PDF文档信息
PDF文档中可以包含一些与文档内容本身无关的信息,这部分信息可以包括文档的题目和作者名等一些额外的信息,便于对PDF文档进行其他处理。本节将介绍设置PDF文档信息的方法。
1.目的说明
本实例主要介绍如何设置PDF文档信息。
2.操作步骤
(1)创建一个Windows控制台应用程序,命名为SetPdfInfoDemo。
(2)添加对iTextSharp的引用。
(3)在“Program.cs”文件中添加如下引用。
using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
(4)直接修改“Program.cs”文件的代码如下。
namespace SetPdfInfoDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("设置信息");
            // 声明文档变量
            Document document = new Document();
            try
            {
                // 创建文档
                PdfWriter.GetInstance(document, new FileStream(@"C:\Info.pdf", FileMode.Create));
                // 添加文档信息
                document.AddTitle("PDFInfo");
                document.AddSubject("Demo of PDFInfo");
                document.AddKeywords("Info, PDF, Demo");
                document.AddCreator("SetPdfInfoDemo");
                document.AddAuthor("Z");
                document.Open();
                // 添加文档内容
                document.Add(new Paragraph("PDF, PDF, PDF, PDF, PDF"));
                document.Add(new Paragraph("PDF, PDF, PDF, PDF, PDF"));
                document.Add(new Paragraph("PDF, PDF, PDF, PDF, PDF"));
                document.Add(new Paragraph("PDF, PDF, PDF, PDF, PDF"));
                document.Add(new Paragraph("PDF, PDF, PDF, PDF, PDF"));
            }
            catch (DocumentException de)
            {
                Console.Error.WriteLine(de.Message);
            }
            catch (IOException ioe)
            {
                Console.Error.WriteLine(ioe.Message);
            }
            // 关闭文档
            document.Close();
        }
    }
}
3.运行结果
运行程序,结果如图8.50所示。
图8.50  运行结果
查看创建的PDF文档,如图8.51所示。单击“文件”|“属性”命令,可以查看文档的信息,如图8.52所示。
图8.51  运行结果
图8.52  文档信息
8.16  新建PDF文档页
与Office中的Word文档一样,一个PDF文档是由很多PDF页面构成的,可以在C#中很方便地对这些不同的页面进行控制。本节将介绍新建PDF文档页面的内容。
1.目的说明
本实例主要介绍如何新建PDF文档页。
2.操作步骤
(1)创建一个Windows控制台应用程序,命名为CreatePdfPageDemo。
(2)添加对iTextSharp的引用。
(3)在“Program.cs”文件中添加如下引用。
using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
(4)直接修改“Program.cs”文件的代码如下。
namespace CreatePdfPageDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("新建文档页面");
            // 声明文档变量
            Document document = new Document();
            try
            {
                // 创建PDF文档
                PdfWriter.GetInstance(document, new FileStream(@"C:\NewPage.pdf", FileMode.Create));
                // 在第一页添加页眉
                HeaderFooter header = new HeaderFooter(new Phrase("PDF11111"), false);
                document.Header = header;
                // 打开文档
                document.Open();
                // 第二页是横向的A4
                document.SetPageSize(PageSize.A4.Rotate());
                // 添加页脚
                HeaderFooter footer = new HeaderFooter(new Phrase("PDF22222 "), true);
                document.Footer = footer;
                // 第一页内容
                document.Add(new Paragraph("PDF1, PDF1, PDF1, PDF1, PDF1"));
                document.Add(new Paragraph("PDF1, PDF1, PDF1, PDF1, PDF1"));
                document.Add(new Paragraph("PDF1, PDF1, PDF1, PDF1, PDF1"));
                document.Add(new Paragraph("PDF1, PDF1, PDF1, PDF1, PDF1"));
                document.Add(new Paragraph("PDF1, PDF1, PDF1, PDF1, PDF1"));
                // 新建一页
                document.NewPage();
                // 第二页内容
                // 添加第二页内容
                document.Add(new Paragraph("PDF2, PDF2, PDF2, PDF2, PDF2"));
                document.Add(new Paragraph("PDF2, PDF2, PDF2, PDF2, PDF2"));
                document.Add(new Paragraph("PDF2, PDF2, PDF2, PDF2, PDF2"));
                document.Add(new Paragraph("PDF2, PDF2, PDF2, PDF2, PDF2"));
                document.Add(new Paragraph("PDF2, PDF2, PDF2, PDF2, PDF2"));
                // 从下页开始取消页眉
                document.ResetHeader();
                // 新建一页
                document.NewPage();
                // 第三页内容
                // 添加第三页内容
                document.Add(new Paragraph("PDF3, PDF3, PDF3, PDF3, PDF3"));
                document.Add(new Paragraph("PDF3, PDF3, PDF3, PDF3, PDF3"));
                document.Add(new Paragraph("PDF3, PDF3, PDF3, PDF3, PDF3"));
                document.Add(new Paragraph("PDF3, PDF3, PDF3, PDF3, PDF3"));
                document.Add(new Paragraph("PDF3, PDF3, PDF3, PDF3, PDF3"));
                // 重新开始页面计数
                document.ResetPageCount();
                // 新建一页
                document.NewPage();
                // 第四页
                // 添加第四页内容
                document.Add(new Paragraph("PDF4, PDF4, PDF4, PDF4, PDF4"));
                document.Add(new Paragraph("PDF4, PDF4, PDF4, PDF4, PDF4"));
                document.Add(new Paragraph("PDF4, PDF4, PDF4, PDF4, PDF4"));
                document.Add(new Paragraph("PDF4, PDF4, PDF4, PDF4, PDF4"));
                document.Add(new Paragraph("PDF4, PDF4, PDF4, PDF4, PDF4"));
            }
            catch (DocumentException de)
            {
                Console.Error.WriteLine(de.Message);
            }
            catch (IOException ioe)
            {
                Console.Error.WriteLine(ioe.Message);
            }
            // 关闭文档
            document.Close();
        }
    }
}
3.运行结果
运行程序,结果如图8.53所示。
图8.53  运行结果
打开创建的PDF文档,第一页如图8.54所示。
图8.54  第一页
第二页如图8.55所示。第三页如图8.56所示。
图8.55  第二页                                 图8.56  第三页
第四页如图8.57所示。
图8.57  第四页
8.17  设置PDF文档的默认格式
PDF文档除了能够以默认的格式进行显示以外,还有多种其他的显示格式,这些显示格式可以在创建PDF文档时进行设置。本节介绍这方面的内容。
1.目的说明
本实例主要介绍如何设置PDF文档的默认格式。
2.操作步骤
(1)创建一个Windows控制台应用程序,命名为CreatePdfOtherDemo。
(2)添加对iTextSharp的引用。
(3)在“Program.cs”文件中添加如下引用。
using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
(4)直接修改“Program.cs”文件的代码如下。
namespace CreatePdfOtherDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("添加其他内容");
            // 声明文档变量
            Document document = new Document();
            try
            {
                // 创建几个PDF文档
                PdfWriter writerA = PdfWriter.GetInstance(document, new FileStream (@"C:\Other1.pdf", FileMode.Create));
                writerA.ViewerPreferences = PdfWriter.PageLayoutTwoColumnLeft;
                PdfWriter writerB = PdfWriter.GetInstance(document, new FileStream (@"C:\Other2.pdf", FileMode.Create));
                writerB.ViewerPreferences = PdfWriter.HideMenubar | PdfWriter. HideToolbar;
                PdfWriter writerC = PdfWriter.GetInstance(document, new FileStream (@"C:\Other3.pdf", FileMode.Create));
                writerC.ViewerPreferences = PdfWriter.PageLayoutTwoColumnLeft | PdfWriter.PageModeFullScreen | PdfWriter.NonFullScreenPageModeUseThumbs;
                // 添加页眉
                HeaderFooter header = new HeaderFooter(new Phrase("This is a header"), false);
                document.Header = header;
                // 打开文档
                document.Open();
                // 转换为横向A4幅面
                document.SetPageSize(PageSize.A4.Rotate());
                // 添加页脚
                HeaderFooter footer = new HeaderFooter(new Phrase("This is page: "), true);
                document.Footer = footer;
                // 向页面上添加内容
                // 第一页
                document.Add(new Paragraph("PDF1, PDF1, PDF1, PDF1, PDF1"));
                document.Add(new Paragraph("PDF1, PDF1, PDF1, PDF1, PDF1"));
                document.Add(new Paragraph("PDF1, PDF1, PDF1, PDF1, PDF1"));
                document.Add(new Paragraph("PDF1, PDF1, PDF1, PDF1, PDF1"));
                document.Add(new Paragraph("PDF1, PDF1, PDF1, PDF1, PDF1"));
                // 添加新页面
                document.NewPage();
                // 第二页
                // 添加第二页内容
                document.Add(new Paragraph("PDF2, PDF2, PDF2, PDF2, PDF2"));
                document.Add(new Paragraph("PDF2, PDF2, PDF2, PDF2, PDF2"));
                document.Add(new Paragraph("PDF2, PDF2, PDF2, PDF2, PDF2"));
                document.Add(new Paragraph("PDF2, PDF2, PDF2, PDF2, PDF2"));
                document.Add(new Paragraph("PDF2, PDF2, PDF2, PDF2, PDF2"));
                // 取消页眉
                document.ResetHeader();
                // 添加新页面
                document.NewPage();
                // 第三页
                // 添加新内容
                document.Add(new Paragraph("PDF3, PDF3, PDF3, PDF3, PDF3"));
                document.Add(new Paragraph("PDF3, PDF3, PDF3, PDF3, PDF3"));
                document.Add(new Paragraph("PDF3, PDF3, PDF3, PDF3, PDF3"));
                document.Add(new Paragraph("PDF3, PDF3, PDF3, PDF3, PDF3"));
                document.Add(new Paragraph("PDF3, PDF3, PDF3, PDF3, PDF3"));
                // 重新开始页面计数
                document.ResetPageCount();
                // 新建一页
                document.NewPage();
                // 第四页
                // 添加第四页内容
                document.Add(new Paragraph("PDF4, PDF4, PDF4, PDF4, PDF4"));
                document.Add(new Paragraph("PDF4, PDF4, PDF4, PDF4, PDF4"));
                document.Add(new Paragraph("PDF4, PDF4, PDF4, PDF4, PDF4"));
                document.Add(new Paragraph("PDF4, PDF4, PDF4, PDF4, PDF4"));
                document.Add(new Paragraph("PDF4, PDF4, PDF4, PDF4, PDF4"));
            }
            catch (DocumentException de)
            {
                Console.Error.WriteLine(de.Message);
            }
            catch (IOException ioe)
            {
                Console.Error.WriteLine(ioe.Message);
            }
            // 关闭文档
            document.Close();
        }
    }
}
3.运行结果
运行程序,结果如图8.58所示。
图8.58  运行结果
程序中一次创建了三个PDF文档,其中Other1.pdf如图8.59所示,即一次显示多个文档。
图8.59  Other1文档的显示形式 
Other2.pdf如图8.60所示,隐藏了菜单栏和工具栏,分页显示。
图8.60  Other2文档的显示形式
Other3.pdf如图8.61所示,Adobe Reader会提示是否进入全屏显示。单击“是”按钮,如图8.62所示。
图8.61  Other3文档的显示形式                    图8.62  Other3文档的显示形式
8.18  读取PDF文档
之前在各个实例中介绍了如何创建各种类型的PDF文档,并进行了不同的设置。本节将主要介绍如何从已有的PDF文档中读取现有的内容。
1.目的说明
本实例主要介绍如何读取PDF文档。
2.操作步骤
(1)创建一个Windows控制台应用程序,命名为ReadPdfDemo。
(2)添加对iTextSharp的引用。
(3)在“Program.cs”文件中添加如下引用。
using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
(4)直接修改“Program.cs”文件的代码如下。
namespace ReadPdfDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("读取PDF文档");
            try
            {
                // 创建一个PdfReader对象
                PdfReader reader = new PdfReader(@"C:\origin.pdf");
                // 获得文档页数
                int n = reader.NumberOfPages;
                // 获得第一页的大小
                Rectangle psize = reader.GetPageSize(1);
                float width = psize.Width;
                float height = psize.Height;
                // 创建一个文档变量
                Document document = new Document(psize, 50, 50, 50, 50);
                // 创建该文档
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(@"C:\Read.pdf", FileMode.Create));
                // 打开文档
                document.Open();
                // 添加内容
                PdfContentByte cb = writer.DirectContent;
                int i = 0;
                int p = 0;
                Console.WriteLine("一共有 " + n + " 页.");
                while (i < n)
                {
                    document.NewPage();
                    p++;
                    i++;
                    PdfImportedPage page1 = writer.GetImportedPage(reader, i);
                    cb.AddTemplate(page1, .5f, 0, 0, .5f, 0, height / 2);
                    Console.WriteLine("处理第 " + i + " 页");
                    if (i < n)
                    {
                        i++;
                        PdfImportedPage page2 = writer.GetImportedPage(reader, i);
                        cb.AddTemplate(page2, .5f, 0, 0, .5f, width / 2, height / 2);
                        Console.WriteLine("处理第 " + i + " 页");
                    }
                    if (i < n)
                    {
                        i++;
                        PdfImportedPage page3 = writer.GetImportedPage(reader, i);
                        cb.AddTemplate(page3, .5f, 0, 0, .5f, 0, 0);
                        Console.WriteLine("处理第 " + i + " 页");
                    }
                    if (i < n)
                    {
                        i++;
                        PdfImportedPage page4 = writer.GetImportedPage(reader, i);
                        cb.AddTemplate(page4, .5f, 0, 0, .5f, width / 2, 0);
                        Console.WriteLine("处理第 " + i + " 页");
                    }
                    cb.SetRGBColorStroke(255, 0, 0);
                    cb.MoveTo(0, height / 2);
                    cb.LineTo(width, height / 2);
                    cb.Stroke();
                    cb.MoveTo(width / 2, height);
                    cb.LineTo(width / 2, 0);
                    cb.Stroke();
                    BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
                    cb.BeginText();
                    cb.SetFontAndSize(bf, 14);
                    cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "page " + p + " of " + ((n / 4) + (n % 4 > 0 ? 1 : 0)), width / 2, 40, 0);
                    cb.EndText();
                }
                // 关闭文档
                document.Close();
            }
            catch (Exception de)
            {
                Console.Error.WriteLine(de.Message);
                Console.Error.WriteLine(de.StackTrace);
            }
        }
    }
}
3.运行结果
运行程序,结果如图8.63所示。
查看创建的PDF文档,如图8.64所示。
图8.63  运行结果                             图8.64  运行结果

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有