When you are drawing text into a PDF, you may need to define colorful brushes or pens in order to make the page more vivid. This article shows how to set the text string’s color space in a PDF document using Spire.PDF for Java.

Install Spire.PDF for Java

First, you need to add the Spire.Pdf.jar file as a dependency in your Java program. The JAR file can be downloaded from this link. If you use Maven, you can easily import the JAR file by adding the following code to your project's pom.xml file.

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf</artifactId>
        <version>11.12.16</version>
    </dependency>
</dependencies>

Set the Font Color for the Text String on PDF

Spire.PDF for Java offers PdfSolidBrush class to set the brush color for the text. It supports to define the brush color based on a particular RGB color space or a HTML color code.

  • Create a PdfDocument object.
  • Add a new page in the PDF using PdfDocument.getPages().add() method.
  • Create a PdfSolidBrush object based on a particular RGB color space or a HTML color code.
  • Create an object of PdfTrueTypeFont to set the font name, size and style.
  • Draw text on the page at the specified location using PdfPageBase.getCanvas().drawString() method.
  • Save the document to another PDF using PdfDocument.saveToFile() method.
  • Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfRGBColor;
import com.spire.pdf.graphics.PdfSolidBrush;
import com.spire.pdf.graphics.PdfTrueTypeFont;

import java.awt.*;

       public class pdfBrush {
            public static void main(String[] args) throws Exception {


                //Create a PdfDocument object
                PdfDocument doc = new PdfDocument();
                //Add a page
                PdfPageBase page = doc.getPages().add();

                //Set the location
                float y = 30;

                //Create solid brush object and define the color
                PdfRGBColor rgb1 = new PdfRGBColor(Color.green);
                PdfSolidBrush brush1 = new PdfSolidBrush(rgb1);

                //RGB Color
                PdfRGBColor rgb2 = new PdfRGBColor(0,197,205);
                PdfSolidBrush brush2 = new PdfSolidBrush(rgb2);

                //HTML code color
                Color color = Color.decode("#A52A2A");
                PdfSolidBrush brush3 = new PdfSolidBrush(new PdfRGBColor(color));

                //Create true type font object
                Font font = new Font("Arial", java.awt.Font.BOLD, 14);
                PdfTrueTypeFont trueTypeFont = new PdfTrueTypeFont(font);

                //Draw text
                page.getCanvas().drawString("Set the text color with brush", trueTypeFont, brush1, 0, (y = y + 30f));
                page.getCanvas().drawString("Set the text color with RGB", trueTypeFont, brush2, 0, (y = y + 50f));
                page.getCanvas().drawString("Set the text color with HTML code color", trueTypeFont, brush3, 0, (y = y + 60f));

                //Save to file
                doc.saveToFile("output/CreatePdf.pdf");

            }
        }

Java: Set the Font Color for the Text String on PDF

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

Spire.Cloud.Office is a HTML5-based document editor that allows users to view and edit Word and Excel documents in a web browser. After installing it on your server, you'll be able to embed the editor in your own web application. This article will show you how to install Spire.Cloud.Office for Linux on CentOS 7.

Step 1. Configure the Environment

1) Turn off the firewall

Run the script firewall-cmd --state as root to view the firewall status. If the status is "not running", no other settings required; if the status is "running", run the script systemctl stop firewalld.service to shut down the firewall.

Install Spire.Cloud.Office for Linux on CentOS

2) Configure a static IP

Run the script vi /etc/sysconfig/network-scripts/ifcfg-ens32 (ens32 can be replaced by your network name) to open the network configuration file to configure a static IP address.

Press I to enter the editing mode, change the value of BOOSPROTO to "static", and add IP address, net mask, gateway, and DNS server at the end. After edits are completed, press Esc and then enter the script :wq to save the changes and exit.

Install Spire.Cloud.Office for Linux on CentOS

Enter the script systemctl restart network to restart the network service, and then run the script ip addr to check whether the IP address has been successfully applied.

Install Spire.Cloud.Office for Linux on CentOS

Step 2. Copy Spire.Cloud.Office to CentOS

Download Spire.Cloud.Office for Linux package, and unzip it somewhere on your disk. We use WinSCP to copy files from Windows system to the root of CentOS system.

1) Log in to WinSCP

Install Spire.Cloud.Office for Linux on CentOS

2) Copy files

After the connection is successful, copy the files contained in Spire.Cloud.Office for Linux package to the /root/cloud/ directory of the CentOS system. The "cloud" folder here is a newly created folder and can be named arbitrarily.

Install Spire.Cloud.Office for Linux on CentOS

Step 3. Install Spire.Cloud.Office for Linux

Enter the folder where the file "install_centos7.sh" is located, then run the script sh install_centos7.sh to install Spire.Cloud.Office on CentOS.

Install Spire.Cloud.Office for Linux on CentOS

