2016-11-01 2 views
0

J'utilise le jodconverter 3.0-beta4 et je suis en train de convertir HTML en PDF. Mon code HTML contient un formulaire, mais je ne souhaite pas que des champs modifiables apparaissent dans mon PDF. Je pensais que si je pouvais faire lire mon pdf seulement alors les champs sont partis, mais mon code ne fonctionne pas.Comment empêcher l'édition de mon pdf en utilisant jodconverter?

J'ai déjà essayé avec différentes versions de PDF, mais une version inférieure à 2 ne reproduit pas correctement mon HTML. Il convertit le HTML avec certaines entrées non marquées, mais mes entrées radio sont toutes marquées.

Voici mon code

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

On pourrait convertir les entrées HTML en texte. –

+0

C'est vrai Je ne peux envoyer que les options marquées/remplies. Je ne pensais vraiment pas à cette option. Merci. – ikkarion

+0

@JoopEggen, pouvez-vous poster votre commentaire comme réponse? – ikkarion

Répondre

1

On pourrait convertir le HTML input s en texte statique avant de le convertir au format PDF.

Comme vous utilisez déjà une chaîne avec le contenu HTML, html:

Quelque chose comme:

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

Probablement que vous devez faire plus, et le code actuel se base sur l'attribut de type qui précède la attribut de valeur, etcetera.