1. 程式人生 > >iTextSharp簡單生成pdf和操作pdf新增水印

iTextSharp簡單生成pdf和操作pdf新增水印

iTextSharp,a .NET PDF library 。iTextSharp.dll 下載地址 https://sourceforge.net/projects/itextsharp/

iText is a PDF library that allows you to CREATE, ADAPT, INSPECT and MAINTAIN documents in the Portable Document Format (PDF):
- Generate documents and reports based on data from an XML file or a database
- Create maps and books, exploiting numerous interactive features available in PDF
- Add bookmarks, page numbers, watermarks, and other features to existing PDF documents
- Split or concatenate pages from existing PDF files
- Fill out interactive forms
- Serve dynamically generated or manipulated PDF documents to a web browser

iText is used by Java, .NET, Android and GAE developers to enhance their applications with PDF functionality.
iTextSharp is the .NET port.

Several iText engineers are actively supporting the project on on StackOverflow:

http://stackoverflow.com/questions/tagged/itext

IMPORTANT NOTICE: AS OF 2016-03-14, ITEXTSHARP DOWNLOADS AND SOURCE CODE WILL ONLY BE AVAILABLE ON GITHUB: http://github.com/itext

以下轉自 http://www.cnblogs.com/LL-723/archive/2013/12/25/3490699.html (先引入itextsharp.dll , 5.5.9.0版大小是3.86M)

