PDF to Image Ruby Examples

These examples demonstrate common PDF to Image API workflows in Ruby.


Basic examples

PDF file to PNG file

require "pdfcrowd"

begin
    # Create an API client instance.
    client = Pdfcrowd::PdfToImageClient.new("demo", "demo")

    # If unsure whether the input is a single-page file, enforce ZIP output.
    client.setOutputFormat("png")
    client.setForceZip(true)

    # Run the conversion and save the result to a file.
    client.convertFileToFile("/path/to/invoice.pdf", "invoice.zip")

rescue Pdfcrowd::Error => why
    STDERR.puts "PDFCrowd Error: #{why}"
    raise
end

PDF file to in-memory PNG

require "pdfcrowd"

begin
    # Create an API client instance.
    client = Pdfcrowd::PdfToImageClient.new("demo", "demo")

    # If unsure whether the input is a single-page file, enforce ZIP output.
    client.setOutputFormat("png")
    client.setForceZip(true)

    # Run the conversion and store the result in the `png` variable.
    png = client.convertFile("/path/to/invoice.pdf")

    # at this point the "png" variable contains PNG raw data and
    # can be sent in an HTTP response, saved to a file, etc.

rescue Pdfcrowd::Error => why
    STDERR.puts "PDFCrowd Error: #{why}"
    raise
end

PDF file to PNG stream

require "pdfcrowd"

begin
    # Create an API client instance.
    client = Pdfcrowd::PdfToImageClient.new("demo", "demo")

    # If unsure whether the input is a single-page file, enforce ZIP output.
    client.setOutputFormat("png")
    client.setForceZip(true)

    # Create an output stream for the conversion result
    output_stream = open("invoice.zip", "wb")

    # run the conversion and write the result to the output stream.
    client.convertFileToStream("/path/to/invoice.pdf", output_stream)

    # Close the output stream.
    output_stream.close()

rescue Pdfcrowd::Error => why
    STDERR.puts "PDFCrowd Error: #{why}"
    raise
end

PDF url to PNG file

require "pdfcrowd"

begin
    # Create an API client instance.
    client = Pdfcrowd::PdfToImageClient.new("demo", "demo")

    # If unsure whether the input is a single-page file, enforce ZIP output.
    client.setOutputFormat("png")
    client.setForceZip(true)

    # Run the conversion and save the result to a file.
    client.convertUrlToFile("https://pdfcrowd.com/static/pdf/apisamples/invoice.pdf", "invoice.zip")

rescue Pdfcrowd::Error => why
    STDERR.puts "PDFCrowd Error: #{why}"
    raise
end

PDF url to in-memory PNG

require "pdfcrowd"

begin
    # Create an API client instance.
    client = Pdfcrowd::PdfToImageClient.new("demo", "demo")

    # If unsure whether the input is a single-page file, enforce ZIP output.
    client.setOutputFormat("png")
    client.setForceZip(true)

    # Run the conversion and store the result in the `png` variable.
    png = client.convertUrl("https://pdfcrowd.com/static/pdf/apisamples/invoice.pdf")

    # at this point the "png" variable contains PNG raw data and
    # can be sent in an HTTP response, saved to a file, etc.

rescue Pdfcrowd::Error => why
    STDERR.puts "PDFCrowd Error: #{why}"
    raise
end

PDF url to PNG stream

require "pdfcrowd"

begin
    # Create an API client instance.
    client = Pdfcrowd::PdfToImageClient.new("demo", "demo")

    # If unsure whether the input is a single-page file, enforce ZIP output.
    client.setOutputFormat("png")
    client.setForceZip(true)

    # Create an output stream for the conversion result
    output_stream = open("invoice.zip", "wb")

    # run the conversion and write the result to the output stream.
    client.convertUrlToStream("https://pdfcrowd.com/static/pdf/apisamples/invoice.pdf", output_stream)

    # Close the output stream.
    output_stream.close()

rescue Pdfcrowd::Error => why
    STDERR.puts "PDFCrowd Error: #{why}"
    raise
end

In-memory PDF to PNG file

require "pdfcrowd"

begin
    # Create an API client instance.
    client = Pdfcrowd::PdfToImageClient.new("demo", "demo")

    # If unsure whether the input is a single-page file, enforce ZIP output.
    client.setOutputFormat("png")
    client.setForceZip(true)

    # Run the conversion and save the result to a file.
    client.convertRawDataToFile(open('/path/to/hello_world.pdf', 'rb').read(), "invoice.zip")

rescue Pdfcrowd::Error => why
    STDERR.puts "PDFCrowd Error: #{why}"
    raise
end

In-memory PDF to in-memory PNG

require "pdfcrowd"

begin
    # Create an API client instance.
    client = Pdfcrowd::PdfToImageClient.new("demo", "demo")

    # If unsure whether the input is a single-page file, enforce ZIP output.
    client.setOutputFormat("png")
    client.setForceZip(true)

    # Run the conversion and store the result in the `png` variable.
    png = client.convertRawData(open('/path/to/hello_world.pdf', 'rb').read())

    # at this point the "png" variable contains PNG raw data and
    # can be sent in an HTTP response, saved to a file, etc.

