Spire.Office 7.3.2已发布。本次更新带来了一些新功能。例如:Spire.Email实现了LinkedResource接口支持给邮件添加图片;Spire.Presentation支持创建“地图”图表和修改图表源数据的数字格式;Spire.PDF支持填充XFA图片域;Spire.XLS支持转换Excel到PDF时设置内容适应页面宽度的功能。此外,该版本还修复了大量已知的问题。
该版本涵盖了最新版的Spire.Doc,Spire.PDF,Spire.XLS,Spire.Email,Spire.DocViewer, Spire.PDFViewer,Spire.Presentation,Spire.Spreadsheet, Spire.OfficeViewer, Spire.Barcode, Spire.DataExport。
版本信息如下:
https://www.e-iceblue.cn/Downloads/Spire-Office-NET.html
新功能:
MailMessage mail = new MailMessage("From @domain.com", "To @domain.com");
mail.To.Add("AddedTo @domain.com");
mail.ReplyTo.Add("ReplyTo @domain.com");
mail.Cc.Add("Cc @domain.com");
mail.Bcc.Add("Bcc @domain.com");
mail.Subject = "New message created by Spire.Email for .NET";
//引用图片资源
//example:<body background='cid:ice.png'>
LinkedResource resource = new LinkedResource(@"../../../../../Data/TestData/ice.png");
resource.ContentId = "ice.png";
mail.LinkedResources.Add(resource);
//设置正文html
string htmlString = @"
<html>
<body background='cid:ice.png'>
<p>您好!</p>
<p>非常感谢您邀请我参加2月10日(周五)晚8点在贵公司总部举办的年终晚会。我很乐意参加,期待在晚会上见到您和您的同事们。</p>
<p>预祝公司年会圆满成功。<br>Nina<br>2022年1月12日</p>
</body>
</html>";
mail.BodyHtml = htmlString;
// 保存邮件
mail.Save("CreateNewEmail.msg", MailMessageFormat.Msg);
新功能:
Presentation ppt = new Presentation();
IChart chart = ppt.Slides[0].Shapes.AppendChart(ChartType.Map, new RectangleF(50, 50, 450, 450), false);
chart.ChartData[0, 1].Text = "series";
string[] countries = { "China", "Russia", "France", "Mexico", "United States", "India", "Australia" };
for (int i = 0; i < countries.Length; i++)
{
chart.ChartData[i + 1, 0].Text = countries[i];
}
int[] values = { 32, 20, 23, 17, 18, 6, 11 };
for (int i = 0; i < values.Length; i++)
{
chart.ChartData[i + 1, 1].NumberValue = values[i];
}
chart.Series.SeriesLabel = chart.ChartData[0, 1, 0, 1];
chart.Categories.CategoryLabels = chart.ChartData[1, 0, 7, 0];
chart.Series[0].Values = chart.ChartData[1, 1, 7, 1];
ppt.SaveToFile("output.pptx", Spire.Presentation.FileFormat.Pptx2013);
Presentation ppt = new Presentation();
ppt.LoadFromFile(@"input.pptx");
ISlide slide = ppt.Slides[2];
foreach (IShape shape in slide.Shapes)
{
if (shape is IChart)
{
IChart chart = shape as IChart;
if (chart.Type.Equals(ChartType.BarClustered))
{
for (int i = 1; i < 5; i++)
{
chart.ChartData[i, 1].NumberFormat = "#,##0.00";
}
}
}
}
ppt.SaveToFile("result.pptx", Spire.Presentation.FileFormat.Pptx2013);
问题修复:
新功能:
workbook.ConverterSetting.SheetFitToWidth = true;
问题修复:
新功能:
PdfDocument pdfDocument = new PdfDocument();
pdfDocument.LoadFromFile(inputFile);
PdfFormWidget form = pdfDocument.Form as PdfFormWidget;
if (form.XFAForm != null)
{
List<XfaField> xFields = form.XFAForm.XfaFields;
for (int i = 0; i < xFields.Count; i++)
{
if (xFields[i] is XfaImageField)
{ XfaImageField xImageField = xFields[i] as XfaImageField; FileStream fileStream = new FileStream(imageName, FileMode.Open, FileAccess.Read, FileShare.Read); xImageField.Image = Image.FromStream(fileStream); }
}
}
问题修复:
Spire.XLS 12.3.8已发布。该版本支持转换Excel到PDF时设置内容适应页面宽度的功能,此外还修复了打印Excel时分页不正确等已知问题。详情请阅读以下内容。
新功能:
workbook.ConverterSetting.SheetFitToWidth = true;
问题修复:
Spire.Office for Java 5.3.2已发布。本次更新带来了一些新的功能,比如:Spire.XLS for Java支持为图表分类轴设置文本方向以及对Table进行排序,还支持支持创建瀑布图、Pareto直方图、直方图、箱形图、树状图、旭日图、漏斗图,并且增强了Excel到PDF、Excel到图片的转换功能;Spire.PDF for Java支持将PDF转换为灰度文档,还增强了PDF到PDFA1B的转换功能。此外还修复了其它一些已知问题,详情请阅读以下内容。
获取Spire.Office for Java 5.3.2请点击:https://www.e-iceblue.cn/Downloads/Spire-Office-JAVA.html
新功能:
chart.getPrimaryCategoryAxis().setTextDirection(TextVerticalValue.EastAsianVertical);
Workbook workbook = new Workbook();
workbook.loadFromFile(inputFile);
Worksheet sheet = workbook.getWorksheets().get(0);
// Add a new List Object to the worksheet
IListObject listObject = sheet.getListObjects().create("table", sheet.getCellRange(1, 1, 19, 5));
// Add Default Style to the table
listObject.setBuiltInTableStyle(TableBuiltInStyles.TableStyleLight9);
listObject.getAutoFilters().getSorter().getSortColumns().add(2, OrderBy.Ascending);
listObject.getAutoFilters().getSorter().sort(sheet.getCellRange(1, 1, 19, 5));
Workbookworkbook=newWorkbook();
workbook.loadFromFile("input.xlsx");
Worksheetsheet=workbook.getWorksheets().get(0);
ChartofficeChart=sheet.getCharts().add();
//Setcharttypeaswaterfall
officeChart.setChartType(ExcelChartType.WaterFall);
//Setdatarangetothechartfromtheworksheet
officeChart.setDataRange(sheet.getRange().get("A2:B8"));
//Datapointsettingsastotalinchart
officeChart.getSeries().get(0).getDataPoints().get(3).setAsTotal(true);
officeChart.getSeries().get(0).getDataPoints().get(6).setAsTotal(true);
//Showingtheconnectorlinesbetweendatapoints
officeChart.getSeries().get(0).getFormat().showConnectorLines(true);
//Setthecharttitle
officeChart.setChartTitle("CompanyProfit(inUSD)");
//Formattingdatalabelandlegendoption
officeChart.getSeries().get(0).getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true);
officeChart.getSeries().get(0).getDataPoints().getDefaultDataPoint().getDataLabels().setSize(8);
officeChart.getLegend().setPosition(LegendPositionType.Right);
workbook.saveToFile("output.xlsx",FileFormat.Version2016);
Workbookworkbook=newWorkbook();
workbook.loadFromFile("input.xlsx");
Worksheetsheet=workbook.getWorksheets().get(0);
ChartofficeChart=sheet.getCharts().add();
//SetcharttypeasPareto
officeChart.setChartType(ExcelChartType.Pareto);
//Setdatarangeintheworksheet
officeChart.setDataRange(sheet.getRange().get("A2:B8"));
//Setcategoryvaluesasbinvalues
officeChart.getPrimaryCategoryAxis().isBinningByCategory(true);
officeChart.getPrimaryCategoryAxis().setOverflowBinValue(5);
officeChart.getPrimaryCategoryAxis().setUnderflowBinValue(1);;
//FormattingParetoline
officeChart.getSeries().get(0).getParetoLineFormat().getLineProperties().setColor(Color.blue);
//Gapwidthsettings
officeChart.getSeries().get(0).getDataFormat().getOptions().setGapWidth(6);
//Setthecharttitle
officeChart.setChartTitle("Expenses");
//Hidingthelegend
officeChart.hasLegend(false);
workbook.saveToFile("output.xlsx",FileFormat.Version2016);
Workbookworkbook=newWorkbook();
workbook.loadFromFile("input.xlsx");
Worksheetsheet=workbook.getWorksheets().get(0);
ChartofficeChart=sheet.getCharts().add();
//Setcharttypeashistogram
officeChart.setChartType(ExcelChartType.Histogram);
//Setdatarangeintheworksheet
officeChart.setDataRange(sheet.getRange().get("A1:A15"));
//Categoryaxisbinsettings
officeChart.getPrimaryCategoryAxis().setBinWidth(8);
//Gapwidthsettings
officeChart.getSeries().get(0).getDataFormat().getOptions().setGapWidth(6);
//Setthecharttitleandaxistitle
officeChart.setChartTitle("HeightData");
officeChart.getPrimaryValueAxis().setTitle("Numberofstudents");
officeChart.getPrimaryCategoryAxis().setTitle("Height");
//Hidingthelegend
officeChart.hasLegend(false);
workbook.saveToFile("output.xlsx",FileFormat.Version2016);
Workbookworkbook=newWorkbook();
workbook.loadFromFile("input.xlsx");
Worksheetsheet=workbook.getWorksheets().get(0);
ChartofficeChart=sheet.getCharts().add();
//Setthecharttitle
officeChart.setChartTitle("YearlyVehicleSales");
//SetcharttypeasBoxandWhisker
officeChart.setChartType(ExcelChartType.BoxAndWhisker);
//Setdatarangeintheworksheet
officeChart.setDataRange(sheet.getRange().get("A1:E17"));
//BoxandWhiskersettingsonfirstseries
ChartSerieseriesA=officeChart.getSeries().get(0);
seriesA.getDataFormat().showInnerPoints(false);
seriesA.getDataFormat().showConnectorLines(true);
seriesA.getDataFormat().showMeanMarkers(true);
seriesA.getDataFormat().showMeanLine(false);
seriesA.getDataFormat().setQuartileCalculationType(ExcelQuartileCalculation.ExclusiveMedian);
//BoxandWhiskersettingsonsecondseries
ChartSerieseriesB=officeChart.getSeries().get(1);
seriesB.getDataFormat().showInnerPoints(false);
seriesB.getDataFormat().showConnectorLines(true);
seriesB.getDataFormat().showMeanMarkers(true);
seriesB.getDataFormat().showMeanLine(false);
seriesB.getDataFormat().setQuartileCalculationType(ExcelQuartileCalculation.InclusiveMedian);
//BoxandWhiskersettingsonthirdseries
ChartSerieseriesC=officeChart.getSeries().get(2);
seriesC.getDataFormat().showInnerPoints(false);
seriesC.getDataFormat().showConnectorLines(true);
seriesC.getDataFormat().showMeanMarkers(true);
seriesC.getDataFormat().showMeanLine(false);
seriesC.getDataFormat().setQuartileCalculationType(ExcelQuartileCalculation.ExclusiveMedian);
workbook.saveToFile("output.xlsx",FileFormat.Version2016);
Workbookworkbook=newWorkbook();
workbook.loadFromFile("input.xlsx");
Worksheetsheet=workbook.getWorksheets().get(0);
ChartofficeChart=sheet.getCharts().add();
//SetcharttypeasTreeMap
officeChart.setChartType(ExcelChartType.TreeMap);
//Setdatarangeintheworksheet
officeChart.setDataRange(sheet.getRange().get("A1:C11"));
//Setthecharttitle
officeChart.setChartTitle("Areabycountries");
//SettheTreemaplabeloption
officeChart.getSeries().get(0).getDataFormat().setTreeMapLabelOption(ExcelTreeMapLabelOption.Banner);
//Formattingdatalabels
officeChart.getSeries().get(0).getDataPoints().getDefaultDataPoint().getDataLabels().setSize(8);
workbook.saveToFile("output.xlsx",FileFormat.Version2016);
Workbookworkbook=newWorkbook();
workbook.loadFromFile("input.xlsx");
Worksheetsheet=workbook.getWorksheets().get(0);
ChartofficeChart=sheet.getCharts().add();
//SetcharttypeasSunburst
officeChart.setChartType(ExcelChartType.SunBurst);
//Setdatarangeintheworksheet
officeChart.setDataRange(sheet.getRange().get("A1:D16"));
//Setthecharttitle
officeChart.setChartTitle("Salesbyannual");
//Formattingdatalabels
officeChart.getSeries().get(0).getDataPoints().getDefaultDataPoint().getDataLabels().setSize(8);
//Hidingthelegend
officeChart.hasLegend(false);
workbook.saveToFile("output.xlsx",FileFormat.Version2016);
Workbook workbook = new Workbook();
workbook.loadFromFile("input.xlsx");
Worksheet sheet = workbook.getWorksheets().get(0);
Chart officeChart = sheet.getCharts().add();
//Set chart type as Funnel
officeChart.setChartType(ExcelChartType.Funnel);
//Set data range in the worksheet
officeChart.setDataRange(sheet.getRange().get("A1:B6"));
//Set the chart title
officeChart.setChartTitle("Funnel");
//Formatting the legend and data label option
officeChart.hasLegend(false);
officeChart.getSeries().get(0).getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true);
officeChart.getSeries().get(0).getDataPoints().getDefaultDataPoint().getDataLabels().setSize(8);
workbook.saveToFile("output.xlsx", FileFormat.Version2016);
问题修复:
新功能:
PdfGrayConverter converter = new PdfGrayConverter("ConvertToGrayPdf.pdf");
converter.toGrayPdf("output.pdf");
问题修复:
问题修复:
问题修复:
通过将彩色 PDF 文档转为灰色调、无彩色效果页面的文档,可实现缩小文档大小的目的。本文,将通过调用 Spire.PDF for Java 提供的 PdfGrayConverter.toGrayPdf() 方法介绍实现将 PDF 转为灰度的方法。以下是详细步骤。
首先,您需要在 Java 程序中添加 Spire.Pdf.jar 文件作为依赖项。JAR 文件可以从此链接下载。 如果您使用 Maven,则可以将以下代码添加到项目的 pom.xml 文件中,从而在应用程序中导入 JAR 文件。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>11.11.11</version>
</dependency>
</dependencies>
实现转换时,可通过以下步骤完成:
import com.spire.pdf.conversion.*;
public class ToGrayPDF {
public static void main(String[] args) {
//创建一个PdfGrayConverter实例并加载PDF文档
PdfGrayConverter converter = new PdfGrayConverter("Booklet.pdf");
//将彩色PDF转换为灰度
converter.toGrayPdf("ToGray.pdf");
converter.dispose();
}
}
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请 该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。 获取有效期 30 天的临时许可证。
Spire.PDF 8.3.9已发布。该版本支持填充XFA图片域,并修复了获取 PDF 表单域失败等已知问题。详情请阅读以下内容。
新功能:
PdfDocument pdfDocument = new PdfDocument();
pdfDocument.LoadFromFile(inputFile);
PdfFormWidget form = pdfDocument.Form as PdfFormWidget;
if (form.XFAForm != null)
{
List<XfaField> xFields = form.XFAForm.XfaFields;
for (int i = 0; i < xFields.Count; i++)
{
if (xFields[i] is XfaImageField)
{ XfaImageField xImageField = xFields[i] as XfaImageField; FileStream fileStream = new FileStream(imageName, FileMode.Open, FileAccess.Read, FileShare.Read); xImageField.Image = Image.FromStream(fileStream); }
}
}
问题修复:

