- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 acrobat.tlb 库解析 .pdf
带连字符的单词被拆分成新行,连字符被删除。
例如
ABC-123-XXX-987
解析为:
美国广播公司
123
XXX
987
如果我使用 iTextSharp 解析文本,它会解析文件中显示的整个字符串,这是我想要的行为。但是,我需要在 .pdf 中突出显示这些字符串(序列号),而 iTextSharp 没有将突出显示放在正确的位置......因此 acrobat.tlb
我正在使用此代码,来自此处:http://www.vbforums.com/showthread.php?561501-RESOLVED-2003-How-to-highlight-text-in-pdf
' filey = "*your full file name including directory here*"
AcroExchApp = CreateObject("AcroExch.App")
AcroExchAVDoc = CreateObject("AcroExch.AVDoc")
' Open the [strfiley] pdf file
AcroExchAVDoc.Open(filey, "")
' Get the PDDoc associated with the open AVDoc
AcroExchPDDoc = AcroExchAVDoc.GetPDDoc
sustext = "accessorizes"
suktext = "accessorises"
' get JavaScript Object
' note jso is related to PDDoc of a PDF,
jso = AcroExchPDDoc.GetJSObject
' count
nCount = 0
nCount1 = 0
gbStop = False
bUSCnt = False
bUKCnt = False
' search for the text
If Not jso Is Nothing Then
' total number of pages
nPages = jso.numpages
' Go through pages
For i = 0 To nPages - 1
' check each word in a page
nWords = jso.getPageNumWords(i)
For j = 0 To nWords - 1
' get a word
word = Trim(CStr(jso.getPageNthWord(i, j)))
'If VarType(word) = VariantType.String Then
If word <> "" Then
' compare the word with what the user wants
If Trim(sustext) <> "" Then
result = StrComp(word, sustext, vbTextCompare)
' if same
If result = 0 Then
nCount = nCount + 1
If bUSCnt = False Then
iUSCnt = iUSCnt + 1
bUSCnt = True
End If
End If
End If
If suktext<> "" Then
result1 = StrComp(word, suktext, vbTextCompare)
' if same
If result1 = 0 Then
nCount1 = nCount1 + 1
If bUKCnt = False Then
iUKCnt = iUKCnt + 1
bUKCnt = True
End If
End If
End If
End If
Next j
Next i
jso = Nothing
End If
For i = 0 To nPages - 1
' check each word in a page
nWords = jso.getPageNumWords(i)
For j = 0 To nWords - 1
' get a word
word = Trim(CStr(jso.getPageNthWord(i, j)))
最佳答案
我可以理解 iTextSharp
高亮文本时很麻烦,因为你必须画一个矩形并且变得复杂但acrobat.tlb
的解决方案也有它的缺点。是不是 免费的,很少有人会用。对于我们其他人来说,更好的解决方案是免费且易于使用的 Spire.Pdf
.您可以从 NuGet 包中获取它。该代码执行以下操作:
- Opens .pdf
- Read each text page
- using regular expression find matches
- save them to a list of strings eliminating duplicates
- for each string in this list search page and highlight the word
Dim pdf As PdfDocument = New PdfDocument("Path")
Dim pattern As String = "([A-Z,0-9]{3}[-][A-Z,0-9]{3}[-][A-Z,0-9]{3}[-][A-Z,0-9]{3})"
Dim matches As MatchCollection
Dim result As PdfTextFind() = Nothing
Dim content As New StringBuilder()
Dim matchList As New List(Of String)
For Each page As PdfPageBase In pdf.Pages
'get text from current page
content.Append(page.ExtractText())
'find matches
matches = Regex.Matches(content.ToString, pattern, RegexOptions.None)
matchList.Clear()
'Assign each match to a string list.
For Each match As Match In matches
matchList.Add(match.Value)
Next
'Eliminate duplicates.
matchList = matchList.Distinct.ToList
'for each string in list
For i = 0 To matchList.Count - 1
'find all occurances of matchList(i) string in page and highlight it
result = page.FindText(matchList(i)).Finds
For Each find As PdfTextFind In result
find.ApplyHighLight(Color.BlueViolet) 'you can set your color preference
Next
Next 'matchList
Next 'page
pdf.SaveToFile("New Path")
pdf.Close()
pdf.Dispose()
regular expression
所以你可以实现你的。无论如何,这就是我的方法。
关于.net - 使用 .NET VB 或 C# 中的 acrobat.tlb 从 .pdf 中提取完整的带连字符的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52291322/
我有一个 C# dll 并使用 regasm 生成了一个 tlb。我已经为使用此 tlb 的用户提供了一个实用程序电子表格。每次发布我们的应用程序的新版本时,tlb 都会取消注册和注册(使用 rega
我编写了一个简单的 C++ 程序,使用 for 循环打印从 1 到 100 的数字。我想找出特定程序在运行时发生的 TLB 命中数和未命中数。有没有可能得到这些数据? 我正在使用 Ubuntu。我用过
谁能解释一下“Register for COM Interop”与 “regasm.exe xxxx.dll/tlb:xxxx.tlb” 之间的区别。 根据我的理解,“Register for COM
有人可以解释一下 TLB(翻译后备缓冲区)未命中和缓存未命中之间的区别吗? 我相信我发现 TLB 指的是某种虚拟内存地址,但我并不太清楚这实际上意味着什么? 我理解当一块内存(缓存线的大小)加载到(L
TLB 层次结构是否包含在现代 x86 CPU 上(例如 Skylake,或者其他 Lake)? 例如,prefetchtn将数据带到一级缓存n + 1以及DTLB中相应的TLB条目。它也会包含在 S
所以我正在研究这个执行一些页表操作的内核模块,我注意到刷新 TLB 条目很慢。你问多慢?每次调用 invlpg 的时间超过 100 ns!即 280 个周期或更多。我愿意接受这一点......但是对于
我听说 TLB 是由 MMU 维护的,而不是 CPU 缓存。 那么CPU上是否存在一个TLB并在所有处理器之间共享,或者每个处理器都有自己的TLB缓存? 谁能解释一下MMU和L1、L2 Cache之间
我正在开发一个通过 COM 互操作公开一些 .NET API 的产品。作为构建的一部分,我们为所有此类程序集生成 *.tlb 文件,并将它们作为单独 SDK 包的一部分提供。我们的客户可以在我们的产品
假设我们有意破坏 DTLB,并希望在(很可能)与地址不相交的内存区域上使用 clflush 继续刷新 L1-3 的特定缓存行由 TLB 条目指向;这实际上会将我们正在刷新的缓存行的页面基地址带回 TL
我在 VxWorks 中遇到 TLB(加载字或指令获取)异常。当我进一步分析时,我了解到所引用的内存地址并未指向有效的内存位置。 据我了解,此问题可能是由于某些内存损坏(可能是内存覆盖)而发生的。但是
我对操作系统中的内存管理有疑问。我知道缓存是用于加速内存访问的临时存储位置,而 TLB 用于加速从虚拟地址到物理地址的转换。 现在如果生成一个虚拟内存地址,第一步是什么? 如果第一步是引用 TLB 并
我有一个 32 位 DLL,旨在通过 com 模型和关联的 tlb 文件进行访问。 DLL 似乎是 x86。 有什么方法可以从 x64 程序访问这种 DLL 吗? tlb 文件是否与 x86/x64
我有一个 .tlb 文件,它通过 COM 公开了 C# DLL 的函数。我希望在运行时加载此 .tlb 并在我的 native 项目中使用这些函数。 虽然我可以使用 LoadTypeLib 函数加载库
页表将每个虚拟页面与其关联的物理框架相关联。TLB 的作用相同,只是它只包含页表的一个子集。 如果页表做同样的事情并且有更多的数据,TLB的目的是什么? 最佳答案 速度。 TLB 是保存(可能)最近使
内存屏障保证数据缓存是一致的。但是,它是否保证 TLB 是一致的? 我看到一个问题,即在线程之间传递 MappedByteBuffer 时,JVM(java 7 update 1)有时会因内存错误(S
我遇到了以下问题,我不确定如何解决它: Consider a virtual memory system with the following properties: · 35-bit virtual
我有一个非常简单的问题,QEMU 是否模拟 TLB?当 guest linux 系统执行“invlpg”指令时会发生什么,因为它是为了使 TLB 条目无效。我知道 QEMU 有 softmmu lin
我正在努力解决这个问题(好吧,在考试前一个晚上塞满了:)但我无法弄清楚(也无法在网上找到一个很好的高级概述): '页表条目可以映射到多个 TLB 条目。例如,如果每个页表条目都映射到两个 TLB 条目
假设页面大小为 1KB,如何计算类似以下代码片段的代码中的 TLB 未命中数: int i; int p[1024]; for (i=0; i<1024; i++) p[i]=0; 除了知道#
我目前的工作需要在 Intel Core 系列的 CPU 上生成指定数量的 TLB 未命中,但进展并不顺利。我尝试了很多方法,但所有方法的 TLB 命中率都非常高。有谁知道一些关于 x86 TLB 如
我是一名优秀的程序员,十分优秀!