pdf - Ghostscript - 字符编码问题
问题描述
我的扫描仪已经 OCRed 了一个 PDF/A 文档。该文件有点倾斜,所以我用 ghostscript 将它旋转 1 度,如下所示:
gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \
-dPDFSETTINGS="/screen" \
-dSubsetFonts=true -dEmbedAllFonts=true \
-sPAPERSIZE=a4 -sOutputFile="out.pdf" \
-c "<</BeginPage{1 rotate}>> setpagedevice" \
-f in.pdf
(这是另一个 SO 线程的改编片段)
它的工作很好,但是文本编码不正确 - 当我从原始文档中复制并粘贴带有波兰语字母的单词(ąśćęłńźż)时,一切正常,但是当我复制并粘贴相同的单词时上面的命令生成的 PDF,这个波兰字母转换为“~”(“opłata”->“op~ata”、“wpłynęło”->“wp~yn~~o”)。如何保存文本?我真的需要它保持不变。
编辑:上述命令的输出:
GPL Ghostscript 9.25 (2018-09-13)
Copyright (C) 2018 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 3.
Page 1
Loading NimbusSans-Regular font from /usr/local/Cellar/ghostscript/9.25/share/ghostscript/9.25/Resource/Font/NimbusSans-Regular... 5076560 3564226 2614872 1261064 3 done.
Loading NimbusSans-Bold font from /usr/local/Cellar/ghostscript/9.25/share/ghostscript/9.25/Resource/Font/NimbusSans-Bold... 5142672 3737333 2635072 1280462 3 done.
Loading NimbusSans-Italic font from /usr/local/Cellar/ghostscript/9.25/share/ghostscript/9.25/Resource/Font/NimbusSans-Italic... 5310168 3943119 2816872 1460233 3 done.
Loading NimbusSans-BoldItalic font from /usr/local/Cellar/ghostscript/9.25/share/ghostscript/9.25/Resource/Font/NimbusSans-BoldItalic... 5497480 4140597 3059272 1695969 3 done.
Page 2
Page 3
解决方案
那么首先要尝试的是不要设置 SubsetFonts=true。
如果您的原始 PDF 文件没有 ToUnicode CMap,那么您依赖于“启发式”(又名猜测)来确定给定字符编码的 Unicode 点。
如果您的原始文档有效,那么字符编码很可能与 ASCII 或类似的东西匹配。但是,当您对字体进行子集化时,编码会发生变化。本质上,遇到的第一个字符成为编码位置 1,第二个是 2,依此类推。
当您尝试剪切和粘贴时,这自然会导致问题。
但是,鉴于您使用的是正常 ASCII 范围之外的字符,这不太可能是问题所在。
您可能使用的是旧版本的 Ghostscript+pdfwrite(您实际上并没有说您使用的是什么版本,也没有提供会说的反向通道输出)及其错误已修复。
但坦率地说,如果没有看到输入的 PDF 文件,任何人都几乎不可能弄清楚为什么新的 PDF 文件不同,因此除了猜测之外,不可能为您提供任何有用的建议。
推荐阅读
- python - 如何在python中将多行输入读取到二维数组中
- lua - 用于 conky 的 Lua 脚本运行没有错误,但不绘制任何东西
- vue.js - VueJS - 页面上所有 vue 实例的列表
- java - 如何在 JUNG 的 DirectedSparseGraph 上使用 getNeighbors 函数?
- angular - FormArray 分页
- node.js - Firebase nodejs admin SDK每次获取实时数据库路径的数据时都会下载数据
- amazon-web-services - AWS - IIS 和 Windows 服务以及 SQL 服务器 - 负载均衡器和高可用性
- regex - 具有修剪功能的密码策略的正则表达式
- php - 如何在单击 ajax wordpress 上创建子类别?
- python - OpenCV安装错误:没有这样的文件或目录“pyopencv_generated_include.h”