在C#中打印PDF文档无需依赖Adobe Acrobat。通过Spire.PDF,开发者可以轻松将强大的打印功能集成到应用程序中。该库提供了一种流畅的编程方法,能够管理从简单打印任务到高级功能(如双面打印和静默打印)的一切需求。无论您需要打印单页还是多页文档,Spire.PDF都能确保精确性和高效性。
本文将探讨如何使用Spire.PDF for .NET 在C# 应用程序中打印PDF 、自定义打印设置以及解决常见问题。
在C#中打印PDF时,有多种库可供选择,但Spire.PDF因其功能强大且对开发者友好而脱颖而出。Spire.PDF提供以下优势:
该库处理了PDF渲染和打印机通信的所有底层复杂性,使开发者能够专注于业务逻辑的实现,而无需纠结于打印机API。
首先,通过NuGet包管理器安装Spire.PDF for .NET库:
Install-Package Spire.PDF
或者,您也可以从我们的官方网站直接下载Spire.PDF,并在项目中引用DLL文件。
现在,让我们从最简单的场景开始:将PDF文档打印到系统的默认打印机。Spire.PDF使这一过程变得非常简单:
using Spire.Pdf;
namespace PrintWithDefaultPrinter
{
class Program
{
static void Main(string[] args)
{
// 创建一个 PdfDocument 对象
PdfDocument doc = new PdfDocument();
// 加载一个 PDF 文件
doc.LoadFromFile("C:/Users/Administrator/Desktop/Input.pdf");
// 打印到默认打印机
doc.Print();
// 清理资源
doc.Dispose();
}
}
}
这个基础示例展示了核心工作流程:
这种简洁的方法非常适合只需快速打印文档而无需特殊要求的场景。
虽然基础打印方法适用于简单情况,但大多数实际应用需要对打印过程进行更多控制。Spire.PDF 通过其PrintSettings属性提供了丰富的打印自定义选项。
您可以指定目标打印机名称,而非使用默认打印机:
doc.PrintSettings.PrinterName = "您的打印机名称";
对于大型文档,您可能只需打印特定页面。使用 SelectPageRange() 定义起始页和结束页:
doc.PrintSettings.SelectPageRange(1, 5); //打印第1至第5页
若需打印非连续页面,可使用 SelectSomePages():
doc.PrintSettings.SelectSomePages(new int[]{ 1, 3, 5, 7 });
需要多份打印?设置 Copies属性即可:
doc.PrintSettings.Copies = 2;
双面打印可以节省纸张,常用于专业文档。首先检查打印机是否支持:
if (doc.PrintSettings.CanDuplex)
{
doc.PrintSettings.Duplex = Duplex.Default;
}
对于无需彩色的文档,可以强制使用灰度打印:
doc.PrintSettings.Color = false;
在自动化工作流中,通常需要无需用户交互的打印:
doc.PrintSettings.PrintController = new StandardPrintController();
此设置会抑制所有打印对话框,使打印过程完全静默。请谨慎使用,因为它移除了用户确认或调整设置的能力。
支持多纸盒的高级打印机可以自动处理复杂文档组装:
// 注册纸张设置事件处理器
doc.PrintSettings.PaperSettings += delegate (object sender, PdfPaperSettingsEventArgs e)
{
// 第1-10页使用纸盒1
if (1 <= e.CurrentPaper && e.CurrentPaper <= 10)
{
e.CurrentPaperSource = e.PaperSources[0];
}
// 第10页之后使用纸盒2
else
{
e.CurrentPaperSource = e.PaperSources[1];
}
};
此功能适用于专业文档制作,例如封面、插页或章节分隔页可以自动打印在不同纸张上。
通过在一张纸上排列多页PDF来优化纸张使用。SelectMultiPageLayout() 方法允许指定页面排列的行列布局:
doc.PrintSettings.SelectMultiPageLayout(2, 2); // 每张纸打印4页(2行×2列)
在C#中通过编程打印PDF文档,既不需要依赖Adobe Acrobat,也无需调用复杂的打印机API。借助Spire.PDF,仅需几行代码即可实现从基础打印到专业级输出的所有功能。该库在隐藏复杂性的同时,仍能提供精细化的控制能力。
无论您正在构建文档管理系统、报表工具,还是任何需要PDF打印功能的应用程序,Spire.PDF都能提供一套兼顾易用性与强大特性的完整解决方案。立即探索其功能,彻底革新您的PDF打印工作流程!
使用Spire.PDF的 Print() 方法,直接将文档发送至打印机即可。
可以。只要打印机已正确安装到系统中,您即可通过名称指定网络打印机(操作方式与本地打印机相同)。
本文提供的代码片段可无缝适用于WPF和WinForms应用程序。在WPF中,建议添加打印机选择对话框以提升用户体验。
通过PrinterResolutionKind属性设置打印机分辨率可控制打印质量。如需高质量输出,请使用:
doc.PrintSettings.PrinterResolutionKind = PdfPrinterResolutionKind.High;
Spire.PDF支持以下分辨率选项:
注意 :实际输出效果取决于打印机硬件能力。如需照片级打印,请确保打印机支持高DPI(如1200×1200)并使用高质量纸张。对于色彩敏感文档,可结合doc.PrintSettings.Color = true设置。
如果您需要去除生成文档中的评估提示或解除功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.Doc for Java 5.3.16已发布。该版本增强了Word到PDF、Word 到HTML的转换功能。此外还修复了更新目录时应用程序抛出“StackOverflowError”等已知问题。详情请阅读以下内容。
问题修复:
Spire.XLS for Java 5.3.3已发布。该版本支持为图表分类轴设置文本方向以及对Table进行排序,还增强了Excel到图片、Excel到PDF的转换功能。此外,还修复了附加富文本时程序抛出“NullPointerException”等已知问题。详情请阅读以下内容:
新功能:
chart.getPrimaryCategoryAxis().setTextDirection(TextVerticalValue.EastAsianVertical);
Workbook workbook = new Workbook();
workbook.loadFromFile(inputFile);
Worksheet sheet = workbook.getWorksheets().get(0);
// Add a new List Object to the worksheet
IListObject listObject = sheet.getListObjects().create("table", sheet.getCellRange(1, 1, 19, 5));
// Add Default Style to the table
listObject.setBuiltInTableStyle(TableBuiltInStyles.TableStyleLight9);
listObject.getAutoFilters().getSorter().getSortColumns().add(2, OrderBy.Ascending);
listObject.getAutoFilters().getSorter().sort(sheet.getCellRange(1, 1, 19, 5));
问题修复:
Spire.Presentation for Java 5.3.2已发布。该版本增强了PPTX文件到图片以及形状到图片的转换功能。详情请阅读以下内容。
问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-JAVA.html
带有 .rtf 文件扩展名的文件是一种富文本(Rich Text Format)格式文件,可以被大多数的文字处理程序打开,也很方便编辑。但在日常工作中,如果需要共享和打印文档,建议将 RTF 转换为 PDF 进行进一步处理。本文,将通过 C# 及 VB.NET 程序向您展示如何使用 Spire.Doc for .NET 将 RTF 转换为 PDF。
首先,您需要添加 Spire.Doc for .NET 包中包含的 DLL 文件作为 .NET 项目中的引用。DLL 文件可以从 此链接 下载或通过 NuGet 安装。
PM> Install-Package Spire.DocSpire.Doc for .NET 提供了方法可直接用于加载 RTF 文档,并通过以下步骤将 RTF 转为 PDF:
using Spire.Doc;
namespace RTFtoPDF
{
class Program
{
static void Main(string[] args)
{
//创建Document类的实例
Document doc = new Document();
//加载RTF文档
doc.LoadFromFile("https://cdn.e-iceblue.cn/sample.rtf", FileFormat.Rtf);
//保存为PDF格式
doc.SaveToFile("RTFtoPDF.pdf", FileFormat.PDF);
}
}
}Imports Spire.Doc
Namespace RTFtoPDF
Class Program
Private Shared Sub Main(args As String())
'创建Document类的实例
Dim doc As New Document()
'加载RTF文档
doc.LoadFromFile("https://cdn.e-iceblue.cn/sample.rtf", FileFormat.Rtf)
'保存为PDF格式
doc.SaveToFile("RTFtoPDF.pdf", FileFormat.PDF)
End Sub
End Class
End Namespace
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请 该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。 获取有效期 30 天的临时许可证。