html 到 pdf 转换,西里尔字符无法正确显示

2024-02-25

我的 pdf 字体有问题。我使用了一种从 html 生成 pdf 的方法,该方法在我的本地计算机(即 Windows 操作系统)上运行良好,但现在在 Linux 上,西里尔文字显示带有问号。我在那里检查了字体,但结果发现有所需的字体。现在我改用另一种方法,如下所示。

    Document document = new Document(PageSize.A4);
    String myFontsDir = "C:\\";
    String filePath = AppProperties.downloadLocation + "Order_" + orderID + ".pdf";
    try {
        OutputStream file = new FileOutputStream(new File(filePath));
        PdfWriter writer = PdfWriter.getInstance(document, file);
        int iResult = FontFactory.registerDirectory(myFontsDir);
        if (iResult == 0) {
            System.out.println("TestPDF(): Could not register font directory " + myFontsDir);
        } else {
            System.out.println("TestPDF(): Registered font directory " + myFontsDir);
        }

        document.open();
        String htmlContent = "<html><head>"
                + "<meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=UTF-8\"/>"
                + "</head>"
                + "<body>"
                + "<h4 style=\"font-family: arialuni, arial; font-size:16px; font-weight: normal; \" >"
                + "Здраво Kristijan!"
                + "</h4></body></html>";
        InputStream inf = new ByteArrayInputStream(htmlContent.getBytes("UTF-8"));

        XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(myFontsDir);
        FontFactory.setFontImp(fontImp);
        XMLWorkerHelper.getInstance().parseXHtml(writer, document, inf, null, null, fontImp);

        document.close();
        System.out.println("Done.");
    } catch (Exception e) {
        e.printStackTrace();
    }

通过这种和平的代码,我可以从拉丁文本生成正确的 pdf,但西里尔字母会显示奇怪的字符。 Windows 上会出现这种情况,Linux 上我还没有测试过。对编码或字体有什么建议吗?

提前致谢


首先:很难相信你的字体目录是C:\\。您假设您有一个带有路径的文件C:\\arialuni.ttf而我假设 MS Arial Unicode 的路径是C:\\windows\fonts\arialuni.ttf.

第二:我不认为arialuni是正确的名字。我很确定它是arial unicode ms。您可以通过运行以下代码来检查:

XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
fontProvider.register("c:/windows/fonts/arialuni.ttf");
for (String s : fontProvider.getRegisteredFamilies()) {
    System.out.println(s);
}

输出应该是:

courier
arial unicode ms
zapfdingbats
symbol
helvetica
times
times-roman

这些是您可以使用的值;arialuni不是其中之一。

另外:您是否在错误的位置定义了字符集?

我稍微修改了您的源代码,因为我将 HTML 存储在 HTML 文件中西里尔文.html http://itextpdf.com/sites/default/files/cyrillic.html:

<html>
<head>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8"/>
</head>
<body>
<h4 style="font-family: Arial Unicode MS, FreeSans; font-size:16px; font-weight: normal; " >Здраво Kristijan!</h4>
</body>
</html>

请注意,我替换了arialuni with Arial Unicode MS我用过FreeSans作为替代字体。在我的代码中,我使用了FreeSans.ttf代替arialttf.

See 解析Html11 http://itextpdf.com/sandbox/xmlworker/ParseHtml11:

public static final String DEST = "results/xmlworker/cyrillic.pdf";
public static final String HTML = "resources/xml/cyrillic.html";
public static final String FONT = "resources/fonts/FreeSans.ttf";

public void createPdf(String file) throws IOException, DocumentException {
    // step 1
    Document document = new Document();
    // step 2
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
    // step 3
    document.open();
    // step 4
    XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
    fontImp.register(FONT);
    FontFactory.setFontImp(fontImp);
    XMLWorkerHelper.getInstance().parseXHtml(writer, document,
            new FileInputStream(HTML), null, Charset.forName("UTF-8"), fontImp);
    // step 5
    document.close();
}

正如你所看到的,我使用Charset解析 HTML 时。结果如下:

如果您坚持使用 Arial Unicode,只需替换此行:

