.NET旋转PDF并保存旋转结果到文件

后台代码:

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>
    &nbsp;<asp:Button ID="btnRotate" runat="server" Text="旋转" 
        οnclick="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

使用iTextSharp修改PDF文件(一)

最近因为工作需要,公司让我写个小程序,对大量的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,对个人使用免费,对商业应用收费)、开源的(iTextSharpPDFBox)都有;
4、PDF是公开标准的电子文档格式,全世界并不仅仅只有Acrobat公司可以发布相关的产品,其它很多、很多公司都有相关的产品。
5、国内也有一大批人在研究PDF文件,并有自己的产品,可惜的是好像大部分都是收费的,好像还不便宜。(这是第一次发现,原来国内有这么多人在研究PDF呀,长见识了)

作为一个程序员,首先当然是试用SDK,从网上DOWN了来,好大呀,60M哦,看看附带的几篇文档,都是近千页的,还是全英文的,看得累呀。难怪网上有人说:如果看SDK的话,没有3个月,基本上写不了什么程序的。
虽然使用SDK是最正宗、最强大、最能控制每一个细节的方法,但是,这次任务时间相当紧迫(只有3-5天的时间),看来这条路是行不通了。

第二条路,试用收费的Aspose,这个东东确实不错,可惜过于复杂,对我现的任务也大材小用了。最最重要的是,估计公司不会掏钱买的(只是一次性的任务,这个程序估计以后就没多少机会可以用了),但是公司又不允许使用D版的。

算了,看开源的吧。

重量级人物出场了:iTextSharp,鼓掌。。。。。

 


 

转载于:https://www.cnblogs.com/seapub/archive/2012/07/09/2582495.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值