请告诉我。
我有一个pdf文件与字体HPDFAA+Arial-BoldMTBold。此字体名称不正确,它是一个子集...我改变字体的库Asponse.pdf.dll,https://docs.aspose.com/pdf/net/replace-text-in-pdf/,段落-替换字体在现有的PDF文件,但这个库试用版本。
我怎样才能用PDFBox做到这一点?我想在Arial-BoldMT上替换此字体或重命名字体名称。
更新:我的尝试导致nowhere...In PDFontDescriptor我可以重命名字体,但我如何申请PDFont?还是我走错路了?
PDDocument pdfDocument = PDDocument.load(new File("Sample.pdf"));
PDPageTree pages = pdfDocument.getDocumentCatalog().getPages();
for (PDPage page : pages) {
PDResources res = page.getResources();
for (COSName fontName : res.getFontNames()) {
PDFont font = res.getFont(fontName);
PDFontDescriptor fontDescriptor = font.getFontDescriptor();
System.out.println("fontDes: " + fontDescriptor.getFontName());
String oldFontName = fontDescriptor.getFontName();
String newFontName = oldFontName.replace("Arial-BoldMTBold", "Arial-BoldMT");
fontDescriptor.setFontName(newFontName);
System.out.println("font: " + font.getName());
}
发布于 2021-03-25 16:00:53
下面是为您的文件量身定做的代码。只有当这是关于许多相似的文件时,它才能帮助你。
try (PDDocument doc = PDDocument.load(new File(XXX,"outerBox.pdf")))
{
PDPage page = doc.getPage(0);
for (COSName name : page.getResources().getFontNames())
{
PDFont font = page.getResources().getFont(name);
String fontName = font.getName();
if (font instanceof PDType0Font && fontName.endsWith("BoldMTBold"))
{
PDType0Font type0font = (PDType0Font) font;
String newFontName = fontName.substring(0, fontName.length() - 4);
type0font.getCOSObject().setString(COSName.BASE_FONT, newFontName);
PDCIDFont descendantFont = type0font.getDescendantFont();
descendantFont.getCOSObject().setString(COSName.BASE_FONT, newFontName);
PDFontDescriptor fontDescriptor = descendantFont.getFontDescriptor();
fontDescriptor.setFontName(newFontName);
}
}
doc.save(new File(XXX,"outerBox-saved.pdf"));
}
PDF结构,在PDFDebugger中看到:
https://stackoverflow.com/questions/66797628
复制