After the installation is completed, you'll get the following output.

Install Spire.Cloud.Office for Linux on CentOS

Step 4. Bind License

Copy your license file to the /root/cloud/spire.cloud/service/ConverterService/bin/license/ directory through WinSCP. If you need a temporary license to evaluate our product, please contact sales.

Install Spire.Cloud.Office for Linux on CentOS

Enter the folder that contains the file "binding_license.sh", then run the script sh binding_license.sh to bind the license.

Install Spire.Cloud.Office for Linux on CentOS

After the license is successfully bound, you'll get the following output.

Install Spire.Cloud.Office for Linux on CentOS

Now that you've successfully installed Spire.Cloud.Office for Linux on CentOS, you can visit our example on port 3000, and embed the document editor in your HTML page using JavaScript.

Install Spire.Cloud.Office for Linux on CentOS

Spire.Cloud.Office is a JavaScript document editor which you can use to create, edit, convert, print, view and save MS Word and Excel documents in a browser on Windows, Linux and Mac. This article demonstrates how to incorporate Spire.Cloud.Office online editor (JavaScript) into a HTML document, so you can run the editor directly in your web application or cloud application.

Step 1. Install Spire.Cloud.Office

Before you can embed the document editor in your HTML file, you’ll need to install Spire.Cloud.Office on your system.

After installation, you can visit our sample file management system and editor on port 3000, and connect to our service via port 8000. In this tutorial, Spire.Cloud.Office is installed on our local server 192.168.0.111.

Step 2. Embed Editor in Your HTML Document

Below is a sample HTML in which our document editor is embedded. You can download it and modify some key parameters in it to run our editor in a HTML page.

<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><link rel="icon" href="https://cdn.e-iceblue.com/favicon.ico" type="image/x-icon" /><title>
	Spire.Office
