iTextSharp

iTextSharp 116毫秒处理6G的文件

前言:

有一家印刷企业专为米兰新娘,微微新娘,金夫人这样的影楼印刷婚纱相册。通过一个B2B销售终端软件,把影楼的相片上传到印刷公司的服务器,服务器对这些图片进行处理。

比如:

1)为每个图片生成订单条码,生产码;

2)为每个图片进行色彩修正,图像处理(拉长腿,去红眼,去色斑等功能),其中用到了Perfectly Clear商业组件。^_^

3)把属于一本相册的所有图片转换为一个PDF文件。

4)用Enfocus Switch软件,检测PDF的完整性。

5)把生成PDF的文件合成上10G的PDF文件(今天要说的也是这儿),方便印刷机台的操作。

6)……

方法:

处理:对PDF的处理,有一个比较牛的插件叫iTextSharp。这儿用这个插件对PDF文件进行文档合并。这个插件是用C++开发的,但是有Java版,C#版。

iText官方网站

Java版iText组件

Java版工具包

C#版iText组件

C#版工具包

测试环境:

测试数据(把5个1.2G的PDF合并为一个6G的PDF):

合并代码:

Java版:

/**********************************************************/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfImportedPage;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfWriter;

public class ItextMerge {
    public static void main(String[] args) {
        List<InputStream> list = new ArrayList<InputStream>();
        try {
            // Source pdfs
            list.add(new FileInputStream(new File("f:/1.pdf")));
            list.add(new FileInputStream(new File("f:/2.pdf")));

            // Resulting pdf
            OutputStream out = new FileOutputStream(new File("f:/result.pdf"));

            doMerge(list, out);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * Merge multiple pdf into one pdf
     *
     * @param list
     *            of pdf input stream
     * @param outputStream
     *            output file output stream
     * @throws DocumentException
     * @throws IOException
     */
    public static void doMerge(List<InputStream> list, OutputStream outputStream)
            throws DocumentException, IOException {
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document, outputStream);
        document.open();
        PdfContentByte cb = writer.getDirectContent();

        for (InputStream in : list) {
            PdfReader reader = new PdfReader(in);
            for (int i = 1; i <= reader.getNumberOfPages(); i++) {
                document.newPage();
                //import the page from source pdf
                PdfImportedPage page = writer.getImportedPage(reader, i);
                //add the page to the destination pdf
                cb.addTemplate(page, 0, 0);
            }
        }

        outputStream.flush();
        document.close();
        outputStream.close();
    }
}
/*********************************************/

C#版:

private void Button_Click(object sender, RoutedEventArgs e)
{
    Stopwatch sw1 = new Stopwatch();
    sw1.Start();
    string[] pdfList = new string[5];
    pdfList[0] = @"D:\PDF文件合并\Test\1.pdf";
    pdfList[1] = @"D:\PDF文件合并\Test\2.pdf";
    pdfList[2] = @"D:\PDF文件合并\Test\3.pdf";
    pdfList[3] = @"D:\PDF文件合并\Test\4.pdf";
    pdfList[4] = @"D:\PDF文件合并\Test\5.pdf";
    //pdfList[5] = @"D:\PDF文件合并\Test\6.pdf";
    //pdfList[6] = @"D:\PDF文件合并\Test\7.pdf";
    //pdfList[7] = @"D:\PDF文件合并\Test\8.pdf";
    //pdfList[8] = @"D:\PDF文件合并\Test\9.pdf";
    //pdfList[9] = @"D:\PDF文件合并\Test\10.pdf";

    mergePDFFiles(pdfList);

    sw1.Stop();

    string xx = sw1.ElapsedMilliseconds.ToString();  //116715

}

void mergePDFFiles(string[] pdfList)
{
    string mergePDFFiles = @"D:\PDF文件合并\Test\total.pdf";

    Document DOC = new Document();
    //getInstance
    PdfWriter writer = PdfWriter.GetInstance(DOC, new FileStream(mergePDFFiles, FileMode.Create));

    DOC.Open();
    PdfContentByte cb = writer.DirectContent;
    PdfImportedPage newPage;

    for (int i = 0; i < pdfList.Length; i++)
    {

        PdfReader reader = new PdfReader(pdfList[i]);
        int iPageNum = reader.NumberOfPages;
        for (int j = 1; j <= iPageNum; j++)
        {
            DOC.NewPage();
            //DOC.newPage();
            newPage = writer.GetImportedPage(reader, j);
            //newPage = writer.getImportedPage(reader, j);

            cb.AddTemplate(newPage, 0, 0);
            //cb.addTemplate(newPage, 0, 0);
        }
    }
    DOC.Close();
}

合并结果:

116毫秒,合并6G文件。

分享6个一流PPT资源:http://www.cnblogs.com/xcj26/p/5590647.html  。

有东西,全部分享了,放在硬盘里没用。

时间: 2024-11-05 15:58:18

iTextSharp的相关文章

利用itextsharp导出pdf

在项目中,客户要求把一些表格导出pdf格式,在网上找了好久终于发现一个完美的解决方案,利用itextsharp可以很方便的导出pdf文件,不说太多了,直接上图,有图有真相 首先是页面图片 然后是导出的pdf图片 导出pdf代码如下: //导出Mold pdf文档 public void exportpdf_Mold(string quotenum, string fullpath) { string pdfName = quotenum + ".pdf"; string savePat

ITextSharp导出PDF表格和图片(C#)

文章主要介绍使用ITextSharp导出PDF表格和图片的简单操作说明,以下为ITextSharp.dll下载链接 分享链接:http://pan.baidu.com/s/1nuc6glj 密码:3gxw 一.流程                                                                                                                                  二.简单实例: 1)创建表

C# iTextSharp 生成 PDF

使用iTextSharp在Asp.Net中操作PDF系列文章 目录 http://www.cnblogs.com/CareySon/category/332146.html 实战 iTextSharp http://www.cnblogs.com/haogj/archive/2011/09/05/2167659.html

基于iTextSharp的PDF操作(PDF打印,PDF下载)

准备 1. iTextSharp的简介 iTextSharp是一个移植于java平台的iText项目,被封装成c#的组件来用于C#生成PDF文档,目前,也有不少操作PDF的类库,(国产的有福盺的,免费试用,用于商业用途收费)但是功能普遍没有iText强大,而且使用没有iText广泛.还有他就是开源的.目前比较新的是5.5版本的. 2. 使用工具 硬件: PC机:一台 软件: Windows操作系统 Isual studio 2013  (可以是任意版本) .Net frameWork 4.5  

ITextSharp用来生成 PDF 的一个组件

iTextSharp 是用来生成  PDF 的一个组件,在 1998 年夏天的时候,Bruno Lowagie ,iText 的创作者,参与了学校的一个项目,当时使用 HTML 来生成报告,但是,使用 HTML 打印的效果很不理想.最后,他发现,使用 PDF 可以完美解决打印问题,为了能够在各个系统中使用,iText 组件库诞生了. 网页上面浏览pdf,目前一般是先转成swf格式,再查看. http://sourceforge.net/projects/itextsharp/files/

itextsharp利用模板生成pdf文件笔记

iTextSharp是一款开源的PDF操作类库,使用它可以快速的创建PDF文件. 中文参考网站:http://hardrock.cnblogs.com/ http://pdfhome.hope.com.cn/Article.aspx?CID=bf51a5b6-78a5-4fa3-9310-16e04aee8c78&AID=f5fe52dd-8419-4baa-ab1c-ea3f26952132 英文参考网站:http://itext.ugent.be/library/ ·  技术文章(http:

iTextSharp生成pdf的一个简单例子

效果图: 代码: /// <summary> /// Compare页面生成pdf功能. /// </summary> /// <param name="country">国家</param> /// <param name="pns">pn</param> /// <param name="language">语言</param> /// <r

iTextSharp 使用详解(转)

PDF文件是目前比较流行的电子文档格式,在办公自动化(OA)等软件的开发中,经常要用到该格式,但介绍如何制作PDF格式文件的资料非常少,在网上搜来搜去,都转贴的是同一段“暴力”破解的方法,代码片断如下: StreamWriter pPDF=new StreamWriter(filePath); ArrayList xRefs=new ArrayList(); float yPos =0f; long streamStart=0; long streamEnd=0; long streamLen

使用ITextSharp生成PDF文件心得

最近公司在做一个项目,需要把数据导出成PDF格式的文件,然后再网上搜了一下发现开源的组件还挺多的,用的比较多的就是itextsharp,itextsharp由java的itext演变而来,并且提供的丰富的功能,能够制作表格.插入图片等,这是官网的下载地址:http://sourceforge.net/projects/itextsharp/,下面就来简单介绍一下使用itextsharp的心得. 首先创建一个winform应用程序,并且添加itextsharp的引用,在按钮的单击事件写上生成pdf

iTextSharp给PDF添加水印

iTextSharp作为.net平台下操作PDF的组件功能强大,但是前端时间遇到了一个问题,动态生成PDF时(生成的PDF里面有多个表格,表格数据来自数据库),无法给每页都添加水印图片,可能是本人对iTextSharp组件不够了解,没有找到生成动态PDF时就给每页添加水印.最后只好先用iTextSharp生成PDF然后在用iTextSharp给生成好的PDF添加水印.如果园子里的朋友谁做过生成PDF时就给每页添加水印,可指点指点小弟. 下面把iTextSharp给PDF添加水印的代码贴出来供大家