Для чрезвычайно безопасных систем мы шифруем пароль базы данных в файле конфигурации (который сам защищен системным администратором). При запуске приложения / сервера приложение затем запрашивает системный администратор для ключа дешифрования. Затем пароль базы данных считывается из файла конфигурации, дешифруется и сохраняется в памяти для будущего использования. Все еще не на 100% безопаснее, поскольку он хранится в дешифрованной памяти, но вы должны называть его «достаточно безопасным» в какой-то момент!
В iText есть несколько способов сделать это. Класс PdfStamper
является одним из вариантов. Но самый простой способ - создать новый документ PDF, а затем импортировать отдельные страницы из существующего документа в новый PDF.
// Create output PDF
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
document.open();
PdfContentByte cb = writer.getDirectContent();
// Load existing PDF
PdfReader reader = new PdfReader(templateInputStream);
PdfImportedPage page = writer.getImportedPage(reader, 1);
// Copy first page of existing PDF into output PDF
document.newPage();
cb.addTemplate(page, 0, 0);
// Add your new data / text here
// for example...
document.add(new Paragraph("my timestamp"));
document.close();
Это позволит считывать PDF из templateInputStream
и записывать его в outputStream
. Это могут быть файловые потоки или потоки памяти, или то, что подходит для вашего приложения.