Загруженный PDF с сервера недействителен, хотя оригинал действителен - PullRequest
0 голосов
/ 29 января 2019

Я использую Omnifaces, чтобы создать кнопку загрузки PDF и получить PDF с сервера.В загруженном файле PDF есть пустые страницы, и после использования средства проверки PDF я получаю следующие ошибки:

Проверка файла "manual (6) .pdf" для уровня соответствия pdf1.7

Ключевое слово 'xref' не найдено или таблица xref неверна.

Словарь файлового трейлера отсутствует или недействителен.

Неправильный ключ "Length" объекта потока.

Ошибка в потоке Flate: ошибка данных.

Неверный ключ длины объекта потока.

Документ не соответствует запрошенному стандарту.

Формат файла (заголовок, трейлер, объекты, внешние ссылки, потоки) поврежден.

Документ не соответствует стандарту PDF 1.7.

Готово.

Мой код работает для других файлов PDF.

Это мой код:

@ManagedBean
public class FileDownloadView {

    private static final String FILENAME = "manual.pdf";

    public void download() throws IOException {
        Resource resource = new ClassPathResource(FILENAME);
        File file = resource.getFile();
        Faces.sendFile(file, true);
    }

}

и код xhtml:

<h:form>
    <p:commandButton action="#{fileDownloadView.download}" value="download" ajax="false">
    </p:commandButton>
</h:form>

Оригинальный файл PDFотсканированные валидатором PDF не возвращают ошибок.PDF после загрузки возвращает вышеуказанные ошибки.

Пожалуйста, помогите, заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Другим подходом к предоставлению статического файла для загрузки является использование встроенной системы ресурсов JSF: См. Этот Q / A для справки.

Например, поместите документацию Primefaces 6.2 впапка /src/main/webapp/resources (обратите внимание, что НЕ совпадает с /src/main/resources в моем другом предложении выше!), поэтому у вас есть файл:

/src/main/webapp/resources/primefaces_user_guide_6_2.pdf

в вашем веб-проекте.Теперь на ваших лицах просто добавьте статическую выходную ссылку в этот файл:

<h:outputLink value="#{resource['primefaces_user_guide_6_2.pdf']}" >Download PF 6.2 Documentation!</h:outputLink>

Вот и все.Файл будет обслуживаться как есть, и outputLink фактически предоставляет закладку для ссылки на файл.

Кстати, между прочим.также обойти проблему фильтрации maven, так как обычно не следует фильтровать ресурсы / src / main / webapp / resources.

Почему два ответа?Зная, что я мог бы отредактировать первый ответ, включив оба предложения, я хотел бы знать, какой из них принят, если таковой имеется.

0 голосов
/ 30 января 2019

Поскольку ваш комментарий в последующем вопросе предполагает, что maven повреждает ваш PDF во время сборки архива .war, я бы посоветовал вам отключить фильтрацию ресурсов maven во время сборки для файлов PDF в вашем POM.xml:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <excludes>
            <exclude>*.pdf</exclude>
        </excludes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
        <includes>
            <include>*.pdf</include>
        </includes>
    </resource>
</resources>
...