全能PDF:Pdfium.Net SDK 2023-03-18 Crack

Pdfium.Net SDK 是领先的 .Net 库,用于生成、操作和查看可移植文档格式的文件。我们提供高级 c# / VB.Net API,用于在 WEB 服务器或任何其他服务器系统上动态创建 pdf,并在现有桌面或 WEB 应用程序中实现“另存为 PDF”功能。

 

入门:C# 代码示例

  • 即时创建 PDF 文档
  • 从多个图像生成 PDF
  • 使用 C# 打印 PDF 文件
  • 在 C# 中从 PDF 中提取文本
  • 使用 C# 从 Pdf 中提取文本坐标
  • 使用 .Net C# 从 Pdf 文件中提取图像
  • 在 PDF 文件中搜索文本
  • 异步搜索文本
  • 在 C# 中拆分 PDF
  • 使用 C# 合并 PDF
  • 将 PDF 渲染为图像
  • 填写可编辑的 PDF 字段并从中提取数据

如何使用 C# 动态创建 PDF

/// <summary>
/// Create PDF Document on The Fly in C# using Pdfium.Net SDK Library
/// </summary>
public void CreatePdf()
{
    // The PDF coordinate system origin is at the bottom left corner of the page. 
    // The X-axis is pointing to the right. The Y-axis is pointing in upward direction.
    // The sizes and coordinates in this method are given in the inches.

    // Step 1: Initialize PDF library and create empty document
    // Return value: PdfDocument main class
    PdfCommon.Initialize();
    var doc = PdfDocument.CreateNew();  // Create a PDF document

    // Step 2: Add new page
    // Arguments: page width: 8.27", page height: 11.69", Unit of measure: inches
    //  The PDF unit of measure is point. There are 72 points in one inch.
    var page = doc.Pages.InsertPageAt(doc.Pages.Count, 8.27f * 72, 11.69f * 72);

    // Step 3: Add graphics and text contents to the page
    // Insert image from file using standart System.Drawing.Bitmap class
    using (PdfBitmap logo = PdfBitmap.FromFile(@"e:\63\logo_square.png"))
    {
        PdfImageObject imageObject = PdfImageObject.Create(doc, logo, 0, 0);
        //image resolution is 300 DPI and location is 1.69 x 10.0 inches.
        imageObject.Matrix = new FS_MATRIX(logo.Width * 72 / 300, 0, 0, logo.Height * 72 / 300, 1.69 * 72, 10.0 * 72);
        page.PageObjects.Add(imageObject);
    }

    // Create fonts used for text objects
    PdfFont calibryBold = PdfFont.CreateFont(doc, "CalibriBold");
    // Insert text objects at 7.69"; 11.02" and font size is 25
    PdfTextObject textObject = PdfTextObject.Create("Sample text", 1.69f * 72, 11.02f * 72, calibryBold, 25);
    textObject.FillColor = FS_COLOR.Black;
    page.PageObjects.Add(textObject);

    // Step 5: Generate page content and save pdf file
    // argument: PDF file name
    page.GenerateContent();
    doc.Save(@"e:\63\sample_document.pdf", SaveFlags.NoIncremental);
}
 

Pdfium.Net SDK Library 允许开发人员在 C# 中轻松创建 PDF 文档。此示例显示可以使用页面对象动态创建 PDF 文档。

您可以创建多个页面对象并将它们放置在页面的任何位置。页面对象有几种类型:路径、表单、图像和文本对象。

如何使用 C# 以编程方式从一组图像生成 PDF

