首页 > 其他分享 >Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--快速入门

Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--快速入门

时间:2024-01-25 18:33:06浏览次数:25  
标签:-- doc Pdfium Free pathPdf using var pdf

Pdfium.Net.Free 支持

  • .NETFramework 4.0

  • .NETFramework 4.5

  • .NETStandard 2.0

可以和PdfiumViewer.Free共同使用预览pdf,也可以直接引用Pdfium.Net.Free 操作pdf,解决部分.NetCore 调用的问题,Pdfium.Net.Free封装了现有Pdfium的函数,实现了部分操作pdf的功能,部分功能等待后续~~

项目地址:

Pdfium.Net:https://github.com/1000374/Pdfium.Net

PdfiumViewer:https://github.com/1000374/PdfiumViewer

打开PDF:

var pathPdf = "./Pdfium.NetTests/resources/about_blank.pdf";
using (var doc = PdfDocument.Load(new MemoryStream(File.ReadAllBytes(pathPdf))))
{
}

创建PDF 添加页面:

using (var doc = PdfDocument.CreateNew())
{
    doc.Pages.Add(612, 792);
}

添加文字:

using (var doc = PdfDocument.CreateNew())
{
    var fontPath = @"c:\Windows\fonts\simhei.ttf";
    doc.LoadFont(fontPath);
    var cSharpString = "!you ok 这是第一句。 这是第二行。a you ok";
    var page = doc.Pages.Add(612, 792);
    page.AddString(cSharpString, 10, 50, 12, Color.Black);
    doc.Save("./Pdfium.NetTests/AddString.pdf");
}

添加水印:

using (var doc = PdfDocument.CreateNew())
{
    doc.Pages.Add(612, 792);
    var fontPath = @"c:\Windows\fonts\simhei.ttf";
    var cSharpString = "我是水印";
    doc.LoadFont(fontPath, true, cSharpString);

    doc.WaterMark(cSharpString, 20, Color.FromArgb(50, 255, 0, 0), totleHeight: 120);
    doc.Save("./Pdfium.NetTests/WaterMark.pdf");
}

添加图片:

using (var doc = PdfDocument.CreateNew())
{
    var imagePath = "./Pdfium.NetTests/resources/mona_lisa.jpg";
    var page = doc.Pages.Add(612, 792);
    var stream = new MemoryStream(File.ReadAllBytes(imagePath));
    page.AddImage(stream, 50, 100);
    doc.Save("./Pdfium.NetTests/AddImage.pdf");
}

pdf每一页转成图片:

var pathPdf = "./Pdfium.NetTests/resources/annotation_highlight_long_content.pdf";
using (var doc = PdfDocument.Load(new MemoryStream(File.ReadAllBytes(pathPdf))))
    for (int i = 0; i < doc.PageCount; i++)
    {
        using (var image = doc.Pages[i].Render((int)doc.Pages[i].Width * 4 / 3, (int)doc.Pages[i].Height * 4 / 3, 96, 96, FpdfRotation.Rotate0, Wrapper.RenderFlags.Annotations | Wrapper.RenderFlags.CorrectFromDpi))
        {
         
        }
    }

pdf页局部转成图片:

var pathPdf = "./Pdfium.NetTests/resources/annotation_highlight_long_content.pdf";
using (var doc = PdfDocument.Load(new MemoryStream(File.ReadAllBytes(pathPdf))))
    for (int i = 0; i < doc.PageCount; i++)
    {
        using (var image = doc.Pages[i].Render(
            (int)doc.Pages[i].Width,
            (int)doc.Pages[i].Height,
            16, // x of the top/left of clipping rectangle
           283, // y of the top/left point of clipping rectangle
           555, // width of clipping reactangle
           316, // height of clipping reactangle
           0,//DPIx
           0,//DPIy
           FpdfRotation.Rotate0, // no rotation
           RenderFlags.None // no render flags
                               ))
        {

        }
    }

获取PDF内文字:

var pathPdf = "./Pdfium.NetTests/resources/text_render_mode.pdf";
using (var doc = PdfDocument.Load(new MemoryStream(File.ReadAllBytes(pathPdf))))
{
    var text = doc.Pages[0].GetPdfText();
}

获取PDF指定区域的文字:

 //page: 0,x: 235,y: 238,x1: 327,y1: 287 Text: fill
 var pathPdf = "./Pdfium.NetTests/resources/text_render_mode.pdf";
 using (var doc = PdfDocument.Load(new MemoryStream(File.ReadAllBytes(pathPdf))))
 {
     var text = doc.Pages[0].GetBoundedText(235, 238, 327, 287);
 }

拆分pdf:

var pathPdf = "./Pdfium.NetTests/resources/viewer_ref.pdf";
using (var doc = PdfDocument.Load(new MemoryStream(File.ReadAllBytes(pathPdf))))
{
 for (int i = 0; i < doc.PageCount; i++)
  {
   var doci = doc.GetPDFPage(i);//可多页拆分
  }
}

合并pdf:

