C# 之 读写PDF文件

C# 之 读写PDF文件

  • 一.iTextSharp库
  • 二.程序集中主要类:
    • 1), iTextSharp.text.Document
    • 2), iTextSharp.text.Paragraph
    • 3), iTextSharp.text.Image
    • 4), iTextSharp.text.pdf.PdfTable
    • 5), iTextSharp.text.pdf.PdfCell
    • 6), iTextSharp.text.pdf.PdfWriter
    • 7), iTextSharp.text.pdf.PdfReader
  • 三.使用示例

一.iTextSharp库

操作PDF文档需要使用iTextSharp对象,它是一个开源的PDF操作类库。该库中主要包括一个iTextSharp.dll程序集文件。

pdf相关dll文件下载:
官方下载
网盘下载: 提取码: wffq

下载后添加引用到控制台应用程序:右键“解决方案” – 选择“添加“ – 选择“引用” – 然后在弹窗中右下角选择“浏览”(找到你下载在的dll文件)-- 然后“勾选”“确定”,引用就添加完成了。
C# 之 读写PDF文件_第1张图片
C# 之 读写PDF文件_第2张图片

然后添加using命名空间指令:

using iTextSharp.text;
using iTextSharp.text.pdf;

二.程序集中主要类:

1), iTextSharp.text.Document

说明:创建一个文档实例。具有三个构造函数:

public Document()
public Document(Rectangle pageSize)
public Document(Rectangle pageSize, int marginLeft, int marginRight, int marginTop, int marginBottom)

常用方法:

//添加标题
public bool addTitle(String title);
//添加主题
public bool addSubject(String subject);
//添加关键字
public bool addKeywords(String keywords);
//添加作者
public bool addAuthor(String author);
//添加文档的创建者
public bool addCreator(String creator);
//添加文档的创建程序
public bool addProducer();
//添加创建日期
public bool addCreationDate();
//打开文档
public void open();
//关闭文档
public void close();

2), iTextSharp.text.Paragraph

说明:操作PDF文档中的文本。
该类主要用于新建一个段落,该段落可以由一系列的块或短句构成,可以设置段落的行间距、对齐格式等。经常与类Chunk(表示块)、Phrase(表示短句)等结合使用。

3), iTextSharp.text.Image

说明:操作文档中的图片。
该类主要用于新建一个图片。
该类中提供了相关的属性和方法完成对图片的相关设置和操作。如属性AbsoluteX、AbsoluteY、Border等,方法GetType等。

4), iTextSharp.text.pdf.PdfTable

说明:操作PDF文档中的表格。
该类用来生成或设置PDF文档中的表格。

5), iTextSharp.text.pdf.PdfCell

说明:操作PDF文档中表格的单元格。
该类用来生成或设置PDF文档中表格的单元格。

6), iTextSharp.text.pdf.PdfWriter

说明:创建写PDF文档的实例。一般通过如下方法调用来创建其实例。
参数可以是任何一种流,经常使用System.IO.FileStream将Document写入文件中。

public static PdfWriter getInstance(Document document,Stream os)

7), iTextSharp.text.pdf.PdfReader

说明:创建读PDF文档的实例。
该类提供了很多属性和方法,来完成对PDF文档各种信息的读取。


三.使用示例

using System;
using System.IO;
using System.Text;
using iTextSharp.text;
using iTextSharp.text.pdf;
using Spire.Pdf;

namespace CSharpPdf
{
    class Programma
    {
        static void Main(string[] args)
        {
            string path = @"E:\MyTest.pdf";
            //创建PDF文件
            FileStream pdfFS = new FileStream(path, FileMode.Create);
            //获取实例
            Document doc = new Document();
            PdfWriter.GetInstance(doc, pdfFS);

            //添加作者,标题,主题
            doc.AddAuthor("Czhenya");
            doc.AddTitle("CSDN_Czhenya");
            doc.AddSubject("添加主题-Test");
            doc.AddKeywords("关键字-Test");

            //打开PDF,新建页,添加内容,关闭
            doc.Open();
            doc.NewPage();
            doc.Add(new Paragraph("CSDN_Czhenya"));
            doc.Add(new Paragraph("中文字符显示不出来,Czhenya111111,,,"));
            //注册供应商   --> 不写这行会报错(System.NotSupportedException:“No data is available for encoding 1252.)
            System.Text.Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            //设置文字样式 --> C:\Windows\Fonts  --> 系统字体路径
            BaseFont bfHei = BaseFont.CreateFont(@"C:\Windows\Fonts\STXINGKA.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            Font font = new Font(bfHei, 50);
            doc.Add(new Paragraph("这是华文行楷字体!", font));

            doc.NewPage();
            doc.Add(new Paragraph("CSDN_Czhenya222,,,,,"));
            doc.Close();

            //读取PDF内容...
            ReadPdfContent(path);
            ReadPdf(path);

            Console.ReadKey();
        }

        /// 
        /// 读取PDF所有页 (不能读取中文)
        /// 
        /// 文件地址
        /// 
        private static string ReadPdfContent(string filepath)
        {
            try
            {
                string pdffilename = filepath;
                PdfReader pdfReader = new PdfReader(pdffilename);
                int numberOfPages = pdfReader.NumberOfPages;
                StringBuilder sb = new StringBuilder();

                for (int i = 1; i <= numberOfPages; ++i)
                {
                    byte[] bufferOfPageContent = pdfReader.GetPageContent(i);
                    sb.Append(Encoding.UTF8.GetString(bufferOfPageContent));
                }
                pdfReader.Close();

                return sb.ToString();
            }
            catch (Exception ex)
            {
                StreamWriter log = File.AppendText(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "\\log.log");
                log.WriteLine("出错原因:" + ex.ToString());
                log.Flush();
                log.Close(); return null;
            }
        }

        /// 
        /// 读取PDF所有页 (可读中文)
        /// 
        /// 文件地址
        /// 
        private static void ReadPdf(string path)
        {
            //实例化PdfDocument类对象,并加载PDF文档
            Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument();
            doc.LoadFromFile(path);

            //实例化一个StringBuilder 对象
            StringBuilder content = new StringBuilder();
            //遍历文档所有PDF页面,提取文本
            foreach (PdfPageBase page in doc.Pages)
            {
                content.Append(page.ExtractText());
            }
        }
	 }
}

遇到的问题:

报错:System.NotSupportedException:“No data is available for encoding 1252.

添加代码解决报错:

System.Text.Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

codepage查询:
https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers

C# 之 读写PDF文件_第3张图片

你可能感兴趣的:(C#,从零开启,ジ﹋★☆『,C,#...,』)