</title>

    <style>
        html {
            height: 100%;
            width: 100%;
        }

        body {
            background: #fff;
            color: #333;
            font-family: Arial, Tahoma,sans-serif;
            font-size: 12px;
            font-weight: normal;
            height: 100%;
            margin: 0;
            overflow-y: hidden;
            padding: 0;
            text-decoration: none;
        }

        form {
            height: 100%;
        }

        div {
            margin: 0;
            padding: 0;
        }
    </style>

    <script language="javascript" type="text/javascript" src="http://192.168.4.77:8000/web/editors/spireapi/SpireCloudEditor.js"></script>

    <script type="text/javascript" language="javascript">

        var docEditor;
        var fileName = "";
        var lang = "zh";
        var fileType = "";
        var token = null;
        var appid = null;
        var appkey = null;

        var innerAlert = function (message) {
            if (console && console.log)
                console.log(message);
        };

        var onStart = function () {
            innerAlert("Document editor ready");

        };

        var onDocumentStateChange = function (event) {
            var title = document.title.replace(/\*$/g, "");
            document.title = title + (event.data ? "*" : "");
        };

        var onRequestEditRights = function () {
            location.href = location.href.replace(RegExp("action=view\&?", "i"), "");
        };

        var onError = function (event) {
            if (event)
                innerAlert(event.data);
        };

        var onOutdatedVersion = function (event) {
            location.reload(true);
        };
        function ajax(options) {
            options = options || {};
            var method = (options.type || "GET").toUpperCase(),
                url = options.url,
                queryString = null;
            if (!url)
                return;
            if (options.data) {
                queryString = [];
                for (var attr in options.data) {
                    queryString.push(attr + "=" + options.data[attr]);
                }
                queryString = queryString.join("&");
            }
            if (method === "GET" && queryString) {
                url += "?" + queryString;
                queryString = "";
            }
            var xhr = new XMLHttpRequest();
            xhr.open(method, url, true);
            if (method === "POST")
                xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.send(queryString);
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4) {
                    if (xhr.status === 200) {
                        var data = xhr.responseText;
                        if (options.dataType === "json")
                            data = JSON.parse(data);
                        options.success && options.success(data);
                    } else {
                        options.error && options.error(xhr.status);
                    }
                }
            }
        }
        var callbackfn = function (result) {
            if (result && result.data) {
                var data = result.data,
                    fileName = data[0],
                    url = data[1];
                if (fileName.indexOf('=') > -1)
                    fileName = fileName.split('=')[1];
                var host1 = location.hostname;
                var host ='http://192.168.4.77:8000';
                ajax({
                    url: 'http://' + host + '/webeditor.ashx?type=save',
                    type: 'post',
                    data: { 'filename': fileName, 'fileuri': url },
                    dataType: 'json',
                    async: false,
                    success: function (json) {
                        if (json.code == 200 || json.code == '200') {
                            alert('Successfully saved');
                        } else {
                            this.error(json, 'Failed to save');
                        }
                    },
                    error: function (json, msg) {
                        alert(+msg);
                    }
                });
            }
        };
        var connectEditor = function () {
            var type = 'desktop';
            if (type == "desktop") {
                var app = navigator.appVersion;
                if (app.toLowerCase().indexOf('window') != -1) {
                    type = "desktop";
                } else {
                    type = "mobile";
                }
            };
            var urlString ="https://cloud.e-iceblue.cn/demo/demo.docx";
            var arrfn = urlString.split(".");
            var strp= arrfn[arrfn.length - 1];
            var documentTypeValue=null;
             switch(strp){
             case "xls":
             case "xlsx":
             case "xlsm":
             case "xlt":
             case "xltx":
             case "xltm":
             case "ods":
             case "fods":
             case "ots":
             case "csv":
             documentTypeValue="spreadsheet";
             break;
             case "pps":
             case "ppsx":
             case "ppsm":
             case "ppt":
             case "pptx":
             case "pptm":
             case "pot":
             case "potx":
             case "potm":
             case "odp":
             case "fodp":
             case "otp":
             documentTypeValue="presentation";
             break;
             default:
             documentTypeValue="document";
             break;
             }

            docEditor = new SpireCloudEditor.OpenApi("iframeEditor",
                {
							fileAttrs: {
								fileInfo: {
									name: '',
									ext: '',
									primary: '',
									creator: '',
									createTime: new Date('20210505')
								},
								sourceUrl: urlString,
								createUrl: '',
								callbackUrl: 'http://192.168.4.77:3000/save?filename=demo.docx&useraddress=__ffff_192.168.3.121',////This item can be empty, but only if the 'onSave' callback function must be defined in events. If the callback function is undefined and this item is empty, Cloud Editor will not provide save function.
								verification: null,//If the user file system requires validation of token-like data when downloading files, it can be implemented here.
								canEdit: true,
								canDownload: false,
								canForcesave: false
							},
							user: {
								primary: '',
								name: '',
								canSave: true,
								customization: {
									public: {
										common: {
											whiteLabel: false,
											defaultZoom: 1,
											openReviewChanges: false,
											permGroups: ['everyone'],//Restrict Group Editing
											viewVersion: false,
											header: {
												hideTitle: false,
												defaultView: 'full'
											}
										},
										word: null,
										powerpoint: null,
										excel: null
									}
								}
							},
							editorAttrs: { // Editor configuration
								editorWidth: '100%',
								editorHeight: '100%',
								editorType: 'document', // Editor type (optional). The program will determine based on file type. Possible values: document, presentation, spreadsheet
								platform: 'desktop', // Editor platform type. Options: desktop, mobile, embedded
								viewLanguage: 'en', // UI display language. Options: en (English), zh (Chinese)
								canChat: true, // Whether chat feature is enabled
								canComment: true, // Whether commenting feature is enabled
								canReview: true, // Whether review feature is enabled
								embedded: {
									saveUrl: '', // URL for saving embedded content
									embedUrl: '', // URL for embedding content
									shareUrl: '' // URL for sharing content
								},
								events: {
								'onStart': onStart,
								'onDocumentStateChange': onDocumentStateChange,
								'onError': onError,
								'onSave': ''
								}
							}
                }
            );
        };
        if (window.addEventListener) {
            window.addEventListener("load", connectEditor);
        } else if (window.attachEvent) {
            window.attachEvent("load", connectEditor);
        }

    </script>
</head>
<body>
    <form name="form1" method="post" action="./docEditor.aspx?fileID=demo+(2).docx&lang=zh" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTkyMjc5MTU4M2RkBQQQBsVcOHQbzTlwYapiES2Trc9Z/U4CC+r9rluZubc=" />
</div>
<div>
	<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="C2EAC0DE" />
</div>
        <div id="iframeEditor">
        </div>
    </form>
</body>
</html>

Key Parameters

