Помощь с Ruby & PrinceXML - PullRequest
1 голос
/ 04 июня 2011

Я пытаюсь написать очень простой конвертер, похожий на уценку, в ruby, а затем передать вывод в PrinceXML (что здорово).Принц в основном конвертирует html в pdf.

Вот мой код:

#!/usr/bin/ruby
# USAGE: command source-file.txt target-file.pdf

# read argument 1 as input
text = File.read(ARGV[0])

# wrap paragraphs in paragraph tags
text = text.gsub(/^(.+)/, '<p>\1</p>')

# create a new temp file for processing
htmlFile = File.new('/tmp/sample.html', "w+")

# place the transformed text in the new file
htmlFile.puts text

# run prince
system 'prince /tmp/sample.html #{ARGV[1]}'

Но при этом пустой файл выводится в /tmp/sample.html.Когда я исключаю вызов принца, преобразование происходит просто отлично.

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 04 июня 2011

Возможно, выходной файл буферизуется, а не записывается на диск из-за того, как вы создаете выходной файл.Попробуйте вместо этого:

# create a new temp file for processing
File.open('/tmp/sample.html', "w+") do |htmlFile|

  # place the transformed text in the new file
  htmlFile.puts text

end

# run prince
system 'prince /tmp/sample.html #{ARGV[1]}'

Это идиоматический Ruby;Мы передаем блок в File.new, и он автоматически закрывается при выходе из блока.Как побочный продукт закрытия файла, любой буферизованный вывод будет записан на диск, где ваш код в вашем вызове system сможет найти его.

0 голосов
/ 04 июня 2011

Из подробного руководства :

prince doc.html -o out.pdf
Конвертировать doc.html в out.pdf.

Я думаю, что ваш system вызов должен выглядеть следующим образом:

system "prince /tmp/sample.html -o #{ARGV[1]}"

Также обратите внимание на переключение на двойные кавычки, чтобы сработала интерполяция #{}.Без двойных кавычек оболочка увидит эту команду:

prince /tmp/sample.html #{ARGV[1]}

, а затем проигнорирует все после # в качестве комментария.Я не уверен, почему вы получаете пустой /tmp/sample.html, я бы ожидал PDF в /tmp/sample.pdf, основываясь на моем прочтении документации.

...