libreconv 0.6.1 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +10 -0
- data/README.md +7 -2
- data/Rakefile +5 -0
- data/doc.pdf +79 -0
- data/lib/libreconv/version.rb +1 -1
- data/lib/libreconv.rb +7 -4
- data/libreconv.gemspec +1 -0
- data/spec/libreconv_spec.rb +35 -19
- metadata +18 -4
- data/spec/fixtures/bin.bin +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d7dc0c6cbb0739fa5b66291ca92f91cfd96851c
|
4
|
+
data.tar.gz: 736c8bbebcbe160492093410c98f3f2ccc2f596e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8eeed18bc37356b6f5b900468c181825c798d9c433275bd13e1a0c970d79d0afe48c4cc22d0e854ff4870b46905d0979f06c3cff8a0a4f47dc7efd3d2fa43c52
|
7
|
+
data.tar.gz: e9f7fe927979a2fb3409f7494e6f8f15421630fbbb718700aca6c6831055e6aa9ed4900d54b75afe1cb349c85340a6811cc2ae2cec65620a6a6db665949e79af
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
Convert office documents to PDF using LibreOffice / OpenOffice.
|
4
4
|
|
5
5
|
[![Code Climate](https://codeclimate.com/github/ricn/libreconv.png)](https://codeclimate.com/github/ricn/libreconv)
|
6
|
+
[![Build Status](https://travis-ci.org/ricn/libreconv.png?branch=master)](https://travis-ci.org/ricn/libreconv)
|
6
7
|
|
7
8
|
## Installation
|
8
9
|
|
@@ -25,12 +26,16 @@ You need to install Libreoffice or Openoffice on your system to use this gem. Th
|
|
25
26
|
```ruby
|
26
27
|
require 'libreconv'
|
27
28
|
|
28
|
-
# Converts document.docx to
|
29
|
+
# Converts document.docx to my_document_as.pdf
|
30
|
+
# This requires that the soffice binary is present in your PATH.
|
31
|
+
Libreconv.convert('document.docx', '/Users/ricn/pdf_documents/my_document_as.pdf')
|
32
|
+
|
33
|
+
# Converts document.docx to pdf and writes the output to the specified path
|
29
34
|
# This requires that the soffice binary is present in your PATH.
|
30
35
|
Libreconv.convert('document.docx', '/Users/ricn/pdf_documents')
|
31
36
|
|
32
37
|
# You can also convert a source file directly from an URL
|
33
|
-
Libreconv.convert('http://myserver.com/123/document.docx', '/Users/ricn/pdf_documents')
|
38
|
+
Libreconv.convert('http://myserver.com/123/document.docx', '/Users/ricn/pdf_documents/doc.pdf')
|
34
39
|
|
35
40
|
# Converts document.docx to document.pdf
|
36
41
|
# If you for some reason can't have soffice in your PATH you can specifiy the file path to the soffice binary
|
data/Rakefile
CHANGED
data/doc.pdf
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
%PDF-1.4
|
2
|
+
%äüöß
|
3
|
+
2 0 obj
|
4
|
+
<</Length 3 0 R/Filter/FlateDecode>>
|
5
|
+
stream
|
6
|
+
x��P;�0��+nZ��]!��nB�A�|l�]��^s�(H.��\�Z�]ݠ��+|m�u�na8�����.j��G����k
|
7
|
+
}=�dXȧ����{o�%��(j�� ���+��n�3v�����\��g�H.��\|}�4����?
|
8
|
+
�䳴?C�=�Q�a�y����je�i�
|
9
|
+
endstream
|
10
|
+
endobj
|
11
|
+
|
12
|
+
3 0 obj
|
13
|
+
216
|
14
|
+
endobj
|
15
|
+
|
16
|
+
5 0 obj
|
17
|
+
<</Type/Font/Subtype/Type1/BaseFont/Helvetica
|
18
|
+
/Encoding/WinAnsiEncoding
|
19
|
+
>>
|
20
|
+
endobj
|
21
|
+
|
22
|
+
6 0 obj
|
23
|
+
<</F1 5 0 R
|
24
|
+
>>
|
25
|
+
endobj
|
26
|
+
|
27
|
+
7 0 obj
|
28
|
+
<</Font 6 0 R
|
29
|
+
/ProcSet[/PDF/Text]
|
30
|
+
>>
|
31
|
+
endobj
|
32
|
+
|
33
|
+
1 0 obj
|
34
|
+
<</Type/Page/Parent 4 0 R/Resources 7 0 R/MediaBox[0 0 595 842]/Group<</S/Transparency/CS/DeviceRGB/I true>>/Contents 2 0 R>>
|
35
|
+
endobj
|
36
|
+
|
37
|
+
4 0 obj
|
38
|
+
<</Type/Pages
|
39
|
+
/Resources 7 0 R
|
40
|
+
/MediaBox[ 0 0 595 842 ]
|
41
|
+
/Kids[ 1 0 R ]
|
42
|
+
/Count 1>>
|
43
|
+
endobj
|
44
|
+
|
45
|
+
8 0 obj
|
46
|
+
<</Type/Catalog/Pages 4 0 R
|
47
|
+
/OpenAction[1 0 R /XYZ null null 0]
|
48
|
+
/Lang(en)
|
49
|
+
>>
|
50
|
+
endobj
|
51
|
+
|
52
|
+
9 0 obj
|
53
|
+
<</Creator<FEFF005700720069007400650072>
|
54
|
+
/Producer<FEFF004C0069006200720065004F0066006600690063006500200034002E0030>
|
55
|
+
/CreationDate(D:20130413003036+02'00')>>
|
56
|
+
endobj
|
57
|
+
|
58
|
+
xref
|
59
|
+
0 10
|
60
|
+
0000000000 65535 f
|
61
|
+
0000000501 00000 n
|
62
|
+
0000000019 00000 n
|
63
|
+
0000000306 00000 n
|
64
|
+
0000000643 00000 n
|
65
|
+
0000000326 00000 n
|
66
|
+
0000000417 00000 n
|
67
|
+
0000000448 00000 n
|
68
|
+
0000000741 00000 n
|
69
|
+
0000000834 00000 n
|
70
|
+
trailer
|
71
|
+
<</Size 10/Root 8 0 R
|
72
|
+
/Info 9 0 R
|
73
|
+
/ID [ <5B1DA112593D69DE853EB34CE2A8F361>
|
74
|
+
<5B1DA112593D69DE853EB34CE2A8F361> ]
|
75
|
+
/DocChecksum /4269040604A6FE91FF4EF9808079BD6D
|
76
|
+
>>
|
77
|
+
startxref
|
78
|
+
1008
|
79
|
+
%%EOF
|
data/lib/libreconv/version.rb
CHANGED
data/lib/libreconv.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "libreconv/version"
|
2
2
|
require "uri"
|
3
3
|
require "net/http"
|
4
|
+
require "tmpdir"
|
4
5
|
|
5
6
|
module Libreconv
|
6
7
|
|
@@ -11,9 +12,10 @@ module Libreconv
|
|
11
12
|
class Converter
|
12
13
|
attr_accessor :soffice_command
|
13
14
|
|
14
|
-
def initialize(source,
|
15
|
+
def initialize(source, target, soffice_command = nil)
|
15
16
|
@source = source
|
16
|
-
@
|
17
|
+
@target = target
|
18
|
+
@target_path = Dir.tmpdir
|
17
19
|
@soffice_command = soffice_command
|
18
20
|
determine_soffice_command
|
19
21
|
check_source_type
|
@@ -27,6 +29,8 @@ module Libreconv
|
|
27
29
|
cmd = "#{@soffice_command} --headless --convert-to pdf #{@source} -outdir #{@target_path}"
|
28
30
|
pid = Process.spawn(cmd, [:out, :err] => "/dev/null")
|
29
31
|
Process.waitpid(pid)
|
32
|
+
target_tmp_file = "#{@target_path}/#{File.basename(@source, ".*")}.pdf"
|
33
|
+
FileUtils.cp target_tmp_file, @target
|
30
34
|
end
|
31
35
|
|
32
36
|
private
|
@@ -53,8 +57,7 @@ module Libreconv
|
|
53
57
|
def check_source_type
|
54
58
|
is_file = File.exists?(@source) && !File.directory?(@source)
|
55
59
|
is_http = URI(@source).scheme == "http" && Net::HTTP.get_response(URI(@source)).is_a?(Net::HTTPSuccess)
|
56
|
-
is_https = URI(@source).scheme == "https" && Net::HTTP.get_response(URI(@source)).is_a?(Net::HTTPSuccess)
|
57
|
-
|
60
|
+
is_https = URI(@source).scheme == "https" && Net::HTTP.get_response(URI(@source)).is_a?(Net::HTTPSuccess)
|
58
61
|
raise IOError, "Source (#{@source}) is neither a file nor an URL." unless is_file || is_http || is_https
|
59
62
|
end
|
60
63
|
end
|
data/libreconv.gemspec
CHANGED
data/spec/libreconv_spec.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
|
3
2
|
require 'spec_helper'
|
3
|
+
require 'webrick'
|
4
|
+
|
5
|
+
include WEBrick
|
4
6
|
|
5
7
|
describe Libreconv do
|
6
8
|
|
@@ -9,14 +11,29 @@ describe Libreconv do
|
|
9
11
|
@doc_file = file_path("doc.doc")
|
10
12
|
@pptx_file = file_path("pptx.pptx")
|
11
13
|
@ppt_file = file_path("ppt.ppt")
|
12
|
-
@bin_file = file_path("bin.bin")
|
13
14
|
@target_path = "/tmp/libreconv"
|
15
|
+
|
16
|
+
dir = File.expand_path(File.join(File.dirname(__FILE__), 'fixtures'))
|
17
|
+
port = 50506
|
18
|
+
@url = "http://#{Socket.gethostname}:#{port}"
|
19
|
+
@t1 = Thread.new do
|
20
|
+
@server = HTTPServer.new(:Port => port, :DocumentRoot => dir, :AccessLog => [], :Logger => WEBrick::Log::new("/dev/null", 7))
|
21
|
+
@server.start
|
22
|
+
end
|
14
23
|
end
|
15
24
|
|
16
|
-
|
25
|
+
before(:each) do
|
26
|
+
FileUtils.mkdir_p @target_path
|
27
|
+
end
|
28
|
+
|
29
|
+
after(:each) do
|
17
30
|
FileUtils.rm_rf @target_path
|
18
31
|
end
|
19
32
|
|
33
|
+
after(:all) do
|
34
|
+
@t1.exit
|
35
|
+
end
|
36
|
+
|
20
37
|
describe Libreconv::Converter do
|
21
38
|
describe "#new" do
|
22
39
|
it "should raise error if soffice command does not exists" do
|
@@ -29,48 +46,47 @@ describe Libreconv do
|
|
29
46
|
end
|
30
47
|
|
31
48
|
describe "#convert" do
|
49
|
+
it "should convert a docx do pdf specifying target_file" do
|
50
|
+
target_file = "#{@target_path}/#{File.basename(@doc_file, ".doc")}.pdf"
|
51
|
+
converter = Libreconv::Converter.new(@doc_file, target_file)
|
52
|
+
converter.convert
|
53
|
+
File.file?(target_file).should == true
|
54
|
+
end
|
55
|
+
|
32
56
|
it "should convert a doc to pdf" do
|
33
57
|
target_file = "#{@target_path}/#{File.basename(@doc_file, ".doc")}.pdf"
|
34
58
|
converter = Libreconv::Converter.new(@doc_file, @target_path)
|
35
59
|
converter.convert
|
36
|
-
File.
|
60
|
+
File.file?(target_file).should == true
|
37
61
|
end
|
38
62
|
|
39
63
|
it "should convert a docx to pdf" do
|
40
64
|
target_file = "#{@target_path}/#{File.basename(@docx_file, ".docx")}.pdf"
|
41
65
|
converter = Libreconv::Converter.new(@docx_file, @target_path)
|
42
66
|
converter.convert
|
43
|
-
File.
|
67
|
+
File.file?(target_file).should == true
|
44
68
|
end
|
45
69
|
|
46
70
|
it "should convert a pptx to pdf" do
|
47
71
|
target_file = "#{@target_path}/#{File.basename(@pptx_file, ".pptx")}.pdf"
|
48
72
|
converter = Libreconv::Converter.new(@pptx_file, @target_path)
|
49
73
|
converter.convert
|
50
|
-
File.
|
74
|
+
File.file?(target_file).should == true
|
51
75
|
end
|
52
76
|
|
53
77
|
it "should convert a ppt to pdf" do
|
54
78
|
target_file = "#{@target_path}/#{File.basename(@ppt_file, ".ppt")}.pdf"
|
55
79
|
converter = Libreconv::Converter.new(@ppt_file, @target_path)
|
56
80
|
converter.convert
|
57
|
-
File.
|
81
|
+
File.file?(target_file).should == true
|
58
82
|
end
|
59
83
|
|
60
84
|
it "should convert a docx to pdf specifying an URL as source" do
|
61
|
-
url = "
|
62
|
-
target_file = "#{@target_path}/
|
85
|
+
url = "#{@url}/docx.docx"
|
86
|
+
target_file = "#{@target_path}/docx.pdf"
|
63
87
|
converter = Libreconv::Converter.new(url, @target_path)
|
64
88
|
converter.convert
|
65
|
-
File.
|
66
|
-
end
|
67
|
-
|
68
|
-
it "try converting binary file" do
|
69
|
-
source = @bin_file
|
70
|
-
target_file = "#{@target_path}/#{File.basename(source, ".bin")}.pdf"
|
71
|
-
converter = Libreconv::Converter.new(source, @target_path)
|
72
|
-
converter.convert
|
73
|
-
File.exists?(target_file).should == false
|
89
|
+
File.file?(target_file).should == true
|
74
90
|
end
|
75
91
|
end
|
76
92
|
|
@@ -92,7 +108,7 @@ describe Libreconv do
|
|
92
108
|
it "should convert a file to pdf" do
|
93
109
|
target_file = "#{@target_path}/#{File.basename(@doc_file, ".doc")}.pdf"
|
94
110
|
Libreconv.convert(@doc_file, @target_path)
|
95
|
-
File.
|
111
|
+
File.file?(target_file).should == true
|
96
112
|
end
|
97
113
|
end
|
98
114
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libreconv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Nyström
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
description: ' Convert office documents to PDF using LibreOffice / OpenOffice for
|
42
56
|
the heavy lifting. '
|
43
57
|
email:
|
@@ -48,14 +62,15 @@ extra_rdoc_files: []
|
|
48
62
|
files:
|
49
63
|
- .gitignore
|
50
64
|
- .rspec
|
65
|
+
- .travis.yml
|
51
66
|
- Gemfile
|
52
67
|
- LICENSE.txt
|
53
68
|
- README.md
|
54
69
|
- Rakefile
|
70
|
+
- doc.pdf
|
55
71
|
- lib/libreconv.rb
|
56
72
|
- lib/libreconv/version.rb
|
57
73
|
- libreconv.gemspec
|
58
|
-
- spec/fixtures/bin.bin
|
59
74
|
- spec/fixtures/doc.doc
|
60
75
|
- spec/fixtures/docx.docx
|
61
76
|
- spec/fixtures/ppt.ppt
|
@@ -88,7 +103,6 @@ signing_key:
|
|
88
103
|
specification_version: 4
|
89
104
|
summary: Convert office documents to PDF.
|
90
105
|
test_files:
|
91
|
-
- spec/fixtures/bin.bin
|
92
106
|
- spec/fixtures/doc.doc
|
93
107
|
- spec/fixtures/docx.docx
|
94
108
|
- spec/fixtures/ppt.ppt
|
data/spec/fixtures/bin.bin
DELETED
Binary file
|