PDF 内のハイパーリンクを検索して置換する

PDF 内のハイパーリンクを検索して置換する

Windows 8.1 OS で、100 個以上の PDF ファイル内の href (アンカー テキストではない) を検索して置換するプロセスを自動化したいと考えています。

機能する PDF として再コンパイルできる限り、ファイル形式を変換させていただきます。

更新: 見つけて置き換えることができましたhrefのみPDFTK を使用します。

  1. pdftk foo.pdf 出力 foo.tmp 解凍
  2. テキストエディタを使用してリンクを見つけて編集する
  3. pdftk foo.tmp 出力 foo-updated.pdf 圧縮

ここで、検索と置換リストから foo.tmp の値を置き換えることで手順 2 を自動化できる cmdline ツールが必要です。

答え1

ここではWindows OSについてお話します。バッチタグではバッチ処理ではなくバッチlang、とにかく私はアドバイスしますバッチ基本的な共通システムベースのタスクのみをカバーする限定的な言語であり、PDF などのプレーンテキスト以外のファイルを読み取ることは想定されておらず、読み取ることができません。

PDF のような特定の形式を読み取るには、外部のパーサー/インタープリターが必要です。

良いC#ベースのソリューションは、PDF人間が読める形式で:

https://stackoverflow.com/questions/2550796/reading-pdf-content-with-itextsharp-dll-in-vb-net-or-c-sharp

それは使用していますiTextSharpオープンソースのライブラリ:

http://sourceforge.net/projects/itextsharp/

あるいは、こちらはVBSAdobeユーザーガイドのソリューションに基づくには、コムAdobe アプリからインストールされたオブジェクト。

http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/indesign/sdk/cs6/scripting/InDesign_ScriptingGuide_VB.pdf

このタスクに興味のある章をメモします。

ここに画像の説明を入力してください

VBS について少しサポートするために、役立つ可能性のある VBS スクリプトの質問を以下に示します。

Option Explicit
Dim accapp, acavdocu
Dim pdf_path, bReset, Wrd_count
pdf_path="C:\LS\Test\Invoices\02_2011_PDF\rpt_Invoice_1.pdf"
'AcroExch is acrobat application object
Set accapp=CreateObject("AcroExch.App")
accapp.Show()

'Need to create one AVDoc object par displayed document
Set acavdocu=CreateObject("AcroExch.AVDoc")

'Opening the PDF
If acavdocu.Open(pdf_path,"") Then
acavdocu.BringToFront()
bReset=1 : Wrd_count = 0
'Find Text Finds the specified text, scrolls so that it is visible, and highlights it
Do While acavdocu.FindText("Invoice#", 1, 1, bReset)
bReset=0 : Wrd_count=Wrd_count+1
'Wait 0, 200
Loop
End If

accapp.CloseAllDocs()
accapp.Exit()
msgbox "The word 'Invoice#' was found " & Wrd_count & "times"
Set accap=nothing : Set accapp=nothing

しかし、どうやら期待通りに動作しないようですので、次のサイトから引用します:

http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/Q_26834618.html

関連情報