Spire.XLS for Java 13.3.1 已发布。本次更新增强了 Excel 到 PDF 的转换。此外,该版本还成功修复了许多已知问题,如自适应宽度效果跟微软Excel不一致的问题。详情请阅读以下内容。
问题修复:
Spire.PDF for C++ 是一款独立 PDF 控件,用于 C++ 程序中创建、读取、写入、编辑和操作 PDF 文档。使用 Spire.PDF 类库,开发人员可以新建一个 PDF 文档或者对现有的 PDF 文档进行处理,且无需安装 Adobe Acrobat。同时兼容大部分国产操作系统,能够在中标麒麟和中科方德等国产操作系统中正常运行。
Spire.PDF for C++ 支持的功能十分全面,例如文档安全性设置,提取 PDF 文本、附件、图片,创建 PDF 文件包,PDF 合并和拆分,添加骑缝章,更新 Metadata,设置 Section,绘制图形、插入图片、导入数据等等。除此以外,Spire.PDF 还可以将 TXT 文本、图片、HTML 和 SVG 高质量地转换为 PDF 文件格式。
Spire.Presentation for C++ 是一款专业的 PowerPoint® 组件,使用该组件,开发者可以在 C++ 平台上对 PowerPoint® 文档进行生成、读取、写入、修改和转换等操作。 作为一个独立的控件,Spire.Presentation for C++ 的运行无需要安装 Microsoft PowerPoint。同时兼容大部分国产操作系统,能够在中标麒麟和中科方德等国产操作系统中正常运行。
Spire.Presentation for C++ 支持 PPT、PPS、PPTX、PPSX 格式的 PowerPoint® 文档,主要支持的功能有写入文本,插入图片,添加图形、表格、动画效果、音频和视频等元素到幻灯片。Spire.Presentation for C++ 也支持将幻灯片转换为 JPG、PDF、XPS、OFD、SVG、HTML 格式文件。
Spire.XLS for C++ 是一款专业的 C++ Excel 组件,可以用在各种 C++ 框架及应用程序中。Spire.XLS for C++ 提供了一个对象模型 Excel API,使开发人员可以快速地在 C++ 平台上完成对 Excel 的各种编程操作,如根据模板创建新的 Excel 文档,编辑现有 Excel 文档以及对 Excel 文档进行转换。
Spire.XLS for C++ 是一个独立的 Excel 组件,不依赖于 Microsoft Office Excel。它同时支持旧版的 Excel 97-2003(.xls)格式文档和新版的 Excel 2007、Excel 2010、Excel 2013、Excel 2016、Excel 2019(.xlsx, .xlsb, .xlsm)以及 Open Office(.ods)格式文档。与自己开发 Excel 程序或使用 Microsoft Automation 相比,它具有速度快和可靠性高等优点。同时兼容大部分国产操作系统,能够在中标麒麟和中科方德等国产操作系统中正常运行。
Spire.Doc for C++ 是一款专门对 Word 文档进行操作的 C++ 类库。这款控件的主要功能在于帮助开发人员轻松快捷高效地创建、编辑、转换、及比较Microsoft Word 文档。作为一款独立的 Word C++ 控件,Spire.Doc for C++ 的运行系统(服务器端或客户端)均无需安装 Microsoft Word,但是它却可以将 Microsoft Word 文档的操作功能集成到任何开发人员的 C++ 应用程序中。
Spire.Doc for C++ 能执行多种 Microsoft Word 文档处理任务的 C++ API。支持 Word97-2003、Word2007、Word2010、Word2013、Word2016 以及 Word2019。同时兼容大部分国产操作系统,能够在中标麒麟和中科方德等国产操作系统中正常运行。能在 Word 97/2003/2007/2010/2013 和 XML、RTF、TXT、XPS、EPUB、EMF、HTML、ODT 等格式文件之间进行双向转换,还能将 Word 文件高质量地转换为 PDF、OFD、PCL 和 SVG 文件格式。
随着 PDF 文档类型的日益多样化,您可能会需要对机密信息进行保护。尽管 PDF 的许多其他安全选项可用于确保机密信息的安全,但最常见的方法是为PDF文档添加自定义水印。在本文中,您将学习如何使用 Spire.PDF for C++ 在 C++ 中为 PDF 添加单行或多行文本水印。
有两种方法可以将 Spire.PDF for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 Spire. PDF for C++ 集成到 C++ 程序中
Spire.PDF for C++ 不提供负责在 PDF 文件中插入水印的接口或类。但您可以在每页上绘制类似“机密”、“请勿复制”或“草稿”的文本,以模拟水印效果。以下是向 PDF 文档添加单行文本水印的步骤。
#include "Spire.Pdf.o.h";
using namespace std;
using namespace Spire::Pdf;
int main()
{
//指定输入文件和输出文件路径
wstring inputFilePath = L"C:\\Users\\Administrator\\Desktop\\示例文档.pdf";
wstring outputFilePath = L"Output\\添加单行文本水印.pdf";
//创建PdfDocument对象
PdfDocument* doc = new PdfDocument();
//加载PDF文件
doc->LoadFromFile(inputFilePath.c_str());
//创建true字体类型
PdfTrueTypeFont* font = new PdfTrueTypeFont(L"宋体", 50.0f, PdfFontStyle::Bold, true);
//创建一个笔刷
boost::intrusive_ptr<PdfBrush> brush = PdfBrushes::GetDarkGray();
//指定水印文本
wstring text = L"请勿复制";
//测量文本大小
SizeF textSize = font->MeasureString(text.c_str());
//计算两个偏移量,用于计算坐标系的平移量
float offset1 = (float)(textSize.GetWidth() * sqrt(2) / 4);
float offset2 = (float)(textSize.GetHeight() * sqrt(2) / 4);
//遍历文档中的页面
for (size_t i = 0; i < doc->GetPages()->GetCount(); i++)
{
//获取特定页面
boost::intrusive_ptr <PdfPageBase> page = doc->GetPages()->GetItem(i);
//设置页面透明度
page->GetCanvas()->SetTransparency(0.8);
//将坐标系转换为指定坐标
page->GetCanvas()->TranslateTransform(page->GetCanvas()->GetSize()->GetWidth() / 2 - offset1 - offset2, page->GetCanvas()->GetSize()->GetHeight() / 2 + offset1 - offset2);
//逆时针旋转坐标系45度
page->GetCanvas()->RotateTransform(-45);
//在页面上绘制水印文本
page->GetCanvas()->DrawString(text.c_str(), font, brush, 0, 0, new PdfStringFormat(PdfTextAlignment::Left));
}
//保存文档
doc->SaveToFile(outputFilePath.c_str());
doc->Close();
delete doc;
}
要实现平铺水印效果,可以使用 PdfTilingBrush 类。平铺笔刷生成一个图案,用它重复填充某个图形区域即可实现平铺效果。以下是向 PDF 文档添加平铺文本水印的步骤。
#include "Spire.Pdf.o.h";
using namespace std;
using namespace Spire::Pdf;
static void InsertTiledTextWatermark(PdfPageBase* page, wstring watermarkText, PdfTrueTypeFont* font, int rowNum, int columnNum)
{
//测量文本大小
SizeF textSize = font->MeasureString(watermarkText.c_str());
//计算两个偏移量,用于计算坐标系的平移量
float offset1 = (float)(textSize.GetWidth() * sqrt(2) / 4);
float offset2 = (float)(textSize.GetHeight() * sqrt(2) / 4);
//获取页面高度和宽度
float height = page->GetActualSize()->GetHeight();
float width = page->GetActualSize()->GetWidth();
//创建平铺笔刷
PdfTilingBrush* brush = new PdfTilingBrush(new SizeF(width / columnNum, height / rowNum));
brush->GetGraphics()->SetTransparency(0.5f);
brush->GetGraphics()->TranslateTransform(brush->GetSize()->GetWidth() / 2 - offset1 - offset2, brush->GetSize()->GetHeight() / 2 + offset1 - offset2);
brush->GetGraphics()->RotateTransform(-45);
//在画笔上绘制水印文本
brush->GetGraphics()->DrawString(watermarkText.c_str(), font, PdfBrushes::GetRed(), 0, 0, new PdfStringFormat(PdfTextAlignment::Left));
//使用平铺笔刷绘制一个矩形(覆盖整个页面)
page->GetCanvas()->DrawRectangle(brush, new RectangleF(new PointF(0, 0), page->GetActualSize()));
}
int main()
{
//指定输入文件和输出文件路径
wstring inputFilePath = L"C:\\Users\\Administrator\\Desktop\\示例文档.pdf";
wstring outputFilePath = L"Output\\添加多行文本水印.pdf";
//创建PdfDocument对象
PdfDocument* doc = new PdfDocument();
//加载PDF文件
doc->LoadFromFile(inputFilePath.c_str());
//指定水印文本
wstring text = L"请勿复制";
//创建true字体类型
PdfTrueTypeFont* font = new PdfTrueTypeFont(L""宋体"", 20.0f, PdfFontStyle::Bold, true);
//遍历文档中的页面
for (size_t i = 0; i < doc->GetPages()->GetCount(); i++)
{
//调用自定义方法插入多行文本水印
boost::intrusive_ptr<Spire::Pdf::PdfPageBase> page = doc->GetPages()->GetItem(i);
InsertTiledTextWatermark(page.get(), text.c_str(), font, 3, 3);
}
//保存文档
doc->SaveToFile(outputFilePath.c_str());
doc->Close();
delete doc;
}
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
将文档作为附件添加到 PDF 为您带来了很多便利。例如,您可以将多个文档作为单个文档传输;您可以在 PDF 文档中打开另一个文件,而无需从其他位置查找该文档;您可以降低丢失 PDF 中引用文档的可能性。
Spire.PDF for C++ 允许您以两种方式附加文件:
本文将向您展示如何使用 Spire.PDF for C++ 在 C++ 中添加或删除 PDF 文档中的常规附件和注释附件。
有两种方法可以将 Spire.PDF for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 Spire. PDF for C++ 集成到 C++ 程序中
要添加常规附件,可以使用 PdfDocument->GetAttachments()->Add() 方法。以下是详细步骤。
#include "Spire.Pdf.o.h";
using namespace Spire::Pdf;
using namespace std;
int main() {
//指定输入文件路径
wstring inputPdfPath = L"C:\\Users\\Administrator\\Desktop\\AI创意赛.pdf";
wstring inputFilePath = L"C:\\Users\\Administrator\\Desktop\\参赛人员名单.xlsx";
//指定输出文件路径
wstring outputFilePath = L"Output\\添加附件.pdf";
//创建PdfDocument对象
PdfDocument* doc = new PdfDocument();
//加载示例PDF文件
doc->LoadFromFile(inputPdfPath.c_str());
//基于外部文件创建PdfAttachment对象
PdfAttachment* attachment = new PdfAttachment(inputFilePath.c_str());
//将附件添加到PDF
doc->GetAttachments()->Add(attachment);
//保存到文件
doc->SaveToFile(outputFilePath.c_str());
delete doc;
}
注释附件由 PdfAttachmentAnnotation 类表示。您需要基于外部文件创建该类的实例,然后使用 PdfPageBase->GetAnnotationsWidget()->Add() 方法将其添加到特定页面。以下是详细步骤。
#include "Spire.Pdf.o.h";
using namespace Spire::Pdf;
using namespace std;
int main() {
//指定输入文件路径
wstring inputPdfPath = L"AI创意赛.pdf";
wstring inputFilePath = L"赛制规则及流程安排.docx";
//指定输出文件路径
wstring outputFilePath = L"Output\\添加注释附件.pdf";
//创建PdfDocument对象
PdfDocument* doc = new PdfDocument();
//加载示例PDF文件
doc->LoadFromFile(inputPdfPath.c_str());
//获取特定页面
boost::intrusive_ptr <PdfPageBase> page = doc->GetPages()->GetItem(0);
//在PDF上绘制标签
wstring label = L"现场相关事宜安排见附件:";
PdfTrueTypeFont* font = new PdfTrueTypeFont(L"宋体", 13.0f, PdfFontStyle::Bold, true);
float x = 35;
float y = doc->GetPages()->GetItem(0)->GetActualSize()->GetHeight() - 220;
page->GetCanvas()->DrawString(label.c_str(), font, PdfBrushes::GetRed(), x, y);
//转换要附加到流的文件
ifstream is1(inputFilePath.c_str(), ifstream::in | ios::binary);
is1.seekg(0, is1.end);
int length1 = is1.tellg();
is1.seekg(0, is1.beg);
char* buffer1 = new char[length1];
is1.read(buffer1, length1);
Stream* stream = new Spire::Pdf::Stream((unsigned char*)buffer1, length1);
boost::intrusive_ptr <SizeF> size = font->MeasureString(label.c_str());
RectangleF* bounds = new RectangleF((float)(x + size->GetWidth() + 5), (float)y, 10, 15);
//基于文件创建PdfAttachmentAnnotation对象
PdfAttachmentAnnotation* annotation = new PdfAttachmentAnnotation(bounds, L"赛制规则及流程安排.docx", stream);
annotation->SetColor(new PdfRGBColor(Spire::Pdf::Color::GetDarkOrange()));
annotation->SetFlags(PdfAnnotationFlags::ReadOnly);
annotation->SetIcon(PdfAttachmentIcon::Graph);
annotation->SetText(L"单击此处打开文件");
//将附件注释添加到PDF
page->GetAnnotationsWidget()->Add(annotation);
//保存文件
doc->SaveToFile(outputFilePath.c_str());
delete doc;
}
Spire.PDF for C++ 提供 PdfDocument->GetAttachments() 方法用于返回 PDF 文档的常规附件集合。然后您可以使用 PdfAttachmentCollection->RemoveAt() 方法或 PdfAttachmentCollection->Clear() 方法删除特定附件或所有附件。详细步骤如下。
#include "Spire.Pdf.o.h";
using namespace Spire::Pdf;
using namespace std;
int main() {
//指定输入文件路径
wstring inputPdfPath = L"C:\\Users\\Administrator\\Desktop\\示例文档.pdf";
//指定输出文件路径
wstring outputFilePath = L"Output\\删除附件.pdf";
//创建PdfDocument对象
PdfDocument* doc = new PdfDocument();
//加载PDF文件
doc->LoadFromFile(inputPdfPath.c_str());
//获取所有附件
boost::intrusive_ptr <PdfAttachmentCollection> attachments = doc->GetAttachments();
//删除所有附件
attachments->Clear();
//删除指定附件
//attachments->RemoveAt(0);
//保存文件
doc->SaveToFile(outputFilePath.c_str());
doc->Close();
delete doc;
}注释是基于页面的元素。 您可以使用 PdfPageBase->GetAnnotationsWidget() 方法从特定页面获取注释,并确定某个注释是否为注释附件。之后,使用 PdfAnnotationCollection->Remove() 方法从注释集合中删除注释附件。 以下是详细步骤。
#include "Spire.Pdf.o.h";
using namespace Spire::Pdf;
using namespace std;
int main() {
//指定输入文件路径
wstring inputPdfPath = L"C:\\Users\\Administrator\\Desktop\\示例文档.pdf";
//指定输出文件路径
wstring outputFilePath = L"Output\\删除附件.pdf";
//创建PdfDocument对象
PdfDocument* doc = new PdfDocument();
//加载PDF文件
doc->LoadFromFile(inputPdfPath.c_str());
//获取所有附件
PdfAttachmentCollection* attachments = doc->GetAttachments();
//删除所有附件
attachments->Clear();
//删除指定附件
//attachments->RemoveAt(0);
//保存文件
doc->SaveToFile(outputFilePath.c_str());
doc->Close();
delete doc;
}如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
背景颜色或图片可以使文档更加美观和引人注目。如果您正在创建一个用于营销、教育或演示的文档,添加一个具有吸引力的背景色或图片将非常有用。在本文中,我们将演示如何使用 Spire.Doc for C++ 以编程方式给 Word 文档添加背景色或背景图。
有两种方法可以将 Spire.Doc for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 Spire.Doc for C++ 集成到 C++ 程序中
使用 Spire.Doc for C++,向 Word 文档添加背景颜色非常简单。您只需要将文档的背景类型设置为颜色,然后指定一种颜色作为背景即可。详细步骤如下。
#include "Spire.Doc.o.h"
using namespace Spire::Doc;
int main()
{
//初始化 Document 类的一个实例
intrusive_ptr <Document> document = new Document();
//加载 Word 文档
document->LoadFromFile(L"鲁迅.docx");
//获取文档的背景
intrusive_ptr <Background> background = document->GetBackground();
//将背景类型设置为颜色
background->SetType(BackgroundType::Color);
//设置背景颜色
background->SetColor(Color::GetAliceBlue());
//保存结果文档
document->SaveToFile(L"添加背景颜色.docx", FileFormat::Docx2013);
document->Close();
}
要添加渐变背景,您需要将背景类型设置为渐变,指定渐变颜色,然后设置渐变着色变体和样式。详细步骤如下。
#include "Spire.Doc.o.h"
using namespace Spire::Doc;
int main()
{
//初始化 Document 类的一个实例
intrusive_ptr <Document> document = new Document();
//加载 Word 文档
document->LoadFromFile(L"鲁迅.docx");
//获取文档的背景
intrusive_ptr <Background> background = document->GetBackground();
//设置背景类型为渐变
background->SetType(BackgroundType::Gradient);
//指定两种渐变颜色
background->GetGradient()->SetColor1(Color::GetWhite());
background->GetGradient()->SetColor2(Color::GetLightBlue());
//设置渐变着色变体和样式
background->GetGradient()->SetShadingVariant(GradientShadingVariant::ShadingDown);
background->GetGradient()->SetShadingStyle(GradientShadingStyle::Horizontal);
//保存结果文档
document->SaveToFile(L"添加渐变背景.docx", FileFormat::Docx2013);
document->Close();
}
为 Word 文档添加背景图片,需要设置背景类型为图片,然后插入图片作为背景。详细步骤如下。
#include "Spire.Doc.o.h"
using namespace Spire::Doc;
int main()
{
//初始化 Document 类的一个实例
intrusive_ptr <Document> document = new Document();
//加载 Word 文档
document->LoadFromFile(L"鲁迅.docx");
//获取文档的背景
intrusive_ptr <Background> background = document->GetBackground();
//设置背景类型为图片
background->SetType(BackgroundType::Picture);
//设置背景图片
background->SetPicture(L"背景图.jpeg");
//保存结果文档
document->SaveToFile(L"添加背景图.docx", FileFormat::Docx2013);
document->Close();
}
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
PDF 是当今使用的最通用且功能最丰富的文件格式之一。与 Word 相比,PDF 文档在各种设备上打开时丢失格式的可能性极低。此外,PDF在文档安全、归档和传输方面相比Word具有绝对的优势。这些就是我们为什么要将 Word 转换为 PDF 的一些原因。在本文中,您将学习如何将 Word 转换为 PDF 以及如何使用 Spire.Doc for C++ 在 C++ 中设置转换选项。
有两种方法可以将 Spire.Doc for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 Spire.Doc for C++ 集成到 C++ 程序中
Spire.Doc for C++ 提供的 Document->SaveToFile(LPCWSTR_S fileName, FileFormat fileFormat) 方法允许将 Word 另存为 PDF、XPS、HTML、RTF 等。如果您只想将 Word 文档另存为常规 PDF 而无需额外设置 , 请按照以下步骤操作。
#include "Spire.Doc.o.h";
using namespace Spire::Doc;
using namespace std;
int main() {
//指定输入文件路径
wstring inputFilePath = L"C:\\Users\\Administrator\\Desktop\\示例文档.docx";
//指定输出文件路径和名称
wstring outputPath = L"Output\\";
wstring outputFile = outputPath + L"ToPDF.pdf";
//创建Document对象
intrusive_ptr<document> = new Document();
//加载 Word 文件
document->LoadFromFile(inputFilePath.c_str());
//将文档保存为 PDF
document->SaveToFile(outputFile.c_str(), FileFormat::PDF);
document->Close();
}
书签可以增强文档的可读性。从 Word 生成 PDF 时,您可能希望保留 Word 文档的现有书签或从标题创建书签。以下是将 Word 转换为带书签的 PDF 的步骤。
#include "Spire.Doc.o.h";
using namespace Spire::Doc;
using namespace std;
int main() {
//指定输入文件路径
wstring inputFilePath = L"C:\\Users\\Administrator\\Desktop\\示例文档.docx";
//指定输出文件路径和名称
wstring outputPath = L"Output\\";
wstring outputFile = outputPath + L"ToPDF.pdf";
//创建Document对象
intrusive_ptr<Document> document = new Document();
//加载 Word 文件
document->LoadFromFile(inputFilePath.c_str());
//创建 ToPdfParameterList 对象
intrusive_ptr<ToPdfParameterList> = new ToPdfParameterList();
//从 Word 标题创建书签
parameters->SetCreateWordBookmarksUsingHeadings(true);
//从 Word 中的现有书签创建 PDF 书签
//parameters->SetCreateWordBookmarks(true);
//将文档保存为 PDF
document->SaveToFile(outputFile.c_str(), parameters);
document->Close();
}
通过将 Word 文档中使用的字体嵌入到 PDF 文档中,可以确保 PDF 文档在任何未安装适当字体的设备上看起来都一样。在转换过程中将字体嵌入 PDF 的步骤如下。
#include "Spire.Doc.o.h";
using namespace Spire::Doc;
using namespace std;
int main() {
//指定输入文件路径
wstring inputFilePath = L"C:\\Users\\Administrator\\Desktop\\示例文档.docx";
//指定输出文件路径和名称
wstring outputPath = L"Output\\";
wstring outputFile = outputPath + L"ToPDF.pdf";
//创建Document对象
intrusive_ptr<document> = new Document();
//加载 Word 文件
document->LoadFromFile(inputFilePath.c_str());
//创建 ToPdfParameterList 对象
intrusive_ptr<ToPdfParameterList> parameters = new ToPdfParameterList();
//在生成的 PDF 中嵌入 Word 中使用的字体
parameters->SetIsEmbeddedAllFonts(true);
//将文档保存为 PDF
document->SaveToFile(outputFile.c_str(), parameters);
document->Close();
}
包含大量高质量图像的文档通常尺寸较大。当您将 Word 转换为 PDF 时,您可以决定是否压缩图像质量。以下是详细步骤。
#include "Spire.Doc.o.h";
using namespace Spire::Doc;
using namespace std;
int main() {
//指定输入文件路径
wstring inputFilePath = L"C:\\Users\\Administrator\\Desktop\\示例文档.docx";
//指定输出文件路径和名称
wstring outputPath = L"Output\\";
wstring outputFile = outputPath + L"ToPDF.pdf";
//创建 Document 对象
intrusive_ptr<document> = new Document();
//加载 Word 文件
document->LoadFromFile(inputFilePath.c_str());
//将图像压缩到原始质量的 40%
document->SetJPEGQuality(40);
//保持原始图像质量
//document->SetJPEGQuality(100);
//将文档保存为 PDF
document->SaveToFile(outputFile.c_str(), FileFormat::PDF);
document->Close();
}如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.Doc for Java 11.3.0 已发布。该版本增强了 Word 到 PDF 的转换。此外,本次更新还修复了许多已知问题,如修复了替换书签时程序抛异常java.lang.NullPointerException的问题。详情请阅读以下内容。
问题修复: