PDFsharp用法:处理PDF对象

PDF文档基于字典、数组、流等对象。

这个高级示例演示了如何直接处理这些底层PDF对象。使用此功能可实现PDFSharp中尚未实现的PDF功能,例如向文档添加“打开操作”。

//获取示例PDF文件的新副本
string filename = "Portable Document Format.pdf";
File.Copy(Path.Combine("../../../../PDFs/", filename), 
  Path.Combine(Directory.GetCurrentDirectory(), filename), true);
 
//将文档读取到内存中进行修改
PdfDocument document = PdfReader.Open(filename);
 
//当前版本的pdfsharp不支持

/ [行动]。行动将在未来的版本中出现,但如果您需要的话

//现在,您可以“手工”制作它们。

/ /

//此示例直接用于PDF对象,因此了解

//需要PDF的结构。

//如果您不熟悉可移植文档格式,请先阅读

//至少在Adobe的PDF参考中第3章

//(http://partners.adobe.com/public/developer/pdf/index_reference.html)。

//如果你能读德语,我建议你读“die postscript&

//pdf bibel,一本比骨干土坯有趣得多的书

//书籍(http://www.pdflib.com/de/produkte/mehr/bibel/index.html)。

/ /

//示例任务是向文档添加“open action”,以便

//从第3页的内容开始,放大到刚好适合

//窗口中页面的高度。
//首先,我们必须创建一个定义操作的新字典。
PdfDictionary dict = new PdfDictionary(document);
 
//根据PDF引用,字典需要两个元素。

//指定“goto”操作的键,

//和描述目标的键/D。

γ

//添加一个名称作为key/s的值很容易。
dict.Elements["/S"] = new PdfName("/GoTo");
 
// T这是一个数组内容.
PdfArray array = new PdfArray(document);
 
这使得/对象数组的一个直接的词典。
dict.Elements["/D"] = array;
 
//现在将元素添加到数组中。根据PDF参考文件

//对于作为“goto”操作目标的页,必须是3。

//第一个元素是对目标页的间接引用。

//要添加对第三页的间接引用,首先需要

//该页的pdfxref对象。

//(页面集合中的索引基于零,因此页面[2])
PdfXRef xref = PdfInternals.GetXRef(document.Pages[2]);
 
//添加对第三页的引用作为第一个数组元素。

//添加外部参照(而不是pdfpage对象本身)使其成为

//间接引用。
array.Elements.Add(xref);
 
在第二个元素/冰淇淋/两个名字fitv vertically表示“配合”。
array.Elements.Add(new PdfName("/FitV"));
 
///FITV需要水平坐标,该坐标将定位在

//窗口的左边缘。我们设置了-32768,因为Acrobat使用了这个值

//显示整页(如果窗口是

//小到需要水平滚动条)。
array.Elements.Add(new PdfInteger(-32768));
 
//现在操作字典已经完成,我们可以将其添加到

//文档的对象表。

//向对象表中添加对象会使其成为间接对象。
document.Internals.AddObject(dict);
//最后,我们必须将操作字典添加到的/openaction键

//文档目录作为间接值。
document.Internals.Catalog.Elements["/OpenAction"] = 
  PdfInternals.GetXRef(dict);
 
//使用pdfshap,我们从不处理对象编号。我们只是把

//对象放在一起,pdfshap执行其余操作。
 
// 保存
document.Save(filename);
// 预览
Process.Start(filename);

猜你喜欢

转载自blog.csdn.net/qqqqqqqqqq198968/article/details/86538722