后台代码:
Default.aspx.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
PdfReader preader = new PdfReader(@"c:\test.pdf");
int pages = preader.NumberOfPages;
Rectangle psize;
float pwidth, pheight;
Literal1.Text= string.Format("共有{0}页 \r\n",pages);
for (int i = 1; i <= pages; i++)
{
psize = preader.GetPageSizeWithRotation(i);
pwidth = psize.Width;
pheight = psize.Height;
Literal1.Text += string.Format("第{1}页的宽={2},高={3} \r\n", pages, i, pwidth, pheight);
}
}
private void RotatePDF(string inputFile, int desiredRot, string outputFile)
{
using (FileStream outStream = new FileStream(outputFile, FileMode.Append))
{
PdfReader reader = new PdfReader(inputFile);
PdfStamper stamper = new PdfStamper(reader, outStream);
PdfDictionary pageDict = reader.GetPageN(1);
PdfNumber rotation = pageDict.GetAsNumber(PdfName.ROTATE);
if (rotation != null)
{
desiredRot += rotation.IntValue;
desiredRot %= 360; // must be 0, 90, 180, or 270
}
pageDict.Put(iTextSharp.text.pdf.PdfName.ROTATE, new iTextSharp.text.pdf.PdfNumber(desiredRot));
stamper.Close();
}
}
protected void btnRotate_Click(object sender, EventArgs e)
{
int rotateDegree = 0;
if (!string.IsNullOrEmpty(txtRotateDegree.Text))
{
rotateDegree = Convert.ToInt32(txtRotateDegree.Text);
}
RotatePDF(@"D:\Projects\iTextSharp\InPut\test.pdf", rotateDegree, @"D:\Projects\iTextSharp\OutPut\test_output.pdf");
Literal2.Text = string.Format("旋转{0}度完成", rotateDegree);
HyperLink1.NavigateUrl = "OutPut/test_output.pdf";
HyperLink1.Visible = true;
}
}
前台代码:
Default.aspx<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
<br />
<asp:HyperLink ID="HyperLink2" NavigateUrl="~/InPut/test.pdf" Target="_blank" runat="server">查看原始文件</asp:HyperLink>
<br/>
角度:
<asp:TextBox ID="txtRotateDegree" runat="server"></asp:TextBox>
<asp:Button ID="btnRotate" runat="server" Text="旋转"
onclick="btnRotate_Click" />
<br />
<asp:Literal ID="Literal2" runat="server"></asp:Literal>
<asp:HyperLink ID="HyperLink1" Target="_blank" Visible="false" runat="server">查看</asp:HyperLink>
<br />
</asp:Content>
参考链接:
http://stackoverflow.com/questions/3579058/rotating-pdf-in-c-sharp-using-itextsharp
http://stackoverflow.com/questions/4470895/rotate-a-single-page-90-degrees-with-itextsharp-vb-in-an-existing-multi-page-pdf
http://www.pdfsharp.net/wiki/SplitDocument-sample.ashx
http://www.cnblogs.com/pantian/archive/2006/04/16/376370.html
最近因为工作需要,公司让我写个小程序,对大量的PDF文件(超过2500份)的页眉页脚等区域进行修改。简单地说,就是将一批PDF文档的页眉页脚进行修改,然后生成新的PDF文件。
这种事情虽然以前没做过,但没办法,谁让我们只是个程序员呢,想继续拿工资,就、就开始工作吧……
首先,Google一下相关资料,得到了以下一些信息:
1、Acrobat提供7.0版PDF的SDK;
2、国内有个由Acrobat公司支持的,专业讨论PDF的论坛:http://www.chinapdf.com/pdfbbs/index.asp;
3、网上有一大堆可以操作PDF文件的库呀、程序呀的,完全收费的(Aspose)、半收费的(PDFLib,对个人使用免费,对商业应用收费)、开源的(iTextSharp,PDFBox)都有;
4、PDF是公开标准的电子文档格式,全世界并不仅仅只有Acrobat公司可以发布相关的产品,其它很多、很多公司都有相关的产品。
5、国内也有一大批人在研究PDF文件,并有自己的产品,可惜的是好像大部分都是收费的,好像还不便宜。(这是第一次发现,原来国内有这么多人在研究PDF呀,长见识了)
作为一个程序员,首先当然是试用SDK,从网上DOWN了来,好大呀,60M哦,看看附带的几篇文档,都是近千页的,还是全英文的,看得累呀。难怪网上有人说:如果看SDK的话,没有3个月,基本上写不了什么程序的。
虽然使用SDK是最正宗、最强大、最能控制每一个细节的方法,但是,这次任务时间相当紧迫(只有3-5天的时间),看来这条路是行不通了。
第二条路,试用收费的Aspose,这个东东确实不错,可惜过于复杂,对我现的任务也大材小用了。最最重要的是,估计公司不会掏钱买的(只是一次性的任务,这个程序估计以后就没多少机会可以用了),但是公司又不允许使用D版的。
算了,看开源的吧。
重量级人物出场了:iTextSharp,鼓掌。。。。。