Границы, созданные в шаблоне PDF с использованием Java Apache PdfBoxJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Границы, созданные в шаблоне PDF с использованием Java Apache PdfBox

Сообщение Anonymous »

В ближайшем будущем я займусь разработкой сервиса генерации PDF-файлов. Все дело в том, что простой шаблон заполняется данными, поступающими из запроса.
Во время исследования я услышал об 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»