Skip to content

Commit

Permalink
[Up-477] Optimization example - remove unused resources (#229)
Browse files Browse the repository at this point in the history
* added example for remove unused resources optimizer

* changed some comments

* updated README content and unipdf version

* updated README
  • Loading branch information
kellemNegasi authored Aug 1, 2023
1 parent 6ed9b72 commit 2b960e9
Show file tree
Hide file tree
Showing 9 changed files with 92 additions and 0 deletions.
3 changes: 3 additions & 0 deletions compress/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,14 @@ type Options struct {
CleanFonts bool
SubsetFonts bool
CleanContentstream bool
CleanUnusedResources bool
}
```

From the available filters listed above, all of them except `ImageQuality` and `ImageUpperPPI` enable lossless compression.

## Examples

- [pdf_optimize.go](pdf_optimize.go) compresses a PDF file with some typical options.
- [pdf_font_subsetting.go](pdf_font_subsetting.go) illustrates how to reduce a PDF file size by subsetting all fonts used in the document using `SubsetFonts` Optimizer option.
- [pdf_remove_unused_resources.go](pdf_remove_unused_resources.go) reduces file size by removing unused resources such as Images, Xforms, fonts and external graphics state dictionaries.
Binary file added compress/outputs/ouput_file_1.pdf
Binary file not shown.
Binary file added compress/outputs/ouput_file_2.pdf
Binary file not shown.
Binary file added compress/outputs/ouput_file_3.pdf
Binary file not shown.
1 change: 1 addition & 0 deletions compress/pdf_optimize.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ func main() {
UseObjectStreams: true,
ImageQuality: 80,
ImageUpperPPI: 100,
CleanUnusedResources: true,
}))

// Create output file.
Expand Down
88 changes: 88 additions & 0 deletions compress/pdf_remove_unused_resources.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/*
* This example shows how to use remove unused resources optimization example.
* The compression accomplished using this filter is lossless.
*
* Run as: go run pdf_remove_unused_resources.go <input.pdf> <output.pdf>
*/

package main

import (
"fmt"
"log"
"os"
"time"

"github.com/unidoc/unipdf/v3/common/license"
"github.com/unidoc/unipdf/v3/model"
"github.com/unidoc/unipdf/v3/model/optimize"
)

func init() {
// Make sure to load your metered License API key prior to using the library.
// If you need a key, you can sign up and create a free one at https://cloud.unidoc.io
err := license.SetMeteredKey(os.Getenv(`UNIDOC_LICENSE_API_KEY`))
if err != nil {
panic(err)
}
}

func main() {
args := os.Args
if len(args) < 3 {
fmt.Printf("Usage: %s <INPUT_PDF_PATH> <OUTPUT_PDF_PATH>\n", os.Args[0])
return
}
inputPath := args[1]
outputPath := args[2]

// Initialize starting time
start := time.Now()

inputFile, err := os.Open(inputPath)
if err != nil {
log.Fatalf("Failed to read file: %v", err)
}
defer inputFile.Close()

pdfReader, err := model.NewPdfReader(inputFile)
if err != nil {
log.Fatalf("Failed to create reader: %v", err)
}

pdfWriter, err := pdfReader.ToWriter(nil)
if err != nil {
fmt.Printf("Failed to get writer from reader %v", err)
}

// Set optimizer
pdfWriter.SetOptimizer(optimize.New(optimize.Options{
CleanUnusedResources: true,
}))

// Write document to file.
if err := pdfWriter.WriteToFile(outputPath); err != nil {
log.Fatalf("Failed to write to file %v", err)

}

// Get processing time.
duration := float64(time.Since(start)) / float64(time.Millisecond)

// Get input file stat.
inputFileInfo, err := os.Stat(inputPath)
if err != nil {
log.Fatalf("Failed to get input file stat: %v\n", err)
}

// Get output file stat
outputFileInfo, err := os.Stat(outputPath)
if err != nil {
log.Fatalf("Failed to get output file path: %v\n", err)
}

// Print information
fmt.Printf("Input file size = %d bytes \n",inputFileInfo.Size())
fmt.Printf("Optimized file Size = %d bytes\n", outputFileInfo.Size())
fmt.Printf("Time taken to process %s = %.2fms\n", inputPath, duration)
}
Binary file added compress/test_files/test_file_1.pdf
Binary file not shown.
Binary file added compress/test_files/test_file_2.pdf
Binary file not shown.
Binary file added compress/test_files/test_file_3.pdf
Binary file not shown.

0 comments on commit 2b960e9

Please sign in to comment.