Spire.Pdf 的各种操作总结
简介
试验新产品总是给我带来许多挑战,当然这也是一个引进创新技术的好方法。在这里我要跟大家分享的是使用Spire.Pdf的过程,它是来自E-iceblue公司的轻便PDF程序库。
设计情节
我以前经常没事就搞搞PDF。Spire.Pdf是用C# 写的PDF组件。他们自己声称:
先决条件
首先,从这下载它的免费版:http://freepdf.codeplex.com/
安装下载的软件,结果你会得到两个dll文件(Spire.License.dll和 Spire.Pdf.dll),如下图所示在你的程序中添加他们的引用:
创建PDF并设置它的格式
创建PDF和使用Spire.Pdf一样简单。这就意味着,仅仅用Spire.Pdf写几行代码就可以实现了。参照以下代码:
//Create a pdf document. PdfDocument doc = new PdfDocument(); // Create one page PdfPageBase page = doc.Pages.Add(); //Draw the text page.Canvas.DrawString("Hello, I'm Created By SPIRE.PDF!", new PdfFont(PdfFontFamily.TimesRoman, 30f), new PdfSolidBrush(Color.Black), 10, 10); //Save pdf file. doc.SaveToFile("MyFirstPDF.pdf"); doc.Close();
以上代码创建了一个单页的PDF文件
现在我们在同一个PDF文件中再加点料,像边框啊,水印啦,再加一些有格式设置的图片。我为了让我这篇教程看上去比较简洁,就把所有代码附在了示例中。它是一个包含了所有代码的小型windows窗口程序,你可以从这里下载。
转换成其它格式并设置相应的格式:
基本上每个程序员都被这类的需求困扰过。从一种格式转换成另一种格式在开发模式中是一件痛苦的事情。举例来说,现在有很多程序员会问如何把HTML页面转换为PDF?Spire.Pdf对这个问题给出了简单的解决方法。不仅仅如此,Spire.Pdf还提供了如下的转换:
HTML To PDF
· XPS to PDF
· PDF to XPS
· PDF to Image
HTML到PDF的转换:
我上面说的,这是几乎每个开发人员都需要的功能。用 Spire.Pdf的话,转换简直是飞一般的感觉。Spire.Pdf包含创建方法“LoadFromHTML”,它可以用URL做为参数而返回一个PDF文件。
//create PdfDocument instance PdfDocument doc = new PdfDocument(); //load html from URL string url = "http://www.google.com"; var thread = new Thread(() => { doc.LoadFromHTML(url, false, true, true); }); //set to single thread thread.SetApartmentState(ApartmentState.STA); thread.Start(); thread.Join(); //save to PDF document doc.SaveToFile("FromHTML.pdf", FileFormat.PDF); doc.Close(); System.Diagnostics.Process.Start("FromHTML.pdf");
从上面的几行代码中,你可以观察到我尝试从URL中创建一个PDF文件,只是一行叫做LoadFromHTML的方法就可以实现神奇的转换,下面几行为保存文件。下面在转换中有趣的事情就是SPIRE.PDF将链接地址的页面自动转换为PDF链接。
PDF到XPS的转换:
XPS,是另外一个Microsoft在2006年开发的流行文件格式。 Spire.Pdf也提供了将目标文件保存为XPS格式的选择。看下面代码, Spire.Pdf仅仅是加载了PDF文件并使用SaveToFile方法将文件保存为需要的格式。
//create PdfDocument instance PdfDocument doc = new PdfDocument(); //load html from URL string url = "http://www.google.com"; var thread = new Thread(() => { doc.LoadFromHTML(url, false, true, true); }); //set to single thread thread.SetApartmentState(ApartmentState.STA); thread.Start(); thread.Join(); //save to PDF document doc.SaveToFile("FromHTML.pdf", FileFormat.PDF); doc.Close(); System.Diagnostics.Process.Start("FromHTML.pdf");
XPS到PDF的转换:
Spire.Pdf 也提供了上述方法的逆向转换,那就是从 XPS 到 PDF 的转换,有所不同的是加载文件方法的不同。这里我们使用方法 LoadFromXPS 就可以了。
//open xps document PdfDocument doc = new PdfDocument(); doc.LoadFromXPS(file); //convert to pdf file. doc.SaveToFile("XPSToPDF.pdf");
<span style="line-height: 18px; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
在Spire.Pdf使用枚举FileFormat,我们可以有4种格式的输出文件:DOC, HTML, PDF 和XPS。
撷取PDF –从PDF中撷取文本/图片
在平常工作中,我遇到过需要单独从PDF文件中撷取图片或文本的问题。
Spire.Pdf 也给出了简洁的解决方案。 它 做的很好的地方是,提供一个单行的代码就是调用“ that ”就搞定了。
//Create a pdf document. PdfDocument doc = new PdfDocument(); // Load the PDF Document doc.LoadFromFile(@"G:\sample.pdf"); // Image collection to hold IList<Image> images = new List<Image>(); // Loop thru each pages foreach (PdfPageBase page in doc.Pages) { // Check that page contains any images if (page.ExtractImages() != null) { foreach (Image image in page.ExtractImages()) { images.Add(image); } } } //close the document doc.Close(); //save image int index = 0; foreach (Image image in images) { String imageFileName = String.Format("Image-{0}.png", index++); image.Save(imageFileName, ImageFormat.Png); }
在以上代码中图片被保存为png格式,输出界面如下图:
从PDF中撷取文本也是很简单。每个编程人员的职业生涯都会面对的撷取。Spire.Pdf可以用以下代码来解决:
//Create a pdf document. PdfDocument doc = new PdfDocument(); // Load the PDF Document doc.LoadFromFile(@"G:\sample.pdf"); // String for hold the extracted text StringBuilder buffer = new StringBuilder(); foreach (PdfPageBase page in doc.Pages) { buffer.Append(page.ExtractText()); } doc.Close(); //save text String fileName = "TextInPdf.txt"; File.WriteAllText(fileName, buffer.ToString()); buffer = null;
结论