/// <summary>
/// Generate PDF document From Multiple Images in C# using PDF Library
/// </summary>
public void GeneratePdf()
{
    //Initialize C# PDF Library
    PdfCommon.Initialize();
    //Create a PDF document
    using (var doc = PdfDocument.CreateNew())
    {
        //Read images
        var files = System.IO.Directory.GetFiles(@"c:\Images\", "*.*", 
                    System.IO.SearchOption.AllDirectories);
        foreach (var file in files)
        {
            //Create empty PdfBitmap
            using (PdfBitmap pdfBitmap = PdfBitmap.FromFile(file))
            {
                //Create Image object
                var imageObject = PdfImageObject.Create(doc, pdfBitmap, 0, 0);
                //Calculate size of image in PDF points
                var size = CalculateSize(pdfBitmap.Width, pdfBitmap.Height);
                //Add empty page to PDF document
                var page = doc.Pages.InsertPageAt(doc.Pages.Count, size);
                //Insert image to newly created page
                page.PageObjects.Add(imageObject);
                //set image matrix
                imageObject.Matrix = new FS_MATRIX(size.Width, 0, 0, size.Height, 0, 0);
                //Generate PDF page content to content stream
                page.GenerateContent();
            }
        }
        // Save  PDF document as "saved.pdf" in no incremental mode
        doc.Save(@"c:\test.pdf", SaveFlags.NoIncremental);
    }
}
/// <summary>
/// The function takes width and height of the bitmap in pixels as well as 
/// horizontal and vertical DPI and calculates the size of the PDF page. 
/// To understand the conversion you should know the following:
///     One inch contains exactly 72 PDF points;
///     DPI of the scanned image may vфry and depends on scanning resolution
/// <summary>
private FS_SIZEF CalculateSize(int width, int height, float dpiX=300, float dpiY=300)
{
    return new FS_SIZEF()
    {
        Width = width * 72 / dpiX,
        Height = height * 72 / dpiY
    };
}
 

此示例展示了如何使用简单的 C# 代码和 PDF 库从一堆扫描图像生成 PDF 文档。

如何在 C# 中打印 PDF 文件

/// <summary>
/// Printing PDF Files in C# using PDF Library
/// </summary>
public void PrintPdf()
{
    var doc = PdfDocument.Load("c:\test.pdf");  // Read PDF file
    var printDoc = new PdfPrintDocument(doc);
    printDoc.Print();
}
C#
复制

上面的代码将 PDF 文档打印到默认打印机。还显示带有打印进度的标准打印对话框。如果你想抑制进度窗口,请修改如下所示的代码。

public void PrintPdf()
{
    var doc = PdfDocument.Load("c:\test.pdf");
    var printDoc = new PdfPrintDocument(doc);
    PrintController printController = new StandardPrintController();
    printDoc.PrintController = printController;
    printDoc.Print(); // C# Print PDF document
}
C#
复制

PdfPrintDocument派生自标准PrintDocument类,因此您可以使用 .Net Framework 的打印对话框 (PrinterDialog) 根据用户输入配置 PrintDocument。

public void OnPrintClick()
{
	if (PdfViewer.Document.FormFill != null)
		PdfViewer.Document.FormFill.ForceToKillFocus();

	//create an instance of PrintDocument class
	var printDoc = new PdfPrintDocument(PdfViewer.Document); // create an instance of Print document class that is used for printing PDF document.

	//Create a standard print dialog box
	var dlg = new PrintDialog();
	dlg.AllowCurrentPage = true;
	dlg.AllowSomePages = true;
	dlg.UseEXDialog = true;
	//sets the PrintDocument used to obtain PrinterSettings.
	dlg.Document = printDoc;
	//show PrinterDialog and print pdf document
	if (dlg.ShowDialog() == DialogResult.OK)
		printDoc.Print();   // C# Print PDF
}

在 C# 中读取 PDF 文件并从中提取文本

/// <summary>
/// Read PDF File and Extract Text From it in C#
/// </summary>public void ExtractText()
{
    //Initialize the SDK library
    //You have to call this function before you can call any PDF processing functions.
    PdfCommon.Initialize();

    //Open and load a PDF document from a file.
    using (var doc = PdfDocument.Load(@"c:\test001.pdf")) // C# Read PDF File
    {
        foreach (var page in doc.Pages)
        {
            //Gets number of characters in a page or -1 for error.
            //Generated characters, like additional space characters, new line characters, are also counted.
            int totalCharCount = page.Text.CountChars;

            //Extract text from page to the string
            string text = page.Text.GetText(0, totalCharCount);

            page.Dispose();
        }
    }
}

Pdfium.Net SDK 允许开发人员轻松地从几乎任何 PDF 文件中提取全文。

如何从 PDF 中提取文本坐标

