首页 技术 正文
技术 2022年11月15日
0 收藏 314 点赞 2,309 浏览 3472 个字

前言:

有一家印刷企业专为米兰新娘,微微新娘,金夫人这样的影楼印刷婚纱相册。通过一个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#版工具包

测试环境:

iTextSharp 116秒处理6G的文件

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

iTextSharp 116秒处理6G的文件

合并代码:

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[];
pdfList[] = @"D:\PDF文件合并\Test\1.pdf";
pdfList[] = @"D:\PDF文件合并\Test\2.pdf";
pdfList[] = @"D:\PDF文件合并\Test\3.pdf";
pdfList[] = @"D:\PDF文件合并\Test\4.pdf";
pdfList[] = @"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(); //}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 = ; i < pdfList.Length; i++)
{ PdfReader reader = new PdfReader(pdfList[i]);
int iPageNum = reader.NumberOfPages;
for (int j = ; j <= iPageNum; j++)
{
DOC.NewPage();
//DOC.newPage();
newPage = writer.GetImportedPage(reader, j);
//newPage = writer.getImportedPage(reader, j); cb.AddTemplate(newPage, , );
//cb.addTemplate(newPage, 0, 0);
}
}
DOC.Close();
}

合并结果:

116毫秒,合并6G文件。

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

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,946
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,472
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,285
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,101
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,733
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,768