国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何通過Java的Apache PDFBox庫(kù)制作一個(gè)PDF表格模板并填充數(shù)據(jù)

這篇具有很好參考價(jià)值的文章主要介紹了如何通過Java的Apache PDFBox庫(kù)制作一個(gè)PDF表格模板并填充數(shù)據(jù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

要使用Java的Apache PDFBox庫(kù)制作一個(gè)PDF表格模板并填充數(shù)據(jù),你需要遵循以下步驟:

  1. 添加依賴:首先,確保你的項(xiàng)目中包含了Apache PDFBox的依賴。如果你使用Maven,可以在你的pom.xml文件中添加以下依賴:
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.24</version>
</dependency>
  1. 創(chuàng)建PDF模板:你可以使用PDFBox創(chuàng)建一個(gè)簡(jiǎn)單的PDF模板,或者使用其他工具(比如Adobe Acrobat)創(chuàng)建PDF模板,并在模板中添加表格。

  2. 填充表格數(shù)據(jù):使用PDFBox API向PDF模板中的表格填充數(shù)據(jù)。

下面是一個(gè)簡(jiǎn)單的例子,演示如何使用PDFBox創(chuàng)建一個(gè)包含表格的PDF文檔,并向表格中填充數(shù)據(jù):


import com.google.common.collect.Lists;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType0Font;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class PDFBoxExample {

    public static void main(String[] args) {
        // 保存的pdf全路徑
        String outPdfPath = "/out.pdf";
        // pdf需要展示的文本
        String text = "這是一些文本";
        // pdf中表格需要填充的數(shù)據(jù)
        List<List<String>> data = Lists.newArrayList();
        // 創(chuàng)建一個(gè)新的PDF文檔
        try (PDDocument newDocument = new PDDocument()) {
            ClassLoader classLoader = PDFBoxExample.class.getClassLoader();
            String[][] content = new String[data.size() + 1][8];
            content[0] = new String[]{"列1", "列2", "列3", "列4", "列5", "列6", "列7", "列8"};
            for (int i = 0; i < data.size(); i++) {
                List<String> dto = data.get(i);
                content[i + 1] = new String[]{dto.get(0), dto.get(1), dto.get(2), dto.get(3), dto.get(4), dto.get(5), dto.get(6), dto.get(7)};
            }

            PDPage pdPage = new PDPage();
            // 加載自定義字體
            InputStream inputStream = classLoader.getResourceAsStream("fonts/weiruanyahei.ttf");
            PDFont font = PDType0Font.load(newDocument, inputStream);
            // 創(chuàng)建一個(gè)新的內(nèi)容流,用于向頁(yè)面添加內(nèi)容
            try (PDPageContentStream contentStream = new PDPageContentStream(newDocument, pdPage)) {

                // 開始寫文本
                contentStream.beginText();
                //設(shè)置文本字體
                contentStream.setFont(font, 12);
                contentStream.newLineAtOffset(100, 700);
                contentStream.showText(text);
                // 結(jié)束文本塊
                contentStream.endText();

                // 在文本之后 繪制表格

                drawTable(contentStream, 500, 10, content, font, 7);
            }
            newDocument.addPage(pdPage);
            // 保存新的PDF文檔
            newDocument.save(outPdfPath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 繪制表格的方法
     * @param contentStream PDPageContentStream對(duì)象,用于在PDF頁(yè)面上繪制內(nèi)容
     * @param y 表格的起始y坐標(biāo),即表格的頂部位置
     * @param margin 表格的左邊距
     * @param content 表格的內(nèi)容,一個(gè)二維字符串?dāng)?shù)組,表示表格的行和列
     * @param font PDFont對(duì)象,表示文本的字體
     * @param fontSize 文本的字體大小
     * @throws IOException IO異常
     */
    private static void drawTable(PDPageContentStream contentStream,
                                  float y, float margin,
                                  String[][] content, PDFont font, int fontSize) throws IOException {
        final int rows = content.length;
        final int cols = content[0].length;
        final float rowHeight = 20f;
        // 邊距
        final float cellMargin = 5f;

        // 計(jì)算每列的最大寬度
        float[] colMaxWidths = new float[cols];
        for (int i = 0; i < cols; i++) {
            for (String[] row : content) {
                float textWidth = font.getStringWidth(row[i]) / 1000 * fontSize;
                if (textWidth > colMaxWidths[i]) {
                    colMaxWidths[i] = textWidth;
                }
            }
            // 為每列的文本添加邊距
            colMaxWidths[i] += 2 * cellMargin;
        }

        // 檢查表格總寬度是否超出頁(yè)面寬度
        float totalColWidth = 0f;
        for (float width : colMaxWidths) {
            totalColWidth += width;
        }

        // 繪制行
        float nexty = y;
        for (int i = 0; i <= rows; i++) {
            contentStream.moveTo(margin, nexty);
            contentStream.lineTo(margin + totalColWidth, nexty);
            contentStream.stroke();
            nexty -= rowHeight;
        }

        // 繪制列
        float nextx = margin;
        for (int i = 0; i < cols; i++) {
            contentStream.moveTo(nextx, y);
            contentStream.lineTo(nextx, y - rowHeight * rows);
            contentStream.stroke();
            nextx += colMaxWidths[i];
        }
        // 繪制最后一條列線
        contentStream.moveTo(nextx, y);
        contentStream.lineTo(nextx, y - rowHeight * rows);
        contentStream.stroke();

        // 添加文本到表格
        float textx = margin + cellMargin;
        // 從字體度量中獲取字體的上升和下降值,以確保文本居中
        float fontHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() / 1000 * fontSize;
        float fontDescent = font.getFontDescriptor().getDescent() / 1000 * fontSize;
        // 計(jì)算文本基線到單元格頂部的距離
        // 調(diào)整垂直居中
        float texty = y - (rowHeight / 2) - (fontHeight / 2) - fontDescent;
        for (String[] row : content) {
            for (int i = 0; i < row.length; i++) {
                String cell = row[i];
                contentStream.beginText();
                contentStream.setFont(font, fontSize);
                contentStream.newLineAtOffset(textx, texty);
                contentStream.showText(cell);
                contentStream.endText();
                textx += colMaxWidths[i];
            }
            texty -= rowHeight;
            textx = margin + cellMargin;
        }
    }
}

這段代碼創(chuàng)建了一個(gè)包含表格和數(shù)據(jù)的PDF文檔。注意,這個(gè)例子中的表格是靜態(tài)的,意思是你不能像在HTML中那樣動(dòng)態(tài)地添加或刪除行。如果你需要更復(fù)雜的表格布局,你可能需要編寫更多的代碼來計(jì)算行和列的位置。

如果你的PDF模板是預(yù)先存在的,并且包含可編輯的表單字段,你可以使用PDDocumentPDAcroForm類來填充這些字段,而不是手動(dòng)繪制表格。這通常是處理復(fù)雜模板的更好方法。

請(qǐng)記住,PDFBox是一個(gè)底層庫(kù),因此創(chuàng)建復(fù)雜的表格布局可能需要相當(dāng)多的手動(dòng)計(jì)算和布局工作。對(duì)于更復(fù)雜的需求,可能需要考慮使用其他庫(kù)或工具,例如iText,它提供了更高級(jí)的表格創(chuàng)建功能。文章來源地址http://www.zghlxwxcb.cn/news/detail-834715.html

到了這里,關(guān)于如何通過Java的Apache PDFBox庫(kù)制作一個(gè)PDF表格模板并填充數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java 利用pdfbox將圖片和成到pdf指定位置

    業(yè)務(wù)背景:用戶在手機(jī)APP上進(jìn)行簽名,前端將簽完名字的圖片傳入后端,后端合成新的pdf. 廢話不多說,上代碼: 注意:前端傳過來的圖片必須是透明的,否則合成的時(shí)候簽名處會(huì)有邊框 ? ? ? ?

    2024年02月09日
    瀏覽(23)
  • Java使用pdfbox進(jìn)行pdf和圖片之間的轉(zhuǎn)換

    Java使用pdfbox進(jìn)行pdf和圖片之間的轉(zhuǎn)換

    pdfbox是Apache開源的一個(gè)項(xiàng)目,支持pdf文檔操作功能。 官網(wǎng)地址:?Apache PDFBox | A Java PDF Library 支持的功能如下圖. 引入依賴

    2024年02月06日
    瀏覽(25)
  • 【Java】OpenPDF、iText、PDFBox 是三種常用的 PDF 處理庫(kù)

    OpenPDF、iText、PDFBox 是三種常用的 PDF 處理庫(kù),它們各自具有獨(dú)特的優(yōu)勢(shì)和特點(diǎn),同時(shí)也存在一些局限性和差異。本文將對(duì)這四種庫(kù)進(jìn)行詳細(xì)的比較,并通過代碼示例來展示它們的使用。 1、OpenPDF OpenPDF 是一個(gè)用于創(chuàng)建和編輯 PDF 文檔的 Java 庫(kù),它基于 iText 庫(kù)的一個(gè)分支,提供

    2024年02月09日
    瀏覽(34)
  • java中pdfbox處理pdf常用方法(讀取、寫入、合并、拆分、寫文字、寫圖片)

    java中pdfbox處理pdf常用方法(讀取、寫入、合并、拆分、寫文字、寫圖片)

    方法代碼: 測(cè)試用例: 2.1寫文字 方法代碼: 測(cè)試用例: A.pdf: A2.pdf: 2.2寫圖片 方法代碼: 測(cè)試用例: A.pdf: pic.jpg: A2.pdf: 方法代碼: 測(cè)試用例: 方法代碼: 測(cè)試用例: 引用鏈接: (17條消息) 使用Apache PDFBox實(shí)現(xiàn)拆分、合并PDF_似有風(fēng)中泣的博客-CSDN博客 (17條消息) Java使用P

    2024年02月11日
    瀏覽(32)
  • Java實(shí)現(xiàn)自動(dòng)化pdf打水印小項(xiàng)目 使用技術(shù)pdfbox、Documents4j

    Java實(shí)現(xiàn)自動(dòng)化pdf打水印小項(xiàng)目 使用技術(shù)pdfbox、Documents4j

    博主介紹:?目前全網(wǎng)粉絲2W+,csdn博客專家、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、阿里云平臺(tái)優(yōu)質(zhì)作者、專注于Java后端技術(shù)領(lǐng)域。 涵蓋技術(shù)內(nèi)容:Java后端、算法、分布式微服務(wù)、中間件、前端、運(yùn)維、ROS等。 博主所有博客文件目錄索引:博客目錄索引(持續(xù)更新) 視頻平臺(tái):

    2024年02月20日
    瀏覽(39)
  • 如何通過Java代碼將 PDF文檔轉(zhuǎn)為 HTML格式

    如何通過Java代碼將 PDF文檔轉(zhuǎn)為 HTML格式

    雖然PDF文件適合用于打印和發(fā)布,但不適合所有類型的文檔。例如,包含復(fù)雜圖表和圖形的文檔可能無法在PDF中呈現(xiàn)得很好。但是HTML文件可以在任何可運(yùn)行瀏覽器的計(jì)算機(jī)上進(jìn)行閱讀并顯示。并且HTML還具有占用服務(wù)器資源較小,便于搜索引擎收錄的特點(diǎn)。那么今天這篇文章就

    2024年02月05日
    瀏覽(21)
  • 如何在 Java 中將多個(gè) PDF 文件合并為一個(gè) PDF

    如果您正在開發(fā)涉及處理 PDF 文件的 Java 項(xiàng)目,則可能需要將多個(gè) PDF 文件合并到一個(gè)文檔中。在本文中,我們將演示如何使用 Java 編程語(yǔ)言來實(shí)現(xiàn)這一目標(biāo)。我們將從以下兩個(gè)方面向您展示如何將多個(gè)PDF文件合并為一個(gè)PDF: 將文件中的多個(gè) PDF 合并為單個(gè) PDF 將流中的多個(gè)

    2024年02月13日
    瀏覽(18)
  • 通過Python的pdfplumber庫(kù)提取pdf中表格數(shù)據(jù)

    通過Python的pdfplumber庫(kù)提取pdf中表格數(shù)據(jù)

    大家好,我是空空star,本篇給大家分享一下 《通過Python的pdfplumber庫(kù)提取pdf中表格數(shù)據(jù)》 。 pdfplumber是一個(gè)用于從PDF文檔中提取文本和表格數(shù)據(jù)的Python庫(kù)。它可以幫助用戶輕松地從PDF文件中提取有用的信息,例如表格、文本、元數(shù)據(jù)等。pdfplumber庫(kù)的特點(diǎn)包括:簡(jiǎn)單易用、速度

    2024年02月06日
    瀏覽(24)
  • 【PDFBox】PDFBox操作PDF文檔之讀取指定頁(yè)面文本內(nèi)容、讀取所有頁(yè)面文本內(nèi)容、根據(jù)模板文件生成PDF文檔

    【PDFBox】PDFBox操作PDF文檔之讀取指定頁(yè)面文本內(nèi)容、讀取所有頁(yè)面文本內(nèi)容、根據(jù)模板文件生成PDF文檔

    這篇文章,主要介紹PDFBox操作PDF文檔之讀取指定頁(yè)面文本內(nèi)容、讀取所有頁(yè)面文本內(nèi)容、根據(jù)模板文件生成PDF文檔。 目錄 一、PDFBox操作文本 1.1、讀取所有頁(yè)面文本內(nèi)容 1.2、讀取指定頁(yè)面文本內(nèi)容 1.3、寫入文本內(nèi)容 1.4、替換文本內(nèi)容 (1)自定義PDTextStripper類 (2)創(chuàng)建Key

    2024年02月16日
    瀏覽(23)
  • 使用pdfbox 為 PDF 增加水印

    使用pdfbox 為 PDF增加水印 https://www.jylt.cc/#/detail?activityIndex=2id=bd410851b0a72dad3105f9d50787f914 引入依賴 具體代碼實(shí)現(xiàn)

    2024年01月19日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包