/// <summary>
/// Extract Text Coordinates from Pdf in C# using PDF Library
/// </summary>
public void ExtractTextInfo()
{
    //Initialize the SDK library
    //You have to call this function before you can call any PDF processing functions.
    PdfCommon.Initialize();

    //Open and load a PDF document from a file.
    using (var doc = PdfDocument.Load(@"c:\test001.pdf")) // C# Read PDF File
    {
        //Get second page from document
        using (var page = doc.Pages[1])
        {
            //Extract text information structure from the page
            // 10 - Index for the start characters
            // 25 - Number of characters to be extracted
            var textInfo = page.Text.GetTextInfo(10, 25);

            //Gets text from textInfo strtucture
            string text = textInfo.Text;

            //Gets a collection of rectangular areas bounding specified text.
            var rects = textInfo.Rects;
        }
    }
}

Pdfium.Net SDK 还允许开发人员轻松地从任何 PDF 文件中提取文本坐标。

如何在 PDF 文件中搜索文本

/// <summary>
/// Search for a Text in a PDF File in C# With Pdfium.Net SDK Library
/// </summary>
public void Search()
{
    //Open PDF document
    using (var doc = PdfDocument.Load(@"d:\0\test_big.pdf")) // Read PDF document and enumerate pages
    {
	    //Enumerate pages
	    foreach(var page in doc.Pages)
	    {
		    var found = page.Text.Find("text for search", FindFlags.MatchWholeWord, 0);
		    if (found == null)
			    return; //nothing found
		    do
		    {
			    var textInfo = found.FoundText;
			    foreach(var rect in textInfo.Rects)
			    {
				    float x = rect.left;
				    float y = rect.top;
				    //...
			    }
		    } while (found.FindNext());

		    page.Dispose();
	    }
    }
}

此示例说明如何使用简单的 C# 代码和 PDF 库在 PDF 文档中搜索文本。

如何将PDF文件分割成小文件

/// <summary>
/// Split PDF in C# using PDF Library
/// </summary>
public void SplitDocument()
{
    //Initialize the SDK library
    //You have to call this function before you can call any PDF processing functions.
    PdfCommon.Initialize();

    //Open and load a PDF document from a file.
    using (var sourceDoc = PdfDocument.Load(@"c:\test001.pdf")) // C# Read PDF File
    {
        //Create one PDF document for pages 1-5.
        using (var doc = PdfDocument.CreateNew())
        {
            //Import pages from source document
            doc.Pages.ImportPages(sourceDoc, "1-5", 0);
            //And save it to doc1.pdf
            doc.Save(@"c:\doc1.pdf", SaveFlags.Incremental);
        }

        //Create another PDF document for pages 5-10.
        using (var doc = PdfDocument.CreateNew())
        {
            //Also import pages
            doc.Pages.ImportPages(sourceDoc, "5-10", 0);
            //And save them too
            doc.Save(@"c:\doc2.pdf", SaveFlags.Incremental);
        }
    }
}
 

下面的代码示例演示了如何使用 C# PDF 库来拆分 PDF 文档。

 

在 C# 中将多个 PDF 文件中的选定页面合并为一个

/// <summary>
/// Merge PDFs in C# using PDF Library
/// </summary>
public void MergePdf()
{
    //Initialize the SDK library
    //You have to call this function before you can call any PDF processing functions.
    PdfCommon.Initialize();

    //Open and load a PDF document in which will be merged other files
    using (var mainDoc = PdfDocument.Load(@"c:\test001.pdf")) // C# Read source PDF File #1
    {
        //Open one PDF document.
        using (var doc = PdfDocument.Load(@"c:\doc1.pdf")) //Read PDF File #2
        {
            //Import all pages from document
            mainDoc.Pages.ImportPages(
                doc,
                string.Format("1-{0}", doc.Pages.Count),
                mainDoc.Pages.Count
                );
        }

        //Open another PDF document.
        using (var doc = PdfDocument.Load(@"c:\doc2.pdf"))
        {
            //Import all pages from document
            mainDoc.Pages.ImportPages(
                doc,
                string.Format("1-{0}", doc.Pages.Count),
                mainDoc.Pages.Count
                );
        }

        mainDoc.Save(@"c:\ResultDocument.pdf", SaveFlags.NoIncremental);


    }
}
C#
复制
 

使用 C# PDF 库,您不仅可以将多个 PDF 文件合并为一个文件,还可以从源文件中选择特定页面并将它们组合在一个 PDF 文档中。

