首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDFCreator在PowerShell中将pdf转换为txt

PDFCreator在PowerShell中将pdf转换为txt
EN

Stack Overflow用户
提问于 2020-02-27 15:56:16
回答 1查看 1.2K关注 0票数 1

更新评论:我尝试使用PDFCreator通过PowerShell将pdf文件转换成txt文件,但它似乎仍然不起作用。

任何帮助都是非常感谢的!

代码语言:javascript
复制
$PDFCreator = New-Object -ComObject PDFCreator.JobQueue
$PDF = 'C:\Users\userName\Downloads\SampleACORD.pdf'
$TXT = 'C:\Users\userName\Downloads\SampleACORD.txt'

try {
$PDFCreator.initialize()


  if($PDFCreator.WaitForJob(5)){
  $PJ = $PDFCreator.NextJob
  }

  if($PJ){
  $PJ.PrintFile($PDF)
  $PJ.ConvertTo($TXT)
  }
} catch {
    $_
    Break
}   
finally {
  if($PDFCreator){
    $PDFCreator.ReleaseCom()
  }
}
EN

回答 1

Stack Overflow用户

发布于 2020-02-27 16:12:12

你会明白这一点,因为$PJ$nullNextJob什么也不回。

为了防止这种情况,WaitForJob(int)返回一个bool,如果一个任务到达$true,如果没有返回$false,那么在WaitForJob完成之后,您应该知道是否有一个任务需要得到:

代码语言:javascript
复制
if( $PDFCreator.WaitForJob(5) ){
  $PJ = $PDFCreator.NextJob

  $PJ.allowDefaultPrinterSwitch('C:\Users\userName\Downloads\SampleACORD.txt', $true)
  $PJ.ConvertTo($TXT)
} else {
  # Handle the no jobs case here
}

您还可以在尝试调用$PJ之前对$PJ.allowDefaultPrinterSwitch执行空检查。

代码语言:javascript
复制
if( $PJ ){
  $PJ.allowDefaultPrinterSwitch('C:\Users\userName\Downloads\SampleACORD.txt', $true)
  $PJ.ConvertTo($TXT)
}

下面是有关PDFCreator.JobQueue API的更多信息,您可能会发现这些信息很有用。

为了解决未生成文件的注释中的问题,这一页的文件解释了转换过程应该如何工作的逻辑流程:

  1. 使用COM对象调用Initialize()方法。
  2. 如果您正在等待一个打印作业进入队列,请调用WaitForJob(timeOut)。参数timeOut指定队列等待打印作业到达的最长时间。
  3. 现在,您可以通过调用属性NextJob在队列中获得下一个作业。
  4. 使用SetProfileByGuid(guid)方法设置作业的概要文件。guid参数用于分配适当的转换配置文件。
  5. 使用ConvertTo(path)开始打印作业的转换。path参数包括保存转换文件的位置的完整路径及其全名。
  6. 属性IsFinished通知转换状态。如果完成了打印工作,IsFinished将返回true。
  7. 如果您想知道工作是否已成功完成,请考虑属性IsSuccessful。如果成功转换作业,则返回true,否则为false。

在您的例子中,我不确定概要文件有多重要,但看起来您的代码没有等待完成。下面的代码将等待转换作业完成(如果需要,检查是否成功):

代码语言:javascript
复制
# Wait for completion
while( -Not $PJ.IsFinished ){
  Start-Sleep -Seconds 5
}

# Check for success
if( $PJ.IsSuccessful ){
  # success case
} else {
  # failure case
}

不相关的,但良好的实践,包装您的代码在一个try/finally块,并将您的COM发布在该块。这样,即使在出现终止错误时,您的COM连接也会干净地关闭:

代码语言:javascript
复制
$PDFCreator = New-Object -ComObject PDFCreator.JobQueue

try {

  # Handle PDF creator calls

} finally {
  if( $PDFCreator ){
    $PDFCreator.ReleaseCom()
  }
}

保证在返回到父作用域之前执行finally块,因此无论代码成功还是失败,finally块都将被运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60437107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档