Вы должны использовать StreamingOutput вместо использования File.
String homePath = System.getProperty("user.home");
String filePath = homePath + "/Downloads/Resume" + LocalDateTime.now().toLocalDate() + ".pdf";
org.xhtmlrenderer.pdf.ITextRenderer renderer = new ITextRenderer();
String yourXhtmlContentAsString = "<h1>hi </h1>";
renderer.setDocumentFromString(yourXhtmlContentAsString);
renderer.layout();
java.io.FileOutputStream fos = new java.io.FileOutputStream(filePath);
renderer.createPDF(fos);
//fos.close();
final File file = new File(filePath);
StreamingOutput fileStream = new StreamingOutput()
{
@Override
public void write(java.io.OutputStream output) throws IOException, WebApplicationException
{
try
{
byte[] data = Files.readAllBytes(file.toPath());
output.write(data);
output.flush();
}
catch (Exception e)
{
throw new WebApplicationException("File Not Found. !!");
}
}
};
return Response
.ok( fileStream, MediaType.APPLICATION_OCTET_STREAM)
.header("Content-Disposition", "attachment; filename=\"Resume" + LocalDateTime.now().toLocalDate() + ".pdf\"")
.build();
Этот селектор должен работать, но будет более эффективным, если вы замените его подходящей разметкой:
//*[contains(@class, 'Test')]
Или, поскольку мы знаем, что искомым элементом является div
:
//div[contains(@class, 'Test')]
Но поскольку это также будет соответствовать случаям вроде class = "Testvalue"
или class = "newTest"
, версия @ Tomalak, представленная в комментариях, лучше :
//div[contains(concat(' ', @class, ' '), ' Test ')]
Если вы действительно хотите быть уверены в правильности совпадения, вы также можете использовать функцию normalize-space для удаления случайных пробелов вокруг имени класса (как указано @Terry):
//div[contains(concat(' ', normalize-space(@class), ' '), ' Test ')]
Обратите внимание, что во всех В этих версиях * лучше всего заменить на любое имя элемента, которое вы действительно хотите сопоставить, если только вы не хотите искать каждый элемент в документе для данного условия.
Соответствие против одно класс, который имеет пробел.
<div class="hello "></div>
//div[normalize-space(@class)="hello"]