public static final String FONT = "resources/fonts/FreeSans.ttf";

有了这个:

public static final String FONT = "c:/windows/fonts/arialuni.ttf";

我已经在 Windows 机器上对此进行了测试,它也有效:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

html 到 pdf 转换,西里尔字符无法正确显示 的相关文章

  • jQuery:将 json 响应的编码设置为 utf8

    我收到了 json 格式的 jQuery 响应 逻辑工作正常 但我无法让他正确编码数据 如 我搜索并发现this https stackoverflow com questions 26620 how to set encoding in
  • 字体粗细仅适用于粗体。其他不起作用[重复]

    这个问题已经存在了 我正在从本地网站加载字体 font face 无法正常工作 有些字体粗细不起作用 只做大胆的人 当我将字体粗细更改为 light lighter 400 500 等时 它不起作用 我完全被困住了 有人帮忙吗 My Net
  • 使用 libre Office writer 将 docx 转换为 PDF/A

    我很高兴通过命令行 通过 C 进程调用控制 将 docx 文件转换为 PDF 不幸的是 我找不到任何关于如何设置 GUI 提供的输出 PDF 选项的互联网搜索结果 我专门寻找通过命令行生成 PDF A 和标记 PDF 有人做过这个并且知道怎
  • IntelliJ IDEA 禁用 CMD+滚动上的字体增大/减小

    我在 Mac OS X 上使用 IntelliJ IDEA 9 0 2 搭配 Magic Mouse 每当我按下命令按钮并将手指在鼠标表面移动一两微米时 IDEA 就会立即快速增大或减小字体大小 如何禁用此功能 Settings Edito
  • 如何将 pdf 文档显示到 Webview 中?

    我想在 webview 上显示 pdf 内容 这是我的代码 WebView webview new WebView this setContentView webview webview getSettings setJavaScriptE
  • Apache PDFBox:将最后一页移动到首页

    我正在使用 Apache PDFBox 编写一个简单的 Java 应用程序 我有几个 PDF 其中最后一页是前几页内容的索引 我需要索引 最后一页 成为PDF文件的第一页 是否可以 我还发现了http itextpdf com http i
  • 使用 ApacheFOP 从 Java 中的 XML 生成 PDF

    我正在尝试从 Java 对象生成即时 PDF 报告 我找不到很多这方面的例子 所以我一直在关注这个例子 http svn apache org viewvc xmlgraphics fop trunk examples embedding
  • 使用 itextSharp 5.3.3 对 Pdf 文档进行数字签名和验证

    我正在尝试使用 iTextSharp 5 3 3 在服务器 c 上进行数字签名和验证 pdf 文档 我使用 DigiSign 在线工具 生成了 Pfx 文件 然后使用 Windows 生成证书 cer 文件
  • 更改使用文本文件的 SSIS 日志提供程序创建的文件的文件编码

    我是 SSIS 新手 我已经设计了一个包并为文本文件配置了 SSIS 日志提供程序 这工作正常并且日志文件已成功生成 我们有一个监控团队 他们使用这个日志文件进行监控 他们无法读取日志文件 因为文件编码是 Unicode 格式 他们期望使用
  • WPF 网络浏览器在 Adob​​e 阅读器窗口中打开 PDF 文件

    我正在创建一个 32 位 WPF 应用程序 它需要在 WebBrowser 控件中显示创建的 PDF 在做的同时 WebBrowser Navigate new Url D TestPDF MyDocument pdf 它在 Adob e
  • MKAnnotationView 的不同字体

    在iPhone SDK地图上的标注气泡上 可以更改标题和副标题属性的字体吗 我对标注气泡中显示的默认字体不满意 并且希望使用不同的字体来匹配我的应用程序的其余部分 然而 我没有看到太多提及这一点 这让我担心这可能是不可能的 我见过构建自定义
  • 在 UIWebView 中使用自定义字体

    我想在 UIWebView 中显示自定义字体 我已经将字体放在 应用程序提供的字体 下的 plist 中 使用中的代码 UIWebView webView UIWebView alloc initWithFrame myRect NSURL
  • 如何从浏览器打印 PDF

    在Web应用程序中 是否可以强制在客户端上打印PDF文件 如果浏览器配置为在窗口内打开 PDF 我想调用 window print 会起作用 但某些浏览器 例如我的 被配置为在外部打开 PDF 谷歌文档的做法是将 JavaScript 嵌入
  • 检测 PHP 中字符串的字符集(UTF-8 或 Windows-1256)

    我正在根据 简单的 HTML DOM http simplehtmldom sourceforge net 并且我想在获取 URL 的内部文本后检测字符串的字符集 以使用以下命令将其转换为 UTF 8 iconv 我尝试了很多东西 但没有一
  • 将自定义字体与 wkhtmltopdf 一起使用

    我正在尝试在使用 wkhtmltopdf 生成的 PDF 中使用自定义字体 我读到您不能使用 google webfonts 并且 wkhtmltopdf 使用 truetype ttf 文件 谁能证实这一点吗 所以我从 google we
  • 使用 ITextsharp 将 Html 导出为 PDF

    我已经尝试了下面的代码 我也遇到了错误 我正在使用最新的 DLL String strSelectUserListBuilder h1 My First Heading h1 p My first paragraph p String ht
  • 如何将div内容添加到jspdf中的新页面?

    如何将div内容添加到jspdf中的新页面 我尝试使用 br 它创建了一个新页面 但我看不到内容 div div style margin 3px 430px First Page div div Place content to Seco
  • python 和 android 中通过 AES 算法加密和解密

    我有用于 AES 加密的 python 和 android 代码 当我在android中加密文本时 它在python上成功解密 但无法在android端解密 有人有想法吗 Python代码 import base64 import hash
  • 使用 apache PDF-Box 插入 PDF 附件的缩略图

    我有一个代码可以将文件附加到 PDF 文件 PDDocument doc new PDDocument PDPage page new PDPage doc addPage page read attachment file File fi
  • 修补应用内购买黑客;卡在第四步

    正如我们许多人所知 苹果最近出现了一种情况 黑客可以免费获得任何应用内购买 苹果最近发布了这个文件 http developer apple com library ios releasenotes StoreKit IAP Receipt

