Редактировать iText PDF Java - PullRequest
0 голосов
/ 23 апреля 2019

Я пытался загрузить файл PDF, расположенный в "/ resources / pdf /".Я хочу загрузить PDF, заполнить поля формы и вернуть поток.Пока это работает, нет ошибок или исключений.Проблема в том, что при печати PDF-файла части документа отсутствуют.Используя этот pdf , он просто печатает поля формы, но не изображения или текст.Код выполняется в tomcat7 в сочетании с простыми лицами:

public StreamedContent modify() {
String pdfFile = "mypdf.pdf";
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
    InputStream istream = getClass().getResourceAsStream("/pdf/" + pdfFile);
    PdfReader reader = new PdfReader(istream);

    pdfStamper = new PdfStamper(reader, bos );
    pdfForm = pdfStamper.getAcroFields();

    // fillData();

    pdfStamper.close();
    reader.close();
    istream.close();
    ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
    bis.close();
    bos.close();
    return new DefaultStreamedContent( bis, "application/pdf", "report.pdf" ); 

} catch (Exception ex) {
    ex.printStackTrace();
    return null;
}

Я строю проект следующим образом: mvn clean install tomcat7:redeploy -DskipTests

Есть идеи, что не так?Спасибо.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Я наконец решил сделать это по-другому.

В файле свойств проекта я добавил новое свойство с путем, в котором находится PDF, таким образом я могу загрузить объект pdfReader с File через новый FileInputStream Финальный код

public StreamedContent modify() {
    File file = getPdfFile(); 
    PdfReader reader = new PdfReader(new FileInputStream(file));
    pdfStamper = new PdfStamper(reader, bos );
    // fillData();
    pdfStamper.close();
    bos.close();
    ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
    return new DefaultStreamedContent( bis, "application/pdf", "report.pdf" );
}

public File getPdfFile() {
    try {
        Properties prop = new Properties();
        prop.load(getClass().getClassLoader()
               .getResourceAsStream("myfile.properties"));
        String pdfPath = prop.getProperty("pdf.path");
        String pdfName = prop.getProperty("pdf.name");
        File file = new File(pdfPath + pdfName);

        return file;
    } catch (Exception ex) {
        LOGGER.error("ERROR: " + ex.getMessage());
        return null;
    }
}

Большое спасибо! С уважением,

0 голосов
/ 24 апреля 2019

Обновление: Я только что испытал ту же проблему! После интенсивных исследований я обнаружил, что maven нарушил кодирование моих файлов PDF. Я должен был бы более внимательно прочитать комментарий MKLs; -)

Я добавил плагин ресурсов в свой проект maven:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <nonFilteredFileExtensions>
        <!-- Please note that images like jpg, jpeg, gif, bmp and png are (already) implicitly excluded -->
            <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
    </configuration>
</plugin>

Старый пост:

В вашем сообщении отсутствует важная информация:

  1. Как вы распечатываете свой report.pdf? Из веб-браузера или Adobe Reader? Пожалуйста, опубликуйте report.pdf, чтобы мы могли проанализировать.
  2. Что я понимаю, так это то, что опубликованный вами код работает нормально (без ошибок, без исключений). Проблема возникает только при печати?

Один выстрел, что может быть не так:

Вы не задаете кодировку (например, UTF-8) для своего потока:

return new DefaultStreamedContent( bis, "application/pdf", "report.pdf", "YourEncoding");

и, кстати, оригинальный PDF тоже глючит (например, Preflight сообщает о нескольких ошибках.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...