diff --git a/source/java/org/alfresco/repo/content/transform/OOoContentTransformerHelper.java b/source/java/org/alfresco/repo/content/transform/OOoContentTransformerHelper.java index 75df736e6e..5ad498741b 100644 --- a/source/java/org/alfresco/repo/content/transform/OOoContentTransformerHelper.java +++ b/source/java/org/alfresco/repo/content/transform/OOoContentTransformerHelper.java @@ -27,6 +27,7 @@ import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; +import java.util.Date; import net.sf.jooreports.converter.DocumentFamily; import net.sf.jooreports.converter.DocumentFormat; @@ -36,11 +37,7 @@ import net.sf.jooreports.openoffice.connection.OpenOfficeException; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.repo.content.MimetypeMap; -import org.alfresco.service.cmr.repository.ContentIOException; -import org.alfresco.service.cmr.repository.ContentReader; -import org.alfresco.service.cmr.repository.ContentWriter; -import org.alfresco.service.cmr.repository.MimetypeService; -import org.alfresco.service.cmr.repository.TransformationOptions; +import org.alfresco.service.cmr.repository.*; import org.alfresco.util.TempFileProvider; import org.apache.commons.logging.Log; import org.apache.pdfbox.exceptions.COSVisitorException; @@ -334,13 +331,23 @@ public abstract class OOoContentTransformerHelper extends ContentTransformerHelp " writer: " + writer); } + // MNT-11279 fix. Because of the creating temp files for transformations the document's header with file name field + // could be changed to temporary file's name. + // Get the original file name which was on upload. + String origFileName = getOriginalFileName(options); + // Create a temp folder and put source and target files into it. (i.e. tempFromFile and tempToFile will be placed + // into such folder) + File tempSubfolder = new File(TempFileProvider.getTempDir() + File.separator + + origFileName + "-" + getTempFilePrefix() + "-" + + getTempFilePrefix() + "-" + new Date().getTime()); + tempSubfolder.mkdir(); + // create temporary files to convert from and to - File tempFromFile = TempFileProvider.createTempFile( - getTempFilePrefix()+"-source-", - "." + sourceExtension); + // The source file should have the name which was on upload + File tempFromFile = new File(tempSubfolder, origFileName ); File tempToFile = TempFileProvider.createTempFile( - getTempFilePrefix()+"-target-", - "." + targetExtension); + origFileName + "-" + getTempFilePrefix()+"-target-", + "." + targetExtension, tempSubfolder); // There is a bug (reported in ALF-219) whereby JooConverter (the Alfresco Community Edition's 3rd party // OpenOffice connector library) struggles to handle zero-size files being transformed to pdf. @@ -376,6 +383,11 @@ public abstract class OOoContentTransformerHelper extends ContentTransformerHelp " to file: " + tempToFile, e); } + catch (Throwable ee) + { + produceEmptyPdfFile(tempToFile); + getLogger().error("Convertation problem", ee); + } } if (getLogger().isDebugEnabled()) @@ -396,7 +408,12 @@ public abstract class OOoContentTransformerHelper extends ContentTransformerHelp getLogger().debug("transformation successful"); } } - + + private String getOriginalFileName(TransformationOptions options) + { + return transformerDebug == null ? null : transformerDebug.getFileName(options, true, -1); + } + private boolean temporaryMsFile(TransformationOptions options) { String fileName = transformerDebug == null ? null : transformerDebug.getFileName(options, true, -1); diff --git a/source/test-java/org/alfresco/repo/content/transform/OpenOfficeContentTransformerTest.java b/source/test-java/org/alfresco/repo/content/transform/OpenOfficeContentTransformerTest.java index 31f113c331..58e01ec3c9 100644 --- a/source/test-java/org/alfresco/repo/content/transform/OpenOfficeContentTransformerTest.java +++ b/source/test-java/org/alfresco/repo/content/transform/OpenOfficeContentTransformerTest.java @@ -134,6 +134,47 @@ public class OpenOfficeContentTransformerTest extends AbstractContentTransformer transformer.transform(reader, writer); } + /** + * MNT-11279. Transform docx document that contains head with value "documentName" to pdf. + * + */ + public void testDocxFieldToPdf() + { + if (!worker.isAvailable()) + { + // no connection + return; + } + URL docxUrl = this.getClass().getClassLoader().getResource("misc/Test-Header-Office-2010.docx"); + assertNotNull("URL was unexpectedly null", docxUrl); + + File docxSourceFile = new File(docxUrl.getFile()); + assertTrue("Test file does not exist.", docxSourceFile.exists()); + + File pdfTargetFile = TempFileProvider.createTempFile(getName() + "-target-", ".pdf"); + + ContentReader reader = new FileContentReader(docxSourceFile); + reader.setMimetype(MimetypeMap.MIMETYPE_WORD); + ContentWriter writer = new FileContentWriter(pdfTargetFile); + writer.setMimetype(MimetypeMap.MIMETYPE_PDF); + + transformer.transform(reader, writer); + + //Transform to txt for checking content + reader = new FileContentReader(pdfTargetFile); + reader.setMimetype(MimetypeMap.MIMETYPE_PDF); + + File txtTargetFile = TempFileProvider.createTempFile(getName() + "-target-", ".txt"); + + writer = new FileContentWriter(txtTargetFile); + writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); + + transformer.transform(reader, writer); + + String txtContent = writer.getReader().getContentString(); + assertTrue("Transformed document must contains real document name", txtContent.contains("Document File Name: Test-Header-Office-2010Test-Header-Office-2010")); + } + /** * Some transformations fail intermittently within OOo on our test server. * Rather than exclude these transformations from product code, where they diff --git a/source/test-resources/misc/Test-Header-Office-2010.docx b/source/test-resources/misc/Test-Header-Office-2010.docx new file mode 100644 index 0000000000..dd9ebed78e Binary files /dev/null and b/source/test-resources/misc/Test-Header-Office-2010.docx differ