The jobticket endpoint is an extension to radixPreflight. This endpoint allows to submit a jobticket (JSON) along with optional processing instructions.
Using this endpoints does not require the need to have prepared preflight profiles for checking and fixing.
A common use case is the preflighting of a print job against the job ticket information. The needed checks and fixups get generated automatically. In addition, certain checks and fixups can get applied for certain products (for example based on the uploaded product type).
The result is the processed PDF file along with various types of reports as well as an preview (all optional).
as calibrateFlow was replaced by radixAPI, we implemented this endpoint as legacy endpoint with the route:
POST /api/v1/workflows/legacy/jobticket/byLink
BODY application/json
JSON payload based on jobticket schema
For authentication, please see the documentation of radixAPI v1.
Use the the id of the returned reponse to get the status of the triggered workflow (former: task)
Deprecated: If you require the reponse in the legacy object model, use the query parameter showLegacy=true when performing a GET /api/v1/workflows/:id?showLegacy=true
This endpoint supports the methode byLink or byUpload
Create a new jobticket call
POST https://ppadev.calibrate.at/api/JobTickets/byLink
BODY application/json
JSON payload based on jobticket schema
or
POST https://ppadev.calibrate.at/api/JobTickets/byUpload
BODY form-data
form-data.task JSON payload
form-data.<fileid_1> binary
form-data.<fileid_2> binary
…
to trigger a preflight and corrections setup based on PDF, a minimum job ticket JSON looks like this. The file gets fetched from its S3 storage, the result is pushed to the defined S3 storage folder. The default preflight setup is for print ready PDF files with no special quality requirements.
{"ticket": {
"customAttributes": {
"printingMethod": "4C-druck"
},
"productList": [{
"isRoot": true,
"intent": {
"layoutIntent": {
"sides": "oneSided",
"spreadType": "singlePage",
"pages": 2,
"dimensions": [
300,
162
],
"bleed": 3
}
}
}],
"resourceList": [
{
"id": "inputfile",
"direction": "input",
"usage": "original",
"resourceVars": {
"uri": "s3://calibrateflow-demo/Testfiles/Flyer_A4.pdf"
}
}
]
}}
This is an optional element and is only required for special rules that need to get defined based on custom Attributes.
Example: name of PDF or industry standard a PDF file shall adher to.
List of product parts defining the parts intents. The required product ticket object is defined further down in this documentation.
This collection defines the required input file and output destination (optional).
Note: Only one input and one output item is currently supported.
the response is the same as when calling the task endpoint:
{
"name": "PortalTask",
"description": "Generated by JobTicketService",
"status": "waiting",
"completed": false,
"result": {},
"container": "5c8527d2ff80260057855dc5",
"callback": {
"url": "http://customer.callback.at"
},
"id": "5c8527d2d975bd0057399a18",
"processes": [
{
"processId": "portalPreflight",
"name": "profile",
"priority": 100,
"data": {
"reports": [
{
"type": "TEMPLATE",
"templatePath": {
"base": "$common",
"name": "Overview_STD"
},
"name": "$originalName_übersicht.pdf"
},
{
"type": "XML",
"id": "5c8527d2ff80260057855dc1"
}
],
"variables": [
{
"userPath": "/root/data/common/masterprofile/"
},
{
"homePath": "/root/data/common/masterprofile/",
"id": "5c8527d2ff80260057855dc4"
},
{
"pdf_t_b_template": "{\"id\":\"Portalworkflow\",\"base\":[],\"type\":\"standard\",\"name\":\"PDF/X-ready V1.4 requirements\",\"checks\":[{\"id\":\"iccBasedCmykOverprintOpm1\"},{\"id\":\"fontNameNotUtf8\"},{\"id\":\"fontNameWrongMasking\"},{\"id\":\"oiMissing\"},{\"id\":\"spotcolorNameNotUtf8\"},{\"id\":\"bppGt8\"},{\"id\":\"alternateImagePrinting\"},{\"id\":\"trueTypeEncodingInvalid\"},{\"id\":\"trueTypeDifferenceStandardEncoding\"},{\"id\":\"moreThanOneEncodingTrueType\"},{\"id\":\"cidGt\"},{\"id\":\"trappedKeyNotSet\",\"severity\":3},{\"id\":\"isEncrypted\",\"severity\":3},{\"id\":\"OutputIntentwithoutProfil\",\"severity\":3},{\"id\":\"OutputIntentMissing\",\"severity\":3},{\"id\":\"noPdfX\",\"severity\":3},{\"id\":\"interactiveFormfields\",\"severity\":3},{\"id\":\"deviceRgbTextLineart\",\"severity\":3},{\"id\":\"deviceRgbImage\",\"severity\":3},{\"id\":\"lzwCompression\",\"severity\":3},{\"id\":\"annotations\",\"severity\":3},{\"id\":\"fontWidthUnequal\",\"severity\":3},{\"id\":\"postscriptEmbedded\",\"severity\":3},{\"id\":\"transferCurve\",\"severity\":3},{\"id\":\"opi\",\"severity\":3},{\"id\":\"damaged\",\"severity\":3},{\"id\":\"security\",\"severity\":3},{\"id\":\"missingGlyph\",\"severity\":3},{\"id\":\"missingFont\",\"severity\":3},{\"id\":\"userScreeningSetting\",\"severity\":3},{\"id\":\"x\",\"name\":{\"en_US\":\"PDF/X Checks\",\"de_DE\":\"PDF/X Prüfungen\"},\"description\":{\"en_US\":\"all PDF/X relate4d checks, but not for a specific PDF/X-version\",\"de_DE\":\"alle PDF/X releavten Prüfungen, ausgenommen der spezifischen Prüfungen der einzelnen PDF/X Versionen\"}},{\"id\":\"alternateColorSpaceNotDevice\"},{\"id\":\"jpeg2000Used\"},{\"id\":\"iccBasedRgbTextLineart\",\"severity\":3},{\"id\":\"pageScaling\",\"severity\":3},{\"id\":\"calGrayTextLineart\",\"severity\":3},{\"id\":\"iccBasedGrayTextLineart\",\"severity\":3},{\"id\":\"iccBasedCmykTextLineart\",\"severity\":3},{\"id\":\"calGrayImage\",\"severity\":3},{\"id\":\"iccBasedGrayImage\",\"severity\":3},{\"id\":\"iccBasedCmykImage\",\"severity\":3},{\"id\":\"calRgbTextLineart\",\"severity\":3},{\"id\":\"labImage\",\"severity\":3},{\"id\":\"calRgbImage\",\"severity\":3},{\"id\":\"iccBasedRgbImage\",\"severity\":3},{\"id\":\"optionalContent\",\"severity\":3},{\"id\":\"transparencyUsed\",\"severity\":3},{\"id\":\"pdfVersionGt\",\"severity\":3,\"variables\":[{\"key\":\"version\",\"value\":1.4}]},{\"id\":\"x1a\"},{\"id\":\"fontInvalid\"},{\"id\":\"imageInvalid\"},{\"id\":\"oiMissingIcc\"},{\"id\":\"blendingCsCmykSoftmask\",\"severity\":3},{\"id\":\"oiPucv3\",\"severity\":1},{\"id\":\"oiPucNp\",\"severity\":1},{\"id\":\"oiPucv2\",\"severity\":1},{\"id\":\"oiPcv3\",\"severity\":1},{\"id\":\"oiPc330Np\",\"severity\":1},{\"id\":\"oiIcv2\",\"severity\":1},{\"id\":\"oiPc300Np\",\"severity\":1},{\"id\":\"oiIcv2300\",\"severity\":1},{\"id\":\"oiPxrUnknown\",\"severity\":2,\"variables\":[{\"key\":\"knowCustomOis\",\"value\":\"\"}]},{\"id\":\"oiPxrSheetfedUsDeprecated\",\"severity\":2},{\"id\":\"oiPxrSheetfedEciDeprecated\",\"severity\":2},{\"id\":\"oiPxrDeprecated\",\"severity\":2},{\"id\":\"oiPxrSheetfedOutdated\",\"severity\":2},{\"id\":\"oiPxrSheetfedUs\",\"severity\":1},{\"id\":\"oiPxrSheetfedEci\",\"severity\":1},{\"id\":\"oiPxrLargeGamut\",\"severity\":2},{\"id\":\"CropBoxNeMediaBox\",\"severity\":2},{\"id\":\"resolutionSingleImageLevel2\",\"severity\":1,\"variables\":[{\"key\":\"minRes\",\"value\":\"299.5\"},{\"key\":\"maxRes\",\"value\":\"449.5\"}]},{\"id\":\"resolutionSingleImageLevel1\",\"severity\":2,\"variables\":[{\"key\":\"minRes\",\"value\":\"299.5\"}]},{\"id\":\"BlackKonlyKnockoutLteFillText\",\"severity\":1,\"variables\":[{\"key\":\"size\",\"value\":\"11.94\"}]},{\"id\":\"spotColorsIdenticalAltanate\",\"severity\":3},{\"id\":\"deviceGrayOverprintStroke\",\"severity\":2},{\"id\":\"deviceGrayOverprintFill\",\"severity\":2},{\"id\":\"deviceGrayBlackOverprintLteStrokeText\",\"severity\":2,\"variables\":[{\"key\":\"size\",\"value\":\"11.94\"}]},{\"id\":\"deviceGrayBlackOverprintLteFillText\",\"severity\":2,\"variables\":[{\"key\":\"size\",\"value\":\"11.94\"}]},{\"id\":\"deviceGrayBlackKnockoutLteStrokeText\",\"severity\":2,\"variables\":[{\"key\":\"size\",\"value\":\"11.94\"}]},{\"id\":\"deviceGrayBlackKnockoutLteFillText\",\"severity\":2,\"variables\":[{\"key\":\"size\",\"value\":\"11.94\"}]},{\"id\":\"deviceGrayBlackOverprintGtStrokeText\",\"severity\":2,\"variables\":[{\"key\":\"size\",\"value\":\"11.95\"}]},{\"id\":\"deviceGrayBlackOverprintGtFillText\",\"severity\":2,\"variables\":[{\"key\":\"size\",\"value\":\"11.95\"}]},{\"id\":\"BlackKonlyKnockoutLteStrokeLineart\",\"severity\":2,\"variables\":[{\"key\":\"width\",\"value\":\"1.9994\"}]},{\"id\":\"deviceGrayBlackOverprintLteStrokeLineart\",\"severity\":2,\"variables\":[{\"key\":\"width\",\"value\":\"1.9994\"}]},{\"id\":\"deviceGrayBlackKnockoutLteStrokeLineart\",\"severity\":2,\"variables\":[{\"key\":\"width\",\"value\":\"1.9994\"}]},{\"id\":\"deviceGrayBlackOverprintGtStrokeLineart\",\"severity\":2,\"variables\":[{\"key\":\"width\",\"value\":\"1.9995\"}]},{\"id\":\"deviceGrayBlackOverprintFillLineart\",\"severity\":2},{\"id\":\"seperationAll\",\"severity\":2},{\"id\":\"minLineWidthSingleColor100pzt\",\"severity\":2,\"variables\":[{\"key\":\"width\",\"value\":\"0.124\"}]},{\"id\":\"minLineMultiColor\",\"severity\":2,\"variables\":[{\"key\":\"width\",\"value\":\"0.25\"}]},{\"id\":\"minTextSizeSingleColor\",\"severity\":2,\"variables\":[{\"key\":\"size\",\"value\":\"5\"}]},{\"id\":\"minTextSizeMultiColor\",\"severity\":2,\"variables\":[{\"key\":\"size\",\"value\":\"8\"}]},{\"id\":\"zeroPtLines\",\"severity\":2},{\"id\":\"rotation\",\"severity\":3},{\"id\":\"orientationUnequal\",\"severity\":3},{\"id\":\"richBlackTextLineartFill\",\"severity\":2},{\"id\":\"richBlackTextLineartStroke\",\"severity\":2},{\"id\":\"sizeOrientationUnequal\",\"severity\":2},{\"id\":\"Text400PztStroke\",\"severity\":2},{\"id\":\"Lineart400PztStroke\",\"severity\":2},{\"id\":\"Text400PztFill\",\"severity\":2},{\"id\":\"separatedBlackTextFill\",\"severity\":2},{\"id\":\"blendingCsCmyk\",\"severity\":3},{\"id\":\"Lineart400PztFill\",\"severity\":2},{\"id\":\"strokeTac\",\"severity\":2,\"variables\":[{\"key\":\"less\",\"value\":320}]},{\"id\":\"fillTac\",\"severity\":2,\"variables\":[{\"key\":\"less\",\"value\":320}]},{\"id\":\"whiteLineartStrokeOverprint\",\"severity\":2},{\"id\":\"whiteLineartFillOverprint\",\"severity\":2},{\"id\":\"whiteTextStrokeOverprint\",\"severity\":3},{\"id\":\"whiteTextFillOverprint\",\"severity\":3},{\"id\":\"BlackKonly100przKnockoutLteStrokeLineart\",\"severity\":2,\"variables\":[{\"key\":\"less\",\"value\":2}]},{\"id\":\"BlackKonly100przKnockoutLteFillText\",\"severity\":2,\"variables\":[{\"key\":\"size\",\"value\":12}]},{\"id\":\"spotcolorUsed\",\"severity\":1},{\"id\":\"tacAbove\",\"severity\":2,\"variables\":[{\"key\":\"maxTac\",\"value\":320},{\"key\":\"maxTacAperture\",\"value\":15}]},{\"id\":\"resolutionBitmapLevel3\",\"severity\":1,\"variables\":[{\"key\":\"maxRes\",\"value\":3600}]},{\"id\":\"resolutionBitmapLevel2\",\"severity\":1,\"variables\":[{\"key\":\"minRes\",\"value\":550},{\"key\":\"maxRes\",\"value\":800}]},{\"id\":\"resolutionBitmapLevel1\",\"severity\":2,\"variables\":[{\"key\":\"minRes\",\"value\":550}]},{\"id\":\"resolutionHalftoneLevel3\",\"severity\":1,\"variables\":[{\"key\":\"maxRes\",\"value\":750}]},{\"id\":\"resolutionHalftoneLevel2\",\"severity\":1,\"variables\":[{\"key\":\"minRes\",\"value\":200},{\"key\":\"maxRes\",\"value\":300}]},{\"id\":\"resolutionHalftoneLevel1\",\"severity\":2,\"variables\":[{\"key\":\"minRes\",\"value\":200}]},{\"id\":\"emptyPage\",\"severity\":1},{\"id\":\"spotCount\",\"severity\":2,\"variables\":[{\"key\":\"number\",\"value\":3}]},{\"id\":\"xReady\"},{\"id\":\"labTextLineart\",\"severity\":3}],\"fixups\":[]}",
"id": "5c8527d2ff80260057855dc2"
},
{
"template": "Portalworkflow",
"id": "5c8527d2ff80260057855dc3"
}
],
"options": [
"novariables",
"uncompressimg"
],
"arguments": [
{
"language": "de"
}
],
"id": "portalPreflight",
"profilePath": {
"base": "$common",
"name": "data/calibrate_masterProfile.kfpx"
}
},
"completed": false,
"status": "Waiting",
"result": {},
"children": [],
"resourceRefs": [
"inputfile"
],
"id": "5c8527d2d975bd0057399a19",
"taskId": "5c8527d2d975bd0057399a18"
}
],
"resources": [
{
"resourceId": "inputfile",
"name": "Flyer_A4.pdf",
"originalFilename": "Flyer_A4.pdf",
"direction": "input",
"pathType": "file",
"uri": "s3://calibrateflow-demo/Testfiles/Flyer_A4.pdf",
"usage": "original",
"container": "5c8527d2ff80260057855dc5",
"mimeType": "application/pdf",
"internalUrl": "https://ppa.calibrate.at/api/Containers/5c8527d2ff80260057855dc5/download/Flyer_A4.pdf",
"destinationUrl": "",
"size": 2361140,
"id": "5c8527d2d975bd0057399a1a",
"taskId": "5c8527d2d975bd0057399a18"
}
]
}
If the preflight process is know to the calling client, it is possible to pass this information as processList object:
"processList": [
{
"id": "portalPreflight",
"type":"preflight",
"processVars": {
"do": true,
"engine": "pdfTB",
"template":{
"id" : "Portalworkflow",
"base": [
"pdfxready_classic_checks"
]
}
}
}
It is further possible, to add additional check and fixups with variables.
As of now, the type of reports that are required have to be defined in a separate JSON file that can only be configured by calibrate staff. This will change in the near future.
This endpoint also supports uri definitions using Amazon S3 storage. For this to work, an AWS Key and secret must be defined (done by the calibrate staff).
Example: "uri": "s3://calibrateflow-demo/Testfiles/Flyer_A4.pdf"
If the destination files shall also get stored on S3 using a specific folder (which must exist), add the following object to the resourceList collection:
{
"id": "outputfile",
"direction": "output",
"usage": "processed",
"pathType": "folder",
"resourceVars": {
"uri": "s3://calibrate-test/generated/"
}
}
The ticket object is a JSON based job defintion, close to the xJDF syntax. A job ticket is required by certain named features like checkLayoutIntent or centerTrimBox.
The product ticket property allows to define a product with parts by intents, which represent the required product. This includes number of pages, size of printed sheets (open format), allowed separations and alike.
When working with a job ticket and the named features are activated for checking and fixing, the PDF gets modified and checked agains these intents.
As of now, a ticket can only defined single part products or multipart products that require a cover and a body.
{
"products": [
{
"id": "<id>",
"isRoot": true,
"productType": "",
"productTypeDetails": "",
"descriptiveName": "",
"amount": 0,
"intent": {
"layoutIntent": {},
"colorIntent": {},
"mediaIntent": {},
"bindingIntent": {},
"foldingIntent": {},
"holeMakingIntent": {},
"processingStepsIntent": {}
}
}
],
"currentFileProductRefId": "<id>"
}
required (object)
a collection of Products
Note: at the moment only one (1) or three (3) products shall be defined. Three products are required for a multipart production. In that case, the first product defines the overall product like Book or Booklet with the required binding intent. Product two (2) defines the Cover part and product three (3) defines the Body part.
optional (string)
If the ticket defines a multpart product and the file being process is for a specific product part, then this property shall define the id of this product part.
required (string)
a unique string that identifies this product
optional (boolean)
Shall be defined as true for the first part of a multipart product.
required (enum):
optional (string)
a more descriptive name of the product part
optional (string)
a more descriptive name of the product
optional (integer)
the total number of parts to be produced
{
"sides": "OneSided",
"spreadType": "SinglePage",
"pages": 2,
"dimensions": {
"width": 300,
"height": 100
},
"finishedDimensions": {
"width": 300,
"height": 100,
"depth": 0
},
"bleed": { // object or float
"left": 3,
"right": 3,
"top": 3,
"bottom": 3
}
}
required (object)
Dimension of the printed product (open) before folding, without bleed.
NOTE:
required (object)
Dimension of the final printed product (closed) after folding. If this productType is a Cover for a softcover binding, then the optional depth value defines the spine width
NOTE: For folded products (and some covers), this value differes from the values of dimensions if spreadType is Spread
required (integer)
Number of created surfaces (value SHALL be a multiple of 2).
NOTE:
required (object or float or string)
possible types:
float
string "" or "<bleed_left> <bleed_bottom> <bleed_right> <bleed_top>"
object: "bleed":
Defines the requires bleed. When defined as object, the values for each edge can be different. If a value of -1 is defined, the PDFs bleed get calculated as the difference of BleedBox and TrimBox
Note: if checking of bleed is ordered, the values of spreadType and pages are used to decide if bleed is checked on both sides, left and right, or only one on the outer side side (for multipage products like booklet or books).
required (enum)
Defines the sides of the subtrate surface to be printed on (also refered to as simplex ot duplex printing).
One of the following values
required (enum)
One of the following values
Note
If a product is required to be produced as spread (e.g. Cover or Brochure), a value of Spread shall be used and dimensions shall define the spread's size.
"colorIntent": {
"surfaceColorFront": {
"colorsUsed": [
"Cyan",
"Magenta",
"Yellow",
"Black",
"Spot1"
],
"printStandard": "FOGRA51"
},
"surfaceColorBack": {
"colorsUsed": [
"Black"
],
"printStandard": "FOGRA52"
}
}
optional (object)
Defines the expected separations for each surface of a printed product sheet. If not defined, all separations are allowed.
required (collection of string)
Collection of strings representing the expected separations. All colors except Cyan, Magenta, Yellow and Black are considered as Spot colors.
If spot colors are allowed, but their name is unknown, use the placeholder name Spot1 (Spot2, …)
If no separations are defined, this side of the surface will be treaded as a required empty pages (layoutIntent.sides == TwoSidedHeadToHead)
Spot colors used for processing steps will be supported in future versions. However, they are treated as regular printing colors at the moment.
Defines the used printing standard based on the characterisation data. It is used to define the destination profile for any color conversion.
If no printStandard is defined but a color conversion is requires, a default will be used based on the colorconversion defaults (FOGRA39).
optional (enum) - Default: FOGRA39
Defines the substrate to be printed on.
"mediaIntent": {
"isoPaperSubstrate": "PS1",
"backIsoPaperSubstrate": "PS2",
"mediaType": "Paper",
"thickness": 94,
"weight": 115
}
required (enum)
optional (enum) - Default: PS1
only, if different from isoPaperSubstrate
optional (number)
Paper thickness in microns
optional (number)
Paper weight in g/m
Defines the binding for this product. Only required, if product is bound and if folding marks and spine marks shall be drawn (by the named feature createLegend)
"bindingIntent": {
"bindingType": "SaddleStitch",
"bindingOrder": "Collect",
"bindingSide": "Left",
"childRefs": [
"cover",
"content"
],
"hardCoverBindin": {
"jacketFoldingWidth": 100,
"jointWidth": 3
},
"softCoverBinding": {
"foldingWidth": 100,
"foldingWidthBack": 80,
"jointWidth": 3
}
}
required (enum) - Default: None
optional (enum) - Default: Left
optional (enum) - Default: None
optional (collection of string)
If the ticket defines a multpart product, then the part with isRoot == true shall list the id's of the two other product parts that belong to this product. The order shall be Jacket , Cover, EndSheet (front), Body and EndSheet (back) - only defined really used parts.
Distance of the left and right folds of the jacket. This value gets used to draw the folding lines for vizualization.
Distance of the joint left and right of the spine for a hardcover cover. This distance gets used when vizualising the spine and when drawing the secutiry distance for the first and last page of a books body.
Contains properties, requried for soft cover binding visulaization
Distance of the joint left and right of the spine for a softcover cover. This distance gets used when vizualising the spine and when drawing the secutiry distance for the first and last page of a books body.
Distance of the fold on the front cover page.
Distance of the fold on the back cover page. If not specified, FoldingWidthBack reverts to FoldingWidth.
Defines the folding of the product. Only required, if product is folded and if folding marks shall be drawn (by the named feature createLegend)
"foldingIntent": {
"foldCatalog": "F4-2",
"foldingDetails": "left"
}
optional (string) - Default: F2-1 (not folded)
In the future, the JDF folding catalog will get supported
It is posible to define a custom fold scheme catalog value.
Example: right angle half fold
{
"foldCatalog": "d1/2_+d1/2"
}
optional (string) - Default: left
Allows to defined the start of the fold (left or front) and any required travel values (size reduction for inner folds)
Example: portrait Trifold with 3pt travel (inner page is reduced by 3pt)
{
"foldCatalog": "d1/3_d1/3",
"foldingDetails": "front_3_0"
}
Defines the holes of the product.
Only required, if product the holes shall be drawn (by the named feature createLegend or addGrommets).
The drawn drill hole is defined in 100% Magenta and has the spot color name "drillhole"
"holeMakingIntent": {
"holePatternBottom": {
"shape": "Round",
"pitch": 0,
"extend": {
"width": 0.375,
"height": 0
},
"center": {
"x": 0.5,
"y": 0.27
},
"pattern": "R3i-generic"
}
}
For each edge a holePattern object can be defined.
Defines the shape of the mark to be placed.
If shape="Round"
then the svg located at {homePath}/marks/DrillHole.svg
will be used as mark.
At the moment only the shape "Round" is supported.
Defines the distance between two adjacent holes.
This property must be defined if not specified in pattern
.
Defines the size of the mark.
For round marks the width specifies the diameter of the holes.
Defines the position of the first hole.
For holePatternLeft and holePatternRight the reference corner is bottom.
For holePatternTop and holePatternBottom the reference corner is left.
The definition of a pattern is based on the xJDF pattern of holePattern.
Currently, the following patterns are supported:
R3i-generic
shape="Round"
R1i-generic
If only one hole is defined and center.x = 0
, it will be placed in the center of the specified edge.