Rails: конвертировать HTML в PDF?
каков самый лучший и простой способ взять HTML и преобразовать его в PDF, аналогичный использованию CFDOCUMENT на ColdFusion?
обновление: Я действительно ценю все комментарии и предложения, которые люди дали до сих пор, однако я чувствую, что люди, оставляющие свои ответы, упускают суть.
1) решение должно быть свободным и открытым исходным кодом. один человек предложил использовать pricexml, а другой pd4ml. оба эти решения стоят денег (pricexml стоит рука и нога), который я не о вилке.
2) они должны иметь возможность принимать html (либо из файла, url или строковой переменной), а затем создавать pdf. библиотеки, такие как prawn, rprf, rtex, создаются с использованием собственных методов и не принимают html.
пожалуйста, не думайте, что я неблагодарен за предложения, просто генерация pdf кажется действительно проблемой для таких людей, как я, которые используют ColdFusion, но хотят конвертировать в Rails.
15 ответов:
камень, WickedPDF, значит ровно что.
Попробуйте WickedPDF, PDF генератор (из HTML) плагин.
вот пример
gem 'wicked_pdf' gem 'wkhtmltopdf-binary' #wicked_pdf is a wrapper for wkhtmltopdf, you'll need to install that, tooв вашем контроллере (я предполагал, что вы находитесь в методе show):
respond_to do |format| format.html format.pdf do pdf = render_to_string :pdf => 'test', layout: 'pdf.html.erb', template: 'show.pdf.slim', header: { :right => '[page] of [topage]'}, margin: {top: 0, bottom: 0, left: 0, right: 0}, outline: {outline: true, outline_depth: 2} end endна ваш взгляд для PDF link
= link_to 'Download Pdf', you_show_path(@uour_object, format: :pdf)если вы хотите отправить pdf в приложении электронной почты, сначала сохраните файл pdf в папке public или temp, а затем в классе mailer (например, в mailers/e_mailer.РБ)
attachments["test.pdf"] = File.read(Rails.root.join('public',"test.pdf")) mail(:to => to, :cc => cc , :subject => "subject")после отправки электронной почты, вы можете удалить файл
File.delete(Rails.root.join("public", "test.pdf"))
Я знаю, что этот вопрос почти 5 лет на данный момент. Однако, новые варианты доступны.
Попробовать Креветки! https://github.com/adeven/shrimp
после того, как после большого количества крови пота и слез мне удалось написать довольно простое приложение rails, которое позволяет пользователю писать шаблоны писем через TinyMce, затем они сохраняются и могут быть просмотрены как pdf-документы.
Я решил ограничить параметры в Редакторе wysiwyg как можно больше, поскольку некоторые из параметров не работают точно так, как ожидалось, но это ничего немного gsub-ing не может решить, если это необходимо.
есть рубиновый камень, который обертывает HTMLDOC который вам понадобится:PDF:: HTMLDoc
Как только вы это получите, зарегистрируйте тип mime, тогда вы можете сделать что-то вроде:
@letter_template = LetterTemplate.find(params[:id]) respond_to do |format| format.html format.pdf { send_data render_to_pdf({:action => 'show.rpdf', :layout => 'pdf_report'}), :filename => @letter_template.name + ".pdf", :disposition => 'inline' } endв контроллере приложения я добавил метод render_to_pdf, например:
def render_to_pdf(options =nil) data = render_to_string(options) pdf = PDF::HTMLDoc.new pdf.set_option :bodycolor, :white pdf.set_option :toc, false pdf.set_option :portrait, true pdf.set_option :links, false pdf.set_option :webpage, true pdf.set_option :left, '2cm' pdf.set_option :right, '2cm' pdf.set_option :footer, "../" pdf.set_option :header, "..." pdf.set_option :bottom, '2cm' pdf.set_option :top, '2cm' pdf << data pdf.generate endвы найдете дополнительную документацию на сайте HTMLDOC, с которым связан Трэвис бил. Надеюсь, это поможет вам на вашем пути и если ваши документы действительно сложная достаточно. Дайте нам знать, как вы справляетесь.
самое близкое, что я нашел в качестве "решения" для этого, - это использование JRuby, а затем использование Проект Летающей Тарелки. Я просто хочу, чтобы он был перенесен на Ruby, чтобы он мог быть родным решением. Боже, как бы я хотел быть лучше на Яве.
проект, возможно, застопорился, но Pisa (aka XHTML2PDF) - это Python lib, который делает CSS + HTML в PDF. использовал его в приложении Rails (с низким трафиком) некоторое время назад, управляя им как инструментом командной строки-работал довольно хорошо.
Я хотел бы предложить вам решение HTML в PDF от https://grabz.it.
они имеют очень гибкий и простой в использовании скриншот API, который может быть использован любым типом приложения Ruby.
если вы хотите попробовать, сначала вы должны получить разрешение приложения ключа + секрет и разработка свободного SDK
затем, в вашем приложении, шаги реализации будут:
//initialization require 'grabzit' grabzItClient = GrabzIt::Client.new("APPLICATION KEY", "APPLICATION SECRET") //capturing the url to PDF grabzItClient.url_to_pdf("http://www.google.com")далее экономия. Вы можете использовать один из двух методов сохранения,
saveЕсли доступен дескриптор обратного вызова:grabzItClient.save("http://www.example.com/handler/index")и
save_toесли вам нужно Синхронное сохранение (что заставит ваше приложение ждать, пока скриншот будет создан):filepath = "images/result.jpg" grabzItClient.save_to(filepath)проверьте документацию для подробности об экономии.
вот и все. Можно получить другие виды скриншотов, такие как скриншоты изображения как хорошо.
Если вы хотите иметь действительно хорошее качество (подумайте, правильный макет/CSS и т. д.), Вам нужно создать процесс встраивания реального веб-браузера, отображающего его за кадром и печатающего его с помощью драйвера принтера PDF.
в Ruby нет прямого способа сделать это (по крайней мере, не было, когда я пытался сделать это пару месяцев назад). Если вы действительно не можете избежать создания PDF-файлов из html, вам, вероятно, следует поискать некоторые внешние инструменты или службы для этой цели.
удачи!
Я пытаюсь библиотеку из www.pd4ml.com
вот фрагмент кода....
я втягиваю html в содержимое строки. Затем я делаю пару вещей, таких как замена переключателей флажками, а затем запускаю его через библиотеку pd4ml для отображения pdf.
Результат выглядит в значительной степени как исходная страница....String content = nextPage.generateResponse().contentString(); content = content.replace("Print", ""); content = content.replace("Back", ""); content = content.replace("border=\"1\"", "border=\"0\""); content = content.replace("radio", "checkbox"); java.net.InetAddress i = java.net.InetAddress.getLocalHost(); String address = i.getHostAddress()+":53000"; content = content.replace("img src=\"/cgi-bin", "img src=\"http://"+address+"/cgi-bin"); System.out.println(content); PD4ML html = new PD4ML(); html.setPageSize( new java.awt.Dimension(650, 700) ); html.setPageInsets( new java.awt.Insets(30, 30, 30, 30) ); html.setHtmlWidth( 750 ); html.enableImgSplit( false ); html.enableTableBreaks(true); StringReader isr = new StringReader(content); baos = new ByteArrayOutputStream(); html.render( isr, baos); PDFRegForm pdfForm = (PDFRegForm)pageWithName("PDFRegForm"); pdfForm.baos = baos; pdfForm.generateResponse();
вы пробовали смотреть на html2pdf? главная страница http://html2pdf.seven49.net/Web/
есть также проект sourceforge этого.
Алан
- преобразует HTML в PDF;
- бесплатно и с открытым исходным кодом (коммерческая поддержка доступна);
- можно использовать как...
- ...автономное приложение,
- ...для пакетной обработки документов,
- ...или запустить как веб-службу;
- интерфейс CLI или GUI.
не относится к Ruby, но лучшее решение, которое я нашел для этого, - это open source HTMLDOC.
Comments