在很多情况下需要把各种可视的文档如html,word等可打印的文件
转成PDF格式的文件进行保存。因为PDF的具有跨平台性,不可编辑(除用特殊的编辑器),方便加密,加水印,数字签名等特点。
目前的各种主流编程语言如java,.net等都提供了相关的api进行PDF的创建及导出,格式转换,就java语言来说有很多种如itext,yahp,pdfbox等,
但没有那一种技术或者组件能很好的针对不同原始格式的文档进行转换,同时由于在某些情况下,用户对转换后的格式有严格的要求,即转换后的PDF要与原始可视的一致,与
纸张打印的格式效果一致。同时对转换后PDF格式文件的大小方面也有一定的要求。
因此基于PDF虚拟打印机是最简单和广泛的格式转换方案
目前有很多虚拟打印机可以方便的把格式的文档转成pdf格式,如:adobe pdf printer smartprinter ccconverter等等,还包括许多在线的转换网址。
但虚拟打印机提供都是标准的打印机接口API,在转换过程中需要用户进行参与
如指定转换后pdf文件的保存路径(可以设置默认保存路径),手动输入文件名等,同时还有各种类似的虚拟打印专有的打印参数,这些虚拟打印机参数设置并没有提供编程API,smartprinter说可以提供api,但是收费的。

基于现在进行的项目"电子病历归档",下面针对java平台有如下解决方案:
通过PDFCreator(免费开源)虚拟打印机把任何可打印的文(html,dhtml,world,excel,自定义的格式等)转成PDF。
利用PDFCreator内置的保存后动作选项,执行vb script,在vb scripte中通过Microsoft Internet Transfer Control
上传文件至ftp服务器,ftp文件服务器采用apache ftpserver,在此源代码基础上进行二次开发,采用PDFBox对上传的PDF文档进行内容解析提取关键字,以此关键字对文档进行重命名,同时也可以基于lucene 建立基于内容的全文检索索引的创建。

就电子病历归档系统采用这种方案的优点:
1.数据采集不用其他厂商提供接口,做集成比较方便快捷。
2.保证采集上的PDF文档保持了原有的显示打印格式
3.在收集的同事即可建立全文检索的索引创建,不用在另外启用一个目录监视程序。
4.全部是免费开源软件,可控性强,灵活,且不花钱。

目前在电子病历归档系统中采集病历文档比较普遍的方式如下:

1.虚拟打印:
各个系统虚拟打印到某一目录,然后通过一监控程序监视此目录此情况下同步比较困难,目录监控程序的扫描间隔不好确定,由于无法获取打印机的状态,很多情况下虚拟打印机的PDF文档并未创建完成就被目录监控程序读取,造成读取的文档内容错误。

2.与其他系统做接口:
采用接口方式如(socket,或者webservice)要求其他厂商转换PDF文档并且序列此文档上传到归档系统。
缺点:此种方式要求其他厂商配合性比较高
目前医院系统中电子病历分散在不同的系统中如:PACS,LIS,CIS,EMR,AN)等系统中,各个系统架构(c/s,b/s)与开发语言具有多样性(pb,.net,java),同时文档的格式多样性(html,world,自定义模板文档格式),在各个系统内部转成PDF具有一定的困难性,同时转换后的PDF在压缩比率上也区别很大,经过对比采用虚拟打印机转换的PDF文档一般都是经过很好压缩的且显示效果无损。
综上所述在类似于电子病历归档系统这类的文档采集系统应用中,此种方式具有很大的可行性:
其最大的价值在于系统集成上面,系统集成过渡比较平坦,基本不需要修改任何系统,只要把文档打印到虚拟打印上即可(目前这些系统一般都有打印入口,以把这些文档以纸质的方式来查看保存),而不是要求其他厂商配合,利于系统的快速上线,由于全部采用开源的组件,在系统灵活性和费用方面有很大的优点。
======附注
1.PDFCreator下载地址:http://sourceforge.net/projects/pdfcreator/

2. 基于Microsoft Internet Transfer Control 的ftp vb脚本:
=============begin=========
' FTP upload script
' Part of PDFCreator
' License: GPL
' Homepage: http://www.sf.net/projects/pdfcreator
' Version: 1.1.0.0
' Date: September, 1. 2005
' Author: Frank Heind鰎fer

Option Explicit

Const AppTitle = "PDFCreator - FTPUpload"

Dim objArgs, fname, domain, user, pass, rdir

domain="127.0.0.1"
rdir="archive"
user="root"
pass="root"

Set objArgs = WScript.Arguments

If objArgs.Count = 0 Then
MsgBox "This script needs a parameter!", vbExclamation, AppTitle
WScript.Quit
End If

fname = objArgs(0)

Call FTPUpload(domain, rdir, user, pass, fname)

Private Sub FTPUpload(domain, rdir, user, pass, fname)
Dim fso, ftpo
Set fso = CreateObject("Scripting.FileSystemObject")
Set ftpo = CreateObject("InetCtls.Inet.1")
ftpo.URL = "ftp://" & domain
ftpo.UserName = user
ftpo.Password = pass
ftpo.Execute , "CD " & rdir

Do
WScript.Sleep 100
Loop while ftpo.StillExecuting

