-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME.txt
251 lines (168 loc) · 8.57 KB
/
README.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
CONTENTS OF THIS FILE
---------------------
* Introduction
* Requirements
* Installation
* Configuration
* Usage
* Known issues
* Upgrade notes
* Further reading
* Developer docs
INTRODUCTION
------------
"I love all my media having thumbnails - PERIOD."
Some time ago i found the PDF project. Awesome attempt
to do kinda what i wanted, but not completely.
Just a couple of days ago i found the PDF Thumb project,
again awesome work, but it required configurations i
didn't needed, nor wanted, i just want PDF's and Thumbnails!
So last sunday i started hacking a bit, the result is PDF NG.
True, some parts could be done better and so, it still needs a
bit of work, in fact, it's more a proof of concept for now, but
it does work great for what i need it for: create thumbnails
for PDF's (only the first page) and display them - everywhere.
REQUIREMENTS
------------
What do you need:
- ImageMagick
- PDF.js
Drupal modules:
- file_entity (requires the 2.x version from a date after march 8th 2013).
- libraries
INSTALLATION
------------
Download PDF.js:
Uncompiled: (requires you to build PDF.js and we also suggest
to minify it, see FURTHER READING below).
https://github.com/mozilla/pdf.js
Compiled:
https://github.com/mozilla/pdf.js/tags
Extract the pdf.js package to the [SITE_ROOT]/sites/all/libraries/ folder.
Install imagemagick:
apt-get install imagemagick
And make sure your site has access to /usr/bin/convert.
TODO: It's hardcoded for now, but we might patch it at some point.
CONFIGURATION
-------------
Configure the file view modes you want PDF's to show up for.
By default only the thumbnail is displayed.
(cause some people have like a gazillion PDF's on their sites,
and if someone messed up the view modes, that might lead to
'undesired behaviour' aka possibly broken sites.)
Do NOT NEVER EVER use or change the 'preview' mode.
This mode is used on the node form, media browser, etc.
USAGE
-----
Crazy time! Finally we can do some insane things like:
- Create a PDF slideshow with the thumbnails from the pdf linked to the node - or - the pdf itself.
- Create a Colorbox popup that uses the thumbnail as a trigger / link.
- Media browser with friggin' PDF thumbnails! YAY!
- Link to a PDF file in a new window.
- Link a pdf thumbnail on the teaser to the node.
- and more.
Just add a new view mode via the 'entity view mode' module and configure view modes according.
Link strategy: The module supports a couple options to link to a pdf file.
Teaser thumbnail: if you install the 'file_entity_link' module, you can
set up a link to the referencing node entity, this is useful to link
thumbnails used in a teaser view to the node.
Link to the pdf in a new window: Manage the file display for the
'Document' file type. Make sure 'PDF thumbnail' is enable.
You will see 3 options below the Image style:
Show name
- If checked, the file name will be displayed above the thumbnail.
Link to
- If checked, the thumbnail will link to the PDF file.
New window
- If checked, the linked thumbnail will open in a new tab/window.
The link to and new window are the most interesting. These options
allow to fine tune the link a bit, open the document in a new window,
or in the same window.
I have also added a 'PDF Link' display mode. This renders a link
to the pdf file loaded in pdf.js, optionally in a new window.
How to configure this all with colorbox?
Install media_colorbox and the entity view mode module.
Create 3 new entity view modes for the 'file' entity, name them something like:
- PDF Colorbox Thumbnail
- PDF Colorbox Document
- PDF Colorbox Trigger
Create a new image style for the thumbnail. Let's make it 90x130 pixels.
Edit the 'Colorbox Thumbnail' document file display
Set the display to 'image' and select the
thumbnail you created in the previous step.
Visit admin/structure/file-types/manage/document/file-display and edit
the new entity view modes:
- Enable 'Media Colorbox' on the PDF trigger.
- Set the 'File view mode' to PDF Colorbox Thumbnail.
- Set the 'Colorbox view mode' to PDF Colorbox Document.
Save everything and enjoy the ride!
KNOWN ISSUES
------------
A boatload for sure, but it's not my focus at the moment to fix any.
(But would be neat to get some funding together to get this started).
I'm willing to apply patches, so if you have a patch, start an issue.
pdf_ng_process_file($file)
Possible TODO: add option to file upload in some crazy way to
set the page we want to 'thumbnail' (or maybe even multiple).
The [0] bit limits to page 1, see pdf_ng_process_file().
Included in this TODO are:
- We have to decide how to save the file. Maybe people want to create multiple thumbnails?
Crazy, but possible. We could render a list of pages during upload? (maybe)
So people can just click on the pages they want to have 'thumbnailed'.
Then they would also have to set one of those images as 'the default', to save with the content.
And those remaining files still have to be linked to the content / file entity in some way.
- Update theme functions to work with multiple thumbnail files. (maybe create a new display mode for this).
Or just check if the first file exists with -0 and if that exists, use it.
Just copy it to a name without -0) (leading to kinda what we currently have).
http://drupal.stackexchange.com/questions/24228/check-if-unmanaged-file-exists
So for now we just use the first thumb, this works fine in most situations. If people want to
change the thumbnail,they can create a thumb themselves and replace it via the edit file page.
UPGRADE NOTES
-------------
___ _ ___ _ ___ _ ___ __ _____ _ _ ___ ___ _ _____ _
| _ ) /_\ / __| |/ / | | | _ \ \ \ / / _ \| | | | _ \ | \ /_\_ _/_\
| _ \/ _ \ (__| ' <| |_| | _/ \ V / (_) | |_| | / | |) / _ \| |/ _ \
|___/_/ \_\___|_|\_\\___/|_| |_| \___/ \___/|_|_\ |___/_/ \_\_/_/ \_\
Don't say we didn't warn you, always create backups before attempting an
upgrade and test a (partial) upgrade on a test server or your local machine.
But we got nothing to upgrade! So no worries. Actually, i do not expect huge things we can do
here, we only display files that already exist on the system, so it should just work.
For existing files we do need to do some work. While the render-bit could simply create
thumbnails that do not exist, i believe it would be a better idea to add some other
way to accomplish this, like some cron function, or special page you can visit.
FURTHER READING
---------------
Howto minify PDF.js:
https://github.com/mozilla/pdf.js/issues/710#issuecomment-4080540)
Quick explanation of the workings:
We use the same style most media_xyz modules use to render a thumbnail
or a file (pdf) for the application/pdf mimetype.
The module uses the PDF.js and ImageMagick applications to accomplish
this without to much code to maintain on the Drupal side of things.
While it's true the PDF module facilicates the use of the pdf.js
worker_loader.js script and pdf.js to create a thumbnail on the fly,
i required the actual thumbnails, for display on product nodes, saved
on the file system. (And i've found this part is kinda buggy in some
browsers, so it was a no-go for me, and thus, i started coding).
We have template files for the pdf and the thumbnail! YAY! Let the modding commence!
And i wanted an option to AND render a PDF in a colorbox popup AND render a thumbnail
with a simple link to the actual PDF, opening in the same or _blank window.
More techical differences between PDF / PDFThumb and this module?
PDF uses hook_field_formatter_info(), we use hook_file_formatter_info().
In other words, we depend on file_entity, making more crazy stuff
possible and not limiting this in any way to a field.
PDFThumb uses hook_entity_presave(), we use hook_file_insert() and check
the mimetype, we want this to run for all PDF's EVERYWHERE they are saved
/ used, not limited to a field we need to configure.
PDFThumb also creates a list of options, we do not have any options for
fields to create thumbnails, we do not use the field, we use the file.
This enables us to generate a thumbnail everywhere, even on node view and
use it directly in all view modes we want, including the node edit form.
PDFThumb is limited to the first PDF in the file collection, we do not use
this, so we are not limited in any way.
PDFThumb also creates a new database table to link the thumbnail to the pdf,
PDF NG uses the file name as a reference, just like most media_xyz modules do
to get to the correct thumbnail. We render the pdf document 'image' inside
a separate theme function and we have 2 templates, for images and pdf files.
We use the filemime to act on file actions, not the type.
/ PDF NG 7.x-1.x-dev README.