Невозможно зашифровать PDF, используя itextpdf Java - Висячие - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь преобразовать текстовые файлы в pdf и передать пароль в процессе.Метод выглядит следующим образом:

public static void convertStatementFiles(File sourceDir, File destDir, String logoImgPath, String backImagePath, String threadId) {
    log.debug("Attempting File Conversion to PDF........");
    FilenameFilter only = new OnlyExt("LST");
    String[] filenames = sourceDir.list(only);
    log.debug("Source Files" + sourceDir.getAbsolutePath());
    Config cfg = new Config();

    try {
        for (int k = 0; k < filenames.length; k++) {
            FileInputStream fs = new FileInputStream(sourceDir.getAbsolutePath() + System.getProperty("file.separator") + filenames[k]);
            BufferedReader br = new BufferedReader(new InputStreamReader(fs));
            String accountNumber;
            for (int j = 0; j < 11; j++) {
                br.readLine();
            }
            accountNumber = br.readLine().trim().substring(0, 13);
            File img = new File(logoImgPath);
            if (!img.exists()) {
                FileUtils.writeByteArrayToFile(new File(logoImgPath), cfg.getLogoImage());
            }
            //Get Background Image
            File backImg = new File(backImagePath);
            if (!backImg.exists()) {
                FileUtils.writeByteArrayToFile(new File(backImagePath), cfg.getBackgroundImage());
            }

            //Create Pdf file
            Document document = new Document(PageSize.B3);
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destDir.getAbsolutePath() + System.getProperty("file.separator") + accountNumber + ".pdf"));
            PdfEvent event = new PdfEvent(img.getAbsolutePath(), backImg.getAbsolutePath());
            writer.setPageEvent(event);
            String password = accountNumber.substring(0, 2) + accountNumber.substring(11, 13);
            writer.setEncryption(PdfWriter.ENCRYPTION_AES_128, password, password, PdfWriter.AllowPrinting);
            writer.createXmpMetadata();
            document.open();
            br = new BufferedReader(new FileReader(sourceDir.getAbsolutePath() + System.getProperty("file.separator") + filenames[k]));
            String line;
            Paragraph p;
            Font normal = new Font(Font.FontFamily.COURIER, 12, Font.BOLD);
            Font bold = new Font(Font.FontFamily.COURIER, 12, Font.BOLD);

            boolean title = true;
            int num = 0;
            int pagebreak = 0;
            while ((line = br.readLine()) != null) {
                num++;
                p = new Paragraph(line, title ? bold : normal);
                p.setAlignment(Element.ALIGN_JUSTIFIED);
                title = line.isEmpty();
                document.add(p);
                if (line.trim().startsWith("Page Total")) {
                    pagebreak = num + 1;
                }
                if (num == pagebreak) {
                    document.newPage();
                }

            }
            document.close();
        }
        log.debug("Conversion to PDF Done........");
        cleanStatementsDirectories(sourceDir, threadId);
    } catch (Exception asd) {
        System.out.println(asd.getMessage());
    }

}

Без этой строки writer.setEncryption(PdfWriter.ENCRYPTION_AES_128, password, password, PdfWriter.AllowPrinting); процесс завершается, конечно, без пароля, но как только строка появляется, процесс зависает в этой точке.Что я делаю не так?

1 Ответ

0 голосов
/ 12 октября 2018

Я понял, в чем проблема, и хотя я должен опубликовать ответ для любого, кто может столкнуться с той же проблемой.Проблема была не в коде, а в bcprov-jdk библиотеках в пути к классам.У меня были разные версии этой библиотеки, и когда я вытащил одну из них, проблема была решена.

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