首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docx4j PDF导出忽略TextDirection

docx4j PDF导出忽略TextDirection
EN

Stack Overflow用户
提问于 2018-06-14 08:18:24
回答 1查看 304关注 0票数 0

我使用最新的docx4j (3.3.7)和generate表,它包含一个单元格,文本旋转90度。docx输出是正确的,但是当导出到pdf时,这个单元格中的文本不是旋转的,只有规则的左向右方向。

冥王星的商业PDF转换器(默认启用)和docx4j-export-fo也是如此。

如何强制表格单元格中的文本旋转?

用于在tableCell中旋转文本的代码(在docx中工作良好,在pdf导出过程中被忽略):

代码语言:javascript
复制
TcPr tableCellProperties = tableCell.getTcPr();
if (tableCellProperties == null) {
    tableCellProperties = new TcPr();
    tableCell.setTcPr(tableCellProperties);
}
TextDirection td = new TextDirection();
td.setVal("tbRl");
tableCellProperties.setTextDirection(td);

我也尝试过这样做,效果也是一样:

代码语言:javascript
复制
TextDirection td = new TextDirection();
td.setVal("tbRl");
paragraph.setPPr(new PPr());
paragraph.getPPr().setTextDirection(td);

我使用以下方法导出PDF:

代码语言:javascript
复制
Docx4J.toPDF(wordprocessingMLPackage, fileOutputStream);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-15 08:57:52

由于XSL FO具有面向属性的引用,因此应该可以在docx4j-export-fo中实现:

2018年6月17日编辑

https://github.com/plutext/docx4j-export-FO/commit/3b2c7423c25fe73bb5a85d9aa8755cce6e1aca8ehttps://github.com/plutext/docx4j/commit/d8254cbf69d7bb3decaa94254946bd293c5d3ec0实现了这一点。

然而,结果是不完美的;用FOP2.3测试以下XSL-FO:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <layout-master-set
        xmlns="http://www.w3.org/1999/XSL/Format"
        xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml"
        xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml"
        xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing">
        <simple-page-master margin-bottom="12mm"
            margin-left="1in" margin-right="1in" margin-top="12mm"
            master-name="s1-simple" page-height="297mm" page-width="210mm">
            <region-body column-count="1" column-gap="12mm"
                margin-bottom="36.0pt" margin-left="0mm" margin-right="0mm"
                margin-top="36.0pt" />
            <region-before extent="0.0pt"
                region-name="xsl-region-before-simple" />
            <region-after extent="0.0pt"
                region-name="xsl-region-after-simple" />
        </simple-page-master>
        <page-sequence-master master-name="s1">
            <repeatable-page-master-alternatives>
                <conditional-page-master-reference
                    master-reference="s1-simple" />
            </repeatable-page-master-alternatives>
        </page-sequence-master>
    </layout-master-set>
    <fo:page-sequence force-page-count="no-force"
        id="section_s1" format="" master-reference="s1">
        <fo:flow flow-name="xsl-region-body">

            <fo:table border-bottom-color="#000000"
                border-bottom-style="solid" border-bottom-width="0.5pt"
                border-collapse="collapse" border-left-color="#000000"
                border-left-style="solid" border-left-width="0.5pt"
                border-right-color="#000000" border-right-style="solid"
                border-right-width="0.5pt" border-top-color="#000000"
                border-top-style="solid" border-top-width="0.5pt"
                display-align="before" start-indent="1.12in" table-layout="fixed"
                width="3.12in">
                <fo:table-column column-number="1"
                    column-width="3.12in" />
                <fo:table-body start-indent="0in">
                    <fo:table-row height="0.79in"
                        keep-together.within-page="always">
                        <fo:table-cell border-bottom-color="#000000"
                            border-bottom-style="solid" border-bottom-width="0.5pt"
                            border-left-color="#000000" border-left-style="solid"
                            border-left-width="0.5pt" border-right-color="#000000"
                            border-right-style="solid" border-right-width="0.5pt"
                            border-top-color="#000000" border-top-style="solid"
                            border-top-width="0.5pt" padding-bottom="0mm"
                            padding-left="1.91mm" padding-right="1.91mm" padding-top="0mm">
                            <fo:block-container reference-orientation="90">
                                <block xmlns="http://www.w3.org/1999/XSL/Format"
                                    font-size="11.0pt" line-height="100%" space-after="0in"
                                    start-indent="2mm">
                                    <inline font-family="Calibri">Bottom up</inline>
                                </block>
                            </fo:block-container>
                        </fo:table-cell>
                    </fo:table-row>
                    <fo:table-row height="0.79in"
                        keep-together.within-page="always">
                        <fo:table-cell border-bottom-color="#000000"
                            border-bottom-style="solid" border-bottom-width="0.5pt"
                            border-left-color="#000000" border-left-style="solid"
                            border-left-width="0.5pt" border-right-color="#000000"
                            border-right-style="solid" border-right-width="0.5pt"
                            border-top-color="#000000" border-top-style="solid"
                            border-top-width="0.5pt" padding-bottom="0mm"
                            padding-left="1.91mm" padding-right="1.91mm" padding-top="0mm">
                            <fo:block-container
                                reference-orientation="-90">
                                <block xmlns="http://www.w3.org/1999/XSL/Format"
                                    font-size="11.0pt" line-height="100%" space-after="0in"
                                    start-indent="2mm">
                                    <inline font-family="Calibri">Top down</inline>
                                </block>
                            </fo:block-container>
                        </fo:table-cell>
                    </fo:table-row>
                </fo:table-body>
            </fo:table>
            <fo:block font-size="11.0pt" line-height="107%"
                space-after="0.11in" white-space-treatment="preserve">
            </fo:block>

        </fo:flow>
    </fo:page-sequence>
</fo:root>

文本按预期旋转,但在一种情况下出现在单元格之外。

另见Rotated text in table cell rendered above cell not within

如果您进一步研究这一点,您可能会得出一些额外的fo属性是必需的,或者它是FOP中的一个bug。请在这里的评论中分享你的发现。

顺便说一句,XHTML输出中类似的行为。

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

https://stackoverflow.com/questions/50852764

复制
相关文章

相似问题

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