pludoni_pdfutils 0.1.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ce474c026e729b7967ef861003ab2d646e965dac9424a87992f4f99d710905ad
4
- data.tar.gz: e9acb01ef78eb8f0b182d8fc5489dfdac2e189930cd82af794ec4147ad7da806
3
+ metadata.gz: 439ff3f6cb56782dc05fe363a19d8c1f2f416b4943a201fba1c94fb72db9d9f8
4
+ data.tar.gz: 3501da1a290946bf56e8cde0daae07ae63d72a5c05aed5f653c245a7826e1087
5
5
  SHA512:
6
- metadata.gz: f139faefe7be6a3bc2a8b327a89e26b4186c025258cc137c9a1a8d220fa924eb6cb8c389cec885d0e7814bb1e7113371e2eb88039d37df67fd45c75d8cc23ba7
7
- data.tar.gz: 3deb99960c6171363944c4bcd9af2a553d9f52dbc4c8995032a448ec75bd85c2eed0ed49a30491e16b33dc91145d5c680b6e4e675b92c94681e54557fde87a0d
6
+ metadata.gz: 3f29026a2d7c8f40bf9a14ecad38a458ff621904f0a94fb6856a4635f0eec105027e9f9f04ba18088e8b1695cbd0469ea840ccea59f5539c46da9a34526eb7b4
7
+ data.tar.gz: 54b4b7b4b3096e3b8485d36a6a5becb7219af56f08f3b0b55c8c4bfd9be0f401d255a6293c1a2f03b465de1eedc974841ddf335c6618c488580540f50f6dc9bf
data/README.md CHANGED
@@ -21,6 +21,8 @@ Or install it yourself as:
21
21
 
22
22
  requires ghostscript installed.
23
23
 
24
+ Conversion of document formats (docx etc.) requires soffice installed
25
+
24
26
  ## Usage
25
27
 
26
28
  All method take either ActiveStorage::Blob or File/Tempfile as argument and return a Tempfile/File
