Код: Выделить всё
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.Provider;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.Arrays;
@Provider
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public class MessagePdfBodyReader implements MessageBodyReader {
@Override
public boolean isReadable( Class type, Type genericType, Annotation[] annotations, MediaType mediaType ) {
return mediaType.isCompatible( MediaType.valueOf( "application/pdf" ) );
}
@Override
public InputStream[] readFrom( Class aClass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap multivaluedMap, InputStream inputStream ) throws IOException, WebApplicationException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
byte[] pdfBytes = output.toByteArray();
return new InputStream[] { new ByteArrayInputStream(pdfBytes) };
}
}
Код: Выделить всё
public class MergePdfService {
public byte[] executeService( InputStream[] pdffiles ) throws IOException, DocumentException {
return mergePdfs( pdffiles );
}
private byte[] mergePdfs(InputStream[] pdfFiles) throws IOException {
PDFMergerUtility merger = new PDFMergerUtility();
PDDocument merged = new PDDocument();
for (InputStream pdfFile : pdfFiles) {
File tempFile = File.createTempFile("temp", ".pdf");
try (FileOutputStream fos = new FileOutputStream(tempFile)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = pdfFile.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
}
try (PDDocument doc = Loader.loadPDF(tempFile)) {
merger.appendDocument(merged, doc);
} finally {
tempFile.delete();
System.out.println("Arquivo temporário deletado com sucesso!");
}
}
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
merged.save( baos );
System.out.println(pdfFiles.length);
return baos.toByteArray();
}
}
}
Как сериализовать: "форма @MultipartForm MergePdfModel"
Я использую этот импорт:
org .jboss.resteasy.annotations.providers.multipart.MultipartForm;
Класс MergePdfModel:
Код: Выделить всё
import org.jboss.resteasy.annotations.providers.multipart.PartType;
import javax.ws.rs.FormParam;
import javax.ws.rs.core.MediaType;
import java.io.InputStream;
import java.util.List;
public class MergePdfModel {
@FormParam("pdfFiles")
@PartType(MediaType.MULTIPART_FORM_DATA)
private InputStream[] pdfFiles;
@FormParam("pdfName")
@PartType(MediaType.TEXT_PLAIN)
private String pdfName;
public void setPdfName( String pdfName ) {
this.pdfName = pdfName;
}
public String getPdfName() {
return pdfName;
}
public InputStream[] getPdfFiles() {
return pdfFiles;
}
public void setPdfFiles( InputStream[] pdfFiles ) {
this.pdfFiles = pdfFiles;
}
}
Я пытаюсь получить несколько PDF-файлов в запросе с помощью MessageBodyReader, объедините их все в один файл и верните его.
Подробнее здесь: https://stackoverflow.com/questions/785 ... ples-files
Мобильная версия