2

PDF メタデータを PDF のリストに追加するスクリプトを作成しています。

私の問題は、名前に特定の文字が含まれる PDF を処理することです。私が試した例では、名前に「en ダッシュ」が含まれていましたが、将来的には確信しています (これらのファイル名は制御しません)。 ) 他にも同様の問題があります。

私はpdfrwPython 2.7を使用しています。現在私は持っています:

from pdfrw import PdfReader,PdfWriter
from os import listdir

def get_files(pwy):
   tr_files=listdir(pwy)
   tr_files2=[]
   for t in tr_files:
      tr_files2.append(pwy+'/'+t)
   return tr_files2

def add_keywords(filename,keywords):
   writer=PdfWriter()
   trailer=PdfReader(filename)
   trailer.Info.Keywords=keywords
   writer.trailer=trailer
   writer.write(filename)

file_list=get_files('C:/example_folder')
for f in file_list:
   add_keywords(f,'some exciting metadata!')

これは、「en ダッシュ」のないファイルに対しては正常に機能します。「ダッシュ」の付いたファイルは、これを実行したときに変更されたことを示していますが、Adobe Acrobat でメタデータを確認すると、何もありません。

これはある種のエンコーディングの問題だと確信しています。「ダッシュ」が と表示されているのでx\96、cp1252 を使用しているに違いありません。私は Spyder 2.3.1 を使用しており、スクリプトの先頭に# - -coding: utf-8 - - があります。

私はThe Absolute Minimum Every Softward Developer Absolutely, Positively Must Know About Unicode and Character Sets and Pragmatic Unicodeを読み、一般に、入力をデコードし、残りのコードを実行したいことを知っています (上に印刷されていませんが、私は使用しますファイル名を指定してデータベースから情報を抽出し、その情報をフォーマットして、結果の文字列をメタデータに入れたい場合)、再度エンコードします。しかし、私はうまくいくものを理解することができませんでした。

解決策は次のいずれかになると思います。

  1. [最善] エンコーディングの問題を正しく処理します。

  2. サブフォルダーである種のバッチ ファイルを実行して、ファイルの名前をスクリプトが処理できる名前に変更し、最後に名前を逆にします (元のファイル名で終了する必要があります)。

どんな助けにも感謝します!私はうまくいったものを見つけることができませんでした。

4

3 に答える 3

1

新たに獲得した Unicode のノウハウは、PDF では役に立ちません。PDF は、Unicode が登場する前に生まれました。

Adobe によって発行された公式のISO 32000_2008 PDF-1.7 仕様の「Annex D (規範): Character Sets and Encodings」を651 ページから検索する必要があります。

en-dashに使用する必要があることがわかります。

  • \263標準エンコーディング用
  • \230Macエンコーディング用
  • \226WinEncoding用
  • \205PDFエンコーディング用

メタデータ (/Info辞書) には、PDFEncoding を使用します。

于 2015-07-07T18:09:12.163 に答える
0

2番目のソリューションの行に沿って、ファイルを 内の別のパスにコピーしてからadd_keywords、作業を行ってPdfWriterからコピーして戻すことができますか? を使用tempfile.mkstemp()して一時的なファイル名を取得できます。または、一度に 1 つだけ実行する場合は、どこかで名前を選択してください...

于 2015-07-10T03:53:33.210 に答える