操作PDF文档需要使用iTextSharp对象,它是一个开源的PDF操作类库。该库中主要包括一个iTextSharp.dll程序集文件。
pdf相关dll文件下载:
官方下载
网盘下载: 提取码: wffq
下载后添加引用到控制台应用程序:右键“解决方案” – 选择“添加“ – 选择“引用” – 然后在弹窗中右下角选择“浏览”(找到你下载在的dll文件)-- 然后“勾选”“确定”,引用就添加完成了。
然后添加using命名空间指令:
using iTextSharp.text;
using iTextSharp.text.pdf;
说明:创建一个文档实例。具有三个构造函数:
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();
说明:操作PDF文档中的文本。
该类主要用于新建一个段落,该段落可以由一系列的块或短句构成,可以设置段落的行间距、对齐格式等。经常与类Chunk(表示块)、Phrase(表示短句)等结合使用。
说明:操作文档中的图片。
该类主要用于新建一个图片。
该类中提供了相关的属性和方法完成对图片的相关设置和操作。如属性AbsoluteX、AbsoluteY、Border等,方法GetType等。
说明:操作PDF文档中的表格。
该类用来生成或设置PDF文档中的表格。
说明:操作PDF文档中表格的单元格。
该类用来生成或设置PDF文档中表格的单元格。
说明:创建写PDF文档的实例。一般通过如下方法调用来创建其实例。
参数可以是任何一种流,经常使用System.IO.FileStream将Document写入文件中。
public static PdfWriter getInstance(Document document,Stream os)
说明:创建读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