Support Center

Documentation

Browse our documentation online in PDF or HTML format and get the latest release notes.

Knowledge Base

Looking for a quick solution or info to your question? See if it has already been answered!

Ask Our Support

Get in touch with our friendly and experienced support team and receive prompt assistance.

Documentation

The PDFreactor documentation consists of:

The documentation is included in the PDFreactor installation package, available here.

Documentation for previous versions.

UPDATING TO PDFREACTOR 8

If you are upgrading to PDFreactor 8 from a previous version of PDFreactor, you will need to update your integration. The PDFreactor 8 API is not compatible with the API from previous versions. For details about how to migrate from a previous version to PDFreactor 8, please see our migration guide.

Knowledge Base

Is PDFreactor a desktop application for end-users to create PDFs from any kind of documents?

No, PDFreactor is a tool designed for the automatic and high-performant creation of PDF documents on servers.

Is PDFreactor a replacement for Adobe Acrobat or similar desktop software tools?

No, PDFreactor is no replacement for Adobe Acrobat or similar desktop software tools, as PDFreactor requires a host application (e.g. ERP, database, e-Commerce) on a web server in which it is integrated. As part of the host application’s functionality PDFreactor can be used to stream PDF documents – generated from HTML or XML data – over the web.

Into what environments can I integrate PDFreactor?

PDFreactor features APIs in the following languages:

  • Java
  • JavaScript
  • PHP
  • .NET
  • Python
  • Perl
  • Ruby

What is the typical integration scenario for PDFreactor?

Server-side PDF creation using PDFreactor as part of host applications (e.g. ERP, database, e-Commerce) on a Java web application server in order to print or stream PDF documents – generated from HTML or XML sources – over the web.

How Do I Set The License Key?

The PDFreactor license key has to be set in your PDFreactor integration. Just copy the contents of the license key file (“licensekey.txt”) and set it on the configuration object as a string like this:

Java

config.setLicenseKey(“…”);

PHP

$config[“licenseKey”] = “…”;

.NET

config.licenseKey = “…”;

JavaScript

config.licenseKey = “…”;

Python

config[“licenseKey”] = “…”

Ruby

config[“licenseKey”] = “…”

Perl

$config->{“licenseKey”} = “…”;

Integrators that use the PDFreactor Web Service with one of the appropriate APIs can also just copy the licensekey.txt file to the “PDFreactor/jetty/lib/ext” directory where it will be used automatically by PDFreactor.

How many licenses do I need to purchase?

As written in the PDFreactor Software License Agreement a PDFreactor license can only be used on 1 (one) physical or virtual machine or isolated software container. So for each production machine you require one license.

CPU License

For non-personal use, you require a CPU license. Depending on the number of CPU cores, each license consists of a number of license packs. One license pack is valid for up to 4 CPU cores.

For example, a server with 6 CPU cores requires a single PDFreactor license with two license packs. Two servers with 2 CPU cores each require two PDFreactor licenses with one license pack each.

Free Personal

If you are going to use PDFreactor on a non-commercial basis, you can request a Free Personal license here.

Other License Types

In addition to the CPU and Non-Commercial licenses, we also offer Corporate and OEM licenses. For information about Corporate and OEM licenses, please contact us at support@realobjects.com.

What is the PDFreactor Demo Application for?

The PDFreactor Preview application, which is installed on your machine through the PDFreactor installers, is for testing and demonstration purposes only. It allows you to easily and quickly experience the capabilities of PDFreactor.

The PDFreactor Preview application offers a PDF preview. You can create each PDF document on-the-fly and save it to your computer. The document’s source code and inline style sheets (used in some of the sample documents) can be modified in order to experience the styling-based processing model of CSS.

How is PDFreactor integrated?

PDFreactor is provided as a single independent Java library with an extensive API. The package also includes a web service which provides a REST API, as well as wrapper APIs for the following languages: JavaScript, PHP, .NET, Python, Perl and Ruby, providing the same ease of integration. Alternatively, you can also use PDFreactor from the command line.

What is the simplest way to integrate PDFreactor using the Java API?

PDFreactor can be integrated with just these few lines of Java code:

PDFreactor pdfReactor = new PDFreactor();
Configuration config = new Configuration();
config.setDocument("http://www.realobjects.com");
Result result = pdfReactor.convert(config);
byte[] pdf = result.getDocument();

See also the chapter Using the Java library in the PDFreactor Manual.

Can I run PDFreactor on a system without a graphical environment such as X11 oder Xfvb?

Yes. To run PDFreactor on a system without a graphical environment you should enable headless mode in Java. To do so, you should set the Java system property “java.awt.headless” to “true”.

How can I convert large documents when using the PDFreactor web service and one of the available wrapper APIs?

By default the PDFreactor web service, which is used by the REST, JavaScript, PHP, .NET, Python, Perl and Ruby APIs, has a maximum of 1024MB of memory assigned for its Java VM. For large documents, this might not be sufficient. To increase the amount of available memory, you can modify the “-Xmx1024m” parameter in the file “PDFreactor/bin/pdfreactorwebservice.vmoptions”.

For example, to increase the memory to 2GB, change the parameter to “-Xmx2048m” and restart the web service.

How can PDFreactor connect to a server using HTTPS?

PDFreactor can connect to servers using the HTTPS protocol. However, Java requires the server’s certificate to be imported. To avoid that you can use a more convenient approach by setting the HTTPS mode of the PDFreactor configuration to “lenient”:

