Modifying WebViewer Server

It's possible to perform internal changes to WebViewer Server, though we do not recommend it. You may wish to do this if our options do not expose a particular configuration setting, such as the maximum allowed threads in Tomcat.

WebViewer Server Layout

This section will help you understand WebViewer Server. Below is how you would typically build on top of our existing container.

sh

1FROM pdftron/webviewer-server:latest
2COPY myfile.txt /

sh

1docker build -t webviewer .
2docker run webviewer

The important paths within the server image are as follows:


/usr/local/apache-tomcat: This is the server which hosts the WebViewer Server code, it is where the bulk of work occurs.

/usr/local/apache-tomcat/conf: This is the main configuration directory for tomcat, within you'll find 3 configuration files - server.xml, web.xml and context.xml. You may change this but do so at your own risk as we have configured these files specifically for WebViewer Server.

/usr/local/apache-tomcat/static_data: This is where we store WebViewer Server's cache.

/usr/local/apache-tomcat/internal_data/: Where temporary data is stored, mainly used by Apryse core for memory swaps.

/usr/local/apache-tomcat/webapps: This contains the blackbox and demo webapps. Prior to 1.5.6 this will contain Java classes, in any other version it will contain .war files containing the webapps.

/usr/local/apache-tomcat/logs: Contains all logging data for WebViewer Server.

When WebViewer Server starts, it executes a script located in /usr/local/apache-tomcat/bin/watchdog.sh, this file is responsible for keeping Tomcat running inside of the container.


For more information on configuring Tomcat, you can refer to their available guide for Tomcat 10 http://tomcat.apache.org/tomcat-10.0-doc/

Updating PDFNet

If you need to update WebViewer Server's core libraries, you can do so.

  1. Retrieve a different version of PDFNet from our downloads section or a provided link.
  2. Create a new Dockerfile with the following, and extract the PDFNet to the same directory as the Dockerfile. You should be using a Java version of our SDK.

Bash

1FROM pdftron/webviewer-server:latest
2COPY libPDFNetC.so /usr/local/apache-tomcat/bin/
3COPY PDFNet.jar /usr/local/apache-tomcat/lib/

For Windows, you need to copy PDFNetC.dll to /install_dir/apache-tomcat/bin/.

  1. Start the server. You will now run with a new PDFNet, this can be confirmed in the logs.

sh

121:43:32.773 INFO [main] com.pdftron.blackboxservlet.ContextListener.contextInitialized {"PDFNet_version":8.2077024,"num_cpu":4,"os_arch":"amd64","os_name":"Linux","os_version":"5.10.7-arch1-1","server_version":"1.5.4-g4c1f614","total_memory":32064}

Modifying JAVA_OPTS

Some customers may need to modify JAVA_OPTS, most likely to change memory values. This can be easily done by setting the JAVA_OPTS environment variable. Keep in mind the following must be in the JAVA_OPTS variable.

Bash

1-Djava.library.path=/usr/lib:/usr/local/tcnative/lib:$CATALINA_HOME/bin:$CATALINA_HOME/lib:/usr/lib/x86_64-linux-gnu

In the docker-compose this would be defined like so:

Bash

1JAVA_OPTS: '-Djava.library.path=/usr/lib:/usr/local/tcnative/lib:$CATALINA_HOME/bin:$CATALINA_HOME/lib:/usr/lib/x86_64-linux-gnu'

Java Memory

The main use for this is to modify Java memory limits. We recommend setting Xmx to a bit less than your server's available memory. This will prevent Java from exceeding allocation limits because it has not garbage collected.

Bash

1JAVA_OPTS: '-Djava.library.path=/usr/lib:/usr/local/tcnative/lib:$CATALINA_HOME/bin:$CATALINA_HOME/lib:/usr/lib/x86_64-linux-gnu -Xmx6G'

The following documentation details more about these java options.

https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html

Adding TTF and OTF Fonts

Adding custom TTF and OTF fonts to WebViewer Server is easy, although how to do so depends on how you are running it.

When Running in a Container

Without Rebuilding

It is possible to add TTF and OTF fonts to WebViewer Server without rebuilding its container. To do so, mount your custom fonts as a volume to /home/tomcat/.fonts/custom. This can be done with docker-compose, as shown with the following line:

yml

1volumes:
2- ./myfonts:/home/tomcat/.fonts/custom

You can replace ./myfonts with whatever path contains your fonts.

Alternatively, this can also be done when running directly through Docker, like so:

Bash

1docker run -v /home/user/myfonts:/home/tomcat/.fonts/custom -p 8090:8090 pdftron/webviewer-server:latest

Similarly, /home/user/myfonts is a stand-in for the path to your fonts. Also, you should run your Docker setup with a clean start before you mount a volume.

With Rebuilding

You can also add TTF and OTF fonts by modifying the container image. You can replace myfonts/ with whatever path contains your fonts.

Bash

1FROM pdftron/webviewer-server:latest
2COPY myfonts/*.ttf /usr/share/fonts/truetype
3COPY myfonts/*.otf /usr/share/fonts/opentype
4RUN fc-cache

When Installed with the Windows Installer

On Windows, you should install TTF and OTF fonts directly onto your system, and then restart WebViewer Server. This guide from Microsoft goes into more detail on how this is done.

Adding Other Types of Fonts

If a module you are running supports other types of fonts, such as SHX and RTF fonts for the CAD Module, it possible to add your own custom fonts for those modules to WebViewer Server.

When Running in a Container

Without Rebuilding

To add module-specific fonts to WebViewer Server without rebuilding its container, mount your custom fonts as a volume to /usr/local/apache-tomcat/fonts. This can be done with docker-compose, as shown with the following line:

yml

1volumes:
2- ./myfonts:/usr/local/apache-tomcat/fonts

You can replace ./myfonts with whatever path contains your fonts.

Alternatively, this can also be done when running directly through Docker, like so:

Bash

1docker run -v /home/user/myfonts:/usr/local/apache-tomcat/fonts -p 8090:8090 pdftron/webviewer-server:latest

Similarly, /home/user/myfonts is a stand-in for the path to your fonts. Also, you should run your Docker setup with a clean start before you mount a volume.

With Rebuilding

You can also add module-specific fonts to WebViewer Server by modifying its container image. myfonts/ can be replaced with whatever path contains your custom fonts.

yml

1FROM pdftron/webviewer-server:latest
2COPY myfonts/ /usr/local/apache-tomcat/fonts

When Installed with the Windows Installer

You must manually add module-specific fonts within your WebViewer Server directory on Windows. You can add your custom fonts to \WebViewer-Server\apache-tomcat\fonts, where \WebViewer-Server is your root directory for WebViewer Server. You may need to create the \fonts folder yourself.

Did you find this helpful?

Trial setup questions?

Ask experts on Discord

Need other help?

Contact Support

Pricing or product questions?

Contact Sales