使用LEADTOOLS自动注释和书签PDF文件

PDF

无论您是为企业对企业协议创建合同,还是将可搜索的PDF存储库组合在一起,都可以找到一个快速高效的PDF查看器是至关重要的。使用市场上所有其他PDF查看器(是的,甚至Adobe!)通常是乏味和耗时的任务,使用LEADTOOLS文档转换器.这包括能力使用OCR提取文本,注释,书签,并添加可搜索的pdf -所有不需要任何手动输入!

在这篇文章中,我们将展示如何使用LEADTOOLS为您的PDF文件添加自动化。首先,我们只需要使用。net 6和Microsoft Worker Service创建几个简单的方法。

工作方法

Worker方法是我们设置项目运行所需的基本必需品的地方。首先,我们调用SetLicense方法来设置LEADTOOLS SDK许可证。然后我们创建并启动OCR引擎和文档转换器。最后一步是创建目录,worker将在其中查找需要更改的文件,以及转换后的文件的输出位置。

public Worker(ILoggerlogger) {_logger = logger;SetLicense ();OcrEngine = OcrEngineManager.CreateEngine(ocrengintype . lead);OcrEngine。启动(null, null, null, null, null);docConverter = new DocumentConverter();docConverter。SetOcrEngineInstance (OcrEngine假);docConverter。SetAnnRenderingEngineInstance(新AnnDrawRenderingEngine ()); docConverter.SetDocumentWriterInstance(new DocumentWriter()); PdfDocumentOptions pdfOpts = docConverter.DocumentWriterInstance.GetOptions(DocumentFormat.Pdf) as PdfDocumentOptions; pdfOpts.ImageOverText = true; docConverter.DocumentWriterInstance.SetOptions(DocumentFormat.Pdf, pdfOpts); if (!Directory.Exists(dropDirectory)) Directory.CreateDirectory(dropDirectory); if (!Directory.Exists(outputDirectory)) Directory.CreateDirectory(outputDirectory); }

ExecuteAsync

ExecuteAsync是我们实际的任务方法,非常简单;它设置FileSystemWatcher“监视”指定的文件夹,每当有任何新文件添加到其中。如果检测到任何,它将使用新文件的参数触发Converter方法。

protected override async Task ExecuteAsync(CancellationToken stoppingToken) {FileSystemWatcher watcher = new FileSystemWatcher(dropDirectory);观察者。Created += Watcher_Created;观察者。EnableRaisingEvents = true;}

Watcher_Created是每当FileSystemWatcher发现一个复制或移动到指定文件夹的新文件时运行的方法。这将持续运行isfilellocked方法,直到它返回true,然后将运行Converter方法。

private void Watcher_Created(对象发送者,FileSystemEventArgs e) {if (e.c changetype == WatcherChangeTypes.Created) {var file = new FileInfo(e.f ulpath);while (IsFileLocked(file)) {} Converter(e.FullPath);}}

isfilellocked方法检查指定监视文件夹中新添加的文件是否已完成复制/移动。此方法一直运行到返回true为止,这表示文件已经完成复制/移动。