config.setHTTPSMode(PDFreactor.HTTPS_MODE_LENIENT);

Are there any options to set the resolution of the generated PDFs?

PDFreactor does not create documents with a fixed resolution. Images are embedded at their original resolution while text is stored as references to the glyphs in the true type font, which makes it resolution independent. Therefore there are no “resolution” settings.

The resolution at wich PDFreactor lays out documents is 96 pixels per inch (as defined by CSS). This can be changed by using the API methods “setPixelsPerInch” and “setPixelsPerInchShrinkToFit”. Keep in mind that these do not affect lengths specified in physical units like “inch” or “cm”.

Which fonts are supported?

PDFreactor supports TrueType fonts (TTF) and OpenType fonts (OTF). The fonts are automatically embedded into the generated PDF documents. Please note that using OpenType fonts requires at least Java 7.

Which PDF version does PDFreactor produce?

The PDF version of PDF files created with PDFreactor is 1.4. Some advanced functionalities of PDFreactor may introduce elements from later versions.

PDF/A documents created with PDFreactor are conformant to the PDF/A-1a or the PDF/A-3a specification.

Do I get a discount for being an educational institute?

We offer a 30% discount for educational institutes such as schools, colleges or universities.

Do I need a license for my test and development environment?

Generally test and development servers do not have to be licensed, but only as long as they are used to develop and test the integration of PDFreactor into your application and not for the creation of production PDFs in any form.

Customers who have a valid PDFreactor license with an active 1 Year Support & Maintenance subscription are welcome to request a special PDFreactor license for test, development purposes at support@realobjects.com. They will receive a full license key which is valid during the subscription period. Renewing can be done as often as required. You are not allowed to use your unlimited full license key on your test and development servers.

Why does PDFreactor ignore my style sheet?

This can have a variety of reasons. Please make sure that the style sheet can be reached via the specified URL. Also, PDFreactor will only apply style sheets with the media type “print” or without media type. Style sheets with media type “screen” for example will be ignored.

How do I activate SSL for the PDFreactor Web Service?

By default, the PDFreactor Web Service does provide SSL and is accessible only via HTTP. If a secure HTTPS connection is required, you can enable SSL in PDFreactor’s Jetty server by following these steps:

1. Create a Self-Signed PKCS12 Keystore

You can skip this section if you already have an SSL certificate for your Jetty server.

To create a self-signed certificate, execute the following commands on the command line (note: you will require openssl and key tool):

openssl genrsa -des3 -out jetty.key
openssl req -new -x509 -key jetty.key -out jetty.crt
keytool -keystore /Applications/PDFreactor/jetty/etc/keystore -import -alias jetty -file jetty.crt -trustcacerts
openssl req -new -key jetty.key -out jetty.csr
openssl pkcs12 -inkey jetty.key -in jetty.crt -export -out jetty.pkcs12

For simplicity you can use the same password for all commands. If you are using different passwords, make sure to use the appropriate password when configuring the “start.ini” (see below).

IMPORTANT: if you are using a self-signed certificate, some clients (especially browsers) need to accept the certificate before they can make calls over SSL to your server. These calls will fail due to security restrictions if the certificate was not accepted by the client first.

2. Import the PKCS12 Keystore in Jetty

keytool -importkeystore -srckeystore jetty.pkcs12 -srcstoretype PKCS12 -destkeystore /Applications/PDFreactor/jetty/etc/keystore

If the Jetty keystore already exists, remove or rename it before creating the new keystore.

3. Enable SSL in Jetty

You can now use the keystore you created to configure SSL in Jetty. Since you will have to enter the password for your keystore in the “start.ini” file, we recommend creating a hash from your password first. You can do this as follows:

java -cp /Applications/PDFreactor/jetty/lib/jetty-util-9.3.9.v20160517.jar org.eclipse.jetty.util.security.Password yourPassword

Now open the start.ini file (found in /PDFreactor/jetty) and edit/uncomment the following section:

#========================
# SSL Configuration
#========================

--module=https
--module=ssl

jetty.ssl.port=8443
jetty.ssl.idleTimeout=30000
jetty.ssl.acceptors=2
jetty.ssl.acceptorQueueSize=100

jetty.sslContext.keyStorePath=etc/keystore
jetty.sslContext.trustStorePath=etc/keystore
jetty.sslContext.keyStorePassword=OBF:[password]
jetty.sslContext.keyManagerPassword=OBF:[password]
jetty.sslContext.trustStorePassword=OBF:[password]

The [password] should be replaced by the hash you created using the org.eclipse.jetty.util.security.Password as described above. If you are using a MD5 hash of your password or your password in plain text instead, change the “OBF” prefix to “MD5” or remove it.

After you changed the start.ini, restart the PDFreactor Web Service like this:

Windows:

  • Go to ‘Services’
  • Find the ‘PDFreactor WebService’
  • Restart the service

OS X:

sudo launchctl stop com.realobjects.pdfReactorWebService
sudo launchctl start com.realobjects.pdfReactorWebService

Linux/Unix:

sudo /PDFreactor/bin/pdfreactorwebservice restart

After restarting, you can now access the REST API of the PDFreactor Web Service securely at “https://localhost:8443/service/rest”.

Support Terms

For more information about our support services and availability, please see here.

Parts of PDFreactor are Open Source libraries. For details please see here.

Community Support

Get free support by asking questions on stackoverflow using the pdf-reactor tag. Members of the community as well as members of our team will answer your questions.