복붙노트

[RUBY-ON-RAILS] 레일에서 PDF를 생성

RUBY-ON-RAILS

레일에서 PDF를 생성

루비 온 레일 위키 레일에서 PDF 생성을 촉진 라이브러리의 몇 가지를 나열합니다. 나는 (따라서, 편지 형식으로 페이지 당 12 ~ 15 개 주소) 주소 라벨을 인쇄해야하고 사용할 하나 결정할 수 없습니다. 모든 권고?

해결법

  1. ==============================

    1.내가 지금까지 본 것 중에 최고는 새우입니다 :

    내가 지금까지 본 것 중에 최고는 새우입니다 :

  2. ==============================

    2.확실히 Prawnto 새우. respond_to 형식 블록에서 다른 형식으로 치료 PDF 수있는의 단순 그대로 DSL은 진짜 치료이다 :

    확실히 Prawnto 새우. respond_to 형식 블록에서 다른 형식으로 치료 PDF 수있는의 단순 그대로 DSL은 진짜 치료이다 :

    respond_to do |format|
    format.pdf { render :layout => false }
    

    여기 새우에 대한 자습서 비디오가있다 :

  3. ==============================

    3.RTeX도 있습니다. 당신이있는 거 기꺼이 첫째 라텍스 번역하는 경우 그 잘 작동합니다. 라텍스 마크 업 문서를 저장하는 아주 좋은 방법입니다. 그냥 각 문서가 얼마나 정적에 따라 달라집니다. 문서의 가장 동적 인 경우 새우 또는 PDF :: 작가로 더 잘 할 수 있습니다. 그것의 대부분은 각 텍스트 대체 단지 몇 정적 인 경우, LATEX은 더 나은 선택이 될 수 있습니다.

    RTeX도 있습니다. 당신이있는 거 기꺼이 첫째 라텍스 번역하는 경우 그 잘 작동합니다. 라텍스 마크 업 문서를 저장하는 아주 좋은 방법입니다. 그냥 각 문서가 얼마나 정적에 따라 달라집니다. 문서의 가장 동적 인 경우 새우 또는 PDF :: 작가로 더 잘 할 수 있습니다. 그것의 대부분은 각 텍스트 대체 단지 몇 정적 인 경우, LATEX은 더 나은 선택이 될 수 있습니다.

  4. ==============================

    4.당신이 너무 복잡 아무것도하지 않는 경우, 당신은 또한 PDF로 HTMLDOC, 변환의 기본 HTML을 사용할 수 있습니다. (새우의 경우처럼) 더 고유의 레이아웃 구문을 배울 필요에서이 방지를. 그것은 당신에게 약간의 두통을 절약 할 수 있습니다 :

    당신이 너무 복잡 아무것도하지 않는 경우, 당신은 또한 PDF로 HTMLDOC, 변환의 기본 HTML을 사용할 수 있습니다. (새우의 경우처럼) 더 고유의 레이아웃 구문을 배울 필요에서이 방지를. 그것은 당신에게 약간의 두통을 절약 할 수 있습니다 :

    여기 HTMLDOC의 루비 보석에 대한 링크는 다음과 같습니다

    또한, 여기 HTMLDOC를 사용하여 PDF로 레일에 뷰를 렌더링하기위한 좋은 가이드는 다음과 같습니다

  5. ==============================

    5.새우 길을 가야하는 것입니다. 지금 정말 쉬운 새우 - 레이블.

    새우 길을 가야하는 것입니다. 지금 정말 쉬운 새우 - 레이블.

    여기에 프로젝트의 README를 체크 아웃 :

    https://github.com/jordanbyron/prawn-labels#readme

    이는 레일 제어기에서 사용되는 슈퍼 간단한 예이다. 당신의 Gemfile에 보석 '새우 - 라벨'을 추가하는 것을 잊지 마십시오.

    names = %w{Jordan Kelly Greg Bob}
    
    labels = Prawn::Labels.render(names, :type => "Avery5160") do |pdf, name|
      pdf.text name
    end
    
    send_data labels, :filename => "names.pdf", :type => "application/pdf"
    
  6. ==============================

    6.PDFKit도 있습니다. 그것은 아주 너무 흥미 롭군요.

    PDFKit도 있습니다. 그것은 아주 너무 흥미 롭군요.

  7. ==============================

    7.나는 :: 모두 PDF를 사용하는 작가와 새우와 새우가 훨씬 더 적절한 사용에 발견했습니다. / R / t의 PDF :: 작가 w 새우의 기쁨을 보여줍니다 비교 루비 탁발승을 확인하십시오.

    나는 :: 모두 PDF를 사용하는 작가와 새우와 새우가 훨씬 더 적절한 사용에 발견했습니다. / R / t의 PDF :: 작가 w 새우의 기쁨을 보여줍니다 비교 루비 탁발승을 확인하십시오.

    사실, 단지 개발자로 바로 생계를위한 훌륭한 디자인 패턴 어쨌든 루비 탁발승을 확인하십시오.

  8. ==============================

    8.완전하게 루비하지만, 당신은 오픈 오피스가 평온하고 docsplit을 결합하여 PDF 파일을 생성하는 데에서 .odt 사용할 수 있습니다.

    완전하게 루비하지만, 당신은 오픈 오피스가 평온하고 docsplit을 결합하여 PDF 파일을 생성하는 데에서 .odt 사용할 수 있습니다.

    http://github.com/kremso/serenity

    http://documentcloud.github.com/docsplit/

    또는 당신은 사용이 PDF를 생성하는 ODT와 컵 - PDF clamsy 보석을 사용할 수 있습니다.

    http://github.com/ngty/clamsy

  9. ==============================

    9.당신이 출력 이상 픽셀 수준의 제어를 필요로하기 때문에 새우가 올바른 선택이라고 사용 사례를 들어, 나는 대부분의 다른 답변에 동의합니다.

    당신이 출력 이상 픽셀 수준의 제어를 필요로하기 때문에 새우가 올바른 선택이라고 사용 사례를 들어, 나는 대부분의 다른 답변에 동의합니다.

    내장 등 (독단) 테이블 스타일링, 헤더, 보고서 보석을 사용하여 PDF 보고서를 생성 - 아웃 레일 3에서 PDF를 생성 체크 - 어떤 도구를 선택? 사용하는 방법의 예를 들어.

  10. ==============================

    10.나는 HTML에서 PDF 생성을위한 비행 접시 사용했습니다. 그것은 자바 라이브러리하지만 당신은 당신의 레일 응용 프로그램에 액세스 할 수 루비 자바 브리지 보석을 사용할 수 있습니다. 그것은 CSS 2.1 규격의 페이징을 통해 몇 가지 추가 제어 할 수 있도록 CSS3에서 몇 가지 추가 사항이 있습니다. 그것은 당신의 HTML에서 'PDF 코드'를 넣어 당신을 필요로하지 않기 때문에 당신이 PDF 파일을 생성 할 당신이 브라우저에 표시 동일한 뷰와 파셜을 사용할 수 있습니다, 그것을 권하고 싶습니다.

    나는 HTML에서 PDF 생성을위한 비행 접시 사용했습니다. 그것은 자바 라이브러리하지만 당신은 당신의 레일 응용 프로그램에 액세스 할 수 루비 자바 브리지 보석을 사용할 수 있습니다. 그것은 CSS 2.1 규격의 페이징을 통해 몇 가지 추가 제어 할 수 있도록 CSS3에서 몇 가지 추가 사항이 있습니다. 그것은 당신의 HTML에서 'PDF 코드'를 넣어 당신을 필요로하지 않기 때문에 당신이 PDF 파일을 생성 할 당신이 브라우저에 표시 동일한 뷰와 파셜을 사용할 수 있습니다, 그것을 권하고 싶습니다.

    비행 접시 : https://github.com/flyingsaucerproject/flyingsaucer

    루비 자바 브릿지 : http://rjb.rubyforge.org/

    나는 PDF 파일을 생성하기 위해이 모듈의 코드를 사용

    require 'rubygems'
    require 'rjb'
    
    module Html2Pdf
    
      def self.included(controller)
          controller.send :helper_method, :create_pdf
      end
    
      def create_pdf(options = {})
          itext = "#{RAILS_ROOT}/lib/html2pdf/jars/iText-2.0.8.jar"
          core_renderer = "#{RAILS_ROOT}/lib/html2pdf/jars/core-renderer.jar"
          xerces = "#{RAILS_ROOT}/lib/html2pdf/jars/xml-apis-xerces-2.9.1.jar" 
          joinchar = (RUBY_PLATFORM.include? 'mswin') ? ';' : ':'
              classpath = [itext, core_renderer, xerces].join(joinchar)
          Rjb::load(classpath, jvmargs=['-Djava.awt.headless=true'])
          if options[:htmlstring].nil?
          options[:layout] ||= false
              options[:template] ||= File.join(controller_path,action_name+".pdf.erb")
              html_string = render_to_string(:template => options[:template], :layout => options[:layout])
        else
              html_string = options[:htmlstring]
        end
        # Make all paths relative, on disk paths...
        html_string.gsub!(".com:/",".com/") # strip out bad attachment_fu URLs
        html_string.gsub!( /src=["']+([^:]+?)["']/i ) { |m| "src=\"file:///#{RAILS_ROOT}/public/" + $1 + '"' } # re-route absolute paths
        html_string.gsub!( /url\(["']+([^:]+?)["']/i ) { |m| "url\(\"file:///#{RAILS_ROOT}/public/" + $1 + '"' } # re-route absolute paths
        # Remove asset ids on images with a regex // tbh i can't remember what this line is for but i'm sure it did something awesome
        html_string.gsub!( /src=["'](\S+\?\d*)["']/i ) { |m| 'src="' + $1.split('?').first + '"' } 
        filename = "#{RAILS_ROOT}/public/pdfs/"+options[:filename]+".pdf"
        fileOutputStream = Rjb::import('java.io.FileOutputStream')
          iTextRenderer = Rjb::import('org.xhtmlrenderer.pdf.ITextRenderer')
          renderer = iTextRenderer.new
          renderer.setDocumentFromString(html_string)
          os = fileOutputStream.new(filename)
          renderer.layout()
          renderer.createPDF(os)
          os.close()
      end
    
    end
    

    이 같은 코드로 호출 :

    def generate_pdf  
      htmlsrc = render_to_string(:partial => 'invoice', :layout => false)
      rnd = Time.now.to_s(:datentime).gsub!(/[\/ \.:]/,'')
      filename = "docstore/tmp_#{rnd}"
      create_pdf(:htmlstring => htmlsrc, :filename => filename)
      contents = open("#{RAILS_ROOT}/public/pdfs/#{filename}.pdf", "rb") { |io| io.read }
      File.delete("#{RAILS_ROOT}/public/pdfs/#{filename}.pdf")
      respond_to do | wants |
        wants.html { render :text => contents, :content_type => 'application/pdf' }
      end    
    end
    
  11. from https://stackoverflow.com/questions/433136/generate-pdf-from-rails by cc-by-sa and MIT license