PDF 文件格式适用于大多数场合。但是,您仍然可能会遇到需要将 PDF 转换为图像的情况。将某个 PDF 页面转换为图像后,您可以将其发布到社交媒体上,将其上传或传输到只能显示图像的设备中,或者将其插入到您的 Word 文档或 PowerPoint 演示文稿中。在本文中,您将学习如何使用 Spire.PDF for C++ 在 C++ 中以编程方式将 PDF 转换为图像。
有两种方法可以将 Spire.PDF for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 Spire. PDF for C++ 集成到 C++ 程序中
Spire.PDF for C++ 提供 PdfDocument->SaveAsImage(int pageIndex) 方法将特定页面转换为图像流。然后可以将流保存为具有所需扩展名(如 PNG、JPG 和 BMP)的图像文件。以下是详细步骤。
#include "Spire.Pdf.o.h";
using namespace Spire::Pdf;
using namespace std;
int main() {
//指定输入和输出文件路径
wstring inputFile = L"C:\\Users\\Administrator\\Desktop\\示例文档.pdf";
wstring outputFile = L"C:\\Users\\Administrator\\Desktop\\Output\\ToImage";
//创建一个 PdfDocument 对象
PdfDocument* doc = new PdfDocument();
//加载 PDF 文件
doc->LoadFromFile(inputFile.c_str());
//将特定页面转换为图像
boost::intrusive_ptr image = doc->SaveAsImage(0, PdfImageType::Bitmap);
//将图像写入 .jpg 文件
wstring fileName = outputFile + L".jpg";
image->Save(fileName.c_str());
doc->Close();
delete doc;
} 
为了将整个 PDF 保存为单独的图像,您只需将转换部分放在循环语句中。详细步骤如下。
#include "Spire.Pdf.o.h";
using namespace Spire::Pdf;
using namespace std;
int main() {
//指定输入和输出文件路径
wstring inputFile = L"C:\\Users\\Administrator\\Desktop\\示例文档.pdf";
wstring outputFile = L"C:\\Users\\Administrator\\Desktop\\Output\\ToImg-";
//创建一个 PdfDocument 对象
PdfDocument* doc = new PdfDocument();
//加载 PDF 文件
doc->LoadFromFile(inputFile.c_str());
//遍历文档中的页面
for (int i = 0; i < doc->GetPages()->GetCount(); i++) {
//将选定页面另存为图像
boost::intrusive_ptr image = doc->SaveAsImage(i);
//将图像写入 .jpg 文件
wstring fileName = outputFile + to_wstring(i) + L".jpg";
image->Save(fileName.c_str());
}
doc->Close();
delete doc;
} 
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.PDF for Java 9.3.6 已发布。本次更新支持了PDF打印缩放功能并优化了打印PDF时的内存消耗。此外,该版本还修复了一些已知问题,如:修复了提取表格内容时程序抛出java.lang.NullPointerException异常的问题。详情请阅读以下内容。
新功能:
pdfDocument.getPrintSettings().selectSinglePageLayout
(PdfSinglePageScalingMode.Custom_Sacle, true, customScaling);问题修复:
在处理 Word 文档时,我们经常需要提取其中的文字和图片来创建新的文档或是用于其他用途。如果我们手动复制文字或逐一保存图片,将会非常耗时且容易出现错误或遗漏的情况。本文将介绍如何使用 Spire.Doc for C++ 通过程序快速 Word 文档中提取文字和图片。
有两种方法可以将 Spire.Doc for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 Spire.Doc for C++ 集成到 C++ 程序中
Spire.Doc for C++ 中的 Document->GetText() 方法可以获取一个 Word 文档中的所有文本内容。以下是提取 Word 文档中的文本并保存为 TXT 文件的详细操作步骤:
#include "Spire.Doc.o.h"
#include <iostream>
#include <locale>
#include <codecvt>
using namespace Spire::Doc;
using namespace std;
int main()
{
//创建Document的对象
intrusive_ptr document = new Document();
//载入Word文档
document->LoadFromFile(L""C:/宇宙视角.docx"");
//获取文档中的文本内容
wstring text = document->GetText();
//创建一个TXT文件并将提取的文本内容写入其中
wofstream write(L""Output/提取文本.txt"");
auto LocUtf8 = locale(locale(""""), new std::codecvt_utf8);
write.imbue(LocUtf8);
write << text;
write.close();
document->Close();
} 
提取 Word 文档中的图片需要判断文档的每个子对象是否为图片,再用 DocPicture->GetImage() 提取图片。以下是详细操作步骤:
#include ""Spire.Doc.o.h""
#include
using namespace std;
using namespace Spire::Doc;
int main() {
//创建Document的对象
intrusive_ptr document = new Document();
//载入Word文档
document->LoadFromFile(L""C:/宇宙视角.docx"");
//document elements, each of them has child elements
std::deque> nodes;
nodes.push_back(document);
//embedded images list.
std::vector> images;
//traverse
while (nodes.size() > 0)
{
intrusive_ptr node = nodes.front();
nodes.pop_front();
for (int i = 0; i < node->GetChildObjects()->GetCount(); i++)
{
intrusive_ptr child = node->GetChildObjects()->GetItem(i);
if (child->GetDocumentObjectType() == DocumentObjectType::Picture)
{
intrusive_ptr picture = Object::Dynamic_cast(child);
std::vector imageByte = picture->GetImageBytes();
images.push_back(imageByte);
}
else if (Object::CheckType(child))
{
nodes.push_back(boost::dynamic_pointer_cast(child));
}
}
}
//save images
for (size_t i = 0; i < images.size(); i++)
{
std::wstring fileName = L""图像-"" + std::to_wstring(i) + L"".png"";
std::ofstream outFile(fileName, std::ios::binary);
if (outFile.is_open())
{
outFile.write(reinterpret_cast(images[i].data()), images[i].size());
outFile.close();
}
}
document->Close();
}
} 
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
表格是组织和呈现数据的强大工具。它将数据排列成行和列,使作者更容易阐述不同数据类别之间的关系,也便于读者理解和分析复杂的数据。在本文中,您将学习如何使用 Spire.Doc for C++ 以编程方式在 Word 文档中创建表格。
有两种方法可以将 Spire.Doc for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 Spire.Doc for C++ 集成到 C++ 程序中
Spire.Doc for C++ 提供了 Section->AddTable() 方法来将表格添加到 Word 文档的某个节。详细步骤如下:
#include "Spire.Doc.o.h"
using namespace Spire::Doc;
using namespace std;
int main()
{
//初始化 Document 类的一个实例
intrusive_ptr<Document> doc = new Document();
//在文档中添加一个节
intrusive_ptr<Section> section = doc->AddSection();
//设置节的页边距
section->GetPageSetup()->GetMargins()->SetAll(72);
//定义标题行的数据
vector<wstring> header = { L"国家", L"首都", L"大陆", L"国土面积", L"人口数量" };
//定义剩余行的数据
vector<vector<wstring>> data =
{
{L"阿根廷", L"布宜诺斯艾利斯", L"南美", L"2777815", L"32300003"},
{L"玻利维亚", L"拉巴斯", L"南美", L"1098575", L"7300000"},
{L"巴西", L"巴西利亚", L"南美", L"8511196", L"150400000"},
{L"加拿大", L"渥太华", L"北美", L"9976147", L"26500000"},
{L"智利", L"圣地亚哥", L"南美", L"756943", L"13200000"},
{L"哥伦比亚", L"波哥大", L"南美", L"1138907", L"33000000"},
{L"古巴", L"哈瓦那", L"北美", L"114524", L"10600000"},
{L"厄瓜多尔", L"基多", L"南美", L"455502", L"10600000"},
{L"萨尔瓦多", L"圣萨尔瓦多", L"北美", L"20865", L"5300000"},
{L"圭亚那", L"乔治城", L"南美", L"214969", L"800000"},
{L"牙买加", L"金士顿", L"北美", L"11424", L"2500000"},
{L"墨西哥", L"墨西哥城", L"北美", L"1967180", L"88600000"},
{L"尼加拉瓜", L"马那瓜", L"北美", L"139000", L"3900000"},
{L"巴拉圭", L"亚松森", L"南美", L"406576", L"4660000"},
{L"秘鲁", L"利马", L"南美", L"1285215", L"21600000"},
{L"美国", L"华盛顿", L"北美", L"9363130", L"249200000"},
{L"乌拉圭", L"蒙得维的亚", L"南美", L"176140", L"3002000"},
{L"委内瑞拉", L"加拉加斯", L"南美", L"912047", L"19700000"}
};
//向该部节添加表格
intrusive_ptr<Table> table = section->AddTable(true);
//指定表格的行数和列数
table->ResetCells(data.size() + 1, header.size());
//将第一行设置为标题行
intrusive_ptr<TableRow> row = table->GetRows()->GetItemInRowCollection(0);
row->SetIsHeader(true);
//设置标题行的高度和背景颜色
row->SetHeight(20);
row->SetHeightType(TableRowHeightType::Exactly);
for (int i = 0; i < row->GetCells()->GetCount(); i++)
{
row->GetCells()->GetItemInCellCollection(i)->GetCellFormat()->GetShading()->SetBackgroundPatternColor(Color::FromArgb(142, 170, 219));
}
//将数据添加到标题行并设置格式
for (size_t i = 0; i < header.size(); i++)
{
//添加一个段落
intrusive_ptr<Paragraph> p1 = row->GetCells()->GetItemInCellCollection(i)->AddParagraph();
//设置对齐方式
p1->GetFormat()->SetHorizontalAlignment(HorizontalAlignment::Center);
row->GetCells()->GetItemInCellCollection(i)->GetCellFormat()->SetVerticalAlignment(VerticalAlignment::Middle);
//添加数据
intrusive_ptr<TextRange> tR1 = p1->AppendText(header[i].c_str());
//设置数据格式
tR1->GetCharacterFormat()->SetFontName(L"宋体");
tR1->GetCharacterFormat()->SetFontSize(12);
tR1->GetCharacterFormat()->SetBold(true);
}
//向剩余行添加数据并设置格式
for (size_t r = 0; r < data.size(); r++)
{
//设置剩余行的高度
intrusive_ptr<TableRow> dataRow = table->GetRows()->GetItemInRowCollection(r + 1);
dataRow->SetHeight(20);
dataRow->SetHeightType(TableRowHeightType::Exactly);
for (size_t c = 0; c < data[r].size(); c++)
{
//添加一个段落
intrusive_ptr<Paragraph> p2 = dataRow->GetCells()->GetItemInCellCollection(c)->AddParagraph();
//设置对齐方式
dataRow->GetCells()->GetItemInCellCollection(c)->GetCellFormat()->SetVerticalAlignment(VerticalAlignment::Middle);
//添加数据
intrusive_ptr<TextRange> tR2 = p2->AppendText(data[r][c].c_str());
//设置数据格式
tR2->GetCharacterFormat()->SetFontName(L"宋体");
tR2->GetCharacterFormat()->SetFontSize(11);
}
}
//保存结果文档
doc->SaveToFile(L"创建表格.docx", FileFormat::Docx2013);
doc->Close();
}
Spire.Doc for C++ 提供了 TableCell->AddTable() 方法来将嵌套表格添加到特定的表格单元格。详细步骤如下:
#include "Spire.Doc.o.h"
using namespace Spire::Doc;
using namespace std;
int main()
{
//初始化 Document 类的一个实例
intrusive_ptr<Document> doc = new Document();
//在文档中添加一个节
intrusive_ptr<Section> section = doc->AddSection();
//设置节的页边距
section->GetPageSetup()->GetMargins()->SetAll(72);
//向节中添加表格
intrusive_ptr<Table> table = section->AddTable(true);
//设置表中的行数和列数
table->ResetCells(2, 2);
//根据窗口自动调整表格宽度
table->AutoFit(AutoFitBehaviorType::AutoFitToWindow);
//获取表行
intrusive_ptr<TableRow> row1 = table->GetRows()->GetItemInRowCollection(0);
intrusive_ptr<TableRow> row2 = table->GetRows()->GetItemInRowCollection(1);
//将数据添加到表的单元格
intrusive_ptr<TableCell> cell1 = row1->GetCells()->GetItemInCellCollection(0);
intrusive_ptr<TextRange> tR = cell1->AddParagraph()->AppendText(L"产品");
tR->GetCharacterFormat()->SetFontSize(13);
tR->GetCharacterFormat()->SetBold(true);
intrusive_ptr<TableCell> cell2 = row1->GetCells()->GetItemInCellCollection(1);
tR = cell2->AddParagraph()->AppendText(L"产品说明");
tR->GetCharacterFormat()->SetFontSize(13);
tR->GetCharacterFormat()->SetBold(true);
intrusive_ptr<TableCell> cell3 = row2->GetCells()->GetItemInCellCollection(0);
cell3->AddParagraph()->AppendText(L"Spire.Doc for C++");
intrusive_ptr<TableCell> cell4 = row2->GetCells()->GetItemInCellCollection(1);
cell4->AddParagraph()->AppendText(L"Spire.Doc for C++ 是一款专门对 Word 文档进行操作的 C++ 类库。"
L"这款控件具有快速和高质量的性能,"
L"主要功能在于帮助开发人员轻松快捷高效地"
L"创建、编辑、转换、及比较Microsoft Word 文档。");
//将嵌套表添加到第四个单元格
intrusive_ptr<Table> nestedTable = cell4->AddTable(true);
//Set the number of rows and columns in the nested table
nestedTable->ResetCells(3, 2);
//根据内容自动调整表格宽度
nestedTable->AutoFit(AutoFitBehaviorType::AutoFitToContents);
//获取表行
intrusive_ptr<TableRow> nestedRow1 = nestedTable->GetRows()->GetItemInRowCollection(0);
intrusive_ptr<TableRow> nestedRow2 = nestedTable->GetRows()->GetItemInRowCollection(1);
intrusive_ptr<TableRow> nestedRow3 = nestedTable->GetRows()->GetItemInRowCollection(2);
//将数据添加到嵌套表的单元格
intrusive_ptr<TableCell> nestedCell1 = nestedRow1->GetCells()->GetItemInCellCollection(0);
tR = nestedCell1->AddParagraph()->AppendText(L"商品");
tR->GetCharacterFormat()->SetBold(true);
intrusive_ptr<TableCell> nestedCell2 = nestedRow1->GetCells()->GetItemInCellCollection(1);
tR = nestedCell2->AddParagraph()->AppendText(L"价格");
tR->GetCharacterFormat()->SetBold(true);
intrusive_ptr<TableCell> nestedCell3 = nestedRow2->GetCells()->GetItemInCellCollection(0);
nestedCell3->AddParagraph()->AppendText(L"Developer Subscription");
intrusive_ptr<TableCell> nestedCell4 = nestedRow2->GetCells()->GetItemInCellCollection(1);
nestedCell4->AddParagraph()->AppendText(L"$999");
intrusive_ptr<TableCell> nestedCell5 = nestedRow3->GetCells()->GetItemInCellCollection(0);
nestedCell5->AddParagraph()->AppendText(L"Developer OEM Subscription");
intrusive_ptr<TableCell> nestedCell6 = nestedRow3->GetCells()->GetItemInCellCollection(1);
nestedCell6->AddParagraph()->AppendText(L"$2999");
//保存结果文档
doc->SaveToFile(L"创建嵌套表格.docx", FileFormat::Docx2013);
doc->Close();
}
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.Office 8.3.2 已发布。在该版本中,Spire.PDF 支持嵌入字体到 PDF 文档及创建“显示/隐藏域”动作;Spire.XLS 支持 ISOWEEKNUM、CEILING.PRECISE 和 ENCODEURL 公式以及替换字体;Spire.Spreadsheet 支持缩放功能;Spire.Email 支持 OAuth2 认证。该版本还成功修复了大量已知问题。详情请阅读以下内容。
该版本涵盖了最新版的 Spire.Doc,Spire.PDF,Spire.XLS,Spire.Email,Spire.DocViewer, Spire.PDFViewer,Spire.Presentation,Spire.Spreadsheet, Spire.OfficeViewer, Spire.DocViewer, Spire.Barcode, Spire.DataExport。
版本信息如下:
https://www.e-iceblue.cn/Downloads/Spire-Office-NET.html
新功能:
PdEmbeddedFontConverter converter = new PdEmbeddedFontConverter ("InputFile");
convert.ToEmbeddedFontPdf("resultFile");PdfDocument pdf = new PdfDocument(inputFile);
pdf.LoadFromFile(inputFile);
for (int c = 0; c < pdf.Pages.Count; c++)
{
PdfFormWidget formWidget = pdf.Form as PdfFormWidget;
for (int i = 0; i < formWidget.FieldsWidget.List.Count; i++)
{
PdfField field = formWidget.FieldsWidget.List[i] as PdfField;
if (field is PdfButtonWidgetFieldWidget)
{
PdfButtonWidgetFieldWidget buttonWidget = field as PdfButtonWidgetFieldWidget;
PdfHideAction hideAction = new PdfHideAction(buttonWidget.Name, true);
buttonWidget.MouseDown = hideAction;
}
}
}
pdf.SaveToFile(outputFile);
pdf.Dispose();PdfCompressor compressor = new PdfCompressor("1.pdf");
compressor.Options.TextCompressionOptions.UnembedFonts = true;
compressor.Options.ImageCompressionOptions.CompressImage = true;
compressor.Options.ImageCompressionOptions.ResizeImages = true;
compressor.Options.ImageCompressionOptions.ImageQuality = ImageQuality.Low;
compressor.CompressToFile("1_out.pdf");问题修复:
新功能:
Workbook workbook = new Workbook();
workbook.Worksheets[0].Range["A1"].Formula = "ISOWEEKNUM(DATE(2012,1,1))";
workbook.CalculateAllValue();
workbook.SaveToFile("result.xlsx");Workbook workbook = new Workbook();
workbook.Worksheets[0].Range["A1"].Formula = "CEILING.PRECISE(-4.6,3)";
workbook.CalculateAllValue();
workbook.SaveToFile("result.xlsx");Workbook workbook = new Workbook();
workbook.Worksheets[0].Range["A1"].Formula = "ENCODEURL(\"https://www.e-iceblue.com\")";
workbook.CalculateAllValue();
workbook.SaveToFile("result.xlsx");sheet.ReplaceAll(oldValue, oldStyle, newValue, newStyle)问题修复:
问题修复:
新功能:
问题修复:
新功能:
问题修复:
Spire.Office for Java 8.3.5 已发布。在该版本中,Spire.PDF for Java优化了文档压缩功能,同时增强了 PDF 到 Excel 的转换;Spire.Doc for Java增强了 Word 到 PDF 的转换;Spire.XLS for Java增强了 Excel 到 PDF 的转换功能。此外,许多已知问题也在本次更新中被成功修复。详情请阅读以下内容。
获取 Spire.Office for Java 8.3.5请点击:https://www.e-iceblue.cn/Downloads/Spire-Office-JAVA.html
新功能:
PdfCompressor compressor = new PdfCompressor(inputFile);
compressor.getOptions().getImageCompressionOptions().setResizeImages(true);
compressor.getOptions().getImageCompressionOptions().setImageQuality(ImageQuality.Low);
compressor.compressToFile(outputFile);问题修复:
问题修复:
问题修复:
在 Word 文档中,分页符是重要的页面布局工具,可以帮助你在任意位置开始新页面。插入分页符后,前一页的所有格式都会应用于新页面,从而使得整个文档整洁有序。本文将介绍如何使用 Spire.Doc for C++ 通过程序实现在 Word 文档中添加或删除分页符。
有两种方法可以将 Spire.Doc for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 Spire.Doc for C++ 集成到 C++ 程序中
Spire.Doc for C++ 提供的 Paragraph->AppendBreak(BreakType::PageBreak) 方法可用于在段落后插入分页符。插入分页符后,插入的位置将显示分页符提示。以下是在指定段落后插入分页符的详细操作步骤:
#include "Spire.Doc.o.h"
using namespace Spire::Doc;
int main() {
//指定输入和输出文件路径
std::wstring inputFile = L"C:/狼去哪儿了.docx";
std::wstring outputFile = L"Output/段落后插入分页符.docx";
//创建Document的对象
intrusive_ptr document = new Document();
//载入Word文档
document->LoadFromFile(inputFile.c_str());
//获取第一节
intrusive_ptr section = document->GetSections()->GetItemInSectionCollection(0);
//获取第一节的第三个段落
intrusive_ptr paragraph = section->GetParagraphs()->GetItemInParagraphCollection(2);
//插入分页符到第三段末尾
paragraph->AppendBreak(BreakType::PageBreak);
//保存文档
document->SaveToFile(outputFile.c_str(), FileFormat::Docx2013);
document->Close();
} 
除了在段落后插入分页符外,Spire.Doc for C++ 还允许查找指定文本并在该文本后添加分页符。以下是详细操作步骤:
#include "Spire.Doc.o.h"
using namespace Spire::Doc;
int main() {
//指定输入和输出文件路径
std::wstring inputFile = L"C:/狼去哪儿了.docx";
std::wstring outputFile = L"Output/文本后插入分页符.docx";
//创建Document的对象
intrusive_ptr document = new Document();
//载入Word文档
document->LoadFromFile(inputFile.c_str());
//查找指定文本
intrusive_ptr selection = document->FindString(L""进化现象"", true, true);
//获取查找到的文本的范围
intrusive_ptr range = selection->GetAsOneRange();
//获取查找到的文本所在的段落
intrusive_ptr paragraph = range->GetOwnerParagraph();
//获取查找到的文本在段落中的位置参数
int index = paragraph->GetChildObjects()->IndexOf(range);
//创建分页符
intrusive_ptr pageBreak = new Break(document, BreakType::PageBreak);
//插入分页符到查找到的文本后
paragraph->GetChildObjects()->Insert(index + 1, pageBreak);
//保存文档
document->SaveToFile(outputFile.c_str(), FileFormat::Docx2013);
document->Close();
} 
一些错误添加的分页符可能会使整个文档的结构变得混乱,因此很有必要将其删除以恢复文档结构。以下是详细操作步骤:
#include "Spire.Doc.o.h"
using namespace Spire::Doc;
int main() {
//指定输入和输出文件路径
std::wstring inputFile = L"Output/段落后插入分页符.docx";
std::wstring outputFile = L"Output/删除分页符.docx";
//创建Document的对象
intrusive_ptr document = new Document();
//载入Word文档
document->LoadFromFile(inputFile.c_str());
//循环遍历文档第一节的每所有段落
for (int j = 0; j < document->GetSections()->GetItemInSectionCollection(0)->GetParagraphs()->GetCount(); j++)
{
intrusive_ptr p = document->GetSections()->GetItemInSectionCollection(0)->GetParagraphs()->GetItemInParagraphCollection(j);
//循环遍历段落中的所有子对象
for (int i = 0; i < p->GetChildObjects()->GetCount(); i++)
{
intrusive_ptr obj = p->GetChildObjects()->GetItem(i);
//判断子对象是否为分页符
if (Object::CheckType(obj) && (Object::Dynamic_cast(obj))->GetBreakType() == BreakType::PageBreak)
{
//删除分页符
p->GetChildObjects()->Remove(obj);
}
}
}
//保存文档
document->SaveToFile(outputFile.c_str(), FileFormat::Docx2013);
document->Close();
} 
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.DocViewer 8.3.0 已发布。本次更新修复了部分图片显示不出来的问题。此外,该版本还修复了中文文本显示失败的问题。详情请阅读以下内容。
问题修复:
Spire.PDF 9.3.4 已发布。本次更新新增支持将字体嵌入到PDF文档和创建“显示/隐藏域”动作的功能,同时还优化了文档压缩功能。此外,本次更新还修复了许多已知问题,如转换 PDF 到 Word 内容不正确的问题。详情请阅读以下内容。
新功能:
PdEmbeddedFontConverter converter = new PdEmbeddedFontConverter ("InputFile");
convert.ToEmbeddedFontPdf("resultFile");PdfDocument pdf = new PdfDocument(inputFile);
pdf.LoadFromFile(inputFile);
for (int c = 0; c < pdf.Pages.Count; c++)
{
PdfFormWidget formWidget = pdf.Form as PdfFormWidget;
for (int i = 0; i < formWidget.FieldsWidget.List.Count; i++)
{
PdfField field = formWidget.FieldsWidget.List[i] as PdfField;
if (field is PdfButtonWidgetFieldWidget)
{
PdfButtonWidgetFieldWidget buttonWidget = field as PdfButtonWidgetFieldWidget;
PdfHideAction hideAction = new PdfHideAction(buttonWidget.Name, true);
buttonWidget.MouseDown = hideAction;
}
}
}
pdf.SaveToFile(outputFile);
pdf.Dispose();PdfCompressor compressor = new PdfCompressor("1.pdf");
compressor.Options.TextCompressionOptions.UnembedFonts = true;
compressor.Options.ImageCompressionOptions.CompressImage = true;
compressor.Options.ImageCompressionOptions.ResizeImages = true;
compressor.Options.ImageCompressionOptions.ImageQuality = ImageQuality.Low;
compressor.CompressToFile("1_out.pdf");问题修复:
Spire.XLS 13.3.2 已发布。本次更新新增支持ISOWEEKNUM公式,CEILING.PRECISE公式以及ENCODEURL公式,并支持将工作表中的一种字体替换为另一种字体。同时,该版本还增强了Excel到PDF,HTML以及到图片的转换功能。此外,一些已知问题也在本次更新中被成功修复,如修复了添加的TextBox的位置不正确的问题。详情请阅读以下内容。
新功能:
Workbook workbook = new Workbook();
workbook.Worksheets[0].Range["A1"].Formula = "ISOWEEKNUM(DATE(2012,1,1))";
workbook.CalculateAllValue();
workbook.SaveToFile("result.xlsx");Workbook workbook = new Workbook();
workbook.Worksheets[0].Range["A1"].Formula = "CEILING.PRECISE(-4.6,3)";
workbook.CalculateAllValue();
workbook.SaveToFile("result.xlsx");Workbook workbook = new Workbook();
workbook.Worksheets[0].Range["A1"].Formula = "ENCODEURL(\"https://www.e-iceblue.com\")";
workbook.CalculateAllValue();
workbook.SaveToFile("result.xlsx");sheet.ReplaceAll(oldValue, oldStyle, newValue, newStyle)问题修复: