老大说准备将Aspose换成iTextSharp,于是为了实现这么两个功能,其实不难,但由于本人的编程功底浅,费了老大的劲,终于将它实现!
接下来我讲贴出代码,并附有解释,欢迎善意的指导,我将潜心改进!
**第一,我将需要合并的PDF文件放到List<string>集合中,再以文件的形式循环读取到List<PdfReader>.我这么做虽然会显得繁琐,但是会避免类似“文件...正在被另一个进程使用”的异常!我是深受其害呀!**
List<string> pdfList = new List<string>();
pdfList.Add(“PDF文件路径”);
if (pdfList != null && pdfList.Count > 0)
{
List<PdfReader> documents = new List<PdfReader>();
foreach (string n in pdfList)
{
using (System.IO.FileStream stream = new System.IO.FileStream(n,System.IO.FileMode.Open,System.IO.FileAccess.Read))
{
PdfReader reader = new PdfReader(stream);
pageNumber += reader.NumberOfPages;
documents.Add(reader);
}
}
}
**第二,接下来就可以进行合并和增加页码!**
/// <summary>
/// 合并PDF,并且增加页码
/// </summary>
/// <param name="documents">PDF文件集合</param>
/// <param name="outputStream">合并之后的PDF</param>
/// <param name="startPageNum">从哪一页开始增加页码</param>
public void Merge(List<PdfReader> documents, System.IO.Stream outputStream,int startPageNum)
{
int rotation = 0;
if (outputStream == null || !outputStream.CanWrite)
{
throw new Exception("Output Stream is null or readonly.");
}
Document newDocument = null;
try
{
//页码的样式
BaseFont bfHei = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font font = new Font(bfHei, 8);
//开始增加页码的页数
int num = 0;
newDocument = new Document();
PdfWriter pdfWriter = PdfWriter.GetInstance(newDocument, outputStream);
//pdfWriter.SetPageAction
if (outputStream.GetType() == typeof(System.IO.FileStream))
{
pdfWriter.CloseStream = true;
}
else
{
pdfWriter.CloseStream = false;
}
newDocument.Open();
PdfContentByte pdfContentByte = pdfWriter.DirectContent;
foreach (PdfReader pdi in documents)
{
PdfReader pdfReader = pdi;
int iPageNum = pdfReader.NumberOfPages;
for (int j = 1; j <= iPageNum; j++)
{
num++;
newDocument.SetPageSize(pdfReader.GetPageSizeWithRotation(j));
newDocument.NewPage();
PdfImportedPage importedPage = pdfWriter.GetImportedPage(pdfReader, j);
rotation = pdfReader.GetPageRotation(j);
pdfContentByte.AddTemplate(importedPage, 0, 0);
if (num > startPageNum)
{
//增加页码
Phrase header = new Phrase("第" + (pdfWriter.PageNumber - startPageNum )+ "页", font);
//页脚显示的位置
ColumnText.ShowTextAligned(pdfWriter.DirectContent, Element.ALIGN_CENTER, header,
newDocument.PageSize.Width / 2, newDocument.Bottom, 0);
}
}
}
}
finally
{
if (outputStream != null)
{
outputStream.Flush();
}
if (newDocument != null)
{
newDocument.Close();
}
}
}
这就实现这两个功能的全部代码,如果能帮到哪位同仁,是我的荣幸!还有,本人也是一个菜鸟,如果在代码的逻辑上有什么不足,欢迎提出建议!