adobe_pdfservices_ruby 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rubocop.yml +13 -0
- data/.vscode/extensions.json +7 -0
- data/.vscode/settings.json +13 -0
- data/CHANGELOG.md +14 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +79 -0
- data/LICENSE.txt +21 -0
- data/README.md +88 -0
- data/Rakefile +16 -0
- data/adobe_pdfservices_ruby.gemspec +38 -0
- data/lib/adobe_pdfservices_ruby.rb +37 -0
- data/lib/pdfservices/api.rb +72 -0
- data/lib/pdfservices/asset.rb +74 -0
- data/lib/pdfservices/client.rb +69 -0
- data/lib/pdfservices/errors.rb +16 -0
- data/lib/pdfservices/operations/base.rb +81 -0
- data/lib/pdfservices/operations/document_generation/external.rb +99 -0
- data/lib/pdfservices/operations/document_generation/internal.rb +75 -0
- data/lib/pdfservices/operations/document_generation.rb +30 -0
- data/lib/pdfservices/operations/extract_pdf.rb +83 -0
- data/lib/pdfservices/operations/html_to_pdf/external.rb +96 -0
- data/lib/pdfservices/operations/html_to_pdf/internal.rb +69 -0
- data/lib/pdfservices/operations/html_to_pdf.rb +30 -0
- data/lib/pdfservices/operations/internal_external_operation.rb +40 -0
- data/lib/pdfservices/operations/ocr/external.rb +109 -0
- data/lib/pdfservices/operations/ocr/internal.rb +48 -0
- data/lib/pdfservices/operations/ocr.rb +28 -0
- data/lib/pdfservices/version.rb +5 -0
- metadata +120 -0
@@ -0,0 +1,109 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PdfServices
|
4
|
+
module Ocr
|
5
|
+
class External < Operation
|
6
|
+
EXTERNAL_OPTIONS = %i[input output params download_from_external].freeze
|
7
|
+
INPUT_KEYS = %i[uri storage].freeze
|
8
|
+
OUTPUT_KEYS = %i[uri storage].freeze
|
9
|
+
PARAMS_KEYS = %i[ocr_lang ocr_type].freeze
|
10
|
+
STORAGE_OPTIONS = %i[S3 SHAREPOINT DROPBOX BLOB].freeze
|
11
|
+
|
12
|
+
def initialize(api)
|
13
|
+
super
|
14
|
+
@download_from_external = false
|
15
|
+
@download_uri = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute(url, options = {})
|
19
|
+
@download_from_external = options[:download_from_external] || false
|
20
|
+
options[:input][:uri] = options[:input][:uri] || url
|
21
|
+
validate_options(options)
|
22
|
+
|
23
|
+
@download_uri = options[:output][:uri] if @download_from_external
|
24
|
+
|
25
|
+
response = @api.post(OPERATION_ENDPOINT,
|
26
|
+
body: request_body(asset.id, options),
|
27
|
+
headers: request_headers)
|
28
|
+
handle_response(response, asset.id)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def request_body(asset_id, options)
|
34
|
+
{
|
35
|
+
assetID: asset_id,
|
36
|
+
input: camelize_keys(options[:input]),
|
37
|
+
output: camelize_keys(options[:output]),
|
38
|
+
params: camelize_keys(options[:params])
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
def handle_polling_done(_json_response, original_asset)
|
43
|
+
file = @api.get(@download_uri).body if @download_from_external
|
44
|
+
super
|
45
|
+
file || true
|
46
|
+
end
|
47
|
+
|
48
|
+
def validate_options(options)
|
49
|
+
raise ArgumentError, 'Options must be a hash' unless options.is_a?(Hash)
|
50
|
+
|
51
|
+
ocr_lang = options[:params][:ocr_lang]
|
52
|
+
ocr_type = options[:params][:ocr_type]
|
53
|
+
|
54
|
+
validate_required_keys(options)
|
55
|
+
validate_input_options(options[:input])
|
56
|
+
validate_output_options(options[:output])
|
57
|
+
validate_ocr_lang_option(ocr_lang) if ocr_lang
|
58
|
+
validate_ocr_type_option(ocr_type) if ocr_type
|
59
|
+
end
|
60
|
+
|
61
|
+
def validate_required_keys(options)
|
62
|
+
required_keys = EXTERNAL_OPTIONS - %i[download_from_external]
|
63
|
+
required_keys.each do |key|
|
64
|
+
raise ArgumentError, "Missing required key: #{key}" unless options.key?(key)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def validate_input_options(input_options)
|
69
|
+
raise ArgumentError, 'Input options must be a hash' unless input_options.is_a?(Hash)
|
70
|
+
|
71
|
+
required_input_keys = INPUT_KEYS
|
72
|
+
required_input_keys.each do |key|
|
73
|
+
raise ArgumentError, "Missing required input key: #{key}" unless input_options.key?(key)
|
74
|
+
end
|
75
|
+
validate_storage_options(input_options[:storage])
|
76
|
+
end
|
77
|
+
|
78
|
+
def validate_output_options(output_options)
|
79
|
+
raise ArgumentError, 'Output options must be a hash' unless output_options.is_a?(Hash)
|
80
|
+
|
81
|
+
unless output_options.key?(:uri) && @download_from_external
|
82
|
+
raise ArgumentError,
|
83
|
+
'Output options must contain uri when downloading from external storage'
|
84
|
+
end
|
85
|
+
|
86
|
+
required_output_keys = OUTPUT_KEYS - %i[uri]
|
87
|
+
required_output_keys.each do |key|
|
88
|
+
raise ArgumentError, "Missing required output key: #{key}" unless output_options.key?(key)
|
89
|
+
end
|
90
|
+
validate_storage_options(output_options[:storage])
|
91
|
+
end
|
92
|
+
|
93
|
+
def validate_storage_option(storage_option)
|
94
|
+
return if STORAGE_OPTIONS.include?(storage_option)
|
95
|
+
|
96
|
+
raise ArgumentError,
|
97
|
+
"Invalid storage option: #{storage_option}"
|
98
|
+
end
|
99
|
+
|
100
|
+
def validate_params_options(params_options)
|
101
|
+
raise ArgumentError, 'Params options must be a hash' unless params_options.is_a?(Hash)
|
102
|
+
|
103
|
+
params_options.each_key do |key|
|
104
|
+
raise ArgumentError, "Invalid params option: #{key}" unless PARAMS_KEYS.include?(key)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PdfServices
|
4
|
+
module Ocr
|
5
|
+
class Internal < Operation
|
6
|
+
INTERNAL_OPTIONS = %i[ocr_lang ocr_type notifiers].freeze
|
7
|
+
|
8
|
+
def execute(html_file_path, options = {})
|
9
|
+
validate_options(options)
|
10
|
+
asset = upload_asset(html_file_path)
|
11
|
+
|
12
|
+
response = @api.post(OPERATION_ENDPOINT,
|
13
|
+
body: request_body(asset.id, options),
|
14
|
+
headers: request_headers)
|
15
|
+
|
16
|
+
handle_response(response, asset.id)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def handle_polling_done(json_response, _original_asset_id)
|
22
|
+
asset_id = json_response['asset']['assetID']
|
23
|
+
Asset.new(@api).download(asset_id).body
|
24
|
+
end
|
25
|
+
|
26
|
+
def request_body(asset_id, options)
|
27
|
+
body = {
|
28
|
+
assetID: asset_id
|
29
|
+
}
|
30
|
+
body[:ocrLang] = options[:ocr_lang] if options[:ocr_lang]
|
31
|
+
body[:ocrType] = options[:ocr_type] if options[:ocr_type]
|
32
|
+
body[:notifiers] = options[:notifiers] if options[:notifiers]
|
33
|
+
body
|
34
|
+
end
|
35
|
+
|
36
|
+
def validate_options(options)
|
37
|
+
raise ArgumentError, 'Invalid options' unless options.is_a?(Hash)
|
38
|
+
|
39
|
+
options.each_key do |key|
|
40
|
+
raise ArgumentError, "Invalid option: #{key}" unless INTERNAL_OPTIONS.include?(key)
|
41
|
+
end
|
42
|
+
|
43
|
+
validate_ocr_lang_option(options[:ocr_lang]) if options[:ocr_lang]
|
44
|
+
validate_ocr_type_option(options[:ocr_type]) if options[:ocr_type]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PdfServices
|
4
|
+
module Ocr
|
5
|
+
class Operation < InternalExternalOperation::Operation
|
6
|
+
OCR_ENDPOINT = 'https://pdf-services-ue1.adobe.io/operation/ocr'
|
7
|
+
OCR_LANGS = %w[
|
8
|
+
da-DK lt-LT sl-SI el-GR ru-RU en-US zh-HK hu-HU et-EE
|
9
|
+
pt-BR uk-UA nb-NO pl-PL lv-LV fi-FI ja-JP es-ES bg-BG
|
10
|
+
en-GB cs-CZ mt-MT de-DE hr-HR sk-SK sr-SR ca-CA mk-MK
|
11
|
+
ko-KR de-CH nl-NL zh-CN sv-SE it-IT no-NO tr-TR fr-FR
|
12
|
+
ro-RO iw-IL
|
13
|
+
].freeze
|
14
|
+
|
15
|
+
OCR_TYPES = %w[searchable_image searchable_image_exact].freeze
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def validate_ocr_lang_option(ocr_lang)
|
20
|
+
raise ArgumentError, "Invalid ocr_lang option: #{ocr_lang}" unless OCR_LANGS.include?(ocr_lang)
|
21
|
+
end
|
22
|
+
|
23
|
+
def validate_ocr_type_option(ocr_type)
|
24
|
+
raise ArgumentError, "Invalid ocr_type option: #{ocr_type}" unless OCR_TYPES.include?(ocr_type)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: adobe_pdfservices_ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jimmy Bosse
|
8
|
+
- Ben Terova
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2024-01-25 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: faraday
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '2.9'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '2.9'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: json
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '2.6'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '2.6'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: mimemagic
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 0.4.3
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.4.3
|
56
|
+
description: An Adobe PDF Services Ruby SDK provides APIs for creating, combining,
|
57
|
+
exporting and manipulating PDFs.
|
58
|
+
email:
|
59
|
+
- jimmy.bosse@ankura.com
|
60
|
+
- ben@benterova.com
|
61
|
+
executables: []
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files: []
|
64
|
+
files:
|
65
|
+
- ".rubocop.yml"
|
66
|
+
- ".vscode/extensions.json"
|
67
|
+
- ".vscode/settings.json"
|
68
|
+
- CHANGELOG.md
|
69
|
+
- CODE_OF_CONDUCT.md
|
70
|
+
- Gemfile
|
71
|
+
- Gemfile.lock
|
72
|
+
- LICENSE.txt
|
73
|
+
- README.md
|
74
|
+
- Rakefile
|
75
|
+
- adobe_pdfservices_ruby.gemspec
|
76
|
+
- lib/adobe_pdfservices_ruby.rb
|
77
|
+
- lib/pdfservices/api.rb
|
78
|
+
- lib/pdfservices/asset.rb
|
79
|
+
- lib/pdfservices/client.rb
|
80
|
+
- lib/pdfservices/errors.rb
|
81
|
+
- lib/pdfservices/operations/base.rb
|
82
|
+
- lib/pdfservices/operations/document_generation.rb
|
83
|
+
- lib/pdfservices/operations/document_generation/external.rb
|
84
|
+
- lib/pdfservices/operations/document_generation/internal.rb
|
85
|
+
- lib/pdfservices/operations/extract_pdf.rb
|
86
|
+
- lib/pdfservices/operations/html_to_pdf.rb
|
87
|
+
- lib/pdfservices/operations/html_to_pdf/external.rb
|
88
|
+
- lib/pdfservices/operations/html_to_pdf/internal.rb
|
89
|
+
- lib/pdfservices/operations/internal_external_operation.rb
|
90
|
+
- lib/pdfservices/operations/ocr.rb
|
91
|
+
- lib/pdfservices/operations/ocr/external.rb
|
92
|
+
- lib/pdfservices/operations/ocr/internal.rb
|
93
|
+
- lib/pdfservices/version.rb
|
94
|
+
homepage: https://github.com/benterova/adobe_pdfservices_ruby/blob/main/README.md
|
95
|
+
licenses:
|
96
|
+
- MIT
|
97
|
+
metadata:
|
98
|
+
homepage_uri: https://github.com/benterova/adobe_pdfservices_ruby/blob/main/README.md
|
99
|
+
source_code_uri: https://github.com/benterova/adobe_pdfservices_ruby
|
100
|
+
changelog_uri: https://github.com/benterova/adobe_pdfservices_ruby/blob/main/CHANGELOG.md
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options: []
|
103
|
+
require_paths:
|
104
|
+
- lib
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 3.0.0
|
110
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
requirements: []
|
116
|
+
rubygems_version: 3.4.10
|
117
|
+
signing_key:
|
118
|
+
specification_version: 4
|
119
|
+
summary: Adobe PDF Services Ruby
|
120
|
+
test_files: []
|