Как предотвратить редактирование моего PDF с помощью jodconverter?

Я использую jodconverter 3.0-beta4 и я конвертирую из HTML в PDF. Мой HTML содержит форму, но я не хочу иметь редактируемые поля в моем PDF. Я думал, что если я смогу сделать мой pdf доступным только для чтения, тогда поля исчезнут, но мой код не работает.

Я уже пробовал использовать разные версии PDF, но версия ниже 2 неправильно воспроизводит мой HTML. Он конвертирует HTML с некоторыми входами без опознавательных знаков, но мои радиовходы все помечены.

Вот мой код

DocumentFormat format = new DocumentFormat("PDF/A", "pdf", "application/pdf");

Map<String, Object> filterData = new HashMap<String, Object>();
filterData.put("SelectPdfVersion", 2);

Map<String, Object> properties = new HashMap<String, Object>();
properties.put("FilterData", filterData);
properties.put("FilterName", "writer_pdf_Export");
properties.put("Changes", 0);
properties.put("RestrictPermissions", true);

format.setStoreProperties(DocumentFamily.TEXT, properties);

OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);

File htmlFile = File.createTempFile("tempHTML" , ".html");
org.apache.commons.io.FileUtils.writeStringToFile(htmlFile, html);
File pdfFile = File.createTempFile("tempPDF", ".pdf");
converter.convert(htmlFile, pdfFile, format);

1 ответ

Решение

Можно конвертировать HTML inputs в статический текст до преобразования его в PDF.

Поскольку вы уже используете строку с содержимым HTML, html:

Что-то вроде:

// ☐ ☑ ☒ ☉ ◉ ○
html = html.replaceAll("(?si)<input type=\"radio\"[^>]*value=\"("
        + checkedValue + ")\"[^>]*>(.*?)</input>",
        "◉ $2");
html = html.replaceAll("(?si)<input type=\"radio\"[^>]*value=\"("
        + "[^\"]+" + ")\"[^>]*>(.*?)</input>",
        "○ $2");

Вероятно, вам нужно сделать больше, и приведенный выше код опирается на атрибут type, предшествующий атрибуту value etcetera.

Другие вопросы по тегам