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  。

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

iTextSharp的更多相关文章

  1. 在Asp.Net中操作PDF – iTextSharp - 使用表格

    使用Asp.Net生成PDF最常用的元素应该是表格,表格可以帮助比如订单或者发票类型的文档更加格式化和美观.本篇文章并不会深入探讨表格,仅仅是提供一个使用iTextSharp生成表格的方法介绍 使用i ...

  2. 开源免费且稳定实用的.NET PDF打印组件itextSharp(.NET组件介绍之八)

    在这个.NET组件的介绍系列中,受到了很多园友的支持,一些园友(如:数据之巅. [秦时明月]等等这些大神 )也给我提出了对应的建议,我正在努力去改正,有不足之处还望大家多多包涵.在传播一些简单的知识的 ...

  3. ASP.Net MVC——使用 ITextSharp 完美解决HTML转PDF(中文也可以)

    前言: 最近在做老师交代的一个在线写实验报告的小项目中,有这么个需求:把学生提交的实验报告(HTML形式)直接转成PDF,方便下载和打印. 以前都是直接用rdlc报表实现的,可这次牵扯到图片,并且更为 ...

  4. 【译】Asp.net mvc 使用ITextSharp PDF to HTML (解决img标签问题)

    前言:因项目需求,需要将HTML代码转成PDF.大致上已经实现了,可以是发现使用ITextSharp(我现在的版本是5.5.9)的时候,img标签中的src只能跟绝对路径. 在百度上找了一个上午,有一 ...

  5. 新版 itextsharp pdf code

    using System; using iTextSharp.text; using iTextSharp.text.pdf; using System.IO; namespace iTextShar ...

  6. 用itextsharp打印pdf示例

    学习了用itextsharp输出PDF文档,支持用XML定义文档,可定义多个数据源,简单的表达式,用于项目中效果还不错,其中PdfPageEvent类由包大人提供. 示例程序定义了一个简单的xml文件 ...

  7. iTextSharp 116秒处理6G的文件

    前言: 有一家印刷企业专为米兰新娘,微微新娘,金夫人这样的影楼印刷婚纱相册.通过一个B2B销售终端软件,把影楼的相片上传到印刷公司的服务器,服务器对这些图片进行处理. 比如: 1)为每个图片生成订单条 ...

  8. C#使用iTextSharp给PDF添加水印

    代码: /// <summary> /// 添加普通偏转角度文字水印 /// </summary> public static void SetWatermark(string ...

  9. iTextSharp生成pdf的一个简单例子

    效果图: 参考:http://www.cnblogs.com/CareySon/archive/2011/11/09/2243496.html http://www.cnblogs.com/julyl ...

  10. iTextSharp简单生成pdf和操作pdf添加水印

    遇到需要导出页面到pdf,并添加pdf水印的业务.稍微研究了下,借阅网友的前车之鉴,经过使用可行之后的代码贴出来,做个记录,也供需要的网友借阅. public class PDFSetWaterMar ...

随机推荐

  1. Laravel OAuth2 (三) ---使用 services 和 facades

    前言 既然要判断用户是否存在,然后创建用户,那么就要实现几个功能函数.为了方便调用,于是我尝试着写了第一个service 和 facade . 创建 Facade class Social exten ...

  2. C语言回溯算法解决N皇后问题

    回溯算法的模型是 x++, not satisfy ? x-- : continue. 代码中x作列号,y[x]保存第x列上皇后放置的位置. #include<stdio.h> #incl ...

  3. centos7 在 vmware下的安装与配置

    我们这里选择的centos7的版本是  CentOS-7-x86_64-DVD-1511.iso 在vmware下安装,碰到两个问题: 1)安装如下界面时,会发现“开始安装”按钮是灰化的,这时需要对有 ...

  4. ThinkPHP 3.1.2 控制器的模块和操作

    本节课大纲: 一.空模块和空操作 1.空操作 function _empty($name){ $this->show("$name 不存在 <a href='__APP__/In ...

  5. Niagara技术文档汇总

    Niagara技术文档汇总http://wenku.baidu.com/view/ccdd4e2c3169a4517723a38f.html Niagara讲解要点http://wenku.baidu ...

  6. Android之TextView------LINK的点击事件

    package com.TextHtml; import android.app.Activity; import android.content.Context; import android.os ...

  7. libev源代码浅析

    libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施.其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理. libev的基本使用方法 ...

  8. linux(Centos 6.3)学习笔记

    一.系统分区    1,磁盘分区        使用分区编辑器(partition editor)在磁盘上划分几个逻辑部分.碟片一旦划分成          数个分区,不同类的目录与文件可以存储进不同 ...

  9. ZOJ 3203 Light Bulb - 求导求最大值

    如果L全在地面上: 输出 h * D / H 如果L全在墙上: 输出 h 否则: (D - X ) / X = Y / (H - h) L = D - X + h - Y 然后对L求导即可 #incl ...

  10. <climits>头文件使用方法

    <climits>头文件定义的符号常量 CHAR_MIN  char的最小值SCHAR_MAX  signed char 最大值SCHAR_MIN   signed char 最小值UCH ...