
Ubuntu日本語フォーラム
ログインしていません。
ラップトップにWindows11 & LinuxMint20.04 のデュアルブート環境で利用しています。
ITコストを抑えるために、将来的に社内端末のUbuntuデフォを画策していて、人柱としてWinを使わずにどれだけ仕事ができるかにチャレンジしていましたが。2週間で大きな壁が立ちはだかりました。
MS-PublisherというDTPソフトがMicrosoft365 Businessで使えるので、他部署でそれを使って顧客向けのパブリシティー(PDF)を作成していますが、昨日送られたファイルをubuntuのドキュメントビューワで開こうとすると、「IOデータエラー、ファイルが破損しています」とエラーが表示されて閲覧することができません。本日届いたファイルも同様に開くことができませんでした。
両方のファイルともに、Win、Mac標準のビューワでは閲覧できます。アプリ側の問題かとUbuntu側でpdftotextを使って、中のテキストを読みに行こうとしましたが、Couldn't find trailer dictionary Couldn't read xref table というエラーが表示されて、失敗します。
中身を見ていると、昨日のファイルの文中には「吉田」さんが登場するのですが、「吉」の上が「土」に「口」になっていました。本日のファイルには全角のローマ数字「Ⅰ」「Ⅱ」がありました。
「機種依存文字」などでググりましたが、解決に至る情報は見つからず。オンラインでのPDF修復サービスを使って復元すると中の文字がすべて文字化けします。
いろいろ試すうちに、
Win環境でweb版の「I love PDF」を使いPDFをマージすると、分割後のPDFをUbuntu側でも閲覧できることが分かりました。(文字化けはしていません)
Ubuntu上のブラウザから同様のことをしようとしても、「ファイルが破損している」とエラーが出てアップロードに失敗します。
PDFsam などのローカル版アプリでも「壊れているので分割できない」と言われてしまいます。
Ubuntu上で閲覧不可のPDFをUbuntu上で閲覧可能にする手立てをご教授いただけると助かります。
よろしくお願いいたしますm(__)m
オフライン
問題の焦点は?
MS-PublisherというDTPソフトで作成したPDFなのか?
それとも、他のPDFでも同じ現象なのか?
PDFビューワーは、ディストリビューションにプレインストールの簡易もの以外にも、
高機能なものも沢山あります。
閲覧不可のPDFで、それら高機能なものは試されたのですか?、変換や分割で細工をする前に。
また、ブラウザでの結果もヒントがあるかもしれませんね。
オフライン
ありがとうございます。
> MS-PublisherというDTPソフトで作成したPDFなのか?
ネット上にあるようなプレスリリースなどのPDFは
・firefox(98.0) pdf.js
・LibreOffice Draw
・PDFStudioViewer2021
・PDF X-Editor(wine)
いずれも閲覧可能です。
閲覧できないのは
MS-Publisherで作成し、機種依存文字を含むPDFで、
MS-Publisherで作成しても、機種依存文字を含まないファイルは閲覧できるので、「機種依存文字」が原因かと思っています。
閲覧不可のファイルを下記アプリで開こうとすると、↓の警告が表示されます。
・firefox(98.0) pdf.js
→プログレスバーが進行中のまま
・LibreOffice Draw
→一般的なエラー I/Oエラー
・PDFStudioViewer2021
→ Invalid PDF Document
・PDF X-Editor(wine)
→ファイルが破損しています
オフライン
PDFビューワにはエンジンの違いがあるようです。
①Poppler系のPDFビューア
②MuPDF系のPDFビューア
②を試してみる価値はあるかもです。
http://note.kurodigi.com/linux-pdfviewer/
オフライン
ありがとうございます。
MuPDF系=文字化け
Poppler系=ファイルが壊れています、PDF document is damaged
いずれもダメでした(;_;)
オフライン
あと思いつく事は私は以下です。
・MS-PublisherというDTPソフトに、何かそれっぽい設定はないか?
・ダメもとでUbuntuの日本語Rimixで試してみる。(関係不明ですが、言語上のバグ手当が幾分されているらしい)
オフライン
直接の解決策ではありませんが、xref table が読めないとうエラーメッセージなのですから、xref table がどういう状況になっているのか把握する必要があるかと思います。
ちょっと乱暴ですが端末ウィンドーで
env LANG=C less 問題のPDFファイル
を実行して下さい。"ファイル名" may be a binary file. See it any way? と聞かれるので y を押します。先頭部分が表示されるはずです。第一行目は
%PDF-1.X改行
(X はその PDF が準拠している規格のバージョンの数字、改行はそのファイルので使われている改行コードで LF だけの場合は画面上単に改行されているだけですが
CR だけ、CR LF の場合は ^M が反転表示されているはずです。)
ここで G を押してファイルの末尾に移動します。最後の方は
0000000000 00000 f
0000354651 00000 n
0000354936 00000 n
trailer
<</Size 129/Root 44 0 R その他トレーラー辞書の内容>>
startxref
3550
%%EOF
のようになっているはずです。トレーラー辞書の内容は 1byte 系文字しか含まれていないはずです。内容や値は個々の PDF ファイルにより異なります。
trailer の前の数字や n f は xref table の末尾でこれもファイルにより値は異なります。
startxref の後の数値(上の例では 3550) をメモして下さい。
trailer の上の方には左側に 0 を補って桁数を揃えた数字が二つと f または n という行が続くはずなので必要なら b を押して xref table の先頭に
さかのぼります。 数値 数値 n または f でなくなる最初の行は
xref 数値 数値改行
となっているはずです。(問題のPDFファイルの改行が CR のみの場合は見つけにくいです。)これが xref table の先頭です、
ここまでのファイルの構造に食い違いがある(例えば規格の上ではトレーラー辞書の終わりの >> と startxref の間にコメントがありそこに binary data が含まれていても構わない)
と xref table の検出に問題を起こすことがあります。
一旦 q で less を終了させます。端末をもう一つ開いて
dd if=問題のPDFファイル bs=1 skip=上でメモした値 | less
を実行します。dd が標準エラー出力に出したメッセージのせいで画面が乱れているので CTRL-L で一度画面を再描画して下さい。画面の一番上の行は
xref
0 NNN
0000000000 65535 f
(NNN は xref table の要素数)以下、先程見た xref table が続いているはずです。そうでなければこの PDF が読めない原因は pdf viewer ではなくファイルの転送にあります。
ありがちなのは
・CR-LF が LF だけに変換されてしまった。
・ファイルシステムがあふれて pdf file が途中で切れてしまった。(xref table はファイルの末尾にあります。)
などなどです。
逆に上の方法で xref table が正しく検出できるのなら問題は pdf viewer の検出アルゴリズムにあるので、
pdftk でファイルの末端部分をキレイにすることを試してみてはいかがでしょうか:
pdftk 問題のPDFファイル output 修復後のPDFファイル名
(コマンドが見つからなければパッケージ pdftk を install して下さい。)
p.s. 個人的な印象ですが pdftk の修復力は強力で他にも種々の問題点を修復します。それがかえって真の問題点を見えにくくしてしまう場合もあります。
オフライン
redredさん
taka.zoo.nさん
ありがとうございます。
一応(?)解決しました。
原因はFirefox & ThunderbirdでPDFの取得する際に、ダウンロードに「失敗」している、というものでした。
その他ファイル(docx xlsx txt)については閲覧可能でしたのでPDFに限定した事象のようです。
ネット上で同様の指摘がないので、当方の環境下のみの事象なのかなと思っています。
taka.zoo.nさんのご指摘は興味深いので、後ほど行って結果を報告します。
Chrome及びWebメール(RainLoop & RoundCube)経由で取得したファイルは正常に閲覧が可能でした。
オフライン