首页 > 其他分享 >.net-base64转ofd文件转pdf转图片后压缩打包

.net-base64转ofd文件转pdf转图片后压缩打包

时间:2024-07-25 14:52:45浏览次数:13  
标签:文件 string targetFilePath int ofd base64 path pdf startPageNum

最近有需求从第三方获取到ofd文件后,需要转pdf,
1.目前看的有一个免费的插件,需要安装程序包 FreeSpire.PDF

 安装后,直接引用

// odf文件地址 string path = @"D:\OFD\20240725\吴天.ofd";
OfdConverter converter = new OfdConverter(path);
//pathPdf pdf 文件地址 string pathPdf = "D:\OFD\20240725\吴天.pdf";
converter.ToPdf(pathPdf);

这就转成功了,失败直接会抛出异常

2. pdf在转图片

需要引用dll  O2S.Components.PDFRender4NET ,dll下载地址: https://note.youdao.com/s/OtHpAcdi

 

/// <summary>
        /// 将PDF文档转换为图片的方法
        /// </summary>
        /// <param name="pdfInputPath">PDF文件路径</param>
        /// <param name="imageOutputPath">图片输出路径</param>
        /// <param name="imageName">生成图片的名字</param>
        /// <param name="startPageNum">从PDF文档的第几页开始转换</param>
        /// <param name="endPageNum">从PDF文档的第几页开始停止转换</param>
        /// <param name="imageFormat">设置所需图片格式</param>
        /// <param name="definition">设置图片的清晰度,数字越大越清晰 5</param>
        /// <param name="imageSize">设置图片总体大小 35</param>
        public static void ConvertPDF2Image(string pdfInputPath, string imageOutputPath,
            string imageName, int startPageNum, int endPageNum, ImageFormat imageFormat, int definition, int imageSize)
        {
            PDFFile pdfFile = PDFFile.Open(pdfInputPath);
            if (!Directory.Exists(imageOutputPath))
            {
                Directory.CreateDirectory(imageOutputPath);
            }
            // validate pageNum
            if (startPageNum <= 0)
            {
                startPageNum = 1;
            }
            if (endPageNum > pdfFile.PageCount)
            {
                endPageNum = pdfFile.PageCount;
            }
            if (startPageNum > endPageNum)
            {
                int tempPageNum = startPageNum;
                startPageNum = endPageNum;
                endPageNum = startPageNum;
            }
            // start to convert each page
            for (int i = startPageNum; i <= endPageNum; i++)
            {
                Bitmap pageImage = pdfFile.GetPageImage(i - 1, imageSize * definition); // 35*5 
                pageImage.Save(imageOutputPath + imageName, imageFormat);
                pageImage.Dispose();
            }
            pdfFile.Dispose();
        }
    }

 

 

外部方法调用

 

public class Test
{
// odf字符串转pdf转图片
string ret = new OfdFileHelper().OFDFileDownload("odf-strbase64文件字符串", "吴天");
// 压缩文件
string path = new OfdFileHelper().FileDeal();
}

以下是完整代码

using System;
using System.IO;
using System.IO.Compression;
using System.Drawing;
using System.Drawing.Imaging;
using Spire.Pdf.Conversion;
using O2S.Components.PDFRender4NET;
using NPOI.SS.Formula.Functions;

namespace OfdTest
{
    public class OfdFileHelper
    { 
        /// <summary>
        ///  OFD文件下载到本地
        /// </summary>
        /// <param name="strbase64">strbase64 ofd文件</param>
        /// <param name="fileName">文件名称 =吴天</param>
        /// <returns></returns>
        public string OFDFileDownload(string strbase64, string fileName)
        {
            string result = "";
            try
            {

                string targetFilePath = @"D:\OFD\20240725";

                if (!Directory.Exists(targetFilePath))
                {
                    Directory.CreateDirectory(targetFilePath);
                }
                string path = targetFilePath + @"\吴天.ofd";
                string pathPdf = targetFilePath + @"\吴天.pdf";

                //base64编码的文本 转为 图片 
                byte[] fileData = Convert.FromBase64String(strbase64);
                FileStream fs = new FileStream(path, FileMode.Create);
                fs.Write(fileData, 0, fileData.Length);
                fs.Close();

                Stream fst = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);//将Path该文件读取为流格式 文件大小: fst.Length 

                // odf文件地址  string path =  @"D:\OFD\20240725\吴天.ofd";
                OfdConverter converter = new OfdConverter(path);
                //pathPdf pdf 文件地址    string pathPdf = "D:\OFD\20240725\吴天.pdf";
                converter.ToPdf(pathPdf);

                string pngFilePath = targetFilePath + "\\"; // 输出png文件路径 
                string pngFile = fileName + ".Png"; // 输出png文件  
                ConvertPDF2Image(pathPdf, pngFilePath, pngFile, 1, 1, ImageFormat.Png, 5, 35);
                result = pngFilePath;
            }
            catch (Exception ex)
            {
                string str = ex.ToString();
            }