@@ -41,7 +43,10 @@ Pludoni::Pdfutils.convert_all_to_pdf_and_join_max_size(blobs, max_files: 3, max_
41
43
  Individual classes:
42
44
 
43
45
  ```ruby
44
- tempfile = Pludoni::Pdfutils::ConvertToPdf.new(image_file).run
46
+ # jpg
47
+ tempfile = Pludoni::Pdfutils::ConvertImageToPdf.new(image_file).run
48
+ # docx etc.
49
+ tempfile = Pludoni::Pdfutils::ConvertDocumentToPdf.new(image_file).run
45
50
 
46
51
 
47
52
  tempfile = Pludoni::Pdfutils::Joiner.new(job_application.uploads.map(&:blob)).run
@@ -6,7 +6,7 @@ module Pludoni
6
6
  end
7
7
 
8
8
  def to_tf
9
- file = Tempfile.new(["ActiveStorage-#{@file.id}-", @file.filename.extension_with_delimiter])
9
+ file = Tempfile.new([@file.filename.base, @file.filename.extension_with_delimiter])
10
10
  ActiveStorage::Downloader.new(@file.service).send(:download, @file.key, file)
11
11
  file
12
12
  end
@@ -7,7 +7,8 @@ module Pludoni::Pdfutils
7
7
  end
8
8
 
9
9
  def run
10
- tf = Tempfile.new(['joiner', '.pdf'])
10
+ fname = File.basename(@blob.filename.to_s, '.*')
11
+ tf = Tempfile.new([fname, '.pdf'])
11
12
  tf.binmode
12
13
  input = @blob.to_tf
13
14
  cli = "gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=#{Shellwords.escape tf.path} #{Shellwords.escape input.path}"
@@ -17,7 +18,7 @@ module Pludoni::Pdfutils
17
18
  raise CompressionFailed, "PDF Compression failed: \nStdout: #{stdout}\nStderr: #{stderr}"
18
19
  end
19
20
 
20
- FileWrapper.make(tf)
21
+ FileWrapper.make(tf, filename: fname + ".pdf")
21
22
  end
22
23
  end
23
24
  end
@@ -0,0 +1,40 @@
1
+ require 'open3'
2
+
3
+ module Pludoni::Pdfutils
4
+ class ConvertDocumentToPdf
5
+ def initialize(blob)
6
+ @blob = FileWrapper.make(blob)
7
+ end
8
+
9
+ def run(&block)
10
+ fname = File.basename(@blob.filename.to_s, File.extname(@blob.filename.to_s))
11
+ @blob.open do |source|
12
+ # convert image to pdf
13
+ tf = Tempfile.new([fname, '.pdf'])
14
+ tf.binmode
15
+
16
+ command = ['soffice']
17
+ command << '--headless'
18
+ command << '--convert-to'
19
+ command << 'pdf'
20
+ command << '--outdir'
21
+ command << File.dirname(source.path)
22
+ command << source.path
23
+ stdout, stderr, status = Open3.capture3(*command)
24
+ unless status.success?
25
+ raise ConversionFailedError, "PDF conversion failed: Command: #{cli}\nStdout: #{stdout}\nStderr: #{stderr}"
26
+ end
27
+ pdf_path = source.path.sub(/\.[a-z0-9]+$/i, '.pdf')
28
+ unless File.exist?(pdf_path)
29
+ raise ConversionFailedError, "PDF conversion failed: Command: #{cli}\nStdout: #{stdout}\nStderr: #{stderr}"
30
+ end
31
+
32
+ FileUtils.move(pdf_path, tf.path)
33
+
34
+ tf.open
35
+
36
+ FileWrapper.make(tf, filename: "#{fname}.pdf")
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,15 +1,16 @@
1
1
  require 'open3'
2
2
 
3
3
  module Pludoni::Pdfutils
4
- class ConvertToPdf
4
+ class ConvertImageToPdf
5
5
  def initialize(blob)
6
6
  @blob = FileWrapper.make(blob)
7
7
  end
8
8
 
9
9
  def run(&block)
10
+ fname = File.basename(@blob.filename.to_s, '.*')
10
11
  @blob.open do |source|
11
12
  # convert image to pdf
12
- tf = Tempfile.new(['convert', '.pdf'])
13
+ tf = Tempfile.new([fname, '.pdf'])
13
14
  tf.binmode
14
15
  cli = "gs -dNOSAFER -dPDFSETTINGS=/prepress -sDEVICE=pdfwrite -o #{tf.path} viewjpeg.ps -c \\(#{source.path}\\) viewJPEG"
15
16
 
@@ -18,7 +19,7 @@ module Pludoni::Pdfutils
18
19
  raise ConversionFailedError, "PDF convertion failed: Command: #{cli}\nStdout: #{stdout}\nStderr: #{stderr}"
19
20
  end
20
21
 
21
- FileWrapper.make(tf)
22
+ FileWrapper.make(tf, filename: "#{fname}.pdf")
22
23
  end
23
24
  end
24
25
  end
@@ -5,12 +5,16 @@ module Pludoni
5
5
  @file = file
6
6
  end
7
7
 
8
- def self.make(blob_or_file)
8
+ def self.make(blob_or_file, filename: nil)
9
9
  case blob_or_file
10
10
  when ActiveStorage::Blob
11
11
  ActiveStorageWrapper.new(blob_or_file)
12
12
  when File, Tempfile
13
- LocalFileWrapper.new(blob_or_file)
13
+ fw = LocalFileWrapper.new(blob_or_file)
14
+ if filename
15
+ fw.filename = filename
16
+ end
17
+ fw
14
18
  when FileWrapper
15
19
  blob_or_file
16
20
  else
@@ -32,5 +36,3 @@ module Pludoni
32
36
  end
33
37
  end
34
38
  end
35
-
36
-
@@ -7,17 +7,18 @@ module Pludoni::Pdfutils
7
7
  end
8
8
 
9
9
  def run
10
- tf = Tempfile.new(['joiner', '.pdf'])
10
+ fname = @blobs.map(&:filename).map { |i| i.split('.').first[0..20] }.join('-')
11
+
12
+ tf = Tempfile.new([fname, '.pdf'])
11
13
  tf.binmode
12
14
  tfs = @blobs.map { |i| i.to_tf }
13
15
  cli = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=#{tf.path} #{tfs.map(&:path).join(' ')}"
14
-
15
- stdout, stderr, status = Open3.capture3(cli)
16
+ stdout, stderr, status = Open3.capture3(cli)
16
17
  unless status.success?
17
18
  raise JoiningFailedError, "PDF Joining failed: \nStdout: #{stdout}\nStderr: #{stderr}"
18
19
  end
19
20
 
20
- FileWrapper.make(tf)
21
+ FileWrapper.make(tf, filename: "#{fname}.pdf")
21
22
  end
22
23
  end
23
24
  end
@@ -1,12 +1,14 @@
1
1
  module Pludoni
2
2
  module Pdfutils
3
3
  class LocalFileWrapper < FileWrapper
4
+ attr_writer :filename
5
+
4
6
  def filesize
5
7
  @file.size
6
8
  end
7
9
 
8
10
  def filename
9
- @file.path.split("/").last
11
+ @filename || @file.path.split("/").last
10
12
  end
11
13
 
12
14
  def to_tf
@@ -46,10 +46,17 @@ module Pludoni
46
46
 
47
47
  def convert_to_pdf(blob, &block)
48
48
  blob = FileWrapper.make(blob)
49
- # TODO: convert odt docx
50
- if blob.content_type.to_s['image']
49
+ case blob.content_type.to_s
50
+ when /image/
51
51
  block.call("converting #{blob.filename.to_s} to pdf") if block_given?
52
- ConvertToPdf.new(blob).run(&block)
52
+ ConvertImageToPdf.new(blob).run(&block)
53
+ when "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
54
+ "application/msword",
55
+ "application/vnd.ms-powerpoint",
56
+ "application/vnd.oasis.opendocument.text",
57
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation"
58
+ block.call("converting #{blob.filename.to_s} to pdf") if block_given?
59
+ ConvertDocumentToPdf.new(blob).run(&block)
53
60
  else
54
61
  blob
55
62
  end
@@ -1,7 +1,7 @@
1
1
 
2
2
  Gem::Specification.new do |spec|
3
3
  spec.name = "pludoni_pdfutils"
4
- spec.version = "0.1.2"
4
+ spec.version = "0.3.0"
5
5
  spec.authors = ["Stefan Wienert"]
6
6
  spec.email = ["info@stefanwienert.de"]
7
7
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pludoni_pdfutils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Wienert
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-28 00:00:00.000000000 Z
11
+ date: 2022-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activestorage
@@ -99,7 +99,8 @@ files:
99
99
  - lib/pludoni/pdfutils.rb
100
100
  - lib/pludoni/pdfutils/active_storage_wrapper.rb
101
101
  - lib/pludoni/pdfutils/compressor.rb
102
- - lib/pludoni/pdfutils/convert_to_pdf.rb
102
+ - lib/pludoni/pdfutils/convert_document_to_pdf.rb
103
+ - lib/pludoni/pdfutils/convert_image_to_pdf.rb
103
104
  - lib/pludoni/pdfutils/file_wrapper.rb
104
105
  - lib/pludoni/pdfutils/joiner.rb
105
106
  - lib/pludoni/pdfutils/local_file_wrapper.rb