【发布时间】:2016-12-15 17:56:47
【问题描述】:
使用 Powershell 从 PDF 中剥离内容,同时保持 PDF 格式。
我的任务: 如果文档不是 PDF 格式,我一直在尝试执行一项简单的任务。在大量可用数据开始之前,我有一堆包含不需要的数据的 PDF,这是文档中“%PDF”之前的任何内容。需要一个提取所有所需数据并将其导出到新文件的脚本。那部分超级简单。
问题: 导出的数据似乎格式正确,但不再以 PDF 格式打开。我可以在 Notepad++ 中打开它,它看起来与手动清理并工作的相同。检查 Powershell 修改后的 PDF 的原始代码,“行”似乎比应有的短得多。
$Path = 'C:\FileLocation'
$Output = '.\MyFile.pdf'
$LineArr = @()
$Target = Get-ChildItem -Path $Path -Filter *.pdf -Recurse -ErrorAction SilentlyContinue | Get-Content -Encoding default | Out-String -stream
$Target.Where({ $_ -like '*%PDF*' }, 'SkipUntil') | ForEach-Object{
If ($_.contains('%PDF')){
$LineArr += "%" + $_.Split('%')[1]
}
else{
$LineArr += $_
}
}
$LineArr | Out-File -Encoding Default -FilePath $Output
我了解 PDF 格式并没有真正使用线条,所以这可能是问题的根源所在。当数据最初被放入一个数组时,或者当它被写入时,PDF格式可能被破坏了。有没有办法在修改然后保存时保留 PDF 的格式?可能是我遗漏了一些简单的东西。
【问题讨论】:
-
"检查 Powershell 修改后的 PDF 的原始代码,“行”似乎比应有的短得多。" - 它们缺少什么?跨度>
-
据我所知,这是空白。编码被保留,所有字符看起来都一样。我敢肯定还有其他地方发生了变化。
-
PDF 文件结构引用了相对于文件开头的二进制偏移量,因此您必须正确解析它using iTextSharp
-
我又看了一遍,似乎我愚蠢地误解了空白。字体是变化的。我可能会尝试一些 MS Word 方法来解决这个问题。 @wOxxOm 我一直在避免使用像 iTextSharp 这样的 3rd 方实用程序,主要是因为没有它我似乎非常接近。我昨天确实下载了它,但只是戳了一下它。如果此时我无法掌握似乎是字体问题的问题,我将花更多时间来解决 itextsharp。
标签: powershell pdf file-io