合并pdf (两个pdf合并成一个pdf文件)
/// <summary>
/// 合并PDF
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnMerge_Click(object sender, EventArgs e)
{
saveFileDialog1.Filter = "pdf(*.pdf)|*.pdf";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string directory = Environment.CurrentDirectory + @"\PDF";
String[] fileList = System.IO.Directory.GetFiles(directory);
mergePDFFiles(fileList, saveFileDialog1.FileName);
MessageBox.Show("合并成功!");
}
}
/// <summary>合并PDF(集合) </summary>
/// <param name="fileList">欲合并的PDF文档集合</param>
/// <param name="outMergeFile">合并的文档名</param>
private void mergePDFFiles(string[] fileList, string outMergeFile)
{
PdfReader reader;
Document document = new Document();
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outMergeFile, FileMode.Create));
document.Open();
PdfContentByte cb = writer.DirectContent;
PdfImportedPage newPage;
for (int i = 0; i < fileList.Length; i++)
{
reader = new PdfReader(fileList[i]);
int iPageNum = reader.NumberOfPages;
for (int j = 1; j <= iPageNum; j++)
{
//document.SetPageSize(reader.GetPageSize(reader.GetPageN(j)));
document.NewPage();
newPage = writer.GetImportedPage(reader, j);
int rotation = reader.GetPageRotation(j);
//cb.AddTemplate(newPage, 0, 0);
//添加内容页到新的页面,并更加旋转度设置对应的旋转
switch (rotation)
{
case 90:
cb.AddTemplate(newPage, 0, -1, 1, 0, 0, reader.GetPageSizeWithRotation(j).Height);
break;
case 180:
cb.AddTemplate(newPage, -1, 0, 0, -1, reader.GetPageSizeWithRotation(j).Width, reader.GetPageSizeWithRotation(j).Height);
break;
case 270:
cb.AddTemplate(newPage, 0, 1, -1, 0, reader.GetPageSizeWithRotation(j).Width, 0);
break;
default:
cb.AddTemplate(newPage, 1, 0, 0, 1, 0, 0);//等同于 cb.AddTemplate(page1, 0,0)
break;
}
}
reader.Close();
}
// document.Close();
}
分割pdf文件
/// <summary>
/// PDF分割
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSplitting_Click(object sender, EventArgs e)
{
int min = (int)numericUpDown1.Value;
int max = (int)numericUpDown2.Value;
saveFileDialog1.Filter = "pdf(*.pdf)|*.pdf";
string src = "";
if (min == 0)
{
MessageBox.Show("开始页码不能为0!");
return;
}
if (listViewPDF.SelectedItems.Count == 0)
{
MessageBox.Show("请选择要分割的文件!");
return;
}
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string directory = Environment.CurrentDirectory + @"\PDF";
String[] fileList = System.IO.Directory.GetFiles(directory);
for (int i = 0; i < fileList.Length; i++)
{
if (fileList[i].Contains(listViewPDF.SelectedItems[0].Name))
{
src = fileList[i];
break;
}
}
PDFSlitting(src, saveFileDialog1.FileName, min, max);
MessageBox.Show("分割成功!");
}
}
private void PDFSlitting(string src, string outSplittingFile, int min, int max)
{
Document document = new Document();
try
{
PdfReader reader;
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outSplittingFile, FileMode.Create));
document.Open();
PdfContentByte cb = writer.DirectContent;
PdfImportedPage newPage;
reader = new PdfReader(src);
//int iPageNum = reader.NumberOfPages;
for (int j = min; j <= max; j++)
{
document.SetPageSize(reader.GetPageSizeWithRotation(min));
document.NewPage();
newPage = writer.GetImportedPage(reader, j);
int rotation = reader.GetPageRotation(j);
//cb.AddTemplate(newPage, 0, 0);
//添加内容页到新的页面,并更加旋转度设置对应的旋转
switch (rotation)
{
case 90:
cb.AddTemplate(newPage, 0, -1, 1, 0, 0, reader.GetPageSizeWithRotation(min).Height);
break;
case 180:
cb.AddTemplate(newPage, -1, 0, 0, -1, reader.GetPageSizeWithRotation(min).Width, reader.GetPageSizeWithRotation(min).Height);
break;
case 270:
cb.AddTemplate(newPage, 0, 1, -1, 0, reader.GetPageSizeWithRotation(min).Width, 0);
break;
default:
cb.AddTemplate(newPage, 1, 0, 0, 1, 0, 0);//等同于 cb.AddTemplate(page1, 0,0)
break;
}
}
document.Close();
reader.Close();
}
catch (Exception ex)
{
MessageBox.Show($"PDFSlitting error:{ex.Message}");
}
finally
{
document.Close();
}
}