Aspose.Words 15.3 含多项功能改进和漏洞修复

原创|产品更新|编辑:龚雪|2015-04-22 10:10:26.000|阅读 399 次

概述:Aspose.Words 15.3 正式发布。此次更新内容有131项,包含功能改进和漏洞修复。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

Aspose.Words 15.3 正式发布。此次更新内容有131项,包含功能改进和漏洞修复。其中最显著的内容有:

  • 关于处理 RTL text, text boxes, cell vertical alignment及其他的排版引擎的改进。
  • 改进了所有文件格式的导入和导出。
  • 优化了某些情形下输出PDF文档的尺寸大小。
  • 在整个周期内Document.WarningCallback 属性都可以向你发送格式化报告。
  • 字段现在更新在内部DrawingML形状。
  • ShapeRenderer.OpaqueBoundsInPoints返回"real"形状边界。
  • 改进了填充、3D文字效果和其他东西的渲染。
  • 目前支持条形码字段了,您可以添加一个自定义条码生成器。

引入Public BarCode Generation API

支持 DISPLAYBARCODE字段。 Aspose.Words API新引入下列字符实体:

  • 添加IBarcodeGenerator界面
  • 添加BarcodeParameters类
  • 添加FieldOptions.BarcodeGenerator属性

使用案例:

点击查看 “DISPLAYBARCODE字段的自定义条码图像生成 DISPLAYBARCODE” 功能: How to Generate a Custom BarCode Image for DISPLAYBARCODE Field

InsertDocument method添加到 DocumentBuilder Class

The following new method inserts content of the document into the current position of DocumentBuilder’s cursor 下列新类函数插入文档内容到DocumentBuilder光标的当前位置。

  public Node InsertDocument(Document, ImportFormatMode);  

使用案例:

点击查看 “DISPLAYBARCODE字段的自定义条码图像生成 DISPLAYBARCODE” 功能: Inserting content of the Document

添加DocumentBase.WarningCallback属性

文档可以在任何周期发出警告消息 。所以为了收取所有的警告,DocumentBase class.添加了一个新的属性。

  public IWarningCallback WarningCallback  

与此同时 time SaveOptions.WarningCallback被淘汰了,因此就不要在新的代码中出现了。

OpaqueBoundsInPoints 属性和GetOpaqueRectangleInPixels 类函数都添加到ShapeRenderer 类

OpaqueBoundsInPoints属性和类函数 GetOpaqueRectangleInPixels 添加到ShapeRenderer类。这样就可以恰当的获取图形的不透明边界。新的工作机制如下:

  public static void RenderNode(Node node, string filePath, ImageSaveOptions imageOptions)  {      
// This code is taken from public API samples of AW.      
// Previously to find opaque bounds of the shape the function      
// that checks every pixel of the rendered image was used.      
// For now opaque bounds is got using ShapeRenderer.GetOpaqueRectangleInPixels method.        
// If no image options are supplied, create default options.      
if (imageOptions == null)         
 imageOptions = new ImageSaveOptions(FileFormatUtil.ExtensionToSaveFormat(Path.GetExtension(filePath)));        
// Store the paper color to be used on the final image and change to transparent.      
// This will cause any content around the rendered node to be removed later on.      
Color savePaperColor = imageOptions.PaperColor;      
imageOptions.PaperColor = Color.Transparent;        
// There a bug which affects the cache of a cloned node. 
To avoid this we instead clone the entire document including all nodes,      
// find the matching node in the cloned document and render that instead.      
Document doc = (Document)node.Document.Clone(true);      
node = doc.GetChild(NodeType.Any, node.Document.GetChildNodes(NodeType.Any, true).IndexOf(node), true);        
// Create a temporary shape to store the target node in. This shape will be rendered to retrieve      
// the rendered content of the node.      
Shape shape = new Shape(doc, ShapeType.TextBox);      
Section parentSection = (Section)node.GetAncestor(NodeType.Section);        
// Assume that the node cannot be larger than the page in size.      
shape.Width = parentSection.PageSetup.PageWidth;      
shape.Height = parentSection.PageSetup.PageHeight;      
shape.FillColor = Color.Transparent; 
// We must make the shape and paper color transparent.        
// Don't draw a surronding line on the shape.      shape.Stroked = false;        
// Move up through the DOM until we find node which is suitable to insert 
into a Shape (a node with a parent can contain paragraph, tables the same as a shape).      
// Each parent node is cloned on the way up so even a descendant node passed to this method can be rendered.      
// Since we are working with the actual nodes of the document we need to clone the target node into the temporary shape.     
 Node currentNode = node;     
 while (!(currentNode.ParentNode is InlineStory || currentNode.ParentNode is Story || currentNode.ParentNode is ShapeBase))     
 {          CompositeNode parent = (CompositeNode)currentNode.ParentNode.Clone(false);         
 currentNode = currentNode.ParentNode;          
parent.AppendChild(node.Clone(true));          
node = parent; // Store this new node to be inserted into the shape.      }        
// We must add the shape to the document tree to have it rendered.     
 shape.AppendChild(node.Clone(true));      
parentSection.Body.FirstParagraph.AppendChild(shape);        
// Render the shape to stream so we can take advantage of the effects of the ImageSaveOptions class.      
// Retrieve the rendered image and remove the shape from the document.     
 MemoryStream stream = new MemoryStream();      
ShapeRenderer renderer = shape.GetShapeRenderer();     
 renderer.Save(stream, imageOptions);      shape.Remove();       
 Rectangle crop = renderer.GetOpaqueRectangleInPixels(imageOptions.Scale,
 imageOptions.Resolution);        
// Load the image into a new bitmap.      
using (Bitmap renderedImage = new Bitmap(stream))  
    {          Bitmap croppedImage = new Bitmap(crop.Width, crop.Height);         
 croppedImage.SetResolution(imageOptions.Resolution, imageOptions.Resolution);            
// Create the final image with the proper background color.         
 using (Graphics g = Graphics.FromImage(croppedImage))        
  {              g.Clear(savePaperColor);            
  g.DrawImage(renderedImage, new Rectangle(0, 0, croppedImage.Width,
 croppedImage.Height), crop.X, crop.Y, crop.Width, crop.Height, 
GraphicsUnit.Pixel);                croppedImage.Save(filePath);          }      }  }

标签:Aspose.words

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP