PDF to PDF Python Examples

These examples demonstrate common PDF to PDF API workflows in Python.


Basic examples

Multiple PDFs to PDF file

import pdfcrowd
import sys

try:
    # Create an API client instance.
    client = pdfcrowd.PdfToPdfClient('demo', 'demo')

    # Configure the conversion.
    client.addPdfFile('/path/to/cover.pdf')
    client.addPdfFile('/path/to/proposal.pdf')
    client.addPdfFile('/path/to/price.pdf')
    client.addPdfFile('/path/to/contact.pdf')

    # Run the conversion and save the result to a file.
    client.convertToFile('offer.pdf')

except pdfcrowd.Error as why:
    sys.stderr.write('PDFCrowd Error: {}\n'.format(why))
    raise

Multiple PDFs to in-memory PDF

import pdfcrowd
import sys

try:
    # Create an API client instance.
    client = pdfcrowd.PdfToPdfClient('demo', 'demo')

    # Configure the conversion.
    client.addPdfFile('/path/to/cover.pdf')
    client.addPdfFile('/path/to/proposal.pdf')
    client.addPdfFile('/path/to/price.pdf')
    client.addPdfFile('/path/to/contact.pdf')

    # Run the conversion and store the result in the `pdf` variable.
    pdf = client.convert()

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

except pdfcrowd.Error as why:
    sys.stderr.write('PDFCrowd Error: {}\n'.format(why))
    raise

Multiple PDFs to PDF stream

import pdfcrowd
import sys

try:
    # Create an API client instance.
    client = pdfcrowd.PdfToPdfClient('demo', 'demo')

    # Configure the conversion.
    client.addPdfFile('/path/to/cover.pdf')
    client.addPdfFile('/path/to/proposal.pdf')
    client.addPdfFile('/path/to/price.pdf')
    client.addPdfFile('/path/to/contact.pdf')

    # Create an output stream for the conversion result
    output_stream = open('offer.pdf', 'wb')

    # run the conversion and write the result to the output stream.
    client.convertToStream(output_stream)

    # Close the output stream.
    output_stream.close()

except pdfcrowd.Error as why:
    sys.stderr.write('PDFCrowd Error: {}\n'.format(why))
    raise

Multiple in-memory PDFs to PDF file

import pdfcrowd
import sys

try:
    # Create an API client instance.
    client = pdfcrowd.PdfToPdfClient('demo', 'demo')

    # Configure the conversion.
    client.addPdfRawData(open('/path/to/cover.pdf', 'rb').read())
    client.addPdfRawData(open('/path/to/proposal.pdf', 'rb').read())
    client.addPdfRawData(open('/path/to/price.pdf', 'rb').read())
    client.addPdfRawData(open('/path/to/contact.pdf', 'rb').read())

    # Run the conversion and save the result to a file.
    client.convertToFile('offer.pdf')

except pdfcrowd.Error as why:
    sys.stderr.write('PDFCrowd Error: {}\n'.format(why))
    raise

Join 2 in-memory PDFs together with 2 local PDF files to PDF file

import pdfcrowd
import sys

try:
    # Create an API client instance.
    client = pdfcrowd.PdfToPdfClient('demo', 'demo')

    # Configure the conversion.
    client.addPdfRawData(open('/path/to/cover.pdf', 'rb').read())
    client.addPdfFile('/path/to/proposal.pdf')
    client.addPdfRawData(open('/path/to/price.pdf', 'rb').read())
    client.addPdfFile('/path/to/contact.pdf')

    # Run the conversion and save the result to a file.
    client.convertToFile('offer.pdf')

except pdfcrowd.Error as why:
    sys.stderr.write('PDFCrowd Error: {}\n'.format(why))
    raise

Watermark a PDF file

import pdfcrowd
import sys

try:
    # Create an API client instance.
    client = pdfcrowd.PdfToPdfClient('demo', 'demo')

    # Configure the conversion.
    client.addPdfFile('/path/to/proposal.pdf')
    client.setPageWatermark('/path/to/watermark.pdf')

    # Run the conversion and save the result to a file.
    client.convertToFile('company_offer.pdf')

except pdfcrowd.Error as why:
    sys.stderr.write('PDFCrowd Error: {}\n'.format(why))
    raise

Linearize a PDF file

import pdfcrowd
import sys

try:
    # Create an API client instance.
    client = pdfcrowd.PdfToPdfClient('demo', 'demo')

    # Configure the conversion.
    client.addPdfFile('/path/to/not_linearized.pdf')
    client.setLinearize(True)

    # Run the conversion and save the result to a file.
    client.convertToFile('linearized.pdf')

except pdfcrowd.Error as why:
    sys.stderr.write('PDFCrowd Error: {}\n'.format(why))
    raise

Get info about the current conversion

import pdfcrowd
import sys

try:
    # Create an API client instance.
    client = pdfcrowd.PdfToPdfClient('demo', 'demo')

    # Configure the conversion.
    client.setDebugLog(True)
    client.addPdfRawData(open('/path/to/cover.pdf', 'rb').read())
    client.addPdfRawData(open('/path/to/proposal.pdf', 'rb').read())

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

except pdfcrowd.Error as why:
    sys.stderr.write('PDFCrowd Error: {}\n'.format(why))
    raise

PDF manipulation examples

Extract page 3 and all pages from 7 to the end from the PDF file

import pdfcrowd
import sys

try:
    # Create an API client instance.
    client = pdfcrowd.PdfToPdfClient('demo', 'demo')

    # Configure the conversion.
    client.addPdfFile('/your-path-to/pdfs/13_pages.pdf')
    client.setAction('extract')
    client.setPageRange('3,7-')

    # Run the conversion and save the result to a file.
    client.convertToFile('output.pdf')

except pdfcrowd.Error as why:
    sys.stderr.write('PDFCrowd Error: {}\n'.format(why))
    raise

Delete the first 3 pages and the 10th page from the PDF file

import pdfcrowd
import sys

try:
    # Create an API client instance.
    client = pdfcrowd.PdfToPdfClient('demo', 'demo')

    # Configure the conversion.
    client.addPdfFile('/your-path-to/pdfs/13_pages.pdf')
    client.setAction('delete')
    client.setPageRange('1-3,10')

    # Run the conversion and save the result to a file.
    client.convertToFile('output.pdf')

except pdfcrowd.Error as why:
    sys.stderr.write('PDFCrowd Error: {}\n'.format(why))
    raise

Split the PDF file into two separate files at the 10th page

import pdfcrowd
import sys

try:
    client = pdfcrowd.PdfToPdfClient('demo', 'demo')
    client.addPdfFile('/your-path-to/pdfs/13_pages.pdf')
    client.setAction('extract')
    client.setPageRange('1-10')
    client.convertToFile("pages1-10.pdf")
    client.setPageRange('11-')
    client.convertToFile('pages11-end.pdf')

except pdfcrowd.Error as why:
    sys.stderr.write('PDFCrowd Error: {}\n'.format(why))
    raise

Django examples

Multiple PDFs to PDF in Django

import urllib.parse
from django.http import HttpResponse
from django.views.decorators.http import require_POST
import pdfcrowd

# The recommended method is POST.
@require_POST
def convert(request):
    try:
        # Create an API client instance.
        client = pdfcrowd.PdfToPdfClient('demo', 'demo')

        # Configure the conversion.
        client.addPdfFile('/path/to/cover.pdf')
        client.addPdfFile('/path/to/proposal.pdf')
        client.addPdfFile('/path/to/price.pdf')
        client.addPdfFile('/path/to/contact.pdf')

        # Set HTTP response headers.
        response = HttpResponse(content_type='application/pdf')
        response['Cache-Control'] = 'max-age=0'
        response['Accept-Ranges'] = 'none'
        response['Content-Disposition'] = "attachment; filename*=UTF-8''" + urllib.parse.quote('offer.pdf', safe='')

        # run the conversion and write the result to the output stream.
        client.convertToStream(response)
        return response
    except pdfcrowd.Error as why:
        # Send the error in the HTTP response.
        return HttpResponse(
            why, status=why.getStatusCode(), content_type='text/plain')

