文档管理系统中 ,扫描模块将文档或证件扫描后。为了便于保存多个图片,拟将多个图片生成一个PDF文档进行保存。

这里我们就需要PDF生成工具了。你可以在这里下载。PDFCreator

主要使用了开源工具ITextSharp生成PDF文档。

测试界面如下:

选择图片,可多选

生成PDF

生成的PDF文件:

目前只是生成图片的pdf文件,至于更高级的应用的探索,以后写文章再说吧。

其中关键代码PDFCreator如下

using System;
using System.Collections.Generic;
using System.Text;
using System.IO; namespace PDFCreator
{
public class PDFCreator
{
iTextSharp.text.Document pdfdoc;
iTextSharp.text.Image pdfImg;
iTextSharp.text.pdf.PdfWriter pdfwriter; string tmpFilePath;
public PDFCreator()
{
pdfdoc = new iTextSharp.text.Document(); try
{
tmpFilePath = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + @"\~tmpPdfCreatorFile.pdf";
if (File.Exists(tmpFilePath))
File.Delete(tmpFilePath);
pdfwriter = iTextSharp.text.pdf.PdfWriter.GetInstance(pdfdoc, new FileStream(tmpFilePath, FileMode.CreateNew));
pdfdoc.Open();
}
catch
{
throw new Exception("此文件已存在!");
}
}
public bool AddURIImage(string imageUrl)
{
try
{
//pdfdoc.Open();
pdfdoc.NewPage();
//String imageUrl = "http://jenkov.com/images/" +
// "20081123-20081123-3E1W7902-small-portrait.jpg";
pdfImg = iTextSharp.text.Image.GetInstance(new Uri(imageUrl));
pdfImg.Alignment = iTextSharp.text.Image.MIDDLE_ALIGN;
//pdfImg.SetAbsolutePosition(500f, 650f);
pdfdoc.Add(pdfImg); //pdfdoc.Close();
}
catch (Exception e)
{
return false;
}
return true;
} public bool AddImageFromFile(string imageFilePath)
{
try
{ pdfdoc.NewPage();
pdfImg = iTextSharp.text.Image.GetInstance(imageFilePath);
pdfImg.Alignment = iTextSharp.text.Image.MIDDLE_ALIGN;
// pdfImg.SetAbsolutePosition((iTextSharp.text.PageSize.POSTCARD.Width - pdfImg.ScaledWidth) / 2,
//(iTextSharp.text.PageSize.POSTCARD.Height - pdfImg.ScaledHeight) / 2);
// pdfwriter.DirectContent.AddImage(pdfImg);
pdfdoc.Add(pdfImg);
//pdfdoc.Close();
}
catch (Exception e)
{
return false;
}
return true;
} public void SaveToFile(string fileName)
{ //pdfwriter.Close();
//pdfwriter.Dispose();
pdfdoc.Dispose();
File.Copy(tmpFilePath, fileName, true);
File.Delete(tmpFilePath);
}
}
}

调用代码如下:

 private void btnCreatePDF_Click(object sender, EventArgs e)
{
SaveFileDialog sdiag = new SaveFileDialog();
sdiag.Filter = "PDF文档|*.pdf";
if (sdiag.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
PDFCreator creator = new PDFCreator();
foreach (object obj in listBox1.Items)
{
if (obj == null)
continue;
string imgFilePath = obj.ToString();
creator.AddImageFromFile(imgFilePath); }
//
creator.SaveToFile(sdiag.FileName);
}
}

你可以在这里下载。PDFCreator