上面的代码显示了如何使用ImportPages操作来完成它。

如何以编程方式从 PDF 字段填充和提取数据

/// <summary>
/// Filling Editable PDF Fields and Extracting Data From Them using .Net PDF Library
/// </summary>
private void btnTest_Click(object sender, RoutedEventArgs e)
{
	var forms = new PdfForms();
	var doc = PdfDocument.Load(@"c:\test.pdf", forms); // C# Read PDF Document
	//doc.FormFill is equal to forms and can be used to get access to acro forms as well;

	int i = 0;
	foreach(var field in forms.InterForm.Fields)
	{
		if(field.FieldType == Patagames.Pdf.Enums.FormFieldTypes.FPDF_FORMFIELD_TEXTFIELD)
		{
			field.Value = "This is a field #" + (++i);
		}
	}
}

此示例代码演示了如何使用 .Net PDF 库以编程方式填写 pdf 文档中的所有可编辑表单。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/9404.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汽车网络管理的意义和分类

网络管理的意义&#xff1a; 1. 工作状态协同&#xff1a; 在任意多ECU节点网络工作时&#xff0c;对同一网络ECU的通信状态做统一的管理&#xff0c;保证各个ECU节点可以在条件满足的时候进入低功耗模式 2. 信息交互协同&#xff1a; 可以根据NM报文状态判定特定ECU的运行状态…

ESP32设备驱动-MPL3115A2压力传感器驱动

MPL3115A2压力传感器驱动 文章目录 MPL3115A2压力传感器驱动1、MPL3115A2介绍2、硬件准备3、软件准备4、驱动实现1、MPL3115A2介绍 MPL3115A2 是一款紧凑型压阻式绝对压力传感器,具有 I2C 数字接口。 MPL3115A2 具有 20 kPa 至 110 kPa 的宽工作范围,该范围涵盖了地球上的所…

CarSim仿真快速入门(二十四)-CarSimSimulink联合仿真中的输入和输出IO接口

导入和导出数组用于Simulink以外的外部仿真工具。同样的设置也用于LabVIEW、ASCET、FMI/FMU以及可能用MATLAB、Python和其他语言编写的自定义程序。 在所有这些情况下,I/O通道。导入和I/O通道。输出屏幕用于配置VS数学模型以满足外部仿真工具的通信要求。 I/O 通道:输出 输…

[攻城狮计划(三)] —— 看门狗定时器

&#x1f64c;秋名山码民的主页 &#x1f602;一个打过一年半的oier&#xff0c;写过一年多的Java&#xff0c;现在致力于学习iot应用的普通本科生 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f64f;作者水平有限&#xff0c;如发现…

双非二本如何入职腾讯?只需要做好这些准备就能进大厂?

每年的招聘旺季在“金三银四”和“金九银十”这2段时间&#xff0c;许多在春招中没有找到心仪大厂offer的测试小伙伴最近有私信我&#xff0c;想要了解如何在秋招中一举获得心仪大厂的青睐&#xff0c;那今天我就来和大家扒一扒那些大厂自动化测试面试题以及注意事项哦&#xf…

Python解题 - CSDN周赛第43期

感觉周赛越来越无趣了&#xff0c;基本都是考过的题目。上期周赛也是&#xff0c;4道题都曾考过&#xff0c;问哥也都写过题解&#xff0c;奖品也不吸引人&#xff0c;实在没什么好写了。 回想前段时间用力过猛&#xff0c;刷了C站大部分OJ题&#xff0c;以致于现在看到题目就直…

Elasticsearch:索引状态是红色还是黄色?为什么?

在我之前文章 “Elasticsearch&#xff1a;如何调试集群状态 - 定位错误信息” 中&#xff0c;我有详细介绍如何调试集群状态。在今天的文章中&#xff0c;我将详细介绍如何故障排除和修复索引状态。 Elasticsearch 是一个伟大而强大的系统&#xff0c;特别是创建一个可扩展性极…

MySQL函数、视图、存储过程及触发器

前言 MySQL在我们工作中都会用到&#xff0c;那么我们最常接触的就是增删改查&#xff0c;而对于增删改查来说&#xff0c;我们更多的是查询。但是面试中&#xff0c;面试官又不会问你什么查询是怎么写的&#xff0c;都是问一些索引啊&#xff0c;事务啊&#xff0c; 底层结构…

