From 2f7f5d26677a313222fb24728b9e158cd7d1be33 Mon Sep 17 00:00:00 2001 From: Pieter Marsman Date: Thu, 16 Jan 2020 22:11:42 +0100 Subject: [PATCH] Fallback on backwards-compatible key (F) for embedded files URL's when the unicode URL (UF) does not exist (#338) * Fix getting filename when extracting embedded files * Add test for pdf that contains embedded pdf, and fix additional errors in looping over multiple xrefs * Add line to CHANGELOG --- CHANGELOG.md | 1 + samples/contrib/issue-00152-embedded-pdf.pdf | Bin 0 -> 18543 bytes tests/test_tools_dumppdf.py | 15 +++++++- tests/test_tools_pdf2txt.py | 2 +- tools/dumppdf.py | 35 ++++++++++--------- 5 files changed, 35 insertions(+), 18 deletions(-) create mode 100644 samples/contrib/issue-00152-embedded-pdf.pdf diff --git a/CHANGELOG.md b/CHANGELOG.md index dcd2350..dffe4af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed - Interpret two's complement integer as unsigned integer ([#352](https://github.com/pdfminer/pdfminer.six/pull/352)) +- KeyError when extracting embedded files and a Unicode file specification is missing ([#338](https://github.com/pdfminer/pdfminer.six/pull/338)) ## [20200104] - 2019-01-04 diff --git a/samples/contrib/issue-00152-embedded-pdf.pdf b/samples/contrib/issue-00152-embedded-pdf.pdf new file mode 100644 index 0000000000000000000000000000000000000000..20813b961ab22c2857415ce2d71eb65d63e71475 GIT binary patch literal 18543 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