            return result;
        }


        /// <summary>
        /// 找到已经下载的文件,打包文件
        /// </summary>    
        /// <returns></returns>
        public string FileDeal()
        {
            string filePath = "";
            try
            {
                string targetPath = @"D:\Download\";
                string targetFilePath = @"D:\Download\" + DateTime.Now.ToString("yyyy-MM-ddHHmm");
                DateTime date = DateTime.Now;
                //StreamWriter sw = new StreamWriter(fs);//创建输入流 
                //sw.Write(""); //写入文本信息 
                if (!Directory.Exists(targetFilePath))
                {
                    Directory.CreateDirectory(targetFilePath);
                }

                try
                {
                    string path = @"\OFD\20240725\吴天.Png"; // 原目录文件
                    var destFile = Path.Combine(targetFilePath, "吴天.Png");
                    File.Copy(path, destFile, true);// 复制到新目录
                    File.SetAttributes(path, FileAttributes.Normal);
                }
                catch (Exception ex)
                { // 下载失败,记录失败原因
                    File.AppendAllText(targetFilePath + @"\log" + date.ToString("yyyy-MM-dd") + ".txt", "\r\n" + ex.Message);
                }
                // 压缩
                string filename = $"压缩文件test{DateTime.Now.ToString("yyyyMMddHHmmss")}";
                string zipName = targetPath + filename + ".zip";
                CompressDirectoryZip(targetFilePath + @"\", zipName);

                // 打包后的文件地址 targetFilePath
                Stream fileStream1 = new FileStream(zipName, FileMode.Open, FileAccess.Read, FileShare.Read);//将Path该文件读取为流格式
                byte[] expectedBytes = new byte[fileStream1.Length];
                fileStream1.Read(expectedBytes, 0, expectedBytes.Length);//读取该流文件字节,保存到对象中,为测试比对做准备`在这里插入代码片` 
                filePath = zipName;// 压缩文件地址
            }
            catch (Exception ex)
            {
                string ret = ex.Message;
            }
            return filePath;
        }


        /// <summary>
        /// 将指定目录压缩为Zip文件
        /// </summary>
        /// <param name="folderPath">文件夹地址 D:/1/ </param>
        /// <param name="zipPath">zip地址 D:/1.zip </param>
        public static void CompressDirectoryZip(string folderPath, string zipPath)
        {
            DirectoryInfo directoryInfo = new DirectoryInfo(zipPath);

            if (directoryInfo.Parent != null)
            {
                directoryInfo = directoryInfo.Parent;
            }

            if (!directoryInfo.Exists)
            {
                directoryInfo.Create();
            }

            System.IO.Compression.ZipFile.CreateFromDirectory(folderPath, zipPath, CompressionLevel.Optimal, false);
        }


        /// <summary>
        /// 将PDF文档转换为图片的方法
        /// </summary>
        /// <param name="pdfInputPath">PDF文件路径</param>
        /// <param name="imageOutputPath">图片输出路径</param>
        /// <param name="imageName">生成图片的名字</param>
        /// <param name="startPageNum">从PDF文档的第几页开始转换</param>
        /// <param name="endPageNum">从PDF文档的第几页开始停止转换</param>
        /// <param name="imageFormat">设置所需图片格式</param>
        /// <param name="definition">设置图片的清晰度,数字越大越清晰 5</param>
        /// <param name="imageSize">设置图片总体大小 35</param>
        public static void ConvertPDF2Image(string pdfInputPath, string imageOutputPath,
            string imageName, int startPageNum, int endPageNum, ImageFormat imageFormat, int definition, int imageSize)
        {
            PDFFile pdfFile = PDFFile.Open(pdfInputPath);
            if (!Directory.Exists(imageOutputPath))
            {
                Directory.CreateDirectory(imageOutputPath);
            }
            // validate pageNum
            if (startPageNum <= 0)
            {
                startPageNum = 1;
            }
            if (endPageNum > pdfFile.PageCount)
            {
                endPageNum = pdfFile.PageCount;
            }
            if (startPageNum > endPageNum)
            {
                int tempPageNum = startPageNum;
                startPageNum = endPageNum;
                endPageNum = startPageNum;
            }
            // start to convert each page
            for (int i = startPageNum; i <= endPageNum; i++)
            {
                Bitmap pageImage = pdfFile.GetPageImage(i - 1, imageSize * definition); // 35*5 
                pageImage.Save(imageOutputPath + imageName, imageFormat);
                pageImage.Dispose();
            }
            pdfFile.Dispose();
        }

    }
}


 

