1
\$\begingroup\$

How can this be improved?

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pdf_merging_70112016;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfImportedPage;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import properties.ApplicationProperties;
/**
 *
 * @author
 */
public class PDFMerging {
 public void mergePDF() throws FileNotFoundException {
 ApplicationProperties prop = ApplicationProperties.getInstance();
 prop.loadProperties();
 String temppath = prop.getClickProperty("tempPath");
 String FAQPath = prop.getClickProperty("FAQPath");
 String finalPDFParh = prop.getClickProperty("finalPath");
 String errorPath = prop.getClickProperty("errorPath");
 String outputFilename = "";
 File tempFolder = new File(temppath);
 File FAQFolder = new File(FAQPath);
 File[] listOfTempFiles = tempFolder.listFiles();
 File[] listOfFAQFiles = FAQFolder.listFiles();
 for (int i = 0; i < listOfTempFiles.length; i++) {
 for (int j = 0; j < listOfFAQFiles.length; j++) {
 if (listOfTempFiles[i].isFile() && listOfTempFiles[i].length() > 0) {
 if (listOfTempFiles[i].getName().toLowerCase().contains(".pdf")) {
 if (listOfTempFiles[i].getName().substring(listOfTempFiles[i].getName().lastIndexOf("#") + 1).equals(listOfFAQFiles[j].getName())) {
 try {
 List<InputStream> list = new ArrayList<InputStream>();
 list.add(new FileInputStream(listOfTempFiles[i]));
 list.add(new FileInputStream(listOfFAQFiles[j]));
 System.out.println(listOfTempFiles[i].getName() + "with FAQ: " + listOfFAQFiles[j].getName());
 int iend = listOfTempFiles[i].getName().lastIndexOf("#");
 if (iend != -1) {
 outputFilename = listOfTempFiles[i].getName().substring(0, iend);
 }
 OutputStream out = new FileOutputStream(new File(finalPDFParh + "/" + outputFilename + ".pdf"));
 doMerge(list, out);
 list.clear();
 } catch (FileNotFoundException e) {
 e.printStackTrace();
 } catch (DocumentException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
 if (listOfTempFiles[i].getName().substring(listOfTempFiles[i].getName().lastIndexOf("#") + 1).toUpperCase().contains("NA")) {
 int iend = listOfTempFiles[i].getName().lastIndexOf("#");
 if (iend != -1) {
 outputFilename = listOfTempFiles[i].getName().substring(0, iend);
 }
 listOfTempFiles[i].renameTo(new File(finalPDFParh + "/" + outputFilename + ".pdf"));
 }
 }
 } else {
 listOfTempFiles[i].renameTo(new File(errorPath + "/" + outputFilename + ".pdf"));
 }
 }
 }
 }
 public static void doMerge(List<InputStream> list, OutputStream outputStream)
 throws DocumentException, IOException {
 Document document = new Document();
 PdfWriter writer = PdfWriter.getInstance(document, outputStream);
 document.open();
 PdfContentByte cb = writer.getDirectContent();
 for (InputStream in : list) {
 PdfReader reader = new PdfReader(in);
 for (int i = 1; i <= reader.getNumberOfPages(); i++) {
 document.newPage();
 //import the page from source pdf
 PdfImportedPage page = writer.getImportedPage(reader, i);
 //add the page to the destination pdf
 cb.addTemplate(page, 0, 0);
 }
 }
 outputStream.flush();
 document.close();
 outputStream.close();
 }
}
asked Nov 8, 2016 at 7:16
\$\endgroup\$
1

1 Answer 1

1
\$\begingroup\$
  • Remove the automatically generated comment at the top of the file.
  • Instead of using printStackTrace, either throw the exception or log the (expected) exception and continue.
  • Any file you open must be closed again. Use try-with-resources for that.
  • list.clear() is unnecessary. Just let the garbage collector do its work.
  • Use for (File faqFile : faqFiles) instead of counting j.
  • Since listOfFAQFiles is not a list but an array, don't call it list. Just faqFiles is simpler and enough.
  • Instead of passing open streams around, prefer to pass the files. This makes it easier to close the streams, even when an exception occurs.
answered Nov 8, 2016 at 7:36
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.