随机推荐

  • SQL 聚合函数别名

    我是 SQL 初学者 这是我被要求解决的问题 假设大城市被定义为place类型的city人口为 至少100 000 编写返回方案的 SQL 查询 state name no big city big city population 订购st
  • 无法使用 SES 接收 S3 存储桶中的电子邮件

    我正在尝试创建一个系统 其中电子邮件将发送到我公司的邮箱 并且 S3 存储桶将存储这些电子邮件 每当存储新电子邮件时 都会触发 Lambda 函数来存储电子邮件并回复发件人 第二部分 然而 我没有成功地实现第一部分 我有一个托管在 AWS
  • 在 Web API 控制器中接收 Json 反序列化对象作为字符串

    以下是我从 Ui 输入的 Json data Id 1 Id 2 Id 3 我可以在如下所示的对象结构中没有问题地接收它 public class TestController ApiController
  • 动态生成角度为2的输入字段类型并设置字段的类型

    我是 Angular 2 的新手 尝试根据使用 Angular 2 的模型动态生成一堆输入字段 有些字段是密码字段 如果是的话 我想让输入字段输入密码 我写过这样的东西 div div
  • 引用主题的原色而不是 Material UI 中的特定颜色

    使用 ReactJS 和 Material UI 我有一个项目 其中我更改了主题颜色 const newTheme getMuiTheme fontFamily Roboto sans serif palette primary1Color
  • Angular 2 和 Spring Boot - 部署到战争

    首先我要说的是 我是 Maven Spring 的新手 并且很难弄清楚当我的目录不遵循首选 Maven 结构时该怎么做 我按照说明通过 Angular 2 和 Spring Boot 设置项目tutorial https blog jdri
  • 具有多个 IN 参数的存储过程

    我得到了以下程序 create or replace PROCEDURE create indexes tbl name index IN VARCHAR2 tbl name vehicle IN VARCHAR2 tbl name dea
  • 检查 gRpc 服务器是否在 C# 中运行

    我正在用 C 编写一个 gRpc 服务器 如果服务器因任何原因关闭 我想添加自动恢复 重试实现 经过研究 我遇到了拦截器并感到兴奋 但看起来它只支持 Go 我找不到 gRpc C 的任何类似内容 如何在 gRpc CSharp 中处理自动恢
  • 在 Angular 中下载文件时无法获取进度和文件

    我有一个 Angular 应用程序 我只想下载一个文件 到目前为止 这是我的代码 this fileNavigationService downloadFile element subscribe result gt this genera
  • GCP 中的 AI Notebook 和 Cloud Datalab 有什么区别?

    我已经搜索了这个问题的答案 这个问题是重复的 但我需要澄清 因为我看了两个不同的地方 答案有点相反 以下堆栈溢出answer https stackoverflow com a 58329351 9146820提到Google Cloud
  • QT5文本渲染问题

    我在基于 MIPS 的平台上交叉编译了 QT5 每当我运行包括示例应用程序 其中包含文本 的应用程序时 它首先绘制文本 然后使用文本颜色的 矩形 填充来绘制文本区域 所以最后我在所有显示文本的地方看到了一个黑色矩形 如果我改变文本颜色 矩形
  • 词汇环境和函数范围

    javascript 中的词法环境和作用域是一回事吗 根据我刚刚从 JavaScript Ninja 的秘密 2 e 中学到的内容给出答案 它们是不同的概念但相关 我们需要定义一个相关的概念 执行上下文及其堆栈去理解 执行上下文 执行上下文
  • Next.js:如何使动态路由与空间一起工作?

    我有一个getStaticPaths生成两条几乎相同的路径的函数 foo 20bar and foo bar My foo bar路径效果很好 但由于某种原因foo 20bar路径不起作用 它会路由到我的 404 页面 无论我是否真的浏览到
  • 如何使用 DynamoDBAutoGenerateKey 为我提供自动生成的密钥?

    我需要使用 AWS SDK 中的 DynamoDBAutoGenerateKey 来为我提供一个随机密钥 字符串类型 然后我可以用它来执行某些操作 我在网上找不到任何这样做的例子 虽然看起来应该相对简单 但我真的很难让它发挥作用 任何人都可
  • 像模板一样保存多个 CKEditor 内联编辑器字段的数据

    我正在建立一个模板系统 设计人员可以在其中提交 HTML5 设计并允许用户添加自己的内容 我正在为该应用程序使用 CKEditor 4 2 和 Rails 3 我希望用户能够加载模板页面 然后直接编辑各种内联编辑器 然后通过 JS 和 Aj
  • C# WPF ComboBox - 排除绑定数据的最后一行(或空白)(从 Microsoft Access 绑定)

    目前我正在使用 Microsoft Access 来保存数据 它将绑定到 WPF 组合框 下面的代码几乎可以正常工作 oleDBCommand CommandText SELECT table Col1 table Col2 As COl1
  • 了解所有线程何时完成并处理异常

    我正在使用 Executor 框架使用线程池 即 newFixedThreadPool 启动多个线程 我使用 threadpool submit aThread 提交要由线程池执行的作业 这工作正常 但是我需要确定所有线程何时完成 以便我可
  • click() 事件在 jQuery 中调用两次

    我设置了一个链接元素并在 jQuery 中调用了它的单击事件 但是单击事件调用了两次 请参阅下面的 jQuery 代码 link button button click function attachmentForm slideToggle
  • 使用 Express js、passport 保护 GraphQL 查询

    我已经开始在我的 Express JS 项目中使用 graphql 但我想知道如何保护我的一些 GraphQL 查询 以前我使用 Passport js JWT 来实现此目的 效果很好 确保路线安全确实很容易 但使用 graphql exp
  • html 到 pdf 转换,西里尔字符无法正确显示

    我的 pdf 字体有问题 我使用了一种从 html 生成 pdf 的方法 该方法在我的本地计算机 即 Windows 操作系统 上运行良好 但现在在 Linux 上 西里尔文字显示带有问号 我在那里检查了字体 但结果发现有所需的字体 现在我