Code-Example: Attachment operation
Minimum technical requirements
- Java version: 7
- webPDF version: 7
- wsclient version: 1
Manage attachments with the wsclient library
In this article we would like to introduce you to the Attachment
operation of the ToolboxWebService
of webPDF and how you can use it via the webPDF wsclient library.
Important note:
The following coding example is based on the use of the webPDF wsclient library. In order to understand and apply the example, the following blog post should be considered first:
First step
To call the Webservice exactly as we want, you should already have created a REST or SOAP session and be able to create either a ToolboxWebService
object (for a SOAP session) or a ToolboxRestWebService
object (for a REST session) by calling the WebserviceFactory
. And have passed either a RestDocument
or a SoapDocument
object to this WebService
object by calling the method setDocument()
.
ToolboxWebService toolboxWebService = WebServiceFactory.createInstance( session, WebServiceType.TOOLBOX );
Code snippet 2:
ToolboxRestWebService toolboxWebService = WebServiceFactory.createInstance( session, WebServiceType.TOOLBOX );
Webservice parameters – specify Open or Permission password
To get changing access to a document, you have to give the current open
and/or permission
password of the document to the webservice call (if your document has an appropriate password protection). You can do this directly on the created toolboxWebService
object:
toolboxWebService.getPassword().setOpen("password"); toolboxWebService.getPassword().setPermission("password");
What is the Toolbox Webservice?
The ToolboxWebservice
acts as the endpoint of your webPDF server, which summarizes some operations with which you can edit your PDF document. We would like to demonstrate this here with a coding example. In this case it is the attachment
operation. This allows you to embed, remove or extract attachments from a document.
To add an attachment operation to your WebService object:
AttachmentType attachment = new AttachmentType(); toolboxWebService.getOperation().add(attachment);
The following parameters can be set for the attachment
object:
The “add” object
To embed attachments in the document, add an AttachmentType.Add
object to the attachment
object.
AttachmentType.Add add = new AttachmentType.Add(); attachment.setAdd(add);
The following parameters can be set on the add
object:
The “file” object
To select one or more attachments for embedding, add one or more FileAttachmentType
objects to the add
object.
FileAttachmentType file = new FileAttachmentType(); add.getFile().add(file);
The following parameters can be set for the file
object:
fileName (default value: “”)
Defines the name with which the attachment is to be stored in the document.
file.setFileName("xyz.json");
The “data” object
Select the attachment to embed by adding an AttachmentFileDataType
object to the file
object.
AttachmentFileDataType data = new AttachmentFileDataType(); file.setData(data);
The following parameters can be set for the data
object:
source
Specifies the source from which the attachment is to be obtained. The following values can be set here:
- value = The data is transferred directly as byte array.
- uri = A URI reference to the data is passed.
data.setSource(FileDataSourceType.VALUE);
value
Passes the attachment in the form of a byte array. (source should be set to value
.)
(The byte array is created using the FileUtils
class of the Apache Commons IO library.)
data.setValue(FileUtils.readFileToByteArray(new File("…")));
uri
Passes a URI reference to the attachment to be embedded. (source should be set to uri
.)
data.setUri(new File("...").toURI().toString());
The “annotation” object
If the attachment is to be embedded as an annotation on a page of the document rather than on the document level, add a FileAnnotationType
object to the file
object.
FileAnnotationType annotation = new FileAnnotationType(); file.setAnnotation(annotation);
The following parameters can be set for the file
object:
page (default value: 1)
This value selects the page on which the annotation is to be placed.
annotation.setPage(1);
color (default value: “#4800FF”)
Selects the color of the text via a HEX-RGB value.
annotation.setColor("#FFFFFF");
opacity (default value: 100)
A percentage value that determines the opacity of the annotation. The higher the value, the less transparent the annotation will be. A value between 0 and 100 percent can be selected.
annotation.setOpacity(60);
icon (default value: “paperclip”)
This value selects the icon with which the attachment is displayed on the page. The following values can be set here:
- graph = Diagram
- paperclip = paperclip
- pushPin = pin
- tag = label
annotation.setIcon(IconsType.PUSH_PIN);
lockedPosition (default value: true)
If this value is set to true
, the annotation cannot be moved.
annotation.setLockedPosition(false);
popupText (default value: “”)
This value determines the tooltip to be displayed for the annotation.
annotation.setPopupText("Example popup text");
The object “point
To determine the position of the annotation on the page, add a PointType
object to the annotation
object.
PointType point = new PointType(); annotation.setPoint(point);
At the object point
the following parameters can be set:
x Position (default value: “0”)
This value determines the x-coordinate on which the annotation is to be positioned.
point.setX(15);
y Position (default value: “0”)
This value determines the y-coordinate on which the annotation is to be positioned.
point.setY(15);
coordinates (default value: “user”)
Selects the coordinate system to which the position is to be referenced. The following values can be set here:
- user = user coordinate system (origin left-above)
- pdf = PDF coordinate system (origin left-bottom)
point.setCoordinates(CoordinatesType.USER);
metrics (default value: “mm”)
The unit of measurement in which coordinates are to be specified. The following values can be set here:
- mm = millimeter
- px = Pixel
point.setMetrics(MetricsType.PX);
The “remove” object
You can remove an attachment from a document by adding an AttachmentType.Remove
object to the attachment
object.
AttachmentType.Remove remove = new AttachmentType.Remove(); attachment.setRemove(remove);
You can set the following parameters on the remove
object:
The “selection” object
To delete one or more attachments from the document, add one or more SelectionAttachmentType
objects to the remove
object.
SelectionAttachmentType selection = new SelectionAttachmentType(); remove.getSelection().add(selection);
The following parameters can be set on the selection
object:
pages (default value: „“)
Specifies the page area from which attachments are to be removed. You can specify either a single page („1“), a list of pages („1,3,5“), a page range („1-5“), or a combination of these elements („1,3-5,6“). All pages of the document can be selected using „*“.
selection.setPages("1,3-5,6");
context (default value: „all“)
Attachments can be embedded at document and page level. This value determines the level from which attachments are to be deleted. The following values can be set here:
- all = All levels
- document = Only from the document level
- page = Only from the page level
selection.setContext(ContextType.PAGE);
If document
is selected here, the value set for pages
has no effect.
fileMask (default value: „“)
The names of all attachments found in the selected area are checked against this mask and are either selected for deletion or excluded from deletion. The specification of wildcards is possible. For example, the mask "*.xls"
would delete all attachments with the extension "xls"
from the area. Direct selection of attachments with a certain file name is also possible. The mask "xyz.json"
would remove all attachments with exactly this name.
selection.setFileMask("*.xls");
The object „extract“
To extract one or more attachments from the document into a ZIP archive, add an AttachmentType.Extract
object(s) to the attachment
object.
AttachmentType.Extract extract = new AttachmentType.Extract(); attachment.setExtract(extract);
At the object selection
the following parameters can be set:
folderNameTemplate (default value: „page[%d]“)
A separate folder is created in the ZIP archive for each page from which attachments are extracted. This value determines the name of these folders, whereby the placeholder "%d"
is replaced by the page number and must be contained.
extract.setFolderNameTemplate("page[%d]");
The object „selection“
To extract one or more attachments from the document, add one or more SelectionAttachmentType
objects to the extract
object.
SelectionAttachmentType selection = new SelectionAttachmentType(); remove.getSelection().add(selection);
The following parameters can be set for the selection
object:
pages (default value: „“)
Specifies the page range from which attachments are to be extracted. You can specify either a single page (“1”), a list of pages (“1,3,5”), a page range (“1-5”), or a combination of these elements (“1,3-5,6”). All pages of the document can be selected using “*”.
selection.setPages("1,3-5,6");
context (default value: „all“)
Attachments can be embedded at document and page level. This value determines the level from which attachments are to be extracted. The following values can be set here:
- all = All levels
- document = Only from the document level
- page = Only from the page level
selection.setContext(ContextType.PAGE);
If document
is selected here, the value set for pages
has no effect.
fileMask (default value: „“)
The names of all attachments found in the selected area are checked against this mask and either selected for extraction or excluded from it. The specification of wildcards is possible. For example, the mask "*.xls"
would extract all attachments with the ending "xls"
from the area. Direct selection of attachments with a certain file name is also possible. The mask "xyz.json"
would extract all attachments with exactly this name.
selection.setFileMask("*.xls");
More detailed example for addressing the SOAP interface:
try ( // Setup of a session with the webPDF server (here SOAP): SoapSession session = SessionFactory.createInstance( WebServiceProtocol.SOAP, new URL("https://localhost:8080/webPDF/") ); // Make available the document to be processed // and the file in which the result is to be written: SoapDocument soapDocument = new SoapDocument( new File("Path of the source document").toURI(), new File("Path of the target document") ) ) { // Selection of the webservice via a factory: ToolboxWebService toolboxWebService = WebServiceFactory.createInstance( session, WebServiceType.TOOLBOX ); toolboxWebService.setDocument(soapDocument); toolboxWebService.getPassword().setOpen("password"); toolboxWebService.getPassword().setPermission("password"); AttachmentType attachment = new AttachmentType(); toolboxWebService.getOperation().add(attachment); AttachmentType.Add add = new AttachmentType.Add(); attachment.setAdd(add); FileAttachmentType file = new FileAttachmentType(); add.getFile().add(file); file.setFileName("xyz.json"); AttachmentFileDataType data = new AttachmentFileDataType(); data.setSource(FileDataSourceType.VALUE); data.setValue(FileUtils.readFileToByteArray(new File("…"))); FileAnnotationType annotation = new FileAnnotationType(); file.setAnnotation(annotation); annotation.setPage(1); annotation.setColor("#FFFFFF"); annotation.setOpacity(60); annotation.setIcon(IconsType.PUSH_PIN); annotation.setLockedPosition(false); annotation.setPopupText("Example popup text"); PointType point = new PointType(); annotation.setPoint(point); point.setX(15); point.setY(20); point.setCoordinates(CoordinatesType.USER); point.setMetrics(MetricsType.PX); // execution. toolboxWebService.process(); } catch (ResultException | MalformedURLException ex) { // To evaluate possible errors that may have occurred, the // wsclient library appropriate methods are available: }
More coding examples for webservices that you can use with the ws-client library can be found here.