在搜索了很多合并PDF文件的信息后,发现使用
Spire.PDF for .NET控件是最简便和有效的解决方案,不用担心合并中PDF文档的损坏、安全,也不用花太多的时间,只需要几句代码即可轻松实现,这篇文章主要就是介绍怎么使用
Spire.PDF进行多个PDF文件的合并操作,并在合并后为新的PDF文件添加页码。
Spire.PDF采用100%的C#编写,使程序员可以使用.NET在没有安装 Adobe Acrobat的情况下,快速地创建、读取、处理PDF文档,下面就怎么进行合并做简要的介绍
1.首先开发人员可以使用字符串数组才保存三个需要合并的PDF文件名,然后加载三个PDF文件,并选择第一个PDF文档对第二个和第三个文档进行合并,为了能够把第二个PDF文件中的所有页导入到第一个PDF文件中,需要使用到
Spire.PDF for .NET控件提供的 public void AppendPage(PdfDocument doc).方法
private void button1_Click(object sender, EventArgs e)
{
//pdf document list
String[] files = new String[]
{
@"..\PDFmerge0.pdf",
@"..\ PDFmerge1.pdf",
@"..\ PDFmerge2.pdf"
};
//open pdf documents
PdfDocument[] docs = new PdfDocument[files.Length];
for (int i = 0; i < files.Length; i++)
{
docs[i] = new PdfDocument(files[i]);
}
//append document
docs[0].AppendPage(docs[1]);
//import PDF pages
for (int i = 0; i < docs[2].Pages.Count; i = i + 2)
{
docs[0].InsertPage(docs[2], i);
}
2.设置PDF文档的页码,可以通过控件提供的
Spire.PDF.Graphics. PdfMargins来设置页码的边距,然后调用DrawPageNumber
(PdfPageCollection pages, PdfMargins margin, int startNumber, int pageCount) 方法来绘制页码,页码可以是PDF文件底部的任何位置
//set PDF margin
PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
PdfMargins margin = new PdfMargins();
margin.Top = unitCvtr.ConvertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
margin.Bottom = margin.Top;
margin.Left = unitCvtr.ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
margin.Right = margin.Left;
this.DrawPageNumber(docs[0].Pages, margin, 1, docs[0].Pages.Count);
private void DrawPageNumber(PdfPageCollection pages, PdfMargins margin, int startNumber, int pageCount)
{
foreach (PdfPageBase page in pages)
{
page.Canvas.SetTransparency(0.5f);
PdfBrush brush = PdfBrushes.Black;
PdfPen pen = new PdfPen(brush, 0.75f);
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 9f, System.Drawing.FontStyle.Italic), true);
PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Right);
format.MeasureTrailingSpaces = true;
float space = font.Height * 0.75f;
float x = margin.Left;
float width = page.Canvas.ClientSize.Width - margin.Left - margin.Right;
float y = page.Canvas.ClientSize.Height - margin.Bottom + space;
page.Canvas.DrawLine(pen, x, y, x + width, y);
y = y + 1;
String numberLabel
= String.Format("{0} of {1}", startNumber++, pageCount);
page.Canvas.DrawString(numberLabel, font, brush, x + width, y, format);
page.Canvas.SetTransparency(1);
}
}