var pathPdf = "./Pdfium.NetTests/resources/viewer_ref.pdf";
using (var doc = PdfDocument.Load(new MemoryStream(File.ReadAllBytes(pathPdf))))
using (var doc1 = PdfDocument.Load(new MemoryStream(File.ReadAllBytes(pathPdf))))
{
  doc.MergePDF(doc1);
}

插入pdf:

 var pathPdf = "./Pdfium.NetTests/resources/viewer_ref.pdf";
 var pathPdf1 = "./Pdfium.NetTests/resources/zero_length_stream.pdf";
using (var doc = PdfDocument.Load(new MemoryStream(File.ReadAllBytes(pathPdf))))
using (var doc1 = PdfDocument.Load(new MemoryStream(File.ReadAllBytes(pathPdf1))))
{
  doc.ImportPage(doc1, 1);
  var w = doc1.Pages[0].Width;
  var w1 = doc.Pages[1].Width;
 }

多页pdf合并成1页:

var pathPdf = "./Pdfium.NetTests/resources/rectangles_multi_pages.pdf";
using (var doc = PdfDocument.Load(new MemoryStream(File.ReadAllBytes(pathPdf))))
{
  using (var doc1 = doc.ImportNPagesToOne(612 * 2, 792))
}

打印:

 var printer = new PdfPrinter("Microsoft Print To PDF");
 //printer.Print(fileName);
 printer.Print(fileName, documentName: "with name");

  

标签:--,doc,Pdfium,Free,pathPdf,using,var,pdf
From: https://www.cnblogs.com/xiaohemiao/p/17986777

相关文章

  • cloc 安装
    下载http://cloc.sourceforge.net/修改名称cloc.exe环境变量用户变量是由程序的用户自行定义和使用的变量,作用范围局限于程序的特定部分或特定函数内部;而系统变量是由操作系统或编程语言提供的全局变量,包含了程序执行环境的一些重要信息,可以在整个程序中访问。可以计算了......
  • 从 Greenplum 到 Databend,万全网络数据库平台架构演进
    作者:代城万全网络高级工程师,负责万全网络数据平台整体架构研发工作,拥有超过7年的大数据相关技术研发经验,一直关注着开源和云技术的发展。万全网络科技有限公司是一家专注于B端电商物流供应链的公司。致力于为客户提供全面的供应链解决方案,涵盖从产品采购到最终配送的全程......
  • 朋友圈运营分享-发圈时间
    ......
  • 研运干货|平台工程、应用可观测性趋势下,质量管理的应对之策
    “为变化做好准备。”这是当下对所有人的一句很重要的话,尤其是对于处在高速迭代与日新月异的技术工程领域的我们。最近,Gartner在2023十大技术趋势的报告中提到了平台工程(Platform Engineering)和应用可观测性(Applied Observability)。 本文将通过对这两大战略性技术趋势点的进行剖......
  • openGauss学习笔记-207 openGauss 数据库运维-常见故障定位案例-btree 索引故障情况下
    openGauss学习笔记-207openGauss数据库运维-常见故障定位案例-btree索引故障情况下应对策略207.1btree索引故障情况下应对策略207.1.1问题现象偶发索引丢失错误,报错如下。ERROR:index'xxxx_index'containsunexpectedzeropage或ERROR:index'pg_xxxx_index'cont......
  • 无涯教程-Rust - 文件输入&输出
    除了对控制台进行读写之外,Rust还允许对文件进行读写,File结构代表一个文件,它允许程序对文件执行读写操作,File结构中的所有方法均返回io::Result枚举的变体。写入文件以下程序创建文件"data.txt",create()方法用于创建文件,如果文件创建成功,该方法将返回文件句柄,最后一行write_a......
  • Stream流操作示例
    1privatestaticdoubleoneMoney;2privatestaticdoubletwoMoney;3privatestaticdoublesumMoney;45publicstaticvoidmain(String[]args){6List<Employee>list1=newArrayList<>();7list1.add(new......
  • 常用样式--字体
    字体系列(FontFamily):font-family:"Helvetica","Arial",sans-serif;字体大小(FontSize):font-size:16px;font-size:1.5em;字体粗细(FontWeight):font-weight:600;字体样式(FontStyle):font-style:normal;font-style:italic;斜体......
  • 笨办法学 Java(四)
    原文:LearnJavaTheHardWay译者:飞龙协议:CCBY-NC-SA4.0练习55:记录数组记录很棒,数组更好,但是当你把记录放入数组时,这个生活中几乎没有你不能编码的东西。1classStudent2{3Stringname;4intcredits;5doublegpa;6}78publicclass......
  • 洛谷题单指南-模拟和高精度-P1045 [NOIP2003 普及组] 麦森数
    原题链接:https://www.luogu.com.cn/problem/P1045题意解读:要计算2p-1的位数和最后500位,实际上只需要计算2p,两者位数一致,前者比后者个位减1即可,且个位肯定不会是0,比较容易处理。解题思路:如果直接采用高精度乘法计算2p,p最大3.1*106,高精度所用数组最长大概9*105,一共最多计算3.......