asciidoctor-pdf 1.5.3 → 1.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +70 -1
- data/{LICENSE.adoc → LICENSE} +3 -4
- data/NOTICE.adoc +4 -6
- data/README.adoc +139 -46
- data/asciidoctor-pdf.gemspec +11 -14
- data/bin/asciidoctor-pdf-optimize +1 -1
- data/docs/theming-guide.adoc +34 -28
- data/lib/asciidoctor/pdf/converter.rb +87 -77
- data/lib/asciidoctor/pdf/ext/asciidoctor/section.rb +3 -2
- data/lib/asciidoctor/pdf/ext/core/file.rb +4 -5
- data/lib/asciidoctor/pdf/ext/core.rb +0 -1
- data/lib/asciidoctor/pdf/ext/pdf-core/pdf_object.rb +1 -1
- data/lib/asciidoctor/pdf/ext/pdf-core.rb +17 -0
- data/lib/asciidoctor/pdf/ext/prawn/coderay_encoder.rb +4 -13
- data/lib/asciidoctor/pdf/ext/prawn/extensions.rb +28 -2
- data/lib/asciidoctor/pdf/ext/prawn/font_metric_cache.rb +1 -1
- data/lib/asciidoctor/pdf/ext/prawn/formatted_text/arranger.rb +15 -0
- data/lib/asciidoctor/pdf/ext/prawn-svg.rb +0 -1
- data/lib/asciidoctor/pdf/ext/prawn.rb +1 -0
- data/lib/asciidoctor/pdf/ext/pygments.rb +11 -9
- data/lib/asciidoctor/pdf/ext.rb +0 -1
- data/lib/asciidoctor/pdf/formatted_text/fragment_position_renderer.rb +5 -1
- data/lib/asciidoctor/pdf/formatted_text/inline_image_arranger.rb +8 -1
- data/lib/asciidoctor/pdf/formatted_text/transform.rb +6 -4
- data/lib/asciidoctor/pdf/index_catalog.rb +1 -1
- data/lib/asciidoctor/pdf/optimizer.rb +40 -12
- data/lib/asciidoctor/pdf/pdfmark.rb +1 -2
- data/lib/asciidoctor/pdf/text_transformer.rb +10 -73
- data/lib/asciidoctor/pdf/theme_loader.rb +1 -1
- data/lib/asciidoctor/pdf/version.rb +1 -1
- data/lib/asciidoctor/pdf.rb +3 -0
- metadata +21 -63
- data/lib/asciidoctor/pdf/ext/core/numeric.rb +0 -26
- data/lib/asciidoctor/pdf/ext/prawn-svg/interface.rb +0 -14
- data/lib/asciidoctor/pdf/ext/prawn-templates.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8acb8483d431db066ec50cd65e6da2d59055c5140c4b41d3500ee9b83a85dcd2
|
4
|
+
data.tar.gz: 523bc1fea41b743c4eccece4b1b8dabb09c278fa20e71cb647d2d7add8c691f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04e279e44bfb426474e8ceff464ed41e37b9eaa570bf6824781b938cf6936d203e5ba58d2f533dfc7c558f0d25569cd3cb3ce198d22a72a2f3363f3852b0271f
|
7
|
+
data.tar.gz: c859b5eabc90ffcd082866201bd11106cfb6f78ba476f9467e42ec6a873286bb5ac4232f7d8c552b959ba5232069def91580daed60fdf825ff60268236bec151
|
data/CHANGELOG.adoc
CHANGED
@@ -3,7 +3,76 @@
|
|
3
3
|
:uri-repo: https://github.com/asciidoctor/asciidoctor-pdf
|
4
4
|
|
5
5
|
This document provides a high-level view of the changes to the {project-name} by release.
|
6
|
-
For a detailed view of what has changed, refer to the {uri-repo}/commits/
|
6
|
+
For a detailed view of what has changed, refer to the {uri-repo}/commits/v1.6.x[commit history] on GitHub.
|
7
|
+
|
8
|
+
== 1.6.2 (2021-12-31) - @mojavelinux
|
9
|
+
|
10
|
+
Enhancements::
|
11
|
+
|
12
|
+
* show URL of link for any media type when show-link-uri is set (#951)
|
13
|
+
* do not show URL of link when media type is screen or prepress when show-link-uri is unset (#951)
|
14
|
+
|
15
|
+
Bug Fixes::
|
16
|
+
|
17
|
+
* update patches for `PDF::Core.real` and `PDF::Core.real_params` to prevent scientific notation ending up in PDF (#1983) (@rillbert)
|
18
|
+
|
19
|
+
== 1.6.1 (2021-09-04) - @mojavelinux
|
20
|
+
|
21
|
+
Enhancements::
|
22
|
+
|
23
|
+
* align footnotes block to the bottom of the page it is placed on (#1833)
|
24
|
+
|
25
|
+
Bug Fixes::
|
26
|
+
|
27
|
+
* patch Prawn to preserve leading null character when running on Ruby 3; preserves inline anchors when text is split by page (#1963)
|
28
|
+
|
29
|
+
== 1.6.0 (2021-05-10) - @mojavelinux
|
30
|
+
|
31
|
+
Enhancements::
|
32
|
+
|
33
|
+
* allow path of ghostscript command to be controlled using `GS` env var (#1791)
|
34
|
+
|
35
|
+
Bug Fixes::
|
36
|
+
|
37
|
+
* do not hyphenate a hyphen when hyphenation is enabled (#1562)
|
38
|
+
|
39
|
+
Compliance::
|
40
|
+
|
41
|
+
* add support for Ruby 3 and drop support for Ruby < 2.5 and JRuby < 9.2 (#1681)
|
42
|
+
* upgrade to Prawn 2.4.0 (adds support for Ruby 3)
|
43
|
+
* upgrade to prawn-svg 0.32 (adds support for Ruby 3 without a patch and for loading embedded images from a data URI)
|
44
|
+
* upgrade to prawn-icon 3.0.x
|
45
|
+
* release lock on ttfunk version (1.6 produces slightly different output from 1.5 for certain missing glyphs)
|
46
|
+
* drop support for Asciidoctor < 2 (#1552)
|
47
|
+
|
48
|
+
Build / Infrastructure::
|
49
|
+
|
50
|
+
* run tests against pygments.rb 2.x in addition to pygments.rb 1.2.0
|
51
|
+
|
52
|
+
== 1.5.4 (2021-01-09) - @mojavelinux
|
53
|
+
|
54
|
+
Bug Fixes::
|
55
|
+
|
56
|
+
* restore compatibility with Asciidoctor 2.0.12 when using Pygments (#1846)
|
57
|
+
* fix numeric assertions in test suite (#1542)
|
58
|
+
* keep caption with image when image is scaled down to fit page (#1803)
|
59
|
+
* prevent inline image from rendering multiple times if fallback font is used for alt text (#1858)
|
60
|
+
* disable cache tests if open-uri-cache gem is not available
|
61
|
+
* disable hyphen tests if text-hyphen gem is not available
|
62
|
+
* compensate for change in how character_spacing is applied in FontMetricCache#width_of after Prawn 2.2.2
|
63
|
+
* allow inline image to be enclosed in link macro (alt text was breaking parsing)
|
64
|
+
* use oembed API over HTTPS to get thumbnail for Vimeo video
|
65
|
+
* use conum font family defined in theme for conum in verbatim block (#1611)
|
66
|
+
* patch float precision constant so prawn-table does not fail to arrange cells that span columns (#1835)
|
67
|
+
* resolve images in theme correctly when theme is loaded from classloader (JRuby only) (#1829)
|
68
|
+
|
69
|
+
Compliance::
|
70
|
+
|
71
|
+
* upgrade to prawn-svg 0.31 (adds support for loading embedded images from a data URI) (#1810)
|
72
|
+
|
73
|
+
Build / Infrastructure::
|
74
|
+
|
75
|
+
* migrate Linux CI jobs to GitHub Actions
|
7
76
|
|
8
77
|
== 1.5.3 (2020-02-28) - @mojavelinux
|
9
78
|
|
data/{LICENSE.adoc → LICENSE}
RENAMED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
Copyright (C) 2014-
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (C) 2014-present OpenDevise Inc. and the Asciidoctor Project
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
@@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
21
|
THE SOFTWARE.
|
22
|
-
....
|
data/NOTICE.adoc
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
= Asciidoctor PDF
|
2
2
|
OpenDevise Inc.; Asciidoctor Project
|
3
3
|
|
4
|
-
Copyright (C) 2014-
|
4
|
+
Copyright (C) 2014-present OpenDevise Inc. and the Asciidoctor Project.
|
5
5
|
|
6
6
|
Please visit the Asciidoctor project site for more information:
|
7
7
|
|
@@ -54,11 +54,9 @@ RomanNumeral class::
|
|
54
54
|
|
55
55
|
- https://github.com/AndrewVos/roman-numerals
|
56
56
|
|
57
|
-
|
58
|
-
The
|
59
|
-
The PrawnEncoder was written by Felipe Doria and
|
60
|
-
|
61
|
-
http://www.gnu.org/licenses/gpl-3.0.html
|
57
|
+
Asciidoctor::Prawn::CodeRayEncoder class::
|
58
|
+
The Asciidoctor::Prawn::CodeRayEncoder class, which is used for syntax highlighting source code for use with Prawn, is borrowed from the Prawn project and modified for the purpose of this application.
|
59
|
+
The PrawnEncoder was written by Felipe Doria and may be used under Matz's original licensing terms for Ruby, the GPLv2 license, or the GPLv3 license.
|
62
60
|
|
63
61
|
- https://github.com/prawnpdf/prawn
|
64
62
|
|
data/README.adoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
= Asciidoctor PDF: A native PDF converter for AsciiDoc
|
2
2
|
Dan Allen <https://github.com/mojavelinux[@mojavelinux]>; Sarah White <https://github.com/graphitefriction[@graphitefriction]>
|
3
|
-
v1.
|
3
|
+
v1.6.2, 2021-12-31
|
4
4
|
// Settings:
|
5
5
|
:experimental:
|
6
6
|
:idprefix:
|
@@ -23,7 +23,8 @@ endif::[]
|
|
23
23
|
:project-name: Asciidoctor PDF
|
24
24
|
:project-handle: asciidoctor-pdf
|
25
25
|
// Variables:
|
26
|
-
:release-
|
26
|
+
:release-line: 1.6.x
|
27
|
+
:release-version: 1.6.2
|
27
28
|
// URIs:
|
28
29
|
:url-asciidoctor: http://asciidoctor.org
|
29
30
|
:url-gem: http://rubygems.org/gems/asciidoctor-pdf
|
@@ -39,10 +40,9 @@ endif::[]
|
|
39
40
|
:url-graphicsmagick: http://www.graphicsmagick.org
|
40
41
|
|
41
42
|
ifdef::status[]
|
42
|
-
image:https://img.shields.io/
|
43
|
-
image:
|
43
|
+
image:https://img.shields.io/badge/zulip-join_chat-brightgreen.svg[project chat,link=https://asciidoctor.zulipchat.com/]
|
44
|
+
image:{url-project-repo}/workflows/CI/badge.svg?branch=v{release-line}[Build Status (GitHub Actions),link={url-project-repo}/actions?query=workflow%3ACI+branch%3Av{release-line}]
|
44
45
|
image:https://img.shields.io/gem/v/asciidoctor-pdf.svg[Latest Release, link={url-gem}]
|
45
|
-
image:https://img.shields.io/badge/license-MIT-blue.svg[MIT License, link=#copyright]
|
46
46
|
endif::[]
|
47
47
|
|
48
48
|
Asciidoctor PDF is a native PDF converter for AsciiDoc.
|
@@ -50,6 +50,12 @@ It bypasses the requirement to generate an intermediary format such as DocBook,
|
|
50
50
|
Instead, you can use this extension to convert your documents directly from AsciiDoc to PDF.
|
51
51
|
Its aim is to take the pain out of creating PDF documents from AsciiDoc.
|
52
52
|
|
53
|
+
NOTE: You're viewing the documentation for the {release-line} release line.
|
54
|
+
If you're looking for the documentation for another release line, please refer to one of the following branches: +
|
55
|
+
{url-project-repo}/tree/main#readme[2.0.x]
|
56
|
+
⁃
|
57
|
+
{url-project-repo}/tree/v1.5.x#readme[1.5.x]
|
58
|
+
|
53
59
|
toc::[]
|
54
60
|
|
55
61
|
== Overview
|
@@ -71,7 +77,7 @@ But don't miss the <<Highlights>> to get a preview of what's possible.
|
|
71
77
|
|
72
78
|
* Direct AsciiDoc to PDF conversion
|
73
79
|
* <<docs/theming-guide.adoc#,Configuration-driven theme (style and layout)>>
|
74
|
-
* Custom (TTF)
|
80
|
+
* Custom fonts (TTF or OTF)
|
75
81
|
* Full SVG support (thanks to https://github.com/mogest/prawn-svg[prawn-svg])
|
76
82
|
* PDF document outline (i.e., bookmarks)
|
77
83
|
* Title page
|
@@ -98,7 +104,7 @@ But don't miss the <<Highlights>> to get a preview of what's possible.
|
|
98
104
|
== Known Limitations
|
99
105
|
|
100
106
|
* Footnotes are always rendered as endnotes (at end of chapter for books; at end of document for all other doctypes)
|
101
|
-
* Table cells that exceed height of a single page will be truncated (see https://github.com/prawnpdf/prawn-table/issues/41[prawn-table#41])
|
107
|
+
* Table cells that exceed the height of a single page will be truncated (see https://github.com/prawnpdf/prawn-table/issues/41[prawn-table#41])
|
102
108
|
* Inline images in table cells must fit within available space or Prawn::Errors::CannotFit error will be thrown
|
103
109
|
* Columns cannot be assigned a 0% width (or a width less than the width of a single character); in the same vein, a column cannot be set to autowidth if width of all other columns meets or exceeds 100%; the result is that the converter with throw a Prawn::Errors::CannotFit error
|
104
110
|
* An inline image in a table cell will not force the column wider if the width of the image exceeds the width of the column; either reduce the image width using `pdfwidth` or increase the width of the column using `cols`; another solution is to convert the cell to an AsciiDoc table cell (see https://github.com/asciidoctor/asciidoctor-pdf/issues/830)
|
@@ -113,15 +119,29 @@ But don't miss the <<Highlights>> to get a preview of what's possible.
|
|
113
119
|
|
114
120
|
== Prerequisites
|
115
121
|
|
116
|
-
All that's needed is Ruby 2.
|
122
|
+
All that's needed is Ruby (Ruby 2.5 or better) and a few Ruby gems (including at least Asciidoctor 2.0.0), which we explain how to install in the next section.
|
117
123
|
|
118
124
|
To check if you have Ruby available, use the `ruby` command to query the version installed:
|
119
125
|
|
120
126
|
$ ruby --version
|
121
127
|
|
122
|
-
Make sure this command reports a Ruby version that's at least 2.
|
128
|
+
Make sure this command reports a Ruby version that's at least 2.5.
|
123
129
|
If so, you may proceed.
|
124
130
|
|
131
|
+
If you want to <<Enable Stream Compression,optimize the pdf>> using rghost or hexapdf, you'll need to install the rghost gem:
|
132
|
+
|
133
|
+
$ gem install rghost
|
134
|
+
|
135
|
+
or the hexapdf gem:
|
136
|
+
|
137
|
+
$ gem install hexapdf
|
138
|
+
|
139
|
+
Similarly, if you want to use the hyphen option you will need to install the `text-hyphen` gem:
|
140
|
+
|
141
|
+
$ gem install text-hyphen
|
142
|
+
|
143
|
+
You'll also need to <<Install a Syntax Highlighter (optional),install a syntax highlighter>> to use source highlighting.
|
144
|
+
|
125
145
|
=== System Encoding
|
126
146
|
|
127
147
|
Asciidoctor assumes you're using UTF-8 encoding.
|
@@ -164,7 +184,7 @@ All files are managed in user space (aka your home or user directory).
|
|
164
184
|
If something gets messed up, you can simply remove the [.path]_$HOME/.rvm_ folder and start over.
|
165
185
|
|
166
186
|
To learn how to install RVM, follow the https://asciidoctor.org/docs/install-asciidoctor-macos/#rvm-procedure-recommended[RVM installation procedure] covered in the Asciidoctor documentation.
|
167
|
-
Once you have installed RVM and used it to install Ruby, make sure to activate the Ruby managed by RVM using `rvm use default` or a specific Ruby version like `rvm use 2.
|
187
|
+
Once you have installed RVM and used it to install Ruby, make sure to activate the Ruby managed by RVM using `rvm use default` or a specific Ruby version like `rvm use 2.7`.
|
168
188
|
(You'll need to do this each time you open a new terminal).
|
169
189
|
|
170
190
|
After installing the gem, you can see where it was installed using the following command:
|
@@ -202,12 +222,12 @@ You then activate syntax highlighting for a given document by adding the `source
|
|
202
222
|
==== Upgrade Prawn and Extensions (optional)
|
203
223
|
|
204
224
|
{project-name} uses Prawn to handle the PDF generation, which has a different release cycle.
|
205
|
-
At times, there may
|
225
|
+
At times, there may be development features in Prawn and its extensions you need to use which haven't yet been released.
|
206
226
|
No problem.
|
207
227
|
You can still gain access to these features by installing the unreleased gems directly from GitHub.
|
208
228
|
|
209
229
|
To get started, first create a [.path]_Gemfile_ in the root of your project.
|
210
|
-
In that file, declare the gem
|
230
|
+
In that file, declare the gem source, the {project-handle} gem, and the prawn gem and/or one of its extension gems.
|
211
231
|
In this example, we'll install both the prawn and prawn-table gems from GitHub.
|
212
232
|
|
213
233
|
.Gemfile
|
@@ -262,7 +282,7 @@ It's time to convert the AsciiDoc document directly to PDF.
|
|
262
282
|
|
263
283
|
IMPORTANT: You'll need the `rouge` gem installed to run this example since it uses the `source-highlighter` attribute with the value of `rouge`.
|
264
284
|
|
265
|
-
Converting to PDF is
|
285
|
+
Converting to PDF is as simple as running the `asciidoctor-pdf` script using Ruby and passing our AsciiDoc document as the first argument.
|
266
286
|
|
267
287
|
$ asciidoctor-pdf basic-example.adoc
|
268
288
|
|
@@ -288,7 +308,7 @@ The pain of the DocBook toolchain should be melting away about now.
|
|
288
308
|
== Themes
|
289
309
|
|
290
310
|
The layout and styling of the PDF is driven by a YAML configuration file.
|
291
|
-
To learn how the theming system works and how to create and apply custom themes, refer to the <<docs/theming-guide.adoc#,Asciidoctor PDF
|
311
|
+
To learn how the theming system works and how to create and apply custom themes, refer to the <<docs/theming-guide.adoc#,Asciidoctor PDF Theming Guide>>.
|
292
312
|
You can use the built-in theme files, which you can find in the [.path]_data/themes_ directory, as examples.
|
293
313
|
|
294
314
|
If you've enabled a source highlighter, you can control the style (aka theme) it applies to source blocks using the `coderay-style`, `pygments-style`, and `rouge-style` attributes, respectively.
|
@@ -297,7 +317,7 @@ For example, to configure Rouge to use the built-in monokai theme, run Asciidoct
|
|
297
317
|
$ asciidoctor-pdf -a rouge-style=monokai basic-example.adoc
|
298
318
|
|
299
319
|
It's possible to develop your own theme for Rouge.
|
300
|
-
Refer to the <<docs/theming-guide.adoc#,Asciidoctor PDF
|
320
|
+
Refer to the <<docs/theming-guide.adoc#,Asciidoctor PDF Theming Guide>> for details.
|
301
321
|
|
302
322
|
== Support for Non-Latin Languages
|
303
323
|
|
@@ -305,7 +325,7 @@ Asciidoctor can process the full range of characters in the UTF-8 character set.
|
|
305
325
|
That means you can write your document in any language, save the file with UTF-8 encoding (_that's important!_), and expect Asciidoctor to convert the text properly.
|
306
326
|
But you still need a font that provides the glyphs for those characters.
|
307
327
|
|
308
|
-
When converting a document with Asciidoctor PDF, you may notice that some
|
328
|
+
When converting a document with Asciidoctor PDF, you may notice that some glyphs for certain languages, such as Chinese, are missing from the PDF.
|
309
329
|
PDF is a "`bring your own font`" kind of system.
|
310
330
|
In other words, the font you provide must provide glyphs for all the characters used.
|
311
331
|
There's no one font that supports all the world's languages (though some, like Noto Serif, certainly come close).
|
@@ -468,15 +488,10 @@ Otherwise, the SVG library will fail to process it.
|
|
468
488
|
|
469
489
|
=== Asciidoctor Diagram Integration
|
470
490
|
|
471
|
-
|
491
|
+
Asciidoctor PDF provides seamless integration with Asciidoctor Diagram by setting the `data-uri` attribute by default.
|
472
492
|
When the `data-uri` attribute is set, Asciidoctor Diagram returns the absolute path to the generated image, which Asciidoctor PDF can then locate.
|
473
493
|
(This makes sense since technically, Asciidoctor Diagram must embed the image in the document, similar in spirit to the `data-uri` feature for HTML).
|
474
|
-
This means the input directory and the output directory (and thus the imagesoutdir) can differ and Asciidoctor PDF will still be able to locate the
|
475
|
-
|
476
|
-
Prior to Asciidoctor PDF 1.5.0.alpha.17 (or prior to Asciidoctor 2), the way to solve this problem is to set the `imagesdir` attribute to an absolute path.
|
477
|
-
That way, it won't matter where the generated image is written.
|
478
|
-
Asciidoctor PDF will still be able to find it.
|
479
|
-
Keep in mind that this strategy may introduce other side effects you'll have to work around.
|
494
|
+
This means the input directory and the output directory (and thus the imagesoutdir) can differ and Asciidoctor PDF will still be able to locate the generated image.
|
480
495
|
|
481
496
|
== Image Scaling
|
482
497
|
|
@@ -541,9 +556,9 @@ The pdfwidth attribute supports the following units:
|
|
541
556
|
|
542
557
|
In all cases, the width is converted to pt.
|
543
558
|
|
544
|
-
=== Specifying a
|
559
|
+
=== Specifying a Default Width
|
545
560
|
|
546
|
-
|
561
|
+
To scale all block images that don't define either a `pdfwidth` or `scaledwidth` attribute on the image macro, assign a value to the image-width key in your theme file.
|
547
562
|
|
548
563
|
[source,yaml]
|
549
564
|
----
|
@@ -551,6 +566,10 @@ image:
|
|
551
566
|
width: 100%
|
552
567
|
----
|
553
568
|
|
569
|
+
The image-width key accepts the same values as the `pdfwidth` attribute.
|
570
|
+
Thus, you can think of it as the fallback value for the `pdfwidth` attribute.
|
571
|
+
If specified, this value takes precedence over the `width` attribute on the image macro.
|
572
|
+
|
554
573
|
=== Inline Image Sizing
|
555
574
|
|
556
575
|
Inline images can be sized in much the same way as block images (using the pdfwidth, scaledwidth or width attributes), with the following exceptions:
|
@@ -571,7 +590,7 @@ If the image height exceeds the height of the page, the image will be scaled dow
|
|
571
590
|
|
572
591
|
In addition to the width-related attributes previously covered, cover and background images can be sized relative to the page using the `fit` attribute of the image macro.
|
573
592
|
The `fit` attribute works similarly to the `object-fit` property in CSS.
|
574
|
-
|
593
|
+
Its value must be specified as a single keyword, chosen from the table below.
|
575
594
|
The starting size of the image is determined by the explicit width, if specified, or the implicit width.
|
576
595
|
The height is always derived from the width while respecting the implicit aspect ratio of the image.
|
577
596
|
The available space for a background image (i.e., the canvas) is the page.
|
@@ -889,7 +908,7 @@ Here's an example of how to skip a passthrough block when converting to PDF:
|
|
889
908
|
\endif::[]
|
890
909
|
----
|
891
910
|
|
892
|
-
Here's an example of how to only enable a passthrough block when
|
911
|
+
Here's an example of how to only enable a passthrough block when converting to HTML5:
|
893
912
|
|
894
913
|
[source,asciidoc]
|
895
914
|
----
|
@@ -1011,7 +1030,7 @@ This value is used as the heading of the preface and as the text of the entry in
|
|
1011
1030
|
|
1012
1031
|
Asciidoctor PDF supports generating an index catalog that itemizes all index terms defined in the document, allowing the reader to navigate the document by keyword.
|
1013
1032
|
|
1014
|
-
To get Asciidoctor PDF to generate an index,
|
1033
|
+
To get Asciidoctor PDF to generate an index, add a level-1 section flagged with the `index` style near the end of your document.
|
1015
1034
|
The converter will automatically populate the catalog with the list of index terms in the document, organized by first letter.
|
1016
1035
|
|
1017
1036
|
[source,asciidoc]
|
@@ -1028,39 +1047,74 @@ However, you could use an extension, such as a TreeProcessor, to automatically m
|
|
1028
1047
|
|
1029
1048
|
== Optimizing the Generated PDF
|
1030
1049
|
|
1031
|
-
By default, Asciidoctor PDF does not optimize the
|
1032
|
-
|
1050
|
+
By default, Asciidoctor PDF does not optimize the PDF it generates or compress its streams.
|
1051
|
+
This section covers several approaches you can take to optimize your PDF.
|
1052
|
+
|
1053
|
+
=== Enable Stream Compression
|
1054
|
+
|
1055
|
+
The simplest way to reduce the size of the PDF file is to enable stream compression (using the FlateDecode method).
|
1033
1056
|
You can enable this feature by setting the `compress` attribute on the document:
|
1034
1057
|
|
1035
1058
|
$ asciidoctor-pdf -a compress document.adoc
|
1036
1059
|
|
1037
|
-
For more thorough
|
1060
|
+
For a more thorough optimization, you can use the integrated optimizer or hexapdf.
|
1038
1061
|
Read on to learn how.
|
1039
1062
|
|
1040
|
-
===
|
1063
|
+
=== rghost
|
1041
1064
|
|
1042
|
-
{project-name} also provides a bin script that uses GhostScript to optimize and compress the generated PDF (with minimal impact on quality).
|
1065
|
+
{project-name} also provides a flag (and bin script) that uses GhostScript (via rghost) to optimize and compress the generated PDF (with minimal impact on quality).
|
1043
1066
|
You must have Ghostscript (command: `gs`) and the `rghost` gem installed to use it.
|
1044
1067
|
|
1045
|
-
Here's an example usage:
|
1068
|
+
Here's an example usage that converts your document and optimizes it:
|
1069
|
+
|
1070
|
+
$ asciidoctor-pdf -a optimize basic-example.adoc
|
1071
|
+
|
1072
|
+
The command will generate an optimized PDF 1.4 file.
|
1073
|
+
In addition to optimizing the PDF file, it also converts it from plain PDF to a PDF/X-1a.
|
1074
|
+
|
1075
|
+
If this command fails because the `gs` command cannot be found, you'll need to set it using the `GS` environment variable.
|
1076
|
+
On Windows, this step is almost always required since the Ghostscript installer does not install the `gs` command into a standard location.
|
1077
|
+
Here's an example that shows how you can override the `gs` command path:
|
1078
|
+
|
1079
|
+
$ GS=/path/to/gs asciidoctor-pdf -a optimize basic-example.adoc
|
1080
|
+
|
1081
|
+
You'll need to use the technique for assigning an environment variable that's relevant for your system.
|
1082
|
+
|
1083
|
+
The one limitation of generating a PDF/X-1a file is that it does not allow non-ASCII characters in the document metadata fields (i.e., title, author, subject, etc).
|
1084
|
+
To workaround this limitation, you can force Ghostscript to generate a PDF 1.3 file using the `pdf-version` attribute:
|
1085
|
+
|
1086
|
+
$ asciidoctor-pdf -a optimize -a pdf-version=1.3 basic-example.adoc
|
1087
|
+
|
1088
|
+
CAUTION: Downgrading the PDF version may break the PDF if it contains an image that uses color blending or transparency.
|
1089
|
+
Specifically, the text on the page can become rasterized, which causes links to stop working and prevents text from being selected.
|
1090
|
+
If you're in this situation, it might be best to try <<hexapdf>> instead.
|
1091
|
+
|
1092
|
+
If you're looking for a smaller file size, you can try reducing the quality of the output file by passing a quality keyword to the `optimize` attribute (e.g., `--optimize=screen`).
|
1093
|
+
The `optimize` attribute accepts the following keywords: `default` (default, same if value is empty), `screen`, `ebook`, `printer`, and `prepress`.
|
1094
|
+
Refer to the https://www.ghostscript.com/doc/current/VectorDevices.htm#PSPDF_IN[Ghostscript documentation^] to learn what settings these presets affect.
|
1095
|
+
|
1096
|
+
If you've already generated the PDF, and want to optimize it directly, you can use the bin script:
|
1046
1097
|
|
1047
1098
|
$ asciidoctor-pdf-optimize basic-example.pdf
|
1048
1099
|
|
1049
1100
|
The command will overwrite the PDF file with an optimized version.
|
1101
|
+
You can also try reducing the quality of the output file using the `--quality` flag (e.g., `--quality screen`).
|
1102
|
+
The `--quality` flag accepts the following keywords: `default` (default), `screen`, `ebook`, `printer`, and `prepress`.
|
1050
1103
|
|
1051
|
-
|
1052
|
-
This file is necessary
|
1053
|
-
|
1104
|
+
In both cases, if a file is found with the extension `.pdfmark` and the same rootname as the input file, it will be used to add metadata to the generated PDF document.
|
1105
|
+
This file is necessary when using versions of Ghostscript < 8.54, which did not automatically preserve this metadata.
|
1106
|
+
You can instruct the converter to automatically generate a pdfmark file by setting the `pdfmark` attribute (i.e., `-a pdfmark`)
|
1107
|
+
When using a more recent version of Ghostscript, you do not need to generate a `.pdfmark` file for this purpose.
|
1054
1108
|
|
1055
1109
|
IMPORTANT: The `asciidoctor-pdf-optimize` is not guaranteed to reduce the size of the PDF file.
|
1056
1110
|
It may actually make the PDF larger.
|
1057
1111
|
You should probably only consider using it if the file size of the original PDF is several megabytes.
|
1058
|
-
|
1059
|
-
|
1112
|
+
|
1113
|
+
If you have difficulty getting the `rghost` gem installed, or you aren't getting the results you expect, you can try the optimizer provided by hexapdf instead.
|
1060
1114
|
|
1061
1115
|
=== hexapdf
|
1062
1116
|
|
1063
|
-
Another option to optimize the PDF is https://hexapdf.gettalong.org/[hexapdf] (gem: hexapdf, command: hexapdf).
|
1117
|
+
Another option to optimize the PDF is https://hexapdf.gettalong.org/[hexapdf^] (gem: hexapdf, command: hexapdf).
|
1064
1118
|
Before introducing it, though, it's important to point out that its license is AGPL.
|
1065
1119
|
If that's okay with you, read on to learn how to use it.
|
1066
1120
|
|
@@ -1070,17 +1124,56 @@ First, install the hexapdf gem using the following command:
|
|
1070
1124
|
|
1071
1125
|
You can then use it to optimize your PDF as follows:
|
1072
1126
|
|
1073
|
-
$ hexapdf optimize --compress-pages --force basic-example.pdf basic-example
|
1127
|
+
$ hexapdf optimize --compress-pages --force basic-example.pdf basic-example.pdf
|
1074
1128
|
|
1075
1129
|
This command does not manipulate the images in any way.
|
1076
1130
|
It merely compresses the objects in the PDF and prunes any unreachable references.
|
1077
|
-
But given how much waste Prawn leaves behind, this turns out to reduce the file size
|
1131
|
+
But given how much waste Prawn leaves behind, this turns out to reduce the file size substantially.
|
1132
|
+
|
1133
|
+
You can hook this command directly into the converter by providing your own implementation of the `Optimizer` class.
|
1134
|
+
Start by creating a Ruby file named [.path]_optimizer-hexapdf.rb_, then populate it with the following code:
|
1135
|
+
|
1136
|
+
.optimizer-hexapdf.rb
|
1137
|
+
[source,ruby]
|
1138
|
+
----
|
1139
|
+
require 'hexapdf/cli'
|
1140
|
+
|
1141
|
+
class Asciidoctor::PDF::Optimizer
|
1142
|
+
def initialize(*)
|
1143
|
+
app = HexaPDF::CLI::Application.new
|
1144
|
+
app.instance_variable_set :@force, true
|
1145
|
+
@optimize = app.main_command.commands['optimize']
|
1146
|
+
end
|
1147
|
+
|
1148
|
+
def optimize_file path
|
1149
|
+
options = @optimize.instance_variable_get :@out_options
|
1150
|
+
options.compress_pages = true
|
1151
|
+
#options.object_streams = :preserve
|
1152
|
+
#options.xref_streams = :preserve
|
1153
|
+
#options.streams = :preserve # or :uncompress
|
1154
|
+
@optimize.execute path, path
|
1155
|
+
nil
|
1156
|
+
rescue
|
1157
|
+
# retry without page compression, which can sometimes fail
|
1158
|
+
options.compress_pages = false
|
1159
|
+
@optimize.execute path, path
|
1160
|
+
nil
|
1161
|
+
end
|
1162
|
+
end
|
1163
|
+
----
|
1164
|
+
|
1165
|
+
To activate your custom optimizer, load this file when invoking the `asciidoctor-pdf` using the `-r` flag and set the `optimize` attribute as well using the `-a` flag.
|
1166
|
+
|
1167
|
+
$ asciidoctor-pdf -r ./optimizer-hexapdf.rb -a optimize basic-example.adoc
|
1168
|
+
|
1169
|
+
Now you can convert and optimize all in one go.
|
1078
1170
|
|
1079
|
-
To see more options, run:
|
1171
|
+
To see more options that `hexapdf optimize` offers, run:
|
1080
1172
|
|
1081
1173
|
$ hexapdf help optimize
|
1082
1174
|
|
1083
|
-
For example, to make the source of the PDF a bit more readable, set the stream-related options to `preserve
|
1175
|
+
For example, to make the source of the PDF a bit more readable (though less optimized), set the stream-related options to `preserve` (e.g.,, `--streams preserve` from the CLI or `options.streams = :preserve` from the API).
|
1176
|
+
You can also disable page compressioin (e.g., `--no-compress-pages` from the CLI or `options.compress_pages = false` from the API).
|
1084
1177
|
|
1085
1178
|
hexapdf also allows you to add password protection to your PDF, if that's something you're interested in doing.
|
1086
1179
|
|
@@ -1101,8 +1194,8 @@ To help develop {project-name}, or to simply use the development version, refer
|
|
1101
1194
|
|
1102
1195
|
== Copyright
|
1103
1196
|
|
1104
|
-
Copyright (C) 2014-
|
1197
|
+
Copyright (C) 2014-present OpenDevise Inc. and the Asciidoctor Project.
|
1105
1198
|
Free use of this software is granted under the terms of the MIT License.
|
1106
1199
|
|
1107
|
-
For the full text of the license, see the
|
1200
|
+
For the full text of the license, see the link:LICENSE[] file.
|
1108
1201
|
Refer to the <<NOTICE.adoc#,NOTICE>> file for information about third-party Open Source software in use.
|
data/asciidoctor-pdf.gemspec
CHANGED
@@ -14,10 +14,10 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.homepage = 'https://asciidoctor.org/docs/asciidoctor-pdf'
|
15
15
|
s.license = 'MIT'
|
16
16
|
# NOTE required ruby version is informational only; it's not enforced since it can't be overridden and can cause builds to break
|
17
|
-
#s.required_ruby_version = '>= 2.
|
17
|
+
#s.required_ruby_version = '>= 2.5.0'
|
18
18
|
s.metadata = {
|
19
19
|
'bug_tracker_uri' => 'https://github.com/asciidoctor/asciidoctor-pdf/issues',
|
20
|
-
'changelog_uri' => 'https://github.com/asciidoctor/asciidoctor-pdf/blob/
|
20
|
+
'changelog_uri' => 'https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc',
|
21
21
|
'mailing_list_uri' => 'http://discuss.asciidoctor.org',
|
22
22
|
'source_code_uri' => 'https://github.com/asciidoctor/asciidoctor-pdf'
|
23
23
|
}
|
@@ -28,30 +28,27 @@ Gem::Specification.new do |s|
|
|
28
28
|
rescue
|
29
29
|
files = Dir['**/*']
|
30
30
|
end
|
31
|
-
s.files = files.grep %r/^(?:(?:data|lib)\/.+|docs\/theming-guide\.adoc|(?:CHANGELOG|
|
31
|
+
s.files = files.grep %r/^(?:(?:data|lib)\/.+|docs\/theming-guide\.adoc|LICENSE|(?:CHANGELOG|NOTICE|README)\.adoc|\.yardopts|#{s.name}\.gemspec)$/
|
32
32
|
s.executables = (files.grep %r/^bin\//).map {|f| File.basename f }
|
33
33
|
s.require_paths = ['lib']
|
34
34
|
#s.test_files = files.grep %r/^(?:test|spec|feature)\/.*$/
|
35
35
|
|
36
|
-
s.add_runtime_dependency 'asciidoctor', '
|
37
|
-
s.add_runtime_dependency 'prawn', '~> 2.
|
38
|
-
# NOTE
|
39
|
-
s.add_runtime_dependency 'ttfunk', ['~> 1.5.0'], ['>= 1.5.1']
|
40
|
-
# NOTE must use prawn-table from master branch (defined in Gemfile) for full functionality
|
36
|
+
s.add_runtime_dependency 'asciidoctor', '~> 2.0'
|
37
|
+
s.add_runtime_dependency 'prawn', '~> 2.4.0'
|
38
|
+
# NOTE must use prawn-table from head (defined in Gemfile) for full functionality
|
41
39
|
s.add_runtime_dependency 'prawn-table', '~> 0.2.0'
|
42
40
|
s.add_runtime_dependency 'prawn-templates', '~> 0.1.0'
|
43
|
-
s.add_runtime_dependency 'prawn-svg', '~> 0.
|
44
|
-
s.add_runtime_dependency 'prawn-icon', '~>
|
41
|
+
s.add_runtime_dependency 'prawn-svg', '~> 0.32.0'
|
42
|
+
s.add_runtime_dependency 'prawn-icon', '~> 3.0.0'
|
45
43
|
s.add_runtime_dependency 'safe_yaml', '~> 1.0.0'
|
46
|
-
s.add_runtime_dependency '
|
47
|
-
s.add_runtime_dependency 'concurrent-ruby', '~> 1.1.0'
|
44
|
+
s.add_runtime_dependency 'concurrent-ruby', '~> 1.1'
|
48
45
|
s.add_runtime_dependency 'treetop', '~> 1.6.0'
|
49
46
|
|
50
47
|
s.add_development_dependency 'rake', '~> 13.0.0'
|
51
|
-
s.add_development_dependency 'rspec', '~> 3.
|
48
|
+
s.add_development_dependency 'rspec', '~> 3.10.0'
|
52
49
|
s.add_development_dependency 'pdf-inspector', '~> 1.3.0'
|
53
50
|
# Asciidoctor PDF supports Rouge >= 2 (verified in CI build using 2.0.0)
|
54
51
|
s.add_development_dependency 'rouge', '~> 3.0'
|
55
52
|
s.add_development_dependency 'coderay', '~> 1.1.0'
|
56
|
-
s.add_development_dependency 'chunky_png', '~> 1.
|
53
|
+
s.add_development_dependency 'chunky_png', '~> 1.4.0'
|
57
54
|
end
|