Giter Site home page Giter Site logo

unipdf-cli's Introduction

unipdf-cli

Build Status GoDoc Go Report Card

unipdf-cli is a CLI tool which makes working with PDF files very easy. It supports the most common PDF operations. The application is written in Golang and is powered by the UniPDF PDF library.

Features

Short demo

asciicast

Installation

Minimum required Go version: 1.13. We officially support the 3 latest minor versions of Go, but it may work on earlier ones as well.

git clone [email protected]:unidoc/unipdf-cli.git
cd unipdf-cli/cmd/unipdf
go build

Showcase

Grayscale conversion

encrypt example

Add watermark

watermark example

Usage

Merge

Merge multiple PDF files into a single output file.

unipdf merge OUTPUT_FILE INPUT_FILE...

Examples:
unipdf merge output_file.pdf input_file1.pdf input_file2.pdf

Split

Extract one or more page ranges from PDF file and save the result as a single output file.

unipdf split [FLAG]... INPUT_FILE OUTPUT_FILE [PAGES]

Flags:
-p, --password string   PDF file password

Examples:
unipdf split input_file.pdf output_file.pdf 1-2
unipdf split -p pass input_file.pd output_file.pdf 1-2,4

PAGES argument example: 1-3,4,6-7
Only pages 1,2,3 (1-3), 4 and 6,7 (6-7) will be present in the output file,
while page number 5 is skipped.

Explode

Splits the input file into separate single page PDF files and saves the result as a ZIP archive.

Usage:
unipdf explode [FLAG]... INPUT_FILE

Flags:
-o, --output-file string   Output file
-P, --pages string         Pages to extract from the input file
-p, --password string      Input file password

Examples:
unipdf explode input_file.pdf
unipdf explode -o pages.zip input_file.pdf
unipdf explode -o pages.zip -P 1-3 input_file.pdf
unipdf explode -o pages.zip -P 1-3 -p pass input_file.pdf

Pages flag example: 1-3,4,6-7
Pages 1,2,3 (1-3), 4 and 6,7 (6-7) will be extracted, while page
number 5 is skipped.

Encrypt

Add password protection to PDF files. Owner and user passwords can be specified, along with a set of user permissions. The encryption algorithm used for protecting the file is configurable.

unipdf encrypt [FLAG]... INPUT_FILE OWNER_PASSWORD [USER_PASSWORD]

Flags:
-m, --mode string         Algorithm to use for encrypting the file (default "rc4")
-o, --output-file string  Output file
-P, --perms string        User permissions (default "all")

Examples:
unipdf encrypt input_file.pdf owner_pass
unipdf encrypt input_file.pdf owner_pass user_pass
unipdf encrypt -o output_file.pdf -m aes256 input_file.pdf owner_pass user_pass
unipdf encrypt -o output_file.pdf -P none -m aes256 input_file.pdf owner_pass user_pass
unipdf encrypt -o output_file.pdf -P modify,annotate -m aes256 input_file.pdf owner_pass user

Supported encryption algorithms:
- rc4 (default)
- aes128
- aes256

Supported user permissions:
- all (default)
- none
- print-low-res
- print-high-res
- modify
- extract
- extract-graphics
- annotate
- fill-forms
- rotate

Decrypt

Remove password protection from PDF files.

unipdf decrypt [FLAG]... INPUT_FILE

Flags:
-o, --output-file string   Output file
-p, --password string      PDF file password

Examples:
unipdf decrypt -p pass input_file.pdf
unipdf decrypt -p pass -o output_file.pdf input_file.pdf

Passwd

Change protected PDF user/owner password.

unipdf passwd [FLAG]... INPUT_FILE NEW_OWNER_PASSWORD [NEW_USER_PASSWORD]

Flags:
-o, --output-file string   Output file
-p, --password string      PDF file password

Examples:
unipdf passwd -p pass input_file.pdf new_owner_pass
unipdf passwd -p pass -o output_file.pdf input_file.pdf new_owner_pass
unipdf passwd -p pass -o output_file.pdf input_file.pdf new_owner_pass new_user_pass

Optimize

Optimize PDF files by optimizing structure, compression and image quality.

The command can take multiple files and directories as input parameters. By default, each PDF file is saved in the same location as the original file, appending the "_optimized" suffix to the file name. Use the --overwrite flag to overwrite the original files. In addition, the optimized output files can be saved to a different directory by using the --target-dir flag. The command can search for PDF files inside the subdirectories of the specified input directories by using the --recursive flag.

