当前位置: 首页 > 知识库问答 >
问题:

将HTML转换为-> PDF ->转换为多部分文件Spring靴和百里叶

单昊穹
2023-03-14

我有一个关于合同管理的web应用程序,带有React和SpringBoot。用户应该能够添加新合同,然后将合同下载为PDF文件,这样他就可以签署合同,然后上传合同。pdf签名。我使用java中的多部分文件进行上传和下载,并将PDF存储在MySql数据库中。

PDF是在SpringBoot服务器中用Thymeleaf从HTML文件创建的。我不清楚的是如何将PDF文件转换为MultipartFile,这样我就可以将它保存在DB中。

此外,我想将文件转换为PDF,而不是保存在本地。我使用了iText HtmlConverter。convertToPdf(html,新文件输出流(名称));(com.itextpdf.html2pdf)我不知道如何从中获取PDF文件…然后转换为多部分文件。

这是我将数据从控制器传递到超文本标记语言文件,然后将其转换为PDF的服务。

@Service
public class PdfContentBuilder {

    private TemplateEngine templateEngine;

    @Autowired
    public PdfContentBuilder(TemplateEngine templateEngine) {
        this.templateEngine = templateEngine;
    }

    public String buildContract(Contract contract) {

        Context context = new Context();
        context.setVariable("data_contract", contract.getData());
        context.setVariable("number", contract.getNumber());

        return templateEngine.process("contract", context);
    }

    public void generatePdfFromHtml(String html, String name) throws IOException  {
        
        //here I would need to return a MultipartFile
        HtmlConverter.convertToPdf(html, new FileOutputStream(name));
    }
}

在这里,我尝试生成PDF

public MultipartFile createPDF(Contract contract){
    
    contract.setNumber(25314);
    Date myDate2 = new Date(System.currentTimeMillis());
    contract.setData(myDate2);


    String htmlString = pdfContentBuilder.buildContractTerti(contract);
    try {
        //here I don't know how to take the PDF as file and not save it local
        pdfContentBuilder.generatePdfFromHtml(htmlString, "filename-contract.pdf");

        return pdfMultipartFile;

    } catch (Exception e) {
        e.printStackTrace();
        return pdfMultipartFile;
    }
}

我搜索了HtmlConverter.convertToPdf,但是没有一个版本返回文件,所有版本都返回void。请问有人能帮忙吗?

共有1个答案

尉迟冯浩
2023-03-14

首先将pdf写入字节数组,然后存储在文件中并创建响应:

public byte[] generatePdfFromHtml(String html, String name) throws IOException  {
  ByteArrayOutputStream buffer = new ByteArrayOutputStream();              
  HtmlConverter.convertToPdf(html, buffer);
  byte[] pdfAsBytes = buffer.toByteArray();
  try (FileOutputStream fos = new FileOutputStream(name)) {
   fos.write(pdfAsBytes);
  }
  return pdfAsBytes.
}

对于下载,使用HttpEntity而不是MultipartFile,例如

HttpHeaders header = new HttpHeaders();
header.setContentType(MediaType.APPLICATION_PDF);
header.set(HttpHeaders.CONTENT_DISPOSITION,
                   "attachment; filename=" + fileName.replace(" ", "_"));
header.setContentLength(documentBody.length);

HttpEntity pdfEntity = new HttpEntity<byte[]>(pdfAsBytes, header);
 类似资料:
  • 问题内容: 按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我需要从现有的(X)HTML文档自动生成PDF文件。输入文件(报告)使用非常简单的基于表的布局,因此可能不需要支持真正精美的JavaScript / CSS。

  • 问题内容: 我需要从现有的(X)HTML文档自动生成PDF文件。输入文件(报告)使用非常简单的基于表的布局,因此可能不需要支持真正精美的JavaScript / CSS。 由于我习惯于在Java中工作,因此最好在Java项目中轻松使用的解决方案。不过,它仅需要在Windows系统上工作。 一种可行的方法,但不会产生高质量的输出(至少是开箱即用的),一种方法是使用CSS2XSLFO和Apache F

  • 问题内容: 将PDF文档转换为HTML在浏览器中查看的最佳解决方案是什么?该站点有多个PDF文档,访问者可以单击HTML格式的视图,并且应在屏幕上以HTML文件的形式查看。 运行PHP,Linux,Apache的标准网站。 问题答案: pdftohtml可以正常工作:快速,稳定,但是html结果充其量是丑陋的。我已经在有很多工作简历的网站上使用了很长时间。 但是,这是提取文本内容的好方法。 或Go

  • 我想在pdf中更改一些超文本标记语言。我所有的html都是超文本标记语言字符串,但我不知道如何在中正确传递。 如果有人知道怎么做。。一定很好。多谢多姆

  • 有没有办法将文件对象转换为多部分文件?以便我可以将该对象发送到接受接口对象的方法?

  • 问题内容: 我是一名PHP开发人员,在我的一个项目中,我需要将一些HTML文档(大约30至50页)转换为PDF文档。 我的搜索找到了以下可能的解决方案。其中包括一些PHP库和一些命令行应用程序。每种都有自己的优点和缺点。 PHP库: fpdf(需要更多的转换努力) tcpdf(需要更多的转换努力) html2fpdf http://html2fpdf.sourceforge.net html2pd