Kouhei Sutou
kou****@cozmi*****
2007年 9月 8日 (土) 11:05:08 JST
須藤です。 > view-pdf-as-image.rb を真似して,xpdf の pdftotext を使って PDF を Html に変換してあたらしいタブに表示する拡張 (pdf-view-as-text.rb) を,つくろうとしているのですが,こんなエラーが出てしまいます.ダウンロードに失敗しているのかと思いきや,xpdf で普通に開けます. > > Error: May not be a PDF file (continuing anyway) > Error: PDF file is damaged - attempting to reconstruct xref table... > Error: Couldn't find trailer dictionary > Error: Couldn't read xref table これでどうでしょうか? require 'fileutils' require 'uri' require "tempfile" def act_pdf_view_as_text(action, group, kz) filename = Tempfile.new("pdf-view-as-text") uri = nil uri = kz.mouse_event_info.link if kz.mouse_event_info return if uri.nil? dl = Kz::Downloader.new(uri, filename.path) dl.signal_connect("completed") do Kz.barrier do text = Tempfile.new("pdf-as-text") system("pdftotext -layout -nopgbrk -htmlmeta #{filename.path} #{text.path}") tab = kz.open_new_tab(text.path) kz.notebook.page = kz.notebook.page_num(tab) kz.statusbar.set_text("PDF View as Text #{uri}", "") end end Kz::DownloaderGroup.add(dl) dl.to_file end > ところが,風博士の Ruby Dialog の中で変数 uri だけ適当な文字列を指定して,1行づつコピー&ペーストすると,うまく動きます.エラーも警告もなしです. > > どこが悪いのでしょうか ? まず、ダウンロードにはそこそこ時間がかかります。なので、 > dl = Kz::Downloader.new(uri, filename.path) > dl.to_file としても、すぐにはfilename.pathの中身にPDFは入りません。 ダウンロードが完了したことを知るためのものがコメントアウトさ れている > # dl.signal_connect("completed") do > # Kz.barrier do > # completed(kz, tmp_dir, filename) > # end > # end > # Kz::DownloaderGroup.add(dl) の部分です。 なので、pdftotextなどを呼ぶ部分をこの中に入れてあげなければ いけません。 dl.signal_connect("completed") do Kz.barrier do sh=Shell.new sh.system("pdftotext -layout -nopgbrk -htmlmeta #{filename.path}") adoresu=filename.path+'.html' tab=kz.open_new_tab(adoresu) kz.notebook.page = kz.notebook.page_num(tab) kz.statusbar.set_text("PDF View as Text #{uri}","") filename.close(true) FileUtils.rm(adoresu) end end Kz::DownloaderGroup.add(dl)