封装多页文档,支持光栅和SVG图像、书签、注释和文本数据。
[DataContractAttribute ()]
公共摘要类LEADDocument: IDisposable
的LEADDocument类为任何类型的文档提供统一的支持。它背后的实际数据可以是PDF文档、Microsoft Word文档、TIFF图像、AutoCAD DWG绘图,或者数百种不同的栅格、文档或矢量中的任何一种LEADTOOLS支持的文件格式.LEADDocument封装使用相同的属性、方法和数据结构统一访问此数据所需的通用功能。
LEADDocument的输入主题是,它可用于查看文档及其页面,包括缩略图、虚拟化、文本搜索和注释支持。
LEADDocument也可以用作输入DocumentConverter,将文件转换为任何其他文件格式,无论是否使用OCR技术。
一个LEADDocumentInstance可以通过以下任何一种方法获得:
方法 | 描述 |
---|---|
DocumentFactory。LoadFromFile | 从磁盘或网络共享上的现有文档文件创建一个新实例。 |
DocumentFactory。LoadFromUri | 从存储在远程URL中的文档创建一个新实例。 |
DocumentFactory。LoadFromUriAsync | 从存储在远程URL或磁盘上的文档异步创建新实例。 |
DocumentFactory。LoadFromUriAsync | 从存储在远程URL中的文档异步创建新实例。 |
DocumentFactory。LoadFromStream | 从存储在流中的现有文档创建一个新实例。 |
DocumentFactory。LoadFromCache | 从缓存加载以前保存的文档。 |
DocumentFactory。创建 | 创建一个新的空文档。 |
获取文件后,InternalObject将是文档使用的内部LEADTOOLS对象。
在大多数情况下LEADDocument在得到它之后就可以使用了。但是,有些文档(如PDF)可以加密,在解析和使用之前需要密码。的大多数性质和方法LEADDocument如果文档未解密,将抛出错误。IsEncrypted可用于检查文档是否加密,如果是,解密必须用从用户获得的密码调用以解锁文档。当这种情况发生时,的价值IsDecrypted就变成了真正的文档已经准备好可以使用了。
请注意,IsEncrypted将保持真正的表示文档的原始状态。
的SaveToFile而且SaveToUri方法可用于将文档保存到磁盘文件或远程URL。这些方法支持将文档保存为光栅图像格式,而不是文档。方法对文档进行转换,在大多数情况下都应使用DocumentConverter类,它具有更多的选项和控制。
每个文档都有一个由框架在创建时设置的唯一标识符。它存储在DocumentId财产。当在缓存系统中使用文档时,ID很重要。ID是从缓存中完全重新构建文档所需的惟一值。
方法可以由用户手动设置文档IDLoadDocumentOptions。DocumentId,CreateDocumentOptions。DocumentId,或UploadDocumentOptions。DocumentId在加载、创建或上传文档时使用的选项。如果DocumentId留给零,工厂将生成一个新的随机ID,并使用DocumentFactory。NewCacheId.
文档可以包含许多页面和大量数据。在大多数情况下,将所有这些数据存储在物理内存中是不可行的。因此,LEADDocument类设计为使用外部缓存系统来存储修改后的数据。指DocumentFactory。缓存更多信息。
HasCache确定此文档是否正在使用缓存系统。调用SaveToCache将文档保存到缓存中并使用DocumentFactory。LoadFromCache.AutoDeleteFromCache而且AutoSaveToCache可用于确定在处理文档时与文档关联的缓存数据会发生什么。
DocumentStructure管理文档的结构。这个结构包括表示目录的书签。通过结构的属性LEADDocument.
DocumentPages管理文档的页面。通过页面的属性LEADDocument.
DocumentPages来源于LeadCollection < T >因此可以实现System.Collections.ObjectModel.Collection.您可以使用任何集合方法来添加、删除、插入、获取、设置和遍历页面。
DocumentPages包含的集合DocumentPage对象,每个对象包含文档中单个页面的数据。页面项是在查看器或转换应用程序中使用文档的主要入口点。DocumentPage包含检索或更新页面的栅格或SVG图像、文本数据、注释和超链接的函数。指DocumentPage更多信息。
DocumentDocuments管理文档的子文档。通过文档的属性LEADDocument.
DocumentDocuments来源于LeadCollection < T >因此可以实现System.Collections.ObjectModel.Collection.您可以使用任何收集方法来遍历文档。但是,此集合是只读的,因此不能添加、删除或更改项。相反,使用页面向此文档添加或删除属于单独文档的页面。的LEADDocument。文档集合将自动更新,以反映文档中当前保存的子文档。
可以启用和访问文档修改历史和跟踪DocumentHistory对象。可以通过历史的属性LEADDocument.
类添加的默认值包含元数据DocumentFactory当加载或创建文档时,以及从文档文件本身提取的任何其他数据(如作者、主题和其他应用程序存储的任何关键字)。
下面的属性是LEADDocument并包含有用的信息:
对原始文档数据的访问取决于文档的创建方式及其缓存状态,如下所示:
的结果LoadFromFile:GetDocumentFileName将包含传递给方法的文件的原始名称。GetDocumentStream将返回零.
的结果LoadFromUri当不使用缓存时:GetDocumentFileName将返回用于存储数据的临时文件的名称。
的结果LoadFromUri当使用缓存时:如果缓存支持外部资源(磁盘访问),那么GetDocumentFileName将包含磁盘中保存缓存项的文件的名称。如果缓存不支持外部资源(磁盘访问),则GetDocumentFileName将返回零,GetDocumentStream将返回可用于访问数据的有效只读流。
的结果LoadFromCache (ObjectCache字符串):缓存的使用是自然的和相同的规则LoadFromUri适用。
的LEADDocument类包含以下对象,用于管理整个文档中使用的全局设置。
LEADDocument所有物品都使用1/720英寸的独立单位。该值存储在UnitsPerInch常数(720)。指文献库坐标系统更多信息。
LEADDocument实现了系统。IDisposable而且必须在使用后处理掉。指系统。IDisposable在. net中获取更多信息。如果文档被保存到缓存中,则可以在它被处理后重新构造文档(AutoSaveToCache被设定为真正的,或SaveToCache使用)。
这个示例加载一个文档并显示其所有信息。
使用Leadtools;
使用Leadtools.Codecs;
使用Leadtools.Document.Writer;
使用Leadtools.Document;
使用Leadtools.Caching;
使用Leadtools.Annotations.Engine;
使用Leadtools.Ocr;
使用Leadtools.Barcode;
使用Leadtools.Document.Converter;
公共无效DocumentExample ()
{
var缓存= GetCache();
var政策=新CacheItemPolicy ();
政策。一个bsoluteExpiration = DateTime.Now +新TimeSpan(0,0,1);
政策。SlidingExpiration =新TimeSpan(0,0,1);
var选择=新LoadDocumentOptions ();
选项。缓存Policy = policy;
选项。缓存= cache;
字符串documentId =零;
使用(vardocument = DocumentFactory.LoadFromFile(Path.Combine(LEAD_VARS.ImagesDir),“Leadtools.pdf”),选择)
{
文档。一个utoDeleteFromCache =假;
PrintOutDocumentInfo(文档);
documententid = document. documententid;
document.SaveToCache ();
}
System.Threading.Thread.Sleep (2000);
varloadFromCacheOptions =新LoadFromCacheOptions ();
loadFromCacheOptions。Cache = Cache;
loadFromCacheOptions。DocumentId= documentId;
使用(vardocument = documentfactory . loadFromCacheOptions))
{
如果(零= =文档)
{
控制台。WriteLine (“缓存的文档已过期并已删除!”);
}
}
}
公共无效PrintOutDocumentInfo (LEADDocument文档)
{
控制台。WriteLine (“一般”);
控制台。WriteLine (DocumentId:“+ document.DocumentId);
如果(文档。Uri ! =零)
控制台。WriteLine (”Uri:“+ document.Uri);
控制台。WriteLine (名称:“+ document.Name);
控制台。WriteLine (”CacheStatus:“+ document.CacheStatus);
控制台。WriteLine (”LastCacheSyncTime:“+ document.LastCacheSyncTime);
控制台。WriteLine (”IsReadOnly:“+ document.IsReadOnly);
控制台。WriteLine (”IsLocal:“+ document.IsLocal);
控制台。WriteLine (MimeType:“+ document.MimeType);
控制台。WriteLine (”IsEncrypted:“+ document.IsEncrypted);
控制台。WriteLine (”IsDecrypted:“+ document.IsDecrypted);
控制台。WriteLine (“用户数据:“+ document.UserData);
控制台。WriteLine (“缓存”);
控制台。WriteLine (”HasCache:“+ document.HasCache);
控制台。WriteLine (”AutoDeleteFromCache:“+ document.AutoDeleteFromCache);
控制台。WriteLine (“元数据”);
foreach(var项在document.Metadata)
控制台。WriteLine (“{0}{1}”,项目。键,item.Value);
控制台。WriteLine (“文件”);
控制台。WriteLine (“数:”+ document.Documents.Count);
foreach(varchildDocument在document.Documents)
{
控制台。WriteLine (名称:“+ childDocument.Name);
}
控制台。WriteLine (“页面”);
控制台。WriteLine (“数:”+ document.Pages.Count);
为(varpageNumber = 1;pageNumber <= document.Pages.Count;pageNumber + +)
{
var页面=文档。页面[pageNumber - 1];
控制台。WriteLine (”PageNumber:“+ pageNumber);
控制台。WriteLine (”OriginalPageNumber:“+ page.OriginalPageNumber);
控制台。WriteLine (”OriginalDocumentName:“+ page.Document.Name);
控制台。WriteLine (“大小:{0}”, page.Size);
}
控制台。WriteLine ("--------");
}
公共ObjectCache GetCache ()
{
//创建一个LEADTOOLS FileCache对象
varcacheDir = Path.Combine(“缓存”);
如果(Directory.Exists (cacheDir))
目录中。删除(cacheDir,真正的);
Directory.CreateDirectory (cacheDir);
var缓存=新FileCache ();
缓存。缓存Directory = cacheDir;
返回缓存;
}
静态类LEAD_VARS
{
公共常量字符串ImagesDir =@“C: \ LEADTOOLS22 \ Resources \图片”;
}
静态类LEAD_VARS
{
公共常量字符串ImagesDir =@“C: \ LEADTOOLS22 \ Resources \图片”;
}