Skeleton for SplitMax

This commit is contained in:
John Whitington 2023-10-25 18:15:19 +01:00
parent f35dac6ef8
commit 6c5b138baa
1 changed files with 32 additions and 1 deletions

View File

@ -128,6 +128,7 @@ type op =
| Merge | Merge
| Split | Split
| SplitOnBookmarks of int | SplitOnBookmarks of int
| SplitMax of int
| Clean | Clean
| Info | Info
| PageInfo | PageInfo
@ -263,6 +264,7 @@ let string_of_op = function
| Merge -> "Merge" | Merge -> "Merge"
| Split -> "Split" | Split -> "Split"
| SplitOnBookmarks _ -> "SplitOnBookmarks" | SplitOnBookmarks _ -> "SplitOnBookmarks"
| SplitMax _ -> "SplitMax"
| Clean -> "Clean" | Clean -> "Clean"
| Info -> "Info" | Info -> "Info"
| PageInfo -> "PageInfo" | PageInfo -> "PageInfo"
@ -839,7 +841,7 @@ let banned banlist = function
-recrypt from -- the first or second file? *) -recrypt from -- the first or second file? *)
| Decrypt | Encrypt | CombinePages _ -> true (* Never allowed *) | Decrypt | Encrypt | CombinePages _ -> true (* Never allowed *)
| AddBookmarks _ | PadBefore | PadAfter | PadEvery _ | PadMultiple _ | PadMultipleBefore _ | AddBookmarks _ | PadBefore | PadAfter | PadEvery _ | PadMultiple _ | PadMultipleBefore _
| Merge | Split | SplitOnBookmarks _ | RotateContents _ | Rotate _ | Merge | Split | SplitOnBookmarks _ | SplitMax _ | RotateContents _ | Rotate _
| Rotateby _ | Upright | VFlip | HFlip | Impose _ -> | Rotateby _ | Upright | VFlip | HFlip | Impose _ ->
mem Pdfcrypt.NoAssemble banlist mem Pdfcrypt.NoAssemble banlist
| TwoUp|TwoUpStack|RemoveBookmarks|AddRectangle|RemoveText| | TwoUp|TwoUpStack|RemoveBookmarks|AddRectangle|RemoveText|
@ -3139,6 +3141,9 @@ let split_pdf
enc 0 original_filename squeeze spec pdf enc 0 original_filename squeeze spec pdf
(splitinto chunksize (indx pdf_pages)) pdf_pages (splitinto chunksize (indx pdf_pages)) pdf_pages
let split_max enc original_filename ~squeeze output_spec s pdf =
()
let getencryption pdf = let getencryption pdf =
match Pdfread.what_encryption pdf with match Pdfread.what_encryption pdf with
| None | Some Pdfwrite.AlreadyEncrypted -> "Not encrypted" | None | Some Pdfwrite.AlreadyEncrypted -> "Not encrypted"
@ -3697,6 +3702,32 @@ let go () =
| Stdout -> error "Can't split to standard output" | Stdout -> error "Can't split to standard output"
| NoOutputSpecified -> error "Split: No output format specified" | NoOutputSpecified -> error "Split: No output format specified"
end end
| Some (SplitMax s) ->
begin match args.out with
| File output_spec ->
let pdf = get_single_pdf args.op false in
let enc =
match args.crypt_method with
| "" -> None
| _ ->
Some
{Pdfwrite.encryption_method =
(match args.crypt_method with
| "40bit" -> Pdfwrite.PDF40bit
| "128bit" -> Pdfwrite.PDF128bit
| "AES" -> Pdfwrite.AES128bit args.encrypt_metadata
| "AES256" -> Pdfwrite.AES256bit args.encrypt_metadata
| "AES256ISO" -> Pdfwrite.AES256bitISO args.encrypt_metadata
| _ -> assert false (* Pre-checked *));
Pdfwrite.owner_password = args.owner;
Pdfwrite.user_password = args.user;
Pdfwrite.permissions = banlist_of_args ()}
in
args.create_objstm <- args.preserve_objstm;
split_max enc args.original_filename ~squeeze:args.squeeze output_spec s pdf
| Stdout -> error "Can't split to standard output"
| NoOutputSpecified -> error "Split: No output format specified"
end
| Some Presentation -> | Some Presentation ->
let pdf = get_single_pdf args.op false in let pdf = get_single_pdf args.op false in
let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in