How to read pdf file and write it to outputStream

129,171

Solution 1

import java.io.*;


public class FileRead {


    public static void main(String[] args) throws IOException {


        File f=new File("C:\\Documents and Settings\\abc\\Desktop\\abc.pdf");

        OutputStream oos = new FileOutputStream("test.pdf");

        byte[] buf = new byte[8192];

        InputStream is = new FileInputStream(f);

        int c = 0;

        while ((c = is.read(buf, 0, buf.length)) > 0) {
            oos.write(buf, 0, c);
            oos.flush();
        }

        oos.close();
        System.out.println("stop");
        is.close();

    }

}

The easiest way so far. Hope this helps.

Solution 2

You can use PdfBox from Apache which is simple to use and has good performance.

Here is an example of extracting text from a PDF file (you can read more here) :

import java.io.*;
import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.util.*;

public class PDFTest {

 public static void main(String[] args){
 PDDocument pd;
 BufferedWriter wr;
 try {
         File input = new File("C:\\Invoice.pdf");  // The PDF file from where you would like to extract
         File output = new File("C:\\SampleText.txt"); // The text file where you are going to store the extracted data
         pd = PDDocument.load(input);
         System.out.println(pd.getNumberOfPages());
         System.out.println(pd.isEncrypted());
         pd.save("CopyOfInvoice.pdf"); // Creates a copy called "CopyOfInvoice.pdf"
         PDFTextStripper stripper = new PDFTextStripper();
         wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output)));
         stripper.writeText(pd, wr);
         if (pd != null) {
             pd.close();
         }
        // I use close() to flush the stream.
        wr.close();
 } catch (Exception e){
         e.printStackTrace();
        } 
     }
}

UPDATE:

You can get the text using PDFTextStripper:

PDFTextStripper reader = new PDFTextStripper();
String pageText = reader.getText(pd); // PDDocument object created
Share:
129,171
Juraj Vlahović
Author by

Juraj Vlahović

Updated on July 15, 2022

Comments

  • Juraj Vlahović
    Juraj Vlahović almost 2 years

    I need to read a pdf file with filepath "C:\file.pdf" and write it to outputStream. What is the easiest way to do that?

    @Controller
    public class ExportTlocrt {
    
    @Autowired
    private PhoneBookService phoneBookSer;
    
    private void setResponseHeaderTlocrtPDF(HttpServletResponse response) {
        response.setContentType("application/pdf");
        response.setHeader("content-disposition", "attachment; filename=Tlocrt.pdf" );
    } 
    
    @RequestMapping(value = "/exportTlocrt.html", method = RequestMethod.POST)
    public void exportTlocrt(Model model, HttpServletResponse response, HttpServletRequest request){
    
        setResponseHeaderTlocrtPDF(response);
        File f = new File("C:\\Tlocrt.pdf");
    
        try {
            OutputStream os = response.getOutputStream();
            byte[] buf = new byte[8192];
            InputStream is = new FileInputStream(f);
            int c = 0;
            while ((c = is.read(buf, 0, buf.length)) > 0) {
                os.write(buf, 0, c);
                os.flush();
            }
            os.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    
    }
    }
    

    ...........................................................................................