rescue Pdfcrowd::Error => why
    STDERR.puts "PDFCrowd Error: #{why}"
    raise
end

In-memory PDF to PNG stream

require "pdfcrowd"

begin
    # Create an API client instance.
    client = Pdfcrowd::PdfToImageClient.new("demo", "demo")

    # If unsure whether the input is a single-page file, enforce ZIP output.
    client.setOutputFormat("png")
    client.setForceZip(true)

    # Create an output stream for the conversion result
    output_stream = open("invoice.zip", "wb")

    # run the conversion and write the result to the output stream.
    client.convertRawDataToStream(open('/path/to/hello_world.pdf', 'rb').read(), output_stream)

    # Close the output stream.
    output_stream.close()

rescue Pdfcrowd::Error => why
    STDERR.puts "PDFCrowd Error: #{why}"
    raise
end

Get info about the current conversion

require "pdfcrowd"

begin
    # Create an API client instance.
    client = Pdfcrowd::PdfToImageClient.new("demo", "demo")

    # If unsure whether the input is a single-page file, enforce ZIP output.
    client.setOutputFormat("png")
    client.setDebugLog(true)
    client.setForceZip(true)

    # Run the conversion and save the result to a file.
    client.convertFileToFile("/path/to/invoice.pdf", "invoice.zip")
    
    # print URL pointing to the debug log for this request.
    puts "Debug log url: #{client.getDebugLogUrl()}"
    
    # print number of conversion credits remaining in your account.
    puts "Remaining credit count: #{client.getRemainingCreditCount()}"
    
    # print number of credits consumed for this conversion.
    puts "Consumed credit count: #{client.getConsumedCreditCount()}"
    
    # print unique identifier assigned to this conversion job.
    puts "Job id: #{client.getJobId()}"
    
    # print total number of pages in the output document.
    puts "Page count: #{client.getPageCount()}"
    
    # print size of the output data in bytes.
    puts "Output size: #{client.getOutputSize()}"

rescue Pdfcrowd::Error => why
    STDERR.puts "PDFCrowd Error: #{why}"
    raise
end

Rails examples

PDF file to PNG in Rails

require "pdfcrowd"

class DemoController < ApplicationController
    def convert
        # The recommended method is POST.
        # may be restricted by ":via => :post" in your routes.rb
        if ! request.post?
            return render text: "POST is allowed only", status: 400
        end

        begin
            # Create an API client instance.
            client = Pdfcrowd::PdfToImageClient.new("demo", "demo")

            # If unsure whether the input is a single-page file, enforce ZIP output.
            client.setOutputFormat("png")
            client.setForceZip(true)

            # Run the conversion and store the result in the `png` variable.
            png = client.convertFile("/path/to/invoice.pdf")

            # Send the result and set HTTP response headers.
            send_data png,
                      :type => "image/png",
                      :disposition => "attachment; filename*=UTF-8''#{ERB::Util.url_encode('invoice.zip')}"
        rescue Pdfcrowd::Error => why
            # Send the error in the HTTP response.
            render plain: why, status: why.getCode()
        end
    end
end

PDF url to PNG in Rails

require "pdfcrowd"

class DemoController < ApplicationController
    def convert
        # The recommended method is POST.
        # may be restricted by ":via => :post" in your routes.rb
        if ! request.post?
            return render text: "POST is allowed only", status: 400
        end

        begin
            # Create an API client instance.
            client = Pdfcrowd::PdfToImageClient.new("demo", "demo")

            # If unsure whether the input is a single-page file, enforce ZIP output.
            client.setOutputFormat("png")
            client.setForceZip(true)

            # Run the conversion and store the result in the `png` variable.
            png = client.convertUrl("https://pdfcrowd.com/static/pdf/apisamples/invoice.pdf")

            # Send the result and set HTTP response headers.
            send_data png,
                      :type => "image/png",
                      :disposition => "attachment; filename*=UTF-8''#{ERB::Util.url_encode('invoice.zip')}"
        rescue Pdfcrowd::Error => why
            # Send the error in the HTTP response.
            render plain: why, status: why.getCode()
        end
    end
end

In-memory PDF to PNG in Rails

require "pdfcrowd"

class DemoController < ApplicationController
    def convert
        # The recommended method is POST.
        # may be restricted by ":via => :post" in your routes.rb
        if ! request.post?
            return render text: "POST is allowed only", status: 400
        end

        begin
            # Create an API client instance.
            client = Pdfcrowd::PdfToImageClient.new("demo", "demo")

            # If unsure whether the input is a single-page file, enforce ZIP output.
            client.setOutputFormat("png")
            client.setForceZip(true)

            # Run the conversion and store the result in the `png` variable.
            png = client.convertRawData(open('/path/to/hello_world.pdf', 'rb').read())

            # Send the result and set HTTP response headers.
            send_data png,
                      :type => "image/png",
                      :disposition => "attachment; filename*=UTF-8''#{ERB::Util.url_encode('invoice.zip')}"
        rescue Pdfcrowd::Error => why
            # Send the error in the HTTP response.
            render plain: why, status: why.getCode()
        end
    end
end