露天环境中DOCX到PDF的转换-大小限制
我已经编写了一个自定义的Alfresco调度程序来将DOCX文件转换为PDF。PS:Alfresco 5.2.3企业版 我注意到Alfresco的OOTB配置只允许那些DOCX文件转换为大小为768KB的PDF文件。768KB以上的DOCX文件不会转换为PDF,并且会在日志中引发异常露天环境中DOCX到PDF的转换-大小限制,pdf,alfresco,transformation,docx,Pdf,Alfresco,Transformation,Docx,我已经编写了一个自定义的Alfresco调度程序来将DOCX文件转换为PDF。PS:Alfresco 5.2.3企业版 我注意到Alfresco的OOTB配置只允许那些DOCX文件转换为大小为768KB的PDF文件。768KB以上的DOCX文件不会转换为PDF,并且会在日志中引发异常 Caused by: java.lang.StackOverflowError at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(
Caused by: java.lang.StackOverflowError
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:77)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:153)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:100)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:153)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:100)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:153)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:100)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:153)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:100)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:153)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:100)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:153)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:100)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:153)
为了克服这个问题,我尝试在alfresco global中设置以下属性,将限制增加到5MB
content.transformer.JodConverter.extensions.docx.pdf.maxSourceSizeKBytes=5120
但是当我上传一个1.5MBdocx文件进行测试时,日志中会抛出以下异常
Caused by: java.lang.StackOverflowError
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:77)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:153)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:100)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:153)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:100)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:153)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:100)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:153)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:100)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:153)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:100)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:153)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:100)
at org.apache.pdfbox.util.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:153)
用于将文档转换为pdf的代码:
String mimeType = contentService.getReader(doc, ContentModel.PROP_CONTENT).getMimetype().trim();
ContentReader docReader = contentService.getReader(doc, ContentModel.PROP_CONTENT);
String pdfName = nodeService.getProperty(doc, ContentModel.PROP_NAME).toString();
String fileExtension = Files.getFileExtension(pdfName);
pdfName = pdfName.replace(fileExtension, "pdf");
String targetMimetype = "application/pdf";
ContentWriter writer = contentService.getWriter(doc, ContentModel.PROP_CONTENT, true);
writer.setMimetype(targetMimetype); // new mimetype
writer.setEncoding(docReader.getEncoding()); // original encoding
nodeService.setProperty(doc,ContentModel.PROP_NAME,pdfName);
// Try and transform the content using the supplied delegate
ContentTransformer pdfTransformer = contentService.getTransformer(mimeType, MimetypeMap.MIMETYPE_PDF);
pdfTransformer.transform(docReader, writer);
此外,我还尝试在文件夹上配置OOTB规则,以将传入文件转换为PDF。因此,下面的属性已在alfresco global中配置
content.transformer.JodConverter.extensions.docx.pdf.maxSourceSizeKBytes=5120
现在,当我将一个1.5 MB的DOCX文件上传到那个文件夹时,该文件无法上传。我收到失败:504信息
你知道会有什么问题吗
提前感谢。尝试增加堆栈内存。例如:
-Xss4m
环露天支架?这是为企业版付费的一部分!我非常怀疑仅仅改变尺寸限制会导致这种错误。人们总是习惯性地改变这个最大值。关于Java代码的问题:为什么要尝试将PDF写回原始节点?创建一个新的nodeRef并对其进行写入不是更好吗?实际上,Jeff,我们的要求是将原始文件转换为PDF,并用PDF替换原始文件。这就是我们之所以这么做的原因。你把这篇文章作为一个答案,还是仅仅是一个评论?这似乎不是一个答案。