[Kazehakase-devel 2816] Re: 自作拡張が動かない

Back to archive index

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)




Kazehakase-devel メーリングリストの案内
Back to archive index