4步学会用Aspose在ASP.NET中将文档合并为PDF( 二 )
<= chunks; chunkNumber++) if (!ChunkIsHere(chunkNumber, identifier)) return false; return true; } [NonAction] private void DeleteChunks(string identifier, int chunks) { for (var chunkNumber = 1; chunkNumber <= chunks; chunkNumber++) { var chunkFileName = GetChunkFileName(chunkNumber, identifier); System.IO.File.Delete(chunkFileName); } } [NonAction] private string ConsolidateFile(string identifier, int chunks) { var path = GetFilePath(identifier); using var destStream = System.IO.File.Create(path, 15000); for (var chunkNumber = 1; chunkNumber <= chunks; chunkNumber++) { var chunkFileName = GetChunkFileName(chunkNumber, identifier); using var sourceStream = System.IO.File.OpenRead(chunkFileName); sourceStream.CopyTo(destStream); } destStream.Close(); return path; } [NonAction] private void TryAssembleFile(string rfn, string ri, int rtc) { if (AllChunksAreHere(ri, rtc)) { // Create a single file var path = ConsolidateFile(ri, rtc); // Move consolidated file System.IO.File.Move(path, Path.Combine(_filesRootFolder, rfn),true); // Delete chunk files DeleteChunks(ri, rtc); } } #endregion } }该库将标识符用于内部目的 。 它可以以不同的方式生成 。 在示例应用程序中 , 我们使用了一个单独的控制器 。
using Microsoft.AspNetCore.Mvc;using System;using System.Linq;namespace Aspose.Demo.Pdf.Merger.Controllers{[Route("api/[controller]")][ApiController]public class TokenController : ControllerBase{// GET: api/Token?id=
步骤4:为合并的应用程序实现Web UI
现在 , 我们可以开始实现Web界面了 。 在示例应用程序中 , 我们没有使用Angular , React Vue或其他框架 , 但是我们实现了基于Bootstrap和JQuery的单页应用程序 。 应用程序页面可以分为两个部分:
- 服务器上的文件部分将使我们可以查看服务器上的文件 , 下载或删除它们 。 此外 , 用户可以通过单击文件名来选择要合并的文档 。 要获取合并的文档 , 用户应单击“合并”按钮 , 合并的文档将显示在文件列表中 。
- “上载文件”部分仅用于上载文件 。
- 合并序列中的文件位置存储在与其对应的单元格的data-order属性中 。 因此 , 要将文件合并为一个PDF , 我们应该获取所有数据顺序 , 对它们进行排序并发送文件名序列;
- 要选择/取消选择要合并的文件 , 请单击文件名 。 选定的文件标有徽章;
let lastIndex = 0;function selectFileClickHandler() {let order = parseInt($(this).attr('data-order'));if (order > 0) {$(this).attr('data-order', '0');$(this).find('span').hide('slow');for (let cell of $("*[data-order]")) {let currentOrder = parseInt(cell.dataset.order);if (currentOrder > order) {cell.dataset.order = currentOrder - 1;cell.firstElementChild.innerHTML = currentOrder - 1;}}lastIndex--;}else {$(this).attr('data-order', ++lastIndex);$(this).find('span').html(lastIndex);$(this).find('span').show('slow');}$('#btnMerge').prop('disabled', lastIndex<2);}$('#btnMerge').click((e) => {e.preventDefault();const files = $('*[data-order]').sort(function (a, b) {const contentA = parseInt($(a).data('order'));const contentB = parseInt($(b).data('order'));return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;});const data = http://kandian.youth.cn/index/[];for (let file of files) {const currentOrder = parseInt(file.dataset.order);if (currentOrder> 0) data.push(file.dataset.id);}fetch('api/merge/',{method: 'POST',mode: 'cors',cache: 'no-cache',credentials: 'same-origin',headers: { 'Content-Type': 'application/json' },redirect: 'follow',referrerPolicy: 'no-referrer',body: JSON.stringify(data)}).then(res => res.json()).then(res => {console.log(res);refreshFileTable();}).catch(err => alert(err));lastIndex = 0;});
将各种文档合并为PDF完成准备阶段后 , 我们可以考虑项目的主要部分 。 .NET库的Aspose.PDF提供了几种合并文档的方法 。 您可以在上一篇文章中学习其中的一些内容 , 但是现在我们将重点介绍一下 , 并讨论影响PDF中任何文档的可能性 。实际上 , 如果文档为PDF格式 , 那么我们必须执行两个操作 , 然后合并;如果文档不是PDF , 则首先进行转换然后合并 。
步骤1:实施Web API控制器以将各种文档合并为PDF
using Aspose.Pdf;using Microsoft.AspNetCore.Hosting;using Microsoft.AspNetCore.Mvc;using Microsoft.Extensions.Logging;using System;using System.Collections.Generic;using System.Drawing;using System.IO;namespace Aspose.Demo.Pdf.Merger.Controllers{[Route("api/[controller]")][ApiController]public class MergeController : ControllerBase{private readonly ILogger
- 开发自|不妥协不追随 Member’s Mark升级背后的“山姆哲学”
- 计算机学科|机器视觉系统是什么
- 阿尔法|击败李世石的AI公司,又研发出生物版“阿尔法狗”:破解50年生物学难题
- 手机|新鲜评测:让手机变身电脑的显示器见过没?只用4步即可完成!
- 互联网|政企学界人士西安共议数字经济 产业互联网发展向“西”行
- 高学历|薇娅一夜带货53.2亿,少不了这支高学历团队!
- 教学|机器人教学的目标方案
- 体验|VR\/AR体验、3D打印、机器人“对决”……松江这所中学人工智能创新实验室真的赞
- 直播从业者|高三老师监考时开直播,面对质疑还振振有词,怕困没有打扰学生
- 跻身|安师大2学科跻身ESI全球前1%!新增的学科是……