From e0214a6a9f969e17fc454f615bb9dae031377203 Mon Sep 17 00:00:00 2001 From: Benjamin Gamard Date: Mon, 31 Jul 2017 01:51:23 +0200 Subject: [PATCH] Closes #118: create pdf from text plain files --- .../com/sismics/docs/core/util/FileUtil.java | 28 +++++----- .../com/sismics/docs/core/util/PdfUtil.java | 55 +++++++++++-------- .../docs/rest/TestDocumentResource.java | 32 +++++------ docs-web/src/test/resources/file/document.txt | 4 +- 4 files changed, 64 insertions(+), 55 deletions(-) diff --git a/docs-core/src/main/java/com/sismics/docs/core/util/FileUtil.java b/docs-core/src/main/java/com/sismics/docs/core/util/FileUtil.java index a12637fa..515a0d3f 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/util/FileUtil.java +++ b/docs-core/src/main/java/com/sismics/docs/core/util/FileUtil.java @@ -1,26 +1,24 @@ package com.sismics.docs.core.util; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.file.Files; -import java.nio.file.Path; - -import javax.crypto.Cipher; -import javax.crypto.CipherInputStream; -import javax.crypto.CipherOutputStream; -import javax.imageio.ImageIO; - +import com.sismics.docs.core.model.jpa.File; +import com.sismics.tess4j.Tesseract; +import com.sismics.util.ImageUtil; import org.imgscalr.Scalr; import org.imgscalr.Scalr.Method; import org.imgscalr.Scalr.Mode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.sismics.docs.core.model.jpa.File; -import com.sismics.tess4j.Tesseract; -import com.sismics.util.ImageUtil; +import javax.crypto.Cipher; +import javax.crypto.CipherInputStream; +import javax.crypto.CipherOutputStream; +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; /** * File entity utilities. diff --git a/docs-core/src/main/java/com/sismics/docs/core/util/PdfUtil.java b/docs-core/src/main/java/com/sismics/docs/core/util/PdfUtil.java index 7ef06102..c6b8971a 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/util/PdfUtil.java +++ b/docs-core/src/main/java/com/sismics/docs/core/util/PdfUtil.java @@ -1,18 +1,16 @@ package com.sismics.docs.core.util; -import java.awt.image.BufferedImage; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; - -import javax.imageio.ImageIO; - +import com.google.common.base.Charsets; +import com.google.common.base.Strings; +import com.google.common.io.CharStreams; +import com.google.common.io.Closer; +import com.lowagie.text.*; +import com.lowagie.text.pdf.PdfWriter; +import com.sismics.docs.core.dao.jpa.dto.DocumentDto; +import com.sismics.docs.core.model.jpa.File; +import com.sismics.docs.core.util.pdf.PdfPage; +import com.sismics.util.ImageUtil; +import com.sismics.util.mime.MimeType; import org.apache.pdfbox.io.MemoryUsageSetting; import org.apache.pdfbox.multipdf.PDFMergerUtility; import org.apache.pdfbox.pdmodel.PDDocument; @@ -32,13 +30,14 @@ import org.odftoolkit.odfdom.doc.OdfTextDocument; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Strings; -import com.google.common.io.Closer; -import com.sismics.docs.core.dao.jpa.dto.DocumentDto; -import com.sismics.docs.core.model.jpa.File; -import com.sismics.docs.core.util.pdf.PdfPage; -import com.sismics.util.ImageUtil; -import com.sismics.util.mime.MimeType; +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; /** * PDF utilities. @@ -120,8 +119,20 @@ public class PdfUtil { if (reset) { inputStream.reset(); } - // TODO Create a PDF from the text plain - return null; + + Document output = new Document(PageSize.A4, 40, 40, 40, 40); + ByteArrayOutputStream pdfOutputStream = new ByteArrayOutputStream(); + PdfWriter.getInstance(output, pdfOutputStream); + + output.open(); + String content = CharStreams.toString(new InputStreamReader(inputStream, Charsets.UTF_8)); + Font font = FontFactory.getFont(FontFactory.COURIER); + Paragraph paragraph = new Paragraph(content, font); + paragraph.setAlignment(Element.ALIGN_LEFT); + output.add(paragraph); + output.close(); + + return new ByteArrayInputStream(pdfOutputStream.toByteArray()); } /** diff --git a/docs-web/src/test/java/com/sismics/docs/rest/TestDocumentResource.java b/docs-web/src/test/java/com/sismics/docs/rest/TestDocumentResource.java index d463613e..a6989d09 100644 --- a/docs-web/src/test/java/com/sismics/docs/rest/TestDocumentResource.java +++ b/docs-web/src/test/java/com/sismics/docs/rest/TestDocumentResource.java @@ -1,7 +1,17 @@ package com.sismics.docs.rest; -import java.io.InputStream; -import java.util.Date; +import com.google.common.io.ByteStreams; +import com.google.common.io.Resources; +import com.sismics.docs.core.util.DirectoryUtil; +import com.sismics.util.filter.TokenBasedSecurityFilter; +import com.sismics.util.mime.MimeType; +import com.sismics.util.mime.MimeTypeUtil; +import org.glassfish.jersey.media.multipart.FormDataMultiPart; +import org.glassfish.jersey.media.multipart.MultiPartFeature; +import org.glassfish.jersey.media.multipart.file.StreamDataBodyPart; +import org.joda.time.format.DateTimeFormat; +import org.junit.Assert; +import org.junit.Test; import javax.json.JsonArray; import javax.json.JsonObject; @@ -10,20 +20,8 @@ import javax.ws.rs.core.Form; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; - -import org.glassfish.jersey.media.multipart.FormDataMultiPart; -import org.glassfish.jersey.media.multipart.MultiPartFeature; -import org.glassfish.jersey.media.multipart.file.StreamDataBodyPart; -import org.joda.time.format.DateTimeFormat; -import org.junit.Assert; -import org.junit.Test; - -import com.google.common.io.ByteStreams; -import com.google.common.io.Resources; -import com.sismics.docs.core.util.DirectoryUtil; -import com.sismics.util.filter.TokenBasedSecurityFilter; -import com.sismics.util.mime.MimeType; -import com.sismics.util.mime.MimeTypeUtil; +import java.io.InputStream; +import java.util.Date; /** * Exhaustive test of the document resource. @@ -569,7 +567,7 @@ public class TestDocumentResource extends BaseJerseyTest { String document1Id = json.getString("id"); Assert.assertNotNull(document1Id); - // Add a PDF file + // Add a plain text file String file1Id; try (InputStream is = Resources.getResource("file/document.txt").openStream()) { StreamDataBodyPart streamDataBodyPart = new StreamDataBodyPart("file", is, "document.txt"); diff --git a/docs-web/src/test/resources/file/document.txt b/docs-web/src/test/resources/file/document.txt index 58b1387f..5c0a4679 100644 --- a/docs-web/src/test/resources/file/document.txt +++ b/docs-web/src/test/resources/file/document.txt @@ -1,2 +1,4 @@ This is a test document -Please love me \ No newline at end of file +Please love me +&é"'(-è_çà)=$^ù* +조선글 \ No newline at end of file