PDFTK 突发、初始文件名控制

PDFTK 突发、初始文件名控制

使用 PDFTKburst将多页 PDF 文件拆分为单个文件,我需要一种方法来允许我控制输出文件命名约定的第一个文件名和起始编号。

例如我希望它提取到自己的 PDF 文件的第一页的初始文件名为:“ e00526.pdf”。这样,它会以增量方式“拆分”多页 PDF 文件,例如:“ e00526.pdf”、“ e00527.pdf”、“ e00528.pdf”等。输出文件名明智。

目前我拥有的是:

#[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null
#$firsFile = [Microsoft.VisualBasic.Interaction]::InputBox("Enter first file name:", "File name")

$firstFile = "e00526"

$QRDir = "C:\1_PDF"

chdir $QRDir

$output = "e00526%d.pdf"

pdftk input.pdf burst output $output

但是,这给出了一个突发文件输出命名标准,即在1提取到其自身 PDF 文件的第一页的基本文件名末尾附加 。然后,它11为后续提取的每个页面增加附加 。

这段代码的作用如下:e005261.pdf”、“ e005262.pdf”、“”、“ e005263.pdf, ETC。

我需要的:e00526.pdf”、“ e00527.pdf”、“”、“ e00528.pdfETC。

因此,不要附加1之后6在文件名中,应该增加67等,但从第二个提取的页面开始,所以我控制起始页面1文件名。


更新

由于这个排序问题,我认为这不可能起作用:

排序问题

“e005261.pdf” 应该变成“e00526.pdf”,而“e0052611.pdf”应该变成“e00537.pdf”

这就是为什么我认为如果我们找到一种方法给它第一个文件名并让它之后增加 1 位数字,那么整个事情就会变得容易得多。

答案1

下面是文件重命名后 PDFTK 操作解决方案,它将使用逻辑获取基本文件名部分并将其设置为int数据类型,计算您想要的增量数字值,然后将它们连接在一起以用于每个文件的新基本文件。

电源外壳

笔记:从下面的 PowerShell 中删除-Whatif以运行逻辑,而不是告诉您运行后会发生什么。此外,如果您需要递归遍历子文件夹,C:\1_PDF\您可以-RecurseGet-ChildItem命令中添加参数(即Get-ChildItem -Path "C:\1_PDF\*.pdf" -Recurse)。

Get-ChildItem -Path "C:\1_PDF\*.pdf" | % { Process { 
    $firstFile = [string]$_.Basename;
    Try { [int]$fnameF = $firstFile[1..5] -join ""} Catch {};
    Try { [int]$fnameL = $firstFile[6..99] -join ""} Catch {};
    $f = Try { [convert]::ToInt32($firstFile[6..99] -join "", 10) } Catch {};
    If ( $f -is [int] ) { 
        Rename-Item -Path $_.FullName -NewName "$($_.BaseName[0])$(([string]($fnameF+$fnameL-1)).PadLeft(5,"0"))$($_.Extension)" -WhatIf;
        } Else {
        Write-Host "$($_.BaseName)$($_.Extension) does not end with numerical digits in its basename." -ForegroundColor Yellow 
        };
    }}; 

支持资源

答案2

让我们像上次一样尝试一下。

正如您所描述的,重命名文件将成为一个问题,因此让我们想想另一种方法。

我们可以逐页提取并定义每个页面的文件名。我们首先需要找到页数,这应该使用以下命令:

$totalPages = pdftk $firstFile dump_data | Select-String "NumberOfPages"

现在让我们设置一些东西来开始。

#First we determine our starting number by dropping the first letter from the filename and turning it into an integer.
$startingNumber = [int]$firstFile.substr(1)
$currentNumber = $startingNumber

#Now we iterate through every page we want to extract
For ($i = 1; i -le $totalPages; i++) {
    #create an output name based on the current number
    $outName = "e" + $currentNumber.ToString('00000') + ".pdf"

    #output the one page
    pdftk input.pdf cat $currentNumber output $outName

    #increment currentNumber with one
    $currentNumber++
}

答案3

不工作

这就是我所做的,稍微改变了你的代码:

$WorkDir = "D:\Bank\QR_ES\1_ES_Test"

chdir $WorkDir

$totalPages = pdftk QR.pdf dump_data | Select-String "NumberOfPages"

#First we determine our starting number by dropping the first letter from the filename and turning it into an integer.
$startingNumber = [int]$firstFile.substr(1)
$currentNumber = $startingNumber

#Now we iterate through every page we want to extract
For ($i = 1; i -le $totalPages; i++) {
    #create an output name based on the current number
    $outName = "e" + $currentNumber.ToString('00000') + ".pdf"

    #output the one page
    pdftk input.pdf cat $currentNumber output $outName

    #increment currentNumber with one
    $currentNumber++
}

这是错误代码,虽然是德语:

PS D:\Bank\QR_ES\1_ES_Test> C:\Users\Sasha\Desktop\Test.ps1
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\Users\Sasha\Desktop\Test.ps1:8 Zeichen:1
+ $startingNumber = [int]$firstFile.substr(1)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
i : Die Benennung "i" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms 
erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den 
Vorgang.
In C:\Users\Sasha\Desktop\Test.ps1:12 Zeichen:14
+ For ($i = 1; i -le $totalPages; i++) {
+              ~
    + CategoryInfo          : ObjectNotFound: (i:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

相关内容