相关文章推荐
挂过科的打火机  ·  java.net.socketinputst ...·  9 月前    · 
火爆的罐头  ·  unity3d - YUV shader ...·  1 年前    · 

最近需要做一个PDF自动审核盖章的工作,其实就是读取PDF,然后再最后一页加入一个审核章印图片上去。看起来很简单,不过在开发过程中,还是遇到了一些问题,在这里记录一下。

主要遇到的问题是页面的旋转 和 内容的旋转 的分开的,需要分别操作。

准备工作需要下载 iTextSharp.dll 然后加入引用

using iTextSharp.text;
using iTextSharp.text.pdf;

string path = @"D:28727_LOG001_FOLIOLE COMPANY LIMITED_STOCK_PI";
                // 创建一个PdfReader对象
                PdfReader reader = new PdfReader(path + ".pdf");
                // 获得文档页数
                int n = reader.NumberOfPages;
                // 获得第一页的大小
                Rectangle psize = reader.GetPageSize(1);
                float width = psize.Width;
                float height = psize.Height;
                // 创建一个文档变量
                Document document = new Document(psize);
                // 创建该文档 生成物理文件
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(path + "_APPROVE.pdf", FileMode.OpenOrCreate));
                // 打开文档
                document.Open();
                // 添加内容
                PdfContentByte cb = writer.DirectContent;
                for (int i = 0; i < n; )
                    //设置指定页的PagSize 包含Rotation(页面旋转度)
                    document.SetPageSize(reader.GetPageSizeWithRotation(i));
                    //创建一个新的页面,需要注意的调用NewPage() ,PdfContentByte cb 对象会默认清空
                    document.NewPage();
                    //获取指定页面的旋转度
                    int rotation = reader.GetPageRotation(i);
                    //获取加载PDF的指定页内容
                    PdfImportedPage page1 = writer.GetImportedPage(reader, i);
                    //添加内容页到新的页面,并更加旋转度设置对应的旋转
                    switch (rotation)
                        case 90:
                            cb.AddTemplate(page1, 0, -1, 1, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                            break;
                        case 180:
                            cb.AddTemplate(page1, -1, 0, 0, -1, reader.GetPageSizeWithRotation(i).Width, reader.GetPageSizeWithRotation(i).Height);                           break;
                        case 270:
                            cb.AddTemplate(page1, 0, 1, -1, 0, reader.GetPageSizeWithRotation(i).Width, 0);
                            break;
                        default:
                            cb.AddTemplate(page1, 1, 0, 0, 1, 0, 0);//等同于 cb.AddTemplate(page1, 0,0)
                            break;
                    if (i == n)//如果是最后一页加入指定的图片
               //不同旋转度的页面 图片位置left距离的调整
                       int imgLeft = 350;
               if(rotation==90 || rotation==270)
               {    imgLeft = 550;    } 
                        //创建一个图片对象                    
                        iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(new Uri(@"d:Lock-icon.png"));
                        //设置图片的指定大小
                        //img.ScaleToFit(140F, 320F);
                        //按比例缩放
                        //img.ScalePercent(50);           
                        //把图片增加到内容页的指定位子  b width c height  e bottom f left
                        cb.AddImage(img, 0, 32F, 32F, 0, 50F, imgLeft);
                        //开始增加文本
                        cb.BeginText();
                        BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA_OBLIQUE, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
                        //设置字体 大小
                        cb.SetFontAndSize(bf, 9);
                        //指定添加文字的绝对位置
                        cb.SetTextMatrix(imgLeft, 200);
                        //增加文本
                        cb.ShowText("GW INDUSTRIAL LTD");
                        cb.EndText();
                // 关闭文档
                document.Close();
            catch (Exception de)
                Console.Error.WriteLine(de.Message);
                Console.Error.WriteLine(de.StackTrace);

转载于:https://www.cnblogs.com/powerwu/articles/3867190.html

原文链接:http://www.cnblogs.com/powerwu/articles/3867190.html 一、Itext简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iText的安装非常方便,在http://www.lowagie.com/iText/download.html网站上下载iText.jar文件后,只需要在系统的CLASSP... public void addTemplate(PdfTemplate template, float a, float b, float c, float d, float e, float f) 其中:a:字體寬度(負數為鏡面反向)b:字體垂直方向斜度(正數為向上,負數為向下)c:字體水平方向斜度(正數為向右,負數為向左)d:字體高度(負數為鏡面反向)e:頁面左下角在模板中的x坐標f:頁面左下 iText是一款PDF第三方库,来自美国iText软件公司。目前有iText5与iText7两个比较大的版本。当然作为商业库来说是收费的,但是也提供了一些免费开源库给大家使用。目前来说常用的是iText5。这是一个Java库,如果要在.Net环境下使用的话,需要用到iTextSharpiTextSharp可以帮助用户进行PDF的很多操作(转换除外),包括编辑,合并,修改,插入,生成等等操作。 前不久使用Freemarker+Flying sauser +Itext 整合生成PDF,因打印要求,需要旋转PDF里的内容,使用过Pdf-renderer, PDFBox 和JPedal转PDF为图片再旋转图片的方式,效果不佳,被项目组否掉,几经周折,终于找到真正旋转PDF内容的方法。 方法如下:import java.io.FileOutputStream;import com.itextpd Button Content="方框" HorizontalAlignment="Left" Margin="138,34,0,0" Grid.Row="1" VerticalAlignment="Top" Command="{Binding AddT2}"/>--鼠标点击穿透:背景设置为: Background="{x:Null}" 并且 把穿透设置为: IsHitTestVisible="True"-->--将旋转的点改为中心RenderTransformOrigin = "0.5,0.5"--> 有两种方法 一种是直接用itext 的Write 控制输出. 另外一种方法是使用 PdfCopy 类进行复制..自己用Write控制还算可以.一般都是下面这样写. public static MemoryStream mergePDFStream(MemoryStream[] files,