标签:文件,string,targetFilePath,int,ofd,base64,path,pdf,startPageNum
From: https://www.cnblogs.com/luoqin520/p/18323040

相关文章

  • Python PDF 编辑器
    我将制作一个PDF编辑器,它可以更改PDF中的单词,而无需更改文本的来源。这是我的代码,到目前为止,它所做的一切都是正确的,但我可以获得文本颜色和文本大小。importpymupdfimportos#OpenthePDFdocumentdoc=pymupdf.open('input.pdf')#Loadthecustomfontfi......
  • 所见即所得,赋能RAG:PDF解析里的段落识别
    前几天,有一位用户使用OCR产品识别多栏论文后向我们询问:要怎么解决不合适的断句、分段以及错误阅读顺序的问题?我们用一个相似案例为大家直观展示这位用户遇到的情况。 如图中的多栏期刊,如果用OCR识别,或直接在一些办公软件对文字进行复制黏贴,我们就会得到右侧的效果——按PDF排......
  • binascii.Error:无效的 base64 编码字符串:数据字符数 (41) 不能多于 1 4 的倍数
    我正在尝试使用py-vapid、pywebpush和django-push-notifications通过Webpush发送通知。当我尝试从django管理网站发送测试通知时,我在控制台中收到此回溯日志:|InternalServerError:/djangoadmin/push_notifications/webpushdevice/......
  • PDF相关软件优缺点对比
    PDF相关软件优缺点对比AdobeAcrobatProDC优点:功能全面:提供创建、编辑、转换、注释、签名、加密等几乎所有PDF相关功能。用户界面友好:UI设计直观,易于使用。云服务集成:与AdobeDocumentCloud无缝集成,方便在多个设备上访问和管理文档。OCR技术:强大的OCR功能,将......
  • 我已成功安装 pypdf2 但无法将其导入到我的 python 文件中
    我已经成功安装了pypdf2模块,但在导入它时,我发现该模块丢失了。我尝试使用fromPyPDF2importPdfReader导入,但它不起作用此问题的各种解决方案是什么?在尝试导入PyPDF2时遇到问题。以下是可能导致此问题的一些常见原因和解决方案:安......
  • 扫描 PDF 中的 QR-Code,提取后面的 URL 并检查 URL 的状态代码
    我们重新启动了一个网站和数百个不同语言的PDF以及硬打印的QR代码。重新启动后,我们遇到了问题,某些QR代码未链接到正确的UR。为了减少工作量,我的想法是加载所有PDF,扫描QR码,从pdf中提取URL并发出请求,该请求是URL的状态代码200(并有一个包含所有文档和链接的表......
  • 如何免费提取PDF里的图片-pdfimages使用教程
    写在前面本随笔是非常菜的菜鸡写的。如有问题请及时提出。可以联系:[email protected]:https://github.com/WindDevil(目前啥也没有动机由于WPS的提取图片需要收费,作为穷鬼的我直接在bing,键入opensourcesoftwaregetpictureformpdf.找到这个项目:VR51/Batch-PDF......
  • pdf文档翻译工具哪个好用?分享小白也在用的翻译软件
    PDF文档因其便携性和格式稳定性而广泛应用于学术交流、商务沟通等多个领域。然而,语言的障碍往往成为信息交流的难题。想象一下,当你收到一份重要的外文PDF文档,却因语言不通而无法理解其内容,这无疑会大大影响工作效率。因此,拥有一款pdf文档翻译中文的软件就显得尤为重要啦。它......
  • Aspose项目实战!pdf、cells for java
    Aspose实战使用:Excel与PDF转换工具类在这篇博客中,我将分享如何使用Aspose库来实现Excel文件与PDF文件之间的转换。我会重点分析一个工具类AsposeOfficeUtil,这个类封装了多个与Excel和PDF相关的操作方法,帮助开发者高效地进行文件转换和数据处理。此外,还将提......
  • 在Python中调整pdf页面大小
    我正在使用python裁剪pdf页面。一切正常,但如何更改页面大小(宽度)?这是我的裁剪代码:input=PdfFileReader(file('my.pdf','rb'))p=input.getPage(1)(w,h)=p.mediaBox.upperRightp.mediaBox.upperRight=(w/4,h)output.addPage(p)当我裁剪页面时,我也需要......