Multiple in-memory PDFs to PDF in Django

import urllib.parse
from django.http import HttpResponse
from django.views.decorators.http import require_POST
import pdfcrowd

# The recommended method is POST.
@require_POST
def convert(request):
    try:
        # Create an API client instance.
        client = pdfcrowd.PdfToPdfClient('demo', 'demo')

        # Configure the conversion.
        client.addPdfRawData(open('/path/to/cover.pdf', 'rb').read())
        client.addPdfRawData(open('/path/to/proposal.pdf', 'rb').read())
        client.addPdfRawData(open('/path/to/price.pdf', 'rb').read())
        client.addPdfRawData(open('/path/to/contact.pdf', 'rb').read())

        # Set HTTP response headers.
        response = HttpResponse(content_type='application/pdf')
        response['Cache-Control'] = 'max-age=0'
        response['Accept-Ranges'] = 'none'
        response['Content-Disposition'] = "attachment; filename*=UTF-8''" + urllib.parse.quote('offer.pdf', safe='')

        # run the conversion and write the result to the output stream.
        client.convertToStream(response)
        return response
    except pdfcrowd.Error as why:
        # Send the error in the HTTP response.
        return HttpResponse(
            why, status=why.getStatusCode(), content_type='text/plain')

Flask examples

Multiple PDFs to PDF in Flask

import urllib.parse
from flask import Flask, Response
import pdfcrowd

app = Flask(__name__)

# The recommended method is POST.
@app.route('/', methods=['POST'])
def convert():
    try:
        # Create an API client instance.
        client = pdfcrowd.PdfToPdfClient('demo', 'demo')

        # Configure the conversion.
        client.addPdfFile('/path/to/cover.pdf')
        client.addPdfFile('/path/to/proposal.pdf')
        client.addPdfFile('/path/to/price.pdf')
        client.addPdfFile('/path/to/contact.pdf')

        # Run the conversion and store the result in the `pdf` variable.
        pdf = client.convert();

        # Send the result and set HTTP response headers.
        response = Response(pdf, mimetype='application/pdf')
        response.headers['Cache-Control'] = 'max-age=0'
        response.headers['Accept-Ranges'] = 'none'
        response.headers['Content-Disposition'] = "attachment; filename*=UTF-8''" + urllib.parse.quote('offer.pdf', safe='')
        return response
    except pdfcrowd.Error as why:
        # Send the error in the HTTP response.
        return Response(
            str(why), status=why.getStatusCode(), mimetype='text/plain')

Multiple in-memory PDFs to PDF in Flask

import urllib.parse
from flask import Flask, Response
import pdfcrowd

app = Flask(__name__)

# The recommended method is POST.
@app.route('/', methods=['POST'])
def convert():
    try:
        # Create an API client instance.
        client = pdfcrowd.PdfToPdfClient('demo', 'demo')

        # Configure the conversion.
        client.addPdfRawData(open('/path/to/cover.pdf', 'rb').read())
        client.addPdfRawData(open('/path/to/proposal.pdf', 'rb').read())
        client.addPdfRawData(open('/path/to/price.pdf', 'rb').read())
        client.addPdfRawData(open('/path/to/contact.pdf', 'rb').read())

        # Run the conversion and store the result in the `pdf` variable.
        pdf = client.convert();

        # Send the result and set HTTP response headers.
        response = Response(pdf, mimetype='application/pdf')
        response.headers['Cache-Control'] = 'max-age=0'
        response.headers['Accept-Ranges'] = 'none'
        response.headers['Content-Disposition'] = "attachment; filename*=UTF-8''" + urllib.parse.quote('offer.pdf', safe='')
        return response
    except pdfcrowd.Error as why:
        # Send the error in the HTTP response.
        return Response(
            str(why), status=why.getStatusCode(), mimetype='text/plain')