The quality of the images in the output files can be configured through the --image-quality flag (default 90). The resolution of the output images can be controlled using the --image-ppi flag. Common pixels per inch values are 100 (screen), 150-300 (print), 600 (art). If not specified, the PPI of the output images is 100.

unipdf optimize [FLAG]... INPUT_FILES...

Flags:
-P, --image-ppi float     output images pixels per inch (default 100)
-q, --image-quality int   output JPEG image quality (default 90)
-O, --overwrite           overwrite input files
-p, --password string     file password
-r, --recursive           search PDF files in subdirectories
-t, --target-dir string   output directory

Examples:
unipdf optimize file_1.pdf file_n.pdf
unipdf optimize -O file_1.pdf file_n.pdf
unipdf optimize -O -r file_1.pdf file_n.pdf dir_1 dir_n
unipdf optimize -t out_dir file_1.pdf file_n.pdf dir_1 dir_n
unipdf optimize -t out_dir -r file_1.pdf file_n.pdf dir_1 dir_n
unipdf optimize -t out_dir -r -q 75 file_1.pdf file_n.pdf dir_1 dir_n
unipdf optimize -t out_dir -r -q 75 -P 100 file_1.pdf file_n.pdf dir_1 dir_n
unipdf optimize -t out_dir -r -q 75 -P 100 -p pass file_1.pdf file_n.pdf dir_1 dir_n

Rotate

Rotate PDF file pages by a specified angle. The angle argument is specified in degrees and it must be a multiple of 90.

unipdf rotate [FLAG]... INPUT_FILE ANGLE

Flags:
-o, --output-file string   Output file
-P, --pages string         Pages to rotate
-p, --password string      PDF file password

Examples:
unipdf rotate input_file.pdf 90
unipdf rotate -- input_file.pdf -270
unipdf rotate -o output_file.pdf input_file.pdf 90
unipdf rotate -o output_file.pdf -P 1-3 input_file.pdf 90
unipdf rotate -o output_file.pdf -P 1-3 -p pass input_file.pdf 90

Pages flag example: 1-3,4,6-7
Only pages 1,2,3 (1-3), 4 and 6,7 (6-7) will be rotated, while
page number 5 is skipped.

Watermark

Add watermark images to PDF files.

unipdf watermark [FLAG]... INPUT_FILE WATERMARK_IMAGE

Flags:
-o, --output-file string   Output file
-P, --pages string         Pages on which to add watermark
-p, --password string      PDF file password

Examples:
unipdf watermark input_file.pdf watermark.png
unipdf watermark -o output file.png input_file.pdf watermark.png
unipdf watermark -o output file.png -P 1-3 input_file.pdf watermark.png
unipdf watermark -o output file.png -P 1-3 -p pass input_file.pdf watermark.png

Pages flag example: 1-3,4,6-7
Watermark will only be applied to pages 1,2,3 (1-3), 4 and 6,7 (6-7), while
page number 5 is skipped.

Grayscale

Convert PDF files to grayscale.

unipdf grayscale [FLAG]... INPUT_FILE

Flags:
-o, --output-file string   Output file
-P, --pages string         Pages to convert to grayscale
-p, --password string      PDF file password

Examples:
unipdf grayscale input_file.pdf
unipdf grayscale -o output_file input_file.pdf
unipdf grayscale -o output_file -P 1-3 input_file.pdf
unipdf grayscale -o output_file -P 1-3 -p pass input_file.pdf

Pages flag example: 1-3,4,6-7
Only pages 1,2,3 (1-3), 4 and 6,7 (6-7) will be converted to grayscale, while
page number 5 is skipped.

Info

Outputs file information. Also does some basic validation.

unipdf info [FLAG]... INPUT_FILE

Flags:
-p, --password string   PDF file password

Examples:
unipdf info input_file.pdf
unipdf info -p pass input_file.pdf

Extract text

Extracts PDF text. The extracted text is always printed to STDOUT.

unipdf extract text [FLAG]... INPUT_FILE

Flags:
-P, --pages string           Pages to extract text from
-p, --user-password string   Input file password

Examples:
unipdf extract text input_file.pdf
unipdf extract text -P 1-3 input_file.pdf
unipdf extract text -P 1-3 -p pass input_file.pdf

