Описание:
Я столкнулся с проблемой, заключающейся в том, что китайский символ (胸) обычно отображается в html со шрифтом 'SourceHanSansSC-Medium.otf', но печатается в довольно странной позициив то время как html напечатан службой реактора pdf.
Если я заменю его на SourceHanSansSC-Norml.otf, то и предварительный просмотр html, и сгенерированный pdf с помощью pdf-реактора будут работать хорошо, только использование SourceHanSansSC-Medium.otf приведет к этой проблеме.
Моя среда:
- Система: Mac OS 10.12.6, версия реактора Java 8 Pdf: 10.0.
Подготовка:
Я вытащил изображение реактора pdf из док-концентратора и запустил его как локальный док-контейнер, чтобы мое приложение могло его посетить, http://localhost:9423/service/rest.
Я пишу очень простоhtml содержит символ ошибки в SourceHanSansSC-Medium.otf и SourceHanSansSC-Medium.otf , просто для сравнения результата двух шрифтов.Они оба отображаются правильно в предварительном просмотре html, и в неправильном положении будет напечатан только символ среднего шрифта.
Я сопоставил свой локальный родительский путь html с pdf-реактором / ro / config, чтобы убедиться, что PDF-реакторвозможность получить HTML для печати.
HTML-код:
Это мой HTML-код «print_sc_font.html» (я прикрепил HTML-шрифты в zip):
<html>
<head>
<style type="text/css">
@font-face {
font-family: shssc-normal;
src: url("./SourceHanSansSC-Normal.otf");
}
@font-face {
font-family: shssc-medium;
src: url("./SourceHanSansSC-Medium.otf");
}
</style>
</head>
<body>
<div style="font-family: shssc-normal;">Print by SC Normal Font: 肺癌</div>
<div style="font-family: shssc-medium;">Print by SC Medium Font: 肺癌</div>
</body>
</html>
Предварительный просмотр в порядке. введите описание изображения здесь
Код печати Java (PdfReactorTest.java):
package com.gc.dev;
import com.realobjects.pdfreactor.webservice.client.Configuration;
import com.realobjects.pdfreactor.webservice.client.PDFreactor;
import com.realobjects.pdfreactor.webservice.client.PDFreactorWebserviceException;
import com.realobjects.pdfreactor.webservice.client.Result;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class PDFReactorTest {
public static void main(String[] args) {
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
String timeStamp = dateFormat.format(date);
// Create new PDFreactor instance
PDFreactor pdfReactor = new PDFreactor("http://localhost:9423/service/rest");
// Create a new configuration object
Configuration config = new Configuration()
// Specify the input document for Mac systems (adapt path if necessary) .setDocument("file:///ro/config/html/test/print_sc_font.html")
// Enable javaScriptSettings
.setJavaScriptMode(Configuration.JavaScriptMode.ENABLED)
// Set an appropriate log level
.setLogLevel(Configuration.LogLevel.DEBUG)
// Sets the title of the created PDF
.setTitle("Demonstration of PDFreactor Java API")
// Sets the author of the created PDF
.setAuthor("Myself")
// Enables links in the PDF document.
.setAddLinks(true)
// Enable bookmarks in the PDF document
.setAddBookmarks(true)
// Set some viewer preferences
.setViewerPreferences(
Configuration.ViewerPreferences.FIT_WINDOW,
Configuration.ViewerPreferences.PAGE_MODE_USE_THUMBS)
// Add user style sheets
.setUserStyleSheets(
new Configuration.Resource().setContent("@page {" +
"@top-center {" +
"content: 'PDFreactor Java API demonstration';" +
"}" +
" @bottom-center {" +
"content: \"Created on " + timeStamp + "\";" +
"}" +
"}"),
new Configuration.Resource().setUri("common.css"));
FileOutputStream fos = null;
try {
// Render document and save result to result
Result result = pdfReactor.convert(config);
if (result != null) {
byte[] pdf = result.getDocument();
//Save the pdf at the desired location
fos = new FileOutputStream("result.pdf");
fos.write(pdf);
fos.close();
}
} catch (PDFreactorWebserviceException exception) {
Result result = exception.getResult();
System.err.println(result.getError());
} catch (Exception e) {
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
}
}
}
}
}
Результат pdf: введите описание изображения здесь
Я приложил свой код и снимок экрана.
SourceHanSansSC-Normal.otf слишком велик для прикрепления,поэтому два файла шрифтов SourceHanSansSC-Normal и SourceHanSansSC-Medium.otf можно загрузить с https://github.com/adobe-fonts/source-han-sans/tree/release/OTF/SimplifiedChinese,