tl; dr:基本上我只是想知道设计PDF文档的最佳/最简单方法是什么?使用带代码的iTextSharp实际设计整个PDF文档是远程合法的(即不加载外部文件)?我希望最终结果看起来类似于具有各种颜色,边框,图像和所有内容的网页.或者你必须依赖其他文件,如.doc,.html文件来实现一个好的设计?
最初我以为我会使用HTML标记来生成PDF,但是当看到样式/ CSS时支持看起来有多糟糕,所以我在重新考虑整个情况.
这让我想到,为什么甚至使用HTML标记或.doc(x)文件来创建PDF设计,当我可以在PDF中正确地执行它而不必依赖于没有任何实际用途的各种文件.
我开始查看本指南(它是几个部分) http://www.c-sharpcorner.com/uploadfile/f2e803/basic-pdf-creation-using-itextsharp-part-i/
指南的一部分:
using (MemoryStream ms = new MemoryStream()) { Document document = new Document(PageSize.A4, 25, 25, 30, 30); PdfWriter writer = PdfWriter.GetInstance(document, ms); document.Open(); document.Add(new Paragraph("Hello World")); document.Close(); writer.Close(); Response.ContentType = "pdf/application"; Response.AddHeader("content-disposition", "attachment;filename=First PDF document.pdf"); Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); }
并获得了关于生成PDF并设计它们的基本知识.
但是有可能以这种方式生成和设计大型PDF文档,是否有更多适当的指南或类似的所有各种命令来生成文本,图像,边框和一切,因为我没有关于使用代码生成PDF的真正线索.
问题太宽泛了,所以我只能给你一个非常广泛的答案.
选项1:使用iText的高级对象创建布局.有无数的应用程序PdfPTable
用于生成复杂的报告.例如:德国铁路公司的时间表是从头开始通过代码创建的; 比利时电信公司的发票是这样创建的......这种方法的优点是你可以真正微调布局.缺点是您需要在需要更改布局时立即更改源代码.
选项2:通过创建AcroForm模板来创建布局.此模板中的每个字段都有一个名称,并在特定页面上的确切位置(由其坐标定义)中可视化.填写这样一个表单的代码只包含少量几行.无论何时需要更改布局,都可以更改AcroForm模板.您无需更改代码.缺点是AcroForms非常静态.将其与纸质表格进行比较:您也不能以纸质形式插入行.
选项3:您使用XHTML格式创建数据,并在CSS中创建样式.负责为客户创建发票的比利时印刷公司将数据流式传输到非常简单的HTML文件中,这些文件涉及一系列表格,这些表格从不会超过少数几页.然后将这些文件与为每个客户不同的CSS一起提供给iText的XML工作者.这种方法的优点是当新客户加入时不需要额外的编程.这只是创建一个新CSS的问题.缺点是您受HTML格式的限制.基本逻辑还告诉您,您不应该期望URL2PDF:您是否尝试过打印网站?那么,该打印质量差,应该可以让您了解在尝试将HTML转换为PDF时遇到的问题.如果您预期它们,您可以获得良好的结果.如果你不......那是一个可怜的工匠,他责备他的工具......
选项4:使用XML Forms Architecture定义模板.此类模板通常使用Adobe LiveCycle Designer创建.将XSD输入LC Designer,结果为空格式,其中PDF格式充当XML流的容器.然后,您可以使用iText将包含符合XSD的数据的自定义XML注入PDF,并且可以使用XFA Worker来压缩此类表单.XFA Worker仅作为封闭源产品提供(提供者需要设置限制,因为接收者很少这样做).
选项5:现在XML Worker用于将XHTML + CSS和XFA转换为PDF(普通PDF,PDF/A,PDF/UA).您可以使用通用XML Worker引擎来支持您自己的XML格式.优势将是一个非常强大的引擎,您可以调整以满足您的确切需求.缺点是这涉及严重的前期开发投资.
选项6:使用第三方工具定义模板和使用iText的第三方服务器根据模板创建PDF.这种第三方工具的一个例子是由发明设计师开发的Scriptura.还有其他工具,但Inventive Designers是iText的客户,我们知道他们正确使用iText,而我们没有其他供应商的这种保证.