mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-08-26 22:29:24 +00:00

# Description of Changes <!-- Please provide a summary of the changes, including: - What was changed - Why the change was made - Any challenges encountered Closes #(issue_number) --> --- ## Checklist ### General - [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md) (if applicable) - [ ] I have performed a self-review of my own code - [ ] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md#6-testing) for more details. --------- Co-authored-by: ConnorYoh <40631091+ConnorYoh@users.noreply.github.com>
195 lines
6.5 KiB
TypeScript
195 lines
6.5 KiB
TypeScript
import { useMemo } from 'react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import React from 'react';
|
|
import LocalIcon from '../../../components/shared/LocalIcon';
|
|
import { SuggestedAutomation } from '../../../types/automation';
|
|
|
|
// Create icon components
|
|
const CompressIcon = () => React.createElement(LocalIcon, { icon: 'compress', width: '1.5rem', height: '1.5rem' });
|
|
const TextFieldsIcon = () => React.createElement(LocalIcon, { icon: 'text-fields', 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' });
|
|
|
|
export function useSuggestedAutomations(): SuggestedAutomation[] {
|
|
const { t } = useTranslation();
|
|
|
|
const suggestedAutomations = useMemo<SuggestedAutomation[]>(() => {
|
|
const now = new Date().toISOString();
|
|
return [
|
|
{
|
|
id: "secure-pdf-ingestion",
|
|
name: t("automation.suggested.securePdfIngestion", "Secure PDF Ingestion"),
|
|
description: t("automation.suggested.securePdfIngestionDesc", "Comprehensive PDF processing workflow that sanitizes documents, applies OCR with cleanup, converts to PDF/A format for long-term archival, and optimizes file size."),
|
|
operations: [
|
|
{
|
|
operation: "sanitize",
|
|
parameters: {
|
|
removeJavaScript: true,
|
|
removeEmbeddedFiles: true,
|
|
removeXMPMetadata: true,
|
|
removeMetadata: true,
|
|
removeLinks: false,
|
|
removeFonts: false,
|
|
}
|
|
},
|
|
{
|
|
operation: "ocr",
|
|
parameters: {
|
|
languages: ['eng'],
|
|
ocrType: 'skip-text',
|
|
ocrRenderType: 'hocr',
|
|
additionalOptions: ['clean', 'cleanFinal'],
|
|
}
|
|
},
|
|
{
|
|
operation: "convert",
|
|
parameters: {
|
|
fromExtension: 'pdf',
|
|
toExtension: 'pdfa',
|
|
pdfaOptions: {
|
|
outputFormat: 'pdfa-1',
|
|
}
|
|
}
|
|
},
|
|
{
|
|
operation: "compress",
|
|
parameters: {
|
|
compressionLevel: 5,
|
|
grayscale: false,
|
|
expectedSize: '',
|
|
compressionMethod: 'quality',
|
|
fileSizeValue: '',
|
|
fileSizeUnit: 'MB',
|
|
}
|
|
}
|
|
],
|
|
createdAt: now,
|
|
updatedAt: now,
|
|
icon: SecurityIcon,
|
|
},
|
|
{
|
|
id: "email-preparation",
|
|
name: t("automation.suggested.emailPreparation", "Email Preparation"),
|
|
description: t("automation.suggested.emailPreparationDesc", "Optimizes PDFs for email distribution by compressing files, splitting large documents into 20MB chunks for email compatibility, and removing metadata for privacy."),
|
|
operations: [
|
|
{
|
|
operation: "compress",
|
|
parameters: {
|
|
compressionLevel: 5,
|
|
grayscale: false,
|
|
expectedSize: '',
|
|
compressionMethod: 'quality',
|
|
fileSizeValue: '',
|
|
fileSizeUnit: 'MB',
|
|
}
|
|
},
|
|
{
|
|
operation: "splitPdf",
|
|
parameters: {
|
|
mode: 'bySizeOrCount',
|
|
pages: '',
|
|
hDiv: '1',
|
|
vDiv: '1',
|
|
merge: false,
|
|
splitType: 'size',
|
|
splitValue: '20MB',
|
|
bookmarkLevel: '1',
|
|
includeMetadata: false,
|
|
allowDuplicates: false,
|
|
}
|
|
},
|
|
{
|
|
operation: "sanitize",
|
|
parameters: {
|
|
removeJavaScript: false,
|
|
removeEmbeddedFiles: false,
|
|
removeXMPMetadata: true,
|
|
removeMetadata: true,
|
|
removeLinks: false,
|
|
removeFonts: false,
|
|
}
|
|
}
|
|
],
|
|
createdAt: now,
|
|
updatedAt: now,
|
|
icon: CompressIcon,
|
|
},
|
|
{
|
|
id: "secure-workflow",
|
|
name: t("automation.suggested.secureWorkflow", "Security Workflow"),
|
|
description: t("automation.suggested.secureWorkflowDesc", "Secures PDF documents by removing potentially malicious content like JavaScript and embedded files, then adds password protection to prevent unauthorized access."),
|
|
operations: [
|
|
{
|
|
operation: "sanitize",
|
|
parameters: {
|
|
removeJavaScript: true,
|
|
removeEmbeddedFiles: true,
|
|
removeXMPMetadata: false,
|
|
removeMetadata: false,
|
|
removeLinks: false,
|
|
removeFonts: false,
|
|
}
|
|
},
|
|
{
|
|
operation: "addPassword",
|
|
parameters: {
|
|
password: 'password',
|
|
ownerPassword: '',
|
|
keyLength: 128,
|
|
permissions: {
|
|
preventAssembly: false,
|
|
preventExtractContent: false,
|
|
preventExtractForAccessibility: false,
|
|
preventFillInForm: false,
|
|
preventModify: false,
|
|
preventModifyAnnotations: false,
|
|
preventPrinting: false,
|
|
preventPrintingFaithful: false,
|
|
}
|
|
}
|
|
}
|
|
],
|
|
createdAt: now,
|
|
updatedAt: now,
|
|
icon: SecurityIcon,
|
|
},
|
|
{
|
|
id: "process-images",
|
|
name: t("automation.suggested.processImages", "Process Images"),
|
|
description: t("automation.suggested.processImagesDesc", "Converts multiple image files into a single PDF document, then applies OCR technology to extract searchable text from the images."),
|
|
operations: [
|
|
{
|
|
operation: "convert",
|
|
parameters: {
|
|
fromExtension: 'image',
|
|
toExtension: 'pdf',
|
|
imageOptions: {
|
|
colorType: 'color',
|
|
dpi: 300,
|
|
singleOrMultiple: 'multiple',
|
|
fitOption: 'maintainAspectRatio',
|
|
autoRotate: true,
|
|
combineImages: true,
|
|
}
|
|
}
|
|
},
|
|
{
|
|
operation: "ocr",
|
|
parameters: {
|
|
languages: ['eng'],
|
|
ocrType: 'skip-text',
|
|
ocrRenderType: 'hocr',
|
|
additionalOptions: [],
|
|
}
|
|
}
|
|
],
|
|
createdAt: now,
|
|
updatedAt: now,
|
|
icon: StarIcon,
|
|
},
|
|
];
|
|
}, [t]);
|
|
|
|
return suggestedAutomations;
|
|
}
|