生成PDF文档我们通常可以通过文档转换的形式来得到想要的PDF,但我们也可以通过最直接的方式来创建PDF文档,由此本篇文章将介绍C#如何来创建带图、文元素的PDF文档。
同理,对于需要读取PDF文档的情况,我们也可以分情况来读取想要的文档元素(文本、图片)。在网上查阅关于创建或读取PDF文档中时,发现有的控件或方法并不支持中文。因此,本文将演示如何针对中文字体的PDF文件创建和读取,当然这里如果需要创建英文的字体也是可以的。
在下面的示例中将做详细介绍。

要点梳理

一、创建PDF文档(可支持中文)
1.写入文本(包括页边距、字体、字号等设置)
2.绘入图片
二、读取PDF文档
1.读取文本
1.1读取全部文本
1.2读取指定区域文本
2.读取图片

使用工具
Free Spire.PDF for .NET4.3 (最新免费版)
注:在编辑代码前别忘了引用Spire.PDF.dll,dll文件可在安装路径下的Bin文件夹中获取。

PS:如果需要其他字体,也可以参考官网上的这篇教程:https://www.e-iceblue.cn/spirepdf/set-font-for-pdf.html

代码操作示例

一、创建PDF文档
  1. using Spire.Pdf;
  2. using Spire.Pdf.Graphics;
  3. using System.Drawing;

  4. namespace CreatePDF_PDF
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             //初始化一个PdfDocument类实例
  11.             PdfDocument document = new PdfDocument();

  12.             //声明 PdfUnitConvertor和PdfMargins类对象
  13.             PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
  14.             PdfMargins margins = new PdfMargins();

  15.             //设置页边距
  16.             margins.Top = unitCvtr.ConvertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
  17.             margins.Bottom = margins.Top;
  18.             margins.Left = unitCvtr.ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
  19.             margins.Right = margins.Left;

  20.             //新添加一个A4大小的页面
  21.             PdfPageBase page = document.Pages.Add(PdfPageSize.A4, margins);

  22.             //自定义PdfTrueTypeFont、PdfPen实例,设置字体类型、字号和字体颜色
  23.             PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("华文楷体", 13f), true);
  24.             PdfBrush brush = PdfBrushes.Black;

  25.             //调用DrawString()方法在指定位置写入文本
  26.             string text = "中国豪放派古诗代表\n"
  27.             +" \n"
  28.             +"《江城子·密州出猎》 \n "
  29.             +"老夫聊发少年狂,左牵黄,右擎苍,锦帽貂裘,千骑卷平冈。\n"
  30.             +"为报倾城随太守,亲射虎,看孙郎。\n"
  31.             + " 酒酣胸胆尚开张。鬓微霜,又何妨!\n"
  32.             +"持节云中,何日遣冯唐?\n"
  33.             +"会挽雕弓如满月,西北望,射天狼。\n";
  34.             page.Canvas.DrawString(text, font, brush, 15, 13);

  35.             //加载图片,并调用DrawImage()方法在指定位置绘入图片
  36.             PdfImage image = PdfImage.FromFile("插画3.jpg");
  37.             float width = image.Width * 0.55f;
  38.             float height = image.Height * 0.55f;
  39.             float y = (page.Canvas.ClientSize.Width - width) ;
  40.             page.Canvas.DrawImage(image, y, 100, width, height);

  41.             //保存并打开文档
  42.             document.SaveToFile("PDF创建.pdf");
  43.             System.Diagnostics.Process.Start("PDF创建.pdf");
  44.         }
  45.     }
  46. }
创建结果


二、读取PDF文档
测试文档:


(一)读取文本
   1、读取全部文本
    
  1. using Spire.Pdf;
  2. using System;
  3. using System.IO;
  4. using System.Text;
  5. namespace ExtractText_PDF
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             //实例化PdfDocument类对象,并加载PDF文档
  12.             PdfDocument doc = new PdfDocument();
  13.             doc.LoadFromFile("sample.pdf");

  14.             //实例化一个StringBuilder 对象
  15.             StringBuilder content = new StringBuilder();

  16.             //遍历文档所有PDF页面,提取文本
  17.             foreach (PdfPageBase page in doc.Pages)
  18.             {
  19.                 content.Append(page.ExtractText());
  20.             }

  21.             //将提取到的文本写为.txt格式并保存到本地路径
  22.             String fileName = "获取文本.txt";
  23.             File.WriteAllText(fileName, content.ToString());
  24.             System.Diagnostics.Process.Start("获取文本.txt");
  25.         }
  26.     }
  27. }
读取全部文本结果:

2.读取部分文本

  1. using Spire.Pdf;
  2. using System.IO;
  3. using System.Text;
  4. using System.Drawing;

  5. namespace ExtractText1_PDF
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             //创建PdfDocument类实例,并加载PDF文档
  12.             PdfDocument pdf = new PdfDocument();
  13.             pdf.LoadFromFile("sample.pdf");

  14.             //获取PDF第一页
  15.             PdfPageBase page = pdf.Pages[0];

  16.             //从第一页的指定矩形区域内提取文本
  17.             string text = page.ExtractText(new RectangleF(50, 50, 500, 170));

  18.             //保存文本到.txt文件,并打开文档
  19.             StringBuilder sb = new StringBuilder();
  20.             sb.AppendLine(text);
  21.             File.WriteAllText("Extract.txt", sb.ToString());
  22.             System.Diagnostics.Process.Start("Extract.txt");
  23.         }
  24.     }
  25. }
读取部分文本结果:


(二)读取图片

  1. using Spire.Pdf;
  2. using System.Collections.Generic;
  3. using System.Drawing;

  4. namespace ExtractImages_PDF
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             //创建一个PdfDocument类对象,加载PDF测试文档
  11.             PdfDocument doc = new PdfDocument();
  12.             doc.LoadFromFile("sample.pdf");

  13.             //声明List类对象
  14.             List<Image> ListImage = new List<Image>();

  15.             //遍历PDF文档所有页面
  16.             for (int i = 0; i < doc.Pages.Count; i++)
  17.             {
  18.                 //获取文档所有页,并提取页面中的所有图片
  19.                 PdfPageBase page = doc.Pages[i];
  20.                 Image[] images = page.ExtractImages();
  21.                 if (images != null && images.Length > 0)
  22.                 {
  23.                     ListImage.AddRange(images);
  24.                 }

  25.             }
  26.             //将获取到的图片保存到本地路径
  27.             if (ListImage.Count > 0)
  28.             {
  29.                 for (int i = 0; i < ListImage.Count; i++)
  30.                 {
  31.                     Image image = ListImage[i];
  32.                     image.Save("image" + (i + 1).ToString() + ".png", System.Drawing.Imaging.ImageFormat.Png);
  33.                 }
  34.                 //打开获取到的图片
  35.                 System.Diagnostics.Process.Start("image1.png");
  36.             }

  37.         }
  38.     }
  39. }
读取图片结果:


C#创建、读取PDF文档的方法介绍到这里,对于PDF文档的一些其他功能操作也可以参考这里的博客http://blog.chinaunix.net/uid/31499788/cid-224382-list-1.html