如何从Web应用程序生成纸质打印?
具体来说,我正在考虑更复杂的纸质文件,如文凭,发票和合同.包含框架,表格,徽标和页眉/页脚的可变页数.
今天我使用自定义表单和CSS用于某些事情,iTextSharp用于其他人(我使用asp.net和MS-SQL),但我认为这两种方法都非常耗时且很难在不同文档中保持一致.
还有更好的方法吗?
我正在尝试将JavaScript嵌入到使用iTextSharp创建的pdf中,如果它是代码中显示的文件,它工作得非常好.
但是当我尝试将javascript部分嵌入到内存流中时,它无法正常工作.iTextSharp是否有任何限制?
Dim js As New StringBuilder
Dim pdf As String = "c:\Print2Printer.pdf"
Dim writer As PdfWriter = PdfWriter.GetInstance(doc, New FileStream(pdf, FileMode.Create))
doc.Open()
js.Append("var pp = this.getPrintParams();")
js.Append("var iCopies = 2;")
js.Append("pp.interactive = pp.constants.interactionLevel.silent;")
js.Append("for ( var i = 0; i < 3; i++ ) { pp.firstPage = i; pp.lastPage = i;")
js.Append("this.print(pp);")
js.Append("}")
Dim jaction As PdfAction = PdfAction.JavaScript(js.ToString(), writer)
writer.AddJavaScript(jaction)
doc.Add(New Paragraph(pdfString))
doc.Close()
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用iTextSharp创建一个pdf文件.我的尝试将pdf的内容写入MemoryStream,因此我可以将结果写入文件和数据库BLOB.创建文件,大小约为21kB,当使用Notepad ++打开时,它看起来像一个pdf.但是我的PDF查看器说它已经被破坏了.这是一个小代码片段(只尝试写入文件,而不是数据库):
Document myDocument = new Document();
MemoryStream myMemoryStream = new MemoryStream();
PdfWriter myPDFWriter = PdfWriter.GetInstance(myDocument, myMemoryStream);
myDocument.Open();
// Content of the pdf gets inserted here
using (FileStream fs = File.Create("D:\\...\\aTestFile.pdf"))
{
myMemoryStream.WriteTo(fs);
}
myMemoryStream.Close();
Run Code Online (Sandbox Code Playgroud)
我犯的错误在哪里?
谢谢你,诺伯特
我想将一个PDFPCell数组添加到PDFPRow,然后将PDFPRow添加到PDFPTable,但我似乎无法在PDFPTable中找到这个方法.
但是有一个PDFPTable.AddCell
有任何想法吗?
我正在尝试使用ItextSharp中的PdfSmartCopy,但我在c#中找不到任何相关的例子.
我的意思是我有一个包含表单字段的pdf,并且这些字段增加了700kb到pdf文档的大小.没有表单字段的原始文档是100kb.欢迎任何其他sugestions,尤其是o一致地减少pdf大小.
(我使用adobe acrobat优化了生成的PDF,并将其减少到44kb.因此必须在某处出现故障.)有没有办法减少PDF大小?
编辑:FormFlatenning没有帮助.pdf模板文件仅包含文本,行和表,没有图像.
这是我的代码片段
PdfReader reader = new PdfReader(GetTemplateBytes());
pst = new PdfStamper(reader, Response.OutputStream);
var acroFields = pst.AcroFields;
pst.FormFlattening = true;
pst.FreeTextFlattening = true;
SetFieldsInternal(acroFields);
pst.Close();
Run Code Online (Sandbox Code Playgroud) 我想打开一个现有的pdf,添加一些文本然后使用itext sharp作为内容处理输出.我有以下代码.它落下的地方是我想输出内存流但需要filestream来打开原始文件.
这就是我所拥有的.显然,定义PdfWriter两次是行不通的.
public static void Create(string path)
{
var Response = HttpContext.Current.Response;
Response.Clear();
Response.ContentType = "application/pdf";
System.IO.MemoryStream m = new System.IO.MemoryStream();
Document document = new Document();
PdfWriter wri = PdfWriter.GetInstance(document, new FileStream(path, FileMode.Create));
PdfWriter.GetInstance(document, m);
document.Open();
document.Add(new Paragraph(DateTime.Now.ToString()));
document.NewPage();
document.Add(new Paragraph("Hello World"));
document.Close();
Response.OutputStream.Write(m.GetBuffer(), 0, m.GetBuffer().Length);
Response.OutputStream.Flush();
Response.OutputStream.Close();
Response.End();
}
Run Code Online (Sandbox Code Playgroud) 我正在使用iTextSharp从图像生成pdf-a文档.到目前为止,我还没有成功.
编辑:我正在使用iTextSharp生成PDF
我所做的就是用一些图像制作一个pdf文件(1a或1b,无论适合什么).这是我到目前为止提出的代码,但是当我尝试使用pdf-tools或validatepdfa验证它们时,我一直遇到错误.
这是我从pdf-tools获得的错误(使用PDF/A-1b验证): 编辑:MarkInfo和Color Space尚未运行.剩下的还可以
Validating file "0.pdf" for conformance level pdfa-1a
The key MarkInfo is required but missing.
A device-specific color space (DeviceRGB) without an appropriate output intent is used.
The document does not conform to the requested standard.
The document contains device-specific color spaces.
The document doesn't provide appropriate logical structure information.
Done.
Run Code Online (Sandbox Code Playgroud)
主流
var output = new MemoryStream();
using (var iccProfileStream = new FileStream("ToPdfConverter/ColorProfiles/sRGB_v4_ICC_preference_displayclass.icc", FileMode.Open))
{
var document = new Document(new Rectangle(PageSize.A4.Width, …Run Code Online (Sandbox Code Playgroud) 我有一个PDF生成代码,以前是以Portait模式下载的,后面的代码如下所示.
Document doc = new Document(PageSize.A4, 88f, 88f, 10f, 10f);
Run Code Online (Sandbox Code Playgroud)
这是正常的.
现在我需要将相同的PDF转换为横向模式,我用Google搜索并找到此代码.
Document doc = new Document(new Rectangle(288f, 144f), 10, 10, 10, 10);
doc.SetPageSize(iTextSharp.text.PageSize.A4.Rotate());
Run Code Online (Sandbox Code Playgroud)
但仍然以纵向模式显示.任何帮助赞赏.
我正在创建一个解析器,将Word文档转换为PDF,并在此过程中进行一些专门的处理.我选择使它成为一个递归解析器,以匹配OpenXml的结构.
我遇到了处理图像的一些问题.给定OpenXml的结构,图像始终是段落内的绘图元素.如果该段落直接在doc中,这样可以正常工作,基本上就是这样(对于这个例子来说,解开了递归):
using (var document = new Document(PageSize.A4))
{
PdfWriter.GetInstance(document, new FileStream(path, FileMode.Create));
document.Open();
var paragraph = new Paragraph();
var image = Image.GetInstance(@"C:\image1.jpg");
paragraph.Add(image);
document.Add(paragraph);
document.Close();
}
Run Code Online (Sandbox Code Playgroud)
此代码正确地将图像插入到文档中.当图像在表格内时会出现问题,这在我们正在处理的文档中很常见.OpenXml结构最终会像这样结束:
DocumentBody => Table => Cell => Paragraph => Drawing
所以在iTextSharp术语中,映射到:
Document => Table => Cell => Paragraph => Image
将带有图像的段落直接添加到单元格会生成一个空的零高度表.如果我添加块到该段时的形象出现,但大幅调整(小) - 我想不出什么是大小调整的依据是:
using (var document = new Document(PageSize.A4))
{
PdfWriter.GetInstance(document, new FileStream(path, FileMode.Create));
document.Open();
var paragraph = new Paragraph();
var image = Image.GetInstance(@"C:\image1.jpg");
paragraph.Add(new Chunk(image, 0, 0));
var table = new PdfPTable(1); …Run Code Online (Sandbox Code Playgroud) 您好我一直在使用itextSharp为dot.net中的所有pdf相关项目.我遇到了一个需要将PDF页面转换为图像的要求.我找不到任何这样的样品.我发现另一个工具ghostscript能够做到这个问题是我在共享主机上我不认为ghostscript将在服务器上运行,因为在我的本地机器我不得不手动将ghost脚本dll复制到system32文件夹在共享主机中是不可能的.
itextsharp ×10
c# ×7
asp.net ×4
pdf ×4
.net ×1
filestream ×1
itext ×1
javascript ×1
memorystream ×1
printing ×1