2014-02-12 4 views
1

Добрый день всем,Ошибка преобразования DOCX в PDF в Java

Приходите к моему делу, я генерируя DOCX оригиналодержателя развязке 2 других DOCX, я делаю слияния.

public static void main(String[] args) throws Exception { 
    InputStream in1 = new FileInputStream(new File("C:\\Clientes\\Constremac\\Repositorio_DOCS\\UPLOAD\\LAYOUT_PAGINA_VERSAO_FINAL.docx")); 
    InputStream in2 = new FileInputStream(new File("C:\\Clientes\\Constremac\\Repositorio_DOCS\\UPLOAD\\modeloContratoSocial.docx")); 
    OutputStream out = new FileOutputStream(new File("C:\\Clientes\\Constremac\\Repositorio_DOCS\\UPLOAD\\modeloContratoSocialMerge.docx")); 
    mergeDocx(in1,in2,out); 
} 

public static void mergeDocx(InputStream s1, InputStream s2, OutputStream os) throws Exception { 
    WordprocessingMLPackage target = WordprocessingMLPackage.load(s1); 
    insertDocx(target.getMainDocumentPart(), IOUtils.toByteArray(s2)); 
    SaveToZipFile saver = new SaveToZipFile(target); 
    saver.save(os); 
} 
private static void insertDocx(MainDocumentPart main, byte[] bytes) throws Exception { 
     AlternativeFormatInputPart afiPart = new AlternativeFormatInputPart(new PartName("/part" + (chunk++) + ".docx")); 
     afiPart.setContentType(new ContentType(CONTENT_TYPE)); 
     afiPart.setBinaryData(bytes); 
     Relationship altChunkRel = main.addTargetPart(afiPart); 
     //convertAltChunks() 
     CTAltChunk chunk = Context.getWmlObjectFactory().createCTAltChunk(); 
     chunk.setId(altChunkRel.getId()); 

     main.addObject(chunk); 
} 

Мой окончательный документ (docx) в порядке, я могу открыть его нормально. Проблема возникает, когда я конвертирую этот сгенерированный файл в PDF, появляется следующая ошибка: NOT IMPLEMENTED: поддержка w: altChunk -.

public boolean createPDF(String nomeArquivo) { 
    try  { 
     long start = System.currentTimeMillis(); 
     Configuration confg = new Configuration(); 

     System.out.println(Configuration.repositorioUpload + nomeArquivo + ".docx"); 
     InputStream is = new FileInputStream(new File(Configuration.repositorioUpload + nomeArquivo + ".docx")); 
     WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(is); 

     PdfSettings pdfSettings = new PdfSettings(); 

     OutputStream out = new FileOutputStream(new File(Configuration.repositorioUpload + nomeArquivo + ".pdf")); 
     PdfConversion converter = new Conversion(wordMLPackage); 
     converter.output(out, pdfSettings); 

     System.err.println("Generate " + Configuration.repositorioUpload + nomeArquivo + ".pdf" + " with " + (
       System.currentTimeMillis() - start) + "ms"); 
    } 
    catch (Throwable e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 

Я посылаю код Java я использую, некоторое время я пытаюсь создать этот PDF-файл, если кто-нибудь может помочь мне я благодарен.

Спасибо всем.

Объятия!


Я нашел способ использовать AltChunck, но даже за не работать правильно объединить колонтитул изображения и заголовок при экспорте в PDF не отображается.

public static void main(String[] args) throws Exception { 

    boolean ADD_TO_HEADER = true; 
    HeaderPart hp = null; 

    String inputfilepath = "C:\\Clientes\\Constremac\\Repositorio_DOCS\\UPLOAD\\default_template.xml"; 

    String chunkPath = "C:\\Clientes\\Constremac\\Repositorio_DOCS\\UPLOAD\\sample.docx"; 

    boolean save = true; 
    String outputfilepath = "C:\\Clientes\\Constremac\\Repositorio_DOCS\\UPLOAD\\altChunk_out.docx"; 


    // Open a document from the file system 
    // 1. Load the Package 
    WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(inputfilepath)); 
    //proce 
    MainDocumentPart main = wordMLPackage.getMainDocumentPart(); 

    if (ADD_TO_HEADER) { 
     hp = wordMLPackage.getDocumentModel().getSections().get(0).getHeaderFooterPolicy().getDefaultHeader(); 
    } 

    AlternativeFormatInputPart afiPart = new AlternativeFormatInputPart(new PartName("/chunk.docx")); 
    afiPart.setBinaryData(new FileInputStream(chunkPath)); 

    afiPart.setContentType(new ContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml")); //docx 
    //afiPart.setContentType(new ContentType("application/xhtml+xml")); //xhtml 

    Relationship altChunkRel = null; 
    if (ADD_TO_HEADER) { 
     altChunkRel = hp.addTargetPart(afiPart); 
    } else { 
     altChunkRel = main.addTargetPart(afiPart);   
    } 

    CTAltChunk ac = Context.getWmlObjectFactory().createCTAltChunk(); 
    ac.setId(altChunkRel.getId()); 

    if (ADD_TO_HEADER) { 
     hp.getJaxbElement().getEGBlockLevelElts().add(ac); 
    } else { 
     main.addObject(ac); 
    } 

    // Save it 

    if (save) {  
     SaveToZipFile saver = new SaveToZipFile(wordMLPackage); 
     saver.save(outputfilepath); 
     System.out.println("Saved " + outputfilepath); 
    } 
} 

Что я делаю неправильно?

ответ

2

altChunk не является «настоящим» содержимым docx.

Прежде чем он может быть выведен в формате PDF, он должен быть заменен обычными пунктами WordML, столы и т.д.

Вы можете попробовать сделать это самостоятельно, что достаточно легко, если содержание не включает в себя какие-либо отношения (изображения , гиперссылки и т. д.), или конфликтующие стили или нумерацию. Пожалуйста, смотрите далее http://www.docx4java.org/blog/2010/11/merging-word-documents/ .. или сайт моей компании plutext.com

+0

Привет JasonPlutext, спасибо за ответ, я больше похож на сомнения, я буду выполнять эту процедуру после этой строки: конвертера.output (октябрь, pdfSettings); И как я объявляю этот публичный процесс WordprocessingMLPackage (WordprocessingMLPackage srcPackage)? Можете ли вы привести мне пример? Спасибо за помощь. Объятия! –

0

Это может быть решена

An altChunk не «реальное» содержание DOCX.

с помощью Java можно преобразовать altchunk оригинальным теги слова контента,

преобразовать document.xml внутри DOCX

Docx4jProperties.setProperty(“docx4j.Convert.Out.HTML.OutputMethodXML”, 
true); 
Docx4J.toHTML(htmlSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL); 

Открыть ссылку для полного кода.

[Преобразование AltChunk Для оригинала Содержание] [1]

https://kishankichi.wordpress.com/2016/05/26/convert-altchunk-to-original-content-or-convert-to-real-docx-format-using-java

https://kishankichi.wordpress.com/2016/05/26/convert-altchunk-to-original-content-or-convert-to-real-docx-format-using-java/

Примечание:

Просьба игнорировать & NBSP и других подобных тегов в HTML содержание. Я проверил только на & nbsp.

Спасибо за повтор ...

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/12477815) –

+0

ok sir. Благодарим вас за ценный повтор. –

Смежные вопросы