Configuration Parameters Example Value Explanation Set Value
fileAttrs File configuration object
fileInfo File information object
name File name Can be empty
ext Document name docx, xlsx, pptx
primary Document unique identifier Can be empty
creator Document creator Can be empty
createTime Document creation time Can be empty
sourceUrl Document URL Cannot be empty, must have access permissions
createUrl Template document URL when creating a new document Can be empty
callbackUrl Callback URL Can be empty. If online editing save functionality is required, either callback URL or callback event must be defined
verification Verification information Can be empty. When downloading files from user file system requires verification data like token, it can be written here
templates Document templates Can be empty
canEdit Whether the document can be edited Default is true. When set to false, saving is not allowed
canDownload Whether the document can be downloaded Default is true. When set to false, downloading is not allowed
user User configuration object
primary User ID Can be empty
name Username Can be empty
canSave Whether the user can save the document Default is true. When set to false, saving is not allowed
canSaveByShortcut Whether the user can save the document via shortcut Default is true. When set to false, saving via shortcut is not allowed
customization Custom parameters object
public Public parameters
common Common parameters object
whiteLabel White label Default is false. When set to true, the E-iceblue Logo icon will not be displayed
defaultZoom Zoom value Can be empty. Set range is 0.5-5
OpenReviewChagnes Whether to open revisions Default is false. When set to true, revisions are opened
openNavigation Open navigation bar Default is false. When set to true, the navigation bar is displayed
openAllComments Open comments list Default is false. When set to true, the comments list is displayed
CollaborationModeIsFast Set editing mode Whether collaborative editing mode is fast. When true, mode is fast; when false, mode is strict. When this parameter is not set, the last value from editor cache is used. If no cache, it's set to fast
CollaborationModeOnlyFast Disable strict mode Whether mode is fast only. Default is false. When true, sets to fast mode and disables strict mode
viewVersion View mode Default is false. When true, saving is not allowed
canDownloadInView Whether download is allowed in view mode Default is false. When true, download is allowed in view mode
canPrintInView Whether printing is allowed in view mode Default is false. When true, printing is allowed in view mode
openReviewPanel Open revisions list Default is false. When true, shows revisions list
hideRuler Hide ruler Default gets value from browser cache. When true, hides ruler; when false, shows ruler
hideStatusBar Hide status bar Default is false. When true, hides status bar
showBookmarks Show bookmarks indicator Default is true. When false, hides bookmarks indicator
keepTextOnly Paste text only by default Default is false. When true, only pastes text
permGroups Current user's group membership (this is an array) Default is all users, can input custom groups
socket_url Custom socket_url, mainly to solve port mismatch issues when using Nginx as reverse proxy after private deployment Can be empty
header
hideTitle Hide title Default is false. When true, hides title
defToolbar Toolbar view Default is "full", can be set to "full" or "short"
goback Back navigation object
url Back navigation URL Can be empty
btnPermissions Button permission control View button permission control table
previewShowCursor Show cursor in preview mode Default is true. When false, hides cursor
showCursor Show cursor Default is true. When false, hides cursor
cusWaterMarkJs Custom watermark JS Should be a URL address
canChangeProduct Whether product can be switched Default is false. When true, switching is allowed
showTableline Whether to show dotted lines for borderless tables Default is true. When false, hides dotted lines
document Word customization View corresponding customer's customization documentation
excel Excel customization View corresponding customer's customization documentation
powerpoint PPT customization View corresponding customer's customization documentation
aiCommon Public cloud id, key, and TokenUrl required for AI functionality View corresponding AI configuration documentation
aiAttars_WordAI Appkey and productType required for Word's AI functionality View corresponding AI configuration documentation
aiAttars_ExcelAI Appkey and productType required for Excel's AI functionality View corresponding AI configuration documentation
aiAttars_PowerPointAI Appkey and productType required for PPT's AI functionality View corresponding AI configuration documentation
editorAttrs Editor configuration object
editorMode Edit mode
Can be 'edit' (edit) or 'view' (view)
Can be empty, defaults to 'edit'
editorWidth Width Can be empty, default value 100%
editorHeight Height Can be empty, default value 100%
editorType File editor type Can be unconfigured, program gets from file type. Must be set to document or spreadsheet or presentation
platform Editor platform type
'desktop' (desktop display), 'mobile' (mobile display), 'embedded' (embedded display)
Cannot be empty, must be set to one of desktop, mobile or embedded
viewLanguage Platform interface display language Can be empty, "en" or "zh". If empty, matches browser default language
canChat Whether chat is enabled Default is true. When false, chat is disabled
canComment Whether comments are enabled Default is true. When false, comments are disabled
canReview Whether revisions are enabled Default is true. When false, revisions are disabled
canForcesave Whether document can be force-saved Default is true. When false, force-saving is not allowed
unMarked Enable unmarked mode (accept revisions) Can be empty, default is false. When true, enables unmarked mode (accepts revisions)
canSignature Whether to enable signature/seal functionality Can be empty, default is false. When true, enables signature/seal functionality
canWordAI Whether to enable Word's AI functionality Can be empty, default is false. When true, enables Word's AI functionality
canExcelAI Whether to enable Excel's AI functionality Can be empty, default is false. When true, enables Excel's AI functionality
canPowerPointAI Whether to enable PPT's AI functionality Can be empty, default is false. When true, enables PPT's AI functionality
events Events
onStart Triggered when editor initialization completes and starts loading/parsing document
onDocumentContentReady Triggered when document loading completes
onSave Triggered when saving
onDocumentStateChange Triggered when document state changes (document has saved and unsaved states)
onError Triggered when error occurs
onErrorCallback Callback when clicking error popup Normally, clicking error popup navigates to page specified by fileAttrs.customization.public.common.goback.url. If user customizes this function, calls the function instead and URL becomes invalid
page 99