Pages flag example: 1-3,4,6-7
Text will only be extracted from pages 1,2,3 (1-3), 4 and 6,7 (6-7), while
page number 5 is skipped.

Extract images

Extracts PDF images. The images are extracted in a ZIP file and saved at the destination specified by the --output-file parameter. If no output file is specified, the ZIP archive is saved in the same directory as the input file.

unipdf extract [FLAG]... INPUT_FILE

Flags:
-S, --include-inline-stencil-masks   Include inline stencil masks
-o, --output-file string             Output file
-P, --pages string                   Pages to extract images from
-p, --password string                Input file password

Examples:
unipdf extract images input_file.pdf
unipdf extract images -o images.zip input_file.pdf
unipdf extract images -P 1-3 -p pass -o images.zip input_file.pdf

Pages flag example: 1-3,4,6-7
Images will only be extracted from pages 1,2,3 (1-3), 4 and 6,7 (6-7), while
page number 5 is skipped.

Search

Search text in PDF files.

unipdf search [FLAG]... INPUT_FILE TEXT

Flags:
-p, --password string   PDF file password

Examples:
unipdf search input_file.pdf text_to_search
unipdf search -p pass input_file.pdf text_to_search

Form Export

Export JSON representation of form fields.

By default, the resulting JSON content is printed to STDOUT. The output can be saved to a file by using the --output-file flag.

unipdf form export [FLAG]... INPUT_FILE

Flags:
-o, --output-file string   output file

Examples:
unipdf form export in_file.pdf
unipdf form export in_file.pdf > out_file.json
unipdf form export -o out_file.json in_file.pdf

Form Fill

Fill form fields from JSON file.

The field values specified in the JSON file template are used to fill the form fields in the input PDF files. In addition, the output file form fields can be flattened by using the --flatten flag. The flattening process makes the form fields of the output files read-only by appending the form field annotation XObject Form data to the page content stream, thus making it part of the page contents.

The command can take multiple files and directories as input parameters. By default, each PDF file is saved in the same location as the original file, appending the "_filled" suffix to the file name. Use the --overwrite flag to overwrite the original files. In addition, the filled output files can be saved to a different directory by using the --target-dir flag. The command can search for PDF files inside the subdirectories of the specified input directories by using the --recursive flag.

unipdf form fill [FLAG]... JSON_FILE INPUT_FILES...

Flags:
-f, --flatten             flatten form annotations
-O, --overwrite           overwrite input files
-p, --password string     input file password
-r, --recursive           search PDF files in subdirectories
-t, --target-dir string   output directory

Examples:
unipdf form fill fields.json file_1.pdf file_n.pdf
unipdf form fill -O fields.json file_1.pdf file_n.pdf
unipdf form fill -O -r -f fields.json file_1.pdf file_n.pdf dir_1 dir_n
unipdf form fill -t out_dir fields.json file_1.pdf file_n.pdf dir_1 dir_n
unipdf form fill -t out_dir -r fields.json file_1.pdf file_n.pdf dir_1 dir_n
unipdf form fill -t out_dir -r -p pass fields.json file_1.pdf file_n.pdf dir_1 dir_n

FDF Merge

Fill form fields from FDF file.

The field values specified in the FDF file template are used to fill the form fields in the input PDF files. In addition, the output file form fields can be flattened by using the --flatten flag. The flattening process makes the form fields of the output files read-only by appending the form field annotation XObject Form data to the page content stream, thus making it part of the page contents.

The command can take multiple files and directories as input parameters. By default, each PDF file is saved in the same location as the original file, appending the "_filled" suffix to the file name. Use the --overwrite flag to overwrite the original files. In addition, the filled output files can be saved to a different directory by using the --target-dir flag. The command can search for PDF files inside the subdirectories of the specified input directories by using the --recursive flag.

Usage:
unipdf form fdfmerge [FLAG]... FDF_FILE INPUT_FILES...

Flags:
-f, --flatten             flatten form annotations
-O, --overwrite           overwrite input files
-p, --password string     input file password
-r, --recursive           search PDF files in subdirectories
-t, --target-dir string   output directory

