使用 addJS 添加汉字注释时 PyPDF2 解码问题
PyPDF2 decoding issue when adding annotations in Chinese characters with addJS
我想使用 PyPDF2 通过 addJS 以编程方式添加注释,它适用于拉丁字符但不适用于中文字符,尝试使用 UTF-8 编码但似乎也不起作用。这是代码:
from PyPDF2 import PdfFileWriter, PdfFileReader
Def Test():
inputPDF = PdfFileReader('./demo/TESTPDFANNOTATION.pdf', "rb")
outputPDF = PdfFileWriter()
pages = inputPDF.getNumPages()
for p in range(pages):
outputPDF.addPage(inputPDF.getPage(p))
outputStream = open('./demo/TESTPDFANNOTATIONOUT.pdf', "wb")
outputPDF.addJS("var annot = this.addAnnot({ \r \
page: 0, \r \
type: 'FreeText', \r \
contents: '你好', \r \
textFont: 'csongl', \r \
textSize: 10, \r \
rect: [200, 300, 200+150, 300+3*12], // height for three lines \r \
width: 1, \r \
alignment: 1 \r \
});")
outputPDF.write(outputStream)
outputStream.close()
return("ok")
奇怪的是,如果我在记事本文本编辑器中打开 PDF,中文字符显示正确,但是当用 PDF 打开时,它显示类似 佀好 的内容,似乎没有解码,因为它们可以被解码在线转换工具转换成几乎正确的汉字,在某些情况下不完全相同。
https://cafewebmaster.com/online_tools/utf_decode
任何建议将不胜感激!
Python 版本:3.9+
OS: Win10
谢谢
赤柱
最后,想出使用另一个包 PyMuPDF 以编程方式添加注释,并且对汉字有很好的支持。
import fitz
def writeAnnotation():
blue = (0,0,1)
gold = (1,1,0)
pdfDoc = fitz.open('./demo/TESTPDFANNOTATION.pdf')
page = pdfDoc[0]
rect1 = fitz.Rect(100,100,200,150)
strContent1= "你好!世界"
a1 = page.addFreetextAnnot(rect1, strContent1, text_color=blue, fill_color=gold)
pdfDoc.save("./demo/TESTPDFANNOTATIONOUT.pdf")
return("Well done!")
我想使用 PyPDF2 通过 addJS 以编程方式添加注释,它适用于拉丁字符但不适用于中文字符,尝试使用 UTF-8 编码但似乎也不起作用。这是代码:
from PyPDF2 import PdfFileWriter, PdfFileReader
Def Test():
inputPDF = PdfFileReader('./demo/TESTPDFANNOTATION.pdf', "rb")
outputPDF = PdfFileWriter()
pages = inputPDF.getNumPages()
for p in range(pages):
outputPDF.addPage(inputPDF.getPage(p))
outputStream = open('./demo/TESTPDFANNOTATIONOUT.pdf', "wb")
outputPDF.addJS("var annot = this.addAnnot({ \r \
page: 0, \r \
type: 'FreeText', \r \
contents: '你好', \r \
textFont: 'csongl', \r \
textSize: 10, \r \
rect: [200, 300, 200+150, 300+3*12], // height for three lines \r \
width: 1, \r \
alignment: 1 \r \
});")
outputPDF.write(outputStream)
outputStream.close()
return("ok")
奇怪的是,如果我在记事本文本编辑器中打开 PDF,中文字符显示正确,但是当用 PDF 打开时,它显示类似 佀好 的内容,似乎没有解码,因为它们可以被解码在线转换工具转换成几乎正确的汉字,在某些情况下不完全相同。 https://cafewebmaster.com/online_tools/utf_decode
任何建议将不胜感激!
Python 版本:3.9+ OS: Win10
谢谢 赤柱
最后,想出使用另一个包 PyMuPDF 以编程方式添加注释,并且对汉字有很好的支持。
import fitz
def writeAnnotation():
blue = (0,0,1)
gold = (1,1,0)
pdfDoc = fitz.open('./demo/TESTPDFANNOTATION.pdf')
page = pdfDoc[0]
rect1 = fitz.Rect(100,100,200,150)
strContent1= "你好!世界"
a1 = page.addFreetextAnnot(rect1, strContent1, text_color=blue, fill_color=gold)
pdfDoc.save("./demo/TESTPDFANNOTATIONOUT.pdf")
return("Well done!")