mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud)
78537: Merged V4.2-BUG-FIX (4.2.4) to HEAD-BUG-FIX (5.0/Cloud) 77398: MNT-11279: Docx Preview: FileName in the document header not previewing correctly - Keep original name during convertion. - Add unit testMNT-11279: Docx Preview: FileName in the document header not previewing correctly - Keep original name during convertion. - Add unit test git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@82590 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -27,6 +27,7 @@ import java.io.InputStreamReader;
|
|||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.io.Writer;
|
import java.io.Writer;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
import net.sf.jooreports.converter.DocumentFamily;
|
import net.sf.jooreports.converter.DocumentFamily;
|
||||||
import net.sf.jooreports.converter.DocumentFormat;
|
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.error.AlfrescoRuntimeException;
|
||||||
import org.alfresco.repo.content.MimetypeMap;
|
import org.alfresco.repo.content.MimetypeMap;
|
||||||
import org.alfresco.service.cmr.repository.ContentIOException;
|
import org.alfresco.service.cmr.repository.*;
|
||||||
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.util.TempFileProvider;
|
import org.alfresco.util.TempFileProvider;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.pdfbox.exceptions.COSVisitorException;
|
import org.apache.pdfbox.exceptions.COSVisitorException;
|
||||||
@@ -334,13 +331,23 @@ public abstract class OOoContentTransformerHelper extends ContentTransformerHelp
|
|||||||
" writer: " + writer);
|
" 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
|
// create temporary files to convert from and to
|
||||||
File tempFromFile = TempFileProvider.createTempFile(
|
// The source file should have the name which was on upload
|
||||||
getTempFilePrefix()+"-source-",
|
File tempFromFile = new File(tempSubfolder, origFileName );
|
||||||
"." + sourceExtension);
|
|
||||||
File tempToFile = TempFileProvider.createTempFile(
|
File tempToFile = TempFileProvider.createTempFile(
|
||||||
getTempFilePrefix()+"-target-",
|
origFileName + "-" + getTempFilePrefix()+"-target-",
|
||||||
"." + targetExtension);
|
"." + targetExtension, tempSubfolder);
|
||||||
|
|
||||||
// There is a bug (reported in ALF-219) whereby JooConverter (the Alfresco Community Edition's 3rd party
|
// 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.
|
// 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,
|
" to file: " + tempToFile,
|
||||||
e);
|
e);
|
||||||
}
|
}
|
||||||
|
catch (Throwable ee)
|
||||||
|
{
|
||||||
|
produceEmptyPdfFile(tempToFile);
|
||||||
|
getLogger().error("Convertation problem", ee);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getLogger().isDebugEnabled())
|
if (getLogger().isDebugEnabled())
|
||||||
@@ -396,7 +408,12 @@ public abstract class OOoContentTransformerHelper extends ContentTransformerHelp
|
|||||||
getLogger().debug("transformation successful");
|
getLogger().debug("transformation successful");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getOriginalFileName(TransformationOptions options)
|
||||||
|
{
|
||||||
|
return transformerDebug == null ? null : transformerDebug.getFileName(options, true, -1);
|
||||||
|
}
|
||||||
|
|
||||||
private boolean temporaryMsFile(TransformationOptions options)
|
private boolean temporaryMsFile(TransformationOptions options)
|
||||||
{
|
{
|
||||||
String fileName = transformerDebug == null ? null : transformerDebug.getFileName(options, true, -1);
|
String fileName = transformerDebug == null ? null : transformerDebug.getFileName(options, true, -1);
|
||||||
|
@@ -134,6 +134,47 @@ public class OpenOfficeContentTransformerTest extends AbstractContentTransformer
|
|||||||
transformer.transform(reader, writer);
|
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.
|
* Some transformations fail intermittently within OOo on our test server.
|
||||||
* Rather than exclude these transformations from product code, where they
|
* Rather than exclude these transformations from product code, where they
|
||||||
|
BIN
source/test-resources/misc/Test-Header-Office-2010.docx
Normal file
BIN
source/test-resources/misc/Test-Header-Office-2010.docx
Normal file
Binary file not shown.
Reference in New Issue
Block a user