Examples:
unipdf form fdfmerge fields.fdf file_1.pdf file_n.pdf
unipdf form fdfmerge -O fields.fdf file_1.pdf file_n.pdf
unipdf form fdfmerge -O -r -f fields.fdf file_1.pdf file_n.pdf dir_1 dir_n
unipdf form fdfmerge -t out_dir fields.fdf file_1.pdf file_n.pdf dir_1 dir_n
unipdf form fdfmerge -t out_dir -r fields.fdf file_1.pdf file_n.pdf dir_1 dir_n
unipdf form fdfmerge -t out_dir -r -p pass fields.fdf file_1.pdf file_n.pdf dir_1 dir_n

Form Flatten

Flatten PDF file form annotations.

The flattening process makes the form fields of the output files read-only by appending the form field annotation XObject Form data to the page content stream, thus making it part of the page contents.

The command can take multiple files and directories as input parameters. By default, each PDF file is saved in the same location as the original file, appending the "_flattened" suffix to the file name. Use the --overwrite flag to overwrite the original files. In addition, the flattened output files can be saved to a different directory by using the --target-dir flag. The command can search for PDF files inside the subdirectories of the specified input directories by using the --recursive flag.

unipdf form flatten [FLAG]... INPUT_FILES...

Flags:
-O, --overwrite           overwrite input files
-p, --password string     input file password
-r, --recursive           search PDF files in subdirectories
-t, --target-dir string   output directory

Examples:
unipdf form flatten file_1.pdf file_n.pdf
unipdf form flatten -O file_1.pdf file_n.pdf
unipdf form flatten -O -r file_1.pdf file_n.pdf dir_1 dir_n
unipdf form flatten -t out_dir file_1.pdf file_n.pdf dir_1 dir_n
unipdf form flatten -t out_dir -r file_1.pdf file_n.pdf dir_1 dir_n
unipdf form flatten -t out_dir -r -p pass file_1.pdf file_n.pdf dir_1 dir_n

Render

Render PDF pages to image targets.

The rendered image files are saved in a ZIP file, at the location specified by the --output-file parameter. If no output file is specified, the ZIP file is saved in the same directory as the input file.

The format of the rendered image files can be specified using the --image-format flag (default jpeg). The quality of the image files can be configured through the --image-quality flag (default 100, only applies to JPEG images).

unipdf render [FLAG]... INPUT_FILE

Flags:
-f, --image-format string   format of the output images (default "jpeg")
-q, --image-quality int     quality of the output images (default 100)
-o, --output-file string    output file
-P, --pages string          pages to render from the input file
-p, --password string       input file password

Examples:
unipdf render in_file.pdf
unipdf render -o images.zip in_file.pdf
unipdf render -o images.zip -P 1-3 in_file.pdf
unipdf render -o images.zip -P 1-3 -p pass in_file.pdf
unipdf render -o images.zip -P 1-3 -p pass -f jpeg -q 100 in_file.pdf

Pages flag example: 1-3,4,6-7
Images will only be rendered for pages 1,2,3 (1-3), 4 and 6,7 (6-7), while
page number 5 is skipped.

Supported image formats:
  - jpeg (default)
  - png

License Info

Get information about license key that being loaded by unipdf-cli.

Example:
unipdf license_info

License

unipdf-cli requires license codes to operate, there are two options:

Offline License

Offline licenses are cryptography based and contain full signed information that is verified based on signatures without making any outbound connections, hence the name "offline". This kind of license is suitable for users deploying OEM products to their customers or where there are strict restrictions on outbound connections due to firewalls and/or compliance requirements.

If you have a license for UniPDF, you can set it through the UNIDOC_LICENSE_FILE and UNIDOC_LICENSE_CUSTOMER environment variables.

export UNIDOC_LICENSE_FILE="PATH_TO_LICENSE_FILE"
export UNIDOC_LICENSE_CUSTOMER="CUSTOMER_NAME"

Metered License (API keys)

The metered license is the most convenient way to get started with UniDoc products and the Free tier enables a powerful way to get started for free. Anyone can get a free metered API key by signing up on http://cloud.unidoc.io/

If you have a metered license (API keys), you can set it through the UNIDOC_LICENSE_API_KEY environment variable.

export UNIDOC_LICENSE_API_KEY="unidoc_metered_api_key"

unipdf-cli's People

Contributors

adrg avatar gunnsth avatar ribice avatar sampila avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

unipdf-cli's Issues

unicli explode command

