如何在Java中将表格从Word文档复制到pdf文档?

时间:2020-10-31 16:38:30

标签: java pdf itext apache-poi

** 代码,我正在尝试获取要在PDF中复制的文本和图像,但未从Word文档中复制表格 在这里,我首先使用apache poi从Word文档中获取文本和图像,然后将表格从Word文档写入pdf文档。

  1. 以页面尺寸为A4作为标准尺寸的功能

在下面的代码中查看convertWordToPdf函数。

public static void convertWordToPdf(final String src, final String desc) {
        try {
            final FileInputStream fs = new FileInputStream(src);
            final XWPFDocument doc = new XWPFDocument(fs);
            final Document pdfdoc = new Document(PageSize.A4, 72, 72, 72, 72);
            final PdfWriter pwriter = PdfWriter.getInstance(pdfdoc,
                    new FileOutputStream(desc));
            pwriter.setInitialLeading(20);
            final List<XWPFParagraph> plist = doc.getParagraphs();
            pdfdoc.open();
            for (int i = 0; i < plist.size(); i++) {
                final XWPFParagraph pa = (XWPFParagraph)plist.get(i);
                final List<XWPFRun> runs = pa.getRuns();
                for (int j = 0; j < runs.size(); j++) {
                    final XWPFRun run = (XWPFRun) runs.get(j);
                    final List<XWPFPicture> piclist = run.getEmbeddedPictures();
                    final Iterator<XWPFPicture> iterator = piclist.iterator();
                     List<XWPFTable> tabList = doc.getTables();
                    final Iterator<XWPFTable> tabIterator = tabList.iterator();
                    while (iterator.hasNext()) {
                    final XWPFPicture pic = (XWPFPicture) iterator.next();
                        final XWPFPictureData picdata = pic.getPictureData();
                        final byte[] bytepic = picdata.getData();
                        final Image imag = Image.getInstance(bytepic);
                        imag.scaleAbsoluteHeight(40);
                        imag.scaleAbsoluteWidth((imag.getWidth() * 30) / imag.getHeight());
                        pdfdoc.add(imag);
                    }
      
                    final int color = getCode(run.getColor());
                    Font f = null;
                    if (run.isBold() && run.isItalic())
                        f = FontFactory.getFont(FontFactory.TIMES_ROMAN,
                                run.getFontSize(), Font.BOLDITALIC,
                            new Color(color));
                    else if (run.isBold())
                        f = FontFactory
                                .getFont(FontFactory.TIMES_ROMAN,
                                        run.getFontSize(), Font.BOLD,
                                new Color(color));
                    else if (run.isItalic())
                        f = FontFactory.getFont(FontFactory.TIMES_ROMAN, run
                            .getFontSize(), Font.ITALIC, new Color(
                                color));
                    else if (run.isStrike())
                        f = FontFactory.getFont(FontFactory.TIMES_ROMAN,
                                run.getFontSize(), Font.STRIKETHRU,
                            new Color(color));
                    else
                        f = FontFactory.getFont(FontFactory.TIMES_ROMAN, run
                            .getFontSize(), Font.NORMAL, new Color(
                                color));
                    final String text = run.getText(-1);
                    byte[] bs;
                    if (text != null) {
                        bs = text.getBytes();
                        final String str = new String(bs, "UTF-8");
                        final Chunk chObj1 = new Chunk(str, f);
                        pdfdoc.add(chObj1);
                    }

                }
                pdfdoc.add(new Chunk(Chunk.NEWLINE));
            }
            
            
            
            
            pdfdoc.close();
        } catch (final Exception e) {
            e.printStackTrace();
        }

1 个答案:

答案 0 :(得分:0)

  • 从Word文档中获取表格,然后使用Itext API将其写回

    列表表列表= doc.getTables();
    pdftable =新的PdfPTable(3); //表格列表移动 用于(XWPFTable xwpfTable:tablesList){ pdftable = new PdfPTable(xwpfTable.getRow(0).getTableCells()。size()); 列表行= xwpfTable.getRows(); 对于(XWPFTableRow xwpfTableRow:行){ 列表单元格= xwpfTableRow.getTableCells(); 对于(XWPFTableCell xwpfTableCell:cell){ 如果(xwpfTableCell!= null) { // table = new Table(cell.size()); pdftable.addCell(xwpfTableCell.getText()); } } } pdfdoc.add(pdftable);

             }