ftpo.Execute , "Put """ & fname & """ """ & fso.GetFilename(fname) & """"

Do
WScript.Sleep 100
Loop while ftpo.StillExecuting

ftpo.Execute , "Close"
End Sub
=============end=========

基于虚拟打印的PDF文档归档探索相关推荐

  1. 如何将网页打印成PDF文档?没看错,这个真可以!

    当我们在浏览器上看到某篇文章时,需要保存下来,大家都会用哪种方式呢? 一般的小伙伴都是复制内容,然后粘贴到Word里,为了美观,然后再重新排版.其实这种方法并不是不可,但是如果遇到有限制的文章.那么就 ...

  2. 利用pypdf2 安装包 基于 python 制作的PDF 文档合并脚本

    本篇文章主要讲解,利用python的安装包 pypdf2 制作的可视化pdf合并工具 作者:任聪聪 日期:2022年1月27日 使用效果 说明: 1.文件列表可以手动进行编辑,一行一个. 2.可以指定 ...

  3. C# 打印PDF文档的10种方法

    操作PDF文档时,打印是常见的需求之一.针对不同的打印需求,可分多种情况来进行,如设置静默打印.指定打印页码范围和打印纸张大小.双面打印.黑白打印等等.经过测试,下面将对常见的几种PDF打印需求做一些 ...

  4. C# 六种方案打印PDF文档

    打印PDF文档是开发人员经久不变的话题,常见的打印需求大致有以下六种: 用默认打印机打印PDF文档 用虚拟打印机打印PDF文档 指定打印机及PDF文档的打印页码范围 静默打印PDF文档 双面打印PDF ...

  5. ios html格式转换,如何使用HTML模版和iOS中的UIPrintPageRenderer来生成PDF文档

    如何使用HTML模版和iOS中的UIPrintPageRenderer来生成PDF文档 作者:GABRIEL THEODOROPOULOS,时间:2016/7/10 翻译:BigNerdCoding, ...

  6. 如何使用ABBYY FineReader 14创建PDF文档

    最新ABBYY FineReader 14不仅可以保护PDF文档.签署PDF文档.编辑图片和文本.复制PDF里的内容.标记文本,现在还可以创建PDF文档,这都归功于其强大的PDF编辑器功能. 从选中的 ...

  7. 【解密】PDF文档忘记编辑密码 照样编辑

    本文目录 方式一.打开网站,解除限制 方式二.使用 " PDF 补丁丁 " 软件 在文档编辑过程中,为了防止别人修改我们的文档,常常会给文档设置限制编辑的密码.不过有时也会&quo ...

  8. HTML 文档可以映射为,将PDF文档转换为可通过URL访问的HTML文档的最佳方法

    许多人想了解如何将PDF文档转换为可通过URL访问的HTML文档.毕竟,在线发布PDF文档是与他人共享文档的最佳方法,但是,许多程序都不能完成此操作.因此,本文提出万兴PDF这款出色的解决工具,该程序 ...

  9. 利用Django生成PDF文档

    利用Django生成PDF文档 本小节说明如何利用Django视图动态生成PDF文档.此功能是由优秀的开源Python PDF库ReportLab实现的. 动态生成PDF文档的好处在于你可以定制PDF ...

  10. VUE 获取PDF文档流直接打印

    一.项目需求 前端点击按钮直接调起打印对应pdf文档. 二.踩坑 刚开始通过api获取后端给的PDF地址,创建一个隐藏的iframe标签src设置为pdf地址:前端通过获取隐藏的iframe标签的id ...

最新文章

  1. linux 多个变量,linux-BASH-使用相同“变量”的多个实例读入...
  2. P7888-「MCOI-06」Distinct Subsequences【dp】
  3. 选择用 Java 开发 GUI:
  4. PAT 1012 数字分类 (20)
  5. 把Python项目打包成exe文件
  6. .net core 获取机器码_.NET Core 反射获取所有控制器及方法上特定标签
  7. 知识管理夏季论坛,免费,欢迎你来!
  8. 嵌入式系统——面向对象的设计原则
  9. restsharp简单使用
  10. 华为android 驱动安装失败,华为手机驱动出现安装失败的问题怎样解决?
  11. jsbarcode生成条码
  12. 每日10行代码86: 计算两个向量的夹角余弦值
  13. Java学习第二十四天
  14. python数据收集整理教案_《数据收集整理》教学设计
  15. macos支持exfat吗_微软说,对Linux开放exFAT存储了!跨系统存储的福音
  16. h5课件制作_PPT轻松转化H5,让“课件”动起来!
  17. 【Oracle】一条SQL的一生
  18. Type safety: The expression of type List needs unchecked conversion to conform to ListXXX解决办法
  19. html中如何做出生年月日,出生年月日怎么换成生辰八字
  20. 三星i865刷android,三星S11加持黑科技,16GB+骁龙865,手机流畅度超越电脑

热门文章

  1. 微型四轴飞行器(1)
  2. ftp服务器复制文件命令,FTP服务器的Copy命令的使用
  3. 进度类计算_PERT
  4. 012 外接功放喇叭模块
  5. 条码软件如何制作SCC-14条形码
  6. 数学分析教程(科大)——1-(1~10)小节
  7. windows开启ftp服务及FTP命令使用
  8. C++ 实现CRC循环冗余校验码
  9. 谷歌生物医学翻译软件_翻译器可翻译方言和文言文 超出谷歌微软的翻译软件能力...
  10. openproject_OpenProject入门