org.sejda.cli.command.StandardCliCommand Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sejda-console Show documentation
Show all versions of sejda-console Show documentation
The sejda-console is a shell interface for Sejda to perform pdf manipulation tasks such as merge or split through the command line.
/*
* Created on Jul 22, 2011
* Copyright 2010 by Eduard Weissmann ([email protected]).
*
* This file is part of the Sejda source code
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
package org.sejda.cli.command;
import org.sejda.cli.model.AddBackPagesTaskCliArguments;
import org.sejda.cli.model.AlternateMixTaskCliArguments;
import org.sejda.cli.model.AttachmentsCollectionTaskCliArguments;
import org.sejda.cli.model.CombineReorderTaskCliArguments;
import org.sejda.cli.model.DecryptTaskCliArguments;
import org.sejda.cli.model.EncryptTaskCliArguments;
import org.sejda.cli.model.ExtractByBookmarksTaskCliArguments;
import org.sejda.cli.model.ExtractPagesTaskCliArguments;
import org.sejda.cli.model.MergeTaskCliArguments;
import org.sejda.cli.model.PdfToJpegTaskCliArguments;
import org.sejda.cli.model.PdfToMultipleTiffTaskCliArguments;
import org.sejda.cli.model.PdfToPngTaskCliArguments;
import org.sejda.cli.model.PdfToSingleTiffTaskCliArguments;
import org.sejda.cli.model.RotateTaskCliArguments;
import org.sejda.cli.model.ScaleTaskCliArguments;
import org.sejda.cli.model.SetHeaderFooterTaskCliArguments;
import org.sejda.cli.model.SetMetadataTaskCliArguments;
import org.sejda.cli.model.SetPageLabelsTaskCliArguments;
import org.sejda.cli.model.SetPageTransitionsTaskCliArguments;
import org.sejda.cli.model.SimpleSplitTaskCliArguments;
import org.sejda.cli.model.SplitByBookmarksTaskCliArguments;
import org.sejda.cli.model.SplitByEveryXPagesTaskCliArguments;
import org.sejda.cli.model.SplitByPagesTaskCliArguments;
import org.sejda.cli.model.SplitBySizeTaskCliArguments;
import org.sejda.cli.model.TaskCliArguments;
import org.sejda.cli.model.UnpackTaskCliArguments;
import org.sejda.cli.model.ViewerPreferencesTaskCliArguments;
import org.sejda.cli.model.WatermarkTaskCliArguments;
import org.sejda.cli.transformer.AddBackPagesCliArgumentsTransformer;
import org.sejda.cli.transformer.AlternateMixCliArgumentsTransformer;
import org.sejda.cli.transformer.AttachmentsCollectionCliArgumentsTransformer;
import org.sejda.cli.transformer.CombineReorderCliArgumentsTransformer;
import org.sejda.cli.transformer.CommandCliArgumentsTransformer;
import org.sejda.cli.transformer.DecryptCliArgumentsTransformer;
import org.sejda.cli.transformer.EncryptCliArgumentsTransformer;
import org.sejda.cli.transformer.ExtractByBookmarksCliArgumentsTransformer;
import org.sejda.cli.transformer.ExtractPagesCliArgumentsTransformer;
import org.sejda.cli.transformer.MergeCliArgumentsTransformer;
import org.sejda.cli.transformer.PdfToJpegCliArgumentsTransformer;
import org.sejda.cli.transformer.PdfToMultipleTiffCliArgumentsTransformer;
import org.sejda.cli.transformer.PdfToPngCliArgumentsTransformer;
import org.sejda.cli.transformer.PdfToSingleTiffCliArgumentsTransformer;
import org.sejda.cli.transformer.RotateCliArgumentsTransformer;
import org.sejda.cli.transformer.ScaleCliArgumentsTransformer;
import org.sejda.cli.transformer.SetHeaderFooterCliArgumentsTransformer;
import org.sejda.cli.transformer.SetMetadataCliArgumentsTransformer;
import org.sejda.cli.transformer.SetPageLabelsCliArgumentsTransformer;
import org.sejda.cli.transformer.SetPageTransitionsCliArgumentsTransformer;
import org.sejda.cli.transformer.SimpleSplitCliArgumentsTransformer;
import org.sejda.cli.transformer.SplitByBookmarksCliArgumentsTransformer;
import org.sejda.cli.transformer.SplitByEveryXPagesCliArgumentsTransformer;
import org.sejda.cli.transformer.SplitByPagesCliArgumentsTransformer;
import org.sejda.cli.transformer.SplitBySizeCliArgumentsTransformer;
import org.sejda.cli.transformer.UnpackCliArgumentsTransformer;
import org.sejda.cli.transformer.ViewerPreferencesCliArgumentsTransformer;
import org.sejda.cli.transformer.WatermarkCliArgumentsTransformer;
import org.sejda.model.parameter.AddBackPagesParameters;
import org.sejda.model.parameter.AlternateMixMultipleInputParameters;
import org.sejda.model.parameter.AttachmentsCollectionParameters;
import org.sejda.model.parameter.CombineReorderParameters;
import org.sejda.model.parameter.DecryptParameters;
import org.sejda.model.parameter.EncryptParameters;
import org.sejda.model.parameter.ExtractByOutlineParameters;
import org.sejda.model.parameter.ExtractPagesParameters;
import org.sejda.model.parameter.MergeParameters;
import org.sejda.model.parameter.RotateParameters;
import org.sejda.model.parameter.ScaleParameters;
import org.sejda.model.parameter.SetHeaderFooterParameters;
import org.sejda.model.parameter.SetMetadataParameters;
import org.sejda.model.parameter.SetPagesLabelParameters;
import org.sejda.model.parameter.SetPagesTransitionParameters;
import org.sejda.model.parameter.SimpleSplitParameters;
import org.sejda.model.parameter.SplitByEveryXPagesParameters;
import org.sejda.model.parameter.SplitByOutlineLevelParameters;
import org.sejda.model.parameter.SplitByPagesParameters;
import org.sejda.model.parameter.SplitBySizeParameters;
import org.sejda.model.parameter.UnpackParameters;
import org.sejda.model.parameter.ViewerPreferencesParameters;
import org.sejda.model.parameter.WatermarkParameters;
import org.sejda.model.parameter.base.TaskParameters;
import org.sejda.model.parameter.image.PdfToJpegParameters;
import org.sejda.model.parameter.image.PdfToMultipleTiffParameters;
import org.sejda.model.parameter.image.PdfToPngParameters;
import org.sejda.model.parameter.image.PdfToSingleTiffParameters;
/**
* Enumeration of commands supported through the standard version of the sejda-console
*
* @author Eduard Weissmann
*
*/
public enum StandardCliCommand implements CliCommand {
DECRYPT("decrypt", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new DecryptCliArgumentsTransformer();
}
}, "Given a collection of encrypted PDF documents and their owner password, creates a decrypted version of each of them.", "decrypt -f /tmp/file1.pdf:secret123 -o /tmp -p decrypted_"),
ENCRYPT("encrypt", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new EncryptCliArgumentsTransformer();
}
}, "Given a collection of PDF documents, applies the selected permission using the selected encryption algorithm and the provided owner and user password.", "encrypt -f /tmp/file1.pdf -o /tmp -u secret123 -a top-secret123 --allow print fill -e aes_128 -p encrypted_"),
ROTATE("rotate", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new RotateCliArgumentsTransformer();
}
}, "Apply page rotation to a collection of PDF documents. Rotation can be applied to a specified set of pages or to a predefined set (all, even pages, odd pages).", "rotate -f /tmp/file1.pdf -o /tmp -r 180 -m all"),
SET_VIEWER_PREFERENCES("setviewerpreferences", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new ViewerPreferencesCliArgumentsTransformer();
}
}, "Given a collection of PDF documents, applies the selected viewer preferences.", "setviewerpreferences -f /tmp/file1.pdf -o /tmp --centerWindow --displayDocTitle --fitWindow --hideMenu --hideToolbar --hideWindowUI --layout onecolumn --mode fullscreen --nfsMode nfsthumbs"),
ALTERNATE_MIX("alternatemix", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new AlternateMixCliArgumentsTransformer();
}
}, "Given two PDF documents, creates a single output PDF document taking pages alternatively from the two input. Pages can be taken in straight or reverse order and using a configurable step (number of pages before the process switch from a document to the other).", "alternatemix -f /tmp/file1.pdf /tmp/file2.pdf -o /tmp/output.pdf --reverseSecond"),
UNPACK("unpack", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new UnpackCliArgumentsTransformer();
}
}, "Unpacks all the attachments of a given collection of PDF documents.", "unpack -f /tmp/file1.pdf -o /tmp"),
MERGE("merge", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new MergeCliArgumentsTransformer();
}
}, "Given a collection of PDF documents, creates a single output PDF document composed by the selected pages of each input document taken in the given order.", "merge -f /tmp/file1.pdf /tmp/file2.pdf -o /tmp/output.pdf -s all:12-14:32,12-14,4,34-:"),
SPLIT_BY_BOOKMARKS("splitbybookmarks", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new SplitByBookmarksCliArgumentsTransformer();
}
}, "Splits a given PDF document before each page that is a destination in the document outline (bookmarks) at the specified level (optionally matching a provided regular expression).", "splitbybookmarks -f /tmp/file1.pdf -o /tmp -l 2 -e \".+(Chapter)+.+\""),
SPLIT_BY_SIZE("splitbysize", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new SplitBySizeCliArgumentsTransformer();
}
}, "Splits a given PDF document in files of the selected size (roughly).", "splitbysize -f /tmp/file1.pdf -o /tmp -s 10000"),
SPLIT_BY_PAGES("splitbypages", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new SplitByPagesCliArgumentsTransformer();
}
}, "Splits a given PDF document after each one of the selected page numbers.", "splitbypages -f /tmp/file1.pdf -o /tmp -n 1 3 5 99"),
SPLIT_BY_EVERY("splitbyevery", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new SplitByEveryXPagesCliArgumentsTransformer();
}
}, "Splits a given PDF document every 'n' pages creating documents of 'n' pages each.", "splitbyevery -f /tmp/file1.pdf -o /tmp -n 2"),
SIMPLE_SPLIT("simplesplit", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new SimpleSplitCliArgumentsTransformer();
}
}, "Splits a given PDF document at a predefined set of page numbers (all, odd pages, even pages).", "simplesplit -f /tmp/file1.pdf -o /tmp -s odd"),
EXTRACT_BY_BOOKMARKS("extractbybookmarks", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new ExtractByBookmarksCliArgumentsTransformer();
}
}, "Extracts chapters to separate documents based on the bookmarks in the outline at a given level (optionally filtered by a given regex).", "extractbybookmarks -f /tmp/file1.pdf -o /tmp -l 2 -e \".+(Chapter)+.+\""),
EXTRACT_PAGES("extractpages", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new ExtractPagesCliArgumentsTransformer();
}
}, "Extracts pages from a PDF document creating a new one containing only the selected pages. Page selection can be done using a predefined set of pages (odd, even) or as a set of ranges (from page x to y).", "extractpages -f /tmp/file1.pdf -o /tmp -s 1-4,7,12-14,8,20-"),
SET_METADATA("setmetadata", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new SetMetadataCliArgumentsTransformer();
}
}, "Sets metadata (title, author, subject, keywords) to an input PDF document.", "setmetadata -f /tmp/file1.pdf -o /tmp/output.pdf --subject \"Subject of the document\" --keywords \"\""),
SET_PAGE_LABELS("setpagelabels", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new SetPageLabelsCliArgumentsTransformer();
}
}, "Given a collection of PDF documents, applies the selected page labels as defined in the PDF 32000-1:2008, chapter 12.4.2.", "setpagelabels -f /tmp/file1.pdf -o /tmp/output.pdf -l \"1:uroman:1:Preface \" 5:arabic:1"),
// \n\nThis would label the pages starting from the first page with uppercase roman numbers suffixed with 'Preface' ('Preface I', 'Preface II' etc.) and starting from the fifth
// page (first logical page) with arabic numbers ('1', '2', etc.)
SET_PAGE_TRANSITIONS("setpagetransitions", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new SetPageTransitionsCliArgumentsTransformer();
}
}, "Given a PDF document, applies the selected pages transitions (to use the document as a slide show presentation) as defined in the PDF 32000-1:2008, chapter 12.4.4.", "setpagetransitions -f /tmp/file1.pdf -o /tmp/output.pdf --defaultTransition fade:2:10 --transitions push_left_to_right:3:20:2 dissolve:1:10:3"),
PDF_TO_SINGLE_TIFF("pdftosingletiff", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new PdfToSingleTiffCliArgumentsTransformer();
}
}, "Converts a PDF document to a single TIFF image (TIFF format supports multiple images written to a single file).", "pdftosingletiff -f /tmp/file1.pdf -o /tmp/output.tiff --compressionType ccitt_group_3_2d --colorType black_and_white"),
PDF_TO_MULTIPLE_TIFF("pdftomultipletiff", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new PdfToMultipleTiffCliArgumentsTransformer();
}
}, "Converts a PDF document to multiple TIFF images (one image per page).", "pdftomultipletiff -f /tmp/file1.pdf -o /tmp --compressionType ccitt_group_3_2d --colorType black_and_white"),
SET_HEADER_FOOTER("setheaderfooter", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new SetHeaderFooterCliArgumentsTransformer();
}
}, "Adds a header or a footer to a PDF document or part of it.", "setheaderfooter -f /tmp/file1.pdf /tmp/file2.pdf -o /tmp -s all -y top -x center -t Courier -l \"Page [PAGE_OF_TOTAL]\""),
PDF_TO_JPEG("pdftojpeg", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new PdfToJpegCliArgumentsTransformer();
}
}, "Converts a PDF document to multiple JPEG images (one image per page).", "pdftojpeg -f /tmp/file1.pdf -o /tmp"),
PDF_TO_PNG("pdftopng", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new PdfToPngCliArgumentsTransformer();
}
}, "Converts a PDF document to multiple PNG images (one image per page).", "pdftopng -f /tmp/file1.pdf -o /tmp"),
COMBINE_REORDER("combinereorder", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new CombineReorderCliArgumentsTransformer();
}
}, "Combines multiple PDF documents reordering the pages if required.", "combinereorder -f /tmp/file1.pdf /tmp/file2.pdf -n 0:1 1:2 0:3 -o /tmp/output.pdf"),
ADD_BACK_PAGES("addbackpages", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new AddBackPagesCliArgumentsTransformer();
}
}, "Takes one or more pages from a PDF document and adds them to one or more PDF documents after each 'n' pages.", "addbackpages -f /tmp/file1.pdf /tmp/file2.pdf -b /tmp/back.pdf -s 1 -n 2 -o /tmp"),
PORTFOLIO("portfolio", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new AttachmentsCollectionCliArgumentsTransformer();
}
}, "Creates a portfolio/collection of attachments.", "portfolio -f /tmp/file1.txt /tmp/file2.pdf -i details -o /tmp/portfolio.pdf"),
WATERMARK("watermark", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new WatermarkCliArgumentsTransformer();
}
}, "Stamps a watermark image on multiple PDF documents.", "watermark -f /tmp/file1.pdf -o /tmp -w /tmp/logo.png -l behind -d 300x100 -c 20,50 -a 30"),
SCALE("scale", new CliInterfacedTask() {
@Override
protected CommandCliArgumentsTransformer getArgumentsTransformer() {
return new ScaleCliArgumentsTransformer();
}
}, "Scales pages or pages content of multiple PDF documents.", "scale -f /tmp/file1.pdf /tmp/file2.pdf -o /tmp -t content -s 0.7");
private BaseCliCommand command;
private StandardCliCommand(String displayName,
CliInterfacedTask extends TaskCliArguments, ? extends TaskParameters> cliTask, String description,
String exampleUsage) {
this.command = new BaseCliCommand(displayName, cliTask, description, exampleUsage);
}
@Override
public String getDisplayName() {
return command.getDisplayName();
}
@Override
public String getDescription() {
return command.getDescription();
}
@Override
public String getExampleUsage() {
return command.getExampleUsage();
}
@Override
public String getHelpMessage() {
return command.getHelpMessage();
}
@Override
public TaskParameters parseTaskParameters(String[] rawArguments) {
return command.parseTaskParameters(rawArguments);
}
@Override
public Class> getCliArgumentsClass() {
return command.getCliArgumentsClass();
}
}