private bool IsFileLocked(FileInfo文件){FileStream流= null;try {stream = file.Open(FileMode. open)开放,FileAccess。读写,FileShare.None);} catch (IOException){//文件不可用,因为它是://仍然被写入//或正在被另一个线程处理//或不存在(已经被处理)返回true;} finally {if (stream != null) stream. close ();} //文件未锁定

转换器的方法

Converter方法只使用四行代码,就创建了一个包含当前日期和时间的新文件路径,然后将文件数组和新文件的路径发送到ConvertDocument。最后,它将遍历并清除ExecuteAsync方法将查找的文件夹,以进行转换,以清除队列。

public static void Converter(string[] filesToConvert) {string outputPdfFile =路径。结合(outputDirectory $ @“{DateTime.Now: yyyy.MM.dd.hh.mm.ss} . pdf”);ConvertDocument (filesToConvert outputPdfFile);foreach (var文件在filesToConvert)文件删除(文件);}

文档转换器

ConvertDocument为缓存创建一个文件夹,用于加载和设置每个页面的注释,创建LEADDocument(封装支持光栅和SVG图像、注释、书签和文本数据的多页文档),用于转换和合并文件,并运行DocumentConverter,使文本可搜索,并将注释/书签应用到新创建的. pdf文件。

static void ConvertDocument(string[] filesToConvert, string outputFile) {var cache = GetCache();var docOptions = new CreateDocumentOptions(){缓存=缓存};var leadDocument = DocumentFactory.Create(docOptions);var options = new LoadDocumentOptions() {Cache = Cache};foreach (fileestoconvert中的var文件){var doc = DocumentFactory。LoadFromFile(文件,选项);leadDocument.Pages.AddRange (doc.Pages);} leadDocument。AutoDeleteFromCache = false;leadDocument.Text.OcrEngine = OcrEngine;AddFooterAnnotation (leadDocument); var job = docConverter.Jobs.CreateJob(new DocumentConverterJobData { Document = leadDocument, DocumentFormat = DocumentFormat.Pdf, AnnotationsMode = DocumentConverterAnnotationsMode.Embed, OutputDocumentFileName = outputFile, }); docConverter.Jobs.RunJob(job); var pdfDocument = job.OutputFiles.FirstOrDefault(); BookmarkDocument(pdfDocument); }

获取缓存

GetCache创建一个ObjectCache,它是一个LEADTOOLS FileCache对象,存储在指定的文件位置。

static ObjectCache GetCache(){//创建一个LEADTOOLS FileCache对象var cacheDir = @"C:\Temp\cache";if (Directory. exists (cacheDir))目录。删除(cacheDir,真实);Directory.CreateDirectory (cacheDir);var cache = new FileCache();缓存。CacheDirectory = cacheDir;返回缓存;}

添加页脚注释

AddFooterAnnotation就像它听起来一样!它遍历每个文件的每一页,并在页脚中应用一个简单的文本注释,说明它是在生成的日期和时间自动生成的。

静态无效AddFooterAnnotation(LEADDocument LEADDocument) {foreach (var documentPage in LEADDocument . pages) {documentPage. document . isreadonly = false;var annContainer = documentPage.GetAnnotations(true);这个PDF文件是在{DateTime. var footer = new AnnTextObject {Text = $"这个PDF文件是由一个自动化进程自动生成的。现在:G}", HorizontalAlignment = AnnHorizontalAlignment。中心,TextForeground = AnnSolidColorBrush.Create(“黑色”),TextBackground = AnnSolidColorBrush.Create(“白色”),描边= null,填充= AnnSolidColorBrush.Create(“透明”),字体=新的AnnFont(“arial”,10),Rect = LeadRectD。创建(100,documentPage.Size.Height - 200, documentPage.Size.Width * 3 / 4,215)};annContainer.Children.Add(页脚);documentPage.SetAnnotations (annContainer);documentPage.Document.IsReadOnly = true;}}

添加书签

BookmarkDocument循环遍历每个文件的每一页,很像AddFooterAnnotation,并为每一页创建一个书签,以便当您查看输出的. pdf文件时,书签将能够通过单击将查看器跳转到任何页面。

static void BookmarkDocument(string pdfFile){//创建一个带有几个书签的源文件的版本var file = new pdfFile (pdfFile);file.Load ();var bookmarks = new List();For (int I = 0;i < file.Pages.Count;i++) {PDFFilePage page = file.Pages[i];var bookmark = new PDFBookmark {Title = "Page " + Page . pagenumber . tostring (), BookmarkStyle = PDFBookmarkStyle。Plain, Level = 0, TargetPageNumber = page。PageNumber, TargetPageFitType = PDFPageFitType。默认,TargetPosition =新的PDFPoint(0, page.Height), TargetZoomPercent = 0};bookmarks.Add(书签); } var pdfDocument = new PDFDocument(pdfFile); pdfDocument.ParsePages(PDFParsePagesOptions.Annotations, 1, -1); var annList = new List(); Console.WriteLine(pdfDocument.Pages.Count); foreach (var page in pdfDocument.Pages) { annList.AddRange(page.Annotations); Console.WriteLine(annList.Count); } file.WriteBookmarks(bookmarks, pdfFile); file.WriteAnnotations(annList, pdfFile); }

现在,您有了一个Microsoft Worker Service,它可以使用LEADTOOLS SDK自动添加书签、注释和创建可搜索的PDF文件。你也可以把它做成Microsoft Windows服务。

免费的60天评估SDK

我们提供60天的免费评估,这样您就可以在购买之前使用LEADTOOLS测试所有这些功能和编程。进入我们的丰富的文档188宝金博安卓下载,示例源代码,188金宝搏beat体育官网,教程

LEAD在这里提供帮助!

请联系我们的技术支持团队获取免费技术支持!关于价格或许可问题,可以这样做通过电子邮件联系我们的销售团队或致电704-332-5532。

这一条目已发布文档转换器.书签的永久链接

留下回复

你的电邮地址将不会公布。必填字段已标记