IT박스

Rails : HTML을 PDF로 변환 하시겠습니까?

itboxs 2020. 12. 5. 09:25
반응형

Rails : HTML을 PDF로 변환 하시겠습니까?


ColdFusion에서 CFDOCUMENT를 사용하는 것과 유사하게 HTML을 가져 와서 PDF로 변환하는 가장 쉽고 쉬운 방법은 무엇입니까?

업데이트 : 지금까지 사람들이 주신 모든 의견과 제안에 정말 감사하지만 답변을 남기는 사람들이 요점을 놓치고 있다고 생각합니다.

1) 솔루션은 무료이거나 오픈 소스 여야합니다. 한 사람은 pricexml과 다른 pd4ml을 사용하도록 제안했습니다. 이 두 솔루션 모두 비용 (팔과 다리 비용이 드는 pricexml)이 듭니다.

2) html (파일, URL 또는 문자열 변수)을 가져 와서 pdf를 생성 할 수 있어야합니다. prawn, rprf, rtex와 같은 라이브러리는 html을 사용하지 않고 자체 방법을 사용하여 생성됩니다.

제발 제가 제안에 감사하지 않는다고 생각하지 마십시오. 저와 같은 ColdFusion을 사용하지만 Rails로 변환하려는 사람들에게는 PDF 생성이 정말 문제가되는 것 같습니다.


gem, WickedPDF정확히 그렇게합니다.


오늘날 가장 큰 것은이 작업을위한 PDFKit입니다.


WickedPDF , PDF 생성기 (HTML에서) 플러그인을 사용해보십시오 .

여기에 예가 있습니다

gem 'wicked_pdf'  
gem 'wkhtmltopdf-binary' 
#wicked_pdf is a wrapper for wkhtmltopdf, you'll need to install that, too

컨트롤러에서 (나는 당신이 쇼 방법에 있다고 가정합니다) :

    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_to 'Download Pdf', you_show_path(@uour_object, format: :pdf)

pdf를 이메일 첨부 파일로 보내려면 먼저 pdf 파일을 공용 또는 임시 폴더에 저장 한 다음 메일러 클래스 (예 : mailers / e_mailer.rb)에 저장하십시오.

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


많은 피 땀과 눈물을 흘린 후 사용자가 TinyMce 를 통해 편지 템플릿을 작성할 수있는 매우 간단한 레일 앱을 작성 하고 저장 한 다음 pdf 문서로 볼 수 있습니다.

일부 옵션이 예상대로 정확히 작동하지 않는 한 wysiwyg 편집기의 옵션을 최대한 제한하기로 결정했지만 필요한 경우 gsub-ing이 해결할 수없는 것은 아닙니다.

필요한 HTMLDOC를 감싸는 루비 gem이 있습니다. 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

Travis Beale이 링크 한 HTMLDOC 사이트에서 더 많은 문서를 찾을 수 있습니다. 이것이 당신의 길에 도움이되기를 바라며 당신의 문서가 정말로 복잡하지 않는 한 충분할 것입니다. 어떻게 타는 지 알려주세요.


  • RPDF 당신이보기로 당신의 PDF의를 설명하는이.
  • (La) TeX를 사용하여 pdf를 생성하는 RTEX 도 있습니다 .

이것에 대한 "해결책"으로 가장 가까운 것은 JRuby를 사용한 다음 The Flying Saucer Project 를 사용 하는 것 입니다. 나는 그것이 기본 솔루션이 될 수 있도록 Ruby로 이식되기를 바랍니다. 내가 자바를 더 잘했으면 좋겠어.


프로젝트가 정체되었을 수 있지만 Pisa (일명 XHTML2PDF )는 CSS + HTML to PDF를 수행하는 Python lib입니다. (트래픽이 적은) Rails 앱에서 명령 줄 도구로 사용하여 꽤 잘 작동했습니다.


https://grabz.it 의 HTML to PDF 솔루션을 제안하고 싶습니다 .

모든 유형의 Ruby 애플리케이션에서 사용할 수있는 매우 유연하고 사용하기 쉬운 스크린 샷 API가 있습니다.

시도해보고 싶다면 먼저 인증 앱 키 + 비밀개발 무료 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")  

And save_to if you need a synchronous save (which will force your application to wait while the screenshot is created):

filepath = "images/result.jpg"
grabzItClient.save_to(filepath) 

Check the documentation for details about the saving.

That's all. It's possible to get other kinds of screenshots such as image screenshots as well.


If you want to have really good quality (think, proper layout/CSS etc) you need to create a process embedding a real webbrowser rendering it offscreen and printing it via PDF printer driver.


There is for sure no direct way to do this in Ruby (at least there wasn't when I was trying to do it couple of months ago). If you really can't avoid generating your pdfs from html, you should probably look around for some external tools or services for this purpose.

Good luck!


I am trying the library from www.pd4ml.com

here is a code snip....

I pull in the html into the String content. Then I do a couple things like replace the radio buttons with checkboxes and then run it through the pd4ml library to render the pdf.
The result looks pretty much like the original page....

    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();

Have you tried looking at html2pdf? the home page is http://html2pdf.seven49.net/Web/

There is also a sourceforge project of it.

Alan


HTMLDOC?

  • converts HTML to PDF;
  • Free and Open Source (commercial support available);
  • can be used as...
    • ...standalone application,
    • ...for batch document processing,
    • ...or run as a web-based service;
  • interface is CLI or GUI.

Not specific to Ruby, but the best solution I've found to this is the open source HTMLDOC.

참고URL : https://stackoverflow.com/questions/357212/rails-convert-html-to-pdf

반응형