We have an requirement to convert a PDF file to TIF file(s).
If PDF has 3 pages, it should generate 3 TIF files with 300 DPI.
For instance, a Getting Started.pdf has 4 pages,it should convert to 4 TIF files, including Getting Started.pdf_01.tif, Getting Started.pdf_02.tif, Getting Started.pdf_03.tif, and Getting Started.pdf_04.tif.
How-to
We can utilize Apache PDFBox to fulfill this requirement.
You should add maven dependency in your pom.xml
1 2 3 4 5 6 7 8 9 10 11 | <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-tools</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>com.github.jai-imageio</groupId> <artifactId>jai-imageio-core</artifactId> <version>1.3.1</version> </dependency> |
Sample code looks like:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | package albert.practice.file; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import lombok.extern.slf4j.Slf4j; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.ImageType; import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.pdfbox.tools.imageio.ImageIOUtil; @Slf4j public class PdfFileToTif { private final float dpi = 300f; public static void main(String[] args) { File pdfFile = new File("D:\\dropbox\\Getting Started.pdf"); String destination = "D:\\dropbox\\"; PdfFileToTif test = new PdfFileToTif(); test.convertPdfToTif(pdfFile, destination); } public void convertPdfToTif(File pdfFile, String destination) { if (!isFileExisted(pdfFile)) { throw new RuntimeException("File not found ! (" + pdfFile.getAbsolutePath() + ")"); } String pdfFileName = pdfFile.getName(); try { // load PDF document PDDocument document = PDDocument.load(pdfFile); // create PDF renderer PDFRenderer renderer = new PDFRenderer(document); // go through each page of PDF, and generate TIF for each PDF page. for (int i = 0; i < document.getNumberOfPages(); i++) { // Returns the given page as an RGB image with 300 DPI. BufferedImage image = renderer.renderImageWithDPI(i, dpi, ImageType.BINARY); // Assign the file name of TIF String fileName = pdfFileName + "_" + String.format("%02d", i + 1); log.debug("Generating " + fileName + ".tif to " + destination); // Writes a buffered image to a file using the given image format. ImageIOUtil.writeImage(image, destination + fileName + ".tif", Math.round(dpi)); image.flush(); } log.debug("PDF to TIF conversion well done!"); } catch (IOException e) { throw new RuntimeException(e); } } /** * 判斷檔案是否存在 * * @param file * @return true - 檔案存在; false - 檔案不存在 */ private Boolean isFileExisted(File file) { Boolean isExisted = Boolean.FALSE; isExisted = (file.exists() && (!file.isDirectory())); return isExisted; } } |
Reference
[1] https://pdfbox.apache.org/
No comments:
Post a Comment