使用itextsharp创建PDF文档——图片集合的更多相关文章

  1. .net快速创建PDF文档 by c#

    原文地址:http://www.cnblogs.com/Creator/archive/2010/03/13/1685020.html C#引用IText创建PDF文档 先引用IText    可以从 ...

  2. 利用ItextSharp 生成PDF文档改进版

    导入的ItextSharp.dll一定要是较高的版本 数据库表结构 生成的PDF样式 代码: namespace WebPDF { public partial class _Default : Sy ...

  3. ABBYY FineReader 14创建PDF文档功能解析

    使用ABBYY FineReader,您可以轻松查看和编辑任何类型的 PDF,真的是一款实至名归的PDF编辑转换器,您知道的,它能够保护.签署和编辑PDF文档,甚至还可以创建PDF文档,本文和小编一起 ...

  4. ABBYY PDF Transformer+从文件选项中创建PDF文档的教程

    可使用OCR文字识别软件ABBYY PDF Transformer+从Microsoft Word.Microsoft Excel.Microsoft PowerPoint.HTML.RTF.Micr ...

  5. 基于iTextSharp的PDF文档操作

    公司是跨境电商,需要和各种物流打交道,需要把东西交给物流,让他们发到世界各地.其中需要物流公司提供一个运单号,来追踪货物到达哪里?! 最近在和DHL物流公司(应该是个大公司)对接,取运单号的方式是调用 ...

  6. 【转载】 C#工具类:使用iTextSharp操作PDF文档

    iTextSharp是一个用于操作PDF文件的组件DLL程序,在C#程序中可以引用iTextSharp组件,用于开发与PDF文件相关的报表等功能,利用iTextSharp组件提供出来的方法接口,我们可 ...

  7. iTextSharp生成pdf文档案例

    1.using iTextSharp.text;using iTextSharp.text.pdf; 2.设置页面大小 iTextSharp.text.Rectangle pageSize = new ...

  8. C#创建PDF文档

    说明:本实例用到了第三方组件ICSharpCode.SharpZipLib.dll.itextsharp.dll,该组件可到网上下载. 代码: using System; using System.C ...

  9. .net core 使用Rotativa创建PDF文档

    一.下载Rotaiva 工具  = >  NuGet包管理器  = >  管理解决方案的NuGet程序包 在打开的页面中搜索 Rotativa.AspNetCore 如下图: 选中红框的记 ...

随机推荐

  1. cocos2d移植到安卓引入第三方so文件时候编译会删除解决方式

    在游戏中对接支付的SDK的时候引入支付的so文件的时候在编译的时候总是被删除,后来经过查找资料自己整理出了一个解决方式 方案例如以下 在项目导入安卓中之后.在相应的jni目录中创建一个prebuilt ...

  2. JMeter创建FTP测试

    FTP服务主要提供上传和下载功能.有时间需要我们测试服务器上传和下载的性能.在这里我通过JMeter做一个FTP测试计划的例子. * 使用的是JMeter2.4版本. * 测试的服务器是IP:124. ...

  3. JavaScript 变量类型 保存内存中的位置 和 引用

    1. JavaScript变量 基本类型值在内存中占据固定大小的空间 因此被保存在栈内存中. 从一个变量向另一个变量复制基本来下的值 会创建这个值得一个副本. 引用类型的值是对象 保存在堆内存中. 包 ...

  4. Nginx的启动脚本

    vi /etc/init.d/nginx #!/bin/sh # nginx        Startup script for nginx # chkconfig: - 85 15 # proces ...

  5. jquery悬停tab

    <style> *{ margin:0; padding:0;} body { font:12px/19px Arial, Helvetica, sans-serif; color:#66 ...

  6. 不指定order by时Sql的排序

    在sql中不指定Order by,排序是按照主键吗?答案是不一定.举个例子:   查询AttendanceEmpRank表,主键是AttendanceEmployeeRankId,而且是聚集索引   ...

  7. Visifire Chart控件设置 柱状图 条的宽窄

     Chart myChart = new Chart();myChart.DataPointWidth = 5;宽度以PlotArea的百分比为单位,如下例: chart.Width = 500; c ...

  8. iOS~~MD5加密

    // 一般加密 +(NSString *)md5String:(NSString *)str { const char *password=[str UTF8String]; unsigned cha ...

  9. js 计算两个日期之间的周数

    //返回两个日期相差的周数 function WeeksBetw(date1, date2) { //这里的date1,date2都是Date对象 var d1 = new Date(date1); ...

  10. (三)backbone - API学习 - v0.9.2 与 v1.1.2区别

    Backbone.View v0.9.2 中Backbone.View 可以导出对象的options属性, v1.1.2 中去掉该属性,通过如下代码 viewOptions = ['model', ' ...