【问题标题】:PdfBoxRenderer with custom width and height具有自定义宽度和高度的 PdfBoxRenderer
【发布时间】:2021-01-24 00:34:20
【问题描述】:

我在我的数据库中将 html 内容存储为原始字符串,我喜欢以 pdf 格式打印它,但使用自定义尺寸,例如页面尺寸为 10 厘米宽和 7 厘米高,而不是标准 A4 格式。

如果可能的话,谁能给我一些例子。

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    PDRectangle rec = new PDRectangle(recWidth, recHeight);
    PDPage page = new PDPage(rec);

    try (PDDocument document = new PDDocument()) {
        PdfRendererBuilder builder = new PdfRendererBuilder();
        builder.defaultTextDirection(BaseRendererBuilder.TextDirection.LTR);
        String htmlContent = "<b>Hello world</b>" + content; 
        builder.withHtmlContent(htmlContent, "");

        document.addPage(page);
        builder.usePDDocument(document);
        PdfBoxRenderer renderer = builder.buildPdfRenderer();
        renderer.createPDFWithoutClosing();

        document.save(out);
    } catch (Exception e) {
      ex.printStackTrace();
    }
    return new ByteArrayInputStream(out.toByteArray());

此代码为我生成 2 个文件,一个小文件和一个 A4。

更新:

我试过这个:

  try (PDDocument document = new PDDocument()) {
        PdfRendererBuilder builder = new PdfRendererBuilder();
        builder.defaultTextDirection(BaseRendererBuilder.TextDirection.LTR);
        builder.useDefaultPageSize(210, 297, PdfRendererBuilder.PageSizeUnits.MM);
        builder.usePdfAConformance(PdfRendererBuilder.PdfAConformance.PDFA_3_A);
        String htmlContent = "<b>content</b>";
        builder.withHtmlContent(htmlContent, "");
        builder.usePDDocument(document);
        PdfBoxRenderer renderer = builder.buildPdfRenderer();
        renderer.createPDFWithoutClosing();
        document.save(out);
    } catch (Exception e) {
        log.error(">>> The creation of PDF is invalid!");
    }
       

但在这种情况下内容不显示,如果我删除useDefaultPageSize,内容将被显示

【问题讨论】:

    标签: java pdfbox openhtmltopdf


    【解决方案1】:

    我之前没有检查此解决方案,但尝试使用您想要的页面大小和文档类型初始化构建器对象,如下所示

        builder.useDefaultPageSize(210, 297, PdfRendererBuilder.PageSizeUnits.MM);
        builder.usePdfAConformance(PdfRendererBuilder.PdfAConformance.PDFA_3_A);
    

    lib 包括许多 PDF 格式,接下来是 PdfAConformance Enum 和可能的值

    PdfAConformance Enum

    【讨论】:

    • 这很有用。你可能知道如何设置边距?
    • 我想使用自定义尺寸,例如 builder.useDefaultPageSize(283, 198, BaseRendererBuilder.PageSizeUnits.INCHES);你认为这可能吗?我意识到尺寸改变了,但内容没有打印出来
    • 尝试创建一个完整的 html 结构化页面并附加 css 规则以将边距附加到正文检查此帖子github.com/danfickle/openhtmltopdf/issues/…