Во время исследования я услышал об Apache PDFBox и на данный момент тестирую его - выглядит очень удобно, но у меня есть неприятная проблема - когда PDF-файл сгенерированный, он имеет странные серые границы.
Я провел исследование и не нашел способа избавиться от них.
Мой образец DataDTO:
Код: Выделить всё
@Data
public class DocumentDataDto {
private int documentNumber;
private LocalDate date;
private String creatorFirstName;
private String creatorLastName;
}
Код: Выделить всё
@RestController
@RequiredArgsConstructor
public class PdfController {
private final PdfService pdfService;
@PostMapping(value = "/generatePdf")
public ResponseEntity generatePdf(@RequestBody DocumentDataDto data) {
ByteArrayResource pdf = pdfService.generatePdf(data);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=generated.pdf");
headers.add(HttpHeaders.CONTENT_TYPE, "application/pdf");
return ResponseEntity.ok()
.headers(headers)
.contentLength(pdf.contentLength())
.body(pdf);
}
}
Код: Выделить всё
@Service
public class PdfService {
public ByteArrayResource generatePdf(DocumentDataDto data) {
try {
ClassPathResource pdfResource = new ClassPathResource("templates/template1.pdf");
try (InputStream inputStream = pdfResource.getInputStream();
PDDocument document = PDDocument.load(inputStream)) {
PDAcroForm form = document.getDocumentCatalog().getAcroForm();
if (form != null) {
PDField field = form.getField("Text1");
if (field != null) {
field.setValue(String.valueOf(data.getDocumentNumber()));
}
field = form.getField("Text2");
if (field != null) {
field.setValue(String.valueOf(data.getDate()));
}
field = form.getField("Text3");
if (field != null) {
field.setValue(data.getCreatorFirstName() + " " + data.getCreatorLastName());
}
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
document.save(byteArrayOutputStream);
return new ByteArrayResource(byteArrayOutputStream.toByteArray());
}
}
} catch (IOException e) {
e.printStackTrace();
}
return new ByteArrayResource(new byte[0]);
}
}
Мой шаблон PDF выглядит просто:
Создан с использованием https://www.pdfescape.com
Я пытался удалить стили из AcroForm, а также сделать их невидимыми. К сожалению, ни один из моих подходов не помог. Конечный результат всегда был таким:
вывод
Должен признаться, это мой первый раз, когда я создаю такой сервис для PDF.
Если у вас есть какие-либо советы, дайте мне знать — может быть, есть более простые способы добиться того, чтобы PDF-файл был заполнен чистым текстом?
Большое спасибо за помощь!
Подробнее здесь: https://stackoverflow.com/questions/790 ... che-pdfbox
Мобильная версия