FindTransformed.cs
// 完毕:
using System;
using System.IO;
using System.Drawing;
using System.Linq;
using GrapeCity.Documents.Common;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;
namespace DsPdfWeb.Demos
{
// 此示例加载由Transforms示例创建的PDF文件,
// 查找加载文档中所有出现的字符串,
// 并强调这些事件。该样本有两点值得关注:
// - 原始文档中的文本经过图形转换,
// 但是 FindText 方法提供的四边形可以让您轻松
// 即使在这种情况下也要突出显示发现。
// - 该示例在页面的索引 0 处插入新的内容流,
// 这可确保突出显示在原始内容下绘制。
// (可以使用相同的方法向现有文件添加水印等。)
public class FindTransformed
{
public int CreatePDF(Stream stream)
{
// 在处理加载的 PDF 时,原始文件流必须保持打开状态,
// 详情请参阅@{LoadPDF}:
using var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "Transforms.pdf"));
var doc = new GcPdfDocument();
doc.Load(fs);
// 使用区分大小写的搜索查找所有“文本绘制于”:
var finds = doc.FindText(
new FindTextParams("Text drawn at", false, true),
OutputRange.All);
// 突出显示所有找到的内容:首先,查找找到该文本的所有页面
var pgIndices = finds.Select(f_ => f_.PageIndex).Distinct();
// 循环页面,在每个页面上在索引 0 处插入一个新的内容流,
// 这样我们的亮点就在原始内容之下:
foreach (int pgIdx in pgIndices)
{
var page = doc.Pages[pgIdx];
PageContentStream pcs = page.ContentStreams.Insert(0);
var g = pcs.GetGraphics(page);
foreach (var find in finds.Where(f_ => f_.PageIndex == pgIdx))
{
foreach (var ql in find.Bounds)
{
// 注意用于填充多边形的纯色:
g.FillPolygon(ql, Color.CadetBlue);
g.DrawPolygon(ql, Color.Blue);
}
}
}
// 完毕:
doc.Save(stream);
return doc.Pages.Count;
}
}
}