Hbase 介绍

Hbase 简介 Hbase 是一个开源的非关系型的分布式数据库&#xff0c;运用于HDFS文件系统之上&#xff0c;可以容错地存储海量稀疏的数据。Hbase是一个高可靠、高性能、面向列、可伸缩、实时读写的分布式数据库&#xff0c;主要用来存储非结构化和半结构化的松散数据 。 Hbase的…

ChatGPT中文在线官网-如何与chat GPT对话

怎么下载ChatGPT中文版 ChatGPT是一种基于Transformer架构的自然语言处理技术&#xff0c;其中包含了多个预训练的中文语言模型。这些中文ChatGPT模型大多数发布在Github上&#xff0c;可以通过Github的源码库来下载并使用&#xff0c;包括以下几种方式&#xff1a; 下载预训练…

高并发写场景:库存扣减

在设计商品的库存扣减逻辑时&#xff0c;可能一开始想到的(伪)代码是&#xff1a; <?php /*** 商品库存扣减** param int $skuId 商品ID* param int $num 库存扣减数量** return bool 扣减成功返回true&#xff0c;失败返回false*/ function stock_decr($skuId, $num) {…

Go是一门面向对象编程语言吗

本文首发自「慕课网」&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"&#xff01; 作者&#xff1a;tonybai|慕课网讲师 Go语言已经开源13年了&#xff0c;在近期TIOBE发布的2023年3月份的编程语言排行榜中&#xff0c;…

【hello Linux】Linux基本指令(下)

目录 1. more 指令&#xff1a;分批查看文件 1.1 more -n 文件名&#xff1a;查看文件前 n 行 1.2 more 文件名&#xff1a;屏幕输满 补充指令&#xff1a; 2. less 指令 2.1 less -N 文件名 2.2 /字符串&#xff1a;向下搜索“字符串”的功能 3. head 指令 3.1 head 文件名 3…

4.Java逻辑控制语句

Java逻辑控制语句 在实际生活中&#xff0c;我们的生活不是一成不变的&#xff0c;很多时候需要我们去选择&#xff0c;大到人生的十字路口&#xff0c;小到今天晚上吃什么&#xff0c;选择无处不在。小的选择决定了我们一件小事的走向&#xff0c;大的选择可能会改变我们人生…

基于多目标粒子群优化算法的计及光伏波动性的主动配电网有功无功协调优化(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

JavaScript -- 对象

1. 概念 对象是 JavaScript 数据类型的一种&#xff0c;可以理解为是一种无序的数据集合 2. 对象的使用 2.1 对象的声明 let 对象名 {} let 对象名 new Object() 2.2 属性和方法 数据描述性的信息称为属性&#xff0c;如人的姓名、身高、年龄、性别等&#xff0c;一般是…

蓝桥杯之贪心

蓝桥杯之贪心1055.股票买卖II104.货仓选址AcWing112.雷达设备1235.付账问题1239.乘积最大K是奇数&#xff0c;需要转化为K是偶数的情况&#xff0c;于是先取一个数&#xff0c;为了使得结果最大&#xff0c;取最大的数&#xff08;正数的话绝对值最大&#xff0c;负数的话(K是奇…

java版工程项目管理系统源码 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离 功能清单

ava版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示1…

托福高频真词List12 // 附托福TPO阅读真题

目录 4.5单词 生词 熟词 真题 4.5单词 生词 irreversiblepermanentadj.无法挽回的&#xff0c;永久的manipulateskillfully usedhandlev.操控monumentalenormousgreat and significantadj.极大的&#x1f9f8;retardslowv.放缓&#x1f9f8;subsistencesurvivaln.生存 wit…

Redis应用问题及解决

目录 一.缓存穿透 1.1 问题描述 1.2 解决方案 二.缓存击穿 2.1 问题描述 2.2 解决方案 三.缓存雪崩 3.1 问题描述 3.2 解决方案 当数据库压力变大&#xff0c;导致服务访问数据库响应变慢&#xff0c;导致服务的压力变大&#xff0c;最终可能导致服务宕机。 一.缓存穿透 1.1 …