public class PDFSetWaterMark
    {
        /// <summary>
        /// 建立一個顯示指定圖片的pdf
        /// </summary>
        /// <param name="picPdfPath"></param>
        /// <param name="picPath"></param>
        /// <returns></returns>
        public static bool CreatePDFByPic(string picPdfPath,string picPath)
        {
            //新建一個文件
            Document doc = new Document();
            try
            {
                //建立一個書寫器(Writer)與document物件關聯
                PdfWriter.GetInstance(doc, new FileStream(picPdfPath, FileMode.Create, FileAccess.ReadWrite));
                //開啟一個文件
                doc.Open();
                //向文件中新增內容
                Image img = Image.GetInstance(picPath);
                //img.SetAbsolutePosition();
                doc.Add(img);
                return true;
            }
            catch (Exception ex)
            {
                return false;
                throw ex;
            }
            finally
            {
                if (doc != null)
                {
                    doc.Close();
                }
            }

        }

        /// <summary>
        /// 加圖片水印
        /// </summary>
        /// <param name="inputfilepath"></param>
        /// <param name="outputfilepath"></param>
        /// <param name="ModelPicName"></param>
        /// <param name="top"></param>
        /// <param name="left"></param>
        /// <returns></returns>
        public static bool PDFWatermark(string inputfilepath, string outputfilepath, string ModelPicName, float top, float left)
        {
            //throw new NotImplementedException();
            PdfReader pdfReader = null;
            PdfStamper pdfStamper = null;
            try
            {
                pdfReader = new PdfReader(inputfilepath);

                int numberOfPages = pdfReader.NumberOfPages;

                iTextSharp.text.Rectangle psize = pdfReader.GetPageSize(1);

                float width = psize.Width;

                float height = psize.Height;

                pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, FileMode.Create));

                PdfContentByte waterMarkContent;

                iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(ModelPicName);

                image.GrayFill = 20;//透明度,灰色填充
                //image.Rotation//旋轉
                //image.RotationDegrees//旋轉角度
                //水印的位置 
                if (left < 0)
                {
                    left = width/2 - image.Width + left;
                }

                //image.SetAbsolutePosition(left, (height - image.Height) - top);
                image.SetAbsolutePosition(left, (height/2 - image.Height) - top);


                //每一頁加水印,也可以設定某一頁加水印 
                for (int i = 1; i <= numberOfPages; i++)
                {
                    //waterMarkContent = pdfStamper.GetUnderContent(i);//內容下層加水印
                    waterMarkContent = pdfStamper.GetOverContent(i);//內容上層加水印

                    waterMarkContent.AddImage(image);
                }
                //strMsg = "success";
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
                
            }
            finally
            {

                if (pdfStamper != null)
                    pdfStamper.Close();

                if (pdfReader != null)
                    pdfReader.Close();
            }
        }
        /// <summary>
        /// 新增普通偏轉角度文字水印
        /// </summary>
        /// <param name="inputfilepath"></param>
        /// <param name="outputfilepath"></param>
        /// <param name="waterMarkName"></param>
        /// <param name="permission"></param>
        public static void setWatermark(string inputfilepath, string outputfilepath,string waterMarkName)
        {
            PdfReader pdfReader = null;
            PdfStamper pdfStamper = null;
            try
            {
                pdfReader = new PdfReader(inputfilepath);
                pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, FileMode.Create));
                int total = pdfReader.NumberOfPages + 1;
                iTextSharp.text.Rectangle psize = pdfReader.GetPageSize(1);
                float width = psize.Width;
                float height = psize.Height;
                PdfContentByte content;
                BaseFont font = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
                PdfGState gs = new PdfGState();
                for (int i = 1; i < total; i++) 
                {
                    content = pdfStamper.GetOverContent(i);//在內容上方加水印
                    //content = pdfStamper.GetUnderContent(i);//在內容下方加水印
                    //透明度
                    gs.FillOpacity = 0.3f;
                    content.SetGState(gs);
                    //content.SetGrayFill(0.3f);
                    //開始寫入文字
                    content.BeginText();
                    content.SetColorFill(BaseColor.LIGHT_GRAY);
                    content.SetFontAndSize(font, 100);
                    content.SetTextMatrix(0, 0);
                    content.ShowTextAligned(Element.ALIGN_CENTER, waterMarkName, width / 2 - 50,height / 2 - 50, 55);
                    //content.SetColorFill(BaseColor.BLACK);
                    //content.SetFontAndSize(font, 8);
                    //content.ShowTextAligned(Element.ALIGN_CENTER, waterMarkName, 0, 0, 0);
                    content.EndText();
                }
            }catch (Exception ex)
            {
                throw ex;
            }
            finally
            {

                if (pdfStamper != null)
                    pdfStamper.Close();

                if (pdfReader != null)
                    pdfReader.Close();
            }
        }
        /// <summary>
        /// 新增傾斜水印
        /// </summary>
        /// <param name="inputfilepath"></param>
        /// <param name="outputfilepath"></param>
        /// <param name="waterMarkName"></param>
        /// <param name="userPassWord"></param>
        /// <param name="ownerPassWord"></param>
        /// <param name="permission"></param>
        public static void setWatermark(string inputfilepath, string outputfilepath, string waterMarkName, string userPassWord, string ownerPassWord, int permission)
        {
            PdfReader pdfReader = null;
            PdfStamper pdfStamper = null;
            try
            {
                pdfReader = new PdfReader(inputfilepath);
                pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, FileMode.Create));
                // 設定密碼   
                //pdfStamper.SetEncryption(false,userPassWord, ownerPassWord, permission); 

                int total = pdfReader.NumberOfPages + 1;
                PdfContentByte content;
                BaseFont font = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
                PdfGState gs = new PdfGState();
                gs.FillOpacity = 0.2f;//透明度

                int j = waterMarkName.Length;
                char c;
                int rise = 0;
                for (int i = 1; i < total; i++)
                {
                    rise = 500;
                    content = pdfStamper.GetOverContent(i);//在內容上方加水印
                    //content = pdfStamper.GetUnderContent(i);//在內容下方加水印
                    
                    content.BeginText();
                    content.SetColorFill(BaseColor.DARK_GRAY);
                    content.SetFontAndSize(font, 50);
                    // 設定水印文字字型傾斜 開始 
                    if (j >= 15)
                    {
                        content.SetTextMatrix(200, 120);
                        for (int k = 0; k < j; k++)
                        {
                            content.SetTextRise(rise);
                            c = waterMarkName[k];
                            content.ShowText(c + "");
                            rise -= 20;
                        }
                    }
                    else
                    {
                        content.SetTextMatrix(180, 100);
                        for (int k = 0; k < j; k++)
                        {
                            content.SetTextRise(rise);
                            c = waterMarkName[k];
                            content.ShowText(c + "");
                            rise -= 18;
                        }
                    }
                    // 字型設定結束 
                    content.EndText();
                    // 畫一個圓 
                    //content.Ellipse(250, 450, 350, 550);
                    //content.SetLineWidth(1f);
                    //content.Stroke(); 
                } 

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {

                if (pdfStamper != null)
                    pdfStamper.Close();

                if (pdfReader != null)
                    pdfReader.Close();
            }
        }

    }

