mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2025-11-16 01:21:16 +01:00
Merge 20697b9987 into 5c9e590856
This commit is contained in:
commit
3a9dc1ede1
@ -38,6 +38,7 @@ public class GeneralUtils {
|
|||||||
Set.of(
|
Set.of(
|
||||||
"OCR images.json",
|
"OCR images.json",
|
||||||
"Prepare-pdfs-for-email.json",
|
"Prepare-pdfs-for-email.json",
|
||||||
|
"Pre-publish-sanitization.json",
|
||||||
"split-rotate-auto-rename.json");
|
"split-rotate-auto-rename.json");
|
||||||
|
|
||||||
private final String DEFAULT_WEBUI_CONFIGS_DIR = "defaultWebUIConfigs";
|
private final String DEFAULT_WEBUI_CONFIGS_DIR = "defaultWebUIConfigs";
|
||||||
|
|||||||
@ -0,0 +1,54 @@
|
|||||||
|
{
|
||||||
|
"name": "Pre-publish-sanitization",
|
||||||
|
"pipeline": [
|
||||||
|
{
|
||||||
|
"operation": "/api/v1/security/sanitize-pdf",
|
||||||
|
"parameters": {
|
||||||
|
"removeJavaScript": true,
|
||||||
|
"removeEmbeddedFiles": true,
|
||||||
|
"removeXMPMetadata": true,
|
||||||
|
"removeMetadata": true,
|
||||||
|
"removeLinks": true,
|
||||||
|
"removeFonts": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"operation": "/api/v1/misc/flatten",
|
||||||
|
"parameters": {
|
||||||
|
"flattenOnlyForms": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"operation": "/api/v1/general/remove-annotations",
|
||||||
|
"parameters": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"operation": "/api/v1/misc/update-metadata",
|
||||||
|
"parameters": {
|
||||||
|
"deleteAll": true,
|
||||||
|
"author": "",
|
||||||
|
"creationDate": "",
|
||||||
|
"creator": "",
|
||||||
|
"keywords": "",
|
||||||
|
"modificationDate": "",
|
||||||
|
"producer": "",
|
||||||
|
"subject": "",
|
||||||
|
"title": "",
|
||||||
|
"trapped": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"operation": "/api/v1/misc/compress-pdf",
|
||||||
|
"parameters": {
|
||||||
|
"optimizeLevel": 3,
|
||||||
|
"expectedOutputSize": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_examples": {
|
||||||
|
"outputDir": "{outputFolder}/{folderName}",
|
||||||
|
"outputFileName": "{filename}-{pipelineName}-{date}-{time}"
|
||||||
|
},
|
||||||
|
"outputDir": "{outputFolder}",
|
||||||
|
"outputFileName": "pre_publish_{filename}.PDF"
|
||||||
|
}
|
||||||
@ -4619,7 +4619,9 @@
|
|||||||
"secureWorkflow": "Security Workflow",
|
"secureWorkflow": "Security Workflow",
|
||||||
"secureWorkflowDesc": "Secures PDF documents by removing potentially malicious content like JavaScript and embedded files, then adds password protection to prevent unauthorised access. Password is set to 'password' by default.",
|
"secureWorkflowDesc": "Secures PDF documents by removing potentially malicious content like JavaScript and embedded files, then adds password protection to prevent unauthorised access. Password is set to 'password' by default.",
|
||||||
"processImages": "Process Images",
|
"processImages": "Process Images",
|
||||||
"processImagesDesc": "Converts multiple image files into a single PDF document, then applies OCR technology to extract searchable text from the images."
|
"processImagesDesc": "Converts multiple image files into a single PDF document, then applies OCR technology to extract searchable text from the images.",
|
||||||
|
"prePublishSanitization": "Pre-publish Sanitization",
|
||||||
|
"prePublishSanitizationDesc": "Sanitization workflow that removes all hidden metadata, JavaScript, embedded files, annotations, and flattens forms to prevent data leakage before publishing PDFs online."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import { SPLIT_METHODS } from '@app/constants/splitConstants';
|
|||||||
const CompressIcon = () => React.createElement(LocalIcon, { icon: 'compress', width: '1.5rem', height: '1.5rem' });
|
const CompressIcon = () => React.createElement(LocalIcon, { icon: 'compress', width: '1.5rem', height: '1.5rem' });
|
||||||
const SecurityIcon = () => React.createElement(LocalIcon, { icon: 'security', width: '1.5rem', height: '1.5rem' });
|
const SecurityIcon = () => React.createElement(LocalIcon, { icon: 'security', width: '1.5rem', height: '1.5rem' });
|
||||||
const StarIcon = () => React.createElement(LocalIcon, { icon: 'star', width: '1.5rem', height: '1.5rem' });
|
const StarIcon = () => React.createElement(LocalIcon, { icon: 'star', width: '1.5rem', height: '1.5rem' });
|
||||||
|
const PrivacyIcon = () => React.createElement(LocalIcon, { icon: 'shield-lock', width: '1.5rem', height: '1.5rem' });
|
||||||
|
|
||||||
export function useSuggestedAutomations(): SuggestedAutomation[] {
|
export function useSuggestedAutomations(): SuggestedAutomation[] {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
@ -67,6 +68,63 @@ export function useSuggestedAutomations(): SuggestedAutomation[] {
|
|||||||
updatedAt: now,
|
updatedAt: now,
|
||||||
icon: SecurityIcon,
|
icon: SecurityIcon,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: "pre-publish-sanitization",
|
||||||
|
name: t("automation.suggested.prePublishSanitization", "Pre-publish Sanitization"),
|
||||||
|
description: t("automation.suggested.prePublishSanitizationDesc", "Sanitization workflow that removes all hidden metadata, JavaScript, embedded files, annotations, and flattens forms to prevent data leakage before publishing PDFs online."),
|
||||||
|
operations: [
|
||||||
|
{
|
||||||
|
operation: "sanitize",
|
||||||
|
parameters: {
|
||||||
|
removeJavaScript: true,
|
||||||
|
removeEmbeddedFiles: true,
|
||||||
|
removeXMPMetadata: true,
|
||||||
|
removeMetadata: true,
|
||||||
|
removeLinks: true,
|
||||||
|
removeFonts: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
operation: "flatten",
|
||||||
|
parameters: {
|
||||||
|
flattenOnlyForms: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
operation: "removeAnnotations",
|
||||||
|
parameters: {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
operation: "changeMetadata",
|
||||||
|
parameters: {
|
||||||
|
deleteAll: true,
|
||||||
|
author: '',
|
||||||
|
creationDate: '',
|
||||||
|
creator: '',
|
||||||
|
keywords: '',
|
||||||
|
modificationDate: '',
|
||||||
|
producer: '',
|
||||||
|
subject: '',
|
||||||
|
title: '',
|
||||||
|
trapped: '',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
operation: "compress",
|
||||||
|
parameters: {
|
||||||
|
compressionLevel: 3,
|
||||||
|
grayscale: false,
|
||||||
|
expectedSize: '',
|
||||||
|
compressionMethod: 'quality',
|
||||||
|
fileSizeValue: '',
|
||||||
|
fileSizeUnit: 'MB',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
],
|
||||||
|
createdAt: now,
|
||||||
|
updatedAt: now,
|
||||||
|
icon: PrivacyIcon,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: "email-preparation",
|
id: "email-preparation",
|
||||||
name: t("automation.suggested.emailPreparation", "Email Preparation"),
|
name: t("automation.suggested.emailPreparation", "Email Preparation"),
|
||||||
|
|||||||
@ -40,6 +40,7 @@ export const buildChangeMetadataFormData = (parameters: ChangeMetadataParameters
|
|||||||
|
|
||||||
// Custom metadata - backend expects them as values to 'allRequestParams[customKeyX/customValueX]'
|
// Custom metadata - backend expects them as values to 'allRequestParams[customKeyX/customValueX]'
|
||||||
let keyNumber = 0;
|
let keyNumber = 0;
|
||||||
|
if (parameters.customMetadata && Array.isArray(parameters.customMetadata)) {
|
||||||
parameters.customMetadata.forEach((entry) => {
|
parameters.customMetadata.forEach((entry) => {
|
||||||
if (entry.key.trim() && entry.value.trim()) {
|
if (entry.key.trim() && entry.value.trim()) {
|
||||||
keyNumber += 1;
|
keyNumber += 1;
|
||||||
@ -47,6 +48,7 @@ export const buildChangeMetadataFormData = (parameters: ChangeMetadataParameters
|
|||||||
formData.append(`allRequestParams[customValue${keyNumber}]`, entry.value.trim());
|
formData.append(`allRequestParams[customValue${keyNumber}]`, entry.value.trim());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return formData;
|
return formData;
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user