Add a new CLI command: explode, which explodes all pages into separate PDF files.
The output should be a ZIP archive with all pages with filenames input_1.pdf, input_2.pdf, ... for each page.

Create Brew formula

Once the package is more stable, it would be good to make it installable via brew, especially now that Brew is cross platform (OSX, GNU/Linux and Windows).

unicli debug command prompt

Opens up a prompt for viewing and debugging PDFs. Once in prompt can execute various commands to debug.

$ unicli debug file.pdf
> version
1.7
> pages
10
> page 3
Page context set to page 3
> images
Page 3
1 images
Img1 XObject: 121 0 R
> wo 121 /tmp/img1.dat
Object 121 written to /tmp/img1.dat
> content
q
Img1 Do
Q
> quit
Closing debug prompt
$

Basic commands

version/v - Print PDF version
catalog/c - Displays the PDF catalog
obj/o num - Displays object number `num`   In a readable form.  If the object is binary then avoid writing to the console
writeobj/wo num path - Writes object num to path
pages/pp - number of pages

Page context

It is also possible to work in page context, i.e. set page context to a specific page.

page/p num - Sets page context to page `num`
resources/res (num) - Prints page resources for page num (parameter not needed if page context set)
fonts (num) - Overview of fonts
xobj (num) - Overview of XObjects
contents (num) - Print the contentstream
text - Outputs as text
images - Overview of images in the content

Other

Other things we would like to be able to see:

  • filters: Get an overview of encodings/filters that are used in the PDF.

Watched folders for compress/optimize with a task queue

Idea:

unicli optimize --watch /folder --out /path/to/outputs

watches /folder for input files, for each new PDF that is seen, puts compress task info on a task queue.
Runs a task queue with 4 goroutines (configurable number) which processes each new task and writes the optimized PDF to the output folder.

Upon starting should process the PDF files that are in the folder at the time of starting.

Options

  • Keep a copy of the original (write as filename.orig.pdf in the same output folder)
  • Error handling. If there is an error, write to an error log, possibly create a filename_error.txt in the output folder.

Render PDF to images functionality

Add a render function to render a PDF or page(s) from PDF.
Can be consistent with other functions. Either
render file.pdf file.zip
where entire file.pdf is rendered to images inside file.zip.
or
render file.pdf -p 1 file.zip
to get page 1, or a page range (consistent with what is done in other methods).

Watermak Sign

Hello, I'm making personal use of unipdf, how to remove the watermark that appears in the files after encryption?

Thanks in advance.

Update installation instructions (README)

Current state

The instructions provided result in an error as does work in loading the module.

Need to update the instructions, probably with a git clone followed by go build (for installation based on the module).

Unable to use offline key with compiled binary

I just tried following your blog post, Compressing and Optimizing PDFs in Pure Golang using UniPDF using a compiled binary with my offline key. For example:

UNIDOC_LICENSE_FILE="unidoc_license.key" UNIDOC_LICENSE_CUSTOMER=<customer_name> unipdf license_info

And I get the following output:

License: License Id:
Customer Id:
Customer Name: Unlicensed
Tier: unlicensed
Created At: 30 August 2023 at 17:23 UTC
Expires At: Never
Creator:  <>

The keys I'm providing are used in production so I know they're correct. I then dug into your source code and I found the bug:

func SetLicense(licensePath string, customer string) error {
// Read license file
content, err := ioutil.ReadFile(licensePath)
if err != nil {
return err
}
return unilicense.SetLicenseKey(string(content), "")
}

If you look at line 24, the customer name is hard coded as an empty string. Change that line to pass the customer variable and everything works.

optimize multiple input files

Should be able to

  • Specify multiple input files, either file1.pdf file2.pdf ..., or
  • Specify output folder, outputs are placed within that folder

unicli rotate pages command

Add a CLI command: rotate to rotate pages

  • Should be able to rotate a specific page or a page range by a specified angle
  • Angle should be a multiple of 90 degrees

optimize output - show compression ratio and time

  • Would be good if unicli can show the file size before and after, along with a compression ratio
  • Also would be nice to show the time it took to process
  • Either show by default or consider a flag or parameter to enable.

unicli invoice template/generate

Invoices can be complex. Instead of a ton of parameters, use a JSON input file.

  • unicli invoice template outputs the JSON template
$ unicli invoice template
{
  name: "Full name",
  ...
}
  • unicli invoice generate invoice.pdf invdata.json generates the invoice