呼叫的例子:
string path = "E://3.pdf";
                HtmlToPDFUtil.HtmlToPdf(Request.Url.AbsoluteUri, path);
                //HtmlToPDFUtil.HtmlToPdf(sbUrlList.ToString(), path);
                PDFSetWaterMark.PDFWatermark(path, "E://3-1.pdf", Server.MapPath("/HtmlToPdf/Tools/sy.bmp"), 0, 0);
                PDFSetWaterMark.setWatermark("E://3-1.pdf", "E://3-2.pdf", "ssss");
                //PDFSetWaterMark.setWatermark("E://3-2.pdf", "E://3-3.pdf", "sssss", "", "", 1);


相關推薦

iTextSharp簡單生成pdf操作pdf新增水印

iTextSharp,a .NET PDF library 。iTextSharp.dll 下載地址 https://sourceforge.net/projects/itextsharp/ iText is a PDF library that allows you to

使用iTextSharp在Asp.Net中操作PDF系列文章 目錄

    iTextSharp是一個從JAVA專案iText衍生的.Net版本的開源專案。這個專案在操作PDF方面功能相當強大.但.Net版本的iTextSharp資料和文件相對比較少,網上已有的資料相對零散.最近在專案中需要生成PDF,在查閱相關資料中找到一個講述iTextSharp的系列文章,講的比較系統

PHP+JavaScript+HTML實現上傳PDF瀏覽PDF課件

一. 隱藏/顯示table         首先介紹如何通過JavaScript實現點選超連結實現隱藏和顯示Table或DIV的效果,程式碼如下所示:<html> <head> <meta http-equiv="Content-Type" content="text/html;

Java之生成Pdf並對Pdf內容操作

enc images sub als tar 應用 throw mave add 雖說網上有很多可以在線導出Pdf或者word或者轉成png等格式的工具,但是我覺得還是得了解知道是怎麽實現的。一來,在線免費轉換工具,是有容量限制的,達到一定的容量時,是不能成功導出的;二來,

vue 動態生成input進行操作——簡單實現新增刪除聯絡人功能

實現類似的如圖功能: 程式碼如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>修改實現新增聯絡人

java 操作pdf 不能顯示itext生成PDF檔案文字域內容問題

 問題:java 操作pdf  填入資料後,生成新pdf無法顯示中文。 ......... try { PdfReader reader = new PdfReader(path);//讀模板檔案 PdfStamper stamper = new PdfSt

itext7介面類概述以及pdf常見操作

本文很多資源來自http://developers.itextpdf.com/content/itext-7-jump-start-tutorial itext7整體結構 在層次結構的頂部,我們找到了IPropertyContainer介面。此介面定義設定,獲取和刪除屬性的

C# 操作PDF 圖層(Layer)—新增、刪除圖層、設定圖層可見性

前言 通過新增圖層,我們可以將文字、圖片、表格、圖形等元素精確定位於頁面指定位置,將這些元素進行疊放、組合形成頁面的最終效果。此外,對於頁面中已有的圖層我們也可以進行設定圖層可見性、刪除圖層等操作。在本篇文章中,將介紹如何在C#中進行PDF圖層的操作。   要點概括 1.新增圖層 線

poi生成excelitext、jasperResport生成pdf

1.Poi生成excel 1)建立HSSFWorkbook物件 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); HSSFSheet sheet = hssfWorkbook.createSheet("運單資料");

