首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字形未以PDF格式显示

字形未以PDF格式显示
EN

Stack Overflow用户
提问于 2020-02-18 13:05:12
回答 2查看 782关注 0票数 2

在根据特定系统的信息创建pdf文档时,使用fop,我不能显示特殊字符,不能显示“#”而不能显示字符,并在创建PDF时发出警告。

代码语言:javascript
复制
12:49:18,637 WARN  [org.apache.fop.apps.FOUserAgent] (default task-3) Glyph "?" (0x11f, gbreve) not available in font "Helvetica".
12:49:18,640 WARN  [org.apache.fop.apps.FOUserAgent] (default task-3) Glyph "?" (0x15e, Scedilla) not available in font "Helvetica".
12:49:19,041 INFO  [org.apache.fop.apps.FOUserAgent] (default task-3) Rendered page #1.
12:49:19,203 WARN  [org.apache.fop.apps.FOUserAgent] (default task-3) Glyph "?" (0x11f, gbreve) not available in font "Helvetica-Bold".
12:49:19,206 WARN  [org.apache.fop.apps.FOUserAgent] (default task-3) Glyph "?" (0x15e, Scedilla) not available in font "Helvetica-Bold".

我已经在.xsl中更改了字体系列,但是没有进展,现在它是这样的,我认为它使用的是fop.xconf,它拥有所有的字体和类型。

代码语言:javascript
复制
 <!-- Helvetica -->
        <font>
          <afp-font name="Helvetica" type="raster" codepage="T1V10500" encoding="Cp500">
....
</font>

和.xsl:

代码语言:javascript
复制
<fo:block-container absolute-position="absolute" left="25mm" top="42mm" width="160mm" height="100mm"
                                        background-color="rgb(178,178,178)">
                        <fo:block color="white" font-size="29pt">
                            <fo:inline font-weight="bold">PDF</fo:inline> Report <xsl:value-of select="year"/>
                        </fo:block>
                        <fo:block color="white" font-size="16pt" margin-top="3mm">
                            <xsl:value-of select="name"/>
                        </fo:block>
                        <fo:block color="white" font-size="16pt">
                            <xsl:value-of select="address"/>
                        </fo:block>
                    </fo:block-container>

我还能做什么?这对我来说是新的,而且已经在Stackoverflow中看到了一些类似的线程,但是它们都没有真正的帮助。

编辑:快速更新,可能根本不使用xconf?因为我已经从那里删除了所有,没有任何变化,因为我正在尝试添加FreeSerif,但是没有发生任何事情。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-27 15:15:46

好吧我想清楚了。被忽略的是我的fop.xconf文件,我的意思是,在创建pdf时,我使用的是默认值。因此,要修复它,只需编辑以下文件:

fop.xconf

代码语言:javascript
复制
...
<fonts>
<auto-detect/>
</fonts>
...

file.xsl

代码语言:javascript
复制
<fo:root font-family="Arial">
    <!-- rest of document -->
</fo:root

FopFactoryWithUserAgentAndTransformerFactoryService.java

代码语言:javascript
复制
//get the fop.xconf file to be read by the app
  final URL uri = getClass()
            .getClassLoader()
            .getResource("/pdf/fopfactorybasedir/fop.xconf");
   try{
        if(uri != null){
            fopFactory = FopFactory.newInstance(new File(uri.getFile()));
            foUserAgent = fopFactory.newFOUserAgent();
            transformerFactory = TransformerFactory.newInstance();
        }
    }catch (SAXException | IOException e)
    {
        e.printStackTrace();
    }

这样我就可以注入xconf文件了!所以请记住,始终检查xconf文件是否正在被应用程序读取!

票数 1
EN

Stack Overflow用户

发布于 2020-02-19 17:24:33

伊芙里尼,我看到你以前的答案了,我坚持了第二步,因为我没有那个'conf‘dir。我在一个Java程序上使用它,我把它放在dir里面的src/main/resources/ pdf /fopfactorybasedir中,我有一个文件夹来显示我的pdf和fop.xconf文件中的图像(在代码中任何地方都找不到)。所以我要说的是它根本不用..。)这是我的密码..。

代码语言:javascript
复制
@ApplicationScoped
        public class FopFactoryWithUserAgentAndTransformerFactoryService {
            private static final Logger LOG = 
    LoggerFactory.getLogger(FopFactoryWithUserAgentAndTransformerFactoryService.class);
            private static final String ROOT_PATH = "/pdf/fopfactorybasedir/";
            private final FopFactory fopFactory;
            private final FOUserAgent foUserAgent;
            private final TransformerFactory transformerFactory;

            public FopFactoryWithUserAgentAndTransformerFactoryService() throws URISyntaxException {
                final URI uri = FopFactoryWithUserAgentAndTransformerFactoryService.class.getResource(ROOT_PATH).toURI();
                LOG.info("fopBaseUri={}", uri);
                fopFactory = FopFactory.newInstance(uri);
                foUserAgent = fopFactory.newFOUserAgent();
                transformerFactory = TransformerFactory.newInstance();
            }

            public FopFactory getFopFactory() {
                return fopFactory;
            }
        public Fop newFop(final String outputFormat, final OutputStream out) throws FOPException {
                return fopFactory.newFop(outputFormat, foUserAgent, out);
            }
            ...

PDFFactory:

代码语言:javascript
复制
@ApplicationScoped
public class PdfFactory {

@Inject
private FopFactoryWithUserAgentAndTransformerFactoryService fopFactoryEtAl;

public PdfFactory() {

}

public PdfFactory(final FopFactoryWithUserAgentAndTransformerFactoryService fopFactoryEtAl) {
    this.fopFactoryEtAl = fopFactoryEtAl;
}
public ByteArrayDto generatePdfFromModelObject(final Object model, final String xslFileName)
....

问题是,我如何使用我的fop.xconf文件?也许如果我用它,它就足够了.?

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

https://stackoverflow.com/questions/60281589

复制
相关文章

相似问题

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