Start basic, with basic fields similar to the first example on:
https://unidoc.io/news/simple-invoices

Cannot handle spaces in filenames

Merging two PDF files, one of which has spaces in the name:

backslash escaped on command line ...

$ unipdf merge output.pdf part1.pdf part\ two\ report.pdf
Could not merge the input files: open part: no such file or directory

enclosed in double quotes ...

$ unipdf merge output.pdf part1.pdf "part two report.pdf"
Could not merge the input files: open part: no such file or directory

I was forced to rename the input file to be "part_two_report.pdf" for it to work properly. This should be an easy fix to not assume filenames won't have spaces in the name.

Compression ratio 0.19%

Hello I am trying to compress a pdf from the unicli. Everything appears to be working however the compression is negligible (0.19%). This pdf does contain some large images - so I am not sure if there is something wrong with my command.

The watermark does show up as expected on each page.

$ ./unipdf optimize /path/to/myLargeFile.pdf -q 75 -P 100
Optimizing /path/to/myLargeFile.pdf
Unlicensed copy of unidoc
To get rid of the watermark - Please get a license on https://unidoc.io
Original: /path/to/myLargeFile.pdf
Original size: 211795879 bytes
Optimized: /path/to/myLargeFile_optimized.pdf
Optimized size: 212193033 bytes
Compression ratio: -0.19%
Processing time: 2957.33 ms
Status: success
----------

Unexpected behaviour when extracting images from a PDF file

Description

I just tried to extract images from a PDF file. The command run was:

$ ./unicli extract -r images ~/Downloads/heimadaemi_VI_E2_2015_2016_nr_09.pdf
Images successfully extracted to /Users/ahall/Downloads/heimadaemi_VI_E2_2015_2016_nr_09.zip
ahalls-MBP:unicli ahall$ unzip /Users/ahall/Downloads/heimadaemi_VI_E2_2015_2016_nr_09.zip

When unzipping the images I got:

l$ unzip /Users/ahall/Downloads/heimadaemi_VI_E2_2015_2016_nr_09.zip
Archive:  /Users/ahall/Downloads/heimadaemi_VI_E2_2015_2016_nr_09.zip
  inflating: p1_0.jpg
  inflating: p1_1.jpg
  inflating: p1_2.jpg
  inflating: p1_3.jpg
  inflating: p1_4.jpg
  inflating: p1_5.jpg
  inflating: p1_6.jpg
  inflating: p1_7.jpg
  inflating: p1_8.jpg
  inflating: p1_9.jpg
  inflating: p1_10.jpg
$ ls -la p1*
-rw-r--r--@ 1 ahall  staff  599 Dec 31  1979 p1_0.jpg
-rw-r--r--  1 ahall  staff  599 Dec 31  1979 p1_1.jpg
-rw-r--r--  1 ahall  staff  599 Dec 31  1979 p1_10.jpg
-rw-r--r--  1 ahall  staff  599 Dec 31  1979 p1_2.jpg
-rw-r--r--  1 ahall  staff  599 Dec 31  1979 p1_3.jpg
-rw-r--r--  1 ahall  staff  599 Dec 31  1979 p1_4.jpg
-rw-r--r--  1 ahall  staff  599 Dec 31  1979 p1_5.jpg
-rw-r--r--  1 ahall  staff  599 Dec 31  1979 p1_6.jpg
-rw-r--r--  1 ahall  staff  599 Dec 31  1979 p1_7.jpg
-rw-r--r--  1 ahall  staff  599 Dec 31  1979 p1_8.jpg
-rw-r--r--  1 ahall  staff  599 Dec 31  1979 p1_9.jpg

Expected Behavior

The file has no images and should not even return a ZIP file, should just state that the file has no images. The files also should also have more recent timestamp than 1979.

Actual Behavior

A zip file is returned with a few empty .jpg files. The files also have a 1979 timestamp.

File causing issue

heimadaemi_VI_E2_2015_2016_nr_09.pdf

Create a README.MD with examples

The README.MD should have:

  • Full listing of commands
  • asciicinema demo of how it works for some basic operation
  • images of PDFs generated for 1-2 demo cases

Support and document installation without Go

Since Go is a compiled language, isn't it better to compile the package on every release for multiple platforms (I think goreleaser already handles that) and use that in instructions instead of requiring Go to install UniCLI?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.