使用itext7簡單生成一個pdf,建立一個pdf模板並進行填充

下面這段程式碼,是顯示中文字型的關鍵程式碼。如果之前學習使用itext 2*,5*和itextasian.jar.的,為了讓這段程式碼生效一定都遇到Font 'STSongStd-Light' with 'UniGB-UCS2-H' is not recognized這個異常,查了很多資料,也試過很多方法。

vim,編輯檔案後最簡單的消除~ .un~字尾檔案生成操作 ,重點為紅色字型部分

關於在使用vim或Gvim編輯檔案後,會自動生成的2個檔案。 ~字尾的是檔案舊版本的備份檔案。 .un~字尾的檔案是用於當你再次開啟檔案時也能進行撤銷上次的更改。 禁止生成這兩個檔案的步驟 1. 開啟vim編輯器 2. shift + :   進入 末行模式 3.

pdf新增水印頁首的方法

由於pdf檔案格式有著優秀的顯示效果,所以在很多地方我們都需要使用到pdf檔案。給pdf新增水印,能夠起到防辨真偽,保護版權和宣傳品牌的作用,同樣的,給pdf檔案新增頁首也能達到宣傳品牌的作用。所以今天小編給大家帶來了pdf新增水印和頁首的方法介紹,希望能夠給大家帶來幫助。操作軟體:迅捷PDF編輯器軟體地址:

PDF怎樣新增水印PDF新增水印操作方法

PDF檔案和Word檔案都是一種辦公文件,但PDF檔案和Word文件還是有一定的區別的, PDF檔案新增水印需要藉助第三方工具,那麼下面小編就簡單給大家介紹一下PDF怎樣新增水印的?步驟一:首先我們可以藉助於線上工具給PDF新增水印,直接進入到迅捷PDF線上轉換器網站中,點選文件處理中的PDF新增水印; 步驟

itext生成發票套打(操作PDF

1.用Adobe Acrobat操作pdf 首先用Adobe Acrobat 在檔案上新增文字域,表單>新增或編輯域>文字域,如圖添加了兩個文字域,名稱分別是city,name java程式碼 import javax.annotation.Resource; im

怎麽操作PDF文件交換頁面?簡單操作方法

mark 電腦 img 自己的 移動 文件 交換 完成後 http PDF文件怎麽交換頁面呢?在現在使用PDF文件的時候,我們也會遇到一些PDF交換頁面這種問題,不會操作PDF交換頁面怎麽辦呢?下面小編就為大家介紹一下PDF文檔交換頁面的操作方法。  操作軟件:迅捷PDF編

C#操作PDF文件--PDFBox讀取pdf文件,O2S.Components.PDFRender4NET生成縮圖

二、引用動態連結庫     解壓縮下載的PDFBox,找到其中的Bin目錄,需要在專案中新增引用的dll檔案有:     IKVM.GNU.Classpath.dll     PDFBox-0.7.3.dll     FontBox-0.1.0-dev.dll    

iTextSharp.dll生成pdf 實戰例項

http://blog.csdn.net/jiangyu912/article/details/4969376 最近忙了兩個星期的任務了     iTextSharp.dll是個開源的用於生成pdf的類庫了  專案中我們只需要引用就可以了    說實話確實很好用   因為

SpringMVC生成ExcelPDF檔案時檔名亂碼的解決方案

解決下載的檔名為中文時的亂碼問題: //將程式碼 response.setHeader("Content-Disposition", "attachment; filename=" + URL

openOffice實現word轉pdf新增水印

ipenOffice的demo,實現word轉成pdf同時向pdf新增水印package html2pdf;import java.awt.Color;import java.io.BufferedOutputStream;import java.io.File;import

在Asp.Net中操作PDFiTextSharp

轉自:http://www.cnblogs.com/CareySon/archive/2011/11/04/2236239.html 使用者和PDF文件的互動可以通過錨(連結)和書籤進行,接著我前面iTextSharp的系列文章,本篇文章主要講通過iTextSharp建立的