0

次の依存関係で構成された App Engine Java Maven プロジェクトがあります

<dependency>
    <groupId>com.itextpdf.tool</groupId>
    <artifactId>xmlworker</artifactId>
    <version>5.5.9</version>
    <exclusions>
        <exclusion>
            <artifactId>itextpdf</artifactId>
            <groupId>com.itextpdf</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextg</artifactId>
    <version>5.5.9</version>
</dependency>

メインの iText リリースを無視し、Android/App Engine に固有の iTextG バージョンを使用する除外戦略を使用しています

私のプロジェクトは、PDF ファイルを作成するために、html 入力、css ファイル、およびいくつかのフォント ファイルを受け取るように構成されています。

ここにフォントの読み込みに関連する部分的なコードがあります

XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
for (java.io.File fontFile : fontFiles) {
    fontProvider.register(fontFile.getAbsolutePath());
}
CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
...

localhost 環境では問題なく、正しく PDF が生成されています。オンライン環境では、このエラーが発生します

java.lang.NoClassDefFoundError: java.nio.MappedByteBuffer is a restricted class. Please see the Google App Engine developer's guide for more details.
at com.google.apphosting.runtime.security.shared.stub.java.nio.channels.FileChannel_.map(FileChannel.java)
at com.itextpdf.text.io.MappedChannelRandomAccessSource.open(MappedChannelRandomAccessSource.java:105)
at com.itextpdf.text.io.FileChannelRandomAccessSource.<init>(FileChannelRandomAccessSource.java:74)
at com.itextpdf.text.io.RandomAccessSourceFactory.createBestSource(RandomAccessSourceFactory.java:240)
at com.itextpdf.text.io.RandomAccessSourceFactory.createBestSource(RandomAccessSourceFactory.java:224)
at com.itextpdf.text.io.RandomAccessSourceFactory.createBestSource(RandomAccessSourceFactory.java:191)
at com.itextpdf.text.pdf.RandomAccessFileOrArray.<init>(RandomAccessFileOrArray.java:151)
at com.itextpdf.text.pdf.TrueTypeFont.process(TrueTypeFont.java:800)
at com.itextpdf.text.pdf.TrueTypeFont.<init>(TrueTypeFont.java:499)
at com.itextpdf.text.pdf.BaseFont.getAllFontNames(BaseFont.java:1233)
at com.itextpdf.text.FontFactoryImp.register(FontFactoryImp.java:452)
at com.itextpdf.text.FontFactoryImp.register(FontFactoryImp.java:439)

すでに行った検索から、2 つの重要なメモを見つけました。

ここでの問題は、Font内にオブジェクトを登録できないXMLWorkerFontProviderことです。Font オブジェクトは iText のメイン API で直接使用できますが、XMLWorker ツールでは使用できないようです。

この種の問題に対する解決策はありますか?App Engine 内で実行されている html 作品内でカスタム フォントを使用することは本当に不可能ですか?

4

0 に答える 0