(三)拆分和合并PDF

1. 引用第三方itextsharp.dll文件

2. 前台页面设计

  1. <html xmlns="http://www.w3.org/1999/xhtml">  
  2. <head runat="server">  
  3.     <title></title>  
  4. </head>  
  5. <body>  
  6.     <form id="form1" runat="server">  
  7.     <div>  
  8.         上传:  
  9.         <asp:FileUpload ID="FileUpload1" runat="server" />  
  10.         <asp:Button ID="UploadBtn" runat="server" Text="Upload"   
  11.             οnclick="UploadBtn_Click" />  
  12.         <br />  
  13.         总页数:<asp:Label ID="TotalNumber" runat="server"></asp:Label><br />  
  14.         起始页:<asp:TextBox ID="StartPage" runat="server"></asp:TextBox><br />  
  15.         终止页:<asp:TextBox ID="EndPage" runat="server"></asp:TextBox><br />  
  16.         拆分:  
  17.         <asp:Button ID="Split" runat="server" Text="Split" OnClick="Split_Click" Width="96px" /><br />  
  18.     
  19.     </div>  
  20.     </form>  
  21. </body>  
  22. </html>  

3. 后台代码如下:

  1. public partial class SplitPDF : System.Web.UI.Page  
  2.   {  
  3.       protected void Page_Load(object sender, EventArgs e)  
  4.       {  
  5.   
  6.       }  
  7.   
  8.       static string newFileName;  
  9.       static string fileName = string.Empty;  
  10.       static bool flag = false;  
  11.       static PdfReader reader = null;  
  12.       static int pdfNum = 0;  
  13.   
  14.       static string splitFileName = string.Empty;  
  15.       // Upload the file  
  16.       protected void Upload()  
  17.       {  
  18.           Random random = new Random();  
  19.           int str = random.Next(4);  
  20.           string strDate = DateTime.Now.ToString("yyyyMMddhhmmss") + str.ToString();  
  21.           if (this.FileUpload1.HasFile)  
  22.           {  
  23.               int i = this.FileUpload1.FileName.LastIndexOf(".");  
  24.               string extension = this.FileUpload1.FileName.Substring(i + 1);  
  25.               if (extension.ToLower() == "pdf")  
  26.               {  
  27.                   fileName = this.FileUpload1.FileName;  
  28.                   newFileName = strDate + fileName;  
  29.                   string filePath = Server.MapPath("~/SplitBefore/") + newFileName;  
  30.                   this.FileUpload1.SaveAs(filePath);  
  31.                   reader = new PdfReader(filePath);  
  32.                   pdfNum = reader.NumberOfPages;  
  33.                   Label1.Text = pdfNum.ToString();  
  34.                   flag = true;  
  35.                   this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "success""<script>alert('Upload Success')</script>");  
  36.               }  
  37.               else  
  38.               {  
  39.                   this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "type""<script>alert('File Type Error')</script>");  
  40.               }  
  41.           }  
  42.           else  
  43.           {  
  44.               this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "pdf""<script>alert('Please choose a PDF file')</script>");  
  45.           }  
  46.   
  47.       }  
  48.   
  49.       // Validate input number  
  50.       protected bool ValidateInput()  
  51.       {  
  52.           Regex regex = new Regex(@"^\d+$");  
  53.           if (regex.IsMatch(txtStartPage.Text) && regex.IsMatch(txtEndPage.Text))  
  54.           {  
  55.               if (int.Parse(txtEndPage.Text) < int.Parse(txtStartPage.Text))  
  56.               {  
  57.                   Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "inputNum""<script>alert('End Page should more than start page!');</script>");  
  58.                   return false;  
  59.               }  
  60.               else  
  61.               {  
  62.                   return true;  
  63.               }  
  64.           }  
  65.           else  
  66.           {  
  67.               Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "error""<script>alert('Input should be a mumber!');</script>");  
  68.               return false;  
  69.           }  
  70.       }  
  71.   
  72.       // Split PDF  
  73.       protected void Split()  
  74.       {  
  75.           if (flag == true)  
  76.           {  
  77.               if (ValidateInput())  
  78.               {  
  79.                   int startPage = 1;  
  80.                   int endPage = pdfNum;  
  81.                   startPage = int.Parse(txtStartPage.Text);  
  82.                   endPage = int.Parse(txtEndPage.Text);  
  83.                   if (startPage < 1 || endPage > pdfNum)  
  84.                   {  
  85.                       this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "pageError""<script>alert('Input Page Error!')</script>");  
  86.                   }  
  87.                   else  
  88.                   {  
  89.                       Document document = new Document(reader.GetPageSizeWithRotation(startPage));  
  90.                       string strNewDate = DateTime.Now.ToString("yyyyMMddhhmmss") + fileName;  
  91.                       splitFileName = "split" + strNewDate;  
  92.                       PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(Server.MapPath("~/SplitAfter/" + splitFileName), FileMode.Create));  
  93.                       document.Open();  
  94.                       PdfContentByte cb = writer.DirectContent;  
  95.                       PdfImportedPage page;  
  96.                       int rotation;  
  97.                       while (startPage <= endPage)  
  98.                       {  
  99.   
  100.                           document.SetPageSize(reader.GetPageSizeWithRotation(startPage));  
  101.                           document.NewPage();  
  102.                           page = writer.GetImportedPage(reader, startPage);  
  103.                           rotation = reader.GetPageRotation(startPage);  
  104.                           if (rotation == 90 || rotation == 270)  
  105.                           {  
  106.                               cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(startPage).Height);  
  107.                           }  
  108.                           else  
  109.                           {  
  110.                               cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);  
  111.                           }  
  112.                           startPage++;  
  113.                       }  
  114.                       document.Close();  
  115.                       lb.Text = splitFileName;             
  116.                       this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "ss""<script>alert('Split Success')</script>");  
  117.                       txtStartPage.Text = string.Empty;  
  118.                       txtEndPage.Text = string.Empty;  
  119.                       flag = false;  
  120.                       reader = null;  
  121.                   }  
  122.               }  
  123.           }  
  124.           else  
  125.           {  
  126.               this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "upload""<script>alert('Please upload pdf first')</script>");  
  127.           }  
  128.       }  
  129.   
  130.       protected void btnAdd_Click(object sender, EventArgs e)  
  131.       {  
  132.           Upload();  
  133.       }  
  134.   
  135.       protected void btnSplit_Click(object sender, EventArgs e)  
  136.       {  
  137.           Split();  
  138.       }  
  139.   
  140.       protected void lb_Click(object sender, EventArgs e)  
  141.       {  
  142.           Process.Start(Server.MapPath("~/SplitAfter/" + splitFileName));  
  143.       }  
  144.   
  145.   }  


4. 由于FileUpload只支持4MB文件,因此需要在Web.Config

  1. <httpRuntime maxRequestLength="400000" executionTimeout="3600"/>  
  2. t;/system.web>  


合并PDF核心代码:

  1. protected void MergePDFFiles(string[] fileList, string outMergeFile)  
  2. {  
  3.     PdfReader reader;  
  4.     Document document = new Document();  
  5.     // Define the output place, and add the document to the stream  
  6.     PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outMergeFile, FileMode.Create));  
  7.     // Open document  
  8.     document.Open();  
  9.     // PDF ContentByte  
  10.     PdfContentByte cb = writer.DirectContent;  
  11.     // PDF import page  
  12.     PdfImportedPage newPage;  
  13.     for (int i = 0; i < fileList.Length; i++)  
  14.     {  
  15.         reader = new PdfReader(fileList[i]);  
  16.         int iPageNum = reader.NumberOfPages;  
  17.         for (int j = 1; j <= iPageNum; j++)  
  18.         {  
  19.             document.NewPage();  
  20.             newPage = writer.GetImportedPage(reader, j);  
  21.             cb.AddTemplate(newPage, 0, 0);  
  22.         }  
  23.   
  24.     }  
  25.     document.Close();  
  26. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值