diff --git a/pdf-toolkit-repo/src/main/java/org/alfresco/extension/pdftoolkit/repo/action/executer/PDFExtractPageActionExecuter.java b/pdf-toolkit-repo/src/main/java/org/alfresco/extension/pdftoolkit/repo/action/executer/PDFExtractPageActionExecuter.java index eded8ca..c51a290 100644 --- a/pdf-toolkit-repo/src/main/java/org/alfresco/extension/pdftoolkit/repo/action/executer/PDFExtractPageActionExecuter.java +++ b/pdf-toolkit-repo/src/main/java/org/alfresco/extension/pdftoolkit/repo/action/executer/PDFExtractPageActionExecuter.java @@ -29,9 +29,9 @@ public class PDFExtractPageActionExecuter extends BasePDFActionExecuter { @Override protected void addParameterDefinitions(List paramList) { - paramList.add(new ParameterDefinitionImpl(PDFToolkitConstants.PARAM_DESTINATION_FOLDER, DataTypeDefinition.NODE_REF, false, getParamDisplayLabel(PDFToolkitConstants.PARAM_DESTINATION_FOLDER))); + paramList.add(new ParameterDefinitionImpl(PDFToolkitConstants.PARAM_DESTINATION_FOLDER, DataTypeDefinition.NODE_REF, true, getParamDisplayLabel(PDFToolkitConstants.PARAM_DESTINATION_FOLDER))); paramList.add(new ParameterDefinitionImpl(PDFToolkitConstants.PARAM_EXTRACT_PAGES, DataTypeDefinition.TEXT, true, getParamDisplayLabel(PDFToolkitConstants.PARAM_DELETE_PAGES))); - paramList.add(new ParameterDefinitionImpl(PDFToolkitConstants.PARAM_DESTINATION_NAME, DataTypeDefinition.TEXT, false, getParamDisplayLabel(PDFToolkitConstants.PARAM_DESTINATION_NAME))); + paramList.add(new ParameterDefinitionImpl(PDFToolkitConstants.PARAM_DESTINATION_NAME, DataTypeDefinition.TEXT, true, getParamDisplayLabel(PDFToolkitConstants.PARAM_DESTINATION_NAME))); super.addParameterDefinitions(paramList); } @@ -39,7 +39,7 @@ protected void addParameterDefinitions(List paramList) @Override protected void executeImpl(Action action, NodeRef actionedUponNodeRef) { - NodeRef result = pdfToolkitService.deletePagesFromPDF(actionedUponNodeRef, action.getParameterValues()); + NodeRef result = pdfToolkitService.extractPagesFromPDF(actionedUponNodeRef, action.getParameterValues()); action.setParameterValue(PARAM_RESULT, result); } } diff --git a/pdf-toolkit-repo/src/main/java/org/alfresco/extension/pdftoolkit/service/PDFToolkitServiceImpl.java b/pdf-toolkit-repo/src/main/java/org/alfresco/extension/pdftoolkit/service/PDFToolkitServiceImpl.java index 5750b55..03fb3a3 100644 --- a/pdf-toolkit-repo/src/main/java/org/alfresco/extension/pdftoolkit/service/PDFToolkitServiceImpl.java +++ b/pdf-toolkit-repo/src/main/java/org/alfresco/extension/pdftoolkit/service/PDFToolkitServiceImpl.java @@ -1125,96 +1125,6 @@ public NodeRef extractPagesFromPDF(NodeRef targetNodeRef, Map params, String pages, boolean delete) - { - InputStream is = null; - File tempDir = null; - ContentWriter writer = null; - PdfReader pdfReader = null; - NodeRef destinationNode = null; - - try - { - ContentReader targetReader = getReader(targetNodeRef); - is = targetReader.getContentInputStream(); - - File alfTempDir = TempFileProvider.getTempDir(); - tempDir = new File(alfTempDir.getPath() + File.separatorChar + targetNodeRef.getId()); - tempDir.mkdir(); - - Boolean inplace = Boolean.valueOf(String.valueOf(params.get(PARAM_INPLACE))); - - String fileName = getFilename(params, targetNodeRef); - - File file = new File(tempDir, ffs.getFileInfo(targetNodeRef).getName()); - - pdfReader = new PdfReader(is); - Document doc = new Document(pdfReader.getPageSizeWithRotation(1)); - PdfCopy copy = new PdfCopy(doc, new FileOutputStream(file)); - doc.open(); - - List pagelist = parsePageList(pages); - - for (int pageNum = 1; pageNum <= pdfReader.getNumberOfPages(); pageNum++) - { - if (pagelist.contains(pageNum) && !delete) { - copy.addPage(copy.getImportedPage(pdfReader, pageNum)); - } - } - doc.close(); - - destinationNode = createDestinationNode(fileName, - (NodeRef)params.get(PARAM_DESTINATION_FOLDER), targetNodeRef, inplace); - writer = cs.getWriter(destinationNode, ContentModel.PROP_CONTENT, true); - - writer.setEncoding(targetReader.getEncoding()); - writer.setMimetype(FILE_MIMETYPE); - - // Put it in the repository - writer.putContent(file); - - // Clean up - file.delete(); - - } - catch (IOException e) - { - throw new AlfrescoRuntimeException(e.getMessage(), e); - } - catch (DocumentException e) - { - throw new AlfrescoRuntimeException(e.getMessage(), e); - } - catch (Exception e) - { - throw new AlfrescoRuntimeException(e.getMessage(), e); - } - finally - { - if (pdfReader != null) - { - pdfReader.close(); - } - if (is != null) - { - try - { - is.close(); - } - catch (IOException e) - { - throw new AlfrescoRuntimeException(e.getMessage(), e); - } - } - - if (tempDir != null) - { - tempDir.delete(); - } - } - return destinationNode; - } - @Override public NodeRef rotatePDF(NodeRef targetNodeRef, Map params) { @@ -1311,6 +1221,96 @@ public NodeRef rotatePDF(NodeRef targetNodeRef, Map params return destinationNode; } + private NodeRef subsetPDFDocument(NodeRef targetNodeRef, Map params, String pages, boolean delete) + { + InputStream is = null; + File tempDir = null; + ContentWriter writer = null; + PdfReader pdfReader = null; + NodeRef destinationNode = null; + + try + { + ContentReader targetReader = getReader(targetNodeRef); + is = targetReader.getContentInputStream(); + + File alfTempDir = TempFileProvider.getTempDir(); + tempDir = new File(alfTempDir.getPath() + File.separatorChar + targetNodeRef.getId()); + tempDir.mkdir(); + + Boolean inplace = Boolean.valueOf(String.valueOf(params.get(PARAM_INPLACE))); + + String fileName = getFilename(params, targetNodeRef); + + File file = new File(tempDir, ffs.getFileInfo(targetNodeRef).getName()); + + pdfReader = new PdfReader(is); + Document doc = new Document(pdfReader.getPageSizeWithRotation(1)); + PdfCopy copy = new PdfCopy(doc, new FileOutputStream(file)); + doc.open(); + + List pagelist = parsePageList(pages); + + for (int pageNum = 1; pageNum <= pdfReader.getNumberOfPages(); pageNum++) + { + if (pagelist.contains(pageNum) && !delete) { + copy.addPage(copy.getImportedPage(pdfReader, pageNum)); + } + } + doc.close(); + + destinationNode = createDestinationNode(fileName, + (NodeRef)params.get(PARAM_DESTINATION_FOLDER), targetNodeRef, inplace); + writer = cs.getWriter(destinationNode, ContentModel.PROP_CONTENT, true); + + writer.setEncoding(targetReader.getEncoding()); + writer.setMimetype(FILE_MIMETYPE); + + // Put it in the repository + writer.putContent(file); + + // Clean up + file.delete(); + + } + catch (IOException e) + { + throw new AlfrescoRuntimeException(e.getMessage(), e); + } + catch (DocumentException e) + { + throw new AlfrescoRuntimeException(e.getMessage(), e); + } + catch (Exception e) + { + throw new AlfrescoRuntimeException(e.getMessage(), e); + } + finally + { + if (pdfReader != null) + { + pdfReader.close(); + } + if (is != null) + { + try + { + is.close(); + } + catch (IOException e) + { + throw new AlfrescoRuntimeException(e.getMessage(), e); + } + } + + if (tempDir != null) + { + tempDir.delete(); + } + } + return destinationNode; + } + private ContentReader getReader(NodeRef nodeRef) { // first, make sure the node exists diff --git a/pdf-toolkit-share/src/main/resources/META-INF/share-config-custom.xml b/pdf-toolkit-share/src/main/resources/META-INF/share-config-custom.xml index 4c11210..dac14c7 100644 --- a/pdf-toolkit-share/src/main/resources/META-INF/share-config-custom.xml +++ b/pdf-toolkit-share/src/main/resources/META-INF/share-config-custom.xml @@ -381,7 +381,7 @@ - +