У меня есть файл шрифта "myfont.otf". И у меня есть pdf файл "target.pdf". Я хочу добавить файл шрифта в файл PDF. Я пытаюсь спросить
Код выглядит следующим образом:
from PyPDF2 import PdfFileWriter, PdfFileReader
import io
from fpdf import FPDF
from reportlab.lib.pagesizes import letter
packet = io.BytesIO()
pdf = FPDF()
pdf.add_page()
pdf.add_font('myfont', '', 'myfont.otf', uni=True)
pdf.set_font('myfont', '', 12)
pdf.text(10, 10, "Hello, world!")
pdf.output(packet, 'F')
packet.seek(0)
new_pdf = PdfFileReader(packet)
existing_pdf = PdfFileReader(open("target.pdf", "rb"))
output = PdfFileWriter()
page = existing_pdf.getPage(0)
page.mergePage(new_pdf.getPage(0))
output.addPage(page)
outputStream = open("new_target.pdf", "wb")
output.write(outputStream)
outputStream.close()
Но этот код работает некорректно.
Я использую последнюю версию pypdf
и fpdf2
.
@JorjMcKie Спасибо. Можете ли вы рассказать мне, как это делает модуль pymupdf?
@KJ Спасибо. Когда я использую Adobe Acrobat, я могу вставить Source Han Sans.otf в файл PDF, в котором отсутствует шрифт. Но у меня слишком много pdf-файлов, поэтому я хочу иметь скрипт python для решения этой задачи.
@KJ Спасибо! Моя версия файла PDF 1.6+. Теперь я пытаюсь использовать PyMuPDF для решения проблемы.
Как добавить собственный шрифт в PDF с помощью PyMuPDF.
import fitz # PyMuDPDF
myfont = "myfont.otf"
doc = fitz.open("input.pdf")
page = doc[pno] # load page with number pno (0-based)
page.insert_font(fontname = "F0", fontfile=myfont)
# now start inserting text on the page. Use insertion point (100,100) at first
page.insert_text((100,100), "Hello world", fontname = "F0", fontsize=14, ...)
# some text in a box
rect = fitz.Rect(100, 120, 300, 200) # a rectangle
page.insert_textbox(rect, "this is text in a rectangle with auto line breaks",
fontname = "F0", ...)
# etc.
# Before saving, optionally build a subset of myfont:
doc.subset_fonts()
doc.save("output.pdf", garbage=4, deflate=True)
Если бы вы использовали PyMuPDF, я бы смог помочь.