首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用OpenPDF添加段落和边框

如何使用OpenPDF添加段落和边框
EN

Stack Overflow用户
提问于 2019-08-22 04:40:57
回答 1查看 2.1K关注 0票数 1

我使用OpenPDF来生成PDF文档,并将页眉和页脚图像添加到PDF中。需要将段落添加到PDF的中心,其中一些文本内容是动态的,基于输入请求,所有内容都需要被边框包围。我能够生成的PDf与页眉和页脚添加到它,但有问题,增加段落中心的pdf和边框。任何帮助都是非常感谢的。

我尝试过通过添加表或使用画布来尝试不同的方法,但无法解决。

代码语言:javascript
复制
   public void generatePDF(String firstName, String lastName){
    try {
        Document doc = new Document();
        PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(DEST));
        //setting font family, color
        Font font = new Font(Font.HELVETICA, 16, Font.BOLDITALIC, Color.RED);
        doc.open();
        addHeaderImageToPDF(doc,writer);
        Paragraph para = new Paragraph("Hello! This PDF is created for "+firstName+" "+lastName, font);
        para.setAlignment(Element.ALIGN_MIDDLE);
        doc.add(para);
        addFooterImageToPDF(doc,writer);
        addBorderToPDF(doc);
        doc.close();
        writer.close();   
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
}

private void addBorderToPDF(Document document){
    Rectangle rect= new Rectangle(531.5f,820,38.5f,0); // you can resize rectangle 
    rect.enableBorderSide(1);
    rect.enableBorderSide(2);
    rect.enableBorderSide(4);
    rect.enableBorderSide(8);
    rect.setBorderColor(Color.BLACK);
    rect.setBorderWidth(2);
    document.add(rect);
}

private void addHeaderImageToPDF(Document document, PdfWriter writer){
    try {
        Image image = Image.getInstance(HEADER_IMAGE_PATH);
        //image = Image.getInstance(IMAGE_PATH);
        image.scalePercent(50f);
        //image.setAbsolutePosition(0, (float) (PageSize.A4.getHeight() - 20.0));
        image.setAbsolutePosition(40, 675);
        System.out.println(image.getScaledHeight());
        document.add(image);
        image.scaleToFit(100f, 100f);
        //document.add(image);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

private void addFooterImageToPDF(Document document, PdfWriter writer){
    try {
        Image image = Image.getInstance(FOOTER_IMAGE_PATH);
        //image = Image.getInstance(IMAGE_PATH);
        image.scalePercent(50f);
        //image.setAbsolutePosition(0, (float) (PageSize.A4.getHeight() - 20.0));
        image.setAbsolutePosition(40, 450);
        System.out.println(image.getScaledHeight());
        document.add(image);
        image.scaleToFit(100f, 100f);
        //document.add(image);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

想要在中间加上段落,整个PDF的内容应该用深蓝色的边框包围。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2019-08-22 17:43:00

由于给定的标记图文pdfboxopenpdf意味着可以自由选择PDF库,这里有一个使用iText 7创建带深蓝色边框的居中段落的示例(v7.1.7):

带边框的居中段落

代码语言:javascript
复制
String firstName = "Mister";
String lastName = "Nine";
try (   PdfWriter pdfWriter = new PdfWriter(new File("CenterParagraph.pdf"));
        PdfDocument pdfDocument = new PdfDocument(pdfWriter);
        Document document = new Document(pdfDocument)   ) {
    Paragraph paragraph = new Paragraph("Hello! This PDF is created for "+firstName+" "+lastName);
    paragraph.setWidth(100).setBorder(new SolidBorder(new DeviceRgb(0f, 0f, 0.6f), 3));
    PageSize box = pdfDocument.getDefaultPageSize();
    document.showTextAligned(paragraph, (box.getLeft() + box.getRight()) / 2, (box.getTop() + box.getBottom()) / 2,
            TextAlignment.CENTER, VerticalAlignment.MIDDLE);
}

(https://github.com/mkl-public/testarea-itext7/blob/master/src/test/java/mkl/testarea/itext7/content/ShowTextAtPosition.java#L40 test testShowCenteredBorderedParagraph__)

导致

在书页的中间。

带有页眉和页脚图像和页面边框的居中段落。

代码语言:javascript
复制
String firstName = "Mister";
String lastName = "Nine";

Image img = null;
try (   InputStream imageResource = IMAGE_INPUT_STREAM ) {
    ImageData data = ImageDataFactory.create(StreamUtil.inputStreamToArray(imageResource));
    img = new Image(data);
    img.scaleToFit(100f, 100f);
}

try (   PdfWriter pdfWriter = new PdfWriter(new File("CenterParagraphWithExtras.pdf"));
        PdfDocument pdfDocument = new PdfDocument(pdfWriter);
        Document document = new Document(pdfDocument)   ) {
    PageSize box = pdfDocument.getDefaultPageSize();

    Paragraph paragraph = new Paragraph("Hello! This PDF is created for "+firstName+" "+lastName);
    paragraph.setWidth(100);
    document.showTextAligned(paragraph, (box.getLeft() + box.getRight()) / 2, (box.getTop() + box.getBottom()) / 2,
            TextAlignment.CENTER, VerticalAlignment.MIDDLE);

    PdfCanvas pdfCanvas = new PdfCanvas(pdfDocument.getLastPage());
    Rectangle borderRectangle = new Rectangle(box.getLeft() + 5, box.getBottom() + 5, box.getWidth() - 10, box.getHeight() - 10);
    pdfCanvas.setColor(new DeviceRgb(0f, 0f, 0.6f), false);
    pdfCanvas.setLineWidth(3);
    pdfCanvas.rectangle(borderRectangle);
    pdfCanvas.stroke();

    img.setFixedPosition(box.getLeft() + 40, box.getTop() - 150);
    document.add(img);
    img.setFixedPosition(box.getLeft() + 40, box.getBottom() + 50);
    document.add(img);
}

结果是

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57602156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档