PDF文档基于字典、数组、流等对象。
这个高级示例演示了如何直接处理这些底层PDF对象。使用此功能可实现PDFSharp中尚未实现的PDF功能,例如向文档添加“打开操作”。
//获取示例PDF文件的新副本 string filename = "Portable Document "; (("../../../../PDFs/", filename), ((), filename), true); //将文档读取到内存中进行修改 PdfDocument document = (filename); //当前版本的pdfsharp不支持 / [行动]。行动将在未来的版本中出现,但如果您需要的话 //现在,您可以“手工”制作它们。 / / //此示例直接用于PDF对象,因此了解 //需要PDF的结构。 //如果您不熟悉可移植文档格式,请先阅读 //至少在Adobe的PDF参考中第3章 //(/public/developer/pdf/index_reference.html)。 //如果你能读德语,我建议你读“die postscript& //pdf bibel,一本比骨干土坯有趣得多的书 //书籍(/de/produkte/mehr/bibel/)。 / / //示例任务是向文档添加“open action”,以便 //从第3页的内容开始,放大到刚好适合 //窗口中页面的高度。 //首先,我们必须创建一个定义操作的新字典。 PdfDictionary dict = new PdfDictionary(document); //根据PDF引用,字典需要两个元素。 //指定“goto”操作的键, //和描述目标的键/D。 γ //添加一个名称作为key/s的值很容易。 ["/S"] = new PdfName("/GoTo"); // T这是一个数组内容. PdfArray array = new PdfArray(document); 这使得/对象数组的一个直接的词典。 ["/D"] = array; //现在将元素添加到数组中。根据PDF参考文件 //对于作为“goto”操作目标的页,必须是3。 //第一个元素是对目标页的间接引用。 //要添加对第三页的间接引用,首先需要 //该页的pdfxref对象。 //(页面集合中的索引基于零,因此页面[2]) PdfXRef xref = ([2]); //添加对第三页的引用作为第一个数组元素。 //添加外部参照(而不是pdfpage对象本身)使其成为 //间接引用。 (xref); 在第二个元素/冰淇淋/两个名字fitv vertically表示“配合”。 (new PdfName("/FitV")); ///FITV需要水平坐标,该坐标将定位在 //窗口的左边缘。我们设置了-32768,因为Acrobat使用了这个值 //显示整页(如果窗口是 //小到需要水平滚动条)。 (new PdfInteger(-32768)); //现在操作字典已经完成,我们可以将其添加到 //文档的对象表。 //向对象表中添加对象会使其成为间接对象。 (dict); //最后,我们必须将操作字典添加到的/openaction键 //文档目录作为间接值。 ["/OpenAction"] = (dict); //使用pdfshap,我们从不处理对象编号。我们只是把 //对象放在一起,pdfshap执行其余操作。 // 保存 (filename); // 预览 (filename);