Install
Works with Drupal: ^10.3 || ^11 || ^12Using Composer to manage Drupal site dependencies
Alternative installation files
Download tar.gz
37.44 KB
MD5: d6c57ee2895decc032d32c7541ddbafb
SHA-1: 053f689953d47fddacc68d1e26b562604f478110
SHA-256: ff2970d0410869fe1f219c82a65bfaaf6577524a0be4aa7508f9d0a834a632d2
Download zip
56.02 KB
MD5: f153bd2d39427d6e1b872650da19d542
SHA-1: 0cd777bb0a597074f96c7a7f10224303e99561ec
SHA-256: cc4bceb3a3c2a2762d1507abf4cf27f637e8e1aad0632085f5f08f3405c2f16b
Release notes
Fairly big release. The main addition is appending the export to an existing PDF, and deferred exports got a security overhaul. Read the upgrade notes before updating: deferred exports need the private file system now, and there are a few update hooks.
Before you update
- Run
composer update, the module now depends onsetasign/fpdi^2.6. - Minimum Drupal version is 10.3.
- Set up the private file system first, then run
drush updb. Without it, exports are generated inline and you'll see a warning in the status report. - Run cron before updating. Deferred exports queued by the old version are discarded (a warning is logged).
- The update hooks move existing exports from
public://views_data_export_tcpdf_exportsto private and delete the public folder. - They also rename the
PDFformat topdfin your views and drop unused options. - Default settings are installed (keep exports 7 days, email users). Check them afterwards.
- Roles that saw other users' exports through "administer users" need the new "View any generated PDF export" permission.
- If cron runs from Drush, pass
--urior the links in notification emails will point to the wrong domain. - PDFs with compressed cross-reference streams (PDF 1.5+) can't be used as templates, the free FPDI parser doesn't support them.
New
- Append the export to an existing PDF, either uploaded or set as the display's default file. Works with deferred exports too.
- Font option: Helvetica, Times, Courier, DejaVu Sans, FreeSans. Use the last two for non-Latin text.
- Tokens in header title, subtitle, address, notes and footer (
[site:name],[view:title],[current-date:short], etc). - Per-field column width (%) and alignment.
- Group rows by a field, with subtotals and a grand total for numeric columns.
- Diagonal watermark (text with tokens, opacity).
- PDF protection with AES-256: open password (tokens allowed), owner password, and allowed actions.
- Email when a deferred export is ready.
- Old deferred exports are deleted on cron, 7 days by default.
- Settings page under Configuration » Content authoring » PDF Views Data Export.
- Drush command:
drush views-data-export-tcpdf:export(aliasvdet-export). - New permission "View any generated PDF export".
- Worker logs go to the
views_data_export_tcpdfchannel. - Config schema and kernel tests.
Security
- Deferred exports were stored in the public file system. They're in
private://now, downloadable only by the owner or users with the new permission. - File names use a cryptographically random suffix.
- Exported rows are no longer stored in the queue. The worker re-runs the view as the requesting user, so access checks apply and blocked users get nothing.
- Anonymous users no longer share deferred exports. Deferred processing is for authenticated users only.
- Uploaded PDFs get renamed instead of overwriting temp files with the same name.
- Uploaded and preselected files are checked by PDF signature and must actually parse, not just match the MIME type.
- Upload errors don't show internal exception messages anymore.
Fixes
- Installing the module restricted every Views Data Export display to PDF. CSV, XLS etc. are back.
- "Current page only" exported everything.
- Export route was missing
display_id. - The selected PDF file was being passed to the view as a contextual argument.
- Fatal error on PDF upload (wrong
FileUploadHandlercall). - Upload validators moved to
FileExtension/FileSizeLimit, the old ones are gone in Drupal 11. - "PDF exports" page gave a 500 instead of 403 for unauthorized users, and used
format_size()which no longer exists in D11. - Going over the row limit threw an error instead of scheduling a deferred export.
- Views were executed and rendered twice per export.
- Deferred exports used a different, unstyled table and ignored field labels.
- Header logo was never made permanent, so file GC could delete it.
&showing up literally in cells (double-encoded entities).- Deferred export failures were silently swallowed.
- Uninstalling could delete entire views that had a PDF display. Now only the PDF displays are removed, along with generated files and pending queue items.
- "Page X of Y", summary, empty text and Yes/No are translatable.
Other changes
- After scheduling a deferred export you're redirected to your exports page.
- Exports page uses a route access check and proper cache metadata.
- Removed unused metadata options (last modified by, description, category, manager, company).
- Added dependency on
file. - Removed hardcoded
versionfromcomposer.jsonand.info.yml, packaging adds it.